ZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9ncnBjL2dvLm1vZCBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9ncnBjL2dvLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM1NmFhNy4uMDAwMDAwMAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvZ3JwYy9nby5tb2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1tb2R1bGUgZ29vZ2xlLmdvbGFuZy5vcmcvZ3JwYwotCi1nbyAxLjExCi0KLXJlcXVpcmUgKAotCWdpdGh1Yi5jb20vZW52b3lwcm94eS9nby1jb250cm9sLXBsYW5lIHYwLjkuMAotCWdpdGh1Yi5jb20vZW52b3lwcm94eS9wcm90b2MtZ2VuLXZhbGlkYXRlIHYwLjEuMAotCWdpdGh1Yi5jb20vZ29sYW5nL2dsb2cgdjAuMC4wLTIwMTYwMTI2MjM1MzA4LTIzZGVmNGU2YzE0YgotCWdpdGh1Yi5jb20vZ29sYW5nL21vY2sgdjEuMS4xCi0JZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYgdjEuMy4yCi0JZ2l0aHViLmNvbS9nb29nbGUvZ28tY21wIHYwLjIuMAotCWdvbGFuZy5vcmcveC9uZXQgdjAuMC4wLTIwMTkwMzExMTgzMzUzLWQ4ODg3NzE3NjE1YQotCWdvbGFuZy5vcmcveC9vYXV0aDIgdjAuMC4wLTIwMTgwODIxMjEyMzMzLWQyZTYyMDI0MzhiZQotCWdvbGFuZy5vcmcveC9zeXMgdjAuMC4wLTIwMTkwMjE1MTQyOTQ5LWQwYjExYmRhYWM4YQotCWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvIHYwLjAuMC0yMDE5MDgxOTIwMTk0MS0yNGZhNGIyNjFjNTUKLSkKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9ncnBjL2dvLnN1bSBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9ncnBjL2dvLnN1bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZhNDc4NC4uMDAwMDAwMAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvZ3JwYy9nby5zdW0KKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1jbG91ZC5nb29nbGUuY29tL2dvIHYwLjI2LjAgaDE6ZTBXS3FLVGQ1Qm5yRzhhS0gzSjNoK1F2RUlRdFNVY2YybjVVWjVaZ0x0UT0KLWNsb3VkLmdvb2dsZS5jb20vZ28gdjAuMjYuMC9nby5tb2QgaDE6YVFVWWtYelZzdWZNK0R3RjFhRSsweGZjVSs1Nkp3Q2FMaWNrMENsbU1Udz0KLWdpdGh1Yi5jb20vQnVybnRTdXNoaS90b21sIHYwLjMuMS9nby5tb2QgaDE6eEhXQ05HakI1b3FpRHI4emZubzNNSHVlMkh0NXNJQmtzcDAzcWN5ZldNVT0KLWdpdGh1Yi5jb20vY2Vuc3VzLWluc3RydW1lbnRhdGlvbi9vcGVuY2Vuc3VzLXByb3RvIHYwLjIuMS9nby5tb2QgaDE6ZjZLUG1pcm9qeEtBMTJybnlxT0E1QkJMNE85ODNPZmVHUHFqSFdTVG5lVT0KLWdpdGh1Yi5jb20vY2xpZW50OS9taXNzcGVsbCB2MC4zLjQvZ28ubW9kIGgxOnFqNmpJQ0MzUTd6Rlp2VldvN0tMQXpDM3l4NUc3a3l2U0RrYzkwcHBQeXc9Ci1naXRodWIuY29tL2Vudm95cHJveHkvZ28tY29udHJvbC1wbGFuZSB2MC45LjAgaDE6NjdXTU5UdkdybDdWMWRXZEtDZVR3eERyN25pbzljbEtvVGxMaHdJUG5UND0KLWdpdGh1Yi5jb20vZW52b3lwcm94eS9nby1jb250cm9sLXBsYW5lIHYwLjkuMC9nby5tb2QgaDE6WVRsLzltTmFDd2tSdm02ZDFhMkMzeW1GY2VZL0RDQlZ2c0toUkYwaUVBND0KLWdpdGh1Yi5jb20vZW52b3lwcm94eS9wcm90b2MtZ2VuLXZhbGlkYXRlIHYwLjEuMCBoMTpFUWNpRG5icll4eTEzUGdXb1k4QXFveEdpUHJwZ0JaMVI4VU5lM2RkYytBPQotZ2l0aHViLmNvbS9lbnZveXByb3h5L3Byb3RvYy1nZW4tdmFsaWRhdGUgdjAuMS4wL2dvLm1vZCBoMTppU214Y3lqcVRzSnBJMlI0TmFETjcra04yVkVVbksvcGNCbG1lc0FyRjdjPQotZ2l0aHViLmNvbS9nb2xhbmcvZ2xvZyB2MC4wLjAtMjAxNjAxMjYyMzUzMDgtMjNkZWY0ZTZjMTRiIGgxOlZLdHhhYnFYWmtGMjVwWTlla2ZSTDZhNTgyVDRQMzcvMzFYRXN0UTVwNTg9Ci1naXRodWIuY29tL2dvbGFuZy9nbG9nIHYwLjAuMC0yMDE2MDEyNjIzNTMwOC0yM2RlZjRlNmMxNGIvZ28ubW9kIGgxOlNCSDd5Z3hpOHBmVWxhT2tNTXVBUXRQSVVGOGVjV1A1SUVsL0NSN1ZQMlE9Ci1naXRodWIuY29tL2dvbGFuZy9tb2NrIHYxLjEuMSBoMTpHNUZScDhKblRkN1JRSDVrZW1WTmxNZXlYUUF6dFEzbU9XVjk1S3hzWEg4PQotZ2l0aHViLmNvbS9nb2xhbmcvbW9jayB2MS4xLjEvZ28ubW9kIGgxOm9UWXVJeE9yWnd0UGllQytIMXVBSHBjTEZuRXlBR1ZETC9rNDdKZmJtMEE9Ci1naXRodWIuY29tL2dvbGFuZy9wcm90b2J1ZiB2MS4yLjAvZ28ubW9kIGgxOjZsUW03OWIrbFhpTWZ2Zy9jWm0wU0dvZmpJQ3FWQlV0clA1eUpNbUlDMVU9Ci1naXRodWIuY29tL2dvbGFuZy9wcm90b2J1ZiB2MS4zLjIgaDE6Nm5zUFl6aHE1a1JlaDZRSW1JM2s1cVd6TzRQRWJ2YklXMmN3U2ZSLzZ4cz0KLWdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmIHYxLjMuMi9nby5tb2QgaDE6NmxRbTc5YitsWGlNZnZnL2NabTBTR29maklDcVZCVXRyUDV5Sk1tSUMxVT0KLWdpdGh1Yi5jb20vZ29vZ2xlL2dvLWNtcCB2MC4yLjAgaDE6K2RUUThEWlFKejBNYi9IakZsa3B0UzFGZVE0Y1dTbk45NDFGOGFFRzRTUT0KLWdpdGh1Yi5jb20vZ29vZ2xlL2dvLWNtcCB2MC4yLjAvZ28ubW9kIGgxOm9YemZNb3BLOEpBamxZOXhGNHZIU1ZBU2EweUx5WDdTbnRMTzVhcVJLME09Ci1naXRodWIuY29tL3Byb21ldGhldXMvY2xpZW50X21vZGVsIHYwLjAuMC0yMDE5MDgxMjE1NDI0MS0xNGZlMGQxYjAxZDQvZ28ubW9kIGgxOnhNSTE1QTBVUHNEc0VLc01OOXl4ZW1Jb1lrNlRtMkMxR3RZR2RmR3R0cUE9Ci1nb2xhbmcub3JnL3gvY3J5cHRvIHYwLjAuMC0yMDE5MDMwODIyMTcxOC1jMjg0M2UwMWQ5YTIvZ28ubW9kIGgxOmRqTmdjRXIxL0MwNUFDa2cxaUxmaUpVNUVwNjFRVWtHVzhxcGRzc0kwK3c9Ci1nb2xhbmcub3JnL3gvZXhwIHYwLjAuMC0yMDE5MDEyMTE3MjkxNS01MDlmZWJlZjg4YTQvZ28ubW9kIGgxOkNKMGFXU00wNTcyMDNMZjZJTCtmOVQxaVQ5R0J5RHhmWktBUVRDUjNrUUE9Ci1nb2xhbmcub3JnL3gvbGludCB2MC4wLjAtMjAxODEwMjYxOTMwMDUtYzY3MDAyY2IzMWMzL2dvLm1vZCBoMTpVVmRuRDFHbTZ4SFJOQ1lUa1JVMi9qRXVsZkgzOEtjSVd5cC9HQU1ndm9FPQotZ29sYW5nLm9yZy94L2xpbnQgdjAuMC4wLTIwMTkwMjI3MTc0MzA1LTViM2U2YTU1Yzk2MS9nby5tb2QgaDE6d2Vob3VOYTNsTndhV1hjdnhzTTVZeFE1eVFsVkM0YTBLQU1DdXNYcFBvVT0KLWdvbGFuZy5vcmcveC9saW50IHYwLjAuMC0yMDE5MDMxMzE1MzcyOC1kMDEwMGI2YmQ4YjMvZ28ubW9kIGgxOjZTVzBIQ2ovZzExRmdZdEhsZ1VZVXdDa0lmZU9GODlvY0lSekdPLzh2a2M9Ci1nb2xhbmcub3JnL3gvbmV0IHYwLjAuMC0yMDE4MDcyNDIzNDgwMy0zNjczZTQwYmEyMjUvZ28ubW9kIGgxOm1MMU4vVDN0YVFIa0RYczczclpKd3RVaEYzdzNmdG13d3NxMEJVbUFSczQ9Ci1nb2xhbmcub3JnL3gvbmV0IHYwLjAuMC0yMDE4MDgyNjAxMjM1MS04YTQxMGU3YjYzOGQvZ28ubW9kIGgxOm1MMU4vVDN0YVFIa0RYczczclpKd3RVaEYzdzNmdG13d3NxMEJVbUFSczQ9Ci1nb2xhbmcub3JnL3gvbmV0IHYwLjAuMC0yMDE5MDIxMzA2MTE0MC0zYTIyNjUwYzY2YmQvZ28ubW9kIGgxOm1MMU4vVDN0YVFIa0RYczczclpKd3RVaEYzdzNmdG13d3NxMEJVbUFSczQ9Ci1nb2xhbmcub3JnL3gvbmV0IHYwLjAuMC0yMDE5MDMxMTE4MzM1My1kODg4NzcxNzYxNWEgaDE6b1dYN1RQT2lGQU1YTHE4bzBpa0JZZkNKVmxSSEJjc2NpVDViWE9ySDYyOD0KLWdvbGFuZy5vcmcveC9uZXQgdjAuMC4wLTIwMTkwMzExMTgzMzUzLWQ4ODg3NzE3NjE1YS9nby5tb2QgaDE6dDlIR3RmOEhPTng1ZVQycnRuN3E2ZVRxSUNZcVVWbktzM3RoSm8zUXBsZz0KLWdvbGFuZy5vcmcveC9vYXV0aDIgdjAuMC4wLTIwMTgwODIxMjEyMzMzLWQyZTYyMDI0MzhiZSBoMTp2RUR1anZOUUd2NGpnWUt1ZEdlSS8rREFYNEpmZnE2aHBENTVNbW9FdktzPQotZ29sYW5nLm9yZy94L29hdXRoMiB2MC4wLjAtMjAxODA4MjEyMTIzMzMtZDJlNjIwMjQzOGJlL2dvLm1vZCBoMTpOLzBlNlhsbXVlcUtqQUd4b091ZlZzOFFIR1JydVVRbjZ5V1kzYSsrVDBVPQotZ29sYW5nLm9yZy94L3N5bmMgdjAuMC4wLTIwMTgwMzE0MTgwMTQ2LTFkNjBlNDYwMWM2Zi9nby5tb2QgaDE6UnhNZ2V3NVZKeHp1ZTUvakpURTV1ZWpwalZsT2UvaXpyQjcwSm9mNzJhTT0KLWdvbGFuZy5vcmcveC9zeW5jIHYwLjAuMC0yMDE4MTEwODAxMDQzMS00MmIzMTc4NzVkMGYvZ28ubW9kIGgxOlJ4TWdldzVWSnh6dWU1L2pKVEU1dWVqcGpWbE9lL2l6ckI3MEpvZjcyYU09Ci1nb2xhbmcub3JnL3gvc3luYyB2MC4wLjAtMjAxOTA0MjMwMjQ4MTAtMTEyMjMwMTkyYzU4L2dvLm1vZCBoMTpSeE1nZXc1Vkp4enVlNS9qSlRFNXVlanBqVmxPZS9penJCNzBKb2Y3MmFNPQotZ29sYW5nLm9yZy94L3N5cyB2MC4wLjAtMjAxODA4MzAxNTE1MzAtNDkzODVlNmUxNTIyL2dvLm1vZCBoMTpTVFA4RHZEeWMvZEk1YjhUNWhzaHRralMrRTQyVG55c05DVVBkamNpR2hZPQotZ29sYW5nLm9yZy94L3N5cyB2MC4wLjAtMjAxOTAyMTUxNDI5NDktZDBiMTFiZGFhYzhhIGgxOjFCR0xYamVZNGFrVlhHZ2JDOUh1Z1QzSnYzaENJMHo1Nm9KUjV2QU1nQlU9Ci1nb2xhbmcub3JnL3gvc3lzIHYwLjAuMC0yMDE5MDIxNTE0Mjk0OS1kMGIxMWJkYWFjOGEvZ28ubW9kIGgxOlNUUDhEdkR5Yy9kSTViOFQ1aHNodGtqUytFNDJUbnlzTkNVUGRqY2lHaFk9Ci1nb2xhbmcub3JnL3gvdGV4dCB2MC4zLjAgaDE6ZzYxdHp0RTVxZUdRODl0bTZOVGpqTTlWUEltMDg4b2QxbDZhU29yV1JXZz0KLWdvbGFuZy5vcmcveC90ZXh0IHYwLjMuMC9nby5tb2QgaDE6TnFNOEVVT1UxNG5qa0ozZnFNVytwYzZMZG53aGkvSWpwd0h0N3l5dXdPUT0KLWdvbGFuZy5vcmcveC90b29scyB2MC4wLjAtMjAxOTAxMTQyMjIzNDUtYmYwOTA0MTdkYThiL2dvLm1vZCBoMTpuN05DdWRjQi9uRXp4VkdtTGJEV1k1cGZXVExxQmNDMktaNmp5WXZNNG1RPQotZ29sYW5nLm9yZy94L3Rvb2xzIHYwLjAuMC0yMDE5MDIyNjIwNTE1Mi1mNzI3YmVmZTc1OGMvZ28ubW9kIGgxOjlZbDd4amEwWm5xM2lGaDNIb0lyb2RYOW9OTVh2ZGNlTnpsVVI4empNdlk9Ci1nb2xhbmcub3JnL3gvdG9vbHMgdjAuMC4wLTIwMTkwMzExMjEyOTQ2LTExOTU1MTczYmRkZC9nby5tb2QgaDE6TEN6VkdPYVI2eFhPamtRM29udTFGSkVGcjBTVzFnQzdjS2sxdUY4a0dScz0KLWdvbGFuZy5vcmcveC90b29scyB2MC4wLjAtMjAxOTA1MjQxNDAzMTItMmMwYWU3MDA2MTM1L2dvLm1vZCBoMTpSZ2pVOW1nQlhaaXFZSEJueFhhdVoxR3YxRUhIQXo5S2pWaVE3OHhCWDBRPQotZ29vZ2xlLmdvbGFuZy5vcmcvYXBwZW5naW5lIHYxLjEuMC9nby5tb2QgaDE6RWJFczBBVnY4Mmh4MndOUWRHUGdVSTVsaHpBL0cwRDlZd2xKWEw1MkprTT0KLWdvb2dsZS5nb2xhbmcub3JnL2FwcGVuZ2luZSB2MS40LjAgaDE6L3dwNUp2enBISXhocy9kdW1GbUY3QlhUZjNaK2RkNHVYdGE0a1Z5TzUwOD0KLWdvb2dsZS5nb2xhbmcub3JnL2FwcGVuZ2luZSB2MS40LjAvZ28ubW9kIGgxOnhwY0pSTGIwci9ybkVuczBESUtZWXYrV2pZQ2R1SHNya1Q3L0VCNVhFdjQ9Ci1nb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90byB2MC4wLjAtMjAxODA4MTcxNTE2MjctYzY2ODcwYzAyY2Y4L2dvLm1vZCBoMTpKaU43TnhvQUxHbWlaZnU3Q0FINHJYaGd0UlRMVHhmdGVtbEkwc1dteG1jPQotZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8gdjAuMC4wLTIwMTkwODE5MjAxOTQxLTI0ZmE0YjI2MWM1NSBoMTpnU0pJeDFTRHdubysyRWxHaEE0K3FHMnpGOTdxaVV6VE0rclEwa2xCT2NFPQotZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8gdjAuMC4wLTIwMTkwODE5MjAxOTQxLTI0ZmE0YjI2MWM1NS9nby5tb2QgaDE6RE1CSE9sOThBZ3o0QkRFdUtrZXpnc2Fvc0NSUmVzVm5zMWEzSjJac01OYz0KLWdvb2dsZS5nb2xhbmcub3JnL2dycGMgdjEuMTkuMC9nby5tb2QgaDE6bXF1NExiRFR1NFhHS2hyNG1SelVzbU00UnRWb2VtVFNZODFBeFppRHI4Yz0KLWdvb2dsZS5nb2xhbmcub3JnL2dycGMgdjEuMjMuMC9nby5tb2QgaDE6WTV5UUFPdGlmTDF5eGJvNXdxeTZCeFp2OHZBVUdRd1hCT0FMeWFjRWJ4Zz0KLWhvbm5lZi5jby9nby90b29scyB2MC4wLjAtMjAxOTAxMDIwNTQzMjMtYzJmOTNhOTZiMDk5L2dvLm1vZCBoMTpyZjNsRzRCUkliTmFmSldoQWZBZGIvZVBaeHNSLzRSdE5IUW9jeHdrOXI0PQotaG9ubmVmLmNvL2dvL3Rvb2xzIHYwLjAuMC0yMDE5MDUyMzA4MzA1MC1lYTk1YmRmZDU5ZmMvZ28ubW9kIGgxOnJmM2xHNEJSSWJOYWZKV2hBZkFkYi9lUFp4c1IvNFJ0TkhRb2N4d2s5cjQ9CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvQVVUSE9SUyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9BVVRIT1JTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjAwZGRiLi4wMDAwMDAwCi0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9BVVRIT1JTCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIFRoaXMgc291cmNlIGNvZGUgcmVmZXJzIHRvIFRoZSBHbyBBdXRob3JzIGZvciBjb3B5cmlnaHQgcHVycG9zZXMuCi0jIFRoZSBtYXN0ZXIgbGlzdCBvZiBhdXRob3JzIGlzIGluIHRoZSBtYWluIEdvIGRpc3RyaWJ1dGlvbiwKLSMgdmlzaWJsZSBhdCBodHRwczovL3RpcC5nb2xhbmcub3JnL0FVVEhPUlMuCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvQ09OVFJJQlVUT1JTIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL0NPTlRSSUJVVE9SUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZiZDNlOS4uMDAwMDAwMAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvQ09OVFJJQlVUT1JTCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIFRoaXMgc291cmNlIGNvZGUgd2FzIHdyaXR0ZW4gYnkgdGhlIEdvIGNvbnRyaWJ1dG9ycy4KLSMgVGhlIG1hc3RlciBsaXN0IG9mIGNvbnRyaWJ1dG9ycyBpcyBpbiB0aGUgbWFpbiBHbyBkaXN0cmlidXRpb24sCi0jIHZpc2libGUgYXQgaHR0cHM6Ly90aXAuZ29sYW5nLm9yZy9DT05UUklCVVRPUlMuCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG90ZXh0L2RlY29kZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3RleHQvZGVjb2RlLmdvCmluZGV4IDE3OWQ2ZTguLmE0NWYxMTIgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3RleHQvZGVjb2RlLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3RleHQvZGVjb2RlLmdvCkBAIC0xNywxMSArMTcsMTEgQEAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvc2V0IgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90byIKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeSIKICkKIAotLy8gVW5tYXJzaGFsIHJlYWRzIHRoZSBnaXZlbiBbXWJ5dGUgaW50byB0aGUgZ2l2ZW4gcHJvdG8uTWVzc2FnZS4KKy8vIFVubWFyc2hhbCByZWFkcyB0aGUgZ2l2ZW4gW11ieXRlIGludG8gdGhlIGdpdmVuIFtwcm90by5NZXNzYWdlXS4KIC8vIFRoZSBwcm92aWRlZCBtZXNzYWdlIG11c3QgYmUgbXV0YWJsZSAoZS5nLiwgYSBub24tbmlsIHBvaW50ZXIgdG8gYSBtZXNzYWdlKS4KIGZ1bmMgVW5tYXJzaGFsKGIgW11ieXRlLCBtIHByb3RvLk1lc3NhZ2UpIGVycm9yIHsKIAlyZXR1cm4gVW5tYXJzaGFsT3B0aW9uc3t9LlVubWFyc2hhbChiLCBtKQpAQCAtNTEsNyArNTEsNyBAQAogCX0KIH0KIAotLy8gVW5tYXJzaGFsIHJlYWRzIHRoZSBnaXZlbiBbXWJ5dGUgYW5kIHBvcHVsYXRlcyB0aGUgZ2l2ZW4gcHJvdG8uTWVzc2FnZQorLy8gVW5tYXJzaGFsIHJlYWRzIHRoZSBnaXZlbiBbXWJ5dGUgYW5kIHBvcHVsYXRlcyB0aGUgZ2l2ZW4gW3Byb3RvLk1lc3NhZ2VdCiAvLyB1c2luZyBvcHRpb25zIGluIHRoZSBVbm1hcnNoYWxPcHRpb25zIG9iamVjdC4KIC8vIFRoZSBwcm92aWRlZCBtZXNzYWdlIG11c3QgYmUgbXV0YWJsZSAoZS5nLiwgYSBub24tbmlsIHBvaW50ZXIgdG8gYSBtZXNzYWdlKS4KIGZ1bmMgKG8gVW5tYXJzaGFsT3B0aW9ucykgVW5tYXJzaGFsKGIgW11ieXRlLCBtIHByb3RvLk1lc3NhZ2UpIGVycm9yIHsKQEAgLTEwMyw3ICsxMDMsNyBAQAogfQogCiAvLyB1bm1hcnNoYWxNZXNzYWdlIHVubWFyc2hhbHMgaW50byB0aGUgZ2l2ZW4gcHJvdG9yZWZsZWN0Lk1lc3NhZ2UuCi1mdW5jIChkIGRlY29kZXIpIHVubWFyc2hhbE1lc3NhZ2UobSBwcmVmLk1lc3NhZ2UsIGNoZWNrRGVsaW1zIGJvb2wpIGVycm9yIHsKK2Z1bmMgKGQgZGVjb2RlcikgdW5tYXJzaGFsTWVzc2FnZShtIHByb3RvcmVmbGVjdC5NZXNzYWdlLCBjaGVja0RlbGltcyBib29sKSBlcnJvciB7CiAJbWVzc2FnZURlc2MgOj0gbS5EZXNjcmlwdG9yKCkKIAlpZiAhZmxhZ3MuUHJvdG9MZWdhY3kgJiYgbWVzc2FnZXNldC5Jc01lc3NhZ2VTZXQobWVzc2FnZURlc2MpIHsKIAkJcmV0dXJuIGVycm9ycy5OZXcoIm5vIHN1cHBvcnQgZm9yIHByb3RvMSBNZXNzYWdlU2V0cyIpCkBAIC0xNTAsMjQgKzE1MCwyNCBAQAogCQl9CiAKIAkJLy8gUmVzb2x2ZSB0aGUgZmllbGQgZGVzY3JpcHRvci4KLQkJdmFyIG5hbWUgcHJlZi5OYW1lCi0JCXZhciBmZCBwcmVmLkZpZWxkRGVzY3JpcHRvcgotCQl2YXIgeHQgcHJlZi5FeHRlbnNpb25UeXBlCisJCXZhciBuYW1lIHByb3RvcmVmbGVjdC5OYW1lCisJCXZhciBmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yCisJCXZhciB4dCBwcm90b3JlZmxlY3QuRXh0ZW5zaW9uVHlwZQogCQl2YXIgeHRFcnIgZXJyb3IKIAkJdmFyIGlzRmllbGROdW1iZXJOYW1lIGJvb2wKIAogCQlzd2l0Y2ggdG9rLk5hbWVLaW5kKCkgewogCQljYXNlIHRleHQuSWRlbnROYW1lOgotCQkJbmFtZSA9IHByZWYuTmFtZSh0b2suSWRlbnROYW1lKCkpCisJCQluYW1lID0gcHJvdG9yZWZsZWN0Lk5hbWUodG9rLklkZW50TmFtZSgpKQogCQkJZmQgPSBmaWVsZERlc2NzLkJ5VGV4dE5hbWUoc3RyaW5nKG5hbWUpKQogCiAJCWNhc2UgdGV4dC5UeXBlTmFtZToKIAkJCS8vIEhhbmRsZSBleHRlbnNpb25zIG9ubHkuIFRoaXMgY29kZSBwYXRoIGlzIG5vdCBmb3IgQW55LgotCQkJeHQsIHh0RXJyID0gZC5vcHRzLlJlc29sdmVyLkZpbmRFeHRlbnNpb25CeU5hbWUocHJlZi5GdWxsTmFtZSh0b2suVHlwZU5hbWUoKSkpCisJCQl4dCwgeHRFcnIgPSBkLm9wdHMuUmVzb2x2ZXIuRmluZEV4dGVuc2lvbkJ5TmFtZShwcm90b3JlZmxlY3QuRnVsbE5hbWUodG9rLlR5cGVOYW1lKCkpKQogCiAJCWNhc2UgdGV4dC5GaWVsZE51bWJlcjoKIAkJCWlzRmllbGROdW1iZXJOYW1lID0gdHJ1ZQotCQkJbnVtIDo9IHByZWYuRmllbGROdW1iZXIodG9rLkZpZWxkTnVtYmVyKCkpCisJCQludW0gOj0gcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKHRvay5GaWVsZE51bWJlcigpKQogCQkJaWYgIW51bS5Jc1ZhbGlkKCkgewogCQkJCXJldHVybiBkLm5ld0Vycm9yKHRvay5Qb3MoKSwgImludmFsaWQgZmllbGQgbnVtYmVyOiAlZCIsIG51bSkKIAkJCX0KQEAgLTIxNSw3ICsyMTUsNyBAQAogCQlzd2l0Y2ggewogCQljYXNlIGZkLklzTGlzdCgpOgogCQkJa2luZCA6PSBmZC5LaW5kKCkKLQkJCWlmIGtpbmQgIT0gcHJlZi5NZXNzYWdlS2luZCAmJiBraW5kICE9IHByZWYuR3JvdXBLaW5kICYmICF0b2suSGFzU2VwYXJhdG9yKCkgeworCQkJaWYga2luZCAhPSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQgJiYga2luZCAhPSBwcm90b3JlZmxlY3QuR3JvdXBLaW5kICYmICF0b2suSGFzU2VwYXJhdG9yKCkgewogCQkJCXJldHVybiBkLnN5bnRheEVycm9yKHRvay5Qb3MoKSwgIm1pc3NpbmcgZmllbGQgc2VwYXJhdG9yIDoiKQogCQkJfQogCkBAIC0yMzIsNyArMjMyLDcgQEAKIAogCQlkZWZhdWx0OgogCQkJa2luZCA6PSBmZC5LaW5kKCkKLQkJCWlmIGtpbmQgIT0gcHJlZi5NZXNzYWdlS2luZCAmJiBraW5kICE9IHByZWYuR3JvdXBLaW5kICYmICF0b2suSGFzU2VwYXJhdG9yKCkgeworCQkJaWYga2luZCAhPSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQgJiYga2luZCAhPSBwcm90b3JlZmxlY3QuR3JvdXBLaW5kICYmICF0b2suSGFzU2VwYXJhdG9yKCkgewogCQkJCXJldHVybiBkLnN5bnRheEVycm9yKHRvay5Qb3MoKSwgIm1pc3NpbmcgZmllbGQgc2VwYXJhdG9yIDoiKQogCQkJfQogCkBAIC0yNjIsMTEgKzI2MiwxMSBAQAogCiAvLyB1bm1hcnNoYWxTaW5ndWxhciB1bm1hcnNoYWxzIGEgbm9uLXJlcGVhdGVkIGZpZWxkIHZhbHVlIHNwZWNpZmllZCBieSB0aGUKIC8vIGdpdmVuIEZpZWxkRGVzY3JpcHRvci4KLWZ1bmMgKGQgZGVjb2RlcikgdW5tYXJzaGFsU2luZ3VsYXIoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IsIG0gcHJlZi5NZXNzYWdlKSBlcnJvciB7Ci0JdmFyIHZhbCBwcmVmLlZhbHVlCitmdW5jIChkIGRlY29kZXIpIHVubWFyc2hhbFNpbmd1bGFyKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIG0gcHJvdG9yZWZsZWN0Lk1lc3NhZ2UpIGVycm9yIHsKKwl2YXIgdmFsIHByb3RvcmVmbGVjdC5WYWx1ZQogCXZhciBlcnIgZXJyb3IKIAlzd2l0Y2ggZmQuS2luZCgpIHsKLQljYXNlIHByZWYuTWVzc2FnZUtpbmQsIHByZWYuR3JvdXBLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VLaW5kLCBwcm90b3JlZmxlY3QuR3JvdXBLaW5kOgogCQl2YWwgPSBtLk5ld0ZpZWxkKGZkKQogCQllcnIgPSBkLnVubWFyc2hhbE1lc3NhZ2UodmFsLk1lc3NhZ2UoKSwgdHJ1ZSkKIAlkZWZhdWx0OgpAQCAtMjgwLDk0ICsyODAsOTQgQEAKIAogLy8gdW5tYXJzaGFsU2NhbGFyIHVubWFyc2hhbHMgYSBzY2FsYXIvZW51bSBwcm90b3JlZmxlY3QuVmFsdWUgc3BlY2lmaWVkIGJ5IHRoZQogLy8gZ2l2ZW4gRmllbGREZXNjcmlwdG9yLgotZnVuYyAoZCBkZWNvZGVyKSB1bm1hcnNoYWxTY2FsYXIoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpIChwcmVmLlZhbHVlLCBlcnJvcikgeworZnVuYyAoZCBkZWNvZGVyKSB1bm1hcnNoYWxTY2FsYXIoZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgKHByb3RvcmVmbGVjdC5WYWx1ZSwgZXJyb3IpIHsKIAl0b2ssIGVyciA6PSBkLlJlYWQoKQogCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gcHJlZi5WYWx1ZXt9LCBlcnIKKwkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZXt9LCBlcnIKIAl9CiAKIAlpZiB0b2suS2luZCgpICE9IHRleHQuU2NhbGFyIHsKLQkJcmV0dXJuIHByZWYuVmFsdWV7fSwgZC51bmV4cGVjdGVkVG9rZW5FcnJvcih0b2spCisJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWV7fSwgZC51bmV4cGVjdGVkVG9rZW5FcnJvcih0b2spCiAJfQogCiAJa2luZCA6PSBmZC5LaW5kKCkKIAlzd2l0Y2gga2luZCB7Ci0JY2FzZSBwcmVmLkJvb2xLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LkJvb2xLaW5kOgogCQlpZiBiLCBvayA6PSB0b2suQm9vbCgpOyBvayB7Ci0JCQlyZXR1cm4gcHJlZi5WYWx1ZU9mQm9vbChiKSwgbmlsCisJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZCb29sKGIpLCBuaWwKIAkJfQogCi0JY2FzZSBwcmVmLkludDMyS2luZCwgcHJlZi5TaW50MzJLaW5kLCBwcmVmLlNmaXhlZDMyS2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5JbnQzMktpbmQsIHByb3RvcmVmbGVjdC5TaW50MzJLaW5kLCBwcm90b3JlZmxlY3QuU2ZpeGVkMzJLaW5kOgogCQlpZiBuLCBvayA6PSB0b2suSW50MzIoKTsgb2sgewotCQkJcmV0dXJuIHByZWYuVmFsdWVPZkludDMyKG4pLCBuaWwKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkludDMyKG4pLCBuaWwKIAkJfQogCi0JY2FzZSBwcmVmLkludDY0S2luZCwgcHJlZi5TaW50NjRLaW5kLCBwcmVmLlNmaXhlZDY0S2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5JbnQ2NEtpbmQsIHByb3RvcmVmbGVjdC5TaW50NjRLaW5kLCBwcm90b3JlZmxlY3QuU2ZpeGVkNjRLaW5kOgogCQlpZiBuLCBvayA6PSB0b2suSW50NjQoKTsgb2sgewotCQkJcmV0dXJuIHByZWYuVmFsdWVPZkludDY0KG4pLCBuaWwKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkludDY0KG4pLCBuaWwKIAkJfQogCi0JY2FzZSBwcmVmLlVpbnQzMktpbmQsIHByZWYuRml4ZWQzMktpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuVWludDMyS2luZCwgcHJvdG9yZWZsZWN0LkZpeGVkMzJLaW5kOgogCQlpZiBuLCBvayA6PSB0b2suVWludDMyKCk7IG9rIHsKLQkJCXJldHVybiBwcmVmLlZhbHVlT2ZVaW50MzIobiksIG5pbAorCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mVWludDMyKG4pLCBuaWwKIAkJfQogCi0JY2FzZSBwcmVmLlVpbnQ2NEtpbmQsIHByZWYuRml4ZWQ2NEtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuVWludDY0S2luZCwgcHJvdG9yZWZsZWN0LkZpeGVkNjRLaW5kOgogCQlpZiBuLCBvayA6PSB0b2suVWludDY0KCk7IG9rIHsKLQkJCXJldHVybiBwcmVmLlZhbHVlT2ZVaW50NjQobiksIG5pbAorCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mVWludDY0KG4pLCBuaWwKIAkJfQogCi0JY2FzZSBwcmVmLkZsb2F0S2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5GbG9hdEtpbmQ6CiAJCWlmIG4sIG9rIDo9IHRvay5GbG9hdDMyKCk7IG9rIHsKLQkJCXJldHVybiBwcmVmLlZhbHVlT2ZGbG9hdDMyKG4pLCBuaWwKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkZsb2F0MzIobiksIG5pbAogCQl9CiAKLQljYXNlIHByZWYuRG91YmxlS2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5Eb3VibGVLaW5kOgogCQlpZiBuLCBvayA6PSB0b2suRmxvYXQ2NCgpOyBvayB7Ci0JCQlyZXR1cm4gcHJlZi5WYWx1ZU9mRmxvYXQ2NChuKSwgbmlsCisJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZGbG9hdDY0KG4pLCBuaWwKIAkJfQogCi0JY2FzZSBwcmVmLlN0cmluZ0tpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZDoKIAkJaWYgcywgb2sgOj0gdG9rLlN0cmluZygpOyBvayB7CiAJCQlpZiBzdHJzLkVuZm9yY2VVVEY4KGZkKSAmJiAhdXRmOC5WYWxpZFN0cmluZyhzKSB7Ci0JCQkJcmV0dXJuIHByZWYuVmFsdWV7fSwgZC5uZXdFcnJvcih0b2suUG9zKCksICJjb250YWlucyBpbnZhbGlkIFVURi04IikKKwkJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVle30sIGQubmV3RXJyb3IodG9rLlBvcygpLCAiY29udGFpbnMgaW52YWxpZCBVVEYtOCIpCiAJCQl9Ci0JCQlyZXR1cm4gcHJlZi5WYWx1ZU9mU3RyaW5nKHMpLCBuaWwKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZlN0cmluZyhzKSwgbmlsCiAJCX0KIAotCWNhc2UgcHJlZi5CeXRlc0tpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuQnl0ZXNLaW5kOgogCQlpZiBiLCBvayA6PSB0b2suU3RyaW5nKCk7IG9rIHsKLQkJCXJldHVybiBwcmVmLlZhbHVlT2ZCeXRlcyhbXWJ5dGUoYikpLCBuaWwKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkJ5dGVzKFtdYnl0ZShiKSksIG5pbAogCQl9CiAKLQljYXNlIHByZWYuRW51bUtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuRW51bUtpbmQ6CiAJCWlmIGxpdCwgb2sgOj0gdG9rLkVudW0oKTsgb2sgewogCQkJLy8gTG9va3VwIEVudW1OdW1iZXIgYmFzZWQgb24gbmFtZS4KLQkJCWlmIGVudW1WYWwgOj0gZmQuRW51bSgpLlZhbHVlcygpLkJ5TmFtZShwcmVmLk5hbWUobGl0KSk7IGVudW1WYWwgIT0gbmlsIHsKLQkJCQlyZXR1cm4gcHJlZi5WYWx1ZU9mRW51bShlbnVtVmFsLk51bWJlcigpKSwgbmlsCisJCQlpZiBlbnVtVmFsIDo9IGZkLkVudW0oKS5WYWx1ZXMoKS5CeU5hbWUocHJvdG9yZWZsZWN0Lk5hbWUobGl0KSk7IGVudW1WYWwgIT0gbmlsIHsKKwkJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZFbnVtKGVudW1WYWwuTnVtYmVyKCkpLCBuaWwKIAkJCX0KIAkJfQogCQlpZiBudW0sIG9rIDo9IHRvay5JbnQzMigpOyBvayB7Ci0JCQlyZXR1cm4gcHJlZi5WYWx1ZU9mRW51bShwcmVmLkVudW1OdW1iZXIobnVtKSksIG5pbAorCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mRW51bShwcm90b3JlZmxlY3QuRW51bU51bWJlcihudW0pKSwgbmlsCiAJCX0KIAogCWRlZmF1bHQ6CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHNjYWxhciBraW5kICV2Iiwga2luZCkpCiAJfQogCi0JcmV0dXJuIHByZWYuVmFsdWV7fSwgZC5uZXdFcnJvcih0b2suUG9zKCksICJpbnZhbGlkIHZhbHVlIGZvciAldiB0eXBlOiAldiIsIGtpbmQsIHRvay5SYXdTdHJpbmcoKSkKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVle30sIGQubmV3RXJyb3IodG9rLlBvcygpLCAiaW52YWxpZCB2YWx1ZSBmb3IgJXYgdHlwZTogJXYiLCBraW5kLCB0b2suUmF3U3RyaW5nKCkpCiB9CiAKIC8vIHVubWFyc2hhbExpc3QgdW5tYXJzaGFscyBpbnRvIGdpdmVuIHByb3RvcmVmbGVjdC5MaXN0LiBBIGxpc3QgdmFsdWUgY2FuCiAvLyBlaXRoZXIgYmUgaW4gW10gc3ludGF4IG9yIHNpbXBseSBqdXN0IGEgc2luZ2xlIHNjYWxhci9tZXNzYWdlIHZhbHVlLgotZnVuYyAoZCBkZWNvZGVyKSB1bm1hcnNoYWxMaXN0KGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCBsaXN0IHByZWYuTGlzdCkgZXJyb3IgeworZnVuYyAoZCBkZWNvZGVyKSB1bm1hcnNoYWxMaXN0KGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIGxpc3QgcHJvdG9yZWZsZWN0Lkxpc3QpIGVycm9yIHsKIAl0b2ssIGVyciA6PSBkLlBlZWsoKQogCWlmIGVyciAhPSBuaWwgewogCQlyZXR1cm4gZXJyCiAJfQogCiAJc3dpdGNoIGZkLktpbmQoKSB7Ci0JY2FzZSBwcmVmLk1lc3NhZ2VLaW5kLCBwcmVmLkdyb3VwS2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZCwgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKIAkJc3dpdGNoIHRvay5LaW5kKCkgewogCQljYXNlIHRleHQuTGlzdE9wZW46CiAJCQlkLlJlYWQoKQpAQCAtNDQxLDIyICs0NDEsMjIgQEAKIAogLy8gdW5tYXJzaGFsTWFwIHVubWFyc2hhbHMgaW50byBnaXZlbiBwcm90b3JlZmxlY3QuTWFwLiBBIG1hcCB2YWx1ZSBpcyBhCiAvLyB0ZXh0cHJvdG8gbWVzc2FnZSBjb250YWluaW5nIHtrZXk6IDxrdmFsdWU+LCB2YWx1ZTogPG12YWx1ZT59LgotZnVuYyAoZCBkZWNvZGVyKSB1bm1hcnNoYWxNYXAoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IsIG1tYXAgcHJlZi5NYXApIGVycm9yIHsKK2Z1bmMgKGQgZGVjb2RlcikgdW5tYXJzaGFsTWFwKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIG1tYXAgcHJvdG9yZWZsZWN0Lk1hcCkgZXJyb3IgewogCS8vIERldGVybWluZSBhaGVhZCB3aGV0aGVyIG1hcCBlbnRyeSBpcyBhIHNjYWxhciB0eXBlIG9yIGEgbWVzc2FnZSB0eXBlIGluCiAJLy8gb3JkZXIgdG8gY2FsbCB0aGUgYXBwcm9wcmlhdGUgdW5tYXJzaGFsTWFwVmFsdWUgZnVuYyBpbnNpZGUKIAkvLyB1bm1hcnNoYWxNYXBFbnRyeS4KLQl2YXIgdW5tYXJzaGFsTWFwVmFsdWUgZnVuYygpIChwcmVmLlZhbHVlLCBlcnJvcikKKwl2YXIgdW5tYXJzaGFsTWFwVmFsdWUgZnVuYygpIChwcm90b3JlZmxlY3QuVmFsdWUsIGVycm9yKQogCXN3aXRjaCBmZC5NYXBWYWx1ZSgpLktpbmQoKSB7Ci0JY2FzZSBwcmVmLk1lc3NhZ2VLaW5kLCBwcmVmLkdyb3VwS2luZDoKLQkJdW5tYXJzaGFsTWFwVmFsdWUgPSBmdW5jKCkgKHByZWYuVmFsdWUsIGVycm9yKSB7CisJY2FzZSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQsIHByb3RvcmVmbGVjdC5Hcm91cEtpbmQ6CisJCXVubWFyc2hhbE1hcFZhbHVlID0gZnVuYygpIChwcm90b3JlZmxlY3QuVmFsdWUsIGVycm9yKSB7CiAJCQlwdmFsIDo9IG1tYXAuTmV3VmFsdWUoKQogCQkJaWYgZXJyIDo9IGQudW5tYXJzaGFsTWVzc2FnZShwdmFsLk1lc3NhZ2UoKSwgdHJ1ZSk7IGVyciAhPSBuaWwgewotCQkJCXJldHVybiBwcmVmLlZhbHVle30sIGVycgorCQkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWV7fSwgZXJyCiAJCQl9CiAJCQlyZXR1cm4gcHZhbCwgbmlsCiAJCX0KIAlkZWZhdWx0OgotCQl1bm1hcnNoYWxNYXBWYWx1ZSA9IGZ1bmMoKSAocHJlZi5WYWx1ZSwgZXJyb3IpIHsKKwkJdW5tYXJzaGFsTWFwVmFsdWUgPSBmdW5jKCkgKHByb3RvcmVmbGVjdC5WYWx1ZSwgZXJyb3IpIHsKIAkJCXJldHVybiBkLnVubWFyc2hhbFNjYWxhcihmZC5NYXBWYWx1ZSgpKQogCQl9CiAJfQpAQCAtNDk0LDkgKzQ5NCw5IEBACiAKIC8vIHVubWFyc2hhbE1hcCB1bm1hcnNoYWxzIGludG8gZ2l2ZW4gcHJvdG9yZWZsZWN0Lk1hcC4gQSBtYXAgdmFsdWUgaXMgYQogLy8gdGV4dHByb3RvIG1lc3NhZ2UgY29udGFpbmluZyB7a2V5OiA8a3ZhbHVlPiwgdmFsdWU6IDxtdmFsdWU+fS4KLWZ1bmMgKGQgZGVjb2RlcikgdW5tYXJzaGFsTWFwRW50cnkoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IsIG1tYXAgcHJlZi5NYXAsIHVubWFyc2hhbE1hcFZhbHVlIGZ1bmMoKSAocHJlZi5WYWx1ZSwgZXJyb3IpKSBlcnJvciB7Ci0JdmFyIGtleSBwcmVmLk1hcEtleQotCXZhciBwdmFsIHByZWYuVmFsdWUKK2Z1bmMgKGQgZGVjb2RlcikgdW5tYXJzaGFsTWFwRW50cnkoZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciwgbW1hcCBwcm90b3JlZmxlY3QuTWFwLCB1bm1hcnNoYWxNYXBWYWx1ZSBmdW5jKCkgKHByb3RvcmVmbGVjdC5WYWx1ZSwgZXJyb3IpKSBlcnJvciB7CisJdmFyIGtleSBwcm90b3JlZmxlY3QuTWFwS2V5CisJdmFyIHB2YWwgcHJvdG9yZWZsZWN0LlZhbHVlCiBMb29wOgogCWZvciB7CiAJCS8vIFJlYWQgZmllbGQgbmFtZS4KQEAgLTUyMCw3ICs1MjAsNyBAQAogCQkJcmV0dXJuIGQudW5leHBlY3RlZFRva2VuRXJyb3IodG9rKQogCQl9CiAKLQkJc3dpdGNoIG5hbWUgOj0gcHJlZi5OYW1lKHRvay5JZGVudE5hbWUoKSk7IG5hbWUgeworCQlzd2l0Y2ggbmFtZSA6PSBwcm90b3JlZmxlY3QuTmFtZSh0b2suSWRlbnROYW1lKCkpOyBuYW1lIHsKIAkJY2FzZSBnZW5pZC5NYXBFbnRyeV9LZXlfZmllbGRfbmFtZToKIAkJCWlmICF0b2suSGFzU2VwYXJhdG9yKCkgewogCQkJCXJldHVybiBkLnN5bnRheEVycm9yKHRvay5Qb3MoKSwgIm1pc3NpbmcgZmllbGQgc2VwYXJhdG9yIDoiKQpAQCAtNTM1LDcgKzUzNSw3IEBACiAJCQlrZXkgPSB2YWwuTWFwS2V5KCkKIAogCQljYXNlIGdlbmlkLk1hcEVudHJ5X1ZhbHVlX2ZpZWxkX25hbWU6Ci0JCQlpZiBraW5kIDo9IGZkLk1hcFZhbHVlKCkuS2luZCgpOyAoa2luZCAhPSBwcmVmLk1lc3NhZ2VLaW5kKSAmJiAoa2luZCAhPSBwcmVmLkdyb3VwS2luZCkgeworCQkJaWYga2luZCA6PSBmZC5NYXBWYWx1ZSgpLktpbmQoKTsgKGtpbmQgIT0gcHJvdG9yZWZsZWN0Lk1lc3NhZ2VLaW5kKSAmJiAoa2luZCAhPSBwcm90b3JlZmxlY3QuR3JvdXBLaW5kKSB7CiAJCQkJaWYgIXRvay5IYXNTZXBhcmF0b3IoKSB7CiAJCQkJCXJldHVybiBkLnN5bnRheEVycm9yKHRvay5Qb3MoKSwgIm1pc3NpbmcgZmllbGQgc2VwYXJhdG9yIDoiKQogCQkJCX0KQEAgLTU2MSw3ICs1NjEsNyBAQAogCX0KIAlpZiAhcHZhbC5Jc1ZhbGlkKCkgewogCQlzd2l0Y2ggZmQuTWFwVmFsdWUoKS5LaW5kKCkgewotCQljYXNlIHByZWYuTWVzc2FnZUtpbmQsIHByZWYuR3JvdXBLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZCwgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKIAkJCS8vIElmIHZhbHVlIGZpZWxkIGlzIG5vdCBzZXQgZm9yIG1lc3NhZ2UvZ3JvdXAgdHlwZXMsIGNvbnN0cnVjdCBhbgogCQkJLy8gZW1wdHkgb25lIGFzIGRlZmF1bHQuCiAJCQlwdmFsID0gbW1hcC5OZXdWYWx1ZSgpCkBAIC01NzUsNyArNTc1LDcgQEAKIAogLy8gdW5tYXJzaGFsQW55IHVubWFyc2hhbHMgYW4gQW55IHRleHRwcm90by4gSXQgY2FuIGVpdGhlciBiZSBpbiBleHBhbmRlZCBmb3JtCiAvLyBvciBub24tZXhwYW5kZWQgZm9ybS4KLWZ1bmMgKGQgZGVjb2RlcikgdW5tYXJzaGFsQW55KG0gcHJlZi5NZXNzYWdlLCBjaGVja0RlbGltcyBib29sKSBlcnJvciB7CitmdW5jIChkIGRlY29kZXIpIHVubWFyc2hhbEFueShtIHByb3RvcmVmbGVjdC5NZXNzYWdlLCBjaGVja0RlbGltcyBib29sKSBlcnJvciB7CiAJdmFyIHR5cGVVUkwgc3RyaW5nCiAJdmFyIGJWYWx1ZSBbXWJ5dGUKIAl2YXIgc2VlblR5cGVVcmwgYm9vbApAQCAtNjE5LDcgKzYxOSw3IEBACiAJCQkJcmV0dXJuIGQuc3ludGF4RXJyb3IodG9rLlBvcygpLCAibWlzc2luZyBmaWVsZCBzZXBhcmF0b3IgOiIpCiAJCQl9CiAKLQkJCXN3aXRjaCBuYW1lIDo9IHByZWYuTmFtZSh0b2suSWRlbnROYW1lKCkpOyBuYW1lIHsKKwkJCXN3aXRjaCBuYW1lIDo9IHByb3RvcmVmbGVjdC5OYW1lKHRvay5JZGVudE5hbWUoKSk7IG5hbWUgewogCQkJY2FzZSBnZW5pZC5BbnlfVHlwZVVybF9maWVsZF9uYW1lOgogCQkJCWlmIHNlZW5UeXBlVXJsIHsKIAkJCQkJcmV0dXJuIGQubmV3RXJyb3IodG9rLlBvcygpLCAiZHVwbGljYXRlICV2IGZpZWxkIiwgZ2VuaWQuQW55X1R5cGVVcmxfZmllbGRfZnVsbG5hbWUpCkBAIC02ODYsMTAgKzY4NiwxMCBAQAogCiAJZmRzIDo9IG0uRGVzY3JpcHRvcigpLkZpZWxkcygpCiAJaWYgbGVuKHR5cGVVUkwpID4gMCB7Ci0JCW0uU2V0KGZkcy5CeU51bWJlcihnZW5pZC5BbnlfVHlwZVVybF9maWVsZF9udW1iZXIpLCBwcmVmLlZhbHVlT2ZTdHJpbmcodHlwZVVSTCkpCisJCW0uU2V0KGZkcy5CeU51bWJlcihnZW5pZC5BbnlfVHlwZVVybF9maWVsZF9udW1iZXIpLCBwcm90b3JlZmxlY3QuVmFsdWVPZlN0cmluZyh0eXBlVVJMKSkKIAl9CiAJaWYgbGVuKGJWYWx1ZSkgPiAwIHsKLQkJbS5TZXQoZmRzLkJ5TnVtYmVyKGdlbmlkLkFueV9WYWx1ZV9maWVsZF9udW1iZXIpLCBwcmVmLlZhbHVlT2ZCeXRlcyhiVmFsdWUpKQorCQltLlNldChmZHMuQnlOdW1iZXIoZ2VuaWQuQW55X1ZhbHVlX2ZpZWxkX251bWJlciksIHByb3RvcmVmbGVjdC5WYWx1ZU9mQnl0ZXMoYlZhbHVlKSkKIAl9CiAJcmV0dXJuIG5pbAogfQpAQCAtNzM5LDcgKzczOSw5IEBACiAJCQljYXNlIHRleHQuTGlzdENsb3NlOgogCQkJCXJldHVybiBuaWwKIAkJCWNhc2UgdGV4dC5NZXNzYWdlT3BlbjoKLQkJCQlyZXR1cm4gZC5za2lwTWVzc2FnZVZhbHVlKCkKKwkJCQlpZiBlcnIgOj0gZC5za2lwTWVzc2FnZVZhbHVlKCk7IGVyciAhPSBuaWwgeworCQkJCQlyZXR1cm4gZXJyCisJCQkJfQogCQkJZGVmYXVsdDoKIAkJCQkvLyBTa2lwIGl0ZW1zLiBUaGlzIHdpbGwgbm90IHZhbGlkYXRlIHdoZXRoZXIgc2tpcHBlZCB2YWx1ZXMgYXJlCiAJCQkJLy8gb2YgdGhlIHNhbWUgdHlwZSBvciBub3QsIHNhbWUgYmVoYXZpb3IgYXMgQysrCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG90ZXh0L2VuY29kZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3RleHQvZW5jb2RlLmdvCmluZGV4IDhkNTMwNGQuLjk1OTY3ZTggMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3RleHQvZW5jb2RlLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3RleHQvZW5jb2RlLmdvCkBAIC0yMCw3ICsyMCw2IEBACiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL3N0cnMiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZ2lzdHJ5IgogKQogCkBAIC0zNCw3ICszMyw3IEBACiAJcmV0dXJuIE1hcnNoYWxPcHRpb25ze011bHRpbGluZTogdHJ1ZX0uRm9ybWF0KG0pCiB9CiAKLS8vIE1hcnNoYWwgd3JpdGVzIHRoZSBnaXZlbiBwcm90by5NZXNzYWdlIGluIHRleHRwcm90byBmb3JtYXQgdXNpbmcgZGVmYXVsdAorLy8gTWFyc2hhbCB3cml0ZXMgdGhlIGdpdmVuIFtwcm90by5NZXNzYWdlXSBpbiB0ZXh0cHJvdG8gZm9ybWF0IHVzaW5nIGRlZmF1bHQKIC8vIG9wdGlvbnMuIERvIG5vdCBkZXBlbmQgb24gdGhlIG91dHB1dCBiZWluZyBzdGFibGUuIEl0IG1heSBjaGFuZ2Ugb3ZlciB0aW1lCiAvLyBhY3Jvc3MgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBwcm9ncmFtLgogZnVuYyBNYXJzaGFsKG0gcHJvdG8uTWVzc2FnZSkgKFtdYnl0ZSwgZXJyb3IpIHsKQEAgLTk4LDE3ICs5NywyMyBAQAogCXJldHVybiBzdHJpbmcoYikKIH0KIAotLy8gTWFyc2hhbCB3cml0ZXMgdGhlIGdpdmVuIHByb3RvLk1lc3NhZ2UgaW4gdGV4dHByb3RvIGZvcm1hdCB1c2luZyBvcHRpb25zIGluCisvLyBNYXJzaGFsIHdyaXRlcyB0aGUgZ2l2ZW4gW3Byb3RvLk1lc3NhZ2VdIGluIHRleHRwcm90byBmb3JtYXQgdXNpbmcgb3B0aW9ucyBpbgogLy8gTWFyc2hhbE9wdGlvbnMgb2JqZWN0LiBEbyBub3QgZGVwZW5kIG9uIHRoZSBvdXRwdXQgYmVpbmcgc3RhYmxlLiBJdCBtYXkKIC8vIGNoYW5nZSBvdmVyIHRpbWUgYWNyb3NzIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgcHJvZ3JhbS4KIGZ1bmMgKG8gTWFyc2hhbE9wdGlvbnMpIE1hcnNoYWwobSBwcm90by5NZXNzYWdlKSAoW11ieXRlLCBlcnJvcikgewotCXJldHVybiBvLm1hcnNoYWwobSkKKwlyZXR1cm4gby5tYXJzaGFsKG5pbCwgbSkKK30KKworLy8gTWFyc2hhbEFwcGVuZCBhcHBlbmRzIHRoZSB0ZXh0cHJvdG8gZm9ybWF0IGVuY29kaW5nIG9mIG0gdG8gYiwKKy8vIHJldHVybmluZyB0aGUgcmVzdWx0LgorZnVuYyAobyBNYXJzaGFsT3B0aW9ucykgTWFyc2hhbEFwcGVuZChiIFtdYnl0ZSwgbSBwcm90by5NZXNzYWdlKSAoW11ieXRlLCBlcnJvcikgeworCXJldHVybiBvLm1hcnNoYWwoYiwgbSkKIH0KIAogLy8gbWFyc2hhbCBpcyBhIGNlbnRyYWxpemVkIGZ1bmN0aW9uIHRoYXQgYWxsIG1hcnNoYWwgb3BlcmF0aW9ucyBnbyB0aHJvdWdoLgogLy8gRm9yIHByb2ZpbGluZyBwdXJwb3NlcywgYXZvaWQgY2hhbmdpbmcgdGhlIG5hbWUgb2YgdGhpcyBmdW5jdGlvbiBvcgogLy8gaW50cm9kdWNpbmcgb3RoZXIgY29kZSBwYXRocyBmb3IgbWFyc2hhbCB0aGF0IGRvIG5vdCBnbyB0aHJvdWdoIHRoaXMuCi1mdW5jIChvIE1hcnNoYWxPcHRpb25zKSBtYXJzaGFsKG0gcHJvdG8uTWVzc2FnZSkgKFtdYnl0ZSwgZXJyb3IpIHsKK2Z1bmMgKG8gTWFyc2hhbE9wdGlvbnMpIG1hcnNoYWwoYiBbXWJ5dGUsIG0gcHJvdG8uTWVzc2FnZSkgKFtdYnl0ZSwgZXJyb3IpIHsKIAl2YXIgZGVsaW1zID0gWzJdYnl0ZXsneycsICd9J30KIAogCWlmIG8uTXVsdGlsaW5lICYmIG8uSW5kZW50ID09ICIiIHsKQEAgLTExOCw3ICsxMjMsNyBAQAogCQlvLlJlc29sdmVyID0gcHJvdG9yZWdpc3RyeS5HbG9iYWxUeXBlcwogCX0KIAotCWludGVybmFsRW5jLCBlcnIgOj0gdGV4dC5OZXdFbmNvZGVyKG8uSW5kZW50LCBkZWxpbXMsIG8uRW1pdEFTQ0lJKQorCWludGVybmFsRW5jLCBlcnIgOj0gdGV4dC5OZXdFbmNvZGVyKGIsIG8uSW5kZW50LCBkZWxpbXMsIG8uRW1pdEFTQ0lJKQogCWlmIGVyciAhPSBuaWwgewogCQlyZXR1cm4gbmlsLCBlcnIKIAl9CkBAIC0xMjYsNyArMTMxLDcgQEAKIAkvLyBUcmVhdCBuaWwgbWVzc2FnZSBpbnRlcmZhY2UgYXMgYW4gZW1wdHkgbWVzc2FnZSwKIAkvLyBpbiB3aGljaCBjYXNlIHRoZXJlIGlzIG5vdGhpbmcgdG8gb3V0cHV0LgogCWlmIG0gPT0gbmlsIHsKLQkJcmV0dXJuIFtdYnl0ZXt9LCBuaWwKKwkJcmV0dXJuIGIsIG5pbAogCX0KIAogCWVuYyA6PSBlbmNvZGVye2ludGVybmFsRW5jLCBvfQpAQCAtMTUwLDcgKzE1NSw3IEBACiB9CiAKIC8vIG1hcnNoYWxNZXNzYWdlIG1hcnNoYWxzIHRoZSBnaXZlbiBwcm90b3JlZmxlY3QuTWVzc2FnZS4KLWZ1bmMgKGUgZW5jb2RlcikgbWFyc2hhbE1lc3NhZ2UobSBwcmVmLk1lc3NhZ2UsIGluY2xEZWxpbXMgYm9vbCkgZXJyb3IgeworZnVuYyAoZSBlbmNvZGVyKSBtYXJzaGFsTWVzc2FnZShtIHByb3RvcmVmbGVjdC5NZXNzYWdlLCBpbmNsRGVsaW1zIGJvb2wpIGVycm9yIHsKIAltZXNzYWdlRGVzYyA6PSBtLkRlc2NyaXB0b3IoKQogCWlmICFmbGFncy5Qcm90b0xlZ2FjeSAmJiBtZXNzYWdlc2V0LklzTWVzc2FnZVNldChtZXNzYWdlRGVzYykgewogCQlyZXR1cm4gZXJyb3JzLk5ldygibm8gc3VwcG9ydCBmb3IgcHJvdG8xIE1lc3NhZ2VTZXRzIikKQEAgLTE5MCw3ICsxOTUsNyBAQAogfQogCiAvLyBtYXJzaGFsRmllbGQgbWFyc2hhbHMgdGhlIGdpdmVuIGZpZWxkIHdpdGggcHJvdG9yZWZsZWN0LlZhbHVlLgotZnVuYyAoZSBlbmNvZGVyKSBtYXJzaGFsRmllbGQobmFtZSBzdHJpbmcsIHZhbCBwcmVmLlZhbHVlLCBmZCBwcmVmLkZpZWxkRGVzY3JpcHRvcikgZXJyb3IgeworZnVuYyAoZSBlbmNvZGVyKSBtYXJzaGFsRmllbGQobmFtZSBzdHJpbmcsIHZhbCBwcm90b3JlZmxlY3QuVmFsdWUsIGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpIGVycm9yIHsKIAlzd2l0Y2ggewogCWNhc2UgZmQuSXNMaXN0KCk6CiAJCXJldHVybiBlLm1hcnNoYWxMaXN0KG5hbWUsIHZhbC5MaXN0KCksIGZkKQpAQCAtMjA0LDQwICsyMDksNDAgQEAKIAogLy8gbWFyc2hhbFNpbmd1bGFyIG1hcnNoYWxzIHRoZSBnaXZlbiBub24tcmVwZWF0ZWQgZmllbGQgdmFsdWUuIFRoaXMgaW5jbHVkZXMKIC8vIGFsbCBzY2FsYXIgdHlwZXMsIGVudW1zLCBtZXNzYWdlcywgYW5kIGdyb3Vwcy4KLWZ1bmMgKGUgZW5jb2RlcikgbWFyc2hhbFNpbmd1bGFyKHZhbCBwcmVmLlZhbHVlLCBmZCBwcmVmLkZpZWxkRGVzY3JpcHRvcikgZXJyb3IgeworZnVuYyAoZSBlbmNvZGVyKSBtYXJzaGFsU2luZ3VsYXIodmFsIHByb3RvcmVmbGVjdC5WYWx1ZSwgZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgZXJyb3IgewogCWtpbmQgOj0gZmQuS2luZCgpCiAJc3dpdGNoIGtpbmQgewotCWNhc2UgcHJlZi5Cb29sS2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5Cb29sS2luZDoKIAkJZS5Xcml0ZUJvb2wodmFsLkJvb2woKSkKIAotCWNhc2UgcHJlZi5TdHJpbmdLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LlN0cmluZ0tpbmQ6CiAJCXMgOj0gdmFsLlN0cmluZygpCiAJCWlmICFlLm9wdHMuYWxsb3dJbnZhbGlkVVRGOCAmJiBzdHJzLkVuZm9yY2VVVEY4KGZkKSAmJiAhdXRmOC5WYWxpZFN0cmluZyhzKSB7CiAJCQlyZXR1cm4gZXJyb3JzLkludmFsaWRVVEY4KHN0cmluZyhmZC5GdWxsTmFtZSgpKSkKIAkJfQogCQllLldyaXRlU3RyaW5nKHMpCiAKLQljYXNlIHByZWYuSW50MzJLaW5kLCBwcmVmLkludDY0S2luZCwKLQkJcHJlZi5TaW50MzJLaW5kLCBwcmVmLlNpbnQ2NEtpbmQsCi0JCXByZWYuU2ZpeGVkMzJLaW5kLCBwcmVmLlNmaXhlZDY0S2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5JbnQzMktpbmQsIHByb3RvcmVmbGVjdC5JbnQ2NEtpbmQsCisJCXByb3RvcmVmbGVjdC5TaW50MzJLaW5kLCBwcm90b3JlZmxlY3QuU2ludDY0S2luZCwKKwkJcHJvdG9yZWZsZWN0LlNmaXhlZDMyS2luZCwgcHJvdG9yZWZsZWN0LlNmaXhlZDY0S2luZDoKIAkJZS5Xcml0ZUludCh2YWwuSW50KCkpCiAKLQljYXNlIHByZWYuVWludDMyS2luZCwgcHJlZi5VaW50NjRLaW5kLAotCQlwcmVmLkZpeGVkMzJLaW5kLCBwcmVmLkZpeGVkNjRLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LlVpbnQzMktpbmQsIHByb3RvcmVmbGVjdC5VaW50NjRLaW5kLAorCQlwcm90b3JlZmxlY3QuRml4ZWQzMktpbmQsIHByb3RvcmVmbGVjdC5GaXhlZDY0S2luZDoKIAkJZS5Xcml0ZVVpbnQodmFsLlVpbnQoKSkKIAotCWNhc2UgcHJlZi5GbG9hdEtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuRmxvYXRLaW5kOgogCQkvLyBFbmNvZGVyLldyaXRlRmxvYXQgaGFuZGxlcyB0aGUgc3BlY2lhbCBudW1iZXJzIE5hTiBhbmQgaW5maW5pdGVzLgogCQllLldyaXRlRmxvYXQodmFsLkZsb2F0KCksIDMyKQogCi0JY2FzZSBwcmVmLkRvdWJsZUtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuRG91YmxlS2luZDoKIAkJLy8gRW5jb2Rlci5Xcml0ZUZsb2F0IGhhbmRsZXMgdGhlIHNwZWNpYWwgbnVtYmVycyBOYU4gYW5kIGluZmluaXRlcy4KIAkJZS5Xcml0ZUZsb2F0KHZhbC5GbG9hdCgpLCA2NCkKIAotCWNhc2UgcHJlZi5CeXRlc0tpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuQnl0ZXNLaW5kOgogCQllLldyaXRlU3RyaW5nKHN0cmluZyh2YWwuQnl0ZXMoKSkpCiAKLQljYXNlIHByZWYuRW51bUtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuRW51bUtpbmQ6CiAJCW51bSA6PSB2YWwuRW51bSgpCiAJCWlmIGRlc2MgOj0gZmQuRW51bSgpLlZhbHVlcygpLkJ5TnVtYmVyKG51bSk7IGRlc2MgIT0gbmlsIHsKIAkJCWUuV3JpdGVMaXRlcmFsKHN0cmluZyhkZXNjLk5hbWUoKSkpCkBAIC0yNDYsNyArMjUxLDcgQEAKIAkJCWUuV3JpdGVJbnQoaW50NjQobnVtKSkKIAkJfQogCi0JY2FzZSBwcmVmLk1lc3NhZ2VLaW5kLCBwcmVmLkdyb3VwS2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZCwgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKIAkJcmV0dXJuIGUubWFyc2hhbE1lc3NhZ2UodmFsLk1lc3NhZ2UoKSwgdHJ1ZSkKIAogCWRlZmF1bHQ6CkBAIC0yNTYsNyArMjYxLDcgQEAKIH0KIAogLy8gbWFyc2hhbExpc3QgbWFyc2hhbHMgdGhlIGdpdmVuIHByb3RvcmVmbGVjdC5MaXN0IGFzIG11bHRpcGxlIG5hbWUtdmFsdWUgZmllbGRzLgotZnVuYyAoZSBlbmNvZGVyKSBtYXJzaGFsTGlzdChuYW1lIHN0cmluZywgbGlzdCBwcmVmLkxpc3QsIGZkIHByZWYuRmllbGREZXNjcmlwdG9yKSBlcnJvciB7CitmdW5jIChlIGVuY29kZXIpIG1hcnNoYWxMaXN0KG5hbWUgc3RyaW5nLCBsaXN0IHByb3RvcmVmbGVjdC5MaXN0LCBmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSBlcnJvciB7CiAJc2l6ZSA6PSBsaXN0LkxlbigpCiAJZm9yIGkgOj0gMDsgaSA8IHNpemU7IGkrKyB7CiAJCWUuV3JpdGVOYW1lKG5hbWUpCkBAIC0yNjgsOSArMjczLDkgQEAKIH0KIAogLy8gbWFyc2hhbE1hcCBtYXJzaGFscyB0aGUgZ2l2ZW4gcHJvdG9yZWZsZWN0Lk1hcCBhcyBtdWx0aXBsZSBuYW1lLXZhbHVlIGZpZWxkcy4KLWZ1bmMgKGUgZW5jb2RlcikgbWFyc2hhbE1hcChuYW1lIHN0cmluZywgbW1hcCBwcmVmLk1hcCwgZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpIGVycm9yIHsKK2Z1bmMgKGUgZW5jb2RlcikgbWFyc2hhbE1hcChuYW1lIHN0cmluZywgbW1hcCBwcm90b3JlZmxlY3QuTWFwLCBmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSBlcnJvciB7CiAJdmFyIGVyciBlcnJvcgotCW9yZGVyLlJhbmdlRW50cmllcyhtbWFwLCBvcmRlci5HZW5lcmljS2V5T3JkZXIsIGZ1bmMoa2V5IHByZWYuTWFwS2V5LCB2YWwgcHJlZi5WYWx1ZSkgYm9vbCB7CisJb3JkZXIuUmFuZ2VFbnRyaWVzKG1tYXAsIG9yZGVyLkdlbmVyaWNLZXlPcmRlciwgZnVuYyhrZXkgcHJvdG9yZWZsZWN0Lk1hcEtleSwgdmFsIHByb3RvcmVmbGVjdC5WYWx1ZSkgYm9vbCB7CiAJCWUuV3JpdGVOYW1lKG5hbWUpCiAJCWUuU3RhcnRNZXNzYWdlKCkKIAkJZGVmZXIgZS5FbmRNZXNzYWdlKCkKQEAgLTMzNCw3ICszMzksNyBAQAogCiAvLyBtYXJzaGFsQW55IG1hcnNoYWxzIHRoZSBnaXZlbiBnb29nbGUucHJvdG9idWYuQW55IG1lc3NhZ2UgaW4gZXhwYW5kZWQgZm9ybS4KIC8vIEl0IHJldHVybnMgdHJ1ZSBpZiBpdCB3YXMgYWJsZSB0byBtYXJzaGFsLCBlbHNlIGZhbHNlLgotZnVuYyAoZSBlbmNvZGVyKSBtYXJzaGFsQW55KGFueSBwcmVmLk1lc3NhZ2UpIGJvb2wgeworZnVuYyAoZSBlbmNvZGVyKSBtYXJzaGFsQW55KGFueSBwcm90b3JlZmxlY3QuTWVzc2FnZSkgYm9vbCB7CiAJLy8gQ29uc3RydWN0IHRoZSBlbWJlZGRlZCBtZXNzYWdlLgogCWZkcyA6PSBhbnkuRGVzY3JpcHRvcigpLkZpZWxkcygpCiAJZmRUeXBlIDo9IGZkcy5CeU51bWJlcihnZW5pZC5BbnlfVHlwZVVybF9maWVsZF9udW1iZXIpCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG93aXJlL3dpcmUuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG93aXJlL3dpcmUuZ28KaW5kZXggYTQyN2Y4Yi4uZTk0MmJjOSAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2VuY29kaW5nL3Byb3Rvd2lyZS93aXJlLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3dpcmUvd2lyZS5nbwpAQCAtMywxMCArMywxMCBAQAogLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCiAvLyBQYWNrYWdlIHByb3Rvd2lyZSBwYXJzZXMgYW5kIGZvcm1hdHMgdGhlIHJhdyB3aXJlIGVuY29kaW5nLgotLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9lbmNvZGluZy4KKy8vIFNlZSBodHRwczovL3Byb3RvYnVmLmRldi9wcm9ncmFtbWluZy1ndWlkZXMvZW5jb2RpbmcuCiAvLwogLy8gRm9yIG1hcnNoYWxpbmcgYW5kIHVubWFyc2hhbGluZyBlbnRpcmUgcHJvdG9idWYgbWVzc2FnZXMsCi0vLyB1c2UgdGhlICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90byIgcGFja2FnZSBpbnN0ZWFkLgorLy8gdXNlIHRoZSBbZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG9dIHBhY2thZ2UgaW5zdGVhZC4KIHBhY2thZ2UgcHJvdG93aXJlCiAKIGltcG9ydCAoCkBAIC0yMSwxOSArMjEsMTYgQEAKIHR5cGUgTnVtYmVyIGludDMyCiAKIGNvbnN0ICgKLQlNaW5WYWxpZE51bWJlciAgICAgIE51bWJlciA9IDEKLQlGaXJzdFJlc2VydmVkTnVtYmVyIE51bWJlciA9IDE5MDAwCi0JTGFzdFJlc2VydmVkTnVtYmVyICBOdW1iZXIgPSAxOTk5OQotCU1heFZhbGlkTnVtYmVyICAgICAgTnVtYmVyID0gMTw8MjkgLSAxCisJTWluVmFsaWROdW1iZXIgICAgICAgIE51bWJlciA9IDEKKwlGaXJzdFJlc2VydmVkTnVtYmVyICAgTnVtYmVyID0gMTkwMDAKKwlMYXN0UmVzZXJ2ZWROdW1iZXIgICAgTnVtYmVyID0gMTk5OTkKKwlNYXhWYWxpZE51bWJlciAgICAgICAgTnVtYmVyID0gMTw8MjkgLSAxCisJRGVmYXVsdFJlY3Vyc2lvbkxpbWl0ICAgICAgICA9IDEwMDAwCiApCiAKIC8vIElzVmFsaWQgcmVwb3J0cyB3aGV0aGVyIHRoZSBmaWVsZCBudW1iZXIgaXMgc2VtYW50aWNhbGx5IHZhbGlkLgotLy8KLS8vIE5vdGUgdGhhdCB3aGlsZSBudW1iZXJzIHdpdGhpbiB0aGUgcmVzZXJ2ZWQgcmFuZ2UgYXJlIHNlbWFudGljYWxseSBpbnZhbGlkLAotLy8gdGhleSBhcmUgc3ludGFjdGljYWxseSB2YWxpZCBpbiB0aGUgd2lyZSBmb3JtYXQuCi0vLyBJbXBsZW1lbnRhdGlvbnMgbWF5IHRyZWF0IHJlY29yZHMgd2l0aCByZXNlcnZlZCBmaWVsZCBudW1iZXJzIGFzIHVua25vd24uCiBmdW5jIChuIE51bWJlcikgSXNWYWxpZCgpIGJvb2wgewotCXJldHVybiBNaW5WYWxpZE51bWJlciA8PSBuICYmIG4gPCBGaXJzdFJlc2VydmVkTnVtYmVyIHx8IExhc3RSZXNlcnZlZE51bWJlciA8IG4gJiYgbiA8PSBNYXhWYWxpZE51bWJlcgorCXJldHVybiBNaW5WYWxpZE51bWJlciA8PSBuICYmIG4gPD0gTWF4VmFsaWROdW1iZXIKIH0KIAogLy8gVHlwZSByZXByZXNlbnRzIHRoZSB3aXJlIHR5cGUuCkBAIC01NSw2ICs1Miw3IEBACiAJZXJyQ29kZU92ZXJmbG93CiAJZXJyQ29kZVJlc2VydmVkCiAJZXJyQ29kZUVuZEdyb3VwCisJZXJyQ29kZVJlY3Vyc2lvbkRlcHRoCiApCiAKIHZhciAoCkBAIC04OSw3ICs4Nyw3IEBACiAKIC8vIENvbnN1bWVGaWVsZCBwYXJzZXMgYW4gZW50aXJlIGZpZWxkIHJlY29yZCAoYm90aCB0YWcgYW5kIHZhbHVlKSBhbmQgcmV0dXJucwogLy8gdGhlIGZpZWxkIG51bWJlciwgdGhlIHdpcmUgdHlwZSwgYW5kIHRoZSB0b3RhbCBsZW5ndGguCi0vLyBUaGlzIHJldHVybnMgYSBuZWdhdGl2ZSBsZW5ndGggdXBvbiBhbiBlcnJvciAoc2VlIFBhcnNlRXJyb3IpLgorLy8gVGhpcyByZXR1cm5zIGEgbmVnYXRpdmUgbGVuZ3RoIHVwb24gYW4gZXJyb3IgKHNlZSBbUGFyc2VFcnJvcl0pLgogLy8KIC8vIFRoZSB0b3RhbCBsZW5ndGggaW5jbHVkZXMgdGhlIHRhZyBoZWFkZXIgYW5kIHRoZSBlbmQgZ3JvdXAgbWFya2VyIChpZiB0aGUKIC8vIGZpZWxkIGlzIGEgZ3JvdXApLgpAQCAtMTA2LDEyICsxMDQsMTYgQEAKIH0KIAogLy8gQ29uc3VtZUZpZWxkVmFsdWUgcGFyc2VzIGEgZmllbGQgdmFsdWUgYW5kIHJldHVybnMgaXRzIGxlbmd0aC4KLS8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBmaWVsZCBOdW1iZXIgYW5kIHdpcmUgVHlwZSBoYXZlIGFscmVhZHkgYmVlbiBwYXJzZWQuCi0vLyBUaGlzIHJldHVybnMgYSBuZWdhdGl2ZSBsZW5ndGggdXBvbiBhbiBlcnJvciAoc2VlIFBhcnNlRXJyb3IpLgorLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIGZpZWxkIFtOdW1iZXJdIGFuZCB3aXJlIFtUeXBlXSBoYXZlIGFscmVhZHkgYmVlbiBwYXJzZWQuCisvLyBUaGlzIHJldHVybnMgYSBuZWdhdGl2ZSBsZW5ndGggdXBvbiBhbiBlcnJvciAoc2VlIFtQYXJzZUVycm9yXSkuCiAvLwogLy8gV2hlbiBwYXJzaW5nIGEgZ3JvdXAsIHRoZSBsZW5ndGggaW5jbHVkZXMgdGhlIGVuZCBncm91cCBtYXJrZXIgYW5kCiAvLyB0aGUgZW5kIGdyb3VwIGlzIHZlcmlmaWVkIHRvIG1hdGNoIHRoZSBzdGFydGluZyBmaWVsZCBudW1iZXIuCiBmdW5jIENvbnN1bWVGaWVsZFZhbHVlKG51bSBOdW1iZXIsIHR5cCBUeXBlLCBiIFtdYnl0ZSkgKG4gaW50KSB7CisJcmV0dXJuIGNvbnN1bWVGaWVsZFZhbHVlRChudW0sIHR5cCwgYiwgRGVmYXVsdFJlY3Vyc2lvbkxpbWl0KQorfQorCitmdW5jIGNvbnN1bWVGaWVsZFZhbHVlRChudW0gTnVtYmVyLCB0eXAgVHlwZSwgYiBbXWJ5dGUsIGRlcHRoIGludCkgKG4gaW50KSB7CiAJc3dpdGNoIHR5cCB7CiAJY2FzZSBWYXJpbnRUeXBlOgogCQlfLCBuID0gQ29uc3VtZVZhcmludChiKQpAQCAtMTI2LDYgKzEyOCw5IEBACiAJCV8sIG4gPSBDb25zdW1lQnl0ZXMoYikKIAkJcmV0dXJuIG4KIAljYXNlIFN0YXJ0R3JvdXBUeXBlOgorCQlpZiBkZXB0aCA8IDAgeworCQkJcmV0dXJuIGVyckNvZGVSZWN1cnNpb25EZXB0aAorCQl9CiAJCW4wIDo9IGxlbihiKQogCQlmb3IgewogCQkJbnVtMiwgdHlwMiwgbiA6PSBDb25zdW1lVGFnKGIpCkBAIC0xNDAsNyArMTQ1LDcgQEAKIAkJCQlyZXR1cm4gbjAgLSBsZW4oYikKIAkJCX0KIAotCQkJbiA9IENvbnN1bWVGaWVsZFZhbHVlKG51bTIsIHR5cDIsIGIpCisJCQluID0gY29uc3VtZUZpZWxkVmFsdWVEKG51bTIsIHR5cDIsIGIsIGRlcHRoLTEpCiAJCQlpZiBuIDwgMCB7CiAJCQkJcmV0dXJuIG4gLy8gZm9yd2FyZCBlcnJvciBjb2RlCiAJCQl9CkBAIC0xNTksNyArMTY0LDcgQEAKIH0KIAogLy8gQ29uc3VtZVRhZyBwYXJzZXMgYiBhcyBhIHZhcmludC1lbmNvZGVkIHRhZywgcmVwb3J0aW5nIGl0cyBsZW5ndGguCi0vLyBUaGlzIHJldHVybnMgYSBuZWdhdGl2ZSBsZW5ndGggdXBvbiBhbiBlcnJvciAoc2VlIFBhcnNlRXJyb3IpLgorLy8gVGhpcyByZXR1cm5zIGEgbmVnYXRpdmUgbGVuZ3RoIHVwb24gYW4gZXJyb3IgKHNlZSBbUGFyc2VFcnJvcl0pLgogZnVuYyBDb25zdW1lVGFnKGIgW11ieXRlKSAoTnVtYmVyLCBUeXBlLCBpbnQpIHsKIAl2LCBuIDo9IENvbnN1bWVWYXJpbnQoYikKIAlpZiBuIDwgMCB7CkBAIC0yNTgsNyArMjYzLDcgQEAKIH0KIAogLy8gQ29uc3VtZVZhcmludCBwYXJzZXMgYiBhcyBhIHZhcmludC1lbmNvZGVkIHVpbnQ2NCwgcmVwb3J0aW5nIGl0cyBsZW5ndGguCi0vLyBUaGlzIHJldHVybnMgYSBuZWdhdGl2ZSBsZW5ndGggdXBvbiBhbiBlcnJvciAoc2VlIFBhcnNlRXJyb3IpLgorLy8gVGhpcyByZXR1cm5zIGEgbmVnYXRpdmUgbGVuZ3RoIHVwb24gYW4gZXJyb3IgKHNlZSBbUGFyc2VFcnJvcl0pLgogZnVuYyBDb25zdW1lVmFyaW50KGIgW11ieXRlKSAodiB1aW50NjQsIG4gaW50KSB7CiAJdmFyIHkgdWludDY0CiAJaWYgbGVuKGIpIDw9IDAgewpAQCAtMzc5LDcgKzM4NCw3IEBACiB9CiAKIC8vIENvbnN1bWVGaXhlZDMyIHBhcnNlcyBiIGFzIGEgbGl0dGxlLWVuZGlhbiB1aW50MzIsIHJlcG9ydGluZyBpdHMgbGVuZ3RoLgotLy8gVGhpcyByZXR1cm5zIGEgbmVnYXRpdmUgbGVuZ3RoIHVwb24gYW4gZXJyb3IgKHNlZSBQYXJzZUVycm9yKS4KKy8vIFRoaXMgcmV0dXJucyBhIG5lZ2F0aXZlIGxlbmd0aCB1cG9uIGFuIGVycm9yIChzZWUgW1BhcnNlRXJyb3JdKS4KIGZ1bmMgQ29uc3VtZUZpeGVkMzIoYiBbXWJ5dGUpICh2IHVpbnQzMiwgbiBpbnQpIHsKIAlpZiBsZW4oYikgPCA0IHsKIAkJcmV0dXJuIDAsIGVyckNvZGVUcnVuY2F0ZWQKQEAgLTQwNyw3ICs0MTIsNyBAQAogfQogCiAvLyBDb25zdW1lRml4ZWQ2NCBwYXJzZXMgYiBhcyBhIGxpdHRsZS1lbmRpYW4gdWludDY0LCByZXBvcnRpbmcgaXRzIGxlbmd0aC4KLS8vIFRoaXMgcmV0dXJucyBhIG5lZ2F0aXZlIGxlbmd0aCB1cG9uIGFuIGVycm9yIChzZWUgUGFyc2VFcnJvcikuCisvLyBUaGlzIHJldHVybnMgYSBuZWdhdGl2ZSBsZW5ndGggdXBvbiBhbiBlcnJvciAoc2VlIFtQYXJzZUVycm9yXSkuCiBmdW5jIENvbnN1bWVGaXhlZDY0KGIgW11ieXRlKSAodiB1aW50NjQsIG4gaW50KSB7CiAJaWYgbGVuKGIpIDwgOCB7CiAJCXJldHVybiAwLCBlcnJDb2RlVHJ1bmNhdGVkCkBAIC00MjcsNyArNDMyLDcgQEAKIH0KIAogLy8gQ29uc3VtZUJ5dGVzIHBhcnNlcyBiIGFzIGEgbGVuZ3RoLXByZWZpeGVkIGJ5dGVzIHZhbHVlLCByZXBvcnRpbmcgaXRzIGxlbmd0aC4KLS8vIFRoaXMgcmV0dXJucyBhIG5lZ2F0aXZlIGxlbmd0aCB1cG9uIGFuIGVycm9yIChzZWUgUGFyc2VFcnJvcikuCisvLyBUaGlzIHJldHVybnMgYSBuZWdhdGl2ZSBsZW5ndGggdXBvbiBhbiBlcnJvciAoc2VlIFtQYXJzZUVycm9yXSkuCiBmdW5jIENvbnN1bWVCeXRlcyhiIFtdYnl0ZSkgKHYgW11ieXRlLCBuIGludCkgewogCW0sIG4gOj0gQ29uc3VtZVZhcmludChiKQogCWlmIG4gPCAwIHsKQEAgLTQ1MSw3ICs0NTYsNyBAQAogfQogCiAvLyBDb25zdW1lU3RyaW5nIHBhcnNlcyBiIGFzIGEgbGVuZ3RoLXByZWZpeGVkIGJ5dGVzIHZhbHVlLCByZXBvcnRpbmcgaXRzIGxlbmd0aC4KLS8vIFRoaXMgcmV0dXJucyBhIG5lZ2F0aXZlIGxlbmd0aCB1cG9uIGFuIGVycm9yIChzZWUgUGFyc2VFcnJvcikuCisvLyBUaGlzIHJldHVybnMgYSBuZWdhdGl2ZSBsZW5ndGggdXBvbiBhbiBlcnJvciAoc2VlIFtQYXJzZUVycm9yXSkuCiBmdW5jIENvbnN1bWVTdHJpbmcoYiBbXWJ5dGUpICh2IHN0cmluZywgbiBpbnQpIHsKIAliYiwgbiA6PSBDb25zdW1lQnl0ZXMoYikKIAlyZXR1cm4gc3RyaW5nKGJiKSwgbgpAQCAtNDY2LDcgKzQ3MSw3IEBACiAvLyBDb25zdW1lR3JvdXAgcGFyc2VzIGIgYXMgYSBncm91cCB2YWx1ZSB1bnRpbCB0aGUgdHJhaWxpbmcgZW5kIGdyb3VwIG1hcmtlciwKIC8vIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSBlbmQgbWFya2VyIG1hdGNoZXMgdGhlIHByb3ZpZGVkIG51bS4gVGhlIHZhbHVlIHYKIC8vIGRvZXMgbm90IGNvbnRhaW4gdGhlIGVuZCBtYXJrZXIsIHdoaWxlIHRoZSBsZW5ndGggZG9lcyBjb250YWluIHRoZSBlbmQgbWFya2VyLgotLy8gVGhpcyByZXR1cm5zIGEgbmVnYXRpdmUgbGVuZ3RoIHVwb24gYW4gZXJyb3IgKHNlZSBQYXJzZUVycm9yKS4KKy8vIFRoaXMgcmV0dXJucyBhIG5lZ2F0aXZlIGxlbmd0aCB1cG9uIGFuIGVycm9yIChzZWUgW1BhcnNlRXJyb3JdKS4KIGZ1bmMgQ29uc3VtZUdyb3VwKG51bSBOdW1iZXIsIGIgW11ieXRlKSAodiBbXWJ5dGUsIG4gaW50KSB7CiAJbiA9IENvbnN1bWVGaWVsZFZhbHVlKG51bSwgU3RhcnRHcm91cFR5cGUsIGIpCiAJaWYgbiA8IDAgewpAQCAtNDkwLDggKzQ5NSw4IEBACiAJcmV0dXJuIG4gKyBTaXplVGFnKG51bSkKIH0KIAotLy8gRGVjb2RlVGFnIGRlY29kZXMgdGhlIGZpZWxkIE51bWJlciBhbmQgd2lyZSBUeXBlIGZyb20gaXRzIHVuaWZpZWQgZm9ybS4KLS8vIFRoZSBOdW1iZXIgaXMgLTEgaWYgdGhlIGRlY29kZWQgZmllbGQgbnVtYmVyIG92ZXJmbG93cyBpbnQzMi4KKy8vIERlY29kZVRhZyBkZWNvZGVzIHRoZSBmaWVsZCBbTnVtYmVyXSBhbmQgd2lyZSBbVHlwZV0gZnJvbSBpdHMgdW5pZmllZCBmb3JtLgorLy8gVGhlIFtOdW1iZXJdIGlzIC0xIGlmIHRoZSBkZWNvZGVkIGZpZWxkIG51bWJlciBvdmVyZmxvd3MgaW50MzIuCiAvLyBPdGhlciB0aGFuIG92ZXJmbG93LCB0aGlzIGRvZXMgbm90IGNoZWNrIGZvciBmaWVsZCBudW1iZXIgdmFsaWRpdHkuCiBmdW5jIERlY29kZVRhZyh4IHVpbnQ2NCkgKE51bWJlciwgVHlwZSkgewogCS8vIE5PVEU6IE1lc3NhZ2VTZXQgYWxsb3dzIGZvciBsYXJnZXIgZmllbGQgbnVtYmVycyB0aGFuIG5vcm1hbC4KQEAgLTUwMSwxMiArNTA2LDEzIEBACiAJcmV0dXJuIE51bWJlcih4ID4+IDMpLCBUeXBlKHggJiA3KQogfQogCi0vLyBFbmNvZGVUYWcgZW5jb2RlcyB0aGUgZmllbGQgTnVtYmVyIGFuZCB3aXJlIFR5cGUgaW50byBpdHMgdW5pZmllZCBmb3JtLgorLy8gRW5jb2RlVGFnIGVuY29kZXMgdGhlIGZpZWxkIFtOdW1iZXJdIGFuZCB3aXJlIFtUeXBlXSBpbnRvIGl0cyB1bmlmaWVkIGZvcm0uCiBmdW5jIEVuY29kZVRhZyhudW0gTnVtYmVyLCB0eXAgVHlwZSkgdWludDY0IHsKIAlyZXR1cm4gdWludDY0KG51bSk8PDMgfCB1aW50NjQodHlwJjcpCiB9CiAKIC8vIERlY29kZVppZ1phZyBkZWNvZGVzIGEgemlnLXphZy1lbmNvZGVkIHVpbnQ2NCBhcyBhbiBpbnQ2NC4KKy8vCiAvLwlJbnB1dDogIHvigKYsICA1LCAgMywgIDEsICAwLCAgMiwgIDQsICA2LCDigKZ9CiAvLwlPdXRwdXQ6IHvigKYsIC0zLCAtMiwgLTEsICAwLCArMSwgKzIsICszLCDigKZ9CiBmdW5jIERlY29kZVppZ1phZyh4IHVpbnQ2NCkgaW50NjQgewpAQCAtNTE0LDYgKzUyMCw3IEBACiB9CiAKIC8vIEVuY29kZVppZ1phZyBlbmNvZGVzIGFuIGludDY0IGFzIGEgemlnLXphZy1lbmNvZGVkIHVpbnQ2NC4KKy8vCiAvLwlJbnB1dDogIHvigKYsIC0zLCAtMiwgLTEsICAwLCArMSwgKzIsICszLCDigKZ9CiAvLwlPdXRwdXQ6IHvigKYsICA1LCAgMywgIDEsICAwLCAgMiwgIDQsICA2LCDigKZ9CiBmdW5jIEVuY29kZVppZ1phZyh4IGludDY0KSB1aW50NjQgewpAQCAtNTIxLDYgKzUyOCw3IEBACiB9CiAKIC8vIERlY29kZUJvb2wgZGVjb2RlcyBhIHVpbnQ2NCBhcyBhIGJvb2wuCisvLwogLy8JSW5wdXQ6ICB7ICAgIDAsICAgIDEsICAgIDIsIOKApn0KIC8vCU91dHB1dDoge2ZhbHNlLCB0cnVlLCB0cnVlLCDigKZ9CiBmdW5jIERlY29kZUJvb2woeCB1aW50NjQpIGJvb2wgewpAQCAtNTI4LDYgKzUzNiw3IEBACiB9CiAKIC8vIEVuY29kZUJvb2wgZW5jb2RlcyBhIGJvb2wgYXMgYSB1aW50NjQuCisvLwogLy8JSW5wdXQ6ICB7ZmFsc2UsIHRydWV9CiAvLwlPdXRwdXQ6IHsgICAgMCwgICAgMX0KIGZ1bmMgRW5jb2RlQm9vbCh4IGJvb2wpIHVpbnQ2NCB7CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZGVzY2ZtdC9zdHJpbmdlci5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9kZXNjZm10L3N0cmluZ2VyLmdvCmluZGV4IDM2MGM2MzMuLmE0NTYyNWMgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9kZXNjZm10L3N0cmluZ2VyLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9kZXNjZm10L3N0cmluZ2VyLmdvCkBAIC0xNCw3ICsxNCw3IEBACiAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZGV0cmFuZCIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvcHJhZ21hIgotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKICkKIAogdHlwZSBsaXN0IGludGVyZmFjZSB7CkBAIC0zMCwxNyArMzAsMTcgQEAKIAlpZiBpc1Jvb3QgewogCQl2YXIgbmFtZSBzdHJpbmcKIAkJc3dpdGNoIHZzLih0eXBlKSB7Ci0JCWNhc2UgcHJlZi5OYW1lczoKKwkJY2FzZSBwcm90b3JlZmxlY3QuTmFtZXM6CiAJCQluYW1lID0gIk5hbWVzIgotCQljYXNlIHByZWYuRmllbGROdW1iZXJzOgorCQljYXNlIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcnM6CiAJCQluYW1lID0gIkZpZWxkTnVtYmVycyIKLQkJY2FzZSBwcmVmLkZpZWxkUmFuZ2VzOgorCQljYXNlIHByb3RvcmVmbGVjdC5GaWVsZFJhbmdlczoKIAkJCW5hbWUgPSAiRmllbGRSYW5nZXMiCi0JCWNhc2UgcHJlZi5FbnVtUmFuZ2VzOgorCQljYXNlIHByb3RvcmVmbGVjdC5FbnVtUmFuZ2VzOgogCQkJbmFtZSA9ICJFbnVtUmFuZ2VzIgotCQljYXNlIHByZWYuRmlsZUltcG9ydHM6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkZpbGVJbXBvcnRzOgogCQkJbmFtZSA9ICJGaWxlSW1wb3J0cyIKLQkJY2FzZSBwcmVmLkRlc2NyaXB0b3I6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkRlc2NyaXB0b3I6CiAJCQluYW1lID0gcmVmbGVjdC5WYWx1ZU9mKHZzKS5NZXRob2RCeU5hbWUoIkdldCIpLlR5cGUoKS5PdXQoMCkuTmFtZSgpICsgInMiCiAJCWRlZmF1bHQ6CiAJCQluYW1lID0gcmVmbGVjdC5WYWx1ZU9mKHZzKS5FbGVtKCkuVHlwZSgpLk5hbWUoKQpAQCAtNTAsMTcgKzUwLDE3IEBACiAKIAl2YXIgc3MgW11zdHJpbmcKIAlzd2l0Y2ggdnMgOj0gdnMuKHR5cGUpIHsKLQljYXNlIHByZWYuTmFtZXM6CisJY2FzZSBwcm90b3JlZmxlY3QuTmFtZXM6CiAJCWZvciBpIDo9IDA7IGkgPCB2cy5MZW4oKTsgaSsrIHsKIAkJCXNzID0gYXBwZW5kKHNzLCBmbXQuU3ByaW50KHZzLkdldChpKSkpCiAJCX0KIAkJcmV0dXJuIHN0YXJ0ICsgam9pblN0cmluZ3Moc3MsIGZhbHNlKSArIGVuZAotCWNhc2UgcHJlZi5GaWVsZE51bWJlcnM6CisJY2FzZSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXJzOgogCQlmb3IgaSA6PSAwOyBpIDwgdnMuTGVuKCk7IGkrKyB7CiAJCQlzcyA9IGFwcGVuZChzcywgZm10LlNwcmludCh2cy5HZXQoaSkpKQogCQl9CiAJCXJldHVybiBzdGFydCArIGpvaW5TdHJpbmdzKHNzLCBmYWxzZSkgKyBlbmQKLQljYXNlIHByZWYuRmllbGRSYW5nZXM6CisJY2FzZSBwcm90b3JlZmxlY3QuRmllbGRSYW5nZXM6CiAJCWZvciBpIDo9IDA7IGkgPCB2cy5MZW4oKTsgaSsrIHsKIAkJCXIgOj0gdnMuR2V0KGkpCiAJCQlpZiByWzBdKzEgPT0gclsxXSB7CkBAIC03MCw3ICs3MCw3IEBACiAJCQl9CiAJCX0KIAkJcmV0dXJuIHN0YXJ0ICsgam9pblN0cmluZ3Moc3MsIGZhbHNlKSArIGVuZAotCWNhc2UgcHJlZi5FbnVtUmFuZ2VzOgorCWNhc2UgcHJvdG9yZWZsZWN0LkVudW1SYW5nZXM6CiAJCWZvciBpIDo9IDA7IGkgPCB2cy5MZW4oKTsgaSsrIHsKIAkJCXIgOj0gdnMuR2V0KGkpCiAJCQlpZiByWzBdID09IHJbMV0gewpAQCAtODAsNDYgKzgwLDQ0IEBACiAJCQl9CiAJCX0KIAkJcmV0dXJuIHN0YXJ0ICsgam9pblN0cmluZ3Moc3MsIGZhbHNlKSArIGVuZAotCWNhc2UgcHJlZi5GaWxlSW1wb3J0czoKKwljYXNlIHByb3RvcmVmbGVjdC5GaWxlSW1wb3J0czoKIAkJZm9yIGkgOj0gMDsgaSA8IHZzLkxlbigpOyBpKysgewogCQkJdmFyIHJzIHJlY29yZHMKLQkJCXJzLkFwcGVuZChyZWZsZWN0LlZhbHVlT2YodnMuR2V0KGkpKSwgIlBhdGgiLCAiUGFja2FnZSIsICJJc1B1YmxpYyIsICJJc1dlYWsiKQorCQkJcnYgOj0gcmVmbGVjdC5WYWx1ZU9mKHZzLkdldChpKSkKKwkJCXJzLkFwcGVuZChydiwgW11tZXRob2RBbmROYW1leworCQkJCXtydi5NZXRob2RCeU5hbWUoIlBhdGgiKSwgIlBhdGgifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJQYWNrYWdlIiksICJQYWNrYWdlIn0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiSXNQdWJsaWMiKSwgIklzUHVibGljIn0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiSXNXZWFrIiksICJJc1dlYWsifSwKKwkJCX0uLi4pCiAJCQlzcyA9IGFwcGVuZChzcywgInsiK3JzLkpvaW4oKSsifSIpCiAJCX0KIAkJcmV0dXJuIHN0YXJ0ICsgam9pblN0cmluZ3Moc3MsIGFsbG93TXVsdGkpICsgZW5kCiAJZGVmYXVsdDoKLQkJXywgaXNFbnVtVmFsdWUgOj0gdnMuKHByZWYuRW51bVZhbHVlRGVzY3JpcHRvcnMpCisJCV8sIGlzRW51bVZhbHVlIDo9IHZzLihwcm90b3JlZmxlY3QuRW51bVZhbHVlRGVzY3JpcHRvcnMpCiAJCWZvciBpIDo9IDA7IGkgPCB2cy5MZW4oKTsgaSsrIHsKIAkJCW0gOj0gcmVmbGVjdC5WYWx1ZU9mKHZzKS5NZXRob2RCeU5hbWUoIkdldCIpCiAJCQl2IDo9IG0uQ2FsbChbXXJlZmxlY3QuVmFsdWV7cmVmbGVjdC5WYWx1ZU9mKGkpfSlbMF0uSW50ZXJmYWNlKCkKLQkJCXNzID0gYXBwZW5kKHNzLCBmb3JtYXREZXNjT3B0KHYuKHByZWYuRGVzY3JpcHRvciksIGZhbHNlLCBhbGxvd011bHRpICYmICFpc0VudW1WYWx1ZSkpCisJCQlzcyA9IGFwcGVuZChzcywgZm9ybWF0RGVzY09wdCh2Lihwcm90b3JlZmxlY3QuRGVzY3JpcHRvciksIGZhbHNlLCBhbGxvd011bHRpICYmICFpc0VudW1WYWx1ZSwgbmlsKSkKIAkJfQogCQlyZXR1cm4gc3RhcnQgKyBqb2luU3RyaW5ncyhzcywgYWxsb3dNdWx0aSAmJiBpc0VudW1WYWx1ZSkgKyBlbmQKIAl9CiB9CiAKLS8vIGRlc2NyaXB0b3JBY2Nlc3NvcnMgaXMgYSBsaXN0IG9mIGFjY2Vzc29ycyB0byBwcmludCBmb3IgZWFjaCBkZXNjcmlwdG9yLgotLy8KLS8vIERvIG5vdCBwcmludCBhbGwgYWNjZXNzb3JzIHNpbmNlIHNvbWUgY29udGFpbiByZWR1bmRhbnQgaW5mb3JtYXRpb24sCi0vLyB3aGlsZSBvdGhlcnMgYXJlIHBvaW50ZXJzIHRoYXQgd2UgZG8gbm90IHdhbnQgdG8gZm9sbG93IHNpbmNlIHRoZSBkZXNjcmlwdG9yCi0vLyBpcyBhY3R1YWxseSBhIGN5Y2xpYyBncmFwaC4KLS8vCi0vLyBVc2luZyBhIGxpc3QgYWxsb3dzIHVzIHRvIHByaW50IHRoZSBhY2Nlc3NvcnMgaW4gYSBzZW5zaWJsZSBvcmRlci4KLXZhciBkZXNjcmlwdG9yQWNjZXNzb3JzID0gbWFwW3JlZmxlY3QuVHlwZV1bXXN0cmluZ3sKLQlyZWZsZWN0LlR5cGVPZigoKnByZWYuRmlsZURlc2NyaXB0b3IpKG5pbCkpLkVsZW0oKTogICAgICB7IlBhdGgiLCAiUGFja2FnZSIsICJJbXBvcnRzIiwgIk1lc3NhZ2VzIiwgIkVudW1zIiwgIkV4dGVuc2lvbnMiLCAiU2VydmljZXMifSwKLQlyZWZsZWN0LlR5cGVPZigoKnByZWYuTWVzc2FnZURlc2NyaXB0b3IpKG5pbCkpLkVsZW0oKTogICB7IklzTWFwRW50cnkiLCAiRmllbGRzIiwgIk9uZW9mcyIsICJSZXNlcnZlZE5hbWVzIiwgIlJlc2VydmVkUmFuZ2VzIiwgIlJlcXVpcmVkTnVtYmVycyIsICJFeHRlbnNpb25SYW5nZXMiLCAiTWVzc2FnZXMiLCAiRW51bXMiLCAiRXh0ZW5zaW9ucyJ9LAotCXJlZmxlY3QuVHlwZU9mKCgqcHJlZi5GaWVsZERlc2NyaXB0b3IpKG5pbCkpLkVsZW0oKTogICAgIHsiTnVtYmVyIiwgIkNhcmRpbmFsaXR5IiwgIktpbmQiLCAiSGFzSlNPTk5hbWUiLCAiSlNPTk5hbWUiLCAiSGFzUHJlc2VuY2UiLCAiSXNFeHRlbnNpb24iLCAiSXNQYWNrZWQiLCAiSXNXZWFrIiwgIklzTGlzdCIsICJJc01hcCIsICJNYXBLZXkiLCAiTWFwVmFsdWUiLCAiSGFzRGVmYXVsdCIsICJEZWZhdWx0IiwgIkNvbnRhaW5pbmdPbmVvZiIsICJDb250YWluaW5nTWVzc2FnZSIsICJNZXNzYWdlIiwgIkVudW0ifSwKLQlyZWZsZWN0LlR5cGVPZigoKnByZWYuT25lb2ZEZXNjcmlwdG9yKShuaWwpKS5FbGVtKCk6ICAgICB7IkZpZWxkcyJ9LCAvLyBub3QgZGlyZWN0bHkgdXNlZDsgbXVzdCBrZWVwIGluIHN5bmMgd2l0aCBmb3JtYXREZXNjT3B0Ci0JcmVmbGVjdC5UeXBlT2YoKCpwcmVmLkVudW1EZXNjcmlwdG9yKShuaWwpKS5FbGVtKCk6ICAgICAgeyJWYWx1ZXMiLCAiUmVzZXJ2ZWROYW1lcyIsICJSZXNlcnZlZFJhbmdlcyJ9LAotCXJlZmxlY3QuVHlwZU9mKCgqcHJlZi5FbnVtVmFsdWVEZXNjcmlwdG9yKShuaWwpKS5FbGVtKCk6IHsiTnVtYmVyIn0sCi0JcmVmbGVjdC5UeXBlT2YoKCpwcmVmLlNlcnZpY2VEZXNjcmlwdG9yKShuaWwpKS5FbGVtKCk6ICAgeyJNZXRob2RzIn0sCi0JcmVmbGVjdC5UeXBlT2YoKCpwcmVmLk1ldGhvZERlc2NyaXB0b3IpKG5pbCkpLkVsZW0oKTogICAgeyJJbnB1dCIsICJPdXRwdXQiLCAiSXNTdHJlYW1pbmdDbGllbnQiLCAiSXNTdHJlYW1pbmdTZXJ2ZXIifSwKK3R5cGUgbWV0aG9kQW5kTmFtZSBzdHJ1Y3QgeworCW1ldGhvZCByZWZsZWN0LlZhbHVlCisJbmFtZSAgIHN0cmluZwogfQogCi1mdW5jIEZvcm1hdERlc2MocyBmbXQuU3RhdGUsIHIgcnVuZSwgdCBwcmVmLkRlc2NyaXB0b3IpIHsKLQlpby5Xcml0ZVN0cmluZyhzLCBmb3JtYXREZXNjT3B0KHQsIHRydWUsIHIgPT0gJ3YnICYmIChzLkZsYWcoJysnKSB8fCBzLkZsYWcoJyMnKSkpKQorZnVuYyBGb3JtYXREZXNjKHMgZm10LlN0YXRlLCByIHJ1bmUsIHQgcHJvdG9yZWZsZWN0LkRlc2NyaXB0b3IpIHsKKwlpby5Xcml0ZVN0cmluZyhzLCBmb3JtYXREZXNjT3B0KHQsIHRydWUsIHIgPT0gJ3YnICYmIChzLkZsYWcoJysnKSB8fCBzLkZsYWcoJyMnKSksIG5pbCkpCiB9Ci1mdW5jIGZvcm1hdERlc2NPcHQodCBwcmVmLkRlc2NyaXB0b3IsIGlzUm9vdCwgYWxsb3dNdWx0aSBib29sKSBzdHJpbmcgeworCitmdW5jIEludGVybmFsRm9ybWF0RGVzY09wdEZvclRlc3RpbmcodCBwcm90b3JlZmxlY3QuRGVzY3JpcHRvciwgaXNSb290LCBhbGxvd011bHRpIGJvb2wsIHJlY29yZCBmdW5jKHN0cmluZykpIHN0cmluZyB7CisJcmV0dXJuIGZvcm1hdERlc2NPcHQodCwgaXNSb290LCBhbGxvd011bHRpLCByZWNvcmQpCit9CisKK2Z1bmMgZm9ybWF0RGVzY09wdCh0IHByb3RvcmVmbGVjdC5EZXNjcmlwdG9yLCBpc1Jvb3QsIGFsbG93TXVsdGkgYm9vbCwgcmVjb3JkIGZ1bmMoc3RyaW5nKSkgc3RyaW5nIHsKIAlydiA6PSByZWZsZWN0LlZhbHVlT2YodCkKIAlydCA6PSBydi5NZXRob2RCeU5hbWUoIlByb3RvVHlwZSIpLlR5cGUoKS5JbigwKQogCkBAIC0xMjgsMjcgKzEyNiw2MSBAQAogCQlzdGFydCA9IHJ0Lk5hbWUoKSArICJ7IgogCX0KIAotCV8sIGlzRmlsZSA6PSB0LihwcmVmLkZpbGVEZXNjcmlwdG9yKQotCXJzIDo9IHJlY29yZHN7YWxsb3dNdWx0aTogYWxsb3dNdWx0aX0KKwlfLCBpc0ZpbGUgOj0gdC4ocHJvdG9yZWZsZWN0LkZpbGVEZXNjcmlwdG9yKQorCXJzIDo9IHJlY29yZHN7CisJCWFsbG93TXVsdGk6IGFsbG93TXVsdGksCisJCXJlY29yZDogICAgIHJlY29yZCwKKwl9CiAJaWYgdC5Jc1BsYWNlaG9sZGVyKCkgewogCQlpZiBpc0ZpbGUgewotCQkJcnMuQXBwZW5kKHJ2LCAiUGF0aCIsICJQYWNrYWdlIiwgIklzUGxhY2Vob2xkZXIiKQorCQkJcnMuQXBwZW5kKHJ2LCBbXW1ldGhvZEFuZE5hbWV7CisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiUGF0aCIpLCAiUGF0aCJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIlBhY2thZ2UiKSwgIlBhY2thZ2UifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJJc1BsYWNlaG9sZGVyIiksICJJc1BsYWNlaG9sZGVyIn0sCisJCQl9Li4uKQogCQl9IGVsc2UgewotCQkJcnMuQXBwZW5kKHJ2LCAiRnVsbE5hbWUiLCAiSXNQbGFjZWhvbGRlciIpCisJCQlycy5BcHBlbmQocnYsIFtdbWV0aG9kQW5kTmFtZXsKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJGdWxsTmFtZSIpLCAiRnVsbE5hbWUifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJJc1BsYWNlaG9sZGVyIiksICJJc1BsYWNlaG9sZGVyIn0sCisJCQl9Li4uKQogCQl9CiAJfSBlbHNlIHsKIAkJc3dpdGNoIHsKIAkJY2FzZSBpc0ZpbGU6Ci0JCQlycy5BcHBlbmQocnYsICJTeW50YXgiKQorCQkJcnMuQXBwZW5kKHJ2LCBtZXRob2RBbmROYW1le3J2Lk1ldGhvZEJ5TmFtZSgiU3ludGF4IiksICJTeW50YXgifSkKIAkJY2FzZSBpc1Jvb3Q6Ci0JCQlycy5BcHBlbmQocnYsICJTeW50YXgiLCAiRnVsbE5hbWUiKQorCQkJcnMuQXBwZW5kKHJ2LCBbXW1ldGhvZEFuZE5hbWV7CisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiU3ludGF4IiksICJTeW50YXgifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJGdWxsTmFtZSIpLCAiRnVsbE5hbWUifSwKKwkJCX0uLi4pCiAJCWRlZmF1bHQ6Ci0JCQlycy5BcHBlbmQocnYsICJOYW1lIikKKwkJCXJzLkFwcGVuZChydiwgbWV0aG9kQW5kTmFtZXtydi5NZXRob2RCeU5hbWUoIk5hbWUiKSwgIk5hbWUifSkKIAkJfQogCQlzd2l0Y2ggdCA6PSB0Lih0eXBlKSB7Ci0JCWNhc2UgcHJlZi5GaWVsZERlc2NyaXB0b3I6Ci0JCQlmb3IgXywgcyA6PSByYW5nZSBkZXNjcmlwdG9yQWNjZXNzb3JzW3J0XSB7Ci0JCQkJc3dpdGNoIHMgeworCQljYXNlIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3I6CisJCQlhY2Nlc3NvcnMgOj0gW11tZXRob2RBbmROYW1leworCQkJCXtydi5NZXRob2RCeU5hbWUoIk51bWJlciIpLCAiTnVtYmVyIn0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiQ2FyZGluYWxpdHkiKSwgIkNhcmRpbmFsaXR5In0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiS2luZCIpLCAiS2luZCJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIkhhc0pTT05OYW1lIiksICJIYXNKU09OTmFtZSJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIkpTT05OYW1lIiksICJKU09OTmFtZSJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIkhhc1ByZXNlbmNlIiksICJIYXNQcmVzZW5jZSJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIklzRXh0ZW5zaW9uIiksICJJc0V4dGVuc2lvbiJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIklzUGFja2VkIiksICJJc1BhY2tlZCJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIklzV2VhayIpLCAiSXNXZWFrIn0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiSXNMaXN0IiksICJJc0xpc3QifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJJc01hcCIpLCAiSXNNYXAifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJNYXBLZXkiKSwgIk1hcEtleSJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIk1hcFZhbHVlIiksICJNYXBWYWx1ZSJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIkhhc0RlZmF1bHQiKSwgIkhhc0RlZmF1bHQifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJEZWZhdWx0IiksICJEZWZhdWx0In0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiQ29udGFpbmluZ09uZW9mIiksICJDb250YWluaW5nT25lb2YifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJDb250YWluaW5nTWVzc2FnZSIpLCAiQ29udGFpbmluZ01lc3NhZ2UifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJNZXNzYWdlIiksICJNZXNzYWdlIn0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiRW51bSIpLCAiRW51bSJ9LAorCQkJfQorCQkJZm9yIF8sIHMgOj0gcmFuZ2UgYWNjZXNzb3JzIHsKKwkJCQlzd2l0Y2ggcy5uYW1lIHsKIAkJCQljYXNlICJNYXBLZXkiOgogCQkJCQlpZiBrIDo9IHQuTWFwS2V5KCk7IGsgIT0gbmlsIHsKIAkJCQkJCXJzLnJlY3MgPSBhcHBlbmQocnMucmVjcywgWzJdc3RyaW5neyJNYXBLZXkiLCBrLktpbmQoKS5TdHJpbmcoKX0pCkBAIC0xNTYsMjEgKzE4OCwyMSBAQAogCQkJCWNhc2UgIk1hcFZhbHVlIjoKIAkJCQkJaWYgdiA6PSB0Lk1hcFZhbHVlKCk7IHYgIT0gbmlsIHsKIAkJCQkJCXN3aXRjaCB2LktpbmQoKSB7Ci0JCQkJCQljYXNlIHByZWYuRW51bUtpbmQ6Ci0JCQkJCQkJcnMucmVjcyA9IGFwcGVuZChycy5yZWNzLCBbMl1zdHJpbmd7Ik1hcFZhbHVlIiwgc3RyaW5nKHYuRW51bSgpLkZ1bGxOYW1lKCkpfSkKLQkJCQkJCWNhc2UgcHJlZi5NZXNzYWdlS2luZCwgcHJlZi5Hcm91cEtpbmQ6Ci0JCQkJCQkJcnMucmVjcyA9IGFwcGVuZChycy5yZWNzLCBbMl1zdHJpbmd7Ik1hcFZhbHVlIiwgc3RyaW5nKHYuTWVzc2FnZSgpLkZ1bGxOYW1lKCkpfSkKKwkJCQkJCWNhc2UgcHJvdG9yZWZsZWN0LkVudW1LaW5kOgorCQkJCQkJCXJzLkFwcGVuZFJlY3MoIk1hcFZhbHVlIiwgWzJdc3RyaW5neyJNYXBWYWx1ZSIsIHN0cmluZyh2LkVudW0oKS5GdWxsTmFtZSgpKX0pCisJCQkJCQljYXNlIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZCwgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKKwkJCQkJCQlycy5BcHBlbmRSZWNzKCJNYXBWYWx1ZSIsIFsyXXN0cmluZ3siTWFwVmFsdWUiLCBzdHJpbmcodi5NZXNzYWdlKCkuRnVsbE5hbWUoKSl9KQogCQkJCQkJZGVmYXVsdDoKLQkJCQkJCQlycy5yZWNzID0gYXBwZW5kKHJzLnJlY3MsIFsyXXN0cmluZ3siTWFwVmFsdWUiLCB2LktpbmQoKS5TdHJpbmcoKX0pCisJCQkJCQkJcnMuQXBwZW5kUmVjcygiTWFwVmFsdWUiLCBbMl1zdHJpbmd7Ik1hcFZhbHVlIiwgdi5LaW5kKCkuU3RyaW5nKCl9KQogCQkJCQkJfQogCQkJCQl9CiAJCQkJY2FzZSAiQ29udGFpbmluZ09uZW9mIjoKIAkJCQkJaWYgb2QgOj0gdC5Db250YWluaW5nT25lb2YoKTsgb2QgIT0gbmlsIHsKLQkJCQkJCXJzLnJlY3MgPSBhcHBlbmQocnMucmVjcywgWzJdc3RyaW5neyJPbmVvZiIsIHN0cmluZyhvZC5OYW1lKCkpfSkKKwkJCQkJCXJzLkFwcGVuZFJlY3MoIkNvbnRhaW5pbmdPbmVvZiIsIFsyXXN0cmluZ3siT25lb2YiLCBzdHJpbmcob2QuTmFtZSgpKX0pCiAJCQkJCX0KIAkJCQljYXNlICJDb250YWluaW5nTWVzc2FnZSI6CiAJCQkJCWlmIHQuSXNFeHRlbnNpb24oKSB7Ci0JCQkJCQlycy5yZWNzID0gYXBwZW5kKHJzLnJlY3MsIFsyXXN0cmluZ3siRXh0ZW5kZWUiLCBzdHJpbmcodC5Db250YWluaW5nTWVzc2FnZSgpLkZ1bGxOYW1lKCkpfSkKKwkJCQkJCXJzLkFwcGVuZFJlY3MoIkNvbnRhaW5pbmdNZXNzYWdlIiwgWzJdc3RyaW5neyJFeHRlbmRlZSIsIHN0cmluZyh0LkNvbnRhaW5pbmdNZXNzYWdlKCkuRnVsbE5hbWUoKSl9KQogCQkJCQl9CiAJCQkJY2FzZSAiTWVzc2FnZSI6CiAJCQkJCWlmICF0LklzTWFwKCkgewpAQCAtMTgwLDIwICsyMTIsNjggQEAKIAkJCQkJcnMuQXBwZW5kKHJ2LCBzKQogCQkJCX0KIAkJCX0KLQkJY2FzZSBwcmVmLk9uZW9mRGVzY3JpcHRvcjoKKwkJY2FzZSBwcm90b3JlZmxlY3QuT25lb2ZEZXNjcmlwdG9yOgogCQkJdmFyIHNzIFtdc3RyaW5nCiAJCQlmcyA6PSB0LkZpZWxkcygpCiAJCQlmb3IgaSA6PSAwOyBpIDwgZnMuTGVuKCk7IGkrKyB7CiAJCQkJc3MgPSBhcHBlbmQoc3MsIHN0cmluZyhmcy5HZXQoaSkuTmFtZSgpKSkKIAkJCX0KIAkJCWlmIGxlbihzcykgPiAwIHsKLQkJCQlycy5yZWNzID0gYXBwZW5kKHJzLnJlY3MsIFsyXXN0cmluZ3siRmllbGRzIiwgIlsiICsgam9pblN0cmluZ3Moc3MsIGZhbHNlKSArICJdIn0pCisJCQkJcnMuQXBwZW5kUmVjcygiRmllbGRzIiwgWzJdc3RyaW5neyJGaWVsZHMiLCAiWyIgKyBqb2luU3RyaW5ncyhzcywgZmFsc2UpICsgIl0ifSkKIAkJCX0KLQkJZGVmYXVsdDoKLQkJCXJzLkFwcGVuZChydiwgZGVzY3JpcHRvckFjY2Vzc29yc1tydF0uLi4pCisKKwkJY2FzZSBwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3I6CisJCQlycy5BcHBlbmQocnYsIFtdbWV0aG9kQW5kTmFtZXsKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJQYXRoIiksICJQYXRoIn0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiUGFja2FnZSIpLCAiUGFja2FnZSJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIkltcG9ydHMiKSwgIkltcG9ydHMifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJNZXNzYWdlcyIpLCAiTWVzc2FnZXMifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJFbnVtcyIpLCAiRW51bXMifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJFeHRlbnNpb25zIiksICJFeHRlbnNpb25zIn0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiU2VydmljZXMiKSwgIlNlcnZpY2VzIn0sCisJCQl9Li4uKQorCisJCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yOgorCQkJcnMuQXBwZW5kKHJ2LCBbXW1ldGhvZEFuZE5hbWV7CisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiSXNNYXBFbnRyeSIpLCAiSXNNYXBFbnRyeSJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIkZpZWxkcyIpLCAiRmllbGRzIn0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiT25lb2ZzIiksICJPbmVvZnMifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJSZXNlcnZlZE5hbWVzIiksICJSZXNlcnZlZE5hbWVzIn0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiUmVzZXJ2ZWRSYW5nZXMiKSwgIlJlc2VydmVkUmFuZ2VzIn0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiUmVxdWlyZWROdW1iZXJzIiksICJSZXF1aXJlZE51bWJlcnMifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJFeHRlbnNpb25SYW5nZXMiKSwgIkV4dGVuc2lvblJhbmdlcyJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIk1lc3NhZ2VzIiksICJNZXNzYWdlcyJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIkVudW1zIiksICJFbnVtcyJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIkV4dGVuc2lvbnMiKSwgIkV4dGVuc2lvbnMifSwKKwkJCX0uLi4pCisKKwkJY2FzZSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3I6CisJCQlycy5BcHBlbmQocnYsIFtdbWV0aG9kQW5kTmFtZXsKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJWYWx1ZXMiKSwgIlZhbHVlcyJ9LAorCQkJCXtydi5NZXRob2RCeU5hbWUoIlJlc2VydmVkTmFtZXMiKSwgIlJlc2VydmVkTmFtZXMifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJSZXNlcnZlZFJhbmdlcyIpLCAiUmVzZXJ2ZWRSYW5nZXMifSwKKwkJCX0uLi4pCisKKwkJY2FzZSBwcm90b3JlZmxlY3QuRW51bVZhbHVlRGVzY3JpcHRvcjoKKwkJCXJzLkFwcGVuZChydiwgW11tZXRob2RBbmROYW1leworCQkJCXtydi5NZXRob2RCeU5hbWUoIk51bWJlciIpLCAiTnVtYmVyIn0sCisJCQl9Li4uKQorCisJCWNhc2UgcHJvdG9yZWZsZWN0LlNlcnZpY2VEZXNjcmlwdG9yOgorCQkJcnMuQXBwZW5kKHJ2LCBbXW1ldGhvZEFuZE5hbWV7CisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiTWV0aG9kcyIpLCAiTWV0aG9kcyJ9LAorCQkJfS4uLikKKworCQljYXNlIHByb3RvcmVmbGVjdC5NZXRob2REZXNjcmlwdG9yOgorCQkJcnMuQXBwZW5kKHJ2LCBbXW1ldGhvZEFuZE5hbWV7CisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiSW5wdXQiKSwgIklucHV0In0sCisJCQkJe3J2Lk1ldGhvZEJ5TmFtZSgiT3V0cHV0IiksICJPdXRwdXQifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJJc1N0cmVhbWluZ0NsaWVudCIpLCAiSXNTdHJlYW1pbmdDbGllbnQifSwKKwkJCQl7cnYuTWV0aG9kQnlOYW1lKCJJc1N0cmVhbWluZ1NlcnZlciIpLCAiSXNTdHJlYW1pbmdTZXJ2ZXIifSwKKwkJCX0uLi4pCiAJCX0KLQkJaWYgcnYuTWV0aG9kQnlOYW1lKCJHb1R5cGUiKS5Jc1ZhbGlkKCkgewotCQkJcnMuQXBwZW5kKHJ2LCAiR29UeXBlIikKKwkJaWYgbSA6PSBydi5NZXRob2RCeU5hbWUoIkdvVHlwZSIpOyBtLklzVmFsaWQoKSB7CisJCQlycy5BcHBlbmQocnYsIG1ldGhvZEFuZE5hbWV7bSwgIkdvVHlwZSJ9KQogCQl9CiAJfQogCXJldHVybiBzdGFydCArIHJzLkpvaW4oKSArIGVuZApAQCAtMjAyLDIxICsyODIsMzYgQEAKIHR5cGUgcmVjb3JkcyBzdHJ1Y3QgewogCXJlY3MgICAgICAgW11bMl1zdHJpbmcKIAlhbGxvd011bHRpIGJvb2wKKworCS8vIHJlY29yZCBpcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IEFwcGVuZCgpIG9yCisJLy8gQXBwZW5kUmVjcygpIGNhbGwsIHRvIGJlIHVzZWQgZm9yIHRlc3Rpbmcgd2l0aCB0aGUKKwkvLyBJbnRlcm5hbEZvcm1hdERlc2NPcHRGb3JUZXN0aW5nIGZ1bmN0aW9uLgorCXJlY29yZCBmdW5jKHN0cmluZykKIH0KIAotZnVuYyAocnMgKnJlY29yZHMpIEFwcGVuZCh2IHJlZmxlY3QuVmFsdWUsIGFjY2Vzc29ycyAuLi5zdHJpbmcpIHsKK2Z1bmMgKHJzICpyZWNvcmRzKSBBcHBlbmRSZWNzKGZpZWxkTmFtZSBzdHJpbmcsIG5ld1JlY3MgWzJdc3RyaW5nKSB7CisJaWYgcnMucmVjb3JkICE9IG5pbCB7CisJCXJzLnJlY29yZChmaWVsZE5hbWUpCisJfQorCXJzLnJlY3MgPSBhcHBlbmQocnMucmVjcywgbmV3UmVjcykKK30KKworZnVuYyAocnMgKnJlY29yZHMpIEFwcGVuZCh2IHJlZmxlY3QuVmFsdWUsIGFjY2Vzc29ycyAuLi5tZXRob2RBbmROYW1lKSB7CiAJZm9yIF8sIGEgOj0gcmFuZ2UgYWNjZXNzb3JzIHsKKwkJaWYgcnMucmVjb3JkICE9IG5pbCB7CisJCQlycy5yZWNvcmQoYS5uYW1lKQorCQl9CiAJCXZhciBydiByZWZsZWN0LlZhbHVlCi0JCWlmIG0gOj0gdi5NZXRob2RCeU5hbWUoYSk7IG0uSXNWYWxpZCgpIHsKLQkJCXJ2ID0gbS5DYWxsKG5pbClbMF0KKwkJaWYgYS5tZXRob2QuSXNWYWxpZCgpIHsKKwkJCXJ2ID0gYS5tZXRob2QuQ2FsbChuaWwpWzBdCiAJCX0KIAkJaWYgdi5LaW5kKCkgPT0gcmVmbGVjdC5TdHJ1Y3QgJiYgIXJ2LklzVmFsaWQoKSB7Ci0JCQlydiA9IHYuRmllbGRCeU5hbWUoYSkKKwkJCXJ2ID0gdi5GaWVsZEJ5TmFtZShhLm5hbWUpCiAJCX0KIAkJaWYgIXJ2LklzVmFsaWQoKSB7Ci0JCQlwYW5pYyhmbXQuU3ByaW50ZigidW5rbm93biBhY2Nlc3NvcjogJXYuJXMiLCB2LlR5cGUoKSwgYSkpCisJCQlwYW5pYyhmbXQuU3ByaW50ZigidW5rbm93biBhY2Nlc3NvcjogJXYuJXMiLCB2LlR5cGUoKSwgYS5uYW1lKSkKIAkJfQotCQlpZiBfLCBvayA6PSBydi5JbnRlcmZhY2UoKS4ocHJlZi5WYWx1ZSk7IG9rIHsKKwkJaWYgXywgb2sgOj0gcnYuSW50ZXJmYWNlKCkuKHByb3RvcmVmbGVjdC5WYWx1ZSk7IG9rIHsKIAkJCXJ2ID0gcnYuTWV0aG9kQnlOYW1lKCJJbnRlcmZhY2UiKS5DYWxsKG5pbClbMF0KIAkJCWlmICFydi5Jc05pbCgpIHsKIAkJCQlydiA9IHJ2LkVsZW0oKQpAQCAtMjUwLDkgKzM0NSw5IEBACiAJCXN3aXRjaCB2IDo9IHYuKHR5cGUpIHsKIAkJY2FzZSBsaXN0OgogCQkJcyA9IGZvcm1hdExpc3RPcHQodiwgZmFsc2UsIHJzLmFsbG93TXVsdGkpCi0JCWNhc2UgcHJlZi5GaWVsZERlc2NyaXB0b3IsIHByZWYuT25lb2ZEZXNjcmlwdG9yLCBwcmVmLkVudW1WYWx1ZURlc2NyaXB0b3IsIHByZWYuTWV0aG9kRGVzY3JpcHRvcjoKLQkJCXMgPSBzdHJpbmcodi4ocHJlZi5EZXNjcmlwdG9yKS5OYW1lKCkpCi0JCWNhc2UgcHJlZi5EZXNjcmlwdG9yOgorCQljYXNlIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIHByb3RvcmVmbGVjdC5PbmVvZkRlc2NyaXB0b3IsIHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9yLCBwcm90b3JlZmxlY3QuTWV0aG9kRGVzY3JpcHRvcjoKKwkJCXMgPSBzdHJpbmcodi4ocHJvdG9yZWZsZWN0LkRlc2NyaXB0b3IpLk5hbWUoKSkKKwkJY2FzZSBwcm90b3JlZmxlY3QuRGVzY3JpcHRvcjoKIAkJCXMgPSBzdHJpbmcodi5GdWxsTmFtZSgpKQogCQljYXNlIHN0cmluZzoKIAkJCXMgPSBzdHJjb252LlF1b3RlKHYpCkBAIC0yNjEsNyArMzU2LDcgQEAKIAkJZGVmYXVsdDoKIAkJCXMgPSBmbXQuU3ByaW50KHYpCiAJCX0KLQkJcnMucmVjcyA9IGFwcGVuZChycy5yZWNzLCBbMl1zdHJpbmd7YSwgc30pCisJCXJzLnJlY3MgPSBhcHBlbmQocnMucmVjcywgWzJdc3RyaW5ne2EubmFtZSwgc30pCiAJfQogfQogCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZWRpdGlvbmRlZmF1bHRzL2RlZmF1bHRzLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VkaXRpb25kZWZhdWx0cy9kZWZhdWx0cy5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY1NmI2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VkaXRpb25kZWZhdWx0cy9kZWZhdWx0cy5nbwpAQCAtMCwwICsxLDEyIEBACisvLyBDb3B5cmlnaHQgMjAyNCBUaGUgR28gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlCisvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIFBhY2thZ2UgZWRpdGlvbmRlZmF1bHRzIGNvbnRhaW5zIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVkaXRpb25zCisvLyBkZWZhdWx0cy4KK3BhY2thZ2UgZWRpdGlvbmRlZmF1bHRzCisKK2ltcG9ydCBfICJlbWJlZCIKKworLy9nbzplbWJlZCBlZGl0aW9uc19kZWZhdWx0cy5iaW5wYgordmFyIERlZmF1bHRzIFtdYnl0ZQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VkaXRpb25kZWZhdWx0cy9lZGl0aW9uc19kZWZhdWx0cy5iaW5wYiBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lZGl0aW9uZGVmYXVsdHMvZWRpdGlvbnNfZGVmYXVsdHMuYmlucGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThmMDc1NgotLS0gL2Rldi9udWxsCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lZGl0aW9uZGVmYXVsdHMvZWRpdGlvbnNfZGVmYXVsdHMuYmlucGIKQEAgLTAsMCArMSw0IEBACisKKxESDAgBEAIYAiADKAEwAhjmBworERIMCAIQARgBIAIoATABGOcHCisREgwIARABGAEgAigBMAEY6Acg5gco6AcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvZGVmdmFsL2RlZmF1bHQuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvZGVmdmFsL2RlZmF1bHQuZ28KaW5kZXggZmRkOWIxMy4uMzI4ZGM3MyAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL2RlZnZhbC9kZWZhdWx0LmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGluZy9kZWZ2YWwvZGVmYXVsdC5nbwpAQCAtMTUsOCArMTUsOCBAQAogCSJzdHJjb252IgogCiAJcHRleHQgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL3RleHQiCi0JZXJyb3JzICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lcnJvcnMiCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2Vycm9ycyIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCiApCiAKIC8vIEZvcm1hdCBpcyB0aGUgc2VyaWFsaXphdGlvbiBmb3JtYXQgdXNlZCB0byByZXByZXNlbnQgdGhlIGRlZmF1bHQgdmFsdWUuCkBAIC0zNSw1NiArMzUsNTYgQEAKIAogLy8gVW5tYXJzaGFsIGRlc2VyaWFsaXplcyB0aGUgZGVmYXVsdCBzdHJpbmcgcyBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGtpbmQgay4KIC8vIFdoZW4gayBpcyBhbiBlbnVtLCBhIGxpc3Qgb2YgZW51bSB2YWx1ZSBkZXNjcmlwdG9ycyBtdXN0IGJlIHByb3ZpZGVkLgotZnVuYyBVbm1hcnNoYWwocyBzdHJpbmcsIGsgcHJlZi5LaW5kLCBldnMgcHJlZi5FbnVtVmFsdWVEZXNjcmlwdG9ycywgZiBGb3JtYXQpIChwcmVmLlZhbHVlLCBwcmVmLkVudW1WYWx1ZURlc2NyaXB0b3IsIGVycm9yKSB7CitmdW5jIFVubWFyc2hhbChzIHN0cmluZywgayBwcm90b3JlZmxlY3QuS2luZCwgZXZzIHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9ycywgZiBGb3JtYXQpIChwcm90b3JlZmxlY3QuVmFsdWUsIHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9yLCBlcnJvcikgewogCXN3aXRjaCBrIHsKLQljYXNlIHByZWYuQm9vbEtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuQm9vbEtpbmQ6CiAJCWlmIGYgPT0gR29UYWcgewogCQkJc3dpdGNoIHMgewogCQkJY2FzZSAiMSI6Ci0JCQkJcmV0dXJuIHByZWYuVmFsdWVPZkJvb2wodHJ1ZSksIG5pbCwgbmlsCisJCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mQm9vbCh0cnVlKSwgbmlsLCBuaWwKIAkJCWNhc2UgIjAiOgotCQkJCXJldHVybiBwcmVmLlZhbHVlT2ZCb29sKGZhbHNlKSwgbmlsLCBuaWwKKwkJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZCb29sKGZhbHNlKSwgbmlsLCBuaWwKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXN3aXRjaCBzIHsKIAkJCWNhc2UgInRydWUiOgotCQkJCXJldHVybiBwcmVmLlZhbHVlT2ZCb29sKHRydWUpLCBuaWwsIG5pbAorCQkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkJvb2wodHJ1ZSksIG5pbCwgbmlsCiAJCQljYXNlICJmYWxzZSI6Ci0JCQkJcmV0dXJuIHByZWYuVmFsdWVPZkJvb2woZmFsc2UpLCBuaWwsIG5pbAorCQkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkJvb2woZmFsc2UpLCBuaWwsIG5pbAogCQkJfQogCQl9Ci0JY2FzZSBwcmVmLkVudW1LaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LkVudW1LaW5kOgogCQlpZiBmID09IEdvVGFnIHsKIAkJCS8vIEdvIHRhZ3MgdXNlIHRoZSBudW1lcmljIGZvcm0gb2YgdGhlIGVudW0gdmFsdWUuCiAJCQlpZiBuLCBlcnIgOj0gc3RyY29udi5QYXJzZUludChzLCAxMCwgMzIpOyBlcnIgPT0gbmlsIHsKLQkJCQlpZiBldiA6PSBldnMuQnlOdW1iZXIocHJlZi5FbnVtTnVtYmVyKG4pKTsgZXYgIT0gbmlsIHsKLQkJCQkJcmV0dXJuIHByZWYuVmFsdWVPZkVudW0oZXYuTnVtYmVyKCkpLCBldiwgbmlsCisJCQkJaWYgZXYgOj0gZXZzLkJ5TnVtYmVyKHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKG4pKTsgZXYgIT0gbmlsIHsKKwkJCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mRW51bShldi5OdW1iZXIoKSksIGV2LCBuaWwKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvLyBEZXNjcmlwdG9yIGRlZmF1bHRfdmFsdWUgdXNlIHRoZSBlbnVtIGlkZW50aWZpZXIuCi0JCQlldiA6PSBldnMuQnlOYW1lKHByZWYuTmFtZShzKSkKKwkJCWV2IDo9IGV2cy5CeU5hbWUocHJvdG9yZWZsZWN0Lk5hbWUocykpCiAJCQlpZiBldiAhPSBuaWwgewotCQkJCXJldHVybiBwcmVmLlZhbHVlT2ZFbnVtKGV2Lk51bWJlcigpKSwgZXYsIG5pbAorCQkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkVudW0oZXYuTnVtYmVyKCkpLCBldiwgbmlsCiAJCQl9CiAJCX0KLQljYXNlIHByZWYuSW50MzJLaW5kLCBwcmVmLlNpbnQzMktpbmQsIHByZWYuU2ZpeGVkMzJLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LkludDMyS2luZCwgcHJvdG9yZWZsZWN0LlNpbnQzMktpbmQsIHByb3RvcmVmbGVjdC5TZml4ZWQzMktpbmQ6CiAJCWlmIHYsIGVyciA6PSBzdHJjb252LlBhcnNlSW50KHMsIDEwLCAzMik7IGVyciA9PSBuaWwgewotCQkJcmV0dXJuIHByZWYuVmFsdWVPZkludDMyKGludDMyKHYpKSwgbmlsLCBuaWwKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkludDMyKGludDMyKHYpKSwgbmlsLCBuaWwKIAkJfQotCWNhc2UgcHJlZi5JbnQ2NEtpbmQsIHByZWYuU2ludDY0S2luZCwgcHJlZi5TZml4ZWQ2NEtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuSW50NjRLaW5kLCBwcm90b3JlZmxlY3QuU2ludDY0S2luZCwgcHJvdG9yZWZsZWN0LlNmaXhlZDY0S2luZDoKIAkJaWYgdiwgZXJyIDo9IHN0cmNvbnYuUGFyc2VJbnQocywgMTAsIDY0KTsgZXJyID09IG5pbCB7Ci0JCQlyZXR1cm4gcHJlZi5WYWx1ZU9mSW50NjQoaW50NjQodikpLCBuaWwsIG5pbAorCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mSW50NjQoaW50NjQodikpLCBuaWwsIG5pbAogCQl9Ci0JY2FzZSBwcmVmLlVpbnQzMktpbmQsIHByZWYuRml4ZWQzMktpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuVWludDMyS2luZCwgcHJvdG9yZWZsZWN0LkZpeGVkMzJLaW5kOgogCQlpZiB2LCBlcnIgOj0gc3RyY29udi5QYXJzZVVpbnQocywgMTAsIDMyKTsgZXJyID09IG5pbCB7Ci0JCQlyZXR1cm4gcHJlZi5WYWx1ZU9mVWludDMyKHVpbnQzMih2KSksIG5pbCwgbmlsCisJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZVaW50MzIodWludDMyKHYpKSwgbmlsLCBuaWwKIAkJfQotCWNhc2UgcHJlZi5VaW50NjRLaW5kLCBwcmVmLkZpeGVkNjRLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LlVpbnQ2NEtpbmQsIHByb3RvcmVmbGVjdC5GaXhlZDY0S2luZDoKIAkJaWYgdiwgZXJyIDo9IHN0cmNvbnYuUGFyc2VVaW50KHMsIDEwLCA2NCk7IGVyciA9PSBuaWwgewotCQkJcmV0dXJuIHByZWYuVmFsdWVPZlVpbnQ2NCh1aW50NjQodikpLCBuaWwsIG5pbAorCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mVWludDY0KHVpbnQ2NCh2KSksIG5pbCwgbmlsCiAJCX0KLQljYXNlIHByZWYuRmxvYXRLaW5kLCBwcmVmLkRvdWJsZUtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuRmxvYXRLaW5kLCBwcm90b3JlZmxlY3QuRG91YmxlS2luZDoKIAkJdmFyIHYgZmxvYXQ2NAogCQl2YXIgZXJyIGVycm9yCiAJCXN3aXRjaCBzIHsKQEAgLTk4LDI5ICs5OCwyOSBAQAogCQkJdiwgZXJyID0gc3RyY29udi5QYXJzZUZsb2F0KHMsIDY0KQogCQl9CiAJCWlmIGVyciA9PSBuaWwgewotCQkJaWYgayA9PSBwcmVmLkZsb2F0S2luZCB7Ci0JCQkJcmV0dXJuIHByZWYuVmFsdWVPZkZsb2F0MzIoZmxvYXQzMih2KSksIG5pbCwgbmlsCisJCQlpZiBrID09IHByb3RvcmVmbGVjdC5GbG9hdEtpbmQgeworCQkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkZsb2F0MzIoZmxvYXQzMih2KSksIG5pbCwgbmlsCiAJCQl9IGVsc2UgewotCQkJCXJldHVybiBwcmVmLlZhbHVlT2ZGbG9hdDY0KGZsb2F0NjQodikpLCBuaWwsIG5pbAorCQkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkZsb2F0NjQoZmxvYXQ2NCh2KSksIG5pbCwgbmlsCiAJCQl9CiAJCX0KLQljYXNlIHByZWYuU3RyaW5nS2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5TdHJpbmdLaW5kOgogCQkvLyBTdHJpbmcgdmFsdWVzIGFyZSBhbHJlYWR5IHVuZXNjYXBlZCBhbmQgY2FuIGJlIHVzZWQgYXMgaXMuCi0JCXJldHVybiBwcmVmLlZhbHVlT2ZTdHJpbmcocyksIG5pbCwgbmlsCi0JY2FzZSBwcmVmLkJ5dGVzS2luZDoKKwkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mU3RyaW5nKHMpLCBuaWwsIG5pbAorCWNhc2UgcHJvdG9yZWZsZWN0LkJ5dGVzS2luZDoKIAkJaWYgYiwgb2sgOj0gdW5tYXJzaGFsQnl0ZXMocyk7IG9rIHsKLQkJCXJldHVybiBwcmVmLlZhbHVlT2ZCeXRlcyhiKSwgbmlsLCBuaWwKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkJ5dGVzKGIpLCBuaWwsIG5pbAogCQl9CiAJfQotCXJldHVybiBwcmVmLlZhbHVle30sIG5pbCwgZXJyb3JzLk5ldygiY291bGQgbm90IHBhcnNlIHZhbHVlIGZvciAldjogJXEiLCBrLCBzKQorCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWV7fSwgbmlsLCBlcnJvcnMuTmV3KCJjb3VsZCBub3QgcGFyc2UgdmFsdWUgZm9yICV2OiAlcSIsIGssIHMpCiB9CiAKIC8vIE1hcnNoYWwgc2VyaWFsaXplcyB2IGFzIHRoZSBkZWZhdWx0IHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGtpbmQgay4KIC8vIFdoZW4gc3BlY2lmeWluZyB0aGUgRGVzY3JpcHRvciBmb3JtYXQgZm9yIGFuIGVudW0ga2luZCwgdGhlIGFzc29jaWF0ZWQKIC8vIGVudW0gdmFsdWUgZGVzY3JpcHRvciBtdXN0IGJlIHByb3ZpZGVkLgotZnVuYyBNYXJzaGFsKHYgcHJlZi5WYWx1ZSwgZXYgcHJlZi5FbnVtVmFsdWVEZXNjcmlwdG9yLCBrIHByZWYuS2luZCwgZiBGb3JtYXQpIChzdHJpbmcsIGVycm9yKSB7CitmdW5jIE1hcnNoYWwodiBwcm90b3JlZmxlY3QuVmFsdWUsIGV2IHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9yLCBrIHByb3RvcmVmbGVjdC5LaW5kLCBmIEZvcm1hdCkgKHN0cmluZywgZXJyb3IpIHsKIAlzd2l0Y2ggayB7Ci0JY2FzZSBwcmVmLkJvb2xLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LkJvb2xLaW5kOgogCQlpZiBmID09IEdvVGFnIHsKIAkJCWlmIHYuQm9vbCgpIHsKIAkJCQlyZXR1cm4gIjEiLCBuaWwKQEAgLTEzNCwxNyArMTM0LDE3IEBACiAJCQkJcmV0dXJuICJmYWxzZSIsIG5pbAogCQkJfQogCQl9Ci0JY2FzZSBwcmVmLkVudW1LaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LkVudW1LaW5kOgogCQlpZiBmID09IEdvVGFnIHsKIAkJCXJldHVybiBzdHJjb252LkZvcm1hdEludChpbnQ2NCh2LkVudW0oKSksIDEwKSwgbmlsCiAJCX0gZWxzZSB7CiAJCQlyZXR1cm4gc3RyaW5nKGV2Lk5hbWUoKSksIG5pbAogCQl9Ci0JY2FzZSBwcmVmLkludDMyS2luZCwgcHJlZi5TaW50MzJLaW5kLCBwcmVmLlNmaXhlZDMyS2luZCwgcHJlZi5JbnQ2NEtpbmQsIHByZWYuU2ludDY0S2luZCwgcHJlZi5TZml4ZWQ2NEtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuSW50MzJLaW5kLCBwcm90b3JlZmxlY3QuU2ludDMyS2luZCwgcHJvdG9yZWZsZWN0LlNmaXhlZDMyS2luZCwgcHJvdG9yZWZsZWN0LkludDY0S2luZCwgcHJvdG9yZWZsZWN0LlNpbnQ2NEtpbmQsIHByb3RvcmVmbGVjdC5TZml4ZWQ2NEtpbmQ6CiAJCXJldHVybiBzdHJjb252LkZvcm1hdEludCh2LkludCgpLCAxMCksIG5pbAotCWNhc2UgcHJlZi5VaW50MzJLaW5kLCBwcmVmLkZpeGVkMzJLaW5kLCBwcmVmLlVpbnQ2NEtpbmQsIHByZWYuRml4ZWQ2NEtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuVWludDMyS2luZCwgcHJvdG9yZWZsZWN0LkZpeGVkMzJLaW5kLCBwcm90b3JlZmxlY3QuVWludDY0S2luZCwgcHJvdG9yZWZsZWN0LkZpeGVkNjRLaW5kOgogCQlyZXR1cm4gc3RyY29udi5Gb3JtYXRVaW50KHYuVWludCgpLCAxMCksIG5pbAotCWNhc2UgcHJlZi5GbG9hdEtpbmQsIHByZWYuRG91YmxlS2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5GbG9hdEtpbmQsIHByb3RvcmVmbGVjdC5Eb3VibGVLaW5kOgogCQlmIDo9IHYuRmxvYXQoKQogCQlzd2l0Y2ggewogCQljYXNlIG1hdGguSXNJbmYoZiwgLTEpOgpAQCAtMTU0LDE2ICsxNTQsMTYgQEAKIAkJY2FzZSBtYXRoLklzTmFOKGYpOgogCQkJcmV0dXJuICJuYW4iLCBuaWwKIAkJZGVmYXVsdDoKLQkJCWlmIGsgPT0gcHJlZi5GbG9hdEtpbmQgeworCQkJaWYgayA9PSBwcm90b3JlZmxlY3QuRmxvYXRLaW5kIHsKIAkJCQlyZXR1cm4gc3RyY29udi5Gb3JtYXRGbG9hdChmLCAnZycsIC0xLCAzMiksIG5pbAogCQkJfSBlbHNlIHsKIAkJCQlyZXR1cm4gc3RyY29udi5Gb3JtYXRGbG9hdChmLCAnZycsIC0xLCA2NCksIG5pbAogCQkJfQogCQl9Ci0JY2FzZSBwcmVmLlN0cmluZ0tpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZDoKIAkJLy8gU3RyaW5nIHZhbHVlcyBhcmUgc2VyaWFsaXplZCBhcyBpcyB3aXRob3V0IGFueSBlc2NhcGluZy4KIAkJcmV0dXJuIHYuU3RyaW5nKCksIG5pbAotCWNhc2UgcHJlZi5CeXRlc0tpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuQnl0ZXNLaW5kOgogCQlpZiBzLCBvayA6PSBtYXJzaGFsQnl0ZXModi5CeXRlcygpKTsgb2sgewogCQkJcmV0dXJuIHMsIG5pbAogCQl9CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvbWVzc2FnZXNldC9tZXNzYWdlc2V0LmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL21lc3NhZ2VzZXQvbWVzc2FnZXNldC5nbwppbmRleCBjMTg2NmYzLi5hNjY5M2YwIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvbWVzc2FnZXNldC9tZXNzYWdlc2V0LmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGluZy9tZXNzYWdlc2V0L21lc3NhZ2VzZXQuZ28KQEAgLTEwLDcgKzEwLDcgQEAKIAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3dpcmUiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2Vycm9ycyIKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCiApCiAKIC8vIFRoZSBNZXNzYWdlU2V0IHdpcmUgZm9ybWF0IGlzIGVxdWl2YWxlbnQgdG8gYSBtZXNzYWdlIGRlZmluZWQgYXMgZm9sbG93cywKQEAgLTMzLDYgKzMzLDcgQEAKIC8vIEV4dGVuc2lvbk5hbWUgaXMgdGhlIGZpZWxkIG5hbWUgZm9yIGV4dGVuc2lvbnMgb2YgTWVzc2FnZVNldC4KIC8vCiAvLyBBIHZhbGlkIE1lc3NhZ2VTZXQgZXh0ZW5zaW9uIG11c3QgYmUgb2YgdGhlIGZvcm06CisvLwogLy8JbWVzc2FnZSBNeU1lc3NhZ2UgewogLy8JCWV4dGVuZCBwcm90bzIuYnJpZGdlLk1lc3NhZ2VTZXQgewogLy8JCQlvcHRpb25hbCBNeU1lc3NhZ2UgbWVzc2FnZV9zZXRfZXh0ZW5zaW9uID0gMTIzNDsKQEAgLTQyLDEzICs0MywxMyBAQAogY29uc3QgRXh0ZW5zaW9uTmFtZSA9ICJtZXNzYWdlX3NldF9leHRlbnNpb24iCiAKIC8vIElzTWVzc2FnZVNldCByZXR1cm5zIHdoZXRoZXIgdGhlIG1lc3NhZ2UgdXNlcyB0aGUgTWVzc2FnZVNldCB3aXJlIGZvcm1hdC4KLWZ1bmMgSXNNZXNzYWdlU2V0KG1kIHByZWYuTWVzc2FnZURlc2NyaXB0b3IpIGJvb2wgeworZnVuYyBJc01lc3NhZ2VTZXQobWQgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yKSBib29sIHsKIAl4bWQsIG9rIDo9IG1kLihpbnRlcmZhY2V7IElzTWVzc2FnZVNldCgpIGJvb2wgfSkKIAlyZXR1cm4gb2sgJiYgeG1kLklzTWVzc2FnZVNldCgpCiB9CiAKIC8vIElzTWVzc2FnZVNldEV4dGVuc2lvbiByZXBvcnRzIHRoaXMgZmllbGQgcHJvcGVybHkgZXh0ZW5kcyBhIE1lc3NhZ2VTZXQuCi1mdW5jIElzTWVzc2FnZVNldEV4dGVuc2lvbihmZCBwcmVmLkZpZWxkRGVzY3JpcHRvcikgYm9vbCB7CitmdW5jIElzTWVzc2FnZVNldEV4dGVuc2lvbihmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSBib29sIHsKIAlzd2l0Y2ggewogCWNhc2UgZmQuTmFtZSgpICE9IEV4dGVuc2lvbk5hbWU6CiAJCXJldHVybiBmYWxzZQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL3RhZy90YWcuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvdGFnL3RhZy5nbwppbmRleCAzOGYxOTMxLi4zNzNkMjA4IDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvdGFnL3RhZy5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvdGFnL3RhZy5nbwpAQCAtMTEsMTAgKzExLDEwIEBACiAJInN0cmNvbnYiCiAJInN0cmluZ3MiCiAKLQlkZWZ2YWwgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL2RlZnZhbCIKLQlmZGVzYyAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL2RlZnZhbCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL3N0cnMiCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgogKQogCiB2YXIgYnl0ZVR5cGUgPSByZWZsZWN0LlR5cGVPZihieXRlKDApKQpAQCAtMjksOSArMjksOSBAQAogLy8gVGhpcyBkb2VzIG5vdCBwb3B1bGF0ZSB0aGUgRW51bSBvciBNZXNzYWdlIChleGNlcHQgZm9yIHdlYWsgbWVzc2FnZSkuCiAvLwogLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJlc3QgZWZmb3J0IGF0dGVtcHQ7IHBhcnNpbmcgZXJyb3JzIGFyZSBpZ25vcmVkLgotZnVuYyBVbm1hcnNoYWwodGFnIHN0cmluZywgZ29UeXBlIHJlZmxlY3QuVHlwZSwgZXZzIHByZWYuRW51bVZhbHVlRGVzY3JpcHRvcnMpIHByZWYuRmllbGREZXNjcmlwdG9yIHsKLQlmIDo9IG5ldyhmZGVzYy5GaWVsZCkKLQlmLkwwLlBhcmVudEZpbGUgPSBmZGVzYy5TdXJyb2dhdGVQcm90bzIKK2Z1bmMgVW5tYXJzaGFsKHRhZyBzdHJpbmcsIGdvVHlwZSByZWZsZWN0LlR5cGUsIGV2cyBwcm90b3JlZmxlY3QuRW51bVZhbHVlRGVzY3JpcHRvcnMpIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IgeworCWYgOj0gbmV3KGZpbGVkZXNjLkZpZWxkKQorCWYuTDAuUGFyZW50RmlsZSA9IGZpbGVkZXNjLlN1cnJvZ2F0ZVByb3RvMgogCWZvciBsZW4odGFnKSA+IDAgewogCQlpIDo9IHN0cmluZ3MuSW5kZXhCeXRlKHRhZywgJywnKQogCQlpZiBpIDwgMCB7CkBAIC0zOSw2OCArMzksNjggQEAKIAkJfQogCQlzd2l0Y2ggcyA6PSB0YWdbOmldOyB7CiAJCWNhc2Ugc3RyaW5ncy5IYXNQcmVmaXgocywgIm5hbWU9Iik6Ci0JCQlmLkwwLkZ1bGxOYW1lID0gcHJlZi5GdWxsTmFtZShzW2xlbigibmFtZT0iKTpdKQorCQkJZi5MMC5GdWxsTmFtZSA9IHByb3RvcmVmbGVjdC5GdWxsTmFtZShzW2xlbigibmFtZT0iKTpdKQogCQljYXNlIHN0cmluZ3MuVHJpbShzLCAiMDEyMzQ1Njc4OSIpID09ICIiOgogCQkJbiwgXyA6PSBzdHJjb252LlBhcnNlVWludChzLCAxMCwgMzIpCi0JCQlmLkwxLk51bWJlciA9IHByZWYuRmllbGROdW1iZXIobikKKwkJCWYuTDEuTnVtYmVyID0gcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKG4pCiAJCWNhc2UgcyA9PSAib3B0IjoKLQkJCWYuTDEuQ2FyZGluYWxpdHkgPSBwcmVmLk9wdGlvbmFsCisJCQlmLkwxLkNhcmRpbmFsaXR5ID0gcHJvdG9yZWZsZWN0Lk9wdGlvbmFsCiAJCWNhc2UgcyA9PSAicmVxIjoKLQkJCWYuTDEuQ2FyZGluYWxpdHkgPSBwcmVmLlJlcXVpcmVkCisJCQlmLkwxLkNhcmRpbmFsaXR5ID0gcHJvdG9yZWZsZWN0LlJlcXVpcmVkCiAJCWNhc2UgcyA9PSAicmVwIjoKLQkJCWYuTDEuQ2FyZGluYWxpdHkgPSBwcmVmLlJlcGVhdGVkCisJCQlmLkwxLkNhcmRpbmFsaXR5ID0gcHJvdG9yZWZsZWN0LlJlcGVhdGVkCiAJCWNhc2UgcyA9PSAidmFyaW50IjoKIAkJCXN3aXRjaCBnb1R5cGUuS2luZCgpIHsKIAkJCWNhc2UgcmVmbGVjdC5Cb29sOgotCQkJCWYuTDEuS2luZCA9IHByZWYuQm9vbEtpbmQKKwkJCQlmLkwxLktpbmQgPSBwcm90b3JlZmxlY3QuQm9vbEtpbmQKIAkJCWNhc2UgcmVmbGVjdC5JbnQzMjoKLQkJCQlmLkwxLktpbmQgPSBwcmVmLkludDMyS2luZAorCQkJCWYuTDEuS2luZCA9IHByb3RvcmVmbGVjdC5JbnQzMktpbmQKIAkJCWNhc2UgcmVmbGVjdC5JbnQ2NDoKLQkJCQlmLkwxLktpbmQgPSBwcmVmLkludDY0S2luZAorCQkJCWYuTDEuS2luZCA9IHByb3RvcmVmbGVjdC5JbnQ2NEtpbmQKIAkJCWNhc2UgcmVmbGVjdC5VaW50MzI6Ci0JCQkJZi5MMS5LaW5kID0gcHJlZi5VaW50MzJLaW5kCisJCQkJZi5MMS5LaW5kID0gcHJvdG9yZWZsZWN0LlVpbnQzMktpbmQKIAkJCWNhc2UgcmVmbGVjdC5VaW50NjQ6Ci0JCQkJZi5MMS5LaW5kID0gcHJlZi5VaW50NjRLaW5kCisJCQkJZi5MMS5LaW5kID0gcHJvdG9yZWZsZWN0LlVpbnQ2NEtpbmQKIAkJCX0KIAkJY2FzZSBzID09ICJ6aWd6YWczMiI6CiAJCQlpZiBnb1R5cGUuS2luZCgpID09IHJlZmxlY3QuSW50MzIgewotCQkJCWYuTDEuS2luZCA9IHByZWYuU2ludDMyS2luZAorCQkJCWYuTDEuS2luZCA9IHByb3RvcmVmbGVjdC5TaW50MzJLaW5kCiAJCQl9CiAJCWNhc2UgcyA9PSAiemlnemFnNjQiOgogCQkJaWYgZ29UeXBlLktpbmQoKSA9PSByZWZsZWN0LkludDY0IHsKLQkJCQlmLkwxLktpbmQgPSBwcmVmLlNpbnQ2NEtpbmQKKwkJCQlmLkwxLktpbmQgPSBwcm90b3JlZmxlY3QuU2ludDY0S2luZAogCQkJfQogCQljYXNlIHMgPT0gImZpeGVkMzIiOgogCQkJc3dpdGNoIGdvVHlwZS5LaW5kKCkgewogCQkJY2FzZSByZWZsZWN0LkludDMyOgotCQkJCWYuTDEuS2luZCA9IHByZWYuU2ZpeGVkMzJLaW5kCisJCQkJZi5MMS5LaW5kID0gcHJvdG9yZWZsZWN0LlNmaXhlZDMyS2luZAogCQkJY2FzZSByZWZsZWN0LlVpbnQzMjoKLQkJCQlmLkwxLktpbmQgPSBwcmVmLkZpeGVkMzJLaW5kCisJCQkJZi5MMS5LaW5kID0gcHJvdG9yZWZsZWN0LkZpeGVkMzJLaW5kCiAJCQljYXNlIHJlZmxlY3QuRmxvYXQzMjoKLQkJCQlmLkwxLktpbmQgPSBwcmVmLkZsb2F0S2luZAorCQkJCWYuTDEuS2luZCA9IHByb3RvcmVmbGVjdC5GbG9hdEtpbmQKIAkJCX0KIAkJY2FzZSBzID09ICJmaXhlZDY0IjoKIAkJCXN3aXRjaCBnb1R5cGUuS2luZCgpIHsKIAkJCWNhc2UgcmVmbGVjdC5JbnQ2NDoKLQkJCQlmLkwxLktpbmQgPSBwcmVmLlNmaXhlZDY0S2luZAorCQkJCWYuTDEuS2luZCA9IHByb3RvcmVmbGVjdC5TZml4ZWQ2NEtpbmQKIAkJCWNhc2UgcmVmbGVjdC5VaW50NjQ6Ci0JCQkJZi5MMS5LaW5kID0gcHJlZi5GaXhlZDY0S2luZAorCQkJCWYuTDEuS2luZCA9IHByb3RvcmVmbGVjdC5GaXhlZDY0S2luZAogCQkJY2FzZSByZWZsZWN0LkZsb2F0NjQ6Ci0JCQkJZi5MMS5LaW5kID0gcHJlZi5Eb3VibGVLaW5kCisJCQkJZi5MMS5LaW5kID0gcHJvdG9yZWZsZWN0LkRvdWJsZUtpbmQKIAkJCX0KIAkJY2FzZSBzID09ICJieXRlcyI6CiAJCQlzd2l0Y2ggewogCQkJY2FzZSBnb1R5cGUuS2luZCgpID09IHJlZmxlY3QuU3RyaW5nOgotCQkJCWYuTDEuS2luZCA9IHByZWYuU3RyaW5nS2luZAorCQkJCWYuTDEuS2luZCA9IHByb3RvcmVmbGVjdC5TdHJpbmdLaW5kCiAJCQljYXNlIGdvVHlwZS5LaW5kKCkgPT0gcmVmbGVjdC5TbGljZSAmJiBnb1R5cGUuRWxlbSgpID09IGJ5dGVUeXBlOgotCQkJCWYuTDEuS2luZCA9IHByZWYuQnl0ZXNLaW5kCisJCQkJZi5MMS5LaW5kID0gcHJvdG9yZWZsZWN0LkJ5dGVzS2luZAogCQkJZGVmYXVsdDoKLQkJCQlmLkwxLktpbmQgPSBwcmVmLk1lc3NhZ2VLaW5kCisJCQkJZi5MMS5LaW5kID0gcHJvdG9yZWZsZWN0Lk1lc3NhZ2VLaW5kCiAJCQl9CiAJCWNhc2UgcyA9PSAiZ3JvdXAiOgotCQkJZi5MMS5LaW5kID0gcHJlZi5Hcm91cEtpbmQKKwkJCWYuTDEuS2luZCA9IHByb3RvcmVmbGVjdC5Hcm91cEtpbmQKIAkJY2FzZSBzdHJpbmdzLkhhc1ByZWZpeChzLCAiZW51bT0iKToKLQkJCWYuTDEuS2luZCA9IHByZWYuRW51bUtpbmQKKwkJCWYuTDEuS2luZCA9IHByb3RvcmVmbGVjdC5FbnVtS2luZAogCQljYXNlIHN0cmluZ3MuSGFzUHJlZml4KHMsICJqc29uPSIpOgogCQkJanNvbk5hbWUgOj0gc1tsZW4oImpzb249Iik6XQogCQkJaWYganNvbk5hbWUgIT0gc3Rycy5KU09OQ2FtZWxDYXNlKHN0cmluZyhmLkwwLkZ1bGxOYW1lLk5hbWUoKSkpIHsKQEAgLTExMSwyMyArMTExLDIzIEBACiAJCQlmLkwxLklzUGFja2VkID0gdHJ1ZQogCQljYXNlIHN0cmluZ3MuSGFzUHJlZml4KHMsICJ3ZWFrPSIpOgogCQkJZi5MMS5Jc1dlYWsgPSB0cnVlCi0JCQlmLkwxLk1lc3NhZ2UgPSBmZGVzYy5QbGFjZWhvbGRlck1lc3NhZ2UocHJlZi5GdWxsTmFtZShzW2xlbigid2Vhaz0iKTpdKSkKKwkJCWYuTDEuTWVzc2FnZSA9IGZpbGVkZXNjLlBsYWNlaG9sZGVyTWVzc2FnZShwcm90b3JlZmxlY3QuRnVsbE5hbWUoc1tsZW4oIndlYWs9Iik6XSkpCiAJCWNhc2Ugc3RyaW5ncy5IYXNQcmVmaXgocywgImRlZj0iKToKIAkJCS8vIFRoZSBkZWZhdWx0IHRhZyBpcyBzcGVjaWFsIGluIHRoYXQgZXZlcnl0aGluZyBhZnRlcndhcmRzIGlzIHRoZQogCQkJLy8gZGVmYXVsdCByZWdhcmRsZXNzIG9mIHRoZSBwcmVzZW5jZSBvZiBjb21tYXMuCiAJCQlzLCBpID0gdGFnW2xlbigiZGVmPSIpOl0sIGxlbih0YWcpCiAJCQl2LCBldiwgXyA6PSBkZWZ2YWwuVW5tYXJzaGFsKHMsIGYuTDEuS2luZCwgZXZzLCBkZWZ2YWwuR29UYWcpCi0JCQlmLkwxLkRlZmF1bHQgPSBmZGVzYy5EZWZhdWx0VmFsdWUodiwgZXYpCisJCQlmLkwxLkRlZmF1bHQgPSBmaWxlZGVzYy5EZWZhdWx0VmFsdWUodiwgZXYpCiAJCWNhc2UgcyA9PSAicHJvdG8zIjoKLQkJCWYuTDAuUGFyZW50RmlsZSA9IGZkZXNjLlN1cnJvZ2F0ZVByb3RvMworCQkJZi5MMC5QYXJlbnRGaWxlID0gZmlsZWRlc2MuU3Vycm9nYXRlUHJvdG8zCiAJCX0KIAkJdGFnID0gc3RyaW5ncy5UcmltUHJlZml4KHRhZ1tpOl0sICIsIikKIAl9CiAKIAkvLyBUaGUgZ2VuZXJhdG9yIHVzZXMgdGhlIGdyb3VwIG1lc3NhZ2UgbmFtZSBpbnN0ZWFkIG9mIHRoZSBmaWVsZCBuYW1lLgogCS8vIFdlIG9idGFpbiB0aGUgcmVhbCBmaWVsZCBuYW1lIGJ5IGxvd2VyY2FzaW5nIHRoZSBncm91cCBuYW1lLgotCWlmIGYuTDEuS2luZCA9PSBwcmVmLkdyb3VwS2luZCB7Ci0JCWYuTDAuRnVsbE5hbWUgPSBwcmVmLkZ1bGxOYW1lKHN0cmluZ3MuVG9Mb3dlcihzdHJpbmcoZi5MMC5GdWxsTmFtZSkpKQorCWlmIGYuTDEuS2luZCA9PSBwcm90b3JlZmxlY3QuR3JvdXBLaW5kIHsKKwkJZi5MMC5GdWxsTmFtZSA9IHByb3RvcmVmbGVjdC5GdWxsTmFtZShzdHJpbmdzLlRvTG93ZXIoc3RyaW5nKGYuTDAuRnVsbE5hbWUpKSkKIAl9CiAJcmV0dXJuIGYKIH0KQEAgLTE0MCwzOCArMTQwLDM4IEBACiAvLyBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgb24gaG93IE1hcnNoYWwgaXMgY2FsbGVkLCB0aGVyZSBhcmUgZGlmZmVyZW50IHdheXMKIC8vIHRocm91Z2ggd2hpY2ggdGhhdCBpbmZvcm1hdGlvbiBpcyBkZXRlcm1pbmVkLiBBcyBzdWNoIGl0IGlzIHRoZSBjYWxsZXIncwogLy8gcmVzcG9uc2liaWxpdHkgdG8gcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGF0IGluZm9ybWF0aW9uLgotZnVuYyBNYXJzaGFsKGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCBlbnVtTmFtZSBzdHJpbmcpIHN0cmluZyB7CitmdW5jIE1hcnNoYWwoZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciwgZW51bU5hbWUgc3RyaW5nKSBzdHJpbmcgewogCXZhciB0YWcgW11zdHJpbmcKIAlzd2l0Y2ggZmQuS2luZCgpIHsKLQljYXNlIHByZWYuQm9vbEtpbmQsIHByZWYuRW51bUtpbmQsIHByZWYuSW50MzJLaW5kLCBwcmVmLlVpbnQzMktpbmQsIHByZWYuSW50NjRLaW5kLCBwcmVmLlVpbnQ2NEtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuQm9vbEtpbmQsIHByb3RvcmVmbGVjdC5FbnVtS2luZCwgcHJvdG9yZWZsZWN0LkludDMyS2luZCwgcHJvdG9yZWZsZWN0LlVpbnQzMktpbmQsIHByb3RvcmVmbGVjdC5JbnQ2NEtpbmQsIHByb3RvcmVmbGVjdC5VaW50NjRLaW5kOgogCQl0YWcgPSBhcHBlbmQodGFnLCAidmFyaW50IikKLQljYXNlIHByZWYuU2ludDMyS2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5TaW50MzJLaW5kOgogCQl0YWcgPSBhcHBlbmQodGFnLCAiemlnemFnMzIiKQotCWNhc2UgcHJlZi5TaW50NjRLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LlNpbnQ2NEtpbmQ6CiAJCXRhZyA9IGFwcGVuZCh0YWcsICJ6aWd6YWc2NCIpCi0JY2FzZSBwcmVmLlNmaXhlZDMyS2luZCwgcHJlZi5GaXhlZDMyS2luZCwgcHJlZi5GbG9hdEtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuU2ZpeGVkMzJLaW5kLCBwcm90b3JlZmxlY3QuRml4ZWQzMktpbmQsIHByb3RvcmVmbGVjdC5GbG9hdEtpbmQ6CiAJCXRhZyA9IGFwcGVuZCh0YWcsICJmaXhlZDMyIikKLQljYXNlIHByZWYuU2ZpeGVkNjRLaW5kLCBwcmVmLkZpeGVkNjRLaW5kLCBwcmVmLkRvdWJsZUtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuU2ZpeGVkNjRLaW5kLCBwcm90b3JlZmxlY3QuRml4ZWQ2NEtpbmQsIHByb3RvcmVmbGVjdC5Eb3VibGVLaW5kOgogCQl0YWcgPSBhcHBlbmQodGFnLCAiZml4ZWQ2NCIpCi0JY2FzZSBwcmVmLlN0cmluZ0tpbmQsIHByZWYuQnl0ZXNLaW5kLCBwcmVmLk1lc3NhZ2VLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LlN0cmluZ0tpbmQsIHByb3RvcmVmbGVjdC5CeXRlc0tpbmQsIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZDoKIAkJdGFnID0gYXBwZW5kKHRhZywgImJ5dGVzIikKLQljYXNlIHByZWYuR3JvdXBLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKIAkJdGFnID0gYXBwZW5kKHRhZywgImdyb3VwIikKIAl9CiAJdGFnID0gYXBwZW5kKHRhZywgc3RyY29udi5JdG9hKGludChmZC5OdW1iZXIoKSkpKQogCXN3aXRjaCBmZC5DYXJkaW5hbGl0eSgpIHsKLQljYXNlIHByZWYuT3B0aW9uYWw6CisJY2FzZSBwcm90b3JlZmxlY3QuT3B0aW9uYWw6CiAJCXRhZyA9IGFwcGVuZCh0YWcsICJvcHQiKQotCWNhc2UgcHJlZi5SZXF1aXJlZDoKKwljYXNlIHByb3RvcmVmbGVjdC5SZXF1aXJlZDoKIAkJdGFnID0gYXBwZW5kKHRhZywgInJlcSIpCi0JY2FzZSBwcmVmLlJlcGVhdGVkOgorCWNhc2UgcHJvdG9yZWZsZWN0LlJlcGVhdGVkOgogCQl0YWcgPSBhcHBlbmQodGFnLCAicmVwIikKIAl9CiAJaWYgZmQuSXNQYWNrZWQoKSB7CiAJCXRhZyA9IGFwcGVuZCh0YWcsICJwYWNrZWQiKQogCX0KIAluYW1lIDo9IHN0cmluZyhmZC5OYW1lKCkpCi0JaWYgZmQuS2luZCgpID09IHByZWYuR3JvdXBLaW5kIHsKKwlpZiBmZC5LaW5kKCkgPT0gcHJvdG9yZWZsZWN0Lkdyb3VwS2luZCB7CiAJCS8vIFRoZSBuYW1lIG9mIHRoZSBGaWVsZERlc2NyaXB0b3IgZm9yIGEgZ3JvdXAgZmllbGQgaXMKIAkJLy8gbG93ZXJjYXNlZC4gVG8gZmluZCB0aGUgb3JpZ2luYWwgY2FwaXRhbGl6YXRpb24sIHdlCiAJCS8vIGxvb2sgaW4gdGhlIGZpZWxkJ3MgTWVzc2FnZVR5cGUuCkBAIC0xODksMTAgKzE4OSwxMCBAQAogCS8vIFRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB0YWcgZXh0ZW5zaW9uIGZpZWxkcyBhcyBwcm90bzMsCiAJLy8gZXZlbiB3aGVuIHRoZSBmaWVsZCBpcyBkZWZpbmVkIGluIGEgcHJvdG8zIGZpbGUuIE1hdGNoIHRoYXQgYmVoYXZpb3IKIAkvLyBmb3IgY29uc2lzdGVuY3kuCi0JaWYgZmQuU3ludGF4KCkgPT0gcHJlZi5Qcm90bzMgJiYgIWZkLklzRXh0ZW5zaW9uKCkgeworCWlmIGZkLlN5bnRheCgpID09IHByb3RvcmVmbGVjdC5Qcm90bzMgJiYgIWZkLklzRXh0ZW5zaW9uKCkgewogCQl0YWcgPSBhcHBlbmQodGFnLCAicHJvdG8zIikKIAl9Ci0JaWYgZmQuS2luZCgpID09IHByZWYuRW51bUtpbmQgJiYgZW51bU5hbWUgIT0gIiIgeworCWlmIGZkLktpbmQoKSA9PSBwcm90b3JlZmxlY3QuRW51bUtpbmQgJiYgZW51bU5hbWUgIT0gIiIgewogCQl0YWcgPSBhcHBlbmQodGFnLCAiZW51bT0iK2VudW1OYW1lKQogCX0KIAlpZiBmZC5Db250YWluaW5nT25lb2YoKSAhPSBuaWwgewpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL3RleHQvZGVjb2RlLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL3RleHQvZGVjb2RlLmdvCmluZGV4IGViMTBlYTEuLjg3ODUzZTcgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGluZy90ZXh0L2RlY29kZS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvdGV4dC9kZWNvZGUuZ28KQEAgLTgsNyArOCw2IEBACiAJImJ5dGVzIgogCSJmbXQiCiAJImlvIgotCSJyZWdleHAiCiAJInN0cmNvbnYiCiAJInVuaWNvZGUvdXRmOCIKIApAQCAtMzgxLDcgKzM4MCw3IEBACiAJY2FzZSAnWyc6CiAJCXJldHVybiBMaXN0T3BlbiwgJ10nCiAJfQotCXBhbmljKGZtdC5TcHJpbnRmKCJEZWNvZGVyOiBvcGVuU3RhY2sgY29udGFpbnMgaW52YWxpZCBieXRlICVzIiwgc3RyaW5nKG9wZW5DaCkpKQorCXBhbmljKGZtdC5TcHJpbnRmKCJEZWNvZGVyOiBvcGVuU3RhY2sgY29udGFpbnMgaW52YWxpZCBieXRlICVjIiwgb3BlbkNoKSkKIH0KIAogZnVuYyAoZCAqRGVjb2RlcikgcHVzaE9wZW5TdGFjayhjaCBieXRlKSB7CkBAIC00MTMsMTUgKzQxMiwxNiBAQAogCS8vIEZpZWxkIG51bWJlci4gSWRlbnRpZnkgaWYgaW5wdXQgaXMgYSB2YWxpZCBudW1iZXIgdGhhdCBpcyBub3QgbmVnYXRpdmUKIAkvLyBhbmQgaXMgZGVjaW1hbCBpbnRlZ2VyIHdpdGhpbiAzMi1iaXQgcmFuZ2UuCiAJaWYgbnVtIDo9IHBhcnNlTnVtYmVyKGQuaW4pOyBudW0uc2l6ZSA+IDAgeworCQlzdHIgOj0gbnVtLnN0cmluZyhkLmluKQogCQlpZiAhbnVtLm5lZyAmJiBudW0ua2luZCA9PSBudW1EZWMgewotCQkJaWYgXywgZXJyIDo9IHN0cmNvbnYuUGFyc2VJbnQoc3RyaW5nKGQuaW5bOm51bS5zaXplXSksIDEwLCAzMik7IGVyciA9PSBuaWwgeworCQkJaWYgXywgZXJyIDo9IHN0cmNvbnYuUGFyc2VJbnQoc3RyLCAxMCwgMzIpOyBlcnIgPT0gbmlsIHsKIAkJCQlyZXR1cm4gZC5jb25zdW1lVG9rZW4oTmFtZSwgbnVtLnNpemUsIHVpbnQ4KEZpZWxkTnVtYmVyKSksIG5pbAogCQkJfQogCQl9Ci0JCXJldHVybiBUb2tlbnt9LCBkLm5ld1N5bnRheEVycm9yKCJpbnZhbGlkIGZpZWxkIG51bWJlcjogJXMiLCBkLmluWzpudW0uc2l6ZV0pCisJCXJldHVybiBUb2tlbnt9LCBkLm5ld1N5bnRheEVycm9yKCJpbnZhbGlkIGZpZWxkIG51bWJlcjogJXMiLCBzdHIpCiAJfQogCi0JcmV0dXJuIFRva2Vue30sIGQubmV3U3ludGF4RXJyb3IoImludmFsaWQgZmllbGQgbmFtZTogJXMiLCBlcnJSZWdleHAuRmluZChkLmluKSkKKwlyZXR1cm4gVG9rZW57fSwgZC5uZXdTeW50YXhFcnJvcigiaW52YWxpZCBmaWVsZCBuYW1lOiAlcyIsIGVycklkKGQuaW4pKQogfQogCiAvLyBwYXJzZVR5cGVOYW1lIHBhcnNlcyBBbnkgdHlwZSBVUkwgb3IgZXh0ZW5zaW9uIGZpZWxkIG5hbWUuIFRoZSBuYW1lIGlzCkBAIC01NzEsNyArNTcxLDcgQEAKIAkJcmV0dXJuIHRvaywgbmlsCiAJfQogCi0JcmV0dXJuIFRva2Vue30sIGQubmV3U3ludGF4RXJyb3IoImludmFsaWQgc2NhbGFyIHZhbHVlOiAlcyIsIGVyclJlZ2V4cC5GaW5kKGQuaW4pKQorCXJldHVybiBUb2tlbnt9LCBkLm5ld1N5bnRheEVycm9yKCJpbnZhbGlkIHNjYWxhciB2YWx1ZTogJXMiLCBlcnJJZChkLmluKSkKIH0KIAogLy8gcGFyc2VMaXRlcmFsVmFsdWUgcGFyc2VzIGEgbGl0ZXJhbCB2YWx1ZS4gQSBsaXRlcmFsIHZhbHVlIGlzIHVzZWQgZm9yCkBAIC02NTMsOCArNjUzLDI5IEBACiAJcmV0dXJuIGIKIH0KIAotLy8gQW55IHNlcXVlbmNlIHRoYXQgbG9va3MgbGlrZSBhIG5vbi1kZWxpbWl0ZXIgKGZvciBlcnJvciByZXBvcnRpbmcpLgotdmFyIGVyclJlZ2V4cCA9IHJlZ2V4cC5NdXN0Q29tcGlsZShgXihbLSsuX2EtekEtWjAtOVwvXSt8LilgKQorLy8gZXJySWQgZXh0cmFjdHMgYSBieXRlIHNlcXVlbmNlIHRoYXQgbG9va3MgbGlrZSBhbiBpbnZhbGlkIElECisvLyAoZm9yIHRoZSBwdXJwb3NlcyBvZiBlcnJvciByZXBvcnRpbmcpLgorZnVuYyBlcnJJZChzZXEgW11ieXRlKSBbXWJ5dGUgeworCWNvbnN0IG1heExlbiA9IDMyCisJZm9yIGkgOj0gMDsgaSA8IGxlbihzZXEpOyB7CisJCWlmIGkgPiBtYXhMZW4geworCQkJcmV0dXJuIGFwcGVuZChzZXFbOmk6aV0sICLigKYiLi4uKQorCQl9CisJCXIsIHNpemUgOj0gdXRmOC5EZWNvZGVSdW5lKHNlcVtpOl0pCisJCWlmIHIgPiB1dGY4LlJ1bmVTZWxmIHx8IChyICE9ICcvJyAmJiBpc0RlbGltKGJ5dGUocikpKSB7CisJCQlpZiBpID09IDAgeworCQkJCS8vIEVpdGhlciB0aGUgZmlyc3QgYnl0ZSBpcyBpbnZhbGlkIFVURi04IG9yIGEKKwkJCQkvLyBkZWxpbWl0ZXIsIG9yIHRoZSBmaXJzdCBydW5lIGlzIG5vbi1BU0NJSS4KKwkJCQkvLyBSZXR1cm4gaXQgYXMtaXMuCisJCQkJaSA9IHNpemUKKwkJCX0KKwkJCXJldHVybiBzZXFbOmk6aV0KKwkJfQorCQlpICs9IHNpemUKKwl9CisJLy8gTm8gZGVsaW1pdGVyIGZvdW5kLgorCXJldHVybiBzZXEKK30KIAogLy8gaXNEZWxpbSByZXR1cm5zIHRydWUgaWYgZ2l2ZW4gYnl0ZSBpcyBhIGRlbGltaXRlciBjaGFyYWN0ZXIuCiBmdW5jIGlzRGVsaW0oYyBieXRlKSBib29sIHsKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGluZy90ZXh0L2RlY29kZV9udW1iZXIuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvdGV4dC9kZWNvZGVfbnVtYmVyLmdvCmluZGV4IGYyZDkwYjcuLjQ1YzgxZjAgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGluZy90ZXh0L2RlY29kZV9udW1iZXIuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL3RleHQvZGVjb2RlX251bWJlci5nbwpAQCAtMTUsMTcgKzE1LDEyIEBACiAJaWYgbnVtLm5lZyB7CiAJCW51bUF0dHJzIHw9IGlzTmVnYXRpdmUKIAl9Ci0Jc3RyU2l6ZSA6PSBudW0uc2l6ZQotCWxhc3QgOj0gbnVtLnNpemUgLSAxCi0JaWYgbnVtLmtpbmQgPT0gbnVtRmxvYXQgJiYgKGQuaW5bbGFzdF0gPT0gJ2YnIHx8IGQuaW5bbGFzdF0gPT0gJ0YnKSB7Ci0JCXN0clNpemUgPSBsYXN0Ci0JfQogCXRvayA6PSBUb2tlbnsKIAkJa2luZDogICAgIFNjYWxhciwKIAkJYXR0cnM6ICAgIG51bWJlclZhbHVlLAogCQlwb3M6ICAgICAgbGVuKGQub3JpZykgLSBsZW4oZC5pbiksCiAJCXJhdzogICAgICBkLmluWzpudW0uc2l6ZV0sCi0JCXN0cjogICAgICBzdHJpbmcoZC5pbls6c3RyU2l6ZV0pLAorCQlzdHI6ICAgICAgbnVtLnN0cmluZyhkLmluKSwKIAkJbnVtQXR0cnM6IG51bUF0dHJzLAogCX0KIAlkLmNvbnN1bWUobnVtLnNpemUpCkBAIC00NiwxMiArNDEsMzUgQEAKIAlraW5kIHVpbnQ4CiAJbmVnICBib29sCiAJc2l6ZSBpbnQKKwkvLyBpZiBuZWcsIHRoaXMgaXMgdGhlIGxlbmd0aCBvZiB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cyBiZXR3ZWVuCisJLy8gdGhlIG1pbnVzIHNpZ24gYW5kIHRoZSByZXN0IGZvIHRoZSBudW1iZXIgbGl0ZXJhbAorCXNlcCBpbnQKK30KKworZnVuYyAobnVtIG51bWJlcikgc3RyaW5nKGRhdGEgW11ieXRlKSBzdHJpbmcgeworCXN0clNpemUgOj0gbnVtLnNpemUKKwlsYXN0IDo9IG51bS5zaXplIC0gMQorCWlmIG51bS5raW5kID09IG51bUZsb2F0ICYmIChkYXRhW2xhc3RdID09ICdmJyB8fCBkYXRhW2xhc3RdID09ICdGJykgeworCQlzdHJTaXplID0gbGFzdAorCX0KKwlpZiBudW0ubmVnICYmIG51bS5zZXAgPiAwIHsKKwkJLy8gc3RyaXAgd2hpdGVzcGFjZS9jb21tZW50cyBiZXR3ZWVuIG5lZ2F0aXZlIHNpZ24gYW5kIHRoZSByZXN0CisJCXN0ckxlbiA6PSBzdHJTaXplIC0gbnVtLnNlcAorCQlzdHIgOj0gbWFrZShbXWJ5dGUsIHN0ckxlbikKKwkJc3RyWzBdID0gZGF0YVswXQorCQljb3B5KHN0clsxOl0sIGRhdGFbbnVtLnNlcCsxOnN0clNpemVdKQorCQlyZXR1cm4gc3RyaW5nKHN0cikKKwl9CisJcmV0dXJuIHN0cmluZyhkYXRhWzpzdHJTaXplXSkKKwogfQogCiAvLyBwYXJzZU51bWJlciBjb25zdHJ1Y3RzIGEgbnVtYmVyIG9iamVjdCBmcm9tIGdpdmVuIGlucHV0LiBJdCBhbGxvd3MgZm9yIHRoZQogLy8gZm9sbG93aW5nIHBhdHRlcm5zOgotLy8gICBpbnRlZ2VyOiBeLT8oWzEtOV1bMC05XSp8MFt4WF1bMC05YS1mQS1GXSt8MFswLTddKikKLS8vICAgZmxvYXQ6IF4tPygoMHxbMS05XVswLTldKik/KFsuXVswLTldKik/KFtlRV1bKy1dP1swLTldKyk/W2ZGXT8pCisvLworLy8JaW50ZWdlcjogXi0/KFsxLTldWzAtOV0qfDBbeFhdWzAtOWEtZkEtRl0rfDBbMC03XSopCisvLwlmbG9hdDogXi0/KCgwfFsxLTldWzAtOV0qKT8oWy5dWzAtOV0qKT8oW2VFXVsrLV0/WzAtOV0rKT9bZkZdPykKKy8vCiAvLyBJdCBhbHNvIHJldHVybnMgdGhlIG51bWJlciBvZiBwYXJzZWQgYnl0ZXMgZm9yIHRoZSBnaXZlbiBudW1iZXIsIDAgaWYgaXQgaXMKIC8vIG5vdCBhIG51bWJlci4KIGZ1bmMgcGFyc2VOdW1iZXIoaW5wdXQgW11ieXRlKSBudW1iZXIgewpAQCAtNjUsMTkgKzgzLDIyIEBACiAJfQogCiAJLy8gT3B0aW9uYWwgLQorCXZhciBzZXAgaW50CiAJaWYgc1swXSA9PSAnLScgewogCQluZWcgPSB0cnVlCiAJCXMgPSBzWzE6XQogCQlzaXplKysKKwkJLy8gQ29uc3VtZSBhbnkgd2hpdGVzcGFjZSBvciBjb21tZW50cyBiZXR3ZWVuIHRoZQorCQkvLyBuZWdhdGl2ZSBzaWduIGFuZCB0aGUgcmVzdCBvZiB0aGUgbnVtYmVyCisJCWxlbkJlZm9yZSA6PSBsZW4ocykKKwkJcyA9IGNvbnN1bWUocywgMCkKKwkJc2VwID0gbGVuQmVmb3JlIC0gbGVuKHMpCisJCXNpemUgKz0gc2VwCiAJCWlmIGxlbihzKSA9PSAwIHsKIAkJCXJldHVybiBudW1iZXJ7fQogCQl9CiAJfQogCi0JLy8gQysrIGFsbG93cyBmb3Igd2hpdGVzcGFjZSBhbmQgY29tbWVudHMgaW4gYmV0d2VlbiB0aGUgbmVnYXRpdmUgc2lnbiBhbmQKLQkvLyB0aGUgcmVzdCBvZiB0aGUgbnVtYmVyLiBUaGlzIGxvZ2ljIGN1cnJlbnRseSBkb2VzIG5vdCBidXQgaXMgY29uc2lzdGVudAotCS8vIHdpdGggdjEuCi0KIAlzd2l0Y2ggewogCWNhc2Ugc1swXSA9PSAnMCc6CiAJCWlmIGxlbihzKSA+IDEgewpAQCAtMTE0LDcgKzEzNSw3IEBACiAJCQkJaWYgbGVuKHMpID4gMCAmJiAhaXNEZWxpbShzWzBdKSB7CiAJCQkJCXJldHVybiBudW1iZXJ7fQogCQkJCX0KLQkJCQlyZXR1cm4gbnVtYmVye2tpbmQ6IGtpbmQsIG5lZzogbmVnLCBzaXplOiBzaXplfQorCQkJCXJldHVybiBudW1iZXJ7a2luZDoga2luZCwgbmVnOiBuZWcsIHNpemU6IHNpemUsIHNlcDogc2VwfQogCQkJfQogCQl9CiAJCXMgPSBzWzE6XQpAQCAtMTg2LDUgKzIwNyw1IEBACiAJCXJldHVybiBudW1iZXJ7fQogCX0KIAotCXJldHVybiBudW1iZXJ7a2luZDoga2luZCwgbmVnOiBuZWcsIHNpemU6IHNpemV9CisJcmV0dXJuIG51bWJlcntraW5kOiBraW5kLCBuZWc6IG5lZywgc2l6ZTogc2l6ZSwgc2VwOiBzZXB9CiB9CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvdGV4dC9kb2MuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvdGV4dC9kb2MuZ28KaW5kZXggMGNlOGQ2Zi4uN2FlNmMyYSAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL3RleHQvZG9jLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGluZy90ZXh0L2RvYy5nbwpAQCAtMjQsNiArMjQsNiBAQAogLy8gdGhlIEdvIGltcGxlbWVudGF0aW9uIHNob3VsZCBhcyB3ZWxsLgogLy8KIC8vIFRoZSB0ZXh0IGZvcm1hdCBpcyBhbG1vc3QgYSBzdXBlcnNldCBvZiBKU09OIGV4Y2VwdDoKLS8vCSogbWVzc2FnZSBrZXlzIGFyZSBub3QgcXVvdGVkIHN0cmluZ3MsIGJ1dCBpZGVudGlmaWVycwotLy8JKiB0aGUgdG9wLWxldmVsIHZhbHVlIG11c3QgYmUgYSBtZXNzYWdlIHdpdGhvdXQgdGhlIGRlbGltaXRlcnMKKy8vICAgLSBtZXNzYWdlIGtleXMgYXJlIG5vdCBxdW90ZWQgc3RyaW5ncywgYnV0IGlkZW50aWZpZXJzCisvLyAgIC0gdGhlIHRvcC1sZXZlbCB2YWx1ZSBtdXN0IGJlIGEgbWVzc2FnZSB3aXRob3V0IHRoZSBkZWxpbWl0ZXJzCiBwYWNrYWdlIHRleHQKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGluZy90ZXh0L2VuY29kZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGluZy90ZXh0L2VuY29kZS5nbwppbmRleCBkYTI4OWNjLi5jZjdhZWQ3IDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvdGV4dC9lbmNvZGUuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VuY29kaW5nL3RleHQvZW5jb2RlLmdvCkBAIC01Myw4ICs1MywxMCBAQAogLy8gSWYgb3V0cHV0QVNDSUkgaXMgdHJ1ZSwgc3RyaW5ncyB3aWxsIGJlIHNlcmlhbGl6ZWQgaW4gc3VjaCBhIHdheSB0aGF0CiAvLyBtdWx0aS1ieXRlIFVURi04IHNlcXVlbmNlcyBhcmUgZXNjYXBlZC4gVGhpcyBwcm9wZXJ0eSBlbnN1cmVzIHRoYXQgdGhlCiAvLyBvdmVyYWxsIG91dHB1dCBpcyBBU0NJSSAoYXMgb3Bwb3NlZCB0byBVVEYtOCkuCi1mdW5jIE5ld0VuY29kZXIoaW5kZW50IHN0cmluZywgZGVsaW1zIFsyXWJ5dGUsIG91dHB1dEFTQ0lJIGJvb2wpICgqRW5jb2RlciwgZXJyb3IpIHsKLQllIDo9ICZFbmNvZGVye30KK2Z1bmMgTmV3RW5jb2RlcihidWYgW11ieXRlLCBpbmRlbnQgc3RyaW5nLCBkZWxpbXMgWzJdYnl0ZSwgb3V0cHV0QVNDSUkgYm9vbCkgKCpFbmNvZGVyLCBlcnJvcikgeworCWUgOj0gJkVuY29kZXJ7CisJCWVuY29kZXJTdGF0ZTogZW5jb2RlclN0YXRle291dDogYnVmfSwKKwl9CiAJaWYgbGVuKGluZGVudCkgPiAwIHsKIAkJaWYgc3RyaW5ncy5UcmltKGluZGVudCwgIiBcdCIpICE9ICIiIHsKIAkJCXJldHVybiBuaWwsIGVycm9ycy5OZXcoImluZGVudCBtYXkgb25seSBiZSBjb21wb3NlZCBvZiBzcGFjZSBhbmQgdGFiIGNoYXJhY3RlcnMiKQpAQCAtMTk1LDEzICsxOTcsMTMgQEAKIC8vIFdyaXRlSW50IHdyaXRlcyBvdXQgdGhlIGdpdmVuIHNpZ25lZCBpbnRlZ2VyIHZhbHVlLgogZnVuYyAoZSAqRW5jb2RlcikgV3JpdGVJbnQobiBpbnQ2NCkgewogCWUucHJlcGFyZU5leHQoc2NhbGFyKQotCWUub3V0ID0gYXBwZW5kKGUub3V0LCBzdHJjb252LkZvcm1hdEludChuLCAxMCkuLi4pCisJZS5vdXQgPSBzdHJjb252LkFwcGVuZEludChlLm91dCwgbiwgMTApCiB9CiAKIC8vIFdyaXRlVWludCB3cml0ZXMgb3V0IHRoZSBnaXZlbiB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlLgogZnVuYyAoZSAqRW5jb2RlcikgV3JpdGVVaW50KG4gdWludDY0KSB7CiAJZS5wcmVwYXJlTmV4dChzY2FsYXIpCi0JZS5vdXQgPSBhcHBlbmQoZS5vdXQsIHN0cmNvbnYuRm9ybWF0VWludChuLCAxMCkuLi4pCisJZS5vdXQgPSBzdHJjb252LkFwcGVuZFVpbnQoZS5vdXQsIG4sIDEwKQogfQogCiAvLyBXcml0ZUxpdGVyYWwgd3JpdGVzIG91dCB0aGUgZ2l2ZW4gc3RyaW5nIGFzIGEgbGl0ZXJhbCB2YWx1ZSB3aXRob3V0IHF1b3Rlcy4KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lcnJvcnMvaXNfZ28xMTIuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZXJyb3JzL2lzX2dvMTEyLmdvCmluZGV4IGY5MGU5MDkuLmZiY2QzNDkgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lcnJvcnMvaXNfZ28xMTIuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2Vycm9ycy9pc19nbzExMi5nbwpAQCAtMiw2ICsyLDcgQEAKIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlCiAvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAKKy8vZ286YnVpbGQgIWdvMS4xMwogLy8gK2J1aWxkICFnbzEuMTMKIAogcGFja2FnZSBlcnJvcnMKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lcnJvcnMvaXNfZ28xMTMuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZXJyb3JzL2lzX2dvMTEzLmdvCmluZGV4IGRjMDVmNDEuLjVlNzJmMWMgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lcnJvcnMvaXNfZ28xMTMuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2Vycm9ycy9pc19nbzExMy5nbwpAQCAtMiw2ICsyLDcgQEAKIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlCiAvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAKKy8vZ286YnVpbGQgZ28xLjEzCiAvLyArYnVpbGQgZ28xLjEzCiAKIHBhY2thZ2UgZXJyb3JzCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MvYnVpbGQuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MvYnVpbGQuZ28KaW5kZXggYjI5M2I2OS4uN2NhYzFjMSAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjL2J1aWxkLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy9idWlsZC5nbwpAQCAtMTIsOCArMTIsNyBAQAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3dpcmUiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKLQlwcmVnICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVnaXN0cnkiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeSIKICkKIAogLy8gQnVpbGRlciBjb25zdHJ1Y3QgYSBwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IgZnJvbSB0aGUgcmF3IGRlc2NyaXB0b3IuCkBAIC0zOCw3ICszNyw3IEBACiAJLy8gVHlwZVJlc29sdmVyIHJlc29sdmVzIGV4dGVuc2lvbiBmaWVsZCB0eXBlcyBmb3IgZGVzY3JpcHRvciBvcHRpb25zLgogCS8vIElmIG5pbCwgaXQgdXNlcyBwcm90b3JlZ2lzdHJ5Lkdsb2JhbFR5cGVzLgogCVR5cGVSZXNvbHZlciBpbnRlcmZhY2UgewotCQlwcmVnLkV4dGVuc2lvblR5cGVSZXNvbHZlcgorCQlwcm90b3JlZ2lzdHJ5LkV4dGVuc2lvblR5cGVSZXNvbHZlcgogCX0KIAogCS8vIEZpbGVSZWdpc3RyeSBpcyB1c2UgdG8gbG9va3VwIGZpbGUsIGVudW0sIGFuZCBtZXNzYWdlIGRlcGVuZGVuY2llcy4KQEAgLTQ2LDggKzQ1LDggQEAKIAkvLyBJZiBuaWwsIGl0IHVzZXMgcHJvdG9yZWdpc3RyeS5HbG9iYWxGaWxlcy4KIAlGaWxlUmVnaXN0cnkgaW50ZXJmYWNlIHsKIAkJRmluZEZpbGVCeVBhdGgoc3RyaW5nKSAocHJvdG9yZWZsZWN0LkZpbGVEZXNjcmlwdG9yLCBlcnJvcikKLQkJRmluZERlc2NyaXB0b3JCeU5hbWUocHJlZi5GdWxsTmFtZSkgKHByZWYuRGVzY3JpcHRvciwgZXJyb3IpCi0JCVJlZ2lzdGVyRmlsZShwcmVmLkZpbGVEZXNjcmlwdG9yKSBlcnJvcgorCQlGaW5kRGVzY3JpcHRvckJ5TmFtZShwcm90b3JlZmxlY3QuRnVsbE5hbWUpIChwcm90b3JlZmxlY3QuRGVzY3JpcHRvciwgZXJyb3IpCisJCVJlZ2lzdGVyRmlsZShwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IpIGVycm9yCiAJfQogfQogCkBAIC01NSw4ICs1NCw4IEBACiAvLyBJZiBzbywgaXQgcGVybWl0cyBsb29raW5nIHVwIGFuIGVudW0gb3IgbWVzc2FnZSBkZXBlbmRlbmN5IGJhc2VkIG9uIHRoZQogLy8gc3ViLWxpc3QgYW5kIGVsZW1lbnQgaW5kZXggaW50byBmaWxldHlwZS5CdWlsZGVyLkRlcGVuZGVuY3lJbmRleGVzLgogdHlwZSByZXNvbHZlckJ5SW5kZXggaW50ZXJmYWNlIHsKLQlGaW5kRW51bUJ5SW5kZXgoaW50MzIsIGludDMyLCBbXUVudW0sIFtdTWVzc2FnZSkgcHJlZi5FbnVtRGVzY3JpcHRvcgotCUZpbmRNZXNzYWdlQnlJbmRleChpbnQzMiwgaW50MzIsIFtdRW51bSwgW11NZXNzYWdlKSBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yCisJRmluZEVudW1CeUluZGV4KGludDMyLCBpbnQzMiwgW11FbnVtLCBbXU1lc3NhZ2UpIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvcgorCUZpbmRNZXNzYWdlQnlJbmRleChpbnQzMiwgaW50MzIsIFtdRW51bSwgW11NZXNzYWdlKSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IKIH0KIAogLy8gSW5kZXhlcyBvZiBlYWNoIHN1Yi1saXN0IGluIGZpbGV0eXBlLkJ1aWxkZXIuRGVwZW5kZW5jeUluZGV4ZXMuCkBAIC03MCw3ICs2OSw3IEBACiAKIC8vIE91dCBpcyB0aGUgb3V0cHV0IG9mIHRoZSBCdWlsZGVyLgogdHlwZSBPdXQgc3RydWN0IHsKLQlGaWxlIHByZWYuRmlsZURlc2NyaXB0b3IKKwlGaWxlIHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvcgogCiAJLy8gRW51bXMgaXMgYWxsIGVudW0gZGVzY3JpcHRvcnMgaW4gImZsYXR0ZW5lZCBvcmRlcmluZyIuCiAJRW51bXMgW11FbnVtCkBAIC05NywxMCArOTYsMTAgQEAKIAogCS8vIEluaXRpYWxpemUgcmVzb2x2ZXJzIGFuZCByZWdpc3RyaWVzIGlmIHVucG9wdWxhdGVkLgogCWlmIGRiLlR5cGVSZXNvbHZlciA9PSBuaWwgewotCQlkYi5UeXBlUmVzb2x2ZXIgPSBwcmVnLkdsb2JhbFR5cGVzCisJCWRiLlR5cGVSZXNvbHZlciA9IHByb3RvcmVnaXN0cnkuR2xvYmFsVHlwZXMKIAl9CiAJaWYgZGIuRmlsZVJlZ2lzdHJ5ID09IG5pbCB7Ci0JCWRiLkZpbGVSZWdpc3RyeSA9IHByZWcuR2xvYmFsRmlsZXMKKwkJZGIuRmlsZVJlZ2lzdHJ5ID0gcHJvdG9yZWdpc3RyeS5HbG9iYWxGaWxlcwogCX0KIAogCWZkIDo9IG5ld1Jhd0ZpbGUoZGIpCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MvZGVzYy5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy9kZXNjLmdvCmluZGV4IDk4YWIxNDIuLjg4MjZiY2YgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy9kZXNjLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy9kZXNjLmdvCkBAIC0xNywxNSArMTcsMzAgQEAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZ2VuaWQiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL3ByYWdtYSIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvc3RycyIKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeSIKICkKIAorLy8gRWRpdGlvbiBpcyBhbiBFbnVtIGZvciBwcm90bzIuRWRpdGlvbgordHlwZSBFZGl0aW9uIGludDMyCisKKy8vIFRoZXNlIHZhbHVlcyBhbGlnbiB3aXRoIHRoZSB2YWx1ZSBvZiBFbnVtIGluIGRlc2NyaXB0b3IucHJvdG8gd2hpY2ggYWxsb3dzCisvLyBkaXJlY3QgY29udmVyc2lvbiBiZXR3ZWVuIHRoZSBwcm90byBlbnVtIGFuZCB0aGlzIGVudW0uCitjb25zdCAoCisJRWRpdGlvblVua25vd24gICAgIEVkaXRpb24gPSAwCisJRWRpdGlvblByb3RvMiAgICAgIEVkaXRpb24gPSA5OTgKKwlFZGl0aW9uUHJvdG8zICAgICAgRWRpdGlvbiA9IDk5OQorCUVkaXRpb24yMDIzICAgICAgICBFZGl0aW9uID0gMTAwMAorCUVkaXRpb25VbnN1cHBvcnRlZCBFZGl0aW9uID0gMTAwMDAwCispCisKIC8vIFRoZSB0eXBlcyBpbiB0aGlzIGZpbGUgbWF5IGhhdmUgYSBzdWZmaXg6CiAvLwnigKIgTDA6IENvbnRhaW5zIGZpZWxkcyBjb21tb24gdG8gYWxsIGRlc2NyaXB0b3JzIChleGNlcHQgRmlsZSkgYW5kCiAvLwltdXN0IGJlIGluaXRpYWxpemVkIHVwIGZyb250LgogLy8J4oCiIEwxOiBDb250YWlucyBmaWVsZHMgc3BlY2lmaWMgdG8gYSBkZXNjcmlwdG9yIGFuZAotLy8JbXVzdCBiZSBpbml0aWFsaXplZCB1cCBmcm9udC4KKy8vCW11c3QgYmUgaW5pdGlhbGl6ZWQgdXAgZnJvbnQuIElmIHRoZSBhc3NvY2lhdGVkIHByb3RvIHVzZXMgRWRpdGlvbnMsIHRoZQorLy8gIEVkaXRpb25zIGZlYXR1cmVzIG11c3QgYWx3YXlzIGJlIHJlc29sdmVkLiBJZiBub3QgZXhwbGljaXRseSBzZXQsIHRoZQorLy8gIGFwcHJvcHJpYXRlIGRlZmF1bHQgbXVzdCBiZSByZXNvbHZlZCBhbmQgc2V0LgogLy8J4oCiIEwyOiBDb250YWlucyBmaWVsZHMgdGhhdCBhcmUgbGF6aWx5IGluaXRpYWxpemVkIHdoZW4gY29uc3RydWN0aW5nCiAvLwlmcm9tIHRoZSByYXcgZmlsZSBkZXNjcmlwdG9yLiBXaGVuIGNvbnN0cnVjdGluZyBhcyBhIGxpdGVyYWwsIHRoZSBMMgogLy8JZmllbGRzIG11c3QgYmUgaW5pdGlhbGl6ZWQgdXAgZnJvbnQuCkBAIC00Myw0NiArNTgsNzYgQEAKIAkJTDIgICAqRmlsZUwyCiAJfQogCUZpbGVMMSBzdHJ1Y3QgewotCQlTeW50YXggIHByZWYuU3ludGF4CisJCVN5bnRheCAgcHJvdG9yZWZsZWN0LlN5bnRheAorCQlFZGl0aW9uIEVkaXRpb24gLy8gT25seSB1c2VkIGlmIFN5bnRheCA9PSBFZGl0aW9ucwogCQlQYXRoICAgIHN0cmluZwotCQlQYWNrYWdlIHByZWYuRnVsbE5hbWUKKwkJUGFja2FnZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUKIAogCQlFbnVtcyAgICAgIEVudW1zCiAJCU1lc3NhZ2VzICAgTWVzc2FnZXMKIAkJRXh0ZW5zaW9ucyBFeHRlbnNpb25zCiAJCVNlcnZpY2VzICAgU2VydmljZXMKKworCQlFZGl0aW9uRmVhdHVyZXMgRWRpdGlvbkZlYXR1cmVzCiAJfQogCUZpbGVMMiBzdHJ1Y3QgewotCQlPcHRpb25zICAgZnVuYygpIHByZWYuUHJvdG9NZXNzYWdlCisJCU9wdGlvbnMgICBmdW5jKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZQogCQlJbXBvcnRzICAgRmlsZUltcG9ydHMKIAkJTG9jYXRpb25zIFNvdXJjZUxvY2F0aW9ucwogCX0KKworCUVkaXRpb25GZWF0dXJlcyBzdHJ1Y3QgeworCQkvLyBJc0ZpZWxkUHJlc2VuY2UgaXMgdHJ1ZSBpZiBmaWVsZF9wcmVzZW5jZSBpcyBFWFBMSUNJVAorCQkvLyBodHRwczovL3Byb3RvYnVmLmRldi9lZGl0aW9ucy9mZWF0dXJlcy8jZmllbGRfcHJlc2VuY2UKKwkJSXNGaWVsZFByZXNlbmNlIGJvb2wKKwkJLy8gSXNGaWVsZFByZXNlbmNlIGlzIHRydWUgaWYgZmllbGRfcHJlc2VuY2UgaXMgTEVHQUNZX1JFUVVJUkVECisJCS8vIGh0dHBzOi8vcHJvdG9idWYuZGV2L2VkaXRpb25zL2ZlYXR1cmVzLyNmaWVsZF9wcmVzZW5jZQorCQlJc0xlZ2FjeVJlcXVpcmVkIGJvb2wKKwkJLy8gSXNPcGVuRW51bSBpcyB0cnVlIGlmIGVudW1fdHlwZSBpcyBPUEVOCisJCS8vIGh0dHBzOi8vcHJvdG9idWYuZGV2L2VkaXRpb25zL2ZlYXR1cmVzLyNlbnVtX3R5cGUKKwkJSXNPcGVuRW51bSBib29sCisJCS8vIElzUGFja2VkIGlzIHRydWUgaWYgcmVwZWF0ZWRfZmllbGRfZW5jb2RpbmcgaXMgUEFDS0VECisJCS8vIGh0dHBzOi8vcHJvdG9idWYuZGV2L2VkaXRpb25zL2ZlYXR1cmVzLyNyZXBlYXRlZF9maWVsZF9lbmNvZGluZworCQlJc1BhY2tlZCBib29sCisJCS8vIElzVVRGOFZhbGlkYXRlZCBpcyB0cnVlIGlmIHV0Zl92YWxpZGF0aW9uIGlzIFZFUklGWQorCQkvLyBodHRwczovL3Byb3RvYnVmLmRldi9lZGl0aW9ucy9mZWF0dXJlcy8jdXRmOF92YWxpZGF0aW9uCisJCUlzVVRGOFZhbGlkYXRlZCBib29sCisJCS8vIElzRGVsaW1pdGVkRW5jb2RlZCBpcyB0cnVlIGlmIG1lc3NhZ2VfZW5jb2RpbmcgaXMgREVMSU1JVEVECisJCS8vIGh0dHBzOi8vcHJvdG9idWYuZGV2L2VkaXRpb25zL2ZlYXR1cmVzLyNtZXNzYWdlX2VuY29kaW5nCisJCUlzRGVsaW1pdGVkRW5jb2RlZCBib29sCisJCS8vIElzSlNPTkNvbXBsaWFudCBpcyB0cnVlIGlmIGpzb25fZm9ybWF0IGlzIEFMTE9XCisJCS8vIGh0dHBzOi8vcHJvdG9idWYuZGV2L2VkaXRpb25zL2ZlYXR1cmVzLyNqc29uX2Zvcm1hdAorCQlJc0pTT05Db21wbGlhbnQgYm9vbAorCQkvLyBHZW5lcmF0ZUxlZ2FjeVVubWFyc2hhbEpTT04gZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGdlbmVyYXRlcyB0aGUKKwkJLy8gVW5tYXJzaGFsSlNPTihbXWJ5dGUpIGVycm9yIG1ldGhvZCBmb3IgZW51bXMuCisJCUdlbmVyYXRlTGVnYWN5VW5tYXJzaGFsSlNPTiBib29sCisJfQogKQogCi1mdW5jIChmZCAqRmlsZSkgUGFyZW50RmlsZSgpIHByZWYuRmlsZURlc2NyaXB0b3IgeyByZXR1cm4gZmQgfQotZnVuYyAoZmQgKkZpbGUpIFBhcmVudCgpIHByZWYuRGVzY3JpcHRvciAgICAgICAgIHsgcmV0dXJuIG5pbCB9Ci1mdW5jIChmZCAqRmlsZSkgSW5kZXgoKSBpbnQgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gMCB9Ci1mdW5jIChmZCAqRmlsZSkgU3ludGF4KCkgcHJlZi5TeW50YXggICAgICAgICAgICAgeyByZXR1cm4gZmQuTDEuU3ludGF4IH0KLWZ1bmMgKGZkICpGaWxlKSBOYW1lKCkgcHJlZi5OYW1lICAgICAgICAgICAgICAgICB7IHJldHVybiBmZC5MMS5QYWNrYWdlLk5hbWUoKSB9Ci1mdW5jIChmZCAqRmlsZSkgRnVsbE5hbWUoKSBwcmVmLkZ1bGxOYW1lICAgICAgICAgeyByZXR1cm4gZmQuTDEuUGFja2FnZSB9Ci1mdW5jIChmZCAqRmlsZSkgSXNQbGFjZWhvbGRlcigpIGJvb2wgICAgICAgICAgICAgeyByZXR1cm4gZmFsc2UgfQotZnVuYyAoZmQgKkZpbGUpIE9wdGlvbnMoKSBwcmVmLlByb3RvTWVzc2FnZSB7CitmdW5jIChmZCAqRmlsZSkgUGFyZW50RmlsZSgpIHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvciB7IHJldHVybiBmZCB9CitmdW5jIChmZCAqRmlsZSkgUGFyZW50KCkgcHJvdG9yZWZsZWN0LkRlc2NyaXB0b3IgICAgICAgICB7IHJldHVybiBuaWwgfQorZnVuYyAoZmQgKkZpbGUpIEluZGV4KCkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gMCB9CitmdW5jIChmZCAqRmlsZSkgU3ludGF4KCkgcHJvdG9yZWZsZWN0LlN5bnRheCAgICAgICAgICAgICB7IHJldHVybiBmZC5MMS5TeW50YXggfQorZnVuYyAoZmQgKkZpbGUpIE5hbWUoKSBwcm90b3JlZmxlY3QuTmFtZSAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmQuTDEuUGFja2FnZS5OYW1lKCkgfQorZnVuYyAoZmQgKkZpbGUpIEZ1bGxOYW1lKCkgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lICAgICAgICAgeyByZXR1cm4gZmQuTDEuUGFja2FnZSB9CitmdW5jIChmZCAqRmlsZSkgSXNQbGFjZWhvbGRlcigpIGJvb2wgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmYWxzZSB9CitmdW5jIChmZCAqRmlsZSkgT3B0aW9ucygpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgewogCWlmIGYgOj0gZmQubGF6eUluaXQoKS5PcHRpb25zOyBmICE9IG5pbCB7CiAJCXJldHVybiBmKCkKIAl9CiAJcmV0dXJuIGRlc2NvcHRzLkZpbGUKIH0KLWZ1bmMgKGZkICpGaWxlKSBQYXRoKCkgc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmZC5MMS5QYXRoIH0KLWZ1bmMgKGZkICpGaWxlKSBQYWNrYWdlKCkgcHJlZi5GdWxsTmFtZSAgICAgICAgICAgICAgICB7IHJldHVybiBmZC5MMS5QYWNrYWdlIH0KLWZ1bmMgKGZkICpGaWxlKSBJbXBvcnRzKCkgcHJlZi5GaWxlSW1wb3J0cyAgICAgICAgICAgICB7IHJldHVybiAmZmQubGF6eUluaXQoKS5JbXBvcnRzIH0KLWZ1bmMgKGZkICpGaWxlKSBFbnVtcygpIHByZWYuRW51bURlc2NyaXB0b3JzICAgICAgICAgICB7IHJldHVybiAmZmQuTDEuRW51bXMgfQotZnVuYyAoZmQgKkZpbGUpIE1lc3NhZ2VzKCkgcHJlZi5NZXNzYWdlRGVzY3JpcHRvcnMgICAgIHsgcmV0dXJuICZmZC5MMS5NZXNzYWdlcyB9Ci1mdW5jIChmZCAqRmlsZSkgRXh0ZW5zaW9ucygpIHByZWYuRXh0ZW5zaW9uRGVzY3JpcHRvcnMgeyByZXR1cm4gJmZkLkwxLkV4dGVuc2lvbnMgfQotZnVuYyAoZmQgKkZpbGUpIFNlcnZpY2VzKCkgcHJlZi5TZXJ2aWNlRGVzY3JpcHRvcnMgICAgIHsgcmV0dXJuICZmZC5MMS5TZXJ2aWNlcyB9Ci1mdW5jIChmZCAqRmlsZSkgU291cmNlTG9jYXRpb25zKCkgcHJlZi5Tb3VyY2VMb2NhdGlvbnMgeyByZXR1cm4gJmZkLmxhenlJbml0KCkuTG9jYXRpb25zIH0KLWZ1bmMgKGZkICpGaWxlKSBGb3JtYXQocyBmbXQuU3RhdGUsIHIgcnVuZSkgICAgICAgICAgICB7IGRlc2NmbXQuRm9ybWF0RGVzYyhzLCByLCBmZCkgfQotZnVuYyAoZmQgKkZpbGUpIFByb3RvVHlwZShwcmVmLkZpbGVEZXNjcmlwdG9yKSAgICAgICAgIHt9Ci1mdW5jIChmZCAqRmlsZSkgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpICAge30KK2Z1bmMgKGZkICpGaWxlKSBQYXRoKCkgc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZkLkwxLlBhdGggfQorZnVuYyAoZmQgKkZpbGUpIFBhY2thZ2UoKSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgICAgICAgICAgICAgICAgeyByZXR1cm4gZmQuTDEuUGFja2FnZSB9CitmdW5jIChmZCAqRmlsZSkgSW1wb3J0cygpIHByb3RvcmVmbGVjdC5GaWxlSW1wb3J0cyAgICAgICAgICAgICB7IHJldHVybiAmZmQubGF6eUluaXQoKS5JbXBvcnRzIH0KK2Z1bmMgKGZkICpGaWxlKSBFbnVtcygpIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvcnMgICAgICAgICAgIHsgcmV0dXJuICZmZC5MMS5FbnVtcyB9CitmdW5jIChmZCAqRmlsZSkgTWVzc2FnZXMoKSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3JzICAgICB7IHJldHVybiAmZmQuTDEuTWVzc2FnZXMgfQorZnVuYyAoZmQgKkZpbGUpIEV4dGVuc2lvbnMoKSBwcm90b3JlZmxlY3QuRXh0ZW5zaW9uRGVzY3JpcHRvcnMgeyByZXR1cm4gJmZkLkwxLkV4dGVuc2lvbnMgfQorZnVuYyAoZmQgKkZpbGUpIFNlcnZpY2VzKCkgcHJvdG9yZWZsZWN0LlNlcnZpY2VEZXNjcmlwdG9ycyAgICAgeyByZXR1cm4gJmZkLkwxLlNlcnZpY2VzIH0KK2Z1bmMgKGZkICpGaWxlKSBTb3VyY2VMb2NhdGlvbnMoKSBwcm90b3JlZmxlY3QuU291cmNlTG9jYXRpb25zIHsgcmV0dXJuICZmZC5sYXp5SW5pdCgpLkxvY2F0aW9ucyB9CitmdW5jIChmZCAqRmlsZSkgRm9ybWF0KHMgZm10LlN0YXRlLCByIHJ1bmUpICAgICAgICAgICAgICAgICAgICB7IGRlc2NmbXQuRm9ybWF0RGVzYyhzLCByLCBmZCkgfQorZnVuYyAoZmQgKkZpbGUpIFByb3RvVHlwZShwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IpICAgICAgICAge30KK2Z1bmMgKGZkICpGaWxlKSBQcm90b0ludGVybmFsKHByYWdtYS5Eb05vdEltcGxlbWVudCkgICAgICAgICAgIHt9CiAKIGZ1bmMgKGZkICpGaWxlKSBsYXp5SW5pdCgpICpGaWxlTDIgewogCWlmIGF0b21pYy5Mb2FkVWludDMyKCZmZC5vbmNlKSA9PSAwIHsKQEAgLTExNyw5ICsxNjIsMTEgQEAKIAl9CiAJRW51bUwxIHN0cnVjdCB7CiAJCWVhZ2VyVmFsdWVzIGJvb2wgLy8gY29udHJvbHMgd2hldGhlciBFbnVtTDIuVmFsdWVzIGlzIGFscmVhZHkgcG9wdWxhdGVkCisKKwkJRWRpdGlvbkZlYXR1cmVzIEVkaXRpb25GZWF0dXJlcwogCX0KIAlFbnVtTDIgc3RydWN0IHsKLQkJT3B0aW9ucyAgICAgICAgZnVuYygpIHByZWYuUHJvdG9NZXNzYWdlCisJCU9wdGlvbnMgICAgICAgIGZ1bmMoKSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlCiAJCVZhbHVlcyAgICAgICAgIEVudW1WYWx1ZXMKIAkJUmVzZXJ2ZWROYW1lcyAgTmFtZXMKIAkJUmVzZXJ2ZWRSYW5nZXMgRW51bVJhbmdlcwpAQCAtMTMwLDQxICsxNzcsNDEgQEAKIAkJTDEgRW51bVZhbHVlTDEKIAl9CiAJRW51bVZhbHVlTDEgc3RydWN0IHsKLQkJT3B0aW9ucyBmdW5jKCkgcHJlZi5Qcm90b01lc3NhZ2UKLQkJTnVtYmVyICBwcmVmLkVudW1OdW1iZXIKKwkJT3B0aW9ucyBmdW5jKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZQorCQlOdW1iZXIgIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyCiAJfQogKQogCi1mdW5jIChlZCAqRW51bSkgT3B0aW9ucygpIHByZWYuUHJvdG9NZXNzYWdlIHsKK2Z1bmMgKGVkICpFbnVtKSBPcHRpb25zKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSB7CiAJaWYgZiA6PSBlZC5sYXp5SW5pdCgpLk9wdGlvbnM7IGYgIT0gbmlsIHsKIAkJcmV0dXJuIGYoKQogCX0KIAlyZXR1cm4gZGVzY29wdHMuRW51bQogfQotZnVuYyAoZWQgKkVudW0pIFZhbHVlcygpIHByZWYuRW51bVZhbHVlRGVzY3JpcHRvcnMgeworZnVuYyAoZWQgKkVudW0pIFZhbHVlcygpIHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9ycyB7CiAJaWYgZWQuTDEuZWFnZXJWYWx1ZXMgewogCQlyZXR1cm4gJmVkLkwyLlZhbHVlcwogCX0KIAlyZXR1cm4gJmVkLmxhenlJbml0KCkuVmFsdWVzCiB9Ci1mdW5jIChlZCAqRW51bSkgUmVzZXJ2ZWROYW1lcygpIHByZWYuTmFtZXMgICAgICAgeyByZXR1cm4gJmVkLmxhenlJbml0KCkuUmVzZXJ2ZWROYW1lcyB9Ci1mdW5jIChlZCAqRW51bSkgUmVzZXJ2ZWRSYW5nZXMoKSBwcmVmLkVudW1SYW5nZXMgeyByZXR1cm4gJmVkLmxhenlJbml0KCkuUmVzZXJ2ZWRSYW5nZXMgfQotZnVuYyAoZWQgKkVudW0pIEZvcm1hdChzIGZtdC5TdGF0ZSwgciBydW5lKSAgICAgIHsgZGVzY2ZtdC5Gb3JtYXREZXNjKHMsIHIsIGVkKSB9Ci1mdW5jIChlZCAqRW51bSkgUHJvdG9UeXBlKHByZWYuRW51bURlc2NyaXB0b3IpICAge30KK2Z1bmMgKGVkICpFbnVtKSBSZXNlcnZlZE5hbWVzKCkgcHJvdG9yZWZsZWN0Lk5hbWVzICAgICAgIHsgcmV0dXJuICZlZC5sYXp5SW5pdCgpLlJlc2VydmVkTmFtZXMgfQorZnVuYyAoZWQgKkVudW0pIFJlc2VydmVkUmFuZ2VzKCkgcHJvdG9yZWZsZWN0LkVudW1SYW5nZXMgeyByZXR1cm4gJmVkLmxhenlJbml0KCkuUmVzZXJ2ZWRSYW5nZXMgfQorZnVuYyAoZWQgKkVudW0pIEZvcm1hdChzIGZtdC5TdGF0ZSwgciBydW5lKSAgICAgICAgICAgICAgeyBkZXNjZm10LkZvcm1hdERlc2MocywgciwgZWQpIH0KK2Z1bmMgKGVkICpFbnVtKSBQcm90b1R5cGUocHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yKSAgIHt9CiBmdW5jIChlZCAqRW51bSkgbGF6eUluaXQoKSAqRW51bUwyIHsKIAllZC5MMC5QYXJlbnRGaWxlLmxhenlJbml0KCkgLy8gaW1wbGljaXRseSBpbml0aWFsaXplcyBMMgogCXJldHVybiBlZC5MMgogfQogCi1mdW5jIChlZCAqRW51bVZhbHVlKSBPcHRpb25zKCkgcHJlZi5Qcm90b01lc3NhZ2UgeworZnVuYyAoZWQgKkVudW1WYWx1ZSkgT3B0aW9ucygpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgewogCWlmIGYgOj0gZWQuTDEuT3B0aW9uczsgZiAhPSBuaWwgewogCQlyZXR1cm4gZigpCiAJfQogCXJldHVybiBkZXNjb3B0cy5FbnVtVmFsdWUKIH0KLWZ1bmMgKGVkICpFbnVtVmFsdWUpIE51bWJlcigpIHByZWYuRW51bU51bWJlciAgICAgICAgICAgIHsgcmV0dXJuIGVkLkwxLk51bWJlciB9Ci1mdW5jIChlZCAqRW51bVZhbHVlKSBGb3JtYXQocyBmbXQuU3RhdGUsIHIgcnVuZSkgICAgICAgICB7IGRlc2NmbXQuRm9ybWF0RGVzYyhzLCByLCBlZCkgfQotZnVuYyAoZWQgKkVudW1WYWx1ZSkgUHJvdG9UeXBlKHByZWYuRW51bVZhbHVlRGVzY3JpcHRvcikge30KK2Z1bmMgKGVkICpFbnVtVmFsdWUpIE51bWJlcigpIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyICAgICAgICAgICAgeyByZXR1cm4gZWQuTDEuTnVtYmVyIH0KK2Z1bmMgKGVkICpFbnVtVmFsdWUpIEZvcm1hdChzIGZtdC5TdGF0ZSwgciBydW5lKSAgICAgICAgICAgICAgICAgeyBkZXNjZm10LkZvcm1hdERlc2MocywgciwgZWQpIH0KK2Z1bmMgKGVkICpFbnVtVmFsdWUpIFByb3RvVHlwZShwcm90b3JlZmxlY3QuRW51bVZhbHVlRGVzY3JpcHRvcikge30KIAogdHlwZSAoCiAJTWVzc2FnZSBzdHJ1Y3QgewpAQCAtMTc4LDE2ICsyMjUsMTggQEAKIAkJRXh0ZW5zaW9ucyAgIEV4dGVuc2lvbnMKIAkJSXNNYXBFbnRyeSAgIGJvb2wgLy8gcHJvbW90ZWQgZnJvbSBnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMKIAkJSXNNZXNzYWdlU2V0IGJvb2wgLy8gcHJvbW90ZWQgZnJvbSBnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMKKworCQlFZGl0aW9uRmVhdHVyZXMgRWRpdGlvbkZlYXR1cmVzCiAJfQogCU1lc3NhZ2VMMiBzdHJ1Y3QgewotCQlPcHRpb25zICAgICAgICAgICAgICAgZnVuYygpIHByZWYuUHJvdG9NZXNzYWdlCisJCU9wdGlvbnMgICAgICAgICAgICAgICBmdW5jKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZQogCQlGaWVsZHMgICAgICAgICAgICAgICAgRmllbGRzCiAJCU9uZW9mcyAgICAgICAgICAgICAgICBPbmVvZnMKIAkJUmVzZXJ2ZWROYW1lcyAgICAgICAgIE5hbWVzCiAJCVJlc2VydmVkUmFuZ2VzICAgICAgICBGaWVsZFJhbmdlcwogCQlSZXF1aXJlZE51bWJlcnMgICAgICAgRmllbGROdW1iZXJzIC8vIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIEZpZWxkcy5DYXJkaW5hbGl0eQogCQlFeHRlbnNpb25SYW5nZXMgICAgICAgRmllbGRSYW5nZXMKLQkJRXh0ZW5zaW9uUmFuZ2VPcHRpb25zIFtdZnVuYygpIHByZWYuUHJvdG9NZXNzYWdlIC8vIG11c3QgYmUgc2FtZSBsZW5ndGggYXMgRXh0ZW5zaW9uUmFuZ2VzCisJCUV4dGVuc2lvblJhbmdlT3B0aW9ucyBbXWZ1bmMoKSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlIC8vIG11c3QgYmUgc2FtZSBsZW5ndGggYXMgRXh0ZW5zaW9uUmFuZ2VzCiAJfQogCiAJRmllbGQgc3RydWN0IHsKQEAgLTE5NSwxMCArMjQ0LDEwIEBACiAJCUwxIEZpZWxkTDEKIAl9CiAJRmllbGRMMSBzdHJ1Y3QgewotCQlPcHRpb25zICAgICAgICAgIGZ1bmMoKSBwcmVmLlByb3RvTWVzc2FnZQotCQlOdW1iZXIgICAgICAgICAgIHByZWYuRmllbGROdW1iZXIKLQkJQ2FyZGluYWxpdHkgICAgICBwcmVmLkNhcmRpbmFsaXR5IC8vIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIE1lc3NhZ2UuUmVxdWlyZWROdW1iZXJzCi0JCUtpbmQgICAgICAgICAgICAgcHJlZi5LaW5kCisJCU9wdGlvbnMgICAgICAgICAgZnVuYygpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UKKwkJTnVtYmVyICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIKKwkJQ2FyZGluYWxpdHkgICAgICBwcm90b3JlZmxlY3QuQ2FyZGluYWxpdHkgLy8gbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggTWVzc2FnZS5SZXF1aXJlZE51bWJlcnMKKwkJS2luZCAgICAgICAgICAgICBwcm90b3JlZmxlY3QuS2luZAogCQlTdHJpbmdOYW1lICAgICAgIHN0cmluZ05hbWUKIAkJSXNQcm90bzNPcHRpb25hbCBib29sIC8vIHByb21vdGVkIGZyb20gZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvCiAJCUlzV2VhayAgICAgICAgICAgYm9vbCAvLyBwcm9tb3RlZCBmcm9tIGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMKQEAgLTIwNyw5ICsyNTYsMTEgQEAKIAkJSGFzRW5mb3JjZVVURjggICBib29sIC8vIHByb21vdGVkIGZyb20gZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucwogCQlFbmZvcmNlVVRGOCAgICAgIGJvb2wgLy8gcHJvbW90ZWQgZnJvbSBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zCiAJCURlZmF1bHQgICAgICAgICAgZGVmYXVsdFZhbHVlCi0JCUNvbnRhaW5pbmdPbmVvZiAgcHJlZi5PbmVvZkRlc2NyaXB0b3IgLy8gbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggTWVzc2FnZS5PbmVvZnMuRmllbGRzCi0JCUVudW0gICAgICAgICAgICAgcHJlZi5FbnVtRGVzY3JpcHRvcgotCQlNZXNzYWdlICAgICAgICAgIHByZWYuTWVzc2FnZURlc2NyaXB0b3IKKwkJQ29udGFpbmluZ09uZW9mICBwcm90b3JlZmxlY3QuT25lb2ZEZXNjcmlwdG9yIC8vIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIE1lc3NhZ2UuT25lb2ZzLkZpZWxkcworCQlFbnVtICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvcgorCQlNZXNzYWdlICAgICAgICAgIHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvcgorCisJCUVkaXRpb25GZWF0dXJlcyBFZGl0aW9uRmVhdHVyZXMKIAl9CiAKIAlPbmVvZiBzdHJ1Y3QgewpAQCAtMjE3LDM1ICsyNjgsMzcgQEAKIAkJTDEgT25lb2ZMMQogCX0KIAlPbmVvZkwxIHN0cnVjdCB7Ci0JCU9wdGlvbnMgZnVuYygpIHByZWYuUHJvdG9NZXNzYWdlCisJCU9wdGlvbnMgZnVuYygpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UKIAkJRmllbGRzICBPbmVvZkZpZWxkcyAvLyBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBNZXNzYWdlLkZpZWxkcy5Db250YWluaW5nT25lb2YKKworCQlFZGl0aW9uRmVhdHVyZXMgRWRpdGlvbkZlYXR1cmVzCiAJfQogKQogCi1mdW5jIChtZCAqTWVzc2FnZSkgT3B0aW9ucygpIHByZWYuUHJvdG9NZXNzYWdlIHsKK2Z1bmMgKG1kICpNZXNzYWdlKSBPcHRpb25zKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSB7CiAJaWYgZiA6PSBtZC5sYXp5SW5pdCgpLk9wdGlvbnM7IGYgIT0gbmlsIHsKIAkJcmV0dXJuIGYoKQogCX0KIAlyZXR1cm4gZGVzY29wdHMuTWVzc2FnZQogfQotZnVuYyAobWQgKk1lc3NhZ2UpIElzTWFwRW50cnkoKSBib29sICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG1kLkwxLklzTWFwRW50cnkgfQotZnVuYyAobWQgKk1lc3NhZ2UpIEZpZWxkcygpIHByZWYuRmllbGREZXNjcmlwdG9ycyAgICAgIHsgcmV0dXJuICZtZC5sYXp5SW5pdCgpLkZpZWxkcyB9Ci1mdW5jIChtZCAqTWVzc2FnZSkgT25lb2ZzKCkgcHJlZi5PbmVvZkRlc2NyaXB0b3JzICAgICAgeyByZXR1cm4gJm1kLmxhenlJbml0KCkuT25lb2ZzIH0KLWZ1bmMgKG1kICpNZXNzYWdlKSBSZXNlcnZlZE5hbWVzKCkgcHJlZi5OYW1lcyAgICAgICAgICB7IHJldHVybiAmbWQubGF6eUluaXQoKS5SZXNlcnZlZE5hbWVzIH0KLWZ1bmMgKG1kICpNZXNzYWdlKSBSZXNlcnZlZFJhbmdlcygpIHByZWYuRmllbGRSYW5nZXMgICB7IHJldHVybiAmbWQubGF6eUluaXQoKS5SZXNlcnZlZFJhbmdlcyB9Ci1mdW5jIChtZCAqTWVzc2FnZSkgUmVxdWlyZWROdW1iZXJzKCkgcHJlZi5GaWVsZE51bWJlcnMgeyByZXR1cm4gJm1kLmxhenlJbml0KCkuUmVxdWlyZWROdW1iZXJzIH0KLWZ1bmMgKG1kICpNZXNzYWdlKSBFeHRlbnNpb25SYW5nZXMoKSBwcmVmLkZpZWxkUmFuZ2VzICB7IHJldHVybiAmbWQubGF6eUluaXQoKS5FeHRlbnNpb25SYW5nZXMgfQotZnVuYyAobWQgKk1lc3NhZ2UpIEV4dGVuc2lvblJhbmdlT3B0aW9ucyhpIGludCkgcHJlZi5Qcm90b01lc3NhZ2UgeworZnVuYyAobWQgKk1lc3NhZ2UpIElzTWFwRW50cnkoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbWQuTDEuSXNNYXBFbnRyeSB9CitmdW5jIChtZCAqTWVzc2FnZSkgRmllbGRzKCkgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcnMgICAgICB7IHJldHVybiAmbWQubGF6eUluaXQoKS5GaWVsZHMgfQorZnVuYyAobWQgKk1lc3NhZ2UpIE9uZW9mcygpIHByb3RvcmVmbGVjdC5PbmVvZkRlc2NyaXB0b3JzICAgICAgeyByZXR1cm4gJm1kLmxhenlJbml0KCkuT25lb2ZzIH0KK2Z1bmMgKG1kICpNZXNzYWdlKSBSZXNlcnZlZE5hbWVzKCkgcHJvdG9yZWZsZWN0Lk5hbWVzICAgICAgICAgIHsgcmV0dXJuICZtZC5sYXp5SW5pdCgpLlJlc2VydmVkTmFtZXMgfQorZnVuYyAobWQgKk1lc3NhZ2UpIFJlc2VydmVkUmFuZ2VzKCkgcHJvdG9yZWZsZWN0LkZpZWxkUmFuZ2VzICAgeyByZXR1cm4gJm1kLmxhenlJbml0KCkuUmVzZXJ2ZWRSYW5nZXMgfQorZnVuYyAobWQgKk1lc3NhZ2UpIFJlcXVpcmVkTnVtYmVycygpIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcnMgeyByZXR1cm4gJm1kLmxhenlJbml0KCkuUmVxdWlyZWROdW1iZXJzIH0KK2Z1bmMgKG1kICpNZXNzYWdlKSBFeHRlbnNpb25SYW5nZXMoKSBwcm90b3JlZmxlY3QuRmllbGRSYW5nZXMgIHsgcmV0dXJuICZtZC5sYXp5SW5pdCgpLkV4dGVuc2lvblJhbmdlcyB9CitmdW5jIChtZCAqTWVzc2FnZSkgRXh0ZW5zaW9uUmFuZ2VPcHRpb25zKGkgaW50KSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlIHsKIAlpZiBmIDo9IG1kLmxhenlJbml0KCkuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zW2ldOyBmICE9IG5pbCB7CiAJCXJldHVybiBmKCkKIAl9CiAJcmV0dXJuIGRlc2NvcHRzLkV4dGVuc2lvblJhbmdlCiB9Ci1mdW5jIChtZCAqTWVzc2FnZSkgRW51bXMoKSBwcmVmLkVudW1EZXNjcmlwdG9ycyAgICAgICAgICAgeyByZXR1cm4gJm1kLkwxLkVudW1zIH0KLWZ1bmMgKG1kICpNZXNzYWdlKSBNZXNzYWdlcygpIHByZWYuTWVzc2FnZURlc2NyaXB0b3JzICAgICB7IHJldHVybiAmbWQuTDEuTWVzc2FnZXMgfQotZnVuYyAobWQgKk1lc3NhZ2UpIEV4dGVuc2lvbnMoKSBwcmVmLkV4dGVuc2lvbkRlc2NyaXB0b3JzIHsgcmV0dXJuICZtZC5MMS5FeHRlbnNpb25zIH0KLWZ1bmMgKG1kICpNZXNzYWdlKSBQcm90b1R5cGUocHJlZi5NZXNzYWdlRGVzY3JpcHRvcikgICAgICB7fQotZnVuYyAobWQgKk1lc3NhZ2UpIEZvcm1hdChzIGZtdC5TdGF0ZSwgciBydW5lKSAgICAgICAgICAgIHsgZGVzY2ZtdC5Gb3JtYXREZXNjKHMsIHIsIG1kKSB9CitmdW5jIChtZCAqTWVzc2FnZSkgRW51bXMoKSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3JzICAgICAgICAgICB7IHJldHVybiAmbWQuTDEuRW51bXMgfQorZnVuYyAobWQgKk1lc3NhZ2UpIE1lc3NhZ2VzKCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9ycyAgICAgeyByZXR1cm4gJm1kLkwxLk1lc3NhZ2VzIH0KK2Z1bmMgKG1kICpNZXNzYWdlKSBFeHRlbnNpb25zKCkgcHJvdG9yZWZsZWN0LkV4dGVuc2lvbkRlc2NyaXB0b3JzIHsgcmV0dXJuICZtZC5MMS5FeHRlbnNpb25zIH0KK2Z1bmMgKG1kICpNZXNzYWdlKSBQcm90b1R5cGUocHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yKSAgICAgIHt9CitmdW5jIChtZCAqTWVzc2FnZSkgRm9ybWF0KHMgZm10LlN0YXRlLCByIHJ1bmUpICAgICAgICAgICAgICAgICAgICB7IGRlc2NmbXQuRm9ybWF0RGVzYyhzLCByLCBtZCkgfQogZnVuYyAobWQgKk1lc3NhZ2UpIGxhenlJbml0KCkgKk1lc3NhZ2VMMiB7CiAJbWQuTDAuUGFyZW50RmlsZS5sYXp5SW5pdCgpIC8vIGltcGxpY2l0bHkgaW5pdGlhbGl6ZXMgTDIKIAlyZXR1cm4gbWQuTDIKQEAgLTI2MCw3MCArMzEzLDgzIEBACiAJcmV0dXJuIG1kLkwxLklzTWVzc2FnZVNldAogfQogCi1mdW5jIChmZCAqRmllbGQpIE9wdGlvbnMoKSBwcmVmLlByb3RvTWVzc2FnZSB7CitmdW5jIChmZCAqRmllbGQpIE9wdGlvbnMoKSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlIHsKIAlpZiBmIDo9IGZkLkwxLk9wdGlvbnM7IGYgIT0gbmlsIHsKIAkJcmV0dXJuIGYoKQogCX0KIAlyZXR1cm4gZGVzY29wdHMuRmllbGQKIH0KLWZ1bmMgKGZkICpGaWVsZCkgTnVtYmVyKCkgcHJlZi5GaWVsZE51bWJlciAgICAgIHsgcmV0dXJuIGZkLkwxLk51bWJlciB9Ci1mdW5jIChmZCAqRmllbGQpIENhcmRpbmFsaXR5KCkgcHJlZi5DYXJkaW5hbGl0eSB7IHJldHVybiBmZC5MMS5DYXJkaW5hbGl0eSB9Ci1mdW5jIChmZCAqRmllbGQpIEtpbmQoKSBwcmVmLktpbmQgICAgICAgICAgICAgICB7IHJldHVybiBmZC5MMS5LaW5kIH0KLWZ1bmMgKGZkICpGaWVsZCkgSGFzSlNPTk5hbWUoKSBib29sICAgICAgICAgICAgIHsgcmV0dXJuIGZkLkwxLlN0cmluZ05hbWUuaGFzSlNPTiB9Ci1mdW5jIChmZCAqRmllbGQpIEpTT05OYW1lKCkgc3RyaW5nICAgICAgICAgICAgICB7IHJldHVybiBmZC5MMS5TdHJpbmdOYW1lLmdldEpTT04oZmQpIH0KLWZ1bmMgKGZkICpGaWVsZCkgVGV4dE5hbWUoKSBzdHJpbmcgICAgICAgICAgICAgIHsgcmV0dXJuIGZkLkwxLlN0cmluZ05hbWUuZ2V0VGV4dChmZCkgfQorZnVuYyAoZmQgKkZpZWxkKSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgICAgICB7IHJldHVybiBmZC5MMS5OdW1iZXIgfQorZnVuYyAoZmQgKkZpZWxkKSBDYXJkaW5hbGl0eSgpIHByb3RvcmVmbGVjdC5DYXJkaW5hbGl0eSB7IHJldHVybiBmZC5MMS5DYXJkaW5hbGl0eSB9CitmdW5jIChmZCAqRmllbGQpIEtpbmQoKSBwcm90b3JlZmxlY3QuS2luZCB7CisJcmV0dXJuIGZkLkwxLktpbmQKK30KK2Z1bmMgKGZkICpGaWVsZCkgSGFzSlNPTk5hbWUoKSBib29sIHsgcmV0dXJuIGZkLkwxLlN0cmluZ05hbWUuaGFzSlNPTiB9CitmdW5jIChmZCAqRmllbGQpIEpTT05OYW1lKCkgc3RyaW5nICB7IHJldHVybiBmZC5MMS5TdHJpbmdOYW1lLmdldEpTT04oZmQpIH0KK2Z1bmMgKGZkICpGaWVsZCkgVGV4dE5hbWUoKSBzdHJpbmcgIHsgcmV0dXJuIGZkLkwxLlN0cmluZ05hbWUuZ2V0VGV4dChmZCkgfQogZnVuYyAoZmQgKkZpZWxkKSBIYXNQcmVzZW5jZSgpIGJvb2wgewotCXJldHVybiBmZC5MMS5DYXJkaW5hbGl0eSAhPSBwcmVmLlJlcGVhdGVkICYmIChmZC5MMC5QYXJlbnRGaWxlLkwxLlN5bnRheCA9PSBwcmVmLlByb3RvMiB8fCBmZC5MMS5NZXNzYWdlICE9IG5pbCB8fCBmZC5MMS5Db250YWluaW5nT25lb2YgIT0gbmlsKQorCWlmIGZkLkwxLkNhcmRpbmFsaXR5ID09IHByb3RvcmVmbGVjdC5SZXBlYXRlZCB7CisJCXJldHVybiBmYWxzZQorCX0KKwlleHBsaWNpdEZpZWxkUHJlc2VuY2UgOj0gZmQuU3ludGF4KCkgPT0gcHJvdG9yZWZsZWN0LkVkaXRpb25zICYmIGZkLkwxLkVkaXRpb25GZWF0dXJlcy5Jc0ZpZWxkUHJlc2VuY2UKKwlyZXR1cm4gZmQuU3ludGF4KCkgPT0gcHJvdG9yZWZsZWN0LlByb3RvMiB8fCBleHBsaWNpdEZpZWxkUHJlc2VuY2UgfHwgZmQuTDEuTWVzc2FnZSAhPSBuaWwgfHwgZmQuTDEuQ29udGFpbmluZ09uZW9mICE9IG5pbAogfQogZnVuYyAoZmQgKkZpZWxkKSBIYXNPcHRpb25hbEtleXdvcmQoKSBib29sIHsKLQlyZXR1cm4gKGZkLkwwLlBhcmVudEZpbGUuTDEuU3ludGF4ID09IHByZWYuUHJvdG8yICYmIGZkLkwxLkNhcmRpbmFsaXR5ID09IHByZWYuT3B0aW9uYWwgJiYgZmQuTDEuQ29udGFpbmluZ09uZW9mID09IG5pbCkgfHwgZmQuTDEuSXNQcm90bzNPcHRpb25hbAorCXJldHVybiAoZmQuTDAuUGFyZW50RmlsZS5MMS5TeW50YXggPT0gcHJvdG9yZWZsZWN0LlByb3RvMiAmJiBmZC5MMS5DYXJkaW5hbGl0eSA9PSBwcm90b3JlZmxlY3QuT3B0aW9uYWwgJiYgZmQuTDEuQ29udGFpbmluZ09uZW9mID09IG5pbCkgfHwgZmQuTDEuSXNQcm90bzNPcHRpb25hbAogfQogZnVuYyAoZmQgKkZpZWxkKSBJc1BhY2tlZCgpIGJvb2wgewotCWlmICFmZC5MMS5IYXNQYWNrZWQgJiYgZmQuTDAuUGFyZW50RmlsZS5MMS5TeW50YXggIT0gcHJlZi5Qcm90bzIgJiYgZmQuTDEuQ2FyZGluYWxpdHkgPT0gcHJlZi5SZXBlYXRlZCB7Ci0JCXN3aXRjaCBmZC5MMS5LaW5kIHsKLQkJY2FzZSBwcmVmLlN0cmluZ0tpbmQsIHByZWYuQnl0ZXNLaW5kLCBwcmVmLk1lc3NhZ2VLaW5kLCBwcmVmLkdyb3VwS2luZDoKLQkJZGVmYXVsdDoKLQkJCXJldHVybiB0cnVlCi0JCX0KKwlpZiBmZC5MMS5DYXJkaW5hbGl0eSAhPSBwcm90b3JlZmxlY3QuUmVwZWF0ZWQgeworCQlyZXR1cm4gZmFsc2UKKwl9CisJc3dpdGNoIGZkLkwxLktpbmQgeworCWNhc2UgcHJvdG9yZWZsZWN0LlN0cmluZ0tpbmQsIHByb3RvcmVmbGVjdC5CeXRlc0tpbmQsIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZCwgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKKwkJcmV0dXJuIGZhbHNlCisJfQorCWlmIGZkLkwwLlBhcmVudEZpbGUuTDEuU3ludGF4ID09IHByb3RvcmVmbGVjdC5FZGl0aW9ucyB7CisJCXJldHVybiBmZC5MMS5FZGl0aW9uRmVhdHVyZXMuSXNQYWNrZWQKKwl9CisJaWYgZmQuTDAuUGFyZW50RmlsZS5MMS5TeW50YXggPT0gcHJvdG9yZWZsZWN0LlByb3RvMyB7CisJCS8vIHByb3RvMyByZXBlYXRlZCBmaWVsZHMgYXJlIHBhY2tlZCBieSBkZWZhdWx0LgorCQlyZXR1cm4gIWZkLkwxLkhhc1BhY2tlZCB8fCBmZC5MMS5Jc1BhY2tlZAogCX0KIAlyZXR1cm4gZmQuTDEuSXNQYWNrZWQKIH0KIGZ1bmMgKGZkICpGaWVsZCkgSXNFeHRlbnNpb24oKSBib29sIHsgcmV0dXJuIGZhbHNlIH0KIGZ1bmMgKGZkICpGaWVsZCkgSXNXZWFrKCkgYm9vbCAgICAgIHsgcmV0dXJuIGZkLkwxLklzV2VhayB9Ci1mdW5jIChmZCAqRmllbGQpIElzTGlzdCgpIGJvb2wgICAgICB7IHJldHVybiBmZC5DYXJkaW5hbGl0eSgpID09IHByZWYuUmVwZWF0ZWQgJiYgIWZkLklzTWFwKCkgfQorZnVuYyAoZmQgKkZpZWxkKSBJc0xpc3QoKSBib29sICAgICAgeyByZXR1cm4gZmQuQ2FyZGluYWxpdHkoKSA9PSBwcm90b3JlZmxlY3QuUmVwZWF0ZWQgJiYgIWZkLklzTWFwKCkgfQogZnVuYyAoZmQgKkZpZWxkKSBJc01hcCgpIGJvb2wgICAgICAgeyByZXR1cm4gZmQuTWVzc2FnZSgpICE9IG5pbCAmJiBmZC5NZXNzYWdlKCkuSXNNYXBFbnRyeSgpIH0KLWZ1bmMgKGZkICpGaWVsZCkgTWFwS2V5KCkgcHJlZi5GaWVsZERlc2NyaXB0b3IgeworZnVuYyAoZmQgKkZpZWxkKSBNYXBLZXkoKSBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yIHsKIAlpZiAhZmQuSXNNYXAoKSB7CiAJCXJldHVybiBuaWwKIAl9CiAJcmV0dXJuIGZkLk1lc3NhZ2UoKS5GaWVsZHMoKS5CeU51bWJlcihnZW5pZC5NYXBFbnRyeV9LZXlfZmllbGRfbnVtYmVyKQogfQotZnVuYyAoZmQgKkZpZWxkKSBNYXBWYWx1ZSgpIHByZWYuRmllbGREZXNjcmlwdG9yIHsKK2Z1bmMgKGZkICpGaWVsZCkgTWFwVmFsdWUoKSBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yIHsKIAlpZiAhZmQuSXNNYXAoKSB7CiAJCXJldHVybiBuaWwKIAl9CiAJcmV0dXJuIGZkLk1lc3NhZ2UoKS5GaWVsZHMoKS5CeU51bWJlcihnZW5pZC5NYXBFbnRyeV9WYWx1ZV9maWVsZF9udW1iZXIpCiB9Ci1mdW5jIChmZCAqRmllbGQpIEhhc0RlZmF1bHQoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmQuTDEuRGVmYXVsdC5oYXMgfQotZnVuYyAoZmQgKkZpZWxkKSBEZWZhdWx0KCkgcHJlZi5WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZkLkwxLkRlZmF1bHQuZ2V0KGZkKSB9Ci1mdW5jIChmZCAqRmllbGQpIERlZmF1bHRFbnVtVmFsdWUoKSBwcmVmLkVudW1WYWx1ZURlc2NyaXB0b3IgeyByZXR1cm4gZmQuTDEuRGVmYXVsdC5lbnVtIH0KLWZ1bmMgKGZkICpGaWVsZCkgQ29udGFpbmluZ09uZW9mKCkgcHJlZi5PbmVvZkRlc2NyaXB0b3IgICAgICB7IHJldHVybiBmZC5MMS5Db250YWluaW5nT25lb2YgfQotZnVuYyAoZmQgKkZpZWxkKSBDb250YWluaW5nTWVzc2FnZSgpIHByZWYuTWVzc2FnZURlc2NyaXB0b3IgewotCXJldHVybiBmZC5MMC5QYXJlbnQuKHByZWYuTWVzc2FnZURlc2NyaXB0b3IpCitmdW5jIChmZCAqRmllbGQpIEhhc0RlZmF1bHQoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmZC5MMS5EZWZhdWx0LmhhcyB9CitmdW5jIChmZCAqRmllbGQpIERlZmF1bHQoKSBwcm90b3JlZmxlY3QuVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmZC5MMS5EZWZhdWx0LmdldChmZCkgfQorZnVuYyAoZmQgKkZpZWxkKSBEZWZhdWx0RW51bVZhbHVlKCkgcHJvdG9yZWZsZWN0LkVudW1WYWx1ZURlc2NyaXB0b3IgeyByZXR1cm4gZmQuTDEuRGVmYXVsdC5lbnVtIH0KK2Z1bmMgKGZkICpGaWVsZCkgQ29udGFpbmluZ09uZW9mKCkgcHJvdG9yZWZsZWN0Lk9uZW9mRGVzY3JpcHRvciAgICAgIHsgcmV0dXJuIGZkLkwxLkNvbnRhaW5pbmdPbmVvZiB9CitmdW5jIChmZCAqRmllbGQpIENvbnRhaW5pbmdNZXNzYWdlKCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yIHsKKwlyZXR1cm4gZmQuTDAuUGFyZW50Lihwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IpCiB9Ci1mdW5jIChmZCAqRmllbGQpIEVudW0oKSBwcmVmLkVudW1EZXNjcmlwdG9yIHsKK2Z1bmMgKGZkICpGaWVsZCkgRW51bSgpIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvciB7CiAJcmV0dXJuIGZkLkwxLkVudW0KIH0KLWZ1bmMgKGZkICpGaWVsZCkgTWVzc2FnZSgpIHByZWYuTWVzc2FnZURlc2NyaXB0b3IgeworZnVuYyAoZmQgKkZpZWxkKSBNZXNzYWdlKCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yIHsKIAlpZiBmZC5MMS5Jc1dlYWsgewogCQlpZiBkLCBfIDo9IHByb3RvcmVnaXN0cnkuR2xvYmFsRmlsZXMuRmluZERlc2NyaXB0b3JCeU5hbWUoZmQuTDEuTWVzc2FnZS5GdWxsTmFtZSgpKTsgZCAhPSBuaWwgewotCQkJcmV0dXJuIGQuKHByZWYuTWVzc2FnZURlc2NyaXB0b3IpCisJCQlyZXR1cm4gZC4ocHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yKQogCQl9CiAJfQogCXJldHVybiBmZC5MMS5NZXNzYWdlCiB9Ci1mdW5jIChmZCAqRmllbGQpIEZvcm1hdChzIGZtdC5TdGF0ZSwgciBydW5lKSAgICAgeyBkZXNjZm10LkZvcm1hdERlc2MocywgciwgZmQpIH0KLWZ1bmMgKGZkICpGaWVsZCkgUHJvdG9UeXBlKHByZWYuRmllbGREZXNjcmlwdG9yKSB7fQorZnVuYyAoZmQgKkZpZWxkKSBGb3JtYXQocyBmbXQuU3RhdGUsIHIgcnVuZSkgICAgICAgICAgICAgeyBkZXNjZm10LkZvcm1hdERlc2MocywgciwgZmQpIH0KK2Z1bmMgKGZkICpGaWVsZCkgUHJvdG9UeXBlKHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpIHt9CiAKIC8vIEVuZm9yY2VVVEY4IGlzIGEgcHNldWRvLWludGVybmFsIEFQSSB0byBkZXRlcm1pbmUgd2hldGhlciB0byBlbmZvcmNlIFVURi04CiAvLyB2YWxpZGF0aW9uIGZvciB0aGUgc3RyaW5nIGZpZWxkLiBUaGlzIGV4aXN0cyBmb3IgR29vZ2xlLWludGVybmFsIHVzZSBvbmx5CkBAIC0zMzMsMjQgKzM5OSwyNyBAQAogLy8gV0FSTklORzogVGhpcyBtZXRob2QgaXMgZXhlbXB0IGZyb20gdGhlIGNvbXBhdGliaWxpdHkgcHJvbWlzZSBhbmQgbWF5IGJlCiAvLyByZW1vdmVkIGluIHRoZSBmdXR1cmUgd2l0aG91dCB3YXJuaW5nLgogZnVuYyAoZmQgKkZpZWxkKSBFbmZvcmNlVVRGOCgpIGJvb2wgeworCWlmIGZkLkwwLlBhcmVudEZpbGUuTDEuU3ludGF4ID09IHByb3RvcmVmbGVjdC5FZGl0aW9ucyB7CisJCXJldHVybiBmZC5MMS5FZGl0aW9uRmVhdHVyZXMuSXNVVEY4VmFsaWRhdGVkCisJfQogCWlmIGZkLkwxLkhhc0VuZm9yY2VVVEY4IHsKIAkJcmV0dXJuIGZkLkwxLkVuZm9yY2VVVEY4CiAJfQotCXJldHVybiBmZC5MMC5QYXJlbnRGaWxlLkwxLlN5bnRheCA9PSBwcmVmLlByb3RvMworCXJldHVybiBmZC5MMC5QYXJlbnRGaWxlLkwxLlN5bnRheCA9PSBwcm90b3JlZmxlY3QuUHJvdG8zCiB9CiAKIGZ1bmMgKG9kICpPbmVvZikgSXNTeW50aGV0aWMoKSBib29sIHsKLQlyZXR1cm4gb2QuTDAuUGFyZW50RmlsZS5MMS5TeW50YXggPT0gcHJlZi5Qcm90bzMgJiYgbGVuKG9kLkwxLkZpZWxkcy5MaXN0KSA9PSAxICYmIG9kLkwxLkZpZWxkcy5MaXN0WzBdLkhhc09wdGlvbmFsS2V5d29yZCgpCisJcmV0dXJuIG9kLkwwLlBhcmVudEZpbGUuTDEuU3ludGF4ID09IHByb3RvcmVmbGVjdC5Qcm90bzMgJiYgbGVuKG9kLkwxLkZpZWxkcy5MaXN0KSA9PSAxICYmIG9kLkwxLkZpZWxkcy5MaXN0WzBdLkhhc09wdGlvbmFsS2V5d29yZCgpCiB9Ci1mdW5jIChvZCAqT25lb2YpIE9wdGlvbnMoKSBwcmVmLlByb3RvTWVzc2FnZSB7CitmdW5jIChvZCAqT25lb2YpIE9wdGlvbnMoKSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlIHsKIAlpZiBmIDo9IG9kLkwxLk9wdGlvbnM7IGYgIT0gbmlsIHsKIAkJcmV0dXJuIGYoKQogCX0KIAlyZXR1cm4gZGVzY29wdHMuT25lb2YKIH0KLWZ1bmMgKG9kICpPbmVvZikgRmllbGRzKCkgcHJlZi5GaWVsZERlc2NyaXB0b3JzICB7IHJldHVybiAmb2QuTDEuRmllbGRzIH0KLWZ1bmMgKG9kICpPbmVvZikgRm9ybWF0KHMgZm10LlN0YXRlLCByIHJ1bmUpICAgICB7IGRlc2NmbXQuRm9ybWF0RGVzYyhzLCByLCBvZCkgfQotZnVuYyAob2QgKk9uZW9mKSBQcm90b1R5cGUocHJlZi5PbmVvZkRlc2NyaXB0b3IpIHt9CitmdW5jIChvZCAqT25lb2YpIEZpZWxkcygpIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3JzICB7IHJldHVybiAmb2QuTDEuRmllbGRzIH0KK2Z1bmMgKG9kICpPbmVvZikgRm9ybWF0KHMgZm10LlN0YXRlLCByIHJ1bmUpICAgICAgICAgICAgIHsgZGVzY2ZtdC5Gb3JtYXREZXNjKHMsIHIsIG9kKSB9CitmdW5jIChvZCAqT25lb2YpIFByb3RvVHlwZShwcm90b3JlZmxlY3QuT25lb2ZEZXNjcmlwdG9yKSB7fQogCiB0eXBlICgKIAlFeHRlbnNpb24gc3RydWN0IHsKQEAgLTM1OSw1NSArNDI4LDU4IEBACiAJCUwyICpFeHRlbnNpb25MMiAvLyBwcm90ZWN0ZWQgYnkgZmlsZURlc2Mub25jZQogCX0KIAlFeHRlbnNpb25MMSBzdHJ1Y3QgewotCQlOdW1iZXIgICAgICBwcmVmLkZpZWxkTnVtYmVyCi0JCUV4dGVuZGVlICAgIHByZWYuTWVzc2FnZURlc2NyaXB0b3IKLQkJQ2FyZGluYWxpdHkgcHJlZi5DYXJkaW5hbGl0eQotCQlLaW5kICAgICAgICBwcmVmLktpbmQKKwkJTnVtYmVyICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcgorCQlFeHRlbmRlZSAgICAgICAgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yCisJCUNhcmRpbmFsaXR5ICAgICBwcm90b3JlZmxlY3QuQ2FyZGluYWxpdHkKKwkJS2luZCAgICAgICAgICAgIHByb3RvcmVmbGVjdC5LaW5kCisJCUVkaXRpb25GZWF0dXJlcyBFZGl0aW9uRmVhdHVyZXMKIAl9CiAJRXh0ZW5zaW9uTDIgc3RydWN0IHsKLQkJT3B0aW9ucyAgICAgICAgICBmdW5jKCkgcHJlZi5Qcm90b01lc3NhZ2UKKwkJT3B0aW9ucyAgICAgICAgICBmdW5jKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZQogCQlTdHJpbmdOYW1lICAgICAgIHN0cmluZ05hbWUKIAkJSXNQcm90bzNPcHRpb25hbCBib29sIC8vIHByb21vdGVkIGZyb20gZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvCiAJCUlzUGFja2VkICAgICAgICAgYm9vbCAvLyBwcm9tb3RlZCBmcm9tIGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMKIAkJRGVmYXVsdCAgICAgICAgICBkZWZhdWx0VmFsdWUKLQkJRW51bSAgICAgICAgICAgICBwcmVmLkVudW1EZXNjcmlwdG9yCi0JCU1lc3NhZ2UgICAgICAgICAgcHJlZi5NZXNzYWdlRGVzY3JpcHRvcgorCQlFbnVtICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvcgorCQlNZXNzYWdlICAgICAgICAgIHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvcgogCX0KICkKIAotZnVuYyAoeGQgKkV4dGVuc2lvbikgT3B0aW9ucygpIHByZWYuUHJvdG9NZXNzYWdlIHsKK2Z1bmMgKHhkICpFeHRlbnNpb24pIE9wdGlvbnMoKSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlIHsKIAlpZiBmIDo9IHhkLmxhenlJbml0KCkuT3B0aW9uczsgZiAhPSBuaWwgewogCQlyZXR1cm4gZigpCiAJfQogCXJldHVybiBkZXNjb3B0cy5GaWVsZAogfQotZnVuYyAoeGQgKkV4dGVuc2lvbikgTnVtYmVyKCkgcHJlZi5GaWVsZE51bWJlciAgICAgIHsgcmV0dXJuIHhkLkwxLk51bWJlciB9Ci1mdW5jICh4ZCAqRXh0ZW5zaW9uKSBDYXJkaW5hbGl0eSgpIHByZWYuQ2FyZGluYWxpdHkgeyByZXR1cm4geGQuTDEuQ2FyZGluYWxpdHkgfQotZnVuYyAoeGQgKkV4dGVuc2lvbikgS2luZCgpIHByZWYuS2luZCAgICAgICAgICAgICAgIHsgcmV0dXJuIHhkLkwxLktpbmQgfQotZnVuYyAoeGQgKkV4dGVuc2lvbikgSGFzSlNPTk5hbWUoKSBib29sICAgICAgICAgICAgIHsgcmV0dXJuIHhkLmxhenlJbml0KCkuU3RyaW5nTmFtZS5oYXNKU09OIH0KLWZ1bmMgKHhkICpFeHRlbnNpb24pIEpTT05OYW1lKCkgc3RyaW5nICAgICAgICAgICAgICB7IHJldHVybiB4ZC5sYXp5SW5pdCgpLlN0cmluZ05hbWUuZ2V0SlNPTih4ZCkgfQotZnVuYyAoeGQgKkV4dGVuc2lvbikgVGV4dE5hbWUoKSBzdHJpbmcgICAgICAgICAgICAgIHsgcmV0dXJuIHhkLmxhenlJbml0KCkuU3RyaW5nTmFtZS5nZXRUZXh0KHhkKSB9Ci1mdW5jICh4ZCAqRXh0ZW5zaW9uKSBIYXNQcmVzZW5jZSgpIGJvb2wgICAgICAgICAgICAgeyByZXR1cm4geGQuTDEuQ2FyZGluYWxpdHkgIT0gcHJlZi5SZXBlYXRlZCB9CitmdW5jICh4ZCAqRXh0ZW5zaW9uKSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgICAgICB7IHJldHVybiB4ZC5MMS5OdW1iZXIgfQorZnVuYyAoeGQgKkV4dGVuc2lvbikgQ2FyZGluYWxpdHkoKSBwcm90b3JlZmxlY3QuQ2FyZGluYWxpdHkgeyByZXR1cm4geGQuTDEuQ2FyZGluYWxpdHkgfQorZnVuYyAoeGQgKkV4dGVuc2lvbikgS2luZCgpIHByb3RvcmVmbGVjdC5LaW5kICAgICAgICAgICAgICAgeyByZXR1cm4geGQuTDEuS2luZCB9CitmdW5jICh4ZCAqRXh0ZW5zaW9uKSBIYXNKU09OTmFtZSgpIGJvb2wgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiB4ZC5sYXp5SW5pdCgpLlN0cmluZ05hbWUuaGFzSlNPTiB9CitmdW5jICh4ZCAqRXh0ZW5zaW9uKSBKU09OTmFtZSgpIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiB4ZC5sYXp5SW5pdCgpLlN0cmluZ05hbWUuZ2V0SlNPTih4ZCkgfQorZnVuYyAoeGQgKkV4dGVuc2lvbikgVGV4dE5hbWUoKSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4geGQubGF6eUluaXQoKS5TdHJpbmdOYW1lLmdldFRleHQoeGQpIH0KK2Z1bmMgKHhkICpFeHRlbnNpb24pIEhhc1ByZXNlbmNlKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHhkLkwxLkNhcmRpbmFsaXR5ICE9IHByb3RvcmVmbGVjdC5SZXBlYXRlZCB9CiBmdW5jICh4ZCAqRXh0ZW5zaW9uKSBIYXNPcHRpb25hbEtleXdvcmQoKSBib29sIHsKLQlyZXR1cm4gKHhkLkwwLlBhcmVudEZpbGUuTDEuU3ludGF4ID09IHByZWYuUHJvdG8yICYmIHhkLkwxLkNhcmRpbmFsaXR5ID09IHByZWYuT3B0aW9uYWwpIHx8IHhkLmxhenlJbml0KCkuSXNQcm90bzNPcHRpb25hbAorCXJldHVybiAoeGQuTDAuUGFyZW50RmlsZS5MMS5TeW50YXggPT0gcHJvdG9yZWZsZWN0LlByb3RvMiAmJiB4ZC5MMS5DYXJkaW5hbGl0eSA9PSBwcm90b3JlZmxlY3QuT3B0aW9uYWwpIHx8IHhkLmxhenlJbml0KCkuSXNQcm90bzNPcHRpb25hbAogfQotZnVuYyAoeGQgKkV4dGVuc2lvbikgSXNQYWNrZWQoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiB4ZC5sYXp5SW5pdCgpLklzUGFja2VkIH0KLWZ1bmMgKHhkICpFeHRlbnNpb24pIElzRXh0ZW5zaW9uKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gdHJ1ZSB9Ci1mdW5jICh4ZCAqRXh0ZW5zaW9uKSBJc1dlYWsoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZhbHNlIH0KLWZ1bmMgKHhkICpFeHRlbnNpb24pIElzTGlzdCgpIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4geGQuQ2FyZGluYWxpdHkoKSA9PSBwcmVmLlJlcGVhdGVkIH0KLWZ1bmMgKHhkICpFeHRlbnNpb24pIElzTWFwKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmFsc2UgfQotZnVuYyAoeGQgKkV4dGVuc2lvbikgTWFwS2V5KCkgcHJlZi5GaWVsZERlc2NyaXB0b3IgICAgICAgICAgICAgICB7IHJldHVybiBuaWwgfQotZnVuYyAoeGQgKkV4dGVuc2lvbikgTWFwVmFsdWUoKSBwcmVmLkZpZWxkRGVzY3JpcHRvciAgICAgICAgICAgICB7IHJldHVybiBuaWwgfQotZnVuYyAoeGQgKkV4dGVuc2lvbikgSGFzRGVmYXVsdCgpIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiB4ZC5sYXp5SW5pdCgpLkRlZmF1bHQuaGFzIH0KLWZ1bmMgKHhkICpFeHRlbnNpb24pIERlZmF1bHQoKSBwcmVmLlZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4geGQubGF6eUluaXQoKS5EZWZhdWx0LmdldCh4ZCkgfQotZnVuYyAoeGQgKkV4dGVuc2lvbikgRGVmYXVsdEVudW1WYWx1ZSgpIHByZWYuRW51bVZhbHVlRGVzY3JpcHRvciB7IHJldHVybiB4ZC5sYXp5SW5pdCgpLkRlZmF1bHQuZW51bSB9Ci1mdW5jICh4ZCAqRXh0ZW5zaW9uKSBDb250YWluaW5nT25lb2YoKSBwcmVmLk9uZW9mRGVzY3JpcHRvciAgICAgIHsgcmV0dXJuIG5pbCB9Ci1mdW5jICh4ZCAqRXh0ZW5zaW9uKSBDb250YWluaW5nTWVzc2FnZSgpIHByZWYuTWVzc2FnZURlc2NyaXB0b3IgIHsgcmV0dXJuIHhkLkwxLkV4dGVuZGVlIH0KLWZ1bmMgKHhkICpFeHRlbnNpb24pIEVudW0oKSBwcmVmLkVudW1EZXNjcmlwdG9yICAgICAgICAgICAgICAgICAgeyByZXR1cm4geGQubGF6eUluaXQoKS5FbnVtIH0KLWZ1bmMgKHhkICpFeHRlbnNpb24pIE1lc3NhZ2UoKSBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yICAgICAgICAgICAgeyByZXR1cm4geGQubGF6eUluaXQoKS5NZXNzYWdlIH0KLWZ1bmMgKHhkICpFeHRlbnNpb24pIEZvcm1hdChzIGZtdC5TdGF0ZSwgciBydW5lKSAgICAgICAgICAgICAgICAgeyBkZXNjZm10LkZvcm1hdERlc2MocywgciwgeGQpIH0KLWZ1bmMgKHhkICpFeHRlbnNpb24pIFByb3RvVHlwZShwcmVmLkZpZWxkRGVzY3JpcHRvcikgICAgICAgICAgICAge30KLWZ1bmMgKHhkICpFeHRlbnNpb24pIFByb3RvSW50ZXJuYWwocHJhZ21hLkRvTm90SW1wbGVtZW50KSAgICAgICAge30KK2Z1bmMgKHhkICpFeHRlbnNpb24pIElzUGFja2VkKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiB4ZC5sYXp5SW5pdCgpLklzUGFja2VkIH0KK2Z1bmMgKHhkICpFeHRlbnNpb24pIElzRXh0ZW5zaW9uKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiB0cnVlIH0KK2Z1bmMgKHhkICpFeHRlbnNpb24pIElzV2VhaygpIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmYWxzZSB9CitmdW5jICh4ZCAqRXh0ZW5zaW9uKSBJc0xpc3QoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4geGQuQ2FyZGluYWxpdHkoKSA9PSBwcm90b3JlZmxlY3QuUmVwZWF0ZWQgfQorZnVuYyAoeGQgKkV4dGVuc2lvbikgSXNNYXAoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZhbHNlIH0KK2Z1bmMgKHhkICpFeHRlbnNpb24pIE1hcEtleSgpIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IgICB7IHJldHVybiBuaWwgfQorZnVuYyAoeGQgKkV4dGVuc2lvbikgTWFwVmFsdWUoKSBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yIHsgcmV0dXJuIG5pbCB9CitmdW5jICh4ZCAqRXh0ZW5zaW9uKSBIYXNEZWZhdWx0KCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4geGQubGF6eUluaXQoKS5EZWZhdWx0LmhhcyB9CitmdW5jICh4ZCAqRXh0ZW5zaW9uKSBEZWZhdWx0KCkgcHJvdG9yZWZsZWN0LlZhbHVlICAgICAgICAgICAgeyByZXR1cm4geGQubGF6eUluaXQoKS5EZWZhdWx0LmdldCh4ZCkgfQorZnVuYyAoeGQgKkV4dGVuc2lvbikgRGVmYXVsdEVudW1WYWx1ZSgpIHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9yIHsKKwlyZXR1cm4geGQubGF6eUluaXQoKS5EZWZhdWx0LmVudW0KK30KK2Z1bmMgKHhkICpFeHRlbnNpb24pIENvbnRhaW5pbmdPbmVvZigpIHByb3RvcmVmbGVjdC5PbmVvZkRlc2NyaXB0b3IgICAgIHsgcmV0dXJuIG5pbCB9CitmdW5jICh4ZCAqRXh0ZW5zaW9uKSBDb250YWluaW5nTWVzc2FnZSgpIHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvciB7IHJldHVybiB4ZC5MMS5FeHRlbmRlZSB9CitmdW5jICh4ZCAqRXh0ZW5zaW9uKSBFbnVtKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yICAgICAgICAgICAgICAgICB7IHJldHVybiB4ZC5sYXp5SW5pdCgpLkVudW0gfQorZnVuYyAoeGQgKkV4dGVuc2lvbikgTWVzc2FnZSgpIHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvciAgICAgICAgICAgeyByZXR1cm4geGQubGF6eUluaXQoKS5NZXNzYWdlIH0KK2Z1bmMgKHhkICpFeHRlbnNpb24pIEZvcm1hdChzIGZtdC5TdGF0ZSwgciBydW5lKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZGVzY2ZtdC5Gb3JtYXREZXNjKHMsIHIsIHhkKSB9CitmdW5jICh4ZCAqRXh0ZW5zaW9uKSBQcm90b1R5cGUocHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgICAgICAgICAgICB7fQorZnVuYyAoeGQgKkV4dGVuc2lvbikgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpICAgICAgICAgICAgICAge30KIGZ1bmMgKHhkICpFeHRlbnNpb24pIGxhenlJbml0KCkgKkV4dGVuc2lvbkwyIHsKIAl4ZC5MMC5QYXJlbnRGaWxlLmxhenlJbml0KCkgLy8gaW1wbGljaXRseSBpbml0aWFsaXplcyBMMgogCXJldHVybiB4ZC5MMgpAQCAtNDIxLDcgKzQ5Myw3IEBACiAJfQogCVNlcnZpY2VMMSBzdHJ1Y3R7fQogCVNlcnZpY2VMMiBzdHJ1Y3QgewotCQlPcHRpb25zIGZ1bmMoKSBwcmVmLlByb3RvTWVzc2FnZQorCQlPcHRpb25zIGZ1bmMoKSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlCiAJCU1ldGhvZHMgTWV0aG9kcwogCX0KIApAQCAtNDMwLDQ4ICs1MDIsNDggQEAKIAkJTDEgTWV0aG9kTDEKIAl9CiAJTWV0aG9kTDEgc3RydWN0IHsKLQkJT3B0aW9ucyAgICAgICAgICAgZnVuYygpIHByZWYuUHJvdG9NZXNzYWdlCi0JCUlucHV0ICAgICAgICAgICAgIHByZWYuTWVzc2FnZURlc2NyaXB0b3IKLQkJT3V0cHV0ICAgICAgICAgICAgcHJlZi5NZXNzYWdlRGVzY3JpcHRvcgorCQlPcHRpb25zICAgICAgICAgICBmdW5jKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZQorCQlJbnB1dCAgICAgICAgICAgICBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IKKwkJT3V0cHV0ICAgICAgICAgICAgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yCiAJCUlzU3RyZWFtaW5nQ2xpZW50IGJvb2wKIAkJSXNTdHJlYW1pbmdTZXJ2ZXIgYm9vbAogCX0KICkKIAotZnVuYyAoc2QgKlNlcnZpY2UpIE9wdGlvbnMoKSBwcmVmLlByb3RvTWVzc2FnZSB7CitmdW5jIChzZCAqU2VydmljZSkgT3B0aW9ucygpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgewogCWlmIGYgOj0gc2QubGF6eUluaXQoKS5PcHRpb25zOyBmICE9IG5pbCB7CiAJCXJldHVybiBmKCkKIAl9CiAJcmV0dXJuIGRlc2NvcHRzLlNlcnZpY2UKIH0KLWZ1bmMgKHNkICpTZXJ2aWNlKSBNZXRob2RzKCkgcHJlZi5NZXRob2REZXNjcmlwdG9ycyAgICAgeyByZXR1cm4gJnNkLmxhenlJbml0KCkuTWV0aG9kcyB9Ci1mdW5jIChzZCAqU2VydmljZSkgRm9ybWF0KHMgZm10LlN0YXRlLCByIHJ1bmUpICAgICAgICAgIHsgZGVzY2ZtdC5Gb3JtYXREZXNjKHMsIHIsIHNkKSB9Ci1mdW5jIChzZCAqU2VydmljZSkgUHJvdG9UeXBlKHByZWYuU2VydmljZURlc2NyaXB0b3IpICAgIHt9Ci1mdW5jIChzZCAqU2VydmljZSkgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpIHt9CitmdW5jIChzZCAqU2VydmljZSkgTWV0aG9kcygpIHByb3RvcmVmbGVjdC5NZXRob2REZXNjcmlwdG9ycyAgeyByZXR1cm4gJnNkLmxhenlJbml0KCkuTWV0aG9kcyB9CitmdW5jIChzZCAqU2VydmljZSkgRm9ybWF0KHMgZm10LlN0YXRlLCByIHJ1bmUpICAgICAgICAgICAgICAgeyBkZXNjZm10LkZvcm1hdERlc2Mocywgciwgc2QpIH0KK2Z1bmMgKHNkICpTZXJ2aWNlKSBQcm90b1R5cGUocHJvdG9yZWZsZWN0LlNlcnZpY2VEZXNjcmlwdG9yKSB7fQorZnVuYyAoc2QgKlNlcnZpY2UpIFByb3RvSW50ZXJuYWwocHJhZ21hLkRvTm90SW1wbGVtZW50KSAgICAgIHt9CiBmdW5jIChzZCAqU2VydmljZSkgbGF6eUluaXQoKSAqU2VydmljZUwyIHsKIAlzZC5MMC5QYXJlbnRGaWxlLmxhenlJbml0KCkgLy8gaW1wbGljaXRseSBpbml0aWFsaXplcyBMMgogCXJldHVybiBzZC5MMgogfQogCi1mdW5jIChtZCAqTWV0aG9kKSBPcHRpb25zKCkgcHJlZi5Qcm90b01lc3NhZ2UgeworZnVuYyAobWQgKk1ldGhvZCkgT3B0aW9ucygpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgewogCWlmIGYgOj0gbWQuTDEuT3B0aW9uczsgZiAhPSBuaWwgewogCQlyZXR1cm4gZigpCiAJfQogCXJldHVybiBkZXNjb3B0cy5NZXRob2QKIH0KLWZ1bmMgKG1kICpNZXRob2QpIElucHV0KCkgcHJlZi5NZXNzYWdlRGVzY3JpcHRvciAgICAgICB7IHJldHVybiBtZC5MMS5JbnB1dCB9Ci1mdW5jIChtZCAqTWV0aG9kKSBPdXRwdXQoKSBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yICAgICAgeyByZXR1cm4gbWQuTDEuT3V0cHV0IH0KLWZ1bmMgKG1kICpNZXRob2QpIElzU3RyZWFtaW5nQ2xpZW50KCkgYm9vbCAgICAgICAgICAgICB7IHJldHVybiBtZC5MMS5Jc1N0cmVhbWluZ0NsaWVudCB9Ci1mdW5jIChtZCAqTWV0aG9kKSBJc1N0cmVhbWluZ1NlcnZlcigpIGJvb2wgICAgICAgICAgICAgeyByZXR1cm4gbWQuTDEuSXNTdHJlYW1pbmdTZXJ2ZXIgfQotZnVuYyAobWQgKk1ldGhvZCkgRm9ybWF0KHMgZm10LlN0YXRlLCByIHJ1bmUpICAgICAgICAgIHsgZGVzY2ZtdC5Gb3JtYXREZXNjKHMsIHIsIG1kKSB9Ci1mdW5jIChtZCAqTWV0aG9kKSBQcm90b1R5cGUocHJlZi5NZXRob2REZXNjcmlwdG9yKSAgICAge30KLWZ1bmMgKG1kICpNZXRob2QpIFByb3RvSW50ZXJuYWwocHJhZ21hLkRvTm90SW1wbGVtZW50KSB7fQorZnVuYyAobWQgKk1ldGhvZCkgSW5wdXQoKSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IgICB7IHJldHVybiBtZC5MMS5JbnB1dCB9CitmdW5jIChtZCAqTWV0aG9kKSBPdXRwdXQoKSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IgIHsgcmV0dXJuIG1kLkwxLk91dHB1dCB9CitmdW5jIChtZCAqTWV0aG9kKSBJc1N0cmVhbWluZ0NsaWVudCgpIGJvb2wgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG1kLkwxLklzU3RyZWFtaW5nQ2xpZW50IH0KK2Z1bmMgKG1kICpNZXRob2QpIElzU3RyZWFtaW5nU2VydmVyKCkgYm9vbCAgICAgICAgICAgICAgICAgeyByZXR1cm4gbWQuTDEuSXNTdHJlYW1pbmdTZXJ2ZXIgfQorZnVuYyAobWQgKk1ldGhvZCkgRm9ybWF0KHMgZm10LlN0YXRlLCByIHJ1bmUpICAgICAgICAgICAgICB7IGRlc2NmbXQuRm9ybWF0RGVzYyhzLCByLCBtZCkgfQorZnVuYyAobWQgKk1ldGhvZCkgUHJvdG9UeXBlKHByb3RvcmVmbGVjdC5NZXRob2REZXNjcmlwdG9yKSB7fQorZnVuYyAobWQgKk1ldGhvZCkgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpICAgICB7fQogCiAvLyBTdXJyb2dhdGUgZmlsZXMgYXJlIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBzdGFuZGFsb25lIGRlc2NyaXB0b3JzCiAvLyB3aGVyZSB0aGUgc3ludGF4IGlzIG9ubHkgaW5mb3JtYXRpb24gZGVyaXZlZCBmcm9tIHRoZSBwYXJlbnQgZmlsZS4KIHZhciAoCi0JU3Vycm9nYXRlUHJvdG8yID0gJkZpbGV7TDE6IEZpbGVMMXtTeW50YXg6IHByZWYuUHJvdG8yfSwgTDI6ICZGaWxlTDJ7fX0KLQlTdXJyb2dhdGVQcm90bzMgPSAmRmlsZXtMMTogRmlsZUwxe1N5bnRheDogcHJlZi5Qcm90bzN9LCBMMjogJkZpbGVMMnt9fQorCVN1cnJvZ2F0ZVByb3RvMiA9ICZGaWxle0wxOiBGaWxlTDF7U3ludGF4OiBwcm90b3JlZmxlY3QuUHJvdG8yfSwgTDI6ICZGaWxlTDJ7fX0KKwlTdXJyb2dhdGVQcm90bzMgPSAmRmlsZXtMMTogRmlsZUwxe1N5bnRheDogcHJvdG9yZWZsZWN0LlByb3RvM30sIEwyOiAmRmlsZUwye319CiApCiAKIHR5cGUgKApAQCAtNDc5LDI0ICs1NTEsMjQgQEAKIAkJTDAgQmFzZUwwCiAJfQogCUJhc2VMMCBzdHJ1Y3QgewotCQlGdWxsTmFtZSAgIHByZWYuRnVsbE5hbWUgLy8gbXVzdCBiZSBwb3B1bGF0ZWQKLQkJUGFyZW50RmlsZSAqRmlsZSAgICAgICAgIC8vIG11c3QgYmUgcG9wdWxhdGVkCi0JCVBhcmVudCAgICAgcHJlZi5EZXNjcmlwdG9yCisJCUZ1bGxOYW1lICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lIC8vIG11c3QgYmUgcG9wdWxhdGVkCisJCVBhcmVudEZpbGUgKkZpbGUgICAgICAgICAgICAgICAgIC8vIG11c3QgYmUgcG9wdWxhdGVkCisJCVBhcmVudCAgICAgcHJvdG9yZWZsZWN0LkRlc2NyaXB0b3IKIAkJSW5kZXggICAgICBpbnQKIAl9CiApCiAKLWZ1bmMgKGQgKkJhc2UpIE5hbWUoKSBwcmVmLk5hbWUgICAgICAgICB7IHJldHVybiBkLkwwLkZ1bGxOYW1lLk5hbWUoKSB9Ci1mdW5jIChkICpCYXNlKSBGdWxsTmFtZSgpIHByZWYuRnVsbE5hbWUgeyByZXR1cm4gZC5MMC5GdWxsTmFtZSB9Ci1mdW5jIChkICpCYXNlKSBQYXJlbnRGaWxlKCkgcHJlZi5GaWxlRGVzY3JpcHRvciB7CitmdW5jIChkICpCYXNlKSBOYW1lKCkgcHJvdG9yZWZsZWN0Lk5hbWUgICAgICAgICB7IHJldHVybiBkLkwwLkZ1bGxOYW1lLk5hbWUoKSB9CitmdW5jIChkICpCYXNlKSBGdWxsTmFtZSgpIHByb3RvcmVmbGVjdC5GdWxsTmFtZSB7IHJldHVybiBkLkwwLkZ1bGxOYW1lIH0KK2Z1bmMgKGQgKkJhc2UpIFBhcmVudEZpbGUoKSBwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IgewogCWlmIGQuTDAuUGFyZW50RmlsZSA9PSBTdXJyb2dhdGVQcm90bzIgfHwgZC5MMC5QYXJlbnRGaWxlID09IFN1cnJvZ2F0ZVByb3RvMyB7CiAJCXJldHVybiBuaWwgLy8gc3Vycm9nYXRlIGZpbGVzIGFyZSBub3QgcmVhbCBwYXJlbnRzCiAJfQogCXJldHVybiBkLkwwLlBhcmVudEZpbGUKIH0KLWZ1bmMgKGQgKkJhc2UpIFBhcmVudCgpIHByZWYuRGVzY3JpcHRvciAgICAgICAgICAgICB7IHJldHVybiBkLkwwLlBhcmVudCB9CitmdW5jIChkICpCYXNlKSBQYXJlbnQoKSBwcm90b3JlZmxlY3QuRGVzY3JpcHRvciAgICAgeyByZXR1cm4gZC5MMC5QYXJlbnQgfQogZnVuYyAoZCAqQmFzZSkgSW5kZXgoKSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGQuTDAuSW5kZXggfQotZnVuYyAoZCAqQmFzZSkgU3ludGF4KCkgcHJlZi5TeW50YXggICAgICAgICAgICAgICAgIHsgcmV0dXJuIGQuTDAuUGFyZW50RmlsZS5TeW50YXgoKSB9CitmdW5jIChkICpCYXNlKSBTeW50YXgoKSBwcm90b3JlZmxlY3QuU3ludGF4ICAgICAgICAgeyByZXR1cm4gZC5MMC5QYXJlbnRGaWxlLlN5bnRheCgpIH0KIGZ1bmMgKGQgKkJhc2UpIElzUGxhY2Vob2xkZXIoKSBib29sICAgICAgICAgICAgICAgICB7IHJldHVybiBmYWxzZSB9CiBmdW5jIChkICpCYXNlKSBQcm90b0ludGVybmFsKHByYWdtYS5Eb05vdEltcGxlbWVudCkge30KIApAQCAtNTEzLDcgKzU4NSw3IEBACiAJcy5uYW1lSlNPTiA9IG5hbWUKIH0KIAotZnVuYyAocyAqc3RyaW5nTmFtZSkgbGF6eUluaXQoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpICpzdHJpbmdOYW1lIHsKK2Z1bmMgKHMgKnN0cmluZ05hbWUpIGxhenlJbml0KGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpICpzdHJpbmdOYW1lIHsKIAlzLm9uY2UuRG8oZnVuYygpIHsKIAkJaWYgZmQuSXNFeHRlbnNpb24oKSB7CiAJCQkvLyBGb3IgZXh0ZW5zaW9ucywgSlNPTiBhbmQgdGV4dCBhcmUgZm9ybWF0dGVkIHRoZSBzYW1lIHdheS4KQEAgLTUzMyw3ICs2MDUsNyBAQAogCiAJCQkvLyBGb3JtYXQgdGhlIHRleHQgbmFtZS4KIAkJCXMubmFtZVRleHQgPSBzdHJpbmcoZmQuTmFtZSgpKQotCQkJaWYgZmQuS2luZCgpID09IHByZWYuR3JvdXBLaW5kIHsKKwkJCWlmIGZkLktpbmQoKSA9PSBwcm90b3JlZmxlY3QuR3JvdXBLaW5kIHsKIAkJCQlzLm5hbWVUZXh0ID0gc3RyaW5nKGZkLk1lc3NhZ2UoKS5OYW1lKCkpCiAJCQl9CiAJCX0KQEAgLTU0MSwxMCArNjEzLDEwIEBACiAJcmV0dXJuIHMKIH0KIAotZnVuYyAocyAqc3RyaW5nTmFtZSkgZ2V0SlNPTihmZCBwcmVmLkZpZWxkRGVzY3JpcHRvcikgc3RyaW5nIHsgcmV0dXJuIHMubGF6eUluaXQoZmQpLm5hbWVKU09OIH0KLWZ1bmMgKHMgKnN0cmluZ05hbWUpIGdldFRleHQoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpIHN0cmluZyB7IHJldHVybiBzLmxhenlJbml0KGZkKS5uYW1lVGV4dCB9CitmdW5jIChzICpzdHJpbmdOYW1lKSBnZXRKU09OKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpIHN0cmluZyB7IHJldHVybiBzLmxhenlJbml0KGZkKS5uYW1lSlNPTiB9CitmdW5jIChzICpzdHJpbmdOYW1lKSBnZXRUZXh0KGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpIHN0cmluZyB7IHJldHVybiBzLmxhenlJbml0KGZkKS5uYW1lVGV4dCB9CiAKLWZ1bmMgRGVmYXVsdFZhbHVlKHYgcHJlZi5WYWx1ZSwgZXYgcHJlZi5FbnVtVmFsdWVEZXNjcmlwdG9yKSBkZWZhdWx0VmFsdWUgeworZnVuYyBEZWZhdWx0VmFsdWUodiBwcm90b3JlZmxlY3QuVmFsdWUsIGV2IHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9yKSBkZWZhdWx0VmFsdWUgewogCWR2IDo9IGRlZmF1bHRWYWx1ZXtoYXM6IHYuSXNWYWxpZCgpLCB2YWw6IHYsIGVudW06IGV2fQogCWlmIGIsIG9rIDo9IHYuSW50ZXJmYWNlKCkuKFtdYnl0ZSk7IG9rIHsKIAkJLy8gU3RvcmUgYSBjb3B5IG9mIHRoZSBkZWZhdWx0IGJ5dGVzLCBzbyB0aGF0IHdlIGNhbiBkZXRlY3QKQEAgLTU1NCw5ICs2MjYsOSBAQAogCXJldHVybiBkdgogfQogCi1mdW5jIHVubWFyc2hhbERlZmF1bHQoYiBbXWJ5dGUsIGsgcHJlZi5LaW5kLCBwZiAqRmlsZSwgZWQgcHJlZi5FbnVtRGVzY3JpcHRvcikgZGVmYXVsdFZhbHVlIHsKLQl2YXIgZXZzIHByZWYuRW51bVZhbHVlRGVzY3JpcHRvcnMKLQlpZiBrID09IHByZWYuRW51bUtpbmQgeworZnVuYyB1bm1hcnNoYWxEZWZhdWx0KGIgW11ieXRlLCBrIHByb3RvcmVmbGVjdC5LaW5kLCBwZiAqRmlsZSwgZWQgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yKSBkZWZhdWx0VmFsdWUgeworCXZhciBldnMgcHJvdG9yZWZsZWN0LkVudW1WYWx1ZURlc2NyaXB0b3JzCisJaWYgayA9PSBwcm90b3JlZmxlY3QuRW51bUtpbmQgewogCQkvLyBJZiB0aGUgZW51bSBpcyBkZWNsYXJlZCB3aXRoaW4gdGhlIHNhbWUgZmlsZSwgYmUgY2FyZWZ1bCBub3QgdG8KIAkJLy8gYmxpbmRseSBjYWxsIHRoZSBWYWx1ZXMgbWV0aG9kLCBsZXN0IHdlIGJpbmQgb3Vyc2VsdmVzIGluIGEgZGVhZGxvY2suCiAJCWlmIGUsIG9rIDo9IGVkLigqRW51bSk7IG9rICYmIGUuTDAuUGFyZW50RmlsZSA9PSBwZiB7CkBAIC01NjcsOSArNjM5LDkgQEAKIAogCQkvLyBJZiB3ZSBhcmUgdW5hYmxlIHRvIHJlc29sdmUgdGhlIGVudW0gZGVwZW5kZW5jeSwgdXNlIGEgcGxhY2Vob2xkZXIKIAkJLy8gZW51bSB2YWx1ZSBzaW5jZSB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIHBhcnNlIHRoZSBkZWZhdWx0IHZhbHVlLgotCQlpZiBlZC5Jc1BsYWNlaG9sZGVyKCkgJiYgcHJlZi5OYW1lKGIpLklzVmFsaWQoKSB7Ci0JCQl2IDo9IHByZWYuVmFsdWVPZkVudW0oMCkKLQkJCWV2IDo9IFBsYWNlaG9sZGVyRW51bVZhbHVlKGVkLkZ1bGxOYW1lKCkuUGFyZW50KCkuQXBwZW5kKHByZWYuTmFtZShiKSkpCisJCWlmIGVkLklzUGxhY2Vob2xkZXIoKSAmJiBwcm90b3JlZmxlY3QuTmFtZShiKS5Jc1ZhbGlkKCkgeworCQkJdiA6PSBwcm90b3JlZmxlY3QuVmFsdWVPZkVudW0oMCkKKwkJCWV2IDo9IFBsYWNlaG9sZGVyRW51bVZhbHVlKGVkLkZ1bGxOYW1lKCkuUGFyZW50KCkuQXBwZW5kKHByb3RvcmVmbGVjdC5OYW1lKGIpKSkKIAkJCXJldHVybiBEZWZhdWx0VmFsdWUodiwgZXYpCiAJCX0KIAl9CkBAIC01ODMsNDEgKzY1NSw0MSBAQAogCiB0eXBlIGRlZmF1bHRWYWx1ZSBzdHJ1Y3QgewogCWhhcyAgIGJvb2wKLQl2YWwgICBwcmVmLlZhbHVlCi0JZW51bSAgcHJlZi5FbnVtVmFsdWVEZXNjcmlwdG9yCisJdmFsICAgcHJvdG9yZWZsZWN0LlZhbHVlCisJZW51bSAgcHJvdG9yZWZsZWN0LkVudW1WYWx1ZURlc2NyaXB0b3IKIAlieXRlcyBbXWJ5dGUKIH0KIAotZnVuYyAoZHYgKmRlZmF1bHRWYWx1ZSkgZ2V0KGZkIHByZWYuRmllbGREZXNjcmlwdG9yKSBwcmVmLlZhbHVlIHsKK2Z1bmMgKGR2ICpkZWZhdWx0VmFsdWUpIGdldChmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCS8vIFJldHVybiB0aGUgemVybyB2YWx1ZSBhcyB0aGUgZGVmYXVsdCBpZiB1bnBvcHVsYXRlZC4KIAlpZiAhZHYuaGFzIHsKLQkJaWYgZmQuQ2FyZGluYWxpdHkoKSA9PSBwcmVmLlJlcGVhdGVkIHsKLQkJCXJldHVybiBwcmVmLlZhbHVle30KKwkJaWYgZmQuQ2FyZGluYWxpdHkoKSA9PSBwcm90b3JlZmxlY3QuUmVwZWF0ZWQgeworCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZXt9CiAJCX0KIAkJc3dpdGNoIGZkLktpbmQoKSB7Ci0JCWNhc2UgcHJlZi5Cb29sS2luZDoKLQkJCXJldHVybiBwcmVmLlZhbHVlT2ZCb29sKGZhbHNlKQotCQljYXNlIHByZWYuSW50MzJLaW5kLCBwcmVmLlNpbnQzMktpbmQsIHByZWYuU2ZpeGVkMzJLaW5kOgotCQkJcmV0dXJuIHByZWYuVmFsdWVPZkludDMyKDApCi0JCWNhc2UgcHJlZi5JbnQ2NEtpbmQsIHByZWYuU2ludDY0S2luZCwgcHJlZi5TZml4ZWQ2NEtpbmQ6Ci0JCQlyZXR1cm4gcHJlZi5WYWx1ZU9mSW50NjQoMCkKLQkJY2FzZSBwcmVmLlVpbnQzMktpbmQsIHByZWYuRml4ZWQzMktpbmQ6Ci0JCQlyZXR1cm4gcHJlZi5WYWx1ZU9mVWludDMyKDApCi0JCWNhc2UgcHJlZi5VaW50NjRLaW5kLCBwcmVmLkZpeGVkNjRLaW5kOgotCQkJcmV0dXJuIHByZWYuVmFsdWVPZlVpbnQ2NCgwKQotCQljYXNlIHByZWYuRmxvYXRLaW5kOgotCQkJcmV0dXJuIHByZWYuVmFsdWVPZkZsb2F0MzIoMCkKLQkJY2FzZSBwcmVmLkRvdWJsZUtpbmQ6Ci0JCQlyZXR1cm4gcHJlZi5WYWx1ZU9mRmxvYXQ2NCgwKQotCQljYXNlIHByZWYuU3RyaW5nS2luZDoKLQkJCXJldHVybiBwcmVmLlZhbHVlT2ZTdHJpbmcoIiIpCi0JCWNhc2UgcHJlZi5CeXRlc0tpbmQ6Ci0JCQlyZXR1cm4gcHJlZi5WYWx1ZU9mQnl0ZXMobmlsKQotCQljYXNlIHByZWYuRW51bUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkJvb2xLaW5kOgorCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mQm9vbChmYWxzZSkKKwkJY2FzZSBwcm90b3JlZmxlY3QuSW50MzJLaW5kLCBwcm90b3JlZmxlY3QuU2ludDMyS2luZCwgcHJvdG9yZWZsZWN0LlNmaXhlZDMyS2luZDoKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkludDMyKDApCisJCWNhc2UgcHJvdG9yZWZsZWN0LkludDY0S2luZCwgcHJvdG9yZWZsZWN0LlNpbnQ2NEtpbmQsIHByb3RvcmVmbGVjdC5TZml4ZWQ2NEtpbmQ6CisJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZJbnQ2NCgwKQorCQljYXNlIHByb3RvcmVmbGVjdC5VaW50MzJLaW5kLCBwcm90b3JlZmxlY3QuRml4ZWQzMktpbmQ6CisJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZVaW50MzIoMCkKKwkJY2FzZSBwcm90b3JlZmxlY3QuVWludDY0S2luZCwgcHJvdG9yZWZsZWN0LkZpeGVkNjRLaW5kOgorCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mVWludDY0KDApCisJCWNhc2UgcHJvdG9yZWZsZWN0LkZsb2F0S2luZDoKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkZsb2F0MzIoMCkKKwkJY2FzZSBwcm90b3JlZmxlY3QuRG91YmxlS2luZDoKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkZsb2F0NjQoMCkKKwkJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZDoKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZlN0cmluZygiIikKKwkJY2FzZSBwcm90b3JlZmxlY3QuQnl0ZXNLaW5kOgorCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mQnl0ZXMobmlsKQorCQljYXNlIHByb3RvcmVmbGVjdC5FbnVtS2luZDoKIAkJCWlmIGV2cyA6PSBmZC5FbnVtKCkuVmFsdWVzKCk7IGV2cy5MZW4oKSA+IDAgewotCQkJCXJldHVybiBwcmVmLlZhbHVlT2ZFbnVtKGV2cy5HZXQoMCkuTnVtYmVyKCkpCisJCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mRW51bShldnMuR2V0KDApLk51bWJlcigpKQogCQkJfQotCQkJcmV0dXJuIHByZWYuVmFsdWVPZkVudW0oMCkKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkVudW0oMCkKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjL2Rlc2NfaW5pdC5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy9kZXNjX2luaXQuZ28KaW5kZXggNjZlMWZlZS4uMjM3ZTY0ZiAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjL2Rlc2NfaW5pdC5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MvZGVzY19pbml0LmdvCkBAIC01LDEyICs1LDEzIEBACiBwYWNrYWdlIGZpbGVkZXNjCiAKIGltcG9ydCAoCisJImZtdCIKIAkic3luYyIKIAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3dpcmUiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzIgotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKICkKIAogLy8gZmlsZVJhdyBpcyBhIGRhdGEgc3RydWN0IHVzZWQgd2hlbiBpbml0aWFsaXppbmcgYSBmaWxlIGRlc2NyaXB0b3IgZnJvbQpAQCAtOTUsOSArOTYsMTAgQEAKIAlzYiA6PSBnZXRCdWlsZGVyKCkKIAlkZWZlciBwdXRCdWlsZGVyKHNiKQogCi0JdmFyIHByZXZGaWVsZCBwcmVmLkZpZWxkTnVtYmVyCisJdmFyIHByZXZGaWVsZCBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIKIAl2YXIgbnVtRW51bXMsIG51bU1lc3NhZ2VzLCBudW1FeHRlbnNpb25zLCBudW1TZXJ2aWNlcyBpbnQKIAl2YXIgcG9zRW51bXMsIHBvc01lc3NhZ2VzLCBwb3NFeHRlbnNpb25zLCBwb3NTZXJ2aWNlcyBpbnQKKwl2YXIgb3B0aW9ucyBbXWJ5dGUKIAliMCA6PSBiCiAJZm9yIGxlbihiKSA+IDAgewogCQludW0sIHR5cCwgbiA6PSBwcm90b3dpcmUuQ29uc3VtZVRhZyhiKQpAQCAtMTEwLDE2ICsxMTIsMjAgQEAKIAkJCWNhc2UgZ2VuaWQuRmlsZURlc2NyaXB0b3JQcm90b19TeW50YXhfZmllbGRfbnVtYmVyOgogCQkJCXN3aXRjaCBzdHJpbmcodikgewogCQkJCWNhc2UgInByb3RvMiI6Ci0JCQkJCWZkLkwxLlN5bnRheCA9IHByZWYuUHJvdG8yCisJCQkJCWZkLkwxLlN5bnRheCA9IHByb3RvcmVmbGVjdC5Qcm90bzIKIAkJCQljYXNlICJwcm90bzMiOgotCQkJCQlmZC5MMS5TeW50YXggPSBwcmVmLlByb3RvMworCQkJCQlmZC5MMS5TeW50YXggPSBwcm90b3JlZmxlY3QuUHJvdG8zCisJCQkJY2FzZSAiZWRpdGlvbnMiOgorCQkJCQlmZC5MMS5TeW50YXggPSBwcm90b3JlZmxlY3QuRWRpdGlvbnMKIAkJCQlkZWZhdWx0OgogCQkJCQlwYW5pYygiaW52YWxpZCBzeW50YXgiKQogCQkJCX0KIAkJCWNhc2UgZ2VuaWQuRmlsZURlc2NyaXB0b3JQcm90b19OYW1lX2ZpZWxkX251bWJlcjoKIAkJCQlmZC5MMS5QYXRoID0gc2IuTWFrZVN0cmluZyh2KQogCQkJY2FzZSBnZW5pZC5GaWxlRGVzY3JpcHRvclByb3RvX1BhY2thZ2VfZmllbGRfbnVtYmVyOgotCQkJCWZkLkwxLlBhY2thZ2UgPSBwcmVmLkZ1bGxOYW1lKHNiLk1ha2VTdHJpbmcodikpCisJCQkJZmQuTDEuUGFja2FnZSA9IHByb3RvcmVmbGVjdC5GdWxsTmFtZShzYi5NYWtlU3RyaW5nKHYpKQorCQkJY2FzZSBnZW5pZC5GaWxlRGVzY3JpcHRvclByb3RvX09wdGlvbnNfZmllbGRfbnVtYmVyOgorCQkJCW9wdGlvbnMgPSB2CiAJCQljYXNlIGdlbmlkLkZpbGVEZXNjcmlwdG9yUHJvdG9fRW51bVR5cGVfZmllbGRfbnVtYmVyOgogCQkJCWlmIHByZXZGaWVsZCAhPSBnZW5pZC5GaWxlRGVzY3JpcHRvclByb3RvX0VudW1UeXBlX2ZpZWxkX251bWJlciB7CiAJCQkJCWlmIG51bUVudW1zID4gMCB7CkBAIC0xNTQsNiArMTYwLDEzIEBACiAJCQkJbnVtU2VydmljZXMrKwogCQkJfQogCQkJcHJldkZpZWxkID0gbnVtCisJCWNhc2UgcHJvdG93aXJlLlZhcmludFR5cGU6CisJCQl2LCBtIDo9IHByb3Rvd2lyZS5Db25zdW1lVmFyaW50KGIpCisJCQliID0gYlttOl0KKwkJCXN3aXRjaCBudW0geworCQkJY2FzZSBnZW5pZC5GaWxlRGVzY3JpcHRvclByb3RvX0VkaXRpb25fZmllbGRfbnVtYmVyOgorCQkJCWZkLkwxLkVkaXRpb24gPSBFZGl0aW9uKHYpCisJCQl9CiAJCWRlZmF1bHQ6CiAJCQltIDo9IHByb3Rvd2lyZS5Db25zdW1lRmllbGRWYWx1ZShudW0sIHR5cCwgYikKIAkJCWIgPSBiW206XQpAQCAtMTYzLDcgKzE3NiwxNiBAQAogCiAJLy8gSWYgc3ludGF4IGlzIG1pc3NpbmcsIGl0IGlzIGFzc3VtZWQgdG8gYmUgcHJvdG8yLgogCWlmIGZkLkwxLlN5bnRheCA9PSAwIHsKLQkJZmQuTDEuU3ludGF4ID0gcHJlZi5Qcm90bzIKKwkJZmQuTDEuU3ludGF4ID0gcHJvdG9yZWZsZWN0LlByb3RvMgorCX0KKworCWlmIGZkLkwxLlN5bnRheCA9PSBwcm90b3JlZmxlY3QuRWRpdGlvbnMgeworCQlmZC5MMS5FZGl0aW9uRmVhdHVyZXMgPSBnZXRGZWF0dXJlc0ZvcihmZC5MMS5FZGl0aW9uKQorCX0KKworCS8vIFBhcnNlIGVkaXRpb25zIGZlYXR1cmVzIGZyb20gb3B0aW9ucyBpZiBhbnkKKwlpZiBvcHRpb25zICE9IG5pbCB7CisJCWZkLnVubWFyc2hhbFNlZWRPcHRpb25zKG9wdGlvbnMpCiAJfQogCiAJLy8gTXVzdCBhbGxvY2F0ZSBhbGwgZGVjbGFyYXRpb25zIGJlZm9yZSBwYXJzaW5nIGVhY2ggZGVzY3JpcHRvciB0eXBlCkBAIC0yMTksNyArMjQxLDI5IEBACiAJfQogfQogCi1mdW5jIChlZCAqRW51bSkgdW5tYXJzaGFsU2VlZChiIFtdYnl0ZSwgc2IgKnN0cnMuQnVpbGRlciwgcGYgKkZpbGUsIHBkIHByZWYuRGVzY3JpcHRvciwgaSBpbnQpIHsKK2Z1bmMgKGZkICpGaWxlKSB1bm1hcnNoYWxTZWVkT3B0aW9ucyhiIFtdYnl0ZSkgeworCWZvciBiIDo9IGI7IGxlbihiKSA+IDA7IHsKKwkJbnVtLCB0eXAsIG4gOj0gcHJvdG93aXJlLkNvbnN1bWVUYWcoYikKKwkJYiA9IGJbbjpdCisJCXN3aXRjaCB0eXAgeworCQljYXNlIHByb3Rvd2lyZS5CeXRlc1R5cGU6CisJCQl2LCBtIDo9IHByb3Rvd2lyZS5Db25zdW1lQnl0ZXMoYikKKwkJCWIgPSBiW206XQorCQkJc3dpdGNoIG51bSB7CisJCQljYXNlIGdlbmlkLkZpbGVPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX251bWJlcjoKKwkJCQlpZiBmZC5TeW50YXgoKSAhPSBwcm90b3JlZmxlY3QuRWRpdGlvbnMgeworCQkJCQlwYW5pYyhmbXQuU3ByaW50ZigiaW52YWxpZCBkZXNjcmlwdG9yOiB1c2luZyBlZGl0aW9uIGZlYXR1cmVzIGluIGEgcHJvdG8gd2l0aCBzeW50YXggJXMiLCBmZC5TeW50YXgoKSkpCisJCQkJfQorCQkJCWZkLkwxLkVkaXRpb25GZWF0dXJlcyA9IHVubWFyc2hhbEZlYXR1cmVTZXQodiwgZmQuTDEuRWRpdGlvbkZlYXR1cmVzKQorCQkJfQorCQlkZWZhdWx0OgorCQkJbSA6PSBwcm90b3dpcmUuQ29uc3VtZUZpZWxkVmFsdWUobnVtLCB0eXAsIGIpCisJCQliID0gYlttOl0KKwkJfQorCX0KK30KKworZnVuYyAoZWQgKkVudW0pIHVubWFyc2hhbFNlZWQoYiBbXWJ5dGUsIHNiICpzdHJzLkJ1aWxkZXIsIHBmICpGaWxlLCBwZCBwcm90b3JlZmxlY3QuRGVzY3JpcHRvciwgaSBpbnQpIHsKIAllZC5MMC5QYXJlbnRGaWxlID0gcGYKIAllZC5MMC5QYXJlbnQgPSBwZAogCWVkLkwwLkluZGV4ID0gaQpAQCAtMjcxLDEyICszMTUsMTMgQEAKIAl9CiB9CiAKLWZ1bmMgKG1kICpNZXNzYWdlKSB1bm1hcnNoYWxTZWVkKGIgW11ieXRlLCBzYiAqc3Rycy5CdWlsZGVyLCBwZiAqRmlsZSwgcGQgcHJlZi5EZXNjcmlwdG9yLCBpIGludCkgeworZnVuYyAobWQgKk1lc3NhZ2UpIHVubWFyc2hhbFNlZWQoYiBbXWJ5dGUsIHNiICpzdHJzLkJ1aWxkZXIsIHBmICpGaWxlLCBwZCBwcm90b3JlZmxlY3QuRGVzY3JpcHRvciwgaSBpbnQpIHsKIAltZC5MMC5QYXJlbnRGaWxlID0gcGYKIAltZC5MMC5QYXJlbnQgPSBwZAogCW1kLkwwLkluZGV4ID0gaQorCW1kLkwxLkVkaXRpb25GZWF0dXJlcyA9IGZlYXR1cmVzRnJvbVBhcmVudERlc2MobWQuUGFyZW50KCkpCiAKLQl2YXIgcHJldkZpZWxkIHByZWYuRmllbGROdW1iZXIKKwl2YXIgcHJldkZpZWxkIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcgogCXZhciBudW1FbnVtcywgbnVtTWVzc2FnZXMsIG51bUV4dGVuc2lvbnMgaW50CiAJdmFyIHBvc0VudW1zLCBwb3NNZXNzYWdlcywgcG9zRXh0ZW5zaW9ucyBpbnQKIAliMCA6PSBiCkBAIC0zODAsNiArNDI1LDEzIEBACiAJCQljYXNlIGdlbmlkLk1lc3NhZ2VPcHRpb25zX01lc3NhZ2VTZXRXaXJlRm9ybWF0X2ZpZWxkX251bWJlcjoKIAkJCQltZC5MMS5Jc01lc3NhZ2VTZXQgPSBwcm90b3dpcmUuRGVjb2RlQm9vbCh2KQogCQkJfQorCQljYXNlIHByb3Rvd2lyZS5CeXRlc1R5cGU6CisJCQl2LCBtIDo9IHByb3Rvd2lyZS5Db25zdW1lQnl0ZXMoYikKKwkJCWIgPSBiW206XQorCQkJc3dpdGNoIG51bSB7CisJCQljYXNlIGdlbmlkLk1lc3NhZ2VPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX251bWJlcjoKKwkJCQltZC5MMS5FZGl0aW9uRmVhdHVyZXMgPSB1bm1hcnNoYWxGZWF0dXJlU2V0KHYsIG1kLkwxLkVkaXRpb25GZWF0dXJlcykKKwkJCX0KIAkJZGVmYXVsdDoKIAkJCW0gOj0gcHJvdG93aXJlLkNvbnN1bWVGaWVsZFZhbHVlKG51bSwgdHlwLCBiKQogCQkJYiA9IGJbbTpdCkBAIC0zODcsNyArNDM5LDcgQEAKIAl9CiB9CiAKLWZ1bmMgKHhkICpFeHRlbnNpb24pIHVubWFyc2hhbFNlZWQoYiBbXWJ5dGUsIHNiICpzdHJzLkJ1aWxkZXIsIHBmICpGaWxlLCBwZCBwcmVmLkRlc2NyaXB0b3IsIGkgaW50KSB7CitmdW5jICh4ZCAqRXh0ZW5zaW9uKSB1bm1hcnNoYWxTZWVkKGIgW11ieXRlLCBzYiAqc3Rycy5CdWlsZGVyLCBwZiAqRmlsZSwgcGQgcHJvdG9yZWZsZWN0LkRlc2NyaXB0b3IsIGkgaW50KSB7CiAJeGQuTDAuUGFyZW50RmlsZSA9IHBmCiAJeGQuTDAuUGFyZW50ID0gcGQKIAl4ZC5MMC5JbmRleCA9IGkKQEAgLTQwMSwxMSArNDUzLDExIEBACiAJCQliID0gYlttOl0KIAkJCXN3aXRjaCBudW0gewogCQkJY2FzZSBnZW5pZC5GaWVsZERlc2NyaXB0b3JQcm90b19OdW1iZXJfZmllbGRfbnVtYmVyOgotCQkJCXhkLkwxLk51bWJlciA9IHByZWYuRmllbGROdW1iZXIodikKKwkJCQl4ZC5MMS5OdW1iZXIgPSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIodikKIAkJCWNhc2UgZ2VuaWQuRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxfZmllbGRfbnVtYmVyOgotCQkJCXhkLkwxLkNhcmRpbmFsaXR5ID0gcHJlZi5DYXJkaW5hbGl0eSh2KQorCQkJCXhkLkwxLkNhcmRpbmFsaXR5ID0gcHJvdG9yZWZsZWN0LkNhcmRpbmFsaXR5KHYpCiAJCQljYXNlIGdlbmlkLkZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfZmllbGRfbnVtYmVyOgotCQkJCXhkLkwxLktpbmQgPSBwcmVmLktpbmQodikKKwkJCQl4ZC5MMS5LaW5kID0gcHJvdG9yZWZsZWN0LktpbmQodikKIAkJCX0KIAkJY2FzZSBwcm90b3dpcmUuQnl0ZXNUeXBlOgogCQkJdiwgbSA6PSBwcm90b3dpcmUuQ29uc3VtZUJ5dGVzKGIpCkBAIC00MjMsNyArNDc1LDcgQEAKIAl9CiB9CiAKLWZ1bmMgKHNkICpTZXJ2aWNlKSB1bm1hcnNoYWxTZWVkKGIgW11ieXRlLCBzYiAqc3Rycy5CdWlsZGVyLCBwZiAqRmlsZSwgcGQgcHJlZi5EZXNjcmlwdG9yLCBpIGludCkgeworZnVuYyAoc2QgKlNlcnZpY2UpIHVubWFyc2hhbFNlZWQoYiBbXWJ5dGUsIHNiICpzdHJzLkJ1aWxkZXIsIHBmICpGaWxlLCBwZCBwcm90b3JlZmxlY3QuRGVzY3JpcHRvciwgaSBpbnQpIHsKIAlzZC5MMC5QYXJlbnRGaWxlID0gcGYKIAlzZC5MMC5QYXJlbnQgPSBwZAogCXNkLkwwLkluZGV4ID0gaQpAQCAtNDU5LDEzICs1MTEsMTMgQEAKIAogLy8gbWFrZUZ1bGxOYW1lIGNvbnZlcnRzIGIgdG8gYSBwcm90b3JlZmxlY3QuRnVsbE5hbWUsCiAvLyB3aGVyZSBiIG11c3Qgc3RhcnQgd2l0aCBhIGxlYWRpbmcgZG90LgotZnVuYyBtYWtlRnVsbE5hbWUoc2IgKnN0cnMuQnVpbGRlciwgYiBbXWJ5dGUpIHByZWYuRnVsbE5hbWUgeworZnVuYyBtYWtlRnVsbE5hbWUoc2IgKnN0cnMuQnVpbGRlciwgYiBbXWJ5dGUpIHByb3RvcmVmbGVjdC5GdWxsTmFtZSB7CiAJaWYgbGVuKGIpID09IDAgfHwgYlswXSAhPSAnLicgewogCQlwYW5pYygibmFtZSByZWZlcmVuY2UgbXVzdCBiZSBmdWxseSBxdWFsaWZpZWQiKQogCX0KLQlyZXR1cm4gcHJlZi5GdWxsTmFtZShzYi5NYWtlU3RyaW5nKGJbMTpdKSkKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKHNiLk1ha2VTdHJpbmcoYlsxOl0pKQogfQogCi1mdW5jIGFwcGVuZEZ1bGxOYW1lKHNiICpzdHJzLkJ1aWxkZXIsIHByZWZpeCBwcmVmLkZ1bGxOYW1lLCBzdWZmaXggW11ieXRlKSBwcmVmLkZ1bGxOYW1lIHsKLQlyZXR1cm4gc2IuQXBwZW5kRnVsbE5hbWUocHJlZml4LCBwcmVmLk5hbWUoc3Rycy5VbnNhZmVTdHJpbmcoc3VmZml4KSkpCitmdW5jIGFwcGVuZEZ1bGxOYW1lKHNiICpzdHJzLkJ1aWxkZXIsIHByZWZpeCBwcm90b3JlZmxlY3QuRnVsbE5hbWUsIHN1ZmZpeCBbXWJ5dGUpIHByb3RvcmVmbGVjdC5GdWxsTmFtZSB7CisJcmV0dXJuIHNiLkFwcGVuZEZ1bGxOYW1lKHByZWZpeCwgcHJvdG9yZWZsZWN0Lk5hbWUoc3Rycy5VbnNhZmVTdHJpbmcoc3VmZml4KSkpCiB9CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MvZGVzY19sYXp5LmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjL2Rlc2NfbGF6eS5nbwppbmRleCAxOTg0NTFlLi40ODJhNjFjIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MvZGVzY19sYXp5LmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy9kZXNjX2xhenkuZ28KQEAgLTEzLDcgKzEzLDcgQEAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZ2VuaWQiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL3N0cnMiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvIgotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKICkKIAogZnVuYyAoZmQgKkZpbGUpIGxhenlSYXdJbml0KCkgewpAQCAtMzksMTAgKzM5LDEwIEBACiAKIAkJCS8vIFJlc29sdmUgbWVzc2FnZSBmaWVsZCBkZXBlbmRlbmN5LgogCQkJc3dpdGNoIGZkLkwxLktpbmQgewotCQkJY2FzZSBwcmVmLkVudW1LaW5kOgorCQkJY2FzZSBwcm90b3JlZmxlY3QuRW51bUtpbmQ6CiAJCQkJZmQuTDEuRW51bSA9IGZpbGUucmVzb2x2ZUVudW1EZXBlbmRlbmN5KGZkLkwxLkVudW0sIGxpc3RGaWVsZERlcHMsIGRlcElkeCkKIAkJCQlkZXBJZHgrKwotCQkJY2FzZSBwcmVmLk1lc3NhZ2VLaW5kLCBwcmVmLkdyb3VwS2luZDoKKwkJCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VLaW5kLCBwcm90b3JlZmxlY3QuR3JvdXBLaW5kOgogCQkJCWZkLkwxLk1lc3NhZ2UgPSBmaWxlLnJlc29sdmVNZXNzYWdlRGVwZW5kZW5jeShmZC5MMS5NZXNzYWdlLCBsaXN0RmllbGREZXBzLCBkZXBJZHgpCiAJCQkJZGVwSWR4KysKIAkJCX0KQEAgLTYyLDEwICs2MiwxMCBAQAogCiAJCS8vIFJlc29sdmUgZXh0ZW5zaW9uIGZpZWxkIGRlcGVuZGVuY3kuCiAJCXN3aXRjaCB4ZC5MMS5LaW5kIHsKLQkJY2FzZSBwcmVmLkVudW1LaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5FbnVtS2luZDoKIAkJCXhkLkwyLkVudW0gPSBmaWxlLnJlc29sdmVFbnVtRGVwZW5kZW5jeSh4ZC5MMi5FbnVtLCBsaXN0RXh0RGVwcywgZGVwSWR4KQogCQkJZGVwSWR4KysKLQkJY2FzZSBwcmVmLk1lc3NhZ2VLaW5kLCBwcmVmLkdyb3VwS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQsIHByb3RvcmVmbGVjdC5Hcm91cEtpbmQ6CiAJCQl4ZC5MMi5NZXNzYWdlID0gZmlsZS5yZXNvbHZlTWVzc2FnZURlcGVuZGVuY3koeGQuTDIuTWVzc2FnZSwgbGlzdEV4dERlcHMsIGRlcElkeCkKIAkJCWRlcElkeCsrCiAJCX0KQEAgLTkyLDcgKzkyLDcgQEAKIAl9CiB9CiAKLWZ1bmMgKGZpbGUgKkZpbGUpIHJlc29sdmVFbnVtRGVwZW5kZW5jeShlZCBwcmVmLkVudW1EZXNjcmlwdG9yLCBpLCBqIGludDMyKSBwcmVmLkVudW1EZXNjcmlwdG9yIHsKK2Z1bmMgKGZpbGUgKkZpbGUpIHJlc29sdmVFbnVtRGVwZW5kZW5jeShlZCBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IsIGksIGogaW50MzIpIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvciB7CiAJciA6PSBmaWxlLmJ1aWxkZXIuRmlsZVJlZ2lzdHJ5CiAJaWYgciwgb2sgOj0gci4ocmVzb2x2ZXJCeUluZGV4KTsgb2sgewogCQlpZiBlZDIgOj0gci5GaW5kRW51bUJ5SW5kZXgoaSwgaiwgZmlsZS5hbGxFbnVtcywgZmlsZS5hbGxNZXNzYWdlcyk7IGVkMiAhPSBuaWwgewpAQCAtMTA1LDEyICsxMDUsMTIgQEAKIAkJfQogCX0KIAlpZiBkLCBfIDo9IHIuRmluZERlc2NyaXB0b3JCeU5hbWUoZWQuRnVsbE5hbWUoKSk7IGQgIT0gbmlsIHsKLQkJcmV0dXJuIGQuKHByZWYuRW51bURlc2NyaXB0b3IpCisJCXJldHVybiBkLihwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IpCiAJfQogCXJldHVybiBlZAogfQogCi1mdW5jIChmaWxlICpGaWxlKSByZXNvbHZlTWVzc2FnZURlcGVuZGVuY3kobWQgcHJlZi5NZXNzYWdlRGVzY3JpcHRvciwgaSwgaiBpbnQzMikgcHJlZi5NZXNzYWdlRGVzY3JpcHRvciB7CitmdW5jIChmaWxlICpGaWxlKSByZXNvbHZlTWVzc2FnZURlcGVuZGVuY3kobWQgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yLCBpLCBqIGludDMyKSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IgewogCXIgOj0gZmlsZS5idWlsZGVyLkZpbGVSZWdpc3RyeQogCWlmIHIsIG9rIDo9IHIuKHJlc29sdmVyQnlJbmRleCk7IG9rIHsKIAkJaWYgbWQyIDo9IHIuRmluZE1lc3NhZ2VCeUluZGV4KGksIGosIGZpbGUuYWxsRW51bXMsIGZpbGUuYWxsTWVzc2FnZXMpOyBtZDIgIT0gbmlsIHsKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQl9CiAJfQogCWlmIGQsIF8gOj0gci5GaW5kRGVzY3JpcHRvckJ5TmFtZShtZC5GdWxsTmFtZSgpKTsgZCAhPSBuaWwgewotCQlyZXR1cm4gZC4ocHJlZi5NZXNzYWdlRGVzY3JpcHRvcikKKwkJcmV0dXJuIGQuKHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvcikKIAl9CiAJcmV0dXJuIG1kCiB9CkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJCQlpZiBpbXAgPT0gbmlsIHsKIAkJCQkJaW1wID0gUGxhY2Vob2xkZXJGaWxlKHBhdGgpCiAJCQkJfQotCQkJCWZkLkwyLkltcG9ydHMgPSBhcHBlbmQoZmQuTDIuSW1wb3J0cywgcHJlZi5GaWxlSW1wb3J0e0ZpbGVEZXNjcmlwdG9yOiBpbXB9KQorCQkJCWZkLkwyLkltcG9ydHMgPSBhcHBlbmQoZmQuTDIuSW1wb3J0cywgcHJvdG9yZWZsZWN0LkZpbGVJbXBvcnR7RmlsZURlc2NyaXB0b3I6IGltcH0pCiAJCQljYXNlIGdlbmlkLkZpbGVEZXNjcmlwdG9yUHJvdG9fRW51bVR5cGVfZmllbGRfbnVtYmVyOgogCQkJCWZkLkwxLkVudW1zLkxpc3RbZW51bUlkeF0udW5tYXJzaGFsRnVsbCh2LCBzYikKIAkJCQllbnVtSWR4KysKQEAgLTE5OSw3ICsxOTksNyBAQAogCQkJY2FzZSBnZW5pZC5FbnVtRGVzY3JpcHRvclByb3RvX1ZhbHVlX2ZpZWxkX251bWJlcjoKIAkJCQlyYXdWYWx1ZXMgPSBhcHBlbmQocmF3VmFsdWVzLCB2KQogCQkJY2FzZSBnZW5pZC5FbnVtRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkTmFtZV9maWVsZF9udW1iZXI6Ci0JCQkJZWQuTDIuUmVzZXJ2ZWROYW1lcy5MaXN0ID0gYXBwZW5kKGVkLkwyLlJlc2VydmVkTmFtZXMuTGlzdCwgcHJlZi5OYW1lKHNiLk1ha2VTdHJpbmcodikpKQorCQkJCWVkLkwyLlJlc2VydmVkTmFtZXMuTGlzdCA9IGFwcGVuZChlZC5MMi5SZXNlcnZlZE5hbWVzLkxpc3QsIHByb3RvcmVmbGVjdC5OYW1lKHNiLk1ha2VTdHJpbmcodikpKQogCQkJY2FzZSBnZW5pZC5FbnVtRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2VfZmllbGRfbnVtYmVyOgogCQkJCWVkLkwyLlJlc2VydmVkUmFuZ2VzLkxpc3QgPSBhcHBlbmQoZWQuTDIuUmVzZXJ2ZWRSYW5nZXMuTGlzdCwgdW5tYXJzaGFsRW51bVJlc2VydmVkUmFuZ2UodikpCiAJCQljYXNlIGdlbmlkLkVudW1EZXNjcmlwdG9yUHJvdG9fT3B0aW9uc19maWVsZF9udW1iZXI6CkBAIC0yMTksNyArMjE5LDcgQEAKIAllZC5MMi5PcHRpb25zID0gZWQuTDAuUGFyZW50RmlsZS5idWlsZGVyLm9wdGlvbnNVbm1hcnNoYWxlcigmZGVzY29wdHMuRW51bSwgcmF3T3B0aW9ucykKIH0KIAotZnVuYyB1bm1hcnNoYWxFbnVtUmVzZXJ2ZWRSYW5nZShiIFtdYnl0ZSkgKHIgWzJdcHJlZi5FbnVtTnVtYmVyKSB7CitmdW5jIHVubWFyc2hhbEVudW1SZXNlcnZlZFJhbmdlKGIgW11ieXRlKSAociBbMl1wcm90b3JlZmxlY3QuRW51bU51bWJlcikgewogCWZvciBsZW4oYikgPiAwIHsKIAkJbnVtLCB0eXAsIG4gOj0gcHJvdG93aXJlLkNvbnN1bWVUYWcoYikKIAkJYiA9IGJbbjpdCkBAIC0yMjksOSArMjI5LDkgQEAKIAkJCWIgPSBiW206XQogCQkJc3dpdGNoIG51bSB7CiAJCQljYXNlIGdlbmlkLkVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2VfU3RhcnRfZmllbGRfbnVtYmVyOgotCQkJCXJbMF0gPSBwcmVmLkVudW1OdW1iZXIodikKKwkJCQlyWzBdID0gcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIodikKIAkJCWNhc2UgZ2VuaWQuRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZV9FbmRfZmllbGRfbnVtYmVyOgotCQkJCXJbMV0gPSBwcmVmLkVudW1OdW1iZXIodikKKwkJCQlyWzFdID0gcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIodikKIAkJCX0KIAkJZGVmYXVsdDoKIAkJCW0gOj0gcHJvdG93aXJlLkNvbnN1bWVGaWVsZFZhbHVlKG51bSwgdHlwLCBiKQpAQCAtMjQxLDcgKzI0MSw3IEBACiAJcmV0dXJuIHIKIH0KIAotZnVuYyAodmQgKkVudW1WYWx1ZSkgdW5tYXJzaGFsRnVsbChiIFtdYnl0ZSwgc2IgKnN0cnMuQnVpbGRlciwgcGYgKkZpbGUsIHBkIHByZWYuRGVzY3JpcHRvciwgaSBpbnQpIHsKK2Z1bmMgKHZkICpFbnVtVmFsdWUpIHVubWFyc2hhbEZ1bGwoYiBbXWJ5dGUsIHNiICpzdHJzLkJ1aWxkZXIsIHBmICpGaWxlLCBwZCBwcm90b3JlZmxlY3QuRGVzY3JpcHRvciwgaSBpbnQpIHsKIAl2ZC5MMC5QYXJlbnRGaWxlID0gcGYKIAl2ZC5MMC5QYXJlbnQgPSBwZAogCXZkLkwwLkluZGV4ID0gaQpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCQliID0gYlttOl0KIAkJCXN3aXRjaCBudW0gewogCQkJY2FzZSBnZW5pZC5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9fTnVtYmVyX2ZpZWxkX251bWJlcjoKLQkJCQl2ZC5MMS5OdW1iZXIgPSBwcmVmLkVudW1OdW1iZXIodikKKwkJCQl2ZC5MMS5OdW1iZXIgPSBwcm90b3JlZmxlY3QuRW51bU51bWJlcih2KQogCQkJfQogCQljYXNlIHByb3Rvd2lyZS5CeXRlc1R5cGU6CiAJCQl2LCBtIDo9IHByb3Rvd2lyZS5Db25zdW1lQnl0ZXMoYikKQEAgLTI5NCw3ICsyOTQsNyBAQAogCQkJY2FzZSBnZW5pZC5EZXNjcmlwdG9yUHJvdG9fT25lb2ZEZWNsX2ZpZWxkX251bWJlcjoKIAkJCQlyYXdPbmVvZnMgPSBhcHBlbmQocmF3T25lb2ZzLCB2KQogCQkJY2FzZSBnZW5pZC5EZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWROYW1lX2ZpZWxkX251bWJlcjoKLQkJCQltZC5MMi5SZXNlcnZlZE5hbWVzLkxpc3QgPSBhcHBlbmQobWQuTDIuUmVzZXJ2ZWROYW1lcy5MaXN0LCBwcmVmLk5hbWUoc2IuTWFrZVN0cmluZyh2KSkpCisJCQkJbWQuTDIuUmVzZXJ2ZWROYW1lcy5MaXN0ID0gYXBwZW5kKG1kLkwyLlJlc2VydmVkTmFtZXMuTGlzdCwgcHJvdG9yZWZsZWN0Lk5hbWUoc2IuTWFrZVN0cmluZyh2KSkpCiAJCQljYXNlIGdlbmlkLkRlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlX2ZpZWxkX251bWJlcjoKIAkJCQltZC5MMi5SZXNlcnZlZFJhbmdlcy5MaXN0ID0gYXBwZW5kKG1kLkwyLlJlc2VydmVkUmFuZ2VzLkxpc3QsIHVubWFyc2hhbE1lc3NhZ2VSZXNlcnZlZFJhbmdlKHYpKQogCQkJY2FzZSBnZW5pZC5EZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2VfZmllbGRfbnVtYmVyOgpAQCAtMzI2LDcgKzMyNiw3IEBACiAJCWZvciBpLCBiIDo9IHJhbmdlIHJhd0ZpZWxkcyB7CiAJCQlmZCA6PSAmbWQuTDIuRmllbGRzLkxpc3RbaV0KIAkJCWZkLnVubWFyc2hhbEZ1bGwoYiwgc2IsIG1kLkwwLlBhcmVudEZpbGUsIG1kLCBpKQotCQkJaWYgZmQuTDEuQ2FyZGluYWxpdHkgPT0gcHJlZi5SZXF1aXJlZCB7CisJCQlpZiBmZC5MMS5DYXJkaW5hbGl0eSA9PSBwcm90b3JlZmxlY3QuUmVxdWlyZWQgewogCQkJCW1kLkwyLlJlcXVpcmVkTnVtYmVycy5MaXN0ID0gYXBwZW5kKG1kLkwyLlJlcXVpcmVkTnVtYmVycy5MaXN0LCBmZC5MMS5OdW1iZXIpCiAJCQl9CiAJCX0KQEAgLTM1OSw3ICszNTksNyBAQAogCX0KIH0KIAotZnVuYyB1bm1hcnNoYWxNZXNzYWdlUmVzZXJ2ZWRSYW5nZShiIFtdYnl0ZSkgKHIgWzJdcHJlZi5GaWVsZE51bWJlcikgeworZnVuYyB1bm1hcnNoYWxNZXNzYWdlUmVzZXJ2ZWRSYW5nZShiIFtdYnl0ZSkgKHIgWzJdcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKSB7CiAJZm9yIGxlbihiKSA+IDAgewogCQludW0sIHR5cCwgbiA6PSBwcm90b3dpcmUuQ29uc3VtZVRhZyhiKQogCQliID0gYltuOl0KQEAgLTM2OSw5ICszNjksOSBAQAogCQkJYiA9IGJbbTpdCiAJCQlzd2l0Y2ggbnVtIHsKIAkJCWNhc2UgZ2VuaWQuRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2VfU3RhcnRfZmllbGRfbnVtYmVyOgotCQkJCXJbMF0gPSBwcmVmLkZpZWxkTnVtYmVyKHYpCisJCQkJclswXSA9IHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcih2KQogCQkJY2FzZSBnZW5pZC5EZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZV9FbmRfZmllbGRfbnVtYmVyOgotCQkJCXJbMV0gPSBwcmVmLkZpZWxkTnVtYmVyKHYpCisJCQkJclsxXSA9IHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcih2KQogCQkJfQogCQlkZWZhdWx0OgogCQkJbSA6PSBwcm90b3dpcmUuQ29uc3VtZUZpZWxkVmFsdWUobnVtLCB0eXAsIGIpCkBAIC0zODEsNyArMzgxLDcgQEAKIAlyZXR1cm4gcgogfQogCi1mdW5jIHVubWFyc2hhbE1lc3NhZ2VFeHRlbnNpb25SYW5nZShiIFtdYnl0ZSkgKHIgWzJdcHJlZi5GaWVsZE51bWJlciwgcmF3T3B0aW9ucyBbXWJ5dGUpIHsKK2Z1bmMgdW5tYXJzaGFsTWVzc2FnZUV4dGVuc2lvblJhbmdlKGIgW11ieXRlKSAociBbMl1wcm90b3JlZmxlY3QuRmllbGROdW1iZXIsIHJhd09wdGlvbnMgW11ieXRlKSB7CiAJZm9yIGxlbihiKSA+IDAgewogCQludW0sIHR5cCwgbiA6PSBwcm90b3dpcmUuQ29uc3VtZVRhZyhiKQogCQliID0gYltuOl0KQEAgLTM5MSw5ICszOTEsOSBAQAogCQkJYiA9IGJbbTpdCiAJCQlzd2l0Y2ggbnVtIHsKIAkJCWNhc2UgZ2VuaWQuRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlX1N0YXJ0X2ZpZWxkX251bWJlcjoKLQkJCQlyWzBdID0gcHJlZi5GaWVsZE51bWJlcih2KQorCQkJCXJbMF0gPSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIodikKIAkJCWNhc2UgZ2VuaWQuRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlX0VuZF9maWVsZF9udW1iZXI6Ci0JCQkJclsxXSA9IHByZWYuRmllbGROdW1iZXIodikKKwkJCQlyWzFdID0gcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKHYpCiAJCQl9CiAJCWNhc2UgcHJvdG93aXJlLkJ5dGVzVHlwZToKIAkJCXYsIG0gOj0gcHJvdG93aXJlLkNvbnN1bWVCeXRlcyhiKQpAQCAtNDEwLDEwICs0MTAsMTEgQEAKIAlyZXR1cm4gciwgcmF3T3B0aW9ucwogfQogCi1mdW5jIChmZCAqRmllbGQpIHVubWFyc2hhbEZ1bGwoYiBbXWJ5dGUsIHNiICpzdHJzLkJ1aWxkZXIsIHBmICpGaWxlLCBwZCBwcmVmLkRlc2NyaXB0b3IsIGkgaW50KSB7CitmdW5jIChmZCAqRmllbGQpIHVubWFyc2hhbEZ1bGwoYiBbXWJ5dGUsIHNiICpzdHJzLkJ1aWxkZXIsIHBmICpGaWxlLCBwZCBwcm90b3JlZmxlY3QuRGVzY3JpcHRvciwgaSBpbnQpIHsKIAlmZC5MMC5QYXJlbnRGaWxlID0gcGYKIAlmZC5MMC5QYXJlbnQgPSBwZAogCWZkLkwwLkluZGV4ID0gaQorCWZkLkwxLkVkaXRpb25GZWF0dXJlcyA9IGZlYXR1cmVzRnJvbVBhcmVudERlc2MoZmQuUGFyZW50KCkpCiAKIAl2YXIgcmF3VHlwZU5hbWUgW11ieXRlCiAJdmFyIHJhd09wdGlvbnMgW11ieXRlCkBAIC00MjYsMTEgKzQyNywxMSBAQAogCQkJYiA9IGJbbTpdCiAJCQlzd2l0Y2ggbnVtIHsKIAkJCWNhc2UgZ2VuaWQuRmllbGREZXNjcmlwdG9yUHJvdG9fTnVtYmVyX2ZpZWxkX251bWJlcjoKLQkJCQlmZC5MMS5OdW1iZXIgPSBwcmVmLkZpZWxkTnVtYmVyKHYpCisJCQkJZmQuTDEuTnVtYmVyID0gcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKHYpCiAJCQljYXNlIGdlbmlkLkZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsX2ZpZWxkX251bWJlcjoKLQkJCQlmZC5MMS5DYXJkaW5hbGl0eSA9IHByZWYuQ2FyZGluYWxpdHkodikKKwkJCQlmZC5MMS5DYXJkaW5hbGl0eSA9IHByb3RvcmVmbGVjdC5DYXJkaW5hbGl0eSh2KQogCQkJY2FzZSBnZW5pZC5GaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX2ZpZWxkX251bWJlcjoKLQkJCQlmZC5MMS5LaW5kID0gcHJlZi5LaW5kKHYpCisJCQkJZmQuTDEuS2luZCA9IHByb3RvcmVmbGVjdC5LaW5kKHYpCiAJCQljYXNlIGdlbmlkLkZpZWxkRGVzY3JpcHRvclByb3RvX09uZW9mSW5kZXhfZmllbGRfbnVtYmVyOgogCQkJCS8vIEluIE1lc3NhZ2UudW5tYXJzaGFsRnVsbCwgd2UgYWxsb2NhdGUgc2xpY2VzIGZvciBib3RoCiAJCQkJLy8gdGhlIGZpZWxkIGFuZCBvbmVvZiBkZXNjcmlwdG9ycyBiZWZvcmUgdW5tYXJzaGFsaW5nIGVpdGhlcgpAQCAtNDUzLDcgKzQ1NCw3IEBACiAJCQljYXNlIGdlbmlkLkZpZWxkRGVzY3JpcHRvclByb3RvX0pzb25OYW1lX2ZpZWxkX251bWJlcjoKIAkJCQlmZC5MMS5TdHJpbmdOYW1lLkluaXRKU09OKHNiLk1ha2VTdHJpbmcodikpCiAJCQljYXNlIGdlbmlkLkZpZWxkRGVzY3JpcHRvclByb3RvX0RlZmF1bHRWYWx1ZV9maWVsZF9udW1iZXI6Ci0JCQkJZmQuTDEuRGVmYXVsdC52YWwgPSBwcmVmLlZhbHVlT2ZCeXRlcyh2KSAvLyB0ZW1wb3JhcmlseSBzdG9yZSBhcyBieXRlczsgbGF0ZXIgcmVzb2x2ZWQgaW4gcmVzb2x2ZU1lc3NhZ2VzCisJCQkJZmQuTDEuRGVmYXVsdC52YWwgPSBwcm90b3JlZmxlY3QuVmFsdWVPZkJ5dGVzKHYpIC8vIHRlbXBvcmFyaWx5IHN0b3JlIGFzIGJ5dGVzOyBsYXRlciByZXNvbHZlZCBpbiByZXNvbHZlTWVzc2FnZXMKIAkJCWNhc2UgZ2VuaWQuRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZU5hbWVfZmllbGRfbnVtYmVyOgogCQkJCXJhd1R5cGVOYW1lID0gdgogCQkJY2FzZSBnZW5pZC5GaWVsZERlc2NyaXB0b3JQcm90b19PcHRpb25zX2ZpZWxkX251bWJlcjoKQEAgLTQ2NSwxMiArNDY2LDE4IEBACiAJCQliID0gYlttOl0KIAkJfQogCX0KKwlpZiBmZC5TeW50YXgoKSA9PSBwcm90b3JlZmxlY3QuRWRpdGlvbnMgJiYgZmQuTDEuS2luZCA9PSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQgJiYgZmQuTDEuRWRpdGlvbkZlYXR1cmVzLklzRGVsaW1pdGVkRW5jb2RlZCB7CisJCWZkLkwxLktpbmQgPSBwcm90b3JlZmxlY3QuR3JvdXBLaW5kCisJfQorCWlmIGZkLlN5bnRheCgpID09IHByb3RvcmVmbGVjdC5FZGl0aW9ucyAmJiBmZC5MMS5FZGl0aW9uRmVhdHVyZXMuSXNMZWdhY3lSZXF1aXJlZCB7CisJCWZkLkwxLkNhcmRpbmFsaXR5ID0gcHJvdG9yZWZsZWN0LlJlcXVpcmVkCisJfQogCWlmIHJhd1R5cGVOYW1lICE9IG5pbCB7CiAJCW5hbWUgOj0gbWFrZUZ1bGxOYW1lKHNiLCByYXdUeXBlTmFtZSkKIAkJc3dpdGNoIGZkLkwxLktpbmQgewotCQljYXNlIHByZWYuRW51bUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkVudW1LaW5kOgogCQkJZmQuTDEuRW51bSA9IFBsYWNlaG9sZGVyRW51bShuYW1lKQotCQljYXNlIHByZWYuTWVzc2FnZUtpbmQsIHByZWYuR3JvdXBLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZCwgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKIAkJCWZkLkwxLk1lc3NhZ2UgPSBQbGFjZWhvbGRlck1lc3NhZ2UobmFtZSkKIAkJfQogCX0KQEAgLTQ5Nyw2ICs1MDQsMTMgQEAKIAkJCQlmZC5MMS5IYXNFbmZvcmNlVVRGOCA9IHRydWUKIAkJCQlmZC5MMS5FbmZvcmNlVVRGOCA9IHByb3Rvd2lyZS5EZWNvZGVCb29sKHYpCiAJCQl9CisJCWNhc2UgcHJvdG93aXJlLkJ5dGVzVHlwZToKKwkJCXYsIG0gOj0gcHJvdG93aXJlLkNvbnN1bWVCeXRlcyhiKQorCQkJYiA9IGJbbTpdCisJCQlzd2l0Y2ggbnVtIHsKKwkJCWNhc2UgZ2VuaWQuRmllbGRPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX251bWJlcjoKKwkJCQlmZC5MMS5FZGl0aW9uRmVhdHVyZXMgPSB1bm1hcnNoYWxGZWF0dXJlU2V0KHYsIGZkLkwxLkVkaXRpb25GZWF0dXJlcykKKwkJCX0KIAkJZGVmYXVsdDoKIAkJCW0gOj0gcHJvdG93aXJlLkNvbnN1bWVGaWVsZFZhbHVlKG51bSwgdHlwLCBiKQogCQkJYiA9IGJbbTpdCkBAIC01MDQsNyArNTE4LDcgQEAKIAl9CiB9CiAKLWZ1bmMgKG9kICpPbmVvZikgdW5tYXJzaGFsRnVsbChiIFtdYnl0ZSwgc2IgKnN0cnMuQnVpbGRlciwgcGYgKkZpbGUsIHBkIHByZWYuRGVzY3JpcHRvciwgaSBpbnQpIHsKK2Z1bmMgKG9kICpPbmVvZikgdW5tYXJzaGFsRnVsbChiIFtdYnl0ZSwgc2IgKnN0cnMuQnVpbGRlciwgcGYgKkZpbGUsIHBkIHByb3RvcmVmbGVjdC5EZXNjcmlwdG9yLCBpIGludCkgewogCW9kLkwwLlBhcmVudEZpbGUgPSBwZgogCW9kLkwwLlBhcmVudCA9IHBkCiAJb2QuTDAuSW5kZXggPSBpCkBAIC01MzQsNiArNTQ4LDcgQEAKIGZ1bmMgKHhkICpFeHRlbnNpb24pIHVubWFyc2hhbEZ1bGwoYiBbXWJ5dGUsIHNiICpzdHJzLkJ1aWxkZXIpIHsKIAl2YXIgcmF3VHlwZU5hbWUgW11ieXRlCiAJdmFyIHJhd09wdGlvbnMgW11ieXRlCisJeGQuTDEuRWRpdGlvbkZlYXR1cmVzID0gZmVhdHVyZXNGcm9tUGFyZW50RGVzYyh4ZC5MMS5FeHRlbmRlZSkKIAl4ZC5MMiA9IG5ldyhFeHRlbnNpb25MMikKIAlmb3IgbGVuKGIpID4gMCB7CiAJCW51bSwgdHlwLCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lVGFnKGIpCkBAIC01NTMsNyArNTY4LDcgQEAKIAkJCWNhc2UgZ2VuaWQuRmllbGREZXNjcmlwdG9yUHJvdG9fSnNvbk5hbWVfZmllbGRfbnVtYmVyOgogCQkJCXhkLkwyLlN0cmluZ05hbWUuSW5pdEpTT04oc2IuTWFrZVN0cmluZyh2KSkKIAkJCWNhc2UgZ2VuaWQuRmllbGREZXNjcmlwdG9yUHJvdG9fRGVmYXVsdFZhbHVlX2ZpZWxkX251bWJlcjoKLQkJCQl4ZC5MMi5EZWZhdWx0LnZhbCA9IHByZWYuVmFsdWVPZkJ5dGVzKHYpIC8vIHRlbXBvcmFyaWx5IHN0b3JlIGFzIGJ5dGVzOyBsYXRlciByZXNvbHZlZCBpbiByZXNvbHZlRXh0ZW5zaW9ucworCQkJCXhkLkwyLkRlZmF1bHQudmFsID0gcHJvdG9yZWZsZWN0LlZhbHVlT2ZCeXRlcyh2KSAvLyB0ZW1wb3JhcmlseSBzdG9yZSBhcyBieXRlczsgbGF0ZXIgcmVzb2x2ZWQgaW4gcmVzb2x2ZUV4dGVuc2lvbnMKIAkJCWNhc2UgZ2VuaWQuRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZU5hbWVfZmllbGRfbnVtYmVyOgogCQkJCXJhd1R5cGVOYW1lID0gdgogCQkJY2FzZSBnZW5pZC5GaWVsZERlc2NyaXB0b3JQcm90b19PcHRpb25zX2ZpZWxkX251bWJlcjoKQEAgLTU2NSwxMiArNTgwLDE4IEBACiAJCQliID0gYlttOl0KIAkJfQogCX0KKwlpZiB4ZC5TeW50YXgoKSA9PSBwcm90b3JlZmxlY3QuRWRpdGlvbnMgJiYgeGQuTDEuS2luZCA9PSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQgJiYgeGQuTDEuRWRpdGlvbkZlYXR1cmVzLklzRGVsaW1pdGVkRW5jb2RlZCB7CisJCXhkLkwxLktpbmQgPSBwcm90b3JlZmxlY3QuR3JvdXBLaW5kCisJfQorCWlmIHhkLlN5bnRheCgpID09IHByb3RvcmVmbGVjdC5FZGl0aW9ucyAmJiB4ZC5MMS5FZGl0aW9uRmVhdHVyZXMuSXNMZWdhY3lSZXF1aXJlZCB7CisJCXhkLkwxLkNhcmRpbmFsaXR5ID0gcHJvdG9yZWZsZWN0LlJlcXVpcmVkCisJfQogCWlmIHJhd1R5cGVOYW1lICE9IG5pbCB7CiAJCW5hbWUgOj0gbWFrZUZ1bGxOYW1lKHNiLCByYXdUeXBlTmFtZSkKIAkJc3dpdGNoIHhkLkwxLktpbmQgewotCQljYXNlIHByZWYuRW51bUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkVudW1LaW5kOgogCQkJeGQuTDIuRW51bSA9IFBsYWNlaG9sZGVyRW51bShuYW1lKQotCQljYXNlIHByZWYuTWVzc2FnZUtpbmQsIHByZWYuR3JvdXBLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZCwgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKIAkJCXhkLkwyLk1lc3NhZ2UgPSBQbGFjZWhvbGRlck1lc3NhZ2UobmFtZSkKIAkJfQogCX0KQEAgLTU4OSw2ICs2MTAsMTMgQEAKIAkJCWNhc2UgZ2VuaWQuRmllbGRPcHRpb25zX1BhY2tlZF9maWVsZF9udW1iZXI6CiAJCQkJeGQuTDIuSXNQYWNrZWQgPSBwcm90b3dpcmUuRGVjb2RlQm9vbCh2KQogCQkJfQorCQljYXNlIHByb3Rvd2lyZS5CeXRlc1R5cGU6CisJCQl2LCBtIDo9IHByb3Rvd2lyZS5Db25zdW1lQnl0ZXMoYikKKwkJCWIgPSBiW206XQorCQkJc3dpdGNoIG51bSB7CisJCQljYXNlIGdlbmlkLkZpZWxkT3B0aW9uc19GZWF0dXJlc19maWVsZF9udW1iZXI6CisJCQkJeGQuTDEuRWRpdGlvbkZlYXR1cmVzID0gdW5tYXJzaGFsRmVhdHVyZVNldCh2LCB4ZC5MMS5FZGl0aW9uRmVhdHVyZXMpCisJCQl9CiAJCWRlZmF1bHQ6CiAJCQltIDo9IHByb3Rvd2lyZS5Db25zdW1lRmllbGRWYWx1ZShudW0sIHR5cCwgYikKIAkJCWIgPSBiW206XQpAQCAtNjI3LDcgKzY1NSw3IEBACiAJc2QuTDIuT3B0aW9ucyA9IHNkLkwwLlBhcmVudEZpbGUuYnVpbGRlci5vcHRpb25zVW5tYXJzaGFsZXIoJmRlc2NvcHRzLlNlcnZpY2UsIHJhd09wdGlvbnMpCiB9CiAKLWZ1bmMgKG1kICpNZXRob2QpIHVubWFyc2hhbEZ1bGwoYiBbXWJ5dGUsIHNiICpzdHJzLkJ1aWxkZXIsIHBmICpGaWxlLCBwZCBwcmVmLkRlc2NyaXB0b3IsIGkgaW50KSB7CitmdW5jIChtZCAqTWV0aG9kKSB1bm1hcnNoYWxGdWxsKGIgW11ieXRlLCBzYiAqc3Rycy5CdWlsZGVyLCBwZiAqRmlsZSwgcGQgcHJvdG9yZWZsZWN0LkRlc2NyaXB0b3IsIGkgaW50KSB7CiAJbWQuTDAuUGFyZW50RmlsZSA9IHBmCiAJbWQuTDAuUGFyZW50ID0gcGQKIAltZC5MMC5JbmRleCA9IGkKQEAgLTY4MCwxOCArNzA4LDE4IEBACiAvLwogLy8gVGhlIHR5cGUgb2YgbWVzc2FnZSB0byB1bm1hcnNoYWwgdG8gaXMgcGFzc2VkIGFzIGEgcG9pbnRlciBzaW5jZSB0aGUKIC8vIHZhcnMgaW4gZGVzY29wdHMgbWF5IG5vdCB5ZXQgYmUgcG9wdWxhdGVkIGF0IHRoZSB0aW1lIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgotZnVuYyAoZGIgKkJ1aWxkZXIpIG9wdGlvbnNVbm1hcnNoYWxlcihwICpwcmVmLlByb3RvTWVzc2FnZSwgYiBbXWJ5dGUpIGZ1bmMoKSBwcmVmLlByb3RvTWVzc2FnZSB7CitmdW5jIChkYiAqQnVpbGRlcikgb3B0aW9uc1VubWFyc2hhbGVyKHAgKnByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UsIGIgW11ieXRlKSBmdW5jKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSB7CiAJaWYgYiA9PSBuaWwgewogCQlyZXR1cm4gbmlsCiAJfQotCXZhciBvcHRzIHByZWYuUHJvdG9NZXNzYWdlCisJdmFyIG9wdHMgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZQogCXZhciBvbmNlIHN5bmMuT25jZQotCXJldHVybiBmdW5jKCkgcHJlZi5Qcm90b01lc3NhZ2UgeworCXJldHVybiBmdW5jKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSB7CiAJCW9uY2UuRG8oZnVuYygpIHsKIAkJCWlmICpwID09IG5pbCB7CiAJCQkJcGFuaWMoIkRlc2NyaXB0b3IuT3B0aW9ucyBjYWxsZWQgd2l0aG91dCBpbXBvcnRpbmcgdGhlIGRlc2NyaXB0b3IgcGFja2FnZSIpCiAJCQl9Ci0JCQlvcHRzID0gcmVmbGVjdC5OZXcocmVmbGVjdC5UeXBlT2YoKnApLkVsZW0oKSkuSW50ZXJmYWNlKCkuKHByZWYuUHJvdG9NZXNzYWdlKQorCQkJb3B0cyA9IHJlZmxlY3QuTmV3KHJlZmxlY3QuVHlwZU9mKCpwKS5FbGVtKCkpLkludGVyZmFjZSgpLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKQogCQkJaWYgZXJyIDo9IChwcm90by5Vbm1hcnNoYWxPcHRpb25zewogCQkJCUFsbG93UGFydGlhbDogdHJ1ZSwKIAkJCQlSZXNvbHZlcjogICAgIGRiLlR5cGVSZXNvbHZlciwKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy9kZXNjX2xpc3QuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MvZGVzY19saXN0LmdvCmluZGV4IGFhMjk0ZmYuLmUzYjY1ODcgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy9kZXNjX2xpc3QuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjL2Rlc2NfbGlzdC5nbwpAQCAtMTcsMzEgKzE3LDMwIEBACiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2Vycm9ycyIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvcHJhZ21hIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKICkKIAotdHlwZSBGaWxlSW1wb3J0cyBbXXByZWYuRmlsZUltcG9ydAordHlwZSBGaWxlSW1wb3J0cyBbXXByb3RvcmVmbGVjdC5GaWxlSW1wb3J0CiAKIGZ1bmMgKHAgKkZpbGVJbXBvcnRzKSBMZW4oKSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbGVuKCpwKSB9Ci1mdW5jIChwICpGaWxlSW1wb3J0cykgR2V0KGkgaW50KSBwcmVmLkZpbGVJbXBvcnQgICAgICAgICAgIHsgcmV0dXJuICgqcClbaV0gfQorZnVuYyAocCAqRmlsZUltcG9ydHMpIEdldChpIGludCkgcHJvdG9yZWZsZWN0LkZpbGVJbXBvcnQgICB7IHJldHVybiAoKnApW2ldIH0KIGZ1bmMgKHAgKkZpbGVJbXBvcnRzKSBGb3JtYXQocyBmbXQuU3RhdGUsIHIgcnVuZSkgICAgICAgICAgeyBkZXNjZm10LkZvcm1hdExpc3QocywgciwgcCkgfQogZnVuYyAocCAqRmlsZUltcG9ydHMpIFByb3RvSW50ZXJuYWwocHJhZ21hLkRvTm90SW1wbGVtZW50KSB7fQogCiB0eXBlIE5hbWVzIHN0cnVjdCB7Ci0JTGlzdCBbXXByZWYuTmFtZQorCUxpc3QgW11wcm90b3JlZmxlY3QuTmFtZQogCW9uY2Ugc3luYy5PbmNlCi0JaGFzICBtYXBbcHJlZi5OYW1lXWludCAvLyBwcm90ZWN0ZWQgYnkgb25jZQorCWhhcyAgbWFwW3Byb3RvcmVmbGVjdC5OYW1lXWludCAvLyBwcm90ZWN0ZWQgYnkgb25jZQogfQogCiBmdW5jIChwICpOYW1lcykgTGVuKCkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGxlbihwLkxpc3QpIH0KLWZ1bmMgKHAgKk5hbWVzKSBHZXQoaSBpbnQpIHByZWYuTmFtZSAgICAgICAgICAgICAgICAgeyByZXR1cm4gcC5MaXN0W2ldIH0KLWZ1bmMgKHAgKk5hbWVzKSBIYXMocyBwcmVmLk5hbWUpIGJvb2wgICAgICAgICAgICAgICAgeyByZXR1cm4gcC5sYXp5SW5pdCgpLmhhc1tzXSA+IDAgfQorZnVuYyAocCAqTmFtZXMpIEdldChpIGludCkgcHJvdG9yZWZsZWN0Lk5hbWUgICAgICAgICB7IHJldHVybiBwLkxpc3RbaV0gfQorZnVuYyAocCAqTmFtZXMpIEhhcyhzIHByb3RvcmVmbGVjdC5OYW1lKSBib29sICAgICAgICB7IHJldHVybiBwLmxhenlJbml0KCkuaGFzW3NdID4gMCB9CiBmdW5jIChwICpOYW1lcykgRm9ybWF0KHMgZm10LlN0YXRlLCByIHJ1bmUpICAgICAgICAgIHsgZGVzY2ZtdC5Gb3JtYXRMaXN0KHMsIHIsIHApIH0KIGZ1bmMgKHAgKk5hbWVzKSBQcm90b0ludGVybmFsKHByYWdtYS5Eb05vdEltcGxlbWVudCkge30KIGZ1bmMgKHAgKk5hbWVzKSBsYXp5SW5pdCgpICpOYW1lcyB7CiAJcC5vbmNlLkRvKGZ1bmMoKSB7CiAJCWlmIGxlbihwLkxpc3QpID4gMCB7Ci0JCQlwLmhhcyA9IG1ha2UobWFwW3ByZWYuTmFtZV1pbnQsIGxlbihwLkxpc3QpKQorCQkJcC5oYXMgPSBtYWtlKG1hcFtwcm90b3JlZmxlY3QuTmFtZV1pbnQsIGxlbihwLkxpc3QpKQogCQkJZm9yIF8sIHMgOj0gcmFuZ2UgcC5MaXN0IHsKIAkJCQlwLmhhc1tzXSA9IHAuaGFzW3NdICsgMQogCQkJfQpAQCAtNjcsMTQgKzY2LDE0IEBACiB9CiAKIHR5cGUgRW51bVJhbmdlcyBzdHJ1Y3QgewotCUxpc3QgICBbXVsyXXByZWYuRW51bU51bWJlciAvLyBzdGFydCBpbmNsdXNpdmU7IGVuZCBpbmNsdXNpdmUKKwlMaXN0ICAgW11bMl1wcm90b3JlZmxlY3QuRW51bU51bWJlciAvLyBzdGFydCBpbmNsdXNpdmU7IGVuZCBpbmNsdXNpdmUKIAlvbmNlICAgc3luYy5PbmNlCi0Jc29ydGVkIFtdWzJdcHJlZi5FbnVtTnVtYmVyIC8vIHByb3RlY3RlZCBieSBvbmNlCisJc29ydGVkIFtdWzJdcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIgLy8gcHJvdGVjdGVkIGJ5IG9uY2UKIH0KIAotZnVuYyAocCAqRW51bVJhbmdlcykgTGVuKCkgaW50ICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbGVuKHAuTGlzdCkgfQotZnVuYyAocCAqRW51bVJhbmdlcykgR2V0KGkgaW50KSBbMl1wcmVmLkVudW1OdW1iZXIgeyByZXR1cm4gcC5MaXN0W2ldIH0KLWZ1bmMgKHAgKkVudW1SYW5nZXMpIEhhcyhuIHByZWYuRW51bU51bWJlcikgYm9vbCB7CitmdW5jIChwICpFbnVtUmFuZ2VzKSBMZW4oKSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGxlbihwLkxpc3QpIH0KK2Z1bmMgKHAgKkVudW1SYW5nZXMpIEdldChpIGludCkgWzJdcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIgeyByZXR1cm4gcC5MaXN0W2ldIH0KK2Z1bmMgKHAgKkVudW1SYW5nZXMpIEhhcyhuIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKSBib29sIHsKIAlmb3IgbHMgOj0gcC5sYXp5SW5pdCgpLnNvcnRlZDsgbGVuKGxzKSA+IDA7IHsKIAkJaSA6PSBsZW4obHMpIC8gMgogCQlzd2l0Y2ggciA6PSBlbnVtUmFuZ2UobHNbaV0pOyB7CkBAIC0xMjksMTQgKzEyOCwxNCBAQAogfQogCiB0eXBlIEZpZWxkUmFuZ2VzIHN0cnVjdCB7Ci0JTGlzdCAgIFtdWzJdcHJlZi5GaWVsZE51bWJlciAvLyBzdGFydCBpbmNsdXNpdmU7IGVuZCBleGNsdXNpdmUKKwlMaXN0ICAgW11bMl1wcm90b3JlZmxlY3QuRmllbGROdW1iZXIgLy8gc3RhcnQgaW5jbHVzaXZlOyBlbmQgZXhjbHVzaXZlCiAJb25jZSAgIHN5bmMuT25jZQotCXNvcnRlZCBbXVsyXXByZWYuRmllbGROdW1iZXIgLy8gcHJvdGVjdGVkIGJ5IG9uY2UKKwlzb3J0ZWQgW11bMl1wcm90b3JlZmxlY3QuRmllbGROdW1iZXIgLy8gcHJvdGVjdGVkIGJ5IG9uY2UKIH0KIAotZnVuYyAocCAqRmllbGRSYW5nZXMpIExlbigpIGludCAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBsZW4ocC5MaXN0KSB9Ci1mdW5jIChwICpGaWVsZFJhbmdlcykgR2V0KGkgaW50KSBbMl1wcmVmLkZpZWxkTnVtYmVyIHsgcmV0dXJuIHAuTGlzdFtpXSB9Ci1mdW5jIChwICpGaWVsZFJhbmdlcykgSGFzKG4gcHJlZi5GaWVsZE51bWJlcikgYm9vbCB7CitmdW5jIChwICpGaWVsZFJhbmdlcykgTGVuKCkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbGVuKHAuTGlzdCkgfQorZnVuYyAocCAqRmllbGRSYW5nZXMpIEdldChpIGludCkgWzJdcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyIHsgcmV0dXJuIHAuTGlzdFtpXSB9CitmdW5jIChwICpGaWVsZFJhbmdlcykgSGFzKG4gcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKSBib29sIHsKIAlmb3IgbHMgOj0gcC5sYXp5SW5pdCgpLnNvcnRlZDsgbGVuKGxzKSA+IDA7IHsKIAkJaSA6PSBsZW4obHMpIC8gMgogCQlzd2l0Y2ggciA6PSBmaWVsZFJhbmdlKGxzW2ldKTsgewpAQCAtMjIxLDE3ICsyMjAsMTcgQEAKIH0KIAogdHlwZSBGaWVsZE51bWJlcnMgc3RydWN0IHsKLQlMaXN0IFtdcHJlZi5GaWVsZE51bWJlcgorCUxpc3QgW11wcm90b3JlZmxlY3QuRmllbGROdW1iZXIKIAlvbmNlIHN5bmMuT25jZQotCWhhcyAgbWFwW3ByZWYuRmllbGROdW1iZXJdc3RydWN0e30gLy8gcHJvdGVjdGVkIGJ5IG9uY2UKKwloYXMgIG1hcFtwcm90b3JlZmxlY3QuRmllbGROdW1iZXJdc3RydWN0e30gLy8gcHJvdGVjdGVkIGJ5IG9uY2UKIH0KIAotZnVuYyAocCAqRmllbGROdW1iZXJzKSBMZW4oKSBpbnQgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbGVuKHAuTGlzdCkgfQotZnVuYyAocCAqRmllbGROdW1iZXJzKSBHZXQoaSBpbnQpIHByZWYuRmllbGROdW1iZXIgeyByZXR1cm4gcC5MaXN0W2ldIH0KLWZ1bmMgKHAgKkZpZWxkTnVtYmVycykgSGFzKG4gcHJlZi5GaWVsZE51bWJlcikgYm9vbCB7CitmdW5jIChwICpGaWVsZE51bWJlcnMpIExlbigpIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGxlbihwLkxpc3QpIH0KK2Z1bmMgKHAgKkZpZWxkTnVtYmVycykgR2V0KGkgaW50KSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgeyByZXR1cm4gcC5MaXN0W2ldIH0KK2Z1bmMgKHAgKkZpZWxkTnVtYmVycykgSGFzKG4gcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKSBib29sIHsKIAlwLm9uY2UuRG8oZnVuYygpIHsKIAkJaWYgbGVuKHAuTGlzdCkgPiAwIHsKLQkJCXAuaGFzID0gbWFrZShtYXBbcHJlZi5GaWVsZE51bWJlcl1zdHJ1Y3R7fSwgbGVuKHAuTGlzdCkpCisJCQlwLmhhcyA9IG1ha2UobWFwW3Byb3RvcmVmbGVjdC5GaWVsZE51bWJlcl1zdHJ1Y3R7fSwgbGVuKHAuTGlzdCkpCiAJCQlmb3IgXywgbiA6PSByYW5nZSBwLkxpc3QgewogCQkJCXAuaGFzW25dID0gc3RydWN0e317fQogCQkJfQpAQCAtMjQ0LDMwICsyNDMsMzggQEAKIGZ1bmMgKHAgKkZpZWxkTnVtYmVycykgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpIHt9CiAKIHR5cGUgT25lb2ZGaWVsZHMgc3RydWN0IHsKLQlMaXN0ICAgW11wcmVmLkZpZWxkRGVzY3JpcHRvcgorCUxpc3QgICBbXXByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IKIAlvbmNlICAgc3luYy5PbmNlCi0JYnlOYW1lIG1hcFtwcmVmLk5hbWVdcHJlZi5GaWVsZERlc2NyaXB0b3IgICAgICAgIC8vIHByb3RlY3RlZCBieSBvbmNlCi0JYnlKU09OIG1hcFtzdHJpbmddcHJlZi5GaWVsZERlc2NyaXB0b3IgICAgICAgICAgIC8vIHByb3RlY3RlZCBieSBvbmNlCi0JYnlUZXh0IG1hcFtzdHJpbmddcHJlZi5GaWVsZERlc2NyaXB0b3IgICAgICAgICAgIC8vIHByb3RlY3RlZCBieSBvbmNlCi0JYnlOdW0gIG1hcFtwcmVmLkZpZWxkTnVtYmVyXXByZWYuRmllbGREZXNjcmlwdG9yIC8vIHByb3RlY3RlZCBieSBvbmNlCisJYnlOYW1lIG1hcFtwcm90b3JlZmxlY3QuTmFtZV1wcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yICAgICAgICAvLyBwcm90ZWN0ZWQgYnkgb25jZQorCWJ5SlNPTiBtYXBbc3RyaW5nXXByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IgICAgICAgICAgICAgICAgICAgLy8gcHJvdGVjdGVkIGJ5IG9uY2UKKwlieVRleHQgbWFwW3N0cmluZ11wcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yICAgICAgICAgICAgICAgICAgIC8vIHByb3RlY3RlZCBieSBvbmNlCisJYnlOdW0gIG1hcFtwcm90b3JlZmxlY3QuRmllbGROdW1iZXJdcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciAvLyBwcm90ZWN0ZWQgYnkgb25jZQogfQogCi1mdW5jIChwICpPbmVvZkZpZWxkcykgTGVuKCkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBsZW4ocC5MaXN0KSB9Ci1mdW5jIChwICpPbmVvZkZpZWxkcykgR2V0KGkgaW50KSBwcmVmLkZpZWxkRGVzY3JpcHRvciAgICAgICAgICAgICAgICAgICB7IHJldHVybiBwLkxpc3RbaV0gfQotZnVuYyAocCAqT25lb2ZGaWVsZHMpIEJ5TmFtZShzIHByZWYuTmFtZSkgcHJlZi5GaWVsZERlc2NyaXB0b3IgICAgICAgICAgeyByZXR1cm4gcC5sYXp5SW5pdCgpLmJ5TmFtZVtzXSB9Ci1mdW5jIChwICpPbmVvZkZpZWxkcykgQnlKU09OTmFtZShzIHN0cmluZykgcHJlZi5GaWVsZERlc2NyaXB0b3IgICAgICAgICB7IHJldHVybiBwLmxhenlJbml0KCkuYnlKU09OW3NdIH0KLWZ1bmMgKHAgKk9uZW9mRmllbGRzKSBCeVRleHROYW1lKHMgc3RyaW5nKSBwcmVmLkZpZWxkRGVzY3JpcHRvciAgICAgICAgIHsgcmV0dXJuIHAubGF6eUluaXQoKS5ieVRleHRbc10gfQotZnVuYyAocCAqT25lb2ZGaWVsZHMpIEJ5TnVtYmVyKG4gcHJlZi5GaWVsZE51bWJlcikgcHJlZi5GaWVsZERlc2NyaXB0b3IgeyByZXR1cm4gcC5sYXp5SW5pdCgpLmJ5TnVtW25dIH0KLWZ1bmMgKHAgKk9uZW9mRmllbGRzKSBGb3JtYXQocyBmbXQuU3RhdGUsIHIgcnVuZSkgICAgICAgICAgICAgICAgICAgICAgIHsgZGVzY2ZtdC5Gb3JtYXRMaXN0KHMsIHIsIHApIH0KLWZ1bmMgKHAgKk9uZW9mRmllbGRzKSBQcm90b0ludGVybmFsKHByYWdtYS5Eb05vdEltcGxlbWVudCkgICAgICAgICAgICAgIHt9CitmdW5jIChwICpPbmVvZkZpZWxkcykgTGVuKCkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGxlbihwLkxpc3QpIH0KK2Z1bmMgKHAgKk9uZW9mRmllbGRzKSBHZXQoaSBpbnQpIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IgeyByZXR1cm4gcC5MaXN0W2ldIH0KK2Z1bmMgKHAgKk9uZW9mRmllbGRzKSBCeU5hbWUocyBwcm90b3JlZmxlY3QuTmFtZSkgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciB7CisJcmV0dXJuIHAubGF6eUluaXQoKS5ieU5hbWVbc10KK30KK2Z1bmMgKHAgKk9uZW9mRmllbGRzKSBCeUpTT05OYW1lKHMgc3RyaW5nKSBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yIHsKKwlyZXR1cm4gcC5sYXp5SW5pdCgpLmJ5SlNPTltzXQorfQorZnVuYyAocCAqT25lb2ZGaWVsZHMpIEJ5VGV4dE5hbWUocyBzdHJpbmcpIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IgeworCXJldHVybiBwLmxhenlJbml0KCkuYnlUZXh0W3NdCit9CitmdW5jIChwICpPbmVvZkZpZWxkcykgQnlOdW1iZXIobiBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIpIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IgeworCXJldHVybiBwLmxhenlJbml0KCkuYnlOdW1bbl0KK30KK2Z1bmMgKHAgKk9uZW9mRmllbGRzKSBGb3JtYXQocyBmbXQuU3RhdGUsIHIgcnVuZSkgICAgICAgICAgeyBkZXNjZm10LkZvcm1hdExpc3QocywgciwgcCkgfQorZnVuYyAocCAqT25lb2ZGaWVsZHMpIFByb3RvSW50ZXJuYWwocHJhZ21hLkRvTm90SW1wbGVtZW50KSB7fQogCiBmdW5jIChwICpPbmVvZkZpZWxkcykgbGF6eUluaXQoKSAqT25lb2ZGaWVsZHMgewogCXAub25jZS5EbyhmdW5jKCkgewogCQlpZiBsZW4ocC5MaXN0KSA+IDAgewotCQkJcC5ieU5hbWUgPSBtYWtlKG1hcFtwcmVmLk5hbWVdcHJlZi5GaWVsZERlc2NyaXB0b3IsIGxlbihwLkxpc3QpKQotCQkJcC5ieUpTT04gPSBtYWtlKG1hcFtzdHJpbmddcHJlZi5GaWVsZERlc2NyaXB0b3IsIGxlbihwLkxpc3QpKQotCQkJcC5ieVRleHQgPSBtYWtlKG1hcFtzdHJpbmddcHJlZi5GaWVsZERlc2NyaXB0b3IsIGxlbihwLkxpc3QpKQotCQkJcC5ieU51bSA9IG1ha2UobWFwW3ByZWYuRmllbGROdW1iZXJdcHJlZi5GaWVsZERlc2NyaXB0b3IsIGxlbihwLkxpc3QpKQorCQkJcC5ieU5hbWUgPSBtYWtlKG1hcFtwcm90b3JlZmxlY3QuTmFtZV1wcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yLCBsZW4ocC5MaXN0KSkKKwkJCXAuYnlKU09OID0gbWFrZShtYXBbc3RyaW5nXXByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIGxlbihwLkxpc3QpKQorCQkJcC5ieVRleHQgPSBtYWtlKG1hcFtzdHJpbmddcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciwgbGVuKHAuTGlzdCkpCisJCQlwLmJ5TnVtID0gbWFrZShtYXBbcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyXXByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIGxlbihwLkxpc3QpKQogCQkJZm9yIF8sIGYgOj0gcmFuZ2UgcC5MaXN0IHsKIAkJCQkvLyBGaWVsZCBuYW1lcyBhbmQgbnVtYmVycyBhcmUgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuCiAJCQkJcC5ieU5hbWVbZi5OYW1lKCldID0gZgpAQCAtMjg0LDEyMyArMjkxLDEyMyBAQAogCS8vIExpc3QgaXMgYSBsaXN0IG9mIFNvdXJjZUxvY2F0aW9ucy4KIAkvLyBUaGUgU291cmNlTG9jYXRpb24uTmV4dCBmaWVsZCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBvcHVsYXRlZAogCS8vIGFzIGl0IHdpbGwgYmUgbGF6aWx5IHBvcHVsYXRlZCB1cG9uIGZpcnN0IG5lZWQuCi0JTGlzdCBbXXByZWYuU291cmNlTG9jYXRpb24KKwlMaXN0IFtdcHJvdG9yZWZsZWN0LlNvdXJjZUxvY2F0aW9uCiAKIAkvLyBGaWxlIGlzIHRoZSBwYXJlbnQgZmlsZSBkZXNjcmlwdG9yIHRoYXQgdGhlc2UgbG9jYXRpb25zIGFyZSByZWxhdGl2ZSB0by4KIAkvLyBJZiBub24tbmlsLCBCeURlc2NyaXB0b3IgdmVyaWZpZXMgdGhhdCB0aGUgcHJvdmlkZWQgZGVzY3JpcHRvcgogCS8vIGlzIGEgY2hpbGQgb2YgdGhpcyBmaWxlIGRlc2NyaXB0b3IuCi0JRmlsZSBwcmVmLkZpbGVEZXNjcmlwdG9yCisJRmlsZSBwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IKIAogCW9uY2UgICBzeW5jLk9uY2UKIAlieVBhdGggbWFwW3BhdGhLZXldaW50CiB9CiAKLWZ1bmMgKHAgKlNvdXJjZUxvY2F0aW9ucykgTGVuKCkgaW50ICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGxlbihwLkxpc3QpIH0KLWZ1bmMgKHAgKlNvdXJjZUxvY2F0aW9ucykgR2V0KGkgaW50KSBwcmVmLlNvdXJjZUxvY2F0aW9uIHsgcmV0dXJuIHAubGF6eUluaXQoKS5MaXN0W2ldIH0KLWZ1bmMgKHAgKlNvdXJjZUxvY2F0aW9ucykgYnlLZXkoayBwYXRoS2V5KSBwcmVmLlNvdXJjZUxvY2F0aW9uIHsKK2Z1bmMgKHAgKlNvdXJjZUxvY2F0aW9ucykgTGVuKCkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbGVuKHAuTGlzdCkgfQorZnVuYyAocCAqU291cmNlTG9jYXRpb25zKSBHZXQoaSBpbnQpIHByb3RvcmVmbGVjdC5Tb3VyY2VMb2NhdGlvbiB7IHJldHVybiBwLmxhenlJbml0KCkuTGlzdFtpXSB9CitmdW5jIChwICpTb3VyY2VMb2NhdGlvbnMpIGJ5S2V5KGsgcGF0aEtleSkgcHJvdG9yZWZsZWN0LlNvdXJjZUxvY2F0aW9uIHsKIAlpZiBpLCBvayA6PSBwLmxhenlJbml0KCkuYnlQYXRoW2tdOyBvayB7CiAJCXJldHVybiBwLkxpc3RbaV0KIAl9Ci0JcmV0dXJuIHByZWYuU291cmNlTG9jYXRpb257fQorCXJldHVybiBwcm90b3JlZmxlY3QuU291cmNlTG9jYXRpb257fQogfQotZnVuYyAocCAqU291cmNlTG9jYXRpb25zKSBCeVBhdGgocGF0aCBwcmVmLlNvdXJjZVBhdGgpIHByZWYuU291cmNlTG9jYXRpb24geworZnVuYyAocCAqU291cmNlTG9jYXRpb25zKSBCeVBhdGgocGF0aCBwcm90b3JlZmxlY3QuU291cmNlUGF0aCkgcHJvdG9yZWZsZWN0LlNvdXJjZUxvY2F0aW9uIHsKIAlyZXR1cm4gcC5ieUtleShuZXdQYXRoS2V5KHBhdGgpKQogfQotZnVuYyAocCAqU291cmNlTG9jYXRpb25zKSBCeURlc2NyaXB0b3IoZGVzYyBwcmVmLkRlc2NyaXB0b3IpIHByZWYuU291cmNlTG9jYXRpb24geworZnVuYyAocCAqU291cmNlTG9jYXRpb25zKSBCeURlc2NyaXB0b3IoZGVzYyBwcm90b3JlZmxlY3QuRGVzY3JpcHRvcikgcHJvdG9yZWZsZWN0LlNvdXJjZUxvY2F0aW9uIHsKIAlpZiBwLkZpbGUgIT0gbmlsICYmIGRlc2MgIT0gbmlsICYmIHAuRmlsZSAhPSBkZXNjLlBhcmVudEZpbGUoKSB7Ci0JCXJldHVybiBwcmVmLlNvdXJjZUxvY2F0aW9ue30gLy8gbWlzbWF0Y2hpbmcgcGFyZW50IGZpbGVzCisJCXJldHVybiBwcm90b3JlZmxlY3QuU291cmNlTG9jYXRpb257fSAvLyBtaXNtYXRjaGluZyBwYXJlbnQgZmlsZXMKIAl9CiAJdmFyIHBhdGhBcnIgWzE2XWludDMyCiAJcGF0aCA6PSBwYXRoQXJyWzowXQogCWZvciB7CiAJCXN3aXRjaCBkZXNjLih0eXBlKSB7Ci0JCWNhc2UgcHJlZi5GaWxlRGVzY3JpcHRvcjoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3I6CiAJCQkvLyBSZXZlcnNlIHRoZSBwYXRoIHNpbmNlIGl0IHdhcyBjb25zdHJ1Y3RlZCBpbiByZXZlcnNlLgogCQkJZm9yIGksIGogOj0gMCwgbGVuKHBhdGgpLTE7IGkgPCBqOyBpLCBqID0gaSsxLCBqLTEgewogCQkJCXBhdGhbaV0sIHBhdGhbal0gPSBwYXRoW2pdLCBwYXRoW2ldCiAJCQl9CiAJCQlyZXR1cm4gcC5ieUtleShuZXdQYXRoS2V5KHBhdGgpKQotCQljYXNlIHByZWYuTWVzc2FnZURlc2NyaXB0b3I6CisJCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yOgogCQkJcGF0aCA9IGFwcGVuZChwYXRoLCBpbnQzMihkZXNjLkluZGV4KCkpKQogCQkJZGVzYyA9IGRlc2MuUGFyZW50KCkKIAkJCXN3aXRjaCBkZXNjLih0eXBlKSB7Ci0JCQljYXNlIHByZWYuRmlsZURlc2NyaXB0b3I6CisJCQljYXNlIHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvcjoKIAkJCQlwYXRoID0gYXBwZW5kKHBhdGgsIGludDMyKGdlbmlkLkZpbGVEZXNjcmlwdG9yUHJvdG9fTWVzc2FnZVR5cGVfZmllbGRfbnVtYmVyKSkKLQkJCWNhc2UgcHJlZi5NZXNzYWdlRGVzY3JpcHRvcjoKKwkJCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yOgogCQkJCXBhdGggPSBhcHBlbmQocGF0aCwgaW50MzIoZ2VuaWQuRGVzY3JpcHRvclByb3RvX05lc3RlZFR5cGVfZmllbGRfbnVtYmVyKSkKIAkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIHByZWYuU291cmNlTG9jYXRpb257fQorCQkJCXJldHVybiBwcm90b3JlZmxlY3QuU291cmNlTG9jYXRpb257fQogCQkJfQotCQljYXNlIHByZWYuRmllbGREZXNjcmlwdG9yOgotCQkJaXNFeHRlbnNpb24gOj0gZGVzYy4ocHJlZi5GaWVsZERlc2NyaXB0b3IpLklzRXh0ZW5zaW9uKCkKKwkJY2FzZSBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yOgorCQkJaXNFeHRlbnNpb24gOj0gZGVzYy4ocHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikuSXNFeHRlbnNpb24oKQogCQkJcGF0aCA9IGFwcGVuZChwYXRoLCBpbnQzMihkZXNjLkluZGV4KCkpKQogCQkJZGVzYyA9IGRlc2MuUGFyZW50KCkKIAkJCWlmIGlzRXh0ZW5zaW9uIHsKIAkJCQlzd2l0Y2ggZGVzYy4odHlwZSkgewotCQkJCWNhc2UgcHJlZi5GaWxlRGVzY3JpcHRvcjoKKwkJCQljYXNlIHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvcjoKIAkJCQkJcGF0aCA9IGFwcGVuZChwYXRoLCBpbnQzMihnZW5pZC5GaWxlRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvbl9maWVsZF9udW1iZXIpKQotCQkJCWNhc2UgcHJlZi5NZXNzYWdlRGVzY3JpcHRvcjoKKwkJCQljYXNlIHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvcjoKIAkJCQkJcGF0aCA9IGFwcGVuZChwYXRoLCBpbnQzMihnZW5pZC5EZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uX2ZpZWxkX251bWJlcikpCiAJCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIHByZWYuU291cmNlTG9jYXRpb257fQorCQkJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlNvdXJjZUxvY2F0aW9ue30KIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCXN3aXRjaCBkZXNjLih0eXBlKSB7Ci0JCQkJY2FzZSBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yOgorCQkJCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yOgogCQkJCQlwYXRoID0gYXBwZW5kKHBhdGgsIGludDMyKGdlbmlkLkRlc2NyaXB0b3JQcm90b19GaWVsZF9maWVsZF9udW1iZXIpKQogCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBwcmVmLlNvdXJjZUxvY2F0aW9ue30KKwkJCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5Tb3VyY2VMb2NhdGlvbnt9CiAJCQkJfQogCQkJfQotCQljYXNlIHByZWYuT25lb2ZEZXNjcmlwdG9yOgorCQljYXNlIHByb3RvcmVmbGVjdC5PbmVvZkRlc2NyaXB0b3I6CiAJCQlwYXRoID0gYXBwZW5kKHBhdGgsIGludDMyKGRlc2MuSW5kZXgoKSkpCiAJCQlkZXNjID0gZGVzYy5QYXJlbnQoKQogCQkJc3dpdGNoIGRlc2MuKHR5cGUpIHsKLQkJCWNhc2UgcHJlZi5NZXNzYWdlRGVzY3JpcHRvcjoKKwkJCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yOgogCQkJCXBhdGggPSBhcHBlbmQocGF0aCwgaW50MzIoZ2VuaWQuRGVzY3JpcHRvclByb3RvX09uZW9mRGVjbF9maWVsZF9udW1iZXIpKQogCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gcHJlZi5Tb3VyY2VMb2NhdGlvbnt9CisJCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5Tb3VyY2VMb2NhdGlvbnt9CiAJCQl9Ci0JCWNhc2UgcHJlZi5FbnVtRGVzY3JpcHRvcjoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3I6CiAJCQlwYXRoID0gYXBwZW5kKHBhdGgsIGludDMyKGRlc2MuSW5kZXgoKSkpCiAJCQlkZXNjID0gZGVzYy5QYXJlbnQoKQogCQkJc3dpdGNoIGRlc2MuKHR5cGUpIHsKLQkJCWNhc2UgcHJlZi5GaWxlRGVzY3JpcHRvcjoKKwkJCWNhc2UgcHJvdG9yZWZsZWN0LkZpbGVEZXNjcmlwdG9yOgogCQkJCXBhdGggPSBhcHBlbmQocGF0aCwgaW50MzIoZ2VuaWQuRmlsZURlc2NyaXB0b3JQcm90b19FbnVtVHlwZV9maWVsZF9udW1iZXIpKQotCQkJY2FzZSBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yOgorCQkJY2FzZSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3I6CiAJCQkJcGF0aCA9IGFwcGVuZChwYXRoLCBpbnQzMihnZW5pZC5EZXNjcmlwdG9yUHJvdG9fRW51bVR5cGVfZmllbGRfbnVtYmVyKSkKIAkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIHByZWYuU291cmNlTG9jYXRpb257fQorCQkJCXJldHVybiBwcm90b3JlZmxlY3QuU291cmNlTG9jYXRpb257fQogCQkJfQotCQljYXNlIHByZWYuRW51bVZhbHVlRGVzY3JpcHRvcjoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRW51bVZhbHVlRGVzY3JpcHRvcjoKIAkJCXBhdGggPSBhcHBlbmQocGF0aCwgaW50MzIoZGVzYy5JbmRleCgpKSkKIAkJCWRlc2MgPSBkZXNjLlBhcmVudCgpCiAJCQlzd2l0Y2ggZGVzYy4odHlwZSkgewotCQkJY2FzZSBwcmVmLkVudW1EZXNjcmlwdG9yOgorCQkJY2FzZSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3I6CiAJCQkJcGF0aCA9IGFwcGVuZChwYXRoLCBpbnQzMihnZW5pZC5FbnVtRGVzY3JpcHRvclByb3RvX1ZhbHVlX2ZpZWxkX251bWJlcikpCiAJCQlkZWZhdWx0OgotCQkJCXJldHVybiBwcmVmLlNvdXJjZUxvY2F0aW9ue30KKwkJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlNvdXJjZUxvY2F0aW9ue30KIAkJCX0KLQkJY2FzZSBwcmVmLlNlcnZpY2VEZXNjcmlwdG9yOgorCQljYXNlIHByb3RvcmVmbGVjdC5TZXJ2aWNlRGVzY3JpcHRvcjoKIAkJCXBhdGggPSBhcHBlbmQocGF0aCwgaW50MzIoZGVzYy5JbmRleCgpKSkKIAkJCWRlc2MgPSBkZXNjLlBhcmVudCgpCiAJCQlzd2l0Y2ggZGVzYy4odHlwZSkgewotCQkJY2FzZSBwcmVmLkZpbGVEZXNjcmlwdG9yOgorCQkJY2FzZSBwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3I6CiAJCQkJcGF0aCA9IGFwcGVuZChwYXRoLCBpbnQzMihnZW5pZC5GaWxlRGVzY3JpcHRvclByb3RvX1NlcnZpY2VfZmllbGRfbnVtYmVyKSkKIAkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIHByZWYuU291cmNlTG9jYXRpb257fQorCQkJCXJldHVybiBwcm90b3JlZmxlY3QuU291cmNlTG9jYXRpb257fQogCQkJfQotCQljYXNlIHByZWYuTWV0aG9kRGVzY3JpcHRvcjoKKwkJY2FzZSBwcm90b3JlZmxlY3QuTWV0aG9kRGVzY3JpcHRvcjoKIAkJCXBhdGggPSBhcHBlbmQocGF0aCwgaW50MzIoZGVzYy5JbmRleCgpKSkKIAkJCWRlc2MgPSBkZXNjLlBhcmVudCgpCiAJCQlzd2l0Y2ggZGVzYy4odHlwZSkgewotCQkJY2FzZSBwcmVmLlNlcnZpY2VEZXNjcmlwdG9yOgorCQkJY2FzZSBwcm90b3JlZmxlY3QuU2VydmljZURlc2NyaXB0b3I6CiAJCQkJcGF0aCA9IGFwcGVuZChwYXRoLCBpbnQzMihnZW5pZC5TZXJ2aWNlRGVzY3JpcHRvclByb3RvX01ldGhvZF9maWVsZF9udW1iZXIpKQogCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gcHJlZi5Tb3VyY2VMb2NhdGlvbnt9CisJCQkJcmV0dXJuIHByb3RvcmVmbGVjdC5Tb3VyY2VMb2NhdGlvbnt9CiAJCQl9CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gcHJlZi5Tb3VyY2VMb2NhdGlvbnt9CisJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlNvdXJjZUxvY2F0aW9ue30KIAkJfQogCX0KIH0KQEAgLTQzNSw3ICs0NDIsNyBAQAogCXN0ciBzdHJpbmcgICAgLy8gdXNlZCBpZiB0aGUgcGF0aCBkb2VzIG5vdCBmaXQgaW4gYXJyCiB9CiAKLWZ1bmMgbmV3UGF0aEtleShwIHByZWYuU291cmNlUGF0aCkgKGsgcGF0aEtleSkgeworZnVuYyBuZXdQYXRoS2V5KHAgcHJvdG9yZWZsZWN0LlNvdXJjZVBhdGgpIChrIHBhdGhLZXkpIHsKIAlpZiBsZW4ocCkgPCBsZW4oay5hcnIpIHsKIAkJZm9yIGksIHBzIDo9IHJhbmdlIHAgewogCQkJaWYgcHMgPCAwIHx8IG1hdGguTWF4VWludDggPD0gcHMgewpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjL2VkaXRpb25zLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjL2VkaXRpb25zLmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNzVhNDkKLS0tIC9kZXYvbnVsbAorKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MvZWRpdGlvbnMuZ28KQEAgLTAsMCArMSwxNDIgQEAKKy8vIENvcHlyaWdodCAyMDI0IFRoZSBHbyBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUKKy8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworcGFja2FnZSBmaWxlZGVzYworCitpbXBvcnQgKAorCSJmbXQiCisKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG93aXJlIgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lZGl0aW9uZGVmYXVsdHMiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkIgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKykKKwordmFyIGRlZmF1bHRzQ2FjaGUgPSBtYWtlKG1hcFtFZGl0aW9uXUVkaXRpb25GZWF0dXJlcykKKworZnVuYyBpbml0KCkgeworCXVubWFyc2hhbEVkaXRpb25EZWZhdWx0cyhlZGl0aW9uZGVmYXVsdHMuRGVmYXVsdHMpCit9CisKK2Z1bmMgdW5tYXJzaGFsR29GZWF0dXJlKGIgW11ieXRlLCBwYXJlbnQgRWRpdGlvbkZlYXR1cmVzKSBFZGl0aW9uRmVhdHVyZXMgeworCWZvciBsZW4oYikgPiAwIHsKKwkJbnVtLCBfLCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lVGFnKGIpCisJCWIgPSBiW246XQorCQlzd2l0Y2ggbnVtIHsKKwkJY2FzZSBnZW5pZC5Hb0ZlYXR1cmVzX0xlZ2FjeVVubWFyc2hhbEpzb25FbnVtX2ZpZWxkX251bWJlcjoKKwkJCXYsIG0gOj0gcHJvdG93aXJlLkNvbnN1bWVWYXJpbnQoYikKKwkJCWIgPSBiW206XQorCQkJcGFyZW50LkdlbmVyYXRlTGVnYWN5VW5tYXJzaGFsSlNPTiA9IHByb3Rvd2lyZS5EZWNvZGVCb29sKHYpCisJCWRlZmF1bHQ6CisJCQlwYW5pYyhmbXQuU3ByaW50ZigidW5rb3duIGZpZWxkIG51bWJlciAlZCB3aGlsZSB1bm1hcnNoYWxsaW5nIEdvRmVhdHVyZXMiLCBudW0pKQorCQl9CisJfQorCXJldHVybiBwYXJlbnQKK30KKworZnVuYyB1bm1hcnNoYWxGZWF0dXJlU2V0KGIgW11ieXRlLCBwYXJlbnQgRWRpdGlvbkZlYXR1cmVzKSBFZGl0aW9uRmVhdHVyZXMgeworCWZvciBsZW4oYikgPiAwIHsKKwkJbnVtLCB0eXAsIG4gOj0gcHJvdG93aXJlLkNvbnN1bWVUYWcoYikKKwkJYiA9IGJbbjpdCisJCXN3aXRjaCB0eXAgeworCQljYXNlIHByb3Rvd2lyZS5WYXJpbnRUeXBlOgorCQkJdiwgbSA6PSBwcm90b3dpcmUuQ29uc3VtZVZhcmludChiKQorCQkJYiA9IGJbbTpdCisJCQlzd2l0Y2ggbnVtIHsKKwkJCWNhc2UgZ2VuaWQuRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlX2ZpZWxkX251bWJlcjoKKwkJCQlwYXJlbnQuSXNGaWVsZFByZXNlbmNlID0gdiA9PSBnZW5pZC5GZWF0dXJlU2V0X0VYUExJQ0lUX2VudW1fdmFsdWUgfHwgdiA9PSBnZW5pZC5GZWF0dXJlU2V0X0xFR0FDWV9SRVFVSVJFRF9lbnVtX3ZhbHVlCisJCQkJcGFyZW50LklzTGVnYWN5UmVxdWlyZWQgPSB2ID09IGdlbmlkLkZlYXR1cmVTZXRfTEVHQUNZX1JFUVVJUkVEX2VudW1fdmFsdWUKKwkJCWNhc2UgZ2VuaWQuRmVhdHVyZVNldF9FbnVtVHlwZV9maWVsZF9udW1iZXI6CisJCQkJcGFyZW50LklzT3BlbkVudW0gPSB2ID09IGdlbmlkLkZlYXR1cmVTZXRfT1BFTl9lbnVtX3ZhbHVlCisJCQljYXNlIGdlbmlkLkZlYXR1cmVTZXRfUmVwZWF0ZWRGaWVsZEVuY29kaW5nX2ZpZWxkX251bWJlcjoKKwkJCQlwYXJlbnQuSXNQYWNrZWQgPSB2ID09IGdlbmlkLkZlYXR1cmVTZXRfUEFDS0VEX2VudW1fdmFsdWUKKwkJCWNhc2UgZ2VuaWQuRmVhdHVyZVNldF9VdGY4VmFsaWRhdGlvbl9maWVsZF9udW1iZXI6CisJCQkJcGFyZW50LklzVVRGOFZhbGlkYXRlZCA9IHYgPT0gZ2VuaWQuRmVhdHVyZVNldF9WRVJJRllfZW51bV92YWx1ZQorCQkJY2FzZSBnZW5pZC5GZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZ19maWVsZF9udW1iZXI6CisJCQkJcGFyZW50LklzRGVsaW1pdGVkRW5jb2RlZCA9IHYgPT0gZ2VuaWQuRmVhdHVyZVNldF9ERUxJTUlURURfZW51bV92YWx1ZQorCQkJY2FzZSBnZW5pZC5GZWF0dXJlU2V0X0pzb25Gb3JtYXRfZmllbGRfbnVtYmVyOgorCQkJCXBhcmVudC5Jc0pTT05Db21wbGlhbnQgPSB2ID09IGdlbmlkLkZlYXR1cmVTZXRfQUxMT1dfZW51bV92YWx1ZQorCQkJZGVmYXVsdDoKKwkJCQlwYW5pYyhmbXQuU3ByaW50ZigidW5rb3duIGZpZWxkIG51bWJlciAlZCB3aGlsZSB1bm1hcnNoYWxsaW5nIEZlYXR1cmVTZXQiLCBudW0pKQorCQkJfQorCQljYXNlIHByb3Rvd2lyZS5CeXRlc1R5cGU6CisJCQl2LCBtIDo9IHByb3Rvd2lyZS5Db25zdW1lQnl0ZXMoYikKKwkJCWIgPSBiW206XQorCQkJc3dpdGNoIG51bSB7CisJCQljYXNlIGdlbmlkLkdvRmVhdHVyZXNfTGVnYWN5VW5tYXJzaGFsSnNvbkVudW1fZmllbGRfbnVtYmVyOgorCQkJCXBhcmVudCA9IHVubWFyc2hhbEdvRmVhdHVyZSh2LCBwYXJlbnQpCisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcGFyZW50Cit9CisKK2Z1bmMgZmVhdHVyZXNGcm9tUGFyZW50RGVzYyhwYXJlbnREZXNjIHByb3RvcmVmbGVjdC5EZXNjcmlwdG9yKSBFZGl0aW9uRmVhdHVyZXMgeworCXZhciBwYXJlbnRGUyBFZGl0aW9uRmVhdHVyZXMKKwlzd2l0Y2ggcCA6PSBwYXJlbnREZXNjLih0eXBlKSB7CisJY2FzZSAqRmlsZToKKwkJcGFyZW50RlMgPSBwLkwxLkVkaXRpb25GZWF0dXJlcworCWNhc2UgKk1lc3NhZ2U6CisJCXBhcmVudEZTID0gcC5MMS5FZGl0aW9uRmVhdHVyZXMKKwlkZWZhdWx0OgorCQlwYW5pYyhmbXQuU3ByaW50ZigidW5rbm93biBwYXJlbnQgdHlwZSAlVCIsIHBhcmVudERlc2MpKQorCX0KKwlyZXR1cm4gcGFyZW50RlMKK30KKworZnVuYyB1bm1hcnNoYWxFZGl0aW9uRGVmYXVsdChiIFtdYnl0ZSkgeworCXZhciBlZCBFZGl0aW9uCisJdmFyIGZzIEVkaXRpb25GZWF0dXJlcworCWZvciBsZW4oYikgPiAwIHsKKwkJbnVtLCB0eXAsIG4gOj0gcHJvdG93aXJlLkNvbnN1bWVUYWcoYikKKwkJYiA9IGJbbjpdCisJCXN3aXRjaCB0eXAgeworCQljYXNlIHByb3Rvd2lyZS5WYXJpbnRUeXBlOgorCQkJdiwgbSA6PSBwcm90b3dpcmUuQ29uc3VtZVZhcmludChiKQorCQkJYiA9IGJbbTpdCisJCQlzd2l0Y2ggbnVtIHsKKwkJCWNhc2UgZ2VuaWQuRmVhdHVyZVNldERlZmF1bHRzX0ZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdF9FZGl0aW9uX2ZpZWxkX251bWJlcjoKKwkJCQllZCA9IEVkaXRpb24odikKKwkJCX0KKwkJY2FzZSBwcm90b3dpcmUuQnl0ZXNUeXBlOgorCQkJdiwgbSA6PSBwcm90b3dpcmUuQ29uc3VtZUJ5dGVzKGIpCisJCQliID0gYlttOl0KKwkJCXN3aXRjaCBudW0geworCQkJY2FzZSBnZW5pZC5GZWF0dXJlU2V0RGVmYXVsdHNfRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0X0ZlYXR1cmVzX2ZpZWxkX251bWJlcjoKKwkJCQlmcyA9IHVubWFyc2hhbEZlYXR1cmVTZXQodiwgZnMpCisJCQl9CisJCX0KKwl9CisJZGVmYXVsdHNDYWNoZVtlZF0gPSBmcworfQorCitmdW5jIHVubWFyc2hhbEVkaXRpb25EZWZhdWx0cyhiIFtdYnl0ZSkgeworCWZvciBsZW4oYikgPiAwIHsKKwkJbnVtLCBfLCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lVGFnKGIpCisJCWIgPSBiW246XQorCQlzd2l0Y2ggbnVtIHsKKwkJY2FzZSBnZW5pZC5GZWF0dXJlU2V0RGVmYXVsdHNfRGVmYXVsdHNfZmllbGRfbnVtYmVyOgorCQkJZGVmLCBtIDo9IHByb3Rvd2lyZS5Db25zdW1lQnl0ZXMoYikKKwkJCWIgPSBiW206XQorCQkJdW5tYXJzaGFsRWRpdGlvbkRlZmF1bHQoZGVmKQorCQljYXNlIGdlbmlkLkZlYXR1cmVTZXREZWZhdWx0c19NaW5pbXVtRWRpdGlvbl9maWVsZF9udW1iZXIsCisJCQlnZW5pZC5GZWF0dXJlU2V0RGVmYXVsdHNfTWF4aW11bUVkaXRpb25fZmllbGRfbnVtYmVyOgorCQkJLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBlZGl0aW9ucy4gSWYgdGhlCisJCQkvLyBlZGl0aW9uIHdlIGFyZSBsb29raW5nIGZvciBsYXRlciBvbiBpcyBub3QgaW4gdGhlIGNhY2hlIHdlIGtub3cKKwkJCS8vIGl0IGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlIGJldHdlZW4gbWluaW11bSBhbmQgbWF4aW11bSBlZGl0aW9uLgorCQkJXywgbSA6PSBwcm90b3dpcmUuQ29uc3VtZVZhcmludChiKQorCQkJYiA9IGJbbTpdCisJCWRlZmF1bHQ6CisJCQlwYW5pYyhmbXQuU3ByaW50ZigidW5rb3duIGZpZWxkIG51bWJlciAlZCB3aGlsZSB1bm1hcnNoYWxsaW5nIEVkaXRpb25EZWZhdWx0IiwgbnVtKSkKKwkJfQorCX0KK30KKworZnVuYyBnZXRGZWF0dXJlc0ZvcihlZCBFZGl0aW9uKSBFZGl0aW9uRmVhdHVyZXMgeworCWlmIGRlZiwgb2sgOj0gZGVmYXVsdHNDYWNoZVtlZF07IG9rIHsKKwkJcmV0dXJuIGRlZgorCX0KKwlwYW5pYyhmbXQuU3ByaW50ZigidW5zdXBwb3J0ZWQgZWRpdGlvbjogJXYiLCBlZCkpCit9CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MvcGxhY2Vob2xkZXIuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MvcGxhY2Vob2xkZXIuZ28KaW5kZXggZGJmMmM2MC4uMjgyNDBlYiAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjL3BsYWNlaG9sZGVyLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy9wbGFjZWhvbGRlci5nbwpAQCAtNyw3ICs3LDcgQEAKIGltcG9ydCAoCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2Rlc2NvcHRzIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9wcmFnbWEiCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgogKQogCiB2YXIgKApAQCAtMzAsNzggKzMwLDgwIEBACiAvLyBQbGFjZWhvbGRlckZpbGUgaXMgYSBwbGFjZWhvbGRlciwgcmVwcmVzZW50aW5nIG9ubHkgdGhlIGZpbGUgcGF0aC4KIHR5cGUgUGxhY2Vob2xkZXJGaWxlIHN0cmluZwogCi1mdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgUGFyZW50RmlsZSgpIHByZWYuRmlsZURlc2NyaXB0b3IgICAgICAgeyByZXR1cm4gZiB9Ci1mdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgUGFyZW50KCkgcHJlZi5EZXNjcmlwdG9yICAgICAgICAgICAgICAgeyByZXR1cm4gbmlsIH0KLWZ1bmMgKGYgUGxhY2Vob2xkZXJGaWxlKSBJbmRleCgpIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAwIH0KLWZ1bmMgKGYgUGxhY2Vob2xkZXJGaWxlKSBTeW50YXgoKSBwcmVmLlN5bnRheCAgICAgICAgICAgICAgICAgICB7IHJldHVybiAwIH0KLWZ1bmMgKGYgUGxhY2Vob2xkZXJGaWxlKSBOYW1lKCkgcHJlZi5OYW1lICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAiIiB9Ci1mdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgRnVsbE5hbWUoKSBwcmVmLkZ1bGxOYW1lICAgICAgICAgICAgICAgeyByZXR1cm4gIiIgfQotZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIElzUGxhY2Vob2xkZXIoKSBib29sICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHRydWUgfQotZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIE9wdGlvbnMoKSBwcmVmLlByb3RvTWVzc2FnZSAgICAgICAgICAgIHsgcmV0dXJuIGRlc2NvcHRzLkZpbGUgfQotZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIFBhdGgoKSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHN0cmluZyhmKSB9Ci1mdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgUGFja2FnZSgpIHByZWYuRnVsbE5hbWUgICAgICAgICAgICAgICAgeyByZXR1cm4gIiIgfQotZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIEltcG9ydHMoKSBwcmVmLkZpbGVJbXBvcnRzICAgICAgICAgICAgIHsgcmV0dXJuIGVtcHR5RmlsZXMgfQotZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIE1lc3NhZ2VzKCkgcHJlZi5NZXNzYWdlRGVzY3JpcHRvcnMgICAgIHsgcmV0dXJuIGVtcHR5TWVzc2FnZXMgfQotZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIEVudW1zKCkgcHJlZi5FbnVtRGVzY3JpcHRvcnMgICAgICAgICAgIHsgcmV0dXJuIGVtcHR5RW51bXMgfQotZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIEV4dGVuc2lvbnMoKSBwcmVmLkV4dGVuc2lvbkRlc2NyaXB0b3JzIHsgcmV0dXJuIGVtcHR5RXh0ZW5zaW9ucyB9Ci1mdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgU2VydmljZXMoKSBwcmVmLlNlcnZpY2VEZXNjcmlwdG9ycyAgICAgeyByZXR1cm4gZW1wdHlTZXJ2aWNlcyB9Ci1mdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgU291cmNlTG9jYXRpb25zKCkgcHJlZi5Tb3VyY2VMb2NhdGlvbnMgeyByZXR1cm4gZW1wdHlTb3VyY2VMb2NhdGlvbnMgfQotZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIFByb3RvVHlwZShwcmVmLkZpbGVEZXNjcmlwdG9yKSAgICAgICAgIHsgcmV0dXJuIH0KLWZ1bmMgKGYgUGxhY2Vob2xkZXJGaWxlKSBQcm90b0ludGVybmFsKHByYWdtYS5Eb05vdEltcGxlbWVudCkgICB7IHJldHVybiB9CitmdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgUGFyZW50RmlsZSgpIHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvciAgICAgICB7IHJldHVybiBmIH0KK2Z1bmMgKGYgUGxhY2Vob2xkZXJGaWxlKSBQYXJlbnQoKSBwcm90b3JlZmxlY3QuRGVzY3JpcHRvciAgICAgICAgICAgICAgIHsgcmV0dXJuIG5pbCB9CitmdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgSW5kZXgoKSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAwIH0KK2Z1bmMgKGYgUGxhY2Vob2xkZXJGaWxlKSBTeW50YXgoKSBwcm90b3JlZmxlY3QuU3ludGF4ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIDAgfQorZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIE5hbWUoKSBwcm90b3JlZmxlY3QuTmFtZSAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gIiIgfQorZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIEZ1bGxOYW1lKCkgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lICAgICAgICAgICAgICAgeyByZXR1cm4gIiIgfQorZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIElzUGxhY2Vob2xkZXIoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gdHJ1ZSB9CitmdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgT3B0aW9ucygpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgICAgICAgICAgICB7IHJldHVybiBkZXNjb3B0cy5GaWxlIH0KK2Z1bmMgKGYgUGxhY2Vob2xkZXJGaWxlKSBQYXRoKCkgc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHN0cmluZyhmKSB9CitmdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgUGFja2FnZSgpIHByb3RvcmVmbGVjdC5GdWxsTmFtZSAgICAgICAgICAgICAgICB7IHJldHVybiAiIiB9CitmdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgSW1wb3J0cygpIHByb3RvcmVmbGVjdC5GaWxlSW1wb3J0cyAgICAgICAgICAgICB7IHJldHVybiBlbXB0eUZpbGVzIH0KK2Z1bmMgKGYgUGxhY2Vob2xkZXJGaWxlKSBNZXNzYWdlcygpIHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvcnMgICAgIHsgcmV0dXJuIGVtcHR5TWVzc2FnZXMgfQorZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIEVudW1zKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9ycyAgICAgICAgICAgeyByZXR1cm4gZW1wdHlFbnVtcyB9CitmdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgRXh0ZW5zaW9ucygpIHByb3RvcmVmbGVjdC5FeHRlbnNpb25EZXNjcmlwdG9ycyB7IHJldHVybiBlbXB0eUV4dGVuc2lvbnMgfQorZnVuYyAoZiBQbGFjZWhvbGRlckZpbGUpIFNlcnZpY2VzKCkgcHJvdG9yZWZsZWN0LlNlcnZpY2VEZXNjcmlwdG9ycyAgICAgeyByZXR1cm4gZW1wdHlTZXJ2aWNlcyB9CitmdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgU291cmNlTG9jYXRpb25zKCkgcHJvdG9yZWZsZWN0LlNvdXJjZUxvY2F0aW9ucyB7IHJldHVybiBlbXB0eVNvdXJjZUxvY2F0aW9ucyB9CitmdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgUHJvdG9UeXBlKHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvcikgICAgICAgICB7IHJldHVybiB9CitmdW5jIChmIFBsYWNlaG9sZGVyRmlsZSkgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpICAgICAgICAgICB7IHJldHVybiB9CiAKIC8vIFBsYWNlaG9sZGVyRW51bSBpcyBhIHBsYWNlaG9sZGVyLCByZXByZXNlbnRpbmcgb25seSB0aGUgZnVsbCBuYW1lLgotdHlwZSBQbGFjZWhvbGRlckVudW0gcHJlZi5GdWxsTmFtZQordHlwZSBQbGFjZWhvbGRlckVudW0gcHJvdG9yZWZsZWN0LkZ1bGxOYW1lCiAKLWZ1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBQYXJlbnRGaWxlKCkgcHJlZi5GaWxlRGVzY3JpcHRvciAgICAgeyByZXR1cm4gbmlsIH0KLWZ1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBQYXJlbnQoKSBwcmVmLkRlc2NyaXB0b3IgICAgICAgICAgICAgeyByZXR1cm4gbmlsIH0KLWZ1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBJbmRleCgpIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gMCB9Ci1mdW5jIChlIFBsYWNlaG9sZGVyRW51bSkgU3ludGF4KCkgcHJlZi5TeW50YXggICAgICAgICAgICAgICAgIHsgcmV0dXJuIDAgfQotZnVuYyAoZSBQbGFjZWhvbGRlckVudW0pIE5hbWUoKSBwcmVmLk5hbWUgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBwcmVmLkZ1bGxOYW1lKGUpLk5hbWUoKSB9Ci1mdW5jIChlIFBsYWNlaG9sZGVyRW51bSkgRnVsbE5hbWUoKSBwcmVmLkZ1bGxOYW1lICAgICAgICAgICAgIHsgcmV0dXJuIHByZWYuRnVsbE5hbWUoZSkgfQotZnVuYyAoZSBQbGFjZWhvbGRlckVudW0pIElzUGxhY2Vob2xkZXIoKSBib29sICAgICAgICAgICAgICAgICB7IHJldHVybiB0cnVlIH0KLWZ1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBPcHRpb25zKCkgcHJlZi5Qcm90b01lc3NhZ2UgICAgICAgICAgeyByZXR1cm4gZGVzY29wdHMuRW51bSB9Ci1mdW5jIChlIFBsYWNlaG9sZGVyRW51bSkgVmFsdWVzKCkgcHJlZi5FbnVtVmFsdWVEZXNjcmlwdG9ycyAgIHsgcmV0dXJuIGVtcHR5RW51bVZhbHVlcyB9Ci1mdW5jIChlIFBsYWNlaG9sZGVyRW51bSkgUmVzZXJ2ZWROYW1lcygpIHByZWYuTmFtZXMgICAgICAgICAgIHsgcmV0dXJuIGVtcHR5TmFtZXMgfQotZnVuYyAoZSBQbGFjZWhvbGRlckVudW0pIFJlc2VydmVkUmFuZ2VzKCkgcHJlZi5FbnVtUmFuZ2VzICAgICB7IHJldHVybiBlbXB0eUVudW1SYW5nZXMgfQotZnVuYyAoZSBQbGFjZWhvbGRlckVudW0pIFByb3RvVHlwZShwcmVmLkVudW1EZXNjcmlwdG9yKSAgICAgICB7IHJldHVybiB9Ci1mdW5jIChlIFBsYWNlaG9sZGVyRW51bSkgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpIHsgcmV0dXJuIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBQYXJlbnRGaWxlKCkgcHJvdG9yZWZsZWN0LkZpbGVEZXNjcmlwdG9yICAgeyByZXR1cm4gbmlsIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBQYXJlbnQoKSBwcm90b3JlZmxlY3QuRGVzY3JpcHRvciAgICAgICAgICAgeyByZXR1cm4gbmlsIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBJbmRleCgpIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gMCB9CitmdW5jIChlIFBsYWNlaG9sZGVyRW51bSkgU3ludGF4KCkgcHJvdG9yZWZsZWN0LlN5bnRheCAgICAgICAgICAgICAgIHsgcmV0dXJuIDAgfQorZnVuYyAoZSBQbGFjZWhvbGRlckVudW0pIE5hbWUoKSBwcm90b3JlZmxlY3QuTmFtZSAgICAgICAgICAgICAgICAgICB7IHJldHVybiBwcm90b3JlZmxlY3QuRnVsbE5hbWUoZSkuTmFtZSgpIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBGdWxsTmFtZSgpIHByb3RvcmVmbGVjdC5GdWxsTmFtZSAgICAgICAgICAgeyByZXR1cm4gcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKGUpIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBJc1BsYWNlaG9sZGVyKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gdHJ1ZSB9CitmdW5jIChlIFBsYWNlaG9sZGVyRW51bSkgT3B0aW9ucygpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgICAgICAgIHsgcmV0dXJuIGRlc2NvcHRzLkVudW0gfQorZnVuYyAoZSBQbGFjZWhvbGRlckVudW0pIFZhbHVlcygpIHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9ycyB7IHJldHVybiBlbXB0eUVudW1WYWx1ZXMgfQorZnVuYyAoZSBQbGFjZWhvbGRlckVudW0pIFJlc2VydmVkTmFtZXMoKSBwcm90b3JlZmxlY3QuTmFtZXMgICAgICAgICB7IHJldHVybiBlbXB0eU5hbWVzIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBSZXNlcnZlZFJhbmdlcygpIHByb3RvcmVmbGVjdC5FbnVtUmFuZ2VzICAgeyByZXR1cm4gZW1wdHlFbnVtUmFuZ2VzIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtKSBQcm90b1R5cGUocHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yKSAgICAgeyByZXR1cm4gfQorZnVuYyAoZSBQbGFjZWhvbGRlckVudW0pIFByb3RvSW50ZXJuYWwocHJhZ21hLkRvTm90SW1wbGVtZW50KSAgICAgICB7IHJldHVybiB9CiAKIC8vIFBsYWNlaG9sZGVyRW51bVZhbHVlIGlzIGEgcGxhY2Vob2xkZXIsIHJlcHJlc2VudGluZyBvbmx5IHRoZSBmdWxsIG5hbWUuCi10eXBlIFBsYWNlaG9sZGVyRW51bVZhbHVlIHByZWYuRnVsbE5hbWUKK3R5cGUgUGxhY2Vob2xkZXJFbnVtVmFsdWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lCiAKLWZ1bmMgKGUgUGxhY2Vob2xkZXJFbnVtVmFsdWUpIFBhcmVudEZpbGUoKSBwcmVmLkZpbGVEZXNjcmlwdG9yICAgICB7IHJldHVybiBuaWwgfQotZnVuYyAoZSBQbGFjZWhvbGRlckVudW1WYWx1ZSkgUGFyZW50KCkgcHJlZi5EZXNjcmlwdG9yICAgICAgICAgICAgIHsgcmV0dXJuIG5pbCB9Ci1mdW5jIChlIFBsYWNlaG9sZGVyRW51bVZhbHVlKSBJbmRleCgpIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gMCB9Ci1mdW5jIChlIFBsYWNlaG9sZGVyRW51bVZhbHVlKSBTeW50YXgoKSBwcmVmLlN5bnRheCAgICAgICAgICAgICAgICAgeyByZXR1cm4gMCB9Ci1mdW5jIChlIFBsYWNlaG9sZGVyRW51bVZhbHVlKSBOYW1lKCkgcHJlZi5OYW1lICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gcHJlZi5GdWxsTmFtZShlKS5OYW1lKCkgfQotZnVuYyAoZSBQbGFjZWhvbGRlckVudW1WYWx1ZSkgRnVsbE5hbWUoKSBwcmVmLkZ1bGxOYW1lICAgICAgICAgICAgIHsgcmV0dXJuIHByZWYuRnVsbE5hbWUoZSkgfQotZnVuYyAoZSBQbGFjZWhvbGRlckVudW1WYWx1ZSkgSXNQbGFjZWhvbGRlcigpIGJvb2wgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHRydWUgfQotZnVuYyAoZSBQbGFjZWhvbGRlckVudW1WYWx1ZSkgT3B0aW9ucygpIHByZWYuUHJvdG9NZXNzYWdlICAgICAgICAgIHsgcmV0dXJuIGRlc2NvcHRzLkVudW1WYWx1ZSB9Ci1mdW5jIChlIFBsYWNlaG9sZGVyRW51bVZhbHVlKSBOdW1iZXIoKSBwcmVmLkVudW1OdW1iZXIgICAgICAgICAgICAgeyByZXR1cm4gMCB9Ci1mdW5jIChlIFBsYWNlaG9sZGVyRW51bVZhbHVlKSBQcm90b1R5cGUocHJlZi5FbnVtVmFsdWVEZXNjcmlwdG9yKSAgeyByZXR1cm4gfQotZnVuYyAoZSBQbGFjZWhvbGRlckVudW1WYWx1ZSkgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpIHsgcmV0dXJuIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtVmFsdWUpIFBhcmVudEZpbGUoKSBwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IgICAgeyByZXR1cm4gbmlsIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtVmFsdWUpIFBhcmVudCgpIHByb3RvcmVmbGVjdC5EZXNjcmlwdG9yICAgICAgICAgICAgeyByZXR1cm4gbmlsIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtVmFsdWUpIEluZGV4KCkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gMCB9CitmdW5jIChlIFBsYWNlaG9sZGVyRW51bVZhbHVlKSBTeW50YXgoKSBwcm90b3JlZmxlY3QuU3ludGF4ICAgICAgICAgICAgICAgIHsgcmV0dXJuIDAgfQorZnVuYyAoZSBQbGFjZWhvbGRlckVudW1WYWx1ZSkgTmFtZSgpIHByb3RvcmVmbGVjdC5OYW1lICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBwcm90b3JlZmxlY3QuRnVsbE5hbWUoZSkuTmFtZSgpIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtVmFsdWUpIEZ1bGxOYW1lKCkgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lICAgICAgICAgICAgeyByZXR1cm4gcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKGUpIH0KK2Z1bmMgKGUgUGxhY2Vob2xkZXJFbnVtVmFsdWUpIElzUGxhY2Vob2xkZXIoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gdHJ1ZSB9CitmdW5jIChlIFBsYWNlaG9sZGVyRW51bVZhbHVlKSBPcHRpb25zKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSAgICAgICAgIHsgcmV0dXJuIGRlc2NvcHRzLkVudW1WYWx1ZSB9CitmdW5jIChlIFBsYWNlaG9sZGVyRW51bVZhbHVlKSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRW51bU51bWJlciAgICAgICAgICAgIHsgcmV0dXJuIDAgfQorZnVuYyAoZSBQbGFjZWhvbGRlckVudW1WYWx1ZSkgUHJvdG9UeXBlKHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9yKSB7IHJldHVybiB9CitmdW5jIChlIFBsYWNlaG9sZGVyRW51bVZhbHVlKSBQcm90b0ludGVybmFsKHByYWdtYS5Eb05vdEltcGxlbWVudCkgICAgICAgIHsgcmV0dXJuIH0KIAogLy8gUGxhY2Vob2xkZXJNZXNzYWdlIGlzIGEgcGxhY2Vob2xkZXIsIHJlcHJlc2VudGluZyBvbmx5IHRoZSBmdWxsIG5hbWUuCi10eXBlIFBsYWNlaG9sZGVyTWVzc2FnZSBwcmVmLkZ1bGxOYW1lCit0eXBlIFBsYWNlaG9sZGVyTWVzc2FnZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUKIAotZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIFBhcmVudEZpbGUoKSBwcmVmLkZpbGVEZXNjcmlwdG9yICAgICAgICAgICAgIHsgcmV0dXJuIG5pbCB9Ci1mdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgUGFyZW50KCkgcHJlZi5EZXNjcmlwdG9yICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbmlsIH0KLWZ1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBJbmRleCgpIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAwIH0KLWZ1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBTeW50YXgoKSBwcmVmLlN5bnRheCAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAwIH0KLWZ1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBOYW1lKCkgcHJlZi5OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBwcmVmLkZ1bGxOYW1lKG0pLk5hbWUoKSB9Ci1mdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgRnVsbE5hbWUoKSBwcmVmLkZ1bGxOYW1lICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gcHJlZi5GdWxsTmFtZShtKSB9Ci1mdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgSXNQbGFjZWhvbGRlcigpIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gdHJ1ZSB9Ci1mdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgT3B0aW9ucygpIHByZWYuUHJvdG9NZXNzYWdlICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZGVzY29wdHMuTWVzc2FnZSB9Ci1mdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgSXNNYXBFbnRyeSgpIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmFsc2UgfQotZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIEZpZWxkcygpIHByZWYuRmllbGREZXNjcmlwdG9ycyAgICAgICAgICAgICAgIHsgcmV0dXJuIGVtcHR5RmllbGRzIH0KLWZ1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBPbmVvZnMoKSBwcmVmLk9uZW9mRGVzY3JpcHRvcnMgICAgICAgICAgICAgICB7IHJldHVybiBlbXB0eU9uZW9mcyB9Ci1mdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgUmVzZXJ2ZWROYW1lcygpIHByZWYuTmFtZXMgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZW1wdHlOYW1lcyB9Ci1mdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgUmVzZXJ2ZWRSYW5nZXMoKSBwcmVmLkZpZWxkUmFuZ2VzICAgICAgICAgICAgeyByZXR1cm4gZW1wdHlGaWVsZFJhbmdlcyB9Ci1mdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgUmVxdWlyZWROdW1iZXJzKCkgcHJlZi5GaWVsZE51bWJlcnMgICAgICAgICAgeyByZXR1cm4gZW1wdHlGaWVsZE51bWJlcnMgfQotZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIEV4dGVuc2lvblJhbmdlcygpIHByZWYuRmllbGRSYW5nZXMgICAgICAgICAgIHsgcmV0dXJuIGVtcHR5RmllbGRSYW5nZXMgfQotZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIEV4dGVuc2lvblJhbmdlT3B0aW9ucyhpbnQpIHByZWYuUHJvdG9NZXNzYWdlIHsgcGFuaWMoImluZGV4IG91dCBvZiByYW5nZSIpIH0KLWZ1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBNZXNzYWdlcygpIHByZWYuTWVzc2FnZURlc2NyaXB0b3JzICAgICAgICAgICB7IHJldHVybiBlbXB0eU1lc3NhZ2VzIH0KLWZ1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBFbnVtcygpIHByZWYuRW51bURlc2NyaXB0b3JzICAgICAgICAgICAgICAgICB7IHJldHVybiBlbXB0eUVudW1zIH0KLWZ1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBFeHRlbnNpb25zKCkgcHJlZi5FeHRlbnNpb25EZXNjcmlwdG9ycyAgICAgICB7IHJldHVybiBlbXB0eUV4dGVuc2lvbnMgfQotZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIFByb3RvVHlwZShwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yKSAgICAgICAgICAgIHsgcmV0dXJuIH0KLWZ1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBQcm90b0ludGVybmFsKHByYWdtYS5Eb05vdEltcGxlbWVudCkgICAgICAgICB7IHJldHVybiB9CitmdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgUGFyZW50RmlsZSgpIHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvciAgICB7IHJldHVybiBuaWwgfQorZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIFBhcmVudCgpIHByb3RvcmVmbGVjdC5EZXNjcmlwdG9yICAgICAgICAgICAgeyByZXR1cm4gbmlsIH0KK2Z1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBJbmRleCgpIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIDAgfQorZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIFN5bnRheCgpIHByb3RvcmVmbGVjdC5TeW50YXggICAgICAgICAgICAgICAgeyByZXR1cm4gMCB9CitmdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgTmFtZSgpIHByb3RvcmVmbGVjdC5OYW1lICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBwcm90b3JlZmxlY3QuRnVsbE5hbWUobSkuTmFtZSgpIH0KK2Z1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBGdWxsTmFtZSgpIHByb3RvcmVmbGVjdC5GdWxsTmFtZSAgICAgICAgICAgIHsgcmV0dXJuIHByb3RvcmVmbGVjdC5GdWxsTmFtZShtKSB9CitmdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgSXNQbGFjZWhvbGRlcigpIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiB0cnVlIH0KK2Z1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBPcHRpb25zKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSAgICAgICAgIHsgcmV0dXJuIGRlc2NvcHRzLk1lc3NhZ2UgfQorZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIElzTWFwRW50cnkoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmFsc2UgfQorZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIEZpZWxkcygpIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3JzICAgICAgeyByZXR1cm4gZW1wdHlGaWVsZHMgfQorZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIE9uZW9mcygpIHByb3RvcmVmbGVjdC5PbmVvZkRlc2NyaXB0b3JzICAgICAgeyByZXR1cm4gZW1wdHlPbmVvZnMgfQorZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIFJlc2VydmVkTmFtZXMoKSBwcm90b3JlZmxlY3QuTmFtZXMgICAgICAgICAgeyByZXR1cm4gZW1wdHlOYW1lcyB9CitmdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgUmVzZXJ2ZWRSYW5nZXMoKSBwcm90b3JlZmxlY3QuRmllbGRSYW5nZXMgICB7IHJldHVybiBlbXB0eUZpZWxkUmFuZ2VzIH0KK2Z1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBSZXF1aXJlZE51bWJlcnMoKSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXJzIHsgcmV0dXJuIGVtcHR5RmllbGROdW1iZXJzIH0KK2Z1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBFeHRlbnNpb25SYW5nZXMoKSBwcm90b3JlZmxlY3QuRmllbGRSYW5nZXMgIHsgcmV0dXJuIGVtcHR5RmllbGRSYW5nZXMgfQorZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIEV4dGVuc2lvblJhbmdlT3B0aW9ucyhpbnQpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgeworCXBhbmljKCJpbmRleCBvdXQgb2YgcmFuZ2UiKQorfQorZnVuYyAobSBQbGFjZWhvbGRlck1lc3NhZ2UpIE1lc3NhZ2VzKCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9ycyAgICAgeyByZXR1cm4gZW1wdHlNZXNzYWdlcyB9CitmdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgRW51bXMoKSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3JzICAgICAgICAgICB7IHJldHVybiBlbXB0eUVudW1zIH0KK2Z1bmMgKG0gUGxhY2Vob2xkZXJNZXNzYWdlKSBFeHRlbnNpb25zKCkgcHJvdG9yZWZsZWN0LkV4dGVuc2lvbkRlc2NyaXB0b3JzIHsgcmV0dXJuIGVtcHR5RXh0ZW5zaW9ucyB9CitmdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgUHJvdG9UeXBlKHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvcikgICAgICB7IHJldHVybiB9CitmdW5jIChtIFBsYWNlaG9sZGVyTWVzc2FnZSkgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpICAgICAgICAgICB7IHJldHVybiB9CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZXR5cGUvYnVpbGQuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZXR5cGUvYnVpbGQuZ28KaW5kZXggMGEwZGQzNS4uZjBlMzhjNCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGV0eXBlL2J1aWxkLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxldHlwZS9idWlsZC5nbwpAQCAtMTAsMTcgKzEwLDE2IEBACiAJInJlZmxlY3QiCiAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZGVzY29wdHMiCi0JZmRlc2MgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjIgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYyIKIAlwaW1wbCAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbCIKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKLQlwcmVnICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVnaXN0cnkiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVnaXN0cnkiCiApCiAKIC8vIEJ1aWxkZXIgY29uc3RydWN0cyB0eXBlIGRlc2NyaXB0b3JzIGZyb20gYSByYXcgZmlsZSBkZXNjcmlwdG9yCiAvLyBhbmQgYXNzb2NpYXRlZCBHbyB0eXBlcyBmb3IgZWFjaCBlbnVtIGFuZCBtZXNzYWdlIGRlY2xhcmF0aW9uLgogLy8KLS8vCi0vLyBGbGF0dGVuZWQgT3JkZXJpbmcKKy8vICMgRmxhdHRlbmVkIE9yZGVyaW5nCiAvLwogLy8gVGhlIHByb3RvYnVmIHR5cGUgc3lzdGVtIHJlcHJlc2VudHMgZGVjbGFyYXRpb25zIGFzIGEgdHJlZS4gQ2VydGFpbiBub2RlcyBpbgogLy8gdGhlIHRyZWUgcmVxdWlyZSB1cyB0byBlaXRoZXIgYXNzb2NpYXRlIGl0IHdpdGggYSBjb25jcmV0ZSBHbyB0eXBlIG9yIHRvCkBAIC01Miw3ICs1MSw3IEBACiAvLyB0aGF0IGNoaWxkcmVuIHRoZW1zZWx2ZXMgbWF5IGhhdmUuCiB0eXBlIEJ1aWxkZXIgc3RydWN0IHsKIAkvLyBGaWxlIGlzIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBidWlsZGVyLgotCUZpbGUgZmRlc2MuQnVpbGRlcgorCUZpbGUgZmlsZWRlc2MuQnVpbGRlcgogCiAJLy8gR29UeXBlcyBpcyBhIHVuaXF1ZSBzZXQgb2YgdGhlIEdvIHR5cGVzIGZvciBhbGwgZGVjbGFyYXRpb25zIGFuZAogCS8vIGRlcGVuZGVuY2llcy4gRWFjaCB0eXBlIGlzIHJlcHJlc2VudGVkIGFzIGEgemVybyB2YWx1ZSBvZiB0aGUgR28gdHlwZS4KQEAgLTEwOCwyMiArMTA3LDIyIEBACiAJLy8gVHlwZVJlZ2lzdHJ5IGlzIHRoZSByZWdpc3RyeSB0byByZWdpc3RlciBlYWNoIHR5cGUgZGVzY3JpcHRvci4KIAkvLyBJZiBuaWwsIGl0IHVzZXMgcHJvdG9yZWdpc3RyeS5HbG9iYWxUeXBlcy4KIAlUeXBlUmVnaXN0cnkgaW50ZXJmYWNlIHsKLQkJUmVnaXN0ZXJNZXNzYWdlKHByZWYuTWVzc2FnZVR5cGUpIGVycm9yCi0JCVJlZ2lzdGVyRW51bShwcmVmLkVudW1UeXBlKSBlcnJvcgotCQlSZWdpc3RlckV4dGVuc2lvbihwcmVmLkV4dGVuc2lvblR5cGUpIGVycm9yCisJCVJlZ2lzdGVyTWVzc2FnZShwcm90b3JlZmxlY3QuTWVzc2FnZVR5cGUpIGVycm9yCisJCVJlZ2lzdGVyRW51bShwcm90b3JlZmxlY3QuRW51bVR5cGUpIGVycm9yCisJCVJlZ2lzdGVyRXh0ZW5zaW9uKHByb3RvcmVmbGVjdC5FeHRlbnNpb25UeXBlKSBlcnJvcgogCX0KIH0KIAogLy8gT3V0IGlzIHRoZSBvdXRwdXQgb2YgdGhlIGJ1aWxkZXIuCiB0eXBlIE91dCBzdHJ1Y3QgewotCUZpbGUgcHJlZi5GaWxlRGVzY3JpcHRvcgorCUZpbGUgcHJvdG9yZWZsZWN0LkZpbGVEZXNjcmlwdG9yCiB9CiAKIGZ1bmMgKHRiIEJ1aWxkZXIpIEJ1aWxkKCkgKG91dCBPdXQpIHsKIAkvLyBSZXBsYWNlIHRoZSByZXNvbHZlciB3aXRoIG9uZSB0aGF0IHJlc29sdmVzIGRlcGVuZGVuY2llcyBieSBpbmRleCwKIAkvLyB3aGljaCBpcyBmYXN0ZXIgYW5kIG1vcmUgcmVsaWFibGUgdGhhbiByZWx5aW5nIG9uIHRoZSBnbG9iYWwgcmVnaXN0cnkuCiAJaWYgdGIuRmlsZS5GaWxlUmVnaXN0cnkgPT0gbmlsIHsKLQkJdGIuRmlsZS5GaWxlUmVnaXN0cnkgPSBwcmVnLkdsb2JhbEZpbGVzCisJCXRiLkZpbGUuRmlsZVJlZ2lzdHJ5ID0gcHJvdG9yZWdpc3RyeS5HbG9iYWxGaWxlcwogCX0KIAl0Yi5GaWxlLkZpbGVSZWdpc3RyeSA9ICZyZXNvbHZlckJ5SW5kZXh7CiAJCWdvVHlwZXM6ICAgICAgdGIuR29UeXBlcywKQEAgLTEzMyw3ICsxMzIsNyBAQAogCiAJLy8gSW5pdGlhbGl6ZSByZWdpc3RyeSBpZiB1bnBvcHVsYXRlZC4KIAlpZiB0Yi5UeXBlUmVnaXN0cnkgPT0gbmlsIHsKLQkJdGIuVHlwZVJlZ2lzdHJ5ID0gcHJlZy5HbG9iYWxUeXBlcworCQl0Yi5UeXBlUmVnaXN0cnkgPSBwcm90b3JlZ2lzdHJ5Lkdsb2JhbFR5cGVzCiAJfQogCiAJZmJPdXQgOj0gdGIuRmlsZS5CdWlsZCgpCkBAIC0xODMsMjMgKzE4MiwyMyBAQAogCQkJZm9yIGkgOj0gcmFuZ2UgZmJPdXQuTWVzc2FnZXMgewogCQkJCXN3aXRjaCBmYk91dC5NZXNzYWdlc1tpXS5OYW1lKCkgewogCQkJCWNhc2UgIkZpbGVPcHRpb25zIjoKLQkJCQkJZGVzY29wdHMuRmlsZSA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcmVmLlByb3RvTWVzc2FnZSkKKwkJCQkJZGVzY29wdHMuRmlsZSA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKQogCQkJCWNhc2UgIkVudW1PcHRpb25zIjoKLQkJCQkJZGVzY29wdHMuRW51bSA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcmVmLlByb3RvTWVzc2FnZSkKKwkJCQkJZGVzY29wdHMuRW51bSA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKQogCQkJCWNhc2UgIkVudW1WYWx1ZU9wdGlvbnMiOgotCQkJCQlkZXNjb3B0cy5FbnVtVmFsdWUgPSBtZXNzYWdlR29UeXBlc1tpXS4ocHJlZi5Qcm90b01lc3NhZ2UpCisJCQkJCWRlc2NvcHRzLkVudW1WYWx1ZSA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKQogCQkJCWNhc2UgIk1lc3NhZ2VPcHRpb25zIjoKLQkJCQkJZGVzY29wdHMuTWVzc2FnZSA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcmVmLlByb3RvTWVzc2FnZSkKKwkJCQkJZGVzY29wdHMuTWVzc2FnZSA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKQogCQkJCWNhc2UgIkZpZWxkT3B0aW9ucyI6Ci0JCQkJCWRlc2NvcHRzLkZpZWxkID0gbWVzc2FnZUdvVHlwZXNbaV0uKHByZWYuUHJvdG9NZXNzYWdlKQorCQkJCQlkZXNjb3B0cy5GaWVsZCA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKQogCQkJCWNhc2UgIk9uZW9mT3B0aW9ucyI6Ci0JCQkJCWRlc2NvcHRzLk9uZW9mID0gbWVzc2FnZUdvVHlwZXNbaV0uKHByZWYuUHJvdG9NZXNzYWdlKQorCQkJCQlkZXNjb3B0cy5PbmVvZiA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKQogCQkJCWNhc2UgIkV4dGVuc2lvblJhbmdlT3B0aW9ucyI6Ci0JCQkJCWRlc2NvcHRzLkV4dGVuc2lvblJhbmdlID0gbWVzc2FnZUdvVHlwZXNbaV0uKHByZWYuUHJvdG9NZXNzYWdlKQorCQkJCQlkZXNjb3B0cy5FeHRlbnNpb25SYW5nZSA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKQogCQkJCWNhc2UgIlNlcnZpY2VPcHRpb25zIjoKLQkJCQkJZGVzY29wdHMuU2VydmljZSA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcmVmLlByb3RvTWVzc2FnZSkKKwkJCQkJZGVzY29wdHMuU2VydmljZSA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKQogCQkJCWNhc2UgIk1ldGhvZE9wdGlvbnMiOgotCQkJCQlkZXNjb3B0cy5NZXRob2QgPSBtZXNzYWdlR29UeXBlc1tpXS4ocHJlZi5Qcm90b01lc3NhZ2UpCisJCQkJCWRlc2NvcHRzLk1ldGhvZCA9IG1lc3NhZ2VHb1R5cGVzW2ldLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKQogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMjE2LDExICsyMTUsMTEgQEAKIAkJY29uc3QgbGlzdEV4dERlcHMgPSAyCiAJCXZhciBnb1R5cGUgcmVmbGVjdC5UeXBlCiAJCXN3aXRjaCBmYk91dC5FeHRlbnNpb25zW2ldLkwxLktpbmQgewotCQljYXNlIHByZWYuRW51bUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkVudW1LaW5kOgogCQkJaiA6PSBkZXBJZHhzLkdldCh0Yi5EZXBlbmRlbmN5SW5kZXhlcywgbGlzdEV4dERlcHMsIGRlcElkeCkKIAkJCWdvVHlwZSA9IHJlZmxlY3QuVHlwZU9mKHRiLkdvVHlwZXNbal0pCiAJCQlkZXBJZHgrKwotCQljYXNlIHByZWYuTWVzc2FnZUtpbmQsIHByZWYuR3JvdXBLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZCwgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKIAkJCWogOj0gZGVwSWR4cy5HZXQodGIuRGVwZW5kZW5jeUluZGV4ZXMsIGxpc3RFeHREZXBzLCBkZXBJZHgpCiAJCQlnb1R5cGUgPSByZWZsZWN0LlR5cGVPZih0Yi5Hb1R5cGVzW2pdKQogCQkJZGVwSWR4KysKQEAgLTI0MiwyMiArMjQxLDIyIEBACiAJcmV0dXJuIG91dAogfQogCi12YXIgZ29UeXBlRm9yUEJLaW5kID0gbWFwW3ByZWYuS2luZF1yZWZsZWN0LlR5cGV7Ci0JcHJlZi5Cb29sS2luZDogICAgIHJlZmxlY3QuVHlwZU9mKGJvb2woZmFsc2UpKSwKLQlwcmVmLkludDMyS2luZDogICAgcmVmbGVjdC5UeXBlT2YoaW50MzIoMCkpLAotCXByZWYuU2ludDMyS2luZDogICByZWZsZWN0LlR5cGVPZihpbnQzMigwKSksCi0JcHJlZi5TZml4ZWQzMktpbmQ6IHJlZmxlY3QuVHlwZU9mKGludDMyKDApKSwKLQlwcmVmLkludDY0S2luZDogICAgcmVmbGVjdC5UeXBlT2YoaW50NjQoMCkpLAotCXByZWYuU2ludDY0S2luZDogICByZWZsZWN0LlR5cGVPZihpbnQ2NCgwKSksCi0JcHJlZi5TZml4ZWQ2NEtpbmQ6IHJlZmxlY3QuVHlwZU9mKGludDY0KDApKSwKLQlwcmVmLlVpbnQzMktpbmQ6ICAgcmVmbGVjdC5UeXBlT2YodWludDMyKDApKSwKLQlwcmVmLkZpeGVkMzJLaW5kOiAgcmVmbGVjdC5UeXBlT2YodWludDMyKDApKSwKLQlwcmVmLlVpbnQ2NEtpbmQ6ICAgcmVmbGVjdC5UeXBlT2YodWludDY0KDApKSwKLQlwcmVmLkZpeGVkNjRLaW5kOiAgcmVmbGVjdC5UeXBlT2YodWludDY0KDApKSwKLQlwcmVmLkZsb2F0S2luZDogICAgcmVmbGVjdC5UeXBlT2YoZmxvYXQzMigwKSksCi0JcHJlZi5Eb3VibGVLaW5kOiAgIHJlZmxlY3QuVHlwZU9mKGZsb2F0NjQoMCkpLAotCXByZWYuU3RyaW5nS2luZDogICByZWZsZWN0LlR5cGVPZihzdHJpbmcoIiIpKSwKLQlwcmVmLkJ5dGVzS2luZDogICAgcmVmbGVjdC5UeXBlT2YoW11ieXRlKG5pbCkpLAordmFyIGdvVHlwZUZvclBCS2luZCA9IG1hcFtwcm90b3JlZmxlY3QuS2luZF1yZWZsZWN0LlR5cGV7CisJcHJvdG9yZWZsZWN0LkJvb2xLaW5kOiAgICAgcmVmbGVjdC5UeXBlT2YoYm9vbChmYWxzZSkpLAorCXByb3RvcmVmbGVjdC5JbnQzMktpbmQ6ICAgIHJlZmxlY3QuVHlwZU9mKGludDMyKDApKSwKKwlwcm90b3JlZmxlY3QuU2ludDMyS2luZDogICByZWZsZWN0LlR5cGVPZihpbnQzMigwKSksCisJcHJvdG9yZWZsZWN0LlNmaXhlZDMyS2luZDogcmVmbGVjdC5UeXBlT2YoaW50MzIoMCkpLAorCXByb3RvcmVmbGVjdC5JbnQ2NEtpbmQ6ICAgIHJlZmxlY3QuVHlwZU9mKGludDY0KDApKSwKKwlwcm90b3JlZmxlY3QuU2ludDY0S2luZDogICByZWZsZWN0LlR5cGVPZihpbnQ2NCgwKSksCisJcHJvdG9yZWZsZWN0LlNmaXhlZDY0S2luZDogcmVmbGVjdC5UeXBlT2YoaW50NjQoMCkpLAorCXByb3RvcmVmbGVjdC5VaW50MzJLaW5kOiAgIHJlZmxlY3QuVHlwZU9mKHVpbnQzMigwKSksCisJcHJvdG9yZWZsZWN0LkZpeGVkMzJLaW5kOiAgcmVmbGVjdC5UeXBlT2YodWludDMyKDApKSwKKwlwcm90b3JlZmxlY3QuVWludDY0S2luZDogICByZWZsZWN0LlR5cGVPZih1aW50NjQoMCkpLAorCXByb3RvcmVmbGVjdC5GaXhlZDY0S2luZDogIHJlZmxlY3QuVHlwZU9mKHVpbnQ2NCgwKSksCisJcHJvdG9yZWZsZWN0LkZsb2F0S2luZDogICAgcmVmbGVjdC5UeXBlT2YoZmxvYXQzMigwKSksCisJcHJvdG9yZWZsZWN0LkRvdWJsZUtpbmQ6ICAgcmVmbGVjdC5UeXBlT2YoZmxvYXQ2NCgwKSksCisJcHJvdG9yZWZsZWN0LlN0cmluZ0tpbmQ6ICAgcmVmbGVjdC5UeXBlT2Yoc3RyaW5nKCIiKSksCisJcHJvdG9yZWZsZWN0LkJ5dGVzS2luZDogICAgcmVmbGVjdC5UeXBlT2YoW11ieXRlKG5pbCkpLAogfQogCiB0eXBlIGRlcElkeHMgW11pbnQzMgpAQCAtMjc0LDEzICsyNzMsMTMgQEAKIAkJZmlsZVJlZ2lzdHJ5CiAJfQogCWZpbGVSZWdpc3RyeSBpbnRlcmZhY2UgewotCQlGaW5kRmlsZUJ5UGF0aChzdHJpbmcpIChwcmVmLkZpbGVEZXNjcmlwdG9yLCBlcnJvcikKLQkJRmluZERlc2NyaXB0b3JCeU5hbWUocHJlZi5GdWxsTmFtZSkgKHByZWYuRGVzY3JpcHRvciwgZXJyb3IpCi0JCVJlZ2lzdGVyRmlsZShwcmVmLkZpbGVEZXNjcmlwdG9yKSBlcnJvcgorCQlGaW5kRmlsZUJ5UGF0aChzdHJpbmcpIChwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IsIGVycm9yKQorCQlGaW5kRGVzY3JpcHRvckJ5TmFtZShwcm90b3JlZmxlY3QuRnVsbE5hbWUpIChwcm90b3JlZmxlY3QuRGVzY3JpcHRvciwgZXJyb3IpCisJCVJlZ2lzdGVyRmlsZShwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IpIGVycm9yCiAJfQogKQogCi1mdW5jIChyICpyZXNvbHZlckJ5SW5kZXgpIEZpbmRFbnVtQnlJbmRleChpLCBqIGludDMyLCBlcyBbXWZkZXNjLkVudW0sIG1zIFtdZmRlc2MuTWVzc2FnZSkgcHJlZi5FbnVtRGVzY3JpcHRvciB7CitmdW5jIChyICpyZXNvbHZlckJ5SW5kZXgpIEZpbmRFbnVtQnlJbmRleChpLCBqIGludDMyLCBlcyBbXWZpbGVkZXNjLkVudW0sIG1zIFtdZmlsZWRlc2MuTWVzc2FnZSkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKIAlpZiBkZXBJZHggOj0gaW50KHIuZGVwSWR4cy5HZXQoaSwgaikpOyBpbnQoZGVwSWR4KSA8IGxlbihlcykrbGVuKG1zKSB7CiAJCXJldHVybiAmZXNbZGVwSWR4XQogCX0gZWxzZSB7CkBAIC0yODgsNyArMjg3LDcgQEAKIAl9CiB9CiAKLWZ1bmMgKHIgKnJlc29sdmVyQnlJbmRleCkgRmluZE1lc3NhZ2VCeUluZGV4KGksIGogaW50MzIsIGVzIFtdZmRlc2MuRW51bSwgbXMgW11mZGVzYy5NZXNzYWdlKSBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yIHsKK2Z1bmMgKHIgKnJlc29sdmVyQnlJbmRleCkgRmluZE1lc3NhZ2VCeUluZGV4KGksIGogaW50MzIsIGVzIFtdZmlsZWRlc2MuRW51bSwgbXMgW11maWxlZGVzYy5NZXNzYWdlKSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IgewogCWlmIGRlcElkeCA6PSBpbnQoci5kZXBJZHhzLkdldChpLCBqKSk7IGRlcElkeCA8IGxlbihlcykrbGVuKG1zKSB7CiAJCXJldHVybiAmbXNbZGVwSWR4LWxlbihlcyldCiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9mbGFncy9wcm90b19sZWdhY3lfZGlzYWJsZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9mbGFncy9wcm90b19sZWdhY3lfZGlzYWJsZS5nbwppbmRleCBhNzI5OTVmLi5iZGE4ZThjIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmxhZ3MvcHJvdG9fbGVnYWN5X2Rpc2FibGUuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZsYWdzL3Byb3RvX2xlZ2FjeV9kaXNhYmxlLmdvCkBAIC0yLDYgKzIsNyBAQAogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUKIC8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAorLy9nbzpidWlsZCAhcHJvdG9sZWdhY3kKIC8vICtidWlsZCAhcHJvdG9sZWdhY3kKIAogcGFja2FnZSBmbGFncwpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZsYWdzL3Byb3RvX2xlZ2FjeV9lbmFibGUuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmxhZ3MvcHJvdG9fbGVnYWN5X2VuYWJsZS5nbwppbmRleCA3NzJlMmYwLi42ZDhkOWJkIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmxhZ3MvcHJvdG9fbGVnYWN5X2VuYWJsZS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmxhZ3MvcHJvdG9fbGVnYWN5X2VuYWJsZS5nbwpAQCAtMiw2ICsyLDcgQEAKIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlCiAvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAKKy8vZ286YnVpbGQgcHJvdG9sZWdhY3kKIC8vICtidWlsZCBwcm90b2xlZ2FjeQogCiBwYWNrYWdlIGZsYWdzCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZ2VuaWQvZGVzY3JpcHRvcl9nZW4uZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZ2VuaWQvZGVzY3JpcHRvcl9nZW4uZ28KaW5kZXggZTNjZGYxYy4uNDAyNzJjOCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkL2Rlc2NyaXB0b3JfZ2VuLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9nZW5pZC9kZXNjcmlwdG9yX2dlbi5nbwpAQCAtMTIsNiArMTIsMjcgQEAKIAogY29uc3QgRmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90byA9ICJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90byIKIAorLy8gRnVsbCBhbmQgc2hvcnQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uLgorY29uc3QgKAorCUVkaXRpb25fZW51bV9mdWxsbmFtZSA9ICJnb29nbGUucHJvdG9idWYuRWRpdGlvbiIKKwlFZGl0aW9uX2VudW1fbmFtZSAgICAgPSAiRWRpdGlvbiIKKykKKworLy8gRW51bSB2YWx1ZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uLgorY29uc3QgKAorCUVkaXRpb25fRURJVElPTl9VTktOT1dOX2VudW1fdmFsdWUgICAgICAgICA9IDAKKwlFZGl0aW9uX0VESVRJT05fUFJPVE8yX2VudW1fdmFsdWUgICAgICAgICAgPSA5OTgKKwlFZGl0aW9uX0VESVRJT05fUFJPVE8zX2VudW1fdmFsdWUgICAgICAgICAgPSA5OTkKKwlFZGl0aW9uX0VESVRJT05fMjAyM19lbnVtX3ZhbHVlICAgICAgICAgICAgPSAxMDAwCisJRWRpdGlvbl9FRElUSU9OXzIwMjRfZW51bV92YWx1ZSAgICAgICAgICAgID0gMTAwMQorCUVkaXRpb25fRURJVElPTl8xX1RFU1RfT05MWV9lbnVtX3ZhbHVlICAgICA9IDEKKwlFZGl0aW9uX0VESVRJT05fMl9URVNUX09OTFlfZW51bV92YWx1ZSAgICAgPSAyCisJRWRpdGlvbl9FRElUSU9OXzk5OTk3X1RFU1RfT05MWV9lbnVtX3ZhbHVlID0gOTk5OTcKKwlFZGl0aW9uX0VESVRJT05fOTk5OThfVEVTVF9PTkxZX2VudW1fdmFsdWUgPSA5OTk5OAorCUVkaXRpb25fRURJVElPTl85OTk5OV9URVNUX09OTFlfZW51bV92YWx1ZSA9IDk5OTk5CisJRWRpdGlvbl9FRElUSU9OX01BWF9lbnVtX3ZhbHVlICAgICAgICAgICAgID0gMjE0NzQ4MzY0NworKQorCiAvLyBOYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LgogY29uc3QgKAogCUZpbGVEZXNjcmlwdG9yU2V0X21lc3NhZ2VfbmFtZSAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgICAgID0gIkZpbGVEZXNjcmlwdG9yU2V0IgpAQCAtNTAsNiArNzEsNyBAQAogCUZpbGVEZXNjcmlwdG9yUHJvdG9fT3B0aW9uc19maWVsZF9uYW1lICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gIm9wdGlvbnMiCiAJRmlsZURlc2NyaXB0b3JQcm90b19Tb3VyY2VDb2RlSW5mb19maWVsZF9uYW1lICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAic291cmNlX2NvZGVfaW5mbyIKIAlGaWxlRGVzY3JpcHRvclByb3RvX1N5bnRheF9maWVsZF9uYW1lICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJzeW50YXgiCisJRmlsZURlc2NyaXB0b3JQcm90b19FZGl0aW9uX2ZpZWxkX25hbWUgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZWRpdGlvbiIKIAogCUZpbGVEZXNjcmlwdG9yUHJvdG9fTmFtZV9maWVsZF9mdWxsbmFtZSAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ubmFtZSIKIAlGaWxlRGVzY3JpcHRvclByb3RvX1BhY2thZ2VfZmllbGRfZnVsbG5hbWUgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnBhY2thZ2UiCkBAIC02Myw2ICs4NSw3IEBACiAJRmlsZURlc2NyaXB0b3JQcm90b19PcHRpb25zX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5vcHRpb25zIgogCUZpbGVEZXNjcmlwdG9yUHJvdG9fU291cmNlQ29kZUluZm9fZmllbGRfZnVsbG5hbWUgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc291cmNlX2NvZGVfaW5mbyIKIAlGaWxlRGVzY3JpcHRvclByb3RvX1N5bnRheF9maWVsZF9mdWxsbmFtZSAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnN5bnRheCIKKwlGaWxlRGVzY3JpcHRvclByb3RvX0VkaXRpb25fZmllbGRfZnVsbG5hbWUgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmVkaXRpb24iCiApCiAKIC8vIEZpZWxkIG51bWJlcnMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLgpAQCAtNzksNiArMTAyLDcgQEAKIAlGaWxlRGVzY3JpcHRvclByb3RvX09wdGlvbnNfZmllbGRfbnVtYmVyICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDgKIAlGaWxlRGVzY3JpcHRvclByb3RvX1NvdXJjZUNvZGVJbmZvX2ZpZWxkX251bWJlciAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDkKIAlGaWxlRGVzY3JpcHRvclByb3RvX1N5bnRheF9maWVsZF9udW1iZXIgICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDEyCisJRmlsZURlc2NyaXB0b3JQcm90b19FZGl0aW9uX2ZpZWxkX251bWJlciAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAxNAogKQogCiAvLyBOYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by4KQEAgLTE4MCwxMyArMjA0LDY0IEBACiAvLyBGaWVsZCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy4KIGNvbnN0ICgKIAlFeHRlbnNpb25SYW5nZU9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gInVuaW50ZXJwcmV0ZWRfb3B0aW9uIgorCUV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbl9maWVsZF9uYW1lICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZGVjbGFyYXRpb24iCisJRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX25hbWUgICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJmZWF0dXJlcyIKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfVmVyaWZpY2F0aW9uX2ZpZWxkX25hbWUgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gInZlcmlmaWNhdGlvbiIKIAogCUV4dGVuc2lvblJhbmdlT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX2Z1bGxuYW1lIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uIgorCUV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbl9maWVsZF9mdWxsbmFtZSAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmRlY2xhcmF0aW9uIgorCUV4dGVuc2lvblJhbmdlT3B0aW9uc19GZWF0dXJlc19maWVsZF9mdWxsbmFtZSAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmZlYXR1cmVzIgorCUV4dGVuc2lvblJhbmdlT3B0aW9uc19WZXJpZmljYXRpb25fZmllbGRfZnVsbG5hbWUgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnZlcmlmaWNhdGlvbiIKICkKIAogLy8gRmllbGQgbnVtYmVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy4KIGNvbnN0ICgKIAlFeHRlbnNpb25SYW5nZU9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9udW1iZXIgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gOTk5CisJRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX0RlY2xhcmF0aW9uX2ZpZWxkX251bWJlciAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDIKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfRmVhdHVyZXNfZmllbGRfbnVtYmVyICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gNTAKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfVmVyaWZpY2F0aW9uX2ZpZWxkX251bWJlciAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMworKQorCisvLyBGdWxsIGFuZCBzaG9ydCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZS4KK2NvbnN0ICgKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfVmVyaWZpY2F0aW9uU3RhdGVfZW51bV9mdWxsbmFtZSA9ICJnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLlZlcmlmaWNhdGlvblN0YXRlIgorCUV4dGVuc2lvblJhbmdlT3B0aW9uc19WZXJpZmljYXRpb25TdGF0ZV9lbnVtX25hbWUgICAgID0gIlZlcmlmaWNhdGlvblN0YXRlIgorKQorCisvLyBFbnVtIHZhbHVlcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZS4KK2NvbnN0ICgKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfREVDTEFSQVRJT05fZW51bV92YWx1ZSA9IDAKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfVU5WRVJJRklFRF9lbnVtX3ZhbHVlICA9IDEKKykKKworLy8gTmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuRGVjbGFyYXRpb24uCitjb25zdCAoCisJRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX0RlY2xhcmF0aW9uX21lc3NhZ2VfbmFtZSAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgICAgID0gIkRlY2xhcmF0aW9uIgorCUV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbl9tZXNzYWdlX2Z1bGxuYW1lIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLkRlY2xhcmF0aW9uIgorKQorCisvLyBGaWVsZCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5EZWNsYXJhdGlvbi4KK2NvbnN0ICgKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb25fTnVtYmVyX2ZpZWxkX25hbWUgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJudW1iZXIiCisJRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX0RlY2xhcmF0aW9uX0Z1bGxOYW1lX2ZpZWxkX25hbWUgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZnVsbF9uYW1lIgorCUV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbl9UeXBlX2ZpZWxkX25hbWUgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gInR5cGUiCisJRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX0RlY2xhcmF0aW9uX1Jlc2VydmVkX2ZpZWxkX25hbWUgcHJvdG9yZWZsZWN0Lk5hbWUgPSAicmVzZXJ2ZWQiCisJRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX0RlY2xhcmF0aW9uX1JlcGVhdGVkX2ZpZWxkX25hbWUgcHJvdG9yZWZsZWN0Lk5hbWUgPSAicmVwZWF0ZWQiCisKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb25fTnVtYmVyX2ZpZWxkX2Z1bGxuYW1lICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuRGVjbGFyYXRpb24ubnVtYmVyIgorCUV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbl9GdWxsTmFtZV9maWVsZF9mdWxsbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5EZWNsYXJhdGlvbi5mdWxsX25hbWUiCisJRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX0RlY2xhcmF0aW9uX1R5cGVfZmllbGRfZnVsbG5hbWUgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLkRlY2xhcmF0aW9uLnR5cGUiCisJRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX0RlY2xhcmF0aW9uX1Jlc2VydmVkX2ZpZWxkX2Z1bGxuYW1lIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLkRlY2xhcmF0aW9uLnJlc2VydmVkIgorCUV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbl9SZXBlYXRlZF9maWVsZF9mdWxsbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5EZWNsYXJhdGlvbi5yZXBlYXRlZCIKKykKKworLy8gRmllbGQgbnVtYmVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5EZWNsYXJhdGlvbi4KK2NvbnN0ICgKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb25fTnVtYmVyX2ZpZWxkX251bWJlciAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDEKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb25fRnVsbE5hbWVfZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDIKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb25fVHlwZV9maWVsZF9udW1iZXIgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDMKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb25fUmVzZXJ2ZWRfZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDUKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb25fUmVwZWF0ZWRfZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDYKICkKIAogLy8gTmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by4KQEAgLTI0MywxMiArMzE4LDQxIEBACiAJRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9lbnVtX25hbWUgICAgID0gIlR5cGUiCiApCiAKKy8vIEVudW0gdmFsdWVzIGZvciBnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZS4KK2NvbnN0ICgKKwlGaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX0RPVUJMRV9lbnVtX3ZhbHVlICAgPSAxCisJRmllbGREZXNjcmlwdG9yUHJvdG9fVFlQRV9GTE9BVF9lbnVtX3ZhbHVlICAgID0gMgorCUZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfSU5UNjRfZW51bV92YWx1ZSAgICA9IDMKKwlGaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX1VJTlQ2NF9lbnVtX3ZhbHVlICAgPSA0CisJRmllbGREZXNjcmlwdG9yUHJvdG9fVFlQRV9JTlQzMl9lbnVtX3ZhbHVlICAgID0gNQorCUZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfRklYRUQ2NF9lbnVtX3ZhbHVlICA9IDYKKwlGaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX0ZJWEVEMzJfZW51bV92YWx1ZSAgPSA3CisJRmllbGREZXNjcmlwdG9yUHJvdG9fVFlQRV9CT09MX2VudW1fdmFsdWUgICAgID0gOAorCUZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfU1RSSU5HX2VudW1fdmFsdWUgICA9IDkKKwlGaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX0dST1VQX2VudW1fdmFsdWUgICAgPSAxMAorCUZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfTUVTU0FHRV9lbnVtX3ZhbHVlICA9IDExCisJRmllbGREZXNjcmlwdG9yUHJvdG9fVFlQRV9CWVRFU19lbnVtX3ZhbHVlICAgID0gMTIKKwlGaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX1VJTlQzMl9lbnVtX3ZhbHVlICAgPSAxMworCUZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfRU5VTV9lbnVtX3ZhbHVlICAgICA9IDE0CisJRmllbGREZXNjcmlwdG9yUHJvdG9fVFlQRV9TRklYRUQzMl9lbnVtX3ZhbHVlID0gMTUKKwlGaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX1NGSVhFRDY0X2VudW1fdmFsdWUgPSAxNgorCUZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfU0lOVDMyX2VudW1fdmFsdWUgICA9IDE3CisJRmllbGREZXNjcmlwdG9yUHJvdG9fVFlQRV9TSU5UNjRfZW51bV92YWx1ZSAgID0gMTgKKykKKwogLy8gRnVsbCBhbmQgc2hvcnQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbC4KIGNvbnN0ICgKIAlGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbF9lbnVtX2Z1bGxuYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbCIKIAlGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbF9lbnVtX25hbWUgICAgID0gIkxhYmVsIgogKQogCisvLyBFbnVtIHZhbHVlcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsLgorY29uc3QgKAorCUZpZWxkRGVzY3JpcHRvclByb3RvX0xBQkVMX09QVElPTkFMX2VudW1fdmFsdWUgPSAxCisJRmllbGREZXNjcmlwdG9yUHJvdG9fTEFCRUxfUkVQRUFURURfZW51bV92YWx1ZSA9IDMKKwlGaWVsZERlc2NyaXB0b3JQcm90b19MQUJFTF9SRVFVSVJFRF9lbnVtX3ZhbHVlID0gMgorKQorCiAvLyBOYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLgogY29uc3QgKAogCU9uZW9mRGVzY3JpcHRvclByb3RvX21lc3NhZ2VfbmFtZSAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgICAgID0gIk9uZW9mRGVzY3JpcHRvclByb3RvIgpAQCAtNDIwLDcgKzUyNCw2IEBACiAJRmlsZU9wdGlvbnNfQ2NHZW5lcmljU2VydmljZXNfZmllbGRfbmFtZSAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImNjX2dlbmVyaWNfc2VydmljZXMiCiAJRmlsZU9wdGlvbnNfSmF2YUdlbmVyaWNTZXJ2aWNlc19maWVsZF9uYW1lICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImphdmFfZ2VuZXJpY19zZXJ2aWNlcyIKIAlGaWxlT3B0aW9uc19QeUdlbmVyaWNTZXJ2aWNlc19maWVsZF9uYW1lICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAicHlfZ2VuZXJpY19zZXJ2aWNlcyIKLQlGaWxlT3B0aW9uc19QaHBHZW5lcmljU2VydmljZXNfZmllbGRfbmFtZSAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAicGhwX2dlbmVyaWNfc2VydmljZXMiCiAJRmlsZU9wdGlvbnNfRGVwcmVjYXRlZF9maWVsZF9uYW1lICAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImRlcHJlY2F0ZWQiCiAJRmlsZU9wdGlvbnNfQ2NFbmFibGVBcmVuYXNfZmllbGRfbmFtZSAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImNjX2VuYWJsZV9hcmVuYXMiCiAJRmlsZU9wdGlvbnNfT2JqY0NsYXNzUHJlZml4X2ZpZWxkX25hbWUgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gIm9iamNfY2xhc3NfcHJlZml4IgpAQCAtNDMwLDYgKzUzMyw3IEBACiAJRmlsZU9wdGlvbnNfUGhwTmFtZXNwYWNlX2ZpZWxkX25hbWUgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gInBocF9uYW1lc3BhY2UiCiAJRmlsZU9wdGlvbnNfUGhwTWV0YWRhdGFOYW1lc3BhY2VfZmllbGRfbmFtZSAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gInBocF9tZXRhZGF0YV9uYW1lc3BhY2UiCiAJRmlsZU9wdGlvbnNfUnVieVBhY2thZ2VfZmllbGRfbmFtZSAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gInJ1YnlfcGFja2FnZSIKKwlGaWxlT3B0aW9uc19GZWF0dXJlc19maWVsZF9uYW1lICAgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZmVhdHVyZXMiCiAJRmlsZU9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9uYW1lICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gInVuaW50ZXJwcmV0ZWRfb3B0aW9uIgogCiAJRmlsZU9wdGlvbnNfSmF2YVBhY2thZ2VfZmllbGRfZnVsbG5hbWUgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfcGFja2FnZSIKQEAgLTQ0Miw3ICs1NDYsNiBAQAogCUZpbGVPcHRpb25zX0NjR2VuZXJpY1NlcnZpY2VzX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5jY19nZW5lcmljX3NlcnZpY2VzIgogCUZpbGVPcHRpb25zX0phdmFHZW5lcmljU2VydmljZXNfZmllbGRfZnVsbG5hbWUgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5qYXZhX2dlbmVyaWNfc2VydmljZXMiCiAJRmlsZU9wdGlvbnNfUHlHZW5lcmljU2VydmljZXNfZmllbGRfZnVsbG5hbWUgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnB5X2dlbmVyaWNfc2VydmljZXMiCi0JRmlsZU9wdGlvbnNfUGhwR2VuZXJpY1NlcnZpY2VzX2ZpZWxkX2Z1bGxuYW1lICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnBocF9nZW5lcmljX3NlcnZpY2VzIgogCUZpbGVPcHRpb25zX0RlcHJlY2F0ZWRfZmllbGRfZnVsbG5hbWUgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5kZXByZWNhdGVkIgogCUZpbGVPcHRpb25zX0NjRW5hYmxlQXJlbmFzX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5jY19lbmFibGVfYXJlbmFzIgogCUZpbGVPcHRpb25zX09iamNDbGFzc1ByZWZpeF9maWVsZF9mdWxsbmFtZSAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vYmpjX2NsYXNzX3ByZWZpeCIKQEAgLTQ1Miw2ICs1NTUsNyBAQAogCUZpbGVPcHRpb25zX1BocE5hbWVzcGFjZV9maWVsZF9mdWxsbmFtZSAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5waHBfbmFtZXNwYWNlIgogCUZpbGVPcHRpb25zX1BocE1ldGFkYXRhTmFtZXNwYWNlX2ZpZWxkX2Z1bGxuYW1lICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5waHBfbWV0YWRhdGFfbmFtZXNwYWNlIgogCUZpbGVPcHRpb25zX1J1YnlQYWNrYWdlX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5ydWJ5X3BhY2thZ2UiCisJRmlsZU9wdGlvbnNfRmVhdHVyZXNfZmllbGRfZnVsbG5hbWUgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmZlYXR1cmVzIgogCUZpbGVPcHRpb25zX1VuaW50ZXJwcmV0ZWRPcHRpb25fZmllbGRfZnVsbG5hbWUgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbiIKICkKIApAQCAtNDY3LDcgKzU3MSw2IEBACiAJRmlsZU9wdGlvbnNfQ2NHZW5lcmljU2VydmljZXNfZmllbGRfbnVtYmVyICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMTYKIAlGaWxlT3B0aW9uc19KYXZhR2VuZXJpY1NlcnZpY2VzX2ZpZWxkX251bWJlciAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAxNwogCUZpbGVPcHRpb25zX1B5R2VuZXJpY1NlcnZpY2VzX2ZpZWxkX251bWJlciAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDE4Ci0JRmlsZU9wdGlvbnNfUGhwR2VuZXJpY1NlcnZpY2VzX2ZpZWxkX251bWJlciAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gNDIKIAlGaWxlT3B0aW9uc19EZXByZWNhdGVkX2ZpZWxkX251bWJlciAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAyMwogCUZpbGVPcHRpb25zX0NjRW5hYmxlQXJlbmFzX2ZpZWxkX251bWJlciAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDMxCiAJRmlsZU9wdGlvbnNfT2JqY0NsYXNzUHJlZml4X2ZpZWxkX251bWJlciAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMzYKQEAgLTQ3Nyw2ICs1ODAsNyBAQAogCUZpbGVPcHRpb25zX1BocE5hbWVzcGFjZV9maWVsZF9udW1iZXIgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDQxCiAJRmlsZU9wdGlvbnNfUGhwTWV0YWRhdGFOYW1lc3BhY2VfZmllbGRfbnVtYmVyICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gNDQKIAlGaWxlT3B0aW9uc19SdWJ5UGFja2FnZV9maWVsZF9udW1iZXIgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA0NQorCUZpbGVPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX251bWJlciAgICAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDUwCiAJRmlsZU9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9udW1iZXIgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gOTk5CiApCiAKQEAgLTQ4Niw2ICs1OTAsMTMgQEAKIAlGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGVfZW51bV9uYW1lICAgICA9ICJPcHRpbWl6ZU1vZGUiCiApCiAKKy8vIEVudW0gdmFsdWVzIGZvciBnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlLgorY29uc3QgKAorCUZpbGVPcHRpb25zX1NQRUVEX2VudW1fdmFsdWUgICAgICAgID0gMQorCUZpbGVPcHRpb25zX0NPREVfU0laRV9lbnVtX3ZhbHVlICAgID0gMgorCUZpbGVPcHRpb25zX0xJVEVfUlVOVElNRV9lbnVtX3ZhbHVlID0gMworKQorCiAvLyBOYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLgogY29uc3QgKAogCU1lc3NhZ2VPcHRpb25zX21lc3NhZ2VfbmFtZSAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgICAgID0gIk1lc3NhZ2VPcHRpb25zIgpAQCAtNDk0LDI2ICs2MDUsMzIgQEAKIAogLy8gRmllbGQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy4KIGNvbnN0ICgKLQlNZXNzYWdlT3B0aW9uc19NZXNzYWdlU2V0V2lyZUZvcm1hdF9maWVsZF9uYW1lICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAibWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQiCi0JTWVzc2FnZU9wdGlvbnNfTm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3Nvcl9maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gIm5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IiCi0JTWVzc2FnZU9wdGlvbnNfRGVwcmVjYXRlZF9maWVsZF9uYW1lICAgICAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImRlcHJlY2F0ZWQiCi0JTWVzc2FnZU9wdGlvbnNfTWFwRW50cnlfZmllbGRfbmFtZSAgICAgICAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gIm1hcF9lbnRyeSIKLQlNZXNzYWdlT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX25hbWUgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAidW5pbnRlcnByZXRlZF9vcHRpb24iCisJTWVzc2FnZU9wdGlvbnNfTWVzc2FnZVNldFdpcmVGb3JtYXRfZmllbGRfbmFtZSAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gIm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0IgorCU1lc3NhZ2VPcHRpb25zX05vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3JfZmllbGRfbmFtZSAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yIgorCU1lc3NhZ2VPcHRpb25zX0RlcHJlY2F0ZWRfZmllbGRfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJkZXByZWNhdGVkIgorCU1lc3NhZ2VPcHRpb25zX01hcEVudHJ5X2ZpZWxkX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJtYXBfZW50cnkiCisJTWVzc2FnZU9wdGlvbnNfRGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0c19maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gImRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzIgorCU1lc3NhZ2VPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJmZWF0dXJlcyIKKwlNZXNzYWdlT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX25hbWUgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAidW5pbnRlcnByZXRlZF9vcHRpb24iCiAKLQlNZXNzYWdlT3B0aW9uc19NZXNzYWdlU2V0V2lyZUZvcm1hdF9maWVsZF9mdWxsbmFtZSAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMubWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQiCi0JTWVzc2FnZU9wdGlvbnNfTm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3Nvcl9maWVsZF9mdWxsbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLm5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IiCi0JTWVzc2FnZU9wdGlvbnNfRGVwcmVjYXRlZF9maWVsZF9mdWxsbmFtZSAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRlcHJlY2F0ZWQiCi0JTWVzc2FnZU9wdGlvbnNfTWFwRW50cnlfZmllbGRfZnVsbG5hbWUgICAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLm1hcF9lbnRyeSIKLQlNZXNzYWdlT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24iCisJTWVzc2FnZU9wdGlvbnNfTWVzc2FnZVNldFdpcmVGb3JtYXRfZmllbGRfZnVsbG5hbWUgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0IgorCU1lc3NhZ2VPcHRpb25zX05vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3JfZmllbGRfZnVsbG5hbWUgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yIgorCU1lc3NhZ2VPcHRpb25zX0RlcHJlY2F0ZWRfZmllbGRfZnVsbG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5kZXByZWNhdGVkIgorCU1lc3NhZ2VPcHRpb25zX01hcEVudHJ5X2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5tYXBfZW50cnkiCisJTWVzc2FnZU9wdGlvbnNfRGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0c19maWVsZF9mdWxsbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzIgorCU1lc3NhZ2VPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5mZWF0dXJlcyIKKwlNZXNzYWdlT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24iCiApCiAKIC8vIEZpZWxkIG51bWJlcnMgZm9yIGdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy4KIGNvbnN0ICgKLQlNZXNzYWdlT3B0aW9uc19NZXNzYWdlU2V0V2lyZUZvcm1hdF9maWVsZF9udW1iZXIgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAxCi0JTWVzc2FnZU9wdGlvbnNfTm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3Nvcl9maWVsZF9udW1iZXIgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMgotCU1lc3NhZ2VPcHRpb25zX0RlcHJlY2F0ZWRfZmllbGRfbnVtYmVyICAgICAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDMKLQlNZXNzYWdlT3B0aW9uc19NYXBFbnRyeV9maWVsZF9udW1iZXIgICAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA3Ci0JTWVzc2FnZU9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9udW1iZXIgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gOTk5CisJTWVzc2FnZU9wdGlvbnNfTWVzc2FnZVNldFdpcmVGb3JtYXRfZmllbGRfbnVtYmVyICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMQorCU1lc3NhZ2VPcHRpb25zX05vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3JfZmllbGRfbnVtYmVyICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDIKKwlNZXNzYWdlT3B0aW9uc19EZXByZWNhdGVkX2ZpZWxkX251bWJlciAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAzCisJTWVzc2FnZU9wdGlvbnNfTWFwRW50cnlfZmllbGRfbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gNworCU1lc3NhZ2VPcHRpb25zX0RlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHNfZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDExCisJTWVzc2FnZU9wdGlvbnNfRmVhdHVyZXNfZmllbGRfbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMTIKKwlNZXNzYWdlT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX251bWJlciAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA5OTkKICkKIAogLy8gTmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuCkBAIC01MjgsMTYgKzY0NSwyOCBAQAogCUZpZWxkT3B0aW9uc19QYWNrZWRfZmllbGRfbmFtZSAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAicGFja2VkIgogCUZpZWxkT3B0aW9uc19Kc3R5cGVfZmllbGRfbmFtZSAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAianN0eXBlIgogCUZpZWxkT3B0aW9uc19MYXp5X2ZpZWxkX25hbWUgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAibGF6eSIKKwlGaWVsZE9wdGlvbnNfVW52ZXJpZmllZExhenlfZmllbGRfbmFtZSAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gInVudmVyaWZpZWRfbGF6eSIKIAlGaWVsZE9wdGlvbnNfRGVwcmVjYXRlZF9maWVsZF9uYW1lICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImRlcHJlY2F0ZWQiCiAJRmllbGRPcHRpb25zX1dlYWtfZmllbGRfbmFtZSAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJ3ZWFrIgorCUZpZWxkT3B0aW9uc19EZWJ1Z1JlZGFjdF9maWVsZF9uYW1lICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZGVidWdfcmVkYWN0IgorCUZpZWxkT3B0aW9uc19SZXRlbnRpb25fZmllbGRfbmFtZSAgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAicmV0ZW50aW9uIgorCUZpZWxkT3B0aW9uc19UYXJnZXRzX2ZpZWxkX25hbWUgICAgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAidGFyZ2V0cyIKKwlGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHRzX2ZpZWxkX25hbWUgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImVkaXRpb25fZGVmYXVsdHMiCisJRmllbGRPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX25hbWUgICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJmZWF0dXJlcyIKIAlGaWVsZE9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gInVuaW50ZXJwcmV0ZWRfb3B0aW9uIgogCiAJRmllbGRPcHRpb25zX0N0eXBlX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuY3R5cGUiCiAJRmllbGRPcHRpb25zX1BhY2tlZF9maWVsZF9mdWxsbmFtZSAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucGFja2VkIgogCUZpZWxkT3B0aW9uc19Kc3R5cGVfZmllbGRfZnVsbG5hbWUgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmpzdHlwZSIKIAlGaWVsZE9wdGlvbnNfTGF6eV9maWVsZF9mdWxsbmFtZSAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5sYXp5IgorCUZpZWxkT3B0aW9uc19VbnZlcmlmaWVkTGF6eV9maWVsZF9mdWxsbmFtZSAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnVudmVyaWZpZWRfbGF6eSIKIAlGaWVsZE9wdGlvbnNfRGVwcmVjYXRlZF9maWVsZF9mdWxsbmFtZSAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5kZXByZWNhdGVkIgogCUZpZWxkT3B0aW9uc19XZWFrX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLndlYWsiCisJRmllbGRPcHRpb25zX0RlYnVnUmVkYWN0X2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZGVidWdfcmVkYWN0IgorCUZpZWxkT3B0aW9uc19SZXRlbnRpb25fZmllbGRfZnVsbG5hbWUgICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnJldGVudGlvbiIKKwlGaWVsZE9wdGlvbnNfVGFyZ2V0c19maWVsZF9mdWxsbmFtZSAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy50YXJnZXRzIgorCUZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdHNfZmllbGRfZnVsbG5hbWUgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmVkaXRpb25fZGVmYXVsdHMiCisJRmllbGRPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZmVhdHVyZXMiCiAJRmllbGRPcHRpb25zX1VuaW50ZXJwcmV0ZWRPcHRpb25fZmllbGRfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24iCiApCiAKQEAgLTU0Nyw4ICs2NzYsMTQgQEAKIAlGaWVsZE9wdGlvbnNfUGFja2VkX2ZpZWxkX251bWJlciAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMgogCUZpZWxkT3B0aW9uc19Kc3R5cGVfZmllbGRfbnVtYmVyICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA2CiAJRmllbGRPcHRpb25zX0xhenlfZmllbGRfbnVtYmVyICAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDUKKwlGaWVsZE9wdGlvbnNfVW52ZXJpZmllZExhenlfZmllbGRfbnVtYmVyICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMTUKIAlGaWVsZE9wdGlvbnNfRGVwcmVjYXRlZF9maWVsZF9udW1iZXIgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMwogCUZpZWxkT3B0aW9uc19XZWFrX2ZpZWxkX251bWJlciAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAxMAorCUZpZWxkT3B0aW9uc19EZWJ1Z1JlZGFjdF9maWVsZF9udW1iZXIgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAxNgorCUZpZWxkT3B0aW9uc19SZXRlbnRpb25fZmllbGRfbnVtYmVyICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAxNworCUZpZWxkT3B0aW9uc19UYXJnZXRzX2ZpZWxkX251bWJlciAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAxOQorCUZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdHNfZmllbGRfbnVtYmVyICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAyMAorCUZpZWxkT3B0aW9uc19GZWF0dXJlc19maWVsZF9udW1iZXIgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAyMQogCUZpZWxkT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX251bWJlciBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA5OTkKICkKIApAQCAtNTU4LDEyICs2OTMsODAgQEAKIAlGaWVsZE9wdGlvbnNfQ1R5cGVfZW51bV9uYW1lICAgICA9ICJDVHlwZSIKICkKIAorLy8gRW51bSB2YWx1ZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGUuCitjb25zdCAoCisJRmllbGRPcHRpb25zX1NUUklOR19lbnVtX3ZhbHVlICAgICAgID0gMAorCUZpZWxkT3B0aW9uc19DT1JEX2VudW1fdmFsdWUgICAgICAgICA9IDEKKwlGaWVsZE9wdGlvbnNfU1RSSU5HX1BJRUNFX2VudW1fdmFsdWUgPSAyCispCisKIC8vIEZ1bGwgYW5kIHNob3J0IG5hbWVzIGZvciBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZS4KIGNvbnN0ICgKIAlGaWVsZE9wdGlvbnNfSlNUeXBlX2VudW1fZnVsbG5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGUiCiAJRmllbGRPcHRpb25zX0pTVHlwZV9lbnVtX25hbWUgICAgID0gIkpTVHlwZSIKICkKIAorLy8gRW51bSB2YWx1ZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlLgorY29uc3QgKAorCUZpZWxkT3B0aW9uc19KU19OT1JNQUxfZW51bV92YWx1ZSA9IDAKKwlGaWVsZE9wdGlvbnNfSlNfU1RSSU5HX2VudW1fdmFsdWUgPSAxCisJRmllbGRPcHRpb25zX0pTX05VTUJFUl9lbnVtX3ZhbHVlID0gMgorKQorCisvLyBGdWxsIGFuZCBzaG9ydCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5PcHRpb25SZXRlbnRpb24uCitjb25zdCAoCisJRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbl9lbnVtX2Z1bGxuYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uUmV0ZW50aW9uIgorCUZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb25fZW51bV9uYW1lICAgICA9ICJPcHRpb25SZXRlbnRpb24iCispCisKKy8vIEVudW0gdmFsdWVzIGZvciBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblJldGVudGlvbi4KK2NvbnN0ICgKKwlGaWVsZE9wdGlvbnNfUkVURU5USU9OX1VOS05PV05fZW51bV92YWx1ZSA9IDAKKwlGaWVsZE9wdGlvbnNfUkVURU5USU9OX1JVTlRJTUVfZW51bV92YWx1ZSA9IDEKKwlGaWVsZE9wdGlvbnNfUkVURU5USU9OX1NPVVJDRV9lbnVtX3ZhbHVlICA9IDIKKykKKworLy8gRnVsbCBhbmQgc2hvcnQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZS4KK2NvbnN0ICgKKwlGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZV9lbnVtX2Z1bGxuYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZSIKKwlGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZV9lbnVtX25hbWUgICAgID0gIk9wdGlvblRhcmdldFR5cGUiCispCisKKy8vIEVudW0gdmFsdWVzIGZvciBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblRhcmdldFR5cGUuCitjb25zdCAoCisJRmllbGRPcHRpb25zX1RBUkdFVF9UWVBFX1VOS05PV05fZW51bV92YWx1ZSAgICAgICAgID0gMAorCUZpZWxkT3B0aW9uc19UQVJHRVRfVFlQRV9GSUxFX2VudW1fdmFsdWUgICAgICAgICAgICA9IDEKKwlGaWVsZE9wdGlvbnNfVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFX2VudW1fdmFsdWUgPSAyCisJRmllbGRPcHRpb25zX1RBUkdFVF9UWVBFX01FU1NBR0VfZW51bV92YWx1ZSAgICAgICAgID0gMworCUZpZWxkT3B0aW9uc19UQVJHRVRfVFlQRV9GSUVMRF9lbnVtX3ZhbHVlICAgICAgICAgICA9IDQKKwlGaWVsZE9wdGlvbnNfVEFSR0VUX1RZUEVfT05FT0ZfZW51bV92YWx1ZSAgICAgICAgICAgPSA1CisJRmllbGRPcHRpb25zX1RBUkdFVF9UWVBFX0VOVU1fZW51bV92YWx1ZSAgICAgICAgICAgID0gNgorCUZpZWxkT3B0aW9uc19UQVJHRVRfVFlQRV9FTlVNX0VOVFJZX2VudW1fdmFsdWUgICAgICA9IDcKKwlGaWVsZE9wdGlvbnNfVEFSR0VUX1RZUEVfU0VSVklDRV9lbnVtX3ZhbHVlICAgICAgICAgPSA4CisJRmllbGRPcHRpb25zX1RBUkdFVF9UWVBFX01FVEhPRF9lbnVtX3ZhbHVlICAgICAgICAgID0gOQorKQorCisvLyBOYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5FZGl0aW9uRGVmYXVsdC4KK2NvbnN0ICgKKwlGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHRfbWVzc2FnZV9uYW1lICAgICBwcm90b3JlZmxlY3QuTmFtZSAgICAgPSAiRWRpdGlvbkRlZmF1bHQiCisJRmllbGRPcHRpb25zX0VkaXRpb25EZWZhdWx0X21lc3NhZ2VfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuRWRpdGlvbkRlZmF1bHQiCispCisKKy8vIEZpZWxkIG5hbWVzIGZvciBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkVkaXRpb25EZWZhdWx0LgorY29uc3QgKAorCUZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdF9FZGl0aW9uX2ZpZWxkX25hbWUgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZWRpdGlvbiIKKwlGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHRfVmFsdWVfZmllbGRfbmFtZSAgIHByb3RvcmVmbGVjdC5OYW1lID0gInZhbHVlIgorCisJRmllbGRPcHRpb25zX0VkaXRpb25EZWZhdWx0X0VkaXRpb25fZmllbGRfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuRWRpdGlvbkRlZmF1bHQuZWRpdGlvbiIKKwlGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHRfVmFsdWVfZmllbGRfZnVsbG5hbWUgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5FZGl0aW9uRGVmYXVsdC52YWx1ZSIKKykKKworLy8gRmllbGQgbnVtYmVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5FZGl0aW9uRGVmYXVsdC4KK2NvbnN0ICgKKwlGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHRfRWRpdGlvbl9maWVsZF9udW1iZXIgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMworCUZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdF9WYWx1ZV9maWVsZF9udW1iZXIgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAyCispCisKIC8vIE5hbWVzIGZvciBnb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLgogY29uc3QgKAogCU9uZW9mT3B0aW9uc19tZXNzYWdlX25hbWUgICAgIHByb3RvcmVmbGVjdC5OYW1lICAgICA9ICJPbmVvZk9wdGlvbnMiCkBAIC01NzIsMTMgKzc3NSwxNiBAQAogCiAvLyBGaWVsZCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy4KIGNvbnN0ICgKKwlPbmVvZk9wdGlvbnNfRmVhdHVyZXNfZmllbGRfbmFtZSAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImZlYXR1cmVzIgogCU9uZW9mT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX25hbWUgcHJvdG9yZWZsZWN0Lk5hbWUgPSAidW5pbnRlcnByZXRlZF9vcHRpb24iCiAKKwlPbmVvZk9wdGlvbnNfRmVhdHVyZXNfZmllbGRfZnVsbG5hbWUgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5mZWF0dXJlcyIKIAlPbmVvZk9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9mdWxsbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbiIKICkKIAogLy8gRmllbGQgbnVtYmVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy4KIGNvbnN0ICgKKwlPbmVvZk9wdGlvbnNfRmVhdHVyZXNfZmllbGRfbnVtYmVyICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMQogCU9uZW9mT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX251bWJlciBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA5OTkKICkKIApAQCAtNTkwLDIwICs3OTYsMjYgQEAKIAogLy8gRmllbGQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy4KIGNvbnN0ICgKLQlFbnVtT3B0aW9uc19BbGxvd0FsaWFzX2ZpZWxkX25hbWUgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiYWxsb3dfYWxpYXMiCi0JRW51bU9wdGlvbnNfRGVwcmVjYXRlZF9maWVsZF9uYW1lICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImRlcHJlY2F0ZWQiCi0JRW51bU9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gInVuaW50ZXJwcmV0ZWRfb3B0aW9uIgorCUVudW1PcHRpb25zX0FsbG93QWxpYXNfZmllbGRfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJhbGxvd19hbGlhcyIKKwlFbnVtT3B0aW9uc19EZXByZWNhdGVkX2ZpZWxkX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZGVwcmVjYXRlZCIKKwlFbnVtT3B0aW9uc19EZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzX2ZpZWxkX25hbWUgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZGVwcmVjYXRlZF9sZWdhY3lfanNvbl9maWVsZF9jb25mbGljdHMiCisJRW51bU9wdGlvbnNfRmVhdHVyZXNfZmllbGRfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImZlYXR1cmVzIgorCUVudW1PcHRpb25zX1VuaW50ZXJwcmV0ZWRPcHRpb25fZmllbGRfbmFtZSAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJ1bmludGVycHJldGVkX29wdGlvbiIKIAotCUVudW1PcHRpb25zX0FsbG93QWxpYXNfZmllbGRfZnVsbG5hbWUgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5hbGxvd19hbGlhcyIKLQlFbnVtT3B0aW9uc19EZXByZWNhdGVkX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZGVwcmVjYXRlZCIKLQlFbnVtT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX2Z1bGxuYW1lIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24iCisJRW51bU9wdGlvbnNfQWxsb3dBbGlhc19maWVsZF9mdWxsbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmFsbG93X2FsaWFzIgorCUVudW1PcHRpb25zX0RlcHJlY2F0ZWRfZmllbGRfZnVsbG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5kZXByZWNhdGVkIgorCUVudW1PcHRpb25zX0RlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHNfZmllbGRfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5kZXByZWNhdGVkX2xlZ2FjeV9qc29uX2ZpZWxkX2NvbmZsaWN0cyIKKwlFbnVtT3B0aW9uc19GZWF0dXJlc19maWVsZF9mdWxsbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZmVhdHVyZXMiCisJRW51bU9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9mdWxsbmFtZSAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uIgogKQogCiAvLyBGaWVsZCBudW1iZXJzIGZvciBnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuCiBjb25zdCAoCi0JRW51bU9wdGlvbnNfQWxsb3dBbGlhc19maWVsZF9udW1iZXIgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMgotCUVudW1PcHRpb25zX0RlcHJlY2F0ZWRfZmllbGRfbnVtYmVyICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDMKLQlFbnVtT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX251bWJlciBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA5OTkKKwlFbnVtT3B0aW9uc19BbGxvd0FsaWFzX2ZpZWxkX251bWJlciAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAyCisJRW51bU9wdGlvbnNfRGVwcmVjYXRlZF9maWVsZF9udW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMworCUVudW1PcHRpb25zX0RlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHNfZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDYKKwlFbnVtT3B0aW9uc19GZWF0dXJlc19maWVsZF9udW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA3CisJRW51bU9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9udW1iZXIgICAgICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gOTk5CiApCiAKIC8vIE5hbWVzIGZvciBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy4KQEAgLTYxNSwxNSArODI3LDIxIEBACiAvLyBGaWVsZCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuCiBjb25zdCAoCiAJRW51bVZhbHVlT3B0aW9uc19EZXByZWNhdGVkX2ZpZWxkX25hbWUgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZGVwcmVjYXRlZCIKKwlFbnVtVmFsdWVPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX25hbWUgICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJmZWF0dXJlcyIKKwlFbnVtVmFsdWVPcHRpb25zX0RlYnVnUmVkYWN0X2ZpZWxkX25hbWUgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJkZWJ1Z19yZWRhY3QiCiAJRW51bVZhbHVlT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX25hbWUgcHJvdG9yZWZsZWN0Lk5hbWUgPSAidW5pbnRlcnByZXRlZF9vcHRpb24iCiAKIAlFbnVtVmFsdWVPcHRpb25zX0RlcHJlY2F0ZWRfZmllbGRfZnVsbG5hbWUgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmRlcHJlY2F0ZWQiCisJRW51bVZhbHVlT3B0aW9uc19GZWF0dXJlc19maWVsZF9mdWxsbmFtZSAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5mZWF0dXJlcyIKKwlFbnVtVmFsdWVPcHRpb25zX0RlYnVnUmVkYWN0X2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmRlYnVnX3JlZGFjdCIKIAlFbnVtVmFsdWVPcHRpb25zX1VuaW50ZXJwcmV0ZWRPcHRpb25fZmllbGRfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uIgogKQogCiAvLyBGaWVsZCBudW1iZXJzIGZvciBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy4KIGNvbnN0ICgKIAlFbnVtVmFsdWVPcHRpb25zX0RlcHJlY2F0ZWRfZmllbGRfbnVtYmVyICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDEKKwlFbnVtVmFsdWVPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX251bWJlciAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDIKKwlFbnVtVmFsdWVPcHRpb25zX0RlYnVnUmVkYWN0X2ZpZWxkX251bWJlciAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDMKIAlFbnVtVmFsdWVPcHRpb25zX1VuaW50ZXJwcmV0ZWRPcHRpb25fZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDk5OQogKQogCkBAIC02MzUsMTUgKzg1MywxOCBAQAogCiAvLyBGaWVsZCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLgogY29uc3QgKAorCVNlcnZpY2VPcHRpb25zX0ZlYXR1cmVzX2ZpZWxkX25hbWUgICAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJmZWF0dXJlcyIKIAlTZXJ2aWNlT3B0aW9uc19EZXByZWNhdGVkX2ZpZWxkX25hbWUgICAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZGVwcmVjYXRlZCIKIAlTZXJ2aWNlT3B0aW9uc19VbmludGVycHJldGVkT3B0aW9uX2ZpZWxkX25hbWUgcHJvdG9yZWZsZWN0Lk5hbWUgPSAidW5pbnRlcnByZXRlZF9vcHRpb24iCiAKKwlTZXJ2aWNlT3B0aW9uc19GZWF0dXJlc19maWVsZF9mdWxsbmFtZSAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZmVhdHVyZXMiCiAJU2VydmljZU9wdGlvbnNfRGVwcmVjYXRlZF9maWVsZF9mdWxsbmFtZSAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmRlcHJlY2F0ZWQiCiAJU2VydmljZU9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9mdWxsbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uIgogKQogCiAvLyBGaWVsZCBudW1iZXJzIGZvciBnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuCiBjb25zdCAoCisJU2VydmljZU9wdGlvbnNfRmVhdHVyZXNfZmllbGRfbnVtYmVyICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMzQKIAlTZXJ2aWNlT3B0aW9uc19EZXByZWNhdGVkX2ZpZWxkX251bWJlciAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAzMwogCVNlcnZpY2VPcHRpb25zX1VuaW50ZXJwcmV0ZWRPcHRpb25fZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDk5OQogKQpAQCAtNjU4LDEwICs4NzksMTIgQEAKIGNvbnN0ICgKIAlNZXRob2RPcHRpb25zX0RlcHJlY2F0ZWRfZmllbGRfbmFtZSAgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJkZXByZWNhdGVkIgogCU1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbF9maWVsZF9uYW1lICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImlkZW1wb3RlbmN5X2xldmVsIgorCU1ldGhvZE9wdGlvbnNfRmVhdHVyZXNfZmllbGRfbmFtZSAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImZlYXR1cmVzIgogCU1ldGhvZE9wdGlvbnNfVW5pbnRlcnByZXRlZE9wdGlvbl9maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gInVuaW50ZXJwcmV0ZWRfb3B0aW9uIgogCiAJTWV0aG9kT3B0aW9uc19EZXByZWNhdGVkX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5kZXByZWNhdGVkIgogCU1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbF9maWVsZF9mdWxsbmFtZSAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuaWRlbXBvdGVuY3lfbGV2ZWwiCisJTWV0aG9kT3B0aW9uc19GZWF0dXJlc19maWVsZF9mdWxsbmFtZSAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5mZWF0dXJlcyIKIAlNZXRob2RPcHRpb25zX1VuaW50ZXJwcmV0ZWRPcHRpb25fZmllbGRfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uIgogKQogCkBAIC02NjksNiArODkyLDcgQEAKIGNvbnN0ICgKIAlNZXRob2RPcHRpb25zX0RlcHJlY2F0ZWRfZmllbGRfbnVtYmVyICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDMzCiAJTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsX2ZpZWxkX251bWJlciAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAzNAorCU1ldGhvZE9wdGlvbnNfRmVhdHVyZXNfZmllbGRfbnVtYmVyICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMzUKIAlNZXRob2RPcHRpb25zX1VuaW50ZXJwcmV0ZWRPcHRpb25fZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDk5OQogKQogCkBAIC02NzgsNiArOTAyLDEzIEBACiAJTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsX2VudW1fbmFtZSAgICAgPSAiSWRlbXBvdGVuY3lMZXZlbCIKICkKIAorLy8gRW51bSB2YWx1ZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWwuCitjb25zdCAoCisJTWV0aG9kT3B0aW9uc19JREVNUE9URU5DWV9VTktOT1dOX2VudW1fdmFsdWUgPSAwCisJTWV0aG9kT3B0aW9uc19OT19TSURFX0VGRkVDVFNfZW51bV92YWx1ZSAgICAgPSAxCisJTWV0aG9kT3B0aW9uc19JREVNUE9URU5UX2VudW1fdmFsdWUgICAgICAgICAgPSAyCispCisKIC8vIE5hbWVzIGZvciBnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi4KIGNvbnN0ICgKIAlVbmludGVycHJldGVkT3B0aW9uX21lc3NhZ2VfbmFtZSAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgICAgID0gIlVuaW50ZXJwcmV0ZWRPcHRpb24iCkBAIC03MzUsNiArOTY2LDE2MyBAQAogCVVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnRfSXNFeHRlbnNpb25fZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDIKICkKIAorLy8gTmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LgorY29uc3QgKAorCUZlYXR1cmVTZXRfbWVzc2FnZV9uYW1lICAgICBwcm90b3JlZmxlY3QuTmFtZSAgICAgPSAiRmVhdHVyZVNldCIKKwlGZWF0dXJlU2V0X21lc3NhZ2VfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0IgorKQorCisvLyBGaWVsZCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuCitjb25zdCAoCisJRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlX2ZpZWxkX25hbWUgICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJmaWVsZF9wcmVzZW5jZSIKKwlGZWF0dXJlU2V0X0VudW1UeXBlX2ZpZWxkX25hbWUgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImVudW1fdHlwZSIKKwlGZWF0dXJlU2V0X1JlcGVhdGVkRmllbGRFbmNvZGluZ19maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gInJlcGVhdGVkX2ZpZWxkX2VuY29kaW5nIgorCUZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb25fZmllbGRfbmFtZSAgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAidXRmOF92YWxpZGF0aW9uIgorCUZlYXR1cmVTZXRfTWVzc2FnZUVuY29kaW5nX2ZpZWxkX25hbWUgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAibWVzc2FnZV9lbmNvZGluZyIKKwlGZWF0dXJlU2V0X0pzb25Gb3JtYXRfZmllbGRfbmFtZSAgICAgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImpzb25fZm9ybWF0IgorCisJRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LmZpZWxkX3ByZXNlbmNlIgorCUZlYXR1cmVTZXRfRW51bVR5cGVfZmllbGRfZnVsbG5hbWUgICAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5lbnVtX3R5cGUiCisJRmVhdHVyZVNldF9SZXBlYXRlZEZpZWxkRW5jb2RpbmdfZmllbGRfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LnJlcGVhdGVkX2ZpZWxkX2VuY29kaW5nIgorCUZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb25fZmllbGRfZnVsbG5hbWUgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC51dGY4X3ZhbGlkYXRpb24iCisJRmVhdHVyZVNldF9NZXNzYWdlRW5jb2RpbmdfZmllbGRfZnVsbG5hbWUgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lm1lc3NhZ2VfZW5jb2RpbmciCisJRmVhdHVyZVNldF9Kc29uRm9ybWF0X2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lmpzb25fZm9ybWF0IgorKQorCisvLyBGaWVsZCBudW1iZXJzIGZvciBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC4KK2NvbnN0ICgKKwlGZWF0dXJlU2V0X0ZpZWxkUHJlc2VuY2VfZmllbGRfbnVtYmVyICAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMQorCUZlYXR1cmVTZXRfRW51bVR5cGVfZmllbGRfbnVtYmVyICAgICAgICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAyCisJRmVhdHVyZVNldF9SZXBlYXRlZEZpZWxkRW5jb2RpbmdfZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDMKKwlGZWF0dXJlU2V0X1V0ZjhWYWxpZGF0aW9uX2ZpZWxkX251bWJlciAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gNAorCUZlYXR1cmVTZXRfTWVzc2FnZUVuY29kaW5nX2ZpZWxkX251bWJlciAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA1CisJRmVhdHVyZVNldF9Kc29uRm9ybWF0X2ZpZWxkX251bWJlciAgICAgICAgICAgIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDYKKykKKworLy8gRnVsbCBhbmQgc2hvcnQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LkZpZWxkUHJlc2VuY2UuCitjb25zdCAoCisJRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlX2VudW1fZnVsbG5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuRmllbGRQcmVzZW5jZSIKKwlGZWF0dXJlU2V0X0ZpZWxkUHJlc2VuY2VfZW51bV9uYW1lICAgICA9ICJGaWVsZFByZXNlbmNlIgorKQorCisvLyBFbnVtIHZhbHVlcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuRmllbGRQcmVzZW5jZS4KK2NvbnN0ICgKKwlGZWF0dXJlU2V0X0ZJRUxEX1BSRVNFTkNFX1VOS05PV05fZW51bV92YWx1ZSA9IDAKKwlGZWF0dXJlU2V0X0VYUExJQ0lUX2VudW1fdmFsdWUgICAgICAgICAgICAgICA9IDEKKwlGZWF0dXJlU2V0X0lNUExJQ0lUX2VudW1fdmFsdWUgICAgICAgICAgICAgICA9IDIKKwlGZWF0dXJlU2V0X0xFR0FDWV9SRVFVSVJFRF9lbnVtX3ZhbHVlICAgICAgICA9IDMKKykKKworLy8gRnVsbCBhbmQgc2hvcnQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LkVudW1UeXBlLgorY29uc3QgKAorCUZlYXR1cmVTZXRfRW51bVR5cGVfZW51bV9mdWxsbmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5FbnVtVHlwZSIKKwlGZWF0dXJlU2V0X0VudW1UeXBlX2VudW1fbmFtZSAgICAgPSAiRW51bVR5cGUiCispCisKKy8vIEVudW0gdmFsdWVzIGZvciBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5FbnVtVHlwZS4KK2NvbnN0ICgKKwlGZWF0dXJlU2V0X0VOVU1fVFlQRV9VTktOT1dOX2VudW1fdmFsdWUgPSAwCisJRmVhdHVyZVNldF9PUEVOX2VudW1fdmFsdWUgICAgICAgICAgICAgID0gMQorCUZlYXR1cmVTZXRfQ0xPU0VEX2VudW1fdmFsdWUgICAgICAgICAgICA9IDIKKykKKworLy8gRnVsbCBhbmQgc2hvcnQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LlJlcGVhdGVkRmllbGRFbmNvZGluZy4KK2NvbnN0ICgKKwlGZWF0dXJlU2V0X1JlcGVhdGVkRmllbGRFbmNvZGluZ19lbnVtX2Z1bGxuYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LlJlcGVhdGVkRmllbGRFbmNvZGluZyIKKwlGZWF0dXJlU2V0X1JlcGVhdGVkRmllbGRFbmNvZGluZ19lbnVtX25hbWUgICAgID0gIlJlcGVhdGVkRmllbGRFbmNvZGluZyIKKykKKworLy8gRW51bSB2YWx1ZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LlJlcGVhdGVkRmllbGRFbmNvZGluZy4KK2NvbnN0ICgKKwlGZWF0dXJlU2V0X1JFUEVBVEVEX0ZJRUxEX0VOQ09ESU5HX1VOS05PV05fZW51bV92YWx1ZSA9IDAKKwlGZWF0dXJlU2V0X1BBQ0tFRF9lbnVtX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEKKwlGZWF0dXJlU2V0X0VYUEFOREVEX2VudW1fdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICA9IDIKKykKKworLy8gRnVsbCBhbmQgc2hvcnQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LlV0ZjhWYWxpZGF0aW9uLgorY29uc3QgKAorCUZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb25fZW51bV9mdWxsbmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5VdGY4VmFsaWRhdGlvbiIKKwlGZWF0dXJlU2V0X1V0ZjhWYWxpZGF0aW9uX2VudW1fbmFtZSAgICAgPSAiVXRmOFZhbGlkYXRpb24iCispCisKKy8vIEVudW0gdmFsdWVzIGZvciBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5VdGY4VmFsaWRhdGlvbi4KK2NvbnN0ICgKKwlGZWF0dXJlU2V0X1VURjhfVkFMSURBVElPTl9VTktOT1dOX2VudW1fdmFsdWUgPSAwCisJRmVhdHVyZVNldF9WRVJJRllfZW51bV92YWx1ZSAgICAgICAgICAgICAgICAgID0gMgorCUZlYXR1cmVTZXRfTk9ORV9lbnVtX3ZhbHVlICAgICAgICAgICAgICAgICAgICA9IDMKKykKKworLy8gRnVsbCBhbmQgc2hvcnQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lk1lc3NhZ2VFbmNvZGluZy4KK2NvbnN0ICgKKwlGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZ19lbnVtX2Z1bGxuYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lk1lc3NhZ2VFbmNvZGluZyIKKwlGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZ19lbnVtX25hbWUgICAgID0gIk1lc3NhZ2VFbmNvZGluZyIKKykKKworLy8gRW51bSB2YWx1ZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lk1lc3NhZ2VFbmNvZGluZy4KK2NvbnN0ICgKKwlGZWF0dXJlU2V0X01FU1NBR0VfRU5DT0RJTkdfVU5LTk9XTl9lbnVtX3ZhbHVlID0gMAorCUZlYXR1cmVTZXRfTEVOR1RIX1BSRUZJWEVEX2VudW1fdmFsdWUgICAgICAgICAgPSAxCisJRmVhdHVyZVNldF9ERUxJTUlURURfZW51bV92YWx1ZSAgICAgICAgICAgICAgICA9IDIKKykKKworLy8gRnVsbCBhbmQgc2hvcnQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lkpzb25Gb3JtYXQuCitjb25zdCAoCisJRmVhdHVyZVNldF9Kc29uRm9ybWF0X2VudW1fZnVsbG5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuSnNvbkZvcm1hdCIKKwlGZWF0dXJlU2V0X0pzb25Gb3JtYXRfZW51bV9uYW1lICAgICA9ICJKc29uRm9ybWF0IgorKQorCisvLyBFbnVtIHZhbHVlcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuSnNvbkZvcm1hdC4KK2NvbnN0ICgKKwlGZWF0dXJlU2V0X0pTT05fRk9STUFUX1VOS05PV05fZW51bV92YWx1ZSA9IDAKKwlGZWF0dXJlU2V0X0FMTE9XX2VudW1fdmFsdWUgICAgICAgICAgICAgICA9IDEKKwlGZWF0dXJlU2V0X0xFR0FDWV9CRVNUX0VGRk9SVF9lbnVtX3ZhbHVlICA9IDIKKykKKworLy8gTmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0RGVmYXVsdHMuCitjb25zdCAoCisJRmVhdHVyZVNldERlZmF1bHRzX21lc3NhZ2VfbmFtZSAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgICAgID0gIkZlYXR1cmVTZXREZWZhdWx0cyIKKwlGZWF0dXJlU2V0RGVmYXVsdHNfbWVzc2FnZV9mdWxsbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXREZWZhdWx0cyIKKykKKworLy8gRmllbGQgbmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0RGVmYXVsdHMuCitjb25zdCAoCisJRmVhdHVyZVNldERlZmF1bHRzX0RlZmF1bHRzX2ZpZWxkX25hbWUgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZGVmYXVsdHMiCisJRmVhdHVyZVNldERlZmF1bHRzX01pbmltdW1FZGl0aW9uX2ZpZWxkX25hbWUgcHJvdG9yZWZsZWN0Lk5hbWUgPSAibWluaW11bV9lZGl0aW9uIgorCUZlYXR1cmVTZXREZWZhdWx0c19NYXhpbXVtRWRpdGlvbl9maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gIm1heGltdW1fZWRpdGlvbiIKKworCUZlYXR1cmVTZXREZWZhdWx0c19EZWZhdWx0c19maWVsZF9mdWxsbmFtZSAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXREZWZhdWx0cy5kZWZhdWx0cyIKKwlGZWF0dXJlU2V0RGVmYXVsdHNfTWluaW11bUVkaXRpb25fZmllbGRfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0RGVmYXVsdHMubWluaW11bV9lZGl0aW9uIgorCUZlYXR1cmVTZXREZWZhdWx0c19NYXhpbXVtRWRpdGlvbl9maWVsZF9mdWxsbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXREZWZhdWx0cy5tYXhpbXVtX2VkaXRpb24iCispCisKKy8vIEZpZWxkIG51bWJlcnMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0RGVmYXVsdHMuCitjb25zdCAoCisJRmVhdHVyZVNldERlZmF1bHRzX0RlZmF1bHRzX2ZpZWxkX251bWJlciAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAxCisJRmVhdHVyZVNldERlZmF1bHRzX01pbmltdW1FZGl0aW9uX2ZpZWxkX251bWJlciBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA0CisJRmVhdHVyZVNldERlZmF1bHRzX01heGltdW1FZGl0aW9uX2ZpZWxkX251bWJlciBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA1CispCisKKy8vIE5hbWVzIGZvciBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldERlZmF1bHRzLkZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdC4KK2NvbnN0ICgKKwlGZWF0dXJlU2V0RGVmYXVsdHNfRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0X21lc3NhZ2VfbmFtZSAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgICAgID0gIkZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdCIKKwlGZWF0dXJlU2V0RGVmYXVsdHNfRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0X21lc3NhZ2VfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0RGVmYXVsdHMuRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0IgorKQorCisvLyBGaWVsZCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXREZWZhdWx0cy5GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHQuCitjb25zdCAoCisJRmVhdHVyZVNldERlZmF1bHRzX0ZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdF9FZGl0aW9uX2ZpZWxkX25hbWUgIHByb3RvcmVmbGVjdC5OYW1lID0gImVkaXRpb24iCisJRmVhdHVyZVNldERlZmF1bHRzX0ZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdF9GZWF0dXJlc19maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gImZlYXR1cmVzIgorCisJRmVhdHVyZVNldERlZmF1bHRzX0ZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdF9FZGl0aW9uX2ZpZWxkX2Z1bGxuYW1lICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXREZWZhdWx0cy5GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHQuZWRpdGlvbiIKKwlGZWF0dXJlU2V0RGVmYXVsdHNfRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0X0ZlYXR1cmVzX2ZpZWxkX2Z1bGxuYW1lIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldERlZmF1bHRzLkZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdC5mZWF0dXJlcyIKKykKKworLy8gRmllbGQgbnVtYmVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXREZWZhdWx0cy5GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHQuCitjb25zdCAoCisJRmVhdHVyZVNldERlZmF1bHRzX0ZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdF9FZGl0aW9uX2ZpZWxkX251bWJlciAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMworCUZlYXR1cmVTZXREZWZhdWx0c19GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHRfRmVhdHVyZXNfZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDIKKykKKwogLy8gTmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby4KIGNvbnN0ICgKIAlTb3VyY2VDb2RlSW5mb19tZXNzYWdlX25hbWUgICAgIHByb3RvcmVmbGVjdC5OYW1lICAgICA9ICJTb3VyY2VDb2RlSW5mbyIKQEAgLTgxMywxMSArMTIwMSwxMyBAQAogCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU291cmNlRmlsZV9maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gInNvdXJjZV9maWxlIgogCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fQmVnaW5fZmllbGRfbmFtZSAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImJlZ2luIgogCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fRW5kX2ZpZWxkX25hbWUgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gImVuZCIKKwlHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljX2ZpZWxkX25hbWUgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJzZW1hbnRpYyIKIAogCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fUGF0aF9maWVsZF9mdWxsbmFtZSAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucGF0aCIKIAlHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NvdXJjZUZpbGVfZmllbGRfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNvdXJjZV9maWxlIgogCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fQmVnaW5fZmllbGRfZnVsbG5hbWUgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uYmVnaW4iCiAJR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9FbmRfZmllbGRfZnVsbG5hbWUgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5lbmQiCisJR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpY19maWVsZF9mdWxsbmFtZSAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5zZW1hbnRpYyIKICkKIAogLy8gRmllbGQgbnVtYmVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uCkBAIC04MjYsNCArMTIxNiwxOCBAQAogCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU291cmNlRmlsZV9maWVsZF9udW1iZXIgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMgogCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fQmVnaW5fZmllbGRfbnVtYmVyICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gMwogCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fRW5kX2ZpZWxkX251bWJlciAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gNAorCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWNfZmllbGRfbnVtYmVyICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyID0gNQorKQorCisvLyBGdWxsIGFuZCBzaG9ydCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uU2VtYW50aWMuCitjb25zdCAoCisJR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpY19lbnVtX2Z1bGxuYW1lID0gImdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLlNlbWFudGljIgorCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWNfZW51bV9uYW1lICAgICA9ICJTZW1hbnRpYyIKKykKKworLy8gRW51bSB2YWx1ZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLlNlbWFudGljLgorY29uc3QgKAorCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fTk9ORV9lbnVtX3ZhbHVlICA9IDAKKwlHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NFVF9lbnVtX3ZhbHVlICAgPSAxCisJR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9BTElBU19lbnVtX3ZhbHVlID0gMgogKQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkL2dvX2ZlYXR1cmVzX2dlbi5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9nZW5pZC9nb19mZWF0dXJlc19nZW4uZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MDE1ZQotLS0gL2Rldi9udWxsCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9nZW5pZC9nb19mZWF0dXJlc19nZW4uZ28KQEAgLTAsMCArMSwzMSBAQAorLy8gQ29weXJpZ2h0IDIwMTkgVGhlIEdvIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQorLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBDb2RlIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1wcm90b3MuIERPIE5PVCBFRElULgorCitwYWNrYWdlIGdlbmlkCisKK2ltcG9ydCAoCisJcHJvdG9yZWZsZWN0ICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKykKKworY29uc3QgRmlsZV9yZWZsZWN0X3Byb3RvZGVzY19wcm90b19nb19mZWF0dXJlc19wcm90byA9ICJyZWZsZWN0L3Byb3RvZGVzYy9wcm90by9nb19mZWF0dXJlcy5wcm90byIKKworLy8gTmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5Hb0ZlYXR1cmVzLgorY29uc3QgKAorCUdvRmVhdHVyZXNfbWVzc2FnZV9uYW1lICAgICBwcm90b3JlZmxlY3QuTmFtZSAgICAgPSAiR29GZWF0dXJlcyIKKwlHb0ZlYXR1cmVzX21lc3NhZ2VfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5Hb0ZlYXR1cmVzIgorKQorCisvLyBGaWVsZCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkdvRmVhdHVyZXMuCitjb25zdCAoCisJR29GZWF0dXJlc19MZWdhY3lVbm1hcnNoYWxKc29uRW51bV9maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gImxlZ2FjeV91bm1hcnNoYWxfanNvbl9lbnVtIgorCisJR29GZWF0dXJlc19MZWdhY3lVbm1hcnNoYWxKc29uRW51bV9maWVsZF9mdWxsbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkdvRmVhdHVyZXMubGVnYWN5X3VubWFyc2hhbF9qc29uX2VudW0iCispCisKKy8vIEZpZWxkIG51bWJlcnMgZm9yIGdvb2dsZS5wcm90b2J1Zi5Hb0ZlYXR1cmVzLgorY29uc3QgKAorCUdvRmVhdHVyZXNfTGVnYWN5VW5tYXJzaGFsSnNvbkVudW1fZmllbGRfbnVtYmVyIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciA9IDEKKykKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9nZW5pZC9zdHJ1Y3RfZ2VuLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkL3N0cnVjdF9nZW4uZ28KaW5kZXggMWEzODk0NC4uYWQ2ZjgwYyAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkL3N0cnVjdF9nZW4uZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkL3N0cnVjdF9nZW4uZ28KQEAgLTE4LDYgKzE4LDExIEBACiAJTnVsbFZhbHVlX2VudW1fbmFtZSAgICAgPSAiTnVsbFZhbHVlIgogKQogCisvLyBFbnVtIHZhbHVlcyBmb3IgZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZS4KK2NvbnN0ICgKKwlOdWxsVmFsdWVfTlVMTF9WQUxVRV9lbnVtX3ZhbHVlID0gMAorKQorCiAvLyBOYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC4KIGNvbnN0ICgKIAlTdHJ1Y3RfbWVzc2FnZV9uYW1lICAgICBwcm90b3JlZmxlY3QuTmFtZSAgICAgPSAiU3RydWN0IgpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkL3R5cGVfZ2VuLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkL3R5cGVfZ2VuLmdvCmluZGV4IDNiYzcxMDEuLjQ5YmM3M2UgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9nZW5pZC90eXBlX2dlbi5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZ2VuaWQvdHlwZV9nZW4uZ28KQEAgLTE4LDYgKzE4LDEzIEBACiAJU3ludGF4X2VudW1fbmFtZSAgICAgPSAiU3ludGF4IgogKQogCisvLyBFbnVtIHZhbHVlcyBmb3IgZ29vZ2xlLnByb3RvYnVmLlN5bnRheC4KK2NvbnN0ICgKKwlTeW50YXhfU1lOVEFYX1BST1RPMl9lbnVtX3ZhbHVlICAgPSAwCisJU3ludGF4X1NZTlRBWF9QUk9UTzNfZW51bV92YWx1ZSAgID0gMQorCVN5bnRheF9TWU5UQVhfRURJVElPTlNfZW51bV92YWx1ZSA9IDIKKykKKwogLy8gTmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5UeXBlLgogY29uc3QgKAogCVR5cGVfbWVzc2FnZV9uYW1lICAgICBwcm90b3JlZmxlY3QuTmFtZSAgICAgPSAiVHlwZSIKQEAgLTMyLDYgKzM5LDcgQEAKIAlUeXBlX09wdGlvbnNfZmllbGRfbmFtZSAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJvcHRpb25zIgogCVR5cGVfU291cmNlQ29udGV4dF9maWVsZF9uYW1lIHByb3RvcmVmbGVjdC5OYW1lID0gInNvdXJjZV9jb250ZXh0IgogCVR5cGVfU3ludGF4X2ZpZWxkX25hbWUgICAgICAgIHByb3RvcmVmbGVjdC5OYW1lID0gInN5bnRheCIKKwlUeXBlX0VkaXRpb25fZmllbGRfbmFtZSAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJlZGl0aW9uIgogCiAJVHlwZV9OYW1lX2ZpZWxkX2Z1bGxuYW1lICAgICAgICAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuVHlwZS5uYW1lIgogCVR5cGVfRmllbGRzX2ZpZWxkX2Z1bGxuYW1lICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLlR5cGUuZmllbGRzIgpAQCAtMzksNiArNDcsNyBAQAogCVR5cGVfT3B0aW9uc19maWVsZF9mdWxsbmFtZSAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLlR5cGUub3B0aW9ucyIKIAlUeXBlX1NvdXJjZUNvbnRleHRfZmllbGRfZnVsbG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5UeXBlLnNvdXJjZV9jb250ZXh0IgogCVR5cGVfU3ludGF4X2ZpZWxkX2Z1bGxuYW1lICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLlR5cGUuc3ludGF4IgorCVR5cGVfRWRpdGlvbl9maWVsZF9mdWxsbmFtZSAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLlR5cGUuZWRpdGlvbiIKICkKIAogLy8gRmllbGQgbnVtYmVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLlR5cGUuCkBAIC00OSw2ICs1OCw3IEBACiAJVHlwZV9PcHRpb25zX2ZpZWxkX251bWJlciAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA0CiAJVHlwZV9Tb3VyY2VDb250ZXh0X2ZpZWxkX251bWJlciBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA1CiAJVHlwZV9TeW50YXhfZmllbGRfbnVtYmVyICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA2CisJVHlwZV9FZGl0aW9uX2ZpZWxkX251bWJlciAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA3CiApCiAKIC8vIE5hbWVzIGZvciBnb29nbGUucHJvdG9idWYuRmllbGQuCkBAIC0xMDIsMTIgKzExMiw0MyBAQAogCUZpZWxkX0tpbmRfZW51bV9uYW1lICAgICA9ICJLaW5kIgogKQogCisvLyBFbnVtIHZhbHVlcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZpZWxkLktpbmQuCitjb25zdCAoCisJRmllbGRfVFlQRV9VTktOT1dOX2VudW1fdmFsdWUgID0gMAorCUZpZWxkX1RZUEVfRE9VQkxFX2VudW1fdmFsdWUgICA9IDEKKwlGaWVsZF9UWVBFX0ZMT0FUX2VudW1fdmFsdWUgICAgPSAyCisJRmllbGRfVFlQRV9JTlQ2NF9lbnVtX3ZhbHVlICAgID0gMworCUZpZWxkX1RZUEVfVUlOVDY0X2VudW1fdmFsdWUgICA9IDQKKwlGaWVsZF9UWVBFX0lOVDMyX2VudW1fdmFsdWUgICAgPSA1CisJRmllbGRfVFlQRV9GSVhFRDY0X2VudW1fdmFsdWUgID0gNgorCUZpZWxkX1RZUEVfRklYRUQzMl9lbnVtX3ZhbHVlICA9IDcKKwlGaWVsZF9UWVBFX0JPT0xfZW51bV92YWx1ZSAgICAgPSA4CisJRmllbGRfVFlQRV9TVFJJTkdfZW51bV92YWx1ZSAgID0gOQorCUZpZWxkX1RZUEVfR1JPVVBfZW51bV92YWx1ZSAgICA9IDEwCisJRmllbGRfVFlQRV9NRVNTQUdFX2VudW1fdmFsdWUgID0gMTEKKwlGaWVsZF9UWVBFX0JZVEVTX2VudW1fdmFsdWUgICAgPSAxMgorCUZpZWxkX1RZUEVfVUlOVDMyX2VudW1fdmFsdWUgICA9IDEzCisJRmllbGRfVFlQRV9FTlVNX2VudW1fdmFsdWUgICAgID0gMTQKKwlGaWVsZF9UWVBFX1NGSVhFRDMyX2VudW1fdmFsdWUgPSAxNQorCUZpZWxkX1RZUEVfU0ZJWEVENjRfZW51bV92YWx1ZSA9IDE2CisJRmllbGRfVFlQRV9TSU5UMzJfZW51bV92YWx1ZSAgID0gMTcKKwlGaWVsZF9UWVBFX1NJTlQ2NF9lbnVtX3ZhbHVlICAgPSAxOAorKQorCiAvLyBGdWxsIGFuZCBzaG9ydCBuYW1lcyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZpZWxkLkNhcmRpbmFsaXR5LgogY29uc3QgKAogCUZpZWxkX0NhcmRpbmFsaXR5X2VudW1fZnVsbG5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkLkNhcmRpbmFsaXR5IgogCUZpZWxkX0NhcmRpbmFsaXR5X2VudW1fbmFtZSAgICAgPSAiQ2FyZGluYWxpdHkiCiApCiAKKy8vIEVudW0gdmFsdWVzIGZvciBnb29nbGUucHJvdG9idWYuRmllbGQuQ2FyZGluYWxpdHkuCitjb25zdCAoCisJRmllbGRfQ0FSRElOQUxJVFlfVU5LTk9XTl9lbnVtX3ZhbHVlICA9IDAKKwlGaWVsZF9DQVJESU5BTElUWV9PUFRJT05BTF9lbnVtX3ZhbHVlID0gMQorCUZpZWxkX0NBUkRJTkFMSVRZX1JFUVVJUkVEX2VudW1fdmFsdWUgPSAyCisJRmllbGRfQ0FSRElOQUxJVFlfUkVQRUFURURfZW51bV92YWx1ZSA9IDMKKykKKwogLy8gTmFtZXMgZm9yIGdvb2dsZS5wcm90b2J1Zi5FbnVtLgogY29uc3QgKAogCUVudW1fbWVzc2FnZV9uYW1lICAgICBwcm90b3JlZmxlY3QuTmFtZSAgICAgPSAiRW51bSIKQEAgLTEyMSwxMiArMTYyLDE0IEBACiAJRW51bV9PcHRpb25zX2ZpZWxkX25hbWUgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAib3B0aW9ucyIKIAlFbnVtX1NvdXJjZUNvbnRleHRfZmllbGRfbmFtZSBwcm90b3JlZmxlY3QuTmFtZSA9ICJzb3VyY2VfY29udGV4dCIKIAlFbnVtX1N5bnRheF9maWVsZF9uYW1lICAgICAgICBwcm90b3JlZmxlY3QuTmFtZSA9ICJzeW50YXgiCisJRW51bV9FZGl0aW9uX2ZpZWxkX25hbWUgICAgICAgcHJvdG9yZWZsZWN0Lk5hbWUgPSAiZWRpdGlvbiIKIAogCUVudW1fTmFtZV9maWVsZF9mdWxsbmFtZSAgICAgICAgICBwcm90b3JlZmxlY3QuRnVsbE5hbWUgPSAiZ29vZ2xlLnByb3RvYnVmLkVudW0ubmFtZSIKIAlFbnVtX0VudW12YWx1ZV9maWVsZF9mdWxsbmFtZSAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FbnVtLmVudW12YWx1ZSIKIAlFbnVtX09wdGlvbnNfZmllbGRfZnVsbG5hbWUgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FbnVtLm9wdGlvbnMiCiAJRW51bV9Tb3VyY2VDb250ZXh0X2ZpZWxkX2Z1bGxuYW1lIHByb3RvcmVmbGVjdC5GdWxsTmFtZSA9ICJnb29nbGUucHJvdG9idWYuRW51bS5zb3VyY2VfY29udGV4dCIKIAlFbnVtX1N5bnRheF9maWVsZF9mdWxsbmFtZSAgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FbnVtLnN5bnRheCIKKwlFbnVtX0VkaXRpb25fZmllbGRfZnVsbG5hbWUgICAgICAgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lID0gImdvb2dsZS5wcm90b2J1Zi5FbnVtLmVkaXRpb24iCiApCiAKIC8vIEZpZWxkIG51bWJlcnMgZm9yIGdvb2dsZS5wcm90b2J1Zi5FbnVtLgpAQCAtMTM2LDYgKzE3OSw3IEBACiAJRW51bV9PcHRpb25zX2ZpZWxkX251bWJlciAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSAzCiAJRW51bV9Tb3VyY2VDb250ZXh0X2ZpZWxkX251bWJlciBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA0CiAJRW51bV9TeW50YXhfZmllbGRfbnVtYmVyICAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA1CisJRW51bV9FZGl0aW9uX2ZpZWxkX251bWJlciAgICAgICBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgPSA2CiApCiAKIC8vIE5hbWVzIGZvciBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlLgpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvYXBpX2V4cG9ydC5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2FwaV9leHBvcnQuZ28KaW5kZXggYWJlZTVmMy4uYTM3MWY5OCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvYXBpX2V4cG9ydC5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9hcGlfZXhwb3J0LmdvCkBAIC0xMiw4ICsxMiw4IEBACiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2VuY29kaW5nL3Byb3RvdGV4dCIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZXJyb3JzIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90byIKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKLQlwaWZhY2UgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3J1bnRpbWUvcHJvdG9pZmFjZSIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3J1bnRpbWUvcHJvdG9pZmFjZSIKICkKIAogLy8gRXhwb3J0IGlzIGEgemVyby1sZW5ndGggbmFtZWQgdHlwZSB0aGF0IGV4aXN0cyBvbmx5IHRvIGV4cG9ydCBhIHNldCBvZgpAQCAtMzIsMTEgKzMyLDExIEBACiAKIC8vIEVudW1PZiByZXR1cm5zIHRoZSBwcm90b3JlZmxlY3QuRW51bSBpbnRlcmZhY2Ugb3ZlciBlLgogLy8gSXQgcmV0dXJucyBuaWwgaWYgZSBpcyBuaWwuCi1mdW5jIChFeHBvcnQpIEVudW1PZihlIGVudW0pIHByZWYuRW51bSB7CitmdW5jIChFeHBvcnQpIEVudW1PZihlIGVudW0pIHByb3RvcmVmbGVjdC5FbnVtIHsKIAlzd2l0Y2ggZSA6PSBlLih0eXBlKSB7CiAJY2FzZSBuaWw6CiAJCXJldHVybiBuaWwKLQljYXNlIHByZWYuRW51bToKKwljYXNlIHByb3RvcmVmbGVjdC5FbnVtOgogCQlyZXR1cm4gZQogCWRlZmF1bHQ6CiAJCXJldHVybiBsZWdhY3lXcmFwRW51bShyZWZsZWN0LlZhbHVlT2YoZSkpCkBAIC00NSwxMSArNDUsMTEgQEAKIAogLy8gRW51bURlc2NyaXB0b3JPZiByZXR1cm5zIHRoZSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IgZm9yIGUuCiAvLyBJdCByZXR1cm5zIG5pbCBpZiBlIGlzIG5pbC4KLWZ1bmMgKEV4cG9ydCkgRW51bURlc2NyaXB0b3JPZihlIGVudW0pIHByZWYuRW51bURlc2NyaXB0b3IgeworZnVuYyAoRXhwb3J0KSBFbnVtRGVzY3JpcHRvck9mKGUgZW51bSkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKIAlzd2l0Y2ggZSA6PSBlLih0eXBlKSB7CiAJY2FzZSBuaWw6CiAJCXJldHVybiBuaWwKLQljYXNlIHByZWYuRW51bToKKwljYXNlIHByb3RvcmVmbGVjdC5FbnVtOgogCQlyZXR1cm4gZS5EZXNjcmlwdG9yKCkKIAlkZWZhdWx0OgogCQlyZXR1cm4gTGVnYWN5TG9hZEVudW1EZXNjKHJlZmxlY3QuVHlwZU9mKGUpKQpAQCAtNTgsMTEgKzU4LDExIEBACiAKIC8vIEVudW1UeXBlT2YgcmV0dXJucyB0aGUgcHJvdG9yZWZsZWN0LkVudW1UeXBlIGZvciBlLgogLy8gSXQgcmV0dXJucyBuaWwgaWYgZSBpcyBuaWwuCi1mdW5jIChFeHBvcnQpIEVudW1UeXBlT2YoZSBlbnVtKSBwcmVmLkVudW1UeXBlIHsKK2Z1bmMgKEV4cG9ydCkgRW51bVR5cGVPZihlIGVudW0pIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7CiAJc3dpdGNoIGUgOj0gZS4odHlwZSkgewogCWNhc2UgbmlsOgogCQlyZXR1cm4gbmlsCi0JY2FzZSBwcmVmLkVudW06CisJY2FzZSBwcm90b3JlZmxlY3QuRW51bToKIAkJcmV0dXJuIGUuVHlwZSgpCiAJZGVmYXVsdDoKIAkJcmV0dXJuIGxlZ2FjeUxvYWRFbnVtVHlwZShyZWZsZWN0LlR5cGVPZihlKSkKQEAgLTcxLDcgKzcxLDcgQEAKIAogLy8gRW51bVN0cmluZ09mIHJldHVybnMgdGhlIGVudW0gdmFsdWUgYXMgYSBzdHJpbmcsIGVpdGhlciBhcyB0aGUgbmFtZSBpZgogLy8gdGhlIG51bWJlciBpcyByZXNvbHZhYmxlLCBvciB0aGUgbnVtYmVyIGZvcm1hdHRlZCBhcyBhIHN0cmluZy4KLWZ1bmMgKEV4cG9ydCkgRW51bVN0cmluZ09mKGVkIHByZWYuRW51bURlc2NyaXB0b3IsIG4gcHJlZi5FbnVtTnVtYmVyKSBzdHJpbmcgeworZnVuYyAoRXhwb3J0KSBFbnVtU3RyaW5nT2YoZWQgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yLCBuIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKSBzdHJpbmcgewogCWV2IDo9IGVkLlZhbHVlcygpLkJ5TnVtYmVyKG4pCiAJaWYgZXYgIT0gbmlsIHsKIAkJcmV0dXJuIHN0cmluZyhldi5OYW1lKCkpCkBAIC04NCw3ICs4NCw3IEBACiB0eXBlIG1lc3NhZ2UgPSBpbnRlcmZhY2V7fQogCiAvLyBsZWdhY3lNZXNzYWdlV3JhcHBlciB3cmFwcyBhIHYyIG1lc3NhZ2UgYXMgYSB2MSBtZXNzYWdlLgotdHlwZSBsZWdhY3lNZXNzYWdlV3JhcHBlciBzdHJ1Y3R7IG0gcHJlZi5Qcm90b01lc3NhZ2UgfQordHlwZSBsZWdhY3lNZXNzYWdlV3JhcHBlciBzdHJ1Y3R7IG0gcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSB9CiAKIGZ1bmMgKG0gbGVnYWN5TWVzc2FnZVdyYXBwZXIpIFJlc2V0KCkgICAgICAgICB7IHByb3RvLlJlc2V0KG0ubSkgfQogZnVuYyAobSBsZWdhY3lNZXNzYWdlV3JhcHBlcikgU3RyaW5nKCkgc3RyaW5nIHsgcmV0dXJuIEV4cG9ydHt9Lk1lc3NhZ2VTdHJpbmdPZihtLm0pIH0KQEAgLTkyLDMwICs5MiwzMCBAQAogCiAvLyBQcm90b01lc3NhZ2VWMU9mIGNvbnZlcnRzIGVpdGhlciBhIHYxIG9yIHYyIG1lc3NhZ2UgdG8gYSB2MSBtZXNzYWdlLgogLy8gSXQgcmV0dXJucyBuaWwgaWYgbSBpcyBuaWwuCi1mdW5jIChFeHBvcnQpIFByb3RvTWVzc2FnZVYxT2YobSBtZXNzYWdlKSBwaWZhY2UuTWVzc2FnZVYxIHsKK2Z1bmMgKEV4cG9ydCkgUHJvdG9NZXNzYWdlVjFPZihtIG1lc3NhZ2UpIHByb3RvaWZhY2UuTWVzc2FnZVYxIHsKIAlzd2l0Y2ggbXYgOj0gbS4odHlwZSkgewogCWNhc2UgbmlsOgogCQlyZXR1cm4gbmlsCi0JY2FzZSBwaWZhY2UuTWVzc2FnZVYxOgorCWNhc2UgcHJvdG9pZmFjZS5NZXNzYWdlVjE6CiAJCXJldHVybiBtdgogCWNhc2UgdW53cmFwcGVyOgogCQlyZXR1cm4gRXhwb3J0e30uUHJvdG9NZXNzYWdlVjFPZihtdi5wcm90b1Vud3JhcCgpKQotCWNhc2UgcHJlZi5Qcm90b01lc3NhZ2U6CisJY2FzZSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlOgogCQlyZXR1cm4gbGVnYWN5TWVzc2FnZVdyYXBwZXJ7bXZ9CiAJZGVmYXVsdDoKIAkJcGFuaWMoZm10LlNwcmludGYoIm1lc3NhZ2UgJVQgaXMgbmVpdGhlciBhIHYxIG9yIHYyIE1lc3NhZ2UiLCBtKSkKIAl9CiB9CiAKLWZ1bmMgKEV4cG9ydCkgcHJvdG9NZXNzYWdlVjJPZihtIG1lc3NhZ2UpIHByZWYuUHJvdG9NZXNzYWdlIHsKK2Z1bmMgKEV4cG9ydCkgcHJvdG9NZXNzYWdlVjJPZihtIG1lc3NhZ2UpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgewogCXN3aXRjaCBtdiA6PSBtLih0eXBlKSB7CiAJY2FzZSBuaWw6CiAJCXJldHVybiBuaWwKLQljYXNlIHByZWYuUHJvdG9NZXNzYWdlOgorCWNhc2UgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZToKIAkJcmV0dXJuIG12CiAJY2FzZSBsZWdhY3lNZXNzYWdlV3JhcHBlcjoKIAkJcmV0dXJuIG12Lm0KLQljYXNlIHBpZmFjZS5NZXNzYWdlVjE6CisJY2FzZSBwcm90b2lmYWNlLk1lc3NhZ2VWMToKIAkJcmV0dXJuIG5pbAogCWRlZmF1bHQ6CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJtZXNzYWdlICVUIGlzIG5laXRoZXIgYSB2MSBvciB2MiBNZXNzYWdlIiwgbSkpCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogLy8gUHJvdG9NZXNzYWdlVjJPZiBjb252ZXJ0cyBlaXRoZXIgYSB2MSBvciB2MiBtZXNzYWdlIHRvIGEgdjIgbWVzc2FnZS4KIC8vIEl0IHJldHVybnMgbmlsIGlmIG0gaXMgbmlsLgotZnVuYyAoRXhwb3J0KSBQcm90b01lc3NhZ2VWMk9mKG0gbWVzc2FnZSkgcHJlZi5Qcm90b01lc3NhZ2UgeworZnVuYyAoRXhwb3J0KSBQcm90b01lc3NhZ2VWMk9mKG0gbWVzc2FnZSkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSB7CiAJaWYgbSA9PSBuaWwgewogCQlyZXR1cm4gbmlsCiAJfQpAQCAtMTM2LDcgKzEzNiw3IEBACiAKIC8vIE1lc3NhZ2VPZiByZXR1cm5zIHRoZSBwcm90b3JlZmxlY3QuTWVzc2FnZSBpbnRlcmZhY2Ugb3ZlciBtLgogLy8gSXQgcmV0dXJucyBuaWwgaWYgbSBpcyBuaWwuCi1mdW5jIChFeHBvcnQpIE1lc3NhZ2VPZihtIG1lc3NhZ2UpIHByZWYuTWVzc2FnZSB7CitmdW5jIChFeHBvcnQpIE1lc3NhZ2VPZihtIG1lc3NhZ2UpIHByb3RvcmVmbGVjdC5NZXNzYWdlIHsKIAlpZiBtID09IG5pbCB7CiAJCXJldHVybiBuaWwKIAl9CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogLy8gTWVzc2FnZURlc2NyaXB0b3JPZiByZXR1cm5zIHRoZSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IgZm9yIG0uCiAvLyBJdCByZXR1cm5zIG5pbCBpZiBtIGlzIG5pbC4KLWZ1bmMgKEV4cG9ydCkgTWVzc2FnZURlc2NyaXB0b3JPZihtIG1lc3NhZ2UpIHByZWYuTWVzc2FnZURlc2NyaXB0b3IgeworZnVuYyAoRXhwb3J0KSBNZXNzYWdlRGVzY3JpcHRvck9mKG0gbWVzc2FnZSkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yIHsKIAlpZiBtID09IG5pbCB7CiAJCXJldHVybiBuaWwKIAl9CkBAIC0xNjAsNyArMTYwLDcgQEAKIAogLy8gTWVzc2FnZVR5cGVPZiByZXR1cm5zIHRoZSBwcm90b3JlZmxlY3QuTWVzc2FnZVR5cGUgZm9yIG0uCiAvLyBJdCByZXR1cm5zIG5pbCBpZiBtIGlzIG5pbC4KLWZ1bmMgKEV4cG9ydCkgTWVzc2FnZVR5cGVPZihtIG1lc3NhZ2UpIHByZWYuTWVzc2FnZVR5cGUgeworZnVuYyAoRXhwb3J0KSBNZXNzYWdlVHlwZU9mKG0gbWVzc2FnZSkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VUeXBlIHsKIAlpZiBtID09IG5pbCB7CiAJCXJldHVybiBuaWwKIAl9CkBAIC0xNzIsNiArMTcyLDYgQEAKIAogLy8gTWVzc2FnZVN0cmluZ09mIHJldHVybnMgdGhlIG1lc3NhZ2UgdmFsdWUgYXMgYSBzdHJpbmcsCiAvLyB3aGljaCBpcyB0aGUgbWVzc2FnZSBzZXJpYWxpemVkIGluIHRoZSBwcm90b2J1ZiB0ZXh0IGZvcm1hdC4KLWZ1bmMgKEV4cG9ydCkgTWVzc2FnZVN0cmluZ09mKG0gcHJlZi5Qcm90b01lc3NhZ2UpIHN0cmluZyB7CitmdW5jIChFeHBvcnQpIE1lc3NhZ2VTdHJpbmdPZihtIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UpIHN0cmluZyB7CiAJcmV0dXJuIHByb3RvdGV4dC5NYXJzaGFsT3B0aW9uc3tNdWx0aWxpbmU6IGZhbHNlfS5Gb3JtYXQobSkKIH0KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NoZWNraW5pdC5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NoZWNraW5pdC5nbwppbmRleCBiODIzNDFlLi5iZmYwNDFlIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jaGVja2luaXQuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY2hlY2tpbml0LmdvCkBAIC04LDE4ICs4LDE4IEBACiAJInN5bmMiCiAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZXJyb3JzIgotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgotCXBpZmFjZSAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2lmYWNlIgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2lmYWNlIgogKQogCi1mdW5jIChtaSAqTWVzc2FnZUluZm8pIGNoZWNrSW5pdGlhbGl6ZWQoaW4gcGlmYWNlLkNoZWNrSW5pdGlhbGl6ZWRJbnB1dCkgKHBpZmFjZS5DaGVja0luaXRpYWxpemVkT3V0cHV0LCBlcnJvcikgeworZnVuYyAobWkgKk1lc3NhZ2VJbmZvKSBjaGVja0luaXRpYWxpemVkKGluIHByb3RvaWZhY2UuQ2hlY2tJbml0aWFsaXplZElucHV0KSAocHJvdG9pZmFjZS5DaGVja0luaXRpYWxpemVkT3V0cHV0LCBlcnJvcikgewogCXZhciBwIHBvaW50ZXIKIAlpZiBtcywgb2sgOj0gaW4uTWVzc2FnZS4oKm1lc3NhZ2VTdGF0ZSk7IG9rIHsKIAkJcCA9IG1zLnBvaW50ZXIoKQogCX0gZWxzZSB7CiAJCXAgPSBpbi5NZXNzYWdlLigqbWVzc2FnZVJlZmxlY3RXcmFwcGVyKS5wb2ludGVyKCkKIAl9Ci0JcmV0dXJuIHBpZmFjZS5DaGVja0luaXRpYWxpemVkT3V0cHV0e30sIG1pLmNoZWNrSW5pdGlhbGl6ZWRQb2ludGVyKHApCisJcmV0dXJuIHByb3RvaWZhY2UuQ2hlY2tJbml0aWFsaXplZE91dHB1dHt9LCBtaS5jaGVja0luaXRpYWxpemVkUG9pbnRlcihwKQogfQogCiBmdW5jIChtaSAqTWVzc2FnZUluZm8pIGNoZWNrSW5pdGlhbGl6ZWRQb2ludGVyKHAgcG9pbnRlcikgZXJyb3IgewpAQCAtOTAsNyArOTAsNyBAQAogLy8gbmVlZHNJbml0Q2hlY2sgcmVwb3J0cyB3aGV0aGVyIGEgbWVzc2FnZSBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBwYXJ0aWFsIGluaXRpYWxpemF0aW9uLgogLy8KIC8vIEl0IHJldHVybnMgdHJ1ZSBpZiB0aGUgbWVzc2FnZSB0cmFuc2l0aXZlbHkgaW5jbHVkZXMgYW55IHJlcXVpcmVkIG9yIGV4dGVuc2lvbiBmaWVsZHMuCi1mdW5jIG5lZWRzSW5pdENoZWNrKG1kIHByZWYuTWVzc2FnZURlc2NyaXB0b3IpIGJvb2wgeworZnVuYyBuZWVkc0luaXRDaGVjayhtZCBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IpIGJvb2wgewogCWlmIHYsIG9rIDo9IG5lZWRzSW5pdENoZWNrTWFwLkxvYWQobWQpOyBvayB7CiAJCWlmIGhhcywgb2sgOj0gdi4oYm9vbCk7IG9rIHsKIAkJCXJldHVybiBoYXMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCXJldHVybiBuZWVkc0luaXRDaGVja0xvY2tlZChtZCkKIH0KIAotZnVuYyBuZWVkc0luaXRDaGVja0xvY2tlZChtZCBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yKSAoaGFzIGJvb2wpIHsKK2Z1bmMgbmVlZHNJbml0Q2hlY2tMb2NrZWQobWQgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yKSAoaGFzIGJvb2wpIHsKIAlpZiB2LCBvayA6PSBuZWVkc0luaXRDaGVja01hcC5Mb2FkKG1kKTsgb2sgewogCQkvLyBJZiBoYXMgaXMgdHJ1ZSwgd2UndmUgcHJldmlvdXNseSBkZXRlcm1pbmVkIHRoYXQgdGhpcyBtZXNzYWdlCiAJCS8vIG5lZWRzIGluaXQgY2hlY2tzLgpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfZXh0ZW5zaW9uLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfZXh0ZW5zaW9uLmdvCmluZGV4IDA4ZDM1MTcuLjJiOGYxMjIgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX2V4dGVuc2lvbi5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb2RlY19leHRlbnNpb24uZ28KQEAgLTEwLDcgKzEwLDcgQEAKIAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3dpcmUiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2Vycm9ycyIKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCiApCiAKIHR5cGUgZXh0ZW5zaW9uRmllbGRJbmZvIHN0cnVjdCB7CkBAIC0yMSwyOSArMjEsMjEgQEAKIAl2YWxpZGF0aW9uICAgICAgICAgIHZhbGlkYXRpb25JbmZvCiB9CiAKLXZhciBsZWdhY3lFeHRlbnNpb25GaWVsZEluZm9DYWNoZSBzeW5jLk1hcCAvLyBtYXBbcHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGVdKmV4dGVuc2lvbkZpZWxkSW5mbwotCi1mdW5jIGdldEV4dGVuc2lvbkZpZWxkSW5mbyh4dCBwcmVmLkV4dGVuc2lvblR5cGUpICpleHRlbnNpb25GaWVsZEluZm8geworZnVuYyBnZXRFeHRlbnNpb25GaWVsZEluZm8oeHQgcHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUpICpleHRlbnNpb25GaWVsZEluZm8gewogCWlmIHhpLCBvayA6PSB4dC4oKkV4dGVuc2lvbkluZm8pOyBvayB7CiAJCXhpLmxhenlJbml0KCkKIAkJcmV0dXJuIHhpLmluZm8KIAl9Ci0JcmV0dXJuIGxlZ2FjeUxvYWRFeHRlbnNpb25GaWVsZEluZm8oeHQpCisJLy8gSWRlYWxseSB3ZSdkIGNhY2hlIHRoZSByZXN1bHRpbmcgKmV4dGVuc2lvbkZpZWxkSW5mbyBzbyB3ZSBkb24ndCBoYXZlIHRvCisJLy8gcmVjb21wdXRlIHRoaXMgbWV0YWRhdGEgcmVwZWF0ZWRseS4gQnV0IHdpdGhvdXQgc3VwcG9ydCBmb3Igc29tZXRoaW5nIGxpa2UKKwkvLyB3ZWFrIHJlZmVyZW5jZXMsIHN1Y2ggYSBjYWNoZSB3b3VsZCBwaW4gdGVtcG9yYXJ5IHZhbHVlcyAobGlrZSBkeW5hbWljCisJLy8gZXh0ZW5zaW9uIHR5cGVzLCBjb25zdHJ1Y3RlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgdXNlciByZXF1ZXN0KSB0byB0aGUKKwkvLyBoZWFwIGZvcmV2ZXIsIGNhdXNpbmcgbWVtb3J5IHVzYWdlIG9mIHRoZSBjYWNoZSB0byBncm93IHVuYm91bmRlZC4KKwkvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL2lzc3Vlcy8xNTIxLgorCXJldHVybiBtYWtlRXh0ZW5zaW9uRmllbGRJbmZvKHh0LlR5cGVEZXNjcmlwdG9yKCkpCiB9CiAKLS8vIGxlZ2FjeUxvYWRFeHRlbnNpb25GaWVsZEluZm8gZHluYW1pY2FsbHkgbG9hZHMgYSAqRXh0ZW5zaW9uSW5mbyBmb3IgeHQuCi1mdW5jIGxlZ2FjeUxvYWRFeHRlbnNpb25GaWVsZEluZm8oeHQgcHJlZi5FeHRlbnNpb25UeXBlKSAqZXh0ZW5zaW9uRmllbGRJbmZvIHsKLQlpZiB4aSwgb2sgOj0gbGVnYWN5RXh0ZW5zaW9uRmllbGRJbmZvQ2FjaGUuTG9hZCh4dCk7IG9rIHsKLQkJcmV0dXJuIHhpLigqZXh0ZW5zaW9uRmllbGRJbmZvKQotCX0KLQllIDo9IG1ha2VFeHRlbnNpb25GaWVsZEluZm8oeHQuVHlwZURlc2NyaXB0b3IoKSkKLQlpZiBlLCBvayA6PSBsZWdhY3lNZXNzYWdlVHlwZUNhY2hlLkxvYWRPclN0b3JlKHh0LCBlKTsgb2sgewotCQlyZXR1cm4gZS4oKmV4dGVuc2lvbkZpZWxkSW5mbykKLQl9Ci0JcmV0dXJuIGUKLX0KLQotZnVuYyBtYWtlRXh0ZW5zaW9uRmllbGRJbmZvKHhkIHByZWYuRXh0ZW5zaW9uRGVzY3JpcHRvcikgKmV4dGVuc2lvbkZpZWxkSW5mbyB7CitmdW5jIG1ha2VFeHRlbnNpb25GaWVsZEluZm8oeGQgcHJvdG9yZWZsZWN0LkV4dGVuc2lvbkRlc2NyaXB0b3IpICpleHRlbnNpb25GaWVsZEluZm8gewogCXZhciB3aXJldGFnIHVpbnQ2NAogCWlmICF4ZC5Jc1BhY2tlZCgpIHsKIAkJd2lyZXRhZyA9IHByb3Rvd2lyZS5FbmNvZGVUYWcoeGQuTnVtYmVyKCksIHdpcmVUeXBlc1t4ZC5LaW5kKCldKQpAQCAtNTksMTAgKzUxLDEwIEBACiAJLy8gVGhpcyBpcyB0cnVlIGZvciBjb21wb3NpdGUgdHlwZXMsIHdoZXJlIHdlIHBhc3MgaW4gYSBtZXNzYWdlLCBsaXN0LCBvciBtYXAgdG8gZmlsbCBpbiwKIAkvLyBhbmQgZm9yIGVudW1zLCB3aGVyZSB3ZSBwYXNzIGluIGEgcHJvdG90eXBlIHZhbHVlIHRvIHNwZWNpZnkgdGhlIGNvbmNyZXRlIGVudW0gdHlwZS4KIAlzd2l0Y2ggeGQuS2luZCgpIHsKLQljYXNlIHByZWYuTWVzc2FnZUtpbmQsIHByZWYuR3JvdXBLaW5kLCBwcmVmLkVudW1LaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VLaW5kLCBwcm90b3JlZmxlY3QuR3JvdXBLaW5kLCBwcm90b3JlZmxlY3QuRW51bUtpbmQ6CiAJCWUudW5tYXJzaGFsTmVlZHNWYWx1ZSA9IHRydWUKIAlkZWZhdWx0OgotCQlpZiB4ZC5DYXJkaW5hbGl0eSgpID09IHByZWYuUmVwZWF0ZWQgeworCQlpZiB4ZC5DYXJkaW5hbGl0eSgpID09IHByb3RvcmVmbGVjdC5SZXBlYXRlZCB7CiAJCQllLnVubWFyc2hhbE5lZWRzVmFsdWUgPSB0cnVlCiAJCX0KIAl9CkBAIC03MywyMSArNjUsMjEgQEAKIAlhdG9taWNPbmNlIHVpbnQzMiAvLyBhdG9taWNhbGx5IHNldCBpZiB2YWx1ZSBpcyB2YWxpZAogCW11ICAgICAgICAgc3luYy5NdXRleAogCXhpICAgICAgICAgKmV4dGVuc2lvbkZpZWxkSW5mbwotCXZhbHVlICAgICAgcHJlZi5WYWx1ZQorCXZhbHVlICAgICAgcHJvdG9yZWZsZWN0LlZhbHVlCiAJYiAgICAgICAgICBbXWJ5dGUKLQlmbiAgICAgICAgIGZ1bmMoKSBwcmVmLlZhbHVlCisJZm4gICAgICAgICBmdW5jKCkgcHJvdG9yZWZsZWN0LlZhbHVlCiB9CiAKIHR5cGUgRXh0ZW5zaW9uRmllbGQgc3RydWN0IHsKLQl0eXAgcHJlZi5FeHRlbnNpb25UeXBlCisJdHlwIHByb3RvcmVmbGVjdC5FeHRlbnNpb25UeXBlCiAKIAkvLyB2YWx1ZSBpcyBlaXRoZXIgdGhlIHZhbHVlIG9mIEdldFZhbHVlLAogCS8vIG9yIGEgKmxhenlFeHRlbnNpb25WYWx1ZSB0aGF0IHRoZW4gcmV0dXJucyB0aGUgdmFsdWUgb2YgR2V0VmFsdWUuCi0JdmFsdWUgcHJlZi5WYWx1ZQorCXZhbHVlIHByb3RvcmVmbGVjdC5WYWx1ZQogCWxhenkgICpsYXp5RXh0ZW5zaW9uVmFsdWUKIH0KIAotZnVuYyAoZiAqRXh0ZW5zaW9uRmllbGQpIGFwcGVuZExhenlCeXRlcyh4dCBwcmVmLkV4dGVuc2lvblR5cGUsIHhpICpleHRlbnNpb25GaWVsZEluZm8sIG51bSBwcm90b3dpcmUuTnVtYmVyLCB3dHlwIHByb3Rvd2lyZS5UeXBlLCBiIFtdYnl0ZSkgeworZnVuYyAoZiAqRXh0ZW5zaW9uRmllbGQpIGFwcGVuZExhenlCeXRlcyh4dCBwcm90b3JlZmxlY3QuRXh0ZW5zaW9uVHlwZSwgeGkgKmV4dGVuc2lvbkZpZWxkSW5mbywgbnVtIHByb3Rvd2lyZS5OdW1iZXIsIHd0eXAgcHJvdG93aXJlLlR5cGUsIGIgW11ieXRlKSB7CiAJaWYgZi5sYXp5ID09IG5pbCB7CiAJCWYubGF6eSA9ICZsYXp5RXh0ZW5zaW9uVmFsdWV7eGk6IHhpfQogCX0KQEAgLTk3LDcgKzg5LDcgQEAKIAlmLmxhenkuYiA9IGFwcGVuZChmLmxhenkuYiwgYi4uLikKIH0KIAotZnVuYyAoZiAqRXh0ZW5zaW9uRmllbGQpIGNhbkxhenkoeHQgcHJlZi5FeHRlbnNpb25UeXBlKSBib29sIHsKK2Z1bmMgKGYgKkV4dGVuc2lvbkZpZWxkKSBjYW5MYXp5KHh0IHByb3RvcmVmbGVjdC5FeHRlbnNpb25UeXBlKSBib29sIHsKIAlpZiBmLnR5cCA9PSBuaWwgewogCQlyZXR1cm4gdHJ1ZQogCX0KQEAgLTE1NCw3ICsxNDYsNyBAQAogCiAvLyBTZXQgc2V0cyB0aGUgdHlwZSBhbmQgdmFsdWUgb2YgdGhlIGV4dGVuc2lvbiBmaWVsZC4KIC8vIFRoaXMgbXVzdCBub3QgYmUgY2FsbGVkIGNvbmN1cnJlbnRseS4KLWZ1bmMgKGYgKkV4dGVuc2lvbkZpZWxkKSBTZXQodCBwcmVmLkV4dGVuc2lvblR5cGUsIHYgcHJlZi5WYWx1ZSkgeworZnVuYyAoZiAqRXh0ZW5zaW9uRmllbGQpIFNldCh0IHByb3RvcmVmbGVjdC5FeHRlbnNpb25UeXBlLCB2IHByb3RvcmVmbGVjdC5WYWx1ZSkgewogCWYudHlwID0gdAogCWYudmFsdWUgPSB2CiAJZi5sYXp5ID0gbmlsCkBAIC0xNjIsMTQgKzE1NCwxNCBAQAogCiAvLyBTZXRMYXp5IHNldHMgdGhlIHR5cGUgYW5kIGEgdmFsdWUgdGhhdCBpcyB0byBiZSBsYXppbHkgZXZhbHVhdGVkIHVwb24gZmlyc3QgdXNlLgogLy8gVGhpcyBtdXN0IG5vdCBiZSBjYWxsZWQgY29uY3VycmVudGx5LgotZnVuYyAoZiAqRXh0ZW5zaW9uRmllbGQpIFNldExhenkodCBwcmVmLkV4dGVuc2lvblR5cGUsIGZuIGZ1bmMoKSBwcmVmLlZhbHVlKSB7CitmdW5jIChmICpFeHRlbnNpb25GaWVsZCkgU2V0TGF6eSh0IHByb3RvcmVmbGVjdC5FeHRlbnNpb25UeXBlLCBmbiBmdW5jKCkgcHJvdG9yZWZsZWN0LlZhbHVlKSB7CiAJZi50eXAgPSB0CiAJZi5sYXp5ID0gJmxhenlFeHRlbnNpb25WYWx1ZXtmbjogZm59CiB9CiAKIC8vIFZhbHVlIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBleHRlbnNpb24gZmllbGQuCiAvLyBUaGlzIG1heSBiZSBjYWxsZWQgY29uY3VycmVudGx5LgotZnVuYyAoZiAqRXh0ZW5zaW9uRmllbGQpIFZhbHVlKCkgcHJlZi5WYWx1ZSB7CitmdW5jIChmICpFeHRlbnNpb25GaWVsZCkgVmFsdWUoKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCWlmIGYubGF6eSAhPSBuaWwgewogCQlpZiBhdG9taWMuTG9hZFVpbnQzMigmZi5sYXp5LmF0b21pY09uY2UpID09IDAgewogCQkJZi5sYXp5SW5pdCgpCkBAIC0xODEsNyArMTczLDcgQEAKIAogLy8gVHlwZSByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBleHRlbnNpb24gZmllbGQuCiAvLyBUaGlzIG1heSBiZSBjYWxsZWQgY29uY3VycmVudGx5LgotZnVuYyAoZiBFeHRlbnNpb25GaWVsZCkgVHlwZSgpIHByZWYuRXh0ZW5zaW9uVHlwZSB7CitmdW5jIChmIEV4dGVuc2lvbkZpZWxkKSBUeXBlKCkgcHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUgewogCXJldHVybiBmLnR5cAogfQogCkBAIC0xOTMsNyArMTg1LDcgQEAKIAogLy8gSXNMYXp5IHJlcG9ydHMgd2hldGhlciBhIGZpZWxkIGlzIGxhemlseSBlbmNvZGVkLgogLy8gSXQgaXMgZXhwb3J0ZWQgZm9yIHRlc3RpbmcuCi1mdW5jIElzTGF6eShtIHByZWYuTWVzc2FnZSwgZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpIGJvb2wgeworZnVuYyBJc0xhenkobSBwcm90b3JlZmxlY3QuTWVzc2FnZSwgZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgYm9vbCB7CiAJdmFyIG1pICpNZXNzYWdlSW5mbwogCXZhciBwIHBvaW50ZXIKIAlzd2l0Y2ggbSA6PSBtLih0eXBlKSB7CkBAIC0yMDYsNyArMTk4LDcgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2UKIAl9Ci0JeGQsIG9rIDo9IGZkLihwcmVmLkV4dGVuc2lvblR5cGVEZXNjcmlwdG9yKQorCXhkLCBvayA6PSBmZC4ocHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGVEZXNjcmlwdG9yKQogCWlmICFvayB7CiAJCXJldHVybiBmYWxzZQogCX0KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX2ZpZWxkLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfZmllbGQuZ28KaW5kZXggY2I0YjQ4Mi4uM2ZhZGQyNCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfZmllbGQuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfZmllbGQuZ28KQEAgLTEyLDkgKzEyLDkgQEAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG93aXJlIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lcnJvcnMiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvIgotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgotCXByZWcgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeSIKLQlwaWZhY2UgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3J1bnRpbWUvcHJvdG9pZmFjZSIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeSIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2lmYWNlIgogKQogCiB0eXBlIGVyckludmFsaWRVVEY4IHN0cnVjdHt9CkBAIC0zMCw3ICszMCw3IEBACiAvLyB0byB0aGUgYXBwcm9wcmlhdGUgZmllbGQtc3BlY2lmaWMgZnVuY3Rpb24gYXMgbmVjZXNzYXJ5LgogLy8KIC8vIFRoZSB1bm1hcnNoYWwgZnVuY3Rpb24gaXMgc2V0IG9uIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHVzdWFsLgotZnVuYyAobWkgKk1lc3NhZ2VJbmZvKSBpbml0T25lb2ZGaWVsZENvZGVycyhvZCBwcmVmLk9uZW9mRGVzY3JpcHRvciwgc2kgc3RydWN0SW5mbykgeworZnVuYyAobWkgKk1lc3NhZ2VJbmZvKSBpbml0T25lb2ZGaWVsZENvZGVycyhvZCBwcm90b3JlZmxlY3QuT25lb2ZEZXNjcmlwdG9yLCBzaSBzdHJ1Y3RJbmZvKSB7CiAJZnMgOj0gc2kub25lb2ZzQnlOYW1lW29kLk5hbWUoKV0KIAlmdCA6PSBmcy5UeXBlCiAJb25lb2ZGaWVsZHMgOj0gbWFrZShtYXBbcmVmbGVjdC5UeXBlXSpjb2RlckZpZWxkSW5mbykKQEAgLTExOCwxMyArMTE4LDEzIEBACiAJfQogfQogCi1mdW5jIG1ha2VXZWFrTWVzc2FnZUZpZWxkQ29kZXIoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpIHBvaW50ZXJDb2RlckZ1bmNzIHsKK2Z1bmMgbWFrZVdlYWtNZXNzYWdlRmllbGRDb2RlcihmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSBwb2ludGVyQ29kZXJGdW5jcyB7CiAJdmFyIG9uY2Ugc3luYy5PbmNlCi0JdmFyIG1lc3NhZ2VUeXBlIHByZWYuTWVzc2FnZVR5cGUKKwl2YXIgbWVzc2FnZVR5cGUgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VUeXBlCiAJbGF6eUluaXQgOj0gZnVuYygpIHsKIAkJb25jZS5EbyhmdW5jKCkgewogCQkJbWVzc2FnZU5hbWUgOj0gZmQuTWVzc2FnZSgpLkZ1bGxOYW1lKCkKLQkJCW1lc3NhZ2VUeXBlLCBfID0gcHJlZy5HbG9iYWxUeXBlcy5GaW5kTWVzc2FnZUJ5TmFtZShtZXNzYWdlTmFtZSkKKwkJCW1lc3NhZ2VUeXBlLCBfID0gcHJvdG9yZWdpc3RyeS5HbG9iYWxUeXBlcy5GaW5kTWVzc2FnZUJ5TmFtZShtZXNzYWdlTmFtZSkKIAkJfSkKIAl9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogCX0KIH0KIAotZnVuYyBtYWtlTWVzc2FnZUZpZWxkQ29kZXIoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IsIGZ0IHJlZmxlY3QuVHlwZSkgcG9pbnRlckNvZGVyRnVuY3MgeworZnVuYyBtYWtlTWVzc2FnZUZpZWxkQ29kZXIoZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciwgZnQgcmVmbGVjdC5UeXBlKSBwb2ludGVyQ29kZXJGdW5jcyB7CiAJaWYgbWkgOj0gZ2V0TWVzc2FnZUluZm8oZnQpOyBtaSAhPSBuaWwgewogCQlmdW5jcyA6PSBwb2ludGVyQ29kZXJGdW5jc3sKIAkJCXNpemU6ICAgICAgc2l6ZU1lc3NhZ2VJbmZvLApAQCAtMjgwLDcgKzI4MCw3IEBACiAJaWYgbiA8IDAgewogCQlyZXR1cm4gb3V0LCBlcnJEZWNvZGUKIAl9Ci0JbywgZXJyIDo9IG9wdHMuT3B0aW9ucygpLlVubWFyc2hhbFN0YXRlKHBpZmFjZS5Vbm1hcnNoYWxJbnB1dHsKKwlvLCBlcnIgOj0gb3B0cy5PcHRpb25zKCkuVW5tYXJzaGFsU3RhdGUocHJvdG9pZmFjZS5Vbm1hcnNoYWxJbnB1dHsKIAkJQnVmOiAgICAgdiwKIAkJTWVzc2FnZTogbS5Qcm90b1JlZmxlY3QoKSwKIAl9KQpAQCAtMjg4LDI3ICsyODgsMjcgQEAKIAkJcmV0dXJuIG91dCwgZXJyCiAJfQogCW91dC5uID0gbgotCW91dC5pbml0aWFsaXplZCA9IG8uRmxhZ3MmcGlmYWNlLlVubWFyc2hhbEluaXRpYWxpemVkICE9IDAKKwlvdXQuaW5pdGlhbGl6ZWQgPSBvLkZsYWdzJnByb3RvaWZhY2UuVW5tYXJzaGFsSW5pdGlhbGl6ZWQgIT0gMAogCXJldHVybiBvdXQsIG5pbAogfQogCi1mdW5jIHNpemVNZXNzYWdlVmFsdWUodiBwcmVmLlZhbHVlLCB0YWdzaXplIGludCwgb3B0cyBtYXJzaGFsT3B0aW9ucykgaW50IHsKK2Z1bmMgc2l6ZU1lc3NhZ2VWYWx1ZSh2IHByb3RvcmVmbGVjdC5WYWx1ZSwgdGFnc2l6ZSBpbnQsIG9wdHMgbWFyc2hhbE9wdGlvbnMpIGludCB7CiAJbSA6PSB2Lk1lc3NhZ2UoKS5JbnRlcmZhY2UoKQogCXJldHVybiBzaXplTWVzc2FnZShtLCB0YWdzaXplLCBvcHRzKQogfQogCi1mdW5jIGFwcGVuZE1lc3NhZ2VWYWx1ZShiIFtdYnl0ZSwgdiBwcmVmLlZhbHVlLCB3aXJldGFnIHVpbnQ2NCwgb3B0cyBtYXJzaGFsT3B0aW9ucykgKFtdYnl0ZSwgZXJyb3IpIHsKK2Z1bmMgYXBwZW5kTWVzc2FnZVZhbHVlKGIgW11ieXRlLCB2IHByb3RvcmVmbGVjdC5WYWx1ZSwgd2lyZXRhZyB1aW50NjQsIG9wdHMgbWFyc2hhbE9wdGlvbnMpIChbXWJ5dGUsIGVycm9yKSB7CiAJbSA6PSB2Lk1lc3NhZ2UoKS5JbnRlcmZhY2UoKQogCXJldHVybiBhcHBlbmRNZXNzYWdlKGIsIG0sIHdpcmV0YWcsIG9wdHMpCiB9CiAKLWZ1bmMgY29uc3VtZU1lc3NhZ2VWYWx1ZShiIFtdYnl0ZSwgdiBwcmVmLlZhbHVlLCBfIHByb3Rvd2lyZS5OdW1iZXIsIHd0eXAgcHJvdG93aXJlLlR5cGUsIG9wdHMgdW5tYXJzaGFsT3B0aW9ucykgKHByZWYuVmFsdWUsIHVubWFyc2hhbE91dHB1dCwgZXJyb3IpIHsKK2Z1bmMgY29uc3VtZU1lc3NhZ2VWYWx1ZShiIFtdYnl0ZSwgdiBwcm90b3JlZmxlY3QuVmFsdWUsIF8gcHJvdG93aXJlLk51bWJlciwgd3R5cCBwcm90b3dpcmUuVHlwZSwgb3B0cyB1bm1hcnNoYWxPcHRpb25zKSAocHJvdG9yZWZsZWN0LlZhbHVlLCB1bm1hcnNoYWxPdXRwdXQsIGVycm9yKSB7CiAJbSA6PSB2Lk1lc3NhZ2UoKS5JbnRlcmZhY2UoKQogCW91dCwgZXJyIDo9IGNvbnN1bWVNZXNzYWdlKGIsIG0sIHd0eXAsIG9wdHMpCiAJcmV0dXJuIHYsIG91dCwgZXJyCiB9CiAKLWZ1bmMgaXNJbml0TWVzc2FnZVZhbHVlKHYgcHJlZi5WYWx1ZSkgZXJyb3IgeworZnVuYyBpc0luaXRNZXNzYWdlVmFsdWUodiBwcm90b3JlZmxlY3QuVmFsdWUpIGVycm9yIHsKIAltIDo9IHYuTWVzc2FnZSgpLkludGVyZmFjZSgpCiAJcmV0dXJuIHByb3RvLkNoZWNrSW5pdGlhbGl6ZWQobSkKIH0KQEAgLTMyMSwxNyArMzIxLDE3IEBACiAJbWVyZ2U6ICAgICBtZXJnZU1lc3NhZ2VWYWx1ZSwKIH0KIAotZnVuYyBzaXplR3JvdXBWYWx1ZSh2IHByZWYuVmFsdWUsIHRhZ3NpemUgaW50LCBvcHRzIG1hcnNoYWxPcHRpb25zKSBpbnQgeworZnVuYyBzaXplR3JvdXBWYWx1ZSh2IHByb3RvcmVmbGVjdC5WYWx1ZSwgdGFnc2l6ZSBpbnQsIG9wdHMgbWFyc2hhbE9wdGlvbnMpIGludCB7CiAJbSA6PSB2Lk1lc3NhZ2UoKS5JbnRlcmZhY2UoKQogCXJldHVybiBzaXplR3JvdXAobSwgdGFnc2l6ZSwgb3B0cykKIH0KIAotZnVuYyBhcHBlbmRHcm91cFZhbHVlKGIgW11ieXRlLCB2IHByZWYuVmFsdWUsIHdpcmV0YWcgdWludDY0LCBvcHRzIG1hcnNoYWxPcHRpb25zKSAoW11ieXRlLCBlcnJvcikgeworZnVuYyBhcHBlbmRHcm91cFZhbHVlKGIgW11ieXRlLCB2IHByb3RvcmVmbGVjdC5WYWx1ZSwgd2lyZXRhZyB1aW50NjQsIG9wdHMgbWFyc2hhbE9wdGlvbnMpIChbXWJ5dGUsIGVycm9yKSB7CiAJbSA6PSB2Lk1lc3NhZ2UoKS5JbnRlcmZhY2UoKQogCXJldHVybiBhcHBlbmRHcm91cChiLCBtLCB3aXJldGFnLCBvcHRzKQogfQogCi1mdW5jIGNvbnN1bWVHcm91cFZhbHVlKGIgW11ieXRlLCB2IHByZWYuVmFsdWUsIG51bSBwcm90b3dpcmUuTnVtYmVyLCB3dHlwIHByb3Rvd2lyZS5UeXBlLCBvcHRzIHVubWFyc2hhbE9wdGlvbnMpIChwcmVmLlZhbHVlLCB1bm1hcnNoYWxPdXRwdXQsIGVycm9yKSB7CitmdW5jIGNvbnN1bWVHcm91cFZhbHVlKGIgW11ieXRlLCB2IHByb3RvcmVmbGVjdC5WYWx1ZSwgbnVtIHByb3Rvd2lyZS5OdW1iZXIsIHd0eXAgcHJvdG93aXJlLlR5cGUsIG9wdHMgdW5tYXJzaGFsT3B0aW9ucykgKHByb3RvcmVmbGVjdC5WYWx1ZSwgdW5tYXJzaGFsT3V0cHV0LCBlcnJvcikgewogCW0gOj0gdi5NZXNzYWdlKCkuSW50ZXJmYWNlKCkKIAlvdXQsIGVyciA6PSBjb25zdW1lR3JvdXAoYiwgbSwgbnVtLCB3dHlwLCBvcHRzKQogCXJldHVybiB2LCBvdXQsIGVycgpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJbWVyZ2U6ICAgICBtZXJnZU1lc3NhZ2VWYWx1ZSwKIH0KIAotZnVuYyBtYWtlR3JvdXBGaWVsZENvZGVyKGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCBmdCByZWZsZWN0LlR5cGUpIHBvaW50ZXJDb2RlckZ1bmNzIHsKK2Z1bmMgbWFrZUdyb3VwRmllbGRDb2RlcihmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yLCBmdCByZWZsZWN0LlR5cGUpIHBvaW50ZXJDb2RlckZ1bmNzIHsKIAludW0gOj0gZmQuTnVtYmVyKCkKIAlpZiBtaSA6PSBnZXRNZXNzYWdlSW5mbyhmdCk7IG1pICE9IG5pbCB7CiAJCWZ1bmNzIDo9IHBvaW50ZXJDb2RlckZ1bmNzewpAQCAtNDI0LDcgKzQyNCw3IEBACiAJaWYgbiA8IDAgewogCQlyZXR1cm4gb3V0LCBlcnJEZWNvZGUKIAl9Ci0JbywgZXJyIDo9IG9wdHMuT3B0aW9ucygpLlVubWFyc2hhbFN0YXRlKHBpZmFjZS5Vbm1hcnNoYWxJbnB1dHsKKwlvLCBlcnIgOj0gb3B0cy5PcHRpb25zKCkuVW5tYXJzaGFsU3RhdGUocHJvdG9pZmFjZS5Vbm1hcnNoYWxJbnB1dHsKIAkJQnVmOiAgICAgYiwKIAkJTWVzc2FnZTogbS5Qcm90b1JlZmxlY3QoKSwKIAl9KQpAQCAtNDMyLDExICs0MzIsMTEgQEAKIAkJcmV0dXJuIG91dCwgZXJyCiAJfQogCW91dC5uID0gbgotCW91dC5pbml0aWFsaXplZCA9IG8uRmxhZ3MmcGlmYWNlLlVubWFyc2hhbEluaXRpYWxpemVkICE9IDAKKwlvdXQuaW5pdGlhbGl6ZWQgPSBvLkZsYWdzJnByb3RvaWZhY2UuVW5tYXJzaGFsSW5pdGlhbGl6ZWQgIT0gMAogCXJldHVybiBvdXQsIG5pbAogfQogCi1mdW5jIG1ha2VNZXNzYWdlU2xpY2VGaWVsZENvZGVyKGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCBmdCByZWZsZWN0LlR5cGUpIHBvaW50ZXJDb2RlckZ1bmNzIHsKK2Z1bmMgbWFrZU1lc3NhZ2VTbGljZUZpZWxkQ29kZXIoZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciwgZnQgcmVmbGVjdC5UeXBlKSBwb2ludGVyQ29kZXJGdW5jcyB7CiAJaWYgbWkgOj0gZ2V0TWVzc2FnZUluZm8oZnQpOyBtaSAhPSBuaWwgewogCQlmdW5jcyA6PSBwb2ludGVyQ29kZXJGdW5jc3sKIAkJCXNpemU6ICAgICAgc2l6ZU1lc3NhZ2VTbGljZUluZm8sCkBAIC01NTUsNyArNTU1LDcgQEAKIAkJcmV0dXJuIG91dCwgZXJyRGVjb2RlCiAJfQogCW1wIDo9IHJlZmxlY3QuTmV3KGdvVHlwZS5FbGVtKCkpCi0JbywgZXJyIDo9IG9wdHMuT3B0aW9ucygpLlVubWFyc2hhbFN0YXRlKHBpZmFjZS5Vbm1hcnNoYWxJbnB1dHsKKwlvLCBlcnIgOj0gb3B0cy5PcHRpb25zKCkuVW5tYXJzaGFsU3RhdGUocHJvdG9pZmFjZS5Vbm1hcnNoYWxJbnB1dHsKIAkJQnVmOiAgICAgdiwKIAkJTWVzc2FnZTogYXNNZXNzYWdlKG1wKS5Qcm90b1JlZmxlY3QoKSwKIAl9KQpAQCAtNTY0LDcgKzU2NCw3IEBACiAJfQogCXAuQXBwZW5kUG9pbnRlclNsaWNlKHBvaW50ZXJPZlZhbHVlKG1wKSkKIAlvdXQubiA9IG4KLQlvdXQuaW5pdGlhbGl6ZWQgPSBvLkZsYWdzJnBpZmFjZS5Vbm1hcnNoYWxJbml0aWFsaXplZCAhPSAwCisJb3V0LmluaXRpYWxpemVkID0gby5GbGFncyZwcm90b2lmYWNlLlVubWFyc2hhbEluaXRpYWxpemVkICE9IDAKIAlyZXR1cm4gb3V0LCBuaWwKIH0KIApAQCAtNTgxLDcgKzU4MSw3IEBACiAKIC8vIFNsaWNlcyBvZiBtZXNzYWdlcwogCi1mdW5jIHNpemVNZXNzYWdlU2xpY2VWYWx1ZShsaXN0diBwcmVmLlZhbHVlLCB0YWdzaXplIGludCwgb3B0cyBtYXJzaGFsT3B0aW9ucykgaW50IHsKK2Z1bmMgc2l6ZU1lc3NhZ2VTbGljZVZhbHVlKGxpc3R2IHByb3RvcmVmbGVjdC5WYWx1ZSwgdGFnc2l6ZSBpbnQsIG9wdHMgbWFyc2hhbE9wdGlvbnMpIGludCB7CiAJbGlzdCA6PSBsaXN0di5MaXN0KCkKIAluIDo9IDAKIAlmb3IgaSwgbGxlbiA6PSAwLCBsaXN0LkxlbigpOyBpIDwgbGxlbjsgaSsrIHsKQEAgLTU5MSw3ICs1OTEsNyBAQAogCXJldHVybiBuCiB9CiAKLWZ1bmMgYXBwZW5kTWVzc2FnZVNsaWNlVmFsdWUoYiBbXWJ5dGUsIGxpc3R2IHByZWYuVmFsdWUsIHdpcmV0YWcgdWludDY0LCBvcHRzIG1hcnNoYWxPcHRpb25zKSAoW11ieXRlLCBlcnJvcikgeworZnVuYyBhcHBlbmRNZXNzYWdlU2xpY2VWYWx1ZShiIFtdYnl0ZSwgbGlzdHYgcHJvdG9yZWZsZWN0LlZhbHVlLCB3aXJldGFnIHVpbnQ2NCwgb3B0cyBtYXJzaGFsT3B0aW9ucykgKFtdYnl0ZSwgZXJyb3IpIHsKIAlsaXN0IDo9IGxpc3R2Lkxpc3QoKQogCW1vcHRzIDo9IG9wdHMuT3B0aW9ucygpCiAJZm9yIGksIGxsZW4gOj0gMCwgbGlzdC5MZW4oKTsgaSA8IGxsZW47IGkrKyB7CkBAIC02MDgsMzAgKzYwOCwzMCBAQAogCXJldHVybiBiLCBuaWwKIH0KIAotZnVuYyBjb25zdW1lTWVzc2FnZVNsaWNlVmFsdWUoYiBbXWJ5dGUsIGxpc3R2IHByZWYuVmFsdWUsIF8gcHJvdG93aXJlLk51bWJlciwgd3R5cCBwcm90b3dpcmUuVHlwZSwgb3B0cyB1bm1hcnNoYWxPcHRpb25zKSAoXyBwcmVmLlZhbHVlLCBvdXQgdW5tYXJzaGFsT3V0cHV0LCBlcnIgZXJyb3IpIHsKK2Z1bmMgY29uc3VtZU1lc3NhZ2VTbGljZVZhbHVlKGIgW11ieXRlLCBsaXN0diBwcm90b3JlZmxlY3QuVmFsdWUsIF8gcHJvdG93aXJlLk51bWJlciwgd3R5cCBwcm90b3dpcmUuVHlwZSwgb3B0cyB1bm1hcnNoYWxPcHRpb25zKSAoXyBwcm90b3JlZmxlY3QuVmFsdWUsIG91dCB1bm1hcnNoYWxPdXRwdXQsIGVyciBlcnJvcikgewogCWxpc3QgOj0gbGlzdHYuTGlzdCgpCiAJaWYgd3R5cCAhPSBwcm90b3dpcmUuQnl0ZXNUeXBlIHsKLQkJcmV0dXJuIHByZWYuVmFsdWV7fSwgb3V0LCBlcnJVbmtub3duCisJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWV7fSwgb3V0LCBlcnJVbmtub3duCiAJfQogCXYsIG4gOj0gcHJvdG93aXJlLkNvbnN1bWVCeXRlcyhiKQogCWlmIG4gPCAwIHsKLQkJcmV0dXJuIHByZWYuVmFsdWV7fSwgb3V0LCBlcnJEZWNvZGUKKwkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZXt9LCBvdXQsIGVyckRlY29kZQogCX0KIAltIDo9IGxpc3QuTmV3RWxlbWVudCgpCi0JbywgZXJyIDo9IG9wdHMuT3B0aW9ucygpLlVubWFyc2hhbFN0YXRlKHBpZmFjZS5Vbm1hcnNoYWxJbnB1dHsKKwlvLCBlcnIgOj0gb3B0cy5PcHRpb25zKCkuVW5tYXJzaGFsU3RhdGUocHJvdG9pZmFjZS5Vbm1hcnNoYWxJbnB1dHsKIAkJQnVmOiAgICAgdiwKIAkJTWVzc2FnZTogbS5NZXNzYWdlKCksCiAJfSkKIAlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIHByZWYuVmFsdWV7fSwgb3V0LCBlcnIKKwkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZXt9LCBvdXQsIGVycgogCX0KIAlsaXN0LkFwcGVuZChtKQogCW91dC5uID0gbgotCW91dC5pbml0aWFsaXplZCA9IG8uRmxhZ3MmcGlmYWNlLlVubWFyc2hhbEluaXRpYWxpemVkICE9IDAKKwlvdXQuaW5pdGlhbGl6ZWQgPSBvLkZsYWdzJnByb3RvaWZhY2UuVW5tYXJzaGFsSW5pdGlhbGl6ZWQgIT0gMAogCXJldHVybiBsaXN0diwgb3V0LCBuaWwKIH0KIAotZnVuYyBpc0luaXRNZXNzYWdlU2xpY2VWYWx1ZShsaXN0diBwcmVmLlZhbHVlKSBlcnJvciB7CitmdW5jIGlzSW5pdE1lc3NhZ2VTbGljZVZhbHVlKGxpc3R2IHByb3RvcmVmbGVjdC5WYWx1ZSkgZXJyb3IgewogCWxpc3QgOj0gbGlzdHYuTGlzdCgpCiAJZm9yIGksIGxsZW4gOj0gMCwgbGlzdC5MZW4oKTsgaSA8IGxsZW47IGkrKyB7CiAJCW0gOj0gbGlzdC5HZXQoaSkuTWVzc2FnZSgpLkludGVyZmFjZSgpCkBAIC02NTAsNyArNjUwLDcgQEAKIAltZXJnZTogICAgIG1lcmdlTWVzc2FnZUxpc3RWYWx1ZSwKIH0KIAotZnVuYyBzaXplR3JvdXBTbGljZVZhbHVlKGxpc3R2IHByZWYuVmFsdWUsIHRhZ3NpemUgaW50LCBvcHRzIG1hcnNoYWxPcHRpb25zKSBpbnQgeworZnVuYyBzaXplR3JvdXBTbGljZVZhbHVlKGxpc3R2IHByb3RvcmVmbGVjdC5WYWx1ZSwgdGFnc2l6ZSBpbnQsIG9wdHMgbWFyc2hhbE9wdGlvbnMpIGludCB7CiAJbGlzdCA6PSBsaXN0di5MaXN0KCkKIAluIDo9IDAKIAlmb3IgaSwgbGxlbiA6PSAwLCBsaXN0LkxlbigpOyBpIDwgbGxlbjsgaSsrIHsKQEAgLTY2MCw3ICs2NjAsNyBAQAogCXJldHVybiBuCiB9CiAKLWZ1bmMgYXBwZW5kR3JvdXBTbGljZVZhbHVlKGIgW11ieXRlLCBsaXN0diBwcmVmLlZhbHVlLCB3aXJldGFnIHVpbnQ2NCwgb3B0cyBtYXJzaGFsT3B0aW9ucykgKFtdYnl0ZSwgZXJyb3IpIHsKK2Z1bmMgYXBwZW5kR3JvdXBTbGljZVZhbHVlKGIgW11ieXRlLCBsaXN0diBwcm90b3JlZmxlY3QuVmFsdWUsIHdpcmV0YWcgdWludDY0LCBvcHRzIG1hcnNoYWxPcHRpb25zKSAoW11ieXRlLCBlcnJvcikgewogCWxpc3QgOj0gbGlzdHYuTGlzdCgpCiAJbW9wdHMgOj0gb3B0cy5PcHRpb25zKCkKIAlmb3IgaSwgbGxlbiA6PSAwLCBsaXN0LkxlbigpOyBpIDwgbGxlbjsgaSsrIHsKQEAgLTY3NiwyNiArNjc2LDI2IEBACiAJcmV0dXJuIGIsIG5pbAogfQogCi1mdW5jIGNvbnN1bWVHcm91cFNsaWNlVmFsdWUoYiBbXWJ5dGUsIGxpc3R2IHByZWYuVmFsdWUsIG51bSBwcm90b3dpcmUuTnVtYmVyLCB3dHlwIHByb3Rvd2lyZS5UeXBlLCBvcHRzIHVubWFyc2hhbE9wdGlvbnMpIChfIHByZWYuVmFsdWUsIG91dCB1bm1hcnNoYWxPdXRwdXQsIGVyciBlcnJvcikgeworZnVuYyBjb25zdW1lR3JvdXBTbGljZVZhbHVlKGIgW11ieXRlLCBsaXN0diBwcm90b3JlZmxlY3QuVmFsdWUsIG51bSBwcm90b3dpcmUuTnVtYmVyLCB3dHlwIHByb3Rvd2lyZS5UeXBlLCBvcHRzIHVubWFyc2hhbE9wdGlvbnMpIChfIHByb3RvcmVmbGVjdC5WYWx1ZSwgb3V0IHVubWFyc2hhbE91dHB1dCwgZXJyIGVycm9yKSB7CiAJbGlzdCA6PSBsaXN0di5MaXN0KCkKIAlpZiB3dHlwICE9IHByb3Rvd2lyZS5TdGFydEdyb3VwVHlwZSB7Ci0JCXJldHVybiBwcmVmLlZhbHVle30sIG91dCwgZXJyVW5rbm93bgorCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVle30sIG91dCwgZXJyVW5rbm93bgogCX0KIAliLCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lR3JvdXAobnVtLCBiKQogCWlmIG4gPCAwIHsKLQkJcmV0dXJuIHByZWYuVmFsdWV7fSwgb3V0LCBlcnJEZWNvZGUKKwkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZXt9LCBvdXQsIGVyckRlY29kZQogCX0KIAltIDo9IGxpc3QuTmV3RWxlbWVudCgpCi0JbywgZXJyIDo9IG9wdHMuT3B0aW9ucygpLlVubWFyc2hhbFN0YXRlKHBpZmFjZS5Vbm1hcnNoYWxJbnB1dHsKKwlvLCBlcnIgOj0gb3B0cy5PcHRpb25zKCkuVW5tYXJzaGFsU3RhdGUocHJvdG9pZmFjZS5Vbm1hcnNoYWxJbnB1dHsKIAkJQnVmOiAgICAgYiwKIAkJTWVzc2FnZTogbS5NZXNzYWdlKCksCiAJfSkKIAlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIHByZWYuVmFsdWV7fSwgb3V0LCBlcnIKKwkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZXt9LCBvdXQsIGVycgogCX0KIAlsaXN0LkFwcGVuZChtKQogCW91dC5uID0gbgotCW91dC5pbml0aWFsaXplZCA9IG8uRmxhZ3MmcGlmYWNlLlVubWFyc2hhbEluaXRpYWxpemVkICE9IDAKKwlvdXQuaW5pdGlhbGl6ZWQgPSBvLkZsYWdzJnByb3RvaWZhY2UuVW5tYXJzaGFsSW5pdGlhbGl6ZWQgIT0gMAogCXJldHVybiBsaXN0diwgb3V0LCBuaWwKIH0KIApAQCAtNzA3LDcgKzcwNyw3IEBACiAJbWVyZ2U6ICAgICBtZXJnZU1lc3NhZ2VMaXN0VmFsdWUsCiB9CiAKLWZ1bmMgbWFrZUdyb3VwU2xpY2VGaWVsZENvZGVyKGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCBmdCByZWZsZWN0LlR5cGUpIHBvaW50ZXJDb2RlckZ1bmNzIHsKK2Z1bmMgbWFrZUdyb3VwU2xpY2VGaWVsZENvZGVyKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIGZ0IHJlZmxlY3QuVHlwZSkgcG9pbnRlckNvZGVyRnVuY3MgewogCW51bSA6PSBmZC5OdW1iZXIoKQogCWlmIG1pIDo9IGdldE1lc3NhZ2VJbmZvKGZ0KTsgbWkgIT0gbmlsIHsKIAkJZnVuY3MgOj0gcG9pbnRlckNvZGVyRnVuY3N7CkBAIC03NzIsNyArNzcyLDcgQEAKIAkJcmV0dXJuIG91dCwgZXJyRGVjb2RlCiAJfQogCW1wIDo9IHJlZmxlY3QuTmV3KGdvVHlwZS5FbGVtKCkpCi0JbywgZXJyIDo9IG9wdHMuT3B0aW9ucygpLlVubWFyc2hhbFN0YXRlKHBpZmFjZS5Vbm1hcnNoYWxJbnB1dHsKKwlvLCBlcnIgOj0gb3B0cy5PcHRpb25zKCkuVW5tYXJzaGFsU3RhdGUocHJvdG9pZmFjZS5Vbm1hcnNoYWxJbnB1dHsKIAkJQnVmOiAgICAgYiwKIAkJTWVzc2FnZTogYXNNZXNzYWdlKG1wKS5Qcm90b1JlZmxlY3QoKSwKIAl9KQpAQCAtNzgxLDcgKzc4MSw3IEBACiAJfQogCXAuQXBwZW5kUG9pbnRlclNsaWNlKHBvaW50ZXJPZlZhbHVlKG1wKSkKIAlvdXQubiA9IG4KLQlvdXQuaW5pdGlhbGl6ZWQgPSBvLkZsYWdzJnBpZmFjZS5Vbm1hcnNoYWxJbml0aWFsaXplZCAhPSAwCisJb3V0LmluaXRpYWxpemVkID0gby5GbGFncyZwcm90b2lmYWNlLlVubWFyc2hhbEluaXRpYWxpemVkICE9IDAKIAlyZXR1cm4gb3V0LCBuaWwKIH0KIApAQCAtODIyLDggKzgyMiw4IEBACiAJcmV0dXJuIG91dCwgbmlsCiB9CiAKLWZ1bmMgYXNNZXNzYWdlKHYgcmVmbGVjdC5WYWx1ZSkgcHJlZi5Qcm90b01lc3NhZ2UgewotCWlmIG0sIG9rIDo9IHYuSW50ZXJmYWNlKCkuKHByZWYuUHJvdG9NZXNzYWdlKTsgb2sgeworZnVuYyBhc01lc3NhZ2UodiByZWZsZWN0LlZhbHVlKSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlIHsKKwlpZiBtLCBvayA6PSB2LkludGVyZmFjZSgpLihwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlKTsgb2sgewogCQlyZXR1cm4gbQogCX0KIAlyZXR1cm4gbGVnYWN5V3JhcE1lc3NhZ2UodikuSW50ZXJmYWNlKCkKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX2dlbi5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX2dlbi5nbwppbmRleCAxYTUwOWI2Li5mNTVkYzAxIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb2RlY19nZW4uZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfZ2VuLmdvCkBAIC0xNjIsMTEgKzE2MiwyMCBAQAogZnVuYyBjb25zdW1lQm9vbFNsaWNlKGIgW11ieXRlLCBwIHBvaW50ZXIsIHd0eXAgcHJvdG93aXJlLlR5cGUsIGYgKmNvZGVyRmllbGRJbmZvLCBvcHRzIHVubWFyc2hhbE9wdGlvbnMpIChvdXQgdW5tYXJzaGFsT3V0cHV0LCBlcnIgZXJyb3IpIHsKIAlzcCA6PSBwLkJvb2xTbGljZSgpCiAJaWYgd3R5cCA9PSBwcm90b3dpcmUuQnl0ZXNUeXBlIHsKLQkJcyA6PSAqc3AKIAkJYiwgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUJ5dGVzKGIpCiAJCWlmIG4gPCAwIHsKIAkJCXJldHVybiBvdXQsIGVyckRlY29kZQogCQl9CisJCWNvdW50IDo9IDAKKwkJZm9yIF8sIHYgOj0gcmFuZ2UgYiB7CisJCQlpZiB2IDwgMHg4MCB7CisJCQkJY291bnQrKworCQkJfQorCQl9CisJCWlmIGNvdW50ID4gMCB7CisJCQlwLmdyb3dCb29sU2xpY2UoY291bnQpCisJCX0KKwkJcyA6PSAqc3AKIAkJZm9yIGxlbihiKSA+IDAgewogCQkJdmFyIHYgdWludDY0CiAJCQl2YXIgbiBpbnQKQEAgLTczMiwxMSArNzQxLDIwIEBACiBmdW5jIGNvbnN1bWVJbnQzMlNsaWNlKGIgW11ieXRlLCBwIHBvaW50ZXIsIHd0eXAgcHJvdG93aXJlLlR5cGUsIGYgKmNvZGVyRmllbGRJbmZvLCBvcHRzIHVubWFyc2hhbE9wdGlvbnMpIChvdXQgdW5tYXJzaGFsT3V0cHV0LCBlcnIgZXJyb3IpIHsKIAlzcCA6PSBwLkludDMyU2xpY2UoKQogCWlmIHd0eXAgPT0gcHJvdG93aXJlLkJ5dGVzVHlwZSB7Ci0JCXMgOj0gKnNwCiAJCWIsIG4gOj0gcHJvdG93aXJlLkNvbnN1bWVCeXRlcyhiKQogCQlpZiBuIDwgMCB7CiAJCQlyZXR1cm4gb3V0LCBlcnJEZWNvZGUKIAkJfQorCQljb3VudCA6PSAwCisJCWZvciBfLCB2IDo9IHJhbmdlIGIgeworCQkJaWYgdiA8IDB4ODAgeworCQkJCWNvdW50KysKKwkJCX0KKwkJfQorCQlpZiBjb3VudCA+IDAgeworCQkJcC5ncm93SW50MzJTbGljZShjb3VudCkKKwkJfQorCQlzIDo9ICpzcAogCQlmb3IgbGVuKGIpID4gMCB7CiAJCQl2YXIgdiB1aW50NjQKIAkJCXZhciBuIGludApAQCAtMTEzOCwxMSArMTE1NiwyMCBAQAogZnVuYyBjb25zdW1lU2ludDMyU2xpY2UoYiBbXWJ5dGUsIHAgcG9pbnRlciwgd3R5cCBwcm90b3dpcmUuVHlwZSwgZiAqY29kZXJGaWVsZEluZm8sIG9wdHMgdW5tYXJzaGFsT3B0aW9ucykgKG91dCB1bm1hcnNoYWxPdXRwdXQsIGVyciBlcnJvcikgewogCXNwIDo9IHAuSW50MzJTbGljZSgpCiAJaWYgd3R5cCA9PSBwcm90b3dpcmUuQnl0ZXNUeXBlIHsKLQkJcyA6PSAqc3AKIAkJYiwgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUJ5dGVzKGIpCiAJCWlmIG4gPCAwIHsKIAkJCXJldHVybiBvdXQsIGVyckRlY29kZQogCQl9CisJCWNvdW50IDo9IDAKKwkJZm9yIF8sIHYgOj0gcmFuZ2UgYiB7CisJCQlpZiB2IDwgMHg4MCB7CisJCQkJY291bnQrKworCQkJfQorCQl9CisJCWlmIGNvdW50ID4gMCB7CisJCQlwLmdyb3dJbnQzMlNsaWNlKGNvdW50KQorCQl9CisJCXMgOj0gKnNwCiAJCWZvciBsZW4oYikgPiAwIHsKIAkJCXZhciB2IHVpbnQ2NAogCQkJdmFyIG4gaW50CkBAIC0xNTQ0LDExICsxNTcxLDIwIEBACiBmdW5jIGNvbnN1bWVVaW50MzJTbGljZShiIFtdYnl0ZSwgcCBwb2ludGVyLCB3dHlwIHByb3Rvd2lyZS5UeXBlLCBmICpjb2RlckZpZWxkSW5mbywgb3B0cyB1bm1hcnNoYWxPcHRpb25zKSAob3V0IHVubWFyc2hhbE91dHB1dCwgZXJyIGVycm9yKSB7CiAJc3AgOj0gcC5VaW50MzJTbGljZSgpCiAJaWYgd3R5cCA9PSBwcm90b3dpcmUuQnl0ZXNUeXBlIHsKLQkJcyA6PSAqc3AKIAkJYiwgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUJ5dGVzKGIpCiAJCWlmIG4gPCAwIHsKIAkJCXJldHVybiBvdXQsIGVyckRlY29kZQogCQl9CisJCWNvdW50IDo9IDAKKwkJZm9yIF8sIHYgOj0gcmFuZ2UgYiB7CisJCQlpZiB2IDwgMHg4MCB7CisJCQkJY291bnQrKworCQkJfQorCQl9CisJCWlmIGNvdW50ID4gMCB7CisJCQlwLmdyb3dVaW50MzJTbGljZShjb3VudCkKKwkJfQorCQlzIDo9ICpzcAogCQlmb3IgbGVuKGIpID4gMCB7CiAJCQl2YXIgdiB1aW50NjQKIAkJCXZhciBuIGludApAQCAtMTk1MCwxMSArMTk4NiwyMCBAQAogZnVuYyBjb25zdW1lSW50NjRTbGljZShiIFtdYnl0ZSwgcCBwb2ludGVyLCB3dHlwIHByb3Rvd2lyZS5UeXBlLCBmICpjb2RlckZpZWxkSW5mbywgb3B0cyB1bm1hcnNoYWxPcHRpb25zKSAob3V0IHVubWFyc2hhbE91dHB1dCwgZXJyIGVycm9yKSB7CiAJc3AgOj0gcC5JbnQ2NFNsaWNlKCkKIAlpZiB3dHlwID09IHByb3Rvd2lyZS5CeXRlc1R5cGUgewotCQlzIDo9ICpzcAogCQliLCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lQnl0ZXMoYikKIAkJaWYgbiA8IDAgewogCQkJcmV0dXJuIG91dCwgZXJyRGVjb2RlCiAJCX0KKwkJY291bnQgOj0gMAorCQlmb3IgXywgdiA6PSByYW5nZSBiIHsKKwkJCWlmIHYgPCAweDgwIHsKKwkJCQljb3VudCsrCisJCQl9CisJCX0KKwkJaWYgY291bnQgPiAwIHsKKwkJCXAuZ3Jvd0ludDY0U2xpY2UoY291bnQpCisJCX0KKwkJcyA6PSAqc3AKIAkJZm9yIGxlbihiKSA+IDAgewogCQkJdmFyIHYgdWludDY0CiAJCQl2YXIgbiBpbnQKQEAgLTIzNTYsMTEgKzI0MDEsMjAgQEAKIGZ1bmMgY29uc3VtZVNpbnQ2NFNsaWNlKGIgW11ieXRlLCBwIHBvaW50ZXIsIHd0eXAgcHJvdG93aXJlLlR5cGUsIGYgKmNvZGVyRmllbGRJbmZvLCBvcHRzIHVubWFyc2hhbE9wdGlvbnMpIChvdXQgdW5tYXJzaGFsT3V0cHV0LCBlcnIgZXJyb3IpIHsKIAlzcCA6PSBwLkludDY0U2xpY2UoKQogCWlmIHd0eXAgPT0gcHJvdG93aXJlLkJ5dGVzVHlwZSB7Ci0JCXMgOj0gKnNwCiAJCWIsIG4gOj0gcHJvdG93aXJlLkNvbnN1bWVCeXRlcyhiKQogCQlpZiBuIDwgMCB7CiAJCQlyZXR1cm4gb3V0LCBlcnJEZWNvZGUKIAkJfQorCQljb3VudCA6PSAwCisJCWZvciBfLCB2IDo9IHJhbmdlIGIgeworCQkJaWYgdiA8IDB4ODAgeworCQkJCWNvdW50KysKKwkJCX0KKwkJfQorCQlpZiBjb3VudCA+IDAgeworCQkJcC5ncm93SW50NjRTbGljZShjb3VudCkKKwkJfQorCQlzIDo9ICpzcAogCQlmb3IgbGVuKGIpID4gMCB7CiAJCQl2YXIgdiB1aW50NjQKIAkJCXZhciBuIGludApAQCAtMjc2MiwxMSArMjgxNiwyMCBAQAogZnVuYyBjb25zdW1lVWludDY0U2xpY2UoYiBbXWJ5dGUsIHAgcG9pbnRlciwgd3R5cCBwcm90b3dpcmUuVHlwZSwgZiAqY29kZXJGaWVsZEluZm8sIG9wdHMgdW5tYXJzaGFsT3B0aW9ucykgKG91dCB1bm1hcnNoYWxPdXRwdXQsIGVyciBlcnJvcikgewogCXNwIDo9IHAuVWludDY0U2xpY2UoKQogCWlmIHd0eXAgPT0gcHJvdG93aXJlLkJ5dGVzVHlwZSB7Ci0JCXMgOj0gKnNwCiAJCWIsIG4gOj0gcHJvdG93aXJlLkNvbnN1bWVCeXRlcyhiKQogCQlpZiBuIDwgMCB7CiAJCQlyZXR1cm4gb3V0LCBlcnJEZWNvZGUKIAkJfQorCQljb3VudCA6PSAwCisJCWZvciBfLCB2IDo9IHJhbmdlIGIgeworCQkJaWYgdiA8IDB4ODAgeworCQkJCWNvdW50KysKKwkJCX0KKwkJfQorCQlpZiBjb3VudCA+IDAgeworCQkJcC5ncm93VWludDY0U2xpY2UoY291bnQpCisJCX0KKwkJcyA6PSAqc3AKIAkJZm9yIGxlbihiKSA+IDAgewogCQkJdmFyIHYgdWludDY0CiAJCQl2YXIgbiBpbnQKQEAgLTMxNDUsMTEgKzMyMDgsMTUgQEAKIGZ1bmMgY29uc3VtZVNmaXhlZDMyU2xpY2UoYiBbXWJ5dGUsIHAgcG9pbnRlciwgd3R5cCBwcm90b3dpcmUuVHlwZSwgZiAqY29kZXJGaWVsZEluZm8sIG9wdHMgdW5tYXJzaGFsT3B0aW9ucykgKG91dCB1bm1hcnNoYWxPdXRwdXQsIGVyciBlcnJvcikgewogCXNwIDo9IHAuSW50MzJTbGljZSgpCiAJaWYgd3R5cCA9PSBwcm90b3dpcmUuQnl0ZXNUeXBlIHsKLQkJcyA6PSAqc3AKIAkJYiwgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUJ5dGVzKGIpCiAJCWlmIG4gPCAwIHsKIAkJCXJldHVybiBvdXQsIGVyckRlY29kZQogCQl9CisJCWNvdW50IDo9IGxlbihiKSAvIHByb3Rvd2lyZS5TaXplRml4ZWQzMigpCisJCWlmIGNvdW50ID4gMCB7CisJCQlwLmdyb3dJbnQzMlNsaWNlKGNvdW50KQorCQl9CisJCXMgOj0gKnNwCiAJCWZvciBsZW4oYikgPiAwIHsKIAkJCXYsIG4gOj0gcHJvdG93aXJlLkNvbnN1bWVGaXhlZDMyKGIpCiAJCQlpZiBuIDwgMCB7CkBAIC0zNDYxLDExICszNTI4LDE1IEBACiBmdW5jIGNvbnN1bWVGaXhlZDMyU2xpY2UoYiBbXWJ5dGUsIHAgcG9pbnRlciwgd3R5cCBwcm90b3dpcmUuVHlwZSwgZiAqY29kZXJGaWVsZEluZm8sIG9wdHMgdW5tYXJzaGFsT3B0aW9ucykgKG91dCB1bm1hcnNoYWxPdXRwdXQsIGVyciBlcnJvcikgewogCXNwIDo9IHAuVWludDMyU2xpY2UoKQogCWlmIHd0eXAgPT0gcHJvdG93aXJlLkJ5dGVzVHlwZSB7Ci0JCXMgOj0gKnNwCiAJCWIsIG4gOj0gcHJvdG93aXJlLkNvbnN1bWVCeXRlcyhiKQogCQlpZiBuIDwgMCB7CiAJCQlyZXR1cm4gb3V0LCBlcnJEZWNvZGUKIAkJfQorCQljb3VudCA6PSBsZW4oYikgLyBwcm90b3dpcmUuU2l6ZUZpeGVkMzIoKQorCQlpZiBjb3VudCA+IDAgeworCQkJcC5ncm93VWludDMyU2xpY2UoY291bnQpCisJCX0KKwkJcyA6PSAqc3AKIAkJZm9yIGxlbihiKSA+IDAgewogCQkJdiwgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUZpeGVkMzIoYikKIAkJCWlmIG4gPCAwIHsKQEAgLTM3NzcsMTEgKzM4NDgsMTUgQEAKIGZ1bmMgY29uc3VtZUZsb2F0U2xpY2UoYiBbXWJ5dGUsIHAgcG9pbnRlciwgd3R5cCBwcm90b3dpcmUuVHlwZSwgZiAqY29kZXJGaWVsZEluZm8sIG9wdHMgdW5tYXJzaGFsT3B0aW9ucykgKG91dCB1bm1hcnNoYWxPdXRwdXQsIGVyciBlcnJvcikgewogCXNwIDo9IHAuRmxvYXQzMlNsaWNlKCkKIAlpZiB3dHlwID09IHByb3Rvd2lyZS5CeXRlc1R5cGUgewotCQlzIDo9ICpzcAogCQliLCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lQnl0ZXMoYikKIAkJaWYgbiA8IDAgewogCQkJcmV0dXJuIG91dCwgZXJyRGVjb2RlCiAJCX0KKwkJY291bnQgOj0gbGVuKGIpIC8gcHJvdG93aXJlLlNpemVGaXhlZDMyKCkKKwkJaWYgY291bnQgPiAwIHsKKwkJCXAuZ3Jvd0Zsb2F0MzJTbGljZShjb3VudCkKKwkJfQorCQlzIDo9ICpzcAogCQlmb3IgbGVuKGIpID4gMCB7CiAJCQl2LCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lRml4ZWQzMihiKQogCQkJaWYgbiA8IDAgewpAQCAtNDA5MywxMSArNDE2OCwxNSBAQAogZnVuYyBjb25zdW1lU2ZpeGVkNjRTbGljZShiIFtdYnl0ZSwgcCBwb2ludGVyLCB3dHlwIHByb3Rvd2lyZS5UeXBlLCBmICpjb2RlckZpZWxkSW5mbywgb3B0cyB1bm1hcnNoYWxPcHRpb25zKSAob3V0IHVubWFyc2hhbE91dHB1dCwgZXJyIGVycm9yKSB7CiAJc3AgOj0gcC5JbnQ2NFNsaWNlKCkKIAlpZiB3dHlwID09IHByb3Rvd2lyZS5CeXRlc1R5cGUgewotCQlzIDo9ICpzcAogCQliLCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lQnl0ZXMoYikKIAkJaWYgbiA8IDAgewogCQkJcmV0dXJuIG91dCwgZXJyRGVjb2RlCiAJCX0KKwkJY291bnQgOj0gbGVuKGIpIC8gcHJvdG93aXJlLlNpemVGaXhlZDY0KCkKKwkJaWYgY291bnQgPiAwIHsKKwkJCXAuZ3Jvd0ludDY0U2xpY2UoY291bnQpCisJCX0KKwkJcyA6PSAqc3AKIAkJZm9yIGxlbihiKSA+IDAgewogCQkJdiwgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUZpeGVkNjQoYikKIAkJCWlmIG4gPCAwIHsKQEAgLTQ0MDksMTEgKzQ0ODgsMTUgQEAKIGZ1bmMgY29uc3VtZUZpeGVkNjRTbGljZShiIFtdYnl0ZSwgcCBwb2ludGVyLCB3dHlwIHByb3Rvd2lyZS5UeXBlLCBmICpjb2RlckZpZWxkSW5mbywgb3B0cyB1bm1hcnNoYWxPcHRpb25zKSAob3V0IHVubWFyc2hhbE91dHB1dCwgZXJyIGVycm9yKSB7CiAJc3AgOj0gcC5VaW50NjRTbGljZSgpCiAJaWYgd3R5cCA9PSBwcm90b3dpcmUuQnl0ZXNUeXBlIHsKLQkJcyA6PSAqc3AKIAkJYiwgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUJ5dGVzKGIpCiAJCWlmIG4gPCAwIHsKIAkJCXJldHVybiBvdXQsIGVyckRlY29kZQogCQl9CisJCWNvdW50IDo9IGxlbihiKSAvIHByb3Rvd2lyZS5TaXplRml4ZWQ2NCgpCisJCWlmIGNvdW50ID4gMCB7CisJCQlwLmdyb3dVaW50NjRTbGljZShjb3VudCkKKwkJfQorCQlzIDo9ICpzcAogCQlmb3IgbGVuKGIpID4gMCB7CiAJCQl2LCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lRml4ZWQ2NChiKQogCQkJaWYgbiA8IDAgewpAQCAtNDcyNSwxMSArNDgwOCwxNSBAQAogZnVuYyBjb25zdW1lRG91YmxlU2xpY2UoYiBbXWJ5dGUsIHAgcG9pbnRlciwgd3R5cCBwcm90b3dpcmUuVHlwZSwgZiAqY29kZXJGaWVsZEluZm8sIG9wdHMgdW5tYXJzaGFsT3B0aW9ucykgKG91dCB1bm1hcnNoYWxPdXRwdXQsIGVyciBlcnJvcikgewogCXNwIDo9IHAuRmxvYXQ2NFNsaWNlKCkKIAlpZiB3dHlwID09IHByb3Rvd2lyZS5CeXRlc1R5cGUgewotCQlzIDo9ICpzcAogCQliLCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lQnl0ZXMoYikKIAkJaWYgbiA8IDAgewogCQkJcmV0dXJuIG91dCwgZXJyRGVjb2RlCiAJCX0KKwkJY291bnQgOj0gbGVuKGIpIC8gcHJvdG93aXJlLlNpemVGaXhlZDY0KCkKKwkJaWYgY291bnQgPiAwIHsKKwkJCXAuZ3Jvd0Zsb2F0NjRTbGljZShjb3VudCkKKwkJfQorCQlzIDo9ICpzcAogCQlmb3IgbGVuKGIpID4gMCB7CiAJCQl2LCBuIDo9IHByb3Rvd2lyZS5Db25zdW1lRml4ZWQ2NChiKQogCQkJaWYgbiA8IDAgewpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfbWFwLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfbWFwLmdvCmluZGV4IGMxMjQ1ZmUuLjExMWI5ZDEgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX21hcC5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb2RlY19tYXAuZ28KQEAgLTEwLDcgKzEwLDcgQEAKIAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3dpcmUiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkIgotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKICkKIAogdHlwZSBtYXBJbmZvIHN0cnVjdCB7CkBAIC0xOSwxMiArMTksMTIgQEAKIAl2YWxXaXJldGFnIHVpbnQ2NAogCWtleUZ1bmNzICAgdmFsdWVDb2RlckZ1bmNzCiAJdmFsRnVuY3MgICB2YWx1ZUNvZGVyRnVuY3MKLQlrZXlaZXJvICAgIHByZWYuVmFsdWUKLQlrZXlLaW5kICAgIHByZWYuS2luZAorCWtleVplcm8gICAgcHJvdG9yZWZsZWN0LlZhbHVlCisJa2V5S2luZCAgICBwcm90b3JlZmxlY3QuS2luZAogCWNvbnYgICAgICAgKm1hcENvbnZlcnRlcgogfQogCi1mdW5jIGVuY29kZXJGdW5jc0Zvck1hcChmZCBwcmVmLkZpZWxkRGVzY3JpcHRvciwgZnQgcmVmbGVjdC5UeXBlKSAodmFsdWVNZXNzYWdlICpNZXNzYWdlSW5mbywgZnVuY3MgcG9pbnRlckNvZGVyRnVuY3MpIHsKK2Z1bmMgZW5jb2RlckZ1bmNzRm9yTWFwKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIGZ0IHJlZmxlY3QuVHlwZSkgKHZhbHVlTWVzc2FnZSAqTWVzc2FnZUluZm8sIGZ1bmNzIHBvaW50ZXJDb2RlckZ1bmNzKSB7CiAJLy8gVE9ETzogQ29uc2lkZXIgZ2VuZXJhdGluZyBzcGVjaWFsaXplZCBtYXAgY29kZXJzLgogCWtleUZpZWxkIDo9IGZkLk1hcEtleSgpCiAJdmFsRmllbGQgOj0gZmQuTWFwVmFsdWUoKQpAQCAtNDQsNyArNDQsNyBAQAogCQlrZXlLaW5kOiAgICBrZXlGaWVsZC5LaW5kKCksCiAJCWNvbnY6ICAgICAgIGNvbnYsCiAJfQotCWlmIHZhbEZpZWxkLktpbmQoKSA9PSBwcmVmLk1lc3NhZ2VLaW5kIHsKKwlpZiB2YWxGaWVsZC5LaW5kKCkgPT0gcHJvdG9yZWZsZWN0Lk1lc3NhZ2VLaW5kIHsKIAkJdmFsdWVNZXNzYWdlID0gZ2V0TWVzc2FnZUluZm8oZnQuRWxlbSgpKQogCX0KIApAQCAtNjgsOSArNjgsOSBAQAogCQl9LAogCX0KIAlzd2l0Y2ggdmFsRmllbGQuS2luZCgpIHsKLQljYXNlIHByZWYuTWVzc2FnZUtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQ6CiAJCWZ1bmNzLm1lcmdlID0gbWVyZ2VNYXBPZk1lc3NhZ2UKLQljYXNlIHByZWYuQnl0ZXNLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LkJ5dGVzS2luZDoKIAkJZnVuY3MubWVyZ2UgPSBtZXJnZU1hcE9mQnl0ZXMKIAlkZWZhdWx0OgogCQlmdW5jcy5tZXJnZSA9IG1lcmdlTWFwCkBAIC0xMzUsNyArMTM1LDcgQEAKIAkJZXJyIDo9IGVyclVua25vd24KIAkJc3dpdGNoIG51bSB7CiAJCWNhc2UgZ2VuaWQuTWFwRW50cnlfS2V5X2ZpZWxkX251bWJlcjoKLQkJCXZhciB2IHByZWYuVmFsdWUKKwkJCXZhciB2IHByb3RvcmVmbGVjdC5WYWx1ZQogCQkJdmFyIG8gdW5tYXJzaGFsT3V0cHV0CiAJCQl2LCBvLCBlcnIgPSBtYXBpLmtleUZ1bmNzLnVubWFyc2hhbChiLCBrZXksIG51bSwgd3R5cCwgb3B0cykKIAkJCWlmIGVyciAhPSBuaWwgewpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCQlrZXkgPSB2CiAJCQluID0gby5uCiAJCWNhc2UgZ2VuaWQuTWFwRW50cnlfVmFsdWVfZmllbGRfbnVtYmVyOgotCQkJdmFyIHYgcHJlZi5WYWx1ZQorCQkJdmFyIHYgcHJvdG9yZWZsZWN0LlZhbHVlCiAJCQl2YXIgbyB1bm1hcnNoYWxPdXRwdXQKIAkJCXYsIG8sIGVyciA9IG1hcGkudmFsRnVuY3MudW5tYXJzaGFsKGIsIHZhbCwgbnVtLCB3dHlwLCBvcHRzKQogCQkJaWYgZXJyICE9IG5pbCB7CkBAIC0xOTIsNyArMTkyLDcgQEAKIAkJZXJyIDo9IGVyclVua25vd24KIAkJc3dpdGNoIG51bSB7CiAJCWNhc2UgMToKLQkJCXZhciB2IHByZWYuVmFsdWUKKwkJCXZhciB2IHByb3RvcmVmbGVjdC5WYWx1ZQogCQkJdmFyIG8gdW5tYXJzaGFsT3V0cHV0CiAJCQl2LCBvLCBlcnIgPSBtYXBpLmtleUZ1bmNzLnVubWFyc2hhbChiLCBrZXksIG51bSwgd3R5cCwgb3B0cykKIAkJCWlmIGVyciAhPSBuaWwgewpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfbWFwX2dvMTExLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfbWFwX2dvMTExLmdvCmluZGV4IDI3MDZiYjYuLjRiMTU0OTMgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX21hcF9nbzExMS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb2RlY19tYXBfZ28xMTEuZ28KQEAgLTIsNiArMiw3IEBACiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQogLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCisvL2dvOmJ1aWxkICFnbzEuMTIKIC8vICtidWlsZCAhZ28xLjEyCiAKIHBhY2thZ2UgaW1wbApkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfbWFwX2dvMTEyLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfbWFwX2dvMTEyLmdvCmluZGV4IDE1MzNlZjYuLjBiMzFiNjYgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX21hcF9nbzExMi5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb2RlY19tYXBfZ28xMTIuZ28KQEAgLTIsNiArMiw3IEBACiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQogLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCisvL2dvOmJ1aWxkIGdvMS4xMgogLy8gK2J1aWxkIGdvMS4xMgogCiBwYWNrYWdlIGltcGwKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX21lc3NhZ2UuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb2RlY19tZXNzYWdlLmdvCmluZGV4IGNkNDA1MjcuLjZiMmZkYmIgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX21lc3NhZ2UuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfbWVzc2FnZS5nbwpAQCAtMTIsMTUgKzEyLDE1IEBACiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2VuY29kaW5nL3Byb3Rvd2lyZSIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2RpbmcvbWVzc2FnZXNldCIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvb3JkZXIiCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCi0JcGlmYWNlICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UiCiApCiAKIC8vIGNvZGVyTWVzc2FnZUluZm8gY29udGFpbnMgcGVyLW1lc3NhZ2UgaW5mb3JtYXRpb24gdXNlZCBieSB0aGUgZmFzdC1wYXRoIGZ1bmN0aW9ucy4KIC8vIFRoaXMgaXMgYSBkaWZmZXJlbnQgdHlwZSBmcm9tIE1lc3NhZ2VJbmZvIHRvIGtlZXAgTWVzc2FnZUluZm8gYXMgZ2VuZXJhbC1wdXJwb3NlIGFzCiAvLyBwb3NzaWJsZS4KIHR5cGUgY29kZXJNZXNzYWdlSW5mbyBzdHJ1Y3QgewotCW1ldGhvZHMgcGlmYWNlLk1ldGhvZHMKKwltZXRob2RzIHByb3RvaWZhY2UuTWV0aG9kcwogCiAJb3JkZXJlZENvZGVyRmllbGRzIFtdKmNvZGVyRmllbGRJbmZvCiAJZGVuc2VDb2RlckZpZWxkcyAgIFtdKmNvZGVyRmllbGRJbmZvCkBAIC0zOCwxMyArMzgsMTMgQEAKIAlmdW5jcyAgICAgIHBvaW50ZXJDb2RlckZ1bmNzIC8vIGZhc3QtcGF0aCBwZXItZmllbGQgZnVuY3Rpb25zCiAJbWkgICAgICAgICAqTWVzc2FnZUluZm8gICAgICAvLyBmaWVsZCdzIG1lc3NhZ2UKIAlmdCAgICAgICAgIHJlZmxlY3QuVHlwZQotCXZhbGlkYXRpb24gdmFsaWRhdGlvbkluZm8gICAvLyBpbmZvcm1hdGlvbiB1c2VkIGJ5IG1lc3NhZ2UgdmFsaWRhdGlvbgotCW51bSAgICAgICAgcHJlZi5GaWVsZE51bWJlciAvLyBmaWVsZCBudW1iZXIKLQlvZmZzZXQgICAgIG9mZnNldCAgICAgICAgICAgLy8gc3RydWN0IGZpZWxkIG9mZnNldAotCXdpcmV0YWcgICAgdWludDY0ICAgICAgICAgICAvLyBmaWVsZCB0YWcgKG51bWJlciArIHdpcmUgdHlwZSkKLQl0YWdzaXplICAgIGludCAgICAgICAgICAgICAgLy8gc2l6ZSBvZiB0aGUgdmFyaW50LWVuY29kZWQgdGFnCi0JaXNQb2ludGVyICBib29sICAgICAgICAgICAgIC8vIHRydWUgaWYgSXNOaWwgbWF5IGJlIGNhbGxlZCBvbiB0aGUgc3RydWN0IGZpZWxkCi0JaXNSZXF1aXJlZCBib29sICAgICAgICAgICAgIC8vIHRydWUgaWYgZmllbGQgaXMgcmVxdWlyZWQKKwl2YWxpZGF0aW9uIHZhbGlkYXRpb25JbmZvICAgICAgICAgICAvLyBpbmZvcm1hdGlvbiB1c2VkIGJ5IG1lc3NhZ2UgdmFsaWRhdGlvbgorCW51bSAgICAgICAgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyIC8vIGZpZWxkIG51bWJlcgorCW9mZnNldCAgICAgb2Zmc2V0ICAgICAgICAgICAgICAgICAgIC8vIHN0cnVjdCBmaWVsZCBvZmZzZXQKKwl3aXJldGFnICAgIHVpbnQ2NCAgICAgICAgICAgICAgICAgICAvLyBmaWVsZCB0YWcgKG51bWJlciArIHdpcmUgdHlwZSkKKwl0YWdzaXplICAgIGludCAgICAgICAgICAgICAgICAgICAgICAvLyBzaXplIG9mIHRoZSB2YXJpbnQtZW5jb2RlZCB0YWcKKwlpc1BvaW50ZXIgIGJvb2wgICAgICAgICAgICAgICAgICAgICAvLyB0cnVlIGlmIElzTmlsIG1heSBiZSBjYWxsZWQgb24gdGhlIHN0cnVjdCBmaWVsZAorCWlzUmVxdWlyZWQgYm9vbCAgICAgICAgICAgICAgICAgICAgIC8vIHRydWUgaWYgZmllbGQgaXMgcmVxdWlyZWQKIH0KIAogZnVuYyAobWkgKk1lc3NhZ2VJbmZvKSBtYWtlQ29kZXJNZXRob2RzKHQgcmVmbGVjdC5UeXBlLCBzaSBzdHJ1Y3RJbmZvKSB7CkBAIC0xMjUsOCArMTI1LDggQEAKIAkJCWZ1bmNzOiAgICAgIGZ1bmNzLAogCQkJbWk6ICAgICAgICAgY2hpbGRNZXNzYWdlLAogCQkJdmFsaWRhdGlvbjogbmV3RmllbGRWYWxpZGF0aW9uSW5mbyhtaSwgc2ksIGZkLCBmdCksCi0JCQlpc1BvaW50ZXI6ICBmZC5DYXJkaW5hbGl0eSgpID09IHByZWYuUmVwZWF0ZWQgfHwgZmQuSGFzUHJlc2VuY2UoKSwKLQkJCWlzUmVxdWlyZWQ6IGZkLkNhcmRpbmFsaXR5KCkgPT0gcHJlZi5SZXF1aXJlZCwKKwkJCWlzUG9pbnRlcjogIGZkLkNhcmRpbmFsaXR5KCkgPT0gcHJvdG9yZWZsZWN0LlJlcGVhdGVkIHx8IGZkLkhhc1ByZXNlbmNlKCksCisJCQlpc1JlcXVpcmVkOiBmZC5DYXJkaW5hbGl0eSgpID09IHByb3RvcmVmbGVjdC5SZXF1aXJlZCwKIAkJfQogCQltaS5vcmRlcmVkQ29kZXJGaWVsZHMgPSBhcHBlbmQobWkub3JkZXJlZENvZGVyRmllbGRzLCBjZikKIAkJbWkuY29kZXJGaWVsZHNbY2YubnVtXSA9IGNmCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkJcmV0dXJuIG1pLm9yZGVyZWRDb2RlckZpZWxkc1tpXS5udW0gPCBtaS5vcmRlcmVkQ29kZXJGaWVsZHNbal0ubnVtCiAJfSkKIAotCXZhciBtYXhEZW5zZSBwcmVmLkZpZWxkTnVtYmVyCisJdmFyIG1heERlbnNlIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcgogCWZvciBfLCBjZiA6PSByYW5nZSBtaS5vcmRlcmVkQ29kZXJGaWVsZHMgewogCQlpZiBjZi5udW0gPj0gMTYgJiYgY2YubnVtID49IDIqbWF4RGVuc2UgewogCQkJYnJlYWsKQEAgLTE3NSwxMiArMTc1LDEyIEBACiAKIAltaS5uZWVkc0luaXRDaGVjayA9IG5lZWRzSW5pdENoZWNrKG1pLkRlc2MpCiAJaWYgbWkubWV0aG9kcy5NYXJzaGFsID09IG5pbCAmJiBtaS5tZXRob2RzLlNpemUgPT0gbmlsIHsKLQkJbWkubWV0aG9kcy5GbGFncyB8PSBwaWZhY2UuU3VwcG9ydE1hcnNoYWxEZXRlcm1pbmlzdGljCisJCW1pLm1ldGhvZHMuRmxhZ3MgfD0gcHJvdG9pZmFjZS5TdXBwb3J0TWFyc2hhbERldGVybWluaXN0aWMKIAkJbWkubWV0aG9kcy5NYXJzaGFsID0gbWkubWFyc2hhbAogCQltaS5tZXRob2RzLlNpemUgPSBtaS5zaXplCiAJfQogCWlmIG1pLm1ldGhvZHMuVW5tYXJzaGFsID09IG5pbCB7Ci0JCW1pLm1ldGhvZHMuRmxhZ3MgfD0gcGlmYWNlLlN1cHBvcnRVbm1hcnNoYWxEaXNjYXJkVW5rbm93bgorCQltaS5tZXRob2RzLkZsYWdzIHw9IHByb3RvaWZhY2UuU3VwcG9ydFVubWFyc2hhbERpc2NhcmRVbmtub3duCiAJCW1pLm1ldGhvZHMuVW5tYXJzaGFsID0gbWkudW5tYXJzaGFsCiAJfQogCWlmIG1pLm1ldGhvZHMuQ2hlY2tJbml0aWFsaXplZCA9PSBuaWwgewpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfcmVmbGVjdC5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX3JlZmxlY3QuZ28KaW5kZXggOTA3MDVlMy4uMTQ1YzU3NyAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfcmVmbGVjdC5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb2RlY19yZWZsZWN0LmdvCkBAIC0yLDYgKzIsNyBAQAogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUKIC8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAorLy9nbzpidWlsZCBwdXJlZ28gfHwgYXBwZW5naW5lCiAvLyArYnVpbGQgcHVyZWdvIGFwcGVuZ2luZQogCiBwYWNrYWdlIGltcGwKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX3RhYmxlcy5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX3RhYmxlcy5nbwppbmRleCBlODk5NzEyLi4xMzA3Nzc1IDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb2RlY190YWJsZXMuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfdGFibGVzLmdvCkBAIC0xMCw3ICsxMCw3IEBACiAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG93aXJlIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzIgotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKICkKIAogLy8gcG9pbnRlckNvZGVyRnVuY3MgaXMgYSBzZXQgb2YgcG9pbnRlciBlbmNvZGluZyBmdW5jdGlvbnMuCkBAIC0yNSw4MyArMjUsODMgQEAKIAogLy8gdmFsdWVDb2RlckZ1bmNzIGlzIGEgc2V0IG9mIHByb3RvcmVmbGVjdC5WYWx1ZSBlbmNvZGluZyBmdW5jdGlvbnMuCiB0eXBlIHZhbHVlQ29kZXJGdW5jcyBzdHJ1Y3QgewotCXNpemUgICAgICBmdW5jKHYgcHJlZi5WYWx1ZSwgdGFnc2l6ZSBpbnQsIG9wdHMgbWFyc2hhbE9wdGlvbnMpIGludAotCW1hcnNoYWwgICBmdW5jKGIgW11ieXRlLCB2IHByZWYuVmFsdWUsIHdpcmV0YWcgdWludDY0LCBvcHRzIG1hcnNoYWxPcHRpb25zKSAoW11ieXRlLCBlcnJvcikKLQl1bm1hcnNoYWwgZnVuYyhiIFtdYnl0ZSwgdiBwcmVmLlZhbHVlLCBudW0gcHJvdG93aXJlLk51bWJlciwgd3R5cCBwcm90b3dpcmUuVHlwZSwgb3B0cyB1bm1hcnNoYWxPcHRpb25zKSAocHJlZi5WYWx1ZSwgdW5tYXJzaGFsT3V0cHV0LCBlcnJvcikKLQlpc0luaXQgICAgZnVuYyh2IHByZWYuVmFsdWUpIGVycm9yCi0JbWVyZ2UgICAgIGZ1bmMoZHN0LCBzcmMgcHJlZi5WYWx1ZSwgb3B0cyBtZXJnZU9wdGlvbnMpIHByZWYuVmFsdWUKKwlzaXplICAgICAgZnVuYyh2IHByb3RvcmVmbGVjdC5WYWx1ZSwgdGFnc2l6ZSBpbnQsIG9wdHMgbWFyc2hhbE9wdGlvbnMpIGludAorCW1hcnNoYWwgICBmdW5jKGIgW11ieXRlLCB2IHByb3RvcmVmbGVjdC5WYWx1ZSwgd2lyZXRhZyB1aW50NjQsIG9wdHMgbWFyc2hhbE9wdGlvbnMpIChbXWJ5dGUsIGVycm9yKQorCXVubWFyc2hhbCBmdW5jKGIgW11ieXRlLCB2IHByb3RvcmVmbGVjdC5WYWx1ZSwgbnVtIHByb3Rvd2lyZS5OdW1iZXIsIHd0eXAgcHJvdG93aXJlLlR5cGUsIG9wdHMgdW5tYXJzaGFsT3B0aW9ucykgKHByb3RvcmVmbGVjdC5WYWx1ZSwgdW5tYXJzaGFsT3V0cHV0LCBlcnJvcikKKwlpc0luaXQgICAgZnVuYyh2IHByb3RvcmVmbGVjdC5WYWx1ZSkgZXJyb3IKKwltZXJnZSAgICAgZnVuYyhkc3QsIHNyYyBwcm90b3JlZmxlY3QuVmFsdWUsIG9wdHMgbWVyZ2VPcHRpb25zKSBwcm90b3JlZmxlY3QuVmFsdWUKIH0KIAogLy8gZmllbGRDb2RlciByZXR1cm5zIHBvaW50ZXIgZnVuY3Rpb25zIGZvciBhIGZpZWxkLCB1c2VkIGZvciBvcGVyYXRpbmcgb24KIC8vIHN0cnVjdCBmaWVsZHMuCi1mdW5jIGZpZWxkQ29kZXIoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IsIGZ0IHJlZmxlY3QuVHlwZSkgKCpNZXNzYWdlSW5mbywgcG9pbnRlckNvZGVyRnVuY3MpIHsKK2Z1bmMgZmllbGRDb2RlcihmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yLCBmdCByZWZsZWN0LlR5cGUpICgqTWVzc2FnZUluZm8sIHBvaW50ZXJDb2RlckZ1bmNzKSB7CiAJc3dpdGNoIHsKIAljYXNlIGZkLklzTWFwKCk6CiAJCXJldHVybiBlbmNvZGVyRnVuY3NGb3JNYXAoZmQsIGZ0KQotCWNhc2UgZmQuQ2FyZGluYWxpdHkoKSA9PSBwcmVmLlJlcGVhdGVkICYmICFmZC5Jc1BhY2tlZCgpOgorCWNhc2UgZmQuQ2FyZGluYWxpdHkoKSA9PSBwcm90b3JlZmxlY3QuUmVwZWF0ZWQgJiYgIWZkLklzUGFja2VkKCk6CiAJCS8vIFJlcGVhdGVkIGZpZWxkcyAobm90IHBhY2tlZCkuCiAJCWlmIGZ0LktpbmQoKSAhPSByZWZsZWN0LlNsaWNlIHsKIAkJCWJyZWFrCiAJCX0KIAkJZnQgOj0gZnQuRWxlbSgpCiAJCXN3aXRjaCBmZC5LaW5kKCkgewotCQljYXNlIHByZWYuQm9vbEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkJvb2xLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuQm9vbCB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJCb29sU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkVudW1LaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5FbnVtS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckVudW1TbGljZQogCQkJfQotCQljYXNlIHByZWYuSW50MzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5JbnQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5JbnQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJJbnQzMlNsaWNlCiAJCQl9Ci0JCWNhc2UgcHJlZi5TaW50MzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TaW50MzJLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuSW50MzIgewogCQkJCXJldHVybiBuaWwsIGNvZGVyU2ludDMyU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLlVpbnQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlVpbnQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5VaW50MzIgewogCQkJCXJldHVybiBuaWwsIGNvZGVyVWludDMyU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkludDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuSW50NjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuSW50NjQgewogCQkJCXJldHVybiBuaWwsIGNvZGVySW50NjRTbGljZQogCQkJfQotCQljYXNlIHByZWYuU2ludDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU2ludDY0S2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclNpbnQ2NFNsaWNlCiAJCQl9Ci0JCWNhc2UgcHJlZi5VaW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5VaW50NjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuVWludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclVpbnQ2NFNsaWNlCiAJCQl9Ci0JCWNhc2UgcHJlZi5TZml4ZWQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNmaXhlZDMyS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclNmaXhlZDMyU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkZpeGVkMzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5GaXhlZDMyS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LlVpbnQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJGaXhlZDMyU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkZsb2F0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRmxvYXRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuRmxvYXQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJGbG9hdFNsaWNlCiAJCQl9Ci0JCWNhc2UgcHJlZi5TZml4ZWQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNmaXhlZDY0S2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclNmaXhlZDY0U2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkZpeGVkNjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5GaXhlZDY0S2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LlVpbnQ2NCB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJGaXhlZDY0U2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkRvdWJsZUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkRvdWJsZUtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5GbG9hdDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckRvdWJsZVNsaWNlCiAJCQl9Ci0JCWNhc2UgcHJlZi5TdHJpbmdLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TdHJpbmdLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuU3RyaW5nICYmIHN0cnMuRW5mb3JjZVVURjgoZmQpIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclN0cmluZ1NsaWNlVmFsaWRhdGVVVEY4CiAJCQl9CkBAIC0xMTQsMTkgKzExNCwxOSBAQAogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuU2xpY2UgJiYgZnQuRWxlbSgpLktpbmQoKSA9PSByZWZsZWN0LlVpbnQ4IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckJ5dGVzU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkJ5dGVzS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuQnl0ZXNLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuU3RyaW5nIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclN0cmluZ1NsaWNlCiAJCQl9CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5TbGljZSAmJiBmdC5FbGVtKCkuS2luZCgpID09IHJlZmxlY3QuVWludDggewogCQkJCXJldHVybiBuaWwsIGNvZGVyQnl0ZXNTbGljZQogCQkJfQotCQljYXNlIHByZWYuTWVzc2FnZUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VLaW5kOgogCQkJcmV0dXJuIGdldE1lc3NhZ2VJbmZvKGZ0KSwgbWFrZU1lc3NhZ2VTbGljZUZpZWxkQ29kZXIoZmQsIGZ0KQotCQljYXNlIHByZWYuR3JvdXBLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5Hcm91cEtpbmQ6CiAJCQlyZXR1cm4gZ2V0TWVzc2FnZUluZm8oZnQpLCBtYWtlR3JvdXBTbGljZUZpZWxkQ29kZXIoZmQsIGZ0KQogCQl9Ci0JY2FzZSBmZC5DYXJkaW5hbGl0eSgpID09IHByZWYuUmVwZWF0ZWQgJiYgZmQuSXNQYWNrZWQoKToKKwljYXNlIGZkLkNhcmRpbmFsaXR5KCkgPT0gcHJvdG9yZWZsZWN0LlJlcGVhdGVkICYmIGZkLklzUGFja2VkKCk6CiAJCS8vIFBhY2tlZCByZXBlYXRlZCBmaWVsZHMuCiAJCS8vCiAJCS8vIE9ubHkgcmVwZWF0ZWQgZmllbGRzIG9mIHByaW1pdGl2ZSBudW1lcmljIHR5cGVzCkBAIC0xMzYsMTI4ICsxMzYsMTI4IEBACiAJCX0KIAkJZnQgOj0gZnQuRWxlbSgpCiAJCXN3aXRjaCBmZC5LaW5kKCkgewotCQljYXNlIHByZWYuQm9vbEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkJvb2xLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuQm9vbCB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJCb29sUGFja2VkU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkVudW1LaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5FbnVtS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckVudW1QYWNrZWRTbGljZQogCQkJfQotCQljYXNlIHByZWYuSW50MzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5JbnQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5JbnQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJJbnQzMlBhY2tlZFNsaWNlCiAJCQl9Ci0JCWNhc2UgcHJlZi5TaW50MzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TaW50MzJLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuSW50MzIgewogCQkJCXJldHVybiBuaWwsIGNvZGVyU2ludDMyUGFja2VkU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLlVpbnQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlVpbnQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5VaW50MzIgewogCQkJCXJldHVybiBuaWwsIGNvZGVyVWludDMyUGFja2VkU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkludDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuSW50NjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuSW50NjQgewogCQkJCXJldHVybiBuaWwsIGNvZGVySW50NjRQYWNrZWRTbGljZQogCQkJfQotCQljYXNlIHByZWYuU2ludDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU2ludDY0S2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclNpbnQ2NFBhY2tlZFNsaWNlCiAJCQl9Ci0JCWNhc2UgcHJlZi5VaW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5VaW50NjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuVWludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclVpbnQ2NFBhY2tlZFNsaWNlCiAJCQl9Ci0JCWNhc2UgcHJlZi5TZml4ZWQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNmaXhlZDMyS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclNmaXhlZDMyUGFja2VkU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkZpeGVkMzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5GaXhlZDMyS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LlVpbnQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJGaXhlZDMyUGFja2VkU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkZsb2F0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRmxvYXRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuRmxvYXQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJGbG9hdFBhY2tlZFNsaWNlCiAJCQl9Ci0JCWNhc2UgcHJlZi5TZml4ZWQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNmaXhlZDY0S2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclNmaXhlZDY0UGFja2VkU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkZpeGVkNjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5GaXhlZDY0S2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LlVpbnQ2NCB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJGaXhlZDY0UGFja2VkU2xpY2UKIAkJCX0KLQkJY2FzZSBwcmVmLkRvdWJsZUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkRvdWJsZUtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5GbG9hdDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckRvdWJsZVBhY2tlZFNsaWNlCiAJCQl9CiAJCX0KLQljYXNlIGZkLktpbmQoKSA9PSBwcmVmLk1lc3NhZ2VLaW5kOgorCWNhc2UgZmQuS2luZCgpID09IHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZDoKIAkJcmV0dXJuIGdldE1lc3NhZ2VJbmZvKGZ0KSwgbWFrZU1lc3NhZ2VGaWVsZENvZGVyKGZkLCBmdCkKLQljYXNlIGZkLktpbmQoKSA9PSBwcmVmLkdyb3VwS2luZDoKKwljYXNlIGZkLktpbmQoKSA9PSBwcm90b3JlZmxlY3QuR3JvdXBLaW5kOgogCQlyZXR1cm4gZ2V0TWVzc2FnZUluZm8oZnQpLCBtYWtlR3JvdXBGaWVsZENvZGVyKGZkLCBmdCkKLQljYXNlIGZkLlN5bnRheCgpID09IHByZWYuUHJvdG8zICYmIGZkLkNvbnRhaW5pbmdPbmVvZigpID09IG5pbDoKKwljYXNlICFmZC5IYXNQcmVzZW5jZSgpICYmIGZkLkNvbnRhaW5pbmdPbmVvZigpID09IG5pbDoKIAkJLy8gUG9wdWxhdGVkIG9uZW9mIGZpZWxkcyBhbHdheXMgZW5jb2RlIGV2ZW4gaWYgc2V0IHRvIHRoZSB6ZXJvIHZhbHVlLAogCQkvLyB3aGljaCBub3JtYWxseSBhcmUgbm90IGVuY29kZWQgaW4gcHJvdG8zLgogCQlzd2l0Y2ggZmQuS2luZCgpIHsKLQkJY2FzZSBwcmVmLkJvb2xLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5Cb29sS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkJvb2wgewogCQkJCXJldHVybiBuaWwsIGNvZGVyQm9vbE5vWmVybwogCQkJfQotCQljYXNlIHByZWYuRW51bUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkVudW1LaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuSW50MzIgewogCQkJCXJldHVybiBuaWwsIGNvZGVyRW51bU5vWmVybwogCQkJfQotCQljYXNlIHByZWYuSW50MzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5JbnQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5JbnQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJJbnQzMk5vWmVybwogCQkJfQotCQljYXNlIHByZWYuU2ludDMyS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU2ludDMyS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclNpbnQzMk5vWmVybwogCQkJfQotCQljYXNlIHByZWYuVWludDMyS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuVWludDMyS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LlVpbnQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJVaW50MzJOb1plcm8KIAkJCX0KLQkJY2FzZSBwcmVmLkludDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuSW50NjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuSW50NjQgewogCQkJCXJldHVybiBuaWwsIGNvZGVySW50NjROb1plcm8KIAkJCX0KLQkJY2FzZSBwcmVmLlNpbnQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNpbnQ2NEtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5JbnQ2NCB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTaW50NjROb1plcm8KIAkJCX0KLQkJY2FzZSBwcmVmLlVpbnQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlVpbnQ2NEtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5VaW50NjQgewogCQkJCXJldHVybiBuaWwsIGNvZGVyVWludDY0Tm9aZXJvCiAJCQl9Ci0JCWNhc2UgcHJlZi5TZml4ZWQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNmaXhlZDMyS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclNmaXhlZDMyTm9aZXJvCiAJCQl9Ci0JCWNhc2UgcHJlZi5GaXhlZDMyS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRml4ZWQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5VaW50MzIgewogCQkJCXJldHVybiBuaWwsIGNvZGVyRml4ZWQzMk5vWmVybwogCQkJfQotCQljYXNlIHByZWYuRmxvYXRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5GbG9hdEtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5GbG9hdDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckZsb2F0Tm9aZXJvCiAJCQl9Ci0JCWNhc2UgcHJlZi5TZml4ZWQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNmaXhlZDY0S2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclNmaXhlZDY0Tm9aZXJvCiAJCQl9Ci0JCWNhc2UgcHJlZi5GaXhlZDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRml4ZWQ2NEtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5VaW50NjQgewogCQkJCXJldHVybiBuaWwsIGNvZGVyRml4ZWQ2NE5vWmVybwogCQkJfQotCQljYXNlIHByZWYuRG91YmxlS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRG91YmxlS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkZsb2F0NjQgewogCQkJCXJldHVybiBuaWwsIGNvZGVyRG91YmxlTm9aZXJvCiAJCQl9Ci0JCWNhc2UgcHJlZi5TdHJpbmdLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TdHJpbmdLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuU3RyaW5nICYmIHN0cnMuRW5mb3JjZVVURjgoZmQpIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclN0cmluZ05vWmVyb1ZhbGlkYXRlVVRGOAogCQkJfQpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5TbGljZSAmJiBmdC5FbGVtKCkuS2luZCgpID09IHJlZmxlY3QuVWludDggewogCQkJCXJldHVybiBuaWwsIGNvZGVyQnl0ZXNOb1plcm8KIAkJCX0KLQkJY2FzZSBwcmVmLkJ5dGVzS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuQnl0ZXNLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuU3RyaW5nIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclN0cmluZ05vWmVybwogCQkJfQpAQCAtMjgxLDEzMyArMjgxLDEzMyBAQAogCWNhc2UgZnQuS2luZCgpID09IHJlZmxlY3QuUHRyOgogCQlmdCA6PSBmdC5FbGVtKCkKIAkJc3dpdGNoIGZkLktpbmQoKSB7Ci0JCWNhc2UgcHJlZi5Cb29sS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuQm9vbEtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5Cb29sIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckJvb2xQdHIKIAkJCX0KLQkJY2FzZSBwcmVmLkVudW1LaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5FbnVtS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckVudW1QdHIKIAkJCX0KLQkJY2FzZSBwcmVmLkludDMyS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuSW50MzJLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuSW50MzIgewogCQkJCXJldHVybiBuaWwsIGNvZGVySW50MzJQdHIKIAkJCX0KLQkJY2FzZSBwcmVmLlNpbnQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNpbnQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5JbnQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTaW50MzJQdHIKIAkJCX0KLQkJY2FzZSBwcmVmLlVpbnQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlVpbnQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5VaW50MzIgewogCQkJCXJldHVybiBuaWwsIGNvZGVyVWludDMyUHRyCiAJCQl9Ci0JCWNhc2UgcHJlZi5JbnQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkludDY0S2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckludDY0UHRyCiAJCQl9Ci0JCWNhc2UgcHJlZi5TaW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TaW50NjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuSW50NjQgewogCQkJCXJldHVybiBuaWwsIGNvZGVyU2ludDY0UHRyCiAJCQl9Ci0JCWNhc2UgcHJlZi5VaW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5VaW50NjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuVWludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclVpbnQ2NFB0cgogCQkJfQotCQljYXNlIHByZWYuU2ZpeGVkMzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TZml4ZWQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5JbnQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTZml4ZWQzMlB0cgogCQkJfQotCQljYXNlIHByZWYuRml4ZWQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkZpeGVkMzJLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuVWludDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckZpeGVkMzJQdHIKIAkJCX0KLQkJY2FzZSBwcmVmLkZsb2F0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRmxvYXRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuRmxvYXQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJGbG9hdFB0cgogCQkJfQotCQljYXNlIHByZWYuU2ZpeGVkNjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TZml4ZWQ2NEtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5JbnQ2NCB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTZml4ZWQ2NFB0cgogCQkJfQotCQljYXNlIHByZWYuRml4ZWQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkZpeGVkNjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuVWludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckZpeGVkNjRQdHIKIAkJCX0KLQkJY2FzZSBwcmVmLkRvdWJsZUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkRvdWJsZUtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5GbG9hdDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckRvdWJsZVB0cgogCQkJfQotCQljYXNlIHByZWYuU3RyaW5nS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LlN0cmluZyAmJiBzdHJzLkVuZm9yY2VVVEY4KGZkKSB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTdHJpbmdQdHJWYWxpZGF0ZVVURjgKIAkJCX0KIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LlN0cmluZyB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTdHJpbmdQdHIKIAkJCX0KLQkJY2FzZSBwcmVmLkJ5dGVzS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuQnl0ZXNLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuU3RyaW5nIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclN0cmluZ1B0cgogCQkJfQogCQl9CiAJZGVmYXVsdDoKIAkJc3dpdGNoIGZkLktpbmQoKSB7Ci0JCWNhc2UgcHJlZi5Cb29sS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuQm9vbEtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5Cb29sIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckJvb2wKIAkJCX0KLQkJY2FzZSBwcmVmLkVudW1LaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5FbnVtS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckVudW0KIAkJCX0KLQkJY2FzZSBwcmVmLkludDMyS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuSW50MzJLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuSW50MzIgewogCQkJCXJldHVybiBuaWwsIGNvZGVySW50MzIKIAkJCX0KLQkJY2FzZSBwcmVmLlNpbnQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNpbnQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5JbnQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTaW50MzIKIAkJCX0KLQkJY2FzZSBwcmVmLlVpbnQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlVpbnQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5VaW50MzIgewogCQkJCXJldHVybiBuaWwsIGNvZGVyVWludDMyCiAJCQl9Ci0JCWNhc2UgcHJlZi5JbnQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkludDY0S2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LkludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckludDY0CiAJCQl9Ci0JCWNhc2UgcHJlZi5TaW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TaW50NjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuSW50NjQgewogCQkJCXJldHVybiBuaWwsIGNvZGVyU2ludDY0CiAJCQl9Ci0JCWNhc2UgcHJlZi5VaW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5VaW50NjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuVWludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlclVpbnQ2NAogCQkJfQotCQljYXNlIHByZWYuU2ZpeGVkMzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TZml4ZWQzMktpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5JbnQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTZml4ZWQzMgogCQkJfQotCQljYXNlIHByZWYuRml4ZWQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkZpeGVkMzJLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuVWludDMyIHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckZpeGVkMzIKIAkJCX0KLQkJY2FzZSBwcmVmLkZsb2F0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRmxvYXRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuRmxvYXQzMiB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJGbG9hdAogCQkJfQotCQljYXNlIHByZWYuU2ZpeGVkNjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TZml4ZWQ2NEtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5JbnQ2NCB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTZml4ZWQ2NAogCQkJfQotCQljYXNlIHByZWYuRml4ZWQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkZpeGVkNjRLaW5kOgogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuVWludDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckZpeGVkNjQKIAkJCX0KLQkJY2FzZSBwcmVmLkRvdWJsZUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkRvdWJsZUtpbmQ6CiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5GbG9hdDY0IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckRvdWJsZQogCQkJfQotCQljYXNlIHByZWYuU3RyaW5nS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LlN0cmluZyAmJiBzdHJzLkVuZm9yY2VVVEY4KGZkKSB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTdHJpbmdWYWxpZGF0ZVVURjgKIAkJCX0KQEAgLTQyMCw3ICs0MjAsNyBAQAogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuU2xpY2UgJiYgZnQuRWxlbSgpLktpbmQoKSA9PSByZWZsZWN0LlVpbnQ4IHsKIAkJCQlyZXR1cm4gbmlsLCBjb2RlckJ5dGVzCiAJCQl9Ci0JCWNhc2UgcHJlZi5CeXRlc0tpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkJ5dGVzS2luZDoKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LlN0cmluZyB7CiAJCQkJcmV0dXJuIG5pbCwgY29kZXJTdHJpbmcKIAkJCX0KQEAgLTQzNCwxMjIgKzQzNCwxMjIgQEAKIAogLy8gZW5jb2RlckZ1bmNzRm9yVmFsdWUgcmV0dXJucyB2YWx1ZSBmdW5jdGlvbnMgZm9yIGEgZmllbGQsIHVzZWQgZm9yCiAvLyBleHRlbnNpb24gdmFsdWVzIGFuZCBtYXAgZW5jb2RpbmcuCi1mdW5jIGVuY29kZXJGdW5jc0ZvclZhbHVlKGZkIHByZWYuRmllbGREZXNjcmlwdG9yKSB2YWx1ZUNvZGVyRnVuY3MgeworZnVuYyBlbmNvZGVyRnVuY3NGb3JWYWx1ZShmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSB2YWx1ZUNvZGVyRnVuY3MgewogCXN3aXRjaCB7Ci0JY2FzZSBmZC5DYXJkaW5hbGl0eSgpID09IHByZWYuUmVwZWF0ZWQgJiYgIWZkLklzUGFja2VkKCk6CisJY2FzZSBmZC5DYXJkaW5hbGl0eSgpID09IHByb3RvcmVmbGVjdC5SZXBlYXRlZCAmJiAhZmQuSXNQYWNrZWQoKToKIAkJc3dpdGNoIGZkLktpbmQoKSB7Ci0JCWNhc2UgcHJlZi5Cb29sS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuQm9vbEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJCb29sU2xpY2VWYWx1ZQotCQljYXNlIHByZWYuRW51bUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkVudW1LaW5kOgogCQkJcmV0dXJuIGNvZGVyRW51bVNsaWNlVmFsdWUKLQkJY2FzZSBwcmVmLkludDMyS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuSW50MzJLaW5kOgogCQkJcmV0dXJuIGNvZGVySW50MzJTbGljZVZhbHVlCi0JCWNhc2UgcHJlZi5TaW50MzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TaW50MzJLaW5kOgogCQkJcmV0dXJuIGNvZGVyU2ludDMyU2xpY2VWYWx1ZQotCQljYXNlIHByZWYuVWludDMyS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuVWludDMyS2luZDoKIAkJCXJldHVybiBjb2RlclVpbnQzMlNsaWNlVmFsdWUKLQkJY2FzZSBwcmVmLkludDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuSW50NjRLaW5kOgogCQkJcmV0dXJuIGNvZGVySW50NjRTbGljZVZhbHVlCi0JCWNhc2UgcHJlZi5TaW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TaW50NjRLaW5kOgogCQkJcmV0dXJuIGNvZGVyU2ludDY0U2xpY2VWYWx1ZQotCQljYXNlIHByZWYuVWludDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuVWludDY0S2luZDoKIAkJCXJldHVybiBjb2RlclVpbnQ2NFNsaWNlVmFsdWUKLQkJY2FzZSBwcmVmLlNmaXhlZDMyS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU2ZpeGVkMzJLaW5kOgogCQkJcmV0dXJuIGNvZGVyU2ZpeGVkMzJTbGljZVZhbHVlCi0JCWNhc2UgcHJlZi5GaXhlZDMyS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRml4ZWQzMktpbmQ6CiAJCQlyZXR1cm4gY29kZXJGaXhlZDMyU2xpY2VWYWx1ZQotCQljYXNlIHByZWYuRmxvYXRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5GbG9hdEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJGbG9hdFNsaWNlVmFsdWUKLQkJY2FzZSBwcmVmLlNmaXhlZDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU2ZpeGVkNjRLaW5kOgogCQkJcmV0dXJuIGNvZGVyU2ZpeGVkNjRTbGljZVZhbHVlCi0JCWNhc2UgcHJlZi5GaXhlZDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRml4ZWQ2NEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJGaXhlZDY0U2xpY2VWYWx1ZQotCQljYXNlIHByZWYuRG91YmxlS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRG91YmxlS2luZDoKIAkJCXJldHVybiBjb2RlckRvdWJsZVNsaWNlVmFsdWUKLQkJY2FzZSBwcmVmLlN0cmluZ0tpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlN0cmluZ0tpbmQ6CiAJCQkvLyBXZSBkb24ndCBoYXZlIGEgVVRGLTggdmFsaWRhdGluZyBjb2RlciBmb3IgcmVwZWF0ZWQgc3RyaW5nIGZpZWxkcy4KIAkJCS8vIFZhbHVlIGNvZGVycyBhcmUgdXNlZCBmb3IgZXh0ZW5zaW9ucyBhbmQgbWFwcy4KIAkJCS8vIEV4dGVuc2lvbnMgYXJlIG5ldmVyIHByb3RvMywgYW5kIG1hcHMgbmV2ZXIgY29udGFpbiBsaXN0cy4KIAkJCXJldHVybiBjb2RlclN0cmluZ1NsaWNlVmFsdWUKLQkJY2FzZSBwcmVmLkJ5dGVzS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuQnl0ZXNLaW5kOgogCQkJcmV0dXJuIGNvZGVyQnl0ZXNTbGljZVZhbHVlCi0JCWNhc2UgcHJlZi5NZXNzYWdlS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQ6CiAJCQlyZXR1cm4gY29kZXJNZXNzYWdlU2xpY2VWYWx1ZQotCQljYXNlIHByZWYuR3JvdXBLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5Hcm91cEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJHcm91cFNsaWNlVmFsdWUKIAkJfQotCWNhc2UgZmQuQ2FyZGluYWxpdHkoKSA9PSBwcmVmLlJlcGVhdGVkICYmIGZkLklzUGFja2VkKCk6CisJY2FzZSBmZC5DYXJkaW5hbGl0eSgpID09IHByb3RvcmVmbGVjdC5SZXBlYXRlZCAmJiBmZC5Jc1BhY2tlZCgpOgogCQlzd2l0Y2ggZmQuS2luZCgpIHsKLQkJY2FzZSBwcmVmLkJvb2xLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5Cb29sS2luZDoKIAkJCXJldHVybiBjb2RlckJvb2xQYWNrZWRTbGljZVZhbHVlCi0JCWNhc2UgcHJlZi5FbnVtS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRW51bUtpbmQ6CiAJCQlyZXR1cm4gY29kZXJFbnVtUGFja2VkU2xpY2VWYWx1ZQotCQljYXNlIHByZWYuSW50MzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5JbnQzMktpbmQ6CiAJCQlyZXR1cm4gY29kZXJJbnQzMlBhY2tlZFNsaWNlVmFsdWUKLQkJY2FzZSBwcmVmLlNpbnQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNpbnQzMktpbmQ6CiAJCQlyZXR1cm4gY29kZXJTaW50MzJQYWNrZWRTbGljZVZhbHVlCi0JCWNhc2UgcHJlZi5VaW50MzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5VaW50MzJLaW5kOgogCQkJcmV0dXJuIGNvZGVyVWludDMyUGFja2VkU2xpY2VWYWx1ZQotCQljYXNlIHByZWYuSW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5JbnQ2NEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJJbnQ2NFBhY2tlZFNsaWNlVmFsdWUKLQkJY2FzZSBwcmVmLlNpbnQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlNpbnQ2NEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJTaW50NjRQYWNrZWRTbGljZVZhbHVlCi0JCWNhc2UgcHJlZi5VaW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5VaW50NjRLaW5kOgogCQkJcmV0dXJuIGNvZGVyVWludDY0UGFja2VkU2xpY2VWYWx1ZQotCQljYXNlIHByZWYuU2ZpeGVkMzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TZml4ZWQzMktpbmQ6CiAJCQlyZXR1cm4gY29kZXJTZml4ZWQzMlBhY2tlZFNsaWNlVmFsdWUKLQkJY2FzZSBwcmVmLkZpeGVkMzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5GaXhlZDMyS2luZDoKIAkJCXJldHVybiBjb2RlckZpeGVkMzJQYWNrZWRTbGljZVZhbHVlCi0JCWNhc2UgcHJlZi5GbG9hdEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkZsb2F0S2luZDoKIAkJCXJldHVybiBjb2RlckZsb2F0UGFja2VkU2xpY2VWYWx1ZQotCQljYXNlIHByZWYuU2ZpeGVkNjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TZml4ZWQ2NEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJTZml4ZWQ2NFBhY2tlZFNsaWNlVmFsdWUKLQkJY2FzZSBwcmVmLkZpeGVkNjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5GaXhlZDY0S2luZDoKIAkJCXJldHVybiBjb2RlckZpeGVkNjRQYWNrZWRTbGljZVZhbHVlCi0JCWNhc2UgcHJlZi5Eb3VibGVLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5Eb3VibGVLaW5kOgogCQkJcmV0dXJuIGNvZGVyRG91YmxlUGFja2VkU2xpY2VWYWx1ZQogCQl9CiAJZGVmYXVsdDoKIAkJc3dpdGNoIGZkLktpbmQoKSB7CiAJCWRlZmF1bHQ6Ci0JCWNhc2UgcHJlZi5Cb29sS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuQm9vbEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJCb29sVmFsdWUKLQkJY2FzZSBwcmVmLkVudW1LaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5FbnVtS2luZDoKIAkJCXJldHVybiBjb2RlckVudW1WYWx1ZQotCQljYXNlIHByZWYuSW50MzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5JbnQzMktpbmQ6CiAJCQlyZXR1cm4gY29kZXJJbnQzMlZhbHVlCi0JCWNhc2UgcHJlZi5TaW50MzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TaW50MzJLaW5kOgogCQkJcmV0dXJuIGNvZGVyU2ludDMyVmFsdWUKLQkJY2FzZSBwcmVmLlVpbnQzMktpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlVpbnQzMktpbmQ6CiAJCQlyZXR1cm4gY29kZXJVaW50MzJWYWx1ZQotCQljYXNlIHByZWYuSW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5JbnQ2NEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJJbnQ2NFZhbHVlCi0JCWNhc2UgcHJlZi5TaW50NjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TaW50NjRLaW5kOgogCQkJcmV0dXJuIGNvZGVyU2ludDY0VmFsdWUKLQkJY2FzZSBwcmVmLlVpbnQ2NEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlVpbnQ2NEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJVaW50NjRWYWx1ZQotCQljYXNlIHByZWYuU2ZpeGVkMzJLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TZml4ZWQzMktpbmQ6CiAJCQlyZXR1cm4gY29kZXJTZml4ZWQzMlZhbHVlCi0JCWNhc2UgcHJlZi5GaXhlZDMyS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRml4ZWQzMktpbmQ6CiAJCQlyZXR1cm4gY29kZXJGaXhlZDMyVmFsdWUKLQkJY2FzZSBwcmVmLkZsb2F0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRmxvYXRLaW5kOgogCQkJcmV0dXJuIGNvZGVyRmxvYXRWYWx1ZQotCQljYXNlIHByZWYuU2ZpeGVkNjRLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5TZml4ZWQ2NEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJTZml4ZWQ2NFZhbHVlCi0JCWNhc2UgcHJlZi5GaXhlZDY0S2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuRml4ZWQ2NEtpbmQ6CiAJCQlyZXR1cm4gY29kZXJGaXhlZDY0VmFsdWUKLQkJY2FzZSBwcmVmLkRvdWJsZUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LkRvdWJsZUtpbmQ6CiAJCQlyZXR1cm4gY29kZXJEb3VibGVWYWx1ZQotCQljYXNlIHByZWYuU3RyaW5nS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZDoKIAkJCWlmIHN0cnMuRW5mb3JjZVVURjgoZmQpIHsKIAkJCQlyZXR1cm4gY29kZXJTdHJpbmdWYWx1ZVZhbGlkYXRlVVRGOAogCQkJfQogCQkJcmV0dXJuIGNvZGVyU3RyaW5nVmFsdWUKLQkJY2FzZSBwcmVmLkJ5dGVzS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuQnl0ZXNLaW5kOgogCQkJcmV0dXJuIGNvZGVyQnl0ZXNWYWx1ZQotCQljYXNlIHByZWYuTWVzc2FnZUtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VLaW5kOgogCQkJcmV0dXJuIGNvZGVyTWVzc2FnZVZhbHVlCi0JCWNhc2UgcHJlZi5Hcm91cEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKIAkJCXJldHVybiBjb2Rlckdyb3VwVmFsdWUKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX3Vuc2FmZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvZGVjX3Vuc2FmZS5nbwppbmRleCBlMTE4YWYxLi43NTc2NDJlIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb2RlY191bnNhZmUuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29kZWNfdW5zYWZlLmdvCkBAIC0yLDYgKzIsNyBAQAogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUKIC8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAorLy9nbzpidWlsZCAhcHVyZWdvICYmICFhcHBlbmdpbmUKIC8vICtidWlsZCAhcHVyZWdvLCFhcHBlbmdpbmUKIAogcGFja2FnZSBpbXBsCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb252ZXJ0LmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29udmVydC5nbwppbmRleCBhY2Q2MWJiLi4xODVlZjJlIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb252ZXJ0LmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvbnZlcnQuZ28KQEAgLTgsNyArOCw3IEBACiAJImZtdCIKIAkicmVmbGVjdCIKIAotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKICkKIAogLy8gdW53cmFwcGVyIHVud3JhcHMgdGhlIHZhbHVlIHRvIHRoZSB1bmRlcmx5aW5nIHZhbHVlLgpAQCAtMjAsMTMgKzIwLDEzIEBACiAvLyBBIENvbnZlcnRlciBjb3ZlcnRzIHRvL2Zyb20gR28gcmVmbGVjdC5WYWx1ZSB0eXBlcyBhbmQgcHJvdG9idWYgcHJvdG9yZWZsZWN0LlZhbHVlIHR5cGVzLgogdHlwZSBDb252ZXJ0ZXIgaW50ZXJmYWNlIHsKIAkvLyBQQlZhbHVlT2YgY29udmVydHMgYSByZWZsZWN0LlZhbHVlIHRvIGEgcHJvdG9yZWZsZWN0LlZhbHVlLgotCVBCVmFsdWVPZihyZWZsZWN0LlZhbHVlKSBwcmVmLlZhbHVlCisJUEJWYWx1ZU9mKHJlZmxlY3QuVmFsdWUpIHByb3RvcmVmbGVjdC5WYWx1ZQogCiAJLy8gR29WYWx1ZU9mIGNvbnZlcnRzIGEgcHJvdG9yZWZsZWN0LlZhbHVlIHRvIGEgcmVmbGVjdC5WYWx1ZS4KLQlHb1ZhbHVlT2YocHJlZi5WYWx1ZSkgcmVmbGVjdC5WYWx1ZQorCUdvVmFsdWVPZihwcm90b3JlZmxlY3QuVmFsdWUpIHJlZmxlY3QuVmFsdWUKIAogCS8vIElzVmFsaWRQQiByZXR1cm5zIHdoZXRoZXIgYSBwcm90b3JlZmxlY3QuVmFsdWUgaXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgdHlwZS4KLQlJc1ZhbGlkUEIocHJlZi5WYWx1ZSkgYm9vbAorCUlzVmFsaWRQQihwcm90b3JlZmxlY3QuVmFsdWUpIGJvb2wKIAogCS8vIElzVmFsaWRHbyByZXR1cm5zIHdoZXRoZXIgYSByZWZsZWN0LlZhbHVlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGlzIHR5cGUuCiAJSXNWYWxpZEdvKHJlZmxlY3QuVmFsdWUpIGJvb2wKQEAgLTM0LDEyICszNCwxMiBAQAogCS8vIE5ldyByZXR1cm5zIGEgbmV3IGZpZWxkIHZhbHVlLgogCS8vIEZvciBzY2FsYXJzLCBpdCByZXR1cm5zIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBmaWVsZC4KIAkvLyBGb3IgY29tcG9zaXRlIHR5cGVzLCBpdCByZXR1cm5zIGEgbmV3IG11dGFibGUgdmFsdWUuCi0JTmV3KCkgcHJlZi5WYWx1ZQorCU5ldygpIHByb3RvcmVmbGVjdC5WYWx1ZQogCiAJLy8gWmVybyByZXR1cm5zIGEgbmV3IGZpZWxkIHZhbHVlLgogCS8vIEZvciBzY2FsYXJzLCBpdCByZXR1cm5zIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBmaWVsZC4KIAkvLyBGb3IgY29tcG9zaXRlIHR5cGVzLCBpdCByZXR1cm5zIGFuIGltbXV0YWJsZSwgZW1wdHkgdmFsdWUuCi0JWmVybygpIHByZWYuVmFsdWUKKwlaZXJvKCkgcHJvdG9yZWZsZWN0LlZhbHVlCiB9CiAKIC8vIE5ld0NvbnZlcnRlciBtYXRjaGVzIGEgR28gdHlwZSB3aXRoIGEgcHJvdG9idWYgZmllbGQgYW5kIHJldHVybnMgYSBDb252ZXJ0ZXIKQEAgLTUwLDcgKzUwLDcgQEAKIC8vIFRoaXMgbWF0Y2hlciBkZWxpYmVyYXRlbHkgc3VwcG9ydHMgYSB3aWRlciByYW5nZSBvZiBHbyB0eXBlcyB0aGFuIHdoYXQKIC8vIHByb3RvYy1nZW4tZ28gaGlzdG9yaWNhbGx5IGdlbmVyYXRlZCB0byBiZSBhYmxlIHRvIGF1dG9tYXRpY2FsbHkgd3JhcCBzb21lCiAvLyB2MSBtZXNzYWdlcyBnZW5lcmF0ZWQgYnkgb3RoZXIgZm9ya3Mgb2YgcHJvdG9jLWdlbi1nby4KLWZ1bmMgTmV3Q29udmVydGVyKHQgcmVmbGVjdC5UeXBlLCBmZCBwcmVmLkZpZWxkRGVzY3JpcHRvcikgQ29udmVydGVyIHsKK2Z1bmMgTmV3Q29udmVydGVyKHQgcmVmbGVjdC5UeXBlLCBmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSBDb252ZXJ0ZXIgewogCXN3aXRjaCB7CiAJY2FzZSBmZC5Jc0xpc3QoKToKIAkJcmV0dXJuIG5ld0xpc3RDb252ZXJ0ZXIodCwgZmQpCkBAIC01OSw3ICs1OSw2IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIG5ld1Npbmd1bGFyQ29udmVydGVyKHQsIGZkKQogCX0KLQlwYW5pYyhmbXQuU3ByaW50ZigiaW52YWxpZCBHbyB0eXBlICV2IGZvciBmaWVsZCAldiIsIHQsIGZkLkZ1bGxOYW1lKCkpKQogfQogCiB2YXIgKApAQCAtNzYsNjggKzc1LDY4IEBACiApCiAKIHZhciAoCi0JYm9vbFplcm8gICAgPSBwcmVmLlZhbHVlT2ZCb29sKGZhbHNlKQotCWludDMyWmVybyAgID0gcHJlZi5WYWx1ZU9mSW50MzIoMCkKLQlpbnQ2NFplcm8gICA9IHByZWYuVmFsdWVPZkludDY0KDApCi0JdWludDMyWmVybyAgPSBwcmVmLlZhbHVlT2ZVaW50MzIoMCkKLQl1aW50NjRaZXJvICA9IHByZWYuVmFsdWVPZlVpbnQ2NCgwKQotCWZsb2F0MzJaZXJvID0gcHJlZi5WYWx1ZU9mRmxvYXQzMigwKQotCWZsb2F0NjRaZXJvID0gcHJlZi5WYWx1ZU9mRmxvYXQ2NCgwKQotCXN0cmluZ1plcm8gID0gcHJlZi5WYWx1ZU9mU3RyaW5nKCIiKQotCWJ5dGVzWmVybyAgID0gcHJlZi5WYWx1ZU9mQnl0ZXMobmlsKQorCWJvb2xaZXJvICAgID0gcHJvdG9yZWZsZWN0LlZhbHVlT2ZCb29sKGZhbHNlKQorCWludDMyWmVybyAgID0gcHJvdG9yZWZsZWN0LlZhbHVlT2ZJbnQzMigwKQorCWludDY0WmVybyAgID0gcHJvdG9yZWZsZWN0LlZhbHVlT2ZJbnQ2NCgwKQorCXVpbnQzMlplcm8gID0gcHJvdG9yZWZsZWN0LlZhbHVlT2ZVaW50MzIoMCkKKwl1aW50NjRaZXJvICA9IHByb3RvcmVmbGVjdC5WYWx1ZU9mVWludDY0KDApCisJZmxvYXQzMlplcm8gPSBwcm90b3JlZmxlY3QuVmFsdWVPZkZsb2F0MzIoMCkKKwlmbG9hdDY0WmVybyA9IHByb3RvcmVmbGVjdC5WYWx1ZU9mRmxvYXQ2NCgwKQorCXN0cmluZ1plcm8gID0gcHJvdG9yZWZsZWN0LlZhbHVlT2ZTdHJpbmcoIiIpCisJYnl0ZXNaZXJvICAgPSBwcm90b3JlZmxlY3QuVmFsdWVPZkJ5dGVzKG5pbCkKICkKIAotZnVuYyBuZXdTaW5ndWxhckNvbnZlcnRlcih0IHJlZmxlY3QuVHlwZSwgZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpIENvbnZlcnRlciB7Ci0JZGVmVmFsIDo9IGZ1bmMoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IsIHplcm8gcHJlZi5WYWx1ZSkgcHJlZi5WYWx1ZSB7Ci0JCWlmIGZkLkNhcmRpbmFsaXR5KCkgPT0gcHJlZi5SZXBlYXRlZCB7CitmdW5jIG5ld1Npbmd1bGFyQ29udmVydGVyKHQgcmVmbGVjdC5UeXBlLCBmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSBDb252ZXJ0ZXIgeworCWRlZlZhbCA6PSBmdW5jKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIHplcm8gcHJvdG9yZWZsZWN0LlZhbHVlKSBwcm90b3JlZmxlY3QuVmFsdWUgeworCQlpZiBmZC5DYXJkaW5hbGl0eSgpID09IHByb3RvcmVmbGVjdC5SZXBlYXRlZCB7CiAJCQkvLyBEZWZhdWx0IGlzbid0IGRlZmluZWQgZm9yIHJlcGVhdGVkIGZpZWxkcy4KIAkJCXJldHVybiB6ZXJvCiAJCX0KIAkJcmV0dXJuIGZkLkRlZmF1bHQoKQogCX0KIAlzd2l0Y2ggZmQuS2luZCgpIHsKLQljYXNlIHByZWYuQm9vbEtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuQm9vbEtpbmQ6CiAJCWlmIHQuS2luZCgpID09IHJlZmxlY3QuQm9vbCB7CiAJCQlyZXR1cm4gJmJvb2xDb252ZXJ0ZXJ7dCwgZGVmVmFsKGZkLCBib29sWmVybyl9CiAJCX0KLQljYXNlIHByZWYuSW50MzJLaW5kLCBwcmVmLlNpbnQzMktpbmQsIHByZWYuU2ZpeGVkMzJLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LkludDMyS2luZCwgcHJvdG9yZWZsZWN0LlNpbnQzMktpbmQsIHByb3RvcmVmbGVjdC5TZml4ZWQzMktpbmQ6CiAJCWlmIHQuS2luZCgpID09IHJlZmxlY3QuSW50MzIgewogCQkJcmV0dXJuICZpbnQzMkNvbnZlcnRlcnt0LCBkZWZWYWwoZmQsIGludDMyWmVybyl9CiAJCX0KLQljYXNlIHByZWYuSW50NjRLaW5kLCBwcmVmLlNpbnQ2NEtpbmQsIHByZWYuU2ZpeGVkNjRLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LkludDY0S2luZCwgcHJvdG9yZWZsZWN0LlNpbnQ2NEtpbmQsIHByb3RvcmVmbGVjdC5TZml4ZWQ2NEtpbmQ6CiAJCWlmIHQuS2luZCgpID09IHJlZmxlY3QuSW50NjQgewogCQkJcmV0dXJuICZpbnQ2NENvbnZlcnRlcnt0LCBkZWZWYWwoZmQsIGludDY0WmVybyl9CiAJCX0KLQljYXNlIHByZWYuVWludDMyS2luZCwgcHJlZi5GaXhlZDMyS2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5VaW50MzJLaW5kLCBwcm90b3JlZmxlY3QuRml4ZWQzMktpbmQ6CiAJCWlmIHQuS2luZCgpID09IHJlZmxlY3QuVWludDMyIHsKIAkJCXJldHVybiAmdWludDMyQ29udmVydGVye3QsIGRlZlZhbChmZCwgdWludDMyWmVybyl9CiAJCX0KLQljYXNlIHByZWYuVWludDY0S2luZCwgcHJlZi5GaXhlZDY0S2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5VaW50NjRLaW5kLCBwcm90b3JlZmxlY3QuRml4ZWQ2NEtpbmQ6CiAJCWlmIHQuS2luZCgpID09IHJlZmxlY3QuVWludDY0IHsKIAkJCXJldHVybiAmdWludDY0Q29udmVydGVye3QsIGRlZlZhbChmZCwgdWludDY0WmVybyl9CiAJCX0KLQljYXNlIHByZWYuRmxvYXRLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LkZsb2F0S2luZDoKIAkJaWYgdC5LaW5kKCkgPT0gcmVmbGVjdC5GbG9hdDMyIHsKIAkJCXJldHVybiAmZmxvYXQzMkNvbnZlcnRlcnt0LCBkZWZWYWwoZmQsIGZsb2F0MzJaZXJvKX0KIAkJfQotCWNhc2UgcHJlZi5Eb3VibGVLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0LkRvdWJsZUtpbmQ6CiAJCWlmIHQuS2luZCgpID09IHJlZmxlY3QuRmxvYXQ2NCB7CiAJCQlyZXR1cm4gJmZsb2F0NjRDb252ZXJ0ZXJ7dCwgZGVmVmFsKGZkLCBmbG9hdDY0WmVybyl9CiAJCX0KLQljYXNlIHByZWYuU3RyaW5nS2luZDoKKwljYXNlIHByb3RvcmVmbGVjdC5TdHJpbmdLaW5kOgogCQlpZiB0LktpbmQoKSA9PSByZWZsZWN0LlN0cmluZyB8fCAodC5LaW5kKCkgPT0gcmVmbGVjdC5TbGljZSAmJiB0LkVsZW0oKSA9PSBieXRlVHlwZSkgewogCQkJcmV0dXJuICZzdHJpbmdDb252ZXJ0ZXJ7dCwgZGVmVmFsKGZkLCBzdHJpbmdaZXJvKX0KIAkJfQotCWNhc2UgcHJlZi5CeXRlc0tpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuQnl0ZXNLaW5kOgogCQlpZiB0LktpbmQoKSA9PSByZWZsZWN0LlN0cmluZyB8fCAodC5LaW5kKCkgPT0gcmVmbGVjdC5TbGljZSAmJiB0LkVsZW0oKSA9PSBieXRlVHlwZSkgewogCQkJcmV0dXJuICZieXRlc0NvbnZlcnRlcnt0LCBkZWZWYWwoZmQsIGJ5dGVzWmVybyl9CiAJCX0KLQljYXNlIHByZWYuRW51bUtpbmQ6CisJY2FzZSBwcm90b3JlZmxlY3QuRW51bUtpbmQ6CiAJCS8vIEhhbmRsZSBlbnVtcywgd2hpY2ggbXVzdCBiZSBhIG5hbWVkIGludDMyIHR5cGUuCiAJCWlmIHQuS2luZCgpID09IHJlZmxlY3QuSW50MzIgewogCQkJcmV0dXJuIG5ld0VudW1Db252ZXJ0ZXIodCwgZmQpCiAJCX0KLQljYXNlIHByZWYuTWVzc2FnZUtpbmQsIHByZWYuR3JvdXBLaW5kOgorCWNhc2UgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VLaW5kLCBwcm90b3JlZmxlY3QuR3JvdXBLaW5kOgogCQlyZXR1cm4gbmV3TWVzc2FnZUNvbnZlcnRlcih0KQogCX0KIAlwYW5pYyhmbXQuU3ByaW50ZigiaW52YWxpZCBHbyB0eXBlICV2IGZvciBmaWVsZCAldiIsIHQsIGZkLkZ1bGxOYW1lKCkpKQpAQCAtMTQ1LDE4NCArMTQ0LDE4NCBAQAogCiB0eXBlIGJvb2xDb252ZXJ0ZXIgc3RydWN0IHsKIAlnb1R5cGUgcmVmbGVjdC5UeXBlCi0JZGVmICAgIHByZWYuVmFsdWUKKwlkZWYgICAgcHJvdG9yZWZsZWN0LlZhbHVlCiB9CiAKLWZ1bmMgKGMgKmJvb2xDb252ZXJ0ZXIpIFBCVmFsdWVPZih2IHJlZmxlY3QuVmFsdWUpIHByZWYuVmFsdWUgeworZnVuYyAoYyAqYm9vbENvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlpZiB2LlR5cGUoKSAhPSBjLmdvVHlwZSB7CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCAldiIsIHYuVHlwZSgpLCBjLmdvVHlwZSkpCiAJfQotCXJldHVybiBwcmVmLlZhbHVlT2ZCb29sKHYuQm9vbCgpKQorCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkJvb2wodi5Cb29sKCkpCiB9Ci1mdW5jIChjICpib29sQ29udmVydGVyKSBHb1ZhbHVlT2YodiBwcmVmLlZhbHVlKSByZWZsZWN0LlZhbHVlIHsKK2Z1bmMgKGMgKmJvb2xDb252ZXJ0ZXIpIEdvVmFsdWVPZih2IHByb3RvcmVmbGVjdC5WYWx1ZSkgcmVmbGVjdC5WYWx1ZSB7CiAJcmV0dXJuIHJlZmxlY3QuVmFsdWVPZih2LkJvb2woKSkuQ29udmVydChjLmdvVHlwZSkKIH0KLWZ1bmMgKGMgKmJvb2xDb252ZXJ0ZXIpIElzVmFsaWRQQih2IHByZWYuVmFsdWUpIGJvb2wgeworZnVuYyAoYyAqYm9vbENvbnZlcnRlcikgSXNWYWxpZFBCKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sIHsKIAlfLCBvayA6PSB2LkludGVyZmFjZSgpLihib29sKQogCXJldHVybiBvawogfQogZnVuYyAoYyAqYm9vbENvbnZlcnRlcikgSXNWYWxpZEdvKHYgcmVmbGVjdC5WYWx1ZSkgYm9vbCB7CiAJcmV0dXJuIHYuSXNWYWxpZCgpICYmIHYuVHlwZSgpID09IGMuZ29UeXBlCiB9Ci1mdW5jIChjICpib29sQ29udmVydGVyKSBOZXcoKSBwcmVmLlZhbHVlICB7IHJldHVybiBjLmRlZiB9Ci1mdW5jIChjICpib29sQ29udmVydGVyKSBaZXJvKCkgcHJlZi5WYWx1ZSB7IHJldHVybiBjLmRlZiB9CitmdW5jIChjICpib29sQ29udmVydGVyKSBOZXcoKSBwcm90b3JlZmxlY3QuVmFsdWUgIHsgcmV0dXJuIGMuZGVmIH0KK2Z1bmMgKGMgKmJvb2xDb252ZXJ0ZXIpIFplcm8oKSBwcm90b3JlZmxlY3QuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQogCiB0eXBlIGludDMyQ29udmVydGVyIHN0cnVjdCB7CiAJZ29UeXBlIHJlZmxlY3QuVHlwZQotCWRlZiAgICBwcmVmLlZhbHVlCisJZGVmICAgIHByb3RvcmVmbGVjdC5WYWx1ZQogfQogCi1mdW5jIChjICppbnQzMkNvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJlZi5WYWx1ZSB7CitmdW5jIChjICppbnQzMkNvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlpZiB2LlR5cGUoKSAhPSBjLmdvVHlwZSB7CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCAldiIsIHYuVHlwZSgpLCBjLmdvVHlwZSkpCiAJfQotCXJldHVybiBwcmVmLlZhbHVlT2ZJbnQzMihpbnQzMih2LkludCgpKSkKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZJbnQzMihpbnQzMih2LkludCgpKSkKIH0KLWZ1bmMgKGMgKmludDMyQ29udmVydGVyKSBHb1ZhbHVlT2YodiBwcmVmLlZhbHVlKSByZWZsZWN0LlZhbHVlIHsKK2Z1bmMgKGMgKmludDMyQ29udmVydGVyKSBHb1ZhbHVlT2YodiBwcm90b3JlZmxlY3QuVmFsdWUpIHJlZmxlY3QuVmFsdWUgewogCXJldHVybiByZWZsZWN0LlZhbHVlT2YoaW50MzIodi5JbnQoKSkpLkNvbnZlcnQoYy5nb1R5cGUpCiB9Ci1mdW5jIChjICppbnQzMkNvbnZlcnRlcikgSXNWYWxpZFBCKHYgcHJlZi5WYWx1ZSkgYm9vbCB7CitmdW5jIChjICppbnQzMkNvbnZlcnRlcikgSXNWYWxpZFBCKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sIHsKIAlfLCBvayA6PSB2LkludGVyZmFjZSgpLihpbnQzMikKIAlyZXR1cm4gb2sKIH0KIGZ1bmMgKGMgKmludDMyQ29udmVydGVyKSBJc1ZhbGlkR28odiByZWZsZWN0LlZhbHVlKSBib29sIHsKIAlyZXR1cm4gdi5Jc1ZhbGlkKCkgJiYgdi5UeXBlKCkgPT0gYy5nb1R5cGUKIH0KLWZ1bmMgKGMgKmludDMyQ29udmVydGVyKSBOZXcoKSBwcmVmLlZhbHVlICB7IHJldHVybiBjLmRlZiB9Ci1mdW5jIChjICppbnQzMkNvbnZlcnRlcikgWmVybygpIHByZWYuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQorZnVuYyAoYyAqaW50MzJDb252ZXJ0ZXIpIE5ldygpIHByb3RvcmVmbGVjdC5WYWx1ZSAgeyByZXR1cm4gYy5kZWYgfQorZnVuYyAoYyAqaW50MzJDb252ZXJ0ZXIpIFplcm8oKSBwcm90b3JlZmxlY3QuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQogCiB0eXBlIGludDY0Q29udmVydGVyIHN0cnVjdCB7CiAJZ29UeXBlIHJlZmxlY3QuVHlwZQotCWRlZiAgICBwcmVmLlZhbHVlCisJZGVmICAgIHByb3RvcmVmbGVjdC5WYWx1ZQogfQogCi1mdW5jIChjICppbnQ2NENvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJlZi5WYWx1ZSB7CitmdW5jIChjICppbnQ2NENvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlpZiB2LlR5cGUoKSAhPSBjLmdvVHlwZSB7CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCAldiIsIHYuVHlwZSgpLCBjLmdvVHlwZSkpCiAJfQotCXJldHVybiBwcmVmLlZhbHVlT2ZJbnQ2NChpbnQ2NCh2LkludCgpKSkKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZJbnQ2NChpbnQ2NCh2LkludCgpKSkKIH0KLWZ1bmMgKGMgKmludDY0Q29udmVydGVyKSBHb1ZhbHVlT2YodiBwcmVmLlZhbHVlKSByZWZsZWN0LlZhbHVlIHsKK2Z1bmMgKGMgKmludDY0Q29udmVydGVyKSBHb1ZhbHVlT2YodiBwcm90b3JlZmxlY3QuVmFsdWUpIHJlZmxlY3QuVmFsdWUgewogCXJldHVybiByZWZsZWN0LlZhbHVlT2YoaW50NjQodi5JbnQoKSkpLkNvbnZlcnQoYy5nb1R5cGUpCiB9Ci1mdW5jIChjICppbnQ2NENvbnZlcnRlcikgSXNWYWxpZFBCKHYgcHJlZi5WYWx1ZSkgYm9vbCB7CitmdW5jIChjICppbnQ2NENvbnZlcnRlcikgSXNWYWxpZFBCKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sIHsKIAlfLCBvayA6PSB2LkludGVyZmFjZSgpLihpbnQ2NCkKIAlyZXR1cm4gb2sKIH0KIGZ1bmMgKGMgKmludDY0Q29udmVydGVyKSBJc1ZhbGlkR28odiByZWZsZWN0LlZhbHVlKSBib29sIHsKIAlyZXR1cm4gdi5Jc1ZhbGlkKCkgJiYgdi5UeXBlKCkgPT0gYy5nb1R5cGUKIH0KLWZ1bmMgKGMgKmludDY0Q29udmVydGVyKSBOZXcoKSBwcmVmLlZhbHVlICB7IHJldHVybiBjLmRlZiB9Ci1mdW5jIChjICppbnQ2NENvbnZlcnRlcikgWmVybygpIHByZWYuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQorZnVuYyAoYyAqaW50NjRDb252ZXJ0ZXIpIE5ldygpIHByb3RvcmVmbGVjdC5WYWx1ZSAgeyByZXR1cm4gYy5kZWYgfQorZnVuYyAoYyAqaW50NjRDb252ZXJ0ZXIpIFplcm8oKSBwcm90b3JlZmxlY3QuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQogCiB0eXBlIHVpbnQzMkNvbnZlcnRlciBzdHJ1Y3QgewogCWdvVHlwZSByZWZsZWN0LlR5cGUKLQlkZWYgICAgcHJlZi5WYWx1ZQorCWRlZiAgICBwcm90b3JlZmxlY3QuVmFsdWUKIH0KIAotZnVuYyAoYyAqdWludDMyQ29udmVydGVyKSBQQlZhbHVlT2YodiByZWZsZWN0LlZhbHVlKSBwcmVmLlZhbHVlIHsKK2Z1bmMgKGMgKnVpbnQzMkNvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlpZiB2LlR5cGUoKSAhPSBjLmdvVHlwZSB7CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCAldiIsIHYuVHlwZSgpLCBjLmdvVHlwZSkpCiAJfQotCXJldHVybiBwcmVmLlZhbHVlT2ZVaW50MzIodWludDMyKHYuVWludCgpKSkKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZVaW50MzIodWludDMyKHYuVWludCgpKSkKIH0KLWZ1bmMgKGMgKnVpbnQzMkNvbnZlcnRlcikgR29WYWx1ZU9mKHYgcHJlZi5WYWx1ZSkgcmVmbGVjdC5WYWx1ZSB7CitmdW5jIChjICp1aW50MzJDb252ZXJ0ZXIpIEdvVmFsdWVPZih2IHByb3RvcmVmbGVjdC5WYWx1ZSkgcmVmbGVjdC5WYWx1ZSB7CiAJcmV0dXJuIHJlZmxlY3QuVmFsdWVPZih1aW50MzIodi5VaW50KCkpKS5Db252ZXJ0KGMuZ29UeXBlKQogfQotZnVuYyAoYyAqdWludDMyQ29udmVydGVyKSBJc1ZhbGlkUEIodiBwcmVmLlZhbHVlKSBib29sIHsKK2Z1bmMgKGMgKnVpbnQzMkNvbnZlcnRlcikgSXNWYWxpZFBCKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sIHsKIAlfLCBvayA6PSB2LkludGVyZmFjZSgpLih1aW50MzIpCiAJcmV0dXJuIG9rCiB9CiBmdW5jIChjICp1aW50MzJDb252ZXJ0ZXIpIElzVmFsaWRHbyh2IHJlZmxlY3QuVmFsdWUpIGJvb2wgewogCXJldHVybiB2LklzVmFsaWQoKSAmJiB2LlR5cGUoKSA9PSBjLmdvVHlwZQogfQotZnVuYyAoYyAqdWludDMyQ29udmVydGVyKSBOZXcoKSBwcmVmLlZhbHVlICB7IHJldHVybiBjLmRlZiB9Ci1mdW5jIChjICp1aW50MzJDb252ZXJ0ZXIpIFplcm8oKSBwcmVmLlZhbHVlIHsgcmV0dXJuIGMuZGVmIH0KK2Z1bmMgKGMgKnVpbnQzMkNvbnZlcnRlcikgTmV3KCkgcHJvdG9yZWZsZWN0LlZhbHVlICB7IHJldHVybiBjLmRlZiB9CitmdW5jIChjICp1aW50MzJDb252ZXJ0ZXIpIFplcm8oKSBwcm90b3JlZmxlY3QuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQogCiB0eXBlIHVpbnQ2NENvbnZlcnRlciBzdHJ1Y3QgewogCWdvVHlwZSByZWZsZWN0LlR5cGUKLQlkZWYgICAgcHJlZi5WYWx1ZQorCWRlZiAgICBwcm90b3JlZmxlY3QuVmFsdWUKIH0KIAotZnVuYyAoYyAqdWludDY0Q29udmVydGVyKSBQQlZhbHVlT2YodiByZWZsZWN0LlZhbHVlKSBwcmVmLlZhbHVlIHsKK2Z1bmMgKGMgKnVpbnQ2NENvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlpZiB2LlR5cGUoKSAhPSBjLmdvVHlwZSB7CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCAldiIsIHYuVHlwZSgpLCBjLmdvVHlwZSkpCiAJfQotCXJldHVybiBwcmVmLlZhbHVlT2ZVaW50NjQodWludDY0KHYuVWludCgpKSkKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZVaW50NjQodWludDY0KHYuVWludCgpKSkKIH0KLWZ1bmMgKGMgKnVpbnQ2NENvbnZlcnRlcikgR29WYWx1ZU9mKHYgcHJlZi5WYWx1ZSkgcmVmbGVjdC5WYWx1ZSB7CitmdW5jIChjICp1aW50NjRDb252ZXJ0ZXIpIEdvVmFsdWVPZih2IHByb3RvcmVmbGVjdC5WYWx1ZSkgcmVmbGVjdC5WYWx1ZSB7CiAJcmV0dXJuIHJlZmxlY3QuVmFsdWVPZih1aW50NjQodi5VaW50KCkpKS5Db252ZXJ0KGMuZ29UeXBlKQogfQotZnVuYyAoYyAqdWludDY0Q29udmVydGVyKSBJc1ZhbGlkUEIodiBwcmVmLlZhbHVlKSBib29sIHsKK2Z1bmMgKGMgKnVpbnQ2NENvbnZlcnRlcikgSXNWYWxpZFBCKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sIHsKIAlfLCBvayA6PSB2LkludGVyZmFjZSgpLih1aW50NjQpCiAJcmV0dXJuIG9rCiB9CiBmdW5jIChjICp1aW50NjRDb252ZXJ0ZXIpIElzVmFsaWRHbyh2IHJlZmxlY3QuVmFsdWUpIGJvb2wgewogCXJldHVybiB2LklzVmFsaWQoKSAmJiB2LlR5cGUoKSA9PSBjLmdvVHlwZQogfQotZnVuYyAoYyAqdWludDY0Q29udmVydGVyKSBOZXcoKSBwcmVmLlZhbHVlICB7IHJldHVybiBjLmRlZiB9Ci1mdW5jIChjICp1aW50NjRDb252ZXJ0ZXIpIFplcm8oKSBwcmVmLlZhbHVlIHsgcmV0dXJuIGMuZGVmIH0KK2Z1bmMgKGMgKnVpbnQ2NENvbnZlcnRlcikgTmV3KCkgcHJvdG9yZWZsZWN0LlZhbHVlICB7IHJldHVybiBjLmRlZiB9CitmdW5jIChjICp1aW50NjRDb252ZXJ0ZXIpIFplcm8oKSBwcm90b3JlZmxlY3QuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQogCiB0eXBlIGZsb2F0MzJDb252ZXJ0ZXIgc3RydWN0IHsKIAlnb1R5cGUgcmVmbGVjdC5UeXBlCi0JZGVmICAgIHByZWYuVmFsdWUKKwlkZWYgICAgcHJvdG9yZWZsZWN0LlZhbHVlCiB9CiAKLWZ1bmMgKGMgKmZsb2F0MzJDb252ZXJ0ZXIpIFBCVmFsdWVPZih2IHJlZmxlY3QuVmFsdWUpIHByZWYuVmFsdWUgeworZnVuYyAoYyAqZmxvYXQzMkNvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlpZiB2LlR5cGUoKSAhPSBjLmdvVHlwZSB7CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCAldiIsIHYuVHlwZSgpLCBjLmdvVHlwZSkpCiAJfQotCXJldHVybiBwcmVmLlZhbHVlT2ZGbG9hdDMyKGZsb2F0MzIodi5GbG9hdCgpKSkKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZGbG9hdDMyKGZsb2F0MzIodi5GbG9hdCgpKSkKIH0KLWZ1bmMgKGMgKmZsb2F0MzJDb252ZXJ0ZXIpIEdvVmFsdWVPZih2IHByZWYuVmFsdWUpIHJlZmxlY3QuVmFsdWUgeworZnVuYyAoYyAqZmxvYXQzMkNvbnZlcnRlcikgR29WYWx1ZU9mKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSByZWZsZWN0LlZhbHVlIHsKIAlyZXR1cm4gcmVmbGVjdC5WYWx1ZU9mKGZsb2F0MzIodi5GbG9hdCgpKSkuQ29udmVydChjLmdvVHlwZSkKIH0KLWZ1bmMgKGMgKmZsb2F0MzJDb252ZXJ0ZXIpIElzVmFsaWRQQih2IHByZWYuVmFsdWUpIGJvb2wgeworZnVuYyAoYyAqZmxvYXQzMkNvbnZlcnRlcikgSXNWYWxpZFBCKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sIHsKIAlfLCBvayA6PSB2LkludGVyZmFjZSgpLihmbG9hdDMyKQogCXJldHVybiBvawogfQogZnVuYyAoYyAqZmxvYXQzMkNvbnZlcnRlcikgSXNWYWxpZEdvKHYgcmVmbGVjdC5WYWx1ZSkgYm9vbCB7CiAJcmV0dXJuIHYuSXNWYWxpZCgpICYmIHYuVHlwZSgpID09IGMuZ29UeXBlCiB9Ci1mdW5jIChjICpmbG9hdDMyQ29udmVydGVyKSBOZXcoKSBwcmVmLlZhbHVlICB7IHJldHVybiBjLmRlZiB9Ci1mdW5jIChjICpmbG9hdDMyQ29udmVydGVyKSBaZXJvKCkgcHJlZi5WYWx1ZSB7IHJldHVybiBjLmRlZiB9CitmdW5jIChjICpmbG9hdDMyQ29udmVydGVyKSBOZXcoKSBwcm90b3JlZmxlY3QuVmFsdWUgIHsgcmV0dXJuIGMuZGVmIH0KK2Z1bmMgKGMgKmZsb2F0MzJDb252ZXJ0ZXIpIFplcm8oKSBwcm90b3JlZmxlY3QuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQogCiB0eXBlIGZsb2F0NjRDb252ZXJ0ZXIgc3RydWN0IHsKIAlnb1R5cGUgcmVmbGVjdC5UeXBlCi0JZGVmICAgIHByZWYuVmFsdWUKKwlkZWYgICAgcHJvdG9yZWZsZWN0LlZhbHVlCiB9CiAKLWZ1bmMgKGMgKmZsb2F0NjRDb252ZXJ0ZXIpIFBCVmFsdWVPZih2IHJlZmxlY3QuVmFsdWUpIHByZWYuVmFsdWUgeworZnVuYyAoYyAqZmxvYXQ2NENvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlpZiB2LlR5cGUoKSAhPSBjLmdvVHlwZSB7CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCAldiIsIHYuVHlwZSgpLCBjLmdvVHlwZSkpCiAJfQotCXJldHVybiBwcmVmLlZhbHVlT2ZGbG9hdDY0KGZsb2F0NjQodi5GbG9hdCgpKSkKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZGbG9hdDY0KGZsb2F0NjQodi5GbG9hdCgpKSkKIH0KLWZ1bmMgKGMgKmZsb2F0NjRDb252ZXJ0ZXIpIEdvVmFsdWVPZih2IHByZWYuVmFsdWUpIHJlZmxlY3QuVmFsdWUgeworZnVuYyAoYyAqZmxvYXQ2NENvbnZlcnRlcikgR29WYWx1ZU9mKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSByZWZsZWN0LlZhbHVlIHsKIAlyZXR1cm4gcmVmbGVjdC5WYWx1ZU9mKGZsb2F0NjQodi5GbG9hdCgpKSkuQ29udmVydChjLmdvVHlwZSkKIH0KLWZ1bmMgKGMgKmZsb2F0NjRDb252ZXJ0ZXIpIElzVmFsaWRQQih2IHByZWYuVmFsdWUpIGJvb2wgeworZnVuYyAoYyAqZmxvYXQ2NENvbnZlcnRlcikgSXNWYWxpZFBCKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sIHsKIAlfLCBvayA6PSB2LkludGVyZmFjZSgpLihmbG9hdDY0KQogCXJldHVybiBvawogfQogZnVuYyAoYyAqZmxvYXQ2NENvbnZlcnRlcikgSXNWYWxpZEdvKHYgcmVmbGVjdC5WYWx1ZSkgYm9vbCB7CiAJcmV0dXJuIHYuSXNWYWxpZCgpICYmIHYuVHlwZSgpID09IGMuZ29UeXBlCiB9Ci1mdW5jIChjICpmbG9hdDY0Q29udmVydGVyKSBOZXcoKSBwcmVmLlZhbHVlICB7IHJldHVybiBjLmRlZiB9Ci1mdW5jIChjICpmbG9hdDY0Q29udmVydGVyKSBaZXJvKCkgcHJlZi5WYWx1ZSB7IHJldHVybiBjLmRlZiB9CitmdW5jIChjICpmbG9hdDY0Q29udmVydGVyKSBOZXcoKSBwcm90b3JlZmxlY3QuVmFsdWUgIHsgcmV0dXJuIGMuZGVmIH0KK2Z1bmMgKGMgKmZsb2F0NjRDb252ZXJ0ZXIpIFplcm8oKSBwcm90b3JlZmxlY3QuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQogCiB0eXBlIHN0cmluZ0NvbnZlcnRlciBzdHJ1Y3QgewogCWdvVHlwZSByZWZsZWN0LlR5cGUKLQlkZWYgICAgcHJlZi5WYWx1ZQorCWRlZiAgICBwcm90b3JlZmxlY3QuVmFsdWUKIH0KIAotZnVuYyAoYyAqc3RyaW5nQ29udmVydGVyKSBQQlZhbHVlT2YodiByZWZsZWN0LlZhbHVlKSBwcmVmLlZhbHVlIHsKK2Z1bmMgKGMgKnN0cmluZ0NvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlpZiB2LlR5cGUoKSAhPSBjLmdvVHlwZSB7CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCAldiIsIHYuVHlwZSgpLCBjLmdvVHlwZSkpCiAJfQotCXJldHVybiBwcmVmLlZhbHVlT2ZTdHJpbmcodi5Db252ZXJ0KHN0cmluZ1R5cGUpLlN0cmluZygpKQorCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZlN0cmluZyh2LkNvbnZlcnQoc3RyaW5nVHlwZSkuU3RyaW5nKCkpCiB9Ci1mdW5jIChjICpzdHJpbmdDb252ZXJ0ZXIpIEdvVmFsdWVPZih2IHByZWYuVmFsdWUpIHJlZmxlY3QuVmFsdWUgeworZnVuYyAoYyAqc3RyaW5nQ29udmVydGVyKSBHb1ZhbHVlT2YodiBwcm90b3JlZmxlY3QuVmFsdWUpIHJlZmxlY3QuVmFsdWUgewogCS8vIHByZWYuVmFsdWUuU3RyaW5nIG5ldmVyIHBhbmljcywgc28gd2UgZ28gdGhyb3VnaCBhbiBpbnRlcmZhY2UKIAkvLyBjb252ZXJzaW9uIGhlcmUgdG8gY2hlY2sgdGhlIHR5cGUuCiAJcyA6PSB2LkludGVyZmFjZSgpLihzdHJpbmcpCkBAIC0zMzEsNzEgKzMzMCw3MSBAQAogCX0KIAlyZXR1cm4gcmVmbGVjdC5WYWx1ZU9mKHMpLkNvbnZlcnQoYy5nb1R5cGUpCiB9Ci1mdW5jIChjICpzdHJpbmdDb252ZXJ0ZXIpIElzVmFsaWRQQih2IHByZWYuVmFsdWUpIGJvb2wgeworZnVuYyAoYyAqc3RyaW5nQ29udmVydGVyKSBJc1ZhbGlkUEIodiBwcm90b3JlZmxlY3QuVmFsdWUpIGJvb2wgewogCV8sIG9rIDo9IHYuSW50ZXJmYWNlKCkuKHN0cmluZykKIAlyZXR1cm4gb2sKIH0KIGZ1bmMgKGMgKnN0cmluZ0NvbnZlcnRlcikgSXNWYWxpZEdvKHYgcmVmbGVjdC5WYWx1ZSkgYm9vbCB7CiAJcmV0dXJuIHYuSXNWYWxpZCgpICYmIHYuVHlwZSgpID09IGMuZ29UeXBlCiB9Ci1mdW5jIChjICpzdHJpbmdDb252ZXJ0ZXIpIE5ldygpIHByZWYuVmFsdWUgIHsgcmV0dXJuIGMuZGVmIH0KLWZ1bmMgKGMgKnN0cmluZ0NvbnZlcnRlcikgWmVybygpIHByZWYuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQorZnVuYyAoYyAqc3RyaW5nQ29udmVydGVyKSBOZXcoKSBwcm90b3JlZmxlY3QuVmFsdWUgIHsgcmV0dXJuIGMuZGVmIH0KK2Z1bmMgKGMgKnN0cmluZ0NvbnZlcnRlcikgWmVybygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7IHJldHVybiBjLmRlZiB9CiAKIHR5cGUgYnl0ZXNDb252ZXJ0ZXIgc3RydWN0IHsKIAlnb1R5cGUgcmVmbGVjdC5UeXBlCi0JZGVmICAgIHByZWYuVmFsdWUKKwlkZWYgICAgcHJvdG9yZWZsZWN0LlZhbHVlCiB9CiAKLWZ1bmMgKGMgKmJ5dGVzQ29udmVydGVyKSBQQlZhbHVlT2YodiByZWZsZWN0LlZhbHVlKSBwcmVmLlZhbHVlIHsKK2Z1bmMgKGMgKmJ5dGVzQ29udmVydGVyKSBQQlZhbHVlT2YodiByZWZsZWN0LlZhbHVlKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCWlmIHYuVHlwZSgpICE9IGMuZ29UeXBlIHsKIAkJcGFuaWMoZm10LlNwcmludGYoImludmFsaWQgdHlwZTogZ290ICV2LCB3YW50ICV2Iiwgdi5UeXBlKCksIGMuZ29UeXBlKSkKIAl9CiAJaWYgYy5nb1R5cGUuS2luZCgpID09IHJlZmxlY3QuU3RyaW5nICYmIHYuTGVuKCkgPT0gMCB7Ci0JCXJldHVybiBwcmVmLlZhbHVlT2ZCeXRlcyhuaWwpIC8vIGVuc3VyZSBlbXB0eSBzdHJpbmcgaXMgW11ieXRlKG5pbCkKKwkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mQnl0ZXMobmlsKSAvLyBlbnN1cmUgZW1wdHkgc3RyaW5nIGlzIFtdYnl0ZShuaWwpCiAJfQotCXJldHVybiBwcmVmLlZhbHVlT2ZCeXRlcyh2LkNvbnZlcnQoYnl0ZXNUeXBlKS5CeXRlcygpKQorCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkJ5dGVzKHYuQ29udmVydChieXRlc1R5cGUpLkJ5dGVzKCkpCiB9Ci1mdW5jIChjICpieXRlc0NvbnZlcnRlcikgR29WYWx1ZU9mKHYgcHJlZi5WYWx1ZSkgcmVmbGVjdC5WYWx1ZSB7CitmdW5jIChjICpieXRlc0NvbnZlcnRlcikgR29WYWx1ZU9mKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSByZWZsZWN0LlZhbHVlIHsKIAlyZXR1cm4gcmVmbGVjdC5WYWx1ZU9mKHYuQnl0ZXMoKSkuQ29udmVydChjLmdvVHlwZSkKIH0KLWZ1bmMgKGMgKmJ5dGVzQ29udmVydGVyKSBJc1ZhbGlkUEIodiBwcmVmLlZhbHVlKSBib29sIHsKK2Z1bmMgKGMgKmJ5dGVzQ29udmVydGVyKSBJc1ZhbGlkUEIodiBwcm90b3JlZmxlY3QuVmFsdWUpIGJvb2wgewogCV8sIG9rIDo9IHYuSW50ZXJmYWNlKCkuKFtdYnl0ZSkKIAlyZXR1cm4gb2sKIH0KIGZ1bmMgKGMgKmJ5dGVzQ29udmVydGVyKSBJc1ZhbGlkR28odiByZWZsZWN0LlZhbHVlKSBib29sIHsKIAlyZXR1cm4gdi5Jc1ZhbGlkKCkgJiYgdi5UeXBlKCkgPT0gYy5nb1R5cGUKIH0KLWZ1bmMgKGMgKmJ5dGVzQ29udmVydGVyKSBOZXcoKSBwcmVmLlZhbHVlICB7IHJldHVybiBjLmRlZiB9Ci1mdW5jIChjICpieXRlc0NvbnZlcnRlcikgWmVybygpIHByZWYuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQorZnVuYyAoYyAqYnl0ZXNDb252ZXJ0ZXIpIE5ldygpIHByb3RvcmVmbGVjdC5WYWx1ZSAgeyByZXR1cm4gYy5kZWYgfQorZnVuYyAoYyAqYnl0ZXNDb252ZXJ0ZXIpIFplcm8oKSBwcm90b3JlZmxlY3QuVmFsdWUgeyByZXR1cm4gYy5kZWYgfQogCiB0eXBlIGVudW1Db252ZXJ0ZXIgc3RydWN0IHsKIAlnb1R5cGUgcmVmbGVjdC5UeXBlCi0JZGVmICAgIHByZWYuVmFsdWUKKwlkZWYgICAgcHJvdG9yZWZsZWN0LlZhbHVlCiB9CiAKLWZ1bmMgbmV3RW51bUNvbnZlcnRlcihnb1R5cGUgcmVmbGVjdC5UeXBlLCBmZCBwcmVmLkZpZWxkRGVzY3JpcHRvcikgQ29udmVydGVyIHsKLQl2YXIgZGVmIHByZWYuVmFsdWUKLQlpZiBmZC5DYXJkaW5hbGl0eSgpID09IHByZWYuUmVwZWF0ZWQgewotCQlkZWYgPSBwcmVmLlZhbHVlT2ZFbnVtKGZkLkVudW0oKS5WYWx1ZXMoKS5HZXQoMCkuTnVtYmVyKCkpCitmdW5jIG5ld0VudW1Db252ZXJ0ZXIoZ29UeXBlIHJlZmxlY3QuVHlwZSwgZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgQ29udmVydGVyIHsKKwl2YXIgZGVmIHByb3RvcmVmbGVjdC5WYWx1ZQorCWlmIGZkLkNhcmRpbmFsaXR5KCkgPT0gcHJvdG9yZWZsZWN0LlJlcGVhdGVkIHsKKwkJZGVmID0gcHJvdG9yZWZsZWN0LlZhbHVlT2ZFbnVtKGZkLkVudW0oKS5WYWx1ZXMoKS5HZXQoMCkuTnVtYmVyKCkpCiAJfSBlbHNlIHsKIAkJZGVmID0gZmQuRGVmYXVsdCgpCiAJfQogCXJldHVybiAmZW51bUNvbnZlcnRlcntnb1R5cGUsIGRlZn0KIH0KIAotZnVuYyAoYyAqZW51bUNvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJlZi5WYWx1ZSB7CitmdW5jIChjICplbnVtQ29udmVydGVyKSBQQlZhbHVlT2YodiByZWZsZWN0LlZhbHVlKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCWlmIHYuVHlwZSgpICE9IGMuZ29UeXBlIHsKIAkJcGFuaWMoZm10LlNwcmludGYoImludmFsaWQgdHlwZTogZ290ICV2LCB3YW50ICV2Iiwgdi5UeXBlKCksIGMuZ29UeXBlKSkKIAl9Ci0JcmV0dXJuIHByZWYuVmFsdWVPZkVudW0ocHJlZi5FbnVtTnVtYmVyKHYuSW50KCkpKQorCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkVudW0ocHJvdG9yZWZsZWN0LkVudW1OdW1iZXIodi5JbnQoKSkpCiB9CiAKLWZ1bmMgKGMgKmVudW1Db252ZXJ0ZXIpIEdvVmFsdWVPZih2IHByZWYuVmFsdWUpIHJlZmxlY3QuVmFsdWUgeworZnVuYyAoYyAqZW51bUNvbnZlcnRlcikgR29WYWx1ZU9mKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSByZWZsZWN0LlZhbHVlIHsKIAlyZXR1cm4gcmVmbGVjdC5WYWx1ZU9mKHYuRW51bSgpKS5Db252ZXJ0KGMuZ29UeXBlKQogfQogCi1mdW5jIChjICplbnVtQ29udmVydGVyKSBJc1ZhbGlkUEIodiBwcmVmLlZhbHVlKSBib29sIHsKLQlfLCBvayA6PSB2LkludGVyZmFjZSgpLihwcmVmLkVudW1OdW1iZXIpCitmdW5jIChjICplbnVtQ29udmVydGVyKSBJc1ZhbGlkUEIodiBwcm90b3JlZmxlY3QuVmFsdWUpIGJvb2wgeworCV8sIG9rIDo9IHYuSW50ZXJmYWNlKCkuKHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKQogCXJldHVybiBvawogfQogCkBAIC00MDMsMTEgKzQwMiwxMSBAQAogCXJldHVybiB2LklzVmFsaWQoKSAmJiB2LlR5cGUoKSA9PSBjLmdvVHlwZQogfQogCi1mdW5jIChjICplbnVtQ29udmVydGVyKSBOZXcoKSBwcmVmLlZhbHVlIHsKK2Z1bmMgKGMgKmVudW1Db252ZXJ0ZXIpIE5ldygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJcmV0dXJuIGMuZGVmCiB9CiAKLWZ1bmMgKGMgKmVudW1Db252ZXJ0ZXIpIFplcm8oKSBwcmVmLlZhbHVlIHsKK2Z1bmMgKGMgKmVudW1Db252ZXJ0ZXIpIFplcm8oKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCXJldHVybiBjLmRlZgogfQogCkBAIC00MTksNyArNDE4LDcgQEAKIAlyZXR1cm4gJm1lc3NhZ2VDb252ZXJ0ZXJ7Z29UeXBlfQogfQogCi1mdW5jIChjICptZXNzYWdlQ29udmVydGVyKSBQQlZhbHVlT2YodiByZWZsZWN0LlZhbHVlKSBwcmVmLlZhbHVlIHsKK2Z1bmMgKGMgKm1lc3NhZ2VDb252ZXJ0ZXIpIFBCVmFsdWVPZih2IHJlZmxlY3QuVmFsdWUpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJaWYgdi5UeXBlKCkgIT0gYy5nb1R5cGUgewogCQlwYW5pYyhmbXQuU3ByaW50ZigiaW52YWxpZCB0eXBlOiBnb3QgJXYsIHdhbnQgJXYiLCB2LlR5cGUoKSwgYy5nb1R5cGUpKQogCX0KQEAgLTQzMCwxMyArNDI5LDEzIEBACiAJCQl2ID0gcmVmbGVjdC5aZXJvKHJlZmxlY3QuUHRyVG8odi5UeXBlKCkpKQogCQl9CiAJfQotCWlmIG0sIG9rIDo9IHYuSW50ZXJmYWNlKCkuKHByZWYuUHJvdG9NZXNzYWdlKTsgb2sgewotCQlyZXR1cm4gcHJlZi5WYWx1ZU9mTWVzc2FnZShtLlByb3RvUmVmbGVjdCgpKQorCWlmIG0sIG9rIDo9IHYuSW50ZXJmYWNlKCkuKHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UpOyBvayB7CisJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZk1lc3NhZ2UobS5Qcm90b1JlZmxlY3QoKSkKIAl9Ci0JcmV0dXJuIHByZWYuVmFsdWVPZk1lc3NhZ2UobGVnYWN5V3JhcE1lc3NhZ2UodikpCisJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mTWVzc2FnZShsZWdhY3lXcmFwTWVzc2FnZSh2KSkKIH0KIAotZnVuYyAoYyAqbWVzc2FnZUNvbnZlcnRlcikgR29WYWx1ZU9mKHYgcHJlZi5WYWx1ZSkgcmVmbGVjdC5WYWx1ZSB7CitmdW5jIChjICptZXNzYWdlQ29udmVydGVyKSBHb1ZhbHVlT2YodiBwcm90b3JlZmxlY3QuVmFsdWUpIHJlZmxlY3QuVmFsdWUgewogCW0gOj0gdi5NZXNzYWdlKCkKIAl2YXIgcnYgcmVmbGVjdC5WYWx1ZQogCWlmIHUsIG9rIDo9IG0uKHVud3JhcHBlcik7IG9rIHsKQEAgLTQ2MCw3ICs0NTksNyBAQAogCXJldHVybiBydgogfQogCi1mdW5jIChjICptZXNzYWdlQ29udmVydGVyKSBJc1ZhbGlkUEIodiBwcmVmLlZhbHVlKSBib29sIHsKK2Z1bmMgKGMgKm1lc3NhZ2VDb252ZXJ0ZXIpIElzVmFsaWRQQih2IHByb3RvcmVmbGVjdC5WYWx1ZSkgYm9vbCB7CiAJbSA6PSB2Lk1lc3NhZ2UoKQogCXZhciBydiByZWZsZWN0LlZhbHVlCiAJaWYgdSwgb2sgOj0gbS4odW53cmFwcGVyKTsgb2sgewpAQCAtNDc4LDE0ICs0NzcsMTQgQEAKIAlyZXR1cm4gdi5Jc1ZhbGlkKCkgJiYgdi5UeXBlKCkgPT0gYy5nb1R5cGUKIH0KIAotZnVuYyAoYyAqbWVzc2FnZUNvbnZlcnRlcikgTmV3KCkgcHJlZi5WYWx1ZSB7CitmdW5jIChjICptZXNzYWdlQ29udmVydGVyKSBOZXcoKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCWlmIGMuaXNOb25Qb2ludGVyKCkgewogCQlyZXR1cm4gYy5QQlZhbHVlT2YocmVmbGVjdC5OZXcoYy5nb1R5cGUpLkVsZW0oKSkKIAl9CiAJcmV0dXJuIGMuUEJWYWx1ZU9mKHJlZmxlY3QuTmV3KGMuZ29UeXBlLkVsZW0oKSkpCiB9CiAKLWZ1bmMgKGMgKm1lc3NhZ2VDb252ZXJ0ZXIpIFplcm8oKSBwcmVmLlZhbHVlIHsKK2Z1bmMgKGMgKm1lc3NhZ2VDb252ZXJ0ZXIpIFplcm8oKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCXJldHVybiBjLlBCVmFsdWVPZihyZWZsZWN0Llplcm8oYy5nb1R5cGUpKQogfQogCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb252ZXJ0X2xpc3QuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9jb252ZXJ0X2xpc3QuZ28KaW5kZXggNmZjY2FiNS4uZjg5MTM2NSAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29udmVydF9saXN0LmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvbnZlcnRfbGlzdC5nbwpAQCAtOCwxMCArOCwxMCBAQAogCSJmbXQiCiAJInJlZmxlY3QiCiAKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCiApCiAKLWZ1bmMgbmV3TGlzdENvbnZlcnRlcih0IHJlZmxlY3QuVHlwZSwgZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpIENvbnZlcnRlciB7CitmdW5jIG5ld0xpc3RDb252ZXJ0ZXIodCByZWZsZWN0LlR5cGUsIGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpIENvbnZlcnRlciB7CiAJc3dpdGNoIHsKIAljYXNlIHQuS2luZCgpID09IHJlZmxlY3QuUHRyICYmIHQuRWxlbSgpLktpbmQoKSA9PSByZWZsZWN0LlNsaWNlOgogCQlyZXR1cm4gJmxpc3RQdHJDb252ZXJ0ZXJ7dCwgbmV3U2luZ3VsYXJDb252ZXJ0ZXIodC5FbGVtKCkuRWxlbSgpLCBmZCl9CkBAIC0yNiwxNiArMjYsMTYgQEAKIAljICAgICAgQ29udmVydGVyCiB9CiAKLWZ1bmMgKGMgKmxpc3RDb252ZXJ0ZXIpIFBCVmFsdWVPZih2IHJlZmxlY3QuVmFsdWUpIHByZWYuVmFsdWUgeworZnVuYyAoYyAqbGlzdENvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlpZiB2LlR5cGUoKSAhPSBjLmdvVHlwZSB7CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCAldiIsIHYuVHlwZSgpLCBjLmdvVHlwZSkpCiAJfQogCXB2IDo9IHJlZmxlY3QuTmV3KGMuZ29UeXBlKQogCXB2LkVsZW0oKS5TZXQodikKLQlyZXR1cm4gcHJlZi5WYWx1ZU9mTGlzdCgmbGlzdFJlZmxlY3R7cHYsIGMuY30pCisJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mTGlzdCgmbGlzdFJlZmxlY3R7cHYsIGMuY30pCiB9CiAKLWZ1bmMgKGMgKmxpc3RDb252ZXJ0ZXIpIEdvVmFsdWVPZih2IHByZWYuVmFsdWUpIHJlZmxlY3QuVmFsdWUgeworZnVuYyAoYyAqbGlzdENvbnZlcnRlcikgR29WYWx1ZU9mKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSByZWZsZWN0LlZhbHVlIHsKIAlydiA6PSB2Lkxpc3QoKS4oKmxpc3RSZWZsZWN0KS52CiAJaWYgcnYuSXNOaWwoKSB7CiAJCXJldHVybiByZWZsZWN0Llplcm8oYy5nb1R5cGUpCkBAIC00Myw3ICs0Myw3IEBACiAJcmV0dXJuIHJ2LkVsZW0oKQogfQogCi1mdW5jIChjICpsaXN0Q29udmVydGVyKSBJc1ZhbGlkUEIodiBwcmVmLlZhbHVlKSBib29sIHsKK2Z1bmMgKGMgKmxpc3RDb252ZXJ0ZXIpIElzVmFsaWRQQih2IHByb3RvcmVmbGVjdC5WYWx1ZSkgYm9vbCB7CiAJbGlzdCwgb2sgOj0gdi5JbnRlcmZhY2UoKS4oKmxpc3RSZWZsZWN0KQogCWlmICFvayB7CiAJCXJldHVybiBmYWxzZQpAQCAtNTUsMTIgKzU1LDEyIEBACiAJcmV0dXJuIHYuSXNWYWxpZCgpICYmIHYuVHlwZSgpID09IGMuZ29UeXBlCiB9CiAKLWZ1bmMgKGMgKmxpc3RDb252ZXJ0ZXIpIE5ldygpIHByZWYuVmFsdWUgewotCXJldHVybiBwcmVmLlZhbHVlT2ZMaXN0KCZsaXN0UmVmbGVjdHtyZWZsZWN0Lk5ldyhjLmdvVHlwZSksIGMuY30pCitmdW5jIChjICpsaXN0Q29udmVydGVyKSBOZXcoKSBwcm90b3JlZmxlY3QuVmFsdWUgeworCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkxpc3QoJmxpc3RSZWZsZWN0e3JlZmxlY3QuTmV3KGMuZ29UeXBlKSwgYy5jfSkKIH0KIAotZnVuYyAoYyAqbGlzdENvbnZlcnRlcikgWmVybygpIHByZWYuVmFsdWUgewotCXJldHVybiBwcmVmLlZhbHVlT2ZMaXN0KCZsaXN0UmVmbGVjdHtyZWZsZWN0Llplcm8ocmVmbGVjdC5QdHJUbyhjLmdvVHlwZSkpLCBjLmN9KQorZnVuYyAoYyAqbGlzdENvbnZlcnRlcikgWmVybygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CisJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mTGlzdCgmbGlzdFJlZmxlY3R7cmVmbGVjdC5aZXJvKHJlZmxlY3QuUHRyVG8oYy5nb1R5cGUpKSwgYy5jfSkKIH0KIAogdHlwZSBsaXN0UHRyQ29udmVydGVyIHN0cnVjdCB7CkBAIC02OCwxOCArNjgsMTggQEAKIAljICAgICAgQ29udmVydGVyCiB9CiAKLWZ1bmMgKGMgKmxpc3RQdHJDb252ZXJ0ZXIpIFBCVmFsdWVPZih2IHJlZmxlY3QuVmFsdWUpIHByZWYuVmFsdWUgeworZnVuYyAoYyAqbGlzdFB0ckNvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlpZiB2LlR5cGUoKSAhPSBjLmdvVHlwZSB7CiAJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCAldiIsIHYuVHlwZSgpLCBjLmdvVHlwZSkpCiAJfQotCXJldHVybiBwcmVmLlZhbHVlT2ZMaXN0KCZsaXN0UmVmbGVjdHt2LCBjLmN9KQorCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZkxpc3QoJmxpc3RSZWZsZWN0e3YsIGMuY30pCiB9CiAKLWZ1bmMgKGMgKmxpc3RQdHJDb252ZXJ0ZXIpIEdvVmFsdWVPZih2IHByZWYuVmFsdWUpIHJlZmxlY3QuVmFsdWUgeworZnVuYyAoYyAqbGlzdFB0ckNvbnZlcnRlcikgR29WYWx1ZU9mKHYgcHJvdG9yZWZsZWN0LlZhbHVlKSByZWZsZWN0LlZhbHVlIHsKIAlyZXR1cm4gdi5MaXN0KCkuKCpsaXN0UmVmbGVjdCkudgogfQogCi1mdW5jIChjICpsaXN0UHRyQ29udmVydGVyKSBJc1ZhbGlkUEIodiBwcmVmLlZhbHVlKSBib29sIHsKK2Z1bmMgKGMgKmxpc3RQdHJDb252ZXJ0ZXIpIElzVmFsaWRQQih2IHByb3RvcmVmbGVjdC5WYWx1ZSkgYm9vbCB7CiAJbGlzdCwgb2sgOj0gdi5JbnRlcmZhY2UoKS4oKmxpc3RSZWZsZWN0KQogCWlmICFvayB7CiAJCXJldHVybiBmYWxzZQpAQCAtOTEsMTEgKzkxLDExIEBACiAJcmV0dXJuIHYuSXNWYWxpZCgpICYmIHYuVHlwZSgpID09IGMuZ29UeXBlCiB9CiAKLWZ1bmMgKGMgKmxpc3RQdHJDb252ZXJ0ZXIpIE5ldygpIHByZWYuVmFsdWUgeworZnVuYyAoYyAqbGlzdFB0ckNvbnZlcnRlcikgTmV3KCkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlyZXR1cm4gYy5QQlZhbHVlT2YocmVmbGVjdC5OZXcoYy5nb1R5cGUuRWxlbSgpKSkKIH0KIAotZnVuYyAoYyAqbGlzdFB0ckNvbnZlcnRlcikgWmVybygpIHByZWYuVmFsdWUgeworZnVuYyAoYyAqbGlzdFB0ckNvbnZlcnRlcikgWmVybygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJcmV0dXJuIGMuUEJWYWx1ZU9mKHJlZmxlY3QuWmVybyhjLmdvVHlwZSkpCiB9CiAKQEAgLTExMCwxNiArMTEwLDE2IEBACiAJfQogCXJldHVybiBscy52LkVsZW0oKS5MZW4oKQogfQotZnVuYyAobHMgKmxpc3RSZWZsZWN0KSBHZXQoaSBpbnQpIHByZWYuVmFsdWUgeworZnVuYyAobHMgKmxpc3RSZWZsZWN0KSBHZXQoaSBpbnQpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJcmV0dXJuIGxzLmNvbnYuUEJWYWx1ZU9mKGxzLnYuRWxlbSgpLkluZGV4KGkpKQogfQotZnVuYyAobHMgKmxpc3RSZWZsZWN0KSBTZXQoaSBpbnQsIHYgcHJlZi5WYWx1ZSkgeworZnVuYyAobHMgKmxpc3RSZWZsZWN0KSBTZXQoaSBpbnQsIHYgcHJvdG9yZWZsZWN0LlZhbHVlKSB7CiAJbHMudi5FbGVtKCkuSW5kZXgoaSkuU2V0KGxzLmNvbnYuR29WYWx1ZU9mKHYpKQogfQotZnVuYyAobHMgKmxpc3RSZWZsZWN0KSBBcHBlbmQodiBwcmVmLlZhbHVlKSB7CitmdW5jIChscyAqbGlzdFJlZmxlY3QpIEFwcGVuZCh2IHByb3RvcmVmbGVjdC5WYWx1ZSkgewogCWxzLnYuRWxlbSgpLlNldChyZWZsZWN0LkFwcGVuZChscy52LkVsZW0oKSwgbHMuY29udi5Hb1ZhbHVlT2YodikpKQogfQotZnVuYyAobHMgKmxpc3RSZWZsZWN0KSBBcHBlbmRNdXRhYmxlKCkgcHJlZi5WYWx1ZSB7CitmdW5jIChscyAqbGlzdFJlZmxlY3QpIEFwcGVuZE11dGFibGUoKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCWlmIF8sIG9rIDo9IGxzLmNvbnYuKCptZXNzYWdlQ29udmVydGVyKTsgIW9rIHsKIAkJcGFuaWMoImludmFsaWQgQXBwZW5kTXV0YWJsZSBvbiBsaXN0IHdpdGggbm9uLW1lc3NhZ2UgdHlwZSIpCiAJfQpAQCAtMTMwLDcgKzEzMCw3IEBACiBmdW5jIChscyAqbGlzdFJlZmxlY3QpIFRydW5jYXRlKGkgaW50KSB7CiAJbHMudi5FbGVtKCkuU2V0KGxzLnYuRWxlbSgpLlNsaWNlKDAsIGkpKQogfQotZnVuYyAobHMgKmxpc3RSZWZsZWN0KSBOZXdFbGVtZW50KCkgcHJlZi5WYWx1ZSB7CitmdW5jIChscyAqbGlzdFJlZmxlY3QpIE5ld0VsZW1lbnQoKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCXJldHVybiBscy5jb252Lk5ldygpCiB9CiBmdW5jIChscyAqbGlzdFJlZmxlY3QpIElzVmFsaWQoKSBib29sIHsKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2NvbnZlcnRfbWFwLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29udmVydF9tYXAuZ28KaW5kZXggZGUwNmIyNS4uZjMwYjBhMCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29udmVydF9tYXAuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvY29udmVydF9tYXAuZ28KQEAgLTgsNyArOCw3IEBACiAJImZtdCIKIAkicmVmbGVjdCIKIAotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKICkKIAogdHlwZSBtYXBDb252ZXJ0ZXIgc3RydWN0IHsKQEAgLTE2LDcgKzE2LDcgQEAKIAlrZXlDb252LCB2YWxDb252IENvbnZlcnRlcgogfQogCi1mdW5jIG5ld01hcENvbnZlcnRlcih0IHJlZmxlY3QuVHlwZSwgZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpICptYXBDb252ZXJ0ZXIgeworZnVuYyBuZXdNYXBDb252ZXJ0ZXIodCByZWZsZWN0LlR5cGUsIGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpICptYXBDb252ZXJ0ZXIgewogCWlmIHQuS2luZCgpICE9IHJlZmxlY3QuTWFwIHsKIAkJcGFuaWMoZm10LlNwcmludGYoImludmFsaWQgR28gdHlwZSAldiBmb3IgZmllbGQgJXYiLCB0LCBmZC5GdWxsTmFtZSgpKSkKIAl9CkBAIC0yNywxOCArMjcsMTggQEAKIAl9CiB9CiAKLWZ1bmMgKGMgKm1hcENvbnZlcnRlcikgUEJWYWx1ZU9mKHYgcmVmbGVjdC5WYWx1ZSkgcHJlZi5WYWx1ZSB7CitmdW5jIChjICptYXBDb252ZXJ0ZXIpIFBCVmFsdWVPZih2IHJlZmxlY3QuVmFsdWUpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJaWYgdi5UeXBlKCkgIT0gYy5nb1R5cGUgewogCQlwYW5pYyhmbXQuU3ByaW50ZigiaW52YWxpZCB0eXBlOiBnb3QgJXYsIHdhbnQgJXYiLCB2LlR5cGUoKSwgYy5nb1R5cGUpKQogCX0KLQlyZXR1cm4gcHJlZi5WYWx1ZU9mTWFwKCZtYXBSZWZsZWN0e3YsIGMua2V5Q29udiwgYy52YWxDb252fSkKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZNYXAoJm1hcFJlZmxlY3R7diwgYy5rZXlDb252LCBjLnZhbENvbnZ9KQogfQogCi1mdW5jIChjICptYXBDb252ZXJ0ZXIpIEdvVmFsdWVPZih2IHByZWYuVmFsdWUpIHJlZmxlY3QuVmFsdWUgeworZnVuYyAoYyAqbWFwQ29udmVydGVyKSBHb1ZhbHVlT2YodiBwcm90b3JlZmxlY3QuVmFsdWUpIHJlZmxlY3QuVmFsdWUgewogCXJldHVybiB2Lk1hcCgpLigqbWFwUmVmbGVjdCkudgogfQogCi1mdW5jIChjICptYXBDb252ZXJ0ZXIpIElzVmFsaWRQQih2IHByZWYuVmFsdWUpIGJvb2wgeworZnVuYyAoYyAqbWFwQ29udmVydGVyKSBJc1ZhbGlkUEIodiBwcm90b3JlZmxlY3QuVmFsdWUpIGJvb2wgewogCW1hcHYsIG9rIDo9IHYuSW50ZXJmYWNlKCkuKCptYXBSZWZsZWN0KQogCWlmICFvayB7CiAJCXJldHVybiBmYWxzZQpAQCAtNTAsMTEgKzUwLDExIEBACiAJcmV0dXJuIHYuSXNWYWxpZCgpICYmIHYuVHlwZSgpID09IGMuZ29UeXBlCiB9CiAKLWZ1bmMgKGMgKm1hcENvbnZlcnRlcikgTmV3KCkgcHJlZi5WYWx1ZSB7CitmdW5jIChjICptYXBDb252ZXJ0ZXIpIE5ldygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJcmV0dXJuIGMuUEJWYWx1ZU9mKHJlZmxlY3QuTWFrZU1hcChjLmdvVHlwZSkpCiB9CiAKLWZ1bmMgKGMgKm1hcENvbnZlcnRlcikgWmVybygpIHByZWYuVmFsdWUgeworZnVuYyAoYyAqbWFwQ29udmVydGVyKSBaZXJvKCkgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlyZXR1cm4gYy5QQlZhbHVlT2YocmVmbGVjdC5aZXJvKGMuZ29UeXBlKSkKIH0KIApAQCAtNjcsMjkgKzY3LDI5IEBACiBmdW5jIChtcyAqbWFwUmVmbGVjdCkgTGVuKCkgaW50IHsKIAlyZXR1cm4gbXMudi5MZW4oKQogfQotZnVuYyAobXMgKm1hcFJlZmxlY3QpIEhhcyhrIHByZWYuTWFwS2V5KSBib29sIHsKK2Z1bmMgKG1zICptYXBSZWZsZWN0KSBIYXMoayBwcm90b3JlZmxlY3QuTWFwS2V5KSBib29sIHsKIAlyayA6PSBtcy5rZXlDb252LkdvVmFsdWVPZihrLlZhbHVlKCkpCiAJcnYgOj0gbXMudi5NYXBJbmRleChyaykKIAlyZXR1cm4gcnYuSXNWYWxpZCgpCiB9Ci1mdW5jIChtcyAqbWFwUmVmbGVjdCkgR2V0KGsgcHJlZi5NYXBLZXkpIHByZWYuVmFsdWUgeworZnVuYyAobXMgKm1hcFJlZmxlY3QpIEdldChrIHByb3RvcmVmbGVjdC5NYXBLZXkpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJcmsgOj0gbXMua2V5Q29udi5Hb1ZhbHVlT2Yoay5WYWx1ZSgpKQogCXJ2IDo9IG1zLnYuTWFwSW5kZXgocmspCiAJaWYgIXJ2LklzVmFsaWQoKSB7Ci0JCXJldHVybiBwcmVmLlZhbHVle30KKwkJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZXt9CiAJfQogCXJldHVybiBtcy52YWxDb252LlBCVmFsdWVPZihydikKIH0KLWZ1bmMgKG1zICptYXBSZWZsZWN0KSBTZXQoayBwcmVmLk1hcEtleSwgdiBwcmVmLlZhbHVlKSB7CitmdW5jIChtcyAqbWFwUmVmbGVjdCkgU2V0KGsgcHJvdG9yZWZsZWN0Lk1hcEtleSwgdiBwcm90b3JlZmxlY3QuVmFsdWUpIHsKIAlyayA6PSBtcy5rZXlDb252LkdvVmFsdWVPZihrLlZhbHVlKCkpCiAJcnYgOj0gbXMudmFsQ29udi5Hb1ZhbHVlT2YodikKIAltcy52LlNldE1hcEluZGV4KHJrLCBydikKIH0KLWZ1bmMgKG1zICptYXBSZWZsZWN0KSBDbGVhcihrIHByZWYuTWFwS2V5KSB7CitmdW5jIChtcyAqbWFwUmVmbGVjdCkgQ2xlYXIoayBwcm90b3JlZmxlY3QuTWFwS2V5KSB7CiAJcmsgOj0gbXMua2V5Q29udi5Hb1ZhbHVlT2Yoay5WYWx1ZSgpKQogCW1zLnYuU2V0TWFwSW5kZXgocmssIHJlZmxlY3QuVmFsdWV7fSkKIH0KLWZ1bmMgKG1zICptYXBSZWZsZWN0KSBNdXRhYmxlKGsgcHJlZi5NYXBLZXkpIHByZWYuVmFsdWUgeworZnVuYyAobXMgKm1hcFJlZmxlY3QpIE11dGFibGUoayBwcm90b3JlZmxlY3QuTWFwS2V5KSBwcm90b3JlZmxlY3QuVmFsdWUgewogCWlmIF8sIG9rIDo9IG1zLnZhbENvbnYuKCptZXNzYWdlQ29udmVydGVyKTsgIW9rIHsKIAkJcGFuaWMoImludmFsaWQgTXV0YWJsZSBvbiBtYXAgd2l0aCBub24tbWVzc2FnZSB2YWx1ZSB0eXBlIikKIAl9CkBAIC0xMDAsNyArMTAwLDcgQEAKIAl9CiAJcmV0dXJuIHYKIH0KLWZ1bmMgKG1zICptYXBSZWZsZWN0KSBSYW5nZShmIGZ1bmMocHJlZi5NYXBLZXksIHByZWYuVmFsdWUpIGJvb2wpIHsKK2Z1bmMgKG1zICptYXBSZWZsZWN0KSBSYW5nZShmIGZ1bmMocHJvdG9yZWZsZWN0Lk1hcEtleSwgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sKSB7CiAJaXRlciA6PSBtYXBSYW5nZShtcy52KQogCWZvciBpdGVyLk5leHQoKSB7CiAJCWsgOj0gbXMua2V5Q29udi5QQlZhbHVlT2YoaXRlci5LZXkoKSkuTWFwS2V5KCkKQEAgLTExMCw3ICsxMTAsNyBAQAogCQl9CiAJfQogfQotZnVuYyAobXMgKm1hcFJlZmxlY3QpIE5ld1ZhbHVlKCkgcHJlZi5WYWx1ZSB7CitmdW5jIChtcyAqbWFwUmVmbGVjdCkgTmV3VmFsdWUoKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCXJldHVybiBtcy52YWxDb252Lk5ldygpCiB9CiBmdW5jIChtcyAqbWFwUmVmbGVjdCkgSXNWYWxpZCgpIGJvb2wgewpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvZGVjb2RlLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvZGVjb2RlLmdvCmluZGV4IDk0OWRjNDkuLmNkYTA1MjAgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2RlY29kZS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9kZWNvZGUuZ28KQEAgLTEyLDEyICsxMiwxMiBAQAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9mbGFncyIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8iCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgotCXByZWcgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeSIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZ2lzdHJ5IgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UiCi0JcGlmYWNlICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UiCiApCiAKIHZhciBlcnJEZWNvZGUgPSBlcnJvcnMuTmV3KCJjYW5ub3QgcGFyc2UgaW52YWxpZCB3aXJlLWZvcm1hdCBkYXRhIikKK3ZhciBlcnJSZWN1cnNpb25EZXB0aCA9IGVycm9ycy5OZXcoImV4Y2VlZGVkIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIikKIAogdHlwZSB1bm1hcnNoYWxPcHRpb25zIHN0cnVjdCB7CiAJZmxhZ3MgICAgcHJvdG9pZmFjZS5Vbm1hcnNoYWxJbnB1dEZsYWdzCkBAIC0yNSw2ICsyNSw3IEBACiAJCUZpbmRFeHRlbnNpb25CeU5hbWUoZmllbGQgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKSAocHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUsIGVycm9yKQogCQlGaW5kRXh0ZW5zaW9uQnlOdW1iZXIobWVzc2FnZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUsIGZpZWxkIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcikgKHByb3RvcmVmbGVjdC5FeHRlbnNpb25UeXBlLCBlcnJvcikKIAl9CisJZGVwdGggaW50CiB9CiAKIGZ1bmMgKG8gdW5tYXJzaGFsT3B0aW9ucykgT3B0aW9ucygpIHByb3RvLlVubWFyc2hhbE9wdGlvbnMgewpAQCAtMzYsMTQgKzM3LDE3IEBACiAJfQogfQogCi1mdW5jIChvIHVubWFyc2hhbE9wdGlvbnMpIERpc2NhcmRVbmtub3duKCkgYm9vbCB7IHJldHVybiBvLmZsYWdzJnBpZmFjZS5Vbm1hcnNoYWxEaXNjYXJkVW5rbm93biAhPSAwIH0KK2Z1bmMgKG8gdW5tYXJzaGFsT3B0aW9ucykgRGlzY2FyZFVua25vd24oKSBib29sIHsKKwlyZXR1cm4gby5mbGFncyZwcm90b2lmYWNlLlVubWFyc2hhbERpc2NhcmRVbmtub3duICE9IDAKK30KIAogZnVuYyAobyB1bm1hcnNoYWxPcHRpb25zKSBJc0RlZmF1bHQoKSBib29sIHsKLQlyZXR1cm4gby5mbGFncyA9PSAwICYmIG8ucmVzb2x2ZXIgPT0gcHJlZy5HbG9iYWxUeXBlcworCXJldHVybiBvLmZsYWdzID09IDAgJiYgby5yZXNvbHZlciA9PSBwcm90b3JlZ2lzdHJ5Lkdsb2JhbFR5cGVzCiB9CiAKIHZhciBsYXp5VW5tYXJzaGFsT3B0aW9ucyA9IHVubWFyc2hhbE9wdGlvbnN7Ci0JcmVzb2x2ZXI6IHByZWcuR2xvYmFsVHlwZXMsCisJcmVzb2x2ZXI6IHByb3RvcmVnaXN0cnkuR2xvYmFsVHlwZXMsCisJZGVwdGg6ICAgIHByb3Rvd2lyZS5EZWZhdWx0UmVjdXJzaW9uTGltaXQsCiB9CiAKIHR5cGUgdW5tYXJzaGFsT3V0cHV0IHN0cnVjdCB7CkBAIC01Miw3ICs1Niw3IEBACiB9CiAKIC8vIHVubWFyc2hhbCBpcyBwcm90b3JlZmxlY3QuTWV0aG9kcy5Vbm1hcnNoYWwuCi1mdW5jIChtaSAqTWVzc2FnZUluZm8pIHVubWFyc2hhbChpbiBwaWZhY2UuVW5tYXJzaGFsSW5wdXQpIChwaWZhY2UuVW5tYXJzaGFsT3V0cHV0LCBlcnJvcikgeworZnVuYyAobWkgKk1lc3NhZ2VJbmZvKSB1bm1hcnNoYWwoaW4gcHJvdG9pZmFjZS5Vbm1hcnNoYWxJbnB1dCkgKHByb3RvaWZhY2UuVW5tYXJzaGFsT3V0cHV0LCBlcnJvcikgewogCXZhciBwIHBvaW50ZXIKIAlpZiBtcywgb2sgOj0gaW4uTWVzc2FnZS4oKm1lc3NhZ2VTdGF0ZSk7IG9rIHsKIAkJcCA9IG1zLnBvaW50ZXIoKQpAQCAtNjIsMTIgKzY2LDEzIEBACiAJb3V0LCBlcnIgOj0gbWkudW5tYXJzaGFsUG9pbnRlcihpbi5CdWYsIHAsIDAsIHVubWFyc2hhbE9wdGlvbnN7CiAJCWZsYWdzOiAgICBpbi5GbGFncywKIAkJcmVzb2x2ZXI6IGluLlJlc29sdmVyLAorCQlkZXB0aDogICAgaW4uRGVwdGgsCiAJfSkKLQl2YXIgZmxhZ3MgcGlmYWNlLlVubWFyc2hhbE91dHB1dEZsYWdzCisJdmFyIGZsYWdzIHByb3RvaWZhY2UuVW5tYXJzaGFsT3V0cHV0RmxhZ3MKIAlpZiBvdXQuaW5pdGlhbGl6ZWQgewotCQlmbGFncyB8PSBwaWZhY2UuVW5tYXJzaGFsSW5pdGlhbGl6ZWQKKwkJZmxhZ3MgfD0gcHJvdG9pZmFjZS5Vbm1hcnNoYWxJbml0aWFsaXplZAogCX0KLQlyZXR1cm4gcGlmYWNlLlVubWFyc2hhbE91dHB1dHsKKwlyZXR1cm4gcHJvdG9pZmFjZS5Vbm1hcnNoYWxPdXRwdXR7CiAJCUZsYWdzOiBmbGFncywKIAl9LCBlcnIKIH0KQEAgLTgyLDYgKzg3LDEwIEBACiAKIGZ1bmMgKG1pICpNZXNzYWdlSW5mbykgdW5tYXJzaGFsUG9pbnRlcihiIFtdYnl0ZSwgcCBwb2ludGVyLCBncm91cFRhZyBwcm90b3dpcmUuTnVtYmVyLCBvcHRzIHVubWFyc2hhbE9wdGlvbnMpIChvdXQgdW5tYXJzaGFsT3V0cHV0LCBlcnIgZXJyb3IpIHsKIAltaS5pbml0KCkKKwlvcHRzLmRlcHRoLS0KKwlpZiBvcHRzLmRlcHRoIDwgMCB7CisJCXJldHVybiBvdXQsIGVyclJlY3Vyc2lvbkRlcHRoCisJfQogCWlmIGZsYWdzLlByb3RvTGVnYWN5ICYmIG1pLmlzTWVzc2FnZVNldCB7CiAJCXJldHVybiB1bm1hcnNoYWxNZXNzYWdlU2V0KG1pLCBiLCBwLCBvcHRzKQogCX0KQEAgLTIwMiw3ICsyMTEsNyBAQAogCQl2YXIgZXJyIGVycm9yCiAJCXh0LCBlcnIgPSBvcHRzLnJlc29sdmVyLkZpbmRFeHRlbnNpb25CeU51bWJlcihtaS5EZXNjLkZ1bGxOYW1lKCksIG51bSkKIAkJaWYgZXJyICE9IG5pbCB7Ci0JCQlpZiBlcnIgPT0gcHJlZy5Ob3RGb3VuZCB7CisJCQlpZiBlcnIgPT0gcHJvdG9yZWdpc3RyeS5Ob3RGb3VuZCB7CiAJCQkJcmV0dXJuIG91dCwgZXJyVW5rbm93bgogCQkJfQogCQkJcmV0dXJuIG91dCwgZXJyb3JzLk5ldygiJXY6IHVuYWJsZSB0byByZXNvbHZlIGV4dGVuc2lvbiAldjogJXYiLCBtaS5EZXNjLkZ1bGxOYW1lKCksIG51bSwgZXJyKQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvZW51bS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2VudW0uZ28KaW5kZXggOGMxZWFiNC4uNWYzZWY1YSAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvZW51bS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9lbnVtLmdvCkBAIC03LDE1ICs3LDE1IEBACiBpbXBvcnQgKAogCSJyZWZsZWN0IgogCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgogKQogCiB0eXBlIEVudW1JbmZvIHN0cnVjdCB7CiAJR29SZWZsZWN0VHlwZSByZWZsZWN0LlR5cGUgLy8gaW50MzIga2luZAotCURlc2MgICAgICAgICAgcHJlZi5FbnVtRGVzY3JpcHRvcgorCURlc2MgICAgICAgICAgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yCiB9CiAKLWZ1bmMgKHQgKkVudW1JbmZvKSBOZXcobiBwcmVmLkVudW1OdW1iZXIpIHByZWYuRW51bSB7Ci0JcmV0dXJuIHJlZmxlY3QuVmFsdWVPZihuKS5Db252ZXJ0KHQuR29SZWZsZWN0VHlwZSkuSW50ZXJmYWNlKCkuKHByZWYuRW51bSkKK2Z1bmMgKHQgKkVudW1JbmZvKSBOZXcobiBwcm90b3JlZmxlY3QuRW51bU51bWJlcikgcHJvdG9yZWZsZWN0LkVudW0geworCXJldHVybiByZWZsZWN0LlZhbHVlT2YobikuQ29udmVydCh0LkdvUmVmbGVjdFR5cGUpLkludGVyZmFjZSgpLihwcm90b3JlZmxlY3QuRW51bSkKIH0KLWZ1bmMgKHQgKkVudW1JbmZvKSBEZXNjcmlwdG9yKCkgcHJlZi5FbnVtRGVzY3JpcHRvciB7IHJldHVybiB0LkRlc2MgfQorZnVuYyAodCAqRW51bUluZm8pIERlc2NyaXB0b3IoKSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IgeyByZXR1cm4gdC5EZXNjIH0KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2V4dGVuc2lvbi5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2V4dGVuc2lvbi5nbwppbmRleCBlOTA0ZmQ5Li5jYjI1YjBiIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9leHRlbnNpb24uZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvZXh0ZW5zaW9uLmdvCkBAIC05LDggKzksOCBAQAogCSJzeW5jIgogCSJzeW5jL2F0b21pYyIKIAotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgotCXBpZmFjZSAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2lmYWNlIgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2lmYWNlIgogKQogCiAvLyBFeHRlbnNpb25JbmZvIGltcGxlbWVudHMgRXh0ZW5zaW9uVHlwZS4KQEAgLTQ1LDcgKzQ1LDcgQEAKIAkvLyBzaW5jZSB0aGUgbWVzc2FnZSBtYXkgbm8gbG9uZ2VyIGltcGxlbWVudCB0aGUgTWVzc2FnZVYxIGludGVyZmFjZS4KIAkvLwogCS8vIERlcHJlY2F0ZWQ6IFVzZSB0aGUgRXh0ZW5kZWRUeXBlIG1ldGhvZCBpbnN0ZWFkLgotCUV4dGVuZGVkVHlwZSBwaWZhY2UuTWVzc2FnZVYxCisJRXh0ZW5kZWRUeXBlIHByb3RvaWZhY2UuTWVzc2FnZVYxCiAKIAkvLyBFeHRlbnNpb25UeXBlIGlzIHRoZSB6ZXJvIHZhbHVlIG9mIHRoZSBleHRlbnNpb24gdHlwZS4KIAkvLwpAQCAtODMsMzEgKzgzLDMxIEBACiAJZXh0ZW5zaW9uSW5mb0Z1bGxJbml0ICAgICAgPSAyCiApCiAKLWZ1bmMgSW5pdEV4dGVuc2lvbkluZm8oeGkgKkV4dGVuc2lvbkluZm8sIHhkIHByZWYuRXh0ZW5zaW9uRGVzY3JpcHRvciwgZ29UeXBlIHJlZmxlY3QuVHlwZSkgeworZnVuYyBJbml0RXh0ZW5zaW9uSW5mbyh4aSAqRXh0ZW5zaW9uSW5mbywgeGQgcHJvdG9yZWZsZWN0LkV4dGVuc2lvbkRlc2NyaXB0b3IsIGdvVHlwZSByZWZsZWN0LlR5cGUpIHsKIAl4aS5nb1R5cGUgPSBnb1R5cGUKIAl4aS5kZXNjID0gZXh0ZW5zaW9uVHlwZURlc2NyaXB0b3J7eGQsIHhpfQogCXhpLmluaXQgPSBleHRlbnNpb25JbmZvRGVzY0luaXQKIH0KIAotZnVuYyAoeGkgKkV4dGVuc2lvbkluZm8pIE5ldygpIHByZWYuVmFsdWUgeworZnVuYyAoeGkgKkV4dGVuc2lvbkluZm8pIE5ldygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJcmV0dXJuIHhpLmxhenlJbml0KCkuTmV3KCkKIH0KLWZ1bmMgKHhpICpFeHRlbnNpb25JbmZvKSBaZXJvKCkgcHJlZi5WYWx1ZSB7CitmdW5jICh4aSAqRXh0ZW5zaW9uSW5mbykgWmVybygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJcmV0dXJuIHhpLmxhenlJbml0KCkuWmVybygpCiB9Ci1mdW5jICh4aSAqRXh0ZW5zaW9uSW5mbykgVmFsdWVPZih2IGludGVyZmFjZXt9KSBwcmVmLlZhbHVlIHsKK2Z1bmMgKHhpICpFeHRlbnNpb25JbmZvKSBWYWx1ZU9mKHYgaW50ZXJmYWNle30pIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJcmV0dXJuIHhpLmxhenlJbml0KCkuUEJWYWx1ZU9mKHJlZmxlY3QuVmFsdWVPZih2KSkKIH0KLWZ1bmMgKHhpICpFeHRlbnNpb25JbmZvKSBJbnRlcmZhY2VPZih2IHByZWYuVmFsdWUpIGludGVyZmFjZXt9IHsKK2Z1bmMgKHhpICpFeHRlbnNpb25JbmZvKSBJbnRlcmZhY2VPZih2IHByb3RvcmVmbGVjdC5WYWx1ZSkgaW50ZXJmYWNle30gewogCXJldHVybiB4aS5sYXp5SW5pdCgpLkdvVmFsdWVPZih2KS5JbnRlcmZhY2UoKQogfQotZnVuYyAoeGkgKkV4dGVuc2lvbkluZm8pIElzVmFsaWRWYWx1ZSh2IHByZWYuVmFsdWUpIGJvb2wgeworZnVuYyAoeGkgKkV4dGVuc2lvbkluZm8pIElzVmFsaWRWYWx1ZSh2IHByb3RvcmVmbGVjdC5WYWx1ZSkgYm9vbCB7CiAJcmV0dXJuIHhpLmxhenlJbml0KCkuSXNWYWxpZFBCKHYpCiB9CiBmdW5jICh4aSAqRXh0ZW5zaW9uSW5mbykgSXNWYWxpZEludGVyZmFjZSh2IGludGVyZmFjZXt9KSBib29sIHsKIAlyZXR1cm4geGkubGF6eUluaXQoKS5Jc1ZhbGlkR28ocmVmbGVjdC5WYWx1ZU9mKHYpKQogfQotZnVuYyAoeGkgKkV4dGVuc2lvbkluZm8pIFR5cGVEZXNjcmlwdG9yKCkgcHJlZi5FeHRlbnNpb25UeXBlRGVzY3JpcHRvciB7CitmdW5jICh4aSAqRXh0ZW5zaW9uSW5mbykgVHlwZURlc2NyaXB0b3IoKSBwcm90b3JlZmxlY3QuRXh0ZW5zaW9uVHlwZURlc2NyaXB0b3IgewogCWlmIGF0b21pYy5Mb2FkVWludDMyKCZ4aS5pbml0KSA8IGV4dGVuc2lvbkluZm9EZXNjSW5pdCB7CiAJCXhpLmxhenlJbml0U2xvdygpCiAJfQpAQCAtMTQ0LDEzICsxNDQsMTMgQEAKIH0KIAogdHlwZSBleHRlbnNpb25UeXBlRGVzY3JpcHRvciBzdHJ1Y3QgewotCXByZWYuRXh0ZW5zaW9uRGVzY3JpcHRvcgorCXByb3RvcmVmbGVjdC5FeHRlbnNpb25EZXNjcmlwdG9yCiAJeGkgKkV4dGVuc2lvbkluZm8KIH0KIAotZnVuYyAoeHRkICpleHRlbnNpb25UeXBlRGVzY3JpcHRvcikgVHlwZSgpIHByZWYuRXh0ZW5zaW9uVHlwZSB7CitmdW5jICh4dGQgKmV4dGVuc2lvblR5cGVEZXNjcmlwdG9yKSBUeXBlKCkgcHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUgewogCXJldHVybiB4dGQueGkKIH0KLWZ1bmMgKHh0ZCAqZXh0ZW5zaW9uVHlwZURlc2NyaXB0b3IpIERlc2NyaXB0b3IoKSBwcmVmLkV4dGVuc2lvbkRlc2NyaXB0b3IgeworZnVuYyAoeHRkICpleHRlbnNpb25UeXBlRGVzY3JpcHRvcikgRGVzY3JpcHRvcigpIHByb3RvcmVmbGVjdC5FeHRlbnNpb25EZXNjcmlwdG9yIHsKIAlyZXR1cm4geHRkLkV4dGVuc2lvbkRlc2NyaXB0b3IKIH0KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2xlZ2FjeV9lbnVtLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbGVnYWN5X2VudW0uZ28KaW5kZXggZjdkN2ZmYi4uYzJhODAzYiAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbGVnYWN5X2VudW0uZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbGVnYWN5X2VudW0uZ28KQEAgLTEzLDEzICsxMywxMiBAQAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYyIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvc3RycyIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCiApCiAKIC8vIGxlZ2FjeUVudW1OYW1lIHJldHVybnMgdGhlIG5hbWUgb2YgZW51bXMgdXNlZCBpbiBsZWdhY3kgY29kZS4KIC8vIEl0IGlzIG5laXRoZXIgdGhlIHByb3RvYnVmIGZ1bGwgbmFtZSBub3IgdGhlIHF1YWxpZmllZCBHbyBuYW1lLAogLy8gYnV0IHJhdGhlciBhbiBvZGQgaHlicmlkIG9mIGJvdGguCi1mdW5jIGxlZ2FjeUVudW1OYW1lKGVkIHByZWYuRW51bURlc2NyaXB0b3IpIHN0cmluZyB7CitmdW5jIGxlZ2FjeUVudW1OYW1lKGVkIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvcikgc3RyaW5nIHsKIAl2YXIgcHJvdG9Qa2cgc3RyaW5nCiAJZW51bU5hbWUgOj0gc3RyaW5nKGVkLkZ1bGxOYW1lKCkpCiAJaWYgZmQgOj0gZWQuUGFyZW50RmlsZSgpOyBmZCAhPSBuaWwgewpAQCAtMzQsNjggKzMzLDY4IEBACiAKIC8vIGxlZ2FjeVdyYXBFbnVtIHdyYXBzIHYgYXMgYSBwcm90b3JlZmxlY3QuRW51bSwKIC8vIHdoZXJlIHYgbXVzdCBiZSBhIGludDMyIGtpbmQgYW5kIG5vdCBpbXBsZW1lbnQgdGhlIHYyIEFQSSBhbHJlYWR5LgotZnVuYyBsZWdhY3lXcmFwRW51bSh2IHJlZmxlY3QuVmFsdWUpIHByZWYuRW51bSB7CitmdW5jIGxlZ2FjeVdyYXBFbnVtKHYgcmVmbGVjdC5WYWx1ZSkgcHJvdG9yZWZsZWN0LkVudW0gewogCWV0IDo9IGxlZ2FjeUxvYWRFbnVtVHlwZSh2LlR5cGUoKSkKLQlyZXR1cm4gZXQuTmV3KHByZWYuRW51bU51bWJlcih2LkludCgpKSkKKwlyZXR1cm4gZXQuTmV3KHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKHYuSW50KCkpKQogfQogCiB2YXIgbGVnYWN5RW51bVR5cGVDYWNoZSBzeW5jLk1hcCAvLyBtYXBbcmVmbGVjdC5UeXBlXXByb3RvcmVmbGVjdC5FbnVtVHlwZQogCiAvLyBsZWdhY3lMb2FkRW51bVR5cGUgZHluYW1pY2FsbHkgbG9hZHMgYSBwcm90b3JlZmxlY3QuRW51bVR5cGUgZm9yIHQsCiAvLyB3aGVyZSB0IG11c3QgYmUgYW4gaW50MzIga2luZCBhbmQgbm90IGltcGxlbWVudCB0aGUgdjIgQVBJIGFscmVhZHkuCi1mdW5jIGxlZ2FjeUxvYWRFbnVtVHlwZSh0IHJlZmxlY3QuVHlwZSkgcHJlZi5FbnVtVHlwZSB7CitmdW5jIGxlZ2FjeUxvYWRFbnVtVHlwZSh0IHJlZmxlY3QuVHlwZSkgcHJvdG9yZWZsZWN0LkVudW1UeXBlIHsKIAkvLyBGYXN0LXBhdGg6IGNoZWNrIGlmIGEgRW51bVR5cGUgaXMgY2FjaGVkIGZvciB0aGlzIGNvbmNyZXRlIHR5cGUuCiAJaWYgZXQsIG9rIDo9IGxlZ2FjeUVudW1UeXBlQ2FjaGUuTG9hZCh0KTsgb2sgewotCQlyZXR1cm4gZXQuKHByZWYuRW51bVR5cGUpCisJCXJldHVybiBldC4ocHJvdG9yZWZsZWN0LkVudW1UeXBlKQogCX0KIAogCS8vIFNsb3ctcGF0aDogZGVyaXZlIGVudW0gZGVzY3JpcHRvciBhbmQgaW5pdGlhbGl6ZSBFbnVtVHlwZS4KLQl2YXIgZXQgcHJlZi5FbnVtVHlwZQorCXZhciBldCBwcm90b3JlZmxlY3QuRW51bVR5cGUKIAllZCA6PSBMZWdhY3lMb2FkRW51bURlc2ModCkKIAlldCA9ICZsZWdhY3lFbnVtVHlwZXsKIAkJZGVzYzogICBlZCwKIAkJZ29UeXBlOiB0LAogCX0KIAlpZiBldCwgb2sgOj0gbGVnYWN5RW51bVR5cGVDYWNoZS5Mb2FkT3JTdG9yZSh0LCBldCk7IG9rIHsKLQkJcmV0dXJuIGV0LihwcmVmLkVudW1UeXBlKQorCQlyZXR1cm4gZXQuKHByb3RvcmVmbGVjdC5FbnVtVHlwZSkKIAl9CiAJcmV0dXJuIGV0CiB9CiAKIHR5cGUgbGVnYWN5RW51bVR5cGUgc3RydWN0IHsKLQlkZXNjICAgcHJlZi5FbnVtRGVzY3JpcHRvcgorCWRlc2MgICBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IKIAlnb1R5cGUgcmVmbGVjdC5UeXBlCiAJbSAgICAgIHN5bmMuTWFwIC8vIG1hcFtwcm90b3JlZmxlY3QuRW51bU51bWJlcl1wcm90by5FbnVtCiB9CiAKLWZ1bmMgKHQgKmxlZ2FjeUVudW1UeXBlKSBOZXcobiBwcmVmLkVudW1OdW1iZXIpIHByZWYuRW51bSB7CitmdW5jICh0ICpsZWdhY3lFbnVtVHlwZSkgTmV3KG4gcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIpIHByb3RvcmVmbGVjdC5FbnVtIHsKIAlpZiBlLCBvayA6PSB0Lm0uTG9hZChuKTsgb2sgewotCQlyZXR1cm4gZS4ocHJlZi5FbnVtKQorCQlyZXR1cm4gZS4ocHJvdG9yZWZsZWN0LkVudW0pCiAJfQogCWUgOj0gJmxlZ2FjeUVudW1XcmFwcGVye251bTogbiwgcGJUeXA6IHQsIGdvVHlwOiB0LmdvVHlwZX0KIAl0Lm0uU3RvcmUobiwgZSkKIAlyZXR1cm4gZQogfQotZnVuYyAodCAqbGVnYWN5RW51bVR5cGUpIERlc2NyaXB0b3IoKSBwcmVmLkVudW1EZXNjcmlwdG9yIHsKK2Z1bmMgKHQgKmxlZ2FjeUVudW1UeXBlKSBEZXNjcmlwdG9yKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKIAlyZXR1cm4gdC5kZXNjCiB9CiAKIHR5cGUgbGVnYWN5RW51bVdyYXBwZXIgc3RydWN0IHsKLQludW0gICBwcmVmLkVudW1OdW1iZXIKLQlwYlR5cCBwcmVmLkVudW1UeXBlCisJbnVtICAgcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIKKwlwYlR5cCBwcm90b3JlZmxlY3QuRW51bVR5cGUKIAlnb1R5cCByZWZsZWN0LlR5cGUKIH0KIAotZnVuYyAoZSAqbGVnYWN5RW51bVdyYXBwZXIpIERlc2NyaXB0b3IoKSBwcmVmLkVudW1EZXNjcmlwdG9yIHsKK2Z1bmMgKGUgKmxlZ2FjeUVudW1XcmFwcGVyKSBEZXNjcmlwdG9yKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKIAlyZXR1cm4gZS5wYlR5cC5EZXNjcmlwdG9yKCkKIH0KLWZ1bmMgKGUgKmxlZ2FjeUVudW1XcmFwcGVyKSBUeXBlKCkgcHJlZi5FbnVtVHlwZSB7CitmdW5jIChlICpsZWdhY3lFbnVtV3JhcHBlcikgVHlwZSgpIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7CiAJcmV0dXJuIGUucGJUeXAKIH0KLWZ1bmMgKGUgKmxlZ2FjeUVudW1XcmFwcGVyKSBOdW1iZXIoKSBwcmVmLkVudW1OdW1iZXIgeworZnVuYyAoZSAqbGVnYWN5RW51bVdyYXBwZXIpIE51bWJlcigpIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyIHsKIAlyZXR1cm4gZS5udW0KIH0KLWZ1bmMgKGUgKmxlZ2FjeUVudW1XcmFwcGVyKSBQcm90b1JlZmxlY3QoKSBwcmVmLkVudW0geworZnVuYyAoZSAqbGVnYWN5RW51bVdyYXBwZXIpIFByb3RvUmVmbGVjdCgpIHByb3RvcmVmbGVjdC5FbnVtIHsKIAlyZXR1cm4gZQogfQogZnVuYyAoZSAqbGVnYWN5RW51bVdyYXBwZXIpIHByb3RvVW53cmFwKCkgaW50ZXJmYWNle30gewpAQCAtMTA1LDggKzEwNCw4IEBACiB9CiAKIHZhciAoCi0JXyBwcmVmLkVudW0gPSAoKmxlZ2FjeUVudW1XcmFwcGVyKShuaWwpCi0JXyB1bndyYXBwZXIgPSAoKmxlZ2FjeUVudW1XcmFwcGVyKShuaWwpCisJXyBwcm90b3JlZmxlY3QuRW51bSA9ICgqbGVnYWN5RW51bVdyYXBwZXIpKG5pbCkKKwlfIHVud3JhcHBlciAgICAgICAgID0gKCpsZWdhY3lFbnVtV3JhcHBlcikobmlsKQogKQogCiB2YXIgbGVnYWN5RW51bURlc2NDYWNoZSBzeW5jLk1hcCAvLyBtYXBbcmVmbGVjdC5UeXBlXXByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvcgpAQCAtMTE1LDE1ICsxMTQsMTUgQEAKIC8vIHdoaWNoIG11c3QgYmUgYW4gaW50MzIga2luZCBhbmQgbm90IGltcGxlbWVudCB0aGUgdjIgQVBJIGFscmVhZHkuCiAvLwogLy8gVGhpcyBpcyBleHBvcnRlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KLWZ1bmMgTGVnYWN5TG9hZEVudW1EZXNjKHQgcmVmbGVjdC5UeXBlKSBwcmVmLkVudW1EZXNjcmlwdG9yIHsKK2Z1bmMgTGVnYWN5TG9hZEVudW1EZXNjKHQgcmVmbGVjdC5UeXBlKSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IgewogCS8vIEZhc3QtcGF0aDogY2hlY2sgaWYgYW4gRW51bURlc2NyaXB0b3IgaXMgY2FjaGVkIGZvciB0aGlzIGNvbmNyZXRlIHR5cGUuCiAJaWYgZWQsIG9rIDo9IGxlZ2FjeUVudW1EZXNjQ2FjaGUuTG9hZCh0KTsgb2sgewotCQlyZXR1cm4gZWQuKHByZWYuRW51bURlc2NyaXB0b3IpCisJCXJldHVybiBlZC4ocHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yKQogCX0KIAogCS8vIFNsb3ctcGF0aDogaW5pdGlhbGl6ZSBFbnVtRGVzY3JpcHRvciBmcm9tIHRoZSByYXcgZGVzY3JpcHRvci4KIAlldiA6PSByZWZsZWN0Llplcm8odCkuSW50ZXJmYWNlKCkKLQlpZiBfLCBvayA6PSBldi4ocHJlZi5FbnVtKTsgb2sgeworCWlmIF8sIG9rIDo9IGV2Lihwcm90b3JlZmxlY3QuRW51bSk7IG9rIHsKIAkJcGFuaWMoZm10LlNwcmludGYoIiV2IGFscmVhZHkgaW1wbGVtZW50cyBwcm90by5FbnVtIiwgdCkpCiAJfQogCWVkVjEsIG9rIDo9IGV2LihlbnVtVjEpCkBAIC0xMzIsNyArMTMxLDcgQEAKIAl9CiAJYiwgaWR4cyA6PSBlZFYxLkVudW1EZXNjcmlwdG9yKCkKIAotCXZhciBlZCBwcmVmLkVudW1EZXNjcmlwdG9yCisJdmFyIGVkIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvcgogCWlmIGxlbihpZHhzKSA9PSAxIHsKIAkJZWQgPSBsZWdhY3lMb2FkRmlsZURlc2MoYikuRW51bXMoKS5HZXQoaWR4c1swXSkKIAl9IGVsc2UgewpAQCAtMTU4LDEwICsxNTcsMTAgQEAKIC8vIFdlIGFyZSB1bmFibGUgdG8gdXNlIHRoZSBnbG9iYWwgZW51bSByZWdpc3RyeSBzaW5jZSBpdCBpcwogLy8gdW5mb3J0dW5hdGVseSBrZXllZCBieSB0aGUgcHJvdG9idWYgZnVsbCBuYW1lLCB3aGljaCB3ZSBhbHNvIGRvIG5vdCBrbm93LgogLy8gVGh1cywgdGhpcyBwcm9kdWNlcyBzb21lIGJvZ3VzIGVudW0gZGVzY3JpcHRvciBiYXNlZCBvbiB0aGUgR28gdHlwZSBuYW1lLgotZnVuYyBhYmVycmFudExvYWRFbnVtRGVzYyh0IHJlZmxlY3QuVHlwZSkgcHJlZi5FbnVtRGVzY3JpcHRvciB7CitmdW5jIGFiZXJyYW50TG9hZEVudW1EZXNjKHQgcmVmbGVjdC5UeXBlKSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IgewogCS8vIEZhc3QtcGF0aDogY2hlY2sgaWYgYW4gRW51bURlc2NyaXB0b3IgaXMgY2FjaGVkIGZvciB0aGlzIGNvbmNyZXRlIHR5cGUuCiAJaWYgZWQsIG9rIDo9IGFiZXJyYW50RW51bURlc2NDYWNoZS5Mb2FkKHQpOyBvayB7Ci0JCXJldHVybiBlZC4ocHJlZi5FbnVtRGVzY3JpcHRvcikKKwkJcmV0dXJuIGVkLihwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IpCiAJfQogCiAJLy8gU2xvdy1wYXRoOiBjb25zdHJ1Y3QgYSBib2d1cywgYnV0IHVuaXF1ZSBFbnVtRGVzY3JpcHRvci4KQEAgLTE4Miw3ICsxODEsNyBAQAogCS8vIEFuIGV4aGF1c3RpdmUgcXVlcnkgaXMgY2xlYXJseSBpbXByYWN0aWNhbCwgYnV0IGNhbiBiZSBiZXN0LWVmZm9ydC4KIAogCWlmIGVkLCBvayA6PSBhYmVycmFudEVudW1EZXNjQ2FjaGUuTG9hZE9yU3RvcmUodCwgZWQpOyBvayB7Ci0JCXJldHVybiBlZC4ocHJlZi5FbnVtRGVzY3JpcHRvcikKKwkJcmV0dXJuIGVkLihwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IpCiAJfQogCXJldHVybiBlZAogfQpAQCAtMTkyLDcgKzE5MSw3IEBACiAvLyBJdCBzaG91bGQgYmUgc3VmZmljaWVudGx5IHVuaXF1ZSB3aXRoaW4gYSBwcm9ncmFtLgogLy8KIC8vIFRoaXMgaXMgZXhwb3J0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCi1mdW5jIEFiZXJyYW50RGVyaXZlRnVsbE5hbWUodCByZWZsZWN0LlR5cGUpIHByZWYuRnVsbE5hbWUgeworZnVuYyBBYmVycmFudERlcml2ZUZ1bGxOYW1lKHQgcmVmbGVjdC5UeXBlKSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgewogCXNhbml0aXplIDo9IGZ1bmMociBydW5lKSBydW5lIHsKIAkJc3dpdGNoIHsKIAkJY2FzZSByID09ICcvJzoKQEAgLTIxNSw1ICsyMTQsNSBAQAogCQkJc3NbaV0gPSAieCIgKyBzCiAJCX0KIAl9Ci0JcmV0dXJuIHByZWYuRnVsbE5hbWUoc3RyaW5ncy5Kb2luKHNzLCAiLiIpKQorCXJldHVybiBwcm90b3JlZmxlY3QuRnVsbE5hbWUoc3RyaW5ncy5Kb2luKHNzLCAiLiIpKQogfQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbGVnYWN5X2V4cG9ydC5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2xlZ2FjeV9leHBvcnQuZ28KaW5kZXggZTNmYjBiNS4uOWI2NGFkNSAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbGVnYWN5X2V4cG9ydC5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9sZWdhY3lfZXhwb3J0LmdvCkBAIC0xMiwyMSArMTIsMjEgQEAKIAkicmVmbGVjdCIKIAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lcnJvcnMiCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCi0JcGlmYWNlICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UiCiApCiAKIC8vIFRoZXNlIGZ1bmN0aW9ucyBleGlzdCB0byBzdXBwb3J0IGV4cG9ydGVkIEFQSXMgaW4gZ2VuZXJhdGVkIHByb3RvYnVmcy4KIC8vIFdoaWxlIHRoZXNlIGFyZSBkZXByZWNhdGVkLCB0aGV5IGNhbm5vdCBiZSByZW1vdmVkIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAKIC8vIExlZ2FjeUVudW1OYW1lIHJldHVybnMgdGhlIG5hbWUgb2YgZW51bXMgdXNlZCBpbiBsZWdhY3kgY29kZS4KLWZ1bmMgKEV4cG9ydCkgTGVnYWN5RW51bU5hbWUoZWQgcHJlZi5FbnVtRGVzY3JpcHRvcikgc3RyaW5nIHsKK2Z1bmMgKEV4cG9ydCkgTGVnYWN5RW51bU5hbWUoZWQgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yKSBzdHJpbmcgewogCXJldHVybiBsZWdhY3lFbnVtTmFtZShlZCkKIH0KIAogLy8gTGVnYWN5TWVzc2FnZVR5cGVPZiByZXR1cm5zIHRoZSBwcm90b3JlZmxlY3QuTWVzc2FnZVR5cGUgZm9yIG0sCiAvLyB3aXRoIG5hbWUgdXNlZCBhcyB0aGUgbWVzc2FnZSBuYW1lIGlmIG5lY2Vzc2FyeS4KLWZ1bmMgKEV4cG9ydCkgTGVnYWN5TWVzc2FnZVR5cGVPZihtIHBpZmFjZS5NZXNzYWdlVjEsIG5hbWUgcHJlZi5GdWxsTmFtZSkgcHJlZi5NZXNzYWdlVHlwZSB7CitmdW5jIChFeHBvcnQpIExlZ2FjeU1lc3NhZ2VUeXBlT2YobSBwcm90b2lmYWNlLk1lc3NhZ2VWMSwgbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUpIHByb3RvcmVmbGVjdC5NZXNzYWdlVHlwZSB7CiAJaWYgbXYgOj0gKEV4cG9ydHt9KS5wcm90b01lc3NhZ2VWMk9mKG0pOyBtdiAhPSBuaWwgewogCQlyZXR1cm4gbXYuUHJvdG9SZWZsZWN0KCkuVHlwZSgpCiAJfQpAQCAtMzYsOSArMzYsOSBAQAogLy8gVW5tYXJzaGFsSlNPTkVudW0gdW5tYXJzaGFscyBhbiBlbnVtIGZyb20gYSBKU09OLWVuY29kZWQgaW5wdXQuCiAvLyBUaGUgaW5wdXQgY2FuIGVpdGhlciBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGVudW0gdmFsdWUgYnkgbmFtZSwKIC8vIG9yIGEgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgZW51bSBudW1iZXIgaXRzZWxmLgotZnVuYyAoRXhwb3J0KSBVbm1hcnNoYWxKU09ORW51bShlZCBwcmVmLkVudW1EZXNjcmlwdG9yLCBiIFtdYnl0ZSkgKHByZWYuRW51bU51bWJlciwgZXJyb3IpIHsKK2Z1bmMgKEV4cG9ydCkgVW5tYXJzaGFsSlNPTkVudW0oZWQgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yLCBiIFtdYnl0ZSkgKHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyLCBlcnJvcikgewogCWlmIGJbMF0gPT0gJyInIHsKLQkJdmFyIG5hbWUgcHJlZi5OYW1lCisJCXZhciBuYW1lIHByb3RvcmVmbGVjdC5OYW1lCiAJCWlmIGVyciA6PSBqc29uLlVubWFyc2hhbChiLCAmbmFtZSk7IGVyciAhPSBuaWwgewogCQkJcmV0dXJuIDAsIGVycm9ycy5OZXcoImludmFsaWQgaW5wdXQgZm9yIGVudW0gJXY6ICVzIiwgZWQuRnVsbE5hbWUoKSwgYikKIAkJfQpAQCAtNDgsNyArNDgsNyBAQAogCQl9CiAJCXJldHVybiBldi5OdW1iZXIoKSwgbmlsCiAJfSBlbHNlIHsKLQkJdmFyIG51bSBwcmVmLkVudW1OdW1iZXIKKwkJdmFyIG51bSBwcm90b3JlZmxlY3QuRW51bU51bWJlcgogCQlpZiBlcnIgOj0ganNvbi5Vbm1hcnNoYWwoYiwgJm51bSk7IGVyciAhPSBuaWwgewogCQkJcmV0dXJuIDAsIGVycm9ycy5OZXcoImludmFsaWQgaW5wdXQgZm9yIGVudW0gJXY6ICVzIiwgZWQuRnVsbE5hbWUoKSwgYikKIAkJfQpAQCAtODEsOCArODEsOCBAQAogCQkJYmxvY2tIZWFkZXJbMF0gPSAweDAxIC8vIGZpbmFsIGJpdCBwZXIgUkZDIDE5NTEsIHNlY3Rpb24gMy4yLjMuCiAJCQlibG9ja1NpemUgPSBsZW4oaW4pCiAJCX0KLQkJYmluYXJ5LkxpdHRsZUVuZGlhbi5QdXRVaW50MTYoYmxvY2tIZWFkZXJbMTozXSwgdWludDE2KGJsb2NrU2l6ZSleMHgwMDAwKQotCQliaW5hcnkuTGl0dGxlRW5kaWFuLlB1dFVpbnQxNihibG9ja0hlYWRlclszOjVdLCB1aW50MTYoYmxvY2tTaXplKV4weGZmZmYpCisJCWJpbmFyeS5MaXR0bGVFbmRpYW4uUHV0VWludDE2KGJsb2NrSGVhZGVyWzE6M10sIHVpbnQxNihibG9ja1NpemUpKQorCQliaW5hcnkuTGl0dGxlRW5kaWFuLlB1dFVpbnQxNihibG9ja0hlYWRlclszOjVdLCBedWludDE2KGJsb2NrU2l6ZSkpCiAJCW91dCA9IGFwcGVuZChvdXQsIGJsb2NrSGVhZGVyWzpdLi4uKQogCQlvdXQgPSBhcHBlbmQob3V0LCBpbls6YmxvY2tTaXplXS4uLikKIAkJaW4gPSBpbltibG9ja1NpemU6XQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbGVnYWN5X2V4dGVuc2lvbi5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2xlZ2FjeV9leHRlbnNpb24uZ28KaW5kZXggNDllNzIzMS4uODdiMzBkMCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbGVnYWN5X2V4dGVuc2lvbi5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9sZWdhY3lfZXh0ZW5zaW9uLmdvCkBAIC0xMiwxNiArMTIsMTYgQEAKIAlwdGFnICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGluZy90YWciCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9wcmFnbWEiCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCi0JcHJlZyAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZ2lzdHJ5IgotCXBpZmFjZSAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2lmYWNlIgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZ2lzdHJ5IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UiCiApCiAKIGZ1bmMgKHhpICpFeHRlbnNpb25JbmZvKSBpbml0VG9MZWdhY3koKSB7CiAJeGQgOj0geGkuZGVzYwotCXZhciBwYXJlbnQgcGlmYWNlLk1lc3NhZ2VWMQorCXZhciBwYXJlbnQgcHJvdG9pZmFjZS5NZXNzYWdlVjEKIAltZXNzYWdlTmFtZSA6PSB4ZC5Db250YWluaW5nTWVzc2FnZSgpLkZ1bGxOYW1lKCkKLQlpZiBtdCwgXyA6PSBwcmVnLkdsb2JhbFR5cGVzLkZpbmRNZXNzYWdlQnlOYW1lKG1lc3NhZ2VOYW1lKTsgbXQgIT0gbmlsIHsKKwlpZiBtdCwgXyA6PSBwcm90b3JlZ2lzdHJ5Lkdsb2JhbFR5cGVzLkZpbmRNZXNzYWdlQnlOYW1lKG1lc3NhZ2VOYW1lKTsgbXQgIT0gbmlsIHsKIAkJLy8gQ3JlYXRlIGEgbmV3IHBhcmVudCBtZXNzYWdlIGFuZCB1bndyYXAgaXQgaWYgcG9zc2libGUuCiAJCW12IDo9IG10Lk5ldygpLkludGVyZmFjZSgpCiAJCXQgOj0gcmVmbGVjdC5UeXBlT2YobXYpCkBAIC0zMSw3ICszMSw3IEBACiAKIAkJLy8gQ2hlY2sgd2hldGhlciB0aGUgbWVzc2FnZSBpbXBsZW1lbnRzIHRoZSBsZWdhY3kgdjEgTWVzc2FnZSBpbnRlcmZhY2UuCiAJCW16IDo9IHJlZmxlY3QuWmVybyh0KS5JbnRlcmZhY2UoKQotCQlpZiBteiwgb2sgOj0gbXouKHBpZmFjZS5NZXNzYWdlVjEpOyBvayB7CisJCWlmIG16LCBvayA6PSBtei4ocHJvdG9pZmFjZS5NZXNzYWdlVjEpOyBvayB7CiAJCQlwYXJlbnQgPSBtegogCQl9CiAJfQpAQCAtNDYsNyArNDYsNyBAQAogCiAJLy8gUmVjb25zdHJ1Y3QgdGhlIGxlZ2FjeSBlbnVtIGZ1bGwgbmFtZS4KIAl2YXIgZW51bU5hbWUgc3RyaW5nCi0JaWYgeGQuS2luZCgpID09IHByZWYuRW51bUtpbmQgeworCWlmIHhkLktpbmQoKSA9PSBwcm90b3JlZmxlY3QuRW51bUtpbmQgewogCQllbnVtTmFtZSA9IGxlZ2FjeUVudW1OYW1lKHhkLkVudW0oKSkKIAl9CiAKQEAgLTc3LDE2ICs3NywxNiBAQAogCS8vIGZpZWxkIG51bWJlciBpcyBzcGVjaWZpZWQuIEluIHN1Y2ggYSBjYXNlLCB1c2UgYSBwbGFjZWhvbGRlci4KIAlpZiB4aS5FeHRlbmRlZFR5cGUgPT0gbmlsIHx8IHhpLkV4dGVuc2lvblR5cGUgPT0gbmlsIHsKIAkJeGQgOj0gcGxhY2Vob2xkZXJFeHRlbnNpb257Ci0JCQluYW1lOiAgIHByZWYuRnVsbE5hbWUoeGkuTmFtZSksCi0JCQludW1iZXI6IHByZWYuRmllbGROdW1iZXIoeGkuRmllbGQpLAorCQkJbmFtZTogICBwcm90b3JlZmxlY3QuRnVsbE5hbWUoeGkuTmFtZSksCisJCQludW1iZXI6IHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcih4aS5GaWVsZCksCiAJCX0KIAkJeGkuZGVzYyA9IGV4dGVuc2lvblR5cGVEZXNjcmlwdG9ye3hkLCB4aX0KIAkJcmV0dXJuCiAJfQogCiAJLy8gUmVzb2x2ZSBlbnVtIG9yIG1lc3NhZ2UgZGVwZW5kZW5jaWVzLgotCXZhciBlZCBwcmVmLkVudW1EZXNjcmlwdG9yCi0JdmFyIG1kIHByZWYuTWVzc2FnZURlc2NyaXB0b3IKKwl2YXIgZWQgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yCisJdmFyIG1kIHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvcgogCXQgOj0gcmVmbGVjdC5UeXBlT2YoeGkuRXh0ZW5zaW9uVHlwZSkKIAlpc09wdGlvbmFsIDo9IHQuS2luZCgpID09IHJlZmxlY3QuUHRyICYmIHQuRWxlbSgpLktpbmQoKSAhPSByZWZsZWN0LlN0cnVjdAogCWlzUmVwZWF0ZWQgOj0gdC5LaW5kKCkgPT0gcmVmbGVjdC5TbGljZSAmJiB0LkVsZW0oKS5LaW5kKCkgIT0gcmVmbGVjdC5VaW50OApAQCAtOTQsMTggKzk0LDE4IEBACiAJCXQgPSB0LkVsZW0oKQogCX0KIAlzd2l0Y2ggdiA6PSByZWZsZWN0Llplcm8odCkuSW50ZXJmYWNlKCkuKHR5cGUpIHsKLQljYXNlIHByZWYuRW51bToKKwljYXNlIHByb3RvcmVmbGVjdC5FbnVtOgogCQllZCA9IHYuRGVzY3JpcHRvcigpCiAJY2FzZSBlbnVtVjE6CiAJCWVkID0gTGVnYWN5TG9hZEVudW1EZXNjKHQpCi0JY2FzZSBwcmVmLlByb3RvTWVzc2FnZToKKwljYXNlIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2U6CiAJCW1kID0gdi5Qcm90b1JlZmxlY3QoKS5EZXNjcmlwdG9yKCkKIAljYXNlIG1lc3NhZ2VWMToKIAkJbWQgPSBMZWdhY3lMb2FkTWVzc2FnZURlc2ModCkKIAl9CiAKIAkvLyBEZXJpdmUgYmFzaWMgZmllbGQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3RydWN0IHRhZy4KLQl2YXIgZXZzIHByZWYuRW51bVZhbHVlRGVzY3JpcHRvcnMKKwl2YXIgZXZzIHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9ycwogCWlmIGVkICE9IG5pbCB7CiAJCWV2cyA9IGVkLlZhbHVlcygpCiAJfQpAQCAtMTE0LDggKzExNCw4IEBACiAJLy8gQ29uc3RydWN0IGEgdjIgRXh0ZW5zaW9uVHlwZS4KIAl4ZCA6PSAmZmlsZWRlc2MuRXh0ZW5zaW9ue0wyOiBuZXcoZmlsZWRlc2MuRXh0ZW5zaW9uTDIpfQogCXhkLkwwLlBhcmVudEZpbGUgPSBmaWxlZGVzYy5TdXJyb2dhdGVQcm90bzIKLQl4ZC5MMC5GdWxsTmFtZSA9IHByZWYuRnVsbE5hbWUoeGkuTmFtZSkKLQl4ZC5MMS5OdW1iZXIgPSBwcmVmLkZpZWxkTnVtYmVyKHhpLkZpZWxkKQorCXhkLkwwLkZ1bGxOYW1lID0gcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKHhpLk5hbWUpCisJeGQuTDEuTnVtYmVyID0gcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKHhpLkZpZWxkKQogCXhkLkwxLkNhcmRpbmFsaXR5ID0gZmQuTDEuQ2FyZGluYWxpdHkKIAl4ZC5MMS5LaW5kID0gZmQuTDEuS2luZAogCXhkLkwyLklzUGFja2VkID0gZmQuTDEuSXNQYWNrZWQKQEAgLTEzOCwzOSArMTM4LDM5IEBACiB9CiAKIHR5cGUgcGxhY2Vob2xkZXJFeHRlbnNpb24gc3RydWN0IHsKLQluYW1lICAgcHJlZi5GdWxsTmFtZQotCW51bWJlciBwcmVmLkZpZWxkTnVtYmVyCisJbmFtZSAgIHByb3RvcmVmbGVjdC5GdWxsTmFtZQorCW51bWJlciBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIKIH0KIAotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgUGFyZW50RmlsZSgpIHByZWYuRmlsZURlc2NyaXB0b3IgICAgICAgICAgICB7IHJldHVybiBuaWwgfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgUGFyZW50KCkgcHJlZi5EZXNjcmlwdG9yICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuaWwgfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgSW5kZXgoKSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAwIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIFN5bnRheCgpIHByZWYuU3ludGF4ICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gMCB9Ci1mdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBOYW1lKCkgcHJlZi5OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHgubmFtZS5OYW1lKCkgfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgRnVsbE5hbWUoKSBwcmVmLkZ1bGxOYW1lICAgICAgICAgICAgICAgICAgICB7IHJldHVybiB4Lm5hbWUgfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgSXNQbGFjZWhvbGRlcigpIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiB0cnVlIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIE9wdGlvbnMoKSBwcmVmLlByb3RvTWVzc2FnZSAgICAgICAgICAgICAgICAgeyByZXR1cm4gZGVzY29wdHMuRmllbGQgfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgTnVtYmVyKCkgcHJlZi5GaWVsZE51bWJlciAgICAgICAgICAgICAgICAgICB7IHJldHVybiB4Lm51bWJlciB9Ci1mdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBDYXJkaW5hbGl0eSgpIHByZWYuQ2FyZGluYWxpdHkgICAgICAgICAgICAgIHsgcmV0dXJuIDAgfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgS2luZCgpIHByZWYuS2luZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAwIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIEhhc0pTT05OYW1lKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmFsc2UgfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgSlNPTk5hbWUoKSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAiWyIgKyBzdHJpbmcoeC5uYW1lKSArICJdIiB9Ci1mdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBUZXh0TmFtZSgpIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuICJbIiArIHN0cmluZyh4Lm5hbWUpICsgIl0iIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIEhhc1ByZXNlbmNlKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmFsc2UgfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgSGFzT3B0aW9uYWxLZXl3b3JkKCkgYm9vbCAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmYWxzZSB9Ci1mdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBJc0V4dGVuc2lvbigpIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHRydWUgfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgSXNXZWFrKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmYWxzZSB9Ci1mdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBJc1BhY2tlZCgpIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZhbHNlIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIElzTGlzdCgpIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmFsc2UgfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgSXNNYXAoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmYWxzZSB9Ci1mdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBNYXBLZXkoKSBwcmVmLkZpZWxkRGVzY3JpcHRvciAgICAgICAgICAgICAgIHsgcmV0dXJuIG5pbCB9Ci1mdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBNYXBWYWx1ZSgpIHByZWYuRmllbGREZXNjcmlwdG9yICAgICAgICAgICAgIHsgcmV0dXJuIG5pbCB9Ci1mdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBIYXNEZWZhdWx0KCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZhbHNlIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIERlZmF1bHQoKSBwcmVmLlZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gcHJlZi5WYWx1ZXt9IH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIERlZmF1bHRFbnVtVmFsdWUoKSBwcmVmLkVudW1WYWx1ZURlc2NyaXB0b3IgeyByZXR1cm4gbmlsIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIENvbnRhaW5pbmdPbmVvZigpIHByZWYuT25lb2ZEZXNjcmlwdG9yICAgICAgeyByZXR1cm4gbmlsIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIENvbnRhaW5pbmdNZXNzYWdlKCkgcHJlZi5NZXNzYWdlRGVzY3JpcHRvciAgeyByZXR1cm4gbmlsIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIEVudW0oKSBwcmVmLkVudW1EZXNjcmlwdG9yICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbmlsIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIE1lc3NhZ2UoKSBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yICAgICAgICAgICAgeyByZXR1cm4gbmlsIH0KLWZ1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIFByb3RvVHlwZShwcmVmLkZpZWxkRGVzY3JpcHRvcikgICAgICAgICAgICAgeyByZXR1cm4gfQotZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpICAgICAgICB7IHJldHVybiB9CitmdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBQYXJlbnRGaWxlKCkgcHJvdG9yZWZsZWN0LkZpbGVEZXNjcmlwdG9yICAgICAgICAgICAgeyByZXR1cm4gbmlsIH0KK2Z1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIFBhcmVudCgpIHByb3RvcmVmbGVjdC5EZXNjcmlwdG9yICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuaWwgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgSW5kZXgoKSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIDAgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgU3ludGF4KCkgcHJvdG9yZWZsZWN0LlN5bnRheCAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIDAgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgTmFtZSgpIHByb3RvcmVmbGVjdC5OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHgubmFtZS5OYW1lKCkgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgRnVsbE5hbWUoKSBwcm90b3JlZmxlY3QuRnVsbE5hbWUgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHgubmFtZSB9CitmdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBJc1BsYWNlaG9sZGVyKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gdHJ1ZSB9CitmdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBPcHRpb25zKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSAgICAgICAgICAgICAgICAgeyByZXR1cm4gZGVzY29wdHMuRmllbGQgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgTnVtYmVyKCkgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHgubnVtYmVyIH0KK2Z1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIENhcmRpbmFsaXR5KCkgcHJvdG9yZWZsZWN0LkNhcmRpbmFsaXR5ICAgICAgICAgICAgICB7IHJldHVybiAwIH0KK2Z1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIEtpbmQoKSBwcm90b3JlZmxlY3QuS2luZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAwIH0KK2Z1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIEhhc0pTT05OYW1lKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmYWxzZSB9CitmdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBKU09OTmFtZSgpIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gIlsiICsgc3RyaW5nKHgubmFtZSkgKyAiXSIgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgVGV4dE5hbWUoKSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuICJbIiArIHN0cmluZyh4Lm5hbWUpICsgIl0iIH0KK2Z1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIEhhc1ByZXNlbmNlKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmYWxzZSB9CitmdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBIYXNPcHRpb25hbEtleXdvcmQoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmFsc2UgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgSXNFeHRlbnNpb24oKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHRydWUgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgSXNXZWFrKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZhbHNlIH0KK2Z1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIElzUGFja2VkKCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBmYWxzZSB9CitmdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBJc0xpc3QoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmFsc2UgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgSXNNYXAoKSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZhbHNlIH0KK2Z1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIE1hcEtleSgpIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IgICAgICAgICAgICAgICB7IHJldHVybiBuaWwgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgTWFwVmFsdWUoKSBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yICAgICAgICAgICAgIHsgcmV0dXJuIG5pbCB9CitmdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBIYXNEZWZhdWx0KCkgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZmFsc2UgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgRGVmYXVsdCgpIHByb3RvcmVmbGVjdC5WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZXt9IH0KK2Z1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIERlZmF1bHRFbnVtVmFsdWUoKSBwcm90b3JlZmxlY3QuRW51bVZhbHVlRGVzY3JpcHRvciB7IHJldHVybiBuaWwgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgQ29udGFpbmluZ09uZW9mKCkgcHJvdG9yZWZsZWN0Lk9uZW9mRGVzY3JpcHRvciAgICAgIHsgcmV0dXJuIG5pbCB9CitmdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBDb250YWluaW5nTWVzc2FnZSgpIHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvciAgeyByZXR1cm4gbmlsIH0KK2Z1bmMgKHggcGxhY2Vob2xkZXJFeHRlbnNpb24pIEVudW0oKSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IgICAgICAgICAgICAgICAgICB7IHJldHVybiBuaWwgfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgTWVzc2FnZSgpIHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvciAgICAgICAgICAgIHsgcmV0dXJuIG5pbCB9CitmdW5jICh4IHBsYWNlaG9sZGVyRXh0ZW5zaW9uKSBQcm90b1R5cGUocHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgICAgICAgICAgICAgeyByZXR1cm4gfQorZnVuYyAoeCBwbGFjZWhvbGRlckV4dGVuc2lvbikgUHJvdG9JbnRlcm5hbChwcmFnbWEuRG9Ob3RJbXBsZW1lbnQpICAgICAgICAgICAgICAgIHsgcmV0dXJuIH0KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL2xlZ2FjeV9tZXNzYWdlLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbGVnYWN5X21lc3NhZ2UuZ28KaW5kZXggMDI5ZmVlZS4uMmFiMmM2MiAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbGVnYWN5X21lc3NhZ2UuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbGVnYWN5X21lc3NhZ2UuZ28KQEAgLTE2LDE0ICsxNiwxMiBAQAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYyIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvc3RycyIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3J1bnRpbWUvcHJvdG9pZmFjZSIKLQlwaWZhY2UgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3J1bnRpbWUvcHJvdG9pZmFjZSIKICkKIAogLy8gbGVnYWN5V3JhcE1lc3NhZ2Ugd3JhcHMgdiBhcyBhIHByb3RvcmVmbGVjdC5NZXNzYWdlLAogLy8gd2hlcmUgdiBtdXN0IGJlIGEgKnN0cnVjdCBraW5kIGFuZCBub3QgaW1wbGVtZW50IHRoZSB2MiBBUEkgYWxyZWFkeS4KLWZ1bmMgbGVnYWN5V3JhcE1lc3NhZ2UodiByZWZsZWN0LlZhbHVlKSBwcmVmLk1lc3NhZ2UgeworZnVuYyBsZWdhY3lXcmFwTWVzc2FnZSh2IHJlZmxlY3QuVmFsdWUpIHByb3RvcmVmbGVjdC5NZXNzYWdlIHsKIAl0IDo9IHYuVHlwZSgpCiAJaWYgdC5LaW5kKCkgIT0gcmVmbGVjdC5QdHIgfHwgdC5FbGVtKCkuS2luZCgpICE9IHJlZmxlY3QuU3RydWN0IHsKIAkJcmV0dXJuIGFiZXJyYW50TWVzc2FnZXt2OiB2fQpAQCAtMzUsNyArMzMsNyBAQAogLy8gbGVnYWN5TG9hZE1lc3NhZ2VUeXBlIGR5bmFtaWNhbGx5IGxvYWRzIGEgcHJvdG9yZWZsZWN0LlR5cGUgZm9yIHQsCiAvLyB3aGVyZSB0IG11c3QgYmUgbm90IGltcGxlbWVudCB0aGUgdjIgQVBJIGFscmVhZHkuCiAvLyBUaGUgcHJvdmlkZWQgbmFtZSBpcyB1c2VkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIG1lc3NhZ2UuCi1mdW5jIGxlZ2FjeUxvYWRNZXNzYWdlVHlwZSh0IHJlZmxlY3QuVHlwZSwgbmFtZSBwcmVmLkZ1bGxOYW1lKSBwcm90b3JlZmxlY3QuTWVzc2FnZVR5cGUgeworZnVuYyBsZWdhY3lMb2FkTWVzc2FnZVR5cGUodCByZWZsZWN0LlR5cGUsIG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKSBwcm90b3JlZmxlY3QuTWVzc2FnZVR5cGUgewogCWlmIHQuS2luZCgpICE9IHJlZmxlY3QuUHRyIHx8IHQuRWxlbSgpLktpbmQoKSAhPSByZWZsZWN0LlN0cnVjdCB7CiAJCXJldHVybiBhYmVycmFudE1lc3NhZ2VUeXBle3R9CiAJfQpAQCAtNDcsNyArNDUsNyBAQAogLy8gbGVnYWN5TG9hZE1lc3NhZ2VJbmZvIGR5bmFtaWNhbGx5IGxvYWRzIGEgKk1lc3NhZ2VJbmZvIGZvciB0LAogLy8gd2hlcmUgdCBtdXN0IGJlIGEgKnN0cnVjdCBraW5kIGFuZCBub3QgaW1wbGVtZW50IHRoZSB2MiBBUEkgYWxyZWFkeS4KIC8vIFRoZSBwcm92aWRlZCBuYW1lIGlzIHVzZWQgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQgZnJvbSB0aGUgbWVzc2FnZS4KLWZ1bmMgbGVnYWN5TG9hZE1lc3NhZ2VJbmZvKHQgcmVmbGVjdC5UeXBlLCBuYW1lIHByZWYuRnVsbE5hbWUpICpNZXNzYWdlSW5mbyB7CitmdW5jIGxlZ2FjeUxvYWRNZXNzYWdlSW5mbyh0IHJlZmxlY3QuVHlwZSwgbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUpICpNZXNzYWdlSW5mbyB7CiAJLy8gRmFzdC1wYXRoOiBjaGVjayBpZiBhIE1lc3NhZ2VJbmZvIGlzIGNhY2hlZCBmb3IgdGhpcyBjb25jcmV0ZSB0eXBlLgogCWlmIG10LCBvayA6PSBsZWdhY3lNZXNzYWdlVHlwZUNhY2hlLkxvYWQodCk7IG9rIHsKIAkJcmV0dXJuIG10LigqTWVzc2FnZUluZm8pCkBAIC02OCw3ICs2Niw3IEBACiAJCS8vIHN1cHBvcnRzIGRldGVybWluaXN0aWMgc2VyaWFsaXphdGlvbiBvciBub3QsIGJ1dCB0aGlzCiAJCS8vIHByZXNlcnZlcyB0aGUgdjEgaW1wbGVtZW50YXRpb24ncyBiZWhhdmlvciBvZiBhbHdheXMKIAkJLy8gY2FsbGluZyBNYXJzaGFsIG1ldGhvZHMgd2hlbiBwcmVzZW50LgotCQltaS5tZXRob2RzLkZsYWdzIHw9IHBpZmFjZS5TdXBwb3J0TWFyc2hhbERldGVybWluaXN0aWMKKwkJbWkubWV0aG9kcy5GbGFncyB8PSBwcm90b2lmYWNlLlN1cHBvcnRNYXJzaGFsRGV0ZXJtaW5pc3RpYwogCX0KIAlpZiBfLCBoYXNVbm1hcnNoYWwgPSB2LihsZWdhY3lVbm1hcnNoYWxlcik7IGhhc1VubWFyc2hhbCB7CiAJCW1pLm1ldGhvZHMuVW5tYXJzaGFsID0gbGVnYWN5VW5tYXJzaGFsCkBAIC04OSwxOCArODcsMTggQEAKIC8vIHdoaWNoIHNob3VsZCBiZSBhICpzdHJ1Y3Qga2luZCBhbmQgbXVzdCBub3QgaW1wbGVtZW50IHRoZSB2MiBBUEkgYWxyZWFkeS4KIC8vCiAvLyBUaGlzIGlzIGV4cG9ydGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgotZnVuYyBMZWdhY3lMb2FkTWVzc2FnZURlc2ModCByZWZsZWN0LlR5cGUpIHByZWYuTWVzc2FnZURlc2NyaXB0b3IgeworZnVuYyBMZWdhY3lMb2FkTWVzc2FnZURlc2ModCByZWZsZWN0LlR5cGUpIHByb3RvcmVmbGVjdC5NZXNzYWdlRGVzY3JpcHRvciB7CiAJcmV0dXJuIGxlZ2FjeUxvYWRNZXNzYWdlRGVzYyh0LCAiIikKIH0KLWZ1bmMgbGVnYWN5TG9hZE1lc3NhZ2VEZXNjKHQgcmVmbGVjdC5UeXBlLCBuYW1lIHByZWYuRnVsbE5hbWUpIHByZWYuTWVzc2FnZURlc2NyaXB0b3IgeworZnVuYyBsZWdhY3lMb2FkTWVzc2FnZURlc2ModCByZWZsZWN0LlR5cGUsIG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IgewogCS8vIEZhc3QtcGF0aDogY2hlY2sgaWYgYSBNZXNzYWdlRGVzY3JpcHRvciBpcyBjYWNoZWQgZm9yIHRoaXMgY29uY3JldGUgdHlwZS4KIAlpZiBtaSwgb2sgOj0gbGVnYWN5TWVzc2FnZURlc2NDYWNoZS5Mb2FkKHQpOyBvayB7Ci0JCXJldHVybiBtaS4ocHJlZi5NZXNzYWdlRGVzY3JpcHRvcikKKwkJcmV0dXJuIG1pLihwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IpCiAJfQogCiAJLy8gU2xvdy1wYXRoOiBpbml0aWFsaXplIE1lc3NhZ2VEZXNjcmlwdG9yIGZyb20gdGhlIHJhdyBkZXNjcmlwdG9yLgogCW12IDo9IHJlZmxlY3QuWmVybyh0KS5JbnRlcmZhY2UoKQotCWlmIF8sIG9rIDo9IG12LihwcmVmLlByb3RvTWVzc2FnZSk7IG9rIHsKKwlpZiBfLCBvayA6PSBtdi4ocHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSk7IG9rIHsKIAkJcGFuaWMoZm10LlNwcmludGYoIiV2IGFscmVhZHkgaW1wbGVtZW50cyBwcm90by5NZXNzYWdlIiwgdCkpCiAJfQogCW1kVjEsIG9rIDo9IG12LihtZXNzYWdlVjEpCkBAIC0xNjQsNyArMTYyLDcgQEAKIC8vCiAvLyBUaGlzIGlzIGEgYmVzdC1lZmZvcnQgZGVyaXZhdGlvbiBvZiB0aGUgbWVzc2FnZSBkZXNjcmlwdG9yIHVzaW5nIHRoZSBwcm90b2J1ZgogLy8gdGFncyBvbiB0aGUgc3RydWN0IGZpZWxkcy4KLWZ1bmMgYWJlcnJhbnRMb2FkTWVzc2FnZURlc2ModCByZWZsZWN0LlR5cGUsIG5hbWUgcHJlZi5GdWxsTmFtZSkgcHJlZi5NZXNzYWdlRGVzY3JpcHRvciB7CitmdW5jIGFiZXJyYW50TG9hZE1lc3NhZ2VEZXNjKHQgcmVmbGVjdC5UeXBlLCBuYW1lIHByb3RvcmVmbGVjdC5GdWxsTmFtZSkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yIHsKIAlhYmVycmFudE1lc3NhZ2VEZXNjTG9jay5Mb2NrKCkKIAlkZWZlciBhYmVycmFudE1lc3NhZ2VEZXNjTG9jay5VbmxvY2soKQogCWlmIGFiZXJyYW50TWVzc2FnZURlc2NDYWNoZSA9PSBuaWwgewpAQCAtMTcyLDcgKzE3MCw3IEBACiAJfQogCXJldHVybiBhYmVycmFudExvYWRNZXNzYWdlRGVzY1JlZW50cmFudCh0LCBuYW1lKQogfQotZnVuYyBhYmVycmFudExvYWRNZXNzYWdlRGVzY1JlZW50cmFudCh0IHJlZmxlY3QuVHlwZSwgbmFtZSBwcmVmLkZ1bGxOYW1lKSBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yIHsKK2Z1bmMgYWJlcnJhbnRMb2FkTWVzc2FnZURlc2NSZWVudHJhbnQodCByZWZsZWN0LlR5cGUsIG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IgewogCS8vIEZhc3QtcGF0aDogY2hlY2sgaWYgYW4gTWVzc2FnZURlc2NyaXB0b3IgaXMgY2FjaGVkIGZvciB0aGlzIGNvbmNyZXRlIHR5cGUuCiAJaWYgbWQsIG9rIDo9IGFiZXJyYW50TWVzc2FnZURlc2NDYWNoZVt0XTsgb2sgewogCQlyZXR1cm4gbWQKQEAgLTIwOCwxMyArMjA2LDE4IEBACiAKIAkvLyBPYnRhaW4gYSBsaXN0IG9mIG9uZW9mIHdyYXBwZXIgdHlwZXMuCiAJdmFyIG9uZW9mV3JhcHBlcnMgW11yZWZsZWN0LlR5cGUKLQlmb3IgXywgbWV0aG9kIDo9IHJhbmdlIFtdc3RyaW5neyJYWFhfT25lb2ZGdW5jcyIsICJYWFhfT25lb2ZXcmFwcGVycyJ9IHsKLQkJaWYgZm4sIG9rIDo9IHQuTWV0aG9kQnlOYW1lKG1ldGhvZCk7IG9rIHsKLQkJCWZvciBfLCB2IDo9IHJhbmdlIGZuLkZ1bmMuQ2FsbChbXXJlZmxlY3QuVmFsdWV7cmVmbGVjdC5aZXJvKGZuLlR5cGUuSW4oMCkpfSkgewotCQkJCWlmIHZzLCBvayA6PSB2LkludGVyZmFjZSgpLihbXWludGVyZmFjZXt9KTsgb2sgewotCQkJCQlmb3IgXywgdiA6PSByYW5nZSB2cyB7Ci0JCQkJCQlvbmVvZldyYXBwZXJzID0gYXBwZW5kKG9uZW9mV3JhcHBlcnMsIHJlZmxlY3QuVHlwZU9mKHYpKQotCQkJCQl9CisJbWV0aG9kcyA6PSBtYWtlKFtdcmVmbGVjdC5NZXRob2QsIDAsIDIpCisJaWYgbSwgb2sgOj0gdC5NZXRob2RCeU5hbWUoIlhYWF9PbmVvZkZ1bmNzIik7IG9rIHsKKwkJbWV0aG9kcyA9IGFwcGVuZChtZXRob2RzLCBtKQorCX0KKwlpZiBtLCBvayA6PSB0Lk1ldGhvZEJ5TmFtZSgiWFhYX09uZW9mV3JhcHBlcnMiKTsgb2sgeworCQltZXRob2RzID0gYXBwZW5kKG1ldGhvZHMsIG0pCisJfQorCWZvciBfLCBmbiA6PSByYW5nZSBtZXRob2RzIHsKKwkJZm9yIF8sIHYgOj0gcmFuZ2UgZm4uRnVuYy5DYWxsKFtdcmVmbGVjdC5WYWx1ZXtyZWZsZWN0Llplcm8oZm4uVHlwZS5JbigwKSl9KSB7CisJCQlpZiB2cywgb2sgOj0gdi5JbnRlcmZhY2UoKS4oW11pbnRlcmZhY2V7fSk7IG9rIHsKKwkJCQlmb3IgXywgdiA6PSByYW5nZSB2cyB7CisJCQkJCW9uZW9mV3JhcHBlcnMgPSBhcHBlbmQob25lb2ZXcmFwcGVycywgcmVmbGVjdC5UeXBlT2YodikpCiAJCQkJfQogCQkJfQogCQl9CkBAIC0yMjUsOSArMjI4LDkgQEAKIAkJdnMgOj0gZm4uRnVuYy5DYWxsKFtdcmVmbGVjdC5WYWx1ZXtyZWZsZWN0Llplcm8oZm4uVHlwZS5JbigwKSl9KVswXQogCQlmb3IgaSA6PSAwOyBpIDwgdnMuTGVuKCk7IGkrKyB7CiAJCQl2IDo9IHZzLkluZGV4KGkpCi0JCQltZC5MMi5FeHRlbnNpb25SYW5nZXMuTGlzdCA9IGFwcGVuZChtZC5MMi5FeHRlbnNpb25SYW5nZXMuTGlzdCwgWzJdcHJlZi5GaWVsZE51bWJlcnsKLQkJCQlwcmVmLkZpZWxkTnVtYmVyKHYuRmllbGRCeU5hbWUoIlN0YXJ0IikuSW50KCkpLAotCQkJCXByZWYuRmllbGROdW1iZXIodi5GaWVsZEJ5TmFtZSgiRW5kIikuSW50KCkgKyAxKSwKKwkJCW1kLkwyLkV4dGVuc2lvblJhbmdlcy5MaXN0ID0gYXBwZW5kKG1kLkwyLkV4dGVuc2lvblJhbmdlcy5MaXN0LCBbMl1wcm90b3JlZmxlY3QuRmllbGROdW1iZXJ7CisJCQkJcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKHYuRmllbGRCeU5hbWUoIlN0YXJ0IikuSW50KCkpLAorCQkJCXByb3RvcmVmbGVjdC5GaWVsZE51bWJlcih2LkZpZWxkQnlOYW1lKCJFbmQiKS5JbnQoKSArIDEpLAogCQkJfSkKIAkJCW1kLkwyLkV4dGVuc2lvblJhbmdlT3B0aW9ucyA9IGFwcGVuZChtZC5MMi5FeHRlbnNpb25SYW5nZU9wdGlvbnMsIG5pbCkKIAkJfQpAQCAtMjQ1LDcgKzI0OCw3IEBACiAJCQluIDo9IGxlbihtZC5MMi5PbmVvZnMuTGlzdCkKIAkJCW1kLkwyLk9uZW9mcy5MaXN0ID0gYXBwZW5kKG1kLkwyLk9uZW9mcy5MaXN0LCBmaWxlZGVzYy5PbmVvZnt9KQogCQkJb2QgOj0gJm1kLkwyLk9uZW9mcy5MaXN0W25dCi0JCQlvZC5MMC5GdWxsTmFtZSA9IG1kLkZ1bGxOYW1lKCkuQXBwZW5kKHByZWYuTmFtZSh0YWcpKQorCQkJb2QuTDAuRnVsbE5hbWUgPSBtZC5GdWxsTmFtZSgpLkFwcGVuZChwcm90b3JlZmxlY3QuTmFtZSh0YWcpKQogCQkJb2QuTDAuUGFyZW50RmlsZSA9IG1kLkwwLlBhcmVudEZpbGUKIAkJCW9kLkwwLlBhcmVudCA9IG1kCiAJCQlvZC5MMC5JbmRleCA9IG4KQEAgLTI2NywxNCArMjcwLDE0IEBACiAJcmV0dXJuIG1kCiB9CiAKLWZ1bmMgYWJlcnJhbnREZXJpdmVNZXNzYWdlTmFtZSh0IHJlZmxlY3QuVHlwZSwgbmFtZSBwcmVmLkZ1bGxOYW1lKSBwcmVmLkZ1bGxOYW1lIHsKK2Z1bmMgYWJlcnJhbnREZXJpdmVNZXNzYWdlTmFtZSh0IHJlZmxlY3QuVHlwZSwgbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUpIHByb3RvcmVmbGVjdC5GdWxsTmFtZSB7CiAJaWYgbmFtZS5Jc1ZhbGlkKCkgewogCQlyZXR1cm4gbmFtZQogCX0KIAlmdW5jKCkgewogCQlkZWZlciBmdW5jKCkgeyByZWNvdmVyKCkgfSgpIC8vIHN3YWxsb3cgcG9zc2libGUgbmlsIHBhbmljcwogCQlpZiBtLCBvayA6PSByZWZsZWN0Llplcm8odCkuSW50ZXJmYWNlKCkuKGludGVyZmFjZXsgWFhYX01lc3NhZ2VOYW1lKCkgc3RyaW5nIH0pOyBvayB7Ci0JCQluYW1lID0gcHJlZi5GdWxsTmFtZShtLlhYWF9NZXNzYWdlTmFtZSgpKQorCQkJbmFtZSA9IHByb3RvcmVmbGVjdC5GdWxsTmFtZShtLlhYWF9NZXNzYWdlTmFtZSgpKQogCQl9CiAJfSgpCiAJaWYgbmFtZS5Jc1ZhbGlkKCkgewpAQCAtMzA1LDcgKzMwOCw3IEBACiAJZmQuTDAuSW5kZXggPSBuCiAKIAlpZiBmZC5MMS5Jc1dlYWsgfHwgZmQuTDEuSGFzUGFja2VkIHsKLQkJZmQuTDEuT3B0aW9ucyA9IGZ1bmMoKSBwcmVmLlByb3RvTWVzc2FnZSB7CisJCWZkLkwxLk9wdGlvbnMgPSBmdW5jKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSB7CiAJCQlvcHRzIDo9IGRlc2NvcHRzLkZpZWxkLlByb3RvUmVmbGVjdCgpLk5ldygpCiAJCQlpZiBmZC5MMS5Jc1dlYWsgewogCQkJCW9wdHMuU2V0KG9wdHMuRGVzY3JpcHRvcigpLkZpZWxkcygpLkJ5TmFtZSgid2VhayIpLCBwcm90b3JlZmxlY3QuVmFsdWVPZkJvb2wodHJ1ZSkpCkBAIC0zMTgsMTcgKzMyMSwxNyBAQAogCX0KIAogCS8vIFBvcHVsYXRlIEVudW0gYW5kIE1lc3NhZ2UuCi0JaWYgZmQuRW51bSgpID09IG5pbCAmJiBmZC5LaW5kKCkgPT0gcHJlZi5FbnVtS2luZCB7CisJaWYgZmQuRW51bSgpID09IG5pbCAmJiBmZC5LaW5kKCkgPT0gcHJvdG9yZWZsZWN0LkVudW1LaW5kIHsKIAkJc3dpdGNoIHYgOj0gcmVmbGVjdC5aZXJvKHQpLkludGVyZmFjZSgpLih0eXBlKSB7Ci0JCWNhc2UgcHJlZi5FbnVtOgorCQljYXNlIHByb3RvcmVmbGVjdC5FbnVtOgogCQkJZmQuTDEuRW51bSA9IHYuRGVzY3JpcHRvcigpCiAJCWRlZmF1bHQ6CiAJCQlmZC5MMS5FbnVtID0gTGVnYWN5TG9hZEVudW1EZXNjKHQpCiAJCX0KIAl9Ci0JaWYgZmQuTWVzc2FnZSgpID09IG5pbCAmJiAoZmQuS2luZCgpID09IHByZWYuTWVzc2FnZUtpbmQgfHwgZmQuS2luZCgpID09IHByZWYuR3JvdXBLaW5kKSB7CisJaWYgZmQuTWVzc2FnZSgpID09IG5pbCAmJiAoZmQuS2luZCgpID09IHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZCB8fCBmZC5LaW5kKCkgPT0gcHJvdG9yZWZsZWN0Lkdyb3VwS2luZCkgewogCQlzd2l0Y2ggdiA6PSByZWZsZWN0Llplcm8odCkuSW50ZXJmYWNlKCkuKHR5cGUpIHsKLQkJY2FzZSBwcmVmLlByb3RvTWVzc2FnZToKKwkJY2FzZSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlOgogCQkJZmQuTDEuTWVzc2FnZSA9IHYuUHJvdG9SZWZsZWN0KCkuRGVzY3JpcHRvcigpCiAJCWNhc2UgbWVzc2FnZVYxOgogCQkJZmQuTDEuTWVzc2FnZSA9IExlZ2FjeUxvYWRNZXNzYWdlRGVzYyh0KQpAQCAtMzM3LDEzICszNDAsMTMgQEAKIAkJCQluIDo9IGxlbihtZC5MMS5NZXNzYWdlcy5MaXN0KQogCQkJCW1kLkwxLk1lc3NhZ2VzLkxpc3QgPSBhcHBlbmQobWQuTDEuTWVzc2FnZXMuTGlzdCwgZmlsZWRlc2MuTWVzc2FnZXtMMjogbmV3KGZpbGVkZXNjLk1lc3NhZ2VMMil9KQogCQkJCW1kMiA6PSAmbWQuTDEuTWVzc2FnZXMuTGlzdFtuXQotCQkJCW1kMi5MMC5GdWxsTmFtZSA9IG1kLkZ1bGxOYW1lKCkuQXBwZW5kKHByZWYuTmFtZShzdHJzLk1hcEVudHJ5TmFtZShzdHJpbmcoZmQuTmFtZSgpKSkpKQorCQkJCW1kMi5MMC5GdWxsTmFtZSA9IG1kLkZ1bGxOYW1lKCkuQXBwZW5kKHByb3RvcmVmbGVjdC5OYW1lKHN0cnMuTWFwRW50cnlOYW1lKHN0cmluZyhmZC5OYW1lKCkpKSkpCiAJCQkJbWQyLkwwLlBhcmVudEZpbGUgPSBtZC5MMC5QYXJlbnRGaWxlCiAJCQkJbWQyLkwwLlBhcmVudCA9IG1kCiAJCQkJbWQyLkwwLkluZGV4ID0gbgogCiAJCQkJbWQyLkwxLklzTWFwRW50cnkgPSB0cnVlCi0JCQkJbWQyLkwyLk9wdGlvbnMgPSBmdW5jKCkgcHJlZi5Qcm90b01lc3NhZ2UgeworCQkJCW1kMi5MMi5PcHRpb25zID0gZnVuYygpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgewogCQkJCQlvcHRzIDo9IGRlc2NvcHRzLk1lc3NhZ2UuUHJvdG9SZWZsZWN0KCkuTmV3KCkKIAkJCQkJb3B0cy5TZXQob3B0cy5EZXNjcmlwdG9yKCkuRmllbGRzKCkuQnlOYW1lKCJtYXBfZW50cnkiKSwgcHJvdG9yZWZsZWN0LlZhbHVlT2ZCb29sKHRydWUpKQogCQkJCQlyZXR1cm4gb3B0cy5JbnRlcmZhY2UoKQpAQCAtMzY0LDggKzM2Nyw4IEBACiAJcHJvdG9yZWZsZWN0LkVudW1WYWx1ZURlc2NyaXB0b3JzCiB9CiAKLWZ1bmMgKHBsYWNlaG9sZGVyRW51bVZhbHVlcykgQnlOdW1iZXIobiBwcmVmLkVudW1OdW1iZXIpIHByZWYuRW51bVZhbHVlRGVzY3JpcHRvciB7Ci0JcmV0dXJuIGZpbGVkZXNjLlBsYWNlaG9sZGVyRW51bVZhbHVlKHByZWYuRnVsbE5hbWUoZm10LlNwcmludGYoIlVOS05PV05fJWQiLCBuKSkpCitmdW5jIChwbGFjZWhvbGRlckVudW1WYWx1ZXMpIEJ5TnVtYmVyKG4gcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIpIHByb3RvcmVmbGVjdC5FbnVtVmFsdWVEZXNjcmlwdG9yIHsKKwlyZXR1cm4gZmlsZWRlc2MuUGxhY2Vob2xkZXJFbnVtVmFsdWUocHJvdG9yZWZsZWN0LkZ1bGxOYW1lKGZtdC5TcHJpbnRmKCJVTktOT1dOXyVkIiwgbikpKQogfQogCiAvLyBsZWdhY3lNYXJzaGFsZXIgaXMgdGhlIHByb3RvLk1hcnNoYWxlciBpbnRlcmZhY2Ugc3VwZXJzZWRlZCBieSBwcm90b2lmYWNlLk1ldGhvZGVyLgpAQCAtMzgzLDcgKzM4Niw3IEBACiAJTWVyZ2UocHJvdG9pZmFjZS5NZXNzYWdlVjEpCiB9CiAKLXZhciBhYmVycmFudFByb3RvTWV0aG9kcyA9ICZwaWZhY2UuTWV0aG9kc3sKK3ZhciBhYmVycmFudFByb3RvTWV0aG9kcyA9ICZwcm90b2lmYWNlLk1ldGhvZHN7CiAJTWFyc2hhbDogICBsZWdhY3lNYXJzaGFsLAogCVVubWFyc2hhbDogbGVnYWN5VW5tYXJzaGFsLAogCU1lcmdlOiAgICAgbGVnYWN5TWVyZ2UsCkBAIC0zOTIsNDAgKzM5NSw0MCBAQAogCS8vIHN1cHBvcnRzIGRldGVybWluaXN0aWMgc2VyaWFsaXphdGlvbiBvciBub3QsIGJ1dCB0aGlzCiAJLy8gcHJlc2VydmVzIHRoZSB2MSBpbXBsZW1lbnRhdGlvbidzIGJlaGF2aW9yIG9mIGFsd2F5cwogCS8vIGNhbGxpbmcgTWFyc2hhbCBtZXRob2RzIHdoZW4gcHJlc2VudC4KLQlGbGFnczogcGlmYWNlLlN1cHBvcnRNYXJzaGFsRGV0ZXJtaW5pc3RpYywKKwlGbGFnczogcHJvdG9pZmFjZS5TdXBwb3J0TWFyc2hhbERldGVybWluaXN0aWMsCiB9CiAKLWZ1bmMgbGVnYWN5TWFyc2hhbChpbiBwaWZhY2UuTWFyc2hhbElucHV0KSAocGlmYWNlLk1hcnNoYWxPdXRwdXQsIGVycm9yKSB7CitmdW5jIGxlZ2FjeU1hcnNoYWwoaW4gcHJvdG9pZmFjZS5NYXJzaGFsSW5wdXQpIChwcm90b2lmYWNlLk1hcnNoYWxPdXRwdXQsIGVycm9yKSB7CiAJdiA6PSBpbi5NZXNzYWdlLih1bndyYXBwZXIpLnByb3RvVW53cmFwKCkKIAltYXJzaGFsZXIsIG9rIDo9IHYuKGxlZ2FjeU1hcnNoYWxlcikKIAlpZiAhb2sgewotCQlyZXR1cm4gcGlmYWNlLk1hcnNoYWxPdXRwdXR7fSwgZXJyb3JzLk5ldygiJVQgZG9lcyBub3QgaW1wbGVtZW50IE1hcnNoYWwiLCB2KQorCQlyZXR1cm4gcHJvdG9pZmFjZS5NYXJzaGFsT3V0cHV0e30sIGVycm9ycy5OZXcoIiVUIGRvZXMgbm90IGltcGxlbWVudCBNYXJzaGFsIiwgdikKIAl9CiAJb3V0LCBlcnIgOj0gbWFyc2hhbGVyLk1hcnNoYWwoKQogCWlmIGluLkJ1ZiAhPSBuaWwgewogCQlvdXQgPSBhcHBlbmQoaW4uQnVmLCBvdXQuLi4pCiAJfQotCXJldHVybiBwaWZhY2UuTWFyc2hhbE91dHB1dHsKKwlyZXR1cm4gcHJvdG9pZmFjZS5NYXJzaGFsT3V0cHV0ewogCQlCdWY6IG91dCwKIAl9LCBlcnIKIH0KIAotZnVuYyBsZWdhY3lVbm1hcnNoYWwoaW4gcGlmYWNlLlVubWFyc2hhbElucHV0KSAocGlmYWNlLlVubWFyc2hhbE91dHB1dCwgZXJyb3IpIHsKK2Z1bmMgbGVnYWN5VW5tYXJzaGFsKGluIHByb3RvaWZhY2UuVW5tYXJzaGFsSW5wdXQpIChwcm90b2lmYWNlLlVubWFyc2hhbE91dHB1dCwgZXJyb3IpIHsKIAl2IDo9IGluLk1lc3NhZ2UuKHVud3JhcHBlcikucHJvdG9VbndyYXAoKQogCXVubWFyc2hhbGVyLCBvayA6PSB2LihsZWdhY3lVbm1hcnNoYWxlcikKIAlpZiAhb2sgewotCQlyZXR1cm4gcGlmYWNlLlVubWFyc2hhbE91dHB1dHt9LCBlcnJvcnMuTmV3KCIlVCBkb2VzIG5vdCBpbXBsZW1lbnQgVW5tYXJzaGFsIiwgdikKKwkJcmV0dXJuIHByb3RvaWZhY2UuVW5tYXJzaGFsT3V0cHV0e30sIGVycm9ycy5OZXcoIiVUIGRvZXMgbm90IGltcGxlbWVudCBVbm1hcnNoYWwiLCB2KQogCX0KLQlyZXR1cm4gcGlmYWNlLlVubWFyc2hhbE91dHB1dHt9LCB1bm1hcnNoYWxlci5Vbm1hcnNoYWwoaW4uQnVmKQorCXJldHVybiBwcm90b2lmYWNlLlVubWFyc2hhbE91dHB1dHt9LCB1bm1hcnNoYWxlci5Vbm1hcnNoYWwoaW4uQnVmKQogfQogCi1mdW5jIGxlZ2FjeU1lcmdlKGluIHBpZmFjZS5NZXJnZUlucHV0KSBwaWZhY2UuTWVyZ2VPdXRwdXQgeworZnVuYyBsZWdhY3lNZXJnZShpbiBwcm90b2lmYWNlLk1lcmdlSW5wdXQpIHByb3RvaWZhY2UuTWVyZ2VPdXRwdXQgewogCS8vIENoZWNrIHdoZXRoZXIgdGhpcyBzdXBwb3J0cyB0aGUgbGVnYWN5IG1lcmdlci4KIAlkc3R2IDo9IGluLkRlc3RpbmF0aW9uLih1bndyYXBwZXIpLnByb3RvVW53cmFwKCkKIAltZXJnZXIsIG9rIDo9IGRzdHYuKGxlZ2FjeU1lcmdlcikKIAlpZiBvayB7CiAJCW1lcmdlci5NZXJnZShFeHBvcnR7fS5Qcm90b01lc3NhZ2VWMU9mKGluLlNvdXJjZSkpCi0JCXJldHVybiBwaWZhY2UuTWVyZ2VPdXRwdXR7RmxhZ3M6IHBpZmFjZS5NZXJnZUNvbXBsZXRlfQorCQlyZXR1cm4gcHJvdG9pZmFjZS5NZXJnZU91dHB1dHtGbGFnczogcHJvdG9pZmFjZS5NZXJnZUNvbXBsZXRlfQogCX0KIAogCS8vIElmIGxlZ2FjeSBtZXJnZXIgaXMgdW5hdmFpbGFibGUsIGltcGxlbWVudCBtZXJnZSBpbiB0ZXJtcyBvZgpAQCAtNDMzLDI5ICs0MzYsMjkgQEAKIAlzcmN2IDo9IGluLlNvdXJjZS4odW53cmFwcGVyKS5wcm90b1Vud3JhcCgpCiAJbWFyc2hhbGVyLCBvayA6PSBzcmN2LihsZWdhY3lNYXJzaGFsZXIpCiAJaWYgIW9rIHsKLQkJcmV0dXJuIHBpZmFjZS5NZXJnZU91dHB1dHt9CisJCXJldHVybiBwcm90b2lmYWNlLk1lcmdlT3V0cHV0e30KIAl9CiAJZHN0diA9IGluLkRlc3RpbmF0aW9uLih1bndyYXBwZXIpLnByb3RvVW53cmFwKCkKIAl1bm1hcnNoYWxlciwgb2sgOj0gZHN0di4obGVnYWN5VW5tYXJzaGFsZXIpCiAJaWYgIW9rIHsKLQkJcmV0dXJuIHBpZmFjZS5NZXJnZU91dHB1dHt9CisJCXJldHVybiBwcm90b2lmYWNlLk1lcmdlT3V0cHV0e30KIAl9CiAJaWYgIWluLlNvdXJjZS5Jc1ZhbGlkKCkgewogCQkvLyBMZWdhY3kgTWFyc2hhbCBtZXRob2RzIG1heSBub3QgZnVuY3Rpb24gb24gbmlsIG1lc3NhZ2VzLgogCQkvLyBDaGVjayBmb3IgYSB0eXBlZCBuaWwgc291cmNlIG9ubHkgYWZ0ZXIgd2UgY29uZmlybSB0aGF0CiAJCS8vIGxlZ2FjeSBNYXJzaGFsL1VubWFyc2hhbCBtZXRob2RzIGFyZSBwcmVzZW50LCBmb3IKIAkJLy8gY29uc2lzdGVuY3kuCi0JCXJldHVybiBwaWZhY2UuTWVyZ2VPdXRwdXR7RmxhZ3M6IHBpZmFjZS5NZXJnZUNvbXBsZXRlfQorCQlyZXR1cm4gcHJvdG9pZmFjZS5NZXJnZU91dHB1dHtGbGFnczogcHJvdG9pZmFjZS5NZXJnZUNvbXBsZXRlfQogCX0KIAliLCBlcnIgOj0gbWFyc2hhbGVyLk1hcnNoYWwoKQogCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gcGlmYWNlLk1lcmdlT3V0cHV0e30KKwkJcmV0dXJuIHByb3RvaWZhY2UuTWVyZ2VPdXRwdXR7fQogCX0KIAllcnIgPSB1bm1hcnNoYWxlci5Vbm1hcnNoYWwoYikKIAlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIHBpZmFjZS5NZXJnZU91dHB1dHt9CisJCXJldHVybiBwcm90b2lmYWNlLk1lcmdlT3V0cHV0e30KIAl9Ci0JcmV0dXJuIHBpZmFjZS5NZXJnZU91dHB1dHtGbGFnczogcGlmYWNlLk1lcmdlQ29tcGxldGV9CisJcmV0dXJuIHByb3RvaWZhY2UuTWVyZ2VPdXRwdXR7RmxhZ3M6IHByb3RvaWZhY2UuTWVyZ2VDb21wbGV0ZX0KIH0KIAogLy8gYWJlcnJhbnRNZXNzYWdlVHlwZSBpbXBsZW1lbnRzIE1lc3NhZ2VUeXBlIGZvciBhbGwgdHlwZXMgb3RoZXIgdGhhbiBwb2ludGVyLXRvLXN0cnVjdC4KQEAgLTQ2MywxOSArNDY2LDE5IEBACiAJdCByZWZsZWN0LlR5cGUKIH0KIAotZnVuYyAobXQgYWJlcnJhbnRNZXNzYWdlVHlwZSkgTmV3KCkgcHJlZi5NZXNzYWdlIHsKK2Z1bmMgKG10IGFiZXJyYW50TWVzc2FnZVR5cGUpIE5ldygpIHByb3RvcmVmbGVjdC5NZXNzYWdlIHsKIAlpZiBtdC50LktpbmQoKSA9PSByZWZsZWN0LlB0ciB7CiAJCXJldHVybiBhYmVycmFudE1lc3NhZ2V7cmVmbGVjdC5OZXcobXQudC5FbGVtKCkpfQogCX0KIAlyZXR1cm4gYWJlcnJhbnRNZXNzYWdle3JlZmxlY3QuWmVybyhtdC50KX0KIH0KLWZ1bmMgKG10IGFiZXJyYW50TWVzc2FnZVR5cGUpIFplcm8oKSBwcmVmLk1lc3NhZ2UgeworZnVuYyAobXQgYWJlcnJhbnRNZXNzYWdlVHlwZSkgWmVybygpIHByb3RvcmVmbGVjdC5NZXNzYWdlIHsKIAlyZXR1cm4gYWJlcnJhbnRNZXNzYWdle3JlZmxlY3QuWmVybyhtdC50KX0KIH0KIGZ1bmMgKG10IGFiZXJyYW50TWVzc2FnZVR5cGUpIEdvVHlwZSgpIHJlZmxlY3QuVHlwZSB7CiAJcmV0dXJuIG10LnQKIH0KLWZ1bmMgKG10IGFiZXJyYW50TWVzc2FnZVR5cGUpIERlc2NyaXB0b3IoKSBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yIHsKK2Z1bmMgKG10IGFiZXJyYW50TWVzc2FnZVR5cGUpIERlc2NyaXB0b3IoKSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IgewogCXJldHVybiBMZWdhY3lMb2FkTWVzc2FnZURlc2MobXQudCkKIH0KIApAQCAtNDk5LDU2ICs1MDIsNTYgQEAKIAl9CiB9CiAKLWZ1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBQcm90b1JlZmxlY3QoKSBwcmVmLk1lc3NhZ2UgeworZnVuYyAobSBhYmVycmFudE1lc3NhZ2UpIFByb3RvUmVmbGVjdCgpIHByb3RvcmVmbGVjdC5NZXNzYWdlIHsKIAlyZXR1cm4gbQogfQogCi1mdW5jIChtIGFiZXJyYW50TWVzc2FnZSkgRGVzY3JpcHRvcigpIHByZWYuTWVzc2FnZURlc2NyaXB0b3IgeworZnVuYyAobSBhYmVycmFudE1lc3NhZ2UpIERlc2NyaXB0b3IoKSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IgewogCXJldHVybiBMZWdhY3lMb2FkTWVzc2FnZURlc2MobS52LlR5cGUoKSkKIH0KLWZ1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBUeXBlKCkgcHJlZi5NZXNzYWdlVHlwZSB7CitmdW5jIChtIGFiZXJyYW50TWVzc2FnZSkgVHlwZSgpIHByb3RvcmVmbGVjdC5NZXNzYWdlVHlwZSB7CiAJcmV0dXJuIGFiZXJyYW50TWVzc2FnZVR5cGV7bS52LlR5cGUoKX0KIH0KLWZ1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBOZXcoKSBwcmVmLk1lc3NhZ2UgeworZnVuYyAobSBhYmVycmFudE1lc3NhZ2UpIE5ldygpIHByb3RvcmVmbGVjdC5NZXNzYWdlIHsKIAlpZiBtLnYuVHlwZSgpLktpbmQoKSA9PSByZWZsZWN0LlB0ciB7CiAJCXJldHVybiBhYmVycmFudE1lc3NhZ2V7cmVmbGVjdC5OZXcobS52LlR5cGUoKS5FbGVtKCkpfQogCX0KIAlyZXR1cm4gYWJlcnJhbnRNZXNzYWdle3JlZmxlY3QuWmVybyhtLnYuVHlwZSgpKX0KIH0KLWZ1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBJbnRlcmZhY2UoKSBwcmVmLlByb3RvTWVzc2FnZSB7CitmdW5jIChtIGFiZXJyYW50TWVzc2FnZSkgSW50ZXJmYWNlKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSB7CiAJcmV0dXJuIG0KIH0KLWZ1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBSYW5nZShmIGZ1bmMocHJlZi5GaWVsZERlc2NyaXB0b3IsIHByZWYuVmFsdWUpIGJvb2wpIHsKK2Z1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBSYW5nZShmIGZ1bmMocHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciwgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sKSB7CiAJcmV0dXJuCiB9Ci1mdW5jIChtIGFiZXJyYW50TWVzc2FnZSkgSGFzKHByZWYuRmllbGREZXNjcmlwdG9yKSBib29sIHsKK2Z1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBIYXMocHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgYm9vbCB7CiAJcmV0dXJuIGZhbHNlCiB9Ci1mdW5jIChtIGFiZXJyYW50TWVzc2FnZSkgQ2xlYXIocHJlZi5GaWVsZERlc2NyaXB0b3IpIHsKK2Z1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBDbGVhcihwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSB7CiAJcGFuaWMoImludmFsaWQgTWVzc2FnZS5DbGVhciBvbiAiICsgc3RyaW5nKG0uRGVzY3JpcHRvcigpLkZ1bGxOYW1lKCkpKQogfQotZnVuYyAobSBhYmVycmFudE1lc3NhZ2UpIEdldChmZCBwcmVmLkZpZWxkRGVzY3JpcHRvcikgcHJlZi5WYWx1ZSB7CitmdW5jIChtIGFiZXJyYW50TWVzc2FnZSkgR2V0KGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJaWYgZmQuRGVmYXVsdCgpLklzVmFsaWQoKSB7CiAJCXJldHVybiBmZC5EZWZhdWx0KCkKIAl9CiAJcGFuaWMoImludmFsaWQgTWVzc2FnZS5HZXQgb24gIiArIHN0cmluZyhtLkRlc2NyaXB0b3IoKS5GdWxsTmFtZSgpKSkKIH0KLWZ1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBTZXQocHJlZi5GaWVsZERlc2NyaXB0b3IsIHByZWYuVmFsdWUpIHsKK2Z1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBTZXQocHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciwgcHJvdG9yZWZsZWN0LlZhbHVlKSB7CiAJcGFuaWMoImludmFsaWQgTWVzc2FnZS5TZXQgb24gIiArIHN0cmluZyhtLkRlc2NyaXB0b3IoKS5GdWxsTmFtZSgpKSkKIH0KLWZ1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBNdXRhYmxlKHByZWYuRmllbGREZXNjcmlwdG9yKSBwcmVmLlZhbHVlIHsKK2Z1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBNdXRhYmxlKHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJcGFuaWMoImludmFsaWQgTWVzc2FnZS5NdXRhYmxlIG9uICIgKyBzdHJpbmcobS5EZXNjcmlwdG9yKCkuRnVsbE5hbWUoKSkpCiB9Ci1mdW5jIChtIGFiZXJyYW50TWVzc2FnZSkgTmV3RmllbGQocHJlZi5GaWVsZERlc2NyaXB0b3IpIHByZWYuVmFsdWUgeworZnVuYyAobSBhYmVycmFudE1lc3NhZ2UpIE5ld0ZpZWxkKHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJcGFuaWMoImludmFsaWQgTWVzc2FnZS5OZXdGaWVsZCBvbiAiICsgc3RyaW5nKG0uRGVzY3JpcHRvcigpLkZ1bGxOYW1lKCkpKQogfQotZnVuYyAobSBhYmVycmFudE1lc3NhZ2UpIFdoaWNoT25lb2YocHJlZi5PbmVvZkRlc2NyaXB0b3IpIHByZWYuRmllbGREZXNjcmlwdG9yIHsKK2Z1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBXaGljaE9uZW9mKHByb3RvcmVmbGVjdC5PbmVvZkRlc2NyaXB0b3IpIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IgewogCXBhbmljKCJpbnZhbGlkIE1lc3NhZ2UuV2hpY2hPbmVvZiBkZXNjcmlwdG9yIG9uICIgKyBzdHJpbmcobS5EZXNjcmlwdG9yKCkuRnVsbE5hbWUoKSkpCiB9Ci1mdW5jIChtIGFiZXJyYW50TWVzc2FnZSkgR2V0VW5rbm93bigpIHByZWYuUmF3RmllbGRzIHsKK2Z1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBHZXRVbmtub3duKCkgcHJvdG9yZWZsZWN0LlJhd0ZpZWxkcyB7CiAJcmV0dXJuIG5pbAogfQotZnVuYyAobSBhYmVycmFudE1lc3NhZ2UpIFNldFVua25vd24ocHJlZi5SYXdGaWVsZHMpIHsKK2Z1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBTZXRVbmtub3duKHByb3RvcmVmbGVjdC5SYXdGaWVsZHMpIHsKIAkvLyBTZXRVbmtub3duIGRpc2NhcmRzIGl0cyBpbnB1dCBvbiBtZXNzYWdlcyB3aGljaCBkb24ndCBzdXBwb3J0IHVua25vd24gZmllbGQgc3RvcmFnZS4KIH0KIGZ1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBJc1ZhbGlkKCkgYm9vbCB7CkBAIC01NTcsNyArNTYwLDcgQEAKIAl9CiAJcmV0dXJuIGZhbHNlCiB9Ci1mdW5jIChtIGFiZXJyYW50TWVzc2FnZSkgUHJvdG9NZXRob2RzKCkgKnBpZmFjZS5NZXRob2RzIHsKK2Z1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBQcm90b01ldGhvZHMoKSAqcHJvdG9pZmFjZS5NZXRob2RzIHsKIAlyZXR1cm4gYWJlcnJhbnRQcm90b01ldGhvZHMKIH0KIGZ1bmMgKG0gYWJlcnJhbnRNZXNzYWdlKSBwcm90b1Vud3JhcCgpIGludGVyZmFjZXt9IHsKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL21lcmdlLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbWVyZ2UuZ28KaW5kZXggYzY1YmJjMC4uN2U2NWY2NCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbWVyZ2UuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbWVyZ2UuZ28KQEAgLTksOCArOSw4IEBACiAJInJlZmxlY3QiCiAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8iCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCi0JcGlmYWNlICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UiCiApCiAKIHR5cGUgbWVyZ2VPcHRpb25zIHN0cnVjdHt9CkBAIC0yMCwxNyArMjAsMTcgQEAKIH0KIAogLy8gbWVyZ2UgaXMgcHJvdG9yZWZsZWN0Lk1ldGhvZHMuTWVyZ2UuCi1mdW5jIChtaSAqTWVzc2FnZUluZm8pIG1lcmdlKGluIHBpZmFjZS5NZXJnZUlucHV0KSBwaWZhY2UuTWVyZ2VPdXRwdXQgeworZnVuYyAobWkgKk1lc3NhZ2VJbmZvKSBtZXJnZShpbiBwcm90b2lmYWNlLk1lcmdlSW5wdXQpIHByb3RvaWZhY2UuTWVyZ2VPdXRwdXQgewogCWRwLCBvayA6PSBtaS5nZXRQb2ludGVyKGluLkRlc3RpbmF0aW9uKQogCWlmICFvayB7Ci0JCXJldHVybiBwaWZhY2UuTWVyZ2VPdXRwdXR7fQorCQlyZXR1cm4gcHJvdG9pZmFjZS5NZXJnZU91dHB1dHt9CiAJfQogCXNwLCBvayA6PSBtaS5nZXRQb2ludGVyKGluLlNvdXJjZSkKIAlpZiAhb2sgewotCQlyZXR1cm4gcGlmYWNlLk1lcmdlT3V0cHV0e30KKwkJcmV0dXJuIHByb3RvaWZhY2UuTWVyZ2VPdXRwdXR7fQogCX0KIAltaS5tZXJnZVBvaW50ZXIoZHAsIHNwLCBtZXJnZU9wdGlvbnN7fSkKLQlyZXR1cm4gcGlmYWNlLk1lcmdlT3V0cHV0e0ZsYWdzOiBwaWZhY2UuTWVyZ2VDb21wbGV0ZX0KKwlyZXR1cm4gcHJvdG9pZmFjZS5NZXJnZU91dHB1dHtGbGFnczogcHJvdG9pZmFjZS5NZXJnZUNvbXBsZXRlfQogfQogCiBmdW5jIChtaSAqTWVzc2FnZUluZm8pIG1lcmdlUG9pbnRlcihkc3QsIHNyYyBwb2ludGVyLCBvcHRzIG1lcmdlT3B0aW9ucykgewpAQCAtNjQsNyArNjQsNyBAQAogCQkJCWNvbnRpbnVlCiAJCQl9CiAJCQlkeCA6PSAoKmRleHQpW251bV0KLQkJCXZhciBkdiBwcmVmLlZhbHVlCisJCQl2YXIgZHYgcHJvdG9yZWZsZWN0LlZhbHVlCiAJCQlpZiBkeC5UeXBlKCkgPT0gc3guVHlwZSgpIHsKIAkJCQlkdiA9IGR4LlZhbHVlKCkKIAkJCX0KQEAgLTg1LDE1ICs4NSwxNSBAQAogCX0KIH0KIAotZnVuYyBtZXJnZVNjYWxhclZhbHVlKGRzdCwgc3JjIHByZWYuVmFsdWUsIG9wdHMgbWVyZ2VPcHRpb25zKSBwcmVmLlZhbHVlIHsKK2Z1bmMgbWVyZ2VTY2FsYXJWYWx1ZShkc3QsIHNyYyBwcm90b3JlZmxlY3QuVmFsdWUsIG9wdHMgbWVyZ2VPcHRpb25zKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCXJldHVybiBzcmMKIH0KIAotZnVuYyBtZXJnZUJ5dGVzVmFsdWUoZHN0LCBzcmMgcHJlZi5WYWx1ZSwgb3B0cyBtZXJnZU9wdGlvbnMpIHByZWYuVmFsdWUgewotCXJldHVybiBwcmVmLlZhbHVlT2ZCeXRlcyhhcHBlbmQoZW1wdHlCdWZbOl0sIHNyYy5CeXRlcygpLi4uKSkKK2Z1bmMgbWVyZ2VCeXRlc1ZhbHVlKGRzdCwgc3JjIHByb3RvcmVmbGVjdC5WYWx1ZSwgb3B0cyBtZXJnZU9wdGlvbnMpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CisJcmV0dXJuIHByb3RvcmVmbGVjdC5WYWx1ZU9mQnl0ZXMoYXBwZW5kKGVtcHR5QnVmWzpdLCBzcmMuQnl0ZXMoKS4uLikpCiB9CiAKLWZ1bmMgbWVyZ2VMaXN0VmFsdWUoZHN0LCBzcmMgcHJlZi5WYWx1ZSwgb3B0cyBtZXJnZU9wdGlvbnMpIHByZWYuVmFsdWUgeworZnVuYyBtZXJnZUxpc3RWYWx1ZShkc3QsIHNyYyBwcm90b3JlZmxlY3QuVmFsdWUsIG9wdHMgbWVyZ2VPcHRpb25zKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCWRzdGwgOj0gZHN0Lkxpc3QoKQogCXNyY2wgOj0gc3JjLkxpc3QoKQogCWZvciBpLCBsbGVuIDo9IDAsIHNyY2wuTGVuKCk7IGkgPCBsbGVuOyBpKysgewpAQCAtMTAyLDI5ICsxMDIsMjkgQEAKIAlyZXR1cm4gZHN0CiB9CiAKLWZ1bmMgbWVyZ2VCeXRlc0xpc3RWYWx1ZShkc3QsIHNyYyBwcmVmLlZhbHVlLCBvcHRzIG1lcmdlT3B0aW9ucykgcHJlZi5WYWx1ZSB7CitmdW5jIG1lcmdlQnl0ZXNMaXN0VmFsdWUoZHN0LCBzcmMgcHJvdG9yZWZsZWN0LlZhbHVlLCBvcHRzIG1lcmdlT3B0aW9ucykgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAlkc3RsIDo9IGRzdC5MaXN0KCkKIAlzcmNsIDo9IHNyYy5MaXN0KCkKIAlmb3IgaSwgbGxlbiA6PSAwLCBzcmNsLkxlbigpOyBpIDwgbGxlbjsgaSsrIHsKIAkJc2IgOj0gc3JjbC5HZXQoaSkuQnl0ZXMoKQogCQlkYiA6PSBhcHBlbmQoZW1wdHlCdWZbOl0sIHNiLi4uKQotCQlkc3RsLkFwcGVuZChwcmVmLlZhbHVlT2ZCeXRlcyhkYikpCisJCWRzdGwuQXBwZW5kKHByb3RvcmVmbGVjdC5WYWx1ZU9mQnl0ZXMoZGIpKQogCX0KIAlyZXR1cm4gZHN0CiB9CiAKLWZ1bmMgbWVyZ2VNZXNzYWdlTGlzdFZhbHVlKGRzdCwgc3JjIHByZWYuVmFsdWUsIG9wdHMgbWVyZ2VPcHRpb25zKSBwcmVmLlZhbHVlIHsKK2Z1bmMgbWVyZ2VNZXNzYWdlTGlzdFZhbHVlKGRzdCwgc3JjIHByb3RvcmVmbGVjdC5WYWx1ZSwgb3B0cyBtZXJnZU9wdGlvbnMpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJZHN0bCA6PSBkc3QuTGlzdCgpCiAJc3JjbCA6PSBzcmMuTGlzdCgpCiAJZm9yIGksIGxsZW4gOj0gMCwgc3JjbC5MZW4oKTsgaSA8IGxsZW47IGkrKyB7CiAJCXNtIDo9IHNyY2wuR2V0KGkpLk1lc3NhZ2UoKQogCQlkbSA6PSBwcm90by5DbG9uZShzbS5JbnRlcmZhY2UoKSkuUHJvdG9SZWZsZWN0KCkKLQkJZHN0bC5BcHBlbmQocHJlZi5WYWx1ZU9mTWVzc2FnZShkbSkpCisJCWRzdGwuQXBwZW5kKHByb3RvcmVmbGVjdC5WYWx1ZU9mTWVzc2FnZShkbSkpCiAJfQogCXJldHVybiBkc3QKIH0KIAotZnVuYyBtZXJnZU1lc3NhZ2VWYWx1ZShkc3QsIHNyYyBwcmVmLlZhbHVlLCBvcHRzIG1lcmdlT3B0aW9ucykgcHJlZi5WYWx1ZSB7CitmdW5jIG1lcmdlTWVzc2FnZVZhbHVlKGRzdCwgc3JjIHByb3RvcmVmbGVjdC5WYWx1ZSwgb3B0cyBtZXJnZU9wdGlvbnMpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJb3B0cy5NZXJnZShkc3QuTWVzc2FnZSgpLkludGVyZmFjZSgpLCBzcmMuTWVzc2FnZSgpLkludGVyZmFjZSgpKQogCXJldHVybiBkc3QKIH0KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL21lc3NhZ2UuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9tZXNzYWdlLmdvCmluZGV4IGExMDRlMjguLjYyOWJhY2QgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL21lc3NhZ2UuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbWVzc2FnZS5nbwpAQCAtMTQsOCArMTQsNyBAQAogCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2dlbmlkIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKLQlwcmVnICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVnaXN0cnkiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeSIKICkKIAogLy8gTWVzc2FnZUluZm8gcHJvdmlkZXMgcHJvdG9idWYgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGZvciBhIGdpdmVuIEdvIHR5cGUKQEAgLTI5LDcgKzI4LDcgQEAKIAlHb1JlZmxlY3RUeXBlIHJlZmxlY3QuVHlwZSAvLyBwb2ludGVyIHRvIHN0cnVjdAogCiAJLy8gRGVzYyBpcyB0aGUgdW5kZXJseWluZyBtZXNzYWdlIGRlc2NyaXB0b3IgdHlwZSBhbmQgbXVzdCBiZSBwb3B1bGF0ZWQuCi0JRGVzYyBwcmVmLk1lc3NhZ2VEZXNjcmlwdG9yCisJRGVzYyBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IKIAogCS8vIEV4cG9ydGVyIG11c3QgYmUgcHJvdmlkZWQgaW4gYSBwdXJlZ28gZW52aXJvbm1lbnQgaW4gb3JkZXIgdG8gcHJvdmlkZQogCS8vIGFjY2VzcyB0byB1bmV4cG9ydGVkIGZpZWxkcy4KQEAgLTU0LDcgKzUzLDcgQEAKIC8vIGlzIGdlbmVyYXRlZCBieSBvdXIgaW1wbGVtZW50YXRpb24gb2YgcHJvdG9jLWdlbi1nbyAoZm9yIHYyIGFuZCBvbikuCiAvLyBJZiBpdCBpcyB1bmFibGUgdG8gb2J0YWluIGEgTWVzc2FnZUluZm8sIGl0IHJldHVybnMgbmlsLgogZnVuYyBnZXRNZXNzYWdlSW5mbyhtdCByZWZsZWN0LlR5cGUpICpNZXNzYWdlSW5mbyB7Ci0JbSwgb2sgOj0gcmVmbGVjdC5aZXJvKG10KS5JbnRlcmZhY2UoKS4ocHJlZi5Qcm90b01lc3NhZ2UpCisJbSwgb2sgOj0gcmVmbGVjdC5aZXJvKG10KS5JbnRlcmZhY2UoKS4ocHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSkKIAlpZiAhb2sgewogCQlyZXR1cm4gbmlsCiAJfQpAQCAtOTcsNyArOTYsNyBAQAogLy8gZ2V0UG9pbnRlciByZXR1cm5zIHRoZSBwb2ludGVyIGZvciBhIG1lc3NhZ2UsIHdoaWNoIHNob3VsZCBiZSBvZgogLy8gdGhlIHR5cGUgb2YgdGhlIE1lc3NhZ2VJbmZvLiBJZiB0aGUgbWVzc2FnZSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlLAogLy8gaXQgcmV0dXJucyBvaz09ZmFsc2UuCi1mdW5jIChtaSAqTWVzc2FnZUluZm8pIGdldFBvaW50ZXIobSBwcmVmLk1lc3NhZ2UpIChwIHBvaW50ZXIsIG9rIGJvb2wpIHsKK2Z1bmMgKG1pICpNZXNzYWdlSW5mbykgZ2V0UG9pbnRlcihtIHByb3RvcmVmbGVjdC5NZXNzYWdlKSAocCBwb2ludGVyLCBvayBib29sKSB7CiAJc3dpdGNoIG0gOj0gbS4odHlwZSkgewogCWNhc2UgKm1lc3NhZ2VTdGF0ZToKIAkJcmV0dXJuIG0ucG9pbnRlcigpLCBtLm1lc3NhZ2VJbmZvKCkgPT0gbWkKQEAgLTEzNCwxMCArMTMzLDEwIEBACiAJZXh0ZW5zaW9uT2Zmc2V0IG9mZnNldAogCWV4dGVuc2lvblR5cGUgICByZWZsZWN0LlR5cGUKIAotCWZpZWxkc0J5TnVtYmVyICAgICAgICBtYXBbcHJlZi5GaWVsZE51bWJlcl1yZWZsZWN0LlN0cnVjdEZpZWxkCi0Jb25lb2ZzQnlOYW1lICAgICAgICAgIG1hcFtwcmVmLk5hbWVdcmVmbGVjdC5TdHJ1Y3RGaWVsZAotCW9uZW9mV3JhcHBlcnNCeVR5cGUgICBtYXBbcmVmbGVjdC5UeXBlXXByZWYuRmllbGROdW1iZXIKLQlvbmVvZldyYXBwZXJzQnlOdW1iZXIgbWFwW3ByZWYuRmllbGROdW1iZXJdcmVmbGVjdC5UeXBlCisJZmllbGRzQnlOdW1iZXIgICAgICAgIG1hcFtwcm90b3JlZmxlY3QuRmllbGROdW1iZXJdcmVmbGVjdC5TdHJ1Y3RGaWVsZAorCW9uZW9mc0J5TmFtZSAgICAgICAgICBtYXBbcHJvdG9yZWZsZWN0Lk5hbWVdcmVmbGVjdC5TdHJ1Y3RGaWVsZAorCW9uZW9mV3JhcHBlcnNCeVR5cGUgICBtYXBbcmVmbGVjdC5UeXBlXXByb3RvcmVmbGVjdC5GaWVsZE51bWJlcgorCW9uZW9mV3JhcHBlcnNCeU51bWJlciBtYXBbcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyXXJlZmxlY3QuVHlwZQogfQogCiBmdW5jIChtaSAqTWVzc2FnZUluZm8pIG1ha2VTdHJ1Y3RJbmZvKHQgcmVmbGVjdC5UeXBlKSBzdHJ1Y3RJbmZvIHsKQEAgLTE0NywxMCArMTQ2LDEwIEBACiAJCXVua25vd25PZmZzZXQ6ICAgaW52YWxpZE9mZnNldCwKIAkJZXh0ZW5zaW9uT2Zmc2V0OiBpbnZhbGlkT2Zmc2V0LAogCi0JCWZpZWxkc0J5TnVtYmVyOiAgICAgICAgbWFwW3ByZWYuRmllbGROdW1iZXJdcmVmbGVjdC5TdHJ1Y3RGaWVsZHt9LAotCQlvbmVvZnNCeU5hbWU6ICAgICAgICAgIG1hcFtwcmVmLk5hbWVdcmVmbGVjdC5TdHJ1Y3RGaWVsZHt9LAotCQlvbmVvZldyYXBwZXJzQnlUeXBlOiAgIG1hcFtyZWZsZWN0LlR5cGVdcHJlZi5GaWVsZE51bWJlcnt9LAotCQlvbmVvZldyYXBwZXJzQnlOdW1iZXI6IG1hcFtwcmVmLkZpZWxkTnVtYmVyXXJlZmxlY3QuVHlwZXt9LAorCQlmaWVsZHNCeU51bWJlcjogICAgICAgIG1hcFtwcm90b3JlZmxlY3QuRmllbGROdW1iZXJdcmVmbGVjdC5TdHJ1Y3RGaWVsZHt9LAorCQlvbmVvZnNCeU5hbWU6ICAgICAgICAgIG1hcFtwcm90b3JlZmxlY3QuTmFtZV1yZWZsZWN0LlN0cnVjdEZpZWxke30sCisJCW9uZW9mV3JhcHBlcnNCeVR5cGU6ICAgbWFwW3JlZmxlY3QuVHlwZV1wcm90b3JlZmxlY3QuRmllbGROdW1iZXJ7fSwKKwkJb25lb2ZXcmFwcGVyc0J5TnVtYmVyOiBtYXBbcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyXXJlZmxlY3QuVHlwZXt9LAogCX0KIAogZmllbGRMb29wOgpAQCAtMTgwLDEyICsxNzksMTIgQEAKIAkJCWZvciBfLCBzIDo9IHJhbmdlIHN0cmluZ3MuU3BsaXQoZi5UYWcuR2V0KCJwcm90b2J1ZiIpLCAiLCIpIHsKIAkJCQlpZiBsZW4ocykgPiAwICYmIHN0cmluZ3MuVHJpbShzLCAiMDEyMzQ1Njc4OSIpID09ICIiIHsKIAkJCQkJbiwgXyA6PSBzdHJjb252LlBhcnNlVWludChzLCAxMCwgNjQpCi0JCQkJCXNpLmZpZWxkc0J5TnVtYmVyW3ByZWYuRmllbGROdW1iZXIobildID0gZgorCQkJCQlzaS5maWVsZHNCeU51bWJlcltwcm90b3JlZmxlY3QuRmllbGROdW1iZXIobildID0gZgogCQkJCQljb250aW51ZSBmaWVsZExvb3AKIAkJCQl9CiAJCQl9CiAJCQlpZiBzIDo9IGYuVGFnLkdldCgicHJvdG9idWZfb25lb2YiKTsgbGVuKHMpID4gMCB7Ci0JCQkJc2kub25lb2ZzQnlOYW1lW3ByZWYuTmFtZShzKV0gPSBmCisJCQkJc2kub25lb2ZzQnlOYW1lW3Byb3RvcmVmbGVjdC5OYW1lKHMpXSA9IGYKIAkJCQljb250aW51ZSBmaWVsZExvb3AKIAkJCX0KIAkJfQpAQCAtMTkzLDEyICsxOTIsMTcgQEAKIAogCS8vIERlcml2ZSBhIG1hcHBpbmcgb2Ygb25lb2Ygd3JhcHBlcnMgdG8gZmllbGRzLgogCW9uZW9mV3JhcHBlcnMgOj0gbWkuT25lb2ZXcmFwcGVycwotCWZvciBfLCBtZXRob2QgOj0gcmFuZ2UgW11zdHJpbmd7IlhYWF9PbmVvZkZ1bmNzIiwgIlhYWF9PbmVvZldyYXBwZXJzIn0gewotCQlpZiBmbiwgb2sgOj0gcmVmbGVjdC5QdHJUbyh0KS5NZXRob2RCeU5hbWUobWV0aG9kKTsgb2sgewotCQkJZm9yIF8sIHYgOj0gcmFuZ2UgZm4uRnVuYy5DYWxsKFtdcmVmbGVjdC5WYWx1ZXtyZWZsZWN0Llplcm8oZm4uVHlwZS5JbigwKSl9KSB7Ci0JCQkJaWYgdnMsIG9rIDo9IHYuSW50ZXJmYWNlKCkuKFtdaW50ZXJmYWNle30pOyBvayB7Ci0JCQkJCW9uZW9mV3JhcHBlcnMgPSB2cwotCQkJCX0KKwltZXRob2RzIDo9IG1ha2UoW11yZWZsZWN0Lk1ldGhvZCwgMCwgMikKKwlpZiBtLCBvayA6PSByZWZsZWN0LlB0clRvKHQpLk1ldGhvZEJ5TmFtZSgiWFhYX09uZW9mRnVuY3MiKTsgb2sgeworCQltZXRob2RzID0gYXBwZW5kKG1ldGhvZHMsIG0pCisJfQorCWlmIG0sIG9rIDo9IHJlZmxlY3QuUHRyVG8odCkuTWV0aG9kQnlOYW1lKCJYWFhfT25lb2ZXcmFwcGVycyIpOyBvayB7CisJCW1ldGhvZHMgPSBhcHBlbmQobWV0aG9kcywgbSkKKwl9CisJZm9yIF8sIGZuIDo9IHJhbmdlIG1ldGhvZHMgeworCQlmb3IgXywgdiA6PSByYW5nZSBmbi5GdW5jLkNhbGwoW11yZWZsZWN0LlZhbHVle3JlZmxlY3QuWmVybyhmbi5UeXBlLkluKDApKX0pIHsKKwkJCWlmIHZzLCBvayA6PSB2LkludGVyZmFjZSgpLihbXWludGVyZmFjZXt9KTsgb2sgeworCQkJCW9uZW9mV3JhcHBlcnMgPSB2cwogCQkJfQogCQl9CiAJfQpAQCAtMjA4LDggKzIxMiw4IEBACiAJCWZvciBfLCBzIDo9IHJhbmdlIHN0cmluZ3MuU3BsaXQoZi5UYWcuR2V0KCJwcm90b2J1ZiIpLCAiLCIpIHsKIAkJCWlmIGxlbihzKSA+IDAgJiYgc3RyaW5ncy5UcmltKHMsICIwMTIzNDU2Nzg5IikgPT0gIiIgewogCQkJCW4sIF8gOj0gc3RyY29udi5QYXJzZVVpbnQocywgMTAsIDY0KQotCQkJCXNpLm9uZW9mV3JhcHBlcnNCeVR5cGVbdGZdID0gcHJlZi5GaWVsZE51bWJlcihuKQotCQkJCXNpLm9uZW9mV3JhcHBlcnNCeU51bWJlcltwcmVmLkZpZWxkTnVtYmVyKG4pXSA9IHRmCisJCQkJc2kub25lb2ZXcmFwcGVyc0J5VHlwZVt0Zl0gPSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIobikKKwkJCQlzaS5vbmVvZldyYXBwZXJzQnlOdW1iZXJbcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKG4pXSA9IHRmCiAJCQkJYnJlYWsKIAkJCX0KIAkJfQpAQCAtMjE5LDcgKzIyMywxMSBAQAogfQogCiBmdW5jIChtaSAqTWVzc2FnZUluZm8pIE5ldygpIHByb3RvcmVmbGVjdC5NZXNzYWdlIHsKLQlyZXR1cm4gbWkuTWVzc2FnZU9mKHJlZmxlY3QuTmV3KG1pLkdvUmVmbGVjdFR5cGUuRWxlbSgpKS5JbnRlcmZhY2UoKSkKKwltIDo9IHJlZmxlY3QuTmV3KG1pLkdvUmVmbGVjdFR5cGUuRWxlbSgpKS5JbnRlcmZhY2UoKQorCWlmIHIsIG9rIDo9IG0uKHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UpOyBvayB7CisJCXJldHVybiByLlByb3RvUmVmbGVjdCgpCisJfQorCXJldHVybiBtaS5NZXNzYWdlT2YobSkKIH0KIGZ1bmMgKG1pICpNZXNzYWdlSW5mbykgWmVybygpIHByb3RvcmVmbGVjdC5NZXNzYWdlIHsKIAlyZXR1cm4gbWkuTWVzc2FnZU9mKHJlZmxlY3QuWmVybyhtaS5Hb1JlZmxlY3RUeXBlKS5JbnRlcmZhY2UoKSkKQEAgLTIzNyw3ICsyNDUsNyBAQAogCWZkIDo9IG1pLkRlc2MuRmllbGRzKCkuR2V0KGkpCiAJc3dpdGNoIHsKIAljYXNlIGZkLklzV2VhaygpOgotCQltdCwgXyA6PSBwcmVnLkdsb2JhbFR5cGVzLkZpbmRNZXNzYWdlQnlOYW1lKGZkLk1lc3NhZ2UoKS5GdWxsTmFtZSgpKQorCQltdCwgXyA6PSBwcm90b3JlZ2lzdHJ5Lkdsb2JhbFR5cGVzLkZpbmRNZXNzYWdlQnlOYW1lKGZkLk1lc3NhZ2UoKS5GdWxsTmFtZSgpKQogCQlyZXR1cm4gbXQKIAljYXNlIGZkLklzTWFwKCk6CiAJCXJldHVybiBtYXBFbnRyeVR5cGV7ZmQuTWVzc2FnZSgpLCBtaS5maWVsZFR5cGVzW2ZkLk51bWJlcigpXX0KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL21lc3NhZ2VfcmVmbGVjdC5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL21lc3NhZ2VfcmVmbGVjdC5nbwppbmRleCA5NDg4YjcyLi5kOWVhMDEwIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9tZXNzYWdlX3JlZmxlY3QuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbWVzc2FnZV9yZWZsZWN0LmdvCkBAIC0xMCwxNyArMTAsMTcgQEAKIAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9kZXRyYW5kIgogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9wcmFnbWEiCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgogKQogCiB0eXBlIHJlZmxlY3RNZXNzYWdlSW5mbyBzdHJ1Y3QgewotCWZpZWxkcyBtYXBbcHJlZi5GaWVsZE51bWJlcl0qZmllbGRJbmZvCi0Jb25lb2ZzIG1hcFtwcmVmLk5hbWVdKm9uZW9mSW5mbworCWZpZWxkcyBtYXBbcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyXSpmaWVsZEluZm8KKwlvbmVvZnMgbWFwW3Byb3RvcmVmbGVjdC5OYW1lXSpvbmVvZkluZm8KIAogCS8vIGZpZWxkVHlwZXMgY29udGFpbnMgdGhlIHplcm8gdmFsdWUgb2YgYW4gZW51bSBvciBtZXNzYWdlIGZpZWxkLgogCS8vIEZvciBsaXN0cywgaXQgY29udGFpbnMgdGhlIGVsZW1lbnQgdHlwZS4KIAkvLyBGb3IgbWFwcywgaXQgY29udGFpbnMgdGhlIGVudHJ5IHZhbHVlIHR5cGUuCi0JZmllbGRUeXBlcyBtYXBbcHJlZi5GaWVsZE51bWJlcl1pbnRlcmZhY2V7fQorCWZpZWxkVHlwZXMgbWFwW3Byb3RvcmVmbGVjdC5GaWVsZE51bWJlcl1pbnRlcmZhY2V7fQogCiAJLy8gZGVuc2VGaWVsZHMgaXMgYSBzdWJzZXQgb2YgZmllbGRzIHdoZXJlOgogCS8vCTAgPCBmaWVsZERlc2MuTnVtYmVyKCkgPCBsZW4oZGVuc2VGaWVsZHMpCkBAIC0zMCw4ICszMCw4IEBACiAJLy8gcmFuZ2VJbmZvcyBpcyBhIGxpc3Qgb2YgYWxsIGZpZWxkcyAobm90IGJlbG9uZ2luZyB0byBhIG9uZW9mKSBhbmQgb25lb2ZzLgogCXJhbmdlSW5mb3MgW11pbnRlcmZhY2V7fSAvLyBlaXRoZXIgKmZpZWxkSW5mbyBvciAqb25lb2ZJbmZvCiAKLQlnZXRVbmtub3duICAgZnVuYyhwb2ludGVyKSBwcmVmLlJhd0ZpZWxkcwotCXNldFVua25vd24gICBmdW5jKHBvaW50ZXIsIHByZWYuUmF3RmllbGRzKQorCWdldFVua25vd24gICBmdW5jKHBvaW50ZXIpIHByb3RvcmVmbGVjdC5SYXdGaWVsZHMKKwlzZXRVbmtub3duICAgZnVuYyhwb2ludGVyLCBwcm90b3JlZmxlY3QuUmF3RmllbGRzKQogCWV4dGVuc2lvbk1hcCBmdW5jKHBvaW50ZXIpICpleHRlbnNpb25NYXAKIAogCW5pbE1lc3NhZ2UgYXRvbWljTmlsTWVzc2FnZQpAQCAtNTIsNyArNTIsNyBAQAogLy8gVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgc3RydWN0IGlzIHdlbGwtZm9ybWVkIGFuZCBwYW5pY3MgaWYgdGhlcmUgYXJlCiAvLyBhbnkgZGlzY3JlcGFuY2llcy4KIGZ1bmMgKG1pICpNZXNzYWdlSW5mbykgbWFrZUtub3duRmllbGRzRnVuYyhzaSBzdHJ1Y3RJbmZvKSB7Ci0JbWkuZmllbGRzID0gbWFwW3ByZWYuRmllbGROdW1iZXJdKmZpZWxkSW5mb3t9CisJbWkuZmllbGRzID0gbWFwW3Byb3RvcmVmbGVjdC5GaWVsZE51bWJlcl0qZmllbGRJbmZve30KIAltZCA6PSBtaS5EZXNjCiAJZmRzIDo9IG1kLkZpZWxkcygpCiAJZm9yIGkgOj0gMDsgaSA8IGZkcy5MZW4oKTsgaSsrIHsKQEAgLTgyLDcgKzgyLDcgQEAKIAkJbWkuZmllbGRzW2ZkLk51bWJlcigpXSA9ICZmaQogCX0KIAotCW1pLm9uZW9mcyA9IG1hcFtwcmVmLk5hbWVdKm9uZW9mSW5mb3t9CisJbWkub25lb2ZzID0gbWFwW3Byb3RvcmVmbGVjdC5OYW1lXSpvbmVvZkluZm97fQogCWZvciBpIDo9IDA7IGkgPCBtZC5PbmVvZnMoKS5MZW4oKTsgaSsrIHsKIAkJb2QgOj0gbWQuT25lb2ZzKCkuR2V0KGkpCiAJCW1pLm9uZW9mc1tvZC5OYW1lKCldID0gbWFrZU9uZW9mSW5mbyhvZCwgc2ksIG1pLkV4cG9ydGVyKQpAQCAtMTE3LDEzICsxMTcsMTMgQEAKIAlzd2l0Y2ggewogCWNhc2Ugc2kudW5rbm93bk9mZnNldC5Jc1ZhbGlkKCkgJiYgc2kudW5rbm93blR5cGUgPT0gdW5rbm93bkZpZWxkc0FUeXBlOgogCQkvLyBIYW5kbGUgYXMgW11ieXRlLgotCQltaS5nZXRVbmtub3duID0gZnVuYyhwIHBvaW50ZXIpIHByZWYuUmF3RmllbGRzIHsKKwkJbWkuZ2V0VW5rbm93biA9IGZ1bmMocCBwb2ludGVyKSBwcm90b3JlZmxlY3QuUmF3RmllbGRzIHsKIAkJCWlmIHAuSXNOaWwoKSB7CiAJCQkJcmV0dXJuIG5pbAogCQkJfQogCQkJcmV0dXJuICpwLkFwcGx5KG1pLnVua25vd25PZmZzZXQpLkJ5dGVzKCkKIAkJfQotCQltaS5zZXRVbmtub3duID0gZnVuYyhwIHBvaW50ZXIsIGIgcHJlZi5SYXdGaWVsZHMpIHsKKwkJbWkuc2V0VW5rbm93biA9IGZ1bmMocCBwb2ludGVyLCBiIHByb3RvcmVmbGVjdC5SYXdGaWVsZHMpIHsKIAkJCWlmIHAuSXNOaWwoKSB7CiAJCQkJcGFuaWMoImludmFsaWQgU2V0VW5rbm93biBvbiBuaWwgTWVzc2FnZSIpCiAJCQl9CkBAIC0xMzEsNyArMTMxLDcgQEAKIAkJfQogCWNhc2Ugc2kudW5rbm93bk9mZnNldC5Jc1ZhbGlkKCkgJiYgc2kudW5rbm93blR5cGUgPT0gdW5rbm93bkZpZWxkc0JUeXBlOgogCQkvLyBIYW5kbGUgYXMgKltdYnl0ZS4KLQkJbWkuZ2V0VW5rbm93biA9IGZ1bmMocCBwb2ludGVyKSBwcmVmLlJhd0ZpZWxkcyB7CisJCW1pLmdldFVua25vd24gPSBmdW5jKHAgcG9pbnRlcikgcHJvdG9yZWZsZWN0LlJhd0ZpZWxkcyB7CiAJCQlpZiBwLklzTmlsKCkgewogCQkJCXJldHVybiBuaWwKIAkJCX0KQEAgLTE0MSw3ICsxNDEsNyBAQAogCQkJfQogCQkJcmV0dXJuICoqYnAKIAkJfQotCQltaS5zZXRVbmtub3duID0gZnVuYyhwIHBvaW50ZXIsIGIgcHJlZi5SYXdGaWVsZHMpIHsKKwkJbWkuc2V0VW5rbm93biA9IGZ1bmMocCBwb2ludGVyLCBiIHByb3RvcmVmbGVjdC5SYXdGaWVsZHMpIHsKIAkJCWlmIHAuSXNOaWwoKSB7CiAJCQkJcGFuaWMoImludmFsaWQgU2V0VW5rbm93biBvbiBuaWwgTWVzc2FnZSIpCiAJCQl9CkBAIC0xNTIsMTAgKzE1MiwxMCBAQAogCQkJKipicCA9IGIKIAkJfQogCWRlZmF1bHQ6Ci0JCW1pLmdldFVua25vd24gPSBmdW5jKHBvaW50ZXIpIHByZWYuUmF3RmllbGRzIHsKKwkJbWkuZ2V0VW5rbm93biA9IGZ1bmMocG9pbnRlcikgcHJvdG9yZWZsZWN0LlJhd0ZpZWxkcyB7CiAJCQlyZXR1cm4gbmlsCiAJCX0KLQkJbWkuc2V0VW5rbm93biA9IGZ1bmMocCBwb2ludGVyLCBfIHByZWYuUmF3RmllbGRzKSB7CisJCW1pLnNldFVua25vd24gPSBmdW5jKHAgcG9pbnRlciwgXyBwcm90b3JlZmxlY3QuUmF3RmllbGRzKSB7CiAJCQlpZiBwLklzTmlsKCkgewogCQkJCXBhbmljKCJpbnZhbGlkIFNldFVua25vd24gb24gbmlsIE1lc3NhZ2UiKQogCQkJfQpAQCAtMjI0LDcgKzIyNCw3IEBACiAJCX0KIAkJaWYgZnQgIT0gbmlsIHsKIAkJCWlmIG1pLmZpZWxkVHlwZXMgPT0gbmlsIHsKLQkJCQltaS5maWVsZFR5cGVzID0gbWFrZShtYXBbcHJlZi5GaWVsZE51bWJlcl1pbnRlcmZhY2V7fSkKKwkJCQltaS5maWVsZFR5cGVzID0gbWFrZShtYXBbcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyXWludGVyZmFjZXt9KQogCQkJfQogCQkJbWkuZmllbGRUeXBlc1tmZC5OdW1iZXIoKV0gPSByZWZsZWN0Llplcm8oZnQpLkludGVyZmFjZSgpCiAJCX0KQEAgLTIzMyw3ICsyMzMsNyBAQAogCiB0eXBlIGV4dGVuc2lvbk1hcCBtYXBbaW50MzJdRXh0ZW5zaW9uRmllbGQKIAotZnVuYyAobSAqZXh0ZW5zaW9uTWFwKSBSYW5nZShmIGZ1bmMocHJlZi5GaWVsZERlc2NyaXB0b3IsIHByZWYuVmFsdWUpIGJvb2wpIHsKK2Z1bmMgKG0gKmV4dGVuc2lvbk1hcCkgUmFuZ2UoZiBmdW5jKHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIHByb3RvcmVmbGVjdC5WYWx1ZSkgYm9vbCkgewogCWlmIG0gIT0gbmlsIHsKIAkJZm9yIF8sIHggOj0gcmFuZ2UgKm0gewogCQkJeGQgOj0geC5UeXBlKCkuVHlwZURlc2NyaXB0b3IoKQpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJCX0KIAl9CiB9Ci1mdW5jIChtICpleHRlbnNpb25NYXApIEhhcyh4dCBwcmVmLkV4dGVuc2lvblR5cGUpIChvayBib29sKSB7CitmdW5jIChtICpleHRlbnNpb25NYXApIEhhcyh4dCBwcm90b3JlZmxlY3QuRXh0ZW5zaW9uVHlwZSkgKG9rIGJvb2wpIHsKIAlpZiBtID09IG5pbCB7CiAJCXJldHVybiBmYWxzZQogCX0KQEAgLTI2NiwxMCArMjY2LDEwIEBACiAJfQogCXJldHVybiB0cnVlCiB9Ci1mdW5jIChtICpleHRlbnNpb25NYXApIENsZWFyKHh0IHByZWYuRXh0ZW5zaW9uVHlwZSkgeworZnVuYyAobSAqZXh0ZW5zaW9uTWFwKSBDbGVhcih4dCBwcm90b3JlZmxlY3QuRXh0ZW5zaW9uVHlwZSkgewogCWRlbGV0ZSgqbSwgaW50MzIoeHQuVHlwZURlc2NyaXB0b3IoKS5OdW1iZXIoKSkpCiB9Ci1mdW5jIChtICpleHRlbnNpb25NYXApIEdldCh4dCBwcmVmLkV4dGVuc2lvblR5cGUpIHByZWYuVmFsdWUgeworZnVuYyAobSAqZXh0ZW5zaW9uTWFwKSBHZXQoeHQgcHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJeGQgOj0geHQuVHlwZURlc2NyaXB0b3IoKQogCWlmIG0gIT0gbmlsIHsKIAkJaWYgeCwgb2sgOj0gKCptKVtpbnQzMih4ZC5OdW1iZXIoKSldOyBvayB7CkBAIC0yNzgsNyArMjc4LDcgQEAKIAl9CiAJcmV0dXJuIHh0Llplcm8oKQogfQotZnVuYyAobSAqZXh0ZW5zaW9uTWFwKSBTZXQoeHQgcHJlZi5FeHRlbnNpb25UeXBlLCB2IHByZWYuVmFsdWUpIHsKK2Z1bmMgKG0gKmV4dGVuc2lvbk1hcCkgU2V0KHh0IHByb3RvcmVmbGVjdC5FeHRlbnNpb25UeXBlLCB2IHByb3RvcmVmbGVjdC5WYWx1ZSkgewogCXhkIDo9IHh0LlR5cGVEZXNjcmlwdG9yKCkKIAlpc1ZhbGlkIDo9IHRydWUKIAlzd2l0Y2ggewpAQCAtMzAyLDkgKzMwMiw5IEBACiAJeC5TZXQoeHQsIHYpCiAJKCptKVtpbnQzMih4ZC5OdW1iZXIoKSldID0geAogfQotZnVuYyAobSAqZXh0ZW5zaW9uTWFwKSBNdXRhYmxlKHh0IHByZWYuRXh0ZW5zaW9uVHlwZSkgcHJlZi5WYWx1ZSB7CitmdW5jIChtICpleHRlbnNpb25NYXApIE11dGFibGUoeHQgcHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJeGQgOj0geHQuVHlwZURlc2NyaXB0b3IoKQotCWlmIHhkLktpbmQoKSAhPSBwcmVmLk1lc3NhZ2VLaW5kICYmIHhkLktpbmQoKSAhPSBwcmVmLkdyb3VwS2luZCAmJiAheGQuSXNMaXN0KCkgJiYgIXhkLklzTWFwKCkgeworCWlmIHhkLktpbmQoKSAhPSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQgJiYgeGQuS2luZCgpICE9IHByb3RvcmVmbGVjdC5Hcm91cEtpbmQgJiYgIXhkLklzTGlzdCgpICYmICF4ZC5Jc01hcCgpIHsKIAkJcGFuaWMoImludmFsaWQgTXV0YWJsZSBvbiBmaWVsZCB3aXRoIG5vbi1jb21wb3NpdGUgdHlwZSIpCiAJfQogCWlmIHgsIG9rIDo9ICgqbSlbaW50MzIoeGQuTnVtYmVyKCkpXTsgb2sgewpAQCAtMzIwLDcgKzMyMCw2IEBACiAvLyBpbiBhbiBhbGxvY2F0aW9uLWZyZWUgd2F5IHdpdGhvdXQgbmVlZGluZyB0byBoYXZlIGEgc2hhZG93IEdvIHR5cGUgZ2VuZXJhdGVkCiAvLyBmb3IgZXZlcnkgbWVzc2FnZSB0eXBlLiBUaGlzIHRlY2huaXF1ZSBvbmx5IHdvcmtzIHVzaW5nIHVuc2FmZS4KIC8vCi0vLwogLy8gRXhhbXBsZSBnZW5lcmF0ZWQgY29kZToKIC8vCiAvLwl0eXBlIE0gc3RydWN0IHsKQEAgLTM1MSwxMiArMzUwLDExIEBACiAvLyBJdCBoYXMgYWNjZXNzIHRvIHRoZSBtZXNzYWdlIGluZm8gYXMgaXRzIGZpcnN0IGZpZWxkLCBhbmQgYSBwb2ludGVyIHRvIHRoZQogLy8gTWVzc2FnZVN0YXRlIGlzIGlkZW50aWNhbCB0byBhIHBvaW50ZXIgdG8gdGhlIGNvbmNyZXRlIG1lc3NhZ2UgdmFsdWUuCiAvLwotLy8KIC8vIFJlcXVpcmVtZW50czoKLS8vCeKAoiBUaGUgdHlwZSBNIG11c3QgaW1wbGVtZW50IHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UuCi0vLwnigKIgVGhlIGFkZHJlc3Mgb2YgbSBtdXN0IG5vdCBiZSBuaWwuCi0vLwnigKIgVGhlIGFkZHJlc3Mgb2YgbSBhbmQgdGhlIGFkZHJlc3Mgb2YgbS5zdGF0ZSBtdXN0IGJlIGVxdWFsLAotLy8JZXZlbiB0aG91Z2ggdGhleSBhcmUgZGlmZmVyZW50IEdvIHR5cGVzLgorLy8gICAtIFRoZSB0eXBlIE0gbXVzdCBpbXBsZW1lbnQgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZS4KKy8vICAgLSBUaGUgYWRkcmVzcyBvZiBtIG11c3Qgbm90IGJlIG5pbC4KKy8vICAgLSBUaGUgYWRkcmVzcyBvZiBtIGFuZCB0aGUgYWRkcmVzcyBvZiBtLnN0YXRlIG11c3QgYmUgZXF1YWwsCisvLyAgICAgZXZlbiB0aG91Z2ggdGhleSBhcmUgZGlmZmVyZW50IEdvIHR5cGVzLgogdHlwZSBNZXNzYWdlU3RhdGUgc3RydWN0IHsKIAlwcmFnbWEuTm9VbmtleWVkTGl0ZXJhbHMKIAlwcmFnbWEuRG9Ob3RDb21wYXJlCkBAIC0zNjgsOCArMzY2LDggQEAKIHR5cGUgbWVzc2FnZVN0YXRlIE1lc3NhZ2VTdGF0ZQogCiB2YXIgKAotCV8gcHJlZi5NZXNzYWdlID0gKCptZXNzYWdlU3RhdGUpKG5pbCkKLQlfIHVud3JhcHBlciAgICA9ICgqbWVzc2FnZVN0YXRlKShuaWwpCisJXyBwcm90b3JlZmxlY3QuTWVzc2FnZSA9ICgqbWVzc2FnZVN0YXRlKShuaWwpCisJXyB1bndyYXBwZXIgICAgICAgICAgICA9ICgqbWVzc2FnZVN0YXRlKShuaWwpCiApCiAKIC8vIG1lc3NhZ2VEYXRhVHlwZSBpcyBhIHR1cGxlIG9mIGEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBkYXRhIGFuZApAQCAtMzg3LDE2ICszODUsMTYgQEAKICkKIAogdmFyICgKLQlfIHByZWYuTWVzc2FnZSAgICAgID0gKCptZXNzYWdlUmVmbGVjdFdyYXBwZXIpKG5pbCkKLQlfIHVud3JhcHBlciAgICAgICAgID0gKCptZXNzYWdlUmVmbGVjdFdyYXBwZXIpKG5pbCkKLQlfIHByZWYuUHJvdG9NZXNzYWdlID0gKCptZXNzYWdlSWZhY2VXcmFwcGVyKShuaWwpCi0JXyB1bndyYXBwZXIgICAgICAgICA9ICgqbWVzc2FnZUlmYWNlV3JhcHBlcikobmlsKQorCV8gcHJvdG9yZWZsZWN0Lk1lc3NhZ2UgICAgICA9ICgqbWVzc2FnZVJlZmxlY3RXcmFwcGVyKShuaWwpCisJXyB1bndyYXBwZXIgICAgICAgICAgICAgICAgID0gKCptZXNzYWdlUmVmbGVjdFdyYXBwZXIpKG5pbCkKKwlfIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgPSAoKm1lc3NhZ2VJZmFjZVdyYXBwZXIpKG5pbCkKKwlfIHVud3JhcHBlciAgICAgICAgICAgICAgICAgPSAoKm1lc3NhZ2VJZmFjZVdyYXBwZXIpKG5pbCkKICkKIAogLy8gTWVzc2FnZU9mIHJldHVybnMgYSByZWZsZWN0aXZlIHZpZXcgb3ZlciBhIG1lc3NhZ2UuIFRoZSBpbnB1dCBtdXN0IGJlIGEKIC8vIHBvaW50ZXIgdG8gYSBuYW1lZCBHbyBzdHJ1Y3QuIElmIHRoZSBwcm92aWRlZCB0eXBlIGhhcyBhIFByb3RvUmVmbGVjdCBtZXRob2QsCiAvLyBpdCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2QuCi1mdW5jIChtaSAqTWVzc2FnZUluZm8pIE1lc3NhZ2VPZihtIGludGVyZmFjZXt9KSBwcmVmLk1lc3NhZ2UgeworZnVuYyAobWkgKk1lc3NhZ2VJbmZvKSBNZXNzYWdlT2YobSBpbnRlcmZhY2V7fSkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2UgewogCWlmIHJlZmxlY3QuVHlwZU9mKG0pICE9IG1pLkdvUmVmbGVjdFR5cGUgewogCQlwYW5pYyhmbXQuU3ByaW50ZigidHlwZSBtaXNtYXRjaDogZ290ICVULCB3YW50ICV2IiwgbSwgbWkuR29SZWZsZWN0VHlwZSkpCiAJfQpAQCAtNDIxLDcgKzQxOSw3IEBACiAJCXJ2LkVsZW0oKS5TZXQocmVmbGVjdC5aZXJvKHJ2LlR5cGUoKS5FbGVtKCkpKQogCX0KIH0KLWZ1bmMgKG0gKm1lc3NhZ2VJZmFjZVdyYXBwZXIpIFByb3RvUmVmbGVjdCgpIHByZWYuTWVzc2FnZSB7CitmdW5jIChtICptZXNzYWdlSWZhY2VXcmFwcGVyKSBQcm90b1JlZmxlY3QoKSBwcm90b3JlZmxlY3QuTWVzc2FnZSB7CiAJcmV0dXJuICgqbWVzc2FnZVJlZmxlY3RXcmFwcGVyKShtKQogfQogZnVuYyAobSAqbWVzc2FnZUlmYWNlV3JhcHBlcikgcHJvdG9VbndyYXAoKSBpbnRlcmZhY2V7fSB7CkBAIC00MzAsNyArNDI4LDcgQEAKIAogLy8gY2hlY2tGaWVsZCB2ZXJpZmllcyB0aGF0IHRoZSBwcm92aWRlZCBmaWVsZCBkZXNjcmlwdG9yIGlzIHZhbGlkLgogLy8gRXhhY3RseSBvbmUgb2YgdGhlIHJldHVybmVkIHZhbHVlcyBpcyBwb3B1bGF0ZWQuCi1mdW5jIChtaSAqTWVzc2FnZUluZm8pIGNoZWNrRmllbGQoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpICgqZmllbGRJbmZvLCBwcmVmLkV4dGVuc2lvblR5cGUpIHsKK2Z1bmMgKG1pICpNZXNzYWdlSW5mbykgY2hlY2tGaWVsZChmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSAoKmZpZWxkSW5mbywgcHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUpIHsKIAl2YXIgZmkgKmZpZWxkSW5mbwogCWlmIG4gOj0gZmQuTnVtYmVyKCk7IDAgPCBuICYmIGludChuKSA8IGxlbihtaS5kZW5zZUZpZWxkcykgewogCQlmaSA9IG1pLmRlbnNlRmllbGRzW25dCkBAIC00NTUsNyArNDUzLDcgQEAKIAkJaWYgIW1pLkRlc2MuRXh0ZW5zaW9uUmFuZ2VzKCkuSGFzKGZkLk51bWJlcigpKSB7CiAJCQlwYW5pYyhmbXQuU3ByaW50ZigiZXh0ZW5zaW9uICV2IGV4dGVuZHMgJXYgb3V0c2lkZSB0aGUgZXh0ZW5zaW9uIHJhbmdlIiwgZmQuRnVsbE5hbWUoKSwgbWkuRGVzYy5GdWxsTmFtZSgpKSkKIAkJfQotCQl4dGQsIG9rIDo9IGZkLihwcmVmLkV4dGVuc2lvblR5cGVEZXNjcmlwdG9yKQorCQl4dGQsIG9rIDo9IGZkLihwcm90b3JlZmxlY3QuRXh0ZW5zaW9uVHlwZURlc2NyaXB0b3IpCiAJCWlmICFvayB7CiAJCQlwYW5pYyhmbXQuU3ByaW50ZigiZXh0ZW5zaW9uICV2IGRvZXMgbm90IGltcGxlbWVudCBwcm90b3JlZmxlY3QuRXh0ZW5zaW9uVHlwZURlc2NyaXB0b3IiLCBmZC5GdWxsTmFtZSgpKSkKIAkJfQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbWVzc2FnZV9yZWZsZWN0X2ZpZWxkLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvbWVzc2FnZV9yZWZsZWN0X2ZpZWxkLmdvCmluZGV4IDM0M2NmODcuLjk4NjMyMmIgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL21lc3NhZ2VfcmVmbGVjdF9maWVsZC5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9tZXNzYWdlX3JlZmxlY3RfZmllbGQuZ28KQEAgLTExLDI0ICsxMSwyNCBAQAogCSJzeW5jIgogCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZsYWdzIgotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgotCXByZWcgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeSIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeSIKICkKIAogdHlwZSBmaWVsZEluZm8gc3RydWN0IHsKLQlmaWVsZERlc2MgcHJlZi5GaWVsZERlc2NyaXB0b3IKKwlmaWVsZERlc2MgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcgogCiAJLy8gVGhlc2UgZmllbGRzIGFyZSB1c2VkIGZvciBwcm90b2J1ZiByZWZsZWN0aW9uIHN1cHBvcnQuCiAJaGFzICAgICAgICBmdW5jKHBvaW50ZXIpIGJvb2wKIAljbGVhciAgICAgIGZ1bmMocG9pbnRlcikKLQlnZXQgICAgICAgIGZ1bmMocG9pbnRlcikgcHJlZi5WYWx1ZQotCXNldCAgICAgICAgZnVuYyhwb2ludGVyLCBwcmVmLlZhbHVlKQotCW11dGFibGUgICAgZnVuYyhwb2ludGVyKSBwcmVmLlZhbHVlCi0JbmV3TWVzc2FnZSBmdW5jKCkgcHJlZi5NZXNzYWdlCi0JbmV3RmllbGQgICBmdW5jKCkgcHJlZi5WYWx1ZQorCWdldCAgICAgICAgZnVuYyhwb2ludGVyKSBwcm90b3JlZmxlY3QuVmFsdWUKKwlzZXQgICAgICAgIGZ1bmMocG9pbnRlciwgcHJvdG9yZWZsZWN0LlZhbHVlKQorCW11dGFibGUgICAgZnVuYyhwb2ludGVyKSBwcm90b3JlZmxlY3QuVmFsdWUKKwluZXdNZXNzYWdlIGZ1bmMoKSBwcm90b3JlZmxlY3QuTWVzc2FnZQorCW5ld0ZpZWxkICAgZnVuYygpIHByb3RvcmVmbGVjdC5WYWx1ZQogfQogCi1mdW5jIGZpZWxkSW5mb0Zvck1pc3NpbmcoZmQgcHJlZi5GaWVsZERlc2NyaXB0b3IpIGZpZWxkSW5mbyB7CitmdW5jIGZpZWxkSW5mb0Zvck1pc3NpbmcoZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgZmllbGRJbmZvIHsKIAkvLyBUaGlzIG5ldmVyIG9jY3VycyBmb3IgZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZXMuCiAJLy8gSXQgaW1wbGllcyB0aGF0IGEgaGFuZC1jcmFmdGVkIHR5cGUgaGFzIG1pc3NpbmcgR28gZmllbGRzCiAJLy8gZm9yIHNwZWNpZmljIHByb3RvYnVmIG1lc3NhZ2UgZmllbGRzLgpAQCAtNDAsMTkgKzQwLDE5IEBACiAJCWNsZWFyOiBmdW5jKHAgcG9pbnRlcikgewogCQkJcGFuaWMoIm1pc3NpbmcgR28gc3RydWN0IGZpZWxkIGZvciAiICsgc3RyaW5nKGZkLkZ1bGxOYW1lKCkpKQogCQl9LAotCQlnZXQ6IGZ1bmMocCBwb2ludGVyKSBwcmVmLlZhbHVlIHsKKwkJZ2V0OiBmdW5jKHAgcG9pbnRlcikgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAkJCXJldHVybiBmZC5EZWZhdWx0KCkKIAkJfSwKLQkJc2V0OiBmdW5jKHAgcG9pbnRlciwgdiBwcmVmLlZhbHVlKSB7CisJCXNldDogZnVuYyhwIHBvaW50ZXIsIHYgcHJvdG9yZWZsZWN0LlZhbHVlKSB7CiAJCQlwYW5pYygibWlzc2luZyBHbyBzdHJ1Y3QgZmllbGQgZm9yICIgKyBzdHJpbmcoZmQuRnVsbE5hbWUoKSkpCiAJCX0sCi0JCW11dGFibGU6IGZ1bmMocCBwb2ludGVyKSBwcmVmLlZhbHVlIHsKKwkJbXV0YWJsZTogZnVuYyhwIHBvaW50ZXIpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJCQlwYW5pYygibWlzc2luZyBHbyBzdHJ1Y3QgZmllbGQgZm9yICIgKyBzdHJpbmcoZmQuRnVsbE5hbWUoKSkpCiAJCX0sCi0JCW5ld01lc3NhZ2U6IGZ1bmMoKSBwcmVmLk1lc3NhZ2UgeworCQluZXdNZXNzYWdlOiBmdW5jKCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2UgewogCQkJcGFuaWMoIm1pc3NpbmcgR28gc3RydWN0IGZpZWxkIGZvciAiICsgc3RyaW5nKGZkLkZ1bGxOYW1lKCkpKQogCQl9LAotCQluZXdGaWVsZDogZnVuYygpIHByZWYuVmFsdWUgeworCQluZXdGaWVsZDogZnVuYygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJCQlpZiB2IDo9IGZkLkRlZmF1bHQoKTsgdi5Jc1ZhbGlkKCkgewogCQkJCXJldHVybiB2CiAJCQl9CkBAIC02MSw3ICs2MSw3IEBACiAJfQogfQogCi1mdW5jIGZpZWxkSW5mb0Zvck9uZW9mKGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCBmcyByZWZsZWN0LlN0cnVjdEZpZWxkLCB4IGV4cG9ydGVyLCBvdCByZWZsZWN0LlR5cGUpIGZpZWxkSW5mbyB7CitmdW5jIGZpZWxkSW5mb0Zvck9uZW9mKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIGZzIHJlZmxlY3QuU3RydWN0RmllbGQsIHggZXhwb3J0ZXIsIG90IHJlZmxlY3QuVHlwZSkgZmllbGRJbmZvIHsKIAlmdCA6PSBmcy5UeXBlCiAJaWYgZnQuS2luZCgpICE9IHJlZmxlY3QuSW50ZXJmYWNlIHsKIAkJcGFuaWMoZm10LlNwcmludGYoImZpZWxkICV2IGhhcyBpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCBpbnRlcmZhY2Uga2luZCIsIGZkLkZ1bGxOYW1lKCksIGZ0KSkKQEAgLTEwMiw3ICsxMDIsNyBAQAogCQkJfQogCQkJcnYuU2V0KHJlZmxlY3QuWmVybyhydi5UeXBlKCkpKQogCQl9LAotCQlnZXQ6IGZ1bmMocCBwb2ludGVyKSBwcmVmLlZhbHVlIHsKKwkJZ2V0OiBmdW5jKHAgcG9pbnRlcikgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAkJCWlmIHAuSXNOaWwoKSB7CiAJCQkJcmV0dXJuIGNvbnYuWmVybygpCiAJCQl9CkBAIC0xMTMsNyArMTEzLDcgQEAKIAkJCXJ2ID0gcnYuRWxlbSgpLkVsZW0oKS5GaWVsZCgwKQogCQkJcmV0dXJuIGNvbnYuUEJWYWx1ZU9mKHJ2KQogCQl9LAotCQlzZXQ6IGZ1bmMocCBwb2ludGVyLCB2IHByZWYuVmFsdWUpIHsKKwkJc2V0OiBmdW5jKHAgcG9pbnRlciwgdiBwcm90b3JlZmxlY3QuVmFsdWUpIHsKIAkJCXJ2IDo9IHAuQXBwbHkoZmllbGRPZmZzZXQpLkFzVmFsdWVPZihmcy5UeXBlKS5FbGVtKCkKIAkJCWlmIHJ2LklzTmlsKCkgfHwgcnYuRWxlbSgpLlR5cGUoKS5FbGVtKCkgIT0gb3QgfHwgcnYuRWxlbSgpLklzTmlsKCkgewogCQkJCXJ2LlNldChyZWZsZWN0Lk5ldyhvdCkpCkBAIC0xMjEsNyArMTIxLDcgQEAKIAkJCXJ2ID0gcnYuRWxlbSgpLkVsZW0oKS5GaWVsZCgwKQogCQkJcnYuU2V0KGNvbnYuR29WYWx1ZU9mKHYpKQogCQl9LAotCQltdXRhYmxlOiBmdW5jKHAgcG9pbnRlcikgcHJlZi5WYWx1ZSB7CisJCW11dGFibGU6IGZ1bmMocCBwb2ludGVyKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCQkJaWYgIWlzTWVzc2FnZSB7CiAJCQkJcGFuaWMoZm10LlNwcmludGYoImZpZWxkICV2IHdpdGggaW52YWxpZCBNdXRhYmxlIGNhbGwgb24gZmllbGQgd2l0aCBub24tY29tcG9zaXRlIHR5cGUiLCBmZC5GdWxsTmFtZSgpKSkKIAkJCX0KQEAgLTEzMSwyMCArMTMxLDIwIEBACiAJCQl9CiAJCQlydiA9IHJ2LkVsZW0oKS5FbGVtKCkuRmllbGQoMCkKIAkJCWlmIHJ2LktpbmQoKSA9PSByZWZsZWN0LlB0ciAmJiBydi5Jc05pbCgpIHsKLQkJCQlydi5TZXQoY29udi5Hb1ZhbHVlT2YocHJlZi5WYWx1ZU9mTWVzc2FnZShjb252Lk5ldygpLk1lc3NhZ2UoKSkpKQorCQkJCXJ2LlNldChjb252LkdvVmFsdWVPZihwcm90b3JlZmxlY3QuVmFsdWVPZk1lc3NhZ2UoY29udi5OZXcoKS5NZXNzYWdlKCkpKSkKIAkJCX0KIAkJCXJldHVybiBjb252LlBCVmFsdWVPZihydikKIAkJfSwKLQkJbmV3TWVzc2FnZTogZnVuYygpIHByZWYuTWVzc2FnZSB7CisJCW5ld01lc3NhZ2U6IGZ1bmMoKSBwcm90b3JlZmxlY3QuTWVzc2FnZSB7CiAJCQlyZXR1cm4gY29udi5OZXcoKS5NZXNzYWdlKCkKIAkJfSwKLQkJbmV3RmllbGQ6IGZ1bmMoKSBwcmVmLlZhbHVlIHsKKwkJbmV3RmllbGQ6IGZ1bmMoKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCQkJcmV0dXJuIGNvbnYuTmV3KCkKIAkJfSwKIAl9CiB9CiAKLWZ1bmMgZmllbGRJbmZvRm9yTWFwKGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCBmcyByZWZsZWN0LlN0cnVjdEZpZWxkLCB4IGV4cG9ydGVyKSBmaWVsZEluZm8geworZnVuYyBmaWVsZEluZm9Gb3JNYXAoZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciwgZnMgcmVmbGVjdC5TdHJ1Y3RGaWVsZCwgeCBleHBvcnRlcikgZmllbGRJbmZvIHsKIAlmdCA6PSBmcy5UeXBlCiAJaWYgZnQuS2luZCgpICE9IHJlZmxlY3QuTWFwIHsKIAkJcGFuaWMoZm10LlNwcmludGYoImZpZWxkICV2IGhhcyBpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCBtYXAga2luZCIsIGZkLkZ1bGxOYW1lKCksIGZ0KSkKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQkJcnYgOj0gcC5BcHBseShmaWVsZE9mZnNldCkuQXNWYWx1ZU9mKGZzLlR5cGUpLkVsZW0oKQogCQkJcnYuU2V0KHJlZmxlY3QuWmVybyhydi5UeXBlKCkpKQogCQl9LAotCQlnZXQ6IGZ1bmMocCBwb2ludGVyKSBwcmVmLlZhbHVlIHsKKwkJZ2V0OiBmdW5jKHAgcG9pbnRlcikgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAkJCWlmIHAuSXNOaWwoKSB7CiAJCQkJcmV0dXJuIGNvbnYuWmVybygpCiAJCQl9CkBAIC0xNzYsNyArMTc2LDcgQEAKIAkJCX0KIAkJCXJldHVybiBjb252LlBCVmFsdWVPZihydikKIAkJfSwKLQkJc2V0OiBmdW5jKHAgcG9pbnRlciwgdiBwcmVmLlZhbHVlKSB7CisJCXNldDogZnVuYyhwIHBvaW50ZXIsIHYgcHJvdG9yZWZsZWN0LlZhbHVlKSB7CiAJCQlydiA6PSBwLkFwcGx5KGZpZWxkT2Zmc2V0KS5Bc1ZhbHVlT2YoZnMuVHlwZSkuRWxlbSgpCiAJCQlwdiA6PSBjb252LkdvVmFsdWVPZih2KQogCQkJaWYgcHYuSXNOaWwoKSB7CkBAIC0xODQsMjAgKzE4NCwyMCBAQAogCQkJfQogCQkJcnYuU2V0KHB2KQogCQl9LAotCQltdXRhYmxlOiBmdW5jKHAgcG9pbnRlcikgcHJlZi5WYWx1ZSB7CisJCW11dGFibGU6IGZ1bmMocCBwb2ludGVyKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCQkJdiA6PSBwLkFwcGx5KGZpZWxkT2Zmc2V0KS5Bc1ZhbHVlT2YoZnMuVHlwZSkuRWxlbSgpCiAJCQlpZiB2LklzTmlsKCkgewogCQkJCXYuU2V0KHJlZmxlY3QuTWFrZU1hcChmcy5UeXBlKSkKIAkJCX0KIAkJCXJldHVybiBjb252LlBCVmFsdWVPZih2KQogCQl9LAotCQluZXdGaWVsZDogZnVuYygpIHByZWYuVmFsdWUgeworCQluZXdGaWVsZDogZnVuYygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJCQlyZXR1cm4gY29udi5OZXcoKQogCQl9LAogCX0KIH0KIAotZnVuYyBmaWVsZEluZm9Gb3JMaXN0KGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCBmcyByZWZsZWN0LlN0cnVjdEZpZWxkLCB4IGV4cG9ydGVyKSBmaWVsZEluZm8geworZnVuYyBmaWVsZEluZm9Gb3JMaXN0KGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIGZzIHJlZmxlY3QuU3RydWN0RmllbGQsIHggZXhwb3J0ZXIpIGZpZWxkSW5mbyB7CiAJZnQgOj0gZnMuVHlwZQogCWlmIGZ0LktpbmQoKSAhPSByZWZsZWN0LlNsaWNlIHsKIAkJcGFuaWMoZm10LlNwcmludGYoImZpZWxkICV2IGhhcyBpbnZhbGlkIHR5cGU6IGdvdCAldiwgd2FudCBzbGljZSBraW5kIiwgZmQuRnVsbE5hbWUoKSwgZnQpKQpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCQlydiA6PSBwLkFwcGx5KGZpZWxkT2Zmc2V0KS5Bc1ZhbHVlT2YoZnMuVHlwZSkuRWxlbSgpCiAJCQlydi5TZXQocmVmbGVjdC5aZXJvKHJ2LlR5cGUoKSkpCiAJCX0sCi0JCWdldDogZnVuYyhwIHBvaW50ZXIpIHByZWYuVmFsdWUgeworCQlnZXQ6IGZ1bmMocCBwb2ludGVyKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCQkJaWYgcC5Jc05pbCgpIHsKIAkJCQlyZXR1cm4gY29udi5aZXJvKCkKIAkJCX0KQEAgLTIyOSw3ICsyMjksNyBAQAogCQkJfQogCQkJcmV0dXJuIGNvbnYuUEJWYWx1ZU9mKHJ2KQogCQl9LAotCQlzZXQ6IGZ1bmMocCBwb2ludGVyLCB2IHByZWYuVmFsdWUpIHsKKwkJc2V0OiBmdW5jKHAgcG9pbnRlciwgdiBwcm90b3JlZmxlY3QuVmFsdWUpIHsKIAkJCXJ2IDo9IHAuQXBwbHkoZmllbGRPZmZzZXQpLkFzVmFsdWVPZihmcy5UeXBlKS5FbGVtKCkKIAkJCXB2IDo9IGNvbnYuR29WYWx1ZU9mKHYpCiAJCQlpZiBwdi5Jc05pbCgpIHsKQEAgLTIzNywxMSArMjM3LDExIEBACiAJCQl9CiAJCQlydi5TZXQocHYuRWxlbSgpKQogCQl9LAotCQltdXRhYmxlOiBmdW5jKHAgcG9pbnRlcikgcHJlZi5WYWx1ZSB7CisJCW11dGFibGU6IGZ1bmMocCBwb2ludGVyKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCQkJdiA6PSBwLkFwcGx5KGZpZWxkT2Zmc2V0KS5Bc1ZhbHVlT2YoZnMuVHlwZSkKIAkJCXJldHVybiBjb252LlBCVmFsdWVPZih2KQogCQl9LAotCQluZXdGaWVsZDogZnVuYygpIHByZWYuVmFsdWUgeworCQluZXdGaWVsZDogZnVuYygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJCQlyZXR1cm4gY29udi5OZXcoKQogCQl9LAogCX0KQEAgLTI1Miw3ICsyNTIsNyBAQAogCWVtcHR5Qnl0ZXMgPSByZWZsZWN0LlZhbHVlT2YoW11ieXRle30pCiApCiAKLWZ1bmMgZmllbGRJbmZvRm9yU2NhbGFyKGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCBmcyByZWZsZWN0LlN0cnVjdEZpZWxkLCB4IGV4cG9ydGVyKSBmaWVsZEluZm8geworZnVuYyBmaWVsZEluZm9Gb3JTY2FsYXIoZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvciwgZnMgcmVmbGVjdC5TdHJ1Y3RGaWVsZCwgeCBleHBvcnRlcikgZmllbGRJbmZvIHsKIAlmdCA6PSBmcy5UeXBlCiAJbnVsbGFibGUgOj0gZmQuSGFzUHJlc2VuY2UoKQogCWlzQnl0ZXMgOj0gZnQuS2luZCgpID09IHJlZmxlY3QuU2xpY2UgJiYgZnQuRWxlbSgpLktpbmQoKSA9PSByZWZsZWN0LlVpbnQ4CkBAIC0zMDAsNyArMzAwLDcgQEAKIAkJCXJ2IDo9IHAuQXBwbHkoZmllbGRPZmZzZXQpLkFzVmFsdWVPZihmcy5UeXBlKS5FbGVtKCkKIAkJCXJ2LlNldChyZWZsZWN0Llplcm8ocnYuVHlwZSgpKSkKIAkJfSwKLQkJZ2V0OiBmdW5jKHAgcG9pbnRlcikgcHJlZi5WYWx1ZSB7CisJCWdldDogZnVuYyhwIHBvaW50ZXIpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJCQlpZiBwLklzTmlsKCkgewogCQkJCXJldHVybiBjb252Llplcm8oKQogCQkJfQpAQCAtMzE1LDcgKzMxNSw3IEBACiAJCQl9CiAJCQlyZXR1cm4gY29udi5QQlZhbHVlT2YocnYpCiAJCX0sCi0JCXNldDogZnVuYyhwIHBvaW50ZXIsIHYgcHJlZi5WYWx1ZSkgeworCQlzZXQ6IGZ1bmMocCBwb2ludGVyLCB2IHByb3RvcmVmbGVjdC5WYWx1ZSkgewogCQkJcnYgOj0gcC5BcHBseShmaWVsZE9mZnNldCkuQXNWYWx1ZU9mKGZzLlR5cGUpLkVsZW0oKQogCQkJaWYgbnVsbGFibGUgJiYgcnYuS2luZCgpID09IHJlZmxlY3QuUHRyIHsKIAkJCQlpZiBydi5Jc05pbCgpIHsKQEAgLTMzMiwyMyArMzMyLDIzIEBACiAJCQkJfQogCQkJfQogCQl9LAotCQluZXdGaWVsZDogZnVuYygpIHByZWYuVmFsdWUgeworCQluZXdGaWVsZDogZnVuYygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJCQlyZXR1cm4gY29udi5OZXcoKQogCQl9LAogCX0KIH0KIAotZnVuYyBmaWVsZEluZm9Gb3JXZWFrTWVzc2FnZShmZCBwcmVmLkZpZWxkRGVzY3JpcHRvciwgd2Vha09mZnNldCBvZmZzZXQpIGZpZWxkSW5mbyB7CitmdW5jIGZpZWxkSW5mb0ZvcldlYWtNZXNzYWdlKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIHdlYWtPZmZzZXQgb2Zmc2V0KSBmaWVsZEluZm8gewogCWlmICFmbGFncy5Qcm90b0xlZ2FjeSB7CiAJCXBhbmljKCJubyBzdXBwb3J0IGZvciBwcm90bzEgd2VhayBmaWVsZHMiKQogCX0KIAogCXZhciBvbmNlIHN5bmMuT25jZQotCXZhciBtZXNzYWdlVHlwZSBwcmVmLk1lc3NhZ2VUeXBlCisJdmFyIG1lc3NhZ2VUeXBlIHByb3RvcmVmbGVjdC5NZXNzYWdlVHlwZQogCWxhenlJbml0IDo9IGZ1bmMoKSB7CiAJCW9uY2UuRG8oZnVuYygpIHsKIAkJCW1lc3NhZ2VOYW1lIDo9IGZkLk1lc3NhZ2UoKS5GdWxsTmFtZSgpCi0JCQltZXNzYWdlVHlwZSwgXyA9IHByZWcuR2xvYmFsVHlwZXMuRmluZE1lc3NhZ2VCeU5hbWUobWVzc2FnZU5hbWUpCisJCQltZXNzYWdlVHlwZSwgXyA9IHByb3RvcmVnaXN0cnkuR2xvYmFsVHlwZXMuRmluZE1lc3NhZ2VCeU5hbWUobWVzc2FnZU5hbWUpCiAJCQlpZiBtZXNzYWdlVHlwZSA9PSBuaWwgewogCQkJCXBhbmljKGZtdC5TcHJpbnRmKCJ3ZWFrIG1lc3NhZ2UgJXYgZm9yIGZpZWxkICV2IGlzIG5vdCBsaW5rZWQgaW4iLCBtZXNzYWdlTmFtZSwgZmQuRnVsbE5hbWUoKSkpCiAJCQl9CkBAIC0zNjgsMTggKzM2OCwxOCBAQAogCQljbGVhcjogZnVuYyhwIHBvaW50ZXIpIHsKIAkJCXAuQXBwbHkod2Vha09mZnNldCkuV2Vha0ZpZWxkcygpLmNsZWFyKG51bSkKIAkJfSwKLQkJZ2V0OiBmdW5jKHAgcG9pbnRlcikgcHJlZi5WYWx1ZSB7CisJCWdldDogZnVuYyhwIHBvaW50ZXIpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJCQlsYXp5SW5pdCgpCiAJCQlpZiBwLklzTmlsKCkgewotCQkJCXJldHVybiBwcmVmLlZhbHVlT2ZNZXNzYWdlKG1lc3NhZ2VUeXBlLlplcm8oKSkKKwkJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZNZXNzYWdlKG1lc3NhZ2VUeXBlLlplcm8oKSkKIAkJCX0KIAkJCW0sIG9rIDo9IHAuQXBwbHkod2Vha09mZnNldCkuV2Vha0ZpZWxkcygpLmdldChudW0pCiAJCQlpZiAhb2sgewotCQkJCXJldHVybiBwcmVmLlZhbHVlT2ZNZXNzYWdlKG1lc3NhZ2VUeXBlLlplcm8oKSkKKwkJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZNZXNzYWdlKG1lc3NhZ2VUeXBlLlplcm8oKSkKIAkJCX0KLQkJCXJldHVybiBwcmVmLlZhbHVlT2ZNZXNzYWdlKG0uUHJvdG9SZWZsZWN0KCkpCisJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZNZXNzYWdlKG0uUHJvdG9SZWZsZWN0KCkpCiAJCX0sCi0JCXNldDogZnVuYyhwIHBvaW50ZXIsIHYgcHJlZi5WYWx1ZSkgeworCQlzZXQ6IGZ1bmMocCBwb2ludGVyLCB2IHByb3RvcmVmbGVjdC5WYWx1ZSkgewogCQkJbGF6eUluaXQoKQogCQkJbSA6PSB2Lk1lc3NhZ2UoKQogCQkJaWYgbS5EZXNjcmlwdG9yKCkgIT0gbWVzc2FnZVR5cGUuRGVzY3JpcHRvcigpIHsKQEAgLTM5MCw3ICszOTAsNyBAQAogCQkJfQogCQkJcC5BcHBseSh3ZWFrT2Zmc2V0KS5XZWFrRmllbGRzKCkuc2V0KG51bSwgbS5JbnRlcmZhY2UoKSkKIAkJfSwKLQkJbXV0YWJsZTogZnVuYyhwIHBvaW50ZXIpIHByZWYuVmFsdWUgeworCQltdXRhYmxlOiBmdW5jKHAgcG9pbnRlcikgcHJvdG9yZWZsZWN0LlZhbHVlIHsKIAkJCWxhenlJbml0KCkKIAkJCWZzIDo9IHAuQXBwbHkod2Vha09mZnNldCkuV2Vha0ZpZWxkcygpCiAJCQltLCBvayA6PSBmcy5nZXQobnVtKQpAQCAtMzk4LDIwICszOTgsMjAgQEAKIAkJCQltID0gbWVzc2FnZVR5cGUuTmV3KCkuSW50ZXJmYWNlKCkKIAkJCQlmcy5zZXQobnVtLCBtKQogCQkJfQotCQkJcmV0dXJuIHByZWYuVmFsdWVPZk1lc3NhZ2UobS5Qcm90b1JlZmxlY3QoKSkKKwkJCXJldHVybiBwcm90b3JlZmxlY3QuVmFsdWVPZk1lc3NhZ2UobS5Qcm90b1JlZmxlY3QoKSkKIAkJfSwKLQkJbmV3TWVzc2FnZTogZnVuYygpIHByZWYuTWVzc2FnZSB7CisJCW5ld01lc3NhZ2U6IGZ1bmMoKSBwcm90b3JlZmxlY3QuTWVzc2FnZSB7CiAJCQlsYXp5SW5pdCgpCiAJCQlyZXR1cm4gbWVzc2FnZVR5cGUuTmV3KCkKIAkJfSwKLQkJbmV3RmllbGQ6IGZ1bmMoKSBwcmVmLlZhbHVlIHsKKwkJbmV3RmllbGQ6IGZ1bmMoKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCQkJbGF6eUluaXQoKQotCQkJcmV0dXJuIHByZWYuVmFsdWVPZk1lc3NhZ2UobWVzc2FnZVR5cGUuTmV3KCkpCisJCQlyZXR1cm4gcHJvdG9yZWZsZWN0LlZhbHVlT2ZNZXNzYWdlKG1lc3NhZ2VUeXBlLk5ldygpKQogCQl9LAogCX0KIH0KIAotZnVuYyBmaWVsZEluZm9Gb3JNZXNzYWdlKGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCBmcyByZWZsZWN0LlN0cnVjdEZpZWxkLCB4IGV4cG9ydGVyKSBmaWVsZEluZm8geworZnVuYyBmaWVsZEluZm9Gb3JNZXNzYWdlKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIGZzIHJlZmxlY3QuU3RydWN0RmllbGQsIHggZXhwb3J0ZXIpIGZpZWxkSW5mbyB7CiAJZnQgOj0gZnMuVHlwZQogCWNvbnYgOj0gTmV3Q29udmVydGVyKGZ0LCBmZCkKIApAQCAtNDMzLDQ3ICs0MzMsNDcgQEAKIAkJCXJ2IDo9IHAuQXBwbHkoZmllbGRPZmZzZXQpLkFzVmFsdWVPZihmcy5UeXBlKS5FbGVtKCkKIAkJCXJ2LlNldChyZWZsZWN0Llplcm8ocnYuVHlwZSgpKSkKIAkJfSwKLQkJZ2V0OiBmdW5jKHAgcG9pbnRlcikgcHJlZi5WYWx1ZSB7CisJCWdldDogZnVuYyhwIHBvaW50ZXIpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJCQlpZiBwLklzTmlsKCkgewogCQkJCXJldHVybiBjb252Llplcm8oKQogCQkJfQogCQkJcnYgOj0gcC5BcHBseShmaWVsZE9mZnNldCkuQXNWYWx1ZU9mKGZzLlR5cGUpLkVsZW0oKQogCQkJcmV0dXJuIGNvbnYuUEJWYWx1ZU9mKHJ2KQogCQl9LAotCQlzZXQ6IGZ1bmMocCBwb2ludGVyLCB2IHByZWYuVmFsdWUpIHsKKwkJc2V0OiBmdW5jKHAgcG9pbnRlciwgdiBwcm90b3JlZmxlY3QuVmFsdWUpIHsKIAkJCXJ2IDo9IHAuQXBwbHkoZmllbGRPZmZzZXQpLkFzVmFsdWVPZihmcy5UeXBlKS5FbGVtKCkKIAkJCXJ2LlNldChjb252LkdvVmFsdWVPZih2KSkKIAkJCWlmIGZzLlR5cGUuS2luZCgpID09IHJlZmxlY3QuUHRyICYmIHJ2LklzTmlsKCkgewogCQkJCXBhbmljKGZtdC5TcHJpbnRmKCJmaWVsZCAldiBoYXMgaW52YWxpZCBuaWwgcG9pbnRlciIsIGZkLkZ1bGxOYW1lKCkpKQogCQkJfQogCQl9LAotCQltdXRhYmxlOiBmdW5jKHAgcG9pbnRlcikgcHJlZi5WYWx1ZSB7CisJCW11dGFibGU6IGZ1bmMocCBwb2ludGVyKSBwcm90b3JlZmxlY3QuVmFsdWUgewogCQkJcnYgOj0gcC5BcHBseShmaWVsZE9mZnNldCkuQXNWYWx1ZU9mKGZzLlR5cGUpLkVsZW0oKQogCQkJaWYgZnMuVHlwZS5LaW5kKCkgPT0gcmVmbGVjdC5QdHIgJiYgcnYuSXNOaWwoKSB7CiAJCQkJcnYuU2V0KGNvbnYuR29WYWx1ZU9mKGNvbnYuTmV3KCkpKQogCQkJfQogCQkJcmV0dXJuIGNvbnYuUEJWYWx1ZU9mKHJ2KQogCQl9LAotCQluZXdNZXNzYWdlOiBmdW5jKCkgcHJlZi5NZXNzYWdlIHsKKwkJbmV3TWVzc2FnZTogZnVuYygpIHByb3RvcmVmbGVjdC5NZXNzYWdlIHsKIAkJCXJldHVybiBjb252Lk5ldygpLk1lc3NhZ2UoKQogCQl9LAotCQluZXdGaWVsZDogZnVuYygpIHByZWYuVmFsdWUgeworCQluZXdGaWVsZDogZnVuYygpIHByb3RvcmVmbGVjdC5WYWx1ZSB7CiAJCQlyZXR1cm4gY29udi5OZXcoKQogCQl9LAogCX0KIH0KIAogdHlwZSBvbmVvZkluZm8gc3RydWN0IHsKLQlvbmVvZkRlc2MgcHJlZi5PbmVvZkRlc2NyaXB0b3IKLQl3aGljaCAgICAgZnVuYyhwb2ludGVyKSBwcmVmLkZpZWxkTnVtYmVyCisJb25lb2ZEZXNjIHByb3RvcmVmbGVjdC5PbmVvZkRlc2NyaXB0b3IKKwl3aGljaCAgICAgZnVuYyhwb2ludGVyKSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIKIH0KIAotZnVuYyBtYWtlT25lb2ZJbmZvKG9kIHByZWYuT25lb2ZEZXNjcmlwdG9yLCBzaSBzdHJ1Y3RJbmZvLCB4IGV4cG9ydGVyKSAqb25lb2ZJbmZvIHsKK2Z1bmMgbWFrZU9uZW9mSW5mbyhvZCBwcm90b3JlZmxlY3QuT25lb2ZEZXNjcmlwdG9yLCBzaSBzdHJ1Y3RJbmZvLCB4IGV4cG9ydGVyKSAqb25lb2ZJbmZvIHsKIAlvaSA6PSAmb25lb2ZJbmZve29uZW9mRGVzYzogb2R9CiAJaWYgb2QuSXNTeW50aGV0aWMoKSB7CiAJCWZzIDo9IHNpLmZpZWxkc0J5TnVtYmVyW29kLkZpZWxkcygpLkdldCgwKS5OdW1iZXIoKV0KIAkJZmllbGRPZmZzZXQgOj0gb2Zmc2V0T2YoZnMsIHgpCi0JCW9pLndoaWNoID0gZnVuYyhwIHBvaW50ZXIpIHByZWYuRmllbGROdW1iZXIgeworCQlvaS53aGljaCA9IGZ1bmMocCBwb2ludGVyKSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgewogCQkJaWYgcC5Jc05pbCgpIHsKIAkJCQlyZXR1cm4gMAogCQkJfQpAQCAtNDg2LDcgKzQ4Niw3IEBACiAJfSBlbHNlIHsKIAkJZnMgOj0gc2kub25lb2ZzQnlOYW1lW29kLk5hbWUoKV0KIAkJZmllbGRPZmZzZXQgOj0gb2Zmc2V0T2YoZnMsIHgpCi0JCW9pLndoaWNoID0gZnVuYyhwIHBvaW50ZXIpIHByZWYuRmllbGROdW1iZXIgeworCQlvaS53aGljaCA9IGZ1bmMocCBwb2ludGVyKSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIgewogCQkJaWYgcC5Jc05pbCgpIHsKIAkJCQlyZXR1cm4gMAogCQkJfQpAQCAtNTM4LDYgKzUzOCw2IEBACiAJCX0KIAkJcmV0dXJuIHRydWUKIAlkZWZhdWx0OgotCQlwYW5pYygmcmVmbGVjdC5WYWx1ZUVycm9yeyJyZWZsZWN0LlZhbHVlLklzWmVybyIsIHYuS2luZCgpfSkKKwkJcGFuaWMoJnJlZmxlY3QuVmFsdWVFcnJvcntNZXRob2Q6ICJyZWZsZWN0LlZhbHVlLklzWmVybyIsIEtpbmQ6IHYuS2luZCgpfSkKIAl9CiB9CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9wb2ludGVyX3JlZmxlY3QuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9wb2ludGVyX3JlZmxlY3QuZ28KaW5kZXggOWUzZWQ4Mi4uNTE3ZTk0NCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvcG9pbnRlcl9yZWZsZWN0LmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL3BvaW50ZXJfcmVmbGVjdC5nbwpAQCAtMiw2ICsyLDcgQEAKIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlCiAvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAKKy8vZ286YnVpbGQgcHVyZWdvIHx8IGFwcGVuZ2luZQogLy8gK2J1aWxkIHB1cmVnbyBhcHBlbmdpbmUKIAogcGFja2FnZSBpbXBsCkBAIC0xNTgsNiArMTU5LDQyIEBACiAJcC52LkVsZW0oKS5TZXQodi52KQogfQogCitmdW5jIGdyb3dTbGljZShwIHBvaW50ZXIsIGFkZENhcCBpbnQpIHsKKwkvLyBUT0RPOiBPbmNlIHdlIG9ubHkgc3VwcG9ydCBHbyAxLjIwIGFuZCBuZXdlciwgdXNlIHJlZmxlY3QuR3Jvdy4KKwlpbiA6PSBwLnYuRWxlbSgpCisJb3V0IDo9IHJlZmxlY3QuTWFrZVNsaWNlKGluLlR5cGUoKSwgaW4uTGVuKCksIGluLkxlbigpK2FkZENhcCkKKwlyZWZsZWN0LkNvcHkob3V0LCBpbikKKwlwLnYuRWxlbSgpLlNldChvdXQpCit9CisKK2Z1bmMgKHAgcG9pbnRlcikgZ3Jvd0Jvb2xTbGljZShhZGRDYXAgaW50KSB7CisJZ3Jvd1NsaWNlKHAsIGFkZENhcCkKK30KKworZnVuYyAocCBwb2ludGVyKSBncm93SW50MzJTbGljZShhZGRDYXAgaW50KSB7CisJZ3Jvd1NsaWNlKHAsIGFkZENhcCkKK30KKworZnVuYyAocCBwb2ludGVyKSBncm93VWludDMyU2xpY2UoYWRkQ2FwIGludCkgeworCWdyb3dTbGljZShwLCBhZGRDYXApCit9CisKK2Z1bmMgKHAgcG9pbnRlcikgZ3Jvd0ludDY0U2xpY2UoYWRkQ2FwIGludCkgeworCWdyb3dTbGljZShwLCBhZGRDYXApCit9CisKK2Z1bmMgKHAgcG9pbnRlcikgZ3Jvd1VpbnQ2NFNsaWNlKGFkZENhcCBpbnQpIHsKKwlncm93U2xpY2UocCwgYWRkQ2FwKQorfQorCitmdW5jIChwIHBvaW50ZXIpIGdyb3dGbG9hdDY0U2xpY2UoYWRkQ2FwIGludCkgeworCWdyb3dTbGljZShwLCBhZGRDYXApCit9CisKK2Z1bmMgKHAgcG9pbnRlcikgZ3Jvd0Zsb2F0MzJTbGljZShhZGRDYXAgaW50KSB7CisJZ3Jvd1NsaWNlKHAsIGFkZENhcCkKK30KKwogZnVuYyAoRXhwb3J0KSBNZXNzYWdlU3RhdGVPZihwIFBvaW50ZXIpICptZXNzYWdlU3RhdGUgICAgIHsgcGFuaWMoIm5vdCBzdXBwb3J0ZWQiKSB9CiBmdW5jIChtcyAqbWVzc2FnZVN0YXRlKSBwb2ludGVyKCkgcG9pbnRlciAgICAgICAgICAgICAgICAgeyBwYW5pYygibm90IHN1cHBvcnRlZCIpIH0KIGZ1bmMgKG1zICptZXNzYWdlU3RhdGUpIG1lc3NhZ2VJbmZvKCkgKk1lc3NhZ2VJbmZvICAgICAgICB7IHBhbmljKCJub3Qgc3VwcG9ydGVkIikgfQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvcG9pbnRlcl91bnNhZmUuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9wb2ludGVyX3Vuc2FmZS5nbwppbmRleCA5ZWNmMjNhLi40YjAyMGUzIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9wb2ludGVyX3Vuc2FmZS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC9wb2ludGVyX3Vuc2FmZS5nbwpAQCAtMiw2ICsyLDcgQEAKIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlCiAvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAKKy8vZ286YnVpbGQgIXB1cmVnbyAmJiAhYXBwZW5naW5lCiAvLyArYnVpbGQgIXB1cmVnbywhYXBwZW5naW5lCiAKIHBhY2thZ2UgaW1wbApAQCAtMTM3LDYgKzEzOCw0NiBAQAogCSooKnVuc2FmZS5Qb2ludGVyKShwLnApID0gKHVuc2FmZS5Qb2ludGVyKSh2LnApCiB9CiAKK2Z1bmMgKHAgcG9pbnRlcikgZ3Jvd0Jvb2xTbGljZShhZGRDYXAgaW50KSB7CisJc3AgOj0gcC5Cb29sU2xpY2UoKQorCXMgOj0gbWFrZShbXWJvb2wsIDAsIGFkZENhcCtsZW4oKnNwKSkKKwlzID0gc1s6bGVuKCpzcCldCisJY29weShzLCAqc3ApCisJKnNwID0gcworfQorCitmdW5jIChwIHBvaW50ZXIpIGdyb3dJbnQzMlNsaWNlKGFkZENhcCBpbnQpIHsKKwlzcCA6PSBwLkludDMyU2xpY2UoKQorCXMgOj0gbWFrZShbXWludDMyLCAwLCBhZGRDYXArbGVuKCpzcCkpCisJcyA9IHNbOmxlbigqc3ApXQorCWNvcHkocywgKnNwKQorCSpzcCA9IHMKK30KKworZnVuYyAocCBwb2ludGVyKSBncm93VWludDMyU2xpY2UoYWRkQ2FwIGludCkgeworCXAuZ3Jvd0ludDMyU2xpY2UoYWRkQ2FwKQorfQorCitmdW5jIChwIHBvaW50ZXIpIGdyb3dGbG9hdDMyU2xpY2UoYWRkQ2FwIGludCkgeworCXAuZ3Jvd0ludDMyU2xpY2UoYWRkQ2FwKQorfQorCitmdW5jIChwIHBvaW50ZXIpIGdyb3dJbnQ2NFNsaWNlKGFkZENhcCBpbnQpIHsKKwlzcCA6PSBwLkludDY0U2xpY2UoKQorCXMgOj0gbWFrZShbXWludDY0LCAwLCBhZGRDYXArbGVuKCpzcCkpCisJcyA9IHNbOmxlbigqc3ApXQorCWNvcHkocywgKnNwKQorCSpzcCA9IHMKK30KKworZnVuYyAocCBwb2ludGVyKSBncm93VWludDY0U2xpY2UoYWRkQ2FwIGludCkgeworCXAuZ3Jvd0ludDY0U2xpY2UoYWRkQ2FwKQorfQorCitmdW5jIChwIHBvaW50ZXIpIGdyb3dGbG9hdDY0U2xpY2UoYWRkQ2FwIGludCkgeworCXAuZ3Jvd0ludDY0U2xpY2UoYWRkQ2FwKQorfQorCiAvLyBTdGF0aWMgY2hlY2sgdGhhdCBNZXNzYWdlU3RhdGUgZG9lcyBub3QgZXhjZWVkIHRoZSBzaXplIG9mIGEgcG9pbnRlci4KIGNvbnN0IF8gPSB1aW50KHVuc2FmZS5TaXplb2YodW5zYWZlLlBvaW50ZXIobmlsKSkgLSB1bnNhZmUuU2l6ZW9mKE1lc3NhZ2VTdGF0ZXt9KSkKIApkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvdmFsaWRhdGUuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC92YWxpZGF0ZS5nbwppbmRleCAwOGNmYjYwLi5hMjRlNmJiIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC92YWxpZGF0ZS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC92YWxpZGF0ZS5nbwpAQCAtMTYsOSArMTYsOSBAQAogCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9mbGFncyIKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZ2VuaWQiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL3N0cnMiCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCi0JcHJlZyAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZ2lzdHJ5IgotCXBpZmFjZSAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2lmYWNlIgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZ2lzdHJ5IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UiCiApCiAKIC8vIFZhbGlkYXRpb25TdGF0dXMgaXMgdGhlIHJlc3VsdCBvZiB2YWxpZGF0aW5nIHRoZSB3aXJlLWZvcm1hdCBlbmNvZGluZyBvZiBhIG1lc3NhZ2UuCkBAIC01NiwyMCArNTYsMjAgQEAKIC8vIG9mIHRoZSBtZXNzYWdlIHR5cGUuCiAvLwogLy8gVGhpcyBmdW5jdGlvbiBpcyBleHBvc2VkIGZvciB0ZXN0aW5nLgotZnVuYyBWYWxpZGF0ZShtdCBwcmVmLk1lc3NhZ2VUeXBlLCBpbiBwaWZhY2UuVW5tYXJzaGFsSW5wdXQpIChvdXQgcGlmYWNlLlVubWFyc2hhbE91dHB1dCwgXyBWYWxpZGF0aW9uU3RhdHVzKSB7CitmdW5jIFZhbGlkYXRlKG10IHByb3RvcmVmbGVjdC5NZXNzYWdlVHlwZSwgaW4gcHJvdG9pZmFjZS5Vbm1hcnNoYWxJbnB1dCkgKG91dCBwcm90b2lmYWNlLlVubWFyc2hhbE91dHB1dCwgXyBWYWxpZGF0aW9uU3RhdHVzKSB7CiAJbWksIG9rIDo9IG10LigqTWVzc2FnZUluZm8pCiAJaWYgIW9rIHsKIAkJcmV0dXJuIG91dCwgVmFsaWRhdGlvblVua25vd24KIAl9CiAJaWYgaW4uUmVzb2x2ZXIgPT0gbmlsIHsKLQkJaW4uUmVzb2x2ZXIgPSBwcmVnLkdsb2JhbFR5cGVzCisJCWluLlJlc29sdmVyID0gcHJvdG9yZWdpc3RyeS5HbG9iYWxUeXBlcwogCX0KIAlvLCBzdCA6PSBtaS52YWxpZGF0ZShpbi5CdWYsIDAsIHVubWFyc2hhbE9wdGlvbnN7CiAJCWZsYWdzOiAgICBpbi5GbGFncywKIAkJcmVzb2x2ZXI6IGluLlJlc29sdmVyLAogCX0pCiAJaWYgby5pbml0aWFsaXplZCB7Ci0JCW91dC5GbGFncyB8PSBwaWZhY2UuVW5tYXJzaGFsSW5pdGlhbGl6ZWQKKwkJb3V0LkZsYWdzIHw9IHByb3RvaWZhY2UuVW5tYXJzaGFsSW5pdGlhbGl6ZWQKIAl9CiAJcmV0dXJuIG91dCwgc3QKIH0KQEAgLTEwNiwyMiArMTA2LDIyIEBACiAJdmFsaWRhdGlvblR5cGVNZXNzYWdlU2V0SXRlbQogKQogCi1mdW5jIG5ld0ZpZWxkVmFsaWRhdGlvbkluZm8obWkgKk1lc3NhZ2VJbmZvLCBzaSBzdHJ1Y3RJbmZvLCBmZCBwcmVmLkZpZWxkRGVzY3JpcHRvciwgZnQgcmVmbGVjdC5UeXBlKSB2YWxpZGF0aW9uSW5mbyB7CitmdW5jIG5ld0ZpZWxkVmFsaWRhdGlvbkluZm8obWkgKk1lc3NhZ2VJbmZvLCBzaSBzdHJ1Y3RJbmZvLCBmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yLCBmdCByZWZsZWN0LlR5cGUpIHZhbGlkYXRpb25JbmZvIHsKIAl2YXIgdmkgdmFsaWRhdGlvbkluZm8KIAlzd2l0Y2ggewogCWNhc2UgZmQuQ29udGFpbmluZ09uZW9mKCkgIT0gbmlsICYmICFmZC5Db250YWluaW5nT25lb2YoKS5Jc1N5bnRoZXRpYygpOgogCQlzd2l0Y2ggZmQuS2luZCgpIHsKLQkJY2FzZSBwcmVmLk1lc3NhZ2VLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZDoKIAkJCXZpLnR5cCA9IHZhbGlkYXRpb25UeXBlTWVzc2FnZQogCQkJaWYgb3QsIG9rIDo9IHNpLm9uZW9mV3JhcHBlcnNCeU51bWJlcltmZC5OdW1iZXIoKV07IG9rIHsKIAkJCQl2aS5taSA9IGdldE1lc3NhZ2VJbmZvKG90LkZpZWxkKDApLlR5cGUpCiAJCQl9Ci0JCWNhc2UgcHJlZi5Hcm91cEtpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKIAkJCXZpLnR5cCA9IHZhbGlkYXRpb25UeXBlR3JvdXAKIAkJCWlmIG90LCBvayA6PSBzaS5vbmVvZldyYXBwZXJzQnlOdW1iZXJbZmQuTnVtYmVyKCldOyBvayB7CiAJCQkJdmkubWkgPSBnZXRNZXNzYWdlSW5mbyhvdC5GaWVsZCgwKS5UeXBlKQogCQkJfQotCQljYXNlIHByZWYuU3RyaW5nS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZDoKIAkJCWlmIHN0cnMuRW5mb3JjZVVURjgoZmQpIHsKIAkJCQl2aS50eXAgPSB2YWxpZGF0aW9uVHlwZVVURjhTdHJpbmcKIAkJCX0KQEAgLTEyOSw3ICsxMjksNyBAQAogCWRlZmF1bHQ6CiAJCXZpID0gbmV3VmFsaWRhdGlvbkluZm8oZmQsIGZ0KQogCX0KLQlpZiBmZC5DYXJkaW5hbGl0eSgpID09IHByZWYuUmVxdWlyZWQgeworCWlmIGZkLkNhcmRpbmFsaXR5KCkgPT0gcHJvdG9yZWZsZWN0LlJlcXVpcmVkIHsKIAkJLy8gQXZvaWQgb3ZlcmZsb3cuIFRoZSByZXF1aXJlZCBmaWVsZCBjaGVjayBpcyBkb25lIHdpdGggYSA2NC1iaXQgbWFzaywgd2l0aAogCQkvLyBhbnkgbWVzc2FnZSBjb250YWluaW5nIG1vcmUgdGhhbiA2NCByZXF1aXJlZCBmaWVsZHMgYWx3YXlzIHJlcG9ydGVkIGFzCiAJCS8vIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQsIHNvIGl0IGlzIG5vdCBpbXBvcnRhbnQgdG8gZ2V0IGEgcHJlY2lzZSBjb3VudApAQCAtMTQyLDIyICsxNDIsMjIgQEAKIAlyZXR1cm4gdmkKIH0KIAotZnVuYyBuZXdWYWxpZGF0aW9uSW5mbyhmZCBwcmVmLkZpZWxkRGVzY3JpcHRvciwgZnQgcmVmbGVjdC5UeXBlKSB2YWxpZGF0aW9uSW5mbyB7CitmdW5jIG5ld1ZhbGlkYXRpb25JbmZvKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIGZ0IHJlZmxlY3QuVHlwZSkgdmFsaWRhdGlvbkluZm8gewogCXZhciB2aSB2YWxpZGF0aW9uSW5mbwogCXN3aXRjaCB7CiAJY2FzZSBmZC5Jc0xpc3QoKToKIAkJc3dpdGNoIGZkLktpbmQoKSB7Ci0JCWNhc2UgcHJlZi5NZXNzYWdlS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQ6CiAJCQl2aS50eXAgPSB2YWxpZGF0aW9uVHlwZU1lc3NhZ2UKIAkJCWlmIGZ0LktpbmQoKSA9PSByZWZsZWN0LlNsaWNlIHsKIAkJCQl2aS5taSA9IGdldE1lc3NhZ2VJbmZvKGZ0LkVsZW0oKSkKIAkJCX0KLQkJY2FzZSBwcmVmLkdyb3VwS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuR3JvdXBLaW5kOgogCQkJdmkudHlwID0gdmFsaWRhdGlvblR5cGVHcm91cAogCQkJaWYgZnQuS2luZCgpID09IHJlZmxlY3QuU2xpY2UgewogCQkJCXZpLm1pID0gZ2V0TWVzc2FnZUluZm8oZnQuRWxlbSgpKQogCQkJfQotCQljYXNlIHByZWYuU3RyaW5nS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZDoKIAkJCXZpLnR5cCA9IHZhbGlkYXRpb25UeXBlQnl0ZXMKIAkJCWlmIHN0cnMuRW5mb3JjZVVURjgoZmQpIHsKIAkJCQl2aS50eXAgPSB2YWxpZGF0aW9uVHlwZVVURjhTdHJpbmcKQEAgLTE3NSwzMyArMTc1LDMzIEBACiAJY2FzZSBmZC5Jc01hcCgpOgogCQl2aS50eXAgPSB2YWxpZGF0aW9uVHlwZU1hcAogCQlzd2l0Y2ggZmQuTWFwS2V5KCkuS2luZCgpIHsKLQkJY2FzZSBwcmVmLlN0cmluZ0tpbmQ6CisJCWNhc2UgcHJvdG9yZWZsZWN0LlN0cmluZ0tpbmQ6CiAJCQlpZiBzdHJzLkVuZm9yY2VVVEY4KGZkKSB7CiAJCQkJdmkua2V5VHlwZSA9IHZhbGlkYXRpb25UeXBlVVRGOFN0cmluZwogCQkJfQogCQl9CiAJCXN3aXRjaCBmZC5NYXBWYWx1ZSgpLktpbmQoKSB7Ci0JCWNhc2UgcHJlZi5NZXNzYWdlS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQ6CiAJCQl2aS52YWxUeXBlID0gdmFsaWRhdGlvblR5cGVNZXNzYWdlCiAJCQlpZiBmdC5LaW5kKCkgPT0gcmVmbGVjdC5NYXAgewogCQkJCXZpLm1pID0gZ2V0TWVzc2FnZUluZm8oZnQuRWxlbSgpKQogCQkJfQotCQljYXNlIHByZWYuU3RyaW5nS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZDoKIAkJCWlmIHN0cnMuRW5mb3JjZVVURjgoZmQpIHsKIAkJCQl2aS52YWxUeXBlID0gdmFsaWRhdGlvblR5cGVVVEY4U3RyaW5nCiAJCQl9CiAJCX0KIAlkZWZhdWx0OgogCQlzd2l0Y2ggZmQuS2luZCgpIHsKLQkJY2FzZSBwcmVmLk1lc3NhZ2VLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5NZXNzYWdlS2luZDoKIAkJCXZpLnR5cCA9IHZhbGlkYXRpb25UeXBlTWVzc2FnZQogCQkJaWYgIWZkLklzV2VhaygpIHsKIAkJCQl2aS5taSA9IGdldE1lc3NhZ2VJbmZvKGZ0KQogCQkJfQotCQljYXNlIHByZWYuR3JvdXBLaW5kOgorCQljYXNlIHByb3RvcmVmbGVjdC5Hcm91cEtpbmQ6CiAJCQl2aS50eXAgPSB2YWxpZGF0aW9uVHlwZUdyb3VwCiAJCQl2aS5taSA9IGdldE1lc3NhZ2VJbmZvKGZ0KQotCQljYXNlIHByZWYuU3RyaW5nS2luZDoKKwkJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZDoKIAkJCXZpLnR5cCA9IHZhbGlkYXRpb25UeXBlQnl0ZXMKIAkJCWlmIHN0cnMuRW5mb3JjZVVURjgoZmQpIHsKIAkJCQl2aS50eXAgPSB2YWxpZGF0aW9uVHlwZVVURjhTdHJpbmcKQEAgLTMxNCwxMSArMzE0LDExIEBACiAJCQkJCQkJYnJlYWsKIAkJCQkJCX0KIAkJCQkJCW1lc3NhZ2VOYW1lIDo9IGZkLk1lc3NhZ2UoKS5GdWxsTmFtZSgpCi0JCQkJCQltZXNzYWdlVHlwZSwgZXJyIDo9IHByZWcuR2xvYmFsVHlwZXMuRmluZE1lc3NhZ2VCeU5hbWUobWVzc2FnZU5hbWUpCisJCQkJCQltZXNzYWdlVHlwZSwgZXJyIDo9IHByb3RvcmVnaXN0cnkuR2xvYmFsVHlwZXMuRmluZE1lc3NhZ2VCeU5hbWUobWVzc2FnZU5hbWUpCiAJCQkJCQlzd2l0Y2ggZXJyIHsKIAkJCQkJCWNhc2UgbmlsOgogCQkJCQkJCXZpLm1pLCBfID0gbWVzc2FnZVR5cGUuKCpNZXNzYWdlSW5mbykKLQkJCQkJCWNhc2UgcHJlZy5Ob3RGb3VuZDoKKwkJCQkJCWNhc2UgcHJvdG9yZWdpc3RyeS5Ob3RGb3VuZDoKIAkJCQkJCQl2aS50eXAgPSB2YWxpZGF0aW9uVHlwZUJ5dGVzCiAJCQkJCQlkZWZhdWx0OgogCQkJCQkJCXJldHVybiBvdXQsIFZhbGlkYXRpb25Vbmtub3duCkBAIC0zMzUsNyArMzM1LDcgQEAKIAkJCQkvLyB1bm1hcnNoYWxpbmcgdG8gYmVnaW4gZmFpbGluZy4gU3VwcG9ydGluZyB0aGlzIHJlcXVpcmVzIHNvbWUgd2F5IHRvCiAJCQkJLy8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvbHZlciBpcyBmcm96ZW4uCiAJCQkJeHQsIGVyciA6PSBvcHRzLnJlc29sdmVyLkZpbmRFeHRlbnNpb25CeU51bWJlcihzdC5taS5EZXNjLkZ1bGxOYW1lKCksIG51bSkKLQkJCQlpZiBlcnIgIT0gbmlsICYmIGVyciAhPSBwcmVnLk5vdEZvdW5kIHsKKwkJCQlpZiBlcnIgIT0gbmlsICYmIGVyciAhPSBwcm90b3JlZ2lzdHJ5Lk5vdEZvdW5kIHsKIAkJCQkJcmV0dXJuIG91dCwgVmFsaWRhdGlvblVua25vd24KIAkJCQl9CiAJCQkJaWYgZXJyID09IG5pbCB7CkBAIC01MTMsNyArNTEzLDcgQEAKIAkJCQkJfQogCQkJCQl4dCwgZXJyIDo9IG9wdHMucmVzb2x2ZXIuRmluZEV4dGVuc2lvbkJ5TnVtYmVyKHN0Lm1pLkRlc2MuRnVsbE5hbWUoKSwgdHlwZWlkKQogCQkJCQlzd2l0Y2ggewotCQkJCQljYXNlIGVyciA9PSBwcmVnLk5vdEZvdW5kOgorCQkJCQljYXNlIGVyciA9PSBwcm90b3JlZ2lzdHJ5Lk5vdEZvdW5kOgogCQkJCQkJYiA9IGJbbjpdCiAJCQkJCWNhc2UgZXJyICE9IG5pbDoKIAkJCQkJCXJldHVybiBvdXQsIFZhbGlkYXRpb25Vbmtub3duCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC93ZWFrLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwvd2Vhay5nbwppbmRleCAwMDljYmVmLi5lYjc5YTdiIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC93ZWFrLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsL3dlYWsuZ28KQEAgLTcsNyArNyw3IEBACiBpbXBvcnQgKAogCSJmbXQiCiAKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCiAJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeSIKICkKIApAQCAtMTcsMzIgKzE3LDMyIEBACiAvLyBkZWZpbmVkIGRpcmVjdGx5IG9uIGl0LgogdHlwZSB3ZWFrRmllbGRzIFdlYWtGaWVsZHMKIAotZnVuYyAodyB3ZWFrRmllbGRzKSBnZXQobnVtIHByZWYuRmllbGROdW1iZXIpIChwcmVmLlByb3RvTWVzc2FnZSwgYm9vbCkgeworZnVuYyAodyB3ZWFrRmllbGRzKSBnZXQobnVtIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcikgKHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UsIGJvb2wpIHsKIAltLCBvayA6PSB3W2ludDMyKG51bSldCiAJcmV0dXJuIG0sIG9rCiB9CiAKLWZ1bmMgKHcgKndlYWtGaWVsZHMpIHNldChudW0gcHJlZi5GaWVsZE51bWJlciwgbSBwcmVmLlByb3RvTWVzc2FnZSkgeworZnVuYyAodyAqd2Vha0ZpZWxkcykgc2V0KG51bSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIsIG0gcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSkgewogCWlmICp3ID09IG5pbCB7CiAJCSp3ID0gbWFrZSh3ZWFrRmllbGRzKQogCX0KIAkoKncpW2ludDMyKG51bSldID0gbQogfQogCi1mdW5jICh3ICp3ZWFrRmllbGRzKSBjbGVhcihudW0gcHJlZi5GaWVsZE51bWJlcikgeworZnVuYyAodyAqd2Vha0ZpZWxkcykgY2xlYXIobnVtIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcikgewogCWRlbGV0ZSgqdywgaW50MzIobnVtKSkKIH0KIAotZnVuYyAoRXhwb3J0KSBIYXNXZWFrKHcgV2Vha0ZpZWxkcywgbnVtIHByZWYuRmllbGROdW1iZXIpIGJvb2wgeworZnVuYyAoRXhwb3J0KSBIYXNXZWFrKHcgV2Vha0ZpZWxkcywgbnVtIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcikgYm9vbCB7CiAJXywgb2sgOj0gd1tpbnQzMihudW0pXQogCXJldHVybiBvawogfQogCi1mdW5jIChFeHBvcnQpIENsZWFyV2Vhayh3ICpXZWFrRmllbGRzLCBudW0gcHJlZi5GaWVsZE51bWJlcikgeworZnVuYyAoRXhwb3J0KSBDbGVhcldlYWsodyAqV2Vha0ZpZWxkcywgbnVtIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcikgewogCWRlbGV0ZSgqdywgaW50MzIobnVtKSkKIH0KIAotZnVuYyAoRXhwb3J0KSBHZXRXZWFrKHcgV2Vha0ZpZWxkcywgbnVtIHByZWYuRmllbGROdW1iZXIsIG5hbWUgcHJlZi5GdWxsTmFtZSkgcHJlZi5Qcm90b01lc3NhZ2UgeworZnVuYyAoRXhwb3J0KSBHZXRXZWFrKHcgV2Vha0ZpZWxkcywgbnVtIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlciwgbmFtZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUpIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UgewogCWlmIG0sIG9rIDo9IHdbaW50MzIobnVtKV07IG9rIHsKIAkJcmV0dXJuIG0KIAl9CkBAIC01Myw3ICs1Myw3IEBACiAJcmV0dXJuIG10Llplcm8oKS5JbnRlcmZhY2UoKQogfQogCi1mdW5jIChFeHBvcnQpIFNldFdlYWsodyAqV2Vha0ZpZWxkcywgbnVtIHByZWYuRmllbGROdW1iZXIsIG5hbWUgcHJlZi5GdWxsTmFtZSwgbSBwcmVmLlByb3RvTWVzc2FnZSkgeworZnVuYyAoRXhwb3J0KSBTZXRXZWFrKHcgKldlYWtGaWVsZHMsIG51bSBwcm90b3JlZmxlY3QuRmllbGROdW1iZXIsIG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lLCBtIHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UpIHsKIAlpZiBtICE9IG5pbCB7CiAJCW10LCBfIDo9IHByb3RvcmVnaXN0cnkuR2xvYmFsVHlwZXMuRmluZE1lc3NhZ2VCeU5hbWUobmFtZSkKIAkJaWYgbXQgPT0gbmlsIHsKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9vcmRlci9vcmRlci5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9vcmRlci9vcmRlci5nbwppbmRleCAyYTI0OTUzLi5kZWE1MjJlIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvb3JkZXIvb3JkZXIuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL29yZGVyL29yZGVyLmdvCkBAIC01LDEyICs1LDEyIEBACiBwYWNrYWdlIG9yZGVyCiAKIGltcG9ydCAoCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgogKQogCiAvLyBGaWVsZE9yZGVyIHNwZWNpZmllcyB0aGUgb3JkZXJpbmcgdG8gdmlzaXQgbWVzc2FnZSBmaWVsZHMuCiAvLyBJdCBpcyBhIGZ1bmN0aW9uIHRoYXQgcmVwb3J0cyB3aGV0aGVyIHggaXMgb3JkZXJlZCBiZWZvcmUgeS4KLXR5cGUgRmllbGRPcmRlciBmdW5jKHgsIHkgcHJlZi5GaWVsZERlc2NyaXB0b3IpIGJvb2wKK3R5cGUgRmllbGRPcmRlciBmdW5jKHgsIHkgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgYm9vbAogCiB2YXIgKAogCS8vIEFueUZpZWxkT3JkZXIgc3BlY2lmaWVzIG5vIHNwZWNpZmljIGZpZWxkIG9yZGVyaW5nLgpAQCAtMTgsOSArMTgsOSBAQAogCiAJLy8gTGVnYWN5RmllbGRPcmRlciBzb3J0cyBmaWVsZHMgaW4gdGhlIHNhbWUgb3JkZXJpbmcgYXMgZW1pdHRlZCBieQogCS8vIHdpcmUgc2VyaWFsaXphdGlvbiBpbiB0aGUgZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYgaW1wbGVtZW50YXRpb24uCi0JTGVnYWN5RmllbGRPcmRlciBGaWVsZE9yZGVyID0gZnVuYyh4LCB5IHByZWYuRmllbGREZXNjcmlwdG9yKSBib29sIHsKKwlMZWdhY3lGaWVsZE9yZGVyIEZpZWxkT3JkZXIgPSBmdW5jKHgsIHkgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgYm9vbCB7CiAJCW94LCBveSA6PSB4LkNvbnRhaW5pbmdPbmVvZigpLCB5LkNvbnRhaW5pbmdPbmVvZigpCi0JCWluT25lb2YgOj0gZnVuYyhvZCBwcmVmLk9uZW9mRGVzY3JpcHRvcikgYm9vbCB7CisJCWluT25lb2YgOj0gZnVuYyhvZCBwcm90b3JlZmxlY3QuT25lb2ZEZXNjcmlwdG9yKSBib29sIHsKIAkJCXJldHVybiBvZCAhPSBuaWwgJiYgIW9kLklzU3ludGhldGljKCkKIAkJfQogCkBAIC0zMyw3ICszMyw3IEBACiAJCQlyZXR1cm4gIWluT25lb2Yob3gpICYmIGluT25lb2Yob3kpCiAJCX0KIAkJLy8gRmllbGRzIGluIGRpc2pvaW50IG9uZW9mIHNldHMgYXJlIHNvcnRlZCBieSBkZWNsYXJhdGlvbiBpbmRleC4KLQkJaWYgb3ggIT0gbmlsICYmIG95ICE9IG5pbCAmJiBveCAhPSBveSB7CisJCWlmIGluT25lb2Yob3gpICYmIGluT25lb2Yob3kpICYmIG94ICE9IG95IHsKIAkJCXJldHVybiBveC5JbmRleCgpIDwgb3kuSW5kZXgoKQogCQl9CiAJCS8vIEZpZWxkcyBzb3J0ZWQgYnkgZmllbGQgbnVtYmVyLgpAQCAtNDEsMTQgKzQxLDE0IEBACiAJfQogCiAJLy8gTnVtYmVyRmllbGRPcmRlciBzb3J0cyBmaWVsZHMgYnkgdGhlaXIgZmllbGQgbnVtYmVyLgotCU51bWJlckZpZWxkT3JkZXIgRmllbGRPcmRlciA9IGZ1bmMoeCwgeSBwcmVmLkZpZWxkRGVzY3JpcHRvcikgYm9vbCB7CisJTnVtYmVyRmllbGRPcmRlciBGaWVsZE9yZGVyID0gZnVuYyh4LCB5IHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpIGJvb2wgewogCQlyZXR1cm4geC5OdW1iZXIoKSA8IHkuTnVtYmVyKCkKIAl9CiAKIAkvLyBJbmRleE5hbWVGaWVsZE9yZGVyIHNvcnRzIG5vbi1leHRlbnNpb24gZmllbGRzIGJlZm9yZSBleHRlbnNpb24gZmllbGRzLgogCS8vIE5vbi1leHRlbnNpb25zIGFyZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGRlY2xhcmF0aW9uIGluZGV4LgogCS8vIEV4dGVuc2lvbnMgYXJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlaXIgZnVsbCBuYW1lLgotCUluZGV4TmFtZUZpZWxkT3JkZXIgRmllbGRPcmRlciA9IGZ1bmMoeCwgeSBwcmVmLkZpZWxkRGVzY3JpcHRvcikgYm9vbCB7CisJSW5kZXhOYW1lRmllbGRPcmRlciBGaWVsZE9yZGVyID0gZnVuYyh4LCB5IHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IpIGJvb2wgewogCQkvLyBOb24tZXh0ZW5zaW9uIGZpZWxkcyBzb3J0IGJlZm9yZSBleHRlbnNpb24gZmllbGRzLgogCQlpZiB4LklzRXh0ZW5zaW9uKCkgIT0geS5Jc0V4dGVuc2lvbigpIHsKIAkJCXJldHVybiAheC5Jc0V4dGVuc2lvbigpICYmIHkuSXNFeHRlbnNpb24oKQpAQCAtNjQsNyArNjQsNyBAQAogCiAvLyBLZXlPcmRlciBzcGVjaWZpZXMgdGhlIG9yZGVyaW5nIHRvIHZpc2l0IG1hcCBlbnRyaWVzLgogLy8gSXQgaXMgYSBmdW5jdGlvbiB0aGF0IHJlcG9ydHMgd2hldGhlciB4IGlzIG9yZGVyZWQgYmVmb3JlIHkuCi10eXBlIEtleU9yZGVyIGZ1bmMoeCwgeSBwcmVmLk1hcEtleSkgYm9vbAordHlwZSBLZXlPcmRlciBmdW5jKHgsIHkgcHJvdG9yZWZsZWN0Lk1hcEtleSkgYm9vbAogCiB2YXIgKAogCS8vIEFueUtleU9yZGVyIHNwZWNpZmllcyBubyBzcGVjaWZpYyBrZXkgb3JkZXJpbmcuCkBAIC03Miw3ICs3Miw3IEBACiAKIAkvLyBHZW5lcmljS2V5T3JkZXIgc29ydHMgZmFsc2UgYmVmb3JlIHRydWUsIG51bWVyaWMga2V5cyBpbiBhc2NlbmRpbmcgb3JkZXIsCiAJLy8gYW5kIHN0cmluZ3MgaW4gbGV4aWNvZ3JhcGhpY2FsIG9yZGVyaW5nIGFjY29yZGluZyB0byBVVEYtOCBjb2RlcG9pbnRzLgotCUdlbmVyaWNLZXlPcmRlciBLZXlPcmRlciA9IGZ1bmMoeCwgeSBwcmVmLk1hcEtleSkgYm9vbCB7CisJR2VuZXJpY0tleU9yZGVyIEtleU9yZGVyID0gZnVuYyh4LCB5IHByb3RvcmVmbGVjdC5NYXBLZXkpIGJvb2wgewogCQlzd2l0Y2ggeC5JbnRlcmZhY2UoKS4odHlwZSkgewogCQljYXNlIGJvb2w6CiAJCQlyZXR1cm4gIXguQm9vbCgpICYmIHkuQm9vbCgpCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvb3JkZXIvcmFuZ2UuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvb3JkZXIvcmFuZ2UuZ28KaW5kZXggYzgwOTBlMC4uMTY2NWE2OCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL29yZGVyL3JhbmdlLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9vcmRlci9yYW5nZS5nbwpAQCAtOSwxMiArOSwxMiBAQAogCSJzb3J0IgogCSJzeW5jIgogCi0JcHJlZiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgogKQogCiB0eXBlIG1lc3NhZ2VGaWVsZCBzdHJ1Y3QgewotCWZkIHByZWYuRmllbGREZXNjcmlwdG9yCi0JdiAgcHJlZi5WYWx1ZQorCWZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IKKwl2ICBwcm90b3JlZmxlY3QuVmFsdWUKIH0KIAogdmFyIG1lc3NhZ2VGaWVsZFBvb2wgPSBzeW5jLlBvb2x7CkBAIC0yNSw4ICsyNSw4IEBACiAJLy8gRmllbGRSbmdlciBpcyBhbiBpbnRlcmZhY2UgZm9yIHZpc2l0aW5nIGFsbCBmaWVsZHMgaW4gYSBtZXNzYWdlLgogCS8vIFRoZSBwcm90b3JlZmxlY3QuTWVzc2FnZSB0eXBlIGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UuCiAJRmllbGRSYW5nZXIgaW50ZXJmYWNleyBSYW5nZShWaXNpdEZpZWxkKSB9Ci0JLy8gVmlzaXRGaWVsZCBpcyBjYWxsZWQgZXZlcnl0aW1lIGEgbWVzc2FnZSBmaWVsZCBpcyB2aXNpdGVkLgotCVZpc2l0RmllbGQgPSBmdW5jKHByZWYuRmllbGREZXNjcmlwdG9yLCBwcmVmLlZhbHVlKSBib29sCisJLy8gVmlzaXRGaWVsZCBpcyBjYWxsZWQgZXZlcnkgdGltZSBhIG1lc3NhZ2UgZmllbGQgaXMgdmlzaXRlZC4KKwlWaXNpdEZpZWxkID0gZnVuYyhwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yLCBwcm90b3JlZmxlY3QuVmFsdWUpIGJvb2wKICkKIAogLy8gUmFuZ2VGaWVsZHMgaXRlcmF0ZXMgb3ZlciB0aGUgZmllbGRzIG9mIGZzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIG9yZGVyLgpAQCAtNDcsNyArNDcsNyBAQAogCX0oKQogCiAJLy8gQ29sbGVjdCBhbGwgZmllbGRzIGluIHRoZSBtZXNzYWdlIGFuZCBzb3J0IHRoZW0uCi0JZnMuUmFuZ2UoZnVuYyhmZCBwcmVmLkZpZWxkRGVzY3JpcHRvciwgdiBwcmVmLlZhbHVlKSBib29sIHsKKwlmcy5SYW5nZShmdW5jKGZkIHByb3RvcmVmbGVjdC5GaWVsZERlc2NyaXB0b3IsIHYgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sIHsKIAkJZmllbGRzID0gYXBwZW5kKGZpZWxkcywgbWVzc2FnZUZpZWxke2ZkLCB2fSkKIAkJcmV0dXJuIHRydWUKIAl9KQpAQCAtNjQsOCArNjQsOCBAQAogfQogCiB0eXBlIG1hcEVudHJ5IHN0cnVjdCB7Ci0JayBwcmVmLk1hcEtleQotCXYgcHJlZi5WYWx1ZQorCWsgcHJvdG9yZWZsZWN0Lk1hcEtleQorCXYgcHJvdG9yZWZsZWN0LlZhbHVlCiB9CiAKIHZhciBtYXBFbnRyeVBvb2wgPSBzeW5jLlBvb2x7CkBAIC03Niw4ICs3Niw4IEBACiAJLy8gRW50cnlSYW5nZXIgaXMgYW4gaW50ZXJmYWNlIGZvciB2aXNpdGluZyBhbGwgZmllbGRzIGluIGEgbWVzc2FnZS4KIAkvLyBUaGUgcHJvdG9yZWZsZWN0Lk1hcCB0eXBlIGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UuCiAJRW50cnlSYW5nZXIgaW50ZXJmYWNleyBSYW5nZShWaXNpdEVudHJ5KSB9Ci0JLy8gVmlzaXRFbnRyeSBpcyBjYWxsZWQgZXZlcnl0aW1lIGEgbWFwIGVudHJ5IGlzIHZpc2l0ZWQuCi0JVmlzaXRFbnRyeSA9IGZ1bmMocHJlZi5NYXBLZXksIHByZWYuVmFsdWUpIGJvb2wKKwkvLyBWaXNpdEVudHJ5IGlzIGNhbGxlZCBldmVyeSB0aW1lIGEgbWFwIGVudHJ5IGlzIHZpc2l0ZWQuCisJVmlzaXRFbnRyeSA9IGZ1bmMocHJvdG9yZWZsZWN0Lk1hcEtleSwgcHJvdG9yZWZsZWN0LlZhbHVlKSBib29sCiApCiAKIC8vIFJhbmdlRW50cmllcyBpdGVyYXRlcyBvdmVyIHRoZSBlbnRyaWVzIG9mIGVzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIG9yZGVyLgpAQCAtOTgsNyArOTgsNyBAQAogCX0oKQogCiAJLy8gQ29sbGVjdCBhbGwgZW50cmllcyBpbiB0aGUgbWFwIGFuZCBzb3J0IHRoZW0uCi0JZXMuUmFuZ2UoZnVuYyhrIHByZWYuTWFwS2V5LCB2IHByZWYuVmFsdWUpIGJvb2wgeworCWVzLlJhbmdlKGZ1bmMoayBwcm90b3JlZmxlY3QuTWFwS2V5LCB2IHByb3RvcmVmbGVjdC5WYWx1ZSkgYm9vbCB7CiAJCWVudHJpZXMgPSBhcHBlbmQoZW50cmllcywgbWFwRW50cnl7aywgdn0pCiAJCXJldHVybiB0cnVlCiAJfSkKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3MuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvc3Rycy9zdHJpbmdzLmdvCmluZGV4IDBiNzRlNzYuLmE2ZTdkZjIgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3MuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL3N0cnMvc3RyaW5ncy5nbwpAQCAtMTcsNyArMTcsNyBAQAogCiAvLyBFbmZvcmNlVVRGOCByZXBvcnRzIHdoZXRoZXIgdG8gZW5mb3JjZSBzdHJpY3QgVVRGLTggdmFsaWRhdGlvbi4KIGZ1bmMgRW5mb3JjZVVURjgoZmQgcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcikgYm9vbCB7Ci0JaWYgZmxhZ3MuUHJvdG9MZWdhY3kgeworCWlmIGZsYWdzLlByb3RvTGVnYWN5IHx8IGZkLlN5bnRheCgpID09IHByb3RvcmVmbGVjdC5FZGl0aW9ucyB7CiAJCWlmIGZkLCBvayA6PSBmZC4oaW50ZXJmYWNleyBFbmZvcmNlVVRGOCgpIGJvb2wgfSk7IG9rIHsKIAkJCXJldHVybiBmZC5FbmZvcmNlVVRGOCgpCiAJCX0KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3NfcHVyZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3NfcHVyZS5nbwppbmRleCA4NWUwNzRjLi5hMWY2ZjMzIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvc3Rycy9zdHJpbmdzX3B1cmUuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL3N0cnMvc3RyaW5nc19wdXJlLmdvCkBAIC0yLDYgKzIsNyBAQAogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUKIC8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAorLy9nbzpidWlsZCBwdXJlZ28gfHwgYXBwZW5naW5lCiAvLyArYnVpbGQgcHVyZWdvIGFwcGVuZ2luZQogCiBwYWNrYWdlIHN0cnMKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3NfdW5zYWZlLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL3N0cnMvc3RyaW5nc191bnNhZmVfZ28xMjAuZ28Kc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL3N0cnMvc3RyaW5nc191bnNhZmUuZ28KcmVuYW1lIHRvIHZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3NfdW5zYWZlX2dvMTIwLmdvCmluZGV4IDIxNjBjNzAuLmEwMDhhY2QgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3NfdW5zYWZlLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3NfdW5zYWZlX2dvMTIwLmdvCkBAIC0yLDE0ICsyLDE1IEBACiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQogLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0vLyArYnVpbGQgIXB1cmVnbywhYXBwZW5naW5lCisvL2dvOmJ1aWxkICFwdXJlZ28gJiYgIWFwcGVuZ2luZSAmJiAhZ28xLjIxCisvLyArYnVpbGQgIXB1cmVnbywhYXBwZW5naW5lLCFnbzEuMjEKIAogcGFja2FnZSBzdHJzCiAKIGltcG9ydCAoCiAJInVuc2FmZSIKIAotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKICkKIAogdHlwZSAoCkBAIC01OCw3ICs1OSw3IEBACiAKIC8vIEFwcGVuZEZ1bGxOYW1lIGlzIGVxdWl2YWxlbnQgdG8gcHJvdG9yZWZsZWN0LkZ1bGxOYW1lLkFwcGVuZCwKIC8vIGJ1dCBvcHRpbWl6ZWQgZm9yIGxhcmdlIGJhdGNoZXMgd2hlcmUgZWFjaCBuYW1lIGhhcyBhIHNoYXJlZCBsaWZldGltZS4KLWZ1bmMgKHNiICpCdWlsZGVyKSBBcHBlbmRGdWxsTmFtZShwcmVmaXggcHJlZi5GdWxsTmFtZSwgbmFtZSBwcmVmLk5hbWUpIHByZWYuRnVsbE5hbWUgeworZnVuYyAoc2IgKkJ1aWxkZXIpIEFwcGVuZEZ1bGxOYW1lKHByZWZpeCBwcm90b3JlZmxlY3QuRnVsbE5hbWUsIG5hbWUgcHJvdG9yZWZsZWN0Lk5hbWUpIHByb3RvcmVmbGVjdC5GdWxsTmFtZSB7CiAJbiA6PSBsZW4ocHJlZml4KSArIGxlbigiLiIpICsgbGVuKG5hbWUpCiAJaWYgbGVuKHByZWZpeCkgPT0gMCB7CiAJCW4gLT0gbGVuKCIuIikKQEAgLTY3LDcgKzY4LDcgQEAKIAlzYi5idWYgPSBhcHBlbmQoc2IuYnVmLCBwcmVmaXguLi4pCiAJc2IuYnVmID0gYXBwZW5kKHNiLmJ1ZiwgJy4nKQogCXNiLmJ1ZiA9IGFwcGVuZChzYi5idWYsIG5hbWUuLi4pCi0JcmV0dXJuIHByZWYuRnVsbE5hbWUoc2IubGFzdChuKSkKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKHNiLmxhc3QobikpCiB9CiAKIC8vIE1ha2VTdHJpbmcgaXMgZXF1aXZhbGVudCB0byBzdHJpbmcoYiksIGJ1dCBvcHRpbWl6ZWQgZm9yIGxhcmdlIGJhdGNoZXMKQEAgLTg2LDcgKzg3LDcgQEAKIAkvLyBVbmxpa2Ugc3RyaW5ncy5CdWlsZGVyLCB3ZSBkbyBub3QgbmVlZCB0byBjb3B5IG92ZXIgdGhlIGNvbnRlbnRzCiAJLy8gb2YgdGhlIG9sZCBidWZmZXIgc2luY2Ugb3VyIGJ1aWxkZXIgcHJvdmlkZXMgbm8gQVBJIGZvcgogCS8vIHJldHJpZXZpbmcgcHJldmlvdXNseSBjcmVhdGVkIHN0cmluZ3MuCi0Jc2IuYnVmID0gbWFrZShbXWJ5dGUsIDIqKGNhcChzYi5idWYpK24pKQorCXNiLmJ1ZiA9IG1ha2UoW11ieXRlLCAwLCAyKihjYXAoc2IuYnVmKStuKSkKIH0KIAogZnVuYyAoc2IgKkJ1aWxkZXIpIGxhc3QobiBpbnQpIHN0cmluZyB7CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvc3Rycy9zdHJpbmdzX3Vuc2FmZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3NfdW5zYWZlX2dvMTIxLmdvCnNpbWlsYXJpdHkgaW5kZXggNjklCmNvcHkgZnJvbSB2ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvc3Rycy9zdHJpbmdzX3Vuc2FmZS5nbwpjb3B5IHRvIHZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3NfdW5zYWZlX2dvMTIxLmdvCmluZGV4IDIxNjBjNzAuLjYwMTY2ZjIgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3NfdW5zYWZlLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9zdHJzL3N0cmluZ3NfdW5zYWZlX2dvMTIxLmdvCkBAIC0yLDI2ICsyLDE1IEBACiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQogLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0vLyArYnVpbGQgIXB1cmVnbywhYXBwZW5naW5lCisvL2dvOmJ1aWxkICFwdXJlZ28gJiYgIWFwcGVuZ2luZSAmJiBnbzEuMjEKKy8vICtidWlsZCAhcHVyZWdvLCFhcHBlbmdpbmUsZ28xLjIxCiAKIHBhY2thZ2Ugc3RycwogCiBpbXBvcnQgKAogCSJ1bnNhZmUiCiAKLQlwcmVmICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKLSkKLQotdHlwZSAoCi0Jc3RyaW5nSGVhZGVyIHN0cnVjdCB7Ci0JCURhdGEgdW5zYWZlLlBvaW50ZXIKLQkJTGVuICBpbnQKLQl9Ci0Jc2xpY2VIZWFkZXIgc3RydWN0IHsKLQkJRGF0YSB1bnNhZmUuUG9pbnRlcgotCQlMZW4gIGludAotCQlDYXAgIGludAotCX0KKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QiCiApCiAKIC8vIFVuc2FmZVN0cmluZyByZXR1cm5zIGFuIHVuc2FmZSBzdHJpbmcgcmVmZXJlbmNlIG9mIGIuCkBAIC0yOSwyNSArMTgsMTYgQEAKIC8vCiAvLyBXQVJOSU5HOiBVc2UgY2FyZWZ1bGx5LiBUaGUgcmV0dXJuZWQgcmVzdWx0IG11c3Qgbm90IGxlYWsgdG8gdGhlIGVuZCB1c2VyCiAvLyB1bmxlc3MgdGhlIGlucHV0IHNsaWNlIGlzIHByb3ZhYmx5IGltbXV0YWJsZS4KLWZ1bmMgVW5zYWZlU3RyaW5nKGIgW11ieXRlKSAocyBzdHJpbmcpIHsKLQlzcmMgOj0gKCpzbGljZUhlYWRlcikodW5zYWZlLlBvaW50ZXIoJmIpKQotCWRzdCA6PSAoKnN0cmluZ0hlYWRlcikodW5zYWZlLlBvaW50ZXIoJnMpKQotCWRzdC5EYXRhID0gc3JjLkRhdGEKLQlkc3QuTGVuID0gc3JjLkxlbgotCXJldHVybiBzCitmdW5jIFVuc2FmZVN0cmluZyhiIFtdYnl0ZSkgc3RyaW5nIHsKKwlyZXR1cm4gdW5zYWZlLlN0cmluZyh1bnNhZmUuU2xpY2VEYXRhKGIpLCBsZW4oYikpCiB9CiAKIC8vIFVuc2FmZUJ5dGVzIHJldHVybnMgYW4gdW5zYWZlIGJ5dGVzIHNsaWNlIHJlZmVyZW5jZSBvZiBzLgogLy8gVGhlIGNhbGxlciBtdXN0IHRyZWF0IHJldHVybmVkIHNsaWNlIGFzIGltbXV0YWJsZS4KIC8vCiAvLyBXQVJOSU5HOiBVc2UgY2FyZWZ1bGx5LiBUaGUgcmV0dXJuZWQgcmVzdWx0IG11c3Qgbm90IGxlYWsgdG8gdGhlIGVuZCB1c2VyLgotZnVuYyBVbnNhZmVCeXRlcyhzIHN0cmluZykgKGIgW11ieXRlKSB7Ci0Jc3JjIDo9ICgqc3RyaW5nSGVhZGVyKSh1bnNhZmUuUG9pbnRlcigmcykpCi0JZHN0IDo9ICgqc2xpY2VIZWFkZXIpKHVuc2FmZS5Qb2ludGVyKCZiKSkKLQlkc3QuRGF0YSA9IHNyYy5EYXRhCi0JZHN0LkxlbiA9IHNyYy5MZW4KLQlkc3QuQ2FwID0gc3JjLkxlbgotCXJldHVybiBiCitmdW5jIFVuc2FmZUJ5dGVzKHMgc3RyaW5nKSBbXWJ5dGUgeworCXJldHVybiB1bnNhZmUuU2xpY2UodW5zYWZlLlN0cmluZ0RhdGEocyksIGxlbihzKSkKIH0KIAogLy8gQnVpbGRlciBidWlsZHMgYSBzZXQgb2Ygc3RyaW5ncyB3aXRoIHNoYXJlZCBsaWZldGltZS4KQEAgLTU4LDcgKzM4LDcgQEAKIAogLy8gQXBwZW5kRnVsbE5hbWUgaXMgZXF1aXZhbGVudCB0byBwcm90b3JlZmxlY3QuRnVsbE5hbWUuQXBwZW5kLAogLy8gYnV0IG9wdGltaXplZCBmb3IgbGFyZ2UgYmF0Y2hlcyB3aGVyZSBlYWNoIG5hbWUgaGFzIGEgc2hhcmVkIGxpZmV0aW1lLgotZnVuYyAoc2IgKkJ1aWxkZXIpIEFwcGVuZEZ1bGxOYW1lKHByZWZpeCBwcmVmLkZ1bGxOYW1lLCBuYW1lIHByZWYuTmFtZSkgcHJlZi5GdWxsTmFtZSB7CitmdW5jIChzYiAqQnVpbGRlcikgQXBwZW5kRnVsbE5hbWUocHJlZml4IHByb3RvcmVmbGVjdC5GdWxsTmFtZSwgbmFtZSBwcm90b3JlZmxlY3QuTmFtZSkgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lIHsKIAluIDo9IGxlbihwcmVmaXgpICsgbGVuKCIuIikgKyBsZW4obmFtZSkKIAlpZiBsZW4ocHJlZml4KSA9PSAwIHsKIAkJbiAtPSBsZW4oIi4iKQpAQCAtNjcsNyArNDcsNyBAQAogCXNiLmJ1ZiA9IGFwcGVuZChzYi5idWYsIHByZWZpeC4uLikKIAlzYi5idWYgPSBhcHBlbmQoc2IuYnVmLCAnLicpCiAJc2IuYnVmID0gYXBwZW5kKHNiLmJ1ZiwgbmFtZS4uLikKLQlyZXR1cm4gcHJlZi5GdWxsTmFtZShzYi5sYXN0KG4pKQorCXJldHVybiBwcm90b3JlZmxlY3QuRnVsbE5hbWUoc2IubGFzdChuKSkKIH0KIAogLy8gTWFrZVN0cmluZyBpcyBlcXVpdmFsZW50IHRvIHN0cmluZyhiKSwgYnV0IG9wdGltaXplZCBmb3IgbGFyZ2UgYmF0Y2hlcwpAQCAtODYsNyArNjYsNyBAQAogCS8vIFVubGlrZSBzdHJpbmdzLkJ1aWxkZXIsIHdlIGRvIG5vdCBuZWVkIHRvIGNvcHkgb3ZlciB0aGUgY29udGVudHMKIAkvLyBvZiB0aGUgb2xkIGJ1ZmZlciBzaW5jZSBvdXIgYnVpbGRlciBwcm92aWRlcyBubyBBUEkgZm9yCiAJLy8gcmV0cmlldmluZyBwcmV2aW91c2x5IGNyZWF0ZWQgc3RyaW5ncy4KLQlzYi5idWYgPSBtYWtlKFtdYnl0ZSwgMiooY2FwKHNiLmJ1ZikrbikpCisJc2IuYnVmID0gbWFrZShbXWJ5dGUsIDAsIDIqKGNhcChzYi5idWYpK24pKQogfQogCiBmdW5jIChzYiAqQnVpbGRlcikgbGFzdChuIGludCkgc3RyaW5nIHsKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC92ZXJzaW9uL3ZlcnNpb24uZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvdmVyc2lvbi92ZXJzaW9uLmdvCmluZGV4IDE0ZTc3NGYuLmE1MGZjZmIgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC92ZXJzaW9uL3ZlcnNpb24uZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL3ZlcnNpb24vdmVyc2lvbi5nbwpAQCAtMTIsNTQgKzEyLDU0IEBACiAKIC8vIFRoZXNlIGNvbnN0YW50cyBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZS4KIC8vCi0vLwogLy8gRm9yIG91ciByZWxlYXNlIHByb2Nlc3MsIHdlIGVuZm9yY2UgdGhlIGZvbGxvd2luZyBydWxlczoKLS8vCSogVGFnZ2VkIHJlbGVhc2VzIHVzZSBhIHRhZyB0aGF0IGlzIGlkZW50aWNhbCB0byBTdHJpbmcuCi0vLwkqIFRhZ2dlZCByZWxlYXNlcyBuZXZlciByZWZlcmVuY2UgYSBjb21taXQgd2hlcmUgdGhlIFN0cmluZwotLy8JY29udGFpbnMgImRldmVsIi4KLS8vCSogVGhlIHNldCBvZiBhbGwgY29tbWl0cyBpbiB0aGlzIHJlcG9zaXRvcnkgd2hlcmUgU3RyaW5nCi0vLwlkb2VzIG5vdCBjb250YWluICJkZXZlbCIgbXVzdCBoYXZlIGEgdW5pcXVlIFN0cmluZy4KLS8vCisvLyAgIC0gVGFnZ2VkIHJlbGVhc2VzIHVzZSBhIHRhZyB0aGF0IGlzIGlkZW50aWNhbCB0byBTdHJpbmcuCisvLyAgIC0gVGFnZ2VkIHJlbGVhc2VzIG5ldmVyIHJlZmVyZW5jZSBhIGNvbW1pdCB3aGVyZSB0aGUgU3RyaW5nCisvLyAgICAgY29udGFpbnMgImRldmVsIi4KKy8vICAgLSBUaGUgc2V0IG9mIGFsbCBjb21taXRzIGluIHRoaXMgcmVwb3NpdG9yeSB3aGVyZSBTdHJpbmcKKy8vICAgICBkb2VzIG5vdCBjb250YWluICJkZXZlbCIgbXVzdCBoYXZlIGEgdW5pcXVlIFN0cmluZy4KIC8vCiAvLyBTdGVwcyBmb3IgdGFnZ2luZyBhIG5ldyByZWxlYXNlOgotLy8JMS4gQ3JlYXRlIGEgbmV3IENMLgogLy8KLS8vCTIuIFVwZGF0ZSBNaW5vciwgUGF0Y2gsIGFuZC9vciBQcmVSZWxlYXNlIGFzIG5lY2Vzc2FyeS4KLS8vCVByZVJlbGVhc2UgbXVzdCBub3QgY29udGFpbiB0aGUgc3RyaW5nICJkZXZlbCIuCisvLyAgMS4gQ3JlYXRlIGEgbmV3IENMLgogLy8KLS8vCTMuIFNpbmNlIHRoZSBsYXN0IHJlbGVhc2VkIG1pbm9yIHZlcnNpb24sIGhhdmUgdGhlcmUgYmVlbiBhbnkgY2hhbmdlcyB0bwotLy8JZ2VuZXJhdG9yIHRoYXQgcmVsaWVzIG9uIG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoZSBydW50aW1lPwotLy8JSWYgeWVzLCB0aGVuIGluY3JlbWVudCBSZXF1aXJlZEdlbmVyYXRlZC4KKy8vICAyLiBVcGRhdGUgTWlub3IsIFBhdGNoLCBhbmQvb3IgUHJlUmVsZWFzZSBhcyBuZWNlc3NhcnkuCisvLyAgICAgUHJlUmVsZWFzZSBtdXN0IG5vdCBjb250YWluIHRoZSBzdHJpbmcgImRldmVsIi4KIC8vCi0vLwk0LiBTaW5jZSB0aGUgbGFzdCByZWxlYXNlZCBtaW5vciB2ZXJzaW9uLCBoYXZlIHRoZXJlIGJlZW4gYW55IGNoYW5nZXMgdG8KLS8vCXRoZSBydW50aW1lIHRoYXQgcmVtb3ZlcyBzdXBwb3J0IGZvciBvbGQgLnBiLmdvIHNvdXJjZSBjb2RlPwotLy8JSWYgeWVzLCB0aGVuIGluY3JlbWVudCBTdXBwb3J0TWluaW11bS4KKy8vICAzLiBTaW5jZSB0aGUgbGFzdCByZWxlYXNlZCBtaW5vciB2ZXJzaW9uLCBoYXZlIHRoZXJlIGJlZW4gYW55IGNoYW5nZXMgdG8KKy8vICAgICBnZW5lcmF0b3IgdGhhdCByZWxpZXMgb24gbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHJ1bnRpbWU/CisvLyAgICAgSWYgeWVzLCB0aGVuIGluY3JlbWVudCBSZXF1aXJlZEdlbmVyYXRlZC4KIC8vCi0vLwk1LiBTZW5kIG91dCB0aGUgQ0wgZm9yIHJldmlldyBhbmQgc3VibWl0IGl0LgotLy8JTm90ZSB0aGF0IHRoZSBuZXh0IENMIGluIHN0ZXAgOCBtdXN0IGJlIHN1Ym1pdHRlZCBhZnRlciB0aGlzIENMCi0vLwl3aXRob3V0IGFueSBvdGhlciBDTHMgaW4tYmV0d2Vlbi4KKy8vICA0LiBTaW5jZSB0aGUgbGFzdCByZWxlYXNlZCBtaW5vciB2ZXJzaW9uLCBoYXZlIHRoZXJlIGJlZW4gYW55IGNoYW5nZXMgdG8KKy8vICAgICB0aGUgcnVudGltZSB0aGF0IHJlbW92ZXMgc3VwcG9ydCBmb3Igb2xkIC5wYi5nbyBzb3VyY2UgY29kZT8KKy8vICAgICBJZiB5ZXMsIHRoZW4gaW5jcmVtZW50IFN1cHBvcnRNaW5pbXVtLgogLy8KLS8vCTYuIFRhZyBhIG5ldyB2ZXJzaW9uLCB3aGVyZSB0aGUgdGFnIGlzIGlzIHRoZSBjdXJyZW50IFN0cmluZy4KKy8vICA1LiBTZW5kIG91dCB0aGUgQ0wgZm9yIHJldmlldyBhbmQgc3VibWl0IGl0LgorLy8gICAgIE5vdGUgdGhhdCB0aGUgbmV4dCBDTCBpbiBzdGVwIDggbXVzdCBiZSBzdWJtaXR0ZWQgYWZ0ZXIgdGhpcyBDTAorLy8gICAgIHdpdGhvdXQgYW55IG90aGVyIENMcyBpbi1iZXR3ZWVuLgogLy8KLS8vCTcuIFdyaXRlIHJlbGVhc2Ugbm90ZXMgZm9yIGFsbCBub3RhYmxlIGNoYW5nZXMKLS8vCWJldHdlZW4gdGhpcyByZWxlYXNlIGFuZCB0aGUgbGFzdCByZWxlYXNlLgorLy8gIDYuIFRhZyBhIG5ldyB2ZXJzaW9uLCB3aGVyZSB0aGUgdGFnIGlzIGlzIHRoZSBjdXJyZW50IFN0cmluZy4KIC8vCi0vLwk4LiBDcmVhdGUgYSBuZXcgQ0wuCisvLyAgNy4gV3JpdGUgcmVsZWFzZSBub3RlcyBmb3IgYWxsIG5vdGFibGUgY2hhbmdlcworLy8gICAgIGJldHdlZW4gdGhpcyByZWxlYXNlIGFuZCB0aGUgbGFzdCByZWxlYXNlLgogLy8KLS8vCTkuIFVwZGF0ZSBQcmVSZWxlYXNlIHRvIGluY2x1ZGUgdGhlIHN0cmluZyAiZGV2ZWwiLgotLy8JRm9yIGV4YW1wbGU6ICIiIC0+ICJkZXZlbCIgb3IgInJjLjEiIC0+ICJyYy4xLmRldmVsIgorLy8gIDguIENyZWF0ZSBhIG5ldyBDTC4KIC8vCi0vLwkxMC4gU2VuZCBvdXQgdGhlIENMIGZvciByZXZpZXcgYW5kIHN1Ym1pdCBpdC4KKy8vICA5LiBVcGRhdGUgUHJlUmVsZWFzZSB0byBpbmNsdWRlIHRoZSBzdHJpbmcgImRldmVsIi4KKy8vICAgICBGb3IgZXhhbXBsZTogIiIgLT4gImRldmVsIiBvciAicmMuMSIgLT4gInJjLjEuZGV2ZWwiCisvLworLy8gIDEwLiBTZW5kIG91dCB0aGUgQ0wgZm9yIHJldmlldyBhbmQgc3VibWl0IGl0LgogY29uc3QgKAogCU1ham9yICAgICAgPSAxCi0JTWlub3IgICAgICA9IDI3Ci0JUGF0Y2ggICAgICA9IDEKKwlNaW5vciAgICAgID0gMzMKKwlQYXRjaCAgICAgID0gMAogCVByZVJlbGVhc2UgPSAiIgogKQogCiAvLyBTdHJpbmcgZm9ybWF0cyB0aGUgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgbW9kdWxlIGluIHNlbXZlciBmb3JtYXQuCiAvLwogLy8gRXhhbXBsZXM6CisvLwogLy8JdjEuMjAuMQogLy8JdjEuMjEuMC1yYy4xCiBmdW5jIFN0cmluZygpIHN0cmluZyB7CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vZGVjb2RlLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL2RlY29kZS5nbwppbmRleCA0OWY5YjhjLi5lNWIwM2I1IDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vZGVjb2RlLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by9kZWNvZGUuZ28KQEAgLTE5LDcgKzE5LDggQEAKIC8vIFVubWFyc2hhbE9wdGlvbnMgY29uZmlndXJlcyB0aGUgdW5tYXJzaGFsZXIuCiAvLwogLy8gRXhhbXBsZSB1c2FnZToKLS8vICAgZXJyIDo9IFVubWFyc2hhbE9wdGlvbnN7RGlzY2FyZFVua25vd246IHRydWV9LlVubWFyc2hhbChiLCBtKQorLy8KKy8vCWVyciA6PSBVbm1hcnNoYWxPcHRpb25ze0Rpc2NhcmRVbmtub3duOiB0cnVlfS5Vbm1hcnNoYWwoYiwgbSkKIHR5cGUgVW5tYXJzaGFsT3B0aW9ucyBzdHJ1Y3QgewogCXByYWdtYS5Ob1Vua2V5ZWRMaXRlcmFscwogCkBAIC00MiwxOCArNDMsMjUgQEAKIAkJRmluZEV4dGVuc2lvbkJ5TmFtZShmaWVsZCBwcm90b3JlZmxlY3QuRnVsbE5hbWUpIChwcm90b3JlZmxlY3QuRXh0ZW5zaW9uVHlwZSwgZXJyb3IpCiAJCUZpbmRFeHRlbnNpb25CeU51bWJlcihtZXNzYWdlIHByb3RvcmVmbGVjdC5GdWxsTmFtZSwgZmllbGQgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKSAocHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUsIGVycm9yKQogCX0KKworCS8vIFJlY3Vyc2lvbkxpbWl0IGxpbWl0cyBob3cgZGVlcGx5IG1lc3NhZ2VzIG1heSBiZSBuZXN0ZWQuCisJLy8gSWYgemVybywgYSBkZWZhdWx0IGxpbWl0IGlzIGFwcGxpZWQuCisJUmVjdXJzaW9uTGltaXQgaW50CiB9CiAKIC8vIFVubWFyc2hhbCBwYXJzZXMgdGhlIHdpcmUtZm9ybWF0IG1lc3NhZ2UgaW4gYiBhbmQgcGxhY2VzIHRoZSByZXN1bHQgaW4gbS4KIC8vIFRoZSBwcm92aWRlZCBtZXNzYWdlIG11c3QgYmUgbXV0YWJsZSAoZS5nLiwgYSBub24tbmlsIHBvaW50ZXIgdG8gYSBtZXNzYWdlKS4KIGZ1bmMgVW5tYXJzaGFsKGIgW11ieXRlLCBtIE1lc3NhZ2UpIGVycm9yIHsKLQlfLCBlcnIgOj0gVW5tYXJzaGFsT3B0aW9uc3t9LnVubWFyc2hhbChiLCBtLlByb3RvUmVmbGVjdCgpKQorCV8sIGVyciA6PSBVbm1hcnNoYWxPcHRpb25ze1JlY3Vyc2lvbkxpbWl0OiBwcm90b3dpcmUuRGVmYXVsdFJlY3Vyc2lvbkxpbWl0fS51bm1hcnNoYWwoYiwgbS5Qcm90b1JlZmxlY3QoKSkKIAlyZXR1cm4gZXJyCiB9CiAKIC8vIFVubWFyc2hhbCBwYXJzZXMgdGhlIHdpcmUtZm9ybWF0IG1lc3NhZ2UgaW4gYiBhbmQgcGxhY2VzIHRoZSByZXN1bHQgaW4gbS4KIC8vIFRoZSBwcm92aWRlZCBtZXNzYWdlIG11c3QgYmUgbXV0YWJsZSAoZS5nLiwgYSBub24tbmlsIHBvaW50ZXIgdG8gYSBtZXNzYWdlKS4KIGZ1bmMgKG8gVW5tYXJzaGFsT3B0aW9ucykgVW5tYXJzaGFsKGIgW11ieXRlLCBtIE1lc3NhZ2UpIGVycm9yIHsKKwlpZiBvLlJlY3Vyc2lvbkxpbWl0ID09IDAgeworCQlvLlJlY3Vyc2lvbkxpbWl0ID0gcHJvdG93aXJlLkRlZmF1bHRSZWN1cnNpb25MaW1pdAorCX0KIAlfLCBlcnIgOj0gby51bm1hcnNoYWwoYiwgbS5Qcm90b1JlZmxlY3QoKSkKIAlyZXR1cm4gZXJyCiB9CkBAIC02MSw4ICs2OSwxMSBAQAogLy8gVW5tYXJzaGFsU3RhdGUgcGFyc2VzIGEgd2lyZS1mb3JtYXQgbWVzc2FnZSBhbmQgcGxhY2VzIHRoZSByZXN1bHQgaW4gbS4KIC8vCiAvLyBUaGlzIG1ldGhvZCBwZXJtaXRzIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIHVubWFyc2hhbGVyLgotLy8gTW9zdCB1c2VycyBzaG91bGQgdXNlIFVubWFyc2hhbCBpbnN0ZWFkLgorLy8gTW9zdCB1c2VycyBzaG91bGQgdXNlIFtVbm1hcnNoYWxdIGluc3RlYWQuCiBmdW5jIChvIFVubWFyc2hhbE9wdGlvbnMpIFVubWFyc2hhbFN0YXRlKGluIHByb3RvaWZhY2UuVW5tYXJzaGFsSW5wdXQpIChwcm90b2lmYWNlLlVubWFyc2hhbE91dHB1dCwgZXJyb3IpIHsKKwlpZiBvLlJlY3Vyc2lvbkxpbWl0ID09IDAgeworCQlvLlJlY3Vyc2lvbkxpbWl0ID0gcHJvdG93aXJlLkRlZmF1bHRSZWN1cnNpb25MaW1pdAorCX0KIAlyZXR1cm4gby51bm1hcnNoYWwoaW4uQnVmLCBpbi5NZXNzYWdlKQogfQogCkBAIC04NiwxMiArOTcsMTcgQEAKIAkJCU1lc3NhZ2U6ICBtLAogCQkJQnVmOiAgICAgIGIsCiAJCQlSZXNvbHZlcjogby5SZXNvbHZlciwKKwkJCURlcHRoOiAgICBvLlJlY3Vyc2lvbkxpbWl0LAogCQl9CiAJCWlmIG8uRGlzY2FyZFVua25vd24gewogCQkJaW4uRmxhZ3MgfD0gcHJvdG9pZmFjZS5Vbm1hcnNoYWxEaXNjYXJkVW5rbm93bgogCQl9CiAJCW91dCwgZXJyID0gbWV0aG9kcy5Vbm1hcnNoYWwoaW4pCiAJfSBlbHNlIHsKKwkJby5SZWN1cnNpb25MaW1pdC0tCisJCWlmIG8uUmVjdXJzaW9uTGltaXQgPCAwIHsKKwkJCXJldHVybiBvdXQsIGVycm9ycy5OZXcoImV4Y2VlZGVkIG1heCByZWN1cnNpb24gZGVwdGgiKQorCQl9CiAJCWVyciA9IG8udW5tYXJzaGFsTWVzc2FnZVNsb3coYiwgbSkKIAl9CiAJaWYgZXJyICE9IG5pbCB7CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vZG9jLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL2RvYy5nbwppbmRleCBjNTJkOGM0Li44MGVkMTZhIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vZG9jLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by9kb2MuZ28KQEAgLTUsODkgKzUsODEgQEAKIC8vIFBhY2thZ2UgcHJvdG8gcHJvdmlkZXMgZnVuY3Rpb25zIG9wZXJhdGluZyBvbiBwcm90b2NvbCBidWZmZXIgbWVzc2FnZXMuCiAvLwogLy8gRm9yIGRvY3VtZW50YXRpb24gb24gcHJvdG9jb2wgYnVmZmVycyBpbiBnZW5lcmFsLCBzZWU6Ci0vLwotLy8gICBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzCisvLyBodHRwczovL3Byb3RvYnVmLmRldi4KIC8vCiAvLyBGb3IgYSB0dXRvcmlhbCBvbiB1c2luZyBwcm90b2NvbCBidWZmZXJzIHdpdGggR28sIHNlZToKLS8vCi0vLyAgIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9nb3R1dG9yaWFsCisvLyBodHRwczovL3Byb3RvYnVmLmRldi9nZXR0aW5nLXN0YXJ0ZWQvZ290dXRvcmlhbC4KIC8vCiAvLyBGb3IgYSBndWlkZSB0byBnZW5lcmF0ZWQgR28gcHJvdG9jb2wgYnVmZmVyIGNvZGUsIHNlZToKKy8vIGh0dHBzOi8vcHJvdG9idWYuZGV2L3JlZmVyZW5jZS9nby9nby1nZW5lcmF0ZWQuCiAvLwotLy8gICBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcmVmZXJlbmNlL2dvLWdlbmVyYXRlZAotLy8KLS8vCi0vLyBCaW5hcnkgc2VyaWFsaXphdGlvbgorLy8gIyBCaW5hcnkgc2VyaWFsaXphdGlvbgogLy8KIC8vIFRoaXMgcGFja2FnZSBjb250YWlucyBmdW5jdGlvbnMgdG8gY29udmVydCB0byBhbmQgZnJvbSB0aGUgd2lyZSBmb3JtYXQsCiAvLyBhbiBlZmZpY2llbnQgYmluYXJ5IHNlcmlhbGl6YXRpb24gb2YgcHJvdG9jb2wgYnVmZmVycy4KIC8vCi0vLyDigKIgU2l6ZSByZXBvcnRzIHRoZSBzaXplIG9mIGEgbWVzc2FnZSBpbiB0aGUgd2lyZSBmb3JtYXQuCisvLyAgIC0gW1NpemVdIHJlcG9ydHMgdGhlIHNpemUgb2YgYSBtZXNzYWdlIGluIHRoZSB3aXJlIGZvcm1hdC4KIC8vCi0vLyDigKIgTWFyc2hhbCBjb252ZXJ0cyBhIG1lc3NhZ2UgdG8gdGhlIHdpcmUgZm9ybWF0LgotLy8gVGhlIE1hcnNoYWxPcHRpb25zIHR5cGUgcHJvdmlkZXMgbW9yZSBjb250cm9sIG92ZXIgd2lyZSBtYXJzaGFsaW5nLgorLy8gICAtIFtNYXJzaGFsXSBjb252ZXJ0cyBhIG1lc3NhZ2UgdG8gdGhlIHdpcmUgZm9ybWF0LgorLy8gICAgIFRoZSBbTWFyc2hhbE9wdGlvbnNdIHR5cGUgcHJvdmlkZXMgbW9yZSBjb250cm9sIG92ZXIgd2lyZSBtYXJzaGFsaW5nLgogLy8KLS8vIOKAoiBVbm1hcnNoYWwgY29udmVydHMgYSBtZXNzYWdlIGZyb20gdGhlIHdpcmUgZm9ybWF0LgotLy8gVGhlIFVubWFyc2hhbE9wdGlvbnMgdHlwZSBwcm92aWRlcyBtb3JlIGNvbnRyb2wgb3ZlciB3aXJlIHVubWFyc2hhbGluZy4KKy8vICAgLSBbVW5tYXJzaGFsXSBjb252ZXJ0cyBhIG1lc3NhZ2UgZnJvbSB0aGUgd2lyZSBmb3JtYXQuCisvLyAgICAgVGhlIFtVbm1hcnNoYWxPcHRpb25zXSB0eXBlIHByb3ZpZGVzIG1vcmUgY29udHJvbCBvdmVyIHdpcmUgdW5tYXJzaGFsaW5nLgogLy8KKy8vICMgQmFzaWMgbWVzc2FnZSBvcGVyYXRpb25zCiAvLwotLy8gQmFzaWMgbWVzc2FnZSBvcGVyYXRpb25zCisvLyAgIC0gW0Nsb25lXSBtYWtlcyBhIGRlZXAgY29weSBvZiBhIG1lc3NhZ2UuCiAvLwotLy8g4oCiIENsb25lIG1ha2VzIGEgZGVlcCBjb3B5IG9mIGEgbWVzc2FnZS4KKy8vICAgLSBbTWVyZ2VdIG1lcmdlcyB0aGUgY29udGVudCBvZiBhIG1lc3NhZ2UgaW50byBhbm90aGVyLgogLy8KLS8vIOKAoiBNZXJnZSBtZXJnZXMgdGhlIGNvbnRlbnQgb2YgYSBtZXNzYWdlIGludG8gYW5vdGhlci4KKy8vICAgLSBbRXF1YWxdIGNvbXBhcmVzIHR3byBtZXNzYWdlcy4gRm9yIG1vcmUgY29udHJvbCBvdmVyIGNvbXBhcmlzb25zCisvLyAgICAgYW5kIGRldGFpbGVkIHJlcG9ydGluZyBvZiBkaWZmZXJlbmNlcywgc2VlIHBhY2thZ2UKKy8vICAgICBbZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdGVzdGluZy9wcm90b2NtcF0uCiAvLwotLy8g4oCiIEVxdWFsIGNvbXBhcmVzIHR3byBtZXNzYWdlcy4gRm9yIG1vcmUgY29udHJvbCBvdmVyIGNvbXBhcmlzb25zCi0vLyBhbmQgZGV0YWlsZWQgcmVwb3J0aW5nIG9mIGRpZmZlcmVuY2VzLCBzZWUgcGFja2FnZQotLy8gImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Rlc3RpbmcvcHJvdG9jbXAiLgorLy8gICAtIFtSZXNldF0gY2xlYXJzIHRoZSBjb250ZW50IG9mIGEgbWVzc2FnZS4KIC8vCi0vLyDigKIgUmVzZXQgY2xlYXJzIHRoZSBjb250ZW50IG9mIGEgbWVzc2FnZS4KKy8vICAgLSBbQ2hlY2tJbml0aWFsaXplZF0gcmVwb3J0cyB3aGV0aGVyIGFsbCByZXF1aXJlZCBmaWVsZHMgaW4gYSBtZXNzYWdlIGFyZSBzZXQuCiAvLwotLy8g4oCiIENoZWNrSW5pdGlhbGl6ZWQgcmVwb3J0cyB3aGV0aGVyIGFsbCByZXF1aXJlZCBmaWVsZHMgaW4gYSBtZXNzYWdlIGFyZSBzZXQuCi0vLwotLy8KLS8vIE9wdGlvbmFsIHNjYWxhciBjb25zdHJ1Y3RvcnMKKy8vICMgT3B0aW9uYWwgc2NhbGFyIGNvbnN0cnVjdG9ycwogLy8KIC8vIFRoZSBBUEkgZm9yIHNvbWUgZ2VuZXJhdGVkIG1lc3NhZ2VzIHJlcHJlc2VudHMgb3B0aW9uYWwgc2NhbGFyIGZpZWxkcwogLy8gYXMgcG9pbnRlcnMgdG8gYSB2YWx1ZS4gRm9yIGV4YW1wbGUsIGFuIG9wdGlvbmFsIHN0cmluZyBmaWVsZCBoYXMgdGhlCiAvLyBHbyB0eXBlICpzdHJpbmcuCiAvLwotLy8g4oCiIEJvb2wsIEludDMyLCBJbnQ2NCwgVWludDMyLCBVaW50NjQsIEZsb2F0MzIsIEZsb2F0NjQsIGFuZCBTdHJpbmcKLS8vIHRha2UgYSB2YWx1ZSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBhIG5ldyBpbnN0YW5jZSBvZiBpdCwKLS8vIHRvIHNpbXBsaWZ5IGNvbnN0cnVjdGlvbiBvZiBvcHRpb25hbCBmaWVsZCB2YWx1ZXMuCisvLyAgIC0gW0Jvb2xdLCBbSW50MzJdLCBbSW50NjRdLCBbVWludDMyXSwgW1VpbnQ2NF0sIFtGbG9hdDMyXSwgW0Zsb2F0NjRdLCBhbmQgW1N0cmluZ10KKy8vICAgICB0YWtlIGEgdmFsdWUgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXcgaW5zdGFuY2Ugb2YgaXQsCisvLyAgICAgdG8gc2ltcGxpZnkgY29uc3RydWN0aW9uIG9mIG9wdGlvbmFsIGZpZWxkIHZhbHVlcy4KIC8vCiAvLyBHZW5lcmF0ZWQgZW51bSB0eXBlcyB1c3VhbGx5IGhhdmUgYW4gRW51bSBtZXRob2Qgd2hpY2ggcGVyZm9ybXMgdGhlCiAvLyBzYW1lIG9wZXJhdGlvbi4KIC8vCiAvLyBPcHRpb25hbCBzY2FsYXIgZmllbGRzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiBwcm90bzIuCiAvLworLy8gIyBFeHRlbnNpb24gYWNjZXNzb3JzCiAvLwotLy8gRXh0ZW5zaW9uIGFjY2Vzc29ycwotLy8KLS8vIOKAoiBIYXNFeHRlbnNpb24sIEdldEV4dGVuc2lvbiwgU2V0RXh0ZW5zaW9uLCBhbmQgQ2xlYXJFeHRlbnNpb24KLS8vIGFjY2VzcyBleHRlbnNpb24gZmllbGQgdmFsdWVzIGluIGEgcHJvdG9jb2wgYnVmZmVyIG1lc3NhZ2UuCisvLyAgIC0gW0hhc0V4dGVuc2lvbl0sIFtHZXRFeHRlbnNpb25dLCBbU2V0RXh0ZW5zaW9uXSwgYW5kIFtDbGVhckV4dGVuc2lvbl0KKy8vICAgICBhY2Nlc3MgZXh0ZW5zaW9uIGZpZWxkIHZhbHVlcyBpbiBhIHByb3RvY29sIGJ1ZmZlciBtZXNzYWdlLgogLy8KIC8vIEV4dGVuc2lvbiBmaWVsZHMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIHByb3RvMi4KIC8vCisvLyAjIFJlbGF0ZWQgcGFja2FnZXMKIC8vCi0vLyBSZWxhdGVkIHBhY2thZ2VzCisvLyAgIC0gUGFja2FnZSBbZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG9qc29uXSBjb252ZXJ0cyBtZXNzYWdlcyB0bworLy8gICAgIGFuZCBmcm9tIEpTT04uCiAvLwotLy8g4oCiIFBhY2thZ2UgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2VuY29kaW5nL3Byb3RvanNvbiIgY29udmVydHMgbWVzc2FnZXMgdG8KLS8vIGFuZCBmcm9tIEpTT04uCisvLyAgIC0gUGFja2FnZSBbZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG90ZXh0XSBjb252ZXJ0cyBtZXNzYWdlcyB0bworLy8gICAgIGFuZCBmcm9tIHRoZSB0ZXh0IGZvcm1hdC4KIC8vCi0vLyDigKIgUGFja2FnZSAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG90ZXh0IiBjb252ZXJ0cyBtZXNzYWdlcyB0bwotLy8gYW5kIGZyb20gdGhlIHRleHQgZm9ybWF0LgorLy8gICAtIFBhY2thZ2UgW2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0XSBwcm92aWRlcyBhCisvLyAgICAgcmVmbGVjdGlvbiBpbnRlcmZhY2UgZm9yIHByb3RvY29sIGJ1ZmZlciBkYXRhIHR5cGVzLgogLy8KLS8vIOKAoiBQYWNrYWdlICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIgcHJvdmlkZXMgYQotLy8gcmVmbGVjdGlvbiBpbnRlcmZhY2UgZm9yIHByb3RvY29sIGJ1ZmZlciBkYXRhIHR5cGVzLgorLy8gICAtIFBhY2thZ2UgW2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Rlc3RpbmcvcHJvdG9jbXBdIHByb3ZpZGVzIGZlYXR1cmVzCisvLyAgICAgdG8gY29tcGFyZSBwcm90b2NvbCBidWZmZXIgbWVzc2FnZXMgd2l0aCB0aGUgW2dpdGh1Yi5jb20vZ29vZ2xlL2dvLWNtcC9jbXBdCisvLyAgICAgcGFja2FnZS4KIC8vCi0vLyDigKIgUGFja2FnZSAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdGVzdGluZy9wcm90b2NtcCIgcHJvdmlkZXMgZmVhdHVyZXMKLS8vIHRvIGNvbXBhcmUgcHJvdG9jb2wgYnVmZmVyIG1lc3NhZ2VzIHdpdGggdGhlICJnaXRodWIuY29tL2dvb2dsZS9nby1jbXAvY21wIgotLy8gcGFja2FnZS4KLS8vCi0vLyDigKIgUGFja2FnZSAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZHluYW1pY3BiIiBwcm92aWRlcyBhIGR5bmFtaWMKLS8vIG1lc3NhZ2UgdHlwZSwgc3VpdGFibGUgZm9yIHdvcmtpbmcgd2l0aCBtZXNzYWdlcyB3aGVyZSB0aGUgcHJvdG9jb2wgYnVmZmVyCi0vLyB0eXBlIGlzIG9ubHkga25vd24gYXQgcnVudGltZS4KKy8vICAgLSBQYWNrYWdlIFtnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9keW5hbWljcGJdIHByb3ZpZGVzIGEgZHluYW1pYworLy8gICAgIG1lc3NhZ2UgdHlwZSwgc3VpdGFibGUgZm9yIHdvcmtpbmcgd2l0aCBtZXNzYWdlcyB3aGVyZSB0aGUgcHJvdG9jb2wgYnVmZmVyCisvLyAgICAgdHlwZSBpcyBvbmx5IGtub3duIGF0IHJ1bnRpbWUuCiAvLwogLy8gVGhpcyBtb2R1bGUgY29udGFpbnMgYWRkaXRpb25hbCBwYWNrYWdlcyBmb3IgbW9yZSBzcGVjaWFsaXplZCB1c2UgY2FzZXMuCiAvLyBDb25zdWx0IHRoZSBpbmRpdmlkdWFsIHBhY2thZ2UgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by9lbmNvZGUuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vZW5jb2RlLmdvCmluZGV4IGQxODIzOWMuLjRmZWQyMDIgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by9lbmNvZGUuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL2VuY29kZS5nbwpAQCAtMTYsNyArMTYsOCBAQAogLy8gTWFyc2hhbE9wdGlvbnMgY29uZmlndXJlcyB0aGUgbWFyc2hhbGVyLgogLy8KIC8vIEV4YW1wbGUgdXNhZ2U6Ci0vLyAgIGIsIGVyciA6PSBNYXJzaGFsT3B0aW9uc3tEZXRlcm1pbmlzdGljOiB0cnVlfS5NYXJzaGFsKG0pCisvLworLy8JYiwgZXJyIDo9IE1hcnNoYWxPcHRpb25ze0RldGVybWluaXN0aWM6IHRydWV9Lk1hcnNoYWwobSkKIHR5cGUgTWFyc2hhbE9wdGlvbnMgc3RydWN0IHsKIAlwcmFnbWEuTm9VbmtleWVkTGl0ZXJhbHMKIApAQCAtMTAxLDcgKzEwMiw5IEBACiAvLyBvdGhlcndpc2UgaXQgcmV0dXJucyBhIG5vbi1uaWwgZW1wdHkgYnVmZmVyLgogLy8KIC8vIFRoaXMgaXMgdG8gYXNzaXN0IHRoZSBlZGdlLWNhc2Ugd2hlcmUgdXNlci1jb2RlIGRvZXMgdGhlIGZvbGxvd2luZzoKKy8vCiAvLwltMS5PcHRpb25hbEJ5dGVzLCBfID0gcHJvdG8uTWFyc2hhbChtMikKKy8vCiAvLyB3aGVyZSB0aGV5IGV4cGVjdCB0aGUgcHJvdG8yICJvcHRpb25hbF9ieXRlcyIgZmllbGQgdG8gYmUgcG9wdWxhdGVkCiAvLyBpZiBhbnkgb25seSBpZiBtMiBpcyBhIHZhbGlkIG1lc3NhZ2UuCiBmdW5jIGVtcHR5Qnl0ZXNGb3JNZXNzYWdlKG0gTWVzc2FnZSkgW11ieXRlIHsKQEAgLTEyNiw3ICsxMjksNyBAQAogLy8gTWFyc2hhbFN0YXRlIHJldHVybnMgdGhlIHdpcmUtZm9ybWF0IGVuY29kaW5nIG9mIGEgbWVzc2FnZS4KIC8vCiAvLyBUaGlzIG1ldGhvZCBwZXJtaXRzIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIG1hcnNoYWxlci4KLS8vIE1vc3QgdXNlcnMgc2hvdWxkIHVzZSBNYXJzaGFsIGluc3RlYWQuCisvLyBNb3N0IHVzZXJzIHNob3VsZCB1c2UgW01hcnNoYWxdIGluc3RlYWQuCiBmdW5jIChvIE1hcnNoYWxPcHRpb25zKSBNYXJzaGFsU3RhdGUoaW4gcHJvdG9pZmFjZS5NYXJzaGFsSW5wdXQpIChwcm90b2lmYWNlLk1hcnNoYWxPdXRwdXQsIGVycm9yKSB7CiAJcmV0dXJuIG8ubWFyc2hhbChpbi5CdWYsIGluLk1lc3NhZ2UpCiB9CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vZXF1YWwuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vZXF1YWwuZ28KaW5kZXggNGRiYTJiOS4uMWEwYmUxYiAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL2VxdWFsLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by9lcXVhbC5nbwpAQCAtNSwxNjMgKzUsNTMgQEAKIHBhY2thZ2UgcHJvdG8KIAogaW1wb3J0ICgKLQkiYnl0ZXMiCi0JIm1hdGgiCiAJInJlZmxlY3QiCiAKLQkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvZW5jb2RpbmcvcHJvdG93aXJlIgotCXByZWYgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0IgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKICkKIAotLy8gRXF1YWwgcmVwb3J0cyB3aGV0aGVyIHR3byBtZXNzYWdlcyBhcmUgZXF1YWwuCi0vLyBJZiB0d28gbWVzc2FnZXMgbWFyc2hhbCB0byB0aGUgc2FtZSBieXRlcyB1bmRlciBkZXRlcm1pbmlzdGljIHNlcmlhbGl6YXRpb24sCi0vLyB0aGVuIEVxdWFsIGlzIGd1YXJhbnRlZWQgdG8gcmVwb3J0IHRydWUuCisvLyBFcXVhbCByZXBvcnRzIHdoZXRoZXIgdHdvIG1lc3NhZ2VzIGFyZSBlcXVhbCwKKy8vIGJ5IHJlY3Vyc2l2ZWx5IGNvbXBhcmluZyB0aGUgZmllbGRzIG9mIHRoZSBtZXNzYWdlLgogLy8KLS8vIFR3byBtZXNzYWdlcyBhcmUgZXF1YWwgaWYgdGhleSBiZWxvbmcgdG8gdGhlIHNhbWUgbWVzc2FnZSBkZXNjcmlwdG9yLAotLy8gaGF2ZSB0aGUgc2FtZSBzZXQgb2YgcG9wdWxhdGVkIGtub3duIGFuZCBleHRlbnNpb24gZmllbGQgdmFsdWVzLAotLy8gYW5kIHRoZSBzYW1lIHNldCBvZiB1bmtub3duIGZpZWxkcyB2YWx1ZXMuIElmIGVpdGhlciBvZiB0aGUgdG9wLWxldmVsCi0vLyBtZXNzYWdlcyBhcmUgaW52YWxpZCwgdGhlbiBFcXVhbCByZXBvcnRzIHRydWUgb25seSBpZiBib3RoIGFyZSBpbnZhbGlkLgorLy8gICAtIEJ5dGVzIGZpZWxkcyBhcmUgZXF1YWwgaWYgdGhleSBjb250YWluIGlkZW50aWNhbCBieXRlcy4KKy8vICAgICBFbXB0eSBieXRlcyAocmVnYXJkbGVzcyBvZiBuaWwtbmVzcykgYXJlIGNvbnNpZGVyZWQgZXF1YWwuCiAvLwotLy8gU2NhbGFyIHZhbHVlcyBhcmUgY29tcGFyZWQgd2l0aCB0aGUgZXF1aXZhbGVudCBvZiB0aGUgPT0gb3BlcmF0b3IgaW4gR28sCi0vLyBleGNlcHQgYnl0ZXMgdmFsdWVzIHdoaWNoIGFyZSBjb21wYXJlZCB1c2luZyBieXRlcy5FcXVhbCBhbmQKLS8vIGZsb2F0aW5nIHBvaW50IHZhbHVlcyB3aGljaCBzcGVjaWFsbHkgdHJlYXQgTmFOcyBhcyBlcXVhbC4KLS8vIE1lc3NhZ2UgdmFsdWVzIGFyZSBjb21wYXJlZCBieSByZWN1cnNpdmVseSBjYWxsaW5nIEVxdWFsLgotLy8gTGlzdHMgYXJlIGVxdWFsIGlmIGVhY2ggZWxlbWVudCB2YWx1ZSBpcyBhbHNvIGVxdWFsLgotLy8gTWFwcyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHNldCBvZiBrZXlzLCB3aGVyZSB0aGUgcGFpciBvZiB2YWx1ZXMKLS8vIGZvciBlYWNoIGtleSBpcyBhbHNvIGVxdWFsLgorLy8gICAtIEZsb2F0aW5nLXBvaW50IGZpZWxkcyBhcmUgZXF1YWwgaWYgdGhleSBjb250YWluIHRoZSBzYW1lIHZhbHVlLgorLy8gICAgIFVubGlrZSB0aGUgPT0gb3BlcmF0b3IsIGEgTmFOIGlzIGVxdWFsIHRvIGFub3RoZXIgTmFOLgorLy8KKy8vICAgLSBPdGhlciBzY2FsYXIgZmllbGRzIGFyZSBlcXVhbCBpZiB0aGV5IGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUuCisvLworLy8gICAtIE1lc3NhZ2UgZmllbGRzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUKKy8vICAgICB0aGUgc2FtZSBzZXQgb2YgcG9wdWxhdGVkIGtub3duIGFuZCBleHRlbnNpb24gZmllbGQgdmFsdWVzLCBhbmQKKy8vICAgICB0aGUgc2FtZSBzZXQgb2YgdW5rbm93biBmaWVsZHMgdmFsdWVzLgorLy8KKy8vICAgLSBMaXN0cyBhcmUgZXF1YWwgaWYgdGhleSBhcmUgdGhlIHNhbWUgbGVuZ3RoIGFuZAorLy8gICAgIGVhY2ggY29ycmVzcG9uZGluZyBlbGVtZW50IGlzIGVxdWFsLgorLy8KKy8vICAgLSBNYXBzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgc2V0IG9mIGtleXMgYW5kCisvLyAgICAgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgZm9yIGVhY2gga2V5IGlzIGVxdWFsLgorLy8KKy8vIEFuIGludmFsaWQgbWVzc2FnZSBpcyBub3QgZXF1YWwgdG8gYSB2YWxpZCBtZXNzYWdlLgorLy8gQW4gaW52YWxpZCBtZXNzYWdlIGlzIG9ubHkgZXF1YWwgdG8gYW5vdGhlciBpbnZhbGlkIG1lc3NhZ2Ugb2YgdGhlCisvLyBzYW1lIHR5cGUuIEFuIGludmFsaWQgbWVzc2FnZSBvZnRlbiBjb3JyZXNwb25kcyB0byBhIG5pbCBwb2ludGVyCisvLyBvZiB0aGUgY29uY3JldGUgbWVzc2FnZSB0eXBlLiBGb3IgZXhhbXBsZSwgKCpwYi5NKShuaWwpIGlzIG5vdCBlcXVhbAorLy8gdG8gJnBiLk17fS4KKy8vIElmIHR3byB2YWxpZCBtZXNzYWdlcyBtYXJzaGFsIHRvIHRoZSBzYW1lIGJ5dGVzIHVuZGVyIGRldGVybWluaXN0aWMKKy8vIHNlcmlhbGl6YXRpb24sIHRoZW4gRXF1YWwgaXMgZ3VhcmFudGVlZCB0byByZXBvcnQgdHJ1ZS4KIGZ1bmMgRXF1YWwoeCwgeSBNZXNzYWdlKSBib29sIHsKIAlpZiB4ID09IG5pbCB8fCB5ID09IG5pbCB7CiAJCXJldHVybiB4ID09IG5pbCAmJiB5ID09IG5pbAogCX0KKwlpZiByZWZsZWN0LlR5cGVPZih4KS5LaW5kKCkgPT0gcmVmbGVjdC5QdHIgJiYgeCA9PSB5IHsKKwkJLy8gQXZvaWQgYW4gZXhwZW5zaXZlIGNvbXBhcmlzb24gaWYgYm90aCBpbnB1dHMgYXJlIGlkZW50aWNhbCBwb2ludGVycy4KKwkJcmV0dXJuIHRydWUKKwl9CiAJbXggOj0geC5Qcm90b1JlZmxlY3QoKQogCW15IDo9IHkuUHJvdG9SZWZsZWN0KCkKIAlpZiBteC5Jc1ZhbGlkKCkgIT0gbXkuSXNWYWxpZCgpIHsKIAkJcmV0dXJuIGZhbHNlCiAJfQotCXJldHVybiBlcXVhbE1lc3NhZ2UobXgsIG15KQotfQotCi0vLyBlcXVhbE1lc3NhZ2UgY29tcGFyZXMgdHdvIG1lc3NhZ2VzLgotZnVuYyBlcXVhbE1lc3NhZ2UobXgsIG15IHByZWYuTWVzc2FnZSkgYm9vbCB7Ci0JaWYgbXguRGVzY3JpcHRvcigpICE9IG15LkRlc2NyaXB0b3IoKSB7Ci0JCXJldHVybiBmYWxzZQotCX0KLQotCW54IDo9IDAKLQllcXVhbCA6PSB0cnVlCi0JbXguUmFuZ2UoZnVuYyhmZCBwcmVmLkZpZWxkRGVzY3JpcHRvciwgdnggcHJlZi5WYWx1ZSkgYm9vbCB7Ci0JCW54KysKLQkJdnkgOj0gbXkuR2V0KGZkKQotCQllcXVhbCA9IG15LkhhcyhmZCkgJiYgZXF1YWxGaWVsZChmZCwgdngsIHZ5KQotCQlyZXR1cm4gZXF1YWwKLQl9KQotCWlmICFlcXVhbCB7Ci0JCXJldHVybiBmYWxzZQotCX0KLQlueSA6PSAwCi0JbXkuUmFuZ2UoZnVuYyhmZCBwcmVmLkZpZWxkRGVzY3JpcHRvciwgdnggcHJlZi5WYWx1ZSkgYm9vbCB7Ci0JCW55KysKLQkJcmV0dXJuIHRydWUKLQl9KQotCWlmIG54ICE9IG55IHsKLQkJcmV0dXJuIGZhbHNlCi0JfQotCi0JcmV0dXJuIGVxdWFsVW5rbm93bihteC5HZXRVbmtub3duKCksIG15LkdldFVua25vd24oKSkKLX0KLQotLy8gZXF1YWxGaWVsZCBjb21wYXJlcyB0d28gZmllbGRzLgotZnVuYyBlcXVhbEZpZWxkKGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCB4LCB5IHByZWYuVmFsdWUpIGJvb2wgewotCXN3aXRjaCB7Ci0JY2FzZSBmZC5Jc0xpc3QoKToKLQkJcmV0dXJuIGVxdWFsTGlzdChmZCwgeC5MaXN0KCksIHkuTGlzdCgpKQotCWNhc2UgZmQuSXNNYXAoKToKLQkJcmV0dXJuIGVxdWFsTWFwKGZkLCB4Lk1hcCgpLCB5Lk1hcCgpKQotCWRlZmF1bHQ6Ci0JCXJldHVybiBlcXVhbFZhbHVlKGZkLCB4LCB5KQotCX0KLX0KLQotLy8gZXF1YWxNYXAgY29tcGFyZXMgdHdvIG1hcHMuCi1mdW5jIGVxdWFsTWFwKGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCB4LCB5IHByZWYuTWFwKSBib29sIHsKLQlpZiB4LkxlbigpICE9IHkuTGVuKCkgewotCQlyZXR1cm4gZmFsc2UKLQl9Ci0JZXF1YWwgOj0gdHJ1ZQotCXguUmFuZ2UoZnVuYyhrIHByZWYuTWFwS2V5LCB2eCBwcmVmLlZhbHVlKSBib29sIHsKLQkJdnkgOj0geS5HZXQoaykKLQkJZXF1YWwgPSB5LkhhcyhrKSAmJiBlcXVhbFZhbHVlKGZkLk1hcFZhbHVlKCksIHZ4LCB2eSkKLQkJcmV0dXJuIGVxdWFsCi0JfSkKLQlyZXR1cm4gZXF1YWwKLX0KLQotLy8gZXF1YWxMaXN0IGNvbXBhcmVzIHR3byBsaXN0cy4KLWZ1bmMgZXF1YWxMaXN0KGZkIHByZWYuRmllbGREZXNjcmlwdG9yLCB4LCB5IHByZWYuTGlzdCkgYm9vbCB7Ci0JaWYgeC5MZW4oKSAhPSB5LkxlbigpIHsKLQkJcmV0dXJuIGZhbHNlCi0JfQotCWZvciBpIDo9IHguTGVuKCkgLSAxOyBpID49IDA7IGktLSB7Ci0JCWlmICFlcXVhbFZhbHVlKGZkLCB4LkdldChpKSwgeS5HZXQoaSkpIHsKLQkJCXJldHVybiBmYWxzZQotCQl9Ci0JfQotCXJldHVybiB0cnVlCi19Ci0KLS8vIGVxdWFsVmFsdWUgY29tcGFyZXMgdHdvIHNpbmd1bGFyIHZhbHVlcy4KLWZ1bmMgZXF1YWxWYWx1ZShmZCBwcmVmLkZpZWxkRGVzY3JpcHRvciwgeCwgeSBwcmVmLlZhbHVlKSBib29sIHsKLQlzd2l0Y2ggZmQuS2luZCgpIHsKLQljYXNlIHByZWYuQm9vbEtpbmQ6Ci0JCXJldHVybiB4LkJvb2woKSA9PSB5LkJvb2woKQotCWNhc2UgcHJlZi5FbnVtS2luZDoKLQkJcmV0dXJuIHguRW51bSgpID09IHkuRW51bSgpCi0JY2FzZSBwcmVmLkludDMyS2luZCwgcHJlZi5TaW50MzJLaW5kLAotCQlwcmVmLkludDY0S2luZCwgcHJlZi5TaW50NjRLaW5kLAotCQlwcmVmLlNmaXhlZDMyS2luZCwgcHJlZi5TZml4ZWQ2NEtpbmQ6Ci0JCXJldHVybiB4LkludCgpID09IHkuSW50KCkKLQljYXNlIHByZWYuVWludDMyS2luZCwgcHJlZi5VaW50NjRLaW5kLAotCQlwcmVmLkZpeGVkMzJLaW5kLCBwcmVmLkZpeGVkNjRLaW5kOgotCQlyZXR1cm4geC5VaW50KCkgPT0geS5VaW50KCkKLQljYXNlIHByZWYuRmxvYXRLaW5kLCBwcmVmLkRvdWJsZUtpbmQ6Ci0JCWZ4IDo9IHguRmxvYXQoKQotCQlmeSA6PSB5LkZsb2F0KCkKLQkJaWYgbWF0aC5Jc05hTihmeCkgfHwgbWF0aC5Jc05hTihmeSkgewotCQkJcmV0dXJuIG1hdGguSXNOYU4oZngpICYmIG1hdGguSXNOYU4oZnkpCi0JCX0KLQkJcmV0dXJuIGZ4ID09IGZ5Ci0JY2FzZSBwcmVmLlN0cmluZ0tpbmQ6Ci0JCXJldHVybiB4LlN0cmluZygpID09IHkuU3RyaW5nKCkKLQljYXNlIHByZWYuQnl0ZXNLaW5kOgotCQlyZXR1cm4gYnl0ZXMuRXF1YWwoeC5CeXRlcygpLCB5LkJ5dGVzKCkpCi0JY2FzZSBwcmVmLk1lc3NhZ2VLaW5kLCBwcmVmLkdyb3VwS2luZDoKLQkJcmV0dXJuIGVxdWFsTWVzc2FnZSh4Lk1lc3NhZ2UoKSwgeS5NZXNzYWdlKCkpCi0JZGVmYXVsdDoKLQkJcmV0dXJuIHguSW50ZXJmYWNlKCkgPT0geS5JbnRlcmZhY2UoKQotCX0KLX0KLQotLy8gZXF1YWxVbmtub3duIGNvbXBhcmVzIHVua25vd24gZmllbGRzIGJ5IGRpcmVjdCBjb21wYXJpc29uIG9uIHRoZSByYXcgYnl0ZXMKLS8vIG9mIGVhY2ggaW5kaXZpZHVhbCBmaWVsZCBudW1iZXIuCi1mdW5jIGVxdWFsVW5rbm93bih4LCB5IHByZWYuUmF3RmllbGRzKSBib29sIHsKLQlpZiBsZW4oeCkgIT0gbGVuKHkpIHsKLQkJcmV0dXJuIGZhbHNlCi0JfQotCWlmIGJ5dGVzLkVxdWFsKFtdYnl0ZSh4KSwgW11ieXRlKHkpKSB7Ci0JCXJldHVybiB0cnVlCi0JfQotCi0JbXggOj0gbWFrZShtYXBbcHJlZi5GaWVsZE51bWJlcl1wcmVmLlJhd0ZpZWxkcykKLQlteSA6PSBtYWtlKG1hcFtwcmVmLkZpZWxkTnVtYmVyXXByZWYuUmF3RmllbGRzKQotCWZvciBsZW4oeCkgPiAwIHsKLQkJZm51bSwgXywgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUZpZWxkKHgpCi0JCW14W2ZudW1dID0gYXBwZW5kKG14W2ZudW1dLCB4WzpuXS4uLikKLQkJeCA9IHhbbjpdCi0JfQotCWZvciBsZW4oeSkgPiAwIHsKLQkJZm51bSwgXywgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUZpZWxkKHkpCi0JCW15W2ZudW1dID0gYXBwZW5kKG15W2ZudW1dLCB5WzpuXS4uLikKLQkJeSA9IHlbbjpdCi0JfQotCXJldHVybiByZWZsZWN0LkRlZXBFcXVhbChteCwgbXkpCisJdnggOj0gcHJvdG9yZWZsZWN0LlZhbHVlT2ZNZXNzYWdlKG14KQorCXZ5IDo9IHByb3RvcmVmbGVjdC5WYWx1ZU9mTWVzc2FnZShteSkKKwlyZXR1cm4gdnguRXF1YWwodnkpCiB9CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vZXh0ZW5zaW9uLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL2V4dGVuc2lvbi5nbwppbmRleCA1ZjI5M2NkLi4xNzg5OWEzIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vZXh0ZW5zaW9uLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by9leHRlbnNpb24uZ28KQEAgLTI2LDcgKzI2LDcgQEAKIH0KIAogLy8gQ2xlYXJFeHRlbnNpb24gY2xlYXJzIGFuIGV4dGVuc2lvbiBmaWVsZCBzdWNoIHRoYXQgc3Vic2VxdWVudAotLy8gSGFzRXh0ZW5zaW9uIGNhbGxzIHJldHVybiBmYWxzZS4KKy8vIFtIYXNFeHRlbnNpb25dIGNhbGxzIHJldHVybiBmYWxzZS4KIC8vIEl0IHBhbmljcyBpZiBtIGlzIGludmFsaWQgb3IgaWYgeHQgZG9lcyBub3QgZXh0ZW5kIG0uCiBmdW5jIENsZWFyRXh0ZW5zaW9uKG0gTWVzc2FnZSwgeHQgcHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUpIHsKIAltLlByb3RvUmVmbGVjdCgpLkNsZWFyKHh0LlR5cGVEZXNjcmlwdG9yKCkpCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vbWVyZ2UuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vbWVyZ2UuZ28KaW5kZXggZDc2MWFiMy4uM2M2ZmU1NyAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL21lcmdlLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by9tZXJnZS5nbwpAQCAtMjEsNyArMjEsNyBAQAogLy8gVGhlIHVua25vd24gZmllbGRzIG9mIHNyYyBhcmUgYXBwZW5kZWQgdG8gdGhlIHVua25vd24gZmllbGRzIG9mIGRzdC4KIC8vCiAvLyBJdCBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byB1bm1hcnNoYWxpbmcgdGhlIGVuY29kZWQgZm9ybSBvZiBzcmMKLS8vIGludG8gZHN0IHdpdGggdGhlIFVubWFyc2hhbE9wdGlvbnMuTWVyZ2Ugb3B0aW9uIHNwZWNpZmllZC4KKy8vIGludG8gZHN0IHdpdGggdGhlIFtVbm1hcnNoYWxPcHRpb25zLk1lcmdlXSBvcHRpb24gc3BlY2lmaWVkLgogZnVuYyBNZXJnZShkc3QsIHNyYyBNZXNzYWdlKSB7CiAJLy8gVE9ETzogU2hvdWxkIG5pbCBzcmMgYmUgdHJlYXRlZCBhcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byBhCiAJLy8gdW50eXBlZCwgcmVhZC1vbmx5LCBlbXB0eSBtZXNzYWdlPyBXaGF0IGFib3V0IGEgbmlsIGRzdD8KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by9wcm90by5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by9wcm90by5nbwppbmRleCAxZjBkMTgzLi43NTQzZWU2IDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vcHJvdG8uZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL3Byb3RvLmdvCkBAIC0xNSwxOCArMTUsMjAgQEAKIC8vIHByb3RvYnVmIG1vZHVsZSB0aGF0IGFjY2VwdCBhIE1lc3NhZ2UsIGV4Y2VwdCB3aGVyZSBvdGhlcndpc2Ugc3BlY2lmaWVkLgogLy8KIC8vIFRoaXMgaXMgdGhlIHYyIGludGVyZmFjZSBkZWZpbml0aW9uIGZvciBwcm90b2J1ZiBtZXNzYWdlcy4KLS8vIFRoZSB2MSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBpcyAiZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHJvdG8iLk1lc3NhZ2UuCisvLyBUaGUgdjEgaW50ZXJmYWNlIGRlZmluaXRpb24gaXMgW2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvLk1lc3NhZ2VdLgogLy8KLS8vIFRvIGNvbnZlcnQgYSB2MSBtZXNzYWdlIHRvIGEgdjIgbWVzc2FnZSwKLS8vIHVzZSAiZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHJvdG8iLk1lc3NhZ2VWMi4KLS8vIFRvIGNvbnZlcnQgYSB2MiBtZXNzYWdlIHRvIGEgdjEgbWVzc2FnZSwKLS8vIHVzZSAiZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHJvdG8iLk1lc3NhZ2VWMS4KKy8vICAgLSBUbyBjb252ZXJ0IGEgdjEgbWVzc2FnZSB0byBhIHYyIG1lc3NhZ2UsCisvLyAgICAgdXNlIFtnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90b2FkYXB0Lk1lc3NhZ2VWMk9mXS4KKy8vICAgLSBUbyBjb252ZXJ0IGEgdjIgbWVzc2FnZSB0byBhIHYxIG1lc3NhZ2UsCisvLyAgICAgdXNlIFtnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90b2FkYXB0Lk1lc3NhZ2VWMU9mXS4KIHR5cGUgTWVzc2FnZSA9IHByb3RvcmVmbGVjdC5Qcm90b01lc3NhZ2UKIAotLy8gRXJyb3IgbWF0Y2hlcyBhbGwgZXJyb3JzIHByb2R1Y2VkIGJ5IHBhY2thZ2VzIGluIHRoZSBwcm90b2J1ZiBtb2R1bGUuCisvLyBFcnJvciBtYXRjaGVzIGFsbCBlcnJvcnMgcHJvZHVjZWQgYnkgcGFja2FnZXMgaW4gdGhlIHByb3RvYnVmIG1vZHVsZQorLy8gYWNjb3JkaW5nIHRvIFtlcnJvcnMuSXNdLgogLy8KLS8vIFRoYXQgaXMsIGVycm9ycy5JcyhlcnIsIEVycm9yKSByZXBvcnRzIHdoZXRoZXIgYW4gZXJyb3IgaXMgcHJvZHVjZWQKLS8vIGJ5IHRoaXMgbW9kdWxlLgorLy8gRXhhbXBsZSB1c2FnZToKKy8vCisvLwlpZiBlcnJvcnMuSXMoZXJyLCBwcm90by5FcnJvcikgeyAuLi4gfQogdmFyIEVycm9yIGVycm9yCiAKIGZ1bmMgaW5pdCgpIHsKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by9wcm90b19tZXRob2RzLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL3Byb3RvX21ldGhvZHMuZ28KaW5kZXggZDhkZDYwNC4uNDY1ZTA1NyAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL3Byb3RvX21ldGhvZHMuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL3Byb3RvX21ldGhvZHMuZ28KQEAgLTMsNiArMyw3IEBACiAvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAKIC8vIFRoZSBwcm90b3JlZmxlY3QgYnVpbGQgdGFnIGRpc2FibGVzIHVzZSBvZiBmYXN0LXBhdGggbWV0aG9kcy4KKy8vZ286YnVpbGQgIXByb3RvcmVmbGVjdAogLy8gK2J1aWxkICFwcm90b3JlZmxlY3QKIAogcGFja2FnZSBwcm90bwpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL3Byb3RvX3JlZmxlY3QuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vcHJvdG9fcmVmbGVjdC5nbwppbmRleCBiMTAzZDQzLi40OTRkNmNlIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vcHJvdG9fcmVmbGVjdC5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vcHJvdG9fcmVmbGVjdC5nbwpAQCAtMyw2ICszLDcgQEAKIC8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAogLy8gVGhlIHByb3RvcmVmbGVjdCBidWlsZCB0YWcgZGlzYWJsZXMgdXNlIG9mIGZhc3QtcGF0aCBtZXRob2RzLgorLy9nbzpidWlsZCBwcm90b3JlZmxlY3QKIC8vICtidWlsZCBwcm90b3JlZmxlY3QKIAogcGFja2FnZSBwcm90bwpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvL3NpemUuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vc2l6ZS5nbwppbmRleCA1NTRiOWM2Li5mMTY5MmI0IDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vc2l6ZS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8vc2l6ZS5nbwpAQCAtNzMsMjMgKzczLDI3IEBACiB9CiAKIGZ1bmMgKG8gTWFyc2hhbE9wdGlvbnMpIHNpemVMaXN0KG51bSBwcm90b3dpcmUuTnVtYmVyLCBmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yLCBsaXN0IHByb3RvcmVmbGVjdC5MaXN0KSAoc2l6ZSBpbnQpIHsKKwlzaXplVGFnIDo9IHByb3Rvd2lyZS5TaXplVGFnKG51bSkKKwogCWlmIGZkLklzUGFja2VkKCkgJiYgbGlzdC5MZW4oKSA+IDAgewogCQljb250ZW50IDo9IDAKIAkJZm9yIGksIGxsZW4gOj0gMCwgbGlzdC5MZW4oKTsgaSA8IGxsZW47IGkrKyB7CiAJCQljb250ZW50ICs9IG8uc2l6ZVNpbmd1bGFyKG51bSwgZmQuS2luZCgpLCBsaXN0LkdldChpKSkKIAkJfQotCQlyZXR1cm4gcHJvdG93aXJlLlNpemVUYWcobnVtKSArIHByb3Rvd2lyZS5TaXplQnl0ZXMoY29udGVudCkKKwkJcmV0dXJuIHNpemVUYWcgKyBwcm90b3dpcmUuU2l6ZUJ5dGVzKGNvbnRlbnQpCiAJfQogCiAJZm9yIGksIGxsZW4gOj0gMCwgbGlzdC5MZW4oKTsgaSA8IGxsZW47IGkrKyB7Ci0JCXNpemUgKz0gcHJvdG93aXJlLlNpemVUYWcobnVtKSArIG8uc2l6ZVNpbmd1bGFyKG51bSwgZmQuS2luZCgpLCBsaXN0LkdldChpKSkKKwkJc2l6ZSArPSBzaXplVGFnICsgby5zaXplU2luZ3VsYXIobnVtLCBmZC5LaW5kKCksIGxpc3QuR2V0KGkpKQogCX0KIAlyZXR1cm4gc2l6ZQogfQogCiBmdW5jIChvIE1hcnNoYWxPcHRpb25zKSBzaXplTWFwKG51bSBwcm90b3dpcmUuTnVtYmVyLCBmZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yLCBtYXB2IHByb3RvcmVmbGVjdC5NYXApIChzaXplIGludCkgeworCXNpemVUYWcgOj0gcHJvdG93aXJlLlNpemVUYWcobnVtKQorCiAJbWFwdi5SYW5nZShmdW5jKGtleSBwcm90b3JlZmxlY3QuTWFwS2V5LCB2YWx1ZSBwcm90b3JlZmxlY3QuVmFsdWUpIGJvb2wgewotCQlzaXplICs9IHByb3Rvd2lyZS5TaXplVGFnKG51bSkKKwkJc2l6ZSArPSBzaXplVGFnCiAJCXNpemUgKz0gcHJvdG93aXJlLlNpemVCeXRlcyhvLnNpemVGaWVsZChmZC5NYXBLZXkoKSwga2V5LlZhbHVlKCkpICsgby5zaXplRmllbGQoZmQuTWFwVmFsdWUoKSwgdmFsdWUpKQogCQlyZXR1cm4gdHJ1ZQogCX0pCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b2Rlc2MvZGVzYy5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvZGVzYy9kZXNjLmdvCmluZGV4IGU0ZGZiMTIuLmJhYTBjYzYgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvZGVzYy9kZXNjLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvZGVzYy9kZXNjLmdvCkBAIC0zLDExICszLDExIEBACiAvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAKIC8vIFBhY2thZ2UgcHJvdG9kZXNjIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yIGNvbnZlcnRpbmcKLS8vIEZpbGVEZXNjcmlwdG9yUHJvdG8gbWVzc2FnZXMgdG8vZnJvbSBwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IgdmFsdWVzLgorLy8gRmlsZURlc2NyaXB0b3JQcm90byBtZXNzYWdlcyB0by9mcm9tIFtwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3JdIHZhbHVlcy4KIC8vCiAvLyBUaGUgZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8gaXMgYSBwcm90b2J1ZiBtZXNzYWdlIHRoYXQgZGVzY3JpYmVzCiAvLyB0aGUgdHlwZSBpbmZvcm1hdGlvbiBmb3IgYSAucHJvdG8gZmlsZSBpbiBhIGZvcm0gdGhhdCBpcyBlYXNpbHkgc2VyaWFsaXphYmxlLgotLy8gVGhlIHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvciBpcyBhIG1vcmUgc3RydWN0dXJlZCByZXByZXNlbnRhdGlvbiBvZgorLy8gVGhlIFtwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3JdIGlzIGEgbW9yZSBzdHJ1Y3R1cmVkIHJlcHJlc2VudGF0aW9uIG9mCiAvLyB0aGUgRmlsZURlc2NyaXB0b3JQcm90byBtZXNzYWdlIHdoZXJlIHJlZmVyZW5jZXMgYW5kIHJlbW90ZSBkZXBlbmRlbmNpZXMKIC8vIGNhbiBiZSBkaXJlY3RseSBmb2xsb3dlZC4KIHBhY2thZ2UgcHJvdG9kZXNjCkBAIC0yNCwxMSArMjQsMTEgQEAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBiIgogKQogCi0vLyBSZXNvbHZlciBpcyB0aGUgcmVzb2x2ZXIgdXNlZCBieSBOZXdGaWxlIHRvIHJlc29sdmUgZGVwZW5kZW5jaWVzLgorLy8gUmVzb2x2ZXIgaXMgdGhlIHJlc29sdmVyIHVzZWQgYnkgW05ld0ZpbGVdIHRvIHJlc29sdmUgZGVwZW5kZW5jaWVzLgogLy8gVGhlIGVudW1zIGFuZCBtZXNzYWdlcyBwcm92aWRlZCBtdXN0IGJlbG9uZyB0byBzb21lIHBhcmVudCBmaWxlLAogLy8gd2hpY2ggaXMgYWxzbyByZWdpc3RlcmVkLgogLy8KLS8vIEl0IGlzIGltcGxlbWVudGVkIGJ5IHByb3RvcmVnaXN0cnkuRmlsZXMuCisvLyBJdCBpcyBpbXBsZW1lbnRlZCBieSBbcHJvdG9yZWdpc3RyeS5GaWxlc10uCiB0eXBlIFJlc29sdmVyIGludGVyZmFjZSB7CiAJRmluZEZpbGVCeVBhdGgoc3RyaW5nKSAocHJvdG9yZWZsZWN0LkZpbGVEZXNjcmlwdG9yLCBlcnJvcikKIAlGaW5kRGVzY3JpcHRvckJ5TmFtZShwcm90b3JlZmxlY3QuRnVsbE5hbWUpIChwcm90b3JlZmxlY3QuRGVzY3JpcHRvciwgZXJyb3IpCkBAIC02MSwxOSArNjEsMTkgQEAKIAlBbGxvd1VucmVzb2x2YWJsZSBib29sCiB9CiAKLS8vIE5ld0ZpbGUgY3JlYXRlcyBhIG5ldyBwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IgZnJvbSB0aGUgcHJvdmlkZWQKLS8vIGZpbGUgZGVzY3JpcHRvciBtZXNzYWdlLiBTZWUgRmlsZU9wdGlvbnMuTmV3IGZvciBtb3JlIGluZm9ybWF0aW9uLgorLy8gTmV3RmlsZSBjcmVhdGVzIGEgbmV3IFtwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3JdIGZyb20gdGhlIHByb3ZpZGVkCisvLyBmaWxlIGRlc2NyaXB0b3IgbWVzc2FnZS4gU2VlIFtGaWxlT3B0aW9ucy5OZXddIGZvciBtb3JlIGluZm9ybWF0aW9uLgogZnVuYyBOZXdGaWxlKGZkICpkZXNjcmlwdG9ycGIuRmlsZURlc2NyaXB0b3JQcm90bywgciBSZXNvbHZlcikgKHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvciwgZXJyb3IpIHsKIAlyZXR1cm4gRmlsZU9wdGlvbnN7fS5OZXcoZmQsIHIpCiB9CiAKLS8vIE5ld0ZpbGVzIGNyZWF0ZXMgYSBuZXcgcHJvdG9yZWdpc3RyeS5GaWxlcyBmcm9tIHRoZSBwcm92aWRlZAotLy8gRmlsZURlc2NyaXB0b3JTZXQgbWVzc2FnZS4gU2VlIEZpbGVPcHRpb25zLk5ld0ZpbGVzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorLy8gTmV3RmlsZXMgY3JlYXRlcyBhIG5ldyBbcHJvdG9yZWdpc3RyeS5GaWxlc10gZnJvbSB0aGUgcHJvdmlkZWQKKy8vIEZpbGVEZXNjcmlwdG9yU2V0IG1lc3NhZ2UuIFNlZSBbRmlsZU9wdGlvbnMuTmV3RmlsZXNdIGZvciBtb3JlIGluZm9ybWF0aW9uLgogZnVuYyBOZXdGaWxlcyhmZCAqZGVzY3JpcHRvcnBiLkZpbGVEZXNjcmlwdG9yU2V0KSAoKnByb3RvcmVnaXN0cnkuRmlsZXMsIGVycm9yKSB7CiAJcmV0dXJuIEZpbGVPcHRpb25ze30uTmV3RmlsZXMoZmQpCiB9CiAKLS8vIE5ldyBjcmVhdGVzIGEgbmV3IHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvciBmcm9tIHRoZSBwcm92aWRlZAorLy8gTmV3IGNyZWF0ZXMgYSBuZXcgW3Byb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvcl0gZnJvbSB0aGUgcHJvdmlkZWQKIC8vIGZpbGUgZGVzY3JpcHRvciBtZXNzYWdlLiBUaGUgZmlsZSBtdXN0IHJlcHJlc2VudCBhIHZhbGlkIHByb3RvIGZpbGUgYWNjb3JkaW5nCiAvLyB0byBwcm90b2J1ZiBzZW1hbnRpY3MuIFRoZSByZXR1cm5lZCBkZXNjcmlwdG9yIGlzIGEgZGVlcCBjb3B5IG9mIHRoZSBpbnB1dC4KIC8vCkBAIC05Myw5ICs5MywxNSBAQAogCQlmLkwxLlN5bnRheCA9IHByb3RvcmVmbGVjdC5Qcm90bzIKIAljYXNlICJwcm90bzMiOgogCQlmLkwxLlN5bnRheCA9IHByb3RvcmVmbGVjdC5Qcm90bzMKKwljYXNlICJlZGl0aW9ucyI6CisJCWYuTDEuU3ludGF4ID0gcHJvdG9yZWZsZWN0LkVkaXRpb25zCisJCWYuTDEuRWRpdGlvbiA9IGZyb21FZGl0aW9uUHJvdG8oZmQuR2V0RWRpdGlvbigpKQogCWRlZmF1bHQ6CiAJCXJldHVybiBuaWwsIGVycm9ycy5OZXcoImludmFsaWQgc3ludGF4OiAlcSIsIGZkLkdldFN5bnRheCgpKQogCX0KKwlpZiBmLkwxLlN5bnRheCA9PSBwcm90b3JlZmxlY3QuRWRpdGlvbnMgJiYgKGZkLkdldEVkaXRpb24oKSA8IFN1cHBvcnRlZEVkaXRpb25zTWluaW11bSB8fCBmZC5HZXRFZGl0aW9uKCkgPiBTdXBwb3J0ZWRFZGl0aW9uc01heGltdW0pIHsKKwkJcmV0dXJuIG5pbCwgZXJyb3JzLk5ldygidXNlIG9mIGVkaXRpb24gJXYgbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhlIEdvIFByb3RvYnVmIHJ1bnRpbWUiLCBmZC5HZXRFZGl0aW9uKCkpCisJfQogCWYuTDEuUGF0aCA9IGZkLkdldE5hbWUoKQogCWlmIGYuTDEuUGF0aCA9PSAiIiB7CiAJCXJldHVybiBuaWwsIGVycm9ycy5OZXcoImZpbGUgcGF0aCBtdXN0IGJlIHBvcHVsYXRlZCIpCkBAIC0xMDgsNiArMTE0LDkgQEAKIAkJb3B0cyA9IHByb3RvLkNsb25lKG9wdHMpLigqZGVzY3JpcHRvcnBiLkZpbGVPcHRpb25zKQogCQlmLkwyLk9wdGlvbnMgPSBmdW5jKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSB7IHJldHVybiBvcHRzIH0KIAl9CisJaWYgZi5MMS5TeW50YXggPT0gcHJvdG9yZWZsZWN0LkVkaXRpb25zIHsKKwkJaW5pdEZpbGVEZXNjRnJvbUZlYXR1cmVTZXQoZiwgZmQuR2V0T3B0aW9ucygpLkdldEZlYXR1cmVzKCkpCisJfQogCiAJZi5MMi5JbXBvcnRzID0gbWFrZShmaWxlZGVzYy5GaWxlSW1wb3J0cywgbGVuKGZkLkdldERlcGVuZGVuY3koKSkpCiAJZm9yIF8sIGkgOj0gcmFuZ2UgZmQuR2V0UHVibGljRGVwZW5kZW5jeSgpIHsKQEAgLTIzMSw3ICsyNDAsNyBAQAogCX0KIH0KIAotLy8gTmV3RmlsZXMgY3JlYXRlcyBhIG5ldyBwcm90b3JlZ2lzdHJ5LkZpbGVzIGZyb20gdGhlIHByb3ZpZGVkCisvLyBOZXdGaWxlcyBjcmVhdGVzIGEgbmV3IFtwcm90b3JlZ2lzdHJ5LkZpbGVzXSBmcm9tIHRoZSBwcm92aWRlZAogLy8gRmlsZURlc2NyaXB0b3JTZXQgbWVzc2FnZS4gVGhlIGRlc2NyaXB0b3Igc2V0IG11c3QgaW5jbHVkZSBvbmx5CiAvLyB2YWxpZCBmaWxlcyBhY2NvcmRpbmcgdG8gcHJvdG9idWYgc2VtYW50aWNzLiBUaGUgcmV0dXJuZWQgZGVzY3JpcHRvcnMKIC8vIGFyZSBhIGRlZXAgY29weSBvZiB0aGUgaW5wdXQuCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b2Rlc2MvZGVzY19pbml0LmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9kZXNjL2Rlc2NfaW5pdC5nbwppbmRleCAzN2VmZGExLi5iMzI3ODE2IDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b2Rlc2MvZGVzY19pbml0LmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvZGVzYy9kZXNjX2luaXQuZ28KQEAgLTI4LDYgKzI4LDcgQEAKIAkJCW9wdHMgPSBwcm90by5DbG9uZShvcHRzKS4oKmRlc2NyaXB0b3JwYi5FbnVtT3B0aW9ucykKIAkJCWUuTDIuT3B0aW9ucyA9IGZ1bmMoKSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlIHsgcmV0dXJuIG9wdHMgfQogCQl9CisJCWUuTDEuRWRpdGlvbkZlYXR1cmVzID0gbWVyZ2VFZGl0aW9uRmVhdHVyZXMocGFyZW50LCBlZC5HZXRPcHRpb25zKCkuR2V0RmVhdHVyZXMoKSkKIAkJZm9yIF8sIHMgOj0gcmFuZ2UgZWQuR2V0UmVzZXJ2ZWROYW1lKCkgewogCQkJZS5MMi5SZXNlcnZlZE5hbWVzLkxpc3QgPSBhcHBlbmQoZS5MMi5SZXNlcnZlZE5hbWVzLkxpc3QsIHByb3RvcmVmbGVjdC5OYW1lKHMpKQogCQl9CkBAIC02OCw2ICs2OSw5IEBACiAJCWlmIG0uTDAsIGVyciA9IHIubWFrZUJhc2UobSwgcGFyZW50LCBtZC5HZXROYW1lKCksIGksIHNiKTsgZXJyICE9IG5pbCB7CiAJCQlyZXR1cm4gbmlsLCBlcnIKIAkJfQorCQlpZiBtLkJhc2UuTDAuUGFyZW50RmlsZS5TeW50YXgoKSA9PSBwcm90b3JlZmxlY3QuRWRpdGlvbnMgeworCQkJbS5MMS5FZGl0aW9uRmVhdHVyZXMgPSBtZXJnZUVkaXRpb25GZWF0dXJlcyhwYXJlbnQsIG1kLkdldE9wdGlvbnMoKS5HZXRGZWF0dXJlcygpKQorCQl9CiAJCWlmIG9wdHMgOj0gbWQuR2V0T3B0aW9ucygpOyBvcHRzICE9IG5pbCB7CiAJCQlvcHRzID0gcHJvdG8uQ2xvbmUob3B0cykuKCpkZXNjcmlwdG9ycGIuTWVzc2FnZU9wdGlvbnMpCiAJCQltLkwyLk9wdGlvbnMgPSBmdW5jKCkgcHJvdG9yZWZsZWN0LlByb3RvTWVzc2FnZSB7IHJldHVybiBvcHRzIH0KQEAgLTExNCw2ICsxMTgsMjcgQEAKIAlyZXR1cm4gbXMsIG5pbAogfQogCisvLyBjYW5CZVBhY2tlZCByZXR1cm5zIHdoZXRoZXIgdGhlIGZpZWxkIGNhbiB1c2UgcGFja2VkIGVuY29kaW5nOgorLy8gaHR0cHM6Ly9wcm90b2J1Zi5kZXYvcHJvZ3JhbW1pbmctZ3VpZGVzL2VuY29kaW5nLyNwYWNrZWQKK2Z1bmMgY2FuQmVQYWNrZWQoZmQgKmRlc2NyaXB0b3JwYi5GaWVsZERlc2NyaXB0b3JQcm90bykgYm9vbCB7CisJaWYgZmQuR2V0TGFiZWwoKSAhPSBkZXNjcmlwdG9ycGIuRmllbGREZXNjcmlwdG9yUHJvdG9fTEFCRUxfUkVQRUFURUQgeworCQlyZXR1cm4gZmFsc2UgLy8gbm90IGEgcmVwZWF0ZWQgZmllbGQKKwl9CisKKwlzd2l0Y2ggcHJvdG9yZWZsZWN0LktpbmQoZmQuR2V0VHlwZSgpKSB7CisJY2FzZSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQsIHByb3RvcmVmbGVjdC5Hcm91cEtpbmQ6CisJCXJldHVybiBmYWxzZSAvLyBub3QgYSBzY2FsYXIgdHlwZSBmaWVsZAorCisJY2FzZSBwcm90b3JlZmxlY3QuU3RyaW5nS2luZCwgcHJvdG9yZWZsZWN0LkJ5dGVzS2luZDoKKwkJLy8gc3RyaW5nIGFuZCBieXRlcyBjYW4gZXhwbGljaXRseSBub3QgYmUgZGVjbGFyZWQgYXMgcGFja2VkLAorCQkvLyBzZWUgaHR0cHM6Ly9wcm90b2J1Zi5kZXYvcHJvZ3JhbW1pbmctZ3VpZGVzL2VuY29kaW5nLyNwYWNrZWQKKwkJcmV0dXJuIGZhbHNlCisKKwlkZWZhdWx0OgorCQlyZXR1cm4gdHJ1ZQorCX0KK30KKwogZnVuYyAociBkZXNjc0J5TmFtZSkgaW5pdEZpZWxkc0Zyb21EZXNjcmlwdG9yUHJvdG8oZmRzIFtdKmRlc2NyaXB0b3JwYi5GaWVsZERlc2NyaXB0b3JQcm90bywgcGFyZW50IHByb3RvcmVmbGVjdC5EZXNjcmlwdG9yLCBzYiAqc3Rycy5CdWlsZGVyKSAoZnMgW11maWxlZGVzYy5GaWVsZCwgZXJyIGVycm9yKSB7CiAJZnMgPSBtYWtlKFtdZmlsZWRlc2MuRmllbGQsIGxlbihmZHMpKSAvLyBhbGxvY2F0ZSB1cC1mcm9udCB0byBlbnN1cmUgc3RhYmxlIHBvaW50ZXJzCiAJZm9yIGksIGZkIDo9IHJhbmdlIGZkcyB7CkBAIC0xMzcsNiArMTYyLDM0IEBACiAJCWlmIGZkLkpzb25OYW1lICE9IG5pbCB7CiAJCQlmLkwxLlN0cmluZ05hbWUuSW5pdEpTT04oZmQuR2V0SnNvbk5hbWUoKSkKIAkJfQorCisJCWlmIGYuQmFzZS5MMC5QYXJlbnRGaWxlLlN5bnRheCgpID09IHByb3RvcmVmbGVjdC5FZGl0aW9ucyB7CisJCQlmLkwxLkVkaXRpb25GZWF0dXJlcyA9IG1lcmdlRWRpdGlvbkZlYXR1cmVzKHBhcmVudCwgZmQuR2V0T3B0aW9ucygpLkdldEZlYXR1cmVzKCkpCisKKwkJCWlmIGYuTDEuRWRpdGlvbkZlYXR1cmVzLklzTGVnYWN5UmVxdWlyZWQgeworCQkJCWYuTDEuQ2FyZGluYWxpdHkgPSBwcm90b3JlZmxlY3QuUmVxdWlyZWQKKwkJCX0KKwkJCS8vIFdlIHJldXNlIHRoZSBleGlzdGluZyBmaWVsZCBiZWNhdXNlIHRoZSBvbGQgb3B0aW9uIGBbcGFja2VkID0KKwkJCS8vIHRydWVdYCBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCB0aGUgZWRpdGlvbnMgZmVhdHVyZS4KKwkJCWlmIGNhbkJlUGFja2VkKGZkKSB7CisJCQkJZi5MMS5IYXNQYWNrZWQgPSB0cnVlCisJCQkJZi5MMS5Jc1BhY2tlZCA9IGYuTDEuRWRpdGlvbkZlYXR1cmVzLklzUGFja2VkCisJCQl9CisKKwkJCS8vIFdlIHByZXRlbmQgdGhpcyBvcHRpb24gaXMgYWx3YXlzIGV4cGxpY2l0bHkgc2V0IGJlY2F1c2UgdGhlIG9ubHkKKwkJCS8vIHVzZSBvZiBIYXNFbmZvcmNlVVRGOCBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0byB1c2UgRW5mb3JjZVVURjgKKwkJCS8vIG9yIHRvIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgZGVmYXVsdC4KKwkJCS8vIFdoZW4gdXNpbmcgZWRpdGlvbnMgd2UgZWl0aGVyIHBhcnNlIHRoZSBvcHRpb24gb3IgcmVzb2x2ZSB0aGUKKwkJCS8vIGFwcHJvcHJpYXRlIGRlZmF1bHQgaGVyZSAoaW5zdGVhZCBvZiBsYXRlciB3aGVuIHRoaXMgb3B0aW9uIGlzCisJCQkvLyByZXF1ZXN0ZWQgZnJvbSB0aGUgZGVzY3JpcHRvcikuCisJCQkvLyBJbiBwcm90bzIvcHJvdG8zIHN5bnRheCBIYXNFbmZvcmNlVVRGOCBtaWdodCBiZSBmYWxzZS4KKwkJCWYuTDEuSGFzRW5mb3JjZVVURjggPSB0cnVlCisJCQlmLkwxLkVuZm9yY2VVVEY4ID0gZi5MMS5FZGl0aW9uRmVhdHVyZXMuSXNVVEY4VmFsaWRhdGVkCisKKwkJCWlmIGYuTDEuS2luZCA9PSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQgJiYgZi5MMS5FZGl0aW9uRmVhdHVyZXMuSXNEZWxpbWl0ZWRFbmNvZGVkIHsKKwkJCQlmLkwxLktpbmQgPSBwcm90b3JlZmxlY3QuR3JvdXBLaW5kCisJCQl9CisJCX0KIAl9CiAJcmV0dXJuIGZzLCBuaWwKIH0KQEAgLTE1MSw2ICsyMDQsOSBAQAogCQlpZiBvcHRzIDo9IG9kLkdldE9wdGlvbnMoKTsgb3B0cyAhPSBuaWwgewogCQkJb3B0cyA9IHByb3RvLkNsb25lKG9wdHMpLigqZGVzY3JpcHRvcnBiLk9uZW9mT3B0aW9ucykKIAkJCW8uTDEuT3B0aW9ucyA9IGZ1bmMoKSBwcm90b3JlZmxlY3QuUHJvdG9NZXNzYWdlIHsgcmV0dXJuIG9wdHMgfQorCQkJaWYgcGFyZW50LlN5bnRheCgpID09IHByb3RvcmVmbGVjdC5FZGl0aW9ucyB7CisJCQkJby5MMS5FZGl0aW9uRmVhdHVyZXMgPSBtZXJnZUVkaXRpb25GZWF0dXJlcyhwYXJlbnQsIG9wdHMuR2V0RmVhdHVyZXMoKSkKKwkJCX0KIAkJfQogCX0KIAlyZXR1cm4gb3MsIG5pbApkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9kZXNjL2Rlc2NfcmVzb2x2ZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvZGVzYy9kZXNjX3Jlc29sdmUuZ28KaW5kZXggY2ViYjM2Yy4uMjU0Y2E1OCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9kZXNjL2Rlc2NfcmVzb2x2ZS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b2Rlc2MvZGVzY19yZXNvbHZlLmdvCkBAIC0xNTUsOSArMTU1LDkgQEAKIC8vCiAvLyBTdXBwb3NlIHRoZSBzY29wZSB3YXMgImZpenouYnV6eiIgYW5kIHRoZSByZWZlcmVuY2Ugd2FzICJGb28uQmFyIiwKIC8vIHRoZW4gdGhlIGZvbGxvd2luZyBmdWxsIG5hbWVzIGFyZSBzZWFyY2hlZDoKLS8vCSogZml6ei5idXp6LkZvby5CYXIKLS8vCSogZml6ei5Gb28uQmFyCi0vLwkqIEZvby5CYXIKKy8vICAgLSBmaXp6LmJ1enouRm9vLkJhcgorLy8gICAtIGZpenouRm9vLkJhcgorLy8gICAtIEZvby5CYXIKIGZ1bmMgKHIgKnJlc29sdmVyKSBmaW5kRGVzY3JpcHRvcihzY29wZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUsIHJlZiBwYXJ0aWFsTmFtZSkgKHByb3RvcmVmbGVjdC5EZXNjcmlwdG9yLCBlcnJvcikgewogCWlmICFyZWYuSXNWYWxpZCgpIHsKIAkJcmV0dXJuIG5pbCwgZXJyb3JzLk5ldygiaW52YWxpZCBuYW1lIHJlZmVyZW5jZTogJXEiLCByZWYpCkBAIC0yNzYsOCArMjc2LDggQEAKIAl9IGVsc2UgaWYgZXJyICE9IG5pbCB7CiAJCXJldHVybiB2LCBldiwgZXJyCiAJfQotCWlmIGZkLlN5bnRheCgpID09IHByb3RvcmVmbGVjdC5Qcm90bzMgewotCQlyZXR1cm4gdiwgZXYsIGVycm9ycy5OZXcoImNhbm5vdCBiZSBzcGVjaWZpZWQgdW5kZXIgcHJvdG8zIHNlbWFudGljcyIpCisJaWYgIWZkLkhhc1ByZXNlbmNlKCkgeworCQlyZXR1cm4gdiwgZXYsIGVycm9ycy5OZXcoImNhbm5vdCBiZSBzcGVjaWZpZWQgd2l0aCBpbXBsaWNpdCBmaWVsZCBwcmVzZW5jZSIpCiAJfQogCWlmIGZkLktpbmQoKSA9PSBwcm90b3JlZmxlY3QuTWVzc2FnZUtpbmQgfHwgZmQuS2luZCgpID09IHByb3RvcmVmbGVjdC5Hcm91cEtpbmQgfHwgZmQuQ2FyZGluYWxpdHkoKSA9PSBwcm90b3JlZmxlY3QuUmVwZWF0ZWQgewogCQlyZXR1cm4gdiwgZXYsIGVycm9ycy5OZXcoImNhbm5vdCBiZSBzcGVjaWZpZWQgb24gY29tcG9zaXRlIHR5cGVzIikKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvZGVzYy9kZXNjX3ZhbGlkYXRlLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9kZXNjL2Rlc2NfdmFsaWRhdGUuZ28KaW5kZXggOWFmMWQ1Ni4uZTRkY2FmOCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9kZXNjL2Rlc2NfdmFsaWRhdGUuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9kZXNjL2Rlc2NfdmFsaWRhdGUuZ28KQEAgLTEwNyw3ICsxMDcsNyBAQAogCQlpZiBpc01lc3NhZ2VTZXQgJiYgIWZsYWdzLlByb3RvTGVnYWN5IHsKIAkJCXJldHVybiBlcnJvcnMuTmV3KCJtZXNzYWdlICVxIGlzIGEgTWVzc2FnZVNldCwgd2hpY2ggaXMgYSBsZWdhY3kgcHJvdG8xIGZlYXR1cmUgdGhhdCBpcyBubyBsb25nZXIgc3VwcG9ydGVkIiwgbS5GdWxsTmFtZSgpKQogCQl9Ci0JCWlmIGlzTWVzc2FnZVNldCAmJiAobS5TeW50YXgoKSAhPSBwcm90b3JlZmxlY3QuUHJvdG8yIHx8IG0uRmllbGRzKCkuTGVuKCkgPiAwIHx8IG0uRXh0ZW5zaW9uUmFuZ2VzKCkuTGVuKCkgPT0gMCkgeworCQlpZiBpc01lc3NhZ2VTZXQgJiYgKG0uU3ludGF4KCkgPT0gcHJvdG9yZWZsZWN0LlByb3RvMyB8fCBtLkZpZWxkcygpLkxlbigpID4gMCB8fCBtLkV4dGVuc2lvblJhbmdlcygpLkxlbigpID09IDApIHsKIAkJCXJldHVybiBlcnJvcnMuTmV3KCJtZXNzYWdlICVxIGlzIGFuIGludmFsaWQgcHJvdG8xIE1lc3NhZ2VTZXQiLCBtLkZ1bGxOYW1lKCkpCiAJCX0KIAkJaWYgbS5TeW50YXgoKSA9PSBwcm90b3JlZmxlY3QuUHJvdG8zIHsKQEAgLTMxNCw4ICszMTQsOCBAQAogCXN3aXRjaCB7CiAJY2FzZSBmZC5LaW5kKCkgIT0gcHJvdG9yZWZsZWN0Lkdyb3VwS2luZDoKIAkJcmV0dXJuIG5pbAotCWNhc2UgZmQuU3ludGF4KCkgIT0gcHJvdG9yZWZsZWN0LlByb3RvMjoKLQkJcmV0dXJuIGVycm9ycy5OZXcoImludmFsaWQgdW5kZXIgcHJvdG8yIHNlbWFudGljcyIpCisJY2FzZSBmZC5TeW50YXgoKSA9PSBwcm90b3JlZmxlY3QuUHJvdG8zOgorCQlyZXR1cm4gZXJyb3JzLk5ldygiaW52YWxpZCB1bmRlciBwcm90bzMgc2VtYW50aWNzIikKIAljYXNlIG1kID09IG5pbCB8fCBtZC5Jc1BsYWNlaG9sZGVyKCk6CiAJCXJldHVybiBlcnJvcnMuTmV3KCJtZXNzYWdlIG11c3QgYmUgcmVzb2x2YWJsZSIpCiAJY2FzZSBmZC5GdWxsTmFtZSgpLlBhcmVudCgpICE9IG1kLkZ1bGxOYW1lKCkuUGFyZW50KCk6CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b2Rlc2MvZWRpdGlvbnMuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b2Rlc2MvZWRpdGlvbnMuZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2YjI5ZAotLS0gL2Rldi9udWxsCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvZGVzYy9lZGl0aW9ucy5nbwpAQCAtMCwwICsxLDE0OCBAQAorLy8gQ29weXJpZ2h0IDIwMTkgVGhlIEdvIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQorLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCitwYWNrYWdlIHByb3RvZGVzYworCitpbXBvcnQgKAorCSJmbXQiCisJIm9zIgorCSJzeW5jIgorCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2VkaXRpb25kZWZhdWx0cyIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MiCisJImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvIgorCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBiIgorCWdvZmVhdHVyZXNwYiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZ29mZWF0dXJlc3BiIgorKQorCitjb25zdCAoCisJU3VwcG9ydGVkRWRpdGlvbnNNaW5pbXVtID0gZGVzY3JpcHRvcnBiLkVkaXRpb25fRURJVElPTl9QUk9UTzIKKwlTdXBwb3J0ZWRFZGl0aW9uc01heGltdW0gPSBkZXNjcmlwdG9ycGIuRWRpdGlvbl9FRElUSU9OXzIwMjMKKykKKwordmFyIGRlZmF1bHRzID0gJmRlc2NyaXB0b3JwYi5GZWF0dXJlU2V0RGVmYXVsdHN7fQordmFyIGRlZmF1bHRzQ2FjaGVNdSBzeW5jLk11dGV4Cit2YXIgZGVmYXVsdHNDYWNoZSA9IG1ha2UobWFwW2ZpbGVkZXNjLkVkaXRpb25dKmRlc2NyaXB0b3JwYi5GZWF0dXJlU2V0KQorCitmdW5jIGluaXQoKSB7CisJZXJyIDo9IHByb3RvLlVubWFyc2hhbChlZGl0aW9uZGVmYXVsdHMuRGVmYXVsdHMsIGRlZmF1bHRzKQorCWlmIGVyciAhPSBuaWwgeworCQlmbXQuRnByaW50Zihvcy5TdGRlcnIsICJ1bm1hcnNoYWwgZWRpdGlvbnMgZGVmYXVsdHM6ICV2XG4iLCBlcnIpCisJCW9zLkV4aXQoMSkKKwl9Cit9CisKK2Z1bmMgZnJvbUVkaXRpb25Qcm90byhlcGIgZGVzY3JpcHRvcnBiLkVkaXRpb24pIGZpbGVkZXNjLkVkaXRpb24geworCXJldHVybiBmaWxlZGVzYy5FZGl0aW9uKGVwYikKK30KKworZnVuYyB0b0VkaXRpb25Qcm90byhlZCBmaWxlZGVzYy5FZGl0aW9uKSBkZXNjcmlwdG9ycGIuRWRpdGlvbiB7CisJc3dpdGNoIGVkIHsKKwljYXNlIGZpbGVkZXNjLkVkaXRpb25Vbmtub3duOgorCQlyZXR1cm4gZGVzY3JpcHRvcnBiLkVkaXRpb25fRURJVElPTl9VTktOT1dOCisJY2FzZSBmaWxlZGVzYy5FZGl0aW9uUHJvdG8yOgorCQlyZXR1cm4gZGVzY3JpcHRvcnBiLkVkaXRpb25fRURJVElPTl9QUk9UTzIKKwljYXNlIGZpbGVkZXNjLkVkaXRpb25Qcm90bzM6CisJCXJldHVybiBkZXNjcmlwdG9ycGIuRWRpdGlvbl9FRElUSU9OX1BST1RPMworCWNhc2UgZmlsZWRlc2MuRWRpdGlvbjIwMjM6CisJCXJldHVybiBkZXNjcmlwdG9ycGIuRWRpdGlvbl9FRElUSU9OXzIwMjMKKwlkZWZhdWx0OgorCQlwYW5pYyhmbXQuU3ByaW50ZigidW5rbm93biB2YWx1ZSBmb3IgZWRpdGlvbjogJXYiLCBlZCkpCisJfQorfQorCitmdW5jIGdldEZlYXR1cmVTZXRGb3IoZWQgZmlsZWRlc2MuRWRpdGlvbikgKmRlc2NyaXB0b3JwYi5GZWF0dXJlU2V0IHsKKwlkZWZhdWx0c0NhY2hlTXUuTG9jaygpCisJZGVmZXIgZGVmYXVsdHNDYWNoZU11LlVubG9jaygpCisJaWYgZGVmLCBvayA6PSBkZWZhdWx0c0NhY2hlW2VkXTsgb2sgeworCQlyZXR1cm4gZGVmCisJfQorCWVkcGIgOj0gdG9FZGl0aW9uUHJvdG8oZWQpCisJaWYgZGVmYXVsdHMuR2V0TWluaW11bUVkaXRpb24oKSA+IGVkcGIgfHwgZGVmYXVsdHMuR2V0TWF4aW11bUVkaXRpb24oKSA8IGVkcGIgeworCQkvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gcHJvdG9kZXNjLihGaWxlT3B0aW9ucykuTmV3IHdvdWxkIGZhaWwgd2hlbgorCQkvLyBpbml0aWFsaXppbmcgdGhlIGZpbGUgZGVzY3JpcHRvci4KKwkJLy8gVGhpcyBtb3N0IGxpa2VseSBtZWFucyB0aGUgZW1iZWRkZWQgZGVmYXVsdHMgd2VyZSBub3QgdXBkYXRlZC4KKwkJZm10LkZwcmludGYob3MuU3RkZXJyLCAiaW50ZXJuYWwgZXJyb3I6IHVuc3VwcG9ydGVkIGVkaXRpb24gJXYgKGRpZCB5b3UgZm9yZ2V0IHRvIHVwZGF0ZSB0aGUgZW1iZWRkZWQgZGVmYXVsdHMgKGkuZS4gdGhlIGJvb3RzdHJhcCBkZXNjcmlwdG9yIHByb3RvKT8pXG4iLCBlZHBiKQorCQlvcy5FeGl0KDEpCisJfQorCWZzIDo9IGRlZmF1bHRzLkdldERlZmF1bHRzKClbMF0uR2V0RmVhdHVyZXMoKQorCS8vIFVzaW5nIGEgbGluZWFyIHNlYXJjaCBmb3Igbm93LgorCS8vIEVkaXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlIHNvcnRlZCBhbmQgdGh1cyB3ZSBjb3VsZCB1c2UgYSBiaW5hcnkgc2VhcmNoLgorCS8vIEdpdmVuIHRoYXQgdGhlcmUgYXJlIG9ubHkgYSBoYW5kZnVsIG9mIGVkaXRpb25zICh3aXRoIG9uZSBtb3JlIHBlciB5ZWFyKQorCS8vIHRoZXJlIGlzIG5vdCBtdWNoIHJlYXNvbiB0byB1c2UgYSBiaW5hcnkgc2VhcmNoLgorCWZvciBfLCBkZWYgOj0gcmFuZ2UgZGVmYXVsdHMuR2V0RGVmYXVsdHMoKSB7CisJCWlmIGRlZi5HZXRFZGl0aW9uKCkgPD0gZWRwYiB7CisJCQlmcyA9IGRlZi5HZXRGZWF0dXJlcygpCisJCX0gZWxzZSB7CisJCQlicmVhaworCQl9CisJfQorCWRlZmF1bHRzQ2FjaGVbZWRdID0gZnMKKwlyZXR1cm4gZnMKK30KKworLy8gbWVyZ2VFZGl0aW9uRmVhdHVyZXMgbWVyZ2VzIHRoZSBwYXJlbnQgYW5kIGNoaWxkIGZlYXR1cmUgc2V0cy4gVGhpcyBmdW5jdGlvbgorLy8gc2hvdWxkIGJlIHVzZWQgd2hlbiBpbml0aWFsaXppbmcgR28gZGVzY3JpcHRvcnMgZnJvbSBkZXNjcmlwdG9yIHByb3RvcyB3aGljaAorLy8gaXMgd2h5IHRoZSBwYXJlbnQgaXMgYSBmaWxlZGVzYy5FZGl0aW9uc0ZlYXR1cmVzIChHbyByZXByZXNlbnRhdGlvbikgd2hpbGUKKy8vIHRoZSBjaGlsZCBpcyBhIGRlc2NyaXB0b3Jwcm90by5GZWF0dXJlU2V0IChwcm90b2MgcmVwcmVzZW50YXRpb24pLgorLy8gQW55IGZlYXR1cmUgc2V0IGJ5IHRoZSBjaGlsZCBvdmVyd3JpdGVzIHdoYXQgaXMgc2V0IGJ5IHRoZSBwYXJlbnQuCitmdW5jIG1lcmdlRWRpdGlvbkZlYXR1cmVzKHBhcmVudERlc2MgcHJvdG9yZWZsZWN0LkRlc2NyaXB0b3IsIGNoaWxkICpkZXNjcmlwdG9ycGIuRmVhdHVyZVNldCkgZmlsZWRlc2MuRWRpdGlvbkZlYXR1cmVzIHsKKwl2YXIgcGFyZW50RlMgZmlsZWRlc2MuRWRpdGlvbkZlYXR1cmVzCisJc3dpdGNoIHAgOj0gcGFyZW50RGVzYy4odHlwZSkgeworCWNhc2UgKmZpbGVkZXNjLkZpbGU6CisJCXBhcmVudEZTID0gcC5MMS5FZGl0aW9uRmVhdHVyZXMKKwljYXNlICpmaWxlZGVzYy5NZXNzYWdlOgorCQlwYXJlbnRGUyA9IHAuTDEuRWRpdGlvbkZlYXR1cmVzCisJZGVmYXVsdDoKKwkJcGFuaWMoZm10LlNwcmludGYoInVua25vd24gcGFyZW50IHR5cGUgJVQiLCBwYXJlbnREZXNjKSkKKwl9CisJaWYgY2hpbGQgPT0gbmlsIHsKKwkJcmV0dXJuIHBhcmVudEZTCisJfQorCWlmIGZwIDo9IGNoaWxkLkZpZWxkUHJlc2VuY2U7IGZwICE9IG5pbCB7CisJCXBhcmVudEZTLklzRmllbGRQcmVzZW5jZSA9ICpmcCA9PSBkZXNjcmlwdG9ycGIuRmVhdHVyZVNldF9MRUdBQ1lfUkVRVUlSRUQgfHwKKwkJCSpmcCA9PSBkZXNjcmlwdG9ycGIuRmVhdHVyZVNldF9FWFBMSUNJVAorCQlwYXJlbnRGUy5Jc0xlZ2FjeVJlcXVpcmVkID0gKmZwID09IGRlc2NyaXB0b3JwYi5GZWF0dXJlU2V0X0xFR0FDWV9SRVFVSVJFRAorCX0KKwlpZiBldCA6PSBjaGlsZC5FbnVtVHlwZTsgZXQgIT0gbmlsIHsKKwkJcGFyZW50RlMuSXNPcGVuRW51bSA9ICpldCA9PSBkZXNjcmlwdG9ycGIuRmVhdHVyZVNldF9PUEVOCisJfQorCisJaWYgcmZlIDo9IGNoaWxkLlJlcGVhdGVkRmllbGRFbmNvZGluZzsgcmZlICE9IG5pbCB7CisJCXBhcmVudEZTLklzUGFja2VkID0gKnJmZSA9PSBkZXNjcmlwdG9ycGIuRmVhdHVyZVNldF9QQUNLRUQKKwl9CisKKwlpZiB1dGY4dmFsIDo9IGNoaWxkLlV0ZjhWYWxpZGF0aW9uOyB1dGY4dmFsICE9IG5pbCB7CisJCXBhcmVudEZTLklzVVRGOFZhbGlkYXRlZCA9ICp1dGY4dmFsID09IGRlc2NyaXB0b3JwYi5GZWF0dXJlU2V0X1ZFUklGWQorCX0KKworCWlmIG1lIDo9IGNoaWxkLk1lc3NhZ2VFbmNvZGluZzsgbWUgIT0gbmlsIHsKKwkJcGFyZW50RlMuSXNEZWxpbWl0ZWRFbmNvZGVkID0gKm1lID09IGRlc2NyaXB0b3JwYi5GZWF0dXJlU2V0X0RFTElNSVRFRAorCX0KKworCWlmIGpmIDo9IGNoaWxkLkpzb25Gb3JtYXQ7IGpmICE9IG5pbCB7CisJCXBhcmVudEZTLklzSlNPTkNvbXBsaWFudCA9ICpqZiA9PSBkZXNjcmlwdG9ycGIuRmVhdHVyZVNldF9BTExPVworCX0KKworCWlmIGdvRmVhdHVyZXMsIG9rIDo9IHByb3RvLkdldEV4dGVuc2lvbihjaGlsZCwgZ29mZWF0dXJlc3BiLkVfR28pLigqZ29mZWF0dXJlc3BiLkdvRmVhdHVyZXMpOyBvayAmJiBnb0ZlYXR1cmVzICE9IG5pbCB7CisJCWlmIGx1amUgOj0gZ29GZWF0dXJlcy5MZWdhY3lVbm1hcnNoYWxKc29uRW51bTsgbHVqZSAhPSBuaWwgeworCQkJcGFyZW50RlMuR2VuZXJhdGVMZWdhY3lVbm1hcnNoYWxKU09OID0gKmx1amUKKwkJfQorCX0KKworCXJldHVybiBwYXJlbnRGUworfQorCisvLyBpbml0RmlsZURlc2NGcm9tRmVhdHVyZVNldCBpbml0aWFsaXplcyBlZGl0aW9ucyByZWxhdGVkIGZpZWxkcyBpbiBmZCBiYXNlZAorLy8gb24gZnMuIElmIGZzIGlzIG5pbCBpdCBpcyBhc3N1bWVkIHRvIGJlIGFuIGVtcHR5IGZlYXR1cmVzZXQgYW5kIGFsbCBmaWVsZHMKKy8vIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZGVmYXVsdC4gZmQuTDEuRWRpdGlvbiBtdXN0IGJlIHNldAorLy8gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KK2Z1bmMgaW5pdEZpbGVEZXNjRnJvbUZlYXR1cmVTZXQoZmQgKmZpbGVkZXNjLkZpbGUsIGZzICpkZXNjcmlwdG9ycGIuRmVhdHVyZVNldCkgeworCWRmcyA6PSBnZXRGZWF0dXJlU2V0Rm9yKGZkLkwxLkVkaXRpb24pCisJLy8gaW5pdGlhbGl6ZSB0aGUgZmVhdHVyZXNldCB3aXRoIHRoZSBkZWZhdWx0cworCWZkLkwxLkVkaXRpb25GZWF0dXJlcyA9IG1lcmdlRWRpdGlvbkZlYXR1cmVzKGZkLCBkZnMpCisJLy8gb3ZlcndyaXRlIGFueSBvcHRpb25zIGV4cGxpY2l0bHkgc3BlY2lmaWVkCisJZmQuTDEuRWRpdGlvbkZlYXR1cmVzID0gbWVyZ2VFZGl0aW9uRmVhdHVyZXMoZmQsIGZzKQorfQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9kZXNjL3Byb3RvLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9kZXNjL3Byb3RvLmdvCmluZGV4IGE3YzVjZWYuLjlkNmUwNTQgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvZGVzYy9wcm90by5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b2Rlc2MvcHJvdG8uZ28KQEAgLTE2LDcgKzE2LDcgQEAKIAkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBiIgogKQogCi0vLyBUb0ZpbGVEZXNjcmlwdG9yUHJvdG8gY29waWVzIGEgcHJvdG9yZWZsZWN0LkZpbGVEZXNjcmlwdG9yIGludG8gYQorLy8gVG9GaWxlRGVzY3JpcHRvclByb3RvIGNvcGllcyBhIFtwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3JdIGludG8gYQogLy8gZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8gbWVzc2FnZS4KIGZ1bmMgVG9GaWxlRGVzY3JpcHRvclByb3RvKGZpbGUgcHJvdG9yZWZsZWN0LkZpbGVEZXNjcmlwdG9yKSAqZGVzY3JpcHRvcnBiLkZpbGVEZXNjcmlwdG9yUHJvdG8gewogCXAgOj0gJmRlc2NyaXB0b3JwYi5GaWxlRGVzY3JpcHRvclByb3RvewpAQCAtNzAsMTMgKzcwLDEzIEBACiAJZm9yIGksIGV4dHMgOj0gMCwgZmlsZS5FeHRlbnNpb25zKCk7IGkgPCBleHRzLkxlbigpOyBpKysgewogCQlwLkV4dGVuc2lvbiA9IGFwcGVuZChwLkV4dGVuc2lvbiwgVG9GaWVsZERlc2NyaXB0b3JQcm90byhleHRzLkdldChpKSkpCiAJfQotCWlmIHN5bnRheCA6PSBmaWxlLlN5bnRheCgpOyBzeW50YXggIT0gcHJvdG9yZWZsZWN0LlByb3RvMiB7CisJaWYgc3ludGF4IDo9IGZpbGUuU3ludGF4KCk7IHN5bnRheCAhPSBwcm90b3JlZmxlY3QuUHJvdG8yICYmIHN5bnRheC5Jc1ZhbGlkKCkgewogCQlwLlN5bnRheCA9IHByb3RvLlN0cmluZyhmaWxlLlN5bnRheCgpLlN0cmluZygpKQogCX0KIAlyZXR1cm4gcAogfQogCi0vLyBUb0Rlc2NyaXB0b3JQcm90byBjb3BpZXMgYSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IgaW50byBhCisvLyBUb0Rlc2NyaXB0b3JQcm90byBjb3BpZXMgYSBbcHJvdG9yZWZsZWN0Lk1lc3NhZ2VEZXNjcmlwdG9yXSBpbnRvIGEKIC8vIGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8gbWVzc2FnZS4KIGZ1bmMgVG9EZXNjcmlwdG9yUHJvdG8obWVzc2FnZSBwcm90b3JlZmxlY3QuTWVzc2FnZURlc2NyaXB0b3IpICpkZXNjcmlwdG9ycGIuRGVzY3JpcHRvclByb3RvIHsKIAlwIDo9ICZkZXNjcmlwdG9ycGIuRGVzY3JpcHRvclByb3RvewpAQCAtMTE5LDcgKzExOSw3IEBACiAJcmV0dXJuIHAKIH0KIAotLy8gVG9GaWVsZERlc2NyaXB0b3JQcm90byBjb3BpZXMgYSBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yIGludG8gYQorLy8gVG9GaWVsZERlc2NyaXB0b3JQcm90byBjb3BpZXMgYSBbcHJvdG9yZWZsZWN0LkZpZWxkRGVzY3JpcHRvcl0gaW50byBhCiAvLyBnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8gbWVzc2FnZS4KIGZ1bmMgVG9GaWVsZERlc2NyaXB0b3JQcm90byhmaWVsZCBwcm90b3JlZmxlY3QuRmllbGREZXNjcmlwdG9yKSAqZGVzY3JpcHRvcnBiLkZpZWxkRGVzY3JpcHRvclByb3RvIHsKIAlwIDo9ICZkZXNjcmlwdG9ycGIuRmllbGREZXNjcmlwdG9yUHJvdG97CkBAIC0xNjgsNyArMTY4LDcgQEAKIAlyZXR1cm4gcAogfQogCi0vLyBUb09uZW9mRGVzY3JpcHRvclByb3RvIGNvcGllcyBhIHByb3RvcmVmbGVjdC5PbmVvZkRlc2NyaXB0b3IgaW50byBhCisvLyBUb09uZW9mRGVzY3JpcHRvclByb3RvIGNvcGllcyBhIFtwcm90b3JlZmxlY3QuT25lb2ZEZXNjcmlwdG9yXSBpbnRvIGEKIC8vIGdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90byBtZXNzYWdlLgogZnVuYyBUb09uZW9mRGVzY3JpcHRvclByb3RvKG9uZW9mIHByb3RvcmVmbGVjdC5PbmVvZkRlc2NyaXB0b3IpICpkZXNjcmlwdG9ycGIuT25lb2ZEZXNjcmlwdG9yUHJvdG8gewogCXJldHVybiAmZGVzY3JpcHRvcnBiLk9uZW9mRGVzY3JpcHRvclByb3RvewpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJfQogfQogCi0vLyBUb0VudW1EZXNjcmlwdG9yUHJvdG8gY29waWVzIGEgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIGludG8gYQorLy8gVG9FbnVtRGVzY3JpcHRvclByb3RvIGNvcGllcyBhIFtwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3JdIGludG8gYQogLy8gZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8gbWVzc2FnZS4KIGZ1bmMgVG9FbnVtRGVzY3JpcHRvclByb3RvKGVudW0gcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yKSAqZGVzY3JpcHRvcnBiLkVudW1EZXNjcmlwdG9yUHJvdG8gewogCXAgOj0gJmRlc2NyaXB0b3JwYi5FbnVtRGVzY3JpcHRvclByb3RvewpAQCAtMjAwLDcgKzIwMCw3IEBACiAJcmV0dXJuIHAKIH0KIAotLy8gVG9FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gY29waWVzIGEgcHJvdG9yZWZsZWN0LkVudW1WYWx1ZURlc2NyaXB0b3IgaW50byBhCisvLyBUb0VudW1WYWx1ZURlc2NyaXB0b3JQcm90byBjb3BpZXMgYSBbcHJvdG9yZWZsZWN0LkVudW1WYWx1ZURlc2NyaXB0b3JdIGludG8gYQogLy8gZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90byBtZXNzYWdlLgogZnVuYyBUb0VudW1WYWx1ZURlc2NyaXB0b3JQcm90byh2YWx1ZSBwcm90b3JlZmxlY3QuRW51bVZhbHVlRGVzY3JpcHRvcikgKmRlc2NyaXB0b3JwYi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gewogCXJldHVybiAmZGVzY3JpcHRvcnBiLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b3sKQEAgLTIxMCw3ICsyMTAsNyBAQAogCX0KIH0KIAotLy8gVG9TZXJ2aWNlRGVzY3JpcHRvclByb3RvIGNvcGllcyBhIHByb3RvcmVmbGVjdC5TZXJ2aWNlRGVzY3JpcHRvciBpbnRvIGEKKy8vIFRvU2VydmljZURlc2NyaXB0b3JQcm90byBjb3BpZXMgYSBbcHJvdG9yZWZsZWN0LlNlcnZpY2VEZXNjcmlwdG9yXSBpbnRvIGEKIC8vIGdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvIG1lc3NhZ2UuCiBmdW5jIFRvU2VydmljZURlc2NyaXB0b3JQcm90byhzZXJ2aWNlIHByb3RvcmVmbGVjdC5TZXJ2aWNlRGVzY3JpcHRvcikgKmRlc2NyaXB0b3JwYi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvIHsKIAlwIDo9ICZkZXNjcmlwdG9ycGIuU2VydmljZURlc2NyaXB0b3JQcm90b3sKQEAgLTIyMyw3ICsyMjMsNyBAQAogCXJldHVybiBwCiB9CiAKLS8vIFRvTWV0aG9kRGVzY3JpcHRvclByb3RvIGNvcGllcyBhIHByb3RvcmVmbGVjdC5NZXRob2REZXNjcmlwdG9yIGludG8gYQorLy8gVG9NZXRob2REZXNjcmlwdG9yUHJvdG8gY29waWVzIGEgW3Byb3RvcmVmbGVjdC5NZXRob2REZXNjcmlwdG9yXSBpbnRvIGEKIC8vIGdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8gbWVzc2FnZS4KIGZ1bmMgVG9NZXRob2REZXNjcmlwdG9yUHJvdG8obWV0aG9kIHByb3RvcmVmbGVjdC5NZXRob2REZXNjcmlwdG9yKSAqZGVzY3JpcHRvcnBiLk1ldGhvZERlc2NyaXB0b3JQcm90byB7CiAJcCA6PSAmZGVzY3JpcHRvcnBiLk1ldGhvZERlc2NyaXB0b3JQcm90b3sKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC9tZXRob2RzLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L21ldGhvZHMuZ28KaW5kZXggNmJlNWQxNi4uZDVkNWFmNiAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L21ldGhvZHMuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L21ldGhvZHMuZ28KQEAgLTUzLDYgKzUzLDcgQEAKIAkJCUZpbmRFeHRlbnNpb25CeU5hbWUoZmllbGQgRnVsbE5hbWUpIChFeHRlbnNpb25UeXBlLCBlcnJvcikKIAkJCUZpbmRFeHRlbnNpb25CeU51bWJlcihtZXNzYWdlIEZ1bGxOYW1lLCBmaWVsZCBGaWVsZE51bWJlcikgKEV4dGVuc2lvblR5cGUsIGVycm9yKQogCQl9CisJCURlcHRoIGludAogCX0KIAl1bm1hcnNoYWxPdXRwdXQgPSBzdHJ1Y3QgewogCQlwcmFnbWEuTm9VbmtleWVkTGl0ZXJhbHMKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC9wcm90by5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC9wcm90by5nbwppbmRleCBkZDg1OTE1Li4wMGIwMWZiIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QvcHJvdG8uZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3Byb3RvLmdvCkBAIC04LDYwICs4LDU1IEBACiAvLyBkZWZpbmVkIGluIHByb3RvIHNvdXJjZSBmaWxlcyBhbmQgdmFsdWUgaW50ZXJmYWNlcyB3aGljaCBwcm92aWRlIHRoZQogLy8gYWJpbGl0eSB0byBleGFtaW5lIGFuZCBtYW5pcHVsYXRlIHRoZSBjb250ZW50cyBvZiBtZXNzYWdlcy4KIC8vCisvLyAjIFByb3RvY29sIEJ1ZmZlciBEZXNjcmlwdG9ycwogLy8KLS8vIFByb3RvY29sIEJ1ZmZlciBEZXNjcmlwdG9ycwotLy8KLS8vIFByb3RvYnVmIGRlc2NyaXB0b3JzIChlLmcuLCBFbnVtRGVzY3JpcHRvciBvciBNZXNzYWdlRGVzY3JpcHRvcikKKy8vIFByb3RvYnVmIGRlc2NyaXB0b3JzIChlLmcuLCBbRW51bURlc2NyaXB0b3JdIG9yIFtNZXNzYWdlRGVzY3JpcHRvcl0pCiAvLyBhcmUgaW1tdXRhYmxlIG9iamVjdHMgdGhhdCByZXByZXNlbnQgcHJvdG9idWYgdHlwZSBpbmZvcm1hdGlvbi4KIC8vIFRoZXkgYXJlIHdyYXBwZXJzIGFyb3VuZCB0aGUgbWVzc2FnZXMgZGVjbGFyZWQgaW4gZGVzY3JpcHRvci5wcm90by4KIC8vIFByb3RvYnVmIGRlc2NyaXB0b3JzIGFsb25lIGxhY2sgYW55IGluZm9ybWF0aW9uIHJlZ2FyZGluZyBHbyB0eXBlcy4KIC8vCi0vLyBFbnVtcyBhbmQgbWVzc2FnZXMgZ2VuZXJhdGVkIGJ5IHRoaXMgbW9kdWxlIGltcGxlbWVudCBFbnVtIGFuZCBQcm90b01lc3NhZ2UsCisvLyBFbnVtcyBhbmQgbWVzc2FnZXMgZ2VuZXJhdGVkIGJ5IHRoaXMgbW9kdWxlIGltcGxlbWVudCBbRW51bV0gYW5kIFtQcm90b01lc3NhZ2VdLAogLy8gd2hlcmUgdGhlIERlc2NyaXB0b3IgYW5kIFByb3RvUmVmbGVjdC5EZXNjcmlwdG9yIGFjY2Vzc29ycyByZXNwZWN0aXZlbHkKIC8vIHJldHVybiB0aGUgcHJvdG9idWYgZGVzY3JpcHRvciBmb3IgdGhlIHZhbHVlcy4KIC8vCiAvLyBUaGUgcHJvdG9idWYgZGVzY3JpcHRvciBpbnRlcmZhY2VzIGFyZSBub3QgbWVhbnQgdG8gYmUgaW1wbGVtZW50ZWQgYnkKIC8vIHVzZXIgY29kZSBzaW5jZSB0aGV5IG1pZ2h0IG5lZWQgdG8gYmUgZXh0ZW5kZWQgaW4gdGhlIGZ1dHVyZSB0byBzdXBwb3J0CiAvLyBhZGRpdGlvbnMgdG8gdGhlIHByb3RvYnVmIGxhbmd1YWdlLgotLy8gVGhlICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvZGVzYyIgcGFja2FnZSBjb252ZXJ0cyBiZXR3ZWVuCisvLyBUaGUgW2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9kZXNjXSBwYWNrYWdlIGNvbnZlcnRzIGJldHdlZW4KIC8vIGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8gbWVzc2FnZXMgYW5kIHByb3RvYnVmIGRlc2NyaXB0b3JzLgogLy8KKy8vICMgR28gVHlwZSBEZXNjcmlwdG9ycwogLy8KLS8vIEdvIFR5cGUgRGVzY3JpcHRvcnMKLS8vCi0vLyBBIHR5cGUgZGVzY3JpcHRvciAoZS5nLiwgRW51bVR5cGUgb3IgTWVzc2FnZVR5cGUpIGlzIGEgY29uc3RydWN0b3IgZm9yCisvLyBBIHR5cGUgZGVzY3JpcHRvciAoZS5nLiwgW0VudW1UeXBlXSBvciBbTWVzc2FnZVR5cGVdKSBpcyBhIGNvbnN0cnVjdG9yIGZvcgogLy8gYSBjb25jcmV0ZSBHbyB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUgYXNzb2NpYXRlZCBwcm90b2J1ZiBkZXNjcmlwdG9yLgogLy8gVGhlcmUgaXMgY29tbW9ubHkgYSBvbmUtdG8tb25lIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb3RvYnVmIGRlc2NyaXB0b3JzIGFuZAogLy8gR28gdHlwZSBkZXNjcmlwdG9ycywgYnV0IGl0IGNhbiBwb3RlbnRpYWxseSBiZSBhIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcC4KIC8vCi0vLyBFbnVtcyBhbmQgbWVzc2FnZXMgZ2VuZXJhdGVkIGJ5IHRoaXMgbW9kdWxlIGltcGxlbWVudCBFbnVtIGFuZCBQcm90b01lc3NhZ2UsCisvLyBFbnVtcyBhbmQgbWVzc2FnZXMgZ2VuZXJhdGVkIGJ5IHRoaXMgbW9kdWxlIGltcGxlbWVudCBbRW51bV0gYW5kIFtQcm90b01lc3NhZ2VdLAogLy8gd2hlcmUgdGhlIFR5cGUgYW5kIFByb3RvUmVmbGVjdC5UeXBlIGFjY2Vzc29ycyByZXNwZWN0aXZlbHkKIC8vIHJldHVybiB0aGUgcHJvdG9idWYgZGVzY3JpcHRvciBmb3IgdGhlIHZhbHVlcy4KIC8vCi0vLyBUaGUgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2R5bmFtaWNwYiIgcGFja2FnZSBjYW4gYmUgdXNlZCB0bworLy8gVGhlIFtnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9keW5hbWljcGJdIHBhY2thZ2UgY2FuIGJlIHVzZWQgdG8KIC8vIGNyZWF0ZSBHbyB0eXBlIGRlc2NyaXB0b3JzIGZyb20gcHJvdG9idWYgZGVzY3JpcHRvcnMuCiAvLworLy8gIyBWYWx1ZSBJbnRlcmZhY2VzCiAvLwotLy8gVmFsdWUgSW50ZXJmYWNlcwotLy8KLS8vIFRoZSBFbnVtIGFuZCBNZXNzYWdlIGludGVyZmFjZXMgcHJvdmlkZSBhIHJlZmxlY3RpdmUgdmlldyBvdmVyIGFuCisvLyBUaGUgW0VudW1dIGFuZCBbTWVzc2FnZV0gaW50ZXJmYWNlcyBwcm92aWRlIGEgcmVmbGVjdGl2ZSB2aWV3IG92ZXIgYW4KIC8vIGVudW0gb3IgbWVzc2FnZSBpbnN0YW5jZS4gRm9yIGVudW1zLCBpdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byByZXRyaWV2ZQogLy8gdGhlIGVudW0gdmFsdWUgbnVtYmVyIGZvciBhbnkgY29uY3JldGUgZW51bSB0eXBlLiBGb3IgbWVzc2FnZXMsIGl0IHByb3ZpZGVzCiAvLyB0aGUgYWJpbGl0eSB0byBhY2Nlc3Mgb3IgbWFuaXB1bGF0ZSBmaWVsZHMgb2YgdGhlIG1lc3NhZ2UuCiAvLwotLy8gVG8gY29udmVydCBhIHByb3RvLk1lc3NhZ2UgdG8gYSBwcm90b3JlZmxlY3QuTWVzc2FnZSwgdXNlIHRoZQorLy8gVG8gY29udmVydCBhIFtnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by5NZXNzYWdlXSB0byBhIFtwcm90b3JlZmxlY3QuTWVzc2FnZV0sIHVzZSB0aGUKIC8vIGZvcm1lcidzIFByb3RvUmVmbGVjdCBtZXRob2QuIFNpbmNlIHRoZSBQcm90b1JlZmxlY3QgbWV0aG9kIGlzIG5ldyB0byB0aGUKIC8vIHYyIG1lc3NhZ2UgaW50ZXJmYWNlLCBpdCBtYXkgbm90IGJlIHByZXNlbnQgb24gb2xkZXIgbWVzc2FnZSBpbXBsZW1lbnRhdGlvbnMuCi0vLyBUaGUgImdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIi5NZXNzYWdlUmVmbGVjdCBmdW5jdGlvbiBjYW4gYmUgdXNlZAorLy8gVGhlIFtnaXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90by5NZXNzYWdlUmVmbGVjdF0gZnVuY3Rpb24gY2FuIGJlIHVzZWQKIC8vIHRvIG9idGFpbiBhIHJlZmxlY3RpdmUgdmlldyBvbiBvbGRlciBtZXNzYWdlcy4KIC8vCi0vLwotLy8gUmVsYXRpb25zaGlwcworLy8gIyBSZWxhdGlvbnNoaXBzCiAvLwogLy8gVGhlIGZvbGxvd2luZyBkaWFncmFtcyBkZW1vbnN0cmF0ZSB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuCiAvLyB2YXJpb3VzIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgcGFja2FnZS4KIC8vCi0vLwogLy8JICAgICAgICAgICAgICAgICAgICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAKIC8vCSAgICAgICAgICAgICAgICAgICAgICAgViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCiAvLwkgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgTmV3KG4pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAgICAgICAgICDilIIKQEAgLTc2LDEzICs3MSwxMiBAQAogLy8JICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCiAvLwkgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgVHlwZSgpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAogLy8KLS8vIOKAoiBBbiBFbnVtVHlwZSBkZXNjcmliZXMgYSBjb25jcmV0ZSBHbyBlbnVtIHR5cGUuCisvLyDigKIgQW4gW0VudW1UeXBlXSBkZXNjcmliZXMgYSBjb25jcmV0ZSBHbyBlbnVtIHR5cGUuCiAvLyBJdCBoYXMgYW4gRW51bURlc2NyaXB0b3IgYW5kIGNhbiBjb25zdHJ1Y3QgYW4gRW51bSBpbnN0YW5jZS4KIC8vCi0vLyDigKIgQW4gRW51bURlc2NyaXB0b3IgZGVzY3JpYmVzIGFuIGFic3RyYWN0IHByb3RvYnVmIGVudW0gdHlwZS4KKy8vIOKAoiBBbiBbRW51bURlc2NyaXB0b3JdIGRlc2NyaWJlcyBhbiBhYnN0cmFjdCBwcm90b2J1ZiBlbnVtIHR5cGUuCiAvLwotLy8g4oCiIEFuIEVudW0gaXMgYSBjb25jcmV0ZSBlbnVtIGluc3RhbmNlLiBHZW5lcmF0ZWQgZW51bXMgaW1wbGVtZW50IEVudW0uCi0vLworLy8g4oCiIEFuIFtFbnVtXSBpcyBhIGNvbmNyZXRlIGVudW0gaW5zdGFuY2UuIEdlbmVyYXRlZCBlbnVtcyBpbXBsZW1lbnQgRW51bS4KIC8vCiAvLwkgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBOZXcoKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAKIC8vCSAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUggpAQCAtOTYsMTQgKzkwLDI2IEBACiAvLwkgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCiAvLwkgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFR5cGUoKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgKIC8vCi0vLyDigKIgQSBNZXNzYWdlVHlwZSBkZXNjcmliZXMgYSBjb25jcmV0ZSBHbyBtZXNzYWdlIHR5cGUuCi0vLyBJdCBoYXMgYSBNZXNzYWdlRGVzY3JpcHRvciBhbmQgY2FuIGNvbnN0cnVjdCBhIE1lc3NhZ2UgaW5zdGFuY2UuCisvLyDigKIgQSBbTWVzc2FnZVR5cGVdIGRlc2NyaWJlcyBhIGNvbmNyZXRlIEdvIG1lc3NhZ2UgdHlwZS4KKy8vIEl0IGhhcyBhIFtNZXNzYWdlRGVzY3JpcHRvcl0gYW5kIGNhbiBjb25zdHJ1Y3QgYSBbTWVzc2FnZV0gaW5zdGFuY2UuCisvLyBKdXN0IGFzIGhvdyBHbydzIFtyZWZsZWN0LlR5cGVdIGlzIGEgcmVmbGVjdGl2ZSBkZXNjcmlwdGlvbiBvZiBhIEdvIHR5cGUsCisvLyBhIFtNZXNzYWdlVHlwZV0gaXMgYSByZWZsZWN0aXZlIGRlc2NyaXB0aW9uIG9mIGEgR28gdHlwZSBmb3IgYSBwcm90b2J1ZiBtZXNzYWdlLgogLy8KLS8vIOKAoiBBIE1lc3NhZ2VEZXNjcmlwdG9yIGRlc2NyaWJlcyBhbiBhYnN0cmFjdCBwcm90b2J1ZiBtZXNzYWdlIHR5cGUuCisvLyDigKIgQSBbTWVzc2FnZURlc2NyaXB0b3JdIGRlc2NyaWJlcyBhbiBhYnN0cmFjdCBwcm90b2J1ZiBtZXNzYWdlIHR5cGUuCisvLyBJdCBoYXMgbm8gdW5kZXJzdGFuZGluZyBvZiBHbyB0eXBlcy4gSW4gb3JkZXIgdG8gY29uc3RydWN0IGEgW01lc3NhZ2VUeXBlXQorLy8gZnJvbSBqdXN0IGEgW01lc3NhZ2VEZXNjcmlwdG9yXSwgeW91IGNhbiBjb25zaWRlciBsb29raW5nIHVwIHRoZSBtZXNzYWdlIHR5cGUKKy8vIGluIHRoZSBnbG9iYWwgcmVnaXN0cnkgdXNpbmcgdGhlIEZpbmRNZXNzYWdlQnlOYW1lIG1ldGhvZCBvbgorLy8gW2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeS5HbG9iYWxUeXBlc10KKy8vIG9yIGNvbnN0cnVjdGluZyBhIGR5bmFtaWMgW01lc3NhZ2VUeXBlXSB1c2luZworLy8gW2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2R5bmFtaWNwYi5OZXdNZXNzYWdlVHlwZV0uCiAvLwotLy8g4oCiIEEgTWVzc2FnZSBpcyBhIGNvbmNyZXRlIG1lc3NhZ2UgaW5zdGFuY2UuIEdlbmVyYXRlZCBtZXNzYWdlcyBpbXBsZW1lbnQKLS8vIFByb3RvTWVzc2FnZSwgd2hpY2ggY2FuIGNvbnZlcnQgdG8vZnJvbSBhIE1lc3NhZ2UuCi0vLworLy8g4oCiIEEgW01lc3NhZ2VdIGlzIGEgcmVmbGVjdGl2ZSB2aWV3IG92ZXIgYSBjb25jcmV0ZSBtZXNzYWdlIGluc3RhbmNlLgorLy8gR2VuZXJhdGVkIG1lc3NhZ2VzIGltcGxlbWVudCBbUHJvdG9NZXNzYWdlXSwgd2hpY2ggY2FuIGNvbnZlcnQgdG8gYSBbTWVzc2FnZV0uCisvLyBKdXN0IGFzIGhvdyBHbydzIFtyZWZsZWN0LlZhbHVlXSBpcyBhIHJlZmxlY3RpdmUgdmlldyBvdmVyIGEgR28gdmFsdWUsCisvLyBhIFtNZXNzYWdlXSBpcyBhIHJlZmxlY3RpdmUgdmlldyBvdmVyIGEgY29uY3JldGUgcHJvdG9idWYgbWVzc2FnZSBpbnN0YW5jZS4KKy8vIFVzaW5nIEdvIHJlZmxlY3Rpb24gYXMgYW4gYW5hbG9neSwgdGhlIFtQcm90b01lc3NhZ2UuUHJvdG9SZWZsZWN0XSBtZXRob2QgaXMgc2ltaWxhciB0bworLy8gY2FsbGluZyBbcmVmbGVjdC5WYWx1ZU9mXSwgYW5kIHRoZSBbTWVzc2FnZS5JbnRlcmZhY2VdIG1ldGhvZCBpcyBzaW1pbGFyIHRvCisvLyBjYWxsaW5nIFtyZWZsZWN0LlZhbHVlLkludGVyZmFjZV0uCiAvLwogLy8JICAgICAg4pSM4pSA4pSAIFR5cGVEZXNjcmlwdG9yKCkg4pSA4pSA4pSQICAgIOKUjOKUgOKUgOKUgOKUgOKUgCBEZXNjcmlwdG9yKCkg4pSA4pSA4pSA4pSA4pSA4pSQCiAvLwkgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgViAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICBWCkBAIC0xMTUsMTUgKzEyMSwxNSBAQAogLy8JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKIC8vCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgCBpbXBsZW1lbnRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAogLy8KLS8vIOKAoiBBbiBFeHRlbnNpb25UeXBlIGRlc2NyaWJlcyBhIGNvbmNyZXRlIEdvIGltcGxlbWVudGF0aW9uIG9mIGFuIGV4dGVuc2lvbi4KLS8vIEl0IGhhcyBhbiBFeHRlbnNpb25UeXBlRGVzY3JpcHRvciBhbmQgY2FuIGNvbnZlcnQgdG8vZnJvbQotLy8gYWJzdHJhY3QgVmFsdWVzIGFuZCBHbyB2YWx1ZXMuCisvLyDigKIgQW4gW0V4dGVuc2lvblR5cGVdIGRlc2NyaWJlcyBhIGNvbmNyZXRlIEdvIGltcGxlbWVudGF0aW9uIG9mIGFuIGV4dGVuc2lvbi4KKy8vIEl0IGhhcyBhbiBbRXh0ZW5zaW9uVHlwZURlc2NyaXB0b3JdIGFuZCBjYW4gY29udmVydCB0by9mcm9tCisvLyBhbiBhYnN0cmFjdCBbVmFsdWVdIGFuZCBhIEdvIHZhbHVlLgogLy8KLS8vIOKAoiBBbiBFeHRlbnNpb25UeXBlRGVzY3JpcHRvciBpcyBhbiBFeHRlbnNpb25EZXNjcmlwdG9yCi0vLyB3aGljaCBhbHNvIGhhcyBhbiBFeHRlbnNpb25UeXBlLgorLy8g4oCiIEFuIFtFeHRlbnNpb25UeXBlRGVzY3JpcHRvcl0gaXMgYW4gW0V4dGVuc2lvbkRlc2NyaXB0b3JdCisvLyB3aGljaCBhbHNvIGhhcyBhbiBbRXh0ZW5zaW9uVHlwZV0uCiAvLwotLy8g4oCiIEFuIEV4dGVuc2lvbkRlc2NyaXB0b3IgZGVzY3JpYmVzIGFuIGFic3RyYWN0IHByb3RvYnVmIGV4dGVuc2lvbiBmaWVsZCBhbmQKLS8vIG1heSBub3QgYWx3YXlzIGJlIGFuIEV4dGVuc2lvblR5cGVEZXNjcmlwdG9yLgorLy8g4oCiIEFuIFtFeHRlbnNpb25EZXNjcmlwdG9yXSBkZXNjcmliZXMgYW4gYWJzdHJhY3QgcHJvdG9idWYgZXh0ZW5zaW9uIGZpZWxkIGFuZAorLy8gbWF5IG5vdCBhbHdheXMgYmUgYW4gW0V4dGVuc2lvblR5cGVEZXNjcmlwdG9yXS4KIHBhY2thZ2UgcHJvdG9yZWZsZWN0CiAKIGltcG9ydCAoCkBAIC0xMzgsNyArMTQ0LDcgQEAKIAogLy8gUHJvdG9NZXNzYWdlIGlzIHRoZSB0b3AtbGV2ZWwgaW50ZXJmYWNlIHRoYXQgYWxsIHByb3RvIG1lc3NhZ2VzIGltcGxlbWVudC4KIC8vIFRoaXMgaXMgZGVjbGFyZWQgaW4gdGhlIHByb3RvcmVmbGVjdCBwYWNrYWdlIHRvIGF2b2lkIGEgY3ljbGljIGRlcGVuZGVuY3k7Ci0vLyB1c2UgdGhlIHByb3RvLk1lc3NhZ2UgdHlwZSBpbnN0ZWFkLCB3aGljaCBhbGlhc2VzIHRoaXMgdHlwZS4KKy8vIHVzZSB0aGUgW2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvLk1lc3NhZ2VdIHR5cGUgaW5zdGVhZCwgd2hpY2ggYWxpYXNlcyB0aGlzIHR5cGUuCiB0eXBlIFByb3RvTWVzc2FnZSBpbnRlcmZhY2V7IFByb3RvUmVmbGVjdCgpIE1lc3NhZ2UgfQogCiAvLyBTeW50YXggaXMgdGhlIGxhbmd1YWdlIHZlcnNpb24gb2YgdGhlIHByb3RvIGZpbGUuCkBAIC0xNDcsOCArMTUzLDkgQEAKIHR5cGUgc3ludGF4IGludDggLy8ga2VlcCBleGFjdCB0eXBlIG9wYXF1ZSBhcyB0aGUgaW50IHR5cGUgbWF5IGNoYW5nZQogCiBjb25zdCAoCi0JUHJvdG8yIFN5bnRheCA9IDIKLQlQcm90bzMgU3ludGF4ID0gMworCVByb3RvMiAgIFN5bnRheCA9IDIKKwlQcm90bzMgICBTeW50YXggPSAzCisJRWRpdGlvbnMgU3ludGF4ID0gNAogKQogCiAvLyBJc1ZhbGlkIHJlcG9ydHMgd2hldGhlciB0aGUgc3ludGF4IGlzIHZhbGlkLgpAQCAtMTY4LDYgKzE3NSw4IEBACiAJCXJldHVybiAicHJvdG8yIgogCWNhc2UgUHJvdG8zOgogCQlyZXR1cm4gInByb3RvMyIKKwljYXNlIEVkaXRpb25zOgorCQlyZXR1cm4gImVkaXRpb25zIgogCWRlZmF1bHQ6CiAJCXJldHVybiBmbXQuU3ByaW50ZigiPHVua25vd246JWQ+IiwgcykKIAl9CkBAIC00MzIsNyArNDQxLDcgQEAKIC8vIEZ1bGxOYW1lIGlzIGEgcXVhbGlmaWVkIG5hbWUgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEgcHJvdG8gZGVjbGFyYXRpb24uCiAvLyBBIHF1YWxpZmllZCBuYW1lIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBwcm90byBwYWNrYWdlIGFsb25nIHdpdGggdGhlCiAvLyBmdWxseS1kZWNsYXJlZCBuYW1lIChpLmUuLCBuYW1lIG9mIHBhcmVudCBwcmVjZWRpbmcgdGhlIG5hbWUgb2YgdGhlIGNoaWxkKSwKLS8vIHdpdGggYSAnLicgZGVsaW1pdGVyIHBsYWNlZCBiZXR3ZWVuIGVhY2ggTmFtZS4KKy8vIHdpdGggYSAnLicgZGVsaW1pdGVyIHBsYWNlZCBiZXR3ZWVuIGVhY2ggW05hbWVdLgogLy8KIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIGRvdHMuCiB0eXBlIEZ1bGxOYW1lIHN0cmluZyAvLyBlLmcuLCAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkLktpbmQiCkBAIC00NzYsNyArNDg1LDcgQEAKIH0KIAogLy8gTmFtZSByZXR1cm5zIHRoZSBzaG9ydCBuYW1lLCB3aGljaCBpcyB0aGUgbGFzdCBpZGVudGlmaWVyIHNlZ21lbnQuCi0vLyBBIHNpbmdsZSBzZWdtZW50IEZ1bGxOYW1lIGlzIHRoZSBOYW1lIGl0c2VsZi4KKy8vIEEgc2luZ2xlIHNlZ21lbnQgRnVsbE5hbWUgaXMgdGhlIFtOYW1lXSBpdHNlbGYuCiBmdW5jIChuIEZ1bGxOYW1lKSBOYW1lKCkgTmFtZSB7CiAJaWYgaSA6PSBzdHJpbmdzLkxhc3RJbmRleEJ5dGUoc3RyaW5nKG4pLCAnLicpOyBpID49IDAgewogCQlyZXR1cm4gTmFtZShuW2krMTpdKQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3NvdXJjZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC9zb3VyY2UuZ28KaW5kZXggMTIxYmEzYS4uMGI5OTQyOCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3NvdXJjZS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3Qvc291cmNlLmdvCkBAIC04Nyw2ICs4Nyw3IEBACiAvLyBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLgogLy8KIC8vIEV4YW1wbGUgb3V0cHV0OgorLy8KIC8vCS5tZXNzYWdlX3R5cGVbNl0ubmVzdGVkX3R5cGVbMTVdLmZpZWxkWzNdCiBmdW5jIChwIFNvdXJjZVBhdGgpIFN0cmluZygpIHN0cmluZyB7CiAJYiA6PSBwLmFwcGVuZEZpbGVEZXNjcmlwdG9yUHJvdG8obmlsKQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3NvdXJjZV9nZW4uZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3Qvc291cmNlX2dlbi5nbwppbmRleCBiMDNjMTIyLi43ZGNjMmZmIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3Qvc291cmNlX2dlbi5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3Qvc291cmNlX2dlbi5nbwpAQCAtMzUsNiArMzUsOCBAQAogCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJzb3VyY2VfY29kZV9pbmZvIiwgKCpTb3VyY2VQYXRoKS5hcHBlbmRTb3VyY2VDb2RlSW5mbykKIAljYXNlIDEyOgogCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJzeW50YXgiLCBuaWwpCisJY2FzZSAxNDoKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAiZWRpdGlvbiIsIG5pbCkKIAl9CiAJcmV0dXJuIGIKIH0KQEAgLTE1OCw4ICsxNjAsNiBAQAogCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJqYXZhX2dlbmVyaWNfc2VydmljZXMiLCBuaWwpCiAJY2FzZSAxODoKIAkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAicHlfZ2VuZXJpY19zZXJ2aWNlcyIsIG5pbCkKLQljYXNlIDQyOgotCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJwaHBfZ2VuZXJpY19zZXJ2aWNlcyIsIG5pbCkKIAljYXNlIDIzOgogCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJkZXByZWNhdGVkIiwgbmlsKQogCWNhc2UgMzE6CkBAIC0xNzgsNiArMTc4LDggQEAKIAkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAicGhwX21ldGFkYXRhX25hbWVzcGFjZSIsIG5pbCkKIAljYXNlIDQ1OgogCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJydWJ5X3BhY2thZ2UiLCBuaWwpCisJY2FzZSA1MDoKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAiZmVhdHVyZXMiLCAoKlNvdXJjZVBhdGgpLmFwcGVuZEZlYXR1cmVTZXQpCiAJY2FzZSA5OTk6CiAJCWIgPSBwLmFwcGVuZFJlcGVhdGVkRmllbGQoYiwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiwgKCpTb3VyY2VQYXRoKS5hcHBlbmRVbmludGVycHJldGVkT3B0aW9uKQogCX0KQEAgLTIzNiw2ICsyMzgsMTAgQEAKIAkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAiZGVwcmVjYXRlZCIsIG5pbCkKIAljYXNlIDc6CiAJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgIm1hcF9lbnRyeSIsIG5pbCkKKwljYXNlIDExOgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJkZXByZWNhdGVkX2xlZ2FjeV9qc29uX2ZpZWxkX2NvbmZsaWN0cyIsIG5pbCkKKwljYXNlIDEyOgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJmZWF0dXJlcyIsICgqU291cmNlUGF0aCkuYXBwZW5kRmVhdHVyZVNldCkKIAljYXNlIDk5OToKIAkJYiA9IHAuYXBwZW5kUmVwZWF0ZWRGaWVsZChiLCAidW5pbnRlcnByZXRlZF9vcHRpb24iLCAoKlNvdXJjZVBhdGgpLmFwcGVuZFVuaW50ZXJwcmV0ZWRPcHRpb24pCiAJfQpAQCAtMjc5LDYgKzI4NSwxMCBAQAogCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJhbGxvd19hbGlhcyIsIG5pbCkKIAljYXNlIDM6CiAJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgImRlcHJlY2F0ZWQiLCBuaWwpCisJY2FzZSA2OgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJkZXByZWNhdGVkX2xlZ2FjeV9qc29uX2ZpZWxkX2NvbmZsaWN0cyIsIG5pbCkKKwljYXNlIDc6CisJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgImZlYXR1cmVzIiwgKCpTb3VyY2VQYXRoKS5hcHBlbmRGZWF0dXJlU2V0KQogCWNhc2UgOTk5OgogCQliID0gcC5hcHBlbmRSZXBlYXRlZEZpZWxkKGIsICJ1bmludGVycHJldGVkX29wdGlvbiIsICgqU291cmNlUGF0aCkuYXBwZW5kVW5pbnRlcnByZXRlZE9wdGlvbikKIAl9CkBAIC0zMjQsNiArMzM0LDggQEAKIAkJcmV0dXJuIGIKIAl9CiAJc3dpdGNoICgqcClbMF0geworCWNhc2UgMzQ6CisJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgImZlYXR1cmVzIiwgKCpTb3VyY2VQYXRoKS5hcHBlbmRGZWF0dXJlU2V0KQogCWNhc2UgMzM6CiAJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgImRlcHJlY2F0ZWQiLCBuaWwpCiAJY2FzZSA5OTk6CkBAIC0zNDUsMTYgKzM1Nyw0OSBAQAogCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJqc3R5cGUiLCBuaWwpCiAJY2FzZSA1OgogCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJsYXp5IiwgbmlsKQorCWNhc2UgMTU6CisJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgInVudmVyaWZpZWRfbGF6eSIsIG5pbCkKIAljYXNlIDM6CiAJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgImRlcHJlY2F0ZWQiLCBuaWwpCiAJY2FzZSAxMDoKIAkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAid2VhayIsIG5pbCkKKwljYXNlIDE2OgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJkZWJ1Z19yZWRhY3QiLCBuaWwpCisJY2FzZSAxNzoKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAicmV0ZW50aW9uIiwgbmlsKQorCWNhc2UgMTk6CisJCWIgPSBwLmFwcGVuZFJlcGVhdGVkRmllbGQoYiwgInRhcmdldHMiLCBuaWwpCisJY2FzZSAyMDoKKwkJYiA9IHAuYXBwZW5kUmVwZWF0ZWRGaWVsZChiLCAiZWRpdGlvbl9kZWZhdWx0cyIsICgqU291cmNlUGF0aCkuYXBwZW5kRmllbGRPcHRpb25zX0VkaXRpb25EZWZhdWx0KQorCWNhc2UgMjE6CisJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgImZlYXR1cmVzIiwgKCpTb3VyY2VQYXRoKS5hcHBlbmRGZWF0dXJlU2V0KQogCWNhc2UgOTk5OgogCQliID0gcC5hcHBlbmRSZXBlYXRlZEZpZWxkKGIsICJ1bmludGVycHJldGVkX29wdGlvbiIsICgqU291cmNlUGF0aCkuYXBwZW5kVW5pbnRlcnByZXRlZE9wdGlvbikKIAl9CiAJcmV0dXJuIGIKIH0KIAorZnVuYyAocCAqU291cmNlUGF0aCkgYXBwZW5kRmVhdHVyZVNldChiIFtdYnl0ZSkgW11ieXRlIHsKKwlpZiBsZW4oKnApID09IDAgeworCQlyZXR1cm4gYgorCX0KKwlzd2l0Y2ggKCpwKVswXSB7CisJY2FzZSAxOgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJmaWVsZF9wcmVzZW5jZSIsIG5pbCkKKwljYXNlIDI6CisJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgImVudW1fdHlwZSIsIG5pbCkKKwljYXNlIDM6CisJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgInJlcGVhdGVkX2ZpZWxkX2VuY29kaW5nIiwgbmlsKQorCWNhc2UgNDoKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAidXRmOF92YWxpZGF0aW9uIiwgbmlsKQorCWNhc2UgNToKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAibWVzc2FnZV9lbmNvZGluZyIsIG5pbCkKKwljYXNlIDY6CisJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgImpzb25fZm9ybWF0IiwgbmlsKQorCX0KKwlyZXR1cm4gYgorfQorCiBmdW5jIChwICpTb3VyY2VQYXRoKSBhcHBlbmRVbmludGVycHJldGVkT3B0aW9uKGIgW11ieXRlKSBbXWJ5dGUgewogCWlmIGxlbigqcCkgPT0gMCB7CiAJCXJldHVybiBiCkBAIC00MDQsNiArNDQ5LDEyIEBACiAJc3dpdGNoICgqcClbMF0gewogCWNhc2UgOTk5OgogCQliID0gcC5hcHBlbmRSZXBlYXRlZEZpZWxkKGIsICJ1bmludGVycHJldGVkX29wdGlvbiIsICgqU291cmNlUGF0aCkuYXBwZW5kVW5pbnRlcnByZXRlZE9wdGlvbikKKwljYXNlIDI6CisJCWIgPSBwLmFwcGVuZFJlcGVhdGVkRmllbGQoYiwgImRlY2xhcmF0aW9uIiwgKCpTb3VyY2VQYXRoKS5hcHBlbmRFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb24pCisJY2FzZSA1MDoKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAiZmVhdHVyZXMiLCAoKlNvdXJjZVBhdGgpLmFwcGVuZEZlYXR1cmVTZXQpCisJY2FzZSAzOgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJ2ZXJpZmljYXRpb24iLCBuaWwpCiAJfQogCXJldHVybiBiCiB9CkBAIC00MTMsNiArNDY0LDggQEAKIAkJcmV0dXJuIGIKIAl9CiAJc3dpdGNoICgqcClbMF0geworCWNhc2UgMToKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAiZmVhdHVyZXMiLCAoKlNvdXJjZVBhdGgpLmFwcGVuZEZlYXR1cmVTZXQpCiAJY2FzZSA5OTk6CiAJCWIgPSBwLmFwcGVuZFJlcGVhdGVkRmllbGQoYiwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiwgKCpTb3VyY2VQYXRoKS5hcHBlbmRVbmludGVycHJldGVkT3B0aW9uKQogCX0KQEAgLTQyNiw2ICs0NzksMTAgQEAKIAlzd2l0Y2ggKCpwKVswXSB7CiAJY2FzZSAxOgogCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJkZXByZWNhdGVkIiwgbmlsKQorCWNhc2UgMjoKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAiZmVhdHVyZXMiLCAoKlNvdXJjZVBhdGgpLmFwcGVuZEZlYXR1cmVTZXQpCisJY2FzZSAzOgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJkZWJ1Z19yZWRhY3QiLCBuaWwpCiAJY2FzZSA5OTk6CiAJCWIgPSBwLmFwcGVuZFJlcGVhdGVkRmllbGQoYiwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiwgKCpTb3VyY2VQYXRoKS5hcHBlbmRVbmludGVycHJldGVkT3B0aW9uKQogCX0KQEAgLTQ0MSwxMiArNDk4LDI3IEBACiAJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgImRlcHJlY2F0ZWQiLCBuaWwpCiAJY2FzZSAzNDoKIAkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAiaWRlbXBvdGVuY3lfbGV2ZWwiLCBuaWwpCisJY2FzZSAzNToKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAiZmVhdHVyZXMiLCAoKlNvdXJjZVBhdGgpLmFwcGVuZEZlYXR1cmVTZXQpCiAJY2FzZSA5OTk6CiAJCWIgPSBwLmFwcGVuZFJlcGVhdGVkRmllbGQoYiwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiwgKCpTb3VyY2VQYXRoKS5hcHBlbmRVbmludGVycHJldGVkT3B0aW9uKQogCX0KIAlyZXR1cm4gYgogfQogCitmdW5jIChwICpTb3VyY2VQYXRoKSBhcHBlbmRGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHQoYiBbXWJ5dGUpIFtdYnl0ZSB7CisJaWYgbGVuKCpwKSA9PSAwIHsKKwkJcmV0dXJuIGIKKwl9CisJc3dpdGNoICgqcClbMF0geworCWNhc2UgMzoKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAiZWRpdGlvbiIsIG5pbCkKKwljYXNlIDI6CisJCWIgPSBwLmFwcGVuZFNpbmd1bGFyRmllbGQoYiwgInZhbHVlIiwgbmlsKQorCX0KKwlyZXR1cm4gYgorfQorCiBmdW5jIChwICpTb3VyY2VQYXRoKSBhcHBlbmRVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KGIgW11ieXRlKSBbXWJ5dGUgewogCWlmIGxlbigqcCkgPT0gMCB7CiAJCXJldHVybiBiCkBAIC00NTksMyArNTMxLDIyIEBACiAJfQogCXJldHVybiBiCiB9CisKK2Z1bmMgKHAgKlNvdXJjZVBhdGgpIGFwcGVuZEV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbihiIFtdYnl0ZSkgW11ieXRlIHsKKwlpZiBsZW4oKnApID09IDAgeworCQlyZXR1cm4gYgorCX0KKwlzd2l0Y2ggKCpwKVswXSB7CisJY2FzZSAxOgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJudW1iZXIiLCBuaWwpCisJY2FzZSAyOgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJmdWxsX25hbWUiLCBuaWwpCisJY2FzZSAzOgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJ0eXBlIiwgbmlsKQorCWNhc2UgNToKKwkJYiA9IHAuYXBwZW5kU2luZ3VsYXJGaWVsZChiLCAicmVzZXJ2ZWQiLCBuaWwpCisJY2FzZSA2OgorCQliID0gcC5hcHBlbmRTaW5ndWxhckZpZWxkKGIsICJyZXBlYXRlZCIsIG5pbCkKKwl9CisJcmV0dXJuIGIKK30KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC90eXBlLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3R5cGUuZ28KaW5kZXggOGU1M2M0NC4uNjBmZjYyYiAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3R5cGUuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3R5cGUuZ28KQEAgLTEyLDcgKzEyLDcgQEAKIC8vIGV4YWN0bHkgaWRlbnRpY2FsLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHNhbWUgc2VtYW50aWNhbGx5CiAvLyBpZGVudGljYWwgcHJvdG8gdHlwZSB0byBiZSByZXByZXNlbnRlZCBieSBtdWx0aXBsZSB0eXBlIGRlc2NyaXB0b3JzLgogLy8KLS8vIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGhhdmUgdDEgYW5kIHQyIHdoaWNoIGFyZSBib3RoIE1lc3NhZ2VEZXNjcmlwdG9ycy4KKy8vIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGhhdmUgdDEgYW5kIHQyIHdoaWNoIGFyZSBib3RoIGFuIFtNZXNzYWdlRGVzY3JpcHRvcl0uCiAvLyBJZiB0MSA9PSB0MiwgdGhlbiB0aGUgdHlwZXMgYXJlIGRlZmluaXRlbHkgZXF1YWwgYW5kIGFsbCBhY2Nlc3NvcnMgcmV0dXJuCiAvLyB0aGUgc2FtZSBpbmZvcm1hdGlvbi4gSG93ZXZlciwgaWYgdDEgIT0gdDIsIHRoZW4gaXQgaXMgc3RpbGwgcG9zc2libGUgdGhhdAogLy8gdGhleSBzdGlsbCByZXByZXNlbnQgdGhlIHNhbWUgcHJvdG8gdHlwZSAoZS5nLiwgdDEuRnVsbE5hbWUgPT0gdDIuRnVsbE5hbWUpLgpAQCAtMTE1LDcgKzExNSw3IEBACiAvLyBjb3JyZXNwb25kcyB3aXRoIHRoZSBnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90byBtZXNzYWdlLgogLy8KIC8vIFRvcC1sZXZlbCBkZWNsYXJhdGlvbnM6Ci0vLyBFbnVtRGVzY3JpcHRvciwgTWVzc2FnZURlc2NyaXB0b3IsIEZpZWxkRGVzY3JpcHRvciwgYW5kL29yIFNlcnZpY2VEZXNjcmlwdG9yLgorLy8gW0VudW1EZXNjcmlwdG9yXSwgW01lc3NhZ2VEZXNjcmlwdG9yXSwgW0ZpZWxkRGVzY3JpcHRvcl0sIGFuZC9vciBbU2VydmljZURlc2NyaXB0b3JdLgogdHlwZSBGaWxlRGVzY3JpcHRvciBpbnRlcmZhY2UgewogCURlc2NyaXB0b3IgLy8gRGVzY3JpcHRvci5GdWxsTmFtZSBpcyBpZGVudGljYWwgdG8gUGFja2FnZQogCkBAIC0xODAsOCArMTgwLDggQEAKIC8vIGNvcnJlc3BvbmRzIHdpdGggdGhlIGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8gbWVzc2FnZS4KIC8vCiAvLyBOZXN0ZWQgZGVjbGFyYXRpb25zOgotLy8gRmllbGREZXNjcmlwdG9yLCBPbmVvZkRlc2NyaXB0b3IsIEZpZWxkRGVzY3JpcHRvciwgRW51bURlc2NyaXB0b3IsCi0vLyBhbmQvb3IgTWVzc2FnZURlc2NyaXB0b3IuCisvLyBbRmllbGREZXNjcmlwdG9yXSwgW09uZW9mRGVzY3JpcHRvcl0sIFtGaWVsZERlc2NyaXB0b3JdLCBbRW51bURlc2NyaXB0b3JdLAorLy8gYW5kL29yIFtNZXNzYWdlRGVzY3JpcHRvcl0uCiB0eXBlIE1lc3NhZ2VEZXNjcmlwdG9yIGludGVyZmFjZSB7CiAJRGVzY3JpcHRvcgogCkBAIC0yMTQsNyArMjE0LDcgQEAKIAlFeHRlbnNpb25SYW5nZXMoKSBGaWVsZFJhbmdlcwogCS8vIEV4dGVuc2lvblJhbmdlT3B0aW9ucyByZXR1cm5zIHRoZSBpdGggZXh0ZW5zaW9uIHJhbmdlIG9wdGlvbnMuCiAJLy8KLQkvLyBUbyBhdm9pZCBhIGRlcGVuZGVuY3kgY3ljbGUsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm90by5NZXNzYWdlIHZhbHVlLAorCS8vIFRvIGF2b2lkIGEgZGVwZW5kZW5jeSBjeWNsZSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIHByb3RvLk1lc3NhZ2VdIHZhbHVlLAogCS8vIHdoaWNoIGFsd2F5cyBjb250YWlucyBhIGdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMgbWVzc2FnZS4KIAkvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgdHlwZWQgbmlsLXBvaW50ZXIgaWYgbm8gb3B0aW9ucyBhcmUgcHJlc2VudC4KIAkvLyBUaGUgY2FsbGVyIG11c3QgaW1wb3J0IHRoZSBkZXNjcmlwdG9ycGIgcGFja2FnZSB0byB1c2UgdGhpcy4KQEAgLTIzMSw5ICsyMzEsOSBAQAogfQogdHlwZSBpc01lc3NhZ2VEZXNjcmlwdG9yIGludGVyZmFjZXsgUHJvdG9UeXBlKE1lc3NhZ2VEZXNjcmlwdG9yKSB9CiAKLS8vIE1lc3NhZ2VUeXBlIGVuY2Fwc3VsYXRlcyBhIE1lc3NhZ2VEZXNjcmlwdG9yIHdpdGggYSBjb25jcmV0ZSBHbyBpbXBsZW1lbnRhdGlvbi4KKy8vIE1lc3NhZ2VUeXBlIGVuY2Fwc3VsYXRlcyBhIFtNZXNzYWdlRGVzY3JpcHRvcl0gd2l0aCBhIGNvbmNyZXRlIEdvIGltcGxlbWVudGF0aW9uLgogLy8gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBpbnRlcmZhY2UgYWxzbyBpbXBsZW1lbnQgdGhlCi0vLyBNZXNzYWdlRmllbGRUeXBlcyBpbnRlcmZhY2UuCisvLyBbTWVzc2FnZUZpZWxkVHlwZXNdIGludGVyZmFjZS4KIHR5cGUgTWVzc2FnZVR5cGUgaW50ZXJmYWNlIHsKIAkvLyBOZXcgcmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBlbXB0eSBtZXNzYWdlLgogCS8vIEl0IG1heSByZXR1cm4gbmlsIGZvciBzeW50aGV0aWMgbWVzc2FnZXMgcmVwcmVzZW50aW5nIGEgbWFwIGVudHJ5LgpAQCAtMjQ5LDE5ICsyNDksMTkgQEAKIAlEZXNjcmlwdG9yKCkgTWVzc2FnZURlc2NyaXB0b3IKIH0KIAotLy8gTWVzc2FnZUZpZWxkVHlwZXMgZXh0ZW5kcyBhIE1lc3NhZ2VUeXBlIGJ5IHByb3ZpZGluZyB0eXBlIGluZm9ybWF0aW9uCisvLyBNZXNzYWdlRmllbGRUeXBlcyBleHRlbmRzIGEgW01lc3NhZ2VUeXBlXSBieSBwcm92aWRpbmcgdHlwZSBpbmZvcm1hdGlvbgogLy8gcmVnYXJkaW5nIGVudW1zIGFuZCBtZXNzYWdlcyByZWZlcmVuY2VkIGJ5IHRoZSBtZXNzYWdlIGZpZWxkcy4KIHR5cGUgTWVzc2FnZUZpZWxkVHlwZXMgaW50ZXJmYWNlIHsKIAlNZXNzYWdlVHlwZQogCi0JLy8gRW51bSByZXR1cm5zIHRoZSBFbnVtVHlwZSBmb3IgdGhlIGl0aCBmaWVsZCBpbiBEZXNjcmlwdG9yLkZpZWxkcy4KKwkvLyBFbnVtIHJldHVybnMgdGhlIEVudW1UeXBlIGZvciB0aGUgaXRoIGZpZWxkIGluIE1lc3NhZ2VEZXNjcmlwdG9yLkZpZWxkcy4KIAkvLyBJdCByZXR1cm5zIG5pbCBpZiB0aGUgaXRoIGZpZWxkIGlzIG5vdCBhbiBlbnVtIGtpbmQuCiAJLy8gSXQgcGFuaWNzIGlmIG91dCBvZiBib3VuZHMuCiAJLy8KIAkvLyBJbnZhcmlhbnQ6IG10LkVudW0oaSkuRGVzY3JpcHRvcigpID09IG10LkRlc2NyaXB0b3IoKS5GaWVsZHMoaSkuRW51bSgpCiAJRW51bShpIGludCkgRW51bVR5cGUKIAotCS8vIE1lc3NhZ2UgcmV0dXJucyB0aGUgTWVzc2FnZVR5cGUgZm9yIHRoZSBpdGggZmllbGQgaW4gRGVzY3JpcHRvci5GaWVsZHMuCisJLy8gTWVzc2FnZSByZXR1cm5zIHRoZSBNZXNzYWdlVHlwZSBmb3IgdGhlIGl0aCBmaWVsZCBpbiBNZXNzYWdlRGVzY3JpcHRvci5GaWVsZHMuCiAJLy8gSXQgcmV0dXJucyBuaWwgaWYgdGhlIGl0aCBmaWVsZCBpcyBub3QgYSBtZXNzYWdlIG9yIGdyb3VwIGtpbmQuCiAJLy8gSXQgcGFuaWNzIGlmIG91dCBvZiBib3VuZHMuCiAJLy8KQEAgLTI4Niw4ICsyODYsOCBAQAogLy8gY29ycmVzcG9uZHMgd2l0aCB0aGUgZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvIG1lc3NhZ2UuCiAvLwogLy8gSXQgaXMgdXNlZCBmb3IgYm90aCBub3JtYWwgZmllbGRzIGRlZmluZWQgd2l0aGluIHRoZSBwYXJlbnQgbWVzc2FnZQotLy8gKGUuZy4sIE1lc3NhZ2VEZXNjcmlwdG9yLkZpZWxkcykgYW5kIGZpZWxkcyB0aGF0IGV4dGVuZCBzb21lIHJlbW90ZSBtZXNzYWdlCi0vLyAoZS5nLiwgRmlsZURlc2NyaXB0b3IuRXh0ZW5zaW9ucyBvciBNZXNzYWdlRGVzY3JpcHRvci5FeHRlbnNpb25zKS4KKy8vIChlLmcuLCBbTWVzc2FnZURlc2NyaXB0b3IuRmllbGRzXSkgYW5kIGZpZWxkcyB0aGF0IGV4dGVuZCBzb21lIHJlbW90ZSBtZXNzYWdlCisvLyAoZS5nLiwgW0ZpbGVEZXNjcmlwdG9yLkV4dGVuc2lvbnNdIG9yIFtNZXNzYWdlRGVzY3JpcHRvci5FeHRlbnNpb25zXSkuCiB0eXBlIEZpZWxkRGVzY3JpcHRvciBpbnRlcmZhY2UgewogCURlc2NyaXB0b3IKIApAQCAtMzQ0LDcgKzM0NCw3IEBACiAJLy8gSXNNYXAgcmVwb3J0cyB3aGV0aGVyIHRoaXMgZmllbGQgcmVwcmVzZW50cyBhIG1hcCwKIAkvLyB3aGVyZSB0aGUgdmFsdWUgdHlwZSBmb3IgdGhlIGFzc29jaWF0ZWQgZmllbGQgaXMgYSBNYXAuCiAJLy8gSXQgaXMgZXF1aXZhbGVudCB0byBjaGVja2luZyB3aGV0aGVyIENhcmRpbmFsaXR5IGlzIFJlcGVhdGVkLAotCS8vIHRoYXQgdGhlIEtpbmQgaXMgTWVzc2FnZUtpbmQsIGFuZCB0aGF0IE1lc3NhZ2UuSXNNYXBFbnRyeSByZXBvcnRzIHRydWUuCisJLy8gdGhhdCB0aGUgS2luZCBpcyBNZXNzYWdlS2luZCwgYW5kIHRoYXQgTWVzc2FnZURlc2NyaXB0b3IuSXNNYXBFbnRyeSByZXBvcnRzIHRydWUuCiAJSXNNYXAoKSBib29sCiAKIAkvLyBNYXBLZXkgcmV0dXJucyB0aGUgZmllbGQgZGVzY3JpcHRvciBmb3IgdGhlIGtleSBpbiB0aGUgbWFwIGVudHJ5LgpAQCAtNDE5LDcgKzQxOSw3IEBACiAKIAkvLyBJc1N5bnRoZXRpYyByZXBvcnRzIHdoZXRoZXIgdGhpcyBpcyBhIHN5bnRoZXRpYyBvbmVvZiBjcmVhdGVkIHRvIHN1cHBvcnQKIAkvLyBwcm90bzMgb3B0aW9uYWwgc2VtYW50aWNzLiBJZiB0cnVlLCBGaWVsZHMgY29udGFpbnMgZXhhY3RseSBvbmUgZmllbGQKLQkvLyB3aXRoIEhhc09wdGlvbmFsS2V5d29yZCBzcGVjaWZpZWQuCisJLy8gd2l0aCBGaWVsZERlc2NyaXB0b3IuSGFzT3B0aW9uYWxLZXl3b3JkIHNwZWNpZmllZC4KIAlJc1N5bnRoZXRpYygpIGJvb2wKIAogCS8vIEZpZWxkcyBpcyBhIGxpc3Qgb2YgZmllbGRzIGJlbG9uZ2luZyB0byB0aGlzIG9uZW9mLgpAQCAtNDQyLDEwICs0NDIsMTAgQEAKIAlkb05vdEltcGxlbWVudAogfQogCi0vLyBFeHRlbnNpb25EZXNjcmlwdG9yIGlzIGFuIGFsaWFzIG9mIEZpZWxkRGVzY3JpcHRvciBmb3IgZG9jdW1lbnRhdGlvbi4KKy8vIEV4dGVuc2lvbkRlc2NyaXB0b3IgaXMgYW4gYWxpYXMgb2YgW0ZpZWxkRGVzY3JpcHRvcl0gZm9yIGRvY3VtZW50YXRpb24uCiB0eXBlIEV4dGVuc2lvbkRlc2NyaXB0b3IgPSBGaWVsZERlc2NyaXB0b3IKIAotLy8gRXh0ZW5zaW9uVHlwZURlc2NyaXB0b3IgaXMgYW4gRXh0ZW5zaW9uRGVzY3JpcHRvciB3aXRoIGFuIGFzc29jaWF0ZWQgRXh0ZW5zaW9uVHlwZS4KKy8vIEV4dGVuc2lvblR5cGVEZXNjcmlwdG9yIGlzIGFuIFtFeHRlbnNpb25EZXNjcmlwdG9yXSB3aXRoIGFuIGFzc29jaWF0ZWQgW0V4dGVuc2lvblR5cGVdLgogdHlwZSBFeHRlbnNpb25UeXBlRGVzY3JpcHRvciBpbnRlcmZhY2UgewogCUV4dGVuc2lvbkRlc2NyaXB0b3IKIApAQCAtNDcwLDE2ICs0NzAsMTcgQEAKIAlkb05vdEltcGxlbWVudAogfQogCi0vLyBFeHRlbnNpb25UeXBlIGVuY2Fwc3VsYXRlcyBhbiBFeHRlbnNpb25EZXNjcmlwdG9yIHdpdGggYSBjb25jcmV0ZQorLy8gRXh0ZW5zaW9uVHlwZSBlbmNhcHN1bGF0ZXMgYW4gW0V4dGVuc2lvbkRlc2NyaXB0b3JdIHdpdGggYSBjb25jcmV0ZQogLy8gR28gaW1wbGVtZW50YXRpb24uIFRoZSBuZXN0ZWQgZmllbGQgZGVzY3JpcHRvciBtdXN0IGJlIGZvciBhIGV4dGVuc2lvbiBmaWVsZC4KIC8vCiAvLyBXaGlsZSBhIG5vcm1hbCBmaWVsZCBpcyBhIG1lbWJlciBvZiB0aGUgcGFyZW50IG1lc3NhZ2UgdGhhdCBpdCBpcyBkZWNsYXJlZAotLy8gd2l0aGluIChzZWUgRGVzY3JpcHRvci5QYXJlbnQpLCBhbiBleHRlbnNpb24gZmllbGQgaXMgYSBtZW1iZXIgb2Ygc29tZSBvdGhlcgotLy8gdGFyZ2V0IG1lc3NhZ2UgKHNlZSBFeHRlbnNpb25EZXNjcmlwdG9yLkV4dGVuZGVlKSBhbmQgbWF5IGhhdmUgbm8KKy8vIHdpdGhpbiAoc2VlIFtEZXNjcmlwdG9yLlBhcmVudF0pLCBhbiBleHRlbnNpb24gZmllbGQgaXMgYSBtZW1iZXIgb2Ygc29tZSBvdGhlcgorLy8gdGFyZ2V0IG1lc3NhZ2UgKHNlZSBbRmllbGREZXNjcmlwdG9yLkNvbnRhaW5pbmdNZXNzYWdlXSkgYW5kIG1heSBoYXZlIG5vCiAvLyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgcGFyZW50LiBIb3dldmVyLCB0aGUgZnVsbCBuYW1lIG9mIGFuIGV4dGVuc2lvbiBmaWVsZCBpcwogLy8gcmVsYXRpdmUgdG8gdGhlIHBhcmVudCB0aGF0IGl0IGlzIGRlY2xhcmVkIHdpdGhpbi4KIC8vCiAvLyBGb3IgZXhhbXBsZToKKy8vCiAvLwlzeW50YXggPSAicHJvdG8yIjsKIC8vCXBhY2thZ2UgZXhhbXBsZTsKIC8vCW1lc3NhZ2UgRm9vTWVzc2FnZSB7CkBAIC01MzEsNyArNTMyLDcgQEAKIC8vIGNvcnJlc3BvbmRzIHdpdGggdGhlIGdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvIG1lc3NhZ2UuCiAvLwogLy8gTmVzdGVkIGRlY2xhcmF0aW9uczoKLS8vIEVudW1WYWx1ZURlc2NyaXB0b3IuCisvLyBbRW51bVZhbHVlRGVzY3JpcHRvcl0uCiB0eXBlIEVudW1EZXNjcmlwdG9yIGludGVyZmFjZSB7CiAJRGVzY3JpcHRvcgogCkBAIC01NDcsNyArNTQ4LDcgQEAKIH0KIHR5cGUgaXNFbnVtRGVzY3JpcHRvciBpbnRlcmZhY2V7IFByb3RvVHlwZShFbnVtRGVzY3JpcHRvcikgfQogCi0vLyBFbnVtVHlwZSBlbmNhcHN1bGF0ZXMgYW4gRW51bURlc2NyaXB0b3Igd2l0aCBhIGNvbmNyZXRlIEdvIGltcGxlbWVudGF0aW9uLgorLy8gRW51bVR5cGUgZW5jYXBzdWxhdGVzIGFuIFtFbnVtRGVzY3JpcHRvcl0gd2l0aCBhIGNvbmNyZXRlIEdvIGltcGxlbWVudGF0aW9uLgogdHlwZSBFbnVtVHlwZSBpbnRlcmZhY2UgewogCS8vIE5ldyByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoaXMgZW51bSB0eXBlIHdpdGggaXRzIHZhbHVlIHNldCB0byBuLgogCU5ldyhuIEVudW1OdW1iZXIpIEVudW0KQEAgLTYwOSw3ICs2MTAsNyBAQAogLy8gU2VydmljZURlc2NyaXB0b3IgZGVzY3JpYmVzIGEgc2VydmljZSBhbmQKIC8vIGNvcnJlc3BvbmRzIHdpdGggdGhlIGdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvIG1lc3NhZ2UuCiAvLwotLy8gTmVzdGVkIGRlY2xhcmF0aW9uczogTWV0aG9kRGVzY3JpcHRvci4KKy8vIE5lc3RlZCBkZWNsYXJhdGlvbnM6IFtNZXRob2REZXNjcmlwdG9yXS4KIHR5cGUgU2VydmljZURlc2NyaXB0b3IgaW50ZXJmYWNlIHsKIAlEZXNjcmlwdG9yCiAKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZS5nbwppbmRleCBmMzE5ODEwLi5hN2IwZDA2IDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QvdmFsdWUuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3ZhbHVlLmdvCkBAIC0yNywxNiArMjcsMTYgQEAKIC8vIE1lc3NhZ2UgaXMgYSByZWZsZWN0aXZlIGludGVyZmFjZSBmb3IgYSBjb25jcmV0ZSBtZXNzYWdlIHZhbHVlLAogLy8gZW5jYXBzdWxhdGluZyBib3RoIHR5cGUgYW5kIHZhbHVlIGluZm9ybWF0aW9uIGZvciB0aGUgbWVzc2FnZS4KIC8vCi0vLyBBY2Nlc3Nvci9tdXRhdG9ycyBmb3IgaW5kaXZpZHVhbCBmaWVsZHMgYXJlIGtleWVkIGJ5IEZpZWxkRGVzY3JpcHRvci4KKy8vIEFjY2Vzc29yL211dGF0b3JzIGZvciBpbmRpdmlkdWFsIGZpZWxkcyBhcmUga2V5ZWQgYnkgW0ZpZWxkRGVzY3JpcHRvcl0uCiAvLyBGb3Igbm9uLWV4dGVuc2lvbiBmaWVsZHMsIHRoZSBkZXNjcmlwdG9yIG11c3QgZXhhY3RseSBtYXRjaCB0aGUKIC8vIGZpZWxkIGtub3duIGJ5IHRoZSBwYXJlbnQgbWVzc2FnZS4KLS8vIEZvciBleHRlbnNpb24gZmllbGRzLCB0aGUgZGVzY3JpcHRvciBtdXN0IGltcGxlbWVudCBFeHRlbnNpb25UeXBlRGVzY3JpcHRvciwKLS8vIGV4dGVuZCB0aGUgcGFyZW50IG1lc3NhZ2UgKGkuZS4sIGhhdmUgdGhlIHNhbWUgbWVzc2FnZSBGdWxsTmFtZSksIGFuZAorLy8gRm9yIGV4dGVuc2lvbiBmaWVsZHMsIHRoZSBkZXNjcmlwdG9yIG11c3QgaW1wbGVtZW50IFtFeHRlbnNpb25UeXBlRGVzY3JpcHRvcl0sCisvLyBleHRlbmQgdGhlIHBhcmVudCBtZXNzYWdlIChpLmUuLCBoYXZlIHRoZSBzYW1lIG1lc3NhZ2UgW0Z1bGxOYW1lXSksIGFuZAogLy8gYmUgd2l0aGluIHRoZSBwYXJlbnQncyBleHRlbnNpb24gcmFuZ2UuCiAvLwotLy8gRWFjaCBmaWVsZCBWYWx1ZSBjYW4gYmUgYSBzY2FsYXIgb3IgYSBjb21wb3NpdGUgdHlwZSAoTWVzc2FnZSwgTGlzdCwgb3IgTWFwKS4KLS8vIFNlZSBWYWx1ZSBmb3IgdGhlIEdvIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCBhIEZpZWxkRGVzY3JpcHRvci4KLS8vIFByb3ZpZGluZyBhIFZhbHVlIHRoYXQgaXMgaW52YWxpZCBvciBvZiBhbiBpbmNvcnJlY3QgdHlwZSBwYW5pY3MuCisvLyBFYWNoIGZpZWxkIFtWYWx1ZV0gY2FuIGJlIGEgc2NhbGFyIG9yIGEgY29tcG9zaXRlIHR5cGUgKFtNZXNzYWdlXSwgW0xpc3RdLCBvciBbTWFwXSkuCisvLyBTZWUgW1ZhbHVlXSBmb3IgdGhlIEdvIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCBhIFtGaWVsZERlc2NyaXB0b3JdLgorLy8gUHJvdmlkaW5nIGEgW1ZhbHVlXSB0aGF0IGlzIGludmFsaWQgb3Igb2YgYW4gaW5jb3JyZWN0IHR5cGUgcGFuaWNzLgogdHlwZSBNZXNzYWdlIGludGVyZmFjZSB7CiAJLy8gRGVzY3JpcHRvciByZXR1cm5zIG1lc3NhZ2UgZGVzY3JpcHRvciwgd2hpY2ggY29udGFpbnMgb25seSB0aGUgcHJvdG9idWYKIAkvLyB0eXBlIGluZm9ybWF0aW9uIGZvciB0aGUgbWVzc2FnZS4KQEAgLTE0OCwxMSArMTQ4LDExIEBACiAJLy8gYmUgcHJlc2VydmVkIGluIG1hcnNoYWxpbmcgb3Igb3RoZXIgb3BlcmF0aW9ucy4KIAlJc1ZhbGlkKCkgYm9vbAogCi0JLy8gUHJvdG9NZXRob2RzIHJldHVybnMgb3B0aW9uYWwgZmFzdC1wYXRoIGltcGxlbWVudGlvbnMgb2YgdmFyaW91cyBvcGVyYXRpb25zLgorCS8vIFByb3RvTWV0aG9kcyByZXR1cm5zIG9wdGlvbmFsIGZhc3QtcGF0aCBpbXBsZW1lbnRhdGlvbnMgb2YgdmFyaW91cyBvcGVyYXRpb25zLgogCS8vIFRoaXMgbWV0aG9kIG1heSByZXR1cm4gbmlsLgogCS8vCiAJLy8gVGhlIHJldHVybmVkIG1ldGhvZHMgdHlwZSBpcyBpZGVudGljYWwgdG8KLQkvLyAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2lmYWNlIi5NZXRob2RzLgorCS8vIGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3J1bnRpbWUvcHJvdG9pZmFjZS5NZXRob2RzLgogCS8vIENvbnN1bHQgdGhlIHByb3RvaWZhY2UgcGFja2FnZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgogCVByb3RvTWV0aG9kcygpICptZXRob2RzCiB9CkBAIC0xNzUsOCArMTc1LDggQEAKIH0KIAogLy8gTGlzdCBpcyBhIHplcm8taW5kZXhlZCwgb3JkZXJlZCBsaXN0LgotLy8gVGhlIGVsZW1lbnQgVmFsdWUgdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IEZpZWxkRGVzY3JpcHRvci5LaW5kLgotLy8gUHJvdmlkaW5nIGEgVmFsdWUgdGhhdCBpcyBpbnZhbGlkIG9yIG9mIGFuIGluY29ycmVjdCB0eXBlIHBhbmljcy4KKy8vIFRoZSBlbGVtZW50IFtWYWx1ZV0gdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IFtGaWVsZERlc2NyaXB0b3IuS2luZF0uCisvLyBQcm92aWRpbmcgYSBbVmFsdWVdIHRoYXQgaXMgaW52YWxpZCBvciBvZiBhbiBpbmNvcnJlY3QgdHlwZSBwYW5pY3MuCiB0eXBlIExpc3QgaW50ZXJmYWNlIHsKIAkvLyBMZW4gcmVwb3J0cyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIExpc3QuCiAJLy8gR2V0LCBTZXQsIGFuZCBUcnVuY2F0ZSBwYW5pYyB3aXRoIG91dCBvZiBib3VuZCBpbmRleGVzLgpAQCAtMjI2LDkgKzIyNiw5IEBACiB9CiAKIC8vIE1hcCBpcyBhbiB1bm9yZGVyZWQsIGFzc29jaWF0aXZlIG1hcC4KLS8vIFRoZSBlbnRyeSBNYXBLZXkgdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IEZpZWxkRGVzY3JpcHRvci5NYXBLZXkuS2luZC4KLS8vIFRoZSBlbnRyeSBWYWx1ZSB0eXBlIGlzIGRldGVybWluZWQgYnkgRmllbGREZXNjcmlwdG9yLk1hcFZhbHVlLktpbmQuCi0vLyBQcm92aWRpbmcgYSBNYXBLZXkgb3IgVmFsdWUgdGhhdCBpcyBpbnZhbGlkIG9yIG9mIGFuIGluY29ycmVjdCB0eXBlIHBhbmljcy4KKy8vIFRoZSBlbnRyeSBbTWFwS2V5XSB0eXBlIGlzIGRldGVybWluZWQgYnkgW0ZpZWxkRGVzY3JpcHRvci5NYXBLZXldLktpbmQuCisvLyBUaGUgZW50cnkgW1ZhbHVlXSB0eXBlIGlzIGRldGVybWluZWQgYnkgW0ZpZWxkRGVzY3JpcHRvci5NYXBWYWx1ZV0uS2luZC4KKy8vIFByb3ZpZGluZyBhIFtNYXBLZXldIG9yIFtWYWx1ZV0gdGhhdCBpcyBpbnZhbGlkIG9yIG9mIGFuIGluY29ycmVjdCB0eXBlIHBhbmljcy4KIHR5cGUgTWFwIGludGVyZmFjZSB7CiAJLy8gTGVuIHJlcG9ydHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbWFwLgogCUxlbigpIGludApkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3ZhbHVlX2VxdWFsLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3ZhbHVlX2VxdWFsLmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NDU5OWQKLS0tIC9kZXYvbnVsbAorKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QvdmFsdWVfZXF1YWwuZ28KQEAgLTAsMCArMSwxNjggQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBHbyBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUKKy8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworcGFja2FnZSBwcm90b3JlZmxlY3QKKworaW1wb3J0ICgKKwkiYnl0ZXMiCisJImZtdCIKKwkibWF0aCIKKwkicmVmbGVjdCIKKworCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9lbmNvZGluZy9wcm90b3dpcmUiCispCisKKy8vIEVxdWFsIHJlcG9ydHMgd2hldGhlciB2MSBhbmQgdjIgYXJlIHJlY3Vyc2l2ZWx5IGVxdWFsLgorLy8KKy8vICAgLSBWYWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGFyZSBhbHdheXMgdW5lcXVhbC4KKy8vCisvLyAgIC0gQnl0ZXMgdmFsdWVzIGFyZSBlcXVhbCBpZiB0aGV5IGNvbnRhaW4gaWRlbnRpY2FsIGJ5dGVzLgorLy8gICAgIEVtcHR5IGJ5dGVzIChyZWdhcmRsZXNzIG9mIG5pbC1uZXNzKSBhcmUgY29uc2lkZXJlZCBlcXVhbC4KKy8vCisvLyAgIC0gRmxvYXRpbmcgcG9pbnQgdmFsdWVzIGFyZSBlcXVhbCBpZiB0aGV5IGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUuCisvLyAgICAgVW5saWtlIHRoZSA9PSBvcGVyYXRvciwgYSBOYU4gaXMgZXF1YWwgdG8gYW5vdGhlciBOYU4uCisvLworLy8gICAtIEVudW1zIGFyZSBlcXVhbCBpZiB0aGV5IGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyLgorLy8gICAgIFNpbmNlIFtWYWx1ZV0gZG9lcyBub3QgY29udGFpbiBhbiBlbnVtIGRlc2NyaXB0b3IsCisvLyAgICAgZW51bSB2YWx1ZXMgZG8gbm90IGNvbnNpZGVyIHRoZSB0eXBlIG9mIHRoZSBlbnVtLgorLy8KKy8vICAgLSBPdGhlciBzY2FsYXIgdmFsdWVzIGFyZSBlcXVhbCBpZiB0aGV5IGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUuCisvLworLy8gICAtIFtNZXNzYWdlXSB2YWx1ZXMgYXJlIGVxdWFsIGlmIHRoZXkgYmVsb25nIHRvIHRoZSBzYW1lIG1lc3NhZ2UgZGVzY3JpcHRvciwKKy8vICAgICBoYXZlIHRoZSBzYW1lIHNldCBvZiBwb3B1bGF0ZWQga25vd24gYW5kIGV4dGVuc2lvbiBmaWVsZCB2YWx1ZXMsCisvLyAgICAgYW5kIHRoZSBzYW1lIHNldCBvZiB1bmtub3duIGZpZWxkcyB2YWx1ZXMuCisvLworLy8gICAtIFtMaXN0XSB2YWx1ZXMgYXJlIGVxdWFsIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGxlbmd0aCBhbmQKKy8vICAgICBlYWNoIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpcyBlcXVhbC4KKy8vCisvLyAgIC0gW01hcF0gdmFsdWVzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgc2V0IG9mIGtleXMgYW5kCisvLyAgICAgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgZm9yIGVhY2gga2V5IGlzIGVxdWFsLgorZnVuYyAodjEgVmFsdWUpIEVxdWFsKHYyIFZhbHVlKSBib29sIHsKKwlyZXR1cm4gZXF1YWxWYWx1ZSh2MSwgdjIpCit9CisKK2Z1bmMgZXF1YWxWYWx1ZSh4LCB5IFZhbHVlKSBib29sIHsKKwllcVR5cGUgOj0geC50eXAgPT0geS50eXAKKwlzd2l0Y2ggeC50eXAgeworCWNhc2UgbmlsVHlwZToKKwkJcmV0dXJuIGVxVHlwZQorCWNhc2UgYm9vbFR5cGU6CisJCXJldHVybiBlcVR5cGUgJiYgeC5Cb29sKCkgPT0geS5Cb29sKCkKKwljYXNlIGludDMyVHlwZSwgaW50NjRUeXBlOgorCQlyZXR1cm4gZXFUeXBlICYmIHguSW50KCkgPT0geS5JbnQoKQorCWNhc2UgdWludDMyVHlwZSwgdWludDY0VHlwZToKKwkJcmV0dXJuIGVxVHlwZSAmJiB4LlVpbnQoKSA9PSB5LlVpbnQoKQorCWNhc2UgZmxvYXQzMlR5cGUsIGZsb2F0NjRUeXBlOgorCQlyZXR1cm4gZXFUeXBlICYmIGVxdWFsRmxvYXQoeC5GbG9hdCgpLCB5LkZsb2F0KCkpCisJY2FzZSBzdHJpbmdUeXBlOgorCQlyZXR1cm4gZXFUeXBlICYmIHguU3RyaW5nKCkgPT0geS5TdHJpbmcoKQorCWNhc2UgYnl0ZXNUeXBlOgorCQlyZXR1cm4gZXFUeXBlICYmIGJ5dGVzLkVxdWFsKHguQnl0ZXMoKSwgeS5CeXRlcygpKQorCWNhc2UgZW51bVR5cGU6CisJCXJldHVybiBlcVR5cGUgJiYgeC5FbnVtKCkgPT0geS5FbnVtKCkKKwlkZWZhdWx0OgorCQlzd2l0Y2ggeCA6PSB4LkludGVyZmFjZSgpLih0eXBlKSB7CisJCWNhc2UgTWVzc2FnZToKKwkJCXksIG9rIDo9IHkuSW50ZXJmYWNlKCkuKE1lc3NhZ2UpCisJCQlyZXR1cm4gb2sgJiYgZXF1YWxNZXNzYWdlKHgsIHkpCisJCWNhc2UgTGlzdDoKKwkJCXksIG9rIDo9IHkuSW50ZXJmYWNlKCkuKExpc3QpCisJCQlyZXR1cm4gb2sgJiYgZXF1YWxMaXN0KHgsIHkpCisJCWNhc2UgTWFwOgorCQkJeSwgb2sgOj0geS5JbnRlcmZhY2UoKS4oTWFwKQorCQkJcmV0dXJuIG9rICYmIGVxdWFsTWFwKHgsIHkpCisJCWRlZmF1bHQ6CisJCQlwYW5pYyhmbXQuU3ByaW50ZigidW5rbm93biB0eXBlOiAlVCIsIHgpKQorCQl9CisJfQorfQorCisvLyBlcXVhbEZsb2F0IGNvbXBhcmVzIHR3byBmbG9hdHMsIHdoZXJlIE5hTnMgYXJlIHRyZWF0ZWQgYXMgZXF1YWwuCitmdW5jIGVxdWFsRmxvYXQoeCwgeSBmbG9hdDY0KSBib29sIHsKKwlpZiBtYXRoLklzTmFOKHgpIHx8IG1hdGguSXNOYU4oeSkgeworCQlyZXR1cm4gbWF0aC5Jc05hTih4KSAmJiBtYXRoLklzTmFOKHkpCisJfQorCXJldHVybiB4ID09IHkKK30KKworLy8gZXF1YWxNZXNzYWdlIGNvbXBhcmVzIHR3byBtZXNzYWdlcy4KK2Z1bmMgZXF1YWxNZXNzYWdlKG14LCBteSBNZXNzYWdlKSBib29sIHsKKwlpZiBteC5EZXNjcmlwdG9yKCkgIT0gbXkuRGVzY3JpcHRvcigpIHsKKwkJcmV0dXJuIGZhbHNlCisJfQorCisJbnggOj0gMAorCWVxdWFsIDo9IHRydWUKKwlteC5SYW5nZShmdW5jKGZkIEZpZWxkRGVzY3JpcHRvciwgdnggVmFsdWUpIGJvb2wgeworCQlueCsrCisJCXZ5IDo9IG15LkdldChmZCkKKwkJZXF1YWwgPSBteS5IYXMoZmQpICYmIGVxdWFsVmFsdWUodngsIHZ5KQorCQlyZXR1cm4gZXF1YWwKKwl9KQorCWlmICFlcXVhbCB7CisJCXJldHVybiBmYWxzZQorCX0KKwlueSA6PSAwCisJbXkuUmFuZ2UoZnVuYyhmZCBGaWVsZERlc2NyaXB0b3IsIHZ4IFZhbHVlKSBib29sIHsKKwkJbnkrKworCQlyZXR1cm4gdHJ1ZQorCX0pCisJaWYgbnggIT0gbnkgeworCQlyZXR1cm4gZmFsc2UKKwl9CisKKwlyZXR1cm4gZXF1YWxVbmtub3duKG14LkdldFVua25vd24oKSwgbXkuR2V0VW5rbm93bigpKQorfQorCisvLyBlcXVhbExpc3QgY29tcGFyZXMgdHdvIGxpc3RzLgorZnVuYyBlcXVhbExpc3QoeCwgeSBMaXN0KSBib29sIHsKKwlpZiB4LkxlbigpICE9IHkuTGVuKCkgeworCQlyZXR1cm4gZmFsc2UKKwl9CisJZm9yIGkgOj0geC5MZW4oKSAtIDE7IGkgPj0gMDsgaS0tIHsKKwkJaWYgIWVxdWFsVmFsdWUoeC5HZXQoaSksIHkuR2V0KGkpKSB7CisJCQlyZXR1cm4gZmFsc2UKKwkJfQorCX0KKwlyZXR1cm4gdHJ1ZQorfQorCisvLyBlcXVhbE1hcCBjb21wYXJlcyB0d28gbWFwcy4KK2Z1bmMgZXF1YWxNYXAoeCwgeSBNYXApIGJvb2wgeworCWlmIHguTGVuKCkgIT0geS5MZW4oKSB7CisJCXJldHVybiBmYWxzZQorCX0KKwllcXVhbCA6PSB0cnVlCisJeC5SYW5nZShmdW5jKGsgTWFwS2V5LCB2eCBWYWx1ZSkgYm9vbCB7CisJCXZ5IDo9IHkuR2V0KGspCisJCWVxdWFsID0geS5IYXMoaykgJiYgZXF1YWxWYWx1ZSh2eCwgdnkpCisJCXJldHVybiBlcXVhbAorCX0pCisJcmV0dXJuIGVxdWFsCit9CisKKy8vIGVxdWFsVW5rbm93biBjb21wYXJlcyB1bmtub3duIGZpZWxkcyBieSBkaXJlY3QgY29tcGFyaXNvbiBvbiB0aGUgcmF3IGJ5dGVzCisvLyBvZiBlYWNoIGluZGl2aWR1YWwgZmllbGQgbnVtYmVyLgorZnVuYyBlcXVhbFVua25vd24oeCwgeSBSYXdGaWVsZHMpIGJvb2wgeworCWlmIGxlbih4KSAhPSBsZW4oeSkgeworCQlyZXR1cm4gZmFsc2UKKwl9CisJaWYgYnl0ZXMuRXF1YWwoW11ieXRlKHgpLCBbXWJ5dGUoeSkpIHsKKwkJcmV0dXJuIHRydWUKKwl9CisKKwlteCA6PSBtYWtlKG1hcFtGaWVsZE51bWJlcl1SYXdGaWVsZHMpCisJbXkgOj0gbWFrZShtYXBbRmllbGROdW1iZXJdUmF3RmllbGRzKQorCWZvciBsZW4oeCkgPiAwIHsKKwkJZm51bSwgXywgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUZpZWxkKHgpCisJCW14W2ZudW1dID0gYXBwZW5kKG14W2ZudW1dLCB4WzpuXS4uLikKKwkJeCA9IHhbbjpdCisJfQorCWZvciBsZW4oeSkgPiAwIHsKKwkJZm51bSwgXywgbiA6PSBwcm90b3dpcmUuQ29uc3VtZUZpZWxkKHkpCisJCW15W2ZudW1dID0gYXBwZW5kKG15W2ZudW1dLCB5WzpuXS4uLikKKwkJeSA9IHlbbjpdCisJfQorCXJldHVybiByZWZsZWN0LkRlZXBFcXVhbChteCwgbXkpCit9CmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QvdmFsdWVfcHVyZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZV9wdXJlLmdvCmluZGV4IDkxOGU2ODUuLjdjZWQ4NzYgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZV9wdXJlLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZV9wdXJlLmdvCkBAIC0yLDYgKzIsNyBAQAogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUKIC8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAorLy9nbzpidWlsZCBwdXJlZ28gfHwgYXBwZW5naW5lCiAvLyArYnVpbGQgcHVyZWdvIGFwcGVuZ2luZQogCiBwYWNrYWdlIHByb3RvcmVmbGVjdApkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3ZhbHVlX3VuaW9uLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3ZhbHVlX3VuaW9uLmdvCmluZGV4IDVhMzQxNDcuLjE2MDMwOTcgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZV91bmlvbi5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QvdmFsdWVfdW5pb24uZ28KQEAgLTExLDcgKzExLDcgQEAKIAogLy8gVmFsdWUgaXMgYSB1bmlvbiB3aGVyZSBvbmx5IG9uZSBHbyB0eXBlIG1heSBiZSBzZXQgYXQgYSB0aW1lLgogLy8gVGhlIFZhbHVlIGlzIHVzZWQgdG8gcmVwcmVzZW50IGFsbCBwb3NzaWJsZSB2YWx1ZXMgYSBmaWVsZCBtYXkgdGFrZS4KLS8vIFRoZSBmb2xsb3dpbmcgc2hvd3Mgd2hpY2ggR28gdHlwZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBlYWNoIHByb3RvIEtpbmQ6CisvLyBUaGUgZm9sbG93aW5nIHNob3dzIHdoaWNoIEdvIHR5cGUgaXMgdXNlZCB0byByZXByZXNlbnQgZWFjaCBwcm90byBbS2luZF06CiAvLwogLy8J4pWU4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWk4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWXCiAvLwnilZEgR28gdHlwZSAgICDilIIgUHJvdG9idWYga2luZCAgICAgICAgICAgICAgICAgICAgICAg4pWRCkBAIC0zMSwxNiArMzEsNDIgQEAKIC8vCiAvLyBNdWx0aXBsZSBwcm90b2J1ZiBLaW5kcyBtYXkgYmUgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgR28gdHlwZSBpZiB0aGUgdHlwZQogLy8gY2FuIGxvc3NsZXNzbHkgcmVwcmVzZW50IHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHByb3RvIGtpbmQuIEZvciBleGFtcGxlLAotLy8gSW50NjRLaW5kLCBTaW50NjRLaW5kLCBhbmQgU2ZpeGVkNjRLaW5kIGFyZSBhbGwgcmVwcmVzZW50ZWQgYnkgaW50NjQsCisvLyBbSW50NjRLaW5kXSwgW1NpbnQ2NEtpbmRdLCBhbmQgW1NmaXhlZDY0S2luZF0gYXJlIGFsbCByZXByZXNlbnRlZCBieSBpbnQ2NCwKIC8vIGJ1dCB1c2UgZGlmZmVyZW50IGludGVnZXIgZW5jb2RpbmcgbWV0aG9kcy4KIC8vCi0vLyBUaGUgTGlzdCBvciBNYXAgdHlwZXMgYXJlIHVzZWQgaWYgdGhlIGZpZWxkIGNhcmRpbmFsaXR5IGlzIHJlcGVhdGVkLgotLy8gQSBmaWVsZCBpcyBhIExpc3QgaWYgRmllbGREZXNjcmlwdG9yLklzTGlzdCByZXBvcnRzIHRydWUuCi0vLyBBIGZpZWxkIGlzIGEgTWFwIGlmIEZpZWxkRGVzY3JpcHRvci5Jc01hcCByZXBvcnRzIHRydWUuCisvLyBUaGUgW0xpc3RdIG9yIFtNYXBdIHR5cGVzIGFyZSB1c2VkIGlmIHRoZSBmaWVsZCBjYXJkaW5hbGl0eSBpcyByZXBlYXRlZC4KKy8vIEEgZmllbGQgaXMgYSBbTGlzdF0gaWYgW0ZpZWxkRGVzY3JpcHRvci5Jc0xpc3RdIHJlcG9ydHMgdHJ1ZS4KKy8vIEEgZmllbGQgaXMgYSBbTWFwXSBpZiBbRmllbGREZXNjcmlwdG9yLklzTWFwXSByZXBvcnRzIHRydWUuCiAvLwogLy8gQ29udmVydGluZyB0by9mcm9tIGEgVmFsdWUgYW5kIGEgY29uY3JldGUgR28gdmFsdWUgcGFuaWNzIG9uIHR5cGUgbWlzbWF0Y2guCi0vLyBGb3IgZXhhbXBsZSwgVmFsdWVPZigiaGVsbG8iKS5JbnQoKSBwYW5pY3MgYmVjYXVzZSB0aGlzIGF0dGVtcHRzIHRvCisvLyBGb3IgZXhhbXBsZSwgW1ZhbHVlT2ZdKCJoZWxsbyIpLkludCgpIHBhbmljcyBiZWNhdXNlIHRoaXMgYXR0ZW1wdHMgdG8KIC8vIHJldHJpZXZlIGFuIGludDY0IGZyb20gYSBzdHJpbmcuCisvLworLy8gW0xpc3RdLCBbTWFwXSwgYW5kIFtNZXNzYWdlXSBWYWx1ZXMgYXJlIGNhbGxlZCAiY29tcG9zaXRlIiB2YWx1ZXMuCisvLworLy8gQSBjb21wb3NpdGUgVmFsdWUgbWF5IGFsaWFzIChyZWZlcmVuY2UpIG1lbW9yeSBhdCBzb21lIGxvY2F0aW9uLAorLy8gc3VjaCB0aGF0IGNoYW5nZXMgdG8gdGhlIFZhbHVlIHVwZGF0ZXMgdGhlIHRoYXQgbG9jYXRpb24uCisvLyBBIGNvbXBvc2l0ZSB2YWx1ZSBhY3F1aXJlZCB3aXRoIGEgTXV0YWJsZSBtZXRob2QsIHN1Y2ggYXMgW01lc3NhZ2UuTXV0YWJsZV0sCisvLyBhbHdheXMgcmVmZXJlbmNlcyB0aGUgc291cmNlIG9iamVjdC4KKy8vCisvLyBGb3IgZXhhbXBsZToKKy8vCisvLwkvLyBBcHBlbmQgYSAwIHRvIGEgInJlcGVhdGVkIGludDMyIiBmaWVsZC4KKy8vCS8vIFNpbmNlIHRoZSBWYWx1ZSByZXR1cm5lZCBieSBNdXRhYmxlIGlzIGd1YXJhbnRlZWQgdG8gYWxpYXMKKy8vCS8vIHRoZSBzb3VyY2UgbWVzc2FnZSwgbW9kaWZ5aW5nIHRoZSBWYWx1ZSBtb2RpZmllcyB0aGUgbWVzc2FnZS4KKy8vCW1lc3NhZ2UuTXV0YWJsZShmaWVsZERlc2MpLkxpc3QoKS5BcHBlbmQocHJvdG9yZWZsZWN0LlZhbHVlT2ZJbnQzMigwKSkKKy8vCisvLwkvLyBBc3NpZ24gWzBdIHRvIGEgInJlcGVhdGVkIGludDMyIiBmaWVsZCBieSBjcmVhdGluZyBhIG5ldyBWYWx1ZSwKKy8vCS8vIG1vZGlmeWluZyBpdCwgYW5kIGFzc2lnbmluZyBpdC4KKy8vCWxpc3QgOj0gbWVzc2FnZS5OZXdGaWVsZChmaWVsZERlc2MpLkxpc3QoKQorLy8JbGlzdC5BcHBlbmQocHJvdG9yZWZsZWN0LlZhbHVlT2ZJbnQzMigwKSkKKy8vCW1lc3NhZ2UuU2V0KGZpZWxkRGVzYywgbGlzdCkKKy8vCS8vIEVSUk9SOiBTaW5jZSBpdCBpcyBub3QgZGVmaW5lZCB3aGV0aGVyIFNldCBhbGlhc2VzIHRoZSBzb3VyY2UsCisvLwkvLyBhcHBlbmRpbmcgdG8gdGhlIExpc3QgaGVyZSBtYXkgb3IgbWF5IG5vdCBtb2RpZnkgdGhlIG1lc3NhZ2UuCisvLwlsaXN0LkFwcGVuZChwcm90b3JlZmxlY3QuVmFsdWVPZkludDMyKDApKQorLy8KKy8vIFNvbWUgb3BlcmF0aW9ucywgc3VjaCBhcyBbTWVzc2FnZS5HZXRdLCBtYXkgcmV0dXJuIGFuICJlbXB0eSwgcmVhZC1vbmx5IgorLy8gY29tcG9zaXRlIFZhbHVlLiBNb2RpZnlpbmcgYW4gZW1wdHksIHJlYWQtb25seSB2YWx1ZSBwYW5pY3MuCiB0eXBlIFZhbHVlIHZhbHVlCiAKIC8vIFRoZSBwcm90b3JlZmxlY3QgQVBJIHVzZXMgYSBjdXN0b20gVmFsdWUgdW5pb24gdHlwZSBpbnN0ZWFkIG9mIGludGVyZmFjZXt9CkBAIC0yODAsNyArMzA2LDcgQEAKIAl9CiB9CiAKLS8vIFN0cmluZyByZXR1cm5zIHYgYXMgYSBzdHJpbmcuIFNpbmNlIHRoaXMgbWV0aG9kIGltcGxlbWVudHMgZm10LlN0cmluZ2VyLAorLy8gU3RyaW5nIHJldHVybnMgdiBhcyBhIHN0cmluZy4gU2luY2UgdGhpcyBtZXRob2QgaW1wbGVtZW50cyBbZm10LlN0cmluZ2VyXSwKIC8vIHRoaXMgcmV0dXJucyB0aGUgZm9ybWF0dGVkIHN0cmluZyB2YWx1ZSBmb3IgYW55IG5vbi1zdHJpbmcgdHlwZS4KIGZ1bmMgKHYgVmFsdWUpIFN0cmluZygpIHN0cmluZyB7CiAJc3dpdGNoIHYudHlwIHsKQEAgLTMwMSw3ICszMjcsNyBAQAogCX0KIH0KIAotLy8gRW51bSByZXR1cm5zIHYgYXMgYSBFbnVtTnVtYmVyIGFuZCBwYW5pY3MgaWYgdGhlIHR5cGUgaXMgbm90IGEgRW51bU51bWJlci4KKy8vIEVudW0gcmV0dXJucyB2IGFzIGEgW0VudW1OdW1iZXJdIGFuZCBwYW5pY3MgaWYgdGhlIHR5cGUgaXMgbm90IGEgW0VudW1OdW1iZXJdLgogZnVuYyAodiBWYWx1ZSkgRW51bSgpIEVudW1OdW1iZXIgewogCXN3aXRjaCB2LnR5cCB7CiAJY2FzZSBlbnVtVHlwZToKQEAgLTMxMSw3ICszMzcsNyBAQAogCX0KIH0KIAotLy8gTWVzc2FnZSByZXR1cm5zIHYgYXMgYSBNZXNzYWdlIGFuZCBwYW5pY3MgaWYgdGhlIHR5cGUgaXMgbm90IGEgTWVzc2FnZS4KKy8vIE1lc3NhZ2UgcmV0dXJucyB2IGFzIGEgW01lc3NhZ2VdIGFuZCBwYW5pY3MgaWYgdGhlIHR5cGUgaXMgbm90IGEgW01lc3NhZ2VdLgogZnVuYyAodiBWYWx1ZSkgTWVzc2FnZSgpIE1lc3NhZ2UgewogCXN3aXRjaCB2aSA6PSB2LmdldElmYWNlKCkuKHR5cGUpIHsKIAljYXNlIE1lc3NhZ2U6CkBAIC0zMjEsNyArMzQ3LDcgQEAKIAl9CiB9CiAKLS8vIExpc3QgcmV0dXJucyB2IGFzIGEgTGlzdCBhbmQgcGFuaWNzIGlmIHRoZSB0eXBlIGlzIG5vdCBhIExpc3QuCisvLyBMaXN0IHJldHVybnMgdiBhcyBhIFtMaXN0XSBhbmQgcGFuaWNzIGlmIHRoZSB0eXBlIGlzIG5vdCBhIFtMaXN0XS4KIGZ1bmMgKHYgVmFsdWUpIExpc3QoKSBMaXN0IHsKIAlzd2l0Y2ggdmkgOj0gdi5nZXRJZmFjZSgpLih0eXBlKSB7CiAJY2FzZSBMaXN0OgpAQCAtMzMxLDcgKzM1Nyw3IEBACiAJfQogfQogCi0vLyBNYXAgcmV0dXJucyB2IGFzIGEgTWFwIGFuZCBwYW5pY3MgaWYgdGhlIHR5cGUgaXMgbm90IGEgTWFwLgorLy8gTWFwIHJldHVybnMgdiBhcyBhIFtNYXBdIGFuZCBwYW5pY3MgaWYgdGhlIHR5cGUgaXMgbm90IGEgW01hcF0uCiBmdW5jICh2IFZhbHVlKSBNYXAoKSBNYXAgewogCXN3aXRjaCB2aSA6PSB2LmdldElmYWNlKCkuKHR5cGUpIHsKIAljYXNlIE1hcDoKQEAgLTM0MSw3ICszNjcsNyBAQAogCX0KIH0KIAotLy8gTWFwS2V5IHJldHVybnMgdiBhcyBhIE1hcEtleSBhbmQgcGFuaWNzIGZvciBpbnZhbGlkIE1hcEtleSB0eXBlcy4KKy8vIE1hcEtleSByZXR1cm5zIHYgYXMgYSBbTWFwS2V5XSBhbmQgcGFuaWNzIGZvciBpbnZhbGlkIFtNYXBLZXldIHR5cGVzLgogZnVuYyAodiBWYWx1ZSkgTWFwS2V5KCkgTWFwS2V5IHsKIAlzd2l0Y2ggdi50eXAgewogCWNhc2UgYm9vbFR5cGUsIGludDMyVHlwZSwgaW50NjRUeXBlLCB1aW50MzJUeXBlLCB1aW50NjRUeXBlLCBzdHJpbmdUeXBlOgpAQCAtMzUyLDggKzM3OCw4IEBACiB9CiAKIC8vIE1hcEtleSBpcyB1c2VkIHRvIGluZGV4IG1hcHMsIHdoZXJlIHRoZSBHbyB0eXBlIG9mIHRoZSBNYXBLZXkgbXVzdCBtYXRjaAotLy8gdGhlIHNwZWNpZmllZCBrZXkgS2luZCAoc2VlIE1lc3NhZ2VEZXNjcmlwdG9yLklzTWFwRW50cnkpLgotLy8gVGhlIGZvbGxvd2luZyBzaG93cyB3aGF0IEdvIHR5cGUgaXMgdXNlZCB0byByZXByZXNlbnQgZWFjaCBwcm90byBLaW5kOgorLy8gdGhlIHNwZWNpZmllZCBrZXkgW0tpbmRdIChzZWUgW01lc3NhZ2VEZXNjcmlwdG9yLklzTWFwRW50cnldKS4KKy8vIFRoZSBmb2xsb3dpbmcgc2hvd3Mgd2hhdCBHbyB0eXBlIGlzIHVzZWQgdG8gcmVwcmVzZW50IGVhY2ggcHJvdG8gW0tpbmRdOgogLy8KIC8vCeKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVpOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlwogLy8J4pWRIEdvIHR5cGUg4pSCIFByb3RvYnVmIGtpbmQgICAgICAgICAgICAgICAgICAgICAgIOKVkQpAQCAtMzY2LDEyICszOTIsMTMgQEAKIC8vCeKVkSBzdHJpbmcgIOKUgiBTdHJpbmdLaW5kICAgICAgICAgICAgICAgICAgICAgICAgICDilZEKIC8vCeKVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVp+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnQogLy8KLS8vIEEgTWFwS2V5IGlzIGNvbnN0cnVjdGVkIGFuZCBhY2Nlc3NlZCB0aHJvdWdoIGEgVmFsdWU6CisvLyBBIE1hcEtleSBpcyBjb25zdHJ1Y3RlZCBhbmQgYWNjZXNzZWQgdGhyb3VnaCBhIFtWYWx1ZV06CisvLwogLy8JayA6PSBWYWx1ZU9mKCJoYXNoIikuTWFwS2V5KCkgLy8gY29udmVydCBzdHJpbmcgdG8gTWFwS2V5CiAvLwlzIDo9IGsuU3RyaW5nKCkgICAgICAgICAgICAgICAvLyBjb252ZXJ0IE1hcEtleSB0byBzdHJpbmcKIC8vCi0vLyBUaGUgTWFwS2V5IGlzIGEgc3RyaWN0IHN1YnNldCBvZiB2YWxpZCB0eXBlcyB1c2VkIGluIFZhbHVlOwotLy8gY29udmVydGluZyBhIFZhbHVlIHRvIGEgTWFwS2V5IHdpdGggYW4gaW52YWxpZCB0eXBlIHBhbmljcy4KKy8vIFRoZSBNYXBLZXkgaXMgYSBzdHJpY3Qgc3Vic2V0IG9mIHZhbGlkIHR5cGVzIHVzZWQgaW4gW1ZhbHVlXTsKKy8vIGNvbnZlcnRpbmcgYSBbVmFsdWVdIHRvIGEgTWFwS2V5IHdpdGggYW4gaW52YWxpZCB0eXBlIHBhbmljcy4KIHR5cGUgTWFwS2V5IHZhbHVlCiAKIC8vIElzVmFsaWQgcmVwb3J0cyB3aGV0aGVyIGsgaXMgcG9wdWxhdGVkIHdpdGggYSB2YWx1ZS4KQEAgLTM5OSwxMyArNDI2LDEzIEBACiAJcmV0dXJuIFZhbHVlKGspLlVpbnQoKQogfQogCi0vLyBTdHJpbmcgcmV0dXJucyBrIGFzIGEgc3RyaW5nLiBTaW5jZSB0aGlzIG1ldGhvZCBpbXBsZW1lbnRzIGZtdC5TdHJpbmdlciwKKy8vIFN0cmluZyByZXR1cm5zIGsgYXMgYSBzdHJpbmcuIFNpbmNlIHRoaXMgbWV0aG9kIGltcGxlbWVudHMgW2ZtdC5TdHJpbmdlcl0sCiAvLyB0aGlzIHJldHVybnMgdGhlIGZvcm1hdHRlZCBzdHJpbmcgdmFsdWUgZm9yIGFueSBub24tc3RyaW5nIHR5cGUuCiBmdW5jIChrIE1hcEtleSkgU3RyaW5nKCkgc3RyaW5nIHsKIAlyZXR1cm4gVmFsdWUoaykuU3RyaW5nKCkKIH0KIAotLy8gVmFsdWUgcmV0dXJucyBrIGFzIGEgVmFsdWUuCisvLyBWYWx1ZSByZXR1cm5zIGsgYXMgYSBbVmFsdWVdLgogZnVuYyAoayBNYXBLZXkpIFZhbHVlKCkgVmFsdWUgewogCXJldHVybiBWYWx1ZShrKQogfQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3ZhbHVlX3Vuc2FmZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZV91bnNhZmVfZ28xMjAuZ28Kc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3ZhbHVlX3Vuc2FmZS5nbwpyZW5hbWUgdG8gdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3ZhbHVlX3Vuc2FmZV9nbzEyMC5nbwppbmRleCBjNDVkZWJkLi5iMWZkYmUzIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QvdmFsdWVfdW5zYWZlLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZV91bnNhZmVfZ28xMjAuZ28KQEAgLTIsNyArMiw4IEBACiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQogLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0vLyArYnVpbGQgIXB1cmVnbywhYXBwZW5naW5lCisvL2dvOmJ1aWxkICFwdXJlZ28gJiYgIWFwcGVuZ2luZSAmJiAhZ28xLjIxCisvLyArYnVpbGQgIXB1cmVnbywhYXBwZW5naW5lLCFnbzEuMjEKIAogcGFja2FnZSBwcm90b3JlZmxlY3QKIApkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3ZhbHVlX3Vuc2FmZS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZV91bnNhZmVfZ28xMjEuZ28Kc2ltaWxhcml0eSBpbmRleCA3NiUKY29weSBmcm9tIHZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZV91bnNhZmUuZ28KY29weSB0byB2ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZmxlY3QvdmFsdWVfdW5zYWZlX2dvMTIxLmdvCmluZGV4IGM0NWRlYmQuLjQzNTQ3MDEgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdC92YWx1ZV91bnNhZmUuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWZsZWN0L3ZhbHVlX3Vuc2FmZV9nbzEyMS5nbwpAQCAtMiw3ICsyLDggQEAKIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlCiAvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAKLS8vICtidWlsZCAhcHVyZWdvLCFhcHBlbmdpbmUKKy8vZ286YnVpbGQgIXB1cmVnbyAmJiAhYXBwZW5naW5lICYmIGdvMS4yMQorLy8gK2J1aWxkICFwdXJlZ28sIWFwcGVuZ2luZSxnbzEuMjEKIAogcGFja2FnZSBwcm90b3JlZmxlY3QKIApAQCAtMTMsMTYgKzE0LDggQEAKICkKIAogdHlwZSAoCi0Jc3RyaW5nSGVhZGVyIHN0cnVjdCB7Ci0JCURhdGEgdW5zYWZlLlBvaW50ZXIKLQkJTGVuICBpbnQKLQl9Ci0Jc2xpY2VIZWFkZXIgc3RydWN0IHsKLQkJRGF0YSB1bnNhZmUuUG9pbnRlcgotCQlMZW4gIGludAotCQlDYXAgIGludAotCX0KIAlpZmFjZUhlYWRlciBzdHJ1Y3QgeworCQlfICAgIFswXWludGVyZmFjZXt9IC8vIGlmIGludGVyZmFjZXMgaGF2ZSBncmVhdGVyIGFsaWdubWVudCB0aGFuIHVuc2FmZS5Qb2ludGVyLCB0aGlzIHdpbGwgZW5mb3JjZSBpdC4KIAkJVHlwZSB1bnNhZmUuUG9pbnRlcgogCQlEYXRhIHVuc2FmZS5Qb2ludGVyCiAJfQpAQCAtNzIsMjUgKzY1LDIxIEBACiB9CiAKIGZ1bmMgdmFsdWVPZlN0cmluZyh2IHN0cmluZykgVmFsdWUgewotCXAgOj0gKCpzdHJpbmdIZWFkZXIpKHVuc2FmZS5Qb2ludGVyKCZ2KSkKLQlyZXR1cm4gVmFsdWV7dHlwOiBzdHJpbmdUeXBlLCBwdHI6IHAuRGF0YSwgbnVtOiB1aW50NjQobGVuKHYpKX0KKwlyZXR1cm4gVmFsdWV7dHlwOiBzdHJpbmdUeXBlLCBwdHI6IHVuc2FmZS5Qb2ludGVyKHVuc2FmZS5TdHJpbmdEYXRhKHYpKSwgbnVtOiB1aW50NjQobGVuKHYpKX0KIH0KIGZ1bmMgdmFsdWVPZkJ5dGVzKHYgW11ieXRlKSBWYWx1ZSB7Ci0JcCA6PSAoKnNsaWNlSGVhZGVyKSh1bnNhZmUuUG9pbnRlcigmdikpCi0JcmV0dXJuIFZhbHVle3R5cDogYnl0ZXNUeXBlLCBwdHI6IHAuRGF0YSwgbnVtOiB1aW50NjQobGVuKHYpKX0KKwlyZXR1cm4gVmFsdWV7dHlwOiBieXRlc1R5cGUsIHB0cjogdW5zYWZlLlBvaW50ZXIodW5zYWZlLlNsaWNlRGF0YSh2KSksIG51bTogdWludDY0KGxlbih2KSl9CiB9CiBmdW5jIHZhbHVlT2ZJZmFjZSh2IGludGVyZmFjZXt9KSBWYWx1ZSB7CiAJcCA6PSAoKmlmYWNlSGVhZGVyKSh1bnNhZmUuUG9pbnRlcigmdikpCiAJcmV0dXJuIFZhbHVle3R5cDogcC5UeXBlLCBwdHI6IHAuRGF0YX0KIH0KIAotZnVuYyAodiBWYWx1ZSkgZ2V0U3RyaW5nKCkgKHggc3RyaW5nKSB7Ci0JKigqc3RyaW5nSGVhZGVyKSh1bnNhZmUuUG9pbnRlcigmeCkpID0gc3RyaW5nSGVhZGVye0RhdGE6IHYucHRyLCBMZW46IGludCh2Lm51bSl9Ci0JcmV0dXJuIHgKK2Z1bmMgKHYgVmFsdWUpIGdldFN0cmluZygpIHN0cmluZyB7CisJcmV0dXJuIHVuc2FmZS5TdHJpbmcoKCpieXRlKSh2LnB0ciksIHYubnVtKQogfQotZnVuYyAodiBWYWx1ZSkgZ2V0Qnl0ZXMoKSAoeCBbXWJ5dGUpIHsKLQkqKCpzbGljZUhlYWRlcikodW5zYWZlLlBvaW50ZXIoJngpKSA9IHNsaWNlSGVhZGVye0RhdGE6IHYucHRyLCBMZW46IGludCh2Lm51bSksIENhcDogaW50KHYubnVtKX0KLQlyZXR1cm4geAorZnVuYyAodiBWYWx1ZSkgZ2V0Qnl0ZXMoKSBbXWJ5dGUgeworCXJldHVybiB1bnNhZmUuU2xpY2UoKCpieXRlKSh2LnB0ciksIHYubnVtKQogfQogZnVuYyAodiBWYWx1ZSkgZ2V0SWZhY2UoKSAoeCBpbnRlcmZhY2V7fSkgewogCSooKmlmYWNlSGVhZGVyKSh1bnNhZmUuUG9pbnRlcigmeCkpID0gaWZhY2VIZWFkZXJ7VHlwZTogdi50eXAsIERhdGE6IHYucHRyfQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeS9yZWdpc3RyeS5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVnaXN0cnkvcmVnaXN0cnkuZ28KaW5kZXggNTlmMDI0Yy4uNjI2N2RjNSAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeS9yZWdpc3RyeS5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZ2lzdHJ5L3JlZ2lzdHJ5LmdvCkBAIC01LDEyICs1LDEyIEBACiAvLyBQYWNrYWdlIHByb3RvcmVnaXN0cnkgcHJvdmlkZXMgZGF0YSBzdHJ1Y3R1cmVzIHRvIHJlZ2lzdGVyIGFuZCBsb29rdXAKIC8vIHByb3RvYnVmIGRlc2NyaXB0b3IgdHlwZXMuCiAvLwotLy8gVGhlIEZpbGVzIHJlZ2lzdHJ5IGNvbnRhaW5zIGZpbGUgZGVzY3JpcHRvcnMgYW5kIHByb3ZpZGVzIHRoZSBhYmlsaXR5CisvLyBUaGUgW0ZpbGVzXSByZWdpc3RyeSBjb250YWlucyBmaWxlIGRlc2NyaXB0b3JzIGFuZCBwcm92aWRlcyB0aGUgYWJpbGl0eQogLy8gdG8gaXRlcmF0ZSBvdmVyIHRoZSBmaWxlcyBvciBsb29rdXAgYSBzcGVjaWZpYyBkZXNjcmlwdG9yIHdpdGhpbiB0aGUgZmlsZXMuCi0vLyBGaWxlcyBvbmx5IGNvbnRhaW5zIHByb3RvYnVmIGRlc2NyaXB0b3JzIGFuZCBoYXMgbm8gdW5kZXJzdGFuZGluZyBvZiBHbworLy8gW0ZpbGVzXSBvbmx5IGNvbnRhaW5zIHByb3RvYnVmIGRlc2NyaXB0b3JzIGFuZCBoYXMgbm8gdW5kZXJzdGFuZGluZyBvZiBHbwogLy8gdHlwZSBpbmZvcm1hdGlvbiB0aGF0IG1heSBiZSBhc3NvY2lhdGVkIHdpdGggZWFjaCBkZXNjcmlwdG9yLgogLy8KLS8vIFRoZSBUeXBlcyByZWdpc3RyeSBjb250YWlucyBkZXNjcmlwdG9yIHR5cGVzIGZvciB3aGljaCB0aGVyZSBpcyBhIGtub3duCisvLyBUaGUgW1R5cGVzXSByZWdpc3RyeSBjb250YWlucyBkZXNjcmlwdG9yIHR5cGVzIGZvciB3aGljaCB0aGVyZSBpcyBhIGtub3duCiAvLyBHbyB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGRlc2NyaXB0b3IuIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGl0ZXJhdGUKIC8vIG92ZXIgdGhlIHJlZ2lzdGVyZWQgdHlwZXMgb3IgbG9va3VwIGEgdHlwZSBieSBuYW1lLgogcGFja2FnZSBwcm90b3JlZ2lzdHJ5CkBAIC0zMCw5ICszMCwxMSBAQAogLy8gY29uZmxpY3RQb2xpY3kgY29uZmlndXJlcyB0aGUgcG9saWN5IGZvciBoYW5kbGluZyByZWdpc3RyYXRpb24gY29uZmxpY3RzLgogLy8KIC8vIEl0IGNhbiBiZSBvdmVyLXdyaXR0ZW4gYXQgY29tcGlsZSB0aW1lIHdpdGggYSBsaW5rZXItaW5pdGlhbGl6ZWQgdmFyaWFibGU6CisvLwogLy8JZ28gYnVpbGQgLWxkZmxhZ3MgIi1YIGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeS5jb25mbGljdFBvbGljeT13YXJuIgogLy8KIC8vIEl0IGNhbiBiZSBvdmVyLXdyaXR0ZW4gYXQgcHJvZ3JhbSBleGVjdXRpb24gd2l0aCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZToKKy8vCiAvLwlHT0xBTkdfUFJPVE9CVUZfUkVHSVNUUkFUSU9OX0NPTkZMSUNUPXdhcm4gLi9tYWluCiAvLwogLy8gTmVpdGhlciBvZiB0aGUgYWJvdmUgYXJlIGNvdmVyZWQgYnkgdGhlIGNvbXBhdGliaWxpdHkgcHJvbWlzZSBhbmQKQEAgLTQ0LDcgKzQ2LDcgQEAKIC8vIEl0IGlzIGEgdmFyaWFibGUgc28gdGhhdCB0aGUgYmVoYXZpb3IgaXMgZWFzaWx5IG92ZXJyaWRkZW4gaW4gYW5vdGhlciBmaWxlLgogdmFyIGlnbm9yZUNvbmZsaWN0ID0gZnVuYyhkIHByb3RvcmVmbGVjdC5EZXNjcmlwdG9yLCBlcnIgZXJyb3IpIGJvb2wgewogCWNvbnN0IGVudiA9ICJHT0xBTkdfUFJPVE9CVUZfUkVHSVNUUkFUSU9OX0NPTkZMSUNUIgotCWNvbnN0IGZhcSA9ICJodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcmVmZXJlbmNlL2dvL2ZhcSNuYW1lc3BhY2UtY29uZmxpY3QiCisJY29uc3QgZmFxID0gImh0dHBzOi8vcHJvdG9idWYuZGV2L3JlZmVyZW5jZS9nby9mYXEjbmFtZXNwYWNlLWNvbmZsaWN0IgogCXBvbGljeSA6PSBjb25mbGljdFBvbGljeQogCWlmIHYgOj0gb3MuR2V0ZW52KGVudik7IHYgIT0gIiIgewogCQlwb2xpY3kgPSB2CkBAIC0yMTYsNyArMjE4LDcgQEAKIAogLy8gRmluZERlc2NyaXB0b3JCeU5hbWUgbG9va3MgdXAgYSBkZXNjcmlwdG9yIGJ5IHRoZSBmdWxsIG5hbWUuCiAvLwotLy8gVGhpcyByZXR1cm5zIChuaWwsIE5vdEZvdW5kKSBpZiBub3QgZm91bmQuCisvLyBUaGlzIHJldHVybnMgKG5pbCwgW05vdEZvdW5kXSkgaWYgbm90IGZvdW5kLgogZnVuYyAociAqRmlsZXMpIEZpbmREZXNjcmlwdG9yQnlOYW1lKG5hbWUgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKSAocHJvdG9yZWZsZWN0LkRlc2NyaXB0b3IsIGVycm9yKSB7CiAJaWYgciA9PSBuaWwgewogCQlyZXR1cm4gbmlsLCBOb3RGb3VuZApAQCAtMzA4LDcgKzMxMCw3IEBACiAKIC8vIEZpbmRGaWxlQnlQYXRoIGxvb2tzIHVwIGEgZmlsZSBieSB0aGUgcGF0aC4KIC8vCi0vLyBUaGlzIHJldHVybnMgKG5pbCwgTm90Rm91bmQpIGlmIG5vdCBmb3VuZC4KKy8vIFRoaXMgcmV0dXJucyAobmlsLCBbTm90Rm91bmRdKSBpZiBub3QgZm91bmQuCiAvLyBUaGlzIHJldHVybnMgYW4gZXJyb3IgaWYgbXVsdGlwbGUgZmlsZXMgaGF2ZSB0aGUgc2FtZSBwYXRoLgogZnVuYyAociAqRmlsZXMpIEZpbmRGaWxlQnlQYXRoKHBhdGggc3RyaW5nKSAocHJvdG9yZWZsZWN0LkZpbGVEZXNjcmlwdG9yLCBlcnJvcikgewogCWlmIHIgPT0gbmlsIHsKQEAgLTQyOSw3ICs0MzEsNyBAQAogLy8gQSBjb21wbGlhbnQgaW1wbGVtZW50YXRpb24gbXVzdCBkZXRlcm1pbmlzdGljYWxseSByZXR1cm4gdGhlIHNhbWUgdHlwZQogLy8gaWYgbm8gZXJyb3IgaXMgZW5jb3VudGVyZWQuCiAvLwotLy8gVGhlIFR5cGVzIHR5cGUgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZS4KKy8vIFRoZSBbVHlwZXNdIHR5cGUgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZS4KIHR5cGUgTWVzc2FnZVR5cGVSZXNvbHZlciBpbnRlcmZhY2UgewogCS8vIEZpbmRNZXNzYWdlQnlOYW1lIGxvb2tzIHVwIGEgbWVzc2FnZSBieSBpdHMgZnVsbCBuYW1lLgogCS8vIEUuZy4sICJnb29nbGUucHJvdG9idWYuQW55IgpAQCAtNDQ5LDcgKzQ1MSw3IEBACiAvLyBBIGNvbXBsaWFudCBpbXBsZW1lbnRhdGlvbiBtdXN0IGRldGVybWluaXN0aWNhbGx5IHJldHVybiB0aGUgc2FtZSB0eXBlCiAvLyBpZiBubyBlcnJvciBpcyBlbmNvdW50ZXJlZC4KIC8vCi0vLyBUaGUgVHlwZXMgdHlwZSBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlLgorLy8gVGhlIFtUeXBlc10gdHlwZSBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlLgogdHlwZSBFeHRlbnNpb25UeXBlUmVzb2x2ZXIgaW50ZXJmYWNlIHsKIAkvLyBGaW5kRXh0ZW5zaW9uQnlOYW1lIGxvb2tzIHVwIGEgZXh0ZW5zaW9uIGZpZWxkIGJ5IHRoZSBmaWVsZCdzIGZ1bGwgbmFtZS4KIAkvLyBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgZnVsbCBuYW1lIG9mIHRoZSBmaWVsZCBhcyBkZXRlcm1pbmVkIGJ5CkBAIC01ODgsNyArNTkwLDcgQEAKIC8vIEZpbmRFbnVtQnlOYW1lIGxvb2tzIHVwIGFuIGVudW0gYnkgaXRzIGZ1bGwgbmFtZS4KIC8vIEUuZy4sICJnb29nbGUucHJvdG9idWYuRmllbGQuS2luZCIuCiAvLwotLy8gVGhpcyByZXR1cm5zIChuaWwsIE5vdEZvdW5kKSBpZiBub3QgZm91bmQuCisvLyBUaGlzIHJldHVybnMgKG5pbCwgW05vdEZvdW5kXSkgaWYgbm90IGZvdW5kLgogZnVuYyAociAqVHlwZXMpIEZpbmRFbnVtQnlOYW1lKGVudW0gcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKSAocHJvdG9yZWZsZWN0LkVudW1UeXBlLCBlcnJvcikgewogCWlmIHIgPT0gbmlsIHsKIAkJcmV0dXJuIG5pbCwgTm90Rm91bmQKQEAgLTYwOSw3ICs2MTEsNyBAQAogLy8gRmluZE1lc3NhZ2VCeU5hbWUgbG9va3MgdXAgYSBtZXNzYWdlIGJ5IGl0cyBmdWxsIG5hbWUsCiAvLyBlLmcuICJnb29nbGUucHJvdG9idWYuQW55Ii4KIC8vCi0vLyBUaGlzIHJldHVybnMgKG5pbCwgTm90Rm91bmQpIGlmIG5vdCBmb3VuZC4KKy8vIFRoaXMgcmV0dXJucyAobmlsLCBbTm90Rm91bmRdKSBpZiBub3QgZm91bmQuCiBmdW5jIChyICpUeXBlcykgRmluZE1lc3NhZ2VCeU5hbWUobWVzc2FnZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUpIChwcm90b3JlZmxlY3QuTWVzc2FnZVR5cGUsIGVycm9yKSB7CiAJaWYgciA9PSBuaWwgewogCQlyZXR1cm4gbmlsLCBOb3RGb3VuZApAQCAtNjMwLDcgKzYzMiw3IEBACiAvLyBGaW5kTWVzc2FnZUJ5VVJMIGxvb2tzIHVwIGEgbWVzc2FnZSBieSBhIFVSTCBpZGVudGlmaWVyLgogLy8gU2VlIGRvY3VtZW50YXRpb24gb24gZ29vZ2xlLnByb3RvYnVmLkFueS50eXBlX3VybCBmb3IgdGhlIFVSTCBmb3JtYXQuCiAvLwotLy8gVGhpcyByZXR1cm5zIChuaWwsIE5vdEZvdW5kKSBpZiBub3QgZm91bmQuCisvLyBUaGlzIHJldHVybnMgKG5pbCwgW05vdEZvdW5kXSkgaWYgbm90IGZvdW5kLgogZnVuYyAociAqVHlwZXMpIEZpbmRNZXNzYWdlQnlVUkwodXJsIHN0cmluZykgKHByb3RvcmVmbGVjdC5NZXNzYWdlVHlwZSwgZXJyb3IpIHsKIAkvLyBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gRmluZE1lc3NhZ2VCeU5hbWUgYnV0CiAJLy8gdHJ1bmNhdGVzIGFueXRoaW5nIGJlZm9yZSBhbmQgaW5jbHVkaW5nICcvJyBpbiB0aGUgVVJMLgpAQCAtNjYwLDcgKzY2Miw3IEBACiAvLyB3aGVyZSB0aGUgZXh0ZW5zaW9uIGlzIGRlY2xhcmVkIGFuZCBpcyB1bnJlbGF0ZWQgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGUKIC8vIG1lc3NhZ2UgYmVpbmcgZXh0ZW5kZWQuCiAvLwotLy8gVGhpcyByZXR1cm5zIChuaWwsIE5vdEZvdW5kKSBpZiBub3QgZm91bmQuCisvLyBUaGlzIHJldHVybnMgKG5pbCwgW05vdEZvdW5kXSkgaWYgbm90IGZvdW5kLgogZnVuYyAociAqVHlwZXMpIEZpbmRFeHRlbnNpb25CeU5hbWUoZmllbGQgcHJvdG9yZWZsZWN0LkZ1bGxOYW1lKSAocHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUsIGVycm9yKSB7CiAJaWYgciA9PSBuaWwgewogCQlyZXR1cm4gbmlsLCBOb3RGb3VuZApAQCAtNzAxLDcgKzcwMyw3IEBACiAvLyBGaW5kRXh0ZW5zaW9uQnlOdW1iZXIgbG9va3MgdXAgYSBleHRlbnNpb24gZmllbGQgYnkgdGhlIGZpZWxkIG51bWJlcgogLy8gd2l0aGluIHNvbWUgcGFyZW50IG1lc3NhZ2UsIGlkZW50aWZpZWQgYnkgZnVsbCBuYW1lLgogLy8KLS8vIFRoaXMgcmV0dXJucyAobmlsLCBOb3RGb3VuZCkgaWYgbm90IGZvdW5kLgorLy8gVGhpcyByZXR1cm5zIChuaWwsIFtOb3RGb3VuZF0pIGlmIG5vdCBmb3VuZC4KIGZ1bmMgKHIgKlR5cGVzKSBGaW5kRXh0ZW5zaW9uQnlOdW1iZXIobWVzc2FnZSBwcm90b3JlZmxlY3QuRnVsbE5hbWUsIGZpZWxkIHByb3RvcmVmbGVjdC5GaWVsZE51bWJlcikgKHByb3RvcmVmbGVjdC5FeHRlbnNpb25UeXBlLCBlcnJvcikgewogCWlmIHIgPT0gbmlsIHsKIAkJcmV0dXJuIG5pbCwgTm90Rm91bmQKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UvbWV0aG9kcy5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9ydW50aW1lL3Byb3RvaWZhY2UvbWV0aG9kcy5nbwppbmRleCAzMmMwNGY2Li40NGNmNDY3IDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2lmYWNlL21ldGhvZHMuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3J1bnRpbWUvcHJvdG9pZmFjZS9tZXRob2RzLmdvCkBAIC0xMDMsNiArMTAzLDcgQEAKIAkJRmluZEV4dGVuc2lvbkJ5TmFtZShmaWVsZCBwcm90b3JlZmxlY3QuRnVsbE5hbWUpIChwcm90b3JlZmxlY3QuRXh0ZW5zaW9uVHlwZSwgZXJyb3IpCiAJCUZpbmRFeHRlbnNpb25CeU51bWJlcihtZXNzYWdlIHByb3RvcmVmbGVjdC5GdWxsTmFtZSwgZmllbGQgcHJvdG9yZWZsZWN0LkZpZWxkTnVtYmVyKSAocHJvdG9yZWZsZWN0LkV4dGVuc2lvblR5cGUsIGVycm9yKQogCX0KKwlEZXB0aCBpbnQKIH0KIAogLy8gVW5tYXJzaGFsT3V0cHV0IGlzIG91dHB1dCBmcm9tIHRoZSBVbm1hcnNoYWwgbWV0aG9kLgpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3J1bnRpbWUvcHJvdG9pbXBsL3ZlcnNpb24uZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2ltcGwvdmVyc2lvbi5nbwppbmRleCBmZjA5NGUxLi5hMTA1Y2IyIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2ltcGwvdmVyc2lvbi5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcnVudGltZS9wcm90b2ltcGwvdmVyc2lvbi5nbwpAQCAtMjYsMTYgKzI2LDE5IEBACiAvLyBFbmZvcmNlVmVyc2lvbiBpcyB1c2VkIGJ5IGNvZGUgZ2VuZXJhdGVkIGJ5IHByb3RvYy1nZW4tZ28KIC8vIHRvIHN0YXRpY2FsbHkgZW5mb3JjZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZlcnNpb25zIG9mIHRoaXMgcGFja2FnZS4KIC8vIEEgY29tcGlsYXRpb24gZmFpbHVyZSBpbXBsaWVzIGVpdGhlciB0aGF0OgotLy8JKiB0aGUgcnVudGltZSBwYWNrYWdlIGlzIHRvbyBvbGQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQgT1IKLS8vCSogdGhlIGdlbmVyYXRlZCBjb2RlIGlzIHRvbyBvbGQgYW5kIG5lZWRzIHRvIGJlIHJlZ2VuZXJhdGVkLgorLy8gICAtIHRoZSBydW50aW1lIHBhY2thZ2UgaXMgdG9vIG9sZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZCBPUgorLy8gICAtIHRoZSBnZW5lcmF0ZWQgY29kZSBpcyB0b28gb2xkIGFuZCBuZWVkcyB0byBiZSByZWdlbmVyYXRlZC4KIC8vCiAvLyBUaGUgcnVudGltZSBwYWNrYWdlIGNhbiBiZSB1cGdyYWRlZCBieSBydW5uaW5nOgorLy8KIC8vCWdvIGdldCBnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1ZgogLy8KIC8vIFRoZSBnZW5lcmF0ZWQgY29kZSBjYW4gYmUgcmVnZW5lcmF0ZWQgYnkgcnVubmluZzoKKy8vCiAvLwlwcm90b2MgLS1nb19vdXQ9JHtQUk9UT0NfR0VOX0dPX0FSR1N9ICR7UFJPVE9fRklMRVN9CiAvLwogLy8gRXhhbXBsZSB1c2FnZSBieSBnZW5lcmF0ZWQgY29kZToKKy8vCiAvLwljb25zdCAoCiAvLwkJLy8gVmVyaWZ5IHRoYXQgdGhpcyBnZW5lcmF0ZWQgY29kZSBpcyBzdWZmaWNpZW50bHkgdXAtdG8tZGF0ZS4KIC8vCQlfID0gcHJvdG9pbXBsLkVuZm9yY2VWZXJzaW9uKGdlblZlcnNpb24gLSBwcm90b2ltcGwuTWluVmVyc2lvbikKQEAgLTQ5LDYgKzUyLDcgQEAKIHR5cGUgRW5mb3JjZVZlcnNpb24gdWludAogCiAvLyBUaGlzIGVuZm9yY2VzIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50OgorLy8KIC8vCU1pblZlcnNpb24g4omkIEdlblZlcnNpb24g4omkIE1heFZlcnNpb24KIGNvbnN0ICgKIAlfID0gRW5mb3JjZVZlcnNpb24oR2VuVmVyc2lvbiAtIE1pblZlcnNpb24pCmRpZmYgLS1naXQgYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBiL2Rlc2NyaXB0b3IucGIuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBiL2Rlc2NyaXB0b3IucGIuZ28KaW5kZXggYWJlNGFiNS4uNzg2MjRjZiAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2Rlc2NyaXB0b3JwYi9kZXNjcmlwdG9yLnBiLmdvCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9kZXNjcmlwdG9ycGIvZGVzY3JpcHRvci5wYi5nbwpAQCAtNDgsNiArNDgsMTYxIEBACiAJc3luYyAic3luYyIKICkKIAorLy8gVGhlIGZ1bGwgc2V0IG9mIGtub3duIGVkaXRpb25zLgordHlwZSBFZGl0aW9uIGludDMyCisKK2NvbnN0ICgKKwkvLyBBIHBsYWNlaG9sZGVyIGZvciBhbiB1bmtub3duIGVkaXRpb24gdmFsdWUuCisJRWRpdGlvbl9FRElUSU9OX1VOS05PV04gRWRpdGlvbiA9IDAKKwkvLyBMZWdhY3kgc3ludGF4ICJlZGl0aW9ucyIuICBUaGVzZSBwcmUtZGF0ZSBlZGl0aW9ucywgYnV0IGJlaGF2ZSBtdWNoIGxpa2UKKwkvLyBkaXN0aW5jdCBlZGl0aW9ucy4gIFRoZXNlIGNhbid0IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZWRpdGlvbiBvZiBwcm90bworCS8vIGZpbGVzLCBidXQgZmVhdHVyZSBkZWZpbml0aW9ucyBtdXN0IHN1cHBseSBwcm90bzIvcHJvdG8zIGRlZmF1bHRzIGZvcgorCS8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCUVkaXRpb25fRURJVElPTl9QUk9UTzIgRWRpdGlvbiA9IDk5OAorCUVkaXRpb25fRURJVElPTl9QUk9UTzMgRWRpdGlvbiA9IDk5OQorCS8vIEVkaXRpb25zIHRoYXQgaGF2ZSBiZWVuIHJlbGVhc2VkLiAgVGhlIHNwZWNpZmljIHZhbHVlcyBhcmUgYXJiaXRyYXJ5IGFuZAorCS8vIHNob3VsZCBub3QgYmUgZGVwZW5kZWQgb24sIGJ1dCB0aGV5IHdpbGwgYWx3YXlzIGJlIHRpbWUtb3JkZXJlZCBmb3IgZWFzeQorCS8vIGNvbXBhcmlzb24uCisJRWRpdGlvbl9FRElUSU9OXzIwMjMgRWRpdGlvbiA9IDEwMDAKKwlFZGl0aW9uX0VESVRJT05fMjAyNCBFZGl0aW9uID0gMTAwMQorCS8vIFBsYWNlaG9sZGVyIGVkaXRpb25zIGZvciB0ZXN0aW5nIGZlYXR1cmUgcmVzb2x1dGlvbi4gIFRoZXNlIHNob3VsZCBub3QgYmUKKwkvLyB1c2VkIG9yIHJlbHllZCBvbiBvdXRzaWRlIG9mIHRlc3RzLgorCUVkaXRpb25fRURJVElPTl8xX1RFU1RfT05MWSAgICAgRWRpdGlvbiA9IDEKKwlFZGl0aW9uX0VESVRJT05fMl9URVNUX09OTFkgICAgIEVkaXRpb24gPSAyCisJRWRpdGlvbl9FRElUSU9OXzk5OTk3X1RFU1RfT05MWSBFZGl0aW9uID0gOTk5OTcKKwlFZGl0aW9uX0VESVRJT05fOTk5OThfVEVTVF9PTkxZIEVkaXRpb24gPSA5OTk5OAorCUVkaXRpb25fRURJVElPTl85OTk5OV9URVNUX09OTFkgRWRpdGlvbiA9IDk5OTk5CisJLy8gUGxhY2Vob2xkZXIgZm9yIHNwZWNpZnlpbmcgdW5ib3VuZGVkIGVkaXRpb24gc3VwcG9ydC4gIFRoaXMgc2hvdWxkIG9ubHkKKwkvLyBldmVyIGJlIHVzZWQgYnkgcGx1Z2lucyB0aGF0IGNhbiBleHBlY3QgdG8gbmV2ZXIgcmVxdWlyZSBhbnkgY2hhbmdlcyB0bworCS8vIHN1cHBvcnQgYSBuZXcgZWRpdGlvbi4KKwlFZGl0aW9uX0VESVRJT05fTUFYIEVkaXRpb24gPSAyMTQ3NDgzNjQ3CispCisKKy8vIEVudW0gdmFsdWUgbWFwcyBmb3IgRWRpdGlvbi4KK3ZhciAoCisJRWRpdGlvbl9uYW1lID0gbWFwW2ludDMyXXN0cmluZ3sKKwkJMDogICAgICAgICAgIkVESVRJT05fVU5LTk9XTiIsCisJCTk5ODogICAgICAgICJFRElUSU9OX1BST1RPMiIsCisJCTk5OTogICAgICAgICJFRElUSU9OX1BST1RPMyIsCisJCTEwMDA6ICAgICAgICJFRElUSU9OXzIwMjMiLAorCQkxMDAxOiAgICAgICAiRURJVElPTl8yMDI0IiwKKwkJMTogICAgICAgICAgIkVESVRJT05fMV9URVNUX09OTFkiLAorCQkyOiAgICAgICAgICAiRURJVElPTl8yX1RFU1RfT05MWSIsCisJCTk5OTk3OiAgICAgICJFRElUSU9OXzk5OTk3X1RFU1RfT05MWSIsCisJCTk5OTk4OiAgICAgICJFRElUSU9OXzk5OTk4X1RFU1RfT05MWSIsCisJCTk5OTk5OiAgICAgICJFRElUSU9OXzk5OTk5X1RFU1RfT05MWSIsCisJCTIxNDc0ODM2NDc6ICJFRElUSU9OX01BWCIsCisJfQorCUVkaXRpb25fdmFsdWUgPSBtYXBbc3RyaW5nXWludDMyeworCQkiRURJVElPTl9VTktOT1dOIjogICAgICAgICAwLAorCQkiRURJVElPTl9QUk9UTzIiOiAgICAgICAgICA5OTgsCisJCSJFRElUSU9OX1BST1RPMyI6ICAgICAgICAgIDk5OSwKKwkJIkVESVRJT05fMjAyMyI6ICAgICAgICAgICAgMTAwMCwKKwkJIkVESVRJT05fMjAyNCI6ICAgICAgICAgICAgMTAwMSwKKwkJIkVESVRJT05fMV9URVNUX09OTFkiOiAgICAgMSwKKwkJIkVESVRJT05fMl9URVNUX09OTFkiOiAgICAgMiwKKwkJIkVESVRJT05fOTk5OTdfVEVTVF9PTkxZIjogOTk5OTcsCisJCSJFRElUSU9OXzk5OTk4X1RFU1RfT05MWSI6IDk5OTk4LAorCQkiRURJVElPTl85OTk5OV9URVNUX09OTFkiOiA5OTk5OSwKKwkJIkVESVRJT05fTUFYIjogICAgICAgICAgICAgMjE0NzQ4MzY0NywKKwl9CispCisKK2Z1bmMgKHggRWRpdGlvbikgRW51bSgpICpFZGl0aW9uIHsKKwlwIDo9IG5ldyhFZGl0aW9uKQorCSpwID0geAorCXJldHVybiBwCit9CisKK2Z1bmMgKHggRWRpdGlvbikgU3RyaW5nKCkgc3RyaW5nIHsKKwlyZXR1cm4gcHJvdG9pbXBsLlguRW51bVN0cmluZ09mKHguRGVzY3JpcHRvcigpLCBwcm90b3JlZmxlY3QuRW51bU51bWJlcih4KSkKK30KKworZnVuYyAoRWRpdGlvbikgRGVzY3JpcHRvcigpIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvciB7CisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzBdLkRlc2NyaXB0b3IoKQorfQorCitmdW5jIChFZGl0aW9uKSBUeXBlKCkgcHJvdG9yZWZsZWN0LkVudW1UeXBlIHsKKwlyZXR1cm4gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzBdCit9CisKK2Z1bmMgKHggRWRpdGlvbikgTnVtYmVyKCkgcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIgeworCXJldHVybiBwcm90b3JlZmxlY3QuRW51bU51bWJlcih4KQorfQorCisvLyBEZXByZWNhdGVkOiBEbyBub3QgdXNlLgorZnVuYyAoeCAqRWRpdGlvbikgVW5tYXJzaGFsSlNPTihiIFtdYnl0ZSkgZXJyb3IgeworCW51bSwgZXJyIDo9IHByb3RvaW1wbC5YLlVubWFyc2hhbEpTT05FbnVtKHguRGVzY3JpcHRvcigpLCBiKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCSp4ID0gRWRpdGlvbihudW0pCisJcmV0dXJuIG5pbAorfQorCisvLyBEZXByZWNhdGVkOiBVc2UgRWRpdGlvbi5EZXNjcmlwdG9yIGluc3RlYWQuCitmdW5jIChFZGl0aW9uKSBFbnVtRGVzY3JpcHRvcigpIChbXWJ5dGUsIFtdaW50KSB7CisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0daSVAoKSwgW11pbnR7MH0KK30KKworLy8gVGhlIHZlcmlmaWNhdGlvbiBzdGF0ZSBvZiB0aGUgZXh0ZW5zaW9uIHJhbmdlLgordHlwZSBFeHRlbnNpb25SYW5nZU9wdGlvbnNfVmVyaWZpY2F0aW9uU3RhdGUgaW50MzIKKworY29uc3QgKAorCS8vIEFsbCB0aGUgZXh0ZW5zaW9ucyBvZiB0aGUgcmFuZ2UgbXVzdCBiZSBkZWNsYXJlZC4KKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfREVDTEFSQVRJT04gRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX1ZlcmlmaWNhdGlvblN0YXRlID0gMAorCUV4dGVuc2lvblJhbmdlT3B0aW9uc19VTlZFUklGSUVEICBFeHRlbnNpb25SYW5nZU9wdGlvbnNfVmVyaWZpY2F0aW9uU3RhdGUgPSAxCispCisKKy8vIEVudW0gdmFsdWUgbWFwcyBmb3IgRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX1ZlcmlmaWNhdGlvblN0YXRlLgordmFyICgKKwlFeHRlbnNpb25SYW5nZU9wdGlvbnNfVmVyaWZpY2F0aW9uU3RhdGVfbmFtZSA9IG1hcFtpbnQzMl1zdHJpbmd7CisJCTA6ICJERUNMQVJBVElPTiIsCisJCTE6ICJVTlZFUklGSUVEIiwKKwl9CisJRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX1ZlcmlmaWNhdGlvblN0YXRlX3ZhbHVlID0gbWFwW3N0cmluZ11pbnQzMnsKKwkJIkRFQ0xBUkFUSU9OIjogMCwKKwkJIlVOVkVSSUZJRUQiOiAgMSwKKwl9CispCisKK2Z1bmMgKHggRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX1ZlcmlmaWNhdGlvblN0YXRlKSBFbnVtKCkgKkV4dGVuc2lvblJhbmdlT3B0aW9uc19WZXJpZmljYXRpb25TdGF0ZSB7CisJcCA6PSBuZXcoRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX1ZlcmlmaWNhdGlvblN0YXRlKQorCSpwID0geAorCXJldHVybiBwCit9CisKK2Z1bmMgKHggRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX1ZlcmlmaWNhdGlvblN0YXRlKSBTdHJpbmcoKSBzdHJpbmcgeworCXJldHVybiBwcm90b2ltcGwuWC5FbnVtU3RyaW5nT2YoeC5EZXNjcmlwdG9yKCksIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKHgpKQorfQorCitmdW5jIChFeHRlbnNpb25SYW5nZU9wdGlvbnNfVmVyaWZpY2F0aW9uU3RhdGUpIERlc2NyaXB0b3IoKSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1sxXS5EZXNjcmlwdG9yKCkKK30KKworZnVuYyAoRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX1ZlcmlmaWNhdGlvblN0YXRlKSBUeXBlKCkgcHJvdG9yZWZsZWN0LkVudW1UeXBlIHsKKwlyZXR1cm4gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzFdCit9CisKK2Z1bmMgKHggRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX1ZlcmlmaWNhdGlvblN0YXRlKSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRW51bU51bWJlciB7CisJcmV0dXJuIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKHgpCit9CisKKy8vIERlcHJlY2F0ZWQ6IERvIG5vdCB1c2UuCitmdW5jICh4ICpFeHRlbnNpb25SYW5nZU9wdGlvbnNfVmVyaWZpY2F0aW9uU3RhdGUpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKKwludW0sIGVyciA6PSBwcm90b2ltcGwuWC5Vbm1hcnNoYWxKU09ORW51bSh4LkRlc2NyaXB0b3IoKSwgYikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkqeCA9IEV4dGVuc2lvblJhbmdlT3B0aW9uc19WZXJpZmljYXRpb25TdGF0ZShudW0pCisJcmV0dXJuIG5pbAorfQorCisvLyBEZXByZWNhdGVkOiBVc2UgRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX1ZlcmlmaWNhdGlvblN0YXRlLkRlc2NyaXB0b3IgaW5zdGVhZC4KK2Z1bmMgKEV4dGVuc2lvblJhbmdlT3B0aW9uc19WZXJpZmljYXRpb25TdGF0ZSkgRW51bURlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezMsIDB9Cit9CisKIHR5cGUgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSBpbnQzMgogCiBjb25zdCAoCkBAIC02Nyw5ICsyMjIsMTAgQEAKIAlGaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX0JPT0wgICAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSA9IDgKIAlGaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX1NUUklORyAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSA9IDkKIAkvLyBUYWctZGVsaW1pdGVkIGFnZ3JlZ2F0ZS4KLQkvLyBHcm91cCB0eXBlIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCBzdXBwb3J0ZWQgaW4gcHJvdG8zLiBIb3dldmVyLCBQcm90bzMKKwkvLyBHcm91cCB0eXBlIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCBzdXBwb3J0ZWQgYWZ0ZXIgZ29vZ2xlLnByb3RvYnVmLiBIb3dldmVyLCBQcm90bzMKIAkvLyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gcGFyc2UgdGhlIGdyb3VwIHdpcmUgZm9ybWF0IGFuZAotCS8vIHRyZWF0IGdyb3VwIGZpZWxkcyBhcyB1bmtub3duIGZpZWxkcy4KKwkvLyB0cmVhdCBncm91cCBmaWVsZHMgYXMgdW5rbm93biBmaWVsZHMuICBJbiBFZGl0aW9ucywgdGhlIGdyb3VwIHdpcmUgZm9ybWF0CisJLy8gY2FuIGJlIGVuYWJsZWQgdmlhIHRoZSBgbWVzc2FnZV9lbmNvZGluZ2AgZmVhdHVyZS4KIAlGaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX0dST1VQICAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSA9IDEwCiAJRmllbGREZXNjcmlwdG9yUHJvdG9fVFlQRV9NRVNTQUdFIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUgPSAxMSAvLyBMZW5ndGgtZGVsaW1pdGVkIGFnZ3JlZ2F0ZS4KIAkvLyBOZXcgaW4gdmVyc2lvbiAyLgpAQCAtMTM3LDExICsyOTMsMTEgQEAKIH0KIAogZnVuYyAoRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSkgRGVzY3JpcHRvcigpIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvciB7Ci0JcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzBdLkRlc2NyaXB0b3IoKQorCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1syXS5EZXNjcmlwdG9yKCkKIH0KIAogZnVuYyAoRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSkgVHlwZSgpIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7Ci0JcmV0dXJuICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1swXQorCXJldHVybiAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMl0KIH0KIAogZnVuYyAoeCBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlKSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRW51bU51bWJlciB7CkBAIC0xNjgsMjEgKzMyNCwyNCBAQAogY29uc3QgKAogCS8vIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9ycwogCUZpZWxkRGVzY3JpcHRvclByb3RvX0xBQkVMX09QVElPTkFMIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsID0gMQotCUZpZWxkRGVzY3JpcHRvclByb3RvX0xBQkVMX1JFUVVJUkVEIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsID0gMgogCUZpZWxkRGVzY3JpcHRvclByb3RvX0xBQkVMX1JFUEVBVEVEIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsID0gMworCS8vIFRoZSByZXF1aXJlZCBsYWJlbCBpcyBvbmx5IGFsbG93ZWQgaW4gZ29vZ2xlLnByb3RvYnVmLiAgSW4gcHJvdG8zIGFuZCBFZGl0aW9ucworCS8vIGl0J3MgZXhwbGljaXRseSBwcm9oaWJpdGVkLiAgSW4gRWRpdGlvbnMsIHRoZSBgZmllbGRfcHJlc2VuY2VgIGZlYXR1cmUKKwkvLyBjYW4gYmUgdXNlZCB0byBnZXQgdGhpcyBiZWhhdmlvci4KKwlGaWVsZERlc2NyaXB0b3JQcm90b19MQUJFTF9SRVFVSVJFRCBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbCA9IDIKICkKIAogLy8gRW51bSB2YWx1ZSBtYXBzIGZvciBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbC4KIHZhciAoCiAJRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxfbmFtZSA9IG1hcFtpbnQzMl1zdHJpbmd7CiAJCTE6ICJMQUJFTF9PUFRJT05BTCIsCi0JCTI6ICJMQUJFTF9SRVFVSVJFRCIsCiAJCTM6ICJMQUJFTF9SRVBFQVRFRCIsCisJCTI6ICJMQUJFTF9SRVFVSVJFRCIsCiAJfQogCUZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsX3ZhbHVlID0gbWFwW3N0cmluZ11pbnQzMnsKIAkJIkxBQkVMX09QVElPTkFMIjogMSwKLQkJIkxBQkVMX1JFUVVJUkVEIjogMiwKIAkJIkxBQkVMX1JFUEVBVEVEIjogMywKKwkJIkxBQkVMX1JFUVVJUkVEIjogMiwKIAl9CiApCiAKQEAgLTE5NywxMSArMzU2LDExIEBACiB9CiAKIGZ1bmMgKEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsKSBEZXNjcmlwdG9yKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKLQlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMV0uRGVzY3JpcHRvcigpCisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzNdLkRlc2NyaXB0b3IoKQogfQogCiBmdW5jIChGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbCkgVHlwZSgpIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7Ci0JcmV0dXJuICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1sxXQorCXJldHVybiAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbM10KIH0KIAogZnVuYyAoeCBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbCkgTnVtYmVyKCkgcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIgewpAQCAtMjU4LDExICs0MTcsMTEgQEAKIH0KIAogZnVuYyAoRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlKSBEZXNjcmlwdG9yKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKLQlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMl0uRGVzY3JpcHRvcigpCisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzRdLkRlc2NyaXB0b3IoKQogfQogCiBmdW5jIChGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUpIFR5cGUoKSBwcm90b3JlZmxlY3QuRW51bVR5cGUgewotCXJldHVybiAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMl0KKwlyZXR1cm4gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzRdCiB9CiAKIGZ1bmMgKHggRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlKSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRW51bU51bWJlciB7CkBAIC0yODgsNyArNDQ3LDEzIEBACiAKIGNvbnN0ICgKIAkvLyBEZWZhdWx0IG1vZGUuCi0JRmllbGRPcHRpb25zX1NUUklORyAgICAgICBGaWVsZE9wdGlvbnNfQ1R5cGUgPSAwCisJRmllbGRPcHRpb25zX1NUUklORyBGaWVsZE9wdGlvbnNfQ1R5cGUgPSAwCisJLy8gVGhlIG9wdGlvbiBbY3R5cGU9Q09SRF0gbWF5IGJlIGFwcGxpZWQgdG8gYSBub24tcmVwZWF0ZWQgZmllbGQgb2YgdHlwZQorCS8vICJieXRlcyIuIEl0IGluZGljYXRlcyB0aGF0IGluIEMrKywgdGhlIGRhdGEgc2hvdWxkIGJlIHN0b3JlZCBpbiBhIENvcmQKKwkvLyBpbnN0ZWFkIG9mIGEgc3RyaW5nLiAgRm9yIHZlcnkgbGFyZ2Ugc3RyaW5ncywgdGhpcyBtYXkgcmVkdWNlIG1lbW9yeQorCS8vIGZyYWdtZW50YXRpb24uIEl0IG1heSBhbHNvIGFsbG93IGJldHRlciBwZXJmb3JtYW5jZSB3aGVuIHBhcnNpbmcgZnJvbSBhCisJLy8gQ29yZCwgb3Igd2hlbiBwYXJzaW5nIHdpdGggYWxpYXNpbmcgZW5hYmxlZCwgYXMgdGhlIHBhcnNlZCBDb3JkIG1heSB0aGVuCisJLy8gYWxpYXMgdGhlIG9yaWdpbmFsIGJ1ZmZlci4KIAlGaWVsZE9wdGlvbnNfQ09SRCAgICAgICAgIEZpZWxkT3B0aW9uc19DVHlwZSA9IDEKIAlGaWVsZE9wdGlvbnNfU1RSSU5HX1BJRUNFIEZpZWxkT3B0aW9uc19DVHlwZSA9IDIKICkKQEAgLTMxOCwxMSArNDgzLDExIEBACiB9CiAKIGZ1bmMgKEZpZWxkT3B0aW9uc19DVHlwZSkgRGVzY3JpcHRvcigpIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvciB7Ci0JcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzNdLkRlc2NyaXB0b3IoKQorCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1s1XS5EZXNjcmlwdG9yKCkKIH0KIAogZnVuYyAoRmllbGRPcHRpb25zX0NUeXBlKSBUeXBlKCkgcHJvdG9yZWZsZWN0LkVudW1UeXBlIHsKLQlyZXR1cm4gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzNdCisJcmV0dXJuICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1s1XQogfQogCiBmdW5jICh4IEZpZWxkT3B0aW9uc19DVHlwZSkgTnVtYmVyKCkgcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIgewpAQCAtMzgwLDExICs1NDUsMTEgQEAKIH0KIAogZnVuYyAoRmllbGRPcHRpb25zX0pTVHlwZSkgRGVzY3JpcHRvcigpIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvciB7Ci0JcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzRdLkRlc2NyaXB0b3IoKQorCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1s2XS5EZXNjcmlwdG9yKCkKIH0KIAogZnVuYyAoRmllbGRPcHRpb25zX0pTVHlwZSkgVHlwZSgpIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7Ci0JcmV0dXJuICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1s0XQorCXJldHVybiAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbNl0KIH0KIAogZnVuYyAoeCBGaWVsZE9wdGlvbnNfSlNUeXBlKSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRW51bU51bWJlciB7CkBAIC00MDYsNiArNTcxLDE1MiBAQAogCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezEyLCAxfQogfQogCisvLyBJZiBzZXQgdG8gUkVURU5USU9OX1NPVVJDRSwgdGhlIG9wdGlvbiB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgYmluYXJ5LgorLy8gTm90ZTogYXMgb2YgSmFudWFyeSAyMDIzLCBzdXBwb3J0IGZvciB0aGlzIGlzIGluIHByb2dyZXNzIGFuZCBkb2VzIG5vdCB5ZXQKKy8vIGhhdmUgYW4gZWZmZWN0IChiLzI2NDU5MzQ4OSkuCit0eXBlIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24gaW50MzIKKworY29uc3QgKAorCUZpZWxkT3B0aW9uc19SRVRFTlRJT05fVU5LTk9XTiBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uID0gMAorCUZpZWxkT3B0aW9uc19SRVRFTlRJT05fUlVOVElNRSBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uID0gMQorCUZpZWxkT3B0aW9uc19SRVRFTlRJT05fU09VUkNFICBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uID0gMgorKQorCisvLyBFbnVtIHZhbHVlIG1hcHMgZm9yIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24uCit2YXIgKAorCUZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb25fbmFtZSA9IG1hcFtpbnQzMl1zdHJpbmd7CisJCTA6ICJSRVRFTlRJT05fVU5LTk9XTiIsCisJCTE6ICJSRVRFTlRJT05fUlVOVElNRSIsCisJCTI6ICJSRVRFTlRJT05fU09VUkNFIiwKKwl9CisJRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbl92YWx1ZSA9IG1hcFtzdHJpbmddaW50MzJ7CisJCSJSRVRFTlRJT05fVU5LTk9XTiI6IDAsCisJCSJSRVRFTlRJT05fUlVOVElNRSI6IDEsCisJCSJSRVRFTlRJT05fU09VUkNFIjogIDIsCisJfQorKQorCitmdW5jICh4IEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24pIEVudW0oKSAqRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbiB7CisJcCA6PSBuZXcoRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbikKKwkqcCA9IHgKKwlyZXR1cm4gcAorfQorCitmdW5jICh4IEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24pIFN0cmluZygpIHN0cmluZyB7CisJcmV0dXJuIHByb3RvaW1wbC5YLkVudW1TdHJpbmdPZih4LkRlc2NyaXB0b3IoKSwgcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIoeCkpCit9CisKK2Z1bmMgKEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24pIERlc2NyaXB0b3IoKSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1s3XS5EZXNjcmlwdG9yKCkKK30KKworZnVuYyAoRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbikgVHlwZSgpIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7CisJcmV0dXJuICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1s3XQorfQorCitmdW5jICh4IEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24pIE51bWJlcigpIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyIHsKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIoeCkKK30KKworLy8gRGVwcmVjYXRlZDogRG8gbm90IHVzZS4KK2Z1bmMgKHggKkZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24pIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKKwludW0sIGVyciA6PSBwcm90b2ltcGwuWC5Vbm1hcnNoYWxKU09ORW51bSh4LkRlc2NyaXB0b3IoKSwgYikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkqeCA9IEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24obnVtKQorCXJldHVybiBuaWwKK30KKworLy8gRGVwcmVjYXRlZDogVXNlIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24uRGVzY3JpcHRvciBpbnN0ZWFkLgorZnVuYyAoRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbikgRW51bURlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezEyLCAyfQorfQorCisvLyBUaGlzIGluZGljYXRlcyB0aGUgdHlwZXMgb2YgZW50aXRpZXMgdGhhdCB0aGUgZmllbGQgbWF5IGFwcGx5IHRvIHdoZW4gdXNlZAorLy8gYXMgYW4gb3B0aW9uLiBJZiBpdCBpcyB1bnNldCwgdGhlbiB0aGUgZmllbGQgbWF5IGJlIGZyZWVseSB1c2VkIGFzIGFuCisvLyBvcHRpb24gb24gYW55IGtpbmQgb2YgZW50aXR5LiBOb3RlOiBhcyBvZiBKYW51YXJ5IDIwMjMsIHN1cHBvcnQgZm9yIHRoaXMgaXMKKy8vIGluIHByb2dyZXNzIGFuZCBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBlZmZlY3QgKGIvMjY0NTkzNDg5KS4KK3R5cGUgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUgaW50MzIKKworY29uc3QgKAorCUZpZWxkT3B0aW9uc19UQVJHRVRfVFlQRV9VTktOT1dOICAgICAgICAgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUgPSAwCisJRmllbGRPcHRpb25zX1RBUkdFVF9UWVBFX0ZJTEUgICAgICAgICAgICBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZSA9IDEKKwlGaWVsZE9wdGlvbnNfVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlID0gMgorCUZpZWxkT3B0aW9uc19UQVJHRVRfVFlQRV9NRVNTQUdFICAgICAgICAgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUgPSAzCisJRmllbGRPcHRpb25zX1RBUkdFVF9UWVBFX0ZJRUxEICAgICAgICAgICBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZSA9IDQKKwlGaWVsZE9wdGlvbnNfVEFSR0VUX1RZUEVfT05FT0YgICAgICAgICAgIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlID0gNQorCUZpZWxkT3B0aW9uc19UQVJHRVRfVFlQRV9FTlVNICAgICAgICAgICAgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUgPSA2CisJRmllbGRPcHRpb25zX1RBUkdFVF9UWVBFX0VOVU1fRU5UUlkgICAgICBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZSA9IDcKKwlGaWVsZE9wdGlvbnNfVEFSR0VUX1RZUEVfU0VSVklDRSAgICAgICAgIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlID0gOAorCUZpZWxkT3B0aW9uc19UQVJHRVRfVFlQRV9NRVRIT0QgICAgICAgICAgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUgPSA5CispCisKKy8vIEVudW0gdmFsdWUgbWFwcyBmb3IgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuCit2YXIgKAorCUZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlX25hbWUgPSBtYXBbaW50MzJdc3RyaW5neworCQkwOiAiVEFSR0VUX1RZUEVfVU5LTk9XTiIsCisJCTE6ICJUQVJHRVRfVFlQRV9GSUxFIiwKKwkJMjogIlRBUkdFVF9UWVBFX0VYVEVOU0lPTl9SQU5HRSIsCisJCTM6ICJUQVJHRVRfVFlQRV9NRVNTQUdFIiwKKwkJNDogIlRBUkdFVF9UWVBFX0ZJRUxEIiwKKwkJNTogIlRBUkdFVF9UWVBFX09ORU9GIiwKKwkJNjogIlRBUkdFVF9UWVBFX0VOVU0iLAorCQk3OiAiVEFSR0VUX1RZUEVfRU5VTV9FTlRSWSIsCisJCTg6ICJUQVJHRVRfVFlQRV9TRVJWSUNFIiwKKwkJOTogIlRBUkdFVF9UWVBFX01FVEhPRCIsCisJfQorCUZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlX3ZhbHVlID0gbWFwW3N0cmluZ11pbnQzMnsKKwkJIlRBUkdFVF9UWVBFX1VOS05PV04iOiAgICAgICAgIDAsCisJCSJUQVJHRVRfVFlQRV9GSUxFIjogICAgICAgICAgICAxLAorCQkiVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFIjogMiwKKwkJIlRBUkdFVF9UWVBFX01FU1NBR0UiOiAgICAgICAgIDMsCisJCSJUQVJHRVRfVFlQRV9GSUVMRCI6ICAgICAgICAgICA0LAorCQkiVEFSR0VUX1RZUEVfT05FT0YiOiAgICAgICAgICAgNSwKKwkJIlRBUkdFVF9UWVBFX0VOVU0iOiAgICAgICAgICAgIDYsCisJCSJUQVJHRVRfVFlQRV9FTlVNX0VOVFJZIjogICAgICA3LAorCQkiVEFSR0VUX1RZUEVfU0VSVklDRSI6ICAgICAgICAgOCwKKwkJIlRBUkdFVF9UWVBFX01FVEhPRCI6ICAgICAgICAgIDksCisJfQorKQorCitmdW5jICh4IEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlKSBFbnVtKCkgKkZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlIHsKKwlwIDo9IG5ldyhGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZSkKKwkqcCA9IHgKKwlyZXR1cm4gcAorfQorCitmdW5jICh4IEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlKSBTdHJpbmcoKSBzdHJpbmcgeworCXJldHVybiBwcm90b2ltcGwuWC5FbnVtU3RyaW5nT2YoeC5EZXNjcmlwdG9yKCksIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKHgpKQorfQorCitmdW5jIChGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZSkgRGVzY3JpcHRvcigpIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvciB7CisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzhdLkRlc2NyaXB0b3IoKQorfQorCitmdW5jIChGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZSkgVHlwZSgpIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7CisJcmV0dXJuICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1s4XQorfQorCitmdW5jICh4IEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlKSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRW51bU51bWJlciB7CisJcmV0dXJuIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKHgpCit9CisKKy8vIERlcHJlY2F0ZWQ6IERvIG5vdCB1c2UuCitmdW5jICh4ICpGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZSkgVW5tYXJzaGFsSlNPTihiIFtdYnl0ZSkgZXJyb3IgeworCW51bSwgZXJyIDo9IHByb3RvaW1wbC5YLlVubWFyc2hhbEpTT05FbnVtKHguRGVzY3JpcHRvcigpLCBiKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCSp4ID0gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUobnVtKQorCXJldHVybiBuaWwKK30KKworLy8gRGVwcmVjYXRlZDogVXNlIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLkRlc2NyaXB0b3IgaW5zdGVhZC4KK2Z1bmMgKEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlKSBFbnVtRGVzY3JpcHRvcigpIChbXWJ5dGUsIFtdaW50KSB7CisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0daSVAoKSwgW11pbnR7MTIsIDN9Cit9CisKIC8vIElzIHRoaXMgbWV0aG9kIHNpZGUtZWZmZWN0LWZyZWUgKG9yIHNhZmUgaW4gSFRUUCBwYXJsYW5jZSksIG9yIGlkZW1wb3RlbnQsCiAvLyBvciBuZWl0aGVyPyBIVFRQIGJhc2VkIFJQQyBpbXBsZW1lbnRhdGlvbiBtYXkgY2hvb3NlIEdFVCB2ZXJiIGZvciBzYWZlCiAvLyBtZXRob2RzLCBhbmQgUFVUIHZlcmIgZm9yIGlkZW1wb3RlbnQgbWV0aG9kcyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFBPU1QuCkBAIC00NDIsMTEgKzc1MywxMSBAQAogfQogCiBmdW5jIChNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwpIERlc2NyaXB0b3IoKSBwcm90b3JlZmxlY3QuRW51bURlc2NyaXB0b3IgewotCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1s1XS5EZXNjcmlwdG9yKCkKKwlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbOV0uRGVzY3JpcHRvcigpCiB9CiAKIGZ1bmMgKE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbCkgVHlwZSgpIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7Ci0JcmV0dXJuICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1s1XQorCXJldHVybiAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbOV0KIH0KIAogZnVuYyAoeCBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwpIE51bWJlcigpIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyIHsKQEAgLTQ2OCw2ICs3NzksNDI3IEBACiAJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0daSVAoKSwgW11pbnR7MTcsIDB9CiB9CiAKK3R5cGUgRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlIGludDMyCisKK2NvbnN0ICgKKwlGZWF0dXJlU2V0X0ZJRUxEX1BSRVNFTkNFX1VOS05PV04gRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlID0gMAorCUZlYXR1cmVTZXRfRVhQTElDSVQgICAgICAgICAgICAgICBGZWF0dXJlU2V0X0ZpZWxkUHJlc2VuY2UgPSAxCisJRmVhdHVyZVNldF9JTVBMSUNJVCAgICAgICAgICAgICAgIEZlYXR1cmVTZXRfRmllbGRQcmVzZW5jZSA9IDIKKwlGZWF0dXJlU2V0X0xFR0FDWV9SRVFVSVJFRCAgICAgICAgRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlID0gMworKQorCisvLyBFbnVtIHZhbHVlIG1hcHMgZm9yIEZlYXR1cmVTZXRfRmllbGRQcmVzZW5jZS4KK3ZhciAoCisJRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlX25hbWUgPSBtYXBbaW50MzJdc3RyaW5neworCQkwOiAiRklFTERfUFJFU0VOQ0VfVU5LTk9XTiIsCisJCTE6ICJFWFBMSUNJVCIsCisJCTI6ICJJTVBMSUNJVCIsCisJCTM6ICJMRUdBQ1lfUkVRVUlSRUQiLAorCX0KKwlGZWF0dXJlU2V0X0ZpZWxkUHJlc2VuY2VfdmFsdWUgPSBtYXBbc3RyaW5nXWludDMyeworCQkiRklFTERfUFJFU0VOQ0VfVU5LTk9XTiI6IDAsCisJCSJFWFBMSUNJVCI6ICAgICAgICAgICAgICAgMSwKKwkJIklNUExJQ0lUIjogICAgICAgICAgICAgICAyLAorCQkiTEVHQUNZX1JFUVVJUkVEIjogICAgICAgIDMsCisJfQorKQorCitmdW5jICh4IEZlYXR1cmVTZXRfRmllbGRQcmVzZW5jZSkgRW51bSgpICpGZWF0dXJlU2V0X0ZpZWxkUHJlc2VuY2UgeworCXAgOj0gbmV3KEZlYXR1cmVTZXRfRmllbGRQcmVzZW5jZSkKKwkqcCA9IHgKKwlyZXR1cm4gcAorfQorCitmdW5jICh4IEZlYXR1cmVTZXRfRmllbGRQcmVzZW5jZSkgU3RyaW5nKCkgc3RyaW5nIHsKKwlyZXR1cm4gcHJvdG9pbXBsLlguRW51bVN0cmluZ09mKHguRGVzY3JpcHRvcigpLCBwcm90b3JlZmxlY3QuRW51bU51bWJlcih4KSkKK30KKworZnVuYyAoRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlKSBEZXNjcmlwdG9yKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKKwlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMTBdLkRlc2NyaXB0b3IoKQorfQorCitmdW5jIChGZWF0dXJlU2V0X0ZpZWxkUHJlc2VuY2UpIFR5cGUoKSBwcm90b3JlZmxlY3QuRW51bVR5cGUgeworCXJldHVybiAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMTBdCit9CisKK2Z1bmMgKHggRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlKSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRW51bU51bWJlciB7CisJcmV0dXJuIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKHgpCit9CisKKy8vIERlcHJlY2F0ZWQ6IERvIG5vdCB1c2UuCitmdW5jICh4ICpGZWF0dXJlU2V0X0ZpZWxkUHJlc2VuY2UpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKKwludW0sIGVyciA6PSBwcm90b2ltcGwuWC5Vbm1hcnNoYWxKU09ORW51bSh4LkRlc2NyaXB0b3IoKSwgYikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkqeCA9IEZlYXR1cmVTZXRfRmllbGRQcmVzZW5jZShudW0pCisJcmV0dXJuIG5pbAorfQorCisvLyBEZXByZWNhdGVkOiBVc2UgRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlLkRlc2NyaXB0b3IgaW5zdGVhZC4KK2Z1bmMgKEZlYXR1cmVTZXRfRmllbGRQcmVzZW5jZSkgRW51bURlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezE5LCAwfQorfQorCit0eXBlIEZlYXR1cmVTZXRfRW51bVR5cGUgaW50MzIKKworY29uc3QgKAorCUZlYXR1cmVTZXRfRU5VTV9UWVBFX1VOS05PV04gRmVhdHVyZVNldF9FbnVtVHlwZSA9IDAKKwlGZWF0dXJlU2V0X09QRU4gICAgICAgICAgICAgIEZlYXR1cmVTZXRfRW51bVR5cGUgPSAxCisJRmVhdHVyZVNldF9DTE9TRUQgICAgICAgICAgICBGZWF0dXJlU2V0X0VudW1UeXBlID0gMgorKQorCisvLyBFbnVtIHZhbHVlIG1hcHMgZm9yIEZlYXR1cmVTZXRfRW51bVR5cGUuCit2YXIgKAorCUZlYXR1cmVTZXRfRW51bVR5cGVfbmFtZSA9IG1hcFtpbnQzMl1zdHJpbmd7CisJCTA6ICJFTlVNX1RZUEVfVU5LTk9XTiIsCisJCTE6ICJPUEVOIiwKKwkJMjogIkNMT1NFRCIsCisJfQorCUZlYXR1cmVTZXRfRW51bVR5cGVfdmFsdWUgPSBtYXBbc3RyaW5nXWludDMyeworCQkiRU5VTV9UWVBFX1VOS05PV04iOiAwLAorCQkiT1BFTiI6ICAgICAgICAgICAgICAxLAorCQkiQ0xPU0VEIjogICAgICAgICAgICAyLAorCX0KKykKKworZnVuYyAoeCBGZWF0dXJlU2V0X0VudW1UeXBlKSBFbnVtKCkgKkZlYXR1cmVTZXRfRW51bVR5cGUgeworCXAgOj0gbmV3KEZlYXR1cmVTZXRfRW51bVR5cGUpCisJKnAgPSB4CisJcmV0dXJuIHAKK30KKworZnVuYyAoeCBGZWF0dXJlU2V0X0VudW1UeXBlKSBTdHJpbmcoKSBzdHJpbmcgeworCXJldHVybiBwcm90b2ltcGwuWC5FbnVtU3RyaW5nT2YoeC5EZXNjcmlwdG9yKCksIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKHgpKQorfQorCitmdW5jIChGZWF0dXJlU2V0X0VudW1UeXBlKSBEZXNjcmlwdG9yKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKKwlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMTFdLkRlc2NyaXB0b3IoKQorfQorCitmdW5jIChGZWF0dXJlU2V0X0VudW1UeXBlKSBUeXBlKCkgcHJvdG9yZWZsZWN0LkVudW1UeXBlIHsKKwlyZXR1cm4gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzExXQorfQorCitmdW5jICh4IEZlYXR1cmVTZXRfRW51bVR5cGUpIE51bWJlcigpIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyIHsKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIoeCkKK30KKworLy8gRGVwcmVjYXRlZDogRG8gbm90IHVzZS4KK2Z1bmMgKHggKkZlYXR1cmVTZXRfRW51bVR5cGUpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKKwludW0sIGVyciA6PSBwcm90b2ltcGwuWC5Vbm1hcnNoYWxKU09ORW51bSh4LkRlc2NyaXB0b3IoKSwgYikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkqeCA9IEZlYXR1cmVTZXRfRW51bVR5cGUobnVtKQorCXJldHVybiBuaWwKK30KKworLy8gRGVwcmVjYXRlZDogVXNlIEZlYXR1cmVTZXRfRW51bVR5cGUuRGVzY3JpcHRvciBpbnN0ZWFkLgorZnVuYyAoRmVhdHVyZVNldF9FbnVtVHlwZSkgRW51bURlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezE5LCAxfQorfQorCit0eXBlIEZlYXR1cmVTZXRfUmVwZWF0ZWRGaWVsZEVuY29kaW5nIGludDMyCisKK2NvbnN0ICgKKwlGZWF0dXJlU2V0X1JFUEVBVEVEX0ZJRUxEX0VOQ09ESU5HX1VOS05PV04gRmVhdHVyZVNldF9SZXBlYXRlZEZpZWxkRW5jb2RpbmcgPSAwCisJRmVhdHVyZVNldF9QQUNLRUQgICAgICAgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVTZXRfUmVwZWF0ZWRGaWVsZEVuY29kaW5nID0gMQorCUZlYXR1cmVTZXRfRVhQQU5ERUQgICAgICAgICAgICAgICAgICAgICAgICBGZWF0dXJlU2V0X1JlcGVhdGVkRmllbGRFbmNvZGluZyA9IDIKKykKKworLy8gRW51bSB2YWx1ZSBtYXBzIGZvciBGZWF0dXJlU2V0X1JlcGVhdGVkRmllbGRFbmNvZGluZy4KK3ZhciAoCisJRmVhdHVyZVNldF9SZXBlYXRlZEZpZWxkRW5jb2RpbmdfbmFtZSA9IG1hcFtpbnQzMl1zdHJpbmd7CisJCTA6ICJSRVBFQVRFRF9GSUVMRF9FTkNPRElOR19VTktOT1dOIiwKKwkJMTogIlBBQ0tFRCIsCisJCTI6ICJFWFBBTkRFRCIsCisJfQorCUZlYXR1cmVTZXRfUmVwZWF0ZWRGaWVsZEVuY29kaW5nX3ZhbHVlID0gbWFwW3N0cmluZ11pbnQzMnsKKwkJIlJFUEVBVEVEX0ZJRUxEX0VOQ09ESU5HX1VOS05PV04iOiAwLAorCQkiUEFDS0VEIjogICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisJCSJFWFBBTkRFRCI6ICAgICAgICAgICAgICAgICAgICAgICAgMiwKKwl9CispCisKK2Z1bmMgKHggRmVhdHVyZVNldF9SZXBlYXRlZEZpZWxkRW5jb2RpbmcpIEVudW0oKSAqRmVhdHVyZVNldF9SZXBlYXRlZEZpZWxkRW5jb2RpbmcgeworCXAgOj0gbmV3KEZlYXR1cmVTZXRfUmVwZWF0ZWRGaWVsZEVuY29kaW5nKQorCSpwID0geAorCXJldHVybiBwCit9CisKK2Z1bmMgKHggRmVhdHVyZVNldF9SZXBlYXRlZEZpZWxkRW5jb2RpbmcpIFN0cmluZygpIHN0cmluZyB7CisJcmV0dXJuIHByb3RvaW1wbC5YLkVudW1TdHJpbmdPZih4LkRlc2NyaXB0b3IoKSwgcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIoeCkpCit9CisKK2Z1bmMgKEZlYXR1cmVTZXRfUmVwZWF0ZWRGaWVsZEVuY29kaW5nKSBEZXNjcmlwdG9yKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKKwlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMTJdLkRlc2NyaXB0b3IoKQorfQorCitmdW5jIChGZWF0dXJlU2V0X1JlcGVhdGVkRmllbGRFbmNvZGluZykgVHlwZSgpIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7CisJcmV0dXJuICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1sxMl0KK30KKworZnVuYyAoeCBGZWF0dXJlU2V0X1JlcGVhdGVkRmllbGRFbmNvZGluZykgTnVtYmVyKCkgcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIgeworCXJldHVybiBwcm90b3JlZmxlY3QuRW51bU51bWJlcih4KQorfQorCisvLyBEZXByZWNhdGVkOiBEbyBub3QgdXNlLgorZnVuYyAoeCAqRmVhdHVyZVNldF9SZXBlYXRlZEZpZWxkRW5jb2RpbmcpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKKwludW0sIGVyciA6PSBwcm90b2ltcGwuWC5Vbm1hcnNoYWxKU09ORW51bSh4LkRlc2NyaXB0b3IoKSwgYikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkqeCA9IEZlYXR1cmVTZXRfUmVwZWF0ZWRGaWVsZEVuY29kaW5nKG51bSkKKwlyZXR1cm4gbmlsCit9CisKKy8vIERlcHJlY2F0ZWQ6IFVzZSBGZWF0dXJlU2V0X1JlcGVhdGVkRmllbGRFbmNvZGluZy5EZXNjcmlwdG9yIGluc3RlYWQuCitmdW5jIChGZWF0dXJlU2V0X1JlcGVhdGVkRmllbGRFbmNvZGluZykgRW51bURlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezE5LCAyfQorfQorCit0eXBlIEZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb24gaW50MzIKKworY29uc3QgKAorCUZlYXR1cmVTZXRfVVRGOF9WQUxJREFUSU9OX1VOS05PV04gRmVhdHVyZVNldF9VdGY4VmFsaWRhdGlvbiA9IDAKKwlGZWF0dXJlU2V0X1ZFUklGWSAgICAgICAgICAgICAgICAgIEZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb24gPSAyCisJRmVhdHVyZVNldF9OT05FICAgICAgICAgICAgICAgICAgICBGZWF0dXJlU2V0X1V0ZjhWYWxpZGF0aW9uID0gMworKQorCisvLyBFbnVtIHZhbHVlIG1hcHMgZm9yIEZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb24uCit2YXIgKAorCUZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb25fbmFtZSA9IG1hcFtpbnQzMl1zdHJpbmd7CisJCTA6ICJVVEY4X1ZBTElEQVRJT05fVU5LTk9XTiIsCisJCTI6ICJWRVJJRlkiLAorCQkzOiAiTk9ORSIsCisJfQorCUZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb25fdmFsdWUgPSBtYXBbc3RyaW5nXWludDMyeworCQkiVVRGOF9WQUxJREFUSU9OX1VOS05PV04iOiAwLAorCQkiVkVSSUZZIjogICAgICAgICAgICAgICAgICAyLAorCQkiTk9ORSI6ICAgICAgICAgICAgICAgICAgICAzLAorCX0KKykKKworZnVuYyAoeCBGZWF0dXJlU2V0X1V0ZjhWYWxpZGF0aW9uKSBFbnVtKCkgKkZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb24geworCXAgOj0gbmV3KEZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb24pCisJKnAgPSB4CisJcmV0dXJuIHAKK30KKworZnVuYyAoeCBGZWF0dXJlU2V0X1V0ZjhWYWxpZGF0aW9uKSBTdHJpbmcoKSBzdHJpbmcgeworCXJldHVybiBwcm90b2ltcGwuWC5FbnVtU3RyaW5nT2YoeC5EZXNjcmlwdG9yKCksIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKHgpKQorfQorCitmdW5jIChGZWF0dXJlU2V0X1V0ZjhWYWxpZGF0aW9uKSBEZXNjcmlwdG9yKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKKwlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMTNdLkRlc2NyaXB0b3IoKQorfQorCitmdW5jIChGZWF0dXJlU2V0X1V0ZjhWYWxpZGF0aW9uKSBUeXBlKCkgcHJvdG9yZWZsZWN0LkVudW1UeXBlIHsKKwlyZXR1cm4gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzEzXQorfQorCitmdW5jICh4IEZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb24pIE51bWJlcigpIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyIHsKKwlyZXR1cm4gcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIoeCkKK30KKworLy8gRGVwcmVjYXRlZDogRG8gbm90IHVzZS4KK2Z1bmMgKHggKkZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb24pIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKKwludW0sIGVyciA6PSBwcm90b2ltcGwuWC5Vbm1hcnNoYWxKU09ORW51bSh4LkRlc2NyaXB0b3IoKSwgYikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkqeCA9IEZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb24obnVtKQorCXJldHVybiBuaWwKK30KKworLy8gRGVwcmVjYXRlZDogVXNlIEZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb24uRGVzY3JpcHRvciBpbnN0ZWFkLgorZnVuYyAoRmVhdHVyZVNldF9VdGY4VmFsaWRhdGlvbikgRW51bURlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezE5LCAzfQorfQorCit0eXBlIEZlYXR1cmVTZXRfTWVzc2FnZUVuY29kaW5nIGludDMyCisKK2NvbnN0ICgKKwlGZWF0dXJlU2V0X01FU1NBR0VfRU5DT0RJTkdfVU5LTk9XTiBGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZyA9IDAKKwlGZWF0dXJlU2V0X0xFTkdUSF9QUkVGSVhFRCAgICAgICAgICBGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZyA9IDEKKwlGZWF0dXJlU2V0X0RFTElNSVRFRCAgICAgICAgICAgICAgICBGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZyA9IDIKKykKKworLy8gRW51bSB2YWx1ZSBtYXBzIGZvciBGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZy4KK3ZhciAoCisJRmVhdHVyZVNldF9NZXNzYWdlRW5jb2RpbmdfbmFtZSA9IG1hcFtpbnQzMl1zdHJpbmd7CisJCTA6ICJNRVNTQUdFX0VOQ09ESU5HX1VOS05PV04iLAorCQkxOiAiTEVOR1RIX1BSRUZJWEVEIiwKKwkJMjogIkRFTElNSVRFRCIsCisJfQorCUZlYXR1cmVTZXRfTWVzc2FnZUVuY29kaW5nX3ZhbHVlID0gbWFwW3N0cmluZ11pbnQzMnsKKwkJIk1FU1NBR0VfRU5DT0RJTkdfVU5LTk9XTiI6IDAsCisJCSJMRU5HVEhfUFJFRklYRUQiOiAgICAgICAgICAxLAorCQkiREVMSU1JVEVEIjogICAgICAgICAgICAgICAgMiwKKwl9CispCisKK2Z1bmMgKHggRmVhdHVyZVNldF9NZXNzYWdlRW5jb2RpbmcpIEVudW0oKSAqRmVhdHVyZVNldF9NZXNzYWdlRW5jb2RpbmcgeworCXAgOj0gbmV3KEZlYXR1cmVTZXRfTWVzc2FnZUVuY29kaW5nKQorCSpwID0geAorCXJldHVybiBwCit9CisKK2Z1bmMgKHggRmVhdHVyZVNldF9NZXNzYWdlRW5jb2RpbmcpIFN0cmluZygpIHN0cmluZyB7CisJcmV0dXJuIHByb3RvaW1wbC5YLkVudW1TdHJpbmdPZih4LkRlc2NyaXB0b3IoKSwgcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIoeCkpCit9CisKK2Z1bmMgKEZlYXR1cmVTZXRfTWVzc2FnZUVuY29kaW5nKSBEZXNjcmlwdG9yKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKKwlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMTRdLkRlc2NyaXB0b3IoKQorfQorCitmdW5jIChGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZykgVHlwZSgpIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7CisJcmV0dXJuICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1sxNF0KK30KKworZnVuYyAoeCBGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZykgTnVtYmVyKCkgcHJvdG9yZWZsZWN0LkVudW1OdW1iZXIgeworCXJldHVybiBwcm90b3JlZmxlY3QuRW51bU51bWJlcih4KQorfQorCisvLyBEZXByZWNhdGVkOiBEbyBub3QgdXNlLgorZnVuYyAoeCAqRmVhdHVyZVNldF9NZXNzYWdlRW5jb2RpbmcpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKKwludW0sIGVyciA6PSBwcm90b2ltcGwuWC5Vbm1hcnNoYWxKU09ORW51bSh4LkRlc2NyaXB0b3IoKSwgYikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkqeCA9IEZlYXR1cmVTZXRfTWVzc2FnZUVuY29kaW5nKG51bSkKKwlyZXR1cm4gbmlsCit9CisKKy8vIERlcHJlY2F0ZWQ6IFVzZSBGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZy5EZXNjcmlwdG9yIGluc3RlYWQuCitmdW5jIChGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZykgRW51bURlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezE5LCA0fQorfQorCit0eXBlIEZlYXR1cmVTZXRfSnNvbkZvcm1hdCBpbnQzMgorCitjb25zdCAoCisJRmVhdHVyZVNldF9KU09OX0ZPUk1BVF9VTktOT1dOIEZlYXR1cmVTZXRfSnNvbkZvcm1hdCA9IDAKKwlGZWF0dXJlU2V0X0FMTE9XICAgICAgICAgICAgICAgRmVhdHVyZVNldF9Kc29uRm9ybWF0ID0gMQorCUZlYXR1cmVTZXRfTEVHQUNZX0JFU1RfRUZGT1JUICBGZWF0dXJlU2V0X0pzb25Gb3JtYXQgPSAyCispCisKKy8vIEVudW0gdmFsdWUgbWFwcyBmb3IgRmVhdHVyZVNldF9Kc29uRm9ybWF0LgordmFyICgKKwlGZWF0dXJlU2V0X0pzb25Gb3JtYXRfbmFtZSA9IG1hcFtpbnQzMl1zdHJpbmd7CisJCTA6ICJKU09OX0ZPUk1BVF9VTktOT1dOIiwKKwkJMTogIkFMTE9XIiwKKwkJMjogIkxFR0FDWV9CRVNUX0VGRk9SVCIsCisJfQorCUZlYXR1cmVTZXRfSnNvbkZvcm1hdF92YWx1ZSA9IG1hcFtzdHJpbmddaW50MzJ7CisJCSJKU09OX0ZPUk1BVF9VTktOT1dOIjogMCwKKwkJIkFMTE9XIjogICAgICAgICAgICAgICAxLAorCQkiTEVHQUNZX0JFU1RfRUZGT1JUIjogIDIsCisJfQorKQorCitmdW5jICh4IEZlYXR1cmVTZXRfSnNvbkZvcm1hdCkgRW51bSgpICpGZWF0dXJlU2V0X0pzb25Gb3JtYXQgeworCXAgOj0gbmV3KEZlYXR1cmVTZXRfSnNvbkZvcm1hdCkKKwkqcCA9IHgKKwlyZXR1cm4gcAorfQorCitmdW5jICh4IEZlYXR1cmVTZXRfSnNvbkZvcm1hdCkgU3RyaW5nKCkgc3RyaW5nIHsKKwlyZXR1cm4gcHJvdG9pbXBsLlguRW51bVN0cmluZ09mKHguRGVzY3JpcHRvcigpLCBwcm90b3JlZmxlY3QuRW51bU51bWJlcih4KSkKK30KKworZnVuYyAoRmVhdHVyZVNldF9Kc29uRm9ybWF0KSBEZXNjcmlwdG9yKCkgcHJvdG9yZWZsZWN0LkVudW1EZXNjcmlwdG9yIHsKKwlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMTVdLkRlc2NyaXB0b3IoKQorfQorCitmdW5jIChGZWF0dXJlU2V0X0pzb25Gb3JtYXQpIFR5cGUoKSBwcm90b3JlZmxlY3QuRW51bVR5cGUgeworCXJldHVybiAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXNbMTVdCit9CisKK2Z1bmMgKHggRmVhdHVyZVNldF9Kc29uRm9ybWF0KSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRW51bU51bWJlciB7CisJcmV0dXJuIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKHgpCit9CisKKy8vIERlcHJlY2F0ZWQ6IERvIG5vdCB1c2UuCitmdW5jICh4ICpGZWF0dXJlU2V0X0pzb25Gb3JtYXQpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKKwludW0sIGVyciA6PSBwcm90b2ltcGwuWC5Vbm1hcnNoYWxKU09ORW51bSh4LkRlc2NyaXB0b3IoKSwgYikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkqeCA9IEZlYXR1cmVTZXRfSnNvbkZvcm1hdChudW0pCisJcmV0dXJuIG5pbAorfQorCisvLyBEZXByZWNhdGVkOiBVc2UgRmVhdHVyZVNldF9Kc29uRm9ybWF0LkRlc2NyaXB0b3IgaW5zdGVhZC4KK2Z1bmMgKEZlYXR1cmVTZXRfSnNvbkZvcm1hdCkgRW51bURlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezE5LCA1fQorfQorCisvLyBSZXByZXNlbnRzIHRoZSBpZGVudGlmaWVkIG9iamVjdCdzIGVmZmVjdCBvbiB0aGUgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWwKKy8vIC5wcm90byBmaWxlLgordHlwZSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljIGludDMyCisKK2NvbnN0ICgKKwkvLyBUaGVyZSBpcyBubyBlZmZlY3Qgb3IgdGhlIGVmZmVjdCBpcyBpbmRlc2NyaWJhYmxlLgorCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fTk9ORSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljID0gMAorCS8vIFRoZSBlbGVtZW50IGlzIHNldCBvciBvdGhlcndpc2UgbXV0YXRlZC4KKwlHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NFVCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljID0gMQorCS8vIEFuIGFsaWFzIHRvIHRoZSBlbGVtZW50IGlzIHJldHVybmVkLgorCUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fQUxJQVMgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYyA9IDIKKykKKworLy8gRW51bSB2YWx1ZSBtYXBzIGZvciBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljLgordmFyICgKKwlHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljX25hbWUgPSBtYXBbaW50MzJdc3RyaW5neworCQkwOiAiTk9ORSIsCisJCTE6ICJTRVQiLAorCQkyOiAiQUxJQVMiLAorCX0KKwlHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljX3ZhbHVlID0gbWFwW3N0cmluZ11pbnQzMnsKKwkJIk5PTkUiOiAgMCwKKwkJIlNFVCI6ICAgMSwKKwkJIkFMSUFTIjogMiwKKwl9CispCisKK2Z1bmMgKHggR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYykgRW51bSgpICpHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljIHsKKwlwIDo9IG5ldyhHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljKQorCSpwID0geAorCXJldHVybiBwCit9CisKK2Z1bmMgKHggR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYykgU3RyaW5nKCkgc3RyaW5nIHsKKwlyZXR1cm4gcHJvdG9pbXBsLlguRW51bVN0cmluZ09mKHguRGVzY3JpcHRvcigpLCBwcm90b3JlZmxlY3QuRW51bU51bWJlcih4KSkKK30KKworZnVuYyAoR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYykgRGVzY3JpcHRvcigpIHByb3RvcmVmbGVjdC5FbnVtRGVzY3JpcHRvciB7CisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzWzE2XS5EZXNjcmlwdG9yKCkKK30KKworZnVuYyAoR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYykgVHlwZSgpIHByb3RvcmVmbGVjdC5FbnVtVHlwZSB7CisJcmV0dXJuICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX2VudW1UeXBlc1sxNl0KK30KKworZnVuYyAoeCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljKSBOdW1iZXIoKSBwcm90b3JlZmxlY3QuRW51bU51bWJlciB7CisJcmV0dXJuIHByb3RvcmVmbGVjdC5FbnVtTnVtYmVyKHgpCit9CisKKy8vIERlcHJlY2F0ZWQ6IERvIG5vdCB1c2UuCitmdW5jICh4ICpHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljKSBVbm1hcnNoYWxKU09OKGIgW11ieXRlKSBlcnJvciB7CisJbnVtLCBlcnIgOj0gcHJvdG9pbXBsLlguVW5tYXJzaGFsSlNPTkVudW0oeC5EZXNjcmlwdG9yKCksIGIpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJKnggPSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljKG51bSkKKwlyZXR1cm4gbmlsCit9CisKKy8vIERlcHJlY2F0ZWQ6IFVzZSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljLkRlc2NyaXB0b3IgaW5zdGVhZC4KK2Z1bmMgKEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWMpIEVudW1EZXNjcmlwdG9yKCkgKFtdYnl0ZSwgW11pbnQpIHsKKwlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19yYXdEZXNjR1pJUCgpLCBbXWludHsyMiwgMCwgMH0KK30KKwogLy8gVGhlIHByb3RvY29sIGNvbXBpbGVyIGNhbiBvdXRwdXQgYSBGaWxlRGVzY3JpcHRvclNldCBjb250YWluaW5nIHRoZSAucHJvdG8KIC8vIGZpbGVzIGl0IHBhcnNlcy4KIHR5cGUgRmlsZURlc2NyaXB0b3JTZXQgc3RydWN0IHsKQEAgLTU0NCw4ICsxMjc2LDEyIEBACiAJLy8gZGV2ZWxvcG1lbnQgdG9vbHMuCiAJU291cmNlQ29kZUluZm8gKlNvdXJjZUNvZGVJbmZvIGBwcm90b2J1ZjoiYnl0ZXMsOSxvcHQsbmFtZT1zb3VyY2VfY29kZV9pbmZvLGpzb249c291cmNlQ29kZUluZm8iIGpzb246InNvdXJjZV9jb2RlX2luZm8sb21pdGVtcHR5ImAKIAkvLyBUaGUgc3ludGF4IG9mIHRoZSBwcm90byBmaWxlLgotCS8vIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSAicHJvdG8yIiBhbmQgInByb3RvMyIuCisJLy8gVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlICJwcm90bzIiLCAicHJvdG8zIiwgYW5kICJlZGl0aW9ucyIuCisJLy8KKwkvLyBJZiBgZWRpdGlvbmAgaXMgcHJlc2VudCwgdGhpcyB2YWx1ZSBtdXN0IGJlICJlZGl0aW9ucyIuCiAJU3ludGF4ICpzdHJpbmcgYHByb3RvYnVmOiJieXRlcywxMixvcHQsbmFtZT1zeW50YXgiIGpzb246InN5bnRheCxvbWl0ZW1wdHkiYAorCS8vIFRoZSBlZGl0aW9uIG9mIHRoZSBwcm90byBmaWxlLgorCUVkaXRpb24gKkVkaXRpb24gYHByb3RvYnVmOiJ2YXJpbnQsMTQsb3B0LG5hbWU9ZWRpdGlvbixlbnVtPWdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uIiBqc29uOiJlZGl0aW9uLG9taXRlbXB0eSJgCiB9CiAKIGZ1bmMgKHggKkZpbGVEZXNjcmlwdG9yUHJvdG8pIFJlc2V0KCkgewpAQCAtNjY0LDYgKzE0MDAsMTMgQEAKIAlyZXR1cm4gIiIKIH0KIAorZnVuYyAoeCAqRmlsZURlc2NyaXB0b3JQcm90bykgR2V0RWRpdGlvbigpIEVkaXRpb24geworCWlmIHggIT0gbmlsICYmIHguRWRpdGlvbiAhPSBuaWwgeworCQlyZXR1cm4gKnguRWRpdGlvbgorCX0KKwlyZXR1cm4gRWRpdGlvbl9FRElUSU9OX1VOS05PV04KK30KKwogLy8gRGVzY3JpYmVzIGEgbWVzc2FnZSB0eXBlLgogdHlwZSBEZXNjcmlwdG9yUHJvdG8gc3RydWN0IHsKIAlzdGF0ZSAgICAgICAgIHByb3RvaW1wbC5NZXNzYWdlU3RhdGUKQEAgLTc5NCw4ICsxNTM3LDIzIEBACiAKIAkvLyBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4KIAlVbmludGVycHJldGVkT3B0aW9uIFtdKlVuaW50ZXJwcmV0ZWRPcHRpb24gYHByb3RvYnVmOiJieXRlcyw5OTkscmVwLG5hbWU9dW5pbnRlcnByZXRlZF9vcHRpb24sanNvbj11bmludGVycHJldGVkT3B0aW9uIiBqc29uOiJ1bmludGVycHJldGVkX29wdGlvbixvbWl0ZW1wdHkiYAorCS8vIEZvciBleHRlcm5hbCB1c2VyczogRE8gTk9UIFVTRS4gV2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIG9wZW4gc291cmNpbmcKKwkvLyBleHRlbnNpb24gZGVjbGFyYXRpb24gYW5kIGV4ZWN1dGluZyBpbnRlcm5hbCBjbGVhbnVwcyBiZWZvcmUgaXQgY2FuIGJlCisJLy8gdXNlZCBleHRlcm5hbGx5LgorCURlY2xhcmF0aW9uIFtdKkV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbiBgcHJvdG9idWY6ImJ5dGVzLDIscmVwLG5hbWU9ZGVjbGFyYXRpb24iIGpzb246ImRlY2xhcmF0aW9uLG9taXRlbXB0eSJgCisJLy8gQW55IGZlYXR1cmVzIGRlZmluZWQgaW4gdGhlIHNwZWNpZmljIGVkaXRpb24uCisJRmVhdHVyZXMgKkZlYXR1cmVTZXQgYHByb3RvYnVmOiJieXRlcyw1MCxvcHQsbmFtZT1mZWF0dXJlcyIganNvbjoiZmVhdHVyZXMsb21pdGVtcHR5ImAKKwkvLyBUaGUgdmVyaWZpY2F0aW9uIHN0YXRlIG9mIHRoZSByYW5nZS4KKwkvLyBUT0RPOiBmbGlwIHRoZSBkZWZhdWx0IHRvIERFQ0xBUkFUSU9OIG9uY2UgYWxsIGVtcHR5IHJhbmdlcworCS8vIGFyZSBtYXJrZWQgYXMgVU5WRVJJRklFRC4KKwlWZXJpZmljYXRpb24gKkV4dGVuc2lvblJhbmdlT3B0aW9uc19WZXJpZmljYXRpb25TdGF0ZSBgcHJvdG9idWY6InZhcmludCwzLG9wdCxuYW1lPXZlcmlmaWNhdGlvbixlbnVtPWdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNfVmVyaWZpY2F0aW9uU3RhdGUsZGVmPTEiIGpzb246InZlcmlmaWNhdGlvbixvbWl0ZW1wdHkiYAogfQogCisvLyBEZWZhdWx0IHZhbHVlcyBmb3IgRXh0ZW5zaW9uUmFuZ2VPcHRpb25zIGZpZWxkcy4KK2NvbnN0ICgKKwlEZWZhdWx0X0V4dGVuc2lvblJhbmdlT3B0aW9uc19WZXJpZmljYXRpb24gPSBFeHRlbnNpb25SYW5nZU9wdGlvbnNfVU5WRVJJRklFRAorKQorCiBmdW5jICh4ICpFeHRlbnNpb25SYW5nZU9wdGlvbnMpIFJlc2V0KCkgewogCSp4ID0gRXh0ZW5zaW9uUmFuZ2VPcHRpb25ze30KIAlpZiBwcm90b2ltcGwuVW5zYWZlRW5hYmxlZCB7CkBAIC04MzUsNiArMTU5MywyNyBAQAogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqRXh0ZW5zaW9uUmFuZ2VPcHRpb25zKSBHZXREZWNsYXJhdGlvbigpIFtdKkV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbiB7CisJaWYgeCAhPSBuaWwgeworCQlyZXR1cm4geC5EZWNsYXJhdGlvbgorCX0KKwlyZXR1cm4gbmlsCit9CisKK2Z1bmMgKHggKkV4dGVuc2lvblJhbmdlT3B0aW9ucykgR2V0RmVhdHVyZXMoKSAqRmVhdHVyZVNldCB7CisJaWYgeCAhPSBuaWwgeworCQlyZXR1cm4geC5GZWF0dXJlcworCX0KKwlyZXR1cm4gbmlsCit9CisKK2Z1bmMgKHggKkV4dGVuc2lvblJhbmdlT3B0aW9ucykgR2V0VmVyaWZpY2F0aW9uKCkgRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX1ZlcmlmaWNhdGlvblN0YXRlIHsKKwlpZiB4ICE9IG5pbCAmJiB4LlZlcmlmaWNhdGlvbiAhPSBuaWwgeworCQlyZXR1cm4gKnguVmVyaWZpY2F0aW9uCisJfQorCXJldHVybiBEZWZhdWx0X0V4dGVuc2lvblJhbmdlT3B0aW9uc19WZXJpZmljYXRpb24KK30KKwogLy8gRGVzY3JpYmVzIGEgZmllbGQgd2l0aGluIGEgbWVzc2FnZS4KIHR5cGUgRmllbGREZXNjcmlwdG9yUHJvdG8gc3RydWN0IHsKIAlzdGF0ZSAgICAgICAgIHByb3RvaW1wbC5NZXNzYWdlU3RhdGUKQEAgLTg2MCw3ICsxNjM5LDYgQEAKIAkvLyBGb3IgYm9vbGVhbnMsICJ0cnVlIiBvciAiZmFsc2UiLgogCS8vIEZvciBzdHJpbmdzLCBjb250YWlucyB0aGUgZGVmYXVsdCB0ZXh0IGNvbnRlbnRzIChub3QgZXNjYXBlZCBpbiBhbnkgd2F5KS4KIAkvLyBGb3IgYnl0ZXMsIGNvbnRhaW5zIHRoZSBDIGVzY2FwZWQgdmFsdWUuICBBbGwgYnl0ZXMgPj0gMTI4IGFyZSBlc2NhcGVkLgotCS8vIFRPRE8oa2VudG9uKTogIEJhc2UtNjQgZW5jb2RlPwogCURlZmF1bHRWYWx1ZSAqc3RyaW5nIGBwcm90b2J1ZjoiYnl0ZXMsNyxvcHQsbmFtZT1kZWZhdWx0X3ZhbHVlLGpzb249ZGVmYXVsdFZhbHVlIiBqc29uOiJkZWZhdWx0X3ZhbHVlLG9taXRlbXB0eSJgCiAJLy8gSWYgc2V0LCBnaXZlcyB0aGUgaW5kZXggb2YgYSBvbmVvZiBpbiB0aGUgY29udGFpbmluZyB0eXBlJ3Mgb25lb2ZfZGVjbAogCS8vIGxpc3QuICBUaGlzIGZpZWxkIGlzIGEgbWVtYmVyIG9mIHRoYXQgb25lb2YuCkBAIC04NzQsMTIgKzE2NTIsMTIgQEAKIAkvLyBJZiB0cnVlLCB0aGlzIGlzIGEgcHJvdG8zICJvcHRpb25hbCIuIFdoZW4gYSBwcm90bzMgZmllbGQgaXMgb3B0aW9uYWwsIGl0CiAJLy8gdHJhY2tzIHByZXNlbmNlIHJlZ2FyZGxlc3Mgb2YgZmllbGQgdHlwZS4KIAkvLwotCS8vIFdoZW4gcHJvdG8zX29wdGlvbmFsIGlzIHRydWUsIHRoaXMgZmllbGQgbXVzdCBiZSBiZWxvbmcgdG8gYSBvbmVvZiB0bwotCS8vIHNpZ25hbCB0byBvbGQgcHJvdG8zIGNsaWVudHMgdGhhdCBwcmVzZW5jZSBpcyB0cmFja2VkIGZvciB0aGlzIGZpZWxkLiBUaGlzCi0JLy8gb25lb2YgaXMga25vd24gYXMgYSAic3ludGhldGljIiBvbmVvZiwgYW5kIHRoaXMgZmllbGQgbXVzdCBiZSBpdHMgc29sZQotCS8vIG1lbWJlciAoZWFjaCBwcm90bzMgb3B0aW9uYWwgZmllbGQgZ2V0cyBpdHMgb3duIHN5bnRoZXRpYyBvbmVvZikuIFN5bnRoZXRpYwotCS8vIG9uZW9mcyBleGlzdCBpbiB0aGUgZGVzY3JpcHRvciBvbmx5LCBhbmQgZG8gbm90IGdlbmVyYXRlIGFueSBBUEkuIFN5bnRoZXRpYwotCS8vIG9uZW9mcyBtdXN0IGJlIG9yZGVyZWQgYWZ0ZXIgYWxsICJyZWFsIiBvbmVvZnMuCisJLy8gV2hlbiBwcm90bzNfb3B0aW9uYWwgaXMgdHJ1ZSwgdGhpcyBmaWVsZCBtdXN0IGJlbG9uZyB0byBhIG9uZW9mIHRvIHNpZ25hbAorCS8vIHRvIG9sZCBwcm90bzMgY2xpZW50cyB0aGF0IHByZXNlbmNlIGlzIHRyYWNrZWQgZm9yIHRoaXMgZmllbGQuIFRoaXMgb25lb2YKKwkvLyBpcyBrbm93biBhcyBhICJzeW50aGV0aWMiIG9uZW9mLCBhbmQgdGhpcyBmaWVsZCBtdXN0IGJlIGl0cyBzb2xlIG1lbWJlcgorCS8vIChlYWNoIHByb3RvMyBvcHRpb25hbCBmaWVsZCBnZXRzIGl0cyBvd24gc3ludGhldGljIG9uZW9mKS4gU3ludGhldGljIG9uZW9mcworCS8vIGV4aXN0IGluIHRoZSBkZXNjcmlwdG9yIG9ubHksIGFuZCBkbyBub3QgZ2VuZXJhdGUgYW55IEFQSS4gU3ludGhldGljIG9uZW9mcworCS8vIG11c3QgYmUgb3JkZXJlZCBhZnRlciBhbGwgInJlYWwiIG9uZW9mcy4KIAkvLwogCS8vIEZvciBtZXNzYWdlIGZpZWxkcywgcHJvdG8zX29wdGlvbmFsIGRvZXNuJ3QgY3JlYXRlIGFueSBzZW1hbnRpYyBjaGFuZ2UsCiAJLy8gc2luY2Ugbm9uLXJlcGVhdGVkIG1lc3NhZ2UgZmllbGRzIGFsd2F5cyB0cmFjayBwcmVzZW5jZS4gSG93ZXZlciBpdCBzdGlsbApAQCAtMTM4MiwyMiArMjE2MCwyMiBAQAogCS8vIGluYXBwcm9wcmlhdGUgYmVjYXVzZSBwcm90byBwYWNrYWdlcyBkbyBub3Qgbm9ybWFsbHkgc3RhcnQgd2l0aCBiYWNrd2FyZHMKIAkvLyBkb21haW4gbmFtZXMuCiAJSmF2YVBhY2thZ2UgKnN0cmluZyBgcHJvdG9idWY6ImJ5dGVzLDEsb3B0LG5hbWU9amF2YV9wYWNrYWdlLGpzb249amF2YVBhY2thZ2UiIGpzb246ImphdmFfcGFja2FnZSxvbWl0ZW1wdHkiYAotCS8vIElmIHNldCwgYWxsIHRoZSBjbGFzc2VzIGZyb20gdGhlIC5wcm90byBmaWxlIGFyZSB3cmFwcGVkIGluIGEgc2luZ2xlCi0JLy8gb3V0ZXIgY2xhc3Mgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gIFRoaXMgYXBwbGllcyB0byBib3RoIFByb3RvMQotCS8vIChlcXVpdmFsZW50IHRvIHRoZSBvbGQgIi0tb25lX2phdmFfZmlsZSIgb3B0aW9uKSBhbmQgUHJvdG8yICh3aGVyZQotCS8vIGEgLnByb3RvIGFsd2F5cyB0cmFuc2xhdGVzIHRvIGEgc2luZ2xlIGNsYXNzLCBidXQgeW91IG1heSB3YW50IHRvCi0JLy8gZXhwbGljaXRseSBjaG9vc2UgdGhlIGNsYXNzIG5hbWUpLgorCS8vIENvbnRyb2xzIHRoZSBuYW1lIG9mIHRoZSB3cmFwcGVyIEphdmEgY2xhc3MgZ2VuZXJhdGVkIGZvciB0aGUgLnByb3RvIGZpbGUuCisJLy8gVGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBjb250YWluIHRoZSAucHJvdG8gZmlsZSdzIGdldERlc2NyaXB0b3IoKSBtZXRob2QgYXMKKwkvLyB3ZWxsIGFzIGFueSB0b3AtbGV2ZWwgZXh0ZW5zaW9ucyBkZWZpbmVkIGluIHRoZSAucHJvdG8gZmlsZS4KKwkvLyBJZiBqYXZhX211bHRpcGxlX2ZpbGVzIGlzIGRpc2FibGVkLCB0aGVuIGFsbCB0aGUgb3RoZXIgY2xhc3NlcyBmcm9tIHRoZQorCS8vIC5wcm90byBmaWxlIHdpbGwgYmUgbmVzdGVkIGluc2lkZSB0aGUgc2luZ2xlIHdyYXBwZXIgb3V0ZXIgY2xhc3MuCiAJSmF2YU91dGVyQ2xhc3NuYW1lICpzdHJpbmcgYHByb3RvYnVmOiJieXRlcyw4LG9wdCxuYW1lPWphdmFfb3V0ZXJfY2xhc3NuYW1lLGpzb249amF2YU91dGVyQ2xhc3NuYW1lIiBqc29uOiJqYXZhX291dGVyX2NsYXNzbmFtZSxvbWl0ZW1wdHkiYAotCS8vIElmIHNldCB0cnVlLCB0aGVuIHRoZSBKYXZhIGNvZGUgZ2VuZXJhdG9yIHdpbGwgZ2VuZXJhdGUgYSBzZXBhcmF0ZSAuamF2YQorCS8vIElmIGVuYWJsZWQsIHRoZW4gdGhlIEphdmEgY29kZSBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBhIHNlcGFyYXRlIC5qYXZhCiAJLy8gZmlsZSBmb3IgZWFjaCB0b3AtbGV2ZWwgbWVzc2FnZSwgZW51bSwgYW5kIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgLnByb3RvCi0JLy8gZmlsZS4gIFRodXMsIHRoZXNlIHR5cGVzIHdpbGwgKm5vdCogYmUgbmVzdGVkIGluc2lkZSB0aGUgb3V0ZXIgY2xhc3MKLQkvLyBuYW1lZCBieSBqYXZhX291dGVyX2NsYXNzbmFtZS4gIEhvd2V2ZXIsIHRoZSBvdXRlciBjbGFzcyB3aWxsIHN0aWxsIGJlCisJLy8gZmlsZS4gIFRodXMsIHRoZXNlIHR5cGVzIHdpbGwgKm5vdCogYmUgbmVzdGVkIGluc2lkZSB0aGUgd3JhcHBlciBjbGFzcworCS8vIG5hbWVkIGJ5IGphdmFfb3V0ZXJfY2xhc3NuYW1lLiAgSG93ZXZlciwgdGhlIHdyYXBwZXIgY2xhc3Mgd2lsbCBzdGlsbCBiZQogCS8vIGdlbmVyYXRlZCB0byBjb250YWluIHRoZSBmaWxlJ3MgZ2V0RGVzY3JpcHRvcigpIG1ldGhvZCBhcyB3ZWxsIGFzIGFueQogCS8vIHRvcC1sZXZlbCBleHRlbnNpb25zIGRlZmluZWQgaW4gdGhlIGZpbGUuCiAJSmF2YU11bHRpcGxlRmlsZXMgKmJvb2wgYHByb3RvYnVmOiJ2YXJpbnQsMTAsb3B0LG5hbWU9amF2YV9tdWx0aXBsZV9maWxlcyxqc29uPWphdmFNdWx0aXBsZUZpbGVzLGRlZj0wIiBqc29uOiJqYXZhX211bHRpcGxlX2ZpbGVzLG9taXRlbXB0eSJgCiAJLy8gVGhpcyBvcHRpb24gZG9lcyBub3RoaW5nLgogCS8vCi0JLy8gRGVwcmVjYXRlZDogRG8gbm90IHVzZS4KKwkvLyBEZXByZWNhdGVkOiBNYXJrZWQgYXMgZGVwcmVjYXRlZCBpbiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90by4KIAlKYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoICpib29sIGBwcm90b2J1ZjoidmFyaW50LDIwLG9wdCxuYW1lPWphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoLGpzb249amF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCIganNvbjoiamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gsb21pdGVtcHR5ImAKIAkvLyBJZiBzZXQgdHJ1ZSwgdGhlbiB0aGUgSmF2YTIgY29kZSBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBjb2RlIHRoYXQKIAkvLyB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW5ldmVyIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhc3NpZ24gYSBub24tVVRGLTgKQEAgLTE0MjYsNyArMjIwNCw2IEBACiAJQ2NHZW5lcmljU2VydmljZXMgICAqYm9vbCBgcHJvdG9idWY6InZhcmludCwxNixvcHQsbmFtZT1jY19nZW5lcmljX3NlcnZpY2VzLGpzb249Y2NHZW5lcmljU2VydmljZXMsZGVmPTAiIGpzb246ImNjX2dlbmVyaWNfc2VydmljZXMsb21pdGVtcHR5ImAKIAlKYXZhR2VuZXJpY1NlcnZpY2VzICpib29sIGBwcm90b2J1ZjoidmFyaW50LDE3LG9wdCxuYW1lPWphdmFfZ2VuZXJpY19zZXJ2aWNlcyxqc29uPWphdmFHZW5lcmljU2VydmljZXMsZGVmPTAiIGpzb246ImphdmFfZ2VuZXJpY19zZXJ2aWNlcyxvbWl0ZW1wdHkiYAogCVB5R2VuZXJpY1NlcnZpY2VzICAgKmJvb2wgYHByb3RvYnVmOiJ2YXJpbnQsMTgsb3B0LG5hbWU9cHlfZ2VuZXJpY19zZXJ2aWNlcyxqc29uPXB5R2VuZXJpY1NlcnZpY2VzLGRlZj0wIiBqc29uOiJweV9nZW5lcmljX3NlcnZpY2VzLG9taXRlbXB0eSJgCi0JUGhwR2VuZXJpY1NlcnZpY2VzICAqYm9vbCBgcHJvdG9idWY6InZhcmludCw0MixvcHQsbmFtZT1waHBfZ2VuZXJpY19zZXJ2aWNlcyxqc29uPXBocEdlbmVyaWNTZXJ2aWNlcyxkZWY9MCIganNvbjoicGhwX2dlbmVyaWNfc2VydmljZXMsb21pdGVtcHR5ImAKIAkvLyBJcyB0aGlzIGZpbGUgZGVwcmVjYXRlZD8KIAkvLyBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCiAJLy8gZm9yIGV2ZXJ5dGhpbmcgaW4gdGhlIGZpbGUsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeQpAQCAtMTQ2MCw2ICsyMjM3LDggQEAKIAkvLyBpcyBlbXB0eS4gV2hlbiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGUgcGFja2FnZSBuYW1lIHdpbGwgYmUgdXNlZCBmb3IKIAkvLyBkZXRlcm1pbmluZyB0aGUgcnVieSBwYWNrYWdlLgogCVJ1YnlQYWNrYWdlICpzdHJpbmcgYHByb3RvYnVmOiJieXRlcyw0NSxvcHQsbmFtZT1ydWJ5X3BhY2thZ2UsanNvbj1ydWJ5UGFja2FnZSIganNvbjoicnVieV9wYWNrYWdlLG9taXRlbXB0eSJgCisJLy8gQW55IGZlYXR1cmVzIGRlZmluZWQgaW4gdGhlIHNwZWNpZmljIGVkaXRpb24uCisJRmVhdHVyZXMgKkZlYXR1cmVTZXQgYHByb3RvYnVmOiJieXRlcyw1MCxvcHQsbmFtZT1mZWF0dXJlcyIganNvbjoiZmVhdHVyZXMsb21pdGVtcHR5ImAKIAkvLyBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuCiAJLy8gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgIk9wdGlvbnMiIHNlY3Rpb24gYWJvdmUuCiAJVW5pbnRlcnByZXRlZE9wdGlvbiBbXSpVbmludGVycHJldGVkT3B0aW9uIGBwcm90b2J1ZjoiYnl0ZXMsOTk5LHJlcCxuYW1lPXVuaW50ZXJwcmV0ZWRfb3B0aW9uLGpzb249dW5pbnRlcnByZXRlZE9wdGlvbiIganNvbjoidW5pbnRlcnByZXRlZF9vcHRpb24sb21pdGVtcHR5ImAKQEAgLTE0NzMsNyArMjI1Miw2IEBACiAJRGVmYXVsdF9GaWxlT3B0aW9uc19DY0dlbmVyaWNTZXJ2aWNlcyAgID0gYm9vbChmYWxzZSkKIAlEZWZhdWx0X0ZpbGVPcHRpb25zX0phdmFHZW5lcmljU2VydmljZXMgPSBib29sKGZhbHNlKQogCURlZmF1bHRfRmlsZU9wdGlvbnNfUHlHZW5lcmljU2VydmljZXMgICA9IGJvb2woZmFsc2UpCi0JRGVmYXVsdF9GaWxlT3B0aW9uc19QaHBHZW5lcmljU2VydmljZXMgID0gYm9vbChmYWxzZSkKIAlEZWZhdWx0X0ZpbGVPcHRpb25zX0RlcHJlY2F0ZWQgICAgICAgICAgPSBib29sKGZhbHNlKQogCURlZmF1bHRfRmlsZU9wdGlvbnNfQ2NFbmFibGVBcmVuYXMgICAgICA9IGJvb2wodHJ1ZSkKICkKQEAgLTE1MzEsNyArMjMwOSw3IEBACiAJcmV0dXJuIERlZmF1bHRfRmlsZU9wdGlvbnNfSmF2YU11bHRpcGxlRmlsZXMKIH0KIAotLy8gRGVwcmVjYXRlZDogRG8gbm90IHVzZS4KKy8vIERlcHJlY2F0ZWQ6IE1hcmtlZCBhcyBkZXByZWNhdGVkIGluIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvLgogZnVuYyAoeCAqRmlsZU9wdGlvbnMpIEdldEphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2goKSBib29sIHsKIAlpZiB4ICE9IG5pbCAmJiB4LkphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggIT0gbmlsIHsKIAkJcmV0dXJuICp4LkphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2gKQEAgLTE1ODEsMTMgKzIzNTksNiBAQAogCXJldHVybiBEZWZhdWx0X0ZpbGVPcHRpb25zX1B5R2VuZXJpY1NlcnZpY2VzCiB9CiAKLWZ1bmMgKHggKkZpbGVPcHRpb25zKSBHZXRQaHBHZW5lcmljU2VydmljZXMoKSBib29sIHsKLQlpZiB4ICE9IG5pbCAmJiB4LlBocEdlbmVyaWNTZXJ2aWNlcyAhPSBuaWwgewotCQlyZXR1cm4gKnguUGhwR2VuZXJpY1NlcnZpY2VzCi0JfQotCXJldHVybiBEZWZhdWx0X0ZpbGVPcHRpb25zX1BocEdlbmVyaWNTZXJ2aWNlcwotfQotCiBmdW5jICh4ICpGaWxlT3B0aW9ucykgR2V0RGVwcmVjYXRlZCgpIGJvb2wgewogCWlmIHggIT0gbmlsICYmIHguRGVwcmVjYXRlZCAhPSBuaWwgewogCQlyZXR1cm4gKnguRGVwcmVjYXRlZApAQCAtMTY1MSw2ICsyNDIyLDEzIEBACiAJcmV0dXJuICIiCiB9CiAKK2Z1bmMgKHggKkZpbGVPcHRpb25zKSBHZXRGZWF0dXJlcygpICpGZWF0dXJlU2V0IHsKKwlpZiB4ICE9IG5pbCB7CisJCXJldHVybiB4LkZlYXR1cmVzCisJfQorCXJldHVybiBuaWwKK30KKwogZnVuYyAoeCAqRmlsZU9wdGlvbnMpIEdldFVuaW50ZXJwcmV0ZWRPcHRpb24oKSBbXSpVbmludGVycHJldGVkT3B0aW9uIHsKIAlpZiB4ICE9IG5pbCB7CiAJCXJldHVybiB4LlVuaW50ZXJwcmV0ZWRPcHRpb24KQEAgLTE2NzAsMTAgKzI0NDgsMTIgQEAKIAkvLyBlZmZpY2llbnQsIGhhcyBmZXdlciBmZWF0dXJlcywgYW5kIGlzIG1vcmUgY29tcGxpY2F0ZWQuCiAJLy8KIAkvLyBUaGUgbWVzc2FnZSBtdXN0IGJlIGRlZmluZWQgZXhhY3RseSBhcyBmb2xsb3dzOgotCS8vICAgbWVzc2FnZSBGb28gewotCS8vICAgICBvcHRpb24gbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQgPSB0cnVlOwotCS8vICAgICBleHRlbnNpb25zIDQgdG8gbWF4OwotCS8vICAgfQorCS8vCisJLy8JbWVzc2FnZSBGb28geworCS8vCSAgb3B0aW9uIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0ID0gdHJ1ZTsKKwkvLwkgIGV4dGVuc2lvbnMgNCB0byBtYXg7CisJLy8JfQorCS8vCiAJLy8gTm90ZSB0aGF0IHRoZSBtZXNzYWdlIGNhbm5vdCBoYXZlIGFueSBkZWZpbmVkIGZpZWxkczsgTWVzc2FnZVNldHMgb25seQogCS8vIGhhdmUgZXh0ZW5zaW9ucy4KIAkvLwpAQCAtMTY5NiwxNCArMjQ3NiwxNyBAQAogCS8vIG1hcHMgZmllbGQuCiAJLy8KIAkvLyBGb3IgbWFwcyBmaWVsZHM6Ci0JLy8gICAgIG1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IG1hcF9maWVsZCA9IDE7CisJLy8KKwkvLwltYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiBtYXBfZmllbGQgPSAxOworCS8vCiAJLy8gVGhlIHBhcnNlZCBkZXNjcmlwdG9yIGxvb2tzIGxpa2U6Ci0JLy8gICAgIG1lc3NhZ2UgTWFwRmllbGRFbnRyeSB7Ci0JLy8gICAgICAgICBvcHRpb24gbWFwX2VudHJ5ID0gdHJ1ZTsKLQkvLyAgICAgICAgIG9wdGlvbmFsIEtleVR5cGUga2V5ID0gMTsKLQkvLyAgICAgICAgIG9wdGlvbmFsIFZhbHVlVHlwZSB2YWx1ZSA9IDI7Ci0JLy8gICAgIH0KLQkvLyAgICAgcmVwZWF0ZWQgTWFwRmllbGRFbnRyeSBtYXBfZmllbGQgPSAxOworCS8vCisJLy8JbWVzc2FnZSBNYXBGaWVsZEVudHJ5IHsKKwkvLwkgICAgb3B0aW9uIG1hcF9lbnRyeSA9IHRydWU7CisJLy8JICAgIG9wdGlvbmFsIEtleVR5cGUga2V5ID0gMTsKKwkvLwkgICAgb3B0aW9uYWwgVmFsdWVUeXBlIHZhbHVlID0gMjsKKwkvLwl9CisJLy8JcmVwZWF0ZWQgTWFwRmllbGRFbnRyeSBtYXBfZmllbGQgPSAxOwogCS8vCiAJLy8gSW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2Ugbm90IHRvIGdlbmVyYXRlIHRoZSBtYXBfZW50cnk9dHJ1ZSBtZXNzYWdlLCBidXQKIAkvLyB1c2UgYSBuYXRpdmUgbWFwIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2UgdG8gaG9sZCB0aGUga2V5cyBhbmQgdmFsdWVzLgpAQCAtMTcxNCw2ICsyNDk3LDIxIEBACiAJLy8gaW5zdGVhZC4gVGhlIG9wdGlvbiBzaG91bGQgb25seSBiZSBpbXBsaWNpdGx5IHNldCBieSB0aGUgcHJvdG8gY29tcGlsZXIKIAkvLyBwYXJzZXIuCiAJTWFwRW50cnkgKmJvb2wgYHByb3RvYnVmOiJ2YXJpbnQsNyxvcHQsbmFtZT1tYXBfZW50cnksanNvbj1tYXBFbnRyeSIganNvbjoibWFwX2VudHJ5LG9taXRlbXB0eSJgCisJLy8gRW5hYmxlIHRoZSBsZWdhY3kgaGFuZGxpbmcgb2YgSlNPTiBmaWVsZCBuYW1lIGNvbmZsaWN0cy4gIFRoaXMgbG93ZXJjYXNlcworCS8vIGFuZCBzdHJpcHMgdW5kZXJzY29yZWQgZnJvbSB0aGUgZmllbGRzIGJlZm9yZSBjb21wYXJpc29uIGluIHByb3RvMyBvbmx5LgorCS8vIFRoZSBuZXcgYmVoYXZpb3IgdGFrZXMgYGpzb25fbmFtZWAgaW50byBhY2NvdW50IGFuZCBhcHBsaWVzIHRvIHByb3RvMiBhcworCS8vIHdlbGwuCisJLy8KKwkvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSBhZ2FpbnN0IGJyb2tlbiBidWlsZHMgZHVlCisJLy8gdG8gdGhlIGNoYW5nZSBpbiBiZWhhdmlvciBmb3IgSlNPTiBmaWVsZCBuYW1lIGNvbmZsaWN0cy4KKwkvLworCS8vIFRPRE8gVGhpcyBpcyBsZWdhY3kgYmVoYXZpb3Igd2UgcGxhbiB0byByZW1vdmUgb25jZSBkb3duc3RyZWFtCisJLy8gdGVhbXMgaGF2ZSBoYWQgdGltZSB0byBtaWdyYXRlLgorCS8vCisJLy8gRGVwcmVjYXRlZDogTWFya2VkIGFzIGRlcHJlY2F0ZWQgaW4gZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8uCisJRGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyAqYm9vbCBgcHJvdG9idWY6InZhcmludCwxMSxvcHQsbmFtZT1kZXByZWNhdGVkX2xlZ2FjeV9qc29uX2ZpZWxkX2NvbmZsaWN0cyxqc29uPWRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMiIGpzb246ImRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzLG9taXRlbXB0eSJgCisJLy8gQW55IGZlYXR1cmVzIGRlZmluZWQgaW4gdGhlIHNwZWNpZmljIGVkaXRpb24uCisJRmVhdHVyZXMgKkZlYXR1cmVTZXQgYHByb3RvYnVmOiJieXRlcywxMixvcHQsbmFtZT1mZWF0dXJlcyIganNvbjoiZmVhdHVyZXMsb21pdGVtcHR5ImAKIAkvLyBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4KIAlVbmludGVycHJldGVkT3B0aW9uIFtdKlVuaW50ZXJwcmV0ZWRPcHRpb24gYHByb3RvYnVmOiJieXRlcyw5OTkscmVwLG5hbWU9dW5pbnRlcnByZXRlZF9vcHRpb24sanNvbj11bmludGVycHJldGVkT3B0aW9uIiBqc29uOiJ1bmludGVycHJldGVkX29wdGlvbixvbWl0ZW1wdHkiYAogfQpAQCAtMTc4NSw2ICsyNTgzLDIxIEBACiAJcmV0dXJuIGZhbHNlCiB9CiAKKy8vIERlcHJlY2F0ZWQ6IE1hcmtlZCBhcyBkZXByZWNhdGVkIGluIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvLgorZnVuYyAoeCAqTWVzc2FnZU9wdGlvbnMpIEdldERlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMoKSBib29sIHsKKwlpZiB4ICE9IG5pbCAmJiB4LkRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgIT0gbmlsIHsKKwkJcmV0dXJuICp4LkRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMKKwl9CisJcmV0dXJuIGZhbHNlCit9CisKK2Z1bmMgKHggKk1lc3NhZ2VPcHRpb25zKSBHZXRGZWF0dXJlcygpICpGZWF0dXJlU2V0IHsKKwlpZiB4ICE9IG5pbCB7CisJCXJldHVybiB4LkZlYXR1cmVzCisJfQorCXJldHVybiBuaWwKK30KKwogZnVuYyAoeCAqTWVzc2FnZU9wdGlvbnMpIEdldFVuaW50ZXJwcmV0ZWRPcHRpb24oKSBbXSpVbmludGVycHJldGVkT3B0aW9uIHsKIAlpZiB4ICE9IG5pbCB7CiAJCXJldHVybiB4LlVuaW50ZXJwcmV0ZWRPcHRpb24KQEAgLTE4MDAsMTQgKzI2MTMsMTggQEAKIAogCS8vIFRoZSBjdHlwZSBvcHRpb24gaW5zdHJ1Y3RzIHRoZSBDKysgY29kZSBnZW5lcmF0b3IgdG8gdXNlIGEgZGlmZmVyZW50CiAJLy8gcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpZWxkIHRoYW4gaXQgbm9ybWFsbHkgd291bGQuICBTZWUgdGhlIHNwZWNpZmljCi0JLy8gb3B0aW9ucyBiZWxvdy4gIFRoaXMgb3B0aW9uIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gdGhlIG9wZW4gc291cmNlCi0JLy8gcmVsZWFzZSAtLSBzb3JyeSwgd2UnbGwgdHJ5IHRvIGluY2x1ZGUgaXQgaW4gYSBmdXR1cmUgdmVyc2lvbiEKKwkvLyBvcHRpb25zIGJlbG93LiAgVGhpcyBvcHRpb24gaXMgb25seSBpbXBsZW1lbnRlZCB0byBzdXBwb3J0IHVzZSBvZgorCS8vIFtjdHlwZT1DT1JEXSBhbmQgW2N0eXBlPVNUUklOR10gKHRoZSBkZWZhdWx0KSBvbiBub24tcmVwZWF0ZWQgZmllbGRzIG9mCisJLy8gdHlwZSAiYnl0ZXMiIGluIHRoZSBvcGVuIHNvdXJjZSByZWxlYXNlIC0tIHNvcnJ5LCB3ZSdsbCB0cnkgdG8gaW5jbHVkZQorCS8vIG90aGVyIHR5cGVzIGluIGEgZnV0dXJlIHZlcnNpb24hCiAJQ3R5cGUgKkZpZWxkT3B0aW9uc19DVHlwZSBgcHJvdG9idWY6InZhcmludCwxLG9wdCxuYW1lPWN0eXBlLGVudW09Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc19DVHlwZSxkZWY9MCIganNvbjoiY3R5cGUsb21pdGVtcHR5ImAKIAkvLyBUaGUgcGFja2VkIG9wdGlvbiBjYW4gYmUgZW5hYmxlZCBmb3IgcmVwZWF0ZWQgcHJpbWl0aXZlIGZpZWxkcyB0byBlbmFibGUKIAkvLyBhIG1vcmUgZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9uIHRoZSB3aXJlLiBSYXRoZXIgdGhhbiByZXBlYXRlZGx5CiAJLy8gd3JpdGluZyB0aGUgdGFnIGFuZCB0eXBlIGZvciBlYWNoIGVsZW1lbnQsIHRoZSBlbnRpcmUgYXJyYXkgaXMgZW5jb2RlZCBhcwogCS8vIGEgc2luZ2xlIGxlbmd0aC1kZWxpbWl0ZWQgYmxvYi4gSW4gcHJvdG8zLCBvbmx5IGV4cGxpY2l0IHNldHRpbmcgaXQgdG8KLQkvLyBmYWxzZSB3aWxsIGF2b2lkIHVzaW5nIHBhY2tlZCBlbmNvZGluZy4KKwkvLyBmYWxzZSB3aWxsIGF2b2lkIHVzaW5nIHBhY2tlZCBlbmNvZGluZy4gIFRoaXMgb3B0aW9uIGlzIHByb2hpYml0ZWQgaW4KKwkvLyBFZGl0aW9ucywgYnV0IHRoZSBgcmVwZWF0ZWRfZmllbGRfZW5jb2RpbmdgIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gY29udHJvbAorCS8vIHRoZSBiZWhhdmlvci4KIAlQYWNrZWQgKmJvb2wgYHByb3RvYnVmOiJ2YXJpbnQsMixvcHQsbmFtZT1wYWNrZWQiIGpzb246InBhY2tlZCxvbWl0ZW1wdHkiYAogCS8vIFRoZSBqc3R5cGUgb3B0aW9uIGRldGVybWluZXMgdGhlIEphdmFTY3JpcHQgdHlwZSB1c2VkIGZvciB2YWx1ZXMgb2YgdGhlCiAJLy8gZmllbGQuICBUaGUgb3B0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGZvciA2NCBiaXQgaW50ZWdyYWwgYW5kIGZpeGVkIHR5cGVzCkBAIC0xODM4LDE4ICsyNjU1LDE2IEBACiAJLy8gY2FsbCBmcm9tIG11bHRpcGxlIHRocmVhZHMgY29uY3VycmVudGx5LCB3aGlsZSBub24tY29uc3QgbWV0aG9kcyBjb250aW51ZQogCS8vIHRvIHJlcXVpcmUgZXhjbHVzaXZlIGFjY2Vzcy4KIAkvLwotCS8vCi0JLy8gTm90ZSB0aGF0IGltcGxlbWVudGF0aW9ucyBtYXkgY2hvb3NlIG5vdCB0byBjaGVjayByZXF1aXJlZCBmaWVsZHMgd2l0aGluCi0JLy8gYSBsYXp5IHN1Yi1tZXNzYWdlLiAgVGhhdCBpcywgY2FsbGluZyBJc0luaXRpYWxpemVkKCkgb24gdGhlIG91dGVyIG1lc3NhZ2UKLQkvLyBtYXkgcmV0dXJuIHRydWUgZXZlbiBpZiB0aGUgaW5uZXIgbWVzc2FnZSBoYXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuCi0JLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGlubmVyIG1lc3NhZ2Ugd291bGQgaGF2ZSB0byBiZQotCS8vIHBhcnNlZCBpbiBvcmRlciB0byBwZXJmb3JtIHRoZSBjaGVjaywgZGVmZWF0aW5nIHRoZSBwdXJwb3NlIG9mIGxhenkKLQkvLyBwYXJzaW5nLiAgQW4gaW1wbGVtZW50YXRpb24gd2hpY2ggY2hvb3NlcyBub3QgdG8gY2hlY2sgcmVxdWlyZWQgZmllbGRzCi0JLy8gbXVzdCBiZSBjb25zaXN0ZW50IGFib3V0IGl0LiAgVGhhdCBpcywgZm9yIGFueSBwYXJ0aWN1bGFyIHN1Yi1tZXNzYWdlLCB0aGUKLQkvLyBpbXBsZW1lbnRhdGlvbiBtdXN0IGVpdGhlciAqYWx3YXlzKiBjaGVjayBpdHMgcmVxdWlyZWQgZmllbGRzLCBvciAqbmV2ZXIqCi0JLy8gY2hlY2sgaXRzIHJlcXVpcmVkIGZpZWxkcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBoYXMKLQkvLyBiZWVuIHBhcnNlZC4KKwkvLyBOb3RlIHRoYXQgbGF6eSBtZXNzYWdlIGZpZWxkcyBhcmUgc3RpbGwgZWFnZXJseSB2ZXJpZmllZCB0byBjaGVjaworCS8vIGlsbC1mb3JtZWQgd2lyZWZvcm1hdCBvciBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcy4gQ2FsbGluZyBJc0luaXRpYWxpemVkKCkKKwkvLyBvbiB0aGUgb3V0ZXIgbWVzc2FnZSB3b3VsZCBmYWlsIGlmIHRoZSBpbm5lciBtZXNzYWdlIGhhcyBtaXNzaW5nIHJlcXVpcmVkCisJLy8gZmllbGRzLiBGYWlsZWQgdmVyaWZpY2F0aW9uIHdvdWxkIHJlc3VsdCBpbiBwYXJzaW5nIGZhaWx1cmUgKGV4Y2VwdCB3aGVuCisJLy8gdW5pbml0aWFsaXplZCBtZXNzYWdlcyBhcmUgYWNjZXB0YWJsZSkuCiAJTGF6eSAqYm9vbCBgcHJvdG9idWY6InZhcmludCw1LG9wdCxuYW1lPWxhenksZGVmPTAiIGpzb246Imxhenksb21pdGVtcHR5ImAKKwkvLyB1bnZlcmlmaWVkX2xhenkgZG9lcyBubyBjb3JyZWN0bmVzcyBjaGVja3Mgb24gdGhlIGJ5dGUgc3RyZWFtLiBUaGlzIHNob3VsZAorCS8vIG9ubHkgYmUgdXNlZCB3aGVyZSBsYXp5IHdpdGggdmVyaWZpY2F0aW9uIGlzIHByb2hpYml0aXZlIGZvciBwZXJmb3JtYW5jZQorCS8vIHJlYXNvbnMuCisJVW52ZXJpZmllZExhenkgKmJvb2wgYHByb3RvYnVmOiJ2YXJpbnQsMTUsb3B0LG5hbWU9dW52ZXJpZmllZF9sYXp5LGpzb249dW52ZXJpZmllZExhenksZGVmPTAiIGpzb246InVudmVyaWZpZWRfbGF6eSxvbWl0ZW1wdHkiYAogCS8vIElzIHRoaXMgZmllbGQgZGVwcmVjYXRlZD8KIAkvLyBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCiAJLy8gZm9yIGFjY2Vzc29ycywgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LCB0aGlzCkBAIC0xODU3LDE3ICsyNjcyLDI3IEBACiAJRGVwcmVjYXRlZCAqYm9vbCBgcHJvdG9idWY6InZhcmludCwzLG9wdCxuYW1lPWRlcHJlY2F0ZWQsZGVmPTAiIGpzb246ImRlcHJlY2F0ZWQsb21pdGVtcHR5ImAKIAkvLyBGb3IgR29vZ2xlLWludGVybmFsIG1pZ3JhdGlvbiBvbmx5LiBEbyBub3QgdXNlLgogCVdlYWsgKmJvb2wgYHByb3RvYnVmOiJ2YXJpbnQsMTAsb3B0LG5hbWU9d2VhayxkZWY9MCIganNvbjoid2VhayxvbWl0ZW1wdHkiYAorCS8vIEluZGljYXRlIHRoYXQgdGhlIGZpZWxkIHZhbHVlIHNob3VsZCBub3QgYmUgcHJpbnRlZCBvdXQgd2hlbiB1c2luZyBkZWJ1ZworCS8vIGZvcm1hdHMsIGUuZy4gd2hlbiB0aGUgZmllbGQgY29udGFpbnMgc2Vuc2l0aXZlIGNyZWRlbnRpYWxzLgorCURlYnVnUmVkYWN0ICAgICAqYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcm90b2J1ZjoidmFyaW50LDE2LG9wdCxuYW1lPWRlYnVnX3JlZGFjdCxqc29uPWRlYnVnUmVkYWN0LGRlZj0wIiBqc29uOiJkZWJ1Z19yZWRhY3Qsb21pdGVtcHR5ImAKKwlSZXRlbnRpb24gICAgICAgKkZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24gICBgcHJvdG9idWY6InZhcmludCwxNyxvcHQsbmFtZT1yZXRlbnRpb24sZW51bT1nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbiIganNvbjoicmV0ZW50aW9uLG9taXRlbXB0eSJgCisJVGFyZ2V0cyAgICAgICAgIFtdRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUgYHByb3RvYnVmOiJ2YXJpbnQsMTkscmVwLG5hbWU9dGFyZ2V0cyxlbnVtPWdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZSIganNvbjoidGFyZ2V0cyxvbWl0ZW1wdHkiYAorCUVkaXRpb25EZWZhdWx0cyBbXSpGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHQgIGBwcm90b2J1ZjoiYnl0ZXMsMjAscmVwLG5hbWU9ZWRpdGlvbl9kZWZhdWx0cyxqc29uPWVkaXRpb25EZWZhdWx0cyIganNvbjoiZWRpdGlvbl9kZWZhdWx0cyxvbWl0ZW1wdHkiYAorCS8vIEFueSBmZWF0dXJlcyBkZWZpbmVkIGluIHRoZSBzcGVjaWZpYyBlZGl0aW9uLgorCUZlYXR1cmVzICpGZWF0dXJlU2V0IGBwcm90b2J1ZjoiYnl0ZXMsMjEsb3B0LG5hbWU9ZmVhdHVyZXMiIGpzb246ImZlYXR1cmVzLG9taXRlbXB0eSJgCiAJLy8gVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCiAJVW5pbnRlcnByZXRlZE9wdGlvbiBbXSpVbmludGVycHJldGVkT3B0aW9uIGBwcm90b2J1ZjoiYnl0ZXMsOTk5LHJlcCxuYW1lPXVuaW50ZXJwcmV0ZWRfb3B0aW9uLGpzb249dW5pbnRlcnByZXRlZE9wdGlvbiIganNvbjoidW5pbnRlcnByZXRlZF9vcHRpb24sb21pdGVtcHR5ImAKIH0KIAogLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIEZpZWxkT3B0aW9ucyBmaWVsZHMuCiBjb25zdCAoCi0JRGVmYXVsdF9GaWVsZE9wdGlvbnNfQ3R5cGUgICAgICA9IEZpZWxkT3B0aW9uc19TVFJJTkcKLQlEZWZhdWx0X0ZpZWxkT3B0aW9uc19Kc3R5cGUgICAgID0gRmllbGRPcHRpb25zX0pTX05PUk1BTAotCURlZmF1bHRfRmllbGRPcHRpb25zX0xhenkgICAgICAgPSBib29sKGZhbHNlKQotCURlZmF1bHRfRmllbGRPcHRpb25zX0RlcHJlY2F0ZWQgPSBib29sKGZhbHNlKQotCURlZmF1bHRfRmllbGRPcHRpb25zX1dlYWsgICAgICAgPSBib29sKGZhbHNlKQorCURlZmF1bHRfRmllbGRPcHRpb25zX0N0eXBlICAgICAgICAgID0gRmllbGRPcHRpb25zX1NUUklORworCURlZmF1bHRfRmllbGRPcHRpb25zX0pzdHlwZSAgICAgICAgID0gRmllbGRPcHRpb25zX0pTX05PUk1BTAorCURlZmF1bHRfRmllbGRPcHRpb25zX0xhenkgICAgICAgICAgID0gYm9vbChmYWxzZSkKKwlEZWZhdWx0X0ZpZWxkT3B0aW9uc19VbnZlcmlmaWVkTGF6eSA9IGJvb2woZmFsc2UpCisJRGVmYXVsdF9GaWVsZE9wdGlvbnNfRGVwcmVjYXRlZCAgICAgPSBib29sKGZhbHNlKQorCURlZmF1bHRfRmllbGRPcHRpb25zX1dlYWsgICAgICAgICAgID0gYm9vbChmYWxzZSkKKwlEZWZhdWx0X0ZpZWxkT3B0aW9uc19EZWJ1Z1JlZGFjdCAgICA9IGJvb2woZmFsc2UpCiApCiAKIGZ1bmMgKHggKkZpZWxkT3B0aW9ucykgUmVzZXQoKSB7CkBAIC0xOTMwLDYgKzI3NTUsMTMgQEAKIAlyZXR1cm4gRGVmYXVsdF9GaWVsZE9wdGlvbnNfTGF6eQogfQogCitmdW5jICh4ICpGaWVsZE9wdGlvbnMpIEdldFVudmVyaWZpZWRMYXp5KCkgYm9vbCB7CisJaWYgeCAhPSBuaWwgJiYgeC5VbnZlcmlmaWVkTGF6eSAhPSBuaWwgeworCQlyZXR1cm4gKnguVW52ZXJpZmllZExhenkKKwl9CisJcmV0dXJuIERlZmF1bHRfRmllbGRPcHRpb25zX1VudmVyaWZpZWRMYXp5Cit9CisKIGZ1bmMgKHggKkZpZWxkT3B0aW9ucykgR2V0RGVwcmVjYXRlZCgpIGJvb2wgewogCWlmIHggIT0gbmlsICYmIHguRGVwcmVjYXRlZCAhPSBuaWwgewogCQlyZXR1cm4gKnguRGVwcmVjYXRlZApAQCAtMTk0NCw2ICsyNzc2LDQxIEBACiAJcmV0dXJuIERlZmF1bHRfRmllbGRPcHRpb25zX1dlYWsKIH0KIAorZnVuYyAoeCAqRmllbGRPcHRpb25zKSBHZXREZWJ1Z1JlZGFjdCgpIGJvb2wgeworCWlmIHggIT0gbmlsICYmIHguRGVidWdSZWRhY3QgIT0gbmlsIHsKKwkJcmV0dXJuICp4LkRlYnVnUmVkYWN0CisJfQorCXJldHVybiBEZWZhdWx0X0ZpZWxkT3B0aW9uc19EZWJ1Z1JlZGFjdAorfQorCitmdW5jICh4ICpGaWVsZE9wdGlvbnMpIEdldFJldGVudGlvbigpIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24geworCWlmIHggIT0gbmlsICYmIHguUmV0ZW50aW9uICE9IG5pbCB7CisJCXJldHVybiAqeC5SZXRlbnRpb24KKwl9CisJcmV0dXJuIEZpZWxkT3B0aW9uc19SRVRFTlRJT05fVU5LTk9XTgorfQorCitmdW5jICh4ICpGaWVsZE9wdGlvbnMpIEdldFRhcmdldHMoKSBbXUZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlIHsKKwlpZiB4ICE9IG5pbCB7CisJCXJldHVybiB4LlRhcmdldHMKKwl9CisJcmV0dXJuIG5pbAorfQorCitmdW5jICh4ICpGaWVsZE9wdGlvbnMpIEdldEVkaXRpb25EZWZhdWx0cygpIFtdKkZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdCB7CisJaWYgeCAhPSBuaWwgeworCQlyZXR1cm4geC5FZGl0aW9uRGVmYXVsdHMKKwl9CisJcmV0dXJuIG5pbAorfQorCitmdW5jICh4ICpGaWVsZE9wdGlvbnMpIEdldEZlYXR1cmVzKCkgKkZlYXR1cmVTZXQgeworCWlmIHggIT0gbmlsIHsKKwkJcmV0dXJuIHguRmVhdHVyZXMKKwl9CisJcmV0dXJuIG5pbAorfQorCiBmdW5jICh4ICpGaWVsZE9wdGlvbnMpIEdldFVuaW50ZXJwcmV0ZWRPcHRpb24oKSBbXSpVbmludGVycHJldGVkT3B0aW9uIHsKIAlpZiB4ICE9IG5pbCB7CiAJCXJldHVybiB4LlVuaW50ZXJwcmV0ZWRPcHRpb24KQEAgLTE5NTcsNiArMjgyNCw4IEBACiAJdW5rbm93bkZpZWxkcyAgIHByb3RvaW1wbC5Vbmtub3duRmllbGRzCiAJZXh0ZW5zaW9uRmllbGRzIHByb3RvaW1wbC5FeHRlbnNpb25GaWVsZHMKIAorCS8vIEFueSBmZWF0dXJlcyBkZWZpbmVkIGluIHRoZSBzcGVjaWZpYyBlZGl0aW9uLgorCUZlYXR1cmVzICpGZWF0dXJlU2V0IGBwcm90b2J1ZjoiYnl0ZXMsMSxvcHQsbmFtZT1mZWF0dXJlcyIganNvbjoiZmVhdHVyZXMsb21pdGVtcHR5ImAKIAkvLyBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4KIAlVbmludGVycHJldGVkT3B0aW9uIFtdKlVuaW50ZXJwcmV0ZWRPcHRpb24gYHByb3RvYnVmOiJieXRlcyw5OTkscmVwLG5hbWU9dW5pbnRlcnByZXRlZF9vcHRpb24sanNvbj11bmludGVycHJldGVkT3B0aW9uIiBqc29uOiJ1bmludGVycHJldGVkX29wdGlvbixvbWl0ZW1wdHkiYAogfQpAQCAtMTk5Myw2ICsyODYyLDEzIEBACiAJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0daSVAoKSwgW11pbnR7MTN9CiB9CiAKK2Z1bmMgKHggKk9uZW9mT3B0aW9ucykgR2V0RmVhdHVyZXMoKSAqRmVhdHVyZVNldCB7CisJaWYgeCAhPSBuaWwgeworCQlyZXR1cm4geC5GZWF0dXJlcworCX0KKwlyZXR1cm4gbmlsCit9CisKIGZ1bmMgKHggKk9uZW9mT3B0aW9ucykgR2V0VW5pbnRlcnByZXRlZE9wdGlvbigpIFtdKlVuaW50ZXJwcmV0ZWRPcHRpb24gewogCWlmIHggIT0gbmlsIHsKIAkJcmV0dXJuIHguVW5pbnRlcnByZXRlZE9wdGlvbgpAQCAtMjAxNCw2ICsyODkwLDE3IEBACiAJLy8gZm9yIHRoZSBlbnVtLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsIHRoaXMKIAkvLyBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIGVudW1zLgogCURlcHJlY2F0ZWQgKmJvb2wgYHByb3RvYnVmOiJ2YXJpbnQsMyxvcHQsbmFtZT1kZXByZWNhdGVkLGRlZj0wIiBqc29uOiJkZXByZWNhdGVkLG9taXRlbXB0eSJgCisJLy8gRW5hYmxlIHRoZSBsZWdhY3kgaGFuZGxpbmcgb2YgSlNPTiBmaWVsZCBuYW1lIGNvbmZsaWN0cy4gIFRoaXMgbG93ZXJjYXNlcworCS8vIGFuZCBzdHJpcHMgdW5kZXJzY29yZWQgZnJvbSB0aGUgZmllbGRzIGJlZm9yZSBjb21wYXJpc29uIGluIHByb3RvMyBvbmx5LgorCS8vIFRoZSBuZXcgYmVoYXZpb3IgdGFrZXMgYGpzb25fbmFtZWAgaW50byBhY2NvdW50IGFuZCBhcHBsaWVzIHRvIHByb3RvMiBhcworCS8vIHdlbGwuCisJLy8gVE9ETyBSZW1vdmUgdGhpcyBsZWdhY3kgYmVoYXZpb3Igb25jZSBkb3duc3RyZWFtIHRlYW1zIGhhdmUKKwkvLyBoYWQgdGltZSB0byBtaWdyYXRlLgorCS8vCisJLy8gRGVwcmVjYXRlZDogTWFya2VkIGFzIGRlcHJlY2F0ZWQgaW4gZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8uCisJRGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyAqYm9vbCBgcHJvdG9idWY6InZhcmludCw2LG9wdCxuYW1lPWRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzLGpzb249ZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyIganNvbjoiZGVwcmVjYXRlZF9sZWdhY3lfanNvbl9maWVsZF9jb25mbGljdHMsb21pdGVtcHR5ImAKKwkvLyBBbnkgZmVhdHVyZXMgZGVmaW5lZCBpbiB0aGUgc3BlY2lmaWMgZWRpdGlvbi4KKwlGZWF0dXJlcyAqRmVhdHVyZVNldCBgcHJvdG9idWY6ImJ5dGVzLDcsb3B0LG5hbWU9ZmVhdHVyZXMiIGpzb246ImZlYXR1cmVzLG9taXRlbXB0eSJgCiAJLy8gVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCiAJVW5pbnRlcnByZXRlZE9wdGlvbiBbXSpVbmludGVycHJldGVkT3B0aW9uIGBwcm90b2J1ZjoiYnl0ZXMsOTk5LHJlcCxuYW1lPXVuaW50ZXJwcmV0ZWRfb3B0aW9uLGpzb249dW5pbnRlcnByZXRlZE9wdGlvbiIganNvbjoidW5pbnRlcnByZXRlZF9vcHRpb24sb21pdGVtcHR5ImAKIH0KQEAgLTIwNjksNiArMjk1NiwyMSBAQAogCXJldHVybiBEZWZhdWx0X0VudW1PcHRpb25zX0RlcHJlY2F0ZWQKIH0KIAorLy8gRGVwcmVjYXRlZDogTWFya2VkIGFzIGRlcHJlY2F0ZWQgaW4gZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8uCitmdW5jICh4ICpFbnVtT3B0aW9ucykgR2V0RGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cygpIGJvb2wgeworCWlmIHggIT0gbmlsICYmIHguRGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyAhPSBuaWwgeworCQlyZXR1cm4gKnguRGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cworCX0KKwlyZXR1cm4gZmFsc2UKK30KKworZnVuYyAoeCAqRW51bU9wdGlvbnMpIEdldEZlYXR1cmVzKCkgKkZlYXR1cmVTZXQgeworCWlmIHggIT0gbmlsIHsKKwkJcmV0dXJuIHguRmVhdHVyZXMKKwl9CisJcmV0dXJuIG5pbAorfQorCiBmdW5jICh4ICpFbnVtT3B0aW9ucykgR2V0VW5pbnRlcnByZXRlZE9wdGlvbigpIFtdKlVuaW50ZXJwcmV0ZWRPcHRpb24gewogCWlmIHggIT0gbmlsIHsKIAkJcmV0dXJuIHguVW5pbnRlcnByZXRlZE9wdGlvbgpAQCAtMjA4NywxMyArMjk4OSwyMCBAQAogCS8vIGZvciB0aGUgZW51bSB2YWx1ZSwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LAogCS8vIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBlbnVtIHZhbHVlcy4KIAlEZXByZWNhdGVkICpib29sIGBwcm90b2J1ZjoidmFyaW50LDEsb3B0LG5hbWU9ZGVwcmVjYXRlZCxkZWY9MCIganNvbjoiZGVwcmVjYXRlZCxvbWl0ZW1wdHkiYAorCS8vIEFueSBmZWF0dXJlcyBkZWZpbmVkIGluIHRoZSBzcGVjaWZpYyBlZGl0aW9uLgorCUZlYXR1cmVzICpGZWF0dXJlU2V0IGBwcm90b2J1ZjoiYnl0ZXMsMixvcHQsbmFtZT1mZWF0dXJlcyIganNvbjoiZmVhdHVyZXMsb21pdGVtcHR5ImAKKwkvLyBJbmRpY2F0ZSB0aGF0IGZpZWxkcyBhbm5vdGF0ZWQgd2l0aCB0aGlzIGVudW0gdmFsdWUgc2hvdWxkIG5vdCBiZSBwcmludGVkCisJLy8gb3V0IHdoZW4gdXNpbmcgZGVidWcgZm9ybWF0cywgZS5nLiB3aGVuIHRoZSBmaWVsZCBjb250YWlucyBzZW5zaXRpdmUKKwkvLyBjcmVkZW50aWFscy4KKwlEZWJ1Z1JlZGFjdCAqYm9vbCBgcHJvdG9idWY6InZhcmludCwzLG9wdCxuYW1lPWRlYnVnX3JlZGFjdCxqc29uPWRlYnVnUmVkYWN0LGRlZj0wIiBqc29uOiJkZWJ1Z19yZWRhY3Qsb21pdGVtcHR5ImAKIAkvLyBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4KIAlVbmludGVycHJldGVkT3B0aW9uIFtdKlVuaW50ZXJwcmV0ZWRPcHRpb24gYHByb3RvYnVmOiJieXRlcyw5OTkscmVwLG5hbWU9dW5pbnRlcnByZXRlZF9vcHRpb24sanNvbj11bmludGVycHJldGVkT3B0aW9uIiBqc29uOiJ1bmludGVycHJldGVkX29wdGlvbixvbWl0ZW1wdHkiYAogfQogCiAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgRW51bVZhbHVlT3B0aW9ucyBmaWVsZHMuCiBjb25zdCAoCi0JRGVmYXVsdF9FbnVtVmFsdWVPcHRpb25zX0RlcHJlY2F0ZWQgPSBib29sKGZhbHNlKQorCURlZmF1bHRfRW51bVZhbHVlT3B0aW9uc19EZXByZWNhdGVkICA9IGJvb2woZmFsc2UpCisJRGVmYXVsdF9FbnVtVmFsdWVPcHRpb25zX0RlYnVnUmVkYWN0ID0gYm9vbChmYWxzZSkKICkKIAogZnVuYyAoeCAqRW51bVZhbHVlT3B0aW9ucykgUmVzZXQoKSB7CkBAIC0yMTM1LDYgKzMwNDQsMjAgQEAKIAlyZXR1cm4gRGVmYXVsdF9FbnVtVmFsdWVPcHRpb25zX0RlcHJlY2F0ZWQKIH0KIAorZnVuYyAoeCAqRW51bVZhbHVlT3B0aW9ucykgR2V0RmVhdHVyZXMoKSAqRmVhdHVyZVNldCB7CisJaWYgeCAhPSBuaWwgeworCQlyZXR1cm4geC5GZWF0dXJlcworCX0KKwlyZXR1cm4gbmlsCit9CisKK2Z1bmMgKHggKkVudW1WYWx1ZU9wdGlvbnMpIEdldERlYnVnUmVkYWN0KCkgYm9vbCB7CisJaWYgeCAhPSBuaWwgJiYgeC5EZWJ1Z1JlZGFjdCAhPSBuaWwgeworCQlyZXR1cm4gKnguRGVidWdSZWRhY3QKKwl9CisJcmV0dXJuIERlZmF1bHRfRW51bVZhbHVlT3B0aW9uc19EZWJ1Z1JlZGFjdAorfQorCiBmdW5jICh4ICpFbnVtVmFsdWVPcHRpb25zKSBHZXRVbmludGVycHJldGVkT3B0aW9uKCkgW10qVW5pbnRlcnByZXRlZE9wdGlvbiB7CiAJaWYgeCAhPSBuaWwgewogCQlyZXR1cm4geC5VbmludGVycHJldGVkT3B0aW9uCkBAIC0yMTQ4LDYgKzMwNzEsOCBAQAogCXVua25vd25GaWVsZHMgICBwcm90b2ltcGwuVW5rbm93bkZpZWxkcwogCWV4dGVuc2lvbkZpZWxkcyBwcm90b2ltcGwuRXh0ZW5zaW9uRmllbGRzCiAKKwkvLyBBbnkgZmVhdHVyZXMgZGVmaW5lZCBpbiB0aGUgc3BlY2lmaWMgZWRpdGlvbi4KKwlGZWF0dXJlcyAqRmVhdHVyZVNldCBgcHJvdG9idWY6ImJ5dGVzLDM0LG9wdCxuYW1lPWZlYXR1cmVzIiBqc29uOiJmZWF0dXJlcyxvbWl0ZW1wdHkiYAogCS8vIElzIHRoaXMgc2VydmljZSBkZXByZWNhdGVkPwogCS8vIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnMKIAkvLyBmb3IgdGhlIHNlcnZpY2UsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCwKQEAgLTIxOTQsNiArMzExOSwxMyBAQAogCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezE2fQogfQogCitmdW5jICh4ICpTZXJ2aWNlT3B0aW9ucykgR2V0RmVhdHVyZXMoKSAqRmVhdHVyZVNldCB7CisJaWYgeCAhPSBuaWwgeworCQlyZXR1cm4geC5GZWF0dXJlcworCX0KKwlyZXR1cm4gbmlsCit9CisKIGZ1bmMgKHggKlNlcnZpY2VPcHRpb25zKSBHZXREZXByZWNhdGVkKCkgYm9vbCB7CiAJaWYgeCAhPSBuaWwgJiYgeC5EZXByZWNhdGVkICE9IG5pbCB7CiAJCXJldHVybiAqeC5EZXByZWNhdGVkCkBAIC0yMjIwLDYgKzMxNTIsOCBAQAogCS8vIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBtZXRob2RzLgogCURlcHJlY2F0ZWQgICAgICAgKmJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICBgcHJvdG9idWY6InZhcmludCwzMyxvcHQsbmFtZT1kZXByZWNhdGVkLGRlZj0wIiBqc29uOiJkZXByZWNhdGVkLG9taXRlbXB0eSJgCiAJSWRlbXBvdGVuY3lMZXZlbCAqTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsIGBwcm90b2J1ZjoidmFyaW50LDM0LG9wdCxuYW1lPWlkZW1wb3RlbmN5X2xldmVsLGpzb249aWRlbXBvdGVuY3lMZXZlbCxlbnVtPWdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwsZGVmPTAiIGpzb246ImlkZW1wb3RlbmN5X2xldmVsLG9taXRlbXB0eSJgCisJLy8gQW55IGZlYXR1cmVzIGRlZmluZWQgaW4gdGhlIHNwZWNpZmljIGVkaXRpb24uCisJRmVhdHVyZXMgKkZlYXR1cmVTZXQgYHByb3RvYnVmOiJieXRlcywzNSxvcHQsbmFtZT1mZWF0dXJlcyIganNvbjoiZmVhdHVyZXMsb21pdGVtcHR5ImAKIAkvLyBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4KIAlVbmludGVycHJldGVkT3B0aW9uIFtdKlVuaW50ZXJwcmV0ZWRPcHRpb24gYHByb3RvYnVmOiJieXRlcyw5OTkscmVwLG5hbWU9dW5pbnRlcnByZXRlZF9vcHRpb24sanNvbj11bmludGVycHJldGVkT3B0aW9uIiBqc29uOiJ1bmludGVycHJldGVkX29wdGlvbixvbWl0ZW1wdHkiYAogfQpAQCAtMjI3Niw2ICszMjEwLDEzIEBACiAJcmV0dXJuIERlZmF1bHRfTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsCiB9CiAKK2Z1bmMgKHggKk1ldGhvZE9wdGlvbnMpIEdldEZlYXR1cmVzKCkgKkZlYXR1cmVTZXQgeworCWlmIHggIT0gbmlsIHsKKwkJcmV0dXJuIHguRmVhdHVyZXMKKwl9CisJcmV0dXJuIG5pbAorfQorCiBmdW5jICh4ICpNZXRob2RPcHRpb25zKSBHZXRVbmludGVycHJldGVkT3B0aW9uKCkgW10qVW5pbnRlcnByZXRlZE9wdGlvbiB7CiAJaWYgeCAhPSBuaWwgewogCQlyZXR1cm4geC5VbmludGVycHJldGVkT3B0aW9uCkBAIC0yMzg2LDYgKzMzMjcsMTcxIEBACiAJcmV0dXJuICIiCiB9CiAKKy8vIFRPRE8gRW51bXMgaW4gQysrIGdlbmNvZGUgKGFuZCBwb3RlbnRpYWxseSBvdGhlciBsYW5ndWFnZXMpIGFyZQorLy8gbm90IHdlbGwgc2NvcGVkLiAgVGhpcyBtZWFucyB0aGF0IGVhY2ggb2YgdGhlIGZlYXR1cmUgZW51bXMgYmVsb3cgY2FuIGNsYXNoCisvLyB3aXRoIGVhY2ggb3RoZXIuICBUaGUgc2hvcnQgbmFtZXMgd2UndmUgY2hvc2VuIG1heGltaXplIGNhbGwtc2l0ZQorLy8gcmVhZGFiaWxpdHksIGJ1dCBsZWF2ZSB1cyB2ZXJ5IG9wZW4gdG8gdGhpcyBzY2VuYXJpby4gIEEgZnV0dXJlIGZlYXR1cmUgd2lsbAorLy8gYmUgZGVzaWduZWQgYW5kIGltcGxlbWVudGVkIHRvIGhhbmRsZSB0aGlzLCBob3BlZnVsbHkgYmVmb3JlIHdlIGV2ZXIgaGl0IGEKKy8vIGNvbmZsaWN0IGhlcmUuCit0eXBlIEZlYXR1cmVTZXQgc3RydWN0IHsKKwlzdGF0ZSAgICAgICAgICAgcHJvdG9pbXBsLk1lc3NhZ2VTdGF0ZQorCXNpemVDYWNoZSAgICAgICBwcm90b2ltcGwuU2l6ZUNhY2hlCisJdW5rbm93bkZpZWxkcyAgIHByb3RvaW1wbC5Vbmtub3duRmllbGRzCisJZXh0ZW5zaW9uRmllbGRzIHByb3RvaW1wbC5FeHRlbnNpb25GaWVsZHMKKworCUZpZWxkUHJlc2VuY2UgICAgICAgICAqRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlICAgICAgICAgYHByb3RvYnVmOiJ2YXJpbnQsMSxvcHQsbmFtZT1maWVsZF9wcmVzZW5jZSxqc29uPWZpZWxkUHJlc2VuY2UsZW51bT1nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlIiBqc29uOiJmaWVsZF9wcmVzZW5jZSxvbWl0ZW1wdHkiYAorCUVudW1UeXBlICAgICAgICAgICAgICAqRmVhdHVyZVNldF9FbnVtVHlwZSAgICAgICAgICAgICAgYHByb3RvYnVmOiJ2YXJpbnQsMixvcHQsbmFtZT1lbnVtX3R5cGUsanNvbj1lbnVtVHlwZSxlbnVtPWdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0X0VudW1UeXBlIiBqc29uOiJlbnVtX3R5cGUsb21pdGVtcHR5ImAKKwlSZXBlYXRlZEZpZWxkRW5jb2RpbmcgKkZlYXR1cmVTZXRfUmVwZWF0ZWRGaWVsZEVuY29kaW5nIGBwcm90b2J1ZjoidmFyaW50LDMsb3B0LG5hbWU9cmVwZWF0ZWRfZmllbGRfZW5jb2RpbmcsanNvbj1yZXBlYXRlZEZpZWxkRW5jb2RpbmcsZW51bT1nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldF9SZXBlYXRlZEZpZWxkRW5jb2RpbmciIGpzb246InJlcGVhdGVkX2ZpZWxkX2VuY29kaW5nLG9taXRlbXB0eSJgCisJVXRmOFZhbGlkYXRpb24gICAgICAgICpGZWF0dXJlU2V0X1V0ZjhWYWxpZGF0aW9uICAgICAgICBgcHJvdG9idWY6InZhcmludCw0LG9wdCxuYW1lPXV0ZjhfdmFsaWRhdGlvbixqc29uPXV0ZjhWYWxpZGF0aW9uLGVudW09Z29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRfVXRmOFZhbGlkYXRpb24iIGpzb246InV0ZjhfdmFsaWRhdGlvbixvbWl0ZW1wdHkiYAorCU1lc3NhZ2VFbmNvZGluZyAgICAgICAqRmVhdHVyZVNldF9NZXNzYWdlRW5jb2RpbmcgICAgICAgYHByb3RvYnVmOiJ2YXJpbnQsNSxvcHQsbmFtZT1tZXNzYWdlX2VuY29kaW5nLGpzb249bWVzc2FnZUVuY29kaW5nLGVudW09Z29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRfTWVzc2FnZUVuY29kaW5nIiBqc29uOiJtZXNzYWdlX2VuY29kaW5nLG9taXRlbXB0eSJgCisJSnNvbkZvcm1hdCAgICAgICAgICAgICpGZWF0dXJlU2V0X0pzb25Gb3JtYXQgICAgICAgICAgICBgcHJvdG9idWY6InZhcmludCw2LG9wdCxuYW1lPWpzb25fZm9ybWF0LGpzb249anNvbkZvcm1hdCxlbnVtPWdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0X0pzb25Gb3JtYXQiIGpzb246Impzb25fZm9ybWF0LG9taXRlbXB0eSJgCit9CisKK2Z1bmMgKHggKkZlYXR1cmVTZXQpIFJlc2V0KCkgeworCSp4ID0gRmVhdHVyZVNldHt9CisJaWYgcHJvdG9pbXBsLlVuc2FmZUVuYWJsZWQgeworCQltaSA6PSAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1sxOV0KKwkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCisJCW1zLlN0b3JlTWVzc2FnZUluZm8obWkpCisJfQorfQorCitmdW5jICh4ICpGZWF0dXJlU2V0KSBTdHJpbmcoKSBzdHJpbmcgeworCXJldHVybiBwcm90b2ltcGwuWC5NZXNzYWdlU3RyaW5nT2YoeCkKK30KKworZnVuYyAoKkZlYXR1cmVTZXQpIFByb3RvTWVzc2FnZSgpIHt9CisKK2Z1bmMgKHggKkZlYXR1cmVTZXQpIFByb3RvUmVmbGVjdCgpIHByb3RvcmVmbGVjdC5NZXNzYWdlIHsKKwltaSA6PSAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1sxOV0KKwlpZiBwcm90b2ltcGwuVW5zYWZlRW5hYmxlZCAmJiB4ICE9IG5pbCB7CisJCW1zIDo9IHByb3RvaW1wbC5YLk1lc3NhZ2VTdGF0ZU9mKHByb3RvaW1wbC5Qb2ludGVyKHgpKQorCQlpZiBtcy5Mb2FkTWVzc2FnZUluZm8oKSA9PSBuaWwgeworCQkJbXMuU3RvcmVNZXNzYWdlSW5mbyhtaSkKKwkJfQorCQlyZXR1cm4gbXMKKwl9CisJcmV0dXJuIG1pLk1lc3NhZ2VPZih4KQorfQorCisvLyBEZXByZWNhdGVkOiBVc2UgRmVhdHVyZVNldC5Qcm90b1JlZmxlY3QuRGVzY3JpcHRvciBpbnN0ZWFkLgorZnVuYyAoKkZlYXR1cmVTZXQpIERlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezE5fQorfQorCitmdW5jICh4ICpGZWF0dXJlU2V0KSBHZXRGaWVsZFByZXNlbmNlKCkgRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlIHsKKwlpZiB4ICE9IG5pbCAmJiB4LkZpZWxkUHJlc2VuY2UgIT0gbmlsIHsKKwkJcmV0dXJuICp4LkZpZWxkUHJlc2VuY2UKKwl9CisJcmV0dXJuIEZlYXR1cmVTZXRfRklFTERfUFJFU0VOQ0VfVU5LTk9XTgorfQorCitmdW5jICh4ICpGZWF0dXJlU2V0KSBHZXRFbnVtVHlwZSgpIEZlYXR1cmVTZXRfRW51bVR5cGUgeworCWlmIHggIT0gbmlsICYmIHguRW51bVR5cGUgIT0gbmlsIHsKKwkJcmV0dXJuICp4LkVudW1UeXBlCisJfQorCXJldHVybiBGZWF0dXJlU2V0X0VOVU1fVFlQRV9VTktOT1dOCit9CisKK2Z1bmMgKHggKkZlYXR1cmVTZXQpIEdldFJlcGVhdGVkRmllbGRFbmNvZGluZygpIEZlYXR1cmVTZXRfUmVwZWF0ZWRGaWVsZEVuY29kaW5nIHsKKwlpZiB4ICE9IG5pbCAmJiB4LlJlcGVhdGVkRmllbGRFbmNvZGluZyAhPSBuaWwgeworCQlyZXR1cm4gKnguUmVwZWF0ZWRGaWVsZEVuY29kaW5nCisJfQorCXJldHVybiBGZWF0dXJlU2V0X1JFUEVBVEVEX0ZJRUxEX0VOQ09ESU5HX1VOS05PV04KK30KKworZnVuYyAoeCAqRmVhdHVyZVNldCkgR2V0VXRmOFZhbGlkYXRpb24oKSBGZWF0dXJlU2V0X1V0ZjhWYWxpZGF0aW9uIHsKKwlpZiB4ICE9IG5pbCAmJiB4LlV0ZjhWYWxpZGF0aW9uICE9IG5pbCB7CisJCXJldHVybiAqeC5VdGY4VmFsaWRhdGlvbgorCX0KKwlyZXR1cm4gRmVhdHVyZVNldF9VVEY4X1ZBTElEQVRJT05fVU5LTk9XTgorfQorCitmdW5jICh4ICpGZWF0dXJlU2V0KSBHZXRNZXNzYWdlRW5jb2RpbmcoKSBGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZyB7CisJaWYgeCAhPSBuaWwgJiYgeC5NZXNzYWdlRW5jb2RpbmcgIT0gbmlsIHsKKwkJcmV0dXJuICp4Lk1lc3NhZ2VFbmNvZGluZworCX0KKwlyZXR1cm4gRmVhdHVyZVNldF9NRVNTQUdFX0VOQ09ESU5HX1VOS05PV04KK30KKworZnVuYyAoeCAqRmVhdHVyZVNldCkgR2V0SnNvbkZvcm1hdCgpIEZlYXR1cmVTZXRfSnNvbkZvcm1hdCB7CisJaWYgeCAhPSBuaWwgJiYgeC5Kc29uRm9ybWF0ICE9IG5pbCB7CisJCXJldHVybiAqeC5Kc29uRm9ybWF0CisJfQorCXJldHVybiBGZWF0dXJlU2V0X0pTT05fRk9STUFUX1VOS05PV04KK30KKworLy8gQSBjb21waWxlZCBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZGVmYXVsdHMgb2YgYSBzZXQgb2YgZmVhdHVyZXMuICBUaGVzZQorLy8gbWVzc2FnZXMgYXJlIGdlbmVyYXRlZCBmcm9tIEZlYXR1cmVTZXQgZXh0ZW5zaW9ucyBhbmQgY2FuIGJlIHVzZWQgdG8gc2VlZAorLy8gZmVhdHVyZSByZXNvbHV0aW9uLiBUaGUgcmVzb2x1dGlvbiB3aXRoIHRoaXMgb2JqZWN0IGJlY29tZXMgYSBzaW1wbGUgc2VhcmNoCisvLyBmb3IgdGhlIGNsb3Nlc3QgbWF0Y2hpbmcgZWRpdGlvbiwgZm9sbG93ZWQgYnkgcHJvdG8gbWVyZ2VzLgordHlwZSBGZWF0dXJlU2V0RGVmYXVsdHMgc3RydWN0IHsKKwlzdGF0ZSAgICAgICAgIHByb3RvaW1wbC5NZXNzYWdlU3RhdGUKKwlzaXplQ2FjaGUgICAgIHByb3RvaW1wbC5TaXplQ2FjaGUKKwl1bmtub3duRmllbGRzIHByb3RvaW1wbC5Vbmtub3duRmllbGRzCisKKwlEZWZhdWx0cyBbXSpGZWF0dXJlU2V0RGVmYXVsdHNfRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0IGBwcm90b2J1ZjoiYnl0ZXMsMSxyZXAsbmFtZT1kZWZhdWx0cyIganNvbjoiZGVmYXVsdHMsb21pdGVtcHR5ImAKKwkvLyBUaGUgbWluaW11bSBzdXBwb3J0ZWQgZWRpdGlvbiAoaW5jbHVzaXZlKSB3aGVuIHRoaXMgd2FzIGNvbnN0cnVjdGVkLgorCS8vIEVkaXRpb25zIGJlZm9yZSB0aGlzIHdpbGwgbm90IGhhdmUgZGVmYXVsdHMuCisJTWluaW11bUVkaXRpb24gKkVkaXRpb24gYHByb3RvYnVmOiJ2YXJpbnQsNCxvcHQsbmFtZT1taW5pbXVtX2VkaXRpb24sanNvbj1taW5pbXVtRWRpdGlvbixlbnVtPWdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uIiBqc29uOiJtaW5pbXVtX2VkaXRpb24sb21pdGVtcHR5ImAKKwkvLyBUaGUgbWF4aW11bSBrbm93biBlZGl0aW9uIChpbmNsdXNpdmUpIHdoZW4gdGhpcyB3YXMgY29uc3RydWN0ZWQuIEVkaXRpb25zCisJLy8gYWZ0ZXIgdGhpcyB3aWxsIG5vdCBoYXZlIHJlbGlhYmxlIGRlZmF1bHRzLgorCU1heGltdW1FZGl0aW9uICpFZGl0aW9uIGBwcm90b2J1ZjoidmFyaW50LDUsb3B0LG5hbWU9bWF4aW11bV9lZGl0aW9uLGpzb249bWF4aW11bUVkaXRpb24sZW51bT1nb29nbGUucHJvdG9idWYuRWRpdGlvbiIganNvbjoibWF4aW11bV9lZGl0aW9uLG9taXRlbXB0eSJgCit9CisKK2Z1bmMgKHggKkZlYXR1cmVTZXREZWZhdWx0cykgUmVzZXQoKSB7CisJKnggPSBGZWF0dXJlU2V0RGVmYXVsdHN7fQorCWlmIHByb3RvaW1wbC5VbnNhZmVFbmFibGVkIHsKKwkJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjBdCisJCW1zIDo9IHByb3RvaW1wbC5YLk1lc3NhZ2VTdGF0ZU9mKHByb3RvaW1wbC5Qb2ludGVyKHgpKQorCQltcy5TdG9yZU1lc3NhZ2VJbmZvKG1pKQorCX0KK30KKworZnVuYyAoeCAqRmVhdHVyZVNldERlZmF1bHRzKSBTdHJpbmcoKSBzdHJpbmcgeworCXJldHVybiBwcm90b2ltcGwuWC5NZXNzYWdlU3RyaW5nT2YoeCkKK30KKworZnVuYyAoKkZlYXR1cmVTZXREZWZhdWx0cykgUHJvdG9NZXNzYWdlKCkge30KKworZnVuYyAoeCAqRmVhdHVyZVNldERlZmF1bHRzKSBQcm90b1JlZmxlY3QoKSBwcm90b3JlZmxlY3QuTWVzc2FnZSB7CisJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjBdCisJaWYgcHJvdG9pbXBsLlVuc2FmZUVuYWJsZWQgJiYgeCAhPSBuaWwgeworCQltcyA6PSBwcm90b2ltcGwuWC5NZXNzYWdlU3RhdGVPZihwcm90b2ltcGwuUG9pbnRlcih4KSkKKwkJaWYgbXMuTG9hZE1lc3NhZ2VJbmZvKCkgPT0gbmlsIHsKKwkJCW1zLlN0b3JlTWVzc2FnZUluZm8obWkpCisJCX0KKwkJcmV0dXJuIG1zCisJfQorCXJldHVybiBtaS5NZXNzYWdlT2YoeCkKK30KKworLy8gRGVwcmVjYXRlZDogVXNlIEZlYXR1cmVTZXREZWZhdWx0cy5Qcm90b1JlZmxlY3QuRGVzY3JpcHRvciBpbnN0ZWFkLgorZnVuYyAoKkZlYXR1cmVTZXREZWZhdWx0cykgRGVzY3JpcHRvcigpIChbXWJ5dGUsIFtdaW50KSB7CisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0daSVAoKSwgW11pbnR7MjB9Cit9CisKK2Z1bmMgKHggKkZlYXR1cmVTZXREZWZhdWx0cykgR2V0RGVmYXVsdHMoKSBbXSpGZWF0dXJlU2V0RGVmYXVsdHNfRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0IHsKKwlpZiB4ICE9IG5pbCB7CisJCXJldHVybiB4LkRlZmF1bHRzCisJfQorCXJldHVybiBuaWwKK30KKworZnVuYyAoeCAqRmVhdHVyZVNldERlZmF1bHRzKSBHZXRNaW5pbXVtRWRpdGlvbigpIEVkaXRpb24geworCWlmIHggIT0gbmlsICYmIHguTWluaW11bUVkaXRpb24gIT0gbmlsIHsKKwkJcmV0dXJuICp4Lk1pbmltdW1FZGl0aW9uCisJfQorCXJldHVybiBFZGl0aW9uX0VESVRJT05fVU5LTk9XTgorfQorCitmdW5jICh4ICpGZWF0dXJlU2V0RGVmYXVsdHMpIEdldE1heGltdW1FZGl0aW9uKCkgRWRpdGlvbiB7CisJaWYgeCAhPSBuaWwgJiYgeC5NYXhpbXVtRWRpdGlvbiAhPSBuaWwgeworCQlyZXR1cm4gKnguTWF4aW11bUVkaXRpb24KKwl9CisJcmV0dXJuIEVkaXRpb25fRURJVElPTl9VTktOT1dOCit9CisKIC8vIEVuY2Fwc3VsYXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgZnJvbSB3aGljaCBhCiAvLyBGaWxlRGVzY3JpcHRvclByb3RvIHdhcyBnZW5lcmF0ZWQuCiB0eXBlIFNvdXJjZUNvZGVJbmZvIHN0cnVjdCB7CkBAIC0yMzk5LDUwICszNTA1LDU1IEBACiAJLy8gdG9vbHMuCiAJLy8KIAkvLyBGb3IgZXhhbXBsZSwgc2F5IHdlIGhhdmUgYSBmaWxlIGxpa2U6Ci0JLy8gICBtZXNzYWdlIEZvbyB7Ci0JLy8gICAgIG9wdGlvbmFsIHN0cmluZyBmb28gPSAxOwotCS8vICAgfQorCS8vCisJLy8JbWVzc2FnZSBGb28geworCS8vCSAgb3B0aW9uYWwgc3RyaW5nIGZvbyA9IDE7CisJLy8JfQorCS8vCiAJLy8gTGV0J3MgbG9vayBhdCBqdXN0IHRoZSBmaWVsZCBkZWZpbml0aW9uOgotCS8vICAgb3B0aW9uYWwgc3RyaW5nIGZvbyA9IDE7Ci0JLy8gICBeICAgICAgIF5eICAgICBeXiAgXiAgXl5eCi0JLy8gICBhICAgICAgIGJjICAgICBkZSAgZiAgZ2hpCisJLy8KKwkvLwlvcHRpb25hbCBzdHJpbmcgZm9vID0gMTsKKwkvLwleICAgICAgIF5eICAgICBeXiAgXiAgXl5eCisJLy8JYSAgICAgICBiYyAgICAgZGUgIGYgIGdoaQorCS8vCiAJLy8gV2UgaGF2ZSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKLQkvLyAgIHNwYW4gICBwYXRoICAgICAgICAgICAgICAgcmVwcmVzZW50cwotCS8vICAgW2EsaSkgIFsgNCwgMCwgMiwgMCBdICAgICBUaGUgd2hvbGUgZmllbGQgZGVmaW5pdGlvbi4KLQkvLyAgIFthLGIpICBbIDQsIDAsIDIsIDAsIDQgXSAgVGhlIGxhYmVsIChvcHRpb25hbCkuCi0JLy8gICBbYyxkKSAgWyA0LCAwLCAyLCAwLCA1IF0gIFRoZSB0eXBlIChzdHJpbmcpLgotCS8vICAgW2UsZikgIFsgNCwgMCwgMiwgMCwgMSBdICBUaGUgbmFtZSAoZm9vKS4KLQkvLyAgIFtnLGgpICBbIDQsIDAsIDIsIDAsIDMgXSAgVGhlIG51bWJlciAoMSkuCisJLy8KKwkvLwlzcGFuICAgcGF0aCAgICAgICAgICAgICAgIHJlcHJlc2VudHMKKwkvLwlbYSxpKSAgWyA0LCAwLCAyLCAwIF0gICAgIFRoZSB3aG9sZSBmaWVsZCBkZWZpbml0aW9uLgorCS8vCVthLGIpICBbIDQsIDAsIDIsIDAsIDQgXSAgVGhlIGxhYmVsIChvcHRpb25hbCkuCisJLy8JW2MsZCkgIFsgNCwgMCwgMiwgMCwgNSBdICBUaGUgdHlwZSAoc3RyaW5nKS4KKwkvLwlbZSxmKSAgWyA0LCAwLCAyLCAwLCAxIF0gIFRoZSBuYW1lIChmb28pLgorCS8vCVtnLGgpICBbIDQsIDAsIDIsIDAsIDMgXSAgVGhlIG51bWJlciAoMSkuCiAJLy8KIAkvLyBOb3RlczoKLQkvLyAtIEEgbG9jYXRpb24gbWF5IHJlZmVyIHRvIGEgcmVwZWF0ZWQgZmllbGQgaXRzZWxmIChpLmUuIG5vdCB0byBhbnkKLQkvLyAgIHBhcnRpY3VsYXIgaW5kZXggd2l0aGluIGl0KS4gIFRoaXMgaXMgdXNlZCB3aGVuZXZlciBhIHNldCBvZiBlbGVtZW50cyBhcmUKLQkvLyAgIGxvZ2ljYWxseSBlbmNsb3NlZCBpbiBhIHNpbmdsZSBjb2RlIHNlZ21lbnQuICBGb3IgZXhhbXBsZSwgYW4gZW50aXJlCi0JLy8gICBleHRlbmQgYmxvY2sgKHBvc3NpYmx5IGNvbnRhaW5pbmcgbXVsdGlwbGUgZXh0ZW5zaW9uIGRlZmluaXRpb25zKSB3aWxsCi0JLy8gICBoYXZlIGFuIG91dGVyIGxvY2F0aW9uIHdob3NlIHBhdGggcmVmZXJzIHRvIHRoZSAiZXh0ZW5zaW9ucyIgcmVwZWF0ZWQKLQkvLyAgIGZpZWxkIHdpdGhvdXQgYW4gaW5kZXguCi0JLy8gLSBNdWx0aXBsZSBsb2NhdGlvbnMgbWF5IGhhdmUgdGhlIHNhbWUgcGF0aC4gIFRoaXMgaGFwcGVucyB3aGVuIGEgc2luZ2xlCi0JLy8gICBsb2dpY2FsIGRlY2xhcmF0aW9uIGlzIHNwcmVhZCBvdXQgYWNyb3NzIG11bHRpcGxlIHBsYWNlcy4gIFRoZSBtb3N0Ci0JLy8gICBvYnZpb3VzIGV4YW1wbGUgaXMgdGhlICJleHRlbmQiIGJsb2NrIGFnYWluIC0tIHRoZXJlIG1heSBiZSBtdWx0aXBsZQotCS8vICAgZXh0ZW5kIGJsb2NrcyBpbiB0aGUgc2FtZSBzY29wZSwgZWFjaCBvZiB3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgcGF0aC4KLQkvLyAtIEEgbG9jYXRpb24ncyBzcGFuIGlzIG5vdCBhbHdheXMgYSBzdWJzZXQgb2YgaXRzIHBhcmVudCdzIHNwYW4uICBGb3IKLQkvLyAgIGV4YW1wbGUsIHRoZSAiZXh0ZW5kZWUiIG9mIGFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbiBhcHBlYXJzIGF0IHRoZQotCS8vICAgYmVnaW5uaW5nIG9mIHRoZSAiZXh0ZW5kIiBibG9jayBhbmQgaXMgc2hhcmVkIGJ5IGFsbCBleHRlbnNpb25zIHdpdGhpbgotCS8vICAgdGhlIGJsb2NrLgotCS8vIC0gSnVzdCBiZWNhdXNlIGEgbG9jYXRpb24ncyBzcGFuIGlzIGEgc3Vic2V0IG9mIHNvbWUgb3RoZXIgbG9jYXRpb24ncyBzcGFuCi0JLy8gICBkb2VzIG5vdCBtZWFuIHRoYXQgaXQgaXMgYSBkZXNjZW5kYW50LiAgRm9yIGV4YW1wbGUsIGEgImdyb3VwIiBkZWZpbmVzCi0JLy8gICBib3RoIGEgdHlwZSBhbmQgYSBmaWVsZCBpbiBhIHNpbmdsZSBkZWNsYXJhdGlvbi4gIFRodXMsIHRoZSBsb2NhdGlvbnMKLQkvLyAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgYW5kIGZpZWxkIGFuZCB0aGVpciBjb21wb25lbnRzIHdpbGwgb3ZlcmxhcC4KLQkvLyAtIENvZGUgd2hpY2ggdHJpZXMgdG8gaW50ZXJwcmV0IGxvY2F0aW9ucyBzaG91bGQgcHJvYmFibHkgYmUgZGVzaWduZWQgdG8KLQkvLyAgIGlnbm9yZSB0aG9zZSB0aGF0IGl0IGRvZXNuJ3QgdW5kZXJzdGFuZCwgYXMgbW9yZSB0eXBlcyBvZiBsb2NhdGlvbnMgY291bGQKLQkvLyAgIGJlIHJlY29yZGVkIGluIHRoZSBmdXR1cmUuCisJLy8gICAtIEEgbG9jYXRpb24gbWF5IHJlZmVyIHRvIGEgcmVwZWF0ZWQgZmllbGQgaXRzZWxmIChpLmUuIG5vdCB0byBhbnkKKwkvLyAgICAgcGFydGljdWxhciBpbmRleCB3aXRoaW4gaXQpLiAgVGhpcyBpcyB1c2VkIHdoZW5ldmVyIGEgc2V0IG9mIGVsZW1lbnRzIGFyZQorCS8vICAgICBsb2dpY2FsbHkgZW5jbG9zZWQgaW4gYSBzaW5nbGUgY29kZSBzZWdtZW50LiAgRm9yIGV4YW1wbGUsIGFuIGVudGlyZQorCS8vICAgICBleHRlbmQgYmxvY2sgKHBvc3NpYmx5IGNvbnRhaW5pbmcgbXVsdGlwbGUgZXh0ZW5zaW9uIGRlZmluaXRpb25zKSB3aWxsCisJLy8gICAgIGhhdmUgYW4gb3V0ZXIgbG9jYXRpb24gd2hvc2UgcGF0aCByZWZlcnMgdG8gdGhlICJleHRlbnNpb25zIiByZXBlYXRlZAorCS8vICAgICBmaWVsZCB3aXRob3V0IGFuIGluZGV4LgorCS8vICAgLSBNdWx0aXBsZSBsb2NhdGlvbnMgbWF5IGhhdmUgdGhlIHNhbWUgcGF0aC4gIFRoaXMgaGFwcGVucyB3aGVuIGEgc2luZ2xlCisJLy8gICAgIGxvZ2ljYWwgZGVjbGFyYXRpb24gaXMgc3ByZWFkIG91dCBhY3Jvc3MgbXVsdGlwbGUgcGxhY2VzLiAgVGhlIG1vc3QKKwkvLyAgICAgb2J2aW91cyBleGFtcGxlIGlzIHRoZSAiZXh0ZW5kIiBibG9jayBhZ2FpbiAtLSB0aGVyZSBtYXkgYmUgbXVsdGlwbGUKKwkvLyAgICAgZXh0ZW5kIGJsb2NrcyBpbiB0aGUgc2FtZSBzY29wZSwgZWFjaCBvZiB3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgcGF0aC4KKwkvLyAgIC0gQSBsb2NhdGlvbidzIHNwYW4gaXMgbm90IGFsd2F5cyBhIHN1YnNldCBvZiBpdHMgcGFyZW50J3Mgc3Bhbi4gIEZvcgorCS8vICAgICBleGFtcGxlLCB0aGUgImV4dGVuZGVlIiBvZiBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24gYXBwZWFycyBhdCB0aGUKKwkvLyAgICAgYmVnaW5uaW5nIG9mIHRoZSAiZXh0ZW5kIiBibG9jayBhbmQgaXMgc2hhcmVkIGJ5IGFsbCBleHRlbnNpb25zIHdpdGhpbgorCS8vICAgICB0aGUgYmxvY2suCisJLy8gICAtIEp1c3QgYmVjYXVzZSBhIGxvY2F0aW9uJ3Mgc3BhbiBpcyBhIHN1YnNldCBvZiBzb21lIG90aGVyIGxvY2F0aW9uJ3Mgc3BhbgorCS8vICAgICBkb2VzIG5vdCBtZWFuIHRoYXQgaXQgaXMgYSBkZXNjZW5kYW50LiAgRm9yIGV4YW1wbGUsIGEgImdyb3VwIiBkZWZpbmVzCisJLy8gICAgIGJvdGggYSB0eXBlIGFuZCBhIGZpZWxkIGluIGEgc2luZ2xlIGRlY2xhcmF0aW9uLiAgVGh1cywgdGhlIGxvY2F0aW9ucworCS8vICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlIGFuZCBmaWVsZCBhbmQgdGhlaXIgY29tcG9uZW50cyB3aWxsIG92ZXJsYXAuCisJLy8gICAtIENvZGUgd2hpY2ggdHJpZXMgdG8gaW50ZXJwcmV0IGxvY2F0aW9ucyBzaG91bGQgcHJvYmFibHkgYmUgZGVzaWduZWQgdG8KKwkvLyAgICAgaWdub3JlIHRob3NlIHRoYXQgaXQgZG9lc24ndCB1bmRlcnN0YW5kLCBhcyBtb3JlIHR5cGVzIG9mIGxvY2F0aW9ucyBjb3VsZAorCS8vICAgICBiZSByZWNvcmRlZCBpbiB0aGUgZnV0dXJlLgogCUxvY2F0aW9uIFtdKlNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIGBwcm90b2J1ZjoiYnl0ZXMsMSxyZXAsbmFtZT1sb2NhdGlvbiIganNvbjoibG9jYXRpb24sb21pdGVtcHR5ImAKIH0KIAogZnVuYyAoeCAqU291cmNlQ29kZUluZm8pIFJlc2V0KCkgewogCSp4ID0gU291cmNlQ29kZUluZm97fQogCWlmIHByb3RvaW1wbC5VbnNhZmVFbmFibGVkIHsKLQkJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMTldCisJCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzIxXQogCQltcyA6PSBwcm90b2ltcGwuWC5NZXNzYWdlU3RhdGVPZihwcm90b2ltcGwuUG9pbnRlcih4KSkKIAkJbXMuU3RvcmVNZXNzYWdlSW5mbyhtaSkKIAl9CkBAIC0yNDU1LDcgKzM1NjYsNyBAQAogZnVuYyAoKlNvdXJjZUNvZGVJbmZvKSBQcm90b01lc3NhZ2UoKSB7fQogCiBmdW5jICh4ICpTb3VyY2VDb2RlSW5mbykgUHJvdG9SZWZsZWN0KCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2UgewotCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzE5XQorCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzIxXQogCWlmIHByb3RvaW1wbC5VbnNhZmVFbmFibGVkICYmIHggIT0gbmlsIHsKIAkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCiAJCWlmIG1zLkxvYWRNZXNzYWdlSW5mbygpID09IG5pbCB7CkBAIC0yNDY4LDcgKzM1NzksNyBAQAogCiAvLyBEZXByZWNhdGVkOiBVc2UgU291cmNlQ29kZUluZm8uUHJvdG9SZWZsZWN0LkRlc2NyaXB0b3IgaW5zdGVhZC4KIGZ1bmMgKCpTb3VyY2VDb2RlSW5mbykgRGVzY3JpcHRvcigpIChbXWJ5dGUsIFtdaW50KSB7Ci0JcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0daSVAoKSwgW11pbnR7MTl9CisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0daSVAoKSwgW11pbnR7MjF9CiB9CiAKIGZ1bmMgKHggKlNvdXJjZUNvZGVJbmZvKSBHZXRMb2NhdGlvbigpIFtdKlNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIHsKQEAgLTI0OTQsNyArMzYwNSw3IEBACiBmdW5jICh4ICpHZW5lcmF0ZWRDb2RlSW5mbykgUmVzZXQoKSB7CiAJKnggPSBHZW5lcmF0ZWRDb2RlSW5mb3t9CiAJaWYgcHJvdG9pbXBsLlVuc2FmZUVuYWJsZWQgewotCQltaSA6PSAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1syMF0KKwkJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjJdCiAJCW1zIDo9IHByb3RvaW1wbC5YLk1lc3NhZ2VTdGF0ZU9mKHByb3RvaW1wbC5Qb2ludGVyKHgpKQogCQltcy5TdG9yZU1lc3NhZ2VJbmZvKG1pKQogCX0KQEAgLTI1MDcsNyArMzYxOCw3IEBACiBmdW5jICgqR2VuZXJhdGVkQ29kZUluZm8pIFByb3RvTWVzc2FnZSgpIHt9CiAKIGZ1bmMgKHggKkdlbmVyYXRlZENvZGVJbmZvKSBQcm90b1JlZmxlY3QoKSBwcm90b3JlZmxlY3QuTWVzc2FnZSB7Ci0JbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjBdCisJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjJdCiAJaWYgcHJvdG9pbXBsLlVuc2FmZUVuYWJsZWQgJiYgeCAhPSBuaWwgewogCQltcyA6PSBwcm90b2ltcGwuWC5NZXNzYWdlU3RhdGVPZihwcm90b2ltcGwuUG9pbnRlcih4KSkKIAkJaWYgbXMuTG9hZE1lc3NhZ2VJbmZvKCkgPT0gbmlsIHsKQEAgLTI1MjAsNyArMzYzMSw3IEBACiAKIC8vIERlcHJlY2F0ZWQ6IFVzZSBHZW5lcmF0ZWRDb2RlSW5mby5Qcm90b1JlZmxlY3QuRGVzY3JpcHRvciBpbnN0ZWFkLgogZnVuYyAoKkdlbmVyYXRlZENvZGVJbmZvKSBEZXNjcmlwdG9yKCkgKFtdYnl0ZSwgW11pbnQpIHsKLQlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19yYXdEZXNjR1pJUCgpLCBbXWludHsyMH0KKwlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19yYXdEZXNjR1pJUCgpLCBbXWludHsyMn0KIH0KIAogZnVuYyAoeCAqR2VuZXJhdGVkQ29kZUluZm8pIEdldEFubm90YXRpb24oKSBbXSpHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uIHsKQEAgLTI1NDMsNyArMzY1NCw3IEBACiBmdW5jICh4ICpEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UpIFJlc2V0KCkgewogCSp4ID0gRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdle30KIAlpZiBwcm90b2ltcGwuVW5zYWZlRW5hYmxlZCB7Ci0JCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzIxXQorCQltaSA6PSAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1syM10KIAkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCiAJCW1zLlN0b3JlTWVzc2FnZUluZm8obWkpCiAJfQpAQCAtMjU1Niw3ICszNjY3LDcgQEAKIGZ1bmMgKCpEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UpIFByb3RvTWVzc2FnZSgpIHt9CiAKIGZ1bmMgKHggKkRlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSkgUHJvdG9SZWZsZWN0KCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2UgewotCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzIxXQorCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzIzXQogCWlmIHByb3RvaW1wbC5VbnNhZmVFbmFibGVkICYmIHggIT0gbmlsIHsKIAkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCiAJCWlmIG1zLkxvYWRNZXNzYWdlSW5mbygpID09IG5pbCB7CkBAIC0yNjA4LDcgKzM3MTksNyBAQAogZnVuYyAoeCAqRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UpIFJlc2V0KCkgewogCSp4ID0gRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2V7fQogCWlmIHByb3RvaW1wbC5VbnNhZmVFbmFibGVkIHsKLQkJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjJdCisJCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI0XQogCQltcyA6PSBwcm90b2ltcGwuWC5NZXNzYWdlU3RhdGVPZihwcm90b2ltcGwuUG9pbnRlcih4KSkKIAkJbXMuU3RvcmVNZXNzYWdlSW5mbyhtaSkKIAl9CkBAIC0yNjIxLDcgKzM3MzIsNyBAQAogZnVuYyAoKkRlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKSBQcm90b01lc3NhZ2UoKSB7fQogCiBmdW5jICh4ICpEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSkgUHJvdG9SZWZsZWN0KCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2UgewotCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzIyXQorCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI0XQogCWlmIHByb3RvaW1wbC5VbnNhZmVFbmFibGVkICYmIHggIT0gbmlsIHsKIAkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCiAJCWlmIG1zLkxvYWRNZXNzYWdlSW5mbygpID09IG5pbCB7CkBAIC0yNjUxLDYgKzM3NjIsOTYgQEAKIAlyZXR1cm4gMAogfQogCit0eXBlIEV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbiBzdHJ1Y3QgeworCXN0YXRlICAgICAgICAgcHJvdG9pbXBsLk1lc3NhZ2VTdGF0ZQorCXNpemVDYWNoZSAgICAgcHJvdG9pbXBsLlNpemVDYWNoZQorCXVua25vd25GaWVsZHMgcHJvdG9pbXBsLlVua25vd25GaWVsZHMKKworCS8vIFRoZSBleHRlbnNpb24gbnVtYmVyIGRlY2xhcmVkIHdpdGhpbiB0aGUgZXh0ZW5zaW9uIHJhbmdlLgorCU51bWJlciAqaW50MzIgYHByb3RvYnVmOiJ2YXJpbnQsMSxvcHQsbmFtZT1udW1iZXIiIGpzb246Im51bWJlcixvbWl0ZW1wdHkiYAorCS8vIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGZpZWxkLiBUaGVyZSBtdXN0IGJlIGEgbGVhZGluZworCS8vIGRvdCBpbiBmcm9udCBvZiB0aGUgZnVsbCBuYW1lLgorCUZ1bGxOYW1lICpzdHJpbmcgYHByb3RvYnVmOiJieXRlcywyLG9wdCxuYW1lPWZ1bGxfbmFtZSxqc29uPWZ1bGxOYW1lIiBqc29uOiJmdWxsX25hbWUsb21pdGVtcHR5ImAKKwkvLyBUaGUgZnVsbHktcXVhbGlmaWVkIHR5cGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGZpZWxkLiBVbmxpa2UKKwkvLyBNZXRhZGF0YS50eXBlLCBEZWNsYXJhdGlvbi50eXBlIG11c3QgaGF2ZSBhIGxlYWRpbmcgZG90IGZvciBtZXNzYWdlcworCS8vIGFuZCBlbnVtcy4KKwlUeXBlICpzdHJpbmcgYHByb3RvYnVmOiJieXRlcywzLG9wdCxuYW1lPXR5cGUiIGpzb246InR5cGUsb21pdGVtcHR5ImAKKwkvLyBJZiB0cnVlLCBpbmRpY2F0ZXMgdGhhdCB0aGUgbnVtYmVyIGlzIHJlc2VydmVkIGluIHRoZSBleHRlbnNpb24gcmFuZ2UsCisJLy8gYW5kIGFueSBleHRlbnNpb24gZmllbGQgd2l0aCB0aGUgbnVtYmVyIHdpbGwgZmFpbCB0byBjb21waWxlLiBTZXQgdGhpcworCS8vIHdoZW4gYSBkZWNsYXJlZCBleHRlbnNpb24gZmllbGQgaXMgZGVsZXRlZC4KKwlSZXNlcnZlZCAqYm9vbCBgcHJvdG9idWY6InZhcmludCw1LG9wdCxuYW1lPXJlc2VydmVkIiBqc29uOiJyZXNlcnZlZCxvbWl0ZW1wdHkiYAorCS8vIElmIHRydWUsIGluZGljYXRlcyB0aGF0IHRoZSBleHRlbnNpb24gbXVzdCBiZSBkZWZpbmVkIGFzIHJlcGVhdGVkLgorCS8vIE90aGVyd2lzZSB0aGUgZXh0ZW5zaW9uIG11c3QgYmUgZGVmaW5lZCBhcyBvcHRpb25hbC4KKwlSZXBlYXRlZCAqYm9vbCBgcHJvdG9idWY6InZhcmludCw2LG9wdCxuYW1lPXJlcGVhdGVkIiBqc29uOiJyZXBlYXRlZCxvbWl0ZW1wdHkiYAorfQorCitmdW5jICh4ICpFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb24pIFJlc2V0KCkgeworCSp4ID0gRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX0RlY2xhcmF0aW9ue30KKwlpZiBwcm90b2ltcGwuVW5zYWZlRW5hYmxlZCB7CisJCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI1XQorCQltcyA6PSBwcm90b2ltcGwuWC5NZXNzYWdlU3RhdGVPZihwcm90b2ltcGwuUG9pbnRlcih4KSkKKwkJbXMuU3RvcmVNZXNzYWdlSW5mbyhtaSkKKwl9Cit9CisKK2Z1bmMgKHggKkV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbikgU3RyaW5nKCkgc3RyaW5nIHsKKwlyZXR1cm4gcHJvdG9pbXBsLlguTWVzc2FnZVN0cmluZ09mKHgpCit9CisKK2Z1bmMgKCpFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb24pIFByb3RvTWVzc2FnZSgpIHt9CisKK2Z1bmMgKHggKkV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbikgUHJvdG9SZWZsZWN0KCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2UgeworCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI1XQorCWlmIHByb3RvaW1wbC5VbnNhZmVFbmFibGVkICYmIHggIT0gbmlsIHsKKwkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCisJCWlmIG1zLkxvYWRNZXNzYWdlSW5mbygpID09IG5pbCB7CisJCQltcy5TdG9yZU1lc3NhZ2VJbmZvKG1pKQorCQl9CisJCXJldHVybiBtcworCX0KKwlyZXR1cm4gbWkuTWVzc2FnZU9mKHgpCit9CisKKy8vIERlcHJlY2F0ZWQ6IFVzZSBFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb24uUHJvdG9SZWZsZWN0LkRlc2NyaXB0b3IgaW5zdGVhZC4KK2Z1bmMgKCpFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb24pIERlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezMsIDB9Cit9CisKK2Z1bmMgKHggKkV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbikgR2V0TnVtYmVyKCkgaW50MzIgeworCWlmIHggIT0gbmlsICYmIHguTnVtYmVyICE9IG5pbCB7CisJCXJldHVybiAqeC5OdW1iZXIKKwl9CisJcmV0dXJuIDAKK30KKworZnVuYyAoeCAqRXh0ZW5zaW9uUmFuZ2VPcHRpb25zX0RlY2xhcmF0aW9uKSBHZXRGdWxsTmFtZSgpIHN0cmluZyB7CisJaWYgeCAhPSBuaWwgJiYgeC5GdWxsTmFtZSAhPSBuaWwgeworCQlyZXR1cm4gKnguRnVsbE5hbWUKKwl9CisJcmV0dXJuICIiCit9CisKK2Z1bmMgKHggKkV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbikgR2V0VHlwZSgpIHN0cmluZyB7CisJaWYgeCAhPSBuaWwgJiYgeC5UeXBlICE9IG5pbCB7CisJCXJldHVybiAqeC5UeXBlCisJfQorCXJldHVybiAiIgorfQorCitmdW5jICh4ICpFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb24pIEdldFJlc2VydmVkKCkgYm9vbCB7CisJaWYgeCAhPSBuaWwgJiYgeC5SZXNlcnZlZCAhPSBuaWwgeworCQlyZXR1cm4gKnguUmVzZXJ2ZWQKKwl9CisJcmV0dXJuIGZhbHNlCit9CisKK2Z1bmMgKHggKkV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbikgR2V0UmVwZWF0ZWQoKSBib29sIHsKKwlpZiB4ICE9IG5pbCAmJiB4LlJlcGVhdGVkICE9IG5pbCB7CisJCXJldHVybiAqeC5SZXBlYXRlZAorCX0KKwlyZXR1cm4gZmFsc2UKK30KKwogLy8gUmFuZ2Ugb2YgcmVzZXJ2ZWQgbnVtZXJpYyB2YWx1ZXMuIFJlc2VydmVkIHZhbHVlcyBtYXkgbm90IGJlIHVzZWQgYnkKIC8vIGVudHJpZXMgaW4gdGhlIHNhbWUgZW51bS4gUmVzZXJ2ZWQgcmFuZ2VzIG1heSBub3Qgb3ZlcmxhcC4KIC8vCkBAIC0yNjY5LDcgKzM4NzAsNyBAQAogZnVuYyAoeCAqRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSkgUmVzZXQoKSB7CiAJKnggPSBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdle30KIAlpZiBwcm90b2ltcGwuVW5zYWZlRW5hYmxlZCB7Ci0JCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzIzXQorCQltaSA6PSAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1syNl0KIAkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCiAJCW1zLlN0b3JlTWVzc2FnZUluZm8obWkpCiAJfQpAQCAtMjY4Miw3ICszODgzLDcgQEAKIGZ1bmMgKCpFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKSBQcm90b01lc3NhZ2UoKSB7fQogCiBmdW5jICh4ICpFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKSBQcm90b1JlZmxlY3QoKSBwcm90b3JlZmxlY3QuTWVzc2FnZSB7Ci0JbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjNdCisJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjZdCiAJaWYgcHJvdG9pbXBsLlVuc2FmZUVuYWJsZWQgJiYgeCAhPSBuaWwgewogCQltcyA6PSBwcm90b2ltcGwuWC5NZXNzYWdlU3RhdGVPZihwcm90b2ltcGwuUG9pbnRlcih4KSkKIAkJaWYgbXMuTG9hZE1lc3NhZ2VJbmZvKCkgPT0gbmlsIHsKQEAgLTI3MTIsMTEgKzM5MTMsNjYgQEAKIAlyZXR1cm4gMAogfQogCit0eXBlIEZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdCBzdHJ1Y3QgeworCXN0YXRlICAgICAgICAgcHJvdG9pbXBsLk1lc3NhZ2VTdGF0ZQorCXNpemVDYWNoZSAgICAgcHJvdG9pbXBsLlNpemVDYWNoZQorCXVua25vd25GaWVsZHMgcHJvdG9pbXBsLlVua25vd25GaWVsZHMKKworCUVkaXRpb24gKkVkaXRpb24gYHByb3RvYnVmOiJ2YXJpbnQsMyxvcHQsbmFtZT1lZGl0aW9uLGVudW09Z29vZ2xlLnByb3RvYnVmLkVkaXRpb24iIGpzb246ImVkaXRpb24sb21pdGVtcHR5ImAKKwlWYWx1ZSAgICpzdHJpbmcgIGBwcm90b2J1ZjoiYnl0ZXMsMixvcHQsbmFtZT12YWx1ZSIganNvbjoidmFsdWUsb21pdGVtcHR5ImAgLy8gVGV4dHByb3RvIHZhbHVlLgorfQorCitmdW5jICh4ICpGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHQpIFJlc2V0KCkgeworCSp4ID0gRmllbGRPcHRpb25zX0VkaXRpb25EZWZhdWx0e30KKwlpZiBwcm90b2ltcGwuVW5zYWZlRW5hYmxlZCB7CisJCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI3XQorCQltcyA6PSBwcm90b2ltcGwuWC5NZXNzYWdlU3RhdGVPZihwcm90b2ltcGwuUG9pbnRlcih4KSkKKwkJbXMuU3RvcmVNZXNzYWdlSW5mbyhtaSkKKwl9Cit9CisKK2Z1bmMgKHggKkZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdCkgU3RyaW5nKCkgc3RyaW5nIHsKKwlyZXR1cm4gcHJvdG9pbXBsLlguTWVzc2FnZVN0cmluZ09mKHgpCit9CisKK2Z1bmMgKCpGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHQpIFByb3RvTWVzc2FnZSgpIHt9CisKK2Z1bmMgKHggKkZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdCkgUHJvdG9SZWZsZWN0KCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2UgeworCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI3XQorCWlmIHByb3RvaW1wbC5VbnNhZmVFbmFibGVkICYmIHggIT0gbmlsIHsKKwkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCisJCWlmIG1zLkxvYWRNZXNzYWdlSW5mbygpID09IG5pbCB7CisJCQltcy5TdG9yZU1lc3NhZ2VJbmZvKG1pKQorCQl9CisJCXJldHVybiBtcworCX0KKwlyZXR1cm4gbWkuTWVzc2FnZU9mKHgpCit9CisKKy8vIERlcHJlY2F0ZWQ6IFVzZSBGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHQuUHJvdG9SZWZsZWN0LkRlc2NyaXB0b3IgaW5zdGVhZC4KK2Z1bmMgKCpGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHQpIERlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezEyLCAwfQorfQorCitmdW5jICh4ICpGaWVsZE9wdGlvbnNfRWRpdGlvbkRlZmF1bHQpIEdldEVkaXRpb24oKSBFZGl0aW9uIHsKKwlpZiB4ICE9IG5pbCAmJiB4LkVkaXRpb24gIT0gbmlsIHsKKwkJcmV0dXJuICp4LkVkaXRpb24KKwl9CisJcmV0dXJuIEVkaXRpb25fRURJVElPTl9VTktOT1dOCit9CisKK2Z1bmMgKHggKkZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdCkgR2V0VmFsdWUoKSBzdHJpbmcgeworCWlmIHggIT0gbmlsICYmIHguVmFsdWUgIT0gbmlsIHsKKwkJcmV0dXJuICp4LlZhbHVlCisJfQorCXJldHVybiAiIgorfQorCiAvLyBUaGUgbmFtZSBvZiB0aGUgdW5pbnRlcnByZXRlZCBvcHRpb24uICBFYWNoIHN0cmluZyByZXByZXNlbnRzIGEgc2VnbWVudCBpbgogLy8gYSBkb3Qtc2VwYXJhdGVkIG5hbWUuICBpc19leHRlbnNpb24gaXMgdHJ1ZSBpZmYgYSBzZWdtZW50IHJlcHJlc2VudHMgYW4KIC8vIGV4dGVuc2lvbiAoZGVub3RlZCB3aXRoIHBhcmVudGhlc2VzIGluIG9wdGlvbnMgc3BlY3MgaW4gLnByb3RvIGZpbGVzKS4KLS8vIEUuZy4seyBbImZvbyIsIGZhbHNlXSwgWyJiYXIuYmF6IiwgdHJ1ZV0sIFsicXV4IiwgZmFsc2VdIH0gcmVwcmVzZW50cwotLy8gImZvby4oYmFyLmJheikucXV4Ii4KKy8vIEUuZy4seyBbImZvbyIsIGZhbHNlXSwgWyJiYXIuYmF6IiwgdHJ1ZV0sIFsibW9vIiwgZmFsc2VdIH0gcmVwcmVzZW50cworLy8gImZvby4oYmFyLmJheikubW9vIi4KIHR5cGUgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCBzdHJ1Y3QgewogCXN0YXRlICAgICAgICAgcHJvdG9pbXBsLk1lc3NhZ2VTdGF0ZQogCXNpemVDYWNoZSAgICAgcHJvdG9pbXBsLlNpemVDYWNoZQpAQCAtMjcyOSw3ICszOTg1LDcgQEAKIGZ1bmMgKHggKlVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQpIFJlc2V0KCkgewogCSp4ID0gVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydHt9CiAJaWYgcHJvdG9pbXBsLlVuc2FmZUVuYWJsZWQgewotCQltaSA6PSAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1syNF0KKwkJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjhdCiAJCW1zIDo9IHByb3RvaW1wbC5YLk1lc3NhZ2VTdGF0ZU9mKHByb3RvaW1wbC5Qb2ludGVyKHgpKQogCQltcy5TdG9yZU1lc3NhZ2VJbmZvKG1pKQogCX0KQEAgLTI3NDIsNyArMzk5OCw3IEBACiBmdW5jICgqVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCkgUHJvdG9NZXNzYWdlKCkge30KIAogZnVuYyAoeCAqVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCkgUHJvdG9SZWZsZWN0KCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2UgewotCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI0XQorCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI4XQogCWlmIHByb3RvaW1wbC5VbnNhZmVFbmFibGVkICYmIHggIT0gbmlsIHsKIAkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCiAJCWlmIG1zLkxvYWRNZXNzYWdlSW5mbygpID09IG5pbCB7CkBAIC0yNzcyLDYgKzQwMjgsNjUgQEAKIAlyZXR1cm4gZmFsc2UKIH0KIAorLy8gQSBtYXAgZnJvbSBldmVyeSBrbm93biBlZGl0aW9uIHdpdGggYSB1bmlxdWUgc2V0IG9mIGRlZmF1bHRzIHRvIGl0cworLy8gZGVmYXVsdHMuIE5vdCBhbGwgZWRpdGlvbnMgbWF5IGJlIGNvbnRhaW5lZCBoZXJlLiAgRm9yIGEgZ2l2ZW4gZWRpdGlvbiwKKy8vIHRoZSBkZWZhdWx0cyBhdCB0aGUgY2xvc2VzdCBtYXRjaGluZyBlZGl0aW9uIG9yZGVyZWQgYXQgb3IgYmVmb3JlIGl0IHNob3VsZAorLy8gYmUgdXNlZC4gIFRoaXMgZmllbGQgbXVzdCBiZSBpbiBzdHJpY3QgYXNjZW5kaW5nIG9yZGVyIGJ5IGVkaXRpb24uCit0eXBlIEZlYXR1cmVTZXREZWZhdWx0c19GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHQgc3RydWN0IHsKKwlzdGF0ZSAgICAgICAgIHByb3RvaW1wbC5NZXNzYWdlU3RhdGUKKwlzaXplQ2FjaGUgICAgIHByb3RvaW1wbC5TaXplQ2FjaGUKKwl1bmtub3duRmllbGRzIHByb3RvaW1wbC5Vbmtub3duRmllbGRzCisKKwlFZGl0aW9uICAqRWRpdGlvbiAgICBgcHJvdG9idWY6InZhcmludCwzLG9wdCxuYW1lPWVkaXRpb24sZW51bT1nb29nbGUucHJvdG9idWYuRWRpdGlvbiIganNvbjoiZWRpdGlvbixvbWl0ZW1wdHkiYAorCUZlYXR1cmVzICpGZWF0dXJlU2V0IGBwcm90b2J1ZjoiYnl0ZXMsMixvcHQsbmFtZT1mZWF0dXJlcyIganNvbjoiZmVhdHVyZXMsb21pdGVtcHR5ImAKK30KKworZnVuYyAoeCAqRmVhdHVyZVNldERlZmF1bHRzX0ZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdCkgUmVzZXQoKSB7CisJKnggPSBGZWF0dXJlU2V0RGVmYXVsdHNfRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0e30KKwlpZiBwcm90b2ltcGwuVW5zYWZlRW5hYmxlZCB7CisJCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI5XQorCQltcyA6PSBwcm90b2ltcGwuWC5NZXNzYWdlU3RhdGVPZihwcm90b2ltcGwuUG9pbnRlcih4KSkKKwkJbXMuU3RvcmVNZXNzYWdlSW5mbyhtaSkKKwl9Cit9CisKK2Z1bmMgKHggKkZlYXR1cmVTZXREZWZhdWx0c19GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHQpIFN0cmluZygpIHN0cmluZyB7CisJcmV0dXJuIHByb3RvaW1wbC5YLk1lc3NhZ2VTdHJpbmdPZih4KQorfQorCitmdW5jICgqRmVhdHVyZVNldERlZmF1bHRzX0ZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdCkgUHJvdG9NZXNzYWdlKCkge30KKworZnVuYyAoeCAqRmVhdHVyZVNldERlZmF1bHRzX0ZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdCkgUHJvdG9SZWZsZWN0KCkgcHJvdG9yZWZsZWN0Lk1lc3NhZ2UgeworCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI5XQorCWlmIHByb3RvaW1wbC5VbnNhZmVFbmFibGVkICYmIHggIT0gbmlsIHsKKwkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCisJCWlmIG1zLkxvYWRNZXNzYWdlSW5mbygpID09IG5pbCB7CisJCQltcy5TdG9yZU1lc3NhZ2VJbmZvKG1pKQorCQl9CisJCXJldHVybiBtcworCX0KKwlyZXR1cm4gbWkuTWVzc2FnZU9mKHgpCit9CisKKy8vIERlcHJlY2F0ZWQ6IFVzZSBGZWF0dXJlU2V0RGVmYXVsdHNfRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0LlByb3RvUmVmbGVjdC5EZXNjcmlwdG9yIGluc3RlYWQuCitmdW5jICgqRmVhdHVyZVNldERlZmF1bHRzX0ZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdCkgRGVzY3JpcHRvcigpIChbXWJ5dGUsIFtdaW50KSB7CisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0daSVAoKSwgW11pbnR7MjAsIDB9Cit9CisKK2Z1bmMgKHggKkZlYXR1cmVTZXREZWZhdWx0c19GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHQpIEdldEVkaXRpb24oKSBFZGl0aW9uIHsKKwlpZiB4ICE9IG5pbCAmJiB4LkVkaXRpb24gIT0gbmlsIHsKKwkJcmV0dXJuICp4LkVkaXRpb24KKwl9CisJcmV0dXJuIEVkaXRpb25fRURJVElPTl9VTktOT1dOCit9CisKK2Z1bmMgKHggKkZlYXR1cmVTZXREZWZhdWx0c19GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHQpIEdldEZlYXR1cmVzKCkgKkZlYXR1cmVTZXQgeworCWlmIHggIT0gbmlsIHsKKwkJcmV0dXJuIHguRmVhdHVyZXMKKwl9CisJcmV0dXJuIG5pbAorfQorCiB0eXBlIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIHN0cnVjdCB7CiAJc3RhdGUgICAgICAgICBwcm90b2ltcGwuTWVzc2FnZVN0YXRlCiAJc2l6ZUNhY2hlICAgICBwcm90b2ltcGwuU2l6ZUNhY2hlCkBAIC0yNzgxLDIzICs0MDk2LDM0IEBACiAJLy8gbG9jYXRpb24uCiAJLy8KIAkvLyBFYWNoIGVsZW1lbnQgaXMgYSBmaWVsZCBudW1iZXIgb3IgYW4gaW5kZXguICBUaGV5IGZvcm0gYSBwYXRoIGZyb20KLQkvLyB0aGUgcm9vdCBGaWxlRGVzY3JpcHRvclByb3RvIHRvIHRoZSBwbGFjZSB3aGVyZSB0aGUgZGVmaW5pdGlvbi4gIEZvcgotCS8vIGV4YW1wbGUsIHRoaXMgcGF0aDoKLQkvLyAgIFsgNCwgMywgMiwgNywgMSBdCisJLy8gdGhlIHJvb3QgRmlsZURlc2NyaXB0b3JQcm90byB0byB0aGUgcGxhY2Ugd2hlcmUgdGhlIGRlZmluaXRpb24gYXBwZWFycy4KKwkvLyBGb3IgZXhhbXBsZSwgdGhpcyBwYXRoOgorCS8vCisJLy8JWyA0LCAzLCAyLCA3LCAxIF0KKwkvLwogCS8vIHJlZmVycyB0bzoKLQkvLyAgIGZpbGUubWVzc2FnZV90eXBlKDMpICAvLyA0LCAzCi0JLy8gICAgICAgLmZpZWxkKDcpICAgICAgICAgLy8gMiwgNwotCS8vICAgICAgIC5uYW1lKCkgICAgICAgICAgIC8vIDEKKwkvLworCS8vCWZpbGUubWVzc2FnZV90eXBlKDMpICAvLyA0LCAzCisJLy8JICAgIC5maWVsZCg3KSAgICAgICAgIC8vIDIsIDcKKwkvLwkgICAgLm5hbWUoKSAgICAgICAgICAgLy8gMQorCS8vCiAJLy8gVGhpcyBpcyBiZWNhdXNlIEZpbGVEZXNjcmlwdG9yUHJvdG8ubWVzc2FnZV90eXBlIGhhcyBmaWVsZCBudW1iZXIgNDoKLQkvLyAgIHJlcGVhdGVkIERlc2NyaXB0b3JQcm90byBtZXNzYWdlX3R5cGUgPSA0OworCS8vCisJLy8JcmVwZWF0ZWQgRGVzY3JpcHRvclByb3RvIG1lc3NhZ2VfdHlwZSA9IDQ7CisJLy8KIAkvLyBhbmQgRGVzY3JpcHRvclByb3RvLmZpZWxkIGhhcyBmaWVsZCBudW1iZXIgMjoKLQkvLyAgIHJlcGVhdGVkIEZpZWxkRGVzY3JpcHRvclByb3RvIGZpZWxkID0gMjsKKwkvLworCS8vCXJlcGVhdGVkIEZpZWxkRGVzY3JpcHRvclByb3RvIGZpZWxkID0gMjsKKwkvLwogCS8vIGFuZCBGaWVsZERlc2NyaXB0b3JQcm90by5uYW1lIGhhcyBmaWVsZCBudW1iZXIgMToKLQkvLyAgIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKKwkvLworCS8vCW9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKIAkvLwogCS8vIFRodXMsIHRoZSBhYm92ZSBwYXRoIGdpdmVzIHRoZSBsb2NhdGlvbiBvZiBhIGZpZWxkIG5hbWUuICBJZiB3ZSByZW1vdmVkCiAJLy8gdGhlIGxhc3QgZWxlbWVudDoKLQkvLyAgIFsgNCwgMywgMiwgNyBdCisJLy8KKwkvLwlbIDQsIDMsIDIsIDcgXQorCS8vCiAJLy8gdGhpcyBwYXRoIHJlZmVycyB0byB0aGUgd2hvbGUgZmllbGQgZGVjbGFyYXRpb24gKGZyb20gdGhlIGJlZ2lubmluZwogCS8vIG9mIHRoZSBsYWJlbCB0byB0aGUgdGVybWluYXRpbmcgc2VtaWNvbG9uKS4KIAlQYXRoIFtdaW50MzIgYHByb3RvYnVmOiJ2YXJpbnQsMSxyZXAscGFja2VkLG5hbWU9cGF0aCIganNvbjoicGF0aCxvbWl0ZW1wdHkiYApAQCAtMjgyNiwzNCArNDE1MiwzNCBAQAogCS8vCiAJLy8gRXhhbXBsZXM6CiAJLy8KLQkvLyAgIG9wdGlvbmFsIGludDMyIGZvbyA9IDE7ICAvLyBDb21tZW50IGF0dGFjaGVkIHRvIGZvby4KLQkvLyAgIC8vIENvbW1lbnQgYXR0YWNoZWQgdG8gYmFyLgotCS8vICAgb3B0aW9uYWwgaW50MzIgYmFyID0gMjsKKwkvLwlvcHRpb25hbCBpbnQzMiBmb28gPSAxOyAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBmb28uCisJLy8JLy8gQ29tbWVudCBhdHRhY2hlZCB0byBiYXIuCisJLy8Jb3B0aW9uYWwgaW50MzIgYmFyID0gMjsKIAkvLwotCS8vICAgb3B0aW9uYWwgc3RyaW5nIGJheiA9IDM7Ci0JLy8gICAvLyBDb21tZW50IGF0dGFjaGVkIHRvIGJhei4KLQkvLyAgIC8vIEFub3RoZXIgbGluZSBhdHRhY2hlZCB0byBiYXouCisJLy8Jb3B0aW9uYWwgc3RyaW5nIGJheiA9IDM7CisJLy8JLy8gQ29tbWVudCBhdHRhY2hlZCB0byBiYXouCisJLy8JLy8gQW5vdGhlciBsaW5lIGF0dGFjaGVkIHRvIGJhei4KIAkvLwotCS8vICAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBxdXguCi0JLy8gICAvLwotCS8vICAgLy8gQW5vdGhlciBsaW5lIGF0dGFjaGVkIHRvIHF1eC4KLQkvLyAgIG9wdGlvbmFsIGRvdWJsZSBxdXggPSA0OworCS8vCS8vIENvbW1lbnQgYXR0YWNoZWQgdG8gbW9vLgorCS8vCS8vCisJLy8JLy8gQW5vdGhlciBsaW5lIGF0dGFjaGVkIHRvIG1vby4KKwkvLwlvcHRpb25hbCBkb3VibGUgbW9vID0gNDsKIAkvLwotCS8vICAgLy8gRGV0YWNoZWQgY29tbWVudCBmb3IgY29yZ2UuIFRoaXMgaXMgbm90IGxlYWRpbmcgb3IgdHJhaWxpbmcgY29tbWVudHMKLQkvLyAgIC8vIHRvIHF1eCBvciBjb3JnZSBiZWNhdXNlIHRoZXJlIGFyZSBibGFuayBsaW5lcyBzZXBhcmF0aW5nIGl0IGZyb20KLQkvLyAgIC8vIGJvdGguCisJLy8JLy8gRGV0YWNoZWQgY29tbWVudCBmb3IgY29yZ2UuIFRoaXMgaXMgbm90IGxlYWRpbmcgb3IgdHJhaWxpbmcgY29tbWVudHMKKwkvLwkvLyB0byBtb28gb3IgY29yZ2UgYmVjYXVzZSB0aGVyZSBhcmUgYmxhbmsgbGluZXMgc2VwYXJhdGluZyBpdCBmcm9tCisJLy8JLy8gYm90aC4KIAkvLwotCS8vICAgLy8gRGV0YWNoZWQgY29tbWVudCBmb3IgY29yZ2UgcGFyYWdyYXBoIDIuCisJLy8JLy8gRGV0YWNoZWQgY29tbWVudCBmb3IgY29yZ2UgcGFyYWdyYXBoIDIuCiAJLy8KLQkvLyAgIG9wdGlvbmFsIHN0cmluZyBjb3JnZSA9IDU7Ci0JLy8gICAvKiBCbG9jayBjb21tZW50IGF0dGFjaGVkCi0JLy8gICAgKiB0byBjb3JnZS4gIExlYWRpbmcgYXN0ZXJpc2tzCi0JLy8gICAgKiB3aWxsIGJlIHJlbW92ZWQuICovCi0JLy8gICAvKiBCbG9jayBjb21tZW50IGF0dGFjaGVkIHRvCi0JLy8gICAgKiBncmF1bHQuICovCi0JLy8gICBvcHRpb25hbCBpbnQzMiBncmF1bHQgPSA2OworCS8vCW9wdGlvbmFsIHN0cmluZyBjb3JnZSA9IDU7CisJLy8JLyogQmxvY2sgY29tbWVudCBhdHRhY2hlZAorCS8vCSAqIHRvIGNvcmdlLiAgTGVhZGluZyBhc3Rlcmlza3MKKwkvLwkgKiB3aWxsIGJlIHJlbW92ZWQuICovCisJLy8JLyogQmxvY2sgY29tbWVudCBhdHRhY2hlZCB0bworCS8vCSAqIGdyYXVsdC4gKi8KKwkvLwlvcHRpb25hbCBpbnQzMiBncmF1bHQgPSA2OwogCS8vCi0JLy8gICAvLyBpZ25vcmVkIGRldGFjaGVkIGNvbW1lbnRzLgorCS8vCS8vIGlnbm9yZWQgZGV0YWNoZWQgY29tbWVudHMuCiAJTGVhZGluZ0NvbW1lbnRzICAgICAgICAgKnN0cmluZyAgYHByb3RvYnVmOiJieXRlcywzLG9wdCxuYW1lPWxlYWRpbmdfY29tbWVudHMsanNvbj1sZWFkaW5nQ29tbWVudHMiIGpzb246ImxlYWRpbmdfY29tbWVudHMsb21pdGVtcHR5ImAKIAlUcmFpbGluZ0NvbW1lbnRzICAgICAgICAqc3RyaW5nICBgcHJvdG9idWY6ImJ5dGVzLDQsb3B0LG5hbWU9dHJhaWxpbmdfY29tbWVudHMsanNvbj10cmFpbGluZ0NvbW1lbnRzIiBqc29uOiJ0cmFpbGluZ19jb21tZW50cyxvbWl0ZW1wdHkiYAogCUxlYWRpbmdEZXRhY2hlZENvbW1lbnRzIFtdc3RyaW5nIGBwcm90b2J1ZjoiYnl0ZXMsNixyZXAsbmFtZT1sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzLGpzb249bGVhZGluZ0RldGFjaGVkQ29tbWVudHMiIGpzb246ImxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMsb21pdGVtcHR5ImAKQEAgLTI4NjIsNyArNDE4OCw3IEBACiBmdW5jICh4ICpTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbikgUmVzZXQoKSB7CiAJKnggPSBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbnt9CiAJaWYgcHJvdG9pbXBsLlVuc2FmZUVuYWJsZWQgewotCQltaSA6PSAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1syNV0KKwkJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMzBdCiAJCW1zIDo9IHByb3RvaW1wbC5YLk1lc3NhZ2VTdGF0ZU9mKHByb3RvaW1wbC5Qb2ludGVyKHgpKQogCQltcy5TdG9yZU1lc3NhZ2VJbmZvKG1pKQogCX0KQEAgLTI4NzUsNyArNDIwMSw3IEBACiBmdW5jICgqU291cmNlQ29kZUluZm9fTG9jYXRpb24pIFByb3RvTWVzc2FnZSgpIHt9CiAKIGZ1bmMgKHggKlNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uKSBQcm90b1JlZmxlY3QoKSBwcm90b3JlZmxlY3QuTWVzc2FnZSB7Ci0JbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjVdCisJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMzBdCiAJaWYgcHJvdG9pbXBsLlVuc2FmZUVuYWJsZWQgJiYgeCAhPSBuaWwgewogCQltcyA6PSBwcm90b2ltcGwuWC5NZXNzYWdlU3RhdGVPZihwcm90b2ltcGwuUG9pbnRlcih4KSkKIAkJaWYgbXMuTG9hZE1lc3NhZ2VJbmZvKCkgPT0gbmlsIHsKQEAgLTI4ODgsNyArNDIxNCw3IEBACiAKIC8vIERlcHJlY2F0ZWQ6IFVzZSBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbi5Qcm90b1JlZmxlY3QuRGVzY3JpcHRvciBpbnN0ZWFkLgogZnVuYyAoKlNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uKSBEZXNjcmlwdG9yKCkgKFtdYnl0ZSwgW11pbnQpIHsKLQlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19yYXdEZXNjR1pJUCgpLCBbXWludHsxOSwgMH0KKwlyZXR1cm4gZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19yYXdEZXNjR1pJUCgpLCBbXWludHsyMSwgMH0KIH0KIAogZnVuYyAoeCAqU291cmNlQ29kZUluZm9fTG9jYXRpb24pIEdldFBhdGgoKSBbXWludDMyIHsKQEAgLTI5NDAsMTUgKzQyNjYsMTYgQEAKIAkvLyB0aGF0IHJlbGF0ZXMgdG8gdGhlIGlkZW50aWZpZWQgb2JqZWN0LgogCUJlZ2luICppbnQzMiBgcHJvdG9idWY6InZhcmludCwzLG9wdCxuYW1lPWJlZ2luIiBqc29uOiJiZWdpbixvbWl0ZW1wdHkiYAogCS8vIElkZW50aWZpZXMgdGhlIGVuZGluZyBvZmZzZXQgaW4gYnl0ZXMgaW4gdGhlIGdlbmVyYXRlZCBjb2RlIHRoYXQKLQkvLyByZWxhdGVzIHRvIHRoZSBpZGVudGlmaWVkIG9mZnNldC4gVGhlIGVuZCBvZmZzZXQgc2hvdWxkIGJlIG9uZSBwYXN0CisJLy8gcmVsYXRlcyB0byB0aGUgaWRlbnRpZmllZCBvYmplY3QuIFRoZSBlbmQgb2Zmc2V0IHNob3VsZCBiZSBvbmUgcGFzdAogCS8vIHRoZSBsYXN0IHJlbGV2YW50IGJ5dGUgKHNvIHRoZSBsZW5ndGggb2YgdGhlIHRleHQgPSBlbmQgLSBiZWdpbikuCi0JRW5kICppbnQzMiBgcHJvdG9idWY6InZhcmludCw0LG9wdCxuYW1lPWVuZCIganNvbjoiZW5kLG9taXRlbXB0eSJgCisJRW5kICAgICAgKmludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByb3RvYnVmOiJ2YXJpbnQsNCxvcHQsbmFtZT1lbmQiIGpzb246ImVuZCxvbWl0ZW1wdHkiYAorCVNlbWFudGljICpHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljIGBwcm90b2J1ZjoidmFyaW50LDUsb3B0LG5hbWU9c2VtYW50aWMsZW51bT1nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYyIganNvbjoic2VtYW50aWMsb21pdGVtcHR5ImAKIH0KIAogZnVuYyAoeCAqR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbikgUmVzZXQoKSB7CiAJKnggPSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9ue30KIAlpZiBwcm90b2ltcGwuVW5zYWZlRW5hYmxlZCB7Ci0JCW1pIDo9ICZmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI2XQorCQltaSA6PSAmZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1szMV0KIAkJbXMgOj0gcHJvdG9pbXBsLlguTWVzc2FnZVN0YXRlT2YocHJvdG9pbXBsLlBvaW50ZXIoeCkpCiAJCW1zLlN0b3JlTWVzc2FnZUluZm8obWkpCiAJfQpAQCAtMjk2MSw3ICs0Mjg4LDcgQEAKIGZ1bmMgKCpHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uKSBQcm90b01lc3NhZ2UoKSB7fQogCiBmdW5jICh4ICpHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uKSBQcm90b1JlZmxlY3QoKSBwcm90b3JlZmxlY3QuTWVzc2FnZSB7Ci0JbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjZdCisJbWkgOj0gJmZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMzFdCiAJaWYgcHJvdG9pbXBsLlVuc2FmZUVuYWJsZWQgJiYgeCAhPSBuaWwgewogCQltcyA6PSBwcm90b2ltcGwuWC5NZXNzYWdlU3RhdGVPZihwcm90b2ltcGwuUG9pbnRlcih4KSkKIAkJaWYgbXMuTG9hZE1lc3NhZ2VJbmZvKCkgPT0gbmlsIHsKQEAgLTI5NzQsNyArNDMwMSw3IEBACiAKIC8vIERlcHJlY2F0ZWQ6IFVzZSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uLlByb3RvUmVmbGVjdC5EZXNjcmlwdG9yIGluc3RlYWQuCiBmdW5jICgqR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbikgRGVzY3JpcHRvcigpIChbXWJ5dGUsIFtdaW50KSB7Ci0JcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0daSVAoKSwgW11pbnR7MjAsIDB9CisJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0daSVAoKSwgW11pbnR7MjIsIDB9CiB9CiAKIGZ1bmMgKHggKkdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24pIEdldFBhdGgoKSBbXWludDMyIHsKQEAgLTMwMDUsNiArNDMzMiwxMyBAQAogCXJldHVybiAwCiB9CiAKK2Z1bmMgKHggKkdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24pIEdldFNlbWFudGljKCkgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYyB7CisJaWYgeCAhPSBuaWwgJiYgeC5TZW1hbnRpYyAhPSBuaWwgeworCQlyZXR1cm4gKnguU2VtYW50aWMKKwl9CisJcmV0dXJuIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fTk9ORQorfQorCiB2YXIgRmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90byBwcm90b3JlZmxlY3QuRmlsZURlc2NyaXB0b3IKIAogdmFyIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzYyA9IFtdYnl0ZXsKQEAgLTMwMTYsNyArNDM1MCw3IEBACiAJMHgxOCwgMHgwMSwgMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyNCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwKIAkweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ2LCAweDY5LCAweDZjLCAweDY1LCAweDQ0LCAweDY1LCAweDczLAogCTB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NTIsIDB4MDQsIDB4NjYsIDB4NjksCi0JMHg2YywgMHg2NSwgMHgyMiwgMHhlNCwgMHgwNCwgMHgwYSwgMHgxMywgMHg0NiwgMHg2OSwgMHg2YywgMHg2NSwgMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwKKwkweDZjLCAweDY1LCAweDIyLCAweDk4LCAweDA1LCAweDBhLCAweDEzLCAweDQ2LCAweDY5LCAweDZjLCAweDY1LCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLAogCTB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4MTIsIDB4MTIsIDB4MGEsIDB4MDQsIDB4NmUsIDB4NjEsCiAJMHg2ZCwgMHg2NSwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwNCwgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxMiwgMHgxOCwKIAkweDBhLCAweDA3LCAweDcwLCAweDYxLCAweDYzLCAweDZiLCAweDYxLCAweDY3LCAweDY1LCAweDE4LCAweDAyLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLApAQCAtMzA1NCwzMzkgKzQzODgsNDU3IEBACiAJMHg3NSwgMHg2NiwgMHgyZSwgMHg1MywgMHg2ZiwgMHg3NSwgMHg3MiwgMHg2MywgMHg2NSwgMHg0MywgMHg2ZiwgMHg2NCwgMHg2NSwgMHg0OSwgMHg2ZSwgMHg2NiwKIAkweDZmLCAweDUyLCAweDBlLCAweDczLCAweDZmLCAweDc1LCAweDcyLCAweDYzLCAweDY1LCAweDQzLCAweDZmLCAweDY0LCAweDY1LCAweDQ5LCAweDZlLCAweDY2LAogCTB4NmYsIDB4MTIsIDB4MTYsIDB4MGEsIDB4MDYsIDB4NzMsIDB4NzksIDB4NmUsIDB4NzQsIDB4NjEsIDB4NzgsIDB4MTgsIDB4MGMsIDB4MjAsIDB4MDEsIDB4MjgsCi0JMHgwOSwgMHg1MiwgMHgwNiwgMHg3MywgMHg3OSwgMHg2ZSwgMHg3NCwgMHg2MSwgMHg3OCwgMHgyMiwgMHhiOSwgMHgwNiwgMHgwYSwgMHgwZiwgMHg0NCwgMHg2NSwKLQkweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDEyLCAweDEyLCAweDBhLAotCTB4MDQsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTgsIDB4MDEsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MDQsIDB4NmUsIDB4NjEsIDB4NmQsCi0JMHg2NSwgMHgxMiwgMHgzYiwgMHgwYSwgMHgwNSwgMHg2NiwgMHg2OSwgMHg2NSwgMHg2YywgMHg2NCwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwKLQkweDMyLCAweDI1LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLAotCTB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4NDQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsCi0JMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg1MiwgMHgwNSwgMHg2NiwgMHg2OSwgMHg2NSwgMHg2YywgMHg2NCwgMHgxMiwgMHg0MywKLQkweDBhLCAweDA5LCAweDY1LCAweDc4LCAweDc0LCAweDY1LCAweDZlLCAweDczLCAweDY5LCAweDZmLCAweDZlLCAweDE4LCAweDA2LCAweDIwLCAweDAzLCAweDI4LAotCTB4MGIsIDB4MzIsIDB4MjUsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsCi0JMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NiwgMHg2OSwgMHg2NSwgMHg2YywgMHg2NCwgMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwKLQkweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDUyLCAweDA5LCAweDY1LCAweDc4LCAweDc0LCAweDY1LCAweDZlLCAweDczLAotCTB4NjksIDB4NmYsIDB4NmUsIDB4MTIsIDB4NDEsIDB4MGEsIDB4MGIsIDB4NmUsIDB4NjUsIDB4NzMsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NzQsIDB4NzksCi0JMHg3MCwgMHg2NSwgMHgxOCwgMHgwMywgMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyMCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywKLQkweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLAotCTB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NTIsIDB4MGEsIDB4NmUsIDB4NjUsIDB4NzMsIDB4NzQsCi0JMHg2NSwgMHg2NCwgMHg1NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgxMiwgMHg0MSwgMHgwYSwgMHgwOSwgMHg2NSwgMHg2ZSwgMHg3NSwgMHg2ZCwgMHg1ZiwgMHg3NCwKLQkweDc5LCAweDcwLCAweDY1LCAweDE4LCAweDA0LCAweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLCAweDI0LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LAotCTB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDUsIDB4NmUsIDB4NzUsIDB4NmQsCi0JMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg1MiwKLQkweDA4LCAweDY1LCAweDZlLCAweDc1LCAweDZkLCAweDU0LCAweDc5LCAweDcwLCAweDY1LCAweDEyLCAweDU4LCAweDBhLCAweDBmLCAweDY1LCAweDc4LCAweDc0LAotCTB4NjUsIDB4NmUsIDB4NzMsIDB4NjksIDB4NmYsIDB4NmUsIDB4NWYsIDB4NzIsIDB4NjEsIDB4NmUsIDB4NjcsIDB4NjUsIDB4MTgsIDB4MDUsIDB4MjAsIDB4MDMsCi0JMHgyOCwgMHgwYiwgMHgzMiwgMHgyZiwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwKLQkweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLAotCTB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4MmUsIDB4NDUsIDB4NzgsIDB4NzQsIDB4NjUsIDB4NmUsIDB4NzMsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTIsIDB4NjEsCi0JMHg2ZSwgMHg2NywgMHg2NSwgMHg1MiwgMHgwZSwgMHg2NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MiwgMHg2MSwKLQkweDZlLCAweDY3LCAweDY1LCAweDEyLCAweDQ0LCAweDBhLCAweDBhLCAweDZmLCAweDZlLCAweDY1LCAweDZmLCAweDY2LCAweDVmLCAweDY0LCAweDY1LCAweDYzLAotCTB4NmMsIDB4MTgsIDB4MDgsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MjUsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsCi0JMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0ZiwgMHg2ZSwgMHg2NSwgMHg2ZiwgMHg2NiwgMHg0NCwKLQkweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDUyLCAweDA5LAotCTB4NmYsIDB4NmUsIDB4NjUsIDB4NmYsIDB4NjYsIDB4NDQsIDB4NjUsIDB4NjMsIDB4NmMsIDB4MTIsIDB4MzksIDB4MGEsIDB4MDcsIDB4NmYsIDB4NzAsIDB4NzQsCi0JMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxOCwgMHgwNywgMHgyMCwgMHgwMSwgMHgyOCwgMHgwYiwgMHgzMiwgMHgxZiwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwKLQkweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDRkLCAweDY1LCAweDczLAotCTB4NzMsIDB4NjEsIDB4NjcsIDB4NjUsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4NTIsIDB4MDcsIDB4NmYsIDB4NzAsIDB4NzQsCi0JMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxMiwgMHg1NSwgMHgwYSwgMHgwZSwgMHg3MiwgMHg2NSwgMHg3MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg2NCwKLQkweDVmLCAweDcyLCAweDYxLCAweDZlLCAweDY3LCAweDY1LCAweDE4LCAweDA5LCAweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLCAweDJlLCAweDJlLCAweDY3LAorCTB4MDksIDB4NTIsIDB4MDYsIDB4NzMsIDB4NzksIDB4NmUsIDB4NzQsIDB4NjEsIDB4NzgsIDB4MTIsIDB4MzIsIDB4MGEsIDB4MDcsIDB4NjUsIDB4NjQsIDB4NjksCisJMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxOCwgMHgwZSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwZSwgMHgzMiwgMHgxOCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwKKwkweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ1LCAweDY0LCAweDY5LAorCTB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTIsIDB4MDcsIDB4NjUsIDB4NjQsIDB4NjksIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MjIsIDB4YjksIDB4MDYsCisJMHgwYSwgMHgwZiwgMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwKKwkweDZmLCAweDEyLCAweDEyLCAweDBhLCAweDA0LCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDE4LCAweDAxLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLAorCTB4MDQsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTIsIDB4M2IsIDB4MGEsIDB4MDUsIDB4NjYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4MTgsIDB4MDIsCisJMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyNSwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwKKwkweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ2LCAweDY5LCAweDY1LCAweDZjLCAweDY0LCAweDQ0LCAweDY1LCAweDczLCAweDYzLAorCTB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NTIsIDB4MDUsIDB4NjYsIDB4NjksIDB4NjUsCisJMHg2YywgMHg2NCwgMHgxMiwgMHg0MywgMHgwYSwgMHgwOSwgMHg2NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxOCwKKwkweDA2LCAweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLCAweDI1LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLAorCTB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4NDQsIDB4NjUsIDB4NzMsCisJMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg1MiwgMHgwOSwgMHg2NSwgMHg3OCwKKwkweDc0LCAweDY1LCAweDZlLCAweDczLCAweDY5LCAweDZmLCAweDZlLCAweDEyLCAweDQxLCAweDBhLCAweDBiLCAweDZlLCAweDY1LCAweDczLCAweDc0LCAweDY1LAorCTB4NjQsIDB4NWYsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MTgsIDB4MDMsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MjAsIDB4MmUsIDB4NjcsCiAJMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NCwKLQkweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDJlLCAweDUyLAotCTB4NjUsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsIDB4NTIsIDB4NjEsIDB4NmUsIDB4NjcsIDB4NjUsIDB4NTIsIDB4MGQsIDB4NzIsIDB4NjUsCi0JMHg3MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg2NCwgMHg1MiwgMHg2MSwgMHg2ZSwgMHg2NywgMHg2NSwgMHgxMiwgMHgyMywgMHgwYSwgMHgwZCwgMHg3MiwKLQkweDY1LCAweDczLCAweDY1LCAweDcyLCAweDc2LCAweDY1LCAweDY0LCAweDVmLCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDE4LCAweDBhLCAweDIwLCAweDAzLAotCTB4MjgsIDB4MDksIDB4NTIsIDB4MGMsIDB4NzIsIDB4NjUsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsIDB4NGUsIDB4NjEsIDB4NmQsIDB4NjUsCi0JMHgxYSwgMHg3YSwgMHgwYSwgMHgwZSwgMHg0NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MiwgMHg2MSwgMHg2ZSwKLQkweDY3LCAweDY1LCAweDEyLCAweDE0LCAweDBhLCAweDA1LCAweDczLCAweDc0LCAweDYxLCAweDcyLCAweDc0LCAweDE4LCAweDAxLCAweDIwLCAweDAxLCAweDI4LAotCTB4MDUsIDB4NTIsIDB4MDUsIDB4NzMsIDB4NzQsIDB4NjEsIDB4NzIsIDB4NzQsIDB4MTIsIDB4MTAsIDB4MGEsIDB4MDMsIDB4NjUsIDB4NmUsIDB4NjQsIDB4MTgsCi0JMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwNSwgMHg1MiwgMHgwMywgMHg2NSwgMHg2ZSwgMHg2NCwgMHgxMiwgMHg0MCwgMHgwYSwgMHgwNywgMHg2ZiwgMHg3MCwKLQkweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDE4LCAweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDBiLCAweDMyLCAweDI2LCAweDJlLCAweDY3LCAweDZmLAotCTB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDUsIDB4NzgsCisJMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg1MiwgMHgwYSwKKwkweDZlLCAweDY1LCAweDczLCAweDc0LCAweDY1LCAweDY0LCAweDU0LCAweDc5LCAweDcwLCAweDY1LCAweDEyLCAweDQxLCAweDBhLCAweDA5LCAweDY1LCAweDZlLAorCTB4NzUsIDB4NmQsIDB4NWYsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MTgsIDB4MDQsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MjQsIDB4MmUsCisJMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwKKwkweDQ1LCAweDZlLCAweDc1LCAweDZkLCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLAorCTB4NmYsIDB4NzQsIDB4NmYsIDB4NTIsIDB4MDgsIDB4NjUsIDB4NmUsIDB4NzUsIDB4NmQsIDB4NTQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MTIsIDB4NTgsIDB4MGEsCisJMHgwZiwgMHg2NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1ZiwgMHg3MiwgMHg2MSwgMHg2ZSwgMHg2NywgMHg2NSwKKwkweDE4LCAweDA1LCAweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLCAweDJmLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLAorCTB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsCisJMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHgyZSwgMHg0NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywgMHg2OSwKKwkweDZmLCAweDZlLCAweDUyLCAweDYxLCAweDZlLCAweDY3LCAweDY1LCAweDUyLCAweDBlLCAweDY1LCAweDc4LCAweDc0LCAweDY1LCAweDZlLCAweDczLCAweDY5LAorCTB4NmYsIDB4NmUsIDB4NTIsIDB4NjEsIDB4NmUsIDB4NjcsIDB4NjUsIDB4MTIsIDB4NDQsIDB4MGEsIDB4MGEsIDB4NmYsIDB4NmUsIDB4NjUsIDB4NmYsIDB4NjYsCisJMHg1ZiwgMHg2NCwgMHg2NSwgMHg2MywgMHg2YywgMHgxOCwgMHgwOCwgMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyNSwgMHgyZSwgMHg2NywgMHg2ZiwKKwkweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDRmLCAweDZlLAorCTB4NjUsIDB4NmYsIDB4NjYsIDB4NDQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsCisJMHg3NCwgMHg2ZiwgMHg1MiwgMHgwOSwgMHg2ZiwgMHg2ZSwgMHg2NSwgMHg2ZiwgMHg2NiwgMHg0NCwgMHg2NSwgMHg2MywgMHg2YywgMHgxMiwgMHgzOSwgMHgwYSwKKwkweDA3LCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDE4LCAweDA3LCAweDIwLCAweDAxLCAweDI4LCAweDBiLCAweDMyLCAweDFmLAorCTB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsCisJMHgyZSwgMHg0ZCwgMHg2NSwgMHg3MywgMHg3MywgMHg2MSwgMHg2NywgMHg2NSwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHg1MiwKKwkweDA3LCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDEyLCAweDU1LCAweDBhLCAweDBlLCAweDcyLCAweDY1LCAweDczLCAweDY1LAorCTB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NzIsIDB4NjEsIDB4NmUsIDB4NjcsIDB4NjUsIDB4MTgsIDB4MDksIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsCisJMHgzMiwgMHgyZSwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwKKwkweDc1LCAweDY2LCAweDJlLCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLCAweDZmLAorCTB4NzQsIDB4NmYsIDB4MmUsIDB4NTIsIDB4NjUsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsIDB4NTIsIDB4NjEsIDB4NmUsIDB4NjcsIDB4NjUsCisJMHg1MiwgMHgwZCwgMHg3MiwgMHg2NSwgMHg3MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg2NCwgMHg1MiwgMHg2MSwgMHg2ZSwgMHg2NywgMHg2NSwgMHgxMiwKKwkweDIzLCAweDBhLCAweDBkLCAweDcyLCAweDY1LCAweDczLCAweDY1LCAweDcyLCAweDc2LCAweDY1LCAweDY0LCAweDVmLCAweDZlLCAweDYxLCAweDZkLCAweDY1LAorCTB4MTgsIDB4MGEsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MDksIDB4NTIsIDB4MGMsIDB4NzIsIDB4NjUsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsCisJMHg0ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxYSwgMHg3YSwgMHgwYSwgMHgwZSwgMHg0NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywgMHg2OSwgMHg2ZiwKKwkweDZlLCAweDUyLCAweDYxLCAweDZlLCAweDY3LCAweDY1LCAweDEyLCAweDE0LCAweDBhLCAweDA1LCAweDczLCAweDc0LCAweDYxLCAweDcyLCAweDc0LCAweDE4LAorCTB4MDEsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDUsIDB4NTIsIDB4MDUsIDB4NzMsIDB4NzQsIDB4NjEsIDB4NzIsIDB4NzQsIDB4MTIsIDB4MTAsIDB4MGEsIDB4MDMsCisJMHg2NSwgMHg2ZSwgMHg2NCwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwNSwgMHg1MiwgMHgwMywgMHg2NSwgMHg2ZSwgMHg2NCwgMHgxMiwgMHg0MCwKKwkweDBhLCAweDA3LCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDE4LCAweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDBiLCAweDMyLAorCTB4MjYsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsCisJMHg2NiwgMHgyZSwgMHg0NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MiwgMHg2MSwgMHg2ZSwgMHg2NywgMHg2NSwKKwkweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDUyLCAweDA3LCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLAorCTB4MWEsIDB4MzcsIDB4MGEsIDB4MGQsIDB4NTIsIDB4NjUsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsIDB4NTIsIDB4NjEsIDB4NmUsIDB4NjcsCisJMHg2NSwgMHgxMiwgMHgxNCwgMHgwYSwgMHgwNSwgMHg3MywgMHg3NCwgMHg2MSwgMHg3MiwgMHg3NCwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwNSwKKwkweDUyLCAweDA1LCAweDczLCAweDc0LCAweDYxLCAweDcyLCAweDc0LCAweDEyLCAweDEwLCAweDBhLCAweDAzLCAweDY1LCAweDZlLCAweDY0LCAweDE4LCAweDAyLAorCTB4MjAsIDB4MDEsIDB4MjgsIDB4MDUsIDB4NTIsIDB4MDMsIDB4NjUsIDB4NmUsIDB4NjQsIDB4MjIsIDB4Y2MsIDB4MDQsIDB4MGEsIDB4MTUsIDB4NDUsIDB4NzgsCiAJMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MiwgMHg2MSwgMHg2ZSwgMHg2NywgMHg2NSwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwKLQkweDZmLCAweDZlLCAweDczLCAweDUyLCAweDA3LCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDFhLCAweDM3LCAweDBhLCAweDBkLAotCTB4NTIsIDB4NjUsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsIDB4NTIsIDB4NjEsIDB4NmUsIDB4NjcsIDB4NjUsIDB4MTIsIDB4MTQsIDB4MGEsCi0JMHgwNSwgMHg3MywgMHg3NCwgMHg2MSwgMHg3MiwgMHg3NCwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwNSwgMHg1MiwgMHgwNSwgMHg3MywgMHg3NCwKLQkweDYxLCAweDcyLCAweDc0LCAweDEyLCAweDEwLCAweDBhLCAweDAzLCAweDY1LCAweDZlLCAweDY0LCAweDE4LCAweDAyLCAweDIwLCAweDAxLCAweDI4LCAweDA1LAotCTB4NTIsIDB4MDMsIDB4NjUsIDB4NmUsIDB4NjQsIDB4MjIsIDB4N2MsIDB4MGEsIDB4MTUsIDB4NDUsIDB4NzgsIDB4NzQsIDB4NjUsIDB4NmUsIDB4NzMsIDB4NjksCi0JMHg2ZiwgMHg2ZSwgMHg1MiwgMHg2MSwgMHg2ZSwgMHg2NywgMHg2NSwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxMiwgMHg1OCwKKwkweDZmLCAweDZlLCAweDczLCAweDEyLCAweDU4LCAweDBhLCAweDE0LCAweDc1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLAorCTB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MTgsIDB4ZTcsIDB4MDcsIDB4MjAsIDB4MDMsCisJMHgyOCwgMHgwYiwgMHgzMiwgMHgyNCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwKKwkweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDU1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LAorCTB4NjUsIDB4NjQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTIsIDB4MTMsIDB4NzUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsCisJMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxMiwgMHg1OSwgMHgwYSwKKwkweDBiLCAweDY0LCAweDY1LCAweDYzLCAweDZjLCAweDYxLCAweDcyLCAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDE4LCAweDAyLCAweDIwLCAweDAzLAorCTB4MjgsIDB4MGIsIDB4MzIsIDB4MzIsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsCisJMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MiwgMHg2MSwKKwkweDZlLCAweDY3LCAweDY1LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDJlLCAweDQ0LCAweDY1LCAweDYzLCAweDZjLCAweDYxLAorCTB4NzIsIDB4NjEsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NDIsIDB4MDMsIDB4ODgsIDB4MDEsIDB4MDIsIDB4NTIsIDB4MGIsIDB4NjQsIDB4NjUsIDB4NjMsCisJMHg2YywgMHg2MSwgMHg3MiwgMHg2MSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxMiwgMHgzNywgMHgwYSwgMHgwOCwgMHg2NiwgMHg2NSwgMHg2MSwgMHg3NCwKKwkweDc1LCAweDcyLCAweDY1LCAweDczLCAweDE4LCAweDMyLCAweDIwLCAweDAxLCAweDI4LCAweDBiLCAweDMyLCAweDFiLCAweDJlLCAweDY3LCAweDZmLCAweDZmLAorCTB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjUsIDB4NjEsCisJMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg1MywgMHg2NSwgMHg3NCwgMHg1MiwgMHgwOCwgMHg2NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwKKwkweDczLCAweDEyLCAweDZkLCAweDBhLCAweDBjLCAweDc2LCAweDY1LCAweDcyLCAweDY5LCAweDY2LCAweDY5LCAweDYzLCAweDYxLCAweDc0LCAweDY5LCAweDZmLAorCTB4NmUsIDB4MTgsIDB4MDMsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MGUsIDB4MzIsIDB4MzgsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsCisJMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywKKwkweDY5LCAweDZmLCAweDZlLCAweDUyLCAweDYxLCAweDZlLCAweDY3LCAweDY1LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDJlLAorCTB4NTYsIDB4NjUsIDB4NzIsIDB4NjksIDB4NjYsIDB4NjksIDB4NjMsIDB4NjEsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTMsIDB4NzQsIDB4NjEsIDB4NzQsCisJMHg2NSwgMHgzYSwgMHgwYSwgMHg1NSwgMHg0ZSwgMHg1NiwgMHg0NSwgMHg1MiwgMHg0OSwgMHg0NiwgMHg0OSwgMHg0NSwgMHg0NCwgMHg0MiwgMHgwMywgMHg4OCwKKwkweDAxLCAweDAyLCAweDUyLCAweDBjLCAweDc2LCAweDY1LCAweDcyLCAweDY5LCAweDY2LCAweDY5LCAweDYzLCAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLAorCTB4MWEsIDB4OTQsIDB4MDEsIDB4MGEsIDB4MGIsIDB4NDQsIDB4NjUsIDB4NjMsIDB4NmMsIDB4NjEsIDB4NzIsIDB4NjEsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsCisJMHgxMiwgMHgxNiwgMHgwYSwgMHgwNiwgMHg2ZSwgMHg3NSwgMHg2ZCwgMHg2MiwgMHg2NSwgMHg3MiwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwNSwKKwkweDUyLCAweDA2LCAweDZlLCAweDc1LCAweDZkLCAweDYyLCAweDY1LCAweDcyLCAweDEyLCAweDFiLCAweDBhLCAweDA5LCAweDY2LCAweDc1LCAweDZjLCAweDZjLAorCTB4NWYsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTgsIDB4MDIsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MDgsIDB4NjYsIDB4NzUsIDB4NmMsCisJMHg2YywgMHg0ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxMiwgMHgxMiwgMHgwYSwgMHgwNCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgxOCwgMHgwMywgMHgyMCwKKwkweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDA0LCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDEyLCAweDFhLCAweDBhLCAweDA4LCAweDcyLCAweDY1LCAweDczLAorCTB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsIDB4MTgsIDB4MDUsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4NTIsIDB4MDgsIDB4NzIsIDB4NjUsIDB4NzMsCisJMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg2NCwgMHgxMiwgMHgxYSwgMHgwYSwgMHgwOCwgMHg3MiwgMHg2NSwgMHg3MCwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwKKwkweDY0LCAweDE4LCAweDA2LCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDUyLCAweDA4LCAweDcyLCAweDY1LCAweDcwLCAweDY1LCAweDYxLCAweDc0LCAweDY1LAorCTB4NjQsIDB4NGEsIDB4MDQsIDB4MDgsIDB4MDQsIDB4MTAsIDB4MDUsIDB4MjIsIDB4MzQsIDB4MGEsIDB4MTEsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NjksIDB4NjYsCisJMHg2OSwgMHg2MywgMHg2MSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MywgMHg3NCwgMHg2MSwgMHg3NCwgMHg2NSwgMHgxMiwgMHgwZiwgMHgwYSwgMHgwYiwKKwkweDQ0LCAweDQ1LCAweDQzLCAweDRjLCAweDQxLCAweDUyLCAweDQxLCAweDU0LCAweDQ5LCAweDRmLCAweDRlLCAweDEwLCAweDAwLCAweDEyLCAweDBlLCAweDBhLAorCTB4MGEsIDB4NTUsIDB4NGUsIDB4NTYsIDB4NDUsIDB4NTIsIDB4NDksIDB4NDYsIDB4NDksIDB4NDUsIDB4NDQsIDB4MTAsIDB4MDEsIDB4MmEsIDB4MDksIDB4MDgsCisJMHhlOCwgMHgwNywgMHgxMCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMiwgMHgyMiwgMHhjMSwgMHgwNiwgMHgwYSwgMHgxNCwgMHg0NiwgMHg2OSwgMHg2NSwKKwkweDZjLCAweDY0LCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLCAweDZmLCAweDc0LAorCTB4NmYsIDB4MTIsIDB4MTIsIDB4MGEsIDB4MDQsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTgsIDB4MDEsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsCisJMHgwNCwgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxMiwgMHgxNiwgMHgwYSwgMHgwNiwgMHg2ZSwgMHg3NSwgMHg2ZCwgMHg2MiwgMHg2NSwgMHg3MiwgMHgxOCwKKwkweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDA1LCAweDUyLCAweDA2LCAweDZlLCAweDc1LCAweDZkLCAweDYyLCAweDY1LCAweDcyLCAweDEyLCAweDQxLCAweDBhLAorCTB4MDUsIDB4NmMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NmMsIDB4MTgsIDB4MDQsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MGUsIDB4MzIsIDB4MmIsIDB4MmUsIDB4NjcsCisJMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NiwKKwkweDY5LCAweDY1LCAweDZjLCAweDY0LCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLAorCTB4NmYsIDB4NzQsIDB4NmYsIDB4MmUsIDB4NGMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NmMsIDB4NTIsIDB4MDUsIDB4NmMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NmMsCisJMHgxMiwgMHgzZSwgMHgwYSwgMHgwNCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgxOCwgMHgwNSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwZSwgMHgzMiwgMHgyYSwKKwkweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LAorCTB4MmUsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4NDQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsCisJMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHgyZSwgMHg1NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHg1MiwgMHgwNCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKKwkweDEyLCAweDFiLCAweDBhLCAweDA5LCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDVmLCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDE4LCAweDA2LCAweDIwLAorCTB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MDgsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4NGUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTIsIDB4MWEsIDB4MGEsCisJMHgwOCwgMHg2NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg2NCwgMHg2NSwgMHg2NSwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwKKwkweDA4LCAweDY1LCAweDc4LCAweDc0LCAweDY1LCAweDZlLCAweDY0LCAweDY1LCAweDY1LCAweDEyLCAweDIzLCAweDBhLCAweDBkLCAweDY0LCAweDY1LCAweDY2LAorCTB4NjEsIDB4NzUsIDB4NmMsIDB4NzQsIDB4NWYsIDB4NzYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsIDB4MTgsIDB4MDcsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksCisJMHg1MiwgMHgwYywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2MSwgMHg3NSwgMHg2YywgMHg3NCwgMHg1NiwgMHg2MSwgMHg2YywgMHg3NSwgMHg2NSwgMHgxMiwgMHgxZiwKKwkweDBhLCAweDBiLCAweDZmLCAweDZlLCAweDY1LCAweDZmLCAweDY2LCAweDVmLCAweDY5LCAweDZlLCAweDY0LCAweDY1LCAweDc4LCAweDE4LCAweDA5LCAweDIwLAorCTB4MDEsIDB4MjgsIDB4MDUsIDB4NTIsIDB4MGEsIDB4NmYsIDB4NmUsIDB4NjUsIDB4NmYsIDB4NjYsIDB4NDksIDB4NmUsIDB4NjQsIDB4NjUsIDB4NzgsIDB4MTIsCisJMHgxYiwgMHgwYSwgMHgwOSwgMHg2YSwgMHg3MywgMHg2ZiwgMHg2ZSwgMHg1ZiwgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxOCwgMHgwYSwgMHgyMCwgMHgwMSwKKwkweDI4LCAweDA5LCAweDUyLCAweDA4LCAweDZhLCAweDczLCAweDZmLCAweDZlLCAweDRlLCAweDYxLCAweDZkLCAweDY1LCAweDEyLCAweDM3LCAweDBhLCAweDA3LAorCTB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MTgsIDB4MDgsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MWQsIDB4MmUsCisJMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwKKwkweDQ2LCAweDY5LCAweDY1LCAweDZjLCAweDY0LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDUyLCAweDA3LCAweDZmLCAweDcwLAorCTB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MTIsIDB4MjcsIDB4MGEsIDB4MGYsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4MzMsIDB4NWYsCisJMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg2MSwgMHg2YywgMHgxOCwgMHgxMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHg1MiwgMHgwZSwKKwkweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDMzLCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDYxLCAweDZjLCAweDIyLCAweGI2LAorCTB4MDIsIDB4MGEsIDB4MDQsIDB4NTQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MTIsIDB4MGYsIDB4MGEsIDB4MGIsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsCisJMHg0NCwgMHg0ZiwgMHg1NSwgMHg0MiwgMHg0YywgMHg0NSwgMHgxMCwgMHgwMSwgMHgxMiwgMHgwZSwgMHgwYSwgMHgwYSwgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwKKwkweDVmLCAweDQ2LCAweDRjLCAweDRmLCAweDQxLCAweDU0LCAweDEwLCAweDAyLCAweDEyLCAweDBlLCAweDBhLCAweDBhLCAweDU0LCAweDU5LCAweDUwLCAweDQ1LAorCTB4NWYsIDB4NDksIDB4NGUsIDB4NTQsIDB4MzYsIDB4MzQsIDB4MTAsIDB4MDMsIDB4MTIsIDB4MGYsIDB4MGEsIDB4MGIsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsCisJMHg1ZiwgMHg1NSwgMHg0OSwgMHg0ZSwgMHg1NCwgMHgzNiwgMHgzNCwgMHgxMCwgMHgwNCwgMHgxMiwgMHgwZSwgMHgwYSwgMHgwYSwgMHg1NCwgMHg1OSwgMHg1MCwKKwkweDQ1LCAweDVmLCAweDQ5LCAweDRlLCAweDU0LCAweDMzLCAweDMyLCAweDEwLCAweDA1LCAweDEyLCAweDEwLCAweDBhLCAweDBjLCAweDU0LCAweDU5LCAweDUwLAorCTB4NDUsIDB4NWYsIDB4NDYsIDB4NDksIDB4NTgsIDB4NDUsIDB4NDQsIDB4MzYsIDB4MzQsIDB4MTAsIDB4MDYsIDB4MTIsIDB4MTAsIDB4MGEsIDB4MGMsIDB4NTQsCisJMHg1OSwgMHg1MCwgMHg0NSwgMHg1ZiwgMHg0NiwgMHg0OSwgMHg1OCwgMHg0NSwgMHg0NCwgMHgzMywgMHgzMiwgMHgxMCwgMHgwNywgMHgxMiwgMHgwZCwgMHgwYSwKKwkweDA5LCAweDU0LCAweDU5LCAweDUwLCAweDQ1LCAweDVmLCAweDQyLCAweDRmLCAweDRmLCAweDRjLCAweDEwLCAweDA4LCAweDEyLCAweDBmLCAweDBhLCAweDBiLAorCTB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsIDB4NTMsIDB4NTQsIDB4NTIsIDB4NDksIDB4NGUsIDB4NDcsIDB4MTAsIDB4MDksIDB4MTIsIDB4MGUsIDB4MGEsCisJMHgwYSwgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwgMHg1ZiwgMHg0NywgMHg1MiwgMHg0ZiwgMHg1NSwgMHg1MCwgMHgxMCwgMHgwYSwgMHgxMiwgMHgxMCwgMHgwYSwKKwkweDBjLCAweDU0LCAweDU5LCAweDUwLCAweDQ1LCAweDVmLCAweDRkLCAweDQ1LCAweDUzLCAweDUzLCAweDQxLCAweDQ3LCAweDQ1LCAweDEwLCAweDBiLCAweDEyLAorCTB4MGUsIDB4MGEsIDB4MGEsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsIDB4NDIsIDB4NTksIDB4NTQsIDB4NDUsIDB4NTMsIDB4MTAsIDB4MGMsIDB4MTIsCisJMHgwZiwgMHgwYSwgMHgwYiwgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwgMHg1ZiwgMHg1NSwgMHg0OSwgMHg0ZSwgMHg1NCwgMHgzMywgMHgzMiwgMHgxMCwgMHgwZCwKKwkweDEyLCAweDBkLCAweDBhLCAweDA5LCAweDU0LCAweDU5LCAweDUwLCAweDQ1LCAweDVmLCAweDQ1LCAweDRlLCAweDU1LCAweDRkLCAweDEwLCAweDBlLCAweDEyLAorCTB4MTEsIDB4MGEsIDB4MGQsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsIDB4NTMsIDB4NDYsIDB4NDksIDB4NTgsIDB4NDUsIDB4NDQsIDB4MzMsIDB4MzIsCisJMHgxMCwgMHgwZiwgMHgxMiwgMHgxMSwgMHgwYSwgMHgwZCwgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwgMHg1ZiwgMHg1MywgMHg0NiwgMHg0OSwgMHg1OCwgMHg0NSwKKwkweDQ0LCAweDM2LCAweDM0LCAweDEwLCAweDEwLCAweDEyLCAweDBmLCAweDBhLCAweDBiLCAweDU0LCAweDU5LCAweDUwLCAweDQ1LCAweDVmLCAweDUzLCAweDQ5LAorCTB4NGUsIDB4NTQsIDB4MzMsIDB4MzIsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MGYsIDB4MGEsIDB4MGIsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsIDB4NTMsCisJMHg0OSwgMHg0ZSwgMHg1NCwgMHgzNiwgMHgzNCwgMHgxMCwgMHgxMiwgMHgyMiwgMHg0MywgMHgwYSwgMHgwNSwgMHg0YywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2YywKKwkweDEyLCAweDEyLCAweDBhLCAweDBlLCAweDRjLCAweDQxLCAweDQyLCAweDQ1LCAweDRjLCAweDVmLCAweDRmLCAweDUwLCAweDU0LCAweDQ5LCAweDRmLCAweDRlLAorCTB4NDEsIDB4NGMsIDB4MTAsIDB4MDEsIDB4MTIsIDB4MTIsIDB4MGEsIDB4MGUsIDB4NGMsIDB4NDEsIDB4NDIsIDB4NDUsIDB4NGMsIDB4NWYsIDB4NTIsIDB4NDUsCisJMHg1MCwgMHg0NSwgMHg0MSwgMHg1NCwgMHg0NSwgMHg0NCwgMHgxMCwgMHgwMywgMHgxMiwgMHgxMiwgMHgwYSwgMHgwZSwgMHg0YywgMHg0MSwgMHg0MiwgMHg0NSwKKwkweDRjLCAweDVmLCAweDUyLCAweDQ1LCAweDUxLCAweDU1LCAweDQ5LCAweDUyLCAweDQ1LCAweDQ0LCAweDEwLCAweDAyLCAweDIyLCAweDYzLCAweDBhLCAweDE0LAorCTB4NGYsIDB4NmUsIDB4NjUsIDB4NmYsIDB4NjYsIDB4NDQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsCisJMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHgxMiwgMHgxMiwgMHgwYSwgMHgwNCwgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMSwKKwkweDI4LCAweDA5LCAweDUyLCAweDA0LCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDEyLCAweDM3LCAweDBhLCAweDA3LCAweDZmLCAweDcwLCAweDc0LCAweDY5LAorCTB4NmYsIDB4NmUsIDB4NzMsIDB4MTgsIDB4MDIsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MWQsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsCisJMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0ZiwgMHg2ZSwgMHg2NSwgMHg2ZiwKKwkweDY2LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDUyLCAweDA3LCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLAorCTB4NzMsIDB4MjIsIDB4ZTMsIDB4MDIsIDB4MGEsIDB4MTMsIDB4NDUsIDB4NmUsIDB4NzUsIDB4NmQsIDB4NDQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksCisJMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHgxMiwgMHgxMiwgMHgwYSwgMHgwNCwgMHg2ZSwgMHg2MSwgMHg2ZCwKKwkweDY1LCAweDE4LCAweDAxLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDA0LCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDEyLCAweDNmLCAweDBhLAorCTB4MDUsIDB4NzYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsIDB4MTgsIDB4MDIsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MjksIDB4MmUsIDB4NjcsCisJMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NSwKKwkweDZlLCAweDc1LCAweDZkLCAweDU2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LAorCTB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NTIsIDB4MDUsIDB4NzYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsIDB4MTIsIDB4MzYsCisJMHgwYSwgMHgwNywgMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxOCwgMHgwMywgMHgyMCwgMHgwMSwgMHgyOCwgMHgwYiwgMHgzMiwKKwkweDFjLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LAorCTB4NjYsIDB4MmUsIDB4NDUsIDB4NmUsIDB4NzUsIDB4NmQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4NTIsIDB4MDcsIDB4NmYsCisJMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxMiwgMHg1ZCwgMHgwYSwgMHgwZSwgMHg3MiwgMHg2NSwgMHg3MywgMHg2NSwgMHg3MiwgMHg3NiwKKwkweDY1LCAweDY0LCAweDVmLCAweDcyLCAweDYxLCAweDZlLCAweDY3LCAweDY1LCAweDE4LCAweDA0LCAweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLCAweDM2LAorCTB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsCisJMHgyZSwgMHg0NSwgMHg2ZSwgMHg3NSwgMHg2ZCwgMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwKKwkweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDJlLCAweDQ1LCAweDZlLCAweDc1LCAweDZkLCAweDUyLCAweDY1LCAweDczLCAweDY1LCAweDcyLCAweDc2LCAweDY1LAorCTB4NjQsIDB4NTIsIDB4NjEsIDB4NmUsIDB4NjcsIDB4NjUsIDB4NTIsIDB4MGQsIDB4NzIsIDB4NjUsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsCisJMHg1MiwgMHg2MSwgMHg2ZSwgMHg2NywgMHg2NSwgMHgxMiwgMHgyMywgMHgwYSwgMHgwZCwgMHg3MiwgMHg2NSwgMHg3MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwKKwkweDY0LCAweDVmLCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDE4LCAweDA1LCAweDIwLCAweDAzLCAweDI4LCAweDA5LCAweDUyLCAweDBjLCAweDcyLCAweDY1LAorCTB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsIDB4NGUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MWEsIDB4M2IsIDB4MGEsIDB4MTEsIDB4NDUsIDB4NmUsCisJMHg3NSwgMHg2ZCwgMHg1MiwgMHg2NSwgMHg3MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg2NCwgMHg1MiwgMHg2MSwgMHg2ZSwgMHg2NywgMHg2NSwgMHgxMiwKKwkweDE0LCAweDBhLCAweDA1LCAweDczLCAweDc0LCAweDYxLCAweDcyLCAweDc0LCAweDE4LCAweDAxLCAweDIwLCAweDAxLCAweDI4LCAweDA1LCAweDUyLCAweDA1LAorCTB4NzMsIDB4NzQsIDB4NjEsIDB4NzIsIDB4NzQsIDB4MTIsIDB4MTAsIDB4MGEsIDB4MDMsIDB4NjUsIDB4NmUsIDB4NjQsIDB4MTgsIDB4MDIsIDB4MjAsIDB4MDEsCisJMHgyOCwgMHgwNSwgMHg1MiwgMHgwMywgMHg2NSwgMHg2ZSwgMHg2NCwgMHgyMiwgMHg4MywgMHgwMSwgMHgwYSwgMHgxOCwgMHg0NSwgMHg2ZSwgMHg3NSwgMHg2ZCwKKwkweDU2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLAorCTB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4MTIsIDB4MTIsIDB4MGEsIDB4MDQsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTgsIDB4MDEsIDB4MjAsIDB4MDEsCisJMHgyOCwgMHgwOSwgMHg1MiwgMHgwNCwgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxMiwgMHgxNiwgMHgwYSwgMHgwNiwgMHg2ZSwgMHg3NSwgMHg2ZCwgMHg2MiwKKwkweDY1LCAweDcyLCAweDE4LCAweDAyLCAweDIwLCAweDAxLCAweDI4LCAweDA1LCAweDUyLCAweDA2LCAweDZlLCAweDc1LCAweDZkLCAweDYyLCAweDY1LCAweDcyLAorCTB4MTIsIDB4M2IsIDB4MGEsIDB4MDcsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MTgsIDB4MDMsIDB4MjAsIDB4MDEsIDB4MjgsCisJMHgwYiwgMHgzMiwgMHgyMSwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwKKwkweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ1LCAweDZlLCAweDc1LCAweDZkLCAweDU2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDRmLCAweDcwLCAweDc0LAorCTB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4NTIsIDB4MDcsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MjIsIDB4YTcsIDB4MDEsCisJMHgwYSwgMHgxNiwgMHg1MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2OSwgMHg2MywgMHg2NSwgMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwKKwkweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDEyLCAweDEyLCAweDBhLCAweDA0LCAweDZlLCAweDYxLCAweDZkLCAweDY1LAorCTB4MTgsIDB4MDEsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MDQsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTIsIDB4M2UsIDB4MGEsIDB4MDYsCisJMHg2ZCwgMHg2NSwgMHg3NCwgMHg2OCwgMHg2ZiwgMHg2NCwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyNiwgMHgyZSwgMHg2NywKKwkweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDRkLAorCTB4NjUsIDB4NzQsIDB4NjgsIDB4NmYsIDB4NjQsIDB4NDQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsCisJMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg1MiwgMHgwNiwgMHg2ZCwgMHg2NSwgMHg3NCwgMHg2OCwgMHg2ZiwgMHg2NCwgMHgxMiwgMHgzOSwgMHgwYSwgMHgwNywKKwkweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDE4LCAweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDBiLCAweDMyLCAweDFmLCAweDJlLAorCTB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsCisJMHg1MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2OSwgMHg2MywgMHg2NSwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHg1MiwgMHgwNywKKwkweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDIyLCAweDg5LCAweDAyLCAweDBhLCAweDE1LCAweDRkLCAweDY1LCAweDc0LCAweDY4LAorCTB4NmYsIDB4NjQsIDB4NDQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsCisJMHg2ZiwgMHgxMiwgMHgxMiwgMHgwYSwgMHgwNCwgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwKKwkweDA0LCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDEyLCAweDFkLCAweDBhLCAweDBhLCAweDY5LCAweDZlLCAweDcwLCAweDc1LCAweDc0LCAweDVmLCAweDc0LAorCTB4NzksIDB4NzAsIDB4NjUsIDB4MTgsIDB4MDIsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MDksIDB4NjksIDB4NmUsIDB4NzAsIDB4NzUsIDB4NzQsCisJMHg1NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgxMiwgMHgxZiwgMHgwYSwgMHgwYiwgMHg2ZiwgMHg3NSwgMHg3NCwgMHg3MCwgMHg3NSwgMHg3NCwgMHg1ZiwgMHg3NCwKKwkweDc5LCAweDcwLCAweDY1LCAweDE4LCAweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDBhLCAweDZmLCAweDc1LCAweDc0LCAweDcwLCAweDc1LAorCTB4NzQsIDB4NTQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MTIsIDB4MzgsIDB4MGEsIDB4MDcsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsCisJMHgxOCwgMHgwNCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwYiwgMHgzMiwgMHgxZSwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwKKwkweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDRkLCAweDY1LCAweDc0LCAweDY4LCAweDZmLCAweDY0LCAweDRmLAorCTB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4NTIsIDB4MDcsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MTIsCisJMHgzMCwgMHgwYSwgMHgxMCwgMHg2MywgMHg2YywgMHg2OSwgMHg2NSwgMHg2ZSwgMHg3NCwgMHg1ZiwgMHg3MywgMHg3NCwgMHg3MiwgMHg2NSwgMHg2MSwgMHg2ZCwKKwkweDY5LCAweDZlLCAweDY3LCAweDE4LCAweDA1LCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLCAweDY1LAorCTB4NTIsIDB4MGYsIDB4NjMsIDB4NmMsIDB4NjksIDB4NjUsIDB4NmUsIDB4NzQsIDB4NTMsIDB4NzQsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NmQsIDB4NjksIDB4NmUsCisJMHg2NywgMHgxMiwgMHgzMCwgMHgwYSwgMHgxMCwgMHg3MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg3MiwgMHg1ZiwgMHg3MywgMHg3NCwgMHg3MiwgMHg2NSwKKwkweDYxLCAweDZkLCAweDY5LCAweDZlLCAweDY3LCAweDE4LCAweDA2LCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLAorCTB4NzMsIDB4NjUsIDB4NTIsIDB4MGYsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NTMsIDB4NzQsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NmQsCisJMHg2OSwgMHg2ZSwgMHg2NywgMHgyMiwgMHg5NywgMHgwOSwgMHgwYSwgMHgwYiwgMHg0NiwgMHg2OSwgMHg2YywgMHg2NSwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwKKwkweDZmLCAweDZlLCAweDczLCAweDEyLCAweDIxLCAweDBhLCAweDBjLCAweDZhLCAweDYxLCAweDc2LCAweDYxLCAweDVmLCAweDcwLCAweDYxLCAweDYzLCAweDZiLAorCTB4NjEsIDB4NjcsIDB4NjUsIDB4MTgsIDB4MDEsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MGIsIDB4NmEsIDB4NjEsIDB4NzYsIDB4NjEsIDB4NTAsCisJMHg2MSwgMHg2MywgMHg2YiwgMHg2MSwgMHg2NywgMHg2NSwgMHgxMiwgMHgzMCwgMHgwYSwgMHgxNCwgMHg2YSwgMHg2MSwgMHg3NiwgMHg2MSwgMHg1ZiwgMHg2ZiwKKwkweDc1LCAweDc0LCAweDY1LCAweDcyLCAweDVmLCAweDYzLCAweDZjLCAweDYxLCAweDczLCAweDczLCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDE4LCAweDA4LAorCTB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MTIsIDB4NmEsIDB4NjEsIDB4NzYsIDB4NjEsIDB4NGYsIDB4NzUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NDMsCisJMHg2YywgMHg2MSwgMHg3MywgMHg3MywgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxMiwgMHgzNSwgMHgwYSwgMHgxMywgMHg2YSwgMHg2MSwgMHg3NiwgMHg2MSwKKwkweDVmLCAweDZkLCAweDc1LCAweDZjLCAweDc0LCAweDY5LCAweDcwLCAweDZjLCAweDY1LCAweDVmLCAweDY2LCAweDY5LCAweDZjLCAweDY1LCAweDczLCAweDE4LAorCTB4MGEsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsIDB4MTEsIDB4NmEsIDB4NjEsCisJMHg3NiwgMHg2MSwgMHg0ZCwgMHg3NSwgMHg2YywgMHg3NCwgMHg2OSwgMHg3MCwgMHg2YywgMHg2NSwgMHg0NiwgMHg2OSwgMHg2YywgMHg2NSwgMHg3MywgMHgxMiwKKwkweDQ0LCAweDBhLCAweDFkLCAweDZhLCAweDYxLCAweDc2LCAweDYxLCAweDVmLCAweDY3LCAweDY1LCAweDZlLCAweDY1LCAweDcyLCAweDYxLCAweDc0LCAweDY1LAorCTB4NWYsIDB4NjUsIDB4NzEsIDB4NzUsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NWYsIDB4NjEsIDB4NmUsIDB4NjQsIDB4NWYsIDB4NjgsIDB4NjEsIDB4NzMsIDB4NjgsCisJMHgxOCwgMHgxNCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHg0MiwgMHgwMiwgMHgxOCwgMHgwMSwgMHg1MiwgMHgxOSwgMHg2YSwgMHg2MSwgMHg3NiwgMHg2MSwKKwkweDQ3LCAweDY1LCAweDZlLCAweDY1LCAweDcyLCAweDYxLCAweDc0LCAweDY1LCAweDQ1LCAweDcxLCAweDc1LCAweDYxLCAweDZjLCAweDczLCAweDQxLCAweDZlLAorCTB4NjQsIDB4NDgsIDB4NjEsIDB4NzMsIDB4NjgsIDB4MTIsIDB4M2EsIDB4MGEsIDB4MTYsIDB4NmEsIDB4NjEsIDB4NzYsIDB4NjEsIDB4NWYsIDB4NzMsIDB4NzQsCisJMHg3MiwgMHg2OSwgMHg2ZSwgMHg2NywgMHg1ZiwgMHg2MywgMHg2OCwgMHg2NSwgMHg2MywgMHg2YiwgMHg1ZiwgMHg3NSwgMHg3NCwgMHg2NiwgMHgzOCwgMHgxOCwKKwkweDFiLCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLCAweDY1LCAweDUyLCAweDEzLCAweDZhLCAweDYxLAorCTB4NzYsIDB4NjEsIDB4NTMsIDB4NzQsIDB4NzIsIDB4NjksIDB4NmUsIDB4NjcsIDB4NDMsIDB4NjgsIDB4NjUsIDB4NjMsIDB4NmIsIDB4NTUsIDB4NzQsIDB4NjYsCisJMHgzOCwgMHgxMiwgMHg1MywgMHgwYSwgMHgwYywgMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZCwgMHg2OSwgMHg3YSwgMHg2NSwgMHg1ZiwgMHg2NiwgMHg2ZiwKKwkweDcyLCAweDE4LCAweDA5LCAweDIwLCAweDAxLCAweDI4LCAweDBlLCAweDMyLCAweDI5LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LAorCTB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjksIDB4NmMsIDB4NjUsIDB4NGYsIDB4NzAsCisJMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgyZSwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZCwgMHg2OSwgMHg3YSwgMHg2NSwgMHg0ZCwgMHg2ZiwKKwkweDY0LCAweDY1LCAweDNhLCAweDA1LCAweDUzLCAweDUwLCAweDQ1LCAweDQ1LCAweDQ0LCAweDUyLCAweDBiLCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZkLAorCTB4NjksIDB4N2EsIDB4NjUsIDB4NDYsIDB4NmYsIDB4NzIsIDB4MTIsIDB4MWQsIDB4MGEsIDB4MGEsIDB4NjcsIDB4NmYsIDB4NWYsIDB4NzAsIDB4NjEsIDB4NjMsCisJMHg2YiwgMHg2MSwgMHg2NywgMHg2NSwgMHgxOCwgMHgwYiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwOSwgMHg2NywgMHg2ZiwgMHg1MCwgMHg2MSwKKwkweDYzLCAweDZiLCAweDYxLCAweDY3LCAweDY1LCAweDEyLCAweDM1LCAweDBhLCAweDEzLCAweDYzLCAweDYzLCAweDVmLCAweDY3LCAweDY1LCAweDZlLCAweDY1LAorCTB4NzIsIDB4NjksIDB4NjMsIDB4NWYsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjksIDB4NjMsIDB4NjUsIDB4NzMsIDB4MTgsIDB4MTAsIDB4MjAsIDB4MDEsCisJMHgyOCwgMHgwOCwgMHgzYSwgMHgwNSwgMHg2NiwgMHg2MSwgMHg2YywgMHg3MywgMHg2NSwgMHg1MiwgMHgxMSwgMHg2MywgMHg2MywgMHg0NywgMHg2NSwgMHg2ZSwKKwkweDY1LCAweDcyLCAweDY5LCAweDYzLCAweDUzLCAweDY1LCAweDcyLCAweDc2LCAweDY5LCAweDYzLCAweDY1LCAweDczLCAweDEyLCAweDM5LCAweDBhLCAweDE1LAorCTB4NmEsIDB4NjEsIDB4NzYsIDB4NjEsIDB4NWYsIDB4NjcsIDB4NjUsIDB4NmUsIDB4NjUsIDB4NzIsIDB4NjksIDB4NjMsIDB4NWYsIDB4NzMsIDB4NjUsIDB4NzIsCisJMHg3NiwgMHg2OSwgMHg2MywgMHg2NSwgMHg3MywgMHgxOCwgMHgxMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHgzYSwgMHgwNSwgMHg2NiwgMHg2MSwgMHg2YywKKwkweDczLCAweDY1LCAweDUyLCAweDEzLCAweDZhLCAweDYxLCAweDc2LCAweDYxLCAweDQ3LCAweDY1LCAweDZlLCAweDY1LCAweDcyLCAweDY5LCAweDYzLCAweDUzLAorCTB4NjUsIDB4NzIsIDB4NzYsIDB4NjksIDB4NjMsIDB4NjUsIDB4NzMsIDB4MTIsIDB4MzUsIDB4MGEsIDB4MTMsIDB4NzAsIDB4NzksIDB4NWYsIDB4NjcsIDB4NjUsCisJMHg2ZSwgMHg2NSwgMHg3MiwgMHg2OSwgMHg2MywgMHg1ZiwgMHg3MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2OSwgMHg2MywgMHg2NSwgMHg3MywgMHgxOCwgMHgxMiwKKwkweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLCAweDY1LCAweDUyLCAweDExLCAweDcwLCAweDc5LCAweDQ3LAorCTB4NjUsIDB4NmUsIDB4NjUsIDB4NzIsIDB4NjksIDB4NjMsIDB4NTMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjksIDB4NjMsIDB4NjUsIDB4NzMsIDB4MTIsIDB4MjUsCisJMHgwYSwgMHgwYSwgMHg2NCwgMHg2NSwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2MywgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgxOCwgMHgxNywgMHgyMCwgMHgwMSwKKwkweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLCAweDY1LCAweDUyLCAweDBhLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LAorCTB4NjMsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MTIsIDB4MmUsIDB4MGEsIDB4MTAsIDB4NjMsIDB4NjMsIDB4NWYsIDB4NjUsIDB4NmUsIDB4NjEsIDB4NjIsCisJMHg2YywgMHg2NSwgMHg1ZiwgMHg2MSwgMHg3MiwgMHg2NSwgMHg2ZSwgMHg2MSwgMHg3MywgMHgxOCwgMHgxZiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHgzYSwKKwkweDA0LCAweDc0LCAweDcyLCAweDc1LCAweDY1LCAweDUyLCAweDBlLCAweDYzLCAweDYzLCAweDQ1LCAweDZlLCAweDYxLCAweDYyLCAweDZjLCAweDY1LCAweDQxLAorCTB4NzIsIDB4NjUsIDB4NmUsIDB4NjEsIDB4NzMsIDB4MTIsIDB4MmEsIDB4MGEsIDB4MTEsIDB4NmYsIDB4NjIsIDB4NmEsIDB4NjMsIDB4NWYsIDB4NjMsIDB4NmMsCisJMHg2MSwgMHg3MywgMHg3MywgMHg1ZiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2NiwgMHg2OSwgMHg3OCwgMHgxOCwgMHgyNCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwKKwkweDUyLCAweDBmLCAweDZmLCAweDYyLCAweDZhLCAweDYzLCAweDQzLCAweDZjLCAweDYxLCAweDczLCAweDczLCAweDUwLCAweDcyLCAweDY1LCAweDY2LCAweDY5LAorCTB4NzgsIDB4MTIsIDB4MjksIDB4MGEsIDB4MTAsIDB4NjMsIDB4NzMsIDB4NjgsIDB4NjEsIDB4NzIsIDB4NzAsIDB4NWYsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsCisJMHg3MywgMHg3MCwgMHg2MSwgMHg2MywgMHg2NSwgMHgxOCwgMHgyNSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwZiwgMHg2MywgMHg3MywgMHg2OCwKKwkweDYxLCAweDcyLCAweDcwLCAweDRlLCAweDYxLCAweDZkLCAweDY1LCAweDczLCAweDcwLCAweDYxLCAweDYzLCAweDY1LCAweDEyLCAweDIxLCAweDBhLCAweDBjLAorCTB4NzMsIDB4NzcsIDB4NjksIDB4NjYsIDB4NzQsIDB4NWYsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NjYsIDB4NjksIDB4NzgsIDB4MTgsIDB4MjcsIDB4MjAsIDB4MDEsCisJMHgyOCwgMHgwOSwgMHg1MiwgMHgwYiwgMHg3MywgMHg3NywgMHg2OSwgMHg2NiwgMHg3NCwgMHg1MCwgMHg3MiwgMHg2NSwgMHg2NiwgMHg2OSwgMHg3OCwgMHgxMiwKKwkweDI4LCAweDBhLCAweDEwLCAweDcwLCAweDY4LCAweDcwLCAweDVmLCAweDYzLCAweDZjLCAweDYxLCAweDczLCAweDczLCAweDVmLCAweDcwLCAweDcyLCAweDY1LAorCTB4NjYsIDB4NjksIDB4NzgsIDB4MTgsIDB4MjgsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MGUsIDB4NzAsIDB4NjgsIDB4NzAsIDB4NDMsIDB4NmMsCisJMHg2MSwgMHg3MywgMHg3MywgMHg1MCwgMHg3MiwgMHg2NSwgMHg2NiwgMHg2OSwgMHg3OCwgMHgxMiwgMHgyMywgMHgwYSwgMHgwZCwgMHg3MCwgMHg2OCwgMHg3MCwKKwkweDVmLCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDczLCAweDcwLCAweDYxLCAweDYzLCAweDY1LCAweDE4LCAweDI5LCAweDIwLCAweDAxLCAweDI4LCAweDA5LAorCTB4NTIsIDB4MGMsIDB4NzAsIDB4NjgsIDB4NzAsIDB4NGUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4NzMsIDB4NzAsIDB4NjEsIDB4NjMsIDB4NjUsIDB4MTIsIDB4MzQsCisJMHgwYSwgMHgxNiwgMHg3MCwgMHg2OCwgMHg3MCwgMHg1ZiwgMHg2ZCwgMHg2NSwgMHg3NCwgMHg2MSwgMHg2NCwgMHg2MSwgMHg3NCwgMHg2MSwgMHg1ZiwgMHg2ZSwKKwkweDYxLCAweDZkLCAweDY1LCAweDczLCAweDcwLCAweDYxLCAweDYzLCAweDY1LCAweDE4LCAweDJjLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDE0LAorCTB4NzAsIDB4NjgsIDB4NzAsIDB4NGQsIDB4NjUsIDB4NzQsIDB4NjEsIDB4NjQsIDB4NjEsIDB4NzQsIDB4NjEsIDB4NGUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4NzMsCisJMHg3MCwgMHg2MSwgMHg2MywgMHg2NSwgMHgxMiwgMHgyMSwgMHgwYSwgMHgwYywgMHg3MiwgMHg3NSwgMHg2MiwgMHg3OSwgMHg1ZiwgMHg3MCwgMHg2MSwgMHg2MywKKwkweDZiLCAweDYxLCAweDY3LCAweDY1LCAweDE4LCAweDJkLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDBiLCAweDcyLCAweDc1LCAweDYyLCAweDc5LAorCTB4NTAsIDB4NjEsIDB4NjMsIDB4NmIsIDB4NjEsIDB4NjcsIDB4NjUsIDB4MTIsIDB4MzcsIDB4MGEsIDB4MDgsIDB4NjYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsCisJMHg3MiwgMHg2NSwgMHg3MywgMHgxOCwgMHgzMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwYiwgMHgzMiwgMHgxYiwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywKKwkweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ2LCAweDY1LCAweDYxLCAweDc0LAorCTB4NzUsIDB4NzIsIDB4NjUsIDB4NTMsIDB4NjUsIDB4NzQsIDB4NTIsIDB4MDgsIDB4NjYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NzMsCisJMHgxMiwgMHg1OCwgMHgwYSwgMHgxNCwgMHg3NSwgMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwKKwkweDY0LCAweDVmLCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDE4LCAweGU3LCAweDA3LCAweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLAorCTB4MjQsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsCisJMHg2NiwgMHgyZSwgMHg1NSwgMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0ZiwKKwkweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDUyLCAweDEzLCAweDc1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLAorCTB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MjIsIDB4M2EsIDB4MGEsIDB4MGMsIDB4NGYsIDB4NzAsCisJMHg3NCwgMHg2OSwgMHg2ZCwgMHg2OSwgMHg3YSwgMHg2NSwgMHg0ZCwgMHg2ZiwgMHg2NCwgMHg2NSwgMHgxMiwgMHgwOSwgMHgwYSwgMHgwNSwgMHg1MywgMHg1MCwKKwkweDQ1LCAweDQ1LCAweDQ0LCAweDEwLCAweDAxLCAweDEyLCAweDBkLCAweDBhLCAweDA5LCAweDQzLCAweDRmLCAweDQ0LCAweDQ1LCAweDVmLCAweDUzLCAweDQ5LAorCTB4NWEsIDB4NDUsIDB4MTAsIDB4MDIsIDB4MTIsIDB4MTAsIDB4MGEsIDB4MGMsIDB4NGMsIDB4NDksIDB4NTQsIDB4NDUsIDB4NWYsIDB4NTIsIDB4NTUsIDB4NGUsCisJMHg1NCwgMHg0OSwgMHg0ZCwgMHg0NSwgMHgxMCwgMHgwMywgMHgyYSwgMHgwOSwgMHgwOCwgMHhlOCwgMHgwNywgMHgxMCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwKKwkweDAyLCAweDRhLCAweDA0LCAweDA4LCAweDJhLCAweDEwLCAweDJiLCAweDRhLCAweDA0LCAweDA4LCAweDI2LCAweDEwLCAweDI3LCAweDIyLCAweGY0LCAweDAzLAorCTB4MGEsIDB4MGUsIDB4NGQsIDB4NjUsIDB4NzMsIDB4NzMsIDB4NjEsIDB4NjcsIDB4NjUsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsCisJMHgxMiwgMHgzYywgMHgwYSwgMHgxNywgMHg2ZCwgMHg2NSwgMHg3MywgMHg3MywgMHg2MSwgMHg2NywgMHg2NSwgMHg1ZiwgMHg3MywgMHg2NSwgMHg3NCwgMHg1ZiwKKwkweDc3LCAweDY5LCAweDcyLCAweDY1LCAweDVmLCAweDY2LCAweDZmLCAweDcyLCAweDZkLCAweDYxLCAweDc0LCAweDE4LCAweDAxLCAweDIwLCAweDAxLCAweDI4LAorCTB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsIDB4MTQsIDB4NmQsIDB4NjUsIDB4NzMsIDB4NzMsIDB4NjEsIDB4NjcsCisJMHg2NSwgMHg1MywgMHg2NSwgMHg3NCwgMHg1NywgMHg2OSwgMHg3MiwgMHg2NSwgMHg0NiwgMHg2ZiwgMHg3MiwgMHg2ZCwgMHg2MSwgMHg3NCwgMHgxMiwgMHg0YywKKwkweDBhLCAweDFmLCAweDZlLCAweDZmLCAweDVmLCAweDczLCAweDc0LCAweDYxLCAweDZlLCAweDY0LCAweDYxLCAweDcyLCAweDY0LCAweDVmLCAweDY0LCAweDY1LAorCTB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NWYsIDB4NjEsIDB4NjMsIDB4NjMsIDB4NjUsIDB4NzMsIDB4NzMsIDB4NmYsCisJMHg3MiwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHgzYSwgMHgwNSwgMHg2NiwgMHg2MSwgMHg2YywgMHg3MywgMHg2NSwgMHg1MiwgMHgxYywKKwkweDZlLCAweDZmLCAweDUzLCAweDc0LCAweDYxLCAweDZlLCAweDY0LCAweDYxLCAweDcyLCAweDY0LCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LAorCTB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NDEsIDB4NjMsIDB4NjMsIDB4NjUsIDB4NzMsIDB4NzMsIDB4NmYsIDB4NzIsIDB4MTIsIDB4MjUsIDB4MGEsIDB4MGEsCisJMHg2NCwgMHg2NSwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2MywgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgxOCwgMHgwMywgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwKKwkweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLCAweDY1LCAweDUyLCAweDBhLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLAorCTB4NzQsIDB4NjUsIDB4NjQsIDB4MTIsIDB4MWIsIDB4MGEsIDB4MDksIDB4NmQsIDB4NjEsIDB4NzAsIDB4NWYsIDB4NjUsIDB4NmUsIDB4NzQsIDB4NzIsIDB4NzksCisJMHgxOCwgMHgwNywgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHg1MiwgMHgwOCwgMHg2ZCwgMHg2MSwgMHg3MCwgMHg0NSwgMHg2ZSwgMHg3NCwgMHg3MiwgMHg3OSwKKwkweDEyLCAweDU2LCAweDBhLCAweDI2LCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDVmLCAweDZjLAorCTB4NjUsIDB4NjcsIDB4NjEsIDB4NjMsIDB4NzksIDB4NWYsIDB4NmEsIDB4NzMsIDB4NmYsIDB4NmUsIDB4NWYsIDB4NjYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsCisJMHg1ZiwgMHg2MywgMHg2ZiwgMHg2ZSwgMHg2NiwgMHg2YywgMHg2OSwgMHg2MywgMHg3NCwgMHg3MywgMHgxOCwgMHgwYiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwKKwkweDQyLCAweDAyLCAweDE4LCAweDAxLCAweDUyLCAweDIyLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLCAweDc0LCAweDY1LCAweDY0LAorCTB4NGMsIDB4NjUsIDB4NjcsIDB4NjEsIDB4NjMsIDB4NzksIDB4NGEsIDB4NzMsIDB4NmYsIDB4NmUsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4NDMsCisJMHg2ZiwgMHg2ZSwgMHg2NiwgMHg2YywgMHg2OSwgMHg2MywgMHg3NCwgMHg3MywgMHgxMiwgMHgzNywgMHgwYSwgMHgwOCwgMHg2NiwgMHg2NSwgMHg2MSwgMHg3NCwKKwkweDc1LCAweDcyLCAweDY1LCAweDczLCAweDE4LCAweDBjLCAweDIwLCAweDAxLCAweDI4LCAweDBiLCAweDMyLCAweDFiLCAweDJlLCAweDY3LCAweDZmLCAweDZmLAorCTB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjUsIDB4NjEsCisJMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg1MywgMHg2NSwgMHg3NCwgMHg1MiwgMHgwOCwgMHg2NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwKKwkweDczLCAweDEyLCAweDU4LCAweDBhLCAweDE0LCAweDc1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LAorCTB4NjUsIDB4NjQsIDB4NWYsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MTgsIDB4ZTcsIDB4MDcsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsCisJMHgzMiwgMHgyNCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwKKwkweDc1LCAweDY2LCAweDJlLCAweDU1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LAorCTB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTIsIDB4MTMsIDB4NzUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsCisJMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgyYSwgMHgwOSwgMHgwOCwgMHhlOCwgMHgwNywKKwkweDEwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDAyLCAweDRhLCAweDA0LCAweDA4LCAweDA0LCAweDEwLCAweDA1LCAweDRhLCAweDA0LCAweDA4LCAweDA1LAorCTB4MTAsIDB4MDYsIDB4NGEsIDB4MDQsIDB4MDgsIDB4MDYsIDB4MTAsIDB4MDcsIDB4NGEsIDB4MDQsIDB4MDgsIDB4MDgsIDB4MTAsIDB4MDksIDB4NGEsIDB4MDQsCisJMHgwOCwgMHgwOSwgMHgxMCwgMHgwYSwgMHgyMiwgMHhhZCwgMHgwYSwgMHgwYSwgMHgwYywgMHg0NiwgMHg2OSwgMHg2NSwgMHg2YywgMHg2NCwgMHg0ZiwgMHg3MCwKKwkweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDEyLCAweDQxLCAweDBhLCAweDA1LCAweDYzLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDE4LCAweDAxLAorCTB4MjAsIDB4MDEsIDB4MjgsIDB4MGUsIDB4MzIsIDB4MjMsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsCisJMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NiwgMHg2OSwgMHg2NSwgMHg2YywgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwKKwkweDZmLCAweDZlLCAweDczLCAweDJlLCAweDQzLCAweDU0LCAweDc5LCAweDcwLCAweDY1LCAweDNhLCAweDA2LCAweDUzLCAweDU0LCAweDUyLCAweDQ5LCAweDRlLAorCTB4NDcsIDB4NTIsIDB4MDUsIDB4NjMsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MTIsIDB4MTYsIDB4MGEsIDB4MDYsIDB4NzAsIDB4NjEsIDB4NjMsIDB4NmIsCisJMHg2NSwgMHg2NCwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHg1MiwgMHgwNiwgMHg3MCwgMHg2MSwgMHg2MywgMHg2YiwgMHg2NSwgMHg2NCwKKwkweDEyLCAweDQ3LCAweDBhLCAweDA2LCAweDZhLCAweDczLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDE4LCAweDA2LCAweDIwLCAweDAxLCAweDI4LCAweDBlLAorCTB4MzIsIDB4MjQsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsCisJMHg3NSwgMHg2NiwgMHgyZSwgMHg0NiwgMHg2OSwgMHg2NSwgMHg2YywgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgyZSwKKwkweDRhLCAweDUzLCAweDU0LCAweDc5LCAweDcwLCAweDY1LCAweDNhLCAweDA5LCAweDRhLCAweDUzLCAweDVmLCAweDRlLCAweDRmLCAweDUyLCAweDRkLCAweDQxLAorCTB4NGMsIDB4NTIsIDB4MDYsIDB4NmEsIDB4NzMsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MTIsIDB4MTksIDB4MGEsIDB4MDQsIDB4NmMsIDB4NjEsIDB4N2EsCisJMHg3OSwgMHgxOCwgMHgwNSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHgzYSwgMHgwNSwgMHg2NiwgMHg2MSwgMHg2YywgMHg3MywgMHg2NSwgMHg1MiwgMHgwNCwKKwkweDZjLCAweDYxLCAweDdhLCAweDc5LCAweDEyLCAweDJlLCAweDBhLCAweDBmLCAweDc1LCAweDZlLCAweDc2LCAweDY1LCAweDcyLCAweDY5LCAweDY2LCAweDY5LAorCTB4NjUsIDB4NjQsIDB4NWYsIDB4NmMsIDB4NjEsIDB4N2EsIDB4NzksIDB4MTgsIDB4MGYsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsCisJMHg2MSwgMHg2YywgMHg3MywgMHg2NSwgMHg1MiwgMHgwZSwgMHg3NSwgMHg2ZSwgMHg3NiwgMHg2NSwgMHg3MiwgMHg2OSwgMHg2NiwgMHg2OSwgMHg2NSwgMHg2NCwKKwkweDRjLCAweDYxLCAweDdhLCAweDc5LCAweDEyLCAweDI1LCAweDBhLCAweDBhLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLCAweDc0LAorCTB4NjUsIDB4NjQsIDB4MTgsIDB4MDMsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsCisJMHgwYSwgMHg2NCwgMHg2NSwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2MywgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgxMiwgMHgxOSwgMHgwYSwgMHgwNCwgMHg3NywKKwkweDY1LCAweDYxLCAweDZiLCAweDE4LCAweDBhLCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLCAweDY1LAorCTB4NTIsIDB4MDQsIDB4NzcsIDB4NjUsIDB4NjEsIDB4NmIsIDB4MTIsIDB4MjgsIDB4MGEsIDB4MGMsIDB4NjQsIDB4NjUsIDB4NjIsIDB4NzUsIDB4NjcsIDB4NWYsCisJMHg3MiwgMHg2NSwgMHg2NCwgMHg2MSwgMHg2MywgMHg3NCwgMHgxOCwgMHgxMCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHgzYSwgMHgwNSwgMHg2NiwgMHg2MSwKKwkweDZjLCAweDczLCAweDY1LCAweDUyLCAweDBiLCAweDY0LCAweDY1LCAweDYyLCAweDc1LCAweDY3LCAweDUyLCAweDY1LCAweDY0LCAweDYxLCAweDYzLCAweDc0LAorCTB4MTIsIDB4NGIsIDB4MGEsIDB4MDksIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NmUsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MTgsIDB4MTEsIDB4MjAsCisJMHgwMSwgMHgyOCwgMHgwZSwgMHgzMiwgMHgyZCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwKKwkweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ2LCAweDY5LCAweDY1LCAweDZjLCAweDY0LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLAorCTB4NmUsIDB4NzMsIDB4MmUsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NmUsIDB4NzQsIDB4NjksCisJMHg2ZiwgMHg2ZSwgMHg1MiwgMHgwOSwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxMiwgMHg0OCwgMHgwYSwKKwkweDA3LCAweDc0LCAweDYxLCAweDcyLCAweDY3LCAweDY1LCAweDc0LCAweDczLCAweDE4LCAweDEzLCAweDIwLCAweDAzLCAweDI4LCAweDBlLCAweDMyLCAweDJlLAorCTB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsCisJMHgyZSwgMHg0NiwgMHg2OSwgMHg2NSwgMHg2YywgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgyZSwgMHg0ZiwgMHg3MCwKKwkweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDU0LCAweDYxLCAweDcyLCAweDY3LCAweDY1LCAweDc0LCAweDU0LCAweDc5LCAweDcwLCAweDY1LCAweDUyLCAweDA3LAorCTB4NzQsIDB4NjEsIDB4NzIsIDB4NjcsIDB4NjUsIDB4NzQsIDB4NzMsIDB4MTIsIDB4NTcsIDB4MGEsIDB4MTAsIDB4NjUsIDB4NjQsIDB4NjksIDB4NzQsIDB4NjksCisJMHg2ZiwgMHg2ZSwgMHg1ZiwgMHg2NCwgMHg2NSwgMHg2NiwgMHg2MSwgMHg3NSwgMHg2YywgMHg3NCwgMHg3MywgMHgxOCwgMHgxNCwgMHgyMCwgMHgwMywgMHgyOCwKKwkweDBiLCAweDMyLCAweDJjLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLAorCTB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsCisJMHgyZSwgMHg0NSwgMHg2NCwgMHg2OSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg0NCwgMHg2NSwgMHg2NiwgMHg2MSwgMHg3NSwgMHg2YywgMHg3NCwgMHg1MiwKKwkweDBmLCAweDY1LCAweDY0LCAweDY5LCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDQ0LCAweDY1LCAweDY2LCAweDYxLCAweDc1LCAweDZjLCAweDc0LCAweDczLAorCTB4MTIsIDB4MzcsIDB4MGEsIDB4MDgsIDB4NjYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NzMsIDB4MTgsIDB4MTUsIDB4MjAsIDB4MDEsCisJMHgyOCwgMHgwYiwgMHgzMiwgMHgxYiwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwKKwkweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ2LCAweDY1LCAweDYxLCAweDc0LCAweDc1LCAweDcyLCAweDY1LCAweDUzLCAweDY1LCAweDc0LCAweDUyLAorCTB4MDgsIDB4NjYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NzMsIDB4MTIsIDB4NTgsIDB4MGEsIDB4MTQsIDB4NzUsIDB4NmUsIDB4NjksCisJMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg1ZiwgMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwKKwkweDZlLCAweDE4LCAweGU3LCAweDA3LCAweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLCAweDI0LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLAorCTB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NTUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsCisJMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MiwgMHgxMywKKwkweDc1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDRmLCAweDcwLCAweDc0LAorCTB4NjksIDB4NmYsIDB4NmUsIDB4MWEsIDB4NWEsIDB4MGEsIDB4MGUsIDB4NDUsIDB4NjQsIDB4NjksIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NDQsIDB4NjUsCisJMHg2NiwgMHg2MSwgMHg3NSwgMHg2YywgMHg3NCwgMHgxMiwgMHgzMiwgMHgwYSwgMHgwNywgMHg2NSwgMHg2NCwgMHg2OSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwKKwkweDE4LCAweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDBlLCAweDMyLCAweDE4LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLAorCTB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDUsIDB4NjQsIDB4NjksIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsCisJMHg1MiwgMHgwNywgMHg2NSwgMHg2NCwgMHg2OSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxMiwgMHgxNCwgMHgwYSwgMHgwNSwgMHg3NiwgMHg2MSwgMHg2YywKKwkweDc1LCAweDY1LCAweDE4LCAweDAyLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDA1LCAweDc2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDIyLAorCTB4MmYsIDB4MGEsIDB4MDUsIDB4NDMsIDB4NTQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MTIsIDB4MGEsIDB4MGEsIDB4MDYsIDB4NTMsIDB4NTQsIDB4NTIsIDB4NDksCisJMHg0ZSwgMHg0NywgMHgxMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgwYSwgMHgwNCwgMHg0MywgMHg0ZiwgMHg1MiwgMHg0NCwgMHgxMCwgMHgwMSwgMHgxMiwgMHgxMCwKKwkweDBhLCAweDBjLCAweDUzLCAweDU0LCAweDUyLCAweDQ5LCAweDRlLCAweDQ3LCAweDVmLCAweDUwLCAweDQ5LCAweDQ1LCAweDQzLCAweDQ1LCAweDEwLCAweDAyLAorCTB4MjIsIDB4MzUsIDB4MGEsIDB4MDYsIDB4NGEsIDB4NTMsIDB4NTQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MTIsIDB4MGQsIDB4MGEsIDB4MDksIDB4NGEsIDB4NTMsCisJMHg1ZiwgMHg0ZSwgMHg0ZiwgMHg1MiwgMHg0ZCwgMHg0MSwgMHg0YywgMHgxMCwgMHgwMCwgMHgxMiwgMHgwZCwgMHgwYSwgMHgwOSwgMHg0YSwgMHg1MywgMHg1ZiwKKwkweDUzLCAweDU0LCAweDUyLCAweDQ5LCAweDRlLCAweDQ3LCAweDEwLCAweDAxLCAweDEyLCAweDBkLCAweDBhLCAweDA5LCAweDRhLCAweDUzLCAweDVmLCAweDRlLAorCTB4NTUsIDB4NGQsIDB4NDIsIDB4NDUsIDB4NTIsIDB4MTAsIDB4MDIsIDB4MjIsIDB4NTUsIDB4MGEsIDB4MGYsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsCisJMHg2ZSwgMHg1MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxMiwgMHgxNSwgMHgwYSwgMHgxMSwgMHg1MiwgMHg0NSwKKwkweDU0LCAweDQ1LCAweDRlLCAweDU0LCAweDQ5LCAweDRmLCAweDRlLCAweDVmLCAweDU1LCAweDRlLCAweDRiLCAweDRlLCAweDRmLCAweDU3LCAweDRlLCAweDEwLAorCTB4MDAsIDB4MTIsIDB4MTUsIDB4MGEsIDB4MTEsIDB4NTIsIDB4NDUsIDB4NTQsIDB4NDUsIDB4NGUsIDB4NTQsIDB4NDksIDB4NGYsIDB4NGUsIDB4NWYsIDB4NTIsCisJMHg1NSwgMHg0ZSwgMHg1NCwgMHg0OSwgMHg0ZCwgMHg0NSwgMHgxMCwgMHgwMSwgMHgxMiwgMHgxNCwgMHgwYSwgMHgxMCwgMHg1MiwgMHg0NSwgMHg1NCwgMHg0NSwKKwkweDRlLCAweDU0LCAweDQ5LCAweDRmLCAweDRlLCAweDVmLCAweDUzLCAweDRmLCAweDU1LCAweDUyLCAweDQzLCAweDQ1LCAweDEwLCAweDAyLCAweDIyLCAweDhjLAorCTB4MDIsIDB4MGEsIDB4MTAsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTQsIDB4NjEsIDB4NzIsIDB4NjcsIDB4NjUsIDB4NzQsIDB4NTQsCisJMHg3OSwgMHg3MCwgMHg2NSwgMHgxMiwgMHgxNywgMHgwYSwgMHgxMywgMHg1NCwgMHg0MSwgMHg1MiwgMHg0NywgMHg0NSwgMHg1NCwgMHg1ZiwgMHg1NCwgMHg1OSwKKwkweDUwLCAweDQ1LCAweDVmLCAweDU1LCAweDRlLCAweDRiLCAweDRlLCAweDRmLCAweDU3LCAweDRlLCAweDEwLCAweDAwLCAweDEyLCAweDE0LCAweDBhLCAweDEwLAorCTB4NTQsIDB4NDEsIDB4NTIsIDB4NDcsIDB4NDUsIDB4NTQsIDB4NWYsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsIDB4NDYsIDB4NDksIDB4NGMsIDB4NDUsCisJMHgxMCwgMHgwMSwgMHgxMiwgMHgxZiwgMHgwYSwgMHgxYiwgMHg1NCwgMHg0MSwgMHg1MiwgMHg0NywgMHg0NSwgMHg1NCwgMHg1ZiwgMHg1NCwgMHg1OSwgMHg1MCwKKwkweDQ1LCAweDVmLCAweDQ1LCAweDU4LCAweDU0LCAweDQ1LCAweDRlLCAweDUzLCAweDQ5LCAweDRmLCAweDRlLCAweDVmLCAweDUyLCAweDQxLCAweDRlLCAweDQ3LAorCTB4NDUsIDB4MTAsIDB4MDIsIDB4MTIsIDB4MTcsIDB4MGEsIDB4MTMsIDB4NTQsIDB4NDEsIDB4NTIsIDB4NDcsIDB4NDUsIDB4NTQsIDB4NWYsIDB4NTQsIDB4NTksCisJMHg1MCwgMHg0NSwgMHg1ZiwgMHg0ZCwgMHg0NSwgMHg1MywgMHg1MywgMHg0MSwgMHg0NywgMHg0NSwgMHgxMCwgMHgwMywgMHgxMiwgMHgxNSwgMHgwYSwgMHgxMSwKKwkweDU0LCAweDQxLCAweDUyLCAweDQ3LCAweDQ1LCAweDU0LCAweDVmLCAweDU0LCAweDU5LCAweDUwLCAweDQ1LCAweDVmLCAweDQ2LCAweDQ5LCAweDQ1LCAweDRjLAorCTB4NDQsIDB4MTAsIDB4MDQsIDB4MTIsIDB4MTUsIDB4MGEsIDB4MTEsIDB4NTQsIDB4NDEsIDB4NTIsIDB4NDcsIDB4NDUsIDB4NTQsIDB4NWYsIDB4NTQsIDB4NTksCisJMHg1MCwgMHg0NSwgMHg1ZiwgMHg0ZiwgMHg0ZSwgMHg0NSwgMHg0ZiwgMHg0NiwgMHgxMCwgMHgwNSwgMHgxMiwgMHgxNCwgMHgwYSwgMHgxMCwgMHg1NCwgMHg0MSwKKwkweDUyLCAweDQ3LCAweDQ1LCAweDU0LCAweDVmLCAweDU0LCAweDU5LCAweDUwLCAweDQ1LCAweDVmLCAweDQ1LCAweDRlLCAweDU1LCAweDRkLCAweDEwLCAweDA2LAorCTB4MTIsIDB4MWEsIDB4MGEsIDB4MTYsIDB4NTQsIDB4NDEsIDB4NTIsIDB4NDcsIDB4NDUsIDB4NTQsIDB4NWYsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsCisJMHg0NSwgMHg0ZSwgMHg1NSwgMHg0ZCwgMHg1ZiwgMHg0NSwgMHg0ZSwgMHg1NCwgMHg1MiwgMHg1OSwgMHgxMCwgMHgwNywgMHgxMiwgMHgxNywgMHgwYSwgMHgxMywKKwkweDU0LCAweDQxLCAweDUyLCAweDQ3LCAweDQ1LCAweDU0LCAweDVmLCAweDU0LCAweDU5LCAweDUwLCAweDQ1LCAweDVmLCAweDUzLCAweDQ1LCAweDUyLCAweDU2LAorCTB4NDksIDB4NDMsIDB4NDUsIDB4MTAsIDB4MDgsIDB4MTIsIDB4MTYsIDB4MGEsIDB4MTIsIDB4NTQsIDB4NDEsIDB4NTIsIDB4NDcsIDB4NDUsIDB4NTQsIDB4NWYsCisJMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwgMHg1ZiwgMHg0ZCwgMHg0NSwgMHg1NCwgMHg0OCwgMHg0ZiwgMHg0NCwgMHgxMCwgMHgwOSwgMHgyYSwgMHgwOSwgMHgwOCwKKwkweGU4LCAweDA3LCAweDEwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDAyLCAweDRhLCAweDA0LCAweDA4LCAweDA0LCAweDEwLCAweDA1LCAweDRhLCAweDA0LAorCTB4MDgsIDB4MTIsIDB4MTAsIDB4MTMsIDB4MjIsIDB4YWMsIDB4MDEsIDB4MGEsIDB4MGMsIDB4NGYsIDB4NmUsIDB4NjUsIDB4NmYsIDB4NjYsIDB4NGYsIDB4NzAsCisJMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxMiwgMHgzNywgMHgwYSwgMHgwOCwgMHg2NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwKKwkweDczLCAweDE4LCAweDAxLCAweDIwLCAweDAxLCAweDI4LCAweDBiLCAweDMyLCAweDFiLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LAorCTB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsCisJMHg2NSwgMHg1MywgMHg2NSwgMHg3NCwgMHg1MiwgMHgwOCwgMHg2NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg3MywgMHgxMiwgMHg1OCwKIAkweDBhLCAweDE0LCAweDc1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDVmLAogCTB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MTgsIDB4ZTcsIDB4MDcsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MjQsIDB4MmUsCiAJMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwKIAkweDU1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDRmLCAweDcwLCAweDc0LAogCTB4NjksIDB4NmYsIDB4NmUsIDB4NTIsIDB4MTMsIDB4NzUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsCiAJMHg2NSwgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgyYSwgMHgwOSwgMHgwOCwgMHhlOCwgMHgwNywgMHgxMCwgMHg4MCwgMHg4MCwKLQkweDgwLCAweDgwLCAweDAyLCAweDIyLCAweGMxLCAweDA2LCAweDBhLCAweDE0LCAweDQ2LCAweDY5LCAweDY1LCAweDZjLCAweDY0LCAweDQ0LCAweDY1LCAweDczLAotCTB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4MTIsIDB4MTIsIDB4MGEsIDB4MDQsCi0JMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwNCwgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwKLQkweDEyLCAweDE2LCAweDBhLCAweDA2LCAweDZlLCAweDc1LCAweDZkLCAweDYyLCAweDY1LCAweDcyLCAweDE4LCAweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDA1LAotCTB4NTIsIDB4MDYsIDB4NmUsIDB4NzUsIDB4NmQsIDB4NjIsIDB4NjUsIDB4NzIsIDB4MTIsIDB4NDEsIDB4MGEsIDB4MDUsIDB4NmMsIDB4NjEsIDB4NjIsIDB4NjUsCi0JMHg2YywgMHgxOCwgMHgwNCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwZSwgMHgzMiwgMHgyYiwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwKLQkweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ2LCAweDY5LCAweDY1LCAweDZjLCAweDY0LCAweDQ0LAotCTB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4MmUsIDB4NGMsCi0JMHg2MSwgMHg2MiwgMHg2NSwgMHg2YywgMHg1MiwgMHgwNSwgMHg2YywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2YywgMHgxMiwgMHgzZSwgMHgwYSwgMHgwNCwgMHg3NCwKLQkweDc5LCAweDcwLCAweDY1LCAweDE4LCAweDA1LCAweDIwLCAweDAxLCAweDI4LCAweDBlLCAweDMyLCAweDJhLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LAotCTB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsCi0JMHg2NCwgMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwKLQkweDJlLCAweDU0LCAweDc5LCAweDcwLCAweDY1LCAweDUyLCAweDA0LCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDEyLCAweDFiLCAweDBhLCAweDA5LCAweDc0LAotCTB4NzksIDB4NzAsIDB4NjUsIDB4NWYsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTgsIDB4MDYsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MDgsCi0JMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHg0ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxMiwgMHgxYSwgMHgwYSwgMHgwOCwgMHg2NSwgMHg3OCwgMHg3NCwgMHg2NSwKLQkweDZlLCAweDY0LCAweDY1LCAweDY1LCAweDE4LCAweDAyLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDA4LCAweDY1LCAweDc4LCAweDc0LCAweDY1LAotCTB4NmUsIDB4NjQsIDB4NjUsIDB4NjUsIDB4MTIsIDB4MjMsIDB4MGEsIDB4MGQsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjEsIDB4NzUsIDB4NmMsIDB4NzQsIDB4NWYsCi0JMHg3NiwgMHg2MSwgMHg2YywgMHg3NSwgMHg2NSwgMHgxOCwgMHgwNywgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwYywgMHg2NCwgMHg2NSwgMHg2NiwKLQkweDYxLCAweDc1LCAweDZjLCAweDc0LCAweDU2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDEyLCAweDFmLCAweDBhLCAweDBiLCAweDZmLCAweDZlLCAweDY1LAotCTB4NmYsIDB4NjYsIDB4NWYsIDB4NjksIDB4NmUsIDB4NjQsIDB4NjUsIDB4NzgsIDB4MTgsIDB4MDksIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDUsIDB4NTIsIDB4MGEsCi0JMHg2ZiwgMHg2ZSwgMHg2NSwgMHg2ZiwgMHg2NiwgMHg0OSwgMHg2ZSwgMHg2NCwgMHg2NSwgMHg3OCwgMHgxMiwgMHgxYiwgMHgwYSwgMHgwOSwgMHg2YSwgMHg3MywKLQkweDZmLCAweDZlLCAweDVmLCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDE4LCAweDBhLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDA4LCAweDZhLAotCTB4NzMsIDB4NmYsIDB4NmUsIDB4NGUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTIsIDB4MzcsIDB4MGEsIDB4MDcsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsCi0JMHg2ZSwgMHg3MywgMHgxOCwgMHgwOCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwYiwgMHgzMiwgMHgxZCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywKLQkweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ2LCAweDY5LCAweDY1LCAweDZjLCAweDY0LAotCTB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4NTIsIDB4MDcsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsCi0JMHgxMiwgMHgyNywgMHgwYSwgMHgwZiwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHgzMywgMHg1ZiwgMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwKLQkweDZlLCAweDYxLCAweDZjLCAweDE4LCAweDExLCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDUyLCAweDBlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLAotCTB4MzMsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NjEsIDB4NmMsIDB4MjIsIDB4YjYsIDB4MDIsIDB4MGEsIDB4MDQsIDB4NTQsIDB4NzksCi0JMHg3MCwgMHg2NSwgMHgxMiwgMHgwZiwgMHgwYSwgMHgwYiwgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwgMHg1ZiwgMHg0NCwgMHg0ZiwgMHg1NSwgMHg0MiwgMHg0YywKLQkweDQ1LCAweDEwLCAweDAxLCAweDEyLCAweDBlLCAweDBhLCAweDBhLCAweDU0LCAweDU5LCAweDUwLCAweDQ1LCAweDVmLCAweDQ2LCAweDRjLCAweDRmLCAweDQxLAotCTB4NTQsIDB4MTAsIDB4MDIsIDB4MTIsIDB4MGUsIDB4MGEsIDB4MGEsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsIDB4NDksIDB4NGUsIDB4NTQsIDB4MzYsCi0JMHgzNCwgMHgxMCwgMHgwMywgMHgxMiwgMHgwZiwgMHgwYSwgMHgwYiwgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwgMHg1ZiwgMHg1NSwgMHg0OSwgMHg0ZSwgMHg1NCwKLQkweDM2LCAweDM0LCAweDEwLCAweDA0LCAweDEyLCAweDBlLCAweDBhLCAweDBhLCAweDU0LCAweDU5LCAweDUwLCAweDQ1LCAweDVmLCAweDQ5LCAweDRlLCAweDU0LAotCTB4MzMsIDB4MzIsIDB4MTAsIDB4MDUsIDB4MTIsIDB4MTAsIDB4MGEsIDB4MGMsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsIDB4NDYsIDB4NDksIDB4NTgsCi0JMHg0NSwgMHg0NCwgMHgzNiwgMHgzNCwgMHgxMCwgMHgwNiwgMHgxMiwgMHgxMCwgMHgwYSwgMHgwYywgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwgMHg1ZiwgMHg0NiwKLQkweDQ5LCAweDU4LCAweDQ1LCAweDQ0LCAweDMzLCAweDMyLCAweDEwLCAweDA3LCAweDEyLCAweDBkLCAweDBhLCAweDA5LCAweDU0LCAweDU5LCAweDUwLCAweDQ1LAotCTB4NWYsIDB4NDIsIDB4NGYsIDB4NGYsIDB4NGMsIDB4MTAsIDB4MDgsIDB4MTIsIDB4MGYsIDB4MGEsIDB4MGIsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsCi0JMHg1MywgMHg1NCwgMHg1MiwgMHg0OSwgMHg0ZSwgMHg0NywgMHgxMCwgMHgwOSwgMHgxMiwgMHgwZSwgMHgwYSwgMHgwYSwgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwKLQkweDVmLCAweDQ3LCAweDUyLCAweDRmLCAweDU1LCAweDUwLCAweDEwLCAweDBhLCAweDEyLCAweDEwLCAweDBhLCAweDBjLCAweDU0LCAweDU5LCAweDUwLCAweDQ1LAotCTB4NWYsIDB4NGQsIDB4NDUsIDB4NTMsIDB4NTMsIDB4NDEsIDB4NDcsIDB4NDUsIDB4MTAsIDB4MGIsIDB4MTIsIDB4MGUsIDB4MGEsIDB4MGEsIDB4NTQsIDB4NTksCi0JMHg1MCwgMHg0NSwgMHg1ZiwgMHg0MiwgMHg1OSwgMHg1NCwgMHg0NSwgMHg1MywgMHgxMCwgMHgwYywgMHgxMiwgMHgwZiwgMHgwYSwgMHgwYiwgMHg1NCwgMHg1OSwKLQkweDUwLCAweDQ1LCAweDVmLCAweDU1LCAweDQ5LCAweDRlLCAweDU0LCAweDMzLCAweDMyLCAweDEwLCAweDBkLCAweDEyLCAweDBkLCAweDBhLCAweDA5LCAweDU0LAotCTB4NTksIDB4NTAsIDB4NDUsIDB4NWYsIDB4NDUsIDB4NGUsIDB4NTUsIDB4NGQsIDB4MTAsIDB4MGUsIDB4MTIsIDB4MTEsIDB4MGEsIDB4MGQsIDB4NTQsIDB4NTksCi0JMHg1MCwgMHg0NSwgMHg1ZiwgMHg1MywgMHg0NiwgMHg0OSwgMHg1OCwgMHg0NSwgMHg0NCwgMHgzMywgMHgzMiwgMHgxMCwgMHgwZiwgMHgxMiwgMHgxMSwgMHgwYSwKLQkweDBkLCAweDU0LCAweDU5LCAweDUwLCAweDQ1LCAweDVmLCAweDUzLCAweDQ2LCAweDQ5LCAweDU4LCAweDQ1LCAweDQ0LCAweDM2LCAweDM0LCAweDEwLCAweDEwLAotCTB4MTIsIDB4MGYsIDB4MGEsIDB4MGIsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDUsIDB4NWYsIDB4NTMsIDB4NDksIDB4NGUsIDB4NTQsIDB4MzMsIDB4MzIsIDB4MTAsCi0JMHgxMSwgMHgxMiwgMHgwZiwgMHgwYSwgMHgwYiwgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwgMHg1ZiwgMHg1MywgMHg0OSwgMHg0ZSwgMHg1NCwgMHgzNiwgMHgzNCwKLQkweDEwLCAweDEyLCAweDIyLCAweDQzLCAweDBhLCAweDA1LCAweDRjLCAweDYxLCAweDYyLCAweDY1LCAweDZjLCAweDEyLCAweDEyLCAweDBhLCAweDBlLCAweDRjLAotCTB4NDEsIDB4NDIsIDB4NDUsIDB4NGMsIDB4NWYsIDB4NGYsIDB4NTAsIDB4NTQsIDB4NDksIDB4NGYsIDB4NGUsIDB4NDEsIDB4NGMsIDB4MTAsIDB4MDEsIDB4MTIsCi0JMHgxMiwgMHgwYSwgMHgwZSwgMHg0YywgMHg0MSwgMHg0MiwgMHg0NSwgMHg0YywgMHg1ZiwgMHg1MiwgMHg0NSwgMHg1MSwgMHg1NSwgMHg0OSwgMHg1MiwgMHg0NSwKLQkweDQ0LCAweDEwLCAweDAyLCAweDEyLCAweDEyLCAweDBhLCAweDBlLCAweDRjLCAweDQxLCAweDQyLCAweDQ1LCAweDRjLCAweDVmLCAweDUyLCAweDQ1LCAweDUwLAotCTB4NDUsIDB4NDEsIDB4NTQsIDB4NDUsIDB4NDQsIDB4MTAsIDB4MDMsIDB4MjIsIDB4NjMsIDB4MGEsIDB4MTQsIDB4NGYsIDB4NmUsIDB4NjUsIDB4NmYsIDB4NjYsCi0JMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHgxMiwKLQkweDEyLCAweDBhLCAweDA0LCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDE4LCAweDAxLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDA0LCAweDZlLAotCTB4NjEsIDB4NmQsIDB4NjUsIDB4MTIsIDB4MzcsIDB4MGEsIDB4MDcsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MTgsIDB4MDIsCi0JMHgyMCwgMHgwMSwgMHgyOCwgMHgwYiwgMHgzMiwgMHgxZCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwKLQkweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDRmLCAweDZlLCAweDY1LCAweDZmLCAweDY2LCAweDRmLCAweDcwLCAweDc0LCAweDY5LAotCTB4NmYsIDB4NmUsIDB4NzMsIDB4NTIsIDB4MDcsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MjIsIDB4ZTMsIDB4MDIsIDB4MGEsCi0JMHgxMywgMHg0NSwgMHg2ZSwgMHg3NSwgMHg2ZCwgMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwKLQkweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDEyLCAweDEyLCAweDBhLCAweDA0LCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDE4LCAweDAxLCAweDIwLCAweDAxLAotCTB4MjgsIDB4MDksIDB4NTIsIDB4MDQsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTIsIDB4M2YsIDB4MGEsIDB4MDUsIDB4NzYsIDB4NjEsIDB4NmMsIDB4NzUsCi0JMHg2NSwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyOSwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwKLQkweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ1LCAweDZlLCAweDc1LCAweDZkLCAweDU2LCAweDYxLAotCTB4NmMsIDB4NzUsIDB4NjUsIDB4NDQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsCi0JMHg3NCwgMHg2ZiwgMHg1MiwgMHgwNSwgMHg3NiwgMHg2MSwgMHg2YywgMHg3NSwgMHg2NSwgMHgxMiwgMHgzNiwgMHgwYSwgMHgwNywgMHg2ZiwgMHg3MCwgMHg3NCwKLQkweDY5LCAweDZmLCAweDZlLCAweDczLCAweDE4LCAweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDBiLCAweDMyLCAweDFjLCAweDJlLCAweDY3LCAweDZmLCAweDZmLAotCTB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDUsIDB4NmUsIDB4NzUsCi0JMHg2ZCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHg1MiwgMHgwNywgMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwKLQkweDczLCAweDEyLCAweDVkLCAweDBhLCAweDBlLCAweDcyLCAweDY1LCAweDczLCAweDY1LCAweDcyLCAweDc2LCAweDY1LCAweDY0LCAweDVmLCAweDcyLCAweDYxLAotCTB4NmUsIDB4NjcsIDB4NjUsIDB4MTgsIDB4MDQsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MzYsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsCi0JMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NSwgMHg2ZSwgMHg3NSwgMHg2ZCwKLQkweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDJlLAotCTB4NDUsIDB4NmUsIDB4NzUsIDB4NmQsIDB4NTIsIDB4NjUsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsIDB4NjQsIDB4NTIsIDB4NjEsIDB4NmUsIDB4NjcsCi0JMHg2NSwgMHg1MiwgMHgwZCwgMHg3MiwgMHg2NSwgMHg3MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg2NCwgMHg1MiwgMHg2MSwgMHg2ZSwgMHg2NywgMHg2NSwKLQkweDEyLCAweDIzLCAweDBhLCAweDBkLCAweDcyLCAweDY1LCAweDczLCAweDY1LCAweDcyLCAweDc2LCAweDY1LCAweDY0LCAweDVmLCAweDZlLCAweDYxLCAweDZkLAotCTB4NjUsIDB4MTgsIDB4MDUsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MDksIDB4NTIsIDB4MGMsIDB4NzIsIDB4NjUsIDB4NzMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsCi0JMHg2NCwgMHg0ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxYSwgMHgzYiwgMHgwYSwgMHgxMSwgMHg0NSwgMHg2ZSwgMHg3NSwgMHg2ZCwgMHg1MiwgMHg2NSwgMHg3MywKLQkweDY1LCAweDcyLCAweDc2LCAweDY1LCAweDY0LCAweDUyLCAweDYxLCAweDZlLCAweDY3LCAweDY1LCAweDEyLCAweDE0LCAweDBhLCAweDA1LCAweDczLCAweDc0LAotCTB4NjEsIDB4NzIsIDB4NzQsIDB4MTgsIDB4MDEsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDUsIDB4NTIsIDB4MDUsIDB4NzMsIDB4NzQsIDB4NjEsIDB4NzIsIDB4NzQsCi0JMHgxMiwgMHgxMCwgMHgwYSwgMHgwMywgMHg2NSwgMHg2ZSwgMHg2NCwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwNSwgMHg1MiwgMHgwMywgMHg2NSwKLQkweDZlLCAweDY0LCAweDIyLCAweDgzLCAweDAxLCAweDBhLCAweDE4LCAweDQ1LCAweDZlLCAweDc1LCAweDZkLCAweDU2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LAotCTB4NDQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4MTIsCi0JMHgxMiwgMHgwYSwgMHgwNCwgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwNCwgMHg2ZSwKLQkweDYxLCAweDZkLCAweDY1LCAweDEyLCAweDE2LCAweDBhLCAweDA2LCAweDZlLCAweDc1LCAweDZkLCAweDYyLCAweDY1LCAweDcyLCAweDE4LCAweDAyLCAweDIwLAotCTB4MDEsIDB4MjgsIDB4MDUsIDB4NTIsIDB4MDYsIDB4NmUsIDB4NzUsIDB4NmQsIDB4NjIsIDB4NjUsIDB4NzIsIDB4MTIsIDB4M2IsIDB4MGEsIDB4MDcsIDB4NmYsCi0JMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxOCwgMHgwMywgMHgyMCwgMHgwMSwgMHgyOCwgMHgwYiwgMHgzMiwgMHgyMSwgMHgyZSwgMHg2NywKLQkweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ1LAotCTB4NmUsIDB4NzUsIDB4NmQsIDB4NTYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4NTIsCi0JMHgwNywgMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgyMiwgMHhhNywgMHgwMSwgMHgwYSwgMHgxNiwgMHg1MywgMHg2NSwgMHg3MiwKLQkweDc2LCAweDY5LCAweDYzLCAweDY1LCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDUwLCAweDcyLAotCTB4NmYsIDB4NzQsIDB4NmYsIDB4MTIsIDB4MTIsIDB4MGEsIDB4MDQsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTgsIDB4MDEsIDB4MjAsIDB4MDEsIDB4MjgsCi0JMHgwOSwgMHg1MiwgMHgwNCwgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHgxMiwgMHgzZSwgMHgwYSwgMHgwNiwgMHg2ZCwgMHg2NSwgMHg3NCwgMHg2OCwgMHg2ZiwKLQkweDY0LCAweDE4LCAweDAyLCAweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLCAweDI2LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LAotCTB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NGQsIDB4NjUsIDB4NzQsIDB4NjgsIDB4NmYsIDB4NjQsCi0JMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg1MiwKLQkweDA2LCAweDZkLCAweDY1LCAweDc0LCAweDY4LCAweDZmLCAweDY0LCAweDEyLCAweDM5LCAweDBhLCAweDA3LCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLAotCTB4NmUsIDB4NzMsIDB4MTgsIDB4MDMsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MWYsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsCi0JMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg1MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2OSwKLQkweDYzLCAweDY1LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDUyLCAweDA3LCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLAotCTB4NmUsIDB4NzMsIDB4MjIsIDB4ODksIDB4MDIsIDB4MGEsIDB4MTUsIDB4NGQsIDB4NjUsIDB4NzQsIDB4NjgsIDB4NmYsIDB4NjQsIDB4NDQsIDB4NjUsIDB4NzMsCi0JMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwgMHg3MiwgMHg1MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHgxMiwgMHgxMiwgMHgwYSwgMHgwNCwKLQkweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDE4LCAweDAxLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDA0LCAweDZlLCAweDYxLCAweDZkLCAweDY1LAotCTB4MTIsIDB4MWQsIDB4MGEsIDB4MGEsIDB4NjksIDB4NmUsIDB4NzAsIDB4NzUsIDB4NzQsIDB4NWYsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MTgsIDB4MDIsCi0JMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwOSwgMHg2OSwgMHg2ZSwgMHg3MCwgMHg3NSwgMHg3NCwgMHg1NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgxMiwKLQkweDFmLCAweDBhLCAweDBiLCAweDZmLCAweDc1LCAweDc0LCAweDcwLCAweDc1LCAweDc0LCAweDVmLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDE4LCAweDAzLAotCTB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MGEsIDB4NmYsIDB4NzUsIDB4NzQsIDB4NzAsIDB4NzUsIDB4NzQsIDB4NTQsIDB4NzksIDB4NzAsIDB4NjUsCi0JMHgxMiwgMHgzOCwgMHgwYSwgMHgwNywgMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxOCwgMHgwNCwgMHgyMCwgMHgwMSwgMHgyOCwKLQkweDBiLCAweDMyLCAweDFlLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLAotCTB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NGQsIDB4NjUsIDB4NzQsIDB4NjgsIDB4NmYsIDB4NjQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsCi0JMHg3MywgMHg1MiwgMHgwNywgMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxMiwgMHgzMCwgMHgwYSwgMHgxMCwgMHg2MywgMHg2YywKLQkweDY5LCAweDY1LCAweDZlLCAweDc0LCAweDVmLCAweDczLCAweDc0LCAweDcyLCAweDY1LCAweDYxLCAweDZkLCAweDY5LCAweDZlLCAweDY3LCAweDE4LCAweDA1LAotCTB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsIDB4MGYsIDB4NjMsIDB4NmMsIDB4NjksCi0JMHg2NSwgMHg2ZSwgMHg3NCwgMHg1MywgMHg3NCwgMHg3MiwgMHg2NSwgMHg2MSwgMHg2ZCwgMHg2OSwgMHg2ZSwgMHg2NywgMHgxMiwgMHgzMCwgMHgwYSwgMHgxMCwKLQkweDczLCAweDY1LCAweDcyLCAweDc2LCAweDY1LCAweDcyLCAweDVmLCAweDczLCAweDc0LCAweDcyLCAweDY1LCAweDYxLCAweDZkLCAweDY5LCAweDZlLCAweDY3LAotCTB4MTgsIDB4MDYsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsIDB4MGYsIDB4NzMsCi0JMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg3MiwgMHg1MywgMHg3NCwgMHg3MiwgMHg2NSwgMHg2MSwgMHg2ZCwgMHg2OSwgMHg2ZSwgMHg2NywgMHgyMiwgMHg5MSwKLQkweDA5LCAweDBhLCAweDBiLCAweDQ2LCAweDY5LCAweDZjLCAweDY1LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLCAweDEyLCAweDIxLAotCTB4MGEsIDB4MGMsIDB4NmEsIDB4NjEsIDB4NzYsIDB4NjEsIDB4NWYsIDB4NzAsIDB4NjEsIDB4NjMsIDB4NmIsIDB4NjEsIDB4NjcsIDB4NjUsIDB4MTgsIDB4MDEsCi0JMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwYiwgMHg2YSwgMHg2MSwgMHg3NiwgMHg2MSwgMHg1MCwgMHg2MSwgMHg2MywgMHg2YiwgMHg2MSwgMHg2NywKLQkweDY1LCAweDEyLCAweDMwLCAweDBhLCAweDE0LCAweDZhLCAweDYxLCAweDc2LCAweDYxLCAweDVmLCAweDZmLCAweDc1LCAweDc0LCAweDY1LCAweDcyLCAweDVmLAotCTB4NjMsIDB4NmMsIDB4NjEsIDB4NzMsIDB4NzMsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTgsIDB4MDgsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsCi0JMHgxMiwgMHg2YSwgMHg2MSwgMHg3NiwgMHg2MSwgMHg0ZiwgMHg3NSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg0MywgMHg2YywgMHg2MSwgMHg3MywgMHg3MywgMHg2ZSwKLQkweDYxLCAweDZkLCAweDY1LCAweDEyLCAweDM1LCAweDBhLCAweDEzLCAweDZhLCAweDYxLCAweDc2LCAweDYxLCAweDVmLCAweDZkLCAweDc1LCAweDZjLCAweDc0LAotCTB4NjksIDB4NzAsIDB4NmMsIDB4NjUsIDB4NWYsIDB4NjYsIDB4NjksIDB4NmMsIDB4NjUsIDB4NzMsIDB4MTgsIDB4MGEsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsCi0JMHgzYSwgMHgwNSwgMHg2NiwgMHg2MSwgMHg2YywgMHg3MywgMHg2NSwgMHg1MiwgMHgxMSwgMHg2YSwgMHg2MSwgMHg3NiwgMHg2MSwgMHg0ZCwgMHg3NSwgMHg2YywKLQkweDc0LCAweDY5LCAweDcwLCAweDZjLCAweDY1LCAweDQ2LCAweDY5LCAweDZjLCAweDY1LCAweDczLCAweDEyLCAweDQ0LCAweDBhLCAweDFkLCAweDZhLCAweDYxLAotCTB4NzYsIDB4NjEsIDB4NWYsIDB4NjcsIDB4NjUsIDB4NmUsIDB4NjUsIDB4NzIsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NWYsIDB4NjUsIDB4NzEsIDB4NzUsIDB4NjEsCi0JMHg2YywgMHg3MywgMHg1ZiwgMHg2MSwgMHg2ZSwgMHg2NCwgMHg1ZiwgMHg2OCwgMHg2MSwgMHg3MywgMHg2OCwgMHgxOCwgMHgxNCwgMHgyMCwgMHgwMSwgMHgyOCwKLQkweDA4LCAweDQyLCAweDAyLCAweDE4LCAweDAxLCAweDUyLCAweDE5LCAweDZhLCAweDYxLCAweDc2LCAweDYxLCAweDQ3LCAweDY1LCAweDZlLCAweDY1LCAweDcyLAotCTB4NjEsIDB4NzQsIDB4NjUsIDB4NDUsIDB4NzEsIDB4NzUsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NDEsIDB4NmUsIDB4NjQsIDB4NDgsIDB4NjEsIDB4NzMsIDB4NjgsCi0JMHgxMiwgMHgzYSwgMHgwYSwgMHgxNiwgMHg2YSwgMHg2MSwgMHg3NiwgMHg2MSwgMHg1ZiwgMHg3MywgMHg3NCwgMHg3MiwgMHg2OSwgMHg2ZSwgMHg2NywgMHg1ZiwKLQkweDYzLCAweDY4LCAweDY1LCAweDYzLCAweDZiLCAweDVmLCAweDc1LCAweDc0LCAweDY2LCAweDM4LCAweDE4LCAweDFiLCAweDIwLCAweDAxLCAweDI4LCAweDA4LAotCTB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsIDB4MTMsIDB4NmEsIDB4NjEsIDB4NzYsIDB4NjEsIDB4NTMsIDB4NzQsIDB4NzIsCi0JMHg2OSwgMHg2ZSwgMHg2NywgMHg0MywgMHg2OCwgMHg2NSwgMHg2MywgMHg2YiwgMHg1NSwgMHg3NCwgMHg2NiwgMHgzOCwgMHgxMiwgMHg1MywgMHgwYSwgMHgwYywKLQkweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZkLCAweDY5LCAweDdhLCAweDY1LCAweDVmLCAweDY2LCAweDZmLCAweDcyLCAweDE4LCAweDA5LCAweDIwLCAweDAxLAotCTB4MjgsIDB4MGUsIDB4MzIsIDB4MjksIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsCi0JMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NiwgMHg2OSwgMHg2YywgMHg2NSwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywKLQkweDJlLCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZkLCAweDY5LCAweDdhLCAweDY1LCAweDRkLCAweDZmLCAweDY0LCAweDY1LCAweDNhLCAweDA1LCAweDUzLAotCTB4NTAsIDB4NDUsIDB4NDUsIDB4NDQsIDB4NTIsIDB4MGIsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmQsIDB4NjksIDB4N2EsIDB4NjUsIDB4NDYsIDB4NmYsCi0JMHg3MiwgMHgxMiwgMHgxZCwgMHgwYSwgMHgwYSwgMHg2NywgMHg2ZiwgMHg1ZiwgMHg3MCwgMHg2MSwgMHg2MywgMHg2YiwgMHg2MSwgMHg2NywgMHg2NSwgMHgxOCwKLQkweDBiLCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDA5LCAweDY3LCAweDZmLCAweDUwLCAweDYxLCAweDYzLCAweDZiLCAweDYxLCAweDY3LCAweDY1LAotCTB4MTIsIDB4MzUsIDB4MGEsIDB4MTMsIDB4NjMsIDB4NjMsIDB4NWYsIDB4NjcsIDB4NjUsIDB4NmUsIDB4NjUsIDB4NzIsIDB4NjksIDB4NjMsIDB4NWYsIDB4NzMsCi0JMHg2NSwgMHg3MiwgMHg3NiwgMHg2OSwgMHg2MywgMHg2NSwgMHg3MywgMHgxOCwgMHgxMCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHgzYSwgMHgwNSwgMHg2NiwKLQkweDYxLCAweDZjLCAweDczLCAweDY1LCAweDUyLCAweDExLCAweDYzLCAweDYzLCAweDQ3LCAweDY1LCAweDZlLCAweDY1LCAweDcyLCAweDY5LCAweDYzLCAweDUzLAotCTB4NjUsIDB4NzIsIDB4NzYsIDB4NjksIDB4NjMsIDB4NjUsIDB4NzMsIDB4MTIsIDB4MzksIDB4MGEsIDB4MTUsIDB4NmEsIDB4NjEsIDB4NzYsIDB4NjEsIDB4NWYsCi0JMHg2NywgMHg2NSwgMHg2ZSwgMHg2NSwgMHg3MiwgMHg2OSwgMHg2MywgMHg1ZiwgMHg3MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2OSwgMHg2MywgMHg2NSwgMHg3MywKLQkweDE4LCAweDExLCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLCAweDY1LCAweDUyLCAweDEzLCAweDZhLAotCTB4NjEsIDB4NzYsIDB4NjEsIDB4NDcsIDB4NjUsIDB4NmUsIDB4NjUsIDB4NzIsIDB4NjksIDB4NjMsIDB4NTMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjksIDB4NjMsCi0JMHg2NSwgMHg3MywgMHgxMiwgMHgzNSwgMHgwYSwgMHgxMywgMHg3MCwgMHg3OSwgMHg1ZiwgMHg2NywgMHg2NSwgMHg2ZSwgMHg2NSwgMHg3MiwgMHg2OSwgMHg2MywKLQkweDVmLCAweDczLCAweDY1LCAweDcyLCAweDc2LCAweDY5LCAweDYzLCAweDY1LCAweDczLCAweDE4LCAweDEyLCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDNhLAotCTB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsIDB4MTEsIDB4NzAsIDB4NzksIDB4NDcsIDB4NjUsIDB4NmUsIDB4NjUsIDB4NzIsIDB4NjksCi0JMHg2MywgMHg1MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2OSwgMHg2MywgMHg2NSwgMHg3MywgMHgxMiwgMHgzNywgMHgwYSwgMHgxNCwgMHg3MCwgMHg2OCwgMHg3MCwKLQkweDVmLCAweDY3LCAweDY1LCAweDZlLCAweDY1LCAweDcyLCAweDY5LCAweDYzLCAweDVmLCAweDczLCAweDY1LCAweDcyLCAweDc2LCAweDY5LCAweDYzLCAweDY1LAotCTB4NzMsIDB4MTgsIDB4MmEsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsIDB4MTIsCi0JMHg3MCwgMHg2OCwgMHg3MCwgMHg0NywgMHg2NSwgMHg2ZSwgMHg2NSwgMHg3MiwgMHg2OSwgMHg2MywgMHg1MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2OSwgMHg2MywKLQkweDY1LCAweDczLCAweDEyLCAweDI1LCAweDBhLCAweDBhLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLCAweDc0LCAweDY1LCAweDY0LAotCTB4MTgsIDB4MTcsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsIDB4MGEsIDB4NjQsCi0JMHg2NSwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2MywgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgxMiwgMHgyZSwgMHgwYSwgMHgxMCwgMHg2MywgMHg2MywgMHg1ZiwKLQkweDY1LCAweDZlLCAweDYxLCAweDYyLCAweDZjLCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAweDY1LCAweDZlLCAweDYxLCAweDczLCAweDE4LCAweDFmLCAweDIwLAotCTB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDQsIDB4NzQsIDB4NzIsIDB4NzUsIDB4NjUsIDB4NTIsIDB4MGUsIDB4NjMsIDB4NjMsIDB4NDUsIDB4NmUsIDB4NjEsCi0JMHg2MiwgMHg2YywgMHg2NSwgMHg0MSwgMHg3MiwgMHg2NSwgMHg2ZSwgMHg2MSwgMHg3MywgMHgxMiwgMHgyYSwgMHgwYSwgMHgxMSwgMHg2ZiwgMHg2MiwgMHg2YSwKLQkweDYzLCAweDVmLCAweDYzLCAweDZjLCAweDYxLCAweDczLCAweDczLCAweDVmLCAweDcwLCAweDcyLCAweDY1LCAweDY2LCAweDY5LCAweDc4LCAweDE4LCAweDI0LAotCTB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MGYsIDB4NmYsIDB4NjIsIDB4NmEsIDB4NjMsIDB4NDMsIDB4NmMsIDB4NjEsIDB4NzMsIDB4NzMsIDB4NTAsCi0JMHg3MiwgMHg2NSwgMHg2NiwgMHg2OSwgMHg3OCwgMHgxMiwgMHgyOSwgMHgwYSwgMHgxMCwgMHg2MywgMHg3MywgMHg2OCwgMHg2MSwgMHg3MiwgMHg3MCwgMHg1ZiwKLQkweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDczLCAweDcwLCAweDYxLCAweDYzLCAweDY1LCAweDE4LCAweDI1LCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLAotCTB4MGYsIDB4NjMsIDB4NzMsIDB4NjgsIDB4NjEsIDB4NzIsIDB4NzAsIDB4NGUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4NzMsIDB4NzAsIDB4NjEsIDB4NjMsIDB4NjUsCi0JMHgxMiwgMHgyMSwgMHgwYSwgMHgwYywgMHg3MywgMHg3NywgMHg2OSwgMHg2NiwgMHg3NCwgMHg1ZiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2NiwgMHg2OSwgMHg3OCwKLQkweDE4LCAweDI3LCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDBiLCAweDczLCAweDc3LCAweDY5LCAweDY2LCAweDc0LCAweDUwLCAweDcyLCAweDY1LAotCTB4NjYsIDB4NjksIDB4NzgsIDB4MTIsIDB4MjgsIDB4MGEsIDB4MTAsIDB4NzAsIDB4NjgsIDB4NzAsIDB4NWYsIDB4NjMsIDB4NmMsIDB4NjEsIDB4NzMsIDB4NzMsCi0JMHg1ZiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2NiwgMHg2OSwgMHg3OCwgMHgxOCwgMHgyOCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwZSwgMHg3MCwKLQkweDY4LCAweDcwLCAweDQzLCAweDZjLCAweDYxLCAweDczLCAweDczLCAweDUwLCAweDcyLCAweDY1LCAweDY2LCAweDY5LCAweDc4LCAweDEyLCAweDIzLCAweDBhLAotCTB4MGQsIDB4NzAsIDB4NjgsIDB4NzAsIDB4NWYsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4NzMsIDB4NzAsIDB4NjEsIDB4NjMsIDB4NjUsIDB4MTgsIDB4MjksCi0JMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwYywgMHg3MCwgMHg2OCwgMHg3MCwgMHg0ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHg3MywgMHg3MCwgMHg2MSwKLQkweDYzLCAweDY1LCAweDEyLCAweDM0LCAweDBhLCAweDE2LCAweDcwLCAweDY4LCAweDcwLCAweDVmLCAweDZkLCAweDY1LCAweDc0LCAweDYxLCAweDY0LCAweDYxLAotCTB4NzQsIDB4NjEsIDB4NWYsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4NzMsIDB4NzAsIDB4NjEsIDB4NjMsIDB4NjUsIDB4MTgsIDB4MmMsIDB4MjAsIDB4MDEsCi0JMHgyOCwgMHgwOSwgMHg1MiwgMHgxNCwgMHg3MCwgMHg2OCwgMHg3MCwgMHg0ZCwgMHg2NSwgMHg3NCwgMHg2MSwgMHg2NCwgMHg2MSwgMHg3NCwgMHg2MSwgMHg0ZSwKLQkweDYxLCAweDZkLCAweDY1LCAweDczLCAweDcwLCAweDYxLCAweDYzLCAweDY1LCAweDEyLCAweDIxLCAweDBhLCAweDBjLCAweDcyLCAweDc1LCAweDYyLCAweDc5LAotCTB4NWYsIDB4NzAsIDB4NjEsIDB4NjMsIDB4NmIsIDB4NjEsIDB4NjcsIDB4NjUsIDB4MTgsIDB4MmQsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MGIsCi0JMHg3MiwgMHg3NSwgMHg2MiwgMHg3OSwgMHg1MCwgMHg2MSwgMHg2MywgMHg2YiwgMHg2MSwgMHg2NywgMHg2NSwgMHgxMiwgMHg1OCwgMHgwYSwgMHgxNCwgMHg3NSwKLQkweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDVmLCAweDZmLCAweDcwLCAweDc0LAotCTB4NjksIDB4NmYsIDB4NmUsIDB4MTgsIDB4ZTcsIDB4MDcsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MjQsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsCi0JMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg1NSwgMHg2ZSwgMHg2OSwKKwkweDgwLCAweDgwLCAweDAyLCAweDIyLCAweGQxLCAweDAyLCAweDBhLCAweDBiLCAweDQ1LCAweDZlLCAweDc1LCAweDZkLCAweDRmLCAweDcwLCAweDc0LCAweDY5LAorCTB4NmYsIDB4NmUsIDB4NzMsIDB4MTIsIDB4MWYsIDB4MGEsIDB4MGIsIDB4NjEsIDB4NmMsIDB4NmMsIDB4NmYsIDB4NzcsIDB4NWYsIDB4NjEsIDB4NmMsIDB4NjksCisJMHg2MSwgMHg3MywgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHg1MiwgMHgwYSwgMHg2MSwgMHg2YywgMHg2YywgMHg2ZiwgMHg3NywgMHg0MSwKKwkweDZjLCAweDY5LCAweDYxLCAweDczLCAweDEyLCAweDI1LCAweDBhLCAweDBhLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLCAweDc0LAorCTB4NjUsIDB4NjQsIDB4MTgsIDB4MDMsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsCisJMHgwYSwgMHg2NCwgMHg2NSwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2MywgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgxMiwgMHg1NiwgMHgwYSwgMHgyNiwgMHg2NCwKKwkweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDVmLCAweDZjLCAweDY1LCAweDY3LCAweDYxLCAweDYzLCAweDc5LAorCTB4NWYsIDB4NmEsIDB4NzMsIDB4NmYsIDB4NmUsIDB4NWYsIDB4NjYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4NWYsIDB4NjMsIDB4NmYsIDB4NmUsIDB4NjYsCisJMHg2YywgMHg2OSwgMHg2MywgMHg3NCwgMHg3MywgMHgxOCwgMHgwNiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHg0MiwgMHgwMiwgMHgxOCwgMHgwMSwgMHg1MiwKKwkweDIyLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDRjLCAweDY1LCAweDY3LCAweDYxLCAweDYzLAorCTB4NzksIDB4NGEsIDB4NzMsIDB4NmYsIDB4NmUsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4NDMsIDB4NmYsIDB4NmUsIDB4NjYsIDB4NmMsIDB4NjksCisJMHg2MywgMHg3NCwgMHg3MywgMHgxMiwgMHgzNywgMHgwYSwgMHgwOCwgMHg2NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg3MywgMHgxOCwKKwkweDA3LCAweDIwLCAweDAxLCAweDI4LCAweDBiLCAweDMyLCAweDFiLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLAorCTB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NTMsCisJMHg2NSwgMHg3NCwgMHg1MiwgMHgwOCwgMHg2NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg3MywgMHgxMiwgMHg1OCwgMHgwYSwgMHgxNCwKKwkweDc1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDVmLCAweDZmLCAweDcwLAorCTB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MTgsIDB4ZTcsIDB4MDcsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MjQsIDB4MmUsIDB4NjcsIDB4NmYsCisJMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg1NSwgMHg2ZSwKKwkweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLAorCTB4NmUsIDB4NTIsIDB4MTMsIDB4NzUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsCisJMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgyYSwgMHgwOSwgMHgwOCwgMHhlOCwgMHgwNywgMHgxMCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwKKwkweDAyLCAweDRhLCAweDA0LCAweDA4LCAweDA1LCAweDEwLCAweDA2LCAweDIyLCAweDgxLCAweDAyLCAweDBhLCAweDEwLCAweDQ1LCAweDZlLCAweDc1LCAweDZkLAorCTB4NTYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MTIsIDB4MjUsIDB4MGEsIDB4MGEsCisJMHg2NCwgMHg2NSwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2MywgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwKKwkweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLCAweDY1LCAweDUyLCAweDBhLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLAorCTB4NzQsIDB4NjUsIDB4NjQsIDB4MTIsIDB4MzcsIDB4MGEsIDB4MDgsIDB4NjYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NzMsIDB4MTgsCisJMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwYiwgMHgzMiwgMHgxYiwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwKKwkweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ2LCAweDY1LCAweDYxLCAweDc0LCAweDc1LCAweDcyLCAweDY1LCAweDUzLAorCTB4NjUsIDB4NzQsIDB4NTIsIDB4MDgsIDB4NjYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NzMsIDB4MTIsIDB4MjgsIDB4MGEsIDB4MGMsCisJMHg2NCwgMHg2NSwgMHg2MiwgMHg3NSwgMHg2NywgMHg1ZiwgMHg3MiwgMHg2NSwgMHg2NCwgMHg2MSwgMHg2MywgMHg3NCwgMHgxOCwgMHgwMywgMHgyMCwgMHgwMSwKKwkweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLCAweDY1LCAweDUyLCAweDBiLCAweDY0LCAweDY1LCAweDYyLCAweDc1LCAweDY3LAorCTB4NTIsIDB4NjUsIDB4NjQsIDB4NjEsIDB4NjMsIDB4NzQsIDB4MTIsIDB4NTgsIDB4MGEsIDB4MTQsIDB4NzUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsCisJMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg1ZiwgMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxOCwgMHhlNywKKwkweDA3LCAweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLCAweDI0LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLAorCTB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NTUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsCisJMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MiwgMHgxMywgMHg3NSwgMHg2ZSwgMHg2OSwKIAkweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLAotCTB4NTIsIDB4MTMsIDB4NzUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NGYsCi0JMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgyMiwgMHgzYSwgMHgwYSwgMHgwYywgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZCwgMHg2OSwgMHg3YSwKLQkweDY1LCAweDRkLCAweDZmLCAweDY0LCAweDY1LCAweDEyLCAweDA5LCAweDBhLCAweDA1LCAweDUzLCAweDUwLCAweDQ1LCAweDQ1LCAweDQ0LCAweDEwLCAweDAxLAotCTB4MTIsIDB4MGQsIDB4MGEsIDB4MDksIDB4NDMsIDB4NGYsIDB4NDQsIDB4NDUsIDB4NWYsIDB4NTMsIDB4NDksIDB4NWEsIDB4NDUsIDB4MTAsIDB4MDIsIDB4MTIsCi0JMHgxMCwgMHgwYSwgMHgwYywgMHg0YywgMHg0OSwgMHg1NCwgMHg0NSwgMHg1ZiwgMHg1MiwgMHg1NSwgMHg0ZSwgMHg1NCwgMHg0OSwgMHg0ZCwgMHg0NSwgMHgxMCwKLQkweDAzLCAweDJhLCAweDA5LCAweDA4LCAweGU4LCAweDA3LCAweDEwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDAyLCAweDRhLCAweDA0LCAweDA4LCAweDI2LAotCTB4MTAsIDB4MjcsIDB4MjIsIDB4ZDEsIDB4MDIsIDB4MGEsIDB4MGUsIDB4NGQsIDB4NjUsIDB4NzMsIDB4NzMsIDB4NjEsIDB4NjcsIDB4NjUsIDB4NGYsIDB4NzAsCi0JMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxMiwgMHgzYywgMHgwYSwgMHgxNywgMHg2ZCwgMHg2NSwgMHg3MywgMHg3MywgMHg2MSwgMHg2NywgMHg2NSwKLQkweDVmLCAweDczLCAweDY1LCAweDc0LCAweDVmLCAweDc3LCAweDY5LCAweDcyLCAweDY1LCAweDVmLCAweDY2LCAweDZmLCAweDcyLCAweDZkLCAweDYxLCAweDc0LAotCTB4MTgsIDB4MDEsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsIDB4MTQsIDB4NmQsCi0JMHg2NSwgMHg3MywgMHg3MywgMHg2MSwgMHg2NywgMHg2NSwgMHg1MywgMHg2NSwgMHg3NCwgMHg1NywgMHg2OSwgMHg3MiwgMHg2NSwgMHg0NiwgMHg2ZiwgMHg3MiwKLQkweDZkLCAweDYxLCAweDc0LCAweDEyLCAweDRjLCAweDBhLCAweDFmLCAweDZlLCAweDZmLCAweDVmLCAweDczLCAweDc0LCAweDYxLCAweDZlLCAweDY0LCAweDYxLAotCTB4NzIsIDB4NjQsIDB4NWYsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NWYsIDB4NjEsIDB4NjMsCi0JMHg2MywgMHg2NSwgMHg3MywgMHg3MywgMHg2ZiwgMHg3MiwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHgzYSwgMHgwNSwgMHg2NiwgMHg2MSwKLQkweDZjLCAweDczLCAweDY1LCAweDUyLCAweDFjLCAweDZlLCAweDZmLCAweDUzLCAweDc0LCAweDYxLCAweDZlLCAweDY0LCAweDYxLCAweDcyLCAweDY0LCAweDQ0LAotCTB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NDEsIDB4NjMsIDB4NjMsIDB4NjUsIDB4NzMsIDB4NzMsIDB4NmYsCi0JMHg3MiwgMHgxMiwgMHgyNSwgMHgwYSwgMHgwYSwgMHg2NCwgMHg2NSwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2MywgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgxOCwKLQkweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLCAweDY1LCAweDUyLCAweDBhLCAweDY0LCAweDY1LAotCTB4NzAsIDB4NzIsIDB4NjUsIDB4NjMsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MTIsIDB4MWIsIDB4MGEsIDB4MDksIDB4NmQsIDB4NjEsIDB4NzAsIDB4NWYsCi0JMHg2NSwgMHg2ZSwgMHg3NCwgMHg3MiwgMHg3OSwgMHgxOCwgMHgwNywgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHg1MiwgMHgwOCwgMHg2ZCwgMHg2MSwgMHg3MCwKLQkweDQ1LCAweDZlLCAweDc0LCAweDcyLCAweDc5LCAweDEyLCAweDU4LCAweDBhLCAweDE0LCAweDc1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLAotCTB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MTgsIDB4ZTcsIDB4MDcsCi0JMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyNCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwKLQkweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDU1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLAotCTB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTIsIDB4MTMsIDB4NzUsIDB4NmUsIDB4NjksIDB4NmUsCi0JMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgyYSwKLQkweDA5LCAweDA4LCAweGU4LCAweDA3LCAweDEwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDAyLCAweDRhLCAweDA0LCAweDA4LCAweDA4LCAweDEwLCAweDA5LAotCTB4NGEsIDB4MDQsIDB4MDgsIDB4MDksIDB4MTAsIDB4MGEsIDB4MjIsIDB4ZTIsIDB4MDMsIDB4MGEsIDB4MGMsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsCi0JMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxMiwgMHg0MSwgMHgwYSwgMHgwNSwgMHg2MywgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLQkweDE4LCAweDAxLCAweDIwLCAweDAxLCAweDI4LCAweDBlLCAweDMyLCAweDIzLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLAotCTB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4NGYsIDB4NzAsCi0JMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgyZSwgMHg0MywgMHg1NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgzYSwgMHgwNiwgMHg1MywgMHg1NCwgMHg1MiwKLQkweDQ5LCAweDRlLCAweDQ3LCAweDUyLCAweDA1LCAweDYzLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDEyLCAweDE2LCAweDBhLCAweDA2LCAweDcwLCAweDYxLAotCTB4NjMsIDB4NmIsIDB4NjUsIDB4NjQsIDB4MTgsIDB4MDIsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4NTIsIDB4MDYsIDB4NzAsIDB4NjEsIDB4NjMsIDB4NmIsCi0JMHg2NSwgMHg2NCwgMHgxMiwgMHg0NywgMHgwYSwgMHgwNiwgMHg2YSwgMHg3MywgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgxOCwgMHgwNiwgMHgyMCwgMHgwMSwKLQkweDI4LCAweDBlLCAweDMyLCAweDI0LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LAotCTB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsCi0JMHg3MywgMHgyZSwgMHg0YSwgMHg1MywgMHg1NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgzYSwgMHgwOSwgMHg0YSwgMHg1MywgMHg1ZiwgMHg0ZSwgMHg0ZiwgMHg1MiwKLQkweDRkLCAweDQxLCAweDRjLCAweDUyLCAweDA2LCAweDZhLCAweDczLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDEyLCAweDE5LCAweDBhLCAweDA0LCAweDZjLAotCTB4NjEsIDB4N2EsIDB4NzksIDB4MTgsIDB4MDUsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsCi0JMHg1MiwgMHgwNCwgMHg2YywgMHg2MSwgMHg3YSwgMHg3OSwgMHgxMiwgMHgyNSwgMHgwYSwgMHgwYSwgMHg2NCwgMHg2NSwgMHg3MCwgMHg3MiwgMHg2NSwgMHg2MywKLQkweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDE4LCAweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLCAweDczLAotCTB4NjUsIDB4NTIsIDB4MGEsIDB4NjQsIDB4NjUsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NjMsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MTIsIDB4MTksIDB4MGEsCi0JMHgwNCwgMHg3NywgMHg2NSwgMHg2MSwgMHg2YiwgMHgxOCwgMHgwYSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHgzYSwgMHgwNSwgMHg2NiwgMHg2MSwgMHg2YywKLQkweDczLCAweDY1LCAweDUyLCAweDA0LCAweDc3LCAweDY1LCAweDYxLCAweDZiLCAweDEyLCAweDU4LCAweDBhLCAweDE0LCAweDc1LCAweDZlLCAweDY5LCAweDZlLAotCTB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsCi0JMHgxOCwgMHhlNywgMHgwNywgMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyNCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwKLQkweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDU1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LAotCTB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTIsIDB4MTMsIDB4NzUsCi0JMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwKLQkweDZmLCAweDZlLCAweDIyLCAweDJmLCAweDBhLCAweDA1LCAweDQzLCAweDU0LCAweDc5LCAweDcwLCAweDY1LCAweDEyLCAweDBhLCAweDBhLCAweDA2LCAweDUzLAotCTB4NTQsIDB4NTIsIDB4NDksIDB4NGUsIDB4NDcsIDB4MTAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MGEsIDB4MDQsIDB4NDMsIDB4NGYsIDB4NTIsIDB4NDQsIDB4MTAsCi0JMHgwMSwgMHgxMiwgMHgxMCwgMHgwYSwgMHgwYywgMHg1MywgMHg1NCwgMHg1MiwgMHg0OSwgMHg0ZSwgMHg0NywgMHg1ZiwgMHg1MCwgMHg0OSwgMHg0NSwgMHg0MywKLQkweDQ1LCAweDEwLCAweDAyLCAweDIyLCAweDM1LCAweDBhLCAweDA2LCAweDRhLCAweDUzLCAweDU0LCAweDc5LCAweDcwLCAweDY1LCAweDEyLCAweDBkLCAweDBhLAotCTB4MDksIDB4NGEsIDB4NTMsIDB4NWYsIDB4NGUsIDB4NGYsIDB4NTIsIDB4NGQsIDB4NDEsIDB4NGMsIDB4MTAsIDB4MDAsIDB4MTIsIDB4MGQsIDB4MGEsIDB4MDksCi0JMHg0YSwgMHg1MywgMHg1ZiwgMHg1MywgMHg1NCwgMHg1MiwgMHg0OSwgMHg0ZSwgMHg0NywgMHgxMCwgMHgwMSwgMHgxMiwgMHgwZCwgMHgwYSwgMHgwOSwgMHg0YSwKLQkweDUzLCAweDVmLCAweDRlLCAweDU1LCAweDRkLCAweDQyLCAweDQ1LCAweDUyLCAweDEwLCAweDAyLCAweDJhLCAweDA5LCAweDA4LCAweGU4LCAweDA3LCAweDEwLAotCTB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDIsIDB4NGEsIDB4MDQsIDB4MDgsIDB4MDQsIDB4MTAsIDB4MDUsIDB4MjIsIDB4NzMsIDB4MGEsIDB4MGMsIDB4NGYsCi0JMHg2ZSwgMHg2NSwgMHg2ZiwgMHg2NiwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxMiwgMHg1OCwgMHgwYSwgMHgxNCwgMHg3NSwKLQkweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDVmLCAweDZmLCAweDcwLCAweDc0LAotCTB4NjksIDB4NmYsIDB4NmUsIDB4MTgsIDB4ZTcsIDB4MDcsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MjQsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsCi0JMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg1NSwgMHg2ZSwgMHg2OSwKLQkweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLAotCTB4NTIsIDB4MTMsIDB4NzUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NGYsCi0JMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgyYSwgMHgwOSwgMHgwOCwgMHhlOCwgMHgwNywgMHgxMCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMiwKLQkweDIyLCAweGMwLCAweDAxLCAweDBhLCAweDBiLCAweDQ1LCAweDZlLCAweDc1LCAweDZkLCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDczLAotCTB4MTIsIDB4MWYsIDB4MGEsIDB4MGIsIDB4NjEsIDB4NmMsIDB4NmMsIDB4NmYsIDB4NzcsIDB4NWYsIDB4NjEsIDB4NmMsIDB4NjksIDB4NjEsIDB4NzMsIDB4MTgsCi0JMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHg1MiwgMHgwYSwgMHg2MSwgMHg2YywgMHg2YywgMHg2ZiwgMHg3NywgMHg0MSwgMHg2YywgMHg2OSwgMHg2MSwKLQkweDczLCAweDEyLCAweDI1LCAweDBhLCAweDBhLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDE4LAotCTB4MDMsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDgsIDB4M2EsIDB4MDUsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NzMsIDB4NjUsIDB4NTIsIDB4MGEsIDB4NjQsIDB4NjUsCi0JMHg3MCwgMHg3MiwgMHg2NSwgMHg2MywgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgxMiwgMHg1OCwgMHgwYSwgMHgxNCwgMHg3NSwgMHg2ZSwgMHg2OSwgMHg2ZSwKLQkweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDVmLCAweDZmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLAotCTB4MTgsIDB4ZTcsIDB4MDcsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MjQsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsCi0JMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg1NSwgMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg2NSwKLQkweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDUyLCAweDEzLCAweDc1LAotCTB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksCi0JMHg2ZiwgMHg2ZSwgMHgyYSwgMHgwOSwgMHgwOCwgMHhlOCwgMHgwNywgMHgxMCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMiwgMHg0YSwgMHgwNCwgMHgwOCwKLQkweDA1LCAweDEwLCAweDA2LCAweDIyLCAweDllLCAweDAxLCAweDBhLCAweDEwLCAweDQ1LCAweDZlLCAweDc1LCAweDZkLCAweDU2LCAweDYxLCAweDZjLCAweDc1LAotCTB4NjUsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MTIsIDB4MjUsIDB4MGEsIDB4MGEsIDB4NjQsIDB4NjUsIDB4NzAsIDB4NzIsCi0JMHg2NSwgMHg2MywgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHgzYSwgMHgwNSwgMHg2NiwgMHg2MSwKLQkweDZjLCAweDczLCAweDY1LCAweDUyLCAweDBhLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDEyLAotCTB4NTgsIDB4MGEsIDB4MTQsIDB4NzUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsCi0JMHg1ZiwgMHg2ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxOCwgMHhlNywgMHgwNywgMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyNCwKLQkweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LAotCTB4MmUsIDB4NTUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NGYsIDB4NzAsCi0JMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MiwgMHgxMywgMHg3NSwgMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwKLQkweDc0LCAweDY1LCAweDY0LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDJhLCAweDA5LCAweDA4LCAweGU4LCAweDA3LCAweDEwLCAweDgwLAotCTB4ODAsIDB4ODAsIDB4ODAsIDB4MDIsIDB4MjIsIDB4OWMsIDB4MDEsIDB4MGEsIDB4MGUsIDB4NTMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjksIDB4NjMsIDB4NjUsCi0JMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg3MywgMHgxMiwgMHgyNSwgMHgwYSwgMHgwYSwgMHg2NCwgMHg2NSwgMHg3MCwgMHg3MiwgMHg2NSwKKwkweDJhLCAweDA5LCAweDA4LCAweGU4LCAweDA3LCAweDEwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDAyLCAweDIyLCAweGQ1LCAweDAxLCAweDBhLCAweDBlLAorCTB4NTMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjksIDB4NjMsIDB4NjUsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MTIsIDB4MzcsCisJMHgwYSwgMHgwOCwgMHg2NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg3MywgMHgxOCwgMHgyMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwYiwKKwkweDMyLCAweDFiLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLAorCTB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NTMsIDB4NjUsIDB4NzQsIDB4NTIsIDB4MDgsIDB4NjYsCisJMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg3MywgMHgxMiwgMHgyNSwgMHgwYSwgMHgwYSwgMHg2NCwgMHg2NSwgMHg3MCwgMHg3MiwgMHg2NSwKIAkweDYzLCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDE4LCAweDIxLCAweDIwLCAweDAxLCAweDI4LCAweDA4LCAweDNhLCAweDA1LCAweDY2LCAweDYxLCAweDZjLAogCTB4NzMsIDB4NjUsIDB4NTIsIDB4MGEsIDB4NjQsIDB4NjUsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NjMsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MTIsIDB4NTgsCiAJMHgwYSwgMHgxNCwgMHg3NSwgMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg1ZiwKQEAgLTMzOTUsNyArNDg0Nyw3IEBACiAJMHg1NSwgMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwKIAkweDY5LCAweDZmLCAweDZlLCAweDUyLCAweDEzLCAweDc1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LAogCTB4NjUsIDB4NjQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MmEsIDB4MDksIDB4MDgsIDB4ZTgsIDB4MDcsIDB4MTAsIDB4ODAsIDB4ODAsCi0JMHg4MCwgMHg4MCwgMHgwMiwgMHgyMiwgMHhlMCwgMHgwMiwgMHgwYSwgMHgwZCwgMHg0ZCwgMHg2NSwgMHg3NCwgMHg2OCwgMHg2ZiwgMHg2NCwgMHg0ZiwgMHg3MCwKKwkweDgwLCAweDgwLCAweDAyLCAweDIyLCAweDk5LCAweDAzLCAweDBhLCAweDBkLCAweDRkLCAweDY1LCAweDc0LCAweDY4LCAweDZmLCAweDY0LCAweDRmLCAweDcwLAogCTB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NzMsIDB4MTIsIDB4MjUsIDB4MGEsIDB4MGEsIDB4NjQsIDB4NjUsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NjMsIDB4NjEsCiAJMHg3NCwgMHg2NSwgMHg2NCwgMHgxOCwgMHgyMSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOCwgMHgzYSwgMHgwNSwgMHg2NiwgMHg2MSwgMHg2YywgMHg3MywgMHg2NSwKIAkweDUyLCAweDBhLCAweDY0LCAweDY1LCAweDcwLCAweDcyLCAweDY1LCAweDYzLCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDEyLCAweDcxLCAweDBhLCAweDExLApAQCAtMzQwNiw4NCArNDg1OCwyMTcgQEAKIAkweDZlLCAweDYzLCAweDc5LCAweDRjLCAweDY1LCAweDc2LCAweDY1LCAweDZjLCAweDNhLCAweDEzLCAweDQ5LCAweDQ0LCAweDQ1LCAweDRkLCAweDUwLCAweDRmLAogCTB4NTQsIDB4NDUsIDB4NGUsIDB4NDMsIDB4NTksIDB4NWYsIDB4NTUsIDB4NGUsIDB4NGIsIDB4NGUsIDB4NGYsIDB4NTcsIDB4NGUsIDB4NTIsIDB4MTAsIDB4NjksCiAJMHg2NCwgMHg2NSwgMHg2ZCwgMHg3MCwgMHg2ZiwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg2MywgMHg3OSwgMHg0YywgMHg2NSwgMHg3NiwgMHg2NSwgMHg2YywgMHgxMiwKLQkweDU4LCAweDBhLCAweDE0LCAweDc1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LAotCTB4NWYsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MTgsIDB4ZTcsIDB4MDcsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MjQsCi0JMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwKLQkweDJlLCAweDU1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDRmLCAweDcwLAotCTB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTIsIDB4MTMsIDB4NzUsIDB4NmUsIDB4NjksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsCi0JMHg3NCwgMHg2NSwgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgyMiwgMHg1MCwgMHgwYSwgMHgxMCwgMHg0OSwgMHg2NCwgMHg2NSwKLQkweDZkLCAweDcwLCAweDZmLCAweDc0LCAweDY1LCAweDZlLCAweDYzLCAweDc5LCAweDRjLCAweDY1LCAweDc2LCAweDY1LCAweDZjLCAweDEyLCAweDE3LCAweDBhLAotCTB4MTMsIDB4NDksIDB4NDQsIDB4NDUsIDB4NGQsIDB4NTAsIDB4NGYsIDB4NTQsIDB4NDUsIDB4NGUsIDB4NDMsIDB4NTksIDB4NWYsIDB4NTUsIDB4NGUsIDB4NGIsCi0JMHg0ZSwgMHg0ZiwgMHg1NywgMHg0ZSwgMHgxMCwgMHgwMCwgMHgxMiwgMHgxMywgMHgwYSwgMHgwZiwgMHg0ZSwgMHg0ZiwgMHg1ZiwgMHg1MywgMHg0OSwgMHg0NCwKLQkweDQ1LCAweDVmLCAweDQ1LCAweDQ2LCAweDQ2LCAweDQ1LCAweDQzLCAweDU0LCAweDUzLCAweDEwLCAweDAxLCAweDEyLCAweDBlLCAweDBhLCAweDBhLCAweDQ5LAotCTB4NDQsIDB4NDUsIDB4NGQsIDB4NTAsIDB4NGYsIDB4NTQsIDB4NDUsIDB4NGUsIDB4NTQsIDB4MTAsIDB4MDIsIDB4MmEsIDB4MDksIDB4MDgsIDB4ZTgsIDB4MDcsCi0JMHgxMCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMiwgMHgyMiwgMHg5YSwgMHgwMywgMHgwYSwgMHgxMywgMHg1NSwgMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwKLQkweDY1LCAweDcyLCAweDcwLCAweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDEyLCAweDQxLAotCTB4MGEsIDB4MDQsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTgsIDB4MDIsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MmQsIDB4MmUsIDB4NjcsCi0JMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg1NSwKKwkweDM3LCAweDBhLCAweDA4LCAweDY2LCAweDY1LCAweDYxLCAweDc0LCAweDc1LCAweDcyLCAweDY1LCAweDczLCAweDE4LCAweDIzLCAweDIwLCAweDAxLCAweDI4LAorCTB4MGIsIDB4MzIsIDB4MWIsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsCisJMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg1MywgMHg2NSwgMHg3NCwgMHg1MiwgMHgwOCwKKwkweDY2LCAweDY1LCAweDYxLCAweDc0LCAweDc1LCAweDcyLCAweDY1LCAweDczLCAweDEyLCAweDU4LCAweDBhLCAweDE0LCAweDc1LCAweDZlLCAweDY5LCAweDZlLAorCTB4NzQsIDB4NjUsIDB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NmYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsCisJMHgxOCwgMHhlNywgMHgwNywgMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyNCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwKKwkweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDU1LCAweDZlLCAweDY5LCAweDZlLCAweDc0LCAweDY1LAorCTB4NzIsIDB4NzAsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NGYsIDB4NzAsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTIsIDB4MTMsIDB4NzUsCiAJMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0ZiwgMHg3MCwgMHg3NCwgMHg2OSwKLQkweDZmLCAweDZlLCAweDJlLCAweDRlLCAweDYxLCAweDZkLCAweDY1LCAweDUwLCAweDYxLCAweDcyLCAweDc0LCAweDUyLCAweDA0LCAweDZlLCAweDYxLCAweDZkLAotCTB4NjUsIDB4MTIsIDB4MjksIDB4MGEsIDB4MTAsIDB4NjksIDB4NjQsIDB4NjUsIDB4NmUsIDB4NzQsIDB4NjksIDB4NjYsIDB4NjksIDB4NjUsIDB4NzIsIDB4NWYsCi0JMHg3NiwgMHg2MSwgMHg2YywgMHg3NSwgMHg2NSwgMHgxOCwgMHgwMywgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwZiwgMHg2OSwgMHg2NCwgMHg2NSwKLQkweDZlLCAweDc0LCAweDY5LCAweDY2LCAweDY5LCAweDY1LCAweDcyLCAweDU2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDEyLCAweDJjLCAweDBhLCAweDEyLAotCTB4NzAsIDB4NmYsIDB4NzMsIDB4NjksIDB4NzQsIDB4NjksIDB4NzYsIDB4NjUsIDB4NWYsIDB4NjksIDB4NmUsIDB4NzQsIDB4NWYsIDB4NzYsIDB4NjEsIDB4NmMsCi0JMHg3NSwgMHg2NSwgMHgxOCwgMHgwNCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwNCwgMHg1MiwgMHgxMCwgMHg3MCwgMHg2ZiwgMHg3MywgMHg2OSwgMHg3NCwgMHg2OSwKLQkweDc2LCAweDY1LCAweDQ5LCAweDZlLCAweDc0LCAweDU2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDEyLCAweDJjLCAweDBhLCAweDEyLCAweDZlLCAweDY1LAotCTB4NjcsIDB4NjEsIDB4NzQsIDB4NjksIDB4NzYsIDB4NjUsIDB4NWYsIDB4NjksIDB4NmUsIDB4NzQsIDB4NWYsIDB4NzYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsCi0JMHgxOCwgMHgwNSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwMywgMHg1MiwgMHgxMCwgMHg2ZSwgMHg2NSwgMHg2NywgMHg2MSwgMHg3NCwgMHg2OSwgMHg3NiwgMHg2NSwKLQkweDQ5LCAweDZlLCAweDc0LCAweDU2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDEyLCAweDIxLCAweDBhLCAweDBjLCAweDY0LCAweDZmLCAweDc1LCAweDYyLAotCTB4NmMsIDB4NjUsIDB4NWYsIDB4NzYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsIDB4MTgsIDB4MDYsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDEsIDB4NTIsIDB4MGIsCi0JMHg2NCwgMHg2ZiwgMHg3NSwgMHg2MiwgMHg2YywgMHg2NSwgMHg1NiwgMHg2MSwgMHg2YywgMHg3NSwgMHg2NSwgMHgxMiwgMHgyMSwgMHgwYSwgMHgwYywgMHg3MywKLQkweDc0LCAweDcyLCAweDY5LCAweDZlLCAweDY3LCAweDVmLCAweDc2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDE4LCAweDA3LCAweDIwLCAweDAxLCAweDI4LAotCTB4MGMsIDB4NTIsIDB4MGIsIDB4NzMsIDB4NzQsIDB4NzIsIDB4NjksIDB4NmUsIDB4NjcsIDB4NTYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsIDB4MTIsIDB4MjcsCi0JMHgwYSwgMHgwZiwgMHg2MSwgMHg2NywgMHg2NywgMHg3MiwgMHg2NSwgMHg2NywgMHg2MSwgMHg3NCwgMHg2NSwgMHg1ZiwgMHg3NiwgMHg2MSwgMHg2YywgMHg3NSwKLQkweDY1LCAweDE4LCAweDA4LCAweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDBlLCAweDYxLCAweDY3LCAweDY3LCAweDcyLCAweDY1LCAweDY3LCAweDYxLAotCTB4NzQsIDB4NjUsIDB4NTYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsIDB4MWEsIDB4NGEsIDB4MGEsIDB4MDgsIDB4NGUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4NTAsCi0JMHg2MSwgMHg3MiwgMHg3NCwgMHgxMiwgMHgxYiwgMHgwYSwgMHgwOSwgMHg2ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHg1ZiwgMHg3MCwgMHg2MSwgMHg3MiwgMHg3NCwKLQkweDE4LCAweDAxLCAweDIwLCAweDAyLCAweDI4LCAweDA5LCAweDUyLCAweDA4LCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDUwLCAweDYxLCAweDcyLCAweDc0LAotCTB4MTIsIDB4MjEsIDB4MGEsIDB4MGMsIDB4NjksIDB4NzMsIDB4NWYsIDB4NjUsIDB4NzgsIDB4NzQsIDB4NjUsIDB4NmUsIDB4NzMsIDB4NjksIDB4NmYsIDB4NmUsCi0JMHgxOCwgMHgwMiwgMHgyMCwgMHgwMiwgMHgyOCwgMHgwOCwgMHg1MiwgMHgwYiwgMHg2OSwgMHg3MywgMHg0NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywKLQkweDY5LCAweDZmLCAweDZlLCAweDIyLCAweGE3LCAweDAyLCAweDBhLCAweDBlLCAweDUzLCAweDZmLCAweDc1LCAweDcyLCAweDYzLCAweDY1LCAweDQzLCAweDZmLAotCTB4NjQsIDB4NjUsIDB4NDksIDB4NmUsIDB4NjYsIDB4NmYsIDB4MTIsIDB4NDQsIDB4MGEsIDB4MDgsIDB4NmMsIDB4NmYsIDB4NjMsIDB4NjEsIDB4NzQsIDB4NjksCi0JMHg2ZiwgMHg2ZSwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMywgMHgyOCwgMHgwYiwgMHgzMiwgMHgyOCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywKLQkweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDUzLCAweDZmLCAweDc1LCAweDcyLCAweDYzLAotCTB4NjUsIDB4NDMsIDB4NmYsIDB4NjQsIDB4NjUsIDB4NDksIDB4NmUsIDB4NjYsIDB4NmYsIDB4MmUsIDB4NGMsIDB4NmYsIDB4NjMsIDB4NjEsIDB4NzQsIDB4NjksCi0JMHg2ZiwgMHg2ZSwgMHg1MiwgMHgwOCwgMHg2YywgMHg2ZiwgMHg2MywgMHg2MSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxYSwgMHhjZSwgMHgwMSwgMHgwYSwKLQkweDA4LCAweDRjLCAweDZmLCAweDYzLCAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDEyLCAweDE2LCAweDBhLCAweDA0LCAweDcwLCAweDYxLCAweDc0LAotCTB4NjgsIDB4MTgsIDB4MDEsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MDUsIDB4NDIsIDB4MDIsIDB4MTAsIDB4MDEsIDB4NTIsIDB4MDQsIDB4NzAsIDB4NjEsIDB4NzQsCi0JMHg2OCwgMHgxMiwgMHgxNiwgMHgwYSwgMHgwNCwgMHg3MywgMHg3MCwgMHg2MSwgMHg2ZSwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMywgMHgyOCwgMHgwNSwgMHg0MiwKLQkweDAyLCAweDEwLCAweDAxLCAweDUyLCAweDA0LCAweDczLCAweDcwLCAweDYxLCAweDZlLCAweDEyLCAweDI5LCAweDBhLCAweDEwLCAweDZjLCAweDY1LCAweDYxLAotCTB4NjQsIDB4NjksIDB4NmUsIDB4NjcsIDB4NWYsIDB4NjMsIDB4NmYsIDB4NmQsIDB4NmQsIDB4NjUsIDB4NmUsIDB4NzQsIDB4NzMsIDB4MTgsIDB4MDMsIDB4MjAsCi0JMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwZiwgMHg2YywgMHg2NSwgMHg2MSwgMHg2NCwgMHg2OSwgMHg2ZSwgMHg2NywgMHg0MywgMHg2ZiwgMHg2ZCwgMHg2ZCwKLQkweDY1LCAweDZlLCAweDc0LCAweDczLCAweDEyLCAweDJiLCAweDBhLCAweDExLCAweDc0LCAweDcyLCAweDYxLCAweDY5LCAweDZjLCAweDY5LCAweDZlLCAweDY3LAotCTB4NWYsIDB4NjMsIDB4NmYsIDB4NmQsIDB4NmQsIDB4NjUsIDB4NmUsIDB4NzQsIDB4NzMsIDB4MTgsIDB4MDQsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsCi0JMHgxMCwgMHg3NCwgMHg3MiwgMHg2MSwgMHg2OSwgMHg2YywgMHg2OSwgMHg2ZSwgMHg2NywgMHg0MywgMHg2ZiwgMHg2ZCwgMHg2ZCwgMHg2NSwgMHg2ZSwgMHg3NCwKLQkweDczLCAweDEyLCAweDNhLCAweDBhLCAweDE5LCAweDZjLCAweDY1LCAweDYxLCAweDY0LCAweDY5LCAweDZlLCAweDY3LCAweDVmLCAweDY0LCAweDY1LCAweDc0LAotCTB4NjEsIDB4NjMsIDB4NjgsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NjMsIDB4NmYsIDB4NmQsIDB4NmQsIDB4NjUsIDB4NmUsIDB4NzQsIDB4NzMsIDB4MTgsIDB4MDYsCi0JMHgyMCwgMHgwMywgMHgyOCwgMHgwOSwgMHg1MiwgMHgxNywgMHg2YywgMHg2NSwgMHg2MSwgMHg2NCwgMHg2OSwgMHg2ZSwgMHg2NywgMHg0NCwgMHg2NSwgMHg3NCwKLQkweDYxLCAweDYzLCAweDY4LCAweDY1LCAweDY0LCAweDQzLCAweDZmLCAweDZkLCAweDZkLCAweDY1LCAweDZlLCAweDc0LCAweDczLCAweDIyLCAweGQxLCAweDAxLAotCTB4MGEsIDB4MTEsIDB4NDcsIDB4NjUsIDB4NmUsIDB4NjUsIDB4NzIsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NDMsIDB4NmYsIDB4NjQsIDB4NjUsIDB4NDksCi0JMHg2ZSwgMHg2NiwgMHg2ZiwgMHgxMiwgMHg0ZCwgMHgwYSwgMHgwYSwgMHg2MSwgMHg2ZSwgMHg2ZSwgMHg2ZiwgMHg3NCwgMHg2MSwgMHg3NCwgMHg2OSwgMHg2ZiwKLQkweDZlLCAweDE4LCAweDAxLCAweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLCAweDJkLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LAotCTB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDcsIDB4NjUsIDB4NmUsIDB4NjUsIDB4NzIsIDB4NjEsCi0JMHg3NCwgMHg2NSwgMHg2NCwgMHg0MywgMHg2ZiwgMHg2NCwgMHg2NSwgMHg0OSwgMHg2ZSwgMHg2NiwgMHg2ZiwgMHgyZSwgMHg0MSwgMHg2ZSwgMHg2ZSwgMHg2ZiwKLQkweDc0LCAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDUyLCAweDBhLCAweDYxLCAweDZlLCAweDZlLCAweDZmLCAweDc0LCAweDYxLCAweDc0LCAweDY5LAotCTB4NmYsIDB4NmUsIDB4MWEsIDB4NmQsIDB4MGEsIDB4MGEsIDB4NDEsIDB4NmUsIDB4NmUsIDB4NmYsIDB4NzQsIDB4NjEsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsCi0JMHgxMiwgMHgxNiwgMHgwYSwgMHgwNCwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMywgMHgyOCwgMHgwNSwgMHg0MiwgMHgwMiwKLQkweDEwLCAweDAxLCAweDUyLCAweDA0LCAweDcwLCAweDYxLCAweDc0LCAweDY4LCAweDEyLCAweDFmLCAweDBhLCAweDBiLCAweDczLCAweDZmLCAweDc1LCAweDcyLAotCTB4NjMsIDB4NjUsIDB4NWYsIDB4NjYsIDB4NjksIDB4NmMsIDB4NjUsIDB4MTgsIDB4MDIsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDksIDB4NTIsIDB4MGEsIDB4NzMsCi0JMHg2ZiwgMHg3NSwgMHg3MiwgMHg2MywgMHg2NSwgMHg0NiwgMHg2OSwgMHg2YywgMHg2NSwgMHgxMiwgMHgxNCwgMHgwYSwgMHgwNSwgMHg2MiwgMHg2NSwgMHg2NywKLQkweDY5LCAweDZlLCAweDE4LCAweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDA1LCAweDUyLCAweDA1LCAweDYyLCAweDY1LCAweDY3LCAweDY5LCAweDZlLCAweDEyLAotCTB4MTAsIDB4MGEsIDB4MDMsIDB4NjUsIDB4NmUsIDB4NjQsIDB4MTgsIDB4MDQsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDUsIDB4NTIsIDB4MDMsIDB4NjUsIDB4NmUsCi0JMHg2NCwgMHg0MiwgMHg3ZSwgMHgwYSwgMHgxMywgMHg2MywgMHg2ZiwgMHg2ZCwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwKLQkweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDQyLCAweDEwLCAweDQ0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LAotCTB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NzMsIDB4NDgsIDB4MDEsIDB4NWEsIDB4MmQsIDB4NjcsIDB4NmYsCi0JMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2YywgMHg2MSwgMHg2ZSwgMHg2NywgMHgyZSwgMHg2ZiwgMHg3MiwgMHg2NywgMHgyZiwKLQkweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJmLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDczLCAweDJmLCAweDY0LAotCTB4NjUsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzQsIDB4NmYsIDB4NzIsIDB4NzAsIDB4NjIsIDB4ZjgsIDB4MDEsIDB4MDEsIDB4YTIsIDB4MDIsCi0JMHgwMywgMHg0NywgMHg1MCwgMHg0MiwgMHhhYSwgMHgwMiwgMHgxYSwgMHg0NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg1MCwgMHg3MiwKLQkweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDUyLCAweDY1LCAweDY2LCAweDZjLCAweDY1LCAweDYzLCAweDc0LCAweDY5LCAweDZmLAotCTB4NmUsCisJMHg2ZiwgMHg2ZSwgMHgyMiwgMHg1MCwgMHgwYSwgMHgxMCwgMHg0OSwgMHg2NCwgMHg2NSwgMHg2ZCwgMHg3MCwgMHg2ZiwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg2MywKKwkweDc5LCAweDRjLCAweDY1LCAweDc2LCAweDY1LCAweDZjLCAweDEyLCAweDE3LCAweDBhLCAweDEzLCAweDQ5LCAweDQ0LCAweDQ1LCAweDRkLCAweDUwLCAweDRmLAorCTB4NTQsIDB4NDUsIDB4NGUsIDB4NDMsIDB4NTksIDB4NWYsIDB4NTUsIDB4NGUsIDB4NGIsIDB4NGUsIDB4NGYsIDB4NTcsIDB4NGUsIDB4MTAsIDB4MDAsIDB4MTIsCisJMHgxMywgMHgwYSwgMHgwZiwgMHg0ZSwgMHg0ZiwgMHg1ZiwgMHg1MywgMHg0OSwgMHg0NCwgMHg0NSwgMHg1ZiwgMHg0NSwgMHg0NiwgMHg0NiwgMHg0NSwgMHg0MywKKwkweDU0LCAweDUzLCAweDEwLCAweDAxLCAweDEyLCAweDBlLCAweDBhLCAweDBhLCAweDQ5LCAweDQ0LCAweDQ1LCAweDRkLCAweDUwLCAweDRmLCAweDU0LCAweDQ1LAorCTB4NGUsIDB4NTQsIDB4MTAsIDB4MDIsIDB4MmEsIDB4MDksIDB4MDgsIDB4ZTgsIDB4MDcsIDB4MTAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDIsIDB4MjIsCisJMHg5YSwgMHgwMywgMHgwYSwgMHgxMywgMHg1NSwgMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3NCwgMHg2NSwKKwkweDY0LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDEyLCAweDQxLCAweDBhLCAweDA0LCAweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDE4LAorCTB4MDIsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MmQsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsCisJMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg1NSwgMHg2ZSwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg3MCwKKwkweDcyLCAweDY1LCAweDc0LCAweDY1LCAweDY0LCAweDRmLCAweDcwLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDJlLCAweDRlLCAweDYxLCAweDZkLCAweDY1LAorCTB4NTAsIDB4NjEsIDB4NzIsIDB4NzQsIDB4NTIsIDB4MDQsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4MTIsIDB4MjksIDB4MGEsIDB4MTAsIDB4NjksIDB4NjQsCisJMHg2NSwgMHg2ZSwgMHg3NCwgMHg2OSwgMHg2NiwgMHg2OSwgMHg2NSwgMHg3MiwgMHg1ZiwgMHg3NiwgMHg2MSwgMHg2YywgMHg3NSwgMHg2NSwgMHgxOCwgMHgwMywKKwkweDIwLCAweDAxLCAweDI4LCAweDA5LCAweDUyLCAweDBmLCAweDY5LCAweDY0LCAweDY1LCAweDZlLCAweDc0LCAweDY5LCAweDY2LCAweDY5LCAweDY1LCAweDcyLAorCTB4NTYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsIDB4MTIsIDB4MmMsIDB4MGEsIDB4MTIsIDB4NzAsIDB4NmYsIDB4NzMsIDB4NjksIDB4NzQsIDB4NjksIDB4NzYsCisJMHg2NSwgMHg1ZiwgMHg2OSwgMHg2ZSwgMHg3NCwgMHg1ZiwgMHg3NiwgMHg2MSwgMHg2YywgMHg3NSwgMHg2NSwgMHgxOCwgMHgwNCwgMHgyMCwgMHgwMSwgMHgyOCwKKwkweDA0LCAweDUyLCAweDEwLCAweDcwLCAweDZmLCAweDczLCAweDY5LCAweDc0LCAweDY5LCAweDc2LCAweDY1LCAweDQ5LCAweDZlLCAweDc0LCAweDU2LCAweDYxLAorCTB4NmMsIDB4NzUsIDB4NjUsIDB4MTIsIDB4MmMsIDB4MGEsIDB4MTIsIDB4NmUsIDB4NjUsIDB4NjcsIDB4NjEsIDB4NzQsIDB4NjksIDB4NzYsIDB4NjUsIDB4NWYsCisJMHg2OSwgMHg2ZSwgMHg3NCwgMHg1ZiwgMHg3NiwgMHg2MSwgMHg2YywgMHg3NSwgMHg2NSwgMHgxOCwgMHgwNSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwMywgMHg1MiwKKwkweDEwLCAweDZlLCAweDY1LCAweDY3LCAweDYxLCAweDc0LCAweDY5LCAweDc2LCAweDY1LCAweDQ5LCAweDZlLCAweDc0LCAweDU2LCAweDYxLCAweDZjLCAweDc1LAorCTB4NjUsIDB4MTIsIDB4MjEsIDB4MGEsIDB4MGMsIDB4NjQsIDB4NmYsIDB4NzUsIDB4NjIsIDB4NmMsIDB4NjUsIDB4NWYsIDB4NzYsIDB4NjEsIDB4NmMsIDB4NzUsCisJMHg2NSwgMHgxOCwgMHgwNiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwMSwgMHg1MiwgMHgwYiwgMHg2NCwgMHg2ZiwgMHg3NSwgMHg2MiwgMHg2YywgMHg2NSwgMHg1NiwKKwkweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDEyLCAweDIxLCAweDBhLCAweDBjLCAweDczLCAweDc0LCAweDcyLCAweDY5LCAweDZlLCAweDY3LCAweDVmLCAweDc2LAorCTB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsIDB4MTgsIDB4MDcsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MGMsIDB4NTIsIDB4MGIsIDB4NzMsIDB4NzQsIDB4NzIsIDB4NjksCisJMHg2ZSwgMHg2NywgMHg1NiwgMHg2MSwgMHg2YywgMHg3NSwgMHg2NSwgMHgxMiwgMHgyNywgMHgwYSwgMHgwZiwgMHg2MSwgMHg2NywgMHg2NywgMHg3MiwgMHg2NSwKKwkweDY3LCAweDYxLCAweDc0LCAweDY1LCAweDVmLCAweDc2LCAweDYxLCAweDZjLCAweDc1LCAweDY1LCAweDE4LCAweDA4LCAweDIwLCAweDAxLCAweDI4LCAweDA5LAorCTB4NTIsIDB4MGUsIDB4NjEsIDB4NjcsIDB4NjcsIDB4NzIsIDB4NjUsIDB4NjcsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NTYsIDB4NjEsIDB4NmMsIDB4NzUsIDB4NjUsCisJMHgxYSwgMHg0YSwgMHgwYSwgMHgwOCwgMHg0ZSwgMHg2MSwgMHg2ZCwgMHg2NSwgMHg1MCwgMHg2MSwgMHg3MiwgMHg3NCwgMHgxMiwgMHgxYiwgMHgwYSwgMHgwOSwKKwkweDZlLCAweDYxLCAweDZkLCAweDY1LCAweDVmLCAweDcwLCAweDYxLCAweDcyLCAweDc0LCAweDE4LCAweDAxLCAweDIwLCAweDAyLCAweDI4LCAweDA5LCAweDUyLAorCTB4MDgsIDB4NmUsIDB4NjEsIDB4NmQsIDB4NjUsIDB4NTAsIDB4NjEsIDB4NzIsIDB4NzQsIDB4MTIsIDB4MjEsIDB4MGEsIDB4MGMsIDB4NjksIDB4NzMsIDB4NWYsCisJMHg2NSwgMHg3OCwgMHg3NCwgMHg2NSwgMHg2ZSwgMHg3MywgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMiwgMHgyOCwgMHgwOCwgMHg1MiwKKwkweDBiLCAweDY5LCAweDczLCAweDQ1LCAweDc4LCAweDc0LCAweDY1LCAweDZlLCAweDczLCAweDY5LCAweDZmLCAweDZlLCAweDIyLCAweDhjLCAweDBhLCAweDBhLAorCTB4MGEsIDB4NDYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MTIsIDB4OGIsIDB4MDEsIDB4MGEsIDB4MGUsCisJMHg2NiwgMHg2OSwgMHg2NSwgMHg2YywgMHg2NCwgMHg1ZiwgMHg3MCwgMHg3MiwgMHg2NSwgMHg3MywgMHg2NSwgMHg2ZSwgMHg2MywgMHg2NSwgMHgxOCwgMHgwMSwKKwkweDIwLCAweDAxLCAweDI4LCAweDBlLCAweDMyLCAweDI5LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLAorCTB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NTMsIDB4NjUsCisJMHg3NCwgMHgyZSwgMHg0NiwgMHg2OSwgMHg2NSwgMHg2YywgMHg2NCwgMHg1MCwgMHg3MiwgMHg2NSwgMHg3MywgMHg2NSwgMHg2ZSwgMHg2MywgMHg2NSwgMHg0MiwKKwkweDM5LCAweDg4LCAweDAxLCAweDAxLCAweDk4LCAweDAxLCAweDA0LCAweDk4LCAweDAxLCAweDAxLCAweGEyLCAweDAxLCAweDBkLCAweDEyLCAweDA4LCAweDQ1LAorCTB4NTgsIDB4NTAsIDB4NGMsIDB4NDksIDB4NDMsIDB4NDksIDB4NTQsIDB4MTgsIDB4ZTYsIDB4MDcsIDB4YTIsIDB4MDEsIDB4MGQsIDB4MTIsIDB4MDgsIDB4NDksCisJMHg0ZCwgMHg1MCwgMHg0YywgMHg0OSwgMHg0MywgMHg0OSwgMHg1NCwgMHgxOCwgMHhlNywgMHgwNywgMHhhMiwgMHgwMSwgMHgwZCwgMHgxMiwgMHgwOCwgMHg0NSwKKwkweDU4LCAweDUwLCAweDRjLCAweDQ5LCAweDQzLCAweDQ5LCAweDU0LCAweDE4LCAweGU4LCAweDA3LCAweDUyLCAweDBkLCAweDY2LCAweDY5LCAweDY1LCAweDZjLAorCTB4NjQsIDB4NTAsIDB4NzIsIDB4NjUsIDB4NzMsIDB4NjUsIDB4NmUsIDB4NjMsIDB4NjUsIDB4MTIsIDB4NjYsIDB4MGEsIDB4MDksIDB4NjUsIDB4NmUsIDB4NzUsCisJMHg2ZCwgMHg1ZiwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwZSwgMHgzMiwgMHgyNCwgMHgyZSwgMHg2NywKKwkweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ2LAorCTB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MmUsIDB4NDUsIDB4NmUsIDB4NzUsIDB4NmQsIDB4NTQsIDB4NzksCisJMHg3MCwgMHg2NSwgMHg0MiwgMHgyMywgMHg4OCwgMHgwMSwgMHgwMSwgMHg5OCwgMHgwMSwgMHgwNiwgMHg5OCwgMHgwMSwgMHgwMSwgMHhhMiwgMHgwMSwgMHgwYiwKKwkweDEyLCAweDA2LCAweDQzLCAweDRjLCAweDRmLCAweDUzLCAweDQ1LCAweDQ0LCAweDE4LCAweGU2LCAweDA3LCAweGEyLCAweDAxLCAweDA5LCAweDEyLCAweDA0LAorCTB4NGYsIDB4NTAsIDB4NDUsIDB4NGUsIDB4MTgsIDB4ZTcsIDB4MDcsIDB4NTIsIDB4MDgsIDB4NjUsIDB4NmUsIDB4NzUsIDB4NmQsIDB4NTQsIDB4NzksIDB4NzAsCisJMHg2NSwgMHgxMiwgMHg5MiwgMHgwMSwgMHgwYSwgMHgxNywgMHg3MiwgMHg2NSwgMHg3MCwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg1ZiwgMHg2NiwKKwkweDY5LCAweDY1LCAweDZjLCAweDY0LCAweDVmLCAweDY1LCAweDZlLCAweDYzLCAweDZmLCAweDY0LCAweDY5LCAweDZlLCAweDY3LCAweDE4LCAweDAzLCAweDIwLAorCTB4MDEsIDB4MjgsIDB4MGUsIDB4MzIsIDB4MzEsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsCisJMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg1MywgMHg2NSwgMHg3NCwKKwkweDJlLCAweDUyLCAweDY1LCAweDcwLCAweDY1LCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDQ2LCAweDY5LCAweDY1LCAweDZjLCAweDY0LCAweDQ1LCAweDZlLAorCTB4NjMsIDB4NmYsIDB4NjQsIDB4NjksIDB4NmUsIDB4NjcsIDB4NDIsIDB4MjcsIDB4ODgsIDB4MDEsIDB4MDEsIDB4OTgsIDB4MDEsIDB4MDQsIDB4OTgsIDB4MDEsCisJMHgwMSwgMHhhMiwgMHgwMSwgMHgwZCwgMHgxMiwgMHgwOCwgMHg0NSwgMHg1OCwgMHg1MCwgMHg0MSwgMHg0ZSwgMHg0NCwgMHg0NSwgMHg0NCwgMHgxOCwgMHhlNiwKKwkweDA3LCAweGEyLCAweDAxLCAweDBiLCAweDEyLCAweDA2LCAweDUwLCAweDQxLCAweDQzLCAweDRiLCAweDQ1LCAweDQ0LCAweDE4LCAweGU3LCAweDA3LCAweDUyLAorCTB4MTUsIDB4NzIsIDB4NjUsIDB4NzAsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsIDB4NjQsIDB4NDUsIDB4NmUsCisJMHg2MywgMHg2ZiwgMHg2NCwgMHg2OSwgMHg2ZSwgMHg2NywgMHgxMiwgMHg3OCwgMHgwYSwgMHgwZiwgMHg3NSwgMHg3NCwgMHg2NiwgMHgzOCwgMHg1ZiwgMHg3NiwKKwkweDYxLCAweDZjLCAweDY5LCAweDY0LCAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDE4LCAweDA0LCAweDIwLCAweDAxLCAweDI4LCAweDBlLCAweDMyLAorCTB4MmEsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsCisJMHg2NiwgMHgyZSwgMHg0NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyZSwgMHg1NSwgMHg3NCwgMHg2NiwKKwkweDM4LCAweDU2LCAweDYxLCAweDZjLCAweDY5LCAweDY0LCAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDQyLCAweDIzLCAweDg4LCAweDAxLCAweDAxLAorCTB4OTgsIDB4MDEsIDB4MDQsIDB4OTgsIDB4MDEsIDB4MDEsIDB4YTIsIDB4MDEsIDB4MDksIDB4MTIsIDB4MDQsIDB4NGUsIDB4NGYsIDB4NGUsIDB4NDUsIDB4MTgsCisJMHhlNiwgMHgwNywgMHhhMiwgMHgwMSwgMHgwYiwgMHgxMiwgMHgwNiwgMHg1NiwgMHg0NSwgMHg1MiwgMHg0OSwgMHg0NiwgMHg1OSwgMHgxOCwgMHhlNywgMHgwNywKKwkweDUyLCAweDBlLCAweDc1LCAweDc0LCAweDY2LCAweDM4LCAweDU2LCAweDYxLCAweDZjLCAweDY5LCAweDY0LCAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLAorCTB4MTIsIDB4NzgsIDB4MGEsIDB4MTAsIDB4NmQsIDB4NjUsIDB4NzMsIDB4NzMsIDB4NjEsIDB4NjcsIDB4NjUsIDB4NWYsIDB4NjUsIDB4NmUsIDB4NjMsIDB4NmYsCisJMHg2NCwgMHg2OSwgMHg2ZSwgMHg2NywgMHgxOCwgMHgwNSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwZSwgMHgzMiwgMHgyYiwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwKKwkweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDYyLCAweDc1LCAweDY2LCAweDJlLCAweDQ2LCAweDY1LCAweDYxLAorCTB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MmUsIDB4NGQsIDB4NjUsIDB4NzMsIDB4NzMsIDB4NjEsIDB4NjcsIDB4NjUsIDB4NDUsCisJMHg2ZSwgMHg2MywgMHg2ZiwgMHg2NCwgMHg2OSwgMHg2ZSwgMHg2NywgMHg0MiwgMHgyMCwgMHg4OCwgMHgwMSwgMHgwMSwgMHg5OCwgMHgwMSwgMHgwNCwgMHg5OCwKKwkweDAxLCAweDAxLCAweGEyLCAweDAxLCAweDE0LCAweDEyLCAweDBmLCAweDRjLCAweDQ1LCAweDRlLCAweDQ3LCAweDU0LCAweDQ4LCAweDVmLCAweDUwLCAweDUyLAorCTB4NDUsIDB4NDYsIDB4NDksIDB4NTgsIDB4NDUsIDB4NDQsIDB4MTgsIDB4ZTYsIDB4MDcsIDB4NTIsIDB4MGYsIDB4NmQsIDB4NjUsIDB4NzMsIDB4NzMsIDB4NjEsCisJMHg2NywgMHg2NSwgMHg0NSwgMHg2ZSwgMHg2MywgMHg2ZiwgMHg2NCwgMHg2OSwgMHg2ZSwgMHg2NywgMHgxMiwgMHg3YywgMHgwYSwgMHgwYiwgMHg2YSwgMHg3MywKKwkweDZmLCAweDZlLCAweDVmLCAweDY2LCAweDZmLCAweDcyLCAweDZkLCAweDYxLCAweDc0LCAweDE4LCAweDA2LCAweDIwLCAweDAxLCAweDI4LCAweDBlLCAweDMyLAorCTB4MjYsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsCisJMHg2NiwgMHgyZSwgMHg0NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyZSwgMHg0YSwgMHg3MywgMHg2ZiwKKwkweDZlLCAweDQ2LCAweDZmLCAweDcyLCAweDZkLCAweDYxLCAweDc0LCAweDQyLCAweDMzLCAweDg4LCAweDAxLCAweDAxLCAweDk4LCAweDAxLCAweDAzLCAweDk4LAorCTB4MDEsIDB4MDYsIDB4OTgsIDB4MDEsIDB4MDEsIDB4YTIsIDB4MDEsIDB4MTcsIDB4MTIsIDB4MTIsIDB4NGMsIDB4NDUsIDB4NDcsIDB4NDEsIDB4NDMsIDB4NTksCisJMHg1ZiwgMHg0MiwgMHg0NSwgMHg1MywgMHg1NCwgMHg1ZiwgMHg0NSwgMHg0NiwgMHg0NiwgMHg0ZiwgMHg1MiwgMHg1NCwgMHgxOCwgMHhlNiwgMHgwNywgMHhhMiwKKwkweDAxLCAweDBhLCAweDEyLCAweDA1LCAweDQxLCAweDRjLCAweDRjLCAweDRmLCAweDU3LCAweDE4LCAweGU3LCAweDA3LCAweDUyLCAweDBhLCAweDZhLCAweDczLAorCTB4NmYsIDB4NmUsIDB4NDYsIDB4NmYsIDB4NzIsIDB4NmQsIDB4NjEsIDB4NzQsIDB4MjIsIDB4NWMsIDB4MGEsIDB4MGQsIDB4NDYsIDB4NjksIDB4NjUsIDB4NmMsCisJMHg2NCwgMHg1MCwgMHg3MiwgMHg2NSwgMHg3MywgMHg2NSwgMHg2ZSwgMHg2MywgMHg2NSwgMHgxMiwgMHgxYSwgMHgwYSwgMHgxNiwgMHg0NiwgMHg0OSwgMHg0NSwKKwkweDRjLCAweDQ0LCAweDVmLCAweDUwLCAweDUyLCAweDQ1LCAweDUzLCAweDQ1LCAweDRlLCAweDQzLCAweDQ1LCAweDVmLCAweDU1LCAweDRlLCAweDRiLCAweDRlLAorCTB4NGYsIDB4NTcsIDB4NGUsIDB4MTAsIDB4MDAsIDB4MTIsIDB4MGMsIDB4MGEsIDB4MDgsIDB4NDUsIDB4NTgsIDB4NTAsIDB4NGMsIDB4NDksIDB4NDMsIDB4NDksCisJMHg1NCwgMHgxMCwgMHgwMSwgMHgxMiwgMHgwYywgMHgwYSwgMHgwOCwgMHg0OSwgMHg0ZCwgMHg1MCwgMHg0YywgMHg0OSwgMHg0MywgMHg0OSwgMHg1NCwgMHgxMCwKKwkweDAyLCAweDEyLCAweDEzLCAweDBhLCAweDBmLCAweDRjLCAweDQ1LCAweDQ3LCAweDQxLCAweDQzLCAweDU5LCAweDVmLCAweDUyLCAweDQ1LCAweDUxLCAweDU1LAorCTB4NDksIDB4NTIsIDB4NDUsIDB4NDQsIDB4MTAsIDB4MDMsIDB4MjIsIDB4MzcsIDB4MGEsIDB4MDgsIDB4NDUsIDB4NmUsIDB4NzUsIDB4NmQsIDB4NTQsIDB4NzksCisJMHg3MCwgMHg2NSwgMHgxMiwgMHgxNSwgMHgwYSwgMHgxMSwgMHg0NSwgMHg0ZSwgMHg1NSwgMHg0ZCwgMHg1ZiwgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NSwgMHg1ZiwKKwkweDU1LCAweDRlLCAweDRiLCAweDRlLCAweDRmLCAweDU3LCAweDRlLCAweDEwLCAweDAwLCAweDEyLCAweDA4LCAweDBhLCAweDA0LCAweDRmLCAweDUwLCAweDQ1LAorCTB4NGUsIDB4MTAsIDB4MDEsIDB4MTIsIDB4MGEsIDB4MGEsIDB4MDYsIDB4NDMsIDB4NGMsIDB4NGYsIDB4NTMsIDB4NDUsIDB4NDQsIDB4MTAsIDB4MDIsIDB4MjIsCisJMHg1NiwgMHgwYSwgMHgxNSwgMHg1MiwgMHg2NSwgMHg3MCwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0NiwgMHg2OSwgMHg2NSwgMHg2YywgMHg2NCwKKwkweDQ1LCAweDZlLCAweDYzLCAweDZmLCAweDY0LCAweDY5LCAweDZlLCAweDY3LCAweDEyLCAweDIzLCAweDBhLCAweDFmLCAweDUyLCAweDQ1LCAweDUwLCAweDQ1LAorCTB4NDEsIDB4NTQsIDB4NDUsIDB4NDQsIDB4NWYsIDB4NDYsIDB4NDksIDB4NDUsIDB4NGMsIDB4NDQsIDB4NWYsIDB4NDUsIDB4NGUsIDB4NDMsIDB4NGYsIDB4NDQsCisJMHg0OSwgMHg0ZSwgMHg0NywgMHg1ZiwgMHg1NSwgMHg0ZSwgMHg0YiwgMHg0ZSwgMHg0ZiwgMHg1NywgMHg0ZSwgMHgxMCwgMHgwMCwgMHgxMiwgMHgwYSwgMHgwYSwKKwkweDA2LCAweDUwLCAweDQxLCAweDQzLCAweDRiLCAweDQ1LCAweDQ0LCAweDEwLCAweDAxLCAweDEyLCAweDBjLCAweDBhLCAweDA4LCAweDQ1LCAweDU4LCAweDUwLAorCTB4NDEsIDB4NGUsIDB4NDQsIDB4NDUsIDB4NDQsIDB4MTAsIDB4MDIsIDB4MjIsIDB4NDMsIDB4MGEsIDB4MGUsIDB4NTUsIDB4NzQsIDB4NjYsIDB4MzgsIDB4NTYsCisJMHg2MSwgMHg2YywgMHg2OSwgMHg2NCwgMHg2MSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxMiwgMHgxYiwgMHgwYSwgMHgxNywgMHg1NSwgMHg1NCwgMHg0NiwKKwkweDM4LCAweDVmLCAweDU2LCAweDQxLCAweDRjLCAweDQ5LCAweDQ0LCAweDQxLCAweDU0LCAweDQ5LCAweDRmLCAweDRlLCAweDVmLCAweDU1LCAweDRlLCAweDRiLAorCTB4NGUsIDB4NGYsIDB4NTcsIDB4NGUsIDB4MTAsIDB4MDAsIDB4MTIsIDB4MGEsIDB4MGEsIDB4MDYsIDB4NTYsIDB4NDUsIDB4NTIsIDB4NDksIDB4NDYsIDB4NTksCisJMHgxMCwgMHgwMiwgMHgxMiwgMHgwOCwgMHgwYSwgMHgwNCwgMHg0ZSwgMHg0ZiwgMHg0ZSwgMHg0NSwgMHgxMCwgMHgwMywgMHgyMiwgMHg1MywgMHgwYSwgMHgwZiwKKwkweDRkLCAweDY1LCAweDczLCAweDczLCAweDYxLCAweDY3LCAweDY1LCAweDQ1LCAweDZlLCAweDYzLCAweDZmLCAweDY0LCAweDY5LCAweDZlLCAweDY3LCAweDEyLAorCTB4MWMsIDB4MGEsIDB4MTgsIDB4NGQsIDB4NDUsIDB4NTMsIDB4NTMsIDB4NDEsIDB4NDcsIDB4NDUsIDB4NWYsIDB4NDUsIDB4NGUsIDB4NDMsIDB4NGYsIDB4NDQsCisJMHg0OSwgMHg0ZSwgMHg0NywgMHg1ZiwgMHg1NSwgMHg0ZSwgMHg0YiwgMHg0ZSwgMHg0ZiwgMHg1NywgMHg0ZSwgMHgxMCwgMHgwMCwgMHgxMiwgMHgxMywgMHgwYSwKKwkweDBmLCAweDRjLCAweDQ1LCAweDRlLCAweDQ3LCAweDU0LCAweDQ4LCAweDVmLCAweDUwLCAweDUyLCAweDQ1LCAweDQ2LCAweDQ5LCAweDU4LCAweDQ1LCAweDQ0LAorCTB4MTAsIDB4MDEsIDB4MTIsIDB4MGQsIDB4MGEsIDB4MDksIDB4NDQsIDB4NDUsIDB4NGMsIDB4NDksIDB4NGQsIDB4NDksIDB4NTQsIDB4NDUsIDB4NDQsIDB4MTAsCisJMHgwMiwgMHgyMiwgMHg0OCwgMHgwYSwgMHgwYSwgMHg0YSwgMHg3MywgMHg2ZiwgMHg2ZSwgMHg0NiwgMHg2ZiwgMHg3MiwgMHg2ZCwgMHg2MSwgMHg3NCwgMHgxMiwKKwkweDE3LCAweDBhLCAweDEzLCAweDRhLCAweDUzLCAweDRmLCAweDRlLCAweDVmLCAweDQ2LCAweDRmLCAweDUyLCAweDRkLCAweDQxLCAweDU0LCAweDVmLCAweDU1LAorCTB4NGUsIDB4NGIsIDB4NGUsIDB4NGYsIDB4NTcsIDB4NGUsIDB4MTAsIDB4MDAsIDB4MTIsIDB4MDksIDB4MGEsIDB4MDUsIDB4NDEsIDB4NGMsIDB4NGMsIDB4NGYsCisJMHg1NywgMHgxMCwgMHgwMSwgMHgxMiwgMHgxNiwgMHgwYSwgMHgxMiwgMHg0YywgMHg0NSwgMHg0NywgMHg0MSwgMHg0MywgMHg1OSwgMHg1ZiwgMHg0MiwgMHg0NSwKKwkweDUzLCAweDU0LCAweDVmLCAweDQ1LCAweDQ2LCAweDQ2LCAweDRmLCAweDUyLCAweDU0LCAweDEwLCAweDAyLCAweDJhLCAweDA2LCAweDA4LCAweGU4LCAweDA3LAorCTB4MTAsIDB4ZTksIDB4MDcsIDB4MmEsIDB4MDYsIDB4MDgsIDB4ZTksIDB4MDcsIDB4MTAsIDB4ZWEsIDB4MDcsIDB4MmEsIDB4MDYsIDB4MDgsIDB4ZWEsIDB4MDcsCisJMHgxMCwgMHhlYiwgMHgwNywgMHgyYSwgMHgwNiwgMHgwOCwgMHg4YiwgMHg0ZSwgMHgxMCwgMHg5MCwgMHg0ZSwgMHgyYSwgMHgwNiwgMHgwOCwgMHg5MCwgMHg0ZSwKKwkweDEwLCAweDkxLCAweDRlLCAweDRhLCAweDA2LCAweDA4LCAweGU3LCAweDA3LCAweDEwLCAweGU4LCAweDA3LCAweDIyLCAweGZlLCAweDAyLCAweDBhLCAweDEyLAorCTB4NDYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NTMsIDB4NjUsIDB4NzQsIDB4NDQsIDB4NjUsIDB4NjYsIDB4NjEsIDB4NzUsIDB4NmMsCisJMHg3NCwgMHg3MywgMHgxMiwgMHg1OCwgMHgwYSwgMHgwOCwgMHg2NCwgMHg2NSwgMHg2NiwgMHg2MSwgMHg3NSwgMHg2YywgMHg3NCwgMHg3MywgMHgxOCwgMHgwMSwKKwkweDIwLCAweDAzLCAweDI4LCAweDBiLCAweDMyLCAweDNjLCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLAorCTB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NTMsIDB4NjUsCisJMHg3NCwgMHg0NCwgMHg2NSwgMHg2NiwgMHg2MSwgMHg3NSwgMHg2YywgMHg3NCwgMHg3MywgMHgyZSwgMHg0NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwKKwkweDY1LCAweDUzLCAweDY1LCAweDc0LCAweDQ1LCAweDY0LCAweDY5LCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDQ0LCAweDY1LCAweDY2LCAweDYxLCAweDc1LAorCTB4NmMsIDB4NzQsIDB4NTIsIDB4MDgsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjEsIDB4NzUsIDB4NmMsIDB4NzQsIDB4NzMsIDB4MTIsIDB4NDEsIDB4MGEsIDB4MGYsCisJMHg2ZCwgMHg2OSwgMHg2ZSwgMHg2OSwgMHg2ZCwgMHg3NSwgMHg2ZCwgMHg1ZiwgMHg2NSwgMHg2NCwgMHg2OSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxOCwKKwkweDA0LCAweDIwLCAweDAxLCAweDI4LCAweDBlLCAweDMyLCAweDE4LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLAorCTB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NDUsIDB4NjQsIDB4NjksIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4NTIsCisJMHgwZSwgMHg2ZCwgMHg2OSwgMHg2ZSwgMHg2OSwgMHg2ZCwgMHg3NSwgMHg2ZCwgMHg0NSwgMHg2NCwgMHg2OSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxMiwKKwkweDQxLCAweDBhLCAweDBmLCAweDZkLCAweDYxLCAweDc4LCAweDY5LCAweDZkLCAweDc1LCAweDZkLCAweDVmLCAweDY1LCAweDY0LCAweDY5LCAweDc0LCAweDY5LAorCTB4NmYsIDB4NmUsIDB4MTgsIDB4MDUsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MGUsIDB4MzIsIDB4MTgsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsCisJMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NSwgMHg2NCwgMHg2OSwgMHg3NCwgMHg2OSwKKwkweDZmLCAweDZlLCAweDUyLCAweDBlLCAweDZkLCAweDYxLCAweDc4LCAweDY5LCAweDZkLCAweDc1LCAweDZkLCAweDQ1LCAweDY0LCAweDY5LCAweDc0LCAweDY5LAorCTB4NmYsIDB4NmUsIDB4MWEsIDB4ODcsIDB4MDEsIDB4MGEsIDB4MTgsIDB4NDYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NTMsIDB4NjUsCisJMHg3NCwgMHg0NSwgMHg2NCwgMHg2OSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg0NCwgMHg2NSwgMHg2NiwgMHg2MSwgMHg3NSwgMHg2YywgMHg3NCwgMHgxMiwKKwkweDMyLCAweDBhLCAweDA3LCAweDY1LCAweDY0LCAweDY5LCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDE4LCAweDAzLCAweDIwLCAweDAxLCAweDI4LCAweDBlLAorCTB4MzIsIDB4MTgsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsCisJMHg3NSwgMHg2NiwgMHgyZSwgMHg0NSwgMHg2NCwgMHg2OSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MiwgMHgwNywgMHg2NSwgMHg2NCwgMHg2OSwgMHg3NCwKKwkweDY5LCAweDZmLCAweDZlLCAweDEyLCAweDM3LCAweDBhLCAweDA4LCAweDY2LCAweDY1LCAweDYxLCAweDc0LCAweDc1LCAweDcyLCAweDY1LCAweDczLCAweDE4LAorCTB4MDIsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MWIsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsCisJMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwgMHg1MywKKwkweDY1LCAweDc0LCAweDUyLCAweDA4LCAweDY2LCAweDY1LCAweDYxLCAweDc0LCAweDc1LCAweDcyLCAweDY1LCAweDczLCAweDIyLCAweGE3LCAweDAyLCAweDBhLAorCTB4MGUsIDB4NTMsIDB4NmYsIDB4NzUsIDB4NzIsIDB4NjMsIDB4NjUsIDB4NDMsIDB4NmYsIDB4NjQsIDB4NjUsIDB4NDksIDB4NmUsIDB4NjYsIDB4NmYsIDB4MTIsCisJMHg0NCwgMHgwYSwgMHgwOCwgMHg2YywgMHg2ZiwgMHg2MywgMHg2MSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxOCwgMHgwMSwgMHgyMCwgMHgwMywgMHgyOCwKKwkweDBiLCAweDMyLCAweDI4LCAweDJlLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLAorCTB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsIDB4NTMsIDB4NmYsIDB4NzUsIDB4NzIsIDB4NjMsIDB4NjUsIDB4NDMsIDB4NmYsIDB4NjQsIDB4NjUsIDB4NDksIDB4NmUsCisJMHg2NiwgMHg2ZiwgMHgyZSwgMHg0YywgMHg2ZiwgMHg2MywgMHg2MSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg1MiwgMHgwOCwgMHg2YywgMHg2ZiwgMHg2MywKKwkweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDFhLCAweGNlLCAweDAxLCAweDBhLCAweDA4LCAweDRjLCAweDZmLCAweDYzLCAweDYxLCAweDc0LCAweDY5LAorCTB4NmYsIDB4NmUsIDB4MTIsIDB4MTYsIDB4MGEsIDB4MDQsIDB4NzAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MTgsIDB4MDEsIDB4MjAsIDB4MDMsIDB4MjgsIDB4MDUsCisJMHg0MiwgMHgwMiwgMHgxMCwgMHgwMSwgMHg1MiwgMHgwNCwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgxMiwgMHgxNiwgMHgwYSwgMHgwNCwgMHg3MywgMHg3MCwKKwkweDYxLCAweDZlLCAweDE4LCAweDAyLCAweDIwLCAweDAzLCAweDI4LCAweDA1LCAweDQyLCAweDAyLCAweDEwLCAweDAxLCAweDUyLCAweDA0LCAweDczLCAweDcwLAorCTB4NjEsIDB4NmUsIDB4MTIsIDB4MjksIDB4MGEsIDB4MTAsIDB4NmMsIDB4NjUsIDB4NjEsIDB4NjQsIDB4NjksIDB4NmUsIDB4NjcsIDB4NWYsIDB4NjMsIDB4NmYsCisJMHg2ZCwgMHg2ZCwgMHg2NSwgMHg2ZSwgMHg3NCwgMHg3MywgMHgxOCwgMHgwMywgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwZiwgMHg2YywgMHg2NSwKKwkweDYxLCAweDY0LCAweDY5LCAweDZlLCAweDY3LCAweDQzLCAweDZmLCAweDZkLCAweDZkLCAweDY1LCAweDZlLCAweDc0LCAweDczLCAweDEyLCAweDJiLCAweDBhLAorCTB4MTEsIDB4NzQsIDB4NzIsIDB4NjEsIDB4NjksIDB4NmMsIDB4NjksIDB4NmUsIDB4NjcsIDB4NWYsIDB4NjMsIDB4NmYsIDB4NmQsIDB4NmQsIDB4NjUsIDB4NmUsCisJMHg3NCwgMHg3MywgMHgxOCwgMHgwNCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgxMCwgMHg3NCwgMHg3MiwgMHg2MSwgMHg2OSwgMHg2YywgMHg2OSwKKwkweDZlLCAweDY3LCAweDQzLCAweDZmLCAweDZkLCAweDZkLCAweDY1LCAweDZlLCAweDc0LCAweDczLCAweDEyLCAweDNhLCAweDBhLCAweDE5LCAweDZjLCAweDY1LAorCTB4NjEsIDB4NjQsIDB4NjksIDB4NmUsIDB4NjcsIDB4NWYsIDB4NjQsIDB4NjUsIDB4NzQsIDB4NjEsIDB4NjMsIDB4NjgsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NjMsCisJMHg2ZiwgMHg2ZCwgMHg2ZCwgMHg2NSwgMHg2ZSwgMHg3NCwgMHg3MywgMHgxOCwgMHgwNiwgMHgyMCwgMHgwMywgMHgyOCwgMHgwOSwgMHg1MiwgMHgxNywgMHg2YywKKwkweDY1LCAweDYxLCAweDY0LCAweDY5LCAweDZlLCAweDY3LCAweDQ0LCAweDY1LCAweDc0LCAweDYxLCAweDYzLCAweDY4LCAweDY1LCAweDY0LCAweDQzLCAweDZmLAorCTB4NmQsIDB4NmQsIDB4NjUsIDB4NmUsIDB4NzQsIDB4NzMsIDB4MjIsIDB4ZDAsIDB4MDIsIDB4MGEsIDB4MTEsIDB4NDcsIDB4NjUsIDB4NmUsIDB4NjUsIDB4NzIsCisJMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0MywgMHg2ZiwgMHg2NCwgMHg2NSwgMHg0OSwgMHg2ZSwgMHg2NiwgMHg2ZiwgMHgxMiwgMHg0ZCwgMHgwYSwgMHgwYSwKKwkweDYxLCAweDZlLCAweDZlLCAweDZmLCAweDc0LCAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDE4LCAweDAxLCAweDIwLCAweDAzLCAweDI4LCAweDBiLAorCTB4MzIsIDB4MmQsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsCisJMHg3NSwgMHg2NiwgMHgyZSwgMHg0NywgMHg2NSwgMHg2ZSwgMHg2NSwgMHg3MiwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0MywgMHg2ZiwgMHg2NCwgMHg2NSwKKwkweDQ5LCAweDZlLCAweDY2LCAweDZmLCAweDJlLCAweDQxLCAweDZlLCAweDZlLCAweDZmLCAweDc0LCAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDUyLAorCTB4MGEsIDB4NjEsIDB4NmUsIDB4NmUsIDB4NmYsIDB4NzQsIDB4NjEsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MWEsIDB4ZWIsIDB4MDEsIDB4MGEsIDB4MGEsCisJMHg0MSwgMHg2ZSwgMHg2ZSwgMHg2ZiwgMHg3NCwgMHg2MSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxMiwgMHgxNiwgMHgwYSwgMHgwNCwgMHg3MCwgMHg2MSwKKwkweDc0LCAweDY4LCAweDE4LCAweDAxLCAweDIwLCAweDAzLCAweDI4LCAweDA1LCAweDQyLCAweDAyLCAweDEwLCAweDAxLCAweDUyLCAweDA0LCAweDcwLCAweDYxLAorCTB4NzQsIDB4NjgsIDB4MTIsIDB4MWYsIDB4MGEsIDB4MGIsIDB4NzMsIDB4NmYsIDB4NzUsIDB4NzIsIDB4NjMsIDB4NjUsIDB4NWYsIDB4NjYsIDB4NjksIDB4NmMsCisJMHg2NSwgMHgxOCwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg1MiwgMHgwYSwgMHg3MywgMHg2ZiwgMHg3NSwgMHg3MiwgMHg2MywgMHg2NSwgMHg0NiwKKwkweDY5LCAweDZjLCAweDY1LCAweDEyLCAweDE0LCAweDBhLCAweDA1LCAweDYyLCAweDY1LCAweDY3LCAweDY5LCAweDZlLCAweDE4LCAweDAzLCAweDIwLCAweDAxLAorCTB4MjgsIDB4MDUsIDB4NTIsIDB4MDUsIDB4NjIsIDB4NjUsIDB4NjcsIDB4NjksIDB4NmUsIDB4MTIsIDB4MTAsIDB4MGEsIDB4MDMsIDB4NjUsIDB4NmUsIDB4NjQsCisJMHgxOCwgMHgwNCwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwNSwgMHg1MiwgMHgwMywgMHg2NSwgMHg2ZSwgMHg2NCwgMHgxMiwgMHg1MiwgMHgwYSwgMHgwOCwgMHg3MywKKwkweDY1LCAweDZkLCAweDYxLCAweDZlLCAweDc0LCAweDY5LCAweDYzLCAweDE4LCAweDA1LCAweDIwLCAweDAxLCAweDI4LCAweDBlLCAweDMyLCAweDM2LCAweDJlLAorCTB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MmUsCisJMHg0NywgMHg2NSwgMHg2ZSwgMHg2NSwgMHg3MiwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHg0MywgMHg2ZiwgMHg2NCwgMHg2NSwgMHg0OSwgMHg2ZSwgMHg2NiwKKwkweDZmLCAweDJlLCAweDQxLCAweDZlLCAweDZlLCAweDZmLCAweDc0LCAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDJlLCAweDUzLCAweDY1LCAweDZkLAorCTB4NjEsIDB4NmUsIDB4NzQsIDB4NjksIDB4NjMsIDB4NTIsIDB4MDgsIDB4NzMsIDB4NjUsIDB4NmQsIDB4NjEsIDB4NmUsIDB4NzQsIDB4NjksIDB4NjMsIDB4MjIsCisJMHgyOCwgMHgwYSwgMHgwOCwgMHg1MywgMHg2NSwgMHg2ZCwgMHg2MSwgMHg2ZSwgMHg3NCwgMHg2OSwgMHg2MywgMHgxMiwgMHgwOCwgMHgwYSwgMHgwNCwgMHg0ZSwKKwkweDRmLCAweDRlLCAweDQ1LCAweDEwLCAweDAwLCAweDEyLCAweDA3LCAweDBhLCAweDAzLCAweDUzLCAweDQ1LCAweDU0LCAweDEwLCAweDAxLCAweDEyLCAweDA5LAorCTB4MGEsIDB4MDUsIDB4NDEsIDB4NGMsIDB4NDksIDB4NDEsIDB4NTMsIDB4MTAsIDB4MDIsIDB4MmEsIDB4OTIsIDB4MDIsIDB4MGEsIDB4MDcsIDB4NDUsIDB4NjQsCisJMHg2OSwgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgxMiwgMHgxMywgMHgwYSwgMHgwZiwgMHg0NSwgMHg0NCwgMHg0OSwgMHg1NCwgMHg0OSwgMHg0ZiwgMHg0ZSwKKwkweDVmLCAweDU1LCAweDRlLCAweDRiLCAweDRlLCAweDRmLCAweDU3LCAweDRlLCAweDEwLCAweDAwLCAweDEyLCAweDEzLCAweDBhLCAweDBlLCAweDQ1LCAweDQ0LAorCTB4NDksIDB4NTQsIDB4NDksIDB4NGYsIDB4NGUsIDB4NWYsIDB4NTAsIDB4NTIsIDB4NGYsIDB4NTQsIDB4NGYsIDB4MzIsIDB4MTAsIDB4ZTYsIDB4MDcsIDB4MTIsCisJMHgxMywgMHgwYSwgMHgwZSwgMHg0NSwgMHg0NCwgMHg0OSwgMHg1NCwgMHg0OSwgMHg0ZiwgMHg0ZSwgMHg1ZiwgMHg1MCwgMHg1MiwgMHg0ZiwgMHg1NCwgMHg0ZiwKKwkweDMzLCAweDEwLCAweGU3LCAweDA3LCAweDEyLCAweDExLCAweDBhLCAweDBjLCAweDQ1LCAweDQ0LCAweDQ5LCAweDU0LCAweDQ5LCAweDRmLCAweDRlLCAweDVmLAorCTB4MzIsIDB4MzAsIDB4MzIsIDB4MzMsIDB4MTAsIDB4ZTgsIDB4MDcsIDB4MTIsIDB4MTEsIDB4MGEsIDB4MGMsIDB4NDUsIDB4NDQsIDB4NDksIDB4NTQsIDB4NDksCisJMHg0ZiwgMHg0ZSwgMHg1ZiwgMHgzMiwgMHgzMCwgMHgzMiwgMHgzNCwgMHgxMCwgMHhlOSwgMHgwNywgMHgxMiwgMHgxNywgMHgwYSwgMHgxMywgMHg0NSwgMHg0NCwKKwkweDQ5LCAweDU0LCAweDQ5LCAweDRmLCAweDRlLCAweDVmLCAweDMxLCAweDVmLCAweDU0LCAweDQ1LCAweDUzLCAweDU0LCAweDVmLCAweDRmLCAweDRlLCAweDRjLAorCTB4NTksIDB4MTAsIDB4MDEsIDB4MTIsIDB4MTcsIDB4MGEsIDB4MTMsIDB4NDUsIDB4NDQsIDB4NDksIDB4NTQsIDB4NDksIDB4NGYsIDB4NGUsIDB4NWYsIDB4MzIsCisJMHg1ZiwgMHg1NCwgMHg0NSwgMHg1MywgMHg1NCwgMHg1ZiwgMHg0ZiwgMHg0ZSwgMHg0YywgMHg1OSwgMHgxMCwgMHgwMiwgMHgxMiwgMHgxZCwgMHgwYSwgMHgxNywKKwkweDQ1LCAweDQ0LCAweDQ5LCAweDU0LCAweDQ5LCAweDRmLCAweDRlLCAweDVmLCAweDM5LCAweDM5LCAweDM5LCAweDM5LCAweDM3LCAweDVmLCAweDU0LCAweDQ1LAorCTB4NTMsIDB4NTQsIDB4NWYsIDB4NGYsIDB4NGUsIDB4NGMsIDB4NTksIDB4MTAsIDB4OWQsIDB4OGQsIDB4MDYsIDB4MTIsIDB4MWQsIDB4MGEsIDB4MTcsIDB4NDUsCisJMHg0NCwgMHg0OSwgMHg1NCwgMHg0OSwgMHg0ZiwgMHg0ZSwgMHg1ZiwgMHgzOSwgMHgzOSwgMHgzOSwgMHgzOSwgMHgzOCwgMHg1ZiwgMHg1NCwgMHg0NSwgMHg1MywKKwkweDU0LCAweDVmLCAweDRmLCAweDRlLCAweDRjLCAweDU5LCAweDEwLCAweDllLCAweDhkLCAweDA2LCAweDEyLCAweDFkLCAweDBhLCAweDE3LCAweDQ1LCAweDQ0LAorCTB4NDksIDB4NTQsIDB4NDksIDB4NGYsIDB4NGUsIDB4NWYsIDB4MzksIDB4MzksIDB4MzksIDB4MzksIDB4MzksIDB4NWYsIDB4NTQsIDB4NDUsIDB4NTMsIDB4NTQsCisJMHg1ZiwgMHg0ZiwgMHg0ZSwgMHg0YywgMHg1OSwgMHgxMCwgMHg5ZiwgMHg4ZCwgMHgwNiwgMHgxMiwgMHgxMywgMHgwYSwgMHgwYiwgMHg0NSwgMHg0NCwgMHg0OSwKKwkweDU0LCAweDQ5LCAweDRmLCAweDRlLCAweDVmLCAweDRkLCAweDQxLCAweDU4LCAweDEwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDA3LCAweDQyLCAweDdlLAorCTB4MGEsIDB4MTMsIDB4NjMsIDB4NmYsIDB4NmQsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsCisJMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHg0MiwgMHgxMCwgMHg0NCwgMHg2NSwgMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NCwgMHg2ZiwKKwkweDcyLCAweDUwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDczLCAweDQ4LCAweDAxLCAweDVhLCAweDJkLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLAorCTB4NjUsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmMsIDB4NjEsIDB4NmUsIDB4NjcsIDB4MmUsIDB4NmYsIDB4NzIsIDB4NjcsIDB4MmYsIDB4NzAsIDB4NzIsIDB4NmYsCisJMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZiwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHg3MywgMHgyZiwgMHg2NCwgMHg2NSwgMHg3MywgMHg2MywKKwkweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDcwLCAweDYyLCAweGY4LCAweDAxLCAweDAxLCAweGEyLCAweDAyLCAweDAzLCAweDQ3LCAweDUwLAorCTB4NDIsIDB4YWEsIDB4MDIsIDB4MWEsIDB4NDcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NTAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsCisJMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg1MiwgMHg2NSwgMHg2NiwgMHg2YywgMHg2NSwgMHg2MywgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwKIH0KIAogdmFyICgKQEAgLTM0OTgsOTIgKzUwODMsMTM2IEBACiAJcmV0dXJuIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fcmF3RGVzY0RhdGEKIH0KIAotdmFyIGZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fZW51bVR5cGVzID0gbWFrZShbXXByb3RvaW1wbC5FbnVtSW5mbywgNikKLXZhciBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzID0gbWFrZShbXXByb3RvaW1wbC5NZXNzYWdlSW5mbywgMjcpCit2YXIgZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19lbnVtVHlwZXMgPSBtYWtlKFtdcHJvdG9pbXBsLkVudW1JbmZvLCAxNykKK3ZhciBmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzID0gbWFrZShbXXByb3RvaW1wbC5NZXNzYWdlSW5mbywgMzIpCiB2YXIgZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19nb1R5cGVzID0gW11pbnRlcmZhY2V7fXsKLQkoRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSkoMCksICAgICAgICAgICAgICAgIC8vIDA6IGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlCi0JKEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsKSgwKSwgICAgICAgICAgICAgICAvLyAxOiBnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWwKLQkoRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlKSgwKSwgICAgICAgICAgICAgICAgIC8vIDI6IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGUKLQkoRmllbGRPcHRpb25zX0NUeXBlKSgwKSwgICAgICAgICAgICAgICAgICAgICAgIC8vIDM6IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGUKLQkoRmllbGRPcHRpb25zX0pTVHlwZSkoMCksICAgICAgICAgICAgICAgICAgICAgIC8vIDQ6IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlCi0JKE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbCkoMCksICAgICAgICAgICAvLyA1OiBnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsCi0JKCpGaWxlRGVzY3JpcHRvclNldCkobmlsKSwgICAgICAgICAgICAgICAgICAgICAvLyA2OiBnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQKLQkoKkZpbGVEZXNjcmlwdG9yUHJvdG8pKG5pbCksICAgICAgICAgICAgICAgICAgIC8vIDc6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvCi0JKCpEZXNjcmlwdG9yUHJvdG8pKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAvLyA4OiBnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvCi0JKCpFeHRlbnNpb25SYW5nZU9wdGlvbnMpKG5pbCksICAgICAgICAgICAgICAgICAvLyA5OiBnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zCi0JKCpGaWVsZERlc2NyaXB0b3JQcm90bykobmlsKSwgICAgICAgICAgICAgICAgICAvLyAxMDogZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvCi0JKCpPbmVvZkRlc2NyaXB0b3JQcm90bykobmlsKSwgICAgICAgICAgICAgICAgICAvLyAxMTogZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvCi0JKCpFbnVtRGVzY3JpcHRvclByb3RvKShuaWwpLCAgICAgICAgICAgICAgICAgICAvLyAxMjogZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8KLQkoKkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bykobmlsKSwgICAgICAgICAgICAgIC8vIDEzOiBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvCi0JKCpTZXJ2aWNlRGVzY3JpcHRvclByb3RvKShuaWwpLCAgICAgICAgICAgICAgICAvLyAxNDogZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8KLQkoKk1ldGhvZERlc2NyaXB0b3JQcm90bykobmlsKSwgICAgICAgICAgICAgICAgIC8vIDE1OiBnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvCi0JKCpGaWxlT3B0aW9ucykobmlsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxNjogZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zCi0JKCpNZXNzYWdlT3B0aW9ucykobmlsKSwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxNzogZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zCi0JKCpGaWVsZE9wdGlvbnMpKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxODogZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucwotCSgqT25lb2ZPcHRpb25zKShuaWwpLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTk6IGdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMKLQkoKkVudW1PcHRpb25zKShuaWwpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIwOiBnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMKLQkoKkVudW1WYWx1ZU9wdGlvbnMpKG5pbCksICAgICAgICAgICAgICAgICAgICAgIC8vIDIxOiBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucwotCSgqU2VydmljZU9wdGlvbnMpKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjI6IGdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucwotCSgqTWV0aG9kT3B0aW9ucykobmlsKSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjM6IGdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zCi0JKCpVbmludGVycHJldGVkT3B0aW9uKShuaWwpLCAgICAgICAgICAgICAgICAgICAvLyAyNDogZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KLQkoKlNvdXJjZUNvZGVJbmZvKShuaWwpLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDI1OiBnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8KLQkoKkdlbmVyYXRlZENvZGVJbmZvKShuaWwpLCAgICAgICAgICAgICAgICAgICAgIC8vIDI2OiBnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8KLQkoKkRlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSkobmlsKSwgICAgICAgIC8vIDI3OiBnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlCi0JKCpEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSkobmlsKSwgICAgICAgICAvLyAyODogZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlCi0JKCpFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKShuaWwpLCAvLyAyOTogZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UKLQkoKlVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQpKG5pbCksICAgICAgICAgIC8vIDMwOiBnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydAotCSgqU291cmNlQ29kZUluZm9fTG9jYXRpb24pKG5pbCksICAgICAgICAgICAgICAgLy8gMzE6IGdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbgotCSgqR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbikobmlsKSwgICAgICAgICAgLy8gMzI6IGdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uCisJKEVkaXRpb24pKDApLCAvLyAwOiBnb29nbGUucHJvdG9idWYuRWRpdGlvbgorCShFeHRlbnNpb25SYW5nZU9wdGlvbnNfVmVyaWZpY2F0aW9uU3RhdGUpKDApLCAgICAgICAgLy8gMTogZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZQorCShGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlKSgwKSwgICAgICAgICAgICAgICAgICAgICAgLy8gMjogZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUKKwkoRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwpKDApLCAgICAgICAgICAgICAgICAgICAgIC8vIDM6IGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbAorCShGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUpKDApLCAgICAgICAgICAgICAgICAgICAgICAgLy8gNDogZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZQorCShGaWVsZE9wdGlvbnNfQ1R5cGUpKDApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTogZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZQorCShGaWVsZE9wdGlvbnNfSlNUeXBlKSgwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNjogZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGUKKwkoRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbikoMCksICAgICAgICAgICAgICAgICAgIC8vIDc6IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uUmV0ZW50aW9uCisJKEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlKSgwKSwgICAgICAgICAgICAgICAgICAvLyA4OiBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblRhcmdldFR5cGUKKwkoTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsKSgwKSwgICAgICAgICAgICAgICAgIC8vIDk6IGdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWwKKwkoRmVhdHVyZVNldF9GaWVsZFByZXNlbmNlKSgwKSwgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwOiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5GaWVsZFByZXNlbmNlCisJKEZlYXR1cmVTZXRfRW51bVR5cGUpKDApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMTogZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuRW51bVR5cGUKKwkoRmVhdHVyZVNldF9SZXBlYXRlZEZpZWxkRW5jb2RpbmcpKDApLCAgICAgICAgICAgICAgIC8vIDEyOiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5SZXBlYXRlZEZpZWxkRW5jb2RpbmcKKwkoRmVhdHVyZVNldF9VdGY4VmFsaWRhdGlvbikoMCksICAgICAgICAgICAgICAgICAgICAgIC8vIDEzOiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5VdGY4VmFsaWRhdGlvbgorCShGZWF0dXJlU2V0X01lc3NhZ2VFbmNvZGluZykoMCksICAgICAgICAgICAgICAgICAgICAgLy8gMTQ6IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lk1lc3NhZ2VFbmNvZGluZworCShGZWF0dXJlU2V0X0pzb25Gb3JtYXQpKDApLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTU6IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lkpzb25Gb3JtYXQKKwkoR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYykoMCksICAgICAgICAgIC8vIDE2OiBnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5TZW1hbnRpYworCSgqRmlsZURlc2NyaXB0b3JTZXQpKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTc6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldAorCSgqRmlsZURlc2NyaXB0b3JQcm90bykobmlsKSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTg6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvCisJKCpEZXNjcmlwdG9yUHJvdG8pKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOTogZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bworCSgqRXh0ZW5zaW9uUmFuZ2VPcHRpb25zKShuaWwpLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMjA6IGdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMKKwkoKkZpZWxkRGVzY3JpcHRvclByb3RvKShuaWwpLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIxOiBnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8KKwkoKk9uZW9mRGVzY3JpcHRvclByb3RvKShuaWwpLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIyOiBnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8KKwkoKkVudW1EZXNjcmlwdG9yUHJvdG8pKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIzOiBnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bworCSgqRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKShuaWwpLCAgICAgICAgICAgICAgICAgICAgLy8gMjQ6IGdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8KKwkoKlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8pKG5pbCksICAgICAgICAgICAgICAgICAgICAgIC8vIDI1OiBnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bworCSgqTWV0aG9kRGVzY3JpcHRvclByb3RvKShuaWwpLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMjY6IGdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8KKwkoKkZpbGVPcHRpb25zKShuaWwpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDI3OiBnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMKKwkoKk1lc3NhZ2VPcHRpb25zKShuaWwpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDI4OiBnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMKKwkoKkZpZWxkT3B0aW9ucykobmlsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDI5OiBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zCisJKCpPbmVvZk9wdGlvbnMpKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzMDogZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucworCSgqRW51bU9wdGlvbnMpKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzE6IGdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucworCSgqRW51bVZhbHVlT3B0aW9ucykobmlsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzI6IGdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zCisJKCpTZXJ2aWNlT3B0aW9ucykobmlsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzMzogZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zCisJKCpNZXRob2RPcHRpb25zKShuaWwpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzNDogZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMKKwkoKlVuaW50ZXJwcmV0ZWRPcHRpb24pKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDM1OiBnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbgorCSgqRmVhdHVyZVNldCkobmlsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzY6IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0CisJKCpGZWF0dXJlU2V0RGVmYXVsdHMpKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzNzogZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXREZWZhdWx0cworCSgqU291cmNlQ29kZUluZm8pKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzg6IGdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbworCSgqR2VuZXJhdGVkQ29kZUluZm8pKG5pbCksICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzk6IGdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbworCSgqRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKShuaWwpLCAgICAgICAgICAgICAgLy8gNDA6IGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UKKwkoKkRlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKShuaWwpLCAgICAgICAgICAgICAgIC8vIDQxOiBnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UKKwkoKkV4dGVuc2lvblJhbmdlT3B0aW9uc19EZWNsYXJhdGlvbikobmlsKSwgICAgICAgICAgIC8vIDQyOiBnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLkRlY2xhcmF0aW9uCisJKCpFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKShuaWwpLCAgICAgICAvLyA0MzogZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UKKwkoKkZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdCkobmlsKSwgICAgICAgICAgICAgICAgIC8vIDQ0OiBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkVkaXRpb25EZWZhdWx0CisJKCpVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KShuaWwpLCAgICAgICAgICAgICAgICAvLyA0NTogZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQKKwkoKkZlYXR1cmVTZXREZWZhdWx0c19GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHQpKG5pbCksIC8vIDQ2OiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldERlZmF1bHRzLkZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdAorCSgqU291cmNlQ29kZUluZm9fTG9jYXRpb24pKG5pbCksICAgICAgICAgICAgICAgICAgICAgLy8gNDc6IGdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbgorCSgqR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbikobmlsKSwgICAgICAgICAgICAgICAgLy8gNDg6IGdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uCiB9CiB2YXIgZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19kZXBJZHhzID0gW11pbnQzMnsKLQk3LCAgLy8gMDogZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LmZpbGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvCi0JOCwgIC8vIDE6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm1lc3NhZ2VfdHlwZTp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bwotCTEyLCAvLyAyOiBnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5lbnVtX3R5cGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvCi0JMTQsIC8vIDM6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNlcnZpY2U6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvCi0JMTAsIC8vIDQ6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvCi0JMTYsIC8vIDU6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm9wdGlvbnM6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucwotCTI1LCAvLyA2OiBnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zb3VyY2VfY29kZV9pbmZvOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8KLQkxMCwgLy8gNzogZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5maWVsZDp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvCi0JMTAsIC8vIDg6IGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZXh0ZW5zaW9uOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8KLQk4LCAgLy8gOTogZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5uZXN0ZWRfdHlwZTp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bwotCTEyLCAvLyAxMDogZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5lbnVtX3R5cGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvCi0JMjcsIC8vIDExOiBnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbl9yYW5nZTp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZQotCTExLCAvLyAxMjogZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5vbmVvZl9kZWNsOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8KLQkxNywgLy8gMTM6IGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ub3B0aW9uczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zCi0JMjgsIC8vIDE0OiBnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlc2VydmVkX3JhbmdlOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UKLQkyNCwgLy8gMTU6IGdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb246dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uCi0JMSwgIC8vIDE2OiBnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubGFiZWw6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbAotCTAsICAvLyAxNzogZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnR5cGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlCi0JMTgsIC8vIDE4OiBnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ub3B0aW9uczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucwotCTE5LCAvLyAxOTogZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLm9wdGlvbnM6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMKLQkxMywgLy8gMjA6IGdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnZhbHVlOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvCi0JMjAsIC8vIDIxOiBnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5vcHRpb25zOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMKLQkyOSwgLy8gMjI6IGdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnJlc2VydmVkX3JhbmdlOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZQotCTIxLCAvLyAyMzogZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5vcHRpb25zOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucwotCTE1LCAvLyAyNDogZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ubWV0aG9kOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvCi0JMjIsIC8vIDI1OiBnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5vcHRpb25zOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMKLQkyMywgLy8gMjY6IGdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ub3B0aW9uczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMKLQkyLCAgLy8gMjc6IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vcHRpbWl6ZV9mb3I6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGUKLQkyNCwgLy8gMjg6IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KLQkyNCwgLy8gMjk6IGdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KLQkzLCAgLy8gMzA6IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuY3R5cGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGUKLQk0LCAgLy8gMzE6IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuanN0eXBlOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZQotCTI0LCAvLyAzMjogZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KLQkyNCwgLy8gMzM6IGdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb246dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uCi0JMjQsIC8vIDM0OiBnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb246dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uCi0JMjQsIC8vIDM1OiBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KLQkyNCwgLy8gMzY6IGdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KLQk1LCAgLy8gMzc6IGdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmlkZW1wb3RlbmN5X2xldmVsOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsCi0JMjQsIC8vIDM4OiBnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KLQkzMCwgLy8gMzk6IGdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLm5hbWU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0Ci0JMzEsIC8vIDQwOiBnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ubG9jYXRpb246dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbgotCTMyLCAvLyA0MTogZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLmFubm90YXRpb246dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uCi0JOSwgIC8vIDQyOiBnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLm9wdGlvbnM6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMKLQk0MywgLy8gWzQzOjQzXSBpcyB0aGUgc3ViLWxpc3QgZm9yIG1ldGhvZCBvdXRwdXRfdHlwZQotCTQzLCAvLyBbNDM6NDNdIGlzIHRoZSBzdWItbGlzdCBmb3IgbWV0aG9kIGlucHV0X3R5cGUKLQk0MywgLy8gWzQzOjQzXSBpcyB0aGUgc3ViLWxpc3QgZm9yIGV4dGVuc2lvbiB0eXBlX25hbWUKLQk0MywgLy8gWzQzOjQzXSBpcyB0aGUgc3ViLWxpc3QgZm9yIGV4dGVuc2lvbiBleHRlbmRlZQotCTAsICAvLyBbMDo0M10gaXMgdGhlIHN1Yi1saXN0IGZvciBmaWVsZCB0eXBlX25hbWUKKwkxOCwgLy8gMDogZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LmZpbGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvCisJMTksIC8vIDE6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm1lc3NhZ2VfdHlwZTp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bworCTIzLCAvLyAyOiBnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5lbnVtX3R5cGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvCisJMjUsIC8vIDM6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNlcnZpY2U6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvCisJMjEsIC8vIDQ6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvCisJMjcsIC8vIDU6IGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm9wdGlvbnM6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucworCTM4LCAvLyA2OiBnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zb3VyY2VfY29kZV9pbmZvOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8KKwkwLCAgLy8gNzogZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZWRpdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkVkaXRpb24KKwkyMSwgLy8gODogZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5maWVsZDp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvCisJMjEsIC8vIDk6IGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZXh0ZW5zaW9uOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8KKwkxOSwgLy8gMTA6IGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ubmVzdGVkX3R5cGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8KKwkyMywgLy8gMTE6IGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZW51bV90eXBlOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bworCTQwLCAvLyAxMjogZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5leHRlbnNpb25fcmFuZ2U6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UKKwkyMiwgLy8gMTM6IGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ub25lb2ZfZGVjbDp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvCisJMjgsIC8vIDE0OiBnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLm9wdGlvbnM6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucworCTQxLCAvLyAxNTogZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXNlcnZlZF9yYW5nZTp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlCisJMzUsIC8vIDE2OiBnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbgorCTQyLCAvLyAxNzogZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5kZWNsYXJhdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5EZWNsYXJhdGlvbgorCTM2LCAvLyAxODogZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5mZWF0dXJlczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQKKwkxLCAgLy8gMTk6IGdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMudmVyaWZpY2F0aW9uOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLlZlcmlmaWNhdGlvblN0YXRlCisJMywgIC8vIDIwOiBnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubGFiZWw6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbAorCTIsICAvLyAyMTogZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnR5cGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlCisJMjksIC8vIDIyOiBnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ub3B0aW9uczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucworCTMwLCAvLyAyMzogZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLm9wdGlvbnM6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMKKwkyNCwgLy8gMjQ6IGdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnZhbHVlOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvCisJMzEsIC8vIDI1OiBnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5vcHRpb25zOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMKKwk0MywgLy8gMjY6IGdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnJlc2VydmVkX3JhbmdlOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZQorCTMyLCAvLyAyNzogZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5vcHRpb25zOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucworCTI2LCAvLyAyODogZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ubWV0aG9kOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvCisJMzMsIC8vIDI5OiBnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5vcHRpb25zOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMKKwkzNCwgLy8gMzA6IGdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ub3B0aW9uczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMKKwk0LCAgLy8gMzE6IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vcHRpbWl6ZV9mb3I6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGUKKwkzNiwgLy8gMzI6IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5mZWF0dXJlczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQKKwkzNSwgLy8gMzM6IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KKwkzNiwgLy8gMzQ6IGdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5mZWF0dXJlczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQKKwkzNSwgLy8gMzU6IGdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KKwk1LCAgLy8gMzY6IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuY3R5cGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGUKKwk2LCAgLy8gMzc6IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuanN0eXBlOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZQorCTcsICAvLyAzODogZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5yZXRlbnRpb246dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uUmV0ZW50aW9uCisJOCwgIC8vIDM5OiBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnRhcmdldHM6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZQorCTQ0LCAvLyA0MDogZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5lZGl0aW9uX2RlZmF1bHRzOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkVkaXRpb25EZWZhdWx0CisJMzYsIC8vIDQxOiBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmZlYXR1cmVzOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldAorCTM1LCAvLyA0MjogZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KKwkzNiwgLy8gNDM6IGdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZmVhdHVyZXM6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0CisJMzUsIC8vIDQ0OiBnb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbgorCTM2LCAvLyA0NTogZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmZlYXR1cmVzOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldAorCTM1LCAvLyA0NjogZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbgorCTM2LCAvLyA0NzogZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZmVhdHVyZXM6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0CisJMzUsIC8vIDQ4OiBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KKwkzNiwgLy8gNDk6IGdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5mZWF0dXJlczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQKKwkzNSwgLy8gNTA6IGdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24KKwk5LCAgLy8gNTE6IGdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmlkZW1wb3RlbmN5X2xldmVsOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsCisJMzYsIC8vIDUyOiBnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5mZWF0dXJlczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQKKwkzNSwgLy8gNTM6IGdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbgorCTQ1LCAvLyA1NDogZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ubmFtZTp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQKKwkxMCwgLy8gNTU6IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LmZpZWxkX3ByZXNlbmNlOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5GaWVsZFByZXNlbmNlCisJMTEsIC8vIDU2OiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5lbnVtX3R5cGU6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LkVudW1UeXBlCisJMTIsIC8vIDU3OiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5yZXBlYXRlZF9maWVsZF9lbmNvZGluZzp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuUmVwZWF0ZWRGaWVsZEVuY29kaW5nCisJMTMsIC8vIDU4OiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC51dGY4X3ZhbGlkYXRpb246dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LlV0ZjhWYWxpZGF0aW9uCisJMTQsIC8vIDU5OiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5tZXNzYWdlX2VuY29kaW5nOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5NZXNzYWdlRW5jb2RpbmcKKwkxNSwgLy8gNjA6IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lmpzb25fZm9ybWF0OnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5Kc29uRm9ybWF0CisJNDYsIC8vIDYxOiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldERlZmF1bHRzLmRlZmF1bHRzOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldERlZmF1bHRzLkZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdAorCTAsICAvLyA2MjogZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXREZWZhdWx0cy5taW5pbXVtX2VkaXRpb246dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uCisJMCwgIC8vIDYzOiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldERlZmF1bHRzLm1heGltdW1fZWRpdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkVkaXRpb24KKwk0NywgLy8gNjQ6IGdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5sb2NhdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uCisJNDgsIC8vIDY1OiBnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uYW5ub3RhdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24KKwkyMCwgLy8gNjY6IGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2Uub3B0aW9uczp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucworCTAsICAvLyA2NzogZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5FZGl0aW9uRGVmYXVsdC5lZGl0aW9uOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRWRpdGlvbgorCTAsICAvLyA2ODogZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXREZWZhdWx0cy5GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHQuZWRpdGlvbjp0eXBlX25hbWUgLT4gZ29vZ2xlLnByb3RvYnVmLkVkaXRpb24KKwkzNiwgLy8gNjk6IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0RGVmYXVsdHMuRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0LmZlYXR1cmVzOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldAorCTE2LCAvLyA3MDogZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uc2VtYW50aWM6dHlwZV9uYW1lIC0+IGdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLlNlbWFudGljCisJNzEsIC8vIFs3MTo3MV0gaXMgdGhlIHN1Yi1saXN0IGZvciBtZXRob2Qgb3V0cHV0X3R5cGUKKwk3MSwgLy8gWzcxOjcxXSBpcyB0aGUgc3ViLWxpc3QgZm9yIG1ldGhvZCBpbnB1dF90eXBlCisJNzEsIC8vIFs3MTo3MV0gaXMgdGhlIHN1Yi1saXN0IGZvciBleHRlbnNpb24gdHlwZV9uYW1lCisJNzEsIC8vIFs3MTo3MV0gaXMgdGhlIHN1Yi1saXN0IGZvciBleHRlbnNpb24gZXh0ZW5kZWUKKwkwLCAgLy8gWzA6NzFdIGlzIHRoZSBzdWItbGlzdCBmb3IgZmllbGQgdHlwZV9uYW1lCiB9CiAKIGZ1bmMgaW5pdCgpIHsgZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19pbml0KCkgfQpAQCAtMzgzOSwxOSArNTQ2OCwyMSBAQAogCQkJfQogCQl9CiAJCWZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMTldLkV4cG9ydGVyID0gZnVuYyh2IGludGVyZmFjZXt9LCBpIGludCkgaW50ZXJmYWNle30gewotCQkJc3dpdGNoIHYgOj0gdi4oKlNvdXJjZUNvZGVJbmZvKTsgaSB7CisJCQlzd2l0Y2ggdiA6PSB2LigqRmVhdHVyZVNldCk7IGkgewogCQkJY2FzZSAwOgogCQkJCXJldHVybiAmdi5zdGF0ZQogCQkJY2FzZSAxOgogCQkJCXJldHVybiAmdi5zaXplQ2FjaGUKIAkJCWNhc2UgMjoKIAkJCQlyZXR1cm4gJnYudW5rbm93bkZpZWxkcworCQkJY2FzZSAzOgorCQkJCXJldHVybiAmdi5leHRlbnNpb25GaWVsZHMKIAkJCWRlZmF1bHQ6CiAJCQkJcmV0dXJuIG5pbAogCQkJfQogCQl9CiAJCWZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjBdLkV4cG9ydGVyID0gZnVuYyh2IGludGVyZmFjZXt9LCBpIGludCkgaW50ZXJmYWNle30gewotCQkJc3dpdGNoIHYgOj0gdi4oKkdlbmVyYXRlZENvZGVJbmZvKTsgaSB7CisJCQlzd2l0Y2ggdiA6PSB2LigqRmVhdHVyZVNldERlZmF1bHRzKTsgaSB7CiAJCQljYXNlIDA6CiAJCQkJcmV0dXJuICZ2LnN0YXRlCiAJCQljYXNlIDE6CkBAIC0zODYzLDcgKzU0OTQsNyBAQAogCQkJfQogCQl9CiAJCWZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjFdLkV4cG9ydGVyID0gZnVuYyh2IGludGVyZmFjZXt9LCBpIGludCkgaW50ZXJmYWNle30gewotCQkJc3dpdGNoIHYgOj0gdi4oKkRlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSk7IGkgeworCQkJc3dpdGNoIHYgOj0gdi4oKlNvdXJjZUNvZGVJbmZvKTsgaSB7CiAJCQljYXNlIDA6CiAJCQkJcmV0dXJuICZ2LnN0YXRlCiAJCQljYXNlIDE6CkBAIC0zODc1LDcgKzU1MDYsNyBAQAogCQkJfQogCQl9CiAJCWZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjJdLkV4cG9ydGVyID0gZnVuYyh2IGludGVyZmFjZXt9LCBpIGludCkgaW50ZXJmYWNle30gewotCQkJc3dpdGNoIHYgOj0gdi4oKkRlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKTsgaSB7CisJCQlzd2l0Y2ggdiA6PSB2LigqR2VuZXJhdGVkQ29kZUluZm8pOyBpIHsKIAkJCWNhc2UgMDoKIAkJCQlyZXR1cm4gJnYuc3RhdGUKIAkJCWNhc2UgMToKQEAgLTM4ODcsNyArNTUxOCw3IEBACiAJCQl9CiAJCX0KIAkJZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1syM10uRXhwb3J0ZXIgPSBmdW5jKHYgaW50ZXJmYWNle30sIGkgaW50KSBpbnRlcmZhY2V7fSB7Ci0JCQlzd2l0Y2ggdiA6PSB2LigqRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSk7IGkgeworCQkJc3dpdGNoIHYgOj0gdi4oKkRlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSk7IGkgewogCQkJY2FzZSAwOgogCQkJCXJldHVybiAmdi5zdGF0ZQogCQkJY2FzZSAxOgpAQCAtMzg5OSw3ICs1NTMwLDcgQEAKIAkJCX0KIAkJfQogCQlmaWxlX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3Byb3RvX21zZ1R5cGVzWzI0XS5FeHBvcnRlciA9IGZ1bmModiBpbnRlcmZhY2V7fSwgaSBpbnQpIGludGVyZmFjZXt9IHsKLQkJCXN3aXRjaCB2IDo9IHYuKCpVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KTsgaSB7CisJCQlzd2l0Y2ggdiA6PSB2LigqRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UpOyBpIHsKIAkJCWNhc2UgMDoKIAkJCQlyZXR1cm4gJnYuc3RhdGUKIAkJCWNhc2UgMToKQEAgLTM5MTEsNyArNTU0Miw3IEBACiAJCQl9CiAJCX0KIAkJZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1syNV0uRXhwb3J0ZXIgPSBmdW5jKHYgaW50ZXJmYWNle30sIGkgaW50KSBpbnRlcmZhY2V7fSB7Ci0JCQlzd2l0Y2ggdiA6PSB2LigqU291cmNlQ29kZUluZm9fTG9jYXRpb24pOyBpIHsKKwkJCXN3aXRjaCB2IDo9IHYuKCpFeHRlbnNpb25SYW5nZU9wdGlvbnNfRGVjbGFyYXRpb24pOyBpIHsKIAkJCWNhc2UgMDoKIAkJCQlyZXR1cm4gJnYuc3RhdGUKIAkJCWNhc2UgMToKQEAgLTM5MjMsNiArNTU1NCw2NiBAQAogCQkJfQogCQl9CiAJCWZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjZdLkV4cG9ydGVyID0gZnVuYyh2IGludGVyZmFjZXt9LCBpIGludCkgaW50ZXJmYWNle30geworCQkJc3dpdGNoIHYgOj0gdi4oKkVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UpOyBpIHsKKwkJCWNhc2UgMDoKKwkJCQlyZXR1cm4gJnYuc3RhdGUKKwkJCWNhc2UgMToKKwkJCQlyZXR1cm4gJnYuc2l6ZUNhY2hlCisJCQljYXNlIDI6CisJCQkJcmV0dXJuICZ2LnVua25vd25GaWVsZHMKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIG5pbAorCQkJfQorCQl9CisJCWZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMjddLkV4cG9ydGVyID0gZnVuYyh2IGludGVyZmFjZXt9LCBpIGludCkgaW50ZXJmYWNle30geworCQkJc3dpdGNoIHYgOj0gdi4oKkZpZWxkT3B0aW9uc19FZGl0aW9uRGVmYXVsdCk7IGkgeworCQkJY2FzZSAwOgorCQkJCXJldHVybiAmdi5zdGF0ZQorCQkJY2FzZSAxOgorCQkJCXJldHVybiAmdi5zaXplQ2FjaGUKKwkJCWNhc2UgMjoKKwkJCQlyZXR1cm4gJnYudW5rbm93bkZpZWxkcworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gbmlsCisJCQl9CisJCX0KKwkJZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1syOF0uRXhwb3J0ZXIgPSBmdW5jKHYgaW50ZXJmYWNle30sIGkgaW50KSBpbnRlcmZhY2V7fSB7CisJCQlzd2l0Y2ggdiA6PSB2LigqVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCk7IGkgeworCQkJY2FzZSAwOgorCQkJCXJldHVybiAmdi5zdGF0ZQorCQkJY2FzZSAxOgorCQkJCXJldHVybiAmdi5zaXplQ2FjaGUKKwkJCWNhc2UgMjoKKwkJCQlyZXR1cm4gJnYudW5rbm93bkZpZWxkcworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gbmlsCisJCQl9CisJCX0KKwkJZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1syOV0uRXhwb3J0ZXIgPSBmdW5jKHYgaW50ZXJmYWNle30sIGkgaW50KSBpbnRlcmZhY2V7fSB7CisJCQlzd2l0Y2ggdiA6PSB2LigqRmVhdHVyZVNldERlZmF1bHRzX0ZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdCk7IGkgeworCQkJY2FzZSAwOgorCQkJCXJldHVybiAmdi5zdGF0ZQorCQkJY2FzZSAxOgorCQkJCXJldHVybiAmdi5zaXplQ2FjaGUKKwkJCWNhc2UgMjoKKwkJCQlyZXR1cm4gJnYudW5rbm93bkZpZWxkcworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gbmlsCisJCQl9CisJCX0KKwkJZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19tc2dUeXBlc1szMF0uRXhwb3J0ZXIgPSBmdW5jKHYgaW50ZXJmYWNle30sIGkgaW50KSBpbnRlcmZhY2V7fSB7CisJCQlzd2l0Y2ggdiA6PSB2LigqU291cmNlQ29kZUluZm9fTG9jYXRpb24pOyBpIHsKKwkJCWNhc2UgMDoKKwkJCQlyZXR1cm4gJnYuc3RhdGUKKwkJCWNhc2UgMToKKwkJCQlyZXR1cm4gJnYuc2l6ZUNhY2hlCisJCQljYXNlIDI6CisJCQkJcmV0dXJuICZ2LnVua25vd25GaWVsZHMKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIG5pbAorCQkJfQorCQl9CisJCWZpbGVfZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcHJvdG9fbXNnVHlwZXNbMzFdLkV4cG9ydGVyID0gZnVuYyh2IGludGVyZmFjZXt9LCBpIGludCkgaW50ZXJmYWNle30gewogCQkJc3dpdGNoIHYgOj0gdi4oKkdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24pOyBpIHsKIAkJCWNhc2UgMDoKIAkJCQlyZXR1cm4gJnYuc3RhdGUKQEAgLTM5NDAsOCArNTYzMSw4IEBACiAJCUZpbGU6IHByb3RvaW1wbC5EZXNjQnVpbGRlcnsKIAkJCUdvUGFja2FnZVBhdGg6IHJlZmxlY3QuVHlwZU9mKHh7fSkuUGtnUGF0aCgpLAogCQkJUmF3RGVzY3JpcHRvcjogZmlsZV9nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wcm90b19yYXdEZXNjLAotCQkJTnVtRW51bXM6ICAgICAgNiwKLQkJCU51bU1lc3NhZ2VzOiAgIDI3LAorCQkJTnVtRW51bXM6ICAgICAgMTcsCisJCQlOdW1NZXNzYWdlczogICAzMiwKIAkJCU51bUV4dGVuc2lvbnM6IDAsCiAJCQlOdW1TZXJ2aWNlczogICAwLAogCQl9LApkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2dvZmVhdHVyZXNwYi9nb19mZWF0dXJlcy5wYi5nbyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9nb2ZlYXR1cmVzcGIvZ29fZmVhdHVyZXMucGIuZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVkZTVhZQotLS0gL2Rldi9udWxsCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9nb2ZlYXR1cmVzcGIvZ29fZmVhdHVyZXMucGIuZ28KQEAgLTAsMCArMSwxNzcgQEAKKy8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAorLy8gQ29weXJpZ2h0IDIwMjMgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUKKy8vIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBvciBhdAorLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vb3Blbi1zb3VyY2UvbGljZW5zZXMvYnNkCisKKy8vIENvZGUgZ2VuZXJhdGVkIGJ5IHByb3RvYy1nZW4tZ28uIERPIE5PVCBFRElULgorLy8gc291cmNlOiByZWZsZWN0L3Byb3RvZGVzYy9wcm90by9nb19mZWF0dXJlcy5wcm90bworCitwYWNrYWdlIHByb3RvCisKK2ltcG9ydCAoCisJcHJvdG9yZWZsZWN0ICJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVmbGVjdCIKKwlwcm90b2ltcGwgImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3J1bnRpbWUvcHJvdG9pbXBsIgorCWRlc2NyaXB0b3JwYiAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBiIgorCXJlZmxlY3QgInJlZmxlY3QiCisJc3luYyAic3luYyIKKykKKwordHlwZSBHb0ZlYXR1cmVzIHN0cnVjdCB7CisJc3RhdGUgICAgICAgICBwcm90b2ltcGwuTWVzc2FnZVN0YXRlCisJc2l6ZUNhY2hlICAgICBwcm90b2ltcGwuU2l6ZUNhY2hlCisJdW5rbm93bkZpZWxkcyBwcm90b2ltcGwuVW5rbm93bkZpZWxkcworCisJLy8gV2hldGhlciBvciBub3QgdG8gZ2VuZXJhdGUgdGhlIGRlcHJlY2F0ZWQgVW5tYXJzaGFsSlNPTiBtZXRob2QgZm9yIGVudW1zLgorCUxlZ2FjeVVubWFyc2hhbEpzb25FbnVtICpib29sIGBwcm90b2J1ZjoidmFyaW50LDEsb3B0LG5hbWU9bGVnYWN5X3VubWFyc2hhbF9qc29uX2VudW0sanNvbj1sZWdhY3lVbm1hcnNoYWxKc29uRW51bSIganNvbjoibGVnYWN5X3VubWFyc2hhbF9qc29uX2VudW0sb21pdGVtcHR5ImAKK30KKworZnVuYyAoeCAqR29GZWF0dXJlcykgUmVzZXQoKSB7CisJKnggPSBHb0ZlYXR1cmVze30KKwlpZiBwcm90b2ltcGwuVW5zYWZlRW5hYmxlZCB7CisJCW1pIDo9ICZmaWxlX3JlZmxlY3RfcHJvdG9kZXNjX3Byb3RvX2dvX2ZlYXR1cmVzX3Byb3RvX21zZ1R5cGVzWzBdCisJCW1zIDo9IHByb3RvaW1wbC5YLk1lc3NhZ2VTdGF0ZU9mKHByb3RvaW1wbC5Qb2ludGVyKHgpKQorCQltcy5TdG9yZU1lc3NhZ2VJbmZvKG1pKQorCX0KK30KKworZnVuYyAoeCAqR29GZWF0dXJlcykgU3RyaW5nKCkgc3RyaW5nIHsKKwlyZXR1cm4gcHJvdG9pbXBsLlguTWVzc2FnZVN0cmluZ09mKHgpCit9CisKK2Z1bmMgKCpHb0ZlYXR1cmVzKSBQcm90b01lc3NhZ2UoKSB7fQorCitmdW5jICh4ICpHb0ZlYXR1cmVzKSBQcm90b1JlZmxlY3QoKSBwcm90b3JlZmxlY3QuTWVzc2FnZSB7CisJbWkgOj0gJmZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fbXNnVHlwZXNbMF0KKwlpZiBwcm90b2ltcGwuVW5zYWZlRW5hYmxlZCAmJiB4ICE9IG5pbCB7CisJCW1zIDo9IHByb3RvaW1wbC5YLk1lc3NhZ2VTdGF0ZU9mKHByb3RvaW1wbC5Qb2ludGVyKHgpKQorCQlpZiBtcy5Mb2FkTWVzc2FnZUluZm8oKSA9PSBuaWwgeworCQkJbXMuU3RvcmVNZXNzYWdlSW5mbyhtaSkKKwkJfQorCQlyZXR1cm4gbXMKKwl9CisJcmV0dXJuIG1pLk1lc3NhZ2VPZih4KQorfQorCisvLyBEZXByZWNhdGVkOiBVc2UgR29GZWF0dXJlcy5Qcm90b1JlZmxlY3QuRGVzY3JpcHRvciBpbnN0ZWFkLgorZnVuYyAoKkdvRmVhdHVyZXMpIERlc2NyaXB0b3IoKSAoW11ieXRlLCBbXWludCkgeworCXJldHVybiBmaWxlX3JlZmxlY3RfcHJvdG9kZXNjX3Byb3RvX2dvX2ZlYXR1cmVzX3Byb3RvX3Jhd0Rlc2NHWklQKCksIFtdaW50ezB9Cit9CisKK2Z1bmMgKHggKkdvRmVhdHVyZXMpIEdldExlZ2FjeVVubWFyc2hhbEpzb25FbnVtKCkgYm9vbCB7CisJaWYgeCAhPSBuaWwgJiYgeC5MZWdhY3lVbm1hcnNoYWxKc29uRW51bSAhPSBuaWwgeworCQlyZXR1cm4gKnguTGVnYWN5VW5tYXJzaGFsSnNvbkVudW0KKwl9CisJcmV0dXJuIGZhbHNlCit9CisKK3ZhciBmaWxlX3JlZmxlY3RfcHJvdG9kZXNjX3Byb3RvX2dvX2ZlYXR1cmVzX3Byb3RvX2V4dFR5cGVzID0gW11wcm90b2ltcGwuRXh0ZW5zaW9uSW5mb3sKKwl7CisJCUV4dGVuZGVkVHlwZTogICgqZGVzY3JpcHRvcnBiLkZlYXR1cmVTZXQpKG5pbCksCisJCUV4dGVuc2lvblR5cGU6ICgqR29GZWF0dXJlcykobmlsKSwKKwkJRmllbGQ6ICAgICAgICAgMTAwMiwKKwkJTmFtZTogICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5nbyIsCisJCVRhZzogICAgICAgICAgICJieXRlcywxMDAyLG9wdCxuYW1lPWdvIiwKKwkJRmlsZW5hbWU6ICAgICAgInJlZmxlY3QvcHJvdG9kZXNjL3Byb3RvL2dvX2ZlYXR1cmVzLnByb3RvIiwKKwl9LAorfQorCisvLyBFeHRlbnNpb24gZmllbGRzIHRvIGRlc2NyaXB0b3JwYi5GZWF0dXJlU2V0LgordmFyICgKKwkvLyBvcHRpb25hbCBnb29nbGUucHJvdG9idWYuR29GZWF0dXJlcyBnbyA9IDEwMDI7CisJRV9HbyA9ICZmaWxlX3JlZmxlY3RfcHJvdG9kZXNjX3Byb3RvX2dvX2ZlYXR1cmVzX3Byb3RvX2V4dFR5cGVzWzBdCispCisKK3ZhciBGaWxlX3JlZmxlY3RfcHJvdG9kZXNjX3Byb3RvX2dvX2ZlYXR1cmVzX3Byb3RvIHByb3RvcmVmbGVjdC5GaWxlRGVzY3JpcHRvcgorCit2YXIgZmlsZV9yZWZsZWN0X3Byb3RvZGVzY19wcm90b19nb19mZWF0dXJlc19wcm90b19yYXdEZXNjID0gW11ieXRleworCTB4MGEsIDB4MjksIDB4NzIsIDB4NjUsIDB4NjYsIDB4NmMsIDB4NjUsIDB4NjMsIDB4NzQsIDB4MmYsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjQsCisJMHg2NSwgMHg3MywgMHg2MywgMHgyZiwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHgyZiwgMHg2NywgMHg2ZiwgMHg1ZiwgMHg2NiwgMHg2NSwgMHg2MSwKKwkweDc0LCAweDc1LCAweDcyLCAweDY1LCAweDczLCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDEyLCAweDBmLCAweDY3LCAweDZmLCAweDZmLAorCTB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsIDB4NjIsIDB4NzUsIDB4NjYsIDB4MWEsIDB4MjAsIDB4NjcsIDB4NmYsCisJMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZiwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZiwgMHg2NCwgMHg2NSwKKwkweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0LCAweDZmLCAweDcyLCAweDJlLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLCAweDIyLCAweDZhLAorCTB4MGEsIDB4MGEsIDB4NDcsIDB4NmYsIDB4NDYsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4NzMsIDB4MTIsIDB4NWMsIDB4MGEsIDB4MWEsCisJMHg2YywgMHg2NSwgMHg2NywgMHg2MSwgMHg2MywgMHg3OSwgMHg1ZiwgMHg3NSwgMHg2ZSwgMHg2ZCwgMHg2MSwgMHg3MiwgMHg3MywgMHg2OCwgMHg2MSwgMHg2YywKKwkweDVmLCAweDZhLCAweDczLCAweDZmLCAweDZlLCAweDVmLCAweDY1LCAweDZlLCAweDc1LCAweDZkLCAweDE4LCAweDAxLCAweDIwLCAweDAxLCAweDI4LCAweDA4LAorCTB4NDIsIDB4MWYsIDB4ODgsIDB4MDEsIDB4MDEsIDB4OTgsIDB4MDEsIDB4MDYsIDB4YTIsIDB4MDEsIDB4MDksIDB4MTIsIDB4MDQsIDB4NzQsIDB4NzIsIDB4NzUsCisJMHg2NSwgMHgxOCwgMHhlNiwgMHgwNywgMHhhMiwgMHgwMSwgMHgwYSwgMHgxMiwgMHgwNSwgMHg2NiwgMHg2MSwgMHg2YywgMHg3MywgMHg2NSwgMHgxOCwgMHhlNywKKwkweDA3LCAweDUyLCAweDE3LCAweDZjLCAweDY1LCAweDY3LCAweDYxLCAweDYzLCAweDc5LCAweDU1LCAweDZlLCAweDZkLCAweDYxLCAweDcyLCAweDczLCAweDY4LAorCTB4NjEsIDB4NmMsIDB4NGEsIDB4NzMsIDB4NmYsIDB4NmUsIDB4NDUsIDB4NmUsIDB4NzUsIDB4NmQsIDB4M2EsIDB4NDksIDB4MGEsIDB4MDIsIDB4NjcsIDB4NmYsCisJMHgxMiwgMHgxYiwgMHgyZSwgMHg2NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHgyZSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwKKwkweDc1LCAweDY2LCAweDJlLCAweDQ2LCAweDY1LCAweDYxLCAweDc0LCAweDc1LCAweDcyLCAweDY1LCAweDUzLCAweDY1LCAweDc0LCAweDE4LCAweGVhLCAweDA3LAorCTB4MjAsIDB4MDEsIDB4MjgsIDB4MGIsIDB4MzIsIDB4MWIsIDB4MmUsIDB4NjcsIDB4NmYsIDB4NmYsIDB4NjcsIDB4NmMsIDB4NjUsIDB4MmUsIDB4NzAsIDB4NzIsCisJMHg2ZiwgMHg3NCwgMHg2ZiwgMHg2MiwgMHg3NSwgMHg2NiwgMHgyZSwgMHg0NywgMHg2ZiwgMHg0NiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2NSwKKwkweDczLCAweDUyLCAweDAyLCAweDY3LCAweDZmLCAweDQyLCAweDM0LCAweDVhLCAweDMyLCAweDY3LCAweDZmLCAweDZmLCAweDY3LCAweDZjLCAweDY1LCAweDJlLAorCTB4NjcsIDB4NmYsIDB4NmMsIDB4NjEsIDB4NmUsIDB4NjcsIDB4MmUsIDB4NmYsIDB4NzIsIDB4NjcsIDB4MmYsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NmYsCisJMHg2MiwgMHg3NSwgMHg2NiwgMHgyZiwgMHg3MiwgMHg2NSwgMHg2NiwgMHg2YywgMHg2NSwgMHg2MywgMHg3NCwgMHgyZiwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3NCwKKwkweDZmLCAweDY0LCAweDY1LCAweDczLCAweDYzLCAweDJmLCAweDcwLCAweDcyLCAweDZmLCAweDc0LCAweDZmLAorfQorCit2YXIgKAorCWZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fcmF3RGVzY09uY2Ugc3luYy5PbmNlCisJZmlsZV9yZWZsZWN0X3Byb3RvZGVzY19wcm90b19nb19mZWF0dXJlc19wcm90b19yYXdEZXNjRGF0YSA9IGZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fcmF3RGVzYworKQorCitmdW5jIGZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fcmF3RGVzY0daSVAoKSBbXWJ5dGUgeworCWZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fcmF3RGVzY09uY2UuRG8oZnVuYygpIHsKKwkJZmlsZV9yZWZsZWN0X3Byb3RvZGVzY19wcm90b19nb19mZWF0dXJlc19wcm90b19yYXdEZXNjRGF0YSA9IHByb3RvaW1wbC5YLkNvbXByZXNzR1pJUChmaWxlX3JlZmxlY3RfcHJvdG9kZXNjX3Byb3RvX2dvX2ZlYXR1cmVzX3Byb3RvX3Jhd0Rlc2NEYXRhKQorCX0pCisJcmV0dXJuIGZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fcmF3RGVzY0RhdGEKK30KKwordmFyIGZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fbXNnVHlwZXMgPSBtYWtlKFtdcHJvdG9pbXBsLk1lc3NhZ2VJbmZvLCAxKQordmFyIGZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fZ29UeXBlcyA9IFtdaW50ZXJmYWNle317CisJKCpHb0ZlYXR1cmVzKShuaWwpLCAgICAgICAgICAgICAgLy8gMDogZ29vZ2xlLnByb3RvYnVmLkdvRmVhdHVyZXMKKwkoKmRlc2NyaXB0b3JwYi5GZWF0dXJlU2V0KShuaWwpLCAvLyAxOiBnb29nbGUucHJvdG9idWYuRmVhdHVyZVNldAorfQordmFyIGZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fZGVwSWR4cyA9IFtdaW50MzJ7CisJMSwgLy8gMDogZ29vZ2xlLnByb3RvYnVmLmdvOmV4dGVuZGVlIC0+IGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0CisJMCwgLy8gMTogZ29vZ2xlLnByb3RvYnVmLmdvOnR5cGVfbmFtZSAtPiBnb29nbGUucHJvdG9idWYuR29GZWF0dXJlcworCTIsIC8vIFsyOjJdIGlzIHRoZSBzdWItbGlzdCBmb3IgbWV0aG9kIG91dHB1dF90eXBlCisJMiwgLy8gWzI6Ml0gaXMgdGhlIHN1Yi1saXN0IGZvciBtZXRob2QgaW5wdXRfdHlwZQorCTEsIC8vIFsxOjJdIGlzIHRoZSBzdWItbGlzdCBmb3IgZXh0ZW5zaW9uIHR5cGVfbmFtZQorCTAsIC8vIFswOjFdIGlzIHRoZSBzdWItbGlzdCBmb3IgZXh0ZW5zaW9uIGV4dGVuZGVlCisJMCwgLy8gWzA6MF0gaXMgdGhlIHN1Yi1saXN0IGZvciBmaWVsZCB0eXBlX25hbWUKK30KKworZnVuYyBpbml0KCkgeyBmaWxlX3JlZmxlY3RfcHJvdG9kZXNjX3Byb3RvX2dvX2ZlYXR1cmVzX3Byb3RvX2luaXQoKSB9CitmdW5jIGZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9faW5pdCgpIHsKKwlpZiBGaWxlX3JlZmxlY3RfcHJvdG9kZXNjX3Byb3RvX2dvX2ZlYXR1cmVzX3Byb3RvICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlpZiAhcHJvdG9pbXBsLlVuc2FmZUVuYWJsZWQgeworCQlmaWxlX3JlZmxlY3RfcHJvdG9kZXNjX3Byb3RvX2dvX2ZlYXR1cmVzX3Byb3RvX21zZ1R5cGVzWzBdLkV4cG9ydGVyID0gZnVuYyh2IGludGVyZmFjZXt9LCBpIGludCkgaW50ZXJmYWNle30geworCQkJc3dpdGNoIHYgOj0gdi4oKkdvRmVhdHVyZXMpOyBpIHsKKwkJCWNhc2UgMDoKKwkJCQlyZXR1cm4gJnYuc3RhdGUKKwkJCWNhc2UgMToKKwkJCQlyZXR1cm4gJnYuc2l6ZUNhY2hlCisJCQljYXNlIDI6CisJCQkJcmV0dXJuICZ2LnVua25vd25GaWVsZHMKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIG5pbAorCQkJfQorCQl9CisJfQorCXR5cGUgeCBzdHJ1Y3R7fQorCW91dCA6PSBwcm90b2ltcGwuVHlwZUJ1aWxkZXJ7CisJCUZpbGU6IHByb3RvaW1wbC5EZXNjQnVpbGRlcnsKKwkJCUdvUGFja2FnZVBhdGg6IHJlZmxlY3QuVHlwZU9mKHh7fSkuUGtnUGF0aCgpLAorCQkJUmF3RGVzY3JpcHRvcjogZmlsZV9yZWZsZWN0X3Byb3RvZGVzY19wcm90b19nb19mZWF0dXJlc19wcm90b19yYXdEZXNjLAorCQkJTnVtRW51bXM6ICAgICAgMCwKKwkJCU51bU1lc3NhZ2VzOiAgIDEsCisJCQlOdW1FeHRlbnNpb25zOiAxLAorCQkJTnVtU2VydmljZXM6ICAgMCwKKwkJfSwKKwkJR29UeXBlczogICAgICAgICAgIGZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fZ29UeXBlcywKKwkJRGVwZW5kZW5jeUluZGV4ZXM6IGZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fZGVwSWR4cywKKwkJTWVzc2FnZUluZm9zOiAgICAgIGZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fbXNnVHlwZXMsCisJCUV4dGVuc2lvbkluZm9zOiAgICBmaWxlX3JlZmxlY3RfcHJvdG9kZXNjX3Byb3RvX2dvX2ZlYXR1cmVzX3Byb3RvX2V4dFR5cGVzLAorCX0uQnVpbGQoKQorCUZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG8gPSBvdXQuRmlsZQorCWZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fcmF3RGVzYyA9IG5pbAorCWZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fZ29UeXBlcyA9IG5pbAorCWZpbGVfcmVmbGVjdF9wcm90b2Rlc2NfcHJvdG9fZ29fZmVhdHVyZXNfcHJvdG9fZGVwSWR4cyA9IG5pbAorfQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2dvZmVhdHVyZXNwYi9nb19mZWF0dXJlcy5wcm90byBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9nb2ZlYXR1cmVzcGIvZ29fZmVhdHVyZXMucHJvdG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0NjU3MQotLS0gL2Rldi9udWxsCisrKyBiL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9nb2ZlYXR1cmVzcGIvZ29fZmVhdHVyZXMucHJvdG8KQEAgLTAsMCArMSwyOCBAQAorLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0CisvLyBDb3B5cmlnaHQgMjAyMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQorLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIG9yIGF0CisvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9vcGVuLXNvdXJjZS9saWNlbnNlcy9ic2QKKworc3ludGF4ID0gInByb3RvMiI7CisKK3BhY2thZ2UgZ29vZ2xlLnByb3RvYnVmOworCitpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvIjsKKworb3B0aW9uIGdvX3BhY2thZ2UgPSAiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZ29mZWF0dXJlc3BiIjsKKworZXh0ZW5kIGdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0IHsKKyAgb3B0aW9uYWwgR29GZWF0dXJlcyBnbyA9IDEwMDI7Cit9CisKK21lc3NhZ2UgR29GZWF0dXJlcyB7CisgIC8vIFdoZXRoZXIgb3Igbm90IHRvIGdlbmVyYXRlIHRoZSBkZXByZWNhdGVkIFVubWFyc2hhbEpTT04gbWV0aG9kIGZvciBlbnVtcy4KKyAgb3B0aW9uYWwgYm9vbCBsZWdhY3lfdW5tYXJzaGFsX2pzb25fZW51bSA9IDEgWworICAgIHJldGVudGlvbiA9IFJFVEVOVElPTl9SVU5USU1FLAorICAgIHRhcmdldHMgPSBUQVJHRVRfVFlQRV9FTlVNLAorICAgIGVkaXRpb25fZGVmYXVsdHMgPSB7IGVkaXRpb246IEVESVRJT05fUFJPVE8yLCB2YWx1ZTogInRydWUiIH0sCisgICAgZWRpdGlvbl9kZWZhdWx0cyA9IHsgZWRpdGlvbjogRURJVElPTl9QUk9UTzMsIHZhbHVlOiAiZmFsc2UiIH0KKyAgXTsKK30KZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9hbnlwYi9hbnkucGIuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vYW55cGIvYW55LnBiLmdvCmluZGV4IDhjMTA3OTcuLjlkZTUxYmUgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9hbnlwYi9hbnkucGIuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2FueXBiL2FueS5wYi5nbwpAQCAtMzcsOCArMzcsNyBAQAogLy8gSXQgaXMgZnVuY3Rpb25hbGx5IGEgdHVwbGUgb2YgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgcmVtb3RlIG1lc3NhZ2UgdHlwZSBhbmQKIC8vIHRoZSBzZXJpYWxpemVkIGJ5dGVzIG9mIHRoZSByZW1vdGUgbWVzc2FnZSB2YWx1ZS4KIC8vCi0vLwotLy8gQ29uc3RydWN0aW5nIGFuIEFueQorLy8gIyBDb25zdHJ1Y3RpbmcgYW4gQW55CiAvLwogLy8gQW4gQW55IG1lc3NhZ2UgY29udGFpbmluZyBhbm90aGVyIG1lc3NhZ2UgdmFsdWUgaXMgY29uc3RydWN0ZWQgdXNpbmcgTmV3OgogLy8KQEAgLTQ4LDggKzQ3LDcgQEAKIC8vCX0KIC8vCS4uLiAvLyBtYWtlIHVzZSBvZiBhbnkKIC8vCi0vLwotLy8gVW5tYXJzaGFsaW5nIGFuIEFueQorLy8gIyBVbm1hcnNoYWxpbmcgYW4gQW55CiAvLwogLy8gV2l0aCBhIHBvcHVsYXRlZCBBbnkgbWVzc2FnZSwgdGhlIHVuZGVybHlpbmcgbWVzc2FnZSBjYW4gYmUgc2VyaWFsaXplZCBpbnRvCiAvLyBhIHJlbW90ZSBjb25jcmV0ZSBtZXNzYWdlIHZhbHVlIGluIGEgZmV3IHdheXMuCkBAIC05NSw4ICs5Myw3IEBACiAvLyBsaXN0ZWQgaW4gdGhlIGNhc2UgY2xhdXNlcyBhcmUgbGlua2VkIGludG8gdGhlIEdvIGJpbmFyeSBhbmQgdGhlcmVmb3JlIGFsc28KIC8vIHJlZ2lzdGVyZWQgaW4gdGhlIGdsb2JhbCByZWdpc3RyeS4KIC8vCi0vLwotLy8gVHlwZSBjaGVja2luZyBhbiBBbnkKKy8vICMgVHlwZSBjaGVja2luZyBhbiBBbnkKIC8vCiAvLyBJbiBvcmRlciB0byB0eXBlIGNoZWNrIHdoZXRoZXIgYW4gQW55IG1lc3NhZ2UgcmVwcmVzZW50cyBzb21lIG90aGVyIG1lc3NhZ2UsCiAvLyB0aGVuIHVzZSB0aGUgTWVzc2FnZUlzIG1ldGhvZDoKQEAgLTExNSw3ICsxMTIsNiBAQAogLy8JCX0KIC8vCQkuLi4gLy8gbWFrZSB1c2Ugb2YgbQogLy8JfQotLy8KIHBhY2thZ2UgYW55cGIKIAogaW1wb3J0ICgKQEAgLTEzNiw0NSArMTMyLDQ5IEBACiAvLwogLy8gRXhhbXBsZSAxOiBQYWNrIGFuZCB1bnBhY2sgYSBtZXNzYWdlIGluIEMrKy4KIC8vCi0vLyAgICAgRm9vIGZvbyA9IC4uLjsKLS8vICAgICBBbnkgYW55OwotLy8gICAgIGFueS5QYWNrRnJvbShmb28pOwotLy8gICAgIC4uLgotLy8gICAgIGlmIChhbnkuVW5wYWNrVG8oJmZvbykpIHsKLS8vICAgICAgIC4uLgotLy8gICAgIH0KKy8vCUZvbyBmb28gPSAuLi47CisvLwlBbnkgYW55OworLy8JYW55LlBhY2tGcm9tKGZvbyk7CisvLwkuLi4KKy8vCWlmIChhbnkuVW5wYWNrVG8oJmZvbykpIHsKKy8vCSAgLi4uCisvLwl9CiAvLwogLy8gRXhhbXBsZSAyOiBQYWNrIGFuZCB1bnBhY2sgYSBtZXNzYWdlIGluIEphdmEuCiAvLwotLy8gICAgIEZvbyBmb28gPSAuLi47Ci0vLyAgICAgQW55IGFueSA9IEFueS5wYWNrKGZvbyk7Ci0vLyAgICAgLi4uCi0vLyAgICAgaWYgKGFueS5pcyhGb28uY2xhc3MpKSB7Ci0vLyAgICAgICBmb28gPSBhbnkudW5wYWNrKEZvby5jbGFzcyk7Ci0vLyAgICAgfQorLy8JICAgRm9vIGZvbyA9IC4uLjsKKy8vCSAgIEFueSBhbnkgPSBBbnkucGFjayhmb28pOworLy8JICAgLi4uCisvLwkgICBpZiAoYW55LmlzKEZvby5jbGFzcykpIHsKKy8vCSAgICAgZm9vID0gYW55LnVucGFjayhGb28uY2xhc3MpOworLy8JICAgfQorLy8JICAgLy8gb3IgLi4uCisvLwkgICBpZiAoYW55LmlzU2FtZVR5cGVBcyhGb28uZ2V0RGVmYXVsdEluc3RhbmNlKCkpKSB7CisvLwkgICAgIGZvbyA9IGFueS51bnBhY2soRm9vLmdldERlZmF1bHRJbnN0YW5jZSgpKTsKKy8vCSAgIH0KIC8vCi0vLyAgRXhhbXBsZSAzOiBQYWNrIGFuZCB1bnBhY2sgYSBtZXNzYWdlIGluIFB5dGhvbi4KKy8vCUV4YW1wbGUgMzogUGFjayBhbmQgdW5wYWNrIGEgbWVzc2FnZSBpbiBQeXRob24uCiAvLwotLy8gICAgIGZvbyA9IEZvbyguLi4pCi0vLyAgICAgYW55ID0gQW55KCkKLS8vICAgICBhbnkuUGFjayhmb28pCi0vLyAgICAgLi4uCi0vLyAgICAgaWYgYW55LklzKEZvby5ERVNDUklQVE9SKToKLS8vICAgICAgIGFueS5VbnBhY2soZm9vKQotLy8gICAgICAgLi4uCisvLwkgICBmb28gPSBGb28oLi4uKQorLy8JICAgYW55ID0gQW55KCkKKy8vCSAgIGFueS5QYWNrKGZvbykKKy8vCSAgIC4uLgorLy8JICAgaWYgYW55LklzKEZvby5ERVNDUklQVE9SKToKKy8vCSAgICAgYW55LlVucGFjayhmb28pCisvLwkgICAgIC4uLgogLy8KLS8vICBFeGFtcGxlIDQ6IFBhY2sgYW5kIHVucGFjayBhIG1lc3NhZ2UgaW4gR28KKy8vCUV4YW1wbGUgNDogUGFjayBhbmQgdW5wYWNrIGEgbWVzc2FnZSBpbiBHbwogLy8KLS8vICAgICAgZm9vIDo9ICZwYi5Gb297Li4ufQotLy8gICAgICBhbnksIGVyciA6PSBhbnlwYi5OZXcoZm9vKQotLy8gICAgICBpZiBlcnIgIT0gbmlsIHsKLS8vICAgICAgICAuLi4KLS8vICAgICAgfQotLy8gICAgICAuLi4KLS8vICAgICAgZm9vIDo9ICZwYi5Gb297fQotLy8gICAgICBpZiBlcnIgOj0gYW55LlVubWFyc2hhbFRvKGZvbyk7IGVyciAhPSBuaWwgewotLy8gICAgICAgIC4uLgotLy8gICAgICB9CisvLwkgICAgZm9vIDo9ICZwYi5Gb297Li4ufQorLy8JICAgIGFueSwgZXJyIDo9IGFueXBiLk5ldyhmb28pCisvLwkgICAgaWYgZXJyICE9IG5pbCB7CisvLwkgICAgICAuLi4KKy8vCSAgICB9CisvLwkgICAgLi4uCisvLwkgICAgZm9vIDo9ICZwYi5Gb297fQorLy8JICAgIGlmIGVyciA6PSBhbnkuVW5tYXJzaGFsVG8oZm9vKTsgZXJyICE9IG5pbCB7CisvLwkgICAgICAuLi4KKy8vCSAgICB9CiAvLwogLy8gVGhlIHBhY2sgbWV0aG9kcyBwcm92aWRlZCBieSBwcm90b2J1ZiBsaWJyYXJ5IHdpbGwgYnkgZGVmYXVsdCB1c2UKIC8vICd0eXBlLmdvb2dsZWFwaXMuY29tL2Z1bGwudHlwZS5uYW1lJyBhcyB0aGUgdHlwZSBVUkwgYW5kIHRoZSB1bnBhY2sKQEAgLTE4MiwzNSArMTgyLDMzIEBACiAvLyBpbiB0aGUgdHlwZSBVUkwsIGZvciBleGFtcGxlICJmb28uYmFyLmNvbS94L3kueiIgd2lsbCB5aWVsZCB0eXBlCiAvLyBuYW1lICJ5LnoiLgogLy8KLS8vCiAvLyBKU09OCiAvLyA9PT09CiAvLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhbiBgQW55YCB2YWx1ZSB1c2VzIHRoZSByZWd1bGFyCiAvLyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGVzZXJpYWxpemVkLCBlbWJlZGRlZCBtZXNzYWdlLCB3aXRoIGFuCiAvLyBhZGRpdGlvbmFsIGZpZWxkIGBAdHlwZWAgd2hpY2ggY29udGFpbnMgdGhlIHR5cGUgVVJMLiBFeGFtcGxlOgogLy8KLS8vICAgICBwYWNrYWdlIGdvb2dsZS5wcm9maWxlOwotLy8gICAgIG1lc3NhZ2UgUGVyc29uIHsKLS8vICAgICAgIHN0cmluZyBmaXJzdF9uYW1lID0gMTsKLS8vICAgICAgIHN0cmluZyBsYXN0X25hbWUgPSAyOwotLy8gICAgIH0KKy8vCXBhY2thZ2UgZ29vZ2xlLnByb2ZpbGU7CisvLwltZXNzYWdlIFBlcnNvbiB7CisvLwkgIHN0cmluZyBmaXJzdF9uYW1lID0gMTsKKy8vCSAgc3RyaW5nIGxhc3RfbmFtZSA9IDI7CisvLwl9CiAvLwotLy8gICAgIHsKLS8vICAgICAgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm9maWxlLlBlcnNvbiIsCi0vLyAgICAgICAiZmlyc3ROYW1lIjogPHN0cmluZz4sCi0vLyAgICAgICAibGFzdE5hbWUiOiA8c3RyaW5nPgotLy8gICAgIH0KKy8vCXsKKy8vCSAgIkB0eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb2ZpbGUuUGVyc29uIiwKKy8vCSAgImZpcnN0TmFtZSI6IDxzdHJpbmc+LAorLy8JICAibGFzdE5hbWUiOiA8c3RyaW5nPgorLy8JfQogLy8KIC8vIElmIHRoZSBlbWJlZGRlZCBtZXNzYWdlIHR5cGUgaXMgd2VsbC1rbm93biBhbmQgaGFzIGEgY3VzdG9tIEpTT04KIC8vIHJlcHJlc2VudGF0aW9uLCB0aGF0IHJlcHJlc2VudGF0aW9uIHdpbGwgYmUgZW1iZWRkZWQgYWRkaW5nIGEgZmllbGQKIC8vIGB2YWx1ZWAgd2hpY2ggaG9sZHMgdGhlIGN1c3RvbSBKU09OIGluIGFkZGl0aW9uIHRvIHRoZSBgQHR5cGVgCiAvLyBmaWVsZC4gRXhhbXBsZSAoZm9yIG1lc3NhZ2UgW2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbl1bXSk6CiAvLwotLy8gICAgIHsKLS8vICAgICAgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiIsCi0vLyAgICAgICAidmFsdWUiOiAiMS4yMTJzIgotLy8gICAgIH0KLS8vCisvLwl7CisvLwkgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiIsCisvLwkgICJ2YWx1ZSI6ICIxLjIxMnMiCisvLwl9CiB0eXBlIEFueSBzdHJ1Y3QgewogCXN0YXRlICAgICAgICAgcHJvdG9pbXBsLk1lc3NhZ2VTdGF0ZQogCXNpemVDYWNoZSAgICAgcHJvdG9pbXBsLlNpemVDYWNoZQpAQCAtMjI4LDIyICsyMjYsMjIgQEAKIAkvLyBzY2hlbWUgYGh0dHBgLCBgaHR0cHNgLCBvciBubyBzY2hlbWUsIG9uZSBjYW4gb3B0aW9uYWxseSBzZXQgdXAgYSB0eXBlCiAJLy8gc2VydmVyIHRoYXQgbWFwcyB0eXBlIFVSTHMgdG8gbWVzc2FnZSBkZWZpbml0aW9ucyBhcyBmb2xsb3dzOgogCS8vCi0JLy8gKiBJZiBubyBzY2hlbWUgaXMgcHJvdmlkZWQsIGBodHRwc2AgaXMgYXNzdW1lZC4KLQkvLyAqIEFuIEhUVFAgR0VUIG9uIHRoZSBVUkwgbXVzdCB5aWVsZCBhIFtnb29nbGUucHJvdG9idWYuVHlwZV1bXQotCS8vICAgdmFsdWUgaW4gYmluYXJ5IGZvcm1hdCwgb3IgcHJvZHVjZSBhbiBlcnJvci4KLQkvLyAqIEFwcGxpY2F0aW9ucyBhcmUgYWxsb3dlZCB0byBjYWNoZSBsb29rdXAgcmVzdWx0cyBiYXNlZCBvbiB0aGUKLQkvLyAgIFVSTCwgb3IgaGF2ZSB0aGVtIHByZWNvbXBpbGVkIGludG8gYSBiaW5hcnkgdG8gYXZvaWQgYW55Ci0JLy8gICBsb29rdXAuIFRoZXJlZm9yZSwgYmluYXJ5IGNvbXBhdGliaWxpdHkgbmVlZHMgdG8gYmUgcHJlc2VydmVkCi0JLy8gICBvbiBjaGFuZ2VzIHRvIHR5cGVzLiAoVXNlIHZlcnNpb25lZCB0eXBlIG5hbWVzIHRvIG1hbmFnZQotCS8vICAgYnJlYWtpbmcgY2hhbmdlcy4pCisJLy8gICAtIElmIG5vIHNjaGVtZSBpcyBwcm92aWRlZCwgYGh0dHBzYCBpcyBhc3N1bWVkLgorCS8vICAgLSBBbiBIVFRQIEdFVCBvbiB0aGUgVVJMIG11c3QgeWllbGQgYSBbZ29vZ2xlLnByb3RvYnVmLlR5cGVdW10KKwkvLyAgICAgdmFsdWUgaW4gYmluYXJ5IGZvcm1hdCwgb3IgcHJvZHVjZSBhbiBlcnJvci4KKwkvLyAgIC0gQXBwbGljYXRpb25zIGFyZSBhbGxvd2VkIHRvIGNhY2hlIGxvb2t1cCByZXN1bHRzIGJhc2VkIG9uIHRoZQorCS8vICAgICBVUkwsIG9yIGhhdmUgdGhlbSBwcmVjb21waWxlZCBpbnRvIGEgYmluYXJ5IHRvIGF2b2lkIGFueQorCS8vICAgICBsb29rdXAuIFRoZXJlZm9yZSwgYmluYXJ5IGNvbXBhdGliaWxpdHkgbmVlZHMgdG8gYmUgcHJlc2VydmVkCisJLy8gICAgIG9uIGNoYW5nZXMgdG8gdHlwZXMuIChVc2UgdmVyc2lvbmVkIHR5cGUgbmFtZXMgdG8gbWFuYWdlCisJLy8gICAgIGJyZWFraW5nIGNoYW5nZXMuKQogCS8vCiAJLy8gTm90ZTogdGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoZSBvZmZpY2lhbAogCS8vIHByb3RvYnVmIHJlbGVhc2UsIGFuZCBpdCBpcyBub3QgdXNlZCBmb3IgdHlwZSBVUkxzIGJlZ2lubmluZyB3aXRoCi0JLy8gdHlwZS5nb29nbGVhcGlzLmNvbS4KKwkvLyB0eXBlLmdvb2dsZWFwaXMuY29tLiBBcyBvZiBNYXkgMjAyMywgdGhlcmUgYXJlIG5vIHdpZGVseSB1c2VkIHR5cGUgc2VydmVyCisJLy8gaW1wbGVtZW50YXRpb25zIGFuZCBubyBwbGFucyB0byBpbXBsZW1lbnQgb25lLgogCS8vCiAJLy8gU2NoZW1lcyBvdGhlciB0aGFuIGBodHRwYCwgYGh0dHBzYCAob3IgdGhlIGVtcHR5IHNjaGVtZSkgbWlnaHQgYmUKIAkvLyB1c2VkIHdpdGggaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc2VtYW50aWNzLgotCS8vCiAJVHlwZVVybCBzdHJpbmcgYHByb3RvYnVmOiJieXRlcywxLG9wdCxuYW1lPXR5cGVfdXJsLGpzb249dHlwZVVybCxwcm90bzMiIGpzb246InR5cGVfdXJsLG9taXRlbXB0eSJgCiAJLy8gTXVzdCBiZSBhIHZhbGlkIHNlcmlhbGl6ZWQgcHJvdG9jb2wgYnVmZmVyIG9mIHRoZSBhYm92ZSBzcGVjaWZpZWQgdHlwZS4KIAlWYWx1ZSBbXWJ5dGUgYHByb3RvYnVmOiJieXRlcywyLG9wdCxuYW1lPXZhbHVlLHByb3RvMyIganNvbjoidmFsdWUsb21pdGVtcHR5ImAKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9kdXJhdGlvbnBiL2R1cmF0aW9uLnBiLmdvIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2R1cmF0aW9ucGIvZHVyYXRpb24ucGIuZ28KaW5kZXggYTU4M2NhMi4uZGY3MDlhOCAxMDA2NDQKLS0tIGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2R1cmF0aW9ucGIvZHVyYXRpb24ucGIuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2R1cmF0aW9ucGIvZHVyYXRpb24ucGIuZ28KQEAgLTM1LDggKzM1LDcgQEAKIC8vCiAvLyBUaGUgRHVyYXRpb24gbWVzc2FnZSByZXByZXNlbnRzIGEgc2lnbmVkIHNwYW4gb2YgdGltZS4KIC8vCi0vLwotLy8gQ29udmVyc2lvbiB0byBhIEdvIER1cmF0aW9uCisvLyAjIENvbnZlcnNpb24gdG8gYSBHbyBEdXJhdGlvbgogLy8KIC8vIFRoZSBBc0R1cmF0aW9uIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGEgRHVyYXRpb24gbWVzc2FnZSB0byBhCiAvLyBzdGFuZGFyZCBHbyB0aW1lLkR1cmF0aW9uIHZhbHVlOgpAQCAtNjUsMTUgKzY0LDEzIEBACiAvLyB0aGUgcmVzdWx0aW5nIHZhbHVlIHRvIHRoZSBjbG9zZXN0IHJlcHJlc2VudGFibGUgdmFsdWUgKGUuZy4sIG1hdGguTWF4SW50NjQKIC8vIGZvciBwb3NpdGl2ZSBvdmVyZmxvdyBhbmQgbWF0aC5NaW5JbnQ2NCBmb3IgbmVnYXRpdmUgb3ZlcmZsb3cpLgogLy8KLS8vCi0vLyBDb252ZXJzaW9uIGZyb20gYSBHbyBEdXJhdGlvbgorLy8gIyBDb252ZXJzaW9uIGZyb20gYSBHbyBEdXJhdGlvbgogLy8KIC8vIFRoZSBkdXJhdGlvbnBiLk5ldyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYSBEdXJhdGlvbiBtZXNzYWdlCiAvLyBmcm9tIGEgc3RhbmRhcmQgR28gdGltZS5EdXJhdGlvbiB2YWx1ZToKIC8vCiAvLwlkdXIgOj0gZHVyYXRpb25wYi5OZXcoZCkKIC8vCS4uLiAvLyBtYWtlIHVzZSBvZiBkIGFzIGEgKmR1cmF0aW9ucGIuRHVyYXRpb24KLS8vCiBwYWNrYWdlIGR1cmF0aW9ucGIKIAogaW1wb3J0ICgKQEAgLTk2LDQzICs5Myw0MyBAQAogLy8KIC8vIEV4YW1wbGUgMTogQ29tcHV0ZSBEdXJhdGlvbiBmcm9tIHR3byBUaW1lc3RhbXBzIGluIHBzZXVkbyBjb2RlLgogLy8KLS8vICAgICBUaW1lc3RhbXAgc3RhcnQgPSAuLi47Ci0vLyAgICAgVGltZXN0YW1wIGVuZCA9IC4uLjsKLS8vICAgICBEdXJhdGlvbiBkdXJhdGlvbiA9IC4uLjsKKy8vCVRpbWVzdGFtcCBzdGFydCA9IC4uLjsKKy8vCVRpbWVzdGFtcCBlbmQgPSAuLi47CisvLwlEdXJhdGlvbiBkdXJhdGlvbiA9IC4uLjsKIC8vCi0vLyAgICAgZHVyYXRpb24uc2Vjb25kcyA9IGVuZC5zZWNvbmRzIC0gc3RhcnQuc2Vjb25kczsKLS8vICAgICBkdXJhdGlvbi5uYW5vcyA9IGVuZC5uYW5vcyAtIHN0YXJ0Lm5hbm9zOworLy8JZHVyYXRpb24uc2Vjb25kcyA9IGVuZC5zZWNvbmRzIC0gc3RhcnQuc2Vjb25kczsKKy8vCWR1cmF0aW9uLm5hbm9zID0gZW5kLm5hbm9zIC0gc3RhcnQubmFub3M7CiAvLwotLy8gICAgIGlmIChkdXJhdGlvbi5zZWNvbmRzIDwgMCAmJiBkdXJhdGlvbi5uYW5vcyA+IDApIHsKLS8vICAgICAgIGR1cmF0aW9uLnNlY29uZHMgKz0gMTsKLS8vICAgICAgIGR1cmF0aW9uLm5hbm9zIC09IDEwMDAwMDAwMDA7Ci0vLyAgICAgfSBlbHNlIGlmIChkdXJhdGlvbi5zZWNvbmRzID4gMCAmJiBkdXJhdGlvbi5uYW5vcyA8IDApIHsKLS8vICAgICAgIGR1cmF0aW9uLnNlY29uZHMgLT0gMTsKLS8vICAgICAgIGR1cmF0aW9uLm5hbm9zICs9IDEwMDAwMDAwMDA7Ci0vLyAgICAgfQorLy8JaWYgKGR1cmF0aW9uLnNlY29uZHMgPCAwICYmIGR1cmF0aW9uLm5hbm9zID4gMCkgeworLy8JICBkdXJhdGlvbi5zZWNvbmRzICs9IDE7CisvLwkgIGR1cmF0aW9uLm5hbm9zIC09IDEwMDAwMDAwMDA7CisvLwl9IGVsc2UgaWYgKGR1cmF0aW9uLnNlY29uZHMgPiAwICYmIGR1cmF0aW9uLm5hbm9zIDwgMCkgeworLy8JICBkdXJhdGlvbi5zZWNvbmRzIC09IDE7CisvLwkgIGR1cmF0aW9uLm5hbm9zICs9IDEwMDAwMDAwMDA7CisvLwl9CiAvLwogLy8gRXhhbXBsZSAyOiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIFRpbWVzdGFtcCArIER1cmF0aW9uIGluIHBzZXVkbyBjb2RlLgogLy8KLS8vICAgICBUaW1lc3RhbXAgc3RhcnQgPSAuLi47Ci0vLyAgICAgRHVyYXRpb24gZHVyYXRpb24gPSAuLi47Ci0vLyAgICAgVGltZXN0YW1wIGVuZCA9IC4uLjsKKy8vCVRpbWVzdGFtcCBzdGFydCA9IC4uLjsKKy8vCUR1cmF0aW9uIGR1cmF0aW9uID0gLi4uOworLy8JVGltZXN0YW1wIGVuZCA9IC4uLjsKIC8vCi0vLyAgICAgZW5kLnNlY29uZHMgPSBzdGFydC5zZWNvbmRzICsgZHVyYXRpb24uc2Vjb25kczsKLS8vICAgICBlbmQubmFub3MgPSBzdGFydC5uYW5vcyArIGR1cmF0aW9uLm5hbm9zOworLy8JZW5kLnNlY29uZHMgPSBzdGFydC5zZWNvbmRzICsgZHVyYXRpb24uc2Vjb25kczsKKy8vCWVuZC5uYW5vcyA9IHN0YXJ0Lm5hbm9zICsgZHVyYXRpb24ubmFub3M7CiAvLwotLy8gICAgIGlmIChlbmQubmFub3MgPCAwKSB7Ci0vLyAgICAgICBlbmQuc2Vjb25kcyAtPSAxOwotLy8gICAgICAgZW5kLm5hbm9zICs9IDEwMDAwMDAwMDA7Ci0vLyAgICAgfSBlbHNlIGlmIChlbmQubmFub3MgPj0gMTAwMDAwMDAwMCkgewotLy8gICAgICAgZW5kLnNlY29uZHMgKz0gMTsKLS8vICAgICAgIGVuZC5uYW5vcyAtPSAxMDAwMDAwMDAwOwotLy8gICAgIH0KKy8vCWlmIChlbmQubmFub3MgPCAwKSB7CisvLwkgIGVuZC5zZWNvbmRzIC09IDE7CisvLwkgIGVuZC5uYW5vcyArPSAxMDAwMDAwMDAwOworLy8JfSBlbHNlIGlmIChlbmQubmFub3MgPj0gMTAwMDAwMDAwMCkgeworLy8JICBlbmQuc2Vjb25kcyArPSAxOworLy8JICBlbmQubmFub3MgLT0gMTAwMDAwMDAwMDsKKy8vCX0KIC8vCiAvLyBFeGFtcGxlIDM6IENvbXB1dGUgRHVyYXRpb24gZnJvbSBkYXRldGltZS50aW1lZGVsdGEgaW4gUHl0aG9uLgogLy8KLS8vICAgICB0ZCA9IGRhdGV0aW1lLnRpbWVkZWx0YShkYXlzPTMsIG1pbnV0ZXM9MTApCi0vLyAgICAgZHVyYXRpb24gPSBEdXJhdGlvbigpCi0vLyAgICAgZHVyYXRpb24uRnJvbVRpbWVkZWx0YSh0ZCkKKy8vCXRkID0gZGF0ZXRpbWUudGltZWRlbHRhKGRheXM9MywgbWludXRlcz0xMCkKKy8vCWR1cmF0aW9uID0gRHVyYXRpb24oKQorLy8JZHVyYXRpb24uRnJvbVRpbWVkZWx0YSh0ZCkKIC8vCiAvLyAjIEpTT04gTWFwcGluZwogLy8KQEAgLTE0Myw4ICsxNDAsNiBAQAogLy8gZW5jb2RlZCBpbiBKU09OIGZvcm1hdCBhcyAiM3MiLCB3aGlsZSAzIHNlY29uZHMgYW5kIDEgbmFub3NlY29uZCBzaG91bGQKIC8vIGJlIGV4cHJlc3NlZCBpbiBKU09OIGZvcm1hdCBhcyAiMy4wMDAwMDAwMDFzIiwgYW5kIDMgc2Vjb25kcyBhbmQgMQogLy8gbWljcm9zZWNvbmQgc2hvdWxkIGJlIGV4cHJlc3NlZCBpbiBKU09OIGZvcm1hdCBhcyAiMy4wMDAwMDFzIi4KLS8vCi0vLwogdHlwZSBEdXJhdGlvbiBzdHJ1Y3QgewogCXN0YXRlICAgICAgICAgcHJvdG9pbXBsLk1lc3NhZ2VTdGF0ZQogCXNpemVDYWNoZSAgICAgcHJvdG9pbXBsLlNpemVDYWNoZQpkaWZmIC0tZ2l0IGEvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2VtcHR5cGIvZW1wdHkucGIuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vZW1wdHlwYi9lbXB0eS5wYi5nbwppbmRleCBlN2ZjZWEzLi45YTcyNzdiIDEwMDY0NAotLS0gYS92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vZW1wdHlwYi9lbXB0eS5wYi5nbworKysgYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vZW1wdHlwYi9lbXB0eS5wYi5nbwpAQCAtNDQsMTEgKzQ0LDkgQEAKIC8vIGVtcHR5IG1lc3NhZ2VzIGluIHlvdXIgQVBJcy4gQSB0eXBpY2FsIGV4YW1wbGUgaXMgdG8gdXNlIGl0IGFzIHRoZSByZXF1ZXN0CiAvLyBvciB0aGUgcmVzcG9uc2UgdHlwZSBvZiBhbiBBUEkgbWV0aG9kLiBGb3IgaW5zdGFuY2U6CiAvLwotLy8gICAgIHNlcnZpY2UgRm9vIHsKLS8vICAgICAgIHJwYyBCYXIoZ29vZ2xlLnByb3RvYnVmLkVtcHR5KSByZXR1cm5zIChnb29nbGUucHJvdG9idWYuRW1wdHkpOwotLy8gICAgIH0KLS8vCi0vLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgYEVtcHR5YCBpcyBlbXB0eSBKU09OIG9iamVjdCBge31gLgorLy8Jc2VydmljZSBGb28geworLy8JICBycGMgQmFyKGdvb2dsZS5wcm90b2J1Zi5FbXB0eSkgcmV0dXJucyAoZ29vZ2xlLnByb3RvYnVmLkVtcHR5KTsKKy8vCX0KIHR5cGUgRW1wdHkgc3RydWN0IHsKIAlzdGF0ZSAgICAgICAgIHByb3RvaW1wbC5NZXNzYWdlU3RhdGUKIAlzaXplQ2FjaGUgICAgIHByb3RvaW1wbC5TaXplQ2FjaGUKZGlmZiAtLWdpdCBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi90aW1lc3RhbXBwYi90aW1lc3RhbXAucGIuZ28gYi92ZW5kb3IvZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vdGltZXN0YW1wcGIvdGltZXN0YW1wLnBiLmdvCmluZGV4IGM5YWU5MjEuLjgxNTExYTMgMTAwNjQ0Ci0tLSBhL3ZlbmRvci9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi90aW1lc3RhbXBwYi90aW1lc3RhbXAucGIuZ28KKysrIGIvdmVuZG9yL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3RpbWVzdGFtcHBiL3RpbWVzdGFtcC5wYi5nbwpAQCAtMzYsOCArMzYsNyBAQAogLy8gVGhlIFRpbWVzdGFtcCBtZXNzYWdlIHJlcHJlc2VudHMgYSB0aW1lc3RhbXAsCiAvLyBhbiBpbnN0YW50IGluIHRpbWUgc2luY2UgdGhlIFVuaXggZXBvY2ggKEphbnVhcnkgMXN0LCAxOTcwKS4KIC8vCi0vLwotLy8gQ29udmVyc2lvbiB0byBhIEdvIFRpbWUKKy8vICMgQ29udmVyc2lvbiB0byBhIEdvIFRpbWUKIC8vCiAvLyBUaGUgQXNUaW1lIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGEgVGltZXN0YW1wIG1lc3NhZ2UgdG8gYQogLy8gc3RhbmRhcmQgR28gdGltZS5UaW1lIHZhbHVlIGluIFVUQzoKQEAgLTU5LDggKzU4LDcgQEAKIC8vCQkuLi4gLy8gaGFuZGxlIGVycm9yCiAvLwl9CiAvLwotLy8KLS8vIENvbnZlcnNpb24gZnJvbSBhIEdvIFRpbWUKKy8vICMgQ29udmVyc2lvbiBmcm9tIGEgR28gVGltZQogLy8KIC8vIFRoZSB0aW1lc3RhbXBwYi5OZXcgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGEgVGltZXN0YW1wIG1lc3NhZ2UKIC8vIGZyb20gYSBzdGFuZGFyZCBHbyB0aW1lLlRpbWUgdmFsdWU6CkBAIC03Miw3ICs3MCw2IEBACiAvLwogLy8JdHMgOj0gdGltZXN0YW1wcGIuTm93KCkKIC8vCS4uLiAvLyBtYWtlIHVzZSBvZiB0cyBhcyBhICp0aW1lc3RhbXBwYi5UaW1lc3RhbXAKLS8vCiBwYWNrYWdlIHRpbWVzdGFtcHBiCiAKIGltcG9ydCAoCkBAIC0xMDEsNTIgKzk4LDUwIEBACiAvLwogLy8gRXhhbXBsZSAxOiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIFBPU0lYIGB0aW1lKClgLgogLy8KLS8vICAgICBUaW1lc3RhbXAgdGltZXN0YW1wOwotLy8gICAgIHRpbWVzdGFtcC5zZXRfc2Vjb25kcyh0aW1lKE5VTEwpKTsKLS8vICAgICB0aW1lc3RhbXAuc2V0X25hbm9zKDApOworLy8JVGltZXN0YW1wIHRpbWVzdGFtcDsKKy8vCXRpbWVzdGFtcC5zZXRfc2Vjb25kcyh0aW1lKE5VTEwpKTsKKy8vCXRpbWVzdGFtcC5zZXRfbmFub3MoMCk7CiAvLwogLy8gRXhhbXBsZSAyOiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIFBPU0lYIGBnZXR0aW1lb2ZkYXkoKWAuCiAvLwotLy8gICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotLy8gICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworLy8Jc3RydWN0IHRpbWV2YWwgdHY7CisvLwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKIC8vCi0vLyAgICAgVGltZXN0YW1wIHRpbWVzdGFtcDsKLS8vICAgICB0aW1lc3RhbXAuc2V0X3NlY29uZHModHYudHZfc2VjKTsKLS8vICAgICB0aW1lc3RhbXAuc2V0X25hbm9zKHR2LnR2X3VzZWMgKiAxMDAwKTsKKy8vCVRpbWVzdGFtcCB0aW1lc3RhbXA7CisvLwl0aW1lc3RhbXAuc2V0X3NlY29uZHModHYudHZfc2VjKTsKKy8vCXRpbWVzdGFtcC5zZXRfbmFub3ModHYudHZfdXNlYyAqIDEwMDApOwogLy8KIC8vIEV4YW1wbGUgMzogQ29tcHV0ZSBUaW1lc3RhbXAgZnJvbSBXaW4zMiBgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKWAuCiAvLwotLy8gICAgIEZJTEVUSU1FIGZ0OwotLy8gICAgIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7Ci0vLyAgICAgVUlOVDY0IHRpY2tzID0gKCgoVUlOVDY0KWZ0LmR3SGlnaERhdGVUaW1lKSA8PCAzMikgfCBmdC5kd0xvd0RhdGVUaW1lOworLy8JRklMRVRJTUUgZnQ7CisvLwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOworLy8JVUlOVDY0IHRpY2tzID0gKCgoVUlOVDY0KWZ0LmR3SGlnaERhdGVUaW1lKSA8PCAzMikgfCBmdC5kd0xvd0RhdGVUaW1lOwogLy8KLS8vICAgICAvLyBBIFdpbmRvd3MgdGljayBpcyAxMDAgbmFub3NlY29uZHMuIFdpbmRvd3MgZXBvY2ggMTYwMS0wMS0wMVQwMDowMDowMFoKLS8vICAgICAvLyBpcyAxMTY0NDQ3MzYwMCBzZWNvbmRzIGJlZm9yZSBVbml4IGVwb2NoIDE5NzAtMDEtMDFUMDA6MDA6MDBaLgotLy8gICAgIFRpbWVzdGFtcCB0aW1lc3RhbXA7Ci0vLyAgICAgdGltZXN0YW1wLnNldF9zZWNvbmRzKChJTlQ2NCkgKCh0aWNrcyAvIDEwMDAwMDAwKSAtIDExNjQ0NDczNjAwTEwpKTsKLS8vICAgICB0aW1lc3RhbXAuc2V0X25hbm9zKChJTlQzMikgKCh0aWNrcyAlIDEwMDAwMDAwKSAqIDEwMCkpOworLy8JLy8gQSBXaW5kb3dzIHRpY2sgaXMgMTAwIG5hbm9zZWNvbmRzLiBXaW5kb3dzIGVwb2NoIDE2MDEtMDEtMDFUMDA6MDA6MDBaCisvLwkvLyBpcyAxMTY0NDQ3MzYwMCBzZWNvbmRzIGJlZm9yZSBVbml4IGVwb2NoIDE5NzAtMDEtMDFUMDA6MDA6MDBaLgorLy8JVGltZXN0YW1wIHRpbWVzdGFtcDsKKy8vCXRpbWVzdGFtcC5zZXRfc2Vjb25kcygoSU5UNjQpICgodGlja3MgLyAxMDAwMDAwMCkgLSAxMTY0NDQ3MzYwMExMKSk7CisvLwl0aW1lc3RhbXAuc2V0X25hbm9zKChJTlQzMikgKCh0aWNrcyAlIDEwMDAwMDAwKSAqIDEwMCkpOwogLy8KIC8vIEV4YW1wbGUgNDogQ29tcHV0ZSBUaW1lc3RhbXAgZnJvbSBKYXZhIGBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKWAuCiAvLwotLy8gICAgIGxvbmcgbWlsbGlzID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisvLwlsb25nIG1pbGxpcyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogLy8KLS8vICAgICBUaW1lc3RhbXAgdGltZXN0YW1wID0gVGltZXN0YW1wLm5ld0J1aWxkZXIoKS5zZXRTZWNvbmRzKG1pbGxpcyAvIDEwMDApCi0vLyAgICAgICAgIC5zZXROYW5vcygoaW50KSAoKG1pbGxpcyAlIDEwMDApICogMTAwMDAwMCkpLmJ1aWxkKCk7Ci0vLworLy8JVGltZXN0YW1wIHRpbWVzdGFtcCA9IFRpbWVzdGFtcC5uZXdCdWlsZGVyKCkuc2V0U2Vjb25kcyhtaWxsaXMgLyAxMDAwKQorLy8JICAgIC5zZXROYW5vcygoaW50KSAoKG1pbGxpcyAlIDEwMDApICogMTAwMDAwMCkpLmJ1aWxkKCk7CiAvLwogLy8gRXhhbXBsZSA1OiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIEphdmEgYEluc3RhbnQubm93KClgLgogLy8KLS8vICAgICBJbnN0YW50IG5vdyA9IEluc3RhbnQubm93KCk7CisvLwlJbnN0YW50IG5vdyA9IEluc3RhbnQubm93KCk7CiAvLwotLy8gICAgIFRpbWVzdGFtcCB0aW1lc3RhbXAgPQotLy8gICAgICAgICBUaW1lc3RhbXAubmV3QnVpbGRlcigpLnNldFNlY29uZHMobm93LmdldEVwb2NoU2Vjb25kKCkpCi0vLyAgICAgICAgICAgICAuc2V0TmFub3Mobm93LmdldE5hbm8oKSkuYnVpbGQoKTsKLS8vCisvLwlUaW1lc3RhbXAgdGltZXN0YW1wID0KKy8vCSAgICBUaW1lc3RhbXAubmV3QnVpbGRlcigpLnNldFNlY29uZHMobm93LmdldEVwb2NoU2Vjb25kKCkpCisvLwkgICAgICAgIC5zZXROYW5vcyhub3cuZ2V0TmFubygpKS5idWlsZCgpOwogLy8KIC8vIEV4YW1wbGUgNjogQ29tcHV0ZSBUaW1lc3RhbXAgZnJvbSBjdXJyZW50IHRpbWUgaW4gUHl0aG9uLgogLy8KLS8vICAgICB0aW1lc3RhbXAgPSBUaW1lc3RhbXAoKQotLy8gICAgIHRpbWVzdGFtcC5HZXRDdXJyZW50VGltZSgpCisvLwl0aW1lc3RhbXAgPSBUaW1lc3RhbXAoKQorLy8JdGltZXN0YW1wLkdldEN1cnJlbnRUaW1lKCkKIC8vCiAvLyAjIEpTT04gTWFwcGluZwogLy8KQEAgLTE3MiwxMCArMTY3LDggQEAKIC8vIFtgc3RyZnRpbWVgXShodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuc3RyZnRpbWUpIHdpdGgKIC8vIHRoZSB0aW1lIGZvcm1hdCBzcGVjICclWS0lbS0lZFQlSDolTTolUy4lZlonLiBMaWtld2lzZSwgaW4gSmF2YSwgb25lIGNhbiB1c2UKIC8vIHRoZSBKb2RhIFRpbWUncyBbYElTT0RhdGVUaW1lRm9ybWF0LmRhdGVUaW1lKClgXSgKLS8vIGh0dHA6Ly93d3cuam9kYS5vcmcvam9kYS10aW1lL2FwaWRvY3Mvb3JnL2pvZGEvdGltZS9mb3JtYXQvSVNPRGF0ZVRpbWVGb3JtYXQuaHRtbCNkYXRlVGltZSUyRCUyRAorLy8gaHR0cDovL2pvZGEtdGltZS5zb3VyY2Vmb3JnZS5uZXQvYXBpZG9jcy9vcmcvam9kYS90aW1lL2Zvcm1hdC9JU09EYXRlVGltZUZvcm1hdC5odG1sI2RhdGVUaW1lKCkKIC8vICkgdG8gb2J0YWluIGEgZm9ybWF0dGVyIGNhcGFibGUgb2YgZ2VuZXJhdGluZyB0aW1lc3RhbXBzIGluIHRoaXMgZm9ybWF0LgotLy8KLS8vCiB0eXBlIFRpbWVzdGFtcCBzdHJ1Y3QgewogCXN0YXRlICAgICAgICAgcHJvdG9pbXBsLk1lc3NhZ2VTdGF0ZQogCXNpemVDYWNoZSAgICAgcHJvdG9pbXBsLlNpemVDYWNoZQo=