Name: series-workflowxxr2c Phase: Succeeded StartedAt: 2026-09-03 01:47:34 +0000 UTC FinishedAt: 2026-09-03 05:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[0] Phase: Succeeded StartedAt: 2026-09-03 01:47:34 +0000 UTC FinishedAt: 2026-09-03 01:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 01:47:34 +0000 UTC FinishedAt: 2026-09-03 01:50:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "SYSFS" ], "series_id": "e48a2be8-b161-4370-84d2-4c37fd5436c3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_mempolicy_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgemVybyBjaGVjayBmb3IgJiMzOTt3ZWlnaHRfdG90YWwmIzM5OyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB0byBwcmV2ZW50IGEgZGl2aXNpb24tYnktemVybyBrZXJuZWwgY3Jhc2ggd2hlbiBjYWxjdWxhdGluZyAmIzM5O3JvdW5kcyYjMzk7IGFuZCAmIzM5O2RlbHRhJiMzOTsgKHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbCkuIFRoZSBtZW1vcnkgYnVmZmVyICYjMzk7d2VpZ2h0cyYjMzk7IGlzIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MoKSBhbmQgZnJlZWQgYmVmb3JlIHJldHVybmluZyBvbiB0aGlzIGVycm9yIHBhdGguIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBEaXZpc2lvbi1ieS16ZXJvIGNyYXNoZXMgYXJlIGRldGVjdGVkIHdpdGhvdXQgS01TQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHdoZW4gdGhlIHRvdGFsIHdlaWdodCBvZiB0aGUgY2FuZGlkYXRlIE5VTUEgbm9kZXMgaXMgemVyby4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIE5VTUEgbWVtb3J5IHBvbGljeSBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YjYxOWMwNWFkMWUzMTQ2MjI2YWM0MDFkOTI4MGQ0OGI1Nzc0YWE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMTo0OToyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCA1MDFlMGI4MGQ3ZGExLi44Yjk3MjhlN2E1OTdlIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jXG5AQCAtMjcwNyw2ICYjNDM7MjcwNywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKVxuIFx0XHR3ZWlnaHRfdG90YWwgJiM0Mzs9IHdlaWdodHNbbm9kZV07XG4gXG4mIzQzO1x0aWYgKCF3ZWlnaHRfdG90YWwpIHtcbiYjNDM7XHRcdGtmcmVlKHdlaWdodHMpO1xuJiM0MztcdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxuIFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHdoZW4gdGhlIHRvdGFsIHdlaWdodCBvZiB0aGUgY2FuZGlkYXRlIE5VTUEgbm9kZXMgaXMgemVyby4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIE5VTUEgbWVtb3J5IHBvbGljeSBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YjYxOWMwNWFkMWUzMTQ2MjI2YWM0MDFkOTI4MGQ0OGI1Nzc0YWE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwMTo0OToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggNTAxZTBiODBkN2RhMS4uOGI5NzI4ZTdhNTk3ZSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmMKQEAgLTI3MDcsNiAmIzQzOzI3MDcsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCwKIAlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpCiAJCXdlaWdodF90b3RhbCAmIzQzOz0gd2VpZ2h0c1tub2RlXTsKIAomIzQzOwlpZiAoIXdlaWdodF90b3RhbCkgewomIzQzOwkJa2ZyZWUod2VpZ2h0cyk7CiYjNDM7CQlyZXR1cm4gdG90YWxfYWxsb2NhdGVkOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBDYWxjdWxhdGUgcm91bmRzL3BhcnRpYWwgcm91bmRzIHRvIG1pbmltaXplIF9fYWxsb2NfcGFnZXNfYnVsayBjYWxscy4KIAkgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmV2aWV3aW5nIHRoZSBgbW0vbWVtcG9saWN5LmNgIFBhdGNoKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVkIGBtbS9tZW1wb2xpY3kuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHB1bGwgdXAgdGhlIGRpZmYgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgKmV4YWN0bHkqIHdoYXQgd2FzIGNoYW5nZWQsIGxpbmUgYnkgbGluZS4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBleHBhbmQgbXkgdmlldyBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMjcwNyBpbiB0aGF0IGZpbGUuIEkmIzM5O2xsIHByb2JhYmx5IGZpcmUgdXAgYSBgcmVhZC1maWxlYCBjb21tYW5kIHRvIGxvYWQgdGhhdCBzZWN0aW9uIGRpcmVjdGx5IGFuZCBoYXZlIGl0IHJlYWR5IGZvciBmb2N1c2VkIGFuYWx5c2lzLiBUaGlzIHNob3VsZCBnaXZlIHVzIHRoZSBuZWNlc3NhcnkgYnVpbGRpbmcgYmxvY2tzIHRvIGRldGVybWluZSBob3cgdGhpcyBwYXRjaCBhZmZlY3RzIG1lbW9yeSBwb2xpY3kgYmVoYXZpb3IgYW5kIHdoZXRoZXIgaXQgYWxpZ25zIHdpdGggb3VyIGV4cGVjdGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjgwOlx0XHRcdFx0bWUtXHUwMDNlaWxfd2VpZ2h0IC09IHJlbV9wYWdlcztcbjI2ODE6XHRcdFx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuMjY4MjpcdFx0XHR9XG4yNjgzOlx0XHRcdC8qIE90aGVyd2lzZSB3ZSBhZGp1c3QgcmVtYWluaW5nIHBhZ2VzLCBjb250aW51ZSBmcm9tIHRoZXJlICovXG4yNjg0Olx0XHRcdHJlbV9wYWdlcyAtPSB3ZWlnaHQ7XG4yNjg1Olx0XHR9XG4yNjg2Olx0XHQvKiBjbGVhciBhY3RpdmUgd2VpZ2h0IGluIGNhc2Ugb2YgYW4gYWxsb2NhdGlvbiBmYWlsdXJlICovXG4yNjg3Olx0XHRtZS1cdTAwM2VpbF93ZWlnaHQgPSAwO1xuMjY4ODpcdFx0cHJldl9ub2RlID0gbm9kZTtcbjI2ODk6XHRcbjI2OTA6XHRcdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbjI2OTE6XHRcdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbjI2OTI6XHRcdGlmICghd2VpZ2h0cylcbjI2OTM6XHRcdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbjI2OTQ6XHRcbjI2OTU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjI2OTY6XHRcdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcbjI2OTc6XHRcdGlmIChzdGF0ZSkge1xuMjY5ODpcdFx0XHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XG4yNjk5Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjcwMDpcdFx0fSBlbHNlIHtcbjI3MDE6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNzAyOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOylcbjI3MDM6XHRcdFx0XHR3ZWlnaHRzW2ldID0gMTtcbjI3MDQ6XHRcdH1cbjI3MDU6XHRcbjI3MDY6XHRcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXG4yNzA3Olx0XHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4yNzA4Olx0XHRcdHdlaWdodF90b3RhbCAmIzQzOz0gd2VpZ2h0c1tub2RlXTtcbjI3MDk6XHRcbjI3MTA6XHRcdGlmICghd2VpZ2h0X3RvdGFsKSB7XG4yNzExOlx0XHRcdGtmcmVlKHdlaWdodHMpO1xuMjcxMjpcdFx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuMjcxMzpcdFx0fVxuMjcxNDpcdFxuMjcxNTpcdFx0LypcbjI3MTY6XHRcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxuMjcxNzpcdFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cbjI3MTg6XHRcdCAqXG4yNzE5Olx0XHQgKiBpZiAocm91bmRzIFx1MDAzZSAwKSBhbmQgKGRlbHRhID09IDApLCByZXN1bWVfbm9kZSB3aWxsIGFsd2F5cyBiZVxuMjcyMDpcdFx0ICogdGhlIG5vZGUgZm9sbG93aW5nIHByZXZfbm9kZSBhbmQgaXRzIHdlaWdodC5cbjI3MjE6XHRcdCAqL1xuMjcyMjpcdFx0cm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO1xuMjcyMzpcdFx0ZGVsdGEgPSByZW1fcGFnZXMgJSB3ZWlnaHRfdG90YWw7XG4yNzI0Olx0XHRyZXN1bWVfbm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTtcbjI3MjU6XHRcdHJlc3VtZV93ZWlnaHQgPSB3ZWlnaHRzW3Jlc3VtZV9ub2RlXTtcbjI3MjY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ub2RlczsgaSYjNDM7JiM0MzspIHtcbjI3Mjc6XHRcdFx0bm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTtcbjI3Mjg6XHRcdFx0d2VpZ2h0ID0gd2VpZ2h0c1tub2RlXTtcbjI3Mjk6XHRcdFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcbjI3MzA6XHRcdFx0LyogSWYgYSBkZWx0YSBleGlzdHMsIGFkZCB0aGlzIG5vZGUmIzM5O3MgcG9ydGlvbiBvZiB0aGUgZGVsdGEgKi9cbjI3MzE6XHRcdFx0aWYgKGRlbHRhIFx1MDAzZSB3ZWlnaHQpIHtcbjI3MzI6XHRcdFx0XHRub2RlX3BhZ2VzICYjNDM7PSB3ZWlnaHQ7XG4yNzMzOlx0XHRcdFx0ZGVsdGEgLT0gd2VpZ2h0O1xuMjczNDpcdFx0XHR9IGVsc2UgaWYgKGRlbHRhKSB7XG4yNzM1Olx0XHRcdFx0Lyogd2hlbiBkZWx0YSBpcyBkZXBsZXRlZCwgcmVzdW1lIGZyb20gdGhhdCBub2RlICovXG4yNzM2Olx0XHRcdFx0bm9kZV9wYWdlcyAmIzQzOz0gZGVsdGE7XG4yNzM3Olx0XHRcdFx0cmVzdW1lX25vZGUgPSBub2RlO1xuMjczODpcdFx0XHRcdHJlc3VtZV93ZWlnaHQgPSB3ZWlnaHQgLSBkZWx0YTtcbjI3Mzk6XHRcdFx0XHRkZWx0YSA9IDA7XG4yNzQwOlx0XHRcdH1cbjI3NDE6XHRcdFx0Lyogbm9kZV9wYWdlcyBjYW4gYmUgMCBpZiBhbiBhbGxvY2F0aW9uIGZhaWxzIGFuZCByb3VuZHMgPT0gMCAqL1xuMjc0MjpcdFx0XHRpZiAoIW5vZGVfcGFnZXMpXG4yNzQzOlx0XHRcdFx0YnJlYWs7XG4yNzQ0Olx0XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG4yNzQ1Olx0XHRcdFx0XHRcdFx0ICBwYWdlX2FycmF5KTtcbjI3NDY6XHRcdFx0cGFnZV9hcnJheSAmIzQzOz0gbnJfYWxsb2NhdGVkO1xuMjc0NzpcdFx0XHR0b3RhbF9hbGxvY2F0ZWQgJiM0Mzs9IG5yX2FsbG9jYXRlZDtcbjI3NDg6XHRcdFx0aWYgKHRvdGFsX2FsbG9jYXRlZCA9PSBucl9wYWdlcylcbjI3NDk6XHRcdFx0XHRicmVhaztcbjI3NTA6XHRcdFx0cHJldl9ub2RlID0gbm9kZTtcbjI3NTE6XHRcdH1cbjI3NTI6XHRcdG1lLVx1MDAzZWlsX3ByZXYgPSByZXN1bWVfbm9kZTtcbjI3NTM6XHRcdG1lLVx1MDAzZWlsX3dlaWdodCA9IHJlc3VtZV93ZWlnaHQ7XG4yNzU0Olx0XHRrZnJlZSh3ZWlnaHRzKTtcbjI3NTU6XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNzU2Olx0fVxuMjc1NzpcdFxuMjc1ODpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuMjc1OTpcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzNQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBtbS9tZW1wb2xpY3kuY2AgYW5kIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBXaGVyZSB0aGUgaGVjayBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGggdG8gZ2V0IGEgaGFuZGxlIG9uIGl0cyBwdXJwb3NlIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU28sIGxldCYjMzk7cyBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIHNlZSB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBwb3BzIHVwIGluIHRoZSBjb2RlYmFzZS4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0yNjAwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYzNC1cbm1tL21lbXBvbGljeS5jOjI2MzU6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI2MzYtXHRcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1wb2xpY3kuYz0yNzg0PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzk4LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3OTk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yODAwLVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBNZW1vcnkgQWxsb2NhdGlvbiBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGRpdmlkZS1ieS16ZXJvIGVycm9yIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEl0IHNlZW1zIHRoZXNlIGZ1bmN0aW9ucywgd2hlbiBkZWFsaW5nIHdpdGggYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAgbWVtb3J5IHBvbGljaWVzLCBldmVudHVhbGx5IGNhbGwgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuCgpOb3csIGJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgY2FsY3VsYXRpbmcgYHJvdW5kc2AgYW5kIGBkZWx0YWAgYmFzZWQgb24gYSBkaXZpc2lvbiB1c2luZyBgd2VpZ2h0X3RvdGFsYC4gVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCBhcmlzZXMgd2hlbiBgd2VpZ2h0X3RvdGFsYCBpcyB6ZXJvLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgbm9kZXMgc3BlY2lmaWVkIGluIHRoZSBgbm9kZXNgIG1hc2sgYWxsIGhhdmUgemVybyB3ZWlnaHQgaW4gYHN0YXRlLSZndDtpd190YWJsZWAsIG9yIHdoZW4gYG5vZGVzYCBpcyBlbXB0eSwgd2hpY2ggd291bGQgbGVhZCB0byBhIGRpdmlkZS1ieS16ZXJvLCBhIGNsYXNzaWMgYnVnLCBhbmQgcG90ZW50aWFsbHkgYSBrZXJuZWwgcGFuaWMuIFRoZSBmaXgsIGEgc2ltcGxlIGNoZWNrOgoKYGBgYwoJaWYgKCF3ZWlnaHRfdG90YWwpIHsKCQlrZnJlZSh3ZWlnaHRzKTsKCQlyZXR1cm4gdG90YWxfYWxsb2NhdGVkOwoJfQpgYGAKCi4uLmNvcnJlY3RseSBoYW5kbGVzIHRoaXMgZWRnZSBjYXNlIGJ5IHJldHVybmluZyB0aGUgdG90YWwgYWxsb2NhdGVkIHBhZ2VzIGFuZCBmcmVlaW5nIHRoZSBgd2VpZ2h0c2AgYXJyYXksIHdoaWNoIGF2b2lkcyB0aGUgZGl2aXNpb24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgc2NvcGUgb2YgdGhpcyBpc3N1ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBLY29uZmlnIG9wdGlvbnMgY29udHJvbCBgbW0vbWVtcG9saWN5LmNgIGFuZCBzcGVjaWZpY2FsbHkgYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAgb3IgTlVNQSBmdW5jdGlvbmFsaXR5IGluIGdlbmVyYWwuIEkmIzM5O2xsIGNoZWNrIGBtbS9NYWtlZmlsZWAgYW5kIGBtbS9LY29uZmlnYCB0byBzZWUgd2hhdCBmbGFncyBhcmUgcmVsZXZhbnQgYW5kLCB0aGVyZWZvcmUsIHdoaWNoIGNvbmZpZ3VyYXRpb25zIHRoaXMgZml4IGFmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtcG9saWN5XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTg1PW9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFx0JiM0Mzs9IG1lbXBvbGljeS5vXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVx0JiM0Mzs9IHNwYXJzZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgbWVtcG9saWN5Lm8gb24gTlVNQSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfTlVNQWAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciBgbWVtcG9saWN5Lm9gLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBidXQgaXQgZG9lc24mIzM5O3QgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IGVsc2UgaXMgY29ubmVjdGVkIHRvIGBOVU1BYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24/JiMzNDsgQXJlIHRoZXJlIG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgdGhhdCBhbHNvIGRlcGVuZCBvbiBpdD8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIGhlcmUuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IHN0ZXAgaXMgb2J2aW91czogSSBuZWVkIHRvIHF1aWNrbHkgYW5kIGVmZmljaWVudGx5IGV4YW1pbmUgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTtsbCB1c2UgYGdyZXBgIHRvIHNlYXJjaCB0aGUgYEtjb25maWdgIGZpbGVzIGZvciBhbnkgcmVmZXJlbmNlcyB0byBgY29uZmlnIE5VTUFgLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgcXVpY2sgb3ZlcnZpZXcgb2YgYWxsIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBkZXBlbmRlbmNpZXMsIGhlbHBpbmcgbWUgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCBwb3RlbnRpYWwgZG93bnN0cmVhbSBlZmZlY3RzIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBgTlVNQWAuIFRoaXMgZ2l2ZXMgbWUgYSBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHRvcG9sb2d5IG9mIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVU1BXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0xNjI2PWNvbmZpZyBIT1RQTFVHX0NQVVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjMzLSMgQ29tbW9uIE5VTUEgRmVhdHVyZXNcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNjM0OmNvbmZpZyBOVU1BXG5hcmNoL2FybTY0L0tjb25maWctMTYzNS1cdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTU0ND1jb25maWcgTlJfQ1BVU1xuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTUyLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1NTM6Y29uZmlnIE5VTUFcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTU0LVx0Ym9vbCBcJiMzNDtOVU1BIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL21pcHMvS2NvbmZpZz0yNTk4PWNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0yNjAwLVxuYXJjaC9taXBzL0tjb25maWc6MjYwMTpjb25maWcgTlVNQVxuYXJjaC9taXBzL0tjb25maWctMjYwMi1cdGJvb2wgXCYjMzQ7TlVNQSBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9NzU4PWNvbmZpZyBJUlFfQUxMX0NQVVNcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy03NjYtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo3Njc6Y29uZmlnIE5VTUFcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTc2OC1cdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9NDgxPWVuZGNob2ljZVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy00ODMtIyBDb21tb24gTlVNQSBGZWF0dXJlc1xuYXJjaC9yaXNjdi9LY29uZmlnOjQ4NDpjb25maWcgTlVNQVxuYXJjaC9yaXNjdi9LY29uZmlnLTQ4NS1cdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz01NDc9Y29uZmlnIEhPVFBMVUdfQ1BVXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTQ5LVxuYXJjaC9zMzkwL0tjb25maWc6NTUwOmNvbmZpZyBOVU1BXG5hcmNoL3MzOTAvS2NvbmZpZy01NTEtXHRib29sIFwmIzM0O05VTUEgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZz0xMDI9Y29uZmlnIFZTWVNDQUxMXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTExNC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxMTU6Y29uZmlnIE5VTUFcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMTYtXHRib29sIFwmIzM0O05vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MgKE5VTUEpIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3NwYXJjL0tjb25maWc9MjU0PWNvbmZpZyBHRU5FUklDX0xPQ0tCUkVBS1xuLS1cbmFyY2gvc3BhcmMvS2NvbmZpZy0yNTgtXG5hcmNoL3NwYXJjL0tjb25maWc6MjU5OmNvbmZpZyBOVU1BXG5hcmNoL3NwYXJjL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtOVU1BIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE0OTI9Y29uZmlnIEFNRF9NRU1fRU5DUllQVFxuLS1cbmFyY2gveDg2L0tjb25maWctMTUwOC0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXG5hcmNoL3g4Ni9LY29uZmlnOjE1MDk6Y29uZmlnIE5VTUFcbmFyY2gveDg2L0tjb25maWctMTUxMC1cdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcxMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE1lbW9yeSBQb2xpY3kgQWxsb2NhdGlvbiBQYXRoKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgZnVuY3Rpb24sIG9yIGFueXRoaW5nIHNpbWlsYXIsIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIE15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGRpdmUgaW50byBgbW0vbWVtcG9saWN5LmNgLiBJIGZpZ3VyZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVzaWRlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gc2NhbiBhcm91bmQgbGluZSAyNzgwIHRvIHBpbnBvaW50IGhvdyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyBleHBvc2VkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqY2FsbGVkKi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGl0cyBwdXJwb3NlIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgbWVtb3J5IHBvbGljeSBmcmFtZXdvcmsuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzgwOlx0ICpcbjI3ODE6XHQgKiBJdCBjYW4gYWNjZWxlcmF0ZSBtZW1vcnkgYWxsb2NhdGlvbiBlc3BlY2lhbGx5IGludGVybGVhdmluZ1xuMjc4MjpcdCAqIGFsbG9jYXRlIG1lbW9yeS5cbjI3ODM6XHQgKi9cbjI3ODQ6XHR1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4yNzg1Olx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbjI3ODY6XHR7XG4yNzg3Olx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wgPSBcdTAwMjZkZWZhdWx0X3BvbGljeTtcbjI3ODg6XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuMjc4OTpcdFx0aW50IG5pZDtcbjI3OTA6XHRcbjI3OTE6XHRcdGlmICghaW5faW50ZXJydXB0KCkgXHUwMDI2XHUwMDI2ICEoZ2ZwIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXG4yNzkyOlx0XHRcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbjI3OTM6XHRcbjI3OTQ6XHRcdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXG4yNzk1Olx0XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG4yNzk2Olx0XHRcdFx0XHRcdFx0XHQgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuMjc5NzpcdFxuMjc5ODpcdFx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbjI3OTk6XHRcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbjI4MDA6XHRcdFx0XHRcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbjI4MDE6XHRcbjI4MDI6XHRcdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxuMjgwMzpcdFx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXG4yODA0Olx0XHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4yODA1Olx0XG4yODA2Olx0XHRuaWQgPSBudW1hX25vZGVfaWQoKTtcbjI4MDc6XHRcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xuMjgwODpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbmlkLCBub2RlbWFzayxcbjI4MDk6XHRcdFx0XHRcdCAgICAgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4yODEwOlx0fVxuMjgxMTpcdFxuMjgxMjpcdGludCB2bWFfZHVwX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QpXG4yODEzOlx0e1xuMjgxNDpcdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sID0gbXBvbF9kdXAoc3JjLVx1MDAzZXZtX3BvbGljeSk7XG4yODE1Olx0XG4yODE2Olx0XHRpZiAoSVNfRVJSKHBvbCkpXG4yODE3Olx0XHRcdHJldHVybiBQVFJfRVJSKHBvbCk7XG4yODE4Olx0XHRkc3QtXHUwMDNldm1fcG9saWN5ID0gcG9sO1xuMjgxOTpcdFx0cmV0dXJuIDA7XG4yODIwOlx0fVxuMjgyMTpcdFxuMjgyMjpcdC8qXG4yODIzOlx0ICogSWYgbXBvbF9kdXAoKSBzZWVzIGN1cnJlbnQtXHUwMDNlY3B1c2V0ID09IGNwdXNldF9iZWluZ19yZWJvdW5kLCB0aGVuIGl0XG4yODI0Olx0ICogcmViaW5kcyB0aGUgbWVtcG9saWN5IGl0cyBjb3B5aW5nIGJ5IGNhbGxpbmcgbXBvbF9yZWJpbmRfcG9saWN5KClcbjI4MjU6XHQgKiB3aXRoIHRoZSBtZW1zX2FsbG93ZWQgcmV0dXJuZWQgYnkgY3B1c2V0X21lbXNfYWxsb3dlZCgpLiAgVGhpc1xuMjgyNjpcdCAqIGtlZXBzIG1lbXBvbGljaWVzIGNwdXNldCByZWxhdGl2ZSBhZnRlciBpdHMgY3B1c2V0IG1vdmVzLiAgU2VlXG4yODI3Olx0ICogZnVydGhlciBrZXJuZWwvY3B1c2V0LmMgdXBkYXRlX25vZGVtYXNrKCkuXG4yODI4Olx0ICpcbjI4Mjk6XHQgKiBjdXJyZW50JiMzOTtzIG1lbXBvbGljeSBtYXkgYmUgcmViaW5kZWQgYnkgdGhlIG90aGVyIHRhc2sodGhlIHRhc2sgdGhhdCBjaGFuZ2VzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWxsb2NhdGlvbiBTdHJhdGVnaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiB0aGVzZSBidWxrIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAgYW5kIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSAqYWN0dWFsbHkqIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBHcmVwcGluZyBpcyB0aGUgb2J2aW91cyB0b29sIGZvciB0aGlzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggZm9yIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgdGhlIGNvZGUgcGF0aHMgdXNpbmcgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB0aGVuIHF1aWNrbHkgZXZhbHVhdGUgdGhlIHJlc3VsdHMgdG8gc2VlIGlmIHRoZSBjYWxscyBhcmUgbWVhbmluZ2Z1bCB0byBteSBjdXJyZW50IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbi0tXG5tbS9tZW1wb2xpY3kuYz0yNzU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3ODMtICovXG5tbS9tZW1wb2xpY3kuYzoyNzg0OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3ODUtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS92bWFsbG9jLmM9MzY2OT12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS92bWFsbG9jLmMtMzczNi1cdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXHUwMDI2XHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXG5tbS92bWFsbG9jLmM6MzczNzpcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcbm1tL3ZtYWxsb2MuYy0zNzM4LVx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdm1hbGxvYyBhbmQgTlVNQSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGZ1bmN0aW9uLiBSaWdodCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGB2bWFsbG9jYCDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGl0JiMzOTtzIGhhbmRsaW5nIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCDigJMgYW5kIHRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyB3aG9sZSBwcm9jZXNzIGlzIGhhcHBlbmluZyB1bmRlciBOVU1BLCBzbyBtZW1wb2xpY3kgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1wb2xpY3kgdXNpbmcgc3lzZnMgb3Igc3lzY2FsbHMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc2V0IHRoZSB3ZWlnaHRzIGZvciBlYWNoIG5vZGUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHJlZmVyZW5jZXMgdG8gYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAgb3IgcGVyaGFwcyBgd2lfc3RhdGVgIHdpdGhpbiBgbW0vbWVtcG9saWN5LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludC4gSXQgaGFzIHRvIGJlIGluIHRoZXJlIHNvbWV3aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3aV9zdGF0ZXx3ZWlnaHRlZF9pbnRlcmxlYXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmM9NTc0PXN0cnVjdCBkYW1vc192YV9taWdyYXRlX3ByaXZhdGUge1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTgyLSAqXG5tbS9kYW1vbi92YWRkci5jOjU4MzogKiBUaGUgYWxnb3JpdGhtIHVzZWQgaGVyZSBpcyBzaW1pbGFyIHRvIHdlaWdodGVkX2ludGVybGVhdmVfbmlkKClcbm1tL2RhbW9uL3ZhZGRyLmMtNTg0LSAqL1xuLS1cbm1tL21lbXBvbGljeS5jPTE1Mj1zdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7XG4tLVxubW0vbWVtcG9saWN5LmMtMTU0LS8qXG5tbS9tZW1wb2xpY3kuYzoxNTU6ICogQSBudWxsIHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgaXMgaW50ZXJwcmV0ZWQgYXMgaGF2aW5nIC5tb2RlPVwmIzM0O2F1dG9cJiMzNDssXG5tbS9tZW1wb2xpY3kuYy0xNTYtICogYW5kIC5pd190YWJsZSBpcyBpbnRlcnByZXRlZCBhcyBhbiBhcnJheSBvZiAxcyB3aXRoIGxlbmd0aCBucl9ub2RlX2lkcy5cbm1tL21lbXBvbGljeS5jLTE1Ny0gKi9cbm1tL21lbXBvbGljeS5jOjE1ODpzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7XG5tbS9tZW1wb2xpY3kuYy0xNTktXHRib29sIG1vZGVfYXV0bztcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNjEtfTtcbm1tL21lbXBvbGljeS5jOjE2MjpzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgX19yY3UgKndpX3N0YXRlO1xubW0vbWVtcG9saWN5LmMtMTYzLXN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XG4tLVxubW0vbWVtcG9saWN5LmMtMTY1LS8qXG5tbS9tZW1wb2xpY3kuYzoxNjY6ICogd2lfc3RhdGVfbG9jayBwcm90ZWN0cyBib3RoIHdpX3N0YXRlIGFuZCBub2RlX2J3X3RhYmxlLlxubW0vbWVtcG9saWN5LmM6MTY3OiAqIG5vZGVfYndfdGFibGUgaXMgb25seSB1c2VkIGJ5IHdyaXRlcnMgdG8gdXBkYXRlIHdpX3N0YXRlLlxubW0vbWVtcG9saWN5LmMtMTY4LSAqL1xubW0vbWVtcG9saWN5LmM6MTY5OnN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYy0xNzAtXG5tbS9tZW1wb2xpY3kuYz0xNzE9c3RhdGljIHU4IGdldF9pbF93ZWlnaHQoaW50IG5vZGUpXG5tbS9tZW1wb2xpY3kuYy0xNzIte1xubW0vbWVtcG9saWN5LmM6MTczOlx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xubW0vbWVtcG9saWN5LmMtMTc0LVx0dTggd2VpZ2h0ID0gMTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNzYtXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9tZW1wb2xpY3kuYzoxNzc6XHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XG5tbS9tZW1wb2xpY3kuYy0xNzgtXHRpZiAoc3RhdGUpXG4tLVxubW0vbWVtcG9saWN5LmMtMTg1LSAqIENvbnZlcnQgYmFuZHdpZHRoIHZhbHVlcyBpbnRvIHdlaWdodGVkIGludGVybGVhdmUgd2VpZ2h0cy5cbm1tL21lbXBvbGljeS5jOjE4NjogKiBDYWxsIHdpdGggd2lfc3RhdGVfbG9jay5cbm1tL21lbXBvbGljeS5jLTE4Ny0gKi9cbi0tXG5tbS9tZW1wb2xpY3kuYz0yMjE9aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcylcbm1tL21lbXBvbGljeS5jLTIyMi17XG5tbS9tZW1wb2xpY3kuYzoyMjM6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbm1tL21lbXBvbGljeS5jLTIyNC1cdHVuc2lnbmVkIGludCAqb2xkX2J3LCAqbmV3X2J3O1xuLS1cbm1tL21lbXBvbGljeS5jLTIzMi1cbm1tL21lbXBvbGljeS5jOjIzMzpcdG5ld193aV9zdGF0ZSA9IGttYWxsb2NfZmxleCgqbmV3X3dpX3N0YXRlLCBpd190YWJsZSwgbnJfbm9kZV9pZHMpO1xubW0vbWVtcG9saWN5LmM6MjM0Olx0aWYgKCFuZXdfd2lfc3RhdGUpIHtcbm1tL21lbXBvbGljeS5jLTIzNS1cdFx0a2ZyZWUobmV3X2J3KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMzctXHR9XG5tbS9tZW1wb2xpY3kuYzoyMzg6XHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcbm1tL21lbXBvbGljeS5jLTIzOS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOylcbm1tL21lbXBvbGljeS5jOjI0MDpcdFx0bmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlW2ldID0gMTtcbm1tL21lbXBvbGljeS5jLTI0MS1cbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDYtXHQgKi9cbm1tL21lbXBvbGljeS5jOjI0NzpcdG11dGV4X2xvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYy0yNDgtXG4tLVxubW0vbWVtcG9saWN5LmMtMjU0LVxubW0vbWVtcG9saWN5LmM6MjU1Olx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbm1tL21lbXBvbGljeS5jOjI1NjpcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbm1tL21lbXBvbGljeS5jOjI1NzpcdGlmIChvbGRfd2lfc3RhdGUgXHUwMDI2XHUwMDI2ICFvbGRfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvKSB7XG5tbS9tZW1wb2xpY3kuYzoyNTg6XHRcdC8qIE1hbnVhbCBtb2RlOyBza2lwIHJlZHVjaW5nIHdlaWdodHMgYW5kIHVwZGF0aW5nIHdpX3N0YXRlICovXG5tbS9tZW1wb2xpY3kuYzoyNTk6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbm1tL21lbXBvbGljeS5jOjI2MDpcdFx0a2ZyZWUobmV3X3dpX3N0YXRlKTtcbm1tL21lbXBvbGljeS5jLTI2MS1cdFx0Z290byBvdXQ7XG4tLVxubW0vbWVtcG9saWN5LmMtMjYzLVxubW0vbWVtcG9saWN5LmM6MjY0Olx0LyogTlVMTCB3aV9zdGF0ZSBhc3N1bWVzIGF1dG89dHJ1ZTsgcmVkdWNlIHdlaWdodHMgYW5kIHVwZGF0ZSB3aV9zdGF0ZSovXG5tbS9tZW1wb2xpY3kuYzoyNjU6XHRyZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKG5ld19idywgbmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlKTtcbm1tL21lbXBvbGljeS5jOjI2NjpcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTtcbm1tL21lbXBvbGljeS5jLTI2Ny1cbm1tL21lbXBvbGljeS5jOjI2ODpcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbm1tL21lbXBvbGljeS5jOjI2OTpcdGlmIChvbGRfd2lfc3RhdGUpIHtcbm1tL21lbXBvbGljeS5jLTI3MC1cdFx0c3luY2hyb25pemVfcmN1KCk7XG5tbS9tZW1wb2xpY3kuYzoyNzE6XHRcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XG5tbS9tZW1wb2xpY3kuYy0yNzItXHR9XG4tLVxubW0vbWVtcG9saWN5LmM9MjA4Mz1ib29sIGFwcGx5X3BvbGljeV96b25lKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSwgZW51bSB6b25lX3R5cGUgem9uZSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMTAyLVxubW0vbWVtcG9saWN5LmM6MjEwMzpzdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxubW0vbWVtcG9saWN5LmMtMjEwNC17XG4tLVxubW0vbWVtcG9saWN5LmM9MjE0Nj11bnNpZ25lZCBpbnQgbWVtcG9saWN5X3NsYWJfbm9kZSh2b2lkKVxuLS1cbm1tL21lbXBvbGljeS5jLTIxNjUtXHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jOjIxNjY6XHRcdHJldHVybiB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHBvbGljeSk7XG5tbS9tZW1wb2xpY3kuYy0yMTY3LVxuLS1cbm1tL21lbXBvbGljeS5jPTIxOTI9c3RhdGljIHVuc2lnbmVkIGludCByZWFkX29uY2VfcG9saWN5X25vZGVtYXNrKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMjA1LVxubW0vbWVtcG9saWN5LmM6MjIwNjpzdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbmlkKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgcGdvZmZfdCBpbHgpXG5tbS9tZW1wb2xpY3kuYy0yMjA3LXtcbm1tL21lbXBvbGljeS5jOjIyMDg6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0yMjA5LVx0bm9kZW1hc2tfdCBub2RlbWFzaztcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMjIxLVxubW0vbWVtcG9saWN5LmM6MjIyMjpcdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcbm1tL21lbXBvbGljeS5jOjIyMjM6XHQvKiBVbmluaXRpYWxpemVkIHdpX3N0YXRlIG1lYW5zIHdlIHNob3VsZCBhc3N1bWUgYWxsIHdlaWdodHMgYXJlIDEgKi9cbm1tL21lbXBvbGljeS5jLTIyMjQtXHRpZiAoc3RhdGUpXG4tLVxubW0vbWVtcG9saWN5LmM9MjI3Mj1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxuLS1cbm1tL21lbXBvbGljeS5jLTIzMDctXHRcdCpuaWQgPSAoaWx4ID09IE5PX0lOVEVSTEVBVkVfSU5ERVgpID9cbm1tL21lbXBvbGljeS5jOjIzMDg6XHRcdFx0d2VpZ2h0ZWRfaW50ZXJsZWF2ZV9ub2Rlcyhwb2wpIDpcbm1tL21lbXBvbGljeS5jOjIzMDk6XHRcdFx0d2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQocG9sLCBpbHgpO1xubW0vbWVtcG9saWN5LmMtMjMxMC1cdFx0YnJlYWs7XG4tLVxubW0vbWVtcG9saWN5LmM9MjYwMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MzQtXG5tbS9tZW1wb2xpY3kuYzoyNjM1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjM2LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYzOC17XG5tbS9tZW1wb2xpY3kuYzoyNjM5Olx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xubW0vbWVtcG9saWN5LmMtMjY0MC1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50O1xuLS1cbm1tL21lbXBvbGljeS5jLTI2OTUtXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9tZW1wb2xpY3kuYzoyNjk2Olx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmMtMjY5Ny1cdGlmIChzdGF0ZSkge1xuLS1cbm1tL21lbXBvbGljeS5jPTI3ODQ9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3OTgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmM6Mjc5OTpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbm1tL21lbXBvbGljeS5jLTI4MDAtXHRcdFx0XHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmM9Mjk5ND1pbnQgbXBvbF9taXNwbGFjZWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vbWVtcG9saWN5LmMtMzAyMS1cdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmM6MzAyMjpcdFx0cG9sbmlkID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQocG9sLCBpbHgpO1xubW0vbWVtcG9saWN5LmMtMzAyMy1cdFx0YnJlYWs7XG4tLVxubW0vbWVtcG9saWN5LmM9MzY0OD1zdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vbWVtcG9saWN5LmMtMzY1MC17XG5tbS9tZW1wb2xpY3kuYzozNjUxOlx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKm5ld193aV9zdGF0ZSwgKm9sZF93aV9zdGF0ZSA9IE5VTEw7XG5tbS9tZW1wb2xpY3kuYy0zNjUyLVx0c3RydWN0IGl3X25vZGVfYXR0ciAqbm9kZV9hdHRyO1xuLS1cbm1tL21lbXBvbGljeS5jLTM2NjAtXG5tbS9tZW1wb2xpY3kuYzozNjYxOlx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG5tbS9tZW1wb2xpY3kuYzozNjYyOlx0aWYgKCFuZXdfd2lfc3RhdGUpXG5tbS9tZW1wb2xpY3kuYy0zNjYzLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL21lbXBvbGljeS5jLTM2NjQtXG5tbS9tZW1wb2xpY3kuYzozNjY1Olx0bXV0ZXhfbG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbm1tL21lbXBvbGljeS5jOjM2NjY6XHRvbGRfd2lfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHdpX3N0YXRlLFxubW0vbWVtcG9saWN5LmM6MzY2NzpcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbm1tL21lbXBvbGljeS5jOjM2Njg6XHRpZiAob2xkX3dpX3N0YXRlKSB7XG5tbS9tZW1wb2xpY3kuYzozNjY5Olx0XHRtZW1jcHkobmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlLCBvbGRfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGUsXG5tbS9tZW1wb2xpY3kuYy0zNjcwLVx0XHRcdFx0XHRucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTM2NzItXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOylcbm1tL21lbXBvbGljeS5jOjM2NzM6XHRcdFx0bmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlW2ldID0gMTtcbm1tL21lbXBvbGljeS5jLTM2NzQtXHR9XG5tbS9tZW1wb2xpY3kuYzozNjc1Olx0bmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlW25vZGVfYXR0ci1cdTAwM2VuaWRdID0gd2VpZ2h0O1xubW0vbWVtcG9saWN5LmM6MzY3NjpcdG5ld193aV9zdGF0ZS1cdTAwM2Vtb2RlX2F1dG8gPSBmYWxzZTtcbm1tL21lbXBvbGljeS5jLTM2NzctXG5tbS9tZW1wb2xpY3kuYzozNjc4Olx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmM6MzY3OTpcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbm1tL21lbXBvbGljeS5jOjM2ODA6XHRpZiAob2xkX3dpX3N0YXRlKSB7XG5tbS9tZW1wb2xpY3kuYy0zNjgxLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbm1tL21lbXBvbGljeS5jOjM2ODI6XHRcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XG5tbS9tZW1wb2xpY3kuYy0zNjgzLVx0fVxuLS1cbm1tL21lbXBvbGljeS5jLTM2ODYtXG5tbS9tZW1wb2xpY3kuYzozNjg3OnN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vbWVtcG9saWN5LmMtMzY4OC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG5tbS9tZW1wb2xpY3kuYy0zNjg5LXtcbm1tL21lbXBvbGljeS5jOjM2OTA6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0zNjkxLVx0Ym9vbCB3aV9hdXRvID0gdHJ1ZTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNjkzLVx0cmN1X3JlYWRfbG9jaygpO1xubW0vbWVtcG9saWN5LmM6MzY5NDpcdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcbm1tL21lbXBvbGljeS5jLTM2OTUtXHRpZiAoc3RhdGUpXG4tLVxubW0vbWVtcG9saWN5LmMtMzcwMS1cbm1tL21lbXBvbGljeS5jOjM3MDI6c3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vbWVtcG9saWN5LmMtMzcwMy1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbm1tL21lbXBvbGljeS5jLTM3MDQte1xubW0vbWVtcG9saWN5LmM6MzcwNTpcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpuZXdfd2lfc3RhdGUsICpvbGRfd2lfc3RhdGUgPSBOVUxMO1xubW0vbWVtcG9saWN5LmMtMzcwNi1cdHVuc2lnbmVkIGludCAqYnc7XG4tLVxubW0vbWVtcG9saWN5LmMtMzcxMi1cbm1tL21lbXBvbGljeS5jOjM3MTM6XHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcbm1tL21lbXBvbGljeS5jOjM3MTQ6XHRpZiAoIW5ld193aV9zdGF0ZSlcbm1tL21lbXBvbGljeS5jLTM3MTUtXHRcdHJldHVybiAtRU5PTUVNO1xubW0vbWVtcG9saWN5LmMtMzcxNi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOylcbm1tL21lbXBvbGljeS5jOjM3MTc6XHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG5tbS9tZW1wb2xpY3kuYy0zNzE4LVxubW0vbWVtcG9saWN5LmM6MzcxOTpcdG11dGV4X2xvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYzozNzIwOlx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbm1tL21lbXBvbGljeS5jOjM3MjE6XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2d2lfc3RhdGVfbG9jaykpO1xubW0vbWVtcG9saWN5LmMtMzcyMi1cbm1tL21lbXBvbGljeS5jOjM3MjM6XHRpZiAob2xkX3dpX3N0YXRlIFx1MDAyNlx1MDAyNiBpbnB1dCA9PSBvbGRfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvKSB7XG5tbS9tZW1wb2xpY3kuYzozNzI0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYzozNzI1Olx0XHRrZnJlZShuZXdfd2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmMtMzcyNi1cdFx0cmV0dXJuIGNvdW50O1xuLS1cbm1tL21lbXBvbGljeS5jLTM3MjktXHRpZiAoIWlucHV0KSB7XG5tbS9tZW1wb2xpY3kuYzozNzMwOlx0XHRpZiAob2xkX3dpX3N0YXRlKVxubW0vbWVtcG9saWN5LmM6MzczMTpcdFx0XHRtZW1jcHkobmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlLCBvbGRfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGUsXG5tbS9tZW1wb2xpY3kuYy0zNzMyLVx0XHRcdFx0XHRcdCAgICAgICBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xubW0vbWVtcG9saWN5LmM6MzczMzpcdFx0Z290byB1cGRhdGVfd2lfc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0zNzM0LVx0fVxuLS1cbm1tL21lbXBvbGljeS5jLTM3MzctXHRpZiAoIWJ3KSB7XG5tbS9tZW1wb2xpY3kuYzozNzM4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYzozNzM5Olx0XHRrZnJlZShuZXdfd2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmMtMzc0MC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxubW0vbWVtcG9saWN5LmMtMzc0Mi1cbm1tL21lbXBvbGljeS5jOjM3NDM6XHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcbm1tL21lbXBvbGljeS5jOjM3NDQ6XHRyZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKGJ3LCBuZXdfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGUpO1xubW0vbWVtcG9saWN5LmMtMzc0NS1cbm1tL21lbXBvbGljeS5jOjM3NDY6dXBkYXRlX3dpX3N0YXRlOlxubW0vbWVtcG9saWN5LmM6Mzc0NzpcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTtcbm1tL21lbXBvbGljeS5jOjM3NDg6XHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYzozNzQ5Olx0aWYgKG9sZF93aV9zdGF0ZSkge1xubW0vbWVtcG9saWN5LmMtMzc1MC1cdFx0c3luY2hyb25pemVfcmN1KCk7XG5tbS9tZW1wb2xpY3kuYzozNzUxOlx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmMtMzc1Mi1cdH1cbi0tXG5tbS9tZW1wb2xpY3kuYz0zNzc4PXN0YXRpYyB2b2lkIHN5c2ZzX3dpX25vZGVfZGVsZXRlX2FsbCh2b2lkKVxuLS1cbm1tL21lbXBvbGljeS5jLTM3ODUtXG5tbS9tZW1wb2xpY3kuYzozNzg2OnN0YXRpYyB2b2lkIHdpX3N0YXRlX2ZyZWUodm9pZClcbm1tL21lbXBvbGljeS5jLTM3ODcte1xubW0vbWVtcG9saWN5LmM6Mzc4ODpcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpvbGRfd2lfc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0zNzg5LVxubW0vbWVtcG9saWN5LmM6Mzc5MDpcdG11dGV4X2xvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYzozNzkxOlx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbm1tL21lbXBvbGljeS5jOjM3OTI6XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbm1tL21lbXBvbGljeS5jOjM3OTM6XHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIE5VTEwpO1xubW0vbWVtcG9saWN5LmM6Mzc5NDpcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbm1tL21lbXBvbGljeS5jLTM3OTUtXG5tbS9tZW1wb2xpY3kuYzozNzk2Olx0aWYgKG9sZF93aV9zdGF0ZSkge1xubW0vbWVtcG9saWN5LmMtMzc5Ny1cdFx0c3luY2hyb25pemVfcmN1KCk7XG5tbS9tZW1wb2xpY3kuYzozNzk4Olx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmMtMzc5OS1cdH1cbi0tXG5tbS9tZW1wb2xpY3kuYz0zODAyPXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgd2lfYXV0b19hdHRyID0ge1xubW0vbWVtcG9saWN5LmMtMzgwMy1cdC5hdHRyID0geyAubmFtZSA9IFwmIzM0O2F1dG9cJiMzNDssIC5tb2RlID0gMDY2NCB9LFxubW0vbWVtcG9saWN5LmM6MzgwNDpcdC5zaG93ID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3Nob3csXG5tbS9tZW1wb2xpY3kuYzozODA1Olx0LnN0b3JlID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlLFxubW0vbWVtcG9saWN5LmMtMzgwNi19O1xuLS1cbm1tL21lbXBvbGljeS5jPTM4MDg9c3RhdGljIHZvaWQgd2lfY2xlYW51cCh2b2lkKSB7XG4tLVxubW0vbWVtcG9saWN5LmMtMzgxMC1cdHN5c2ZzX3dpX25vZGVfZGVsZXRlX2FsbCgpO1xubW0vbWVtcG9saWN5LmM6MzgxMTpcdHdpX3N0YXRlX2ZyZWUoKTtcbm1tL21lbXBvbGljeS5jLTM4MTItfVxuLS1cbm1tL21lbXBvbGljeS5jPTM4NzQ9c3RhdGljIGludCB3aV9ub2RlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubW0vbWVtcG9saWN5LmMtMzg5NS1cbm1tL21lbXBvbGljeS5jOjM4OTY6c3RhdGljIGludCBfX2luaXQgYWRkX3dlaWdodGVkX2ludGVybGVhdmVfZ3JvdXAoc3RydWN0IGtvYmplY3QgKm1lbXBvbGljeV9rb2JqKVxubW0vbWVtcG9saWN5LmMtMzg5Ny17XG4tLVxubW0vbWVtcG9saWN5LmMtMzkwNS1cdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFx1MDAyNndpX2dyb3VwLVx1MDAzZXdpX2tvYmosIFx1MDAyNndpX2t0eXBlLCBtZW1wb2xpY3lfa29iaixcbm1tL21lbXBvbGljeS5jOjM5MDY6XHRcdFx0XHQgICBcJiMzNDt3ZWlnaHRlZF9pbnRlcmxlYXZlXCYjMzQ7KTtcbm1tL21lbXBvbGljeS5jLTM5MDctXHRpZiAoZXJyKVxuLS1cbm1tL21lbXBvbGljeS5jPTM5Mzc9c3RhdGljIGludCBfX2luaXQgbWVtcG9saWN5X3N5c2ZzX2luaXQodm9pZClcbi0tXG5tbS9tZW1wb2xpY3kuYy0zOTQ1LVxubW0vbWVtcG9saWN5LmM6Mzk0NjpcdGVyciA9IGFkZF93ZWlnaHRlZF9pbnRlcmxlYXZlX2dyb3VwKG1lbXBvbGljeV9rb2JqKTtcbm1tL21lbXBvbGljeS5jLTM5NDctXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBJIHNlZSB0aGF0IGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsb2NhbGl6ZWQgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBUaGF0IGNvbnRyYXN0cyB3aXRoIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLCB3aGljaCBpcyAqbm90KiBzdGF0aWMsIGFuZCB0aGF0IHNlZW1zIHJlbGV2YW50IHRvIGhvdyBpdCYjMzk7cyBjYWxsZWQuIEhtbSwgaW50ZXJlc3RpbmcuIFRoZSBpbXBsaWNhdGlvbnMgdGhlcmUgYXJlIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgaXRzIHNvdXJjZSBmaWxlIGFuZCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBpbnNpZGUgaXRzIHNvdXJjZSBmaWxlLgoKVGhpbmtpbmcgYmlnZ2VyIHBpY3R1cmUsIHRoZSBtZW1wb2xpY3kgc3lzY2FsbHMgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyAtIGBzZXRfbWVtcG9saWN5YCwgYG1iaW5kYCwgYHNldF9tZW1wb2xpY3lfaG9tZV9ub2RlYCAtIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2UgdG8gY29udHJvbCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBOb3cgSSBuZWVkIHRvIHNlZSBob3cgdGhlc2Ugc3lzY2FsbHMgYWN0dWFsbHkgKndvcmsqIGluIHJlbGF0aW9uIHRvIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgSSYjMzk7bSBsb29raW5nIGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzeXNjYWxsIGRlZmluaXRpb25zIGluIGBtbS9tZW1wb2xpY3kuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORS4qbWJpbmR8U1lTQ0FMTF9ERUZJTkUuKnNldF9tZW1wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0xNzQyPXN0YXRpYyBsb25nIGtlcm5lbF9tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNzYyLVxubW0vbWVtcG9saWN5LmM6MTc2MzpTWVNDQUxMX0RFRklORTQoc2V0X21lbXBvbGljeV9ob21lX25vZGUsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBsZW4sXG5tbS9tZW1wb2xpY3kuYy0xNzY0LVx0XHR1bnNpZ25lZCBsb25nLCBob21lX25vZGUsIHVuc2lnbmVkIGxvbmcsIGZsYWdzKVxuLS1cbm1tL21lbXBvbGljeS5jLTE4MjktXG5tbS9tZW1wb2xpY3kuYzoxODMwOlNZU0NBTExfREVGSU5FNihtYmluZCwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIGxlbixcbm1tL21lbXBvbGljeS5jLTE4MzEtXHRcdHVuc2lnbmVkIGxvbmcsIG1vZGUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICosIG5tYXNrLFxuLS1cbm1tL21lbXBvbGljeS5jPTE4Mzg9c3RhdGljIGxvbmcga2VybmVsX3NldF9tZW1wb2xpY3koaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICpubWFzayxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xODU2LVxubW0vbWVtcG9saWN5LmM6MTg1NzpTWVNDQUxMX0RFRklORTMoc2V0X21lbXBvbGljeSwgaW50LCBtb2RlLCBjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqLCBubWFzayxcbm1tL21lbXBvbGljeS5jLTE4NTgtXHRcdHVuc2lnbmVkIGxvbmcsIG1heG5vZGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBDb2RlIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHRoZSBmdW5jdGlvbmFsaXR5IHdlJiMzOTtyZSBsb29raW5nIGF0LCBzcGVjaWZpY2FsbHkgdGhlIE5VTUEgbWVtcG9saWN5IHdlaWdodGVkIGludGVybGVhdmUgcGFnZSBhbGxvY2F0aW9uLiBJIHN0YXJ0ZWQgYnkgY29uc2lkZXJpbmcgdGhlIGxpa2VseSBzdXNwZWN0czogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGBkb19zZXRfbWVtcG9saWN5YCwgYGtlcm5lbF9zZXRfbWVtcG9saWN5YCwgYW5kIHRoZSBzeXN0ZW0gY2FsbCBkZWZpbml0aW9ucyBsaWtlIGBTWVNDQUxMX0RFRklORTMoc2V0X21lbXBvbGljeSwgLi4uKWAgYW5kIGBTWVNDQUxMX0RFRklORTYobWJpbmQsIC4uLilgIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplZCBhcyByZWxldmFudC4KClRoZSBjb3JlIG9mIHRoaXMgYW5hbHlzaXMgZm9jdXNlcyBvbiBmaW5kaW5nIGdvb2Qgc3ltYm9scy4gSSB0aGVuIHJlbWluZCBteXNlbGYgYWJvdXQgdGhlIGJlc3QgcHJhY3RpY2Ugb2YgcHJlZmVycmluZyBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gaW50ZXJuYWwgaGVscGVycywgYXMgdGhlc2UgaGF2ZSBjbGVhciBzeW1ib2xzIGZvciBhbmFseXNpcy4KCkkmIzM5O20gZm9jdXNlZCBvbiB0aGUgcmVsYXRpb25zaGlwIG9mIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFuZCBpdHMgY2FsbGVycy4gSXQgY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAsIHdoaWNoIGlzIHRoZSBrZXkgZnVuY3Rpb24gaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJsZWF2ZSBhbGdvcml0aG0sIGFzIG1lbnRpb25lZCBpbiB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBhbmFseXNpcy4gQW5kIHRoZW4gSSBoYXZlIGBtZW1wb2xpY3lfc3lzZnNfaW5pdGAgaXMgYWxzbyByZWxldmFudCBiZWNhdXNlIGl0IGlzIGluaXRpYWxpemVkIHVzaW5nIGBfX2luaXRgLgoKSSYjMzk7bSBjaGVja2luZyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCB3aXRoaW4gYG1tL21lbXBvbGljeS5jYCwgYW5kIHRyYWNpbmcgaXRzIGNhbGxzIHRocm91Z2ggYF9feDY0X3N5c19zZXRfbWVtcG9saWN5YCBvciBgZG9fc2V0X21lbXBvbGljeWAsIGFuZCBgbXBvbF9zZXRfbm9kZW1hc2tgLCBldGMuCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgaW5kZWVkIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsLgoKVGhlIGNyaXRpY2FsIHBpZWNlLCBhcyBvdXRsaW5lZCBpbiAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LCBpcyB0aGUgZGl2aXNpb24tYnktemVybyBwcm90ZWN0aW9uIGFkZGVkIGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIHdpdGggdGhlIGNoZWNrIGBpZiAoIXdlaWdodF90b3RhbClgLiBUaGlzIGNoYW5nZSBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIHdlaWdodGVkIGludGVybGVhdmUgcGFnZSBhbGxvY2F0aW9uIGxvZ2ljLCByZWFjaGFibGUgdmlhIHN5c2NhbGxzIGxpa2UgYHNldF9tZW1wb2xpY3koTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFLCAuLi4pYCBjb21iaW5lZCB3aXRoIHZtYWxsb2Mgb3IgYnVsayBwYWdlIGFsbG9jYXRpb25zLiBJIHNlZSB0aGlzIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIHBhcnRpY3VsYXJseSBpZiBOVU1BIGlzIGVuYWJsZWQgaW4gUUVNVS4gVGhhdCYjMzk7cyBnb29kIG5ld3MgZm9yIGZ1enppbmcuCgpGaW5hbGx5LCBJJiMzOTttIGNoZWNraW5nIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uLiBgQ09ORklHX05VTUFgIGlzIGRlZmluZWQgaW4gYG1tL01ha2VmaWxlYCBhbmQgaXQgc2VlbXMgbmVjZXNzYXJ5IGFzIHBlciBgb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1wb2xpY3kub2AuIEkmIzM5O20gYWxzbyBsb29raW5nIHRocm91Z2ggYG1tL0tjb25maWdgIGFuZCBgbW0vbWVtcG9saWN5LmNgIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTc3ND1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtNzc3LXtcbm1tL21lbXBvbGljeS5jOjc3ODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtcG9saWN5LmMtNzc5LVx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbi0tXG5tbS9tZW1wb2xpY3kuYy04MjMtXG5tbS9tZW1wb2xpY3kuYzo4MjQ6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xubW0vbWVtcG9saWN5LmMtODI1LS8qKlxuLS1cbm1tL21lbXBvbGljeS5jPTExNTA9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtMTI1MC1cbm1tL21lbXBvbGljeS5jOjEyNTE6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxubW0vbWVtcG9saWN5LmMtMTI1Mi1zdGF0aWMgYm9vbCBtaWdyYXRlX2ZvbGlvX2FkZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb2xpc3QsXG4tLVxubW0vbWVtcG9saWN5LmM9MjI3Mj1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxuLS1cbm1tL21lbXBvbGljeS5jLTIzMTUtXG5tbS9tZW1wb2xpY3kuYzoyMzE2OiNpZmRlZiBDT05GSUdfSFVHRVRMQkZTXG5tbS9tZW1wb2xpY3kuYy0yMzE3LS8qXG4tLVxubW0vbWVtcG9saWN5LmM9MzI5Nz1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKG1wb2xfZnJlZV9zaGFyZWRfcG9saWN5LCBcJiMzNDtrdm1cJiMzNDspO1xubW0vbWVtcG9saWN5LmMtMzI5OC1cbm1tL21lbXBvbGljeS5jOjMyOTk6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xubW0vbWVtcG9saWN5LmMtMzMwMC1zdGF0aWMgaW50IF9faW5pdGRhdGEgbnVtYWJhbGFuY2luZ19vdmVycmlkZTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNDA4PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG9saWN5X21vZGVzW10gPVxuLS1cbm1tL21lbXBvbGljeS5jLTM0MTgtXG5tbS9tZW1wb2xpY3kuYzozNDE5OiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL21lbXBvbGljeS5jLTM0MjAtLyoqXG4tLVxubW0vbWVtcG9saWN5LmM9MzU2Nj12b2lkIG1wb2xfdG9fc3RyKGNoYXIgKmJ1ZmZlciwgaW50IG1heGxlbiwgc3RydWN0IG1lbXBvbGljeSAqcG9sKVxuLS1cbm1tL21lbXBvbGljeS5jLTM2MjItXG5tbS9tZW1wb2xpY3kuYzozNjIzOiNpZmRlZiBDT05GSUdfU1lTRlNcbm1tL21lbXBvbGljeS5jLTM2MjQtc3RydWN0IGl3X25vZGVfYXR0ciB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDcxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBXZWlnaHRlZCBJbnRlcmxlYXZpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyB3ZSBjb25maWd1cmUgd2VpZ2h0ZWQgaW50ZXJsZWF2aW5nLiBJIHNlZSB0aGF0IHRoZSBzeXNmcyBub2RlcyBmb3Igc2V0dGluZyB0aG9zZSB3ZWlnaHRzLCBhbmQgZXNzZW50aWFsbHkgY3JlYXRpbmcgdGhlIHdlaWdodGVkX2ludGVybGVhdmUgc3RhdGUsIGFyZSBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19TWVNGU2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBib3RoIGBDT05GSUdfTlVNQWAgYW5kIGBDT05GSUdfU1lTRlNgIGFyZSBnb2luZyB0byBiZSBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIGNvbnNpZGVyIHdoZW4gZGVhbGluZyB3aXRoIHN5c2ZzLWJhc2VkIHdlaWdodGVkIGludGVybGVhdmluZyBhbmQgdGhlIHVzZSBvZiBtZW1wb2xpY2llcy4gR290dGEga2VlcCB0aG9zZSB0d28gaW4gbWluZC4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgRm9jdXNTeW1ib2xzIHRvIGJlIGFic29sdXRlbHkgc3VyZTogSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGVpdGhlciBgX194NjRfc3lzX3NldF9tZW1wb2xpY3lgIG9yIGBkb19zZXRfbWVtcG9saWN5YC4gSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IHRob3NlIGFyZSB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uLgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgYGRvX3NldF9tZW1wb2xpY3lgLiBJcyB0aGF0IGZ1bmN0aW9uIHN0YXRpYz8gSXMgaXQgYWNjZXNzaWJsZT8gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBtbS9tZW1wb2xpY3kuY2AgdG8gY2xhcmlmeSB0aGF0IHF1aWNrbHkuIEdvdHRhIGNoZWNrIHRoZSBzb3VyY2UgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc2V0X21lbXBvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTEwNDI9c3RhdGljIGludCBtYmluZF9yYW5nZShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTEwNjktLyogU2V0IHRoZSBwcm9jZXNzIG1lbW9yeSBwb2xpY3kgKi9cbm1tL21lbXBvbGljeS5jOjEwNzA6c3RhdGljIGxvbmcgZG9fc2V0X21lbXBvbGljeSh1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBzaG9ydCBmbGFncyxcbm1tL21lbXBvbGljeS5jLTEwNzEtXHRcdFx0ICAgICBub2RlbWFza190ICpub2Rlcylcbi0tXG5tbS9tZW1wb2xpY3kuYz0xODM4PXN0YXRpYyBsb25nIGtlcm5lbF9zZXRfbWVtcG9saWN5KGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqbm1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtMTg1My1cbm1tL21lbXBvbGljeS5jOjE4NTQ6XHRyZXR1cm4gZG9fc2V0X21lbXBvbGljeShsbW9kZSwgbW9kZV9mbGFncywgXHUwMDI2bm9kZXMpO1xubW0vbWVtcG9saWN5LmMtMTg1NS19XG4tLVxubW0vbWVtcG9saWN5LmM9MzM0Nj12b2lkIF9faW5pdCBudW1hX3BvbGljeV9pbml0KHZvaWQpXG4tLVxubW0vbWVtcG9saWN5LmMtMzM5Mi1cbm1tL21lbXBvbGljeS5jOjMzOTM6XHRpZiAoZG9fc2V0X21lbXBvbGljeShNUE9MX0lOVEVSTEVBVkUsIDAsIFx1MDAyNmludGVybGVhdmVfbm9kZXMpKVxubW0vbWVtcG9saWN5LmMtMzM5NC1cdFx0cHJfZXJyKFwmIzM0OyVzOiBpbnRlcmxlYXZpbmcgZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MzQwMD12b2lkIG51bWFfZGVmYXVsdF9wb2xpY3kodm9pZClcbm1tL21lbXBvbGljeS5jLTM0MDEte1xubW0vbWVtcG9saWN5LmM6MzQwMjpcdGRvX3NldF9tZW1wb2xpY3koTVBPTF9ERUZBVUxULCAwLCBOVUxMKTtcbm1tL21lbXBvbGljeS5jLTM0MDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwNAoJCQkJCQkJb3V0cHV0OiAxMTAKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBQb2xpY3kgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgcG9saWN5IHJlbGF0ZWQgZnVuY3Rpb25zLiBGaXJzdCwgSSBzZWUgdGhhdCBgZG9fc2V0X21lbXBvbGljeWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSwgbGlrZWx5IGludGVybmFsIHRvIHRoaXMgcGFydGljdWxhciBtb2R1bGUgb3IgZmlsZS4gT24gdGhlIG90aGVyIGhhbmQsIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzICpub3QqIGBzdGF0aWNgLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIGEgcHVibGljIGVudHJ5IHBvaW50LCBvciBhdCBsZWFzdCB2aXNpYmxlIG91dHNpZGUgaXRzIGRlZmluaW5nIGNvbXBpbGF0aW9uIHVuaXQuIFNpbWlsYXJseSwgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGFsc28gYW4gQVBJIGZ1bmN0aW9uLiBJdCB0YWtlcyBhIG5vZGUgYW5kIGNvb3JkaW5hdGVzIGFzIGlucHV0LCBpbnRlcmVzdGluZy4KCk5vdywgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9ucy4gVG8gYmUgdGhvcm91Z2gsIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRvIGJlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBlbnRyeSBwb2ludHMuCgpBaGEhIENvbmZpcm1lZC4gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgdGhlIG9uZSBkaXJlY3RseSBjYWxsaW5nIG91ciBtb2RpZmllZCBjb2RlLiBUaGF0JiMzOTtzIHRoZSBvbmUgd2UmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb24uCgpBbHJpZ2h0LCB3aXRoIHRoaXMgaW5mb3JtYXRpb24sIHRpbWUgdG8gYHNldC1yZXN1bHRzYC4gSSB0aGluayB3ZSYjMzk7dmUgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcywgbm93IHdlIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtTWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmV2ZW50cyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB3aGVuIHRoZSB0b3RhbCB3ZWlnaHQgb2YgdGhlIGNhbmRpZGF0ZSBOVU1BIG5vZGVzIGlzIHplcm8uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgY29yZSBOVU1BIG1lbW9yeSBwb2xpY3kgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHdoZW4gdGhlIHRvdGFsIHdlaWdodCBvZiB0aGUgY2FuZGlkYXRlIE5VTUEgbm9kZXMgaXMgemVyby4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIE5VTUEgbWVtb3J5IHBvbGljeSBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgemVybyBjaGVjayBmb3IgJiMzOTt3ZWlnaHRfdG90YWwmIzM5OyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB0byBwcmV2ZW50IGEgZGl2aXNpb24tYnktemVybyBrZXJuZWwgY3Jhc2ggd2hlbiBjYWxjdWxhdGluZyAmIzM5O3JvdW5kcyYjMzk7IGFuZCAmIzM5O2RlbHRhJiMzOTsgKHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbCkuIFRoZSBtZW1vcnkgYnVmZmVyICYjMzk7d2VpZ2h0cyYjMzk7IGlzIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MoKSBhbmQgZnJlZWQgYmVmb3JlIHJldHVybmluZyBvbiB0aGlzIGVycm9yIHBhdGguIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBEaXZpc2lvbi1ieS16ZXJvIGNyYXNoZXMgYXJlIGRldGVjdGVkIHdpdGhvdXQgS01TQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliNjE5YzA1YWQxZTMxNDYyMjZhYzQwMWQ5MjgwZDQ4YjU3NzRhYTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAxOjQ5OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA1MDFlMGI4MGQ3ZGExLi44Yjk3MjhlN2E1OTdlIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMjcwNyw2ICYjNDM7MjcwNywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLAogCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlcykKIAkJd2VpZ2h0X3RvdGFsICYjNDM7PSB3ZWlnaHRzW25vZGVdOwogCiYjNDM7CWlmICghd2VpZ2h0X3RvdGFsKSB7CiYjNDM7CQlrZnJlZSh3ZWlnaHRzKTsKJiM0MzsJCXJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLgogCSAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgYG1tL21lbXBvbGljeS5jYCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB1c2VyJiMzOTtzIHJlcXVlc3QgaXMgY2xlYXI6IGFzc2VzcyB0aGlzIHBhdGNoIGluIGBtbS9tZW1wb2xpY3kuY2AgYW5kIGRldGVybWluZSBpZiBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgd2FycmFudGVkLiBObyBwcm9ibGVtLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE15IGZpcnN0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IGRpc3NlY3QgdGhlIGRpZmYgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aG9zZSBjaGFuZ2VzLiBDb250ZXh0IGlzIGNydWNpYWwuCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBQZWVraW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9tZW1wb2xpY3kuY2AgaXMgbm9uLW5lZ290aWFibGUuIEkgbmVlZCB0byBnZXQgYSBnb29kIHNlbnNlIG9mIHRoZSBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgYXJlYXMgdGhhdCB0aGlzIHBhdGNoIG1pZ2h0IHRvdWNoLiBUaGF0JiMzOTtzIHdoZXJlIGByZWFkLWZpbGVgIHdpbGwgYmUgaW52YWx1YWJsZSDigJMgSSYjMzk7bGwgem9vbSBpbiBhcm91bmQgbGluZSAyNzA3LCBzcGVjaWZpY2FsbHkuIEV4YW1pbmluZyB0aGUgbGluZXMgYmVmb3JlIGFuZCBhZnRlciB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHRoZSBjb2RlICpjaGFuZ2VkKjsgaXQmIzM5O3MgYWJvdXQgdGhlIGNvZGUgdGhhdCYjMzk7cyAqYmVpbmcgdXNlZCogd2l0aGluIHRoZSByZWxldmFudCBhcmVhLgoKTXkgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgZGF0YSByYWNlcywgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCAob3IgZXhwb3NlZCkgYnkgdGhpcyBwYXRjaC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IGFsbG9jYXRpb24sIHBvbGljeSBlbmZvcmNlbWVudCwgYW5kIHBvdGVudGlhbCBjb25jdXJyZW50IGFjY2VzcyBwYXR0ZXJucy4gT25seSBhZnRlciB0aGlzIHRob3JvdWdoIGludmVzdGlnYXRpb24gY2FuIEkgY29uZmlkZW50bHkgbWFrZSBhIGNhbGwgb24gd2hldGhlciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIGFjdHVhbGx5ICpuZWNlc3NhcnkqLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgbmV3IHJpc2tzIG9yIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSBleGlzdGluZyBtZW1vcnkgc2FmZXR5IHByb2ZpbGUgb2YgdGhlIHJlbGV2YW50IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2ODA6XHRcdFx0XHRtZS1cdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xuMjY4MTpcdFx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNjgyOlx0XHRcdH1cbjI2ODM6XHRcdFx0LyogT3RoZXJ3aXNlIHdlIGFkanVzdCByZW1haW5pbmcgcGFnZXMsIGNvbnRpbnVlIGZyb20gdGhlcmUgKi9cbjI2ODQ6XHRcdFx0cmVtX3BhZ2VzIC09IHdlaWdodDtcbjI2ODU6XHRcdH1cbjI2ODY6XHRcdC8qIGNsZWFyIGFjdGl2ZSB3ZWlnaHQgaW4gY2FzZSBvZiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cbjI2ODc6XHRcdG1lLVx1MDAzZWlsX3dlaWdodCA9IDA7XG4yNjg4Olx0XHRwcmV2X25vZGUgPSBub2RlO1xuMjY4OTpcdFxuMjY5MDpcdFx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xuMjY5MTpcdFx0d2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpO1xuMjY5MjpcdFx0aWYgKCF3ZWlnaHRzKVxuMjY5MzpcdFx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuMjY5NDpcdFxuMjY5NTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjY5NjpcdFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xuMjY5NzpcdFx0aWYgKHN0YXRlKSB7XG4yNjk4Olx0XHRcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cdTAwM2Vpd190YWJsZSwgbnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTtcbjI2OTk6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNzAwOlx0XHR9IGVsc2Uge1xuMjcwMTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI3MDI6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KVxuMjcwMzpcdFx0XHRcdHdlaWdodHNbaV0gPSAxO1xuMjcwNDpcdFx0fVxuMjcwNTpcdFxuMjcwNjpcdFx0LyogY2FsY3VsYXRlIHRvdGFsLCBkZXRlY3Qgc3lzdGVtIGRlZmF1bHQgdXNhZ2UgKi9cbjI3MDc6XHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlcylcbjI3MDg6XHRcdFx0d2VpZ2h0X3RvdGFsICYjNDM7PSB3ZWlnaHRzW25vZGVdO1xuMjcwOTpcdFxuMjcxMDpcdFx0aWYgKCF3ZWlnaHRfdG90YWwpIHtcbjI3MTE6XHRcdFx0a2ZyZWUod2VpZ2h0cyk7XG4yNzEyOlx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNzEzOlx0XHR9XG4yNzE0Olx0XG4yNzE1Olx0XHQvKlxuMjcxNjpcdFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG4yNzE3Olx0XHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuMjcxODpcdFx0ICpcbjI3MTk6XHRcdCAqIGlmIChyb3VuZHMgXHUwMDNlIDApIGFuZCAoZGVsdGEgPT0gMCksIHJlc3VtZV9ub2RlIHdpbGwgYWx3YXlzIGJlXG4yNzIwOlx0XHQgKiB0aGUgbm9kZSBmb2xsb3dpbmcgcHJldl9ub2RlIGFuZCBpdHMgd2VpZ2h0LlxuMjcyMTpcdFx0ICovXG4yNzIyOlx0XHRyb3VuZHMgPSByZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWw7XG4yNzIzOlx0XHRkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtcbjI3MjQ6XHRcdHJlc3VtZV9ub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyNTpcdFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodHNbcmVzdW1lX25vZGVdO1xuMjcyNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbm5vZGVzOyBpJiM0MzsmIzQzOykge1xuMjcyNzpcdFx0XHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyODpcdFx0XHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xuMjcyOTpcdFx0XHRub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzO1xuMjczMDpcdFx0XHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSYjMzk7cyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuMjczMTpcdFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuMjczMjpcdFx0XHRcdG5vZGVfcGFnZXMgJiM0Mzs9IHdlaWdodDtcbjI3MzM6XHRcdFx0XHRkZWx0YSAtPSB3ZWlnaHQ7XG4yNzM0Olx0XHRcdH0gZWxzZSBpZiAoZGVsdGEpIHtcbjI3MzU6XHRcdFx0XHQvKiB3aGVuIGRlbHRhIGlzIGRlcGxldGVkLCByZXN1bWUgZnJvbSB0aGF0IG5vZGUgKi9cbjI3MzY6XHRcdFx0XHRub2RlX3BhZ2VzICYjNDM7PSBkZWx0YTtcbjI3Mzc6XHRcdFx0XHRyZXN1bWVfbm9kZSA9IG5vZGU7XG4yNzM4Olx0XHRcdFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodCAtIGRlbHRhO1xuMjczOTpcdFx0XHRcdGRlbHRhID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0OQoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAzNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCwgaXMgZm9jdXNlZCBvbiBhIHBvdGVudGlhbCBkaXZpc2lvbi1ieS16ZXJvIHZ1bG5lcmFiaWxpdHkuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIGNhbGN1bGF0ZXMgYHdlaWdodF90b3RhbGAgYnkgc3VtbWluZyB1cCBgd2VpZ2h0c1tub2RlXWAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGB3ZWlnaHRfdG90YWxgIGV2YWx1YXRlcyB0byB6ZXJvOyB0aGUgc3Vic2VxdWVudCBkaXZpc2lvbiBvcGVyYXRpb25zLCBgcm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO2AgYW5kIGBkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtgLCB0aGVuIHRyaWdnZXIgYSBkaXZpc2lvbi1ieS16ZXJvIGV4Y2VwdGlvbiwgd2hpY2ggaXMgYSB0ZXh0Ym9vayBrZXJuZWwgY3Jhc2ggc2NlbmFyaW8uCgpUaGUgcGF0Y2ggaXRzZWxmIGNsZXZlcmx5IGFkZHJlc3NlcyB0aGlzIGJ5IGFkZGluZyBhIGNydWNpYWwgY2hlY2s6IGBpZiAoIXdlaWdodF90b3RhbClgLiBJZiBgd2VpZ2h0X3RvdGFsYCBpcyB6ZXJvLCBpdCBmcmVlcyB0aGUgYWxsb2NhdGVkIGB3ZWlnaHRzYCBhcnJheSBhbmQgaW1tZWRpYXRlbHkgcmV0dXJucyBgdG90YWxfYWxsb2NhdGVkYC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWZmZWN0aXZlIGZpeC4KCk5vdywgbGV0JiMzOTtzIHRob3JvdWdobHkgZXhhbWluZSB0aGlzIHBhdGNoIGZvciBhbnkgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRmlyc3QsIEkgbm90ZSB0aGF0IGB3ZWlnaHRzYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpYC4gVGhpcyBpcyBrZXk7IGBremFsbG9jYCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24sIHdoaWNoIGlzIGV4Y2VsbGVudC4gU2Vjb25kLCB0aGUgY29kZSBjaGVja3MgaWYgYCF3ZWlnaHRfdG90YWxgLCB0aGVuIGBrZnJlZSh3ZWlnaHRzKWAgaXMgY2FsbGVkLCBhbmQgYHRvdGFsX2FsbG9jYXRlZGAgaXMgcmV0dXJuZWQuIENydWNpYWxseSwgSSBzZWUgbm8gc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgZml4IGRpcmVjdGx5IGFkZHJlc3NlcyBhIGRpdmlkZS1ieS16ZXJvLCBhIHN0YW5kYXJkIGFyaXRobWV0aWMgZXhjZXB0aW9uIGFuZCB0aGVyZWZvcmUsIGEga2VybmVsIG9vcHMgc2l0dWF0aW9uLiBJIGFsc28gc2VlIG5vIGluZGljYXRpb24gdGhhdCB0aGUgS01TQU4tc3BlY2lmaWMgY2hlY2tzIHdvdWxkIGJlIGltcGFjdGVkIGhlcmUuCgpHaXZlbiBhbGwgb2YgdGhpcywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgYXMgaXQgcmVsYXRlcyB0byBLQVNBTiBhcyB3ZWxsLiBEaXZpc2lvbiBieSB6ZXJvIGlzIGEgY2xhc3NpYyBrZXJuZWwgYnVnLiBSZWd1bGFyIHRlc3RpbmcgYW5kIGZ1enppbmcgdHlwaWNhbGx5IGV4cG9zZSBzdWNoIGVycm9ycyB2ZXJ5IHF1aWNrbHkuIE1vcmUgZ2VuZXJhbGx5LCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBwYWRkaW5nIGlzc3VlcyBhcmUgcHJlc2VudCBoZXJlLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGEgYE5lZWRzS01TQU5gIHRhZy4KCkkgYW0gbm93IGdvaW5nIHRvIGNsZWFybHkgd3JpdGUgdGhlIEtNU0FOUmVhc29uaW5nIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB6ZXJvIGNoZWNrIGZvciAmIzM5O3dlaWdodF90b3RhbCYjMzk7IGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHRvIHByZXZlbnQgYSBkaXZpc2lvbi1ieS16ZXJvIGtlcm5lbCBjcmFzaCB3aGVuIGNhbGN1bGF0aW5nICYjMzk7cm91bmRzJiMzOTsgYW5kICYjMzk7ZGVsdGEmIzM5OyAocmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsKS4gVGhlIG1lbW9yeSBidWZmZXIgJiMzOTt3ZWlnaHRzJiMzOTsgaXMgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIGFuZCBmcmVlZCBiZWZvcmUgcmV0dXJuaW5nIG9uIHRoaXMgZXJyb3IgcGF0aC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIERpdmlzaW9uLWJ5LXplcm8gY3Jhc2hlcyBhcmUgZGV0ZWN0ZWQgd2l0aG91dCBLTVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB6ZXJvIGNoZWNrIGZvciAmIzM5O3dlaWdodF90b3RhbCYjMzk7IGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHRvIHByZXZlbnQgYSBkaXZpc2lvbi1ieS16ZXJvIGtlcm5lbCBjcmFzaCB3aGVuIGNhbGN1bGF0aW5nICYjMzk7cm91bmRzJiMzOTsgYW5kICYjMzk7ZGVsdGEmIzM5OyAocmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsKS4gVGhlIG1lbW9yeSBidWZmZXIgJiMzOTt3ZWlnaHRzJiMzOTsgaXMgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIGFuZCBmcmVlZCBiZWZvcmUgcmV0dXJuaW5nIG9uIHRoaXMgZXJyb3IgcGF0aC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIERpdmlzaW9uLWJ5LXplcm8gY3Jhc2hlcyBhcmUgZGV0ZWN0ZWQgd2l0aG91dCBLTVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NDk6MjYuOTQzMzY1MDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjcxMDAzNDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHplcm8gY2hlY2sgZm9yICd3ZWlnaHRfdG90YWwnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHRvIHByZXZlbnQgYSBkaXZpc2lvbi1ieS16ZXJvIGtlcm5lbCBjcmFzaCB3aGVuIGNhbGN1bGF0aW5nICdyb3VuZHMnIGFuZCAnZGVsdGEnIChyZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWwpLiBUaGUgbWVtb3J5IGJ1ZmZlciAnd2VpZ2h0cycgaXMgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIGFuZCBmcmVlZCBiZWZvcmUgcmV0dXJuaW5nIG9uIHRoaXMgZXJyb3IgcGF0aC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIERpdmlzaW9uLWJ5LXplcm8gY3Jhc2hlcyBhcmUgZGV0ZWN0ZWQgd2l0aG91dCBLTVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwcmV2ZW50cyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB3aGVuIHRoZSB0b3RhbCB3ZWlnaHQgb2YgdGhlIGNhbmRpZGF0ZSBOVU1BIG5vZGVzIGlzIHplcm8uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgY29yZSBOVU1BIG1lbW9yeSBwb2xpY3kgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo0OToyNi45NDMzNzEyMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMTExOTcxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDliNjE5YzA1YWQxZTMxNDYyMjZhYzQwMWQ5MjgwZDQ4YjU3NzRhYThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwMTo0OToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXFxuaW5kZXggNTAxZTBiODBkN2RhMS4uOGI5NzI4ZTdhNTk3ZSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xcbisrKyBiL21tL21lbXBvbGljeS5jXFxuQEAgLTI3MDcsNiArMjcwNywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbiBcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXFxuIFxcdFxcdHdlaWdodF90b3RhbCArPSB3ZWlnaHRzW25vZGVdO1xcbiBcXG4rXFx0aWYgKCF3ZWlnaHRfdG90YWwpIHtcXG4rXFx0XFx0a2ZyZWUod2VpZ2h0cyk7XFxuK1xcdFxcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbiBcXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo0OToyOC40NTUwNDgwMzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQwMTUwMjAwMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKCkgd2hlbiB0aGUgdG90YWwgd2VpZ2h0IG9mIHRoZSBjYW5kaWRhdGUgTlVNQSBub2RlcyBpcyB6ZXJvLiBUaGlzIGxvZ2ljIGlzIHBhcnQgb2YgdGhlIGNvcmUgTlVNQSBtZW1vcnkgcG9saWN5IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWI2MTljMDVhZDFlMzE0NjIyNmFjNDAxZDkyODBkNDhiNTc3NGFhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6NDk6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCA1MDFlMGI4MGQ3ZGExLi44Yjk3MjhlN2E1OTdlIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbisrKyBiL21tL21lbXBvbGljeS5jXG5AQCAtMjcwNyw2ICsyNzA3LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4gXHRcdHdlaWdodF90b3RhbCArPSB3ZWlnaHRzW25vZGVdO1xuIFxuK1x0aWYgKCF3ZWlnaHRfdG90YWwpIHtcbitcdFx0a2ZyZWUod2VpZ2h0cyk7XG4rXHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG4gXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NDk6MjguNDU1MDQ5NDI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxNjQ0NDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgdGhlIGBtbS9tZW1wb2xpY3kuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlZCBgbW0vbWVtcG9saWN5LmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwdWxsIHVwIHRoZSBkaWZmIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICpleGFjdGx5KiB3aGF0IHdhcyBjaGFuZ2VkLCBsaW5lIGJ5IGxpbmUuIFRoZW4sIEknbGwgbmVlZCB0byBleHBhbmQgbXkgdmlldyBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyB3ZSBzaG91bGQgemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAyNzA3IGluIHRoYXQgZmlsZS4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGEgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBsb2FkIHRoYXQgc2VjdGlvbiBkaXJlY3RseSBhbmQgaGF2ZSBpdCByZWFkeSBmb3IgZm9jdXNlZCBhbmFseXNpcy4gVGhpcyBzaG91bGQgZ2l2ZSB1cyB0aGUgbmVjZXNzYXJ5IGJ1aWxkaW5nIGJsb2NrcyB0byBkZXRlcm1pbmUgaG93IHRoaXMgcGF0Y2ggYWZmZWN0cyBtZW1vcnkgcG9saWN5IGJlaGF2aW9yIGFuZCB3aGV0aGVyIGl0IGFsaWducyB3aXRoIG91ciBleHBlY3RhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjMwLjI3MTQ5NjU2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODQzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjgwOlxcdFxcdFxcdFxcdG1lLVxcdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xcbjI2ODE6XFx0XFx0XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNjgyOlxcdFxcdFxcdH1cXG4yNjgzOlxcdFxcdFxcdC8qIE90aGVyd2lzZSB3ZSBhZGp1c3QgcmVtYWluaW5nIHBhZ2VzLCBjb250aW51ZSBmcm9tIHRoZXJlICovXFxuMjY4NDpcXHRcXHRcXHRyZW1fcGFnZXMgLT0gd2VpZ2h0O1xcbjI2ODU6XFx0XFx0fVxcbjI2ODY6XFx0XFx0LyogY2xlYXIgYWN0aXZlIHdlaWdodCBpbiBjYXNlIG9mIGFuIGFsbG9jYXRpb24gZmFpbHVyZSAqL1xcbjI2ODc6XFx0XFx0bWUtXFx1MDAzZWlsX3dlaWdodCA9IDA7XFxuMjY4ODpcXHRcXHRwcmV2X25vZGUgPSBub2RlO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHQvKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovXFxuMjY5MTpcXHRcXHR3ZWlnaHRzID0ga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7XFxuMjY5MjpcXHRcXHRpZiAoIXdlaWdodHMpXFxuMjY5MzpcXHRcXHRcXHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xcbjI2OTQ6XFx0XFxuMjY5NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjY5NjpcXHRcXHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XFxuMjY5NzpcXHRcXHRpZiAoc3RhdGUpIHtcXG4yNjk4OlxcdFxcdFxcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XFxuMjY5OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAwOlxcdFxcdH0gZWxzZSB7XFxuMjcwMTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAyOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbjI3MDM6XFx0XFx0XFx0XFx0d2VpZ2h0c1tpXSA9IDE7XFxuMjcwNDpcXHRcXHR9XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXFxuMjcwNzpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXFxuMjcwODpcXHRcXHRcXHR3ZWlnaHRfdG90YWwgKz0gd2VpZ2h0c1tub2RlXTtcXG4yNzA5OlxcdFxcbjI3MTA6XFx0XFx0aWYgKCF3ZWlnaHRfdG90YWwpIHtcXG4yNzExOlxcdFxcdFxcdGtmcmVlKHdlaWdodHMpO1xcbjI3MTI6XFx0XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNzEzOlxcdFxcdH1cXG4yNzE0OlxcdFxcbjI3MTU6XFx0XFx0LypcXG4yNzE2OlxcdFxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbjI3MTc6XFx0XFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4yNzE4OlxcdFxcdCAqXFxuMjcxOTpcXHRcXHQgKiBpZiAocm91bmRzIFxcdTAwM2UgMCkgYW5kIChkZWx0YSA9PSAwKSwgcmVzdW1lX25vZGUgd2lsbCBhbHdheXMgYmVcXG4yNzIwOlxcdFxcdCAqIHRoZSBub2RlIGZvbGxvd2luZyBwcmV2X25vZGUgYW5kIGl0cyB3ZWlnaHQuXFxuMjcyMTpcXHRcXHQgKi9cXG4yNzIyOlxcdFxcdHJvdW5kcyA9IHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbDtcXG4yNzIzOlxcdFxcdGRlbHRhID0gcmVtX3BhZ2VzICUgd2VpZ2h0X3RvdGFsO1xcbjI3MjQ6XFx0XFx0cmVzdW1lX25vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyNTpcXHRcXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0c1tyZXN1bWVfbm9kZV07XFxuMjcyNjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbm5vZGVzOyBpKyspIHtcXG4yNzI3OlxcdFxcdFxcdG5vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyODpcXHRcXHRcXHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xcbjI3Mjk6XFx0XFx0XFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcXG4yNzMwOlxcdFxcdFxcdC8qIElmIGEgZGVsdGEgZXhpc3RzLCBhZGQgdGhpcyBub2RlJ3MgcG9ydGlvbiBvZiB0aGUgZGVsdGEgKi9cXG4yNzMxOlxcdFxcdFxcdGlmIChkZWx0YSBcXHUwMDNlIHdlaWdodCkge1xcbjI3MzI6XFx0XFx0XFx0XFx0bm9kZV9wYWdlcyArPSB3ZWlnaHQ7XFxuMjczMzpcXHRcXHRcXHRcXHRkZWx0YSAtPSB3ZWlnaHQ7XFxuMjczNDpcXHRcXHRcXHR9IGVsc2UgaWYgKGRlbHRhKSB7XFxuMjczNTpcXHRcXHRcXHRcXHQvKiB3aGVuIGRlbHRhIGlzIGRlcGxldGVkLCByZXN1bWUgZnJvbSB0aGF0IG5vZGUgKi9cXG4yNzM2OlxcdFxcdFxcdFxcdG5vZGVfcGFnZXMgKz0gZGVsdGE7XFxuMjczNzpcXHRcXHRcXHRcXHRyZXN1bWVfbm9kZSA9IG5vZGU7XFxuMjczODpcXHRcXHRcXHRcXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0IC0gZGVsdGE7XFxuMjczOTpcXHRcXHRcXHRcXHRkZWx0YSA9IDA7XFxuMjc0MDpcXHRcXHRcXHR9XFxuMjc0MTpcXHRcXHRcXHQvKiBub2RlX3BhZ2VzIGNhbiBiZSAwIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgYW5kIHJvdW5kcyA9PSAwICovXFxuMjc0MjpcXHRcXHRcXHRpZiAoIW5vZGVfcGFnZXMpXFxuMjc0MzpcXHRcXHRcXHRcXHRicmVhaztcXG4yNzQ0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxuMjc0NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbjI3NDY6XFx0XFx0XFx0cGFnZV9hcnJheSArPSBucl9hbGxvY2F0ZWQ7XFxuMjc0NzpcXHRcXHRcXHR0b3RhbF9hbGxvY2F0ZWQgKz0gbnJfYWxsb2NhdGVkO1xcbjI3NDg6XFx0XFx0XFx0aWYgKHRvdGFsX2FsbG9jYXRlZCA9PSBucl9wYWdlcylcXG4yNzQ5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3NTA6XFx0XFx0XFx0cHJldl9ub2RlID0gbm9kZTtcXG4yNzUxOlxcdFxcdH1cXG4yNzUyOlxcdFxcdG1lLVxcdTAwM2VpbF9wcmV2ID0gcmVzdW1lX25vZGU7XFxuMjc1MzpcXHRcXHRtZS1cXHUwMDNlaWxfd2VpZ2h0ID0gcmVzdW1lX3dlaWdodDtcXG4yNzU0OlxcdFxcdGtmcmVlKHdlaWdodHMpO1xcbjI3NTU6XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNzU2OlxcdH1cXG4yNzU3OlxcdFxcbjI3NTg6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXFxuMjc1OTpcXHRcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjMwLjI3MTY0NjU2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzkyNDc1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBgbW0vbWVtcG9saWN5LmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogV2hlcmUgdGhlIGhlY2sgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIGdyYXBoIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFNvLCBsZXQncyBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIHNlZSB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBwb3BzIHVwIGluIHRoZSBjb2RlYmFzZS4gVGhhdCdzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjMyLjE1MDg5NTczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU4MDIwNTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yNjAwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjM0LVxcbm1tL21lbXBvbGljeS5jOjI2MzU6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjM2LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3ODQ9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5OC1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcXG5tbS9tZW1wb2xpY3kuYzoyNzk5OlxcdFxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXFxubW0vbWVtcG9saWN5LmMtMjgwMC1cXHRcXHRcXHRcXHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjMzLjcwODkyNDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTI1Njc1OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTWVtb3J5IEFsbG9jYXRpb24gQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgZGl2aWRlLWJ5LXplcm8gZXJyb3IgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSXQgc2VlbXMgdGhlc2UgZnVuY3Rpb25zLCB3aGVuIGRlYWxpbmcgd2l0aCBgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFYCBtZW1vcnkgcG9saWNpZXMsIGV2ZW50dWFsbHkgY2FsbCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC5cblxuTm93LCBiZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvZGUgd2FzIGNhbGN1bGF0aW5nIGByb3VuZHNgIGFuZCBgZGVsdGFgIGJhc2VkIG9uIGEgZGl2aXNpb24gdXNpbmcgYHdlaWdodF90b3RhbGAuIFRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgYXJpc2VzIHdoZW4gYHdlaWdodF90b3RhbGAgaXMgemVyby4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIG5vZGVzIHNwZWNpZmllZCBpbiB0aGUgYG5vZGVzYCBtYXNrIGFsbCBoYXZlIHplcm8gd2VpZ2h0IGluIGBzdGF0ZS1cdTAwM2Vpd190YWJsZWAsIG9yIHdoZW4gYG5vZGVzYCBpcyBlbXB0eSwgd2hpY2ggd291bGQgbGVhZCB0byBhIGRpdmlkZS1ieS16ZXJvLCBhIGNsYXNzaWMgYnVnLCBhbmQgcG90ZW50aWFsbHkgYSBrZXJuZWwgcGFuaWMuIFRoZSBmaXgsIGEgc2ltcGxlIGNoZWNrOlxuXG5gYGBjXG5cdGlmICghd2VpZ2h0X3RvdGFsKSB7XG5cdFx0a2ZyZWUod2VpZ2h0cyk7XG5cdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcblx0fVxuYGBgXG5cbi4uLmNvcnJlY3RseSBoYW5kbGVzIHRoaXMgZWRnZSBjYXNlIGJ5IHJldHVybmluZyB0aGUgdG90YWwgYWxsb2NhdGVkIHBhZ2VzIGFuZCBmcmVlaW5nIHRoZSBgd2VpZ2h0c2AgYXJyYXksIHdoaWNoIGF2b2lkcyB0aGUgZGl2aXNpb24uXG5cbk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBzY29wZSBvZiB0aGlzIGlzc3VlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEtjb25maWcgb3B0aW9ucyBjb250cm9sIGBtbS9tZW1wb2xpY3kuY2AgYW5kIHNwZWNpZmljYWxseSBgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFYCBvciBOVU1BIGZ1bmN0aW9uYWxpdHkgaW4gZ2VuZXJhbC4gSSdsbCBjaGVjayBgbW0vTWFrZWZpbGVgIGFuZCBgbW0vS2NvbmZpZ2AgdG8gc2VlIHdoYXQgZmxhZ3MgYXJlIHJlbGV2YW50IGFuZCwgdGhlcmVmb3JlLCB3aGljaCBjb25maWd1cmF0aW9ucyB0aGlzIGZpeCBhZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjM3LjIzNDYwMjQxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ5NTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb2xpY3lcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxcdCs9IGh1Z2V0bGJfdm1lbW1hcC5vXFxubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFxcdCs9IG1lbXBvbGljeS5vXFxubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX1NQQVJTRU1FTSlcXHQrPSBzcGFyc2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo0OTozNy4yODMxMDQzOTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDg0NDI2MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgbWVtcG9saWN5Lm8gb24gTlVNQSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19OVU1BYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGBtZW1wb2xpY3kub2AuIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgYnV0IGl0IGRvZXNuJ3QgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0IGVsc2UgaXMgY29ubmVjdGVkIHRvIGBOVU1BYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24/XCIgQXJlIHRoZXJlIG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgdGhhdCBhbHNvIGRlcGVuZCBvbiBpdD8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgaGVyZS5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBzdGVwIGlzIG9idmlvdXM6IEkgbmVlZCB0byBxdWlja2x5IGFuZCBlZmZpY2llbnRseSBleGFtaW5lIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gc2VhcmNoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBjb25maWcgTlVNQWAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBxdWljayBvdmVydmlldyBvZiBhbGwgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGRlcGVuZGVuY2llcywgaGVscGluZyBtZSB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIHBvdGVudGlhbCBkb3duc3RyZWFtIGVmZmVjdHMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGBOVU1BYC4gVGhpcyBnaXZlcyBtZSBhIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgdG9wb2xvZ3kgb2YgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjQyLjc2NzUzMzEyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NzY0NzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlVNQVxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0xNjI2PWNvbmZpZyBIT1RQTFVHX0NQVVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MzMtIyBDb21tb24gTlVNQSBGZWF0dXJlc1xcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNjM0OmNvbmZpZyBOVU1BXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MzUtXFx0Ym9vbCBcXFwiTlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTU0ND1jb25maWcgTlJfQ1BVU1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01NTItXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1NTM6Y29uZmlnIE5VTUFcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTU1NC1cXHRib29sIFxcXCJOVU1BIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZz0yNTk4PWNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTI2MDAtXFxuYXJjaC9taXBzL0tjb25maWc6MjYwMTpjb25maWcgTlVNQVxcbmFyY2gvbWlwcy9LY29uZmlnLTI2MDItXFx0Ym9vbCBcXFwiTlVNQSBTdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9NzU4PWNvbmZpZyBJUlFfQUxMX0NQVVNcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTc2Ni1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo3Njc6Y29uZmlnIE5VTUFcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy03NjgtXFx0Ym9vbCBcXFwiTlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9NDgxPWVuZGNob2ljZVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ4My0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXFxuYXJjaC9yaXNjdi9LY29uZmlnOjQ4NDpjb25maWcgTlVNQVxcbmFyY2gvcmlzY3YvS2NvbmZpZy00ODUtXFx0Ym9vbCBcXFwiTlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz01NDc9Y29uZmlnIEhPVFBMVUdfQ1BVXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01NDktXFxuYXJjaC9zMzkwL0tjb25maWc6NTUwOmNvbmZpZyBOVU1BXFxuYXJjaC9zMzkwL0tjb25maWctNTUxLVxcdGJvb2wgXFxcIk5VTUEgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZz0xMDI9Y29uZmlnIFZTWVNDQUxMXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTE0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxMTU6Y29uZmlnIE5VTUFcXG5hcmNoL3NoL21tL0tjb25maWctMTE2LVxcdGJvb2wgXFxcIk5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MgKE5VTUEpIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWc9MjU0PWNvbmZpZyBHRU5FUklDX0xPQ0tCUkVBS1xcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnLTI1OC1cXG5hcmNoL3NwYXJjL0tjb25maWc6MjU5OmNvbmZpZyBOVU1BXFxuYXJjaC9zcGFyYy9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJOVU1BIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTE0OTI9Y29uZmlnIEFNRF9NRU1fRU5DUllQVFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNTA4LSMgQ29tbW9uIE5VTUEgRmVhdHVyZXNcXG5hcmNoL3g4Ni9LY29uZmlnOjE1MDk6Y29uZmlnIE5VTUFcXG5hcmNoL3g4Ni9LY29uZmlnLTE1MTAtXFx0Ym9vbCBcXFwiTlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjQ0LjgzNTE4NTQ0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ3Mjk3NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIE1lbW9yeSBQb2xpY3kgQWxsb2NhdGlvbiBQYXRoKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBmdW5jdGlvbiwgb3IgYW55dGhpbmcgc2ltaWxhciwgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZGl2ZSBpbnRvIGBtbS9tZW1wb2xpY3kuY2AuIEkgZmlndXJlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIHJlc2lkZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gc2NhbiBhcm91bmQgbGluZSAyNzgwIHRvIHBpbnBvaW50IGhvdyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyBleHBvc2VkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqY2FsbGVkKi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGl0cyBwdXJwb3NlIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgbWVtb3J5IHBvbGljeSBmcmFtZXdvcmsuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo0OTo0Ny4wODI0ODUxMjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3ODA6XFx0ICpcXG4yNzgxOlxcdCAqIEl0IGNhbiBhY2NlbGVyYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGVzcGVjaWFsbHkgaW50ZXJsZWF2aW5nXFxuMjc4MjpcXHQgKiBhbGxvY2F0ZSBtZW1vcnkuXFxuMjc4MzpcXHQgKi9cXG4yNzg0OlxcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG4yNzg1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4yNzg2OlxcdHtcXG4yNzg3OlxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCA9IFxcdTAwMjZkZWZhdWx0X3BvbGljeTtcXG4yNzg4OlxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xcbjI3ODk6XFx0XFx0aW50IG5pZDtcXG4yNzkwOlxcdFxcbjI3OTE6XFx0XFx0aWYgKCFpbl9pbnRlcnJ1cHQoKSBcXHUwMDI2XFx1MDAyNiAhKGdmcCBcXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSlcXG4yNzkyOlxcdFxcdFxcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG4yNzkzOlxcdFxcbjI3OTQ6XFx0XFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXFxuMjc5NTpcXHRcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxcbjI3OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4yNzk3OlxcdFxcbjI3OTg6XFx0XFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxuMjc5OTpcXHRcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbjI4MDA6XFx0XFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbjI4MDE6XFx0XFxuMjgwMjpcXHRcXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxuMjgwMzpcXHRcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXFxuMjgwNDpcXHRcXHRcXHRcXHRcXHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuMjgwNTpcXHRcXG4yODA2OlxcdFxcdG5pZCA9IG51bWFfbm9kZV9pZCgpO1xcbjI4MDc6XFx0XFx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIE5PX0lOVEVSTEVBVkVfSU5ERVgsIFxcdTAwMjZuaWQpO1xcbjI4MDg6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbmlkLCBub2RlbWFzayxcXG4yODA5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuMjgxMDpcXHR9XFxuMjgxMTpcXHRcXG4yODEyOlxcdGludCB2bWFfZHVwX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QpXFxuMjgxMzpcXHR7XFxuMjgxNDpcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wgPSBtcG9sX2R1cChzcmMtXFx1MDAzZXZtX3BvbGljeSk7XFxuMjgxNTpcXHRcXG4yODE2OlxcdFxcdGlmIChJU19FUlIocG9sKSlcXG4yODE3OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBvbCk7XFxuMjgxODpcXHRcXHRkc3QtXFx1MDAzZXZtX3BvbGljeSA9IHBvbDtcXG4yODE5OlxcdFxcdHJldHVybiAwO1xcbjI4MjA6XFx0fVxcbjI4MjE6XFx0XFxuMjgyMjpcXHQvKlxcbjI4MjM6XFx0ICogSWYgbXBvbF9kdXAoKSBzZWVzIGN1cnJlbnQtXFx1MDAzZWNwdXNldCA9PSBjcHVzZXRfYmVpbmdfcmVib3VuZCwgdGhlbiBpdFxcbjI4MjQ6XFx0ICogcmViaW5kcyB0aGUgbWVtcG9saWN5IGl0cyBjb3B5aW5nIGJ5IGNhbGxpbmcgbXBvbF9yZWJpbmRfcG9saWN5KClcXG4yODI1OlxcdCAqIHdpdGggdGhlIG1lbXNfYWxsb3dlZCByZXR1cm5lZCBieSBjcHVzZXRfbWVtc19hbGxvd2VkKCkuICBUaGlzXFxuMjgyNjpcXHQgKiBrZWVwcyBtZW1wb2xpY2llcyBjcHVzZXQgcmVsYXRpdmUgYWZ0ZXIgaXRzIGNwdXNldCBtb3Zlcy4gIFNlZVxcbjI4Mjc6XFx0ICogZnVydGhlciBrZXJuZWwvY3B1c2V0LmMgdXBkYXRlX25vZGVtYXNrKCkuXFxuMjgyODpcXHQgKlxcbjI4Mjk6XFx0ICogY3VycmVudCdzIG1lbXBvbGljeSBtYXkgYmUgcmViaW5kZWQgYnkgdGhlIG90aGVyIHRhc2sodGhlIHRhc2sgdGhhdCBjaGFuZ2VzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjQ3LjA4MjcxNTYyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQzOTM4MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gU3RyYXRlZ2llcyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIHRoZXNlIGJ1bGsgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSB3aGVyZSB0aGVzZSB0aGluZ3MgYXJlICphY3R1YWxseSogY2FsbGVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEdyZXBwaW5nIGlzIHRoZSBvYnZpb3VzIHRvb2wgZm9yIHRoaXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgdGhlIGNvZGUgcGF0aHMgdXNpbmcgdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHRoZW4gcXVpY2tseSBldmFsdWF0ZSB0aGUgcmVzdWx0cyB0byBzZWUgaWYgdGhlIGNhbGxzIGFyZSBtZWFuaW5nZnVsIHRvIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NDk6NDkuMzI2NjU2NDU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxODMyNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc4My0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzg0OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzg1LVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjY5PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3MzYtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3Mzc6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzM4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjUwLjc2ODQ5MzA2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI1OTEzMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdm1hbGxvYyBhbmQgTlVNQSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBmdW5jdGlvbi4gUmlnaHQsIGl0J3MgY2FsbGVkIGJ5IGB2bWFsbG9jYCDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGl0J3MgaGFuZGxpbmcgYHZtX2FyZWFfYWxsb2NfcGFnZXNgIOKAkyBhbmQgdGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgd2hvbGUgcHJvY2VzcyBpcyBoYXBwZW5pbmcgdW5kZXIgTlVNQSwgc28gbWVtcG9saWN5IGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1wb2xpY3kgdXNpbmcgc3lzZnMgb3Igc3lzY2FsbHMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBzZXQgdGhlIHdlaWdodHMgZm9yIGVhY2ggbm9kZS4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVgIG9yIHBlcmhhcHMgYHdpX3N0YXRlYCB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQuIEl0IGhhcyB0byBiZSBpbiB0aGVyZSBzb21ld2hlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUwNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjUyLjY5NDQwODQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ3OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3aV9zdGF0ZXx3ZWlnaHRlZF9pbnRlcmxlYXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi92YWRkci5jPTU3ND1zdHJ1Y3QgZGFtb3NfdmFfbWlncmF0ZV9wcml2YXRlIHtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNTgyLSAqXFxubW0vZGFtb24vdmFkZHIuYzo1ODM6ICogVGhlIGFsZ29yaXRobSB1c2VkIGhlcmUgaXMgc2ltaWxhciB0byB3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZCgpXFxubW0vZGFtb24vdmFkZHIuYy01ODQtICovXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNTI9c3RhdGljIGNvbnN0IGludCB3ZWlnaHRpbmVzcyA9IDMyO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMTU0LS8qXFxubW0vbWVtcG9saWN5LmM6MTU1OiAqIEEgbnVsbCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIGlzIGludGVycHJldGVkIGFzIGhhdmluZyAubW9kZT1cXFwiYXV0b1xcXCIsXFxubW0vbWVtcG9saWN5LmMtMTU2LSAqIGFuZCAuaXdfdGFibGUgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gYXJyYXkgb2YgMXMgd2l0aCBsZW5ndGggbnJfbm9kZV9pZHMuXFxubW0vbWVtcG9saWN5LmMtMTU3LSAqL1xcbm1tL21lbXBvbGljeS5jOjE1ODpzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7XFxubW0vbWVtcG9saWN5LmMtMTU5LVxcdGJvb2wgbW9kZV9hdXRvO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMTYxLX07XFxubW0vbWVtcG9saWN5LmM6MTYyOnN0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBfX3JjdSAqd2lfc3RhdGU7XFxubW0vbWVtcG9saWN5LmMtMTYzLXN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNjUtLypcXG5tbS9tZW1wb2xpY3kuYzoxNjY6ICogd2lfc3RhdGVfbG9jayBwcm90ZWN0cyBib3RoIHdpX3N0YXRlIGFuZCBub2RlX2J3X3RhYmxlLlxcbm1tL21lbXBvbGljeS5jOjE2NzogKiBub2RlX2J3X3RhYmxlIGlzIG9ubHkgdXNlZCBieSB3cml0ZXJzIHRvIHVwZGF0ZSB3aV9zdGF0ZS5cXG5tbS9tZW1wb2xpY3kuYy0xNjgtICovXFxubW0vbWVtcG9saWN5LmM6MTY5OnN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7XFxubW0vbWVtcG9saWN5LmMtMTcwLVxcbm1tL21lbXBvbGljeS5jPTE3MT1zdGF0aWMgdTggZ2V0X2lsX3dlaWdodChpbnQgbm9kZSlcXG5tbS9tZW1wb2xpY3kuYy0xNzIte1xcbm1tL21lbXBvbGljeS5jOjE3MzpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XFxubW0vbWVtcG9saWN5LmMtMTc0LVxcdHU4IHdlaWdodCA9IDE7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNzYtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL21lbXBvbGljeS5jOjE3NzpcXHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XFxubW0vbWVtcG9saWN5LmMtMTc4LVxcdGlmIChzdGF0ZSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE4NS0gKiBDb252ZXJ0IGJhbmR3aWR0aCB2YWx1ZXMgaW50byB3ZWlnaHRlZCBpbnRlcmxlYXZlIHdlaWdodHMuXFxubW0vbWVtcG9saWN5LmM6MTg2OiAqIENhbGwgd2l0aCB3aV9zdGF0ZV9sb2NrLlxcbm1tL21lbXBvbGljeS5jLTE4Ny0gKi9cXG4tLVxcbm1tL21lbXBvbGljeS5jPTIyMT1pbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxcbm1tL21lbXBvbGljeS5jLTIyMi17XFxubW0vbWVtcG9saWN5LmM6MjIzOlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpuZXdfd2lfc3RhdGUsICpvbGRfd2lfc3RhdGUgPSBOVUxMO1xcbm1tL21lbXBvbGljeS5jLTIyNC1cXHR1bnNpZ25lZCBpbnQgKm9sZF9idywgKm5ld19idztcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIzMi1cXG5tbS9tZW1wb2xpY3kuYzoyMzM6XFx0bmV3X3dpX3N0YXRlID0ga21hbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxubW0vbWVtcG9saWN5LmM6MjM0OlxcdGlmICghbmV3X3dpX3N0YXRlKSB7XFxubW0vbWVtcG9saWN5LmMtMjM1LVxcdFxcdGtmcmVlKG5ld19idyk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMzctXFx0fVxcbm1tL21lbXBvbGljeS5jOjIzODpcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZW1vZGVfYXV0byA9IHRydWU7XFxubW0vbWVtcG9saWN5LmMtMjM5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbm1tL21lbXBvbGljeS5jOjI0MDpcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlW2ldID0gMTtcXG5tbS9tZW1wb2xpY3kuYy0yNDEtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNDYtXFx0ICovXFxubW0vbWVtcG9saWN5LmM6MjQ3OlxcdG11dGV4X2xvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbm1tL21lbXBvbGljeS5jLTI0OC1cXG4tLVxcbm1tL21lbXBvbGljeS5jLTI1NC1cXG5tbS9tZW1wb2xpY3kuYzoyNTU6XFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcXG5tbS9tZW1wb2xpY3kuYzoyNTY6XFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKSk7XFxubW0vbWVtcG9saWN5LmM6MjU3OlxcdGlmIChvbGRfd2lfc3RhdGUgXFx1MDAyNlxcdTAwMjYgIW9sZF93aV9zdGF0ZS1cXHUwMDNlbW9kZV9hdXRvKSB7XFxubW0vbWVtcG9saWN5LmM6MjU4OlxcdFxcdC8qIE1hbnVhbCBtb2RlOyBza2lwIHJlZHVjaW5nIHdlaWdodHMgYW5kIHVwZGF0aW5nIHdpX3N0YXRlICovXFxubW0vbWVtcG9saWN5LmM6MjU5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxubW0vbWVtcG9saWN5LmM6MjYwOlxcdFxcdGtmcmVlKG5ld193aV9zdGF0ZSk7XFxubW0vbWVtcG9saWN5LmMtMjYxLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYzLVxcbm1tL21lbXBvbGljeS5jOjI2NDpcXHQvKiBOVUxMIHdpX3N0YXRlIGFzc3VtZXMgYXV0bz10cnVlOyByZWR1Y2Ugd2VpZ2h0cyBhbmQgdXBkYXRlIHdpX3N0YXRlKi9cXG5tbS9tZW1wb2xpY3kuYzoyNjU6XFx0cmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0cyhuZXdfYncsIG5ld193aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGUpO1xcbm1tL21lbXBvbGljeS5jOjI2NjpcXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XFxubW0vbWVtcG9saWN5LmMtMjY3LVxcbm1tL21lbXBvbGljeS5jOjI2ODpcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbm1tL21lbXBvbGljeS5jOjI2OTpcXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxubW0vbWVtcG9saWN5LmMtMjcwLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbm1tL21lbXBvbGljeS5jOjI3MTpcXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jLTI3Mi1cXHR9XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDgzPWJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEwMi1cXG5tbS9tZW1wb2xpY3kuYzoyMTAzOnN0YXRpYyB1bnNpZ25lZCBpbnQgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9ub2RlcyhzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpXFxubW0vbWVtcG9saWN5LmMtMjEwNC17XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMTQ2PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMTY1LVxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jOjIxNjY6XFx0XFx0cmV0dXJuIHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMocG9saWN5KTtcXG5tbS9tZW1wb2xpY3kuYy0yMTY3LVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MjE5Mj1zdGF0aWMgdW5zaWduZWQgaW50IHJlYWRfb25jZV9wb2xpY3lfbm9kZW1hc2soc3RydWN0IG1lbXBvbGljeSAqcG9sLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjIwNS1cXG5tbS9tZW1wb2xpY3kuYzoyMjA2OnN0YXRpYyB1bnNpZ25lZCBpbnQgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQoc3RydWN0IG1lbXBvbGljeSAqcG9sLCBwZ29mZl90IGlseClcXG5tbS9tZW1wb2xpY3kuYy0yMjA3LXtcXG5tbS9tZW1wb2xpY3kuYzoyMjA4OlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcXG5tbS9tZW1wb2xpY3kuYy0yMjA5LVxcdG5vZGVtYXNrX3Qgbm9kZW1hc2s7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMjIxLVxcbm1tL21lbXBvbGljeS5jOjIyMjI6XFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jOjIyMjM6XFx0LyogVW5pbml0aWFsaXplZCB3aV9zdGF0ZSBtZWFucyB3ZSBzaG91bGQgYXNzdW1lIGFsbCB3ZWlnaHRzIGFyZSAxICovXFxubW0vbWVtcG9saWN5LmMtMjIyNC1cXHRpZiAoc3RhdGUpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMjcyPXN0YXRpYyBub2RlbWFza190ICpwb2xpY3lfbm9kZW1hc2soZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMzA3LVxcdFxcdCpuaWQgPSAoaWx4ID09IE5PX0lOVEVSTEVBVkVfSU5ERVgpID9cXG5tbS9tZW1wb2xpY3kuYzoyMzA4OlxcdFxcdFxcdHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMocG9sKSA6XFxubW0vbWVtcG9saWN5LmM6MjMwOTpcXHRcXHRcXHR3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZChwb2wsIGlseCk7XFxubW0vbWVtcG9saWN5LmMtMjMxMC1cXHRcXHRicmVhaztcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI2MDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MzQtXFxubW0vbWVtcG9saWN5LmM6MjYzNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MzYtXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYzOC17XFxubW0vbWVtcG9saWN5LmM6MjYzOTpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XFxubW0vbWVtcG9saWN5LmMtMjY0MC1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2OTUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL21lbXBvbGljeS5jOjI2OTY6XFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jLTI2OTctXFx0aWYgKHN0YXRlKSB7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzg0PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3OTgtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc5OTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI4MDAtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Mjk5ND1pbnQgbXBvbF9taXNwbGFjZWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zMDIxLVxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jOjMwMjI6XFx0XFx0cG9sbmlkID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQocG9sLCBpbHgpO1xcbm1tL21lbXBvbGljeS5jLTMwMjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNjQ4PXN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2NTAte1xcbm1tL21lbXBvbGljeS5jOjM2NTE6XFx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKm5ld193aV9zdGF0ZSwgKm9sZF93aV9zdGF0ZSA9IE5VTEw7XFxubW0vbWVtcG9saWN5LmMtMzY1Mi1cXHRzdHJ1Y3QgaXdfbm9kZV9hdHRyICpub2RlX2F0dHI7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNjYwLVxcbm1tL21lbXBvbGljeS5jOjM2NjE6XFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxubW0vbWVtcG9saWN5LmM6MzY2MjpcXHRpZiAoIW5ld193aV9zdGF0ZSlcXG5tbS9tZW1wb2xpY3kuYy0zNjYzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL21lbXBvbGljeS5jLTM2NjQtXFxubW0vbWVtcG9saWN5LmM6MzY2NTpcXHRtdXRleF9sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG5tbS9tZW1wb2xpY3kuYzozNjY2OlxcdG9sZF93aV9zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod2lfc3RhdGUsXFxubW0vbWVtcG9saWN5LmM6MzY2NzpcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNndpX3N0YXRlX2xvY2spKTtcXG5tbS9tZW1wb2xpY3kuYzozNjY4OlxcdGlmIChvbGRfd2lfc3RhdGUpIHtcXG5tbS9tZW1wb2xpY3kuYzozNjY5OlxcdFxcdG1lbWNweShuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLCBvbGRfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLFxcbm1tL21lbXBvbGljeS5jLTM2NzAtXFx0XFx0XFx0XFx0XFx0bnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2NzItXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXFxubW0vbWVtcG9saWN5LmM6MzY3MzpcXHRcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlW2ldID0gMTtcXG5tbS9tZW1wb2xpY3kuYy0zNjc0LVxcdH1cXG5tbS9tZW1wb2xpY3kuYzozNjc1OlxcdG5ld193aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGVbbm9kZV9hdHRyLVxcdTAwM2VuaWRdID0gd2VpZ2h0O1xcbm1tL21lbXBvbGljeS5jOjM2NzY6XFx0bmV3X3dpX3N0YXRlLVxcdTAwM2Vtb2RlX2F1dG8gPSBmYWxzZTtcXG5tbS9tZW1wb2xpY3kuYy0zNjc3LVxcbm1tL21lbXBvbGljeS5jOjM2Nzg6XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jOjM2Nzk6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG5tbS9tZW1wb2xpY3kuYzozNjgwOlxcdGlmIChvbGRfd2lfc3RhdGUpIHtcXG5tbS9tZW1wb2xpY3kuYy0zNjgxLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbm1tL21lbXBvbGljeS5jOjM2ODI6XFx0XFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcXG5tbS9tZW1wb2xpY3kuYy0zNjgzLVxcdH1cXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2ODYtXFxubW0vbWVtcG9saWN5LmM6MzY4NzpzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9tZW1wb2xpY3kuYy0zNjg4LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbm1tL21lbXBvbGljeS5jLTM2ODkte1xcbm1tL21lbXBvbGljeS5jOjM2OTA6XFx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xcbm1tL21lbXBvbGljeS5jLTM2OTEtXFx0Ym9vbCB3aV9hdXRvID0gdHJ1ZTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2OTMtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL21lbXBvbGljeS5jOjM2OTQ6XFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jLTM2OTUtXFx0aWYgKHN0YXRlKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzcwMS1cXG5tbS9tZW1wb2xpY3kuYzozNzAyOnN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9tZW1wb2xpY3kuYy0zNzAzLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxubW0vbWVtcG9saWN5LmMtMzcwNC17XFxubW0vbWVtcG9saWN5LmM6MzcwNTpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcXG5tbS9tZW1wb2xpY3kuYy0zNzA2LVxcdHVuc2lnbmVkIGludCAqYnc7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNzEyLVxcbm1tL21lbXBvbGljeS5jOjM3MTM6XFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxubW0vbWVtcG9saWN5LmM6MzcxNDpcXHRpZiAoIW5ld193aV9zdGF0ZSlcXG5tbS9tZW1wb2xpY3kuYy0zNzE1LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL21lbXBvbGljeS5jLTM3MTYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXFxubW0vbWVtcG9saWN5LmM6MzcxNzpcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlW2ldID0gMTtcXG5tbS9tZW1wb2xpY3kuYy0zNzE4LVxcbm1tL21lbXBvbGljeS5jOjM3MTk6XFx0bXV0ZXhfbG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxubW0vbWVtcG9saWN5LmM6MzcyMDpcXHRvbGRfd2lfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHdpX3N0YXRlLFxcbm1tL21lbXBvbGljeS5jOjM3MjE6XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKSk7XFxubW0vbWVtcG9saWN5LmMtMzcyMi1cXG5tbS9tZW1wb2xpY3kuYzozNzIzOlxcdGlmIChvbGRfd2lfc3RhdGUgXFx1MDAyNlxcdTAwMjYgaW5wdXQgPT0gb2xkX3dpX3N0YXRlLVxcdTAwM2Vtb2RlX2F1dG8pIHtcXG5tbS9tZW1wb2xpY3kuYzozNzI0OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxubW0vbWVtcG9saWN5LmM6MzcyNTpcXHRcXHRrZnJlZShuZXdfd2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jLTM3MjYtXFx0XFx0cmV0dXJuIGNvdW50O1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMzcyOS1cXHRpZiAoIWlucHV0KSB7XFxubW0vbWVtcG9saWN5LmM6MzczMDpcXHRcXHRpZiAob2xkX3dpX3N0YXRlKVxcbm1tL21lbXBvbGljeS5jOjM3MzE6XFx0XFx0XFx0bWVtY3B5KG5ld193aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGUsIG9sZF93aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGUsXFxubW0vbWVtcG9saWN5LmMtMzczMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTtcXG5tbS9tZW1wb2xpY3kuYzozNzMzOlxcdFxcdGdvdG8gdXBkYXRlX3dpX3N0YXRlO1xcbm1tL21lbXBvbGljeS5jLTM3MzQtXFx0fVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzczNy1cXHRpZiAoIWJ3KSB7XFxubW0vbWVtcG9saWN5LmM6MzczODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbm1tL21lbXBvbGljeS5jOjM3Mzk6XFx0XFx0a2ZyZWUobmV3X3dpX3N0YXRlKTtcXG5tbS9tZW1wb2xpY3kuYy0zNzQwLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMzc0Mi1cXG5tbS9tZW1wb2xpY3kuYzozNzQzOlxcdG5ld193aV9zdGF0ZS1cXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcXG5tbS9tZW1wb2xpY3kuYzozNzQ0OlxcdHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHMoYncsIG5ld193aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGUpO1xcbm1tL21lbXBvbGljeS5jLTM3NDUtXFxubW0vbWVtcG9saWN5LmM6Mzc0Njp1cGRhdGVfd2lfc3RhdGU6XFxubW0vbWVtcG9saWN5LmM6Mzc0NzpcXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XFxubW0vbWVtcG9saWN5LmM6Mzc0ODpcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbm1tL21lbXBvbGljeS5jOjM3NDk6XFx0aWYgKG9sZF93aV9zdGF0ZSkge1xcbm1tL21lbXBvbGljeS5jLTM3NTAtXFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxubW0vbWVtcG9saWN5LmM6Mzc1MTpcXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jLTM3NTItXFx0fVxcbi0tXFxubW0vbWVtcG9saWN5LmM9Mzc3OD1zdGF0aWMgdm9pZCBzeXNmc193aV9ub2RlX2RlbGV0ZV9hbGwodm9pZClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM3ODUtXFxubW0vbWVtcG9saWN5LmM6Mzc4NjpzdGF0aWMgdm9pZCB3aV9zdGF0ZV9mcmVlKHZvaWQpXFxubW0vbWVtcG9saWN5LmMtMzc4Ny17XFxubW0vbWVtcG9saWN5LmM6Mzc4ODpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqb2xkX3dpX3N0YXRlO1xcbm1tL21lbXBvbGljeS5jLTM3ODktXFxubW0vbWVtcG9saWN5LmM6Mzc5MDpcXHRtdXRleF9sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG5tbS9tZW1wb2xpY3kuYzozNzkxOlxcdG9sZF93aV9zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod2lfc3RhdGUsXFxubW0vbWVtcG9saWN5LmM6Mzc5MjpcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNndpX3N0YXRlX2xvY2spKTtcXG5tbS9tZW1wb2xpY3kuYzozNzkzOlxcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgTlVMTCk7XFxubW0vbWVtcG9saWN5LmM6Mzc5NDpcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbm1tL21lbXBvbGljeS5jLTM3OTUtXFxubW0vbWVtcG9saWN5LmM6Mzc5NjpcXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxubW0vbWVtcG9saWN5LmMtMzc5Ny1cXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG5tbS9tZW1wb2xpY3kuYzozNzk4OlxcdFxcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XFxubW0vbWVtcG9saWN5LmMtMzc5OS1cXHR9XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zODAyPXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgd2lfYXV0b19hdHRyID0ge1xcbm1tL21lbXBvbGljeS5jLTM4MDMtXFx0LmF0dHIgPSB7IC5uYW1lID0gXFxcImF1dG9cXFwiLCAubW9kZSA9IDA2NjQgfSxcXG5tbS9tZW1wb2xpY3kuYzozODA0OlxcdC5zaG93ID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3Nob3csXFxubW0vbWVtcG9saWN5LmM6MzgwNTpcXHQuc3RvcmUgPSB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUsXFxubW0vbWVtcG9saWN5LmMtMzgwNi19O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MzgwOD1zdGF0aWMgdm9pZCB3aV9jbGVhbnVwKHZvaWQpIHtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM4MTAtXFx0c3lzZnNfd2lfbm9kZV9kZWxldGVfYWxsKCk7XFxubW0vbWVtcG9saWN5LmM6MzgxMTpcXHR3aV9zdGF0ZV9mcmVlKCk7XFxubW0vbWVtcG9saWN5LmMtMzgxMi19XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zODc0PXN0YXRpYyBpbnQgd2lfbm9kZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzg5NS1cXG5tbS9tZW1wb2xpY3kuYzozODk2OnN0YXRpYyBpbnQgX19pbml0IGFkZF93ZWlnaHRlZF9pbnRlcmxlYXZlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICptZW1wb2xpY3lfa29iailcXG5tbS9tZW1wb2xpY3kuYy0zODk3LXtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM5MDUtXFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXFx1MDAyNndpX2dyb3VwLVxcdTAwM2V3aV9rb2JqLCBcXHUwMDI2d2lfa3R5cGUsIG1lbXBvbGljeV9rb2JqLFxcbm1tL21lbXBvbGljeS5jOjM5MDY6XFx0XFx0XFx0XFx0ICAgXFxcIndlaWdodGVkX2ludGVybGVhdmVcXFwiKTtcXG5tbS9tZW1wb2xpY3kuYy0zOTA3LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zOTM3PXN0YXRpYyBpbnQgX19pbml0IG1lbXBvbGljeV9zeXNmc19pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zOTQ1LVxcbm1tL21lbXBvbGljeS5jOjM5NDY6XFx0ZXJyID0gYWRkX3dlaWdodGVkX2ludGVybGVhdmVfZ3JvdXAobWVtcG9saWN5X2tvYmopO1xcbm1tL21lbXBvbGljeS5jLTM5NDctXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NDk6NTIuNzQxODkxODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3MjE4NDgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKk5hdmlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBJIHNlZSB0aGF0IGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdCdzIGxvY2FsaXplZCB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgY29udHJhc3RzIHdpdGggYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIHdoaWNoIGlzICpub3QqIHN0YXRpYywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gaG93IGl0J3MgY2FsbGVkLiBIbW0sIGludGVyZXN0aW5nLiBUaGUgaW1wbGljYXRpb25zIHRoZXJlIGFyZSB0aGF0IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGNhbiBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIGl0cyBzb3VyY2UgZmlsZSBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gaW5zaWRlIGl0cyBzb3VyY2UgZmlsZS5cblxuVGhpbmtpbmcgYmlnZ2VyIHBpY3R1cmUsIHRoZSBtZW1wb2xpY3kgc3lzY2FsbHMgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyAtIGBzZXRfbWVtcG9saWN5YCwgYG1iaW5kYCwgYHNldF9tZW1wb2xpY3lfaG9tZV9ub2RlYCAtIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2UgdG8gY29udHJvbCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBzeXNjYWxscyBhY3R1YWxseSAqd29yayogaW4gcmVsYXRpb24gdG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBJJ20gbG9va2luZyBhdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzeXNjYWxsIGRlZmluaXRpb25zIGluIGBtbS9tZW1wb2xpY3kuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gTGV0J3Mgc2VlIGhvdyB0aGV5IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTc3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NDk6NTUuMzE0MDc4ODE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMwMDc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qbWJpbmR8U1lTQ0FMTF9ERUZJTkUuKnNldF9tZW1wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MTc0Mj1zdGF0aWMgbG9uZyBrZXJuZWxfbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNzYyLVxcbm1tL21lbXBvbGljeS5jOjE3NjM6U1lTQ0FMTF9ERUZJTkU0KHNldF9tZW1wb2xpY3lfaG9tZV9ub2RlLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgdW5zaWduZWQgbG9uZywgbGVuLFxcbm1tL21lbXBvbGljeS5jLTE3NjQtXFx0XFx0dW5zaWduZWQgbG9uZywgaG9tZV9ub2RlLCB1bnNpZ25lZCBsb25nLCBmbGFncylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE4MjktXFxubW0vbWVtcG9saWN5LmM6MTgzMDpTWVNDQUxMX0RFRklORTYobWJpbmQsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBsZW4sXFxubW0vbWVtcG9saWN5LmMtMTgzMS1cXHRcXHR1bnNpZ25lZCBsb25nLCBtb2RlLCBjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqLCBubWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE4Mzg9c3RhdGljIGxvbmcga2VybmVsX3NldF9tZW1wb2xpY3koaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICpubWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE4NTYtXFxubW0vbWVtcG9saWN5LmM6MTg1NzpTWVNDQUxMX0RFRklORTMoc2V0X21lbXBvbGljeSwgaW50LCBtb2RlLCBjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqLCBubWFzayxcXG5tbS9tZW1wb2xpY3kuYy0xODU4LVxcdFxcdHVuc2lnbmVkIGxvbmcsIG1heG5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjU1LjQxMTM4NjAzNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3OTgyMTgwMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB0aGUgZnVuY3Rpb25hbGl0eSB3ZSdyZSBsb29raW5nIGF0LCBzcGVjaWZpY2FsbHkgdGhlIE5VTUEgbWVtcG9saWN5IHdlaWdodGVkIGludGVybGVhdmUgcGFnZSBhbGxvY2F0aW9uLiBJIHN0YXJ0ZWQgYnkgY29uc2lkZXJpbmcgdGhlIGxpa2VseSBzdXNwZWN0czogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGBkb19zZXRfbWVtcG9saWN5YCwgYGtlcm5lbF9zZXRfbWVtcG9saWN5YCwgYW5kIHRoZSBzeXN0ZW0gY2FsbCBkZWZpbml0aW9ucyBsaWtlIGBTWVNDQUxMX0RFRklORTMoc2V0X21lbXBvbGljeSwgLi4uKWAgYW5kIGBTWVNDQUxMX0RFRklORTYobWJpbmQsIC4uLilgIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplZCBhcyByZWxldmFudC5cblxuVGhlIGNvcmUgb2YgdGhpcyBhbmFseXNpcyBmb2N1c2VzIG9uIGZpbmRpbmcgZ29vZCBzeW1ib2xzLiBJIHRoZW4gcmVtaW5kIG15c2VsZiBhYm91dCB0aGUgYmVzdCBwcmFjdGljZSBvZiBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBpbnRlcm5hbCBoZWxwZXJzLCBhcyB0aGVzZSBoYXZlIGNsZWFyIHN5bWJvbHMgZm9yIGFuYWx5c2lzLlxuXG5JJ20gZm9jdXNlZCBvbiB0aGUgcmVsYXRpb25zaGlwIG9mIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFuZCBpdHMgY2FsbGVycy4gSXQgY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAsIHdoaWNoIGlzIHRoZSBrZXkgZnVuY3Rpb24gaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJsZWF2ZSBhbGdvcml0aG0sIGFzIG1lbnRpb25lZCBpbiB0aGUgXCJXb3J0aEZ1enppbmdcIiBhbmFseXNpcy4gQW5kIHRoZW4gSSBoYXZlIGBtZW1wb2xpY3lfc3lzZnNfaW5pdGAgaXMgYWxzbyByZWxldmFudCBiZWNhdXNlIGl0IGlzIGluaXRpYWxpemVkIHVzaW5nIGBfX2luaXRgLlxuXG5JJ20gY2hlY2tpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AsIGFuZCB0cmFjaW5nIGl0cyBjYWxscyB0aHJvdWdoIGBfX3g2NF9zeXNfc2V0X21lbXBvbGljeWAgb3IgYGRvX3NldF9tZW1wb2xpY3lgLCBhbmQgYG1wb2xfc2V0X25vZGVtYXNrYCwgZXRjLlxuXG5UaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgaW5kZWVkIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsLlxuXG5UaGUgY3JpdGljYWwgcGllY2UsIGFzIG91dGxpbmVkIGluIFwiV29ydGhGdXp6aW5nXCIsIGlzIHRoZSBkaXZpc2lvbi1ieS16ZXJvIHByb3RlY3Rpb24gYWRkZWQgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgd2l0aCB0aGUgY2hlY2sgYGlmICghd2VpZ2h0X3RvdGFsKWAuIFRoaXMgY2hhbmdlIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwYWdlIGFsbG9jYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMgbGlrZSBgc2V0X21lbXBvbGljeShNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUsIC4uLilgIGNvbWJpbmVkIHdpdGggdm1hbGxvYyBvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIEkgc2VlIHRoaXMgcGF0aCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgcGFydGljdWxhcmx5IGlmIE5VTUEgaXMgZW5hYmxlZCBpbiBRRU1VLiBUaGF0J3MgZ29vZCBuZXdzIGZvciBmdXp6aW5nLlxuXG5GaW5hbGx5LCBJJ20gY2hlY2tpbmcgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24uIGBDT05GSUdfTlVNQWAgaXMgZGVmaW5lZCBpbiBgbW0vTWFrZWZpbGVgIGFuZCBpdCBzZWVtcyBuZWNlc3NhcnkgYXMgcGVyIGBvYmotJChDT05GSUdfTlVNQSkgKz0gbWVtcG9saWN5Lm9gLiBJJ20gYWxzbyBsb29raW5nIHRocm91Z2ggYG1tL0tjb25maWdgIGFuZCBgbW0vbWVtcG9saWN5LmNgIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjUwOjAzLjM5MzU2ODUxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNzQ3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTc3ND1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03Nzcte1xcbm1tL21lbXBvbGljeS5jOjc3ODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL21lbXBvbGljeS5jLTc3OS1cXHRzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTgyMy1cXG5tbS9tZW1wb2xpY3kuYzo4MjQ6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbm1tL21lbXBvbGljeS5jLTgyNS0vKipcXG4tLVxcbm1tL21lbXBvbGljeS5jPTExNTA9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMjUwLVxcbm1tL21lbXBvbGljeS5jOjEyNTE6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxcbm1tL21lbXBvbGljeS5jLTEyNTItc3RhdGljIGJvb2wgbWlncmF0ZV9mb2xpb19hZGQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9saXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MjI3Mj1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjMxNS1cXG5tbS9tZW1wb2xpY3kuYzoyMzE2OiNpZmRlZiBDT05GSUdfSFVHRVRMQkZTXFxubW0vbWVtcG9saWN5LmMtMjMxNy0vKlxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzI5Nz1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKG1wb2xfZnJlZV9zaGFyZWRfcG9saWN5LCBcXFwia3ZtXFxcIik7XFxubW0vbWVtcG9saWN5LmMtMzI5OC1cXG5tbS9tZW1wb2xpY3kuYzozMjk5OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5tbS9tZW1wb2xpY3kuYy0zMzAwLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBudW1hYmFsYW5jaW5nX292ZXJyaWRlO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MzQwOD1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvbGljeV9tb2Rlc1tdID1cXG4tLVxcbm1tL21lbXBvbGljeS5jLTM0MTgtXFxubW0vbWVtcG9saWN5LmM6MzQxOTojaWZkZWYgQ09ORklHX1RNUEZTXFxubW0vbWVtcG9saWN5LmMtMzQyMC0vKipcXG4tLVxcbm1tL21lbXBvbGljeS5jPTM1NjY9dm9pZCBtcG9sX3RvX3N0cihjaGFyICpidWZmZXIsIGludCBtYXhsZW4sIHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2MjItXFxubW0vbWVtcG9saWN5LmM6MzYyMzojaWZkZWYgQ09ORklHX1NZU0ZTXFxubW0vbWVtcG9saWN5LmMtMzYyNC1zdHJ1Y3QgaXdfbm9kZV9hdHRyIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NTA6MDMuNDM4NjQ3OTg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzAxMzMzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIFdlaWdodGVkIEludGVybGVhdmluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyB3ZSBjb25maWd1cmUgd2VpZ2h0ZWQgaW50ZXJsZWF2aW5nLiBJIHNlZSB0aGF0IHRoZSBzeXNmcyBub2RlcyBmb3Igc2V0dGluZyB0aG9zZSB3ZWlnaHRzLCBhbmQgZXNzZW50aWFsbHkgY3JlYXRpbmcgdGhlIHdlaWdodGVkX2ludGVybGVhdmUgc3RhdGUsIGFyZSBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19TWVNGU2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBib3RoIGBDT05GSUdfTlVNQWAgYW5kIGBDT05GSUdfU1lTRlNgIGFyZSBnb2luZyB0byBiZSBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIGNvbnNpZGVyIHdoZW4gZGVhbGluZyB3aXRoIHN5c2ZzLWJhc2VkIHdlaWdodGVkIGludGVybGVhdmluZyBhbmQgdGhlIHVzZSBvZiBtZW1wb2xpY2llcy4gR290dGEga2VlcCB0aG9zZSB0d28gaW4gbWluZC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IEZvY3VzU3ltYm9scyB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IEknbSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGVpdGhlciBgX194NjRfc3lzX3NldF9tZW1wb2xpY3lgIG9yIGBkb19zZXRfbWVtcG9saWN5YC4gSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IHRob3NlIGFyZSB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCBgZG9fc2V0X21lbXBvbGljeWAuIElzIHRoYXQgZnVuY3Rpb24gc3RhdGljPyBJcyBpdCBhY2Nlc3NpYmxlPyBJJ2xsIGhlYWQgb3ZlciB0byBgbW0vbWVtcG9saWN5LmNgIHRvIGNsYXJpZnkgdGhhdCBxdWlja2x5LiBHb3R0YSBjaGVjayB0aGUgc291cmNlIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDcxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjUwOjA1LjkwODc4MzQwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1Njc1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fc2V0X21lbXBvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0xMDQyPXN0YXRpYyBpbnQgbWJpbmRfcmFuZ2Uoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTEwNjktLyogU2V0IHRoZSBwcm9jZXNzIG1lbW9yeSBwb2xpY3kgKi9cXG5tbS9tZW1wb2xpY3kuYzoxMDcwOnN0YXRpYyBsb25nIGRvX3NldF9tZW1wb2xpY3kodW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgc2hvcnQgZmxhZ3MsXFxubW0vbWVtcG9saWN5LmMtMTA3MS1cXHRcXHRcXHQgICAgIG5vZGVtYXNrX3QgKm5vZGVzKVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTgzOD1zdGF0aWMgbG9uZyBrZXJuZWxfc2V0X21lbXBvbGljeShpbnQgbW9kZSwgY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm5tYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTg1My1cXG5tbS9tZW1wb2xpY3kuYzoxODU0OlxcdHJldHVybiBkb19zZXRfbWVtcG9saWN5KGxtb2RlLCBtb2RlX2ZsYWdzLCBcXHUwMDI2bm9kZXMpO1xcbm1tL21lbXBvbGljeS5jLTE4NTUtfVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzM0Nj12b2lkIF9faW5pdCBudW1hX3BvbGljeV9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zMzkyLVxcbm1tL21lbXBvbGljeS5jOjMzOTM6XFx0aWYgKGRvX3NldF9tZW1wb2xpY3koTVBPTF9JTlRFUkxFQVZFLCAwLCBcXHUwMDI2aW50ZXJsZWF2ZV9ub2RlcykpXFxubW0vbWVtcG9saWN5LmMtMzM5NC1cXHRcXHRwcl9lcnIoXFxcIiVzOiBpbnRlcmxlYXZpbmcgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNDAwPXZvaWQgbnVtYV9kZWZhdWx0X3BvbGljeSh2b2lkKVxcbm1tL21lbXBvbGljeS5jLTM0MDEte1xcbm1tL21lbXBvbGljeS5jOjM0MDI6XFx0ZG9fc2V0X21lbXBvbGljeShNUE9MX0RFRkFVTFQsIDAsIE5VTEwpO1xcbm1tL21lbXBvbGljeS5jLTM0MDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo1MDowNS45NTIzNTM5NzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3OTI1Nzk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IFBvbGljeSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgcG9saWN5IHJlbGF0ZWQgZnVuY3Rpb25zLiBGaXJzdCwgSSBzZWUgdGhhdCBgZG9fc2V0X21lbXBvbGljeWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlLCBsaWtlbHkgaW50ZXJuYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBvciBmaWxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgKm5vdCogYHN0YXRpY2AsIHdoaWNoIGltcGxpZXMgaXQncyBpbnRlbmRlZCB0byBiZSBhIHB1YmxpYyBlbnRyeSBwb2ludCwgb3IgYXQgbGVhc3QgdmlzaWJsZSBvdXRzaWRlIGl0cyBkZWZpbmluZyBjb21waWxhdGlvbiB1bml0LiBTaW1pbGFybHksIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgaXMgYWxzbyBub24tc3RhdGljLCBzbyBpdCdzIHByb2JhYmx5IGFsc28gYW4gQVBJIGZ1bmN0aW9uLiBJdCB0YWtlcyBhIG5vZGUgYW5kIGNvb3JkaW5hdGVzIGFzIGlucHV0LCBpbnRlcmVzdGluZy5cblxuTm93LCBJJ20gdGhpbmtpbmcsIGxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgZnVuY3Rpb25zLiBUbyBiZSB0aG9yb3VnaCwgbGV0J3MgcXVpY2tseSBjaGVjayB0byBiZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBlbnRyeSBwb2ludHMuXG5cbkFoYSEgQ29uZmlybWVkLiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyB0aGUgb25lIGRpcmVjdGx5IGNhbGxpbmcgb3VyIG1vZGlmaWVkIGNvZGUuIFRoYXQncyB0aGUgb25lIHdlJ2xsIHdhbnQgdG8gZm9jdXMgb24uXG5cbkFscmlnaHQsIHdpdGggdGhpcyBpbmZvcm1hdGlvbiwgdGltZSB0byBgc2V0LXJlc3VsdHNgLiBJIHRoaW5rIHdlJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMsIG5vdyB3ZSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggY29uZmlkZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMDQsIk91dHB1dFRva2VucyI6MTEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjUwOjA4LjUzMTYxNDE0M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjMxODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHdoZW4gdGhlIHRvdGFsIHdlaWdodCBvZiB0aGUgY2FuZGlkYXRlIE5VTUEgbm9kZXMgaXMgemVyby4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIE5VTUEgbWVtb3J5IHBvbGljeSBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwcmV2ZW50cyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB3aGVuIHRoZSB0b3RhbCB3ZWlnaHQgb2YgdGhlIGNhbmRpZGF0ZSBOVU1BIG5vZGVzIGlzIHplcm8uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgY29yZSBOVU1BIG1lbW9yeSBwb2xpY3kgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo1MDowOC42MDUyNTEzNzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDQ4MTM5NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NTA6MDguNjA1NjYzNzkxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEwNDc3MjI5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB6ZXJvIGNoZWNrIGZvciAnd2VpZ2h0X3RvdGFsJyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB0byBwcmV2ZW50IGEgZGl2aXNpb24tYnktemVybyBrZXJuZWwgY3Jhc2ggd2hlbiBjYWxjdWxhdGluZyAncm91bmRzJyBhbmQgJ2RlbHRhJyAocmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsKS4gVGhlIG1lbW9yeSBidWZmZXIgJ3dlaWdodHMnIGlzIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MoKSBhbmQgZnJlZWQgYmVmb3JlIHJldHVybmluZyBvbiB0aGlzIGVycm9yIHBhdGguIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBEaXZpc2lvbi1ieS16ZXJvIGNyYXNoZXMgYXJlIGRldGVjdGVkIHdpdGhvdXQgS01TQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWI2MTljMDVhZDFlMzE0NjIyNmFjNDAxZDkyODBkNDhiNTc3NGFhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6NDk6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCA1MDFlMGI4MGQ3ZGExLi44Yjk3MjhlN2E1OTdlIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbisrKyBiL21tL21lbXBvbGljeS5jXG5AQCAtMjcwNyw2ICsyNzA3LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4gXHRcdHdlaWdodF90b3RhbCArPSB3ZWlnaHRzW25vZGVdO1xuIFxuK1x0aWYgKCF3ZWlnaHRfdG90YWwpIHtcbitcdFx0a2ZyZWUod2VpZ2h0cyk7XG4rXHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG4gXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NTA6MDguNjA1NjY0NzkxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4MTY4MzUzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgYG1tL21lbXBvbGljeS5jYCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgdXNlcidzIHJlcXVlc3QgaXMgY2xlYXI6IGFzc2VzcyB0aGlzIHBhdGNoIGluIGBtbS9tZW1wb2xpY3kuY2AgYW5kIGRldGVybWluZSBpZiBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgd2FycmFudGVkLiBObyBwcm9ibGVtLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIHRob3JvdWdobHkgZGlzc2VjdCB0aGUgZGlmZiBpdHNlbGYuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0J3MgYmVpbmcgbW9kaWZpZWQgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aG9zZSBjaGFuZ2VzLiBDb250ZXh0IGlzIGNydWNpYWwuXG5cblRoZW4sIEknbGwgbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gUGVla2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vbWVtcG9saWN5LmNgIGlzIG5vbi1uZWdvdGlhYmxlLiBJIG5lZWQgdG8gZ2V0IGEgZ29vZCBzZW5zZSBvZiB0aGUgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGFyZWFzIHRoYXQgdGhpcyBwYXRjaCBtaWdodCB0b3VjaC4gVGhhdCdzIHdoZXJlIGByZWFkLWZpbGVgIHdpbGwgYmUgaW52YWx1YWJsZSDigJMgSSdsbCB6b29tIGluIGFyb3VuZCBsaW5lIDI3MDcsIHNwZWNpZmljYWxseS4gRXhhbWluaW5nIHRoZSBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCdzIGltcGFjdC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IHRoZSBjb2RlICpjaGFuZ2VkKjsgaXQncyBhYm91dCB0aGUgY29kZSB0aGF0J3MgKmJlaW5nIHVzZWQqIHdpdGhpbiB0aGUgcmVsZXZhbnQgYXJlYS5cblxuTXkgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgZGF0YSByYWNlcywgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCAob3IgZXhwb3NlZCkgYnkgdGhpcyBwYXRjaC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiwgcG9saWN5IGVuZm9yY2VtZW50LCBhbmQgcG90ZW50aWFsIGNvbmN1cnJlbnQgYWNjZXNzIHBhdHRlcm5zLiBPbmx5IGFmdGVyIHRoaXMgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbiBjYW4gSSBjb25maWRlbnRseSBtYWtlIGEgY2FsbCBvbiB3aGV0aGVyIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgYWN0dWFsbHkgKm5lY2Vzc2FyeSouIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBuZXcgcmlza3Mgb3Igc2lnbmlmaWNhbnRseSBhbHRlcnMgdGhlIGV4aXN0aW5nIG1lbW9yeSBzYWZldHkgcHJvZmlsZSBvZiB0aGUgcmVsZXZhbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NTA6MTUuNDIyNTAzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY4MDpcXHRcXHRcXHRcXHRtZS1cXHUwMDNlaWxfd2VpZ2h0IC09IHJlbV9wYWdlcztcXG4yNjgxOlxcdFxcdFxcdFxcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XFxuMjY4MjpcXHRcXHRcXHR9XFxuMjY4MzpcXHRcXHRcXHQvKiBPdGhlcndpc2Ugd2UgYWRqdXN0IHJlbWFpbmluZyBwYWdlcywgY29udGludWUgZnJvbSB0aGVyZSAqL1xcbjI2ODQ6XFx0XFx0XFx0cmVtX3BhZ2VzIC09IHdlaWdodDtcXG4yNjg1OlxcdFxcdH1cXG4yNjg2OlxcdFxcdC8qIGNsZWFyIGFjdGl2ZSB3ZWlnaHQgaW4gY2FzZSBvZiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cXG4yNjg3OlxcdFxcdG1lLVxcdTAwM2VpbF93ZWlnaHQgPSAwO1xcbjI2ODg6XFx0XFx0cHJldl9ub2RlID0gbm9kZTtcXG4yNjg5OlxcdFxcbjI2OTA6XFx0XFx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xcbjI2OTE6XFx0XFx0d2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpO1xcbjI2OTI6XFx0XFx0aWYgKCF3ZWlnaHRzKVxcbjI2OTM6XFx0XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNjk0OlxcdFxcbjI2OTU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI2OTY6XFx0XFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xcbjI2OTc6XFx0XFx0aWYgKHN0YXRlKSB7XFxuMjY5ODpcXHRcXHRcXHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXFx1MDAzZWl3X3RhYmxlLCBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xcbjI2OTk6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjcwMDpcXHRcXHR9IGVsc2Uge1xcbjI3MDE6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjcwMjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbm9kZV9pZHM7IGkrKylcXG4yNzAzOlxcdFxcdFxcdFxcdHdlaWdodHNbaV0gPSAxO1xcbjI3MDQ6XFx0XFx0fVxcbjI3MDU6XFx0XFxuMjcwNjpcXHRcXHQvKiBjYWxjdWxhdGUgdG90YWwsIGRldGVjdCBzeXN0ZW0gZGVmYXVsdCB1c2FnZSAqL1xcbjI3MDc6XFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKVxcbjI3MDg6XFx0XFx0XFx0d2VpZ2h0X3RvdGFsICs9IHdlaWdodHNbbm9kZV07XFxuMjcwOTpcXHRcXG4yNzEwOlxcdFxcdGlmICghd2VpZ2h0X3RvdGFsKSB7XFxuMjcxMTpcXHRcXHRcXHRrZnJlZSh3ZWlnaHRzKTtcXG4yNzEyOlxcdFxcdFxcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XFxuMjcxMzpcXHRcXHR9XFxuMjcxNDpcXHRcXG4yNzE1OlxcdFxcdC8qXFxuMjcxNjpcXHRcXHQgKiBDYWxjdWxhdGUgcm91bmRzL3BhcnRpYWwgcm91bmRzIHRvIG1pbmltaXplIF9fYWxsb2NfcGFnZXNfYnVsayBjYWxscy5cXG4yNzE3OlxcdFxcdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXFxuMjcxODpcXHRcXHQgKlxcbjI3MTk6XFx0XFx0ICogaWYgKHJvdW5kcyBcXHUwMDNlIDApIGFuZCAoZGVsdGEgPT0gMCksIHJlc3VtZV9ub2RlIHdpbGwgYWx3YXlzIGJlXFxuMjcyMDpcXHRcXHQgKiB0aGUgbm9kZSBmb2xsb3dpbmcgcHJldl9ub2RlIGFuZCBpdHMgd2VpZ2h0LlxcbjI3MjE6XFx0XFx0ICovXFxuMjcyMjpcXHRcXHRyb3VuZHMgPSByZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWw7XFxuMjcyMzpcXHRcXHRkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtcXG4yNzI0OlxcdFxcdHJlc3VtZV9ub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xcbjI3MjU6XFx0XFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodHNbcmVzdW1lX25vZGVdO1xcbjI3MjY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ub2RlczsgaSsrKSB7XFxuMjcyNzpcXHRcXHRcXHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xcbjI3Mjg6XFx0XFx0XFx0d2VpZ2h0ID0gd2VpZ2h0c1tub2RlXTtcXG4yNzI5OlxcdFxcdFxcdG5vZGVfcGFnZXMgPSB3ZWlnaHQgKiByb3VuZHM7XFxuMjczMDpcXHRcXHRcXHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSdzIHBvcnRpb24gb2YgdGhlIGRlbHRhICovXFxuMjczMTpcXHRcXHRcXHRpZiAoZGVsdGEgXFx1MDAzZSB3ZWlnaHQpIHtcXG4yNzMyOlxcdFxcdFxcdFxcdG5vZGVfcGFnZXMgKz0gd2VpZ2h0O1xcbjI3MzM6XFx0XFx0XFx0XFx0ZGVsdGEgLT0gd2VpZ2h0O1xcbjI3MzQ6XFx0XFx0XFx0fSBlbHNlIGlmIChkZWx0YSkge1xcbjI3MzU6XFx0XFx0XFx0XFx0Lyogd2hlbiBkZWx0YSBpcyBkZXBsZXRlZCwgcmVzdW1lIGZyb20gdGhhdCBub2RlICovXFxuMjczNjpcXHRcXHRcXHRcXHRub2RlX3BhZ2VzICs9IGRlbHRhO1xcbjI3Mzc6XFx0XFx0XFx0XFx0cmVzdW1lX25vZGUgPSBub2RlO1xcbjI3Mzg6XFx0XFx0XFx0XFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodCAtIGRlbHRhO1xcbjI3Mzk6XFx0XFx0XFx0XFx0ZGVsdGEgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo1MDoxNS40MjI3MzEwNTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIzMDYzNzE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCwgaXMgZm9jdXNlZCBvbiBhIHBvdGVudGlhbCBkaXZpc2lvbi1ieS16ZXJvIHZ1bG5lcmFiaWxpdHkuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIGNhbGN1bGF0ZXMgYHdlaWdodF90b3RhbGAgYnkgc3VtbWluZyB1cCBgd2VpZ2h0c1tub2RlXWAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGB3ZWlnaHRfdG90YWxgIGV2YWx1YXRlcyB0byB6ZXJvOyB0aGUgc3Vic2VxdWVudCBkaXZpc2lvbiBvcGVyYXRpb25zLCBgcm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO2AgYW5kIGBkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtgLCB0aGVuIHRyaWdnZXIgYSBkaXZpc2lvbi1ieS16ZXJvIGV4Y2VwdGlvbiwgd2hpY2ggaXMgYSB0ZXh0Ym9vayBrZXJuZWwgY3Jhc2ggc2NlbmFyaW8uXG5cblRoZSBwYXRjaCBpdHNlbGYgY2xldmVybHkgYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgY3J1Y2lhbCBjaGVjazogYGlmICghd2VpZ2h0X3RvdGFsKWAuIElmIGB3ZWlnaHRfdG90YWxgIGlzIHplcm8sIGl0IGZyZWVzIHRoZSBhbGxvY2F0ZWQgYHdlaWdodHNgIGFycmF5IGFuZCBpbW1lZGlhdGVseSByZXR1cm5zIGB0b3RhbF9hbGxvY2F0ZWRgLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFuZCBlZmZlY3RpdmUgZml4LlxuXG5Ob3csIGxldCdzIHRob3JvdWdobHkgZXhhbWluZSB0aGlzIHBhdGNoIGZvciBhbnkgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBGaXJzdCwgSSBub3RlIHRoYXQgYHdlaWdodHNgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTClgLiBUaGlzIGlzIGtleTsgYGt6YWxsb2NgIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiwgd2hpY2ggaXMgZXhjZWxsZW50LiBTZWNvbmQsIHRoZSBjb2RlIGNoZWNrcyBpZiBgIXdlaWdodF90b3RhbGAsIHRoZW4gYGtmcmVlKHdlaWdodHMpYCBpcyBjYWxsZWQsIGFuZCBgdG90YWxfYWxsb2NhdGVkYCBpcyByZXR1cm5lZC4gQ3J1Y2lhbGx5LCBJIHNlZSBubyBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBmaXggZGlyZWN0bHkgYWRkcmVzc2VzIGEgZGl2aWRlLWJ5LXplcm8sIGEgc3RhbmRhcmQgYXJpdGhtZXRpYyBleGNlcHRpb24gYW5kIHRoZXJlZm9yZSwgYSBrZXJuZWwgb29wcyBzaXR1YXRpb24uIEkgYWxzbyBzZWUgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBLTVNBTi1zcGVjaWZpYyBjaGVja3Mgd291bGQgYmUgaW1wYWN0ZWQgaGVyZS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGlzIGFzIGl0IHJlbGF0ZXMgdG8gS0FTQU4gYXMgd2VsbC4gRGl2aXNpb24gYnkgemVybyBpcyBhIGNsYXNzaWMga2VybmVsIGJ1Zy4gUmVndWxhciB0ZXN0aW5nIGFuZCBmdXp6aW5nIHR5cGljYWxseSBleHBvc2Ugc3VjaCBlcnJvcnMgdmVyeSBxdWlja2x5LiBNb3JlIGdlbmVyYWxseSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgcGFkZGluZyBpc3N1ZXMgYXJlIHByZXNlbnQgaGVyZS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IHdhcnJhbnQgYSBgTmVlZHNLTVNBTmAgdGFnLlxuXG5JIGFtIG5vdyBnb2luZyB0byBjbGVhcmx5IHdyaXRlIHRoZSBLTVNBTlJlYXNvbmluZyBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ5LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjUwOjE5LjY1MzM3MTA1MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHplcm8gY2hlY2sgZm9yICd3ZWlnaHRfdG90YWwnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHRvIHByZXZlbnQgYSBkaXZpc2lvbi1ieS16ZXJvIGtlcm5lbCBjcmFzaCB3aGVuIGNhbGN1bGF0aW5nICdyb3VuZHMnIGFuZCAnZGVsdGEnIChyZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWwpLiBUaGUgbWVtb3J5IGJ1ZmZlciAnd2VpZ2h0cycgaXMgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIGFuZCBmcmVlZCBiZWZvcmUgcmV0dXJuaW5nIG9uIHRoaXMgZXJyb3IgcGF0aC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIERpdmlzaW9uLWJ5LXplcm8gY3Jhc2hlcyBhcmUgZGV0ZWN0ZWQgd2l0aG91dCBLTVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgemVybyBjaGVjayBmb3IgJ3dlaWdodF90b3RhbCcgaW4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKCkgdG8gcHJldmVudCBhIGRpdmlzaW9uLWJ5LXplcm8ga2VybmVsIGNyYXNoIHdoZW4gY2FsY3VsYXRpbmcgJ3JvdW5kcycgYW5kICdkZWx0YScgKHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbCkuIFRoZSBtZW1vcnkgYnVmZmVyICd3ZWlnaHRzJyBpcyBhbGxvY2F0ZWQgd2l0aCBremFsbG9jKCkgYW5kIGZyZWVkIGJlZm9yZSByZXR1cm5pbmcgb24gdGhpcyBlcnJvciBwYXRoLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gRGl2aXNpb24tYnktemVybyBjcmFzaGVzIGFyZSBkZXRlY3RlZCB3aXRob3V0IEtNU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxxr2c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 01:47:34 +0000 UTC FinishedAt: 2026-09-03 01:50:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "SYSFS" ], "series_id": "e48a2be8-b161-4370-84d2-4c37fd5436c3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_mempolicy_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgemVybyBjaGVjayBmb3IgJiMzOTt3ZWlnaHRfdG90YWwmIzM5OyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB0byBwcmV2ZW50IGEgZGl2aXNpb24tYnktemVybyBrZXJuZWwgY3Jhc2ggd2hlbiBjYWxjdWxhdGluZyAmIzM5O3JvdW5kcyYjMzk7IGFuZCAmIzM5O2RlbHRhJiMzOTsgKHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbCkuIFRoZSBtZW1vcnkgYnVmZmVyICYjMzk7d2VpZ2h0cyYjMzk7IGlzIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MoKSBhbmQgZnJlZWQgYmVmb3JlIHJldHVybmluZyBvbiB0aGlzIGVycm9yIHBhdGguIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBEaXZpc2lvbi1ieS16ZXJvIGNyYXNoZXMgYXJlIGRldGVjdGVkIHdpdGhvdXQgS01TQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHdoZW4gdGhlIHRvdGFsIHdlaWdodCBvZiB0aGUgY2FuZGlkYXRlIE5VTUEgbm9kZXMgaXMgemVyby4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIE5VTUEgbWVtb3J5IHBvbGljeSBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YjYxOWMwNWFkMWUzMTQ2MjI2YWM0MDFkOTI4MGQ0OGI1Nzc0YWE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMTo0OToyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCA1MDFlMGI4MGQ3ZGExLi44Yjk3MjhlN2E1OTdlIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jXG5AQCAtMjcwNyw2ICYjNDM7MjcwNywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKVxuIFx0XHR3ZWlnaHRfdG90YWwgJiM0Mzs9IHdlaWdodHNbbm9kZV07XG4gXG4mIzQzO1x0aWYgKCF3ZWlnaHRfdG90YWwpIHtcbiYjNDM7XHRcdGtmcmVlKHdlaWdodHMpO1xuJiM0MztcdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxuIFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHdoZW4gdGhlIHRvdGFsIHdlaWdodCBvZiB0aGUgY2FuZGlkYXRlIE5VTUEgbm9kZXMgaXMgemVyby4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIE5VTUEgbWVtb3J5IHBvbGljeSBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YjYxOWMwNWFkMWUzMTQ2MjI2YWM0MDFkOTI4MGQ0OGI1Nzc0YWE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwMTo0OToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggNTAxZTBiODBkN2RhMS4uOGI5NzI4ZTdhNTk3ZSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmMKQEAgLTI3MDcsNiAmIzQzOzI3MDcsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCwKIAlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpCiAJCXdlaWdodF90b3RhbCAmIzQzOz0gd2VpZ2h0c1tub2RlXTsKIAomIzQzOwlpZiAoIXdlaWdodF90b3RhbCkgewomIzQzOwkJa2ZyZWUod2VpZ2h0cyk7CiYjNDM7CQlyZXR1cm4gdG90YWxfYWxsb2NhdGVkOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBDYWxjdWxhdGUgcm91bmRzL3BhcnRpYWwgcm91bmRzIHRvIG1pbmltaXplIF9fYWxsb2NfcGFnZXNfYnVsayBjYWxscy4KIAkgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmV2aWV3aW5nIHRoZSBgbW0vbWVtcG9saWN5LmNgIFBhdGNoKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVkIGBtbS9tZW1wb2xpY3kuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHB1bGwgdXAgdGhlIGRpZmYgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgKmV4YWN0bHkqIHdoYXQgd2FzIGNoYW5nZWQsIGxpbmUgYnkgbGluZS4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBleHBhbmQgbXkgdmlldyBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMjcwNyBpbiB0aGF0IGZpbGUuIEkmIzM5O2xsIHByb2JhYmx5IGZpcmUgdXAgYSBgcmVhZC1maWxlYCBjb21tYW5kIHRvIGxvYWQgdGhhdCBzZWN0aW9uIGRpcmVjdGx5IGFuZCBoYXZlIGl0IHJlYWR5IGZvciBmb2N1c2VkIGFuYWx5c2lzLiBUaGlzIHNob3VsZCBnaXZlIHVzIHRoZSBuZWNlc3NhcnkgYnVpbGRpbmcgYmxvY2tzIHRvIGRldGVybWluZSBob3cgdGhpcyBwYXRjaCBhZmZlY3RzIG1lbW9yeSBwb2xpY3kgYmVoYXZpb3IgYW5kIHdoZXRoZXIgaXQgYWxpZ25zIHdpdGggb3VyIGV4cGVjdGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjgwOlx0XHRcdFx0bWUtXHUwMDNlaWxfd2VpZ2h0IC09IHJlbV9wYWdlcztcbjI2ODE6XHRcdFx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuMjY4MjpcdFx0XHR9XG4yNjgzOlx0XHRcdC8qIE90aGVyd2lzZSB3ZSBhZGp1c3QgcmVtYWluaW5nIHBhZ2VzLCBjb250aW51ZSBmcm9tIHRoZXJlICovXG4yNjg0Olx0XHRcdHJlbV9wYWdlcyAtPSB3ZWlnaHQ7XG4yNjg1Olx0XHR9XG4yNjg2Olx0XHQvKiBjbGVhciBhY3RpdmUgd2VpZ2h0IGluIGNhc2Ugb2YgYW4gYWxsb2NhdGlvbiBmYWlsdXJlICovXG4yNjg3Olx0XHRtZS1cdTAwM2VpbF93ZWlnaHQgPSAwO1xuMjY4ODpcdFx0cHJldl9ub2RlID0gbm9kZTtcbjI2ODk6XHRcbjI2OTA6XHRcdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbjI2OTE6XHRcdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbjI2OTI6XHRcdGlmICghd2VpZ2h0cylcbjI2OTM6XHRcdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbjI2OTQ6XHRcbjI2OTU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjI2OTY6XHRcdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcbjI2OTc6XHRcdGlmIChzdGF0ZSkge1xuMjY5ODpcdFx0XHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XG4yNjk5Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjcwMDpcdFx0fSBlbHNlIHtcbjI3MDE6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNzAyOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOylcbjI3MDM6XHRcdFx0XHR3ZWlnaHRzW2ldID0gMTtcbjI3MDQ6XHRcdH1cbjI3MDU6XHRcbjI3MDY6XHRcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXG4yNzA3Olx0XHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4yNzA4Olx0XHRcdHdlaWdodF90b3RhbCAmIzQzOz0gd2VpZ2h0c1tub2RlXTtcbjI3MDk6XHRcbjI3MTA6XHRcdGlmICghd2VpZ2h0X3RvdGFsKSB7XG4yNzExOlx0XHRcdGtmcmVlKHdlaWdodHMpO1xuMjcxMjpcdFx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuMjcxMzpcdFx0fVxuMjcxNDpcdFxuMjcxNTpcdFx0LypcbjI3MTY6XHRcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxuMjcxNzpcdFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cbjI3MTg6XHRcdCAqXG4yNzE5Olx0XHQgKiBpZiAocm91bmRzIFx1MDAzZSAwKSBhbmQgKGRlbHRhID09IDApLCByZXN1bWVfbm9kZSB3aWxsIGFsd2F5cyBiZVxuMjcyMDpcdFx0ICogdGhlIG5vZGUgZm9sbG93aW5nIHByZXZfbm9kZSBhbmQgaXRzIHdlaWdodC5cbjI3MjE6XHRcdCAqL1xuMjcyMjpcdFx0cm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO1xuMjcyMzpcdFx0ZGVsdGEgPSByZW1fcGFnZXMgJSB3ZWlnaHRfdG90YWw7XG4yNzI0Olx0XHRyZXN1bWVfbm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTtcbjI3MjU6XHRcdHJlc3VtZV93ZWlnaHQgPSB3ZWlnaHRzW3Jlc3VtZV9ub2RlXTtcbjI3MjY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ub2RlczsgaSYjNDM7JiM0MzspIHtcbjI3Mjc6XHRcdFx0bm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTtcbjI3Mjg6XHRcdFx0d2VpZ2h0ID0gd2VpZ2h0c1tub2RlXTtcbjI3Mjk6XHRcdFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcbjI3MzA6XHRcdFx0LyogSWYgYSBkZWx0YSBleGlzdHMsIGFkZCB0aGlzIG5vZGUmIzM5O3MgcG9ydGlvbiBvZiB0aGUgZGVsdGEgKi9cbjI3MzE6XHRcdFx0aWYgKGRlbHRhIFx1MDAzZSB3ZWlnaHQpIHtcbjI3MzI6XHRcdFx0XHRub2RlX3BhZ2VzICYjNDM7PSB3ZWlnaHQ7XG4yNzMzOlx0XHRcdFx0ZGVsdGEgLT0gd2VpZ2h0O1xuMjczNDpcdFx0XHR9IGVsc2UgaWYgKGRlbHRhKSB7XG4yNzM1Olx0XHRcdFx0Lyogd2hlbiBkZWx0YSBpcyBkZXBsZXRlZCwgcmVzdW1lIGZyb20gdGhhdCBub2RlICovXG4yNzM2Olx0XHRcdFx0bm9kZV9wYWdlcyAmIzQzOz0gZGVsdGE7XG4yNzM3Olx0XHRcdFx0cmVzdW1lX25vZGUgPSBub2RlO1xuMjczODpcdFx0XHRcdHJlc3VtZV93ZWlnaHQgPSB3ZWlnaHQgLSBkZWx0YTtcbjI3Mzk6XHRcdFx0XHRkZWx0YSA9IDA7XG4yNzQwOlx0XHRcdH1cbjI3NDE6XHRcdFx0Lyogbm9kZV9wYWdlcyBjYW4gYmUgMCBpZiBhbiBhbGxvY2F0aW9uIGZhaWxzIGFuZCByb3VuZHMgPT0gMCAqL1xuMjc0MjpcdFx0XHRpZiAoIW5vZGVfcGFnZXMpXG4yNzQzOlx0XHRcdFx0YnJlYWs7XG4yNzQ0Olx0XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG4yNzQ1Olx0XHRcdFx0XHRcdFx0ICBwYWdlX2FycmF5KTtcbjI3NDY6XHRcdFx0cGFnZV9hcnJheSAmIzQzOz0gbnJfYWxsb2NhdGVkO1xuMjc0NzpcdFx0XHR0b3RhbF9hbGxvY2F0ZWQgJiM0Mzs9IG5yX2FsbG9jYXRlZDtcbjI3NDg6XHRcdFx0aWYgKHRvdGFsX2FsbG9jYXRlZCA9PSBucl9wYWdlcylcbjI3NDk6XHRcdFx0XHRicmVhaztcbjI3NTA6XHRcdFx0cHJldl9ub2RlID0gbm9kZTtcbjI3NTE6XHRcdH1cbjI3NTI6XHRcdG1lLVx1MDAzZWlsX3ByZXYgPSByZXN1bWVfbm9kZTtcbjI3NTM6XHRcdG1lLVx1MDAzZWlsX3dlaWdodCA9IHJlc3VtZV93ZWlnaHQ7XG4yNzU0Olx0XHRrZnJlZSh3ZWlnaHRzKTtcbjI3NTU6XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNzU2Olx0fVxuMjc1NzpcdFxuMjc1ODpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuMjc1OTpcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzNQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBtbS9tZW1wb2xpY3kuY2AgYW5kIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBXaGVyZSB0aGUgaGVjayBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGggdG8gZ2V0IGEgaGFuZGxlIG9uIGl0cyBwdXJwb3NlIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU28sIGxldCYjMzk7cyBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIHNlZSB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBwb3BzIHVwIGluIHRoZSBjb2RlYmFzZS4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0yNjAwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYzNC1cbm1tL21lbXBvbGljeS5jOjI2MzU6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI2MzYtXHRcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1wb2xpY3kuYz0yNzg0PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzk4LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3OTk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yODAwLVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBNZW1vcnkgQWxsb2NhdGlvbiBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGRpdmlkZS1ieS16ZXJvIGVycm9yIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEl0IHNlZW1zIHRoZXNlIGZ1bmN0aW9ucywgd2hlbiBkZWFsaW5nIHdpdGggYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAgbWVtb3J5IHBvbGljaWVzLCBldmVudHVhbGx5IGNhbGwgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuCgpOb3csIGJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgY2FsY3VsYXRpbmcgYHJvdW5kc2AgYW5kIGBkZWx0YWAgYmFzZWQgb24gYSBkaXZpc2lvbiB1c2luZyBgd2VpZ2h0X3RvdGFsYC4gVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCBhcmlzZXMgd2hlbiBgd2VpZ2h0X3RvdGFsYCBpcyB6ZXJvLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgbm9kZXMgc3BlY2lmaWVkIGluIHRoZSBgbm9kZXNgIG1hc2sgYWxsIGhhdmUgemVybyB3ZWlnaHQgaW4gYHN0YXRlLSZndDtpd190YWJsZWAsIG9yIHdoZW4gYG5vZGVzYCBpcyBlbXB0eSwgd2hpY2ggd291bGQgbGVhZCB0byBhIGRpdmlkZS1ieS16ZXJvLCBhIGNsYXNzaWMgYnVnLCBhbmQgcG90ZW50aWFsbHkgYSBrZXJuZWwgcGFuaWMuIFRoZSBmaXgsIGEgc2ltcGxlIGNoZWNrOgoKYGBgYwoJaWYgKCF3ZWlnaHRfdG90YWwpIHsKCQlrZnJlZSh3ZWlnaHRzKTsKCQlyZXR1cm4gdG90YWxfYWxsb2NhdGVkOwoJfQpgYGAKCi4uLmNvcnJlY3RseSBoYW5kbGVzIHRoaXMgZWRnZSBjYXNlIGJ5IHJldHVybmluZyB0aGUgdG90YWwgYWxsb2NhdGVkIHBhZ2VzIGFuZCBmcmVlaW5nIHRoZSBgd2VpZ2h0c2AgYXJyYXksIHdoaWNoIGF2b2lkcyB0aGUgZGl2aXNpb24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgc2NvcGUgb2YgdGhpcyBpc3N1ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBLY29uZmlnIG9wdGlvbnMgY29udHJvbCBgbW0vbWVtcG9saWN5LmNgIGFuZCBzcGVjaWZpY2FsbHkgYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAgb3IgTlVNQSBmdW5jdGlvbmFsaXR5IGluIGdlbmVyYWwuIEkmIzM5O2xsIGNoZWNrIGBtbS9NYWtlZmlsZWAgYW5kIGBtbS9LY29uZmlnYCB0byBzZWUgd2hhdCBmbGFncyBhcmUgcmVsZXZhbnQgYW5kLCB0aGVyZWZvcmUsIHdoaWNoIGNvbmZpZ3VyYXRpb25zIHRoaXMgZml4IGFmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtcG9saWN5XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTg1PW9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFx0JiM0Mzs9IG1lbXBvbGljeS5vXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVx0JiM0Mzs9IHNwYXJzZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgbWVtcG9saWN5Lm8gb24gTlVNQSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfTlVNQWAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciBgbWVtcG9saWN5Lm9gLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBidXQgaXQgZG9lc24mIzM5O3QgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IGVsc2UgaXMgY29ubmVjdGVkIHRvIGBOVU1BYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24/JiMzNDsgQXJlIHRoZXJlIG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgdGhhdCBhbHNvIGRlcGVuZCBvbiBpdD8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIGhlcmUuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IHN0ZXAgaXMgb2J2aW91czogSSBuZWVkIHRvIHF1aWNrbHkgYW5kIGVmZmljaWVudGx5IGV4YW1pbmUgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTtsbCB1c2UgYGdyZXBgIHRvIHNlYXJjaCB0aGUgYEtjb25maWdgIGZpbGVzIGZvciBhbnkgcmVmZXJlbmNlcyB0byBgY29uZmlnIE5VTUFgLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgcXVpY2sgb3ZlcnZpZXcgb2YgYWxsIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBkZXBlbmRlbmNpZXMsIGhlbHBpbmcgbWUgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCBwb3RlbnRpYWwgZG93bnN0cmVhbSBlZmZlY3RzIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBgTlVNQWAuIFRoaXMgZ2l2ZXMgbWUgYSBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHRvcG9sb2d5IG9mIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVU1BXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0xNjI2PWNvbmZpZyBIT1RQTFVHX0NQVVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjMzLSMgQ29tbW9uIE5VTUEgRmVhdHVyZXNcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNjM0OmNvbmZpZyBOVU1BXG5hcmNoL2FybTY0L0tjb25maWctMTYzNS1cdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTU0ND1jb25maWcgTlJfQ1BVU1xuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTUyLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1NTM6Y29uZmlnIE5VTUFcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTU0LVx0Ym9vbCBcJiMzNDtOVU1BIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL21pcHMvS2NvbmZpZz0yNTk4PWNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0yNjAwLVxuYXJjaC9taXBzL0tjb25maWc6MjYwMTpjb25maWcgTlVNQVxuYXJjaC9taXBzL0tjb25maWctMjYwMi1cdGJvb2wgXCYjMzQ7TlVNQSBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9NzU4PWNvbmZpZyBJUlFfQUxMX0NQVVNcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy03NjYtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo3Njc6Y29uZmlnIE5VTUFcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTc2OC1cdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9NDgxPWVuZGNob2ljZVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy00ODMtIyBDb21tb24gTlVNQSBGZWF0dXJlc1xuYXJjaC9yaXNjdi9LY29uZmlnOjQ4NDpjb25maWcgTlVNQVxuYXJjaC9yaXNjdi9LY29uZmlnLTQ4NS1cdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz01NDc9Y29uZmlnIEhPVFBMVUdfQ1BVXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTQ5LVxuYXJjaC9zMzkwL0tjb25maWc6NTUwOmNvbmZpZyBOVU1BXG5hcmNoL3MzOTAvS2NvbmZpZy01NTEtXHRib29sIFwmIzM0O05VTUEgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZz0xMDI9Y29uZmlnIFZTWVNDQUxMXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTExNC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxMTU6Y29uZmlnIE5VTUFcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMTYtXHRib29sIFwmIzM0O05vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MgKE5VTUEpIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3NwYXJjL0tjb25maWc9MjU0PWNvbmZpZyBHRU5FUklDX0xPQ0tCUkVBS1xuLS1cbmFyY2gvc3BhcmMvS2NvbmZpZy0yNTgtXG5hcmNoL3NwYXJjL0tjb25maWc6MjU5OmNvbmZpZyBOVU1BXG5hcmNoL3NwYXJjL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtOVU1BIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE0OTI9Y29uZmlnIEFNRF9NRU1fRU5DUllQVFxuLS1cbmFyY2gveDg2L0tjb25maWctMTUwOC0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXG5hcmNoL3g4Ni9LY29uZmlnOjE1MDk6Y29uZmlnIE5VTUFcbmFyY2gveDg2L0tjb25maWctMTUxMC1cdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcxMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE1lbW9yeSBQb2xpY3kgQWxsb2NhdGlvbiBQYXRoKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgZnVuY3Rpb24sIG9yIGFueXRoaW5nIHNpbWlsYXIsIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIE15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGRpdmUgaW50byBgbW0vbWVtcG9saWN5LmNgLiBJIGZpZ3VyZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVzaWRlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gc2NhbiBhcm91bmQgbGluZSAyNzgwIHRvIHBpbnBvaW50IGhvdyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyBleHBvc2VkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqY2FsbGVkKi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGl0cyBwdXJwb3NlIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgbWVtb3J5IHBvbGljeSBmcmFtZXdvcmsuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzgwOlx0ICpcbjI3ODE6XHQgKiBJdCBjYW4gYWNjZWxlcmF0ZSBtZW1vcnkgYWxsb2NhdGlvbiBlc3BlY2lhbGx5IGludGVybGVhdmluZ1xuMjc4MjpcdCAqIGFsbG9jYXRlIG1lbW9yeS5cbjI3ODM6XHQgKi9cbjI3ODQ6XHR1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4yNzg1Olx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbjI3ODY6XHR7XG4yNzg3Olx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wgPSBcdTAwMjZkZWZhdWx0X3BvbGljeTtcbjI3ODg6XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuMjc4OTpcdFx0aW50IG5pZDtcbjI3OTA6XHRcbjI3OTE6XHRcdGlmICghaW5faW50ZXJydXB0KCkgXHUwMDI2XHUwMDI2ICEoZ2ZwIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXG4yNzkyOlx0XHRcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbjI3OTM6XHRcbjI3OTQ6XHRcdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXG4yNzk1Olx0XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG4yNzk2Olx0XHRcdFx0XHRcdFx0XHQgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuMjc5NzpcdFxuMjc5ODpcdFx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbjI3OTk6XHRcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbjI4MDA6XHRcdFx0XHRcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbjI4MDE6XHRcbjI4MDI6XHRcdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxuMjgwMzpcdFx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXG4yODA0Olx0XHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4yODA1Olx0XG4yODA2Olx0XHRuaWQgPSBudW1hX25vZGVfaWQoKTtcbjI4MDc6XHRcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xuMjgwODpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbmlkLCBub2RlbWFzayxcbjI4MDk6XHRcdFx0XHRcdCAgICAgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4yODEwOlx0fVxuMjgxMTpcdFxuMjgxMjpcdGludCB2bWFfZHVwX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QpXG4yODEzOlx0e1xuMjgxNDpcdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sID0gbXBvbF9kdXAoc3JjLVx1MDAzZXZtX3BvbGljeSk7XG4yODE1Olx0XG4yODE2Olx0XHRpZiAoSVNfRVJSKHBvbCkpXG4yODE3Olx0XHRcdHJldHVybiBQVFJfRVJSKHBvbCk7XG4yODE4Olx0XHRkc3QtXHUwMDNldm1fcG9saWN5ID0gcG9sO1xuMjgxOTpcdFx0cmV0dXJuIDA7XG4yODIwOlx0fVxuMjgyMTpcdFxuMjgyMjpcdC8qXG4yODIzOlx0ICogSWYgbXBvbF9kdXAoKSBzZWVzIGN1cnJlbnQtXHUwMDNlY3B1c2V0ID09IGNwdXNldF9iZWluZ19yZWJvdW5kLCB0aGVuIGl0XG4yODI0Olx0ICogcmViaW5kcyB0aGUgbWVtcG9saWN5IGl0cyBjb3B5aW5nIGJ5IGNhbGxpbmcgbXBvbF9yZWJpbmRfcG9saWN5KClcbjI4MjU6XHQgKiB3aXRoIHRoZSBtZW1zX2FsbG93ZWQgcmV0dXJuZWQgYnkgY3B1c2V0X21lbXNfYWxsb3dlZCgpLiAgVGhpc1xuMjgyNjpcdCAqIGtlZXBzIG1lbXBvbGljaWVzIGNwdXNldCByZWxhdGl2ZSBhZnRlciBpdHMgY3B1c2V0IG1vdmVzLiAgU2VlXG4yODI3Olx0ICogZnVydGhlciBrZXJuZWwvY3B1c2V0LmMgdXBkYXRlX25vZGVtYXNrKCkuXG4yODI4Olx0ICpcbjI4Mjk6XHQgKiBjdXJyZW50JiMzOTtzIG1lbXBvbGljeSBtYXkgYmUgcmViaW5kZWQgYnkgdGhlIG90aGVyIHRhc2sodGhlIHRhc2sgdGhhdCBjaGFuZ2VzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWxsb2NhdGlvbiBTdHJhdGVnaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiB0aGVzZSBidWxrIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAgYW5kIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSAqYWN0dWFsbHkqIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBHcmVwcGluZyBpcyB0aGUgb2J2aW91cyB0b29sIGZvciB0aGlzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggZm9yIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgdGhlIGNvZGUgcGF0aHMgdXNpbmcgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB0aGVuIHF1aWNrbHkgZXZhbHVhdGUgdGhlIHJlc3VsdHMgdG8gc2VlIGlmIHRoZSBjYWxscyBhcmUgbWVhbmluZ2Z1bCB0byBteSBjdXJyZW50IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbi0tXG5tbS9tZW1wb2xpY3kuYz0yNzU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3ODMtICovXG5tbS9tZW1wb2xpY3kuYzoyNzg0OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3ODUtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS92bWFsbG9jLmM9MzY2OT12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS92bWFsbG9jLmMtMzczNi1cdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXHUwMDI2XHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXG5tbS92bWFsbG9jLmM6MzczNzpcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcbm1tL3ZtYWxsb2MuYy0zNzM4LVx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdm1hbGxvYyBhbmQgTlVNQSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGZ1bmN0aW9uLiBSaWdodCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGB2bWFsbG9jYCDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGl0JiMzOTtzIGhhbmRsaW5nIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCDigJMgYW5kIHRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyB3aG9sZSBwcm9jZXNzIGlzIGhhcHBlbmluZyB1bmRlciBOVU1BLCBzbyBtZW1wb2xpY3kgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1wb2xpY3kgdXNpbmcgc3lzZnMgb3Igc3lzY2FsbHMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc2V0IHRoZSB3ZWlnaHRzIGZvciBlYWNoIG5vZGUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHJlZmVyZW5jZXMgdG8gYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAgb3IgcGVyaGFwcyBgd2lfc3RhdGVgIHdpdGhpbiBgbW0vbWVtcG9saWN5LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludC4gSXQgaGFzIHRvIGJlIGluIHRoZXJlIHNvbWV3aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3aV9zdGF0ZXx3ZWlnaHRlZF9pbnRlcmxlYXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmM9NTc0PXN0cnVjdCBkYW1vc192YV9taWdyYXRlX3ByaXZhdGUge1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTgyLSAqXG5tbS9kYW1vbi92YWRkci5jOjU4MzogKiBUaGUgYWxnb3JpdGhtIHVzZWQgaGVyZSBpcyBzaW1pbGFyIHRvIHdlaWdodGVkX2ludGVybGVhdmVfbmlkKClcbm1tL2RhbW9uL3ZhZGRyLmMtNTg0LSAqL1xuLS1cbm1tL21lbXBvbGljeS5jPTE1Mj1zdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7XG4tLVxubW0vbWVtcG9saWN5LmMtMTU0LS8qXG5tbS9tZW1wb2xpY3kuYzoxNTU6ICogQSBudWxsIHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgaXMgaW50ZXJwcmV0ZWQgYXMgaGF2aW5nIC5tb2RlPVwmIzM0O2F1dG9cJiMzNDssXG5tbS9tZW1wb2xpY3kuYy0xNTYtICogYW5kIC5pd190YWJsZSBpcyBpbnRlcnByZXRlZCBhcyBhbiBhcnJheSBvZiAxcyB3aXRoIGxlbmd0aCBucl9ub2RlX2lkcy5cbm1tL21lbXBvbGljeS5jLTE1Ny0gKi9cbm1tL21lbXBvbGljeS5jOjE1ODpzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7XG5tbS9tZW1wb2xpY3kuYy0xNTktXHRib29sIG1vZGVfYXV0bztcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNjEtfTtcbm1tL21lbXBvbGljeS5jOjE2MjpzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgX19yY3UgKndpX3N0YXRlO1xubW0vbWVtcG9saWN5LmMtMTYzLXN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XG4tLVxubW0vbWVtcG9saWN5LmMtMTY1LS8qXG5tbS9tZW1wb2xpY3kuYzoxNjY6ICogd2lfc3RhdGVfbG9jayBwcm90ZWN0cyBib3RoIHdpX3N0YXRlIGFuZCBub2RlX2J3X3RhYmxlLlxubW0vbWVtcG9saWN5LmM6MTY3OiAqIG5vZGVfYndfdGFibGUgaXMgb25seSB1c2VkIGJ5IHdyaXRlcnMgdG8gdXBkYXRlIHdpX3N0YXRlLlxubW0vbWVtcG9saWN5LmMtMTY4LSAqL1xubW0vbWVtcG9saWN5LmM6MTY5OnN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYy0xNzAtXG5tbS9tZW1wb2xpY3kuYz0xNzE9c3RhdGljIHU4IGdldF9pbF93ZWlnaHQoaW50IG5vZGUpXG5tbS9tZW1wb2xpY3kuYy0xNzIte1xubW0vbWVtcG9saWN5LmM6MTczOlx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xubW0vbWVtcG9saWN5LmMtMTc0LVx0dTggd2VpZ2h0ID0gMTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNzYtXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9tZW1wb2xpY3kuYzoxNzc6XHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XG5tbS9tZW1wb2xpY3kuYy0xNzgtXHRpZiAoc3RhdGUpXG4tLVxubW0vbWVtcG9saWN5LmMtMTg1LSAqIENvbnZlcnQgYmFuZHdpZHRoIHZhbHVlcyBpbnRvIHdlaWdodGVkIGludGVybGVhdmUgd2VpZ2h0cy5cbm1tL21lbXBvbGljeS5jOjE4NjogKiBDYWxsIHdpdGggd2lfc3RhdGVfbG9jay5cbm1tL21lbXBvbGljeS5jLTE4Ny0gKi9cbi0tXG5tbS9tZW1wb2xpY3kuYz0yMjE9aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcylcbm1tL21lbXBvbGljeS5jLTIyMi17XG5tbS9tZW1wb2xpY3kuYzoyMjM6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbm1tL21lbXBvbGljeS5jLTIyNC1cdHVuc2lnbmVkIGludCAqb2xkX2J3LCAqbmV3X2J3O1xuLS1cbm1tL21lbXBvbGljeS5jLTIzMi1cbm1tL21lbXBvbGljeS5jOjIzMzpcdG5ld193aV9zdGF0ZSA9IGttYWxsb2NfZmxleCgqbmV3X3dpX3N0YXRlLCBpd190YWJsZSwgbnJfbm9kZV9pZHMpO1xubW0vbWVtcG9saWN5LmM6MjM0Olx0aWYgKCFuZXdfd2lfc3RhdGUpIHtcbm1tL21lbXBvbGljeS5jLTIzNS1cdFx0a2ZyZWUobmV3X2J3KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMzctXHR9XG5tbS9tZW1wb2xpY3kuYzoyMzg6XHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcbm1tL21lbXBvbGljeS5jLTIzOS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOylcbm1tL21lbXBvbGljeS5jOjI0MDpcdFx0bmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlW2ldID0gMTtcbm1tL21lbXBvbGljeS5jLTI0MS1cbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDYtXHQgKi9cbm1tL21lbXBvbGljeS5jOjI0NzpcdG11dGV4X2xvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYy0yNDgtXG4tLVxubW0vbWVtcG9saWN5LmMtMjU0LVxubW0vbWVtcG9saWN5LmM6MjU1Olx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbm1tL21lbXBvbGljeS5jOjI1NjpcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbm1tL21lbXBvbGljeS5jOjI1NzpcdGlmIChvbGRfd2lfc3RhdGUgXHUwMDI2XHUwMDI2ICFvbGRfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvKSB7XG5tbS9tZW1wb2xpY3kuYzoyNTg6XHRcdC8qIE1hbnVhbCBtb2RlOyBza2lwIHJlZHVjaW5nIHdlaWdodHMgYW5kIHVwZGF0aW5nIHdpX3N0YXRlICovXG5tbS9tZW1wb2xpY3kuYzoyNTk6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbm1tL21lbXBvbGljeS5jOjI2MDpcdFx0a2ZyZWUobmV3X3dpX3N0YXRlKTtcbm1tL21lbXBvbGljeS5jLTI2MS1cdFx0Z290byBvdXQ7XG4tLVxubW0vbWVtcG9saWN5LmMtMjYzLVxubW0vbWVtcG9saWN5LmM6MjY0Olx0LyogTlVMTCB3aV9zdGF0ZSBhc3N1bWVzIGF1dG89dHJ1ZTsgcmVkdWNlIHdlaWdodHMgYW5kIHVwZGF0ZSB3aV9zdGF0ZSovXG5tbS9tZW1wb2xpY3kuYzoyNjU6XHRyZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKG5ld19idywgbmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlKTtcbm1tL21lbXBvbGljeS5jOjI2NjpcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTtcbm1tL21lbXBvbGljeS5jLTI2Ny1cbm1tL21lbXBvbGljeS5jOjI2ODpcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbm1tL21lbXBvbGljeS5jOjI2OTpcdGlmIChvbGRfd2lfc3RhdGUpIHtcbm1tL21lbXBvbGljeS5jLTI3MC1cdFx0c3luY2hyb25pemVfcmN1KCk7XG5tbS9tZW1wb2xpY3kuYzoyNzE6XHRcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XG5tbS9tZW1wb2xpY3kuYy0yNzItXHR9XG4tLVxubW0vbWVtcG9saWN5LmM9MjA4Mz1ib29sIGFwcGx5X3BvbGljeV96b25lKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSwgZW51bSB6b25lX3R5cGUgem9uZSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMTAyLVxubW0vbWVtcG9saWN5LmM6MjEwMzpzdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxubW0vbWVtcG9saWN5LmMtMjEwNC17XG4tLVxubW0vbWVtcG9saWN5LmM9MjE0Nj11bnNpZ25lZCBpbnQgbWVtcG9saWN5X3NsYWJfbm9kZSh2b2lkKVxuLS1cbm1tL21lbXBvbGljeS5jLTIxNjUtXHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jOjIxNjY6XHRcdHJldHVybiB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHBvbGljeSk7XG5tbS9tZW1wb2xpY3kuYy0yMTY3LVxuLS1cbm1tL21lbXBvbGljeS5jPTIxOTI9c3RhdGljIHVuc2lnbmVkIGludCByZWFkX29uY2VfcG9saWN5X25vZGVtYXNrKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMjA1LVxubW0vbWVtcG9saWN5LmM6MjIwNjpzdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbmlkKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgcGdvZmZfdCBpbHgpXG5tbS9tZW1wb2xpY3kuYy0yMjA3LXtcbm1tL21lbXBvbGljeS5jOjIyMDg6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0yMjA5LVx0bm9kZW1hc2tfdCBub2RlbWFzaztcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMjIxLVxubW0vbWVtcG9saWN5LmM6MjIyMjpcdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcbm1tL21lbXBvbGljeS5jOjIyMjM6XHQvKiBVbmluaXRpYWxpemVkIHdpX3N0YXRlIG1lYW5zIHdlIHNob3VsZCBhc3N1bWUgYWxsIHdlaWdodHMgYXJlIDEgKi9cbm1tL21lbXBvbGljeS5jLTIyMjQtXHRpZiAoc3RhdGUpXG4tLVxubW0vbWVtcG9saWN5LmM9MjI3Mj1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxuLS1cbm1tL21lbXBvbGljeS5jLTIzMDctXHRcdCpuaWQgPSAoaWx4ID09IE5PX0lOVEVSTEVBVkVfSU5ERVgpID9cbm1tL21lbXBvbGljeS5jOjIzMDg6XHRcdFx0d2VpZ2h0ZWRfaW50ZXJsZWF2ZV9ub2Rlcyhwb2wpIDpcbm1tL21lbXBvbGljeS5jOjIzMDk6XHRcdFx0d2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQocG9sLCBpbHgpO1xubW0vbWVtcG9saWN5LmMtMjMxMC1cdFx0YnJlYWs7XG4tLVxubW0vbWVtcG9saWN5LmM9MjYwMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MzQtXG5tbS9tZW1wb2xpY3kuYzoyNjM1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjM2LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYzOC17XG5tbS9tZW1wb2xpY3kuYzoyNjM5Olx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xubW0vbWVtcG9saWN5LmMtMjY0MC1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50O1xuLS1cbm1tL21lbXBvbGljeS5jLTI2OTUtXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9tZW1wb2xpY3kuYzoyNjk2Olx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmMtMjY5Ny1cdGlmIChzdGF0ZSkge1xuLS1cbm1tL21lbXBvbGljeS5jPTI3ODQ9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3OTgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmM6Mjc5OTpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbm1tL21lbXBvbGljeS5jLTI4MDAtXHRcdFx0XHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmM9Mjk5ND1pbnQgbXBvbF9taXNwbGFjZWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vbWVtcG9saWN5LmMtMzAyMS1cdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmM6MzAyMjpcdFx0cG9sbmlkID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQocG9sLCBpbHgpO1xubW0vbWVtcG9saWN5LmMtMzAyMy1cdFx0YnJlYWs7XG4tLVxubW0vbWVtcG9saWN5LmM9MzY0OD1zdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vbWVtcG9saWN5LmMtMzY1MC17XG5tbS9tZW1wb2xpY3kuYzozNjUxOlx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKm5ld193aV9zdGF0ZSwgKm9sZF93aV9zdGF0ZSA9IE5VTEw7XG5tbS9tZW1wb2xpY3kuYy0zNjUyLVx0c3RydWN0IGl3X25vZGVfYXR0ciAqbm9kZV9hdHRyO1xuLS1cbm1tL21lbXBvbGljeS5jLTM2NjAtXG5tbS9tZW1wb2xpY3kuYzozNjYxOlx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG5tbS9tZW1wb2xpY3kuYzozNjYyOlx0aWYgKCFuZXdfd2lfc3RhdGUpXG5tbS9tZW1wb2xpY3kuYy0zNjYzLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL21lbXBvbGljeS5jLTM2NjQtXG5tbS9tZW1wb2xpY3kuYzozNjY1Olx0bXV0ZXhfbG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbm1tL21lbXBvbGljeS5jOjM2NjY6XHRvbGRfd2lfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHdpX3N0YXRlLFxubW0vbWVtcG9saWN5LmM6MzY2NzpcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbm1tL21lbXBvbGljeS5jOjM2Njg6XHRpZiAob2xkX3dpX3N0YXRlKSB7XG5tbS9tZW1wb2xpY3kuYzozNjY5Olx0XHRtZW1jcHkobmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlLCBvbGRfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGUsXG5tbS9tZW1wb2xpY3kuYy0zNjcwLVx0XHRcdFx0XHRucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTM2NzItXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOylcbm1tL21lbXBvbGljeS5jOjM2NzM6XHRcdFx0bmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlW2ldID0gMTtcbm1tL21lbXBvbGljeS5jLTM2NzQtXHR9XG5tbS9tZW1wb2xpY3kuYzozNjc1Olx0bmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlW25vZGVfYXR0ci1cdTAwM2VuaWRdID0gd2VpZ2h0O1xubW0vbWVtcG9saWN5LmM6MzY3NjpcdG5ld193aV9zdGF0ZS1cdTAwM2Vtb2RlX2F1dG8gPSBmYWxzZTtcbm1tL21lbXBvbGljeS5jLTM2NzctXG5tbS9tZW1wb2xpY3kuYzozNjc4Olx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmM6MzY3OTpcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbm1tL21lbXBvbGljeS5jOjM2ODA6XHRpZiAob2xkX3dpX3N0YXRlKSB7XG5tbS9tZW1wb2xpY3kuYy0zNjgxLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbm1tL21lbXBvbGljeS5jOjM2ODI6XHRcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XG5tbS9tZW1wb2xpY3kuYy0zNjgzLVx0fVxuLS1cbm1tL21lbXBvbGljeS5jLTM2ODYtXG5tbS9tZW1wb2xpY3kuYzozNjg3OnN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vbWVtcG9saWN5LmMtMzY4OC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG5tbS9tZW1wb2xpY3kuYy0zNjg5LXtcbm1tL21lbXBvbGljeS5jOjM2OTA6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0zNjkxLVx0Ym9vbCB3aV9hdXRvID0gdHJ1ZTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNjkzLVx0cmN1X3JlYWRfbG9jaygpO1xubW0vbWVtcG9saWN5LmM6MzY5NDpcdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcbm1tL21lbXBvbGljeS5jLTM2OTUtXHRpZiAoc3RhdGUpXG4tLVxubW0vbWVtcG9saWN5LmMtMzcwMS1cbm1tL21lbXBvbGljeS5jOjM3MDI6c3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vbWVtcG9saWN5LmMtMzcwMy1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbm1tL21lbXBvbGljeS5jLTM3MDQte1xubW0vbWVtcG9saWN5LmM6MzcwNTpcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpuZXdfd2lfc3RhdGUsICpvbGRfd2lfc3RhdGUgPSBOVUxMO1xubW0vbWVtcG9saWN5LmMtMzcwNi1cdHVuc2lnbmVkIGludCAqYnc7XG4tLVxubW0vbWVtcG9saWN5LmMtMzcxMi1cbm1tL21lbXBvbGljeS5jOjM3MTM6XHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcbm1tL21lbXBvbGljeS5jOjM3MTQ6XHRpZiAoIW5ld193aV9zdGF0ZSlcbm1tL21lbXBvbGljeS5jLTM3MTUtXHRcdHJldHVybiAtRU5PTUVNO1xubW0vbWVtcG9saWN5LmMtMzcxNi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOylcbm1tL21lbXBvbGljeS5jOjM3MTc6XHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG5tbS9tZW1wb2xpY3kuYy0zNzE4LVxubW0vbWVtcG9saWN5LmM6MzcxOTpcdG11dGV4X2xvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYzozNzIwOlx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbm1tL21lbXBvbGljeS5jOjM3MjE6XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2d2lfc3RhdGVfbG9jaykpO1xubW0vbWVtcG9saWN5LmMtMzcyMi1cbm1tL21lbXBvbGljeS5jOjM3MjM6XHRpZiAob2xkX3dpX3N0YXRlIFx1MDAyNlx1MDAyNiBpbnB1dCA9PSBvbGRfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvKSB7XG5tbS9tZW1wb2xpY3kuYzozNzI0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYzozNzI1Olx0XHRrZnJlZShuZXdfd2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmMtMzcyNi1cdFx0cmV0dXJuIGNvdW50O1xuLS1cbm1tL21lbXBvbGljeS5jLTM3MjktXHRpZiAoIWlucHV0KSB7XG5tbS9tZW1wb2xpY3kuYzozNzMwOlx0XHRpZiAob2xkX3dpX3N0YXRlKVxubW0vbWVtcG9saWN5LmM6MzczMTpcdFx0XHRtZW1jcHkobmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlLCBvbGRfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGUsXG5tbS9tZW1wb2xpY3kuYy0zNzMyLVx0XHRcdFx0XHRcdCAgICAgICBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xubW0vbWVtcG9saWN5LmM6MzczMzpcdFx0Z290byB1cGRhdGVfd2lfc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0zNzM0LVx0fVxuLS1cbm1tL21lbXBvbGljeS5jLTM3MzctXHRpZiAoIWJ3KSB7XG5tbS9tZW1wb2xpY3kuYzozNzM4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYzozNzM5Olx0XHRrZnJlZShuZXdfd2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmMtMzc0MC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxubW0vbWVtcG9saWN5LmMtMzc0Mi1cbm1tL21lbXBvbGljeS5jOjM3NDM6XHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcbm1tL21lbXBvbGljeS5jOjM3NDQ6XHRyZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKGJ3LCBuZXdfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGUpO1xubW0vbWVtcG9saWN5LmMtMzc0NS1cbm1tL21lbXBvbGljeS5jOjM3NDY6dXBkYXRlX3dpX3N0YXRlOlxubW0vbWVtcG9saWN5LmM6Mzc0NzpcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTtcbm1tL21lbXBvbGljeS5jOjM3NDg6XHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYzozNzQ5Olx0aWYgKG9sZF93aV9zdGF0ZSkge1xubW0vbWVtcG9saWN5LmMtMzc1MC1cdFx0c3luY2hyb25pemVfcmN1KCk7XG5tbS9tZW1wb2xpY3kuYzozNzUxOlx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmMtMzc1Mi1cdH1cbi0tXG5tbS9tZW1wb2xpY3kuYz0zNzc4PXN0YXRpYyB2b2lkIHN5c2ZzX3dpX25vZGVfZGVsZXRlX2FsbCh2b2lkKVxuLS1cbm1tL21lbXBvbGljeS5jLTM3ODUtXG5tbS9tZW1wb2xpY3kuYzozNzg2OnN0YXRpYyB2b2lkIHdpX3N0YXRlX2ZyZWUodm9pZClcbm1tL21lbXBvbGljeS5jLTM3ODcte1xubW0vbWVtcG9saWN5LmM6Mzc4ODpcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpvbGRfd2lfc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0zNzg5LVxubW0vbWVtcG9saWN5LmM6Mzc5MDpcdG11dGV4X2xvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG5tbS9tZW1wb2xpY3kuYzozNzkxOlx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbm1tL21lbXBvbGljeS5jOjM3OTI6XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbm1tL21lbXBvbGljeS5jOjM3OTM6XHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIE5VTEwpO1xubW0vbWVtcG9saWN5LmM6Mzc5NDpcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbm1tL21lbXBvbGljeS5jLTM3OTUtXG5tbS9tZW1wb2xpY3kuYzozNzk2Olx0aWYgKG9sZF93aV9zdGF0ZSkge1xubW0vbWVtcG9saWN5LmMtMzc5Ny1cdFx0c3luY2hyb25pemVfcmN1KCk7XG5tbS9tZW1wb2xpY3kuYzozNzk4Olx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xubW0vbWVtcG9saWN5LmMtMzc5OS1cdH1cbi0tXG5tbS9tZW1wb2xpY3kuYz0zODAyPXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgd2lfYXV0b19hdHRyID0ge1xubW0vbWVtcG9saWN5LmMtMzgwMy1cdC5hdHRyID0geyAubmFtZSA9IFwmIzM0O2F1dG9cJiMzNDssIC5tb2RlID0gMDY2NCB9LFxubW0vbWVtcG9saWN5LmM6MzgwNDpcdC5zaG93ID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3Nob3csXG5tbS9tZW1wb2xpY3kuYzozODA1Olx0LnN0b3JlID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlLFxubW0vbWVtcG9saWN5LmMtMzgwNi19O1xuLS1cbm1tL21lbXBvbGljeS5jPTM4MDg9c3RhdGljIHZvaWQgd2lfY2xlYW51cCh2b2lkKSB7XG4tLVxubW0vbWVtcG9saWN5LmMtMzgxMC1cdHN5c2ZzX3dpX25vZGVfZGVsZXRlX2FsbCgpO1xubW0vbWVtcG9saWN5LmM6MzgxMTpcdHdpX3N0YXRlX2ZyZWUoKTtcbm1tL21lbXBvbGljeS5jLTM4MTItfVxuLS1cbm1tL21lbXBvbGljeS5jPTM4NzQ9c3RhdGljIGludCB3aV9ub2RlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubW0vbWVtcG9saWN5LmMtMzg5NS1cbm1tL21lbXBvbGljeS5jOjM4OTY6c3RhdGljIGludCBfX2luaXQgYWRkX3dlaWdodGVkX2ludGVybGVhdmVfZ3JvdXAoc3RydWN0IGtvYmplY3QgKm1lbXBvbGljeV9rb2JqKVxubW0vbWVtcG9saWN5LmMtMzg5Ny17XG4tLVxubW0vbWVtcG9saWN5LmMtMzkwNS1cdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFx1MDAyNndpX2dyb3VwLVx1MDAzZXdpX2tvYmosIFx1MDAyNndpX2t0eXBlLCBtZW1wb2xpY3lfa29iaixcbm1tL21lbXBvbGljeS5jOjM5MDY6XHRcdFx0XHQgICBcJiMzNDt3ZWlnaHRlZF9pbnRlcmxlYXZlXCYjMzQ7KTtcbm1tL21lbXBvbGljeS5jLTM5MDctXHRpZiAoZXJyKVxuLS1cbm1tL21lbXBvbGljeS5jPTM5Mzc9c3RhdGljIGludCBfX2luaXQgbWVtcG9saWN5X3N5c2ZzX2luaXQodm9pZClcbi0tXG5tbS9tZW1wb2xpY3kuYy0zOTQ1LVxubW0vbWVtcG9saWN5LmM6Mzk0NjpcdGVyciA9IGFkZF93ZWlnaHRlZF9pbnRlcmxlYXZlX2dyb3VwKG1lbXBvbGljeV9rb2JqKTtcbm1tL21lbXBvbGljeS5jLTM5NDctXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBJIHNlZSB0aGF0IGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsb2NhbGl6ZWQgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBUaGF0IGNvbnRyYXN0cyB3aXRoIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLCB3aGljaCBpcyAqbm90KiBzdGF0aWMsIGFuZCB0aGF0IHNlZW1zIHJlbGV2YW50IHRvIGhvdyBpdCYjMzk7cyBjYWxsZWQuIEhtbSwgaW50ZXJlc3RpbmcuIFRoZSBpbXBsaWNhdGlvbnMgdGhlcmUgYXJlIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgaXRzIHNvdXJjZSBmaWxlIGFuZCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBpbnNpZGUgaXRzIHNvdXJjZSBmaWxlLgoKVGhpbmtpbmcgYmlnZ2VyIHBpY3R1cmUsIHRoZSBtZW1wb2xpY3kgc3lzY2FsbHMgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyAtIGBzZXRfbWVtcG9saWN5YCwgYG1iaW5kYCwgYHNldF9tZW1wb2xpY3lfaG9tZV9ub2RlYCAtIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2UgdG8gY29udHJvbCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBOb3cgSSBuZWVkIHRvIHNlZSBob3cgdGhlc2Ugc3lzY2FsbHMgYWN0dWFsbHkgKndvcmsqIGluIHJlbGF0aW9uIHRvIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgSSYjMzk7bSBsb29raW5nIGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzeXNjYWxsIGRlZmluaXRpb25zIGluIGBtbS9tZW1wb2xpY3kuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORS4qbWJpbmR8U1lTQ0FMTF9ERUZJTkUuKnNldF9tZW1wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0xNzQyPXN0YXRpYyBsb25nIGtlcm5lbF9tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNzYyLVxubW0vbWVtcG9saWN5LmM6MTc2MzpTWVNDQUxMX0RFRklORTQoc2V0X21lbXBvbGljeV9ob21lX25vZGUsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBsZW4sXG5tbS9tZW1wb2xpY3kuYy0xNzY0LVx0XHR1bnNpZ25lZCBsb25nLCBob21lX25vZGUsIHVuc2lnbmVkIGxvbmcsIGZsYWdzKVxuLS1cbm1tL21lbXBvbGljeS5jLTE4MjktXG5tbS9tZW1wb2xpY3kuYzoxODMwOlNZU0NBTExfREVGSU5FNihtYmluZCwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIGxlbixcbm1tL21lbXBvbGljeS5jLTE4MzEtXHRcdHVuc2lnbmVkIGxvbmcsIG1vZGUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICosIG5tYXNrLFxuLS1cbm1tL21lbXBvbGljeS5jPTE4Mzg9c3RhdGljIGxvbmcga2VybmVsX3NldF9tZW1wb2xpY3koaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICpubWFzayxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xODU2LVxubW0vbWVtcG9saWN5LmM6MTg1NzpTWVNDQUxMX0RFRklORTMoc2V0X21lbXBvbGljeSwgaW50LCBtb2RlLCBjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqLCBubWFzayxcbm1tL21lbXBvbGljeS5jLTE4NTgtXHRcdHVuc2lnbmVkIGxvbmcsIG1heG5vZGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBDb2RlIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHRoZSBmdW5jdGlvbmFsaXR5IHdlJiMzOTtyZSBsb29raW5nIGF0LCBzcGVjaWZpY2FsbHkgdGhlIE5VTUEgbWVtcG9saWN5IHdlaWdodGVkIGludGVybGVhdmUgcGFnZSBhbGxvY2F0aW9uLiBJIHN0YXJ0ZWQgYnkgY29uc2lkZXJpbmcgdGhlIGxpa2VseSBzdXNwZWN0czogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGBkb19zZXRfbWVtcG9saWN5YCwgYGtlcm5lbF9zZXRfbWVtcG9saWN5YCwgYW5kIHRoZSBzeXN0ZW0gY2FsbCBkZWZpbml0aW9ucyBsaWtlIGBTWVNDQUxMX0RFRklORTMoc2V0X21lbXBvbGljeSwgLi4uKWAgYW5kIGBTWVNDQUxMX0RFRklORTYobWJpbmQsIC4uLilgIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplZCBhcyByZWxldmFudC4KClRoZSBjb3JlIG9mIHRoaXMgYW5hbHlzaXMgZm9jdXNlcyBvbiBmaW5kaW5nIGdvb2Qgc3ltYm9scy4gSSB0aGVuIHJlbWluZCBteXNlbGYgYWJvdXQgdGhlIGJlc3QgcHJhY3RpY2Ugb2YgcHJlZmVycmluZyBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gaW50ZXJuYWwgaGVscGVycywgYXMgdGhlc2UgaGF2ZSBjbGVhciBzeW1ib2xzIGZvciBhbmFseXNpcy4KCkkmIzM5O20gZm9jdXNlZCBvbiB0aGUgcmVsYXRpb25zaGlwIG9mIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFuZCBpdHMgY2FsbGVycy4gSXQgY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAsIHdoaWNoIGlzIHRoZSBrZXkgZnVuY3Rpb24gaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJsZWF2ZSBhbGdvcml0aG0sIGFzIG1lbnRpb25lZCBpbiB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBhbmFseXNpcy4gQW5kIHRoZW4gSSBoYXZlIGBtZW1wb2xpY3lfc3lzZnNfaW5pdGAgaXMgYWxzbyByZWxldmFudCBiZWNhdXNlIGl0IGlzIGluaXRpYWxpemVkIHVzaW5nIGBfX2luaXRgLgoKSSYjMzk7bSBjaGVja2luZyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCB3aXRoaW4gYG1tL21lbXBvbGljeS5jYCwgYW5kIHRyYWNpbmcgaXRzIGNhbGxzIHRocm91Z2ggYF9feDY0X3N5c19zZXRfbWVtcG9saWN5YCBvciBgZG9fc2V0X21lbXBvbGljeWAsIGFuZCBgbXBvbF9zZXRfbm9kZW1hc2tgLCBldGMuCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgaW5kZWVkIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsLgoKVGhlIGNyaXRpY2FsIHBpZWNlLCBhcyBvdXRsaW5lZCBpbiAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LCBpcyB0aGUgZGl2aXNpb24tYnktemVybyBwcm90ZWN0aW9uIGFkZGVkIGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIHdpdGggdGhlIGNoZWNrIGBpZiAoIXdlaWdodF90b3RhbClgLiBUaGlzIGNoYW5nZSBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIHdlaWdodGVkIGludGVybGVhdmUgcGFnZSBhbGxvY2F0aW9uIGxvZ2ljLCByZWFjaGFibGUgdmlhIHN5c2NhbGxzIGxpa2UgYHNldF9tZW1wb2xpY3koTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFLCAuLi4pYCBjb21iaW5lZCB3aXRoIHZtYWxsb2Mgb3IgYnVsayBwYWdlIGFsbG9jYXRpb25zLiBJIHNlZSB0aGlzIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIHBhcnRpY3VsYXJseSBpZiBOVU1BIGlzIGVuYWJsZWQgaW4gUUVNVS4gVGhhdCYjMzk7cyBnb29kIG5ld3MgZm9yIGZ1enppbmcuCgpGaW5hbGx5LCBJJiMzOTttIGNoZWNraW5nIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uLiBgQ09ORklHX05VTUFgIGlzIGRlZmluZWQgaW4gYG1tL01ha2VmaWxlYCBhbmQgaXQgc2VlbXMgbmVjZXNzYXJ5IGFzIHBlciBgb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1wb2xpY3kub2AuIEkmIzM5O20gYWxzbyBsb29raW5nIHRocm91Z2ggYG1tL0tjb25maWdgIGFuZCBgbW0vbWVtcG9saWN5LmNgIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTc3ND1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtNzc3LXtcbm1tL21lbXBvbGljeS5jOjc3ODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtcG9saWN5LmMtNzc5LVx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbi0tXG5tbS9tZW1wb2xpY3kuYy04MjMtXG5tbS9tZW1wb2xpY3kuYzo4MjQ6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xubW0vbWVtcG9saWN5LmMtODI1LS8qKlxuLS1cbm1tL21lbXBvbGljeS5jPTExNTA9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtMTI1MC1cbm1tL21lbXBvbGljeS5jOjEyNTE6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxubW0vbWVtcG9saWN5LmMtMTI1Mi1zdGF0aWMgYm9vbCBtaWdyYXRlX2ZvbGlvX2FkZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb2xpc3QsXG4tLVxubW0vbWVtcG9saWN5LmM9MjI3Mj1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxuLS1cbm1tL21lbXBvbGljeS5jLTIzMTUtXG5tbS9tZW1wb2xpY3kuYzoyMzE2OiNpZmRlZiBDT05GSUdfSFVHRVRMQkZTXG5tbS9tZW1wb2xpY3kuYy0yMzE3LS8qXG4tLVxubW0vbWVtcG9saWN5LmM9MzI5Nz1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKG1wb2xfZnJlZV9zaGFyZWRfcG9saWN5LCBcJiMzNDtrdm1cJiMzNDspO1xubW0vbWVtcG9saWN5LmMtMzI5OC1cbm1tL21lbXBvbGljeS5jOjMyOTk6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xubW0vbWVtcG9saWN5LmMtMzMwMC1zdGF0aWMgaW50IF9faW5pdGRhdGEgbnVtYWJhbGFuY2luZ19vdmVycmlkZTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNDA4PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG9saWN5X21vZGVzW10gPVxuLS1cbm1tL21lbXBvbGljeS5jLTM0MTgtXG5tbS9tZW1wb2xpY3kuYzozNDE5OiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL21lbXBvbGljeS5jLTM0MjAtLyoqXG4tLVxubW0vbWVtcG9saWN5LmM9MzU2Nj12b2lkIG1wb2xfdG9fc3RyKGNoYXIgKmJ1ZmZlciwgaW50IG1heGxlbiwgc3RydWN0IG1lbXBvbGljeSAqcG9sKVxuLS1cbm1tL21lbXBvbGljeS5jLTM2MjItXG5tbS9tZW1wb2xpY3kuYzozNjIzOiNpZmRlZiBDT05GSUdfU1lTRlNcbm1tL21lbXBvbGljeS5jLTM2MjQtc3RydWN0IGl3X25vZGVfYXR0ciB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDcxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBXZWlnaHRlZCBJbnRlcmxlYXZpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyB3ZSBjb25maWd1cmUgd2VpZ2h0ZWQgaW50ZXJsZWF2aW5nLiBJIHNlZSB0aGF0IHRoZSBzeXNmcyBub2RlcyBmb3Igc2V0dGluZyB0aG9zZSB3ZWlnaHRzLCBhbmQgZXNzZW50aWFsbHkgY3JlYXRpbmcgdGhlIHdlaWdodGVkX2ludGVybGVhdmUgc3RhdGUsIGFyZSBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19TWVNGU2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBib3RoIGBDT05GSUdfTlVNQWAgYW5kIGBDT05GSUdfU1lTRlNgIGFyZSBnb2luZyB0byBiZSBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIGNvbnNpZGVyIHdoZW4gZGVhbGluZyB3aXRoIHN5c2ZzLWJhc2VkIHdlaWdodGVkIGludGVybGVhdmluZyBhbmQgdGhlIHVzZSBvZiBtZW1wb2xpY2llcy4gR290dGEga2VlcCB0aG9zZSB0d28gaW4gbWluZC4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgRm9jdXNTeW1ib2xzIHRvIGJlIGFic29sdXRlbHkgc3VyZTogSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGVpdGhlciBgX194NjRfc3lzX3NldF9tZW1wb2xpY3lgIG9yIGBkb19zZXRfbWVtcG9saWN5YC4gSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IHRob3NlIGFyZSB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uLgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgYGRvX3NldF9tZW1wb2xpY3lgLiBJcyB0aGF0IGZ1bmN0aW9uIHN0YXRpYz8gSXMgaXQgYWNjZXNzaWJsZT8gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBtbS9tZW1wb2xpY3kuY2AgdG8gY2xhcmlmeSB0aGF0IHF1aWNrbHkuIEdvdHRhIGNoZWNrIHRoZSBzb3VyY2UgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc2V0X21lbXBvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTEwNDI9c3RhdGljIGludCBtYmluZF9yYW5nZShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTEwNjktLyogU2V0IHRoZSBwcm9jZXNzIG1lbW9yeSBwb2xpY3kgKi9cbm1tL21lbXBvbGljeS5jOjEwNzA6c3RhdGljIGxvbmcgZG9fc2V0X21lbXBvbGljeSh1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBzaG9ydCBmbGFncyxcbm1tL21lbXBvbGljeS5jLTEwNzEtXHRcdFx0ICAgICBub2RlbWFza190ICpub2Rlcylcbi0tXG5tbS9tZW1wb2xpY3kuYz0xODM4PXN0YXRpYyBsb25nIGtlcm5lbF9zZXRfbWVtcG9saWN5KGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqbm1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtMTg1My1cbm1tL21lbXBvbGljeS5jOjE4NTQ6XHRyZXR1cm4gZG9fc2V0X21lbXBvbGljeShsbW9kZSwgbW9kZV9mbGFncywgXHUwMDI2bm9kZXMpO1xubW0vbWVtcG9saWN5LmMtMTg1NS19XG4tLVxubW0vbWVtcG9saWN5LmM9MzM0Nj12b2lkIF9faW5pdCBudW1hX3BvbGljeV9pbml0KHZvaWQpXG4tLVxubW0vbWVtcG9saWN5LmMtMzM5Mi1cbm1tL21lbXBvbGljeS5jOjMzOTM6XHRpZiAoZG9fc2V0X21lbXBvbGljeShNUE9MX0lOVEVSTEVBVkUsIDAsIFx1MDAyNmludGVybGVhdmVfbm9kZXMpKVxubW0vbWVtcG9saWN5LmMtMzM5NC1cdFx0cHJfZXJyKFwmIzM0OyVzOiBpbnRlcmxlYXZpbmcgZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MzQwMD12b2lkIG51bWFfZGVmYXVsdF9wb2xpY3kodm9pZClcbm1tL21lbXBvbGljeS5jLTM0MDEte1xubW0vbWVtcG9saWN5LmM6MzQwMjpcdGRvX3NldF9tZW1wb2xpY3koTVBPTF9ERUZBVUxULCAwLCBOVUxMKTtcbm1tL21lbXBvbGljeS5jLTM0MDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwNAoJCQkJCQkJb3V0cHV0OiAxMTAKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBQb2xpY3kgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgcG9saWN5IHJlbGF0ZWQgZnVuY3Rpb25zLiBGaXJzdCwgSSBzZWUgdGhhdCBgZG9fc2V0X21lbXBvbGljeWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSwgbGlrZWx5IGludGVybmFsIHRvIHRoaXMgcGFydGljdWxhciBtb2R1bGUgb3IgZmlsZS4gT24gdGhlIG90aGVyIGhhbmQsIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzICpub3QqIGBzdGF0aWNgLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIGEgcHVibGljIGVudHJ5IHBvaW50LCBvciBhdCBsZWFzdCB2aXNpYmxlIG91dHNpZGUgaXRzIGRlZmluaW5nIGNvbXBpbGF0aW9uIHVuaXQuIFNpbWlsYXJseSwgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGFsc28gYW4gQVBJIGZ1bmN0aW9uLiBJdCB0YWtlcyBhIG5vZGUgYW5kIGNvb3JkaW5hdGVzIGFzIGlucHV0LCBpbnRlcmVzdGluZy4KCk5vdywgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9ucy4gVG8gYmUgdGhvcm91Z2gsIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRvIGJlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBlbnRyeSBwb2ludHMuCgpBaGEhIENvbmZpcm1lZC4gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgdGhlIG9uZSBkaXJlY3RseSBjYWxsaW5nIG91ciBtb2RpZmllZCBjb2RlLiBUaGF0JiMzOTtzIHRoZSBvbmUgd2UmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb24uCgpBbHJpZ2h0LCB3aXRoIHRoaXMgaW5mb3JtYXRpb24sIHRpbWUgdG8gYHNldC1yZXN1bHRzYC4gSSB0aGluayB3ZSYjMzk7dmUgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcywgbm93IHdlIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtTWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmV2ZW50cyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB3aGVuIHRoZSB0b3RhbCB3ZWlnaHQgb2YgdGhlIGNhbmRpZGF0ZSBOVU1BIG5vZGVzIGlzIHplcm8uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgY29yZSBOVU1BIG1lbW9yeSBwb2xpY3kgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHdoZW4gdGhlIHRvdGFsIHdlaWdodCBvZiB0aGUgY2FuZGlkYXRlIE5VTUEgbm9kZXMgaXMgemVyby4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIE5VTUEgbWVtb3J5IHBvbGljeSBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgemVybyBjaGVjayBmb3IgJiMzOTt3ZWlnaHRfdG90YWwmIzM5OyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB0byBwcmV2ZW50IGEgZGl2aXNpb24tYnktemVybyBrZXJuZWwgY3Jhc2ggd2hlbiBjYWxjdWxhdGluZyAmIzM5O3JvdW5kcyYjMzk7IGFuZCAmIzM5O2RlbHRhJiMzOTsgKHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbCkuIFRoZSBtZW1vcnkgYnVmZmVyICYjMzk7d2VpZ2h0cyYjMzk7IGlzIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MoKSBhbmQgZnJlZWQgYmVmb3JlIHJldHVybmluZyBvbiB0aGlzIGVycm9yIHBhdGguIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBEaXZpc2lvbi1ieS16ZXJvIGNyYXNoZXMgYXJlIGRldGVjdGVkIHdpdGhvdXQgS01TQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliNjE5YzA1YWQxZTMxNDYyMjZhYzQwMWQ5MjgwZDQ4YjU3NzRhYTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAxOjQ5OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA1MDFlMGI4MGQ3ZGExLi44Yjk3MjhlN2E1OTdlIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMjcwNyw2ICYjNDM7MjcwNywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLAogCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlcykKIAkJd2VpZ2h0X3RvdGFsICYjNDM7PSB3ZWlnaHRzW25vZGVdOwogCiYjNDM7CWlmICghd2VpZ2h0X3RvdGFsKSB7CiYjNDM7CQlrZnJlZSh3ZWlnaHRzKTsKJiM0MzsJCXJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLgogCSAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgYG1tL21lbXBvbGljeS5jYCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB1c2VyJiMzOTtzIHJlcXVlc3QgaXMgY2xlYXI6IGFzc2VzcyB0aGlzIHBhdGNoIGluIGBtbS9tZW1wb2xpY3kuY2AgYW5kIGRldGVybWluZSBpZiBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgd2FycmFudGVkLiBObyBwcm9ibGVtLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE15IGZpcnN0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IGRpc3NlY3QgdGhlIGRpZmYgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aG9zZSBjaGFuZ2VzLiBDb250ZXh0IGlzIGNydWNpYWwuCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBQZWVraW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9tZW1wb2xpY3kuY2AgaXMgbm9uLW5lZ290aWFibGUuIEkgbmVlZCB0byBnZXQgYSBnb29kIHNlbnNlIG9mIHRoZSBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgYXJlYXMgdGhhdCB0aGlzIHBhdGNoIG1pZ2h0IHRvdWNoLiBUaGF0JiMzOTtzIHdoZXJlIGByZWFkLWZpbGVgIHdpbGwgYmUgaW52YWx1YWJsZSDigJMgSSYjMzk7bGwgem9vbSBpbiBhcm91bmQgbGluZSAyNzA3LCBzcGVjaWZpY2FsbHkuIEV4YW1pbmluZyB0aGUgbGluZXMgYmVmb3JlIGFuZCBhZnRlciB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHRoZSBjb2RlICpjaGFuZ2VkKjsgaXQmIzM5O3MgYWJvdXQgdGhlIGNvZGUgdGhhdCYjMzk7cyAqYmVpbmcgdXNlZCogd2l0aGluIHRoZSByZWxldmFudCBhcmVhLgoKTXkgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgZGF0YSByYWNlcywgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCAob3IgZXhwb3NlZCkgYnkgdGhpcyBwYXRjaC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IGFsbG9jYXRpb24sIHBvbGljeSBlbmZvcmNlbWVudCwgYW5kIHBvdGVudGlhbCBjb25jdXJyZW50IGFjY2VzcyBwYXR0ZXJucy4gT25seSBhZnRlciB0aGlzIHRob3JvdWdoIGludmVzdGlnYXRpb24gY2FuIEkgY29uZmlkZW50bHkgbWFrZSBhIGNhbGwgb24gd2hldGhlciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIGFjdHVhbGx5ICpuZWNlc3NhcnkqLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgbmV3IHJpc2tzIG9yIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSBleGlzdGluZyBtZW1vcnkgc2FmZXR5IHByb2ZpbGUgb2YgdGhlIHJlbGV2YW50IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2ODA6XHRcdFx0XHRtZS1cdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xuMjY4MTpcdFx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNjgyOlx0XHRcdH1cbjI2ODM6XHRcdFx0LyogT3RoZXJ3aXNlIHdlIGFkanVzdCByZW1haW5pbmcgcGFnZXMsIGNvbnRpbnVlIGZyb20gdGhlcmUgKi9cbjI2ODQ6XHRcdFx0cmVtX3BhZ2VzIC09IHdlaWdodDtcbjI2ODU6XHRcdH1cbjI2ODY6XHRcdC8qIGNsZWFyIGFjdGl2ZSB3ZWlnaHQgaW4gY2FzZSBvZiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cbjI2ODc6XHRcdG1lLVx1MDAzZWlsX3dlaWdodCA9IDA7XG4yNjg4Olx0XHRwcmV2X25vZGUgPSBub2RlO1xuMjY4OTpcdFxuMjY5MDpcdFx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xuMjY5MTpcdFx0d2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpO1xuMjY5MjpcdFx0aWYgKCF3ZWlnaHRzKVxuMjY5MzpcdFx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuMjY5NDpcdFxuMjY5NTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjY5NjpcdFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xuMjY5NzpcdFx0aWYgKHN0YXRlKSB7XG4yNjk4Olx0XHRcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cdTAwM2Vpd190YWJsZSwgbnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTtcbjI2OTk6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNzAwOlx0XHR9IGVsc2Uge1xuMjcwMTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI3MDI6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KVxuMjcwMzpcdFx0XHRcdHdlaWdodHNbaV0gPSAxO1xuMjcwNDpcdFx0fVxuMjcwNTpcdFxuMjcwNjpcdFx0LyogY2FsY3VsYXRlIHRvdGFsLCBkZXRlY3Qgc3lzdGVtIGRlZmF1bHQgdXNhZ2UgKi9cbjI3MDc6XHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlcylcbjI3MDg6XHRcdFx0d2VpZ2h0X3RvdGFsICYjNDM7PSB3ZWlnaHRzW25vZGVdO1xuMjcwOTpcdFxuMjcxMDpcdFx0aWYgKCF3ZWlnaHRfdG90YWwpIHtcbjI3MTE6XHRcdFx0a2ZyZWUod2VpZ2h0cyk7XG4yNzEyOlx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNzEzOlx0XHR9XG4yNzE0Olx0XG4yNzE1Olx0XHQvKlxuMjcxNjpcdFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG4yNzE3Olx0XHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuMjcxODpcdFx0ICpcbjI3MTk6XHRcdCAqIGlmIChyb3VuZHMgXHUwMDNlIDApIGFuZCAoZGVsdGEgPT0gMCksIHJlc3VtZV9ub2RlIHdpbGwgYWx3YXlzIGJlXG4yNzIwOlx0XHQgKiB0aGUgbm9kZSBmb2xsb3dpbmcgcHJldl9ub2RlIGFuZCBpdHMgd2VpZ2h0LlxuMjcyMTpcdFx0ICovXG4yNzIyOlx0XHRyb3VuZHMgPSByZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWw7XG4yNzIzOlx0XHRkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtcbjI3MjQ6XHRcdHJlc3VtZV9ub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyNTpcdFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodHNbcmVzdW1lX25vZGVdO1xuMjcyNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbm5vZGVzOyBpJiM0MzsmIzQzOykge1xuMjcyNzpcdFx0XHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyODpcdFx0XHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xuMjcyOTpcdFx0XHRub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzO1xuMjczMDpcdFx0XHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSYjMzk7cyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuMjczMTpcdFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuMjczMjpcdFx0XHRcdG5vZGVfcGFnZXMgJiM0Mzs9IHdlaWdodDtcbjI3MzM6XHRcdFx0XHRkZWx0YSAtPSB3ZWlnaHQ7XG4yNzM0Olx0XHRcdH0gZWxzZSBpZiAoZGVsdGEpIHtcbjI3MzU6XHRcdFx0XHQvKiB3aGVuIGRlbHRhIGlzIGRlcGxldGVkLCByZXN1bWUgZnJvbSB0aGF0IG5vZGUgKi9cbjI3MzY6XHRcdFx0XHRub2RlX3BhZ2VzICYjNDM7PSBkZWx0YTtcbjI3Mzc6XHRcdFx0XHRyZXN1bWVfbm9kZSA9IG5vZGU7XG4yNzM4Olx0XHRcdFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodCAtIGRlbHRhO1xuMjczOTpcdFx0XHRcdGRlbHRhID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0OQoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAzNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCwgaXMgZm9jdXNlZCBvbiBhIHBvdGVudGlhbCBkaXZpc2lvbi1ieS16ZXJvIHZ1bG5lcmFiaWxpdHkuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIGNhbGN1bGF0ZXMgYHdlaWdodF90b3RhbGAgYnkgc3VtbWluZyB1cCBgd2VpZ2h0c1tub2RlXWAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGB3ZWlnaHRfdG90YWxgIGV2YWx1YXRlcyB0byB6ZXJvOyB0aGUgc3Vic2VxdWVudCBkaXZpc2lvbiBvcGVyYXRpb25zLCBgcm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO2AgYW5kIGBkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtgLCB0aGVuIHRyaWdnZXIgYSBkaXZpc2lvbi1ieS16ZXJvIGV4Y2VwdGlvbiwgd2hpY2ggaXMgYSB0ZXh0Ym9vayBrZXJuZWwgY3Jhc2ggc2NlbmFyaW8uCgpUaGUgcGF0Y2ggaXRzZWxmIGNsZXZlcmx5IGFkZHJlc3NlcyB0aGlzIGJ5IGFkZGluZyBhIGNydWNpYWwgY2hlY2s6IGBpZiAoIXdlaWdodF90b3RhbClgLiBJZiBgd2VpZ2h0X3RvdGFsYCBpcyB6ZXJvLCBpdCBmcmVlcyB0aGUgYWxsb2NhdGVkIGB3ZWlnaHRzYCBhcnJheSBhbmQgaW1tZWRpYXRlbHkgcmV0dXJucyBgdG90YWxfYWxsb2NhdGVkYC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWZmZWN0aXZlIGZpeC4KCk5vdywgbGV0JiMzOTtzIHRob3JvdWdobHkgZXhhbWluZSB0aGlzIHBhdGNoIGZvciBhbnkgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRmlyc3QsIEkgbm90ZSB0aGF0IGB3ZWlnaHRzYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpYC4gVGhpcyBpcyBrZXk7IGBremFsbG9jYCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24sIHdoaWNoIGlzIGV4Y2VsbGVudC4gU2Vjb25kLCB0aGUgY29kZSBjaGVja3MgaWYgYCF3ZWlnaHRfdG90YWxgLCB0aGVuIGBrZnJlZSh3ZWlnaHRzKWAgaXMgY2FsbGVkLCBhbmQgYHRvdGFsX2FsbG9jYXRlZGAgaXMgcmV0dXJuZWQuIENydWNpYWxseSwgSSBzZWUgbm8gc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgZml4IGRpcmVjdGx5IGFkZHJlc3NlcyBhIGRpdmlkZS1ieS16ZXJvLCBhIHN0YW5kYXJkIGFyaXRobWV0aWMgZXhjZXB0aW9uIGFuZCB0aGVyZWZvcmUsIGEga2VybmVsIG9vcHMgc2l0dWF0aW9uLiBJIGFsc28gc2VlIG5vIGluZGljYXRpb24gdGhhdCB0aGUgS01TQU4tc3BlY2lmaWMgY2hlY2tzIHdvdWxkIGJlIGltcGFjdGVkIGhlcmUuCgpHaXZlbiBhbGwgb2YgdGhpcywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgYXMgaXQgcmVsYXRlcyB0byBLQVNBTiBhcyB3ZWxsLiBEaXZpc2lvbiBieSB6ZXJvIGlzIGEgY2xhc3NpYyBrZXJuZWwgYnVnLiBSZWd1bGFyIHRlc3RpbmcgYW5kIGZ1enppbmcgdHlwaWNhbGx5IGV4cG9zZSBzdWNoIGVycm9ycyB2ZXJ5IHF1aWNrbHkuIE1vcmUgZ2VuZXJhbGx5LCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBwYWRkaW5nIGlzc3VlcyBhcmUgcHJlc2VudCBoZXJlLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGEgYE5lZWRzS01TQU5gIHRhZy4KCkkgYW0gbm93IGdvaW5nIHRvIGNsZWFybHkgd3JpdGUgdGhlIEtNU0FOUmVhc29uaW5nIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB6ZXJvIGNoZWNrIGZvciAmIzM5O3dlaWdodF90b3RhbCYjMzk7IGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHRvIHByZXZlbnQgYSBkaXZpc2lvbi1ieS16ZXJvIGtlcm5lbCBjcmFzaCB3aGVuIGNhbGN1bGF0aW5nICYjMzk7cm91bmRzJiMzOTsgYW5kICYjMzk7ZGVsdGEmIzM5OyAocmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsKS4gVGhlIG1lbW9yeSBidWZmZXIgJiMzOTt3ZWlnaHRzJiMzOTsgaXMgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIGFuZCBmcmVlZCBiZWZvcmUgcmV0dXJuaW5nIG9uIHRoaXMgZXJyb3IgcGF0aC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIERpdmlzaW9uLWJ5LXplcm8gY3Jhc2hlcyBhcmUgZGV0ZWN0ZWQgd2l0aG91dCBLTVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB6ZXJvIGNoZWNrIGZvciAmIzM5O3dlaWdodF90b3RhbCYjMzk7IGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHRvIHByZXZlbnQgYSBkaXZpc2lvbi1ieS16ZXJvIGtlcm5lbCBjcmFzaCB3aGVuIGNhbGN1bGF0aW5nICYjMzk7cm91bmRzJiMzOTsgYW5kICYjMzk7ZGVsdGEmIzM5OyAocmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsKS4gVGhlIG1lbW9yeSBidWZmZXIgJiMzOTt3ZWlnaHRzJiMzOTsgaXMgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIGFuZCBmcmVlZCBiZWZvcmUgcmV0dXJuaW5nIG9uIHRoaXMgZXJyb3IgcGF0aC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIERpdmlzaW9uLWJ5LXplcm8gY3Jhc2hlcyBhcmUgZGV0ZWN0ZWQgd2l0aG91dCBLTVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NDk6MjYuOTQzMzY1MDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjcxMDAzNDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHplcm8gY2hlY2sgZm9yICd3ZWlnaHRfdG90YWwnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHRvIHByZXZlbnQgYSBkaXZpc2lvbi1ieS16ZXJvIGtlcm5lbCBjcmFzaCB3aGVuIGNhbGN1bGF0aW5nICdyb3VuZHMnIGFuZCAnZGVsdGEnIChyZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWwpLiBUaGUgbWVtb3J5IGJ1ZmZlciAnd2VpZ2h0cycgaXMgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIGFuZCBmcmVlZCBiZWZvcmUgcmV0dXJuaW5nIG9uIHRoaXMgZXJyb3IgcGF0aC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIERpdmlzaW9uLWJ5LXplcm8gY3Jhc2hlcyBhcmUgZGV0ZWN0ZWQgd2l0aG91dCBLTVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwcmV2ZW50cyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB3aGVuIHRoZSB0b3RhbCB3ZWlnaHQgb2YgdGhlIGNhbmRpZGF0ZSBOVU1BIG5vZGVzIGlzIHplcm8uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgY29yZSBOVU1BIG1lbW9yeSBwb2xpY3kgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo0OToyNi45NDMzNzEyMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMTExOTcxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDliNjE5YzA1YWQxZTMxNDYyMjZhYzQwMWQ5MjgwZDQ4YjU3NzRhYThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwMTo0OToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXFxuaW5kZXggNTAxZTBiODBkN2RhMS4uOGI5NzI4ZTdhNTk3ZSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xcbisrKyBiL21tL21lbXBvbGljeS5jXFxuQEAgLTI3MDcsNiArMjcwNywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbiBcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXFxuIFxcdFxcdHdlaWdodF90b3RhbCArPSB3ZWlnaHRzW25vZGVdO1xcbiBcXG4rXFx0aWYgKCF3ZWlnaHRfdG90YWwpIHtcXG4rXFx0XFx0a2ZyZWUod2VpZ2h0cyk7XFxuK1xcdFxcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbiBcXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo0OToyOC40NTUwNDgwMzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQwMTUwMjAwMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKCkgd2hlbiB0aGUgdG90YWwgd2VpZ2h0IG9mIHRoZSBjYW5kaWRhdGUgTlVNQSBub2RlcyBpcyB6ZXJvLiBUaGlzIGxvZ2ljIGlzIHBhcnQgb2YgdGhlIGNvcmUgTlVNQSBtZW1vcnkgcG9saWN5IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWI2MTljMDVhZDFlMzE0NjIyNmFjNDAxZDkyODBkNDhiNTc3NGFhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6NDk6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCA1MDFlMGI4MGQ3ZGExLi44Yjk3MjhlN2E1OTdlIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbisrKyBiL21tL21lbXBvbGljeS5jXG5AQCAtMjcwNyw2ICsyNzA3LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4gXHRcdHdlaWdodF90b3RhbCArPSB3ZWlnaHRzW25vZGVdO1xuIFxuK1x0aWYgKCF3ZWlnaHRfdG90YWwpIHtcbitcdFx0a2ZyZWUod2VpZ2h0cyk7XG4rXHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG4gXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NDk6MjguNDU1MDQ5NDI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxNjQ0NDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgdGhlIGBtbS9tZW1wb2xpY3kuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlZCBgbW0vbWVtcG9saWN5LmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwdWxsIHVwIHRoZSBkaWZmIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICpleGFjdGx5KiB3aGF0IHdhcyBjaGFuZ2VkLCBsaW5lIGJ5IGxpbmUuIFRoZW4sIEknbGwgbmVlZCB0byBleHBhbmQgbXkgdmlldyBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyB3ZSBzaG91bGQgemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAyNzA3IGluIHRoYXQgZmlsZS4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGEgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBsb2FkIHRoYXQgc2VjdGlvbiBkaXJlY3RseSBhbmQgaGF2ZSBpdCByZWFkeSBmb3IgZm9jdXNlZCBhbmFseXNpcy4gVGhpcyBzaG91bGQgZ2l2ZSB1cyB0aGUgbmVjZXNzYXJ5IGJ1aWxkaW5nIGJsb2NrcyB0byBkZXRlcm1pbmUgaG93IHRoaXMgcGF0Y2ggYWZmZWN0cyBtZW1vcnkgcG9saWN5IGJlaGF2aW9yIGFuZCB3aGV0aGVyIGl0IGFsaWducyB3aXRoIG91ciBleHBlY3RhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjMwLjI3MTQ5NjU2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODQzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjgwOlxcdFxcdFxcdFxcdG1lLVxcdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xcbjI2ODE6XFx0XFx0XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNjgyOlxcdFxcdFxcdH1cXG4yNjgzOlxcdFxcdFxcdC8qIE90aGVyd2lzZSB3ZSBhZGp1c3QgcmVtYWluaW5nIHBhZ2VzLCBjb250aW51ZSBmcm9tIHRoZXJlICovXFxuMjY4NDpcXHRcXHRcXHRyZW1fcGFnZXMgLT0gd2VpZ2h0O1xcbjI2ODU6XFx0XFx0fVxcbjI2ODY6XFx0XFx0LyogY2xlYXIgYWN0aXZlIHdlaWdodCBpbiBjYXNlIG9mIGFuIGFsbG9jYXRpb24gZmFpbHVyZSAqL1xcbjI2ODc6XFx0XFx0bWUtXFx1MDAzZWlsX3dlaWdodCA9IDA7XFxuMjY4ODpcXHRcXHRwcmV2X25vZGUgPSBub2RlO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHQvKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovXFxuMjY5MTpcXHRcXHR3ZWlnaHRzID0ga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7XFxuMjY5MjpcXHRcXHRpZiAoIXdlaWdodHMpXFxuMjY5MzpcXHRcXHRcXHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xcbjI2OTQ6XFx0XFxuMjY5NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjY5NjpcXHRcXHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XFxuMjY5NzpcXHRcXHRpZiAoc3RhdGUpIHtcXG4yNjk4OlxcdFxcdFxcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XFxuMjY5OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAwOlxcdFxcdH0gZWxzZSB7XFxuMjcwMTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAyOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbjI3MDM6XFx0XFx0XFx0XFx0d2VpZ2h0c1tpXSA9IDE7XFxuMjcwNDpcXHRcXHR9XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXFxuMjcwNzpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXFxuMjcwODpcXHRcXHRcXHR3ZWlnaHRfdG90YWwgKz0gd2VpZ2h0c1tub2RlXTtcXG4yNzA5OlxcdFxcbjI3MTA6XFx0XFx0aWYgKCF3ZWlnaHRfdG90YWwpIHtcXG4yNzExOlxcdFxcdFxcdGtmcmVlKHdlaWdodHMpO1xcbjI3MTI6XFx0XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNzEzOlxcdFxcdH1cXG4yNzE0OlxcdFxcbjI3MTU6XFx0XFx0LypcXG4yNzE2OlxcdFxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbjI3MTc6XFx0XFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4yNzE4OlxcdFxcdCAqXFxuMjcxOTpcXHRcXHQgKiBpZiAocm91bmRzIFxcdTAwM2UgMCkgYW5kIChkZWx0YSA9PSAwKSwgcmVzdW1lX25vZGUgd2lsbCBhbHdheXMgYmVcXG4yNzIwOlxcdFxcdCAqIHRoZSBub2RlIGZvbGxvd2luZyBwcmV2X25vZGUgYW5kIGl0cyB3ZWlnaHQuXFxuMjcyMTpcXHRcXHQgKi9cXG4yNzIyOlxcdFxcdHJvdW5kcyA9IHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbDtcXG4yNzIzOlxcdFxcdGRlbHRhID0gcmVtX3BhZ2VzICUgd2VpZ2h0X3RvdGFsO1xcbjI3MjQ6XFx0XFx0cmVzdW1lX25vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyNTpcXHRcXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0c1tyZXN1bWVfbm9kZV07XFxuMjcyNjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbm5vZGVzOyBpKyspIHtcXG4yNzI3OlxcdFxcdFxcdG5vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyODpcXHRcXHRcXHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xcbjI3Mjk6XFx0XFx0XFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcXG4yNzMwOlxcdFxcdFxcdC8qIElmIGEgZGVsdGEgZXhpc3RzLCBhZGQgdGhpcyBub2RlJ3MgcG9ydGlvbiBvZiB0aGUgZGVsdGEgKi9cXG4yNzMxOlxcdFxcdFxcdGlmIChkZWx0YSBcXHUwMDNlIHdlaWdodCkge1xcbjI3MzI6XFx0XFx0XFx0XFx0bm9kZV9wYWdlcyArPSB3ZWlnaHQ7XFxuMjczMzpcXHRcXHRcXHRcXHRkZWx0YSAtPSB3ZWlnaHQ7XFxuMjczNDpcXHRcXHRcXHR9IGVsc2UgaWYgKGRlbHRhKSB7XFxuMjczNTpcXHRcXHRcXHRcXHQvKiB3aGVuIGRlbHRhIGlzIGRlcGxldGVkLCByZXN1bWUgZnJvbSB0aGF0IG5vZGUgKi9cXG4yNzM2OlxcdFxcdFxcdFxcdG5vZGVfcGFnZXMgKz0gZGVsdGE7XFxuMjczNzpcXHRcXHRcXHRcXHRyZXN1bWVfbm9kZSA9IG5vZGU7XFxuMjczODpcXHRcXHRcXHRcXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0IC0gZGVsdGE7XFxuMjczOTpcXHRcXHRcXHRcXHRkZWx0YSA9IDA7XFxuMjc0MDpcXHRcXHRcXHR9XFxuMjc0MTpcXHRcXHRcXHQvKiBub2RlX3BhZ2VzIGNhbiBiZSAwIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgYW5kIHJvdW5kcyA9PSAwICovXFxuMjc0MjpcXHRcXHRcXHRpZiAoIW5vZGVfcGFnZXMpXFxuMjc0MzpcXHRcXHRcXHRcXHRicmVhaztcXG4yNzQ0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxuMjc0NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbjI3NDY6XFx0XFx0XFx0cGFnZV9hcnJheSArPSBucl9hbGxvY2F0ZWQ7XFxuMjc0NzpcXHRcXHRcXHR0b3RhbF9hbGxvY2F0ZWQgKz0gbnJfYWxsb2NhdGVkO1xcbjI3NDg6XFx0XFx0XFx0aWYgKHRvdGFsX2FsbG9jYXRlZCA9PSBucl9wYWdlcylcXG4yNzQ5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3NTA6XFx0XFx0XFx0cHJldl9ub2RlID0gbm9kZTtcXG4yNzUxOlxcdFxcdH1cXG4yNzUyOlxcdFxcdG1lLVxcdTAwM2VpbF9wcmV2ID0gcmVzdW1lX25vZGU7XFxuMjc1MzpcXHRcXHRtZS1cXHUwMDNlaWxfd2VpZ2h0ID0gcmVzdW1lX3dlaWdodDtcXG4yNzU0OlxcdFxcdGtmcmVlKHdlaWdodHMpO1xcbjI3NTU6XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNzU2OlxcdH1cXG4yNzU3OlxcdFxcbjI3NTg6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXFxuMjc1OTpcXHRcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjMwLjI3MTY0NjU2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzkyNDc1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBgbW0vbWVtcG9saWN5LmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogV2hlcmUgdGhlIGhlY2sgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIGdyYXBoIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFNvLCBsZXQncyBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIHNlZSB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBwb3BzIHVwIGluIHRoZSBjb2RlYmFzZS4gVGhhdCdzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjMyLjE1MDg5NTczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU4MDIwNTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yNjAwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjM0LVxcbm1tL21lbXBvbGljeS5jOjI2MzU6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjM2LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3ODQ9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5OC1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcXG5tbS9tZW1wb2xpY3kuYzoyNzk5OlxcdFxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXFxubW0vbWVtcG9saWN5LmMtMjgwMC1cXHRcXHRcXHRcXHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjMzLjcwODkyNDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTI1Njc1OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTWVtb3J5IEFsbG9jYXRpb24gQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgZGl2aWRlLWJ5LXplcm8gZXJyb3IgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSXQgc2VlbXMgdGhlc2UgZnVuY3Rpb25zLCB3aGVuIGRlYWxpbmcgd2l0aCBgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFYCBtZW1vcnkgcG9saWNpZXMsIGV2ZW50dWFsbHkgY2FsbCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC5cblxuTm93LCBiZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvZGUgd2FzIGNhbGN1bGF0aW5nIGByb3VuZHNgIGFuZCBgZGVsdGFgIGJhc2VkIG9uIGEgZGl2aXNpb24gdXNpbmcgYHdlaWdodF90b3RhbGAuIFRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgYXJpc2VzIHdoZW4gYHdlaWdodF90b3RhbGAgaXMgemVyby4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIG5vZGVzIHNwZWNpZmllZCBpbiB0aGUgYG5vZGVzYCBtYXNrIGFsbCBoYXZlIHplcm8gd2VpZ2h0IGluIGBzdGF0ZS1cdTAwM2Vpd190YWJsZWAsIG9yIHdoZW4gYG5vZGVzYCBpcyBlbXB0eSwgd2hpY2ggd291bGQgbGVhZCB0byBhIGRpdmlkZS1ieS16ZXJvLCBhIGNsYXNzaWMgYnVnLCBhbmQgcG90ZW50aWFsbHkgYSBrZXJuZWwgcGFuaWMuIFRoZSBmaXgsIGEgc2ltcGxlIGNoZWNrOlxuXG5gYGBjXG5cdGlmICghd2VpZ2h0X3RvdGFsKSB7XG5cdFx0a2ZyZWUod2VpZ2h0cyk7XG5cdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcblx0fVxuYGBgXG5cbi4uLmNvcnJlY3RseSBoYW5kbGVzIHRoaXMgZWRnZSBjYXNlIGJ5IHJldHVybmluZyB0aGUgdG90YWwgYWxsb2NhdGVkIHBhZ2VzIGFuZCBmcmVlaW5nIHRoZSBgd2VpZ2h0c2AgYXJyYXksIHdoaWNoIGF2b2lkcyB0aGUgZGl2aXNpb24uXG5cbk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBzY29wZSBvZiB0aGlzIGlzc3VlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEtjb25maWcgb3B0aW9ucyBjb250cm9sIGBtbS9tZW1wb2xpY3kuY2AgYW5kIHNwZWNpZmljYWxseSBgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFYCBvciBOVU1BIGZ1bmN0aW9uYWxpdHkgaW4gZ2VuZXJhbC4gSSdsbCBjaGVjayBgbW0vTWFrZWZpbGVgIGFuZCBgbW0vS2NvbmZpZ2AgdG8gc2VlIHdoYXQgZmxhZ3MgYXJlIHJlbGV2YW50IGFuZCwgdGhlcmVmb3JlLCB3aGljaCBjb25maWd1cmF0aW9ucyB0aGlzIGZpeCBhZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjM3LjIzNDYwMjQxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ5NTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb2xpY3lcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxcdCs9IGh1Z2V0bGJfdm1lbW1hcC5vXFxubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFxcdCs9IG1lbXBvbGljeS5vXFxubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX1NQQVJTRU1FTSlcXHQrPSBzcGFyc2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo0OTozNy4yODMxMDQzOTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDg0NDI2MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgbWVtcG9saWN5Lm8gb24gTlVNQSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19OVU1BYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGBtZW1wb2xpY3kub2AuIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgYnV0IGl0IGRvZXNuJ3QgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0IGVsc2UgaXMgY29ubmVjdGVkIHRvIGBOVU1BYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24/XCIgQXJlIHRoZXJlIG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgdGhhdCBhbHNvIGRlcGVuZCBvbiBpdD8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgaGVyZS5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBzdGVwIGlzIG9idmlvdXM6IEkgbmVlZCB0byBxdWlja2x5IGFuZCBlZmZpY2llbnRseSBleGFtaW5lIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gc2VhcmNoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBjb25maWcgTlVNQWAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBxdWljayBvdmVydmlldyBvZiBhbGwgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGRlcGVuZGVuY2llcywgaGVscGluZyBtZSB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIHBvdGVudGlhbCBkb3duc3RyZWFtIGVmZmVjdHMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGBOVU1BYC4gVGhpcyBnaXZlcyBtZSBhIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgdG9wb2xvZ3kgb2YgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjQyLjc2NzUzMzEyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NzY0NzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlVNQVxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0xNjI2PWNvbmZpZyBIT1RQTFVHX0NQVVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MzMtIyBDb21tb24gTlVNQSBGZWF0dXJlc1xcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNjM0OmNvbmZpZyBOVU1BXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MzUtXFx0Ym9vbCBcXFwiTlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTU0ND1jb25maWcgTlJfQ1BVU1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01NTItXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1NTM6Y29uZmlnIE5VTUFcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTU1NC1cXHRib29sIFxcXCJOVU1BIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZz0yNTk4PWNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTI2MDAtXFxuYXJjaC9taXBzL0tjb25maWc6MjYwMTpjb25maWcgTlVNQVxcbmFyY2gvbWlwcy9LY29uZmlnLTI2MDItXFx0Ym9vbCBcXFwiTlVNQSBTdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9NzU4PWNvbmZpZyBJUlFfQUxMX0NQVVNcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTc2Ni1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo3Njc6Y29uZmlnIE5VTUFcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy03NjgtXFx0Ym9vbCBcXFwiTlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9NDgxPWVuZGNob2ljZVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ4My0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXFxuYXJjaC9yaXNjdi9LY29uZmlnOjQ4NDpjb25maWcgTlVNQVxcbmFyY2gvcmlzY3YvS2NvbmZpZy00ODUtXFx0Ym9vbCBcXFwiTlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz01NDc9Y29uZmlnIEhPVFBMVUdfQ1BVXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01NDktXFxuYXJjaC9zMzkwL0tjb25maWc6NTUwOmNvbmZpZyBOVU1BXFxuYXJjaC9zMzkwL0tjb25maWctNTUxLVxcdGJvb2wgXFxcIk5VTUEgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZz0xMDI9Y29uZmlnIFZTWVNDQUxMXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTE0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxMTU6Y29uZmlnIE5VTUFcXG5hcmNoL3NoL21tL0tjb25maWctMTE2LVxcdGJvb2wgXFxcIk5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MgKE5VTUEpIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWc9MjU0PWNvbmZpZyBHRU5FUklDX0xPQ0tCUkVBS1xcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnLTI1OC1cXG5hcmNoL3NwYXJjL0tjb25maWc6MjU5OmNvbmZpZyBOVU1BXFxuYXJjaC9zcGFyYy9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJOVU1BIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTE0OTI9Y29uZmlnIEFNRF9NRU1fRU5DUllQVFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNTA4LSMgQ29tbW9uIE5VTUEgRmVhdHVyZXNcXG5hcmNoL3g4Ni9LY29uZmlnOjE1MDk6Y29uZmlnIE5VTUFcXG5hcmNoL3g4Ni9LY29uZmlnLTE1MTAtXFx0Ym9vbCBcXFwiTlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjQ0LjgzNTE4NTQ0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ3Mjk3NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIE1lbW9yeSBQb2xpY3kgQWxsb2NhdGlvbiBQYXRoKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBmdW5jdGlvbiwgb3IgYW55dGhpbmcgc2ltaWxhciwgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZGl2ZSBpbnRvIGBtbS9tZW1wb2xpY3kuY2AuIEkgZmlndXJlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIHJlc2lkZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gc2NhbiBhcm91bmQgbGluZSAyNzgwIHRvIHBpbnBvaW50IGhvdyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyBleHBvc2VkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqY2FsbGVkKi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGl0cyBwdXJwb3NlIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgbWVtb3J5IHBvbGljeSBmcmFtZXdvcmsuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo0OTo0Ny4wODI0ODUxMjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3ODA6XFx0ICpcXG4yNzgxOlxcdCAqIEl0IGNhbiBhY2NlbGVyYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGVzcGVjaWFsbHkgaW50ZXJsZWF2aW5nXFxuMjc4MjpcXHQgKiBhbGxvY2F0ZSBtZW1vcnkuXFxuMjc4MzpcXHQgKi9cXG4yNzg0OlxcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG4yNzg1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4yNzg2OlxcdHtcXG4yNzg3OlxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCA9IFxcdTAwMjZkZWZhdWx0X3BvbGljeTtcXG4yNzg4OlxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xcbjI3ODk6XFx0XFx0aW50IG5pZDtcXG4yNzkwOlxcdFxcbjI3OTE6XFx0XFx0aWYgKCFpbl9pbnRlcnJ1cHQoKSBcXHUwMDI2XFx1MDAyNiAhKGdmcCBcXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSlcXG4yNzkyOlxcdFxcdFxcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG4yNzkzOlxcdFxcbjI3OTQ6XFx0XFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXFxuMjc5NTpcXHRcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxcbjI3OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4yNzk3OlxcdFxcbjI3OTg6XFx0XFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxuMjc5OTpcXHRcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbjI4MDA6XFx0XFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbjI4MDE6XFx0XFxuMjgwMjpcXHRcXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxuMjgwMzpcXHRcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXFxuMjgwNDpcXHRcXHRcXHRcXHRcXHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuMjgwNTpcXHRcXG4yODA2OlxcdFxcdG5pZCA9IG51bWFfbm9kZV9pZCgpO1xcbjI4MDc6XFx0XFx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIE5PX0lOVEVSTEVBVkVfSU5ERVgsIFxcdTAwMjZuaWQpO1xcbjI4MDg6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbmlkLCBub2RlbWFzayxcXG4yODA5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuMjgxMDpcXHR9XFxuMjgxMTpcXHRcXG4yODEyOlxcdGludCB2bWFfZHVwX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QpXFxuMjgxMzpcXHR7XFxuMjgxNDpcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wgPSBtcG9sX2R1cChzcmMtXFx1MDAzZXZtX3BvbGljeSk7XFxuMjgxNTpcXHRcXG4yODE2OlxcdFxcdGlmIChJU19FUlIocG9sKSlcXG4yODE3OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBvbCk7XFxuMjgxODpcXHRcXHRkc3QtXFx1MDAzZXZtX3BvbGljeSA9IHBvbDtcXG4yODE5OlxcdFxcdHJldHVybiAwO1xcbjI4MjA6XFx0fVxcbjI4MjE6XFx0XFxuMjgyMjpcXHQvKlxcbjI4MjM6XFx0ICogSWYgbXBvbF9kdXAoKSBzZWVzIGN1cnJlbnQtXFx1MDAzZWNwdXNldCA9PSBjcHVzZXRfYmVpbmdfcmVib3VuZCwgdGhlbiBpdFxcbjI4MjQ6XFx0ICogcmViaW5kcyB0aGUgbWVtcG9saWN5IGl0cyBjb3B5aW5nIGJ5IGNhbGxpbmcgbXBvbF9yZWJpbmRfcG9saWN5KClcXG4yODI1OlxcdCAqIHdpdGggdGhlIG1lbXNfYWxsb3dlZCByZXR1cm5lZCBieSBjcHVzZXRfbWVtc19hbGxvd2VkKCkuICBUaGlzXFxuMjgyNjpcXHQgKiBrZWVwcyBtZW1wb2xpY2llcyBjcHVzZXQgcmVsYXRpdmUgYWZ0ZXIgaXRzIGNwdXNldCBtb3Zlcy4gIFNlZVxcbjI4Mjc6XFx0ICogZnVydGhlciBrZXJuZWwvY3B1c2V0LmMgdXBkYXRlX25vZGVtYXNrKCkuXFxuMjgyODpcXHQgKlxcbjI4Mjk6XFx0ICogY3VycmVudCdzIG1lbXBvbGljeSBtYXkgYmUgcmViaW5kZWQgYnkgdGhlIG90aGVyIHRhc2sodGhlIHRhc2sgdGhhdCBjaGFuZ2VzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjQ3LjA4MjcxNTYyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQzOTM4MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gU3RyYXRlZ2llcyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIHRoZXNlIGJ1bGsgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSB3aGVyZSB0aGVzZSB0aGluZ3MgYXJlICphY3R1YWxseSogY2FsbGVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEdyZXBwaW5nIGlzIHRoZSBvYnZpb3VzIHRvb2wgZm9yIHRoaXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgdGhlIGNvZGUgcGF0aHMgdXNpbmcgdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHRoZW4gcXVpY2tseSBldmFsdWF0ZSB0aGUgcmVzdWx0cyB0byBzZWUgaWYgdGhlIGNhbGxzIGFyZSBtZWFuaW5nZnVsIHRvIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NDk6NDkuMzI2NjU2NDU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxODMyNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc4My0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzg0OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzg1LVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjY5PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3MzYtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3Mzc6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzM4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjUwLjc2ODQ5MzA2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI1OTEzMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdm1hbGxvYyBhbmQgTlVNQSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBmdW5jdGlvbi4gUmlnaHQsIGl0J3MgY2FsbGVkIGJ5IGB2bWFsbG9jYCDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGl0J3MgaGFuZGxpbmcgYHZtX2FyZWFfYWxsb2NfcGFnZXNgIOKAkyBhbmQgdGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgd2hvbGUgcHJvY2VzcyBpcyBoYXBwZW5pbmcgdW5kZXIgTlVNQSwgc28gbWVtcG9saWN5IGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1wb2xpY3kgdXNpbmcgc3lzZnMgb3Igc3lzY2FsbHMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBzZXQgdGhlIHdlaWdodHMgZm9yIGVhY2ggbm9kZS4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVgIG9yIHBlcmhhcHMgYHdpX3N0YXRlYCB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQuIEl0IGhhcyB0byBiZSBpbiB0aGVyZSBzb21ld2hlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUwNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjUyLjY5NDQwODQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ3OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3aV9zdGF0ZXx3ZWlnaHRlZF9pbnRlcmxlYXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi92YWRkci5jPTU3ND1zdHJ1Y3QgZGFtb3NfdmFfbWlncmF0ZV9wcml2YXRlIHtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNTgyLSAqXFxubW0vZGFtb24vdmFkZHIuYzo1ODM6ICogVGhlIGFsZ29yaXRobSB1c2VkIGhlcmUgaXMgc2ltaWxhciB0byB3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZCgpXFxubW0vZGFtb24vdmFkZHIuYy01ODQtICovXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNTI9c3RhdGljIGNvbnN0IGludCB3ZWlnaHRpbmVzcyA9IDMyO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMTU0LS8qXFxubW0vbWVtcG9saWN5LmM6MTU1OiAqIEEgbnVsbCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIGlzIGludGVycHJldGVkIGFzIGhhdmluZyAubW9kZT1cXFwiYXV0b1xcXCIsXFxubW0vbWVtcG9saWN5LmMtMTU2LSAqIGFuZCAuaXdfdGFibGUgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gYXJyYXkgb2YgMXMgd2l0aCBsZW5ndGggbnJfbm9kZV9pZHMuXFxubW0vbWVtcG9saWN5LmMtMTU3LSAqL1xcbm1tL21lbXBvbGljeS5jOjE1ODpzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7XFxubW0vbWVtcG9saWN5LmMtMTU5LVxcdGJvb2wgbW9kZV9hdXRvO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMTYxLX07XFxubW0vbWVtcG9saWN5LmM6MTYyOnN0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBfX3JjdSAqd2lfc3RhdGU7XFxubW0vbWVtcG9saWN5LmMtMTYzLXN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNjUtLypcXG5tbS9tZW1wb2xpY3kuYzoxNjY6ICogd2lfc3RhdGVfbG9jayBwcm90ZWN0cyBib3RoIHdpX3N0YXRlIGFuZCBub2RlX2J3X3RhYmxlLlxcbm1tL21lbXBvbGljeS5jOjE2NzogKiBub2RlX2J3X3RhYmxlIGlzIG9ubHkgdXNlZCBieSB3cml0ZXJzIHRvIHVwZGF0ZSB3aV9zdGF0ZS5cXG5tbS9tZW1wb2xpY3kuYy0xNjgtICovXFxubW0vbWVtcG9saWN5LmM6MTY5OnN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7XFxubW0vbWVtcG9saWN5LmMtMTcwLVxcbm1tL21lbXBvbGljeS5jPTE3MT1zdGF0aWMgdTggZ2V0X2lsX3dlaWdodChpbnQgbm9kZSlcXG5tbS9tZW1wb2xpY3kuYy0xNzIte1xcbm1tL21lbXBvbGljeS5jOjE3MzpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XFxubW0vbWVtcG9saWN5LmMtMTc0LVxcdHU4IHdlaWdodCA9IDE7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNzYtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL21lbXBvbGljeS5jOjE3NzpcXHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XFxubW0vbWVtcG9saWN5LmMtMTc4LVxcdGlmIChzdGF0ZSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE4NS0gKiBDb252ZXJ0IGJhbmR3aWR0aCB2YWx1ZXMgaW50byB3ZWlnaHRlZCBpbnRlcmxlYXZlIHdlaWdodHMuXFxubW0vbWVtcG9saWN5LmM6MTg2OiAqIENhbGwgd2l0aCB3aV9zdGF0ZV9sb2NrLlxcbm1tL21lbXBvbGljeS5jLTE4Ny0gKi9cXG4tLVxcbm1tL21lbXBvbGljeS5jPTIyMT1pbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxcbm1tL21lbXBvbGljeS5jLTIyMi17XFxubW0vbWVtcG9saWN5LmM6MjIzOlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpuZXdfd2lfc3RhdGUsICpvbGRfd2lfc3RhdGUgPSBOVUxMO1xcbm1tL21lbXBvbGljeS5jLTIyNC1cXHR1bnNpZ25lZCBpbnQgKm9sZF9idywgKm5ld19idztcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIzMi1cXG5tbS9tZW1wb2xpY3kuYzoyMzM6XFx0bmV3X3dpX3N0YXRlID0ga21hbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxubW0vbWVtcG9saWN5LmM6MjM0OlxcdGlmICghbmV3X3dpX3N0YXRlKSB7XFxubW0vbWVtcG9saWN5LmMtMjM1LVxcdFxcdGtmcmVlKG5ld19idyk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMzctXFx0fVxcbm1tL21lbXBvbGljeS5jOjIzODpcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZW1vZGVfYXV0byA9IHRydWU7XFxubW0vbWVtcG9saWN5LmMtMjM5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbm1tL21lbXBvbGljeS5jOjI0MDpcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlW2ldID0gMTtcXG5tbS9tZW1wb2xpY3kuYy0yNDEtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNDYtXFx0ICovXFxubW0vbWVtcG9saWN5LmM6MjQ3OlxcdG11dGV4X2xvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbm1tL21lbXBvbGljeS5jLTI0OC1cXG4tLVxcbm1tL21lbXBvbGljeS5jLTI1NC1cXG5tbS9tZW1wb2xpY3kuYzoyNTU6XFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcXG5tbS9tZW1wb2xpY3kuYzoyNTY6XFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKSk7XFxubW0vbWVtcG9saWN5LmM6MjU3OlxcdGlmIChvbGRfd2lfc3RhdGUgXFx1MDAyNlxcdTAwMjYgIW9sZF93aV9zdGF0ZS1cXHUwMDNlbW9kZV9hdXRvKSB7XFxubW0vbWVtcG9saWN5LmM6MjU4OlxcdFxcdC8qIE1hbnVhbCBtb2RlOyBza2lwIHJlZHVjaW5nIHdlaWdodHMgYW5kIHVwZGF0aW5nIHdpX3N0YXRlICovXFxubW0vbWVtcG9saWN5LmM6MjU5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxubW0vbWVtcG9saWN5LmM6MjYwOlxcdFxcdGtmcmVlKG5ld193aV9zdGF0ZSk7XFxubW0vbWVtcG9saWN5LmMtMjYxLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYzLVxcbm1tL21lbXBvbGljeS5jOjI2NDpcXHQvKiBOVUxMIHdpX3N0YXRlIGFzc3VtZXMgYXV0bz10cnVlOyByZWR1Y2Ugd2VpZ2h0cyBhbmQgdXBkYXRlIHdpX3N0YXRlKi9cXG5tbS9tZW1wb2xpY3kuYzoyNjU6XFx0cmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0cyhuZXdfYncsIG5ld193aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGUpO1xcbm1tL21lbXBvbGljeS5jOjI2NjpcXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XFxubW0vbWVtcG9saWN5LmMtMjY3LVxcbm1tL21lbXBvbGljeS5jOjI2ODpcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbm1tL21lbXBvbGljeS5jOjI2OTpcXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxubW0vbWVtcG9saWN5LmMtMjcwLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbm1tL21lbXBvbGljeS5jOjI3MTpcXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jLTI3Mi1cXHR9XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDgzPWJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEwMi1cXG5tbS9tZW1wb2xpY3kuYzoyMTAzOnN0YXRpYyB1bnNpZ25lZCBpbnQgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9ub2RlcyhzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpXFxubW0vbWVtcG9saWN5LmMtMjEwNC17XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMTQ2PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMTY1LVxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jOjIxNjY6XFx0XFx0cmV0dXJuIHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMocG9saWN5KTtcXG5tbS9tZW1wb2xpY3kuYy0yMTY3LVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MjE5Mj1zdGF0aWMgdW5zaWduZWQgaW50IHJlYWRfb25jZV9wb2xpY3lfbm9kZW1hc2soc3RydWN0IG1lbXBvbGljeSAqcG9sLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjIwNS1cXG5tbS9tZW1wb2xpY3kuYzoyMjA2OnN0YXRpYyB1bnNpZ25lZCBpbnQgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQoc3RydWN0IG1lbXBvbGljeSAqcG9sLCBwZ29mZl90IGlseClcXG5tbS9tZW1wb2xpY3kuYy0yMjA3LXtcXG5tbS9tZW1wb2xpY3kuYzoyMjA4OlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcXG5tbS9tZW1wb2xpY3kuYy0yMjA5LVxcdG5vZGVtYXNrX3Qgbm9kZW1hc2s7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMjIxLVxcbm1tL21lbXBvbGljeS5jOjIyMjI6XFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jOjIyMjM6XFx0LyogVW5pbml0aWFsaXplZCB3aV9zdGF0ZSBtZWFucyB3ZSBzaG91bGQgYXNzdW1lIGFsbCB3ZWlnaHRzIGFyZSAxICovXFxubW0vbWVtcG9saWN5LmMtMjIyNC1cXHRpZiAoc3RhdGUpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMjcyPXN0YXRpYyBub2RlbWFza190ICpwb2xpY3lfbm9kZW1hc2soZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMzA3LVxcdFxcdCpuaWQgPSAoaWx4ID09IE5PX0lOVEVSTEVBVkVfSU5ERVgpID9cXG5tbS9tZW1wb2xpY3kuYzoyMzA4OlxcdFxcdFxcdHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMocG9sKSA6XFxubW0vbWVtcG9saWN5LmM6MjMwOTpcXHRcXHRcXHR3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZChwb2wsIGlseCk7XFxubW0vbWVtcG9saWN5LmMtMjMxMC1cXHRcXHRicmVhaztcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI2MDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MzQtXFxubW0vbWVtcG9saWN5LmM6MjYzNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MzYtXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYzOC17XFxubW0vbWVtcG9saWN5LmM6MjYzOTpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XFxubW0vbWVtcG9saWN5LmMtMjY0MC1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2OTUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL21lbXBvbGljeS5jOjI2OTY6XFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jLTI2OTctXFx0aWYgKHN0YXRlKSB7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzg0PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3OTgtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc5OTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI4MDAtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Mjk5ND1pbnQgbXBvbF9taXNwbGFjZWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zMDIxLVxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jOjMwMjI6XFx0XFx0cG9sbmlkID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQocG9sLCBpbHgpO1xcbm1tL21lbXBvbGljeS5jLTMwMjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNjQ4PXN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2NTAte1xcbm1tL21lbXBvbGljeS5jOjM2NTE6XFx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKm5ld193aV9zdGF0ZSwgKm9sZF93aV9zdGF0ZSA9IE5VTEw7XFxubW0vbWVtcG9saWN5LmMtMzY1Mi1cXHRzdHJ1Y3QgaXdfbm9kZV9hdHRyICpub2RlX2F0dHI7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNjYwLVxcbm1tL21lbXBvbGljeS5jOjM2NjE6XFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxubW0vbWVtcG9saWN5LmM6MzY2MjpcXHRpZiAoIW5ld193aV9zdGF0ZSlcXG5tbS9tZW1wb2xpY3kuYy0zNjYzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL21lbXBvbGljeS5jLTM2NjQtXFxubW0vbWVtcG9saWN5LmM6MzY2NTpcXHRtdXRleF9sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG5tbS9tZW1wb2xpY3kuYzozNjY2OlxcdG9sZF93aV9zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod2lfc3RhdGUsXFxubW0vbWVtcG9saWN5LmM6MzY2NzpcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNndpX3N0YXRlX2xvY2spKTtcXG5tbS9tZW1wb2xpY3kuYzozNjY4OlxcdGlmIChvbGRfd2lfc3RhdGUpIHtcXG5tbS9tZW1wb2xpY3kuYzozNjY5OlxcdFxcdG1lbWNweShuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLCBvbGRfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLFxcbm1tL21lbXBvbGljeS5jLTM2NzAtXFx0XFx0XFx0XFx0XFx0bnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2NzItXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXFxubW0vbWVtcG9saWN5LmM6MzY3MzpcXHRcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlW2ldID0gMTtcXG5tbS9tZW1wb2xpY3kuYy0zNjc0LVxcdH1cXG5tbS9tZW1wb2xpY3kuYzozNjc1OlxcdG5ld193aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGVbbm9kZV9hdHRyLVxcdTAwM2VuaWRdID0gd2VpZ2h0O1xcbm1tL21lbXBvbGljeS5jOjM2NzY6XFx0bmV3X3dpX3N0YXRlLVxcdTAwM2Vtb2RlX2F1dG8gPSBmYWxzZTtcXG5tbS9tZW1wb2xpY3kuYy0zNjc3LVxcbm1tL21lbXBvbGljeS5jOjM2Nzg6XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jOjM2Nzk6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG5tbS9tZW1wb2xpY3kuYzozNjgwOlxcdGlmIChvbGRfd2lfc3RhdGUpIHtcXG5tbS9tZW1wb2xpY3kuYy0zNjgxLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbm1tL21lbXBvbGljeS5jOjM2ODI6XFx0XFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcXG5tbS9tZW1wb2xpY3kuYy0zNjgzLVxcdH1cXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2ODYtXFxubW0vbWVtcG9saWN5LmM6MzY4NzpzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9tZW1wb2xpY3kuYy0zNjg4LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbm1tL21lbXBvbGljeS5jLTM2ODkte1xcbm1tL21lbXBvbGljeS5jOjM2OTA6XFx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xcbm1tL21lbXBvbGljeS5jLTM2OTEtXFx0Ym9vbCB3aV9hdXRvID0gdHJ1ZTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2OTMtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL21lbXBvbGljeS5jOjM2OTQ6XFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jLTM2OTUtXFx0aWYgKHN0YXRlKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzcwMS1cXG5tbS9tZW1wb2xpY3kuYzozNzAyOnN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9tZW1wb2xpY3kuYy0zNzAzLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxubW0vbWVtcG9saWN5LmMtMzcwNC17XFxubW0vbWVtcG9saWN5LmM6MzcwNTpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcXG5tbS9tZW1wb2xpY3kuYy0zNzA2LVxcdHVuc2lnbmVkIGludCAqYnc7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNzEyLVxcbm1tL21lbXBvbGljeS5jOjM3MTM6XFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxubW0vbWVtcG9saWN5LmM6MzcxNDpcXHRpZiAoIW5ld193aV9zdGF0ZSlcXG5tbS9tZW1wb2xpY3kuYy0zNzE1LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL21lbXBvbGljeS5jLTM3MTYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXFxubW0vbWVtcG9saWN5LmM6MzcxNzpcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlW2ldID0gMTtcXG5tbS9tZW1wb2xpY3kuYy0zNzE4LVxcbm1tL21lbXBvbGljeS5jOjM3MTk6XFx0bXV0ZXhfbG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxubW0vbWVtcG9saWN5LmM6MzcyMDpcXHRvbGRfd2lfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHdpX3N0YXRlLFxcbm1tL21lbXBvbGljeS5jOjM3MjE6XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKSk7XFxubW0vbWVtcG9saWN5LmMtMzcyMi1cXG5tbS9tZW1wb2xpY3kuYzozNzIzOlxcdGlmIChvbGRfd2lfc3RhdGUgXFx1MDAyNlxcdTAwMjYgaW5wdXQgPT0gb2xkX3dpX3N0YXRlLVxcdTAwM2Vtb2RlX2F1dG8pIHtcXG5tbS9tZW1wb2xpY3kuYzozNzI0OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxubW0vbWVtcG9saWN5LmM6MzcyNTpcXHRcXHRrZnJlZShuZXdfd2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jLTM3MjYtXFx0XFx0cmV0dXJuIGNvdW50O1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMzcyOS1cXHRpZiAoIWlucHV0KSB7XFxubW0vbWVtcG9saWN5LmM6MzczMDpcXHRcXHRpZiAob2xkX3dpX3N0YXRlKVxcbm1tL21lbXBvbGljeS5jOjM3MzE6XFx0XFx0XFx0bWVtY3B5KG5ld193aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGUsIG9sZF93aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGUsXFxubW0vbWVtcG9saWN5LmMtMzczMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTtcXG5tbS9tZW1wb2xpY3kuYzozNzMzOlxcdFxcdGdvdG8gdXBkYXRlX3dpX3N0YXRlO1xcbm1tL21lbXBvbGljeS5jLTM3MzQtXFx0fVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzczNy1cXHRpZiAoIWJ3KSB7XFxubW0vbWVtcG9saWN5LmM6MzczODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbm1tL21lbXBvbGljeS5jOjM3Mzk6XFx0XFx0a2ZyZWUobmV3X3dpX3N0YXRlKTtcXG5tbS9tZW1wb2xpY3kuYy0zNzQwLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMzc0Mi1cXG5tbS9tZW1wb2xpY3kuYzozNzQzOlxcdG5ld193aV9zdGF0ZS1cXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcXG5tbS9tZW1wb2xpY3kuYzozNzQ0OlxcdHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHMoYncsIG5ld193aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGUpO1xcbm1tL21lbXBvbGljeS5jLTM3NDUtXFxubW0vbWVtcG9saWN5LmM6Mzc0Njp1cGRhdGVfd2lfc3RhdGU6XFxubW0vbWVtcG9saWN5LmM6Mzc0NzpcXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XFxubW0vbWVtcG9saWN5LmM6Mzc0ODpcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbm1tL21lbXBvbGljeS5jOjM3NDk6XFx0aWYgKG9sZF93aV9zdGF0ZSkge1xcbm1tL21lbXBvbGljeS5jLTM3NTAtXFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxubW0vbWVtcG9saWN5LmM6Mzc1MTpcXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbm1tL21lbXBvbGljeS5jLTM3NTItXFx0fVxcbi0tXFxubW0vbWVtcG9saWN5LmM9Mzc3OD1zdGF0aWMgdm9pZCBzeXNmc193aV9ub2RlX2RlbGV0ZV9hbGwodm9pZClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM3ODUtXFxubW0vbWVtcG9saWN5LmM6Mzc4NjpzdGF0aWMgdm9pZCB3aV9zdGF0ZV9mcmVlKHZvaWQpXFxubW0vbWVtcG9saWN5LmMtMzc4Ny17XFxubW0vbWVtcG9saWN5LmM6Mzc4ODpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqb2xkX3dpX3N0YXRlO1xcbm1tL21lbXBvbGljeS5jLTM3ODktXFxubW0vbWVtcG9saWN5LmM6Mzc5MDpcXHRtdXRleF9sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG5tbS9tZW1wb2xpY3kuYzozNzkxOlxcdG9sZF93aV9zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod2lfc3RhdGUsXFxubW0vbWVtcG9saWN5LmM6Mzc5MjpcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNndpX3N0YXRlX2xvY2spKTtcXG5tbS9tZW1wb2xpY3kuYzozNzkzOlxcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgTlVMTCk7XFxubW0vbWVtcG9saWN5LmM6Mzc5NDpcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbm1tL21lbXBvbGljeS5jLTM3OTUtXFxubW0vbWVtcG9saWN5LmM6Mzc5NjpcXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxubW0vbWVtcG9saWN5LmMtMzc5Ny1cXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG5tbS9tZW1wb2xpY3kuYzozNzk4OlxcdFxcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XFxubW0vbWVtcG9saWN5LmMtMzc5OS1cXHR9XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zODAyPXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgd2lfYXV0b19hdHRyID0ge1xcbm1tL21lbXBvbGljeS5jLTM4MDMtXFx0LmF0dHIgPSB7IC5uYW1lID0gXFxcImF1dG9cXFwiLCAubW9kZSA9IDA2NjQgfSxcXG5tbS9tZW1wb2xpY3kuYzozODA0OlxcdC5zaG93ID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3Nob3csXFxubW0vbWVtcG9saWN5LmM6MzgwNTpcXHQuc3RvcmUgPSB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUsXFxubW0vbWVtcG9saWN5LmMtMzgwNi19O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MzgwOD1zdGF0aWMgdm9pZCB3aV9jbGVhbnVwKHZvaWQpIHtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM4MTAtXFx0c3lzZnNfd2lfbm9kZV9kZWxldGVfYWxsKCk7XFxubW0vbWVtcG9saWN5LmM6MzgxMTpcXHR3aV9zdGF0ZV9mcmVlKCk7XFxubW0vbWVtcG9saWN5LmMtMzgxMi19XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zODc0PXN0YXRpYyBpbnQgd2lfbm9kZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzg5NS1cXG5tbS9tZW1wb2xpY3kuYzozODk2OnN0YXRpYyBpbnQgX19pbml0IGFkZF93ZWlnaHRlZF9pbnRlcmxlYXZlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICptZW1wb2xpY3lfa29iailcXG5tbS9tZW1wb2xpY3kuYy0zODk3LXtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM5MDUtXFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXFx1MDAyNndpX2dyb3VwLVxcdTAwM2V3aV9rb2JqLCBcXHUwMDI2d2lfa3R5cGUsIG1lbXBvbGljeV9rb2JqLFxcbm1tL21lbXBvbGljeS5jOjM5MDY6XFx0XFx0XFx0XFx0ICAgXFxcIndlaWdodGVkX2ludGVybGVhdmVcXFwiKTtcXG5tbS9tZW1wb2xpY3kuYy0zOTA3LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zOTM3PXN0YXRpYyBpbnQgX19pbml0IG1lbXBvbGljeV9zeXNmc19pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zOTQ1LVxcbm1tL21lbXBvbGljeS5jOjM5NDY6XFx0ZXJyID0gYWRkX3dlaWdodGVkX2ludGVybGVhdmVfZ3JvdXAobWVtcG9saWN5X2tvYmopO1xcbm1tL21lbXBvbGljeS5jLTM5NDctXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NDk6NTIuNzQxODkxODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3MjE4NDgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKk5hdmlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBJIHNlZSB0aGF0IGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdCdzIGxvY2FsaXplZCB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgY29udHJhc3RzIHdpdGggYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIHdoaWNoIGlzICpub3QqIHN0YXRpYywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gaG93IGl0J3MgY2FsbGVkLiBIbW0sIGludGVyZXN0aW5nLiBUaGUgaW1wbGljYXRpb25zIHRoZXJlIGFyZSB0aGF0IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGNhbiBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIGl0cyBzb3VyY2UgZmlsZSBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gaW5zaWRlIGl0cyBzb3VyY2UgZmlsZS5cblxuVGhpbmtpbmcgYmlnZ2VyIHBpY3R1cmUsIHRoZSBtZW1wb2xpY3kgc3lzY2FsbHMgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyAtIGBzZXRfbWVtcG9saWN5YCwgYG1iaW5kYCwgYHNldF9tZW1wb2xpY3lfaG9tZV9ub2RlYCAtIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2UgdG8gY29udHJvbCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBzeXNjYWxscyBhY3R1YWxseSAqd29yayogaW4gcmVsYXRpb24gdG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBJJ20gbG9va2luZyBhdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzeXNjYWxsIGRlZmluaXRpb25zIGluIGBtbS9tZW1wb2xpY3kuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gTGV0J3Mgc2VlIGhvdyB0aGV5IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTc3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NDk6NTUuMzE0MDc4ODE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMwMDc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qbWJpbmR8U1lTQ0FMTF9ERUZJTkUuKnNldF9tZW1wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MTc0Mj1zdGF0aWMgbG9uZyBrZXJuZWxfbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNzYyLVxcbm1tL21lbXBvbGljeS5jOjE3NjM6U1lTQ0FMTF9ERUZJTkU0KHNldF9tZW1wb2xpY3lfaG9tZV9ub2RlLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgdW5zaWduZWQgbG9uZywgbGVuLFxcbm1tL21lbXBvbGljeS5jLTE3NjQtXFx0XFx0dW5zaWduZWQgbG9uZywgaG9tZV9ub2RlLCB1bnNpZ25lZCBsb25nLCBmbGFncylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE4MjktXFxubW0vbWVtcG9saWN5LmM6MTgzMDpTWVNDQUxMX0RFRklORTYobWJpbmQsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBsZW4sXFxubW0vbWVtcG9saWN5LmMtMTgzMS1cXHRcXHR1bnNpZ25lZCBsb25nLCBtb2RlLCBjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqLCBubWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE4Mzg9c3RhdGljIGxvbmcga2VybmVsX3NldF9tZW1wb2xpY3koaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICpubWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE4NTYtXFxubW0vbWVtcG9saWN5LmM6MTg1NzpTWVNDQUxMX0RFRklORTMoc2V0X21lbXBvbGljeSwgaW50LCBtb2RlLCBjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqLCBubWFzayxcXG5tbS9tZW1wb2xpY3kuYy0xODU4LVxcdFxcdHVuc2lnbmVkIGxvbmcsIG1heG5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjQ5OjU1LjQxMTM4NjAzNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3OTgyMTgwMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB0aGUgZnVuY3Rpb25hbGl0eSB3ZSdyZSBsb29raW5nIGF0LCBzcGVjaWZpY2FsbHkgdGhlIE5VTUEgbWVtcG9saWN5IHdlaWdodGVkIGludGVybGVhdmUgcGFnZSBhbGxvY2F0aW9uLiBJIHN0YXJ0ZWQgYnkgY29uc2lkZXJpbmcgdGhlIGxpa2VseSBzdXNwZWN0czogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGBkb19zZXRfbWVtcG9saWN5YCwgYGtlcm5lbF9zZXRfbWVtcG9saWN5YCwgYW5kIHRoZSBzeXN0ZW0gY2FsbCBkZWZpbml0aW9ucyBsaWtlIGBTWVNDQUxMX0RFRklORTMoc2V0X21lbXBvbGljeSwgLi4uKWAgYW5kIGBTWVNDQUxMX0RFRklORTYobWJpbmQsIC4uLilgIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplZCBhcyByZWxldmFudC5cblxuVGhlIGNvcmUgb2YgdGhpcyBhbmFseXNpcyBmb2N1c2VzIG9uIGZpbmRpbmcgZ29vZCBzeW1ib2xzLiBJIHRoZW4gcmVtaW5kIG15c2VsZiBhYm91dCB0aGUgYmVzdCBwcmFjdGljZSBvZiBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBpbnRlcm5hbCBoZWxwZXJzLCBhcyB0aGVzZSBoYXZlIGNsZWFyIHN5bWJvbHMgZm9yIGFuYWx5c2lzLlxuXG5JJ20gZm9jdXNlZCBvbiB0aGUgcmVsYXRpb25zaGlwIG9mIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFuZCBpdHMgY2FsbGVycy4gSXQgY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAsIHdoaWNoIGlzIHRoZSBrZXkgZnVuY3Rpb24gaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJsZWF2ZSBhbGdvcml0aG0sIGFzIG1lbnRpb25lZCBpbiB0aGUgXCJXb3J0aEZ1enppbmdcIiBhbmFseXNpcy4gQW5kIHRoZW4gSSBoYXZlIGBtZW1wb2xpY3lfc3lzZnNfaW5pdGAgaXMgYWxzbyByZWxldmFudCBiZWNhdXNlIGl0IGlzIGluaXRpYWxpemVkIHVzaW5nIGBfX2luaXRgLlxuXG5JJ20gY2hlY2tpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AsIGFuZCB0cmFjaW5nIGl0cyBjYWxscyB0aHJvdWdoIGBfX3g2NF9zeXNfc2V0X21lbXBvbGljeWAgb3IgYGRvX3NldF9tZW1wb2xpY3lgLCBhbmQgYG1wb2xfc2V0X25vZGVtYXNrYCwgZXRjLlxuXG5UaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgaW5kZWVkIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsLlxuXG5UaGUgY3JpdGljYWwgcGllY2UsIGFzIG91dGxpbmVkIGluIFwiV29ydGhGdXp6aW5nXCIsIGlzIHRoZSBkaXZpc2lvbi1ieS16ZXJvIHByb3RlY3Rpb24gYWRkZWQgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgd2l0aCB0aGUgY2hlY2sgYGlmICghd2VpZ2h0X3RvdGFsKWAuIFRoaXMgY2hhbmdlIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwYWdlIGFsbG9jYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMgbGlrZSBgc2V0X21lbXBvbGljeShNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUsIC4uLilgIGNvbWJpbmVkIHdpdGggdm1hbGxvYyBvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIEkgc2VlIHRoaXMgcGF0aCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgcGFydGljdWxhcmx5IGlmIE5VTUEgaXMgZW5hYmxlZCBpbiBRRU1VLiBUaGF0J3MgZ29vZCBuZXdzIGZvciBmdXp6aW5nLlxuXG5GaW5hbGx5LCBJJ20gY2hlY2tpbmcgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24uIGBDT05GSUdfTlVNQWAgaXMgZGVmaW5lZCBpbiBgbW0vTWFrZWZpbGVgIGFuZCBpdCBzZWVtcyBuZWNlc3NhcnkgYXMgcGVyIGBvYmotJChDT05GSUdfTlVNQSkgKz0gbWVtcG9saWN5Lm9gLiBJJ20gYWxzbyBsb29raW5nIHRocm91Z2ggYG1tL0tjb25maWdgIGFuZCBgbW0vbWVtcG9saWN5LmNgIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjUwOjAzLjM5MzU2ODUxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNzQ3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTc3ND1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03Nzcte1xcbm1tL21lbXBvbGljeS5jOjc3ODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL21lbXBvbGljeS5jLTc3OS1cXHRzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTgyMy1cXG5tbS9tZW1wb2xpY3kuYzo4MjQ6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbm1tL21lbXBvbGljeS5jLTgyNS0vKipcXG4tLVxcbm1tL21lbXBvbGljeS5jPTExNTA9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMjUwLVxcbm1tL21lbXBvbGljeS5jOjEyNTE6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxcbm1tL21lbXBvbGljeS5jLTEyNTItc3RhdGljIGJvb2wgbWlncmF0ZV9mb2xpb19hZGQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9saXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MjI3Mj1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjMxNS1cXG5tbS9tZW1wb2xpY3kuYzoyMzE2OiNpZmRlZiBDT05GSUdfSFVHRVRMQkZTXFxubW0vbWVtcG9saWN5LmMtMjMxNy0vKlxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzI5Nz1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKG1wb2xfZnJlZV9zaGFyZWRfcG9saWN5LCBcXFwia3ZtXFxcIik7XFxubW0vbWVtcG9saWN5LmMtMzI5OC1cXG5tbS9tZW1wb2xpY3kuYzozMjk5OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5tbS9tZW1wb2xpY3kuYy0zMzAwLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBudW1hYmFsYW5jaW5nX292ZXJyaWRlO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MzQwOD1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvbGljeV9tb2Rlc1tdID1cXG4tLVxcbm1tL21lbXBvbGljeS5jLTM0MTgtXFxubW0vbWVtcG9saWN5LmM6MzQxOTojaWZkZWYgQ09ORklHX1RNUEZTXFxubW0vbWVtcG9saWN5LmMtMzQyMC0vKipcXG4tLVxcbm1tL21lbXBvbGljeS5jPTM1NjY9dm9pZCBtcG9sX3RvX3N0cihjaGFyICpidWZmZXIsIGludCBtYXhsZW4sIHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2MjItXFxubW0vbWVtcG9saWN5LmM6MzYyMzojaWZkZWYgQ09ORklHX1NZU0ZTXFxubW0vbWVtcG9saWN5LmMtMzYyNC1zdHJ1Y3QgaXdfbm9kZV9hdHRyIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NTA6MDMuNDM4NjQ3OTg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzAxMzMzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIFdlaWdodGVkIEludGVybGVhdmluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyB3ZSBjb25maWd1cmUgd2VpZ2h0ZWQgaW50ZXJsZWF2aW5nLiBJIHNlZSB0aGF0IHRoZSBzeXNmcyBub2RlcyBmb3Igc2V0dGluZyB0aG9zZSB3ZWlnaHRzLCBhbmQgZXNzZW50aWFsbHkgY3JlYXRpbmcgdGhlIHdlaWdodGVkX2ludGVybGVhdmUgc3RhdGUsIGFyZSBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19TWVNGU2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBib3RoIGBDT05GSUdfTlVNQWAgYW5kIGBDT05GSUdfU1lTRlNgIGFyZSBnb2luZyB0byBiZSBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIGNvbnNpZGVyIHdoZW4gZGVhbGluZyB3aXRoIHN5c2ZzLWJhc2VkIHdlaWdodGVkIGludGVybGVhdmluZyBhbmQgdGhlIHVzZSBvZiBtZW1wb2xpY2llcy4gR290dGEga2VlcCB0aG9zZSB0d28gaW4gbWluZC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IEZvY3VzU3ltYm9scyB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IEknbSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGVpdGhlciBgX194NjRfc3lzX3NldF9tZW1wb2xpY3lgIG9yIGBkb19zZXRfbWVtcG9saWN5YC4gSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IHRob3NlIGFyZSB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCBgZG9fc2V0X21lbXBvbGljeWAuIElzIHRoYXQgZnVuY3Rpb24gc3RhdGljPyBJcyBpdCBhY2Nlc3NpYmxlPyBJJ2xsIGhlYWQgb3ZlciB0byBgbW0vbWVtcG9saWN5LmNgIHRvIGNsYXJpZnkgdGhhdCBxdWlja2x5LiBHb3R0YSBjaGVjayB0aGUgc291cmNlIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDcxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjUwOjA1LjkwODc4MzQwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1Njc1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fc2V0X21lbXBvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0xMDQyPXN0YXRpYyBpbnQgbWJpbmRfcmFuZ2Uoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTEwNjktLyogU2V0IHRoZSBwcm9jZXNzIG1lbW9yeSBwb2xpY3kgKi9cXG5tbS9tZW1wb2xpY3kuYzoxMDcwOnN0YXRpYyBsb25nIGRvX3NldF9tZW1wb2xpY3kodW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgc2hvcnQgZmxhZ3MsXFxubW0vbWVtcG9saWN5LmMtMTA3MS1cXHRcXHRcXHQgICAgIG5vZGVtYXNrX3QgKm5vZGVzKVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTgzOD1zdGF0aWMgbG9uZyBrZXJuZWxfc2V0X21lbXBvbGljeShpbnQgbW9kZSwgY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm5tYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTg1My1cXG5tbS9tZW1wb2xpY3kuYzoxODU0OlxcdHJldHVybiBkb19zZXRfbWVtcG9saWN5KGxtb2RlLCBtb2RlX2ZsYWdzLCBcXHUwMDI2bm9kZXMpO1xcbm1tL21lbXBvbGljeS5jLTE4NTUtfVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzM0Nj12b2lkIF9faW5pdCBudW1hX3BvbGljeV9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zMzkyLVxcbm1tL21lbXBvbGljeS5jOjMzOTM6XFx0aWYgKGRvX3NldF9tZW1wb2xpY3koTVBPTF9JTlRFUkxFQVZFLCAwLCBcXHUwMDI2aW50ZXJsZWF2ZV9ub2RlcykpXFxubW0vbWVtcG9saWN5LmMtMzM5NC1cXHRcXHRwcl9lcnIoXFxcIiVzOiBpbnRlcmxlYXZpbmcgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNDAwPXZvaWQgbnVtYV9kZWZhdWx0X3BvbGljeSh2b2lkKVxcbm1tL21lbXBvbGljeS5jLTM0MDEte1xcbm1tL21lbXBvbGljeS5jOjM0MDI6XFx0ZG9fc2V0X21lbXBvbGljeShNUE9MX0RFRkFVTFQsIDAsIE5VTEwpO1xcbm1tL21lbXBvbGljeS5jLTM0MDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo1MDowNS45NTIzNTM5NzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3OTI1Nzk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IFBvbGljeSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgcG9saWN5IHJlbGF0ZWQgZnVuY3Rpb25zLiBGaXJzdCwgSSBzZWUgdGhhdCBgZG9fc2V0X21lbXBvbGljeWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlLCBsaWtlbHkgaW50ZXJuYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBvciBmaWxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgKm5vdCogYHN0YXRpY2AsIHdoaWNoIGltcGxpZXMgaXQncyBpbnRlbmRlZCB0byBiZSBhIHB1YmxpYyBlbnRyeSBwb2ludCwgb3IgYXQgbGVhc3QgdmlzaWJsZSBvdXRzaWRlIGl0cyBkZWZpbmluZyBjb21waWxhdGlvbiB1bml0LiBTaW1pbGFybHksIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgaXMgYWxzbyBub24tc3RhdGljLCBzbyBpdCdzIHByb2JhYmx5IGFsc28gYW4gQVBJIGZ1bmN0aW9uLiBJdCB0YWtlcyBhIG5vZGUgYW5kIGNvb3JkaW5hdGVzIGFzIGlucHV0LCBpbnRlcmVzdGluZy5cblxuTm93LCBJJ20gdGhpbmtpbmcsIGxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgZnVuY3Rpb25zLiBUbyBiZSB0aG9yb3VnaCwgbGV0J3MgcXVpY2tseSBjaGVjayB0byBiZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBlbnRyeSBwb2ludHMuXG5cbkFoYSEgQ29uZmlybWVkLiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyB0aGUgb25lIGRpcmVjdGx5IGNhbGxpbmcgb3VyIG1vZGlmaWVkIGNvZGUuIFRoYXQncyB0aGUgb25lIHdlJ2xsIHdhbnQgdG8gZm9jdXMgb24uXG5cbkFscmlnaHQsIHdpdGggdGhpcyBpbmZvcm1hdGlvbiwgdGltZSB0byBgc2V0LXJlc3VsdHNgLiBJIHRoaW5rIHdlJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMsIG5vdyB3ZSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggY29uZmlkZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMDQsIk91dHB1dFRva2VucyI6MTEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjUwOjA4LjUzMTYxNDE0M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjMxODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHdoZW4gdGhlIHRvdGFsIHdlaWdodCBvZiB0aGUgY2FuZGlkYXRlIE5VTUEgbm9kZXMgaXMgemVyby4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIE5VTUEgbWVtb3J5IHBvbGljeSBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwcmV2ZW50cyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB3aGVuIHRoZSB0b3RhbCB3ZWlnaHQgb2YgdGhlIGNhbmRpZGF0ZSBOVU1BIG5vZGVzIGlzIHplcm8uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgY29yZSBOVU1BIG1lbW9yeSBwb2xpY3kgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo1MDowOC42MDUyNTEzNzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDQ4MTM5NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NTA6MDguNjA1NjYzNzkxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEwNDc3MjI5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB6ZXJvIGNoZWNrIGZvciAnd2VpZ2h0X3RvdGFsJyBpbiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKSB0byBwcmV2ZW50IGEgZGl2aXNpb24tYnktemVybyBrZXJuZWwgY3Jhc2ggd2hlbiBjYWxjdWxhdGluZyAncm91bmRzJyBhbmQgJ2RlbHRhJyAocmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsKS4gVGhlIG1lbW9yeSBidWZmZXIgJ3dlaWdodHMnIGlzIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MoKSBhbmQgZnJlZWQgYmVmb3JlIHJldHVybmluZyBvbiB0aGlzIGVycm9yIHBhdGguIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBEaXZpc2lvbi1ieS16ZXJvIGNyYXNoZXMgYXJlIGRldGVjdGVkIHdpdGhvdXQgS01TQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWI2MTljMDVhZDFlMzE0NjIyNmFjNDAxZDkyODBkNDhiNTc3NGFhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6NDk6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCA1MDFlMGI4MGQ3ZGExLi44Yjk3MjhlN2E1OTdlIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbisrKyBiL21tL21lbXBvbGljeS5jXG5AQCAtMjcwNyw2ICsyNzA3LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4gXHRcdHdlaWdodF90b3RhbCArPSB3ZWlnaHRzW25vZGVdO1xuIFxuK1x0aWYgKCF3ZWlnaHRfdG90YWwpIHtcbitcdFx0a2ZyZWUod2VpZ2h0cyk7XG4rXHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG4gXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NTA6MDguNjA1NjY0NzkxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4MTY4MzUzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgYG1tL21lbXBvbGljeS5jYCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgdXNlcidzIHJlcXVlc3QgaXMgY2xlYXI6IGFzc2VzcyB0aGlzIHBhdGNoIGluIGBtbS9tZW1wb2xpY3kuY2AgYW5kIGRldGVybWluZSBpZiBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgd2FycmFudGVkLiBObyBwcm9ibGVtLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIHRob3JvdWdobHkgZGlzc2VjdCB0aGUgZGlmZiBpdHNlbGYuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0J3MgYmVpbmcgbW9kaWZpZWQgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aG9zZSBjaGFuZ2VzLiBDb250ZXh0IGlzIGNydWNpYWwuXG5cblRoZW4sIEknbGwgbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gUGVla2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vbWVtcG9saWN5LmNgIGlzIG5vbi1uZWdvdGlhYmxlLiBJIG5lZWQgdG8gZ2V0IGEgZ29vZCBzZW5zZSBvZiB0aGUgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGFyZWFzIHRoYXQgdGhpcyBwYXRjaCBtaWdodCB0b3VjaC4gVGhhdCdzIHdoZXJlIGByZWFkLWZpbGVgIHdpbGwgYmUgaW52YWx1YWJsZSDigJMgSSdsbCB6b29tIGluIGFyb3VuZCBsaW5lIDI3MDcsIHNwZWNpZmljYWxseS4gRXhhbWluaW5nIHRoZSBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCdzIGltcGFjdC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IHRoZSBjb2RlICpjaGFuZ2VkKjsgaXQncyBhYm91dCB0aGUgY29kZSB0aGF0J3MgKmJlaW5nIHVzZWQqIHdpdGhpbiB0aGUgcmVsZXZhbnQgYXJlYS5cblxuTXkgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgZGF0YSByYWNlcywgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCAob3IgZXhwb3NlZCkgYnkgdGhpcyBwYXRjaC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiwgcG9saWN5IGVuZm9yY2VtZW50LCBhbmQgcG90ZW50aWFsIGNvbmN1cnJlbnQgYWNjZXNzIHBhdHRlcm5zLiBPbmx5IGFmdGVyIHRoaXMgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbiBjYW4gSSBjb25maWRlbnRseSBtYWtlIGEgY2FsbCBvbiB3aGV0aGVyIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgYWN0dWFsbHkgKm5lY2Vzc2FyeSouIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBuZXcgcmlza3Mgb3Igc2lnbmlmaWNhbnRseSBhbHRlcnMgdGhlIGV4aXN0aW5nIG1lbW9yeSBzYWZldHkgcHJvZmlsZSBvZiB0aGUgcmVsZXZhbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6NTA6MTUuNDIyNTAzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY4MDpcXHRcXHRcXHRcXHRtZS1cXHUwMDNlaWxfd2VpZ2h0IC09IHJlbV9wYWdlcztcXG4yNjgxOlxcdFxcdFxcdFxcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XFxuMjY4MjpcXHRcXHRcXHR9XFxuMjY4MzpcXHRcXHRcXHQvKiBPdGhlcndpc2Ugd2UgYWRqdXN0IHJlbWFpbmluZyBwYWdlcywgY29udGludWUgZnJvbSB0aGVyZSAqL1xcbjI2ODQ6XFx0XFx0XFx0cmVtX3BhZ2VzIC09IHdlaWdodDtcXG4yNjg1OlxcdFxcdH1cXG4yNjg2OlxcdFxcdC8qIGNsZWFyIGFjdGl2ZSB3ZWlnaHQgaW4gY2FzZSBvZiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cXG4yNjg3OlxcdFxcdG1lLVxcdTAwM2VpbF93ZWlnaHQgPSAwO1xcbjI2ODg6XFx0XFx0cHJldl9ub2RlID0gbm9kZTtcXG4yNjg5OlxcdFxcbjI2OTA6XFx0XFx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xcbjI2OTE6XFx0XFx0d2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpO1xcbjI2OTI6XFx0XFx0aWYgKCF3ZWlnaHRzKVxcbjI2OTM6XFx0XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNjk0OlxcdFxcbjI2OTU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI2OTY6XFx0XFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xcbjI2OTc6XFx0XFx0aWYgKHN0YXRlKSB7XFxuMjY5ODpcXHRcXHRcXHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXFx1MDAzZWl3X3RhYmxlLCBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xcbjI2OTk6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjcwMDpcXHRcXHR9IGVsc2Uge1xcbjI3MDE6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjcwMjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbm9kZV9pZHM7IGkrKylcXG4yNzAzOlxcdFxcdFxcdFxcdHdlaWdodHNbaV0gPSAxO1xcbjI3MDQ6XFx0XFx0fVxcbjI3MDU6XFx0XFxuMjcwNjpcXHRcXHQvKiBjYWxjdWxhdGUgdG90YWwsIGRldGVjdCBzeXN0ZW0gZGVmYXVsdCB1c2FnZSAqL1xcbjI3MDc6XFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKVxcbjI3MDg6XFx0XFx0XFx0d2VpZ2h0X3RvdGFsICs9IHdlaWdodHNbbm9kZV07XFxuMjcwOTpcXHRcXG4yNzEwOlxcdFxcdGlmICghd2VpZ2h0X3RvdGFsKSB7XFxuMjcxMTpcXHRcXHRcXHRrZnJlZSh3ZWlnaHRzKTtcXG4yNzEyOlxcdFxcdFxcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XFxuMjcxMzpcXHRcXHR9XFxuMjcxNDpcXHRcXG4yNzE1OlxcdFxcdC8qXFxuMjcxNjpcXHRcXHQgKiBDYWxjdWxhdGUgcm91bmRzL3BhcnRpYWwgcm91bmRzIHRvIG1pbmltaXplIF9fYWxsb2NfcGFnZXNfYnVsayBjYWxscy5cXG4yNzE3OlxcdFxcdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXFxuMjcxODpcXHRcXHQgKlxcbjI3MTk6XFx0XFx0ICogaWYgKHJvdW5kcyBcXHUwMDNlIDApIGFuZCAoZGVsdGEgPT0gMCksIHJlc3VtZV9ub2RlIHdpbGwgYWx3YXlzIGJlXFxuMjcyMDpcXHRcXHQgKiB0aGUgbm9kZSBmb2xsb3dpbmcgcHJldl9ub2RlIGFuZCBpdHMgd2VpZ2h0LlxcbjI3MjE6XFx0XFx0ICovXFxuMjcyMjpcXHRcXHRyb3VuZHMgPSByZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWw7XFxuMjcyMzpcXHRcXHRkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtcXG4yNzI0OlxcdFxcdHJlc3VtZV9ub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xcbjI3MjU6XFx0XFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodHNbcmVzdW1lX25vZGVdO1xcbjI3MjY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ub2RlczsgaSsrKSB7XFxuMjcyNzpcXHRcXHRcXHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xcbjI3Mjg6XFx0XFx0XFx0d2VpZ2h0ID0gd2VpZ2h0c1tub2RlXTtcXG4yNzI5OlxcdFxcdFxcdG5vZGVfcGFnZXMgPSB3ZWlnaHQgKiByb3VuZHM7XFxuMjczMDpcXHRcXHRcXHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSdzIHBvcnRpb24gb2YgdGhlIGRlbHRhICovXFxuMjczMTpcXHRcXHRcXHRpZiAoZGVsdGEgXFx1MDAzZSB3ZWlnaHQpIHtcXG4yNzMyOlxcdFxcdFxcdFxcdG5vZGVfcGFnZXMgKz0gd2VpZ2h0O1xcbjI3MzM6XFx0XFx0XFx0XFx0ZGVsdGEgLT0gd2VpZ2h0O1xcbjI3MzQ6XFx0XFx0XFx0fSBlbHNlIGlmIChkZWx0YSkge1xcbjI3MzU6XFx0XFx0XFx0XFx0Lyogd2hlbiBkZWx0YSBpcyBkZXBsZXRlZCwgcmVzdW1lIGZyb20gdGhhdCBub2RlICovXFxuMjczNjpcXHRcXHRcXHRcXHRub2RlX3BhZ2VzICs9IGRlbHRhO1xcbjI3Mzc6XFx0XFx0XFx0XFx0cmVzdW1lX25vZGUgPSBub2RlO1xcbjI3Mzg6XFx0XFx0XFx0XFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodCAtIGRlbHRhO1xcbjI3Mzk6XFx0XFx0XFx0XFx0ZGVsdGEgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTo1MDoxNS40MjI3MzEwNTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIzMDYzNzE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCwgaXMgZm9jdXNlZCBvbiBhIHBvdGVudGlhbCBkaXZpc2lvbi1ieS16ZXJvIHZ1bG5lcmFiaWxpdHkuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIGNhbGN1bGF0ZXMgYHdlaWdodF90b3RhbGAgYnkgc3VtbWluZyB1cCBgd2VpZ2h0c1tub2RlXWAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGB3ZWlnaHRfdG90YWxgIGV2YWx1YXRlcyB0byB6ZXJvOyB0aGUgc3Vic2VxdWVudCBkaXZpc2lvbiBvcGVyYXRpb25zLCBgcm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO2AgYW5kIGBkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtgLCB0aGVuIHRyaWdnZXIgYSBkaXZpc2lvbi1ieS16ZXJvIGV4Y2VwdGlvbiwgd2hpY2ggaXMgYSB0ZXh0Ym9vayBrZXJuZWwgY3Jhc2ggc2NlbmFyaW8uXG5cblRoZSBwYXRjaCBpdHNlbGYgY2xldmVybHkgYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgY3J1Y2lhbCBjaGVjazogYGlmICghd2VpZ2h0X3RvdGFsKWAuIElmIGB3ZWlnaHRfdG90YWxgIGlzIHplcm8sIGl0IGZyZWVzIHRoZSBhbGxvY2F0ZWQgYHdlaWdodHNgIGFycmF5IGFuZCBpbW1lZGlhdGVseSByZXR1cm5zIGB0b3RhbF9hbGxvY2F0ZWRgLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFuZCBlZmZlY3RpdmUgZml4LlxuXG5Ob3csIGxldCdzIHRob3JvdWdobHkgZXhhbWluZSB0aGlzIHBhdGNoIGZvciBhbnkgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBGaXJzdCwgSSBub3RlIHRoYXQgYHdlaWdodHNgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTClgLiBUaGlzIGlzIGtleTsgYGt6YWxsb2NgIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiwgd2hpY2ggaXMgZXhjZWxsZW50LiBTZWNvbmQsIHRoZSBjb2RlIGNoZWNrcyBpZiBgIXdlaWdodF90b3RhbGAsIHRoZW4gYGtmcmVlKHdlaWdodHMpYCBpcyBjYWxsZWQsIGFuZCBgdG90YWxfYWxsb2NhdGVkYCBpcyByZXR1cm5lZC4gQ3J1Y2lhbGx5LCBJIHNlZSBubyBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBmaXggZGlyZWN0bHkgYWRkcmVzc2VzIGEgZGl2aWRlLWJ5LXplcm8sIGEgc3RhbmRhcmQgYXJpdGhtZXRpYyBleGNlcHRpb24gYW5kIHRoZXJlZm9yZSwgYSBrZXJuZWwgb29wcyBzaXR1YXRpb24uIEkgYWxzbyBzZWUgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBLTVNBTi1zcGVjaWZpYyBjaGVja3Mgd291bGQgYmUgaW1wYWN0ZWQgaGVyZS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGlzIGFzIGl0IHJlbGF0ZXMgdG8gS0FTQU4gYXMgd2VsbC4gRGl2aXNpb24gYnkgemVybyBpcyBhIGNsYXNzaWMga2VybmVsIGJ1Zy4gUmVndWxhciB0ZXN0aW5nIGFuZCBmdXp6aW5nIHR5cGljYWxseSBleHBvc2Ugc3VjaCBlcnJvcnMgdmVyeSBxdWlja2x5LiBNb3JlIGdlbmVyYWxseSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgcGFkZGluZyBpc3N1ZXMgYXJlIHByZXNlbnQgaGVyZS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IHdhcnJhbnQgYSBgTmVlZHNLTVNBTmAgdGFnLlxuXG5JIGFtIG5vdyBnb2luZyB0byBjbGVhcmx5IHdyaXRlIHRoZSBLTVNBTlJlYXNvbmluZyBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ5LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjUwOjE5LjY1MzM3MTA1MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHplcm8gY2hlY2sgZm9yICd3ZWlnaHRfdG90YWwnIGluIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpIHRvIHByZXZlbnQgYSBkaXZpc2lvbi1ieS16ZXJvIGtlcm5lbCBjcmFzaCB3aGVuIGNhbGN1bGF0aW5nICdyb3VuZHMnIGFuZCAnZGVsdGEnIChyZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWwpLiBUaGUgbWVtb3J5IGJ1ZmZlciAnd2VpZ2h0cycgaXMgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIGFuZCBmcmVlZCBiZWZvcmUgcmV0dXJuaW5nIG9uIHRoaXMgZXJyb3IgcGF0aC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIERpdmlzaW9uLWJ5LXplcm8gY3Jhc2hlcyBhcmUgZGV0ZWN0ZWQgd2l0aG91dCBLTVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgemVybyBjaGVjayBmb3IgJ3dlaWdodF90b3RhbCcgaW4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKCkgdG8gcHJldmVudCBhIGRpdmlzaW9uLWJ5LXplcm8ga2VybmVsIGNyYXNoIHdoZW4gY2FsY3VsYXRpbmcgJ3JvdW5kcycgYW5kICdkZWx0YScgKHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbCkuIFRoZSBtZW1vcnkgYnVmZmVyICd3ZWlnaHRzJyBpcyBhbGxvY2F0ZWQgd2l0aCBremFsbG9jKCkgYW5kIGZyZWVkIGJlZm9yZSByZXR1cm5pbmcgb24gdGhpcyBlcnJvciBwYXRoLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gRGl2aXNpb24tYnktemVybyBjcmFzaGVzIGFyZSBkZXRlY3RlZCB3aXRob3V0IEtNU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxxr2c[1] Phase: Succeeded StartedAt: 2026-09-03 01:50:30 +0000 UTC FinishedAt: 2026-09-03 01:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 01:50:30 +0000 UTC FinishedAt: 2026-09-03 01:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2] Phase: Succeeded StartedAt: 2026-09-03 01:50:30 +0000 UTC FinishedAt: 2026-09-03 05:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 01:50:30 +0000 UTC FinishedAt: 2026-09-03 05:33:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 01:50:30 +0000 UTC FinishedAt: 2026-09-03 01:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 01:50:30 +0000 UTC FinishedAt: 2026-09-03 01:50:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxxr2c/series-workflowxxr2c-convert-artifact-2433307176/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 01:50:41 +0000 UTC FinishedAt: 2026-09-03 02:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 01:50:41 +0000 UTC FinishedAt: 2026-09-03 02:10:52 +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:*c03fae43-98c4-4e55-bbaf-675e3c00c6ac,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-workflowxxr2c/series-workflowxxr2c-convert-artifact-2433307176/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": "dc5d6235-7443-487e-a758-2f3bd80bb66f", "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-workflowxxr2c/series-workflowxxr2c-build-action-4259956894/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 01:50:41 +0000 UTC FinishedAt: 2026-09-03 02:10:42 +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:*c03fae43-98c4-4e55-bbaf-675e3c00c6ac,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-workflowxxr2c/series-workflowxxr2c-convert-artifact-2433307176/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": "dc5d6235-7443-487e-a758-2f3bd80bb66f", "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-workflowxxr2c/series-workflowxxr2c-build-action-4259956894/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 02:10:52 +0000 UTC FinishedAt: 2026-09-03 02:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 02:10:52 +0000 UTC FinishedAt: 2026-09-03 02:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 02:10:52 +0000 UTC FinishedAt: 2026-09-03 02:11:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 02:10:52 +0000 UTC FinishedAt: 2026-09-03 02:10:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxxr2c/series-workflowxxr2c-convert-artifact-176354831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 02:11:02 +0000 UTC FinishedAt: 2026-09-03 02:12:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 02:11:02 +0000 UTC FinishedAt: 2026-09-03 02:12:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc5d6235-7443-487e-a758-2f3bd80bb66f,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-workflowxxr2c/series-workflowxxr2c-build-action-4259956894/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-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 02:12:54 +0000 UTC FinishedAt: 2026-09-03 02:12:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 02:12:54 +0000 UTC FinishedAt: 2026-09-03 02:12:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 02:12:54 +0000 UTC FinishedAt: 2026-09-03 02:29:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 02:12:54 +0000 UTC FinishedAt: 2026-09-03 02:29:19 +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:*c03fae43-98c4-4e55-bbaf-675e3c00c6ac,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-workflowxxr2c/series-workflowxxr2c-convert-artifact-176354831/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": "c8d3e81c-1f3f-45d2-9d36-bd70506f047d", "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-workflowxxr2c/series-workflowxxr2c-build-action-2658916131/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 02:12:54 +0000 UTC FinishedAt: 2026-09-03 02:29:09 +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:*c03fae43-98c4-4e55-bbaf-675e3c00c6ac,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-workflowxxr2c/series-workflowxxr2c-convert-artifact-176354831/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": "c8d3e81c-1f3f-45d2-9d36-bd70506f047d", "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-workflowxxr2c/series-workflowxxr2c-build-action-2658916131/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 02:29:19 +0000 UTC FinishedAt: 2026-09-03 02:29:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 02:29:19 +0000 UTC FinishedAt: 2026-09-03 02:29:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 02:29:19 +0000 UTC FinishedAt: 2026-09-03 02:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 02:29:19 +0000 UTC FinishedAt: 2026-09-03 02:31:04 +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:*c8d3e81c-1f3f-45d2-9d36-bd70506f047d,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-workflowxxr2c/series-workflowxxr2c-build-action-2658916131/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-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 02:31:14 +0000 UTC FinishedAt: 2026-09-03 05:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 02:31:14 +0000 UTC FinishedAt: 2026-09-03 05:33:46 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},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:*dc5d6235-7443-487e-a758-2f3bd80bb66f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c8d3e81c-1f3f-45d2-9d36-bd70506f047d,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-workflowxxr2c/series-workflowxxr2c-build-action-4259956894/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-workflowxxr2c/series-workflowxxr2c-build-action-2658916131/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 02:31:14 +0000 UTC FinishedAt: 2026-09-03 02:31:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 02:31:14 +0000 UTC FinishedAt: 2026-09-03 02:31:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},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-workflowxxr2c/series-workflowxxr2c-convert-artifact-3084621256/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 02:31:14 +0000 UTC FinishedAt: 2026-09-03 02:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 02:31:14 +0000 UTC FinishedAt: 2026-09-03 02:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 02:31:14 +0000 UTC FinishedAt: 2026-09-03 02:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 02:31:24 +0000 UTC FinishedAt: 2026-09-03 05:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxr2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","SYSFS"],"series_id":"e48a2be8-b161-4370-84d2-4c37fd5436c3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 02:31:24 +0000 UTC FinishedAt: 2026-09-03 05:33:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc5d6235-7443-487e-a758-2f3bd80bb66f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c8d3e81c-1f3f-45d2-9d36-bd70506f047d,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-workflowxxr2c/series-workflowxxr2c-build-action-4259956894/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-workflowxxr2c/series-workflowxxr2c-build-action-2658916131/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-workflowxxr2c/series-workflowxxr2c-convert-artifact-3084621256/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,}