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 1mAgNz-0002ni-CS for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Aug 2021 22:26:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mAgNx-0005lp-0p for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Aug 2021 22:26:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mAgNw-0005lh-9Z for pgsql-hackers@lists.postgresql.org; Mon, 02 Aug 2021 22:26:12 +0000 Received: from mail-qt1-x82b.google.com ([2607:f8b0:4864:20::82b]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1mAgNs-00036O-SZ for pgsql-hackers@postgresql.org; Mon, 02 Aug 2021 22:26:11 +0000 Received: by mail-qt1-x82b.google.com with SMTP id k13so12731836qth.10 for ; Mon, 02 Aug 2021 15:26:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=E9H8qSRgKFEPw+6Z+A/MtntDfu+VLk6+KIxBzrSIBWY=; b=GT9TW7Jylr5aiGtCcMoNs3R7R1BfXHOBZLJ7n6LlExjbNOZ26h3ctXUuYlYsNqIIUr e+Ppn8jNp6odg5udDH826ELBXEktCliN3JkpzTHyugtWpoTzTv8uc4VtRpJPjhV8LJS+ 1/UXsMl2tyNAuFgyY2E2qPD5QsV3qvcHhc7gXA6JLe3OB7M0IvIHqOi1SIm6/ycahf7c 2mn6jNj716YUtl6r1JQxsxe8oRKNus3+lbcQHRVM/mLmvxl0jviOtOtNbj8QTgCERG2f FCjjXK1HRQ6+K7BYZF3Lc+Rhwu4CtpLWR56UspiTeRkwJYIUAWUeEU5pG3Ru1CaIUt5N X+sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=E9H8qSRgKFEPw+6Z+A/MtntDfu+VLk6+KIxBzrSIBWY=; b=XjpMp72GOfX+D2LSmxCxgfB4InJcmrRRwMOEsXKL+a6+jqEF3JWPen3ReY6Q1Y4c08 lPgmND9ERlh7WAGgk7VZtScW+i4JwaH2VNdUFctRQ71vMtOsAx14YYoTOp88GAFkWKTO FLXfiVyHPh4yngLmtQrDNed5ns5aAuKnbPRdz6i3DAbTKHO1RmcFWV9XHKzSv/vfJzxJ WSVAdlszwBxpDDjQwAC7MHlhC3xXqJWp2VOgUvSnB/GmPigS3H6BqeoRcNZLEaQl5p/r 75jE4YVmmHbQb9+TlKItz7K62AdgAAOCD3lxFdSr8QSejxudAzn91k2nimahTNGYYeLq xEYw== X-Gm-Message-State: AOAM531fbJ5SkC1+v0TxGQF7VNj4Azkfnz1ZqCD382Nnf3i18mDRU3qa TjAem6LHE3Fz+VMhFNnqzh/6qdK55jTAnfFHEd8= X-Google-Smtp-Source: ABdhPJzFTkXNUJudnTLjkYARoYC5Uo0KRHdsmE6bO3VSTg1ejlUiGsIJjFq46Zxql+nFByu0QUd2AbbRfPtoVYkRsQs= X-Received: by 2002:ac8:6b53:: with SMTP id x19mr16563682qts.262.1627943167714; Mon, 02 Aug 2021 15:26:07 -0700 (PDT) MIME-Version: 1.0 References: <202106042152.ny3a4fqoefx7@alvherre.pgsql> In-Reply-To: <202106042152.ny3a4fqoefx7@alvherre.pgsql> From: Melanie Plageman Date: Mon, 2 Aug 2021 18:25:56 -0400 Message-ID: Subject: Re: pg_stat_bgwriter.buffers_backend is pretty meaningless (and more?) To: Alvaro Herrera Cc: Kyotaro Horiguchi , Andres Freund , Magnus Hagander , Pg Hackers , Lukas Fittl , Thomas Munro Content-Type: multipart/mixed; boundary="0000000000003a395505c89b0e22" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003a395505c89b0e22 Content-Type: text/plain; charset="UTF-8" On Fri, Jun 4, 2021 at 5:52 PM Alvaro Herrera wrote: > > On 2021-Apr-12, Melanie Plageman wrote: > > > As for the way I have recorded strategy writes -- it is quite inelegant, > > but, I wanted to make sure that I only counted a strategy write as one > > in which the backend wrote out the dirty buffer from its strategy ring > > but did not check if there was any clean buffer in shared buffers more > > generally (so, it is *potentially* an avoidable write). I'm not sure if > > this distinction is useful to anyone. I haven't done enough with > > BufferAccessStrategies to know what I'd want to know about them when > > developing or using Postgres. However, if I don't need to be so careful, > > it will make the code much simpler (though, I'm sure I can improve the > > code regardless). > > I was bitten last year by REFRESH MATERIALIZED VIEW counting its writes > via buffers_backend, and I was very surprised/confused about it. So it > seems definitely worthwhile to count writes via strategy separately. > For a DBA tuning the server configuration it is very useful. > > The main thing is to *not* let these writes end up regular > buffers_backend (or whatever you call these now). I didn't read your > patch, but the way you have described it seems okay to me. > Thanks for the feedback! I agree it makes sense to count strategy writes separately. I thought about this some more, and I don't know if it makes sense to only count "avoidable" strategy writes. This would mean that a backend writing out a buffer from the strategy ring when no clean shared buffers (as well as no clean strategy buffers) are available would not count that write as a strategy write (even though it is writing out a buffer from its strategy ring). But, it obviously doesn't make sense to count it as a regular buffer being written out. So, I plan to change this code. On another note, I've updated the patch with more correct concurrency control control mechanisms (had some data races and other problems before). Now, I am using atomics for the buffer action counters, though the code includes several #TODO questions around the correctness of what I have now too. I also wrapped the buffer action types in a struct to make them easier to work with. The most substantial missing piece of the patch right now is persisting the data across reboots. The two places in the code I can see to persist the buffer action stats data are: 1) using the stats collector code (like in pgstat_read/write_statsfiles() 2) using a before_shmem_exit() hook which writes the data structure to a file and then read from it when making the shared memory array initially It feels a bit weird to me to wedge the buffer actions stats into the stats collector code--since the stats collector isn't receiving and aggregating the buffer action stats. Also, I'm unsure how writing the buffer action stats out in pgstat_write_statsfiles() will work, since I think that backends can update their buffer action stats after we would have already persisted the data from the BufferActionStatsArray -- causing us to lose those updates. And, I don't think I can use pgstat_read_statsfiles() since the BufferActionStatsArray should have the data from the file as soon as the view containing the buffer action stats can be queried. Thus, it seems like I would need to read the file while initializing the array in CreateBufferActionStatsCounters(). I am registering the patch for September commitfest but plan to update the stats persistence before then (and docs, etc). -- Melanie --0000000000003a395505c89b0e22 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-Add-system-view-tracking-shared-buffer-actions.patch" Content-Disposition: attachment; filename="v3-0001-Add-system-view-tracking-shared-buffer-actions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_krv7aitu0 RnJvbSAyNzUzYmYwZGMzZmY1NGE1MTViYzA3MjliNTFlZjU2YjY3MTVhNzAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBNb24sIDIgQXVnIDIwMjEgMTc6NTY6MDcgLTA0MDAKU3ViamVjdDogW1BB VENIIHYzXSBBZGQgc3lzdGVtIHZpZXcgdHJhY2tpbmcgc2hhcmVkIGJ1ZmZlciBhY3Rpb25zCgpB ZGQgYSBzeXN0ZW0gdmlldyB3aGljaCB0cmFja3MKLSBudW1iZXIgb2Ygc2hhcmVkIGJ1ZmZlcnMg dGhlIGNoZWNrcG9pbnRlciBhbmQgYmd3cml0ZXIgd3JpdGUgb3V0Ci0gbnVtYmVyIG9mIHNoYXJl ZCBidWZmZXJzIGEgcmVndWxhciBiYWNrZW5kIGlzIGZvcmNlZCB0byBmbHVzaAotIG51bWJlciBv ZiBleHRlbmRzIGRvbmUgYnkgYSByZWd1bGFyIGJhY2tlbmQgdGhyb3VnaCBzaGFyZWQgYnVmZmVy cwotIG51bWJlciBvZiBidWZmZXJzIGZsdXNoZWQgYnkgYSBiYWNrZW5kIG9yIGF1dG92YWN1dW0g dXNpbmcgYQogIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHdoaWNoLCB3ZXJlIHRoZXkgbm90IHRvIHVz ZSB0aGlzIHN0cmF0ZWd5LCBjb3VsZAogIHBlcmhhcHMgaGF2ZSBiZWVuIGF2b2lkZWQgaWYgYSBj bGVhbiBzaGFyZWQgYnVmZmVyIHdhcyBhdmFpbGFibGUKLSBudW1iZXIgb2YgZnN5bmNzIGRvbmUg YnkgYSBiYWNrZW5kIHdoaWNoIGNvdWxkIGhhdmUgYmVlbiBkb25lIGJ5CiAgY2hlY2twb2ludGVy IGlmIHN5bmMgcXVldWUgaGFkIG5vdCBiZWVuIGZ1bGwKLSBudW1iZXIgb2YgYnVmZmVycyBhbGxv Y2F0ZWQgYnkgYSByZWd1bGFyIGJhY2tlbmQgb3IgYXV0b3ZhY3V1bSB3b3JrZXIKICBmb3IgZWl0 aGVyIGEgbmV3IGJsb2NrIG9yIGFuIGV4aXN0aW5nIGJsb2NrIG9mIGEgcmVsYXRpb24gd2hpY2gg aXMgbm90CiAgY3VycmVudGx5IGluIGEgYnVmZmVyCgpBbGwgb2YgdGhlc2Ugc3RhdHMgd2hpY2gg d2VyZSBpbiB0aGUgc3lzdGVtIHZpZXcgcGdfc3RhdF9iZ3dyaXRlciBoYXZlCmJlZW4gcmVtb3Zl ZCBmcm9tIHRoYXQgdmlldy4KCkFsbCBiYWNrZW5kcywgb24gZXhpdCwgd2lsbCB1cGRhdGUgYSBz aGFyZWQgbWVtb3J5IGFycmF5IHdpdGggdGhlCmJ1ZmZlcnMgdGhleSB3cm90ZSBvciBleHRlbmRl ZC4KCldoZW4gdGhlIHZpZXcgaXMgcXVlcmllZCwgYWRkIGFsbCBsaXZlIGJhY2tlbmQncyBzdGF0 dXNlcwp0byB0aGUgdG90YWxzIGluIHRoZSBzaGFyZWQgbWVtb3J5IGFycmF5IGFuZCByZXR1cm4g dGhhdCBhcyB0aGUgZnVsbAp0b3RhbC4KCkVhY2ggcm93IG9mIHRoZSB2aWV3IGlzIGZvciBhIHBh cnRpY3VsYXIgYmFja2VuZCB0eXBlIGFuZCBlYWNoIGNvbHVtbiBpcwp0aGUgbnVtYmVyIG9mIGEg cGFydGljdWxhciBraW5kIG9mIGJ1ZmZlciBhY3Rpb24gdGFrZW4gYnkgdGhlIHZhcmlvdXMKYmFj a2VuZHMuCgpUT0RPOgotIFNvbWUga2luZCBvZiB0ZXN0PwotIERvY3MgY2hhbmdlCi0tLQogc3Jj L2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgICAgICB8ICAxNCArKy0KIHNyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMgICAgICAgfCAgMjcgKy0tLQogc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9wZ3N0YXQuYyAgICAgICAgICAgICB8ICAgMyAtCiBzcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgIHwgIDczICsrKysrKysrKystCiBzcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jICAgICAgIHwgIDM3ICsrKystLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1cy5jIHwgMTMxICsrKysrKysrKysrKysr KysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYyAgICAgICAgIHwgIDU1 ICsrKysrKy0tCiBzcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMgICAgICAgICAgIHwg ICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgfCAgMjEg KystLQogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgICB8ICAxMiAr Kwogc3JjL2luY2x1ZGUvcGdzdGF0LmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiAtCiBz cmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCAgICAgICAgIHwgICAzICsKIHNyYy9p bmNsdWRlL3V0aWxzL2JhY2tlbmRfc3RhdHVzLmggICAgICAgICAgfCAgMTYgKystCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAgICAgICAgIHwgIDEwICstCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9zdGF0cy5zcWwgICAgICAgICAgICAgIHwgICAxICsKIDE2IGZpbGVzIGNoYW5n ZWQsIDMzNyBpbnNlcnRpb25zKCspLCA3NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5 c3RlbV92aWV3cy5zcWwKaW5kZXggNTVmNmUzNzExZC4uOTZjYWMwYTc0ZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTA2Nyw5ICsxMDY3LDYgQEAgQ1JFQVRFIFZJRVcg cGdfc3RhdF9iZ3dyaXRlciBBUwogICAgICAgICBwZ19zdGF0X2dldF9iZ3dyaXRlcl9idWZfd3Jp dHRlbl9jaGVja3BvaW50cygpIEFTIGJ1ZmZlcnNfY2hlY2twb2ludCwKICAgICAgICAgcGdfc3Rh dF9nZXRfYmd3cml0ZXJfYnVmX3dyaXR0ZW5fY2xlYW4oKSBBUyBidWZmZXJzX2NsZWFuLAogICAg ICAgICBwZ19zdGF0X2dldF9iZ3dyaXRlcl9tYXh3cml0dGVuX2NsZWFuKCkgQVMgbWF4d3JpdHRl bl9jbGVhbiwKLSAgICAgICAgcGdfc3RhdF9nZXRfYnVmX3dyaXR0ZW5fYmFja2VuZCgpIEFTIGJ1 ZmZlcnNfYmFja2VuZCwKLSAgICAgICAgcGdfc3RhdF9nZXRfYnVmX2ZzeW5jX2JhY2tlbmQoKSBB UyBidWZmZXJzX2JhY2tlbmRfZnN5bmMsCi0gICAgICAgIHBnX3N0YXRfZ2V0X2J1Zl9hbGxvYygp IEFTIGJ1ZmZlcnNfYWxsb2MsCiAgICAgICAgIHBnX3N0YXRfZ2V0X2Jnd3JpdGVyX3N0YXRfcmVz ZXRfdGltZSgpIEFTIHN0YXRzX3Jlc2V0OwogCiBDUkVBVEUgVklFVyBwZ19zdGF0X3dhbCBBUwpA QCAtMTA4NSw2ICsxMDgyLDE3IEBAIENSRUFURSBWSUVXIHBnX3N0YXRfd2FsIEFTCiAgICAgICAg IHcuc3RhdHNfcmVzZXQKICAgICBGUk9NIHBnX3N0YXRfZ2V0X3dhbCgpIHc7CiAKK0NSRUFURSBW SUVXIHBnX3N0YXRfYnVmZmVyX2FjdGlvbnMgQVMKK1NFTEVDVAorICAgICAgIGIuYmFja2VuZF90 eXBlLAorICAgICAgIGIuYnVmZmVyc19hbGxvYywKKyAgICAgICBiLmJ1ZmZlcnNfZXh0ZW5kLAor ICAgICAgIGIuYnVmZmVyc19mc3luYywKKyAgICAgICBiLmJ1ZmZlcnNfd3JpdGUsCisgICAgICAg Yi5idWZmZXJzX3dyaXRlX3N0cmF0CitGUk9NIHBnX3N0YXRfZ2V0X2J1ZmZlcl9hY3Rpb25zKCkg YjsKKworCiBDUkVBVEUgVklFVyBwZ19zdGF0X3Byb2dyZXNzX2FuYWx5emUgQVMKICAgICBTRUxF Q1QKICAgICAgICAgUy5waWQgQVMgcGlkLCBTLmRhdGlkIEFTIGRhdGlkLCBELmRhdG5hbWUgQVMg ZGF0bmFtZSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVy LmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCmluZGV4IGJjOWFjN2Nj ZmEuLmNiZTQ4ODlmYjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2tw b2ludGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYwpAQCAt OTAsMTcgKzkwLDggQEAKICAqIHJlcXVlc3RpbmcgYmFja2VuZHMgc2luY2UgdGhlIGxhc3QgY2hl Y2twb2ludCBzdGFydC4gIFRoZSBmbGFncyBhcmUKICAqIGNob3NlbiBzbyB0aGF0IE9SJ2luZyBp cyB0aGUgY29ycmVjdCB3YXkgdG8gY29tYmluZSBtdWx0aXBsZSByZXF1ZXN0cy4KICAqCi0gKiBu dW1fYmFja2VuZF93cml0ZXMgaXMgdXNlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIGJ1ZmZlciB3 cml0ZXMgcGVyZm9ybWVkCi0gKiBieSB1c2VyIGJhY2tlbmQgcHJvY2Vzc2VzLiAgVGhpcyBjb3Vu dGVyIHNob3VsZCBiZSB3aWRlIGVub3VnaCB0aGF0IGl0Ci0gKiBjYW4ndCBvdmVyZmxvdyBkdXJp bmcgYSBzaW5nbGUgcHJvY2Vzc2luZyBjeWNsZS4gIG51bV9iYWNrZW5kX2ZzeW5jCi0gKiBjb3Vu dHMgdGhlIHN1YnNldCBvZiB0aG9zZSB3cml0ZXMgdGhhdCBhbHNvIGhhZCB0byBkbyB0aGVpciBv d24gZnN5bmMsCi0gKiBiZWNhdXNlIHRoZSBjaGVja3BvaW50ZXIgZmFpbGVkIHRvIGFic29yYiB0 aGVpciByZXF1ZXN0LgotICoKICAqIFRoZSByZXF1ZXN0cyBhcnJheSBob2xkcyBmc3luYyByZXF1 ZXN0cyBzZW50IGJ5IGJhY2tlbmRzIGFuZCBub3QgeWV0CiAgKiBhYnNvcmJlZCBieSB0aGUgY2hl Y2twb2ludGVyLgotICoKLSAqIFVubGlrZSB0aGUgY2hlY2twb2ludCBmaWVsZHMsIG51bV9iYWNr ZW5kX3dyaXRlcywgbnVtX2JhY2tlbmRfZnN5bmMsIGFuZAotICogdGhlIHJlcXVlc3RzIGZpZWxk cyBhcmUgcHJvdGVjdGVkIGJ5IENoZWNrcG9pbnRlckNvbW1Mb2NrLgogICotLS0tLS0tLS0tCiAg Ki8KIHR5cGVkZWYgc3RydWN0CkBAIC0xMjQsOSArMTE1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlD b25kaXRpb25WYXJpYWJsZSBzdGFydF9jdjsgLyogc2lnbmFsZWQgd2hlbiBja3B0X3N0YXJ0ZWQg YWR2YW5jZXMgKi8KIAlDb25kaXRpb25WYXJpYWJsZSBkb25lX2N2OwkvKiBzaWduYWxlZCB3aGVu IGNrcHRfZG9uZSBhZHZhbmNlcyAqLwogCi0JdWludDMyCQludW1fYmFja2VuZF93cml0ZXM7IC8q IGNvdW50cyB1c2VyIGJhY2tlbmQgYnVmZmVyIHdyaXRlcyAqLwotCXVpbnQzMgkJbnVtX2JhY2tl bmRfZnN5bmM7CS8qIGNvdW50cyB1c2VyIGJhY2tlbmQgZnN5bmMgY2FsbHMgKi8KLQogCWludAkJ CW51bV9yZXF1ZXN0czsJLyogY3VycmVudCAjIG9mIHJlcXVlc3RzICovCiAJaW50CQkJbWF4X3Jl cXVlc3RzOwkvKiBhbGxvY2F0ZWQgYXJyYXkgc2l6ZSAqLwogCUNoZWNrcG9pbnRlclJlcXVlc3Qg cmVxdWVzdHNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKQEAgLTEwODksMTAgKzEwNzcsNiBAQCBG b3J3YXJkU3luY1JlcXVlc3QoY29uc3QgRmlsZVRhZyAqZnRhZywgU3luY1JlcXVlc3RUeXBlIHR5 cGUpCiAKIAlMV0xvY2tBY3F1aXJlKENoZWNrcG9pbnRlckNvbW1Mb2NrLCBMV19FWENMVVNJVkUp OwogCi0JLyogQ291bnQgYWxsIGJhY2tlbmQgd3JpdGVzIHJlZ2FyZGxlc3Mgb2YgaWYgdGhleSBm aXQgaW4gdGhlIHF1ZXVlICovCi0JaWYgKCFBbUJhY2tncm91bmRXcml0ZXJQcm9jZXNzKCkpCi0J CUNoZWNrcG9pbnRlclNobWVtLT5udW1fYmFja2VuZF93cml0ZXMrKzsKLQogCS8qCiAJICogSWYg dGhlIGNoZWNrcG9pbnRlciBpc24ndCBydW5uaW5nIG9yIHRoZSByZXF1ZXN0IHF1ZXVlIGlzIGZ1 bGwsIHRoZQogCSAqIGJhY2tlbmQgd2lsbCBoYXZlIHRvIHBlcmZvcm0gaXRzIG93biBmc3luYyBy ZXF1ZXN0LiAgQnV0IGJlZm9yZSBmb3JjaW5nCkBAIC0xMTA2LDggKzEwOTAsMTAgQEAgRm9yd2Fy ZFN5bmNSZXF1ZXN0KGNvbnN0IEZpbGVUYWcgKmZ0YWcsIFN5bmNSZXF1ZXN0VHlwZSB0eXBlKQog CQkgKiBDb3VudCB0aGUgc3Vic2V0IG9mIHdyaXRlcyB3aGVyZSBiYWNrZW5kcyBoYXZlIHRvIGRv IHRoZWlyIG93bgogCQkgKiBmc3luYwogCQkgKi8KKwkJLyogVE9ETzogc2hvdWxkIHdlIGNvdW50 IGZzeW5jcyBmb3IgYWxsIHR5cGVzIG9mIHByb2NzPyAqLwogCQlpZiAoIUFtQmFja2dyb3VuZFdy aXRlclByb2Nlc3MoKSkKLQkJCUNoZWNrcG9pbnRlclNobWVtLT5udW1fYmFja2VuZF9mc3luYysr OworCQkJcGdzdGF0X2luY3JlbWVudF9idWZmZXJfYWN0aW9uKEJBX0ZzeW5jKTsKKwogCQlMV0xv Y2tSZWxlYXNlKENoZWNrcG9pbnRlckNvbW1Mb2NrKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAg LTEyNjQsMTMgKzEyNTAsNiBAQCBBYnNvcmJTeW5jUmVxdWVzdHModm9pZCkKIAogCUxXTG9ja0Fj cXVpcmUoQ2hlY2twb2ludGVyQ29tbUxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKLQkvKiBUcmFuc2Zl ciBzdGF0cyBjb3VudHMgaW50byBwZW5kaW5nIHBnc3RhdHMgbWVzc2FnZSAqLwotCUJnV3JpdGVy U3RhdHMubV9idWZfd3JpdHRlbl9iYWNrZW5kICs9IENoZWNrcG9pbnRlclNobWVtLT5udW1fYmFj a2VuZF93cml0ZXM7Ci0JQmdXcml0ZXJTdGF0cy5tX2J1Zl9mc3luY19iYWNrZW5kICs9IENoZWNr cG9pbnRlclNobWVtLT5udW1fYmFja2VuZF9mc3luYzsKLQotCUNoZWNrcG9pbnRlclNobWVtLT5u dW1fYmFja2VuZF93cml0ZXMgPSAwOwotCUNoZWNrcG9pbnRlclNobWVtLT5udW1fYmFja2VuZF9m c3luYyA9IDA7Ci0KIAkvKgogCSAqIFdlIHRyeSB0byBhdm9pZCBob2xkaW5nIHRoZSBsb2NrIGZv ciBhIGxvbmcgdGltZSBieSBjb3B5aW5nIHRoZSByZXF1ZXN0CiAJICogYXJyYXksIGFuZCBwcm9j ZXNzaW5nIHRoZSByZXF1ZXN0cyBhZnRlciByZWxlYXNpbmcgdGhlIGxvY2suCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9wZ3N0YXQuYwppbmRleCAxMTcwMmYyYTgwLi4wM2Q4ZTEzYzNhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cGdzdGF0LmMKQEAgLTUzNTIsOSArNTM1Miw2IEBAIHBnc3RhdF9yZWN2X2Jnd3JpdGVyKFBnU3Rh dF9Nc2dCZ1dyaXRlciAqbXNnLCBpbnQgbGVuKQogCWdsb2JhbFN0YXRzLmJ1Zl93cml0dGVuX2No ZWNrcG9pbnRzICs9IG1zZy0+bV9idWZfd3JpdHRlbl9jaGVja3BvaW50czsKIAlnbG9iYWxTdGF0 cy5idWZfd3JpdHRlbl9jbGVhbiArPSBtc2ctPm1fYnVmX3dyaXR0ZW5fY2xlYW47CiAJZ2xvYmFs U3RhdHMubWF4d3JpdHRlbl9jbGVhbiArPSBtc2ctPm1fbWF4d3JpdHRlbl9jbGVhbjsKLQlnbG9i YWxTdGF0cy5idWZfd3JpdHRlbl9iYWNrZW5kICs9IG1zZy0+bV9idWZfd3JpdHRlbl9iYWNrZW5k OwotCWdsb2JhbFN0YXRzLmJ1Zl9mc3luY19iYWNrZW5kICs9IG1zZy0+bV9idWZfZnN5bmNfYmFj a2VuZDsKLQlnbG9iYWxTdGF0cy5idWZfYWxsb2MgKz0gbXNnLT5tX2J1Zl9hbGxvYzsKIH0KIAog LyogLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAzM2Q5OWY2 MDRhLi4zYmZiYjQ4YjFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtOTYz LDYgKzk2MywxMSBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciBy ZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCiAJaWYgKGlzRXh0ZW5kKQogCXsK KwkJLyoKKwkJICogRXh0ZW5kcyBjb3VudGVkIGhlcmUgYXJlIG9ubHkgdGhvc2UgdGhhdCBnbyB0 aHJvdWdoIHNoYXJlZCBidWZmZXJzCisJCSAqLworCQlwZ3N0YXRfaW5jcmVtZW50X2J1ZmZlcl9h Y3Rpb24oQkFfRXh0ZW5kKTsKKwogCQkvKiBuZXcgYnVmZmVycyBhcmUgemVyby1maWxsZWQgKi8K IAkJTWVtU2V0KChjaGFyICopIGJ1ZkJsb2NrLCAwLCBCTENLU1opOwogCQkvKiBkb24ndCBzZXQg Y2hlY2tzdW0gZm9yIGFsbC16ZXJvIHBhZ2UgKi8KQEAgLTEyMjksMTEgKzEyMzQsNjAgQEAgQnVm ZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1i ZXIgZm9ya051bSwKIAkJCQkJaWYgKFhMb2dOZWVkc0ZsdXNoKGxzbikgJiYKIAkJCQkJCVN0cmF0 ZWd5UmVqZWN0QnVmZmVyKHN0cmF0ZWd5LCBidWYpKQogCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJ ICogVW5zZXQgdGhlIHN0cmF0IHdyaXRlIGZsYWcsIGFzIHdlIHdpbGwgbm90IGJlIHdyaXRpbmcK KwkJCQkJCSAqIHRoaXMgcGFydGljdWxhciBidWZmZXIgZnJvbSBvdXIgcmluZyBvdXQgYW5kIG1h eSBlbmQKKwkJCQkJCSAqIHVwIGhhdmluZyB0byBmaW5kIGEgYnVmZmVyIGZyb20gbWFpbiBzaGFy ZWQgYnVmZmVycywKKwkJCQkJCSAqIHdoaWNoLCBpZiBpdCBpcyBkaXJ0eSwgd2UgbWF5IGhhdmUg dG8gd3JpdGUgb3V0LCB3aGljaAorCQkJCQkJICogY291bGQgaGF2ZSBiZWVuIHByZXZlbnRlZCBi eSBjaGVja3BvaW50aW5nIGFuZCBiYWNrZ3JvdW5kCisJCQkJCQkgKiB3cml0aW5nCisJCQkJCQkg Ki8KKwkJCQkJCVN0cmF0ZWd5VW5DaG9vc2VCdWZmZXJGcm9tUmluZyhzdHJhdGVneSk7CisKIAkJ CQkJCS8qIERyb3AgbG9jay9waW4gYW5kIGxvb3AgYXJvdW5kIGZvciBhbm90aGVyIGJ1ZmZlciAq LwogCQkJCQkJTFdMb2NrUmVsZWFzZShCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soYnVm KSk7CiAJCQkJCQlVbnBpbkJ1ZmZlcihidWYsIHRydWUpOwogCQkJCQkJY29udGludWU7CiAJCQkJ CX0KKworCQkJCQkvKgorCQkJCQkgKiBUT0RPOiB0aGVyZSBpcyBjZXJ0YWlubHkgYSBiZXR0ZXIg d2F5IHRvIHdyaXRlIHRoaXMKKwkJCQkJICogbG9naWMKKwkJCQkJICovCisKKwkJCQkJLyoKKwkJ CQkJICogVGhlIGRpcnR5IGJ1ZmZlciB0aGF0IHdpbGwgYmUgd3JpdHRlbiBvdXQgd2FzIHNlbGVj dGVkCisJCQkJCSAqIGZyb20gdGhlIHJpbmcgYW5kIHdlIGRpZCBub3QgYm90aGVyIGNoZWNraW5n IHRoZQorCQkJCQkgKiBmcmVlbGlzdCBvciBkb2luZyBhIGNsb2NrIHN3ZWVwIHRvIGxvb2sgZm9y IGEgY2xlYW4KKwkJCQkJICogYnVmZmVyIHRvIHVzZSwgdGh1cywgdGhpcyB3cml0ZSB3aWxsIGJl IGNvdW50ZWQgYXMgYQorCQkJCQkgKiBzdHJhdGVneSB3cml0ZSAtLSBvbmUgdGhhdCBtYXkgYmUg dW5uZWNlc3Nhcnkgd2l0aG91dCBhCisJCQkJCSAqIHN0cmF0ZWd5CisJCQkJCSAqLworCQkJCQlp ZiAoU3RyYXRlZ3lJc0J1ZmZlckZyb21SaW5nKHN0cmF0ZWd5KSkKKwkJCQkJeworCQkJCQkJcGdz dGF0X2luY3JlbWVudF9idWZmZXJfYWN0aW9uKEJBX1dyaXRlX1N0cmF0KTsKKwkJCQkJfQorCisJ CQkJCQkvKgorCQkJCQkJICogSWYgdGhlIGRpcnR5IGJ1ZmZlciB3YXMgb25lIHdlIGdyYWJiZWQg ZnJvbSB0aGUKKwkJCQkJCSAqIGZyZWVsaXN0IG9yIHRocm91Z2ggYSBjbG9jayBzd2VlcCwgaXQg Y291bGQgaGF2ZSBiZWVuCisJCQkJCQkgKiB3cml0dGVuIG91dCBieSBiZ3dyaXRlciBvciBjaGVj a3BvaW50ZXIsIHRodXMsIHdlIHdpbGwKKwkJCQkJCSAqIGNvdW50IGl0IGFzIGEgcmVndWxhciB3 cml0ZQorCQkJCQkJICovCisJCQkJCWVsc2UKKwkJCQkJCXBnc3RhdF9pbmNyZW1lbnRfYnVmZmVy X2FjdGlvbihCQV9Xcml0ZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qCisJCQkJ CSAqIElmIHN0cmF0ZWd5IGlzIE5VTEwsIHdlIGNvdWxkIG9ubHkgYmUgZG9pbmcgYSB3cml0ZS4K KwkJCQkJICogRXh0ZW5kIG9wZXJhdGlvbnMgd2lsbCBiZSBjb3VudGVkIGluIHNtZ3JleHRlbmQu IFRoYXQKKwkJCQkJICogaXMgc2VwYXJhdGUgSS9PIHRoYW4gYW55IGZsdXNoaW5nIG9mIGRpcnR5 IGJ1ZmZlcnMuIElmCisJCQkJCSAqIHdlIGFkZCBtb3JlIEJhY2tlbmQgQWNjZXNzIFR5cGVzLCBw ZXJoYXBzIHdlIHdpbGwgbmVlZAorCQkJCQkgKiBhZGRpdGlvbmFsIGNoZWNrcyBoZXJlCisJCQkJ CSAqLworCQkJCQlwZ3N0YXRfaW5jcmVtZW50X2J1ZmZlcl9hY3Rpb24oQkFfV3JpdGUpOworCiAJ CQkJfQogCiAJCQkJLyogT0ssIGRvIHRoZSBJL08gKi8KQEAgLTIyNDYsOSArMjMwMCw2IEBAIEJn QnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCSAqLwogCXN0cmF0ZWd5 X2J1Zl9pZCA9IFN0cmF0ZWd5U3luY1N0YXJ0KCZzdHJhdGVneV9wYXNzZXMsICZyZWNlbnRfYWxs b2MpOwogCi0JLyogUmVwb3J0IGJ1ZmZlciBhbGxvYyBjb3VudHMgdG8gcGdzdGF0ICovCi0JQmdX cml0ZXJTdGF0cy5tX2J1Zl9hbGxvYyArPSByZWNlbnRfYWxsb2M7Ci0KIAkvKgogCSAqIElmIHdl J3JlIG5vdCBydW5uaW5nIHRoZSBMUlUgc2NhbiwganVzdCBzdG9wIGFmdGVyIGRvaW5nIHRoZSBz dGF0cwogCSAqIHN0dWZmLiAgV2UgbWFyayB0aGUgc2F2ZWQgc3RhdGUgaW52YWxpZCBzbyB0aGF0 IHdlIGNhbiByZWNvdmVyIHNhbmVseQpAQCAtMjU0Myw2ICsyNTk0LDggQEAgU3luY09uZUJ1ZmZl cihpbnQgYnVmX2lkLCBib29sIHNraXBfcmVjZW50bHlfdXNlZCwgV3JpdGViYWNrQ29udGV4dCAq d2JfY29udGV4dCkKIAkgKiBQaW4gaXQsIHNoYXJlLWxvY2sgaXQsIHdyaXRlIGl0LiAgKEZsdXNo QnVmZmVyIHdpbGwgZG8gbm90aGluZyBpZiB0aGUKIAkgKiBidWZmZXIgaXMgY2xlYW4gYnkgdGhl IHRpbWUgd2UndmUgbG9ja2VkIGl0LikKIAkgKi8KKwlwZ3N0YXRfaW5jcmVtZW50X2J1ZmZlcl9h Y3Rpb24oQkFfV3JpdGUpOworCiAJUGluQnVmZmVyX0xvY2tlZChidWZIZHIpOwogCUxXTG9ja0Fj cXVpcmUoQnVmZmVyRGVzY3JpcHRvckdldENvbnRlbnRMb2NrKGJ1ZkhkciksIExXX1NIQVJFRCk7 CiAKQEAgLTI4OTUsNiArMjk0OCwyMCBAQCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNN Z3JSZWxhdGlvbiByZWxuKQogCS8qCiAJICogYnVmVG9Xcml0ZSBpcyBlaXRoZXIgdGhlIHNoYXJl ZCBidWZmZXIgb3IgYSBjb3B5LCBhcyBhcHByb3ByaWF0ZS4KIAkgKi8KKworCS8qCisJICogVE9E TzogY29uc2lkZXIgdGhhdCBpZiB3ZSBkaWQgbm90IG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2Vl biBhIGJ1ZmZlcgorCSAqIGZsdXNoZWQgdGhhdCB3YXMgZ3JhYmJlZCBmcm9tIHRoZSByaW5nIGJ1 ZmZlciBhbmQgd3JpdHRlbiBvdXQgYXMgcGFydAorCSAqIG9mIGEgc3RyYXRlZ3kgd2hpY2ggd2Fz IG5vdCBmcm9tIG1haW4gU2hhcmVkIEJ1ZmZlcnMgKGFuZCB0aHVzCisJICogcHJldmVudGFibGUg YnkgYmd3cml0ZXIgb3IgY2hlY2twb2ludGVyKSwgdGhlbiB3ZSBjb3VsZCBtb3ZlIGFsbCBjYWxs cworCSAqIHRvIHBnc3RhdF9pbmNyZW1lbnRfYnVmZmVyX2FjdGlvbigpIGhlcmUgZXhjZXB0IGZv ciB0aGUgb25lIGZvcgorCSAqIGV4dGVuZHMsIHdoaWNoIHdvdWxkIHJlbWFpbiBpbiBSZWFkQnVm ZmVyX2NvbW1vbigpIGJlZm9yZSBzbWdyZXh0ZW5kKCkKKwkgKiAodW5sZXNzIHdlIGRlY2lkZSB0 byBzdGFydCBjb3VudGluZyBvdGhlciBleHRlbmRzKS4gVGhhdCBpbmNsdWRlcyB0aGUKKwkgKiBj YWxsIHRvIGNvdW50IGJ1ZmZlcnMgd3JpdHRlbiBieSBiZ3dyaXRlciBhbmQgY2hlY2twb2ludGVy IHdoaWNoIGdvCisJICogdGhyb3VnaCBGbHVzaEJ1ZmZlcigpIGJ1dCBub3QgQnVmZmVyQWxsb2Mo KS4gVGhhdCB3b3VsZCBtYWtlIGl0CisJICogc2ltcGxlci4gUGVyaGFwcyBpbnN0ZWFkIHdlIGNh biBmaW5kIHNvbWV3aGVyZSBlbHNlIHRvIGluZGljYXRlIHRoYXQKKwkgKiB0aGUgYnVmZmVyIGlz IGZyb20gdGhlIHJpbmcgb2YgYnVmZmVycyB0byByZXVzZS4KKwkgKi8KIAlzbWdyd3JpdGUocmVs biwKIAkJCSAgYnVmLT50YWcuZm9ya051bSwKIAkJCSAgYnVmLT50YWcuYmxvY2tOdW0sCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCA2YmU4MDQ3NmRiLi41MjNiMDI0OTky IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTE5LDYgKzE5LDcgQEAK ICNpbmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInV0aWxzL2JhY2tl bmRfc3RhdHVzLmgiCiAKICNkZWZpbmUgSU5UX0FDQ0VTU19PTkNFKHZhcikJKChpbnQpKCooKHZv bGF0aWxlIGludCAqKSYodmFyKSkpKQogCkBAIC01MSw3ICs1Miw2IEBAIHR5cGVkZWYgc3RydWN0 CiAJICogb3ZlcmZsb3cgZHVyaW5nIGEgc2luZ2xlIGJnd3JpdGVyIGN5Y2xlLgogCSAqLwogCXVp bnQzMgkJY29tcGxldGVQYXNzZXM7IC8qIENvbXBsZXRlIGN5Y2xlcyBvZiB0aGUgY2xvY2sgc3dl ZXAgKi8KLQlwZ19hdG9taWNfdWludDMyIG51bUJ1ZmZlckFsbG9jczsJLyogQnVmZmVycyBhbGxv Y2F0ZWQgc2luY2UgbGFzdCByZXNldCAqLwogCiAJLyoKIAkgKiBCZ3dvcmtlciBwcm9jZXNzIHRv IGJlIG5vdGlmaWVkIHVwb24gYWN0aXZpdHkgb3IgLTEgaWYgbm9uZS4gU2VlCkBAIC04Niw2ICs4 NiwxMyBAQCB0eXBlZGVmIHN0cnVjdCBCdWZmZXJBY2Nlc3NTdHJhdGVneURhdGEKIAkgKiByaW5n IGFscmVhZHkuCiAJICovCiAJYm9vbAkJY3VycmVudF93YXNfaW5fcmluZzsKKwkvKgorCSAqIElm IHdlIGNvdWxkIGNob3NlIGEgYnVmZmVyIGZyb20gdGhpcyBsaXN0IGFuZCB3ZSBlbmQgdXAgaGF2 aW5nIHRvIHdyaXRlCisJICogaXQgb3V0IGJlY2F1c2UgaXQgaXMgZGlydHkgd2hlbiB3ZSBhY3R1 YWxseSBjb3VsZCBoYXZlIGZvdW5kIGEgY2xlYW4KKwkgKiBidWZmZXIgaW4gZWl0aGVyIHRoZSBm cmVlbGlzdCBvciB0aHJvdWdoIGRvaW5nIGEgY2xvY2sgc3dlZXAgb2Ygc2hhcmVkCisJICogYnVm ZmVycywgdGhpcyBmbGFnIHdpbGwgaW5kaWNhdGUgdGhhdAorCSAqLworCWJvb2wJCWNob3NlX2J1 ZmZlcl9pbl9yaW5nOwogCiAJLyoKIAkgKiBBcnJheSBvZiBidWZmZXIgbnVtYmVycy4gIEludmFs aWRCdWZmZXIgKHRoYXQgaXMsIHplcm8pIGluZGljYXRlcyB3ZQpAQCAtMjEzLDcgKzIyMCwxMCBA QCBTdHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDMy ICpidWZfc3RhdGUpCiAJewogCQlidWYgPSBHZXRCdWZmZXJGcm9tUmluZyhzdHJhdGVneSwgYnVm X3N0YXRlKTsKIAkJaWYgKGJ1ZiAhPSBOVUxMKQorCQl7CisJCQlTdHJhdGVneUNob29zZUJ1ZmZl ckJ1ZmZlckZyb21SaW5nKHN0cmF0ZWd5KTsKIAkJCXJldHVybiBidWY7CisJCX0KIAl9CiAKIAkv KgpAQCAtMjQ3LDcgKzI1Nyw3IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSkKIAkgKiB0aGUgcmF0ZSBvZiBidWZmZXIg Y29uc3VtcHRpb24uICBOb3RlIHRoYXQgYnVmZmVycyByZWN5Y2xlZCBieSBhCiAJICogc3RyYXRl Z3kgb2JqZWN0IGFyZSBpbnRlbnRpb25hbGx5IG5vdCBjb3VudGVkIGhlcmUuCiAJICovCi0JcGdf YXRvbWljX2ZldGNoX2FkZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bnVtQnVmZmVyQWxsb2NzLCAx KTsKKwlwZ3N0YXRfaW5jcmVtZW50X2J1ZmZlcl9hY3Rpb24oQkFfQWxsb2MpOwogCiAJLyoKIAkg KiBGaXJzdCBjaGVjaywgd2l0aG91dCBhY3F1aXJpbmcgdGhlIGxvY2ssIHdoZXRoZXIgdGhlcmUn cyBidWZmZXJzIGluIHRoZQpAQCAtNDExLDExICs0MjEsNiBAQCBTdHJhdGVneVN5bmNTdGFydCh1 aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpudW1fYnVmX2FsbG9jKQogCQkgKi8KIAkJ KmNvbXBsZXRlX3Bhc3NlcyArPSBuZXh0VmljdGltQnVmZmVyIC8gTkJ1ZmZlcnM7CiAJfQotCi0J aWYgKG51bV9idWZfYWxsb2MpCi0JewotCQkqbnVtX2J1Zl9hbGxvYyA9IHBnX2F0b21pY19leGNo YW5nZV91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bnVtQnVmZmVyQWxsb2NzLCAwKTsKLQl9CiAJU3Bp bkxvY2tSZWxlYXNlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKIAly ZXR1cm4gcmVzdWx0OwogfQpAQCAtNTE3LDcgKzUyMiw2IEBAIFN0cmF0ZWd5SW5pdGlhbGl6ZShi b29sIGluaXQpCiAKIAkJLyogQ2xlYXIgc3RhdGlzdGljcyAqLwogCQlTdHJhdGVneUNvbnRyb2wt PmNvbXBsZXRlUGFzc2VzID0gMDsKLQkJcGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRy b2wtPm51bUJ1ZmZlckFsbG9jcywgMCk7CiAKIAkJLyogTm8gcGVuZGluZyBub3RpZmljYXRpb24g Ki8KIAkJU3RyYXRlZ3lDb250cm9sLT5iZ3dwcm9jbm8gPSAtMTsKQEAgLTcwMiwzICs3MDYsMjAg QEAgU3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIEJ1 ZmZlckRlc2MgKmJ1ZikKIAogCXJldHVybiB0cnVlOwogfQordm9pZAorU3RyYXRlZ3lVbkNob29z ZUJ1ZmZlckZyb21SaW5nKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN0cmF0 ZWd5LT5jaG9zZV9idWZmZXJfaW5fcmluZyA9IGZhbHNlOworfQorCit2b2lkCitTdHJhdGVneUNo b29zZUJ1ZmZlckJ1ZmZlckZyb21SaW5nKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KQor eworCXN0cmF0ZWd5LT5jaG9zZV9idWZmZXJfaW5fcmluZyA9IHRydWU7Cit9CisKK2Jvb2wKK1N0 cmF0ZWd5SXNCdWZmZXJGcm9tUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSkKK3sK KwlyZXR1cm4gc3RyYXRlZ3ktPmNob3NlX2J1ZmZlcl9pbl9yaW5nOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv aXBjaS5jCmluZGV4IDNlNGVjNTNhOTcuLmM2NjI4NTM0MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNp LmMKQEAgLTI0MCw2ICsyNDAsNyBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZv aWQpCiAJCUluaXRQcm9jR2xvYmFsKCk7CiAJQ3JlYXRlU2hhcmVkUHJvY0FycmF5KCk7CiAJQ3Jl YXRlU2hhcmVkQmFja2VuZFN0YXR1cygpOworCUNyZWF0ZUJ1ZmZlckFjdGlvblN0YXRzQ291bnRl cnMoKTsKIAlUd29QaGFzZVNobWVtSW5pdCgpOwogCUJhY2tncm91bmRXb3JrZXJTaG1lbUluaXQo KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0 dXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMKaW5kZXgg MjkwMWY5ZjVhOS4uZWMxYTdkNGMzYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvYmFja2VuZF9zdGF0dXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9i YWNrZW5kX3N0YXR1cy5jCkBAIC01NSw2ICs1NSw3IEBAIHN0YXRpYyBjaGFyICpCYWNrZW5kQXBw bmFtZUJ1ZmZlciA9IE5VTEw7CiBzdGF0aWMgY2hhciAqQmFja2VuZENsaWVudEhvc3RuYW1lQnVm ZmVyID0gTlVMTDsKIHN0YXRpYyBjaGFyICpCYWNrZW5kQWN0aXZpdHlCdWZmZXIgPSBOVUxMOwog c3RhdGljIFNpemUgQmFja2VuZEFjdGl2aXR5QnVmZmVyU2l6ZSA9IDA7CitzdGF0aWMgUGdCYWNr ZW5kQnVmZmVyQWN0aW9uU3RhdHMgKkJ1ZmZlckFjdGlvblN0YXRzQXJyYXkgICAgPSBOVUxMOwog I2lmZGVmIFVTRV9TU0wKIHN0YXRpYyBQZ0JhY2tlbmRTU0xTdGF0dXMgKkJhY2tlbmRTc2xTdGF0 dXNCdWZmZXIgPSBOVUxMOwogI2VuZGlmCkBAIC03NSw2ICs3Niw3IEBAIHN0YXRpYyBNZW1vcnlD b250ZXh0IGJhY2tlbmRTdGF0dXNTbmFwQ29udGV4dDsKIHN0YXRpYyB2b2lkIHBnc3RhdF9iZXNo dXRkb3duX2hvb2soaW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBwZ3N0YXRfcmVh ZF9jdXJyZW50X3N0YXR1cyh2b2lkKTsKIHN0YXRpYyB2b2lkIHBnc3RhdF9zZXR1cF9iYWNrZW5k X3N0YXR1c19jb250ZXh0KHZvaWQpOworc3RhdGljIHZvaWQgcGdzdGF0X3JlY29yZF9kZWFkX2Jh Y2tlbmRfYnVmZmVyX2FjdGlvbnModm9pZCk7CiAKIAogLyoKQEAgLTIzNiw2ICsyMzgsMzUgQEAg Q3JlYXRlU2hhcmVkQmFja2VuZFN0YXR1cyh2b2lkKQogI2VuZGlmCiB9CiAKK3ZvaWQKK0NyZWF0 ZUJ1ZmZlckFjdGlvblN0YXRzQ291bnRlcnModm9pZCkKK3sKKwlib29sCQlmb3VuZDsKKwlTaXpl CQlzaXplOworCWludCBpOworCVBnQmFja2VuZEJ1ZmZlckFjdGlvblN0YXRzICpiYV9zdGF0czsK KworCXNpemUgPSBCQUNLRU5EX05VTV9UWVBFUyAqIHNpemVvZihQZ0JhY2tlbmRCdWZmZXJBY3Rp b25TdGF0cyk7CisJQnVmZmVyQWN0aW9uU3RhdHNBcnJheSA9IChQZ0JhY2tlbmRCdWZmZXJBY3Rp b25TdGF0cyAqKQorCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBhY3Rpb25zIHRha2VuIGJ5IGVh Y2ggYmFja2VuZCB0eXBlIiwgc2l6ZSwgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCQlNZW1TZXQo QnVmZmVyQWN0aW9uU3RhdHNBcnJheSwgMCwgc2l6ZSk7CisKKwkvLyBUT0RPOiBkbyBJIHdhbnQg YSBsb2NrIG9uIHRoaXMgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBtZW1iZXJzPworCWJhX3N0YXRz ID0gQnVmZmVyQWN0aW9uU3RhdHNBcnJheTsKKwlmb3IgKGkgPSAxOyBpIDwgQkFDS0VORF9OVU1f VFlQRVM7IGkrKykKKwl7CisJCXBnX2F0b21pY19pbml0X3U2NCgmYmFfc3RhdHMtPmFsbG9jcywg MCk7CisJCXBnX2F0b21pY19pbml0X3U2NCgmYmFfc3RhdHMtPmV4dGVuZHMsIDApOworCQlwZ19h dG9taWNfaW5pdF91NjQoJmJhX3N0YXRzLT5mc3luY3MsIDApOworCQlwZ19hdG9taWNfaW5pdF91 NjQoJmJhX3N0YXRzLT53cml0ZXMsIDApOworCQlwZ19hdG9taWNfaW5pdF91NjQoJmJhX3N0YXRz LT53cml0ZXNfc3RyYXQsIDApOworCisJCWJhX3N0YXRzKys7CisJfQorfQorCisKIC8qCiAgKiBJ bml0aWFsaXplIHBnc3RhdHMgYmFja2VuZCBhY3Rpdml0eSBzdGF0ZSwgYW5kIHNldCB1cCBvdXIg b24tcHJvYy1leGl0CiAgKiBob29rLiAgQ2FsbGVkIGZyb20gSW5pdFBvc3RncmVzIGFuZCBBdXhp bGlhcnlQcm9jZXNzTWFpbi4gRm9yIGF1eGlsaWFyeQpAQCAtMzk5LDYgKzQzMCwxMSBAQCBwZ3N0 YXRfYmVzdGFydCh2b2lkKQogCWxiZWVudHJ5LnN0X3Byb2dyZXNzX2NvbW1hbmQgPSBQUk9HUkVT U19DT01NQU5EX0lOVkFMSUQ7CiAJbGJlZW50cnkuc3RfcHJvZ3Jlc3NfY29tbWFuZF90YXJnZXQg PSBJbnZhbGlkT2lkOwogCWxiZWVudHJ5LnN0X3F1ZXJ5X2lkID0gVUlOVDY0Q09OU1QoMCk7CisJ cGdfYXRvbWljX2luaXRfdTY0KCZsYmVlbnRyeS5idWZmZXJfYWN0aW9uX3N0YXRzLmFsbG9jcywg MCk7CisJcGdfYXRvbWljX2luaXRfdTY0KCZsYmVlbnRyeS5idWZmZXJfYWN0aW9uX3N0YXRzLmV4 dGVuZHMsIDApOworCXBnX2F0b21pY19pbml0X3U2NCgmbGJlZW50cnkuYnVmZmVyX2FjdGlvbl9z dGF0cy5mc3luY3MsIDApOworCXBnX2F0b21pY19pbml0X3U2NCgmbGJlZW50cnkuYnVmZmVyX2Fj dGlvbl9zdGF0cy53cml0ZXMsIDApOworCXBnX2F0b21pY19pbml0X3U2NCgmbGJlZW50cnkuYnVm ZmVyX2FjdGlvbl9zdGF0cy53cml0ZXNfc3RyYXQsIDApOwogCiAJLyoKIAkgKiB3ZSBkb24ndCB6 ZXJvIHN0X3Byb2dyZXNzX3BhcmFtIGhlcmUgdG8gc2F2ZSBjeWNsZXM7IG5vYm9keSBzaG91bGQK QEAgLTQ2OSw2ICs1MDUsMTYgQEAgcGdzdGF0X2Jlc2h1dGRvd25faG9vayhpbnQgY29kZSwgRGF0 dW0gYXJnKQogCWJlZW50cnktPnN0X3Byb2NwaWQgPSAwOwkvKiBtYXJrIGludmFsaWQgKi8KIAog CVBHU1RBVF9FTkRfV1JJVEVfQUNUSVZJVFkoYmVlbnRyeSk7CisKKwkvKgorCSAqIEJlY2F1c2Ug dGhlIHN0YXRzIHRyYWNraW5nIHNoYXJlZCBidWZmZXJzIHdyaXR0ZW4gYW5kIGV4dGVuZGVkIGRv IG5vdAorCSAqIGdvIHRocm91Z2ggdGhlIHN0YXRzIGNvbGxlY3RvciwgaXQgZGlkbid0IG1ha2Ug c2Vuc2UgdG8gYWRkIHRoZW0gdG8KKwkgKiBwZ3N0YXRfcmVwb3J0X3N0YXQoKSBBdCBsZWFzdCB0 aGUgRGF0YWJhc2VJZCBzaG91bGQgYmUgdmFsaWQuIE90aGVyd2lzZQorCSAqIHdlIGNhbid0IGJl IHN1cmUgdGhhdCB0aGUgbWVtYmVycyB3ZXJlIHplcm8taW5pdGlhbGl6ZWQgKFRPRE86IGlzIHRo YXQKKwkgKiB0cnVlPykKKwkgKi8KKwlpZiAoT2lkSXNWYWxpZChNeURhdGFiYXNlSWQpKQorCQlw Z3N0YXRfcmVjb3JkX2RlYWRfYmFja2VuZF9idWZmZXJfYWN0aW9ucygpOwogfQogCiAvKgpAQCAt MTA0MSw2ICsxMDg3LDkxIEBAIHBnc3RhdF9nZXRfbXlfcXVlcnlfaWQodm9pZCkKIAkgKi8KIAly ZXR1cm4gTXlCRUVudHJ5LT5zdF9xdWVyeV9pZDsKIH0KK3ZvaWQKK3Bnc3RhdF9pbmNyZW1lbnRf YnVmZmVyX2FjdGlvbihCdWZmZXJBY3Rpb25UeXBlIGJhX3R5cGUpCit7CisJdm9sYXRpbGUgUGdC YWNrZW5kU3RhdHVzICpiZWVudHJ5ICAgPSBNeUJFRW50cnk7CisKKwlpZiAoIWJlZW50cnkgfHwg IXBnc3RhdF90cmFja19hY3Rpdml0aWVzKQorCQlyZXR1cm47CisKKwlpZiAoYmFfdHlwZSA9PSBC QV9BbGxvYykKKwkJcGdfYXRvbWljX2FkZF9mZXRjaF91NjQoJmJlZW50cnktPmJ1ZmZlcl9hY3Rp b25fc3RhdHMuYWxsb2NzLCAxKTsKKwllbHNlIGlmIChiYV90eXBlID09IEJBX0V4dGVuZCkKKwkJ cGdfYXRvbWljX2FkZF9mZXRjaF91NjQoJmJlZW50cnktPmJ1ZmZlcl9hY3Rpb25fc3RhdHMuZXh0 ZW5kcywgMSk7CisJZWxzZSBpZiAoYmFfdHlwZSA9PSBCQV9Gc3luYykKKwkJcGdfYXRvbWljX2Fk ZF9mZXRjaF91NjQoJmJlZW50cnktPmJ1ZmZlcl9hY3Rpb25fc3RhdHMuZnN5bmNzLCAxKTsKKwll bHNlIGlmIChiYV90eXBlID09IEJBX1dyaXRlKQorCQlwZ19hdG9taWNfYWRkX2ZldGNoX3U2NCgm YmVlbnRyeS0+YnVmZmVyX2FjdGlvbl9zdGF0cy53cml0ZXMsIDEpOworCWVsc2UgaWYgKGJhX3R5 cGUgPT0gQkFfV3JpdGVfU3RyYXQpCisJCXBnX2F0b21pY19hZGRfZmV0Y2hfdTY0KCZiZWVudHJ5 LT5idWZmZXJfYWN0aW9uX3N0YXRzLndyaXRlc19zdHJhdCwgMSk7Cit9CisKKy8qCisgKiBDYWxs ZWQgZm9yIGEgc2luZ2xlIGJhY2tlbmQgYXQgdGhlIHRpbWUgb2YgZGVhdGggdG8gcGVyc2lzdCBp dHMgSS9PIHN0YXRzCisgKi8KK3ZvaWQKK3Bnc3RhdF9yZWNvcmRfZGVhZF9iYWNrZW5kX2J1ZmZl cl9hY3Rpb25zKHZvaWQpCit7CisJdm9sYXRpbGUgUGdCYWNrZW5kQnVmZmVyQWN0aW9uU3RhdHMg KmJhX3N0YXRzOworCXZvbGF0aWxlCVBnQmFja2VuZFN0YXR1cyAqYmVlbnRyeSA9IE15QkVFbnRy eTsKKworCWlmIChiZWVudHJ5LT5zdF9wcm9jcGlkICE9IDApCisJCXJldHVybjsKKworCS8vIFRP RE86IGlzIHRoaXMgY29ycmVjdD8gY291bGQgdGhlcmUgYmUgYSBkYXRhIHJhY2U/IGRvIEkgbmVl ZCBhIGxvY2s/CisJYmFfc3RhdHMgPSAmQnVmZmVyQWN0aW9uU3RhdHNBcnJheVtiZWVudHJ5LT5z dF9iYWNrZW5kVHlwZV07CisJcGdfYXRvbWljX2FkZF9mZXRjaF91NjQoJmJhX3N0YXRzLT5hbGxv Y3MsIHBnX2F0b21pY19yZWFkX3U2NCgmYmVlbnRyeS0+YnVmZmVyX2FjdGlvbl9zdGF0cy5hbGxv Y3MpKTsKKwlwZ19hdG9taWNfYWRkX2ZldGNoX3U2NCgmYmFfc3RhdHMtPmV4dGVuZHMsIHBnX2F0 b21pY19yZWFkX3U2NCgmYmVlbnRyeS0+YnVmZmVyX2FjdGlvbl9zdGF0cy5leHRlbmRzKSk7CisJ cGdfYXRvbWljX2FkZF9mZXRjaF91NjQoJmJhX3N0YXRzLT5mc3luY3MsIHBnX2F0b21pY19yZWFk X3U2NCgmYmVlbnRyeS0+YnVmZmVyX2FjdGlvbl9zdGF0cy5mc3luY3MpKTsKKwlwZ19hdG9taWNf YWRkX2ZldGNoX3U2NCgmYmFfc3RhdHMtPndyaXRlcywgcGdfYXRvbWljX3JlYWRfdTY0KCZiZWVu dHJ5LT5idWZmZXJfYWN0aW9uX3N0YXRzLndyaXRlcykpOworCXBnX2F0b21pY19hZGRfZmV0Y2hf dTY0KCZiYV9zdGF0cy0+d3JpdGVzX3N0cmF0LCBwZ19hdG9taWNfcmVhZF91NjQoJmJlZW50cnkt PmJ1ZmZlcl9hY3Rpb25fc3RhdHMud3JpdGVzX3N0cmF0KSk7Cit9CisKKy8qCisgKiBGaWxsIHRo ZSBwcm92aWRlZCB2YWx1ZXMgYXJyYXkgd2l0aCB0aGUgYWNjdW11bGF0ZWQgY291bnRzIG9mIGJ1 ZmZlciBhY3Rpb25zCisgKiB0YWtlbiBieSBhbGwgYmFja2VuZHMgb2YgdHlwZSBiYWNrZW5kX3R5 cGUgKGlucHV0IHBhcmFtZXRlciksIGJvdGggYWxpdmUgYW5kCisgKiBkZWFkLiBUaGlzIGlzIGN1 cnJlbnRseSBvbmx5IHVzZWQgYnkgcGdfc3RhdF9nZXRfYnVmZmVyX2FjdGlvbnMoKSB0byBjcmVh dGUKKyAqIHRoZSByb3dzIGluIHRoZSBwZ19zdGF0X2J1ZmZlcl9hY3Rpb25zIHN5c3RlbSB2aWV3 LgorICovCit2b2lkCitwZ3N0YXRfcmVjb3VudF9hbGxfYnVmZmVyX2FjdGlvbnMoQmFja2VuZFR5 cGUgYmFja2VuZF90eXBlLCBEYXR1bSAqdmFsdWVzKQoreworCWludAkJCWk7CisJdm9sYXRpbGUg UGdCYWNrZW5kU3RhdHVzICpiZWVudHJ5OworCisJLyoKKwkgKiBBZGQgc3RhdHMgZnJvbSBhbGwg ZXhpdGVkIGJhY2tlbmRzCisJICovCisJdmFsdWVzW0JBX0FsbG9jXSA9IHBnX2F0b21pY19yZWFk X3U2NCgmQnVmZmVyQWN0aW9uU3RhdHNBcnJheVtiYWNrZW5kX3R5cGVdLmFsbG9jcyk7CisJdmFs dWVzW0JBX0V4dGVuZF0gPSBwZ19hdG9taWNfcmVhZF91NjQoJkJ1ZmZlckFjdGlvblN0YXRzQXJy YXlbYmFja2VuZF90eXBlXS5leHRlbmRzKTsKKwl2YWx1ZXNbQkFfRnN5bmNdID0gcGdfYXRvbWlj X3JlYWRfdTY0KCZCdWZmZXJBY3Rpb25TdGF0c0FycmF5W2JhY2tlbmRfdHlwZV0uZnN5bmNzKTsK Kwl2YWx1ZXNbQkFfV3JpdGVdID0gcGdfYXRvbWljX3JlYWRfdTY0KCZCdWZmZXJBY3Rpb25TdGF0 c0FycmF5W2JhY2tlbmRfdHlwZV0ud3JpdGVzKTsKKwl2YWx1ZXNbQkFfV3JpdGVfU3RyYXRdID0g cGdfYXRvbWljX3JlYWRfdTY0KCZCdWZmZXJBY3Rpb25TdGF0c0FycmF5W2JhY2tlbmRfdHlwZV0u d3JpdGVzX3N0cmF0KTsKKworCS8qCisJICogTG9vcCB0aHJvdWdoIGFsbCBsaXZlIGJhY2tlbmRz IGFuZCBjb3VudCB0aGVpciBidWZmZXIgYWN0aW9ucworCSAqLworCS8vIFRPRE86IHNlZSBub3Rl IGluIHBnX3N0YXRfZ2V0X2J1ZmZlcl9hY3Rpb25zKCkgYWJvdXQgaW5lZmZpY2llbmN5IG9mIHRo aXMgbWV0aG9kCisKKwliZWVudHJ5ID0gQmFja2VuZFN0YXR1c0FycmF5OworCWZvciAoaSA9IDE7 IGkgPD0gTWF4QmFja2VuZHM7IGkrKykKKwl7CisJCS8qIERvbid0IGNvdW50IGRlYWQgYmFja2Vu ZHMuIFRoZXkgc2hvdWxkIGFscmVhZHkgYmUgY291bnRlZCAqLworCQlpZiAoYmVlbnRyeS0+c3Rf cHJvY3BpZCA9PSAwKQorCQkJY29udGludWU7CisJCWlmIChiZWVudHJ5LT5zdF9iYWNrZW5kVHlw ZSAhPSBiYWNrZW5kX3R5cGUpCisJCQljb250aW51ZTsKKworCQl2YWx1ZXNbQkFfQWxsb2NdICs9 IHBnX2F0b21pY19yZWFkX3U2NCgmYmVlbnRyeS0+YnVmZmVyX2FjdGlvbl9zdGF0cy5hbGxvY3Mp OworCQl2YWx1ZXNbQkFfRXh0ZW5kXSArPSBwZ19hdG9taWNfcmVhZF91NjQoJmJlZW50cnktPmJ1 ZmZlcl9hY3Rpb25fc3RhdHMuZXh0ZW5kcyk7CisJCXZhbHVlc1tCQV9Gc3luY10gKz0gcGdfYXRv bWljX3JlYWRfdTY0KCZiZWVudHJ5LT5idWZmZXJfYWN0aW9uX3N0YXRzLmZzeW5jcyk7CisJCXZh bHVlc1tCQV9Xcml0ZV0gKz0gcGdfYXRvbWljX3JlYWRfdTY0KCZiZWVudHJ5LT5idWZmZXJfYWN0 aW9uX3N0YXRzLndyaXRlcyk7CisJCXZhbHVlc1tCQV9Xcml0ZV9TdHJhdF0gKz0gcGdfYXRvbWlj X3JlYWRfdTY0KCZiZWVudHJ5LT5idWZmZXJfYWN0aW9uX3N0YXRzLndyaXRlc19zdHJhdCk7CisK KwkJYmVlbnRyeSsrOworCX0KK30KIAogCiAvKiAtLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9w Z3N0YXRmdW5jcy5jCmluZGV4IGYwZTA5ZWFlNGQuLmNlNGQ5N2U1YTQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ3N0YXRmdW5jcy5jCkBAIC0xNzgwLDIxICsxNzgwLDUyIEBAIHBnX3N0YXRfZ2V0X2Jn d3JpdGVyX3N0YXRfcmVzZXRfdGltZShQR19GVU5DVElPTl9BUkdTKQogfQogCiBEYXR1bQotcGdf c3RhdF9nZXRfYnVmX3dyaXR0ZW5fYmFja2VuZChQR19GVU5DVElPTl9BUkdTKQorcGdfc3RhdF9n ZXRfYnVmZmVyX2FjdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlQR19SRVRVUk5fSU5UNjQo cGdzdGF0X2ZldGNoX2dsb2JhbCgpLT5idWZfd3JpdHRlbl9iYWNrZW5kKTsKLX0KKwlSZXR1cm5T ZXRJbmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJ VHVwbGVEZXNjCXR1cGRlc2M7CisJVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZTsKKwlNZW1vcnlD b250ZXh0IHBlcl9xdWVyeV9jdHg7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwogCi1EYXR1 bQotcGdfc3RhdF9nZXRfYnVmX2ZzeW5jX2JhY2tlbmQoUEdfRlVOQ1RJT05fQVJHUykKLXsKLQlQ R19SRVRVUk5fSU5UNjQocGdzdGF0X2ZldGNoX2dsb2JhbCgpLT5idWZfZnN5bmNfYmFja2VuZCk7 Ci19CisJLyogQnVpbGQgYSB0dXBsZSBkZXNjcmlwdG9yIGZvciBvdXIgcmVzdWx0IHR5cGUgKi8K KwlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUoZmNpbmZvLCBOVUxMLCAmdHVwZGVzYykgIT0gVFlQ RUZVTkNfQ09NUE9TSVRFKQorCQllbG9nKEVSUk9SLCAicmV0dXJuIHR5cGUgbXVzdCBiZSBhIHJv dyB0eXBlIik7CiAKLURhdHVtCi1wZ19zdGF0X2dldF9idWZfYWxsb2MoUEdfRlVOQ1RJT05fQVJH UykKLXsKLQlQR19SRVRVUk5fSU5UNjQocGdzdGF0X2ZldGNoX2dsb2JhbCgpLT5idWZfYWxsb2Mp OworCXBlcl9xdWVyeV9jdHggPSByc2luZm8tPmVjb250ZXh0LT5lY3h0X3Blcl9xdWVyeV9tZW1v cnk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZXJfcXVlcnlfY3R4KTsK KworCXR1cHN0b3JlID0gdHVwbGVzdG9yZV9iZWdpbl9oZWFwKHRydWUsIGZhbHNlLCB3b3JrX21l bSk7CisJcnNpbmZvLT5yZXR1cm5Nb2RlID0gU0ZSTV9NYXRlcmlhbGl6ZTsKKwlyc2luZm8tPnNl dFJlc3VsdCA9IHR1cHN0b3JlOworCXJzaW5mby0+c2V0RGVzYyA9IHR1cGRlc2M7CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJLy8gVE9ETzogZG9pbmcgdGhlIGxvb3Ag bGlrZSB0aGlzIG1lYW5zIHdlIHdpbGwgbG9vcCB0aHJvdWdoIGFsbCBiYWNrZW5kcyB1cCB0byBC QUNLRU5EX05VTV9UWVBFUyB0aW1lcworCS8vIGNvdWxkIHByZWFsbG9jYXRlIHRoZSB2YWx1ZXMg YXJyYXlzIGFuZCB0aGVuIGxvb3AgdGhyb3VnaCB0aGUgYmFja2VuZHMgb25jZSwgZmlsbGluZyBp biB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIGFycmF5CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBC QUNLRU5EX05VTV9UWVBFUzsgaSsrKQorCXsKKwkJLyoKKwkJICogQ3VycmVudGx5LCB0aGUgb25s eSBzdXBwb3J0ZWQgYmFja2VuZCB0eXBlcyBmb3Igc3RhdHMgYXJlIHRoZSBmb2xsb3dpbmcuCisJ CSAqIElmIHRoaXMgd2VyZSB0byBjaGFuZ2UsIHBnX3Byb2MuZGF0IHdvdWxkIG5lZWQgdG8gYmUg Y2hhbmdlZCBhcyB3ZWxsCisJCSAqIHRvIHJlZmxlY3QgdGhlIG5ldyBleHBlY3RlZCBudW1iZXIg b2Ygcm93cy4KKwkJICovCisJCURhdHVtIHZhbHVlc1tCVUZGRVJfQUNUSU9OX05VTV9UWVBFU107 CisJCWJvb2wgbnVsbHNbQlVGRkVSX0FDVElPTl9OVU1fVFlQRVNdOworCQlpZiAoIShpID09IEJf QkdfV1JJVEVSIHx8IGkgPT0gQl9DSEVDS1BPSU5URVIgfHwgaSA9PSBCX0FVVE9WQUNfV09SS0VS IHx8IGkgPT0gQl9CQUNLRU5EKSkKKwkJCWNvbnRpbnVlOworCisJCU1lbVNldCh2YWx1ZXMsIDAs IHNpemVvZih2YWx1ZXMpKTsKKwkJTWVtU2V0KG51bGxzLCAwLCBzaXplb2YobnVsbHMpKTsKKwor CQl2YWx1ZXNbMF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKEdldEJhY2tlbmRUeXBlRGVzYyhpKSk7 CisJCXBnc3RhdF9yZWNvdW50X2FsbF9idWZmZXJfYWN0aW9ucyhpLCB2YWx1ZXMpOworCQl0dXBs ZXN0b3JlX3B1dHZhbHVlcyh0dXBzdG9yZSwgdHVwZGVzYywgdmFsdWVzLCBudWxscyk7CisJfQor CS8qIGNsZWFuIHVwIGFuZCByZXR1cm4gdGhlIHR1cGxlc3RvcmUgKi8KKwl0dXBsZXN0b3JlX2Rv bmVzdG9yaW5nKHR1cHN0b3JlKTsKKworCXJldHVybiAoRGF0dW0pIDA7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMgYi9zcmMvYmFja2VuZC91 dGlscy9pbml0L21pc2Npbml0LmMKaW5kZXggOGI3Mzg1MGQwZC4uZDA5MjM0MDdmZiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2luaXQvbWlzY2luaXQuYwpAQCAtMjc3LDYgKzI3Nyw4IEBAIEdldEJhY2tlbmRUeXBl RGVzYyhCYWNrZW5kVHlwZSBiYWNrZW5kVHlwZSkKIAkJY2FzZSBCX0xPR0dFUjoKIAkJCWJhY2tl bmREZXNjID0gImxvZ2dlciI7CiAJCQlicmVhazsKKwkJY2FzZSBCQUNLRU5EX05VTV9UWVBFUzoK KwkJCWJyZWFrOwogCX0KIAogCXJldHVybiBiYWNrZW5kRGVzYzsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CmluZGV4IDhjZDAyNTIwODIuLjNkM2EwZWVhM2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dApAQCAtNTU2NSwxOCArNTU2NSwxNSBAQAogICBwcm9uYW1lID0+ICdwZ19zdGF0X2dldF9jaGVj a3BvaW50X3N5bmNfdGltZScsIHByb3ZvbGF0aWxlID0+ICdzJywKICAgcHJvcGFyYWxsZWwgPT4g J3InLCBwcm9yZXR0eXBlID0+ICdmbG9hdDgnLCBwcm9hcmd0eXBlcyA9PiAnJywKICAgcHJvc3Jj ID0+ICdwZ19zdGF0X2dldF9jaGVja3BvaW50X3N5bmNfdGltZScgfSwKLXsgb2lkID0+ICcyNzc1 JywgZGVzY3IgPT4gJ3N0YXRpc3RpY3M6IG51bWJlciBvZiBidWZmZXJzIHdyaXR0ZW4gYnkgYmFj a2VuZHMnLAotICBwcm9uYW1lID0+ICdwZ19zdGF0X2dldF9idWZfd3JpdHRlbl9iYWNrZW5kJywg cHJvdm9sYXRpbGUgPT4gJ3MnLAotICBwcm9wYXJhbGxlbCA9PiAncicsIHByb3JldHR5cGUgPT4g J2ludDgnLCBwcm9hcmd0eXBlcyA9PiAnJywKLSAgcHJvc3JjID0+ICdwZ19zdGF0X2dldF9idWZf d3JpdHRlbl9iYWNrZW5kJyB9LAoteyBvaWQgPT4gJzMwNjMnLAotICBkZXNjciA9PiAnc3RhdGlz dGljczogbnVtYmVyIG9mIGJhY2tlbmQgYnVmZmVyIHdyaXRlcyB0aGF0IGRpZCB0aGVpciBvd24g ZnN5bmMnLAotICBwcm9uYW1lID0+ICdwZ19zdGF0X2dldF9idWZfZnN5bmNfYmFja2VuZCcsIHBy b3ZvbGF0aWxlID0+ICdzJywKLSAgcHJvcGFyYWxsZWwgPT4gJ3InLCBwcm9yZXR0eXBlID0+ICdp bnQ4JywgcHJvYXJndHlwZXMgPT4gJycsCi0gIHByb3NyYyA9PiAncGdfc3RhdF9nZXRfYnVmX2Zz eW5jX2JhY2tlbmQnIH0sCi17IG9pZCA9PiAnMjg1OScsIGRlc2NyID0+ICdzdGF0aXN0aWNzOiBu dW1iZXIgb2YgYnVmZmVyIGFsbG9jYXRpb25zJywKLSAgcHJvbmFtZSA9PiAncGdfc3RhdF9nZXRf YnVmX2FsbG9jJywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9wYXJhbGxlbCA9PiAncicsCi0gIHBy b3JldHR5cGUgPT4gJ2ludDgnLCBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwZ19zdGF0 X2dldF9idWZfYWxsb2MnIH0sCisKKyAgeyBvaWQgPT4gJzg0NTknLCBkZXNjciA9PiAnc3RhdGlz dGljczogY291bnRzIG9mIGJ1ZmZlciBhY3Rpb25zIHRha2VuIGJ5IGVhY2ggYmFja2VuZCB0eXBl JywKKyAgcHJvbmFtZSA9PiAncGdfc3RhdF9nZXRfYnVmZmVyX2FjdGlvbnMnLCBwcm92b2xhdGls ZSA9PiAncycsIHByb2lzc3RyaWN0ID0+ICdmJywKKyAgcHJvcm93cyA9PiAnNCcsIHByb3JldHNl dCA9PiAndCcsCisgIHByb3BhcmFsbGVsID0+ICdyJywgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywg cHJvYXJndHlwZXMgPT4gJycsCisgIHByb2FsbGFyZ3R5cGVzID0+ICd7dGV4dCxpbnQ4LGludDgs aW50OCxpbnQ4LGludDh9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tvLG8sbyxvLG8sb30nLAorICBw cm9hcmduYW1lcyA9PiAne2JhY2tlbmRfdHlwZSxidWZmZXJzX2FsbG9jLGJ1ZmZlcnNfZXh0ZW5k LGJ1ZmZlcnNfZnN5bmMsYnVmZmVyc193cml0ZSxidWZmZXJzX3dyaXRlX3N0cmF0fScsCisgIHBy b3NyYyA9PiAncGdfc3RhdF9nZXRfYnVmZmVyX2FjdGlvbnMnIH0sCiAKIHsgb2lkID0+ICcxMTM2 JywgZGVzY3IgPT4gJ3N0YXRpc3RpY3M6IGluZm9ybWF0aW9uIGFib3V0IFdBTCBhY3Rpdml0eScs CiAgIHByb25hbWUgPT4gJ3BnX3N0YXRfZ2V0X3dhbCcsIHByb2lzc3RyaWN0ID0+ICdmJywgcHJv dm9sYXRpbGUgPT4gJ3MnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9z cmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCA2OGQ4NDBkNjk5Li4yNGQyOTQzZDljIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRt aW4uaApAQCAtMzM2LDggKzMzNiwyMCBAQCB0eXBlZGVmIGVudW0gQmFja2VuZFR5cGUKIAlCX0FS Q0hJVkVSLAogCUJfU1RBVFNfQ09MTEVDVE9SLAogCUJfTE9HR0VSLAorCUJBQ0tFTkRfTlVNX1RZ UEVTLAogfSBCYWNrZW5kVHlwZTsKIAordHlwZWRlZiBlbnVtIEJ1ZmZlckFjdGlvblR5cGUKK3sK KwlCQV9JbnZhbGlkID0gMCwKKwlCQV9BbGxvYywKKwlCQV9FeHRlbmQsCisJQkFfRnN5bmMsCisJ QkFfV3JpdGUsCisJQkFfV3JpdGVfU3RyYXQsCisJQlVGRkVSX0FDVElPTl9OVU1fVFlQRVMsCit9 CQkJQnVmZmVyQWN0aW9uVHlwZTsKKwogZXh0ZXJuIEJhY2tlbmRUeXBlIE15QmFja2VuZFR5cGU7 CiAKIGV4dGVybiBjb25zdCBjaGFyICpHZXRCYWNrZW5kVHlwZURlc2MoQmFja2VuZFR5cGUgYmFj a2VuZFR5cGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5jbHVk ZS9wZ3N0YXQuaAppbmRleCA5NjEyYzBhNmMyLi45ZDBjMmE1ZTFmIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9wZ3N0YXQuaAorKysgYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaApAQCAtNDc1LDkgKzQ3 NSw2IEBAIHR5cGVkZWYgc3RydWN0IFBnU3RhdF9Nc2dCZ1dyaXRlcgogCVBnU3RhdF9Db3VudGVy IG1fYnVmX3dyaXR0ZW5fY2hlY2twb2ludHM7CiAJUGdTdGF0X0NvdW50ZXIgbV9idWZfd3JpdHRl bl9jbGVhbjsKIAlQZ1N0YXRfQ291bnRlciBtX21heHdyaXR0ZW5fY2xlYW47Ci0JUGdTdGF0X0Nv dW50ZXIgbV9idWZfd3JpdHRlbl9iYWNrZW5kOwotCVBnU3RhdF9Db3VudGVyIG1fYnVmX2ZzeW5j X2JhY2tlbmQ7Ci0JUGdTdGF0X0NvdW50ZXIgbV9idWZfYWxsb2M7CiAJUGdTdGF0X0NvdW50ZXIg bV9jaGVja3BvaW50X3dyaXRlX3RpbWU7IC8qIHRpbWVzIGluIG1pbGxpc2Vjb25kcyAqLwogCVBn U3RhdF9Db3VudGVyIG1fY2hlY2twb2ludF9zeW5jX3RpbWU7CiB9IFBnU3RhdF9Nc2dCZ1dyaXRl cjsKQEAgLTg1NCw5ICs4NTEsNiBAQCB0eXBlZGVmIHN0cnVjdCBQZ1N0YXRfR2xvYmFsU3RhdHMK IAlQZ1N0YXRfQ291bnRlciBidWZfd3JpdHRlbl9jaGVja3BvaW50czsKIAlQZ1N0YXRfQ291bnRl ciBidWZfd3JpdHRlbl9jbGVhbjsKIAlQZ1N0YXRfQ291bnRlciBtYXh3cml0dGVuX2NsZWFuOwot CVBnU3RhdF9Db3VudGVyIGJ1Zl93cml0dGVuX2JhY2tlbmQ7Ci0JUGdTdGF0X0NvdW50ZXIgYnVm X2ZzeW5jX2JhY2tlbmQ7Ci0JUGdTdGF0X0NvdW50ZXIgYnVmX2FsbG9jOwogCVRpbWVzdGFtcFR6 IHN0YXRfcmVzZXRfdGltZXN0YW1wOwogfSBQZ1N0YXRfR2xvYmFsU3RhdHM7CiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9idWZfaW50ZXJuYWxzLmgKaW5kZXggMzNmY2FmNWM5YS4uMmJlYzJjZWU0NSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKQEAgLTMxNCw2ICszMTQsOSBAQCBleHRlcm4gQnVm ZmVyRGVzYyAqU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ks CiBleHRlcm4gdm9pZCBTdHJhdGVneUZyZWVCdWZmZXIoQnVmZmVyRGVzYyAqYnVmKTsKIGV4dGVy biBib29sIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5 LAogCQkJCQkJCQkgQnVmZmVyRGVzYyAqYnVmKTsKK2V4dGVybiB2b2lkIFN0cmF0ZWd5VW5DaG9v c2VCdWZmZXJGcm9tUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CitleHRlcm4g dm9pZCBTdHJhdGVneUNob29zZUJ1ZmZlckJ1ZmZlckZyb21SaW5nKEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5KTsKK2V4dGVybiBib29sIFN0cmF0ZWd5SXNCdWZmZXJGcm9tUmluZyhCdWZm ZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CiAKIGV4dGVybiBpbnQJU3RyYXRlZ3lTeW5jU3Rh cnQodWludDMyICpjb21wbGV0ZV9wYXNzZXMsIHVpbnQzMiAqbnVtX2J1Zl9hbGxvYyk7CiBleHRl cm4gdm9pZCBTdHJhdGVneU5vdGlmeUJnV3JpdGVyKGludCBiZ3dwcm9jbm8pOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9zdGF0dXMuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L2JhY2tlbmRfc3RhdHVzLmgKaW5kZXggODA0MmI4MTdkZi4uZjUzNjBiNWFmZiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9zdGF0dXMuaAorKysgYi9zcmMvaW5jbHVkZS91 dGlscy9iYWNrZW5kX3N0YXR1cy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSAiZGF0YXR5 cGUvdGltZXN0YW1wLmgiCiAjaW5jbHVkZSAibGlicHEvcHFjb21tLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCQkJLyogZm9yIEJhY2tlbmRUeXBlICovCisjaW5jbHVkZSAicG9ydC9hdG9taWNz LmgiCiAjaW5jbHVkZSAidXRpbHMvYmFja2VuZF9wcm9ncmVzcy5oIgogCiAKQEAgLTc5LDYgKzgw LDE1IEBAIHR5cGVkZWYgc3RydWN0IFBnQmFja2VuZEdTU1N0YXR1cwogCiB9IFBnQmFja2VuZEdT U1N0YXR1czsKIAordHlwZWRlZiBzdHJ1Y3QgUGdCYWNrZW5kQnVmZmVyQWN0aW9uU3RhdHMKK3sK KwlwZ19hdG9taWNfdWludDY0IGFsbG9jczsKKwlwZ19hdG9taWNfdWludDY0IGV4dGVuZHM7CisJ cGdfYXRvbWljX3VpbnQ2NCBmc3luY3M7CisJcGdfYXRvbWljX3VpbnQ2NCB3cml0ZXM7CisJcGdf YXRvbWljX3VpbnQ2NCB3cml0ZXNfc3RyYXQ7Cit9IFBnQmFja2VuZEJ1ZmZlckFjdGlvblN0YXRz OworCiAKIC8qIC0tLS0tLS0tLS0KICAqIFBnQmFja2VuZFN0YXR1cwpAQCAtMTY4LDYgKzE3OCw4 IEBAIHR5cGVkZWYgc3RydWN0IFBnQmFja2VuZFN0YXR1cwogCiAJLyogcXVlcnkgaWRlbnRpZmll ciwgb3B0aW9uYWxseSBjb21wdXRlZCB1c2luZyBwb3N0X3BhcnNlX2FuYWx5emVfaG9vayAqLwog CXVpbnQ2NAkJc3RfcXVlcnlfaWQ7CisJLy8gVE9ETzogZG8gaXRzIG1lbWJlcnMgbmVlZCB0byBi ZSBhdG9taWNzIHdoZW4gaW4gdGhlIFBnQmFja2VuZFN0YXR1cyBzaW5jZSBvbmx5IHRoaXMgYmFj a2VuZCB3aWxsIHdyaXRlIHRvIHRoZW0/CisJUGdCYWNrZW5kQnVmZmVyQWN0aW9uU3RhdHMgYnVm ZmVyX2FjdGlvbl9zdGF0czsKIH0gUGdCYWNrZW5kU3RhdHVzOwogCiAKQEAgLTI4Miw3ICsyOTQs NyBAQCBleHRlcm4gUEdETExJTVBPUlQgUGdCYWNrZW5kU3RhdHVzICpNeUJFRW50cnk7CiAgKi8K IGV4dGVybiBTaXplIEJhY2tlbmRTdGF0dXNTaG1lbVNpemUodm9pZCk7CiBleHRlcm4gdm9pZCBD cmVhdGVTaGFyZWRCYWNrZW5kU3RhdHVzKHZvaWQpOwotCitleHRlcm4gdm9pZCBDcmVhdGVCdWZm ZXJBY3Rpb25TdGF0c0NvdW50ZXJzKHZvaWQpOwogCiAvKiAtLS0tLS0tLS0tCiAgKiBGdW5jdGlv bnMgY2FsbGVkIGZyb20gYmFja2VuZHMKQEAgLTMwNSw2ICszMTcsOCBAQCBleHRlcm4gY29uc3Qg Y2hhciAqcGdzdGF0X2dldF9iYWNrZW5kX2N1cnJlbnRfYWN0aXZpdHkoaW50IHBpZCwgYm9vbCBj aGVja1VzZXIpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnBnc3RhdF9nZXRfY3Jhc2hlZF9iYWNrZW5k X2FjdGl2aXR5KGludCBwaWQsIGNoYXIgKmJ1ZmZlciwKIAkJCQkJCQkJCQkJCQkgICBpbnQgYnVm bGVuKTsKIGV4dGVybiB1aW50NjQgcGdzdGF0X2dldF9teV9xdWVyeV9pZCh2b2lkKTsKK2V4dGVy biB2b2lkIHBnc3RhdF9pbmNyZW1lbnRfYnVmZmVyX2FjdGlvbihCdWZmZXJBY3Rpb25UeXBlIGJh X3R5cGUpOworZXh0ZXJuIHZvaWQgcGdzdGF0X3JlY291bnRfYWxsX2J1ZmZlcl9hY3Rpb25zKEJh Y2tlbmRUeXBlIGJhY2tlbmRfdHlwZSwgRGF0dW0gKnZhbHVlcyk7CiAKIAogLyogLS0tLS0tLS0t LQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCBlNWFiMTEyNzVkLi42MDljY2Yz YjdiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dApAQCAtMTgyNCwxMCArMTgyNCwx NCBAQCBwZ19zdGF0X2Jnd3JpdGVyfCBTRUxFQ1QgcGdfc3RhdF9nZXRfYmd3cml0ZXJfdGltZWRf Y2hlY2twb2ludHMoKSBBUyBjaGVja3BvaW50cwogICAgIHBnX3N0YXRfZ2V0X2Jnd3JpdGVyX2J1 Zl93cml0dGVuX2NoZWNrcG9pbnRzKCkgQVMgYnVmZmVyc19jaGVja3BvaW50LAogICAgIHBnX3N0 YXRfZ2V0X2Jnd3JpdGVyX2J1Zl93cml0dGVuX2NsZWFuKCkgQVMgYnVmZmVyc19jbGVhbiwKICAg ICBwZ19zdGF0X2dldF9iZ3dyaXRlcl9tYXh3cml0dGVuX2NsZWFuKCkgQVMgbWF4d3JpdHRlbl9j bGVhbiwKLSAgICBwZ19zdGF0X2dldF9idWZfd3JpdHRlbl9iYWNrZW5kKCkgQVMgYnVmZmVyc19i YWNrZW5kLAotICAgIHBnX3N0YXRfZ2V0X2J1Zl9mc3luY19iYWNrZW5kKCkgQVMgYnVmZmVyc19i YWNrZW5kX2ZzeW5jLAotICAgIHBnX3N0YXRfZ2V0X2J1Zl9hbGxvYygpIEFTIGJ1ZmZlcnNfYWxs b2MsCiAgICAgcGdfc3RhdF9nZXRfYmd3cml0ZXJfc3RhdF9yZXNldF90aW1lKCkgQVMgc3RhdHNf cmVzZXQ7CitwZ19zdGF0X2J1ZmZlcl9hY3Rpb25zfCBTRUxFQ1QgYi5iYWNrZW5kX3R5cGUsCisg ICAgYi5idWZmZXJzX2FsbG9jLAorICAgIGIuYnVmZmVyc19leHRlbmQsCisgICAgYi5idWZmZXJz X2ZzeW5jLAorICAgIGIuYnVmZmVyc193cml0ZSwKKyAgICBiLmJ1ZmZlcnNfd3JpdGVfc3RyYXQK KyAgIEZST00gcGdfc3RhdF9nZXRfYnVmZmVyX2FjdGlvbnMoKSBiKGJhY2tlbmRfdHlwZSwgYnVm ZmVyc19hbGxvYywgYnVmZmVyc19leHRlbmQsIGJ1ZmZlcnNfZnN5bmMsIGJ1ZmZlcnNfd3JpdGUs IGJ1ZmZlcnNfd3JpdGVfc3RyYXQpOwogcGdfc3RhdF9kYXRhYmFzZXwgU0VMRUNUIGQub2lkIEFT IGRhdGlkLAogICAgIGQuZGF0bmFtZSwKICAgICAgICAgQ0FTRQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3RhdHMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHMuc3Fs CmluZGV4IGZlYWFlZTYzMjYuLmZiNGI2MTNkNGIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3N0YXRzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwKQEAg LTE3Niw0ICsxNzYsNSBAQCBGUk9NIHByZXZzdGF0cyBBUyBwcjsKIAogRFJPUCBUQUJMRSB0cnVu Y19zdGF0c190ZXN0LCB0cnVuY19zdGF0c190ZXN0MSwgdHJ1bmNfc3RhdHNfdGVzdDIsIHRydW5j X3N0YXRzX3Rlc3QzLCB0cnVuY19zdGF0c190ZXN0NDsKIERST1AgVEFCTEUgcHJldnN0YXRzOwor U0VMRUNUICogRlJPTSBwZ19zdGF0X2J1ZmZlcl9hY3Rpb25zOwogLS0gRW5kIG9mIFN0YXRzIFRl c3QKLS0gCjIuMjcuMAoK --0000000000003a395505c89b0e22--