Name: series-workflowzz27x Phase: Failed StartedAt: 2026-09-03 10:03:07 +0000 UTC FinishedAt: 2026-09-03 10:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzz27x[0] Phase: Succeeded StartedAt: 2026-09-03 10:03:07 +0000 UTC FinishedAt: 2026-09-03 10:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzz27x[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 10:03:07 +0000 UTC FinishedAt: 2026-09-03 10:22:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBmaXhlcyBlcnJvciB1bndpbmRpbmcgaW4gdGhlIG1vZHVsZS9zdWJzeXN0ZW0gaW5pdCBmdW5jdGlvbiAoX19pbml0IGRpYnNfaW5pdCksIGFkZGluZyBjbGFzc191bnJlZ2lzdGVyIGFuZCBlcnJvciBsb2dnaW5nIGlmIGRpYnNfbG9vcGJhY2tfaW5pdCBmYWlscyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEl0IGRvZXMgbm90IGFsdGVyIGFueSByZWFjaGFibGUgcnVudGltZSBrZXJuZWwgbG9naWMgb3Igc3lzY2FsbCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwYzU5ZGVjYTU3ODY5ZTdmMDBkZDhmZmQ2OTJmNDZmODk3MmI3MjYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMDoyMTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbmluZGV4IDJiNTNhOWQyNzdkY2EuLjIwYzUwOTk3YTdjZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xuQEAgLTI1MSwxMyAmIzQzOzI1MSwxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBkaWJzX2luaXQodm9pZClcbiBcbiBcdHJjID0gY2xhc3NfcmVnaXN0ZXIoXHUwMDI2ZGlic19jbGFzcyk7XG4gXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbiYjNDM7XHRcdGdvdG8gZXJyO1xuIFxuIFx0cmMgPSBkaWJzX2xvb3BiYWNrX2luaXQoKTtcbiBcdGlmIChyYylcbi1cdFx0cHJfZXJyKFwmIzM0OyVzIGZhaWxzIHdpdGggJWRcXG5cJiMzNDssIF9fZnVuY19fLCByYyk7XG4mIzQzO1x0XHRnb3RvIGVycl91bnJlZ2lzdGVyO1xuIFxuIFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7ZXJyX3VucmVnaXN0ZXI6XG4mIzQzO1x0Y2xhc3NfdW5yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKTtcbiYjNDM7ZXJyOlxuJiM0MztcdHByX2VycihcJiMzNDslcyBmYWlscyB3aXRoICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgcmMpO1xuJiM0MztcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IGRpYnNfZXhpdCh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgZml4ZXMgZXJyb3IgdW53aW5kaW5nIGluIHRoZSBtb2R1bGUvc3Vic3lzdGVtIGluaXQgZnVuY3Rpb24gKF9faW5pdCBkaWJzX2luaXQpLCBhZGRpbmcgY2xhc3NfdW5yZWdpc3RlciBhbmQgZXJyb3IgbG9nZ2luZyBpZiBkaWJzX2xvb3BiYWNrX2luaXQgZmFpbHMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcmVhY2hhYmxlIHJ1bnRpbWUga2VybmVsIGxvZ2ljIG9yIHN5c2NhbGwgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGM1OWRlY2E1Nzg2OWU3ZjAwZGQ4ZmZkNjkyZjQ2Zjg5NzJiNzI2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTA6MjE6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMKaW5kZXggMmI1M2E5ZDI3N2RjYS4uMjBjNTA5OTdhN2NmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uYwpAQCAtMjUxLDEzICYjNDM7MjUxLDE5IEBAIHN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKQogCiAJcmMgPSBjbGFzc19yZWdpc3RlcigmYW1wO2RpYnNfY2xhc3MpOwogCWlmIChyYykKLQkJcmV0dXJuIHJjOwomIzQzOwkJZ290byBlcnI7CiAKIAlyYyA9IGRpYnNfbG9vcGJhY2tfaW5pdCgpOwogCWlmIChyYykKLQkJcHJfZXJyKCYjMzQ7JXMgZmFpbHMgd2l0aCAlZFxuJiMzNDssIF9fZnVuY19fLCByYyk7CiYjNDM7CQlnb3RvIGVycl91bnJlZ2lzdGVyOwogCiAJcmV0dXJuIHJjOwomIzQzOwomIzQzO2Vycl91bnJlZ2lzdGVyOgomIzQzOwljbGFzc191bnJlZ2lzdGVyKCZhbXA7ZGlic19jbGFzcyk7CiYjNDM7ZXJyOgomIzQzOwlwcl9lcnIoJiMzNDslcyBmYWlscyB3aXRoICVkXG4mIzM0OywgX19mdW5jX18sIHJjKTsKJiM0MzsJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGlic19leGl0KHZvaWQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaWJzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRvIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZGlic19pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBgZ290b2Agc3RhdGVtZW50IGFuZCBhIHJlc3RydWN0dXJlZCBlcnJvciBoYW5kbGluZyBmbG93LiBJdCBhcHBlYXJzIHRoZXkgYXJlIGFpbWluZyBmb3IgY2xlYW5lciBlcnJvciBwcm9wYWdhdGlvbi4gUHJldmlvdXNseSwgaWYgYGNsYXNzX3JlZ2lzdGVyYCBvciBgZGlic19sb29wYmFja19pbml0YCBmYWlsZWQsIHRoZSBjb2RlIHdvdWxkIHNpbXBseSByZXR1cm4uIE5vdywgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBsYWJlbHMgYGVycl91bnJlZ2lzdGVyYCBhbmQgYGVycmAgdG8gaGFuZGxlIHBvdGVudGlhbCBlcnJvcnMgbW9yZSByb2J1c3RseS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRpYnNgIGlzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBleHBsb3JlIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgIGFuZCBvdGhlciBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL2RpYnMvYCBkaXJlY3RvcnkgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBkaWJzIGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIG15IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0b29scyB0byBxdWlja2x5IGdldCBzb21lIGNvbnRleHQgYW5kIGZpZ3VyZSBvdXQgaWYgdGhpcyBtb2R1bGUgaXMgZXZlbiB1c2VkLiBUaGlzIGlzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZywgYnV0IHVuZGVyc3RhbmRpbmcgaXRzIGNvbnRleHQgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNpZGUgZWZmZWN0cyBvciBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LypcbiAgIDM6XHQgKiAgRElCUyAtIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZ1xuICAgNDpcdCAqXG4gICA1Olx0ICogIEltcGxlbWVudGF0aW9uIG9mIHRoZSBESUJTIGNsYXNzIG1vZHVsZVxuICAgNjpcdCAqXG4gICA3Olx0ICogIENvcHlyaWdodCBJQk0gQ29ycC4gMjAyNVxuICAgODpcdCAqL1xuICAgOTpcdCNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7ZGliczogXCYjMzQ7IGZtdFxuICAxMDpcdFxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGlicy5oXHUwMDNlXG4gIDE2Olx0XG4gIDE3Olx0I2luY2x1ZGUgXCYjMzQ7ZGlic19sb29wYmFjay5oXCYjMzQ7XG4gIDE4Olx0XG4gIDE5Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBjbGFzc1wmIzM0Oyk7XG4gIDIwOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAgMjE6XHRcbiAgMjI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGRpYnNfY2xhc3MgPSB7XG4gIDIzOlx0XHQubmFtZVx0XHQ9IFwmIzM0O2RpYnNcJiMzNDssXG4gIDI0Olx0fTtcbiAgMjU6XHRcbiAgMjY6XHQvKiB1c2UgYW4gYXJyYXkgcmF0aGVyIGEgbGlzdCBmb3IgZmFzdCBtYXBwaW5nOiAqL1xuICAyNzpcdHN0YXRpYyBzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudHNbTUFYX0RJQlNfQ0xJRU5UU107XG4gIDI4Olx0c3RhdGljIHU4IG1heF9jbGllbnQ7XG4gIDI5Olx0c3RhdGljIERFRklORV9NVVRFWChjbGllbnRzX2xvY2spO1xuICAzMDpcdHN0cnVjdCBkaWJzX2Rldl9saXN0IHtcbiAgMzE6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiAgMzI6XHRcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMgZGlicyBkZXZpY2UgbGlzdCAqL1xuICAzMzpcdH07XG4gIDM0Olx0XG4gIDM1Olx0c3RhdGljIHN0cnVjdCBkaWJzX2Rldl9saXN0IGRpYnNfZGV2X2xpc3QgPSB7XG4gIDM2Olx0XHQubGlzdCA9IExJU1RfSEVBRF9JTklUKGRpYnNfZGV2X2xpc3QubGlzdCksXG4gIDM3Olx0XHQubXV0ZXggPSBfX01VVEVYX0lOSVRJQUxJWkVSKGRpYnNfZGV2X2xpc3QubXV0ZXgpLFxuICAzODpcdH07XG4gIDM5Olx0XG4gIDQwOlx0c3RhdGljIHZvaWQgZGlic19zZXR1cF9mb3J3YXJkaW5nKHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50LFxuICA0MTpcdFx0XHRcdFx0ICBzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG4gIDQyOlx0e1xuICA0MzpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAgNDQ6XHRcbiAgNDU6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuICA0NjpcdFx0ZGlicy1cdTAwM2VzdWJzW2NsaWVudC1cdTAwM2VpZF0gPSBjbGllbnQ7XG4gIDQ3Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuICA0ODpcdH1cbiAgNDk6XHRcbiAgNTA6XHRpbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXG4gIDUxOlx0e1xuICA1MjpcdFx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xuICA1MzpcdFx0aW50IGksIHJjID0gLUVOT1NQQztcbiAgNTQ6XHRcbiAgNTU6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XG4gIDU2Olx0XHRtdXRleF9sb2NrKFx1MDAyNmNsaWVudHNfbG9jayk7XG4gIDU3Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfRElCU19DTElFTlRTOyAmIzQzOyYjNDM7aSkge1xuICA1ODpcdFx0XHRpZiAoIWNsaWVudHNbaV0pIHtcbiAgNTk6XHRcdFx0XHRjbGllbnRzW2ldID0gY2xpZW50O1xuICA2MDpcdFx0XHRcdGNsaWVudC1cdTAwM2VpZCA9IGk7XG4gIDYxOlx0XHRcdFx0aWYgKGkgPT0gbWF4X2NsaWVudClcbiAgNjI6XHRcdFx0XHRcdG1heF9jbGllbnQmIzQzOyYjNDM7O1xuICA2MzpcdFx0XHRcdHJjID0gMDtcbiAgNjQ6XHRcdFx0XHRicmVhaztcbiAgNjU6XHRcdFx0fVxuICA2NjpcdFx0fVxuICA2NzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNsaWVudHNfbG9jayk7XG4gIDY4Olx0XG4gIDY5Olx0XHRpZiAoaSBcdTAwM2MgTUFYX0RJQlNfQ0xJRU5UUykge1xuICA3MDpcdFx0XHQvKiBpbml0aWFsaXplIHdpdGggYWxsIGRldmljZXMgdGhhdCB3ZSBnb3Qgc28gZmFyICovXG4gIDcxOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGlicywgXHUwMDI2ZGlic19kZXZfbGlzdC5saXN0LCBsaXN0KSB7XG4gIDcyOlx0XHRcdFx0ZGlicy1cdTAwM2Vwcml2W2ldID0gTlVMTDtcbiAgNzM6XHRcdFx0XHRjbGllbnQtXHUwMDNlb3BzLVx1MDAzZWFkZF9kZXYoZGlicyk7XG4gIDc0Olx0XHRcdFx0ZGlic19zZXR1cF9mb3J3YXJkaW5nKGNsaWVudCwgZGlicyk7XG4gIDc1Olx0XHRcdH1cbiAgNzY6XHRcdH1cbiAgNzc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkaWJzX2Rldl9saXN0Lm11dGV4KTtcbiAgNzg6XHRcbiAgNzk6XHRcdHJldHVybiByYztcbiAgODA6XHR9XG4gIDgxOlx0RVhQT1JUX1NZTUJPTF9HUEwoZGlic19yZWdpc3Rlcl9jbGllbnQpO1xuICA4MjpcdFxuICA4MzpcdGludCBkaWJzX3VucmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50KVxuICA4NDpcdHtcbiAgODU6XHRcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcbiAgODY6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gIDg3Olx0XHRpbnQgbWF4X2RtYnM7XG4gIDg4Olx0XHRpbnQgcmMgPSAwO1xuICA4OTpcdFxuICA5MDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkaWJzX2Rldl9saXN0Lm11dGV4KTtcbiAgOTE6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGlicywgXHUwMDI2ZGlic19kZXZfbGlzdC5saXN0LCBsaXN0KSB7XG4gIDkyOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuICA5MzpcdFx0XHRtYXhfZG1icyA9IGRpYnMtXHUwMDNlb3BzLVx1MDAzZW1heF9kbWJzKCk7XG4gIDk0Olx0XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBtYXhfZG1iczsgJiM0MzsmIzQzO2kpIHtcbiAgOTU6XHRcdFx0XHRpZiAoZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyW2ldID09IGNsaWVudC1cdTAwM2VpZCkge1xuICA5NjpcdFx0XHRcdFx0V0FSTigxLCBcJiMzNDslczogYXR0ZW1wdCB0byB1bnJlZ2lzdGVyICYjMzk7JXMmIzM5OyB3aXRoIHJlZ2lzdGVyZWQgZG1iKHMpXFxuXCYjMzQ7LFxuICA5NzpcdFx0XHRcdFx0ICAgICBfX2Z1bmNfXywgY2xpZW50LVx1MDAzZW5hbWUpO1xuICA5ODpcdFx0XHRcdFx0cmMgPSAtRUJVU1k7XG4gIDk5Olx0XHRcdFx0XHRnb3RvIGVycl9yZWdfZG1iO1xuIDEwMDpcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgZGlic19tYWluLmMgQ29kZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgMjAwIHRocm91Z2ggMjY1LiBUaGF0IHNwZWNpZmljIHJlZ2lvbiBpcyBsaWtlbHkgd2hlcmUgYSBrZXkgcGllY2Ugb2YgdGhlIGRpYnMgZHJpdmVyJiMzOTtzIGxvZ2ljIGxpdmVzLiBJJiMzOTttIGd1ZXNzaW5nIGl0IHByb2JhYmx5IGhhbmRsZXMgc29tZSBjcnVjaWFsIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBvciBtYXliZSB0aGUgY29yZSBkYXRhIHBhdGggc2V0dXAgZm9yIGEgY3JpdGljYWwgZGlicyBmZWF0dXJlLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHN5c3RlbSwgSSBzdXNwZWN0IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgb3IgcGVyaGFwcyBhbiBpbmVmZmljaWVudCBhbGdvcml0aG0gaW4gdGhhdCBzZWN0aW9uLiBJdCYjMzk7cyBhbHNvIHBvc3NpYmxlIEkmIzM5O20gbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHBhdHRlcm4gb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUgdGhhdCBtYXkgaGF2ZSBiZWVuIGFkanVzdGVkIHJlY2VudGx5LiBJIGFudGljaXBhdGUgZmluZGluZyBzb21lIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyByZWxldmFudCB0byB0aGUgZGV2aWNlLCBvciBwZXJoYXBzIHRoZSByZWdpc3RyYXRpb24gb2YgYSBuZXcgZGV2aWNlIG9yIG1vZHVsZS4gTWF5YmUgdGhlcmUmIzM5O3MgYW4gaW50ZXJydXB0IGhhbmRsZXIgc2V0dGluZyB1cC4gSXQgYWxsIGRlcGVuZHMgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCB0aGUgc3BlY2lmaWMgbW9kdWxlJiMzOTtzIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgY29udHJvbCBmbG93LCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZSBvciBvdGhlciBrZXJuZWwgbW9kdWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWRkKTtcbiAyMjE6XHRcbiAyMjI6XHR2b2lkIGRpYnNfZGV2X2RlbChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG4gMjIzOlx0e1xuIDIyNDpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAyMjU6XHRcdGludCBpO1xuIDIyNjpcdFxuIDIyNzpcdFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNmRpYnMtXHUwMDNlZGV2LmtvYmosIFx1MDAyNmRpYnNfZGV2X2F0dHJfZ3JvdXApO1xuIDIyODpcdFxuIDIyOTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMjMwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfRElCU19DTElFTlRTOyAmIzQzOyYjNDM7aSlcbiAyMzE6XHRcdFx0ZGlicy1cdTAwM2VzdWJzW2ldID0gTlVMTDtcbiAyMzI6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMjMzOlx0XG4gMjM0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmRpYnNfZGV2X2xpc3QubXV0ZXgpO1xuIDIzNTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjbGllbnRzX2xvY2spO1xuIDIzNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2NsaWVudDsgJiM0MzsmIzQzO2kpIHtcbiAyMzc6XHRcdFx0aWYgKGNsaWVudHNbaV0pXG4gMjM4Olx0XHRcdFx0Y2xpZW50c1tpXS1cdTAwM2VvcHMtXHUwMDNlZGVsX2RldihkaWJzKTtcbiAyMzk6XHRcdH1cbiAyNDA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZjbGllbnRzX2xvY2spO1xuIDI0MTpcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkaWJzLVx1MDAzZWxpc3QpO1xuIDI0MjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpYnNfZGV2X2xpc3QubXV0ZXgpO1xuIDI0MzpcdFxuIDI0NDpcdFx0ZGV2aWNlX2RlbChcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4gMjQ1Olx0fVxuIDI0NjpcdEVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfZGV2X2RlbCk7XG4gMjQ3Olx0XG4gMjQ4Olx0c3RhdGljIGludCBfX2luaXQgZGlic19pbml0KHZvaWQpXG4gMjQ5Olx0e1xuIDI1MDpcdFx0aW50IHJjO1xuIDI1MTpcdFxuIDI1MjpcdFx0cmMgPSBjbGFzc19yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKTtcbiAyNTM6XHRcdGlmIChyYylcbiAyNTQ6XHRcdFx0Z290byBlcnI7XG4gMjU1Olx0XG4gMjU2Olx0XHRyYyA9IGRpYnNfbG9vcGJhY2tfaW5pdCgpO1xuIDI1NzpcdFx0aWYgKHJjKVxuIDI1ODpcdFx0XHRnb3RvIGVycl91bnJlZ2lzdGVyO1xuIDI1OTpcdFxuIDI2MDpcdFx0cmV0dXJuIHJjO1xuIDI2MTpcdFxuIDI2MjpcdGVycl91bnJlZ2lzdGVyOlxuIDI2MzpcdFx0Y2xhc3NfdW5yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKTtcbiAyNjQ6XHRlcnI6XG4gMjY1Olx0XHRwcl9lcnIoXCYjMzQ7JXMgZmFpbHMgd2l0aCAlZFxcblwmIzM0OywgX19mdW5jX18sIHJjKTtcbiAyNjY6XHRcdHJldHVybiByYztcbiAyNjc6XHR9XG4gMjY4Olx0XG4gMjY5Olx0c3RhdGljIHZvaWQgX19leGl0IGRpYnNfZXhpdCh2b2lkKVxuIDI3MDpcdHtcbiAyNzE6XHRcdGRpYnNfbG9vcGJhY2tfZXhpdCgpO1xuIDI3MjpcdFx0Y2xhc3NfdW5yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKTtcbiAyNzM6XHR9XG4gMjc0Olx0XG4gMjc1Olx0c3Vic3lzX2luaXRjYWxsKGRpYnNfaW5pdCk7XG4gMjc2Olx0bW9kdWxlX2V4aXQoZGlic19leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gdGhpcyBgZGlic19pbml0YCBmdW5jdGlvbj8gSXQgc2VlbXMgdGhlIG9yaWdpbmFsIGNvZGUgbWlzc2VkIGNsZWFuaW5nIHVwIHRoZSBjbGFzcyByZWdpc3RyYXRpb24gaWYgYGRpYnNfbG9vcGJhY2tfaW5pdGAgZmFpbGVkLiBOb3csIHRoZSBwYXRjaCBhZGRzIHRoYXQgY2xlYW4tdXAgc3RlcC4gSXQgYWxzbyBoYW5kbGVzIHRoZSBgY2xhc3NfcmVnaXN0ZXJgIGZhaWx1cmUuCgpNeSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSAoYF9faW5pdCBkaWJzX2luaXRgKSBpcyBhY3R1YWxseSAqd29ydGgqIGZ1enppbmcuIFdlIG5lZWQgdG8gZm9sbG93IHRoZSBndWlkZWxpbmVzLiBMZXQgbWUgc2VlLi4uIHRoZSBndWlkZWxpbmVzIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXTigJlzIGp1c3QgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGxvZ2dpbmcgY2hhbmdlcywgb3IgY29uc3RhbnRzIHRoYXQgZG9u4oCZdCBhZmZlY3QgZXhlY3V0aW9uIGZsb3cuIFRoZSBndWlkZWxpbmVzIGFsc28gc2F5IG5vdCB0byBmdXp6IHVucmVhY2hhYmxlIGNvZGUuIEFuZCB0aGUgZ3VpZGVsaW5lcyBzYXkgZG9uJiMzOTt0IGZ1enogdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMuCgpCdXQgdGhpcyBzZWVtcyBsaWtlIGNvcmUga2VybmVsIGxvZ2ljLi4uIGJ1dCwgaXMgaXQgcmVhY2hhYmxlPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdC4gVGhpcyBgZGlic19pbml0YCBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgYHN1YnN5c19pbml0Y2FsbGAgdGltZSwgb3IgbW9kdWxlIGluaXQgaWYgRElCUyBpcyBidWlsdCBhcyBhIG1vZHVsZSBvciBidWlsdC1pbi4gVGhpcyBtZWFucyB0aGlzIGlzIGNvcmUga2VybmVsIGxvZ2ljLiBDYW4gYGRpYnNfbG9vcGJhY2tfaW5pdCgpYCBhY3R1YWxseSAqZmFpbCogdW5kZXIgZnV6emluZyBjb25kaXRpb25zPyBJJiMzOTt2ZSBnb3QgdG8gbG9vayBjbG9zZXIgYXQgYGRpYnNfbG9vcGJhY2tfaW5pdCgpYCBpdHNlbGYgdG8gYXNzZXNzIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGZhaWx1cmUgbW9kZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19sb29wYmFja19pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ1PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzU3LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTg6aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTkte1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg9MzU9c3RydWN0IGRpYnNfbG9fZGV2IHtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQzLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0NDppbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00NS12b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDYtI2Vsc2VcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NDc6c3RhdGljIGlubGluZSBpbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQ4LXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjQ4PXN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNTUtXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjU2Olx0cmMgPSBkaWJzX2xvb3BiYWNrX2luaXQoKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNTctXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIERJQlMgS2NvbmZpZyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgRElCUyBpcyBjb25maWd1cmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGFzIGFsd2F5cywgaXMgdGhlIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBESUJTIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBzZWUgaG93IHRoZXkgaW50ZWdyYXRlIHdpdGggb3RoZXIgc3Vic3lzdGVtcy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGtleXdvcmRzIGxpa2UgJiMzNDtESUJTJiMzNDssICYjMzQ7ZHluYW1pYyBpbnN0cnVjdGlvbiYjMzQ7LCAmIzM0O2JyYW5jaCBwcmVkaWN0aW9uLCYjMzQ7IG9yIHBvdGVudGlhbGx5IHJlbGF0ZWQgYWNyb255bXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBoaWVyYXJjaHkgb2Ygb3B0aW9ucywgbGlrZWx5IG5lc3RlZCB1bmRlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3IgY29yZSBrZXJuZWwgZmVhdHVyZXMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSByZWZlcmVuY2VzIHRvIHRoZSB1bmRlcmx5aW5nIGJ1aWxkIHN5c3RlbSBmaWxlcyAobGlrZWx5IE1ha2VmaWxlcykgdG8gc2VlIGhvdyB0aG9zZSBvcHRpb25zIGFmZmVjdCBjb21waWxhdGlvbiwgbGlua2luZywgYW5kIHVsdGltYXRlbHksIHRoZSBiZWhhdmlvciBvZiB0aGUga2VybmVsIGF0IHJ1bnRpbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IERJQlMgY29uZmlndXJhdGlvbnMg4oCTIHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgcG90ZW50aWFsIG92ZXJoZWFkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGBLY29uZmlnYCBmaWxlcyBoYXZlIHRvIHRlbGwgdXMgYWJvdXQgaG93IHRoaXMgaXMgYWxsIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcuKkRJQlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoyOmNvbmZpZyBESUJTXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBmaWxlcyB5b3UgbWVudGlvbmVkOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIHRoZSBEaWJzIERyaXZlcioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgZHJpdmVycy9kaWJzL0tjb25maWdgIGFuZCBgZHJpdmVycy9kaWJzL01ha2VmaWxlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgcHJvY2VzcyBmb3IgdGhlICYjMzQ7ZGlicyYjMzQ7IGRyaXZlciBsaXZlcy4gVGhlIGBLY29uZmlnYCBmaWxlIGlzIHdoYXQgZGljdGF0ZXMgd2hhdCBvcHRpb25zIHRoZSB1c2VyIHNlZXMgaW4gdGhlIG1lbnVjb25maWcgb3IgZGVmY29uZmlnIHByb2Nlc3MgLSBpdCBkZWZpbmVzIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGFsbCB0aGUgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbmNsdWRlZCBvciBleGNsdWRlZCBmcm9tIHRoZSBkaWJzIGRyaXZlci4gSeKAmWxsIGV4cGVjdCB0byBmaW5kIHRoaW5ncyBsaWtlIHdoZXRoZXIgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSBvciBidWlsdC1pbiwgYW5kIHBvc3NpYmx5IG9wdGlvbnMgZm9yIGRpZmZlcmVudCBkaWJzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzLiBUaGUgYE1ha2VmaWxlYCwgb24gdGhlIG90aGVyIGhhbmQsIHdpbGwgZ292ZXJuIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGFjdHVhbGx5ICpjb21waWxlcyogYW5kIGxpbmtzIHRoZSBkcml2ZXIuIEl0JiMzOTtsbCBzcGVjaWZ5IHRoZSBzb3VyY2UgZmlsZXMsIGluY2x1ZGUgcGF0aHMsIGFueSBjb21waWxlciBmbGFncywgYW5kIHByb2JhYmx5IGRlYWwgd2l0aCBtb2R1bGUtc3BlY2lmaWMgdGFyZ2V0cyBpZiBpdCYjMzk7cyBiZWluZyBidWlsdCBhcyBhIGxvYWRhYmxlIGtlcm5lbCBtb2R1bGUuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgdXNlIHN0YW5kYXJkIGtlcm5lbCBidWlsZCBydWxlcywgbWF5YmUgaW5jbHVkaW5nIHNvbWUgbWFjcm9zIHRvIGhhbmRsZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgaWYgdGhlIEtjb25maWcgZmlsZSBoYXMgc2V0dXAgb3B0aW9ucyBmb3IgdGhlIGRpdmVyJiMzOTtzIGJlaGF2aW91ci4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdGNvbmZpZyBESUJTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVmYXVsdCBuXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAoRElCUykgaXMgYSBjb21tdW5pY2F0aW9uIG1ldGhvZCB0aGF0XG4gICA3Olx0XHQgIHVzZXMgY29tbW9uIHBoeXNpY2FsIChpbnRlcm5hbCkgbWVtb3J5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgYWNjZXNzXG4gICA4Olx0XHQgIGludG8gYSByZW1vdGUgYnVmZmVyLlxuICAgOTpcdFxuICAxMDpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gcHJvdmlkZSB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIgYmV0d2VlblxuICAxMTpcdFx0ICBkaWJzIGRldmljZXMgYW5kIGRpYnMgY2xpZW50cyBsaWtlIHRoZSBTTUMgcHJvdG9jb2wuXG4gIDEyOlx0XHQgIFRoZSBtb2R1bGUgbmFtZSBpcyBkaWJzLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBESUJTX0xPXG4gIDE1Olx0XHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBESUJTXG4gIDE3Olx0XHRkZWZhdWx0IG5cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgRElCU19MTyBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBzb2Z0d2FyZS1lbXVsYXRlZCBkaWJzIGRldmljZVxuICAyMDpcdFx0ICBuYW1lZCBsbyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgd2hlbiBjb21tdW5pY2F0aW9uXG4gIDIxOlx0XHQgIG9jY3VycyB3aXRoaW4gdGhlIHNhbWUgT1MuIFRoaXMgaGVscHMgaW4gY29udmVuaWVudCB0ZXN0aW5nIG9mXG4gIDIyOlx0XHQgIGRpYnMgY2xpZW50cywgc2luY2UgZGlicyBsb29wYmFjayBpcyBpbmRlcGVuZGVudCBvZiBhcmNoaXRlY3R1cmUgb3JcbiAgMjM6XHRcdCAgaGFyZHdhcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIERJQlMgTG9vcGJhY2sqKgoKT2theSwgSSYjMzk7dmUgZ290IHRoZSBnZW5lcmFsIHBpY3R1cmUgbm93LCBidXQgSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIHRob3JvdWdoLiBXZSYjMzk7dmUgbG9va2VkIGF0IHRoZSBtYWluIGNvbXBvbmVudHMsIGJ1dCBsZXQmIzM5O3Mgbm90IG92ZXJsb29rIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGVkZ2UgY2FzZXMuIEEgZ29vZCBlbmdpbmVlciBuZXZlciBhc3N1bWVzIHRoZXkmIzM5O3ZlIGdvdCBpdCBhbGwsIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGFsc28gY2hlY2sgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgLiYjMzQ7IFRoaXMgZmlsZSBsaWtlbHkgaGFuZGxlcyB0aGUgbG9vcGJhY2sgZnVuY3Rpb25hbGl0eSwgd2hpY2ggY291bGQgcmV2ZWFsIGludGVyZXN0aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWdpZXMsIG9yIGV2ZW4gcG9pbnQgb3V0IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgY29yZSBESUJTIGxvZ2ljIHRoYXQgd2UgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gYSBxdWljayBvdmVydmlldy4gSXQmIzM5O3MgdGhlIGtpbmQgb2YgcGxhY2Ugd2hlcmUgdW5leHBlY3RlZCBkZXRhaWxzIG9mdGVuIHJlc2lkZSwgYW5kIHVuY292ZXJpbmcgdGhlbSBlYXJseSBzYXZlcyBhIGxvdCBvZiBoZWFkYWNoZXMgbGF0ZXIuIEJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnksIGFuZCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCByZWxldmFudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1NTpcdFx0bG9fZGV2ID0gTlVMTDtcbiAzNTY6XHR9XG4gMzU3Olx0XG4gMzU4Olx0aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxuIDM1OTpcdHtcbiAzNjA6XHRcdHJldHVybiBkaWJzX2xvX2Rldl9wcm9iZSgpO1xuIDM2MTpcdH1cbiAzNjI6XHRcbiAzNjM6XHR2b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKVxuIDM2NDpcdHtcbiAzNjU6XHRcdGRpYnNfbG9fZGV2X3JlbW92ZSgpO1xuIDM2NjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGRpYnNfbG9fZGV2X3Byb2JlIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgZGlic19sb19kZXZfcHJvYmVgIHdpdGhpbiB0aGUgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBsb29wYmFjayBkZXZpY2UgZHJpdmVyLCB3aGljaCBpcyBhIHN0YW5kYXJkIHBhdHRlcm4uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgZGV2aWNlLXNwZWNpZmljIHNldHVwLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgaG93IGl0JiMzOTtzIHRpZWQgaW50byB0aGUgRGlyZWN0IEkvTyBCeXBhc3MgU3Vic3lzdGVtIChESUJTKS4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIERJQlMgZnJhbWV3b3JrLCBwcm9iYWJseSB0byByZWdpc3RlciB0aGUgbG9vcGJhY2sgZGV2aWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIERJQlMgbGF5ZXIuIEkmIzM5O2xsIG5lZWQgdG8gb2JzZXJ2ZSB3aGF0IGRldmljZSByZXNvdXJjZXMgaXQmIzM5O3MgaGFuZGxpbmcuIElzIGl0IHVzaW5nIGEgbWVtb3J5IHJlZ2lvbj8gSW50ZXJydXB0cz8gRE1BIGNoYW5uZWxzPyBJIGFsc28gd2FudCB0byBzZWUgdGhlIGVycm9yIGhhbmRsaW5nOyB3aGF0JiMzOTtzIHRoZSBkcml2ZXImIzM5O3MgZ3JhY2VmdWwgZGVncmFkYXRpb24gcGxhbiBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgaW5pdGlhbGl6YXRpb24/IEZpbmFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBuZXRkZXYgcmVnaXN0cmF0aW9uIG9yIHNpbWlsYXIgdG8gbWFrZSB0aGUgbG9vcGJhY2sgZGV2aWNlIGFjY2Vzc2libGUgdG8gdGhlIHN5c3RlbSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIHBhcnNlIHRocm91Z2ggdGhlIGNvZGUgZm9yIHRoZSBzcGVjaWZpY3Mgb2YgdGhlc2UgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0c3RhdGljIHZvaWQgZGlic19sb19kZXZfZXhpdChzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYpXG4gMzAxOlx0e1xuIDMwMjpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2NudCkpXG4gMzAzOlx0XHRcdHdhaXRfZXZlbnQobGRldi1cdTAwM2VsZGV2X3JlbGVhc2UsICFhdG9taWNfcmVhZChcdTAwMjZsZGV2LVx1MDAzZWRtYl9jbnQpKTtcbiAzMDQ6XHR9XG4gMzA1Olx0XG4gMzA2Olx0c3RhdGljIGludCBkaWJzX2xvX2Rldl9wcm9iZSh2b2lkKVxuIDMwNzpcdHtcbiAzMDg6XHRcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbiAzMDk6XHRcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcbiAzMTA6XHRcdGludCByZXQ7XG4gMzExOlx0XG4gMzEyOlx0XHRsZGV2ID0ga3phbGxvY19vYmooKmxkZXYpO1xuIDMxMzpcdFx0aWYgKCFsZGV2KVxuIDMxNDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMTU6XHRcbiAzMTY6XHRcdGRpYnMgPSBkaWJzX2Rldl9hbGxvYygpO1xuIDMxNzpcdFx0aWYgKCFkaWJzKSB7XG4gMzE4Olx0XHRcdGtmcmVlKGxkZXYpO1xuIDMxOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMjA6XHRcdH1cbiAzMjE6XHRcbiAzMjI6XHRcdGxkZXYtXHUwMDNlZGlicyA9IGRpYnM7XG4gMzIzOlx0XHRkaWJzLVx1MDAzZWRydl9wcml2ID0gbGRldjtcbiAzMjQ6XHRcdGRpYnNfbG9fZGV2X2luaXQobGRldik7XG4gMzI1Olx0XHR1dWlkX2dlbihcdTAwMjZkaWJzLVx1MDAzZWdpZCk7XG4gMzI2Olx0XHRkaWJzLVx1MDAzZW9wcyA9IFx1MDAyNmRpYnNfbG9fb3BzO1xuIDMyNzpcdFxuIDMyODpcdFx0ZGlicy1cdTAwM2VkZXYucGFyZW50ID0gTlVMTDtcbiAzMjk6XHRcdGRldl9zZXRfbmFtZShcdTAwMjZkaWJzLVx1MDAzZWRldiwgXCYjMzQ7JXNcJiMzNDssIGRpYnNfbG9fZGV2X25hbWUpO1xuIDMzMDpcdFxuIDMzMTpcdFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xuIDMzMjpcdFx0aWYgKHJldClcbiAzMzM6XHRcdFx0Z290byBlcnJfcmVnO1xuIDMzNDpcdFx0bG9fZGV2ID0gbGRldjtcbiAzMzU6XHRcdHJldHVybiAwO1xuIDMzNjpcdFxuIDMzNzpcdGVycl9yZWc6XG4gMzM4Olx0XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbiAzMzk6XHRcdHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuIDM0MDpcdFx0a2ZyZWUobGRldik7XG4gMzQxOlx0XG4gMzQyOlx0XHRyZXR1cm4gcmV0O1xuIDM0MzpcdH1cbiAzNDQ6XHRcbiAzNDU6XHRzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcbiAzNDY6XHR7XG4gMzQ3Olx0XHRpZiAoIWxvX2RldilcbiAzNDg6XHRcdFx0cmV0dXJuO1xuIDM0OTpcdFxuIDM1MDpcdFx0ZGlic19kZXZfZGVsKGxvX2Rldi1cdTAwM2VkaWJzKTtcbiAzNTE6XHRcdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcbiAzNTI6XHRcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuIDM1MzpcdFx0cHV0X2RldmljZShcdTAwMjZsb19kZXYtXHUwMDNlZGlicy1cdTAwM2VkZXYpO1xuIDM1NDpcdFx0a2ZyZWUobG9fZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0NwoJCQkJCQkJb3V0cHV0OiA4NQoJCQkJCQkJdGhvdWdodHM6IDEyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIERJQlMgRHJpdmVyIEluaXRpYWxpemF0aW9uIEVycm9yIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGNvbW1pdC4gRmlyc3QsIEkgd2FudCB0byBxdWlja2x5IGNoZWNrIHRoZSBgZ2l0IGxvZ2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcmVjZW50IGFjdGl2aXR5IGFyb3VuZCB0aGlzIGBkaWJzX21haW4uY2AgZmlsZSwgb3IganVzdCBsb29rIGF0IHRoZSBkaWZmLiBUaGUgZGlmZiBpdHNlbGYgaXMgc2hvd2luZyBzb21lIGNoYW5nZXMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgYGRpYnNfaW5pdGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGFuIGFkZGl0aW9uIG9mIGBjbGFzc191bnJlZ2lzdGVyKCZhbXA7ZGlic19jbGFzcylgIGFuZCBhIGBwcl9lcnJgIGNhbGwgaW4gdGhlIGVycm9yIHVud2luZCBwYXRoLgoKTm93LCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjoKCjEuICAqKldoYXQmIzM5O3MgQ2hhbmdlZD8qKiBUaGUgZXJyb3IgaGFuZGxpbmcgaW4gYGRpYnNfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBoYXMgYmVlbiB1cGRhdGVkLiBJZiBgZGlic19sb29wYmFja19pbml0KClgIGZhaWxzIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGBjbGFzc191bnJlZ2lzdGVyYCBhbmQgYHByX2VycmAgYXJlIG5vdyBjYWxsZWQuIFNpbWlsYXJseSwgaWYgYGNsYXNzX3JlZ2lzdGVyYCBmYWlscywgdGhlIGBwcl9lcnJgIGlzIGNhbGxlZC4KCjIuICAqKkZ1enppbmcgQXBwbGljYWJpbGl0eT8qKiAgSGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBgZGlic19pbml0YCBpcyBtYXJrZWQgd2l0aCBgX19pbml0YCBhbmQgaXMgcGFydCBvZiB0aGUgaW5pdGNhbGwgc2VxdWVuY2UsIGV4ZWN1dGluZyBhdCBib290IHRpbWUgb3IgbW9kdWxlIGxvYWQgdGltZS4gVGhlIGBfX2luaXRgIGNvZGUgaXMgZGlzY2FyZGVkIGFmdGVyIHRoYXQgaW5pdGlhbCBzZXR1cC4gSW4gZW52aXJvbm1lbnRzIGxpa2Ugc3l6a2FsbGVyLCB3ZSBvbmx5IGZ1enogYWZ0ZXIgdGhlIGluaXRpYWwgYm9vdC4gVGh1cywgZXJyb3IgcGF0aHMgd2l0aGluIGBfX2luaXRgIGZ1bmN0aW9ucyBhcmUgdHlwaWNhbGx5IHVucmVhY2hhYmxlIGR1cmluZyByZWd1bGFyIGZ1enppbmcgYmVjYXVzZSB0aGV5IGFyZW4mIzM5O3QgdHJpZ2dlcmVkIGJ5IHVzZXItc3BhY2Ugc3lzY2FsbHMgb3Igc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoaXMgcGFydGljdWxhciBwYXRjaCBkZWFscyAqb25seSogd2l0aCBjbGVhbnVwIG9uIGluaXRpYWxpemF0aW9uIGVycm9ycyAoZWl0aGVyIGZyb20gYGNsYXNzX3JlZ2lzdGVyYCBvciBgZGlic19sb29wYmFja19pbml0YCkuCgpOb3csIGxldCYjMzk7cyByZWZlcmVuY2UgdGhvc2UgZnV6emluZyBydWxlcy4gSSBzZWUgdGhhdCBjaGFuZ2VzIGluIGRvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIGNvZGUgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZyAobGlrZSBgcHJfZXJyYCksIGNvbnN0YW50IG1vZGlmaWNhdGlvbnMgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBleGVjdXRpb24gZmxvdywgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCkgZXhlY3V0ZWQgb25seSBvbiBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMgc2hvdWxkbiYjMzk7dCBiZSBjb25zaWRlcmVkIGZ1enotd29ydGh5LgoKV2FpdCwgc2hvdWxkIEkgcmV0aGluayB0aGUgYF9faW5pdGAgZXJyb3IgY2xlYW51cD8gQ291bGQgRElCUyBiZSByZXBlYXRlZGx5IGxvYWRlZCBhbmQgdW5sb2FkZWQ/IEV2ZW4gaWYgc28sIHRoZXNlIGVycm9yIHBhdGhzIHdpdGhpbiBgX19pbml0YCBhcmUgb25seSByZWFjaGVkIGlmIGBkaWJzX2xvb3BiYWNrX2luaXQoKWAgZmFpbHMgKHR5cGljYWxseSBvbmx5IG9uIEVOT01FTSBkdXJpbmcgYm9vdC9pbnNtb2QpLiBUaGVyZSBpcyB6ZXJvIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJ1bnRpbWUgbG9naWMsIHN5c2NhbGwgaGFuZGxpbmcsIHBhY2tldCBwcm9jZXNzaW5nLCBvciBkZXZpY2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyAqcHVyZWx5KiBhZGRpbmcgYW4gZXJyb3IgcGF0aCBjbGVhbnVwIChjYWxsaW5nIGBjbGFzc191bnJlZ2lzdGVyYCkgaW4gYW4gYF9faW5pdGAgZnVuY3Rpb24uCgpJIGhhdmUgZG91YmxlIGNoZWNrZWQgdGhlIGRpZmYuIEl0IG9ubHkgbW9kaWZpZXMgbGluZXMgMjUxLTI2NyBvZiBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYC4KClRoZXJlZm9yZSwgdGhlIGltcGFjdCB0byBydW50aW1lIGZ1bmN0aW9uYWxpdHkgaXMgbmVnbGlnaWJsZTsgdGhpcyBpcyBub3Qgd29ydGggZnV6emluZy4KCk15IGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgRm9jdXNTeW1ib2xzYDogYFtdYCAoZW1wdHkgbGlzdCkKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgbGlzdCkKKiAgIGBSZWFzb25pbmdgOiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgZXJyb3IgdW53aW5kIGNsZWFudXAgKGBjbGFzc191bnJlZ2lzdGVyYCkgYW5kIGVycm9yIGxvZ2dpbmcgdG8gdGhlIGBfX2luaXQgZGlic19pbml0KClgIGZ1bmN0aW9uIHdoZW4gYGRpYnNfbG9vcGJhY2tfaW5pdCgpYCBmYWlscyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHJ1bnRpbWUgcmVhY2hhYmxlIGZ1bmN0aW9uYWxpdHkgd29ydGggZnV6emluZy4mIzM0OwoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGZpeGVzIGVycm9yIHVud2luZGluZyBpbiB0aGUgbW9kdWxlL3N1YnN5c3RlbSBpbml0IGZ1bmN0aW9uIChfX2luaXQgZGlic19pbml0KSwgYWRkaW5nIGNsYXNzX3VucmVnaXN0ZXIgYW5kIGVycm9yIGxvZ2dpbmcgaWYgZGlic19sb29wYmFja19pbml0IGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IHJlYWNoYWJsZSBydW50aW1lIGtlcm5lbCBsb2dpYyBvciBzeXNjYWxsIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBmaXhlcyBlcnJvciB1bndpbmRpbmcgaW4gdGhlIG1vZHVsZS9zdWJzeXN0ZW0gaW5pdCBmdW5jdGlvbiAoX19pbml0IGRpYnNfaW5pdCksIGFkZGluZyBjbGFzc191bnJlZ2lzdGVyIGFuZCBlcnJvciBsb2dnaW5nIGlmIGRpYnNfbG9vcGJhY2tfaW5pdCBmYWlscyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEl0IGRvZXMgbm90IGFsdGVyIGFueSByZWFjaGFibGUgcnVudGltZSBrZXJuZWwgbG9naWMgb3Igc3lzY2FsbCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTowNi43ODcwMTE2NjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY1Njk0NDM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgZml4ZXMgZXJyb3IgdW53aW5kaW5nIGluIHRoZSBtb2R1bGUvc3Vic3lzdGVtIGluaXQgZnVuY3Rpb24gKF9faW5pdCBkaWJzX2luaXQpLCBhZGRpbmcgY2xhc3NfdW5yZWdpc3RlciBhbmQgZXJyb3IgbG9nZ2luZyBpZiBkaWJzX2xvb3BiYWNrX2luaXQgZmFpbHMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcmVhY2hhYmxlIHJ1bnRpbWUga2VybmVsIGxvZ2ljIG9yIHN5c2NhbGwgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTowNi43ODcwMTYxOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NDc0MzcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBjNTlkZWNhNTc4NjllN2YwMGRkOGZmZDY5MmY0NmY4OTcyYjcyNjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxMDoyMTowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcXG5pbmRleCAyYjUzYTlkMjc3ZGNhLi4yMGM1MDk5N2E3Y2YyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xcbisrKyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xcbkBAIC0yNTEsMTMgKzI1MSwxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBkaWJzX2luaXQodm9pZClcXG4gXFxuIFxcdHJjID0gY2xhc3NfcmVnaXN0ZXIoXFx1MDAyNmRpYnNfY2xhc3MpO1xcbiBcXHRpZiAocmMpXFxuLVxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHRyYyA9IGRpYnNfbG9vcGJhY2tfaW5pdCgpO1xcbiBcXHRpZiAocmMpXFxuLVxcdFxcdHByX2VycihcXFwiJXMgZmFpbHMgd2l0aCAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHJjKTtcXG4rXFx0XFx0Z290byBlcnJfdW5yZWdpc3RlcjtcXG4gXFxuIFxcdHJldHVybiByYztcXG4rXFxuK2Vycl91bnJlZ2lzdGVyOlxcbitcXHRjbGFzc191bnJlZ2lzdGVyKFxcdTAwMjZkaWJzX2NsYXNzKTtcXG4rZXJyOlxcbitcXHRwcl9lcnIoXFxcIiVzIGZhaWxzIHdpdGggJWRcXFxcblxcXCIsIF9fZnVuY19fLCByYyk7XFxuK1xcdHJldHVybiByYztcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19leGl0IGRpYnNfZXhpdCh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTowNy4xNzI0MzUxNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxMjcxNTA4ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGZpeGVzIGVycm9yIHVud2luZGluZyBpbiB0aGUgbW9kdWxlL3N1YnN5c3RlbSBpbml0IGZ1bmN0aW9uIChfX2luaXQgZGlic19pbml0KSwgYWRkaW5nIGNsYXNzX3VucmVnaXN0ZXIgYW5kIGVycm9yIGxvZ2dpbmcgaWYgZGlic19sb29wYmFja19pbml0IGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IHJlYWNoYWJsZSBydW50aW1lIGtlcm5lbCBsb2dpYyBvciBzeXNjYWxsIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGM1OWRlY2E1Nzg2OWU3ZjAwZGQ4ZmZkNjkyZjQ2Zjg5NzJiNzI2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTA6MjE6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbmluZGV4IDJiNTNhOWQyNzdkY2EuLjIwYzUwOTk3YTdjZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbisrKyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xuQEAgLTI1MSwxMyArMjUxLDE5IEBAIHN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKVxuIFxuIFx0cmMgPSBjbGFzc19yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKTtcbiBcdGlmIChyYylcbi1cdFx0cmV0dXJuIHJjO1xuK1x0XHRnb3RvIGVycjtcbiBcbiBcdHJjID0gZGlic19sb29wYmFja19pbml0KCk7XG4gXHRpZiAocmMpXG4tXHRcdHByX2VycihcIiVzIGZhaWxzIHdpdGggJWRcXG5cIiwgX19mdW5jX18sIHJjKTtcbitcdFx0Z290byBlcnJfdW5yZWdpc3RlcjtcbiBcbiBcdHJldHVybiByYztcbitcbitlcnJfdW5yZWdpc3RlcjpcbitcdGNsYXNzX3VucmVnaXN0ZXIoXHUwMDI2ZGlic19jbGFzcyk7XG4rZXJyOlxuK1x0cHJfZXJyKFwiJXMgZmFpbHMgd2l0aCAlZFxcblwiLCBfX2Z1bmNfXywgcmMpO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgZGlic19leGl0KHZvaWQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTowNy4xNzI0MzY2MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDM2NDgyMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlicyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgdG8gYGRyaXZlcnMvZGlicy9kaWJzX21haW4uY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkaWJzX2luaXRgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGBnb3RvYCBzdGF0ZW1lbnQgYW5kIGEgcmVzdHJ1Y3R1cmVkIGVycm9yIGhhbmRsaW5nIGZsb3cuIEl0IGFwcGVhcnMgdGhleSBhcmUgYWltaW5nIGZvciBjbGVhbmVyIGVycm9yIHByb3BhZ2F0aW9uLiBQcmV2aW91c2x5LCBpZiBgY2xhc3NfcmVnaXN0ZXJgIG9yIGBkaWJzX2xvb3BiYWNrX2luaXRgIGZhaWxlZCwgdGhlIGNvZGUgd291bGQgc2ltcGx5IHJldHVybi4gTm93LCB0aGV5J3ZlIGludHJvZHVjZWQgbGFiZWxzIGBlcnJfdW5yZWdpc3RlcmAgYW5kIGBlcnJgIHRvIGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIG1vcmUgcm9idXN0bHkuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRpYnNgIGlzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBleHBsb3JlIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgIGFuZCBvdGhlciBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL2RpYnMvYCBkaXJlY3RvcnkgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBkaWJzIGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSdsbCBwcm9iYWJseSByZWFjaCBmb3IgbXkgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvb2xzIHRvIHF1aWNrbHkgZ2V0IHNvbWUgY29udGV4dCBhbmQgZmlndXJlIG91dCBpZiB0aGlzIG1vZHVsZSBpcyBldmVuIHVzZWQuIFRoaXMgaXMgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLCBidXQgdW5kZXJzdGFuZGluZyBpdHMgY29udGV4dCBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgc2lkZSBlZmZlY3RzIG9yIHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMToxNC42MDg5MjM5MDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvZGlic19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiAgRElCUyAtIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZ1xcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRElCUyBjbGFzcyBtb2R1bGVcXG4gICA2OlxcdCAqXFxuICAgNzpcXHQgKiAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDI1XFxuICAgODpcXHQgKi9cXG4gICA5OlxcdCNkZWZpbmUgcHJfZm10KGZtdCkgXFxcImRpYnM6IFxcXCIgZm10XFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9kaWJzLmhcXHUwMDNlXFxuICAxNjpcXHRcXG4gIDE3OlxcdCNpbmNsdWRlIFxcXCJkaWJzX2xvb3BiYWNrLmhcXFwiXFxuICAxODpcXHRcXG4gIDE5OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIGNsYXNzXFxcIik7XFxuICAyMDpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuICAyMTpcXHRcXG4gIDIyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgZGlic19jbGFzcyA9IHtcXG4gIDIzOlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiZGlic1xcXCIsXFxuICAyNDpcXHR9O1xcbiAgMjU6XFx0XFxuICAyNjpcXHQvKiB1c2UgYW4gYXJyYXkgcmF0aGVyIGEgbGlzdCBmb3IgZmFzdCBtYXBwaW5nOiAqL1xcbiAgMjc6XFx0c3RhdGljIHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50c1tNQVhfRElCU19DTElFTlRTXTtcXG4gIDI4OlxcdHN0YXRpYyB1OCBtYXhfY2xpZW50O1xcbiAgMjk6XFx0c3RhdGljIERFRklORV9NVVRFWChjbGllbnRzX2xvY2spO1xcbiAgMzA6XFx0c3RydWN0IGRpYnNfZGV2X2xpc3Qge1xcbiAgMzE6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiAgMzI6XFx0XFx0c3RydWN0IG11dGV4IG11dGV4OyAvKiBwcm90ZWN0cyBkaWJzIGRldmljZSBsaXN0ICovXFxuICAzMzpcXHR9O1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRzdGF0aWMgc3RydWN0IGRpYnNfZGV2X2xpc3QgZGlic19kZXZfbGlzdCA9IHtcXG4gIDM2OlxcdFxcdC5saXN0ID0gTElTVF9IRUFEX0lOSVQoZGlic19kZXZfbGlzdC5saXN0KSxcXG4gIDM3OlxcdFxcdC5tdXRleCA9IF9fTVVURVhfSU5JVElBTElaRVIoZGlic19kZXZfbGlzdC5tdXRleCksXFxuICAzODpcXHR9O1xcbiAgMzk6XFx0XFxuICA0MDpcXHRzdGF0aWMgdm9pZCBkaWJzX3NldHVwX2ZvcndhcmRpbmcoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQsXFxuICA0MTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG4gIDQyOlxcdHtcXG4gIDQzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA0NjpcXHRcXHRkaWJzLVxcdTAwM2VzdWJzW2NsaWVudC1cXHUwMDNlaWRdID0gY2xpZW50O1xcbiAgNDc6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAgNDg6XFx0fVxcbiAgNDk6XFx0XFxuICA1MDpcXHRpbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXFxuICA1MTpcXHR7XFxuICA1MjpcXHRcXHRzdHJ1Y3QgZGlic19kZXYgKmRpYnM7XFxuICA1MzpcXHRcXHRpbnQgaSwgcmMgPSAtRU5PU1BDO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkaWJzX2Rldl9saXN0Lm11dGV4KTtcXG4gIDU2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNsaWVudHNfbG9jayk7XFxuICA1NzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0RJQlNfQ0xJRU5UUzsgKytpKSB7XFxuICA1ODpcXHRcXHRcXHRpZiAoIWNsaWVudHNbaV0pIHtcXG4gIDU5OlxcdFxcdFxcdFxcdGNsaWVudHNbaV0gPSBjbGllbnQ7XFxuICA2MDpcXHRcXHRcXHRcXHRjbGllbnQtXFx1MDAzZWlkID0gaTtcXG4gIDYxOlxcdFxcdFxcdFxcdGlmIChpID09IG1heF9jbGllbnQpXFxuICA2MjpcXHRcXHRcXHRcXHRcXHRtYXhfY2xpZW50Kys7XFxuICA2MzpcXHRcXHRcXHRcXHRyYyA9IDA7XFxuICA2NDpcXHRcXHRcXHRcXHRicmVhaztcXG4gIDY1OlxcdFxcdFxcdH1cXG4gIDY2OlxcdFxcdH1cXG4gIDY3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y2xpZW50c19sb2NrKTtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0aWYgKGkgXFx1MDAzYyBNQVhfRElCU19DTElFTlRTKSB7XFxuICA3MDpcXHRcXHRcXHQvKiBpbml0aWFsaXplIHdpdGggYWxsIGRldmljZXMgdGhhdCB3ZSBnb3Qgc28gZmFyICovXFxuICA3MTpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRpYnMsIFxcdTAwMjZkaWJzX2Rldl9saXN0Lmxpc3QsIGxpc3QpIHtcXG4gIDcyOlxcdFxcdFxcdFxcdGRpYnMtXFx1MDAzZXByaXZbaV0gPSBOVUxMO1xcbiAgNzM6XFx0XFx0XFx0XFx0Y2xpZW50LVxcdTAwM2VvcHMtXFx1MDAzZWFkZF9kZXYoZGlicyk7XFxuICA3NDpcXHRcXHRcXHRcXHRkaWJzX3NldHVwX2ZvcndhcmRpbmcoY2xpZW50LCBkaWJzKTtcXG4gIDc1OlxcdFxcdFxcdH1cXG4gIDc2OlxcdFxcdH1cXG4gIDc3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdHJldHVybiByYztcXG4gIDgwOlxcdH1cXG4gIDgxOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfcmVnaXN0ZXJfY2xpZW50KTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0aW50IGRpYnNfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXFxuICA4NDpcXHR7XFxuICA4NTpcXHRcXHRzdHJ1Y3QgZGlic19kZXYgKmRpYnM7XFxuICA4NjpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAgODc6XFx0XFx0aW50IG1heF9kbWJzO1xcbiAgODg6XFx0XFx0aW50IHJjID0gMDtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuICA5MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRpYnMsIFxcdTAwMjZkaWJzX2Rldl9saXN0Lmxpc3QsIGxpc3QpIHtcXG4gIDkyOlxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA5MzpcXHRcXHRcXHRtYXhfZG1icyA9IGRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlbWF4X2RtYnMoKTtcXG4gIDk0OlxcdFxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbWF4X2RtYnM7ICsraSkge1xcbiAgOTU6XFx0XFx0XFx0XFx0aWYgKGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnJbaV0gPT0gY2xpZW50LVxcdTAwM2VpZCkge1xcbiAgOTY6XFx0XFx0XFx0XFx0XFx0V0FSTigxLCBcXFwiJXM6IGF0dGVtcHQgdG8gdW5yZWdpc3RlciAnJXMnIHdpdGggcmVnaXN0ZXJlZCBkbWIocylcXFxcblxcXCIsXFxuICA5NzpcXHRcXHRcXHRcXHRcXHQgICAgIF9fZnVuY19fLCBjbGllbnQtXFx1MDAzZW5hbWUpO1xcbiAgOTg6XFx0XFx0XFx0XFx0XFx0cmMgPSAtRUJVU1k7XFxuICA5OTpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9yZWdfZG1iO1xcbiAxMDA6XFx0XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMToxNC42MDkwMTU5NzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzU1MDY4MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBkaWJzX21haW4uYyBDb2RlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvZGlicy9kaWJzX21haW4uY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDIwMCB0aHJvdWdoIDI2NS4gVGhhdCBzcGVjaWZpYyByZWdpb24gaXMgbGlrZWx5IHdoZXJlIGEga2V5IHBpZWNlIG9mIHRoZSBkaWJzIGRyaXZlcidzIGxvZ2ljIGxpdmVzLiBJJ20gZ3Vlc3NpbmcgaXQgcHJvYmFibHkgaGFuZGxlcyBzb21lIGNydWNpYWwgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIG1heWJlIHRoZSBjb3JlIGRhdGEgcGF0aCBzZXR1cCBmb3IgYSBjcml0aWNhbCBkaWJzIGZlYXR1cmUuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzeXN0ZW0sIEkgc3VzcGVjdCBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgb3IgcGVyaGFwcyBhbiBpbmVmZmljaWVudCBhbGdvcml0aG0gaW4gdGhhdCBzZWN0aW9uLiBJdCdzIGFsc28gcG9zc2libGUgSSdtIGxvb2tpbmcgZm9yIGEgcGFydGljdWxhciBwYXR0ZXJuIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIHRoYXQgbWF5IGhhdmUgYmVlbiBhZGp1c3RlZCByZWNlbnRseS4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgc29tZSBpbml0aWFsaXphdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMgcmVsZXZhbnQgdG8gdGhlIGRldmljZSwgb3IgcGVyaGFwcyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgbmV3IGRldmljZSBvciBtb2R1bGUuIE1heWJlIHRoZXJlJ3MgYW4gaW50ZXJydXB0IGhhbmRsZXIgc2V0dGluZyB1cC4gSXQgYWxsIGRlcGVuZHMgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCB0aGUgc3BlY2lmaWMgbW9kdWxlJ3MgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC4gSSdsbCBmb2N1cyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgY29udHJvbCBmbG93LCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZSBvciBvdGhlciBrZXJuZWwgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6MjE6MTYuOTY0MDg2NTUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRFWFBPUlRfU1lNQk9MX0dQTChkaWJzX2Rldl9hZGQpO1xcbiAyMjE6XFx0XFxuIDIyMjpcXHR2b2lkIGRpYnNfZGV2X2RlbChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxuIDIyMzpcXHR7XFxuIDIyNDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAyMjU6XFx0XFx0aW50IGk7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdHN5c2ZzX3JlbW92ZV9ncm91cChcXHUwMDI2ZGlicy1cXHUwMDNlZGV2LmtvYmosIFxcdTAwMjZkaWJzX2Rldl9hdHRyX2dyb3VwKTtcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMjMwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNQVhfRElCU19DTElFTlRTOyArK2kpXFxuIDIzMTpcXHRcXHRcXHRkaWJzLVxcdTAwM2VzdWJzW2ldID0gTlVMTDtcXG4gMjMyOlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuIDIzNTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjbGllbnRzX2xvY2spO1xcbiAyMzY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heF9jbGllbnQ7ICsraSkge1xcbiAyMzc6XFx0XFx0XFx0aWYgKGNsaWVudHNbaV0pXFxuIDIzODpcXHRcXHRcXHRcXHRjbGllbnRzW2ldLVxcdTAwM2VvcHMtXFx1MDAzZWRlbF9kZXYoZGlicyk7XFxuIDIzOTpcXHRcXHR9XFxuIDI0MDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNsaWVudHNfbG9jayk7XFxuIDI0MTpcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkaWJzLVxcdTAwM2VsaXN0KTtcXG4gMjQyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdGRldmljZV9kZWwoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuIDI0NTpcXHR9XFxuIDI0NjpcXHRFWFBPUlRfU1lNQk9MX0dQTChkaWJzX2Rldl9kZWwpO1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRzdGF0aWMgaW50IF9faW5pdCBkaWJzX2luaXQodm9pZClcXG4gMjQ5OlxcdHtcXG4gMjUwOlxcdFxcdGludCByYztcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0cmMgPSBjbGFzc19yZWdpc3RlcihcXHUwMDI2ZGlic19jbGFzcyk7XFxuIDI1MzpcXHRcXHRpZiAocmMpXFxuIDI1NDpcXHRcXHRcXHRnb3RvIGVycjtcXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0cmMgPSBkaWJzX2xvb3BiYWNrX2luaXQoKTtcXG4gMjU3OlxcdFxcdGlmIChyYylcXG4gMjU4OlxcdFxcdFxcdGdvdG8gZXJyX3VucmVnaXN0ZXI7XFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdHJldHVybiByYztcXG4gMjYxOlxcdFxcbiAyNjI6XFx0ZXJyX3VucmVnaXN0ZXI6XFxuIDI2MzpcXHRcXHRjbGFzc191bnJlZ2lzdGVyKFxcdTAwMjZkaWJzX2NsYXNzKTtcXG4gMjY0OlxcdGVycjpcXG4gMjY1OlxcdFxcdHByX2VycihcXFwiJXMgZmFpbHMgd2l0aCAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHJjKTtcXG4gMjY2OlxcdFxcdHJldHVybiByYztcXG4gMjY3OlxcdH1cXG4gMjY4OlxcdFxcbiAyNjk6XFx0c3RhdGljIHZvaWQgX19leGl0IGRpYnNfZXhpdCh2b2lkKVxcbiAyNzA6XFx0e1xcbiAyNzE6XFx0XFx0ZGlic19sb29wYmFja19leGl0KCk7XFxuIDI3MjpcXHRcXHRjbGFzc191bnJlZ2lzdGVyKFxcdTAwMjZkaWJzX2NsYXNzKTtcXG4gMjczOlxcdH1cXG4gMjc0OlxcdFxcbiAyNzU6XFx0c3Vic3lzX2luaXRjYWxsKGRpYnNfaW5pdCk7XFxuIDI3NjpcXHRtb2R1bGVfZXhpdChkaWJzX2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMToxNi45NjQxNTgxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NzU1MTU5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQncyBjaGFuZ2VkIGluIHRoaXMgYGRpYnNfaW5pdGAgZnVuY3Rpb24/IEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIG1pc3NlZCBjbGVhbmluZyB1cCB0aGUgY2xhc3MgcmVnaXN0cmF0aW9uIGlmIGBkaWJzX2xvb3BiYWNrX2luaXRgIGZhaWxlZC4gTm93LCB0aGUgcGF0Y2ggYWRkcyB0aGF0IGNsZWFuLXVwIHN0ZXAuIEl0IGFsc28gaGFuZGxlcyB0aGUgYGNsYXNzX3JlZ2lzdGVyYCBmYWlsdXJlLlxuXG5NeSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSAoYF9faW5pdCBkaWJzX2luaXRgKSBpcyBhY3R1YWxseSAqd29ydGgqIGZ1enppbmcuIFdlIG5lZWQgdG8gZm9sbG93IHRoZSBndWlkZWxpbmVzLiBMZXQgbWUgc2VlLi4uIHRoZSBndWlkZWxpbmVzIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXTigJlzIGp1c3QgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGxvZ2dpbmcgY2hhbmdlcywgb3IgY29uc3RhbnRzIHRoYXQgZG9u4oCZdCBhZmZlY3QgZXhlY3V0aW9uIGZsb3cuIFRoZSBndWlkZWxpbmVzIGFsc28gc2F5IG5vdCB0byBmdXp6IHVucmVhY2hhYmxlIGNvZGUuIEFuZCB0aGUgZ3VpZGVsaW5lcyBzYXkgZG9uJ3QgZnV6eiB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycy5cblxuQnV0IHRoaXMgc2VlbXMgbGlrZSBjb3JlIGtlcm5lbCBsb2dpYy4uLiBidXQsIGlzIGl0IHJlYWNoYWJsZT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQuIFRoaXMgYGRpYnNfaW5pdGAgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IGBzdWJzeXNfaW5pdGNhbGxgIHRpbWUsIG9yIG1vZHVsZSBpbml0IGlmIERJQlMgaXMgYnVpbHQgYXMgYSBtb2R1bGUgb3IgYnVpbHQtaW4uIFRoaXMgbWVhbnMgdGhpcyBpcyBjb3JlIGtlcm5lbCBsb2dpYy4gQ2FuIGBkaWJzX2xvb3BiYWNrX2luaXQoKWAgYWN0dWFsbHkgKmZhaWwqIHVuZGVyIGZ1enppbmcgY29uZGl0aW9ucz8gSSd2ZSBnb3QgdG8gbG9vayBjbG9zZXIgYXQgYGRpYnNfbG9vcGJhY2tfaW5pdCgpYCBpdHNlbGYgdG8gYXNzZXNzIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGZhaWx1cmUgbW9kZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMToyMS45Mzk2NzcyMDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NjY3MjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWJzX2xvb3BiYWNrX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zNDU9c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1Ny1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM1ODppbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTkte1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaD0zNT1zdHJ1Y3QgZGlic19sb19kZXYge1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00My1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjQ0OmludCBkaWJzX2xvb3BiYWNrX2luaXQodm9pZCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00NS12b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQ2LSNlbHNlXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0NzpzdGF0aWMgaW5saW5lIGludCBkaWJzX2xvb3BiYWNrX2luaXQodm9pZClcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQ4LXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz0yNDg9c3RhdGljIGludCBfX2luaXQgZGlic19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjU1LVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyNTY6XFx0cmMgPSBkaWJzX2xvb3BiYWNrX2luaXQoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjU3LVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6MjE6MjMuNDM2MzU0NjU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYzODkxNDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgRElCUyBLY29uZmlnIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgRElCUyBpcyBjb25maWd1cmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGFzIGFsd2F5cywgaXMgdGhlIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBESUJTIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBzZWUgaG93IHRoZXkgaW50ZWdyYXRlIHdpdGggb3RoZXIgc3Vic3lzdGVtcy4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBrZXl3b3JkcyBsaWtlIFwiRElCU1wiLCBcImR5bmFtaWMgaW5zdHJ1Y3Rpb25cIiwgXCJicmFuY2ggcHJlZGljdGlvbixcIiBvciBwb3RlbnRpYWxseSByZWxhdGVkIGFjcm9ueW1zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBoaWVyYXJjaHkgb2Ygb3B0aW9ucywgbGlrZWx5IG5lc3RlZCB1bmRlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3IgY29yZSBrZXJuZWwgZmVhdHVyZXMuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIHVuZGVybHlpbmcgYnVpbGQgc3lzdGVtIGZpbGVzIChsaWtlbHkgTWFrZWZpbGVzKSB0byBzZWUgaG93IHRob3NlIG9wdGlvbnMgYWZmZWN0IGNvbXBpbGF0aW9uLCBsaW5raW5nLCBhbmQgdWx0aW1hdGVseSwgdGhlIGJlaGF2aW9yIG9mIHRoZSBrZXJuZWwgYXQgcnVudGltZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgRElCUyBjb25maWd1cmF0aW9ucyDigJMgdGhlIHRyYWRlLW9mZnMgYmV0d2VlbiBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBwb3RlbnRpYWwgb3ZlcmhlYWQuIExldCdzIHNlZSB3aGF0IHRoZSBgS2NvbmZpZ2AgZmlsZXMgaGF2ZSB0byB0ZWxsIHVzIGFib3V0IGhvdyB0aGlzIGlzIGFsbCBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjIxOjI3LjA3NTI3MTk3NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MDg3ODQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKkRJQlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjIxOjI5LjIzNjE1NzI4N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTk3NDQ0MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBmaWxlcyB5b3UgbWVudGlvbmVkOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRGl2aW5nIGludG8gdGhlIERpYnMgRHJpdmVyKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgZHJpdmVycy9kaWJzL0tjb25maWdgIGFuZCBgZHJpdmVycy9kaWJzL01ha2VmaWxlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIFwiZGlic1wiIGRyaXZlciBsaXZlcy4gVGhlIGBLY29uZmlnYCBmaWxlIGlzIHdoYXQgZGljdGF0ZXMgd2hhdCBvcHRpb25zIHRoZSB1c2VyIHNlZXMgaW4gdGhlIG1lbnVjb25maWcgb3IgZGVmY29uZmlnIHByb2Nlc3MgLSBpdCBkZWZpbmVzIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGFsbCB0aGUgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbmNsdWRlZCBvciBleGNsdWRlZCBmcm9tIHRoZSBkaWJzIGRyaXZlci4gSeKAmWxsIGV4cGVjdCB0byBmaW5kIHRoaW5ncyBsaWtlIHdoZXRoZXIgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSBvciBidWlsdC1pbiwgYW5kIHBvc3NpYmx5IG9wdGlvbnMgZm9yIGRpZmZlcmVudCBkaWJzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzLiBUaGUgYE1ha2VmaWxlYCwgb24gdGhlIG90aGVyIGhhbmQsIHdpbGwgZ292ZXJuIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGFjdHVhbGx5ICpjb21waWxlcyogYW5kIGxpbmtzIHRoZSBkcml2ZXIuIEl0J2xsIHNwZWNpZnkgdGhlIHNvdXJjZSBmaWxlcywgaW5jbHVkZSBwYXRocywgYW55IGNvbXBpbGVyIGZsYWdzLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIG1vZHVsZS1zcGVjaWZpYyB0YXJnZXRzIGlmIGl0J3MgYmVpbmcgYnVpbHQgYXMgYSBsb2FkYWJsZSBrZXJuZWwgbW9kdWxlLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIHVzZSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgcnVsZXMsIG1heWJlIGluY2x1ZGluZyBzb21lIG1hY3JvcyB0byBoYW5kbGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGlmIHRoZSBLY29uZmlnIGZpbGUgaGFzIHNldHVwIG9wdGlvbnMgZm9yIHRoZSBkaXZlcidzIGJlaGF2aW91ci4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6Njc4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjIxOjMxLjgzMzYwMzU4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBESUJTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG5cXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcXG4gICA3OlxcdFxcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcXG4gICA4OlxcdFxcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cXG4gIDExOlxcdFxcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxcbiAgMTI6XFx0XFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIERJQlNfTE9cXG4gIDE1OlxcdFxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gRElCU1xcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxcbiAgMjE6XFx0XFx0ICBvY2N1cnMgd2l0aGluIHRoZSBzYW1lIE9TLiBUaGlzIGhlbHBzIGluIGNvbnZlbmllbnQgdGVzdGluZyBvZlxcbiAgMjI6XFx0XFx0ICBkaWJzIGNsaWVudHMsIHNpbmNlIGRpYnMgbG9vcGJhY2sgaXMgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlIG9yXFxuICAyMzpcXHRcXHQgIGhhcmR3YXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTozMS44MzM2Nzg1NDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzExODYzNTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBESUJTIExvb3BiYWNrKipcblxuT2theSwgSSd2ZSBnb3QgdGhlIGdlbmVyYWwgcGljdHVyZSBub3csIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIEknbSB0aG9yb3VnaC4gV2UndmUgbG9va2VkIGF0IHRoZSBtYWluIGNvbXBvbmVudHMsIGJ1dCBsZXQncyBub3Qgb3Zlcmxvb2sgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgZWRnZSBjYXNlcy4gQSBnb29kIGVuZ2luZWVyIG5ldmVyIGFzc3VtZXMgdGhleSd2ZSBnb3QgaXQgYWxsLCBzbyBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgYWxzbyBjaGVjayBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AuXCIgVGhpcyBmaWxlIGxpa2VseSBoYW5kbGVzIHRoZSBsb29wYmFjayBmdW5jdGlvbmFsaXR5LCB3aGljaCBjb3VsZCByZXZlYWwgaW50ZXJlc3RpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscywgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ2llcywgb3IgZXZlbiBwb2ludCBvdXQgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBjb3JlIERJQlMgbG9naWMgdGhhdCB3ZSBtaWdodCBoYXZlIG1pc3NlZCBpbiBhIHF1aWNrIG92ZXJ2aWV3LiBJdCdzIHRoZSBraW5kIG9mIHBsYWNlIHdoZXJlIHVuZXhwZWN0ZWQgZGV0YWlscyBvZnRlbiByZXNpZGUsIGFuZCB1bmNvdmVyaW5nIHRoZW0gZWFybHkgc2F2ZXMgYSBsb3Qgb2YgaGVhZGFjaGVzIGxhdGVyLiBCZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBhbmQgaXQncyBhbHdheXMgZ29vZCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCByZWxldmFudCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDI1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTozNC45NTIzMTgyMDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTU6XFx0XFx0bG9fZGV2ID0gTlVMTDtcXG4gMzU2OlxcdH1cXG4gMzU3OlxcdFxcbiAzNTg6XFx0aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxcbiAzNTk6XFx0e1xcbiAzNjA6XFx0XFx0cmV0dXJuIGRpYnNfbG9fZGV2X3Byb2JlKCk7XFxuIDM2MTpcXHR9XFxuIDM2MjpcXHRcXG4gMzYzOlxcdHZvaWQgZGlic19sb29wYmFja19leGl0KHZvaWQpXFxuIDM2NDpcXHR7XFxuIDM2NTpcXHRcXHRkaWJzX2xvX2Rldl9yZW1vdmUoKTtcXG4gMzY2OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6MjE6MzQuOTUyMzg1NTUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzNTcyMzgzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGRpYnNfbG9fZGV2X3Byb2JlIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGRpYnNfbG9fZGV2X3Byb2JlYCB3aXRoaW4gdGhlIGBkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBsb29wYmFjayBkZXZpY2UgZHJpdmVyLCB3aGljaCBpcyBhIHN0YW5kYXJkIHBhdHRlcm4uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0J3Mgc3RydWN0dXJlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGRldmljZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZGV2aWNlLXNwZWNpZmljIHNldHVwLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgaG93IGl0J3MgdGllZCBpbnRvIHRoZSBEaXJlY3QgSS9PIEJ5cGFzcyBTdWJzeXN0ZW0gKERJQlMpLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgY29yZSBESUJTIGZyYW1ld29yaywgcHJvYmFibHkgdG8gcmVnaXN0ZXIgdGhlIGxvb3BiYWNrIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBESUJTIGxheWVyLiBJJ2xsIG5lZWQgdG8gb2JzZXJ2ZSB3aGF0IGRldmljZSByZXNvdXJjZXMgaXQncyBoYW5kbGluZy4gSXMgaXQgdXNpbmcgYSBtZW1vcnkgcmVnaW9uPyBJbnRlcnJ1cHRzPyBETUEgY2hhbm5lbHM/IEkgYWxzbyB3YW50IHRvIHNlZSB0aGUgZXJyb3IgaGFuZGxpbmc7IHdoYXQncyB0aGUgZHJpdmVyJ3MgZ3JhY2VmdWwgZGVncmFkYXRpb24gcGxhbiBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgaW5pdGlhbGl6YXRpb24/IEZpbmFsbHksIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIG5ldGRldiByZWdpc3RyYXRpb24gb3Igc2ltaWxhciB0byBtYWtlIHRoZSBsb29wYmFjayBkZXZpY2UgYWNjZXNzaWJsZSB0byB0aGUgc3lzdGVtIG5ldHdvcmsgc3RhY2suIEknbGwgbmVlZCB0byBwYXJzZSB0aHJvdWdoIHRoZSBjb2RlIGZvciB0aGUgc3BlY2lmaWNzIG9mIHRoZXNlIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODI5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTo0My4zMDk2MjYxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9leGl0KHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldilcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2NudCkpXFxuIDMwMzpcXHRcXHRcXHR3YWl0X2V2ZW50KGxkZXYtXFx1MDAzZWxkZXZfcmVsZWFzZSwgIWF0b21pY19yZWFkKFxcdTAwMjZsZGV2LVxcdTAwM2VkbWJfY250KSk7XFxuIDMwNDpcXHR9XFxuIDMwNTpcXHRcXG4gMzA2OlxcdHN0YXRpYyBpbnQgZGlic19sb19kZXZfcHJvYmUodm9pZClcXG4gMzA3OlxcdHtcXG4gMzA4OlxcdFxcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcXG4gMzA5OlxcdFxcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcXG4gMzEwOlxcdFxcdGludCByZXQ7XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdGxkZXYgPSBremFsbG9jX29iaigqbGRldik7XFxuIDMxMzpcXHRcXHRpZiAoIWxkZXYpXFxuIDMxNDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XFxuIDMxNzpcXHRcXHRpZiAoIWRpYnMpIHtcXG4gMzE4OlxcdFxcdFxcdGtmcmVlKGxkZXYpO1xcbiAzMTk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMyMDpcXHRcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdGxkZXYtXFx1MDAzZWRpYnMgPSBkaWJzO1xcbiAzMjM6XFx0XFx0ZGlicy1cXHUwMDNlZHJ2X3ByaXYgPSBsZGV2O1xcbiAzMjQ6XFx0XFx0ZGlic19sb19kZXZfaW5pdChsZGV2KTtcXG4gMzI1OlxcdFxcdHV1aWRfZ2VuKFxcdTAwMjZkaWJzLVxcdTAwM2VnaWQpO1xcbiAzMjY6XFx0XFx0ZGlicy1cXHUwMDNlb3BzID0gXFx1MDAyNmRpYnNfbG9fb3BzO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRkaWJzLVxcdTAwM2VkZXYucGFyZW50ID0gTlVMTDtcXG4gMzI5OlxcdFxcdGRldl9zZXRfbmFtZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2LCBcXFwiJXNcXFwiLCBkaWJzX2xvX2Rldl9uYW1lKTtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xcbiAzMzI6XFx0XFx0aWYgKHJldClcXG4gMzMzOlxcdFxcdFxcdGdvdG8gZXJyX3JlZztcXG4gMzM0OlxcdFxcdGxvX2RldiA9IGxkZXY7XFxuIDMzNTpcXHRcXHRyZXR1cm4gMDtcXG4gMzM2OlxcdFxcbiAzMzc6XFx0ZXJyX3JlZzpcXG4gMzM4OlxcdFxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbiAzMzk6XFx0XFx0cHV0X2RldmljZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2KTtcXG4gMzQwOlxcdFxcdGtmcmVlKGxkZXYpO1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNDM6XFx0fVxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcXG4gMzQ2OlxcdHtcXG4gMzQ3OlxcdFxcdGlmICghbG9fZGV2KVxcbiAzNDg6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNDk6XFx0XFxuIDM1MDpcXHRcXHRkaWJzX2Rldl9kZWwobG9fZGV2LVxcdTAwM2VkaWJzKTtcXG4gMzUxOlxcdFxcdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcXG4gMzUyOlxcdFxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbiAzNTM6XFx0XFx0cHV0X2RldmljZShcXHUwMDI2bG9fZGV2LVxcdTAwM2VkaWJzLVxcdTAwM2VkZXYpO1xcbiAzNTQ6XFx0XFx0a2ZyZWUobG9fZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6MjE6NDMuMzA5NzE4MTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUxMzQyMDAwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIERJQlMgRHJpdmVyIEluaXRpYWxpemF0aW9uIEVycm9yIEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBjb21taXQuIEZpcnN0LCBJIHdhbnQgdG8gcXVpY2tseSBjaGVjayB0aGUgYGdpdCBsb2dgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHJlY2VudCBhY3Rpdml0eSBhcm91bmQgdGhpcyBgZGlic19tYWluLmNgIGZpbGUsIG9yIGp1c3QgbG9vayBhdCB0aGUgZGlmZi4gVGhlIGRpZmYgaXRzZWxmIGlzIHNob3dpbmcgc29tZSBjaGFuZ2VzIGluIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGBkaWJzX2luaXRgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBhbiBhZGRpdGlvbiBvZiBgY2xhc3NfdW5yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKWAgYW5kIGEgYHByX2VycmAgY2FsbCBpbiB0aGUgZXJyb3IgdW53aW5kIHBhdGguXG5cbk5vdywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuMS4gICoqV2hhdCdzIENoYW5nZWQ/KiogVGhlIGVycm9yIGhhbmRsaW5nIGluIGBkaWJzX2luaXRgLCB3aGljaCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiwgaGFzIGJlZW4gdXBkYXRlZC4gSWYgYGRpYnNfbG9vcGJhY2tfaW5pdCgpYCBmYWlscyBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLCBgY2xhc3NfdW5yZWdpc3RlcmAgYW5kIGBwcl9lcnJgIGFyZSBub3cgY2FsbGVkLiBTaW1pbGFybHksIGlmIGBjbGFzc19yZWdpc3RlcmAgZmFpbHMsIHRoZSBgcHJfZXJyYCBpcyBjYWxsZWQuXG5cbjIuICAqKkZ1enppbmcgQXBwbGljYWJpbGl0eT8qKiAgSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGBkaWJzX2luaXRgIGlzIG1hcmtlZCB3aXRoIGBfX2luaXRgIGFuZCBpcyBwYXJ0IG9mIHRoZSBpbml0Y2FsbCBzZXF1ZW5jZSwgZXhlY3V0aW5nIGF0IGJvb3QgdGltZSBvciBtb2R1bGUgbG9hZCB0aW1lLiBUaGUgYF9faW5pdGAgY29kZSBpcyBkaXNjYXJkZWQgYWZ0ZXIgdGhhdCBpbml0aWFsIHNldHVwLiBJbiBlbnZpcm9ubWVudHMgbGlrZSBzeXprYWxsZXIsIHdlIG9ubHkgZnV6eiBhZnRlciB0aGUgaW5pdGlhbCBib290LiBUaHVzLCBlcnJvciBwYXRocyB3aXRoaW4gYF9faW5pdGAgZnVuY3Rpb25zIGFyZSB0eXBpY2FsbHkgdW5yZWFjaGFibGUgZHVyaW5nIHJlZ3VsYXIgZnV6emluZyBiZWNhdXNlIHRoZXkgYXJlbid0IHRyaWdnZXJlZCBieSB1c2VyLXNwYWNlIHN5c2NhbGxzIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGlzIHBhcnRpY3VsYXIgcGF0Y2ggZGVhbHMgKm9ubHkqIHdpdGggY2xlYW51cCBvbiBpbml0aWFsaXphdGlvbiBlcnJvcnMgKGVpdGhlciBmcm9tIGBjbGFzc19yZWdpc3RlcmAgb3IgYGRpYnNfbG9vcGJhY2tfaW5pdGApLlxuXG5Ob3csIGxldCdzIHJlZmVyZW5jZSB0aG9zZSBmdXp6aW5nIHJ1bGVzLiBJIHNlZSB0aGF0IGNoYW5nZXMgaW4gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29kZSBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nIChsaWtlIGBwcl9lcnJgKSwgY29uc3RhbnQgbW9kaWZpY2F0aW9ucyB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGV4ZWN1dGlvbiBmbG93LCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgKSBleGVjdXRlZCBvbmx5IG9uIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucyBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBmdXp6LXdvcnRoeS5cblxuV2FpdCwgc2hvdWxkIEkgcmV0aGluayB0aGUgYF9faW5pdGAgZXJyb3IgY2xlYW51cD8gQ291bGQgRElCUyBiZSByZXBlYXRlZGx5IGxvYWRlZCBhbmQgdW5sb2FkZWQ/IEV2ZW4gaWYgc28sIHRoZXNlIGVycm9yIHBhdGhzIHdpdGhpbiBgX19pbml0YCBhcmUgb25seSByZWFjaGVkIGlmIGBkaWJzX2xvb3BiYWNrX2luaXQoKWAgZmFpbHMgKHR5cGljYWxseSBvbmx5IG9uIEVOT01FTSBkdXJpbmcgYm9vdC9pbnNtb2QpLiBUaGVyZSBpcyB6ZXJvIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJ1bnRpbWUgbG9naWMsIHN5c2NhbGwgaGFuZGxpbmcsIHBhY2tldCBwcm9jZXNzaW5nLCBvciBkZXZpY2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyAqcHVyZWx5KiBhZGRpbmcgYW4gZXJyb3IgcGF0aCBjbGVhbnVwIChjYWxsaW5nIGBjbGFzc191bnJlZ2lzdGVyYCkgaW4gYW4gYF9faW5pdGAgZnVuY3Rpb24uXG5cbkkgaGF2ZSBkb3VibGUgY2hlY2tlZCB0aGUgZGlmZi4gSXQgb25seSBtb2RpZmllcyBsaW5lcyAyNTEtMjY3IG9mIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgLlxuXG5UaGVyZWZvcmUsIHRoZSBpbXBhY3QgdG8gcnVudGltZSBmdW5jdGlvbmFsaXR5IGlzIG5lZ2xpZ2libGU7IHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cbk15IGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtdYCAoZW1wdHkgbGlzdClcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKGVtcHR5IGxpc3QpXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBlcnJvciB1bndpbmQgY2xlYW51cCAoYGNsYXNzX3VucmVnaXN0ZXJgKSBhbmQgZXJyb3IgbG9nZ2luZyB0byB0aGUgYF9faW5pdCBkaWJzX2luaXQoKWAgZnVuY3Rpb24gd2hlbiBgZGlic19sb29wYmFja19pbml0KClgIGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgcnVudGltZSByZWFjaGFibGUgZnVuY3Rpb25hbGl0eSB3b3J0aCBmdXp6aW5nLlwiXG5cbkxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0NywiT3V0cHV0VG9rZW5zIjo4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTo1OC40NDM5MjAzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgZml4ZXMgZXJyb3IgdW53aW5kaW5nIGluIHRoZSBtb2R1bGUvc3Vic3lzdGVtIGluaXQgZnVuY3Rpb24gKF9faW5pdCBkaWJzX2luaXQpLCBhZGRpbmcgY2xhc3NfdW5yZWdpc3RlciBhbmQgZXJyb3IgbG9nZ2luZyBpZiBkaWJzX2xvb3BiYWNrX2luaXQgZmFpbHMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcmVhY2hhYmxlIHJ1bnRpbWUga2VybmVsIGxvZ2ljIG9yIHN5c2NhbGwgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGZpeGVzIGVycm9yIHVud2luZGluZyBpbiB0aGUgbW9kdWxlL3N1YnN5c3RlbSBpbml0IGZ1bmN0aW9uIChfX2luaXQgZGlic19pbml0KSwgYWRkaW5nIGNsYXNzX3VucmVnaXN0ZXIgYW5kIGVycm9yIGxvZ2dpbmcgaWYgZGlic19sb29wYmFja19pbml0IGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IHJlYWNoYWJsZSBydW50aW1lIGtlcm5lbCBsb2dpYyBvciBzeXNjYWxsIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6MjE6NTguNDQzOTQ1ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowzz27x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 10:03:07 +0000 UTC FinishedAt: 2026-09-03 10:21:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBmaXhlcyBlcnJvciB1bndpbmRpbmcgaW4gdGhlIG1vZHVsZS9zdWJzeXN0ZW0gaW5pdCBmdW5jdGlvbiAoX19pbml0IGRpYnNfaW5pdCksIGFkZGluZyBjbGFzc191bnJlZ2lzdGVyIGFuZCBlcnJvciBsb2dnaW5nIGlmIGRpYnNfbG9vcGJhY2tfaW5pdCBmYWlscyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEl0IGRvZXMgbm90IGFsdGVyIGFueSByZWFjaGFibGUgcnVudGltZSBrZXJuZWwgbG9naWMgb3Igc3lzY2FsbCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwYzU5ZGVjYTU3ODY5ZTdmMDBkZDhmZmQ2OTJmNDZmODk3MmI3MjYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMDoyMTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbmluZGV4IDJiNTNhOWQyNzdkY2EuLjIwYzUwOTk3YTdjZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xuQEAgLTI1MSwxMyAmIzQzOzI1MSwxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBkaWJzX2luaXQodm9pZClcbiBcbiBcdHJjID0gY2xhc3NfcmVnaXN0ZXIoXHUwMDI2ZGlic19jbGFzcyk7XG4gXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbiYjNDM7XHRcdGdvdG8gZXJyO1xuIFxuIFx0cmMgPSBkaWJzX2xvb3BiYWNrX2luaXQoKTtcbiBcdGlmIChyYylcbi1cdFx0cHJfZXJyKFwmIzM0OyVzIGZhaWxzIHdpdGggJWRcXG5cJiMzNDssIF9fZnVuY19fLCByYyk7XG4mIzQzO1x0XHRnb3RvIGVycl91bnJlZ2lzdGVyO1xuIFxuIFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7ZXJyX3VucmVnaXN0ZXI6XG4mIzQzO1x0Y2xhc3NfdW5yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKTtcbiYjNDM7ZXJyOlxuJiM0MztcdHByX2VycihcJiMzNDslcyBmYWlscyB3aXRoICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgcmMpO1xuJiM0MztcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IGRpYnNfZXhpdCh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgZml4ZXMgZXJyb3IgdW53aW5kaW5nIGluIHRoZSBtb2R1bGUvc3Vic3lzdGVtIGluaXQgZnVuY3Rpb24gKF9faW5pdCBkaWJzX2luaXQpLCBhZGRpbmcgY2xhc3NfdW5yZWdpc3RlciBhbmQgZXJyb3IgbG9nZ2luZyBpZiBkaWJzX2xvb3BiYWNrX2luaXQgZmFpbHMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcmVhY2hhYmxlIHJ1bnRpbWUga2VybmVsIGxvZ2ljIG9yIHN5c2NhbGwgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGM1OWRlY2E1Nzg2OWU3ZjAwZGQ4ZmZkNjkyZjQ2Zjg5NzJiNzI2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTA6MjE6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMKaW5kZXggMmI1M2E5ZDI3N2RjYS4uMjBjNTA5OTdhN2NmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uYwpAQCAtMjUxLDEzICYjNDM7MjUxLDE5IEBAIHN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKQogCiAJcmMgPSBjbGFzc19yZWdpc3RlcigmYW1wO2RpYnNfY2xhc3MpOwogCWlmIChyYykKLQkJcmV0dXJuIHJjOwomIzQzOwkJZ290byBlcnI7CiAKIAlyYyA9IGRpYnNfbG9vcGJhY2tfaW5pdCgpOwogCWlmIChyYykKLQkJcHJfZXJyKCYjMzQ7JXMgZmFpbHMgd2l0aCAlZFxuJiMzNDssIF9fZnVuY19fLCByYyk7CiYjNDM7CQlnb3RvIGVycl91bnJlZ2lzdGVyOwogCiAJcmV0dXJuIHJjOwomIzQzOwomIzQzO2Vycl91bnJlZ2lzdGVyOgomIzQzOwljbGFzc191bnJlZ2lzdGVyKCZhbXA7ZGlic19jbGFzcyk7CiYjNDM7ZXJyOgomIzQzOwlwcl9lcnIoJiMzNDslcyBmYWlscyB3aXRoICVkXG4mIzM0OywgX19mdW5jX18sIHJjKTsKJiM0MzsJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGlic19leGl0KHZvaWQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaWJzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRvIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZGlic19pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBgZ290b2Agc3RhdGVtZW50IGFuZCBhIHJlc3RydWN0dXJlZCBlcnJvciBoYW5kbGluZyBmbG93LiBJdCBhcHBlYXJzIHRoZXkgYXJlIGFpbWluZyBmb3IgY2xlYW5lciBlcnJvciBwcm9wYWdhdGlvbi4gUHJldmlvdXNseSwgaWYgYGNsYXNzX3JlZ2lzdGVyYCBvciBgZGlic19sb29wYmFja19pbml0YCBmYWlsZWQsIHRoZSBjb2RlIHdvdWxkIHNpbXBseSByZXR1cm4uIE5vdywgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBsYWJlbHMgYGVycl91bnJlZ2lzdGVyYCBhbmQgYGVycmAgdG8gaGFuZGxlIHBvdGVudGlhbCBlcnJvcnMgbW9yZSByb2J1c3RseS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRpYnNgIGlzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBleHBsb3JlIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgIGFuZCBvdGhlciBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL2RpYnMvYCBkaXJlY3RvcnkgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBkaWJzIGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIG15IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0b29scyB0byBxdWlja2x5IGdldCBzb21lIGNvbnRleHQgYW5kIGZpZ3VyZSBvdXQgaWYgdGhpcyBtb2R1bGUgaXMgZXZlbiB1c2VkLiBUaGlzIGlzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZywgYnV0IHVuZGVyc3RhbmRpbmcgaXRzIGNvbnRleHQgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNpZGUgZWZmZWN0cyBvciBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LypcbiAgIDM6XHQgKiAgRElCUyAtIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZ1xuICAgNDpcdCAqXG4gICA1Olx0ICogIEltcGxlbWVudGF0aW9uIG9mIHRoZSBESUJTIGNsYXNzIG1vZHVsZVxuICAgNjpcdCAqXG4gICA3Olx0ICogIENvcHlyaWdodCBJQk0gQ29ycC4gMjAyNVxuICAgODpcdCAqL1xuICAgOTpcdCNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7ZGliczogXCYjMzQ7IGZtdFxuICAxMDpcdFxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGlicy5oXHUwMDNlXG4gIDE2Olx0XG4gIDE3Olx0I2luY2x1ZGUgXCYjMzQ7ZGlic19sb29wYmFjay5oXCYjMzQ7XG4gIDE4Olx0XG4gIDE5Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBjbGFzc1wmIzM0Oyk7XG4gIDIwOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAgMjE6XHRcbiAgMjI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGRpYnNfY2xhc3MgPSB7XG4gIDIzOlx0XHQubmFtZVx0XHQ9IFwmIzM0O2RpYnNcJiMzNDssXG4gIDI0Olx0fTtcbiAgMjU6XHRcbiAgMjY6XHQvKiB1c2UgYW4gYXJyYXkgcmF0aGVyIGEgbGlzdCBmb3IgZmFzdCBtYXBwaW5nOiAqL1xuICAyNzpcdHN0YXRpYyBzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudHNbTUFYX0RJQlNfQ0xJRU5UU107XG4gIDI4Olx0c3RhdGljIHU4IG1heF9jbGllbnQ7XG4gIDI5Olx0c3RhdGljIERFRklORV9NVVRFWChjbGllbnRzX2xvY2spO1xuICAzMDpcdHN0cnVjdCBkaWJzX2Rldl9saXN0IHtcbiAgMzE6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiAgMzI6XHRcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMgZGlicyBkZXZpY2UgbGlzdCAqL1xuICAzMzpcdH07XG4gIDM0Olx0XG4gIDM1Olx0c3RhdGljIHN0cnVjdCBkaWJzX2Rldl9saXN0IGRpYnNfZGV2X2xpc3QgPSB7XG4gIDM2Olx0XHQubGlzdCA9IExJU1RfSEVBRF9JTklUKGRpYnNfZGV2X2xpc3QubGlzdCksXG4gIDM3Olx0XHQubXV0ZXggPSBfX01VVEVYX0lOSVRJQUxJWkVSKGRpYnNfZGV2X2xpc3QubXV0ZXgpLFxuICAzODpcdH07XG4gIDM5Olx0XG4gIDQwOlx0c3RhdGljIHZvaWQgZGlic19zZXR1cF9mb3J3YXJkaW5nKHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50LFxuICA0MTpcdFx0XHRcdFx0ICBzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG4gIDQyOlx0e1xuICA0MzpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAgNDQ6XHRcbiAgNDU6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuICA0NjpcdFx0ZGlicy1cdTAwM2VzdWJzW2NsaWVudC1cdTAwM2VpZF0gPSBjbGllbnQ7XG4gIDQ3Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuICA0ODpcdH1cbiAgNDk6XHRcbiAgNTA6XHRpbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXG4gIDUxOlx0e1xuICA1MjpcdFx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xuICA1MzpcdFx0aW50IGksIHJjID0gLUVOT1NQQztcbiAgNTQ6XHRcbiAgNTU6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XG4gIDU2Olx0XHRtdXRleF9sb2NrKFx1MDAyNmNsaWVudHNfbG9jayk7XG4gIDU3Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfRElCU19DTElFTlRTOyAmIzQzOyYjNDM7aSkge1xuICA1ODpcdFx0XHRpZiAoIWNsaWVudHNbaV0pIHtcbiAgNTk6XHRcdFx0XHRjbGllbnRzW2ldID0gY2xpZW50O1xuICA2MDpcdFx0XHRcdGNsaWVudC1cdTAwM2VpZCA9IGk7XG4gIDYxOlx0XHRcdFx0aWYgKGkgPT0gbWF4X2NsaWVudClcbiAgNjI6XHRcdFx0XHRcdG1heF9jbGllbnQmIzQzOyYjNDM7O1xuICA2MzpcdFx0XHRcdHJjID0gMDtcbiAgNjQ6XHRcdFx0XHRicmVhaztcbiAgNjU6XHRcdFx0fVxuICA2NjpcdFx0fVxuICA2NzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNsaWVudHNfbG9jayk7XG4gIDY4Olx0XG4gIDY5Olx0XHRpZiAoaSBcdTAwM2MgTUFYX0RJQlNfQ0xJRU5UUykge1xuICA3MDpcdFx0XHQvKiBpbml0aWFsaXplIHdpdGggYWxsIGRldmljZXMgdGhhdCB3ZSBnb3Qgc28gZmFyICovXG4gIDcxOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGlicywgXHUwMDI2ZGlic19kZXZfbGlzdC5saXN0LCBsaXN0KSB7XG4gIDcyOlx0XHRcdFx0ZGlicy1cdTAwM2Vwcml2W2ldID0gTlVMTDtcbiAgNzM6XHRcdFx0XHRjbGllbnQtXHUwMDNlb3BzLVx1MDAzZWFkZF9kZXYoZGlicyk7XG4gIDc0Olx0XHRcdFx0ZGlic19zZXR1cF9mb3J3YXJkaW5nKGNsaWVudCwgZGlicyk7XG4gIDc1Olx0XHRcdH1cbiAgNzY6XHRcdH1cbiAgNzc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkaWJzX2Rldl9saXN0Lm11dGV4KTtcbiAgNzg6XHRcbiAgNzk6XHRcdHJldHVybiByYztcbiAgODA6XHR9XG4gIDgxOlx0RVhQT1JUX1NZTUJPTF9HUEwoZGlic19yZWdpc3Rlcl9jbGllbnQpO1xuICA4MjpcdFxuICA4MzpcdGludCBkaWJzX3VucmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50KVxuICA4NDpcdHtcbiAgODU6XHRcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcbiAgODY6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gIDg3Olx0XHRpbnQgbWF4X2RtYnM7XG4gIDg4Olx0XHRpbnQgcmMgPSAwO1xuICA4OTpcdFxuICA5MDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkaWJzX2Rldl9saXN0Lm11dGV4KTtcbiAgOTE6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGlicywgXHUwMDI2ZGlic19kZXZfbGlzdC5saXN0LCBsaXN0KSB7XG4gIDkyOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuICA5MzpcdFx0XHRtYXhfZG1icyA9IGRpYnMtXHUwMDNlb3BzLVx1MDAzZW1heF9kbWJzKCk7XG4gIDk0Olx0XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBtYXhfZG1iczsgJiM0MzsmIzQzO2kpIHtcbiAgOTU6XHRcdFx0XHRpZiAoZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyW2ldID09IGNsaWVudC1cdTAwM2VpZCkge1xuICA5NjpcdFx0XHRcdFx0V0FSTigxLCBcJiMzNDslczogYXR0ZW1wdCB0byB1bnJlZ2lzdGVyICYjMzk7JXMmIzM5OyB3aXRoIHJlZ2lzdGVyZWQgZG1iKHMpXFxuXCYjMzQ7LFxuICA5NzpcdFx0XHRcdFx0ICAgICBfX2Z1bmNfXywgY2xpZW50LVx1MDAzZW5hbWUpO1xuICA5ODpcdFx0XHRcdFx0cmMgPSAtRUJVU1k7XG4gIDk5Olx0XHRcdFx0XHRnb3RvIGVycl9yZWdfZG1iO1xuIDEwMDpcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgZGlic19tYWluLmMgQ29kZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgMjAwIHRocm91Z2ggMjY1LiBUaGF0IHNwZWNpZmljIHJlZ2lvbiBpcyBsaWtlbHkgd2hlcmUgYSBrZXkgcGllY2Ugb2YgdGhlIGRpYnMgZHJpdmVyJiMzOTtzIGxvZ2ljIGxpdmVzLiBJJiMzOTttIGd1ZXNzaW5nIGl0IHByb2JhYmx5IGhhbmRsZXMgc29tZSBjcnVjaWFsIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBvciBtYXliZSB0aGUgY29yZSBkYXRhIHBhdGggc2V0dXAgZm9yIGEgY3JpdGljYWwgZGlicyBmZWF0dXJlLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHN5c3RlbSwgSSBzdXNwZWN0IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgb3IgcGVyaGFwcyBhbiBpbmVmZmljaWVudCBhbGdvcml0aG0gaW4gdGhhdCBzZWN0aW9uLiBJdCYjMzk7cyBhbHNvIHBvc3NpYmxlIEkmIzM5O20gbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHBhdHRlcm4gb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUgdGhhdCBtYXkgaGF2ZSBiZWVuIGFkanVzdGVkIHJlY2VudGx5LiBJIGFudGljaXBhdGUgZmluZGluZyBzb21lIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyByZWxldmFudCB0byB0aGUgZGV2aWNlLCBvciBwZXJoYXBzIHRoZSByZWdpc3RyYXRpb24gb2YgYSBuZXcgZGV2aWNlIG9yIG1vZHVsZS4gTWF5YmUgdGhlcmUmIzM5O3MgYW4gaW50ZXJydXB0IGhhbmRsZXIgc2V0dGluZyB1cC4gSXQgYWxsIGRlcGVuZHMgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCB0aGUgc3BlY2lmaWMgbW9kdWxlJiMzOTtzIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgY29udHJvbCBmbG93LCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZSBvciBvdGhlciBrZXJuZWwgbW9kdWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWRkKTtcbiAyMjE6XHRcbiAyMjI6XHR2b2lkIGRpYnNfZGV2X2RlbChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG4gMjIzOlx0e1xuIDIyNDpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAyMjU6XHRcdGludCBpO1xuIDIyNjpcdFxuIDIyNzpcdFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNmRpYnMtXHUwMDNlZGV2LmtvYmosIFx1MDAyNmRpYnNfZGV2X2F0dHJfZ3JvdXApO1xuIDIyODpcdFxuIDIyOTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMjMwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfRElCU19DTElFTlRTOyAmIzQzOyYjNDM7aSlcbiAyMzE6XHRcdFx0ZGlicy1cdTAwM2VzdWJzW2ldID0gTlVMTDtcbiAyMzI6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMjMzOlx0XG4gMjM0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmRpYnNfZGV2X2xpc3QubXV0ZXgpO1xuIDIzNTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjbGllbnRzX2xvY2spO1xuIDIzNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2NsaWVudDsgJiM0MzsmIzQzO2kpIHtcbiAyMzc6XHRcdFx0aWYgKGNsaWVudHNbaV0pXG4gMjM4Olx0XHRcdFx0Y2xpZW50c1tpXS1cdTAwM2VvcHMtXHUwMDNlZGVsX2RldihkaWJzKTtcbiAyMzk6XHRcdH1cbiAyNDA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZjbGllbnRzX2xvY2spO1xuIDI0MTpcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkaWJzLVx1MDAzZWxpc3QpO1xuIDI0MjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpYnNfZGV2X2xpc3QubXV0ZXgpO1xuIDI0MzpcdFxuIDI0NDpcdFx0ZGV2aWNlX2RlbChcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4gMjQ1Olx0fVxuIDI0NjpcdEVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfZGV2X2RlbCk7XG4gMjQ3Olx0XG4gMjQ4Olx0c3RhdGljIGludCBfX2luaXQgZGlic19pbml0KHZvaWQpXG4gMjQ5Olx0e1xuIDI1MDpcdFx0aW50IHJjO1xuIDI1MTpcdFxuIDI1MjpcdFx0cmMgPSBjbGFzc19yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKTtcbiAyNTM6XHRcdGlmIChyYylcbiAyNTQ6XHRcdFx0Z290byBlcnI7XG4gMjU1Olx0XG4gMjU2Olx0XHRyYyA9IGRpYnNfbG9vcGJhY2tfaW5pdCgpO1xuIDI1NzpcdFx0aWYgKHJjKVxuIDI1ODpcdFx0XHRnb3RvIGVycl91bnJlZ2lzdGVyO1xuIDI1OTpcdFxuIDI2MDpcdFx0cmV0dXJuIHJjO1xuIDI2MTpcdFxuIDI2MjpcdGVycl91bnJlZ2lzdGVyOlxuIDI2MzpcdFx0Y2xhc3NfdW5yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKTtcbiAyNjQ6XHRlcnI6XG4gMjY1Olx0XHRwcl9lcnIoXCYjMzQ7JXMgZmFpbHMgd2l0aCAlZFxcblwmIzM0OywgX19mdW5jX18sIHJjKTtcbiAyNjY6XHRcdHJldHVybiByYztcbiAyNjc6XHR9XG4gMjY4Olx0XG4gMjY5Olx0c3RhdGljIHZvaWQgX19leGl0IGRpYnNfZXhpdCh2b2lkKVxuIDI3MDpcdHtcbiAyNzE6XHRcdGRpYnNfbG9vcGJhY2tfZXhpdCgpO1xuIDI3MjpcdFx0Y2xhc3NfdW5yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKTtcbiAyNzM6XHR9XG4gMjc0Olx0XG4gMjc1Olx0c3Vic3lzX2luaXRjYWxsKGRpYnNfaW5pdCk7XG4gMjc2Olx0bW9kdWxlX2V4aXQoZGlic19leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gdGhpcyBgZGlic19pbml0YCBmdW5jdGlvbj8gSXQgc2VlbXMgdGhlIG9yaWdpbmFsIGNvZGUgbWlzc2VkIGNsZWFuaW5nIHVwIHRoZSBjbGFzcyByZWdpc3RyYXRpb24gaWYgYGRpYnNfbG9vcGJhY2tfaW5pdGAgZmFpbGVkLiBOb3csIHRoZSBwYXRjaCBhZGRzIHRoYXQgY2xlYW4tdXAgc3RlcC4gSXQgYWxzbyBoYW5kbGVzIHRoZSBgY2xhc3NfcmVnaXN0ZXJgIGZhaWx1cmUuCgpNeSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSAoYF9faW5pdCBkaWJzX2luaXRgKSBpcyBhY3R1YWxseSAqd29ydGgqIGZ1enppbmcuIFdlIG5lZWQgdG8gZm9sbG93IHRoZSBndWlkZWxpbmVzLiBMZXQgbWUgc2VlLi4uIHRoZSBndWlkZWxpbmVzIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXTigJlzIGp1c3QgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGxvZ2dpbmcgY2hhbmdlcywgb3IgY29uc3RhbnRzIHRoYXQgZG9u4oCZdCBhZmZlY3QgZXhlY3V0aW9uIGZsb3cuIFRoZSBndWlkZWxpbmVzIGFsc28gc2F5IG5vdCB0byBmdXp6IHVucmVhY2hhYmxlIGNvZGUuIEFuZCB0aGUgZ3VpZGVsaW5lcyBzYXkgZG9uJiMzOTt0IGZ1enogdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMuCgpCdXQgdGhpcyBzZWVtcyBsaWtlIGNvcmUga2VybmVsIGxvZ2ljLi4uIGJ1dCwgaXMgaXQgcmVhY2hhYmxlPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdC4gVGhpcyBgZGlic19pbml0YCBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgYHN1YnN5c19pbml0Y2FsbGAgdGltZSwgb3IgbW9kdWxlIGluaXQgaWYgRElCUyBpcyBidWlsdCBhcyBhIG1vZHVsZSBvciBidWlsdC1pbi4gVGhpcyBtZWFucyB0aGlzIGlzIGNvcmUga2VybmVsIGxvZ2ljLiBDYW4gYGRpYnNfbG9vcGJhY2tfaW5pdCgpYCBhY3R1YWxseSAqZmFpbCogdW5kZXIgZnV6emluZyBjb25kaXRpb25zPyBJJiMzOTt2ZSBnb3QgdG8gbG9vayBjbG9zZXIgYXQgYGRpYnNfbG9vcGJhY2tfaW5pdCgpYCBpdHNlbGYgdG8gYXNzZXNzIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGZhaWx1cmUgbW9kZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19sb29wYmFja19pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ1PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzU3LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTg6aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTkte1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg9MzU9c3RydWN0IGRpYnNfbG9fZGV2IHtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQzLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0NDppbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00NS12b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDYtI2Vsc2VcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NDc6c3RhdGljIGlubGluZSBpbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQ4LXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjQ4PXN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNTUtXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjU2Olx0cmMgPSBkaWJzX2xvb3BiYWNrX2luaXQoKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNTctXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIERJQlMgS2NvbmZpZyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgRElCUyBpcyBjb25maWd1cmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGFzIGFsd2F5cywgaXMgdGhlIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBESUJTIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBzZWUgaG93IHRoZXkgaW50ZWdyYXRlIHdpdGggb3RoZXIgc3Vic3lzdGVtcy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGtleXdvcmRzIGxpa2UgJiMzNDtESUJTJiMzNDssICYjMzQ7ZHluYW1pYyBpbnN0cnVjdGlvbiYjMzQ7LCAmIzM0O2JyYW5jaCBwcmVkaWN0aW9uLCYjMzQ7IG9yIHBvdGVudGlhbGx5IHJlbGF0ZWQgYWNyb255bXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBoaWVyYXJjaHkgb2Ygb3B0aW9ucywgbGlrZWx5IG5lc3RlZCB1bmRlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3IgY29yZSBrZXJuZWwgZmVhdHVyZXMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSByZWZlcmVuY2VzIHRvIHRoZSB1bmRlcmx5aW5nIGJ1aWxkIHN5c3RlbSBmaWxlcyAobGlrZWx5IE1ha2VmaWxlcykgdG8gc2VlIGhvdyB0aG9zZSBvcHRpb25zIGFmZmVjdCBjb21waWxhdGlvbiwgbGlua2luZywgYW5kIHVsdGltYXRlbHksIHRoZSBiZWhhdmlvciBvZiB0aGUga2VybmVsIGF0IHJ1bnRpbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IERJQlMgY29uZmlndXJhdGlvbnMg4oCTIHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgcG90ZW50aWFsIG92ZXJoZWFkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGBLY29uZmlnYCBmaWxlcyBoYXZlIHRvIHRlbGwgdXMgYWJvdXQgaG93IHRoaXMgaXMgYWxsIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcuKkRJQlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoyOmNvbmZpZyBESUJTXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBmaWxlcyB5b3UgbWVudGlvbmVkOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIHRoZSBEaWJzIERyaXZlcioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgZHJpdmVycy9kaWJzL0tjb25maWdgIGFuZCBgZHJpdmVycy9kaWJzL01ha2VmaWxlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgcHJvY2VzcyBmb3IgdGhlICYjMzQ7ZGlicyYjMzQ7IGRyaXZlciBsaXZlcy4gVGhlIGBLY29uZmlnYCBmaWxlIGlzIHdoYXQgZGljdGF0ZXMgd2hhdCBvcHRpb25zIHRoZSB1c2VyIHNlZXMgaW4gdGhlIG1lbnVjb25maWcgb3IgZGVmY29uZmlnIHByb2Nlc3MgLSBpdCBkZWZpbmVzIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGFsbCB0aGUgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbmNsdWRlZCBvciBleGNsdWRlZCBmcm9tIHRoZSBkaWJzIGRyaXZlci4gSeKAmWxsIGV4cGVjdCB0byBmaW5kIHRoaW5ncyBsaWtlIHdoZXRoZXIgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSBvciBidWlsdC1pbiwgYW5kIHBvc3NpYmx5IG9wdGlvbnMgZm9yIGRpZmZlcmVudCBkaWJzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzLiBUaGUgYE1ha2VmaWxlYCwgb24gdGhlIG90aGVyIGhhbmQsIHdpbGwgZ292ZXJuIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGFjdHVhbGx5ICpjb21waWxlcyogYW5kIGxpbmtzIHRoZSBkcml2ZXIuIEl0JiMzOTtsbCBzcGVjaWZ5IHRoZSBzb3VyY2UgZmlsZXMsIGluY2x1ZGUgcGF0aHMsIGFueSBjb21waWxlciBmbGFncywgYW5kIHByb2JhYmx5IGRlYWwgd2l0aCBtb2R1bGUtc3BlY2lmaWMgdGFyZ2V0cyBpZiBpdCYjMzk7cyBiZWluZyBidWlsdCBhcyBhIGxvYWRhYmxlIGtlcm5lbCBtb2R1bGUuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgdXNlIHN0YW5kYXJkIGtlcm5lbCBidWlsZCBydWxlcywgbWF5YmUgaW5jbHVkaW5nIHNvbWUgbWFjcm9zIHRvIGhhbmRsZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgaWYgdGhlIEtjb25maWcgZmlsZSBoYXMgc2V0dXAgb3B0aW9ucyBmb3IgdGhlIGRpdmVyJiMzOTtzIGJlaGF2aW91ci4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdGNvbmZpZyBESUJTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVmYXVsdCBuXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAoRElCUykgaXMgYSBjb21tdW5pY2F0aW9uIG1ldGhvZCB0aGF0XG4gICA3Olx0XHQgIHVzZXMgY29tbW9uIHBoeXNpY2FsIChpbnRlcm5hbCkgbWVtb3J5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgYWNjZXNzXG4gICA4Olx0XHQgIGludG8gYSByZW1vdGUgYnVmZmVyLlxuICAgOTpcdFxuICAxMDpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gcHJvdmlkZSB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIgYmV0d2VlblxuICAxMTpcdFx0ICBkaWJzIGRldmljZXMgYW5kIGRpYnMgY2xpZW50cyBsaWtlIHRoZSBTTUMgcHJvdG9jb2wuXG4gIDEyOlx0XHQgIFRoZSBtb2R1bGUgbmFtZSBpcyBkaWJzLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBESUJTX0xPXG4gIDE1Olx0XHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBESUJTXG4gIDE3Olx0XHRkZWZhdWx0IG5cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgRElCU19MTyBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBzb2Z0d2FyZS1lbXVsYXRlZCBkaWJzIGRldmljZVxuICAyMDpcdFx0ICBuYW1lZCBsbyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgd2hlbiBjb21tdW5pY2F0aW9uXG4gIDIxOlx0XHQgIG9jY3VycyB3aXRoaW4gdGhlIHNhbWUgT1MuIFRoaXMgaGVscHMgaW4gY29udmVuaWVudCB0ZXN0aW5nIG9mXG4gIDIyOlx0XHQgIGRpYnMgY2xpZW50cywgc2luY2UgZGlicyBsb29wYmFjayBpcyBpbmRlcGVuZGVudCBvZiBhcmNoaXRlY3R1cmUgb3JcbiAgMjM6XHRcdCAgaGFyZHdhcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIERJQlMgTG9vcGJhY2sqKgoKT2theSwgSSYjMzk7dmUgZ290IHRoZSBnZW5lcmFsIHBpY3R1cmUgbm93LCBidXQgSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIHRob3JvdWdoLiBXZSYjMzk7dmUgbG9va2VkIGF0IHRoZSBtYWluIGNvbXBvbmVudHMsIGJ1dCBsZXQmIzM5O3Mgbm90IG92ZXJsb29rIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGVkZ2UgY2FzZXMuIEEgZ29vZCBlbmdpbmVlciBuZXZlciBhc3N1bWVzIHRoZXkmIzM5O3ZlIGdvdCBpdCBhbGwsIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGFsc28gY2hlY2sgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgLiYjMzQ7IFRoaXMgZmlsZSBsaWtlbHkgaGFuZGxlcyB0aGUgbG9vcGJhY2sgZnVuY3Rpb25hbGl0eSwgd2hpY2ggY291bGQgcmV2ZWFsIGludGVyZXN0aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWdpZXMsIG9yIGV2ZW4gcG9pbnQgb3V0IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgY29yZSBESUJTIGxvZ2ljIHRoYXQgd2UgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gYSBxdWljayBvdmVydmlldy4gSXQmIzM5O3MgdGhlIGtpbmQgb2YgcGxhY2Ugd2hlcmUgdW5leHBlY3RlZCBkZXRhaWxzIG9mdGVuIHJlc2lkZSwgYW5kIHVuY292ZXJpbmcgdGhlbSBlYXJseSBzYXZlcyBhIGxvdCBvZiBoZWFkYWNoZXMgbGF0ZXIuIEJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnksIGFuZCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCByZWxldmFudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1NTpcdFx0bG9fZGV2ID0gTlVMTDtcbiAzNTY6XHR9XG4gMzU3Olx0XG4gMzU4Olx0aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxuIDM1OTpcdHtcbiAzNjA6XHRcdHJldHVybiBkaWJzX2xvX2Rldl9wcm9iZSgpO1xuIDM2MTpcdH1cbiAzNjI6XHRcbiAzNjM6XHR2b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKVxuIDM2NDpcdHtcbiAzNjU6XHRcdGRpYnNfbG9fZGV2X3JlbW92ZSgpO1xuIDM2NjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGRpYnNfbG9fZGV2X3Byb2JlIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgZGlic19sb19kZXZfcHJvYmVgIHdpdGhpbiB0aGUgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBsb29wYmFjayBkZXZpY2UgZHJpdmVyLCB3aGljaCBpcyBhIHN0YW5kYXJkIHBhdHRlcm4uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgZGV2aWNlLXNwZWNpZmljIHNldHVwLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgaG93IGl0JiMzOTtzIHRpZWQgaW50byB0aGUgRGlyZWN0IEkvTyBCeXBhc3MgU3Vic3lzdGVtIChESUJTKS4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIERJQlMgZnJhbWV3b3JrLCBwcm9iYWJseSB0byByZWdpc3RlciB0aGUgbG9vcGJhY2sgZGV2aWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIERJQlMgbGF5ZXIuIEkmIzM5O2xsIG5lZWQgdG8gb2JzZXJ2ZSB3aGF0IGRldmljZSByZXNvdXJjZXMgaXQmIzM5O3MgaGFuZGxpbmcuIElzIGl0IHVzaW5nIGEgbWVtb3J5IHJlZ2lvbj8gSW50ZXJydXB0cz8gRE1BIGNoYW5uZWxzPyBJIGFsc28gd2FudCB0byBzZWUgdGhlIGVycm9yIGhhbmRsaW5nOyB3aGF0JiMzOTtzIHRoZSBkcml2ZXImIzM5O3MgZ3JhY2VmdWwgZGVncmFkYXRpb24gcGxhbiBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgaW5pdGlhbGl6YXRpb24/IEZpbmFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBuZXRkZXYgcmVnaXN0cmF0aW9uIG9yIHNpbWlsYXIgdG8gbWFrZSB0aGUgbG9vcGJhY2sgZGV2aWNlIGFjY2Vzc2libGUgdG8gdGhlIHN5c3RlbSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIHBhcnNlIHRocm91Z2ggdGhlIGNvZGUgZm9yIHRoZSBzcGVjaWZpY3Mgb2YgdGhlc2UgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0c3RhdGljIHZvaWQgZGlic19sb19kZXZfZXhpdChzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYpXG4gMzAxOlx0e1xuIDMwMjpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2NudCkpXG4gMzAzOlx0XHRcdHdhaXRfZXZlbnQobGRldi1cdTAwM2VsZGV2X3JlbGVhc2UsICFhdG9taWNfcmVhZChcdTAwMjZsZGV2LVx1MDAzZWRtYl9jbnQpKTtcbiAzMDQ6XHR9XG4gMzA1Olx0XG4gMzA2Olx0c3RhdGljIGludCBkaWJzX2xvX2Rldl9wcm9iZSh2b2lkKVxuIDMwNzpcdHtcbiAzMDg6XHRcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbiAzMDk6XHRcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcbiAzMTA6XHRcdGludCByZXQ7XG4gMzExOlx0XG4gMzEyOlx0XHRsZGV2ID0ga3phbGxvY19vYmooKmxkZXYpO1xuIDMxMzpcdFx0aWYgKCFsZGV2KVxuIDMxNDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMTU6XHRcbiAzMTY6XHRcdGRpYnMgPSBkaWJzX2Rldl9hbGxvYygpO1xuIDMxNzpcdFx0aWYgKCFkaWJzKSB7XG4gMzE4Olx0XHRcdGtmcmVlKGxkZXYpO1xuIDMxOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMjA6XHRcdH1cbiAzMjE6XHRcbiAzMjI6XHRcdGxkZXYtXHUwMDNlZGlicyA9IGRpYnM7XG4gMzIzOlx0XHRkaWJzLVx1MDAzZWRydl9wcml2ID0gbGRldjtcbiAzMjQ6XHRcdGRpYnNfbG9fZGV2X2luaXQobGRldik7XG4gMzI1Olx0XHR1dWlkX2dlbihcdTAwMjZkaWJzLVx1MDAzZWdpZCk7XG4gMzI2Olx0XHRkaWJzLVx1MDAzZW9wcyA9IFx1MDAyNmRpYnNfbG9fb3BzO1xuIDMyNzpcdFxuIDMyODpcdFx0ZGlicy1cdTAwM2VkZXYucGFyZW50ID0gTlVMTDtcbiAzMjk6XHRcdGRldl9zZXRfbmFtZShcdTAwMjZkaWJzLVx1MDAzZWRldiwgXCYjMzQ7JXNcJiMzNDssIGRpYnNfbG9fZGV2X25hbWUpO1xuIDMzMDpcdFxuIDMzMTpcdFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xuIDMzMjpcdFx0aWYgKHJldClcbiAzMzM6XHRcdFx0Z290byBlcnJfcmVnO1xuIDMzNDpcdFx0bG9fZGV2ID0gbGRldjtcbiAzMzU6XHRcdHJldHVybiAwO1xuIDMzNjpcdFxuIDMzNzpcdGVycl9yZWc6XG4gMzM4Olx0XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbiAzMzk6XHRcdHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuIDM0MDpcdFx0a2ZyZWUobGRldik7XG4gMzQxOlx0XG4gMzQyOlx0XHRyZXR1cm4gcmV0O1xuIDM0MzpcdH1cbiAzNDQ6XHRcbiAzNDU6XHRzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcbiAzNDY6XHR7XG4gMzQ3Olx0XHRpZiAoIWxvX2RldilcbiAzNDg6XHRcdFx0cmV0dXJuO1xuIDM0OTpcdFxuIDM1MDpcdFx0ZGlic19kZXZfZGVsKGxvX2Rldi1cdTAwM2VkaWJzKTtcbiAzNTE6XHRcdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcbiAzNTI6XHRcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuIDM1MzpcdFx0cHV0X2RldmljZShcdTAwMjZsb19kZXYtXHUwMDNlZGlicy1cdTAwM2VkZXYpO1xuIDM1NDpcdFx0a2ZyZWUobG9fZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0NwoJCQkJCQkJb3V0cHV0OiA4NQoJCQkJCQkJdGhvdWdodHM6IDEyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIERJQlMgRHJpdmVyIEluaXRpYWxpemF0aW9uIEVycm9yIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGNvbW1pdC4gRmlyc3QsIEkgd2FudCB0byBxdWlja2x5IGNoZWNrIHRoZSBgZ2l0IGxvZ2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcmVjZW50IGFjdGl2aXR5IGFyb3VuZCB0aGlzIGBkaWJzX21haW4uY2AgZmlsZSwgb3IganVzdCBsb29rIGF0IHRoZSBkaWZmLiBUaGUgZGlmZiBpdHNlbGYgaXMgc2hvd2luZyBzb21lIGNoYW5nZXMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgYGRpYnNfaW5pdGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGFuIGFkZGl0aW9uIG9mIGBjbGFzc191bnJlZ2lzdGVyKCZhbXA7ZGlic19jbGFzcylgIGFuZCBhIGBwcl9lcnJgIGNhbGwgaW4gdGhlIGVycm9yIHVud2luZCBwYXRoLgoKTm93LCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjoKCjEuICAqKldoYXQmIzM5O3MgQ2hhbmdlZD8qKiBUaGUgZXJyb3IgaGFuZGxpbmcgaW4gYGRpYnNfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBoYXMgYmVlbiB1cGRhdGVkLiBJZiBgZGlic19sb29wYmFja19pbml0KClgIGZhaWxzIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGBjbGFzc191bnJlZ2lzdGVyYCBhbmQgYHByX2VycmAgYXJlIG5vdyBjYWxsZWQuIFNpbWlsYXJseSwgaWYgYGNsYXNzX3JlZ2lzdGVyYCBmYWlscywgdGhlIGBwcl9lcnJgIGlzIGNhbGxlZC4KCjIuICAqKkZ1enppbmcgQXBwbGljYWJpbGl0eT8qKiAgSGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBgZGlic19pbml0YCBpcyBtYXJrZWQgd2l0aCBgX19pbml0YCBhbmQgaXMgcGFydCBvZiB0aGUgaW5pdGNhbGwgc2VxdWVuY2UsIGV4ZWN1dGluZyBhdCBib290IHRpbWUgb3IgbW9kdWxlIGxvYWQgdGltZS4gVGhlIGBfX2luaXRgIGNvZGUgaXMgZGlzY2FyZGVkIGFmdGVyIHRoYXQgaW5pdGlhbCBzZXR1cC4gSW4gZW52aXJvbm1lbnRzIGxpa2Ugc3l6a2FsbGVyLCB3ZSBvbmx5IGZ1enogYWZ0ZXIgdGhlIGluaXRpYWwgYm9vdC4gVGh1cywgZXJyb3IgcGF0aHMgd2l0aGluIGBfX2luaXRgIGZ1bmN0aW9ucyBhcmUgdHlwaWNhbGx5IHVucmVhY2hhYmxlIGR1cmluZyByZWd1bGFyIGZ1enppbmcgYmVjYXVzZSB0aGV5IGFyZW4mIzM5O3QgdHJpZ2dlcmVkIGJ5IHVzZXItc3BhY2Ugc3lzY2FsbHMgb3Igc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoaXMgcGFydGljdWxhciBwYXRjaCBkZWFscyAqb25seSogd2l0aCBjbGVhbnVwIG9uIGluaXRpYWxpemF0aW9uIGVycm9ycyAoZWl0aGVyIGZyb20gYGNsYXNzX3JlZ2lzdGVyYCBvciBgZGlic19sb29wYmFja19pbml0YCkuCgpOb3csIGxldCYjMzk7cyByZWZlcmVuY2UgdGhvc2UgZnV6emluZyBydWxlcy4gSSBzZWUgdGhhdCBjaGFuZ2VzIGluIGRvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIGNvZGUgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZyAobGlrZSBgcHJfZXJyYCksIGNvbnN0YW50IG1vZGlmaWNhdGlvbnMgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBleGVjdXRpb24gZmxvdywgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCkgZXhlY3V0ZWQgb25seSBvbiBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMgc2hvdWxkbiYjMzk7dCBiZSBjb25zaWRlcmVkIGZ1enotd29ydGh5LgoKV2FpdCwgc2hvdWxkIEkgcmV0aGluayB0aGUgYF9faW5pdGAgZXJyb3IgY2xlYW51cD8gQ291bGQgRElCUyBiZSByZXBlYXRlZGx5IGxvYWRlZCBhbmQgdW5sb2FkZWQ/IEV2ZW4gaWYgc28sIHRoZXNlIGVycm9yIHBhdGhzIHdpdGhpbiBgX19pbml0YCBhcmUgb25seSByZWFjaGVkIGlmIGBkaWJzX2xvb3BiYWNrX2luaXQoKWAgZmFpbHMgKHR5cGljYWxseSBvbmx5IG9uIEVOT01FTSBkdXJpbmcgYm9vdC9pbnNtb2QpLiBUaGVyZSBpcyB6ZXJvIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJ1bnRpbWUgbG9naWMsIHN5c2NhbGwgaGFuZGxpbmcsIHBhY2tldCBwcm9jZXNzaW5nLCBvciBkZXZpY2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyAqcHVyZWx5KiBhZGRpbmcgYW4gZXJyb3IgcGF0aCBjbGVhbnVwIChjYWxsaW5nIGBjbGFzc191bnJlZ2lzdGVyYCkgaW4gYW4gYF9faW5pdGAgZnVuY3Rpb24uCgpJIGhhdmUgZG91YmxlIGNoZWNrZWQgdGhlIGRpZmYuIEl0IG9ubHkgbW9kaWZpZXMgbGluZXMgMjUxLTI2NyBvZiBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYC4KClRoZXJlZm9yZSwgdGhlIGltcGFjdCB0byBydW50aW1lIGZ1bmN0aW9uYWxpdHkgaXMgbmVnbGlnaWJsZTsgdGhpcyBpcyBub3Qgd29ydGggZnV6emluZy4KCk15IGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgRm9jdXNTeW1ib2xzYDogYFtdYCAoZW1wdHkgbGlzdCkKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgbGlzdCkKKiAgIGBSZWFzb25pbmdgOiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgZXJyb3IgdW53aW5kIGNsZWFudXAgKGBjbGFzc191bnJlZ2lzdGVyYCkgYW5kIGVycm9yIGxvZ2dpbmcgdG8gdGhlIGBfX2luaXQgZGlic19pbml0KClgIGZ1bmN0aW9uIHdoZW4gYGRpYnNfbG9vcGJhY2tfaW5pdCgpYCBmYWlscyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHJ1bnRpbWUgcmVhY2hhYmxlIGZ1bmN0aW9uYWxpdHkgd29ydGggZnV6emluZy4mIzM0OwoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGZpeGVzIGVycm9yIHVud2luZGluZyBpbiB0aGUgbW9kdWxlL3N1YnN5c3RlbSBpbml0IGZ1bmN0aW9uIChfX2luaXQgZGlic19pbml0KSwgYWRkaW5nIGNsYXNzX3VucmVnaXN0ZXIgYW5kIGVycm9yIGxvZ2dpbmcgaWYgZGlic19sb29wYmFja19pbml0IGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IHJlYWNoYWJsZSBydW50aW1lIGtlcm5lbCBsb2dpYyBvciBzeXNjYWxsIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBmaXhlcyBlcnJvciB1bndpbmRpbmcgaW4gdGhlIG1vZHVsZS9zdWJzeXN0ZW0gaW5pdCBmdW5jdGlvbiAoX19pbml0IGRpYnNfaW5pdCksIGFkZGluZyBjbGFzc191bnJlZ2lzdGVyIGFuZCBlcnJvciBsb2dnaW5nIGlmIGRpYnNfbG9vcGJhY2tfaW5pdCBmYWlscyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEl0IGRvZXMgbm90IGFsdGVyIGFueSByZWFjaGFibGUgcnVudGltZSBrZXJuZWwgbG9naWMgb3Igc3lzY2FsbCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTowNi43ODcwMTE2NjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY1Njk0NDM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgZml4ZXMgZXJyb3IgdW53aW5kaW5nIGluIHRoZSBtb2R1bGUvc3Vic3lzdGVtIGluaXQgZnVuY3Rpb24gKF9faW5pdCBkaWJzX2luaXQpLCBhZGRpbmcgY2xhc3NfdW5yZWdpc3RlciBhbmQgZXJyb3IgbG9nZ2luZyBpZiBkaWJzX2xvb3BiYWNrX2luaXQgZmFpbHMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcmVhY2hhYmxlIHJ1bnRpbWUga2VybmVsIGxvZ2ljIG9yIHN5c2NhbGwgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTowNi43ODcwMTYxOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NDc0MzcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBjNTlkZWNhNTc4NjllN2YwMGRkOGZmZDY5MmY0NmY4OTcyYjcyNjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxMDoyMTowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcXG5pbmRleCAyYjUzYTlkMjc3ZGNhLi4yMGM1MDk5N2E3Y2YyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xcbisrKyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xcbkBAIC0yNTEsMTMgKzI1MSwxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBkaWJzX2luaXQodm9pZClcXG4gXFxuIFxcdHJjID0gY2xhc3NfcmVnaXN0ZXIoXFx1MDAyNmRpYnNfY2xhc3MpO1xcbiBcXHRpZiAocmMpXFxuLVxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHRyYyA9IGRpYnNfbG9vcGJhY2tfaW5pdCgpO1xcbiBcXHRpZiAocmMpXFxuLVxcdFxcdHByX2VycihcXFwiJXMgZmFpbHMgd2l0aCAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHJjKTtcXG4rXFx0XFx0Z290byBlcnJfdW5yZWdpc3RlcjtcXG4gXFxuIFxcdHJldHVybiByYztcXG4rXFxuK2Vycl91bnJlZ2lzdGVyOlxcbitcXHRjbGFzc191bnJlZ2lzdGVyKFxcdTAwMjZkaWJzX2NsYXNzKTtcXG4rZXJyOlxcbitcXHRwcl9lcnIoXFxcIiVzIGZhaWxzIHdpdGggJWRcXFxcblxcXCIsIF9fZnVuY19fLCByYyk7XFxuK1xcdHJldHVybiByYztcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19leGl0IGRpYnNfZXhpdCh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTowNy4xNzI0MzUxNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxMjcxNTA4ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGZpeGVzIGVycm9yIHVud2luZGluZyBpbiB0aGUgbW9kdWxlL3N1YnN5c3RlbSBpbml0IGZ1bmN0aW9uIChfX2luaXQgZGlic19pbml0KSwgYWRkaW5nIGNsYXNzX3VucmVnaXN0ZXIgYW5kIGVycm9yIGxvZ2dpbmcgaWYgZGlic19sb29wYmFja19pbml0IGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IHJlYWNoYWJsZSBydW50aW1lIGtlcm5lbCBsb2dpYyBvciBzeXNjYWxsIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGM1OWRlY2E1Nzg2OWU3ZjAwZGQ4ZmZkNjkyZjQ2Zjg5NzJiNzI2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTA6MjE6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbmluZGV4IDJiNTNhOWQyNzdkY2EuLjIwYzUwOTk3YTdjZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbisrKyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xuQEAgLTI1MSwxMyArMjUxLDE5IEBAIHN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKVxuIFxuIFx0cmMgPSBjbGFzc19yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKTtcbiBcdGlmIChyYylcbi1cdFx0cmV0dXJuIHJjO1xuK1x0XHRnb3RvIGVycjtcbiBcbiBcdHJjID0gZGlic19sb29wYmFja19pbml0KCk7XG4gXHRpZiAocmMpXG4tXHRcdHByX2VycihcIiVzIGZhaWxzIHdpdGggJWRcXG5cIiwgX19mdW5jX18sIHJjKTtcbitcdFx0Z290byBlcnJfdW5yZWdpc3RlcjtcbiBcbiBcdHJldHVybiByYztcbitcbitlcnJfdW5yZWdpc3RlcjpcbitcdGNsYXNzX3VucmVnaXN0ZXIoXHUwMDI2ZGlic19jbGFzcyk7XG4rZXJyOlxuK1x0cHJfZXJyKFwiJXMgZmFpbHMgd2l0aCAlZFxcblwiLCBfX2Z1bmNfXywgcmMpO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgZGlic19leGl0KHZvaWQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTowNy4xNzI0MzY2MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDM2NDgyMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlicyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgdG8gYGRyaXZlcnMvZGlicy9kaWJzX21haW4uY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkaWJzX2luaXRgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGBnb3RvYCBzdGF0ZW1lbnQgYW5kIGEgcmVzdHJ1Y3R1cmVkIGVycm9yIGhhbmRsaW5nIGZsb3cuIEl0IGFwcGVhcnMgdGhleSBhcmUgYWltaW5nIGZvciBjbGVhbmVyIGVycm9yIHByb3BhZ2F0aW9uLiBQcmV2aW91c2x5LCBpZiBgY2xhc3NfcmVnaXN0ZXJgIG9yIGBkaWJzX2xvb3BiYWNrX2luaXRgIGZhaWxlZCwgdGhlIGNvZGUgd291bGQgc2ltcGx5IHJldHVybi4gTm93LCB0aGV5J3ZlIGludHJvZHVjZWQgbGFiZWxzIGBlcnJfdW5yZWdpc3RlcmAgYW5kIGBlcnJgIHRvIGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIG1vcmUgcm9idXN0bHkuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRpYnNgIGlzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBleHBsb3JlIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgIGFuZCBvdGhlciBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL2RpYnMvYCBkaXJlY3RvcnkgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBkaWJzIGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSdsbCBwcm9iYWJseSByZWFjaCBmb3IgbXkgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvb2xzIHRvIHF1aWNrbHkgZ2V0IHNvbWUgY29udGV4dCBhbmQgZmlndXJlIG91dCBpZiB0aGlzIG1vZHVsZSBpcyBldmVuIHVzZWQuIFRoaXMgaXMgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLCBidXQgdW5kZXJzdGFuZGluZyBpdHMgY29udGV4dCBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgc2lkZSBlZmZlY3RzIG9yIHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMToxNC42MDg5MjM5MDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvZGlic19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiAgRElCUyAtIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZ1xcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRElCUyBjbGFzcyBtb2R1bGVcXG4gICA2OlxcdCAqXFxuICAgNzpcXHQgKiAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDI1XFxuICAgODpcXHQgKi9cXG4gICA5OlxcdCNkZWZpbmUgcHJfZm10KGZtdCkgXFxcImRpYnM6IFxcXCIgZm10XFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9kaWJzLmhcXHUwMDNlXFxuICAxNjpcXHRcXG4gIDE3OlxcdCNpbmNsdWRlIFxcXCJkaWJzX2xvb3BiYWNrLmhcXFwiXFxuICAxODpcXHRcXG4gIDE5OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIGNsYXNzXFxcIik7XFxuICAyMDpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuICAyMTpcXHRcXG4gIDIyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgZGlic19jbGFzcyA9IHtcXG4gIDIzOlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiZGlic1xcXCIsXFxuICAyNDpcXHR9O1xcbiAgMjU6XFx0XFxuICAyNjpcXHQvKiB1c2UgYW4gYXJyYXkgcmF0aGVyIGEgbGlzdCBmb3IgZmFzdCBtYXBwaW5nOiAqL1xcbiAgMjc6XFx0c3RhdGljIHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50c1tNQVhfRElCU19DTElFTlRTXTtcXG4gIDI4OlxcdHN0YXRpYyB1OCBtYXhfY2xpZW50O1xcbiAgMjk6XFx0c3RhdGljIERFRklORV9NVVRFWChjbGllbnRzX2xvY2spO1xcbiAgMzA6XFx0c3RydWN0IGRpYnNfZGV2X2xpc3Qge1xcbiAgMzE6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiAgMzI6XFx0XFx0c3RydWN0IG11dGV4IG11dGV4OyAvKiBwcm90ZWN0cyBkaWJzIGRldmljZSBsaXN0ICovXFxuICAzMzpcXHR9O1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRzdGF0aWMgc3RydWN0IGRpYnNfZGV2X2xpc3QgZGlic19kZXZfbGlzdCA9IHtcXG4gIDM2OlxcdFxcdC5saXN0ID0gTElTVF9IRUFEX0lOSVQoZGlic19kZXZfbGlzdC5saXN0KSxcXG4gIDM3OlxcdFxcdC5tdXRleCA9IF9fTVVURVhfSU5JVElBTElaRVIoZGlic19kZXZfbGlzdC5tdXRleCksXFxuICAzODpcXHR9O1xcbiAgMzk6XFx0XFxuICA0MDpcXHRzdGF0aWMgdm9pZCBkaWJzX3NldHVwX2ZvcndhcmRpbmcoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQsXFxuICA0MTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG4gIDQyOlxcdHtcXG4gIDQzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA0NjpcXHRcXHRkaWJzLVxcdTAwM2VzdWJzW2NsaWVudC1cXHUwMDNlaWRdID0gY2xpZW50O1xcbiAgNDc6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAgNDg6XFx0fVxcbiAgNDk6XFx0XFxuICA1MDpcXHRpbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXFxuICA1MTpcXHR7XFxuICA1MjpcXHRcXHRzdHJ1Y3QgZGlic19kZXYgKmRpYnM7XFxuICA1MzpcXHRcXHRpbnQgaSwgcmMgPSAtRU5PU1BDO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkaWJzX2Rldl9saXN0Lm11dGV4KTtcXG4gIDU2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNsaWVudHNfbG9jayk7XFxuICA1NzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0RJQlNfQ0xJRU5UUzsgKytpKSB7XFxuICA1ODpcXHRcXHRcXHRpZiAoIWNsaWVudHNbaV0pIHtcXG4gIDU5OlxcdFxcdFxcdFxcdGNsaWVudHNbaV0gPSBjbGllbnQ7XFxuICA2MDpcXHRcXHRcXHRcXHRjbGllbnQtXFx1MDAzZWlkID0gaTtcXG4gIDYxOlxcdFxcdFxcdFxcdGlmIChpID09IG1heF9jbGllbnQpXFxuICA2MjpcXHRcXHRcXHRcXHRcXHRtYXhfY2xpZW50Kys7XFxuICA2MzpcXHRcXHRcXHRcXHRyYyA9IDA7XFxuICA2NDpcXHRcXHRcXHRcXHRicmVhaztcXG4gIDY1OlxcdFxcdFxcdH1cXG4gIDY2OlxcdFxcdH1cXG4gIDY3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y2xpZW50c19sb2NrKTtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0aWYgKGkgXFx1MDAzYyBNQVhfRElCU19DTElFTlRTKSB7XFxuICA3MDpcXHRcXHRcXHQvKiBpbml0aWFsaXplIHdpdGggYWxsIGRldmljZXMgdGhhdCB3ZSBnb3Qgc28gZmFyICovXFxuICA3MTpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRpYnMsIFxcdTAwMjZkaWJzX2Rldl9saXN0Lmxpc3QsIGxpc3QpIHtcXG4gIDcyOlxcdFxcdFxcdFxcdGRpYnMtXFx1MDAzZXByaXZbaV0gPSBOVUxMO1xcbiAgNzM6XFx0XFx0XFx0XFx0Y2xpZW50LVxcdTAwM2VvcHMtXFx1MDAzZWFkZF9kZXYoZGlicyk7XFxuICA3NDpcXHRcXHRcXHRcXHRkaWJzX3NldHVwX2ZvcndhcmRpbmcoY2xpZW50LCBkaWJzKTtcXG4gIDc1OlxcdFxcdFxcdH1cXG4gIDc2OlxcdFxcdH1cXG4gIDc3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdHJldHVybiByYztcXG4gIDgwOlxcdH1cXG4gIDgxOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfcmVnaXN0ZXJfY2xpZW50KTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0aW50IGRpYnNfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXFxuICA4NDpcXHR7XFxuICA4NTpcXHRcXHRzdHJ1Y3QgZGlic19kZXYgKmRpYnM7XFxuICA4NjpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAgODc6XFx0XFx0aW50IG1heF9kbWJzO1xcbiAgODg6XFx0XFx0aW50IHJjID0gMDtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuICA5MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRpYnMsIFxcdTAwMjZkaWJzX2Rldl9saXN0Lmxpc3QsIGxpc3QpIHtcXG4gIDkyOlxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA5MzpcXHRcXHRcXHRtYXhfZG1icyA9IGRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlbWF4X2RtYnMoKTtcXG4gIDk0OlxcdFxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbWF4X2RtYnM7ICsraSkge1xcbiAgOTU6XFx0XFx0XFx0XFx0aWYgKGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnJbaV0gPT0gY2xpZW50LVxcdTAwM2VpZCkge1xcbiAgOTY6XFx0XFx0XFx0XFx0XFx0V0FSTigxLCBcXFwiJXM6IGF0dGVtcHQgdG8gdW5yZWdpc3RlciAnJXMnIHdpdGggcmVnaXN0ZXJlZCBkbWIocylcXFxcblxcXCIsXFxuICA5NzpcXHRcXHRcXHRcXHRcXHQgICAgIF9fZnVuY19fLCBjbGllbnQtXFx1MDAzZW5hbWUpO1xcbiAgOTg6XFx0XFx0XFx0XFx0XFx0cmMgPSAtRUJVU1k7XFxuICA5OTpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9yZWdfZG1iO1xcbiAxMDA6XFx0XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMToxNC42MDkwMTU5NzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzU1MDY4MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBkaWJzX21haW4uYyBDb2RlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvZGlicy9kaWJzX21haW4uY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDIwMCB0aHJvdWdoIDI2NS4gVGhhdCBzcGVjaWZpYyByZWdpb24gaXMgbGlrZWx5IHdoZXJlIGEga2V5IHBpZWNlIG9mIHRoZSBkaWJzIGRyaXZlcidzIGxvZ2ljIGxpdmVzLiBJJ20gZ3Vlc3NpbmcgaXQgcHJvYmFibHkgaGFuZGxlcyBzb21lIGNydWNpYWwgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIG1heWJlIHRoZSBjb3JlIGRhdGEgcGF0aCBzZXR1cCBmb3IgYSBjcml0aWNhbCBkaWJzIGZlYXR1cmUuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzeXN0ZW0sIEkgc3VzcGVjdCBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgb3IgcGVyaGFwcyBhbiBpbmVmZmljaWVudCBhbGdvcml0aG0gaW4gdGhhdCBzZWN0aW9uLiBJdCdzIGFsc28gcG9zc2libGUgSSdtIGxvb2tpbmcgZm9yIGEgcGFydGljdWxhciBwYXR0ZXJuIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIHRoYXQgbWF5IGhhdmUgYmVlbiBhZGp1c3RlZCByZWNlbnRseS4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgc29tZSBpbml0aWFsaXphdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMgcmVsZXZhbnQgdG8gdGhlIGRldmljZSwgb3IgcGVyaGFwcyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgbmV3IGRldmljZSBvciBtb2R1bGUuIE1heWJlIHRoZXJlJ3MgYW4gaW50ZXJydXB0IGhhbmRsZXIgc2V0dGluZyB1cC4gSXQgYWxsIGRlcGVuZHMgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCB0aGUgc3BlY2lmaWMgbW9kdWxlJ3MgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC4gSSdsbCBmb2N1cyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgY29udHJvbCBmbG93LCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZSBvciBvdGhlciBrZXJuZWwgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6MjE6MTYuOTY0MDg2NTUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRFWFBPUlRfU1lNQk9MX0dQTChkaWJzX2Rldl9hZGQpO1xcbiAyMjE6XFx0XFxuIDIyMjpcXHR2b2lkIGRpYnNfZGV2X2RlbChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxuIDIyMzpcXHR7XFxuIDIyNDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAyMjU6XFx0XFx0aW50IGk7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdHN5c2ZzX3JlbW92ZV9ncm91cChcXHUwMDI2ZGlicy1cXHUwMDNlZGV2LmtvYmosIFxcdTAwMjZkaWJzX2Rldl9hdHRyX2dyb3VwKTtcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMjMwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNQVhfRElCU19DTElFTlRTOyArK2kpXFxuIDIzMTpcXHRcXHRcXHRkaWJzLVxcdTAwM2VzdWJzW2ldID0gTlVMTDtcXG4gMjMyOlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuIDIzNTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjbGllbnRzX2xvY2spO1xcbiAyMzY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heF9jbGllbnQ7ICsraSkge1xcbiAyMzc6XFx0XFx0XFx0aWYgKGNsaWVudHNbaV0pXFxuIDIzODpcXHRcXHRcXHRcXHRjbGllbnRzW2ldLVxcdTAwM2VvcHMtXFx1MDAzZWRlbF9kZXYoZGlicyk7XFxuIDIzOTpcXHRcXHR9XFxuIDI0MDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNsaWVudHNfbG9jayk7XFxuIDI0MTpcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkaWJzLVxcdTAwM2VsaXN0KTtcXG4gMjQyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdGRldmljZV9kZWwoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuIDI0NTpcXHR9XFxuIDI0NjpcXHRFWFBPUlRfU1lNQk9MX0dQTChkaWJzX2Rldl9kZWwpO1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRzdGF0aWMgaW50IF9faW5pdCBkaWJzX2luaXQodm9pZClcXG4gMjQ5OlxcdHtcXG4gMjUwOlxcdFxcdGludCByYztcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0cmMgPSBjbGFzc19yZWdpc3RlcihcXHUwMDI2ZGlic19jbGFzcyk7XFxuIDI1MzpcXHRcXHRpZiAocmMpXFxuIDI1NDpcXHRcXHRcXHRnb3RvIGVycjtcXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0cmMgPSBkaWJzX2xvb3BiYWNrX2luaXQoKTtcXG4gMjU3OlxcdFxcdGlmIChyYylcXG4gMjU4OlxcdFxcdFxcdGdvdG8gZXJyX3VucmVnaXN0ZXI7XFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdHJldHVybiByYztcXG4gMjYxOlxcdFxcbiAyNjI6XFx0ZXJyX3VucmVnaXN0ZXI6XFxuIDI2MzpcXHRcXHRjbGFzc191bnJlZ2lzdGVyKFxcdTAwMjZkaWJzX2NsYXNzKTtcXG4gMjY0OlxcdGVycjpcXG4gMjY1OlxcdFxcdHByX2VycihcXFwiJXMgZmFpbHMgd2l0aCAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHJjKTtcXG4gMjY2OlxcdFxcdHJldHVybiByYztcXG4gMjY3OlxcdH1cXG4gMjY4OlxcdFxcbiAyNjk6XFx0c3RhdGljIHZvaWQgX19leGl0IGRpYnNfZXhpdCh2b2lkKVxcbiAyNzA6XFx0e1xcbiAyNzE6XFx0XFx0ZGlic19sb29wYmFja19leGl0KCk7XFxuIDI3MjpcXHRcXHRjbGFzc191bnJlZ2lzdGVyKFxcdTAwMjZkaWJzX2NsYXNzKTtcXG4gMjczOlxcdH1cXG4gMjc0OlxcdFxcbiAyNzU6XFx0c3Vic3lzX2luaXRjYWxsKGRpYnNfaW5pdCk7XFxuIDI3NjpcXHRtb2R1bGVfZXhpdChkaWJzX2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMToxNi45NjQxNTgxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NzU1MTU5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQncyBjaGFuZ2VkIGluIHRoaXMgYGRpYnNfaW5pdGAgZnVuY3Rpb24/IEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIG1pc3NlZCBjbGVhbmluZyB1cCB0aGUgY2xhc3MgcmVnaXN0cmF0aW9uIGlmIGBkaWJzX2xvb3BiYWNrX2luaXRgIGZhaWxlZC4gTm93LCB0aGUgcGF0Y2ggYWRkcyB0aGF0IGNsZWFuLXVwIHN0ZXAuIEl0IGFsc28gaGFuZGxlcyB0aGUgYGNsYXNzX3JlZ2lzdGVyYCBmYWlsdXJlLlxuXG5NeSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSAoYF9faW5pdCBkaWJzX2luaXRgKSBpcyBhY3R1YWxseSAqd29ydGgqIGZ1enppbmcuIFdlIG5lZWQgdG8gZm9sbG93IHRoZSBndWlkZWxpbmVzLiBMZXQgbWUgc2VlLi4uIHRoZSBndWlkZWxpbmVzIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXTigJlzIGp1c3QgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGxvZ2dpbmcgY2hhbmdlcywgb3IgY29uc3RhbnRzIHRoYXQgZG9u4oCZdCBhZmZlY3QgZXhlY3V0aW9uIGZsb3cuIFRoZSBndWlkZWxpbmVzIGFsc28gc2F5IG5vdCB0byBmdXp6IHVucmVhY2hhYmxlIGNvZGUuIEFuZCB0aGUgZ3VpZGVsaW5lcyBzYXkgZG9uJ3QgZnV6eiB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycy5cblxuQnV0IHRoaXMgc2VlbXMgbGlrZSBjb3JlIGtlcm5lbCBsb2dpYy4uLiBidXQsIGlzIGl0IHJlYWNoYWJsZT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQuIFRoaXMgYGRpYnNfaW5pdGAgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IGBzdWJzeXNfaW5pdGNhbGxgIHRpbWUsIG9yIG1vZHVsZSBpbml0IGlmIERJQlMgaXMgYnVpbHQgYXMgYSBtb2R1bGUgb3IgYnVpbHQtaW4uIFRoaXMgbWVhbnMgdGhpcyBpcyBjb3JlIGtlcm5lbCBsb2dpYy4gQ2FuIGBkaWJzX2xvb3BiYWNrX2luaXQoKWAgYWN0dWFsbHkgKmZhaWwqIHVuZGVyIGZ1enppbmcgY29uZGl0aW9ucz8gSSd2ZSBnb3QgdG8gbG9vayBjbG9zZXIgYXQgYGRpYnNfbG9vcGJhY2tfaW5pdCgpYCBpdHNlbGYgdG8gYXNzZXNzIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGZhaWx1cmUgbW9kZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMToyMS45Mzk2NzcyMDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NjY3MjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWJzX2xvb3BiYWNrX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zNDU9c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1Ny1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM1ODppbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTkte1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaD0zNT1zdHJ1Y3QgZGlic19sb19kZXYge1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00My1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjQ0OmludCBkaWJzX2xvb3BiYWNrX2luaXQodm9pZCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00NS12b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQ2LSNlbHNlXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0NzpzdGF0aWMgaW5saW5lIGludCBkaWJzX2xvb3BiYWNrX2luaXQodm9pZClcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQ4LXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz0yNDg9c3RhdGljIGludCBfX2luaXQgZGlic19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjU1LVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyNTY6XFx0cmMgPSBkaWJzX2xvb3BiYWNrX2luaXQoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjU3LVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6MjE6MjMuNDM2MzU0NjU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYzODkxNDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgRElCUyBLY29uZmlnIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgRElCUyBpcyBjb25maWd1cmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGFzIGFsd2F5cywgaXMgdGhlIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBESUJTIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBzZWUgaG93IHRoZXkgaW50ZWdyYXRlIHdpdGggb3RoZXIgc3Vic3lzdGVtcy4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBrZXl3b3JkcyBsaWtlIFwiRElCU1wiLCBcImR5bmFtaWMgaW5zdHJ1Y3Rpb25cIiwgXCJicmFuY2ggcHJlZGljdGlvbixcIiBvciBwb3RlbnRpYWxseSByZWxhdGVkIGFjcm9ueW1zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBoaWVyYXJjaHkgb2Ygb3B0aW9ucywgbGlrZWx5IG5lc3RlZCB1bmRlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3IgY29yZSBrZXJuZWwgZmVhdHVyZXMuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIHVuZGVybHlpbmcgYnVpbGQgc3lzdGVtIGZpbGVzIChsaWtlbHkgTWFrZWZpbGVzKSB0byBzZWUgaG93IHRob3NlIG9wdGlvbnMgYWZmZWN0IGNvbXBpbGF0aW9uLCBsaW5raW5nLCBhbmQgdWx0aW1hdGVseSwgdGhlIGJlaGF2aW9yIG9mIHRoZSBrZXJuZWwgYXQgcnVudGltZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgRElCUyBjb25maWd1cmF0aW9ucyDigJMgdGhlIHRyYWRlLW9mZnMgYmV0d2VlbiBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBwb3RlbnRpYWwgb3ZlcmhlYWQuIExldCdzIHNlZSB3aGF0IHRoZSBgS2NvbmZpZ2AgZmlsZXMgaGF2ZSB0byB0ZWxsIHVzIGFib3V0IGhvdyB0aGlzIGlzIGFsbCBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjIxOjI3LjA3NTI3MTk3NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MDg3ODQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKkRJQlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjIxOjI5LjIzNjE1NzI4N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTk3NDQ0MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBmaWxlcyB5b3UgbWVudGlvbmVkOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRGl2aW5nIGludG8gdGhlIERpYnMgRHJpdmVyKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgZHJpdmVycy9kaWJzL0tjb25maWdgIGFuZCBgZHJpdmVycy9kaWJzL01ha2VmaWxlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIFwiZGlic1wiIGRyaXZlciBsaXZlcy4gVGhlIGBLY29uZmlnYCBmaWxlIGlzIHdoYXQgZGljdGF0ZXMgd2hhdCBvcHRpb25zIHRoZSB1c2VyIHNlZXMgaW4gdGhlIG1lbnVjb25maWcgb3IgZGVmY29uZmlnIHByb2Nlc3MgLSBpdCBkZWZpbmVzIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGFsbCB0aGUgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbmNsdWRlZCBvciBleGNsdWRlZCBmcm9tIHRoZSBkaWJzIGRyaXZlci4gSeKAmWxsIGV4cGVjdCB0byBmaW5kIHRoaW5ncyBsaWtlIHdoZXRoZXIgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSBvciBidWlsdC1pbiwgYW5kIHBvc3NpYmx5IG9wdGlvbnMgZm9yIGRpZmZlcmVudCBkaWJzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzLiBUaGUgYE1ha2VmaWxlYCwgb24gdGhlIG90aGVyIGhhbmQsIHdpbGwgZ292ZXJuIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGFjdHVhbGx5ICpjb21waWxlcyogYW5kIGxpbmtzIHRoZSBkcml2ZXIuIEl0J2xsIHNwZWNpZnkgdGhlIHNvdXJjZSBmaWxlcywgaW5jbHVkZSBwYXRocywgYW55IGNvbXBpbGVyIGZsYWdzLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIG1vZHVsZS1zcGVjaWZpYyB0YXJnZXRzIGlmIGl0J3MgYmVpbmcgYnVpbHQgYXMgYSBsb2FkYWJsZSBrZXJuZWwgbW9kdWxlLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIHVzZSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgcnVsZXMsIG1heWJlIGluY2x1ZGluZyBzb21lIG1hY3JvcyB0byBoYW5kbGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGlmIHRoZSBLY29uZmlnIGZpbGUgaGFzIHNldHVwIG9wdGlvbnMgZm9yIHRoZSBkaXZlcidzIGJlaGF2aW91ci4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6Njc4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjIxOjMxLjgzMzYwMzU4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBESUJTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG5cXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcXG4gICA3OlxcdFxcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcXG4gICA4OlxcdFxcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cXG4gIDExOlxcdFxcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxcbiAgMTI6XFx0XFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIERJQlNfTE9cXG4gIDE1OlxcdFxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gRElCU1xcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxcbiAgMjE6XFx0XFx0ICBvY2N1cnMgd2l0aGluIHRoZSBzYW1lIE9TLiBUaGlzIGhlbHBzIGluIGNvbnZlbmllbnQgdGVzdGluZyBvZlxcbiAgMjI6XFx0XFx0ICBkaWJzIGNsaWVudHMsIHNpbmNlIGRpYnMgbG9vcGJhY2sgaXMgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlIG9yXFxuICAyMzpcXHRcXHQgIGhhcmR3YXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTozMS44MzM2Nzg1NDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzExODYzNTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBESUJTIExvb3BiYWNrKipcblxuT2theSwgSSd2ZSBnb3QgdGhlIGdlbmVyYWwgcGljdHVyZSBub3csIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIEknbSB0aG9yb3VnaC4gV2UndmUgbG9va2VkIGF0IHRoZSBtYWluIGNvbXBvbmVudHMsIGJ1dCBsZXQncyBub3Qgb3Zlcmxvb2sgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgZWRnZSBjYXNlcy4gQSBnb29kIGVuZ2luZWVyIG5ldmVyIGFzc3VtZXMgdGhleSd2ZSBnb3QgaXQgYWxsLCBzbyBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgYWxzbyBjaGVjayBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AuXCIgVGhpcyBmaWxlIGxpa2VseSBoYW5kbGVzIHRoZSBsb29wYmFjayBmdW5jdGlvbmFsaXR5LCB3aGljaCBjb3VsZCByZXZlYWwgaW50ZXJlc3RpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscywgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ2llcywgb3IgZXZlbiBwb2ludCBvdXQgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBjb3JlIERJQlMgbG9naWMgdGhhdCB3ZSBtaWdodCBoYXZlIG1pc3NlZCBpbiBhIHF1aWNrIG92ZXJ2aWV3LiBJdCdzIHRoZSBraW5kIG9mIHBsYWNlIHdoZXJlIHVuZXhwZWN0ZWQgZGV0YWlscyBvZnRlbiByZXNpZGUsIGFuZCB1bmNvdmVyaW5nIHRoZW0gZWFybHkgc2F2ZXMgYSBsb3Qgb2YgaGVhZGFjaGVzIGxhdGVyLiBCZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBhbmQgaXQncyBhbHdheXMgZ29vZCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCByZWxldmFudCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDI1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTozNC45NTIzMTgyMDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTU6XFx0XFx0bG9fZGV2ID0gTlVMTDtcXG4gMzU2OlxcdH1cXG4gMzU3OlxcdFxcbiAzNTg6XFx0aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxcbiAzNTk6XFx0e1xcbiAzNjA6XFx0XFx0cmV0dXJuIGRpYnNfbG9fZGV2X3Byb2JlKCk7XFxuIDM2MTpcXHR9XFxuIDM2MjpcXHRcXG4gMzYzOlxcdHZvaWQgZGlic19sb29wYmFja19leGl0KHZvaWQpXFxuIDM2NDpcXHR7XFxuIDM2NTpcXHRcXHRkaWJzX2xvX2Rldl9yZW1vdmUoKTtcXG4gMzY2OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6MjE6MzQuOTUyMzg1NTUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzNTcyMzgzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGRpYnNfbG9fZGV2X3Byb2JlIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGRpYnNfbG9fZGV2X3Byb2JlYCB3aXRoaW4gdGhlIGBkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBsb29wYmFjayBkZXZpY2UgZHJpdmVyLCB3aGljaCBpcyBhIHN0YW5kYXJkIHBhdHRlcm4uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0J3Mgc3RydWN0dXJlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGRldmljZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZGV2aWNlLXNwZWNpZmljIHNldHVwLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgaG93IGl0J3MgdGllZCBpbnRvIHRoZSBEaXJlY3QgSS9PIEJ5cGFzcyBTdWJzeXN0ZW0gKERJQlMpLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgY29yZSBESUJTIGZyYW1ld29yaywgcHJvYmFibHkgdG8gcmVnaXN0ZXIgdGhlIGxvb3BiYWNrIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBESUJTIGxheWVyLiBJJ2xsIG5lZWQgdG8gb2JzZXJ2ZSB3aGF0IGRldmljZSByZXNvdXJjZXMgaXQncyBoYW5kbGluZy4gSXMgaXQgdXNpbmcgYSBtZW1vcnkgcmVnaW9uPyBJbnRlcnJ1cHRzPyBETUEgY2hhbm5lbHM/IEkgYWxzbyB3YW50IHRvIHNlZSB0aGUgZXJyb3IgaGFuZGxpbmc7IHdoYXQncyB0aGUgZHJpdmVyJ3MgZ3JhY2VmdWwgZGVncmFkYXRpb24gcGxhbiBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgaW5pdGlhbGl6YXRpb24/IEZpbmFsbHksIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIG5ldGRldiByZWdpc3RyYXRpb24gb3Igc2ltaWxhciB0byBtYWtlIHRoZSBsb29wYmFjayBkZXZpY2UgYWNjZXNzaWJsZSB0byB0aGUgc3lzdGVtIG5ldHdvcmsgc3RhY2suIEknbGwgbmVlZCB0byBwYXJzZSB0aHJvdWdoIHRoZSBjb2RlIGZvciB0aGUgc3BlY2lmaWNzIG9mIHRoZXNlIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODI5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTo0My4zMDk2MjYxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9leGl0KHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldilcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2NudCkpXFxuIDMwMzpcXHRcXHRcXHR3YWl0X2V2ZW50KGxkZXYtXFx1MDAzZWxkZXZfcmVsZWFzZSwgIWF0b21pY19yZWFkKFxcdTAwMjZsZGV2LVxcdTAwM2VkbWJfY250KSk7XFxuIDMwNDpcXHR9XFxuIDMwNTpcXHRcXG4gMzA2OlxcdHN0YXRpYyBpbnQgZGlic19sb19kZXZfcHJvYmUodm9pZClcXG4gMzA3OlxcdHtcXG4gMzA4OlxcdFxcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcXG4gMzA5OlxcdFxcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcXG4gMzEwOlxcdFxcdGludCByZXQ7XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdGxkZXYgPSBremFsbG9jX29iaigqbGRldik7XFxuIDMxMzpcXHRcXHRpZiAoIWxkZXYpXFxuIDMxNDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XFxuIDMxNzpcXHRcXHRpZiAoIWRpYnMpIHtcXG4gMzE4OlxcdFxcdFxcdGtmcmVlKGxkZXYpO1xcbiAzMTk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMyMDpcXHRcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdGxkZXYtXFx1MDAzZWRpYnMgPSBkaWJzO1xcbiAzMjM6XFx0XFx0ZGlicy1cXHUwMDNlZHJ2X3ByaXYgPSBsZGV2O1xcbiAzMjQ6XFx0XFx0ZGlic19sb19kZXZfaW5pdChsZGV2KTtcXG4gMzI1OlxcdFxcdHV1aWRfZ2VuKFxcdTAwMjZkaWJzLVxcdTAwM2VnaWQpO1xcbiAzMjY6XFx0XFx0ZGlicy1cXHUwMDNlb3BzID0gXFx1MDAyNmRpYnNfbG9fb3BzO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRkaWJzLVxcdTAwM2VkZXYucGFyZW50ID0gTlVMTDtcXG4gMzI5OlxcdFxcdGRldl9zZXRfbmFtZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2LCBcXFwiJXNcXFwiLCBkaWJzX2xvX2Rldl9uYW1lKTtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xcbiAzMzI6XFx0XFx0aWYgKHJldClcXG4gMzMzOlxcdFxcdFxcdGdvdG8gZXJyX3JlZztcXG4gMzM0OlxcdFxcdGxvX2RldiA9IGxkZXY7XFxuIDMzNTpcXHRcXHRyZXR1cm4gMDtcXG4gMzM2OlxcdFxcbiAzMzc6XFx0ZXJyX3JlZzpcXG4gMzM4OlxcdFxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbiAzMzk6XFx0XFx0cHV0X2RldmljZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2KTtcXG4gMzQwOlxcdFxcdGtmcmVlKGxkZXYpO1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNDM6XFx0fVxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcXG4gMzQ2OlxcdHtcXG4gMzQ3OlxcdFxcdGlmICghbG9fZGV2KVxcbiAzNDg6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNDk6XFx0XFxuIDM1MDpcXHRcXHRkaWJzX2Rldl9kZWwobG9fZGV2LVxcdTAwM2VkaWJzKTtcXG4gMzUxOlxcdFxcdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcXG4gMzUyOlxcdFxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbiAzNTM6XFx0XFx0cHV0X2RldmljZShcXHUwMDI2bG9fZGV2LVxcdTAwM2VkaWJzLVxcdTAwM2VkZXYpO1xcbiAzNTQ6XFx0XFx0a2ZyZWUobG9fZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6MjE6NDMuMzA5NzE4MTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUxMzQyMDAwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIERJQlMgRHJpdmVyIEluaXRpYWxpemF0aW9uIEVycm9yIEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBjb21taXQuIEZpcnN0LCBJIHdhbnQgdG8gcXVpY2tseSBjaGVjayB0aGUgYGdpdCBsb2dgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHJlY2VudCBhY3Rpdml0eSBhcm91bmQgdGhpcyBgZGlic19tYWluLmNgIGZpbGUsIG9yIGp1c3QgbG9vayBhdCB0aGUgZGlmZi4gVGhlIGRpZmYgaXRzZWxmIGlzIHNob3dpbmcgc29tZSBjaGFuZ2VzIGluIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGBkaWJzX2luaXRgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBhbiBhZGRpdGlvbiBvZiBgY2xhc3NfdW5yZWdpc3RlcihcdTAwMjZkaWJzX2NsYXNzKWAgYW5kIGEgYHByX2VycmAgY2FsbCBpbiB0aGUgZXJyb3IgdW53aW5kIHBhdGguXG5cbk5vdywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuMS4gICoqV2hhdCdzIENoYW5nZWQ/KiogVGhlIGVycm9yIGhhbmRsaW5nIGluIGBkaWJzX2luaXRgLCB3aGljaCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiwgaGFzIGJlZW4gdXBkYXRlZC4gSWYgYGRpYnNfbG9vcGJhY2tfaW5pdCgpYCBmYWlscyBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLCBgY2xhc3NfdW5yZWdpc3RlcmAgYW5kIGBwcl9lcnJgIGFyZSBub3cgY2FsbGVkLiBTaW1pbGFybHksIGlmIGBjbGFzc19yZWdpc3RlcmAgZmFpbHMsIHRoZSBgcHJfZXJyYCBpcyBjYWxsZWQuXG5cbjIuICAqKkZ1enppbmcgQXBwbGljYWJpbGl0eT8qKiAgSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGBkaWJzX2luaXRgIGlzIG1hcmtlZCB3aXRoIGBfX2luaXRgIGFuZCBpcyBwYXJ0IG9mIHRoZSBpbml0Y2FsbCBzZXF1ZW5jZSwgZXhlY3V0aW5nIGF0IGJvb3QgdGltZSBvciBtb2R1bGUgbG9hZCB0aW1lLiBUaGUgYF9faW5pdGAgY29kZSBpcyBkaXNjYXJkZWQgYWZ0ZXIgdGhhdCBpbml0aWFsIHNldHVwLiBJbiBlbnZpcm9ubWVudHMgbGlrZSBzeXprYWxsZXIsIHdlIG9ubHkgZnV6eiBhZnRlciB0aGUgaW5pdGlhbCBib290LiBUaHVzLCBlcnJvciBwYXRocyB3aXRoaW4gYF9faW5pdGAgZnVuY3Rpb25zIGFyZSB0eXBpY2FsbHkgdW5yZWFjaGFibGUgZHVyaW5nIHJlZ3VsYXIgZnV6emluZyBiZWNhdXNlIHRoZXkgYXJlbid0IHRyaWdnZXJlZCBieSB1c2VyLXNwYWNlIHN5c2NhbGxzIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGlzIHBhcnRpY3VsYXIgcGF0Y2ggZGVhbHMgKm9ubHkqIHdpdGggY2xlYW51cCBvbiBpbml0aWFsaXphdGlvbiBlcnJvcnMgKGVpdGhlciBmcm9tIGBjbGFzc19yZWdpc3RlcmAgb3IgYGRpYnNfbG9vcGJhY2tfaW5pdGApLlxuXG5Ob3csIGxldCdzIHJlZmVyZW5jZSB0aG9zZSBmdXp6aW5nIHJ1bGVzLiBJIHNlZSB0aGF0IGNoYW5nZXMgaW4gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29kZSBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nIChsaWtlIGBwcl9lcnJgKSwgY29uc3RhbnQgbW9kaWZpY2F0aW9ucyB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGV4ZWN1dGlvbiBmbG93LCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgKSBleGVjdXRlZCBvbmx5IG9uIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucyBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBmdXp6LXdvcnRoeS5cblxuV2FpdCwgc2hvdWxkIEkgcmV0aGluayB0aGUgYF9faW5pdGAgZXJyb3IgY2xlYW51cD8gQ291bGQgRElCUyBiZSByZXBlYXRlZGx5IGxvYWRlZCBhbmQgdW5sb2FkZWQ/IEV2ZW4gaWYgc28sIHRoZXNlIGVycm9yIHBhdGhzIHdpdGhpbiBgX19pbml0YCBhcmUgb25seSByZWFjaGVkIGlmIGBkaWJzX2xvb3BiYWNrX2luaXQoKWAgZmFpbHMgKHR5cGljYWxseSBvbmx5IG9uIEVOT01FTSBkdXJpbmcgYm9vdC9pbnNtb2QpLiBUaGVyZSBpcyB6ZXJvIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJ1bnRpbWUgbG9naWMsIHN5c2NhbGwgaGFuZGxpbmcsIHBhY2tldCBwcm9jZXNzaW5nLCBvciBkZXZpY2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyAqcHVyZWx5KiBhZGRpbmcgYW4gZXJyb3IgcGF0aCBjbGVhbnVwIChjYWxsaW5nIGBjbGFzc191bnJlZ2lzdGVyYCkgaW4gYW4gYF9faW5pdGAgZnVuY3Rpb24uXG5cbkkgaGF2ZSBkb3VibGUgY2hlY2tlZCB0aGUgZGlmZi4gSXQgb25seSBtb2RpZmllcyBsaW5lcyAyNTEtMjY3IG9mIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgLlxuXG5UaGVyZWZvcmUsIHRoZSBpbXBhY3QgdG8gcnVudGltZSBmdW5jdGlvbmFsaXR5IGlzIG5lZ2xpZ2libGU7IHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cbk15IGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtdYCAoZW1wdHkgbGlzdClcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKGVtcHR5IGxpc3QpXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBlcnJvciB1bndpbmQgY2xlYW51cCAoYGNsYXNzX3VucmVnaXN0ZXJgKSBhbmQgZXJyb3IgbG9nZ2luZyB0byB0aGUgYF9faW5pdCBkaWJzX2luaXQoKWAgZnVuY3Rpb24gd2hlbiBgZGlic19sb29wYmFja19pbml0KClgIGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgcnVudGltZSByZWFjaGFibGUgZnVuY3Rpb25hbGl0eSB3b3J0aCBmdXp6aW5nLlwiXG5cbkxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0NywiT3V0cHV0VG9rZW5zIjo4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDoyMTo1OC40NDM5MjAzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgZml4ZXMgZXJyb3IgdW53aW5kaW5nIGluIHRoZSBtb2R1bGUvc3Vic3lzdGVtIGluaXQgZnVuY3Rpb24gKF9faW5pdCBkaWJzX2luaXQpLCBhZGRpbmcgY2xhc3NfdW5yZWdpc3RlciBhbmQgZXJyb3IgbG9nZ2luZyBpZiBkaWJzX2xvb3BiYWNrX2luaXQgZmFpbHMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcmVhY2hhYmxlIHJ1bnRpbWUga2VybmVsIGxvZ2ljIG9yIHN5c2NhbGwgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGZpeGVzIGVycm9yIHVud2luZGluZyBpbiB0aGUgbW9kdWxlL3N1YnN5c3RlbSBpbml0IGZ1bmN0aW9uIChfX2luaXQgZGlic19pbml0KSwgYWRkaW5nIGNsYXNzX3VucmVnaXN0ZXIgYW5kIGVycm9yIGxvZ2dpbmcgaWYgZGlic19sb29wYmFja19pbml0IGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IHJlYWNoYWJsZSBydW50aW1lIGtlcm5lbCBsb2dpYyBvciBzeXNjYWxsIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6MjE6NTguNDQzOTQ1ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowzz27x[1] Phase: Running StartedAt: 2026-09-03 10:22:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzz27x[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-03 10:22:09 +0000 UTC FinishedAt: 2026-09-03 10:22:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}