Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8C0d-000IKY-2T for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 06:58:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8C0c-004Haf-1Y for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 06:58:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8C0c-004HaV-0G for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 06:58:30 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8C0Z-000000009dE-3Mfn for pgsql-hackers@postgresql.org; Thu, 02 Apr 2026 06:58:30 +0000 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-43d23305225so107379f8f.2 for ; Wed, 01 Apr 2026 23:58:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775113105; cv=none; d=google.com; s=arc-20240605; b=AgmV5fOicKYj51JwXlnzizYrSysl00bd5cCn99TuOolsUAvgzyplgiFKQFWCjnWcn/ VfJvYTZ7qiyTU8ThPH6svEf4I96u6OUnJXxdAlbPvty+wzS+dtcrd1PCnT2ReQozttNf em2oSSwxWyiMch02N7mEvQDLrUYyD3Y96qDHa1/N61jfSw7Q6xUTNUw+za3zhGbxWf7a xlhUamLrGziPE3PFHzFjHGa/GC/XuU/oVVjPSFkdBitq5vXCOWcWHn7indKl5cvoWuDC xiDuCiEGY4tOAFN8UOiXVzG/BshNNRBbJccONXMHywoMB0/7VJayxam0TafcRVZXWhgt YDMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=9wISS74HbeK4SsBiytQQ8b0WhCnyl8aos+eZ019m/RM=; fh=FW8NqFaa8WTySS1k3sTqGfpvlNPKYiLT5swSHZi2mUw=; b=E/aDkJ9gEDQ36uj1guKlko4m0RH5c9X0QN6/oRqVcSAgGQHmgKFVz8IQM/HkNhvrA8 RFtKE5EMqAsZGYmBM4jYTYRLQ6SKE26N14oEXJctAC2xM0TU4npfDAptVUQZ/u4ZUqJf 4GaaPf6JmdfE/VWIjWudWTZlbd2YJi2bmFSXRPjutCcjU9FXmq4MXcdTgJ1s6eKgYBzR S87vzuKdd0xH3Zo0a9Ly6OJV3QoLO2I6aNP393hWaNXhcbO4mzLe0C+0BGHF0BMbTR9L b90GZfHhrMDQ0QDuEGg4V1vuELUTIyGOIaRfDRZYaVJsSolqbu4WL0a6O3PTAq9nT3OM iVCQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775113105; x=1775717905; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9wISS74HbeK4SsBiytQQ8b0WhCnyl8aos+eZ019m/RM=; b=LMFiM+h+ojCSfwvgsH83Zx5xRQHNzS0017DteDkXMbBPL0o5Sg22a8aT9BiivgQ+zp eOLh6o8ltztdMRX9q665IY77r+dMmibPE2adoSbSnLsZraHWkRZ2tiNb8Cnu8Repy9tY 0nF7sYv0ZFkJe+WAX8q4ltgk5ZOhGvygDoKHsaRzEpgNLvq4FaFTiMkKfelYwxgq2HJ0 Ht/D2uLn3x1d1rzTuqKa1rHLwQ2vtLDKx8PrYLInNNo8Rww2yaWvWrbgoK5v0EkIVuRR Rdw1jIca7L5x9wntnCSv9pAMUqOL6CVDxMP1lrRLPntynJPT4yoG1mXqIi5z8lbP2oLq RtrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775113105; x=1775717905; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9wISS74HbeK4SsBiytQQ8b0WhCnyl8aos+eZ019m/RM=; b=NpkuNyn/O4En3Q0WvsILAj1XWajAhrtWZb1FTUy67s2yuft+0RIoaHkADOAoCERaZn LjXVD6LD3G2I/+daMWp6IA3BeFP5dsaH6vQXq1E8YO+tE1kf/LINdQ5HvzkOs88874Z6 NT0V90lEzMZggEaEPmgHvn7kDB3PWWWGtJ2erJZSMgrD2HCBC1cq7a9ZITAZwzYsrUW5 KRUtnKZ6CcSNjaArkDTHpIsK7u+OOMrkQoZ0Mp845X9C3ewWQhUgp4oQXrT3ZqPYYHRk 2BQ+r2QLCgpSyCeuAZSByS+ByouMdDb8ZwUhxzYrwE6FUQJ5GuB6wQWzQSRtakQX3L6z Zsxw== X-Forwarded-Encrypted: i=1; AJvYcCUX15stnZyDiZM04Gv0zJ9DJDoZ66TQgL7lHu47Rj2MSslPgfXKhvr1+1eLEIL+ZX+F4daTNb4eca6ue3Vg@postgresql.org X-Gm-Message-State: AOJu0YyDI8nH11deoO3xezHdZRNBO3niwQT1CSUrsrea6jADSS5D7fV1 Tbv6d+otPj20c9JcgbsH94WOB8UGwRIfACaSdGey2EC2jCE5E/KJpZPrWCctp/LU9oUygO7ee4i kDdVEwnJq4woWjZEhyKyg2Y7tbTh9m3U= X-Gm-Gg: ATEYQzxLvp1b759md8eCXVnUtnu+4B9jJVdqrdbou0nXg+F2cUMkyRBbsZms/V3a3Rv iUEvkMVqBs/gN4MwAx8zMGE36bYKbLIS2LCLXNspKMPXU5SsHCaelMLnDkAwrqm5ClKL2pepMUd Ygi5JagekiEKwkku9vw7WyJY/TvOpLfVddmcC9mrFgatZgGVA85B75A77INSabF+Jyt41p6rfvZ BmdRvPH3CoKz0FirOFBiYCzZ39o+dx4f8vL4laSrGKcBZac++ZUtUbjijUN4Z5vUJfbSPQEZXsP wXe9RUUeCJJmA4QyQOX/NEmGzF4OdawiHbQeXYAinKkPQl7TseA4 X-Received: by 2002:a05:6000:22c4:b0:43c:f976:b8de with SMTP id ffacd0b85a97d-43d1507a675mr12380998f8f.20.1775113105038; Wed, 01 Apr 2026 23:58:25 -0700 (PDT) MIME-Version: 1.0 References: <8a6799be-bd42-49fb-8914-856c97bb1977@iki.fi> <113724ab-0028-493f-9605-6e8570f0939f@iki.fi> <791c3f18-f4de-4d84-ac6b-c7ccc074dd38@iki.fi> <9d919bd9-94dd-4bda-8ccf-ebced4178c53@iki.fi> In-Reply-To: <9d919bd9-94dd-4bda-8ccf-ebced4178c53@iki.fi> From: Ashutosh Bapat Date: Thu, 2 Apr 2026 12:28:12 +0530 X-Gm-Features: AQROBzBI8u9v5qF6WFsYf1KwHaTN1AMoGbG1mxgR6jGlY23VDUpTvDOCEvNw0_g Message-ID: Subject: Re: Better shared data structure management and resizable shared data structures To: Heikki Linnakangas Cc: Robert Haas , Andres Freund , pgsql-hackers , chaturvedipalak1911@gmail.com Content-Type: multipart/mixed; boundary="000000000000105a4d064e74baa4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000105a4d064e74baa4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 1, 2026 at 11:47=E2=80=AFPM Heikki Linnakangas wrote: > > Yet another version attached (also available at: > https://github.com/hlinnaka/postgres/tree/shmem-init-refactor-9). The > main change is the shape of the ShmemRequest*() calls: > > On 27/03/2026 02:51, Heikki Linnakangas wrote: > > Another idea is to use a macro to hide that from pgindent, which would > > make the calls little less verbose anyway: > > > > #define ShmemRequestStruct(desc, ...) ShmemRequestStructWithOpts(desc, > > &(ShmemRequestStructOpts) { __VA_ARGS__ }) > > > > Then the call would be simply: > > > > ShmemRequestStruct(&pgssSharedStateDesc, > > .name =3D "pg_stat_statements", > > .size =3D sizeof(pgssSharedState), > > .ptr =3D (void **) &pgss, > > ); > > I went with that approach. We're already doing something similar with > XL_ROUTINE in xlogreader.h: > > #define XL_ROUTINE(...) &(XLogReaderRoutine){__VA_ARGS__} > > The calls look like this: > > xlogreader =3D > XLogReaderAllocate(wal_segment_size, NULL, > XL_ROUTINE(.page_read =3D &XLogPageRead, > .segment_open =3D NULL, > .segment_close =3D wal_segment_close), > private); > > If we followed that example, ShmemRequestStruct() calls would look like > this: > > ShmemRequestStruct(&pgssSharedStateDesc, > SHMEM_STRUCT_OPTS(.name =3D "pg_stat_statements", > .size =3D sizeof(pgssSharedState), > .ptr =3D (void **) &pgss, > ); > > However, I don't like the deep indentation, it feels like the important > stuff is buried to the right. And pgindent insists on that. So I went > with the proposal I quoted above, turning ShmemRequestStruct(...) itself > into a macro. If you need more complex options setup, you can set up the > struct without the macro and call ShmemRequestStructWithOpts() directly, > but so far all of the callers can use the macro. > I like this. I have tried it only for the resizable_shmem structure which is not complex. > > Ashutosh, I think I've addressed most of your comments so far. I'm > replying to just a few of them here that might need more discussion: > Thanks. > > > > +} shmem_startup_state; > > > > This isn't just startup state since the backend can toggle between > > DONE and LATE_ATTACH_OR_INIT states after the startup. Probably > > "shmem_state" would be a better name. > > Renamed to "shmem_request_state". And renamed "LATE_ATTACH_OR_INIT" to > "AFTER_STARTUP_ATTACH_OR_INIT" to match the terminology I used elsewhere. > > I'm still not entirely happy with this state machine. It seems useful to > have it for sanity checking, but it still feels a little unclear what > state you're in at different points in the code, and as an aesthetic > thing, the whole enum feels too prominent given that it's just for > sanity checks. I am ok even if it is used just for sanity checks - but with the shared structure requests coming at any time during the life of a server, it would be easy to get lost without those sanity checks. I also see it being used in RegisterShmemCallbacks(), so it's not for just sanity checks, right? > > > + ShmemStructDesc *desc =3D area->desc; > > + > > + AttachOrInit(desc, false, true); > > + } > > + list_free(requested_shmem_areas); > > + requested_shmem_areas =3D NIL; > > > > If we pop all the nodes from the list, then the list should be NIL > > right? Why do we need to free it? > > > > + else if (!init_allowed) > > + { > > > > For the sake of documentation and sanity, I would add > > Assert(!index_entry) here, possibly with a comment. Otherwise it feels > > like we might be leaving a half-initialized entry in the hash table. > > > > What if attach_allowed is false and the entry is not found? Should we > > throw an error in that case too? It would be foolish to call > > AttachOrInit with both init_allowed and attach_allowed set to false, > > but the API allows it and we should check for that. > > > > It feels like we should do something about the arguments. The function > > is hard to read. init_allowed is actually the action the caller wants > > to take if the entry is not found, and attach_allowed is the action > > the caller wants to take if the entry is found. > > > > Also explain in the comment what does attach mean here especially in > > case of fixed sized structures. > > I renamed it to AttachOrInitShmemIndexEntry, and the args to 'may_init' > and 'may_attach'. But more importantly I added comments to explain the > different usages. Hope that helps.. The explanation in the prologue looks good. But the function is still confusing. Instead of if ... else fi ... chain, I feel organizing this as below would make it more readable. (this was part of one of my earlier edit patches). if (found) ... else { if (!may_init) error if (!index_entry) error ... rest of the code to initialize and attach } But other than that I don't have any other brilliant ideas. > > On 01/04/2026 14:59, Ashutosh Bapat wrote: > > 0008 > > ------ > > - LWLockRelease(AddinShmemInitLock); > > + /* The hash table must be initialized already */ > > + Assert(pgss_hash !=3D NULL); > > > > Does it make sense to also Assert(pgss)? A broader question is do we > > want to make it a pattern that every user of ShmemRequest*() also > > Assert()s that the pointer is non-NULL in the init callback? It is a > > test that the ShmemRequest*(), which is far from, init_fn is working > > correctly. > > The function does a lot of accesses of 'pgss' so if that's NULL you'll > get a crash pretty quickly. I'm not sure if the Assert(pgss_hash !=3D > NULL) is really needed either, but I'm inclined to keep it, as pgss_hash > might not otherwise be accessed in the function, and there are runtime > checks for it in the other functions, so if it's not initialized for > some reason, things might still appear to work to some extent. I don't > think I want to have that as a broader pattern though. In Assert build, an Assert() at least appears in the server log file, that gives a good direction to start investigation. Without Assert, it gives segmentation faults without any idea where it came from. That's a mild benefit of assert. > > > + /* > > + * Extra space to reserve in the shared memory segment, but it's not p= art > > + * of the struct itself. This is used for shared memory hash tables th= at > > + * can grow beyond the initial size when more buckets are allocated. > > + */ > > + size_t extra_size; > > > > When we introduce resizable structures (where even the hash table > > directly itself could be resizable), we will introduce a new field > > max_size which is easy to get confused with extra_size. Maybe we can > > rename extra_size to something like "auxilliary_size" to mean size of > > the auxiliary parts of the structure which are not part of the main > > struct itself. > > > > + /* > > + * max_size is the estimated maximum number of hashtable entries. This= is > > + * not a hard limit, but the access efficiency will degrade if it is > > + * exceeded substantially (since it's used to compute directory size a= nd > > + * the hash table buckets will get overfull). > > + */ > > + size_t max_size; > > + > > + /* > > + * init_size is the number of hashtable entries to preallocate. For a > > + * table whose maximum size is certain, this should be equal to max_si= ze; > > + * that ensures that no run-time out-of-shared-memory failures can occ= ur. > > + */ > > + size_t init_size; > > > > Everytime I look at these two fields, I question whether those are the > > number of entries (i.e. size of the hash table) or number of bytes > > (size of the memory). I know it's the former, but it indicates that > > something needs to be changed here, like changing the names to have > > _entries instead of _size, or changing the type to int64 or some such. > > Renaming to _entries would conflict with dynahash APIs since they use > > _size, so maybe the latter? > > I hear you, but I didn't change these yet. If we go with the patches > from the "Shared hash table allocations" thread, max_size and init_size > will be merged into one. I'll try to settle that thread before making > changes here. Will review those patches next. > > > -void > > -InitProcGlobal(void) > > +static void > > +ProcGlobalShmemInit(void *arg) > > { > > I'm not sure what you meant to say here, but I did notice that there > were a bunch of references to InitProcGlobal() left over in comments. > Fixed those. Oh, I just wanted to say that the new version reads much better than the old version, which had ShmemStructInit() sprinkled at seemingly random places. I missed writing that. Nothing serious there. I also rebased my resizable shmem patch on v9. Attached here. I have addressed the following open items from the list at [1] 1. The test is stable now. I found a way to make (roughly) sure that we are not allocating more than required memory for a resizable structure. 2. Disable the feature on platforms that do not have MADV_POPULATE_WRITE and MADV_REMOVE. The feature is also disabled for EXEC_BACKEND case. I have tested the EXEC_BACKEND case, but I have not tested platforms which do not have those constants defined or on Windows. The first two items from [1] need some discussion still. [1] https://www.postgresql.org/message-id/CAExHW5so6VSxBC-1V=3D35229Z1+dw5v= hw8HxHg9ry7UzceKcXzA@mail.gmail.com --=20 Best Wishes, Ashutosh Bapat --000000000000105a4d064e74baa4 Content-Type: application/octet-stream; name="v9-resizable_shmem_struct.patch.nocibot" Content-Disposition: attachment; filename="v9-resizable_shmem_struct.patch.nocibot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnh3vc2n0 Y29tbWl0IGVmZTBmM2Y1ZWYzMTA5ODY3MzgyZTczNDEwZmQ4MDJhZTJhMGUyOTQKQXV0aG9yOiBB c2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4KRGF0ZTogICBUdWUg RmViIDE3IDE2OjUxOjIwIDIwMjYgKzA1MzAKCiAgICBXSVA6IHJlc2l6YWJsZSBzaGFyZWQgbWVt b3J5IHN0cnVjdHVyZXMKCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMK aW5kZXggMjM0Mjc4MDM1OWEuLjdmMmNhYjlkMTA1IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMK KysrIGIvY29uZmlndXJlLmFjCkBAIC0xODk1LDYgKzE4OTUsMTAgQEAgQUNfQ0hFQ0tfREVDTFMo W21lbXNldF9zXSwgW10sIFtdLCBbI2RlZmluZSBfX1NURENfV0FOVF9MSUJfRVhUMV9fIDEKICMg VGhpcyBpcyBwcm9iYWJseSBvbmx5IHByZXNlbnQgb24gbWFjT1MsIGJ1dCBtYXkgYXMgd2VsbCBj aGVjayBhbHdheXMKIEFDX0NIRUNLX0RFQ0xTKEZfRlVMTEZTWU5DLCBbXSwgW10sIFsjaW5jbHVk ZSA8ZmNudGwuaD5dKQogCisjIExpbnV4LXNwZWNpZmljIG1hZHZpc2UgY29uc3RhbnRzIG5lZWRl ZCBmb3IgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkuIFNlZSBzaW1pbGFyIGNoZWNrcyBpbiBtZXNv bi5idWlsZCBmb3IgZXhwbGFuYXRpb24gb2Ygd2h5IHRoZXNlIGNoZWNrcyBhcmUgaGVyZS4KK0FD X0NIRUNLX0RFQ0xTKFtNQURWX1BPUFVMQVRFX1dSSVRFXSwgW10sIFtdLCBbI2luY2x1ZGUgPHN5 cy9tbWFuLmg+XSkKK0FDX0NIRUNLX0RFQ0xTKFtNQURWX1JFTU9WRV0sIFtdLCBbXSwgWyNpbmNs dWRlIDxzeXMvbW1hbi5oPl0pCisKIEFDX1JFUExBQ0VfRlVOQ1MobTRfbm9ybWFsaXplKFsKIAll eHBsaWNpdF9iemVybwogCWdldG9wdApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12 aWV3cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IDJlYmVjNjky OGQ1Li4zMWNkMmRhYmI1NCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtNDI0Myw4ICs0MjQz LDM5IEBAIFNFTEVDVCAqIEZST00gcGdfbG9ja3MgcGwgTEVGVCBKT0lOIHBnX3ByZXBhcmVkX3hh Y3RzIHBweAogICAgICAgIFNpemUgb2YgdGhlIGFsbG9jYXRpb24gaW4gYnl0ZXMgaW5jbHVkaW5n IHBhZGRpbmcuIEZvciBhbm9ueW1vdXMKICAgICAgICBhbGxvY2F0aW9ucywgbm8gaW5mb3JtYXRp b24gYWJvdXQgcGFkZGluZyBpcyBhdmFpbGFibGUsIHNvIHRoZQogICAgICAgIDxsaXRlcmFsPnNp emU8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5hbGxvY2F0ZWRfc2l6ZTwvbGl0ZXJhbD4gY29sdW1u cwotICAgICAgIHdpbGwgYWx3YXlzIGJlIGVxdWFsLiBQYWRkaW5nIGlzIG5vdCBtZWFuaW5nZnVs IGZvciBmcmVlIG1lbW9yeSwgc28KLSAgICAgICB0aGUgY29sdW1ucyB3aWxsIGJlIGVxdWFsIGlu IHRoYXQgY2FzZSBhbHNvLgorICAgICAgIHdpbGwgYWx3YXlzIGJlIGVxdWFsLiBQYWRkaW5nIGlz IG5vdCBtZWFuaW5nZnVsIGZvciBmcmVlIG1lbW9yeSwgc28gdGhlCisgICAgICAgY29sdW1ucyB3 aWxsIGJlIGVxdWFsIGluIHRoYXQgY2FzZSBhbHNvLiBGb3IgcmVzaXphYmxlIGFsbG9jYXRpb25z IHdoaWNoCisgICAgICAgbWF5IHNwYW4gbXVsdGlwbGUgbWVtb3J5IHBhZ2VzLCB0aGUgcGFkZGlu ZyBpbmNsdWRlcyB0aGUgcGFkZGluZyBkdWUgdG8KKyAgICAgICBwYWdlIGFsaWdubWVudC4KKyAg ICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVu dHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0 aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+bWF4aW11bV9zaXplPC9zdHJ1Y3RmaWVsZD4gPHR5 cGU+aW50ODwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIE1heGlt dW0gc2l6ZSBpbiBieXRlcyB0aGF0IHRoZSBhbGxvY2F0aW9uIGNhbiBncm93IHVwdG8uIEZvciBm aXhlZC1zaXplIGFsbG9jYXRpb25zCisgICAgICAgPHN0cnVjdGZpZWxkPmFsbG9jYXRlZF9zaXpl PC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICAgPHN0cnVjdGZpZWxkPm1heGl1bV9zaXplPC9zdHJ1 Y3RmaWVsZD4gYXJlIHNhbWUuIEZvciBhbm9ueW1vdXMKKyAgICAgICBhbGxvY2F0aW9ucywgbm8g aW5mb3JtYXRpb24gYWJvdXQgbWF4aW11bSBzaXplIGlzIGF2YWlsYWJsZSwgc28gdGhlCisgICAg ICAgPGxpdGVyYWw+c2l6ZTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPm1heGltdW1fc2l6ZTwvbGl0 ZXJhbD4gY29sdW1ucyB3aWxsCisgICAgICAgYWx3YXlzIGJlIGVxdWFsLiBNYXhpbXVtIHNpemUg aXMgbm90IG1lYW5pbmdmdWwgZm9yIGZyZWUgbWVtb3J5LCBzbyB0aGUKKyAgICAgICBjb2x1bW5z IHdpbGwgYmUgZXF1YWwgaW4gdGhhdCBjYXNlIGFsc28uCisgICAgICA8L3BhcmE+PC9lbnRyeT4K KyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3Rh YmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVj dGZpZWxkPmFsbG9jYXRlZF9zcGFjZTwvc3RydWN0ZmllbGQ+IDx0eXBlPmludDg8L3R5cGU+Cisg ICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBBZGRyZXNzIHNwYWNlLCBhcyBhZ2Fp bnN0IHRoZSBtZW1vcnksIGFsbG9jYXRlZCBmb3IgdGhpcyBhbGxvY2F0aW9uIGluCisgICAgICAg dGVybXMgb2YgYnl0ZXMgZm9yIHJlc2l6YWJsZSBzdHJ1Y3R1cmVzLiBJdCBpcyBncmVhdGVyIHRo YW4gb3IgZXF1YWwgdG8KKyAgICAgICA8c3RydWN0ZmllbGQ+YWxsb2NhdGVkX3NpemU8L3N0cnVj dGZpZWxkPiBmb3IgdGhlc2Ugc3RydWN0dXJlcy4gSXQgYWxzbworICAgICAgIGluY2x1ZGVzIHBh ZGRpbmcsIGlmIGFueS4gRm9yIGZpeGVkLXNpemUgYWxsb2NhdGlvbnMsIGFub255bW91cworICAg ICAgIGFsbG9jYXRpb25zLCBhbmQgZnJlZSBtZW1vcnkgdGhpcyBpcyBzYW1lIGFzCisgICAgICAg PHN0cnVjdGZpZWxkPmFsbG9jYXRlZF9zaXplPC9zdHJ1Y3RmaWVsZD4uCiAgICAgICA8L3BhcmE+ PC9lbnRyeT4KICAgICAgPC9yb3c+CiAgICAgPC90Ym9keT4KZGlmZiAtLWdpdCBhL21lc29uLmJ1 aWxkIGIvbWVzb24uYnVpbGQKaW5kZXggOGIxMzRiMjhhNjkuLjUzMTBhOTc4OWFhIDEwMDY0NAot LS0gYS9tZXNvbi5idWlsZAorKysgYi9tZXNvbi5idWlsZApAQCAtMjgzNyw2ICsyODM3LDIyIEBA IGRlY2xfY2hlY2tzID0gWwogICBbJ3RpbWluZ3NhZmVfYmNtcCcsICAnc3RyaW5nLmgnXSwKIF0K IAorIyBMaW51eC1zcGVjaWZpYyBtYWR2aXNlIGNvbnN0YW50cyBuZWVkZWQgZm9yIHJlc2l6YWJs ZSBzaGFyZWQgbWVtb3J5LgorIyBVc3VhbGx5IHdlIHVzZSBBQ19DSEVDS19ERUNMUyB0byBjaGVj ayBmb3IgZnVuY3Rpb24gZGVjbGFyYXRpb25zLCBidXQgaW4gdGhpcworIyBjYXNlIHdlIGFyZSB1 c2luZyBpdCB0byBkZXRlY3QgZXhpc3RlbmNlIG9mIGNvbnN0YW50cy4gVGhlc2UgY29uc3RhbnRz IGFyZQorIyB1c2VkIHRvIGRlZmluZSBIQVZFX1JFU0laQUJMRV9TSE1FTSB3aGljaCBpcyB1c2Vk IGluIHN0b3JhZ2UvcGdfc2htZW0uaCBhcworIyB3ZWxsIGFzIHN0b3JhZ2Uvc2htZW0uaC4gVGhl IGZpcnN0IGFic3RyYWN0cyB0aGUgQVBJcyB0byBhbGxvY2F0ZSBzaGFyZWQKKyMgbWVtb3J5IHNl Z21lbnRzIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2hlcmVhcyB0aGUgc2Vjb25kIGFic3Ry YWN0cyBBUElzIHRvCisjIGFsbG9jYXRlIHNoYXJlZCBtZW1vcnkgdG8gdmFyaW91cyBzdWJzeXN0 ZW1zLiBTaW5jZSB0aGV5IGFyZSByZWxhdGVkIGJ1dAorIyBvcnRob2dvbmFsIHRvIGVhY2ggb3Ro ZXIsIGluY2x1ZGluZyBhbnkgb25lIG9mIHRoZW0gaW4gdGhlIG90aGVyIGZpbGUgZG9lc24ndAor IyBtYWtlIHNlbnNlLiBwZ19jb25maWdfbWFudWFsLmggaXMgdGhlIG9ubHkgcGxhY2Ugd2hlcmUg SEFWRV9SRVNJWkFCTEVfU0hNRU0KKyMgY2FuIGJlIGRlZmluZWQgYW5kIG1hZGUgYXZhaWxhYmxl IHRvIGJvdGggd2l0aG91dCBpbmNsdWRpbmcgc3lzL21tYW4uaC4gQnV0CisjIGZvciB0aGF0IHdl IG5lZWQgY29uc3RhbnRzIHRoYXQgaW5kaWNhdGUgdGhlIGV4aXN0ZW5jZSBvZiBmb2xsb3dpbmcg ZGVmaW5lcy4KK2RlY2xfY2hlY2tzICs9IFsKKyAgWydNQURWX1BPUFVMQVRFX1dSSVRFJywgJ3N5 cy9tbWFuLmgnXSwKKyAgWydNQURWX1JFTU9WRScsICdzeXMvbW1hbi5oJ10sCitdCisKICMgTmVl ZCB0byBjaGVjayBmb3IgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGVzZSBmdW5jdGlvbnMs IGJlY2F1c2UKICMgY2hlY2tpbmcgZm9yIGxpYnJhcnkgc3ltYm9scyB3b3VsZG4ndCBoYW5kbGUg ZGVwbG95bWVudCB0YXJnZXQKICMgcmVzdHJpY3Rpb25zIG9uIG1hY09TCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wb3J0L3N5c3Zfc2htZW0uYyBiL3NyYy9iYWNrZW5kL3BvcnQvc3lzdl9zaG1l bS5jCmluZGV4IDJlMzg4NmNmOWZlLi4yZTcxYTY4MjNmMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcG9ydC9zeXN2X3NobWVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9ydC9zeXN2X3NobWVtLmMK QEAgLTU4OSw2ICs1ODksMjcgQEAgY2hlY2tfaHVnZV9wYWdlX3NpemUoaW50ICpuZXd2YWwsIHZv aWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAq IEdldCB0aGUgcGFnZSBzaXplIGJlaW5nIHVzZWQgYnkgdGhlIHNoYXJlZCBtZW1vcnkuCisgKgor ICogVGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciB0aGUgc2hhcmVkIG1l bW9yeSBoYXMgYmVlbiBzZXR1cC4KKyAqLworU2l6ZQorR2V0T1NQYWdlU2l6ZSh2b2lkKQorewor CVNpemUJCW9zX3BhZ2Vfc2l6ZTsKKworCUFzc2VydChodWdlX3BhZ2VzX3N0YXR1cyAhPSBIVUdF X1BBR0VTX1VOS05PV04pOworCisJb3NfcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUp OworCisJLyogSWYgaHVnZSBwYWdlcyBhcmUgYWN0dWFsbHkgaW4gdXNlLCB1c2UgaHVnZSBwYWdl IHNpemUgKi8KKwlpZiAoaHVnZV9wYWdlc19zdGF0dXMgPT0gSFVHRV9QQUdFU19PTikKKwkJR2V0 SHVnZVBhZ2VTaXplKCZvc19wYWdlX3NpemUsIE5VTEwpOworCisJcmV0dXJuIG9zX3BhZ2Vfc2l6 ZTsKK30KKwogLyoKICAqIENyZWF0ZXMgYW4gYW5vbnltb3VzIG1tYXAoKWVkIHNoYXJlZCBtZW1v cnkgc2VnbWVudC4KICAqCkBAIC05OTEsMyArMTAxMiw1MyBAQCBQR1NoYXJlZE1lbW9yeURldGFj aCh2b2lkKQogCQlBbm9ueW1vdXNTaG1lbSA9IE5VTEw7CiAJfQogfQorCisjaWZkZWYgSEFWRV9S RVNJWkFCTEVfU0hNRU0KKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IG9mIGdpdmVu IHNpemUgZnJvbSB0aGUgZ2l2ZW4gYWRkcmVzcyBpcyByZWxlYXNlZC4KKyAqCisgKiBUaGUgYWRk cmVzcyBhbmQgc2l6ZSBhcmUgZXhwZWN0ZWQgdG8gYmUgcGFnZSBhbGlnbmVkLgorICoKKyAqIE9u bHkgc3VwcG9ydGVkIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgYW5vbnltb3VzIHNoYXJlZCBt ZW1vcnkuCisgKi8KK3ZvaWQKK1BHU2hhcmVkTWVtb3J5RW5zdXJlRnJlZWQodm9pZCAqYWRkciwg U2l6ZSBzaXplKQoreworCWlmICghQW5vbnltb3VzU2htZW0pCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2co Im9ubHkgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnkgY2FuIGJlIGZyZWVkIikpKTsKKworCUFzc2Vy dChhZGRyID09ICh2b2lkICopIFRZUEVBTElHTihHZXRPU1BhZ2VTaXplKCksIGFkZHIpKTsKKwlB c3NlcnQoc2l6ZSA9PSBUWVBFQUxJR04oR2V0T1NQYWdlU2l6ZSgpLCBzaXplKSk7CisJQXNzZXJ0 KHNpemUgPiAwKTsKKworCWlmIChtYWR2aXNlKGFkZHIsIHNpemUsIE1BRFZfUkVNT1ZFKSA9PSAt MSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3QgZnJlZSBzaGFyZWQg bWVtb3J5OiAlbSIpKSk7Cit9CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IG9m IGdpdmVuIHNpemUgZnJvbSB0aGUgZ2l2ZW4gYWRkcmVzcyBpcyBhbGxvY2F0ZWQuCisgKgorICog VGhlIGFkZHJlc3MgYW5kIHNpemUgYXJlIGV4cGVjdGVkIHRvIGJlIHBhZ2UgYWxpZ25lZC4KKyAq CisgKiBPbmx5IHN1cHBvcnRlZCBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGFub255bW91cyBz aGFyZWQgbWVtb3J5LgorICovCit2b2lkCitQR1NoYXJlZE1lbW9yeUVuc3VyZUFsbG9jYXRlZCh2 b2lkICphZGRyLCBTaXplIHNpemUpCit7CisJaWYgKCFBbm9ueW1vdXNTaG1lbSkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkJIGVycm1zZygib25seSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeSBjYW4gYmUgYWxsb2NhdGVk IGF0IHJ1bnRpbWUiKSkpOworCisJQXNzZXJ0KGFkZHIgPT0gKHZvaWQgKikgVFlQRUFMSUdOKEdl dE9TUGFnZVNpemUoKSwgYWRkcikpOworCUFzc2VydChzaXplID09IFRZUEVBTElHTihHZXRPU1Bh Z2VTaXplKCksIHNpemUpKTsKKwlBc3NlcnQoc2l6ZSA+IDApOworCisJaWYgKG1hZHZpc2UoYWRk ciwgc2l6ZSwgTUFEVl9QT1BVTEFURV9XUklURSkgPT0gLTEpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycm1zZygiY291bGQgbm90IGFsbG9jYXRlIHNoYXJlZCBtZW1vcnk6ICVtIikpKTsKK30K KyNlbmRpZgkJCQkJCQkvKiBIQVZFX1JFU0laQUJMRV9TSE1FTSAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcG9ydC93aW4zMl9zaG1lbS5jIGIvc3JjL2JhY2tlbmQvcG9ydC93aW4zMl9zaG1l bS5jCmluZGV4IDc5NGU0ZmNiMmFkLi5kYzJlZTAxODg0NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcG9ydC93aW4zMl9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3BvcnQvd2luMzJfc2htZW0u YwpAQCAtNjQ4LDMgKzY0OCwyNiBAQCBjaGVja19odWdlX3BhZ2Vfc2l6ZShpbnQgKm5ld3ZhbCwg dm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KKwor LyoKKyAqIEdldCB0aGUgcGFnZSBzaXplIHVzZWQgYnkgdGhlIHNoYXJlZCBtZW1vcnkuCisgKgor ICogVGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciB0aGUgc2hhcmVkIG1l bW9yeSBoYXMgYmVlbiBzZXR1cC4KKyAqLworU2l6ZQorR2V0T1NQYWdlU2l6ZSh2b2lkKQorewor CVNZU1RFTV9JTkZPIHN5c2luZm87CisJU2l6ZQkJb3NfcGFnZV9zaXplOworCisJQXNzZXJ0KGh1 Z2VfcGFnZXNfc3RhdHVzICE9IEhVR0VfUEFHRVNfVU5LTk9XTik7CisKKwlHZXRTeXN0ZW1JbmZv KCZzeXNpbmZvKTsKKwlvc19wYWdlX3NpemUgPSBzeXNpbmZvLmR3UGFnZVNpemU7CisKKwkvKiBJ ZiBodWdlIHBhZ2VzIGFyZSBhY3R1YWxseSBpbiB1c2UsIHVzZSBodWdlIHBhZ2Ugc2l6ZSAqLwor CWlmIChodWdlX3BhZ2VzX3N0YXR1cyA9PSBIVUdFX1BBR0VTX09OKQorCQlHZXRIdWdlUGFnZVNp emUoJm9zX3BhZ2Vfc2l6ZSwgTlVMTCk7CisKKwlyZXR1cm4gb3NfcGFnZV9zaXplOworfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggZGJiNjY4NGFjMTAuLjBjOTc0Y2UxMTI1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTE3MCw2ICsxNzAsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlT aG1lbUFyZWFLaW5kIGtpbmQ7CiB9IFNobWVtUmVxdWVzdDsKIAorI2lmZGVmIEhBVkVfUkVTSVpB QkxFX1NITUVNCisjZGVmaW5lIFNITUVNX1JFUVVFU1RfU1BBQ0VfU0laRShyZXF1ZXN0KSBcCisJ KChyZXF1ZXN0KS0+b3B0aW9ucy0+bWF4aW11bV9zaXplID4gMCA/IChyZXF1ZXN0KS0+b3B0aW9u cy0+bWF4aW11bV9zaXplIDogKHJlcXVlc3QpLT5vcHRpb25zLT5zaXplKQorI2Vsc2UKKyNkZWZp bmUgU0hNRU1fUkVRVUVTVF9TUEFDRV9TSVpFKHJlcXVlc3QpICgocmVxdWVzdCktPm9wdGlvbnMt PnNpemUpCisjZW5kaWYKKwogc3RhdGljIExpc3QgKnBlbmRpbmdfc2htZW1fcmVxdWVzdHM7CiAK IC8qCkBAIC0yNzEsNiArMjc4LDEwIEBAIHR5cGVkZWYgc3RydWN0CiAJdm9pZAkgICAqbG9jYXRp b247CQkvKiBsb2NhdGlvbiBpbiBzaGFyZWQgbWVtICovCiAJU2l6ZQkJc2l6ZTsJCQkvKiAjIGJ5 dGVzIHJlcXVlc3RlZCBmb3IgdGhlIHN0cnVjdHVyZSAqLwogCVNpemUJCWFsbG9jYXRlZF9zaXpl OyAvKiAjIGJ5dGVzIGFjdHVhbGx5IGFsbG9jYXRlZCAqLworI2lmZGVmIEhBVkVfUkVTSVpBQkxF X1NITUVNCisJU2l6ZQkJbWF4aW11bV9zaXplOwkvKiB0aGUgbWF4aW11bSBzaXplIGEgc3RydWN0 dXJlIGNhbiBncm93IHRvICovCisJU2l6ZQkJYWxsb2NhdGVkX3NwYWNlOwkvKiB0aGUgdG90YWwg YWRkcmVzcyBzcGFjZSBhbGxvY2F0ZWQgKi8KKyNlbmRpZgogfSBTaG1lbUluZGV4RW50OwogCiAv KiBUbyBnZXQgcmVsaWFibGUgcmVzdWx0cyBmb3IgTlVNQSBpbnF1aXJ5IHdlIG5lZWQgdG8gInRv dWNoIHBhZ2VzIiBvbmNlICovCkBAIC0yNzgsNiArMjg5LDkgQEAgc3RhdGljIGJvb2wgZmlyc3RO dW1hVG91Y2ggPSB0cnVlOwogCiBzdGF0aWMgYm9vbCBBdHRhY2hPckluaXRTaG1lbUluZGV4RW50 cnkoU2htZW1SZXF1ZXN0ICpyZXF1ZXN0LAogCQkJCQkJCQkJCWJvb2wgbWF5X2luaXQsIGJvb2wg bWF5X2F0dGFjaCk7CisjaWZkZWYgSEFWRV9SRVNJWkFCTEVfU0hNRU0KK3N0YXRpYyBTaXplIEVz dGltYXRlQWxsb2NhdGVkU2l6ZShTaG1lbUluZGV4RW50ICplbnRyeSk7CisjZW5kaWYKIAogRGF0 dW0JCXBnX251bWFfYXZhaWxhYmxlKFBHX0ZVTkNUSU9OX0FSR1MpOwogCkBAIC0zNDksNiArMzYz LDExIEBAIFNobWVtUmVxdWVzdEludGVybmFsKFNobWVtU3RydWN0RGVzYyAqZGVzYywgU2htZW1T dHJ1Y3RPcHRzICpvcHRpb25zLAogCQlpZiAob3B0aW9ucy0+c2l6ZSA8PSAwICYmIG9wdGlvbnMt PnNpemUgIT0gU0hNRU1fQVRUQUNIX1VOS05PV05fU0laRSkKIAkJCWVsb2coRVJST1IsICJpbnZh bGlkIHNpemUgJXpkIGZvciBzaGFyZWQgbWVtb3J5IHJlcXVlc3QgZm9yIFwiJXNcIiIsCiAJCQkJ IG9wdGlvbnMtPnNpemUsIG9wdGlvbnMtPm5hbWUpOworI2lmZGVmIEhBVkVfUkVTSVpBQkxFX1NI TUVNCisJCWlmIChvcHRpb25zLT5tYXhpbXVtX3NpemUgPCAwICYmIG9wdGlvbnMtPm1heGltdW1f c2l6ZSAhPSBTSE1FTV9BVFRBQ0hfVU5LTk9XTl9TSVpFKQorCQkJZWxvZyhFUlJPUiwgImludmFs aWQgbWF4aW11bV9zaXplICV6ZCBmb3Igc2hhcmVkIG1lbW9yeSByZXF1ZXN0IGZvciBcIiVzXCIi LAorCQkJCSBvcHRpb25zLT5tYXhpbXVtX3NpemUsIG9wdGlvbnMtPm5hbWUpOworI2VuZGlmCiAJ fQogCWVsc2UKIAl7CkBAIC0zNTcsOCArMzc2LDI0IEBAIFNobWVtUmVxdWVzdEludGVybmFsKFNo bWVtU3RydWN0RGVzYyAqZGVzYywgU2htZW1TdHJ1Y3RPcHRzICpvcHRpb25zLAogCQlpZiAob3B0 aW9ucy0+c2l6ZSA8PSAwKQogCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2l6ZSAlemQgZm9yIHNo YXJlZCBtZW1vcnkgcmVxdWVzdCBmb3IgXCIlc1wiIiwKIAkJCQkgb3B0aW9ucy0+c2l6ZSwgb3B0 aW9ucy0+bmFtZSk7CisjaWZkZWYgSEFWRV9SRVNJWkFCTEVfU0hNRU0KKwkJaWYgKG9wdGlvbnMt Pm1heGltdW1fc2l6ZSA9PSBTSE1FTV9BVFRBQ0hfVU5LTk9XTl9TSVpFKQorCQkJZWxvZyhFUlJP UiwgIlNITUVNX0FUVEFDSF9VTktOT1dOX1NJWkUgY2Fubm90IGJlIHVzZWQgZHVyaW5nIHN0YXJ0 dXAiKTsKKwkJaWYgKG9wdGlvbnMtPm1heGltdW1fc2l6ZSA8IDApCisJCQllbG9nKEVSUk9SLCAi aW52YWxpZCBtYXhpbXVtX3NpemUgJXpkIGZvciBzaGFyZWQgbWVtb3J5IHJlcXVlc3QgZm9yIFwi JXNcIiIsCisJCQkJIG9wdGlvbnMtPm1heGltdW1fc2l6ZSwgb3B0aW9ucy0+bmFtZSk7CisjZW5k aWYKIAl9CiAKKyNpZmRlZiBIQVZFX1JFU0laQUJMRV9TSE1FTQorCWlmIChvcHRpb25zLT5tYXhp bXVtX3NpemUgPiAwICYmIG9wdGlvbnMtPnNpemUgPj0gb3B0aW9ucy0+bWF4aW11bV9zaXplKQor CQllbG9nKEVSUk9SLCAicmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIFwiJXNcIiBz aG91bGQgaGF2ZSBtYXhpbXVtIHNpemUgKCV6ZCkgZ3JlYXRlciB0aGFuIHNpemUgKCV6ZCkiLAor CQkJIG9wdGlvbnMtPm5hbWUsIG9wdGlvbnMtPm1heGltdW1fc2l6ZSwgb3B0aW9ucy0+c2l6ZSk7 CisKKwlpZiAob3B0aW9ucy0+bWF4aW11bV9zaXplID4gMCAmJiBzaGFyZWRfbWVtb3J5X3R5cGUg IT0gU0hNRU1fVFlQRV9NTUFQKQorCQllbG9nKEVSUk9SLCAicmVzaXphYmxlIHNoYXJlZCBtZW1v cnkgcmVxdWlyZXMgc2hhcmVkX21lbW9yeV90eXBlID0gbW1hcCIpOworI2VuZGlmCisKIAlpZiAo c2htZW1fcmVxdWVzdF9zdGF0ZSAhPSBTUlNfUkVRVUVTVElORykKIAkJZWxvZyhFUlJPUiwgIlNo bWVtUmVxdWVzdFN0cnVjdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBhIHNobWVtX3JlcXVlc3Qg Y2FsbGJhY2siKTsKIApAQCAtMzc5LDggKzQxNCwxMiBAQCBTaG1lbVJlcXVlc3RJbnRlcm5hbChT aG1lbVN0cnVjdERlc2MgKmRlc2MsIFNobWVtU3RydWN0T3B0cyAqb3B0aW9ucywKIH0KIAogLyoK LSAqCVNobWVtR2V0UmVxdWVzdGVkU2l6ZSgpIC0tLSBlc3RpbWF0ZSB0aGUgdG90YWwgc2l6ZSBv ZiBhbGwgcmVnaXN0ZXJlZCBzaGFyZWQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWVtb3J5IHN0cnVjdHVyZXMuCisgKiBTaG1lbUdldFJlcXVlc3RlZFNpemUoKSAtLS0gZXN0aW1h dGUgdGhlIHRvdGFsIHNpemUgb2YgYWxsIHJlZ2lzdGVyZWQgc2hhcmVkCisgKiBtZW1vcnkgc3Ry dWN0dXJlcy4KKyAqCisgKiBXaGVuIG1heGltdW1fc2l6ZSBpcyBzcGVjaWZpZWQgZm9yIGEgcmVx dWVzdCwgd2UgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUKKyAqIGluaXRpYWwgc2l6ZSBmb3IgdGhl IGVzdGltYXRpb24sIHRvIGVuc3VyZSB0aGF0IGVub3VnaCBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9y CisgKiByZXNpemFibGUgc3RydWN0dXJlcy4KICAqCiAgKiBUaGlzIGlzIGNhbGxlZCBvbmNlIGF0 IHBvc3RtYXN0ZXIgc3RhcnR1cCwgYmVmb3JlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKICAq IGhhcyBiZWVuIGNyZWF0ZWQuCkBAIC0zOTcsNyArNDM2LDcgQEAgU2htZW1HZXRSZXF1ZXN0ZWRT aXplKHZvaWQpCiAJLyogbWVtb3J5IG5lZWRlZCBmb3IgYWxsIHRoZSByZXF1ZXN0ZWQgYXJlYXMg Ki8KIAlmb3JlYWNoX3B0cihTaG1lbVJlcXVlc3QsIHJlcXVlc3QsIHBlbmRpbmdfc2htZW1fcmVx dWVzdHMpCiAJewotCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgcmVxdWVzdC0+b3B0aW9ucy0+c2l6 ZSk7CisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTSE1FTV9SRVFVRVNUX1NQQUNFX1NJWkUocmVx dWVzdCkpOwogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgcmVxdWVzdC0+b3B0aW9ucy0+ZXh0cmFf c2l6ZSk7CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCByZXF1ZXN0LT5vcHRpb25zLT5hbGlnbm1l bnQpOwogCX0KQEAgLTU4MywxMyArNjIyLDE4IEBAIEF0dGFjaE9ySW5pdFNobWVtSW5kZXhFbnRy eShTaG1lbVJlcXVlc3QgKnJlcXVlc3QsCiAJewogCQkvKgogCQkgKiBXZSBpbnNlcnRlZCB0aGUg ZW50cnkgdG8gdGhlIHNoYXJlZCBtZW1vcnkgaW5kZXguIEFsbG9jYXRlCi0JCSAqIHJlcXVlc3Rl ZCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBmb3IgaXQsIGFuZCBkbyBiYXNpYwotCQkgKiBpbml0 aWFsaXppb24uCisJCSAqIHJlcXVlc3RlZCBhbW91bnQgb2YgYWRkcmVzcyBzcGFjZSBpbiB0aGUg c2hhcmVkIG1lbW9yeSBzZWdtZW50IGZvcgorCQkgKiBpdCwgYW5kIGRvIGJhc2ljIGluaXRpYWxp emlvbi4gVGhlIG1lbW9yeSBnZXRzIG1hcHBlZCBkdXJpbmcKKwkJICogaW5pdGlhbGl6YXRpb24g YXMgdGhlIGNvcnJlc3BvbmRpbmcgbWVtb3J5IHBhZ2VzIGFyZSB3cml0dGVuIHRvLgorCQkgKiBB bGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGEgcmVzaXphYmxlIHN0cnVjdHVyZSB0byBncm93IHRv IGl0cworCQkgKiBtYXhpbXVtIHNpemUuIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGluaXRpYWxp emF0aW9uIGNhbGxiYWNrIHdpbGwKKwkJICogdXNlIG9ubHkgYXMgbXVjaCBtZW1vcnkgYXMgdGhl IGluaXRpYWwgc2l6ZSBvZiB0aGUgcmVzaXphYmxlCisJCSAqIHN0cnVjdHVyZS4KIAkJICovCiAJ CXNpemVfdAkJYWxsb2NhdGVkX3NpemU7CiAJCXZvaWQJICAgKnN0cnVjdFB0cjsKIAotCQlzdHJ1 Y3RQdHIgPSBTaG1lbUFsbG9jUmF3KHJlcXVlc3QtPm9wdGlvbnMtPnNpemUsIHJlcXVlc3QtPm9w dGlvbnMtPmFsaWdubWVudCwgJmFsbG9jYXRlZF9zaXplKTsKKwkJc3RydWN0UHRyID0gU2htZW1B bGxvY1JhdyhTSE1FTV9SRVFVRVNUX1NQQUNFX1NJWkUocmVxdWVzdCksIHJlcXVlc3QtPm9wdGlv bnMtPmFsaWdubWVudCwgJmFsbG9jYXRlZF9zaXplKTsKIAkJaWYgKHN0cnVjdFB0ciA9PSBOVUxM KQogCQl7CiAJCQkvKiBvdXQgb2YgbWVtb3J5OyByZW1vdmUgdGhlIGZhaWxlZCBTaG1lbUluZGV4 IGVudHJ5ICovCkBAIC02MDEsMTEgKzY0NSwyOSBAQCBBdHRhY2hPckluaXRTaG1lbUluZGV4RW50 cnkoU2htZW1SZXF1ZXN0ICpyZXF1ZXN0LAogCQkJCQkJCWRlc2MtPm5hbWUsIHJlcXVlc3QtPm9w dGlvbnMtPnNpemUpKSk7CiAJCX0KIAkJaW5kZXhfZW50cnktPnNpemUgPSByZXF1ZXN0LT5vcHRp b25zLT5zaXplOworI2lmZGVmIEhBVkVfUkVTSVpBQkxFX1NITUVNCisJCWluZGV4X2VudHJ5LT5t YXhpbXVtX3NpemUgPSBTSE1FTV9SRVFVRVNUX1NQQUNFX1NJWkUocmVxdWVzdCk7CisJCWluZGV4 X2VudHJ5LT5hbGxvY2F0ZWRfc3BhY2UgPSBhbGxvY2F0ZWRfc2l6ZTsKKwkJaWYgKHJlcXVlc3Qt Pm9wdGlvbnMtPm1heGltdW1fc2l6ZSA+IDApCisJCXsKKwkJCS8qIFJlc2l6YWJsZSBzdHJ1Y3R1 cmUuICovCisJCQlpbmRleF9lbnRyeS0+YWxsb2NhdGVkX3NpemUgPSBFc3RpbWF0ZUFsbG9jYXRl ZFNpemUoaW5kZXhfZW50cnkpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogRml4ZWQtc2l6ZSBz dHJ1Y3R1cmUuICovCisJCQlpbmRleF9lbnRyeS0+YWxsb2NhdGVkX3NpemUgPSBhbGxvY2F0ZWRf c2l6ZTsKKwkJfQorI2Vsc2UKIAkJaW5kZXhfZW50cnktPmFsbG9jYXRlZF9zaXplID0gYWxsb2Nh dGVkX3NpemU7CisjZW5kaWYKIAkJaW5kZXhfZW50cnktPmxvY2F0aW9uID0gc3RydWN0UHRyOwog CiAJCWRlc2MtPnB0ciA9IGluZGV4X2VudHJ5LT5sb2NhdGlvbjsKIAkJZGVzYy0+c2l6ZSA9IGlu ZGV4X2VudHJ5LT5zaXplOworI2lmZGVmIEhBVkVfUkVTSVpBQkxFX1NITUVNCisJCWRlc2MtPm1h eGltdW1fc2l6ZSA9IGluZGV4X2VudHJ5LT5tYXhpbXVtX3NpemU7CisjZW5kaWYKIAogCQkvKgog CQkgKiBSZS1lc3RhYmxpc2ggdGhlIGNhbGxlcidzIHBvaW50ZXIgdmFyaWFibGUsIG9yIGRvIG90 aGVyIGFjdGlvbnMgdG8KQEAgLTYyOSw2ICs2OTEsMTAyIEBAIEF0dGFjaE9ySW5pdFNobWVtSW5k ZXhFbnRyeShTaG1lbVJlcXVlc3QgKnJlcXVlc3QsCiAJcmV0dXJuIGZvdW5kOwogfQogCisjaWZk ZWYgSEFWRV9SRVNJWkFCTEVfU0hNRU0KKy8qCisgKiBFc3RpbWF0ZSB0aGUgYWN0dWFsIG1lbW9y eSBhbGxvY2F0ZWQgZm9yIGEgcmVzaXphYmxlIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIFNpemUK K0VzdGltYXRlQWxsb2NhdGVkU2l6ZShTaG1lbUluZGV4RW50ICplbnRyeSkKK3sKKwlTaXplCQlw YWdlX3NpemUgPSBHZXRPU1BhZ2VTaXplKCk7CisJY2hhcgkgICAqYWxpZ25fZW5kID0gKGNoYXIg KikgVFlQRUFMSUdOKHBhZ2Vfc2l6ZSwgKGNoYXIgKikgZW50cnktPmxvY2F0aW9uICsgZW50cnkt PnNpemUpOworCWNoYXIJICAgKmZsb29yX21heF9lbmQgPSAoY2hhciAqKSBUWVBFQUxJR05fRE9X TihwYWdlX3NpemUsIChjaGFyICopIGVudHJ5LT5sb2NhdGlvbiArIGVudHJ5LT5tYXhpbXVtX3Np emUpOworCisJQXNzZXJ0KGVudHJ5LT5tYXhpbXVtX3NpemUgPj0gZW50cnktPnNpemUpOworCUFz c2VydChlbnRyeS0+YWxsb2NhdGVkX3NwYWNlID49IGVudHJ5LT5tYXhpbXVtX3NpemUpOworCisJ aWYgKGFsaWduX2VuZCA+PSBmbG9vcl9tYXhfZW5kKQorCXsKKwkJLyoKKwkJICogQSByZXNpemFi bGUgc3RydWN0dXJlIHdoaWNoIGVuZHMgb24gdGhlIHNhbWUgcGFnZSBpcnJlc3BlY3RpdmUgb2YK KwkJICogaXRzIHNpemUuIFRoZSBzdHJ1Y3R1cmUgd2lsbCBiZSBhbGxvY2F0ZWQgbWF4aW11bSBt ZW1vcnkgYXQgdGhlCisJCSAqIGJlZ2lubmluZy4KKwkJICovCisJCXJldHVybiBlbnRyeS0+YWxs b2NhdGVkX3NwYWNlOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBUaGUgbWF4aW1hbCBzdHJ1 Y3R1cmUgc3BhbnMgbXVsdGlwbGUgcGFnZXMuIEF0IHRoZSBiZWdpbm5pbmcgdGhlCisJCSAqIHBh Z2VzIGJldHdlZW4gdGhlIHBhZ2Ugd2hlcmUgdGhpcyBzdHJ1Y3R1cmUsIHdpdGggaXRzIGluaXRp YWwgc2l6ZSwKKwkJICogZW5kcyBhbmQgdGhlIHBhZ2Ugd2hlcmUgdGhlIG5leHQgc3RydWN0dXJl IHN0YXJ0cyB3aWxsIG5vdCBiZQorCQkgKiBhbGxvY2F0ZWQuCisJCSAqLworCQlyZXR1cm4gZW50 cnktPmFsbG9jYXRlZF9zcGFjZSAtIChmbG9vcl9tYXhfZW5kIC0gYWxpZ25fZW5kKTsKKwl9Cit9 CisKK3ZvaWQKK1NobWVtUmVzaXplUmVnaXN0ZXJlZChjb25zdCBTaG1lbVN0cnVjdERlc2MgKmRl c2MsIFNpemUgbmV3X3NpemUpCit7CisJU2htZW1JbmRleEVudCAqcmVzdWx0OworCWJvb2wJCWZv dW5kOworCVNpemUJCXBhZ2Vfc2l6ZSA9IEdldE9TUGFnZVNpemUoKTsKKwljaGFyCSAgICpuZXdf ZW5kOworCisJQXNzZXJ0KG5ld19zaXplID4gMCk7CisKKwlpZiAoZGVzYy0+bWF4aW11bV9zaXpl IDw9IDApCisJCWVsb2coRVJST1IsICJzaGFyZWQgbWVtb3J5IHN0cnVjdCBcIiVzXCIgaXMgbm90 IHJlc2l6YWJsZSIsIGRlc2MtPm5hbWUpOworCisJLyogbG9vayBpdCB1cCBpbiB0aGUgc2htZW0g aW5kZXggKi8KKwlMV0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2NrLCBMV19FWENMVVNJVkUpOwor CXJlc3VsdCA9IChTaG1lbUluZGV4RW50ICopIGhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIGRlc2Mt Pm5hbWUsIEhBU0hfRklORCwgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCQllbG9nKEVSUk9SLCAi c2htZW0gc3RydWN0IFwiJXNcIiBpcyBub3QgaW5pdGlhbGl6ZWQiLCBkZXNjLT5uYW1lKTsKKwor CUFzc2VydChyZXN1bHQpOworCisJaWYgKHJlc3VsdC0+bWF4aW11bV9zaXplICE9IGRlc2MtPm1h eGltdW1fc2l6ZSkKKwkJZWxvZyhFUlJPUiwgInNobWVtIHN0cnVjdCBcIiVzXCIgaGFzIGNvcnJ1 cHRlZCBkZXNjcmlwdG9yIiwgZGVzYy0+bmFtZSk7CisKKwlpZiAocmVzdWx0LT5tYXhpbXVtX3Np emUgPCBuZXdfc2l6ZSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO U1VGRklDSUVOVF9SRVNPVVJDRVMpLAorCQkJCSBlcnJtc2coIm5vdCBlbm91Z2ggYWRkcmVzcyBz cGFjZSBpcyByZXNlcnZlZCBmb3IgcmVzaXppbmcgc3RydWN0dXJlIFwiJXNcIiIsIGRlc2MtPm5h bWUpKSk7CisKKwkvKgorCSAqIFdoZW4gc2hyaW5raW5nIHRoZSBtZW1vcnkgZnJvbSB0aGUgcGFn ZSBhbGlnbmVkIG5ldyBlbmQgdG8gdGhlIHN0YXJ0IG9mCisJICogdGhlIHBhZ2UgY29udGFpbmlu ZyBlbmQgb2YgdGhlIHJlc2VydmVkIHNwYWNlIGlzIG5vdCByZXF1aXJlZC4gV2hlcmVhcworCSAq IHdoZW4gZXhwYW5kaW5nIHRoZSBtZW1vcnkgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhZ2UgY29u dGFpbmluZyB0aGUKKwkgKiBzdGFydCBvZiB0aGUgc3RydWN0dXJlIHRvIHRoZSBwYWdlIGFsaWdu ZWQgbmV3IGVuZCBpcyByZXF1aXJlZC4KKwkgKi8KKwluZXdfZW5kID0gKGNoYXIgKikgVFlQRUFM SUdOKHBhZ2Vfc2l6ZSwgKGNoYXIgKikgcmVzdWx0LT5sb2NhdGlvbiArIG5ld19zaXplKTsKKwlp ZiAobmV3X3NpemUgPCByZXN1bHQtPnNpemUpCisJeworCQljaGFyCSAgICptYXhfZW5kID0gKGNo YXIgKikgVFlQRUFMSUdOX0RPV04ocGFnZV9zaXplLCAoY2hhciAqKSByZXN1bHQtPmxvY2F0aW9u ICsgcmVzdWx0LT5tYXhpbXVtX3NpemUpOworCQlTaXplCQlmcmVlX3NpemUgPSBtYXhfZW5kIC0g bmV3X2VuZDsKKworCQlpZiAoZnJlZV9zaXplID4gMCkKKwkJCVBHU2hhcmVkTWVtb3J5RW5zdXJl RnJlZWQobmV3X2VuZCwgZnJlZV9zaXplKTsKKwl9CisJZWxzZSBpZiAobmV3X3NpemUgPiByZXN1 bHQtPnNpemUpCisJeworCQljaGFyCSAgICpzdHJ1Y3Rfc3RhcnQgPSAoY2hhciAqKSBUWVBFQUxJ R05fRE9XTihwYWdlX3NpemUsIChjaGFyICopIHJlc3VsdC0+bG9jYXRpb24pOworCQlTaXplCQlh bGxvY19zaXplID0gbmV3X2VuZCAtIHN0cnVjdF9zdGFydDsKKworCQlpZiAoYWxsb2Nfc2l6ZSA+ IDApCisJCQlQR1NoYXJlZE1lbW9yeUVuc3VyZUFsbG9jYXRlZChzdHJ1Y3Rfc3RhcnQsIGFsbG9j X3NpemUpOworCX0KKworCS8qIFVwZGF0ZSBzaG1lbSBpbmRleCBlbnRyeS4gKi8KKwlyZXN1bHQt PnNpemUgPSBuZXdfc2l6ZTsKKwlyZXN1bHQtPmFsbG9jYXRlZF9zaXplID0gRXN0aW1hdGVBbGxv Y2F0ZWRTaXplKHJlc3VsdCk7CisKKwlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKK30K KyNlbmRpZgkJCQkJCQkvKiBIQVZFX1JFU0laQUJMRV9TSE1FTSAqLworCiAvKgogICoJSW5pdFNo bWVtQWxsb2NhdG9yKCkgLS0tIHNldCB1cCBiYXNpYyBwb2ludGVycyB0byBzaGFyZWQgbWVtb3J5 LgogICoKQEAgLTczNyw2ICs4OTUsMTAgQEAgSW5pdFNobWVtQWxsb2NhdG9yKFBHU2htZW1IZWFk ZXIgKnNlZ2hkcikKIAkJQXNzZXJ0KCFmb3VuZCk7CiAJCXJlc3VsdC0+c2l6ZSA9IHNpemU7CiAJ CXJlc3VsdC0+YWxsb2NhdGVkX3NpemUgPSBzaXplOworI2lmZGVmIEhBVkVfUkVTSVpBQkxFX1NI TUVNCisJCXJlc3VsdC0+bWF4aW11bV9zaXplID0gc2l6ZTsKKwkJcmVzdWx0LT5hbGxvY2F0ZWRf c3BhY2UgPSBzaXplOworI2VuZGlmCiAJCXJlc3VsdC0+bG9jYXRpb24gPSBTaG1lbUFsbG9jYXRv ci0+aW5kZXg7CiAJfQogfQpAQCAtMTAyOCw3ICsxMTkwLDcgQEAgbXVsX3NpemUoU2l6ZSBzMSwg U2l6ZSBzMikKIERhdHVtCiBwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnMoUEdfRlVOQ1RJT05fQVJH UykKIHsKLSNkZWZpbmUgUEdfR0VUX1NITUVNX1NJWkVTX0NPTFMgNAorI2RlZmluZSBQR19HRVRf U0hNRU1fU0laRVNfQ09MUyA2CiAJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldElu Zm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwogCUhBU0hfU0VRX1NUQVRVUyBoc3RhdDsKIAlTaG1l bUluZGV4RW50ICplbnQ7CkBAIC0xMDUwLDcgKzEyMTIsMjMgQEAgcGdfZ2V0X3NobWVtX2FsbG9j YXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXZhbHVlc1sxXSA9IEludDY0R2V0RGF0dW0oKGNo YXIgKikgZW50LT5sb2NhdGlvbiAtIChjaGFyICopIFNobWVtU2VnSGRyKTsKIAkJdmFsdWVzWzJd ID0gSW50NjRHZXREYXR1bShlbnQtPnNpemUpOwogCQl2YWx1ZXNbM10gPSBJbnQ2NEdldERhdHVt KGVudC0+YWxsb2NhdGVkX3NpemUpOworI2lmZGVmIEhBVkVfUkVTSVpBQkxFX1NITUVNCisJCXZh bHVlc1s0XSA9IEludDY0R2V0RGF0dW0oZW50LT5tYXhpbXVtX3NpemUpOworCQl2YWx1ZXNbNV0g PSBJbnQ2NEdldERhdHVtKGVudC0+YWxsb2NhdGVkX3NwYWNlKTsKKworCQkvKgorCQkgKiBLZWVw IHRyYWNrIG9mIHRoZSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgZm9yIG5hbWVkIHNobWVtIGFyZWFz LCB0bworCQkgKiBiZSBhYmxlIHRvIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNoYXJlZCBtZW1v cnkgYWxsb2NhdGVkIGZvcgorCQkgKiBhbm9ueW1vdXMgYXJlYXMgYW5kIHRoZSBhbW91bnQgb2Yg ZnJlZSBzaGFyZWQgbWVtb3J5IGF0IHRoZSBlbmQgb2YKKwkJICogdGhlIHNlZ21lbnQuCisJCSAq LworCQluYW1lZF9hbGxvY2F0ZWQgKz0gZW50LT5hbGxvY2F0ZWRfc3BhY2U7CisjZWxzZQorCQl2 YWx1ZXNbNF0gPSBJbnQ2NEdldERhdHVtKGVudC0+c2l6ZSk7CisJCXZhbHVlc1s1XSA9IEludDY0 R2V0RGF0dW0oZW50LT5hbGxvY2F0ZWRfc2l6ZSk7CisKIAkJbmFtZWRfYWxsb2NhdGVkICs9IGVu dC0+YWxsb2NhdGVkX3NpemU7CisjZW5kaWYKIAogCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2lu Zm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLAogCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsK QEAgLTEwNjEsNiArMTIzOSw4IEBAIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucyhQR19GVU5DVElP Tl9BUkdTKQogCW51bGxzWzFdID0gdHJ1ZTsKIAl2YWx1ZXNbMl0gPSBJbnQ2NEdldERhdHVtKFNo bWVtQWxsb2NhdG9yLT5mcmVlX29mZnNldCAtIG5hbWVkX2FsbG9jYXRlZCk7CiAJdmFsdWVzWzNd ID0gdmFsdWVzWzJdOworCXZhbHVlc1s0XSA9IHZhbHVlc1syXTsKKwl2YWx1ZXNbNV0gPSB2YWx1 ZXNbMl07CiAJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+ c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CiAKIAkvKiBvdXRwdXQgYXMtb2YteWV0IHVudXNlZCBz aGFyZWQgbWVtb3J5ICovCkBAIC0xMDY5LDYgKzEyNDksOCBAQCBwZ19nZXRfc2htZW1fYWxsb2Nh dGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAludWxsc1sxXSA9IGZhbHNlOwogCXZhbHVlc1syXSA9 IEludDY0R2V0RGF0dW0oU2htZW1TZWdIZHItPnRvdGFsc2l6ZSAtIFNobWVtQWxsb2NhdG9yLT5m cmVlX29mZnNldCk7CiAJdmFsdWVzWzNdID0gdmFsdWVzWzJdOworCXZhbHVlc1s0XSA9IHZhbHVl c1syXTsKKwl2YWx1ZXNbNV0gPSB2YWx1ZXNbMl07CiAJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNp bmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CiAKIAlMV0xv Y2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKQEAgLTEyNTYsMjMgKzE0MzgsOSBAQCBwZ19nZXRf c2htZW1fYWxsb2NhdGlvbnNfbnVtYShQR19GVU5DVElPTl9BUkdTKQogU2l6ZQogcGdfZ2V0X3No bWVtX3BhZ2VzaXplKHZvaWQpCiB7Ci0JU2l6ZQkJb3NfcGFnZV9zaXplOwotI2lmZGVmIFdJTjMy Ci0JU1lTVEVNX0lORk8gc3lzaW5mbzsKLQotCUdldFN5c3RlbUluZm8oJnN5c2luZm8pOwotCW9z X3BhZ2Vfc2l6ZSA9IHN5c2luZm8uZHdQYWdlU2l6ZTsKLSNlbHNlCi0Jb3NfcGFnZV9zaXplID0g c3lzY29uZihfU0NfUEFHRVNJWkUpOwotI2VuZGlmCi0KIAlBc3NlcnQoSXNVbmRlclBvc3RtYXN0 ZXIpOwotCUFzc2VydChodWdlX3BhZ2VzX3N0YXR1cyAhPSBIVUdFX1BBR0VTX1VOS05PV04pOwot Ci0JaWYgKGh1Z2VfcGFnZXNfc3RhdHVzID09IEhVR0VfUEFHRVNfT04pCi0JCUdldEh1Z2VQYWdl U2l6ZSgmb3NfcGFnZV9zaXplLCBOVUxMKTsKIAotCXJldHVybiBvc19wYWdlX3NpemU7CisJcmV0 dXJuIEdldE9TUGFnZVNpemUoKTsKIH0KIAogRGF0dW0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQKaW5kZXggMGE4NjI2OTNmY2QuLjBjNWViMzZkOWU2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMTIxMCw2ICsxMjEwLDEz IEBACiAgIG1heCA9PiAnMTAwMC4wJywKIH0sCiAKK3sgbmFtZSA9PiAnaGF2ZV9yZXNpemFibGVf c2htZW0nLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX0lOVEVSTkFMJywgZ3JvdXAg PT4gJ1BSRVNFVF9PUFRJT05TJywKKyAgc2hvcnRfZGVzYyA9PiAnU2hvd3Mgd2hldGhlciB0aGUg cnVubmluZyBzZXJ2ZXIgc3VwcG9ydHMgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkuJywKKyAgZmxh Z3MgPT4gJ0dVQ19OT1RfSU5fU0FNUExFIHwgR1VDX0RJU0FMTE9XX0lOX0ZJTEUnLAorICB2YXJp YWJsZSA9PiAnaGF2ZV9yZXNpemFibGVfc2htZW1fZW5hYmxlZCcsCisgIGJvb3RfdmFsID0+ICdI QVZFX1JFU0laQUJMRV9TSE1FTV9FTkFCTEVEJywKK30sCisKIHsgbmFtZSA9PiAnaGJhX2ZpbGUn LCB0eXBlID0+ICdzdHJpbmcnLCBjb250ZXh0ID0+ICdQR0NfUE9TVE1BU1RFUicsIGdyb3VwID0+ ICdGSUxFX0xPQ0FUSU9OUycsCiAgIHNob3J0X2Rlc2MgPT4gJ1NldHMgdGhlIHNlcnZlclwncyAi aGJhIiBjb25maWd1cmF0aW9uIGZpbGUuJywKICAgZmxhZ3MgPT4gJ0dVQ19TVVBFUlVTRVJfT05M WScsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IDFlMTRiN2I0YWYwLi45MWRi NTFjMThiMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTY0Niw2ICs2NDYs MTMgQEAgc3RhdGljIGJvb2wgYXNzZXJ0X2VuYWJsZWQgPSBERUZBVUxUX0FTU0VSVF9FTkFCTEVE OwogI2VuZGlmCiBzdGF0aWMgYm9vbCBleGVjX2JhY2tlbmRfZW5hYmxlZCA9IEVYRUNfQkFDS0VO RF9FTkFCTEVEOwogCisjaWZkZWYgSEFWRV9SRVNJWkFCTEVfU0hNRU0KKyNkZWZpbmUgSEFWRV9S RVNJWkFCTEVfU0hNRU1fRU5BQkxFRCB0cnVlCisjZWxzZQorI2RlZmluZSBIQVZFX1JFU0laQUJM RV9TSE1FTV9FTkFCTEVEIGZhbHNlCisjZW5kaWYKK3N0YXRpYyBib29sIGhhdmVfcmVzaXphYmxl X3NobWVtX2VuYWJsZWQgPSBIQVZFX1JFU0laQUJMRV9TSE1FTV9FTkFCTEVEOworCiBzdGF0aWMg Y2hhciAqcmVjb3ZlcnlfdGFyZ2V0X3RpbWVsaW5lX3N0cmluZzsKIHN0YXRpYyBjaGFyICpyZWNv dmVyeV90YXJnZXRfc3RyaW5nOwogc3RhdGljIGNoYXIgKnJlY292ZXJ5X3RhcmdldF94aWRfc3Ry aW5nOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggMzU3OWNlYzU3NDQuLjc1ZDM4MDI1NmFm IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTg2NjQsOCArODY2NCw4IEBACiB7IG9pZCA9 PiAnNTA1MicsIGRlc2NyID0+ICdhbGxvY2F0aW9ucyBmcm9tIHRoZSBtYWluIHNoYXJlZCBtZW1v cnkgc2VnbWVudCcsCiAgIHByb25hbWUgPT4gJ3BnX2dldF9zaG1lbV9hbGxvY2F0aW9ucycsIHBy b3Jvd3MgPT4gJzUwJywgcHJvcmV0c2V0ID0+ICd0JywKICAgcHJvdm9sYXRpbGUgPT4gJ3YnLCBw cm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnJywKLSAgcHJvYWxsYXJndHlw ZXMgPT4gJ3t0ZXh0LGludDgsaW50OCxpbnQ4fScsIHByb2FyZ21vZGVzID0+ICd7byxvLG8sb30n LAotICBwcm9hcmduYW1lcyA9PiAne25hbWUsb2ZmLHNpemUsYWxsb2NhdGVkX3NpemV9JywKKyAg cHJvYWxsYXJndHlwZXMgPT4gJ3t0ZXh0LGludDgsaW50OCxpbnQ4LGludDgsaW50OH0nLCBwcm9h cmdtb2RlcyA9PiAne28sbyxvLG8sbyxvfScsCisgIHByb2FyZ25hbWVzID0+ICd7bmFtZSxvZmYs c2l6ZSxhbGxvY2F0ZWRfc2l6ZSxtYXhpbXVtX3NpemUsYWxsb2NhdGVkX3NwYWNlfScsCiAgIHBy b3NyYyA9PiAncGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zJywKICAgcHJvYWNsID0+ICd7UE9TVEdS RVM9WCxwZ19yZWFkX2FsbF9zdGF0cz1YfScgfSwKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cGdfY29uZmlnLmguaW4gYi9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbgppbmRleCBkOGQ2MTkx OGFmZi4uNTU0YjVhYjc4ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmlu CisrKyBiL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluCkBAIC04NSw2ICs4NSwxNCBAQAogICAg ZG9uJ3QuICovCiAjdW5kZWYgSEFWRV9ERUNMX0ZfRlVMTEZTWU5DCiAKKy8qIERlZmluZSB0byAx IGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgTUFEVl9QT1BVTEFURV9XUklURScsIGFu ZCB0byAwCisgICBpZiB5b3UgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX01BRFZfUE9QVUxB VEVfV1JJVEUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9m IGBNQURWX1JFTU9WRScsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFW RV9ERUNMX01BRFZfUkVNT1ZFCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNs YXJhdGlvbiBvZiBgbWVtc2V0X3MnLCBhbmQgdG8gMCBpZiB5b3UKICAgIGRvbid0LiAqLwogI3Vu ZGVmIEhBVkVfREVDTF9NRU1TRVRfUwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGdfY29uZmln X21hbnVhbC5oIGIvc3JjL2luY2x1ZGUvcGdfY29uZmlnX21hbnVhbC5oCmluZGV4IDUyMWI0OWI4 ODg4Li43OGQyYjdhNjNjNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdfY29uZmlnX21hbnVh bC5oCisrKyBiL3NyYy9pbmNsdWRlL3BnX2NvbmZpZ19tYW51YWwuaApAQCAtMTMxLDYgKzEzMSwx NSBAQAogI2RlZmluZSBFWEVDX0JBQ0tFTkQKICNlbmRpZgogCisvKgorICogSEFWRV9SRVNJWkFC TEVfU0hNRU0gaW5kaWNhdGVzIHdoZXRoZXIgIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IHN0cnVj dHVyZXMgYXJlCisgKiBzdXBwb3J0ZWQuIFRoZSBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyBhbm9u eW1vdXMgbW1hcCBhbmQgTGludXgtc3BlY2lmaWMKKyAqIG1hZHZpc2UgY29uc3RhbnRzIChNQURW X1JFTU9WRSBhbmQgTUFEVl9QT1BVTEFURV9XUklURSkuCisgKi8KKyNpZiBIQVZFX0RFQ0xfTUFE Vl9SRU1PVkUgJiYgSEFWRV9ERUNMX01BRFZfUE9QVUxBVEVfV1JJVEUgJiYgIWRlZmluZWQoRVhF Q19CQUNLRU5EKQorI2RlZmluZSBIQVZFX1JFU0laQUJMRV9TSE1FTQorI2VuZGlmCisKIC8qCiAg KiBVU0VfUE9TSVhfRkFEVklTRSBjb250cm9scyB3aGV0aGVyIFBvc3RncmVzIHdpbGwgYXR0ZW1w dCB0byB1c2UgdGhlCiAgKiBwb3NpeF9mYWR2aXNlKCkga2VybmVsIGNhbGwuICBVc3VhbGx5IHRo ZSBhdXRvbWF0aWMgY29uZmlndXJlIHRlc3RzIGFyZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9wZ19zaG1lbS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wZ19zaG1lbS5oCmluZGV4 IDEwYzdiMDY1ODYxLi4zZDVhY2ViYTU5YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wZ19zaG1lbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcGdfc2htZW0uaApAQCAtODks NiArODksMTEgQEAgZXh0ZXJuIFBHU2htZW1IZWFkZXIgKlBHU2hhcmVkTWVtb3J5Q3JlYXRlKFNp emUgc2l6ZSwKIAkJCQkJCQkJCQkgICBQR1NobWVtSGVhZGVyICoqc2hpbSk7CiBleHRlcm4gYm9v bCBQR1NoYXJlZE1lbW9yeUlzSW5Vc2UodW5zaWduZWQgbG9uZyBpZDEsIHVuc2lnbmVkIGxvbmcg aWQyKTsKIGV4dGVybiB2b2lkIFBHU2hhcmVkTWVtb3J5RGV0YWNoKHZvaWQpOworI2lmZGVmIEhB VkVfUkVTSVpBQkxFX1NITUVNCitleHRlcm4gdm9pZCBQR1NoYXJlZE1lbW9yeUVuc3VyZUZyZWVk KHZvaWQgKmFkZHIsIFNpemUgc2l6ZSk7CitleHRlcm4gdm9pZCBQR1NoYXJlZE1lbW9yeUVuc3Vy ZUFsbG9jYXRlZCh2b2lkICphZGRyLCBTaXplIHNpemUpOworI2VuZGlmCiBleHRlcm4gdm9pZCBH ZXRIdWdlUGFnZVNpemUoU2l6ZSAqaHVnZXBhZ2VzaXplLCBpbnQgKm1tYXBfZmxhZ3MpOworZXh0 ZXJuIFNpemUgR2V0T1NQYWdlU2l6ZSh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIFBHX1NITUVN X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaCBiL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc2htZW0uaAppbmRleCA0OTM5MTMwYWFiMS4uNWUyNWRlMmU3YzMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3NobWVtLmgKQEAgLTQzLDYgKzQzLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgU2htZW1TdHJ1Y3RE ZXNjCiAKIAl2b2lkCSAgICpwdHI7CiAJc2l6ZV90CQlzaXplOworI2lmZGVmIEhBVkVfUkVTSVpB QkxFX1NITUVNCisJc2l6ZV90CQltYXhpbXVtX3NpemU7CisjZW5kaWYKIH0gU2htZW1TdHJ1Y3RE ZXNjOwogCiAjZGVmaW5lIFNITUVNX0FUVEFDSF9VTktOT1dOX1NJWkUgKC0xKQpAQCAtNzYsNiAr NzksMTggQEAgdHlwZWRlZiBzdHJ1Y3QgU2htZW1TdHJ1Y3RPcHRzCiAJICovCiAJc2l6ZV90CQll eHRyYV9zaXplOwogCisjaWZkZWYgSEFWRV9SRVNJWkFCTEVfU0hNRU0KKworCS8qCisJICogTWF4 aW11bSBzaXplIHRoaXMgc3RydWN0dXJlIGNhbiBncm93IHVwdG8gaW4gZnV0dXJlLiBUaGUgbWVt b3J5IGlzIG5vdAorCSAqIGFsbG9jYXRlZCByaWdodCBhd2F5IGJ1dCB0aGUgY29ycmVzcG9uZGlu ZyBhZGRyZXNzIHNwYWNlIGlzIHJlc2VydmVkIHNvCisJICogdGhhdCBtZW1vcnkgY2FuIGJlIG1h cHBlZCB0byBpdCB3aGVuIHRoZSBzdHJ1Y3R1cmUgZ3Jvd3MuIFR5cGljYWxseQorCSAqIHNob3Vs ZCBiZSB1c2VkIGZvciBsYXJnZSByZXNpemFibGUgc3RydWN0dXJlcyB3aGljaCBuZWVkIGNvbnRp Z3VvdXMKKwkgKiBtZW1vcnkuCisJICovCisJc2l6ZV90CQltYXhpbXVtX3NpemU7CisjZW5kaWYK KwogCS8qCiAJICogV2hlbiB0aGUgc2htZW0gYXJlYSBpcyBpbml0aWFsaXplZCBvciBhdHRhY2hl ZCB0bywgcG9pbnRlciB0byBpdCBpcwogCSAqIHN0b3JlZCBpbiAqcHRyLiAgSXQgdXN1YWxseSBw b2ludHMgdG8gYSBnbG9iYWwgdmFyaWFibGUsIHVzZWQgdG8gYWNjZXNzCkBAIC0yMjAsNiArMjM1 LDkgQEAgZXh0ZXJuIHZvaWQgKlNobWVtSGFzaEFsbG9jKFNpemUgc2l6ZSwgdm9pZCAqYWxsb2Nf YXJnKTsKIGV4dGVybiBib29sIFNobWVtQWRkcklzVmFsaWQoY29uc3Qgdm9pZCAqYWRkcik7CiAK IGV4dGVybiB2b2lkIFJlZ2lzdGVyU2htZW1DYWxsYmFja3MoY29uc3QgU2htZW1DYWxsYmFja3Mg KmNhbGxiYWNrcyk7CisjaWZkZWYgSEFWRV9SRVNJWkFCTEVfU0hNRU0KK2V4dGVybiB2b2lkIFNo bWVtUmVzaXplUmVnaXN0ZXJlZChjb25zdCBTaG1lbVN0cnVjdERlc2MgKmRlc2MsIFNpemUgbmV3 X3NpemUpOworI2VuZGlmCiAKIGV4dGVybiB2b2lkIFNobWVtUmVxdWVzdEludGVybmFsKFNobWVt U3RydWN0RGVzYyAqZGVzYywgU2htZW1TdHJ1Y3RPcHRzICpvcHRpb25zLAogCQkJCQkJCQkgU2ht ZW1BcmVhS2luZCBraW5kKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUg Yi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IDYyZmFiOWYzYzJmLi4zZWY4MjI4ODUx YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9t b2R1bGVzL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgbGlicHFf cGlwZWxpbmUgXAogCQkgIG9hdXRoX3ZhbGlkYXRvciBcCiAJCSAgcGxzYW1wbGUgXAorCQkgIHJl c2l6YWJsZV9zaG1lbSBcCiAJCSAgc3BnaXN0X25hbWVfb3BzIFwKIAkJICB0ZXN0X2FpbyBcCiAJ CSAgdGVzdF9iaW5hcnloZWFwIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24u YnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDY3OTliYTExZTExLi41 MjQ0YjRiZGI4ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0xMyw2ICsxMyw3IEBAIHN1YmRpcign bGlicHFfcGlwZWxpbmUnKQogc3ViZGlyKCduYnRyZWUnKQogc3ViZGlyKCdvYXV0aF92YWxpZGF0 b3InKQogc3ViZGlyKCdwbHNhbXBsZScpCitzdWJkaXIoJ3Jlc2l6YWJsZV9zaG1lbScpCiBzdWJk aXIoJ3NwZ2lzdF9uYW1lX29wcycpCiBzdWJkaXIoJ3NzbF9wYXNzcGhyYXNlX2NhbGxiYWNrJykK IHN1YmRpcigndGVzdF9haW8nKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFi bGVfc2htZW0vTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9NYWtl ZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjNiZDhhYzBjN2YK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9NYWtl ZmlsZQpAQCAtMCwwICsxLDIzIEBACisjIHNyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVt L01ha2VmaWxlCisKK01PRFVMRVMgPSByZXNpemFibGVfc2htZW0KK1RBUF9URVNUUyA9IDEKKwor RVhURU5TSU9OID0gcmVzaXphYmxlX3NobWVtCitEQVRBID0gcmVzaXphYmxlX3NobWVtLS0xLjAu c3FsCitQR0ZJTEVERVNDID0gInJlc2l6YWJsZV9zaG1lbSAtIHRlc3QgbW9kdWxlIGZvciByZXNp emFibGUgc2hhcmVkIG1lbW9yeSIKKworIyBUaGlzIHRlc3QgcmVxdWlyZXMgbGlicmFyeSB0byBi ZSBsb2FkZWQgYXQgdGhlIHNlcnZlciBzdGFydCwgc28gZGlzYWJsZQorIyBpbnN0YWxsY2hlY2sK K05PX0lOU1RBTExDSEVDSyA9IDEKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2Nv bmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdY UykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtCit0b3Bf YnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2Vm aWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9tYWtlZmlsZXMvcGd4cy5tawor ZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL21lc29u LmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vbWVzb24uYnVpbGQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ5M2JiYmM5NWMzCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vbWVzb24uYnVpbGQK QEAgLTAsMCArMSwzNiBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9tZXNv bi5idWlsZAorCityZXNpemFibGVfc2htZW1fc291cmNlcyA9IGZpbGVzKAorICAncmVzaXphYmxl X3NobWVtLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcmVzaXphYmxl X3NobWVtX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9h cmdzOiBbCisgICAgJy0tTkFNRScsICdyZXNpemFibGVfc2htZW0nLAorICAgICctLUZJTEVERVND JywgJ3Jlc2l6YWJsZV9zaG1lbSAtIHRlc3QgbW9kdWxlIGZvciByZXNpemFibGUgc2hhcmVkIG1l bW9yeScsXSkKK2VuZGlmCisKK3Jlc2l6YWJsZV9zaG1lbSA9IHNoYXJlZF9tb2R1bGUoJ3Jlc2l6 YWJsZV9zaG1lbScsCisgIHJlc2l6YWJsZV9zaG1lbV9zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rl c3RfbW9kX2FyZ3MsCispCit0ZXN0X2luc3RhbGxfbGlicyArPSByZXNpemFibGVfc2htZW0KKwor dGVzdF9pbnN0YWxsX2RhdGEgKz0gZmlsZXMoCisgICdyZXNpemFibGVfc2htZW0uY29udHJvbCcs CisgICdyZXNpemFibGVfc2htZW0tLTEuMC5zcWwnLAorKQorCit0ZXN0cyArPSB7CisgICduYW1l JzogJ3Jlc2l6YWJsZV9zaG1lbScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2Rpcigp LAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAndGFwJzogeworICAgICd0 ZXN0cyc6IFsKKyAgICAgICd0LzAwMV9yZXNpemFibGVfc2htZW0ucGwnLAorICAgIF0sCisgICAg IyBUaGlzIHRlc3QgcmVxdWlyZXMgbGlicmFyeSB0byBiZSBsb2FkZWQgYXQgdGhlIHNlcnZlciBz dGFydCwgc28gZGlzYWJsZQorICAgICMgaW5zdGFsbGNoZWNrCisgICAgJ3J1bm5pbmdjaGVjayc6 IGZhbHNlLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVf c2htZW0vcmVzaXphYmxlX3NobWVtLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFi bGVfc2htZW0vcmVzaXphYmxlX3NobWVtLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5jMWJjYjYxMTdiNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS0tMS4wLnNxbApAQCAtMCww ICsxLDM3IEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVf c2htZW0tLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4g cHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRF IEVYVEVOU0lPTiByZXNpemFibGVfc2htZW0iIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCist LSBGdW5jdGlvbiB0byByZXNpemUgdGhlIHRlc3Qgc3RydWN0dXJlIGluIHRoZSBzaGFyZWQgbWVt b3J5CitDUkVBVEUgRlVOQ1RJT04gcmVzaXphYmxlX3NobWVtX3Jlc2l6ZShuZXdfZW50cmllcyBp bnRlZ2VyKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBT VFJJQ1Q7CisKKy0tIEZ1bmN0aW9uIHRvIHdyaXRlIGRhdGEgdG8gYWxsIGVudHJpZXMgaW4gdGhl IHRlc3Qgc3RydWN0dXJlIGluIHNoYXJlZCBtZW1vcnkKKy0tIFdyaXRpbmcgYWxsIHRoZSBlbnRy aWVzIG1ha2VzIHN1cmUgdGhhdCB0aGUgbWVtb3J5IGlzIGFjdHVhbGx5IGFsbG9jYXRlZCBhbmQK Ky0tIG1hcHBlZCB0byB0aGUgcHJvY2Vzcywgc28gdGhhdCB3ZSBjYW4gbGF0ZXIgbWVhc3VyZSB0 aGUgbWVtb3J5IHVzYWdlLgorQ1JFQVRFIEZVTkNUSU9OIHJlc2l6YWJsZV9zaG1lbV93cml0ZShl bnRyeV92YWx1ZSBpbnRlZ2VyKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJwor TEFOR1VBR0UgQyBTVFJJQ1Q7CisKKy0tIEZ1bmN0aW9uIHRvIHZlcmlmeSB0aGF0IHNwZWNpZmll ZCBudW1iZXIgb2YgaW5pdGlhbCBlbnRyaWVzIGhhdmUgZXhwZWN0ZWQgdmFsdWUuCistLSBSZWFk aW5nIGFsbCB0aGUgZW50cmllcyBtYWtlcyBzdXJlIHRoYXQgdGhlIG1lbW9yeSBpcyBhY3R1YWxs eSBtYXBwZWQgdG8gdGhlCistLSBwcm9jZXNzLCBzbyB0aGF0IHdlIGNhbiBsYXRlciBtZWFzdXJl IHRoZSBtZW1vcnkgdXNhZ2UuCitDUkVBVEUgRlVOQ1RJT04gcmVzaXphYmxlX3NobWVtX3JlYWQo ZW50cnlfY291bnQgaW50ZWdlciwgZW50cnlfdmFsdWUgaW50ZWdlcikKK1JFVFVSTlMgYm9vbGVh bgorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgU1RSSUNUOworCistLSBGdW5jdGlv biB0byByZXBvcnQgbWVtb3J5IHVzYWdlIHN0YXRpc3RpY3Mgb2YgdGhlIGNhbGxpbmcgYmFja2Vu ZAorQ1JFQVRFIEZVTkNUSU9OIHJlc2l6YWJsZV9zaG1lbV91c2FnZShPVVQgcnNzX2Fub24gYmln aW50LCBPVVQgcnNzX2ZpbGUgYmlnaW50LCBPVVQgcnNzX3NobWVtIGJpZ2ludCwgT1VUIHZtX3Np emUgYmlnaW50KQorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgU1RSSUNUOworCist LSBGdW5jdGlvbiB0byBnZXQgdGhlIHNoYXJlZCBtZW1vcnkgcGFnZSBzaXplCitDUkVBVEUgRlVO Q1RJT04gcmVzaXphYmxlX3NobWVtX3BhZ2VzaXplKCkKK1JFVFVSTlMgaW50ZWdlcgorQVMgJ01P RFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgU1RSSUNUOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmMgYi9zcmMvdGVzdC9tb2R1 bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMjY1NzE1MDUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0uYwpAQCAtMCwwICsx LDI4MSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHJlc2l6YWJsZV9zaG1lbS5jCisg KgkJVGVzdCBtb2R1bGUgZm9yIFBvc3RncmVTUUwncyByZXNpemFibGUgc2hhcmVkIG1lbW9yeSBm dW5jdGlvbmFsaXR5CisgKgorICogVGhpcyBtb2R1bGUgZGVtb25zdHJhdGVzIGFuZCB0ZXN0cyB0 aGUgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgQVBJCisgKiBwcm92aWRlZCBieSBzaG1lbS5jL3No bWVtLmguCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMu aCIKKworI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAi bWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3Jh Z2Uvc3Bpbi5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMv Z3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1l c3RhbXAuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCisKKyNpbmNsdWRlIDxz dGRpby5oPgorCitQR19NT0RVTEVfTUFHSUM7CisKKy8qCisgKiBEZWZhdWx0IGFtb3VudCBvZiBz aGFyZWQgYnVmZmVycyBhbmQgaGVuY2UgdGhlIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5CisgKiBh bGxvY2F0ZWQgYnkgZGVmYXVsdCBpcyBpbiBodW5kcmVkcyBvZiBNQnMuIFRoZSBtZW1vcnkgYWxs b2NhdGVkIHRvIHRoZSB0ZXN0CisgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBub3RpY2VhYmxlIG9ubHkg d2hlbiBpdCdzIGluIHRoZSBzYW1lIG9yZGVyLgorICovCisjZGVmaW5lIFRFU1RfSU5JVElBTF9F TlRSSUVTCSgyNSAqIDEwMjQgKiAxMDI0KQkvKiBJbml0aWFsIG51bWJlciBvZgorCQkJCQkJCQkJ CQkJCSAqIGVudHJpZXMgKDEwME1CKSAqLworI2RlZmluZSBURVNUX01BWF9FTlRSSUVTCQkoMTAw ICogMTAyNCAqIDEwMjQpIC8qIE1heGltdW0gbnVtYmVyIG9mCisJCQkJCQkJCQkJCQkJICogZW50 cmllcyAoNDAwTUIsIDR4CisJCQkJCQkJCQkJCQkJICogaW5pdGlhbCkgKi8KKyNkZWZpbmUgVEVT VF9FTlRSWV9TSVpFCQkJc2l6ZW9mKGludDMyKQkvKiBTaXplIG9mIGVhY2ggZW50cnkgKi8KKwor LyoKKyAqIFJlc2l6YWJsZSB0ZXN0IGRhdGEgc3RydWN0dXJlIHN0b3JlZCBpbiBzaGFyZWQgbWVt b3J5LgorICoKKyAqIFdlIGRvIG5vdCB1c2UgYW55IGxvY2tzLiBUaGUgdGVzdCBwZXJmb3JtcyBy ZXNpemluZywgcmVhZHMgYW5kIHdyaXRlcyBub25lIG9mCisgKiB3aGljaCBhcmUgY29uY3VycmVu dCB0byBrZWVwIHRoZSBjb2RlIGFuZCB0aGUgdGVzdCBzaW1wbGUuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IFRlc3RSZXNpemFibGVTaG1lbVN0cnVjdAoreworCS8qIE1ldGFkYXRhICovCisJaW50MzIJ CW51bV9lbnRyaWVzOwkvKiBOdW1iZXIgb2YgZW50cmllcyB0aGF0IGNhbiBmaXQgKi8KKworCS8q IERhdGEgYXJlYSAtIHZhcmlhYmxlIHNpemUgKi8KKwlpbnQzMgkJZGF0YVtGTEVYSUJMRV9BUlJB WV9NRU1CRVJdOworfSBUZXN0UmVzaXphYmxlU2htZW1TdHJ1Y3Q7CisKK3N0YXRpYyBTaG1lbVN0 cnVjdERlc2MgdGVzdFNobWVtRGVzYzsKKworLyogR2xvYmFsIHBvaW50ZXIgdG8gb3VyIHNoYXJl ZCBtZW1vcnkgc3RydWN0dXJlICovCitzdGF0aWMgVGVzdFJlc2l6YWJsZVNobWVtU3RydWN0ICpy ZXNpemFibGVfc2htZW0gPSBOVUxMOworCitzdGF0aWMgdm9pZCByZXNpemFibGVfc2htZW1fcmVx dWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgcmVzaXphYmxlX3NobWVtX3NobWVtX2luaXQo dm9pZCAqYXJnKTsKKworc3RhdGljIGNvbnN0IFNobWVtQ2FsbGJhY2tzIHBnc3Nfc2htZW1fY2Fs bGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gcmVzaXphYmxlX3NobWVtX3JlcXVlc3QsCisJLmlu aXRfZm4gPSByZXNpemFibGVfc2htZW1fc2htZW1faW5pdCwKK307CisKKy8qIFNRTC1jYWxsYWJs ZSBmdW5jdGlvbnMgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEocmVzaXphYmxlX3NobWVtX3Jlc2l6 ZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHJlc2l6YWJsZV9zaG1lbV93cml0ZSk7CitQR19GVU5D VElPTl9JTkZPX1YxKHJlc2l6YWJsZV9zaG1lbV9yZWFkKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEo cmVzaXphYmxlX3NobWVtX3VzYWdlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocmVzaXphYmxlX3No bWVtX3BhZ2VzaXplKTsKKworLyoKKyAqIE1vZHVsZSBsb2FkIGNhbGxiYWNrCisgKi8KK3ZvaWQK K19QR19pbml0KHZvaWQpCit7CisJLyoKKwkgKiBUaGUgbW9kdWxlIG5lZWRzIHRvIGJlIGxvYWRl ZCB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzIHRvIHJlZ2lzdGVyCisJICogc2hhcmVkIG1l bW9yeSBzdHJ1Y3R1cmUuIEJ1dCBpZiB0aGF0J3Mgbm90IHRoZSBjYXNlLCBkb24ndCB0aHJvdyBh bgorCSAqIGVycm9yLiBUaGUgU1FMIGZ1bmN0aW9ucyBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIHRo ZSBzaGFyZWQgbWVtb3J5IGRhdGEKKwkgKiBzdHJ1Y3R1cmUuCisJICovCisJaWYgKCFwcm9jZXNz X3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9wcm9ncmVzcykKKwkJcmV0dXJuOworCisJUmVn aXN0ZXJTaG1lbUNhbGxiYWNrcygmcGdzc19zaG1lbV9jYWxsYmFja3MpOworfQorCisvKgorICog UmVxdWVzdCBzaGFyZWQgbWVtb3J5IHJlc291cmNlcworICovCitzdGF0aWMgdm9pZAorcmVzaXph YmxlX3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKQoreworCS8qIFJlZ2lzdGVyIG91ciByZXNpemFi bGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgKi8KKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJnRlc3RT aG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gInJlc2l6YWJsZV9zaG1lbSIsCisJCQkJCSAgIC5z aXplID0gb2Zmc2V0b2YoVGVzdFJlc2l6YWJsZVNobWVtU3RydWN0LCBkYXRhKSArIChURVNUX0lO SVRJQUxfRU5UUklFUyAqIFRFU1RfRU5UUllfU0laRSksCisjaWZkZWYgSEFWRV9SRVNJWkFCTEVf U0hNRU0KKwkJCQkJICAgLm1heGltdW1fc2l6ZSA9IG9mZnNldG9mKFRlc3RSZXNpemFibGVTaG1l bVN0cnVjdCwgZGF0YSkgKyAoVEVTVF9NQVhfRU5UUklFUyAqIFRFU1RfRU5UUllfU0laRSksCisj ZW5kaWYKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmcmVzaXphYmxlX3NobWVtLAorCQkpOwor fQorCisvKgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZQorICovCitzdGF0 aWMgdm9pZAorcmVzaXphYmxlX3NobWVtX3NobWVtX2luaXQodm9pZCAqYXJnKQoreworCS8qCisJ ICogU2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgc2hvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQgd2l0 aCB0aGUgcmVxdWVzdGVkCisJICogc2l6ZS4gSW5pdGlhbGl6ZSB0aGUgbWV0YWRhdGEuCisJICov CisJQXNzZXJ0KHJlc2l6YWJsZV9zaG1lbSAhPSBOVUxMKTsKKwlBc3NlcnQodGVzdFNobWVtRGVz Yy5zaXplID49IG9mZnNldG9mKFRlc3RSZXNpemFibGVTaG1lbVN0cnVjdCwgZGF0YSkgKyAoVEVT VF9JTklUSUFMX0VOVFJJRVMgKiBURVNUX0VOVFJZX1NJWkUpKTsKKyNpZmRlZiBIQVZFX1JFU0la QUJMRV9TSE1FTQorCUFzc2VydCh0ZXN0U2htZW1EZXNjLm1heGltdW1fc2l6ZSA+PSBvZmZzZXRv ZihUZXN0UmVzaXphYmxlU2htZW1TdHJ1Y3QsIGRhdGEpICsgKFRFU1RfTUFYX0VOVFJJRVMgKiBU RVNUX0VOVFJZX1NJWkUpKTsKKyNlbmRpZgorCisJcmVzaXphYmxlX3NobWVtLT5udW1fZW50cmll cyA9IFRFU1RfSU5JVElBTF9FTlRSSUVTOworCW1lbXNldChyZXNpemFibGVfc2htZW0tPmRhdGEs IDAsIFRFU1RfSU5JVElBTF9FTlRSSUVTICogVEVTVF9FTlRSWV9TSVpFKTsKK30KKworLyoKKyAq IFJlc2l6ZSB0aGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgdG8gYWNjb21tb2RhdGUgdGhlIHNw ZWNpZmllZCBudW1iZXIgb2YKKyAqIGVudHJpZXMuCisgKi8KK0RhdHVtCityZXNpemFibGVfc2ht ZW1fcmVzaXplKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisjaWZkZWYgSEFWRV9SRVNJWkFCTEVfU0hN RU0KKwlpbnQzMgkJbmV3X2VudHJpZXMgPSBQR19HRVRBUkdfSU5UMzIoMCk7CisJU2l6ZQkJbmV3 X3NpemU7CisKKwlpZiAoIXJlc2l6YWJsZV9zaG1lbSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkg ZXJybXNnKCJyZXNpemFibGVfc2htZW0gaXMgbm90IGluaXRpYWxpemVkIikpKTsKKworCW5ld19z aXplID0gb2Zmc2V0b2YoVGVzdFJlc2l6YWJsZVNobWVtU3RydWN0LCBkYXRhKSArIChuZXdfZW50 cmllcyAqIFRFU1RfRU5UUllfU0laRSk7CisJU2htZW1SZXNpemVSZWdpc3RlcmVkKCZ0ZXN0U2ht ZW1EZXNjLCBuZXdfc2l6ZSk7CisJcmVzaXphYmxlX3NobWVtLT5udW1fZW50cmllcyA9IG5ld19l bnRyaWVzOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKKyNlbHNlCisJZXJlcG9ydChFUlJPUiwKKwkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCSBlcnJtc2coInJl c2l6YWJsZSBzaGFyZWQgbWVtb3J5IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIp KSk7CisjZW5kaWYKK30KKworLyoKKyAqIFdyaXRlIHRoZSBnaXZlbiBpbnRlZ2VyIHZhbHVlIHRv IGFsbCBlbnRyaWVzIGluIHRoZSBkYXRhIGFycmF5LgorICovCitEYXR1bQorcmVzaXphYmxlX3No bWVtX3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50MzIJCWVudHJ5X3ZhbHVlID0gUEdf R0VUQVJHX0lOVDMyKDApOworCWludDMyCQlpOworCisJaWYgKCFyZXNpemFibGVfc2htZW0pCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJF UVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygicmVzaXphYmxlX3NobWVtIGlzIG5vdCBpbml0 aWFsaXplZCIpKSk7CisKKwkvKiBXcml0ZSB0aGUgdmFsdWUgdG8gYWxsIGN1cnJlbnQgZW50cmll cyAqLworCWZvciAoaSA9IDA7IGkgPCByZXNpemFibGVfc2htZW0tPm51bV9lbnRyaWVzOyBpKysp CisJCXJlc2l6YWJsZV9zaG1lbS0+ZGF0YVtpXSA9IGVudHJ5X3ZhbHVlOworCisJUEdfUkVUVVJO X1ZPSUQoKTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGZpcnN0ICdlbnRyeV9jb3Vu dCcgZW50cmllcyBhbGwgaGF2ZSB0aGUgZXhwZWN0ZWQgJ2VudHJ5X3ZhbHVlJy4KKyAqIFJldHVy bnMgdHJ1ZSBpZiBhbGwgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworRGF0dW0KK3Jlc2l6 YWJsZV9zaG1lbV9yZWFkKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50MzIJCWVudHJ5X2NvdW50 ID0gUEdfR0VUQVJHX0lOVDMyKDApOworCWludDMyCQllbnRyeV92YWx1ZSA9IFBHX0dFVEFSR19J TlQzMigxKTsKKwlpbnQzMgkJaTsKKworCWlmIChyZXNpemFibGVfc2htZW0gPT0gTlVMTCkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVR VUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJyZXNpemFibGVfc2htZW0gaXMgbm90IGluaXRp YWxpemVkIikpKTsKKworCS8qIFZhbGlkYXRlIGVudHJ5X2NvdW50ICovCisJaWYgKGVudHJ5X2Nv dW50IDwgMCB8fCBlbnRyeV9jb3VudCA+IHJlc2l6YWJsZV9zaG1lbS0+bnVtX2VudHJpZXMpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJIGVycm1zZygiZW50cnlfY291bnQgJWQgaXMgb3V0IG9mIHJhbmdlICgwLi4l ZCkiLCBlbnRyeV9jb3VudCwgcmVzaXphYmxlX3NobWVtLT5udW1fZW50cmllcykpKTsKKworCS8q IENoZWNrIGlmIGZpcnN0IGVudHJ5X2NvdW50IGVudHJpZXMgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFs dWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZW50cnlfY291bnQ7IGkrKykKKwl7CisJCWlmIChyZXNp emFibGVfc2htZW0tPmRhdGFbaV0gIT0gZW50cnlfdmFsdWUpCisJCQlQR19SRVRVUk5fQk9PTChm YWxzZSk7CisJfQorCisJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7Cit9CisKKy8qCisgKiBSZXBvcnQg bXVsdGlwbGUgbWVtb3J5IHVzYWdlIHN0YXRpc3RpY3Mgb2YgdGhlIGNhbGxpbmcgYmFja2VuZCBw cm9jZXNzCisgKiBhcyByZXBvcnRlZCBieSB0aGUga2VybmVsLgorICogUmV0dXJucyBSc3NBbm9u LCBSc3NGaWxlLCBSc3NTaG1lbSwgVm1TaXplIGZyb20gL3Byb2Mvc2VsZi9zdGF0dXMgYXMgYSBy ZWNvcmQuCisgKgorICogVE9ETzogU2VlIFRPRE8gbm90ZSBpbiBTUUwgZGVmaW5pdGlvbiBvZiB0 aGlzIGZ1bmN0aW9uLgorICovCitEYXR1bQorcmVzaXphYmxlX3NobWVtX3VzYWdlKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJRklMRQkgICAqZjsKKwljaGFyCQlsaW5lWzI1Nl07CisJaW50NjQJCXJz c19hbm9uX2tiID0gLTE7CisJaW50NjQJCXJzc19maWxlX2tiID0gLTE7CisJaW50NjQJCXJzc19z aG1lbV9rYiA9IC0xOworCWludDY0CQl2bV9zaXplX2tiID0gLTE7CisJaW50CQkJZm91bmQgPSAw OworCVR1cGxlRGVzYwl0dXBkZXNjOworCURhdHVtCQl2YWx1ZXNbNF07CisJYm9vbAkJbnVsbHNb NF07CisJSGVhcFR1cGxlCXR1cGxlOworCisJLyogT3BlbiAvcHJvYy9zZWxmL3N0YXR1cyB0byBy ZWFkIG1lbW9yeSBpbmZvcm1hdGlvbiAqLworCWYgPSBmb3BlbigiL3Byb2Mvc2VsZi9zdGF0dXMi LCAiciIpOworCWlmIChmID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gL3Byb2Mvc2Vs Zi9zdGF0dXM6ICVtIikpKTsKKworCS8qIExvb2sgZm9yIHRoZSBtZW1vcnkgdXNhZ2UgbGluZXMg Ki8KKwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSAhPSBOVUxMICYmIGZvdW5k IDwgNCkKKwl7CisJCWlmIChyc3NfYW5vbl9rYiA9PSAtMSAmJiBzc2NhbmYobGluZSwgIlJzc0Fu b246ICVsZCBrQiIsICZyc3NfYW5vbl9rYikgPT0gMSkKKwkJCWZvdW5kKys7CisJCWVsc2UgaWYg KHJzc19maWxlX2tiID09IC0xICYmIHNzY2FuZihsaW5lLCAiUnNzRmlsZTogJWxkIGtCIiwgJnJz c19maWxlX2tiKSA9PSAxKQorCQkJZm91bmQrKzsKKwkJZWxzZSBpZiAocnNzX3NobWVtX2tiID09 IC0xICYmIHNzY2FuZihsaW5lLCAiUnNzU2htZW06ICVsZCBrQiIsICZyc3Nfc2htZW1fa2IpID09 IDEpCisJCQlmb3VuZCsrOworCQllbHNlIGlmICh2bV9zaXplX2tiID09IC0xICYmIHNzY2FuZihs aW5lLCAiVm1TaXplOiAlbGQga0IiLCAmdm1fc2l6ZV9rYikgPT0gMSkKKwkJCWZvdW5kKys7CisJ fQorCisJZmNsb3NlKGYpOworCisJLyogQnVpbGQgdHVwbGUgZGVzY3JpcHRvciBmb3Igb3VyIHJl c3VsdCB0eXBlICovCisJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1 cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygiZnVuY3Rp b24gcmV0dXJuaW5nIHJlY29yZCBjYWxsZWQgaW4gY29udGV4dCAiCisJCQkJCQkidGhhdCBjYW5u b3QgYWNjZXB0IGEgcmVjb3JkIikpKTsKKworCS8qIEJ1aWxkIHRoZSByZXN1bHQgdHVwbGUgKi8K Kwl2YWx1ZXNbMF0gPSBJbnQ2NEdldERhdHVtKHJzc19hbm9uX2tiID49IDAgPyByc3NfYW5vbl9r YiAqIDEwMjQgOiAwKTsKKwl2YWx1ZXNbMV0gPSBJbnQ2NEdldERhdHVtKHJzc19maWxlX2tiID49 IDAgPyByc3NfZmlsZV9rYiAqIDEwMjQgOiAwKTsKKwl2YWx1ZXNbMl0gPSBJbnQ2NEdldERhdHVt KHJzc19zaG1lbV9rYiA+PSAwID8gcnNzX3NobWVtX2tiICogMTAyNCA6IDApOworCXZhbHVlc1sz XSA9IEludDY0R2V0RGF0dW0odm1fc2l6ZV9rYiA+PSAwID8gdm1fc2l6ZV9rYiAqIDEwMjQgOiAw KTsKKworCW51bGxzWzBdID0gbnVsbHNbMV0gPSBudWxsc1syXSA9IG51bGxzWzNdID0gZmFsc2U7 CisKKwl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZSh0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKTsKKwlQ R19SRVRVUk5fREFUVU0oSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUpKTsKK30KKworLyoKKyAqIHJl c2l6YWJsZV9zaG1lbV9wYWdlc2l6ZSgpIC0gR2V0IHRoZSBzaGFyZWQgbWVtb3J5IHBhZ2Ugc2l6 ZQorICovCitEYXR1bQorcmVzaXphYmxlX3NobWVtX3BhZ2VzaXplKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJUEdfUkVUVVJOX0lOVDMyKHBnX2dldF9zaG1lbV9wYWdlc2l6ZSgpKTsKK30KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS5j b250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVt LmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFjZTJjNWVh MjFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0v cmVzaXphYmxlX3NobWVtLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHJlc2l6YWJsZV9zaG1l bSBleHRlbnNpb24gdGVzdCBtb2R1bGUKK2NvbW1lbnQgPSAndGVzdCBtb2R1bGUgZm9yIHRlc3Rp bmcgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIGZ1bmN0aW9uYWxpdHknCitkZWZh dWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcmVzaXphYmxl X3NobWVtJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Jlc2l6YWJsZV9zaG1lbS90LzAwMV9yZXNpemFibGVfc2htZW0ucGwgYi9zcmMvdGVzdC9tb2R1 bGVzL3Jlc2l6YWJsZV9zaG1lbS90LzAwMV9yZXNpemFibGVfc2htZW0ucGwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMwOGIxZTY2YzY1Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vdC8wMDFfcmVzaXphYmxlX3NobWVt LnBsCkBAIC0wLDAgKzEsMTM2IEBACisjIS91c3IvYmluL3BlcmwKKyMgQ29weXJpZ2h0IChjKSAy MDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0Owor dXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBU ZXN0IHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IGZ1bmN0aW9uYWxpdHkKKworbXkgJG5vZGUgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3Jlc2l6YWJsZV9zaG1lbScpOworCiskbm9k ZS0+aW5pdDsKKyMgTmVlZCB0byBjb25maWd1cmUgZm9yIHJlc2l6YWJsZV9zaG1lbSB3aGVuIHRo ZSBzZXJ2ZXIgc3RhcnRzCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdz aGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSByZXNpemFibGVfc2htZW0nKTsKKyMgUmVkdWNlIHRo ZSBzaGFyZWQgbWVtb3J5IHVzYWdlIGFzIG11Y2ggYXMgcG9zc2libGUgc28gdGhhdCByZXNpemFi bGVfc2htZW0KKyMgc3RydWN0dXJlIGRvbWluYXRlcyB0aGUgc2hhcmVkIG1lbW9yeSB1c2FnZSBh bmQgaXQncyBlYXN5IHRvIGRldGVjdCBhbnkKKyMgZGlncmVzc2lvbnMgaW4gdGhlIGV4cGVjdGVk IHNoYXJlZCBtZW1vcnkgdXNhZ2UgYmVjYXVzZSBvZiB0aGlzIHN0cnVjdHVyZS4KKyRub2RlLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3NoYXJlZF9idWZmZXJzID0gMTI4a0InKTsK KyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21heF9jb25uZWN0aW9ucyA9 IDUnKTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21heF93b3JrZXJf cHJvY2Vzc2VzID0gMCcpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAn bWF4X3dhbF9zZW5kZXJzID0gMCcpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLCAnbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDAnKTsKKyRub2RlLT5hcHBlbmRfY29u ZigncG9zdGdyZXNxbC5jb25mJywgJ21heF9sb2Nrc19wZXJfdHJhbnNhY3Rpb24gPSAxMCcpOwor JG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnbWF4X3ByZWRfbG9ja3NfcGVy X3RyYW5zYWN0aW9uID0gMTAnKTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25m JywgJ3dhbF9idWZmZXJzID0gMzJrQicpOworJG5vZGUtPnN0YXJ0OworCisjIENyZWF0ZSBleHRl bnNpb24KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gcmVz aXphYmxlX3NobWVtOycpOworCisjIERldGVjdCB3aGV0aGVyIHJlc2l6YWJsZSBzaGFyZWQgbWVt b3J5IGlzIHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtCitteSAkaGF2ZV9yZXNpemFibGVfc2ht ZW0gPQorICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTSE9XIGhhdmVfcmVzaXphYmxl X3NobWVtOycpIGVxICdvbic7CisKK215ICRudW1fZW50cmllcyA9IDI1ICogMTAyNCAqIDEwMjQ7 ICMgSW5pdGlhbCBudW1iZXIgb2YgZW50cmllcyBpbiByZXNpemFibGUgc2hhcmVkIG1lbW9yeQor bXkgJG1heF9lbnRyaWVzID0gMTAwICogMTAyNCAqIDEwMjQ7ICMgTWF4aW11bSBudW1iZXIgb2Yg ZW50cmllcyBhbGxvd2VkCisKKyMgQmFzaWMgcmVhZC93cml0ZSBzaG91bGQgd29yayBvbiBhbGwg cGxhdGZvcm1zCitteSAkdmFsdWUgPSAxMDA7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3dyaXRlKCR2YWx1ZSk7Iik7Citpcygkbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3JlYWQoJG51bV9lbnRy aWVzLCAkdmFsdWUpOyIpLAorICAgJ3QnLCAnZGF0YSByZWFkIGFmdGVyIHdyaXRlIHN1Y2Nlc3Nm dWwnKTsKKworaWYgKCRoYXZlX3Jlc2l6YWJsZV9zaG1lbSkKK3sKKwkjIFF1ZXJ5IHN0cmluZyB2 YXJpYWJsZXMgZm9yIHJldXNlCisJbXkgJHRvdGFsX2FsbG9jX3F1ZXJ5ID0gIlNFTEVDVCBzdW0o YWxsb2NhdGVkX3NpemUpIEZST00gcGdfc2htZW1fYWxsb2NhdGlvbnM7IjsKKwkjIEN1cnJlbnRs eSBvbmx5IG9uZSBzdHJ1Y3R1cmUgaXMgcmVzaXphYmxlCisJbXkgJGZpeGVkX3N0cnVjdF9xdWVy eSA9ICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19zaG1lbV9hbGxvY2F0aW9ucyBXSEVSRSBuYW1l IDw+ICdyZXNpemFibGVfc2htZW0nIGFuZCBzaXplIDw+IG1heGltdW1fc2l6ZTsiOworCisJbXkg JHBhZ2Vfc2l6ZSA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCByZXNpemFi bGVfc2htZW1fcGFnZXNpemUoKTsiKTsKKworCSMgQ3JlYXRlIGJhY2tncm91bmQgc2Vzc2lvbnMg Zm9yIHRlc3RpbmcKKwlteSAkc2Vzc2lvbjEgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0 Z3JlcycpOworCW15ICRzZXNzaW9uMiA9ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVz Jyk7CisKKwkjIFZlcmlmeSB0aGF0IFJzc1NobWVtIGRvZXMgbm90IGV4Y2VlZCB0aGUgdG90YWwg YWxsb2NhdGVkIHNoYXJlZCBtZW1vcnkuCisJIyBBbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeSBzaG91 bGQgYmUgbW9zdGx5IHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoZQorCSMgcmVzaXphYmxlX3No bWVtIHN0cnVjdHVyZS4gQW55IGxhcmdlIGluY3JlYXNlIGluIGV4cGVjdGVkIFJzc1NobWVtCisJ IyByZWZsZWN0cyB0aGUgdW5lcHhlY3RlZCBpbmNyZWFzZSBpbiBtZW1vcnkgYWxsb2NhdGVkIHRv IHRoZQorCSMgcmVzaXphYmxlX3NobWVtIHN0cnVjdHVyZS4KKwlzdWIgY2hlY2tfc2htZW1fdXNh Z2UKKwl7CisJCW15ICgkc2Vzc2lvbiwgJGxhYmVsKSA9IEBfOworCisJCW15ICRyc3Nfc2htZW0g PSAkc2Vzc2lvbi0+cXVlcnlfc2FmZSgnU0VMRUNUIHJzc19zaG1lbSBGUk9NIHJlc2l6YWJsZV9z aG1lbV91c2FnZSgpOycsIHZlcmJvc2UgPT4gMCk7CisJCW15ICR0b3RhbF9hbGxvYyA9ICRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJHRvdGFsX2FsbG9jX3F1ZXJ5KTsKKworCQlub3RlICIk bGFiZWw6IFJzc1NobWVtPSRyc3Nfc2htZW0sIHN1bShhbGxvY2F0ZWRfc2l6ZSk9JHRvdGFsX2Fs bG9jIjsKKwkJb2soJHJzc19zaG1lbSA8PSAkdG90YWxfYWxsb2MsICIkbGFiZWw6IFJzc1NobWVt IGRvZXMgbm90IGV4Y2VlZCB0b3RhbCBhbGxvY2F0ZWQgc2l6ZSIpOworCX0KKworCSR2YWx1ZSA9 IDEwMDsKKwkjIFdyaXRlIGFuZCByZWFkIHRoZSBpbml0aWFsIHNldCBvZiBlbnRyaWVzLgorCSRz ZXNzaW9uMS0+cXVlcnlfc2FmZSgiU0VMRUNUIHJlc2l6YWJsZV9zaG1lbV93cml0ZSgkdmFsdWUp OyIsIHZlcmJvc2UgPT4gMCk7CisJaXMoJHNlc3Npb24yLT5xdWVyeV9zYWZlKCJTRUxFQ1QgcmVz aXphYmxlX3NobWVtX3JlYWQoJG51bV9lbnRyaWVzLCAkdmFsdWUpOyIsIHZlcmJvc2UgPT4gMCks ICd0JywgJ2RhdGEgcmVhZCBhZnRlciB3cml0ZSBzdWNjZXNzZnVsJyk7CisJY2hlY2tfc2htZW1f dXNhZ2UoJHNlc3Npb24xLCAnaW5pdGlhbCB3cml0ZSAoc2Vzc2lvbiAxKScpOworCWNoZWNrX3No bWVtX3VzYWdlKCRzZXNzaW9uMiwgJ2luaXRpYWwgd3JpdGUgKHNlc3Npb24gMiknKTsKKwlpcygk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICRmaXhlZF9zdHJ1Y3RfcXVlcnkpLCAnMCcsICdp bml0aWFsIGZpeGVkIHNpemVkIHN0cnVjdHVyZXMnKTsKKworCSMgSGVscGVyIHRvIHRlc3QgYSBy ZXNpemUgb3BlcmF0aW9uOiByZXNpemUsIHZlcmlmeSBvbGQgZGF0YSwgd3JpdGUgbmV3CisJIyBk YXRhLCB2ZXJpZnkgbmV3IGRhdGEsIGNoZWNrIHNobWVtIHVzYWdlIGFuZCBmaXhlZC1zaXplIHN0 cnVjdHVyZXMuCisJc3ViIHRlc3RfcmVzaXplCisJeworCQlteSAoJG5ld19udW1fZW50cmllcywg JG5ld192YWx1ZSwgJHJlc2l6ZV9zZXNzaW9uLCAkbGFiZWwpID0gQF87CisKKwkJbXkgJG9sZF9u dW1fZW50cmllcyA9ICRudW1fZW50cmllczsKKwkJJG51bV9lbnRyaWVzID0gJG5ld19udW1fZW50 cmllczsKKworCQkkcmVzaXplX3Nlc3Npb24tPnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNpemFibGVf c2htZW1fcmVzaXplKCRudW1fZW50cmllcyk7IiwgdmVyYm9zZSA9PiAwKTsKKworCQkjIE9sZCBk YXRhIHNob3VsZCBzdGlsbCBiZSBpbnRhY3QgaW4gdGhlIChwb3NzaWJseSBzbWFsbGVyKSBhcmVh CisJCW15ICRyZWFkYWJsZV9lbnRyaWVzID0gKCRudW1fZW50cmllcyA8ICRvbGRfbnVtX2VudHJp ZXMpID8gJG51bV9lbnRyaWVzIDogJG9sZF9udW1fZW50cmllczsKKwkJaXMoJHNlc3Npb24xLT5x dWVyeV9zYWZlKCJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3JlYWQoJHJlYWRhYmxlX2VudHJpZXMs ICR2YWx1ZSk7IiwgdmVyYm9zZSA9PiAwKSwgJ3QnLCAib2xkIGRhdGEgcmVhZGFibGUgYWZ0ZXIg JGxhYmVsIik7CisKKwkJJHZhbHVlID0gJG5ld192YWx1ZTsKKwkJJHNlc3Npb24yLT5xdWVyeV9z YWZlKCJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3dyaXRlKCR2YWx1ZSk7IiwgdmVyYm9zZSA9PiAw KTsKKwkJaXMoJHNlc3Npb24xLT5xdWVyeV9zYWZlKCJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3Jl YWQoJG51bV9lbnRyaWVzLCAkdmFsdWUpOyIsIHZlcmJvc2UgPT4gMCksICd0JywgIm5ldyBkYXRh IHJlYWRhYmxlIGFmdGVyICRsYWJlbCIpOworCisJCWNoZWNrX3NobWVtX3VzYWdlKCRzZXNzaW9u MSwgIiRsYWJlbCAoc2Vzc2lvbiAxKSIpOworCQljaGVja19zaG1lbV91c2FnZSgkc2Vzc2lvbjIs ICIkbGFiZWwgKHNlc3Npb24gMikiKTsKKwkJaXMoJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAkZml4ZWRfc3RydWN0X3F1ZXJ5KSwgJzAnLCAiZml4ZWQgc2l6ZWQgc3RydWN0dXJlcyBhZnRl ciAkbGFiZWwiKTsKKwkJbm90ZSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg KiBGUk9NIHBnX3NobWVtX2FsbG9jYXRpb25zIFdIRVJFIG5hbWUgPD4gJ3Jlc2l6YWJsZV9zaG1l bScgYW5kIHNpemUgPD4gbWF4aW11bV9zaXplOyIpOworCX0KKworCSMgUmVzaXplIHRvIG1heGlt dW0KKwl0ZXN0X3Jlc2l6ZSgkbWF4X2VudHJpZXMsIDUwMCwgJHNlc3Npb24xLCAncmVzaXplIHRv IG1heGltdW0nKTsKKworCSMgU2hyaW5rIHRvIHNtYWxsZXIgc2l6ZQorCXRlc3RfcmVzaXplKDc1 ICogMTAyNCAqIDEwMjQsIDk5OSwgJHNlc3Npb24yLCAnc2hyaW5raW5nJyk7CisKKwkjIFJlc2l6 ZSB0byB0aGUgc2FtZSBzaXplIChuby1vcCkKKwl0ZXN0X3Jlc2l6ZSgkbnVtX2VudHJpZXMsIDE5 OTksICRzZXNzaW9uMiwgJ25vLW9wIHJlc2l6ZScpOworCisJIyBUZXN0IHJlc2l6ZSBmYWlsdXJl IChhdHRlbXB0IHRvIHJlc2l6ZSBiZXlvbmQgbWF4IC0gc2hvdWxkIGZhaWwpCisJbXkgKCRyZXQs ICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCByZXNp emFibGVfc2htZW1fcmVzaXplKCIgLiAoJG1heF9lbnRyaWVzICogMikgLiAiKTsiKTsKKwlvaygk cmV0ICE9IDAgfHwgJHN0ZGVyciA9fiAvRVJST1IvLCAnUmVzaXplIGJleW9uZCBtYXhpbXVtIGZh aWxzJyk7CisKKwkjIENsZWFudXAgc2Vzc2lvbnMKKwkkc2Vzc2lvbjEtPnF1aXQ7CisJJHNlc3Np b24yLT5xdWl0OworfQorZWxzZQoreworCSMgT24gdW5zdXBwb3J0ZWQgcGxhdGZvcm1zLCByZXNp emluZyBzaG91bGQgZmFpbCB3aXRoIGEgY2xlYXIgZXJyb3IKKwlteSAoJHJldCwgJHN0ZG91dCwg JHN0ZGVycikgPSAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHJlc2l6YWJsZV9zaG1l bV9yZXNpemUoJG51bV9lbnRyaWVzKTsiKTsKKwlvaygkcmV0ICE9IDAsICdyZXNpemUgZmFpbHMg b24gdW5zdXBwb3J0ZWQgcGxhdGZvcm0nKTsKKwlsaWtlKCRzdGRlcnIsIHFyL25vdCBzdXBwb3J0 ZWQvLCAncmVzaXplIGVycm9yIG1lbnRpb25zIG5vdCBzdXBwb3J0ZWQnKTsKK30KKworIyBDbGVh bnVwCiskbm9kZS0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cnVsZXMub3V0CmluZGV4IDJiM2NmNmQ4NTY5Li4yNGI1YmE1OGFkMSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQKQEAgLTE3NzAsOCArMTc3MCwxMCBAQCBwZ19zaGFkb3d8IFNFTEVD VCBwZ19hdXRoaWQucm9sbmFtZSBBUyB1c2VuYW1lLAogcGdfc2htZW1fYWxsb2NhdGlvbnN8IFNF TEVDVCBuYW1lLAogICAgIG9mZiwKICAgICBzaXplLAotICAgIGFsbG9jYXRlZF9zaXplCi0gICBG Uk9NIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucygpIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucyhu YW1lLCBvZmYsIHNpemUsIGFsbG9jYXRlZF9zaXplKTsKKyAgICBhbGxvY2F0ZWRfc2l6ZSwKKyAg ICBtYXhpbXVtX3NpemUsCisgICAgYWxsb2NhdGVkX3NwYWNlCisgICBGUk9NIHBnX2dldF9zaG1l bV9hbGxvY2F0aW9ucygpIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucyhuYW1lLCBvZmYsIHNpemUs IGFsbG9jYXRlZF9zaXplLCBtYXhpbXVtX3NpemUsIGFsbG9jYXRlZF9zcGFjZSk7CiBwZ19zaG1l bV9hbGxvY2F0aW9uc19udW1hfCBTRUxFQ1QgbmFtZSwKICAgICBudW1hX25vZGUsCiAgICAgc2l6 ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA4NTYzZDZkMmM5Ny4uZDExMDI0MGUyZWIg MTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zMTM3LDYgKzMxMzcsNyBAQCBUZXN0RFNN UmVnaXN0cnlIYXNoRW50cnkKIFRlc3REU01SZWdpc3RyeVN0cnVjdAogVGVzdERlY29kaW5nRGF0 YQogVGVzdERlY29kaW5nVHhuRGF0YQorVGVzdFJlc2l6YWJsZVNobWVtU3RydWN0CiBUZXN0U2ht ZW1EYXRhCiBUZXN0U3BlYwogVGVzdFZhbHVlVHlwZQo= --000000000000105a4d064e74baa4--