From kde-kimageshop Wed Dec 31 12:05:41 2014 From: Boudewijn Rempt Date: Wed, 31 Dec 2014 12:05:41 +0000 To: kde-kimageshop Subject: [calligra/calligra/2.9] krita: Make Krita a QtSingleApplication Message-Id: X-MARC-Message: https://marc.info/?l=kde-kimageshop&m=142002956700989 R2l0IGNvbW1pdCA1ODkwZDE5NGE4NjhlMmJlYTQwMzkyYWFjNTczNWRjNGY2YTJmYjdjIGJ5IEJv dWRld2lqbiBSZW1wdC4KQ29tbWl0dGVkIG9uIDMwLzEyLzIwMTQgYXQgMTU6MjIuClB1c2hlZCBi eSByZW1wdCBpbnRvIGJyYW5jaCAnY2FsbGlncmEvMi45Jy4KCk1ha2UgS3JpdGEgYSBRdFNpbmds ZUFwcGxpY2F0aW9uCgpDQ01BSUw6a2ltYWdlc2hvcEBrZGUub3JnCgpJZiB0aGVyZSBpcyBhIHJ1 bm5pbmcgaW5zdGFuY2Ugb2YgS3JpdGEsIGFuZCB5b3Ugb3BlbiBhbm90aGVyIGltYWdlIHdpdGgg S3JpdGEsCm9yIHN0YXJ0IEtyaXRhIGZyb20gdGhlIGNvbW1hbmRsaW5lLCB0aGUgZmlsZXMgaW4g dGhlIGFyZ3VtZW50cyBhcmUgb3BlbmVkIGluCnRoZSBmaXJzdCBLcml0YS4KClRoaXMgYWxzbyBz b2x2ZXMgc3luY2hyb25pemF0aW9uIGlzc3VlcyB3aXRoIHRoZSB0YWcgc3RvcmUsIGFzIHdlbGwg YXMgcG9zc2libGUKaXNzdWVzIHdpdGggc2V0dGluZyBzaG9ydGN1dHMuIChUaG91Z2ggbm90IGFs bCBzaG9ydGN1dCBpc3N1ZXMgYXJlIHNvbHZlZCB5ZXQpLgoKQlVHOjM0MjE4NyBQb3NzaWJpbGl0 eSB0byBvcGVuIGltYWdlcyBpbiBvbmUga3JpdGEgYXBwCkJVRzozMTgyMDggV2l0aCBtdWx0aXBs ZSBpbnN0YW5jZSBvZiBLcml0YSBvcGVuLCBwcmVzZXQgdGFncyBnZXQgb3V0IG9mIHN5bmMKCk0g ICs1ICAgIC0xMyAgIGtyaXRhL0NNYWtlTGlzdHMudHh0Ck0gICsyICAgIC0yICAgIGtyaXRhL2ty aXRhLmRlc2t0b3AKRCAgKzAgICAgLTk0ICAga3JpdGEva3JpdGFwYXJ0LmRlc2t0b3AKTSAgKzM2 ICAgLTUgICAga3JpdGEvbWFpbi5jYwpNICArMSAgICAtMSAgICBrcml0YS9wbHVnaW5zL2V4dGVu c2lvbnMvZG9ja2Vycy9hZHZhbmNlZGNvbG9yc2VsZWN0b3Iva2lzX2NvbG9yX3NlbGVjdG9yX25n X2RvY2tlcl93aWRnZXQuY3BwCk0gICs0ICAgIC0zICAgIGtyaXRhL3BsdWdpbnMvZXh0ZW5zaW9u cy9kb2NrZXJzL2RlZmF1bHRkb2NrZXJzL2tpc19sYXllcl9ib3guY3BwCk0gICsxMCAgIC0wICAg IGtyaXRhL3VpL0NNYWtlTGlzdHMudHh0Ck0gICs3MSAgIC0yMiAgIGtyaXRhL3VpL0tpc0FwcGxp Y2F0aW9uLmNwcApNICArOCAgICAtOCAgICBrcml0YS91aS9LaXNBcHBsaWNhdGlvbi5oCk0gICsx MCAgIC0wICAgIGtyaXRhL3VpL0tpc0RvY3VtZW50RW50cnkuY3BwCk0gICs0ICAgIC0wICAgIGty aXRhL3VpL0tpc0RvY3VtZW50RW50cnkuaApNICArMSAgICAtNiAgICBrcml0YS91aS9LaXNGaWx0 ZXJDaGFpbi5jcHAKTSAgKzE3ICAgLTEzICAga3JpdGEvdWkvS2lzTWFpbldpbmRvdy5jcHAKTSAg KzYgICAgLTEzICAga3JpdGEvdWkvS2lzTWFpbldpbmRvdy5oCk0gICsxNCAgIC01ICAgIGtyaXRh L3VpL2tpc19hY3Rpb25fbWFuYWdlci5jcHAKTSAgKzE1ICAgLTMxICAga3JpdGEvdWkva2lzX2Zh Y3RvcnkyLmNjCk0gICs1ICAgIC0xMSAgIGtyaXRhL3VpL2tpc19mYWN0b3J5Mi5oCkEgICsxMCAg IC0wICAgIGtyaXRhL3VpL3F0bG9ja2VkZmlsZS9SRUFETUUudHh0CkEgICsxNTcgIC0wICAgIGty aXRhL3VpL3F0bG9ja2VkZmlsZS9xdGxvY2tlZGZpbGUuY3BwICAgICBbTGljZW5zZTogTEdQTCAo djMpXQpBICArNzYgICAtMCAgICBrcml0YS91aS9xdGxvY2tlZGZpbGUvcXRsb2NrZWRmaWxlLmgg ICAgIFtMaWNlbnNlOiBMR1BMICh2MyldCkEgICsxMyAgIC0wICAgIGtyaXRhL3VpL3F0bG9ja2Vk ZmlsZS9xdGxvY2tlZGZpbGUucHJpCkEgICsxMDcgIC0wICAgIGtyaXRhL3VpL3F0bG9ja2VkZmls ZS9xdGxvY2tlZGZpbGVfdW5peC5jcHAgICAgIFtMaWNlbnNlOiBMR1BMICh2MyldCkEgICsxOTYg IC0wICAgIGtyaXRhL3VpL3F0bG9ja2VkZmlsZS9xdGxvY2tlZGZpbGVfd2luLmNwcCAgICAgW0xp Y2Vuc2U6IExHUEwgKHYzKV0KQSAgKzEwICAgLTAgICAga3JpdGEvdWkvcXRzaW5nbGVhcHBsaWNh dGlvbi9SRUFETUUudHh0CkEgICsxODAgIC0wICAgIGtyaXRhL3VpL3F0c2luZ2xlYXBwbGljYXRp b24vcXRsb2NhbHBlZXIuY3BwICAgICBbTGljZW5zZTogTEdQTCAodjMpXQpBICArNjIgICAtMCAg ICBrcml0YS91aS9xdHNpbmdsZWFwcGxpY2F0aW9uL3F0bG9jYWxwZWVyLmggICAgIFtMaWNlbnNl OiBMR1BMICh2MyldCkEgICsxOTUgIC0wICAgIGtyaXRhL3VpL3F0c2luZ2xlYXBwbGljYXRpb24v cXRzaW5nbGVhcHBsaWNhdGlvbi5jcHAgICAgIFtMaWNlbnNlOiBMR1BMICh2MyldCkEgICs3MyAg IC0wICAgIGtyaXRhL3VpL3F0c2luZ2xlYXBwbGljYXRpb24vcXRzaW5nbGVhcHBsaWNhdGlvbi5o ICAgICBbTGljZW5zZTogTEdQTCAodjMpXQpBICArMTQgICAtMCAgICBrcml0YS91aS9xdHNpbmds ZWFwcGxpY2F0aW9uL3F0c2luZ2xlYXBwbGljYXRpb24ucHJpCgpodHRwOi8vY29tbWl0cy5rZGUu b3JnL2NhbGxpZ3JhLzU4OTBkMTk0YTg2OGUyYmVhNDAzOTJhYWM1NzM1ZGM0ZjZhMmZiN2MKCmRp ZmYgLS1naXQgYS9rcml0YS9DTWFrZUxpc3RzLnR4dCBiL2tyaXRhL0NNYWtlTGlzdHMudHh0Cmlu ZGV4IGYzOTI3NTEuLmFhMWNkOGUgMTAwNjQ0Ci0tLSBhL2tyaXRhL0NNYWtlTGlzdHMudHh0Cisr KyBiL2tyaXRhL0NNYWtlTGlzdHMudHh0CkBAIC0xNDEsMjAgKzE0MSwxNCBAQCBpZiAoTk9UIFdJ TjMyKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoIGJlbmNobWFya3MgKQogZW5kaWYgKE5PVCBXSU4z MikKIAotc2V0KGtyaXRhcGFydF9QQVJUX1NSQ1Mga3JpdGFfcGFydF9pbml0LmNjKQota2RlNF9h ZGRfcGx1Z2luKGtyaXRhcGFydCAke2tyaXRhcGFydF9QQVJUX1NSQ1N9KQotdGFyZ2V0X2xpbmtf bGlicmFyaWVzKGtyaXRhcGFydCBrcml0YXVpKQotaW5zdGFsbChUQVJHRVRTIGtyaXRhcGFydCBE RVNUSU5BVElPTiAke1BMVUdJTl9JTlNUQUxMX0RJUn0pCi0KLXNldChrcml0YV9LREVJTklUX1NS Q1MgbWFpbi5jYykKK3NldChrcml0YV9TUkNTIG1haW4uY2MpCiAKIGlmKFdJTjMyIEFORCBVU0Vf QlJFQUtQQUQpCi0gICAgc2V0KGtyaXRhX0tERUlOSVRfU1JDUyAke2tyaXRhX0tERUlOSVRfU1JD U30ga2lzX2NyYXNoX2hhbmRsZXIuY3BwKQorICAgIHNldChrcml0YV9TUkNTICR7a3JpdGFfU1JD U30ga2lzX2NyYXNoX2hhbmRsZXIuY3BwKQogICAgIHNldChCUkVBS1BBRF9MSUJTIGJyZWFrcGFk KQogZW5kaWYoV0lOMzIgQU5EIFVTRV9CUkVBS1BBRCkKIAota2RlNF9hZGRfYXBwX2ljb24oa3Jp dGFfS0RFSU5JVF9TUkNTICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGljcy9hcHAvaGkq LWFwcC1jYWxsaWdyYWtyaXRhLnBuZyIpCi1rZGU0X2FkZF9rZGVpbml0X2V4ZWN1dGFibGUoa3Jp dGEgJHtrcml0YV9LREVJTklUX1NSQ1N9KQora2RlNF9hZGRfYXBwX2ljb24oa3JpdGFfU1JDUyAi JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BpY3MvYXBwL2hpKi1hcHAtY2FsbGlncmFrcml0 YS5wbmciKQogCiBpZiAoUV9XU19NQUMpCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGtyaXRh IFBST1BFUlRJRVMgTUFDT1NYX0JVTkRMRV9JTkZPX1BMSVNUICR7Q01BS0VfQ1VSUkVOVF9TT1VS Q0VfRElSfS9JbmZvLnBsaXN0LnRlbXBsYXRlKQpAQCAtMTYyLDEzICsxNTYsMTEgQEAgaWYgKFFf V1NfTUFDKQogICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhrcml0YSBQUk9QRVJUSUVTIE1BQ09T WF9CVU5ETEVfQlVORExFX05BTUUgIktyaXRhIikKIGVuZGlmIChRX1dTX01BQykKIAotdGFyZ2V0 X2xpbmtfbGlicmFyaWVzKGtkZWluaXRfa3JpdGEga3JpdGF1aSAke0JSRUFLUEFEX0xJQlN9KQot dGFyZ2V0X2xpbmtfbGlicmFyaWVzKGtyaXRhIGtkZWluaXRfa3JpdGEga3JpdGF1aSkKK2tkZTRf YWRkX2V4ZWN1dGFibGUoa3JpdGEgJHtrcml0YV9TUkNTfSkKK3RhcmdldF9saW5rX2xpYnJhcmll cyhrcml0YSBrcml0YXVpICR7QlJFQUtQQURfTElCU30pCiAKIGluc3RhbGwoVEFSR0VUUyBrcml0 YSAke0lOU1RBTExfVEFSR0VUU19ERUZBVUxUX0FSR1N9KQotaW5zdGFsbChUQVJHRVRTIGtkZWlu aXRfa3JpdGEgJHtJTlNUQUxMX1RBUkdFVFNfREVGQVVMVF9BUkdTfSkKIGluc3RhbGwoUFJPR1JB TVMga3JpdGEuZGVza3RvcCAgREVTVElOQVRJT04gJHtYREdfQVBQU19JTlNUQUxMX0RJUn0vY2Fs bGlncmEpCi1pbnN0YWxsKEZJTEVTICBrcml0YXBhcnQuZGVza3RvcCAgREVTVElOQVRJT04gJHtT RVJWSUNFU19JTlNUQUxMX0RJUn0vY2FsbGlncmEpCiBpbnN0YWxsKEZJTEVTICBrcml0YS5yYyBE RVNUSU5BVElPTiAke0RBVEFfSU5TVEFMTF9ESVJ9L2tyaXRhKQogaW5zdGFsbChGSUxFUyAga3Jp dGEuYXBwZGF0YS54bWwgREVTVElOQVRJT04gJHtTSEFSRV9JTlNUQUxMX1BSRUZJWH0vYXBwZGF0 YS8gKQogCmRpZmYgLS1naXQgYS9rcml0YS9rcml0YS5kZXNrdG9wIGIva3JpdGEva3JpdGEuZGVz a3RvcAppbmRleCAxMTVkZDBjLi5hNGIzNDUxIDEwMDY0NAotLS0gYS9rcml0YS9rcml0YS5kZXNr dG9wCisrKyBiL2tyaXRhL2tyaXRhLmRlc2t0b3AKQEAgLTEzMSw5ICsxMzEsOSBAQCBUeXBlPUFw cGxpY2F0aW9uCiBJY29uPWNhbGxpZ3Jha3JpdGEKIENhdGVnb3JpZXM9UXQ7S0RFO0dyYXBoaWNz OwogWC1LREUtU2VydmljZVR5cGVzPUNhbGxpZ3JhL0FwcGxpY2F0aW9uCi1YLUNhbGxpZ3JhLURl ZmF1bHRNaW1lVHlwZXM9YXBwbGljYXRpb24veC1rcml0YTthcHBsaWNhdGlvbi94LWtyaXRhLWFu aW1hdGlvbgorWC1DYWxsaWdyYS1EZWZhdWx0TWltZVR5cGVzPWFwcGxpY2F0aW9uL3gta3JpdGEK IFgtS0RFLU5hdGl2ZU1pbWVUeXBlPWFwcGxpY2F0aW9uL3gta3JpdGEKLVgtS0RFLUV4dHJhTmF0 aXZlTWltZVR5cGVzPWFwcGxpY2F0aW9uL3gta3JpdGEtYW5pbWF0aW9uCitYLUtERS1FeHRyYU5h dGl2ZU1pbWVUeXBlcz0KIFN0YXJ0dXBOb3RpZnk9dHJ1ZQogWC1EQlVTLVN0YXJ0dXBUeXBlPU11 bHRpCiBYLURCVVMtU2VydmljZU5hbWU9b3JnLmtyaXRhLmtyaXRhCmRpZmYgLS1naXQgYS9rcml0 YS9rcml0YXBhcnQuZGVza3RvcCBiL2tyaXRhL2tyaXRhcGFydC5kZXNrdG9wCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA5ZWQwMzhhLi4wMDAwMDAwCi0tLSBhL2tyaXRhL2tyaXRhcGFy dC5kZXNrdG9wCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotW0Rlc2t0b3AgRW50cnld Ci1OYW1lPUNhbGxpZ3JhIFBhaW50aW5nIGFuZCBJbWFnZSBFZGl0b3IgQ29tcG9uZW50Ci1OYW1l W2JnXT3QmtC+0LzQv9C+0L3QtdC90YIg0LfQsCDRgNC40YHRg9Cy0LDQvdC1INC4INGA0LXQtNCw 0LrRgtC40YDQsNC90LUg0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNGPINCyIENhbGxpZ3JhCi1O YW1lW2JzXT1DbGxpZ3JhIEtvbXBvbmVudGEgemEgQm9qZW5qZSBpIEVkaXRvdmFuamUgU2xpa2EK LU5hbWVbY2FdPUNvbXBvbmVudCBkZSBkaWJ1aXggaSBtYW5pcHVsYWNpw7MgZCdpbWF0Z2VzIGRl bCBDYWxsaWdyYQotTmFtZVtjYUB2YWxlbmNpYV09Q29tcG9uZW50IGRlIGRpYnVpeCBpIG1hbmlw dWxhY2nDsyBkJ2ltYXRnZXMgZGVsIENhbGxpZ3JhCi1OYW1lW2NzXT1Lb21wb25lbnRhIENhbGxp Z3JhIHBybyBtYWxvdsOhbsOtIGEgw7pwcmF2dSBmb3RvZ3JhZmnDrQotTmFtZVtkYV09Q2FsbGln cmEta29tcG9uZW50IHRpbCB0ZWduaW5nIG9nIGJpbGxlZHJlZGlnZXJpbmdza29tcG9uZW50Ci1O YW1lW2RlXT1DYWxsaWdyYS1Lb21wb25lbnRlIGbDvHIgTWFsZW4gdW5kIEJpbGRiZWFyYmVpdHVu ZwotTmFtZVtlbF09zqPPhc+Dz4TOsc+EzrnOus+MIM61z4DOtc6+zrXPgc6zzrHPg86vzrHPgiDO us6xzrkgzrbPic6zz4HOsc+GzrnOus6uz4IgzrXOuc66z4zOvc+Jzr0gz4TOv8+FIENhbGxpZ3Jh Ci1OYW1lW2VuX0dCXT1DYWxsaWdyYSBQYWludGluZyBhbmQgSW1hZ2UgRWRpdG9yIENvbXBvbmVu dAotTmFtZVtlc109Q29tcG9uZW50ZSBkZSBwaW50dXJhIHkgZGUgZWRpY2nDs24gZGUgaW3DoWdl bmVzIGRlIENhbGxpZ3JhCi1OYW1lW2V0XT1DYWxsaWdyYSBqb29uaXN0YW1pc2UgamEgcGlsZGl0 w7bDtnRsdXNlIGtvbXBvbmVudAotTmFtZVtldV09Q2FsbGlncmEtcmVuIHBpbnR1cmFyZW4gZXRh IGlydWRpLWVkaXRvcmVhcmVuIG9zYWdhaWEKLU5hbWVbZmldPUNhbGxpZ3JhbiBtYWFsYXVzLSBq YSBrdXZhbmvDpHNpdHRlbHlvc2EKLU5hbWVbZnJdPUNvbXBvc2FudCBtYW5pcHVsYXRpb24gZCdp bWFnZXMgZXQgZGVzc2luIGRlIENhbGxpZ3JhCi1OYW1lW2dsXT1Db21wb8OxZW50ZSBwYXJhIENh bGxpZ3JhIGRlIGRlYnV4byBlIGVkaWNpw7NuIGRlIGltYXhlcwotTmFtZVtodV09Q2FsbGlncmEg cmFqem9sw7Mgw6lzIGvDqXBzemVya2VzenTFkSBrb21wb25lbnMKLU5hbWVbaXRdPUNvbXBvbmVu dGUgcGVyIGlsIGRpc2Vnbm8gZSBsYSBtYW5pcG9sYXppb25lIGRpIGltbWFnaW5pIGRpIENhbGxp Z3JhCi1OYW1lW2phXT1DYWxsaWdyYSDmj4/nlLvjgajnlLvlg4/nt6jpm4bjgrPjg7Pjg53jg7zj g43jg7Pjg4gKLU5hbWVba2tdPUNhbGxpZ3JhLdC90YvSoyDQutC10YHQutGW0L3RltC9INGB0LDQ u9GDINC205nQvdC1INOp0qPQtNC10YMg0LHQsNKT0LTQsNGA0LvQsNC80LDRgdGLCi1OYW1lW2tv XT1DYWxsaWdyYSDqt7jrpqzquLAg67CPIOq3uOumvCDtjrjsp5HquLAg6rWs7ISxIOyalOyGjAot TmFtZVtuYl09Q2FsbGlncmEta29tcG9uZW50IGZvciBtYWxpbmcgb2cgYmlsZGVtYW5pcHVsYXNq b24KLU5hbWVbbmRzXT1DYWxsaWdyYS1Lb21wb25lbnQgZsO2cid0IE1hbGVuIHVuIEJpbGRiZXdl cmtlbgotTmFtZVtubF09Q2FsbGlncmEtY29tcG9uZW50IHZvb3IgdGVrZW5lbiBlbiBhZmJlZWxk aW5nc2Jld2Vya2luZwotTmFtZVtwbF09U2vFgmFkbmlrIG1hbG93YW5pYSBpIGVkeWNqaSBvYnJh enUgZGxhIENhbGxpZ3J5Ci1OYW1lW3B0XT1Db21wb25lbnRlIGRlIEVkacOnw6NvIGUgUGludHVy YSBkZSBJbWFnZW5zIGRvIENhbGxpZ3JhCi1OYW1lW3B0X0JSXT1Db21wb25lbnRlIGRlIEVkacOn w6NvIGUgUGludHVyYSBkZSBJbWFnZW5zIGRvIENhbGxpZ3JhCi1OYW1lW3J1XT3QmtC+0LzQv9C+ 0L3QtdC90YIg0YDQuNGB0L7QstCw0L3QuNGPINC4INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC4 0Y8g0LjQt9C+0LHRgNCw0LbQtdC90LjQuSBDYWxsaWdyYQotTmFtZVtza109Q2FsbGlncmEgbW9k dWwgbmEgw7pwcmF2dSBhIG1hxL5vdmFuaWUgb2Jyw6F6a292Ci1OYW1lW3NsXT1Lb21wb25lbnRh IHphIHNsaWthbmplIGluIHVyZWphbmplIHNsaWsgemEgQ2FsbGlncm8KLU5hbWVbc3ZdPUNhbGxp Z3JhIG3DpWxuaW5ncy0gb2NoIGJpbGRyZWRpZ2VyaW5nc2tvbXBvbmVudAotTmFtZVt1a1090JrQ vtC80L/QvtC90LXQvdGCIENhbGxpZ3JhINC00LvRjyDQvNCw0LvRjtCy0LDQvdC90Y8g0ZYg0YDQ tdC00LDQs9GD0LLQsNC90L3RjyDQt9C+0LHRgNCw0LbQtdC90YwKLU5hbWVbeC10ZXN0XT14eENh bGxpZ3JhIFBhaW50aW5nIGFuZCBJbWFnZSBFZGl0b3IgQ29tcG9uZW50eHgKLU5hbWVbemhfQ05d PUNhbGxpZ3JhIOe7mOWbvuWSjOWbvuWDj+e8lui+keWZqOe7hOS7tgotTmFtZVt6aF9UV109Q2Fs bGlncmEg57mq5ZyW6IiH5b2x5YOP57eo6Lyv5YWD5Lu2Ci1YLUtERS1MaWJyYXJ5PWtyaXRhcGFy dAotTWltZVR5cGU9YXBwbGljYXRpb24veC1rcml0YTtpbWFnZS9vcGVucmFzdGVyOwotVHlwZT1T ZXJ2aWNlCi1YLUtERS1TZXJ2aWNlVHlwZXM9Q2FsbGlncmEvUGFydAotWC1LREUtTmF0aXZlTWlt ZVR5cGU9YXBwbGljYXRpb24veC1rcml0YQotR2VuZXJpY05hbWU9SW1hZ2UgT2JqZWN0Ci1HZW5l cmljTmFtZVtiZ1090JPRgNCw0YTQuNGH0L3QviDQuNC30L7QsdGA0LDQttC10L3QuNC1Ci1HZW5l cmljTmFtZVticl09VHJhIHNrZXVkZW5uCi1HZW5lcmljTmFtZVtic109T2JqZWthdCBzbGlrZQot R2VuZXJpY05hbWVbY2FdPU9iamVjdGUgZCdpbWF0Z2UKLUdlbmVyaWNOYW1lW2NhQHZhbGVuY2lh XT1PYmplY3RlIGQnaW1hdGdlCi1HZW5lcmljTmFtZVtjeV09R3dydGhyeWNoIERlbHdlZGQKLUdl bmVyaWNOYW1lW2RhXT1CaWxsZWRvYmpla3QKLUdlbmVyaWNOYW1lW2RlXT1CaWxkb2JqZWt0Ci1H ZW5lcmljTmFtZVtlbF09zpHOvc+EzrnOus61zq/OvM61zr3OvyDOtc65zrrPjM69zrHPggotR2Vu ZXJpY05hbWVbZW5fR0JdPUltYWdlIE9iamVjdAotR2VuZXJpY05hbWVbZW9dPUJpbGRvYmpla3Rv Ci1HZW5lcmljTmFtZVtlc109T2JqZXRvIGRlIGltYWdlbgotR2VuZXJpY05hbWVbZXRdPVBpbGRp b2JqZWt0Ci1HZW5lcmljTmFtZVtldV09SXJ1ZGktb2JqZWt0dWEKLUdlbmVyaWNOYW1lW2ZhXT3Y tNuM2KEg2KrYtdmI24zYsQotR2VuZXJpY05hbWVbZmldPUt1dmFvYmpla3RpCi1HZW5lcmljTmFt ZVtmcl09T2JqZXQgaW1hZ2UKLUdlbmVyaWNOYW1lW2Z5XT1PZmJ5bGRpbmcKLUdlbmVyaWNOYW1l W2dhXT1Sw6lhZCDDjW9taMOhCi1HZW5lcmljTmFtZVtnbF09T2J4ZWN0byBkZSBpbWF4ZQotR2Vu ZXJpY05hbWVbaGVdPdeQ15XXkdeZ15nXp9eYINeq157Xldeg15QKLUdlbmVyaWNOYW1lW2hpXT3g pJvgpLXgpL8g4KSR4KSs4KWN4KSc4KWH4KSV4KWN4KSfCi1HZW5lcmljTmFtZVtobmVdPeCkq+Cl i+Ckn+ClgiDgpIbgpKzgpY3gpJzgpYfgpJXgpY3gpJ8KLUdlbmVyaWNOYW1lW2hyXT1PYmpla3Qg c2xpa2UKLUdlbmVyaWNOYW1lW2h1XT1Lw6lwb2JqZWt0dW0KLUdlbmVyaWNOYW1lW2lzXT1NeW5k aGx1dGkKLUdlbmVyaWNOYW1lW2l0XT1PZ2dldHRvIGltbWFnaW5lCi1HZW5lcmljTmFtZVtqYV09 55S75YOP44Kq44OW44K444Kn44Kv44OICi1HZW5lcmljTmFtZVtra1090JrQtdGB0LrRltC9Ci1H ZW5lcmljTmFtZVtrb1096re466a8IOqwneyytAotR2VuZXJpY05hbWVbbHZdPUF0dMSTbGEgb2Jq ZWt0cwotR2VuZXJpY05hbWVbbmJdPUJpbGRlb2JqZWt0Ci1HZW5lcmljTmFtZVtuZHNdPUJpbGRv Ympla3QKLUdlbmVyaWNOYW1lW25lXT3gpJvgpLXgpL8g4KS14KS44KWN4KSk4KWBCi1HZW5lcmlj TmFtZVtubF09QWZiZWVsZGluZwotR2VuZXJpY05hbWVbcGxdPU9iaWVrdCBvYnJhenUKLUdlbmVy aWNOYW1lW3B0XT1PYmplY3RvIGRlIEltYWdlbQotR2VuZXJpY05hbWVbcHRfQlJdPU9iamV0byBk ZSBJbWFnZW0KLUdlbmVyaWNOYW1lW3J1XT3QoNC40YHRg9C90L7QugotR2VuZXJpY05hbWVbc2td PU9iamVrdCBvYnLDoXpvawotR2VuZXJpY05hbWVbc2xdPVNsaWthCi1HZW5lcmljTmFtZVtzdl09 QmlsZG9iamVrdAotR2VuZXJpY05hbWVbdHJdPVJlc2ltIE5lc25lc2kKLUdlbmVyaWNOYW1lW3Vr XT3QntCx4oCZ0ZTQutGCINC30L7QsdGA0LDQttC10L3QvdGPCi1HZW5lcmljTmFtZVt1el09UmFz bSBvYsq8ZWt0aQotR2VuZXJpY05hbWVbdXpAY3lyaWxsaWNdPdCg0LDRgdC8INC+0LHRitC10LrR gtC4Ci1HZW5lcmljTmFtZVt3YV09Q2F5ZXQgaW3DpWRqZQotR2VuZXJpY05hbWVbeC10ZXN0XT14 eEltYWdlIE9iamVjdHh4Ci1HZW5lcmljTmFtZVt6aF9DTl095Zu+5YOP5a+56LGhCi1HZW5lcmlj TmFtZVt6aF9UV1095ZyW54mH54mp5Lu2Ci1JY29uPWNhbGxpZ3Jha3JpdGEKLVgtS3JpdGEtVmVy c2lvbj0yOApkaWZmIC0tZ2l0IGEva3JpdGEvbWFpbi5jYyBiL2tyaXRhL21haW4uY2MKaW5kZXgg YzIxMjFkYS4uZmZlOTFjNiAxMDA2NDQKLS0tIGEva3JpdGEvbWFpbi5jYworKysgYi9rcml0YS9t YWluLmNjCkBAIC01NCw3ICs1NCw3IEBACiAKICNlbmRpZgogCi1leHRlcm4gIkMiIEtERV9FWFBP UlQgaW50IGtkZW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorZXh0ZXJuICJDIiBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAgICAgYm9vbCBydW5uaW5nSW5LREUgPSAhcWdl dGVudigiS0RFX0ZVTExfU0VTU0lPTiIpLmlzRW1wdHkoKTsKIApAQCAtNjMsNiArNjMsNyBAQCBl eHRlcm4gIkMiIEtERV9FWFBPUlQgaW50IGtkZW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog ICAgICAgICBxcHV0ZW52KCJRVF9OT19HTElCIiwgIjEiKTsKICAgICB9CiAjZW5kaWYKKwogI2lm ZGVmIFVTRV9CUkVBS1BBRAogICAgIHFwdXRlbnYoIktERV9ERUJVRyIsICIxIik7CiAgICAgS2lz Q3Jhc2hIYW5kbGVyIGNyYXNoSGFuZGxlcjsKQEAgLTc0LDYgKzc1LDggQEAgZXh0ZXJuICJDIiBL REVfRVhQT1JUIGludCBrZGVtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICNlbmRpZgogCiAg ICAgaW50IHN0YXRlOworICAgIEtpc0ZhY3RvcnkgZmFjdG9yeTsKKyAgICBRX1VOVVNFRChmYWN0 b3J5KTsgLy8gTm90IHJlYWxseSwgaXQnbGwgc2VsZi1kZXN0cnVjdCBvbiBleGl0aW5nIG1haW4K ICAgICBLQWJvdXREYXRhICphYm91dERhdGEgPSBLaXNGYWN0b3J5OjphYm91dERhdGEoKTsKIAog ICAgIEtDbWRMaW5lQXJnczo6aW5pdChhcmdjLCBhcmd2LCBhYm91dERhdGEpOwpAQCAtOTAsOCAr OTMsMjkgQEAgZXh0ZXJuICJDIiBLREVfRVhQT1JUIGludCBrZGVtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAogICAgIEtDbWRMaW5lQXJnczo6YWRkQ21kTGluZU9wdGlvbnMob3B0aW9ucyk7 CiAKKyAgICAvLyBBIHBlci11c2VyIHVuaXF1ZSBzdHJpbmcsIHdpdGhvdXQgLywgYmVjYXVzZSBR TG9jYWxTZXJ2ZXIgY2Fubm90IHVzZSBuYW1lcyB3aXRoIGEgLyBpbiBpdAorICAgIFFTdHJpbmcg a2V5ID0gIktyaXRhIiArCisgICAgICAgICAgICAgICAgICBRRGVza3RvcFNlcnZpY2VzOjpzdG9y YWdlTG9jYXRpb24oUURlc2t0b3BTZXJ2aWNlczo6SG9tZUxvY2F0aW9uKS5yZXBsYWNlKCIvIiwg Il8iKTsKKyAgICBrZXkgPSBrZXkucmVwbGFjZSgiOiIsICJfIikucmVwbGFjZSgiXFwiLCJfIik7 CisKKyAgICAgLy8gaW5pdGlhbGl6ZSBxdCBwbHVnaW4gcGF0aCAoc2VlIEtDb21wb25lbnREYXRh UHJpdmF0ZTo6bGF6eUluaXQpCisgICAgS0dsb2JhbDo6Y29uZmlnKCk7CisKICAgICAvLyBmaXJz dCBjcmVhdGUgdGhlIGFwcGxpY2F0aW9uIHNvIHdlIGNhbiBjcmVhdGUgYSAgcGl4bWFwCi0gICAg S2lzQXBwbGljYXRpb24gYXBwOworICAgIEtpc0FwcGxpY2F0aW9uIGFwcChrZXkpOworCisgICAg aWYgKGFwcC5pc1J1bm5pbmcoKSkgeworCisgICAgICAgIEtDbWRMaW5lQXJncyAqYXJncyA9IEtD bWRMaW5lQXJnczo6cGFyc2VkQXJncygpOworICAgICAgICBRQnl0ZUFycmF5IGJhOworICAgICAg ICBRRGF0YVN0cmVhbSBkcygmYmEsIFFJT0RldmljZTo6V3JpdGVPbmx5KTsKKyAgICAgICAgYXJn cy0+c2F2ZUFwcEFyZ3MoZHMpOworICAgICAgICBkcy5kZXZpY2UoKS0+Y2xvc2UoKTsKKworICAg ICAgICBpZiAoYXBwLnNlbmRNZXNzYWdlKGJhKSkgeworICAgICAgICAgICAgcmV0dXJuIDA7Cisg ICAgICAgIH0KKyAgICB9CiAKICNpZiBkZWZpbmVkIFFfT1NfV0lOCiAgICAgS2lzVGFibGV0U3Vw cG9ydFdpbjo6aW5pdCgpOwpAQCAtMTA1LDkgKzEyOSw4IEBAIGV4dGVybiAiQyIgS0RFX0VYUE9S VCBpbnQga2RlbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgYXBwLnNldEF0dHJpYnV0 ZShRdDo6QUFfWDExSW5pdFRocmVhZHMsIHRydWUpOwogI2VuZGlmCiAKLSAgICBpZiAoIXJ1bm5p bmdJbktERSkgewotICAgICAgICBhcHAuc2V0QXR0cmlidXRlKFF0OjpBQV9Eb250U2hvd0ljb25z SW5NZW51cyk7Ci0gICAgfQorICAgIC8vIEljb25zIGluIG1lbnVzIGFyZSB1Z2x5IGFuZCBkaXN0 cmFjdGluZworICAgIGFwcC5zZXRBdHRyaWJ1dGUoUXQ6OkFBX0RvbnRTaG93SWNvbnNJbk1lbnVz KTsKIAogICAgIC8vIHRoZW4gY3JlYXRlIHRoZSBwaXhtYXAgZnJvbSBhbiB4cG06IHdlIGNhbm5v dCBnZXQgdGhlCiAgICAgLy8gbG9jYXRpb24gb2Ygb3VyIGRhdGFkaXIgYmVmb3JlIHdlJ3ZlIHN0 YXJ0ZWQgb3VyIGNvbXBvbmVudHMsCkBAIC0xMTksNiArMTQyLDE0IEBAIGV4dGVybiAiQyIgS0RF X0VYUE9SVCBpbnQga2RlbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgIHJldHVy biAxOwogICAgIH0KIAorICAgIC8vIFNldCB1cCByZW1vdGUgYXJndW1lbnRzLgorICAgIFFPYmpl Y3Q6OmNvbm5lY3QoJmFwcCwgU0lHTkFMKG1lc3NhZ2VSZWNlaXZlZChRQnl0ZUFycmF5LFFPYmpl Y3QqKSksCisgICAgICAgICAgICAgICAgICAgICAmYXBwLCBTTE9UKHJlbW90ZUFyZ3VtZW50cyhR Qnl0ZUFycmF5LFFPYmplY3QqKSkpOworCisgICAgUU9iamVjdDo6Y29ubmVjdCgmYXBwLCBTSUdO QUwoZmlsZU9wZW5SZXF1ZXN0KFFTdHJpbmcpKSwKKyAgICAgICAgICAgICAgICAgICAgICZhcHAs IFNMT1QoZmlsZU9wZW5SZXF1ZXN0ZWQoUVN0cmluZykpKTsKKworCiAgICAgc3RhdGUgPSBhcHAu ZXhlYygpOwogCiAgICAgcmV0dXJuIHN0YXRlOwpkaWZmIC0tZ2l0IGEva3JpdGEvcGx1Z2lucy9l eHRlbnNpb25zL2RvY2tlcnMvYWR2YW5jZWRjb2xvcnNlbGVjdG9yL2tpc19jb2xvcl9zZWxlY3Rv cl9uZ19kb2NrZXJfd2lkZ2V0LmNwcCBiL2tyaXRhL3BsdWdpbnMvZXh0ZW5zaW9ucy9kb2NrZXJz L2FkdmFuY2VkY29sb3JzZWxlY3Rvci9raXNfY29sb3Jfc2VsZWN0b3JfbmdfZG9ja2VyX3dpZGdl dC5jcHAKaW5kZXggOGIwMjVkYi4uMDc5ODI2YyAxMDA2NDQKLS0tIGEva3JpdGEvcGx1Z2lucy9l eHRlbnNpb25zL2RvY2tlcnMvYWR2YW5jZWRjb2xvcnNlbGVjdG9yL2tpc19jb2xvcl9zZWxlY3Rv cl9uZ19kb2NrZXJfd2lkZ2V0LmNwcAorKysgYi9rcml0YS9wbHVnaW5zL2V4dGVuc2lvbnMvZG9j a2Vycy9hZHZhbmNlZGNvbG9yc2VsZWN0b3Iva2lzX2NvbG9yX3NlbGVjdG9yX25nX2RvY2tlcl93 aWRnZXQuY3BwCkBAIC0yMyw3ICsyMyw3IEBACiAKICNpbmNsdWRlIDxrY29uZmlnLmg+CiAjaW5j bHVkZSA8a2NvbmZpZ2dyb3VwLmg+Ci0jaW5jbHVkZSA8a2NvbXBvbmVudGRhdGEuaD4KKwogI2lu Y2x1ZGUgPGtnbG9iYWwuaD4KICNpbmNsdWRlIDxrYWN0aW9uLmg+CiAjaW5jbHVkZSA8a2FjdGlv bmNvbGxlY3Rpb24uaD4KZGlmZiAtLWdpdCBhL2tyaXRhL3BsdWdpbnMvZXh0ZW5zaW9ucy9kb2Nr ZXJzL2RlZmF1bHRkb2NrZXJzL2tpc19sYXllcl9ib3guY3BwIGIva3JpdGEvcGx1Z2lucy9leHRl bnNpb25zL2RvY2tlcnMvZGVmYXVsdGRvY2tlcnMva2lzX2xheWVyX2JveC5jcHAKaW5kZXggODE1 MzJhZi4uM2RiOGI2ZSAxMDA2NDQKLS0tIGEva3JpdGEvcGx1Z2lucy9leHRlbnNpb25zL2RvY2tl cnMvZGVmYXVsdGRvY2tlcnMva2lzX2xheWVyX2JveC5jcHAKKysrIGIva3JpdGEvcGx1Z2lucy9l eHRlbnNpb25zL2RvY2tlcnMvZGVmYXVsdGRvY2tlcnMva2lzX2xheWVyX2JveC5jcHAKQEAgLTQ0 LDcgKzQ0LDYgQEAKICNpbmNsdWRlIDxraXNfZGVidWcuaD4KICNpbmNsdWRlIDxrbWVudS5oPgog I2luY2x1ZGUgPGtsb2NhbGUuaD4KLSNpbmNsdWRlIDxrYWN0aW9uY29sbGVjdGlvbi5oPgogCiAj aW5jbHVkZSA8S29JY29uLmg+CiAjaW5jbHVkZSA8S2lzRG9jdW1lbnRTZWN0aW9uVmlldy5oPgpA QCAtODEsNyArODAsOSBAQAogY2xhc3MgQnV0dG9uQWN0aW9uIDogcHVibGljIEtpc0FjdGlvbgog ewogcHVibGljOgotICAgIEJ1dHRvbkFjdGlvbihRQWJzdHJhY3RCdXR0b24qIGJ1dHRvbiwgY29u c3QgS0ljb24mIGljb24sIGNvbnN0IFFTdHJpbmcmIHRleHQsIFFPYmplY3QqIHBhcmVudCkgOiBL aXNBY3Rpb24oaWNvbiwgdGV4dCwgcGFyZW50KSAsIG1fYnV0dG9uKGJ1dHRvbikKKyAgICBCdXR0 b25BY3Rpb24oUUFic3RyYWN0QnV0dG9uKiBidXR0b24sIGNvbnN0IEtJY29uJiBpY29uLCBjb25z dCBRU3RyaW5nJiB0ZXh0LCBRT2JqZWN0KiBwYXJlbnQpCisgICAgICAgIDogS2lzQWN0aW9uKGlj b24sIHRleHQsIHBhcmVudCkKKyAgICAgICAgLCBtX2J1dHRvbihidXR0b24pCiAgICAgewogICAg ICAgICBjb25uZWN0KG1fYnV0dG9uLCBTSUdOQUwoY2xpY2tlZCgpKSwgdGhpcywgU0xPVCh0cmln Z2VyKCkpKTsKICAgICB9CkBAIC0yMzEsNyArMjMyLDcgQEAgS2lzTGF5ZXJCb3g6Oktpc0xheWVy Qm94KCkKIAogICAgIG1fc2VsZWN0T3BhcXVlID0gbmV3IEtpc0FjdGlvbihpMThuKCImU2VsZWN0 IE9wYXF1ZSIpLCB0aGlzKTsKICAgICBtX3NlbGVjdE9wYXF1ZS0+c2V0QWN0aXZhdGlvbkZsYWdz KEtpc0FjdGlvbjo6QUNUSVZFX0xBWUVSKTsKLSAgICBtX3NlbGVjdE9wYXF1ZS0+c2V0T2JqZWN0 TmFtZSgiIik7IC8vIG5vIG5hbWUgdG8gYXZvaWQgYWRkaXRpb24gdG8gdGhlIGFjdGlvbiBjb2xs ZWN0aW9uCisgICAgbV9zZWxlY3RPcGFxdWUtPnNldE9iamVjdE5hbWUoInNlbGVjdF9vcGFxdWUi KTsKICAgICBjb25uZWN0KG1fc2VsZWN0T3BhcXVlLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwg dGhpcywgU0xPVChzbG90U2VsZWN0T3BhcXVlKCkpKTsKICAgICBtX2FjdGlvbnMuYXBwZW5kKG1f c2VsZWN0T3BhcXVlKTsKIApkaWZmIC0tZ2l0IGEva3JpdGEvdWkvQ01ha2VMaXN0cy50eHQgYi9r cml0YS91aS9DTWFrZUxpc3RzLnR4dAppbmRleCA3MTc2YjcwLi42MGIxNzgzIDEwMDY0NAotLS0g YS9rcml0YS91aS9DTWFrZUxpc3RzLnR4dAorKysgYi9rcml0YS91aS9DTWFrZUxpc3RzLnR4dApA QCAtMTYsNiArMTYsOCBAQCBpbmNsdWRlX2RpcmVjdG9yaWVzKAogICAgICR7Q01BS0VfQ1VSUkVO VF9TT1VSQ0VfRElSfS93aWRnZXRzL3Jlc291cmNlcwogICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VS Q0VfRElSfS9vcmEKICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L2tyaXRhL2ltYWdlL21ldGFkYXRh CisgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9rcml0YS91aS9xdHNpbmdsZWFwcGxpY2F0aW9uCisg ICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9rcml0YS91aS9xdGxvY2tlZGZpbGUKICAgICAke0VYSVYy X0lOQ0xVREVfRElSfQogICAgICR7T0NJT19JTkNMVURFX0RJUn0pCiAKQEAgLTMxNyw2ICszMTks MTIgQEAgc2V0KGtyaXRhdWlfTElCX1NSQ1MKICAgICBraXNfbWFpbndpbmRvd19vYnNlcnZlci5j cHAKICAgICBLaXNWaWV3TWFuYWdlci5jcHAKICAgICBraXNfbWlycm9yX21hbmFnZXIuY3BwCisK KworICAgIHF0bG9ja2VkZmlsZS9xdGxvY2tlZGZpbGUuY3BwCisKKyAgICBxdHNpbmdsZWFwcGxp Y2F0aW9uL3F0bG9jYWxwZWVyLmNwcAorICAgIHF0c2luZ2xlYXBwbGljYXRpb24vcXRzaW5nbGVh cHBsaWNhdGlvbi5jcHAKICkKIAogaWYoV0lOMzIpCkBAIC0zMjQsNiArMzMyLDcgQEAgaWYoV0lO MzIpCiAgICAgICAgICR7a3JpdGF1aV9MSUJfU1JDU30KICAgICAgICAgaW5wdXQva2lzX3RhYmxl dF9ldmVudC5jcHAKICAgICAgICAgaW5wdXQvd2ludGFiL2tpc190YWJsZXRfc3VwcG9ydF93aW4u Y3BwCisgICAgICAgIHF0bG9ja2VkZmlsZS9xdGxvY2tlZGZpbGVfd2luLmNwcAogICAgICAgICAp CiBlbmRpZihXSU4zMikKIApAQCAtMzMyLDYgKzM0MSw3IEBAIGlmKFVOSVgpCiAgICAgICAgICR7 a3JpdGF1aV9MSUJfU1JDU30KICAgICAgICAgaW5wdXQva2lzX3RhYmxldF9ldmVudC5jcHAKICAg ICAgICAgaW5wdXQvd2ludGFiL2tpc190YWJsZXRfc3VwcG9ydC5jcHAKKyAgICAgICAgcXRsb2Nr ZWRmaWxlL3F0bG9ja2VkZmlsZV91bml4LmNwcAogICAgICAgICApCiAgICAgaWYoTk9UIEFQUExF KQogICAgICAgICBzZXQoa3JpdGF1aV9MSUJfU1JDUwpkaWZmIC0tZ2l0IGEva3JpdGEvdWkvS2lz QXBwbGljYXRpb24uY3BwIGIva3JpdGEvdWkvS2lzQXBwbGljYXRpb24uY3BwCmluZGV4IGI5MTQ4 ZGYuLmRhNTk3ZTQgMTAwNjQ0Ci0tLSBhL2tyaXRhL3VpL0tpc0FwcGxpY2F0aW9uLmNwcAorKysg Yi9rcml0YS91aS9LaXNBcHBsaWNhdGlvbi5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl IDxLb0RwaS5oPgogI2luY2x1ZGUgIktvR2xvYmFsLmgiCiAKKyNpbmNsdWRlIDxrY3Jhc2guaD4K ICNpbmNsdWRlIDxrZGV2ZXJzaW9uLmg+CiAjaW5jbHVkZSA8a2xvY2FsZS5oPgogI2luY2x1ZGUg PGtjbWRsaW5lYXJncy5oPgpAQCAtMTM2LDggKzEzNyw4IEBAIHB1YmxpYzoKIAogCiAKLUtpc0Fw cGxpY2F0aW9uOjpLaXNBcHBsaWNhdGlvbigpCi0gICAgOiBLQXBwbGljYXRpb24oKQorS2lzQXBw bGljYXRpb246Oktpc0FwcGxpY2F0aW9uKGNvbnN0IFFTdHJpbmcgJmtleSkKKyAgICA6IFF0U2lu Z2xlQXBwbGljYXRpb24oa2V5LCBLQ21kTGluZUFyZ3M6OnF0QXJnYygpLCBLQ21kTGluZUFyZ3M6 OnF0QXJndigpKQogICAgICwgZChuZXcgS2lzQXBwbGljYXRpb25Qcml2YXRlKQogewogICAgIEtp c0FwcGxpY2F0aW9uOjpLb0FwcCA9IHRoaXM7CkBAIC0xNDgsNiArMTQ5LDE4IEBAIEtpc0FwcGxp Y2F0aW9uOjpLaXNBcHBsaWNhdGlvbigpCiAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgQ2FsbGlncmEg ZGlyZWN0b3JpZXMgZXRjLgogICAgIEtvR2xvYmFsOjppbml0aWFsaXplKCk7CiAKKyAgICBzZXRB cHBsaWNhdGlvbk5hbWUoS0dsb2JhbDo6bWFpbkNvbXBvbmVudCgpLmNvbXBvbmVudE5hbWUoKSk7 CisgICAgc2V0T3JnYW5pemF0aW9uRG9tYWluKEtHbG9iYWw6Om1haW5Db21wb25lbnQoKS5hYm91 dERhdGEoKS0+b3JnYW5pemF0aW9uRG9tYWluKCkpOworICAgIHNldEFwcGxpY2F0aW9uVmVyc2lv bihLR2xvYmFsOjptYWluQ29tcG9uZW50KCkuYWJvdXREYXRhKCktPnZlcnNpb24oKSk7CisKKyAg ICAvLyBtYWtlIHN1cmUgdGhlIGNsaXBib2FyZCBpcyBjcmVhdGVkIGJlZm9yZSBzZXR0aW5nIHRo ZSB3aW5kb3cgaWNvbiAoYnVnIDIwOTI2MykKKyAgICAodm9pZCkgUUFwcGxpY2F0aW9uOjpjbGlw Ym9hcmQoKTsKKyAgICBzZXRXaW5kb3dJY29uKEtJY29uKEtHbG9iYWw6Om1haW5Db21wb25lbnQo KS5hYm91dERhdGEoKS0+cHJvZ3JhbUljb25OYW1lKCkpKTsKKworICAgIEtDcmFzaDo6c2V0RHJL b25xaUVuYWJsZWQodHJ1ZSk7CisgICAgS0NyYXNoOjpzZXRBcHBsaWNhdGlvbk5hbWUoYXBwbGlj YXRpb25OYW1lKCkpOworICAgIEtDcmFzaDo6c2V0QXBwbGljYXRpb25QYXRoKFFDb3JlQXBwbGlj YXRpb246OmFwcGxpY2F0aW9uRGlyUGF0aCgpKTsKKwogI2lmZGVmIFFfT1NfTUFDWAogICAgIGlm ICggUVN5c0luZm86Ok1hY2ludG9zaFZlcnNpb24gPiBRU3lzSW5mbzo6TVZfMTBfOCApCiAgICAg ewpAQCAtMTU4LDYgKzE3MSw3IEBAIEtpc0FwcGxpY2F0aW9uOjpLaXNBcHBsaWNhdGlvbigpCiAg ICAgc2V0QXR0cmlidXRlKFF0OjpBQV9Eb250U2hvd0ljb25zSW5NZW51cywgdHJ1ZSk7CiAjZW5k aWYKIAorCiAgICAgaWYgKGFwcGxpY2F0aW9uTmFtZSgpID09ICJrcml0YSIgJiYgcWdldGVudigi S0RFX0ZVTExfU0VTU0lPTiIpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGVyZSBhcmUgdHdv IHRoZW1lcyB0aGF0IHdvcmsgZm9yIEtyaXRhLCBveHlnZW4gYW5kIHBsYXN0aXF1ZS4gVHJ5IHRv IHNldCBwbGFzdGlxdWUgZmlyc3QsIHRoZW4gb3h5Z2VuCiAgICAgICAgIHNldFN0eWxlKCJQbGFz dGlxdWUiKTsKQEAgLTE4MCw3ICsxOTQsNyBAQCBCT09MIGlzV293NjQoKQogICAgIC8vYW5kIEdl dFByb2NBZGRyZXNzIHRvIGdldCBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIGlmIGF2YWlsYWJs ZS4KIAogICAgIGZuSXNXb3c2NFByb2Nlc3MgPSAoTFBGTl9JU1dPVzY0UFJPQ0VTUykgR2V0UHJv Y0FkZHJlc3MoCi0gICAgICAgIEdldE1vZHVsZUhhbmRsZShURVhUKCJrZXJuZWwzMiIpKSwiSXNX b3c2NFByb2Nlc3MiKTsKKyAgICAgICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUoVEVYVCgia2Vy bmVsMzIiKSksIklzV293NjRQcm9jZXNzIik7CiAKICAgICBpZihOVUxMICE9IGZuSXNXb3c2NFBy b2Nlc3MpCiAgICAgewpAQCAtMjgzLDE4ICsyOTcsOCBAQCBib29sIEtpc0FwcGxpY2F0aW9uOjpz dGFydCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhZXhwb3J0QXMKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmICFwcm9maWxlRmlsZU5hbWUuaXNFbXB0eSgpKTsK IAotICAgIC8vIEZpZ3VyZSBvdXQgX3doaWNoXyBhcHBsaWNhdGlvbiB3ZSBhY3R1YWxseSBhcmUK LSAgICBLaXNEb2N1bWVudEVudHJ5IGVudHJ5ID0gS2lzRG9jdW1lbnRFbnRyeTo6cXVlcnlCeU1p bWVUeXBlKEtJU19NSU1FX1RZUEUpOwotICAgIGlmIChlbnRyeS5pc0VtcHR5KCkpIHsKLQotICAg ICAgICBRTWVzc2FnZUJveDo6Y3JpdGljYWwoMCwgaTE4bmMoIkB0aXRsZTp3aW5kb3ciLCAiS3Jp dGE6IENyaXRpY2FsIEVycm9yIiksIGkxOG4oIkVzc2VudGlhbCBhcHBsaWNhdGlvbiBjb21wb25l bnRzIGNvdWxkIG5vdCBiZSBmb3VuZC5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJUaGlzIG1pZ2h0IGJlIGFuIGluc3RhbGxhdGlvbiBpc3N1ZS5cbiIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJUcnkgcmVzdGFydGluZyBvciByZWluc3RhbGxpbmcuIikpOwotICAg ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCiAgICAgLy8gTG9hZCB2YXJpb3VzIGdsb2JhbCBw bHVnaW5zCi0KICAgICBLb1NoYXBlUmVnaXN0cnkqIHIgPSBLb1NoYXBlUmVnaXN0cnk6Omluc3Rh bmNlKCk7CiAgICAgci0+YWRkKG5ldyBLaXNTaGFwZVNlbGVjdGlvbkZhY3RvcnkoKSk7CiAKQEAg LTQ4NCwxMSArNDg4LDkgQEAgdm9pZCBLaXNBcHBsaWNhdGlvbjo6c2V0U3BsYXNoU2NyZWVuKFFX aWRnZXQgKnNwbGFzaFNjcmVlbikKIAogUVN0cmluZ0xpc3QgS2lzQXBwbGljYXRpb246Om1pbWVG aWx0ZXIoS2lzSW1wb3J0RXhwb3J0TWFuYWdlcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QK IHsKLSAgICBLaXNEb2N1bWVudEVudHJ5IGVudHJ5ID0gS2lzRG9jdW1lbnRFbnRyeTo6cXVlcnlC eU1pbWVUeXBlKEtJU19NSU1FX1RZUEUpOwotICAgIEtTZXJ2aWNlOjpQdHIgc2VydmljZSA9IGVu dHJ5LnNlcnZpY2UoKTsKICAgICByZXR1cm4gS2lzSW1wb3J0RXhwb3J0TWFuYWdlcjo6bWltZUZp bHRlcihLSVNfTUlNRV9UWVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vy dmljZS0+cHJvcGVydHkoIlgtS0RFLUV4dHJhTmF0aXZlTWltZVR5cGVzIiwgUVZhcmlhbnQ6OlN0 cmluZ0xpc3QpLnRvU3RyaW5nTGlzdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgS2lzRG9jdW1lbnRFbnRyeTo6ZXh0cmFOYXRpdmVNaW1lVHlwZXMo KSk7CiB9CiAKIApAQCAtNTEyLDEwICs1MTQsNTcgQEAgS2lzQXBwbGljYXRpb24gKktpc0FwcGxp Y2F0aW9uOjprb0FwcGxpY2F0aW9uKCkKICAgICByZXR1cm4gS29BcHA7CiB9CiAKK3ZvaWQgS2lz QXBwbGljYXRpb246OnJlbW90ZUFyZ3VtZW50cyhjb25zdCBRQnl0ZUFycmF5ICZtZXNzYWdlLCBR T2JqZWN0ICpzb2NrZXQpCit7CisgICAgUV9VTlVTRUQoc29ja2V0KTsKIAotaW50IEtpc0FwcGxp Y2F0aW9uOjpjaGVja0F1dG9zYXZlRmlsZXMoS2lzTWFpbldpbmRvdyAqbWFpbldpbmRvdykKKyAg ICBRRGF0YVN0cmVhbSBkcyhtZXNzYWdlKTsKKyAgICBLQ21kTGluZUFyZ3M6OmxvYWRBcHBBcmdz KGRzKTsKKworICAgIEtDbWRMaW5lQXJncyAqYXJncyA9IEtDbWRMaW5lQXJnczo6cGFyc2VkQXJn cygpOworICAgIGludCBhcmdzQ291bnQgPSBhcmdzLT5jb3VudCgpOworCisgICAgS2lzTWFpbldp bmRvdyAqbXcgPSBxb2JqZWN0X2Nhc3Q8S2lzTWFpbldpbmRvdyo+KHFBcHAtPmFjdGl2ZVdpbmRv dygpKTsKKyAgICBpZiAoIW13KSB7CisgICAgICAgIG13ID0gS2lzUGFydDo6aW5zdGFuY2UoKS0+ bWFpbldpbmRvd3MoKS5maXJzdCgpOworICAgIH0KKworICAgIGlmICghbXcpIHsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKworICAgIGlmIChhcmdzQ291bnQgPiAwKSB7CisKKyAgICAgICAgLy8g TG9vcCB0aHJvdWdoIGFyZ3VtZW50cworICAgICAgICBmb3IgKGludCBhcmdOdW1iZXIgPSAwOyBh cmdOdW1iZXIgPCBhcmdzQ291bnQ7IGFyZ051bWJlcisrKSB7CisgICAgICAgICAgICBLVXJsIHVy bCA9IGFyZ3MtPnVybChhcmdOdW1iZXIpOworICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkp IHsKKyAgICAgICAgICAgICAgICBLaXNEb2N1bWVudCAqZG9jID0gS2lzUGFydDo6aW5zdGFuY2Uo KS0+Y3JlYXRlRG9jdW1lbnQoKTsKKworICAgICAgICAgICAgICAgIGlmIChkb2MpIHsKKyAgICAg ICAgICAgICAgICAgICAgbXctPm9wZW5Eb2N1bWVudEludGVybmFsKHVybCwgZG9jKTsKKworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorCit9CisK K3ZvaWQgS2lzQXBwbGljYXRpb246OmZpbGVPcGVuUmVxdWVzdGVkKGNvbnN0IFFTdHJpbmcgJnVy bCkKIHsKKyAgICBLaXNEb2N1bWVudCAqZG9jID0gS2lzUGFydDo6aW5zdGFuY2UoKS0+Y3JlYXRl RG9jdW1lbnQoKTsKKyAgICBLaXNQYXJ0OjppbnN0YW5jZSgpLT5hZGREb2N1bWVudChkb2MpOwor ICAgIEtpc01haW5XaW5kb3cgKm1haW5XaW5kb3cgPSBLaXNQYXJ0OjppbnN0YW5jZSgpLT5tYWlu V2luZG93cygpLmZpcnN0KCk7CisgICAgaWYgKG1haW5XaW5kb3cpIHsKKyAgICAgICAgbWFpbldp bmRvdy0+b3BlbkRvY3VtZW50SW50ZXJuYWwodXJsLCBkb2MpOworICAgIH0KK30KKwogCitpbnQg S2lzQXBwbGljYXRpb246OmNoZWNrQXV0b3NhdmVGaWxlcyhLaXNNYWluV2luZG93ICptYWluV2lu ZG93KQorewogICAgIC8vIENoZWNrIGZvciBhdXRvc2F2ZSBmaWxlcyBmcm9tIGEgcHJldmlvdXMg cnVuLiBUaGVyZSBjYW4gYmUgc2V2ZXJhbCwgYW5kCiAgICAgLy8gd2Ugd2FudCB0byBvZmZlciBh IHJlc3RvcmUgZm9yIGV2ZXJ5IG9uZS4gSW5jbHVkaW5nIGEgbmljZSB0aHVtYm5haWwhCiAgICAg UVN0cmluZ0xpc3QgYXV0b1NhdmVGaWxlczsKQEAgLTUzNSw5ICs1ODQsOSBAQCBpbnQgS2lzQXBw bGljYXRpb246OmNoZWNrQXV0b3NhdmVGaWxlcyhLaXNNYWluV2luZG93ICptYWluV2luZG93KQog ICAgIGZpbHRlcnMgPDwgUVN0cmluZygiLiUxLSUyLSUzLWF1dG9zYXZlJTQiKS5hcmcoImtyaXRh IikuYXJnKCIqIikuYXJnKCIqIikuYXJnKGV4dGVuc2lvbik7CiAKICNpZmRlZiBRX09TX1dJTgot ICAgICAgICBRRGlyIGRpciA9IFFEaXI6OnRlbXBQYXRoKCk7CisgICAgUURpciBkaXIgPSBRRGly Ojp0ZW1wUGF0aCgpOwogI2Vsc2UKLSAgICAgICAgUURpciBkaXIgPSBRRGlyOjpob21lKCk7Cisg ICAgUURpciBkaXIgPSBRRGlyOjpob21lKCk7CiAjZW5kaWYKIAogICAgIC8vIGFsbCBhdXRvc2F2 ZSBmaWxlcyBmb3Igb3VyIGFwcGxpY2F0aW9uCkBAIC01NDUsNyArNTk0LDcgQEAgaW50IEtpc0Fw cGxpY2F0aW9uOjpjaGVja0F1dG9zYXZlRmlsZXMoS2lzTWFpbldpbmRvdyAqbWFpbldpbmRvdykK IAogICAgIFFTdHJpbmdMaXN0IHBpZHM7CiAgICAgUVN0cmluZyBvdXJQaWQ7Ci0gICAgb3VyUGlk LnNldE51bShrYXBwLT5hcHBsaWNhdGlvblBpZCgpKTsKKyAgICBvdXJQaWQuc2V0TnVtKHFBcHAt PmFwcGxpY2F0aW9uUGlkKCkpOwogCiAjaWZuZGVmIFFUX05PX0RCVVMKICAgICAvLyBhbGwgcnVu bmluZyBpbnN0YW5jZXMgb2Ygb3VyIGFwcGxpY2F0aW9uIC0tIGJpdCBoYWNraXNoLCBidXQgd2Ug Y2Fubm90IGdldCBhdCB0aGUgZGJ1cyBuYW1lIGhlcmUsIGZvciBzb21lIHJlYXNvbgpAQCAtNjEw LDcgKzY1OSw3IEBAIGludCBLaXNBcHBsaWNhdGlvbjo6Y2hlY2tBdXRvc2F2ZUZpbGVzKEtpc01h aW5XaW5kb3cgKm1haW5XaW5kb3cpCiAgICAgICAgICAgICAgICAgbWFpbldpbmRvdy0+b3BlbkRv Y3VtZW50SW50ZXJuYWwodXJsLCBkb2MpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgIGlm IChkb2MpIHsKKyAgICAgICAgICAgIGlmIChkb2MpIHsKICAgICAgICAgICAgICAgICBkb2MtPnJl c2V0VVJMKCk7CiAgICAgICAgICAgICAgICAgZG9jLT5zZXRNb2RpZmllZCh0cnVlKTsKICAgICAg ICAgICAgICAgICBRRmlsZTo6cmVtb3ZlKHVybC50b0xvY2FsRmlsZSgpKTsKZGlmZiAtLWdpdCBh L2tyaXRhL3VpL0tpc0FwcGxpY2F0aW9uLmggYi9rcml0YS91aS9LaXNBcHBsaWNhdGlvbi5oCmlu ZGV4IDZkZjVlMmEuLmE3MzdhMjkgMTAwNjQ0Ci0tLSBhL2tyaXRhL3VpL0tpc0FwcGxpY2F0aW9u LmgKKysrIGIva3JpdGEvdWkvS2lzQXBwbGljYXRpb24uaApAQCAtMjAsNyArMjAsNyBAQAogI2lm bmRlZiBLSVNfQVBQTElDQVRJT05fSAogI2RlZmluZSBLSVNfQVBQTElDQVRJT05fSAogCi0jaW5j bHVkZSA8a2FwcGxpY2F0aW9uLmg+CisjaW5jbHVkZSA8cXRzaW5nbGVhcHBsaWNhdGlvbi9xdHNp bmdsZWFwcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSAia3JpdGFfZXhwb3J0LmgiCiAKIGNsYXNzIEtp c1BhcnQ7CkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFFTdHJpbmdMaXN0OwogICogIElmIHRoZSBs YXN0IG1haW53aW5kb3cgYmVjb21lcyBjbG9zZWQsIEtpc0FwcGxpY2F0aW9uIGF1dG9tYXRpY2Fs bHkKICAqICBjYWxscyBRQXBwbGljYXRpb246OnF1aXQuCiAgKi8KLWNsYXNzIEtSSVRBVUlfRVhQ T1JUIEtpc0FwcGxpY2F0aW9uIDogcHVibGljIEtBcHBsaWNhdGlvbgorY2xhc3MgS1JJVEFVSV9F WFBPUlQgS2lzQXBwbGljYXRpb24gOiBwdWJsaWMgUXRTaW5nbGVBcHBsaWNhdGlvbgogewogICAg IFFfT0JKRUNUCiAKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgICAqIENyZWF0ZXMgYW4g YXBwbGljYXRpb24gb2JqZWN0LCBhZGRzIHNvbWUgc3RhbmRhcmQgZGlyZWN0b3JpZXMgYW5kCiAg ICAgICogaW5pdGlhbGl6ZXMga2ltZ2lvLgogICAgICAqLwotICAgIGV4cGxpY2l0IEtpc0FwcGxp Y2F0aW9uKCk7CisgICAgZXhwbGljaXQgS2lzQXBwbGljYXRpb24oY29uc3QgUVN0cmluZyAma2V5 KTsKIAogICAgIC8qKgogICAgICAqICBEZXN0cnVjdG9yLgpAQCAtODMsMTEgKzgzLDYgQEAgcHVi bGljOgogICAgIHZvaWQgc2V0U3BsYXNoU2NyZWVuKFFXaWRnZXQgKnNwbGFzaCk7CiAKICAgICAv KioKLSAgICAgKiBSZW1vdmUgdGhlIHNwbGFzaCBkaWFsb2cKLSAgICAgKi8KLSAgICB2b2lkIHJl bW92ZVNwbGFzaCgpOwotCi0gICAgLyoqCiAgICAgICogcmV0dXJuIGEgbGlzdCBvZiBtaW1ldHlw ZXMgdGhpcyBhcHBsaWNhdGlvbiBzdXBwb3J0cy4KICAgICAgKi8KICAgICBRU3RyaW5nTGlzdCBt aW1lRmlsdGVyKEtpc0ltcG9ydEV4cG9ydE1hbmFnZXI6OkRpcmVjdGlvbiBkaXJlY3Rpb24pIGNv bnN0OwpAQCAtMTEyLDYgKzEwNywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gQ3VycmVudCBhcHBs aWNhdGlvbiBvYmplY3QuCiAgICAgc3RhdGljIEtpc0FwcGxpY2F0aW9uICpLb0FwcDsKIAorcHVi bGljIHNsb3RzOgorCisgICAgdm9pZCByZW1vdGVBcmd1bWVudHMoY29uc3QgUUJ5dGVBcnJheSAm bWVzc2FnZSwgUU9iamVjdCpzb2NrZXQpOworICAgIHZvaWQgZmlsZU9wZW5SZXF1ZXN0ZWQoY29u c3QgUVN0cmluZyAmIHVybCk7CisKIHByaXZhdGU6CiAgICAgLy8vIEByZXR1cm4gdGhlIG51bWJl ciBvZiBhdXRvc2F2ZWZpbGVzIG9wZW5lZAogICAgIGludCBjaGVja0F1dG9zYXZlRmlsZXMoS2lz TWFpbldpbmRvdyAqbWFpbldpbmRvdyk7CmRpZmYgLS1naXQgYS9rcml0YS91aS9LaXNEb2N1bWVu dEVudHJ5LmNwcCBiL2tyaXRhL3VpL0tpc0RvY3VtZW50RW50cnkuY3BwCmluZGV4IDY2MmEyZjEu LjU1ODVlOTYgMTAwNjQ0Ci0tLSBhL2tyaXRhL3VpL0tpc0RvY3VtZW50RW50cnkuY3BwCisrKyBi L2tyaXRhL3VpL0tpc0RvY3VtZW50RW50cnkuY3BwCkBAIC00NCw2ICs0NCwxNiBAQCBLaXNEb2N1 bWVudEVudHJ5Ojp+S2lzRG9jdW1lbnRFbnRyeSgpCiB7CiB9CiAKK1FTdHJpbmcgS2lzRG9jdW1l bnRFbnRyeTo6bmF0aXZlTWltZVR5cGUoKQoreworICAgIHJldHVybiBRU3RyaW5nOjpmcm9tTGF0 aW4xKEtJU19NSU1FX1RZUEUpOworfQorCitRU3RyaW5nTGlzdCBLaXNEb2N1bWVudEVudHJ5Ojpl eHRyYU5hdGl2ZU1pbWVUeXBlcygpCit7CisgICAgcmV0dXJuIFFTdHJpbmdMaXN0KCkgPDwgS0lT X01JTUVfVFlQRTsKK30KKwogCiBLU2VydmljZTo6UHRyIEtpc0RvY3VtZW50RW50cnk6OnNlcnZp Y2UoKSBjb25zdCB7CiAgICAgcmV0dXJuIG1fc2VydmljZTsKZGlmZiAtLWdpdCBhL2tyaXRhL3Vp L0tpc0RvY3VtZW50RW50cnkuaCBiL2tyaXRhL3VpL0tpc0RvY3VtZW50RW50cnkuaAppbmRleCBh ODRkMzFjLi43Yzk5YjdjIDEwMDY0NAotLS0gYS9rcml0YS91aS9LaXNEb2N1bWVudEVudHJ5LmgK KysrIGIva3JpdGEvdWkvS2lzRG9jdW1lbnRFbnRyeS5oCkBAIC00OSw2ICs0OSwxMCBAQCBwdWJs aWM6CiAgICAgZXhwbGljaXQgS2lzRG9jdW1lbnRFbnRyeShjb25zdCBLU2VydmljZTo6UHRyJiBz ZXJ2aWNlKTsKICAgICB+S2lzRG9jdW1lbnRFbnRyeSgpOwogCisgICAgc3RhdGljIFFTdHJpbmcg bmF0aXZlTWltZVR5cGUoKTsKKworICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBleHRyYU5hdGl2ZU1p bWVUeXBlcygpOworCiAgICAgS1NlcnZpY2U6OlB0ciBzZXJ2aWNlKCkgY29uc3Q7CiAKICAgICAv KioKZGlmZiAtLWdpdCBhL2tyaXRhL3VpL0tpc0ZpbHRlckNoYWluLmNwcCBiL2tyaXRhL3VpL0tp c0ZpbHRlckNoYWluLmNwcAppbmRleCBkMDFhNjE4Li5iYjhiNDkwIDEwMDY0NAotLS0gYS9rcml0 YS91aS9LaXNGaWx0ZXJDaGFpbi5jcHAKKysrIGIva3JpdGEvdWkvS2lzRmlsdGVyQ2hhaW4uY3Bw CkBAIC01MjEsMTIgKzUyMSw3IEBAIEtpc0RvY3VtZW50KiBLaXNGaWx0ZXJDaGFpbjo6Y3JlYXRl RG9jdW1lbnQoY29uc3QgUVN0cmluZyYgZmlsZSkKIAogS2lzRG9jdW1lbnQqIEtpc0ZpbHRlckNo YWluOjpjcmVhdGVEb2N1bWVudChjb25zdCBRQnl0ZUFycmF5JiBtaW1lVHlwZSkKIHsKLSAgICBL aXNEb2N1bWVudEVudHJ5IGVudHJ5ID0gS2lzRG9jdW1lbnRFbnRyeTo6cXVlcnlCeU1pbWVUeXBl KG1pbWVUeXBlKTsKLQotICAgIGlmIChlbnRyeS5pc0VtcHR5KCkpIHsKLSAgICAgICAga0Vycm9y KDMwNTAwKSA8PCAiQ291bGRuJ3QgZmluZCBhIHBhcnQgdGhhdCBjYW4gaGFuZGxlIG1pbWV0eXBl ICIgPDwgbWltZVR5cGUgPDwgZW5kbDsKLSAgICB9Ci0KKyAgICBRX1VOVVNFRChtaW1lVHlwZSk7 CiAgICAgcmV0dXJuIEtpc1BhcnQ6Omluc3RhbmNlKCktPmNyZWF0ZURvY3VtZW50KCk7CiB9CiAK ZGlmZiAtLWdpdCBhL2tyaXRhL3VpL0tpc01haW5XaW5kb3cuY3BwIGIva3JpdGEvdWkvS2lzTWFp bldpbmRvdy5jcHAKaW5kZXggMjM5M2Y2OC4uOTRhOWMwOSAxMDA2NDQKLS0tIGEva3JpdGEvdWkv S2lzTWFpbldpbmRvdy5jcHAKKysrIGIva3JpdGEvdWkvS2lzTWFpbldpbmRvdy5jcHAKQEAgLTMw Nyw3ICszMDcsNyBAQCBLaXNNYWluV2luZG93OjpLaXNNYWluV2luZG93KCkKICAgICBkLT50b29s T3B0aW9uc0RvY2tlciA9IHFvYmplY3RfY2FzdDxLb1Rvb2xEb2NrZXIqPihjcmVhdGVEb2NrV2lk Z2V0KCZ0b29sRG9ja2VyRmFjdG9yeSkpOwogCiAgICAgS29Ub29sQm94RmFjdG9yeSB0b29sQm94 RmFjdG9yeTsKLSAgICBRRG9ja1dpZGdldCogdG9vbGJveCA9IGNyZWF0ZURvY2tXaWRnZXQoJnRv b2xCb3hGYWN0b3J5KTsKKyAgICBjcmVhdGVEb2NrV2lkZ2V0KCZ0b29sQm94RmFjdG9yeSk7CiAK ICAgICBmb3JlYWNoKGNvbnN0IFFTdHJpbmcgJiBkb2NrZXIsIEtvRG9ja1JlZ2lzdHJ5OjppbnN0 YW5jZSgpLT5rZXlzKCkpIHsKICAgICAgICAgS29Eb2NrRmFjdG9yeUJhc2UgKmZhY3RvcnkgPSBL b0RvY2tSZWdpc3RyeTo6aW5zdGFuY2UoKS0+dmFsdWUoZG9ja2VyKTsKQEAgLTM3Nyw5ICszNzcs OCBAQCBLaXNNYWluV2luZG93OjpLaXNNYWluV2luZG93KCkKICAgICBRU3RyaW5nIGRvYzsKICAg ICBRU3RyaW5nTGlzdCBhbGxGaWxlcyA9IEtHbG9iYWw6OmRpcnMoKS0+ZmluZEFsbFJlc291cmNl cygiZGF0YSIsICJrcml0YS9rcml0YS5yYyIpOwogICAgIHNldFhNTEZpbGUoZmluZE1vc3RSZWNl bnRYTUxGaWxlKGFsbEZpbGVzLCBkb2MpKTsKLSAgICBzZXRMb2NhbFhNTEZpbGUoS1N0YW5kYXJk RGlyczo6bG9jYXRlTG9jYWwoImRhdGEiLCAia3JpdGEva3JpdGEucmMiKSk7CiAKLSAgICBndWlG YWN0b3J5KCktPmFkZENsaWVudCggdGhpcyApOworICAgIGd1aUZhY3RvcnkoKS0+YWRkQ2xpZW50 KHRoaXMpOwogCiAgICAgLy8gQ3JlYXRlIGFuZCBwbHVnIHRvb2xiYXIgbGlzdCBmb3IgU2V0dGlu Z3MgbWVudQogICAgIFFMaXN0PFFBY3Rpb24gKj4gdG9vbGJhckxpc3Q7CkBAIC0xNzA5LDggKzE3 MDgsNyBAQCBRRG9ja1dpZGdldCogS2lzTWFpbldpbmRvdzo6Y3JlYXRlRG9ja1dpZGdldChLb0Rv Y2tGYWN0b3J5QmFzZSogZmFjdG9yeSkKICAgICBLQ29uZmlnR3JvdXAgZ3JvdXAoS0dsb2JhbDo6 Y29uZmlnKCksICJHVUkiKTsKICAgICBRRm9udCBkb2NrV2lkZ2V0Rm9udCAgPSBLR2xvYmFsU2V0 dGluZ3M6OmdlbmVyYWxGb250KCk7CiAgICAgcXJlYWwgcG9pbnRTaXplID0gZ3JvdXAucmVhZEVu dHJ5KCJwYWxldHRlZm9udHNpemUiLCBkb2NrV2lkZ2V0Rm9udC5wb2ludFNpemUoKSAqIDAuNzUp OwotICAgIHBvaW50U2l6ZSA9IHFNYXgocG9pbnRTaXplLCBLR2xvYmFsU2V0dGluZ3M6OnNtYWxs ZXN0UmVhZGFibGVGb250KCkucG9pbnRTaXplRigpKTsKLSAgICBkb2NrV2lkZ2V0Rm9udC5zZXRQ b2ludFNpemVGKHBvaW50U2l6ZSk7CisgICAgZG9ja1dpZGdldEZvbnQuc2V0UG9pbnRTaXplRihx TWF4KHBvaW50U2l6ZSwgS0dsb2JhbFNldHRpbmdzOjpzbWFsbGVzdFJlYWRhYmxlRm9udCgpLnBv aW50U2l6ZUYoKSkpOwogI2lmZGVmIFFfT1NfTUFDCiAgICAgZG9ja1dpZGdldC0+c2V0QXR0cmli dXRlKFF0OjpXQV9NYWNTbWFsbFNpemUsIHRydWUpOwogI2VuZGlmCkBAIC0xNzIzLDEzICsxNzIx LDEzIEBAIFFEb2NrV2lkZ2V0KiBLaXNNYWluV2luZG93OjpjcmVhdGVEb2NrV2lkZ2V0KEtvRG9j a0ZhY3RvcnlCYXNlKiBmYWN0b3J5KQogCiB2b2lkIEtpc01haW5XaW5kb3c6OmZvcmNlRG9ja1Rh YkZvbnRzKCkKIHsKLSAgICBRT2JqZWN0TGlzdCBjaGlzID0gY2hpbGRyZW4oKTsKLSAgICBmb3Ig KGludCBpID0gMDsgaSA8IGNoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGNoaXMuYXQo aSktPmluaGVyaXRzKCJRVGFiQmFyIikpIHsKKyAgICBmb3JlYWNoKFFPYmplY3QgKmNoaWxkLCBj aGlsZHJlbigpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aW5oZXJpdHMoIlFUYWJCYXIiKSkgewor ICAgICAgICAgICAgS0NvbmZpZ0dyb3VwIGdyb3VwKEtHbG9iYWw6OmNvbmZpZygpLCAiR1VJIik7 CiAgICAgICAgICAgICBRRm9udCBkb2NrV2lkZ2V0Rm9udCAgPSBLR2xvYmFsU2V0dGluZ3M6Omdl bmVyYWxGb250KCk7Ci0gICAgICAgICAgICBxcmVhbCBwb2ludFNpemUgPSBLR2xvYmFsU2V0dGlu Z3M6OnNtYWxsZXN0UmVhZGFibGVGb250KCkucG9pbnRTaXplRigpOwotICAgICAgICAgICAgZG9j a1dpZGdldEZvbnQuc2V0UG9pbnRTaXplRihwb2ludFNpemUpOwotICAgICAgICAgICAgKChRVGFi QmFyICopY2hpcy5hdChpKSktPnNldEZvbnQoZG9ja1dpZGdldEZvbnQpOworICAgICAgICAgICAg cXJlYWwgcG9pbnRTaXplID0gZ3JvdXAucmVhZEVudHJ5KCJwYWxldHRlZm9udHNpemUiLCBkb2Nr V2lkZ2V0Rm9udC5wb2ludFNpemUoKSAqIDAuNzUpOworICAgICAgICAgICAgZG9ja1dpZGdldEZv bnQuc2V0UG9pbnRTaXplRihxTWF4KHBvaW50U2l6ZSwgS0dsb2JhbFNldHRpbmdzOjpzbWFsbGVz dFJlYWRhYmxlRm9udCgpLnBvaW50U2l6ZUYoKSkpOworICAgICAgICAgICAgKChRVGFiQmFyICop Y2hpbGQpLT5zZXRGb250KGRvY2tXaWRnZXRGb250KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg LTE3NDgsNiArMTc0Niw5IEBAIFFMaXN0PEtvQ2FudmFzT2JzZXJ2ZXJCYXNlKj4gS2lzTWFpbldp bmRvdzo6Y2FudmFzT2JzZXJ2ZXJzKCkKICAgICAgICAgaWYgKG9ic2VydmVyKSB7CiAgICAgICAg ICAgICBvYnNlcnZlcnMgPDwgb2JzZXJ2ZXI7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg ICAgICAgICAgICBxV2FybmluZygpIDw8IGRvY2tlciA8PCAiaXMgbm90IGEgY2FudmFzIG9ic2Vy dmVyIjsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gb2JzZXJ2ZXJzOwogfQpAQCAtMTgw OCw2ICsxODA5LDcgQEAgdm9pZCBLaXNNYWluV2luZG93OjpzdWJXaW5kb3dBY3RpdmF0ZWQoKQog ICAgIH0KIAogICAgIHVwZGF0ZUNhcHRpb24oKTsKKyAgICBkLT52aWV3TWFuYWdlci0+YWN0aW9u TWFuYWdlcigpLT51cGRhdGVHVUkoKTsKIH0KIAogdm9pZCBLaXNNYWluV2luZG93Ojp1cGRhdGVX aW5kb3dNZW51KCkKQEAgLTE4ODUsNiArMTg4Nyw3IEBAIHZvaWQgS2lzTWFpbldpbmRvdzo6c2V0 QWN0aXZlU3ViV2luZG93KFFXaWRnZXQgKndpbmRvdykKICAgICAgICAgZC0+YWN0aXZlU3ViV2lu ZG93ID0gc3Vid2luOwogICAgIH0KICAgICB1cGRhdGVXaW5kb3dNZW51KCk7CisgICAgZC0+dmll d01hbmFnZXItPmFjdGlvbk1hbmFnZXIoKS0+dXBkYXRlR1VJKCk7CiB9CiAKIHZvaWQgS2lzTWFp bldpbmRvdzo6Y29uZmlnQ2hhbmdlZCgpCkBAIC0xODk5LDYgKzE5MDIsNyBAQCB2b2lkIEtpc01h aW5XaW5kb3c6OmNvbmZpZ0NoYW5nZWQoKQogCiAgICAgS0NvbmZpZ0dyb3VwIGdyb3VwKEtHbG9i YWw6OmNvbmZpZygpLCAidGhlbWUiKTsKICAgICBkLT50aGVtZU1hbmFnZXItPnNldEN1cnJlbnRU aGVtZShncm91cC5yZWFkRW50cnkoIlRoZW1lIiwgIktyaXRhIGRhcmsiKSk7CisgICAgZC0+dmll d01hbmFnZXItPmFjdGlvbk1hbmFnZXIoKS0+dXBkYXRlR1VJKCk7CiB9CiAKIHZvaWQgS2lzTWFp bldpbmRvdzo6bmV3VmlldyhRT2JqZWN0ICpkb2N1bWVudCkKQEAgLTE5MDYsMTggKzE5MTAsMTgg QEAgdm9pZCBLaXNNYWluV2luZG93OjpuZXdWaWV3KFFPYmplY3QgKmRvY3VtZW50KQogICAgIEtp c0RvY3VtZW50ICpkb2MgPSBxb2JqZWN0X2Nhc3Q8S2lzRG9jdW1lbnQqPihkb2N1bWVudCk7CiAg ICAgS2lzVmlldyAqdmlldyA9IEtpc1BhcnQ6Omluc3RhbmNlKCktPmNyZWF0ZVZpZXcoZG9jLCB0 aGlzKTsKICAgICBhZGRWaWV3KHZpZXcpOwotICAgIHFEZWJ1ZygpIDw8ICI/Pj4+Pj4+Pj4+Pj4+ Pj4+PiIgPDwgS0FjdGlvbkNvbGxlY3Rpb246OmFsbENvbGxlY3Rpb25zKCkuc2l6ZSgpOworICAg IGQtPnZpZXdNYW5hZ2VyLT5hY3Rpb25NYW5hZ2VyKCktPnVwZGF0ZUdVSSgpOwogfQogCiB2b2lk IEtpc01haW5XaW5kb3c6Om5ld1dpbmRvdygpCiB7Ci0gICAgcURlYnVnKCkgPDwgIj8+Pj4+Pj4+ Pj4+Pj4+Pj4+IiA8PCBLQWN0aW9uQ29sbGVjdGlvbjo6YWxsQ29sbGVjdGlvbnMoKS5zaXplKCk7 CiAgICAgS2lzUGFydDo6aW5zdGFuY2UoKS0+Y3JlYXRlTWFpbldpbmRvdygpLT5zaG93KCk7CiB9 CiAKIHZvaWQgS2lzTWFpbldpbmRvdzo6Y2xvc2VDdXJyZW50V2luZG93KCkKIHsKICAgICBkLT5t ZGlBcmVhLT5jdXJyZW50U3ViV2luZG93KCktPmNsb3NlKCk7CisgICAgZC0+dmlld01hbmFnZXIt PmFjdGlvbk1hbmFnZXIoKS0+dXBkYXRlR1VJKCk7CiB9CiAKIHZvaWQgS2lzTWFpbldpbmRvdzo6 c2hvd0Fib3V0QXBwbGljYXRpb24oKQpkaWZmIC0tZ2l0IGEva3JpdGEvdWkvS2lzTWFpbldpbmRv dy5oIGIva3JpdGEvdWkvS2lzTWFpbldpbmRvdy5oCmluZGV4IDU1YzkwNDYuLmVkNGFkNTggMTAw NjQ0Ci0tLSBhL2tyaXRhL3VpL0tpc01haW5XaW5kb3cuaAorKysgYi9rcml0YS91aS9LaXNNYWlu V2luZG93LmgKQEAgLTEyNCwxMyArMTI0LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRSZWFk V3JpdGUoYm9vbCByZWFkd3JpdGUpOwogCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZG9j a3dpZGdldCBzcGVjaWZpZWQgYnkgdGhlIEBwIGZhY3RvcnkuIElmIHRoZSBkb2NrIHdpZGdldCBk b2Vzbid0IGV4aXN0IHlldCBpdCdzIGNyZWF0ZWQuCi0gICAgICogQWRkIGEgInZpZXdfcGFsZXR0 ZV9hY3Rpb25fbWVudSIgYWN0aW9uIHRvIHlvdXIgdmlldyBtZW51IGlmIHlvdSB3YW50IHRvIHVz ZSBjbG9zYWJsZSBkb2NrIHdpZGdldHMuCi0gICAgICogQHBhcmFtIGZhY3RvcnkgdGhlIGZhY3Rv cnkgdXNlZCB0byBjcmVhdGUgdGhlIGRvY2sgd2lkZ2V0IGlmIG5lZWRlZAotICAgICAqIEByZXR1 cm4gdGhlIGRvY2sgd2lkZ2V0IHNwZWNpZmllZCBieSBAcCBmYWN0b3J5IChtYXkgYmUgMCkKLSAg ICAgKi8KLSAgICBRRG9ja1dpZGdldCogY3JlYXRlRG9ja1dpZGdldChLb0RvY2tGYWN0b3J5QmFz ZSogZmFjdG9yeSk7CiAKICAgICAvLy8gUmV0dXJuIHRoZSBsaXN0IG9mIGRvY2sgd2lkZ2V0cyBi ZWxvbmdpbmcgdG8gdGhpcyBtYWluIHdpbmRvdy4KICAgICBRTGlzdDxRRG9ja1dpZGdldCo+IGRv Y2tXaWRnZXRzKCk7CkBAIC0zNzMsMTQgKzM2NiwxNCBAQCBwcml2YXRlOgogCiAgICAgZnJpZW5k IGNsYXNzIEtpc0FwcGxpY2F0aW9uOwogCisKICAgICAvKioKLSAgICAgKiBUaGlzIHNldHRpbmcg aW5kaWNhdGVzIHdobyBpcyBjYWxsaW5nIGNob29zZU5ld0RvY3VtZW50LgotICAgICAqIFVzdWFs bHkgdGhlIGFwcCB3aWxsIHdhbnQgdG8KLSAgICAgKiAtIHNob3cgdGhlIHRlbXBsYXRlIGRpYWxv ZyB3aXRoICdldmVyeXRoaW5nJyBpZiBJbml0RG9jQXBwU3RhcnRpbmcsIEluaXREb2NGaWxlQ2xv c2Ugb3IgSW5pdERvY0VtYmVkZGVkCi0gICAgICogLSBzaG93IHRoZSB0ZW1wbGF0ZSBkaWFsb2cg d2l0aCAndGVtcGxhdGVzIG9ubHknIGlmIEluaXREb2NGaWxlTmV3Ci0gICAgICogLSBjcmVhdGUg YW4gZW1wdHkgZG9jdW1lbnQgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGlmIEluaXREb2NFbXB0eQor ICAgICAqIFJldHVybnMgdGhlIGRvY2t3aWRnZXQgc3BlY2lmaWVkIGJ5IHRoZSBAcCBmYWN0b3J5 LiBJZiB0aGUgZG9jayB3aWRnZXQgZG9lc24ndCBleGlzdCB5ZXQgaXQncyBjcmVhdGVkLgorICAg ICAqIEFkZCBhICJ2aWV3X3BhbGV0dGVfYWN0aW9uX21lbnUiIGFjdGlvbiB0byB5b3VyIHZpZXcg bWVudSBpZiB5b3Ugd2FudCB0byB1c2UgY2xvc2FibGUgZG9jayB3aWRnZXRzLgorICAgICAqIEBw YXJhbSBmYWN0b3J5IHRoZSBmYWN0b3J5IHVzZWQgdG8gY3JlYXRlIHRoZSBkb2NrIHdpZGdldCBp ZiBuZWVkZWQKKyAgICAgKiBAcmV0dXJuIHRoZSBkb2NrIHdpZGdldCBzcGVjaWZpZWQgYnkgQHAg ZmFjdG9yeSAobWF5IGJlIDApCiAgICAgICovCi0gICAgZW51bSBJbml0RG9jRmxhZ3MgeyAvKklu aXREb2NBcHBTdGFydGluZywgKi8gSW5pdERvY0ZpbGVOZXcsIEluaXREb2NGaWxlQ2xvc2UgLyos IEluaXREb2NFbWJlZGRlZCwgSW5pdERvY0VtcHR5Ki8gfTsKKyAgICBRRG9ja1dpZGdldCogY3Jl YXRlRG9ja1dpZGdldChLb0RvY2tGYWN0b3J5QmFzZSogZmFjdG9yeSk7CiAKICAgICAvKioKICAg ICAgKiBBc2sgdXNlciBhYm91dCBzYXZpbmcgY2hhbmdlcyB0byB0aGUgZG9jdW1lbnQgdXBvbiBl eGl0LgpkaWZmIC0tZ2l0IGEva3JpdGEvdWkva2lzX2FjdGlvbl9tYW5hZ2VyLmNwcCBiL2tyaXRh L3VpL2tpc19hY3Rpb25fbWFuYWdlci5jcHAKaW5kZXggYWUyZTVjYi4uN2UxYmQ1ZSAxMDA2NDQK LS0tIGEva3JpdGEvdWkva2lzX2FjdGlvbl9tYW5hZ2VyLmNwcAorKysgYi9rcml0YS91aS9raXNf YWN0aW9uX21hbmFnZXIuY3BwCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSAia2lzX2FjdGlv bl9tYW5hZ2VyLmgiCiAKICNpbmNsdWRlIDxRTGlzdD4KKworI2luY2x1ZGUgPGtzdGFuZGFyZGRp cnMuaD4KICNpbmNsdWRlIDxrYWN0aW9uY29sbGVjdGlvbi5oPgogCiAjaW5jbHVkZSAiS2lzUGFy dC5oIgpAQCAtMzEsNiArMzMsOCBAQAogI2luY2x1ZGUgImtpc19sYXllci5oIgogI2luY2x1ZGUg Iktpc0RvY3VtZW50LmgiCiAKKworCiBjbGFzcyBLaXNBY3Rpb25NYW5hZ2VyOjpQcml2YXRlIHsK IAogcHVibGljOgpAQCAtNDIsMTIgKzQ2LDE3IEBAIHB1YmxpYzoKICAgICBRTGlzdDxLaXNBY3Rp b24qPiBhY3Rpb25zOwogICAgIEtvR2VuZXJpY1JlZ2lzdHJ5PEtpc09wZXJhdGlvblVJRmFjdG9y eSo+IHVpUmVnaXN0cnk7CiAgICAgS2lzT3BlcmF0aW9uUmVnaXN0cnkgb3BlcmF0aW9uUmVnaXN0 cnk7CisKIH07CiAKIEtpc0FjdGlvbk1hbmFnZXI6Oktpc0FjdGlvbk1hbmFnZXIoS2lzVmlld01h bmFnZXIqIHZpZXdNYW5hZ2VyKQogICAgIDogZChuZXcgUHJpdmF0ZSkKIHsKICAgICBkLT52aWV3 TWFuYWdlciA9IHZpZXdNYW5hZ2VyOworCisgICAgUVN0cmluZyBrcml0YXJjID0gS1N0YW5kYXJk RGlyczo6bG9jYXRlKCJkYXRhIiwgImtyaXRhL2tyaXRhLnJjIik7CisgICAgcURlYnVnKCkgPDwg a3JpdGFyYzsKKwogfQogCiBLaXNBY3Rpb25NYW5hZ2VyOjp+S2lzQWN0aW9uTWFuYWdlcigpCkBA IC02MiwxMiArNzEsMTIgQEAgdm9pZCBLaXNBY3Rpb25NYW5hZ2VyOjpzZXRWaWV3KFFQb2ludGVy PEtpc1ZpZXc+IGltYWdlVmlldykKIAogdm9pZCBLaXNBY3Rpb25NYW5hZ2VyOjphZGRBY3Rpb24o Y29uc3QgUVN0cmluZyYgbmFtZSwgS2lzQWN0aW9uKiBhY3Rpb24pCiB7Ci0gICAgaWYgKCFuYW1l LmlzRW1wdHkoKSkgewotICAgICAgICBkLT52aWV3TWFuYWdlci0+YWN0aW9uQ29sbGVjdGlvbigp LT5hZGRBY3Rpb24obmFtZSwgYWN0aW9uKTsKLSAgICAgICAgYWN0aW9uLT5zZXRPYmplY3ROYW1l KG5hbWUpOwotICAgICAgICBhY3Rpb24tPnNldFBhcmVudChkLT52aWV3TWFuYWdlci0+YWN0aW9u Q29sbGVjdGlvbigpKTsKLSAgICB9CisgICAgUV9BU1NFUlQoIW5hbWUuaXNFbXB0eSgpKTsKKyAg ICBRX0FTU0VSVChhY3Rpb24pOwogCisgICAgZC0+dmlld01hbmFnZXItPmFjdGlvbkNvbGxlY3Rp b24oKS0+YWRkQWN0aW9uKG5hbWUsIGFjdGlvbik7CisgICAgYWN0aW9uLT5zZXRPYmplY3ROYW1l KG5hbWUpOworICAgIGFjdGlvbi0+c2V0UGFyZW50KGQtPnZpZXdNYW5hZ2VyLT5hY3Rpb25Db2xs ZWN0aW9uKCkpOwogICAgIGQtPmFjdGlvbnMuYXBwZW5kKGFjdGlvbik7CiAgICAgYWN0aW9uLT5z ZXRBY3Rpb25NYW5hZ2VyKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEva3JpdGEvdWkva2lzX2ZhY3Rv cnkyLmNjIGIva3JpdGEvdWkva2lzX2ZhY3RvcnkyLmNjCmluZGV4IDI2OWMwZDAuLjJmNWJhNDEg MTAwNjQ0Ci0tLSBhL2tyaXRhL3VpL2tpc19mYWN0b3J5Mi5jYworKysgYi9rcml0YS91aS9raXNf ZmFjdG9yeTIuY2MKQEAgLTQwLDEwICs0MCw5IEBACiAKIAogS0Fib3V0RGF0YSogS2lzRmFjdG9y eTo6c19hYm91dERhdGEgPSAwOwotS0NvbXBvbmVudERhdGEqIEtpc0ZhY3Rvcnk6OnNfaW5zdGFu Y2UgPSAwOworS0NvbXBvbmVudERhdGEqIEtpc0ZhY3Rvcnk6OnNfY29tcG9uZW50RGF0YSA9IDA7 CiAKLUtpc0ZhY3Rvcnk6Oktpc0ZhY3RvcnkoUU9iamVjdCogcGFyZW50KQotICAgIDogS1BsdWdp bkZhY3RvcnkoKmFib3V0RGF0YSgpLCBwYXJlbnQpCitLaXNGYWN0b3J5OjpLaXNGYWN0b3J5KCkK IHsKICAgICAodm9pZCljb21wb25lbnREYXRhKCk7CiB9CkBAIC01MiwyMSArNTEsOCBAQCBLaXNG YWN0b3J5Ojp+S2lzRmFjdG9yeSgpCiB7CiAgICAgZGVsZXRlIHNfYWJvdXREYXRhOwogICAgIHNf YWJvdXREYXRhID0gMDsKLSAgICBkZWxldGUgc19pbnN0YW5jZTsKLSAgICBzX2luc3RhbmNlID0g MDsKLX0KLQotLyoqCi0gKiBDcmVhdGUgdGhlIGRvY3VtZW50Ci0gKi8KLVFPYmplY3QqIEtpc0Zh Y3Rvcnk6OmNyZWF0ZSggY29uc3QgY2hhciogLyppZmFjZSovLCBRV2lkZ2V0KiAvKnBhcmVudFdp ZGdldCovLCBRT2JqZWN0ICpwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBRVmFyaWFudExpc3QmIGFyZ3MsIGNvbnN0IFFTdHJpbmcmIGtleXdvcmQgKQotewotICAg IFFfVU5VU0VEKCBwYXJlbnQgKTsKLSAgICBRX1VOVVNFRCggYXJncyApOwotICAgIFFfVU5VU0VE KCBrZXl3b3JkICk7Ci0KLSAgICByZXR1cm4gS2lzUGFydDo6aW5zdGFuY2UoKTsKKyAgICBkZWxl dGUgc19jb21wb25lbnREYXRhOworICAgIHNfY29tcG9uZW50RGF0YSA9IDA7CiB9CiAKIApAQCAt ODAsMzYgKzY2LDM0IEBAIEtBYm91dERhdGEqIEtpc0ZhY3Rvcnk6OmFib3V0RGF0YSgpCiAKIGNv bnN0IEtDb21wb25lbnREYXRhICZLaXNGYWN0b3J5Ojpjb21wb25lbnREYXRhKCkKIHsKLSAgICBp ZiAoIXNfaW5zdGFuY2UpIHsKLSAgICAgICAgc19pbnN0YW5jZSA9IG5ldyBLQ29tcG9uZW50RGF0 YShhYm91dERhdGEoKSk7Ci0gICAgICAgIFFfQ0hFQ0tfUFRSKHNfaW5zdGFuY2UpOwotICAgICAg ICBzX2luc3RhbmNlLT5kaXJzKCktPmFkZFJlc291cmNlVHlwZSgia3JpdGFfdGVtcGxhdGUiLCAi ZGF0YSIsICJrcml0YS90ZW1wbGF0ZXMiKTsKKyAgICBpZiAoIXNfY29tcG9uZW50RGF0YSkgewor ICAgICAgICBzX2NvbXBvbmVudERhdGEgPSBuZXcgS0NvbXBvbmVudERhdGEoYWJvdXREYXRhKCkp OworICAgICAgICBRX0NIRUNLX1BUUihzX2NvbXBvbmVudERhdGEpOworICAgICAgICBzX2NvbXBv bmVudERhdGEtPmRpcnMoKS0+YWRkUmVzb3VyY2VUeXBlKCJrcml0YV90ZW1wbGF0ZSIsICJkYXRh IiwgImtyaXRhL3RlbXBsYXRlcyIpOwogCiAgICAgICAgIC8vIGZvciBjdXJzb3JzCi0gICAgICAg IHNfaW5zdGFuY2UtPmRpcnMoKS0+YWRkUmVzb3VyY2VUeXBlKCJraXNfcGljcyIsICJkYXRhIiwg ImtyaXRhL3BpY3MvIik7CisgICAgICAgIHNfY29tcG9uZW50RGF0YS0+ZGlycygpLT5hZGRSZXNv dXJjZVR5cGUoImtpc19waWNzIiwgImRhdGEiLCAia3JpdGEvcGljcy8iKTsKIAogICAgICAgICAv LyBmb3IgaW1hZ2VzIGluIHRoZSBwYWludG9wIGJveAotICAgICAgICBzX2luc3RhbmNlLT5kaXJz KCktPmFkZFJlc291cmNlVHlwZSgia2lzX2ltYWdlcyIsICJkYXRhIiwgImtyaXRhL2ltYWdlcy8i KTsKKyAgICAgICAgc19jb21wb25lbnREYXRhLT5kaXJzKCktPmFkZFJlc291cmNlVHlwZSgia2lz X2ltYWdlcyIsICJkYXRhIiwgImtyaXRhL2ltYWdlcy8iKTsKIAotICAgICAgICBzX2luc3RhbmNl LT5kaXJzKCktPmFkZFJlc291cmNlVHlwZSgiaWNjX3Byb2ZpbGVzIiwgMCwgImtyaXRhL3Byb2Zp bGVzLyIpOworICAgICAgICBzX2NvbXBvbmVudERhdGEtPmRpcnMoKS0+YWRkUmVzb3VyY2VUeXBl KCJpY2NfcHJvZmlsZXMiLCAwLCAia3JpdGEvcHJvZmlsZXMvIik7CiAKLSAgICAgICAgc19pbnN0 YW5jZS0+ZGlycygpLT5hZGRSZXNvdXJjZVR5cGUoImtpc19zaGFkZXJzIiwgImRhdGEiLCAia3Jp dGEvc2hhZGVycy8iKTsKKyAgICAgICAgc19jb21wb25lbnREYXRhLT5kaXJzKCktPmFkZFJlc291 cmNlVHlwZSgia2lzX3NoYWRlcnMiLCAiZGF0YSIsICJrcml0YS9zaGFkZXJzLyIpOwogCiAgICAg ICAgIC8vIFRlbGwgdGhlIGljb25sb2FkZXIgYWJvdXQgc2hhcmUvYXBwcy9jYWxsaWdyYS9pY29u cwogICAgICAgICBLSWNvbkxvYWRlcjo6Z2xvYmFsKCktPmFkZEFwcERpcigiY2FsbGlncmEiKTsK IAotICAgICAgICBLR2xvYmFsOjpsb2NhbGUoKS0+aW5zZXJ0Q2F0YWxvZyhzX2luc3RhbmNlLT5j YXRhbG9nTmFtZSgpKTsKKyAgICAgICAgS0dsb2JhbDo6bG9jYWxlKCktPmluc2VydENhdGFsb2co c19jb21wb25lbnREYXRhLT5jYXRhbG9nTmFtZSgpKTsKICAgICAgICAgLy8gaW5zdGFsbCAnaW5z dGFuY2VuYW1lJ2RhdGEgcmVzb3VyY2UgdHlwZQotICAgICAgICBLR2xvYmFsOjpkaXJzKCktPmFk ZFJlc291cmNlVHlwZShRU3RyaW5nKHNfaW5zdGFuY2UtPmNvbXBvbmVudE5hbWUoKSArICJkYXRh IikudG9VdGY4KCksICJkYXRhIiwgc19pbnN0YW5jZS0+Y29tcG9uZW50TmFtZSgpKTsKKyAgICAg ICAgS0dsb2JhbDo6ZGlycygpLT5hZGRSZXNvdXJjZVR5cGUoUVN0cmluZyhzX2NvbXBvbmVudERh dGEtPmNvbXBvbmVudE5hbWUoKSArICJkYXRhIikudG9VdGY4KCksICJkYXRhIiwgc19jb21wb25l bnREYXRhLT5jb21wb25lbnROYW1lKCkpOwogCiAgICAgfQogCi0gICAgcmV0dXJuICpzX2luc3Rh bmNlOworICAgIHJldHVybiAqc19jb21wb25lbnREYXRhOwogfQogCiBjb25zdCBRU3RyaW5nIEtp c0ZhY3Rvcnk6OmNvbXBvbmVudE5hbWUoKQogewogICAgIHJldHVybiAia3JpdGEiOwogfQotCi0j aW5jbHVkZSAia2lzX2ZhY3RvcnkyLm1vYyIKZGlmZiAtLWdpdCBhL2tyaXRhL3VpL2tpc19mYWN0 b3J5Mi5oIGIva3JpdGEvdWkva2lzX2ZhY3RvcnkyLmgKaW5kZXggYzUxYjVjOC4uNjg3M2QxZSAx MDA2NDQKLS0tIGEva3JpdGEvdWkva2lzX2ZhY3RvcnkyLmgKKysrIGIva3JpdGEvdWkva2lzX2Zh Y3RvcnkyLmgKQEAgLTIzLDMwICsyMywyNCBAQAogCiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CiAK LSNpbmNsdWRlIDxrcGx1Z2luZmFjdG9yeS5oPgotCiAjaW5jbHVkZSA8a3JpdGFfZXhwb3J0Lmg+ CiAKLWNsYXNzIEtDb21wb25lbnREYXRhOwotY2xhc3MgS0Fib3V0RGF0YTsKKyNpbmNsdWRlIDxr Y29tcG9uZW50ZGF0YS5oPgorI2luY2x1ZGUgPGthYm91dGRhdGEuaD4KIAotY2xhc3MgS1JJVEFV SV9FWFBPUlQgS2lzRmFjdG9yeSA6IHB1YmxpYyBLUGx1Z2luRmFjdG9yeQorY2xhc3MgS1JJVEFV SV9FWFBPUlQgS2lzRmFjdG9yeQogewotICAgIFFfT0JKRUNUCiAKIHB1YmxpYzoKLQotICAgIEtp c0ZhY3RvcnkoUU9iamVjdCogcGFyZW50ID0gMCk7CisgICAgS2lzRmFjdG9yeSgpOwogICAgIH5L aXNGYWN0b3J5KCk7CiAKLSAgICB2aXJ0dWFsIFFPYmplY3QqIGNyZWF0ZShjb25zdCBjaGFyKiBp ZmFjZSwgUVdpZGdldCogcGFyZW50V2lkZ2V0LCBRT2JqZWN0ICpwYXJlbnQsIGNvbnN0IFFWYXJp YW50TGlzdCYgYXJncywgY29uc3QgUVN0cmluZyYga2V5d29yZCk7Ci0KICAgICBzdGF0aWMgS0Fi b3V0RGF0YSAqYWJvdXREYXRhKCk7CiAgICAgc3RhdGljIGNvbnN0IEtDb21wb25lbnREYXRhICZj b21wb25lbnREYXRhKCk7CiAgICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgY29tcG9uZW50TmFtZSgp OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBLQ29tcG9uZW50RGF0YSAqc19pbnN0YW5jZTsKKyAg ICBzdGF0aWMgS0NvbXBvbmVudERhdGEgKnNfY29tcG9uZW50RGF0YTsKICAgICBzdGF0aWMgS0Fi b3V0RGF0YSAqc19hYm91dERhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9rcml0YS91aS9xdGxvY2tl ZGZpbGUvUkVBRE1FLnR4dCBiL2tyaXRhL3VpL3F0bG9ja2VkZmlsZS9SRUFETUUudHh0Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmY2YyZmQKLS0tIC9kZXYvbnVsbAorKysg Yi9rcml0YS91aS9xdGxvY2tlZGZpbGUvUkVBRE1FLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlz IGlzIHRoZSBzcmMgZGlyZWN0b3J5IG9mIHRoZSAgUXRMb2NrZWRGaWxlCitzb2x1dGlvbiBpbnRl Z3JhdGVkIG92ZXIgZnJvbSBhZGRvbnMvbWFpbi91dGlscy9xdGxvY2tlZGZpbGUvc3JjIC4KKwor bmFtZXNwYWNlLnBhdGNoIHdhcyBhcHBsaWVkIHRvIGludHJvZHVjZSB0aGUgU2hhcmVkVG9vbHMg bmFtZXNwYWNlLgorCitJdCBpcyByZXF1aXJlZCBieSB0aGUgUXRTaW5nbGVBcHBsaWNhdGlvbiBz b2x1dGlvbi4KKworSGlzdG9yeToKKworMTYuMDUuMjAwOCBJbnRlZ3JhdGVkCmRpZmYgLS1naXQg YS9rcml0YS91aS9xdGxvY2tlZGZpbGUvcXRsb2NrZWRmaWxlLmNwcCBiL2tyaXRhL3VpL3F0bG9j a2VkZmlsZS9xdGxvY2tlZGZpbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmNiNjY2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9rcml0YS91aS9xdGxvY2tlZGZpbGUvcXRs b2NrZWRmaWxlLmNwcApAQCAtMCwwICsxLDE1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoq CisqKiBDb3B5cmlnaHQgKEMpIDIwMTQgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt aWVzKS4KKyoqIENvbnRhY3Q6IGh0dHA6Ly93d3cucXQtcHJvamVjdC5vcmcvbGVnYWwKKyoqCisq KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBRdCBDcmVhdG9yLgorKioKKyoqIENvbW1lcmNpYWwgTGlj ZW5zZSBVc2FnZQorKiogTGljZW5zZWVzIGhvbGRpbmcgdmFsaWQgY29tbWVyY2lhbCBRdCBsaWNl bnNlcyBtYXkgdXNlIHRoaXMgZmlsZSBpbgorKiogYWNjb3JkYW5jZSB3aXRoIHRoZSBjb21tZXJj aWFsIGxpY2Vuc2UgYWdyZWVtZW50IHByb3ZpZGVkIHdpdGggdGhlCisqKiBTb2Z0d2FyZSBvciwg YWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250YWluZWQgaW4K KyoqIGEgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIERpZ2lhLiAgRm9yIGxpY2Vu c2luZyB0ZXJtcyBhbmQKKyoqIGNvbmRpdGlvbnMgc2VlIGh0dHA6Ly93d3cucXQuaW8vbGljZW5z aW5nLiAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24KKyoqIHVzZSB0aGUgY29udGFjdCBmb3JtIGF0 IGh0dHA6Ly93d3cucXQuaW8vY29udGFjdC11cy4KKyoqCisqKiBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgVXNhZ2UKKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUg dXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKyoqIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyLjEgb3IgdmVyc2lvbiAzIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZQorKiogU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VO U0UuTEdQTHYyMSBhbmQKKyoqIExJQ0VOU0UuTEdQTHYzIGluY2x1ZGVkIGluIHRoZSBwYWNrYWdp bmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUKKyoqIGZvbGxvd2luZyBpbmZvcm1h dGlvbiB0byBlbnN1cmUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiog cmVxdWlyZW1lbnRzIHdpbGwgYmUgbWV0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xn cGwuaHRtbCBhbmQKKyoqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMv bGdwbC0yLjEuaHRtbC4KKyoqCisqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlv biwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKiogcmlnaHRzLiAgVGhlc2Ug cmlnaHRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIERpZ2lhIFF0IExHUEwgRXhjZXB0aW9uCisqKiB2 ZXJzaW9uIDEuMSwgaW5jbHVkZWQgaW4gdGhlIGZpbGUgTEdQTF9FWENFUFRJT04udHh0IGluIHRo aXMgcGFja2FnZS4KKyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAicXRsb2Nr ZWRmaWxlLmgiCisKKworCisvKiEKKyAgICBcY2xhc3MgUXRMb2NrZWRGaWxlCisKKyAgICBcYnJp ZWYgVGhlIFF0TG9ja2VkRmlsZSBjbGFzcyBleHRlbmRzIFFGaWxlIHdpdGggYWR2aXNvcnkgbG9j a2luZyBmdW5jdGlvbnMuCisKKyAgICBBIGZpbGUgbWF5IGJlIGxvY2tlZCBpbiByZWFkIG9yIHdy aXRlIG1vZGUuIE11bHRpcGxlIGluc3RhbmNlcyBvZgorICAgIFxlIFF0TG9ja2VkRmlsZSwgY3Jl YXRlZCBpbiBtdWx0aXBsZSBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgc2FtZQorICAgIG1hY2hp bmUsIG1heSBoYXZlIGEgZmlsZSBsb2NrZWQgaW4gcmVhZCBtb2RlLiBFeGFjdGx5IG9uZSBpbnN0 YW5jZQorICAgIG1heSBoYXZlIGl0IGxvY2tlZCBpbiB3cml0ZSBtb2RlLiBBIHJlYWQgYW5kIGEg d3JpdGUgbG9jayBjYW5ub3QKKyAgICBleGlzdCBzaW11bHRhbmVvdXNseSBvbiB0aGUgc2FtZSBm aWxlLgorCisgICAgVGhlIGZpbGUgbG9ja3MgYXJlIGFkdmlzb3J5LiBUaGlzIG1lYW5zIHRoYXQg bm90aGluZyBwcmV2ZW50cworICAgIGFub3RoZXIgcHJvY2VzcyBmcm9tIG1hbmlwdWxhdGluZyBh IGxvY2tlZCBmaWxlIHVzaW5nIFFGaWxlIG9yCisgICAgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zIG9m ZmVyZWQgYnkgdGhlIE9TLiBTZXJpYWxpemF0aW9uIGlzIG9ubHkKKyAgICBndWFyYW50ZWVkIGlm IGFsbCBwcm9jZXNzZXMgdGhhdCBhY2Nlc3MgdGhlIGZpbGUgdXNlCisgICAgUXRMb2NrZWRGaWxl LiBBbHNvLCB3aGlsZSBob2xkaW5nIGEgbG9jayBvbiBhIGZpbGUsIGEgcHJvY2VzcworICAgIG11 c3Qgbm90IG9wZW4gdGhlIHNhbWUgZmlsZSBhZ2FpbiAodGhyb3VnaCBhbnkgQVBJKSwgb3IgbG9j a3MKKyAgICBjYW4gYmUgdW5leHBlY3RlZGx5IGxvc3QuCisKKyAgICBUaGUgbG9jayBwcm92aWRl ZCBieSBhbiBpbnN0YW5jZSBvZiBcZSBRdExvY2tlZEZpbGUgaXMgcmVsZWFzZWQKKyAgICB3aGVu ZXZlciB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVzLiBUaGlzIGlzIHRydWUgZXZlbiB3aGVuIHRoZQor ICAgIHByb2dyYW0gY3Jhc2hlcyBhbmQgbm8gZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZC4KKyovCisK Ky8qISBcZW51bSBRdExvY2tlZEZpbGU6OkxvY2tNb2RlCisKKyAgICBUaGlzIGVudW0gZGVzY3Jp YmVzIHRoZSBhdmFpbGFibGUgbG9jayBtb2Rlcy4KKworICAgIFx2YWx1ZSBSZWFkTG9jayBBIHJl YWQgbG9jay4KKyAgICBcdmFsdWUgV3JpdGVMb2NrIEEgd3JpdGUgbG9jay4KKyAgICBcdmFsdWUg Tm9Mb2NrIE5laXRoZXIgYSByZWFkIGxvY2sgbm9yIGEgd3JpdGUgbG9jay4KKyovCisKKy8qIQor ICAgIENvbnN0cnVjdHMgYW4gdW5sb2NrZWQgXGUgUXRMb2NrZWRGaWxlIG9iamVjdC4gVGhpcyBj b25zdHJ1Y3RvciBiZWhhdmVzIGluIHRoZSBzYW1lIHdheQorICAgIGFzIFxlIFFGaWxlOjpRRmls ZSgpLgorCisgICAgXHNhIFFGaWxlOjpRRmlsZSgpCisqLworUXRMb2NrZWRGaWxlOjpRdExvY2tl ZEZpbGUoKQorICAgIDogUUZpbGUoKQoreworI2lmZGVmIFFfT1NfV0lOCisgICAgbV9zZW1hcGhv cmVfaG5kID0gMDsKKyAgICBtX211dGV4X2huZCA9IDA7CisjZW5kaWYKKyAgICBtX2xvY2tfbW9k ZSA9IE5vTG9jazsKK30KKworLyohCisgICAgQ29uc3RydWN0cyBhbiB1bmxvY2tlZCBRdExvY2tl ZEZpbGUgb2JqZWN0IHdpdGggZmlsZSBcYSBuYW1lLiBUaGlzIGNvbnN0cnVjdG9yIGJlaGF2ZXMg aW4KKyAgICB0aGUgc2FtZSB3YXkgYXMgXGUgUUZpbGU6OlFGaWxlKGNvbnN0IFFTdHJpbmcmKS4K KworICAgIFxzYSBRRmlsZTo6UUZpbGUoKQorKi8KK1F0TG9ja2VkRmlsZTo6UXRMb2NrZWRGaWxl KGNvbnN0IFFTdHJpbmcgJm5hbWUpCisgICAgOiBRRmlsZShuYW1lKQoreworI2lmZGVmIFFfT1Nf V0lOCisgICAgbV9zZW1hcGhvcmVfaG5kID0gMDsKKyAgICBtX211dGV4X2huZCA9IDA7CisjZW5k aWYKKyAgICBtX2xvY2tfbW9kZSA9IE5vTG9jazsKK30KKworLyohCisgICAgUmV0dXJucyBcZSB0 cnVlIGlmIHRoaXMgb2JqZWN0IGhhcyBhIGluIHJlYWQgb3Igd3JpdGUgbG9jazsKKyAgICBvdGhl cndpc2UgcmV0dXJucyBcZSBmYWxzZS4KKworICAgIFxzYSBsb2NrTW9kZSgpCisqLworYm9vbCBR dExvY2tlZEZpbGU6OmlzTG9ja2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2NrX21vZGUg IT0gTm9Mb2NrOworfQorCisvKiEKKyAgICBSZXR1cm5zIHRoZSB0eXBlIG9mIGxvY2sgY3VycmVu dGx5IGhlbGQgYnkgdGhpcyBvYmplY3QsIG9yIFxlIFF0TG9ja2VkRmlsZTo6Tm9Mb2NrLgorCisg ICAgXHNhIGlzTG9ja2VkKCkKKyovCitRdExvY2tlZEZpbGU6OkxvY2tNb2RlIFF0TG9ja2VkRmls ZTo6bG9ja01vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2xvY2tfbW9kZTsKK30KKworLyoh CisgICAgXGZuIGJvb2wgUXRMb2NrZWRGaWxlOjpsb2NrKExvY2tNb2RlIG1vZGUsIGJvb2wgYmxv Y2sgPSB0cnVlKQorCisgICAgT2J0YWlucyBhIGxvY2sgb2YgdHlwZSBcYSBtb2RlLgorCisgICAg SWYgXGEgYmxvY2sgaXMgdHJ1ZSwgdGhpcworICAgIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwg dGhlIGxvY2sgaXMgYWNxdWlyZWQuIElmIFxhIGJsb2NrIGlzCisgICAgZmFsc2UsIHRoaXMgZnVu Y3Rpb24gcmV0dXJucyBcZSBmYWxzZSBpbW1lZGlhdGVseSBpZiB0aGUgbG9jayBjYW5ub3QKKyAg ICBiZSBhY3F1aXJlZC4KKworICAgIElmIHRoaXMgb2JqZWN0IGFscmVhZHkgaGFzIGEgbG9jayBv ZiB0eXBlIFxhIG1vZGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBcZSB0cnVlIGltbWVkaWF0ZWx5 LiBJZiB0aGlzIG9iamVjdCBoYXMgYSBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBcYSBt b2RlLCB0aGUgbG9jaworICAgIGlzIGZpcnN0IHJlbGVhc2VkIGFuZCB0aGVuIGEgbmV3IGxvY2sg aXMgb2J0YWluZWQuCisKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgXGUgdHJ1ZSBpZiwgYWZ0 ZXIgaXQgZXhlY3V0ZXMsIHRoZSBmaWxlIGlzIGxvY2tlZCBieSB0aGlzIG9iamVjdCwKKyAgICBh bmQgXGUgZmFsc2Ugb3RoZXJ3aXNlLgorCisgICAgXHNhIHVubG9jaygpLCBpc0xvY2tlZCgpLCBs b2NrTW9kZSgpCisqLworCisvKiEKKyAgICBcZm4gYm9vbCBRdExvY2tlZEZpbGU6OnVubG9jaygp CisKKyAgICBSZWxlYXNlcyBhIGxvY2suCisKKyAgICBJZiB0aGUgb2JqZWN0IGhhcyBubyBsb2Nr LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkuCisKKyAgICBUaGlzIGZ1bmN0aW9u IHJldHVybnMgXGUgdHJ1ZSBpZiwgYWZ0ZXIgaXQgZXhlY3V0ZXMsIHRoZSBmaWxlIGlzIG5vdCBs b2NrZWQgYnkKKyAgICB0aGlzIG9iamVjdCwgYW5kIFxlIGZhbHNlIG90aGVyd2lzZS4KKworICAg IFxzYSBsb2NrKCksIGlzTG9ja2VkKCksIGxvY2tNb2RlKCkKKyovCisKKy8qIQorICAgIFxmbiBR dExvY2tlZEZpbGU6On5RdExvY2tlZEZpbGUoKQorCisgICAgRGVzdHJveXMgdGhlIFxlIFF0TG9j a2VkRmlsZSBvYmplY3QuIElmIGFueSBsb2NrcyB3ZXJlIGhlbGQsIHRoZXkgYXJlIHJlbGVhc2Vk LgorKi8KZGlmZiAtLWdpdCBhL2tyaXRhL3VpL3F0bG9ja2VkZmlsZS9xdGxvY2tlZGZpbGUuaCBi L2tyaXRhL3VpL3F0bG9ja2VkZmlsZS9xdGxvY2tlZGZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4xZGMzNDVhCi0tLSAvZGV2L251bGwKKysrIGIva3JpdGEvdWkvcXRs b2NrZWRmaWxlL3F0bG9ja2VkZmlsZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisqKgorKiogQ29weXJpZ2h0IChDKSAyMDE0IERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1 YnNpZGlhcnkoLWllcykuCisqKiBDb250YWN0OiBodHRwOi8vd3d3LnF0LXByb2plY3Qub3JnL2xl Z2FsCisqKgorKiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUXQgQ3JlYXRvci4KKyoqCisqKiBDb21t ZXJjaWFsIExpY2Vuc2UgVXNhZ2UKKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNp YWwgUXQgbGljZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKyoqIGFjY29yZGFuY2Ugd2l0aCB0 aGUgY29tbWVyY2lhbCBsaWNlbnNlIGFncmVlbWVudCBwcm92aWRlZCB3aXRoIHRoZQorKiogU29m dHdhcmUgb3IsIGFsdGVybmF0aXZlbHksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgY29u dGFpbmVkIGluCisqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4g IEZvciBsaWNlbnNpbmcgdGVybXMgYW5kCisqKiBjb25kaXRpb25zIHNlZSBodHRwOi8vd3d3LnF0 LmlvL2xpY2Vuc2luZy4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCisqKiB1c2UgdGhlIGNvbnRh Y3QgZm9ybSBhdCBodHRwOi8vd3d3LnF0LmlvL2NvbnRhY3QtdXMuCisqKgorKiogR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZp bGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyCisqKiBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIG9yIHZlcnNpb24gMyBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUKKyoqIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUg ZmlsZSBMSUNFTlNFLkxHUEx2MjEgYW5kCisqKiBMSUNFTlNFLkxHUEx2MyBpbmNsdWRlZCBpbiB0 aGUgcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlCisqKiBmb2xsb3dp bmcgaW5mb3JtYXRpb24gdG8gZW5zdXJlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyoqIHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldDogaHR0cHM6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy9sZ3BsLmh0bWwgYW5kCisqKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xk LWxpY2Vuc2VzL2xncGwtMi4xLmh0bWwuCisqKgorKiogSW4gYWRkaXRpb24sIGFzIGEgc3BlY2lh bCBleGNlcHRpb24sIERpZ2lhIGdpdmVzIHlvdSBjZXJ0YWluIGFkZGl0aW9uYWwKKyoqIHJpZ2h0 cy4gIFRoZXNlIHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2Vw dGlvbgorKiogdmVyc2lvbiAxLjEsIGluY2x1ZGVkIGluIHRoZSBmaWxlIExHUExfRVhDRVBUSU9O LnR4dCBpbiB0aGlzIHBhY2thZ2UuCisqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRl ZiBRVExPQ0tFREZJTEVfSAorI2RlZmluZSBRVExPQ0tFREZJTEVfSAorCisjaW5jbHVkZSA8UUZp bGU+CisKKyNpZiBkZWZpbmVkKFFfT1NfV0lOKQorIyAgaWYgIWRlZmluZWQoUVRfUVRMT0NLRURG SUxFX0VYUE9SVCkgJiYgIWRlZmluZWQoUVRfUVRMT0NLRURGSUxFX0lNUE9SVCkKKyMgICAgZGVm aW5lIFFUX1FUTE9DS0VERklMRV9FWFBPUlQKKyMgIGVsaWYgZGVmaW5lZChRVF9RVExPQ0tFREZJ TEVfSU1QT1JUKQorIyAgICBpZiBkZWZpbmVkKFFUX1FUTE9DS0VERklMRV9FWFBPUlQpCisjICAg ICAgdW5kZWYgUVRfUVRMT0NLRURGSUxFX0VYUE9SVAorIyAgICBlbmRpZgorIyAgICBkZWZpbmUg UVRfUVRMT0NLRURGSUxFX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGVsaWYgZGVm aW5lZChRVF9RVExPQ0tFREZJTEVfRVhQT1JUKQorIyAgICB1bmRlZiBRVF9RVExPQ0tFREZJTEVf RVhQT1JUCisjICAgIGRlZmluZSBRVF9RVExPQ0tFREZJTEVfRVhQT1JUIF9fZGVjbHNwZWMoZGxs ZXhwb3J0KQorIyAgZW5kaWYKKyNlbHNlCisjICBkZWZpbmUgUVRfUVRMT0NLRURGSUxFX0VYUE9S VAorI2VuZGlmCisKKworCitjbGFzcyBRVF9RVExPQ0tFREZJTEVfRVhQT1JUIFF0TG9ja2VkRmls ZSA6IHB1YmxpYyBRRmlsZQoreworcHVibGljOgorICAgIGVudW0gTG9ja01vZGUgeyBOb0xvY2sg PSAwLCBSZWFkTG9jaywgV3JpdGVMb2NrIH07CisKKyAgICBRdExvY2tlZEZpbGUoKTsKKyAgICBR dExvY2tlZEZpbGUoY29uc3QgUVN0cmluZyAmbmFtZSk7CisgICAgflF0TG9ja2VkRmlsZSgpOwor CisgICAgYm9vbCBsb2NrKExvY2tNb2RlIG1vZGUsIGJvb2wgYmxvY2sgPSB0cnVlKTsKKyAgICBi b29sIHVubG9jaygpOworICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdDsKKyAgICBMb2NrTW9kZSBs b2NrTW9kZSgpIGNvbnN0OworCitwcml2YXRlOgorI2lmZGVmIFFfT1NfV0lOCisgICAgUXQ6OkhB TkRMRSBtX3NlbWFwaG9yZV9obmQ7CisgICAgUXQ6OkhBTkRMRSBtX211dGV4X2huZDsKKyNlbmRp ZgorICAgIExvY2tNb2RlIG1fbG9ja19tb2RlOworfTsKKworI2VuZGlmIC8vIFFUTE9DS0VERklM RV9ICmRpZmYgLS1naXQgYS9rcml0YS91aS9xdGxvY2tlZGZpbGUvcXRsb2NrZWRmaWxlLnByaSBi L2tyaXRhL3VpL3F0bG9ja2VkZmlsZS9xdGxvY2tlZGZpbGUucHJpCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDFmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9rcml0YS91aS9x dGxvY2tlZGZpbGUvcXRsb2NrZWRmaWxlLnByaQpAQCAtMCwwICsxLDEzIEBACitJTkNMVURFUEFU SCArPSAkJFBXRAorREVQRU5EUEFUSCArPSAkJFBXRAorSEVBREVSUyArPSAkJFBXRC9xdGxvY2tl ZGZpbGUuaAorU09VUkNFUyArPSAkJFBXRC9xdGxvY2tlZGZpbGUuY3BwCisKK3VuaXg6U09VUkNF UyArPSAkJFBXRC9xdGxvY2tlZGZpbGVfdW5peC5jcHAKK3dpbjMyOlNPVVJDRVMgKz0gJCRQV0Qv cXRsb2NrZWRmaWxlX3dpbi5jcHAKKword2luMzI6Y29udGFpbnMoVEVNUExBVEUsIGxpYik6Y29u dGFpbnMoQ09ORklHLCBzaGFyZWQpIHsKKyAgICBERUZJTkVTICs9IFFUX1FUTE9DS0VERklMRV9F WFBPUlQ9X19kZWNsc3BlYyhkbGxleHBvcnQpCit9CisKKwpkaWZmIC0tZ2l0IGEva3JpdGEvdWkv cXRsb2NrZWRmaWxlL3F0bG9ja2VkZmlsZV91bml4LmNwcCBiL2tyaXRhL3VpL3F0bG9ja2VkZmls ZS9xdGxvY2tlZGZpbGVfdW5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMGQwYmE5NQotLS0gL2Rldi9udWxsCisrKyBiL2tyaXRhL3VpL3F0bG9ja2VkZmlsZS9xdGxv Y2tlZGZpbGVfdW5peC5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CisqKgorKiogQ29weXJpZ2h0IChDKSAyMDE0IERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlh cnkoLWllcykuCisqKiBDb250YWN0OiBodHRwOi8vd3d3LnF0LXByb2plY3Qub3JnL2xlZ2FsCisq KgorKiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUXQgQ3JlYXRvci4KKyoqCisqKiBDb21tZXJjaWFs IExpY2Vuc2UgVXNhZ2UKKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNpYWwgUXQg bGljZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKyoqIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29t bWVyY2lhbCBsaWNlbnNlIGFncmVlbWVudCBwcm92aWRlZCB3aXRoIHRoZQorKiogU29mdHdhcmUg b3IsIGFsdGVybmF0aXZlbHksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgY29udGFpbmVk IGluCisqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4gIEZvciBs aWNlbnNpbmcgdGVybXMgYW5kCisqKiBjb25kaXRpb25zIHNlZSBodHRwOi8vd3d3LnF0LmlvL2xp Y2Vuc2luZy4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCisqKiB1c2UgdGhlIGNvbnRhY3QgZm9y bSBhdCBodHRwOi8vd3d3LnF0LmlvL2NvbnRhY3QtdXMuCisqKgorKiogR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5 IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyCisqKiBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIG9yIHZlcnNpb24gMyBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUKKyoqIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBM SUNFTlNFLkxHUEx2MjEgYW5kCisqKiBMSUNFTlNFLkxHUEx2MyBpbmNsdWRlZCBpbiB0aGUgcGFj a2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlCisqKiBmb2xsb3dpbmcgaW5m b3JtYXRpb24gdG8gZW5zdXJlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyoqIHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy9sZ3BsLmh0bWwgYW5kCisqKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vu c2VzL2xncGwtMi4xLmh0bWwuCisqKgorKiogSW4gYWRkaXRpb24sIGFzIGEgc3BlY2lhbCBleGNl cHRpb24sIERpZ2lhIGdpdmVzIHlvdSBjZXJ0YWluIGFkZGl0aW9uYWwKKyoqIHJpZ2h0cy4gIFRo ZXNlIHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2VwdGlvbgor KiogdmVyc2lvbiAxLjEsIGluY2x1ZGVkIGluIHRoZSBmaWxlIExHUExfRVhDRVBUSU9OLnR4dCBp biB0aGlzIHBhY2thZ2UuCisqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInF0 bG9ja2VkZmlsZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4K KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisKKworYm9vbCBRdExv Y2tlZEZpbGU6OmxvY2soTG9ja01vZGUgbW9kZSwgYm9vbCBibG9jaykKK3sKKyAgICBpZiAoIWlz T3BlbigpKSB7CisgICAgICAgIHFXYXJuaW5nKCJRdExvY2tlZEZpbGU6OmxvY2soKTogZmlsZSBp cyBub3Qgb3BlbmVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo bW9kZSA9PSBOb0xvY2spCisgICAgICAgIHJldHVybiB1bmxvY2soKTsKKworICAgIGlmIChtb2Rl ID09IG1fbG9ja19tb2RlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChtX2xvY2tf bW9kZSAhPSBOb0xvY2spCisgICAgICAgIHVubG9jaygpOworCisgICAgc3RydWN0IGZsb2NrIGZs OworICAgIGZsLmxfd2hlbmNlID0gU0VFS19TRVQ7CisgICAgZmwubF9zdGFydCA9IDA7CisgICAg ZmwubF9sZW4gPSAwOworICAgIGZsLmxfdHlwZSA9IChtb2RlID09IFJlYWRMb2NrKSA/IEZfUkRM Q0sgOiBGX1dSTENLOworICAgIGludCBjbWQgPSBibG9jayA/IEZfU0VUTEtXIDogRl9TRVRMSzsK KyAgICBpbnQgcmV0ID0gZmNudGwoaGFuZGxlKCksIGNtZCwgJmZsKTsKKworICAgIGlmIChyZXQg PT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSICYmIGVycm5vICE9IEVBR0FJTikK KyAgICAgICAgICAgIHFXYXJuaW5nKCJRdExvY2tlZEZpbGU6OmxvY2soKTogZmNudGw6ICVzIiwg c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworCisgICAg bV9sb2NrX21vZGUgPSBtb2RlOworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgUXRMb2Nr ZWRGaWxlOjp1bmxvY2soKQoreworICAgIGlmICghaXNPcGVuKCkpIHsKKyAgICAgICAgcVdhcm5p bmcoIlF0TG9ja2VkRmlsZTo6dW5sb2NrKCk6IGZpbGUgaXMgbm90IG9wZW5lZCIpOworICAgICAg ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpc0xvY2tlZCgpKQorICAgICAgICBy ZXR1cm4gdHJ1ZTsKKworICAgIHN0cnVjdCBmbG9jayBmbDsKKyAgICBmbC5sX3doZW5jZSA9IFNF RUtfU0VUOworICAgIGZsLmxfc3RhcnQgPSAwOworICAgIGZsLmxfbGVuID0gMDsKKyAgICBmbC5s X3R5cGUgPSBGX1VOTENLOworICAgIGludCByZXQgPSBmY250bChoYW5kbGUoKSwgRl9TRVRMS1cs ICZmbCk7CisKKyAgICBpZiAocmV0ID09IC0xKSB7CisgICAgICAgIHFXYXJuaW5nKCJRdExvY2tl ZEZpbGU6OmxvY2soKTogZmNudGw6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0 dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fbG9ja19tb2RlID0gTm9Mb2NrOworICAgIHJlbW92 ZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitRdExvY2tlZEZpbGU6On5RdExvY2tlZEZpbGUo KQoreworICAgIGlmIChpc09wZW4oKSkKKyAgICAgICAgdW5sb2NrKCk7Cit9CmRpZmYgLS1naXQg YS9rcml0YS91aS9xdGxvY2tlZGZpbGUvcXRsb2NrZWRmaWxlX3dpbi5jcHAgYi9rcml0YS91aS9x dGxvY2tlZGZpbGUvcXRsb2NrZWRmaWxlX3dpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNGY1ZDhhMQotLS0gL2Rldi9udWxsCisrKyBiL2tyaXRhL3VpL3F0bG9ja2Vk ZmlsZS9xdGxvY2tlZGZpbGVfd2luLmNwcApAQCAtMCwwICsxLDE5NiBAQAorLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyoqCisqKiBDb3B5cmlnaHQgKEMpIDIwMTQgRGlnaWEgUGxjIGFuZC9vciBpdHMg c3Vic2lkaWFyeSgtaWVzKS4KKyoqIENvbnRhY3Q6IGh0dHA6Ly93d3cucXQtcHJvamVjdC5vcmcv bGVnYWwKKyoqCisqKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBRdCBDcmVhdG9yLgorKioKKyoqIENv bW1lcmNpYWwgTGljZW5zZSBVc2FnZQorKiogTGljZW5zZWVzIGhvbGRpbmcgdmFsaWQgY29tbWVy Y2lhbCBRdCBsaWNlbnNlcyBtYXkgdXNlIHRoaXMgZmlsZSBpbgorKiogYWNjb3JkYW5jZSB3aXRo IHRoZSBjb21tZXJjaWFsIGxpY2Vuc2UgYWdyZWVtZW50IHByb3ZpZGVkIHdpdGggdGhlCisqKiBT b2Z0d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBj b250YWluZWQgaW4KKyoqIGEgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIERpZ2lh LiAgRm9yIGxpY2Vuc2luZyB0ZXJtcyBhbmQKKyoqIGNvbmRpdGlvbnMgc2VlIGh0dHA6Ly93d3cu cXQuaW8vbGljZW5zaW5nLiAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24KKyoqIHVzZSB0aGUgY29u dGFjdCBmb3JtIGF0IGh0dHA6Ly93d3cucXQuaW8vY29udGFjdC11cy4KKyoqCisqKiBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKyoqIEFsdGVybmF0aXZlbHksIHRoaXMg ZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKyoqIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgb3IgdmVyc2lvbiAzIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZQorKiogU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRo ZSBmaWxlIExJQ0VOU0UuTEdQTHYyMSBhbmQKKyoqIExJQ0VOU0UuTEdQTHYzIGluY2x1ZGVkIGlu IHRoZSBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUKKyoqIGZvbGxv d2luZyBpbmZvcm1hdGlvbiB0byBlbnN1cmUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorKiogcmVxdWlyZW1lbnRzIHdpbGwgYmUgbWV0OiBodHRwczovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzL2xncGwuaHRtbCBhbmQKKyoqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9v bGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKyoqCisqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVj aWFsIGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKiogcmln aHRzLiAgVGhlc2UgcmlnaHRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIERpZ2lhIFF0IExHUEwgRXhj ZXB0aW9uCisqKiB2ZXJzaW9uIDEuMSwgaW5jbHVkZWQgaW4gdGhlIGZpbGUgTEdQTF9FWENFUFRJ T04udHh0IGluIHRoaXMgcGFja2FnZS4KKyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5j bHVkZSAicXRsb2NrZWRmaWxlLmgiCisKKyNpbmNsdWRlIDxxdF93aW5kb3dzLmg+CisjaW5jbHVk ZSA8UUZpbGVJbmZvPgorCisKKworI2RlZmluZSBTRU1BUEhPUkVfUFJFRklYICJRdExvY2tlZEZp bGUgc2VtYXBob3JlICIKKyNkZWZpbmUgTVVURVhfUFJFRklYICJRdExvY2tlZEZpbGUgbXV0ZXgg IgorI2RlZmluZSBTRU1BUEhPUkVfTUFYIDEwMAorCitzdGF0aWMgUVN0cmluZyBlcnJvckNvZGVU b1N0cmluZyhEV09SRCBlcnJvckNvZGUpCit7CisgICAgUVN0cmluZyByZXN1bHQ7CisgICAgY2hh ciAqZGF0YSA9IDA7CisgICAgRm9ybWF0TWVzc2FnZUEoRk9STUFUX01FU1NBR0VfQUxMT0NBVEVf QlVGRkVSIHwgRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0sCisgICAgICAgICAgICAgICAgICAg IDAsIGVycm9yQ29kZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgKGNoYXIqKSZkYXRhLCAwLCAw KTsKKyAgICByZXN1bHQgPSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGRhdGEpOworICAgIGlmIChk YXRhICE9IDApCisgICAgICAgIExvY2FsRnJlZShkYXRhKTsKKworICAgIGlmIChyZXN1bHQuZW5k c1dpdGgoUUxhdGluMUNoYXIoJ1xuJykpKQorICAgICAgICByZXN1bHQudHJ1bmNhdGUocmVzdWx0 Lmxlbmd0aCgpIC0gMSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFF0TG9ja2Vk RmlsZTo6bG9jayhMb2NrTW9kZSBtb2RlLCBib29sIGJsb2NrKQoreworICAgIGlmICghaXNPcGVu KCkpIHsKKyAgICAgICAgcVdhcm5pbmcoIlF0TG9ja2VkRmlsZTo6bG9jaygpOiBmaWxlIGlzIG5v dCBvcGVuZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChtb2Rl ID09IG1fbG9ja19tb2RlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChtX2xvY2tf bW9kZSAhPSAwKQorICAgICAgICB1bmxvY2soKTsKKworICAgIGlmIChtX3NlbWFwaG9yZV9obmQg PT0gMCkgeworICAgICAgICBRRmlsZUluZm8gZmkoKnRoaXMpOworICAgICAgICBRU3RyaW5nIHNl bV9uYW1lID0gUVN0cmluZzo6ZnJvbUxhdGluMShTRU1BUEhPUkVfUFJFRklYKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgKyBmaS5hYnNvbHV0ZUZpbGVQYXRoKCkudG9Mb3dlcigpOworCisg ICAgICAgIG1fc2VtYXBob3JlX2huZCA9IENyZWF0ZVNlbWFwaG9yZVcoMCwgU0VNQVBIT1JFX01B WCwgU0VNQVBIT1JFX01BWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoVENIQVIqKXNlbV9uYW1lLnV0ZjE2KCkpOworCisgICAgICAgIGlmIChtX3NlbWFwaG9y ZV9obmQgPT0gMCkgeworICAgICAgICAgICAgcVdhcm5pbmcoIlF0TG9ja2VkRmlsZTo6bG9jaygp OiBDcmVhdGVTZW1hcGhvcmU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZVRv U3RyaW5nKEdldExhc3RFcnJvcigpKS50b0xhdGluMSgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgZ290TXV0ZXgg PSBmYWxzZTsKKyAgICBpbnQgZGVjcmVtZW50OworICAgIGlmIChtb2RlID09IFJlYWRMb2NrKSB7 CisgICAgICAgIGRlY3JlbWVudCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVjcmVtZW50 ID0gU0VNQVBIT1JFX01BWDsKKyAgICAgICAgaWYgKG1fbXV0ZXhfaG5kID09IDApIHsKKyAgICAg ICAgICAgIFFGaWxlSW5mbyBmaSgqdGhpcyk7CisgICAgICAgICAgICBRU3RyaW5nIG11dF9uYW1l ID0gUVN0cmluZzo6ZnJvbUxhdGluMShNVVRFWF9QUkVGSVgpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKyBmaS5hYnNvbHV0ZUZpbGVQYXRoKCkudG9Mb3dlcigpOworCisgICAgICAg ICAgICBtX211dGV4X2huZCA9IENyZWF0ZU11dGV4VyhOVUxMLCBGQUxTRSwgKFRDSEFSKiltdXRf bmFtZS51dGYxNigpKTsKKworICAgICAgICAgICAgaWYgKG1fbXV0ZXhfaG5kID09IDApIHsKKyAg ICAgICAgICAgICAgICBxV2FybmluZygiUXRMb2NrZWRGaWxlOjpsb2NrKCk6IENyZWF0ZU11dGV4 OiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlVG9TdHJpbmcoR2V0TGFz dEVycm9yKCkpLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpOworICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBEV09SRCByZXMgPSBX YWl0Rm9yU2luZ2xlT2JqZWN0KG1fbXV0ZXhfaG5kLCBibG9jayA/IElORklOSVRFIDogMCk7Cisg ICAgICAgIGlmIChyZXMgPT0gV0FJVF9USU1FT1VUKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl OworICAgICAgICBpZiAocmVzID09IFdBSVRfRkFJTEVEKSB7CisgICAgICAgICAgICBxV2Fybmlu ZygiUXRMb2NrZWRGaWxlOjpsb2NrKCk6IFdhaXRGb3JTaW5nbGVPYmplY3QgKG11dGV4KTogJXMi LAorICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlVG9TdHJpbmcoR2V0TGFzdEVycm9yKCkp LnRvTGF0aW4xKCkuY29uc3REYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg ICAgICB9CisgICAgICAgIGdvdE11dGV4ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IGRlY3JlbWVudDsgKytpKSB7CisgICAgICAgIERXT1JEIHJlcyA9IFdhaXRGb3JT aW5nbGVPYmplY3QobV9zZW1hcGhvcmVfaG5kLCBibG9jayA/IElORklOSVRFIDogMCk7CisgICAg ICAgIGlmIChyZXMgPT0gV0FJVF9USU1FT1VUKSB7CisgICAgICAgICAgICBpZiAoaSkgeworICAg ICAgICAgICAgICAgIC8vIEEgZmFpbGVkIG5vbmJsb2NraW5nIHJ3IGxvY2tpbmcuIFVuZG8gY2hh bmdlcyB0byBzZW1hcGhvcmUuCisgICAgICAgICAgICAgICAgaWYgKFJlbGVhc2VTZW1hcGhvcmUo bV9zZW1hcGhvcmVfaG5kLCBpLCBOVUxMKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHFX YXJuaW5nKCJRdExvY2tlZEZpbGU6OnVubG9jaygpOiBSZWxlYXNlU2VtYXBob3JlOiAlcyIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZVRvU3RyaW5nKEdldExhc3RFcnJv cigpKS50b0xhdGluMSgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmFs bCB0aHJvdWdoCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKGdvdE11dGV4KQorICAgICAgICAgICAgICAgIFJlbGVhc2VNdXRleChtX211dGV4X2huZCk7 CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorICAgICAgICBpZiAocmVzICE9IFdBSVRf T0JKRUNUXzApIHsKKyAgICAgICAgICAgIGlmIChnb3RNdXRleCkKKyAgICAgICAgICAgICAgICBS ZWxlYXNlTXV0ZXgobV9tdXRleF9obmQpOworICAgICAgICAgICAgcVdhcm5pbmcoIlF0TG9ja2Vk RmlsZTo6bG9jaygpOiBXYWl0Rm9yU2luZ2xlT2JqZWN0IChzZW1hcGhvcmUpOiAlcyIsCisgICAg ICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGVUb1N0cmluZyhHZXRMYXN0RXJyb3IoKSkudG9M YXRpbjEoKS5jb25zdERhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg IH0KKyAgICB9CisKKyAgICBtX2xvY2tfbW9kZSA9IG1vZGU7CisgICAgaWYgKGdvdE11dGV4KQor ICAgICAgICBSZWxlYXNlTXV0ZXgobV9tdXRleF9obmQpOworICAgIHJldHVybiB0cnVlOworfQor Citib29sIFF0TG9ja2VkRmlsZTo6dW5sb2NrKCkKK3sKKyAgICBpZiAoIWlzT3BlbigpKSB7Cisg ICAgICAgIHFXYXJuaW5nKCJRdExvY2tlZEZpbGU6OnVubG9jaygpOiBmaWxlIGlzIG5vdCBvcGVu ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaXNMb2NrZWQo KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpbnQgaW5jcmVtZW50OworICAgIGlmICht X2xvY2tfbW9kZSA9PSBSZWFkTG9jaykKKyAgICAgICAgaW5jcmVtZW50ID0gMTsKKyAgICBlbHNl CisgICAgICAgIGluY3JlbWVudCA9IFNFTUFQSE9SRV9NQVg7CisKKyAgICBEV09SRCByZXQgPSBS ZWxlYXNlU2VtYXBob3JlKG1fc2VtYXBob3JlX2huZCwgaW5jcmVtZW50LCAwKTsKKyAgICBpZiAo cmV0ID09IDApIHsKKyAgICAgICAgcVdhcm5pbmcoIlF0TG9ja2VkRmlsZTo6dW5sb2NrKCk6IFJl bGVhc2VTZW1hcGhvcmU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlVG9TdHJp bmcoR2V0TGFzdEVycm9yKCkpLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpOworICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9sb2NrX21vZGUgPSBRdExvY2tlZEZpbGU6Ok5vTG9j azsKKyAgICByZW1vdmUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUXRMb2NrZWRGaWxlOjp+ UXRMb2NrZWRGaWxlKCkKK3sKKyAgICBpZiAoaXNPcGVuKCkpCisgICAgICAgIHVubG9jaygpOwor ICAgIGlmIChtX211dGV4X2huZCAhPSAwKSB7CisgICAgICAgIERXT1JEIHJldCA9IENsb3NlSGFu ZGxlKG1fbXV0ZXhfaG5kKTsKKyAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICBx V2FybmluZygiUXRMb2NrZWRGaWxlOjp+UXRMb2NrZWRGaWxlKCk6IENsb3NlSGFuZGxlIChtdXRl eCk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZVRvU3RyaW5nKEdldExh c3RFcnJvcigpKS50b0xhdGluMSgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAgfQorICAgICAgICBt X211dGV4X2huZCA9IDA7CisgICAgfQorICAgIGlmIChtX3NlbWFwaG9yZV9obmQgIT0gMCkgewor ICAgICAgICBEV09SRCByZXQgPSBDbG9zZUhhbmRsZShtX3NlbWFwaG9yZV9obmQpOworICAgICAg ICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgICAgIHFXYXJuaW5nKCJRdExvY2tlZEZpbGU6On5R dExvY2tlZEZpbGUoKTogQ2xvc2VIYW5kbGUgKHNlbWFwaG9yZSk6ICVzIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgIGVycm9yQ29kZVRvU3RyaW5nKEdldExhc3RFcnJvcigpKS50b0xhdGluMSgp LmNvbnN0RGF0YSgpKTsKKyAgICAgICAgfQorICAgICAgICBtX3NlbWFwaG9yZV9obmQgPSAwOwor ICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEva3JpdGEvdWkvcXRzaW5nbGVhcHBsaWNhdGlvbi9SRUFE TUUudHh0IGIva3JpdGEvdWkvcXRzaW5nbGVhcHBsaWNhdGlvbi9SRUFETUUudHh0Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MDlhMzMKLS0tIC9kZXYvbnVsbAorKysgYi9r cml0YS91aS9xdHNpbmdsZWFwcGxpY2F0aW9uL1JFQURNRS50eHQKQEAgLTAsMCArMSwxMCBAQAor VGhpcyBpcyB0aGUgc3JjIGRpcmVjdG9yeSBvZiB0aGUgUXRTaW5nbGVBcHBsaWNhdGlvbiBzb2x1 dGlvbgoraW50ZWdyYXRlZCBvdmVyIGZyb20gYWRkb25zL21haW4vdXRpbHMvcXRzaW5nbGVhcHBs aWNhdGlvbi9zcmMgLgorCituYW1lc3BhY2UucGF0Y2ggd2FzIGFwcGxpZWQgdG8gaW50cm9kdWNl IHRoZSBTaGFyZWRUb29scyBuYW1lc3BhY2UuCisKK0l0IGFkZGl0aW9uYWxseSByZXF1aXJlcyB0 aGUgUXRMb2NrZWRGaWxlIHNvbHV0aW9uLgorCitIaXN0b3J5OgorCisxNi4wNS4yMDA4IEludGVn cmF0ZWQKZGlmZiAtLWdpdCBhL2tyaXRhL3VpL3F0c2luZ2xlYXBwbGljYXRpb24vcXRsb2NhbHBl ZXIuY3BwIGIva3JpdGEvdWkvcXRzaW5nbGVhcHBsaWNhdGlvbi9xdGxvY2FscGVlci5jcHAKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEwODBkYwotLS0gL2Rldi9udWxsCisr KyBiL2tyaXRhL3VpL3F0c2luZ2xlYXBwbGljYXRpb24vcXRsb2NhbHBlZXIuY3BwCkBAIC0wLDAg KzEsMTgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioKKyoqIENvcHlyaWdodCAoQykgMjAx NCBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorKiogQ29udGFjdDogaHR0 cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy9sZWdhbAorKioKKyoqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IFF0IENyZWF0b3IuCisqKgorKiogQ29tbWVyY2lhbCBMaWNlbnNlIFVzYWdlCisqKiBMaWNlbnNl ZXMgaG9sZGluZyB2YWxpZCBjb21tZXJjaWFsIFF0IGxpY2Vuc2VzIG1heSB1c2UgdGhpcyBmaWxl IGluCisqKiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbW1lcmNpYWwgbGljZW5zZSBhZ3JlZW1lbnQg cHJvdmlkZWQgd2l0aCB0aGUKKyoqIFNvZnR3YXJlIG9yLCBhbHRlcm5hdGl2ZWx5LCBpbiBhY2Nv cmRhbmNlIHdpdGggdGhlIHRlcm1zIGNvbnRhaW5lZCBpbgorKiogYSB3cml0dGVuIGFncmVlbWVu dCBiZXR3ZWVuIHlvdSBhbmQgRGlnaWEuICBGb3IgbGljZW5zaW5nIHRlcm1zIGFuZAorKiogY29u ZGl0aW9ucyBzZWUgaHR0cDovL3d3dy5xdC5pby9saWNlbnNpbmcuICBGb3IgZnVydGhlciBpbmZv cm1hdGlvbgorKiogdXNlIHRoZSBjb250YWN0IGZvcm0gYXQgaHR0cDovL3d3dy5xdC5pby9jb250 YWN0LXVzLgorKioKKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQor KiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlcgorKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSBv ciB2ZXJzaW9uIDMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisqKiBTb2Z0d2FyZSBGb3VuZGF0 aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5MR1BMdjIxIGFuZAorKiogTElD RU5TRS5MR1BMdjMgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVh c2UgcmV2aWV3IHRoZQorKiogZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvIGVuc3VyZSB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqKiByZXF1aXJlbWVudHMgd2lsbCBiZSBt ZXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sIGFuZAorKiogaHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9sZ3BsLTIuMS5odG1sLgorKioKKyoq IEluIGFkZGl0aW9uLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBEaWdpYSBnaXZlcyB5b3UgY2Vy dGFpbiBhZGRpdGlvbmFsCisqKiByaWdodHMuICBUaGVzZSByaWdodHMgYXJlIGRlc2NyaWJlZCBp biB0aGUgRGlnaWEgUXQgTEdQTCBFeGNlcHRpb24KKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBp biB0aGUgZmlsZSBMR1BMX0VYQ0VQVElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKioKKyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJxdGxvY2FscGVlci5oIgorCisjaW5jbHVkZSA8 UUNvcmVBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRRGF0YVN0cmVhbT4KKyNpbmNsdWRlIDxRVGlt ZT4KKworI2lmIGRlZmluZWQoUV9PU19XSU4pCisjaW5jbHVkZSA8UUxpYnJhcnk+CisjaW5jbHVk ZSA8cXRfd2luZG93cy5oPgordHlwZWRlZiBCT09MKFdJTkFQSSpQUHJvY2Vzc0lkVG9TZXNzaW9u SWQpKERXT1JELERXT1JEKik7CitzdGF0aWMgUFByb2Nlc3NJZFRvU2Vzc2lvbklkIHBQcm9jZXNz SWRUb1Nlc3Npb25JZCA9IDA7CisjZW5kaWYKKworI2lmIGRlZmluZWQoUV9PU19VTklYKQorI2lu Y2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisKKworc3RhdGlj IGNvbnN0IGNoYXIgYWNrW10gPSAiYWNrIjsKKworUVN0cmluZyBRdExvY2FsUGVlcjo6YXBwU2Vz c2lvbklkKGNvbnN0IFFTdHJpbmcgJmFwcElkKQoreworICAgIFFCeXRlQXJyYXkgaWRjID0gYXBw SWQudG9VdGY4KCk7CisgICAgcXVpbnQxNiBpZE51bSA9IHFDaGVja3N1bShpZGMuY29uc3REYXRh KCksIGlkYy5zaXplKCkpOworICAgIC8vIyMjIGNvdWxkIGRvOiB0d28gMTZiaXQgY2hlY2tzdW1z IG92ZXIgc2VwYXJhdGUgaGFsdmVzIG9mIGlkLCBmb3IgYSAzMmJpdCByZXN1bHQgLSBpbXByb3Zl ZCB1bmlxZW5lc3MgcHJvYmFiaWxpdHkuIEV2ZXJ5LW90aGVyLWNoYXIgc3BsaXQgd291bGQgYmUg YmVzdC4KKworICAgIFFTdHJpbmcgcmVzID0gUUxhdGluMVN0cmluZygicXRzaW5nbGVhcHBsaWNh dGlvbi0iKQorICAgICAgICAgICAgICAgICArIFFTdHJpbmc6Om51bWJlcihpZE51bSwgMTYpOwor I2lmIGRlZmluZWQoUV9PU19XSU4pCisgICAgaWYgKCFwUHJvY2Vzc0lkVG9TZXNzaW9uSWQpIHsK KyAgICAgICAgUUxpYnJhcnkgbGliKFFMYXRpbjFTdHJpbmcoImtlcm5lbDMyIikpOworICAgICAg ICBwUHJvY2Vzc0lkVG9TZXNzaW9uSWQgPSAoUFByb2Nlc3NJZFRvU2Vzc2lvbklkKWxpYi5yZXNv bHZlKCJQcm9jZXNzSWRUb1Nlc3Npb25JZCIpOworICAgIH0KKyAgICBpZiAocFByb2Nlc3NJZFRv U2Vzc2lvbklkKSB7CisgICAgICAgIERXT1JEIHNlc3Npb25JZCA9IDA7CisgICAgICAgIHBQcm9j ZXNzSWRUb1Nlc3Npb25JZChHZXRDdXJyZW50UHJvY2Vzc0lkKCksICZzZXNzaW9uSWQpOworICAg ICAgICByZXMgKz0gUUxhdGluMUNoYXIoJy0nKSArIFFTdHJpbmc6Om51bWJlcihzZXNzaW9uSWQs IDE2KTsKKyAgICB9CisjZWxzZQorICAgIHJlcyArPSBRTGF0aW4xQ2hhcignLScpICsgUVN0cmlu Zzo6bnVtYmVyKDo6Z2V0dWlkKCksIDE2KTsKKyNlbmRpZgorICAgIHJldHVybiByZXM7Cit9CisK K1F0TG9jYWxQZWVyOjpRdExvY2FsUGVlcihRT2JqZWN0ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcg JmFwcElkKQorICAgIDogUU9iamVjdChwYXJlbnQpLCBpZChhcHBJZCkKK3sKKyAgICBpZiAoaWQu aXNFbXB0eSgpKQorICAgICAgICBpZCA9IFFDb3JlQXBwbGljYXRpb246OmFwcGxpY2F0aW9uRmls ZVBhdGgoKTsgIC8vIyMjIE9uIHdpbiwgY2hlY2sgaWYgdGhpcyByZXR1cm5zIC4uLi9hcmd2WzBd IHdpdGhvdXQgY2FzZWZvbGRpbmc7IC5cTVlBUFAgPT0gLlxteWFwcCBvbiBXaW4KKworICAgIHNv Y2tldE5hbWUgPSBhcHBTZXNzaW9uSWQoaWQpOworICAgIHNlcnZlciA9IG5ldyBRTG9jYWxTZXJ2 ZXIodGhpcyk7CisgICAgUVN0cmluZyBsb2NrTmFtZSA9IFFEaXIoUURpcjo6dGVtcFBhdGgoKSku YWJzb2x1dGVQYXRoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgKyBRTGF0aW4xQ2hhcignLycp ICsgc29ja2V0TmFtZQorICAgICAgICAgICAgICAgICAgICAgICArIFFMYXRpbjFTdHJpbmcoIi1s b2NrZmlsZSIpOworICAgIGxvY2tGaWxlLnNldEZpbGVOYW1lKGxvY2tOYW1lKTsKKyAgICBsb2Nr RmlsZS5vcGVuKFFJT0RldmljZTo6UmVhZFdyaXRlKTsKK30KKworYm9vbCBRdExvY2FsUGVlcjo6 aXNDbGllbnQoKQoreworICAgIGlmIChsb2NrRmlsZS5pc0xvY2tlZCgpKQorICAgICAgICByZXR1 cm4gZmFsc2U7CisKKyAgICBpZiAoIWxvY2tGaWxlLmxvY2soUXRMb2NrZWRGaWxlOjpXcml0ZUxv Y2ssIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIVFMb2NhbFNlcnZl cjo6cmVtb3ZlU2VydmVyKHNvY2tldE5hbWUpKQorICAgICAgICBxV2FybmluZygiUXRTaW5nbGVD b3JlQXBwbGljYXRpb246IGNvdWxkIG5vdCBjbGVhbnVwIHNvY2tldCIpOworICAgIGJvb2wgcmVz ID0gc2VydmVyLT5saXN0ZW4oc29ja2V0TmFtZSk7CisgICAgaWYgKCFyZXMpCisgICAgICAgIHFX YXJuaW5nKCJRdFNpbmdsZUNvcmVBcHBsaWNhdGlvbjogbGlzdGVuIG9uIGxvY2FsIHNvY2tldCBm YWlsZWQsICVzIiwgcVByaW50YWJsZShzZXJ2ZXItPmVycm9yU3RyaW5nKCkpKTsKKyAgICBRT2Jq ZWN0Ojpjb25uZWN0KHNlcnZlciwgU0lHTkFMKG5ld0Nvbm5lY3Rpb24oKSksIFNMT1QocmVjZWl2 ZUNvbm5lY3Rpb24oKSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBRdExvY2FsUGVl cjo6c2VuZE1lc3NhZ2UoY29uc3QgUUJ5dGVBcnJheSAmbWVzc2FnZSwgaW50IHRpbWVvdXQsIGJv b2wgYmxvY2spCit7CisgICAgaWYgKCFpc0NsaWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7 CisKKyAgICBRTG9jYWxTb2NrZXQgc29ja2V0OworICAgIGJvb2wgY29ubk9rID0gZmFsc2U7Cisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgLy8gVHJ5IHR3aWNlLCBp biBjYXNlIHRoZSBvdGhlciBpbnN0YW5jZSBpcyBqdXN0IHN0YXJ0aW5nIHVwCisgICAgICAgIHNv Y2tldC5jb25uZWN0VG9TZXJ2ZXIoc29ja2V0TmFtZSk7CisgICAgICAgIGNvbm5PayA9IHNvY2tl dC53YWl0Rm9yQ29ubmVjdGVkKHRpbWVvdXQvMik7CisgICAgICAgIGlmIChjb25uT2sgfHwgaSkK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpbnQgbXMgPSAyNTA7CisjaWYgZGVmaW5lZChR X09TX1dJTikKKyAgICAgICAgU2xlZXAoRFdPUkQobXMpKTsKKyNlbHNlCisgICAgICAgIHN0cnVj dCB0aW1lc3BlYyB0cyA9IHsgbXMgLyAxMDAwLCAobXMgJSAxMDAwKSAqIDEwMDAgKiAxMDAwIH07 CisgICAgICAgIG5hbm9zbGVlcCgmdHMsIE5VTEwpOworI2VuZGlmCisgICAgfQorICAgIGlmICgh Y29ubk9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBRQnl0ZUFycmF5IHVNc2cobWVz c2FnZSk7CisgICAgUURhdGFTdHJlYW0gZHMoJnNvY2tldCk7CisgICAgZHMud3JpdGVCeXRlcyh1 TXNnLmNvbnN0RGF0YSgpLCB1TXNnLnNpemUoKSk7CisgICAgYm9vbCByZXMgPSBzb2NrZXQud2Fp dEZvckJ5dGVzV3JpdHRlbih0aW1lb3V0KTsKKyAgICByZXMgJj0gc29ja2V0LndhaXRGb3JSZWFk eVJlYWQodGltZW91dCk7IC8vIHdhaXQgZm9yIGFjaworICAgIHJlcyAmPSAoc29ja2V0LnJlYWQo cXN0cmxlbihhY2spKSA9PSBhY2spOworICAgIGlmIChibG9jaykgLy8gYmxvY2sgdW50aWwgcGVl ciBkaXNjb25uZWN0cworICAgICAgICBzb2NrZXQud2FpdEZvckRpc2Nvbm5lY3RlZCgtMSk7Cisg ICAgcmV0dXJuIHJlczsKK30KKwordm9pZCBRdExvY2FsUGVlcjo6cmVjZWl2ZUNvbm5lY3Rpb24o KQoreworICAgIFFMb2NhbFNvY2tldCogc29ja2V0ID0gc2VydmVyLT5uZXh0UGVuZGluZ0Nvbm5l Y3Rpb24oKTsKKyAgICBpZiAoIXNvY2tldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2h5 IGRvZXNuJ3QgUXQgaGF2ZSBhIGJsb2NraW5nIHN0cmVhbSB0aGF0IHRha2VzIGNhcmUgb2YgdGhp cyBzaGFpdD8/PworICAgIHdoaWxlIChzb2NrZXQtPmJ5dGVzQXZhaWxhYmxlKCkgPCBzdGF0aWNf Y2FzdDxpbnQ+KHNpemVvZihxdWludDMyKSkpIHsKKyAgICAgICAgaWYgKCFzb2NrZXQtPmlzVmFs aWQoKSkgLy8gc3RhbGUgcmVxdWVzdAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzb2Nr ZXQtPndhaXRGb3JSZWFkeVJlYWQoMTAwMCk7CisgICAgfQorICAgIFFEYXRhU3RyZWFtIGRzKHNv Y2tldCk7CisgICAgUUJ5dGVBcnJheSB1TXNnOworICAgIHF1aW50MzIgcmVtYWluaW5nOworICAg IGRzID4+IHJlbWFpbmluZzsKKyAgICB1TXNnLnJlc2l6ZShyZW1haW5pbmcpOworICAgIGludCBn b3QgPSAwOworICAgIGNoYXIqIHVNc2dCdWYgPSB1TXNnLmRhdGEoKTsKKyAgICAvL3FEZWJ1Zygp IDw8ICJSQ1Y6IHJlbWFpbmluZyIgPDwgcmVtYWluaW5nOworICAgIGRvIHsKKyAgICAgICAgZ290 ID0gZHMucmVhZFJhd0RhdGEodU1zZ0J1ZiwgcmVtYWluaW5nKTsKKyAgICAgICAgcmVtYWluaW5n IC09IGdvdDsKKyAgICAgICAgdU1zZ0J1ZiArPSBnb3Q7CisgICAgICAgIC8vcURlYnVnKCkgPDwg IlJDVjogZ290IiA8PCBnb3QgPDwgInJlbWFpbmluZyIgPDwgcmVtYWluaW5nOworICAgIH0gd2hp bGUgKHJlbWFpbmluZyAmJiBnb3QgPj0gMCAmJiBzb2NrZXQtPndhaXRGb3JSZWFkeVJlYWQoMjAw MCkpOworICAgIC8vIyMjIGVycm9yIGNoZWNrOiBnb3Q8MAorICAgIGlmIChnb3QgPCAwKSB7Cisg ICAgICAgIHFXYXJuaW5nKCkgPDwgIlF0TG9jYWxQZWVyOiBNZXNzYWdlIHJlY2VwdGlvbiBmYWls ZWQiIDw8IHNvY2tldC0+ZXJyb3JTdHJpbmcoKTsKKyAgICAgICAgZGVsZXRlIHNvY2tldDsKKyAg ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyAjIyMgYXN5bmMgdGhpcworICAgIHNvY2tldC0+ d3JpdGUoYWNrLCBxc3RybGVuKGFjaykpOworICAgIHNvY2tldC0+d2FpdEZvckJ5dGVzV3JpdHRl bigxMDAwKTsKKyAgICBlbWl0IG1lc3NhZ2VSZWNlaXZlZCh1TXNnLCBzb2NrZXQpOyAvLyAjIyht aWdodCB0YWtlIGEgbG9uZyB0aW1lIHRvIHJldHVybikKK30KZGlmZiAtLWdpdCBhL2tyaXRhL3Vp L3F0c2luZ2xlYXBwbGljYXRpb24vcXRsb2NhbHBlZXIuaCBiL2tyaXRhL3VpL3F0c2luZ2xlYXBw bGljYXRpb24vcXRsb2NhbHBlZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li41YTQ4YWZjCi0tLSAvZGV2L251bGwKKysrIGIva3JpdGEvdWkvcXRzaW5nbGVhcHBsaWNhdGlv bi9xdGxvY2FscGVlci5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisq KgorKiogQ29weXJpZ2h0IChDKSAyMDE0IERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnko LWllcykuCisqKiBDb250YWN0OiBodHRwOi8vd3d3LnF0LXByb2plY3Qub3JnL2xlZ2FsCisqKgor KiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUXQgQ3JlYXRvci4KKyoqCisqKiBDb21tZXJjaWFsIExp Y2Vuc2UgVXNhZ2UKKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNpYWwgUXQgbGlj ZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKyoqIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29tbWVy Y2lhbCBsaWNlbnNlIGFncmVlbWVudCBwcm92aWRlZCB3aXRoIHRoZQorKiogU29mdHdhcmUgb3Is IGFsdGVybmF0aXZlbHksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgY29udGFpbmVkIGlu CisqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4gIEZvciBsaWNl bnNpbmcgdGVybXMgYW5kCisqKiBjb25kaXRpb25zIHNlZSBodHRwOi8vd3d3LnF0LmlvL2xpY2Vu c2luZy4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCisqKiB1c2UgdGhlIGNvbnRhY3QgZm9ybSBh dCBodHRwOi8vd3d3LnF0LmlvL2NvbnRhY3QtdXMuCisqKgorKiogR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIFVzYWdlCisqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJl IHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyCisqKiBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMi4xIG9yIHZlcnNpb24gMyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUKKyoqIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNF TlNFLkxHUEx2MjEgYW5kCisqKiBMSUNFTlNFLkxHUEx2MyBpbmNsdWRlZCBpbiB0aGUgcGFja2Fn aW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlCisqKiBmb2xsb3dpbmcgaW5mb3Jt YXRpb24gdG8gZW5zdXJlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyoq IHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9s Z3BsLmh0bWwgYW5kCisqKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2Vz L2xncGwtMi4xLmh0bWwuCisqKgorKiogSW4gYWRkaXRpb24sIGFzIGEgc3BlY2lhbCBleGNlcHRp b24sIERpZ2lhIGdpdmVzIHlvdSBjZXJ0YWluIGFkZGl0aW9uYWwKKyoqIHJpZ2h0cy4gIFRoZXNl IHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2VwdGlvbgorKiog dmVyc2lvbiAxLjEsIGluY2x1ZGVkIGluIHRoZSBmaWxlIExHUExfRVhDRVBUSU9OLnR4dCBpbiB0 aGlzIHBhY2thZ2UuCisqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPHF0bG9j a2VkZmlsZS5oPgorCisjaW5jbHVkZSA8UUxvY2FsU2VydmVyPgorI2luY2x1ZGUgPFFMb2NhbFNv Y2tldD4KKyNpbmNsdWRlIDxRRGlyPgorCisKKworY2xhc3MgUXRMb2NhbFBlZXIgOiBwdWJsaWMg UU9iamVjdAoreworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBRdExvY2Fs UGVlcihRT2JqZWN0ICpwYXJlbnQgPSAwLCBjb25zdCBRU3RyaW5nICZhcHBJZCA9IFFTdHJpbmco KSk7CisgICAgYm9vbCBpc0NsaWVudCgpOworICAgIGJvb2wgc2VuZE1lc3NhZ2UoY29uc3QgUUJ5 dGVBcnJheSAmbWVzc2FnZSwgaW50IHRpbWVvdXQsIGJvb2wgYmxvY2spOworICAgIFFTdHJpbmcg YXBwbGljYXRpb25JZCgpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIGlkOyB9CisgICAgc3RhdGlj IFFTdHJpbmcgYXBwU2Vzc2lvbklkKGNvbnN0IFFTdHJpbmcgJmFwcElkKTsKKworUV9TSUdOQUxT OgorICAgIHZvaWQgbWVzc2FnZVJlY2VpdmVkKGNvbnN0IFFCeXRlQXJyYXkgJm1lc3NhZ2UsIFFP YmplY3QgKnNvY2tldCk7CisKK3Byb3RlY3RlZCBRX1NMT1RTOgorICAgIHZvaWQgcmVjZWl2ZUNv bm5lY3Rpb24oKTsKKworcHJvdGVjdGVkOgorICAgIFFTdHJpbmcgaWQ7CisgICAgUVN0cmluZyBz b2NrZXROYW1lOworICAgIFFMb2NhbFNlcnZlciogc2VydmVyOworICAgIFF0TG9ja2VkRmlsZSBs b2NrRmlsZTsKK307CmRpZmYgLS1naXQgYS9rcml0YS91aS9xdHNpbmdsZWFwcGxpY2F0aW9uL3F0 c2luZ2xlYXBwbGljYXRpb24uY3BwIGIva3JpdGEvdWkvcXRzaW5nbGVhcHBsaWNhdGlvbi9xdHNp bmdsZWFwcGxpY2F0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45 M2I4Y2FjCi0tLSAvZGV2L251bGwKKysrIGIva3JpdGEvdWkvcXRzaW5nbGVhcHBsaWNhdGlvbi9x dHNpbmdsZWFwcGxpY2F0aW9uLmNwcApAQCAtMCwwICsxLDE5NSBAQAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyoqCisqKiBDb3B5cmlnaHQgKEMpIDIwMTQgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vi c2lkaWFyeSgtaWVzKS4KKyoqIENvbnRhY3Q6IGh0dHA6Ly93d3cucXQtcHJvamVjdC5vcmcvbGVn YWwKKyoqCisqKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBRdCBDcmVhdG9yLgorKioKKyoqIENvbW1l cmNpYWwgTGljZW5zZSBVc2FnZQorKiogTGljZW5zZWVzIGhvbGRpbmcgdmFsaWQgY29tbWVyY2lh bCBRdCBsaWNlbnNlcyBtYXkgdXNlIHRoaXMgZmlsZSBpbgorKiogYWNjb3JkYW5jZSB3aXRoIHRo ZSBjb21tZXJjaWFsIGxpY2Vuc2UgYWdyZWVtZW50IHByb3ZpZGVkIHdpdGggdGhlCisqKiBTb2Z0 d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250 YWluZWQgaW4KKyoqIGEgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIERpZ2lhLiAg Rm9yIGxpY2Vuc2luZyB0ZXJtcyBhbmQKKyoqIGNvbmRpdGlvbnMgc2VlIGh0dHA6Ly93d3cucXQu aW8vbGljZW5zaW5nLiAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24KKyoqIHVzZSB0aGUgY29udGFj dCBmb3JtIGF0IGh0dHA6Ly93d3cucXQuaW8vY29udGFjdC11cy4KKyoqCisqKiBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmls ZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKyoqIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgb3IgdmVyc2lvbiAzIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZQorKiogU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBm aWxlIExJQ0VOU0UuTEdQTHYyMSBhbmQKKyoqIExJQ0VOU0UuTEdQTHYzIGluY2x1ZGVkIGluIHRo ZSBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUKKyoqIGZvbGxvd2lu ZyBpbmZvcm1hdGlvbiB0byBlbnN1cmUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorKiogcmVxdWlyZW1lbnRzIHdpbGwgYmUgbWV0OiBodHRwczovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzL2xncGwuaHRtbCBhbmQKKyoqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQt bGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKyoqCisqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFs IGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKiogcmlnaHRz LiAgVGhlc2UgcmlnaHRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIERpZ2lhIFF0IExHUEwgRXhjZXB0 aW9uCisqKiB2ZXJzaW9uIDEuMSwgaW5jbHVkZWQgaW4gdGhlIGZpbGUgTEdQTF9FWENFUFRJT04u dHh0IGluIHRoaXMgcGFja2FnZS4KKyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVk ZSAicXRzaW5nbGVhcHBsaWNhdGlvbi5oIgorI2luY2x1ZGUgInF0bG9jYWxwZWVyLmgiCisKKyNp bmNsdWRlIDxxdGxvY2tlZGZpbGUuaD4KKworI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUZp bGVPcGVuRXZlbnQ+CisjaW5jbHVkZSA8UVNoYXJlZE1lbW9yeT4KKyNpbmNsdWRlIDxRV2lkZ2V0 PgorCitzdGF0aWMgY29uc3QgaW50IGluc3RhbmNlc1NpemUgPSAxMDI0OworCitzdGF0aWMgUVN0 cmluZyBpbnN0YW5jZXNMb2NrRmlsZW5hbWUoY29uc3QgUVN0cmluZyAmYXBwU2Vzc2lvbklkKQor eworICAgIGNvbnN0IFFDaGFyIHNsYXNoKFFMYXRpbjFDaGFyKCcvJykpOworICAgIFFTdHJpbmcg cmVzID0gUURpcjo6dGVtcFBhdGgoKTsKKyAgICBpZiAoIXJlcy5lbmRzV2l0aChzbGFzaCkpCisg ICAgICAgIHJlcyArPSBzbGFzaDsKKyAgICByZXR1cm4gcmVzICsgYXBwU2Vzc2lvbklkICsgUUxh dGluMVN0cmluZygiLWluc3RhbmNlcyIpOworfQorCitRdFNpbmdsZUFwcGxpY2F0aW9uOjpRdFNp bmdsZUFwcGxpY2F0aW9uKGNvbnN0IFFTdHJpbmcgJmFwcElkLCBpbnQgJmFyZ2MsIGNoYXIgKiph cmd2KQorICAgIDogUUFwcGxpY2F0aW9uKGFyZ2MsIGFyZ3YpLAorICAgICAgZmlyc3RQZWVyKC0x KSwKKyAgICAgIHBpZFBlZXIoMCkKK3sKKyAgICB0aGlzLT5hcHBJZCA9IGFwcElkOworCisgICAg Y29uc3QgUVN0cmluZyBhcHBTZXNzaW9uSWQgPSBRdExvY2FsUGVlcjo6YXBwU2Vzc2lvbklkKGFw cElkKTsKKworICAgIC8vIFRoaXMgc2hhcmVkIG1lbW9yeSBob2xkcyBhIHplcm8tdGVybWluYXRl ZCBhcnJheSBvZiBhY3RpdmUgKG9yIGNyYXNoZWQpIGluc3RhbmNlcworICAgIGluc3RhbmNlcyA9 IG5ldyBRU2hhcmVkTWVtb3J5KGFwcFNlc3Npb25JZCwgdGhpcyk7CisgICAgYWN0V2luID0gMDsK KyAgICBibG9jayA9IGZhbHNlOworCisgICAgLy8gRmlyc3QgaW5zdGFuY2UgY3JlYXRlcyB0aGUg c2hhcmVkIG1lbW9yeSwgbGF0ZXIgaW5zdGFuY2VzIGF0dGFjaCB0byBpdAorICAgIGNvbnN0IGJv b2wgY3JlYXRlZCA9IGluc3RhbmNlcy0+Y3JlYXRlKGluc3RhbmNlc1NpemUpOworICAgIGlmICgh Y3JlYXRlZCkgeworICAgICAgICBpZiAoIWluc3RhbmNlcy0+YXR0YWNoKCkpIHsKKyAgICAgICAg ICAgIHFXYXJuaW5nKCkgPDwgIkZhaWxlZCB0byBpbml0aWFsaXplIGluc3RhbmNlcyBzaGFyZWQg bWVtb3J5OiAiCisgICAgICAgICAgICAgICAgICAgICAgIDw8IGluc3RhbmNlcy0+ZXJyb3JTdHJp bmcoKTsKKyAgICAgICAgICAgIGRlbGV0ZSBpbnN0YW5jZXM7CisgICAgICAgICAgICBpbnN0YW5j ZXMgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g UXRMb2NrZWRGaWxlIGlzIHVzZWQgdG8gd29ya2Fyb3VuZCBRVEJVRy0xMDM2NAorICAgIFF0TG9j a2VkRmlsZSBsb2NrZmlsZShpbnN0YW5jZXNMb2NrRmlsZW5hbWUoYXBwU2Vzc2lvbklkKSk7CisK KyAgICBsb2NrZmlsZS5vcGVuKFF0TG9ja2VkRmlsZTo6UmVhZFdyaXRlKTsKKyAgICBsb2NrZmls ZS5sb2NrKFF0TG9ja2VkRmlsZTo6V3JpdGVMb2NrKTsKKyAgICBxaW50NjQgKnBpZHMgPSBzdGF0 aWNfY2FzdDxxaW50NjQgKj4oaW5zdGFuY2VzLT5kYXRhKCkpOworICAgIGlmICghY3JlYXRlZCkg eworICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSB0aGF0IGl0IHN0aWxsIHJ1bm5p bmcKKyAgICAgICAgLy8gVGhlIHdob2xlIGxpc3QgbmVlZHMgdG8gYmUgaXRlcmF0ZWQgaW4gb3Jk ZXIgdG8gYXBwZW5kIHRvIGl0CisgICAgICAgIGZvciAoOyAqcGlkczsgKytwaWRzKSB7CisgICAg ICAgICAgICBpZiAoZmlyc3RQZWVyID09IC0xICYmIGlzUnVubmluZygqcGlkcykpCisgICAgICAg ICAgICAgICAgZmlyc3RQZWVyID0gKnBpZHM7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gQWRk IGN1cnJlbnQgcGlkIHRvIGxpc3QgYW5kIHRlcm1pbmF0ZSBpdAorICAgICpwaWRzKysgPSBRQ29y ZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvblBpZCgpOworICAgICpwaWRzID0gMDsKKyAgICBwaWRQ ZWVyID0gbmV3IFF0TG9jYWxQZWVyKHRoaXMsIGFwcElkICsgUUxhdGluMUNoYXIoJy0nKSArCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nOjpudW1iZXIoUUNvcmVBcHBsaWNh dGlvbjo6YXBwbGljYXRpb25QaWQoKSkpOworICAgIGNvbm5lY3QocGlkUGVlciwgU0lHTkFMKG1l c3NhZ2VSZWNlaXZlZChRQnl0ZUFycmF5LFFPYmplY3QqKSksIFNJR05BTChtZXNzYWdlUmVjZWl2 ZWQoUUJ5dGVBcnJheSxRT2JqZWN0KikpKTsKKyAgICBwaWRQZWVyLT5pc0NsaWVudCgpOworICAg IGxvY2tmaWxlLnVubG9jaygpOworfQorCitRdFNpbmdsZUFwcGxpY2F0aW9uOjp+UXRTaW5nbGVB cHBsaWNhdGlvbigpCit7CisgICAgaWYgKCFpbnN0YW5jZXMpCisgICAgICAgIHJldHVybjsKKyAg ICBjb25zdCBxaW50NjQgYXBwUGlkID0gUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25QaWQo KTsKKyAgICBRdExvY2tlZEZpbGUgbG9ja2ZpbGUoaW5zdGFuY2VzTG9ja0ZpbGVuYW1lKFF0TG9j YWxQZWVyOjphcHBTZXNzaW9uSWQoYXBwSWQpKSk7CisgICAgbG9ja2ZpbGUub3BlbihRdExvY2tl ZEZpbGU6OlJlYWRXcml0ZSk7CisgICAgbG9ja2ZpbGUubG9jayhRdExvY2tlZEZpbGU6OldyaXRl TG9jayk7CisgICAgLy8gUmV3cml0ZSBhcnJheSwgcmVtb3ZpbmcgY3VycmVudCBwaWQgYW5kIHBy ZXZpb3VzbHkgY3Jhc2hlZCBvbmVzCisgICAgcWludDY0ICpwaWRzID0gc3RhdGljX2Nhc3Q8cWlu dDY0ICo+KGluc3RhbmNlcy0+ZGF0YSgpKTsKKyAgICBxaW50NjQgKm5ld3BpZHMgPSBwaWRzOwor ICAgIGZvciAoOyAqcGlkczsgKytwaWRzKSB7CisgICAgICAgIGlmICgqcGlkcyAhPSBhcHBQaWQg JiYgaXNSdW5uaW5nKCpwaWRzKSkKKyAgICAgICAgICAgICpuZXdwaWRzKysgPSAqcGlkczsKKyAg ICB9CisgICAgKm5ld3BpZHMgPSAwOworICAgIGxvY2tmaWxlLnVubG9jaygpOworfQorCitib29s IFF0U2luZ2xlQXBwbGljYXRpb246OmV2ZW50KFFFdmVudCAqZXZlbnQpCit7CisgICAgaWYgKGV2 ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpGaWxlT3BlbikgeworICAgICAgICBRRmlsZU9wZW5FdmVu dCAqZm9lID0gc3RhdGljX2Nhc3Q8UUZpbGVPcGVuRXZlbnQqPihldmVudCk7CisgICAgICAgIGVt aXQgZmlsZU9wZW5SZXF1ZXN0KGZvZS0+ZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg ICAgfQorICAgIHJldHVybiBRQXBwbGljYXRpb246OmV2ZW50KGV2ZW50KTsKK30KKworYm9vbCBR dFNpbmdsZUFwcGxpY2F0aW9uOjppc1J1bm5pbmcocWludDY0IHBpZCkKK3sKKyAgICBpZiAocGlk ID09IC0xKSB7CisgICAgICAgIHBpZCA9IGZpcnN0UGVlcjsKKyAgICAgICAgaWYgKHBpZCA9PSAt MSkgeworICAgICAgICAgICAgcURlYnVnKCkgPDwgImlzUnVubmluZyIgPDwgcGlkOworICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgUXRMb2NhbFBlZXIg cGVlcih0aGlzLCBhcHBJZCArIFFMYXRpbjFDaGFyKCctJykgKyBRU3RyaW5nOjpudW1iZXIocGlk LCAxMCkpOworCisgICAgcURlYnVnKCkgPDwgImlzIG5vdCB5ZXQgcnVubmluZyIgPDwgcGlkIDw8 IHBlZXIuaXNDbGllbnQoKTsKKworICAgIHJldHVybiBwZWVyLmlzQ2xpZW50KCk7Cit9CisKK2Jv b2wgUXRTaW5nbGVBcHBsaWNhdGlvbjo6c2VuZE1lc3NhZ2UoY29uc3QgUUJ5dGVBcnJheSAmbWVz c2FnZSwgaW50IHRpbWVvdXQsIHFpbnQ2NCBwaWQpCit7CisgICAgaWYgKHBpZCA9PSAtMSkgewor ICAgICAgICBwaWQgPSBmaXJzdFBlZXI7CisgICAgICAgIGlmIChwaWQgPT0gLTEpCisgICAgICAg ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgUXRMb2NhbFBlZXIgcGVlcih0aGlzLCBh cHBJZCArIFFMYXRpbjFDaGFyKCctJykgKyBRU3RyaW5nOjpudW1iZXIocGlkLCAxMCkpOworICAg IHJldHVybiBwZWVyLnNlbmRNZXNzYWdlKG1lc3NhZ2UsIHRpbWVvdXQsIGJsb2NrKTsKK30KKwor UVN0cmluZyBRdFNpbmdsZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvbklkKCkgY29uc3QKK3sKKyAg ICByZXR1cm4gYXBwSWQ7Cit9CisKK3ZvaWQgUXRTaW5nbGVBcHBsaWNhdGlvbjo6c2V0QmxvY2so Ym9vbCB2YWx1ZSkKK3sKKyAgICBibG9jayA9IHZhbHVlOworfQorCit2b2lkIFF0U2luZ2xlQXBw bGljYXRpb246OnNldEFjdGl2YXRpb25XaW5kb3coUVdpZGdldCAqYXcsIGJvb2wgYWN0aXZhdGVP bk1lc3NhZ2UpCit7CisgICAgYWN0V2luID0gYXc7CisgICAgaWYgKCFwaWRQZWVyKQorICAgICAg ICByZXR1cm47CisgICAgaWYgKGFjdGl2YXRlT25NZXNzYWdlKQorICAgICAgICBjb25uZWN0KHBp ZFBlZXIsIFNJR05BTChtZXNzYWdlUmVjZWl2ZWQoUUJ5dGVBcnJheSxRT2JqZWN0KikpLCB0aGlz LCBTTE9UKGFjdGl2YXRlV2luZG93KCkpKTsKKyAgICBlbHNlCisgICAgICAgIGRpc2Nvbm5lY3Qo cGlkUGVlciwgU0lHTkFMKG1lc3NhZ2VSZWNlaXZlZChRQnl0ZUFycmF5LFFPYmplY3QqKSksIHRo aXMsIFNMT1QoYWN0aXZhdGVXaW5kb3coKSkpOworfQorCisKK1FXaWRnZXQqIFF0U2luZ2xlQXBw bGljYXRpb246OmFjdGl2YXRpb25XaW5kb3coKSBjb25zdAoreworICAgIHJldHVybiBhY3RXaW47 Cit9CisKKwordm9pZCBRdFNpbmdsZUFwcGxpY2F0aW9uOjphY3RpdmF0ZVdpbmRvdygpCit7Cisg ICAgaWYgKGFjdFdpbikgeworICAgICAgICBhY3RXaW4tPnNldFdpbmRvd1N0YXRlKGFjdFdpbi0+ d2luZG93U3RhdGUoKSAmIH5RdDo6V2luZG93TWluaW1pemVkKTsKKyAgICAgICAgYWN0V2luLT5y YWlzZSgpOworICAgICAgICBhY3RXaW4tPmFjdGl2YXRlV2luZG93KCk7CisgICAgfQorfQpkaWZm IC0tZ2l0IGEva3JpdGEvdWkvcXRzaW5nbGVhcHBsaWNhdGlvbi9xdHNpbmdsZWFwcGxpY2F0aW9u LmggYi9rcml0YS91aS9xdHNpbmdsZWFwcGxpY2F0aW9uL3F0c2luZ2xlYXBwbGljYXRpb24uaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTU3NWNhCi0tLSAvZGV2L251bGwK KysrIGIva3JpdGEvdWkvcXRzaW5nbGVhcHBsaWNhdGlvbi9xdHNpbmdsZWFwcGxpY2F0aW9uLmgK QEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqCisqKiBDb3B5cmlnaHQg KEMpIDIwMTQgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyoqIENvbnRh Y3Q6IGh0dHA6Ly93d3cucXQtcHJvamVjdC5vcmcvbGVnYWwKKyoqCisqKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBRdCBDcmVhdG9yLgorKioKKyoqIENvbW1lcmNpYWwgTGljZW5zZSBVc2FnZQorKiog TGljZW5zZWVzIGhvbGRpbmcgdmFsaWQgY29tbWVyY2lhbCBRdCBsaWNlbnNlcyBtYXkgdXNlIHRo aXMgZmlsZSBpbgorKiogYWNjb3JkYW5jZSB3aXRoIHRoZSBjb21tZXJjaWFsIGxpY2Vuc2UgYWdy ZWVtZW50IHByb3ZpZGVkIHdpdGggdGhlCisqKiBTb2Z0d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwg aW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250YWluZWQgaW4KKyoqIGEgd3JpdHRlbiBh Z3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIERpZ2lhLiAgRm9yIGxpY2Vuc2luZyB0ZXJtcyBhbmQK KyoqIGNvbmRpdGlvbnMgc2VlIGh0dHA6Ly93d3cucXQuaW8vbGljZW5zaW5nLiAgRm9yIGZ1cnRo ZXIgaW5mb3JtYXRpb24KKyoqIHVzZSB0aGUgY29udGFjdCBmb3JtIGF0IGh0dHA6Ly93d3cucXQu aW8vY29udGFjdC11cy4KKyoqCisqKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug VXNhZ2UKKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyLjEgb3IgdmVyc2lvbiAzIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorKiogU29mdHdhcmUg Rm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuTEdQTHYyMSBhbmQK KyoqIExJQ0VOU0UuTEdQTHYzIGluY2x1ZGVkIGluIHRoZSBwYWNrYWdpbmcgb2YgdGhpcyBmaWxl LiAgUGxlYXNlIHJldmlldyB0aGUKKyoqIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0byBlbnN1cmUg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiogcmVxdWlyZW1lbnRzIHdp bGwgYmUgbWV0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCBhbmQKKyoq IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4K KyoqCisqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMg eW91IGNlcnRhaW4gYWRkaXRpb25hbAorKiogcmlnaHRzLiAgVGhlc2UgcmlnaHRzIGFyZSBkZXNj cmliZWQgaW4gdGhlIERpZ2lhIFF0IExHUEwgRXhjZXB0aW9uCisqKiB2ZXJzaW9uIDEuMSwgaW5j bHVkZWQgaW4gdGhlIGZpbGUgTEdQTF9FWENFUFRJT04udHh0IGluIHRoaXMgcGFja2FnZS4KKyoq CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgorCitRVF9G T1JXQVJEX0RFQ0xBUkVfQ0xBU1MoUVNoYXJlZE1lbW9yeSkKKworY2xhc3MgUXRMb2NhbFBlZXI7 CisKKyNpbmNsdWRlIDxrcml0YV9leHBvcnQuaD4KKworY2xhc3MgS1JJVEFVSV9FWFBPUlQgUXRT aW5nbGVBcHBsaWNhdGlvbiA6IHB1YmxpYyBRQXBwbGljYXRpb24KK3sKKyAgICBRX09CSkVDVAor CitwdWJsaWM6CisgICAgUXRTaW5nbGVBcHBsaWNhdGlvbihjb25zdCBRU3RyaW5nICZpZCwgaW50 ICZhcmdjLCBjaGFyICoqYXJndik7CisgICAgflF0U2luZ2xlQXBwbGljYXRpb24oKTsKKworICAg IGJvb2wgaXNSdW5uaW5nKHFpbnQ2NCBwaWQgPSAtMSk7CisKKyAgICB2b2lkIHNldEFjdGl2YXRp b25XaW5kb3coUVdpZGdldCogYXcsIGJvb2wgYWN0aXZhdGVPbk1lc3NhZ2UgPSB0cnVlKTsKKyAg ICBRV2lkZ2V0KiBhY3RpdmF0aW9uV2luZG93KCkgY29uc3Q7CisgICAgYm9vbCBldmVudChRRXZl bnQgKmV2ZW50KTsKKworICAgIFFTdHJpbmcgYXBwbGljYXRpb25JZCgpIGNvbnN0OworICAgIHZv aWQgc2V0QmxvY2soYm9vbCB2YWx1ZSk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIGJvb2wgc2Vu ZE1lc3NhZ2UoY29uc3QgUUJ5dGVBcnJheSAmbWVzc2FnZSwgaW50IHRpbWVvdXQgPSA1MDAwLCBx aW50NjQgcGlkID0gLTEpOworICAgIHZvaWQgYWN0aXZhdGVXaW5kb3coKTsKKworUV9TSUdOQUxT OgorICAgIHZvaWQgbWVzc2FnZVJlY2VpdmVkKGNvbnN0IFFCeXRlQXJyYXkgJm1lc3NhZ2UsIFFP YmplY3QgKnNvY2tldCk7CisgICAgdm9pZCBmaWxlT3BlblJlcXVlc3QoY29uc3QgUVN0cmluZyAm ZmlsZSk7CisKK3ByaXZhdGU6CisgICAgUVN0cmluZyBpbnN0YW5jZXNGaWxlTmFtZShjb25zdCBR U3RyaW5nICZhcHBJZCk7CisKKyAgICBxaW50NjQgZmlyc3RQZWVyOworICAgIFFTaGFyZWRNZW1v cnkgKmluc3RhbmNlczsKKyAgICBRdExvY2FsUGVlciAqcGlkUGVlcjsKKyAgICBRV2lkZ2V0ICph Y3RXaW47CisgICAgUVN0cmluZyBhcHBJZDsKKyAgICBib29sIGJsb2NrOworfTsKZGlmZiAtLWdp dCBhL2tyaXRhL3VpL3F0c2luZ2xlYXBwbGljYXRpb24vcXRzaW5nbGVhcHBsaWNhdGlvbi5wcmkg Yi9rcml0YS91aS9xdHNpbmdsZWFwcGxpY2F0aW9uL3F0c2luZ2xlYXBwbGljYXRpb24ucHJpCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZGM0YjIKLS0tIC9kZXYvbnVsbAor KysgYi9rcml0YS91aS9xdHNpbmdsZWFwcGxpY2F0aW9uL3F0c2luZ2xlYXBwbGljYXRpb24ucHJp CkBAIC0wLDAgKzEsMTQgQEAKK0lOQ0xVREVQQVRICSs9ICQkUFdECitERVBFTkRQQVRIICAgICAg Kz0gJCRQV0QKK0hFQURFUlMJCSs9ICQkUFdEL3F0c2luZ2xlYXBwbGljYXRpb24uaCAkJFBXRC9x dGxvY2FscGVlci5oCitTT1VSQ0VTCQkrPSAkJFBXRC9xdHNpbmdsZWFwcGxpY2F0aW9uLmNwcCAk JFBXRC9xdGxvY2FscGVlci5jcHAKKworUVQgKj0gbmV0d29yayB3aWRnZXRzCisKK2dvdHF0bG9j a2VkZmlsZSA9ICQkZmluZChIRUFERVJTLCAuKnF0bG9ja2VkZmlsZS5oKQoraXNFbXB0eShnb3Rx dGxvY2tlZGZpbGUpOmluY2x1ZGUoLi4vLi4vcXRsb2NrZWRmaWxlL3NyYy9xdGxvY2tlZGZpbGUu cHJpKQorCisKK3dpbjMyOmNvbnRhaW5zKFRFTVBMQVRFLCBsaWIpOmNvbnRhaW5zKENPTkZJRywg c2hhcmVkKSB7CisgICAgREVGSU5FUyArPSBRVF9RVFNJTkdMRUFQUExJQ0FUSU9OX0VYUE9SVD1f X2RlY2xzcGVjKGRsbGV4cG9ydCkKK30KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KS3JpdGEgbWFpbGluZyBsaXN0CmtpbWFnZXNob3BAa2RlLm9yZwpodHRw czovL21haWwua2RlLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2tpbWFnZXNob3AK