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 1wHa2o-007JsK-1Q for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Apr 2026 04:27:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wHa2n-00FvtL-2J for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Apr 2026 04:27:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wHa2m-00FvtA-2j for pgsql-hackers@lists.postgresql.org; Tue, 28 Apr 2026 04:27:33 +0000 Received: from mail-yx1-xb129.google.com ([2607:f8b0:4864:20::b129]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wHa2i-000000038Iz-0AEV for pgsql-hackers@postgresql.org; Tue, 28 Apr 2026 04:27:31 +0000 Received: by mail-yx1-xb129.google.com with SMTP id 956f58d0204a3-64e87a81639so9863214d50.0 for ; Mon, 27 Apr 2026 21:27:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777350447; cv=none; d=google.com; s=arc-20240605; b=Nhpumhukx04RvDoQyEA0I5i8R8GGYfHxU4a3HAlWsBgK3a9SeUsEo7UlKJqjQ9KbtD L9vBmiGA9Ew5oamaFwqnukS1PItPvX/jgk2kyYOWcFEHWQkIW05e4b6ifOwXgqTw+w9d gOGa/Tz11+xxp8swcQMya3RLkzYlPBxooWFWM+Esx38V0KKihNDFjp3QS//iDQBJ0M+s IykJwi4pDkf4NGsrqReft4iMGiNGiqYDuNe0Q/zjChcfQ4q6O4qRKb52kSf24u4vBLM0 xGpYDB4aeG4Sg/1Zz843YMWvEyga/9UdGtM2a8LJryQR1ENklqxZcZHus2CnKKo0dE7m nQWg== 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=5DcJuqdkrmGGGDSkTxjcp6E7O7hRTDDalU5pSM+dviA=; fh=uShwQkHlhZh7K+suDGdNKbPBFWlq/KjpDcRJ441QgTE=; b=fkFmnds2MxS7fmIykBow/Q7TWGQwJ/QRwzwRnWfPAq3C6v/sz9GBkRovWhH4DhQFKG muy0t8e88nIQ0XH6nE5db7kh5ACJThklLnZoZNIgHW8cCljVS65fybU3CpQ5WguY7lgb JRW9zkw1L40FNoxT3stm0WWR/uRo18jW/x2iSWVeAKsxeNWN0Eqo5LnGepQLznHGMaV3 3rtgZ6JrTxK0lg6JVQQp8ZSKg8TWKNELw8FMSXOZz1atDROw4lIcPtlgfNVZ5kdkD0wo UStt/EY767SQYm/aZJqmqtE885RPd1ToYaNhsntAA3HNzVqhlHiJVg83xNy83pErFfh1 RT1g==; 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=1777350447; x=1777955247; 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=5DcJuqdkrmGGGDSkTxjcp6E7O7hRTDDalU5pSM+dviA=; b=gooUnTXDjDuUcQtDIHyOraRntH4K7/BN8gY+SLGmmDDL8L76bSTwBH1nuegxuVGdJo Q+hAoSOuGrazWeuhz597KTBV0kpBeH9Vq6zXMmU/2FLKaKo9Xije75yANLBf3DRRdJa0 lwkmqe/MNgOeaap8XZP+k1yAgm8OWPpYMrJv4orUcyuOykY0V1NEX6aLkdmg21ROVuPv 4TvCHdJ3zExLH3NSa6Pm/cTTYSx/zNecmXhVYNzQiuumFceEjCIBNSWRlZHxPZ+/BHfP x8bz/ykF9nkgEdotGb5fh7MLdUBvg/U1zdPSDNOQ98pfUtVYRA+zoUNeoOi+L6ElAzQS kcOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777350447; x=1777955247; 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=5DcJuqdkrmGGGDSkTxjcp6E7O7hRTDDalU5pSM+dviA=; b=Nej745CyFhDtb25gMD06anfIA1jzOSd4437H8IPCBZuowOViiyrfehWK1nKW15daCx MdoDQ59MjxNQuvHjshkDjHy+W9m8Ih5NYXQsQ2DlA8VmgPVQZK0fVV2H9fd6HrrvuGlI 5ZrZGKL5bspxKLal2j84SCEq7e0APF4TGaVQRwerEI/wPSmwDdSm/KZN7W2XxyM8ZVM5 54ir3ZaVcX6EJM0zSlXwG2wRsS/agVHF9yBESA6Bveq/4MBRa9P6WLI3RBkmIwO9xZwQ FGsO4NN3AfsIkY6KvWURslyTAN2YrVN5ziqEGIlKlbaM01/H8odTKcSU+VjOOMLjHCiK JF+w== X-Forwarded-Encrypted: i=1; AFNElJ/p6JDcuN5OgYqkUwjzz/CmfHwyzp3gExMxCVtlQG3qKqDezaYHsavQ9dxUllbAwyan3bYV1VmL9uPn7sOQ@postgresql.org X-Gm-Message-State: AOJu0YyO2U2JW3DJHsaFN7dY9euv3YGgUPqnMa2lJQZ8EkodX1BDX1V4 1kC8PNVs/ognuMJmhfwZ3ucfCApfewRkOmio5c+S/Z0oJivZ4fkYBq2m7YzSId1DXGuQzHu1hYr m9AFHPXBLaGdPrqj3G6wAs8ghjOaphF0= X-Gm-Gg: AeBDievC9i5O03tAldATLvRjrAyjY4NFNYQsGUubNERinU6t5WLXLNBMZDptN/MCaj9 YY7yAhkYSjR8Z4jDcmuzSJ5iDd6MC3hoNGfRBsxZ8aEb7+sLUYvyCIS/xtaB7jZFreU5VkHjQ1S NbJ0fVXLxRoqIVBFrdUNaME0o3qPb/+v7K8eLLJulwTddKT4H94F7juVFFfiOupohuZsbPizCTD AwjajvHZbmGEjyqfz3kkVMEbRl51KY1eg3A6JaHC+HabEEIh+m75yVLfVn3L9YNrGpXHBNRsUtD Vm1m/plWYf0PnuxUm7Yl/lg9coOCU1RWijjVBIlXOr6EA2M4Q4AA0voR3cbjTQ== X-Received: by 2002:a05:690e:e84:b0:651:b86f:3657 with SMTP id 956f58d0204a3-65beee7c8a3mr1259258d50.36.1777350447463; Mon, 27 Apr 2026 21:27:27 -0700 (PDT) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> <6be6f58815dc0844fbe058edf56b4e735a6efc1c.camel@j-davis.com> <2280bf7241119bb88cbe0fe5eb36490cbd04c0c0.camel@j-davis.com> <12f1a2d8dd3b6305c0354f1c701f44b7be5e54eb.camel@j-davis.com> <8633171cb034aafc260fdf37df04b6c779aa1e2f.camel@j-davis.com> <229c4f7219ed164088dadc935df21e1cf125e191.camel@j-davis.com> <23a29125a2d07f96d49f97c31fcdb09a7f0ff6c1.camel@j-davis.com> <9F9326B4-8AD9-4858-B1C1-559FC64E6E93@gmail.com> <5EAAF124-98C1-425A-ACEC-131503F4070F@gmail.com> In-Reply-To: From: Haibo Yan Date: Mon, 27 Apr 2026 21:27:16 -0700 X-Gm-Features: AVHnY4KIRJtMazBJbMTefPMhY_DQVcmywLGBM5986fMdTLseSoyhfqP0svFn1tw Message-ID: Subject: Re: Introduce new multi insert Table AM and improve performance of various SQL commands with it for Heap AM To: Daniil Davydov <3danissimo@gmail.com> Cc: Jingtang Zhang , pgsql-hackers@lists.postgresql.org, PostgreSQL-development , Bharath Rupireddy Content-Type: multipart/mixed; boundary="00000000000010bb5b06507da644" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000010bb5b06507da644 Content-Type: multipart/alternative; boundary="00000000000010bb5a06507da642" --00000000000010bb5a06507da642 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Apr 26, 2026 at 2:56=E2=80=AFPM Daniil Davydov <3danissimo@gmail.co= m> wrote: > Hi, > > On Sun, Apr 6, 2025 at 8:55=E2=80=AFPM Jingtang Zhang > wrote: > > > > It was quite a while since I last looked at the patch. I've tested it > again, > > and still get regression on patched version where a table has many > columns. > > And it is totally CPU-bounded on tts_virtual_copyslot. > > > > Unpatched version: > > 1 col: > > Time: 8909.714 ms (00:08.910) > > Time: 8803.579 ms (00:08.804) > > Time: 8600.415 ms (00:08.600) > > 32 cols: > > Time: 12911.699 ms (00:12.912) > > Time: 13543.491 ms (00:13.543) > > Time: 13325.368 ms (00:13.325) > > > > Patched version: > > 1 col: > > Time: 3532.841 ms (00:03.533) > > Time: 3598.223 ms (00:03.598) > > Time: 3515.858 ms (00:03.516) > > 32 cols: > > Time: 35647.724 ms (00:35.648) > > Time: 35596.233 ms (00:35.596) > > Time: 35669.106 ms (00:35.669) > > > > Hm, maybe I didn't choose the best way to measure performance. Can you > please share how you do it? > > > I've tested your patch with tuplestore and found the regression does no= t > exist > > anymore, but I haven't look deep inside it. > > > > Patched version (with tuplestore): > > 1 col: > > Time: 3500.502 ms (00:03.501) > > Time: 3486.886 ms (00:03.487) > > Time: 3514.233 ms (00:03.514) > > 32 cols: > > Time: 10375.391 ms (00:10.375) > > Time: 10248.256 ms (00:10.248) > > Time: 10248.289 ms (00:10.248) > > > > It seems to be a good idea if there is no other issue with your patch. > > As far as I understand, the use of multi inserts for queries like > "INSERT INTO ... SELECT FROM" is not discussed here anymore due to the > fact that in such cases we will have to take into account the volatile > functions and ROW triggers. > I've been thinking about this for a while and made a patch as an > experiment. The principles that the patch works on are listed below. > 1) > Since performance decreases for single INSERTs (within a multi inserts > mechanism), I designed this feature as an option for the table. Thus, > if the user knows that he will perform a lot of inserts on the table, > he can specify "WITH (append_optimized=3Dtrue)". > 2) > The availability of volatile functions is monitored during the > construction of a subtree for a ModifyTable node. I'm not that > familiar with the query plan construction mechanism, but it seems to > me that this way we can track any occurrence of volatile functions. > Of course, most volatile functions don't stop us from using multi > inserts, but checking each such function would take a very long time, > so the very fact of having a volatile function is enough for us to > abandon multi-inserts. > 3) > Default expressions of the target table are also checked for volatile > functions. The same rules apply to them as in (2). As an exception, I > allowed the use of SERIAL in the column data type, since this is a > fairly common use case. > 4) > If the target table contains any ROW triggers, we don't use multi insert. > 5) > Patch also contains a regression test. This is a "sandbox" where you > can do some experiments with append-optimized tables. > > I hope that patch (targeted on 'master' branch, > 2c7bd2ba507e273f2d7fe1b2f6d30775ed4f3c09) will be useful for this > thread. > > -- > Best regards, > Daniil Davydov > Hi all, I picked this work up again and implemented the full 5-patch series. The series is structured as follows: - 0001 adds the buffered-insert lifecycle API in tableam/heapam and provides the heap implementation. - 0002 adopts the API for CTAS. - 0003 adopts the API for CREATE MATERIALIZED VIEW and REFRESH MATERIALIZED VIEW. - 0004 adopts the API for COPY FROM. - 0005 adopts the API for a restricted first step of INSERT INTO =E2=80= =A6 SELECT . I also reran performance testing locally on my machine: - Hardware: MacBook Pro M4, 36GB RAM - shared_buffers: 128MB I compared the unpatched baseline against the current patched series for CTAS, CMV, RMV, and INSERT INTO ... SELECT. Table 1 =E2=80=94 Median (ms) Workload 10K Before 10K After 10K Improv 100K Before 100K After 100K Improv 1M Before 1M After 1M Improv CTAS 1.60 1.17 +26.9% 9.19 5.70 +38.0% 105.61 73.28 +30.6% CMV 2.11 1.77 +16.1% 10.28 6.20 +39.7% 110.10 79.64 +27.7% RMV 1.62 1.19 +26.5% 9.91 5.43 +45.2% 106.04 69.57 +34.4% INSERT =E2=80=A6 SELECT 1.72 0.89 +48.3% 15.39 7.46 +51.5% 228.24 84.66 +62.9% Table 2 =E2=80=94 Average (ms) Workload 10K Before 10K After 10K Improv 100K Before 100K After 100K Improv 1M Before 1M After 1M Improv CTAS 1.65 1.26 +24.1% 9.37 5.82 +37.9% 104.81 74.31 +29.1% CMV 2.34 1.82 +22.2% 10.32 6.25 +39.4% 110.32 80.50 +27.0% RMV 1.92 1.21 +36.9% 9.86 5.49 +44.3% 106.79 69.53 +34.9% INSERT =E2=80=A6 SELECT 1.69 0.90 +46.8% 15.45 7.39 +52.2% 210.62 85.19 +59.6% These numbers look ok to me to continue the discussion with the current design and implementation. One point worth calling out explicitly: the INSERT INTO ... SELECT support in patch 5 is intentionally limited, as described above. It is not intended to claim broad executor coverage yet. One further improvement still seems possible: making the heap implementation cache raw HeapTuple bytes directly instead of maintaining buffered slot arrays. I looked at that direction, but did not include it in this series because it felt like a larger scope change than what I wanted for v1. At this point, I think the current series is in reasonable shape and I=E2= =80=99d really appreciate review on both the API shape and the caller adoptions. Thanks, Haibo --00000000000010bb5a06507da642 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Sun, Apr 26, 2026 at 2:56=E2=80=AFPM D= aniil Davydov <3danissimo@gmail.= com> wrote:
Hi,

On Sun, Apr 6, 2025 at 8:55=E2=80=AFPM Jingtang Zhang <mrdrivingduck@gmail.com>= wrote:
>
> It was quite a while since I last looked at the patch. I've tested= it again,
> and still get regression on patched version where a table has many col= umns.
> And it is totally CPU-bounded on tts_virtual_copyslot.
>
> Unpatched version:
> 1 col:
> Time: 8909.714 ms (00:08.910)
> Time: 8803.579 ms (00:08.804)
> Time: 8600.415 ms (00:08.600)
> 32 cols:
> Time: 12911.699 ms (00:12.912)
> Time: 13543.491 ms (00:13.543)
> Time: 13325.368 ms (00:13.325)
>
> Patched version:
> 1 col:
> Time: 3532.841 ms (00:03.533)
> Time: 3598.223 ms (00:03.598)
> Time: 3515.858 ms (00:03.516)
> 32 cols:
> Time: 35647.724 ms (00:35.648)
> Time: 35596.233 ms (00:35.596)
> Time: 35669.106 ms (00:35.669)
>

Hm, maybe I didn't choose the best way to measure performance. Can you<= br> please share how you do it?

> I've tested your patch with tuplestore and found the regression do= es not exist
> anymore, but I haven't look deep inside it.
>
> Patched version (with tuplestore):
> 1 col:
> Time: 3500.502 ms (00:03.501)
> Time: 3486.886 ms (00:03.487)
> Time: 3514.233 ms (00:03.514)
> 32 cols:
> Time: 10375.391 ms (00:10.375)
> Time: 10248.256 ms (00:10.248)
> Time: 10248.289 ms (00:10.248)
>
> It seems to be a good idea if there is no other issue with your patch.=

As far as I understand, the use of multi inserts for queries like
"INSERT INTO ... SELECT FROM" is not discussed here anymore due t= o the
fact that in such cases we will have to take into account the volatile
functions and ROW triggers.
I've been thinking about this for a while and made a patch as an
experiment. The principles that the patch works on are listed below.
1)
Since performance decreases for single INSERTs (within a multi inserts
mechanism), I designed this feature as an option for the table. Thus,
if the user knows that he will perform a lot of inserts on the table,
he can specify "WITH (append_optimized=3Dtrue)".
2)
The availability of volatile functions is monitored during the
construction of a subtree for a ModifyTable node. I'm not that
familiar with the query plan construction mechanism, but it seems to
me that this way we can track any occurrence of volatile functions.
Of course, most volatile functions don't stop us from using multi
inserts, but checking each such function would take a very long time,
so the very fact of having a volatile function is enough for us to
abandon multi-inserts.
3)
Default expressions of the target table are also checked for volatile
functions. The same rules apply to them as in (2). As an exception, I
allowed the use of SERIAL in the column data type, since this is a
fairly common use case.
4)
If the target table contains any ROW triggers, we don't use multi inser= t.
5)
Patch also contains a regression test. This is a "sandbox" where = you
can do some experiments with append-optimized tables.

I hope that patch (targeted on 'master' branch,
2c7bd2ba507e273f2d7fe1b2f6d30775ed4f3c09) will be useful for this
thread.

--
Best regards,
Daniil Davydov

Hi all,=

I picked this work up again and implemented the full = 5-patch series.

The series is structured as follows:

  • 0001 adds the buffered-insert lifec= ycle API in tableam/heapam and provides the heap implementation.
  • 0002 adopts the API = for CTAS.
  • 0003= adopts the API for CREATE MATERIALIZED VIE= W and REFRE= SH MATERIALIZED VIEW.
  • 0004 adopts the API for = COPY FROM.<= /span>
  • 0005 adopts the API for a re= stricted first step of INSERT INTO =E2=80=A6 SELEC= T.

I also reran performance testing locally on my machin= e:

  • Hardware: MacBook Pro M4, 36GB RAM<= /li>
  • shared_buffers: 128MB

I compared the unpatched baseline against the current= patched series for CTAS, CMV, RMV, and INSERT INTO ... SELECT= .

Table 1 =E2=80=94 Median (ms)=C2=A0

CTAS

73.28

=

Workload

10K Before

10K After

10K Improv

100K Before

100K After

100K Improv

1M Before

1M After

1M Improv

1.60

1.17

+26.9%

9.19

5.70

+38.0%

105.61

+30.6%

CMV

2.11

1.77

+16.1%

10.28

6.20

+39.7%

110.10

7= 9.64

+27.7%

RMV

1.62

1.19

+26.5= %

9.91

5.43

+45.2%

106.04

69.57

+34.4%

INSERT =E2=80=A6 SELE= CT

1.72

0.89

+48.3%

15.39

7.46

+51.5%

228.24

84.= 66

+62.9%

Table 2 =E2=80=94 Average (ms)

+36.9%

Workload

10K Before

10K After

10K Improv

100K Before

100K After

100K Improv

1M Before

1M After

1M Improv

CTAS

1.65

1.26

+24.1%

9.37

5.82

+37.9%

104.= 81

74.31

+29.1%

CMV

2.34

1.82

<= p class=3D"gmail-p1">+22.2%

10.32

6.25

+39.4%

110.32

80.50

+27.0%

RMV

1.92

1.21

9.86

5.49

=

+44.3%

106.79

69.53

+34.9%

INSERT = =E2=80=A6 SELECT

1.69

0.90

<= /td>

+46.8%

15.45

= 7.39

+52.2%

210.62

85.19

+59.6%

<= p class=3D"gmail-p1">These numbers look ok to me to continue the discussion= with the current design and implementation.

One p= oint worth calling out explicitly: the INSERT INTO ... SELECT support in pa= tch 5 is intentionally limited, as described above. It is not intended to c= laim broad executor coverage yet.

One further impr= ovement still seems possible: making the heap implementation cache raw HeapTuple bytes directly instead of maintaining buffered slot arra= ys. I looked at that direction, but did not include it in this series becau= se it felt like a larger scope change than what I wanted for v1.

At this point, I think the current series is in reasonable s= hape and I=E2=80=99d really appreciate review on both the API shape and the= caller adoptions.

Thanks,
Haibo

