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 1w4fFy-002QPv-2g for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 13:23:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4fFx-0008Gu-0e for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 13:23:45 +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 1w4fFw-0008GR-1v for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 13:23:45 +0000 Received: from mail-yx1-xb12b.google.com ([2607:f8b0:4864:20::b12b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4fFu-00000000d1G-0U96 for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 13:23:44 +0000 Received: by mail-yx1-xb12b.google.com with SMTP id 956f58d0204a3-64ea5b45673so3928532d50.0 for ; Mon, 23 Mar 2026 06:23:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774272221; cv=none; d=google.com; s=arc-20240605; b=B2r6GK8I/tDZkzi9uPs5xuEvvYpFb/i4OmKvF6ck49RO/O9M6mA1TM9nbc8plGU9Mx Se4gzx03Xk3xt3FGeQFfD4x9FvbEgVEQKe7Py5J/0HSIpNBWM1htRRM+K/oSsFAAXrBd 6iZO4LhLRBOhKDB4HWKCxLuQyu+2p55ntFzkD9Gmd91EkHGJomJwu6CtPvP3cK6o1wPg nkOVHQ8jFnQ3V2DSvr7WCHA3TkpAH9ZsaaC/rHq/OFNG+DNdhOKHgXbEnVMXny/uzHwM tigh4if3YPtvVw8zFnrWVxgl2Dbs2qVZ2+cXE47OUg+H+bKI7KZMtTVGsTInTeqeNQdS mvKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=nmCQI/EIV4bkeqMCtkz9v8GQNefsokqTGvc7+xC+vS0=; fh=nwNxTtLLPTU0ewfLM7SSbrjMajMl+wwnFkCY/fi90vE=; b=SqUcygFQF41s8UMAYPBAoN9zGPgO2ea2AYQb2v06VeqaYkESE+P1OxFS9UeApaqbq3 qvaoTRdUt6K7bxFJxdJ5CoFLeMDJlNdQH61Y24jX2RM1YVnR7tlNR3EZ/tc3n7Y5c41V 6oEOn8bSGO5vd07727Hntsz6qy/5F4bPbPks6htHbcg+zZB1LlBBFSaKsIcUJrPZ6VL2 ttaxDPcSEeJczOmDxU7lM2NPZkY3hcrVxtTQmE9Y42505E27JnqULYbgqblIeD0JICKx aUurUhblzBuf/v+0wACzav57of6S5yC6033PCkcFVUnsu/JO8jXoAoOpTv6KglIA7+78 gUVA==; darn=lists.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=20230601; t=1774272221; x=1774877021; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=nmCQI/EIV4bkeqMCtkz9v8GQNefsokqTGvc7+xC+vS0=; b=hP1xl8D2uT/SrCTbxXvnjVQhV2YBGyMQKlw1Jzd3wvo05KH46MJraeEOtesLvZD3le 7n3D9Q+rA2esZGGPZ/lwxCdrirBVk7zfpVO1cGr4mNoh+hpa29tydEO9PLkapkybdGtk V9J/v0/LOEJF4GpyqJeZJT6/2nSDPurcT6kCpP5VMnMmbnqtO57pt6FIrKWy9NkQ6jop FDiJCyZxEE4TyUGvtOlhlc/R/yafaWa2JsZNRS1/ukTJs33869LFnPY2J21r4PMiZZJM 1uko0LmoT/NNsUHAZ1xrdCTAlqNIHGUwMW63wjA+bcKA+pDV+5NsJ6Fex6/xJC/ax4HE O8Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774272221; x=1774877021; h=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=nmCQI/EIV4bkeqMCtkz9v8GQNefsokqTGvc7+xC+vS0=; b=K5rOlr7j7EeWZvqULEKeAbXT419+LTjKIXxbihD9C50NCHnk5lvKY/RQYp+w9mkVsi EVD27CuMRxgFfr77xiIuy2v5UDpn/SSN8Xb1fgN6cVk+4X7773MQjiBgLg+b99atDLrs E9GNbb/rUHSFJsO8eY84OtbZ7rqoBpezEWfzahop6Q5erS6Y1pMqM0Mds/tHGj+wgya/ Utu2/ebJ2CG9t+cToEQcFaF1UTpNmZZlPiGOpuGScjVlnb+XWI7mopQ3DGvTYqWQFyhJ H4+e/sOCFRFAopBO0dMzW4L/tG85EdrfszAvNuOINri3ErDZchckKx7UDFlj4tQwbNQe jyTQ== X-Gm-Message-State: AOJu0Yxvad+tqFShU7GjyhJDDKqEIelW86q5VLDKnmgBgpnYtOvqdSB6 3OM0TTICvCmAnXDdckJuEpfrd5/cUBhxN/c8XdgV9cYSNNGLYorXF33XRDIH7zg9s320wxVsswf oLbLBkotwi4D7o3+o2EzOvC1p4PcMxJX/UAfc X-Gm-Gg: ATEYQzxqej0wnkCPcWxEKSkUvic/LzXpsE77EYdQ+mtETW9F/oLuyQ1ercoVhfIRxnV X/w0N0ixeYfWp5cG3yrCSNn2lLLzp5wGESAx/GIGfdl82eghZv+3rinkGRP+smrOliYZ2fGVu8F 0g6906aX+WzF3GNJlsPCn34tuZdxMNzDQhK/bfVoh2ga0/hKUxmnBHuFw0VeJXp7ORGUuDR8UB9 dKyuQa72XGEA2u+3WLE5k62UNm28NKbRsJSlEKc8pyeynQLvwhYEHTOwPGGNxqY4BMZ5eHeP8No oeBIwmEXSuOM5ala2Q== X-Received: by 2002:a53:eb8f:0:b0:64a:e62c:16d0 with SMTP id 956f58d0204a3-64e9ce4107bmr11000196d50.25.1774272221047; Mon, 23 Mar 2026 06:23:41 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: shawn wang Date: Mon, 23 Mar 2026 21:23:29 +0800 X-Gm-Features: AQROBzBvMgEdWwViFsS_vw8HGuiSiWYtYJPkate2rJcNl6Ma9slA8ovrUbf2qDc Message-ID: Subject: Re: Add logical_decoding_spill_limit to cap spill file disk usage per slot To: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000078938a064db0f180" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000078938a064db0f180 Content-Type: multipart/alternative; boundary="000000000000789389064db0f17e" --000000000000789389064db0f17e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable This is the patch. shawn wang =E4=BA=8E2026=E5=B9=B43=E6=9C=8823=E6= =97=A5=E5=91=A8=E4=B8=80 21:19=E5=86=99=E9=81=93=EF=BC=9A > Hi hackers, > > =3D=3D Motivation =3D=3D > > We operate a fleet of PostgreSQL instances with logical replication. On > several occasions, we have experienced production incidents where logical > decoding spill files (pg_replslot//xid-*.spill) grew uncontrollably= =E2=80=94 > consuming tens of gigabytes and eventually filling up the data disk. This > caused the entire instance to go read-only, impacting not just replicatio= n > but all write workloads. > > The typical scenario is a large transaction (e.g. bulk data load or a > long-running DDL) combined with a subscriber that is either slow or > temporarily disconnected. The reorder buffer exceeds > logical_decoding_work_mem and starts spilling, but there is no upper boun= d > on how much can be spilled. The only backstop today is the OS returning > ENOSPC, at which point the damage is already done. > > We looked for existing protections: > > - max_slot_wal_keep_size: limits WAL retention, but does not affect > spill files at all. > - logical_decoding_work_mem: controls *when* spilling starts, but not > *how much* can be spilled. > - There is no existing GUC, patch, or commitfest entry that addresses > spill file disk quota. > > > The "Report reorder buffer size" patch (CF #6053, by Ashutosh Bapat) > improves observability of reorder buffer state, which is complementary = =E2=80=94 > but observability alone cannot prevent disk-full incidents. > > =3D=3D Proposed solution =3D=3D > > The attached patch adds a new GUC: > logical_decoding_spill_limit (integer, unit kB, default 0) > > When set to a positive value, it limits the total size of on-disk spill > files per replication slot. Key design points: > > 1. Tracking: We add two new fields: - ReorderBuffer.spillBytesOnDisk = =E2=80=94 > current total on-disk spill size for this slot (unlike spillBytes whic= h is > a cumulative statistic counter, this is a live gauge). - > ReorderBufferTXN.serialized_size =E2=80=94 per-transaction on-disk siz= e, so we can > accurately decrement the global counter during cleanup. > 2. Increment: In ReorderBufferSerializeChange(), after a successful > write(), both counters are incremented by the size written. > 3. Decrement: In ReorderBufferRestoreCleanup(), when spill files are > unlinked, the global counter is decremented by the transaction's > serialized_size. > 4. Enforcement: In ReorderBufferCheckMemoryLimit(), before calling > ReorderBufferSerializeTXN(), we check: if (spillBytesOnDisk + txn->siz= e > > spill_limit) ereport(ERROR, ...) This is only checked on the spill-to-= disk > path =E2=80=94 not on the streaming path (which involves no disk I/O). > 5. Behavior on limit exceeded: An ERROR is raised with > ERRCODE_CONFIGURATION_LIMIT_EXCEEDED. The walsender exits, but the slo= t's > restart_lsn and confirmed_flush are preserved. The subscriber can reco= nnect > after the DBA: > 1. increases logical_decoding_spill_limit, or > 2. increases logical_decoding_work_mem (to reduce spilling), or > 3. switches to a streaming-capable output plugin (which avoids > spilling entirely). > 6. Default 0 means unlimited =E2=80=94 fully backward compatible. > > =3D=3D Why per-slot, not global? =3D=3D > > Each ReorderBuffer instance lives in a single walsender process and > corresponds to exactly one replication slot. A per-slot limit is: > > - Lock-free (no shared memory coordination needed) > - Simple to reason about (each slot has its own budget) > - Sufficient to protect against disk-full (the DBA sets the limit > based on available disk / number of slots) > > A global (cross-slot) limit could be layered on top later if needed, but > would require shared-memory counters with spinlock/atomic protection. > > =3D=3D Performance impact =3D=3D > > - Hot path (in-memory change queuing): zero overhead. > - Spill path: one integer comparison before serialization, one integer > addition after write() =E2=80=94 negligible compared to the I/O cost. > - Cleanup path: one integer subtraction after unlink() =E2=80=94 negli= gible. > > > Looking forward to feedback. > Thanks, > Shawn. > --000000000000789389064db0f17e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
This is the patch.

shawn wang <shawn.wang.pg@gmail.com> =E4= =BA=8E2026=E5=B9=B43=E6=9C=8823=E6=97=A5=E5=91=A8=E4=B8=80 21:19=E5=86=99= =E9=81=93=EF=BC=9A
Hi hackers,

=C2=A0=3D=3D Motivation =3D=3D=C2=A0

We operate a fleet of PostgreSQL instan= ces with logical replication. On several occasions, we have experienced pro= duction incidents where logical decoding spill files (pg_replslot/<slot&= gt;/xid-*.spill) grew uncontrollably =E2=80=94 consuming tens of gigabytes = and eventually filling up the data disk. This caused the entire instance to= go read-only, impacting not just replication but all write workloads.=C2= =A0

The typical sc= enario is a large transaction (e.g. bulk data load or a long-running DDL) c= ombined with a subscriber that is either slow or temporarily disconnected. = The reorder buffer exceeds logical_decoding_work_mem and starts spilling, b= ut there is no upper bound on how much can be spilled. The only backstop to= day is the OS returning ENOSPC, at which point the damage is already done.= =C2=A0

We looked f= or existing protections:=C2=A0
  • max_slot_w= al_keep_size:=C2=A0limits WAL retention, but does not affec= t spill files at all.=C2=A0
  • logical_decoding_work_m= em: controls *when* spilling starts, but not *how much* can be spilled.=C2= =A0
  • There is no existing GUC, patch, or commitfest = entry that addresses spill file disk quota.=C2=A0

The "Report reorder buffer s= ize" patch (CF #6053, by Ashutosh Bapat) improves observability of reo= rder buffer state, which is complementary =E2=80=94 but observability alone= cannot prevent disk-full incidents.=C2=A0

=3D=3D Proposed solution =3D=3D=C2=A0
=

The attached patch adds a new = GUC:=C2=A0
logical_decoding_spill_limit (integer,= unit kB, default 0)=C2=A0

= When set to a positive value, it limits the total size of on-disk = spill files per replication slot. Key design points:=C2=A0
  1. Tracking: We add two new fields: - ReorderBuffer.spillBytesOnDisk = =E2=80=94 current total on-disk spill size for this slot (unlike spillBytes= which is a cumulative statistic counter, this is a live gauge). - ReorderB= ufferTXN.serialized_size =E2=80=94 per-transaction on-disk size, so we can = accurately decrement the global counter during cleanup.=C2=A0
  2. Increment: In ReorderBufferSerializeChange(), after a successful write(= ), both counters are incremented by the size written.=C2=A0
  3. = Decrement: In ReorderBufferRestoreCleanup(), when spill files are = unlinked, the global counter is decremented by the transaction's serial= ized_size.=C2=A0
  4. Enforcement: In ReorderBufferCheck= MemoryLimit(), before calling ReorderBufferSerializeTXN(), we check: if (sp= illBytesOnDisk + txn->size > spill_limit) ereport(ERROR, ...) This is= only checked on the spill-to-disk path =E2=80=94 not on the streaming path= (which involves no disk I/O).=C2=A0
  5. Behavior on li= mit exceeded: An ERROR is raised with ERRCODE_CONFIGURATION_LIMIT_EXCEEDED.= The walsender exits, but the slot's restart_lsn and confirmed_flush ar= e preserved. The subscriber can reconnect after the DBA:=C2=A0
  6. <= ol>
  7. increases logical_decoding_spill_limit, or=C2=A0
  8. increases l= ogical_decoding_work_mem (to reduce spilling), or=C2=A0
  9. switches to= a streaming-capable output plugin (which avoids spilling entirely).=C2=A0<= /li>
  • Default 0 means unlimited =E2=80=94 fully backward compatible.= =C2=A0
  • =3D=3D Why per-slot, not global? =3D=3D= =C2=A0

    Each Reorde= rBuffer instance lives in a single walsender process and corresponds to exa= ctly one replication slot. A per-slot limit is:=C2=A0
      =
    • Lock-free (no shared memory coordination needed)=C2=A0<= /li>
    • Simple to reason about (each slot has its own budget)=C2= =A0
    • Sufficient to protect against disk-full (the DB= A sets the limit based on available disk / number of slots)=C2=A0
    A global (cross-slot) limit could be layered on = top later if needed, but would require shared-memory counters with spinlock= /atomic protection.=C2=A0

    <= span style=3D"color:rgb(0,0,0);font-family:"PingFang SC";font-siz= e:11px">=3D=3D Performance impact =3D=3D=C2=A0
    • Hot path (in-memory change queuing): zero overhead.=C2=A0
    • =
    • Spill path: one integer comparison before serialization, one i= nteger addition after write() =E2=80=94 negligible compared to the I/O cost= .=C2=A0
    • Cleanup path: one integer subtraction after= unlink() =E2=80=94 negligible.=C2=A0
    <= br>
    Looking forward to feedback.=C2=A0
    Thanks,=C2=A0
    Shawn.
    =
    --000000000000789389064db0f17e-- --00000000000078938a064db0f180 Content-Type: application/octet-stream; name="0001-Add-logical_decoding_spill_limit-GUC-to-cap-spill-file-limit.patch" Content-Disposition: attachment; filename="0001-Add-logical_decoding_spill_limit-GUC-to-cap-spill-file-limit.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn37v0f80 RnJvbSBkOTNlMWI5YmUwNDdmNmJhNDg0ZTFmMTA1YTk0NTA1YjdkMjYxYzViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGF3biBXYW5nIDxzaGF3bi53YW5nLnBnQGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAyMyBNYXIgMjAyNiAyMDo0NjowOCArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEFk ZCBsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0IEdVQyB0byBjYXAgc3BpbGwgZmlsZSBkaXNr CiB1c2FnZS4KCldoZW4gbG9naWNhbCBkZWNvZGluZyBleGNlZWRzIGxvZ2ljYWxfZGVjb2Rpbmdf d29ya19tZW0sIGNoYW5nZXMgYXJlCnNwaWxsZWQgdG8gZGlzayB1bmRlciBwZ19yZXBsc2xvdC88 c2xvdD4vLiAgQ3VycmVudGx5IHRoZXJlIGlzIG5vCmxpbWl0IG9uIHRoZSB0b3RhbCBzaXplIG9m IHRoZXNlIHNwaWxsIGZpbGVzLCB3aGljaCBjYW4gbGVhZCB0bwp1bmNvbnRyb2xsZWQgZGlzayBz cGFjZSBjb25zdW1wdGlvbiBmb3IgbGFyZ2Ugb3IgbnVtZXJvdXMgY29uY3VycmVudAp0cmFuc2Fj dGlvbnMuCgpBZGQgYSBuZXcgR1VDIGxvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQgKGludGVn ZXIsIHVuaXQga0IsCmRlZmF1bHQgMCBtZWFuaW5nIHVubGltaXRlZCkgdGhhdCBsaW1pdHMgdGhl IHRvdGFsIG9uLWRpc2sgc3BpbGwgZmlsZQpzaXplIHBlciByZXBsaWNhdGlvbiBzbG90LiAgVGhl IGltcGxlbWVudGF0aW9uIHRyYWNrcyB0aGUgY3VycmVudApvbi1kaXNrIGZvb3RwcmludCBpbiBS ZW9yZGVyQnVmZmVyLnNwaWxsQnl0ZXNPbkRpc2sgKGluY3JlbWVudGVkCmFmdGVyIGVhY2ggc3Vj Y2Vzc2Z1bCB3cml0ZSBpbiBSZW9yZGVyQnVmZmVyU2VyaWFsaXplQ2hhbmdlLApkZWNyZW1lbnRl ZCB3aGVuIHNwaWxsIGZpbGVzIGFyZSByZW1vdmVkIGluClJlb3JkZXJCdWZmZXJSZXN0b3JlQ2xl YW51cCkgYW5kIHBlci10cmFuc2FjdGlvbiBpbgpSZW9yZGVyQnVmZmVyVFhOLnNlcmlhbGl6ZWRf c2l6ZS4KCkJlZm9yZSBzZXJpYWxpemluZyBhIHRyYW5zYWN0aW9uIHRvIGRpc2ssIFJlb3JkZXJC dWZmZXJDaGVja01lbW9yeUxpbWl0CmNoZWNrcyB3aGV0aGVyIHRoZSBwcm9qZWN0ZWQgd3JpdGUg d291bGQgZXhjZWVkIHRoZSBjb25maWd1cmVkIGxpbWl0LgpJZiBzbywgaXQgcmFpc2VzIGFuIEVS Uk9SLiAgVGhlIHJlcGxpY2F0aW9uIHNsb3Qgc3RhdGUgKHJlc3RhcnRfbHNuLApjb25maXJtZWRf Zmx1c2gpIGlzIHByZXNlcnZlZCwgc28gdGhlIHN1YnNjcmliZXIgY2FuIHJlY29ubmVjdCBhZnRl cgp0aGUgYWRtaW5pc3RyYXRvciBpbmNyZWFzZXMgdGhlIGxpbWl0LCByYWlzZXMgbG9naWNhbF9k ZWNvZGluZ193b3JrX21lbSwKb3Igc3dpdGNoZXMgdG8gYSBzdHJlYW1pbmctY2FwYWJsZSBvdXRw dXQgcGx1Z2luLgoKVGhlIGNoZWNrIGlzIG9ubHkgb24gdGhlIHNwaWxsLXRvLWRpc2sgcGF0aCAo bm90IHRoZSBzdHJlYW1pbmcgcGF0aCwKd2hpY2ggaW52b2x2ZXMgbm8gZGlzayBJL08pIGFuZCBv bmx5IHdoZW4gdGhlIGxpbWl0IGlzIHNldCAoPiAwKSwgc28KdGhlcmUgaXMgemVybyBvdmVyaGVh ZCBvbiB0aGUgbm9ybWFsIGhvdCBwYXRoIGFuZCBmdWxsIGJhY2t3YXJkCmNvbXBhdGliaWxpdHkg d2l0aCBleGlzdGluZyBjb25maWd1cmF0aW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNn bWwgICAgICAgICAgICAgICAgICAgICAgfCAyNCArKysrKysrKwogLi4uL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgNTYgKysrKysrKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgMTAgKysrKwogc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgIDIgKwogc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgIHwgMTcgKysrKysrCiA1IGZp bGVzIGNoYW5nZWQsIDEwOSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDhjZGQ4MjZmYmQz Li5lNmZjOTY1M2ZlZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtMjEyMCw2ICsyMTIwLDMwIEBAIGluY2x1ZGVf ZGlyICdjb25mLmQnCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbG9naWNhbC1kZWNvZGluZy1zcGlsbC1saW1pdCIg eHJlZmxhYmVsPSJsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0Ij4KKyAgICAgIDx0ZXJtPjx2 YXJuYW1lPmxvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnRl Z2VyPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ bG9naWNhbF9kZWNvZGluZ19zcGlsbF9saW1pdDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJh bWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmaWVzIHRoZSBtYXhpbXVt IHRvdGFsIHNpemUgb2Ygb24tZGlzayBzcGlsbCBmaWxlcyB0aGF0IGxvZ2ljYWwKKyAgICAgICAg ZGVjb2RpbmcgbWF5IHVzZSBwZXIgcmVwbGljYXRpb24gc2xvdC4gV2hlbiBjaGFuZ2VzIGV4Y2Vl ZCB0aGUgbWVtb3J5CisgICAgICAgIGxpbWl0IHNldCBieSA8dmFybmFtZT5sb2dpY2FsX2RlY29k aW5nX3dvcmtfbWVtPC92YXJuYW1lPiwgdGhleSBhcmUKKyAgICAgICAgc3BpbGxlZCB0byBkaXNr LiBUaGlzIHBhcmFtZXRlciBsaW1pdHMgdGhlIHRvdGFsIGFtb3VudCBvZiBkaXNrIHNwYWNlCisg ICAgICAgIHVzZWQgYnkgdGhvc2Ugc3BpbGwgZmlsZXMuIElmIHRoZSBsaW1pdCB3b3VsZCBiZSBl eGNlZWRlZCwgdGhlCisgICAgICAgIHdhbHNlbmRlciBwcm9jZXNzIHJhaXNlcyBhbiBlcnJvciBh bmQgZGlzY29ubmVjdHMuIFRoZSByZXBsaWNhdGlvbgorICAgICAgICBzbG90J3Mgc3RhdGUgaXMg cHJlc2VydmVkLCBzbyB0aGUgc3Vic2NyaWJlciBjYW4gcmVjb25uZWN0IGFmdGVyIHRoZQorICAg ICAgICBhZG1pbmlzdHJhdG9yIGluY3JlYXNlcyB0aGlzIGxpbWl0IG9yIHN3aXRjaGVzIHRvIGEg c3RyZWFtaW5nLWNhcGFibGUKKyAgICAgICAgb3V0cHV0IHBsdWdpbi4KKyAgICAgICAgSWYgdGhp cyB2YWx1ZSBpcyBzcGVjaWZpZWQgd2l0aG91dCB1bml0cywgaXQgaXMgdGFrZW4gYXMga2lsb2J5 dGVzLgorICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD4wPC9saXRlcmFsPiwg d2hpY2ggbWVhbnMgdGhlcmUgaXMgbm8KKyAgICAgICAgbGltaXQgb24gc3BpbGwgZmlsZSBkaXNr IHVzYWdlLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1jb21taXQtdGltZXN0YW1wLWJ1 ZmZlcnMiIHhyZWZsYWJlbD0iY29tbWl0X3RpbWVzdGFtcF9idWZmZXJzIj4KICAgICAgIDx0ZXJt Pjx2YXJuYW1lPmNvbW1pdF90aW1lc3RhbXBfYnVmZmVyczwvdmFybmFtZT4gKDx0eXBlPmludGVn ZXI8L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggNjgyZDEzYzlmMjIuLmQ5ZjgyYzJhYzQ4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZm ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIu YwpAQCAtNzIsNiArNzIsMTUgQEAKICAqCSAgY291bnRlciBpcyB1cGRhdGVkOyBob3dldmVyIHRy YW5zYWN0aW9ucyB3aXRoIHNpemUgMCBhcmUgbm90IHN0b3JlZCBpbgogICoJICB0aGUgaGVhcCwg YmVjYXVzZSB0aGV5IGhhdmUgbm8gY2hhbmdlcyB0byBldmljdC4KICAqCisgKgkgIFRvIHByZXZl bnQgc3BpbGwgZmlsZXMgZnJvbSBjb25zdW1pbmcgdW5ib3VuZGVkIGRpc2sgc3BhY2UsIHRoZQor ICoJICBsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0IEdVQyBjYW4gYmUgc2V0IHRvIGxpbWl0 IHRoZSB0b3RhbCBzaXplCisgKgkgIG9mIHNwaWxsIGZpbGVzIHBlciByZXBsaWNhdGlvbiBzbG90 LiAgV2UgdHJhY2sgdGhlIGN1cnJlbnQgb24tZGlzaworICoJICBmb290cHJpbnQgaW4gUmVvcmRl ckJ1ZmZlci5zcGlsbEJ5dGVzT25EaXNrIChpbmNyZW1lbnRlZCBvbiBlYWNoCisgKgkgIHN1Y2Nl c3NmdWwgd3JpdGUsIGRlY3JlbWVudGVkIHdoZW4gc3BpbGwgZmlsZXMgYXJlIGNsZWFuZWQgdXAp IGFuZAorICoJICBwZXItdHJhbnNhY3Rpb24gaW4gUmVvcmRlckJ1ZmZlclRYTi5zZXJpYWxpemVk X3NpemUuICBCZWZvcmUKKyAqCSAgc2VyaWFsaXppbmcgYSB0cmFuc2FjdGlvbiwgd2UgY2hlY2sg d2hldGhlciB0aGUgcHJvamVjdGVkIHdyaXRlIHdvdWxkCisgKgkgIGV4Y2VlZCB0aGUgY29uZmln dXJlZCBsaW1pdCBhbmQgcmFpc2UgYW4gRVJST1IgaWYgc28uCisgKgogICoJICBXZSBzdGlsbCBy ZWx5IG9uIG1heF9jaGFuZ2VzX2luX21lbW9yeSB3aGVuIGxvYWRpbmcgc2VyaWFsaXplZCBjaGFu Z2VzCiAgKgkgIGJhY2sgaW50byBtZW1vcnkuIEF0IHRoYXQgcG9pbnQgd2UgY2FuJ3QgdXNlIHRo ZSBtZW1vcnkgbGltaXQgZGlyZWN0bHkKICAqCSAgYXMgd2UgbG9hZCB0aGUgc3VieGFjdHMgaW5k ZXBlbmRlbnRseS4gT25lIG9wdGlvbiB0byBkZWFsIHdpdGggdGhpcwpAQCAtMjI0LDYgKzIzMyw3 IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlCiAgKiBsaWtlLgogICov CiBpbnQJCQlsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtOworaW50CQkJbG9naWNhbF9kZWNvZGlu Z19zcGlsbF9saW1pdDsKIHN0YXRpYyBjb25zdCBTaXplIG1heF9jaGFuZ2VzX2luX21lbW9yeSA9 IDQwOTY7IC8qIFhYWCBmb3IgcmVzdG9yZSBvbmx5ICovCiAKIC8qIEdVQyB2YXJpYWJsZSAqLwpA QCAtMzg4NSw2ICszODk1LDEwIEBAIFJlb3JkZXJCdWZmZXJMYXJnZXN0U3RyZWFtYWJsZVRvcFRY TihSZW9yZGVyQnVmZmVyICpyYikKICAqIElmIGRlYnVnX2xvZ2ljYWxfcmVwbGljYXRpb25fc3Ry ZWFtaW5nIGlzIHNldCB0byAiaW1tZWRpYXRlIiwgc3RyZWFtIG9yCiAgKiBzZXJpYWxpemUgdGhl IGNoYW5nZXMgaW1tZWRpYXRlbHkuCiAgKgorICogV2hlbiBzcGlsbGluZyB0byBkaXNrLCBpZiBs b2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0IGlzIHNldCAoPiAwKSwKKyAqIHdlIGNoZWNrIHdo ZXRoZXIgdGhlIHByb2plY3RlZCB3cml0ZSB3b3VsZCBleGNlZWQgdGhlIGNvbmZpZ3VyZWQgbGlt aXQKKyAqIGFuZCByYWlzZSBhbiBFUlJPUiBpZiBzbywgdG8gcHJldmVudCB1bmJvdW5kZWQgZGlz ayB1c2FnZS4KKyAqCiAgKiBYWFggQXQgdGhpcyBwb2ludCB3ZSBzZWxlY3QgdGhlIHRyYW5zYWN0 aW9ucyB1bnRpbCB3ZSByZWFjaCB1bmRlciB0aGUgbWVtb3J5CiAgKiBsaW1pdCwgYnV0IHdlIG1p Z2h0IGFsc28gYWRhcHQgYSBtb3JlIGVsYWJvcmF0ZSBldmljdGlvbiBzdHJhdGVneSAtIGZvciBl eGFtcGxlCiAgKiBldmljdGluZyBlbm91Z2ggdHJhbnNhY3Rpb25zIHRvIGZyZWUgY2VydGFpbiBm cmFjdGlvbiAoZS5nLiA1MCUpIG9mIHRoZSBtZW1vcnkKQEAgLTM5NjQsNiArMzk3OCwzNiBAQCBS ZW9yZGVyQnVmZmVyQ2hlY2tNZW1vcnlMaW1pdChSZW9yZGVyQnVmZmVyICpyYikKIAkJCWlmIChS ZW9yZGVyQnVmZmVyQ2hlY2tBbmRUcnVuY2F0ZUFib3J0ZWRUWE4ocmIsIHR4bikpCiAJCQkJY29u dGludWU7CiAKKwkJCS8qCisJCQkgKiBDaGVjayB0aGUgc3BpbGwtdG8tZGlzayBzaXplIGxpbWl0 IGJlZm9yZSBhY3R1YWxseSBzZXJpYWxpemluZy4KKwkJCSAqIFdlIHVzZSB0aGUgdHJhbnNhY3Rp b24ncyBpbi1tZW1vcnkgc2l6ZSBhcyBhbiBlc3RpbWF0ZSBvZiBob3cKKwkJCSAqIG11Y2ggd2ls bCBiZSB3cml0dGVuLCB3aGljaCBpcyBhIHJlYXNvbmFibGUgYXBwcm94aW1hdGlvbi4KKwkJCSAq CisJCQkgKiBXZSBvbmx5IGNoZWNrIHdoZW4gbG9naWNhbF9kZWNvZGluZ19zcGlsbF9saW1pdCBp cyBzZXQgKD4gMCkuCisJCQkgKiBXaGVuIHRoZSBsaW1pdCB3b3VsZCBiZSBleGNlZWRlZCwgcmFp c2UgYW4gRVJST1IuICBUaGUKKwkJCSAqIHdhbHNlbmRlciB3aWxsIGV4aXQsIGJ1dCB0aGUgcmVw bGljYXRpb24gc2xvdCdzIHJlc3RhcnRfbHNuIGlzCisJCQkgKiBwcmVzZXJ2ZWQgc28gdGhlIHN1 YnNjcmliZXIgY2FuIHJlY29ubmVjdCBhZnRlciB0aGUgREJBCisJCQkgKiBpbmNyZWFzZXMgdGhl IGxpbWl0IG9yIHN3aXRjaGVzIHRvIGEgc3RyZWFtaW5nLWNhcGFibGUgb3V0cHV0CisJCQkgKiBw bHVnaW4uCisJCQkgKi8KKwkJCWlmIChsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0ID4gMCAm JgorCQkJCXJiLT5zcGlsbEJ5dGVzT25EaXNrICsgdHhuLT5zaXplID4KKwkJCQkoU2l6ZSkgbG9n aWNhbF9kZWNvZGluZ19zcGlsbF9saW1pdCAqIDEwMjQpCisJCQl7CisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCks CisJCQkJCQkgZXJybXNnKCJsb2dpY2FsIGRlY29kaW5nIHNwaWxsIGZpbGUgc2l6ZSBsaW1pdCBl eGNlZWRlZCIpLAorCQkJCQkJIGVycmRldGFpbCgiQ3VycmVudCBvbi1kaXNrIHNwaWxsIHNpemUg aXMgJXp1IGJ5dGVzLCAiCisJCQkJCQkJCSAgICJ0cmFuc2FjdGlvbiB0byBzcGlsbCBpcyAlenUg Ynl0ZXMsICIKKwkJCQkJCQkJICAgImxpbWl0IGlzICVkIGtCLiIsCisJCQkJCQkJCSAgIHJiLT5z cGlsbEJ5dGVzT25EaXNrLCB0eG4tPnNpemUsCisJCQkJCQkJCSAgIGxvZ2ljYWxfZGVjb2Rpbmdf c3BpbGxfbGltaXQpLAorCQkJCQkJIGVycmhpbnQoIkNvbnNpZGVyIGluY3JlYXNpbmcgJXMsICVz LCAiCisJCQkJCQkJCSAib3IgdXNpbmcgYSBzdHJlYW1pbmctY2FwYWJsZSBvdXRwdXQgcGx1Z2lu LiIsCisJCQkJCQkJCSAibG9naWNhbF9kZWNvZGluZ19zcGlsbF9saW1pdCIsCisJCQkJCQkJCSAi bG9naWNhbF9kZWNvZGluZ193b3JrX21lbSIpKSk7CisJCQl9CisKIAkJCVJlb3JkZXJCdWZmZXJT ZXJpYWxpemVUWE4ocmIsIHR4bik7CiAJCX0KIApAQCAtNDI4Niw2ICs0MzMwLDEzIEBAIFJlb3Jk ZXJCdWZmZXJTZXJpYWxpemVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIAl9CiAJcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwogCisJLyoKKwkgKiBVcGRh dGUgdGhlIG9uLWRpc2sgc3BpbGwgc2l6ZSBhY2NvdW50aW5nIGZvciBib3RoIHRoZSB0cmFuc2Fj dGlvbiBhbmQKKwkgKiB0aGUgcmVvcmRlciBidWZmZXIuICBUaGlzIGlzIHVzZWQgdG8gZW5mb3Jj ZSBsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0LgorCSAqLworCXR4bi0+c2VyaWFsaXplZF9z aXplICs9IG9uZGlzay0+c2l6ZTsKKwlyYi0+c3BpbGxCeXRlc09uRGlzayArPSBvbmRpc2stPnNp emU7CisKIAkvKgogCSAqIEtlZXAgdGhlIHRyYW5zYWN0aW9uJ3MgZmluYWxfbHNuIHVwIHRvIGRh dGUgd2l0aCBlYWNoIGNoYW5nZSB3ZSBzZW5kIHRvCiAJICogZGlzaywgc28gdGhhdCBSZW9yZGVy QnVmZmVyUmVzdG9yZUNsZWFudXAgd29ya3MgY29ycmVjdGx5LiAgKFdlIHVzZWQgdG8KQEAgLTQ4 NzIsNiArNDkyMywxMSBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNsZWFudXAoUmVvcmRlckJ1ZmZl ciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bikKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNj ZXNzKCksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZW1vdmUgZmlsZSBcIiVzXCI6ICVtIiwg cGF0aCkpKTsKIAl9CisKKwkvKiBVcGRhdGUgdGhlIG9uLWRpc2sgc3BpbGwgc2l6ZSBhY2NvdW50 aW5nLiAqLworCUFzc2VydChyYi0+c3BpbGxCeXRlc09uRGlzayA+PSB0eG4tPnNlcmlhbGl6ZWRf c2l6ZSk7CisJcmItPnNwaWxsQnl0ZXNPbkRpc2sgLT0gdHhuLT5zZXJpYWxpemVkX3NpemU7CisJ dHhuLT5zZXJpYWxpemVkX3NpemUgPSAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCAwYzk4NTRhZDhmYy4uMzE2OGQyM2YzODcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0xODQ5LDYgKzE4NDks MTYgQEAKICAgYm9vdF92YWwgPT4gJ2ZhbHNlJywKIH0sCiAKK3sgbmFtZSA9PiAnbG9naWNhbF9k ZWNvZGluZ19zcGlsbF9saW1pdCcsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VS U0VUJywgZ3JvdXAgPT4gJ1JFU09VUkNFU19NRU0nLAorICBzaG9ydF9kZXNjID0+ICdTZXRzIHRo ZSBtYXhpbXVtIHRvdGFsIHNpemUgb2Ygc3BpbGwgZmlsZXMgZm9yIGxvZ2ljYWwgZGVjb2Rpbmcu JywKKyAgbG9uZ19kZXNjID0+ICdMaW1pdHMgdGhlIHRvdGFsIGRpc2sgc3BhY2UgdXNlZCBieSBz cGlsbCBmaWxlcyBwZXIgcmVwbGljYXRpb24gc2xvdCBkdXJpbmcgbG9naWNhbCBkZWNvZGluZy4g MCBtZWFucyBubyBsaW1pdC4nLAorICBmbGFncyA9PiAnR1VDX1VOSVRfS0InLAorICB2YXJpYWJs ZSA9PiAnbG9naWNhbF9kZWNvZGluZ19zcGlsbF9saW1pdCcsCisgIGJvb3RfdmFsID0+ICcwJywK KyAgbWluID0+ICcwJywKKyAgbWF4ID0+ICdNQVhfS0lMT0JZVEVTJywKK30sCisKIHsgbmFtZSA9 PiAnbG9naWNhbF9kZWNvZGluZ193b3JrX21lbScsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4g J1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1JFU09VUkNFU19NRU0nLAogICBzaG9ydF9kZXNjID0+ ICdTZXRzIHRoZSBtYXhpbXVtIG1lbW9yeSB0byBiZSB1c2VkIGZvciBsb2dpY2FsIGRlY29kaW5n LicsCiAgIGxvbmdfZGVzYyA9PiAnVGhpcyBtdWNoIG1lbW9yeSBjYW4gYmUgdXNlZCBieSBlYWNo IGludGVybmFsIHJlb3JkZXIgYnVmZmVyIGJlZm9yZSBzcGlsbGluZyB0byBkaXNrLicsCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZTRhYmU2 YzAwNzcuLjA0YjRmYjczNzM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlCkBAIC0xNDksNiArMTQ5LDggQEAKICNtYWludGVuYW5jZV93b3JrX21l bSA9IDY0TUIgICAgICAgICAgICAjIG1pbiA2NGtCCiAjYXV0b3ZhY3V1bV93b3JrX21lbSA9IC0x ICAgICAgICAgICAgICAgIyBtaW4gNjRrQiwgb3IgLTEgdG8gdXNlIG1haW50ZW5hbmNlX3dvcmtf bWVtCiAjbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSA9IDY0TUIgICAgICAgIyBtaW4gNjRrQgor I2xvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQgPSAwICAgICAgICMgbGltaXRzIHNwaWxsIGZp bGUgZGlzayB1c2FnZSBwZXIgc2xvdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIDAgbWVhbnMgbm8gbGltaXQKICNtYXhfc3RhY2tfZGVwdGggPSAyTUIgICAgICAg ICAgICAgICAgICAjIG1pbiAxMDBrQgogI3NoYXJlZF9tZW1vcnlfdHlwZSA9IG1tYXAgICAgICAg ICAgICAgICMgdGhlIGRlZmF1bHQgaXMgdGhlIGZpcnN0IG9wdGlvbgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lz dGVtOgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5o IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCmluZGV4IDJkNzE3YTll MTUyLi4wNDI0OWE5OWQ4MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVv cmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIu aApAQCAtMjUsNiArMjUsNyBAQAogCiAvKiBHVUMgdmFyaWFibGVzICovCiBleHRlcm4gUEdETExJ TVBPUlQgaW50IGxvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW07CitleHRlcm4gUEdETExJTVBPUlQg aW50IGxvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQ7CiBleHRlcm4gUEdETExJTVBPUlQgaW50 IGRlYnVnX2xvZ2ljYWxfcmVwbGljYXRpb25fc3RyZWFtaW5nOwogCiAvKiBwb3NzaWJsZSB2YWx1 ZXMgZm9yIGRlYnVnX2xvZ2ljYWxfcmVwbGljYXRpb25fc3RyZWFtaW5nICovCkBAIC00NjEsNiAr NDYyLDE0IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJUWE4KIAkvKiBTaXplIG9mIHRv cC10cmFuc2FjdGlvbiBpbmNsdWRpbmcgc3ViLXRyYW5zYWN0aW9ucy4gKi8KIAlTaXplCQl0b3Rh bF9zaXplOwogCisJLyoKKwkgKiBTaXplIG9mIHRoaXMgdHJhbnNhY3Rpb24ncyBjaGFuZ2VzIGN1 cnJlbnRseSBzZXJpYWxpemVkIHRvIGRpc2sgKGluCisJICogYnl0ZXMpLiAgVHJhY2tlZCBwZXIt dHJhbnNhY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWNjdXJhdGVseSB1cGRhdGUgdGhlCisJICogUmVv cmRlckJ1ZmZlci1sZXZlbCBzcGlsbEJ5dGVzT25EaXNrIGNvdW50ZXIgd2hlbiBzcGlsbCBmaWxl cyBhcmUKKwkgKiBjbGVhbmVkIHVwLgorCSAqLworCVNpemUJCXNlcmlhbGl6ZWRfc2l6ZTsKKwog CS8qCiAJICogUHJpdmF0ZSBkYXRhIHBvaW50ZXIgb2YgdGhlIG91dHB1dCBwbHVnaW4uCiAJICov CkBAIC02ODUsNiArNjk0LDE0IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJaW50NjQJCXNwaWxs Q291bnQ7CQkvKiBzcGlsbC10by1kaXNrIGludm9jYXRpb24gY291bnRlciAqLwogCWludDY0CQlz cGlsbEJ5dGVzOwkJLyogYW1vdW50IG9mIGRhdGEgc3BpbGxlZCB0byBkaXNrICovCiAKKwkvKgor CSAqIEN1cnJlbnQgdG90YWwgc2l6ZSBvZiBzcGlsbCBmaWxlcyBvbiBkaXNrIGZvciB0aGlzIHJl b3JkZXIgYnVmZmVyIChpbgorCSAqIGJ5dGVzKS4gIFVubGlrZSBzcGlsbEJ5dGVzIHdoaWNoIGlz IGEgY3VtdWxhdGl2ZSBzdGF0aXN0aWMgY291bnRlciwgdGhpcworCSAqIHRyYWNrcyB0aGUgYWN0 dWFsIG9uLWRpc2sgZm9vdHByaW50IHJpZ2h0IG5vdyBhbmQgaXMgZGVjcmVtZW50ZWQgd2hlbgor CSAqIHNwaWxsIGZpbGVzIGFyZSBjbGVhbmVkIHVwLiAgVXNlZCB0byBlbmZvcmNlIGxvZ2ljYWxf ZGVjb2Rpbmdfc3BpbGxfbGltaXQuCisJICovCisJU2l6ZQkJc3BpbGxCeXRlc09uRGlzazsKKwog CS8qIFN0YXRpc3RpY3MgYWJvdXQgdHJhbnNhY3Rpb25zIHN0cmVhbWVkIHRvIHRoZSBkZWNvZGlu ZyBvdXRwdXQgcGx1Z2luICovCiAJaW50NjQJCXN0cmVhbVR4bnM7CQkvKiBudW1iZXIgb2YgdHJh bnNhY3Rpb25zIHN0cmVhbWVkICovCiAJaW50NjQJCXN0cmVhbUNvdW50OwkvKiBzdHJlYW1pbmcg aW52b2NhdGlvbiBjb3VudGVyICovCi0tIAoyLjQzLjcKCg== --00000000000078938a064db0f180--