Name: series-workflowqlrv5 Phase: Failed StartedAt: 2026-08-27 17:31:55 +0000 UTC FinishedAt: 2026-08-27 18:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqlrv5[0] Phase: Succeeded StartedAt: 2026-08-27 17:31:55 +0000 UTC FinishedAt: 2026-08-27 18:19:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqlrv5[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 17:31:55 +0000 UTC FinishedAt: 2026-08-27 18:19:16 +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+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHRyaXZpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgKGEgc2luZ2xlIGJvb2xlYW4gY2hlY2sgb2YgYSBkZXZpY2UgcHJvcGVydHkgdG8gc2tpcCBhIHJlZ3VsYXRvcnkgaGludCkgaW4gdGhlIGluaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIE1hcnZlbGwgbXdpZmlleCB3aXJlbGVzcyBkcml2ZXIuIFJlYWNoaW5nIHRoaXMgY29kZSByZXF1aXJlcyBzdWNjZXNzZnVsIGZpcm13YXJlIGxvYWRpbmcgYW5kIGNvbXBsZXggZGV2aWNlIGludGVyYWN0aW9uLCB3aGljaCBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHRvIGFjaGlldmUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyBnZW5lcmljIFVTQiBlbXVsYXRpb24uIEdpdmVuIHRoZSB0cml2aWFsIG5hdHVyZSBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgdW5yZWFjaGFiaWxpdHksIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDEwMTQ1MjZhZmM5MGZlMWJkNmI5ZjA0YjliNjFmNjdkZjVjMjI4OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxODoxNzo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL21hcnZlbGwsc2Q4Nzg3LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL21hcnZlbGwsc2Q4Nzg3LnlhbWxcbmluZGV4IDkzMGI3MDBiNzNkMDAuLjlmOTA1ZWY1YzJjMDcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL21hcnZlbGwsc2Q4Nzg3LnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbFxuQEAgLTU5LDYgJiM0Mzs1OSwxMiBAQCBwcm9wZXJ0aWVzOlxuICAgICBkZXNjcmlwdGlvbjogQ2FsaWJyYXRpb24gZGF0YSBmb3Igc3ViLWJhbmQgMyBpbiB0aGUgNUdIeiBiYW5kLlxuICAgICBtYXhJdGVtczogNTAyXG4gXG4mIzQzOyAgbWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbTpcbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL2ZsYWdcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBUaGUgcmVndWxhdG9yeSBoaW50IGluIFJPTSBjb25mbGljdHMgd2l0aCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLlxuJiM0MzsgICAgICBJdCBzaG91bGQgYmUgaWdub3JlZCwgc28gdGhlIHBsYXRmb3JtIHJlZ3VsYXRvcnkgZG9tYWluIGNhbiBiZSB1c2VkLlxuJiM0MztcbiAgIG1hcnZlbGwsd2FrZXVwLXBpbjpcbiAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyXG4gICAgIGRlc2NyaXB0aW9uOlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c1xuaW5kZXggNGFiNDVmMjk0ZGUyMi4uMmJmMjk5ODFhMDMxMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzXG5AQCAtMTY1LDYgJiM0MzsxNjUsMTUgQEAgXHUwMDI2c2RoY2kge1xuIFx0d3AtaW52ZXJ0ZWQ7XG4gXHRidXMtd2lkdGggPSBcdTAwM2M4XHUwMDNlO1xuIFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7XG4mIzQzO1x0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdCNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzO1x0d2lmaUAxIHtcbiYjNDM7XHRcdGNvbXBhdGlibGUgPSBcJiMzNDttYXJ2ZWxsLHNkODg5N1wmIzM0OztcbiYjNDM7XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHRtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tO1xuJiM0MztcdH07XG4gfTtcbiBcbiBcdTAwMjZ1c2IzXzFfdmJ1cyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuY1xuaW5kZXggN2ExYmEzMmYxZmIzNi4uMjkzODc2Mzk3YjY3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuY1xuQEAgLTQ4OTcsNyAmIzQzOzQ4OTcsMTQgQEAgaW50IG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbiBcdFx0XHRcdGNvdW50cnlfY29kZSA9XG4gXHRcdFx0XHRcdG13aWZpZXhfMTFkX2NvZGVfMl9yZWdpb24oXG4gXHRcdFx0XHRcdFx0YWRhcHRlci1cdTAwM2VyZWdpb25fY29kZSk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdC8qIElmIHRoZSByZWcgaGludCBpbiBST00gY29uZmxpY3RzIHdpdGggcGxhdGZvcm1cbiYjNDM7XHRcdFx0XHQgKiBjb25maWd1cmF0aW9uLCBpdCBzaG91bGQgYmUgaWdub3JlZCwgc28gdGhlXG4mIzQzO1x0XHRcdFx0ICogcGxhdGZvcm0gcmVndWxhdG9yeSBkb21haW4gY2FuIGJlIHVzZWQuXG4mIzQzO1x0XHRcdFx0ICovXG4gXHRcdFx0XHRpZiAoY291bnRyeV9jb2RlIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAhZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChhZGFwdGVyLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbVwmIzM0OykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgcmVndWxhdG9yeV9oaW50KHdpcGh5LCBjb3VudHJ5X2NvZGUpKVxuIFx0XHRcdFx0XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxuIFx0XHRcdFx0XHRcdCAgICBcJiMzNDtyZWd1bGF0b3J5X2hpbnQoKSBmYWlsZWRcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSAoYSBzaW5nbGUgYm9vbGVhbiBjaGVjayBvZiBhIGRldmljZSBwcm9wZXJ0eSB0byBza2lwIGEgcmVndWxhdG9yeSBoaW50KSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgTWFydmVsbCBtd2lmaWV4IHdpcmVsZXNzIGRyaXZlci4gUmVhY2hpbmcgdGhpcyBjb2RlIHJlcXVpcmVzIHN1Y2Nlc3NmdWwgZmlybXdhcmUgbG9hZGluZyBhbmQgY29tcGxleCBkZXZpY2UgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gYWNoaWV2ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIGdlbmVyaWMgVVNCIGVtdWxhdGlvbi4gR2l2ZW4gdGhlIHRyaXZpYWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyB1bnJlYWNoYWJpbGl0eSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTAxNDUyNmFmYzkwZmUxYmQ2YjlmMDRiOWI2MWY2N2RmNWMyMjg5MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDE4OjE3OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sCmluZGV4IDkzMGI3MDBiNzNkMDAuLjlmOTA1ZWY1YzJjMDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL21hcnZlbGwsc2Q4Nzg3LnlhbWwKQEAgLTU5LDYgJiM0Mzs1OSwxMiBAQCBwcm9wZXJ0aWVzOgogICAgIGRlc2NyaXB0aW9uOiBDYWxpYnJhdGlvbiBkYXRhIGZvciBzdWItYmFuZCAzIGluIHRoZSA1R0h6IGJhbmQuCiAgICAgbWF4SXRlbXM6IDUwMgogCiYjNDM7ICBtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tOgomIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9mbGFnCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFRoZSByZWd1bGF0b3J5IGhpbnQgaW4gUk9NIGNvbmZsaWN0cyB3aXRoIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uCiYjNDM7ICAgICAgSXQgc2hvdWxkIGJlIGlnbm9yZWQsIHNvIHRoZSBwbGF0Zm9ybSByZWd1bGF0b3J5IGRvbWFpbiBjYW4gYmUgdXNlZC4KJiM0MzsKICAgbWFydmVsbCx3YWtldXAtcGluOgogICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMgogICAgIGRlc2NyaXB0aW9uOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzCmluZGV4IDRhYjQ1ZjI5NGRlMjIuLjJiZjI5OTgxYTAzMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0cwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zODUtbGlua3N5cy1yYW5nby5kdHMKQEAgLTE2NSw2ICYjNDM7MTY1LDE1IEBAICZhbXA7c2RoY2kgewogCXdwLWludmVydGVkOwogCWJ1cy13aWR0aCA9ICZsdDs4Jmd0OzsKIAlzdGF0dXMgPSAmIzM0O29rYXkmIzM0OzsKJiM0MzsKJiM0MzsJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CSNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOwl3aWZpQDEgewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7bWFydmVsbCxzZDg4OTcmIzM0OzsKJiM0MzsJCXJlZyA9ICZsdDsxJmd0OzsKJiM0MzsJCW1hcnZlbGwsaW52YWxpZC1yZWctaGludC1pbi1yb207CiYjNDM7CX07CiB9OwogCiAmYW1wO3VzYjNfMV92YnVzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKaW5kZXggN2ExYmEzMmYxZmIzNi4uMjkzODc2Mzk3YjY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKQEAgLTQ4OTcsNyAmIzQzOzQ4OTcsMTQgQEAgaW50IG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKIAkJCQljb3VudHJ5X2NvZGUgPQogCQkJCQltd2lmaWV4XzExZF9jb2RlXzJfcmVnaW9uKAogCQkJCQkJYWRhcHRlci0mZ3Q7cmVnaW9uX2NvZGUpOwomIzQzOwomIzQzOwkJCQkvKiBJZiB0aGUgcmVnIGhpbnQgaW4gUk9NIGNvbmZsaWN0cyB3aXRoIHBsYXRmb3JtCiYjNDM7CQkJCSAqIGNvbmZpZ3VyYXRpb24sIGl0IHNob3VsZCBiZSBpZ25vcmVkLCBzbyB0aGUKJiM0MzsJCQkJICogcGxhdGZvcm0gcmVndWxhdG9yeSBkb21haW4gY2FuIGJlIHVzZWQuCiYjNDM7CQkJCSAqLwogCQkJCWlmIChjb3VudHJ5X2NvZGUgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgIWRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woYWRhcHRlci0mZ3Q7ZGV2LAomIzQzOwkJCQkJCQkgICAgICAgJiMzNDttYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tJiMzNDspICZhbXA7JmFtcDsKIAkJCQkgICAgcmVndWxhdG9yeV9oaW50KHdpcGh5LCBjb3VudHJ5X2NvZGUpKQogCQkJCQltd2lmaWV4X2RiZyhwcml2LSZndDthZGFwdGVyLCBFUlJPUiwKIAkJCQkJCSAgICAmIzM0O3JlZ3VsYXRvcnlfaGludCgpIGZhaWxlZFxuJiMzNDspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzAyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBNYXJ2ZWxsIFdpRmkgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGEgZmV3IGZpbGVzLiBPbmUgaXMgYSBEZXZpY2UgVHJlZSBiaW5kaW5nIChgbWFydmVsbCxzZDg3ODcueWFtbGApLCBhbm90aGVyIGlzIGEgRGV2aWNlIFRyZWUgZm9yIGEgc3BlY2lmaWMgTGlua3N5cyBkZXZpY2UgKGBhcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzYCksIGFuZCB0aGVuIHRoZSByZWFsIG1lYXQgb2YgaXQsIGEgY2hhbmdlIGluIHRoZSBgbXdpZmlleGAgZHJpdmVyIChgY2ZnODAyMTEuY2ApLiBUaGUgY2hhbmdlIGluIGBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExYCBoYXMgdGhpcyBjb25kaXRpb25hbCBjaGVjayBpbnZvbHZpbmcgYSBgY291bnRyeV9jb2RlYCBhbmQgYSBkZXZpY2UgcHJvcGVydHkuIEl0IGNhbGxzIGByZWd1bGF0b3J5X2hpbnRgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBob3cgbGlrZWx5IGlzIHRoaXMgdG8gYWN0dWFsbHkgdHJpZ2dlciBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGlzIGEgTWFydmVsbCB3aXJlbGVzcyBkcml2ZXIsIHRhcmdldGluZyBTRElPLCBQQ0llLCBhbmQgVVNCIFdpRmkgY2FyZHMuCgpOb3csIHdhaXQgYSBtaW51dGUsIEkga25vdyBgbXdpZmlleGAgKmRvZXMqIGhhdmUgYSBVU0IgZHJpdmVyIChgdXNiLmNgKS4gT2theSwgc28gdGhhdCBjaGFuZ2VzIHRoaW5ncy4gQ2FuIHdlIGxldmVyYWdlIHNvbWV0aGluZyBsaWtlIGEgVVNCIGdhZGdldCBvciBlbXVsYXRlZCBkZXZpY2UgdG8gaGl0IHRoYXQ/IE5vLCB0aGF0IGlzIGEgaG9zdCBkcml2ZXIsIG5vdCBhIGRldmljZSBkcml2ZXIuIEhvbGQgb24uLi4gU3l6a2FsbGVyISBSaWdodCwgU3l6a2FsbGVyICpjYW4qIGVtdWxhdGUgVVNCIGRldmljZXMgdXNpbmcgcmF3IGdhZGdldCwgdmhjaS4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBwcm9iZSBgbXdpZmlleF91c2JgIHdpdGggc3l6a2FsbGVyLgoKVGhlIGtleSBxdWVzdGlvbiBpcywgaXMgYG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTFgIHJlYWNoYWJsZT8gQ2hlY2tpbmcgdGhlIHNvdXJjZSBpdCBpcyBjYWxsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbi4gU28sIGl0IHNob3VsZCBiZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBjZmc4MDIxMS5jYCwgYW5kIHRoYXQmIzM5O3MgdGhlIGNvcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgYG13aWZpZXhfdXNiYCBpcyBlbmFibGVkIGluIHRoZSBjb25maWc7IHRoYXQgd291bGQgYmUgdGhlIGZpcnN0IGh1cmRsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYz00NjY4PWludCBtd2lmaWV4X2luaXRfY2hhbm5lbF9zY2FuX2dhcChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ2OTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYzo0Njk4OmludCBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYy00Njk5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuaC0xNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5oOjE1OmludCBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuaC0xNi1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTUzNT1zdGF0aWMgaW50IF9td2lmaWV4X2Z3X2RwYyhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTg2LVx0aWYgKCFhZGFwdGVyLVx1MDAzZXdpcGh5KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjU4NzpcdFx0aWYgKG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoYWRhcHRlcikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTg4LVx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtd2lmaWV4IEZpcm13YXJlIExvYWRpbmcgUHJvY2VzcyoqCgpPa2F5LCBzbyBgX213aWZpZXhfZndfZHBjYCB0cmlnZ2VycyBgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMWAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgdGVsbHMgbWUgdGhlIGZpcm13YXJlIGxvYWRpbmcgaXMgaGFwcGVuaW5nIGJlZm9yZSB0aGlzIHBvaW50LiBDYW4gc3l6a2FsbGVyIGFjdHVhbGx5ICpsb2FkKiB0aGUgZmlybXdhcmUgZm9yIG13aWZpZXgsIHRob3VnaD8gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBzYXkgbm87IGl0IHVzdWFsbHkgcmVsaWVzIG9uIHRoZSBmaXJtd2FyZSBlaXRoZXIgYmVpbmcgcHJlLWxvYWRlZCBhcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gaW1hZ2UgKGxpa2UgdGhvc2UgaW4gbGludXgtZmlybXdhcmUpIG9yIHRocm91Z2ggc29tZSBmYXVsdCBpbmplY3Rpb24gc2V0dXAuIGByZXF1ZXN0X2Zpcm13YXJlYCBjb3VsZCBiZSB0aGUgZW50cnkgcG9pbnQgdG8gaW52ZXN0aWdhdGUsIGJ1dCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGhhbmRsZSB0aGUgcGh5c2ljYWwgZmlybXdhcmUgZmlsZXMgZGlyZWN0bHksIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGZha2VkIGZpcm13YXJlIG9yIGZhdWx0IGluamVjdGlvbiBzY2VuYXJpby4gSG1tbSwgYnV0IHdhaXQuLi4gaWYgdGhpcyBpcyBhIFVTQiBkcml2ZXIsIHRoaW5ncyBtaWdodCBiZSBkaWZmZXJlbnQsIHJpZ2h0PyBUaGF0IGNvdWxkIG9wZW4gdXAgc29tZSBpbnRlcmVzdGluZyB0ZXN0aW5nIGF2ZW51ZXMuIEJlc3QgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIG13aWZpZXggdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyBzZXQgdXAgYW5kIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjb21waWxlIHRpbWUgb3B0aW9ucyB0aGF0IHdvdWxkIGNoYW5nZSB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNV0lGSUVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mjpjb25maWcgTVdJRklFWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjEyOmNvbmZpZyBNV0lGSUVYX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg2L1NEODc4Ny9TRDg3OTcvU0Q4ODg3L1NEODg5Ny9TRDg5NzcvU0Q4OTc4L1NEODk4Ny9TRDg5OTdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI1OmNvbmZpZyBNV0lGSUVYX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mzc6Y29uZmlnIE1XSUZJRVhfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIGl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhZGRpdGlvbjogYSBjaGVjayBmb3IgYSBkZXZpY2UgcHJvcGVydHkgY2FsbGVkIGBtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgbWlub3IgZnVuY3Rpb25hbCB0d2VhayDigJMgaXQgaWdub3JlcyBhIHJlZ3VsYXRvcnkgaGludCBpZiB0aGlzIHByb3BlcnR5IGlzIHNldC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8KCkhvbmVzdGx5LCBpdCBzZWVtcyBsaWtlIGEgcmVhbCBsb25nIHNob3QuIFRoZSBjaGFuZ2UgaXRzZWxmIGlzIGp1c3QgYSBzaW5nbGUgYGlmYCBzdGF0ZW1lbnQgdGhhdCBjaGVja3MgYSBib29sZWFuIHByb3BlcnR5LiBJZiB0aGF0IHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCBpdCBza2lwcyB0aGUgYHJlZ3VsYXRvcnlfaGludCh3aXBoeSwgY291bnRyeV9jb2RlKWAgY2FsbC4gVGhpcyBpcyBpbmNyZWRpYmx5IHRyaXZpYWwuIFdlJiMzOTtyZSBub3QgdGFsa2luZyBhYm91dCBpbnRyb2R1Y2luZyBjb21wbGV4IGxvZ2ljLCBhbnkgbmV3IG1lbW9yeSBtYW5hZ2VtZW50LCBvciBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0JiMzOTtzIGxpdGVyYWxseSBqdXN0IGEgZmxhZyB0byBieXBhc3MgYSBoaW50LgoKQW5kIG9uIHRvcCBvZiB0aGF0LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIE1hcnZlbGwgV2lGaSBkZXZpY2UgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHBhdGguIFdoaWxlIEkgc3VwcG9zZSBpdCAqY291bGQqIGJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIHRoaXMgcGFydGljdWxhciBjaGFuZ2UgaXRzZWxmIGlzIHNvIHNpbXBsZSB0aGF0IEkmIzM5O20gaGlnaGx5IGRvdWJ0ZnVsIHRoZXJlIGFyZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBvciBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgbG9naWMgZXJyb3JzIHdvcnRoIHNwZW5kaW5nIHRpbWUgb24uCgpIYW5nIG9uIGEgc2Vjb25kLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXksIOKAnFJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnPigKYgQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJl4oCm4oCdIElzIHRoaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUbyBnZXQgdG8gYG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTFgLCB3aGljaCBpcyB3aGVyZSB0aGlzIGNoZWNrIHJlc2lkZXMsIHRoZSBkcml2ZXIgbmVlZHMgdG8gbG9hZCBmaXJtd2FyZS4gVGhhdCYjMzk7cyBhIGdvb2QgcXVlc3Rpb24uIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoaXMgZmlybXdhcmUgbG9hZCBwYXRoOyBsZXQmIzM5O3MgY2hlY2sgYF9td2lmaWV4X2Z3X2RwY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVxdWVzdF9maXJtd2FyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz01MzU9c3RhdGljIGludCBfbXdpZmlleF9md19kcGMoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU2Ny1cdGlmIChjYWxfZGF0YV9jZmcpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6NTY4Olx0XHRpZiAoKHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2YWRhcHRlci1cdTAwM2VjYWxfZGF0YSwgY2FsX2RhdGFfY2ZnLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy01NjktXHRcdFx0XHQgICAgICBhZGFwdGVyLVx1MDAzZWRldikpIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy01NzAtXHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjU3MTpcdFx0XHRcdCAgICBcJiMzNDtDYWwgZGF0YSByZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTcyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9Njk4PXN0YXRpYyBpbnQgbXdpZmlleF9pbml0X2h3X2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy03MTAtXHRpZiAocmVxX2Z3X25vd2FpdCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo3MTE6XHRcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCAxLCBhZGFwdGVyLVx1MDAzZWZ3X25hbWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTcxMi1cdFx0XHRcdFx0ICAgICAgYWRhcHRlci1cdTAwM2VkZXYsIEdGUF9LRVJORUwsIGFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy03MTQtXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo3MTU6XHRcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2YWRhcHRlci1cdTAwM2VmaXJtd2FyZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNzE2LVx0XHRcdFx0ICAgICAgIGFkYXB0ZXItXHUwMDNlZndfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTcyMC1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjcyMTpcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsIFwmIzM0O3JlcXVlc3RfZmlybXdhcmUlcyBlcnJvciAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNzIyLVx0XHRcdCAgICByZXFfZndfbm93YWl0ID8gXCYjMzQ7X25vd2FpdFwmIzM0OyA6IFwmIzM0O1wmIzM0OywgcmV0KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM9MjA1PXN0YXRpYyBpbnQgbXdpZmlleF9yZXF1ZXN0X3JncG93ZXJfdGFibGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMjI5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjIzMDpcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcmdwb3dlcl9kYXRhLCByZ3Bvd2VyX3RhYmxlX25hbWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMjMxLVx0XHRcdFx0ICAgICAgYWRhcHRlci1cdTAwM2VkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRmlybXdhcmUgTG9hZGluZyBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBtd2lmaWV4YCBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGVycm9yIHNjZW5hcmlvLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hhdCBoYXBwZW5zIGlmIGByZXF1ZXN0X2Zpcm13YXJlYCBmYWlscy4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGxvYWQgZmlybXdhcmUsIHRoZW4gdGhlIGBfbXdpZmlleF9md19kcGNgIChEaXJlY3QgUHJvY2VkdXJlIENhbGwpIHJvdXRpbmUgaXMgZXZlbnR1YWxseSBjYWxsZWQuIEJ1dCB0aGUgY3JpdGljYWwgcXVlc3Rpb24sIGFuZCB0aGUgcmVhc29uIEkmIzM5O20gaGVyZSwgaXMgKndoYXQgaXMgdGhlIHZhbHVlIG9mIGZpcm13YXJlKj8KCkhhbmcgb24gYSBtb21lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSB0aGlua2luZyBjbGVhcmx5LiBJdCBhcHBlYXJzIHRoYXQgdGhlIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAgZnVuY3Rpb24gKmRpcmVjdGx5KiBjYWxscyBgX213aWZpZXhfZndfZHBjYC4gT2theS4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljOiBJZiB0aGF0IGluaXRpYWwgY2FsbCB0byBgcmVxdWVzdF9maXJtd2FyZWAgcmV0dXJucyBhbiBlcnJvciwgbXkgdGhpbmtpbmcgdGVsbHMgbWUgdGhhdCB0aGUgc3Vic2VxdWVudCBjYWxsYmFjayBmcm9tIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAsIGBfbXdpZmlleF9md19kcGNgLCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBgZmlybXdhcmVgIHNldCB0byBgTlVMTGAuCgpTbywgdGhlIGtleSBoZXJlIGlzIHdoYXQgaGFwcGVucyAqaW5zaWRlKiBgX213aWZpZXhfZndfZHBjYCBpZiBgZmlybXdhcmVgIGlzIGluZGVlZCBudWxsLiBUaGUgZm9jdXMgaGVyZSBpcyBvbiB0aGF0IGNvbmRpdGlvbi4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdHJhY2UgdGhlIGNvZGUgZmxvdywgYW5kIGhvdyB0aGUgcHJvZ3JhbSByZWFjdHMgdG8gdGhpcyBzY2VuYXJpby4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIHBhdGggd2hlcmUgdGhlIHBvaW50ZXIgKmZpcm13YXJlKiBiZWNvbWVzIGBOVUxMYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWYgXFwoIWZpcm13YXJlXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTUzNT1zdGF0aWMgaW50IF9td2lmaWV4X2Z3X2RwYyhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo1NDU6XHRpZiAoIWZpcm13YXJlKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU0Ni1cdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jPTEzNzA9c3RhdGljIGludCBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMTM4MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzoxMzgyOlx0aWYgKCFmaXJtd2FyZSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTEzODMtXHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTIzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGaXJtd2FyZSBJbml0aWFsaXphdGlvbiBJc3N1ZXMqKgoKT2theSwgc28gaWYgdGhlIGZpcm13YXJlIGRvZXNuJiMzOTt0IGxvYWQgY29ycmVjdGx5IOKAkyBtZWFuaW5nIGAhZmlybXdhcmVgIGlzIHRydWUg4oCTIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhhdCBgX213aWZpZXhfZndfZHBjYCBpcyBnb2luZyB0byBlcnJvciBvdXQgYmVmb3JlIGl0IGNhbiBldmVuIGdldCB0byBjYWxsaW5nIGBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExYC4gVGhhdCB3b3VsZCBleHBsYWluIGNlcnRhaW4gaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMgSSYjMzk7dmUgYmVlbiBzZWVpbmcuIFNlZW1zIGxpa2UgYSBsb2dpY2FsIGxpbmssIGFuZCBhIGNvbW1vbiBwcm9ibGVtLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBhcmNoaXRlY3R1cmUsIGFuZCB0aGF0IHNwZWNpZmljIGNhbGxiYWNrLCBpdCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGF0IHRoZSBgX213aWZpZXhfZndfZHBjYCBjb2RlIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhpbmdzIG1pZ2h0IGJlIGZhbGxpbmcgYXBhcnQgaW4gdGhhdCBzY2VuYXJpby4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzU6XHRzdGF0aWMgaW50IF9td2lmaWV4X2Z3X2RwYyhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuIDUzNjpcdHtcbiA1Mzc6XHRcdGludCByZXQ7XG4gNTM4Olx0XHRjaGFyIGZtdFs2NF07XG4gNTM5Olx0XHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gY29udGV4dDtcbiA1NDA6XHRcdHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlIGZ3O1xuIDU0MTpcdFx0Ym9vbCBpbml0X2ZhaWxlZCA9IGZhbHNlO1xuIDU0MjpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjtcbiA1NDM6XHRcdHN0cnVjdCBjb21wbGV0aW9uICpmd19kb25lID0gYWRhcHRlci1cdTAwM2Vmd19kb25lO1xuIDU0NDpcdFxuIDU0NTpcdFx0aWYgKCFmaXJtd2FyZSkge1xuIDU0NjpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiA1NDc6XHRcdFx0XHQgICAgXCYjMzQ7RmFpbGVkIHRvIGdldCBmaXJtd2FyZSAlc1xcblwmIzM0OywgYWRhcHRlci1cdTAwM2Vmd19uYW1lKTtcbiA1NDg6XHRcdFx0Z290byBlcnJfZG5sZF9mdztcbiA1NDk6XHRcdH1cbiA1NTA6XHRcbiA1NTE6XHRcdG1lbXNldChcdTAwMjZmdywgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlKSk7XG4gNTUyOlx0XHRhZGFwdGVyLVx1MDAzZWZpcm13YXJlID0gZmlybXdhcmU7XG4gNTUzOlx0XHRmdy5md19idWYgPSAodTggKikgYWRhcHRlci1cdTAwM2VmaXJtd2FyZS1cdTAwM2VkYXRhO1xuIDU1NDpcdFx0ZncuZndfbGVuID0gYWRhcHRlci1cdTAwM2VmaXJtd2FyZS1cdTAwM2VzaXplO1xuIDU1NTpcdFxuIDU1NjpcdFx0aWYgKGFkYXB0ZXItXHUwMDNlaWZfb3BzLmRubGRfZncpIHtcbiA1NTc6XHRcdFx0cmV0ID0gYWRhcHRlci1cdTAwM2VpZl9vcHMuZG5sZF9mdyhhZGFwdGVyLCBcdTAwMjZmdyk7XG4gNTU4Olx0XHR9IGVsc2Uge1xuIDU1OTpcdFx0XHRyZXQgPSBtd2lmaWV4X2RubGRfZncoYWRhcHRlciwgXHUwMDI2ZncpO1xuIDU2MDpcdFx0fVxuIDU2MTpcdFxuIDU2MjpcdFx0aWYgKHJldCA9PSAtMSlcbiA1NjM6XHRcdFx0Z290byBlcnJfZG5sZF9mdztcbiA1NjQ6XHRcbiA1NjU6XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIE1TRywgXCYjMzQ7V0xBTiBGVyBpcyBhY3RpdmVcXG5cJiMzNDspO1xuIDU2NjpcdFxuIDU2NzpcdFx0aWYgKGNhbF9kYXRhX2NmZykge1xuIDU2ODpcdFx0XHRpZiAoKHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2YWRhcHRlci1cdTAwM2VjYWxfZGF0YSwgY2FsX2RhdGFfY2ZnLFxuIDU2OTpcdFx0XHRcdFx0ICAgICAgYWRhcHRlci1cdTAwM2VkZXYpKSBcdTAwM2MgMClcbiA1NzA6XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiA1NzE6XHRcdFx0XHRcdCAgICBcJiMzNDtDYWwgZGF0YSByZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbiA1NzI6XHRcdH1cbiA1NzM6XHRcbiA1NzQ6XHRcdC8qIGVuYWJsZSBob3N0IGludGVycnVwdCBhZnRlciBmdyBkbmxkIGlzIHN1Y2Nlc3NmdWwgKi9cbiA1NzU6XHRcdGlmIChhZGFwdGVyLVx1MDAzZWlmX29wcy5lbmFibGVfaW50KSB7XG4gNTc2Olx0XHRcdGlmIChhZGFwdGVyLVx1MDAzZWlmX29wcy5lbmFibGVfaW50KGFkYXB0ZXIpKVxuIDU3NzpcdFx0XHRcdGdvdG8gZXJyX2RubGRfZnc7XG4gNTc4Olx0XHR9XG4gNTc5Olx0XG4gNTgwOlx0XHRyZXQgPSBtd2lmaWV4X2luaXRfZncoYWRhcHRlcik7XG4gNTgxOlx0XHRpZiAocmV0ID09IC0xKVxuIDU4MjpcdFx0XHRnb3RvIGVycl9pbml0X2Z3O1xuIDU4MzpcdFxuIDU4NDpcdFx0bWF5YmVfcXVpcmtfZndfZGlzYWJsZV9kcyhhZGFwdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDExMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogTWFydmVsbCBXaUZpIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBUaGUgY29yZSBjaGFuZ2UgaXMgYSBzaW1wbGUgYm9vbGVhbiBjaGVjayB3aXRoaW4gYG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTFgOiBlc3NlbnRpYWxseSwgaXQmIzM5O3Mgc2tpcHBpbmcgYSByZWd1bGF0b3J5IGhpbnQgYmFzZWQgb24gYSBkZXZpY2UgdHJlZSBwcm9wZXJ0eS4gVGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IGNvbXBsZXggbG9naWMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc3RhdGUgY2hhbmdlcyB0aGF0IHdvdWxkIHR5cGljYWxseSBiZSBhc3NvY2lhdGVkIHdpdGggYnVncyB0aGF0IGZ1enppbmcgd291bGQgZmluZC4gSXQmIzM5O3MgYSBzaW5nbGUsIGVhc2lseSB1bmRlcnN0b29kIGNvbmRpdGlvbi4KClRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGd1aWRlIG1lOiBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywmIzM0OyAmIzM0O0NoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMsJiMzNDsgb3IgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7IFdoaWxlIHRoaXMgbW9kaWZpZXMgZXhlY3V0aW9uIGZsb3cgYnkgc2tpcHBpbmcgdGhlIHJlZ3VsYXRvcnkgaGludCwgaXQmIzM5O3MgdHJpdmlhbCwgYW5kIGNyaXRpY2FsbHksIGl0IHNlZW1zIGRpZmZpY3VsdCB0byByZWFjaC4KCk15IG5leHQgdGhvdWdodCBmb2N1c2VzIG9uIHJlYWNoYWJpbGl0eTogdGhpcyBjb2RlIHJlcXVpcmVzIHRoZSBNYXJ2ZWxsIFdpRmkgZmlybXdhcmUgdG8gYmUgbG9hZGVkLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IHByb3ZpZGUgc3BlY2lmaWMgZmlybXdhcmUsIHVubGVzcyBmYXVsdCBpbmplY3Rpb24gaXMgdXNlZCAodHJpdmlhbCBjaGFuZ2UpLiBIb3dldmVyLCB0aGUgY2hhbmdlIGl0c2VsZiBpcyB0cml2aWFsLiBDYW4gYHN5ei11c2JnZW5gIHRyaWdnZXIgdGhpcyB3aXRoIHRoZSByaWdodCBpbWFnZT8gSXQmIzM5O3MganVzdCByZWFkaW5nIGEgZGV2aWNlIHByb3BlcnR5LCB3aGljaCBpcyBzaW1wbGUuIFN0aWxsLCBpdCB3b3VsZCBuZWVkIHRoZSBmaXJtd2FyZSwgYW5kIHRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGEgc2ltcGxlOiBgIWRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woYWRhcHRlci0mZ3Q7ZGV2LCAmIzM0O21hcnZlbGwsaW52YWxpZC1yZWctaGludC1pbi1yb20mIzM0OylgLiBUaGUgY29kZSBhbHNvIG1vZGlmaWVzIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBkZXZpY2UgdHJlZSBiaW5kaW5ncywgd2hpY2ggc2VlbXMgbGlrZSBhIGZsYWcgdG8gcmV0dXJuIGBmYWxzZWAgcmlnaHQgYXdheS4KClRoZSBwYXRjaCBtb2RpZmllcyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sYCwgYGFyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c2AsIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNgLiBTbyBpdCYjMzk7cyB2ZXJ5IG1pbm9yIGFuZCByZXF1aXJlcyBmaXJtd2FyZSB0byBiZSBwcmVzZW50LgoKQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgdGhpcyByZXF1aXJlcyBzcGVjaWZpYyBmaXJtd2FyZSB0byBiZSBsb2FkZWQuIEl0JiMzOTtzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggaXMgYW5vdGhlciBuZWdhdGl2ZSBzaWduYWwuIFRoaXMgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDsKClRoaW5raW5nIHRocm91Z2ggc3l6a2FsbGVyJiMzOTtzIGNhcGFiaWxpdGllcywgaXQgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMuIEhvd2V2ZXIsIHRoaXMgY29kZSByZXF1aXJlcyB0aGF0IHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIHJlc3BvbmRzIGNvcnJlY3RseSB0byBmaXJtd2FyZSBkb3dubG9hZCBjb21tYW5kcy4gYG13aWZpZXhfZG5sZF9md2AgaXMgdGhlIHJlbGV2YW50IGNvZGUuIFN5emthbGxlciYjMzk7cyBVU0IgZnV6emVyIGdlbmVyYXRlcyByYW5kb20gcmVzcG9uc2VzLiBJdCYjMzk7cyBleHRyZW1lbHkgdW5saWtlbHkgdGhhdCByYW5kb20gVVNCIHJlc3BvbnNlcyB3b3VsZCBjb3JyZWN0bHkgZW11bGF0ZSB0aGUgY29tcGxleCBNYXJ2ZWxsIFdpRmkgZmlybXdhcmUgZG93bmxvYWQgYW5kIGluaXRpYWxpemF0aW9uIHByb3RvY29sIHRvIHRoZSBwb2ludCBvZiBleGVjdXRpbmcgYG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTFgLgoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSB0cml2aWFsLCByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgZmlybXdhcmUsIGFuZCBpcyBoaWdobHkgaW1wcm9iYWJsZSB0byBiZSByZWFjaGVkIGluIHRoZSBzdGFuZGFyZCBTeXprYWxsZXIgZW52aXJvbm1lbnQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFuIHVucmVhY2hhYmxlLCBvciBhdCBsZWFzdCB1bmludGVyZXN0aW5nLCBjb2RlIHBhdGggZm9yIGZ1enppbmcgcHVycG9zZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfZG5sZF9mdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2luaXQuYz01OTg9bXdpZmlleF9zaHV0ZG93bl9kcnYoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvaW5pdC5jLTY2NS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9pbml0LmM6NjY2OmludCBtd2lmaWV4X2RubGRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9pbml0LmMtNjY3LVx0XHQgICAgc3RydWN0IG13aWZpZXhfZndfaW1hZ2UgKnBtZncpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2luaXQuYy03MTctfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2luaXQuYzo3MTg6RVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9kbmxkX2Z3KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTUzNT1zdGF0aWMgaW50IF9td2lmaWV4X2Z3X2RwYyhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTU4LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6NTU5Olx0XHRyZXQgPSBtd2lmaWV4X2RubGRfZncoYWRhcHRlciwgXHUwMDI2ZncpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy01NjAtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMDYwPXZvaWQgbXdpZmlleF9zaHV0ZG93bl9kcnYoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTEwNjEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjEwNjI6aW50IG13aWZpZXhfZG5sZF9mdyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICopO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMDYzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmM9MTAyNT1zdGF0aWMgaW50IG13aWZpZXhfc2Rpb19kbmxkX2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xMDMxLVx0c2Rpb19jbGFpbV9ob3N0KGNhcmQtXHUwMDNlZnVuYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjEwMzI6XHRyZXQgPSBtd2lmaWV4X2RubGRfZncoYWRhcHRlciwgZncpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xMDMzLVx0c2Rpb19yZWxlYXNlX2hvc3QoY2FyZC1cdTAwM2VmdW5jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZpcm13YXJlIERvd25sb2FkIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBtd2lmaWV4X3VzYmAgbW9kdWxlLCBhbmQgc29tZXRoaW5nIGp1c3QgY2xpY2tlZC4gSXQmIzM5O3MgZ290IGl0cyBvd24gZGVkaWNhdGVkIGBkbmxkX2Z3YCBjYWxsYmFjayBkZWZpbmVkLiBUaGF0JiMzOTtzIGtleSwgaXNuJiMzOTt0IGl0PyBNZWFucyB3ZSYjMzk7cmUgbm90IGp1c3QgcmVseWluZyBvbiBzb21lIGdlbmVyaWMgZnJhbWV3b3JrIGZvciB0aGUgZmlybXdhcmUgZG93bmxvYWQ7IGl0JiMzOTtzIGdvdCBhIGN1c3RvbS10YWlsb3JlZCBwcm9jZXNzIHNwZWNpZmljYWxseSBmb3IgdGhlIFVTQiBpbnRlcmZhY2UuIFRoYXQgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIGNvbnNpZGVyaW5nIHRoZSBudWFuY2VzIGludm9sdmVkIHdpdGggVVNCIGRldmljZSBpbml0aWFsaXphdGlvbiwgZW51bWVyYXRpb24sIGFuZCBkYXRhIHRyYW5zZmVyLiBVbmRlcnN0YW5kaW5nICp0aGF0KiBjYWxsYmFjayBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIFVTQiBmaXJtd2FyZSB1cGxvYWQgZmxvdy4gV2UmIzM5O2xsIGhhdmUgdG8gZGlnIGRlZXBlciwgc2VlIHdoYXQgc29ydCBvZiBzcGVjaWZpYyBoYW5kbGluZyBpdCBwZXJmb3JtcywgaWYgdGhlcmUmIzM5O3MgYW55IGNydWNpYWwgZXJyb3IgY2hlY2tpbmcgdGhlcmUsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHN0YWdlcyBvZiB0aGUgZG93bmxvYWQuIFRoaXMgbmVlZHMgdG8gYmUgdGhlIGp1bXBpbmcgb2ZmIHBvaW50IGZvciB0aGUgVVNCIGZpcm13YXJlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbmxkX2Z3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz0xMzcwPXN0YXRpYyBpbnQgbXdpZmlleF9wcm9nX2Z3X3dfaGVscGVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1MDYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MTUwNzpzdGF0aWMgaW50IG13aWZpZXhfdXNiX2RubGRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTA4LVx0XHRcdHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICpmdylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM9MTU4ND1zdGF0aWMgY29uc3Qgc3RydWN0IG13aWZpZXhfaWZfb3BzIHVzYl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1OTAtXHQvKiBVU0Igc3BlY2lmaWMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzoxNTkxOlx0LmRubGRfZncgPVx0XHRtd2lmaWV4X3VzYl9kbmxkX2Z3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1OTItXHQuY21kcnNwX2NvbXBsZXRlID1cdG13aWZpZXhfdXNiX2NtZF9ldmVudF9jb21wbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbXdpZmlleF91c2JfZG5sZF9md2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgbXdpZmlleF91c2JfZG5sZF9md2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gZmlybXdhcmUgZG93bmxvYWQgb3ZlciBVU0IsIGxpa2VseSBmb3IgYSBNYXJ2ZWxsIFdpLUZpIGNoaXBzZXQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2QgaW1tZWRpYXRlbHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYXJndW1lbnRzIGl0IHRha2VzLiBBcmUgd2UgcGFzc2luZyBhIGZpcm13YXJlIGltYWdlLCBkZXNjcmlwdG9yLCBvciBzb21lIG90aGVyIGNvbnRyb2wgc3RydWN0dXJlPyBBcmUgdGhlcmUgYW55IHNpemUgbGltaXRzIGJlaW5nIGNoZWNrZWQ/IFdoYXQgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZD8KCk15IG1pbmQgaXMgYWxyZWFkeSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGlzc3Vlcy4gSXMgdGhlcmUgcHJvcGVyIGVycm9yIGNoZWNraW5nIGZvciBVU0IgdHJhbnNmZXJzPyBDb3VsZCB3ZSBiZSB2dWxuZXJhYmxlIHRvIGJ1ZmZlciBvdmVyZmxvd3MgaWYgdGhlIGZpcm13YXJlIGltYWdlIGlzIG1hbGljaW91cyBvciBjb3JydXB0ZWQ/IFdoYXQmIzM5O3MgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MsIGlmIGFueSwgZm9yIHRoZSBkb3dubG9hZGVkIGZpcm13YXJlPyBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIHRvIHByZXZlbnQgZG93bmdyYWRlIGF0dGFja3M/CgpJJiMzOTtkIHF1aWNrbHkgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgVVNCIHRyYW5zZmVyIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQsIGxpa2UgYHVzYl9idWxrX21zZ2Agb3IgYHVzYl9jb250cm9sX21zZ2AuIEkmIzM5O2Qgd2FudCB0byBjb25maXJtIHRoYXQgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjb3JyZWN0bHkuIEFueSBkYXRhIHN0YWdpbmcsIERNQSB1c2FnZSwgb3IgaW50ZXJydXB0IGhhbmRsaW5nIHdvdWxkIHdhcnJhbnQgY2xvc2VyIHNjcnV0aW55LiBBbmQsIG9mIGNvdXJzZSwgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIGNhbGwuCgpGaW5hbGx5LCBJ4oCZZCBmb2N1cyBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24uIERvZXMgYSBzdWNjZXNzIGluZGljYXRlIHRoYXQgdGhlIGRyaXZlciBoYXMgY29tcGxldGVseSB2ZXJpZmllZCBhbmQgc3RhcnRlZCB0aGUgbmV3IGZpcm13YXJlPyBPciBkb2VzIGl0IHJlcHJlc2VudCBhbiBpbmNvbXBsZXRlIHN0YXRlPyBXaGF0IGtpbmQgb2YgbG9nZ2luZyBhbmQgZGVidWdnaW5nIGNhcGFiaWxpdGllcyBhcmUgYXZhaWxhYmxlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nPyBCYXNpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyByb2J1c3QsIHNlY3VyZSwgYW5kIHJlbGlhYmxlIHRoaXMgZmlybXdhcmUgZG93bmxvYWQgcHJvY2VzcyBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDc6XHRzdGF0aWMgaW50IG13aWZpZXhfdXNiX2RubGRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbjE1MDg6XHRcdFx0XHRzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSAqZncpXG4xNTA5Olx0e1xuMTUxMDpcdFx0aW50IHJldDtcbjE1MTE6XHRcdHN0cnVjdCB1c2JfY2FyZF9yZWMgKmNhcmQgPSAoc3RydWN0IHVzYl9jYXJkX3JlYyAqKWFkYXB0ZXItXHUwMDNlY2FyZDtcbjE1MTI6XHRcbjE1MTM6XHRcdGlmIChjYXJkLVx1MDAzZXVzYl9ib290X3N0YXRlID09IFVTQjhYWFhfRldfRE5MRCkge1xuMTUxNDpcdFx0XHRyZXQgPSBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXIoYWRhcHRlciwgZncpO1xuMTUxNTpcdFx0XHRpZiAocmV0KVxuMTUxNjpcdFx0XHRcdHJldHVybiAtMTtcbjE1MTc6XHRcbjE1MTg6XHRcdFx0LyogQm9vdCBzdGF0ZSBjaGFuZ2VzIGFmdGVyIHN1Y2Nlc3NmdWwgZmlybXdhcmUgZG93bmxvYWQgKi9cbjE1MTk6XHRcdFx0aWYgKGNhcmQtXHUwMDNldXNiX2Jvb3Rfc3RhdGUgPT0gVVNCOFhYWF9GV19ETkxEKVxuMTUyMDpcdFx0XHRcdHJldHVybiAtMTtcbjE1MjE6XHRcdH1cbjE1MjI6XHRcbjE1MjM6XHRcdHJldCA9IG13aWZpZXhfdXNiX3J4X2luaXQoYWRhcHRlcik7XG4xNTI0Olx0XHRpZiAoIXJldClcbjE1MjU6XHRcdFx0cmV0ID0gbXdpZmlleF91c2JfdHhfaW5pdChhZGFwdGVyKTtcbjE1MjY6XHRcbjE1Mjc6XHRcdHJldHVybiByZXQ7XG4xNTI4Olx0fVxuMTUyOTpcdFxuMTUzMDpcdHN0YXRpYyB2b2lkIG13aWZpZXhfc3VibWl0X3J4X3VyYihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCB1OCBlcClcbjE1MzE6XHR7XG4xNTMyOlx0XHRzdHJ1Y3QgdXNiX2NhcmRfcmVjICpjYXJkID0gKHN0cnVjdCB1c2JfY2FyZF9yZWMgKilhZGFwdGVyLVx1MDAzZWNhcmQ7XG4xNTMzOlx0XG4xNTM0Olx0XHRza2JfcHVzaChjYXJkLVx1MDAzZXJ4X2NtZC5za2IsIElOVEZfSEVBREVSX0xFTik7XG4xNTM1Olx0XHRpZiAoKGVwID09IGNhcmQtXHUwMDNlcnhfY21kX2VwKSBcdTAwMjZcdTAwMjZcbjE1MzY6XHRcdCAgICAoIWF0b21pY19yZWFkKFx1MDAyNmNhcmQtXHUwMDNlcnhfY21kX3VyYl9wZW5kaW5nKSkpXG4xNTM3Olx0XHRcdG13aWZpZXhfdXNiX3N1Ym1pdF9yeF91cmIoXHUwMDI2Y2FyZC1cdTAwM2VyeF9jbWQsXG4xNTM4Olx0XHRcdFx0XHRcdCAgTVdJRklFWF9SWF9DTURfQlVGX1NJWkUpO1xuMTUzOTpcdFxuMTU0MDpcdFx0cmV0dXJuO1xuMTU0MTpcdH1cbjE1NDI6XHRcbjE1NDM6XHRzdGF0aWMgaW50IG13aWZpZXhfdXNiX2NtZF9ldmVudF9jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuMTU0NDpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xNTQ1Olx0e1xuMTU0NjpcdFx0bXdpZmlleF9zdWJtaXRfcnhfdXJiKGFkYXB0ZXIsIE1XSUZJRVhfVVNCX0VQX0NNRF9FVkVOVCk7XG4xNTQ3Olx0XG4xNTQ4Olx0XHRyZXR1cm4gMDtcbjE1NDk6XHR9XG4xNTUwOlx0XG4xNTUxOlx0LyogVGhpcyBmdW5jdGlvbiB3YWtlcyB1cCB0aGUgY2FyZC4gKi9cbjE1NTI6XHRzdGF0aWMgaW50IG13aWZpZXhfcG1fd2FrZXVwX2NhcmQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbjE1NTM6XHR7XG4xNTU0Olx0XHQvKiBTaW11bGF0aW9uIG9mIEhTX0FXQUtFIGV2ZW50ICovXG4xNTU1Olx0XHRhZGFwdGVyLVx1MDAzZXBtX3dha2V1cF9md190cnkgPSBmYWxzZTtcbjE1NTY6XHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZhZGFwdGVyLVx1MDAzZXdha2V1cF90aW1lcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjIwCgkJCQkJCQlvdXRwdXQ6IDExNgoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbXdpZmlleF9wcm9nX2Z3X3dfaGVscGVyYCBmdW5jdGlvbiBjYWxsLiBUaGUgZ29hbCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byB0ZXN0IGl0IHdpdGggYSAmIzM0O2Zha2UmIzM0OyBmaXJtd2FyZS4gTm93LCBsZXQmIzM5O3Mgc2VlLi4uIGBtd2lmaWV4X3VzYl9kbmxkX2Z3YCBpcyBnb2luZyB0byByZXR1cm4gLTEgaWYgYGNhcmQtJmd0O3VzYl9ib290X3N0YXRlYCBpcyBlcXVhbCB0byBgVVNCOFhYWF9GV19ETkxEYCBhZnRlciBydW5uaW5nIGBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXJgLCB3aGljaCBtZWFucyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIGZpcm13YXJlIHRvIHRoZSBkZXZpY2Ugb3ZlciBVU0IuIFRoZSBwcm9ibGVtLCBhcyBhbHdheXMgd2l0aCB0aGlzIGtpbmQgb2YgdGhpbmcsIGlzIHRoYXQgc3VjY2Vzc2Z1bCBleGVjdXRpb24gcmVsaWVzIG9uIHRoZSB0YXJnZXQgZGV2aWNlIHJlc3BvbmRpbmcgY29ycmVjdGx5LCB3aGljaCBtaWdodCBub3QgaGFwcGVuLgoKVGhlIHJlYWxseSBiaWcgaXNzdWUgaGVyZSBpcyB0aGF0IFN5emthbGxlcuKAmXMgVVNCIGZ1enplciBpcyB0aHJvd2luZyByYW5kb20gcmVzcG9uc2VzIGF0IHRoaXMgdGhpbmcuIFRoZSBjaGFuY2VzIG9mIGl0ICphY3R1YWxseSogZW11bGF0aW5nIGEgc3VjY2Vzc2Z1bCBmaXJtd2FyZSBkb3dubG9hZCBhbmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoaXMgc3BlY2lmaWMgTWFydmVsbCBXaUZpIGNoaXAgYXJlIGFzdHJvbm9taWNhbGx5IGxvdy4gV2UgYXJlIGRlYWxpbmcgd2l0aCBhIGNvbXBsZXggaGFyZHdhcmUgaW50ZXJhY3Rpb24gdGhhdCByZWxpZXMgb24gdmVyeSBzcGVjaWZpYyByZXNwb25zZXMgYW5kIHN0YXRlIGNoYW5nZXMuCgpQbHVzLCBJJiMzOTt2ZSBzZWVuIHRoZSBjb2RlOiB0aGUgYWN0dWFsIGNoYW5nZSBpdHNlbGYgaXMgcmlkaWN1bG91c2x5IHRyaXZpYWwuIEl0JiMzOTtzIGp1c3QgYSBzaW5nbGUgYm9vbGVhbiBjaGVjayBvZiBhIGRldmljZSBwcm9wZXJ0eToKCmBgYGMKCQkJCWlmIChjb3VudHJ5X2NvZGUgJmFtcDsmYW1wOwoJCQkJICAgICFkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGFkYXB0ZXItJmd0O2RldiwKCQkJCQkJCSAgICAgICAmIzM0O21hcnZlbGwsaW52YWxpZC1yZWctaGludC1pbi1yb20mIzM0OykgJmFtcDsmYW1wOwoJCQkJICAgIHJlZ3VsYXRvcnlfaGludCh3aXBoeSwgY291bnRyeV9jb2RlKSkKYGBgCgpUaGlzIGlzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IG9mIGF0dGVtcHRpbmcgdG8gZnV6ei4gVGhlIHJldHVybiBpcyBnb2luZyB0byBiZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0IHRoaXMgY2hhbmdlIGlzIGV4dHJlbWVseSB0cml2aWFsIOKAkyBhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9uIGEgZGV2aWNlIHByb3BlcnR5IOKAkyBhbmQgaXQmIzM5O3MgYnVyaWVkIGluIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGluaXRpYWxpemF0aW9uIHBhdGggdGhhdCByZXF1aXJlcyBhICpzdWNjZXNzZnVsKiBmaXJtd2FyZSBsb2FkIGFuZCBjb21wbGV4IGRldmljZSBpbnRlcmFjdGlvbi4gVGhpcyBpcyBiYXNpY2FsbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IGVpdGhlciBzcGVjaWZpYyBoYXJkd2FyZSBvciBhbiBleHRyZW1lbHkgc3BlY2lhbGl6ZWQgZW11bGF0b3IuIExldCYjMzk7cyBtb3ZlIG9uIHRvIHNvbWV0aGluZyB0aGF0IG9mZmVycyBhIGJldHRlciByZXR1cm4gb24gaW52ZXN0bWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSAoYSBzaW5nbGUgYm9vbGVhbiBjaGVjayBvZiBhIGRldmljZSBwcm9wZXJ0eSB0byBza2lwIGEgcmVndWxhdG9yeSBoaW50KSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgTWFydmVsbCBtd2lmaWV4IHdpcmVsZXNzIGRyaXZlci4gUmVhY2hpbmcgdGhpcyBjb2RlIHJlcXVpcmVzIHN1Y2Nlc3NmdWwgZmlybXdhcmUgbG9hZGluZyBhbmQgY29tcGxleCBkZXZpY2UgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gYWNoaWV2ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIGdlbmVyaWMgVVNCIGVtdWxhdGlvbi4gR2l2ZW4gdGhlIHRyaXZpYWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyB1bnJlYWNoYWJpbGl0eSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSAoYSBzaW5nbGUgYm9vbGVhbiBjaGVjayBvZiBhIGRldmljZSBwcm9wZXJ0eSB0byBza2lwIGEgcmVndWxhdG9yeSBoaW50KSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgTWFydmVsbCBtd2lmaWV4IHdpcmVsZXNzIGRyaXZlci4gUmVhY2hpbmcgdGhpcyBjb2RlIHJlcXVpcmVzIHN1Y2Nlc3NmdWwgZmlybXdhcmUgbG9hZGluZyBhbmQgY29tcGxleCBkZXZpY2UgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gYWNoaWV2ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIGdlbmVyaWMgVVNCIGVtdWxhdGlvbi4gR2l2ZW4gdGhlIHRyaXZpYWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyB1bnJlYWNoYWJpbGl0eSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTc6NDUuNjA3MzU5MDA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxMTU3OTYwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSAoYSBzaW5nbGUgYm9vbGVhbiBjaGVjayBvZiBhIGRldmljZSBwcm9wZXJ0eSB0byBza2lwIGEgcmVndWxhdG9yeSBoaW50KSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgTWFydmVsbCBtd2lmaWV4IHdpcmVsZXNzIGRyaXZlci4gUmVhY2hpbmcgdGhpcyBjb2RlIHJlcXVpcmVzIHN1Y2Nlc3NmdWwgZmlybXdhcmUgbG9hZGluZyBhbmQgY29tcGxleCBkZXZpY2UgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gYWNoaWV2ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIGdlbmVyaWMgVVNCIGVtdWxhdGlvbi4gR2l2ZW4gdGhlIHRyaXZpYWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyB1bnJlYWNoYWJpbGl0eSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxNzo0NS42MDczNjM3NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzEzNjAwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMDE0NTI2YWZjOTBmZTFiZDZiOWYwNGI5YjYxZjY3ZGY1YzIyODkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDI3IDE4OjE3OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbFxcbmluZGV4IDkzMGI3MDBiNzNkMDAuLjlmOTA1ZWY1YzJjMDcgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sXFxuQEAgLTU5LDYgKzU5LDEyIEBAIHByb3BlcnRpZXM6XFxuICAgICBkZXNjcmlwdGlvbjogQ2FsaWJyYXRpb24gZGF0YSBmb3Igc3ViLWJhbmQgMyBpbiB0aGUgNUdIeiBiYW5kLlxcbiAgICAgbWF4SXRlbXM6IDUwMlxcbiBcXG4rICBtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tOlxcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvZmxhZ1xcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIFRoZSByZWd1bGF0b3J5IGhpbnQgaW4gUk9NIGNvbmZsaWN0cyB3aXRoIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uXFxuKyAgICAgIEl0IHNob3VsZCBiZSBpZ25vcmVkLCBzbyB0aGUgcGxhdGZvcm0gcmVndWxhdG9yeSBkb21haW4gY2FuIGJlIHVzZWQuXFxuK1xcbiAgIG1hcnZlbGwsd2FrZXVwLXBpbjpcXG4gICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxcbiAgICAgZGVzY3JpcHRpb246XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c1xcbmluZGV4IDRhYjQ1ZjI5NGRlMjIuLjJiZjI5OTgxYTAzMTMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzXFxuKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzXFxuQEAgLTE2NSw2ICsxNjUsMTUgQEAgXFx1MDAyNnNkaGNpIHtcXG4gXFx0d3AtaW52ZXJ0ZWQ7XFxuIFxcdGJ1cy13aWR0aCA9IFxcdTAwM2M4XFx1MDAzZTtcXG4gXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbitcXG4rXFx0I2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcdCNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rXFx0d2lmaUAxIHtcXG4rXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJtYXJ2ZWxsLHNkODg5N1xcXCI7XFxuK1xcdFxcdHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0bWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbTtcXG4rXFx0fTtcXG4gfTtcXG4gXFxuIFxcdTAwMjZ1c2IzXzFfdmJ1cyB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcXG5pbmRleCA3YTFiYTMyZjFmYjM2Li4yOTM4NzYzOTdiNjcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcXG5AQCAtNDg5Nyw3ICs0ODk3LDE0IEBAIGludCBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcdFxcdFxcdFxcdGNvdW50cnlfY29kZSA9XFxuIFxcdFxcdFxcdFxcdFxcdG13aWZpZXhfMTFkX2NvZGVfMl9yZWdpb24oXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXJlZ2lvbl9jb2RlKTtcXG4rXFxuK1xcdFxcdFxcdFxcdC8qIElmIHRoZSByZWcgaGludCBpbiBST00gY29uZmxpY3RzIHdpdGggcGxhdGZvcm1cXG4rXFx0XFx0XFx0XFx0ICogY29uZmlndXJhdGlvbiwgaXQgc2hvdWxkIGJlIGlnbm9yZWQsIHNvIHRoZVxcbitcXHRcXHRcXHRcXHQgKiBwbGF0Zm9ybSByZWd1bGF0b3J5IGRvbWFpbiBjYW4gYmUgdXNlZC5cXG4rXFx0XFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdFxcdGlmIChjb3VudHJ5X2NvZGUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICFkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGFkYXB0ZXItXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tXFxcIikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgIHJlZ3VsYXRvcnlfaGludCh3aXBoeSwgY291bnRyeV9jb2RlKSlcXG4gXFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgRVJST1IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwicmVndWxhdG9yeV9oaW50KCkgZmFpbGVkXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTc6NDYuOTM5NDM3NjQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzc3ODM3MDYyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSB0cml2aWFsIGZ1bmN0aW9uYWwgY2hhbmdlIChhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9mIGEgZGV2aWNlIHByb3BlcnR5IHRvIHNraXAgYSByZWd1bGF0b3J5IGhpbnQpIGluIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBNYXJ2ZWxsIG13aWZpZXggd2lyZWxlc3MgZHJpdmVyLiBSZWFjaGluZyB0aGlzIGNvZGUgcmVxdWlyZXMgc3VjY2Vzc2Z1bCBmaXJtd2FyZSBsb2FkaW5nIGFuZCBjb21wbGV4IGRldmljZSBpbnRlcmFjdGlvbiwgd2hpY2ggaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB0byBhY2hpZXZlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgZ2VuZXJpYyBVU0IgZW11bGF0aW9uLiBHaXZlbiB0aGUgdHJpdmlhbCBuYXR1cmUgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIHVucmVhY2hhYmlsaXR5LCBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEwMTQ1MjZhZmM5MGZlMWJkNmI5ZjA0YjliNjFmNjdkZjVjMjI4OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxODoxNzo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbFxuaW5kZXggOTMwYjcwMGI3M2QwMC4uOWY5MDVlZjVjMmMwNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sXG5AQCAtNTksNiArNTksMTIgQEAgcHJvcGVydGllczpcbiAgICAgZGVzY3JpcHRpb246IENhbGlicmF0aW9uIGRhdGEgZm9yIHN1Yi1iYW5kIDMgaW4gdGhlIDVHSHogYmFuZC5cbiAgICAgbWF4SXRlbXM6IDUwMlxuIFxuKyAgbWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbTpcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvZmxhZ1xuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBUaGUgcmVndWxhdG9yeSBoaW50IGluIFJPTSBjb25mbGljdHMgd2l0aCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLlxuKyAgICAgIEl0IHNob3VsZCBiZSBpZ25vcmVkLCBzbyB0aGUgcGxhdGZvcm0gcmVndWxhdG9yeSBkb21haW4gY2FuIGJlIHVzZWQuXG4rXG4gICBtYXJ2ZWxsLHdha2V1cC1waW46XG4gICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuICAgICBkZXNjcmlwdGlvbjpcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zODUtbGlua3N5cy1yYW5nby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zODUtbGlua3N5cy1yYW5nby5kdHNcbmluZGV4IDRhYjQ1ZjI5NGRlMjIuLjJiZjI5OTgxYTAzMTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zODUtbGlua3N5cy1yYW5nby5kdHNcbisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c1xuQEAgLTE2NSw2ICsxNjUsMTUgQEAgXHUwMDI2c2RoY2kge1xuIFx0d3AtaW52ZXJ0ZWQ7XG4gXHRidXMtd2lkdGggPSBcdTAwM2M4XHUwMDNlO1xuIFx0c3RhdHVzID0gXCJva2F5XCI7XG4rXG4rXHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rXHR3aWZpQDEge1xuK1x0XHRjb21wYXRpYmxlID0gXCJtYXJ2ZWxsLHNkODg5N1wiO1xuK1x0XHRyZWcgPSBcdTAwM2MxXHUwMDNlO1xuK1x0XHRtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tO1xuK1x0fTtcbiB9O1xuIFxuIFx1MDAyNnVzYjNfMV92YnVzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXG5pbmRleCA3YTFiYTMyZjFmYjM2Li4yOTM4NzYzOTdiNjcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXG5AQCAtNDg5Nyw3ICs0ODk3LDE0IEBAIGludCBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXHRcdFx0XHRjb3VudHJ5X2NvZGUgPVxuIFx0XHRcdFx0XHRtd2lmaWV4XzExZF9jb2RlXzJfcmVnaW9uKFxuIFx0XHRcdFx0XHRcdGFkYXB0ZXItXHUwMDNlcmVnaW9uX2NvZGUpO1xuK1xuK1x0XHRcdFx0LyogSWYgdGhlIHJlZyBoaW50IGluIFJPTSBjb25mbGljdHMgd2l0aCBwbGF0Zm9ybVxuK1x0XHRcdFx0ICogY29uZmlndXJhdGlvbiwgaXQgc2hvdWxkIGJlIGlnbm9yZWQsIHNvIHRoZVxuK1x0XHRcdFx0ICogcGxhdGZvcm0gcmVndWxhdG9yeSBkb21haW4gY2FuIGJlIHVzZWQuXG4rXHRcdFx0XHQgKi9cbiBcdFx0XHRcdGlmIChjb3VudHJ5X2NvZGUgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgIWRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woYWRhcHRlci1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgXCJtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tXCIpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIHJlZ3VsYXRvcnlfaGludCh3aXBoeSwgY291bnRyeV9jb2RlKSlcbiBcdFx0XHRcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUixcbiBcdFx0XHRcdFx0XHQgICAgXCJyZWd1bGF0b3J5X2hpbnQoKSBmYWlsZWRcXG5cIik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxNzo0Ni45Mzk0Mzk1ODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjY0NTE3NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBNYXJ2ZWxsIFdpRmkgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBhIGZldyBmaWxlcy4gT25lIGlzIGEgRGV2aWNlIFRyZWUgYmluZGluZyAoYG1hcnZlbGwsc2Q4Nzg3LnlhbWxgKSwgYW5vdGhlciBpcyBhIERldmljZSBUcmVlIGZvciBhIHNwZWNpZmljIExpbmtzeXMgZGV2aWNlIChgYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c2ApLCBhbmQgdGhlbiB0aGUgcmVhbCBtZWF0IG9mIGl0LCBhIGNoYW5nZSBpbiB0aGUgYG13aWZpZXhgIGRyaXZlciAoYGNmZzgwMjExLmNgKS4gVGhlIGNoYW5nZSBpbiBgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMWAgaGFzIHRoaXMgY29uZGl0aW9uYWwgY2hlY2sgaW52b2x2aW5nIGEgYGNvdW50cnlfY29kZWAgYW5kIGEgZGV2aWNlIHByb3BlcnR5LiBJdCBjYWxscyBgcmVndWxhdG9yeV9oaW50YCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaG93IGxpa2VseSBpcyB0aGlzIHRvIGFjdHVhbGx5IHRyaWdnZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhpcyBpcyBhIE1hcnZlbGwgd2lyZWxlc3MgZHJpdmVyLCB0YXJnZXRpbmcgU0RJTywgUENJZSwgYW5kIFVTQiBXaUZpIGNhcmRzLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIEkga25vdyBgbXdpZmlleGAgKmRvZXMqIGhhdmUgYSBVU0IgZHJpdmVyIChgdXNiLmNgKS4gT2theSwgc28gdGhhdCBjaGFuZ2VzIHRoaW5ncy4gQ2FuIHdlIGxldmVyYWdlIHNvbWV0aGluZyBsaWtlIGEgVVNCIGdhZGdldCBvciBlbXVsYXRlZCBkZXZpY2UgdG8gaGl0IHRoYXQ/IE5vLCB0aGF0IGlzIGEgaG9zdCBkcml2ZXIsIG5vdCBhIGRldmljZSBkcml2ZXIuIEhvbGQgb24uLi4gU3l6a2FsbGVyISBSaWdodCwgU3l6a2FsbGVyICpjYW4qIGVtdWxhdGUgVVNCIGRldmljZXMgdXNpbmcgcmF3IGdhZGdldCwgdmhjaS4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBwcm9iZSBgbXdpZmlleF91c2JgIHdpdGggc3l6a2FsbGVyLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyBgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMWAgcmVhY2hhYmxlPyBDaGVja2luZyB0aGUgc291cmNlIGl0IGlzIGNhbGxlZCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBTbywgaXQgc2hvdWxkIGJlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGNmZzgwMjExLmNgLCBhbmQgdGhhdCdzIHRoZSBjb3JlLiBMZXQncyBtYWtlIHN1cmUgYG13aWZpZXhfdXNiYCBpcyBlbmFibGVkIGluIHRoZSBjb25maWc7IHRoYXQgd291bGQgYmUgdGhlIGZpcnN0IGh1cmRsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE3OjU0LjIwMzk2MDE2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUzNTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM9NDY2OD1pbnQgbXdpZmlleF9pbml0X2NoYW5uZWxfc2Nhbl9nYXAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ2OTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM6NDY5ODppbnQgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ2OTkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmgtMTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmg6MTU6aW50IG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuaC0xNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9NTM1PXN0YXRpYyBpbnQgX213aWZpZXhfZndfZHBjKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU4Ni1cXHRpZiAoIWFkYXB0ZXItXFx1MDAzZXdpcGh5KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo1ODc6XFx0XFx0aWYgKG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoYWRhcHRlcikpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU4OC1cXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTc6NTQuMjQ5NDk5NjAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU1NjM4MTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG13aWZpZXggRmlybXdhcmUgTG9hZGluZyBQcm9jZXNzKipcblxuT2theSwgc28gYF9td2lmaWV4X2Z3X2RwY2AgdHJpZ2dlcnMgYG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTFgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlbGxzIG1lIHRoZSBmaXJtd2FyZSBsb2FkaW5nIGlzIGhhcHBlbmluZyBiZWZvcmUgdGhpcyBwb2ludC4gQ2FuIHN5emthbGxlciBhY3R1YWxseSAqbG9hZCogdGhlIGZpcm13YXJlIGZvciBtd2lmaWV4LCB0aG91Z2g/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gc2F5IG5vOyBpdCB1c3VhbGx5IHJlbGllcyBvbiB0aGUgZmlybXdhcmUgZWl0aGVyIGJlaW5nIHByZS1sb2FkZWQgYXMgcGFydCBvZiB0aGUgc3lzdGVtIGltYWdlIChsaWtlIHRob3NlIGluIGxpbnV4LWZpcm13YXJlKSBvciB0aHJvdWdoIHNvbWUgZmF1bHQgaW5qZWN0aW9uIHNldHVwLiBgcmVxdWVzdF9maXJtd2FyZWAgY291bGQgYmUgdGhlIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlLCBidXQgc3l6a2FsbGVyIGRvZXNuJ3QgZ2VuZXJhbGx5IGhhbmRsZSB0aGUgcGh5c2ljYWwgZmlybXdhcmUgZmlsZXMgZGlyZWN0bHksIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZmFrZWQgZmlybXdhcmUgb3IgZmF1bHQgaW5qZWN0aW9uIHNjZW5hcmlvLiBIbW1tLCBidXQgd2FpdC4uLiBpZiB0aGlzIGlzIGEgVVNCIGRyaXZlciwgdGhpbmdzIG1pZ2h0IGJlIGRpZmZlcmVudCwgcmlnaHQ/IFRoYXQgY291bGQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIHRlc3RpbmcgYXZlbnVlcy4gQmVzdCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgbXdpZmlleCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0J3Mgc2V0IHVwIGFuZCBpZiB0aGVyZSBhcmUgc3BlY2lmaWMgY29tcGlsZSB0aW1lIG9wdGlvbnMgdGhhdCB3b3VsZCBjaGFuZ2UgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxODowMS44MDU4ODI2ODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNDUzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1XSUZJRVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI6Y29uZmlnIE1XSUZJRVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6MTI6Y29uZmlnIE1XSUZJRVhfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI1OmNvbmZpZyBNV0lGSUVYX1BDSUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjM3OmNvbmZpZyBNV0lGSUVYX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6MDEuODUyMDMxNTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTUxOTUyMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYWRkaXRpb246IGEgY2hlY2sgZm9yIGEgZGV2aWNlIHByb3BlcnR5IGNhbGxlZCBgbWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbWAuIEVzc2VudGlhbGx5LCBpdCdzIGEgbWlub3IgZnVuY3Rpb25hbCB0d2VhayDigJMgaXQgaWdub3JlcyBhIHJlZ3VsYXRvcnkgaGludCBpZiB0aGlzIHByb3BlcnR5IGlzIHNldC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz9cblxuSG9uZXN0bHksIGl0IHNlZW1zIGxpa2UgYSByZWFsIGxvbmcgc2hvdC4gVGhlIGNoYW5nZSBpdHNlbGYgaXMganVzdCBhIHNpbmdsZSBgaWZgIHN0YXRlbWVudCB0aGF0IGNoZWNrcyBhIGJvb2xlYW4gcHJvcGVydHkuIElmIHRoYXQgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUsIGl0IHNraXBzIHRoZSBgcmVndWxhdG9yeV9oaW50KHdpcGh5LCBjb3VudHJ5X2NvZGUpYCBjYWxsLiBUaGlzIGlzIGluY3JlZGlibHkgdHJpdmlhbC4gV2UncmUgbm90IHRhbGtpbmcgYWJvdXQgaW50cm9kdWNpbmcgY29tcGxleCBsb2dpYywgYW55IG5ldyBtZW1vcnkgbWFuYWdlbWVudCwgb3IgY29uY3VycmVuY3kgaXNzdWVzLiBJdCdzIGxpdGVyYWxseSBqdXN0IGEgZmxhZyB0byBieXBhc3MgYSBoaW50LlxuXG5BbmQgb24gdG9wIG9mIHRoYXQsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBNYXJ2ZWxsIFdpRmkgZGV2aWNlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHBhdGguIFdoaWxlIEkgc3VwcG9zZSBpdCAqY291bGQqIGJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIHRoaXMgcGFydGljdWxhciBjaGFuZ2UgaXRzZWxmIGlzIHNvIHNpbXBsZSB0aGF0IEknbSBoaWdobHkgZG91YnRmdWwgdGhlcmUgYXJlIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIG9yIGFueSBvdGhlciBpbnRlcmVzdGluZyBsb2dpYyBlcnJvcnMgd29ydGggc3BlbmRpbmcgdGltZSBvbi5cblxuSGFuZyBvbiBhIHNlY29uZC4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5LCDigJxSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5z4oCmIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZeKApuKAnSBJcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVG8gZ2V0IHRvIGBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExYCwgd2hpY2ggaXMgd2hlcmUgdGhpcyBjaGVjayByZXNpZGVzLCB0aGUgZHJpdmVyIG5lZWRzIHRvIGxvYWQgZmlybXdhcmUuIFRoYXQncyBhIGdvb2QgcXVlc3Rpb24uIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoaXMgZmlybXdhcmUgbG9hZCBwYXRoOyBsZXQncyBjaGVjayBgX213aWZpZXhfZndfZHBjYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxODowOS4wMDM5ODYxMTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3MjkxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVxdWVzdF9maXJtd2FyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9NTM1PXN0YXRpYyBpbnQgX213aWZpZXhfZndfZHBjKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU2Ny1cXHRpZiAoY2FsX2RhdGFfY2ZnKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo1Njg6XFx0XFx0aWYgKChyZXF1ZXN0X2Zpcm13YXJlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VjYWxfZGF0YSwgY2FsX2RhdGFfY2ZnLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTY5LVxcdFxcdFxcdFxcdCAgICAgIGFkYXB0ZXItXFx1MDAzZWRldikpIFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU3MC1cXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjU3MTpcXHRcXHRcXHRcXHQgICAgXFxcIkNhbCBkYXRhIHJlcXVlc3RfZmlybXdhcmUoKSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTcyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9Njk4PXN0YXRpYyBpbnQgbXdpZmlleF9pbml0X2h3X2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTcxMC1cXHRpZiAocmVxX2Z3X25vd2FpdCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6NzExOlxcdFxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCAxLCBhZGFwdGVyLVxcdTAwM2Vmd19uYW1lLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNzEyLVxcdFxcdFxcdFxcdFxcdCAgICAgIGFkYXB0ZXItXFx1MDAzZWRldiwgR0ZQX0tFUk5FTCwgYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNzE0LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo3MTU6XFx0XFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlZmlybXdhcmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy03MTYtXFx0XFx0XFx0XFx0ICAgICAgIGFkYXB0ZXItXFx1MDAzZWZ3X25hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTcyMC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjcyMTpcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUiwgXFxcInJlcXVlc3RfZmlybXdhcmUlcyBlcnJvciAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTcyMi1cXHRcXHRcXHQgICAgcmVxX2Z3X25vd2FpdCA/IFxcXCJfbm93YWl0XFxcIiA6IFxcXCJcXFwiLCByZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jPTIwNT1zdGF0aWMgaW50IG13aWZpZXhfcmVxdWVzdF9yZ3Bvd2VyX3RhYmxlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMjI5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYzoyMzA6XFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJncG93ZXJfZGF0YSwgcmdwb3dlcl90YWJsZV9uYW1lLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0yMzEtXFx0XFx0XFx0XFx0ICAgICAgYWRhcHRlci1cXHUwMDNlZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6MDkuMDU4NzE4MzI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIwMjM1NjczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRmlybXdhcmUgTG9hZGluZyBJc3N1ZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbXdpZmlleGAgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBlcnJvciBzY2VuYXJpby4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoYXQgaGFwcGVucyBpZiBgcmVxdWVzdF9maXJtd2FyZWAgZmFpbHMuIFRoZSBjb2RlIHN1Z2dlc3RzIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBmYWlscyB0byBsb2FkIGZpcm13YXJlLCB0aGVuIHRoZSBgX213aWZpZXhfZndfZHBjYCAoRGlyZWN0IFByb2NlZHVyZSBDYWxsKSByb3V0aW5lIGlzIGV2ZW50dWFsbHkgY2FsbGVkLiBCdXQgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLCBhbmQgdGhlIHJlYXNvbiBJJ20gaGVyZSwgaXMgKndoYXQgaXMgdGhlIHZhbHVlIG9mIGZpcm13YXJlKj9cblxuSGFuZyBvbiBhIG1vbWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHRoaW5raW5nIGNsZWFybHkuIEl0IGFwcGVhcnMgdGhhdCB0aGUgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBmdW5jdGlvbiAqZGlyZWN0bHkqIGNhbGxzIGBfbXdpZmlleF9md19kcGNgLiBPa2F5LiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBsb2dpYzogSWYgdGhhdCBpbml0aWFsIGNhbGwgdG8gYHJlcXVlc3RfZmlybXdhcmVgIHJldHVybnMgYW4gZXJyb3IsIG15IHRoaW5raW5nIHRlbGxzIG1lIHRoYXQgdGhlIHN1YnNlcXVlbnQgY2FsbGJhY2sgZnJvbSBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgLCBgX213aWZpZXhfZndfZHBjYCwgY291bGQgYmUgY2FsbGVkIHdpdGggYGZpcm13YXJlYCBzZXQgdG8gYE5VTExgLlxuXG5TbywgdGhlIGtleSBoZXJlIGlzIHdoYXQgaGFwcGVucyAqaW5zaWRlKiBgX213aWZpZXhfZndfZHBjYCBpZiBgZmlybXdhcmVgIGlzIGluZGVlZCBudWxsLiBUaGUgZm9jdXMgaGVyZSBpcyBvbiB0aGF0IGNvbmRpdGlvbi4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdHJhY2UgdGhlIGNvZGUgZmxvdywgYW5kIGhvdyB0aGUgcHJvZ3JhbSByZWFjdHMgdG8gdGhpcyBzY2VuYXJpby4gSXQncyB0aW1lIHRvIGZvbGxvdyB0aGUgcGF0aCB3aGVyZSB0aGUgcG9pbnRlciAqZmlybXdhcmUqIGJlY29tZXMgYE5VTExgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6MTUuMjYxMDc3MDY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ1ODIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZiBcXFxcKCFmaXJtd2FyZVxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz01MzU9c3RhdGljIGludCBfbXdpZmlleF9md19kcGMoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6NTQ1OlxcdGlmICghZmlybXdhcmUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU0Ni1cXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz0xMzcwPXN0YXRpYyBpbnQgbXdpZmlleF9wcm9nX2Z3X3dfaGVscGVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMTM4MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MTM4MjpcXHRpZiAoIWZpcm13YXJlKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTEzODMtXFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE4OjE1LjMxMzUzODkzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzI5Mjg3OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRmlybXdhcmUgSW5pdGlhbGl6YXRpb24gSXNzdWVzKipcblxuT2theSwgc28gaWYgdGhlIGZpcm13YXJlIGRvZXNuJ3QgbG9hZCBjb3JyZWN0bHkg4oCTIG1lYW5pbmcgYCFmaXJtd2FyZWAgaXMgdHJ1ZSDigJMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgYF9td2lmaWV4X2Z3X2RwY2AgaXMgZ29pbmcgdG8gZXJyb3Igb3V0IGJlZm9yZSBpdCBjYW4gZXZlbiBnZXQgdG8gY2FsbGluZyBgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMWAuIFRoYXQgd291bGQgZXhwbGFpbiBjZXJ0YWluIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIEkndmUgYmVlbiBzZWVpbmcuIFNlZW1zIGxpa2UgYSBsb2dpY2FsIGxpbmssIGFuZCBhIGNvbW1vbiBwcm9ibGVtLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBhcmNoaXRlY3R1cmUsIGFuZCB0aGF0IHNwZWNpZmljIGNhbGxiYWNrLCBpdCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGF0IHRoZSBgX213aWZpZXhfZndfZHBjYCBjb2RlIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhpbmdzIG1pZ2h0IGJlIGZhbGxpbmcgYXBhcnQgaW4gdGhhdCBzY2VuYXJpby4gTGV0J3MgZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxODoxOS42NDI4MjkyNzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTM1OlxcdHN0YXRpYyBpbnQgX213aWZpZXhfZndfZHBjKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuIDUzNjpcXHR7XFxuIDUzNzpcXHRcXHRpbnQgcmV0O1xcbiA1Mzg6XFx0XFx0Y2hhciBmbXRbNjRdO1xcbiA1Mzk6XFx0XFx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRleHQ7XFxuIDU0MDpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSBmdztcXG4gNTQxOlxcdFxcdGJvb2wgaW5pdF9mYWlsZWQgPSBmYWxzZTtcXG4gNTQyOlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7XFxuIDU0MzpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvbiAqZndfZG9uZSA9IGFkYXB0ZXItXFx1MDAzZWZ3X2RvbmU7XFxuIDU0NDpcXHRcXG4gNTQ1OlxcdFxcdGlmICghZmlybXdhcmUpIHtcXG4gNTQ2OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiA1NDc6XFx0XFx0XFx0XFx0ICAgIFxcXCJGYWlsZWQgdG8gZ2V0IGZpcm13YXJlICVzXFxcXG5cXFwiLCBhZGFwdGVyLVxcdTAwM2Vmd19uYW1lKTtcXG4gNTQ4OlxcdFxcdFxcdGdvdG8gZXJyX2RubGRfZnc7XFxuIDU0OTpcXHRcXHR9XFxuIDU1MDpcXHRcXG4gNTUxOlxcdFxcdG1lbXNldChcXHUwMDI2ZncsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSkpO1xcbiA1NTI6XFx0XFx0YWRhcHRlci1cXHUwMDNlZmlybXdhcmUgPSBmaXJtd2FyZTtcXG4gNTUzOlxcdFxcdGZ3LmZ3X2J1ZiA9ICh1OCAqKSBhZGFwdGVyLVxcdTAwM2VmaXJtd2FyZS1cXHUwMDNlZGF0YTtcXG4gNTU0OlxcdFxcdGZ3LmZ3X2xlbiA9IGFkYXB0ZXItXFx1MDAzZWZpcm13YXJlLVxcdTAwM2VzaXplO1xcbiA1NTU6XFx0XFxuIDU1NjpcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaWZfb3BzLmRubGRfZncpIHtcXG4gNTU3OlxcdFxcdFxcdHJldCA9IGFkYXB0ZXItXFx1MDAzZWlmX29wcy5kbmxkX2Z3KGFkYXB0ZXIsIFxcdTAwMjZmdyk7XFxuIDU1ODpcXHRcXHR9IGVsc2Uge1xcbiA1NTk6XFx0XFx0XFx0cmV0ID0gbXdpZmlleF9kbmxkX2Z3KGFkYXB0ZXIsIFxcdTAwMjZmdyk7XFxuIDU2MDpcXHRcXHR9XFxuIDU2MTpcXHRcXG4gNTYyOlxcdFxcdGlmIChyZXQgPT0gLTEpXFxuIDU2MzpcXHRcXHRcXHRnb3RvIGVycl9kbmxkX2Z3O1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBNU0csIFxcXCJXTEFOIEZXIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdGlmIChjYWxfZGF0YV9jZmcpIHtcXG4gNTY4OlxcdFxcdFxcdGlmICgocmVxdWVzdF9maXJtd2FyZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlY2FsX2RhdGEsIGNhbF9kYXRhX2NmZyxcXG4gNTY5OlxcdFxcdFxcdFxcdFxcdCAgICAgIGFkYXB0ZXItXFx1MDAzZWRldikpIFxcdTAwM2MgMClcXG4gNTcwOlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiA1NzE6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJDYWwgZGF0YSByZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG4gNTcyOlxcdFxcdH1cXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0LyogZW5hYmxlIGhvc3QgaW50ZXJydXB0IGFmdGVyIGZ3IGRubGQgaXMgc3VjY2Vzc2Z1bCAqL1xcbiA1NzU6XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWlmX29wcy5lbmFibGVfaW50KSB7XFxuIDU3NjpcXHRcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaWZfb3BzLmVuYWJsZV9pbnQoYWRhcHRlcikpXFxuIDU3NzpcXHRcXHRcXHRcXHRnb3RvIGVycl9kbmxkX2Z3O1xcbiA1Nzg6XFx0XFx0fVxcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHRyZXQgPSBtd2lmaWV4X2luaXRfZncoYWRhcHRlcik7XFxuIDU4MTpcXHRcXHRpZiAocmV0ID09IC0xKVxcbiA1ODI6XFx0XFx0XFx0Z290byBlcnJfaW5pdF9mdztcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0bWF5YmVfcXVpcmtfZndfZGlzYWJsZV9kcyhhZGFwdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6MTkuNjQyOTQ5NDA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NjkzNjA4MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IE1hcnZlbGwgV2lGaSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXNuJ3Qgd29ydGggZnV6emluZywgYnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gVGhlIGNvcmUgY2hhbmdlIGlzIGEgc2ltcGxlIGJvb2xlYW4gY2hlY2sgd2l0aGluIGBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExYDogZXNzZW50aWFsbHksIGl0J3Mgc2tpcHBpbmcgYSByZWd1bGF0b3J5IGhpbnQgYmFzZWQgb24gYSBkZXZpY2UgdHJlZSBwcm9wZXJ0eS4gVGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgY29tcGxleCBsb2dpYywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBzdGF0ZSBjaGFuZ2VzIHRoYXQgd291bGQgdHlwaWNhbGx5IGJlIGFzc29jaWF0ZWQgd2l0aCBidWdzIHRoYXQgZnV6emluZyB3b3VsZCBmaW5kLiBJdCdzIGEgc2luZ2xlLCBlYXNpbHkgdW5kZXJzdG9vZCBjb25kaXRpb24uXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGd1aWRlIG1lOiBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyxcIiBcIkNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMsXCIgb3IgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiIFdoaWxlIHRoaXMgbW9kaWZpZXMgZXhlY3V0aW9uIGZsb3cgYnkgc2tpcHBpbmcgdGhlIHJlZ3VsYXRvcnkgaGludCwgaXQncyB0cml2aWFsLCBhbmQgY3JpdGljYWxseSwgaXQgc2VlbXMgZGlmZmljdWx0IHRvIHJlYWNoLlxuXG5NeSBuZXh0IHRob3VnaHQgZm9jdXNlcyBvbiByZWFjaGFiaWxpdHk6IHRoaXMgY29kZSByZXF1aXJlcyB0aGUgTWFydmVsbCBXaUZpIGZpcm13YXJlIHRvIGJlIGxvYWRlZC4gU3l6a2FsbGVyIGRvZXNuJ3QgZ2VuZXJhbGx5IHByb3ZpZGUgc3BlY2lmaWMgZmlybXdhcmUsIHVubGVzcyBmYXVsdCBpbmplY3Rpb24gaXMgdXNlZCAodHJpdmlhbCBjaGFuZ2UpLiBIb3dldmVyLCB0aGUgY2hhbmdlIGl0c2VsZiBpcyB0cml2aWFsLiBDYW4gYHN5ei11c2JnZW5gIHRyaWdnZXIgdGhpcyB3aXRoIHRoZSByaWdodCBpbWFnZT8gSXQncyBqdXN0IHJlYWRpbmcgYSBkZXZpY2UgcHJvcGVydHksIHdoaWNoIGlzIHNpbXBsZS4gU3RpbGwsIGl0IHdvdWxkIG5lZWQgdGhlIGZpcm13YXJlLCBhbmQgdGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgYSBzaW1wbGU6IGAhZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChhZGFwdGVyLVx1MDAzZWRldiwgXCJtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tXCIpYC4gVGhlIGNvZGUgYWxzbyBtb2RpZmllcyB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZGV2aWNlIHRyZWUgYmluZGluZ3MsIHdoaWNoIHNlZW1zIGxpa2UgYSBmbGFnIHRvIHJldHVybiBgZmFsc2VgIHJpZ2h0IGF3YXkuXG5cblRoZSBwYXRjaCBtb2RpZmllcyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sYCwgYGFyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c2AsIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNgLiBTbyBpdCdzIHZlcnkgbWlub3IgYW5kIHJlcXVpcmVzIGZpcm13YXJlIHRvIGJlIHByZXNlbnQuXG5cbkJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIHRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgZmlybXdhcmUgdG8gYmUgbG9hZGVkLiBJdCdzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggaXMgYW5vdGhlciBuZWdhdGl2ZSBzaWduYWwuIFRoaXMgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCJcblxuVGhpbmtpbmcgdGhyb3VnaCBzeXprYWxsZXIncyBjYXBhYmlsaXRpZXMsIGl0IGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzLiBIb3dldmVyLCB0aGlzIGNvZGUgcmVxdWlyZXMgdGhhdCB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSByZXNwb25kcyBjb3JyZWN0bHkgdG8gZmlybXdhcmUgZG93bmxvYWQgY29tbWFuZHMuIGBtd2lmaWV4X2RubGRfZndgIGlzIHRoZSByZWxldmFudCBjb2RlLiBTeXprYWxsZXIncyBVU0IgZnV6emVyIGdlbmVyYXRlcyByYW5kb20gcmVzcG9uc2VzLiBJdCdzIGV4dHJlbWVseSB1bmxpa2VseSB0aGF0IHJhbmRvbSBVU0IgcmVzcG9uc2VzIHdvdWxkIGNvcnJlY3RseSBlbXVsYXRlIHRoZSBjb21wbGV4IE1hcnZlbGwgV2lGaSBmaXJtd2FyZSBkb3dubG9hZCBhbmQgaW5pdGlhbGl6YXRpb24gcHJvdG9jb2wgdG8gdGhlIHBvaW50IG9mIGV4ZWN1dGluZyBgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMWAuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSB0cml2aWFsLCByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgZmlybXdhcmUsIGFuZCBpcyBoaWdobHkgaW1wcm9iYWJsZSB0byBiZSByZWFjaGVkIGluIHRoZSBzdGFuZGFyZCBTeXprYWxsZXIgZW52aXJvbm1lbnQuIEl0J3MgZXNzZW50aWFsbHkgYW4gdW5yZWFjaGFibGUsIG9yIGF0IGxlYXN0IHVuaW50ZXJlc3RpbmcsIGNvZGUgcGF0aCBmb3IgZnV6emluZyBwdXJwb3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxODozNS4zMzY1NTk3MzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjQzNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfZG5sZF9md1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9pbml0LmM9NTk4PW13aWZpZXhfc2h1dGRvd25fZHJ2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvaW5pdC5jLTY2NS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvaW5pdC5jOjY2NjppbnQgbXdpZmlleF9kbmxkX2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2luaXQuYy02NjctXFx0XFx0ICAgIHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICpwbWZ3KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2luaXQuYy03MTctfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9pbml0LmM6NzE4OkVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfZG5sZF9mdyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTUzNT1zdGF0aWMgaW50IF9td2lmaWV4X2Z3X2RwYyhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy01NTgtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjU1OTpcXHRcXHRyZXQgPSBtd2lmaWV4X2RubGRfZncoYWRhcHRlciwgXFx1MDAyNmZ3KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU2MC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTEwNjA9dm9pZCBtd2lmaWV4X3NodXRkb3duX2RydihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTEwNjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxMDYyOmludCBtd2lmaWV4X2RubGRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLCBzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSAqKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTEwNjMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jPTEwMjU9c3RhdGljIGludCBtd2lmaWV4X3NkaW9fZG5sZF9mdyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xMDMxLVxcdHNkaW9fY2xhaW1faG9zdChjYXJkLVxcdTAwM2VmdW5jKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjEwMzI6XFx0cmV0ID0gbXdpZmlleF9kbmxkX2Z3KGFkYXB0ZXIsIGZ3KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTEwMzMtXFx0c2Rpb19yZWxlYXNlX2hvc3QoY2FyZC1cXHUwMDNlZnVuYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE4OjM1LjM5ODIwNzEyOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTUzMjQ2NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEZpcm13YXJlIERvd25sb2FkIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbXdpZmlleF91c2JgIG1vZHVsZSwgYW5kIHNvbWV0aGluZyBqdXN0IGNsaWNrZWQuIEl0J3MgZ290IGl0cyBvd24gZGVkaWNhdGVkIGBkbmxkX2Z3YCBjYWxsYmFjayBkZWZpbmVkLiBUaGF0J3Mga2V5LCBpc24ndCBpdD8gTWVhbnMgd2UncmUgbm90IGp1c3QgcmVseWluZyBvbiBzb21lIGdlbmVyaWMgZnJhbWV3b3JrIGZvciB0aGUgZmlybXdhcmUgZG93bmxvYWQ7IGl0J3MgZ290IGEgY3VzdG9tLXRhaWxvcmVkIHByb2Nlc3Mgc3BlY2lmaWNhbGx5IGZvciB0aGUgVVNCIGludGVyZmFjZS4gVGhhdCBtYWtlcyBhIGxvdCBvZiBzZW5zZSwgY29uc2lkZXJpbmcgdGhlIG51YW5jZXMgaW52b2x2ZWQgd2l0aCBVU0IgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBlbnVtZXJhdGlvbiwgYW5kIGRhdGEgdHJhbnNmZXIuIFVuZGVyc3RhbmRpbmcgKnRoYXQqIGNhbGxiYWNrIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgVVNCIGZpcm13YXJlIHVwbG9hZCBmbG93LiBXZSdsbCBoYXZlIHRvIGRpZyBkZWVwZXIsIHNlZSB3aGF0IHNvcnQgb2Ygc3BlY2lmaWMgaGFuZGxpbmcgaXQgcGVyZm9ybXMsIGlmIHRoZXJlJ3MgYW55IGNydWNpYWwgZXJyb3IgY2hlY2tpbmcgdGhlcmUsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHN0YWdlcyBvZiB0aGUgZG93bmxvYWQuIFRoaXMgbmVlZHMgdG8gYmUgdGhlIGp1bXBpbmcgb2ZmIHBvaW50IGZvciB0aGUgVVNCIGZpcm13YXJlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQyNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE4OjQyLjk1MTQ1NTY5OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNzk2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG5sZF9md1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jPTEzNzA9c3RhdGljIGludCBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTA2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzoxNTA3OnN0YXRpYyBpbnQgbXdpZmlleF91c2JfZG5sZF9mdyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTA4LVxcdFxcdFxcdHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICpmdylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz0xNTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXdpZmlleF9pZl9vcHMgdXNiX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTkwLVxcdC8qIFVTQiBzcGVjaWZpYyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzoxNTkxOlxcdC5kbmxkX2Z3ID1cXHRcXHRtd2lmaWV4X3VzYl9kbmxkX2Z3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTkyLVxcdC5jbWRyc3BfY29tcGxldGUgPVxcdG13aWZpZXhfdXNiX2NtZF9ldmVudF9jb21wbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6NDIuOTk3NzM5NzA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTY0MTIzNTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbXdpZmlleF91c2JfZG5sZF9md2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gYG13aWZpZXhfdXNiX2RubGRfZndgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBnb2luZyBvbiBpbiB0aGlzIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIGZpcm13YXJlIGRvd25sb2FkIG92ZXIgVVNCLCBsaWtlbHkgZm9yIGEgTWFydmVsbCBXaS1GaSBjaGlwc2V0LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2QgaW1tZWRpYXRlbHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYXJndW1lbnRzIGl0IHRha2VzLiBBcmUgd2UgcGFzc2luZyBhIGZpcm13YXJlIGltYWdlLCBkZXNjcmlwdG9yLCBvciBzb21lIG90aGVyIGNvbnRyb2wgc3RydWN0dXJlPyBBcmUgdGhlcmUgYW55IHNpemUgbGltaXRzIGJlaW5nIGNoZWNrZWQ/IFdoYXQgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZD9cblxuTXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgaXNzdWVzLiBJcyB0aGVyZSBwcm9wZXIgZXJyb3IgY2hlY2tpbmcgZm9yIFVTQiB0cmFuc2ZlcnM/IENvdWxkIHdlIGJlIHZ1bG5lcmFibGUgdG8gYnVmZmVyIG92ZXJmbG93cyBpZiB0aGUgZmlybXdhcmUgaW1hZ2UgaXMgbWFsaWNpb3VzIG9yIGNvcnJ1cHRlZD8gV2hhdCdzIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLCBpZiBhbnksIGZvciB0aGUgZG93bmxvYWRlZCBmaXJtd2FyZT8gSXMgdGhlcmUgYW55IG1lY2hhbmlzbSB0byBwcmV2ZW50IGRvd25ncmFkZSBhdHRhY2tzP1xuXG5JJ2QgcXVpY2tseSB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBVU0IgdHJhbnNmZXIgZnVuY3Rpb25zIGJlaW5nIGNhbGxlZCwgbGlrZSBgdXNiX2J1bGtfbXNnYCBvciBgdXNiX2NvbnRyb2xfbXNnYC4gSSdkIHdhbnQgdG8gY29uZmlybSB0aGF0IHdlJ3JlIGhhbmRsaW5nIHRoZSBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjb3JyZWN0bHkuIEFueSBkYXRhIHN0YWdpbmcsIERNQSB1c2FnZSwgb3IgaW50ZXJydXB0IGhhbmRsaW5nIHdvdWxkIHdhcnJhbnQgY2xvc2VyIHNjcnV0aW55LiBBbmQsIG9mIGNvdXJzZSwgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIGNhbGwuXG5cbkZpbmFsbHksIEnigJlkIGZvY3VzIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbi4gRG9lcyBhIHN1Y2Nlc3MgaW5kaWNhdGUgdGhhdCB0aGUgZHJpdmVyIGhhcyBjb21wbGV0ZWx5IHZlcmlmaWVkIGFuZCBzdGFydGVkIHRoZSBuZXcgZmlybXdhcmU/IE9yIGRvZXMgaXQgcmVwcmVzZW50IGFuIGluY29tcGxldGUgc3RhdGU/IFdoYXQga2luZCBvZiBsb2dnaW5nIGFuZCBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzIGFyZSBhdmFpbGFibGUgaWYgc29tZXRoaW5nIGdvZXMgd3Jvbmc/IEJhc2ljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IHJvYnVzdCwgc2VjdXJlLCBhbmQgcmVsaWFibGUgdGhpcyBmaXJtd2FyZSBkb3dubG9hZCBwcm9jZXNzIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE4OjU1Ljk2MTg2NTQ3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTAyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MDcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MDc6XFx0c3RhdGljIGludCBtd2lmaWV4X3VzYl9kbmxkX2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuMTUwODpcXHRcXHRcXHRcXHRzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSAqZncpXFxuMTUwOTpcXHR7XFxuMTUxMDpcXHRcXHRpbnQgcmV0O1xcbjE1MTE6XFx0XFx0c3RydWN0IHVzYl9jYXJkX3JlYyAqY2FyZCA9IChzdHJ1Y3QgdXNiX2NhcmRfcmVjICopYWRhcHRlci1cXHUwMDNlY2FyZDtcXG4xNTEyOlxcdFxcbjE1MTM6XFx0XFx0aWYgKGNhcmQtXFx1MDAzZXVzYl9ib290X3N0YXRlID09IFVTQjhYWFhfRldfRE5MRCkge1xcbjE1MTQ6XFx0XFx0XFx0cmV0ID0gbXdpZmlleF9wcm9nX2Z3X3dfaGVscGVyKGFkYXB0ZXIsIGZ3KTtcXG4xNTE1OlxcdFxcdFxcdGlmIChyZXQpXFxuMTUxNjpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTUxNzpcXHRcXG4xNTE4OlxcdFxcdFxcdC8qIEJvb3Qgc3RhdGUgY2hhbmdlcyBhZnRlciBzdWNjZXNzZnVsIGZpcm13YXJlIGRvd25sb2FkICovXFxuMTUxOTpcXHRcXHRcXHRpZiAoY2FyZC1cXHUwMDNldXNiX2Jvb3Rfc3RhdGUgPT0gVVNCOFhYWF9GV19ETkxEKVxcbjE1MjA6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjE1MjE6XFx0XFx0fVxcbjE1MjI6XFx0XFxuMTUyMzpcXHRcXHRyZXQgPSBtd2lmaWV4X3VzYl9yeF9pbml0KGFkYXB0ZXIpO1xcbjE1MjQ6XFx0XFx0aWYgKCFyZXQpXFxuMTUyNTpcXHRcXHRcXHRyZXQgPSBtd2lmaWV4X3VzYl90eF9pbml0KGFkYXB0ZXIpO1xcbjE1MjY6XFx0XFxuMTUyNzpcXHRcXHRyZXR1cm4gcmV0O1xcbjE1Mjg6XFx0fVxcbjE1Mjk6XFx0XFxuMTUzMDpcXHRzdGF0aWMgdm9pZCBtd2lmaWV4X3N1Ym1pdF9yeF91cmIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTggZXApXFxuMTUzMTpcXHR7XFxuMTUzMjpcXHRcXHRzdHJ1Y3QgdXNiX2NhcmRfcmVjICpjYXJkID0gKHN0cnVjdCB1c2JfY2FyZF9yZWMgKilhZGFwdGVyLVxcdTAwM2VjYXJkO1xcbjE1MzM6XFx0XFxuMTUzNDpcXHRcXHRza2JfcHVzaChjYXJkLVxcdTAwM2VyeF9jbWQuc2tiLCBJTlRGX0hFQURFUl9MRU4pO1xcbjE1MzU6XFx0XFx0aWYgKChlcCA9PSBjYXJkLVxcdTAwM2VyeF9jbWRfZXApIFxcdTAwMjZcXHUwMDI2XFxuMTUzNjpcXHRcXHQgICAgKCFhdG9taWNfcmVhZChcXHUwMDI2Y2FyZC1cXHUwMDNlcnhfY21kX3VyYl9wZW5kaW5nKSkpXFxuMTUzNzpcXHRcXHRcXHRtd2lmaWV4X3VzYl9zdWJtaXRfcnhfdXJiKFxcdTAwMjZjYXJkLVxcdTAwM2VyeF9jbWQsXFxuMTUzODpcXHRcXHRcXHRcXHRcXHRcXHQgIE1XSUZJRVhfUlhfQ01EX0JVRl9TSVpFKTtcXG4xNTM5OlxcdFxcbjE1NDA6XFx0XFx0cmV0dXJuO1xcbjE1NDE6XFx0fVxcbjE1NDI6XFx0XFxuMTU0MzpcXHRzdGF0aWMgaW50IG13aWZpZXhfdXNiX2NtZF9ldmVudF9jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbjE1NDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTU0NTpcXHR7XFxuMTU0NjpcXHRcXHRtd2lmaWV4X3N1Ym1pdF9yeF91cmIoYWRhcHRlciwgTVdJRklFWF9VU0JfRVBfQ01EX0VWRU5UKTtcXG4xNTQ3OlxcdFxcbjE1NDg6XFx0XFx0cmV0dXJuIDA7XFxuMTU0OTpcXHR9XFxuMTU1MDpcXHRcXG4xNTUxOlxcdC8qIFRoaXMgZnVuY3Rpb24gd2FrZXMgdXAgdGhlIGNhcmQuICovXFxuMTU1MjpcXHRzdGF0aWMgaW50IG13aWZpZXhfcG1fd2FrZXVwX2NhcmQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4xNTUzOlxcdHtcXG4xNTU0OlxcdFxcdC8qIFNpbXVsYXRpb24gb2YgSFNfQVdBS0UgZXZlbnQgKi9cXG4xNTU1OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXBtX3dha2V1cF9md190cnkgPSBmYWxzZTtcXG4xNTU2OlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2YWRhcHRlci1cXHUwMDNld2FrZXVwX3RpbWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6NTUuOTYyMTE3NzExWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NjEwMDMzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXJgIGZ1bmN0aW9uIGNhbGwuIFRoZSBnb2FsLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIHRlc3QgaXQgd2l0aCBhIFwiZmFrZVwiIGZpcm13YXJlLiBOb3csIGxldCdzIHNlZS4uLiBgbXdpZmlleF91c2JfZG5sZF9md2AgaXMgZ29pbmcgdG8gcmV0dXJuIC0xIGlmIGBjYXJkLVx1MDAzZXVzYl9ib290X3N0YXRlYCBpcyBlcXVhbCB0byBgVVNCOFhYWF9GV19ETkxEYCBhZnRlciBydW5uaW5nIGBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXJgLCB3aGljaCBtZWFucyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIGZpcm13YXJlIHRvIHRoZSBkZXZpY2Ugb3ZlciBVU0IuIFRoZSBwcm9ibGVtLCBhcyBhbHdheXMgd2l0aCB0aGlzIGtpbmQgb2YgdGhpbmcsIGlzIHRoYXQgc3VjY2Vzc2Z1bCBleGVjdXRpb24gcmVsaWVzIG9uIHRoZSB0YXJnZXQgZGV2aWNlIHJlc3BvbmRpbmcgY29ycmVjdGx5LCB3aGljaCBtaWdodCBub3QgaGFwcGVuLlxuXG5UaGUgcmVhbGx5IGJpZyBpc3N1ZSBoZXJlIGlzIHRoYXQgU3l6a2FsbGVy4oCZcyBVU0IgZnV6emVyIGlzIHRocm93aW5nIHJhbmRvbSByZXNwb25zZXMgYXQgdGhpcyB0aGluZy4gVGhlIGNoYW5jZXMgb2YgaXQgKmFjdHVhbGx5KiBlbXVsYXRpbmcgYSBzdWNjZXNzZnVsIGZpcm13YXJlIGRvd25sb2FkIGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhpcyBzcGVjaWZpYyBNYXJ2ZWxsIFdpRmkgY2hpcCBhcmUgYXN0cm9ub21pY2FsbHkgbG93LiBXZSBhcmUgZGVhbGluZyB3aXRoIGEgY29tcGxleCBoYXJkd2FyZSBpbnRlcmFjdGlvbiB0aGF0IHJlbGllcyBvbiB2ZXJ5IHNwZWNpZmljIHJlc3BvbnNlcyBhbmQgc3RhdGUgY2hhbmdlcy5cblxuUGx1cywgSSd2ZSBzZWVuIHRoZSBjb2RlOiB0aGUgYWN0dWFsIGNoYW5nZSBpdHNlbGYgaXMgcmlkaWN1bG91c2x5IHRyaXZpYWwuIEl0J3MganVzdCBhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9mIGEgZGV2aWNlIHByb3BlcnR5OlxuXG5gYGBjXG5cdFx0XHRcdGlmIChjb3VudHJ5X2NvZGUgXHUwMDI2XHUwMDI2XG5cdFx0XHRcdCAgICAhZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChhZGFwdGVyLVx1MDAzZWRldixcblx0XHRcdFx0XHRcdFx0ICAgICAgIFwibWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbVwiKSBcdTAwMjZcdTAwMjZcblx0XHRcdFx0ICAgIHJlZ3VsYXRvcnlfaGludCh3aXBoeSwgY291bnRyeV9jb2RlKSlcbmBgYFxuXG5UaGlzIGlzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IG9mIGF0dGVtcHRpbmcgdG8gZnV6ei4gVGhlIHJldHVybiBpcyBnb2luZyB0byBiZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0IHRoaXMgY2hhbmdlIGlzIGV4dHJlbWVseSB0cml2aWFsIOKAkyBhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9uIGEgZGV2aWNlIHByb3BlcnR5IOKAkyBhbmQgaXQncyBidXJpZWQgaW4gYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gcGF0aCB0aGF0IHJlcXVpcmVzIGEgKnN1Y2Nlc3NmdWwqIGZpcm13YXJlIGxvYWQgYW5kIGNvbXBsZXggZGV2aWNlIGludGVyYWN0aW9uLiBUaGlzIGlzIGJhc2ljYWxseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGhvdXQgZWl0aGVyIHNwZWNpZmljIGhhcmR3YXJlIG9yIGFuIGV4dHJlbWVseSBzcGVjaWFsaXplZCBlbXVsYXRvci4gTGV0J3MgbW92ZSBvbiB0byBzb21ldGhpbmcgdGhhdCBvZmZlcnMgYSBiZXR0ZXIgcmV0dXJuIG9uIGludmVzdG1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjIwLCJPdXRwdXRUb2tlbnMiOjExNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE5OjA0LjcyMzEyMzk2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSB0cml2aWFsIGZ1bmN0aW9uYWwgY2hhbmdlIChhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9mIGEgZGV2aWNlIHByb3BlcnR5IHRvIHNraXAgYSByZWd1bGF0b3J5IGhpbnQpIGluIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBNYXJ2ZWxsIG13aWZpZXggd2lyZWxlc3MgZHJpdmVyLiBSZWFjaGluZyB0aGlzIGNvZGUgcmVxdWlyZXMgc3VjY2Vzc2Z1bCBmaXJtd2FyZSBsb2FkaW5nIGFuZCBjb21wbGV4IGRldmljZSBpbnRlcmFjdGlvbiwgd2hpY2ggaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB0byBhY2hpZXZlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgZ2VuZXJpYyBVU0IgZW11bGF0aW9uLiBHaXZlbiB0aGUgdHJpdmlhbCBuYXR1cmUgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIHVucmVhY2hhYmlsaXR5LCBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSB0cml2aWFsIGZ1bmN0aW9uYWwgY2hhbmdlIChhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9mIGEgZGV2aWNlIHByb3BlcnR5IHRvIHNraXAgYSByZWd1bGF0b3J5IGhpbnQpIGluIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBNYXJ2ZWxsIG13aWZpZXggd2lyZWxlc3MgZHJpdmVyLiBSZWFjaGluZyB0aGlzIGNvZGUgcmVxdWlyZXMgc3VjY2Vzc2Z1bCBmaXJtd2FyZSBsb2FkaW5nIGFuZCBjb21wbGV4IGRldmljZSBpbnRlcmFjdGlvbiwgd2hpY2ggaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB0byBhY2hpZXZlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgZ2VuZXJpYyBVU0IgZW11bGF0aW9uLiBHaXZlbiB0aGUgdHJpdmlhbCBuYXR1cmUgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIHVucmVhY2hhYmlsaXR5LCBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE5OjA0LjcyMzE0NTQ3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowqlrv5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 17:31:55 +0000 UTC FinishedAt: 2026-08-27 18:19:06 +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+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHRyaXZpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgKGEgc2luZ2xlIGJvb2xlYW4gY2hlY2sgb2YgYSBkZXZpY2UgcHJvcGVydHkgdG8gc2tpcCBhIHJlZ3VsYXRvcnkgaGludCkgaW4gdGhlIGluaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIE1hcnZlbGwgbXdpZmlleCB3aXJlbGVzcyBkcml2ZXIuIFJlYWNoaW5nIHRoaXMgY29kZSByZXF1aXJlcyBzdWNjZXNzZnVsIGZpcm13YXJlIGxvYWRpbmcgYW5kIGNvbXBsZXggZGV2aWNlIGludGVyYWN0aW9uLCB3aGljaCBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHRvIGFjaGlldmUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyBnZW5lcmljIFVTQiBlbXVsYXRpb24uIEdpdmVuIHRoZSB0cml2aWFsIG5hdHVyZSBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgdW5yZWFjaGFiaWxpdHksIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDEwMTQ1MjZhZmM5MGZlMWJkNmI5ZjA0YjliNjFmNjdkZjVjMjI4OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxODoxNzo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL21hcnZlbGwsc2Q4Nzg3LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL21hcnZlbGwsc2Q4Nzg3LnlhbWxcbmluZGV4IDkzMGI3MDBiNzNkMDAuLjlmOTA1ZWY1YzJjMDcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL21hcnZlbGwsc2Q4Nzg3LnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbFxuQEAgLTU5LDYgJiM0Mzs1OSwxMiBAQCBwcm9wZXJ0aWVzOlxuICAgICBkZXNjcmlwdGlvbjogQ2FsaWJyYXRpb24gZGF0YSBmb3Igc3ViLWJhbmQgMyBpbiB0aGUgNUdIeiBiYW5kLlxuICAgICBtYXhJdGVtczogNTAyXG4gXG4mIzQzOyAgbWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbTpcbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL2ZsYWdcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBUaGUgcmVndWxhdG9yeSBoaW50IGluIFJPTSBjb25mbGljdHMgd2l0aCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLlxuJiM0MzsgICAgICBJdCBzaG91bGQgYmUgaWdub3JlZCwgc28gdGhlIHBsYXRmb3JtIHJlZ3VsYXRvcnkgZG9tYWluIGNhbiBiZSB1c2VkLlxuJiM0MztcbiAgIG1hcnZlbGwsd2FrZXVwLXBpbjpcbiAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyXG4gICAgIGRlc2NyaXB0aW9uOlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c1xuaW5kZXggNGFiNDVmMjk0ZGUyMi4uMmJmMjk5ODFhMDMxMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzXG5AQCAtMTY1LDYgJiM0MzsxNjUsMTUgQEAgXHUwMDI2c2RoY2kge1xuIFx0d3AtaW52ZXJ0ZWQ7XG4gXHRidXMtd2lkdGggPSBcdTAwM2M4XHUwMDNlO1xuIFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7XG4mIzQzO1x0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdCNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzO1x0d2lmaUAxIHtcbiYjNDM7XHRcdGNvbXBhdGlibGUgPSBcJiMzNDttYXJ2ZWxsLHNkODg5N1wmIzM0OztcbiYjNDM7XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHRtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tO1xuJiM0MztcdH07XG4gfTtcbiBcbiBcdTAwMjZ1c2IzXzFfdmJ1cyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuY1xuaW5kZXggN2ExYmEzMmYxZmIzNi4uMjkzODc2Mzk3YjY3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuY1xuQEAgLTQ4OTcsNyAmIzQzOzQ4OTcsMTQgQEAgaW50IG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbiBcdFx0XHRcdGNvdW50cnlfY29kZSA9XG4gXHRcdFx0XHRcdG13aWZpZXhfMTFkX2NvZGVfMl9yZWdpb24oXG4gXHRcdFx0XHRcdFx0YWRhcHRlci1cdTAwM2VyZWdpb25fY29kZSk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdC8qIElmIHRoZSByZWcgaGludCBpbiBST00gY29uZmxpY3RzIHdpdGggcGxhdGZvcm1cbiYjNDM7XHRcdFx0XHQgKiBjb25maWd1cmF0aW9uLCBpdCBzaG91bGQgYmUgaWdub3JlZCwgc28gdGhlXG4mIzQzO1x0XHRcdFx0ICogcGxhdGZvcm0gcmVndWxhdG9yeSBkb21haW4gY2FuIGJlIHVzZWQuXG4mIzQzO1x0XHRcdFx0ICovXG4gXHRcdFx0XHRpZiAoY291bnRyeV9jb2RlIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAhZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChhZGFwdGVyLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbVwmIzM0OykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgcmVndWxhdG9yeV9oaW50KHdpcGh5LCBjb3VudHJ5X2NvZGUpKVxuIFx0XHRcdFx0XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxuIFx0XHRcdFx0XHRcdCAgICBcJiMzNDtyZWd1bGF0b3J5X2hpbnQoKSBmYWlsZWRcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSAoYSBzaW5nbGUgYm9vbGVhbiBjaGVjayBvZiBhIGRldmljZSBwcm9wZXJ0eSB0byBza2lwIGEgcmVndWxhdG9yeSBoaW50KSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgTWFydmVsbCBtd2lmaWV4IHdpcmVsZXNzIGRyaXZlci4gUmVhY2hpbmcgdGhpcyBjb2RlIHJlcXVpcmVzIHN1Y2Nlc3NmdWwgZmlybXdhcmUgbG9hZGluZyBhbmQgY29tcGxleCBkZXZpY2UgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gYWNoaWV2ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIGdlbmVyaWMgVVNCIGVtdWxhdGlvbi4gR2l2ZW4gdGhlIHRyaXZpYWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyB1bnJlYWNoYWJpbGl0eSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTAxNDUyNmFmYzkwZmUxYmQ2YjlmMDRiOWI2MWY2N2RmNWMyMjg5MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDE4OjE3OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sCmluZGV4IDkzMGI3MDBiNzNkMDAuLjlmOTA1ZWY1YzJjMDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL21hcnZlbGwsc2Q4Nzg3LnlhbWwKQEAgLTU5LDYgJiM0Mzs1OSwxMiBAQCBwcm9wZXJ0aWVzOgogICAgIGRlc2NyaXB0aW9uOiBDYWxpYnJhdGlvbiBkYXRhIGZvciBzdWItYmFuZCAzIGluIHRoZSA1R0h6IGJhbmQuCiAgICAgbWF4SXRlbXM6IDUwMgogCiYjNDM7ICBtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tOgomIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9mbGFnCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFRoZSByZWd1bGF0b3J5IGhpbnQgaW4gUk9NIGNvbmZsaWN0cyB3aXRoIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uCiYjNDM7ICAgICAgSXQgc2hvdWxkIGJlIGlnbm9yZWQsIHNvIHRoZSBwbGF0Zm9ybSByZWd1bGF0b3J5IGRvbWFpbiBjYW4gYmUgdXNlZC4KJiM0MzsKICAgbWFydmVsbCx3YWtldXAtcGluOgogICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMgogICAgIGRlc2NyaXB0aW9uOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzCmluZGV4IDRhYjQ1ZjI5NGRlMjIuLjJiZjI5OTgxYTAzMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0cwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zODUtbGlua3N5cy1yYW5nby5kdHMKQEAgLTE2NSw2ICYjNDM7MTY1LDE1IEBAICZhbXA7c2RoY2kgewogCXdwLWludmVydGVkOwogCWJ1cy13aWR0aCA9ICZsdDs4Jmd0OzsKIAlzdGF0dXMgPSAmIzM0O29rYXkmIzM0OzsKJiM0MzsKJiM0MzsJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CSNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOwl3aWZpQDEgewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7bWFydmVsbCxzZDg4OTcmIzM0OzsKJiM0MzsJCXJlZyA9ICZsdDsxJmd0OzsKJiM0MzsJCW1hcnZlbGwsaW52YWxpZC1yZWctaGludC1pbi1yb207CiYjNDM7CX07CiB9OwogCiAmYW1wO3VzYjNfMV92YnVzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKaW5kZXggN2ExYmEzMmYxZmIzNi4uMjkzODc2Mzk3YjY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKQEAgLTQ4OTcsNyAmIzQzOzQ4OTcsMTQgQEAgaW50IG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKIAkJCQljb3VudHJ5X2NvZGUgPQogCQkJCQltd2lmaWV4XzExZF9jb2RlXzJfcmVnaW9uKAogCQkJCQkJYWRhcHRlci0mZ3Q7cmVnaW9uX2NvZGUpOwomIzQzOwomIzQzOwkJCQkvKiBJZiB0aGUgcmVnIGhpbnQgaW4gUk9NIGNvbmZsaWN0cyB3aXRoIHBsYXRmb3JtCiYjNDM7CQkJCSAqIGNvbmZpZ3VyYXRpb24sIGl0IHNob3VsZCBiZSBpZ25vcmVkLCBzbyB0aGUKJiM0MzsJCQkJICogcGxhdGZvcm0gcmVndWxhdG9yeSBkb21haW4gY2FuIGJlIHVzZWQuCiYjNDM7CQkJCSAqLwogCQkJCWlmIChjb3VudHJ5X2NvZGUgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgIWRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woYWRhcHRlci0mZ3Q7ZGV2LAomIzQzOwkJCQkJCQkgICAgICAgJiMzNDttYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tJiMzNDspICZhbXA7JmFtcDsKIAkJCQkgICAgcmVndWxhdG9yeV9oaW50KHdpcGh5LCBjb3VudHJ5X2NvZGUpKQogCQkJCQltd2lmaWV4X2RiZyhwcml2LSZndDthZGFwdGVyLCBFUlJPUiwKIAkJCQkJCSAgICAmIzM0O3JlZ3VsYXRvcnlfaGludCgpIGZhaWxlZFxuJiMzNDspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzAyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBNYXJ2ZWxsIFdpRmkgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGEgZmV3IGZpbGVzLiBPbmUgaXMgYSBEZXZpY2UgVHJlZSBiaW5kaW5nIChgbWFydmVsbCxzZDg3ODcueWFtbGApLCBhbm90aGVyIGlzIGEgRGV2aWNlIFRyZWUgZm9yIGEgc3BlY2lmaWMgTGlua3N5cyBkZXZpY2UgKGBhcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzYCksIGFuZCB0aGVuIHRoZSByZWFsIG1lYXQgb2YgaXQsIGEgY2hhbmdlIGluIHRoZSBgbXdpZmlleGAgZHJpdmVyIChgY2ZnODAyMTEuY2ApLiBUaGUgY2hhbmdlIGluIGBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExYCBoYXMgdGhpcyBjb25kaXRpb25hbCBjaGVjayBpbnZvbHZpbmcgYSBgY291bnRyeV9jb2RlYCBhbmQgYSBkZXZpY2UgcHJvcGVydHkuIEl0IGNhbGxzIGByZWd1bGF0b3J5X2hpbnRgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBob3cgbGlrZWx5IGlzIHRoaXMgdG8gYWN0dWFsbHkgdHJpZ2dlciBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGlzIGEgTWFydmVsbCB3aXJlbGVzcyBkcml2ZXIsIHRhcmdldGluZyBTRElPLCBQQ0llLCBhbmQgVVNCIFdpRmkgY2FyZHMuCgpOb3csIHdhaXQgYSBtaW51dGUsIEkga25vdyBgbXdpZmlleGAgKmRvZXMqIGhhdmUgYSBVU0IgZHJpdmVyIChgdXNiLmNgKS4gT2theSwgc28gdGhhdCBjaGFuZ2VzIHRoaW5ncy4gQ2FuIHdlIGxldmVyYWdlIHNvbWV0aGluZyBsaWtlIGEgVVNCIGdhZGdldCBvciBlbXVsYXRlZCBkZXZpY2UgdG8gaGl0IHRoYXQ/IE5vLCB0aGF0IGlzIGEgaG9zdCBkcml2ZXIsIG5vdCBhIGRldmljZSBkcml2ZXIuIEhvbGQgb24uLi4gU3l6a2FsbGVyISBSaWdodCwgU3l6a2FsbGVyICpjYW4qIGVtdWxhdGUgVVNCIGRldmljZXMgdXNpbmcgcmF3IGdhZGdldCwgdmhjaS4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBwcm9iZSBgbXdpZmlleF91c2JgIHdpdGggc3l6a2FsbGVyLgoKVGhlIGtleSBxdWVzdGlvbiBpcywgaXMgYG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTFgIHJlYWNoYWJsZT8gQ2hlY2tpbmcgdGhlIHNvdXJjZSBpdCBpcyBjYWxsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbi4gU28sIGl0IHNob3VsZCBiZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBjZmc4MDIxMS5jYCwgYW5kIHRoYXQmIzM5O3MgdGhlIGNvcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgYG13aWZpZXhfdXNiYCBpcyBlbmFibGVkIGluIHRoZSBjb25maWc7IHRoYXQgd291bGQgYmUgdGhlIGZpcnN0IGh1cmRsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYz00NjY4PWludCBtd2lmaWV4X2luaXRfY2hhbm5lbF9zY2FuX2dhcChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ2OTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYzo0Njk4OmludCBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYy00Njk5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuaC0xNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5oOjE1OmludCBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuaC0xNi1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTUzNT1zdGF0aWMgaW50IF9td2lmaWV4X2Z3X2RwYyhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTg2LVx0aWYgKCFhZGFwdGVyLVx1MDAzZXdpcGh5KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjU4NzpcdFx0aWYgKG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoYWRhcHRlcikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTg4LVx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtd2lmaWV4IEZpcm13YXJlIExvYWRpbmcgUHJvY2VzcyoqCgpPa2F5LCBzbyBgX213aWZpZXhfZndfZHBjYCB0cmlnZ2VycyBgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMWAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgdGVsbHMgbWUgdGhlIGZpcm13YXJlIGxvYWRpbmcgaXMgaGFwcGVuaW5nIGJlZm9yZSB0aGlzIHBvaW50LiBDYW4gc3l6a2FsbGVyIGFjdHVhbGx5ICpsb2FkKiB0aGUgZmlybXdhcmUgZm9yIG13aWZpZXgsIHRob3VnaD8gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBzYXkgbm87IGl0IHVzdWFsbHkgcmVsaWVzIG9uIHRoZSBmaXJtd2FyZSBlaXRoZXIgYmVpbmcgcHJlLWxvYWRlZCBhcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gaW1hZ2UgKGxpa2UgdGhvc2UgaW4gbGludXgtZmlybXdhcmUpIG9yIHRocm91Z2ggc29tZSBmYXVsdCBpbmplY3Rpb24gc2V0dXAuIGByZXF1ZXN0X2Zpcm13YXJlYCBjb3VsZCBiZSB0aGUgZW50cnkgcG9pbnQgdG8gaW52ZXN0aWdhdGUsIGJ1dCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGhhbmRsZSB0aGUgcGh5c2ljYWwgZmlybXdhcmUgZmlsZXMgZGlyZWN0bHksIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGZha2VkIGZpcm13YXJlIG9yIGZhdWx0IGluamVjdGlvbiBzY2VuYXJpby4gSG1tbSwgYnV0IHdhaXQuLi4gaWYgdGhpcyBpcyBhIFVTQiBkcml2ZXIsIHRoaW5ncyBtaWdodCBiZSBkaWZmZXJlbnQsIHJpZ2h0PyBUaGF0IGNvdWxkIG9wZW4gdXAgc29tZSBpbnRlcmVzdGluZyB0ZXN0aW5nIGF2ZW51ZXMuIEJlc3QgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIG13aWZpZXggdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyBzZXQgdXAgYW5kIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjb21waWxlIHRpbWUgb3B0aW9ucyB0aGF0IHdvdWxkIGNoYW5nZSB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNV0lGSUVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mjpjb25maWcgTVdJRklFWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjEyOmNvbmZpZyBNV0lGSUVYX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg2L1NEODc4Ny9TRDg3OTcvU0Q4ODg3L1NEODg5Ny9TRDg5NzcvU0Q4OTc4L1NEODk4Ny9TRDg5OTdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI1OmNvbmZpZyBNV0lGSUVYX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mzc6Y29uZmlnIE1XSUZJRVhfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIGl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhZGRpdGlvbjogYSBjaGVjayBmb3IgYSBkZXZpY2UgcHJvcGVydHkgY2FsbGVkIGBtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgbWlub3IgZnVuY3Rpb25hbCB0d2VhayDigJMgaXQgaWdub3JlcyBhIHJlZ3VsYXRvcnkgaGludCBpZiB0aGlzIHByb3BlcnR5IGlzIHNldC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8KCkhvbmVzdGx5LCBpdCBzZWVtcyBsaWtlIGEgcmVhbCBsb25nIHNob3QuIFRoZSBjaGFuZ2UgaXRzZWxmIGlzIGp1c3QgYSBzaW5nbGUgYGlmYCBzdGF0ZW1lbnQgdGhhdCBjaGVja3MgYSBib29sZWFuIHByb3BlcnR5LiBJZiB0aGF0IHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCBpdCBza2lwcyB0aGUgYHJlZ3VsYXRvcnlfaGludCh3aXBoeSwgY291bnRyeV9jb2RlKWAgY2FsbC4gVGhpcyBpcyBpbmNyZWRpYmx5IHRyaXZpYWwuIFdlJiMzOTtyZSBub3QgdGFsa2luZyBhYm91dCBpbnRyb2R1Y2luZyBjb21wbGV4IGxvZ2ljLCBhbnkgbmV3IG1lbW9yeSBtYW5hZ2VtZW50LCBvciBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0JiMzOTtzIGxpdGVyYWxseSBqdXN0IGEgZmxhZyB0byBieXBhc3MgYSBoaW50LgoKQW5kIG9uIHRvcCBvZiB0aGF0LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIE1hcnZlbGwgV2lGaSBkZXZpY2UgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHBhdGguIFdoaWxlIEkgc3VwcG9zZSBpdCAqY291bGQqIGJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIHRoaXMgcGFydGljdWxhciBjaGFuZ2UgaXRzZWxmIGlzIHNvIHNpbXBsZSB0aGF0IEkmIzM5O20gaGlnaGx5IGRvdWJ0ZnVsIHRoZXJlIGFyZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBvciBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgbG9naWMgZXJyb3JzIHdvcnRoIHNwZW5kaW5nIHRpbWUgb24uCgpIYW5nIG9uIGEgc2Vjb25kLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXksIOKAnFJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnPigKYgQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJl4oCm4oCdIElzIHRoaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUbyBnZXQgdG8gYG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTFgLCB3aGljaCBpcyB3aGVyZSB0aGlzIGNoZWNrIHJlc2lkZXMsIHRoZSBkcml2ZXIgbmVlZHMgdG8gbG9hZCBmaXJtd2FyZS4gVGhhdCYjMzk7cyBhIGdvb2QgcXVlc3Rpb24uIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoaXMgZmlybXdhcmUgbG9hZCBwYXRoOyBsZXQmIzM5O3MgY2hlY2sgYF9td2lmaWV4X2Z3X2RwY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVxdWVzdF9maXJtd2FyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz01MzU9c3RhdGljIGludCBfbXdpZmlleF9md19kcGMoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU2Ny1cdGlmIChjYWxfZGF0YV9jZmcpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6NTY4Olx0XHRpZiAoKHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2YWRhcHRlci1cdTAwM2VjYWxfZGF0YSwgY2FsX2RhdGFfY2ZnLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy01NjktXHRcdFx0XHQgICAgICBhZGFwdGVyLVx1MDAzZWRldikpIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy01NzAtXHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjU3MTpcdFx0XHRcdCAgICBcJiMzNDtDYWwgZGF0YSByZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTcyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9Njk4PXN0YXRpYyBpbnQgbXdpZmlleF9pbml0X2h3X2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy03MTAtXHRpZiAocmVxX2Z3X25vd2FpdCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo3MTE6XHRcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCAxLCBhZGFwdGVyLVx1MDAzZWZ3X25hbWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTcxMi1cdFx0XHRcdFx0ICAgICAgYWRhcHRlci1cdTAwM2VkZXYsIEdGUF9LRVJORUwsIGFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy03MTQtXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo3MTU6XHRcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2YWRhcHRlci1cdTAwM2VmaXJtd2FyZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNzE2LVx0XHRcdFx0ICAgICAgIGFkYXB0ZXItXHUwMDNlZndfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTcyMC1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjcyMTpcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsIFwmIzM0O3JlcXVlc3RfZmlybXdhcmUlcyBlcnJvciAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNzIyLVx0XHRcdCAgICByZXFfZndfbm93YWl0ID8gXCYjMzQ7X25vd2FpdFwmIzM0OyA6IFwmIzM0O1wmIzM0OywgcmV0KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM9MjA1PXN0YXRpYyBpbnQgbXdpZmlleF9yZXF1ZXN0X3JncG93ZXJfdGFibGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMjI5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjIzMDpcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcmdwb3dlcl9kYXRhLCByZ3Bvd2VyX3RhYmxlX25hbWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMjMxLVx0XHRcdFx0ICAgICAgYWRhcHRlci1cdTAwM2VkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRmlybXdhcmUgTG9hZGluZyBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBtd2lmaWV4YCBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGVycm9yIHNjZW5hcmlvLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hhdCBoYXBwZW5zIGlmIGByZXF1ZXN0X2Zpcm13YXJlYCBmYWlscy4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGxvYWQgZmlybXdhcmUsIHRoZW4gdGhlIGBfbXdpZmlleF9md19kcGNgIChEaXJlY3QgUHJvY2VkdXJlIENhbGwpIHJvdXRpbmUgaXMgZXZlbnR1YWxseSBjYWxsZWQuIEJ1dCB0aGUgY3JpdGljYWwgcXVlc3Rpb24sIGFuZCB0aGUgcmVhc29uIEkmIzM5O20gaGVyZSwgaXMgKndoYXQgaXMgdGhlIHZhbHVlIG9mIGZpcm13YXJlKj8KCkhhbmcgb24gYSBtb21lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSB0aGlua2luZyBjbGVhcmx5LiBJdCBhcHBlYXJzIHRoYXQgdGhlIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAgZnVuY3Rpb24gKmRpcmVjdGx5KiBjYWxscyBgX213aWZpZXhfZndfZHBjYC4gT2theS4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljOiBJZiB0aGF0IGluaXRpYWwgY2FsbCB0byBgcmVxdWVzdF9maXJtd2FyZWAgcmV0dXJucyBhbiBlcnJvciwgbXkgdGhpbmtpbmcgdGVsbHMgbWUgdGhhdCB0aGUgc3Vic2VxdWVudCBjYWxsYmFjayBmcm9tIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAsIGBfbXdpZmlleF9md19kcGNgLCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBgZmlybXdhcmVgIHNldCB0byBgTlVMTGAuCgpTbywgdGhlIGtleSBoZXJlIGlzIHdoYXQgaGFwcGVucyAqaW5zaWRlKiBgX213aWZpZXhfZndfZHBjYCBpZiBgZmlybXdhcmVgIGlzIGluZGVlZCBudWxsLiBUaGUgZm9jdXMgaGVyZSBpcyBvbiB0aGF0IGNvbmRpdGlvbi4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdHJhY2UgdGhlIGNvZGUgZmxvdywgYW5kIGhvdyB0aGUgcHJvZ3JhbSByZWFjdHMgdG8gdGhpcyBzY2VuYXJpby4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIHBhdGggd2hlcmUgdGhlIHBvaW50ZXIgKmZpcm13YXJlKiBiZWNvbWVzIGBOVUxMYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWYgXFwoIWZpcm13YXJlXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTUzNT1zdGF0aWMgaW50IF9td2lmaWV4X2Z3X2RwYyhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo1NDU6XHRpZiAoIWZpcm13YXJlKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU0Ni1cdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jPTEzNzA9c3RhdGljIGludCBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMTM4MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzoxMzgyOlx0aWYgKCFmaXJtd2FyZSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTEzODMtXHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTIzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGaXJtd2FyZSBJbml0aWFsaXphdGlvbiBJc3N1ZXMqKgoKT2theSwgc28gaWYgdGhlIGZpcm13YXJlIGRvZXNuJiMzOTt0IGxvYWQgY29ycmVjdGx5IOKAkyBtZWFuaW5nIGAhZmlybXdhcmVgIGlzIHRydWUg4oCTIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhhdCBgX213aWZpZXhfZndfZHBjYCBpcyBnb2luZyB0byBlcnJvciBvdXQgYmVmb3JlIGl0IGNhbiBldmVuIGdldCB0byBjYWxsaW5nIGBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExYC4gVGhhdCB3b3VsZCBleHBsYWluIGNlcnRhaW4gaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMgSSYjMzk7dmUgYmVlbiBzZWVpbmcuIFNlZW1zIGxpa2UgYSBsb2dpY2FsIGxpbmssIGFuZCBhIGNvbW1vbiBwcm9ibGVtLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBhcmNoaXRlY3R1cmUsIGFuZCB0aGF0IHNwZWNpZmljIGNhbGxiYWNrLCBpdCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGF0IHRoZSBgX213aWZpZXhfZndfZHBjYCBjb2RlIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhpbmdzIG1pZ2h0IGJlIGZhbGxpbmcgYXBhcnQgaW4gdGhhdCBzY2VuYXJpby4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzU6XHRzdGF0aWMgaW50IF9td2lmaWV4X2Z3X2RwYyhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuIDUzNjpcdHtcbiA1Mzc6XHRcdGludCByZXQ7XG4gNTM4Olx0XHRjaGFyIGZtdFs2NF07XG4gNTM5Olx0XHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gY29udGV4dDtcbiA1NDA6XHRcdHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlIGZ3O1xuIDU0MTpcdFx0Ym9vbCBpbml0X2ZhaWxlZCA9IGZhbHNlO1xuIDU0MjpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjtcbiA1NDM6XHRcdHN0cnVjdCBjb21wbGV0aW9uICpmd19kb25lID0gYWRhcHRlci1cdTAwM2Vmd19kb25lO1xuIDU0NDpcdFxuIDU0NTpcdFx0aWYgKCFmaXJtd2FyZSkge1xuIDU0NjpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiA1NDc6XHRcdFx0XHQgICAgXCYjMzQ7RmFpbGVkIHRvIGdldCBmaXJtd2FyZSAlc1xcblwmIzM0OywgYWRhcHRlci1cdTAwM2Vmd19uYW1lKTtcbiA1NDg6XHRcdFx0Z290byBlcnJfZG5sZF9mdztcbiA1NDk6XHRcdH1cbiA1NTA6XHRcbiA1NTE6XHRcdG1lbXNldChcdTAwMjZmdywgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlKSk7XG4gNTUyOlx0XHRhZGFwdGVyLVx1MDAzZWZpcm13YXJlID0gZmlybXdhcmU7XG4gNTUzOlx0XHRmdy5md19idWYgPSAodTggKikgYWRhcHRlci1cdTAwM2VmaXJtd2FyZS1cdTAwM2VkYXRhO1xuIDU1NDpcdFx0ZncuZndfbGVuID0gYWRhcHRlci1cdTAwM2VmaXJtd2FyZS1cdTAwM2VzaXplO1xuIDU1NTpcdFxuIDU1NjpcdFx0aWYgKGFkYXB0ZXItXHUwMDNlaWZfb3BzLmRubGRfZncpIHtcbiA1NTc6XHRcdFx0cmV0ID0gYWRhcHRlci1cdTAwM2VpZl9vcHMuZG5sZF9mdyhhZGFwdGVyLCBcdTAwMjZmdyk7XG4gNTU4Olx0XHR9IGVsc2Uge1xuIDU1OTpcdFx0XHRyZXQgPSBtd2lmaWV4X2RubGRfZncoYWRhcHRlciwgXHUwMDI2ZncpO1xuIDU2MDpcdFx0fVxuIDU2MTpcdFxuIDU2MjpcdFx0aWYgKHJldCA9PSAtMSlcbiA1NjM6XHRcdFx0Z290byBlcnJfZG5sZF9mdztcbiA1NjQ6XHRcbiA1NjU6XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIE1TRywgXCYjMzQ7V0xBTiBGVyBpcyBhY3RpdmVcXG5cJiMzNDspO1xuIDU2NjpcdFxuIDU2NzpcdFx0aWYgKGNhbF9kYXRhX2NmZykge1xuIDU2ODpcdFx0XHRpZiAoKHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2YWRhcHRlci1cdTAwM2VjYWxfZGF0YSwgY2FsX2RhdGFfY2ZnLFxuIDU2OTpcdFx0XHRcdFx0ICAgICAgYWRhcHRlci1cdTAwM2VkZXYpKSBcdTAwM2MgMClcbiA1NzA6XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiA1NzE6XHRcdFx0XHRcdCAgICBcJiMzNDtDYWwgZGF0YSByZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbiA1NzI6XHRcdH1cbiA1NzM6XHRcbiA1NzQ6XHRcdC8qIGVuYWJsZSBob3N0IGludGVycnVwdCBhZnRlciBmdyBkbmxkIGlzIHN1Y2Nlc3NmdWwgKi9cbiA1NzU6XHRcdGlmIChhZGFwdGVyLVx1MDAzZWlmX29wcy5lbmFibGVfaW50KSB7XG4gNTc2Olx0XHRcdGlmIChhZGFwdGVyLVx1MDAzZWlmX29wcy5lbmFibGVfaW50KGFkYXB0ZXIpKVxuIDU3NzpcdFx0XHRcdGdvdG8gZXJyX2RubGRfZnc7XG4gNTc4Olx0XHR9XG4gNTc5Olx0XG4gNTgwOlx0XHRyZXQgPSBtd2lmaWV4X2luaXRfZncoYWRhcHRlcik7XG4gNTgxOlx0XHRpZiAocmV0ID09IC0xKVxuIDU4MjpcdFx0XHRnb3RvIGVycl9pbml0X2Z3O1xuIDU4MzpcdFxuIDU4NDpcdFx0bWF5YmVfcXVpcmtfZndfZGlzYWJsZV9kcyhhZGFwdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDExMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogTWFydmVsbCBXaUZpIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBUaGUgY29yZSBjaGFuZ2UgaXMgYSBzaW1wbGUgYm9vbGVhbiBjaGVjayB3aXRoaW4gYG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTFgOiBlc3NlbnRpYWxseSwgaXQmIzM5O3Mgc2tpcHBpbmcgYSByZWd1bGF0b3J5IGhpbnQgYmFzZWQgb24gYSBkZXZpY2UgdHJlZSBwcm9wZXJ0eS4gVGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IGNvbXBsZXggbG9naWMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc3RhdGUgY2hhbmdlcyB0aGF0IHdvdWxkIHR5cGljYWxseSBiZSBhc3NvY2lhdGVkIHdpdGggYnVncyB0aGF0IGZ1enppbmcgd291bGQgZmluZC4gSXQmIzM5O3MgYSBzaW5nbGUsIGVhc2lseSB1bmRlcnN0b29kIGNvbmRpdGlvbi4KClRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGd1aWRlIG1lOiBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywmIzM0OyAmIzM0O0NoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMsJiMzNDsgb3IgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7IFdoaWxlIHRoaXMgbW9kaWZpZXMgZXhlY3V0aW9uIGZsb3cgYnkgc2tpcHBpbmcgdGhlIHJlZ3VsYXRvcnkgaGludCwgaXQmIzM5O3MgdHJpdmlhbCwgYW5kIGNyaXRpY2FsbHksIGl0IHNlZW1zIGRpZmZpY3VsdCB0byByZWFjaC4KCk15IG5leHQgdGhvdWdodCBmb2N1c2VzIG9uIHJlYWNoYWJpbGl0eTogdGhpcyBjb2RlIHJlcXVpcmVzIHRoZSBNYXJ2ZWxsIFdpRmkgZmlybXdhcmUgdG8gYmUgbG9hZGVkLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IHByb3ZpZGUgc3BlY2lmaWMgZmlybXdhcmUsIHVubGVzcyBmYXVsdCBpbmplY3Rpb24gaXMgdXNlZCAodHJpdmlhbCBjaGFuZ2UpLiBIb3dldmVyLCB0aGUgY2hhbmdlIGl0c2VsZiBpcyB0cml2aWFsLiBDYW4gYHN5ei11c2JnZW5gIHRyaWdnZXIgdGhpcyB3aXRoIHRoZSByaWdodCBpbWFnZT8gSXQmIzM5O3MganVzdCByZWFkaW5nIGEgZGV2aWNlIHByb3BlcnR5LCB3aGljaCBpcyBzaW1wbGUuIFN0aWxsLCBpdCB3b3VsZCBuZWVkIHRoZSBmaXJtd2FyZSwgYW5kIHRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGEgc2ltcGxlOiBgIWRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woYWRhcHRlci0mZ3Q7ZGV2LCAmIzM0O21hcnZlbGwsaW52YWxpZC1yZWctaGludC1pbi1yb20mIzM0OylgLiBUaGUgY29kZSBhbHNvIG1vZGlmaWVzIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBkZXZpY2UgdHJlZSBiaW5kaW5ncywgd2hpY2ggc2VlbXMgbGlrZSBhIGZsYWcgdG8gcmV0dXJuIGBmYWxzZWAgcmlnaHQgYXdheS4KClRoZSBwYXRjaCBtb2RpZmllcyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sYCwgYGFyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c2AsIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNgLiBTbyBpdCYjMzk7cyB2ZXJ5IG1pbm9yIGFuZCByZXF1aXJlcyBmaXJtd2FyZSB0byBiZSBwcmVzZW50LgoKQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgdGhpcyByZXF1aXJlcyBzcGVjaWZpYyBmaXJtd2FyZSB0byBiZSBsb2FkZWQuIEl0JiMzOTtzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggaXMgYW5vdGhlciBuZWdhdGl2ZSBzaWduYWwuIFRoaXMgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDsKClRoaW5raW5nIHRocm91Z2ggc3l6a2FsbGVyJiMzOTtzIGNhcGFiaWxpdGllcywgaXQgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMuIEhvd2V2ZXIsIHRoaXMgY29kZSByZXF1aXJlcyB0aGF0IHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIHJlc3BvbmRzIGNvcnJlY3RseSB0byBmaXJtd2FyZSBkb3dubG9hZCBjb21tYW5kcy4gYG13aWZpZXhfZG5sZF9md2AgaXMgdGhlIHJlbGV2YW50IGNvZGUuIFN5emthbGxlciYjMzk7cyBVU0IgZnV6emVyIGdlbmVyYXRlcyByYW5kb20gcmVzcG9uc2VzLiBJdCYjMzk7cyBleHRyZW1lbHkgdW5saWtlbHkgdGhhdCByYW5kb20gVVNCIHJlc3BvbnNlcyB3b3VsZCBjb3JyZWN0bHkgZW11bGF0ZSB0aGUgY29tcGxleCBNYXJ2ZWxsIFdpRmkgZmlybXdhcmUgZG93bmxvYWQgYW5kIGluaXRpYWxpemF0aW9uIHByb3RvY29sIHRvIHRoZSBwb2ludCBvZiBleGVjdXRpbmcgYG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTFgLgoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSB0cml2aWFsLCByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgZmlybXdhcmUsIGFuZCBpcyBoaWdobHkgaW1wcm9iYWJsZSB0byBiZSByZWFjaGVkIGluIHRoZSBzdGFuZGFyZCBTeXprYWxsZXIgZW52aXJvbm1lbnQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFuIHVucmVhY2hhYmxlLCBvciBhdCBsZWFzdCB1bmludGVyZXN0aW5nLCBjb2RlIHBhdGggZm9yIGZ1enppbmcgcHVycG9zZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfZG5sZF9mdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2luaXQuYz01OTg9bXdpZmlleF9zaHV0ZG93bl9kcnYoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvaW5pdC5jLTY2NS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9pbml0LmM6NjY2OmludCBtd2lmaWV4X2RubGRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9pbml0LmMtNjY3LVx0XHQgICAgc3RydWN0IG13aWZpZXhfZndfaW1hZ2UgKnBtZncpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2luaXQuYy03MTctfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2luaXQuYzo3MTg6RVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9kbmxkX2Z3KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTUzNT1zdGF0aWMgaW50IF9td2lmaWV4X2Z3X2RwYyhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTU4LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6NTU5Olx0XHRyZXQgPSBtd2lmaWV4X2RubGRfZncoYWRhcHRlciwgXHUwMDI2ZncpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy01NjAtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMDYwPXZvaWQgbXdpZmlleF9zaHV0ZG93bl9kcnYoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTEwNjEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjEwNjI6aW50IG13aWZpZXhfZG5sZF9mdyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICopO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMDYzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmM9MTAyNT1zdGF0aWMgaW50IG13aWZpZXhfc2Rpb19kbmxkX2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xMDMxLVx0c2Rpb19jbGFpbV9ob3N0KGNhcmQtXHUwMDNlZnVuYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjEwMzI6XHRyZXQgPSBtd2lmaWV4X2RubGRfZncoYWRhcHRlciwgZncpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xMDMzLVx0c2Rpb19yZWxlYXNlX2hvc3QoY2FyZC1cdTAwM2VmdW5jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZpcm13YXJlIERvd25sb2FkIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBtd2lmaWV4X3VzYmAgbW9kdWxlLCBhbmQgc29tZXRoaW5nIGp1c3QgY2xpY2tlZC4gSXQmIzM5O3MgZ290IGl0cyBvd24gZGVkaWNhdGVkIGBkbmxkX2Z3YCBjYWxsYmFjayBkZWZpbmVkLiBUaGF0JiMzOTtzIGtleSwgaXNuJiMzOTt0IGl0PyBNZWFucyB3ZSYjMzk7cmUgbm90IGp1c3QgcmVseWluZyBvbiBzb21lIGdlbmVyaWMgZnJhbWV3b3JrIGZvciB0aGUgZmlybXdhcmUgZG93bmxvYWQ7IGl0JiMzOTtzIGdvdCBhIGN1c3RvbS10YWlsb3JlZCBwcm9jZXNzIHNwZWNpZmljYWxseSBmb3IgdGhlIFVTQiBpbnRlcmZhY2UuIFRoYXQgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIGNvbnNpZGVyaW5nIHRoZSBudWFuY2VzIGludm9sdmVkIHdpdGggVVNCIGRldmljZSBpbml0aWFsaXphdGlvbiwgZW51bWVyYXRpb24sIGFuZCBkYXRhIHRyYW5zZmVyLiBVbmRlcnN0YW5kaW5nICp0aGF0KiBjYWxsYmFjayBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIFVTQiBmaXJtd2FyZSB1cGxvYWQgZmxvdy4gV2UmIzM5O2xsIGhhdmUgdG8gZGlnIGRlZXBlciwgc2VlIHdoYXQgc29ydCBvZiBzcGVjaWZpYyBoYW5kbGluZyBpdCBwZXJmb3JtcywgaWYgdGhlcmUmIzM5O3MgYW55IGNydWNpYWwgZXJyb3IgY2hlY2tpbmcgdGhlcmUsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHN0YWdlcyBvZiB0aGUgZG93bmxvYWQuIFRoaXMgbmVlZHMgdG8gYmUgdGhlIGp1bXBpbmcgb2ZmIHBvaW50IGZvciB0aGUgVVNCIGZpcm13YXJlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbmxkX2Z3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz0xMzcwPXN0YXRpYyBpbnQgbXdpZmlleF9wcm9nX2Z3X3dfaGVscGVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1MDYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MTUwNzpzdGF0aWMgaW50IG13aWZpZXhfdXNiX2RubGRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTA4LVx0XHRcdHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICpmdylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM9MTU4ND1zdGF0aWMgY29uc3Qgc3RydWN0IG13aWZpZXhfaWZfb3BzIHVzYl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1OTAtXHQvKiBVU0Igc3BlY2lmaWMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzoxNTkxOlx0LmRubGRfZncgPVx0XHRtd2lmaWV4X3VzYl9kbmxkX2Z3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1OTItXHQuY21kcnNwX2NvbXBsZXRlID1cdG13aWZpZXhfdXNiX2NtZF9ldmVudF9jb21wbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbXdpZmlleF91c2JfZG5sZF9md2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgbXdpZmlleF91c2JfZG5sZF9md2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gZmlybXdhcmUgZG93bmxvYWQgb3ZlciBVU0IsIGxpa2VseSBmb3IgYSBNYXJ2ZWxsIFdpLUZpIGNoaXBzZXQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2QgaW1tZWRpYXRlbHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYXJndW1lbnRzIGl0IHRha2VzLiBBcmUgd2UgcGFzc2luZyBhIGZpcm13YXJlIGltYWdlLCBkZXNjcmlwdG9yLCBvciBzb21lIG90aGVyIGNvbnRyb2wgc3RydWN0dXJlPyBBcmUgdGhlcmUgYW55IHNpemUgbGltaXRzIGJlaW5nIGNoZWNrZWQ/IFdoYXQgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZD8KCk15IG1pbmQgaXMgYWxyZWFkeSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGlzc3Vlcy4gSXMgdGhlcmUgcHJvcGVyIGVycm9yIGNoZWNraW5nIGZvciBVU0IgdHJhbnNmZXJzPyBDb3VsZCB3ZSBiZSB2dWxuZXJhYmxlIHRvIGJ1ZmZlciBvdmVyZmxvd3MgaWYgdGhlIGZpcm13YXJlIGltYWdlIGlzIG1hbGljaW91cyBvciBjb3JydXB0ZWQ/IFdoYXQmIzM5O3MgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MsIGlmIGFueSwgZm9yIHRoZSBkb3dubG9hZGVkIGZpcm13YXJlPyBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIHRvIHByZXZlbnQgZG93bmdyYWRlIGF0dGFja3M/CgpJJiMzOTtkIHF1aWNrbHkgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgVVNCIHRyYW5zZmVyIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQsIGxpa2UgYHVzYl9idWxrX21zZ2Agb3IgYHVzYl9jb250cm9sX21zZ2AuIEkmIzM5O2Qgd2FudCB0byBjb25maXJtIHRoYXQgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjb3JyZWN0bHkuIEFueSBkYXRhIHN0YWdpbmcsIERNQSB1c2FnZSwgb3IgaW50ZXJydXB0IGhhbmRsaW5nIHdvdWxkIHdhcnJhbnQgY2xvc2VyIHNjcnV0aW55LiBBbmQsIG9mIGNvdXJzZSwgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIGNhbGwuCgpGaW5hbGx5LCBJ4oCZZCBmb2N1cyBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24uIERvZXMgYSBzdWNjZXNzIGluZGljYXRlIHRoYXQgdGhlIGRyaXZlciBoYXMgY29tcGxldGVseSB2ZXJpZmllZCBhbmQgc3RhcnRlZCB0aGUgbmV3IGZpcm13YXJlPyBPciBkb2VzIGl0IHJlcHJlc2VudCBhbiBpbmNvbXBsZXRlIHN0YXRlPyBXaGF0IGtpbmQgb2YgbG9nZ2luZyBhbmQgZGVidWdnaW5nIGNhcGFiaWxpdGllcyBhcmUgYXZhaWxhYmxlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nPyBCYXNpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyByb2J1c3QsIHNlY3VyZSwgYW5kIHJlbGlhYmxlIHRoaXMgZmlybXdhcmUgZG93bmxvYWQgcHJvY2VzcyBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDc6XHRzdGF0aWMgaW50IG13aWZpZXhfdXNiX2RubGRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbjE1MDg6XHRcdFx0XHRzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSAqZncpXG4xNTA5Olx0e1xuMTUxMDpcdFx0aW50IHJldDtcbjE1MTE6XHRcdHN0cnVjdCB1c2JfY2FyZF9yZWMgKmNhcmQgPSAoc3RydWN0IHVzYl9jYXJkX3JlYyAqKWFkYXB0ZXItXHUwMDNlY2FyZDtcbjE1MTI6XHRcbjE1MTM6XHRcdGlmIChjYXJkLVx1MDAzZXVzYl9ib290X3N0YXRlID09IFVTQjhYWFhfRldfRE5MRCkge1xuMTUxNDpcdFx0XHRyZXQgPSBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXIoYWRhcHRlciwgZncpO1xuMTUxNTpcdFx0XHRpZiAocmV0KVxuMTUxNjpcdFx0XHRcdHJldHVybiAtMTtcbjE1MTc6XHRcbjE1MTg6XHRcdFx0LyogQm9vdCBzdGF0ZSBjaGFuZ2VzIGFmdGVyIHN1Y2Nlc3NmdWwgZmlybXdhcmUgZG93bmxvYWQgKi9cbjE1MTk6XHRcdFx0aWYgKGNhcmQtXHUwMDNldXNiX2Jvb3Rfc3RhdGUgPT0gVVNCOFhYWF9GV19ETkxEKVxuMTUyMDpcdFx0XHRcdHJldHVybiAtMTtcbjE1MjE6XHRcdH1cbjE1MjI6XHRcbjE1MjM6XHRcdHJldCA9IG13aWZpZXhfdXNiX3J4X2luaXQoYWRhcHRlcik7XG4xNTI0Olx0XHRpZiAoIXJldClcbjE1MjU6XHRcdFx0cmV0ID0gbXdpZmlleF91c2JfdHhfaW5pdChhZGFwdGVyKTtcbjE1MjY6XHRcbjE1Mjc6XHRcdHJldHVybiByZXQ7XG4xNTI4Olx0fVxuMTUyOTpcdFxuMTUzMDpcdHN0YXRpYyB2b2lkIG13aWZpZXhfc3VibWl0X3J4X3VyYihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCB1OCBlcClcbjE1MzE6XHR7XG4xNTMyOlx0XHRzdHJ1Y3QgdXNiX2NhcmRfcmVjICpjYXJkID0gKHN0cnVjdCB1c2JfY2FyZF9yZWMgKilhZGFwdGVyLVx1MDAzZWNhcmQ7XG4xNTMzOlx0XG4xNTM0Olx0XHRza2JfcHVzaChjYXJkLVx1MDAzZXJ4X2NtZC5za2IsIElOVEZfSEVBREVSX0xFTik7XG4xNTM1Olx0XHRpZiAoKGVwID09IGNhcmQtXHUwMDNlcnhfY21kX2VwKSBcdTAwMjZcdTAwMjZcbjE1MzY6XHRcdCAgICAoIWF0b21pY19yZWFkKFx1MDAyNmNhcmQtXHUwMDNlcnhfY21kX3VyYl9wZW5kaW5nKSkpXG4xNTM3Olx0XHRcdG13aWZpZXhfdXNiX3N1Ym1pdF9yeF91cmIoXHUwMDI2Y2FyZC1cdTAwM2VyeF9jbWQsXG4xNTM4Olx0XHRcdFx0XHRcdCAgTVdJRklFWF9SWF9DTURfQlVGX1NJWkUpO1xuMTUzOTpcdFxuMTU0MDpcdFx0cmV0dXJuO1xuMTU0MTpcdH1cbjE1NDI6XHRcbjE1NDM6XHRzdGF0aWMgaW50IG13aWZpZXhfdXNiX2NtZF9ldmVudF9jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuMTU0NDpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xNTQ1Olx0e1xuMTU0NjpcdFx0bXdpZmlleF9zdWJtaXRfcnhfdXJiKGFkYXB0ZXIsIE1XSUZJRVhfVVNCX0VQX0NNRF9FVkVOVCk7XG4xNTQ3Olx0XG4xNTQ4Olx0XHRyZXR1cm4gMDtcbjE1NDk6XHR9XG4xNTUwOlx0XG4xNTUxOlx0LyogVGhpcyBmdW5jdGlvbiB3YWtlcyB1cCB0aGUgY2FyZC4gKi9cbjE1NTI6XHRzdGF0aWMgaW50IG13aWZpZXhfcG1fd2FrZXVwX2NhcmQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbjE1NTM6XHR7XG4xNTU0Olx0XHQvKiBTaW11bGF0aW9uIG9mIEhTX0FXQUtFIGV2ZW50ICovXG4xNTU1Olx0XHRhZGFwdGVyLVx1MDAzZXBtX3dha2V1cF9md190cnkgPSBmYWxzZTtcbjE1NTY6XHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZhZGFwdGVyLVx1MDAzZXdha2V1cF90aW1lcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjIwCgkJCQkJCQlvdXRwdXQ6IDExNgoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbXdpZmlleF9wcm9nX2Z3X3dfaGVscGVyYCBmdW5jdGlvbiBjYWxsLiBUaGUgZ29hbCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byB0ZXN0IGl0IHdpdGggYSAmIzM0O2Zha2UmIzM0OyBmaXJtd2FyZS4gTm93LCBsZXQmIzM5O3Mgc2VlLi4uIGBtd2lmaWV4X3VzYl9kbmxkX2Z3YCBpcyBnb2luZyB0byByZXR1cm4gLTEgaWYgYGNhcmQtJmd0O3VzYl9ib290X3N0YXRlYCBpcyBlcXVhbCB0byBgVVNCOFhYWF9GV19ETkxEYCBhZnRlciBydW5uaW5nIGBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXJgLCB3aGljaCBtZWFucyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIGZpcm13YXJlIHRvIHRoZSBkZXZpY2Ugb3ZlciBVU0IuIFRoZSBwcm9ibGVtLCBhcyBhbHdheXMgd2l0aCB0aGlzIGtpbmQgb2YgdGhpbmcsIGlzIHRoYXQgc3VjY2Vzc2Z1bCBleGVjdXRpb24gcmVsaWVzIG9uIHRoZSB0YXJnZXQgZGV2aWNlIHJlc3BvbmRpbmcgY29ycmVjdGx5LCB3aGljaCBtaWdodCBub3QgaGFwcGVuLgoKVGhlIHJlYWxseSBiaWcgaXNzdWUgaGVyZSBpcyB0aGF0IFN5emthbGxlcuKAmXMgVVNCIGZ1enplciBpcyB0aHJvd2luZyByYW5kb20gcmVzcG9uc2VzIGF0IHRoaXMgdGhpbmcuIFRoZSBjaGFuY2VzIG9mIGl0ICphY3R1YWxseSogZW11bGF0aW5nIGEgc3VjY2Vzc2Z1bCBmaXJtd2FyZSBkb3dubG9hZCBhbmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoaXMgc3BlY2lmaWMgTWFydmVsbCBXaUZpIGNoaXAgYXJlIGFzdHJvbm9taWNhbGx5IGxvdy4gV2UgYXJlIGRlYWxpbmcgd2l0aCBhIGNvbXBsZXggaGFyZHdhcmUgaW50ZXJhY3Rpb24gdGhhdCByZWxpZXMgb24gdmVyeSBzcGVjaWZpYyByZXNwb25zZXMgYW5kIHN0YXRlIGNoYW5nZXMuCgpQbHVzLCBJJiMzOTt2ZSBzZWVuIHRoZSBjb2RlOiB0aGUgYWN0dWFsIGNoYW5nZSBpdHNlbGYgaXMgcmlkaWN1bG91c2x5IHRyaXZpYWwuIEl0JiMzOTtzIGp1c3QgYSBzaW5nbGUgYm9vbGVhbiBjaGVjayBvZiBhIGRldmljZSBwcm9wZXJ0eToKCmBgYGMKCQkJCWlmIChjb3VudHJ5X2NvZGUgJmFtcDsmYW1wOwoJCQkJICAgICFkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGFkYXB0ZXItJmd0O2RldiwKCQkJCQkJCSAgICAgICAmIzM0O21hcnZlbGwsaW52YWxpZC1yZWctaGludC1pbi1yb20mIzM0OykgJmFtcDsmYW1wOwoJCQkJICAgIHJlZ3VsYXRvcnlfaGludCh3aXBoeSwgY291bnRyeV9jb2RlKSkKYGBgCgpUaGlzIGlzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IG9mIGF0dGVtcHRpbmcgdG8gZnV6ei4gVGhlIHJldHVybiBpcyBnb2luZyB0byBiZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0IHRoaXMgY2hhbmdlIGlzIGV4dHJlbWVseSB0cml2aWFsIOKAkyBhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9uIGEgZGV2aWNlIHByb3BlcnR5IOKAkyBhbmQgaXQmIzM5O3MgYnVyaWVkIGluIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGluaXRpYWxpemF0aW9uIHBhdGggdGhhdCByZXF1aXJlcyBhICpzdWNjZXNzZnVsKiBmaXJtd2FyZSBsb2FkIGFuZCBjb21wbGV4IGRldmljZSBpbnRlcmFjdGlvbi4gVGhpcyBpcyBiYXNpY2FsbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IGVpdGhlciBzcGVjaWZpYyBoYXJkd2FyZSBvciBhbiBleHRyZW1lbHkgc3BlY2lhbGl6ZWQgZW11bGF0b3IuIExldCYjMzk7cyBtb3ZlIG9uIHRvIHNvbWV0aGluZyB0aGF0IG9mZmVycyBhIGJldHRlciByZXR1cm4gb24gaW52ZXN0bWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSAoYSBzaW5nbGUgYm9vbGVhbiBjaGVjayBvZiBhIGRldmljZSBwcm9wZXJ0eSB0byBza2lwIGEgcmVndWxhdG9yeSBoaW50KSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgTWFydmVsbCBtd2lmaWV4IHdpcmVsZXNzIGRyaXZlci4gUmVhY2hpbmcgdGhpcyBjb2RlIHJlcXVpcmVzIHN1Y2Nlc3NmdWwgZmlybXdhcmUgbG9hZGluZyBhbmQgY29tcGxleCBkZXZpY2UgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gYWNoaWV2ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIGdlbmVyaWMgVVNCIGVtdWxhdGlvbi4gR2l2ZW4gdGhlIHRyaXZpYWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyB1bnJlYWNoYWJpbGl0eSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSAoYSBzaW5nbGUgYm9vbGVhbiBjaGVjayBvZiBhIGRldmljZSBwcm9wZXJ0eSB0byBza2lwIGEgcmVndWxhdG9yeSBoaW50KSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgTWFydmVsbCBtd2lmaWV4IHdpcmVsZXNzIGRyaXZlci4gUmVhY2hpbmcgdGhpcyBjb2RlIHJlcXVpcmVzIHN1Y2Nlc3NmdWwgZmlybXdhcmUgbG9hZGluZyBhbmQgY29tcGxleCBkZXZpY2UgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gYWNoaWV2ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIGdlbmVyaWMgVVNCIGVtdWxhdGlvbi4gR2l2ZW4gdGhlIHRyaXZpYWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyB1bnJlYWNoYWJpbGl0eSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTc6NDUuNjA3MzU5MDA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxMTU3OTYwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSAoYSBzaW5nbGUgYm9vbGVhbiBjaGVjayBvZiBhIGRldmljZSBwcm9wZXJ0eSB0byBza2lwIGEgcmVndWxhdG9yeSBoaW50KSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgTWFydmVsbCBtd2lmaWV4IHdpcmVsZXNzIGRyaXZlci4gUmVhY2hpbmcgdGhpcyBjb2RlIHJlcXVpcmVzIHN1Y2Nlc3NmdWwgZmlybXdhcmUgbG9hZGluZyBhbmQgY29tcGxleCBkZXZpY2UgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gYWNoaWV2ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIGdlbmVyaWMgVVNCIGVtdWxhdGlvbi4gR2l2ZW4gdGhlIHRyaXZpYWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyB1bnJlYWNoYWJpbGl0eSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxNzo0NS42MDczNjM3NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzEzNjAwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMDE0NTI2YWZjOTBmZTFiZDZiOWYwNGI5YjYxZjY3ZGY1YzIyODkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDI3IDE4OjE3OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbFxcbmluZGV4IDkzMGI3MDBiNzNkMDAuLjlmOTA1ZWY1YzJjMDcgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sXFxuQEAgLTU5LDYgKzU5LDEyIEBAIHByb3BlcnRpZXM6XFxuICAgICBkZXNjcmlwdGlvbjogQ2FsaWJyYXRpb24gZGF0YSBmb3Igc3ViLWJhbmQgMyBpbiB0aGUgNUdIeiBiYW5kLlxcbiAgICAgbWF4SXRlbXM6IDUwMlxcbiBcXG4rICBtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tOlxcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvZmxhZ1xcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIFRoZSByZWd1bGF0b3J5IGhpbnQgaW4gUk9NIGNvbmZsaWN0cyB3aXRoIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uXFxuKyAgICAgIEl0IHNob3VsZCBiZSBpZ25vcmVkLCBzbyB0aGUgcGxhdGZvcm0gcmVndWxhdG9yeSBkb21haW4gY2FuIGJlIHVzZWQuXFxuK1xcbiAgIG1hcnZlbGwsd2FrZXVwLXBpbjpcXG4gICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxcbiAgICAgZGVzY3JpcHRpb246XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c1xcbmluZGV4IDRhYjQ1ZjI5NGRlMjIuLjJiZjI5OTgxYTAzMTMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzXFxuKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzg1LWxpbmtzeXMtcmFuZ28uZHRzXFxuQEAgLTE2NSw2ICsxNjUsMTUgQEAgXFx1MDAyNnNkaGNpIHtcXG4gXFx0d3AtaW52ZXJ0ZWQ7XFxuIFxcdGJ1cy13aWR0aCA9IFxcdTAwM2M4XFx1MDAzZTtcXG4gXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbitcXG4rXFx0I2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcdCNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rXFx0d2lmaUAxIHtcXG4rXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJtYXJ2ZWxsLHNkODg5N1xcXCI7XFxuK1xcdFxcdHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0bWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbTtcXG4rXFx0fTtcXG4gfTtcXG4gXFxuIFxcdTAwMjZ1c2IzXzFfdmJ1cyB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcXG5pbmRleCA3YTFiYTMyZjFmYjM2Li4yOTM4NzYzOTdiNjcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcXG5AQCAtNDg5Nyw3ICs0ODk3LDE0IEBAIGludCBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcdFxcdFxcdFxcdGNvdW50cnlfY29kZSA9XFxuIFxcdFxcdFxcdFxcdFxcdG13aWZpZXhfMTFkX2NvZGVfMl9yZWdpb24oXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXJlZ2lvbl9jb2RlKTtcXG4rXFxuK1xcdFxcdFxcdFxcdC8qIElmIHRoZSByZWcgaGludCBpbiBST00gY29uZmxpY3RzIHdpdGggcGxhdGZvcm1cXG4rXFx0XFx0XFx0XFx0ICogY29uZmlndXJhdGlvbiwgaXQgc2hvdWxkIGJlIGlnbm9yZWQsIHNvIHRoZVxcbitcXHRcXHRcXHRcXHQgKiBwbGF0Zm9ybSByZWd1bGF0b3J5IGRvbWFpbiBjYW4gYmUgdXNlZC5cXG4rXFx0XFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdFxcdGlmIChjb3VudHJ5X2NvZGUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICFkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGFkYXB0ZXItXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tXFxcIikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgIHJlZ3VsYXRvcnlfaGludCh3aXBoeSwgY291bnRyeV9jb2RlKSlcXG4gXFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgRVJST1IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwicmVndWxhdG9yeV9oaW50KCkgZmFpbGVkXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTc6NDYuOTM5NDM3NjQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzc3ODM3MDYyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSB0cml2aWFsIGZ1bmN0aW9uYWwgY2hhbmdlIChhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9mIGEgZGV2aWNlIHByb3BlcnR5IHRvIHNraXAgYSByZWd1bGF0b3J5IGhpbnQpIGluIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBNYXJ2ZWxsIG13aWZpZXggd2lyZWxlc3MgZHJpdmVyLiBSZWFjaGluZyB0aGlzIGNvZGUgcmVxdWlyZXMgc3VjY2Vzc2Z1bCBmaXJtd2FyZSBsb2FkaW5nIGFuZCBjb21wbGV4IGRldmljZSBpbnRlcmFjdGlvbiwgd2hpY2ggaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB0byBhY2hpZXZlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgZ2VuZXJpYyBVU0IgZW11bGF0aW9uLiBHaXZlbiB0aGUgdHJpdmlhbCBuYXR1cmUgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIHVucmVhY2hhYmlsaXR5LCBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEwMTQ1MjZhZmM5MGZlMWJkNmI5ZjA0YjliNjFmNjdkZjVjMjI4OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxODoxNzo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbFxuaW5kZXggOTMwYjcwMGI3M2QwMC4uOWY5MDVlZjVjMmMwNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvbWFydmVsbCxzZDg3ODcueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sXG5AQCAtNTksNiArNTksMTIgQEAgcHJvcGVydGllczpcbiAgICAgZGVzY3JpcHRpb246IENhbGlicmF0aW9uIGRhdGEgZm9yIHN1Yi1iYW5kIDMgaW4gdGhlIDVHSHogYmFuZC5cbiAgICAgbWF4SXRlbXM6IDUwMlxuIFxuKyAgbWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbTpcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvZmxhZ1xuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBUaGUgcmVndWxhdG9yeSBoaW50IGluIFJPTSBjb25mbGljdHMgd2l0aCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLlxuKyAgICAgIEl0IHNob3VsZCBiZSBpZ25vcmVkLCBzbyB0aGUgcGxhdGZvcm0gcmVndWxhdG9yeSBkb21haW4gY2FuIGJlIHVzZWQuXG4rXG4gICBtYXJ2ZWxsLHdha2V1cC1waW46XG4gICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuICAgICBkZXNjcmlwdGlvbjpcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zODUtbGlua3N5cy1yYW5nby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zODUtbGlua3N5cy1yYW5nby5kdHNcbmluZGV4IDRhYjQ1ZjI5NGRlMjIuLjJiZjI5OTgxYTAzMTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zODUtbGlua3N5cy1yYW5nby5kdHNcbisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c1xuQEAgLTE2NSw2ICsxNjUsMTUgQEAgXHUwMDI2c2RoY2kge1xuIFx0d3AtaW52ZXJ0ZWQ7XG4gXHRidXMtd2lkdGggPSBcdTAwM2M4XHUwMDNlO1xuIFx0c3RhdHVzID0gXCJva2F5XCI7XG4rXG4rXHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rXHR3aWZpQDEge1xuK1x0XHRjb21wYXRpYmxlID0gXCJtYXJ2ZWxsLHNkODg5N1wiO1xuK1x0XHRyZWcgPSBcdTAwM2MxXHUwMDNlO1xuK1x0XHRtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tO1xuK1x0fTtcbiB9O1xuIFxuIFx1MDAyNnVzYjNfMV92YnVzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXG5pbmRleCA3YTFiYTMyZjFmYjM2Li4yOTM4NzYzOTdiNjcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXG5AQCAtNDg5Nyw3ICs0ODk3LDE0IEBAIGludCBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXHRcdFx0XHRjb3VudHJ5X2NvZGUgPVxuIFx0XHRcdFx0XHRtd2lmaWV4XzExZF9jb2RlXzJfcmVnaW9uKFxuIFx0XHRcdFx0XHRcdGFkYXB0ZXItXHUwMDNlcmVnaW9uX2NvZGUpO1xuK1xuK1x0XHRcdFx0LyogSWYgdGhlIHJlZyBoaW50IGluIFJPTSBjb25mbGljdHMgd2l0aCBwbGF0Zm9ybVxuK1x0XHRcdFx0ICogY29uZmlndXJhdGlvbiwgaXQgc2hvdWxkIGJlIGlnbm9yZWQsIHNvIHRoZVxuK1x0XHRcdFx0ICogcGxhdGZvcm0gcmVndWxhdG9yeSBkb21haW4gY2FuIGJlIHVzZWQuXG4rXHRcdFx0XHQgKi9cbiBcdFx0XHRcdGlmIChjb3VudHJ5X2NvZGUgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgIWRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woYWRhcHRlci1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgXCJtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tXCIpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIHJlZ3VsYXRvcnlfaGludCh3aXBoeSwgY291bnRyeV9jb2RlKSlcbiBcdFx0XHRcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUixcbiBcdFx0XHRcdFx0XHQgICAgXCJyZWd1bGF0b3J5X2hpbnQoKSBmYWlsZWRcXG5cIik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxNzo0Ni45Mzk0Mzk1ODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjY0NTE3NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBNYXJ2ZWxsIFdpRmkgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBhIGZldyBmaWxlcy4gT25lIGlzIGEgRGV2aWNlIFRyZWUgYmluZGluZyAoYG1hcnZlbGwsc2Q4Nzg3LnlhbWxgKSwgYW5vdGhlciBpcyBhIERldmljZSBUcmVlIGZvciBhIHNwZWNpZmljIExpbmtzeXMgZGV2aWNlIChgYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c2ApLCBhbmQgdGhlbiB0aGUgcmVhbCBtZWF0IG9mIGl0LCBhIGNoYW5nZSBpbiB0aGUgYG13aWZpZXhgIGRyaXZlciAoYGNmZzgwMjExLmNgKS4gVGhlIGNoYW5nZSBpbiBgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMWAgaGFzIHRoaXMgY29uZGl0aW9uYWwgY2hlY2sgaW52b2x2aW5nIGEgYGNvdW50cnlfY29kZWAgYW5kIGEgZGV2aWNlIHByb3BlcnR5LiBJdCBjYWxscyBgcmVndWxhdG9yeV9oaW50YCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaG93IGxpa2VseSBpcyB0aGlzIHRvIGFjdHVhbGx5IHRyaWdnZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhpcyBpcyBhIE1hcnZlbGwgd2lyZWxlc3MgZHJpdmVyLCB0YXJnZXRpbmcgU0RJTywgUENJZSwgYW5kIFVTQiBXaUZpIGNhcmRzLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIEkga25vdyBgbXdpZmlleGAgKmRvZXMqIGhhdmUgYSBVU0IgZHJpdmVyIChgdXNiLmNgKS4gT2theSwgc28gdGhhdCBjaGFuZ2VzIHRoaW5ncy4gQ2FuIHdlIGxldmVyYWdlIHNvbWV0aGluZyBsaWtlIGEgVVNCIGdhZGdldCBvciBlbXVsYXRlZCBkZXZpY2UgdG8gaGl0IHRoYXQ/IE5vLCB0aGF0IGlzIGEgaG9zdCBkcml2ZXIsIG5vdCBhIGRldmljZSBkcml2ZXIuIEhvbGQgb24uLi4gU3l6a2FsbGVyISBSaWdodCwgU3l6a2FsbGVyICpjYW4qIGVtdWxhdGUgVVNCIGRldmljZXMgdXNpbmcgcmF3IGdhZGdldCwgdmhjaS4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBwcm9iZSBgbXdpZmlleF91c2JgIHdpdGggc3l6a2FsbGVyLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyBgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMWAgcmVhY2hhYmxlPyBDaGVja2luZyB0aGUgc291cmNlIGl0IGlzIGNhbGxlZCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBTbywgaXQgc2hvdWxkIGJlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGNmZzgwMjExLmNgLCBhbmQgdGhhdCdzIHRoZSBjb3JlLiBMZXQncyBtYWtlIHN1cmUgYG13aWZpZXhfdXNiYCBpcyBlbmFibGVkIGluIHRoZSBjb25maWc7IHRoYXQgd291bGQgYmUgdGhlIGZpcnN0IGh1cmRsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE3OjU0LjIwMzk2MDE2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUzNTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM9NDY2OD1pbnQgbXdpZmlleF9pbml0X2NoYW5uZWxfc2Nhbl9nYXAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ2OTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM6NDY5ODppbnQgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ2OTkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmgtMTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmg6MTU6aW50IG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuaC0xNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9NTM1PXN0YXRpYyBpbnQgX213aWZpZXhfZndfZHBjKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU4Ni1cXHRpZiAoIWFkYXB0ZXItXFx1MDAzZXdpcGh5KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo1ODc6XFx0XFx0aWYgKG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoYWRhcHRlcikpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU4OC1cXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTc6NTQuMjQ5NDk5NjAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU1NjM4MTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG13aWZpZXggRmlybXdhcmUgTG9hZGluZyBQcm9jZXNzKipcblxuT2theSwgc28gYF9td2lmaWV4X2Z3X2RwY2AgdHJpZ2dlcnMgYG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTFgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlbGxzIG1lIHRoZSBmaXJtd2FyZSBsb2FkaW5nIGlzIGhhcHBlbmluZyBiZWZvcmUgdGhpcyBwb2ludC4gQ2FuIHN5emthbGxlciBhY3R1YWxseSAqbG9hZCogdGhlIGZpcm13YXJlIGZvciBtd2lmaWV4LCB0aG91Z2g/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gc2F5IG5vOyBpdCB1c3VhbGx5IHJlbGllcyBvbiB0aGUgZmlybXdhcmUgZWl0aGVyIGJlaW5nIHByZS1sb2FkZWQgYXMgcGFydCBvZiB0aGUgc3lzdGVtIGltYWdlIChsaWtlIHRob3NlIGluIGxpbnV4LWZpcm13YXJlKSBvciB0aHJvdWdoIHNvbWUgZmF1bHQgaW5qZWN0aW9uIHNldHVwLiBgcmVxdWVzdF9maXJtd2FyZWAgY291bGQgYmUgdGhlIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlLCBidXQgc3l6a2FsbGVyIGRvZXNuJ3QgZ2VuZXJhbGx5IGhhbmRsZSB0aGUgcGh5c2ljYWwgZmlybXdhcmUgZmlsZXMgZGlyZWN0bHksIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZmFrZWQgZmlybXdhcmUgb3IgZmF1bHQgaW5qZWN0aW9uIHNjZW5hcmlvLiBIbW1tLCBidXQgd2FpdC4uLiBpZiB0aGlzIGlzIGEgVVNCIGRyaXZlciwgdGhpbmdzIG1pZ2h0IGJlIGRpZmZlcmVudCwgcmlnaHQ/IFRoYXQgY291bGQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIHRlc3RpbmcgYXZlbnVlcy4gQmVzdCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgbXdpZmlleCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0J3Mgc2V0IHVwIGFuZCBpZiB0aGVyZSBhcmUgc3BlY2lmaWMgY29tcGlsZSB0aW1lIG9wdGlvbnMgdGhhdCB3b3VsZCBjaGFuZ2UgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxODowMS44MDU4ODI2ODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNDUzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1XSUZJRVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI6Y29uZmlnIE1XSUZJRVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6MTI6Y29uZmlnIE1XSUZJRVhfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI1OmNvbmZpZyBNV0lGSUVYX1BDSUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjM3OmNvbmZpZyBNV0lGSUVYX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6MDEuODUyMDMxNTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTUxOTUyMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYWRkaXRpb246IGEgY2hlY2sgZm9yIGEgZGV2aWNlIHByb3BlcnR5IGNhbGxlZCBgbWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbWAuIEVzc2VudGlhbGx5LCBpdCdzIGEgbWlub3IgZnVuY3Rpb25hbCB0d2VhayDigJMgaXQgaWdub3JlcyBhIHJlZ3VsYXRvcnkgaGludCBpZiB0aGlzIHByb3BlcnR5IGlzIHNldC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz9cblxuSG9uZXN0bHksIGl0IHNlZW1zIGxpa2UgYSByZWFsIGxvbmcgc2hvdC4gVGhlIGNoYW5nZSBpdHNlbGYgaXMganVzdCBhIHNpbmdsZSBgaWZgIHN0YXRlbWVudCB0aGF0IGNoZWNrcyBhIGJvb2xlYW4gcHJvcGVydHkuIElmIHRoYXQgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUsIGl0IHNraXBzIHRoZSBgcmVndWxhdG9yeV9oaW50KHdpcGh5LCBjb3VudHJ5X2NvZGUpYCBjYWxsLiBUaGlzIGlzIGluY3JlZGlibHkgdHJpdmlhbC4gV2UncmUgbm90IHRhbGtpbmcgYWJvdXQgaW50cm9kdWNpbmcgY29tcGxleCBsb2dpYywgYW55IG5ldyBtZW1vcnkgbWFuYWdlbWVudCwgb3IgY29uY3VycmVuY3kgaXNzdWVzLiBJdCdzIGxpdGVyYWxseSBqdXN0IGEgZmxhZyB0byBieXBhc3MgYSBoaW50LlxuXG5BbmQgb24gdG9wIG9mIHRoYXQsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBNYXJ2ZWxsIFdpRmkgZGV2aWNlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHBhdGguIFdoaWxlIEkgc3VwcG9zZSBpdCAqY291bGQqIGJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIHRoaXMgcGFydGljdWxhciBjaGFuZ2UgaXRzZWxmIGlzIHNvIHNpbXBsZSB0aGF0IEknbSBoaWdobHkgZG91YnRmdWwgdGhlcmUgYXJlIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIG9yIGFueSBvdGhlciBpbnRlcmVzdGluZyBsb2dpYyBlcnJvcnMgd29ydGggc3BlbmRpbmcgdGltZSBvbi5cblxuSGFuZyBvbiBhIHNlY29uZC4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5LCDigJxSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5z4oCmIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZeKApuKAnSBJcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVG8gZ2V0IHRvIGBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExYCwgd2hpY2ggaXMgd2hlcmUgdGhpcyBjaGVjayByZXNpZGVzLCB0aGUgZHJpdmVyIG5lZWRzIHRvIGxvYWQgZmlybXdhcmUuIFRoYXQncyBhIGdvb2QgcXVlc3Rpb24uIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoaXMgZmlybXdhcmUgbG9hZCBwYXRoOyBsZXQncyBjaGVjayBgX213aWZpZXhfZndfZHBjYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxODowOS4wMDM5ODYxMTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3MjkxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVxdWVzdF9maXJtd2FyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9NTM1PXN0YXRpYyBpbnQgX213aWZpZXhfZndfZHBjKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU2Ny1cXHRpZiAoY2FsX2RhdGFfY2ZnKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo1Njg6XFx0XFx0aWYgKChyZXF1ZXN0X2Zpcm13YXJlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VjYWxfZGF0YSwgY2FsX2RhdGFfY2ZnLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTY5LVxcdFxcdFxcdFxcdCAgICAgIGFkYXB0ZXItXFx1MDAzZWRldikpIFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU3MC1cXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjU3MTpcXHRcXHRcXHRcXHQgICAgXFxcIkNhbCBkYXRhIHJlcXVlc3RfZmlybXdhcmUoKSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTcyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9Njk4PXN0YXRpYyBpbnQgbXdpZmlleF9pbml0X2h3X2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTcxMC1cXHRpZiAocmVxX2Z3X25vd2FpdCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6NzExOlxcdFxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCAxLCBhZGFwdGVyLVxcdTAwM2Vmd19uYW1lLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNzEyLVxcdFxcdFxcdFxcdFxcdCAgICAgIGFkYXB0ZXItXFx1MDAzZWRldiwgR0ZQX0tFUk5FTCwgYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNzE0LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo3MTU6XFx0XFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlZmlybXdhcmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy03MTYtXFx0XFx0XFx0XFx0ICAgICAgIGFkYXB0ZXItXFx1MDAzZWZ3X25hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTcyMC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjcyMTpcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUiwgXFxcInJlcXVlc3RfZmlybXdhcmUlcyBlcnJvciAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTcyMi1cXHRcXHRcXHQgICAgcmVxX2Z3X25vd2FpdCA/IFxcXCJfbm93YWl0XFxcIiA6IFxcXCJcXFwiLCByZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jPTIwNT1zdGF0aWMgaW50IG13aWZpZXhfcmVxdWVzdF9yZ3Bvd2VyX3RhYmxlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMjI5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYzoyMzA6XFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJncG93ZXJfZGF0YSwgcmdwb3dlcl90YWJsZV9uYW1lLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0yMzEtXFx0XFx0XFx0XFx0ICAgICAgYWRhcHRlci1cXHUwMDNlZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6MDkuMDU4NzE4MzI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIwMjM1NjczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRmlybXdhcmUgTG9hZGluZyBJc3N1ZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbXdpZmlleGAgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBlcnJvciBzY2VuYXJpby4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoYXQgaGFwcGVucyBpZiBgcmVxdWVzdF9maXJtd2FyZWAgZmFpbHMuIFRoZSBjb2RlIHN1Z2dlc3RzIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBmYWlscyB0byBsb2FkIGZpcm13YXJlLCB0aGVuIHRoZSBgX213aWZpZXhfZndfZHBjYCAoRGlyZWN0IFByb2NlZHVyZSBDYWxsKSByb3V0aW5lIGlzIGV2ZW50dWFsbHkgY2FsbGVkLiBCdXQgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLCBhbmQgdGhlIHJlYXNvbiBJJ20gaGVyZSwgaXMgKndoYXQgaXMgdGhlIHZhbHVlIG9mIGZpcm13YXJlKj9cblxuSGFuZyBvbiBhIG1vbWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHRoaW5raW5nIGNsZWFybHkuIEl0IGFwcGVhcnMgdGhhdCB0aGUgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBmdW5jdGlvbiAqZGlyZWN0bHkqIGNhbGxzIGBfbXdpZmlleF9md19kcGNgLiBPa2F5LiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBsb2dpYzogSWYgdGhhdCBpbml0aWFsIGNhbGwgdG8gYHJlcXVlc3RfZmlybXdhcmVgIHJldHVybnMgYW4gZXJyb3IsIG15IHRoaW5raW5nIHRlbGxzIG1lIHRoYXQgdGhlIHN1YnNlcXVlbnQgY2FsbGJhY2sgZnJvbSBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgLCBgX213aWZpZXhfZndfZHBjYCwgY291bGQgYmUgY2FsbGVkIHdpdGggYGZpcm13YXJlYCBzZXQgdG8gYE5VTExgLlxuXG5TbywgdGhlIGtleSBoZXJlIGlzIHdoYXQgaGFwcGVucyAqaW5zaWRlKiBgX213aWZpZXhfZndfZHBjYCBpZiBgZmlybXdhcmVgIGlzIGluZGVlZCBudWxsLiBUaGUgZm9jdXMgaGVyZSBpcyBvbiB0aGF0IGNvbmRpdGlvbi4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdHJhY2UgdGhlIGNvZGUgZmxvdywgYW5kIGhvdyB0aGUgcHJvZ3JhbSByZWFjdHMgdG8gdGhpcyBzY2VuYXJpby4gSXQncyB0aW1lIHRvIGZvbGxvdyB0aGUgcGF0aCB3aGVyZSB0aGUgcG9pbnRlciAqZmlybXdhcmUqIGJlY29tZXMgYE5VTExgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6MTUuMjYxMDc3MDY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ1ODIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZiBcXFxcKCFmaXJtd2FyZVxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz01MzU9c3RhdGljIGludCBfbXdpZmlleF9md19kcGMoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNTQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6NTQ1OlxcdGlmICghZmlybXdhcmUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU0Ni1cXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz0xMzcwPXN0YXRpYyBpbnQgbXdpZmlleF9wcm9nX2Z3X3dfaGVscGVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMTM4MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MTM4MjpcXHRpZiAoIWZpcm13YXJlKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTEzODMtXFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE4OjE1LjMxMzUzODkzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzI5Mjg3OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRmlybXdhcmUgSW5pdGlhbGl6YXRpb24gSXNzdWVzKipcblxuT2theSwgc28gaWYgdGhlIGZpcm13YXJlIGRvZXNuJ3QgbG9hZCBjb3JyZWN0bHkg4oCTIG1lYW5pbmcgYCFmaXJtd2FyZWAgaXMgdHJ1ZSDigJMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgYF9td2lmaWV4X2Z3X2RwY2AgaXMgZ29pbmcgdG8gZXJyb3Igb3V0IGJlZm9yZSBpdCBjYW4gZXZlbiBnZXQgdG8gY2FsbGluZyBgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMWAuIFRoYXQgd291bGQgZXhwbGFpbiBjZXJ0YWluIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIEkndmUgYmVlbiBzZWVpbmcuIFNlZW1zIGxpa2UgYSBsb2dpY2FsIGxpbmssIGFuZCBhIGNvbW1vbiBwcm9ibGVtLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBhcmNoaXRlY3R1cmUsIGFuZCB0aGF0IHNwZWNpZmljIGNhbGxiYWNrLCBpdCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGF0IHRoZSBgX213aWZpZXhfZndfZHBjYCBjb2RlIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhpbmdzIG1pZ2h0IGJlIGZhbGxpbmcgYXBhcnQgaW4gdGhhdCBzY2VuYXJpby4gTGV0J3MgZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxODoxOS42NDI4MjkyNzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTM1OlxcdHN0YXRpYyBpbnQgX213aWZpZXhfZndfZHBjKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuIDUzNjpcXHR7XFxuIDUzNzpcXHRcXHRpbnQgcmV0O1xcbiA1Mzg6XFx0XFx0Y2hhciBmbXRbNjRdO1xcbiA1Mzk6XFx0XFx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRleHQ7XFxuIDU0MDpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSBmdztcXG4gNTQxOlxcdFxcdGJvb2wgaW5pdF9mYWlsZWQgPSBmYWxzZTtcXG4gNTQyOlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7XFxuIDU0MzpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvbiAqZndfZG9uZSA9IGFkYXB0ZXItXFx1MDAzZWZ3X2RvbmU7XFxuIDU0NDpcXHRcXG4gNTQ1OlxcdFxcdGlmICghZmlybXdhcmUpIHtcXG4gNTQ2OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiA1NDc6XFx0XFx0XFx0XFx0ICAgIFxcXCJGYWlsZWQgdG8gZ2V0IGZpcm13YXJlICVzXFxcXG5cXFwiLCBhZGFwdGVyLVxcdTAwM2Vmd19uYW1lKTtcXG4gNTQ4OlxcdFxcdFxcdGdvdG8gZXJyX2RubGRfZnc7XFxuIDU0OTpcXHRcXHR9XFxuIDU1MDpcXHRcXG4gNTUxOlxcdFxcdG1lbXNldChcXHUwMDI2ZncsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSkpO1xcbiA1NTI6XFx0XFx0YWRhcHRlci1cXHUwMDNlZmlybXdhcmUgPSBmaXJtd2FyZTtcXG4gNTUzOlxcdFxcdGZ3LmZ3X2J1ZiA9ICh1OCAqKSBhZGFwdGVyLVxcdTAwM2VmaXJtd2FyZS1cXHUwMDNlZGF0YTtcXG4gNTU0OlxcdFxcdGZ3LmZ3X2xlbiA9IGFkYXB0ZXItXFx1MDAzZWZpcm13YXJlLVxcdTAwM2VzaXplO1xcbiA1NTU6XFx0XFxuIDU1NjpcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaWZfb3BzLmRubGRfZncpIHtcXG4gNTU3OlxcdFxcdFxcdHJldCA9IGFkYXB0ZXItXFx1MDAzZWlmX29wcy5kbmxkX2Z3KGFkYXB0ZXIsIFxcdTAwMjZmdyk7XFxuIDU1ODpcXHRcXHR9IGVsc2Uge1xcbiA1NTk6XFx0XFx0XFx0cmV0ID0gbXdpZmlleF9kbmxkX2Z3KGFkYXB0ZXIsIFxcdTAwMjZmdyk7XFxuIDU2MDpcXHRcXHR9XFxuIDU2MTpcXHRcXG4gNTYyOlxcdFxcdGlmIChyZXQgPT0gLTEpXFxuIDU2MzpcXHRcXHRcXHRnb3RvIGVycl9kbmxkX2Z3O1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBNU0csIFxcXCJXTEFOIEZXIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdGlmIChjYWxfZGF0YV9jZmcpIHtcXG4gNTY4OlxcdFxcdFxcdGlmICgocmVxdWVzdF9maXJtd2FyZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlY2FsX2RhdGEsIGNhbF9kYXRhX2NmZyxcXG4gNTY5OlxcdFxcdFxcdFxcdFxcdCAgICAgIGFkYXB0ZXItXFx1MDAzZWRldikpIFxcdTAwM2MgMClcXG4gNTcwOlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiA1NzE6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJDYWwgZGF0YSByZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG4gNTcyOlxcdFxcdH1cXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0LyogZW5hYmxlIGhvc3QgaW50ZXJydXB0IGFmdGVyIGZ3IGRubGQgaXMgc3VjY2Vzc2Z1bCAqL1xcbiA1NzU6XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWlmX29wcy5lbmFibGVfaW50KSB7XFxuIDU3NjpcXHRcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaWZfb3BzLmVuYWJsZV9pbnQoYWRhcHRlcikpXFxuIDU3NzpcXHRcXHRcXHRcXHRnb3RvIGVycl9kbmxkX2Z3O1xcbiA1Nzg6XFx0XFx0fVxcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHRyZXQgPSBtd2lmaWV4X2luaXRfZncoYWRhcHRlcik7XFxuIDU4MTpcXHRcXHRpZiAocmV0ID09IC0xKVxcbiA1ODI6XFx0XFx0XFx0Z290byBlcnJfaW5pdF9mdztcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0bWF5YmVfcXVpcmtfZndfZGlzYWJsZV9kcyhhZGFwdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6MTkuNjQyOTQ5NDA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NjkzNjA4MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IE1hcnZlbGwgV2lGaSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXNuJ3Qgd29ydGggZnV6emluZywgYnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gVGhlIGNvcmUgY2hhbmdlIGlzIGEgc2ltcGxlIGJvb2xlYW4gY2hlY2sgd2l0aGluIGBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExYDogZXNzZW50aWFsbHksIGl0J3Mgc2tpcHBpbmcgYSByZWd1bGF0b3J5IGhpbnQgYmFzZWQgb24gYSBkZXZpY2UgdHJlZSBwcm9wZXJ0eS4gVGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgY29tcGxleCBsb2dpYywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBzdGF0ZSBjaGFuZ2VzIHRoYXQgd291bGQgdHlwaWNhbGx5IGJlIGFzc29jaWF0ZWQgd2l0aCBidWdzIHRoYXQgZnV6emluZyB3b3VsZCBmaW5kLiBJdCdzIGEgc2luZ2xlLCBlYXNpbHkgdW5kZXJzdG9vZCBjb25kaXRpb24uXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGd1aWRlIG1lOiBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyxcIiBcIkNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMsXCIgb3IgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiIFdoaWxlIHRoaXMgbW9kaWZpZXMgZXhlY3V0aW9uIGZsb3cgYnkgc2tpcHBpbmcgdGhlIHJlZ3VsYXRvcnkgaGludCwgaXQncyB0cml2aWFsLCBhbmQgY3JpdGljYWxseSwgaXQgc2VlbXMgZGlmZmljdWx0IHRvIHJlYWNoLlxuXG5NeSBuZXh0IHRob3VnaHQgZm9jdXNlcyBvbiByZWFjaGFiaWxpdHk6IHRoaXMgY29kZSByZXF1aXJlcyB0aGUgTWFydmVsbCBXaUZpIGZpcm13YXJlIHRvIGJlIGxvYWRlZC4gU3l6a2FsbGVyIGRvZXNuJ3QgZ2VuZXJhbGx5IHByb3ZpZGUgc3BlY2lmaWMgZmlybXdhcmUsIHVubGVzcyBmYXVsdCBpbmplY3Rpb24gaXMgdXNlZCAodHJpdmlhbCBjaGFuZ2UpLiBIb3dldmVyLCB0aGUgY2hhbmdlIGl0c2VsZiBpcyB0cml2aWFsLiBDYW4gYHN5ei11c2JnZW5gIHRyaWdnZXIgdGhpcyB3aXRoIHRoZSByaWdodCBpbWFnZT8gSXQncyBqdXN0IHJlYWRpbmcgYSBkZXZpY2UgcHJvcGVydHksIHdoaWNoIGlzIHNpbXBsZS4gU3RpbGwsIGl0IHdvdWxkIG5lZWQgdGhlIGZpcm13YXJlLCBhbmQgdGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgYSBzaW1wbGU6IGAhZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChhZGFwdGVyLVx1MDAzZWRldiwgXCJtYXJ2ZWxsLGludmFsaWQtcmVnLWhpbnQtaW4tcm9tXCIpYC4gVGhlIGNvZGUgYWxzbyBtb2RpZmllcyB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZGV2aWNlIHRyZWUgYmluZGluZ3MsIHdoaWNoIHNlZW1zIGxpa2UgYSBmbGFnIHRvIHJldHVybiBgZmFsc2VgIHJpZ2h0IGF3YXkuXG5cblRoZSBwYXRjaCBtb2RpZmllcyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9tYXJ2ZWxsLHNkODc4Ny55YW1sYCwgYGFyY2gvYXJtL2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM4NS1saW5rc3lzLXJhbmdvLmR0c2AsIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNgLiBTbyBpdCdzIHZlcnkgbWlub3IgYW5kIHJlcXVpcmVzIGZpcm13YXJlIHRvIGJlIHByZXNlbnQuXG5cbkJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIHRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgZmlybXdhcmUgdG8gYmUgbG9hZGVkLiBJdCdzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggaXMgYW5vdGhlciBuZWdhdGl2ZSBzaWduYWwuIFRoaXMgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCJcblxuVGhpbmtpbmcgdGhyb3VnaCBzeXprYWxsZXIncyBjYXBhYmlsaXRpZXMsIGl0IGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzLiBIb3dldmVyLCB0aGlzIGNvZGUgcmVxdWlyZXMgdGhhdCB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSByZXNwb25kcyBjb3JyZWN0bHkgdG8gZmlybXdhcmUgZG93bmxvYWQgY29tbWFuZHMuIGBtd2lmaWV4X2RubGRfZndgIGlzIHRoZSByZWxldmFudCBjb2RlLiBTeXprYWxsZXIncyBVU0IgZnV6emVyIGdlbmVyYXRlcyByYW5kb20gcmVzcG9uc2VzLiBJdCdzIGV4dHJlbWVseSB1bmxpa2VseSB0aGF0IHJhbmRvbSBVU0IgcmVzcG9uc2VzIHdvdWxkIGNvcnJlY3RseSBlbXVsYXRlIHRoZSBjb21wbGV4IE1hcnZlbGwgV2lGaSBmaXJtd2FyZSBkb3dubG9hZCBhbmQgaW5pdGlhbGl6YXRpb24gcHJvdG9jb2wgdG8gdGhlIHBvaW50IG9mIGV4ZWN1dGluZyBgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMWAuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSB0cml2aWFsLCByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgZmlybXdhcmUsIGFuZCBpcyBoaWdobHkgaW1wcm9iYWJsZSB0byBiZSByZWFjaGVkIGluIHRoZSBzdGFuZGFyZCBTeXprYWxsZXIgZW52aXJvbm1lbnQuIEl0J3MgZXNzZW50aWFsbHkgYW4gdW5yZWFjaGFibGUsIG9yIGF0IGxlYXN0IHVuaW50ZXJlc3RpbmcsIGNvZGUgcGF0aCBmb3IgZnV6emluZyBwdXJwb3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODoxODozNS4zMzY1NTk3MzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjQzNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfZG5sZF9md1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9pbml0LmM9NTk4PW13aWZpZXhfc2h1dGRvd25fZHJ2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvaW5pdC5jLTY2NS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvaW5pdC5jOjY2NjppbnQgbXdpZmlleF9kbmxkX2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2luaXQuYy02NjctXFx0XFx0ICAgIHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICpwbWZ3KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2luaXQuYy03MTctfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9pbml0LmM6NzE4OkVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfZG5sZF9mdyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTUzNT1zdGF0aWMgaW50IF9td2lmaWV4X2Z3X2RwYyhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy01NTgtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjU1OTpcXHRcXHRyZXQgPSBtd2lmaWV4X2RubGRfZncoYWRhcHRlciwgXFx1MDAyNmZ3KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTU2MC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTEwNjA9dm9pZCBtd2lmaWV4X3NodXRkb3duX2RydihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTEwNjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxMDYyOmludCBtd2lmaWV4X2RubGRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLCBzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSAqKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTEwNjMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jPTEwMjU9c3RhdGljIGludCBtd2lmaWV4X3NkaW9fZG5sZF9mdyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xMDMxLVxcdHNkaW9fY2xhaW1faG9zdChjYXJkLVxcdTAwM2VmdW5jKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjEwMzI6XFx0cmV0ID0gbXdpZmlleF9kbmxkX2Z3KGFkYXB0ZXIsIGZ3KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTEwMzMtXFx0c2Rpb19yZWxlYXNlX2hvc3QoY2FyZC1cXHUwMDNlZnVuYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE4OjM1LjM5ODIwNzEyOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTUzMjQ2NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEZpcm13YXJlIERvd25sb2FkIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbXdpZmlleF91c2JgIG1vZHVsZSwgYW5kIHNvbWV0aGluZyBqdXN0IGNsaWNrZWQuIEl0J3MgZ290IGl0cyBvd24gZGVkaWNhdGVkIGBkbmxkX2Z3YCBjYWxsYmFjayBkZWZpbmVkLiBUaGF0J3Mga2V5LCBpc24ndCBpdD8gTWVhbnMgd2UncmUgbm90IGp1c3QgcmVseWluZyBvbiBzb21lIGdlbmVyaWMgZnJhbWV3b3JrIGZvciB0aGUgZmlybXdhcmUgZG93bmxvYWQ7IGl0J3MgZ290IGEgY3VzdG9tLXRhaWxvcmVkIHByb2Nlc3Mgc3BlY2lmaWNhbGx5IGZvciB0aGUgVVNCIGludGVyZmFjZS4gVGhhdCBtYWtlcyBhIGxvdCBvZiBzZW5zZSwgY29uc2lkZXJpbmcgdGhlIG51YW5jZXMgaW52b2x2ZWQgd2l0aCBVU0IgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBlbnVtZXJhdGlvbiwgYW5kIGRhdGEgdHJhbnNmZXIuIFVuZGVyc3RhbmRpbmcgKnRoYXQqIGNhbGxiYWNrIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgVVNCIGZpcm13YXJlIHVwbG9hZCBmbG93LiBXZSdsbCBoYXZlIHRvIGRpZyBkZWVwZXIsIHNlZSB3aGF0IHNvcnQgb2Ygc3BlY2lmaWMgaGFuZGxpbmcgaXQgcGVyZm9ybXMsIGlmIHRoZXJlJ3MgYW55IGNydWNpYWwgZXJyb3IgY2hlY2tpbmcgdGhlcmUsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHN0YWdlcyBvZiB0aGUgZG93bmxvYWQuIFRoaXMgbmVlZHMgdG8gYmUgdGhlIGp1bXBpbmcgb2ZmIHBvaW50IGZvciB0aGUgVVNCIGZpcm13YXJlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQyNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE4OjQyLjk1MTQ1NTY5OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNzk2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG5sZF9md1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jPTEzNzA9c3RhdGljIGludCBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTA2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzoxNTA3OnN0YXRpYyBpbnQgbXdpZmlleF91c2JfZG5sZF9mdyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTA4LVxcdFxcdFxcdHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICpmdylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz0xNTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXdpZmlleF9pZl9vcHMgdXNiX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTkwLVxcdC8qIFVTQiBzcGVjaWZpYyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzoxNTkxOlxcdC5kbmxkX2Z3ID1cXHRcXHRtd2lmaWV4X3VzYl9kbmxkX2Z3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTkyLVxcdC5jbWRyc3BfY29tcGxldGUgPVxcdG13aWZpZXhfdXNiX2NtZF9ldmVudF9jb21wbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6NDIuOTk3NzM5NzA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTY0MTIzNTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbXdpZmlleF91c2JfZG5sZF9md2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gYG13aWZpZXhfdXNiX2RubGRfZndgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBnb2luZyBvbiBpbiB0aGlzIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIGZpcm13YXJlIGRvd25sb2FkIG92ZXIgVVNCLCBsaWtlbHkgZm9yIGEgTWFydmVsbCBXaS1GaSBjaGlwc2V0LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2QgaW1tZWRpYXRlbHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYXJndW1lbnRzIGl0IHRha2VzLiBBcmUgd2UgcGFzc2luZyBhIGZpcm13YXJlIGltYWdlLCBkZXNjcmlwdG9yLCBvciBzb21lIG90aGVyIGNvbnRyb2wgc3RydWN0dXJlPyBBcmUgdGhlcmUgYW55IHNpemUgbGltaXRzIGJlaW5nIGNoZWNrZWQ/IFdoYXQgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZD9cblxuTXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgaXNzdWVzLiBJcyB0aGVyZSBwcm9wZXIgZXJyb3IgY2hlY2tpbmcgZm9yIFVTQiB0cmFuc2ZlcnM/IENvdWxkIHdlIGJlIHZ1bG5lcmFibGUgdG8gYnVmZmVyIG92ZXJmbG93cyBpZiB0aGUgZmlybXdhcmUgaW1hZ2UgaXMgbWFsaWNpb3VzIG9yIGNvcnJ1cHRlZD8gV2hhdCdzIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLCBpZiBhbnksIGZvciB0aGUgZG93bmxvYWRlZCBmaXJtd2FyZT8gSXMgdGhlcmUgYW55IG1lY2hhbmlzbSB0byBwcmV2ZW50IGRvd25ncmFkZSBhdHRhY2tzP1xuXG5JJ2QgcXVpY2tseSB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBVU0IgdHJhbnNmZXIgZnVuY3Rpb25zIGJlaW5nIGNhbGxlZCwgbGlrZSBgdXNiX2J1bGtfbXNnYCBvciBgdXNiX2NvbnRyb2xfbXNnYC4gSSdkIHdhbnQgdG8gY29uZmlybSB0aGF0IHdlJ3JlIGhhbmRsaW5nIHRoZSBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjb3JyZWN0bHkuIEFueSBkYXRhIHN0YWdpbmcsIERNQSB1c2FnZSwgb3IgaW50ZXJydXB0IGhhbmRsaW5nIHdvdWxkIHdhcnJhbnQgY2xvc2VyIHNjcnV0aW55LiBBbmQsIG9mIGNvdXJzZSwgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIGNhbGwuXG5cbkZpbmFsbHksIEnigJlkIGZvY3VzIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbi4gRG9lcyBhIHN1Y2Nlc3MgaW5kaWNhdGUgdGhhdCB0aGUgZHJpdmVyIGhhcyBjb21wbGV0ZWx5IHZlcmlmaWVkIGFuZCBzdGFydGVkIHRoZSBuZXcgZmlybXdhcmU/IE9yIGRvZXMgaXQgcmVwcmVzZW50IGFuIGluY29tcGxldGUgc3RhdGU/IFdoYXQga2luZCBvZiBsb2dnaW5nIGFuZCBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzIGFyZSBhdmFpbGFibGUgaWYgc29tZXRoaW5nIGdvZXMgd3Jvbmc/IEJhc2ljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IHJvYnVzdCwgc2VjdXJlLCBhbmQgcmVsaWFibGUgdGhpcyBmaXJtd2FyZSBkb3dubG9hZCBwcm9jZXNzIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE4OjU1Ljk2MTg2NTQ3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTAyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MDcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MDc6XFx0c3RhdGljIGludCBtd2lmaWV4X3VzYl9kbmxkX2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuMTUwODpcXHRcXHRcXHRcXHRzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSAqZncpXFxuMTUwOTpcXHR7XFxuMTUxMDpcXHRcXHRpbnQgcmV0O1xcbjE1MTE6XFx0XFx0c3RydWN0IHVzYl9jYXJkX3JlYyAqY2FyZCA9IChzdHJ1Y3QgdXNiX2NhcmRfcmVjICopYWRhcHRlci1cXHUwMDNlY2FyZDtcXG4xNTEyOlxcdFxcbjE1MTM6XFx0XFx0aWYgKGNhcmQtXFx1MDAzZXVzYl9ib290X3N0YXRlID09IFVTQjhYWFhfRldfRE5MRCkge1xcbjE1MTQ6XFx0XFx0XFx0cmV0ID0gbXdpZmlleF9wcm9nX2Z3X3dfaGVscGVyKGFkYXB0ZXIsIGZ3KTtcXG4xNTE1OlxcdFxcdFxcdGlmIChyZXQpXFxuMTUxNjpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTUxNzpcXHRcXG4xNTE4OlxcdFxcdFxcdC8qIEJvb3Qgc3RhdGUgY2hhbmdlcyBhZnRlciBzdWNjZXNzZnVsIGZpcm13YXJlIGRvd25sb2FkICovXFxuMTUxOTpcXHRcXHRcXHRpZiAoY2FyZC1cXHUwMDNldXNiX2Jvb3Rfc3RhdGUgPT0gVVNCOFhYWF9GV19ETkxEKVxcbjE1MjA6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjE1MjE6XFx0XFx0fVxcbjE1MjI6XFx0XFxuMTUyMzpcXHRcXHRyZXQgPSBtd2lmaWV4X3VzYl9yeF9pbml0KGFkYXB0ZXIpO1xcbjE1MjQ6XFx0XFx0aWYgKCFyZXQpXFxuMTUyNTpcXHRcXHRcXHRyZXQgPSBtd2lmaWV4X3VzYl90eF9pbml0KGFkYXB0ZXIpO1xcbjE1MjY6XFx0XFxuMTUyNzpcXHRcXHRyZXR1cm4gcmV0O1xcbjE1Mjg6XFx0fVxcbjE1Mjk6XFx0XFxuMTUzMDpcXHRzdGF0aWMgdm9pZCBtd2lmaWV4X3N1Ym1pdF9yeF91cmIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTggZXApXFxuMTUzMTpcXHR7XFxuMTUzMjpcXHRcXHRzdHJ1Y3QgdXNiX2NhcmRfcmVjICpjYXJkID0gKHN0cnVjdCB1c2JfY2FyZF9yZWMgKilhZGFwdGVyLVxcdTAwM2VjYXJkO1xcbjE1MzM6XFx0XFxuMTUzNDpcXHRcXHRza2JfcHVzaChjYXJkLVxcdTAwM2VyeF9jbWQuc2tiLCBJTlRGX0hFQURFUl9MRU4pO1xcbjE1MzU6XFx0XFx0aWYgKChlcCA9PSBjYXJkLVxcdTAwM2VyeF9jbWRfZXApIFxcdTAwMjZcXHUwMDI2XFxuMTUzNjpcXHRcXHQgICAgKCFhdG9taWNfcmVhZChcXHUwMDI2Y2FyZC1cXHUwMDNlcnhfY21kX3VyYl9wZW5kaW5nKSkpXFxuMTUzNzpcXHRcXHRcXHRtd2lmaWV4X3VzYl9zdWJtaXRfcnhfdXJiKFxcdTAwMjZjYXJkLVxcdTAwM2VyeF9jbWQsXFxuMTUzODpcXHRcXHRcXHRcXHRcXHRcXHQgIE1XSUZJRVhfUlhfQ01EX0JVRl9TSVpFKTtcXG4xNTM5OlxcdFxcbjE1NDA6XFx0XFx0cmV0dXJuO1xcbjE1NDE6XFx0fVxcbjE1NDI6XFx0XFxuMTU0MzpcXHRzdGF0aWMgaW50IG13aWZpZXhfdXNiX2NtZF9ldmVudF9jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbjE1NDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTU0NTpcXHR7XFxuMTU0NjpcXHRcXHRtd2lmaWV4X3N1Ym1pdF9yeF91cmIoYWRhcHRlciwgTVdJRklFWF9VU0JfRVBfQ01EX0VWRU5UKTtcXG4xNTQ3OlxcdFxcbjE1NDg6XFx0XFx0cmV0dXJuIDA7XFxuMTU0OTpcXHR9XFxuMTU1MDpcXHRcXG4xNTUxOlxcdC8qIFRoaXMgZnVuY3Rpb24gd2FrZXMgdXAgdGhlIGNhcmQuICovXFxuMTU1MjpcXHRzdGF0aWMgaW50IG13aWZpZXhfcG1fd2FrZXVwX2NhcmQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4xNTUzOlxcdHtcXG4xNTU0OlxcdFxcdC8qIFNpbXVsYXRpb24gb2YgSFNfQVdBS0UgZXZlbnQgKi9cXG4xNTU1OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXBtX3dha2V1cF9md190cnkgPSBmYWxzZTtcXG4xNTU2OlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2YWRhcHRlci1cXHUwMDNld2FrZXVwX3RpbWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6MTg6NTUuOTYyMTE3NzExWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NjEwMDMzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXJgIGZ1bmN0aW9uIGNhbGwuIFRoZSBnb2FsLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIHRlc3QgaXQgd2l0aCBhIFwiZmFrZVwiIGZpcm13YXJlLiBOb3csIGxldCdzIHNlZS4uLiBgbXdpZmlleF91c2JfZG5sZF9md2AgaXMgZ29pbmcgdG8gcmV0dXJuIC0xIGlmIGBjYXJkLVx1MDAzZXVzYl9ib290X3N0YXRlYCBpcyBlcXVhbCB0byBgVVNCOFhYWF9GV19ETkxEYCBhZnRlciBydW5uaW5nIGBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXJgLCB3aGljaCBtZWFucyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIGZpcm13YXJlIHRvIHRoZSBkZXZpY2Ugb3ZlciBVU0IuIFRoZSBwcm9ibGVtLCBhcyBhbHdheXMgd2l0aCB0aGlzIGtpbmQgb2YgdGhpbmcsIGlzIHRoYXQgc3VjY2Vzc2Z1bCBleGVjdXRpb24gcmVsaWVzIG9uIHRoZSB0YXJnZXQgZGV2aWNlIHJlc3BvbmRpbmcgY29ycmVjdGx5LCB3aGljaCBtaWdodCBub3QgaGFwcGVuLlxuXG5UaGUgcmVhbGx5IGJpZyBpc3N1ZSBoZXJlIGlzIHRoYXQgU3l6a2FsbGVy4oCZcyBVU0IgZnV6emVyIGlzIHRocm93aW5nIHJhbmRvbSByZXNwb25zZXMgYXQgdGhpcyB0aGluZy4gVGhlIGNoYW5jZXMgb2YgaXQgKmFjdHVhbGx5KiBlbXVsYXRpbmcgYSBzdWNjZXNzZnVsIGZpcm13YXJlIGRvd25sb2FkIGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhpcyBzcGVjaWZpYyBNYXJ2ZWxsIFdpRmkgY2hpcCBhcmUgYXN0cm9ub21pY2FsbHkgbG93LiBXZSBhcmUgZGVhbGluZyB3aXRoIGEgY29tcGxleCBoYXJkd2FyZSBpbnRlcmFjdGlvbiB0aGF0IHJlbGllcyBvbiB2ZXJ5IHNwZWNpZmljIHJlc3BvbnNlcyBhbmQgc3RhdGUgY2hhbmdlcy5cblxuUGx1cywgSSd2ZSBzZWVuIHRoZSBjb2RlOiB0aGUgYWN0dWFsIGNoYW5nZSBpdHNlbGYgaXMgcmlkaWN1bG91c2x5IHRyaXZpYWwuIEl0J3MganVzdCBhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9mIGEgZGV2aWNlIHByb3BlcnR5OlxuXG5gYGBjXG5cdFx0XHRcdGlmIChjb3VudHJ5X2NvZGUgXHUwMDI2XHUwMDI2XG5cdFx0XHRcdCAgICAhZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChhZGFwdGVyLVx1MDAzZWRldixcblx0XHRcdFx0XHRcdFx0ICAgICAgIFwibWFydmVsbCxpbnZhbGlkLXJlZy1oaW50LWluLXJvbVwiKSBcdTAwMjZcdTAwMjZcblx0XHRcdFx0ICAgIHJlZ3VsYXRvcnlfaGludCh3aXBoeSwgY291bnRyeV9jb2RlKSlcbmBgYFxuXG5UaGlzIGlzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IG9mIGF0dGVtcHRpbmcgdG8gZnV6ei4gVGhlIHJldHVybiBpcyBnb2luZyB0byBiZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0IHRoaXMgY2hhbmdlIGlzIGV4dHJlbWVseSB0cml2aWFsIOKAkyBhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9uIGEgZGV2aWNlIHByb3BlcnR5IOKAkyBhbmQgaXQncyBidXJpZWQgaW4gYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gcGF0aCB0aGF0IHJlcXVpcmVzIGEgKnN1Y2Nlc3NmdWwqIGZpcm13YXJlIGxvYWQgYW5kIGNvbXBsZXggZGV2aWNlIGludGVyYWN0aW9uLiBUaGlzIGlzIGJhc2ljYWxseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGhvdXQgZWl0aGVyIHNwZWNpZmljIGhhcmR3YXJlIG9yIGFuIGV4dHJlbWVseSBzcGVjaWFsaXplZCBlbXVsYXRvci4gTGV0J3MgbW92ZSBvbiB0byBzb21ldGhpbmcgdGhhdCBvZmZlcnMgYSBiZXR0ZXIgcmV0dXJuIG9uIGludmVzdG1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjIwLCJPdXRwdXRUb2tlbnMiOjExNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE5OjA0LjcyMzEyMzk2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSB0cml2aWFsIGZ1bmN0aW9uYWwgY2hhbmdlIChhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9mIGEgZGV2aWNlIHByb3BlcnR5IHRvIHNraXAgYSByZWd1bGF0b3J5IGhpbnQpIGluIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBNYXJ2ZWxsIG13aWZpZXggd2lyZWxlc3MgZHJpdmVyLiBSZWFjaGluZyB0aGlzIGNvZGUgcmVxdWlyZXMgc3VjY2Vzc2Z1bCBmaXJtd2FyZSBsb2FkaW5nIGFuZCBjb21wbGV4IGRldmljZSBpbnRlcmFjdGlvbiwgd2hpY2ggaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB0byBhY2hpZXZlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgZ2VuZXJpYyBVU0IgZW11bGF0aW9uLiBHaXZlbiB0aGUgdHJpdmlhbCBuYXR1cmUgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIHVucmVhY2hhYmlsaXR5LCBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSB0cml2aWFsIGZ1bmN0aW9uYWwgY2hhbmdlIChhIHNpbmdsZSBib29sZWFuIGNoZWNrIG9mIGEgZGV2aWNlIHByb3BlcnR5IHRvIHNraXAgYSByZWd1bGF0b3J5IGhpbnQpIGluIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBNYXJ2ZWxsIG13aWZpZXggd2lyZWxlc3MgZHJpdmVyLiBSZWFjaGluZyB0aGlzIGNvZGUgcmVxdWlyZXMgc3VjY2Vzc2Z1bCBmaXJtd2FyZSBsb2FkaW5nIGFuZCBjb21wbGV4IGRldmljZSBpbnRlcmFjdGlvbiwgd2hpY2ggaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB0byBhY2hpZXZlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgZ2VuZXJpYyBVU0IgZW11bGF0aW9uLiBHaXZlbiB0aGUgdHJpdmlhbCBuYXR1cmUgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIHVucmVhY2hhYmlsaXR5LCBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjE5OjA0LjcyMzE0NTQ3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowqlrv5[1] Phase: Running StartedAt: 2026-08-27 18:19:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqlrv5[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-27 18:19:16 +0000 UTC FinishedAt: 2026-08-27 18:19:20 +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,}