--00000000000010bb5a06507da642-- --00000000000010bb5b06507da644 Content-Type: application/octet-stream; name="v1-0001-tableam-heapam-add-buffered-insert-lifecycle-API-.patch" Content-Disposition: attachment; filename="v1-0001-tableam-heapam-add-buffered-insert-lifecycle-API-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_moi4bjne0 RnJvbSBlZTA2OWIwZDNjOWIxNWFkOGQ0YjJhYjBiYmQ3M2YxMzkyZWQwMmMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFRodSwgMjMgQXByIDIwMjYgMTE6MTQ6MzYgLTA3MDAKU3ViamVjdDogW1BBVENIIHYxIDEvNV0g dGFibGVhbS9oZWFwYW06IGFkZCBidWZmZXJlZC1pbnNlcnQgbGlmZWN5Y2xlIEFQSSBmb3IKIGhl YXAKCkFkZCBhbiBvcHRpb25hbCBUYWJsZSBBTSBidWZmZXJlZC1pbnNlcnQgbGlmZWN5Y2xlIEFQ SSB3aXRoCmJlZ2luL3B1dC9mbHVzaC9lbmQgY2FsbGJhY2tzIGFuZCB0YWJsZWFtIHdyYXBwZXJz LgoKSW1wbGVtZW50IHRoZSBBUEkgZm9yIGhlYXAgb25seSwgaW5jbHVkaW5nIGludGVybmFsIGJ1 ZmZlcmluZywKaGVhcF9tdWx0aV9pbnNlcnQoKS1iYXNlZCBmbHVzaGVzLCBvcHRpb25hbCBwZXIt dHVwbGUgZmx1c2ggY2FsbGJhY2tzLAphbmQgZXhwbGljaXQgZW5kLW9mLXNlc3Npb24gY2xlYW51 cC4KCkFkZCBhIHNtYWxsIFRhYmxlIEFNLWxldmVsIHRlc3QgbW9kdWxlIGZvciBsaWZlY3ljbGUg dmFsaWRhdGlvbi4KCk5vIGNhbGxlciBhZG9wdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGlzIHBhdGNo LgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgICAgICB8IDMy MSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMgICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGku YyAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAg ICAgICAgICB8ICAxMiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAg ICAgICAgfCAxNTkgKysrKysrKysrCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAgICAgICAg ICAgICAgICAgIHwgICAxICsKIC4uLi9tb2R1bGVzL3Rlc3RfYnVmZmVyZWRfaW5zZXJ0L01ha2Vm aWxlICAgICB8ICAyMyArKwogLi4uL2V4cGVjdGVkL3Rlc3RfYnVmZmVyZWRfaW5zZXJ0Lm91dCAg ICAgICAgIHwgMTA4ICsrKysrKwogLi4uL21vZHVsZXMvdGVzdF9idWZmZXJlZF9pbnNlcnQvbWVz b24uYnVpbGQgIHwgIDMzICsrCiAuLi4vc3FsL3Rlc3RfYnVmZmVyZWRfaW5zZXJ0LnNxbCAgICAg ICAgICAgICAgfCAgNDEgKysrCiAuLi4vdGVzdF9idWZmZXJlZF9pbnNlcnQtLTEuMC5zcWwgICAg ICAgICAgICAgfCAgMzAgKysKIC4uLi90ZXN0X2J1ZmZlcmVkX2luc2VydC5jICAgICAgICAgICAg ICAgICAgICB8IDIzMyArKysrKysrKysrKysrCiAuLi4vdGVzdF9idWZmZXJlZF9pbnNlcnQuY29u dHJvbCAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgICAgICAgICAgICAgIHwgICA0ICsKIDE1IGZpbGVzIGNoYW5nZWQsIDk3MCBpbnNlcnRpb25z KCspLCAxOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYnVmZmVyZWRfaW5zZXJ0L01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2J1ZmZlcmVkX2luc2VydC9leHBlY3RlZC90ZXN0X2J1ZmZlcmVkX2lu c2VydC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnVmZmVy ZWRfaW5zZXJ0L21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2J1ZmZlcmVkX2luc2VydC9zcWwvdGVzdF9idWZmZXJlZF9pbnNlcnQuc3FsCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J1ZmZlcmVkX2luc2VydC90ZXN0 X2J1ZmZlcmVkX2luc2VydC0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9idWZmZXJlZF9pbnNlcnQvdGVzdF9idWZmZXJlZF9pbnNlcnQuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9idWZmZXJlZF9pbnNlcnQvdGVzdF9i dWZmZXJlZF9pbnNlcnQuY29udHJvbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggYWJm ZDhlODk3MGEuLmFlOTk0ZGQyMDJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtNTMs NiArNTMsNyBAQAogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5q ZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3NwY2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvc3lzY2FjaGUuaCIKIApAQCAtMTk4Miw2ICsxOTgzLDI2MyBAQCBSZWxlYXNlQnVsa0luc2Vy dFN0YXRlUGluKEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKQogfQogCiAKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICogSGVhcCBidWZmZXJlZC1pbnNlcnQgbGlmZWN5Y2xlIGltcGxlbWVudGF0aW9uLgor ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFByaXZhdGUgc3RhdGUgZm9yIHRoZSBo ZWFwIGJ1ZmZlcmVkLWluc2VydCBzZXNzaW9uLgorICoKKyAqIE1lbW9yeS1jb250ZXh0IGhpZXJh cmNoeSAoYWxsIGRlc3Ryb3llZCBieSBNZW1vcnlDb250ZXh0RGVsZXRlKHN0YXRlX2N0eCkpOgor ICoKKyAqICAgc3RhdGVfY3R4ICgiSGVhcEJ1ZmZlcmVkSW5zZXJ0IikgICAgICAgIC0tIGxvbmct bGl2ZWQsIG93bnMgc3RhYmxlIHN0YXRlCisgKiAgICAg4pSc4pSA4pSAIGJhdGNoX2N0eCAoIkhl YXBCdWZJbnNCYXRjaCIpICAgICAtLSBwZXItYmF0Y2ggSGVhcFR1cGxlcworICogICAgIOKUlOKU gOKUgCBtaV9jdHggKCJIZWFwQnVmSW5zRmx1c2giKSAgICAgICAgLS0gcGVyLWZsdXNoIHRyYW5z aWVudCBhbGxvY2F0aW9ucworICogICAgICAgICAgICDilJTilIDilIAgaGVhcF9tdWx0aV9pbnNl cnQgc2NyYXRjaCArIHRvYXN0ZWQgdHVwbGUgY29waWVzCisgKgorICogc3RhdGVfY3R4IG93bnM6 IHRoaXMgc3RydWN0LCB0aGUgSGVhcFR1cGxlIHBvaW50ZXIgYXJyYXksIGJpc3RhdGUsCisgKiAg IHNjcmF0Y2hfc2xvdCAoY2FsbGJhY2stb25seSkuCisgKiBiYXRjaF9jdHggb3duczogSGVhcFR1 cGxlcyBwcm9kdWNlZCBieSBFeGVjQ29weVNsb3RIZWFwVHVwbGUoKSBkdXJpbmcKKyAqICAgcHV0 KCkuICBJdCBpcyByZXNldCAobm90IGRlbGV0ZWQpIGFmdGVyIGVhY2ggZmx1c2gsIHdoaWNoIGJ1 bGstZnJlZXMgYWxsCisgKiAgIHBlci1iYXRjaCBhbGxvY2F0aW9ucy4KKyAqIG1pX2N0eCBvd25z OiBoZWFwX211bHRpX2luc2VydCdzIHRyYW5zaWVudCBhbGxvY2F0aW9ucyAoaW5jbHVkaW5nIGFu eQorICogICB0b2FzdGVkLXR1cGxlIGNvcGllcyBwcm9kdWNlZCBieSBoZWFwX3ByZXBhcmVfaW5z ZXJ0KS4gIEl0IGlzIHJlc2V0IGFmdGVyCisgKiAgIGVhY2ggZmx1c2ggb25jZSB0aGUgZmx1c2gg Y2FsbGJhY2sgKGlmIGFueSkgaGFzIGZpbmlzaGVkIHJlYWRpbmcgdGhlCisgKiAgIHBvc3QtcHJl cGFyZSB0dXBsZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IEhlYXBCdWZmZXJlZEluc2VydFN0YXRl Cit7CisJVGFibGVCdWZmZXJlZEluc2VydFN0YXRlRGF0YSBiYXNlOworCUNvbW1hbmRJZAljaWQ7 CisJaW50CQkJb3B0aW9uczsKKwlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsKKwlUYWJsZUJ1ZmZl cmVkSW5zZXJ0Rmx1c2hDYiBmbHVzaF9jYjsKKwl2b2lkCSAgICpmbHVzaF9jdHg7CisJSGVhcFR1 cGxlICAqdHVwbGVzOwkJCS8qIGJ1ZmZlcmVkIEhlYXBUdXBsZXMgKGluIGJhdGNoX2N0eCkgKi8K KwlpbnQJCQludHVwbGVzOworCWludAkJCW1heF90dXBsZXM7CisJU2l6ZQkJYnVmZmVyZWRfYnl0 ZXM7CS8qIHN1bSBvZiB0dXBsZXNbaV0tPnRfbGVuICovCisJVHVwbGVUYWJsZVNsb3QgKnNjcmF0 Y2hfc2xvdDsJLyogY2FsbGJhY2stb25seTsgSGVhcFR1cGxlLWJhY2tlZCAqLworCU1lbW9yeUNv bnRleHQgYmF0Y2hfY3R4OwkJLyogcGVyLWJhdGNoIEhlYXBUdXBsZXM7IHJlc2V0IGFmdGVyIGZs dXNoICovCisJTWVtb3J5Q29udGV4dCBtaV9jdHg7CQkJLyogcmVzZXQgYWZ0ZXIgZWFjaCBoZWFw X211bHRpX2luc2VydCAqLworCU1lbW9yeUNvbnRleHQgc3RhdGVfY3R4OwkJLyogbG9uZy1saXZl ZDsgb3ducyBzdGFibGUgc3RhdGUgKi8KK30gSGVhcEJ1ZmZlcmVkSW5zZXJ0U3RhdGU7CisKKyNk ZWZpbmUgSEVBUF9CVUZGRVJFRF9JTlNFUlRfTUFYX1RVUExFUwkxMDAwCisjZGVmaW5lIEhFQVBf QlVGRkVSRURfSU5TRVJUX01BWF9CWVRFUwk2NTUzNQorCitzdGF0aWMgdm9pZCBoZWFwX2J1ZmZl cmVkX2luc2VydF9kb19mbHVzaChIZWFwQnVmZmVyZWRJbnNlcnRTdGF0ZSAqaHN0YXRlKTsKK3N0 YXRpYyB2b2lkIGhlYXBfYnVmZmVyZWRfaW5zZXJ0X2ZpbmlzaF9idWxraW5zZXJ0KEhlYXBCdWZm ZXJlZEluc2VydFN0YXRlICpoc3RhdGUpOworCisvKiBoZWFwX211bHRpX2luc2VydCBjb3JlLCB0 YWtlcyBIZWFwVHVwbGVzIGRpcmVjdGx5IChkZWZpbmVkIG5lYXIgaGVhcF9tdWx0aV9pbnNlcnQp ICovCitzdGF0aWMgdm9pZCBoZWFwX211bHRpX2luc2VydF9yYXcoUmVsYXRpb24gcmVsYXRpb24s IEhlYXBUdXBsZSAqaGVhcHR1cGxlcywKKwkJCQkJCQkJICBpbnQgbnR1cGxlcywgQ29tbWFuZElk IGNpZCwgdWludDMyIG9wdGlvbnMsCisJCQkJCQkJCSAgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUp OworCitUYWJsZUJ1ZmZlcmVkSW5zZXJ0U3RhdGUKK2hlYXBfYnVmZmVyZWRfaW5zZXJ0X2JlZ2lu KFJlbGF0aW9uIHJlbCwgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCisJCQkJCQkgICBUYWJs ZUJ1ZmZlcmVkSW5zZXJ0Rmx1c2hDYiBmbHVzaF9jYiwKKwkJCQkJCSAgIHZvaWQgKmZsdXNoX2N0 eCkKK3sKKwlIZWFwQnVmZmVyZWRJbnNlcnRTdGF0ZSAqaHN0YXRlOworCU1lbW9yeUNvbnRleHQg c3RhdGVfY3R4OworCU1lbW9yeUNvbnRleHQgb2xkX2N0eDsKKworCXN0YXRlX2N0eCA9IEFsbG9j U2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgIkhlYXBC dWZmZXJlZEluc2VydCIsCisJCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9s ZF9jdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGVfY3R4KTsKKworCWhzdGF0ZSA9IHBh bGxvYzAoc2l6ZW9mKEhlYXBCdWZmZXJlZEluc2VydFN0YXRlKSk7CisJaHN0YXRlLT5iYXNlLnJl bCA9IHJlbDsKKwloc3RhdGUtPmNpZCA9IGNpZDsKKwloc3RhdGUtPm9wdGlvbnMgPSBvcHRpb25z OworCWhzdGF0ZS0+Zmx1c2hfY2IgPSBmbHVzaF9jYjsKKwloc3RhdGUtPmZsdXNoX2N0eCA9IGZs dXNoX2N0eDsKKwloc3RhdGUtPnN0YXRlX2N0eCA9IHN0YXRlX2N0eDsKKworCWhzdGF0ZS0+bWF4 X3R1cGxlcyA9IEhFQVBfQlVGRkVSRURfSU5TRVJUX01BWF9UVVBMRVM7CisJaHN0YXRlLT50dXBs ZXMgPSBwYWxsb2NfYXJyYXkoSGVhcFR1cGxlLCBoc3RhdGUtPm1heF90dXBsZXMpOworCWhzdGF0 ZS0+bnR1cGxlcyA9IDA7CisJaHN0YXRlLT5idWZmZXJlZF9ieXRlcyA9IDA7CisKKwlpZiAob3B0 aW9ucyAmIFRBQkxFX0lOU0VSVF9CQVNfQlVMS1dSSVRFKQorCQloc3RhdGUtPmJpc3RhdGUgPSBH ZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwllbHNlCisJCWhzdGF0ZS0+YmlzdGF0ZSA9IE5VTEw7CisK Kwloc3RhdGUtPmJhdGNoX2N0eCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShzdGF0ZV9jdHgsCisJ CQkJCQkJCQkJCSAgIkhlYXBCdWZJbnNCYXRjaCIsCisJCQkJCQkJCQkJCSAgQUxMT0NTRVRfREVG QVVMVF9TSVpFUyk7CisKKwloc3RhdGUtPm1pX2N0eCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShz dGF0ZV9jdHgsCisJCQkJCQkJCQkJICAgIkhlYXBCdWZJbnNGbHVzaCIsCisJCQkJCQkJCQkJICAg QUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBzY3JhdGNo IHNsb3Qgb25seSB3aGVuIGEgZmx1c2ggY2FsbGJhY2sgaXMgcHJlc2VudC4KKwkgKiBOby1jYWxs YmFjayBjYWxsZXJzIChDVEFTLCBDTVYsIFJNVikgcGF5IHplcm8gc2xvdCBvdmVyaGVhZC4KKwkg Ki8KKwlpZiAoZmx1c2hfY2IgIT0gTlVMTCkKKwkJaHN0YXRlLT5zY3JhdGNoX3Nsb3QgPSBNYWtl U2luZ2xlVHVwbGVUYWJsZVNsb3QoUmVsYXRpb25HZXREZXNjcihyZWwpLAorCQkJCQkJCQkJCQkJ CQkmVFRTT3BzSGVhcFR1cGxlKTsKKwllbHNlCisJCWhzdGF0ZS0+c2NyYXRjaF9zbG90ID0gTlVM TDsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRfY3R4KTsKKworCXJldHVybiAmaHN0YXRl LT5iYXNlOworfQorCit2b2lkCitoZWFwX2J1ZmZlcmVkX2luc2VydF9wdXQoVGFibGVCdWZmZXJl ZEluc2VydFN0YXRlIHN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlIZWFwQnVmZmVy ZWRJbnNlcnRTdGF0ZSAqaHN0YXRlID0gKEhlYXBCdWZmZXJlZEluc2VydFN0YXRlICopIHN0YXRl OworCU1lbW9yeUNvbnRleHQgb2xkX2N0eDsKKwlIZWFwVHVwbGUJaHR1cDsKKworCS8qIEF1dG8t Zmx1c2ggaWYgdHVwbGUgY291bnQgaXMgYXQgY2FwYWNpdHkuICovCisJaWYgKGhzdGF0ZS0+bnR1 cGxlcyA+PSBoc3RhdGUtPm1heF90dXBsZXMpCisJCWhlYXBfYnVmZmVyZWRfaW5zZXJ0X2RvX2Zs dXNoKGhzdGF0ZSk7CisKKwkvKgorCSAqIFByb2R1Y2UgYSBzZWxmLWNvbnRhaW5lZCBIZWFwVHVw bGUgaW4gYmF0Y2hfY3R4LiAgRXhlY0NvcHlTbG90SGVhcFR1cGxlCisJICogaW52b2tlcyB0aGUg c2xvdC10eXBlJ3MgY29weV9oZWFwX3R1cGxlIG1ldGhvZCwgd2hpY2ggZm9yIGV2ZXJ5CisJICog YnVpbHQtaW4gc2xvdCB0eXBlIGFsbG9jYXRlcyBhIG5ldyBIZWFwVHVwbGUgaW4gQ3VycmVudE1l bW9yeUNvbnRleHQuCisJICogVGhpcyBpcyB0aGUgKm9ubHkqIHBlci1yb3cgbWF0ZXJpYWxpemF0 aW9uIC0tIHRoZSBmbHVzaCBwYXRoIGNvbnN1bWVzCisJICogdGhlIEhlYXBUdXBsZSBkaXJlY3Rs eSB2aWEgaGVhcF9tdWx0aV9pbnNlcnRfcmF3KCkgd2l0aCBubyBmdXJ0aGVyCisJICogc2xvdCBj b252ZXJzaW9uIG9yIGNvcHkuCisJICovCisJb2xkX2N0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhoc3RhdGUtPmJhdGNoX2N0eCk7CisJaHR1cCA9IEV4ZWNDb3B5U2xvdEhlYXBUdXBsZShzbG90 KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkX2N0eCk7CisKKwloc3RhdGUtPnR1cGxlc1to c3RhdGUtPm50dXBsZXMrK10gPSBodHVwOworCWhzdGF0ZS0+YnVmZmVyZWRfYnl0ZXMgKz0gaHR1 cC0+dF9sZW47CisKKwkvKiBCeXRlLXRocmVzaG9sZCBmbHVzaDogZXhhY3QgdHJhY2tpbmcgZnJv bSB0aGUgSGVhcFR1cGxlIHRfbGVuLiAqLworCWlmIChoc3RhdGUtPmJ1ZmZlcmVkX2J5dGVzID4g SEVBUF9CVUZGRVJFRF9JTlNFUlRfTUFYX0JZVEVTKQorCQloZWFwX2J1ZmZlcmVkX2luc2VydF9k b19mbHVzaChoc3RhdGUpOworfQorCit2b2lkCitoZWFwX2J1ZmZlcmVkX2luc2VydF9mbHVzaChU YWJsZUJ1ZmZlcmVkSW5zZXJ0U3RhdGUgc3RhdGUpCit7CisJSGVhcEJ1ZmZlcmVkSW5zZXJ0U3Rh dGUgKmhzdGF0ZSA9IChIZWFwQnVmZmVyZWRJbnNlcnRTdGF0ZSAqKSBzdGF0ZTsKKworCWlmICho c3RhdGUtPm50dXBsZXMgPiAwKQorCQloZWFwX2J1ZmZlcmVkX2luc2VydF9kb19mbHVzaChoc3Rh dGUpOworfQorCit2b2lkCitoZWFwX2J1ZmZlcmVkX2luc2VydF9lbmQoVGFibGVCdWZmZXJlZElu c2VydFN0YXRlIHN0YXRlKQoreworCUhlYXBCdWZmZXJlZEluc2VydFN0YXRlICpoc3RhdGUgPSAo SGVhcEJ1ZmZlcmVkSW5zZXJ0U3RhdGUgKikgc3RhdGU7CisKKwkvKiBGbHVzaCBhbnkgcmVtYWlu aW5nIHR1cGxlcyAqLworCWlmIChoc3RhdGUtPm50dXBsZXMgPiAwKQorCQloZWFwX2J1ZmZlcmVk X2luc2VydF9kb19mbHVzaChoc3RhdGUpOworCisJLyogQ2xlYW4gdXAgdGhlIHNjcmF0Y2ggc2xv dCB1c2VkIGZvciBmbHVzaCBjYWxsYmFjayAqLworCWlmIChoc3RhdGUtPnNjcmF0Y2hfc2xvdCAh PSBOVUxMKQorCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KGhzdGF0ZS0+c2NyYXRjaF9z bG90KTsKKworCS8qIFBlcmZvcm0gZmluaXNoLWJ1bGstaW5zZXJ0IGNsZWFudXAgKHN1YnN1bWVz IHRhYmxlX2ZpbmlzaF9idWxrX2luc2VydCkgKi8KKwloZWFwX2J1ZmZlcmVkX2luc2VydF9maW5p c2hfYnVsa2luc2VydChoc3RhdGUpOworCisJLyoKKwkgKiBSZWxlYXNlIGFsbCBtZW1vcnkgb3du ZWQgYnkgdGhlIHN0YXRlLCBpbmNsdWRpbmcgYmF0Y2hfY3R4IGFuZCBtaV9jdHgKKwkgKiAoYm90 aCBhcmUgY2hpbGRyZW4gb2Ygc3RhdGVfY3R4KS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0RGVsZXRl KGhzdGF0ZS0+c3RhdGVfY3R4KTsKK30KKworLyoKKyAqIEludGVybmFsOiBmbHVzaCBhbGwgYnVm ZmVyZWQgSGVhcFR1cGxlcyB2aWEgaGVhcF9tdWx0aV9pbnNlcnRfcmF3LCB0aGVuCisgKiBpbnZv a2UgdGhlIGZsdXNoIGNhbGxiYWNrIChpZiBhbnkpIG9uY2UgcGVyIHdyaXR0ZW4gdHVwbGUuICBS ZXNldHMgYm90aAorICogcGVyLWJhdGNoIGFuZCBwZXItZmx1c2ggY29udGV4dHMgc28gbm8gcGF5 bG9hZCBzdXJ2aXZlcyBhY3Jvc3MgY3ljbGVzLgorICoKKyAqIENhbGxiYWNrLXBhdGggaXNvbGF0 aW9uOiB0aGUgc2NyYXRjaF9zbG90IGFuZCB0dXBsZS10by1zbG90IGNvbnZlcnNpb24KKyAqIG9u bHkgZXhlY3V0ZSB3aGVuIGZsdXNoX2NiIGlzIG5vbi1OVUxMLCBzbyBuby1jYWxsYmFjayBjYWxs ZXJzIChDVEFTLAorICogQ01WLCBSTVYpIHBheSB6ZXJvIGNhbGxiYWNrIG92ZXJoZWFkIHBlciB0 dXBsZS4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBfYnVmZmVyZWRfaW5zZXJ0X2RvX2ZsdXNoKEhl YXBCdWZmZXJlZEluc2VydFN0YXRlICpoc3RhdGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRfY3R4 OworCWludAkJCW50dXBsZXMgPSBoc3RhdGUtPm50dXBsZXM7CisKKwlBc3NlcnQobnR1cGxlcyA+ IDApOworCisJLyoKKwkgKiBTd2l0Y2ggdG8gdGhlIHBlci1mbHVzaCBtZW1vcnkgY29udGV4dC4g IGhlYXBfbXVsdGlfaW5zZXJ0X3JhdydzCisJICogdHJhbnNpZW50IGFsbG9jYXRpb25zIChpbmNs dWRpbmcgYW55IHRvYXN0ZWQtdHVwbGUgY29waWVzIGZyb20KKwkgKiBoZWFwX3ByZXBhcmVfaW5z ZXJ0KSBsYW5kIGhlcmUgYW5kIGFyZSBidWxrLWZyZWVkIGFmdGVyIHRoZSBjYWxsYmFjay4KKwkg Ki8KKwlvbGRfY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhzdGF0ZS0+bWlfY3R4KTsKKwor CWhlYXBfbXVsdGlfaW5zZXJ0X3Jhdyhoc3RhdGUtPmJhc2UucmVsLAorCQkJCQkJICBoc3RhdGUt PnR1cGxlcywKKwkJCQkJCSAgbnR1cGxlcywKKwkJCQkJCSAgaHN0YXRlLT5jaWQsCisJCQkJCQkg IGhzdGF0ZS0+b3B0aW9ucywKKwkJCQkJCSAgaHN0YXRlLT5iaXN0YXRlKTsKKworCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRfY3R4KTsKKworCS8qCisJICogSW52b2tlIHRoZSBmbHVzaCBjYWxs YmFjayBvbmNlIHBlciBmbHVzaGVkIHR1cGxlLCBpbiBpbnNlcnRpb24gb3JkZXIuCisJICogQWZ0 ZXIgaGVhcF9tdWx0aV9pbnNlcnRfcmF3LCBlYWNoIHR1cGxlc1tpXS0+dF9zZWxmIGhvbGRzIHRo ZSBzdG9yZWQKKwkgKiBUSUQsIGFuZCB0dXBsZXNbaV0gcG9pbnRzIHRvIHRoZSBwb3N0LXByZXBh cmUgKHBvc3NpYmx5IHRvYXN0ZWQpIHR1cGxlCisJICogaW4gbWlfY3R4IChpZiB0b2FzdGVkKSBv ciB0aGUgb3JpZ2luYWwgaW4gYmF0Y2hfY3R4IChpZiBub3QpLiAgQm90aAorCSAqIGNvbnRleHRz IGFyZSBzdGlsbCBhbGl2ZSBoZXJlLgorCSAqLworCWlmIChoc3RhdGUtPmZsdXNoX2NiICE9IE5V TEwpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IG50dXBsZXM7IGkrKykKKwkJeworCQkJRXhl Y1N0b3JlSGVhcFR1cGxlKGhzdGF0ZS0+dHVwbGVzW2ldLCBoc3RhdGUtPnNjcmF0Y2hfc2xvdCwg ZmFsc2UpOworCQkJaHN0YXRlLT5zY3JhdGNoX3Nsb3QtPnR0c190aWQgPSBoc3RhdGUtPnR1cGxl c1tpXS0+dF9zZWxmOworCQkJaHN0YXRlLT5zY3JhdGNoX3Nsb3QtPnR0c190YWJsZU9pZCA9IGhz dGF0ZS0+dHVwbGVzW2ldLT50X3RhYmxlT2lkOworCQkJaHN0YXRlLT5mbHVzaF9jYihoc3RhdGUt PmZsdXNoX2N0eCwgaHN0YXRlLT5zY3JhdGNoX3Nsb3QpOworCQkJRXhlY0NsZWFyVHVwbGUoaHN0 YXRlLT5zY3JhdGNoX3Nsb3QpOworCQl9CisJfQorCisJLyogUmVzZXQgYm90aCBjb250ZXh0cyBu b3cgdGhhdCB0aGUgY2FsbGJhY2sgaXMgZG9uZS4gKi8KKwlNZW1vcnlDb250ZXh0UmVzZXQoaHN0 YXRlLT5taV9jdHgpOworCU1lbW9yeUNvbnRleHRSZXNldChoc3RhdGUtPmJhdGNoX2N0eCk7CisK Kwloc3RhdGUtPm50dXBsZXMgPSAwOworCWhzdGF0ZS0+YnVmZmVyZWRfYnl0ZXMgPSAwOworfQor CisvKgorICogUGVyZm9ybSBoZWFwLXNwZWNpZmljIGZpbmlzaC1idWxrLWluc2VydCBjbGVhbnVw LgorICoKKyAqIFRoaXMgaXMgdGhlIGJ1ZmZlcmVkLWluc2VydCBlcXVpdmFsZW50IG9mIHdoYXQg Y2FsbGVycyBvZiB0aGUgbm9uLWJ1ZmZlcmVkCisgKiBwYXRoIGFjaGlldmUgYnkgY2FsbGluZyBG cmVlQnVsa0luc2VydFN0YXRlKCkgKyB0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQoKQorICogYXQg dGVhcmRvd24uICBlbmQoKSBtdXN0IHN1YnN1bWUgYm90aC4KKyAqCisgKiBGb3IgdGhlIGN1cnJl bnQgaW4tdHJlZSBoZWFwIEFNLCB0aGUgY2xlYW51cCBjb25zaXN0cyBvZjoKKyAqCisgKiAxLiBS ZWxlYXNlIHRoZSBCdWxrSW5zZXJ0U3RhdGUgKGJ1ZmZlciBwaW4gKyBidWxrLXdyaXRlIGFjY2Vz cyBzdHJhdGVneSkuCisgKgorICogMi4gQW55IGFjdGlvbiB0aGF0IGhlYXAncyBmaW5pc2hfYnVs a19pbnNlcnQgQU0gY2FsbGJhY2sgd291bGQgcGVyZm9ybS4KKyAqICAgIEhlYXAgZG9lcyBub3Qg Y3VycmVudGx5IHJlZ2lzdGVyIHRoYXQgY2FsbGJhY2sgKHRoZSBzbG90IGluCisgKiAgICBoZWFw YW1fbWV0aG9kcyBpcyBOVUxMKSwgc28gbm8gYWRkaXRpb25hbCBhY3Rpb24gaXMgcmVxdWlyZWQu CisgKi8KK3N0YXRpYyB2b2lkCitoZWFwX2J1ZmZlcmVkX2luc2VydF9maW5pc2hfYnVsa2luc2Vy dChIZWFwQnVmZmVyZWRJbnNlcnRTdGF0ZSAqaHN0YXRlKQoreworCWlmIChoc3RhdGUtPmJpc3Rh dGUgIT0gTlVMTCkKKwkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShoc3RhdGUtPmJpc3RhdGUpOworCisJ LyogSGVhcCBkb2VzIG5vdCBjdXJyZW50bHkgcmVnaXN0ZXIgYSBmaW5pc2hfYnVsa19pbnNlcnQg QU0gY2FsbGJhY2suICovCit9CisKKwogLyoKICAqCWhlYXBfaW5zZXJ0CQktIGluc2VydCB0dXBs ZSBpbnRvIGEgaGVhcAogICoKQEAgLTIyNjgsMjIgKzI1MjYsMjQgQEAgaGVhcF9tdWx0aV9pbnNl cnRfcGFnZXMoSGVhcFR1cGxlICpoZWFwdHVwbGVzLCBpbnQgZG9uZSwgaW50IG50dXBsZXMsIFNp emUgc2F2ZUYKIH0KIAogLyoKLSAqCWhlYXBfbXVsdGlfaW5zZXJ0CS0gaW5zZXJ0IG11bHRpcGxl IHR1cGxlcyBpbnRvIGEgaGVhcAorICoJaGVhcF9tdWx0aV9pbnNlcnRfcmF3CS0gY29yZSBtdWx0 aS1pbnNlcnQgZm9yIGEgSGVhcFR1cGxlIGFycmF5CiAgKgotICogVGhpcyBpcyBsaWtlIGhlYXBf aW5zZXJ0KCksIGJ1dCBpbnNlcnRzIG11bHRpcGxlIHR1cGxlcyBpbiBvbmUgb3BlcmF0aW9uLgot ICogVGhhdCdzIGZhc3RlciB0aGFuIGNhbGxpbmcgaGVhcF9pbnNlcnQoKSBpbiBhIGxvb3AsIGJl Y2F1c2Ugd2hlbiBtdWx0aXBsZQotICogdHVwbGVzIGNhbiBiZSBpbnNlcnRlZCBvbiBhIHNpbmds ZSBwYWdlLCB3ZSBjYW4gd3JpdGUganVzdCBhIHNpbmdsZSBXQUwKLSAqIHJlY29yZCBjb3Zlcmlu ZyBhbGwgb2YgdGhlbSwgYW5kIG9ubHkgbmVlZCB0byBsb2NrL3VubG9jayB0aGUgcGFnZSBvbmNl LgorICogVGFrZXMgYW4gYXJyYXkgb2YgcHJlLWZvcm1lZCBIZWFwVHVwbGVzLCBydW5zIGhlYXBf cHJlcGFyZV9pbnNlcnQgb24gZWFjaAorICogKHRvYXN0ICsgaGVhZGVyIHNldHVwKSwgYW5kIGlu c2VydHMgdGhlbSBpbnRvIGhlYXAgcGFnZXMuICBUaGUgaGVhcHR1cGxlcworICogYXJyYXkgaXMg dXBkYXRlZCBpbi1wbGFjZTogYWZ0ZXIgcmV0dXJuLCBlYWNoIGVudHJ5IHBvaW50cyB0byB0aGUg cHJlcGFyZWQKKyAqIChwb3NzaWJseSB0b2FzdGVkKSB0dXBsZSB3aXRoIHRfc2VsZiBzZXQgdG8g dGhlIHN0b3JlZCBUSUQuCisgKgorICogVGhpcyBpcyB0aGUgc2hhcmVkIGNvcmUgZm9yIGhlYXBf bXVsdGlfaW5zZXJ0IChzbG90LWJhc2VkIGNhbGxlcnMpIGFuZAorICogaGVhcF9idWZmZXJlZF9p bnNlcnRfZG9fZmx1c2ggKEhlYXBUdXBsZS1iYXNlZCBjYWxsZXJzKS4KICAqCiAgKiBOb3RlOiB0 aGlzIGxlYWtzIG1lbW9yeSBpbnRvIHRoZSBjdXJyZW50IG1lbW9yeSBjb250ZXh0LiBZb3UgY2Fu IGNyZWF0ZSBhCiAgKiB0ZW1wb3JhcnkgY29udGV4dCBiZWZvcmUgY2FsbGluZyB0aGlzLCBpZiB0 aGF0J3MgYSBwcm9ibGVtLgogICovCi12b2lkCi1oZWFwX211bHRpX2luc2VydChSZWxhdGlvbiBy ZWxhdGlvbiwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG50dXBsZXMsCi0JCQkJICBDb21t YW5kSWQgY2lkLCB1aW50MzIgb3B0aW9ucywgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpCitzdGF0 aWMgdm9pZAoraGVhcF9tdWx0aV9pbnNlcnRfcmF3KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVw bGUgKmhlYXB0dXBsZXMsIGludCBudHVwbGVzLAorCQkJCQkgIENvbW1hbmRJZCBjaWQsIHVpbnQz MiBvcHRpb25zLCBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSkKIHsKIAlUcmFuc2FjdGlvbklkIHhp ZCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7Ci0JSGVhcFR1cGxlICAqaGVhcHR1cGxlczsK IAlpbnQJCQlpOwogCWludAkJCW5kb25lOwogCVBHQWxpZ25lZEJsb2NrIHNjcmF0Y2g7CkBAIC0y MzA2LDE2ICsyNTY2LDExIEBAIGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBU dXBsZVRhYmxlU2xvdCAqKnNsb3RzLCBpbnQgbnR1cGxlcywKIAlzYXZlRnJlZVNwYWNlID0gUmVs YXRpb25HZXRUYXJnZXRQYWdlRnJlZVNwYWNlKHJlbGF0aW9uLAogCQkJCQkJCQkJCQkJICAgSEVB UF9ERUZBVUxUX0ZJTExGQUNUT1IpOwogCi0JLyogVG9hc3QgYW5kIHNldCBoZWFkZXIgZGF0YSBp biBhbGwgdGhlIHNsb3RzICovCi0JaGVhcHR1cGxlcyA9IHBhbGxvYyhudHVwbGVzICogc2l6ZW9m KEhlYXBUdXBsZSkpOworCS8qIFRvYXN0IGFuZCBzZXQgaGVhZGVyIGRhdGEgaW4gYWxsIHRoZSB0 dXBsZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnR1cGxlczsgaSsrKQogCXsKLQkJSGVhcFR1cGxl CXR1cGxlOwotCi0JCXR1cGxlID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzbG90c1tpXSwgdHJ1 ZSwgTlVMTCk7Ci0JCXNsb3RzW2ldLT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJl bGF0aW9uKTsKLQkJdHVwbGUtPnRfdGFibGVPaWQgPSBzbG90c1tpXS0+dHRzX3RhYmxlT2lkOwot CQloZWFwdHVwbGVzW2ldID0gaGVhcF9wcmVwYXJlX2luc2VydChyZWxhdGlvbiwgdHVwbGUsIHhp ZCwgY2lkLAorCQloZWFwdHVwbGVzW2ldLT50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChy ZWxhdGlvbik7CisJCWhlYXB0dXBsZXNbaV0gPSBoZWFwX3ByZXBhcmVfaW5zZXJ0KHJlbGF0aW9u LCBoZWFwdHVwbGVzW2ldLCB4aWQsIGNpZCwKIAkJCQkJCQkJCQkJb3B0aW9ucyk7CiAJfQogCkBA IC0yNjM5LDExICsyODk0LDQxIEBAIGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9u LCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLCBpbnQgbnR1cGxlcywKIAkJCUNhY2hlSW52YWxpZGF0 ZUhlYXBUdXBsZShyZWxhdGlvbiwgaGVhcHR1cGxlc1tpXSwgTlVMTCk7CiAJfQogCisJcGdzdGF0 X2NvdW50X2hlYXBfaW5zZXJ0KHJlbGF0aW9uLCBudHVwbGVzKTsKK30KKworLyoKKyAqCWhlYXBf bXVsdGlfaW5zZXJ0CS0gaW5zZXJ0IG11bHRpcGxlIHR1cGxlcyBpbnRvIGEgaGVhcAorICoKKyAq IFRoaXMgaXMgbGlrZSBoZWFwX2luc2VydCgpLCBidXQgaW5zZXJ0cyBtdWx0aXBsZSB0dXBsZXMg aW4gb25lIG9wZXJhdGlvbi4KKyAqIFRoYXQncyBmYXN0ZXIgdGhhbiBjYWxsaW5nIGhlYXBfaW5z ZXJ0KCkgaW4gYSBsb29wLCBiZWNhdXNlIHdoZW4gbXVsdGlwbGUKKyAqIHR1cGxlcyBjYW4gYmUg aW5zZXJ0ZWQgb24gYSBzaW5nbGUgcGFnZSwgd2UgY2FuIHdyaXRlIGp1c3QgYSBzaW5nbGUgV0FM CisgKiByZWNvcmQgY292ZXJpbmcgYWxsIG9mIHRoZW0sIGFuZCBvbmx5IG5lZWQgdG8gbG9jay91 bmxvY2sgdGhlIHBhZ2Ugb25jZS4KKyAqCisgKiBOb3RlOiB0aGlzIGxlYWtzIG1lbW9yeSBpbnRv IHRoZSBjdXJyZW50IG1lbW9yeSBjb250ZXh0LiBZb3UgY2FuIGNyZWF0ZSBhCisgKiB0ZW1wb3Jh cnkgY29udGV4dCBiZWZvcmUgY2FsbGluZyB0aGlzLCBpZiB0aGF0J3MgYSBwcm9ibGVtLgorICov Cit2b2lkCitoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgVHVwbGVUYWJsZVNs b3QgKipzbG90cywgaW50IG50dXBsZXMsCisJCQkJICBDb21tYW5kSWQgY2lkLCB1aW50MzIgb3B0 aW9ucywgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpCit7CisJSGVhcFR1cGxlICAqaGVhcHR1cGxl czsKKwlpbnQJCQlpOworCisJaGVhcHR1cGxlcyA9IHBhbGxvYyhudHVwbGVzICogc2l6ZW9mKEhl YXBUdXBsZSkpOworCWZvciAoaSA9IDA7IGkgPCBudHVwbGVzOyBpKyspCisJeworCQloZWFwdHVw bGVzW2ldID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzbG90c1tpXSwgdHJ1ZSwgTlVMTCk7CisJ CXNsb3RzW2ldLT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwl9 CisKKwloZWFwX211bHRpX2luc2VydF9yYXcocmVsYXRpb24sIGhlYXB0dXBsZXMsIG50dXBsZXMs IGNpZCwgb3B0aW9ucywgYmlzdGF0ZSk7CisKIAkvKiBjb3B5IHRfc2VsZiBmaWVsZHMgYmFjayB0 byB0aGUgY2FsbGVyJ3Mgc2xvdHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnR1cGxlczsgaSsrKQog CQlzbG90c1tpXS0+dHRzX3RpZCA9IGhlYXB0dXBsZXNbaV0tPnRfc2VsZjsKIAotCXBnc3RhdF9j b3VudF9oZWFwX2luc2VydChyZWxhdGlvbiwgbnR1cGxlcyk7CisJcGZyZWUoaGVhcHR1cGxlcyk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAy MGQzYjQ2ZTA2Mi4uNjUyMjZiMDdhNWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYwpAQCAtMjY5Nyw3ICsyNjk3LDEyIEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91 dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAogCS5zY2FuX2JpdG1hcF9uZXh0X3R1cGxlID0gaGVh cGFtX3NjYW5fYml0bWFwX25leHRfdHVwbGUsCiAJLnNjYW5fc2FtcGxlX25leHRfYmxvY2sgPSBo ZWFwYW1fc2Nhbl9zYW1wbGVfbmV4dF9ibG9jaywKLQkuc2Nhbl9zYW1wbGVfbmV4dF90dXBsZSA9 IGhlYXBhbV9zY2FuX3NhbXBsZV9uZXh0X3R1cGxlCisJLnNjYW5fc2FtcGxlX25leHRfdHVwbGUg PSBoZWFwYW1fc2Nhbl9zYW1wbGVfbmV4dF90dXBsZSwKKworCS5idWZmZXJlZF9pbnNlcnRfYmVn aW4gPSBoZWFwX2J1ZmZlcmVkX2luc2VydF9iZWdpbiwKKwkuYnVmZmVyZWRfaW5zZXJ0X3B1dCA9 IGhlYXBfYnVmZmVyZWRfaW5zZXJ0X3B1dCwKKwkuYnVmZmVyZWRfaW5zZXJ0X2ZsdXNoID0gaGVh cF9idWZmZXJlZF9pbnNlcnRfZmx1c2gsCisJLmJ1ZmZlcmVkX2luc2VydF9lbmQgPSBoZWFwX2J1 ZmZlcmVkX2luc2VydF9lbmQsCiB9OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90YWJsZS90YWJsZWFtYXBpLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFw aS5jCmluZGV4IDU0NTBhMjdmYWViLi5hMGZmMTIzZmE4MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdGFibGVhbWFwaS5jCkBAIC05Myw2ICs5MywxOCBAQCBHZXRUYWJsZUFtUm91dGluZShPaWQg YW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT5zY2FuX3NhbXBsZV9uZXh0X2Jsb2NrICE9IE5V TEwpOwogCUFzc2VydChyb3V0aW5lLT5zY2FuX3NhbXBsZV9uZXh0X3R1cGxlICE9IE5VTEwpOwog CisJLyoKKwkgKiBCdWZmZXJlZC1pbnNlcnQgY2FsbGJhY2tzOiBlaXRoZXIgYWxsIGZvdXIgYXJl IE5VTEwgKEFNIGRvZXMgbm90CisJICogc3VwcG9ydCBidWZmZXJlZCBpbnNlcnRzKSwgb3IgYWxs IGZvdXIgYXJlIG5vbi1OVUxMLiAgTm8gcGFydGlhbGx5CisJICogcG9wdWxhdGVkIGdyb3VwcyBh cmUgYWxsb3dlZC4KKwkgKi8KKwlBc3NlcnQoKHJvdXRpbmUtPmJ1ZmZlcmVkX2luc2VydF9iZWdp biA9PSBOVUxMKSA9PQorCQkgICAocm91dGluZS0+YnVmZmVyZWRfaW5zZXJ0X3B1dCA9PSBOVUxM KSk7CisJQXNzZXJ0KChyb3V0aW5lLT5idWZmZXJlZF9pbnNlcnRfYmVnaW4gPT0gTlVMTCkgPT0K KwkJICAgKHJvdXRpbmUtPmJ1ZmZlcmVkX2luc2VydF9mbHVzaCA9PSBOVUxMKSk7CisJQXNzZXJ0 KChyb3V0aW5lLT5idWZmZXJlZF9pbnNlcnRfYmVnaW4gPT0gTlVMTCkgPT0KKwkJICAgKHJvdXRp bmUtPmJ1ZmZlcmVkX2luc2VydF9lbmQgPT0gTlVMTCkpOworCiAJcmV0dXJuIHJvdXRpbmU7CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaAppbmRleCA1MTc2NDc4YzI5NS4uZDhiMzRlMzc2MjcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv aGVhcGFtLmgKQEAgLTM3OSw2ICszNzksMTggQEAgZXh0ZXJuIHZvaWQgaGVhcF9pbnNlcnQoUmVs YXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXAsIENvbW1hbmRJZCBjaWQsCiBleHRlcm4gdm9p ZCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgVHVwbGVUYWJsZVNsb3QgKipz bG90cywKIAkJCQkJCQkgIGludCBudHVwbGVzLCBDb21tYW5kSWQgY2lkLCB1aW50MzIgb3B0aW9u cywKIAkJCQkJCQkgIEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKTsKKworLyogaGVhcCBidWZmZXJl ZC1pbnNlcnQgbGlmZWN5Y2xlICovCitleHRlcm4gVGFibGVCdWZmZXJlZEluc2VydFN0YXRlIGhl YXBfYnVmZmVyZWRfaW5zZXJ0X2JlZ2luKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCQkJICAg Q29tbWFuZElkIGNpZCwKKwkJCQkJCQkJCQkJCQkJICAgaW50IG9wdGlvbnMsCisJCQkJCQkJCQkJ CQkJCSAgIFRhYmxlQnVmZmVyZWRJbnNlcnRGbHVzaENiIGZsdXNoX2NiLAorCQkJCQkJCQkJCQkJ CQkgICB2b2lkICpmbHVzaF9jdHgpOworZXh0ZXJuIHZvaWQgaGVhcF9idWZmZXJlZF9pbnNlcnRf cHV0KFRhYmxlQnVmZmVyZWRJbnNlcnRTdGF0ZSBzdGF0ZSwKKwkJCQkJCQkJCSBUdXBsZVRhYmxl U2xvdCAqc2xvdCk7CitleHRlcm4gdm9pZCBoZWFwX2J1ZmZlcmVkX2luc2VydF9mbHVzaChUYWJs ZUJ1ZmZlcmVkSW5zZXJ0U3RhdGUgc3RhdGUpOworZXh0ZXJuIHZvaWQgaGVhcF9idWZmZXJlZF9p bnNlcnRfZW5kKFRhYmxlQnVmZmVyZWRJbnNlcnRTdGF0ZSBzdGF0ZSk7CisKIGV4dGVybiBUTV9S ZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0 YSAqdGlkLAogCQkJCQkJCSBDb21tYW5kSWQgY2lkLCB1aW50MzIgb3B0aW9ucywgU25hcHNob3Qg Y3Jvc3NjaGVjaywKIAkJCQkJCQkgYm9vbCB3YWl0LCBUTV9GYWlsdXJlRGF0YSAqdG1mZCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3RhYmxlYW0uaAppbmRleCBmMmMzNjY5NmJjYS4uZDVhMTg3NWQ5M2MgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Rh YmxlYW0uaApAQCAtMjg0LDYgKzI4NCw3IEBAIHR5cGVkZWYgc3RydWN0IFRNX0luZGV4RGVsZXRl T3AKICNkZWZpbmUgVEFCTEVfSU5TRVJUX1NLSVBfRlNNCQkweDAwMDIKICNkZWZpbmUgVEFCTEVf SU5TRVJUX0ZST1pFTgkJCTB4MDAwNAogI2RlZmluZSBUQUJMRV9JTlNFUlRfTk9fTE9HSUNBTAkJ MHgwMDA4CisjZGVmaW5lIFRBQkxFX0lOU0VSVF9CQVNfQlVMS1dSSVRFCTB4MDAyMAogCiAvKiAi b3B0aW9ucyIgZmxhZyBiaXRzIGZvciB0YWJsZV90dXBsZV9kZWxldGUgKi8KICNkZWZpbmUgVEFC TEVfREVMRVRFX0NIQU5HSU5HX1BBUlRJVElPTgkJCSgxIDw8IDApCkBAIC0zMDcsNiArMzA4LDQw IEBAIHR5cGVkZWYgdm9pZCAoKkluZGV4QnVpbGRDYWxsYmFjaykgKFJlbGF0aW9uIGluZGV4LAog CQkJCQkJCQkJYm9vbCB0dXBsZUlzQWxpdmUsCiAJCQkJCQkJCQl2b2lkICpzdGF0ZSk7CiAKKy8q CisgKiBTdGF0ZSBmb3IgYSBidWZmZXJlZC1pbnNlcnQgc2Vzc2lvbi4gIEFNcyBlbWJlZCB0aGlz IGFzIHRoZSBmaXJzdCBmaWVsZCBvZgorICogdGhlaXIgcHJpdmF0ZSBzdGF0ZSBzdHJ1Y3QuICBU aGUgYmFzZSBzdHJ1Y3QgaXMgbWluaW1hbDogb25seSB0aGUgdGFyZ2V0CisgKiByZWxhdGlvbiBp cyBleHBvc2VkLCB3aGljaCBpcyBuZWVkZWQgZm9yIEFNIGRpc3BhdGNoIHZpYSB0aGUgaW5saW5l IHdyYXBwZXIKKyAqIGZ1bmN0aW9ucy4KKyAqCisgKiBBTXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBi dWZmZXJlZCBpbnNlcnRzIGxlYXZlIHRoZSBidWZmZXJlZF9pbnNlcnRfYmVnaW4KKyAqIGNhbGxi YWNrIE5VTEw7IGNhbGxlcnMgZGV0ZWN0IHRoaXMgdmlhIHRhYmxlX2J1ZmZlcmVkX2luc2VydF9i ZWdpbigpCisgKiByZXR1cm5pbmcgTlVMTC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgVGFibGVCdWZm ZXJlZEluc2VydFN0YXRlRGF0YQoreworCVJlbGF0aW9uCXJlbDsJCQkvKiB0YXJnZXQgcmVsYXRp b24gLS0gbmVlZGVkIGZvciBBTSBkaXNwYXRjaCAqLworfSBUYWJsZUJ1ZmZlcmVkSW5zZXJ0U3Rh dGVEYXRhOworCit0eXBlZGVmIFRhYmxlQnVmZmVyZWRJbnNlcnRTdGF0ZURhdGEgKlRhYmxlQnVm ZmVyZWRJbnNlcnRTdGF0ZTsKKworLyoKKyAqIENhbGxiYWNrIGludm9rZWQgb25jZSBwZXIgZmx1 c2hlZCB0dXBsZSwgaW4gaW5zZXJ0aW9uIG9yZGVyLCBhZnRlciB0aGUgQU0KKyAqIHdyaXRlcyBh IGJhdGNoIG9mIGJ1ZmZlcmVkIHR1cGxlcyB0byBzdG9yYWdlLgorICoKKyAqIFRoZSBzbG90IGlz IGFuIEFNLW93bmVkIHNjcmF0Y2ggb2JqZWN0IHVzZWQgc29sZWx5IGFzIGEgaGFuZG9mZiB2ZWhp Y2xlLgorICogSXQgY29udGFpbnMgdGhlIHN0b3JlZCB0dXBsZSB3aXRoIFRJRCAob3IgQU0tZXF1 aXZhbGVudCBsb2NhdG9yKSBzZXQuCisgKiBJdCBpcyB2YWxpZCBvbmx5IGZvciB0aGUgZHVyYXRp b24gb2YgdGhpcyBjYWxsYmFjayBpbnZvY2F0aW9uOyB0aGUgQU0gbWF5CisgKiByZXVzZSB0aGUg c2FtZSBzY3JhdGNoIHNsb3QgYWNyb3NzIHN1Y2Nlc3NpdmUgaW52b2NhdGlvbnMgd2l0aGluIGEg c2luZ2xlCisgKiBmbHVzaC4gIElmIHRoZSBjYWxsZXIgbmVlZHMgZGF0YSBiZXlvbmQgdGhlIGNh bGxiYWNrLCBpdCBtdXN0IGNvcHkgd2l0aGluCisgKiB0aGUgY2FsbGJhY2sgYm9keS4KKyAqCisg KiBUaGUgQU0gbXVzdCBub3QgYXNzdW1lIHRoZSBjYWxsYmFjayBpcyBjaGVhcCwgc2lkZS1lZmZl Y3QtZnJlZSwgb3IKKyAqIG5vbi10aHJvd2luZy4KKyAqLwordHlwZWRlZiB2b2lkICgqVGFibGVC dWZmZXJlZEluc2VydEZsdXNoQ2IpKHZvaWQgKmNvbnRleHQsCisJCQkJCQkJCQkJICAgVHVwbGVU YWJsZVNsb3QgKnNsb3QpOworCiAvKgogICogQVBJIHN0cnVjdCBmb3IgYSB0YWJsZSBBTS4gIE5v dGUgdGhpcyBtdXN0IGJlIGFsbG9jYXRlZCBpbiBhCiAgKiBzZXJ2ZXItbGlmZXRpbWUgbWFubmVy LCB0eXBpY2FsbHkgYXMgYSBzdGF0aWMgY29uc3Qgc3RydWN0LCB3aGljaCB0aGVuIGdldHMKQEAg LTYxNCw2ICs2NDksNjQgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAl2b2lkCQko KmZpbmlzaF9idWxrX2luc2VydCkgKFJlbGF0aW9uIHJlbCwgdWludDMyIG9wdGlvbnMpOwogCiAK KwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBCdWZmZXJlZC1pbnNlcnQgbGlmZWN5Y2xlIGNhbGxi YWNrcy4KKwkgKgorCSAqIE9wdGlvbmFsIG9wdGltaXphdGlvbiBmb3IgYmF0Y2ggaW5zZXJ0cy4g IEFsbCBmb3VyIGNhbGxiYWNrcyBtdXN0IGJlCisJICogZWl0aGVyIE5VTEwgdG9nZXRoZXIgKEFN IGRvZXMgbm90IHN1cHBvcnQgYnVmZmVyZWQgaW5zZXJ0cykgb3Igbm9uLU5VTEwKKwkgKiB0b2dl dGhlciAodmFsaWRhdGVkIGF0IEFNIHJlZ2lzdHJhdGlvbiB0aW1lKS4gIE5vIHBhcnRpYWxseSBw b3B1bGF0ZWQKKwkgKiBncm91cHMgYXJlIGFsbG93ZWQuCisJICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJ ICovCisKKwkvKgorCSAqIEJlZ2luIGEgYnVmZmVyZWQtaW5zZXJ0IHNlc3Npb24uICBSZXR1cm5z IGFuIG9wYXF1ZSBzdGF0ZSBoYW5kbGUgd2hvc2UKKwkgKiBmaXJzdCBieXRlcyBhcmUgYSBUYWJs ZUJ1ZmZlcmVkSW5zZXJ0U3RhdGVEYXRhIHdpdGggcmVsIHNldC4gIFRoZSBBTQorCSAqIHN0b3Jl cyBjaWQsIG9wdGlvbnMsIGZsdXNoX2NiLCBhbmQgZmx1c2hfY3R4IGluIGl0cyBwcml2YXRlIGV4 dGVuc2lvbgorCSAqIG9mIHRoZSBzdGF0ZSBzdHJ1Y3QuCisJICoKKwkgKiBmbHVzaF9jYiBtYXkg YmUgTlVMTCwgaW4gd2hpY2ggY2FzZSB0aGUgQU0gc2tpcHMgcGVyLXR1cGxlIG5vdGlmaWNhdGlv bgorCSAqIGFmdGVyIGZsdXNoaW5nLgorCSAqCisJICogT3B0aW9uYWwgY2FsbGJhY2sgLS0gTlVM TCBtZWFucyB0aGUgQU0gZG9lcyBub3Qgc3VwcG9ydCBidWZmZXJlZCBpbnNlcnRzLgorCSAqLwor CVRhYmxlQnVmZmVyZWRJbnNlcnRTdGF0ZSAoKmJ1ZmZlcmVkX2luc2VydF9iZWdpbikoCisJCVJl bGF0aW9uIHJlbCwKKwkJQ29tbWFuZElkIGNpZCwKKwkJaW50IG9wdGlvbnMsCisJCVRhYmxlQnVm ZmVyZWRJbnNlcnRGbHVzaENiIGZsdXNoX2NiLAorCQl2b2lkICpmbHVzaF9jdHgpOworCisJLyoK KwkgKiBTdWJtaXQgb25lIHR1cGxlIGZvciBidWZmZXJlZCBpbnNlcnRpb24uICBUaGUgQU0gcmVh ZHMgdGhlIHR1cGxlIGRhdGEKKwkgKiBmcm9tIHRoZSBzbG90IGFuZCBjYXB0dXJlcyBpdCBpbnRl cm5hbGx5IGJlZm9yZSByZXR1cm5pbmcuICBUaGUgY2FsbGVyCisJICogcmV0YWlucyBvd25lcnNo aXAgb2YgdGhlIHNsb3QgYW5kIG1heSByZXVzZSBpdCBpbW1lZGlhdGVseS4KKwkgKgorCSAqIFRo ZSBBTSBtYXkgYXV0by1mbHVzaCBkdXJpbmcgdGhpcyBjYWxsIGlmIGl0cyBpbnRlcm5hbCBidWZm ZXIgaXMgZnVsbDsKKwkgKiB0aGUgY2FsbGVyIG11c3QgYmUgcHJlcGFyZWQgZm9yIHRoZSBmbHVz aCBjYWxsYmFjayB0byBmaXJlIGR1cmluZyBwdXQoKS4KKwkgKi8KKwl2b2lkCQkoKmJ1ZmZlcmVk X2luc2VydF9wdXQpKAorCQlUYWJsZUJ1ZmZlcmVkSW5zZXJ0U3RhdGUgc3RhdGUsCisJCVR1cGxl VGFibGVTbG90ICpzbG90KTsKKworCS8qCisJICogRm9yY2UtZmx1c2ggYWxsIGJ1ZmZlcmVkIHR1 cGxlcyB0byBzdG9yYWdlLiAgSW52b2tlcyB0aGUgZmx1c2ggY2FsbGJhY2sKKwkgKiAoaWYgbm9u LU5VTEwpIG9uY2UgcGVyIGZsdXNoZWQgdHVwbGUsIGluIGluc2VydGlvbiBvcmRlciwgdXNpbmcg YW4KKwkgKiBBTS1vd25lZCBzY3JhdGNoIHNsb3QuICBBZnRlciByZXR1cm4sIHRoZSBpbnRlcm5h bCBidWZmZXIgaXMgZW1wdHkuCisJICovCisJdm9pZAkJKCpidWZmZXJlZF9pbnNlcnRfZmx1c2gp KAorCQlUYWJsZUJ1ZmZlcmVkSW5zZXJ0U3RhdGUgc3RhdGUpOworCisJLyoKKwkgKiBGbHVzaCBy ZW1haW5pbmcgYnVmZmVyZWQgdHVwbGVzLCBwZXJmb3JtIGZpbmlzaC1idWxrLWluc2VydCBjbGVh bnVwCisJICogKGUuZy4gRlNNIHVwZGF0ZSBmb3IgaGVhcCksIGFuZCByZWxlYXNlIGFsbCByZXNv dXJjZXMgb3duZWQgYnkgdGhlCisJICogc3RhdGUuICBUaGUgc3RhdGUgcG9pbnRlciBpcyBpbnZh bGlkIGFmdGVyIHRoaXMgY2FsbC4gIENhbGxlcnMgbXVzdAorCSAqIG5vdCBzZXBhcmF0ZWx5IGNh bGwgdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KCkgLS0gZW5kKCkgc3Vic3VtZXMgaXQuCisJICov CisJdm9pZAkJKCpidWZmZXJlZF9pbnNlcnRfZW5kKSgKKwkJVGFibGVCdWZmZXJlZEluc2VydFN0 YXRlIHN0YXRlKTsKKworCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogRERMIHJlbGF0ZWQgZnVu Y3Rpb25hbGl0eS4KIAkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2NjYsNiArMTc1OSw3MiBAQCB0 YWJsZV9maW5pc2hfYnVsa19pbnNlcnQoUmVsYXRpb24gcmVsLCB1aW50MzIgb3B0aW9ucykKIH0K IAogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBCdWZmZXJlZC1pbnNlcnQgbGlmZWN5Y2xl IGZ1bmN0aW9ucy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogQmVnaW4g YSBidWZmZXJlZC1pbnNlcnQgc2Vzc2lvbiBmb3IgdGhlIGdpdmVuIHJlbGF0aW9uLgorICoKKyAq IFJldHVybnMgTlVMTCBpZiB0aGUgcmVsYXRpb24ncyBBTSBkb2VzIG5vdCBzdXBwb3J0IGJ1ZmZl cmVkIGluc2VydHMsIGluCisgKiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFj ayB0byB0aGUgc2luZ2xlLXJvdyBpbnNlcnQgcGF0aC4KKyAqCisgKiBmbHVzaF9jYiBtYXkgYmUg TlVMTCB3aGVuIG5vIHBlci10dXBsZSBwb3N0LWluc2VydCB3b3JrIGlzIG5lZWRlZCAoZS5nLgor ICogQ1RBUy9DTVYvUk1WKS4gIFdoZW4gbm9uLU5VTEwsIGl0IGlzIGludm9rZWQgb25jZSBwZXIg Zmx1c2hlZCB0dXBsZSBpbgorICogaW5zZXJ0aW9uIG9yZGVyLCB1c2luZyBhbiBBTS1vd25lZCBz Y3JhdGNoIHNsb3QgdmFsaWQgb25seSBmb3IgdGhlIGR1cmF0aW9uCisgKiBvZiBlYWNoIGNhbGxi YWNrIGludm9jYXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgVGFibGVCdWZmZXJlZEluc2VydFN0 YXRlCit0YWJsZV9idWZmZXJlZF9pbnNlcnRfYmVnaW4oUmVsYXRpb24gcmVsLCBDb21tYW5kSWQg Y2lkLCBpbnQgb3B0aW9ucywKKwkJCQkJCQlUYWJsZUJ1ZmZlcmVkSW5zZXJ0Rmx1c2hDYiBmbHVz aF9jYiwKKwkJCQkJCQl2b2lkICpmbHVzaF9jdHgpCit7CisJaWYgKHJlbC0+cmRfdGFibGVhbS0+ YnVmZmVyZWRfaW5zZXJ0X2JlZ2luID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXJldHVybiBy ZWwtPnJkX3RhYmxlYW0tPmJ1ZmZlcmVkX2luc2VydF9iZWdpbihyZWwsIGNpZCwgb3B0aW9ucywK KwkJCQkJCQkJCQkJCSAgIGZsdXNoX2NiLCBmbHVzaF9jdHgpOworfQorCisvKgorICogU3VibWl0 IG9uZSB0dXBsZSBmb3IgYnVmZmVyZWQgaW5zZXJ0aW9uLiAgVGhlIEFNIHJlYWRzIGZyb20gdGhl IHNsb3QgYW5kCisgKiBjYXB0dXJlcyB0aGUgZGF0YSBpbnRlcm5hbGx5OyB0aGUgY2FsbGVyIHJl dGFpbnMgc2xvdCBvd25lcnNoaXAgYW5kIG1heQorICogcmV1c2UgaXQgaW1tZWRpYXRlbHkgYWZ0 ZXIgdGhpcyBjYWxsIHJldHVybnMuCisgKgorICogVGhlIEFNIG1heSBhdXRvLWZsdXNoIGR1cmlu ZyBwdXQoKSBpZiBpdHMgYnVmZmVyIGlzIGZ1bGw7IHRoZSBmbHVzaAorICogY2FsbGJhY2sgKGlm IGFueSkgbWF5IGZpcmUgZHVyaW5nIHRoaXMgY2FsbC4KKyAqLworc3RhdGljIGlubGluZSB2b2lk Cit0YWJsZV9idWZmZXJlZF9pbnNlcnRfcHV0KFRhYmxlQnVmZmVyZWRJbnNlcnRTdGF0ZSBzdGF0 ZSwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJc3RhdGUtPnJlbC0+cmRfdGFi bGVhbS0+YnVmZmVyZWRfaW5zZXJ0X3B1dChzdGF0ZSwgc2xvdCk7Cit9CisKKy8qCisgKiBGb3Jj ZS1mbHVzaCBhbGwgYnVmZmVyZWQgdHVwbGVzIHRvIHN0b3JhZ2UuICBUaGUgZmx1c2ggY2FsbGJh Y2sgKGlmCisgKiBub24tTlVMTCkgZmlyZXMgb25jZSBwZXIgZmx1c2hlZCB0dXBsZSBpbiBpbnNl cnRpb24gb3JkZXIuICBBZnRlciByZXR1cm4KKyAqIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgKi8K K3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfYnVmZmVyZWRfaW5zZXJ0X2ZsdXNoKFRhYmxlQnVm ZmVyZWRJbnNlcnRTdGF0ZSBzdGF0ZSkKK3sKKwlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT5idWZm ZXJlZF9pbnNlcnRfZmx1c2goc3RhdGUpOworfQorCisvKgorICogRmx1c2ggcmVtYWluaW5nIGJ1 ZmZlcmVkIHR1cGxlcywgcGVyZm9ybSBmaW5pc2gtYnVsay1pbnNlcnQgY2xlYW51cAorICogKGUu Zy4gRlNNIHVwZGF0ZSBmb3IgaGVhcCksIGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMuICBUaGUg c3RhdGUgcG9pbnRlcgorICogaXMgaW52YWxpZCBhZnRlciB0aGlzIGNhbGwuICBEbyBub3Qgc2Vw YXJhdGVseSBjYWxsCisgKiB0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQoKSAtLSBlbmQoKSBzdWJz dW1lcyBpdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9idWZmZXJlZF9pbnNlcnRf ZW5kKFRhYmxlQnVmZmVyZWRJbnNlcnRTdGF0ZSBzdGF0ZSkKK3sKKwlzdGF0ZS0+cmVsLT5yZF90 YWJsZWFtLT5idWZmZXJlZF9pbnNlcnRfZW5kKHN0YXRlKTsKK30KKworCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAqIERETCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCiAgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVz L01ha2VmaWxlCmluZGV4IDBhNzRhYjVjODZmLi5mYTk2NDA0M2Q0ZiAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBA IC0yMCw2ICsyMCw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgdGVzdF9iaW5hcnloZWFwIFwKIAkJICB0 ZXN0X2JpdG1hcHNldCBcCiAJCSAgdGVzdF9ibG9vbWZpbHRlciBcCisJCSAgdGVzdF9idWZmZXJl ZF9pbnNlcnQgXAogCQkgIHRlc3RfY2xvZXhlYyBcCiAJCSAgdGVzdF9jaGVja3N1bXMgXAogCQkg IHRlc3RfY29weV9jYWxsYmFja3MgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNv bi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggNGJjYTQyYmIzNzAu LmFhZTg5MjY5OWI5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTIwLDYgKzIwLDcgQEAgc3ViZGly KCd0ZXN0X2F1dG92YWN1dW0nKQogc3ViZGlyKCd0ZXN0X2JpbmFyeWhlYXAnKQogc3ViZGlyKCd0 ZXN0X2JpdG1hcHNldCcpCiBzdWJkaXIoJ3Rlc3RfYmxvb21maWx0ZXInKQorc3ViZGlyKCd0ZXN0 X2J1ZmZlcmVkX2luc2VydCcpCiBzdWJkaXIoJ3Rlc3RfY2xvZXhlYycpCiBzdWJkaXIoJ3Rlc3Rf Y2hlY2tzdW1zJykKIHN1YmRpcigndGVzdF9jb3B5X2NhbGxiYWNrcycpCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnVmZmVyZWRfaW5zZXJ0L01ha2VmaWxlIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2J1ZmZlcmVkX2luc2VydC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uNWM0OTI2YTRjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYnVmZmVyZWRfaW5zZXJ0L01ha2VmaWxlCkBAIC0wLDAgKzEsMjMg QEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J1ZmZlcmVkX2luc2VydC9NYWtlZmlsZQorCitN T0RVTEVfYmlnID0gdGVzdF9idWZmZXJlZF9pbnNlcnQKK09CSlMgPSBcCisJJChXSU4zMlJFUykg XAorCXRlc3RfYnVmZmVyZWRfaW5zZXJ0Lm8KK1BHRklMRURFU0MgPSAidGVzdF9idWZmZXJlZF9p bnNlcnQgLSB0ZXN0IFRhYmxlIEFNIGJ1ZmZlcmVkLWluc2VydCBsaWZlY3ljbGUiCisKK0VYVEVO U0lPTiA9IHRlc3RfYnVmZmVyZWRfaW5zZXJ0CitEQVRBID0gdGVzdF9idWZmZXJlZF9pbnNlcnQt LTEuMC5zcWwKKworUkVHUkVTUyA9IHRlc3RfYnVmZmVyZWRfaW5zZXJ0CisKK2lmZGVmIFVTRV9Q R1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykg LS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYnVmZmVyZWRfaW5zZXJ0Cit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNk aXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYnVmZmVyZWRfaW5zZXJ0L2V4cGVjdGVkL3Rlc3RfYnVmZmVyZWRfaW5z ZXJ0Lm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idWZmZXJlZF9pbnNlcnQvZXhwZWN0ZWQv dGVzdF9idWZmZXJlZF9pbnNlcnQub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi43OTE2Mzk1MmY2ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9idWZmZXJlZF9pbnNlcnQvZXhwZWN0ZWQvdGVzdF9idWZmZXJlZF9pbnNlcnQub3V0CkBA IC0wLDAgKzEsMTA4IEBACitDUkVBVEUgRVhURU5TSU9OIHRlc3RfYnVmZmVyZWRfaW5zZXJ0Owor LS0gVGFyZ2V0IHRhYmxlOiBzaW5nbGUgaW50ZWdlciBjb2x1bW4uCitDUkVBVEUgVEFCTEUgYnVm ZmVyZWRfaW5zZXJ0X3Rlc3QgKGEgSU5UKTsKKy0tIEJhc2ljIHRlc3Q6IGluc2VydCA1IHJvd3Mg dmlhIGJ1ZmZlcmVkLWluc2VydCB3aXRoIE5VTEwgZmx1c2ggY2FsbGJhY2suCitTRUxFQ1QgdGVz dF9idWZmZXJlZF9pbnNlcnRfYmFzaWMoJ2J1ZmZlcmVkX2luc2VydF90ZXN0Jzo6cmVnY2xhc3Ms IDUpOworIHRlc3RfYnVmZmVyZWRfaW5zZXJ0X2Jhc2ljIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICA1CisoMSByb3cpCisKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGJ1ZmZlcmVkX2luc2VydF90ZXN0OworIGNvdW50IAorLS0tLS0tLQorICAg ICA1CisoMSByb3cpCisKK1NFTEVDVCBhIEZST00gYnVmZmVyZWRfaW5zZXJ0X3Rlc3QgT1JERVIg QlkgYTsKKyBhIAorLS0tCisgMQorIDIKKyAzCisgNAorIDUKKyg1IHJvd3MpCisKK1RSVU5DQVRF IGJ1ZmZlcmVkX2luc2VydF90ZXN0OworLS0gVGVzdCB3aXRoIGZsdXNoIGNhbGxiYWNrOiBpbnNl cnQgNSByb3dzLCB2ZXJpZnkgY2FsbGJhY2sgY291bnQgbWF0Y2hlcy4KK1NFTEVDVCB0ZXN0X2J1 ZmZlcmVkX2luc2VydF93aXRoX2NhbGxiYWNrKCdidWZmZXJlZF9pbnNlcnRfdGVzdCc6OnJlZ2Ns YXNzLCA1KTsKKyB0ZXN0X2J1ZmZlcmVkX2luc2VydF93aXRoX2NhbGxiYWNrIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgNQorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgRlJPTSBidWZmZXJlZF9pbnNlcnRf dGVzdDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgNQorKDEgcm93KQorCitTRUxFQ1QgYSBGUk9N IGJ1ZmZlcmVkX2luc2VydF90ZXN0IE9SREVSIEJZIGE7CisgYSAKKy0tLQorIDEKKyAyCisgMwor IDQKKyA1CisoNSByb3dzKQorCitUUlVOQ0FURSBidWZmZXJlZF9pbnNlcnRfdGVzdDsKKy0tIFRy aWdnZXIgYXV0by1mbHVzaDogaW5zZXJ0IG1vcmUgcm93cyB0aGFuIEhFQVBfQlVGRkVSRURfSU5T RVJUX01BWF9TTE9UUworLS0gKDEwMDApIHRvIHZlcmlmeSBhdXRvLWZsdXNoIGR1cmluZyBwdXQo KSB3b3JrcyBjb3JyZWN0bHkuCitTRUxFQ1QgdGVzdF9idWZmZXJlZF9pbnNlcnRfYmFzaWMoJ2J1 ZmZlcmVkX2luc2VydF90ZXN0Jzo6cmVnY2xhc3MsIDE1MDApOworIHRlc3RfYnVmZmVyZWRfaW5z ZXJ0X2Jhc2ljIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAg ICAgICAgICAxNTAwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ1ZmZlcmVkX2lu c2VydF90ZXN0OworIGNvdW50IAorLS0tLS0tLQorICAxNTAwCisoMSByb3cpCisKKy0tIFNwb3Qt Y2hlY2sgZmlyc3QgYW5kIGxhc3QgdmFsdWVzLgorU0VMRUNUIG1pbihhKSwgbWF4KGEpIEZST00g YnVmZmVyZWRfaW5zZXJ0X3Rlc3Q7CisgbWluIHwgbWF4ICAKKy0tLS0tKy0tLS0tLQorICAgMSB8 IDE1MDAKKygxIHJvdykKKworVFJVTkNBVEUgYnVmZmVyZWRfaW5zZXJ0X3Rlc3Q7CistLSBWZXJp ZnkgZmx1c2ggY2FsbGJhY2sgZmlyZXMgZm9yIGFsbCByb3dzIGluY2x1ZGluZyBhdXRvLWZsdXNo ZWQgYmF0Y2hlcy4KK1NFTEVDVCB0ZXN0X2J1ZmZlcmVkX2luc2VydF93aXRoX2NhbGxiYWNrKCdi dWZmZXJlZF9pbnNlcnRfdGVzdCc6OnJlZ2NsYXNzLCAxNTAwKTsKKyB0ZXN0X2J1ZmZlcmVkX2lu c2VydF93aXRoX2NhbGxiYWNrIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUwMAorKDEgcm93KQorCitTRUxFQ1Qg Y291bnQoKikgRlJPTSBidWZmZXJlZF9pbnNlcnRfdGVzdDsKKyBjb3VudCAKKy0tLS0tLS0KKyAg MTUwMAorKDEgcm93KQorCitUUlVOQ0FURSBidWZmZXJlZF9pbnNlcnRfdGVzdDsKKy0tIFRlc3Qg ZXhwbGljaXQgZmx1c2goKSBtaWQtc2Vzc2lvbjogZmx1c2ggYWZ0ZXIgZmlyc3QgNSByb3dzLCBp bnNlcnQgNSBtb3JlLAorLS0gdGhlbiBlbmQoKS4gIENhbGxiYWNrIGNvdW50IG11c3QgZXF1YWwg dG90YWwgcm93cy4KK1NFTEVDVCB0ZXN0X2J1ZmZlcmVkX2luc2VydF9mbHVzaF9taWQoJ2J1ZmZl cmVkX2luc2VydF90ZXN0Jzo6cmVnY2xhc3MsIDEwKTsKKyB0ZXN0X2J1ZmZlcmVkX2luc2VydF9m bHVzaF9taWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMAorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgRlJPTSBidWZm ZXJlZF9pbnNlcnRfdGVzdDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAxMAorKDEgcm93KQorCitT RUxFQ1QgbWluKGEpLCBtYXgoYSkgRlJPTSBidWZmZXJlZF9pbnNlcnRfdGVzdDsKKyBtaW4gfCBt YXggCistLS0tLSstLS0tLQorICAgMSB8ICAxMAorKDEgcm93KQorCitEUk9QIFRBQkxFIGJ1ZmZl cmVkX2luc2VydF90ZXN0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J1ZmZl cmVkX2luc2VydC9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idWZmZXJlZF9p bnNlcnQvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmQ3MzhjY2IxYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J1 ZmZlcmVkX2luc2VydC9tZXNvbi5idWlsZApAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAo YykgMjAyMi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0 X2J1ZmZlcmVkX2luc2VydF9zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0X2J1ZmZlcmVkX2luc2Vy dC5jJywKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHRlc3RfYnVmZmVyZWRf aW5zZXJ0X3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9h cmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2J1ZmZlcmVkX2luc2VydCcsCisgICAgJy0tRklM RURFU0MnLCAndGVzdF9idWZmZXJlZF9pbnNlcnQgLSB0ZXN0IFRhYmxlIEFNIGJ1ZmZlcmVkLWlu c2VydCBsaWZlY3ljbGUnLF0pCitlbmRpZgorCit0ZXN0X2J1ZmZlcmVkX2luc2VydCA9IHNoYXJl ZF9tb2R1bGUoJ3Rlc3RfYnVmZmVyZWRfaW5zZXJ0JywKKyAgdGVzdF9idWZmZXJlZF9pbnNlcnRf c291cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21vZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xp YnMgKz0gdGVzdF9idWZmZXJlZF9pbnNlcnQKKwordGVzdF9pbnN0YWxsX2RhdGEgKz0gZmlsZXMo CisgICd0ZXN0X2J1ZmZlcmVkX2luc2VydC5jb250cm9sJywKKyAgJ3Rlc3RfYnVmZmVyZWRfaW5z ZXJ0LS0xLjAuc3FsJywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2J1ZmZlcmVk X2luc2VydCcsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBt ZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzogWwor ICAgICAgJ3Rlc3RfYnVmZmVyZWRfaW5zZXJ0JywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J1ZmZlcmVkX2luc2VydC9zcWwvdGVzdF9idWZmZXJl ZF9pbnNlcnQuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J1ZmZlcmVkX2luc2VydC9zcWwv dGVzdF9idWZmZXJlZF9pbnNlcnQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4yM2FjMDljYzliYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9idWZmZXJlZF9pbnNlcnQvc3FsL3Rlc3RfYnVmZmVyZWRfaW5zZXJ0LnNxbApAQCAtMCww ICsxLDQxIEBACitDUkVBVEUgRVhURU5TSU9OIHRlc3RfYnVmZmVyZWRfaW5zZXJ0OworCistLSBU YXJnZXQgdGFibGU6IHNpbmdsZSBpbnRlZ2VyIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBidWZmZXJl ZF9pbnNlcnRfdGVzdCAoYSBJTlQpOworCistLSBCYXNpYyB0ZXN0OiBpbnNlcnQgNSByb3dzIHZp YSBidWZmZXJlZC1pbnNlcnQgd2l0aCBOVUxMIGZsdXNoIGNhbGxiYWNrLgorU0VMRUNUIHRlc3Rf YnVmZmVyZWRfaW5zZXJ0X2Jhc2ljKCdidWZmZXJlZF9pbnNlcnRfdGVzdCc6OnJlZ2NsYXNzLCA1 KTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ1ZmZlcmVkX2luc2VydF90ZXN0OworU0VMRUNUIGEg RlJPTSBidWZmZXJlZF9pbnNlcnRfdGVzdCBPUkRFUiBCWSBhOworCitUUlVOQ0FURSBidWZmZXJl ZF9pbnNlcnRfdGVzdDsKKworLS0gVGVzdCB3aXRoIGZsdXNoIGNhbGxiYWNrOiBpbnNlcnQgNSBy b3dzLCB2ZXJpZnkgY2FsbGJhY2sgY291bnQgbWF0Y2hlcy4KK1NFTEVDVCB0ZXN0X2J1ZmZlcmVk X2luc2VydF93aXRoX2NhbGxiYWNrKCdidWZmZXJlZF9pbnNlcnRfdGVzdCc6OnJlZ2NsYXNzLCA1 KTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ1ZmZlcmVkX2luc2VydF90ZXN0OworU0VMRUNUIGEg RlJPTSBidWZmZXJlZF9pbnNlcnRfdGVzdCBPUkRFUiBCWSBhOworCitUUlVOQ0FURSBidWZmZXJl ZF9pbnNlcnRfdGVzdDsKKworLS0gVHJpZ2dlciBhdXRvLWZsdXNoOiBpbnNlcnQgbW9yZSByb3dz IHRoYW4gSEVBUF9CVUZGRVJFRF9JTlNFUlRfTUFYX1NMT1RTCistLSAoMTAwMCkgdG8gdmVyaWZ5 IGF1dG8tZmx1c2ggZHVyaW5nIHB1dCgpIHdvcmtzIGNvcnJlY3RseS4KK1NFTEVDVCB0ZXN0X2J1 ZmZlcmVkX2luc2VydF9iYXNpYygnYnVmZmVyZWRfaW5zZXJ0X3Rlc3QnOjpyZWdjbGFzcywgMTUw MCk7CitTRUxFQ1QgY291bnQoKikgRlJPTSBidWZmZXJlZF9pbnNlcnRfdGVzdDsKKy0tIFNwb3Qt Y2hlY2sgZmlyc3QgYW5kIGxhc3QgdmFsdWVzLgorU0VMRUNUIG1pbihhKSwgbWF4KGEpIEZST00g YnVmZmVyZWRfaW5zZXJ0X3Rlc3Q7CisKK1RSVU5DQVRFIGJ1ZmZlcmVkX2luc2VydF90ZXN0Owor CistLSBWZXJpZnkgZmx1c2ggY2FsbGJhY2sgZmlyZXMgZm9yIGFsbCByb3dzIGluY2x1ZGluZyBh dXRvLWZsdXNoZWQgYmF0Y2hlcy4KK1NFTEVDVCB0ZXN0X2J1ZmZlcmVkX2luc2VydF93aXRoX2Nh bGxiYWNrKCdidWZmZXJlZF9pbnNlcnRfdGVzdCc6OnJlZ2NsYXNzLCAxNTAwKTsKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGJ1ZmZlcmVkX2luc2VydF90ZXN0OworCitUUlVOQ0FURSBidWZmZXJlZF9p bnNlcnRfdGVzdDsKKworLS0gVGVzdCBleHBsaWNpdCBmbHVzaCgpIG1pZC1zZXNzaW9uOiBmbHVz aCBhZnRlciBmaXJzdCA1IHJvd3MsIGluc2VydCA1IG1vcmUsCistLSB0aGVuIGVuZCgpLiAgQ2Fs bGJhY2sgY291bnQgbXVzdCBlcXVhbCB0b3RhbCByb3dzLgorU0VMRUNUIHRlc3RfYnVmZmVyZWRf aW5zZXJ0X2ZsdXNoX21pZCgnYnVmZmVyZWRfaW5zZXJ0X3Rlc3QnOjpyZWdjbGFzcywgMTApOwor U0VMRUNUIGNvdW50KCopIEZST00gYnVmZmVyZWRfaW5zZXJ0X3Rlc3Q7CitTRUxFQ1QgbWluKGEp LCBtYXgoYSkgRlJPTSBidWZmZXJlZF9pbnNlcnRfdGVzdDsKKworRFJPUCBUQUJMRSBidWZmZXJl ZF9pbnNlcnRfdGVzdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idWZmZXJl ZF9pbnNlcnQvdGVzdF9idWZmZXJlZF9pbnNlcnQtLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYnVmZmVyZWRfaW5zZXJ0L3Rlc3RfYnVmZmVyZWRfaW5zZXJ0LS0xLjAuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNmFhMDYzNTI0MAotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idWZmZXJlZF9pbnNlcnQvdGVzdF9idWZm ZXJlZF9pbnNlcnQtLTEuMC5zcWwKQEAgLTAsMCArMSwzMCBAQAorLyogc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2J1ZmZlcmVkX2luc2VydC90ZXN0X2J1ZmZlcmVkX2luc2VydC0tMS4wLnNxbCAqLwor CistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2 aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHRlc3RfYnVm ZmVyZWRfaW5zZXJ0IiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworLS0KKy0tIEluc2VydCBy b3dzIHRocm91Z2ggdGhlIGJ1ZmZlcmVkLWluc2VydCBsaWZlY3ljbGUgd2l0aCBhIE5VTEwgZmx1 c2gKKy0tIGNhbGxiYWNrICh0aGUgQ1RBUy9DTVYvUk1WIHBhdHRlcm4pLiAgUmV0dXJucyB0aGUg bnVtYmVyIG9mIHJvd3MgcHV0KCkuCistLQorQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYnVmZmVyZWRf aW5zZXJ0X2Jhc2ljKHBnX2NhdGFsb2cucmVnY2xhc3MsIHBnX2NhdGFsb2cuaW50NCkKKwlSRVRV Uk5TIHBnX2NhdGFsb2cuaW50NAorCUFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisK Ky0tCistLSBJbnNlcnQgcm93cyB0aHJvdWdoIHRoZSBidWZmZXJlZC1pbnNlcnQgbGlmZWN5Y2xl IHdpdGggYSBmbHVzaCBjYWxsYmFjaworLS0gdGhhdCBjb3VudHMgaW52b2NhdGlvbnMuICBSZXR1 cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgZmx1c2gtY2FsbGJhY2sKKy0tIGludm9jYXRpb25zIChz aG91bGQgZXF1YWwgdGhlIG51bWJlciBvZiByb3dzIGluc2VydGVkKS4KKy0tCitDUkVBVEUgRlVO Q1RJT04gdGVzdF9idWZmZXJlZF9pbnNlcnRfd2l0aF9jYWxsYmFjayhwZ19jYXRhbG9nLnJlZ2Ns YXNzLCBwZ19jYXRhbG9nLmludDQpCisJUkVUVVJOUyBwZ19jYXRhbG9nLmludDQKKwlBUyAnTU9E VUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCistLQorLS0gRXhlcmNpc2UgZXhwbGljaXQgZmx1 c2goKSBtaWQtc2Vzc2lvbjogaW5zZXJ0cyBoYWxmIHRoZSByb3dzLCBjYWxscworLS0gZmx1c2go KSwgaW5zZXJ0cyB0aGUgb3RoZXIgaGFsZiwgdGhlbiBjYWxscyBlbmQoKS4gIFJldHVybnMgdGhl IHRvdGFsCistLSBudW1iZXIgb2YgZmx1c2gtY2FsbGJhY2sgaW52b2NhdGlvbnMgKHNob3VsZCBl cXVhbCBucm93cykuCistLQorQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYnVmZmVyZWRfaW5zZXJ0X2Zs dXNoX21pZChwZ19jYXRhbG9nLnJlZ2NsYXNzLCBwZ19jYXRhbG9nLmludDQpCisJUkVUVVJOUyBw Z19jYXRhbG9nLmludDQKKwlBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J1ZmZlcmVkX2luc2VydC90ZXN0X2J1ZmZlcmVk X2luc2VydC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J1ZmZlcmVkX2luc2VydC90ZXN0X2J1 ZmZlcmVkX2luc2VydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5m YmRhN2IxYzcwYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idWZm ZXJlZF9pbnNlcnQvdGVzdF9idWZmZXJlZF9pbnNlcnQuYwpAQCAtMCwwICsxLDIzMyBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRlc3RfYnVmZmVyZWRfaW5zZXJ0LmMKKyAqCQlNaW5p bWFsIHZhbGlkYXRpb24gZm9yIHRoZSBUYWJsZSBBTSBidWZmZXJlZC1pbnNlcnQgbGlmZWN5Y2xl IEFQSS4KKyAqCisgKgkJRXhlcmNpc2VzIGJlZ2luL3B1dC9mbHVzaC9lbmQgZGlyZWN0bHkgYXQg dGhlIFRhYmxlIEFNIGxheWVyIG9uIGEKKyAqCQlyZWFsIGhlYXAgcmVsYXRpb24sIHdpdGhvdXQg Z29pbmcgdGhyb3VnaCBhbnkgaGlnaGVyLWxldmVsIGNhbGxlcgorICoJCShDVEFTLCBDT1BZLCBl dGMuKS4gIFRoaXMga2VlcHMgdGhlIHRlc3Qgd2l0aGluIFBhdGNoIDAwMDEgc2NvcGUuCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkJc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J1ZmZlcmVkX2luc2VydC90ZXN0X2J1ZmZlcmVkX2lu c2VydC5jCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFi bGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNw YWNlLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvdHVwdGFibGUuaCIKKyNpbmNsdWRlICJmbWdyLmgi CisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKworUEdfTU9EVUxFX01BR0lDOworCisvKgorICog dGVzdF9idWZmZXJlZF9pbnNlcnRfYmFzaWMocmVnY2xhc3MsIGludDQpCisgKgorICogT3BlbnMg dGhlIGdpdmVuIHJlbGF0aW9uLCBpbnNlcnRzIG5yb3dzIHR1cGxlcyB0aHJvdWdoIHRoZSBidWZm ZXJlZC1pbnNlcnQKKyAqIEFQSSB3aXRoIGEgTlVMTCBmbHVzaCBjYWxsYmFjaywgYW5kIHJldHVy bnMgdGhlIG51bWJlciBvZiByb3dzIHB1dCgpLgorICogVGhlIHR1cGxlcyBpbnNlcnRlZCBoYXZl IHRoZSBmb3JtIChpKSBmb3IgYSBzaW5nbGUtaW50ZWdlci1jb2x1bW4gdGFibGUuCisgKi8KK1BH X0ZVTkNUSU9OX0lORk9fVjEodGVzdF9idWZmZXJlZF9pbnNlcnRfYmFzaWMpOworRGF0dW0KK3Rl c3RfYnVmZmVyZWRfaW5zZXJ0X2Jhc2ljKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJcmVs aWQgPSBQR19HRVRBUkdfT0lEKDApOworCWludDMyCQlucm93cyA9IFBHX0dFVEFSR19JTlQzMigx KTsKKwlSZWxhdGlvbglyZWw7CisJVGFibGVCdWZmZXJlZEluc2VydFN0YXRlIHN0YXRlOworCVR1 cGxlVGFibGVTbG90ICpzbG90OworCVR1cGxlRGVzYwl0dXBkZXNjOworCWludAkJCWk7CisKKwly ZWwgPSB0YWJsZV9vcGVuKHJlbGlkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwl0dXBkZXNjID0gUmVs YXRpb25HZXREZXNjcihyZWwpOworCisJc3RhdGUgPSB0YWJsZV9idWZmZXJlZF9pbnNlcnRfYmVn aW4ocmVsLAorCQkJCQkJCQkJCUdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksCisJCQkJCQkJCQkJ VEFCTEVfSU5TRVJUX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJTlVMTCwgTlVMTCk7CisKKwlp ZiAoc3RhdGUgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygiQU0gZG9lcyBub3Qgc3VwcG9y dCBidWZmZXJlZCBpbnNlcnRzIikpKTsKKworCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNs b3QodHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpOworCisJZm9yIChpID0gMDsgaSA8IG5yb3dzOyBp KyspCisJeworCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJc2xvdC0+dHRzX3ZhbHVlc1swXSA9 IEludDMyR2V0RGF0dW0oaSArIDEpOworCQlzbG90LT50dHNfaXNudWxsWzBdID0gZmFsc2U7CisJ CUV4ZWNTdG9yZVZpcnR1YWxUdXBsZShzbG90KTsKKworCQl0YWJsZV9idWZmZXJlZF9pbnNlcnRf cHV0KHN0YXRlLCBzbG90KTsKKwl9CisKKwl0YWJsZV9idWZmZXJlZF9pbnNlcnRfZW5kKHN0YXRl KTsKKworCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisJdGFibGVfY2xvc2Uo cmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCVBHX1JFVFVSTl9JTlQzMihucm93cyk7Cit9CisK Ky8qCisgKiBGbHVzaCBjYWxsYmFjayBjb250ZXh0OiBjb3VudHMgaW52b2NhdGlvbnMgYW5kIHZl cmlmaWVzIGVhY2ggc2xvdCBoYXMKKyAqIGEgdmFsaWQgVElELgorICovCit0eXBlZGVmIHN0cnVj dCBGbHVzaENiQ29udGV4dAoreworCWludAkJCWNvdW50OworfSBGbHVzaENiQ29udGV4dDsKKwor c3RhdGljIHZvaWQKK3Rlc3RfZmx1c2hfY2FsbGJhY2sodm9pZCAqY29udGV4dCwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpCit7CisJRmx1c2hDYkNvbnRleHQgKmN0eCA9IChGbHVzaENiQ29udGV4dCAq KSBjb250ZXh0OworCisJaWYgKCFJdGVtUG9pbnRlcklzVmFsaWQoJnNsb3QtPnR0c190aWQpKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5URVJOQUxfRVJST1IpLAor CQkJCSBlcnJtc2coImZsdXNoIGNhbGxiYWNrIHJlY2VpdmVkIHNsb3Qgd2l0aCBpbnZhbGlkIFRJ RCIpKSk7CisKKwljdHgtPmNvdW50Kys7Cit9CisKKy8qCisgKiB0ZXN0X2J1ZmZlcmVkX2luc2Vy dF93aXRoX2NhbGxiYWNrKHJlZ2NsYXNzLCBpbnQ0KQorICoKKyAqIFNhbWUgYXMgYmFzaWMsIGJ1 dCBwYXNzZXMgYSBmbHVzaCBjYWxsYmFjayB0aGF0IGNvdW50cyBpbnZvY2F0aW9ucyBhbmQKKyAq IHZhbGlkYXRlcyBUSURzLiAgUmV0dXJucyB0aGUgdG90YWwgZmx1c2gtY2FsbGJhY2sgaW52b2Nh dGlvbiBjb3VudC4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2J1ZmZlcmVkX2luc2Vy dF93aXRoX2NhbGxiYWNrKTsKK0RhdHVtCit0ZXN0X2J1ZmZlcmVkX2luc2VydF93aXRoX2NhbGxi YWNrKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJcmVsaWQgPSBQR19HRVRBUkdfT0lEKDAp OworCWludDMyCQlucm93cyA9IFBHX0dFVEFSR19JTlQzMigxKTsKKwlSZWxhdGlvbglyZWw7CisJ VGFibGVCdWZmZXJlZEluc2VydFN0YXRlIHN0YXRlOworCVR1cGxlVGFibGVTbG90ICpzbG90Owor CVR1cGxlRGVzYwl0dXBkZXNjOworCUZsdXNoQ2JDb250ZXh0IGN0eDsKKwlpbnQJCQlpOworCisJ Y3R4LmNvdW50ID0gMDsKKworCXJlbCA9IHRhYmxlX29wZW4ocmVsaWQsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisKKwlzdGF0ZSA9IHRhYmxl X2J1ZmZlcmVkX2luc2VydF9iZWdpbihyZWwsCisJCQkJCQkJCQkJR2V0Q3VycmVudENvbW1hbmRJ ZCh0cnVlKSwKKwkJCQkJCQkJCQlUQUJMRV9JTlNFUlRfQkFTX0JVTEtXUklURSwKKwkJCQkJCQkJ CQl0ZXN0X2ZsdXNoX2NhbGxiYWNrLAorCQkJCQkJCQkJCSZjdHgpOworCisJaWYgKHN0YXRlID09 IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coIkFNIGRvZXMgbm90IHN1cHBvcnQgYnVmZmVyZWQg aW5zZXJ0cyIpKSk7CisKKwlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KHR1cGRlc2Ms ICZUVFNPcHNWaXJ0dWFsKTsKKworCWZvciAoaSA9IDA7IGkgPCBucm93czsgaSsrKQorCXsKKwkJ RXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCXNsb3QtPnR0c192YWx1ZXNbMF0gPSBJbnQzMkdldERh dHVtKGkgKyAxKTsKKwkJc2xvdC0+dHRzX2lzbnVsbFswXSA9IGZhbHNlOworCQlFeGVjU3RvcmVW aXJ0dWFsVHVwbGUoc2xvdCk7CisKKwkJdGFibGVfYnVmZmVyZWRfaW5zZXJ0X3B1dChzdGF0ZSwg c2xvdCk7CisJfQorCisJdGFibGVfYnVmZmVyZWRfaW5zZXJ0X2VuZChzdGF0ZSk7CisKKwlFeGVj RHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhj bHVzaXZlTG9jayk7CisKKwlQR19SRVRVUk5fSU5UMzIoY3R4LmNvdW50KTsKK30KKworLyoKKyAq IHRlc3RfYnVmZmVyZWRfaW5zZXJ0X2ZsdXNoX21pZChyZWdjbGFzcywgaW50NCkKKyAqCisgKiBF eGVyY2lzZXMgZXhwbGljaXQgZmx1c2goKSBtaWQtc2Vzc2lvbjogaW5zZXJ0cyBoYWxmIHRoZSBy b3dzLCBjYWxscworICogZmx1c2goKSwgaW5zZXJ0cyB0aGUgb3RoZXIgaGFsZiwgdGhlbiBjYWxs cyBlbmQoKS4gIFJldHVybnMgdGhlIHRvdGFsCisgKiBmbHVzaC1jYWxsYmFjayBjb3VudCwgd2hp Y2ggc2hvdWxkIGVxdWFsIG5yb3dzLgorICovCitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYnVm ZmVyZWRfaW5zZXJ0X2ZsdXNoX21pZCk7CitEYXR1bQordGVzdF9idWZmZXJlZF9pbnNlcnRfZmx1 c2hfbWlkKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJcmVsaWQgPSBQR19HRVRBUkdfT0lE KDApOworCWludDMyCQlucm93cyA9IFBHX0dFVEFSR19JTlQzMigxKTsKKwlSZWxhdGlvbglyZWw7 CisJVGFibGVCdWZmZXJlZEluc2VydFN0YXRlIHN0YXRlOworCVR1cGxlVGFibGVTbG90ICpzbG90 OworCVR1cGxlRGVzYwl0dXBkZXNjOworCUZsdXNoQ2JDb250ZXh0IGN0eDsKKwlpbnQJCQloYWxm ID0gbnJvd3MgLyAyOworCWludAkJCWk7CisKKwljdHguY291bnQgPSAwOworCisJcmVsID0gdGFi bGVfb3BlbihyZWxpZCwgUm93RXhjbHVzaXZlTG9jayk7CisJdHVwZGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IocmVsKTsKKworCXN0YXRlID0gdGFibGVfYnVmZmVyZWRfaW5zZXJ0X2JlZ2luKHJlbCwK KwkJCQkJCQkJCQlHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJCQkJCVRBQkxFX0lO U0VSVF9CQVNfQlVMS1dSSVRFLAorCQkJCQkJCQkJCXRlc3RfZmx1c2hfY2FsbGJhY2ssCisJCQkJ CQkJCQkJJmN0eCk7CisKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygi QU0gZG9lcyBub3Qgc3VwcG9ydCBidWZmZXJlZCBpbnNlcnRzIikpKTsKKworCXNsb3QgPSBNYWtl U2luZ2xlVHVwbGVUYWJsZVNsb3QodHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpOworCisJLyogRmly c3QgaGFsZiAqLworCWZvciAoaSA9IDA7IGkgPCBoYWxmOyBpKyspCisJeworCQlFeGVjQ2xlYXJU dXBsZShzbG90KTsKKwkJc2xvdC0+dHRzX3ZhbHVlc1swXSA9IEludDMyR2V0RGF0dW0oaSArIDEp OworCQlzbG90LT50dHNfaXNudWxsWzBdID0gZmFsc2U7CisJCUV4ZWNTdG9yZVZpcnR1YWxUdXBs ZShzbG90KTsKKworCQl0YWJsZV9idWZmZXJlZF9pbnNlcnRfcHV0KHN0YXRlLCBzbG90KTsKKwl9 CisKKwkvKiBFeHBsaWNpdCBmbHVzaCBtaWQtc2Vzc2lvbiAqLworCXRhYmxlX2J1ZmZlcmVkX2lu c2VydF9mbHVzaChzdGF0ZSk7CisKKwkvKiBTZWNvbmQgaGFsZiAqLworCWZvciAoaSA9IGhhbGY7 IGkgPCBucm93czsgaSsrKQorCXsKKwkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCXNsb3QtPnR0 c192YWx1ZXNbMF0gPSBJbnQzMkdldERhdHVtKGkgKyAxKTsKKwkJc2xvdC0+dHRzX2lzbnVsbFsw XSA9IGZhbHNlOworCQlFeGVjU3RvcmVWaXJ0dWFsVHVwbGUoc2xvdCk7CisKKwkJdGFibGVfYnVm ZmVyZWRfaW5zZXJ0X3B1dChzdGF0ZSwgc2xvdCk7CisJfQorCisJLyogZW5kKCkgZmx1c2hlcyB0 aGUgcmVtYWluaW5nIHR1cGxlcyAqLworCXRhYmxlX2J1ZmZlcmVkX2luc2VydF9lbmQoc3RhdGUp OworCisJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKwl0YWJsZV9jbG9zZShy ZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJUEdfUkVUVVJOX0lOVDMyKGN0eC5jb3VudCk7Cit9 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnVmZmVyZWRfaW5zZXJ0L3Rlc3Rf YnVmZmVyZWRfaW5zZXJ0LmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnVmZmVyZWRf aW5zZXJ0L3Rlc3RfYnVmZmVyZWRfaW5zZXJ0LmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjMyMjFjNzY1ODIwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2J1ZmZlcmVkX2luc2VydC90ZXN0X2J1ZmZlcmVkX2luc2VydC5jb250 cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIFRhYmxlIEFNIGJ1 ZmZlcmVkLWluc2VydCBsaWZlY3ljbGUnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxl X3BhdGhuYW1lID0gJyRsaWJkaXIvdGVzdF9idWZmZXJlZF9pbnNlcnQnCityZWxvY2F0YWJsZSA9 IHRydWUKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOWYxZGQ1NTIxM2QuLjI1N2FlZTFl Njg0IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTI1NSw2ICsxMjU1LDcgQEAgSGVh ZGxpbmVXb3JkRW50cnkKIEhlYXBDaGVja0NvbnRleHQKIEhlYXBDaGVja1JlYWRTdHJlYW1EYXRh CiBIZWFwUGFnZUZyZWV6ZQorSGVhcEJ1ZmZlcmVkSW5zZXJ0U3RhdGUKIEhlYXBTY2FuRGVzYwog SGVhcFNjYW5EZXNjRGF0YQogSGVhcFR1cGxlCkBAIC0zMTIzLDYgKzMxMjQsOSBAQCBUX0FjdGlv bgogVF9Xb3JrZXJTdGF0dXMKIFRhYmxlQW1Sb3V0aW5lCiBUYWJsZUF0dGFjaEluZm8KK1RhYmxl QnVmZmVyZWRJbnNlcnRGbHVzaENiCitUYWJsZUJ1ZmZlcmVkSW5zZXJ0U3RhdGUKK1RhYmxlQnVm ZmVyZWRJbnNlcnRTdGF0ZURhdGEKIFRhYmxlRGF0YUluZm8KIFRhYmxlRnVuYwogVGFibGVGdW5j Um91dGluZQotLSAKMi41Mi4wCgo= --00000000000010bb5b06507da644 Content-Type: application/octet-stream; name="v1-0005-executor-adopt-buffered-insert-API-for-restricted.patch" Content-Disposition: attachment; filename="v1-0005-executor-adopt-buffered-insert-API-for-restricted.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_moi4bjnx4 RnJvbSBmMmEzOGQ5MThhMGNiM2Y0Mjc5Yzc1ZjM5OWM4MmVlZGIzN2M5MDlkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFN1biwgMjYgQXByIDIwMjYgMjI6MjQ6MjAgLTA3MDAKU3ViamVjdDogW1BBVENIIHYxIDUvNV0g ZXhlY3V0b3I6IGFkb3B0IGJ1ZmZlcmVkLWluc2VydCBBUEkgZm9yIHJlc3RyaWN0ZWQKIElOU0VS VCAuLi4gU0VMRUNUCgpBZGQgYSByZXN0cmljdGVkIGZpcnN0LXN0ZXAgYnVmZmVyZWQtaW5zZXJ0 IGFkb3B0aW9uIGZvcgpgSU5TRVJUIElOVE8gLi4uIFNFTEVDVGAgaW4gdGhlIGV4ZWN1dG9yLgoK VGhpcyBwYXRjaCBpbnRlZ3JhdGVzIHRoZSBleGlzdGluZyBidWZmZXJlZC1pbnNlcnQgbGlmZWN5 Y2xlIEFQSSBpbnRvIHRoZQpwbGFpbiBub24tcGFydGl0aW9uZWQgaGVhcCBgQ01EX0lOU0VSVGAg cGF0aCBpbiBgRXhlY0luc2VydCgpYCAvCmBFeGVjTW9kaWZ5VGFibGUoKWAsIHVzaW5nIGEgbG9j YWwgZmx1c2ggY2FsbGJhY2sgZm9yIHBvc3QtaW5zZXJ0IHdvcmsuCgpUaGUgYnVmZmVyZWQgcGF0 aCBpcyBpbnRlbnRpb25hbGx5IG5hcnJvdy4gSXQgZmFsbHMgYmFjayB0byB0aGUgZXhpc3RpbmcK c2luZ2xlLXJvdyBwYXRoIGZvciBjYXNlcyBvdXRzaWRlIHRoZSByZXN0cmljdGVkIHNjb3BlLCBp bmNsdWRpbmc6Ci0gT04gQ09ORkxJQ1QKLSBSRVRVUk5JTkcKLSBwYXJ0aXRpb25lZCB0YXJnZXRz Ci0gQkVGT1JFIFJPVyAvIElOU1RFQUQgT0YgdHJpZ2dlcnMKLSBGRFcgdGFyZ2V0cwotIE1FUkdF IC8gY3Jvc3MtcGFydGl0aW9uIFVQREFURSBpbnNlcnQgc2lkZQotIHZvbGF0aWxlIHRhcmdldC1z aWRlIGRlZmF1bHQgZXhwcmVzc2lvbnMKClRoZSBmbHVzaCBjYWxsYmFjayBwZXJmb3JtcyB0aGUg bWluaW1hbCBwb3N0LWluc2VydCBleGVjdXRvciB3b3JrIG5lZWRlZApmb3IgdGhpcyBmaXJzdCBz dGVwOgotIGluZGV4IG1haW50ZW5hbmNlIHZpYSBgRXhlY0luc2VydEluZGV4VHVwbGVzKClgCi0g QUZURVIgUk9XIHRyaWdnZXIgZmlyaW5nIHZpYSBgRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoKWAKLSBg ZXNfcHJvY2Vzc2VkYCBhY2NvdW50aW5nCgpBZGQgZm9jdXNlZCByZWdyZXNzaW9uIGNvdmVyYWdl IGZvcjoKLSBiYXNpYyBidWxrIElOU0VSVCAuLi4gU0VMRUNUCi0gaW5kZXhlZCB0YXJnZXRzCi0g QUZURVIgUk9XIHRyaWdnZXIgYmVoYXZpb3IKLSBpbmRleCArIHRyaWdnZXIgY29tYmluYXRpb24K LSBmYWxsYmFjayBjYXNlcyAoT04gQ09ORkxJQ1QsIFJFVFVSTklORywgQkVGT1JFIFJPVyB0cmln Z2VyLAogIHBhcnRpdGlvbmVkIHRhcmdldCwgdm9sYXRpbGUgdGFyZ2V0IGRlZmF1bHRzKQotIHpl cm8tcm93IGluc2VydAotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5j ICAgICAgICB8IDE2NCArKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg ICAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5zZXJ0 X2J1ZmZlcmVkLm91dCB8IDI3MSArKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mv cGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgICB8ICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9z cWwvaW5zZXJ0X2J1ZmZlcmVkLnNxbCAgICAgIHwgMjA5ICsrKysrKysrKysrKysrCiA1IGZpbGVz IGNoYW5nZWQsIDY1MCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnNlcnRfYnVmZmVyZWQub3V0CiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5zZXJ0X2J1ZmZlcmVkLnNxbAoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggNGNiMDU3Y2E0ZjkuLjA2 YWYwNjM3NDA3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFi bGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAtODMs NiArODMsODUgQEAgdHlwZWRlZiBzdHJ1Y3QgTVRUYXJnZXRSZWxMb29rdXAKIAlpbnQJCQlyZWxh dGlvbkluZGV4OwkvKiByZWwncyBpbmRleCBpbiByZXN1bHRSZWxJbmZvW10gYXJyYXkgKi8KIH0g TVRUYXJnZXRSZWxMb29rdXA7CiAKKy8qCisgKiBGbHVzaCBjYWxsYmFjayBjb250ZXh0IGZvciBi dWZmZXJlZCBJTlNFUlQgSU5UTyAuLi4gU0VMRUNULgorICoKKyAqIFRoZXNlIGFyZSB0aGUgcGFy YW1ldGVycyByZXF1aXJlZCBieSB0aGUgdGhyZWUgY2FsbGJhY2sgb3BlcmF0aW9ucworICogKEV4 ZWNJbnNlcnRJbmRleFR1cGxlcywgRXhlY0FSSW5zZXJ0VHJpZ2dlcnMsIGVzX3Byb2Nlc3NlZCsr KToKKyAqCisgKiAtIGVzdGF0ZSwgcmVzdWx0UmVsSW5mbzogcmVxdWlyZWQgYnkgRXhlY0luc2Vy dEluZGV4VHVwbGVzL0V4ZWNBUkluc2VydFRyaWdnZXJzLgorICogLSB0cmFuc2l0aW9uX2NhcHR1 cmU6IDV0aCBwYXJhbWV0ZXIgb2YgRXhlY0FSSW5zZXJ0VHJpZ2dlcnM7IHRoZSBub24tYnVmZmVy ZWQKKyAqICAgcGF0aCBwYXNzZXMgbXRzdGF0ZS0+bXRfdHJhbnNpdGlvbl9jYXB0dXJlIGZvciBD TURfSU5TRVJULiAgTlVMTCB3b3VsZAorICogICBzaWxlbnRseSBicmVhayBzdGF0ZW1lbnQtbGV2 ZWwgdHJpZ2dlcnMgd2l0aCBSRUZFUkVOQ0lORyBORVcgVEFCTEUuCisgKiAtIGNhblNldFRhZzog dGhlIG5vbi1idWZmZXJlZCBwYXRoIGdhdGVzIGVzX3Byb2Nlc3NlZCsrIG9uIHRoaXMgYWZ0ZXIg dGhlCisgKiAgIGluc2VydDsgdGhlIGJ1ZmZlcmVkIHJldHVybi1OVUxMIGJ5cGFzc2VzIHRoYXQg Z2F0ZSwgc28gdGhlIGNhbGxiYWNrCisgKiAgIHJlcGxpY2F0ZXMgaXQuCisgKi8KK3R5cGVkZWYg c3RydWN0IEV4ZWNCdWZmZXJlZEluc2VydEZsdXNoU3RhdGUKK3sKKwlFU3RhdGUJICAgKmVzdGF0 ZTsKKwlSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvOworCVRyYW5zaXRpb25DYXB0dXJlU3Rh dGUgKnRyYW5zaXRpb25fY2FwdHVyZTsKKwlib29sCQljYW5TZXRUYWc7Cit9IEV4ZWNCdWZmZXJl ZEluc2VydEZsdXNoU3RhdGU7CisKKy8qCisgKiBGbHVzaCBjYWxsYmFjayBmb3IgYnVmZmVyZWQg SU5TRVJUIElOVE8gLi4uIFNFTEVDVC4KKyAqCisgKiBDYWxsZWQgb25jZSBwZXIgZmx1c2hlZCB0 dXBsZSBhZnRlciBoZWFwX211bHRpX2luc2VydCgpIGNvbXBsZXRlcyBhIGJhdGNoLgorICogUGVy Zm9ybXMgaW5kZXggbWFpbnRlbmFuY2UsIEFGVEVSIFJPVyB0cmlnZ2VyIGZpcmluZywgYW5kIHR1 cGxlIGNvdW50aW5nLgorICovCitzdGF0aWMgdm9pZAorRXhlY0J1ZmZlcmVkSW5zZXJ0Rmx1c2hD Yih2b2lkICpjb250ZXh0LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlFeGVjQnVmZmVyZWRJ bnNlcnRGbHVzaFN0YXRlICpjdHggPSAoRXhlY0J1ZmZlcmVkSW5zZXJ0Rmx1c2hTdGF0ZSAqKSBj b250ZXh0OworCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8gPSBjdHgtPnJlc3VsdFJlbElu Zm87CisJRVN0YXRlCSAgICplc3RhdGUgPSBjdHgtPmVzdGF0ZTsKKwlMaXN0CSAgICpyZWNoZWNr SW5kZXhlcyA9IE5JTDsKKworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCkK KwkJcmVjaGVja0luZGV4ZXMgPSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywg ZXN0YXRlLCAwLAorCQkJCQkJCQkJCQkgICBzbG90LCBOSUwsIE5VTEwpOworCisJRXhlY0FSSW5z ZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLCBzbG90LCByZWNoZWNrSW5kZXhlcywK KwkJCQkJCSBjdHgtPnRyYW5zaXRpb25fY2FwdHVyZSk7CisKKwlsaXN0X2ZyZWUocmVjaGVja0lu ZGV4ZXMpOworCisJaWYgKGN0eC0+Y2FuU2V0VGFnKQorCQkoZXN0YXRlLT5lc19wcm9jZXNzZWQp Kys7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIGEgcmVsYXRpb24gaGFzIHZvbGF0aWxlIGRl ZmF1bHQgZXhwcmVzc2lvbnMuCisgKgorICogQ29uc2VydmF0aXZlIHRhcmdldC1zaWRlIHJlc3Ry aWN0aW9uOiBpZiBhbnkgY29sdW1uIGRlZmF1bHQgY29udGFpbnMgYQorICogdm9sYXRpbGUgZnVu Y3Rpb24gKGV4Y2x1ZGluZyBuZXh0dmFsKSwgdGhlIGJ1ZmZlcmVkLWluc2VydCBwYXRoIGlzIG5v dCB1c2VkLgorICogVGhpcyBtaXJyb3JzIENPUFkgRlJPTSdzIHZvbGF0aWxlX2RlZmV4cHJzIGNo ZWNrLgorICovCitzdGF0aWMgYm9vbAorRXhlY1JlbEhhc1ZvbGF0aWxlRGVmYXVsdHMoUmVsYXRp b24gcmVsKQoreworCVR1cGxlQ29uc3RyICpjb25zdHIgPSBSZWxhdGlvbkdldERlc2NyKHJlbCkt PmNvbnN0cjsKKworCWlmIChjb25zdHIgPT0gTlVMTCB8fCBjb25zdHItPm51bV9kZWZ2YWwgPT0g MCkKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBjb25zdHItPm51bV9k ZWZ2YWw7IGkrKykKKwl7CisJCU5vZGUJICAgKmV4cHI7CisKKwkJaWYgKGNvbnN0ci0+ZGVmdmFs W2ldLmFkYmluID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlleHByID0gc3RyaW5nVG9Ob2Rl KGNvbnN0ci0+ZGVmdmFsW2ldLmFkYmluKTsKKworCQlpZiAoY29udGFpbl92b2xhdGlsZV9mdW5j dGlvbnNfbm90X25leHR2YWwoZXhwcikpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZh bHNlOworfQorCiAvKgogICogQ29udGV4dCBzdHJ1Y3QgZm9yIGEgTW9kaWZ5VGFibGUgb3BlcmF0 aW9uLCBjb250YWluaW5nIGJhc2ljIGV4ZWN1dGlvbgogICogc3RhdGUgYW5kIHNvbWUgb3V0cHV0 IHZhcmlhYmxlcyBwb3B1bGF0ZWQgYnkgRXhlY1VwZGF0ZUFjdCgpIGFuZApAQCAtMTI2OSw2ICsx MzQ4LDQ5IEBAIEV4ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQl9CiAJ CWVsc2UKIAkJeworCQkJLyoKKwkJCSAqIEJ1ZmZlcmVkLWluc2VydCBwYXRoOiBsYXppbHkgb3Bl biB0aGUgc2Vzc2lvbiBvbiBmaXJzdCBjYWxsLAorCQkJICogdGhlbiBzdWJtaXQgdHVwbGVzIHZp YSBwdXQoKSBpbnN0ZWFkIG9mIHNpbmdsZS1yb3cgaW5zZXJ0LgorCQkJICogUG9zdC1pbnNlcnQg d29yayAoaW5kZXhlcywgdHJpZ2dlcnMpIGZpcmVzIGluIHRoZSBmbHVzaCBjYWxsYmFjay4KKwkJ CSAqLworCQkJaWYgKG10c3RhdGUtPm10X2J1ZmZlcmVkX2luc2VydF9lbGlnaWJsZSAmJgorCQkJ CW10c3RhdGUtPm10X2JpX3N0YXRlID09IE5VTEwpCisJCQl7CisJCQkJRXhlY0J1ZmZlcmVkSW5z ZXJ0Rmx1c2hTdGF0ZSAqZmx1c2hfY3R4OworCisJCQkJZmx1c2hfY3R4ID0gcGFsbG9jKHNpemVv ZihFeGVjQnVmZmVyZWRJbnNlcnRGbHVzaFN0YXRlKSk7CisJCQkJZmx1c2hfY3R4LT5lc3RhdGUg PSBlc3RhdGU7CisJCQkJZmx1c2hfY3R4LT5yZXN1bHRSZWxJbmZvID0gcmVzdWx0UmVsSW5mbzsK KwkJCQlmbHVzaF9jdHgtPnRyYW5zaXRpb25fY2FwdHVyZSA9IG10c3RhdGUtPm10X3RyYW5zaXRp b25fY2FwdHVyZTsKKwkJCQlmbHVzaF9jdHgtPmNhblNldFRhZyA9IGNhblNldFRhZzsKKwkJCQlt dHN0YXRlLT5tdF9iaV9mbHVzaF9jdHggPSBmbHVzaF9jdHg7CisKKwkJCQltdHN0YXRlLT5tdF9i aV9zdGF0ZSA9CisJCQkJCXRhYmxlX2J1ZmZlcmVkX2luc2VydF9iZWdpbihyZXN1bHRSZWxhdGlv bkRlc2MsCisJCQkJCQkJCQkJCQllc3RhdGUtPmVzX291dHB1dF9jaWQsCisJCQkJCQkJCQkJCQlU QUJMRV9JTlNFUlRfQkFTX0JVTEtXUklURSwKKwkJCQkJCQkJCQkJCUV4ZWNCdWZmZXJlZEluc2Vy dEZsdXNoQ2IsCisJCQkJCQkJCQkJCQlmbHVzaF9jdHgpOworCQkJCWlmIChtdHN0YXRlLT5tdF9i aV9zdGF0ZSA9PSBOVUxMKQorCQkJCQltdHN0YXRlLT5tdF9idWZmZXJlZF9pbnNlcnRfZWxpZ2li bGUgPSBmYWxzZTsKKwkJCX0KKworCQkJaWYgKG10c3RhdGUtPm10X2JpX3N0YXRlICE9IE5VTEwp CisJCQl7CisJCQkJLyoKKwkJCQkgKiBQcmUtaW5zZXJ0IHZhbGlkYXRpb24gYWxyZWFkeSByYW4g aW4gdGhpcyBlbHNlLWJyYW5jaAorCQkJCSAqIGFib3ZlIHRoZSBPTiBDT05GTElDVCB0ZXN0IOKA lCBzcGVjaWZpY2FsbHk6CisJCQkJICogICB0dHNfdGFibGVPaWQgaW5pdCwgRXhlY0NvbXB1dGVT dG9yZWRHZW5lcmF0ZWQsCisJCQkJICogICBFeGVjV2l0aENoZWNrT3B0aW9ucyAoUkxTKSwgRXhl Y0NvbnN0cmFpbnRzLAorCQkJCSAqICAgRXhlY1BhcnRpdGlvbkNoZWNrLgorCQkJCSAqIFRoaXMg aW5uZXIgZWxzZS1icmFuY2ggKG5vIE9OIENPTkZMSUNUKSBpcyByZWFjaGVkIG9ubHkKKwkJCQkg KiBhZnRlciBhbGwgb2YgdGhvc2UuICBTdWJtaXQgdGhlIHZhbGlkYXRlZCB0dXBsZSB0byB0aGUK KwkJCQkgKiBBTSBidWZmZXI7IHBvc3QtaW5zZXJ0IHdvcmsgZmlyZXMgaW4gdGhlIGZsdXNoIGNh bGxiYWNrLgorCQkJCSAqLworCQkJCXRhYmxlX2J1ZmZlcmVkX2luc2VydF9wdXQobXRzdGF0ZS0+ bXRfYmlfc3RhdGUsIHNsb3QpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCiAJCQkvKiBpbnNl cnQgdGhlIHR1cGxlIG5vcm1hbGx5ICovCiAJCQl0YWJsZV90dXBsZV9pbnNlcnQocmVzdWx0UmVs YXRpb25EZXNjLCBzbG90LAogCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfb3V0cHV0X2NpZCwKQEAgLTUw MjcsNiArNTE0OSwxNSBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJaWYg KGVzdGF0ZS0+ZXNfaW5zZXJ0X3BlbmRpbmdfcmVzdWx0X3JlbGF0aW9ucyAhPSBOSUwpCiAJCUV4 ZWNQZW5kaW5nSW5zZXJ0cyhlc3RhdGUpOwogCisJLyoKKwkgKiBGbHVzaCBhbmQgY2xlYW4gdXAg YnVmZmVyZWQtaW5zZXJ0IHNlc3Npb24gaWYgYWN0aXZlLgorCSAqLworCWlmIChub2RlLT5tdF9i aV9zdGF0ZSAhPSBOVUxMKQorCXsKKwkJdGFibGVfYnVmZmVyZWRfaW5zZXJ0X2VuZChub2RlLT5t dF9iaV9zdGF0ZSk7CisJCW5vZGUtPm10X2JpX3N0YXRlID0gTlVMTDsKKwl9CisKIAkvKgogCSAq IFdlJ3JlIGRvbmUsIGJ1dCBmaXJlIEFGVEVSIFNUQVRFTUVOVCB0cmlnZ2VycyBiZWZvcmUgZXhp dGluZy4KIAkgKi8KQEAgLTU3NzMsNiArNTkwNCwzMCBAQCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1v ZGlmeVRhYmxlICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCXJlc3VsdFJl bEluZm8tPnJpX0JhdGNoU2l6ZSA9IDE7CiAJfQogCisJLyoKKwkgKiBGb3IgQ01EX0lOU0VSVCB3 aXRob3V0IE9OIENPTkZMSUNUL1JFVFVSTklORy9wYXJ0aXRpb25pbmcvQkVGT1JFIFJPVworCSAq IHRyaWdnZXJzLCBkZXRlcm1pbmUgaWYgdGhlIHJlc3RyaWN0ZWQgYnVmZmVyZWQtaW5zZXJ0IHBh dGggaXMgZWxpZ2libGUuCisJICogQU0gc3VwcG9ydCBpcyByZXNvbHZlZCBsYXppbHkgYXQgZmly c3QgRXhlY0luc2VydCgpIGNhbGwuCisJICovCisJaWYgKG9wZXJhdGlvbiA9PSBDTURfSU5TRVJU KQorCXsKKwkJTW9kaWZ5VGFibGUgKm10bm9kZSA9IChNb2RpZnlUYWJsZSAqKSBtdHN0YXRlLT5w cy5wbGFuOworCisJCXJlc3VsdFJlbEluZm8gPSBtdHN0YXRlLT5yZXN1bHRSZWxJbmZvOworCQlt dHN0YXRlLT5tdF9idWZmZXJlZF9pbnNlcnRfZWxpZ2libGUgPQorCQkJKG10bm9kZS0+b25Db25m bGljdEFjdGlvbiA9PSBPTkNPTkZMSUNUX05PTkUgJiYKKwkJCSByZXN1bHRSZWxJbmZvLT5yaV9w cm9qZWN0UmV0dXJuaW5nID09IE5VTEwgJiYKKwkJCSByZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlv bkRlc2MtPnJkX3JlbC0+cmVsa2luZCAhPQorCQkJIFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUg JiYKKwkJCSAhKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICYmCisJCQkgICByZXN1bHRSZWxJ bmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYmVmb3JlX3JvdykgJiYKKwkJCSAhKHJlc3Vs dFJlbEluZm8tPnJpX1RyaWdEZXNjICYmCisJCQkgICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVz Yy0+dHJpZ19pbnNlcnRfaW5zdGVhZF9yb3cpICYmCisJCQkgcmVzdWx0UmVsSW5mby0+cmlfRmR3 Um91dGluZSA9PSBOVUxMICYmCisJCQkgbXRzdGF0ZS0+b3BlcmF0aW9uID09IENNRF9JTlNFUlQg JiYKKwkJCSAhRXhlY1JlbEhhc1ZvbGF0aWxlRGVmYXVsdHMocmVzdWx0UmVsSW5mby0+cmlfUmVs YXRpb25EZXNjKSk7CisJfQorCiAJLyoKIAkgKiBMYXN0bHksIGlmIHRoaXMgaXMgbm90IHRoZSBw cmltYXJ5IChjYW5TZXRUYWcpIE1vZGlmeVRhYmxlIG5vZGUsIGFkZCBpdAogCSAqIHRvIGVzdGF0 ZS0+ZXNfYXV4bW9kaWZ5dGFibGVzIHNvIHRoYXQgaXQgd2lsbCBiZSBydW4gdG8gY29tcGxldGlv biBieQpAQCAtNTgwMiw2ICs1OTU3LDE1IEBAIEV4ZWNFbmRNb2RpZnlUYWJsZShNb2RpZnlUYWJs ZVN0YXRlICpub2RlKQogewogCWludAkJCWk7CiAKKwkvKgorCSAqIERlZmVuc2l2ZTogY2xlYW4g dXAgYnVmZmVyZWQtaW5zZXJ0IGlmIGVuZCgpIHdhcyBub3QgcmVhY2hlZCBhYm92ZS4KKwkgKi8K KwlpZiAobm9kZS0+bXRfYmlfc3RhdGUgIT0gTlVMTCkKKwl7CisJCXRhYmxlX2J1ZmZlcmVkX2lu c2VydF9lbmQobm9kZS0+bXRfYmlfc3RhdGUpOworCQlub2RlLT5tdF9iaV9zdGF0ZSA9IE5VTEw7 CisJfQorCiAJLyoKIAkgKiBBbGxvdyBhbnkgRkRXcyB0byBzaHV0IGRvd24KIAkgKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKaW5kZXggMTMzNTkxODBkMjUuLjc3OTBiYjBiYTM4IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaApAQCAtMTUwOCw2ICsxNTA4LDExIEBAIHR5cGVkZWYgc3RydWN0IE1vZGlmeVRhYmxl U3RhdGUKIAlMaXN0CSAgICptdF91cGRhdGVDb2xub3NMaXN0czsKIAlMaXN0CSAgICptdF9tZXJn ZUFjdGlvbkxpc3RzOwogCUxpc3QJICAgKm10X21lcmdlSm9pbkNvbmRpdGlvbnM7CisKKwkvKiBC dWZmZXJlZC1pbnNlcnQgc3RhdGUgZm9yIHJlc3RyaWN0ZWQgSU5TRVJUIElOVE8gLi4uIFNFTEVD VCAqLworCWJvb2wJCW10X2J1ZmZlcmVkX2luc2VydF9lbGlnaWJsZTsKKwlzdHJ1Y3QgVGFibGVC dWZmZXJlZEluc2VydFN0YXRlRGF0YSAqbXRfYmlfc3RhdGU7CisJdm9pZAkgICAqbXRfYmlfZmx1 c2hfY3R4OwkvKiBwcml2YXRlIHRvIG5vZGVNb2RpZnlUYWJsZS5jICovCiB9IE1vZGlmeVRhYmxl U3RhdGU7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvaW5zZXJ0X2J1ZmZlcmVkLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvaW5zZXJ0X2J1ZmZlcmVkLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uM2VlNDNhZThiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2luc2VydF9idWZmZXJlZC5vdXQKQEAgLTAsMCArMSwyNzEgQEAKKy0tCistLSBUZXN0 cyBmb3IgYnVmZmVyZWQtaW5zZXJ0IGFkb3B0aW9uIGluIElOU0VSVCBJTlRPIC4uLiBTRUxFQ1Qg KFBhdGNoIDAwMDUpLgorLS0gUmVzdHJpY3RlZCBmaXJzdCBzdGVwOiBub24tcGFydGl0aW9uZWQg aGVhcCB0YXJnZXQsIG5vIE9OIENPTkZMSUNULAorLS0gbm8gUkVUVVJOSU5HLCBubyBCRUZPUkUg Uk9XIHRyaWdnZXJzLgorLS0KKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVDE6IEJhc2ljIGJ1bGsgaW5zZXJ0IChleGVy Y2lzZXMgbXVsdGlwbGUgYXV0by1mbHVzaCBjeWNsZXMpCistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSBi aV90YXJnZXRfYmFzaWMgKGlkIGludCwgdmFsIHRleHQpOworSU5TRVJUIElOVE8gYmlfdGFyZ2V0 X2Jhc2ljCitTRUxFQ1QgZywgJ3Jvdy0nIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAw MCkgZzsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJpX3RhcmdldF9iYXNpYzsKKyBjb3VudCAKKy0t LS0tLS0KKyAgMjAwMAorKDEgcm93KQorCitTRUxFQ1QgbWluKGlkKSwgbWF4KGlkKSBGUk9NIGJp X3RhcmdldF9iYXNpYzsKKyBtaW4gfCBtYXggIAorLS0tLS0rLS0tLS0tCisgICAxIHwgMjAwMAor KDEgcm93KQorCitEUk9QIFRBQkxFIGJpX3RhcmdldF9iYXNpYzsKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVDI6IElu ZGV4ZWQgdGFyZ2V0CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSBiaV90YXJnZXRfaWR4IChpZCBpbnQs IHZhbCB0ZXh0KTsKK0NSRUFURSBJTkRFWCBiaV90YXJnZXRfaWR4X2lkIE9OIGJpX3RhcmdldF9p ZHggKGlkKTsKK0lOU0VSVCBJTlRPIGJpX3RhcmdldF9pZHgKK1NFTEVDVCBnLCAncm93LScgfHwg ZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDApIGc7CitTRUxFQ1QgY291bnQoKikgRlJPTSBi aV90YXJnZXRfaWR4OworIGNvdW50IAorLS0tLS0tLQorICAgNTAwCisoMSByb3cpCisKKy0tIFZl cmlmeSBpbmRleCBpcyB1c2FibGUgYW5kIGNvcnJlY3QKK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9m ZjsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJpX3RhcmdldF9pZHggV0hFUkUgaWQgQkVUV0VFTiAx IEFORCA1MDA7CisgY291bnQgCistLS0tLS0tCisgICA1MDAKKygxIHJvdykKKworUkVTRVQgZW5h YmxlX3NlcXNjYW47CitEUk9QIFRBQkxFIGJpX3RhcmdldF9pZHg7CistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFQzOiBB RlRFUiBST1cgdHJpZ2dlcgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgYmlfdGFyZ2V0X3RyaWcgKGlk IGludCwgdmFsIHRleHQpOworQ1JFQVRFIFRBQkxFIGJpX2F1ZGl0IChpZCBpbnQsIHZhbCB0ZXh0 LCBsb2dnZWRfYXQgdGltZXN0YW1wIERFRkFVTFQgbm93KCkpOworQ1JFQVRFIEZVTkNUSU9OIGJp X2F1ZGl0X2ZuKCkgUkVUVVJOUyB0cmlnZ2VyCitMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitCRUdJ TgorICAgIElOU0VSVCBJTlRPIGJpX2F1ZGl0IChpZCwgdmFsKSBWQUxVRVMgKE5FVy5pZCwgTkVX LnZhbCk7CisgICAgUkVUVVJOIE5FVzsKK0VORDsKKyQkOworQ1JFQVRFIFRSSUdHRVIgYmlfdGFy Z2V0X3RyaWdfYWZ0ZXIKKyAgICBBRlRFUiBJTlNFUlQgT04gYmlfdGFyZ2V0X3RyaWcKKyAgICBG T1IgRUFDSCBST1cgRVhFQ1VURSBGVU5DVElPTiBiaV9hdWRpdF9mbigpOworSU5TRVJUIElOVE8g YmlfdGFyZ2V0X3RyaWcKK1NFTEVDVCBnLCAncm93LScgfHwgZyBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCA1MCkgZzsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJpX3RhcmdldF90cmlnOworIGNvdW50 IAorLS0tLS0tLQorICAgIDUwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJpX2F1 ZGl0OworIGNvdW50IAorLS0tLS0tLQorICAgIDUwCisoMSByb3cpCisKKy0tIFZlcmlmeSBpbnNl cnRpb24gb3JkZXIgaXMgcHJlc2VydmVkCitTRUxFQ1QgYm9vbF9hbmQodC5pZCA9IGEuaWQpIEFT IG9yZGVyX3ByZXNlcnZlZAorRlJPTSAoU0VMRUNUIGlkLCByb3dfbnVtYmVyKCkgT1ZFUiAoT1JE RVIgQlkgY3RpZCkgQVMgcm4gRlJPTSBiaV90YXJnZXRfdHJpZykgdAorSk9JTiAoU0VMRUNUIGlk LCByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgY3RpZCkgQVMgcm4gRlJPTSBiaV9hdWRpdCkg YQorT04gdC5ybiA9IGEucm47Cisgb3JkZXJfcHJlc2VydmVkIAorLS0tLS0tLS0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgYmlfdGFyZ2V0X3RyaWcgQ0FTQ0FERTsKK0RST1Ag VEFCTEUgYmlfYXVkaXQ7CitEUk9QIEZVTkNUSU9OIGJpX2F1ZGl0X2ZuOworLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBU NDogSW5kZXggKyBBRlRFUiBST1cgdHJpZ2dlciBjb21iaW5lZAorLS0gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFC TEUgYmlfdGFyZ2V0X2NvbWJvIChpZCBpbnQsIHZhbCB0ZXh0KTsKK0NSRUFURSBJTkRFWCBiaV90 YXJnZXRfY29tYm9faWQgT04gYmlfdGFyZ2V0X2NvbWJvIChpZCk7CitDUkVBVEUgVEFCTEUgYmlf YXVkaXRfY29tYm8gKGlkIGludCwgdmFsIHRleHQpOworQ1JFQVRFIEZVTkNUSU9OIGJpX2F1ZGl0 X2NvbWJvX2ZuKCkgUkVUVVJOUyB0cmlnZ2VyCitMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitCRUdJ TgorICAgIElOU0VSVCBJTlRPIGJpX2F1ZGl0X2NvbWJvIChpZCwgdmFsKSBWQUxVRVMgKE5FVy5p ZCwgTkVXLnZhbCk7CisgICAgUkVUVVJOIE5FVzsKK0VORDsKKyQkOworQ1JFQVRFIFRSSUdHRVIg YmlfdGFyZ2V0X2NvbWJvX2FmdGVyCisgICAgQUZURVIgSU5TRVJUIE9OIGJpX3RhcmdldF9jb21i bworICAgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIGJpX2F1ZGl0X2NvbWJvX2ZuKCk7 CitJTlNFUlQgSU5UTyBiaV90YXJnZXRfY29tYm8KK1NFTEVDVCBnLCAncm93LScgfHwgZyBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGc7CitTRUxFQ1QgY291bnQoKikgRlJPTSBiaV90YXJn ZXRfY29tYm87CisgY291bnQgCistLS0tLS0tCisgICAxMDAKKygxIHJvdykKKworU0VMRUNUIGNv dW50KCopIEZST00gYmlfYXVkaXRfY29tYm87CisgY291bnQgCistLS0tLS0tCisgICAxMDAKKygx IHJvdykKKworLS0gVmVyaWZ5IGluZGV4IGNvcnJlY3RuZXNzCitTRVQgZW5hYmxlX3NlcXNjYW4g PSBvZmY7CitTRUxFQ1QgY291bnQoKikgRlJPTSBiaV90YXJnZXRfY29tYm8gV0hFUkUgaWQgQkVU V0VFTiAxIEFORCAxMDA7CisgY291bnQgCistLS0tLS0tCisgICAxMDAKKygxIHJvdykKKworUkVT RVQgZW5hYmxlX3NlcXNjYW47CitEUk9QIFRBQkxFIGJpX3RhcmdldF9jb21ibyBDQVNDQURFOwor RFJPUCBUQUJMRSBiaV9hdWRpdF9jb21ibzsKK0RST1AgRlVOQ1RJT04gYmlfYXVkaXRfY29tYm9f Zm47CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKy0tIFQ1OiBPTiBDT05GTElDVCBmYWxsYmFjayAodXNlcyBub24tYnVmZmVy ZWQgcGF0aCkKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIGJpX3RhcmdldF9jb25mbGljdCAoaWQgaW50 IFBSSU1BUlkgS0VZLCB2YWwgdGV4dCk7CitJTlNFUlQgSU5UTyBiaV90YXJnZXRfY29uZmxpY3Qg VkFMVUVTICgxLCAnZXhpc3RpbmcnKTsKK0lOU0VSVCBJTlRPIGJpX3RhcmdldF9jb25mbGljdAor U0VMRUNUIGcsICdyb3ctJyB8fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKSBnCitPTiBD T05GTElDVCAoaWQpIERPIE5PVEhJTkc7CitTRUxFQ1QgY291bnQoKikgRlJPTSBiaV90YXJnZXRf Y29uZmxpY3Q7CisgY291bnQgCistLS0tLS0tCisgICAgMTAKKygxIHJvdykKKworU0VMRUNUIHZh bCBGUk9NIGJpX3RhcmdldF9jb25mbGljdCBXSEVSRSBpZCA9IDE7CisgICB2YWwgICAgCistLS0t LS0tLS0tCisgZXhpc3RpbmcKKygxIHJvdykKKworRFJPUCBUQUJMRSBiaV90YXJnZXRfY29uZmxp Y3Q7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKy0tIFQ2OiBSRVRVUk5JTkcgZmFsbGJhY2sgKHVzZXMgbm9uLWJ1ZmZlcmVk IHBhdGgpCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSBiaV90YXJnZXRfcmV0IChpZCBpbnQsIHZhbCB0 ZXh0KTsKK0lOU0VSVCBJTlRPIGJpX3RhcmdldF9yZXQKK1NFTEVDVCBnLCAncm93LScgfHwgZyBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAzKSBnCitSRVRVUk5JTkcgaWQsIHZhbDsKKyBpZCB8ICB2 YWwgIAorLS0tLSstLS0tLS0tCisgIDEgfCByb3ctMQorICAyIHwgcm93LTIKKyAgMyB8IHJvdy0z CisoMyByb3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJPTSBiaV90YXJnZXRfcmV0OworIGNvdW50 IAorLS0tLS0tLQorICAgICAzCisoMSByb3cpCisKK0RST1AgVEFCTEUgYmlfdGFyZ2V0X3JldDsK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gVDc6IEJFRk9SRSBST1cgdHJpZ2dlciBmYWxsYmFjayAodXNlcyBub24tYnVm ZmVyZWQgcGF0aCkKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIGJpX3RhcmdldF9iciAoaWQgaW50LCB2 YWwgdGV4dCk7CitDUkVBVEUgRlVOQ1RJT04gYmlfYnJfZm4oKSBSRVRVUk5TIHRyaWdnZXIKK0xB TkdVQUdFIHBscGdzcWwgQVMgJCQKK0JFR0lOCisgICAgTkVXLnZhbCA6PSBORVcudmFsIHx8ICct bW9kaWZpZWQnOworICAgIFJFVFVSTiBORVc7CitFTkQ7CiskJDsKK0NSRUFURSBUUklHR0VSIGJp X3RhcmdldF9icl9iZWZvcmUKKyAgICBCRUZPUkUgSU5TRVJUIE9OIGJpX3RhcmdldF9icgorICAg IEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIGJpX2JyX2ZuKCk7CitJTlNFUlQgSU5UTyBi aV90YXJnZXRfYnIKK1NFTEVDVCBnLCAncm93LScgfHwgZyBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCA1KSBnOworU0VMRUNUIGNvdW50KCopIEZST00gYmlfdGFyZ2V0X2JyOworIGNvdW50IAorLS0t LS0tLQorICAgICA1CisoMSByb3cpCisKK1NFTEVDVCB2YWwgRlJPTSBiaV90YXJnZXRfYnIgV0hF UkUgaWQgPSAxOworICAgICAgdmFsICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLQorIHJvdy0xLW1v ZGlmaWVkCisoMSByb3cpCisKK0RST1AgVEFCTEUgYmlfdGFyZ2V0X2JyOworRFJPUCBGVU5DVElP TiBiaV9icl9mbjsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorLS0gVDg6IFBhcnRpdGlvbmVkIHRhcmdldCBmYWxsYmFjayAo dXNlcyBub24tYnVmZmVyZWQgcGF0aCkKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIGJpX3RhcmdldF9w YXJ0IChpZCBpbnQsIHZhbCB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBU QUJMRSBiaV90YXJnZXRfcGFydF8xIFBBUlRJVElPTiBPRiBiaV90YXJnZXRfcGFydCBGT1IgVkFM VUVTIEZST00gKDEpIFRPICg1MDEpOworQ1JFQVRFIFRBQkxFIGJpX3RhcmdldF9wYXJ0XzIgUEFS VElUSU9OIE9GIGJpX3RhcmdldF9wYXJ0IEZPUiBWQUxVRVMgRlJPTSAoNTAxKSBUTyAoMTAwMSk7 CitJTlNFUlQgSU5UTyBiaV90YXJnZXRfcGFydAorU0VMRUNUIGcsICdyb3ctJyB8fCBnIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitTRUxFQ1QgY291bnQoKikgRlJPTSBiaV90YXJn ZXRfcGFydDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgMTAwMAorKDEgcm93KQorCitTRUxFQ1QgY291 bnQoKikgRlJPTSBiaV90YXJnZXRfcGFydF8xOworIGNvdW50IAorLS0tLS0tLQorICAgNTAwCiso MSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJpX3RhcmdldF9wYXJ0XzI7CisgY291bnQg CistLS0tLS0tCisgICA1MDAKKygxIHJvdykKKworRFJPUCBUQUJMRSBiaV90YXJnZXRfcGFydDsK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gVDk6IFZvbGF0aWxlIHRhcmdldC1kZWZhdWx0IGZhbGxiYWNrCistLSBFeHBl Y3RlZCB0byBmYWxsIGJhY2sgdG8gbm9uLWJ1ZmZlcmVkIHBhdGggdW5kZXIgRTguCistLSBUZXN0 IHZhbGlkYXRlcyBjb3JyZWN0bmVzczsgcGF0aCBzZWxlY3Rpb24gaXMgbm90IG9ic2VydmFibGUK Ky0tIGZyb20gU1FMIG91dHB1dC4KKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIGJpX3RhcmdldF92b2xh dGlsZSAoCisgICAgaWQgaW50LAorICAgIHZhbCB0ZXh0LAorICAgIHJhbmRfdmFsIGRvdWJsZSBw cmVjaXNpb24gREVGQVVMVCByYW5kb20oKQorKTsKK0lOU0VSVCBJTlRPIGJpX3RhcmdldF92b2xh dGlsZSAoaWQsIHZhbCkKK1NFTEVDVCBnLCAncm93LScgfHwgZyBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCA1KSBnOworU0VMRUNUIGNvdW50KCopIEZST00gYmlfdGFyZ2V0X3ZvbGF0aWxlOworIGNv dW50IAorLS0tLS0tLQorICAgICA1CisoMSByb3cpCisKKy0tIFZlcmlmeSB0aGUgdm9sYXRpbGUg ZGVmYXVsdCB3YXMgZXZhbHVhdGVkIChhbGwgdmFsdWVzIHNob3VsZCBiZSBkaXN0aW5jdCkKK1NF TEVDVCBjb3VudChESVNUSU5DVCByYW5kX3ZhbCkgPSBjb3VudCgqKSBBUyBhbGxfZGlzdGluY3QK K0ZST00gYmlfdGFyZ2V0X3ZvbGF0aWxlOworIGFsbF9kaXN0aW5jdCAKKy0tLS0tLS0tLS0tLS0t CisgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIGJpX3RhcmdldF92b2xhdGlsZTsKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor LS0gVDEwOiBaZXJvLXJvdyBpbnNlcnQKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIGJpX3RhcmdldF96 ZXJvIChpZCBpbnQsIHZhbCB0ZXh0KTsKK0lOU0VSVCBJTlRPIGJpX3RhcmdldF96ZXJvCitTRUxF Q1QgZywgJ3Jvdy0nIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBnIFdIRVJFIGZh bHNlOworU0VMRUNUIGNvdW50KCopIEZST00gYmlfdGFyZ2V0X3plcm87CisgY291bnQgCistLS0t LS0tCisgICAgIDAKKygxIHJvdykKKworRFJPUCBUQUJMRSBiaV90YXJnZXRfemVybzsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDVkNGY5MTAxNTVlLi5hZTYzYzNkZDczYyAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0zNiw3ICszNiw3IEBAIHRlc3Q6IGdlb21l dHJ5IGhvcm9sb2d5IHRzdHlwZXMgcmVnZXggdHlwZV9zYW5pdHkgb3ByX3Nhbml0eSBtaXNjX3Nh bml0eSBjb21tZW50CiAjIGV4ZWN1dGUgdHdvIGNvcHkgdGVzdHMgaW4gcGFyYWxsZWwsIHRvIGNo ZWNrIHRoYXQgY29weSBpdHNlbGYKICMgaXMgY29uY3VycmVudCBzYWZlLgogIyAtLS0tLS0tLS0t Ci10ZXN0OiBjb3B5IGNvcHlzZWxlY3QgY29weWRtbCBjb3B5ZW5jb2RpbmcgaW5zZXJ0IGluc2Vy dF9jb25mbGljdAordGVzdDogY29weSBjb3B5c2VsZWN0IGNvcHlkbWwgY29weWVuY29kaW5nIGlu c2VydCBpbnNlcnRfY29uZmxpY3QgaW5zZXJ0X2J1ZmZlcmVkCiAKICMgLS0tLS0tLS0tLQogIyBN b3JlIGdyb3VwcyBvZiBwYXJhbGxlbCB0ZXN0cwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvaW5zZXJ0X2J1ZmZlcmVkLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2luc2VydF9i dWZmZXJlZC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJjYTZm MzUyNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5zZXJ0X2J1 ZmZlcmVkLnNxbApAQCAtMCwwICsxLDIwOSBAQAorLS0KKy0tIFRlc3RzIGZvciBidWZmZXJlZC1p bnNlcnQgYWRvcHRpb24gaW4gSU5TRVJUIElOVE8gLi4uIFNFTEVDVCAoUGF0Y2ggMDAwNSkuCist LSBSZXN0cmljdGVkIGZpcnN0IHN0ZXA6IG5vbi1wYXJ0aXRpb25lZCBoZWFwIHRhcmdldCwgbm8g T04gQ09ORkxJQ1QsCistLSBubyBSRVRVUk5JTkcsIG5vIEJFRk9SRSBST1cgdHJpZ2dlcnMuCist LQorCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKy0tIFQxOiBCYXNpYyBidWxrIGluc2VydCAoZXhlcmNpc2VzIG11bHRpcGxl IGF1dG8tZmx1c2ggY3ljbGVzKQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgYmlfdGFyZ2V0X2Jhc2lj IChpZCBpbnQsIHZhbCB0ZXh0KTsKKworSU5TRVJUIElOVE8gYmlfdGFyZ2V0X2Jhc2ljCitTRUxF Q1QgZywgJ3Jvdy0nIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMCkgZzsKKworU0VM RUNUIGNvdW50KCopIEZST00gYmlfdGFyZ2V0X2Jhc2ljOworU0VMRUNUIG1pbihpZCksIG1heChp ZCkgRlJPTSBiaV90YXJnZXRfYmFzaWM7CisKK0RST1AgVEFCTEUgYmlfdGFyZ2V0X2Jhc2ljOwor CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKy0tIFQyOiBJbmRleGVkIHRhcmdldAorLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgYmlf dGFyZ2V0X2lkeCAoaWQgaW50LCB2YWwgdGV4dCk7CitDUkVBVEUgSU5ERVggYmlfdGFyZ2V0X2lk eF9pZCBPTiBiaV90YXJnZXRfaWR4IChpZCk7CisKK0lOU0VSVCBJTlRPIGJpX3RhcmdldF9pZHgK K1NFTEVDVCBnLCAncm93LScgfHwgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDApIGc7CisK K1NFTEVDVCBjb3VudCgqKSBGUk9NIGJpX3RhcmdldF9pZHg7CisKKy0tIFZlcmlmeSBpbmRleCBp cyB1c2FibGUgYW5kIGNvcnJlY3QKK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGJpX3RhcmdldF9pZHggV0hFUkUgaWQgQkVUV0VFTiAxIEFORCA1MDA7CitS RVNFVCBlbmFibGVfc2Vxc2NhbjsKKworRFJPUCBUQUJMRSBiaV90YXJnZXRfaWR4OworCistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIFQzOiBBRlRFUiBST1cgdHJpZ2dlcgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgYmlfdGFy Z2V0X3RyaWcgKGlkIGludCwgdmFsIHRleHQpOworQ1JFQVRFIFRBQkxFIGJpX2F1ZGl0IChpZCBp bnQsIHZhbCB0ZXh0LCBsb2dnZWRfYXQgdGltZXN0YW1wIERFRkFVTFQgbm93KCkpOworCitDUkVB VEUgRlVOQ1RJT04gYmlfYXVkaXRfZm4oKSBSRVRVUk5TIHRyaWdnZXIKK0xBTkdVQUdFIHBscGdz cWwgQVMgJCQKK0JFR0lOCisgICAgSU5TRVJUIElOVE8gYmlfYXVkaXQgKGlkLCB2YWwpIFZBTFVF UyAoTkVXLmlkLCBORVcudmFsKTsKKyAgICBSRVRVUk4gTkVXOworRU5EOworJCQ7CisKK0NSRUFU RSBUUklHR0VSIGJpX3RhcmdldF90cmlnX2FmdGVyCisgICAgQUZURVIgSU5TRVJUIE9OIGJpX3Rh cmdldF90cmlnCisgICAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gYmlfYXVkaXRfZm4o KTsKKworSU5TRVJUIElOVE8gYmlfdGFyZ2V0X3RyaWcKK1NFTEVDVCBnLCAncm93LScgfHwgZyBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MCkgZzsKKworU0VMRUNUIGNvdW50KCopIEZST00gYmlf dGFyZ2V0X3RyaWc7CitTRUxFQ1QgY291bnQoKikgRlJPTSBiaV9hdWRpdDsKKworLS0gVmVyaWZ5 IGluc2VydGlvbiBvcmRlciBpcyBwcmVzZXJ2ZWQKK1NFTEVDVCBib29sX2FuZCh0LmlkID0gYS5p ZCkgQVMgb3JkZXJfcHJlc2VydmVkCitGUk9NIChTRUxFQ1QgaWQsIHJvd19udW1iZXIoKSBPVkVS IChPUkRFUiBCWSBjdGlkKSBBUyBybiBGUk9NIGJpX3RhcmdldF90cmlnKSB0CitKT0lOIChTRUxF Q1QgaWQsIHJvd19udW1iZXIoKSBPVkVSIChPUkRFUiBCWSBjdGlkKSBBUyBybiBGUk9NIGJpX2F1 ZGl0KSBhCitPTiB0LnJuID0gYS5ybjsKKworRFJPUCBUQUJMRSBiaV90YXJnZXRfdHJpZyBDQVND QURFOworRFJPUCBUQUJMRSBiaV9hdWRpdDsKK0RST1AgRlVOQ1RJT04gYmlfYXVkaXRfZm47CisK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gVDQ6IEluZGV4ICsgQUZURVIgUk9XIHRyaWdnZXIgY29tYmluZWQKKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorQ1JFQVRFIFRBQkxFIGJpX3RhcmdldF9jb21ibyAoaWQgaW50LCB2YWwgdGV4dCk7CitDUkVB VEUgSU5ERVggYmlfdGFyZ2V0X2NvbWJvX2lkIE9OIGJpX3RhcmdldF9jb21ibyAoaWQpOworQ1JF QVRFIFRBQkxFIGJpX2F1ZGl0X2NvbWJvIChpZCBpbnQsIHZhbCB0ZXh0KTsKKworQ1JFQVRFIEZV TkNUSU9OIGJpX2F1ZGl0X2NvbWJvX2ZuKCkgUkVUVVJOUyB0cmlnZ2VyCitMQU5HVUFHRSBwbHBn c3FsIEFTICQkCitCRUdJTgorICAgIElOU0VSVCBJTlRPIGJpX2F1ZGl0X2NvbWJvIChpZCwgdmFs KSBWQUxVRVMgKE5FVy5pZCwgTkVXLnZhbCk7CisgICAgUkVUVVJOIE5FVzsKK0VORDsKKyQkOwor CitDUkVBVEUgVFJJR0dFUiBiaV90YXJnZXRfY29tYm9fYWZ0ZXIKKyAgICBBRlRFUiBJTlNFUlQg T04gYmlfdGFyZ2V0X2NvbWJvCisgICAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gYmlf YXVkaXRfY29tYm9fZm4oKTsKKworSU5TRVJUIElOVE8gYmlfdGFyZ2V0X2NvbWJvCitTRUxFQ1Qg ZywgJ3Jvdy0nIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBnOworCitTRUxFQ1Qg Y291bnQoKikgRlJPTSBiaV90YXJnZXRfY29tYm87CitTRUxFQ1QgY291bnQoKikgRlJPTSBiaV9h dWRpdF9jb21ibzsKKworLS0gVmVyaWZ5IGluZGV4IGNvcnJlY3RuZXNzCitTRVQgZW5hYmxlX3Nl cXNjYW4gPSBvZmY7CitTRUxFQ1QgY291bnQoKikgRlJPTSBiaV90YXJnZXRfY29tYm8gV0hFUkUg aWQgQkVUV0VFTiAxIEFORCAxMDA7CitSRVNFVCBlbmFibGVfc2Vxc2NhbjsKKworRFJPUCBUQUJM RSBiaV90YXJnZXRfY29tYm8gQ0FTQ0FERTsKK0RST1AgVEFCTEUgYmlfYXVkaXRfY29tYm87CitE Uk9QIEZVTkNUSU9OIGJpX2F1ZGl0X2NvbWJvX2ZuOworCistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFQ1OiBPTiBDT05G TElDVCBmYWxsYmFjayAodXNlcyBub24tYnVmZmVyZWQgcGF0aCkKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRB QkxFIGJpX3RhcmdldF9jb25mbGljdCAoaWQgaW50IFBSSU1BUlkgS0VZLCB2YWwgdGV4dCk7CisK K0lOU0VSVCBJTlRPIGJpX3RhcmdldF9jb25mbGljdCBWQUxVRVMgKDEsICdleGlzdGluZycpOwor CitJTlNFUlQgSU5UTyBiaV90YXJnZXRfY29uZmxpY3QKK1NFTEVDVCBnLCAncm93LScgfHwgZyBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgZworT04gQ09ORkxJQ1QgKGlkKSBETyBOT1RISU5H OworCitTRUxFQ1QgY291bnQoKikgRlJPTSBiaV90YXJnZXRfY29uZmxpY3Q7CitTRUxFQ1QgdmFs IEZST00gYmlfdGFyZ2V0X2NvbmZsaWN0IFdIRVJFIGlkID0gMTsKKworRFJPUCBUQUJMRSBiaV90 YXJnZXRfY29uZmxpY3Q7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVDY6IFJFVFVSTklORyBmYWxsYmFjayAodXNl cyBub24tYnVmZmVyZWQgcGF0aCkKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIGJpX3RhcmdldF9yZXQg KGlkIGludCwgdmFsIHRleHQpOworCitJTlNFUlQgSU5UTyBiaV90YXJnZXRfcmV0CitTRUxFQ1Qg ZywgJ3Jvdy0nIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgZworUkVUVVJOSU5HIGlk LCB2YWw7CisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJpX3RhcmdldF9yZXQ7CisKK0RST1AgVEFC TEUgYmlfdGFyZ2V0X3JldDsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUNzogQkVGT1JFIFJPVyB0cmlnZ2VyIGZh bGxiYWNrICh1c2VzIG5vbi1idWZmZXJlZCBwYXRoKQorLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgYmlf dGFyZ2V0X2JyIChpZCBpbnQsIHZhbCB0ZXh0KTsKKworQ1JFQVRFIEZVTkNUSU9OIGJpX2JyX2Zu KCkgUkVUVVJOUyB0cmlnZ2VyCitMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitCRUdJTgorICAgIE5F Vy52YWwgOj0gTkVXLnZhbCB8fCAnLW1vZGlmaWVkJzsKKyAgICBSRVRVUk4gTkVXOworRU5EOwor JCQ7CisKK0NSRUFURSBUUklHR0VSIGJpX3RhcmdldF9icl9iZWZvcmUKKyAgICBCRUZPUkUgSU5T RVJUIE9OIGJpX3RhcmdldF9icgorICAgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIGJp X2JyX2ZuKCk7CisKK0lOU0VSVCBJTlRPIGJpX3RhcmdldF9icgorU0VMRUNUIGcsICdyb3ctJyB8 fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUpIGc7CisKK1NFTEVDVCBjb3VudCgqKSBGUk9N IGJpX3RhcmdldF9icjsKK1NFTEVDVCB2YWwgRlJPTSBiaV90YXJnZXRfYnIgV0hFUkUgaWQgPSAx OworCitEUk9QIFRBQkxFIGJpX3RhcmdldF9icjsKK0RST1AgRlVOQ1RJT04gYmlfYnJfZm47CisK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gVDg6IFBhcnRpdGlvbmVkIHRhcmdldCBmYWxsYmFjayAodXNlcyBub24tYnVm ZmVyZWQgcGF0aCkKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIGJpX3RhcmdldF9wYXJ0IChpZCBpbnQs IHZhbCB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBiaV90YXJn ZXRfcGFydF8xIFBBUlRJVElPTiBPRiBiaV90YXJnZXRfcGFydCBGT1IgVkFMVUVTIEZST00gKDEp IFRPICg1MDEpOworQ1JFQVRFIFRBQkxFIGJpX3RhcmdldF9wYXJ0XzIgUEFSVElUSU9OIE9GIGJp X3RhcmdldF9wYXJ0IEZPUiBWQUxVRVMgRlJPTSAoNTAxKSBUTyAoMTAwMSk7CisKK0lOU0VSVCBJ TlRPIGJpX3RhcmdldF9wYXJ0CitTRUxFQ1QgZywgJ3Jvdy0nIHx8IGcgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTAwMCkgZzsKKworU0VMRUNUIGNvdW50KCopIEZST00gYmlfdGFyZ2V0X3BhcnQ7 CitTRUxFQ1QgY291bnQoKikgRlJPTSBiaV90YXJnZXRfcGFydF8xOworU0VMRUNUIGNvdW50KCop IEZST00gYmlfdGFyZ2V0X3BhcnRfMjsKKworRFJPUCBUQUJMRSBiaV90YXJnZXRfcGFydDsKKwor LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLSBUOTogVm9sYXRpbGUgdGFyZ2V0LWRlZmF1bHQgZmFsbGJhY2sKKy0tIEV4cGVj dGVkIHRvIGZhbGwgYmFjayB0byBub24tYnVmZmVyZWQgcGF0aCB1bmRlciBFOC4KKy0tIFRlc3Qg dmFsaWRhdGVzIGNvcnJlY3RuZXNzOyBwYXRoIHNlbGVjdGlvbiBpcyBub3Qgb2JzZXJ2YWJsZQor LS0gZnJvbSBTUUwgb3V0cHV0LgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgYmlfdGFyZ2V0X3ZvbGF0 aWxlICgKKyAgICBpZCBpbnQsCisgICAgdmFsIHRleHQsCisgICAgcmFuZF92YWwgZG91YmxlIHBy ZWNpc2lvbiBERUZBVUxUIHJhbmRvbSgpCispOworCitJTlNFUlQgSU5UTyBiaV90YXJnZXRfdm9s YXRpbGUgKGlkLCB2YWwpCitTRUxFQ1QgZywgJ3Jvdy0nIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgNSkgZzsKKworU0VMRUNUIGNvdW50KCopIEZST00gYmlfdGFyZ2V0X3ZvbGF0aWxlOwor LS0gVmVyaWZ5IHRoZSB2b2xhdGlsZSBkZWZhdWx0IHdhcyBldmFsdWF0ZWQgKGFsbCB2YWx1ZXMg c2hvdWxkIGJlIGRpc3RpbmN0KQorU0VMRUNUIGNvdW50KERJU1RJTkNUIHJhbmRfdmFsKSA9IGNv dW50KCopIEFTIGFsbF9kaXN0aW5jdAorRlJPTSBiaV90YXJnZXRfdm9sYXRpbGU7CisKK0RST1Ag VEFCTEUgYmlfdGFyZ2V0X3ZvbGF0aWxlOworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFQxMDogWmVyby1yb3cgaW5z ZXJ0CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSBiaV90YXJnZXRfemVybyAoaWQgaW50LCB2YWwgdGV4 dCk7CisKK0lOU0VSVCBJTlRPIGJpX3RhcmdldF96ZXJvCitTRUxFQ1QgZywgJ3Jvdy0nIHx8IGcg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBnIFdIRVJFIGZhbHNlOworCitTRUxFQ1QgY291 bnQoKikgRlJPTSBiaV90YXJnZXRfemVybzsKKworRFJPUCBUQUJMRSBiaV90YXJnZXRfemVybzsK LS0gCjIuNTIuMAoK --00000000000010bb5b06507da644 Content-Type: application/octet-stream; name="v1-0002-createas-use-buffered-insert-API-for-CTAS.patch" Content-Disposition: attachment; filename="v1-0002-createas-use-buffered-insert-API-for-CTAS.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_moi4bjnl1 RnJvbSBkNmI2Y2IxOWMzMjZkNzk2OTNjMmU2MjM4Y2ZiZTk2ZjViMGZhMGUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFRodSwgMjMgQXByIDIwMjYgMTI6MjA6NTkgLTA3MDAKU3ViamVjdDogW1BBVENIIHYxIDIvNV0g Y3JlYXRlYXM6IHVzZSBidWZmZXJlZC1pbnNlcnQgQVBJIGZvciBDVEFTCgpBZG9wdCB0aGUgYnVm ZmVyZWQtaW5zZXJ0IGxpZmVjeWNsZSBBUEkgaW4gdGhlIENUQVMgZGVzdCByZWNlaXZlci4KCkNU QVMgdXNlcyB0YWJsZV9idWZmZXJlZF9pbnNlcnRfYmVnaW4oKS9wdXQoKS9lbmQoKSB3aXRoIGEg TlVMTCBmbHVzaApjYWxsYmFjayBhbmQgZmFsbHMgYmFjayB0byB0aGUgZXhpc3Rpbmcgc2luZ2xl LXJvdyBwYXRoIHdoZW4gbmVlZGVkLgoKUmV0YWluIHRoZSB2b2xhdGlsZS1mdW5jdGlvbiBjaGVj ayBhbmQgRVhFQ1VURS1wYXRoIGZhbGxiYWNrCmNvbnNlcnZhdGl2ZWx5IGZvciB0aGUgaW5pdGlh bCBwYXRjaCBzZXJpZXMuCgpBZGQgZm9jdXNlZCBDVEFTIHJlZ3Jlc3Npb24gdGVzdHMuCi0tLQog c3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgICAgfCAxMTIgKysrKysrKysr KysrKysrKysrLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3RfaW50by5vdXQg fCAgOTggKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0X2lu dG8uc3FsICAgICAgfCAgNDQgKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDIzNCBpbnNlcnRp b25zKCspLCAyMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwppbmRleCA2ZGJi ODMxY2E4OS4uNGJhMjVjOWUzMzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtNDAsNiAr NDAsNyBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25v ZGVGdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgiCisjaW5jbHVkZSAib3B0 aW1pemVyL29wdGltaXplci5oIgogI2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVk ZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIK QEAgLTU3LDcgKzU4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlPYmplY3RBZGRyZXNzIHJlbGFkZHI7 CQkvKiBhZGRyZXNzIG9mIHJlbCwgZm9yIEV4ZWNDcmVhdGVUYWJsZUFzICovCiAJQ29tbWFuZElk CW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICovCiAJdWlu dDMyCQl0aV9vcHRpb25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlv bnMgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8K KwlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKGZhbGxiYWNr IHBhdGggb25seSkgKi8KKwlUYWJsZUJ1ZmZlcmVkSW5zZXJ0U3RhdGUgYnVmZmVyZWRfc3RhdGU7 CS8qIGJ1ZmZlcmVkLWluc2VydCBzdGF0ZSwgb3IgTlVMTCAqLworCWJvb2wJCXVzZV9idWZmZXJl ZF9pbnNlcnQ7CS8qIHRydWUgaWYgYnVmZmVyZWQgcGF0aCBpcyBlbGlnaWJsZSAqLwogfSBEUl9p bnRvcmVsOwogCiAvKiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgQ1RBUyBkZWZpbml0aW9uIGNyZWF0 aW9uICovCkBAIC0yNjAsNyArMjYzLDE1IEBAIEV4ZWNDcmVhdGVUYWJsZUFzKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQsCiAJCUFzc2VydCghaXNfbWF0dmlldyk7 CS8qIGV4Y2x1ZGVkIGJ5IHN5bnRheCAqLwogCQlFeGVjdXRlUXVlcnkocHN0YXRlLCBlc3RtdCwg aW50bywgcGFyYW1zLCBkZXN0LCBxYyk7CiAKLQkJLyogZ2V0IG9iamVjdCBhZGRyZXNzIHRoYXQg aW50b3JlbF9zdGFydHVwIHNhdmVkIGZvciB1cyAqLworCQkvKgorCQkgKiBnZXQgb2JqZWN0IGFk ZHJlc3MgdGhhdCBpbnRvcmVsX3N0YXJ0dXAgc2F2ZWQgZm9yIHVzLgorCQkgKgorCQkgKiBOb3Rl OiB1c2VfYnVmZmVyZWRfaW5zZXJ0IHN0YXlzIGZhbHNlIChpdHMgcGFsbG9jMCBkZWZhdWx0KSBm b3IgdGhlCisJCSAqIEVYRUNVVEUgcGF0aC4gIFdlIGNvbnNlcnZhdGl2ZWx5IHNraXAgdGhlIGJ1 ZmZlcmVkLWluc2VydAorCQkgKiBvcHRpbWl6YXRpb24gaGVyZSBiZWNhdXNlIHRoZSBwcmVwYXJl ZCBzdGF0ZW1lbnQncyBwbGFuIGlzIG5vdAorCQkgKiBhdmFpbGFibGUgZm9yIHZvbGF0aWxlLWZ1 bmN0aW9uIGluc3BlY3Rpb24gYXQgdGhpcyBwb2ludC4gIFJlbGF4aW5nCisJCSAqIHRoaXMgaXMg b3V0c2lkZSBQYXRjaCAwMDAyIHNjb3BlLgorCQkgKi8KIAkJYWRkcmVzcyA9ICgoRFJfaW50b3Jl bCAqKSBkZXN0KS0+cmVsYWRkcjsKIAogCQlyZXR1cm4gYWRkcmVzczsKQEAgLTMyMyw2ICszMzQs MjQgQEAgRXhlY0NyZWF0ZVRhYmxlQXMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVUYWJsZUFz U3RtdCAqc3RtdCwKIAkJcGxhbiA9IHBnX3BsYW5fcXVlcnkocXVlcnksIHBzdGF0ZS0+cF9zb3Vy Y2V0ZXh0LAogCQkJCQkJCSBDVVJTT1JfT1BUX1BBUkFMTEVMX09LLCBwYXJhbXMsIE5VTEwpOwog CisJCS8qCisJCSAqIENvbnNlcnZhdGl2ZSBpbXBsZW1lbnRhdGlvbiBjaG9pY2U6IGRpc2FibGUg dGhlIGJ1ZmZlcmVkLWluc2VydAorCQkgKiBwYXRoIGlmIHRoZSBwbGFubmVkIHRhcmdldCBsaXN0 IGNvbnRhaW5zIHZvbGF0aWxlIGZ1bmN0aW9ucy4KKwkJICoKKwkJICogVGhlIGJ1ZmZlcmVkLWlu c2VydCBBUEkgY29udHJhY3QgZG9lcyBub3QgcmVxdWlyZSB0aGlzIGNoZWNrIOKAlCB0aGUKKwkJ ICogQ1RBUyB0YXJnZXQgdGFibGUgaXMgY3JlYXRlZCB3aXRoaW4gdGhpcyBzdGF0ZW1lbnQgYW5k IGNhbm5vdCBiZQorCQkgKiByZWZlcmVuY2VkIGJ5IHRoZSBzb3VyY2UgcXVlcnkuICBUaGlzIGd1 YXJkIGlzIHJldGFpbmVkIGZvciB0aGUKKwkJICogaW5pdGlhbCBwYXRjaCBzZXJpZXMgYXMgYSBj YWxsZXItbG9jYWwgY29uc2VydmF0aXNtIGFuZCBjYW4gYmUKKwkJICogcmVsYXhlZCBhZnRlciB2 YWxpZGF0aW9uIHdpdGhvdXQgYW55IEFQSSBjaGFuZ2UuCisJCSAqLworCQl7CisJCQlEUl9pbnRv cmVsICpteVN0YXRlID0gKERSX2ludG9yZWwgKikgZGVzdDsKKworCQkJbXlTdGF0ZS0+dXNlX2J1 ZmZlcmVkX2luc2VydCA9CisJCQkJIWNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zX2FmdGVyX3Bs YW5uaW5nKAorCQkJCQkoRXhwciAqKSBwbGFuLT5wbGFuVHJlZS0+dGFyZ2V0bGlzdCk7CisJCX0K KwogCQkvKgogCQkgKiBVc2UgYSBzbmFwc2hvdCB3aXRoIGFuIHVwZGF0ZWQgY29tbWFuZCBJRCB0 byBlbnN1cmUgdGhpcyBxdWVyeSBzZWVzCiAJCSAqIHJlc3VsdHMgb2YgYW55IHByZXZpb3VzbHkg ZXhlY3V0ZWQgcXVlcmllcy4gIChUaGlzIGNvdWxkIG9ubHkKQEAgLTU2NCwxMCArNTkzLDQ1IEBA IGludG9yZWxfc3RhcnR1cChEZXN0UmVjZWl2ZXIgKnNlbGYsIGludCBvcGVyYXRpb24sIFR1cGxl RGVzYyB0eXBlaW5mbykKIAkgKiBJZiBXSVRIIE5PIERBVEEgaXMgc3BlY2lmaWVkLCB0aGVyZSBp cyBubyBuZWVkIHRvIHNldCB1cCB0aGUgc3RhdGUgZm9yCiAJICogYnVsayBpbnNlcnRzIGFzIHRo ZXJlIGFyZSBubyB0dXBsZXMgdG8gaW5zZXJ0LgogCSAqLwotCWlmICghaW50by0+c2tpcERhdGEp Ci0JCW15U3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKLQllbHNlCisJaWYg KGludG8tPnNraXBEYXRhKQorCXsKIAkJbXlTdGF0ZS0+YmlzdGF0ZSA9IE5VTEw7CisJCW15U3Rh dGUtPmJ1ZmZlcmVkX3N0YXRlID0gTlVMTDsKKwl9CisJZWxzZSBpZiAobXlTdGF0ZS0+dXNlX2J1 ZmZlcmVkX2luc2VydCkKKwl7CisJCS8qCisJCSAqIFRyeSB0aGUgYnVmZmVyZWQtaW5zZXJ0IHBh dGguICBQYXNzIE5VTEwgZmx1c2ggY2FsbGJhY2sgLS0gQ1RBUworCQkgKiBoYXMgbm8gaW5kZXhl cywgdHJpZ2dlcnMsIG9yIHBlci10dXBsZSBwb3N0LWluc2VydCB3b3JrLgorCQkgKi8KKwkJbXlT dGF0ZS0+dGlfb3B0aW9ucyB8PSBUQUJMRV9JTlNFUlRfQkFTX0JVTEtXUklURTsKKwkJbXlTdGF0 ZS0+YnVmZmVyZWRfc3RhdGUgPQorCQkJdGFibGVfYnVmZmVyZWRfaW5zZXJ0X2JlZ2luKGludG9S ZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJbXlTdGF0ZS0+b3V0cHV0X2NpZCwKKwkJCQkJCQkJCQlt eVN0YXRlLT50aV9vcHRpb25zLAorCQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCisJCWlmIChteVN0 YXRlLT5idWZmZXJlZF9zdGF0ZSAhPSBOVUxMKQorCQl7CisJCQkvKiBCdWZmZXJlZCBwYXRoIGFj dGl2ZTsgYmlzdGF0ZSBpcyBtYW5hZ2VkIGluc2lkZSB0aGUgQU0gKi8KKwkJCW15U3RhdGUtPmJp c3RhdGUgPSBOVUxMOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogQU0gZG9lcyBub3Qgc3VwcG9y dCBidWZmZXJlZCBpbnNlcnRzOyBmYWxsIGJhY2sgKi8KKwkJCW15U3RhdGUtPmJpc3RhdGUgPSBH ZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwkJfQorCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBGYWxs YmFjayB0byBzaW5nbGUtcm93IHBhdGguICBUaGlzIGlzIHJlYWNoZWQgd2hlbiB0aGUKKwkJICog dm9sYXRpbGUtZnVuY3Rpb24gY29uc2VydmF0aXZlIGd1YXJkIGZpcmVkLCBvciBmb3IgQ1RBUyB2 aWEKKwkJICogRVhFQ1VURSAod2hlcmUgdXNlX2J1ZmZlcmVkX2luc2VydCBzdGF5cyBmYWxzZSBi eSBkZWZhdWx0KS4KKwkJICovCisJCW15U3RhdGUtPmJ1ZmZlcmVkX3N0YXRlID0gTlVMTDsKKwkJ bXlTdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCX0KIAogCS8qCiAJICog VmFsaWQgc21ncl90YXJnYmxvY2sgaW1wbGllcyBzb21ldGhpbmcgYWxyZWFkeSB3cm90ZSB0byB0 aGUgcmVsYXRpb24uCkBAIC01ODcsMTkgKzY1MSwxOCBAQCBpbnRvcmVsX3JlY2VpdmUoVHVwbGVU YWJsZVNsb3QgKnNsb3QsIERlc3RSZWNlaXZlciAqc2VsZikKIAkvKiBOb3RoaW5nIHRvIGluc2Vy dCBpZiBXSVRIIE5PIERBVEEgaXMgc3BlY2lmaWVkLiAqLwogCWlmICghbXlTdGF0ZS0+aW50by0+ c2tpcERhdGEpCiAJewotCQkvKgotCQkgKiBOb3RlIHRoYXQgdGhlIGlucHV0IHNsb3QgbWlnaHQg bm90IGJlIG9mIHRoZSB0eXBlIG9mIHRoZSB0YXJnZXQKLQkJICogcmVsYXRpb24uIFRoYXQncyBz dXBwb3J0ZWQgYnkgdGFibGVfdHVwbGVfaW5zZXJ0KCksIGJ1dCBzbGlnaHRseQotCQkgKiBsZXNz IGVmZmljaWVudCB0aGFuIGluc2VydGluZyB3aXRoIHRoZSByaWdodCBzbG90IC0gYnV0IHRoZQot CQkgKiBhbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byBjb3B5IGludG8gYSBzbG90IG9mIHRoZSByaWdo dCB0eXBlLCB3aGljaAotCQkgKiB3b3VsZCBub3QgYmUgY2hlYXAgZWl0aGVyLiBUaGlzIGFsc28g ZG9lc24ndCBhbGxvdyBhY2Nlc3NpbmcgcGVyLUFNCi0JCSAqIGRhdGEgKHNheSBhIHR1cGxlJ3Mg eG1pbiksIGJ1dCBzaW5jZSB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuLi4KLQkJICovCi0JCXRhYmxl X3R1cGxlX2luc2VydChteVN0YXRlLT5yZWwsCi0JCQkJCQkgICBzbG90LAotCQkJCQkJICAgbXlT dGF0ZS0+b3V0cHV0X2NpZCwKLQkJCQkJCSAgIG15U3RhdGUtPnRpX29wdGlvbnMsCi0JCQkJCQkg ICBteVN0YXRlLT5iaXN0YXRlKTsKKwkJaWYgKG15U3RhdGUtPmJ1ZmZlcmVkX3N0YXRlICE9IE5V TEwpCisJCXsKKwkJCXRhYmxlX2J1ZmZlcmVkX2luc2VydF9wdXQobXlTdGF0ZS0+YnVmZmVyZWRf c3RhdGUsIHNsb3QpOworCQl9CisJCWVsc2UKKwkJeworCQkJdGFibGVfdHVwbGVfaW5zZXJ0KG15 U3RhdGUtPnJlbCwKKwkJCQkJCQkgICBzbG90LAorCQkJCQkJCSAgIG15U3RhdGUtPm91dHB1dF9j aWQsCisJCQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9ucywKKwkJCQkJCQkgICBteVN0YXRlLT5i aXN0YXRlKTsKKwkJfQogCX0KIAogCS8qIFdlIGtub3cgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQg cmVsYXRpb24sIHNvIHRoZXJlIGFyZSBubyBpbmRleGVzICovCkBAIC02MTgsOCArNjgxLDE3IEBA IGludG9yZWxfc2h1dGRvd24oRGVzdFJlY2VpdmVyICpzZWxmKQogCiAJaWYgKCFpbnRvLT5za2lw RGF0YSkKIAl7Ci0JCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7Ci0JCXRh YmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRlLT5yZWwsIG15U3RhdGUtPnRpX29wdGlvbnMp OworCQlpZiAobXlTdGF0ZS0+YnVmZmVyZWRfc3RhdGUgIT0gTlVMTCkKKwkJeworCQkJLyogZW5k KCkgZmx1c2hlcyByZW1haW5pbmcgdHVwbGVzIGFuZCBzdWJzdW1lcyBmaW5pc2hfYnVsa19pbnNl cnQgKi8KKwkJCXRhYmxlX2J1ZmZlcmVkX2luc2VydF9lbmQobXlTdGF0ZS0+YnVmZmVyZWRfc3Rh dGUpOworCQkJbXlTdGF0ZS0+YnVmZmVyZWRfc3RhdGUgPSBOVUxMOworCQl9CisJCWVsc2UKKwkJ eworCQkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShteVN0YXRlLT5iaXN0YXRlKTsKKwkJCXRhYmxlX2Zp bmlzaF9idWxrX2luc2VydChteVN0YXRlLT5yZWwsIG15U3RhdGUtPnRpX29wdGlvbnMpOworCQl9 CiAJfQogCiAJLyogY2xvc2UgcmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1pdCAqLwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3RfaW50by5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9pbnRvLm91dAppbmRleCBkMDRjYTJiMWJmNy4u MzZjYzc4M2ZkYTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0 X2ludG8ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2ludG8ub3V0 CkBAIC0yMjAsMyArMjIwLDEwMSBAQCBOT1RJQ0U6ICByZWxhdGlvbiAiY3Rhc19pbmVfdGJsIiBh bHJlYWR5IGV4aXN0cywgc2tpcHBpbmcKICgwIHJvd3MpCiAKIERST1AgVEFCTEUgY3Rhc19pbmVf dGJsOworLS0KKy0tIFRlc3RzIGZvciBDVEFTIHdpdGggYnVmZmVyZWQtaW5zZXJ0IHBhdGguCist LQorLS0gVGhlc2UgdGVzdHMgdmVyaWZ5IGNvcnJlY3RuZXNzIG9mIENUQVMgcmVzdWx0cyB1bmRl ciBib3RoIHRoZSBidWZmZXJlZAorLS0gcGF0aCAobm8gdm9sYXRpbGUgZnVuY3Rpb25zKSBhbmQg dGhlIGZhbGxiYWNrIHNpbmdsZS1yb3cgcGF0aCAodm9sYXRpbGUKKy0tIGZ1bmN0aW9ucyBwcmVz ZW50LCBvciBFWEVDVVRFKS4gIFBhdGggc2VsZWN0aW9uIGlzIG5vdCBkaXJlY3RseSBvYnNlcnZh YmxlCistLSBpbiBTUUwgb3V0cHV0OyB0aGVzZSB0ZXN0cyB2YWxpZGF0ZSB0aGF0IHJlc3VsdHMg YXJlIGNvcnJlY3QgcmVnYXJkbGVzcy4KKy0tCistLSBCdWZmZXJlZCBwYXRoOiBzbWFsbCByb3cg Y291bnQsIHZlcmlmeSBjb250ZW50cy4KK0NSRUFURSBUQUJMRSBjdGFzX2J1ZmZlcmVkXzEgQVMg U0VMRUNUIGcgQVMgYSwgZyAqIDEwIEFTIGIgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgZzsK K1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0YXNfYnVmZmVyZWRfMTsKKyBjb3VudCAKKy0tLS0tLS0K KyAgICAgNQorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGN0YXNfYnVmZmVyZWRfMSBPUkRFUiBC WSBhOworIGEgfCBiICAKKy0tLSstLS0tCisgMSB8IDEwCisgMiB8IDIwCisgMyB8IDMwCisgNCB8 IDQwCisgNSB8IDUwCisoNSByb3dzKQorCitEUk9QIFRBQkxFIGN0YXNfYnVmZmVyZWRfMTsKKy0t IEJ1ZmZlcmVkIHBhdGg6IGVub3VnaCByb3dzIHRvIHRyaWdnZXIgYXV0by1mbHVzaCAoPjEwMDAg c2xvdCB0aHJlc2hvbGQpLgorQ1JFQVRFIFRBQkxFIGN0YXNfYnVmZmVyZWRfMiBBUyBTRUxFQ1Qg ZyBBUyBhIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDI1MDApIGc7CitTRUxFQ1QgY291bnQoKikg RlJPTSBjdGFzX2J1ZmZlcmVkXzI7CisgY291bnQgCistLS0tLS0tCisgIDI1MDAKKygxIHJvdykK KworU0VMRUNUIG1pbihhKSwgbWF4KGEpIEZST00gY3Rhc19idWZmZXJlZF8yOworIG1pbiB8IG1h eCAgCistLS0tLSstLS0tLS0KKyAgIDEgfCAyNTAwCisoMSByb3cpCisKK0RST1AgVEFCTEUgY3Rh c19idWZmZXJlZF8yOworLS0gQnVmZmVyZWQgcGF0aDogd2lkZSB0dXBsZXMgdG8gZXhlcmNpc2Ug Ynl0ZS10aHJlc2hvbGQgZmx1c2hpbmcuCitDUkVBVEUgVEFCTEUgY3Rhc19idWZmZXJlZF93aWRl IEFTCisgIFNFTEVDVCBnIEFTIGlkLAorICAgICAgICAgcmVwZWF0KCd4JywgMjAwKSBBUyBjb2wx LAorICAgICAgICAgcmVwZWF0KCd5JywgMjAwKSBBUyBjb2wyLAorICAgICAgICAgcmVwZWF0KCd6 JywgMjAwKSBBUyBjb2wzCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgZzsKK1NFTEVD VCBjb3VudCgqKSBGUk9NIGN0YXNfYnVmZmVyZWRfd2lkZTsKKyBjb3VudCAKKy0tLS0tLS0KKyAg IDEwMAorKDEgcm93KQorCitTRUxFQ1QgaWQsIGxlbmd0aChjb2wxKSwgbGVuZ3RoKGNvbDIpLCBs ZW5ndGgoY29sMykgRlJPTSBjdGFzX2J1ZmZlcmVkX3dpZGUgV0hFUkUgaWQgSU4gKDEsIDUwLCAx MDApIE9SREVSIEJZIGlkOworIGlkICB8IGxlbmd0aCB8IGxlbmd0aCB8IGxlbmd0aCAKKy0tLS0t Ky0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tCisgICAxIHwgICAgMjAwIHwgICAgMjAwIHwgICAg MjAwCisgIDUwIHwgICAgMjAwIHwgICAgMjAwIHwgICAgMjAwCisgMTAwIHwgICAgMjAwIHwgICAg MjAwIHwgICAgMjAwCisoMyByb3dzKQorCitEUk9QIFRBQkxFIGN0YXNfYnVmZmVyZWRfd2lkZTsK Ky0tIEZhbGxiYWNrIHBhdGg6IHJhbmRvbSgpIHRyaWdnZXJzIHRoZSBjb25zZXJ2YXRpdmUgdm9s YXRpbGUtZnVuY3Rpb24gZ3VhcmQuCistLSBSZXN1bHQgbXVzdCBzdGlsbCBiZSBjb3JyZWN0IHRo cm91Z2ggdGhlIHNpbmdsZS1yb3cgaW5zZXJ0aW9uIHBhdGguCitDUkVBVEUgVEFCTEUgY3Rhc192 b2xhdGlsZSBBUyBTRUxFQ1QgZyBBUyBhLCByYW5kb20oKSBBUyByIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwKSBnOworU0VMRUNUIGNvdW50KCopIEZST00gY3Rhc192b2xhdGlsZTsKKyBjb3Vu dCAKKy0tLS0tLS0KKyAgICAxMAorKDEgcm93KQorCitTRUxFQ1QgYSBGUk9NIGN0YXNfdm9sYXRp bGUgT1JERVIgQlkgYTsKKyBhICAKKy0tLS0KKyAgMQorICAyCisgIDMKKyAgNAorICA1CisgIDYK KyAgNworICA4CisgIDkKKyAxMAorKDEwIHJvd3MpCisKK0RST1AgVEFCTEUgY3Rhc192b2xhdGls ZTsKKy0tIFdJVEggTk8gREFUQTogbm8gaW5zZXJ0aW9uIHBhdGggZXhlcmNpc2VkOyB2ZXJpZnkg dW5jaGFuZ2VkIGJlaGF2aW9yLgorQ1JFQVRFIFRBQkxFIGN0YXNfbm9kYXRhIEFTIFNFTEVDVCAx IEFTIGEgV0lUSCBOTyBEQVRBOworU0VMRUNUIGNvdW50KCopIEZST00gY3Rhc19ub2RhdGE7Cisg Y291bnQgCistLS0tLS0tCisgICAgIDAKKygxIHJvdykKKworRFJPUCBUQUJMRSBjdGFzX25vZGF0 YTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9pbnRvLnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9pbnRvLnNxbAppbmRleCBmNzFlMzk0MGUwYS4uODE0 NzExM2NlZTMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9pbnRvLnNx bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfaW50by5zcWwKQEAgLTEzNiwzICsx MzYsNDcgQEAgRVhQTEFJTiAoQU5BTFlaRSwgQ09TVFMgT0ZGLCBTVU1NQVJZIE9GRiwgVElNSU5H IE9GRikKIEVYUExBSU4gKEFOQUxZWkUsIENPU1RTIE9GRiwgU1VNTUFSWSBPRkYsIFRJTUlORyBP RkYpCiAgIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGN0YXNfaW5lX3RibCBBUyBFWEVDVVRF IGN0YXNfaW5lX3F1ZXJ5OyAtLSBvawogRFJPUCBUQUJMRSBjdGFzX2luZV90Ymw7CisKKy0tCist LSBUZXN0cyBmb3IgQ1RBUyB3aXRoIGJ1ZmZlcmVkLWluc2VydCBwYXRoLgorLS0KKy0tIFRoZXNl IHRlc3RzIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBDVEFTIHJlc3VsdHMgdW5kZXIgYm90aCB0aGUg YnVmZmVyZWQKKy0tIHBhdGggKG5vIHZvbGF0aWxlIGZ1bmN0aW9ucykgYW5kIHRoZSBmYWxsYmFj ayBzaW5nbGUtcm93IHBhdGggKHZvbGF0aWxlCistLSBmdW5jdGlvbnMgcHJlc2VudCwgb3IgRVhF Q1VURSkuICBQYXRoIHNlbGVjdGlvbiBpcyBub3QgZGlyZWN0bHkgb2JzZXJ2YWJsZQorLS0gaW4g U1FMIG91dHB1dDsgdGhlc2UgdGVzdHMgdmFsaWRhdGUgdGhhdCByZXN1bHRzIGFyZSBjb3JyZWN0 IHJlZ2FyZGxlc3MuCistLQorCistLSBCdWZmZXJlZCBwYXRoOiBzbWFsbCByb3cgY291bnQsIHZl cmlmeSBjb250ZW50cy4KK0NSRUFURSBUQUJMRSBjdGFzX2J1ZmZlcmVkXzEgQVMgU0VMRUNUIGcg QVMgYSwgZyAqIDEwIEFTIGIgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgZzsKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGN0YXNfYnVmZmVyZWRfMTsKK1NFTEVDVCAqIEZST00gY3Rhc19idWZmZXJl ZF8xIE9SREVSIEJZIGE7CitEUk9QIFRBQkxFIGN0YXNfYnVmZmVyZWRfMTsKKworLS0gQnVmZmVy ZWQgcGF0aDogZW5vdWdoIHJvd3MgdG8gdHJpZ2dlciBhdXRvLWZsdXNoICg+MTAwMCBzbG90IHRo cmVzaG9sZCkuCitDUkVBVEUgVEFCTEUgY3Rhc19idWZmZXJlZF8yIEFTIFNFTEVDVCBnIEFTIGEg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjUwMCkgZzsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0 YXNfYnVmZmVyZWRfMjsKK1NFTEVDVCBtaW4oYSksIG1heChhKSBGUk9NIGN0YXNfYnVmZmVyZWRf MjsKK0RST1AgVEFCTEUgY3Rhc19idWZmZXJlZF8yOworCistLSBCdWZmZXJlZCBwYXRoOiB3aWRl IHR1cGxlcyB0byBleGVyY2lzZSBieXRlLXRocmVzaG9sZCBmbHVzaGluZy4KK0NSRUFURSBUQUJM RSBjdGFzX2J1ZmZlcmVkX3dpZGUgQVMKKyAgU0VMRUNUIGcgQVMgaWQsCisgICAgICAgICByZXBl YXQoJ3gnLCAyMDApIEFTIGNvbDEsCisgICAgICAgICByZXBlYXQoJ3knLCAyMDApIEFTIGNvbDIs CisgICAgICAgICByZXBlYXQoJ3onLCAyMDApIEFTIGNvbDMKKyAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwKSBnOworU0VMRUNUIGNvdW50KCopIEZST00gY3Rhc19idWZmZXJlZF93aWRlOwor U0VMRUNUIGlkLCBsZW5ndGgoY29sMSksIGxlbmd0aChjb2wyKSwgbGVuZ3RoKGNvbDMpIEZST00g Y3Rhc19idWZmZXJlZF93aWRlIFdIRVJFIGlkIElOICgxLCA1MCwgMTAwKSBPUkRFUiBCWSBpZDsK K0RST1AgVEFCTEUgY3Rhc19idWZmZXJlZF93aWRlOworCistLSBGYWxsYmFjayBwYXRoOiByYW5k b20oKSB0cmlnZ2VycyB0aGUgY29uc2VydmF0aXZlIHZvbGF0aWxlLWZ1bmN0aW9uIGd1YXJkLgor LS0gUmVzdWx0IG11c3Qgc3RpbGwgYmUgY29ycmVjdCB0aHJvdWdoIHRoZSBzaW5nbGUtcm93IGlu c2VydGlvbiBwYXRoLgorQ1JFQVRFIFRBQkxFIGN0YXNfdm9sYXRpbGUgQVMgU0VMRUNUIGcgQVMg YSwgcmFuZG9tKCkgQVMgciBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgZzsKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGN0YXNfdm9sYXRpbGU7CitTRUxFQ1QgYSBGUk9NIGN0YXNfdm9sYXRpbGUg T1JERVIgQlkgYTsKK0RST1AgVEFCTEUgY3Rhc192b2xhdGlsZTsKKworLS0gV0lUSCBOTyBEQVRB OiBubyBpbnNlcnRpb24gcGF0aCBleGVyY2lzZWQ7IHZlcmlmeSB1bmNoYW5nZWQgYmVoYXZpb3Iu CitDUkVBVEUgVEFCTEUgY3Rhc19ub2RhdGEgQVMgU0VMRUNUIDEgQVMgYSBXSVRIIE5PIERBVEE7 CitTRUxFQ1QgY291bnQoKikgRlJPTSBjdGFzX25vZGF0YTsKK0RST1AgVEFCTEUgY3Rhc19ub2Rh dGE7Ci0tIAoyLjUyLjAKCg== --00000000000010bb5b06507da644 Content-Type: application/octet-stream; name="v1-0003-matview-use-buffered-insert-API-for-CMV-and-RMV.patch" Content-Disposition: attachment; filename="v1-0003-matview-use-buffered-insert-API-for-CMV-and-RMV.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_moi4bjnp2 RnJvbSAwYjgxMGVkY2RjNWU4MGFiNGVjN2Q3N2E4ZDY2ODdmZGVkZDczYjMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFRodSwgMjMgQXByIDIwMjYgMTI6NDM6MzEgLTA3MDAKU3ViamVjdDogW1BBVENIIHYxIDMvNV0g bWF0dmlldzogdXNlIGJ1ZmZlcmVkLWluc2VydCBBUEkgZm9yIENNViBhbmQgUk1WCgpBZG9wdCB0 aGUgYnVmZmVyZWQtaW5zZXJ0IGxpZmVjeWNsZSBBUEkgaW4gdGhlIHRyYW5zaWVudHJlbCBkYXRh ZmlsbApwYXRoIHVzZWQgYnkgQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIGFuZCBSRUZSRVNIIE1B VEVSSUFMSVpFRCBWSUVXLgoKVGhlIHBhdGggdXNlcyB0YWJsZV9idWZmZXJlZF9pbnNlcnRfYmVn aW4oKS9wdXQoKS9lbmQoKSB3aXRoIGEgTlVMTApmbHVzaCBjYWxsYmFjayBhbmQgZmFsbHMgYmFj ayB0byB0aGUgZXhpc3Rpbmcgc2luZ2xlLXJvdyBwYXRoIHdoZW4KbmVlZGVkLgoKUmV0YWluIHRo ZSB2b2xhdGlsZS1mdW5jdGlvbiBjaGVjayBjb25zZXJ2YXRpdmVseSBmb3IgdGhlIGluaXRpYWwg cGF0Y2gKc2VyaWVzLiBDb25jdXJyZW50IHJlZnJlc2ggaXMgdW5jaGFuZ2VkLgoKQWRkIGZvY3Vz ZWQgQ01WL1JNViByZWdyZXNzaW9uIHRlc3RzLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21h dHZpZXcuYyAgICAgICAgfCAgOTkgKysrKysrKysrKysrKy0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbWF0dmlldy5vdXQgfCAxNTIgKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNy Yy90ZXN0L3JlZ3Jlc3Mvc3FsL21hdHZpZXcuc3FsICAgICAgfCAgNTkgKysrKysrKysrKwogMyBm aWxlcyBjaGFuZ2VkLCAyOTEgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvbWF0dmlldy5jCmluZGV4IGY3ZDgwMDdmNzk2Li43ZGU0YWNiZGZiMSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L21hdHZpZXcuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9y LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2lu Y2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3Iu aCIKQEAgLTUwLDcgKzUxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlSZWxhdGlvbgl0cmFuc2llbnRy ZWw7CS8qIHJlbGF0aW9uIHRvIHdyaXRlIHRvICovCiAJQ29tbWFuZElkCW91dHB1dF9jaWQ7CQkv KiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICovCiAJdWludDMyCQl0aV9vcHRpb25z OwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KLQlCdWxrSW5z ZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKwlCdWxrSW5zZXJ0U3Rh dGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKGZhbGxiYWNrIHBhdGggb25seSkgKi8K KwlUYWJsZUJ1ZmZlcmVkSW5zZXJ0U3RhdGUgYnVmZmVyZWRfc3RhdGU7CS8qIGJ1ZmZlcmVkLWlu c2VydCBzdGF0ZSwgb3IgTlVMTCAqLworCWJvb2wJCXVzZV9idWZmZXJlZF9pbnNlcnQ7CS8qIHRy dWUgaWYgYnVmZmVyZWQgcGF0aCBpcyBlbGlnaWJsZSAqLwogfSBEUl90cmFuc2llbnRyZWw7CiAK IHN0YXRpYyBpbnQJbWF0dmlld19tYWludGVuYW5jZV9kZXB0aCA9IDA7CkBAIC00MjcsNiArNDMw LDI0IEBAIHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChEZXN0UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5 ICpxdWVyeSwKIAkvKiBQbGFuIHRoZSBxdWVyeSB3aGljaCB3aWxsIGdlbmVyYXRlIGRhdGEgZm9y IHRoZSByZWZyZXNoLiAqLwogCXBsYW4gPSBwZ19wbGFuX3F1ZXJ5KHF1ZXJ5LCBxdWVyeVN0cmlu ZywgQ1VSU09SX09QVF9QQVJBTExFTF9PSywgTlVMTCwgTlVMTCk7CiAKKwkvKgorCSAqIENvbnNl cnZhdGl2ZSBpbXBsZW1lbnRhdGlvbiBjaG9pY2U6IGRpc2FibGUgdGhlIGJ1ZmZlcmVkLWluc2Vy dCBwYXRoCisJICogaWYgdGhlIHBsYW5uZWQgdGFyZ2V0IGxpc3QgY29udGFpbnMgdm9sYXRpbGUg ZnVuY3Rpb25zLgorCSAqCisJICogVGhlIGJ1ZmZlcmVkLWluc2VydCBBUEkgY29udHJhY3QgZG9l cyBub3QgcmVxdWlyZSB0aGlzIGNoZWNrIOKAlCB0aGUKKwkgKiBtYXR2aWV3J3MgZGVmaW5pbmcg cXVlcnkgd2FzIHBhcnNlZCBhdCBjcmVhdGlvbiB0aW1lIGFuZCBjYW5ub3QKKwkgKiByZWZlcmVu Y2UgdGhlIHRyYW5zaWVudCB0YXJnZXQgdGFibGUuICBUaGlzIGd1YXJkIGlzIHJldGFpbmVkIGZv ciB0aGUKKwkgKiBpbml0aWFsIHBhdGNoIHNlcmllcyBhcyBhIGNhbGxlci1sb2NhbCBjb25zZXJ2 YXRpc20gYW5kIGNhbiBiZSByZWxheGVkCisJICogYWZ0ZXIgdmFsaWRhdGlvbiB3aXRob3V0IGFu eSBBUEkgY2hhbmdlLgorCSAqLworCXsKKwkJRFJfdHJhbnNpZW50cmVsICpteVN0YXRlID0gKERS X3RyYW5zaWVudHJlbCAqKSBkZXN0OworCisJCW15U3RhdGUtPnVzZV9idWZmZXJlZF9pbnNlcnQg PQorCQkJIWNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zX2FmdGVyX3BsYW5uaW5nKAorCQkJCShF eHByICopIHBsYW4tPnBsYW5UcmVlLT50YXJnZXRsaXN0KTsKKwl9CisKIAkvKgogCSAqIFVzZSBh IHNuYXBzaG90IHdpdGggYW4gdXBkYXRlZCBjb21tYW5kIElEIHRvIGVuc3VyZSB0aGlzIHF1ZXJ5 IHNlZXMKIAkgKiByZXN1bHRzIG9mIGFueSBwcmV2aW91c2x5IGV4ZWN1dGVkIHF1ZXJpZXMuICAo VGhpcyBjb3VsZCBvbmx5IG1hdHRlciBpZgpAQCAtNDkyLDcgKzUxMyw0MCBAQCB0cmFuc2llbnRy ZWxfc3RhcnR1cChEZXN0UmVjZWl2ZXIgKnNlbGYsIGludCBvcGVyYXRpb24sIFR1cGxlRGVzYyB0 eXBlaW5mbykKIAlteVN0YXRlLT50cmFuc2llbnRyZWwgPSB0cmFuc2llbnRyZWw7CiAJbXlTdGF0 ZS0+b3V0cHV0X2NpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7CiAJbXlTdGF0ZS0+dGlf b3B0aW9ucyA9IFRBQkxFX0lOU0VSVF9TS0lQX0ZTTSB8IFRBQkxFX0lOU0VSVF9GUk9aRU47Ci0J bXlTdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCisJaWYgKG15U3RhdGUt PnVzZV9idWZmZXJlZF9pbnNlcnQpCisJeworCQkvKgorCQkgKiBUcnkgdGhlIGJ1ZmZlcmVkLWlu c2VydCBwYXRoLiAgUGFzcyBOVUxMIGZsdXNoIGNhbGxiYWNrIOKAlCB0aGUKKwkJICogdHJhbnNp ZW50IHRhYmxlIGhhcyBubyBpbmRleGVzLCB0cmlnZ2Vycywgb3IgcGVyLXR1cGxlIHBvc3QtaW5z ZXJ0CisJCSAqIHdvcmsgZHVyaW5nIHRoZSBkYXRhZmlsbCBwaGFzZS4KKwkJICovCisJCW15U3Rh dGUtPnRpX29wdGlvbnMgfD0gVEFCTEVfSU5TRVJUX0JBU19CVUxLV1JJVEU7CisJCW15U3RhdGUt PmJ1ZmZlcmVkX3N0YXRlID0KKwkJCXRhYmxlX2J1ZmZlcmVkX2luc2VydF9iZWdpbih0cmFuc2ll bnRyZWwsCisJCQkJCQkJCQkJbXlTdGF0ZS0+b3V0cHV0X2NpZCwKKwkJCQkJCQkJCQlteVN0YXRl LT50aV9vcHRpb25zLAorCQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCisJCWlmIChteVN0YXRlLT5i dWZmZXJlZF9zdGF0ZSAhPSBOVUxMKQorCQl7CisJCQlteVN0YXRlLT5iaXN0YXRlID0gTlVMTDsK KwkJfQorCQllbHNlCisJCXsKKwkJCS8qIEFNIGRvZXMgbm90IHN1cHBvcnQgYnVmZmVyZWQgaW5z ZXJ0czsgZmFsbCBiYWNrICovCisJCQlteVN0YXRlLT5iaXN0YXRlID0gR2V0QnVsa0luc2VydFN0 YXRlKCk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogQnVmZmVyZWQgaW5zZXJ0aW9u IG5vdCBzZWxlY3RlZCBmb3IgdGhpcyBkYXRhZmlsbC4gIEN1cnJlbnRseSB0aGlzCisJCSAqIGlz IHJlYWNoZWQgd2hlbiB0aGUgY29uc2VydmF0aXZlIHZvbGF0aWxlLWZ1bmN0aW9uIGd1YXJkIGZp cmVzLgorCQkgKi8KKwkJbXlTdGF0ZS0+YnVmZmVyZWRfc3RhdGUgPSBOVUxMOworCQlteVN0YXRl LT5iaXN0YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7CisJfQogCiAJLyoKIAkgKiBWYWxpZCBz bWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0aGluZyBhbHJlYWR5IHdyb3RlIHRvIHRoZSByZWxh dGlvbi4KQEAgLTUwOSwyMCArNTYzLDE5IEBAIHRyYW5zaWVudHJlbF9yZWNlaXZlKFR1cGxlVGFi bGVTbG90ICpzbG90LCBEZXN0UmVjZWl2ZXIgKnNlbGYpCiB7CiAJRFJfdHJhbnNpZW50cmVsICpt eVN0YXRlID0gKERSX3RyYW5zaWVudHJlbCAqKSBzZWxmOwogCi0JLyoKLQkgKiBOb3RlIHRoYXQg dGhlIGlucHV0IHNsb3QgbWlnaHQgbm90IGJlIG9mIHRoZSB0eXBlIG9mIHRoZSB0YXJnZXQKLQkg KiByZWxhdGlvbi4gVGhhdCdzIHN1cHBvcnRlZCBieSB0YWJsZV90dXBsZV9pbnNlcnQoKSwgYnV0 IHNsaWdodGx5IGxlc3MKLQkgKiBlZmZpY2llbnQgdGhhbiBpbnNlcnRpbmcgd2l0aCB0aGUgcmln aHQgc2xvdCAtIGJ1dCB0aGUgYWx0ZXJuYXRpdmUKLQkgKiB3b3VsZCBiZSB0byBjb3B5IGludG8g YSBzbG90IG9mIHRoZSByaWdodCB0eXBlLCB3aGljaCB3b3VsZCBub3QgYmUKLQkgKiBjaGVhcCBl aXRoZXIuIFRoaXMgYWxzbyBkb2Vzbid0IGFsbG93IGFjY2Vzc2luZyBwZXItQU0gZGF0YSAoc2F5 IGEKLQkgKiB0dXBsZSdzIHhtaW4pLCBidXQgc2luY2Ugd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLi4u Ci0JICovCi0KLQl0YWJsZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+dHJhbnNpZW50cmVsLAotCQkJ CQkgICBzbG90LAotCQkJCQkgICBteVN0YXRlLT5vdXRwdXRfY2lkLAotCQkJCQkgICBteVN0YXRl LT50aV9vcHRpb25zLAotCQkJCQkgICBteVN0YXRlLT5iaXN0YXRlKTsKKwkvKiBCb3RoIHBhdGhz IGFjY2VwdCB0aGUgY2FsbGVyLXByb3ZpZGVkIHNsb3QgZGlyZWN0bHkuICovCisJaWYgKG15U3Rh dGUtPmJ1ZmZlcmVkX3N0YXRlICE9IE5VTEwpCisJeworCQl0YWJsZV9idWZmZXJlZF9pbnNlcnRf cHV0KG15U3RhdGUtPmJ1ZmZlcmVkX3N0YXRlLCBzbG90KTsKKwl9CisJZWxzZQorCXsKKwkJdGFi bGVfdHVwbGVfaW5zZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJlbCwKKwkJCQkJCSAgIHNsb3QsCisJ CQkJCQkgICBteVN0YXRlLT5vdXRwdXRfY2lkLAorCQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9u cywKKwkJCQkJCSAgIG15U3RhdGUtPmJpc3RhdGUpOworCX0KIAogCS8qIFdlIGtub3cgdGhpcyBp cyBhIG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24sIHNvIHRoZXJlIGFyZSBubyBpbmRleGVzICovCiAK QEAgLTUzNyw5ICs1OTAsMTcgQEAgdHJhbnNpZW50cmVsX3NodXRkb3duKERlc3RSZWNlaXZlciAq c2VsZikKIHsKIAlEUl90cmFuc2llbnRyZWwgKm15U3RhdGUgPSAoRFJfdHJhbnNpZW50cmVsICop IHNlbGY7CiAKLQlGcmVlQnVsa0luc2VydFN0YXRlKG15U3RhdGUtPmJpc3RhdGUpOwotCi0JdGFi bGVfZmluaXNoX2J1bGtfaW5zZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJlbCwgbXlTdGF0ZS0+dGlf b3B0aW9ucyk7CisJaWYgKG15U3RhdGUtPmJ1ZmZlcmVkX3N0YXRlICE9IE5VTEwpCisJeworCQkv KiBlbmQoKSBmbHVzaGVzIHJlbWFpbmluZyB0dXBsZXMgYW5kIHN1YnN1bWVzIGZpbmlzaF9idWxr X2luc2VydCAqLworCQl0YWJsZV9idWZmZXJlZF9pbnNlcnRfZW5kKG15U3RhdGUtPmJ1ZmZlcmVk X3N0YXRlKTsKKwkJbXlTdGF0ZS0+YnVmZmVyZWRfc3RhdGUgPSBOVUxMOworCX0KKwllbHNlCisJ eworCQlGcmVlQnVsa0luc2VydFN0YXRlKG15U3RhdGUtPmJpc3RhdGUpOworCQl0YWJsZV9maW5p c2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBteVN0YXRlLT50aV9vcHRpb25z KTsKKwl9CiAKIAkvKiBjbG9zZSB0cmFuc2llbnRyZWwsIGJ1dCBrZWVwIGxvY2sgdW50aWwgY29t bWl0ICovCiAJdGFibGVfY2xvc2UobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBOb0xvY2spOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tYXR2aWV3Lm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvbWF0dmlldy5vdXQKaW5kZXggMDM1NTcyMGRmYzYuLjMzMGVhNDk4 OWYyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21hdHZpZXcub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWF0dmlldy5vdXQKQEAgLTY5OSwzICs2OTks MTU1IEBAIE5PVElDRTogIHJlbGF0aW9uICJtYXR2aWV3X2luZV90YWIiIGFscmVhZHkgZXhpc3Rz LCBza2lwcGluZwogKDAgcm93cykKIAogRFJPUCBNQVRFUklBTElaRUQgVklFVyBtYXR2aWV3X2lu ZV90YWI7CistLQorLS0gVGVzdHMgZm9yIENNVi9STVYgd2l0aCBidWZmZXJlZC1pbnNlcnQgcGF0 aC4KKy0tCistLSBUaGVzZSB0ZXN0cyB2ZXJpZnkgY29ycmVjdG5lc3MgdW5kZXIgYm90aCB0aGUg YnVmZmVyZWQgcGF0aCAobm8gdm9sYXRpbGUKKy0tIGZ1bmN0aW9ucykgYW5kIHRoZSBmYWxsYmFj ayBzaW5nbGUtcm93IHBhdGggKHZvbGF0aWxlIGZ1bmN0aW9ucyBwcmVzZW50KS4KKy0tIFBhdGgg c2VsZWN0aW9uIGlzIG5vdCBkaXJlY3RseSBvYnNlcnZhYmxlIGluIFNRTCBvdXRwdXQuCistLQor LS0gQ01WOiBiYXNpYyBjb3JyZWN0bmVzcworQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG12X2J1 ZmZlcmVkXzEgQVMKKyAgU0VMRUNUIGcgQVMgYSwgZyAqIDEwIEFTIGIgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgNSkgZzsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG12X2J1ZmZlcmVkXzE7CisgY291 bnQgCistLS0tLS0tCisgICAgIDUKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBtdl9idWZmZXJl ZF8xIE9SREVSIEJZIGE7CisgYSB8IGIgIAorLS0tKy0tLS0KKyAxIHwgMTAKKyAyIHwgMjAKKyAz IHwgMzAKKyA0IHwgNDAKKyA1IHwgNTAKKyg1IHJvd3MpCisKKy0tIFJNVjogcmVmcmVzaCByZXBv cHVsYXRlcyBjb3JyZWN0bHkKK1JFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcgbXZfYnVmZmVyZWRf MTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG12X2J1ZmZlcmVkXzE7CisgY291bnQgCistLS0tLS0t CisgICAgIDUKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBtdl9idWZmZXJlZF8xIE9SREVSIEJZ IGE7CisgYSB8IGIgIAorLS0tKy0tLS0KKyAxIHwgMTAKKyAyIHwgMjAKKyAzIHwgMzAKKyA0IHwg NDAKKyA1IHwgNTAKKyg1IHJvd3MpCisKK0RST1AgTUFURVJJQUxJWkVEIFZJRVcgbXZfYnVmZmVy ZWRfMTsKKy0tIENNViArIFJNVjogYnVsayBjYXNlIHRvIGV4ZXJjaXNlIGF1dG8tZmx1c2ggKD4x MDAwIHJvd3MpCitDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcgbXZfYnVmZmVyZWRfYnVsayBBUwor ICBTRUxFQ1QgZyBBUyBhIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDI1MDApIGc7CitTRUxFQ1Qg Y291bnQoKikgRlJPTSBtdl9idWZmZXJlZF9idWxrOworIGNvdW50IAorLS0tLS0tLQorICAyNTAw CisoMSByb3cpCisKK1NFTEVDVCBtaW4oYSksIG1heChhKSBGUk9NIG12X2J1ZmZlcmVkX2J1bGs7 CisgbWluIHwgbWF4ICAKKy0tLS0tKy0tLS0tLQorICAgMSB8IDI1MDAKKygxIHJvdykKKworUkVG UkVTSCBNQVRFUklBTElaRUQgVklFVyBtdl9idWZmZXJlZF9idWxrOworU0VMRUNUIGNvdW50KCop IEZST00gbXZfYnVmZmVyZWRfYnVsazsKKyBjb3VudCAKKy0tLS0tLS0KKyAgMjUwMAorKDEgcm93 KQorCitTRUxFQ1QgbWluKGEpLCBtYXgoYSkgRlJPTSBtdl9idWZmZXJlZF9idWxrOworIG1pbiB8 IG1heCAgCistLS0tLSstLS0tLS0KKyAgIDEgfCAyNTAwCisoMSByb3cpCisKK0RST1AgTUFURVJJ QUxJWkVEIFZJRVcgbXZfYnVmZmVyZWRfYnVsazsKKy0tIFdpZGUgdHVwbGVzOiB2ZXJpZnkgbm8g cmVncmVzc2lvbgorQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG12X2J1ZmZlcmVkX3dpZGUgQVMK KyAgU0VMRUNUIGcgQVMgaWQsCisgICAgICAgICByZXBlYXQoJ3gnLCAyMDApIEFTIGNvbDEsCisg ICAgICAgICByZXBlYXQoJ3knLCAyMDApIEFTIGNvbDIsCisgICAgICAgICByZXBlYXQoJ3onLCAy MDApIEFTIGNvbDMKKyAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBnOworU0VMRUNUIGNv dW50KCopIEZST00gbXZfYnVmZmVyZWRfd2lkZTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgIDEwMAor KDEgcm93KQorCitTRUxFQ1QgaWQsIGxlbmd0aChjb2wxKSwgbGVuZ3RoKGNvbDIpLCBsZW5ndGgo Y29sMykKKyAgRlJPTSBtdl9idWZmZXJlZF93aWRlIFdIRVJFIGlkIElOICgxLCA1MCwgMTAwKSBP UkRFUiBCWSBpZDsKKyBpZCAgfCBsZW5ndGggfCBsZW5ndGggfCBsZW5ndGggCistLS0tLSstLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLQorICAgMSB8ICAgIDIwMCB8ICAgIDIwMCB8ICAgIDIwMAor ICA1MCB8ICAgIDIwMCB8ICAgIDIwMCB8ICAgIDIwMAorIDEwMCB8ICAgIDIwMCB8ICAgIDIwMCB8 ICAgIDIwMAorKDMgcm93cykKKworRFJPUCBNQVRFUklBTElaRUQgVklFVyBtdl9idWZmZXJlZF93 aWRlOworLS0gVm9sYXRpbGUtZnVuY3Rpb24gZmFsbGJhY2s6IHJhbmRvbSgpIHRyaWdnZXJzIGNv bnNlcnZhdGl2ZSBndWFyZC4KKy0tIFJlc3VsdCBtdXN0IHN0aWxsIGJlIGNvcnJlY3QgdGhyb3Vn aCB0aGUgc2luZ2xlLXJvdyBwYXRoLgorQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG12X3ZvbGF0 aWxlIEFTCisgIFNFTEVDVCBnIEFTIGEsIHJhbmRvbSgpIEFTIHIgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTApIGc7CitTRUxFQ1QgY291bnQoKikgRlJPTSBtdl92b2xhdGlsZTsKKyBjb3VudCAK Ky0tLS0tLS0KKyAgICAxMAorKDEgcm93KQorCitTRUxFQ1QgYSBGUk9NIG12X3ZvbGF0aWxlIE9S REVSIEJZIGE7CisgYSAgCistLS0tCisgIDEKKyAgMgorICAzCisgIDQKKyAgNQorICA2CisgIDcK KyAgOAorICA5CisgMTAKKygxMCByb3dzKQorCitSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIG12 X3ZvbGF0aWxlOworU0VMRUNUIGNvdW50KCopIEZST00gbXZfdm9sYXRpbGU7CisgY291bnQgCist LS0tLS0tCisgICAgMTAKKygxIHJvdykKKworU0VMRUNUIGEgRlJPTSBtdl92b2xhdGlsZSBPUkRF UiBCWSBhOworIGEgIAorLS0tLQorICAxCisgIDIKKyAgMworICA0CisgIDUKKyAgNgorICA3Cisg IDgKKyAgOQorIDEwCisoMTAgcm93cykKKworRFJPUCBNQVRFUklBTElaRUQgVklFVyBtdl92b2xh dGlsZTsKKy0tIFdJVEggTk8gREFUQTogdW5jaGFuZ2VkIGJlaGF2aW9yCitDUkVBVEUgTUFURVJJ QUxJWkVEIFZJRVcgbXZfbm9kYXRhIEFTIFNFTEVDVCAxIEFTIGEgV0lUSCBOTyBEQVRBOworU0VM RUNUIGNvdW50KCopIEZST00gbXZfbm9kYXRhOyAgLS0gZXJyb3I6IG5vdCBwb3B1bGF0ZWQKK0VS Uk9SOiAgbWF0ZXJpYWxpemVkIHZpZXcgIm12X25vZGF0YSIgaGFzIG5vdCBiZWVuIHBvcHVsYXRl ZAorSElOVDogIFVzZSB0aGUgUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyBjb21tYW5kLgorUkVG UkVTSCBNQVRFUklBTElaRUQgVklFVyBtdl9ub2RhdGEgV0lUSCBOTyBEQVRBOworRFJPUCBNQVRF UklBTElaRUQgVklFVyBtdl9ub2RhdGE7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9tYXR2aWV3LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21hdHZpZXcuc3FsCmluZGV4IDkz NDQyNmI5YWU4Li40M2NlZWU1MGU5MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv bWF0dmlldy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWF0dmlldy5zcWwKQEAgLTMx OCwzICszMTgsNjIgQEAgRVhQTEFJTiAoQU5BTFlaRSwgQ09TVFMgT0ZGLCBTVU1NQVJZIE9GRiwg VElNSU5HIE9GRiwgQlVGRkVSUyBPRkYpCiAgIENSRUFURSBNQVRFUklBTElaRUQgVklFVyBJRiBO T1QgRVhJU1RTIG1hdHZpZXdfaW5lX3RhYiBBUwogICAgIFNFTEVDVCAxIC8gMCBXSVRIIE5PIERB VEE7IC0tIG9rCiBEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIG1hdHZpZXdfaW5lX3RhYjsKKworLS0K Ky0tIFRlc3RzIGZvciBDTVYvUk1WIHdpdGggYnVmZmVyZWQtaW5zZXJ0IHBhdGguCistLQorLS0g VGhlc2UgdGVzdHMgdmVyaWZ5IGNvcnJlY3RuZXNzIHVuZGVyIGJvdGggdGhlIGJ1ZmZlcmVkIHBh dGggKG5vIHZvbGF0aWxlCistLSBmdW5jdGlvbnMpIGFuZCB0aGUgZmFsbGJhY2sgc2luZ2xlLXJv dyBwYXRoICh2b2xhdGlsZSBmdW5jdGlvbnMgcHJlc2VudCkuCistLSBQYXRoIHNlbGVjdGlvbiBp cyBub3QgZGlyZWN0bHkgb2JzZXJ2YWJsZSBpbiBTUUwgb3V0cHV0LgorLS0KKworLS0gQ01WOiBi YXNpYyBjb3JyZWN0bmVzcworQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG12X2J1ZmZlcmVkXzEg QVMKKyAgU0VMRUNUIGcgQVMgYSwgZyAqIDEwIEFTIGIgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg NSkgZzsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG12X2J1ZmZlcmVkXzE7CitTRUxFQ1QgKiBGUk9N IG12X2J1ZmZlcmVkXzEgT1JERVIgQlkgYTsKKworLS0gUk1WOiByZWZyZXNoIHJlcG9wdWxhdGVz IGNvcnJlY3RseQorUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyBtdl9idWZmZXJlZF8xOworU0VM RUNUIGNvdW50KCopIEZST00gbXZfYnVmZmVyZWRfMTsKK1NFTEVDVCAqIEZST00gbXZfYnVmZmVy ZWRfMSBPUkRFUiBCWSBhOworRFJPUCBNQVRFUklBTElaRUQgVklFVyBtdl9idWZmZXJlZF8xOwor CistLSBDTVYgKyBSTVY6IGJ1bGsgY2FzZSB0byBleGVyY2lzZSBhdXRvLWZsdXNoICg+MTAwMCBy b3dzKQorQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG12X2J1ZmZlcmVkX2J1bGsgQVMKKyAgU0VM RUNUIGcgQVMgYSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyNTAwKSBnOworU0VMRUNUIGNvdW50 KCopIEZST00gbXZfYnVmZmVyZWRfYnVsazsKK1NFTEVDVCBtaW4oYSksIG1heChhKSBGUk9NIG12 X2J1ZmZlcmVkX2J1bGs7CitSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIG12X2J1ZmZlcmVkX2J1 bGs7CitTRUxFQ1QgY291bnQoKikgRlJPTSBtdl9idWZmZXJlZF9idWxrOworU0VMRUNUIG1pbihh KSwgbWF4KGEpIEZST00gbXZfYnVmZmVyZWRfYnVsazsKK0RST1AgTUFURVJJQUxJWkVEIFZJRVcg bXZfYnVmZmVyZWRfYnVsazsKKworLS0gV2lkZSB0dXBsZXM6IHZlcmlmeSBubyByZWdyZXNzaW9u CitDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcgbXZfYnVmZmVyZWRfd2lkZSBBUworICBTRUxFQ1Qg ZyBBUyBpZCwKKyAgICAgICAgIHJlcGVhdCgneCcsIDIwMCkgQVMgY29sMSwKKyAgICAgICAgIHJl cGVhdCgneScsIDIwMCkgQVMgY29sMiwKKyAgICAgICAgIHJlcGVhdCgneicsIDIwMCkgQVMgY29s MworICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGc7CitTRUxFQ1QgY291bnQoKikgRlJP TSBtdl9idWZmZXJlZF93aWRlOworU0VMRUNUIGlkLCBsZW5ndGgoY29sMSksIGxlbmd0aChjb2wy KSwgbGVuZ3RoKGNvbDMpCisgIEZST00gbXZfYnVmZmVyZWRfd2lkZSBXSEVSRSBpZCBJTiAoMSwg NTAsIDEwMCkgT1JERVIgQlkgaWQ7CitEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIG12X2J1ZmZlcmVk X3dpZGU7CisKKy0tIFZvbGF0aWxlLWZ1bmN0aW9uIGZhbGxiYWNrOiByYW5kb20oKSB0cmlnZ2Vy cyBjb25zZXJ2YXRpdmUgZ3VhcmQuCistLSBSZXN1bHQgbXVzdCBzdGlsbCBiZSBjb3JyZWN0IHRo cm91Z2ggdGhlIHNpbmdsZS1yb3cgcGF0aC4KK0NSRUFURSBNQVRFUklBTElaRUQgVklFVyBtdl92 b2xhdGlsZSBBUworICBTRUxFQ1QgZyBBUyBhLCByYW5kb20oKSBBUyByIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwKSBnOworU0VMRUNUIGNvdW50KCopIEZST00gbXZfdm9sYXRpbGU7CitTRUxF Q1QgYSBGUk9NIG12X3ZvbGF0aWxlIE9SREVSIEJZIGE7CitSRUZSRVNIIE1BVEVSSUFMSVpFRCBW SUVXIG12X3ZvbGF0aWxlOworU0VMRUNUIGNvdW50KCopIEZST00gbXZfdm9sYXRpbGU7CitTRUxF Q1QgYSBGUk9NIG12X3ZvbGF0aWxlIE9SREVSIEJZIGE7CitEUk9QIE1BVEVSSUFMSVpFRCBWSUVX IG12X3ZvbGF0aWxlOworCistLSBXSVRIIE5PIERBVEE6IHVuY2hhbmdlZCBiZWhhdmlvcgorQ1JF QVRFIE1BVEVSSUFMSVpFRCBWSUVXIG12X25vZGF0YSBBUyBTRUxFQ1QgMSBBUyBhIFdJVEggTk8g REFUQTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG12X25vZGF0YTsgIC0tIGVycm9yOiBub3QgcG9w dWxhdGVkCitSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIG12X25vZGF0YSBXSVRIIE5PIERBVEE7 CitEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIG12X25vZGF0YTsKLS0gCjIuNTIuMAoK --00000000000010bb5b06507da644 Content-Type: application/octet-stream; name="v1-0004-copy-adopt-buffered-insert-API-for-COPY-FROM.patch" Content-Disposition: attachment; filename="v1-0004-copy-adopt-buffered-insert-API-for-COPY-FROM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_moi4bjnt3 RnJvbSA2OTZlOGJjMGI1NjA2Mzg1NDQ0ZDZmODkzOTdhYTNlM2I2ODAxZDQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFRodSwgMjMgQXByIDIwMjYgMTM6NDI6NDYgLTA3MDAKU3ViamVjdDogW1BBVENIIHYxIDQvNV0g Y29weTogYWRvcHQgYnVmZmVyZWQtaW5zZXJ0IEFQSSBmb3IgQ09QWSBGUk9NCgpBZG9wdCB0aGUg YnVmZmVyZWQtaW5zZXJ0IGxpZmVjeWNsZSBBUEkgaW4gQ09QWSBGUk9NIGZvciBub24tRkRXIGhl YXAKdGFyZ2V0cywgbW92aW5nIGJ1ZmZlcmluZyBvd25lcnNoaXAgZnJvbSBDT1BZJ3MgbG9jYWwg bXVsdGktaW5zZXJ0CmluZnJhc3RydWN0dXJlIGludG8gdGhlIHRhYmxlIEFNLgoKQ09QWSdzIGV4 aXN0aW5nIGVsaWdpYmlsaXR5IHBvbGljeSByZW1haW5zIHVuY2hhbmdlZC4gVGhlIG5vbi1GRFcK YnVmZmVyZWQgcGF0aCBub3cgdXNlcyB0YWJsZV9idWZmZXJlZF9pbnNlcnRfYmVnaW4oKS9wdXQo KS9mbHVzaCgpL2VuZCgpCndpdGggYSBDT1BZLWxvY2FsIGZsdXNoIGNhbGxiYWNrIGZvciBwZXIt dHVwbGUgcG9zdC1pbnNlcnQgd29yaywKaW5jbHVkaW5nIGluZGV4IHVwZGF0ZXMgYW5kIEFGVEVS IFJPVyBJTlNFUlQgdHJpZ2dlcnMuIEZEVyBiYXRjaGluZyBpcwp1bmNoYW5nZWQuCgpBZGQgZm9j dXNlZCBDT1BZIHJlZ3Jlc3Npb24gY292ZXJhZ2UgZm9yIGJhc2ljIGNvcnJlY3RuZXNzLCBidWxr IGlucHV0LAppbmRleGVkIHRhcmdldHMsIGFuZCBBRlRFUiBST1cgdHJpZ2dlciBiZWhhdmlvci4K LS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgIHwgMTg1ICsrKysrKysrKysr KysrKysrKysrKysrKysrKy0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IHwg MTY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5 LnNxbCAgICAgIHwgMTAyICsrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNDQwIGlu c2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHlmcm9tLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4 IDY0YWMzMDYzYzYxLi5mNzMzYmQyZDI5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weWZyb20uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCkBAIC03 Niw2ICs3Niw4IEBACiAgKi8KICNkZWZpbmUgTUFYX1BBUlRJVElPTl9CVUZGRVJTCTMyCiAKK3R5 cGVkZWYgc3RydWN0IENvcHlCdWZmZXJlZEZsdXNoU3RhdGUgQ29weUJ1ZmZlcmVkRmx1c2hTdGF0 ZTsKKwogLyogU3RvcmVzIG11bHRpLWluc2VydCBkYXRhIHJlbGF0ZWQgdG8gYSBzaW5nbGUgcmVs YXRpb24gaW4gQ29weUZyb20uICovCiB0eXBlZGVmIHN0cnVjdCBDb3B5TXVsdGlJbnNlcnRCdWZm ZXIKIHsKQEAgLTgzLDYgKzg1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29weU11bHRpSW5zZXJ0QnVm ZmVyCiAJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbzsJLyogUmVzdWx0UmVsSW5mbyBmb3Ig J3JlbGlkJyAqLwogCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlOwkvKiBCdWxrSW5zZXJ0U3RhdGUg Zm9yIHRoaXMgcmVsIGlmIHBsYWluCiAJCQkJCQkJCSAqIHRhYmxlOyBOVUxMIGlmIGZvcmVpZ24g dGFibGUgKi8KKwlUYWJsZUJ1ZmZlcmVkSW5zZXJ0U3RhdGUgYnVmZmVyZWRfc3RhdGU7CS8qIEFN LW93bmVkIGJ1ZmZlcmVkLWluc2VydAorCQkJCQkJCQkJCQkJICogc3RhdGUsIG9yIE5VTEwgKi8K KwlDb3B5QnVmZmVyZWRGbHVzaFN0YXRlICpmbHVzaF9jdHg7CS8qIGZsdXNoIGNhbGxiYWNrIGNv bnRleHQsIG9yIE5VTEwgKi8KIAlpbnQJCQludXNlZDsJCQkvKiBudW1iZXIgb2YgJ3Nsb3RzJyBj b250YWluaW5nIHR1cGxlcyAqLwogCXVpbnQ2NAkJbGluZW5vc1tNQVhfQlVGRkVSRURfVFVQTEVT XTsJLyogTGluZSAjIG9mIHR1cGxlIGluIGNvcHkKIAkJCQkJCQkJCQkJCSAqIHN0cmVhbSAqLwpA QCAtMTAyLDggKzEwNywyNCBAQCB0eXBlZGVmIHN0cnVjdCBDb3B5TXVsdGlJbnNlcnRJbmZvCiAJ RVN0YXRlCSAgICplc3RhdGU7CQkJLyogRXhlY3V0b3Igc3RhdGUgdXNlZCBmb3IgQ09QWSAqLwog CUNvbW1hbmRJZAlteWNpZDsJCQkvKiBDb21tYW5kIElkIHVzZWQgZm9yIENPUFkgKi8KIAl1aW50 MzIJCXRpX29wdGlvbnM7CQkvKiB0YWJsZSBpbnNlcnQgb3B0aW9ucyAqLworCWludDY0CSAgICpw cm9jZXNzZWQ7CQkvKiBwb2ludGVyIHRvIENvcHlGcm9tJ3Mgcm93IGNvdW50ZXIgKi8KIH0gQ29w eU11bHRpSW5zZXJ0SW5mbzsKIAorLyoKKyAqIENvbnRleHQgZm9yIHRoZSBidWZmZXJlZC1pbnNl cnQgZmx1c2ggY2FsbGJhY2sgdXNlZCBieSBDT1BZLiAgQ2FycmllcyB0aGUKKyAqIHN0YXRlIG5l ZWRlZCB0byBwZXJmb3JtIHBlci10dXBsZSBwb3N0LWluc2VydCB3b3JrIChpbmRleCB1cGRhdGVz LCBBRlRFUgorICogUk9XIElOU0VSVCB0cmlnZ2VycywgZXJyb3IgY29udGV4dCwgcHJvZ3Jlc3Mg dHJhY2tpbmcpLgorICovCit0eXBlZGVmIHN0cnVjdCBDb3B5QnVmZmVyZWRGbHVzaFN0YXRlCit7 CisJQ29weUZyb21TdGF0ZSBjc3RhdGU7CisJRVN0YXRlCSAgICplc3RhdGU7CisJUmVzdWx0UmVs SW5mbyAqcmVzdWx0UmVsSW5mbzsKKwlpbnQ2NAkgICAqcHJvY2Vzc2VkOwkJLyogcG9pbnRlciB0 byBDb3B5RnJvbSdzIHByb2Nlc3NlZCBjb3VudGVyICovCit9IENvcHlCdWZmZXJlZEZsdXNoU3Rh dGU7CisKK3N0YXRpYyB2b2lkIENvcHlCdWZmZXJlZEZsdXNoQ2FsbGJhY2sodm9pZCAqY29udGV4 dCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCiAKIC8qIG5vbi1leHBvcnQgZnVuY3Rpb24gcHJv dG90eXBlcyAqLwogc3RhdGljIHZvaWQgQ2xvc2VQaXBlRnJvbVByb2dyYW0oQ29weUZyb21TdGF0 ZSBjc3RhdGUpOwpAQCAtMzYyLDE1ICszODMsNTcgQEAgQ29weUxpbWl0UHJpbnRvdXRMZW5ndGgo Y29uc3QgY2hhciAqc3RyKQogICogUmVzdWx0UmVsSW5mby4KICAqLwogc3RhdGljIENvcHlNdWx0 aUluc2VydEJ1ZmZlciAqCi1Db3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KFJlc3VsdFJlbEluZm8g KnJyaSkKK0NvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlp bmZvLCBSZXN1bHRSZWxJbmZvICpycmkpCiB7CiAJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZm ZXI7CiAKIAlidWZmZXIgPSBwYWxsb2Nfb2JqZWN0KENvcHlNdWx0aUluc2VydEJ1ZmZlcik7CiAJ bWVtc2V0KGJ1ZmZlci0+c2xvdHMsIDAsIHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIE1BWF9C VUZGRVJFRF9UVVBMRVMpOwogCWJ1ZmZlci0+cmVzdWx0UmVsSW5mbyA9IHJyaTsKLQlidWZmZXIt PmJpc3RhdGUgPSAocnJpLT5yaV9GZHdSb3V0aW5lID09IE5VTEwpID8gR2V0QnVsa0luc2VydFN0 YXRlKCkgOiBOVUxMOwogCWJ1ZmZlci0+bnVzZWQgPSAwOworCWJ1ZmZlci0+YnVmZmVyZWRfc3Rh dGUgPSBOVUxMOworCWJ1ZmZlci0+Zmx1c2hfY3R4ID0gTlVMTDsKKworCWlmIChycmktPnJpX0Zk d1JvdXRpbmUgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIE5vbi1GRFcgdGFibGU6IHRyeSB0aGUg QU0tb3duZWQgYnVmZmVyZWQtaW5zZXJ0IHBhdGguICBUaGUgZmx1c2gKKwkJICogY2FsbGJhY2sg aGFuZGxlcyBpbmRleCB1cGRhdGVzIGFuZCBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJzLgorCQkg Ki8KKwkJQ29weUJ1ZmZlcmVkRmx1c2hTdGF0ZSAqZmx1c2hfY3R4OworCisJCWZsdXNoX2N0eCA9 IHBhbGxvY19vYmplY3QoQ29weUJ1ZmZlcmVkRmx1c2hTdGF0ZSk7CisJCWZsdXNoX2N0eC0+Y3N0 YXRlID0gbWlpbmZvLT5jc3RhdGU7CisJCWZsdXNoX2N0eC0+ZXN0YXRlID0gbWlpbmZvLT5lc3Rh dGU7CisJCWZsdXNoX2N0eC0+cmVzdWx0UmVsSW5mbyA9IHJyaTsKKwkJZmx1c2hfY3R4LT5wcm9j ZXNzZWQgPSBtaWluZm8tPnByb2Nlc3NlZDsKKworCQlidWZmZXItPmJ1ZmZlcmVkX3N0YXRlID0K KwkJCXRhYmxlX2J1ZmZlcmVkX2luc2VydF9iZWdpbihycmktPnJpX1JlbGF0aW9uRGVzYywKKwkJ CQkJCQkJCQltaWluZm8tPm15Y2lkLAorCQkJCQkJCQkJCW1paW5mby0+dGlfb3B0aW9ucyB8CisJ CQkJCQkJCQkJVEFCTEVfSU5TRVJUX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJQ29weUJ1ZmZl cmVkRmx1c2hDYWxsYmFjaywKKwkJCQkJCQkJCQlmbHVzaF9jdHgpOworCisJCWlmIChidWZmZXIt PmJ1ZmZlcmVkX3N0YXRlICE9IE5VTEwpCisJCXsKKwkJCS8qIEFNLW93bmVkIGJ1ZmZlcmluZyBh Y3RpdmU7IG5vIENPUFktc2lkZSBiaXN0YXRlIG5lZWRlZCAqLworCQkJYnVmZmVyLT5iaXN0YXRl ID0gTlVMTDsKKwkJCWJ1ZmZlci0+Zmx1c2hfY3R4ID0gZmx1c2hfY3R4OworCQl9CisJCWVsc2UK KwkJeworCQkJLyogQU0gZG9lcyBub3Qgc3VwcG9ydCBidWZmZXJlZCBpbnNlcnRzOyBmYWxsIGJh Y2sgKi8KKwkJCXBmcmVlKGZsdXNoX2N0eCk7CisJCQlidWZmZXItPmJpc3RhdGUgPSBHZXRCdWxr SW5zZXJ0U3RhdGUoKTsKKwkJfQorCX0KKwllbHNlCisJeworCQkvKiBGRFcgdGFibGU6IG5vIGJ1 ZmZlcmVkLWluc2VydCwgbm8gYmlzdGF0ZSAqLworCQlidWZmZXItPmJpc3RhdGUgPSBOVUxMOwor CX0KIAogCXJldHVybiBidWZmZXI7CiB9CkBAIC0zODQsNyArNDQ3LDcgQEAgQ29weU11bHRpSW5z ZXJ0SW5mb1NldHVwQnVmZmVyKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKIHsKIAlDb3B5 TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlcjsKIAotCWJ1ZmZlciA9IENvcHlNdWx0aUluc2VydEJ1 ZmZlckluaXQocnJpKTsKKwlidWZmZXIgPSBDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KG1paW5m bywgcnJpKTsKIAogCS8qIFNldHVwIGJhY2stbGluayBzbyB3ZSBjYW4gZWFzaWx5IGZpbmQgdGhp cyBidWZmZXIgYWdhaW4gKi8KIAlycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlciA9IGJ1ZmZl cjsKQEAgLTQwMSw3ICs0NjQsNyBAQCBDb3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIoQ29w eU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogc3RhdGljIHZvaWQKIENvcHlNdWx0aUluc2VydElu Zm9Jbml0KENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5mbyAqcnJpLAog CQkJCQkJQ29weUZyb21TdGF0ZSBjc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLCBDb21tYW5kSWQgbXlj aWQsCi0JCQkJCQl1aW50MzIgdGlfb3B0aW9ucykKKwkJCQkJCXVpbnQzMiB0aV9vcHRpb25zLCBp bnQ2NCAqcHJvY2Vzc2VkKQogewogCW1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzID0gTklMOwog CW1paW5mby0+YnVmZmVyZWRUdXBsZXMgPSAwOwpAQCAtNDEwLDYgKzQ3Myw3IEBAIENvcHlNdWx0 aUluc2VydEluZm9Jbml0KENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5m byAqcnJpLAogCW1paW5mby0+ZXN0YXRlID0gZXN0YXRlOwogCW1paW5mby0+bXljaWQgPSBteWNp ZDsKIAltaWluZm8tPnRpX29wdGlvbnMgPSB0aV9vcHRpb25zOworCW1paW5mby0+cHJvY2Vzc2Vk ID0gcHJvY2Vzc2VkOwogCiAJLyoKIAkgKiBPbmx5IHNldHVwIHRoZSBidWZmZXIgd2hlbiBub3Qg ZGVhbGluZyB3aXRoIGEgcGFydGl0aW9uZWQgdGFibGUuCkBAIC01MzIsNiArNTk2LDMyIEBAIENv cHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKIAkJ LyogcmVzZXQgcmVsbmFtZV9vbmx5ICovCiAJCWNzdGF0ZS0+cmVsbmFtZV9vbmx5ID0gZmFsc2U7 CiAJfQorCWVsc2UgaWYgKGJ1ZmZlci0+YnVmZmVyZWRfc3RhdGUgIT0gTlVMTCkKKwl7CisJCWJv b2wJCWxpbmVfYnVmX3ZhbGlkID0gY3N0YXRlLT5saW5lX2J1Zl92YWxpZDsKKwkJdWludDY0CQlz YXZlX2N1cl9saW5lbm8gPSBjc3RhdGUtPmN1cl9saW5lbm87CisKKwkJLyoKKwkJICogQU0tb3du ZWQgYnVmZmVyZWQgcGF0aDogdHVwbGVzIHdlcmUgc3VibWl0dGVkIHZpYSBwdXQoKSBhbmQgYXJl CisJCSAqIGluc2lkZSB0aGUgQU0gYWxyZWFkeS4gIEZsdXNoIHRyaWdnZXJzIHRoZSBiYXRjaCB3 cml0ZSBhbmQgaW52b2tlcworCQkgKiB0aGUgZmx1c2ggY2FsbGJhY2sgb25jZSBwZXIgd3JpdHRl biB0dXBsZSBmb3IgaW5kZXggdXBkYXRlcywKKwkJICogdHJpZ2dlciBmaXJpbmcsIGFuZCBwcm9n cmVzcyB0cmFja2luZy4KKwkJICovCisJCWNzdGF0ZS0+bGluZV9idWZfdmFsaWQgPSBmYWxzZTsK KworCQl0YWJsZV9idWZmZXJlZF9pbnNlcnRfZmx1c2goYnVmZmVyLT5idWZmZXJlZF9zdGF0ZSk7 CisKKwkJLyogQ2xlYXIgc2xvdHMgdGhhdCB3ZXJlIHVzZWQgZm9yIHN0YWdpbmcgYmVmb3JlIHB1 dCgpICovCisJCWZvciAoaSA9IDA7IGkgPCBudXNlZDsgaSsrKQorCQl7CisJCQlpZiAoc2xvdHNb aV0gIT0gTlVMTCkKKwkJCQlFeGVjQ2xlYXJUdXBsZShzbG90c1tpXSk7CisJCX0KKworCQkvKiBy ZXNldCBjdXJfbGluZW5vIGFuZCBsaW5lX2J1Zl92YWxpZCB0byB3aGF0IHRoZXkgd2VyZSAqLwor CQljc3RhdGUtPmxpbmVfYnVmX3ZhbGlkID0gbGluZV9idWZfdmFsaWQ7CisJCWNzdGF0ZS0+Y3Vy X2xpbmVubyA9IHNhdmVfY3VyX2xpbmVubzsKKwl9CiAJZWxzZQogCXsKIAkJQ29tbWFuZElkCW15 Y2lkID0gbWlpbmZvLT5teWNpZDsKQEAgLTYzMSwxMCArNzIxLDIwIEBAIENvcHlNdWx0aUluc2Vy dEJ1ZmZlckNsZWFudXAoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogCS8qIFJlbW92ZSBi YWNrLWxpbmsgdG8gb3Vyc2VsZiAqLwogCXJlc3VsdFJlbEluZm8tPnJpX0NvcHlNdWx0aUluc2Vy dEJ1ZmZlciA9IE5VTEw7CiAKLQlpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZSA9PSBO VUxMKQorCWlmIChidWZmZXItPmJ1ZmZlcmVkX3N0YXRlICE9IE5VTEwpCisJeworCQkvKiBlbmQo KSBmbHVzaGVzIHJlbWFpbmluZyB0dXBsZXMgYW5kIHN1YnN1bWVzIGZpbmlzaF9idWxrX2luc2Vy dCAqLworCQl0YWJsZV9idWZmZXJlZF9pbnNlcnRfZW5kKGJ1ZmZlci0+YnVmZmVyZWRfc3RhdGUp OworCQlidWZmZXItPmJ1ZmZlcmVkX3N0YXRlID0gTlVMTDsKKwkJaWYgKGJ1ZmZlci0+Zmx1c2hf Y3R4ICE9IE5VTEwpCisJCQlwZnJlZShidWZmZXItPmZsdXNoX2N0eCk7CisJfQorCWVsc2UgaWYg KHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUgPT0gTlVMTCkKIAl7CiAJCUFzc2VydChidWZm ZXItPmJpc3RhdGUgIT0gTlVMTCk7CiAJCUZyZWVCdWxrSW5zZXJ0U3RhdGUoYnVmZmVyLT5iaXN0 YXRlKTsKKwkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0 aW9uRGVzYywKKwkJCQkJCQkJIG1paW5mby0+dGlfb3B0aW9ucyk7CiAJfQogCWVsc2UKIAkJQXNz ZXJ0KGJ1ZmZlci0+YmlzdGF0ZSA9PSBOVUxMKTsKQEAgLTY0MywxMCArNzQzLDYgQEAgQ29weU11 bHRpSW5zZXJ0QnVmZmVyQ2xlYW51cChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAJZm9y IChpID0gMDsgaSA8IE1BWF9CVUZGRVJFRF9UVVBMRVMgJiYgYnVmZmVyLT5zbG90c1tpXSAhPSBO VUxMOyBpKyspCiAJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoYnVmZmVyLT5zbG90c1tp XSk7CiAKLQlpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZSA9PSBOVUxMKQotCQl0YWJs ZV9maW5pc2hfYnVsa19pbnNlcnQocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAotCQkJ CQkJCQkgbWlpbmZvLT50aV9vcHRpb25zKTsKLQogCXBmcmVlKGJ1ZmZlcik7CiB9CiAKQEAgLTc2 MSwxMiArODU3LDI2IEBAIENvcHlNdWx0aUluc2VydEluZm9TdG9yZShDb3B5TXVsdGlJbnNlcnRJ bmZvICptaWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwKIAlDb3B5TXVsdGlJbnNlcnRCdWZmZXIg KmJ1ZmZlciA9IHJyaS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOwogCiAJQXNzZXJ0KGJ1ZmZl ciAhPSBOVUxMKTsKLQlBc3NlcnQoc2xvdCA9PSBidWZmZXItPnNsb3RzW2J1ZmZlci0+bnVzZWRd KTsKIAotCS8qIFN0b3JlIHRoZSBsaW5lIG51bWJlciBzbyB3ZSBjYW4gcHJvcGVybHkgcmVwb3J0 IGFueSBlcnJvcnMgbGF0ZXIgKi8KKwkvKiBTdG9yZSB0aGUgbGluZSBudW1iZXIgZm9yIGVycm9y IGNvbnRleHQgZHVyaW5nIGZsdXNoICovCiAJYnVmZmVyLT5saW5lbm9zW2J1ZmZlci0+bnVzZWRd ID0gbGluZW5vOwogCi0JLyogUmVjb3JkIHRoaXMgc2xvdCBhcyBiZWluZyB1c2VkICovCisJaWYg KGJ1ZmZlci0+YnVmZmVyZWRfc3RhdGUgIT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIEFNLW93bmVk IGJ1ZmZlcmVkIHBhdGg6IHN1Ym1pdCB0aGUgdHVwbGUgZGlyZWN0bHkgdG8gdGhlIEFNLgorCQkg KiBUaGUgQU0gY2FwdHVyZXMgdGhlIGRhdGEgaW50ZXJuYWxseTsgdGhlIGNhbGxlciByZXRhaW5z IHNsb3QKKwkJICogb3duZXJzaGlwIGFuZCBtYXkgcmV1c2UgaXQuICBUaGUgQU0gbWF5IGF1dG8t Zmx1c2ggZHVyaW5nIHB1dCgpLAorCQkgKiB3aGljaCBmaXJlcyB0aGUgZmx1c2ggY2FsbGJhY2sg Zm9yIGFscmVhZHktYnVmZmVyZWQgdHVwbGVzLgorCQkgKi8KKwkJdGFibGVfYnVmZmVyZWRfaW5z ZXJ0X3B1dChidWZmZXItPmJ1ZmZlcmVkX3N0YXRlLCBzbG90KTsKKwl9CisJZWxzZQorCXsKKwkJ LyogTGVnYWN5IHBhdGg6IHNsb3Qgd2FzIGFscmVhZHkgcGxhY2VkIGludG8gYnVmZmVyLT5zbG90 cyBieSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNsb3QgPT0gYnVmZmVyLT5zbG90c1tidWZmZXItPm51 c2VkXSk7CisJfQorCiAJYnVmZmVyLT5udXNlZCsrOwogCiAJLyogVXBkYXRlIGhvdyBtYW55IHR1 cGxlcyBhcmUgc3RvcmVkIGFuZCB0aGVpciBzaXplICovCkBAIC03NzQsNiArODg0LDU1IEBAIENv cHlNdWx0aUluc2VydEluZm9TdG9yZShDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sIFJlc3Vs dFJlbEluZm8gKnJyaSwKIAltaWluZm8tPmJ1ZmZlcmVkQnl0ZXMgKz0gdHVwbGVuOwogfQogCisv KgorICogRmx1c2ggY2FsbGJhY2sgZm9yIHRoZSBBTS1vd25lZCBidWZmZXJlZC1pbnNlcnQgcGF0 aC4KKyAqCisgKiBJbnZva2VkIG9uY2UgcGVyIGZsdXNoZWQgdHVwbGUsIGluIGluc2VydGlvbiBv cmRlci4gIFRoZSBzbG90IGlzIGFuCisgKiBBTS1vd25lZCBzY3JhdGNoIG9iamVjdCB3aXRoIFRJ RCBzZXQ7IGl0IGlzIHZhbGlkIG9ubHkgZm9yIHRoZSBkdXJhdGlvbgorICogb2YgdGhpcyBjYWxs YmFjay4KKyAqLworc3RhdGljIHZvaWQKK0NvcHlCdWZmZXJlZEZsdXNoQ2FsbGJhY2sodm9pZCAq Y29udGV4dCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQ29weUJ1ZmZlcmVkRmx1c2hTdGF0 ZSAqY3R4ID0gKENvcHlCdWZmZXJlZEZsdXNoU3RhdGUgKikgY29udGV4dDsKKwlSZXN1bHRSZWxJ bmZvICpyZXN1bHRSZWxJbmZvID0gY3R4LT5yZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkgICAqZXN0 YXRlID0gY3R4LT5lc3RhdGU7CisKKwkvKgorCSAqIGNzdGF0ZS0+Y3VyX2xpbmVubyBpcyBub3Qg cmVzdG9yZWQgcGVyLXR1cGxlIGhlcmUuICBEdXJpbmcgYXV0by1mbHVzaAorCSAqICh0cmlnZ2Vy ZWQgaW5zaWRlIHB1dCgpKSwgaXQgcmVmbGVjdHMgdGhlIGxpbmUgYmVpbmcgc3RvcmVkLCB3aGlj aCBpcworCSAqIHRoZSBiZXN0IGF2YWlsYWJsZSBjb250ZXh0LiAgRHVyaW5nIGV4cGxpY2l0IGZs dXNoLCB0aGUgY2FsbGVyIGhhcworCSAqIGFscmVhZHkgc2V0IGxpbmVfYnVmX3ZhbGlkID0gZmFs c2UsIHNvIG9ubHkgdGhlIHJlbGF0aW9uIG5hbWUgYXBwZWFycworCSAqIGluIGVycm9yIGNvbnRl eHQg4oCUIG1hdGNoaW5nIHRoZSBsZWdhY3kgbXVsdGktaW5zZXJ0IHBhdGguCisJICovCisKKwlp ZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCisJeworCQlMaXN0CSAgICpyZWNo ZWNrSW5kZXhlczsKKworCQlyZWNoZWNrSW5kZXhlcyA9IEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhy ZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJCQkgICBlc3RhdGUsIDAsIHNsb3QsCisJCQkJCQkJCQkJ CSAgIE5JTCwgTlVMTCk7CisJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVs SW5mbywKKwkJCQkJCQkgc2xvdCwgcmVjaGVja0luZGV4ZXMsCisJCQkJCQkJIGN0eC0+Y3N0YXRl LT50cmFuc2l0aW9uX2NhcHR1cmUpOworCQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOworCX0K KwllbHNlIGlmIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCQkgKHJl c3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKKwkJCSAg cmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X25ld190YWJsZSkpCisJewor CQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJIHNs b3QsIE5JTCwKKwkJCQkJCQkgY3R4LT5jc3RhdGUtPnRyYW5zaXRpb25fY2FwdHVyZSk7CisJfQor CisJLyogVXBkYXRlIHJvdyBjb3VudGVyIGFuZCBwcm9ncmVzcyAqLworCSgqY3R4LT5wcm9jZXNz ZWQpKys7CisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DT1BZX1RVUExF U19QUk9DRVNTRUQsCisJCQkJCQkJCSAqY3R4LT5wcm9jZXNzZWQpOworfQorCiAvKgogICogQ29w eSBGUk9NIGZpbGUgdG8gcmVsYXRpb24uCiAgKi8KQEAgLTEwNzMsNyArMTIzMiw3IEBAIENvcHlG cm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJaW5zZXJ0TWV0aG9kID0gQ0lNX01VTFRJOwog CiAJCUNvcHlNdWx0aUluc2VydEluZm9Jbml0KCZtdWx0aUluc2VydEluZm8sIHJlc3VsdFJlbElu Zm8sIGNzdGF0ZSwKLQkJCQkJCQkJZXN0YXRlLCBteWNpZCwgdGlfb3B0aW9ucyk7CisJCQkJCQkJ CWVzdGF0ZSwgbXljaWQsIHRpX29wdGlvbnMsICZwcm9jZXNzZWQpOwogCX0KIAogCS8qCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9jb3B5Lm91dAppbmRleCAxNzE0ZmFhYjM5Yy4uZWM4ZTc4MWM1Y2UgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dApAQCAtNTk0LDMgKzU5NCwxNjkgQEAgaWQJdmFs CiA1CTE1CiA2CTE2CiBEUk9QIFRBQkxFIFBQOworLS0KKy0tIFRlc3RzIGZvciBDT1BZIEZST00g d2l0aCBidWZmZXJlZC1pbnNlcnQgcGF0aC4KKy0tCistLSBUaGVzZSB2YWxpZGF0ZSBjb3JyZWN0 bmVzcyBvZiBDT1BZIEZST00gdW5kZXIgdGhlIEFNLW93bmVkIGJ1ZmZlcmVkIHBhdGguCistLSBQ YXRoIHNlbGVjdGlvbiBpcyBub3QgZGlyZWN0bHkgb2JzZXJ2YWJsZSBpbiBTUUwgb3V0cHV0Lgor LS0KKy0tIEJhc2ljIENPUFk6IHNtYWxsIHJvdyBjb3VudAorQ1JFQVRFIFRBQkxFIGNvcHlfYnVm ZmVyZWRfYmFzaWMgKGEgaW50LCBiIHRleHQpOworQ09QWSBjb3B5X2J1ZmZlcmVkX2Jhc2ljIEZS T00gc3RkaW47CitTRUxFQ1QgY291bnQoKikgRlJPTSBjb3B5X2J1ZmZlcmVkX2Jhc2ljOworIGNv dW50IAorLS0tLS0tLQorICAgICAzCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY29weV9idWZm ZXJlZF9iYXNpYyBPUkRFUiBCWSBhOworIGEgfCAgIGIgICAKKy0tLSstLS0tLS0tCisgMSB8IGhl bGxvCisgMiB8IHdvcmxkCisgMyB8IGZvbworKDMgcm93cykKKworRFJPUCBUQUJMRSBjb3B5X2J1 ZmZlcmVkX2Jhc2ljOworLS0gQnVsayBDT1BZOiBleGVyY2lzZSBidWZmZXJlZCBwYXRoIHdpdGgg ZW5vdWdoIHJvd3MgZm9yIGF1dG8tZmx1c2guCistLSBHZW5lcmF0ZSBkYXRhIGluIGEgc291cmNl IHRhYmxlLCBDT1BZIFRPIGEgZmlsZSwgdGhlbiBDT1BZIEZST00gdGhhdCBmaWxlLgorQ1JFQVRF IFRBQkxFIGNvcHlfYnVsa19zcmMgKGEgaW50LCBiIHRleHQpOworSU5TRVJUIElOVE8gY29weV9i dWxrX3NyYyBTRUxFQ1QgZywgJ3Jvdy0nIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjUw MCkgZzsKK0NSRUFURSBUQUJMRSBjb3B5X2J1bGtfZHN0IChhIGludCwgYiB0ZXh0KTsKK0NPUFkg Y29weV9idWxrX3NyYyBUTyAnL3RtcC9jb3B5X2J1ZmZlcmVkX2J1bGtfdGVzdC5jc3YnIENTVjsK K0NPUFkgY29weV9idWxrX2RzdCBGUk9NICcvdG1wL2NvcHlfYnVmZmVyZWRfYnVsa190ZXN0LmNz dicgQ1NWOworU0VMRUNUIGNvdW50KCopIEZST00gY29weV9idWxrX2RzdDsKKyBjb3VudCAKKy0t LS0tLS0KKyAgMjUwMAorKDEgcm93KQorCitTRUxFQ1QgbWluKGEpLCBtYXgoYSkgRlJPTSBjb3B5 X2J1bGtfZHN0OworIG1pbiB8IG1heCAgCistLS0tLSstLS0tLS0KKyAgIDEgfCAyNTAwCisoMSBy b3cpCisKKy0tIFZlcmlmeSBkYXRhIGludGVncml0eQorU0VMRUNUIGNvdW50KCopIEZST00gY29w eV9idWxrX2RzdCBkIEpPSU4gY29weV9idWxrX3NyYyBzIE9OIGQuYSA9IHMuYSBBTkQgZC5iID0g cy5iOworIGNvdW50IAorLS0tLS0tLQorICAyNTAwCisoMSByb3cpCisKK0RST1AgVEFCTEUgY29w eV9idWxrX3NyYzsKK0RST1AgVEFCTEUgY29weV9idWxrX2RzdDsKKy0tIENPUFkgaW50byBpbmRl eGVkIHRhYmxlOiB2ZXJpZnkgaW5kZXggbWFpbnRlbmFuY2UgdmlhIGZsdXNoIGNhbGxiYWNrCitD UkVBVEUgVEFCTEUgY29weV9pbmRleGVkIChhIGludCBQUklNQVJZIEtFWSwgYiB0ZXh0KTsKK0NP UFkgY29weV9pbmRleGVkIEZST00gc3RkaW47CitTRUxFQ1QgY291bnQoKikgRlJPTSBjb3B5X2lu ZGV4ZWQ7CisgY291bnQgCistLS0tLS0tCisgICAgIDUKKygxIHJvdykKKworU0VMRUNUICogRlJP TSBjb3B5X2luZGV4ZWQgT1JERVIgQlkgYTsKKyBhIHwgICAgYiAgICAKKy0tLSstLS0tLS0tLS0K KyAxIHwgYWxwaGEKKyAyIHwgYmV0YQorIDMgfCBnYW1tYQorIDQgfCBkZWx0YQorIDUgfCBlcHNp bG9uCisoNSByb3dzKQorCistLSBWZXJpZnkgaW5kZXggaXMgdXNhYmxlCitTRVQgZW5hYmxlX3Nl cXNjYW4gPSBvZmY7CitTRUxFQ1QgYSBGUk9NIGNvcHlfaW5kZXhlZCBXSEVSRSBhID0gMzsKKyBh IAorLS0tCisgMworKDEgcm93KQorCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsKK0RST1AgVEFCTEUg Y29weV9pbmRleGVkOworLS0gQ09QWSB3aXRoIEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcjogdmVy aWZ5IHRyaWdnZXIgZmlyZXMgdmlhIGZsdXNoIGNhbGxiYWNrCitDUkVBVEUgVEFCTEUgY29weV90 cmlnZ2VyX3RndCAoYSBpbnQsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgY29weV90cmlnZ2VyX2xv ZyAoYSBpbnQsIGIgdGV4dCk7CitDUkVBVEUgRlVOQ1RJT04gY29weV90cmlnZ2VyX2ZuKCkgUkVU VVJOUyB0cmlnZ2VyIEFTICQkCitCRUdJTgorICBJTlNFUlQgSU5UTyBjb3B5X3RyaWdnZXJfbG9n KGEsIGIpIFZBTFVFUyAoTkVXLmEsIE5FVy5iKTsKKyAgUkVUVVJOIE5FVzsKK0VORDsKKyQkIExB TkdVQUdFIHBscGdzcWw7CitDUkVBVEUgVFJJR0dFUiBjb3B5X2FmdGVyX2lucworICBBRlRFUiBJ TlNFUlQgT04gY29weV90cmlnZ2VyX3RndAorICBGT1IgRUFDSCBST1cgRVhFQ1VURSBGVU5DVElP TiBjb3B5X3RyaWdnZXJfZm4oKTsKK0NPUFkgY29weV90cmlnZ2VyX3RndCBGUk9NIHN0ZGluOwor U0VMRUNUIGNvdW50KCopIEZST00gY29weV90cmlnZ2VyX3RndDsKKyBjb3VudCAKKy0tLS0tLS0K KyAgICAgMworKDEgcm93KQorCitTRUxFQ1QgYSwgYiBGUk9NIGNvcHlfdHJpZ2dlcl90Z3QgT1JE RVIgQlkgYTsKKyBhICB8ICAgYiAgICAKKy0tLS0rLS0tLS0tLS0KKyAxMCB8IGZpcnN0CisgMjAg fCBzZWNvbmQKKyAzMCB8IHRoaXJkCisoMyByb3dzKQorCistLSBWZXJpZnkgdHJpZ2dlciBmaXJl ZCBmb3IgZWFjaCByb3cKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGNvcHlfdHJpZ2dlcl9sb2c7Cisg Y291bnQgCistLS0tLS0tCisgICAgIDMKKygxIHJvdykKKworU0VMRUNUIGEsIGIgRlJPTSBjb3B5 X3RyaWdnZXJfbG9nIE9SREVSIEJZIGE7CisgYSAgfCAgIGIgICAgCistLS0tKy0tLS0tLS0tCisg MTAgfCBmaXJzdAorIDIwIHwgc2Vjb25kCisgMzAgfCB0aGlyZAorKDMgcm93cykKKworRFJPUCBU QUJMRSBjb3B5X3RyaWdnZXJfdGd0IENBU0NBREU7CitEUk9QIFRBQkxFIGNvcHlfdHJpZ2dlcl9s b2c7CitEUk9QIEZVTkNUSU9OIGNvcHlfdHJpZ2dlcl9mbjsKKy0tIFBhcnRpdGlvbmVkIENPUFk6 IHZlcmlmeSBjb3JyZWN0bmVzcyB1bmRlciBwYXJ0aXRpb24gcm91dGluZyB3aXRoIGJ1ZmZlcmVk IHBhdGgKK0NSRUFURSBUQUJMRSBjb3B5X3BhcnRfcm91dGVkICgKKyAgICBpZCBpbnQsCisgICAg dmFsIHRleHQKKykgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgY29weV9w YXJ0X3JvdXRlZF9wMSBQQVJUSVRJT04gT0YgY29weV9wYXJ0X3JvdXRlZAorICAgIEZPUiBWQUxV RVMgRlJPTSAoMSkgVE8gKDEwMCk7CitDUkVBVEUgVEFCTEUgY29weV9wYXJ0X3JvdXRlZF9wMiBQ QVJUSVRJT04gT0YgY29weV9wYXJ0X3JvdXRlZAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBU TyAoMjAwKTsKK0NPUFkgY29weV9wYXJ0X3JvdXRlZCBGUk9NIHN0ZGluOworLS0gVG90YWwgcm93 IGNvdW50CitTRUxFQ1QgY291bnQoKikgRlJPTSBjb3B5X3BhcnRfcm91dGVkOworIGNvdW50IAor LS0tLS0tLQorICAgICA2CisoMSByb3cpCisKKy0tIFBlci1wYXJ0aXRpb24gcm93IGNvdW50cwor U0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywgY291bnQoKikKK0ZST00gY29weV9wYXJ0X3JvdXRl ZAorR1JPVVAgQlkgdGFibGVvaWQgT1JERVIgQlkgdGFibGVvaWQ6OnJlZ2NsYXNzOjpuYW1lOwor ICAgICAgdGFibGVvaWQgICAgICAgfCBjb3VudCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tCisgY29weV9wYXJ0X3JvdXRlZF9wMSB8ICAgICAzCisgY29weV9wYXJ0X3JvdXRlZF9wMiB8 ICAgICAzCisoMiByb3dzKQorCistLSBDb250ZW50IGNvcnJlY3RuZXNzCitTRUxFQ1QgKiBGUk9N IGNvcHlfcGFydF9yb3V0ZWQgT1JERVIgQlkgaWQ7CisgaWQgIHwgICB2YWwgICAKKy0tLS0tKy0t LS0tLS0tLQorICAgMSB8IGFscGhhCisgIDUwIHwgYnJhdm8KKyAgOTkgfCBjaGFybGllCisgMTAw IHwgZGVsdGEKKyAxNTAgfCBlY2hvCisgMTk5IHwgZm94dHJvdAorKDYgcm93cykKKworRFJPUCBU QUJMRSBjb3B5X3BhcnRfcm91dGVkOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29weS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbAppbmRleCBlYWFkMjkwYjI1 Ny4uZTRhMTBlOGNmOTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsCkBAIC01MzUsMyArNTM1LDEwNSBA QCBDUkVBVEUgVEFCTEUgcHBfNTEwIFBBUlRJVElPTiBPRiBwcF8yIEZPUiBWQUxVRVMgRlJPTSAo NSkgVE8gKDEwKTsKIElOU0VSVCBJTlRPIHBwIFNFTEVDVCBnLCAxMCArIGcgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSw2KSBnOwogQ09QWSBwcCBUTyBzdGRvdXQoaGVhZGVyKTsKIERST1AgVEFCTEUg UFA7CisKKy0tCistLSBUZXN0cyBmb3IgQ09QWSBGUk9NIHdpdGggYnVmZmVyZWQtaW5zZXJ0IHBh dGguCistLQorLS0gVGhlc2UgdmFsaWRhdGUgY29ycmVjdG5lc3Mgb2YgQ09QWSBGUk9NIHVuZGVy IHRoZSBBTS1vd25lZCBidWZmZXJlZCBwYXRoLgorLS0gUGF0aCBzZWxlY3Rpb24gaXMgbm90IGRp cmVjdGx5IG9ic2VydmFibGUgaW4gU1FMIG91dHB1dC4KKy0tCisKKy0tIEJhc2ljIENPUFk6IHNt YWxsIHJvdyBjb3VudAorQ1JFQVRFIFRBQkxFIGNvcHlfYnVmZmVyZWRfYmFzaWMgKGEgaW50LCBi IHRleHQpOworQ09QWSBjb3B5X2J1ZmZlcmVkX2Jhc2ljIEZST00gc3RkaW47CisxCWhlbGxvCisy CXdvcmxkCiszCWZvbworXC4KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGNvcHlfYnVmZmVyZWRfYmFz aWM7CitTRUxFQ1QgKiBGUk9NIGNvcHlfYnVmZmVyZWRfYmFzaWMgT1JERVIgQlkgYTsKK0RST1Ag VEFCTEUgY29weV9idWZmZXJlZF9iYXNpYzsKKworLS0gQnVsayBDT1BZOiBleGVyY2lzZSBidWZm ZXJlZCBwYXRoIHdpdGggZW5vdWdoIHJvd3MgZm9yIGF1dG8tZmx1c2guCistLSBHZW5lcmF0ZSBk YXRhIGluIGEgc291cmNlIHRhYmxlLCBDT1BZIFRPIGEgZmlsZSwgdGhlbiBDT1BZIEZST00gdGhh dCBmaWxlLgorQ1JFQVRFIFRBQkxFIGNvcHlfYnVsa19zcmMgKGEgaW50LCBiIHRleHQpOworSU5T RVJUIElOVE8gY29weV9idWxrX3NyYyBTRUxFQ1QgZywgJ3Jvdy0nIHx8IGcgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMjUwMCkgZzsKK0NSRUFURSBUQUJMRSBjb3B5X2J1bGtfZHN0IChhIGludCwg YiB0ZXh0KTsKK0NPUFkgY29weV9idWxrX3NyYyBUTyAnL3RtcC9jb3B5X2J1ZmZlcmVkX2J1bGtf dGVzdC5jc3YnIENTVjsKK0NPUFkgY29weV9idWxrX2RzdCBGUk9NICcvdG1wL2NvcHlfYnVmZmVy ZWRfYnVsa190ZXN0LmNzdicgQ1NWOworU0VMRUNUIGNvdW50KCopIEZST00gY29weV9idWxrX2Rz dDsKK1NFTEVDVCBtaW4oYSksIG1heChhKSBGUk9NIGNvcHlfYnVsa19kc3Q7CistLSBWZXJpZnkg ZGF0YSBpbnRlZ3JpdHkKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGNvcHlfYnVsa19kc3QgZCBKT0lO IGNvcHlfYnVsa19zcmMgcyBPTiBkLmEgPSBzLmEgQU5EIGQuYiA9IHMuYjsKK0RST1AgVEFCTEUg Y29weV9idWxrX3NyYzsKK0RST1AgVEFCTEUgY29weV9idWxrX2RzdDsKKworLS0gQ09QWSBpbnRv IGluZGV4ZWQgdGFibGU6IHZlcmlmeSBpbmRleCBtYWludGVuYW5jZSB2aWEgZmx1c2ggY2FsbGJh Y2sKK0NSRUFURSBUQUJMRSBjb3B5X2luZGV4ZWQgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHRleHQp OworQ09QWSBjb3B5X2luZGV4ZWQgRlJPTSBzdGRpbjsKKzEJYWxwaGEKKzIJYmV0YQorMwlnYW1t YQorNAlkZWx0YQorNQllcHNpbG9uCitcLgorU0VMRUNUIGNvdW50KCopIEZST00gY29weV9pbmRl eGVkOworU0VMRUNUICogRlJPTSBjb3B5X2luZGV4ZWQgT1JERVIgQlkgYTsKKy0tIFZlcmlmeSBp bmRleCBpcyB1c2FibGUKK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsKK1NFTEVDVCBhIEZST00g Y29weV9pbmRleGVkIFdIRVJFIGEgPSAzOworUkVTRVQgZW5hYmxlX3NlcXNjYW47CitEUk9QIFRB QkxFIGNvcHlfaW5kZXhlZDsKKworLS0gQ09QWSB3aXRoIEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dl cjogdmVyaWZ5IHRyaWdnZXIgZmlyZXMgdmlhIGZsdXNoIGNhbGxiYWNrCitDUkVBVEUgVEFCTEUg Y29weV90cmlnZ2VyX3RndCAoYSBpbnQsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgY29weV90cmln Z2VyX2xvZyAoYSBpbnQsIGIgdGV4dCk7CitDUkVBVEUgRlVOQ1RJT04gY29weV90cmlnZ2VyX2Zu KCkgUkVUVVJOUyB0cmlnZ2VyIEFTICQkCitCRUdJTgorICBJTlNFUlQgSU5UTyBjb3B5X3RyaWdn ZXJfbG9nKGEsIGIpIFZBTFVFUyAoTkVXLmEsIE5FVy5iKTsKKyAgUkVUVVJOIE5FVzsKK0VORDsK KyQkIExBTkdVQUdFIHBscGdzcWw7CitDUkVBVEUgVFJJR0dFUiBjb3B5X2FmdGVyX2lucworICBB RlRFUiBJTlNFUlQgT04gY29weV90cmlnZ2VyX3RndAorICBGT1IgRUFDSCBST1cgRVhFQ1VURSBG VU5DVElPTiBjb3B5X3RyaWdnZXJfZm4oKTsKK0NPUFkgY29weV90cmlnZ2VyX3RndCBGUk9NIHN0 ZGluOworMTAJZmlyc3QKKzIwCXNlY29uZAorMzAJdGhpcmQKK1wuCitTRUxFQ1QgY291bnQoKikg RlJPTSBjb3B5X3RyaWdnZXJfdGd0OworU0VMRUNUIGEsIGIgRlJPTSBjb3B5X3RyaWdnZXJfdGd0 IE9SREVSIEJZIGE7CistLSBWZXJpZnkgdHJpZ2dlciBmaXJlZCBmb3IgZWFjaCByb3cKK1NFTEVD VCBjb3VudCgqKSBGUk9NIGNvcHlfdHJpZ2dlcl9sb2c7CitTRUxFQ1QgYSwgYiBGUk9NIGNvcHlf dHJpZ2dlcl9sb2cgT1JERVIgQlkgYTsKK0RST1AgVEFCTEUgY29weV90cmlnZ2VyX3RndCBDQVND QURFOworRFJPUCBUQUJMRSBjb3B5X3RyaWdnZXJfbG9nOworRFJPUCBGVU5DVElPTiBjb3B5X3Ry aWdnZXJfZm47CisKKy0tIFBhcnRpdGlvbmVkIENPUFk6IHZlcmlmeSBjb3JyZWN0bmVzcyB1bmRl ciBwYXJ0aXRpb24gcm91dGluZyB3aXRoIGJ1ZmZlcmVkIHBhdGgKK0NSRUFURSBUQUJMRSBjb3B5 X3BhcnRfcm91dGVkICgKKyAgICBpZCBpbnQsCisgICAgdmFsIHRleHQKKykgUEFSVElUSU9OIEJZ IFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgY29weV9wYXJ0X3JvdXRlZF9wMSBQQVJUSVRJT04g T0YgY29weV9wYXJ0X3JvdXRlZAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwMCk7CitD UkVBVEUgVEFCTEUgY29weV9wYXJ0X3JvdXRlZF9wMiBQQVJUSVRJT04gT0YgY29weV9wYXJ0X3Jv dXRlZAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBUTyAoMjAwKTsKK0NPUFkgY29weV9wYXJ0 X3JvdXRlZCBGUk9NIHN0ZGluOworMQlhbHBoYQorNTAJYnJhdm8KKzk5CWNoYXJsaWUKKzEwMAlk ZWx0YQorMTUwCWVjaG8KKzE5OQlmb3h0cm90CitcLgorLS0gVG90YWwgcm93IGNvdW50CitTRUxF Q1QgY291bnQoKikgRlJPTSBjb3B5X3BhcnRfcm91dGVkOworLS0gUGVyLXBhcnRpdGlvbiByb3cg Y291bnRzCitTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCBjb3VudCgqKQorRlJPTSBjb3B5X3Bh cnRfcm91dGVkCitHUk9VUCBCWSB0YWJsZW9pZCBPUkRFUiBCWSB0YWJsZW9pZDo6cmVnY2xhc3M6 Om5hbWU7CistLSBDb250ZW50IGNvcnJlY3RuZXNzCitTRUxFQ1QgKiBGUk9NIGNvcHlfcGFydF9y b3V0ZWQgT1JERVIgQlkgaWQ7CitEUk9QIFRBQkxFIGNvcHlfcGFydF9yb3V0ZWQ7Ci0tIAoyLjUy LjAKCg== --00000000000010bb5b06507da644--