Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nbCzz-0001N4-P6 for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Apr 2022 03:03:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nbCzx-0002Mt-Jm for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Apr 2022 03:03:21 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nbCzx-0002Mk-5B for pgsql-hackers@lists.postgresql.org; Mon, 04 Apr 2022 03:03:21 +0000 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nbCzp-0000yp-HC for pgsql-hackers@postgresql.org; Mon, 04 Apr 2022 03:03:20 +0000 Received: by mail-pj1-x102c.google.com with SMTP id l4-20020a17090a49c400b001c6840df4a3so7814687pjm.0 for ; Sun, 03 Apr 2022 20:03:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20210112.gappssmtp.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=nxLDO/1DME2h1WxPqdZ/JL48aUR0XSkv3gRYmFljyJA=; b=ZYnw8ojW7up0/yLRZf2qEnsc2ar2ufYYrlPPpEpmHXA13NkizCLDaiXuW3wXVS+6qj 3xFzVzYIsx2uXFU2IWNQBKO0HxKxrG0+XL2aBkp1GRgr8Qb+Ci10bvbE2Tl+l+fETCwx kdEZ/puKj7SBAsy8wo3lWq/OxvPghPy4RZ//DsI4JYa9wItDZZXYR5Pw2aGYw97Eyige b2AJHRgSuy/gMonQQTwlkr+M23r0QlJYqLWBF5TkGWoptDnBq3j5MHPW9CXzgNmZbIL4 j8fV0GNRAh3M8eqDMtqqxVGwcIw+QJh7VGw/eOQmkR00Zbc90SQ3fXsF+SScunIJvldT iLRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=nxLDO/1DME2h1WxPqdZ/JL48aUR0XSkv3gRYmFljyJA=; b=HTjj4aT3iNpORXcdQ98h7eJoclbv90pPv3huPs47yp4PqVBjO8Gu8nipuof0BjtxGm 9mGUgd1L2L/bita+JXlkzLYhYJfVfVfWvJhtOuB1XAoh5i6AanywLtgV3dunIVQteJ6A 8eEvghicgaXoZ4zvLghP3fQ9ipn4rwConYiKtCUsenryovC0YDiSgy0b1/fLLAxEDsip oXxAPJwmsrV4vrKJAZreOIT3fZq+1Olv7afFuUJWdMDQ8JcZ2da+m8C+/jYKAtVnGA9f wRrV4hhUCSRN8i5HFqvnulqJhT/RsgTKNdFsBnGf3jXO8EQBLdAjYeVTwyva8YHwvhbO gorQ== X-Gm-Message-State: AOAM532DdGA9A+Niky6kl05mfX0PZ7V9TxsL8h4wkIinOlKp6qKwlybv sXMyerzHoBVsFbvu2v20oZkuPQ== X-Google-Smtp-Source: ABdhPJzeTUXXVb5sCJEe7NtW6SEZx09XnuQRX3dgLXWSv4ehr/x6hmlV5HX4ILA3UwHvneHJxNVF7Q== X-Received: by 2002:a17:902:da89:b0:154:5d8e:9d40 with SMTP id j9-20020a170902da8900b001545d8e9d40mr20924100plx.71.1649041391093; Sun, 03 Apr 2022 20:03:11 -0700 (PDT) Received: from jdavis.lan (c-73-231-146-4.hsd1.ca.comcast.net. [73.231.146.4]) by smtp.gmail.com with ESMTPSA id z16-20020aa78890000000b004fad8469f88sm10500009pfe.38.2022.04.03.20.03.08 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 03 Apr 2022 20:03:09 -0700 (PDT) Message-ID: <1ae76bc9910df2fc495173b9bf7ed31223721efe.camel@j-davis.com> Subject: Re: Extensible Rmgr for Table AMs From: Jeff Davis To: Andres Freund Cc: Julien Rouhaud , Robert Haas , "pgsql-hackers@postgresql.org" , Amit Kapila , Tom Lane , Simon Riggs Date: Sun, 03 Apr 2022 20:03:08 -0700 In-Reply-To: <20220328180045.nz3nuy5ea2xpxuax@alap3.anarazel.de> References: <721eeefbd24c55015739ea75c0a233345e13e0b5.camel@j-davis.com> <20220201043938.r5s35loehsi27saj@jrouhaud> <20220201124550.gnhpw7iytc4da5tq@jrouhaud> <20220203053418.lj5lzsp7yf2mvspw@jrouhaud> <20220204144801.wuwcansdzz3w2nn3@jrouhaud> <20220204145658.qtcmbsdawvn3lg3b@jrouhaud> <211518ee10e5c37014d3a11d744c1aadc43e9f2c.camel@j-davis.com> <20220328180045.nz3nuy5ea2xpxuax@alap3.anarazel.de> Content-Type: multipart/mixed; boundary="=-Sd/gSFmrJzRk8mEW59V+" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-Sd/gSFmrJzRk8mEW59V+ Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Mon, 2022-03-28 at 11:00 -0700, Andres Freund wrote: > > +/* > > + * Start up all resource managers. > > + */ > > +void > > +StartupResourceManagers() > > (void) Fixed. > Random idea: Might be worth emitting the id->name mapping just after > a redo > location is determined, to make it easier to debug things. Not quite sure I understood this idea, do you mean dump all rmgrs and the IDs when performing recovery? > > +RmgrData * > > +GetRmgr(RmgrId rmid) > > +{ > > + return RmgrTable[rmid]; > > +} > > Given this is so simple, why incur the cost of a function call? > Rather than > continuing to expose RmgrTable and move GetRmgr() into the header, as > a static > inline? Made it static inline. > Shouldn't this continue to enforce RM_MAX_ID as well? Done. > Personally I'd rather name it ResourceManagersStartup() or > RmgrStartup(). Done. > Like here. It's obviously not as performance critical as replay. But > it's > still a shame to add 3 calls to GetRmgr, that each then need to > dereference > RmgrTable. The compiler won't be able to optimize any of that away. Changed to only call it once and save it in a variable for each call site where it makes sense. > So we can't filter by rmgr id for non-builtin rmgr's? That sucks. > Maybe add a > custom: syntax? Or generally allow numerical identifiers in > addition to the > names? Good idea. I changed it to allow "custom###" to mean the custom rmgr with ID ### (3 digits). I still may change it to go back to two RmgrTables (one for builtin and one for custom) to remove the lingering performance doubts. Other than that, and some cleanup, this is pretty close to the version I intend to commit. Regards, Jeff Davis --=-Sd/gSFmrJzRk8mEW59V+ Content-Disposition: attachment; filename="v6-0001-Extensible-rmgr.patch" Content-Type: text/x-patch; name="v6-0001-Extensible-rmgr.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAwMTQwMjdiYzk4Mjg5NmU3ZTFiNmZhZmU0YjYyMmVkNWZhNDVhMDhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBT YXQsIDYgTm92IDIwMjEgMTM6MDE6MzggLTA3MDAKU3ViamVjdDogW1BBVENIXSBFeHRlbnNpYmxl IHJtZ3IuCgpBbGxvdyBleHRlbnNpb25zIHRvIHNwZWNpZnkgYSBuZXcgY3VzdG9tIHJtZ3IsIHdo aWNoIGFsbG93cwpzcGVjaWFsaXplZCBXQUwuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZCBieSBh IGN1c3RvbSBUYWJsZSBBY2Nlc3MKTWV0aG9kLCB3aGljaCB3b3VsZCBub3Qgb3RoZXJ3aXNlIGJl IGFibGUgdG8gb2ZmZXIgbG9naWNhbApkZWNvZGluZy9yZXBsaWNhdGlvbi4gSXQgbWF5IGFsc28g YmUgdXNlZCBieSBuZXcgSW5kZXggQWNjZXNzIE1ldGhvZHMuCgpQcmlvciB0byB0aGlzIGNvbW1p dCwgb25seSBHZW5lcmljIFdBTCB3YXMgYXZhaWxhYmxlLCB3aGljaCBvZmZlcnMKc3VwcG9ydCBm b3IgcmVjb3ZlcnkgYW5kIHBoeXNpY2FsIHJlcGxpY2F0aW9uIGJ1dCBub3QgbG9naWNhbApyZXBs aWNhdGlvbi4KClJldmlld2VkLWJ5OiBKdWxpZW4gUm91aGF1ZCwgQW5kcmVzIEZyZXVuZApEaXNj dXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2VkMWZiMmUyMmQxNWQzNTYzYWUwZWI2MTBmN2I2 MWJiMTU5OTljMGEuY2FtZWwlNDBqLWRhdmlzLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3JtZ3IuYyAgICAgICAgIHwgODAgKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWFkZXIuYyAgIHwgIDIgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIHwgMzMgKysrKy0tLS0tLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgfCAgOCArLS0KIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjLmMgICAgICAgICAgICAgIHwgMTAgKystCiBzcmMvYmluL3BnX3Jld2luZC9w YXJzZXhsb2cuYyAgICAgICAgICAgICB8IDExICsrLS0KIHNyYy9iaW4vcGdfd2FsZHVtcC9wZ193 YWxkdW1wLmMgICAgICAgICAgIHwgNjUgKysrKysrKysrKysrKy0tLS0tCiBzcmMvYmluL3BnX3dh bGR1bXAvcm1ncmRlc2MuYyAgICAgICAgICAgICB8IDYwICsrKysrKysrKysrKysrKystCiBzcmMv YmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuaCAgICAgICAgICAgICB8ICAyICstCiBzcmMvaW5jbHVk ZS9hY2Nlc3Mvcm1nci5oICAgICAgICAgICAgICAgICB8IDE1ICsrKystCiBzcmMvaW5jbHVkZS9h Y2Nlc3MveGxvZ19pbnRlcm5hbC5oICAgICAgICB8IDExICsrKy0KIDExIGZpbGVzIGNoYW5nZWQs IDIzOSBpbnNlcnRpb25zKCspLCA1OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9y bWdyLmMKaW5kZXggZjg4NDdkNWFlYmYuLjUwNGQwYTViNWFjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vcm1nci5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5k c194bG9nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21t YW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtMzIsOCArMzMsODMgQEAKIAogLyogbXVz dCBiZSBrZXB0IGluIHN5bmMgd2l0aCBSbWdyRGF0YSBkZWZpbml0aW9uIGluIHhsb2dfaW50ZXJu YWwuaCAqLwogI2RlZmluZSBQR19STUdSKHN5bW5hbWUsbmFtZSxyZWRvLGRlc2MsaWRlbnRpZnks c3RhcnR1cCxjbGVhbnVwLG1hc2ssZGVjb2RlKSBcCi0JeyBuYW1lLCByZWRvLCBkZXNjLCBpZGVu dGlmeSwgc3RhcnR1cCwgY2xlYW51cCwgbWFzaywgZGVjb2RlIH0sCisJJihzdHJ1Y3QgUm1nckRh dGEpeyBuYW1lLCByZWRvLCBkZXNjLCBpZGVudGlmeSwgc3RhcnR1cCwgY2xlYW51cCwgbWFzaywg ZGVjb2RlIH0sCiAKLWNvbnN0IFJtZ3JEYXRhIFJtZ3JUYWJsZVtSTV9NQVhfSUQgKyAxXSA9IHsK K1JtZ3JEYXRhICpSbWdyVGFibGVbUk1fTUFYX0lEICsgMV0gPSB7CiAjaW5jbHVkZSAiYWNjZXNz L3JtZ3JsaXN0LmgiCiB9OworCisvKgorICogU3RhcnQgdXAgYWxsIHJlc291cmNlIG1hbmFnZXJz LgorICovCit2b2lkCitSbWdyU3RhcnR1cCh2b2lkKQoreworCWZvciAoaW50IGkgPSAwOyBpIDwg Uk1fTUFYX0lEOyBpKyspCisJeworCQlpZiAoUm1nclRhYmxlW2ldID09IE5VTEwpCisJCQljb250 aW51ZTsKKworCQlpZiAoUm1nclRhYmxlW2ldLT5ybV9zdGFydHVwICE9IE5VTEwpCisJCQlSbWdy VGFibGVbaV0tPnJtX3N0YXJ0dXAoKTsKKwl9Cit9CisKKy8qCisgKiBDbGVhbiB1cCBhbGwgcmVz b3VyY2UgbWFuYWdlcnMuCisgKi8KK3ZvaWQKK1JtZ3JDbGVhbnVwKHZvaWQpCit7CisJZm9yIChp bnQgaSA9IDA7IGkgPCBSTV9NQVhfSUQ7IGkrKykKKwl7CisJCWlmIChSbWdyVGFibGVbaV0gPT0g TlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChSbWdyVGFibGVbaV0tPnJtX2NsZWFudXAgIT0g TlVMTCkKKwkJCVJtZ3JUYWJsZVtpXS0+cm1fY2xlYW51cCgpOworCX0KK30KKworLyoKKyAqIFJl Z2lzdGVyIGEgbmV3IGN1c3RvbSBybWdyLgorICoKKyAqIFJlZmVyIHRvIGh0dHBzOi8vd2lraS5w b3N0Z3Jlc3FsLm9yZy93aWtpL0V4dGVuc2libGVSbWdyIHRvIHJlc2VydmUgYQorICogdW5pcXVl IFJtZ3JJZCBmb3IgeW91ciBleHRlbnNpb24sIHRvIGF2b2lkIGNvbmZsaWN0cy4gRHVyaW5nIGRl dmVsb3BtZW50LAorICogdXNlIFJNX0VYUEVSSU1FTlRBTF9JRC4KKyAqLwordm9pZAorUmVnaXN0 ZXJDdXN0b21SbWdyKFJtZ3JJZCBybWlkLCBSbWdyRGF0YSAqcm1ncikKK3sKKwlpZiAocm1pZCA8 IFJNX01JTl9DVVNUT01fSUQpCisJCWVyZXBvcnQoUEFOSUMsIGVycm1zZygiY3VzdG9tIHJtZ3Ig aWQgJWQgaXMgb3V0IG9mIHJhbmdlIiwgcm1pZCkpOworCisJaWYgKCFwcm9jZXNzX3NoYXJlZF9w cmVsb2FkX2xpYnJhcmllc19pbl9wcm9ncmVzcykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy bXNnKCJjdXN0b20gcm1nciBtdXN0IGJlIHJlZ2lzdGVyZWQgd2hpbGUgaW5pdGlhbGl6aW5nIG1v ZHVsZXMgaW4gc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzIikpKTsKKworCWlmIChSbWdyVGFibGVb cm1pZF0gIT0gTlVMTCkKKwkJZXJlcG9ydChQQU5JQywKKwkJCQkoZXJybXNnKCJjdXN0b20gcm1n ciBJRCAlZCBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBuYW1lIFwiJXNcIiIsCisJCQkJCQlybWlk LCBSbWdyVGFibGVbcm1pZF0tPnJtX25hbWUpKSk7CisKKwkvKiBjaGVjayBmb3IgZXhpc3Rpbmcg cm1nciB3aXRoIHRoZSBzYW1lIG5hbWUgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8PSBSTV9NQVhf SUQ7IGkrKykKKwl7CisJCWNvbnN0IFJtZ3JEYXRhICpleGlzdGluZ19ybWdyID0gUm1nclRhYmxl W2ldOworCisJCWlmIChleGlzdGluZ19ybWdyID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlp ZiAoIXN0cmNtcChleGlzdGluZ19ybWdyLT5ybV9uYW1lLCBybWdyLT5ybV9uYW1lKSkKKwkJCWVy ZXBvcnQoUEFOSUMsCisJCQkJCShlcnJtc2coImN1c3RvbSBybWdyIFwiJXNcIiBoYXMgdGhlIHNh bWUgbmFtZSBhcyBidWlsdGluIHJtZ3IiLAorCQkJCQkJCWV4aXN0aW5nX3JtZ3ItPnJtX25hbWUp KSk7CisJfQorCisJLyogcmVnaXN0ZXIgaXQgKi8KKwlSbWdyVGFibGVbcm1pZF0gPSBybWdyOwor CWVyZXBvcnQoTE9HLAorCQkJKGVycm1zZygicmVnaXN0ZXJlZCBjdXN0b20gcm1nciBcIiVzXCIg d2l0aCBJRCAlZCIsCisJCQkJCXJtZ3ItPnJtX25hbWUsIHJtaWQpKSk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVhZGVyLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ncmVhZGVyLmMKaW5kZXggZTQzN2M0Mjk5MjAuLjEwMTdlOTEzZTUx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVhZGVyLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlYWRlci5jCkBAIC0xMTAyLDcgKzEx MDIsNyBAQCBWYWxpZFhMb2dSZWNvcmRIZWFkZXIoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwgWExv Z1JlY1B0ciBSZWNQdHIsCiAJCQkJCQkJICAodWludDMyKSBTaXplT2ZYTG9nUmVjb3JkLCByZWNv cmQtPnhsX3RvdF9sZW4pOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCWlmIChyZWNvcmQtPnhsX3Jt aWQgPiBSTV9NQVhfSUQpCisJaWYgKCFSTV9JU19WQUxJRChyZWNvcmQtPnhsX3JtaWQpKQogCXsK IAkJcmVwb3J0X2ludmFsaWRfcmVjb3JkKHN0YXRlLAogCQkJCQkJCSAgImludmFsaWQgcmVzb3Vy Y2UgbWFuYWdlciBJRCAldSBhdCAlWC8lWCIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2dyZWNvdmVyeS5jCmluZGV4IDhkMjM5NWRhZTI1Li42YzY2MWZhNmUyNyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTE1MzEsNyArMTUzMSw2IEBAIFNo dXRkb3duV2FsUmVjb3Zlcnkodm9pZCkKIHZvaWQKIFBlcmZvcm1XYWxSZWNvdmVyeSh2b2lkKQog ewotCWludAkJCXJtaWQ7CiAJWExvZ1JlY29yZCAqcmVjb3JkOwogCWJvb2wJCXJlYWNoZWRSZWNv dmVyeVRhcmdldCA9IGZhbHNlOwogCVRpbWVMaW5lSUQJcmVwbGF5VExJOwpAQCAtMTYwNCwxMiAr MTYwMyw3IEBAIFBlcmZvcm1XYWxSZWNvdmVyeSh2b2lkKQogCiAJCUluUmVkbyA9IHRydWU7CiAK LQkJLyogSW5pdGlhbGl6ZSByZXNvdXJjZSBtYW5hZ2VycyAqLwotCQlmb3IgKHJtaWQgPSAwOyBy bWlkIDw9IFJNX01BWF9JRDsgcm1pZCsrKQotCQl7Ci0JCQlpZiAoUm1nclRhYmxlW3JtaWRdLnJt X3N0YXJ0dXAgIT0gTlVMTCkKLQkJCQlSbWdyVGFibGVbcm1pZF0ucm1fc3RhcnR1cCgpOwotCQl9 CisJCVJtZ3JTdGFydHVwKCk7CiAKIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygicmVkbyBz dGFydHMgYXQgJVgvJVgiLApAQCAtMTc0NiwxMiArMTc0MCw3IEBAIFBlcmZvcm1XYWxSZWNvdmVy eSh2b2lkKQogCQkJfQogCQl9CiAKLQkJLyogQWxsb3cgcmVzb3VyY2UgbWFuYWdlcnMgdG8gZG8g YW55IHJlcXVpcmVkIGNsZWFudXAuICovCi0JCWZvciAocm1pZCA9IDA7IHJtaWQgPD0gUk1fTUFY X0lEOyBybWlkKyspCi0JCXsKLQkJCWlmIChSbWdyVGFibGVbcm1pZF0ucm1fY2xlYW51cCAhPSBO VUxMKQotCQkJCVJtZ3JUYWJsZVtybWlkXS5ybV9jbGVhbnVwKCk7Ci0JCX0KKwkJUm1nckNsZWFu dXAoKTsKIAogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJyZWRvIGRvbmUgYXQgJVgvJVgg c3lzdGVtIHVzYWdlOiAlcyIsCkBAIC0xODcxLDcgKzE4NjAsNyBAQCBBcHBseVdhbFJlY29yZChY TG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNvcmQgKnJlY29yZCwgVGltZUxpbmVJ RCAqcmVwbAogCQl4bG9ncmVjb3ZlcnlfcmVkbyh4bG9ncmVhZGVyLCAqcmVwbGF5VExJKTsKIAog CS8qIE5vdyBhcHBseSB0aGUgV0FMIHJlY29yZCBpdHNlbGYgKi8KLQlSbWdyVGFibGVbcmVjb3Jk LT54bF9ybWlkXS5ybV9yZWRvKHhsb2dyZWFkZXIpOworCUdldFJtZ3IocmVjb3JkLT54bF9ybWlk KS0+cm1fcmVkbyh4bG9ncmVhZGVyKTsKIAogCS8qCiAJICogQWZ0ZXIgcmVkbywgY2hlY2sgd2hl dGhlciB0aGUgYmFja3VwIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgV0FMCkBAIC0yMTAxLDIw ICsyMDkwLDIwIEBAIHJtX3JlZG9fZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogdm9pZAogeGxv Z19vdXRkZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIHsKLQlS bWdySWQJCXJtaWQgPSBYTG9nUmVjR2V0Um1pZChyZWNvcmQpOworCVJtZ3JEYXRhICAgKnJtZ3Ig PSBHZXRSbWdyKFhMb2dSZWNHZXRSbWlkKHJlY29yZCkpOwogCXVpbnQ4CQlpbmZvID0gWExvZ1Jl Y0dldEluZm8ocmVjb3JkKTsKIAljb25zdCBjaGFyICppZDsKIAotCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCBSbWdyVGFibGVbcm1pZF0ucm1fbmFtZSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsIHJtZ3ItPnJtX25hbWUpOwogCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJy8n KTsKIAotCWlkID0gUm1nclRhYmxlW3JtaWRdLnJtX2lkZW50aWZ5KGluZm8pOworCWlkID0gcm1n ci0+cm1faWRlbnRpZnkoaW5mbyk7CiAJaWYgKGlkID09IE5VTEwpCiAJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiVU5LTk9XTiAoJVgpOiAiLCBpbmZvICYgflhMUl9JTkZPX01BU0spOwogCWVsc2UK IAkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlczogIiwgaWQpOwogCi0JUm1nclRhYmxlW3JtaWRd LnJtX2Rlc2MoYnVmLCByZWNvcmQpOworCXJtZ3ItPnJtX2Rlc2MoYnVmLCByZWNvcmQpOwogfQog CiAjaWZkZWYgV0FMX0RFQlVHCkBAIC0yMjYzLDcgKzIyNTIsNyBAQCBnZXRSZWNvcmRUaW1lc3Rh bXAoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQsIFRpbWVzdGFtcFR6ICpyZWNvcmRYdGltZSkKIHN0 YXRpYyB2b2lkCiB2ZXJpZnlCYWNrdXBQYWdlQ29uc2lzdGVuY3koWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQpCiB7Ci0JUm1ncklkCQlybWlkID0gWExvZ1JlY0dldFJtaWQocmVjb3JkKTsKKwlSbWdy RGF0YSAgICpybWdyID0gR2V0Um1ncihYTG9nUmVjR2V0Um1pZChyZWNvcmQpKTsKIAlSZWxGaWxl Tm9kZSBybm9kZTsKIAlGb3JrTnVtYmVyCWZvcmtudW07CiAJQmxvY2tOdW1iZXIgYmxrbm87CkBA IC0yMzQzLDEwICsyMzMyLDEwIEBAIHZlcmlmeUJhY2t1cFBhZ2VDb25zaXN0ZW5jeShYTG9nUmVh ZGVyU3RhdGUgKnJlY29yZCkKIAkJICogSWYgbWFza2luZyBmdW5jdGlvbiBpcyBkZWZpbmVkLCBt YXNrIGJvdGggdGhlIHByaW1hcnkgYW5kIHJlcGxheQogCQkgKiBpbWFnZXMKIAkJICovCi0JCWlm IChSbWdyVGFibGVbcm1pZF0ucm1fbWFzayAhPSBOVUxMKQorCQlpZiAocm1nci0+cm1fbWFzayAh PSBOVUxMKQogCQl7Ci0JCQlSbWdyVGFibGVbcm1pZF0ucm1fbWFzayhyZXBsYXlfaW1hZ2VfbWFz a2VkLCBibGtubyk7Ci0JCQlSbWdyVGFibGVbcm1pZF0ucm1fbWFzayhwcmltYXJ5X2ltYWdlX21h c2tlZCwgYmxrbm8pOworCQkJcm1nci0+cm1fbWFzayhyZXBsYXlfaW1hZ2VfbWFza2VkLCBibGtu byk7CisJCQlybWdyLT5ybV9tYXNrKHByaW1hcnlfaW1hZ2VfbWFza2VkLCBibGtubyk7CiAJCX0K IAogCQkvKiBUaW1lIHRvIGNvbXBhcmUgdGhlIHByaW1hcnkgYW5kIHJlcGxheSBpbWFnZXMuICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCA3N2JjN2FlYTdh MC4uM2JkZWRhNmI2YTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUu YwpAQCAtOTQsNyArOTQsNyBAQCBMb2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlYWRlclN0YXRlICpyZWNvcgogewogCVhMb2dSZWNv cmRCdWZmZXIgYnVmOwogCVRyYW5zYWN0aW9uSWQgdHhpZDsKLQlSbWdySWQgcm1pZDsKKwlSbWdy RGF0YSAqcm1ncjsKIAogCWJ1Zi5vcmlncHRyID0gY3R4LT5yZWFkZXItPlJlYWRSZWNQdHI7CiAJ YnVmLmVuZHB0ciA9IGN0eC0+cmVhZGVyLT5FbmRSZWNQdHI7CkBAIC0xMTUsMTAgKzExNSwxMCBA QCBMb2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgWExvZ1JlYWRlclN0YXRlICpyZWNvcgogCQkJCQkJCQkgYnVmLm9yaWdwdHIpOwogCX0KIAot CXJtaWQgPSBYTG9nUmVjR2V0Um1pZChyZWNvcmQpOworCXJtZ3IgPSBHZXRSbWdyKFhMb2dSZWNH ZXRSbWlkKHJlY29yZCkpOwogCi0JaWYgKFJtZ3JUYWJsZVtybWlkXS5ybV9kZWNvZGUgIT0gTlVM TCkKLQkJUm1nclRhYmxlW3JtaWRdLnJtX2RlY29kZShjdHgsICZidWYpOworCWlmIChybWdyLT5y bV9kZWNvZGUgIT0gTlVMTCkKKwkJcm1nci0+cm1fZGVjb2RlKGN0eCwgJmJ1Zik7CiAJZWxzZQog CXsKIAkJLyoganVzdCBkZWFsIHdpdGggeGlkLCBhbmQgZG9uZSAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMK aW5kZXggOWU4YWIxNDIwZDkuLmQzZTdkYmMzYmY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTEx Nzc1LDggKzExNzc1LDExIEBAIGNoZWNrX3dhbF9jb25zaXN0ZW5jeV9jaGVja2luZyhjaGFyICoq bmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiAJCWlmIChwZ19zdHJjYXNl Y21wKHRvaywgImFsbCIpID09IDApCiAJCXsKIAkJCWZvciAocm1pZCA9IDA7IHJtaWQgPD0gUk1f TUFYX0lEOyBybWlkKyspCi0JCQkJaWYgKFJtZ3JUYWJsZVtybWlkXS5ybV9tYXNrICE9IE5VTEwp CisJCQl7CisJCQkJUm1nckRhdGEgKnJtZ3IgPSBHZXRSbWdyKHJtaWQpOworCQkJCWlmIChybWdy ICE9IE5VTEwgJiYgcm1nci0+cm1fbWFzayAhPSBOVUxMKQogCQkJCQluZXd3YWxjb25zaXN0ZW5j eVtybWlkXSA9IHRydWU7CisJCQl9CiAJCQlmb3VuZCA9IHRydWU7CiAJCX0KIAkJZWxzZQpAQCAt MTE3ODcsOCArMTE3OTAsOSBAQCBjaGVja193YWxfY29uc2lzdGVuY3lfY2hlY2tpbmcoY2hhciAq Km5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogCQkJICovCiAJCQlmb3Ig KHJtaWQgPSAwOyBybWlkIDw9IFJNX01BWF9JRDsgcm1pZCsrKQogCQkJewotCQkJCWlmIChwZ19z dHJjYXNlY21wKHRvaywgUm1nclRhYmxlW3JtaWRdLnJtX25hbWUpID09IDAgJiYKLQkJCQkJUm1n clRhYmxlW3JtaWRdLnJtX21hc2sgIT0gTlVMTCkKKwkJCQlSbWdyRGF0YSAqcm1nciA9IEdldFJt Z3Iocm1pZCk7CisJCQkJaWYgKHJtZ3IgIT0gTlVMTCAmJiBybWdyLT5ybV9tYXNrICE9IE5VTEwg JiYKKwkJCQkJcGdfc3RyY2FzZWNtcCh0b2ssIHJtZ3ItPnJtX25hbWUpID09IDApCiAJCQkJewog CQkJCQluZXd3YWxjb25zaXN0ZW5jeVtybWlkXSA9IHRydWU7CiAJCQkJCWZvdW5kID0gdHJ1ZTsK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmV3aW5kL3BhcnNleGxvZy5jIGIvc3JjL2Jpbi9wZ19y ZXdpbmQvcGFyc2V4bG9nLmMKaW5kZXggNDk5NjZlN2I3ZmQuLmRmYTgzNmQxNTYxIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX3Jld2luZC9wYXJzZXhsb2cuYworKysgYi9zcmMvYmluL3BnX3Jld2lu ZC9wYXJzZXhsb2cuYwpAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1ZGUgInBnX3Jld2luZC5oIgog CiAvKgotICogUm1nck5hbWVzIGlzIGFuIGFycmF5IG9mIHJlc291cmNlIG1hbmFnZXIgbmFtZXMs IHRvIG1ha2UgZXJyb3IgbWVzc2FnZXMKLSAqIGEgYml0IG5pY2VyLgorICogUm1nck5hbWVzIGlz IGFuIGFycmF5IG9mIHRoZSBidWlsdC1pbiByZXNvdXJjZSBtYW5hZ2VyIG5hbWVzLCB0byBtYWtl IGVycm9yCisgKiBtZXNzYWdlcyBhIGJpdCBuaWNlci4KICAqLwogI2RlZmluZSBQR19STUdSKHN5 bW5hbWUsbmFtZSxyZWRvLGRlc2MsaWRlbnRpZnksc3RhcnR1cCxjbGVhbnVwLG1hc2ssZGVjb2Rl KSBcCiAgIG5hbWUsCkBAIC0zNSw2ICszNSw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpSbWdyTmFt ZXNbUk1fTUFYX0lEICsgMV0gPSB7CiAjaW5jbHVkZSAiYWNjZXNzL3JtZ3JsaXN0LmgiCiB9Owog CisjZGVmaW5lIFJtZ3JOYW1lKHJtaWQpICgoKHJtaWQpIDw9IFJNX01BWF9CVUlMVElOX0lEKSA/ IFwKKwkJCQkJCVJtZ3JOYW1lc1tybWlkXSA6ICJjdXN0b20iKQorCiBzdGF0aWMgdm9pZCBleHRy YWN0UGFnZUluZm8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwogCiBzdGF0aWMgaW50CXhsb2dy ZWFkZmQgPSAtMTsKQEAgLTQzNiw5ICs0MzksOSBAQCBleHRyYWN0UGFnZUluZm8oWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCiAJCSAqIHRyYWNrIHRoYXQgY2hhbmdlLgogCQkgKi8KIAkJcGdfZmF0 YWwoIldBTCByZWNvcmQgbW9kaWZpZXMgYSByZWxhdGlvbiwgYnV0IHJlY29yZCB0eXBlIGlzIG5v dCByZWNvZ25pemVkOiAiCi0JCQkJICJsc246ICVYLyVYLCBybWdyOiAlcywgaW5mbzogJTAyWCIs CisJCQkJICJsc246ICVYLyVYLCBybWlkOiAlZCwgcm1ncjogJXMsIGluZm86ICUwMlgiLAogCQkJ CSBMU05fRk9STUFUX0FSR1MocmVjb3JkLT5SZWFkUmVjUHRyKSwKLQkJCQkgUm1nck5hbWVzW3Jt aWRdLCBpbmZvKTsKKwkJCQkgcm1pZCwgUm1nck5hbWUocm1pZCksIGluZm8pOwogCX0KIAogCWZv ciAoYmxvY2tfaWQgPSAwOyBibG9ja19pZCA8PSBYTG9nUmVjTWF4QmxvY2tJZChyZWNvcmQpOyBi bG9ja19pZCsrKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuYyBi L3NyYy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1wLmMKaW5kZXggNGNiNDBkMDY4YTkuLmFmZDc4 NmZlN2JkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvcGdfd2FsZHVtcC5jCisrKyBi L3NyYy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1wLmMKQEAgLTgwLDggKzgwLDggQEAgdHlwZWRl ZiBzdHJ1Y3QgWExvZ0R1bXBTdGF0cwogCXVpbnQ2NAkJY291bnQ7CiAJWExvZ1JlY1B0cglzdGFy dHB0cjsKIAlYTG9nUmVjUHRyCWVuZHB0cjsKLQlTdGF0cwkJcm1ncl9zdGF0c1tSTV9ORVhUX0lE XTsKLQlTdGF0cwkJcmVjb3JkX3N0YXRzW1JNX05FWFRfSURdW01BWF9YTElORk9fVFlQRVNdOwor CVN0YXRzCQlybWdyX3N0YXRzW1JNX01BWF9JRCArIDFdOworCVN0YXRzCQlyZWNvcmRfc3RhdHNb Uk1fTUFYX0lEICsgMV1bTUFYX1hMSU5GT19UWVBFU107CiB9IFhMb2dEdW1wU3RhdHM7CiAKICNk ZWZpbmUgZmF0YWxfZXJyb3IoLi4uKSBkbyB7IHBnX2xvZ19mYXRhbChfX1ZBX0FSR1NfXyk7IGV4 aXQoRVhJVF9GQUlMVVJFKTsgfSB3aGlsZSgwKQpAQCAtMTA0LDkgKzEwNCw5IEBAIHByaW50X3Jt Z3JfbGlzdCh2b2lkKQogewogCWludAkJCWk7CiAKLQlmb3IgKGkgPSAwOyBpIDw9IFJNX01BWF9J RDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPD0gUk1fTUFYX0JVSUxUSU5fSUQ7IGkrKykKIAl7Ci0J CXByaW50ZigiJXNcbiIsIFJtZ3JEZXNjVGFibGVbaV0ucm1fbmFtZSk7CisJCXByaW50ZigiJXNc biIsIEdldFJtZ3JEZXNjKGkpLT5ybV9uYW1lKTsKIAl9CiB9CiAKQEAgLTUzNSw3ICs1MzUsNyBA QCBzdGF0aWMgdm9pZAogWExvZ0R1bXBEaXNwbGF5UmVjb3JkKFhMb2dEdW1wQ29uZmlnICpjb25m aWcsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogewogCWNvbnN0IGNoYXIgKmlkOwotCWNvbnN0 IFJtZ3JEZXNjRGF0YSAqZGVzYyA9ICZSbWdyRGVzY1RhYmxlW1hMb2dSZWNHZXRSbWlkKHJlY29y ZCldOworCWNvbnN0IFJtZ3JEZXNjRGF0YSAqZGVzYyA9IEdldFJtZ3JEZXNjKFhMb2dSZWNHZXRS bWlkKHJlY29yZCkpOwogCXVpbnQzMgkJcmVjX2xlbjsKIAl1aW50MzIJCWZwaV9sZW47CiAJUmVs RmlsZU5vZGUgcm5vZGU7CkBAIC03MjAsNyArNzIwLDcgQEAgWExvZ0R1bXBEaXNwbGF5U3RhdHMo WExvZ0R1bXBDb25maWcgKmNvbmZpZywgWExvZ0R1bXBTdGF0cyAqc3RhdHMpCiAJICogY2FsY3Vs YXRlIGNvbHVtbiB0b3RhbHMuCiAJICovCiAKLQlmb3IgKHJpID0gMDsgcmkgPCBSTV9ORVhUX0lE OyByaSsrKQorCWZvciAocmkgPSAwOyByaSA8IFJNX01BWF9JRDsgcmkrKykKIAl7CiAJCXRvdGFs X2NvdW50ICs9IHN0YXRzLT5ybWdyX3N0YXRzW3JpXS5jb3VudDsKIAkJdG90YWxfcmVjX2xlbiAr PSBzdGF0cy0+cm1ncl9zdGF0c1tyaV0ucmVjX2xlbjsKQEAgLTc0MSwxMyArNzQxLDE4IEBAIFhM b2dEdW1wRGlzcGxheVN0YXRzKFhMb2dEdW1wQ29uZmlnICpjb25maWcsIFhMb2dEdW1wU3RhdHMg KnN0YXRzKQogCQkgICAiVHlwZSIsICJOIiwgIiglKSIsICJSZWNvcmQgc2l6ZSIsICIoJSkiLCAi RlBJIHNpemUiLCAiKCUpIiwgIkNvbWJpbmVkIHNpemUiLCAiKCUpIiwKIAkJICAgIi0tLS0iLCAi LSIsICItLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tIiwgIi0tLS0tLS0tIiwgIi0tLSIsICItLS0t LS0tLS0tLS0tIiwgIi0tLSIpOwogCi0JZm9yIChyaSA9IDA7IHJpIDwgUk1fTkVYVF9JRDsgcmkr KykKKwlmb3IgKHJpID0gMDsgcmkgPD0gUk1fTUFYX0lEOyByaSsrKQogCXsKIAkJdWludDY0CQlj b3VudCwKIAkJCQkJcmVjX2xlbiwKIAkJCQkJZnBpX2xlbiwKIAkJCQkJdG90X2xlbjsKLQkJY29u c3QgUm1nckRlc2NEYXRhICpkZXNjID0gJlJtZ3JEZXNjVGFibGVbcmldOworCQljb25zdCBSbWdy RGVzY0RhdGEgKmRlc2M7CisKKwkJaWYgKCFSTV9JU19WQUxJRChyaSkpCisJCQljb250aW51ZTsK KworCQlkZXNjID0gR2V0Um1nckRlc2MocmkpOwogCiAJCWlmICghY29uZmlnLT5zdGF0c19wZXJf cmVjb3JkKQogCQl7CkBAIC03NTYsNiArNzYxLDkgQEAgWExvZ0R1bXBEaXNwbGF5U3RhdHMoWExv Z0R1bXBDb25maWcgKmNvbmZpZywgWExvZ0R1bXBTdGF0cyAqc3RhdHMpCiAJCQlmcGlfbGVuID0g c3RhdHMtPnJtZ3Jfc3RhdHNbcmldLmZwaV9sZW47CiAJCQl0b3RfbGVuID0gcmVjX2xlbiArIGZw aV9sZW47CiAKKwkJCWlmIChSTV9JU19DVVNUT00ocmkpICYmIGNvdW50ID09IDApCisJCQkJY29u dGludWU7CisKIAkJCVhMb2dEdW1wU3RhdHNSb3coZGVzYy0+cm1fbmFtZSwKIAkJCQkJCQkgY291 bnQsIHRvdGFsX2NvdW50LCByZWNfbGVuLCB0b3RhbF9yZWNfbGVuLAogCQkJCQkJCSBmcGlfbGVu LCB0b3RhbF9mcGlfbGVuLCB0b3RfbGVuLCB0b3RhbF9sZW4pOwpAQCAtMTAwMCw3ICsxMDA4LDcg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJYnJlYWs7CiAJCQljYXNlICdyJzoK IAkJCQl7Ci0JCQkJCWludAkJCWk7CisJCQkJCWludAkJCXJtaWQ7CiAKIAkJCQkJaWYgKHBnX3N0 cmNhc2VjbXAob3B0YXJnLCAibGlzdCIpID09IDApCiAJCQkJCXsKQEAgLTEwMDgsMjAgKzEwMTYs NDEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCQlleGl0KEVYSVRfU1VDQ0VT Uyk7CiAJCQkJCX0KIAotCQkJCQlmb3IgKGkgPSAwOyBpIDw9IFJNX01BWF9JRDsgaSsrKQorCQkJ CQkvKgorCQkJCQkgKiBGaXJzdCBsb29rIGZvciB0aGUgZ2VuZXJhdGVkIG5hbWUgb2YgYSBjdXN0 b20gcm1nciwgb2YKKwkJCQkJICogdGhlIGZvcm0gImN1c3RvbSMjIyIuIFdlIGFjY2VwdCB0aGlz IGZvcm0sIGJlY2F1c2UgdGhlCisJCQkJCSAqIGN1c3RvbSBybWdyIG1vZHVsZSBpcyBub3QgbG9h ZGVkLCBzbyB0aGVyZSdzIG5vIHdheSB0bworCQkJCQkgKiBjb21wYXJlIHdpdGggdGhlIHJlYWwg bmFtZS4KKwkJCQkJICovCisJCQkJCWlmIChzc2NhbmYob3B0YXJnLCAiY3VzdG9tJTAzZCIsICZy bWlkKSA9PSAxKQogCQkJCQl7Ci0JCQkJCQlpZiAocGdfc3RyY2FzZWNtcChvcHRhcmcsIFJtZ3JE ZXNjVGFibGVbaV0ucm1fbmFtZSkgPT0gMCkKKwkJCQkJCWlmICghUk1fSVNfQ1VTVE9NKHJtaWQp KQogCQkJCQkJewotCQkJCQkJCWNvbmZpZy5maWx0ZXJfYnlfcm1ncltpXSA9IHRydWU7Ci0JCQkJ CQkJY29uZmlnLmZpbHRlcl9ieV9ybWdyX2VuYWJsZWQgPSB0cnVlOwotCQkJCQkJCWJyZWFrOwor CQkJCQkJCXBnX2xvZ19lcnJvcigiY3VzdG9tIHJlc291cmNlIG1hbmFnZXIgXCIlc1wiIGRvZXMg bm90IGV4aXN0IiwKKwkJCQkJCQkJCQkgb3B0YXJnKTsKKwkJCQkJCQlnb3RvIGJhZF9hcmd1bWVu dDsKIAkJCQkJCX0KKwkJCQkJCWNvbmZpZy5maWx0ZXJfYnlfcm1ncltybWlkXSA9IHRydWU7CisJ CQkJCQljb25maWcuZmlsdGVyX2J5X3JtZ3JfZW5hYmxlZCA9IHRydWU7CiAJCQkJCX0KLQkJCQkJ aWYgKGkgPiBSTV9NQVhfSUQpCisJCQkJCWVsc2UKIAkJCQkJewotCQkJCQkJcGdfbG9nX2Vycm9y KCJyZXNvdXJjZSBtYW5hZ2VyIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCi0JCQkJCQkJCQkgb3B0 YXJnKTsKLQkJCQkJCWdvdG8gYmFkX2FyZ3VtZW50OworCQkJCQkJLyogdGhlbiBsb29rIGZvciBi dWlsdGluIHJtZ3JzICovCisJCQkJCQlmb3IgKHJtaWQgPSAwOyBybWlkIDw9IFJNX01BWF9CVUlM VElOX0lEOyBybWlkKyspCisJCQkJCQl7CisJCQkJCQkJaWYgKHBnX3N0cmNhc2VjbXAob3B0YXJn LCBHZXRSbWdyRGVzYyhybWlkKS0+cm1fbmFtZSkgPT0gMCkKKwkJCQkJCQl7CisJCQkJCQkJCWNv bmZpZy5maWx0ZXJfYnlfcm1ncltybWlkXSA9IHRydWU7CisJCQkJCQkJCWNvbmZpZy5maWx0ZXJf Ynlfcm1ncl9lbmFibGVkID0gdHJ1ZTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJ fQorCQkJCQkJaWYgKHJtaWQgPiBSTV9NQVhfQlVJTFRJTl9JRCkKKwkJCQkJCXsKKwkJCQkJCQlw Z19sb2dfZXJyb3IoInJlc291cmNlIG1hbmFnZXIgXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKKwkJ CQkJCQkJCQkgb3B0YXJnKTsKKwkJCQkJCQlnb3RvIGJhZF9hcmd1bWVudDsKKwkJCQkJCX0KIAkJ CQkJfQogCQkJCX0KIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9y bWdyZGVzYy5jIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKaW5kZXggNmE0ZWJkMTMx MGIuLjBmNGE0YjMwODI3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2Mu YworKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpAQCAtMzUsNiArMzUsNjQgQEAK ICNkZWZpbmUgUEdfUk1HUihzeW1uYW1lLG5hbWUscmVkbyxkZXNjLGlkZW50aWZ5LHN0YXJ0dXAs Y2xlYW51cCxtYXNrLGRlY29kZSkgXAogCXsgbmFtZSwgZGVzYywgaWRlbnRpZnl9LAogCi1jb25z dCBSbWdyRGVzY0RhdGEgUm1nckRlc2NUYWJsZVtSTV9NQVhfSUQgKyAxXSA9IHsKK3N0YXRpYyBj b25zdCBSbWdyRGVzY0RhdGEgUm1nckRlc2NUYWJsZVtSTV9NQVhfQlVJTFRJTl9JRCArIDFdID0g ewogI2luY2x1ZGUgImFjY2Vzcy9ybWdybGlzdC5oIgogfTsKKworLyoKKyAqIFdlIGFyZSB1bmFi bGUgdG8gZ2V0IHRoZSByZWFsIG5hbWUgb2YgYSBjdXN0b20gcm1nciBiZWNhdXNlIHRoZSBtb2R1 bGUgaXMKKyAqIG5vdCBsb2FkZWQuIEdlbmVyYXRlIGEgdGFibGUgb2YgbnVtZXJpYyBuYW1lcyBv ZiB0aGUgZm9ybSAiY3VzdG9tIyMjIiB3aGVyZQorICogIiMjIyIgaXMgdGhlIDMtZGlnaXQgcmVz b3VyY2UgbWFuYWdlciBJRC4KKyAqLworI2RlZmluZSBDVVNUT01fTlVNRVJJQ19OQU1FX0xFTiBz aXplb2YoImN1c3RvbSMjIyIpCisKK3N0YXRpYyBib29sIEN1c3RvbU51bWVyaWNOYW1lc0luaXRp YWxpemVkID0gZmFsc2U7CitzdGF0aWMgY2hhciBDdXN0b21OdW1lcmljTmFtZXNbUk1fTl9DVVNU T01fSURTXVtDVVNUT01fTlVNRVJJQ19OQU1FX0xFTl0gPSB7MH07CisKKy8qCisgKiBObyBpbmZv cm1hdGlvbiBvbiBjdXN0b20gcmVzb3VyY2UgbWFuYWdlcnM7IGp1c3QgcHJpbnQgdGhlIElELgor ICovCitzdGF0aWMgdm9pZAorZGVmYXVsdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVy U3RhdGUgKnJlY29yZCkKK3sKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJtaWQ6ICVkIiwgWExv Z1JlY0dldFJtaWQocmVjb3JkKSk7Cit9CisKKy8qCisgKiBObyBpbmZvcm1hdGlvbiBvbiBjdXN0 b20gcmVzb3VyY2UgbWFuYWdlcnM7IGp1c3QgcmV0dXJuIE5VTEwgYW5kIGxldCB0aGUKKyAqIGNh bGxlciBoYW5kbGUgaXQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2RlZmF1bHRfaWRlbnRp ZnkodWludDggaW5mbykKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworY29uc3QgUm1nckRlc2NEYXRh ICoKK0dldFJtZ3JEZXNjKFJtZ3JJZCBybWlkKQoreworCUFzc2VydChSTV9JU19WQUxJRChybWlk KSk7CisKKwlpZiAoUk1fSVNfQlVJTFRJTihybWlkKSkKKwl7CisJCXJldHVybiAmUm1nckRlc2NU YWJsZVtybWlkXTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKCFDdXN0b21OdW1lcmljTmFtZXNJbml0 aWFsaXplZCkKKwkJeworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBSTV9OX0NVU1RPTV9JRFM7IGkr KykKKwkJCXsKKwkJCQlzbnByaW50ZihDdXN0b21OdW1lcmljTmFtZXNbaV0sIENVU1RPTV9OVU1F UklDX05BTUVfTEVOLAorCQkJCQkJICJjdXN0b20lMDNkIiwgaSArIFJNX01JTl9DVVNUT01fSUQp OworCQkJfQorCQkJQ3VzdG9tTnVtZXJpY05hbWVzSW5pdGlhbGl6ZWQgPSB0cnVlOworCQl9CisK KwkJcmV0dXJuICYoUm1nckRlc2NEYXRhKSB7CisJCQkJQ3VzdG9tTnVtZXJpY05hbWVzW3JtaWQg LSBSTV9NSU5fQ1VTVE9NX0lEXSwKKwkJCQlkZWZhdWx0X2Rlc2MsCisJCQkJZGVmYXVsdF9pZGVu dGlmeQorCQkJCX07CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3Jk ZXNjLmggYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuaAppbmRleCA0MmY4NDgzYjQ4Mi4u ZjczM2NkNDY3ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5oCisr KyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5oCkBAIC0xOCw2ICsxOCw2IEBAIHR5cGVk ZWYgc3RydWN0IFJtZ3JEZXNjRGF0YQogCWNvbnN0IGNoYXIgKigqcm1faWRlbnRpZnkpICh1aW50 OCBpbmZvKTsKIH0gUm1nckRlc2NEYXRhOwogCi1leHRlcm4gY29uc3QgUm1nckRlc2NEYXRhIFJt Z3JEZXNjVGFibGVbXTsKK2V4dGVybiBjb25zdCBSbWdyRGVzY0RhdGEgKkdldFJtZ3JEZXNjKFJt Z3JJZCBybWlkKTsKIAogI2VuZGlmCQkJCQkJCS8qIFJNR1JERVNDX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdyLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1nci5oCmlu ZGV4IGQ5YjUxMjYzMGNhLi42ZTQwN2Y1ZGY2NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3JtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1nci5oCkBAIC0zMCw2ICszMCwx OSBAQCB0eXBlZGVmIGVudW0gUm1ncklkcwogCiAjdW5kZWYgUEdfUk1HUgogCi0jZGVmaW5lIFJN X01BWF9JRAkJCQkoUk1fTkVYVF9JRCAtIDEpCisjZGVmaW5lIFJNX01BWF9JRAkJCQlVSU5UOF9N QVgKKyNkZWZpbmUgUk1fTUFYX0JVSUxUSU5fSUQJCShSTV9ORVhUX0lEIC0gMSkKKyNkZWZpbmUg Uk1fTUlOX0NVU1RPTV9JRAkJMTI4CisjZGVmaW5lIFJNX05fQ1VTVE9NX0lEUwkJCShSTV9NQVhf SUQgLSBSTV9NSU5fQ1VTVE9NX0lEICsgMSkKKyNkZWZpbmUgUk1fSVNfQlVJTFRJTihybWlkKQkJ KChybWlkKSA8PSBSTV9NQVhfQlVJTFRJTl9JRCkKKyNkZWZpbmUgUk1fSVNfQ1VTVE9NKHJtaWQp CQkoKHJtaWQpID49IFJNX01JTl9DVVNUT01fSUQgJiYgKHJtaWQpIDwgUk1fTUFYX0lEKQorI2Rl ZmluZSBSTV9JU19WQUxJRChybWlkKQkJKFJNX0lTX0JVSUxUSU4oKHJtaWQpKSB8fCBSTV9JU19D VVNUT00oKHJtaWQpKSkKKworLyoKKyAqIFJtZ3JJZCB0byB1c2UgZm9yIGV4dGVuc2lvbnMgdGhh dCByZXF1aXJlIGFuIFJtZ3JJZCwgYnV0IGFyZSBzdGlsbCBpbgorICogZGV2ZWxvcG1lbnQgYW5k IGhhdmUgbm90IHJlc2VydmVkIHRoZWlyIG93biB1bmlxdWUgUm1ncklkIHlldC4gU2VlOgorICog aHR0cHM6Ly93aWtpLnBvc3RncmVzcWwub3JnL3dpa2kvRXh0ZW5zaWJsZVJtZ3IKKyAqLworI2Rl ZmluZSBSTV9FWFBFUklNRU5UQUxfSUQJCTEyOAogCiAjZW5kaWYJCQkJCQkJLyogUk1HUl9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2dfaW50ZXJuYWwuaAppbmRleCAwZTk0ODMzMTI5YS4uZWNiZTBmYTEz NDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dfaW50ZXJuYWwuaApAQCAtMzE5LDcgKzMxOSwxNiBAQCB0 eXBlZGVmIHN0cnVjdCBSbWdyRGF0YQogCQkJCQkJCSAgc3RydWN0IFhMb2dSZWNvcmRCdWZmZXIg KmJ1Zik7CiB9IFJtZ3JEYXRhOwogCi1leHRlcm4gY29uc3QgUm1nckRhdGEgUm1nclRhYmxlW107 CitleHRlcm4gUm1nckRhdGEgKlJtZ3JUYWJsZVtdOworZXh0ZXJuIHZvaWQgUm1nclN0YXJ0dXAo dm9pZCk7CitleHRlcm4gdm9pZCBSbWdyQ2xlYW51cCh2b2lkKTsKK2V4dGVybiB2b2lkIFJlZ2lz dGVyQ3VzdG9tUm1ncihSbWdySWQgcm1pZCwgUm1nckRhdGEgKnJtZ3IpOworCitzdGF0aWMgaW5s aW5lIFJtZ3JEYXRhICoKK0dldFJtZ3IoUm1ncklkIHJtaWQpCit7CisJcmV0dXJuIFJtZ3JUYWJs ZVtybWlkXTsKK30KIAogLyoKICAqIEV4cG9ydGVkIHRvIHN1cHBvcnQgeGxvZyBzd2l0Y2hpbmcg ZnJvbSBjaGVja3BvaW50ZXIKLS0gCjIuMTcuMQoK --=-Sd/gSFmrJzRk8mEW59V+--