Name: series-workflowkd7z9 Phase: Succeeded StartedAt: 2026-08-15 16:36:24 +0000 UTC FinishedAt: 2026-08-15 18:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[0] Phase: Succeeded StartedAt: 2026-08-15 16:36:24 +0000 UTC FinishedAt: 2026-08-15 16:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[0].run-triage Phase: Succeeded StartedAt: 2026-08-15 16:36:24 +0000 UTC FinishedAt: 2026-08-15 16:40:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD" ], "series_id": "3fc6f63b-2751-4e6a-8edf-93cd953867a5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "svc_addsock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdmNfYWRkc29jayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW1wbGUgY2hlY2sgdG8gcHJldmVudCBhZGRpbmcgYSBzb2NrZXQgdG8gYSBzdW5ycGMgc2VydmljZSBpZiBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldC4gVGhpcyBpcyBhIGxvZ2ljIGZpeCB0byBwcmV2ZW50IHN0YXRlIGNvcnJ1cHRpb24gb3IgcmVzb3VyY2UgbGVha3MgKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1hZGQpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUuIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBgc3ZjX2FkZHNvY2tgIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgdG8gcmV0dXJuIGAtRUJVU1lgIGlmIGBzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGFgIGlzIGFscmVhZHkgc2V0LiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgd3JpdGluZyB0byBuZnNkIGNvbnRyb2wgZmlsZXMgKGUuZy4sIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCkgYW5kIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2M0YmY2ZGIxNWM1ZTU0ZDAxYTY2NTZmMjJlMjQyMDlmYTE1NWVkZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDE2OjM4OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbkBAIC0xNTQxLDYgJiM0MzsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXG4gXHRlcnIgPSAtRUlTQ09OTjtcbiBcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdGVyciA9IC1FQlVTWTtcbiYjNDM7XHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXHRlcnIgPSAtRU5PRU5UO1xuIFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4gXHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBzdmNfYWRkc29ja2AgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCB0byByZXR1cm4gYC1FQlVTWWAgaWYgYHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB3cml0aW5nIHRvIG5mc2QgY29udHJvbCBmaWxlcyAoZS5nLiwgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYzRiZjZkYjE1YzVlNTRkMDFhNjY1NmYyMmUyNDIwOWZhMTU1ZWRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTY6Mzg6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xNTQxLDYgJiM0MzsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsCiAJZXJyID0gLUVJU0NPTk47CiAJaWYgKHNvLSZndDtzdGF0ZSAmZ3Q7IFNTX1VOQ09OTkVDVEVEKQogCQlnb3RvIG91dDsKJiM0MzsJZXJyID0gLUVCVVNZOwomIzQzOwlpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpCiYjNDM7CQlnb3RvIG91dDsKIAllcnIgPSAtRU5PRU5UOwogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQogCQlnb3RvIG91dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmV0L3N1bnJwYy9zdmNzb2NrLmMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBzdmNfYWRkc29ja2AgZnVuY3Rpb24gd2l0aGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyB0aGV5JiMzOTt2ZSBpbnNlcnRlZCBhIGNoZWNrOgoKYGBgYwoJZXJyID0gLUVCVVNZOwoJaWYgKHNvLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhKQoJCWdvdG8gb3V0OwpgYGAKClJpZ2h0IGF3YXksIG15IGV4cGVydCBtaW5kIGlzIHBhcnNpbmcgdGhpcy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJldmVudCBhZGRpbmcgYSBzb2NrZXQgKHByZXN1bWFibHkgYSBuZXcgc2VydmljZSBzb2NrZXQgcmVwcmVzZW50ZWQgYnkgYHNvYCkgaWYgaXRzIHVuZGVybHlpbmcgYHNrYCAoc29ja2V0IGtlcm5lbCkgYWxyZWFkeSBoYXMgYHNrX3VzZXJfZGF0YWAgc2V0LiBUaGUgaW50ZW50IGlzIGFsbW9zdCBjZXJ0YWlubHkgdG8gYXZvaWQgYSBjb25mbGljdCwgbGlrZWx5IHByZXZlbnRpbmcgZG91YmxlLXJlZ2lzdHJhdGlvbiBvciBtYW5hZ2luZyByZXNvdXJjZSBjb250ZW50aW9uLiBBIGJ1c3kgZXJyb3IgKGAtRUJVU1lgKSBzdWdnZXN0cyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgcHJldmVudGluZyByZXNvdXJjZSBjb250ZW50aW9uLiBUaGUgYGdvdG8gb3V0YCBpbW1lZGlhdGVseSBza2lwcyB0byB0aGUgZW5kLCByZXR1cm5pbmcgdGhlIGVycm9yLiBUaGlzIGlzIGNvbW1vbiB0byByZWxlYXNlIGFueSByZXNvdXJjZXMgdGhhdCB3ZXJlIGluaXRpYWxpemVkIHByaW9yIHRvIHRoZSB0ZXN0LgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjb25kaXRpb24gaXMgYmVpbmcgYWRkZWQuIFdoYXQgc2NlbmFyaW8gdHJpZ2dlcnMgYSBub24tTlVMTCBgc2tfdXNlcl9kYXRhYD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBhbGxvd2luZyBtdWx0aXBsZSBzZXJ2aWNlcyBvbiB0aGUgc2FtZSBzb2NrZXQga2VybmVsPyBXaGF0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3MgYXJlIGJlaW5nIGFkZHJlc3NlZD8gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhpcyBgbmV0L3N1bnJwY2AgbW9kdWxlIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2ggYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBJIG5lZWQgdG8ga25vdyB3aGVyZSBgc2tfdXNlcl9kYXRhYCBpcyBiZWluZyB1c2VkIGFuZCBpbml0aWFsaXplZC4gSSYjMzk7bGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gYHN2Y19hZGRzb2NrYCBpdHNlbGYsIHRoZW4gbG9vayBmb3IgYW55dGhpbmcgdGhhdCBzZXRzIGBza191c2VyX2RhdGFgIG9uIHRoYXQgc29ja2V0LiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlOyB0aGUgaW1wbGljYXRpb25zIG9mIHNraXBwaW5nIHRoZSBhZGRpdGlvbiBiYXNlZCBvbiB0aGlzIGNoZWNrIHJlcXVpcmUgYSBjYXJlZnVsIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfYWRkc29jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jPTE0Mzk9c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwNi0vKipcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MDc6ICogc3ZjX2FkZHNvY2sgLSBhZGQgYSBsaXN0ZW5lciBzb2NrZXQgdG8gYW4gUlBDIHNlcnZpY2Vcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDgtICogQHNlcnY6IHBvaW50ZXIgdG8gUlBDIHNlcnZpY2UgdG8gd2hpY2ggdG8gYWRkIGEgbmV3IGxpc3RlbmVyXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUxOC0gKi9cbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MTk6aW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTIwLVx0XHRjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTU2NS19XG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTY2OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHN2Y19hZGRzb2NrYCBVc2FnZSoqCgpPa2F5LCBzbyBgc3ZjX2FkZHNvY2tgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIHVzZWQgZXh0ZXJuYWxseSwgcG90ZW50aWFsbHkgYnkgb3RoZXIgbW9kdWxlcyBvciBldmVuIHRoZSBtYWluIGFwcGxpY2F0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbSwgYW5kIHRoYXQgbWVhbnMgdHJhY2luZyBpdHMgY2FsbCBzaXRlcy4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyAqY2FsbGVkKiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHN5c3RlbSBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMg4oCTIHByb2JhYmx5IGBubWAgdG8gY29uZmlybSBpdHMgc3ltYm9sIHZpc2liaWxpdHkgaWYgbmVlZGVkLCB0aGVuIGEgcXVpY2sgYGdyZXBgIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGBvYmpkdW1wIC10YCBvbiB0aGUgcmVsZXZhbnQgYmluYXJpZXMgb3IgbGlicmFyaWVzLCBvciBhIHNvdXJjZSBjb2RlIHNlYXJjaCBpZiBhdmFpbGFibGUsIHRvIGlkZW50aWZ5IGFsbCBjYWxsZXJzLiBPbmNlIEkgaGF2ZSB0aGUgY2FsbCBzaXRlcyBJIGNhbiBiZWdpbiBhIGRlZXBlciBhbmFseXNpcyBvZiB0aGUgcmVsYXRlZCBjb2RlIGFuZCBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIEkgc2hvdWxkIGZvY3VzIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2Y19hZGRzb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mc2QvbmZzY3RsLmM9NzI1PXN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkZmQoY2hhciAqYnVmLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuLS1cbmZzL25mc2QvbmZzY3RsLmMtNzQxLVx0c2VydiA9IG5uLVx1MDAzZW5mc2Rfc2VydjtcbmZzL25mc2QvbmZzY3RsLmM6NzQyOlx0ZXJyID0gc3ZjX2FkZHNvY2soc2VydiwgbmV0LCBmZCwgYnVmLCBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQsIGNyZWQpO1xuZnMvbmZzZC9uZnNjdGwuYy03NDMtXG4tLVxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oPTY1PXZvaWRcdFx0c3ZjX3NlbmQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCk7XG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmg6NjY6aW50XHRcdHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oLTY3LVx0XHRcdCAgICBjb25zdCBpbnQgZmQsIGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTE0Mzk9c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwNi0vKipcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MDc6ICogc3ZjX2FkZHNvY2sgLSBhZGQgYSBsaXN0ZW5lciBzb2NrZXQgdG8gYW4gUlBDIHNlcnZpY2Vcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDgtICogQHNlcnY6IHBvaW50ZXIgdG8gUlBDIHNlcnZpY2UgdG8gd2hpY2ggdG8gYWRkIGEgbmV3IGxpc3RlbmVyXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUxOC0gKi9cbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MTk6aW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTIwLVx0XHRjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTU2NS19XG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTY2OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIE5GU2QgQ29udHJvbCBGaWxlczogQSBQcm9taXNpbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBwcm9taXNpbmcgZnV6emluZyB0YXJnZXQ6IHRoZSBgX193cml0ZV9wb3J0c19hZGRmZGAgZnVuY3Rpb24gaW4gYGZzL25mc2QvbmZzY3RsLmNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHJlYWNoYWJsZSBieSB3cml0aW5nIHRvIE5GU2QgY29udHJvbCBmaWxlcywgbGlrZSBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAsIHJlYWxseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoYXQmIzM5O3MgYSBkaXJlY3QsIGFjY2Vzc2libGUgYXR0YWNrIHN1cmZhY2UuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhbGxvY2F0aW5nIHNvbWUgcmVzb3VyY2VzIHRvd2FyZHMgZnV6emluZy4KCk15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHRob3JvdWdobHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVjZXNzYXJ5IHRvIGVuYWJsZSBib3RoIGBmcy9uZnNkL25mc2N0bC5jYCBhbmQgYWxzbyBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgIHRvIGJlIGNlcnRhaW4gSSBoYXZlIHRoZSBjb3JyZWN0IGVudmlyb25tZW50IGZvciB0cmlnZ2VyaW5nIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBpbnZvbHZlZCwgdG8ga25vdyBpZiBJIGNhbiBlbmFibGUgdGhpcyBwYXRoIGVhc2lseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnNjdGwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mc2QvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9NYWtlZmlsZT0xMT1uZnNkLXlcdFx0XHQmIzQzOz0gdHJhY2Uub1xuZnMvbmZzZC9NYWtlZmlsZS0xMi1cbmZzL25mc2QvTWFrZWZpbGU6MTM6bmZzZC15IFx0XHRcdCYjNDM7PSBuZnNzdmMubyBuZnNjdGwubyBuZnNmaC5vIHZmcy5vIFxcXG5mcy9uZnNkL01ha2VmaWxlLTE0LVx0XHRcdCAgIGV4cG9ydC5vIGF1dGgubyBsb2NrZC5vIG5mc2NhY2hlLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDEzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIGEgRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIGBDT05GSUdfTkZTRGAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGhlcmUuIEdvdHRhIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBjb21lcyBpbnRvIHBsYXkuIE15IG5leHQgc3RlcCBpcyBnb2luZyB0byBiZSBkaWdnaW5nIGludG8gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBjb25uZWN0aW9uLCBnaXZlbiB0aGUgY29udGV4dC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2VybmVsIGxvZ2ljIHRoYXQgYWN0dWFsbHkgdXNlcyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIGEgY29uZGl0aW9uYWwgaW1wb3J0IHRoYXQgcmVsaWVzIG9uIGl0LiBIb3BlZnVsbHksIHRoaXMgZmlsZSB3aWxsIGlsbHVtaW5hdGUgdGhlIGRlcGVuZGVuY3kgcGF0aCBjbGVhcmx5LCBvciBhdCBsZWFzdCBwb2ludCBtZSB0b3dhcmQgb3RoZXIgbGlrZWx5IGN1bHByaXRzIGlmIGl04oCZcyBtb3JlIGluZGlyZWN0IHRoYW4gYW50aWNpcGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2Y3NvY2subyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9NYWtlZmlsZT0xMT1zdW5ycGMteSA6PSBjbG50Lm8geHBydC5vIHNvY2tsaWIubyB4cHJ0c29jay5vIHNjaGVkLm8gXFxcbm5ldC9zdW5ycGMvTWFrZWZpbGUtMTItXHQgICAgYXV0aC5vIGF1dGhfbnVsbC5vIGF1dGhfdGxzLm8gYXV0aF91bml4Lm8gXFxcbm5ldC9zdW5ycGMvTWFrZWZpbGU6MTM6XHQgICAgc3ZjLm8gc3Zjc29jay5vIHN2Y2F1dGgubyBzdmNhdXRoX3VuaXgubyBcXFxubmV0L3N1bnJwYy9NYWtlZmlsZS0xNC1cdCAgICBhZGRyLm8gcnBjYl9jbG50Lm8gdGltZXIubyB4ZHIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipSUEMgYW5kIE5GUyBEZXBlbmRlbmN5IENoZWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19TVU5SUENgIGlzIGVuYWJsZWQsIHRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IG90aGVyIE5GUy1yZWxhdGVkIGNvbmZpZ3VyYXRpb24sIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfTkZTRGAuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIHJlbHlpbmcgb24gaXQgdG8gZW5zdXJlIGEgc3RhYmxlIGFuZCBwcm9wZXJseSBjb25maWd1cmVkIE5GUyBzZXR1cC4gVGhpcyBpcyBhIHN0YW5kYXJkIHN0ZXA7IHlvdSBhbHdheXMgc3RhcnQgd2l0aCB0aGUgYmFzZSwgYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEkgaGF2ZSB0byBtYWtlIGNlcnRhaW4gdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4gY29uZmxpY3RzIG9yIG1pc3NpbmcgcGllY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZTRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mc2QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXG5mcy9uZnNkL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0zOS1cbmZzL25mc2QvS2NvbmZpZzo0MDpjb25maWcgTkZTRF9WMlxuZnMvbmZzZC9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTUwLVxuZnMvbmZzZC9LY29uZmlnOjUxOmNvbmZpZyBORlNEX1YyX0FDTFxuZnMvbmZzZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTU0LVxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxuZnMvbmZzZC9LY29uZmlnLTU2LVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTc2LVxuZnMvbmZzZC9LY29uZmlnOjc3OmNvbmZpZyBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctNzgtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy05My1cbmZzL25mc2QvS2NvbmZpZzo5NDpjb25maWcgTkZTRF9QTkZTXG5mcy9uZnNkL0tjb25maWctOTUtXHRib29sXG5mcy9uZnNkL0tjb25maWctOTYtXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTEwOS1cbmZzL25mc2QvS2NvbmZpZzoxMTA6Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTIzLVxuZnMvbmZzZC9LY29uZmlnOjEyNDpjb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1wmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNDAtXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXG5mcy9uZnNkL0tjb25maWctMTQyLVx0Ym9vbCBcJiMzNDtORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNTAtXG5mcy9uZnNkL0tjb25maWc6MTUxOmNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNjMtXG5mcy9uZnNkL0tjb25maWc6MTY0OmNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbmZzL25mc2QvS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNzktXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzk2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBjb25maWcgTkZTRGAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYGNvbmZpZyBORlNEYCByZWxpZXMgb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgZGlyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRvIG90aGVyIG1vZHVsZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyBpdCBhIGNvcmUgY29tcG9uZW50PyBEb2VzIGl0IGRlcGVuZCBvbiBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyBiZWluZyBsb2FkZWQsIG9yIGNlcnRhaW4gbmV0d29yayBjb25maWd1cmF0aW9ucz8gRG9lcyBpdCBpbnRlcmZhY2Ugd2l0aCB1c2VyLXNwYWNlIGRhZW1vbnMsIGFuZCBhcmUgdGhvc2UgZGVwZW5kZW5jaWVzIGV4cGxpY2l0IG9yIGltcGxpY2l0PyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnN1bHQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBtYXliZSBldmVuIHNvbWUga2VybmVsIHNvdXJjZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQga25vd2luZyAqd2hhdCogaXQgZGVwZW5kcyBvbiwgYnV0IGFsc28gdGhlICp3aHkqIC0gdW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgZGVwZW5kZW5jaWVzIGlzIGp1c3QgYXMgaW1wb3J0YW50LiBLbm93aW5nIHRoaXMgYWxsb3dzIG1lIHRvIGNvbmZpZGVudGx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0RcbmZzL25mc2QvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVFxuZnMvbmZzZC9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIEZJTEVfTE9DS0lOR1xuZnMvbmZzZC9LY29uZmlnOjY6XHRkZXBlbmRzIG9uIEZTTk9USUZZXG5mcy9uZnNkL0tjb25maWctNy1cdHNlbGVjdCBDUkMzMlxuLS1cbmZzL25mc2QvS2NvbmZpZy0xNi1cdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WM19BQ0xcbmZzL25mc2QvS2NvbmZpZzoxNzpcdGRlcGVuZHMgb24gTVVMVElVU0VSXG5mcy9uZnNkL0tjb25maWctMTgtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTQwPWNvbmZpZyBORlNEX1YyXG5mcy9uZnNkL0tjb25maWctNDEtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMiAoREVQUkVDQVRFRClcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzo0MjpcdGRlcGVuZHMgb24gTkZTRFxuZnMvbmZzZC9LY29uZmlnLTQzLVx0ZGVmYXVsdCBuXG4tLVxuZnMvbmZzZC9LY29uZmlnPTUxPWNvbmZpZyBORlNEX1YyX0FDTFxuZnMvbmZzZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIE5GU0RfVjJcbmZzL25mc2QvS2NvbmZpZy01NC1cbmZzL25mc2QvS2NvbmZpZz01NT1jb25maWcgTkZTRF9WM19BQ0xcbmZzL25mc2QvS2NvbmZpZy01Ni1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjMgQUNMIHByb3RvY29sIGV4dGVuc2lvblwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjU3Olx0ZGVwZW5kcyBvbiBORlNEXG5mcy9uZnNkL0tjb25maWctNTgtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTc3PWNvbmZpZyBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctNzgtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjc5Olx0ZGVwZW5kcyBvbiBORlNEIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG5mcy9uZnNkL0tjb25maWctODAtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4tLVxuZnMvbmZzZC9LY29uZmlnPTk3PWNvbmZpZyBORlNEX0JMT0NLTEFZT1VUXG5mcy9uZnNkL0tjb25maWctOTgtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgYmxvY2sgbGF5b3V0c1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjk5Olx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBCTE9DS1xuZnMvbmZzZC9LY29uZmlnLTEwMC1cdHNlbGVjdCBORlNEX1BORlNcbi0tXG5mcy9uZnNkL0tjb25maWc9MTEwPWNvbmZpZyBORlNEX1NDU0lMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTEyOlx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBCTE9DS1xuZnMvbmZzZC9LY29uZmlnLTExMy1cdHNlbGVjdCBORlNEX1BORlNcbi0tXG5mcy9uZnNkL0tjb25maWc9MTI0PWNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXG5mcy9uZnNkL0tjb25maWctMTI1LVx0Ym9vbCBcJiMzNDtORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTI2Olx0ZGVwZW5kcyBvbiBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctMTI3LVx0c2VsZWN0IE5GU0RfUE5GU1xuLS1cbmZzL25mc2QvS2NvbmZpZz0xNDE9Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcbmZzL25mc2QvS2NvbmZpZy0xNDItXHRib29sIFwmIzM0O05GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTQzOlx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBORlNfVjRfMlxuZnMvbmZzZC9LY29uZmlnLTE0NC1cdGhlbHBcbi0tXG5mcy9uZnNkL0tjb25maWc9MTUxPWNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE1MzpcdGRlcGVuZHMgb24gTkZTRF9WNCBcdTAwMjZcdTAwMjYgU0VDVVJJVFlcbmZzL25mc2QvS2NvbmZpZy0xNTQtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTE2ND1jb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXG5mcy9uZnNkL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzoxNjY6XHRkZXBlbmRzIG9uIE5GU0RfVjRcbmZzL25mc2QvS2NvbmZpZy0xNjctXHRkZWZhdWx0IG5cbi0tXG5mcy9uZnNkL0tjb25maWc9MTgwPWNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE4MjpcdGRlcGVuZHMgb24gTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnLTE4My1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODI5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOZXR3b3JrIEZpbGVzeXN0ZW0gRGVwZW5kZW5jaWVzIGFuZCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gZGFlbW9uLCBgTkZTRGAsIGFuZCBob3cgaXQgYWxsIGhhbmdzIHRvZ2V0aGVyLiBJdCBsb29rcyBsaWtlIGBORlNEYCBpcyBwcmV0dHkgZnVuZGFtZW50YWxseSBidWlsdCBvbiBgSU5FVGAgZm9yIGl0cyBuZXR3b3JrIHRyYW5zcG9ydCwgdGhhdCYjMzk7cyBleHBlY3RlZC4gVGhlbiwgaXQgcmVsaWVzIG9uIGBGSUxFX0xPQ0tJTkdgIHdoaWNoIG1ha2VzIHNlbnNlLCBhcyBhIGRpc3RyaWJ1dGVkIGZpbGVzeXN0ZW0gbmVlZHMgdG8gaGFuZGxlIGZpbGUgbG9ja2luZyBhbmQgY29uY3VycmVuY3kuIEl0IGlzIHVzaW5nIGBGU05PVElGWWAgdG8gZ2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGZpbGUgc3lzdGVtLiBBbmQsIG9mIGNvdXJzZSwgYSBuZXR3b3JrLWFjY2Vzc2libGUgZmlsZXN5c3RlbSBpcyBwcm9iYWJseSBiZWluZyB1c2VkIGJ5IG1vcmUgdGhhbiBvbmUgdXNlciwgc28gYE1VTFRJVVNFUmAgc3VwcG9ydCBpcyBpbXBvcnRhbnQuIEnigJltIHN0YXJ0aW5nIHRvIHNlZSB0aGUgYXJjaGl0ZWN0dXJlIGNsZWFybHkuCgpOb3csIEkmIzM5O20gc2hpZnRpbmcgZm9jdXMgdG8gYFNVTlJQQ2AgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgbmVlZHMgdG8gYmUgY29uZmlndXJlZCB0aGVyZSB0byBnZXQgYE5GU0RgIHJ1bm5pbmcgcHJvcGVybHkuIFdoYXQga2luZCBvZiBSUEMgc2V0dGluZ3MgZG8gSSBuZWVkIHRvIGNvbmNlcm4gbXlzZWxmIHdpdGg/IFZlcnNpb24gbnVtYmVycz8gQXV0aGVudGljYXRpb24/IFRyYW5zcG9ydD8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwcm90b2NvbCBmb3IgdGhlIGNsaWVudHMgdG9vLCBpdCBjb3VsZCBiZSB2MiwgdjMgb3IgdjQsIGV0Yy4uIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBnZXQgdGhlIHNldHRpbmdzIHNldCBhcHByb3ByaWF0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1VOUlBDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3N1bnJwYy9LY29uZmlnOjI6Y29uZmlnIFNVTlJQQ1xubmV0L3N1bnJwYy9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy01LVxubmV0L3N1bnJwYy9LY29uZmlnOjY6Y29uZmlnIFNVTlJQQ19HU1Ncbm5ldC9zdW5ycGMvS2NvbmZpZy03LVx0dHJpc3RhdGVcbi0tXG5uZXQvc3VucnBjL0tjb25maWctMTAtXG5uZXQvc3VucnBjL0tjb25maWc6MTE6Y29uZmlnIFNVTlJQQ19CQUNLQ0hBTk5FTFxubmV0L3N1bnJwYy9LY29uZmlnLTEyLVx0Ym9vbFxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0xNC1cbm5ldC9zdW5ycGMvS2NvbmZpZzoxNTpjb25maWcgU1VOUlBDX1NXQVBcbm5ldC9zdW5ycGMvS2NvbmZpZy0xNi1cdGJvb2xcbi0tXG5uZXQvc3VucnBjL0tjb25maWc9MTk9Y29uZmlnIFJQQ1NFQ19HU1NfS1JCNVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0zNS1cbm5ldC9zdW5ycGMvS2NvbmZpZzozNjpjb25maWcgU1VOUlBDX0RFQlVHXG5uZXQvc3VucnBjL0tjb25maWctMzctXHRib29sIFwmIzM0O1JQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTQ5LVxubmV0L3N1bnJwYy9LY29uZmlnOjUwOmNvbmZpZyBTVU5SUENfREVCVUdfVFJBQ0Vcbm5ldC9zdW5ycGMvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7UlBDOiBTZW5kIGRmcHJpbnRrKCkgb3V0cHV0IHRvIHRoZSB0cmFjZSBidWZmZXJcJiMzNDtcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNjMtXG5uZXQvc3VucnBjL0tjb25maWc6NjQ6Y29uZmlnIFNVTlJQQ19YUFJUX1JETUFcbm5ldC9zdW5ycGMvS2NvbmZpZy02NS1cdHRyaXN0YXRlIFwmIzM0O1JQQy1vdmVyLVJETUEgdHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBORlMgRGFlbW9uJiMzOTtzIFJQQyBEZXBlbmRlbmN5KioKCk9rYXksIHNvIHRoZSBzeXN0ZW0mIzM5O3MgaGlnaGxpZ2h0aW5nIHRoYXQgYFNVTlJQQ2AgaXMgYmVpbmcgcHVsbGVkIGluIGJ5IGBORlNEYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byAqaG93KiBleGFjdGx5IGBORlNEYCBpcyBzZWxlY3RpbmcgaXQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHBhdGguIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgc2VsZWN0aW9uIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIGlzc3VlcyBvciBwZXJmb3JtYW5jZSB0dW5pbmcuIExldCYjMzk7cyBzZWUgaG93IGBORlNEYCBpcyBjb25maWd1cmVkIHRvIGhhbmRsZSBSUEMgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBTVU5SUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0Rcbi0tXG5mcy9uZnNkL0tjb25maWctMTEtXHRzZWxlY3QgTE9DS0RcbmZzL25mc2QvS2NvbmZpZzoxMjpcdHNlbGVjdCBTVU5SUENcbmZzL25mc2QvS2NvbmZpZy0xMy1cdHNlbGVjdCBFWFBPUlRGU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzkwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqTkZTRCBDb25maWd1cmF0aW9uIGFuZCBGb2N1c2VkIEZ1enppbmcqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgcGxhbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSB0aGF0IGVuYWJsaW5nIGBORlNEYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc3RlcCBoZXJlLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBuZXh0IGxvZ2ljYWwgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbiB3ZSBuZWVkIHRvIHRhcmdldCB3aXRoIGZ1enppbmcuIEl0IGxvb2tzIGxpa2UgYHN2Y19hZGRzb2NrYCBpcyB0aGUgcHJpbWUgY2FuZGlkYXRlLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBJJiMzOTt2ZSBnb3QgdG8gY29uZmlybSB0aGF0IGludHVpdGlvbiwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIGRvIHRoYXQgaXMgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gR290dGEgZ2V0IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBiZWZvcmUgSSBjb21taXQgdG8gdGhyb3dpbmcgYSBidW5jaCBvZiBmdXp6aW5nIHJlc291cmNlcyBhdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Y3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUxOTpcdGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxuMTUyMDpcdFx0XHRjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4xNTIxOlx0e1xuMTUyMjpcdFx0aW50IGVyciA9IDA7XG4xNTIzOlx0XHRzdHJ1Y3Qgc29ja2V0ICpzbyA9IHNvY2tmZF9sb29rdXAoZmQsIFx1MDAyNmVycik7XG4xNTI0Olx0XHRzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2sgPSBOVUxMO1xuMTUyNTpcdFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjtcbjE1MjY6XHRcdHN0cnVjdCBzb2NrYWRkciAqc2luID0gKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHI7XG4xNTI3Olx0XHRpbnQgc2FsZW47XG4xNTI4Olx0XG4xNTI5Olx0XHRpZiAoIXNvKVxuMTUzMDpcdFx0XHRyZXR1cm4gZXJyO1xuMTUzMTpcdFx0ZXJyID0gLUVJTlZBTDtcbjE1MzI6XHRcdGlmIChzb2NrX25ldChzby1cdTAwM2VzaykgIT0gbmV0KVxuMTUzMzpcdFx0XHRnb3RvIG91dDtcbjE1MzQ6XHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4xNTM1Olx0XHRpZiAoKHNvLVx1MDAzZXNrLVx1MDAzZXNrX2ZhbWlseSAhPSBQRl9JTkVUKSBcdTAwMjZcdTAwMjYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX2ZhbWlseSAhPSBQRl9JTkVUNikpXG4xNTM2Olx0XHRcdGdvdG8gb3V0O1xuMTUzNzpcdFx0ZXJyID0gIC1FUFJPVE9OT1NVUFBPUlQ7XG4xNTM4Olx0XHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4xNTM5Olx0XHQgICAgc28tXHUwMDNlc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4xNTQwOlx0XHRcdGdvdG8gb3V0O1xuMTU0MTpcdFx0ZXJyID0gLUVJU0NPTk47XG4xNTQyOlx0XHRpZiAoc28tXHUwMDNlc3RhdGUgXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxuMTU0MzpcdFx0XHRnb3RvIG91dDtcbjE1NDQ6XHRcdGVyciA9IC1FQlVTWTtcbjE1NDU6XHRcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpXG4xNTQ2Olx0XHRcdGdvdG8gb3V0O1xuMTU0NzpcdFx0ZXJyID0gLUVOT0VOVDtcbjE1NDg6XHRcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuMTU0OTpcdFx0XHRnb3RvIG91dDtcbjE1NTA6XHRcdHN2c2sgPSBzdmNfc2V0dXBfc29ja2V0KHNlcnYsIHNvLCBTVkNfU09DS19ERUZBVUxUUyk7XG4xNTUxOlx0XHRpZiAoSVNfRVJSKHN2c2spKSB7XG4xNTUyOlx0XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuMTU1MzpcdFx0XHRlcnIgPSBQVFJfRVJSKHN2c2spO1xuMTU1NDpcdFx0XHRnb3RvIG91dDtcbjE1NTU6XHRcdH1cbjE1NTY6XHRcdHNhbGVuID0ga2VybmVsX2dldHNvY2tuYW1lKHN2c2stXHUwMDNlc2tfc29jaywgc2luKTtcbjE1NTc6XHRcdGlmIChzYWxlbiBcdTAwM2U9IDApXG4xNTU4Olx0XHRcdHN2Y194cHJ0X3NldF9sb2NhbChcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIHNpbiwgc2FsZW4pO1xuMTU1OTpcdFx0c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9jcmVkID0gZ2V0X2NyZWQoY3JlZCk7XG4xNTYwOlx0XHRzdmNfYWRkX25ld19wZXJtX3hwcnQoc2VydiwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0KTtcbjE1NjE6XHRcdHJldHVybiBzdmNfb25lX3NvY2tfbmFtZShzdnNrLCBuYW1lX3JldHVybiwgbGVuKTtcbjE1NjI6XHRvdXQ6XG4xNTYzOlx0XHRzb2NrZmRfcHV0KHNvKTtcbjE1NjQ6XHRcdHJldHVybiBlcnI7XG4xNTY1Olx0fVxuMTU2NjpcdEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcbjE1Njc6XHRcbjE1Njg6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODUyCgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIE5GU2QgQ29udHJvbCBGaWxlczogQSBRdWljayBMb29rKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoYW5nZSBpbiBgc3ZjX2FkZHNvY2tgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZSB0aHJvdWdoIE5GU2QgY29udHJvbCBmaWxlcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMsIGxldCYjMzk7cyBmdXp6IHRoaXMgdGhpbmcuIFRoYXQgYGVyciA9IC1FQlVTWWAgY2hlY2sgY29tYmluZWQgd2l0aCBgc28tJmd0O3NrLSZndDtza191c2VyX2RhdGFgIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIG9yIGEgc3RhdGUgbWFuYWdlbWVudCBwcm9ibGVtIHRoYXQgZnV6emluZyBjb3VsZCBleHBvc2UuCgpUaGUgY2hhbmdlIGl0c2VsZiBsb29rcyBzdHJhaWdodGZvcndhcmQ7IHRoZSBgTkZTRGAgY29uZmlnIGVuYWJsZXMgdGhlIG1vZGlmaWVkIGNvZGUuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgcHJlcmVxdWlzaXRlIGNvbmZpZ3MuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBgTkZTRGAgZGVwZW5kcyBvbiB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBgSU5FVGAsIGBGSUxFX0xPQ0tJTkdgLCBhbmQgc28gb24uIE5vdGhpbmcgdW5leHBlY3RlZCB0aGVyZS4gU28sIGBORlNEYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkuIEFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGl0IGFuZCBnZXQgYSBzZXQtcmVzdWx0LiBUaW1lIHRvIG1vdmUgb24gYW5kIHNlZSB3aGF0IHRoZSBmdXp6aW5nIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBzdmNfYWRkc29ja2AgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCB0byByZXR1cm4gYC1FQlVTWWAgaWYgYHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB3cml0aW5nIHRvIG5mc2QgY29udHJvbCBmaWxlcyAoZS5nLiwgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdmNfYWRkc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gYHN2Y19hZGRzb2NrYCBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgIHRvIHJldHVybiBgLUVCVVNZYCBpZiBgc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHdyaXRpbmcgdG8gbmZzZCBjb250cm9sIGZpbGVzIChlLmcuLCBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGApIGFuZCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIGEgc29ja2V0IHRvIGEgc3VucnBjIHNlcnZpY2UgaWYgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gcHJldmVudCBzdGF0ZSBjb3JydXB0aW9uIG9yIHJlc291cmNlIGxlYWtzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtYWRkKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYzRiZjZkYjE1YzVlNTRkMDFhNjY1NmYyMmUyNDIwOWZhMTU1ZWRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTY6Mzg6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xNTQxLDYgJiM0MzsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsCiAJZXJyID0gLUVJU0NPTk47CiAJaWYgKHNvLSZndDtzdGF0ZSAmZ3Q7IFNTX1VOQ09OTkVDVEVEKQogCQlnb3RvIG91dDsKJiM0MzsJZXJyID0gLUVCVVNZOwomIzQzOwlpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpCiYjNDM7CQlnb3RvIG91dDsKIAllcnIgPSAtRU5PRU5UOwogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQogCQlnb3RvIG91dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc3ZjX2FkZHNvY2tgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBJbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgLCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiBgc3ZjX2FkZHNvY2tgLiBJIHNlZSB0aGF0IHRoZXkmIzM5O3JlIGFkZGluZyBhIG5ldyBjaGVjayBzcGVjaWZpY2FsbHkgZm9yIGBzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YWAuIEVzc2VudGlhbGx5LCB0aGV5IGFyZSBwcmV2ZW50aW5nIHRoZSBhZGRpdGlvbiBvZiBhIHNvY2tldCAoYHNvYCkgdG8gdGhlIHNlcnZpY2UgaWYgaXQgKmFscmVhZHkqIGhhcyBgc2tfdXNlcl9kYXRhYCBhc3NpZ25lZC4gVGhlIGNvZGUgc25pcHBldCBjbGVhcmx5IHNob3dzIHRoaXM6CgpgYGBjCgllcnIgPSAtRUJVU1k7CglpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpCgkJZ290byBvdXQ7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgZG91YmxlLWFkZCBzY2VuYXJpbyBvciBtYXliZSBhbiBpc3N1ZSB3aGVyZSBhIHNvY2tldCBpcyBpbmFkdmVydGVudGx5IHJldXNlZCBiZWZvcmUgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUuIEl0JiMzOTtzIGFib3V0IGVuc3VyaW5nIGEgc29ja2V0IGlzbiYjMzk7dCBhZGRlZCB0byB0aGUgc2VydmljZSBpZiBpdCYjMzk7cyBhbHJlYWR5ICYjMzQ7aW4gdXNlJiMzNDsgb3IgaGFzIHNvbWUgYXNzb2NpYXRlZCBzdGF0ZS4gVGhpcyBraW5kIG9mIGd1YXJkIGlzIGEgZ29vZCBwcmFjdGljZSB0byBwcmV2ZW50IHJlc291cmNlIGNvbmZsaWN0cy4KCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGNhcmVmdWxseSBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBiZWluZyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBqdXN0IGEgc2ltcGxlIG51bGwgY2hlY2sgb24gYSBwb2ludGVyLCBgc2tfdXNlcl9kYXRhYC4gS01TQU4sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGRldGVjdGluZyByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIHNpbXBseSBjaGVja3MgaWYgYSBwb2ludGVyIGlzIG5vbi1OVUxMLiBJdCYjMzk7cyBtb3JlIG9mIGEgbG9naWMgY2hlY2sgdG8gcHJldmVudCBwb3RlbnRpYWwgYnVncyBsaWtlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGdlbmVyYWwgbG9naWMgZXJyb3JzIHJlbGF0ZWQgdG8gc29ja2V0IHN0YXRlIG1hbmFnZW1lbnQuIEl0IGFwcGVhcnMgdG8gcHJvYWN0aXZlbHkgcHJldmVudCBhIHByb2JsZW0uCgpUaGVyZWZvcmUsIGdpdmVuIG15IGFzc2Vzc21lbnQsIEkmIzM5O2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIEtNU0FOIHRvIGZpbmQgYW4gaXNzdWUuIEhvd2V2ZXIsIEkgd2lsbCB0YWtlIGEgYnJpZWYgbW9tZW50IHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZSBhcm91bmQgdGhpcyBhZGRpdGlvbiB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTMwOlx0XHRcdHJldHVybiBlcnI7XG4xNTMxOlx0XHRlcnIgPSAtRUlOVkFMO1xuMTUzMjpcdFx0aWYgKHNvY2tfbmV0KHNvLVx1MDAzZXNrKSAhPSBuZXQpXG4xNTMzOlx0XHRcdGdvdG8gb3V0O1xuMTUzNDpcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbjE1MzU6XHRcdGlmICgoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQpIFx1MDAyNlx1MDAyNiAoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcbjE1MzY6XHRcdFx0Z290byBvdXQ7XG4xNTM3Olx0XHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcbjE1Mzg6XHRcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbjE1Mzk6XHRcdCAgICBzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjE1NDA6XHRcdFx0Z290byBvdXQ7XG4xNTQxOlx0XHRlcnIgPSAtRUlTQ09OTjtcbjE1NDI6XHRcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4xNTQzOlx0XHRcdGdvdG8gb3V0O1xuMTU0NDpcdFx0ZXJyID0gLUVCVVNZO1xuMTU0NTpcdFx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbjE1NDY6XHRcdFx0Z290byBvdXQ7XG4xNTQ3Olx0XHRlcnIgPSAtRU5PRU5UO1xuMTU0ODpcdFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4xNTQ5Olx0XHRcdGdvdG8gb3V0O1xuMTU1MDpcdFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcbjE1NTE6XHRcdGlmIChJU19FUlIoc3ZzaykpIHtcbjE1NTI6XHRcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4xNTUzOlx0XHRcdGVyciA9IFBUUl9FUlIoc3Zzayk7XG4xNTU0Olx0XHRcdGdvdG8gb3V0O1xuMTU1NTpcdFx0fVxuMTU1NjpcdFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cdTAwM2Vza19zb2NrLCBzaW4pO1xuMTU1NzpcdFx0aWYgKHNhbGVuIFx1MDAzZT0gMClcbjE1NTg6XHRcdFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc2luLCBzYWxlbik7XG4xNTU5Olx0XHRzdnNrLVx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0MAoJCQkJCQkJb3V0cHV0OiAxMjgKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGEgc2FuaXR5IGNoZWNrLCByZWFsbHksIHRvIGF2b2lkIGFkZGluZyBhIHNvY2tldCB3aGVyZSBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldC4gVGhpcyBpcyBtb3N0IGxpa2VseSBhIHByZXZlbnRhdGl2ZSBtZWFzdXJlIGFnYWluc3QgYSBuYXN0eSBidWcg4oCTIHBlcmhhcHMgYSByZXNvdXJjZSBsZWFrLCBvciBhIHVzZS1hZnRlci1mcmVlLCBvciBzb21lIGtpbmQgb2Ygc3RhdGUgY29ycnVwdGlvbiBkb3duIHRoZSBsaW5lLiBHb29kIGNhdGNoLCBhY3R1YWxseS4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSBjb2RlLiBUaGVyZSYjMzk7cyBub3RoaW5nIGhlcmUgdGhhdCYjMzk7cyBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbnMsIG5vIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIGRlZmluaXRlbHkgbm8gb2J2aW91cyBpbnN0YW5jZXMgb2YgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQgbWVhbnMgd2UgZG9uJiMzOTt0IG5lZWQgdGhlIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyLCBvciBLTVNBTiwgdG8gbG9vayBmb3IgdGhvc2Uga2luZHMgb2YgaXNzdWVzLiBUaGUgS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyIChLQVNBTikgaXMgcGVyZmVjdGx5IHN1ZmZpY2llbnQgaGVyZSB0byBmaW5kIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgIHdoZW4gSSBjYWxsIGBzZXQtcmVzdWx0c2AuIEl0JiMzOTtzIGEgY2xlYW4gZml4IHdpdGggYSB3ZWxsLXJlYXNvbmVkIGp1c3RpZmljYXRpb24sIGFuZCB0aGUgS0FTQU4gY292ZXJhZ2UgaXMgbW9yZSB0aGFuIGFkZXF1YXRlIGZvciB0aGlzIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIGEgc29ja2V0IHRvIGEgc3VucnBjIHNlcnZpY2UgaWYgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gcHJldmVudCBzdGF0ZSBjb3JydXB0aW9uIG9yIHJlc291cmNlIGxlYWtzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtYWRkKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNpbXBsZSBjaGVjayB0byBwcmV2ZW50IGFkZGluZyBhIHNvY2tldCB0byBhIHN1bnJwYyBzZXJ2aWNlIGlmIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgc2V0LiBUaGlzIGlzIGEgbG9naWMgZml4IHRvIHByZXZlbnQgc3RhdGUgY29ycnVwdGlvbiBvciByZXNvdXJjZSBsZWFrcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWFkZCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZS4gS01TQU4gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzg6NDYuMDQwMjE0Nzc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzEzMzM1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIGEgc29ja2V0IHRvIGEgc3VucnBjIHNlcnZpY2UgaWYgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gcHJldmVudCBzdGF0ZSBjb3JydXB0aW9uIG9yIHJlc291cmNlIGxlYWtzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtYWRkKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBgc3ZjX2FkZHNvY2tgIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgdG8gcmV0dXJuIGAtRUJVU1lgIGlmIGBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB3cml0aW5nIHRvIG5mc2QgY29udHJvbCBmaWxlcyAoZS5nLiwgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM4OjQ2LjA0MDIyMTIzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcxMjg5NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2M0YmY2ZGIxNWM1ZTU0ZDAxYTY2NTZmMjJlMjQyMDlmYTE1NWVkZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjozODo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXFxuaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXFxuQEAgLTE1NDEsNiArMTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxcbiBcXHRlcnIgPSAtRUlTQ09OTjtcXG4gXFx0aWYgKHNvLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4rXFx0ZXJyID0gLUVCVVNZO1xcbitcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHRlcnIgPSAtRU5PRU5UO1xcbiBcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM4OjQ2LjYxMjMzNDA2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM4MzU0NjI5NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfYWRkc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBgc3ZjX2FkZHNvY2tgIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgdG8gcmV0dXJuIGAtRUJVU1lgIGlmIGBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB3cml0aW5nIHRvIG5mc2QgY29udHJvbCBmaWxlcyAoZS5nLiwgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNjNGJmNmRiMTVjNWU1NGQwMWE2NjU2ZjIyZTI0MjA5ZmExNTVlZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjozODo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xuKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbkBAIC0xNTQxLDYgKzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcbiBcdGVyciA9IC1FSVNDT05OO1xuIFx0aWYgKHNvLVx1MDAzZXN0YXRlIFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcbiBcdFx0Z290byBvdXQ7XG4rXHRlcnIgPSAtRUJVU1k7XG4rXHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuK1x0XHRnb3RvIG91dDtcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbiBcdFx0Z290byBvdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozODo0Ni42MTIzMzU3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzUxNjk4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZXQvc3VucnBjL3N2Y3NvY2suYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBzdmNfYWRkc29ja2AgZnVuY3Rpb24gd2l0aGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyB0aGV5J3ZlIGluc2VydGVkIGEgY2hlY2s6XG5cbmBgYGNcblx0ZXJyID0gLUVCVVNZO1xuXHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuXHRcdGdvdG8gb3V0O1xuYGBgXG5cblJpZ2h0IGF3YXksIG15IGV4cGVydCBtaW5kIGlzIHBhcnNpbmcgdGhpcy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IGFkZGluZyBhIHNvY2tldCAocHJlc3VtYWJseSBhIG5ldyBzZXJ2aWNlIHNvY2tldCByZXByZXNlbnRlZCBieSBgc29gKSBpZiBpdHMgdW5kZXJseWluZyBgc2tgIChzb2NrZXQga2VybmVsKSBhbHJlYWR5IGhhcyBgc2tfdXNlcl9kYXRhYCBzZXQuIFRoZSBpbnRlbnQgaXMgYWxtb3N0IGNlcnRhaW5seSB0byBhdm9pZCBhIGNvbmZsaWN0LCBsaWtlbHkgcHJldmVudGluZyBkb3VibGUtcmVnaXN0cmF0aW9uIG9yIG1hbmFnaW5nIHJlc291cmNlIGNvbnRlbnRpb24uIEEgYnVzeSBlcnJvciAoYC1FQlVTWWApIHN1Z2dlc3RzIHRoZXkgYXJlIHNwZWNpZmljYWxseSBwcmV2ZW50aW5nIHJlc291cmNlIGNvbnRlbnRpb24uIFRoZSBgZ290byBvdXRgIGltbWVkaWF0ZWx5IHNraXBzIHRvIHRoZSBlbmQsIHJldHVybmluZyB0aGUgZXJyb3IuIFRoaXMgaXMgY29tbW9uIHRvIHJlbGVhc2UgYW55IHJlc291cmNlcyB0aGF0IHdlcmUgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdGhlIHRlc3QuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY29uZGl0aW9uIGlzIGJlaW5nIGFkZGVkLiBXaGF0IHNjZW5hcmlvIHRyaWdnZXJzIGEgbm9uLU5VTEwgYHNrX3VzZXJfZGF0YWA/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYWxsb3dpbmcgbXVsdGlwbGUgc2VydmljZXMgb24gdGhlIHNhbWUgc29ja2V0IGtlcm5lbD8gV2hhdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHJlc291cmNlIGxlYWtzIGFyZSBiZWluZyBhZGRyZXNzZWQ/IEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhpcyBgbmV0L3N1bnJwY2AgbW9kdWxlIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2ggYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBJIG5lZWQgdG8ga25vdyB3aGVyZSBgc2tfdXNlcl9kYXRhYCBpcyBiZWluZyB1c2VkIGFuZCBpbml0aWFsaXplZC4gSSdsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byBgc3ZjX2FkZHNvY2tgIGl0c2VsZiwgdGhlbiBsb29rIGZvciBhbnl0aGluZyB0aGF0IHNldHMgYHNrX3VzZXJfZGF0YWAgb24gdGhhdCBzb2NrZXQuIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2U7IHRoZSBpbXBsaWNhdGlvbnMgb2Ygc2tpcHBpbmcgdGhlIGFkZGl0aW9uIGJhc2VkIG9uIHRoaXMgY2hlY2sgcmVxdWlyZSBhIGNhcmVmdWwgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozODo1MS4xNDc1MDgwNDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ5NDkzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX2FkZHNvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zdmNzb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9zdmNzb2NrLmM9MTQzOT1zdGF0aWMgc3RydWN0IHN2Y19zb2NrICpzdmNfc2V0dXBfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqc2VydixcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDYtLyoqXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTUwNzogKiBzdmNfYWRkc29jayAtIGFkZCBhIGxpc3RlbmVyIHNvY2tldCB0byBhbiBSUEMgc2VydmljZVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDgtICogQHNlcnY6IHBvaW50ZXIgdG8gUlBDIHNlcnZpY2UgdG8gd2hpY2ggdG8gYWRkIGEgbmV3IGxpc3RlbmVyXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTE4LSAqL1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MTk6aW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUyMC1cXHRcXHRjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTY1LX1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTY2OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTY3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozODo1MS4yMzI0NjkyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDg3NzcwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHN2Y19hZGRzb2NrYCBVc2FnZSoqXG5cbk9rYXksIHNvIGBzdmNfYWRkc29ja2AgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGV4dGVybmFsbHksIHBvdGVudGlhbGx5IGJ5IG90aGVyIG1vZHVsZXMgb3IgZXZlbiB0aGUgbWFpbiBhcHBsaWNhdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0sIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgaXRzIGNhbGwgc2l0ZXMuIEtub3dpbmcgd2hlcmUgaXQncyAqY2FsbGVkKiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHN5c3RlbSBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyDigJMgcHJvYmFibHkgYG5tYCB0byBjb25maXJtIGl0cyBzeW1ib2wgdmlzaWJpbGl0eSBpZiBuZWVkZWQsIHRoZW4gYSBxdWljayBgZ3JlcGAgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgYG9iamR1bXAgLXRgIG9uIHRoZSByZWxldmFudCBiaW5hcmllcyBvciBsaWJyYXJpZXMsIG9yIGEgc291cmNlIGNvZGUgc2VhcmNoIGlmIGF2YWlsYWJsZSwgdG8gaWRlbnRpZnkgYWxsIGNhbGxlcnMuIE9uY2UgSSBoYXZlIHRoZSBjYWxsIHNpdGVzIEkgY2FuIGJlZ2luIGEgZGVlcGVyIGFuYWx5c2lzIG9mIHRoZSByZWxhdGVkIGNvZGUgYW5kIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgSSBzaG91bGQgZm9jdXMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozODo1NC4xODEyNDg1MTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyODI5NzQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdmNfYWRkc29ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9uZnNjdGwuYz03MjU9c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19hZGRmZChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuLS1cXG5mcy9uZnNkL25mc2N0bC5jLTc0MS1cXHRzZXJ2ID0gbm4tXFx1MDAzZW5mc2Rfc2VydjtcXG5mcy9uZnNkL25mc2N0bC5jOjc0MjpcXHRlcnIgPSBzdmNfYWRkc29jayhzZXJ2LCBuZXQsIGZkLCBidWYsIFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCwgY3JlZCk7XFxuZnMvbmZzZC9uZnNjdGwuYy03NDMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmg9NjU9dm9pZFxcdFxcdHN2Y19zZW5kKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApO1xcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaDo2NjppbnRcXHRcXHRzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgtNjctXFx0XFx0XFx0ICAgIGNvbnN0IGludCBmZCwgY2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xNDM5PXN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwNi0vKipcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTA3OiAqIHN2Y19hZGRzb2NrIC0gYWRkIGEgbGlzdGVuZXIgc29ja2V0IHRvIGFuIFJQQyBzZXJ2aWNlXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwOC0gKiBAc2VydjogcG9pbnRlciB0byBSUEMgc2VydmljZSB0byB3aGljaCB0byBhZGQgYSBuZXcgbGlzdGVuZXJcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MTgtICovXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTUxOTppbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTIwLVxcdFxcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjUtfVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1NjY6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM4OjU1LjgwOTU1MjkwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjEyMTk5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBORlNkIENvbnRyb2wgRmlsZXM6IEEgUHJvbWlzaW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCBhIHByb21pc2luZyBmdXp6aW5nIHRhcmdldDogdGhlIGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBmdW5jdGlvbiBpbiBgZnMvbmZzZC9uZnNjdGwuY2AuIFRoZSBmYWN0IHRoYXQgaXQncyByZWFjaGFibGUgYnkgd3JpdGluZyB0byBORlNkIGNvbnRyb2wgZmlsZXMsIGxpa2UgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgLCByZWFsbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGF0J3MgYSBkaXJlY3QsIGFjY2Vzc2libGUgYXR0YWNrIHN1cmZhY2UuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhbGxvY2F0aW5nIHNvbWUgcmVzb3VyY2VzIHRvd2FyZHMgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWNlc3NhcnkgdG8gZW5hYmxlIGJvdGggYGZzL25mc2QvbmZzY3RsLmNgIGFuZCBhbHNvIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgdG8gYmUgY2VydGFpbiBJIGhhdmUgdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQgZm9yIHRyaWdnZXJpbmcgaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGludm9sdmVkLCB0byBrbm93IGlmIEkgY2FuIGVuYWJsZSB0aGlzIHBhdGggZWFzaWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTc2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM4OjU5LjI3MDc3NDgwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM2NzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnNjdGwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnNkL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvTWFrZWZpbGU9MTE9bmZzZC15XFx0XFx0XFx0Kz0gdHJhY2Uub1xcbmZzL25mc2QvTWFrZWZpbGUtMTItXFxuZnMvbmZzZC9NYWtlZmlsZToxMzpuZnNkLXkgXFx0XFx0XFx0Kz0gbmZzc3ZjLm8gbmZzY3RsLm8gbmZzZmgubyB2ZnMubyBcXFxcXFxuZnMvbmZzZC9NYWtlZmlsZS0xNC1cXHRcXHRcXHQgICBleHBvcnQubyBhdXRoLm8gbG9ja2QubyBuZnNjYWNoZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzg6NTkuMzE5MTQ2NzY3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxODAwNzY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ORlNEYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgaGVyZS4gR290dGEgdHJhY2sgZG93biB3aGVyZSB0aGlzIGNvbWVzIGludG8gcGxheS4gTXkgbmV4dCBzdGVwIGlzIGdvaW5nIHRvIGJlIGRpZ2dpbmcgaW50byBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGNvbm5lY3Rpb24sIGdpdmVuIHRoZSBjb250ZXh0LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtlcm5lbCBsb2dpYyB0aGF0IGFjdHVhbGx5IHVzZXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBhIGNvbmRpdGlvbmFsIGltcG9ydCB0aGF0IHJlbGllcyBvbiBpdC4gSG9wZWZ1bGx5LCB0aGlzIGZpbGUgd2lsbCBpbGx1bWluYXRlIHRoZSBkZXBlbmRlbmN5IHBhdGggY2xlYXJseSwgb3IgYXQgbGVhc3QgcG9pbnQgbWUgdG93YXJkIG90aGVyIGxpa2VseSBjdWxwcml0cyBpZiBpdOKAmXMgbW9yZSBpbmRpcmVjdCB0aGFuIGFudGljaXBhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDEzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MDIuMjM3MTU2NTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTkzNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y3NvY2sub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvTWFrZWZpbGU9MTE9c3VucnBjLXkgOj0gY2xudC5vIHhwcnQubyBzb2NrbGliLm8geHBydHNvY2subyBzY2hlZC5vIFxcXFxcXG5uZXQvc3VucnBjL01ha2VmaWxlLTEyLVxcdCAgICBhdXRoLm8gYXV0aF9udWxsLm8gYXV0aF90bHMubyBhdXRoX3VuaXgubyBcXFxcXFxubmV0L3N1bnJwYy9NYWtlZmlsZToxMzpcXHQgICAgc3ZjLm8gc3Zjc29jay5vIHN2Y2F1dGgubyBzdmNhdXRoX3VuaXgubyBcXFxcXFxubmV0L3N1bnJwYy9NYWtlZmlsZS0xNC1cXHQgICAgYWRkci5vIHJwY2JfY2xudC5vIHRpbWVyLm8geGRyLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOTowMi4yODI3NTcwOThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgyNTk5NjQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipSUEMgYW5kIE5GUyBEZXBlbmRlbmN5IENoZWNrKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1NVTlJQQ2AgaXMgZW5hYmxlZCwgdGhhdCdzIGEgZ2l2ZW4uIE5vdywgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBvdGhlciBORlMtcmVsYXRlZCBjb25maWd1cmF0aW9uLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX05GU0RgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIHJlbHlpbmcgb24gaXQgdG8gZW5zdXJlIGEgc3RhYmxlIGFuZCBwcm9wZXJseSBjb25maWd1cmVkIE5GUyBzZXR1cC4gVGhpcyBpcyBhIHN0YW5kYXJkIHN0ZXA7IHlvdSBhbHdheXMgc3RhcnQgd2l0aCB0aGUgYmFzZSwgYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEkgaGF2ZSB0byBtYWtlIGNlcnRhaW4gdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4gY29uZmxpY3RzIG9yIG1pc3NpbmcgcGllY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzU2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MDguMTA4NzU3MzczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA2NjkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZTRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnNkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbmZzZC9LY29uZmlnOjI6Y29uZmlnIE5GU0RcXG5mcy9uZnNkL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTkZTIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTM5LVxcbmZzL25mc2QvS2NvbmZpZzo0MDpjb25maWcgTkZTRF9WMlxcbmZzL25mc2QvS2NvbmZpZy00MS1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTUwLVxcbmZzL25mc2QvS2NvbmZpZzo1MTpjb25maWcgTkZTRF9WMl9BQ0xcXG5mcy9uZnNkL0tjb25maWctNTItXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjIgQUNMIHByb3RvY29sIGV4dGVuc2lvblxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy01NC1cXG5mcy9uZnNkL0tjb25maWc6NTU6Y29uZmlnIE5GU0RfVjNfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTU2LVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YzIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNzYtXFxuZnMvbmZzZC9LY29uZmlnOjc3OmNvbmZpZyBORlNEX1Y0XFxuZnMvbmZzZC9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy05My1cXG5mcy9uZnNkL0tjb25maWc6OTQ6Y29uZmlnIE5GU0RfUE5GU1xcbmZzL25mc2QvS2NvbmZpZy05NS1cXHRib29sXFxuZnMvbmZzZC9LY29uZmlnLTk2LVxcbmZzL25mc2QvS2NvbmZpZzo5Nzpjb25maWcgTkZTRF9CTE9DS0xBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy05OC1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIGJsb2NrIGxheW91dHNcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTA5LVxcbmZzL25mc2QvS2NvbmZpZzoxMTA6Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTIzLVxcbmZzL25mc2QvS2NvbmZpZzoxMjQ6Y29uZmlnIE5GU0RfRkxFWEZJTEVMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTI1LVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgRmxleCBGaWxlIGxheW91dHNcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTQwLVxcbmZzL25mc2QvS2NvbmZpZzoxNDE6Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcXG5mcy9uZnNkL0tjb25maWctMTQyLVxcdGJvb2wgXFxcIk5GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE1MC1cXG5mcy9uZnNkL0tjb25maWc6MTUxOmNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXFxuZnMvbmZzZC9LY29uZmlnLTE1Mi1cXHRib29sIFxcXCJQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNjMtXFxuZnMvbmZzZC9LY29uZmlnOjE2NDpjb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuZnMvbmZzZC9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTc5LVxcbmZzL25mc2QvS2NvbmZpZzoxODA6Y29uZmlnIE5GU0RfVjRfUE9TSVhfQUNMU1xcbmZzL25mc2QvS2NvbmZpZy0xODEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBORlN2NCBQT1NJWCBkcmFmdCBBQ0xzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOTowOC4xNTc4MzA3NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MDUwNjQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBjb25maWcgTkZTRGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgY29uZmlnIE5GU0RgIHJlbGllcyBvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBkaXJlY3RseS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0byBvdGhlciBtb2R1bGVzIGFuZCBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgYSBjb3JlIGNvbXBvbmVudD8gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMga2VybmVsIG1vZHVsZXMgYmVpbmcgbG9hZGVkLCBvciBjZXJ0YWluIG5ldHdvcmsgY29uZmlndXJhdGlvbnM/IERvZXMgaXQgaW50ZXJmYWNlIHdpdGggdXNlci1zcGFjZSBkYWVtb25zLCBhbmQgYXJlIHRob3NlIGRlcGVuZGVuY2llcyBleHBsaWNpdCBvciBpbXBsaWNpdD8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnN1bHQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBtYXliZSBldmVuIHNvbWUga2VybmVsIHNvdXJjZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBrbm93aW5nICp3aGF0KiBpdCBkZXBlbmRzIG9uLCBidXQgYWxzbyB0aGUgKndoeSogLSB1bmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBkZXBlbmRlbmNpZXMgaXMganVzdCBhcyBpbXBvcnRhbnQuIEtub3dpbmcgdGhpcyBhbGxvd3MgbWUgdG8gY29uZmlkZW50bHkgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM5NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM5OjExLjEwODM0NDg0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1ODk0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnNkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0RcXG5mcy9uZnNkL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTkZTIHNlcnZlciBzdXBwb3J0XFxcIlxcbmZzL25mc2QvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gSU5FVFxcbmZzL25mc2QvS2NvbmZpZzo1OlxcdGRlcGVuZHMgb24gRklMRV9MT0NLSU5HXFxuZnMvbmZzZC9LY29uZmlnOjY6XFx0ZGVwZW5kcyBvbiBGU05PVElGWVxcbmZzL25mc2QvS2NvbmZpZy03LVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE2LVxcdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WM19BQ0xcXG5mcy9uZnNkL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcXG5mcy9uZnNkL0tjb25maWctMTgtXFx0aGVscFxcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTQwPWNvbmZpZyBORlNEX1YyXFxuZnMvbmZzZC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMiAoREVQUkVDQVRFRClcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjQyOlxcdGRlcGVuZHMgb24gTkZTRFxcbmZzL25mc2QvS2NvbmZpZy00My1cXHRkZWZhdWx0IG5cXG4tLVxcbmZzL25mc2QvS2NvbmZpZz01MT1jb25maWcgTkZTRF9WMl9BQ0xcXG5mcy9uZnNkL0tjb25maWctNTItXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjIgQUNMIHByb3RvY29sIGV4dGVuc2lvblxcXCJcXG5mcy9uZnNkL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBORlNEX1YyXFxuZnMvbmZzZC9LY29uZmlnLTU0LVxcbmZzL25mc2QvS2NvbmZpZz01NT1jb25maWcgTkZTRF9WM19BQ0xcXG5mcy9uZnNkL0tjb25maWctNTYtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjMgQUNMIHByb3RvY29sIGV4dGVuc2lvblxcXCJcXG5mcy9uZnNkL0tjb25maWc6NTc6XFx0ZGVwZW5kcyBvbiBORlNEXFxuZnMvbmZzZC9LY29uZmlnLTU4LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz03Nz1jb25maWcgTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy03OC1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjc5OlxcdGRlcGVuZHMgb24gTkZTRCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuZnMvbmZzZC9LY29uZmlnLTgwLVxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz05Nz1jb25maWcgTkZTRF9CTE9DS0xBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy05OC1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIGJsb2NrIGxheW91dHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjk5OlxcdGRlcGVuZHMgb24gTkZTRF9WNCBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmZzL25mc2QvS2NvbmZpZy0xMDAtXFx0c2VsZWN0IE5GU0RfUE5GU1xcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTExMD1jb25maWcgTkZTRF9TQ1NJTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTExMS1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIFNDU0kgbGF5b3V0c1xcXCJcXG5mcy9uZnNkL0tjb25maWc6MTEyOlxcdGRlcGVuZHMgb24gTkZTRF9WNCBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmZzL25mc2QvS2NvbmZpZy0xMTMtXFx0c2VsZWN0IE5GU0RfUE5GU1xcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTEyND1jb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy0xMjUtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1xcXCJcXG5mcy9uZnNkL0tjb25maWc6MTI2OlxcdGRlcGVuZHMgb24gTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy0xMjctXFx0c2VsZWN0IE5GU0RfUE5GU1xcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTE0MT1jb25maWcgTkZTRF9WNF8yX0lOVEVSX1NTQ1xcbmZzL25mc2QvS2NvbmZpZy0xNDItXFx0Ym9vbCBcXFwiTkZTdjQuMiBpbnRlciBzZXJ2ZXIgdG8gc2VydmVyIENPUFlcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE0MzpcXHRkZXBlbmRzIG9uIE5GU0RfVjQgXFx1MDAyNlxcdTAwMjYgTkZTX1Y0XzJcXG5mcy9uZnNkL0tjb25maWctMTQ0LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz0xNTE9Y29uZmlnIE5GU0RfVjRfU0VDVVJJVFlfTEFCRUxcXG5mcy9uZnNkL0tjb25maWctMTUyLVxcdGJvb2wgXFxcIlByb3ZpZGUgU2VjdXJpdHkgTGFiZWwgc3VwcG9ydCBmb3IgTkZTdjQgc2VydmVyXFxcIlxcbmZzL25mc2QvS2NvbmZpZzoxNTM6XFx0ZGVwZW5kcyBvbiBORlNEX1Y0IFxcdTAwMjZcXHUwMDI2IFNFQ1VSSVRZXFxuZnMvbmZzZC9LY29uZmlnLTE1NC1cXHRoZWxwXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9MTY0PWNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcXG5mcy9uZnNkL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIlN1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVxcXCJcXG5mcy9uZnNkL0tjb25maWc6MTY2OlxcdGRlcGVuZHMgb24gTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy0xNjctXFx0ZGVmYXVsdCBuXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9MTgwPWNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcXG5mcy9uZnNkL0tjb25maWctMTgxLVxcdGJvb2wgXFxcIlN1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1xcXCJcXG5mcy9uZnNkL0tjb25maWc6MTgyOlxcdGRlcGVuZHMgb24gTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy0xODMtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM5OjExLjE1NTkzODEwMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMzMTIzMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5ldHdvcmsgRmlsZXN5c3RlbSBEZXBlbmRlbmNpZXMgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gZGFlbW9uLCBgTkZTRGAsIGFuZCBob3cgaXQgYWxsIGhhbmdzIHRvZ2V0aGVyLiBJdCBsb29rcyBsaWtlIGBORlNEYCBpcyBwcmV0dHkgZnVuZGFtZW50YWxseSBidWlsdCBvbiBgSU5FVGAgZm9yIGl0cyBuZXR3b3JrIHRyYW5zcG9ydCwgdGhhdCdzIGV4cGVjdGVkLiBUaGVuLCBpdCByZWxpZXMgb24gYEZJTEVfTE9DS0lOR2Agd2hpY2ggbWFrZXMgc2Vuc2UsIGFzIGEgZGlzdHJpYnV0ZWQgZmlsZXN5c3RlbSBuZWVkcyB0byBoYW5kbGUgZmlsZSBsb2NraW5nIGFuZCBjb25jdXJyZW5jeS4gSXQgaXMgdXNpbmcgYEZTTk9USUZZYCB0byBnZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgZmlsZSBzeXN0ZW0uIEFuZCwgb2YgY291cnNlLCBhIG5ldHdvcmstYWNjZXNzaWJsZSBmaWxlc3lzdGVtIGlzIHByb2JhYmx5IGJlaW5nIHVzZWQgYnkgbW9yZSB0aGFuIG9uZSB1c2VyLCBzbyBgTVVMVElVU0VSYCBzdXBwb3J0IGlzIGltcG9ydGFudC4gSeKAmW0gc3RhcnRpbmcgdG8gc2VlIHRoZSBhcmNoaXRlY3R1cmUgY2xlYXJseS5cblxuTm93LCBJJ20gc2hpZnRpbmcgZm9jdXMgdG8gYFNVTlJQQ2AgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBuZWVkcyB0byBiZSBjb25maWd1cmVkIHRoZXJlIHRvIGdldCBgTkZTRGAgcnVubmluZyBwcm9wZXJseS4gV2hhdCBraW5kIG9mIFJQQyBzZXR0aW5ncyBkbyBJIG5lZWQgdG8gY29uY2VybiBteXNlbGYgd2l0aD8gVmVyc2lvbiBudW1iZXJzPyBBdXRoZW50aWNhdGlvbj8gVHJhbnNwb3J0PyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHByb3RvY29sIGZvciB0aGUgY2xpZW50cyB0b28sIGl0IGNvdWxkIGJlIHYyLCB2MyBvciB2NCwgZXRjLi4gTGV0J3MgZGlnIGRlZXBlciBhbmQgZ2V0IHRoZSBzZXR0aW5ncyBzZXQgYXBwcm9wcmlhdGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM5OjE0LjQ4OTA2NTIzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNTY0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNVTlJQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3N1bnJwYy9LY29uZmlnOjI6Y29uZmlnIFNVTlJQQ1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNS1cXG5uZXQvc3VucnBjL0tjb25maWc6Njpjb25maWcgU1VOUlBDX0dTU1xcbm5ldC9zdW5ycGMvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMTAtXFxubmV0L3N1bnJwYy9LY29uZmlnOjExOmNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcXG5uZXQvc3VucnBjL0tjb25maWctMTItXFx0Ym9vbFxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxNTpjb25maWcgU1VOUlBDX1NXQVBcXG5uZXQvc3VucnBjL0tjb25maWctMTYtXFx0Ym9vbFxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNS1cXG5uZXQvc3VucnBjL0tjb25maWc6MzY6Y29uZmlnIFNVTlJQQ19ERUJVR1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cXHRib29sIFxcXCJSUEM6IEVuYWJsZSBkcHJpbnRrIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy00OS1cXG5uZXQvc3VucnBjL0tjb25maWc6NTA6Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxcbm5ldC9zdW5ycGMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclxcXCJcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy02My1cXG5uZXQvc3VucnBjL0tjb25maWc6NjQ6Y29uZmlnIFNVTlJQQ19YUFJUX1JETUFcXG5uZXQvc3VucnBjL0tjb25maWctNjUtXFx0dHJpc3RhdGUgXFxcIlJQQy1vdmVyLVJETUEgdHJhbnNwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOToxNC41MzUyMjg4MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzgzNTc4MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBORlMgRGFlbW9uJ3MgUlBDIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB0aGUgc3lzdGVtJ3MgaGlnaGxpZ2h0aW5nIHRoYXQgYFNVTlJQQ2AgaXMgYmVpbmcgcHVsbGVkIGluIGJ5IGBORlNEYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byAqaG93KiBleGFjdGx5IGBORlNEYCBpcyBzZWxlY3RpbmcgaXQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHBhdGguIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgc2VsZWN0aW9uIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIGlzc3VlcyBvciBwZXJmb3JtYW5jZSB0dW5pbmcuIExldCdzIHNlZSBob3cgYE5GU0RgIGlzIGNvbmZpZ3VyZWQgdG8gaGFuZGxlIFJQQyBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM5OjE3LjMxODgxMDE2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMDczODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFNVTlJQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnNkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0RcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTE9DS0RcXG5mcy9uZnNkL0tjb25maWc6MTI6XFx0c2VsZWN0IFNVTlJQQ1xcbmZzL25mc2QvS2NvbmZpZy0xMy1cXHRzZWxlY3QgRVhQT1JURlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MTcuMzY2MTI0MTQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTEyMjEzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKk5GU0QgQ29uZmlndXJhdGlvbiBhbmQgRm9jdXNlZCBGdXp6aW5nKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgcGxhbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSB0aGF0IGVuYWJsaW5nIGBORlNEYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc3RlcCBoZXJlLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBuZXh0IGxvZ2ljYWwgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbiB3ZSBuZWVkIHRvIHRhcmdldCB3aXRoIGZ1enppbmcuIEl0IGxvb2tzIGxpa2UgYHN2Y19hZGRzb2NrYCBpcyB0aGUgcHJpbWUgY2FuZGlkYXRlLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQ7IEkndmUgZ290IHRvIGNvbmZpcm0gdGhhdCBpbnR1aXRpb24sIGFuZCB0aGUgYmVzdCBwbGFjZSB0byBkbyB0aGF0IGlzIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIEdvdHRhIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgYmVmb3JlIEkgY29tbWl0IHRvIHRocm93aW5nIGEgYnVuY2ggb2YgZnV6emluZyByZXNvdXJjZXMgYXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOToyMC41MTczNDg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc3VucnBjL3N2Y3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTE5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTE5OlxcdGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxcbjE1MjA6XFx0XFx0XFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbjE1MjE6XFx0e1xcbjE1MjI6XFx0XFx0aW50IGVyciA9IDA7XFxuMTUyMzpcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzbyA9IHNvY2tmZF9sb29rdXAoZmQsIFxcdTAwMjZlcnIpO1xcbjE1MjQ6XFx0XFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID0gTlVMTDtcXG4xNTI1OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuMTUyNjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkcjtcXG4xNTI3OlxcdFxcdGludCBzYWxlbjtcXG4xNTI4OlxcdFxcbjE1Mjk6XFx0XFx0aWYgKCFzbylcXG4xNTMwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTUzMTpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE1MzI6XFx0XFx0aWYgKHNvY2tfbmV0KHNvLVxcdTAwM2VzaykgIT0gbmV0KVxcbjE1MzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNDpcXHRcXHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xcbjE1MzU6XFx0XFx0aWYgKChzby1cXHUwMDNlc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBQRl9JTkVUKSBcXHUwMDI2XFx1MDAyNiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYpKVxcbjE1MzY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNzpcXHRcXHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcXG4xNTM4OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2XFxuMTUzOTpcXHRcXHQgICAgc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcXG4xNTQwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDE6XFx0XFx0ZXJyID0gLUVJU0NPTk47XFxuMTU0MjpcXHRcXHRpZiAoc28tXFx1MDAzZXN0YXRlIFxcdTAwM2UgU1NfVU5DT05ORUNURUQpXFxuMTU0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ0OlxcdFxcdGVyciA9IC1FQlVTWTtcXG4xNTQ1OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSlcXG4xNTQ2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDc6XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xNTQ4OlxcdFxcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxcbjE1NDk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1MDpcXHRcXHRzdnNrID0gc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO1xcbjE1NTE6XFx0XFx0aWYgKElTX0VSUihzdnNrKSkge1xcbjE1NTI6XFx0XFx0XFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuMTU1MzpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHN2c2spO1xcbjE1NTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1NTpcXHRcXHR9XFxuMTU1NjpcXHRcXHRzYWxlbiA9IGtlcm5lbF9nZXRzb2NrbmFtZShzdnNrLVxcdTAwM2Vza19zb2NrLCBzaW4pO1xcbjE1NTc6XFx0XFx0aWYgKHNhbGVuIFxcdTAwM2U9IDApXFxuMTU1ODpcXHRcXHRcXHRzdmNfeHBydF9zZXRfbG9jYWwoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIHNpbiwgc2FsZW4pO1xcbjE1NTk6XFx0XFx0c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfY3JlZCA9IGdldF9jcmVkKGNyZWQpO1xcbjE1NjA6XFx0XFx0c3ZjX2FkZF9uZXdfcGVybV94cHJ0KHNlcnYsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0KTtcXG4xNTYxOlxcdFxcdHJldHVybiBzdmNfb25lX3NvY2tfbmFtZShzdnNrLCBuYW1lX3JldHVybiwgbGVuKTtcXG4xNTYyOlxcdG91dDpcXG4xNTYzOlxcdFxcdHNvY2tmZF9wdXQoc28pO1xcbjE1NjQ6XFx0XFx0cmV0dXJuIGVycjtcXG4xNTY1OlxcdH1cXG4xNTY2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcXG4xNTY3OlxcdFxcbjE1Njg6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MjAuNTE3NDcxMjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MTg5ODg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIE5GU2QgQ29udHJvbCBGaWxlczogQSBRdWljayBMb29rKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hhbmdlIGluIGBzdmNfYWRkc29ja2AsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggTkZTZCBjb250cm9sIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcywgbGV0J3MgZnV6eiB0aGlzIHRoaW5nLiBUaGF0IGBlcnIgPSAtRUJVU1lgIGNoZWNrIGNvbWJpbmVkIHdpdGggYHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YWAgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUgb3IgYSBzdGF0ZSBtYW5hZ2VtZW50IHByb2JsZW0gdGhhdCBmdXp6aW5nIGNvdWxkIGV4cG9zZS5cblxuVGhlIGNoYW5nZSBpdHNlbGYgbG9va3Mgc3RyYWlnaHRmb3J3YXJkOyB0aGUgYE5GU0RgIGNvbmZpZyBlbmFibGVzIHRoZSBtb2RpZmllZCBjb2RlLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgcHJlcmVxdWlzaXRlIGNvbmZpZ3MuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBgTkZTRGAgZGVwZW5kcyBvbiB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBgSU5FVGAsIGBGSUxFX0xPQ0tJTkdgLCBhbmQgc28gb24uIE5vdGhpbmcgdW5leHBlY3RlZCB0aGVyZS4gU28sIGBORlNEYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkuIEFscmlnaHQsIGxldCdzIGNhbGwgaXQgYW5kIGdldCBhIHNldC1yZXN1bHQuIFRpbWUgdG8gbW92ZSBvbiBhbmQgc2VlIHdoYXQgdGhlIGZ1enppbmcgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg1MiwiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOToyNC44ODkzNzMzNjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzU4NTk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBzdmNfYWRkc29ja2AgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCB0byByZXR1cm4gYC1FQlVTWWAgaWYgYHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHdyaXRpbmcgdG8gbmZzZCBjb250cm9sIGZpbGVzIChlLmcuLCBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGApIGFuZCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZjX2FkZHNvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gYHN2Y19hZGRzb2NrYCBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgIHRvIHJldHVybiBgLUVCVVNZYCBpZiBgc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGFgIGlzIGFscmVhZHkgc2V0LiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgd3JpdGluZyB0byBuZnNkIGNvbnRyb2wgZmlsZXMgKGUuZy4sIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCkgYW5kIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOToyNC45NjY5NjgzNTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDQ1Njg2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOToyNC45Njc1NDk5NDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTUwMzk4MzQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpbXBsZSBjaGVjayB0byBwcmV2ZW50IGFkZGluZyBhIHNvY2tldCB0byBhIHN1bnJwYyBzZXJ2aWNlIGlmIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgc2V0LiBUaGlzIGlzIGEgbG9naWMgZml4IHRvIHByZXZlbnQgc3RhdGUgY29ycnVwdGlvbiBvciByZXNvdXJjZSBsZWFrcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWFkZCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZS4gS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYzRiZjZkYjE1YzVlNTRkMDFhNjY1NmYyMmUyNDIwOWZhMTU1ZWRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTY6Mzg6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXG5pbmRleCA1MGU1ZTdmNWI3NjJkLi5lOGNjNDMyOWYxMjgyIDEwMDY0NFxuLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXG5AQCAtMTU0MSw2ICsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXG4gXHRlcnIgPSAtRUlTQ09OTjtcbiBcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4gXHRcdGdvdG8gb3V0O1xuK1x0ZXJyID0gLUVCVVNZO1xuK1x0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbitcdFx0Z290byBvdXQ7XG4gXHRlcnIgPSAtRU5PRU5UO1xuIFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4gXHRcdGdvdG8gb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MjQuOTY3NTUwODg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDUzODg0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc3ZjX2FkZHNvY2tgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AsIHRoZXkndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gYHN2Y19hZGRzb2NrYC4gSSBzZWUgdGhhdCB0aGV5J3JlIGFkZGluZyBhIG5ldyBjaGVjayBzcGVjaWZpY2FsbHkgZm9yIGBzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGFgLiBFc3NlbnRpYWxseSwgdGhleSBhcmUgcHJldmVudGluZyB0aGUgYWRkaXRpb24gb2YgYSBzb2NrZXQgKGBzb2ApIHRvIHRoZSBzZXJ2aWNlIGlmIGl0ICphbHJlYWR5KiBoYXMgYHNrX3VzZXJfZGF0YWAgYXNzaWduZWQuIFRoZSBjb2RlIHNuaXBwZXQgY2xlYXJseSBzaG93cyB0aGlzOlxuXG5gYGBjXG5cdGVyciA9IC1FQlVTWTtcblx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcblx0XHRnb3RvIG91dDtcbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBkb3VibGUtYWRkIHNjZW5hcmlvIG9yIG1heWJlIGFuIGlzc3VlIHdoZXJlIGEgc29ja2V0IGlzIGluYWR2ZXJ0ZW50bHkgcmV1c2VkIGJlZm9yZSBpdCdzIHN1cHBvc2VkIHRvIGJlLiBJdCdzIGFib3V0IGVuc3VyaW5nIGEgc29ja2V0IGlzbid0IGFkZGVkIHRvIHRoZSBzZXJ2aWNlIGlmIGl0J3MgYWxyZWFkeSBcImluIHVzZVwiIG9yIGhhcyBzb21lIGFzc29jaWF0ZWQgc3RhdGUuIFRoaXMga2luZCBvZiBndWFyZCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gcHJldmVudCByZXNvdXJjZSBjb25mbGljdHMuXG5cbkkndmUgZXhhbWluZWQgdGhlIGNvZGUgY2FyZWZ1bGx5IGFuZCBJIGRvbid0IHNlZSBhbnkgaW1tZWRpYXRlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYmVpbmcgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZS4gSXQncyBqdXN0IGEgc2ltcGxlIG51bGwgY2hlY2sgb24gYSBwb2ludGVyLCBgc2tfdXNlcl9kYXRhYC4gS01TQU4sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGRldGVjdGluZyByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIHNpbXBseSBjaGVja3MgaWYgYSBwb2ludGVyIGlzIG5vbi1OVUxMLiBJdCdzIG1vcmUgb2YgYSBsb2dpYyBjaGVjayB0byBwcmV2ZW50IHBvdGVudGlhbCBidWdzIGxpa2UgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgZ2VuZXJhbCBsb2dpYyBlcnJvcnMgcmVsYXRlZCB0byBzb2NrZXQgc3RhdGUgbWFuYWdlbWVudC4gSXQgYXBwZWFycyB0byBwcm9hY3RpdmVseSBwcmV2ZW50IGEgcHJvYmxlbS5cblxuVGhlcmVmb3JlLCBnaXZlbiBteSBhc3Nlc3NtZW50LCBJJ2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLiBJdCBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgYXZlbnVlcyBmb3IgS01TQU4gdG8gZmluZCBhbiBpc3N1ZS4gSG93ZXZlciwgSSB3aWxsIHRha2UgYSBicmllZiBtb21lbnQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGFkZGl0aW9uIHRvIGJlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM5OjMwLjI3Mjk0MzUwN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N1bnJwYy9zdmNzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUzMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1MzE6XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNTMyOlxcdFxcdGlmIChzb2NrX25ldChzby1cXHUwMDNlc2spICE9IG5ldClcXG4xNTMzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1MzQ6XFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4xNTM1OlxcdFxcdGlmICgoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVCkgXFx1MDAyNlxcdTAwMjYgKHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcXG4xNTM2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1Mzc6XFx0XFx0ZXJyID0gIC1FUFJPVE9OT1NVUFBPUlQ7XFxuMTUzODpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbjE1Mzk6XFx0XFx0ICAgIHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXFxuMTU0MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQxOlxcdFxcdGVyciA9IC1FSVNDT05OO1xcbjE1NDI6XFx0XFx0aWYgKHNvLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxcbjE1NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU0NDpcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTU0NTpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpXFxuMTU0NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ3OlxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMTU0ODpcXHRcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcXG4xNTQ5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTA6XFx0XFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcXG4xNTUxOlxcdFxcdGlmIChJU19FUlIoc3ZzaykpIHtcXG4xNTUyOlxcdFxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbjE1NTM6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihzdnNrKTtcXG4xNTU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTU6XFx0XFx0fVxcbjE1NTY6XFx0XFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cXHUwMDNlc2tfc29jaywgc2luKTtcXG4xNTU3OlxcdFxcdGlmIChzYWxlbiBcXHUwMDNlPSAwKVxcbjE1NTg6XFx0XFx0XFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBzaW4sIHNhbGVuKTtcXG4xNTU5OlxcdFxcdHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MzAuMjczMDYzNTY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTg0NDMxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBhIHNhbml0eSBjaGVjaywgcmVhbGx5LCB0byBhdm9pZCBhZGRpbmcgYSBzb2NrZXQgd2hlcmUgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBwcmV2ZW50YXRpdmUgbWVhc3VyZSBhZ2FpbnN0IGEgbmFzdHkgYnVnIOKAkyBwZXJoYXBzIGEgcmVzb3VyY2UgbGVhaywgb3IgYSB1c2UtYWZ0ZXItZnJlZSwgb3Igc29tZSBraW5kIG9mIHN0YXRlIGNvcnJ1cHRpb24gZG93biB0aGUgbGluZS4gR29vZCBjYXRjaCwgYWN0dWFsbHkuXG5cbkkndmUgcmV2aWV3ZWQgdGhlIGNvZGUuIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbnMsIG5vIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIGRlZmluaXRlbHkgbm8gb2J2aW91cyBpbnN0YW5jZXMgb2YgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0aGUgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIsIG9yIEtNU0FOLCB0byBsb29rIGZvciB0aG9zZSBraW5kcyBvZiBpc3N1ZXMuIFRoZSBLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIgKEtBU0FOKSBpcyBwZXJmZWN0bHkgc3VmZmljaWVudCBoZXJlIHRvIGZpbmQgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgIHdoZW4gSSBjYWxsIGBzZXQtcmVzdWx0c2AuIEl0J3MgYSBjbGVhbiBmaXggd2l0aCBhIHdlbGwtcmVhc29uZWQganVzdGlmaWNhdGlvbiwgYW5kIHRoZSBLQVNBTiBjb3ZlcmFnZSBpcyBtb3JlIHRoYW4gYWRlcXVhdGUgZm9yIHRoaXMgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDAsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MzQuNDcxNTEwNDkxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIGEgc29ja2V0IHRvIGEgc3VucnBjIHNlcnZpY2UgaWYgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gcHJldmVudCBzdGF0ZSBjb3JydXB0aW9uIG9yIHJlc291cmNlIGxlYWtzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtYWRkKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzaW1wbGUgY2hlY2sgdG8gcHJldmVudCBhZGRpbmcgYSBzb2NrZXQgdG8gYSBzdW5ycGMgc2VydmljZSBpZiBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldC4gVGhpcyBpcyBhIGxvZ2ljIGZpeCB0byBwcmV2ZW50IHN0YXRlIGNvcnJ1cHRpb24gb3IgcmVzb3VyY2UgbGVha3MgKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1hZGQpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUuIEtNU0FOIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowkd7z9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-15 16:36:24 +0000 UTC FinishedAt: 2026-08-15 16:39:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD" ], "series_id": "3fc6f63b-2751-4e6a-8edf-93cd953867a5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "svc_addsock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdmNfYWRkc29jayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW1wbGUgY2hlY2sgdG8gcHJldmVudCBhZGRpbmcgYSBzb2NrZXQgdG8gYSBzdW5ycGMgc2VydmljZSBpZiBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldC4gVGhpcyBpcyBhIGxvZ2ljIGZpeCB0byBwcmV2ZW50IHN0YXRlIGNvcnJ1cHRpb24gb3IgcmVzb3VyY2UgbGVha3MgKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1hZGQpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUuIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBgc3ZjX2FkZHNvY2tgIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgdG8gcmV0dXJuIGAtRUJVU1lgIGlmIGBzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGFgIGlzIGFscmVhZHkgc2V0LiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgd3JpdGluZyB0byBuZnNkIGNvbnRyb2wgZmlsZXMgKGUuZy4sIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCkgYW5kIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2M0YmY2ZGIxNWM1ZTU0ZDAxYTY2NTZmMjJlMjQyMDlmYTE1NWVkZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDE2OjM4OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbkBAIC0xNTQxLDYgJiM0MzsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXG4gXHRlcnIgPSAtRUlTQ09OTjtcbiBcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdGVyciA9IC1FQlVTWTtcbiYjNDM7XHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXHRlcnIgPSAtRU5PRU5UO1xuIFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4gXHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBzdmNfYWRkc29ja2AgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCB0byByZXR1cm4gYC1FQlVTWWAgaWYgYHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB3cml0aW5nIHRvIG5mc2QgY29udHJvbCBmaWxlcyAoZS5nLiwgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYzRiZjZkYjE1YzVlNTRkMDFhNjY1NmYyMmUyNDIwOWZhMTU1ZWRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTY6Mzg6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xNTQxLDYgJiM0MzsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsCiAJZXJyID0gLUVJU0NPTk47CiAJaWYgKHNvLSZndDtzdGF0ZSAmZ3Q7IFNTX1VOQ09OTkVDVEVEKQogCQlnb3RvIG91dDsKJiM0MzsJZXJyID0gLUVCVVNZOwomIzQzOwlpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpCiYjNDM7CQlnb3RvIG91dDsKIAllcnIgPSAtRU5PRU5UOwogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQogCQlnb3RvIG91dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmV0L3N1bnJwYy9zdmNzb2NrLmMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBzdmNfYWRkc29ja2AgZnVuY3Rpb24gd2l0aGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyB0aGV5JiMzOTt2ZSBpbnNlcnRlZCBhIGNoZWNrOgoKYGBgYwoJZXJyID0gLUVCVVNZOwoJaWYgKHNvLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhKQoJCWdvdG8gb3V0OwpgYGAKClJpZ2h0IGF3YXksIG15IGV4cGVydCBtaW5kIGlzIHBhcnNpbmcgdGhpcy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJldmVudCBhZGRpbmcgYSBzb2NrZXQgKHByZXN1bWFibHkgYSBuZXcgc2VydmljZSBzb2NrZXQgcmVwcmVzZW50ZWQgYnkgYHNvYCkgaWYgaXRzIHVuZGVybHlpbmcgYHNrYCAoc29ja2V0IGtlcm5lbCkgYWxyZWFkeSBoYXMgYHNrX3VzZXJfZGF0YWAgc2V0LiBUaGUgaW50ZW50IGlzIGFsbW9zdCBjZXJ0YWlubHkgdG8gYXZvaWQgYSBjb25mbGljdCwgbGlrZWx5IHByZXZlbnRpbmcgZG91YmxlLXJlZ2lzdHJhdGlvbiBvciBtYW5hZ2luZyByZXNvdXJjZSBjb250ZW50aW9uLiBBIGJ1c3kgZXJyb3IgKGAtRUJVU1lgKSBzdWdnZXN0cyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgcHJldmVudGluZyByZXNvdXJjZSBjb250ZW50aW9uLiBUaGUgYGdvdG8gb3V0YCBpbW1lZGlhdGVseSBza2lwcyB0byB0aGUgZW5kLCByZXR1cm5pbmcgdGhlIGVycm9yLiBUaGlzIGlzIGNvbW1vbiB0byByZWxlYXNlIGFueSByZXNvdXJjZXMgdGhhdCB3ZXJlIGluaXRpYWxpemVkIHByaW9yIHRvIHRoZSB0ZXN0LgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjb25kaXRpb24gaXMgYmVpbmcgYWRkZWQuIFdoYXQgc2NlbmFyaW8gdHJpZ2dlcnMgYSBub24tTlVMTCBgc2tfdXNlcl9kYXRhYD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBhbGxvd2luZyBtdWx0aXBsZSBzZXJ2aWNlcyBvbiB0aGUgc2FtZSBzb2NrZXQga2VybmVsPyBXaGF0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3MgYXJlIGJlaW5nIGFkZHJlc3NlZD8gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhpcyBgbmV0L3N1bnJwY2AgbW9kdWxlIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2ggYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBJIG5lZWQgdG8ga25vdyB3aGVyZSBgc2tfdXNlcl9kYXRhYCBpcyBiZWluZyB1c2VkIGFuZCBpbml0aWFsaXplZC4gSSYjMzk7bGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gYHN2Y19hZGRzb2NrYCBpdHNlbGYsIHRoZW4gbG9vayBmb3IgYW55dGhpbmcgdGhhdCBzZXRzIGBza191c2VyX2RhdGFgIG9uIHRoYXQgc29ja2V0LiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlOyB0aGUgaW1wbGljYXRpb25zIG9mIHNraXBwaW5nIHRoZSBhZGRpdGlvbiBiYXNlZCBvbiB0aGlzIGNoZWNrIHJlcXVpcmUgYSBjYXJlZnVsIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfYWRkc29jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jPTE0Mzk9c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwNi0vKipcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MDc6ICogc3ZjX2FkZHNvY2sgLSBhZGQgYSBsaXN0ZW5lciBzb2NrZXQgdG8gYW4gUlBDIHNlcnZpY2Vcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDgtICogQHNlcnY6IHBvaW50ZXIgdG8gUlBDIHNlcnZpY2UgdG8gd2hpY2ggdG8gYWRkIGEgbmV3IGxpc3RlbmVyXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUxOC0gKi9cbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MTk6aW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTIwLVx0XHRjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTU2NS19XG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTY2OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHN2Y19hZGRzb2NrYCBVc2FnZSoqCgpPa2F5LCBzbyBgc3ZjX2FkZHNvY2tgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIHVzZWQgZXh0ZXJuYWxseSwgcG90ZW50aWFsbHkgYnkgb3RoZXIgbW9kdWxlcyBvciBldmVuIHRoZSBtYWluIGFwcGxpY2F0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbSwgYW5kIHRoYXQgbWVhbnMgdHJhY2luZyBpdHMgY2FsbCBzaXRlcy4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyAqY2FsbGVkKiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHN5c3RlbSBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMg4oCTIHByb2JhYmx5IGBubWAgdG8gY29uZmlybSBpdHMgc3ltYm9sIHZpc2liaWxpdHkgaWYgbmVlZGVkLCB0aGVuIGEgcXVpY2sgYGdyZXBgIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGBvYmpkdW1wIC10YCBvbiB0aGUgcmVsZXZhbnQgYmluYXJpZXMgb3IgbGlicmFyaWVzLCBvciBhIHNvdXJjZSBjb2RlIHNlYXJjaCBpZiBhdmFpbGFibGUsIHRvIGlkZW50aWZ5IGFsbCBjYWxsZXJzLiBPbmNlIEkgaGF2ZSB0aGUgY2FsbCBzaXRlcyBJIGNhbiBiZWdpbiBhIGRlZXBlciBhbmFseXNpcyBvZiB0aGUgcmVsYXRlZCBjb2RlIGFuZCBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIEkgc2hvdWxkIGZvY3VzIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2Y19hZGRzb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mc2QvbmZzY3RsLmM9NzI1PXN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkZmQoY2hhciAqYnVmLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuLS1cbmZzL25mc2QvbmZzY3RsLmMtNzQxLVx0c2VydiA9IG5uLVx1MDAzZW5mc2Rfc2VydjtcbmZzL25mc2QvbmZzY3RsLmM6NzQyOlx0ZXJyID0gc3ZjX2FkZHNvY2soc2VydiwgbmV0LCBmZCwgYnVmLCBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQsIGNyZWQpO1xuZnMvbmZzZC9uZnNjdGwuYy03NDMtXG4tLVxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oPTY1PXZvaWRcdFx0c3ZjX3NlbmQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCk7XG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmg6NjY6aW50XHRcdHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oLTY3LVx0XHRcdCAgICBjb25zdCBpbnQgZmQsIGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTE0Mzk9c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwNi0vKipcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MDc6ICogc3ZjX2FkZHNvY2sgLSBhZGQgYSBsaXN0ZW5lciBzb2NrZXQgdG8gYW4gUlBDIHNlcnZpY2Vcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDgtICogQHNlcnY6IHBvaW50ZXIgdG8gUlBDIHNlcnZpY2UgdG8gd2hpY2ggdG8gYWRkIGEgbmV3IGxpc3RlbmVyXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUxOC0gKi9cbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MTk6aW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTIwLVx0XHRjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTU2NS19XG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTY2OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIE5GU2QgQ29udHJvbCBGaWxlczogQSBQcm9taXNpbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBwcm9taXNpbmcgZnV6emluZyB0YXJnZXQ6IHRoZSBgX193cml0ZV9wb3J0c19hZGRmZGAgZnVuY3Rpb24gaW4gYGZzL25mc2QvbmZzY3RsLmNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHJlYWNoYWJsZSBieSB3cml0aW5nIHRvIE5GU2QgY29udHJvbCBmaWxlcywgbGlrZSBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAsIHJlYWxseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoYXQmIzM5O3MgYSBkaXJlY3QsIGFjY2Vzc2libGUgYXR0YWNrIHN1cmZhY2UuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhbGxvY2F0aW5nIHNvbWUgcmVzb3VyY2VzIHRvd2FyZHMgZnV6emluZy4KCk15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHRob3JvdWdobHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVjZXNzYXJ5IHRvIGVuYWJsZSBib3RoIGBmcy9uZnNkL25mc2N0bC5jYCBhbmQgYWxzbyBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgIHRvIGJlIGNlcnRhaW4gSSBoYXZlIHRoZSBjb3JyZWN0IGVudmlyb25tZW50IGZvciB0cmlnZ2VyaW5nIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBpbnZvbHZlZCwgdG8ga25vdyBpZiBJIGNhbiBlbmFibGUgdGhpcyBwYXRoIGVhc2lseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnNjdGwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mc2QvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9NYWtlZmlsZT0xMT1uZnNkLXlcdFx0XHQmIzQzOz0gdHJhY2Uub1xuZnMvbmZzZC9NYWtlZmlsZS0xMi1cbmZzL25mc2QvTWFrZWZpbGU6MTM6bmZzZC15IFx0XHRcdCYjNDM7PSBuZnNzdmMubyBuZnNjdGwubyBuZnNmaC5vIHZmcy5vIFxcXG5mcy9uZnNkL01ha2VmaWxlLTE0LVx0XHRcdCAgIGV4cG9ydC5vIGF1dGgubyBsb2NrZC5vIG5mc2NhY2hlLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDEzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIGEgRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIGBDT05GSUdfTkZTRGAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGhlcmUuIEdvdHRhIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBjb21lcyBpbnRvIHBsYXkuIE15IG5leHQgc3RlcCBpcyBnb2luZyB0byBiZSBkaWdnaW5nIGludG8gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBjb25uZWN0aW9uLCBnaXZlbiB0aGUgY29udGV4dC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2VybmVsIGxvZ2ljIHRoYXQgYWN0dWFsbHkgdXNlcyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIGEgY29uZGl0aW9uYWwgaW1wb3J0IHRoYXQgcmVsaWVzIG9uIGl0LiBIb3BlZnVsbHksIHRoaXMgZmlsZSB3aWxsIGlsbHVtaW5hdGUgdGhlIGRlcGVuZGVuY3kgcGF0aCBjbGVhcmx5LCBvciBhdCBsZWFzdCBwb2ludCBtZSB0b3dhcmQgb3RoZXIgbGlrZWx5IGN1bHByaXRzIGlmIGl04oCZcyBtb3JlIGluZGlyZWN0IHRoYW4gYW50aWNpcGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2Y3NvY2subyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9NYWtlZmlsZT0xMT1zdW5ycGMteSA6PSBjbG50Lm8geHBydC5vIHNvY2tsaWIubyB4cHJ0c29jay5vIHNjaGVkLm8gXFxcbm5ldC9zdW5ycGMvTWFrZWZpbGUtMTItXHQgICAgYXV0aC5vIGF1dGhfbnVsbC5vIGF1dGhfdGxzLm8gYXV0aF91bml4Lm8gXFxcbm5ldC9zdW5ycGMvTWFrZWZpbGU6MTM6XHQgICAgc3ZjLm8gc3Zjc29jay5vIHN2Y2F1dGgubyBzdmNhdXRoX3VuaXgubyBcXFxubmV0L3N1bnJwYy9NYWtlZmlsZS0xNC1cdCAgICBhZGRyLm8gcnBjYl9jbG50Lm8gdGltZXIubyB4ZHIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipSUEMgYW5kIE5GUyBEZXBlbmRlbmN5IENoZWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19TVU5SUENgIGlzIGVuYWJsZWQsIHRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IG90aGVyIE5GUy1yZWxhdGVkIGNvbmZpZ3VyYXRpb24sIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfTkZTRGAuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIHJlbHlpbmcgb24gaXQgdG8gZW5zdXJlIGEgc3RhYmxlIGFuZCBwcm9wZXJseSBjb25maWd1cmVkIE5GUyBzZXR1cC4gVGhpcyBpcyBhIHN0YW5kYXJkIHN0ZXA7IHlvdSBhbHdheXMgc3RhcnQgd2l0aCB0aGUgYmFzZSwgYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEkgaGF2ZSB0byBtYWtlIGNlcnRhaW4gdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4gY29uZmxpY3RzIG9yIG1pc3NpbmcgcGllY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZTRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mc2QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXG5mcy9uZnNkL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0zOS1cbmZzL25mc2QvS2NvbmZpZzo0MDpjb25maWcgTkZTRF9WMlxuZnMvbmZzZC9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTUwLVxuZnMvbmZzZC9LY29uZmlnOjUxOmNvbmZpZyBORlNEX1YyX0FDTFxuZnMvbmZzZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTU0LVxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxuZnMvbmZzZC9LY29uZmlnLTU2LVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTc2LVxuZnMvbmZzZC9LY29uZmlnOjc3OmNvbmZpZyBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctNzgtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy05My1cbmZzL25mc2QvS2NvbmZpZzo5NDpjb25maWcgTkZTRF9QTkZTXG5mcy9uZnNkL0tjb25maWctOTUtXHRib29sXG5mcy9uZnNkL0tjb25maWctOTYtXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTEwOS1cbmZzL25mc2QvS2NvbmZpZzoxMTA6Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTIzLVxuZnMvbmZzZC9LY29uZmlnOjEyNDpjb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1wmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNDAtXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXG5mcy9uZnNkL0tjb25maWctMTQyLVx0Ym9vbCBcJiMzNDtORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNTAtXG5mcy9uZnNkL0tjb25maWc6MTUxOmNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNjMtXG5mcy9uZnNkL0tjb25maWc6MTY0OmNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbmZzL25mc2QvS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNzktXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzk2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBjb25maWcgTkZTRGAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYGNvbmZpZyBORlNEYCByZWxpZXMgb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgZGlyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRvIG90aGVyIG1vZHVsZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyBpdCBhIGNvcmUgY29tcG9uZW50PyBEb2VzIGl0IGRlcGVuZCBvbiBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyBiZWluZyBsb2FkZWQsIG9yIGNlcnRhaW4gbmV0d29yayBjb25maWd1cmF0aW9ucz8gRG9lcyBpdCBpbnRlcmZhY2Ugd2l0aCB1c2VyLXNwYWNlIGRhZW1vbnMsIGFuZCBhcmUgdGhvc2UgZGVwZW5kZW5jaWVzIGV4cGxpY2l0IG9yIGltcGxpY2l0PyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnN1bHQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBtYXliZSBldmVuIHNvbWUga2VybmVsIHNvdXJjZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQga25vd2luZyAqd2hhdCogaXQgZGVwZW5kcyBvbiwgYnV0IGFsc28gdGhlICp3aHkqIC0gdW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgZGVwZW5kZW5jaWVzIGlzIGp1c3QgYXMgaW1wb3J0YW50LiBLbm93aW5nIHRoaXMgYWxsb3dzIG1lIHRvIGNvbmZpZGVudGx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0RcbmZzL25mc2QvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVFxuZnMvbmZzZC9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIEZJTEVfTE9DS0lOR1xuZnMvbmZzZC9LY29uZmlnOjY6XHRkZXBlbmRzIG9uIEZTTk9USUZZXG5mcy9uZnNkL0tjb25maWctNy1cdHNlbGVjdCBDUkMzMlxuLS1cbmZzL25mc2QvS2NvbmZpZy0xNi1cdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WM19BQ0xcbmZzL25mc2QvS2NvbmZpZzoxNzpcdGRlcGVuZHMgb24gTVVMVElVU0VSXG5mcy9uZnNkL0tjb25maWctMTgtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTQwPWNvbmZpZyBORlNEX1YyXG5mcy9uZnNkL0tjb25maWctNDEtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMiAoREVQUkVDQVRFRClcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzo0MjpcdGRlcGVuZHMgb24gTkZTRFxuZnMvbmZzZC9LY29uZmlnLTQzLVx0ZGVmYXVsdCBuXG4tLVxuZnMvbmZzZC9LY29uZmlnPTUxPWNvbmZpZyBORlNEX1YyX0FDTFxuZnMvbmZzZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIE5GU0RfVjJcbmZzL25mc2QvS2NvbmZpZy01NC1cbmZzL25mc2QvS2NvbmZpZz01NT1jb25maWcgTkZTRF9WM19BQ0xcbmZzL25mc2QvS2NvbmZpZy01Ni1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjMgQUNMIHByb3RvY29sIGV4dGVuc2lvblwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjU3Olx0ZGVwZW5kcyBvbiBORlNEXG5mcy9uZnNkL0tjb25maWctNTgtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTc3PWNvbmZpZyBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctNzgtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjc5Olx0ZGVwZW5kcyBvbiBORlNEIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG5mcy9uZnNkL0tjb25maWctODAtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4tLVxuZnMvbmZzZC9LY29uZmlnPTk3PWNvbmZpZyBORlNEX0JMT0NLTEFZT1VUXG5mcy9uZnNkL0tjb25maWctOTgtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgYmxvY2sgbGF5b3V0c1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjk5Olx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBCTE9DS1xuZnMvbmZzZC9LY29uZmlnLTEwMC1cdHNlbGVjdCBORlNEX1BORlNcbi0tXG5mcy9uZnNkL0tjb25maWc9MTEwPWNvbmZpZyBORlNEX1NDU0lMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTEyOlx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBCTE9DS1xuZnMvbmZzZC9LY29uZmlnLTExMy1cdHNlbGVjdCBORlNEX1BORlNcbi0tXG5mcy9uZnNkL0tjb25maWc9MTI0PWNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXG5mcy9uZnNkL0tjb25maWctMTI1LVx0Ym9vbCBcJiMzNDtORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTI2Olx0ZGVwZW5kcyBvbiBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctMTI3LVx0c2VsZWN0IE5GU0RfUE5GU1xuLS1cbmZzL25mc2QvS2NvbmZpZz0xNDE9Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcbmZzL25mc2QvS2NvbmZpZy0xNDItXHRib29sIFwmIzM0O05GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTQzOlx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBORlNfVjRfMlxuZnMvbmZzZC9LY29uZmlnLTE0NC1cdGhlbHBcbi0tXG5mcy9uZnNkL0tjb25maWc9MTUxPWNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE1MzpcdGRlcGVuZHMgb24gTkZTRF9WNCBcdTAwMjZcdTAwMjYgU0VDVVJJVFlcbmZzL25mc2QvS2NvbmZpZy0xNTQtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTE2ND1jb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXG5mcy9uZnNkL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzoxNjY6XHRkZXBlbmRzIG9uIE5GU0RfVjRcbmZzL25mc2QvS2NvbmZpZy0xNjctXHRkZWZhdWx0IG5cbi0tXG5mcy9uZnNkL0tjb25maWc9MTgwPWNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE4MjpcdGRlcGVuZHMgb24gTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnLTE4My1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODI5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOZXR3b3JrIEZpbGVzeXN0ZW0gRGVwZW5kZW5jaWVzIGFuZCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gZGFlbW9uLCBgTkZTRGAsIGFuZCBob3cgaXQgYWxsIGhhbmdzIHRvZ2V0aGVyLiBJdCBsb29rcyBsaWtlIGBORlNEYCBpcyBwcmV0dHkgZnVuZGFtZW50YWxseSBidWlsdCBvbiBgSU5FVGAgZm9yIGl0cyBuZXR3b3JrIHRyYW5zcG9ydCwgdGhhdCYjMzk7cyBleHBlY3RlZC4gVGhlbiwgaXQgcmVsaWVzIG9uIGBGSUxFX0xPQ0tJTkdgIHdoaWNoIG1ha2VzIHNlbnNlLCBhcyBhIGRpc3RyaWJ1dGVkIGZpbGVzeXN0ZW0gbmVlZHMgdG8gaGFuZGxlIGZpbGUgbG9ja2luZyBhbmQgY29uY3VycmVuY3kuIEl0IGlzIHVzaW5nIGBGU05PVElGWWAgdG8gZ2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGZpbGUgc3lzdGVtLiBBbmQsIG9mIGNvdXJzZSwgYSBuZXR3b3JrLWFjY2Vzc2libGUgZmlsZXN5c3RlbSBpcyBwcm9iYWJseSBiZWluZyB1c2VkIGJ5IG1vcmUgdGhhbiBvbmUgdXNlciwgc28gYE1VTFRJVVNFUmAgc3VwcG9ydCBpcyBpbXBvcnRhbnQuIEnigJltIHN0YXJ0aW5nIHRvIHNlZSB0aGUgYXJjaGl0ZWN0dXJlIGNsZWFybHkuCgpOb3csIEkmIzM5O20gc2hpZnRpbmcgZm9jdXMgdG8gYFNVTlJQQ2AgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgbmVlZHMgdG8gYmUgY29uZmlndXJlZCB0aGVyZSB0byBnZXQgYE5GU0RgIHJ1bm5pbmcgcHJvcGVybHkuIFdoYXQga2luZCBvZiBSUEMgc2V0dGluZ3MgZG8gSSBuZWVkIHRvIGNvbmNlcm4gbXlzZWxmIHdpdGg/IFZlcnNpb24gbnVtYmVycz8gQXV0aGVudGljYXRpb24/IFRyYW5zcG9ydD8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwcm90b2NvbCBmb3IgdGhlIGNsaWVudHMgdG9vLCBpdCBjb3VsZCBiZSB2MiwgdjMgb3IgdjQsIGV0Yy4uIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBnZXQgdGhlIHNldHRpbmdzIHNldCBhcHByb3ByaWF0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1VOUlBDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3N1bnJwYy9LY29uZmlnOjI6Y29uZmlnIFNVTlJQQ1xubmV0L3N1bnJwYy9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy01LVxubmV0L3N1bnJwYy9LY29uZmlnOjY6Y29uZmlnIFNVTlJQQ19HU1Ncbm5ldC9zdW5ycGMvS2NvbmZpZy03LVx0dHJpc3RhdGVcbi0tXG5uZXQvc3VucnBjL0tjb25maWctMTAtXG5uZXQvc3VucnBjL0tjb25maWc6MTE6Y29uZmlnIFNVTlJQQ19CQUNLQ0hBTk5FTFxubmV0L3N1bnJwYy9LY29uZmlnLTEyLVx0Ym9vbFxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0xNC1cbm5ldC9zdW5ycGMvS2NvbmZpZzoxNTpjb25maWcgU1VOUlBDX1NXQVBcbm5ldC9zdW5ycGMvS2NvbmZpZy0xNi1cdGJvb2xcbi0tXG5uZXQvc3VucnBjL0tjb25maWc9MTk9Y29uZmlnIFJQQ1NFQ19HU1NfS1JCNVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0zNS1cbm5ldC9zdW5ycGMvS2NvbmZpZzozNjpjb25maWcgU1VOUlBDX0RFQlVHXG5uZXQvc3VucnBjL0tjb25maWctMzctXHRib29sIFwmIzM0O1JQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTQ5LVxubmV0L3N1bnJwYy9LY29uZmlnOjUwOmNvbmZpZyBTVU5SUENfREVCVUdfVFJBQ0Vcbm5ldC9zdW5ycGMvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7UlBDOiBTZW5kIGRmcHJpbnRrKCkgb3V0cHV0IHRvIHRoZSB0cmFjZSBidWZmZXJcJiMzNDtcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNjMtXG5uZXQvc3VucnBjL0tjb25maWc6NjQ6Y29uZmlnIFNVTlJQQ19YUFJUX1JETUFcbm5ldC9zdW5ycGMvS2NvbmZpZy02NS1cdHRyaXN0YXRlIFwmIzM0O1JQQy1vdmVyLVJETUEgdHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBORlMgRGFlbW9uJiMzOTtzIFJQQyBEZXBlbmRlbmN5KioKCk9rYXksIHNvIHRoZSBzeXN0ZW0mIzM5O3MgaGlnaGxpZ2h0aW5nIHRoYXQgYFNVTlJQQ2AgaXMgYmVpbmcgcHVsbGVkIGluIGJ5IGBORlNEYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byAqaG93KiBleGFjdGx5IGBORlNEYCBpcyBzZWxlY3RpbmcgaXQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHBhdGguIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgc2VsZWN0aW9uIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIGlzc3VlcyBvciBwZXJmb3JtYW5jZSB0dW5pbmcuIExldCYjMzk7cyBzZWUgaG93IGBORlNEYCBpcyBjb25maWd1cmVkIHRvIGhhbmRsZSBSUEMgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBTVU5SUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0Rcbi0tXG5mcy9uZnNkL0tjb25maWctMTEtXHRzZWxlY3QgTE9DS0RcbmZzL25mc2QvS2NvbmZpZzoxMjpcdHNlbGVjdCBTVU5SUENcbmZzL25mc2QvS2NvbmZpZy0xMy1cdHNlbGVjdCBFWFBPUlRGU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzkwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqTkZTRCBDb25maWd1cmF0aW9uIGFuZCBGb2N1c2VkIEZ1enppbmcqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgcGxhbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSB0aGF0IGVuYWJsaW5nIGBORlNEYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc3RlcCBoZXJlLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBuZXh0IGxvZ2ljYWwgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbiB3ZSBuZWVkIHRvIHRhcmdldCB3aXRoIGZ1enppbmcuIEl0IGxvb2tzIGxpa2UgYHN2Y19hZGRzb2NrYCBpcyB0aGUgcHJpbWUgY2FuZGlkYXRlLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBJJiMzOTt2ZSBnb3QgdG8gY29uZmlybSB0aGF0IGludHVpdGlvbiwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIGRvIHRoYXQgaXMgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gR290dGEgZ2V0IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBiZWZvcmUgSSBjb21taXQgdG8gdGhyb3dpbmcgYSBidW5jaCBvZiBmdXp6aW5nIHJlc291cmNlcyBhdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Y3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUxOTpcdGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxuMTUyMDpcdFx0XHRjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4xNTIxOlx0e1xuMTUyMjpcdFx0aW50IGVyciA9IDA7XG4xNTIzOlx0XHRzdHJ1Y3Qgc29ja2V0ICpzbyA9IHNvY2tmZF9sb29rdXAoZmQsIFx1MDAyNmVycik7XG4xNTI0Olx0XHRzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2sgPSBOVUxMO1xuMTUyNTpcdFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjtcbjE1MjY6XHRcdHN0cnVjdCBzb2NrYWRkciAqc2luID0gKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHI7XG4xNTI3Olx0XHRpbnQgc2FsZW47XG4xNTI4Olx0XG4xNTI5Olx0XHRpZiAoIXNvKVxuMTUzMDpcdFx0XHRyZXR1cm4gZXJyO1xuMTUzMTpcdFx0ZXJyID0gLUVJTlZBTDtcbjE1MzI6XHRcdGlmIChzb2NrX25ldChzby1cdTAwM2VzaykgIT0gbmV0KVxuMTUzMzpcdFx0XHRnb3RvIG91dDtcbjE1MzQ6XHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4xNTM1Olx0XHRpZiAoKHNvLVx1MDAzZXNrLVx1MDAzZXNrX2ZhbWlseSAhPSBQRl9JTkVUKSBcdTAwMjZcdTAwMjYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX2ZhbWlseSAhPSBQRl9JTkVUNikpXG4xNTM2Olx0XHRcdGdvdG8gb3V0O1xuMTUzNzpcdFx0ZXJyID0gIC1FUFJPVE9OT1NVUFBPUlQ7XG4xNTM4Olx0XHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4xNTM5Olx0XHQgICAgc28tXHUwMDNlc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4xNTQwOlx0XHRcdGdvdG8gb3V0O1xuMTU0MTpcdFx0ZXJyID0gLUVJU0NPTk47XG4xNTQyOlx0XHRpZiAoc28tXHUwMDNlc3RhdGUgXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxuMTU0MzpcdFx0XHRnb3RvIG91dDtcbjE1NDQ6XHRcdGVyciA9IC1FQlVTWTtcbjE1NDU6XHRcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpXG4xNTQ2Olx0XHRcdGdvdG8gb3V0O1xuMTU0NzpcdFx0ZXJyID0gLUVOT0VOVDtcbjE1NDg6XHRcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuMTU0OTpcdFx0XHRnb3RvIG91dDtcbjE1NTA6XHRcdHN2c2sgPSBzdmNfc2V0dXBfc29ja2V0KHNlcnYsIHNvLCBTVkNfU09DS19ERUZBVUxUUyk7XG4xNTUxOlx0XHRpZiAoSVNfRVJSKHN2c2spKSB7XG4xNTUyOlx0XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuMTU1MzpcdFx0XHRlcnIgPSBQVFJfRVJSKHN2c2spO1xuMTU1NDpcdFx0XHRnb3RvIG91dDtcbjE1NTU6XHRcdH1cbjE1NTY6XHRcdHNhbGVuID0ga2VybmVsX2dldHNvY2tuYW1lKHN2c2stXHUwMDNlc2tfc29jaywgc2luKTtcbjE1NTc6XHRcdGlmIChzYWxlbiBcdTAwM2U9IDApXG4xNTU4Olx0XHRcdHN2Y194cHJ0X3NldF9sb2NhbChcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIHNpbiwgc2FsZW4pO1xuMTU1OTpcdFx0c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9jcmVkID0gZ2V0X2NyZWQoY3JlZCk7XG4xNTYwOlx0XHRzdmNfYWRkX25ld19wZXJtX3hwcnQoc2VydiwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0KTtcbjE1NjE6XHRcdHJldHVybiBzdmNfb25lX3NvY2tfbmFtZShzdnNrLCBuYW1lX3JldHVybiwgbGVuKTtcbjE1NjI6XHRvdXQ6XG4xNTYzOlx0XHRzb2NrZmRfcHV0KHNvKTtcbjE1NjQ6XHRcdHJldHVybiBlcnI7XG4xNTY1Olx0fVxuMTU2NjpcdEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcbjE1Njc6XHRcbjE1Njg6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODUyCgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIE5GU2QgQ29udHJvbCBGaWxlczogQSBRdWljayBMb29rKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoYW5nZSBpbiBgc3ZjX2FkZHNvY2tgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZSB0aHJvdWdoIE5GU2QgY29udHJvbCBmaWxlcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMsIGxldCYjMzk7cyBmdXp6IHRoaXMgdGhpbmcuIFRoYXQgYGVyciA9IC1FQlVTWWAgY2hlY2sgY29tYmluZWQgd2l0aCBgc28tJmd0O3NrLSZndDtza191c2VyX2RhdGFgIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIG9yIGEgc3RhdGUgbWFuYWdlbWVudCBwcm9ibGVtIHRoYXQgZnV6emluZyBjb3VsZCBleHBvc2UuCgpUaGUgY2hhbmdlIGl0c2VsZiBsb29rcyBzdHJhaWdodGZvcndhcmQ7IHRoZSBgTkZTRGAgY29uZmlnIGVuYWJsZXMgdGhlIG1vZGlmaWVkIGNvZGUuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgcHJlcmVxdWlzaXRlIGNvbmZpZ3MuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBgTkZTRGAgZGVwZW5kcyBvbiB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBgSU5FVGAsIGBGSUxFX0xPQ0tJTkdgLCBhbmQgc28gb24uIE5vdGhpbmcgdW5leHBlY3RlZCB0aGVyZS4gU28sIGBORlNEYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkuIEFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGl0IGFuZCBnZXQgYSBzZXQtcmVzdWx0LiBUaW1lIHRvIG1vdmUgb24gYW5kIHNlZSB3aGF0IHRoZSBmdXp6aW5nIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBzdmNfYWRkc29ja2AgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCB0byByZXR1cm4gYC1FQlVTWWAgaWYgYHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB3cml0aW5nIHRvIG5mc2QgY29udHJvbCBmaWxlcyAoZS5nLiwgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdmNfYWRkc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gYHN2Y19hZGRzb2NrYCBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgIHRvIHJldHVybiBgLUVCVVNZYCBpZiBgc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHdyaXRpbmcgdG8gbmZzZCBjb250cm9sIGZpbGVzIChlLmcuLCBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGApIGFuZCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIGEgc29ja2V0IHRvIGEgc3VucnBjIHNlcnZpY2UgaWYgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gcHJldmVudCBzdGF0ZSBjb3JydXB0aW9uIG9yIHJlc291cmNlIGxlYWtzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtYWRkKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYzRiZjZkYjE1YzVlNTRkMDFhNjY1NmYyMmUyNDIwOWZhMTU1ZWRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTY6Mzg6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xNTQxLDYgJiM0MzsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsCiAJZXJyID0gLUVJU0NPTk47CiAJaWYgKHNvLSZndDtzdGF0ZSAmZ3Q7IFNTX1VOQ09OTkVDVEVEKQogCQlnb3RvIG91dDsKJiM0MzsJZXJyID0gLUVCVVNZOwomIzQzOwlpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpCiYjNDM7CQlnb3RvIG91dDsKIAllcnIgPSAtRU5PRU5UOwogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQogCQlnb3RvIG91dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc3ZjX2FkZHNvY2tgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBJbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgLCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiBgc3ZjX2FkZHNvY2tgLiBJIHNlZSB0aGF0IHRoZXkmIzM5O3JlIGFkZGluZyBhIG5ldyBjaGVjayBzcGVjaWZpY2FsbHkgZm9yIGBzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YWAuIEVzc2VudGlhbGx5LCB0aGV5IGFyZSBwcmV2ZW50aW5nIHRoZSBhZGRpdGlvbiBvZiBhIHNvY2tldCAoYHNvYCkgdG8gdGhlIHNlcnZpY2UgaWYgaXQgKmFscmVhZHkqIGhhcyBgc2tfdXNlcl9kYXRhYCBhc3NpZ25lZC4gVGhlIGNvZGUgc25pcHBldCBjbGVhcmx5IHNob3dzIHRoaXM6CgpgYGBjCgllcnIgPSAtRUJVU1k7CglpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpCgkJZ290byBvdXQ7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgZG91YmxlLWFkZCBzY2VuYXJpbyBvciBtYXliZSBhbiBpc3N1ZSB3aGVyZSBhIHNvY2tldCBpcyBpbmFkdmVydGVudGx5IHJldXNlZCBiZWZvcmUgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUuIEl0JiMzOTtzIGFib3V0IGVuc3VyaW5nIGEgc29ja2V0IGlzbiYjMzk7dCBhZGRlZCB0byB0aGUgc2VydmljZSBpZiBpdCYjMzk7cyBhbHJlYWR5ICYjMzQ7aW4gdXNlJiMzNDsgb3IgaGFzIHNvbWUgYXNzb2NpYXRlZCBzdGF0ZS4gVGhpcyBraW5kIG9mIGd1YXJkIGlzIGEgZ29vZCBwcmFjdGljZSB0byBwcmV2ZW50IHJlc291cmNlIGNvbmZsaWN0cy4KCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGNhcmVmdWxseSBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBiZWluZyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBqdXN0IGEgc2ltcGxlIG51bGwgY2hlY2sgb24gYSBwb2ludGVyLCBgc2tfdXNlcl9kYXRhYC4gS01TQU4sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGRldGVjdGluZyByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIHNpbXBseSBjaGVja3MgaWYgYSBwb2ludGVyIGlzIG5vbi1OVUxMLiBJdCYjMzk7cyBtb3JlIG9mIGEgbG9naWMgY2hlY2sgdG8gcHJldmVudCBwb3RlbnRpYWwgYnVncyBsaWtlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGdlbmVyYWwgbG9naWMgZXJyb3JzIHJlbGF0ZWQgdG8gc29ja2V0IHN0YXRlIG1hbmFnZW1lbnQuIEl0IGFwcGVhcnMgdG8gcHJvYWN0aXZlbHkgcHJldmVudCBhIHByb2JsZW0uCgpUaGVyZWZvcmUsIGdpdmVuIG15IGFzc2Vzc21lbnQsIEkmIzM5O2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIEtNU0FOIHRvIGZpbmQgYW4gaXNzdWUuIEhvd2V2ZXIsIEkgd2lsbCB0YWtlIGEgYnJpZWYgbW9tZW50IHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZSBhcm91bmQgdGhpcyBhZGRpdGlvbiB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTMwOlx0XHRcdHJldHVybiBlcnI7XG4xNTMxOlx0XHRlcnIgPSAtRUlOVkFMO1xuMTUzMjpcdFx0aWYgKHNvY2tfbmV0KHNvLVx1MDAzZXNrKSAhPSBuZXQpXG4xNTMzOlx0XHRcdGdvdG8gb3V0O1xuMTUzNDpcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbjE1MzU6XHRcdGlmICgoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQpIFx1MDAyNlx1MDAyNiAoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcbjE1MzY6XHRcdFx0Z290byBvdXQ7XG4xNTM3Olx0XHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcbjE1Mzg6XHRcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbjE1Mzk6XHRcdCAgICBzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjE1NDA6XHRcdFx0Z290byBvdXQ7XG4xNTQxOlx0XHRlcnIgPSAtRUlTQ09OTjtcbjE1NDI6XHRcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4xNTQzOlx0XHRcdGdvdG8gb3V0O1xuMTU0NDpcdFx0ZXJyID0gLUVCVVNZO1xuMTU0NTpcdFx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbjE1NDY6XHRcdFx0Z290byBvdXQ7XG4xNTQ3Olx0XHRlcnIgPSAtRU5PRU5UO1xuMTU0ODpcdFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4xNTQ5Olx0XHRcdGdvdG8gb3V0O1xuMTU1MDpcdFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcbjE1NTE6XHRcdGlmIChJU19FUlIoc3ZzaykpIHtcbjE1NTI6XHRcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4xNTUzOlx0XHRcdGVyciA9IFBUUl9FUlIoc3Zzayk7XG4xNTU0Olx0XHRcdGdvdG8gb3V0O1xuMTU1NTpcdFx0fVxuMTU1NjpcdFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cdTAwM2Vza19zb2NrLCBzaW4pO1xuMTU1NzpcdFx0aWYgKHNhbGVuIFx1MDAzZT0gMClcbjE1NTg6XHRcdFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc2luLCBzYWxlbik7XG4xNTU5Olx0XHRzdnNrLVx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0MAoJCQkJCQkJb3V0cHV0OiAxMjgKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGEgc2FuaXR5IGNoZWNrLCByZWFsbHksIHRvIGF2b2lkIGFkZGluZyBhIHNvY2tldCB3aGVyZSBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldC4gVGhpcyBpcyBtb3N0IGxpa2VseSBhIHByZXZlbnRhdGl2ZSBtZWFzdXJlIGFnYWluc3QgYSBuYXN0eSBidWcg4oCTIHBlcmhhcHMgYSByZXNvdXJjZSBsZWFrLCBvciBhIHVzZS1hZnRlci1mcmVlLCBvciBzb21lIGtpbmQgb2Ygc3RhdGUgY29ycnVwdGlvbiBkb3duIHRoZSBsaW5lLiBHb29kIGNhdGNoLCBhY3R1YWxseS4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSBjb2RlLiBUaGVyZSYjMzk7cyBub3RoaW5nIGhlcmUgdGhhdCYjMzk7cyBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbnMsIG5vIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIGRlZmluaXRlbHkgbm8gb2J2aW91cyBpbnN0YW5jZXMgb2YgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQgbWVhbnMgd2UgZG9uJiMzOTt0IG5lZWQgdGhlIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyLCBvciBLTVNBTiwgdG8gbG9vayBmb3IgdGhvc2Uga2luZHMgb2YgaXNzdWVzLiBUaGUgS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyIChLQVNBTikgaXMgcGVyZmVjdGx5IHN1ZmZpY2llbnQgaGVyZSB0byBmaW5kIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgIHdoZW4gSSBjYWxsIGBzZXQtcmVzdWx0c2AuIEl0JiMzOTtzIGEgY2xlYW4gZml4IHdpdGggYSB3ZWxsLXJlYXNvbmVkIGp1c3RpZmljYXRpb24sIGFuZCB0aGUgS0FTQU4gY292ZXJhZ2UgaXMgbW9yZSB0aGFuIGFkZXF1YXRlIGZvciB0aGlzIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIGEgc29ja2V0IHRvIGEgc3VucnBjIHNlcnZpY2UgaWYgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gcHJldmVudCBzdGF0ZSBjb3JydXB0aW9uIG9yIHJlc291cmNlIGxlYWtzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtYWRkKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNpbXBsZSBjaGVjayB0byBwcmV2ZW50IGFkZGluZyBhIHNvY2tldCB0byBhIHN1bnJwYyBzZXJ2aWNlIGlmIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgc2V0LiBUaGlzIGlzIGEgbG9naWMgZml4IHRvIHByZXZlbnQgc3RhdGUgY29ycnVwdGlvbiBvciByZXNvdXJjZSBsZWFrcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWFkZCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZS4gS01TQU4gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzg6NDYuMDQwMjE0Nzc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzEzMzM1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIGEgc29ja2V0IHRvIGEgc3VucnBjIHNlcnZpY2UgaWYgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gcHJldmVudCBzdGF0ZSBjb3JydXB0aW9uIG9yIHJlc291cmNlIGxlYWtzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtYWRkKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBgc3ZjX2FkZHNvY2tgIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgdG8gcmV0dXJuIGAtRUJVU1lgIGlmIGBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB3cml0aW5nIHRvIG5mc2QgY29udHJvbCBmaWxlcyAoZS5nLiwgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM4OjQ2LjA0MDIyMTIzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcxMjg5NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2M0YmY2ZGIxNWM1ZTU0ZDAxYTY2NTZmMjJlMjQyMDlmYTE1NWVkZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjozODo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXFxuaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXFxuQEAgLTE1NDEsNiArMTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxcbiBcXHRlcnIgPSAtRUlTQ09OTjtcXG4gXFx0aWYgKHNvLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4rXFx0ZXJyID0gLUVCVVNZO1xcbitcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHRlcnIgPSAtRU5PRU5UO1xcbiBcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM4OjQ2LjYxMjMzNDA2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM4MzU0NjI5NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfYWRkc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBgc3ZjX2FkZHNvY2tgIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgdG8gcmV0dXJuIGAtRUJVU1lgIGlmIGBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB3cml0aW5nIHRvIG5mc2QgY29udHJvbCBmaWxlcyAoZS5nLiwgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNjNGJmNmRiMTVjNWU1NGQwMWE2NjU2ZjIyZTI0MjA5ZmExNTVlZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjozODo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xuKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbkBAIC0xNTQxLDYgKzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcbiBcdGVyciA9IC1FSVNDT05OO1xuIFx0aWYgKHNvLVx1MDAzZXN0YXRlIFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcbiBcdFx0Z290byBvdXQ7XG4rXHRlcnIgPSAtRUJVU1k7XG4rXHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuK1x0XHRnb3RvIG91dDtcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbiBcdFx0Z290byBvdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozODo0Ni42MTIzMzU3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzUxNjk4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZXQvc3VucnBjL3N2Y3NvY2suYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBzdmNfYWRkc29ja2AgZnVuY3Rpb24gd2l0aGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyB0aGV5J3ZlIGluc2VydGVkIGEgY2hlY2s6XG5cbmBgYGNcblx0ZXJyID0gLUVCVVNZO1xuXHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuXHRcdGdvdG8gb3V0O1xuYGBgXG5cblJpZ2h0IGF3YXksIG15IGV4cGVydCBtaW5kIGlzIHBhcnNpbmcgdGhpcy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IGFkZGluZyBhIHNvY2tldCAocHJlc3VtYWJseSBhIG5ldyBzZXJ2aWNlIHNvY2tldCByZXByZXNlbnRlZCBieSBgc29gKSBpZiBpdHMgdW5kZXJseWluZyBgc2tgIChzb2NrZXQga2VybmVsKSBhbHJlYWR5IGhhcyBgc2tfdXNlcl9kYXRhYCBzZXQuIFRoZSBpbnRlbnQgaXMgYWxtb3N0IGNlcnRhaW5seSB0byBhdm9pZCBhIGNvbmZsaWN0LCBsaWtlbHkgcHJldmVudGluZyBkb3VibGUtcmVnaXN0cmF0aW9uIG9yIG1hbmFnaW5nIHJlc291cmNlIGNvbnRlbnRpb24uIEEgYnVzeSBlcnJvciAoYC1FQlVTWWApIHN1Z2dlc3RzIHRoZXkgYXJlIHNwZWNpZmljYWxseSBwcmV2ZW50aW5nIHJlc291cmNlIGNvbnRlbnRpb24uIFRoZSBgZ290byBvdXRgIGltbWVkaWF0ZWx5IHNraXBzIHRvIHRoZSBlbmQsIHJldHVybmluZyB0aGUgZXJyb3IuIFRoaXMgaXMgY29tbW9uIHRvIHJlbGVhc2UgYW55IHJlc291cmNlcyB0aGF0IHdlcmUgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdGhlIHRlc3QuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY29uZGl0aW9uIGlzIGJlaW5nIGFkZGVkLiBXaGF0IHNjZW5hcmlvIHRyaWdnZXJzIGEgbm9uLU5VTEwgYHNrX3VzZXJfZGF0YWA/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYWxsb3dpbmcgbXVsdGlwbGUgc2VydmljZXMgb24gdGhlIHNhbWUgc29ja2V0IGtlcm5lbD8gV2hhdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHJlc291cmNlIGxlYWtzIGFyZSBiZWluZyBhZGRyZXNzZWQ/IEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhpcyBgbmV0L3N1bnJwY2AgbW9kdWxlIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2ggYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBJIG5lZWQgdG8ga25vdyB3aGVyZSBgc2tfdXNlcl9kYXRhYCBpcyBiZWluZyB1c2VkIGFuZCBpbml0aWFsaXplZC4gSSdsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byBgc3ZjX2FkZHNvY2tgIGl0c2VsZiwgdGhlbiBsb29rIGZvciBhbnl0aGluZyB0aGF0IHNldHMgYHNrX3VzZXJfZGF0YWAgb24gdGhhdCBzb2NrZXQuIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2U7IHRoZSBpbXBsaWNhdGlvbnMgb2Ygc2tpcHBpbmcgdGhlIGFkZGl0aW9uIGJhc2VkIG9uIHRoaXMgY2hlY2sgcmVxdWlyZSBhIGNhcmVmdWwgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozODo1MS4xNDc1MDgwNDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ5NDkzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX2FkZHNvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zdmNzb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9zdmNzb2NrLmM9MTQzOT1zdGF0aWMgc3RydWN0IHN2Y19zb2NrICpzdmNfc2V0dXBfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqc2VydixcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDYtLyoqXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTUwNzogKiBzdmNfYWRkc29jayAtIGFkZCBhIGxpc3RlbmVyIHNvY2tldCB0byBhbiBSUEMgc2VydmljZVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDgtICogQHNlcnY6IHBvaW50ZXIgdG8gUlBDIHNlcnZpY2UgdG8gd2hpY2ggdG8gYWRkIGEgbmV3IGxpc3RlbmVyXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTE4LSAqL1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MTk6aW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUyMC1cXHRcXHRjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTY1LX1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTY2OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTY3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozODo1MS4yMzI0NjkyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDg3NzcwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHN2Y19hZGRzb2NrYCBVc2FnZSoqXG5cbk9rYXksIHNvIGBzdmNfYWRkc29ja2AgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGV4dGVybmFsbHksIHBvdGVudGlhbGx5IGJ5IG90aGVyIG1vZHVsZXMgb3IgZXZlbiB0aGUgbWFpbiBhcHBsaWNhdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0sIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgaXRzIGNhbGwgc2l0ZXMuIEtub3dpbmcgd2hlcmUgaXQncyAqY2FsbGVkKiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHN5c3RlbSBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyDigJMgcHJvYmFibHkgYG5tYCB0byBjb25maXJtIGl0cyBzeW1ib2wgdmlzaWJpbGl0eSBpZiBuZWVkZWQsIHRoZW4gYSBxdWljayBgZ3JlcGAgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgYG9iamR1bXAgLXRgIG9uIHRoZSByZWxldmFudCBiaW5hcmllcyBvciBsaWJyYXJpZXMsIG9yIGEgc291cmNlIGNvZGUgc2VhcmNoIGlmIGF2YWlsYWJsZSwgdG8gaWRlbnRpZnkgYWxsIGNhbGxlcnMuIE9uY2UgSSBoYXZlIHRoZSBjYWxsIHNpdGVzIEkgY2FuIGJlZ2luIGEgZGVlcGVyIGFuYWx5c2lzIG9mIHRoZSByZWxhdGVkIGNvZGUgYW5kIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgSSBzaG91bGQgZm9jdXMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozODo1NC4xODEyNDg1MTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyODI5NzQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdmNfYWRkc29ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9uZnNjdGwuYz03MjU9c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19hZGRmZChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuLS1cXG5mcy9uZnNkL25mc2N0bC5jLTc0MS1cXHRzZXJ2ID0gbm4tXFx1MDAzZW5mc2Rfc2VydjtcXG5mcy9uZnNkL25mc2N0bC5jOjc0MjpcXHRlcnIgPSBzdmNfYWRkc29jayhzZXJ2LCBuZXQsIGZkLCBidWYsIFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCwgY3JlZCk7XFxuZnMvbmZzZC9uZnNjdGwuYy03NDMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmg9NjU9dm9pZFxcdFxcdHN2Y19zZW5kKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApO1xcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaDo2NjppbnRcXHRcXHRzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgtNjctXFx0XFx0XFx0ICAgIGNvbnN0IGludCBmZCwgY2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xNDM5PXN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwNi0vKipcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTA3OiAqIHN2Y19hZGRzb2NrIC0gYWRkIGEgbGlzdGVuZXIgc29ja2V0IHRvIGFuIFJQQyBzZXJ2aWNlXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwOC0gKiBAc2VydjogcG9pbnRlciB0byBSUEMgc2VydmljZSB0byB3aGljaCB0byBhZGQgYSBuZXcgbGlzdGVuZXJcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MTgtICovXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTUxOTppbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTIwLVxcdFxcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjUtfVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1NjY6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM4OjU1LjgwOTU1MjkwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjEyMTk5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBORlNkIENvbnRyb2wgRmlsZXM6IEEgUHJvbWlzaW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCBhIHByb21pc2luZyBmdXp6aW5nIHRhcmdldDogdGhlIGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBmdW5jdGlvbiBpbiBgZnMvbmZzZC9uZnNjdGwuY2AuIFRoZSBmYWN0IHRoYXQgaXQncyByZWFjaGFibGUgYnkgd3JpdGluZyB0byBORlNkIGNvbnRyb2wgZmlsZXMsIGxpa2UgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgLCByZWFsbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGF0J3MgYSBkaXJlY3QsIGFjY2Vzc2libGUgYXR0YWNrIHN1cmZhY2UuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhbGxvY2F0aW5nIHNvbWUgcmVzb3VyY2VzIHRvd2FyZHMgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWNlc3NhcnkgdG8gZW5hYmxlIGJvdGggYGZzL25mc2QvbmZzY3RsLmNgIGFuZCBhbHNvIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgdG8gYmUgY2VydGFpbiBJIGhhdmUgdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQgZm9yIHRyaWdnZXJpbmcgaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGludm9sdmVkLCB0byBrbm93IGlmIEkgY2FuIGVuYWJsZSB0aGlzIHBhdGggZWFzaWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTc2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM4OjU5LjI3MDc3NDgwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM2NzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnNjdGwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnNkL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvTWFrZWZpbGU9MTE9bmZzZC15XFx0XFx0XFx0Kz0gdHJhY2Uub1xcbmZzL25mc2QvTWFrZWZpbGUtMTItXFxuZnMvbmZzZC9NYWtlZmlsZToxMzpuZnNkLXkgXFx0XFx0XFx0Kz0gbmZzc3ZjLm8gbmZzY3RsLm8gbmZzZmgubyB2ZnMubyBcXFxcXFxuZnMvbmZzZC9NYWtlZmlsZS0xNC1cXHRcXHRcXHQgICBleHBvcnQubyBhdXRoLm8gbG9ja2QubyBuZnNjYWNoZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzg6NTkuMzE5MTQ2NzY3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxODAwNzY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ORlNEYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgaGVyZS4gR290dGEgdHJhY2sgZG93biB3aGVyZSB0aGlzIGNvbWVzIGludG8gcGxheS4gTXkgbmV4dCBzdGVwIGlzIGdvaW5nIHRvIGJlIGRpZ2dpbmcgaW50byBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGNvbm5lY3Rpb24sIGdpdmVuIHRoZSBjb250ZXh0LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtlcm5lbCBsb2dpYyB0aGF0IGFjdHVhbGx5IHVzZXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBhIGNvbmRpdGlvbmFsIGltcG9ydCB0aGF0IHJlbGllcyBvbiBpdC4gSG9wZWZ1bGx5LCB0aGlzIGZpbGUgd2lsbCBpbGx1bWluYXRlIHRoZSBkZXBlbmRlbmN5IHBhdGggY2xlYXJseSwgb3IgYXQgbGVhc3QgcG9pbnQgbWUgdG93YXJkIG90aGVyIGxpa2VseSBjdWxwcml0cyBpZiBpdOKAmXMgbW9yZSBpbmRpcmVjdCB0aGFuIGFudGljaXBhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDEzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MDIuMjM3MTU2NTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTkzNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y3NvY2sub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvTWFrZWZpbGU9MTE9c3VucnBjLXkgOj0gY2xudC5vIHhwcnQubyBzb2NrbGliLm8geHBydHNvY2subyBzY2hlZC5vIFxcXFxcXG5uZXQvc3VucnBjL01ha2VmaWxlLTEyLVxcdCAgICBhdXRoLm8gYXV0aF9udWxsLm8gYXV0aF90bHMubyBhdXRoX3VuaXgubyBcXFxcXFxubmV0L3N1bnJwYy9NYWtlZmlsZToxMzpcXHQgICAgc3ZjLm8gc3Zjc29jay5vIHN2Y2F1dGgubyBzdmNhdXRoX3VuaXgubyBcXFxcXFxubmV0L3N1bnJwYy9NYWtlZmlsZS0xNC1cXHQgICAgYWRkci5vIHJwY2JfY2xudC5vIHRpbWVyLm8geGRyLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOTowMi4yODI3NTcwOThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgyNTk5NjQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipSUEMgYW5kIE5GUyBEZXBlbmRlbmN5IENoZWNrKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1NVTlJQQ2AgaXMgZW5hYmxlZCwgdGhhdCdzIGEgZ2l2ZW4uIE5vdywgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBvdGhlciBORlMtcmVsYXRlZCBjb25maWd1cmF0aW9uLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX05GU0RgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIHJlbHlpbmcgb24gaXQgdG8gZW5zdXJlIGEgc3RhYmxlIGFuZCBwcm9wZXJseSBjb25maWd1cmVkIE5GUyBzZXR1cC4gVGhpcyBpcyBhIHN0YW5kYXJkIHN0ZXA7IHlvdSBhbHdheXMgc3RhcnQgd2l0aCB0aGUgYmFzZSwgYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEkgaGF2ZSB0byBtYWtlIGNlcnRhaW4gdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4gY29uZmxpY3RzIG9yIG1pc3NpbmcgcGllY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzU2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MDguMTA4NzU3MzczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA2NjkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZTRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnNkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbmZzZC9LY29uZmlnOjI6Y29uZmlnIE5GU0RcXG5mcy9uZnNkL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTkZTIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTM5LVxcbmZzL25mc2QvS2NvbmZpZzo0MDpjb25maWcgTkZTRF9WMlxcbmZzL25mc2QvS2NvbmZpZy00MS1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTUwLVxcbmZzL25mc2QvS2NvbmZpZzo1MTpjb25maWcgTkZTRF9WMl9BQ0xcXG5mcy9uZnNkL0tjb25maWctNTItXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjIgQUNMIHByb3RvY29sIGV4dGVuc2lvblxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy01NC1cXG5mcy9uZnNkL0tjb25maWc6NTU6Y29uZmlnIE5GU0RfVjNfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTU2LVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YzIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNzYtXFxuZnMvbmZzZC9LY29uZmlnOjc3OmNvbmZpZyBORlNEX1Y0XFxuZnMvbmZzZC9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy05My1cXG5mcy9uZnNkL0tjb25maWc6OTQ6Y29uZmlnIE5GU0RfUE5GU1xcbmZzL25mc2QvS2NvbmZpZy05NS1cXHRib29sXFxuZnMvbmZzZC9LY29uZmlnLTk2LVxcbmZzL25mc2QvS2NvbmZpZzo5Nzpjb25maWcgTkZTRF9CTE9DS0xBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy05OC1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIGJsb2NrIGxheW91dHNcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTA5LVxcbmZzL25mc2QvS2NvbmZpZzoxMTA6Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTIzLVxcbmZzL25mc2QvS2NvbmZpZzoxMjQ6Y29uZmlnIE5GU0RfRkxFWEZJTEVMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTI1LVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgRmxleCBGaWxlIGxheW91dHNcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTQwLVxcbmZzL25mc2QvS2NvbmZpZzoxNDE6Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcXG5mcy9uZnNkL0tjb25maWctMTQyLVxcdGJvb2wgXFxcIk5GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE1MC1cXG5mcy9uZnNkL0tjb25maWc6MTUxOmNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXFxuZnMvbmZzZC9LY29uZmlnLTE1Mi1cXHRib29sIFxcXCJQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNjMtXFxuZnMvbmZzZC9LY29uZmlnOjE2NDpjb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuZnMvbmZzZC9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTc5LVxcbmZzL25mc2QvS2NvbmZpZzoxODA6Y29uZmlnIE5GU0RfVjRfUE9TSVhfQUNMU1xcbmZzL25mc2QvS2NvbmZpZy0xODEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBORlN2NCBQT1NJWCBkcmFmdCBBQ0xzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOTowOC4xNTc4MzA3NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MDUwNjQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBjb25maWcgTkZTRGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgY29uZmlnIE5GU0RgIHJlbGllcyBvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBkaXJlY3RseS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0byBvdGhlciBtb2R1bGVzIGFuZCBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgYSBjb3JlIGNvbXBvbmVudD8gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMga2VybmVsIG1vZHVsZXMgYmVpbmcgbG9hZGVkLCBvciBjZXJ0YWluIG5ldHdvcmsgY29uZmlndXJhdGlvbnM/IERvZXMgaXQgaW50ZXJmYWNlIHdpdGggdXNlci1zcGFjZSBkYWVtb25zLCBhbmQgYXJlIHRob3NlIGRlcGVuZGVuY2llcyBleHBsaWNpdCBvciBpbXBsaWNpdD8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnN1bHQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBtYXliZSBldmVuIHNvbWUga2VybmVsIHNvdXJjZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBrbm93aW5nICp3aGF0KiBpdCBkZXBlbmRzIG9uLCBidXQgYWxzbyB0aGUgKndoeSogLSB1bmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBkZXBlbmRlbmNpZXMgaXMganVzdCBhcyBpbXBvcnRhbnQuIEtub3dpbmcgdGhpcyBhbGxvd3MgbWUgdG8gY29uZmlkZW50bHkgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM5NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM5OjExLjEwODM0NDg0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1ODk0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnNkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0RcXG5mcy9uZnNkL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTkZTIHNlcnZlciBzdXBwb3J0XFxcIlxcbmZzL25mc2QvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gSU5FVFxcbmZzL25mc2QvS2NvbmZpZzo1OlxcdGRlcGVuZHMgb24gRklMRV9MT0NLSU5HXFxuZnMvbmZzZC9LY29uZmlnOjY6XFx0ZGVwZW5kcyBvbiBGU05PVElGWVxcbmZzL25mc2QvS2NvbmZpZy03LVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE2LVxcdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WM19BQ0xcXG5mcy9uZnNkL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcXG5mcy9uZnNkL0tjb25maWctMTgtXFx0aGVscFxcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTQwPWNvbmZpZyBORlNEX1YyXFxuZnMvbmZzZC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMiAoREVQUkVDQVRFRClcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjQyOlxcdGRlcGVuZHMgb24gTkZTRFxcbmZzL25mc2QvS2NvbmZpZy00My1cXHRkZWZhdWx0IG5cXG4tLVxcbmZzL25mc2QvS2NvbmZpZz01MT1jb25maWcgTkZTRF9WMl9BQ0xcXG5mcy9uZnNkL0tjb25maWctNTItXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjIgQUNMIHByb3RvY29sIGV4dGVuc2lvblxcXCJcXG5mcy9uZnNkL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBORlNEX1YyXFxuZnMvbmZzZC9LY29uZmlnLTU0LVxcbmZzL25mc2QvS2NvbmZpZz01NT1jb25maWcgTkZTRF9WM19BQ0xcXG5mcy9uZnNkL0tjb25maWctNTYtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjMgQUNMIHByb3RvY29sIGV4dGVuc2lvblxcXCJcXG5mcy9uZnNkL0tjb25maWc6NTc6XFx0ZGVwZW5kcyBvbiBORlNEXFxuZnMvbmZzZC9LY29uZmlnLTU4LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz03Nz1jb25maWcgTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy03OC1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjc5OlxcdGRlcGVuZHMgb24gTkZTRCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuZnMvbmZzZC9LY29uZmlnLTgwLVxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz05Nz1jb25maWcgTkZTRF9CTE9DS0xBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy05OC1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIGJsb2NrIGxheW91dHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjk5OlxcdGRlcGVuZHMgb24gTkZTRF9WNCBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmZzL25mc2QvS2NvbmZpZy0xMDAtXFx0c2VsZWN0IE5GU0RfUE5GU1xcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTExMD1jb25maWcgTkZTRF9TQ1NJTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTExMS1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIFNDU0kgbGF5b3V0c1xcXCJcXG5mcy9uZnNkL0tjb25maWc6MTEyOlxcdGRlcGVuZHMgb24gTkZTRF9WNCBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmZzL25mc2QvS2NvbmZpZy0xMTMtXFx0c2VsZWN0IE5GU0RfUE5GU1xcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTEyND1jb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy0xMjUtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1xcXCJcXG5mcy9uZnNkL0tjb25maWc6MTI2OlxcdGRlcGVuZHMgb24gTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy0xMjctXFx0c2VsZWN0IE5GU0RfUE5GU1xcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTE0MT1jb25maWcgTkZTRF9WNF8yX0lOVEVSX1NTQ1xcbmZzL25mc2QvS2NvbmZpZy0xNDItXFx0Ym9vbCBcXFwiTkZTdjQuMiBpbnRlciBzZXJ2ZXIgdG8gc2VydmVyIENPUFlcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE0MzpcXHRkZXBlbmRzIG9uIE5GU0RfVjQgXFx1MDAyNlxcdTAwMjYgTkZTX1Y0XzJcXG5mcy9uZnNkL0tjb25maWctMTQ0LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz0xNTE9Y29uZmlnIE5GU0RfVjRfU0VDVVJJVFlfTEFCRUxcXG5mcy9uZnNkL0tjb25maWctMTUyLVxcdGJvb2wgXFxcIlByb3ZpZGUgU2VjdXJpdHkgTGFiZWwgc3VwcG9ydCBmb3IgTkZTdjQgc2VydmVyXFxcIlxcbmZzL25mc2QvS2NvbmZpZzoxNTM6XFx0ZGVwZW5kcyBvbiBORlNEX1Y0IFxcdTAwMjZcXHUwMDI2IFNFQ1VSSVRZXFxuZnMvbmZzZC9LY29uZmlnLTE1NC1cXHRoZWxwXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9MTY0PWNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcXG5mcy9uZnNkL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIlN1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVxcXCJcXG5mcy9uZnNkL0tjb25maWc6MTY2OlxcdGRlcGVuZHMgb24gTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy0xNjctXFx0ZGVmYXVsdCBuXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9MTgwPWNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcXG5mcy9uZnNkL0tjb25maWctMTgxLVxcdGJvb2wgXFxcIlN1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1xcXCJcXG5mcy9uZnNkL0tjb25maWc6MTgyOlxcdGRlcGVuZHMgb24gTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy0xODMtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM5OjExLjE1NTkzODEwMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMzMTIzMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5ldHdvcmsgRmlsZXN5c3RlbSBEZXBlbmRlbmNpZXMgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gZGFlbW9uLCBgTkZTRGAsIGFuZCBob3cgaXQgYWxsIGhhbmdzIHRvZ2V0aGVyLiBJdCBsb29rcyBsaWtlIGBORlNEYCBpcyBwcmV0dHkgZnVuZGFtZW50YWxseSBidWlsdCBvbiBgSU5FVGAgZm9yIGl0cyBuZXR3b3JrIHRyYW5zcG9ydCwgdGhhdCdzIGV4cGVjdGVkLiBUaGVuLCBpdCByZWxpZXMgb24gYEZJTEVfTE9DS0lOR2Agd2hpY2ggbWFrZXMgc2Vuc2UsIGFzIGEgZGlzdHJpYnV0ZWQgZmlsZXN5c3RlbSBuZWVkcyB0byBoYW5kbGUgZmlsZSBsb2NraW5nIGFuZCBjb25jdXJyZW5jeS4gSXQgaXMgdXNpbmcgYEZTTk9USUZZYCB0byBnZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgZmlsZSBzeXN0ZW0uIEFuZCwgb2YgY291cnNlLCBhIG5ldHdvcmstYWNjZXNzaWJsZSBmaWxlc3lzdGVtIGlzIHByb2JhYmx5IGJlaW5nIHVzZWQgYnkgbW9yZSB0aGFuIG9uZSB1c2VyLCBzbyBgTVVMVElVU0VSYCBzdXBwb3J0IGlzIGltcG9ydGFudC4gSeKAmW0gc3RhcnRpbmcgdG8gc2VlIHRoZSBhcmNoaXRlY3R1cmUgY2xlYXJseS5cblxuTm93LCBJJ20gc2hpZnRpbmcgZm9jdXMgdG8gYFNVTlJQQ2AgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBuZWVkcyB0byBiZSBjb25maWd1cmVkIHRoZXJlIHRvIGdldCBgTkZTRGAgcnVubmluZyBwcm9wZXJseS4gV2hhdCBraW5kIG9mIFJQQyBzZXR0aW5ncyBkbyBJIG5lZWQgdG8gY29uY2VybiBteXNlbGYgd2l0aD8gVmVyc2lvbiBudW1iZXJzPyBBdXRoZW50aWNhdGlvbj8gVHJhbnNwb3J0PyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHByb3RvY29sIGZvciB0aGUgY2xpZW50cyB0b28sIGl0IGNvdWxkIGJlIHYyLCB2MyBvciB2NCwgZXRjLi4gTGV0J3MgZGlnIGRlZXBlciBhbmQgZ2V0IHRoZSBzZXR0aW5ncyBzZXQgYXBwcm9wcmlhdGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM5OjE0LjQ4OTA2NTIzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNTY0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNVTlJQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3N1bnJwYy9LY29uZmlnOjI6Y29uZmlnIFNVTlJQQ1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNS1cXG5uZXQvc3VucnBjL0tjb25maWc6Njpjb25maWcgU1VOUlBDX0dTU1xcbm5ldC9zdW5ycGMvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMTAtXFxubmV0L3N1bnJwYy9LY29uZmlnOjExOmNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcXG5uZXQvc3VucnBjL0tjb25maWctMTItXFx0Ym9vbFxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxNTpjb25maWcgU1VOUlBDX1NXQVBcXG5uZXQvc3VucnBjL0tjb25maWctMTYtXFx0Ym9vbFxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNS1cXG5uZXQvc3VucnBjL0tjb25maWc6MzY6Y29uZmlnIFNVTlJQQ19ERUJVR1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cXHRib29sIFxcXCJSUEM6IEVuYWJsZSBkcHJpbnRrIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy00OS1cXG5uZXQvc3VucnBjL0tjb25maWc6NTA6Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxcbm5ldC9zdW5ycGMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclxcXCJcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy02My1cXG5uZXQvc3VucnBjL0tjb25maWc6NjQ6Y29uZmlnIFNVTlJQQ19YUFJUX1JETUFcXG5uZXQvc3VucnBjL0tjb25maWctNjUtXFx0dHJpc3RhdGUgXFxcIlJQQy1vdmVyLVJETUEgdHJhbnNwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOToxNC41MzUyMjg4MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzgzNTc4MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBORlMgRGFlbW9uJ3MgUlBDIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB0aGUgc3lzdGVtJ3MgaGlnaGxpZ2h0aW5nIHRoYXQgYFNVTlJQQ2AgaXMgYmVpbmcgcHVsbGVkIGluIGJ5IGBORlNEYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byAqaG93KiBleGFjdGx5IGBORlNEYCBpcyBzZWxlY3RpbmcgaXQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHBhdGguIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgc2VsZWN0aW9uIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIGlzc3VlcyBvciBwZXJmb3JtYW5jZSB0dW5pbmcuIExldCdzIHNlZSBob3cgYE5GU0RgIGlzIGNvbmZpZ3VyZWQgdG8gaGFuZGxlIFJQQyBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM5OjE3LjMxODgxMDE2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMDczODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFNVTlJQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnNkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0RcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTE9DS0RcXG5mcy9uZnNkL0tjb25maWc6MTI6XFx0c2VsZWN0IFNVTlJQQ1xcbmZzL25mc2QvS2NvbmZpZy0xMy1cXHRzZWxlY3QgRVhQT1JURlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MTcuMzY2MTI0MTQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTEyMjEzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKk5GU0QgQ29uZmlndXJhdGlvbiBhbmQgRm9jdXNlZCBGdXp6aW5nKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgcGxhbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSB0aGF0IGVuYWJsaW5nIGBORlNEYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc3RlcCBoZXJlLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBuZXh0IGxvZ2ljYWwgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbiB3ZSBuZWVkIHRvIHRhcmdldCB3aXRoIGZ1enppbmcuIEl0IGxvb2tzIGxpa2UgYHN2Y19hZGRzb2NrYCBpcyB0aGUgcHJpbWUgY2FuZGlkYXRlLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQ7IEkndmUgZ290IHRvIGNvbmZpcm0gdGhhdCBpbnR1aXRpb24sIGFuZCB0aGUgYmVzdCBwbGFjZSB0byBkbyB0aGF0IGlzIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIEdvdHRhIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgYmVmb3JlIEkgY29tbWl0IHRvIHRocm93aW5nIGEgYnVuY2ggb2YgZnV6emluZyByZXNvdXJjZXMgYXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOToyMC41MTczNDg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc3VucnBjL3N2Y3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTE5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTE5OlxcdGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxcbjE1MjA6XFx0XFx0XFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbjE1MjE6XFx0e1xcbjE1MjI6XFx0XFx0aW50IGVyciA9IDA7XFxuMTUyMzpcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzbyA9IHNvY2tmZF9sb29rdXAoZmQsIFxcdTAwMjZlcnIpO1xcbjE1MjQ6XFx0XFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID0gTlVMTDtcXG4xNTI1OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuMTUyNjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkcjtcXG4xNTI3OlxcdFxcdGludCBzYWxlbjtcXG4xNTI4OlxcdFxcbjE1Mjk6XFx0XFx0aWYgKCFzbylcXG4xNTMwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTUzMTpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE1MzI6XFx0XFx0aWYgKHNvY2tfbmV0KHNvLVxcdTAwM2VzaykgIT0gbmV0KVxcbjE1MzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNDpcXHRcXHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xcbjE1MzU6XFx0XFx0aWYgKChzby1cXHUwMDNlc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBQRl9JTkVUKSBcXHUwMDI2XFx1MDAyNiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYpKVxcbjE1MzY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNzpcXHRcXHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcXG4xNTM4OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2XFxuMTUzOTpcXHRcXHQgICAgc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcXG4xNTQwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDE6XFx0XFx0ZXJyID0gLUVJU0NPTk47XFxuMTU0MjpcXHRcXHRpZiAoc28tXFx1MDAzZXN0YXRlIFxcdTAwM2UgU1NfVU5DT05ORUNURUQpXFxuMTU0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ0OlxcdFxcdGVyciA9IC1FQlVTWTtcXG4xNTQ1OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSlcXG4xNTQ2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDc6XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xNTQ4OlxcdFxcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxcbjE1NDk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1MDpcXHRcXHRzdnNrID0gc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO1xcbjE1NTE6XFx0XFx0aWYgKElTX0VSUihzdnNrKSkge1xcbjE1NTI6XFx0XFx0XFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuMTU1MzpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHN2c2spO1xcbjE1NTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1NTpcXHRcXHR9XFxuMTU1NjpcXHRcXHRzYWxlbiA9IGtlcm5lbF9nZXRzb2NrbmFtZShzdnNrLVxcdTAwM2Vza19zb2NrLCBzaW4pO1xcbjE1NTc6XFx0XFx0aWYgKHNhbGVuIFxcdTAwM2U9IDApXFxuMTU1ODpcXHRcXHRcXHRzdmNfeHBydF9zZXRfbG9jYWwoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIHNpbiwgc2FsZW4pO1xcbjE1NTk6XFx0XFx0c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfY3JlZCA9IGdldF9jcmVkKGNyZWQpO1xcbjE1NjA6XFx0XFx0c3ZjX2FkZF9uZXdfcGVybV94cHJ0KHNlcnYsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0KTtcXG4xNTYxOlxcdFxcdHJldHVybiBzdmNfb25lX3NvY2tfbmFtZShzdnNrLCBuYW1lX3JldHVybiwgbGVuKTtcXG4xNTYyOlxcdG91dDpcXG4xNTYzOlxcdFxcdHNvY2tmZF9wdXQoc28pO1xcbjE1NjQ6XFx0XFx0cmV0dXJuIGVycjtcXG4xNTY1OlxcdH1cXG4xNTY2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcXG4xNTY3OlxcdFxcbjE1Njg6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MjAuNTE3NDcxMjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MTg5ODg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIE5GU2QgQ29udHJvbCBGaWxlczogQSBRdWljayBMb29rKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hhbmdlIGluIGBzdmNfYWRkc29ja2AsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggTkZTZCBjb250cm9sIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcywgbGV0J3MgZnV6eiB0aGlzIHRoaW5nLiBUaGF0IGBlcnIgPSAtRUJVU1lgIGNoZWNrIGNvbWJpbmVkIHdpdGggYHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YWAgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUgb3IgYSBzdGF0ZSBtYW5hZ2VtZW50IHByb2JsZW0gdGhhdCBmdXp6aW5nIGNvdWxkIGV4cG9zZS5cblxuVGhlIGNoYW5nZSBpdHNlbGYgbG9va3Mgc3RyYWlnaHRmb3J3YXJkOyB0aGUgYE5GU0RgIGNvbmZpZyBlbmFibGVzIHRoZSBtb2RpZmllZCBjb2RlLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgcHJlcmVxdWlzaXRlIGNvbmZpZ3MuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBgTkZTRGAgZGVwZW5kcyBvbiB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBgSU5FVGAsIGBGSUxFX0xPQ0tJTkdgLCBhbmQgc28gb24uIE5vdGhpbmcgdW5leHBlY3RlZCB0aGVyZS4gU28sIGBORlNEYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkuIEFscmlnaHQsIGxldCdzIGNhbGwgaXQgYW5kIGdldCBhIHNldC1yZXN1bHQuIFRpbWUgdG8gbW92ZSBvbiBhbmQgc2VlIHdoYXQgdGhlIGZ1enppbmcgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg1MiwiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOToyNC44ODkzNzMzNjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzU4NTk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBzdmNfYWRkc29ja2AgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCB0byByZXR1cm4gYC1FQlVTWWAgaWYgYHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHdyaXRpbmcgdG8gbmZzZCBjb250cm9sIGZpbGVzIChlLmcuLCBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGApIGFuZCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZjX2FkZHNvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gYHN2Y19hZGRzb2NrYCBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgIHRvIHJldHVybiBgLUVCVVNZYCBpZiBgc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGFgIGlzIGFscmVhZHkgc2V0LiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgd3JpdGluZyB0byBuZnNkIGNvbnRyb2wgZmlsZXMgKGUuZy4sIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCkgYW5kIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOToyNC45NjY5NjgzNTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDQ1Njg2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjozOToyNC45Njc1NDk5NDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTUwMzk4MzQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpbXBsZSBjaGVjayB0byBwcmV2ZW50IGFkZGluZyBhIHNvY2tldCB0byBhIHN1bnJwYyBzZXJ2aWNlIGlmIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgc2V0LiBUaGlzIGlzIGEgbG9naWMgZml4IHRvIHByZXZlbnQgc3RhdGUgY29ycnVwdGlvbiBvciByZXNvdXJjZSBsZWFrcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWFkZCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZS4gS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYzRiZjZkYjE1YzVlNTRkMDFhNjY1NmYyMmUyNDIwOWZhMTU1ZWRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTY6Mzg6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXG5pbmRleCA1MGU1ZTdmNWI3NjJkLi5lOGNjNDMyOWYxMjgyIDEwMDY0NFxuLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXG5AQCAtMTU0MSw2ICsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXG4gXHRlcnIgPSAtRUlTQ09OTjtcbiBcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4gXHRcdGdvdG8gb3V0O1xuK1x0ZXJyID0gLUVCVVNZO1xuK1x0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbitcdFx0Z290byBvdXQ7XG4gXHRlcnIgPSAtRU5PRU5UO1xuIFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4gXHRcdGdvdG8gb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MjQuOTY3NTUwODg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDUzODg0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc3ZjX2FkZHNvY2tgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AsIHRoZXkndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gYHN2Y19hZGRzb2NrYC4gSSBzZWUgdGhhdCB0aGV5J3JlIGFkZGluZyBhIG5ldyBjaGVjayBzcGVjaWZpY2FsbHkgZm9yIGBzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGFgLiBFc3NlbnRpYWxseSwgdGhleSBhcmUgcHJldmVudGluZyB0aGUgYWRkaXRpb24gb2YgYSBzb2NrZXQgKGBzb2ApIHRvIHRoZSBzZXJ2aWNlIGlmIGl0ICphbHJlYWR5KiBoYXMgYHNrX3VzZXJfZGF0YWAgYXNzaWduZWQuIFRoZSBjb2RlIHNuaXBwZXQgY2xlYXJseSBzaG93cyB0aGlzOlxuXG5gYGBjXG5cdGVyciA9IC1FQlVTWTtcblx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcblx0XHRnb3RvIG91dDtcbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBkb3VibGUtYWRkIHNjZW5hcmlvIG9yIG1heWJlIGFuIGlzc3VlIHdoZXJlIGEgc29ja2V0IGlzIGluYWR2ZXJ0ZW50bHkgcmV1c2VkIGJlZm9yZSBpdCdzIHN1cHBvc2VkIHRvIGJlLiBJdCdzIGFib3V0IGVuc3VyaW5nIGEgc29ja2V0IGlzbid0IGFkZGVkIHRvIHRoZSBzZXJ2aWNlIGlmIGl0J3MgYWxyZWFkeSBcImluIHVzZVwiIG9yIGhhcyBzb21lIGFzc29jaWF0ZWQgc3RhdGUuIFRoaXMga2luZCBvZiBndWFyZCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gcHJldmVudCByZXNvdXJjZSBjb25mbGljdHMuXG5cbkkndmUgZXhhbWluZWQgdGhlIGNvZGUgY2FyZWZ1bGx5IGFuZCBJIGRvbid0IHNlZSBhbnkgaW1tZWRpYXRlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYmVpbmcgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZS4gSXQncyBqdXN0IGEgc2ltcGxlIG51bGwgY2hlY2sgb24gYSBwb2ludGVyLCBgc2tfdXNlcl9kYXRhYC4gS01TQU4sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGRldGVjdGluZyByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIHNpbXBseSBjaGVja3MgaWYgYSBwb2ludGVyIGlzIG5vbi1OVUxMLiBJdCdzIG1vcmUgb2YgYSBsb2dpYyBjaGVjayB0byBwcmV2ZW50IHBvdGVudGlhbCBidWdzIGxpa2UgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgZ2VuZXJhbCBsb2dpYyBlcnJvcnMgcmVsYXRlZCB0byBzb2NrZXQgc3RhdGUgbWFuYWdlbWVudC4gSXQgYXBwZWFycyB0byBwcm9hY3RpdmVseSBwcmV2ZW50IGEgcHJvYmxlbS5cblxuVGhlcmVmb3JlLCBnaXZlbiBteSBhc3Nlc3NtZW50LCBJJ2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLiBJdCBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgYXZlbnVlcyBmb3IgS01TQU4gdG8gZmluZCBhbiBpc3N1ZS4gSG93ZXZlciwgSSB3aWxsIHRha2UgYSBicmllZiBtb21lbnQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGFkZGl0aW9uIHRvIGJlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjM5OjMwLjI3Mjk0MzUwN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N1bnJwYy9zdmNzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUzMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1MzE6XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNTMyOlxcdFxcdGlmIChzb2NrX25ldChzby1cXHUwMDNlc2spICE9IG5ldClcXG4xNTMzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1MzQ6XFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4xNTM1OlxcdFxcdGlmICgoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVCkgXFx1MDAyNlxcdTAwMjYgKHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcXG4xNTM2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1Mzc6XFx0XFx0ZXJyID0gIC1FUFJPVE9OT1NVUFBPUlQ7XFxuMTUzODpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbjE1Mzk6XFx0XFx0ICAgIHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXFxuMTU0MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQxOlxcdFxcdGVyciA9IC1FSVNDT05OO1xcbjE1NDI6XFx0XFx0aWYgKHNvLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxcbjE1NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU0NDpcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTU0NTpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpXFxuMTU0NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ3OlxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMTU0ODpcXHRcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcXG4xNTQ5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTA6XFx0XFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcXG4xNTUxOlxcdFxcdGlmIChJU19FUlIoc3ZzaykpIHtcXG4xNTUyOlxcdFxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbjE1NTM6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihzdnNrKTtcXG4xNTU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTU6XFx0XFx0fVxcbjE1NTY6XFx0XFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cXHUwMDNlc2tfc29jaywgc2luKTtcXG4xNTU3OlxcdFxcdGlmIChzYWxlbiBcXHUwMDNlPSAwKVxcbjE1NTg6XFx0XFx0XFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBzaW4sIHNhbGVuKTtcXG4xNTU5OlxcdFxcdHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MzAuMjczMDYzNTY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTg0NDMxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBhIHNhbml0eSBjaGVjaywgcmVhbGx5LCB0byBhdm9pZCBhZGRpbmcgYSBzb2NrZXQgd2hlcmUgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBwcmV2ZW50YXRpdmUgbWVhc3VyZSBhZ2FpbnN0IGEgbmFzdHkgYnVnIOKAkyBwZXJoYXBzIGEgcmVzb3VyY2UgbGVhaywgb3IgYSB1c2UtYWZ0ZXItZnJlZSwgb3Igc29tZSBraW5kIG9mIHN0YXRlIGNvcnJ1cHRpb24gZG93biB0aGUgbGluZS4gR29vZCBjYXRjaCwgYWN0dWFsbHkuXG5cbkkndmUgcmV2aWV3ZWQgdGhlIGNvZGUuIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbnMsIG5vIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIGRlZmluaXRlbHkgbm8gb2J2aW91cyBpbnN0YW5jZXMgb2YgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0aGUgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIsIG9yIEtNU0FOLCB0byBsb29rIGZvciB0aG9zZSBraW5kcyBvZiBpc3N1ZXMuIFRoZSBLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIgKEtBU0FOKSBpcyBwZXJmZWN0bHkgc3VmZmljaWVudCBoZXJlIHRvIGZpbmQgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgIHdoZW4gSSBjYWxsIGBzZXQtcmVzdWx0c2AuIEl0J3MgYSBjbGVhbiBmaXggd2l0aCBhIHdlbGwtcmVhc29uZWQganVzdGlmaWNhdGlvbiwgYW5kIHRoZSBLQVNBTiBjb3ZlcmFnZSBpcyBtb3JlIHRoYW4gYWRlcXVhdGUgZm9yIHRoaXMgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDAsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6Mzk6MzQuNDcxNTEwNDkxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIGEgc29ja2V0IHRvIGEgc3VucnBjIHNlcnZpY2UgaWYgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gcHJldmVudCBzdGF0ZSBjb3JydXB0aW9uIG9yIHJlc291cmNlIGxlYWtzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtYWRkKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzaW1wbGUgY2hlY2sgdG8gcHJldmVudCBhZGRpbmcgYSBzb2NrZXQgdG8gYSBzdW5ycGMgc2VydmljZSBpZiBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldC4gVGhpcyBpcyBhIGxvZ2ljIGZpeCB0byBwcmV2ZW50IHN0YXRlIGNvcnJ1cHRpb24gb3IgcmVzb3VyY2UgbGVha3MgKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1hZGQpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUuIEtNU0FOIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowkd7z9[1] Phase: Succeeded StartedAt: 2026-08-15 16:40:27 +0000 UTC FinishedAt: 2026-08-15 16:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-15 16:40:27 +0000 UTC FinishedAt: 2026-08-15 16:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2] Phase: Succeeded StartedAt: 2026-08-15 16:40:27 +0000 UTC FinishedAt: 2026-08-15 18:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-15 16:40:27 +0000 UTC FinishedAt: 2026-08-15 18:19:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-15 16:40:27 +0000 UTC FinishedAt: 2026-08-15 16:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-15 16:40:27 +0000 UTC FinishedAt: 2026-08-15 16:40:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkd7z9/series-workflowkd7z9-convert-artifact-1655917714/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-15 16:40:37 +0000 UTC FinishedAt: 2026-08-15 17:01:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-15 16:40:37 +0000 UTC FinishedAt: 2026-08-15 17:01:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*19a403a7-19a9-458a-8091-8fb71245ea25,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-workflowkd7z9/series-workflowkd7z9-convert-artifact-1655917714/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": "37fbe207-983e-4730-943f-77a0df9d3217", "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-workflowkd7z9/series-workflowkd7z9-build-action-4073573904/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-15 16:40:37 +0000 UTC FinishedAt: 2026-08-15 17:01:19 +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:*19a403a7-19a9-458a-8091-8fb71245ea25,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-workflowkd7z9/series-workflowkd7z9-convert-artifact-1655917714/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": "37fbe207-983e-4730-943f-77a0df9d3217", "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-workflowkd7z9/series-workflowkd7z9-build-action-4073573904/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-15 17:01:44 +0000 UTC FinishedAt: 2026-08-15 17:01:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-15 17:01:44 +0000 UTC FinishedAt: 2026-08-15 17:01:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-15 17:01:44 +0000 UTC FinishedAt: 2026-08-15 17:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-15 17:01:44 +0000 UTC FinishedAt: 2026-08-15 17:01:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkd7z9/series-workflowkd7z9-convert-artifact-452777389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-15 17:01:54 +0000 UTC FinishedAt: 2026-08-15 17:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-15 17:01:54 +0000 UTC FinishedAt: 2026-08-15 17:03:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*37fbe207-983e-4730-943f-77a0df9d3217,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-workflowkd7z9/series-workflowkd7z9-build-action-4073573904/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-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-15 17:03:57 +0000 UTC FinishedAt: 2026-08-15 17:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-15 17:03:57 +0000 UTC FinishedAt: 2026-08-15 17:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-15 17:03:57 +0000 UTC FinishedAt: 2026-08-15 17:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-15 17:03:57 +0000 UTC FinishedAt: 2026-08-15 17:20:32 +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:*19a403a7-19a9-458a-8091-8fb71245ea25,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-workflowkd7z9/series-workflowkd7z9-convert-artifact-452777389/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": "74fe5fb3-6538-496f-9e81-98e6b29b27a4", "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-workflowkd7z9/series-workflowkd7z9-build-action-205593097/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-15 17:03:57 +0000 UTC FinishedAt: 2026-08-15 17:20:22 +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:*19a403a7-19a9-458a-8091-8fb71245ea25,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-workflowkd7z9/series-workflowkd7z9-convert-artifact-452777389/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": "74fe5fb3-6538-496f-9e81-98e6b29b27a4", "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-workflowkd7z9/series-workflowkd7z9-build-action-205593097/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-15 17:20:32 +0000 UTC FinishedAt: 2026-08-15 17:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-15 17:20:32 +0000 UTC FinishedAt: 2026-08-15 17:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-15 17:20:32 +0000 UTC FinishedAt: 2026-08-15 17:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-15 17:20:32 +0000 UTC FinishedAt: 2026-08-15 17:22:15 +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:*74fe5fb3-6538-496f-9e81-98e6b29b27a4,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-workflowkd7z9/series-workflowkd7z9-build-action-205593097/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-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-15 17:22:25 +0000 UTC FinishedAt: 2026-08-15 18:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-15 17:22:25 +0000 UTC FinishedAt: 2026-08-15 18:19:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*37fbe207-983e-4730-943f-77a0df9d3217,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*74fe5fb3-6538-496f-9e81-98e6b29b27a4,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-workflowkd7z9/series-workflowkd7z9-build-action-4073573904/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-workflowkd7z9/series-workflowkd7z9-build-action-205593097/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-15 17:22:25 +0000 UTC FinishedAt: 2026-08-15 17:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-15 17:22:25 +0000 UTC FinishedAt: 2026-08-15 17:22:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkd7z9/series-workflowkd7z9-convert-artifact-1098580754/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-15 17:22:25 +0000 UTC FinishedAt: 2026-08-15 17:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-15 17:22:25 +0000 UTC FinishedAt: 2026-08-15 17:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-15 17:22:25 +0000 UTC FinishedAt: 2026-08-15 17:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-15 17:22:35 +0000 UTC FinishedAt: 2026-08-15 18:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd7z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"3fc6f63b-2751-4e6a-8edf-93cd953867a5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-15 17:22:35 +0000 UTC FinishedAt: 2026-08-15 18:18:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*37fbe207-983e-4730-943f-77a0df9d3217,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*74fe5fb3-6538-496f-9e81-98e6b29b27a4,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-workflowkd7z9/series-workflowkd7z9-build-action-4073573904/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-workflowkd7z9/series-workflowkd7z9-build-action-205593097/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-workflowkd7z9/series-workflowkd7z9-convert-artifact-1098580754/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,}