<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>29010</bug_id>
          
          <creation_ts>2009-09-07 07:44:19 -0700</creation_ts>
          <short_desc>Update Canvas3D spec to latest revision</short_desc>
          <delta_ts>2009-09-08 06:02:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>kbr</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>145149</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-09-07 07:44:19 -0700</bug_when>
    <thetext>Canvas 3D spec has been updated and the WebKit implementation needs to match</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145155</commentid>
    <comment_count>1</comment_count>
      <attachid>39147</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-09-07 07:57:42 -0700</bug_when>
    <thetext>Created attachment 39147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145156</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-09-07 08:09:39 -0700</bug_when>
    <thetext>Notes on this patch:

The original work is from Ken Russell at Google. I added constructors and getters/setters for all the CanvasXXXArray types, which are specific to the WebKit JS implementation. And I added the changes to GraphicsContext3D that are specific to the Mac implementation. But all the API changes are the same as in his original patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145235</commentid>
    <comment_count>3</comment_count>
      <attachid>39147</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-09-07 14:59:51 -0700</bug_when>
    <thetext>Comment on attachment 39147
Patch

These headers have incorrect indentation -- content inside the namespace block of a header should be indented
&gt; Index: WebCore/bindings/js/JSCanvasArrayBufferConstructor.h
&gt; Index: WebCore/bindings/js/JSCanvasByteArrayConstructor.h
&gt; Index: WebCore/bindings/js/JSCanvasFloatArrayConstructor.h
&gt; Index: WebCore/bindings/js/JSCanvasIntArrayConstructor.h
&gt; Index: WebCore/bindings/js/JSCanvasShortArrayConstructor.h
&gt; Index: WebCore/bindings/js/JSCanvasUnsignedIntArrayConstructor.h
&gt; Index: WebCore/bindings/js/JSCanvasUnsignedShortArrayConstructor.h

Your changes to WebCore/html/canvas/CanvasByteArray.cpp have resulted in incorrect indenting (in the implementation file we don&apos;t indent inside the namespace)

Other than those minor style quirks, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145324</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-09-08 06:02:06 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/DerivedSources.make
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Adding         WebCore/bindings/js/JSCanvasArrayBufferConstructor.cpp
Adding         WebCore/bindings/js/JSCanvasArrayBufferConstructor.h
Adding         WebCore/bindings/js/JSCanvasArrayCustom.cpp
Adding         WebCore/bindings/js/JSCanvasByteArrayConstructor.cpp
Adding         WebCore/bindings/js/JSCanvasByteArrayConstructor.h
Adding         WebCore/bindings/js/JSCanvasByteArrayCustom.cpp
Adding         WebCore/bindings/js/JSCanvasFloatArrayConstructor.cpp
Adding         WebCore/bindings/js/JSCanvasFloatArrayConstructor.h
Adding         WebCore/bindings/js/JSCanvasFloatArrayCustom.cpp
Adding         WebCore/bindings/js/JSCanvasIntArrayConstructor.cpp
Adding         WebCore/bindings/js/JSCanvasIntArrayConstructor.h
Adding         WebCore/bindings/js/JSCanvasIntArrayCustom.cpp
Sending        WebCore/bindings/js/JSCanvasRenderingContext3DCustom.cpp
Adding         WebCore/bindings/js/JSCanvasShortArrayConstructor.cpp
Adding         WebCore/bindings/js/JSCanvasShortArrayConstructor.h
Adding         WebCore/bindings/js/JSCanvasShortArrayCustom.cpp
Adding         WebCore/bindings/js/JSCanvasUnsignedByteArrayConstructor.cpp
Adding         WebCore/bindings/js/JSCanvasUnsignedByteArrayConstructor.h
Adding         WebCore/bindings/js/JSCanvasUnsignedByteArrayCustom.cpp
Adding         WebCore/bindings/js/JSCanvasUnsignedIntArrayConstructor.cpp
Adding         WebCore/bindings/js/JSCanvasUnsignedIntArrayConstructor.h
Adding         WebCore/bindings/js/JSCanvasUnsignedIntArrayCustom.cpp
Adding         WebCore/bindings/js/JSCanvasUnsignedShortArrayConstructor.cpp
Adding         WebCore/bindings/js/JSCanvasUnsignedShortArrayConstructor.h
Adding         WebCore/bindings/js/JSCanvasUnsignedShortArrayCustom.cpp
Sending        WebCore/bindings/js/JSDOMWindowCustom.cpp
Sending        WebCore/html/HTMLCanvasElement.cpp
Adding         WebCore/html/canvas/CanvasArray.cpp
Adding         WebCore/html/canvas/CanvasArray.h
Adding         WebCore/html/canvas/CanvasArray.idl
Adding         WebCore/html/canvas/CanvasArrayBuffer.cpp
Adding         WebCore/html/canvas/CanvasArrayBuffer.h
Adding         WebCore/html/canvas/CanvasArrayBuffer.idl
Sending        WebCore/html/canvas/CanvasByteArray.cpp
Sending        WebCore/html/canvas/CanvasByteArray.h
Sending        WebCore/html/canvas/CanvasByteArray.idl
Adding         WebCore/html/canvas/CanvasFloatArray.cpp
Adding         WebCore/html/canvas/CanvasFloatArray.h
Adding         WebCore/html/canvas/CanvasFloatArray.idl
Adding         WebCore/html/canvas/CanvasIntArray.cpp
Adding         WebCore/html/canvas/CanvasIntArray.h
Adding         WebCore/html/canvas/CanvasIntArray.idl
Sending        WebCore/html/canvas/CanvasRenderingContext3D.cpp
Sending        WebCore/html/canvas/CanvasRenderingContext3D.h
Sending        WebCore/html/canvas/CanvasRenderingContext3D.idl
Adding         WebCore/html/canvas/CanvasShortArray.cpp
Adding         WebCore/html/canvas/CanvasShortArray.h
Adding         WebCore/html/canvas/CanvasShortArray.idl
Sending        WebCore/html/canvas/CanvasTexture.cpp
Sending        WebCore/html/canvas/CanvasTexture.h
Adding         WebCore/html/canvas/CanvasUnsignedByteArray.cpp
Adding         WebCore/html/canvas/CanvasUnsignedByteArray.h
Adding         WebCore/html/canvas/CanvasUnsignedByteArray.idl
Adding         WebCore/html/canvas/CanvasUnsignedIntArray.cpp
Adding         WebCore/html/canvas/CanvasUnsignedIntArray.h
Adding         WebCore/html/canvas/CanvasUnsignedIntArray.idl
Adding         WebCore/html/canvas/CanvasUnsignedShortArray.cpp
Adding         WebCore/html/canvas/CanvasUnsignedShortArray.h
Adding         WebCore/html/canvas/CanvasUnsignedShortArray.idl
Sending        WebCore/page/DOMWindow.idl
Sending        WebCore/platform/graphics/GraphicsContext3D.h
Sending        WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
Transmitting file data .................................................................
Committed revision 48150.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39147</attachid>
            <date>2009-09-07 07:57:42 -0700</date>
            <delta_ts>2009-09-07 14:59:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>29010.patch</filename>
            <type>text/plain</type>
            <size>392726</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODExNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjU5IEBACisyMDA5LTA5LTA3ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cGRhdGUgQ2FudmFzIDNEIGltcGxlbWVudGF0aW9uIHRvIG1hdGNoIHNwZWMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDEwCisKKyAgICAgICAgVGhp
cyBhZGRzIHNldmVyYWwgbmV3IENhbnZhc1hYWEFycmF5IGNsYXNzZXMgZWFjaCBvZiB3aGljaCBo
YXMgYSBjdXN0b20gY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGN1c3RvbSBnZXR0ZXJzIGFuZCBz
ZXR0ZXJzLiBBbHNvIGNoYW5nZWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEIGFuZCBHcmFwaGlj
c0NvbnRleHQzRAorICAgICAgICB0byBtYXRjaCB0aGUgbmV3IGFuZCBjaGFuZ2VkIEFQSS4KKwor
ICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5jcHA6IEFkZGVkIHdpdGggcHJvcGVydGllcyBzdm46ZW9sLXN0eWxl
IGFuZCBzdm46bWltZS10eXBlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5oOiBBZGRlZCB3aXRoIHByb3BlcnRpZXMgc3ZuOmVvbC1zdHlsZSBh
bmQgc3ZuOm1pbWUtdHlwZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc0FycmF5Q3Vz
dG9tLmNwcDogQWRkZWQgd2l0aCBwcm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2bjptaW1l
LXR5cGUuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkIHdpdGggcHJvcGVydGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10
eXBlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3Iu
aDogQWRkZWQgd2l0aCBwcm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2bjptaW1lLXR5cGUu
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNCeXRlQXJyYXlDdXN0b20uY3BwOiBBZGRl
ZCB3aXRoIHByb3BlcnRpZXMgc3ZuOmVvbC1zdHlsZSBhbmQgc3ZuOm1pbWUtdHlwZS4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHA6IEFkZGVk
IHdpdGggcHJvcGVydGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yLmg6IEFkZGVkIHdp
dGggcHJvcGVydGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHA6IEFkZGVkIHdpdGggcHJv
cGVydGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHA6IEFkZGVkIHdpdGggcHJvcGVy
dGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5oOiBBZGRlZCB3aXRoIHByb3BlcnRpZXMg
c3ZuOmVvbC1zdHlsZSBhbmQgc3ZuOm1pbWUtdHlwZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NhbnZhc0ludEFycmF5Q3VzdG9tLmNwcDogQWRkZWQgd2l0aCBwcm9wZXJ0aWVzIHN2bjplb2wt
c3R5bGUgYW5kIHN2bjptaW1lLXR5cGUuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcDogQWRkZWQgd2l0
aCBwcm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2bjptaW1lLXR5cGUuCisgICAgICAgICog
YmluZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuaDogQWRkZWQgd2l0aCBw
cm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2bjptaW1lLXR5cGUuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5Q3VzdG9tLmNwcDogQWRkZWQgd2l0aCBwcm9wZXJ0
aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2bjptaW1lLXR5cGUuCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcDogQWRkZWQgd2l0aCBw
cm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2bjptaW1lLXR5cGUuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmg6IEFkZGVkIHdp
dGggcHJvcGVydGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwOiBBZGRlZCB3
aXRoIHByb3BlcnRpZXMgc3ZuOmVvbC1zdHlsZSBhbmQgc3ZuOm1pbWUtdHlwZS4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHA6IEFk
ZGVkIHdpdGggcHJvcGVydGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmg6
IEFkZGVkIHdpdGggcHJvcGVydGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHA6
IEFkZGVkIHdpdGggcHJvcGVydGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0
b3IuY3BwOiBBZGRlZCB3aXRoIHByb3BlcnRpZXMgc3ZuOmVvbC1zdHlsZSBhbmQgc3ZuOm1pbWUt
dHlwZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNv
bnN0cnVjdG9yLmg6IEFkZGVkIHdpdGggcHJvcGVydGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46
bWltZS10eXBlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5Q3VzdG9tLmNwcDogQWRkZWQgd2l0aCBwcm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2
bjptaW1lLXR5cGUuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmNhbnZhc0FycmF5QnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpjYW52YXNCeXRlQXJyYXkpOgorICAgICAgICAo
V2ViQ29yZTo6SlNET01XaW5kb3c6OmNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpjYW52YXNJbnRBcnJheSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvdzo6Y2FudmFzVW5zaWduZWRJbnRBcnJheSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvdzo6Y2FudmFzU2hvcnRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvdzo6Y2FudmFzVW5zaWduZWRTaG9ydEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93OjpjYW52YXNGbG9hdEFycmF5KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvQ2FudmFzQXJyYXkuY3BwOiBBZGRlZCB3aXRoIHByb3BlcnRpZXMg
c3ZuOmVvbC1zdHlsZSBhbmQgc3ZuOm1pbWUtdHlwZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9D
YW52YXNBcnJheS5oOiBBZGRlZCB3aXRoIHByb3BlcnRpZXMgc3ZuOmVvbC1zdHlsZSBhbmQgc3Zu
Om1pbWUtdHlwZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNBcnJheS5pZGw6IEFkZGVk
LgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc0FycmF5QnVmZmVyLmNwcDogQWRkZWQgd2l0
aCBwcm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2bjptaW1lLXR5cGUuCisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuaDogQWRkZWQgd2l0aCBwcm9wZXJ0aWVzIHN2
bjplb2wtc3R5bGUgYW5kIHN2bjptaW1lLXR5cGUuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2Fu
dmFzQXJyYXlCdWZmZXIuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNC
eXRlQXJyYXkuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5pZGw6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5jcHA6IEFkZGVkIHdpdGggcHJvcGVydGllcyBzdm46
ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c0Zsb2F0QXJyYXkuaDogQWRkZWQgd2l0aCBwcm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2
bjptaW1lLXR5cGUuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5pZGw6
IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc0ludEFycmF5LmNwcDogQWRkZWQg
d2l0aCBwcm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2bjptaW1lLXR5cGUuCisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzSW50QXJyYXkuaDogQWRkZWQgd2l0aCBwcm9wZXJ0aWVzIHN2
bjplb2wtc3R5bGUgYW5kIHN2bjptaW1lLXR5cGUuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2Fu
dmFzSW50QXJyYXkuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiZWdpblBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZW5kUGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c2l6ZUluQnl0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlckRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRl
RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZHJh
d0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Z2V0Qm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdldEJvb2xlYW52KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0QnVmZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnZXRJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2V0U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmkp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRUZXhQYXJh
bWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omdl
dFVuaWZvcm1mKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0VW5pZm9ybWkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6dGV4UGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xaSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00aSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1c2VQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmFsaWRhdGVQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4
QXR0cmliMWYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWIyZik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmlld3BvcnQp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGw6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5jcHA6IEFkZGVkIHdpdGggcHJvcGVydGll
cyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgorICAgICAgICAqIGh0bWwvY2FudmFz
L0NhbnZhc1Nob3J0QXJyYXkuaDogQWRkZWQgd2l0aCBwcm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUg
YW5kIHN2bjptaW1lLXR5cGUuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJh
eS5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1RleHR1cmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzVGV4dHVyZTo6Q2FudmFzVGV4dHVyZSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzVGV4dHVyZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
VGV4dHVyZTo6aXNDdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzVGV4dHVyZTo6c2V0Q3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5jcHA6IEFkZGVkIHdpdGgg
cHJvcGVydGllcyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Lmg6IEFkZGVkIHdpdGggcHJvcGVydGll
cyBzdm46ZW9sLXN0eWxlIGFuZCBzdm46bWltZS10eXBlLgorICAgICAgICAgKiBodG1sL2NhbnZh
cy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuY3BwOiBBZGRlZCB3aXRoIHByb3BlcnRpZXMgc3Zu
OmVvbC1zdHlsZSBhbmQgc3ZuOm1pbWUtdHlwZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52
YXNVbnNpZ25lZEludEFycmF5Lmg6IEFkZGVkIHdpdGggcHJvcGVydGllcyBzdm46ZW9sLXN0eWxl
IGFuZCBzdm46bWltZS10eXBlLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVk
SW50QXJyYXkuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXkuY3BwOiBBZGRlZCB3aXRoIHByb3BlcnRpZXMgc3ZuOmVvbC1zdHlsZSBhbmQg
c3ZuOm1pbWUtdHlwZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkuaDogQWRkZWQgd2l0aCBwcm9wZXJ0aWVzIHN2bjplb2wtc3R5bGUgYW5kIHN2bjptaW1l
LXR5cGUuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Lmlk
bDogQWRkZWQuCisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjplbmRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJ1
ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1
YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdB
cnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWkpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRy
aXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRy
aXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRy
aXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIx
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW4pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QnVmZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRl
cmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRl
cmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0
ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0
ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNpemVJbkJ5dGVzKToKKwogMjAwOS0wOS0wNyAgTWFk
cyBBZ2VyICA8YWdlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBC
YXJ0aC4KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDQ4MTEwKQorKysgV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTQgQEAgRE9N
X0NMQVNTRVMgPSBcCiAgICAgQ1NTVmFsdWVMaXN0IFwKICAgICBDU1NWYXJpYWJsZXNSdWxlIFwK
ICAgICBDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbiBcCisgICAgQ2FudmFzQXJyYXkgXAorICAgIENh
bnZhc0FycmF5QnVmZmVyIFwKICAgICBDYW52YXNCdWZmZXIgXAogICAgIENhbnZhc0J5dGVBcnJh
eSBcCisgICAgQ2FudmFzRmxvYXRBcnJheSBcCiAgICAgQ2FudmFzRnJhbWVidWZmZXIgXAogICAg
IENhbnZhc0dyYWRpZW50IFwKLSAgICBDYW52YXNOdW1iZXJBcnJheSBcCisgICAgQ2FudmFzSW50
QXJyYXkgXAogICAgIENhbnZhc1BhdHRlcm4gXAogICAgIENhbnZhc1Byb2dyYW0gXAogICAgIENh
bnZhc1JlbmRlcmJ1ZmZlciBcCkBAIC04MCw3ICs4MywxMSBAQCBET01fQ0xBU1NFUyA9IFwKICAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgXAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RCBcCiAgICAgQ2FudmFzU2hhZGVyIFwKKyAgICBDYW52YXNTaG9ydEFycmF5IFwKICAgICBDYW52
YXNUZXh0dXJlIFwKKyAgICBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSBcCisgICAgQ2FudmFzVW5z
aWduZWRJbnRBcnJheSBcCisgICAgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5IFwKICAgICBDaGFy
YWN0ZXJEYXRhIFwKICAgICBDbGllbnRSZWN0IFwKICAgICBDbGllbnRSZWN0TGlzdCBcCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDgx
MTApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw2IEBACiAJCTFBOEY2QkM1MERCNTVDREMwMDFEQjc5NCAv
KiBNYW5pZmVzdFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQThGNkJCQTBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuY3Bw
ICovOyB9OwogCQkxQThGNkJDNjBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkJCMERC
NTVDREMwMDFEQjc5NCAvKiBNYW5pZmVzdFBhcnNlci5oICovOyB9OwogCQkxQTk4OTU2QjBBQTc4
RjgwMDA1RUY1RUYgLyogS1VSTENGTmV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTg5NTZBMEFBNzhGODAwMDVFRjVFRiAvKiBLVVJMQ0ZOZXQu
Y3BwICovOyB9OwotCQkxQTlFRjQ1NzBBMUI5NTdEMDAzMzJCNjMgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE5RUY0NTYwQTFCOTU3RDAwMzMyQjYzIC8qIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcCAqLzsgfTsKIAkJMUFCMUFFN0EwQzA1MUZERTAwMTM5RjRGIC8q
IHpvb21JbkN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBQjFBRTc4MEMwNTFGREUwMDEzOUY0RiAvKiB6b29tSW5DdXJzb3IucG5nICov
OyB9OwogCQkxQUIxQUU3QjBDMDUxRkRFMDAxMzlGNEYgLyogem9vbU91dEN1cnNvci5wbmcgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjFBRTc5MEMw
NTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vyc29yLnBuZyAqLzsgfTsKIAkJMUFCN0ZDNjgwQThC
OTJFQzAwRDlEMzdCIC8qIFhQYXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjdGQzQ3MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0
aEV2YWx1YXRvci5jcHAgKi87IH07CkBAIC03ODMsMjQgKzc4MiwxNiBAQAogCQk0OTgzOTE1OTBG
MUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTE1NjBGMUU3NzY5MDBDMjM3ODIgLyogV2Vi
S2l0Q1NTTWF0cml4LmggKi87IH07CiAJCTQ5ODM5MTYzMEYxRThFRTEwMEMyMzc4MiAvKiBKU1dl
YktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTYxMEYxRThFRTEwMEMyMzc4MiAvKiBKU1dlYktpdENT
U01hdHJpeENvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJNDk4MzkxNjQwRjFFOEVFMTAwQzIzNzgy
IC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTYyMEYxRThFRTEwMEMyMzc4MiAvKiBKU1dl
YktpdENTU01hdHJpeENvbnN0cnVjdG9yLmggKi87IH07Ci0JCTQ5ODNBOTcwMTA0MzVFOTAwMERC
NzBGOSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4M0E5NkYxMDQzNUU5MDAwREI3MEY5
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi87IH07Ci0JCTQ5QzdCOTdF
MTA0MkQyMDgwMDA5RDQ0NyAvKiBKU0NhbnZhc051bWJlckFycmF5Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTdDMTA0MkQyMDgw
MDA5RDQ0NyAvKiBKU0NhbnZhc051bWJlckFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKLQkJNDlDN0I5
N0YxMDQyRDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTdE
MTA0MkQyMDgwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAg
Ki87IH07CiAJCTQ5QzdCOTkzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MDEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCdWZmZXIuY3BwICovOyB9OwogCQk0OUM3Qjk5NDEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0Nh
bnZhc0J1ZmZlci5oICovOyB9OwogCQk0OUM3Qjk5NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52
YXNCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlDN0I5ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmNwcCAq
LzsgfTsKIAkJNDlDN0I5OTYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MzEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCeXRlQXJyYXkuaCAqLzsgfTsKIAkJNDlDN0I5OTcx
MDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODQxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuY3BwICovOyB9OwogCQk0OUM3Qjk5ODEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFz
RnJhbWVidWZmZXIuaCAqLzsgfTsKLQkJNDlDN0I5OTkxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2Fu
dmFzTnVtYmVyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlDN0I5ODYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXku
Y3BwICovOyB9OwotCQk0OUM3Qjk5QTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJB
cnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlD
N0I5ODcxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXkuaCAqLzsgfTsKIAkJ
NDlDN0I5OUIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4ODEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNDYW52YXNQcm9ncmFtLmNwcCAqLzsgfTsKIAkJNDlDN0I5OUMxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODkxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJv
Z3JhbS5oICovOyB9OwogCQk0OUM3Qjk5RDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5k
ZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlDN0I5OEExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCAq
LzsgfTsKIAkJNDlDN0I5OUUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4
QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJidWZmZXIuaCAqLzsgfTsKLQkJNDlD
N0I5OUYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4QzEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsgfTsKLQkJNDlD
N0I5QTAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5OEQxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OwotCQk0OUM3QjlB
MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOThFMTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oICovOyB9OwogCQk0OUM3QjlB
MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5OEYxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTQ2FudmFzU2hhZGVyLmNwcCAqLzsgfTsKIAkJNDlDN0I5QTMxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTQ2FudmFzU2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUM3Qjk5MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuaCAqLzsg
fTsKIAkJNDlDN0I5QTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzVGV4dHVyZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk5MTEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNDYW52YXNUZXh0dXJlLmNwcCAqLzsgfTsKQEAgLTgxMSw4ICs4MDIs
NiBAQAogCQk0OUM3QjlDQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlBQzEwNDJE
MzJFMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmggKi87IH07CiAJCTQ5QzdCOUNFMTA0MkQz
MkYwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlBRTEwNDJEMzJFMDAwOUQ0NDcgLyogQ2Fu
dmFzRnJhbWVidWZmZXIuY3BwICovOyB9OwogCQk0OUM3QjlDRjEwNDJEMzJGMDAwOUQ0NDcgLyog
Q2FudmFzRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QzdCOUFGMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5o
ICovOyB9OwotCQk0OUM3QjlEMTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJyYXku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5
QjExMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc051bWJlckFycmF5LmNwcCAqLzsgfTsKLQkJNDlD
N0I5RDIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc051bWJlckFycmF5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCMjEwNDJEMzJFMDAwOUQ0
NDcgLyogQ2FudmFzTnVtYmVyQXJyYXkuaCAqLzsgfTsKIAkJNDlDN0I5RDQxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc09iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUM3QjlCNDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmNw
cCAqLzsgfTsKIAkJNDlDN0I5RDUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc09iamVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QjUxMDQy
RDMyRjAwMDlENDQ3IC8qIENhbnZhc09iamVjdC5oICovOyB9OwogCQk0OUM3QjlENjEwNDJEMzJG
MDAwOUQ0NDcgLyogQ2FudmFzUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCNjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUHJv
Z3JhbS5jcHAgKi87IH07CkBAIC04MzMsNyArODIyLDYgQEAKIAkJNDlDN0JBMDIxMDQyRDM4QzAw
MDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUZGMTA0MkQzOEMwMDA5RDQ0NyAvKiBHcmFw
aGljc0NvbnRleHQzRE1hYy5jcHAgKi87IH07CiAJCTQ5QzdCQTc5MTA0MkVGQUUwMDA5RDQ0NyAv
KiBPcGVuR0wuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlDN0JBNzgxMDQyRUZBRTAwMDlENDQ3IC8qIE9wZW5HTC5mcmFtZXdvcmsg
Ki87IH07CiAJCTQ5QzdCQThEMTA0MkY1QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCQThD
MTA0MkY1QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCAqLzsgfTsKLQkJNDlDN0Q0
RkIxMDQyRjk1RjAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdENEZBMTA0MkY5
NUYwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgKi87IH07CiAJCTQ5
RDVEQzJCMEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUQ1REMyNzBG
NDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovOyB9Owog
CQk0OUQ1REMyQzBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RDVEQzI4
MEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oICovOyB9Owog
CQk0OUQ1REMyRDBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlE
NURDMjkwRjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cCAqLzsgfTsKQEAgLTg1OSw2ICs4NDcsNzggQEAKIAkJNDlFOTEyQUMwRUZBQzkwNjAwOUQwQ0FG
IC8qIEFuaW1hdGlvbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlFOTEyQTcwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbkxpc3QuY3Bw
ICovOyB9OwogCQk0OUU5MTJBRDBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFOTEyQTgwRUZB
QzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbkxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUU5MTJBRTBFRkFDOTA2MDA5RDBDQUYgLyogVGlt
aW5nRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RTkxMkE5MEVGQUM5MDYwMDlEMENBRiAvKiBUaW1pbmdGdW5jdGlvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ5RUVDRERGMTA1MDND
MjQwMDA5OUZBQiAvKiBDYW52YXNBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0RDNzEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzQXJy
YXkuY3BwICovOyB9OworCQk0OUVFQ0RFMDEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzQXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDREM4
MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNBcnJheS5oICovOyB9OworCQk0OUVFQ0RFMTEwNTAz
QzI0MDAwOTlGQUIgLyogQ2FudmFzQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0RDOTEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFz
QXJyYXkuaWRsICovOyB9OworCQk0OUVFQ0RFMjEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzQXJy
YXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUNEQ0ExMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0FycmF5QnVmZmVyLmNwcCAqLzsg
fTsKKwkJNDlFRUNERTMxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc0FycmF5QnVmZmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0RDQjEwNTAz
QzIzMDAwOTlGQUIgLyogQ2FudmFzQXJyYXlCdWZmZXIuaCAqLzsgfTsKKwkJNDlFRUNERTQxMDUw
M0MyNDAwMDk5RkFCIC8qIENhbnZhc0FycmF5QnVmZmVyLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNEQ0MxMDUwM0MyMzAwMDk5RkFCIC8q
IENhbnZhc0FycmF5QnVmZmVyLmlkbCAqLzsgfTsKKwkJNDlFRUNERTUxMDUwM0MyNDAwMDk5RkFC
IC8qIENhbnZhc0Zsb2F0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlFRUNEQ0QxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0Zsb2F0QXJy
YXkuY3BwICovOyB9OworCQk0OUVFQ0RFNjEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzRmxvYXRB
cnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlF
RUNEQ0UxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0Zsb2F0QXJyYXkuaCAqLzsgfTsKKwkJNDlF
RUNERTcxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc0Zsb2F0QXJyYXkuaWRsIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0RDRjEwNTAzQzIzMDAw
OTlGQUIgLyogQ2FudmFzRmxvYXRBcnJheS5pZGwgKi87IH07CisJCTQ5RUVDREU4MTA1MDNDMjQw
MDA5OUZBQiAvKiBDYW52YXNJbnRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0REMDEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzSW50
QXJyYXkuY3BwICovOyB9OworCQk0OUVFQ0RFOTEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzSW50
QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUVDREQxMTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNJbnRBcnJheS5oICovOyB9OworCQk0OUVF
Q0RFQTEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzSW50QXJyYXkuaWRsIGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0REMjEwNTAzQzIzMDAwOTlG
QUIgLyogQ2FudmFzSW50QXJyYXkuaWRsICovOyB9OworCQk0OUVFQ0RFQjEwNTAzQzI0MDAwOTlG
QUIgLyogQ2FudmFzU2hvcnRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0REMzEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzU2hvcnRB
cnJheS5jcHAgKi87IH07CisJCTQ5RUVDREVDMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNTaG9y
dEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUVFQ0RENDEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzU2hvcnRBcnJheS5oICovOyB9OworCQk0
OUVFQ0RFRDEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzU2hvcnRBcnJheS5pZGwgaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDREQ1MTA1MDNDMjMw
MDA5OUZBQiAvKiBDYW52YXNTaG9ydEFycmF5LmlkbCAqLzsgfTsKKwkJNDlFRUNERUUxMDUwM0My
NDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDREQ2MTA1MDNDMjMwMDA5OUZBQiAv
KiBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5jcHAgKi87IH07CisJCTQ5RUVDREVGMTA1MDNDMjQw
MDA5OUZBQiAvKiBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNERDcxMDUwM0MyMzAwMDk5RkFCIC8qIENh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmggKi87IH07CisJCTQ5RUVDREYwMTA1MDNDMjQwMDA5OUZB
QiAvKiBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDREQ4MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52
YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGwgKi87IH07CisJCTQ5RUVDREYxMTA1MDNDMjQwMDA5OUZB
QiAvKiBDYW52YXNVbnNpZ25lZEludEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDREQ5MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNV
bnNpZ25lZEludEFycmF5LmNwcCAqLzsgfTsKKwkJNDlFRUNERjIxMDUwM0MyNDAwMDk5RkFCIC8q
IENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVDRERBMTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNVbnNpZ25l
ZEludEFycmF5LmggKi87IH07CisJCTQ5RUVDREYzMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNV
bnNpZ25lZEludEFycmF5LmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlFRUNEREIxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkSW50
QXJyYXkuaWRsICovOyB9OworCQk0OUVFQ0RGNDEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzVW5z
aWduZWRTaG9ydEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDRERDMTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkuY3BwICovOyB9OworCQk0OUVFQ0RGNTEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzVW5z
aWduZWRTaG9ydEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUVFQ0RERDEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5LmggKi87IH07CisJCTQ5RUVDREY2MTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXkuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUVFQ0RERTEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5LmlkbCAqLzsgfTsKKwkJNDlFRUNGMDAxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzQXJy
YXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXlCdWZmZXIuY3BwICov
OyB9OworCQk0OUVFQ0YwMTEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjMx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXlCdWZmZXIuaCAqLzsgfTsKKwkJNDlFRUNG
MDIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNDEwNTA3MEM0MDAwOTlG
QUIgLyogSlNDYW52YXNGbG9hdEFycmF5LmNwcCAqLzsgfTsKKwkJNDlFRUNGMDMxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFz
RmxvYXRBcnJheS5oICovOyB9OworCQk0OUVFQ0YwNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52
YXNJbnRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUVFQ0VGNjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheS5jcHAgKi87
IH07CisJCTQ5RUVDRjA1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNzEwNTA3
MEM0MDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheS5oICovOyB9OworCQk0OUVFQ0YwNjEwNTA3
MEM0MDAwOTlGQUIgLyogSlNDYW52YXNTaG9ydEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY4MTA1MDcwQzQwMDA5OUZBQiAvKiBK
U0NhbnZhc1Nob3J0QXJyYXkuY3BwICovOyB9OworCQk0OUVFQ0YwNzEwNTA3MEM0MDAwOTlGQUIg
LyogSlNDYW52YXNTaG9ydEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNTaG9ydEFy
cmF5LmggKi87IH07CisJCTQ5RUVDRjA4MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVDRUZBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5LmNwcCAqLzsgfTsKKwkJNDlFRUNGMDkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5z
aWduZWRCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5LmggKi87IH07CisJCTQ5RUVDRjBBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkSW50QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlFRUNFRkMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJh
eS5jcHAgKi87IH07CisJCTQ5RUVDRjBCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkSW50QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXku
aCAqLzsgfTsKKwkJNDlFRUNGMEMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eS5jcHAgKi87IH07CisJCTQ5RUVDRjBEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlFRUNFRkYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5LmggKi87IH07CisJCTQ5RUVDRjFCMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVD
RjE5MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5LmNwcCAqLzsgfTsKKwkJNDlFRUNG
MUMxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBK
U0NhbnZhc0FycmF5LmggKi87IH07CisJCTQ5RUVDRjc4MTA1MDhEOUMwMDA5OUZBQiAvKiBKU0Nh
bnZhc0J5dGVBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFQ0Y3MTEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNCeXRlQXJy
YXlDdXN0b20uY3BwICovOyB9OworCQk0OUVFQ0Y3OTEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52
YXNGbG9hdEFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUVDRjcyMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJy
YXlDdXN0b20uY3BwICovOyB9OworCQk0OUVFQ0Y3QTEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52
YXNJbnRBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OUVFQ0Y3MzEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheUN1
c3RvbS5jcHAgKi87IH07CisJCTQ5RUVDRjdCMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1No
b3J0QXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlFRUNGNzQxMDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheUN1
c3RvbS5jcHAgKi87IH07CisJCTQ5RUVDRjdDMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vu
c2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjc1MTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNDlFRUNGN0QxMDUwOEQ5QzAwMDk5RkFC
IC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0Y3NjEwNTA4RDlDMDAwOTlGQUIgLyog
SlNDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNDlFRUNGN0UxMDUw
OEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjc3MTA1MDhE
OUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAgKi87IH07
CisJCTQ5RUVDRkFCMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDlFRUNGOTkxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5jcHAgKi87IH07CisJCTQ5RUVDRkFDMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDRjlBMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuaCAqLzsgfTsKKwkJNDlFRUNGQUQxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2Fu
dmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGOUIxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzQnl0
ZUFycmF5Q29uc3RydWN0b3IuY3BwICovOyB9OworCQk0OUVFQ0ZBRTEwNTA5MzgyMDAwOTlGQUIg
LyogSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGOUMxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2Fu
dmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLzsgfTsKKwkJNDlFRUNGQUYxMDUwOTM4MjAwMDk5
RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjlEMTA1MDkzODIwMDA5OUZBQiAv
KiBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi87IH07CisJCTQ5RUVDRkIwMTA1
MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGOUUxMDUwOTM4MjAw
MDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yLmggKi87IH07CisJCTQ5RUVD
RkIxMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGOUYxMDUw
OTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi87IH07CisJ
CTQ5RUVDRkIyMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRkEw
MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IuaCAqLzsgfTsK
KwkJNDlFRUNGQjUxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUVDRkEzMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5j
cHAgKi87IH07CisJCTQ5RUVDRkI2MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJy
YXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlFRUNGQTQxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0
cnVjdG9yLmggKi87IH07CisJCTQ5RUVDRkI3MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vu
c2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGQTUxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFz
VW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi87IH07CisJCTQ5RUVDRkI4MTA1MDkz
ODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRkE2MTA1MDkz
ODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLzsg
fTsKKwkJNDlFRUNGQjkxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJh
eUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVDRkE3MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJy
YXlDb25zdHJ1Y3Rvci5jcHAgKi87IH07CisJCTQ5RUVDRkJBMTA1MDkzODIwMDA5OUZBQiAvKiBK
U0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGQTgxMDUwOTM4MjAwMDk5RkFCIC8qIEpT
Q2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmggKi87IH07CisJCTQ5RUVDRkJCMTA1
MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRkE5
MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9y
LmNwcCAqLzsgfTsKKwkJNDlFRUNGQkMxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWdu
ZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVDRkFBMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmggKi87IH07CisJCTQ5RUVEMTQyMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0MxMDUxOTY5NDAwMDk5RkFCIC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CisJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi87IH07CisJCTQ5RUVEMTQ1MTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0YxMDUxOTY5NDAwMDk5RkFCIC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi87IH07CisJCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwICovOyB9OworCQk0OUVFRDE0NzEwNTE5Njk0
MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oICovOyB9OworCQk0OUVFRDE0RTEwNTE5NzFB
MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxNEIxMDUxOTcxOTAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCAqLzsgfTsKKwkJ
NDlFRUQxNEYxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3Rv
bS5jcHAgKi87IH07CisJCTQ5RUVEMTUwMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlFRUQxNEQxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAgKi87IH07CiAJCTRBOEM5NkVCMEJFNjkwMzIwMDRFRUZGMCAvKiBT
ZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRy
b2xsZXJNYWMubW0gKi87IH07CiAJCTRCMjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJv
YXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjI3
MDhDNTBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5oICovOyB9OwogCQk0QjI3MDk4MzBB
RjJFNUUwMDA2NTEyN0YgLyogUGFzdGVib2FyZE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMjcwOTgxMEFGMkU1RTAwMDY1MTI3RiAvKiBQYXN0
ZWJvYXJkTWFjLm1tICovOyB9OwpAQCAtMTExNyw4ICsxMTc3LDYgQEAKIAkJNjVERjMyM0EwOUQx
REU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzR3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REYzMjM0MDlEMURFNjUwMDBCRTMyNSAvKiBKU0Nh
bnZhc0dyYWRpZW50LmggKi87IH07CiAJCTY1REYzMjNCMDlEMURFNjUwMDBCRTMyNSAvKiBKU0Nh
bnZhc1BhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjVERjMyMzUwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUGF0dGVybi5jcHAgKi87
IH07CiAJCTY1REYzMjNDMDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REYzMjM2MDlEMURF
NjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4uaCAqLzsgfTsKLQkJNjVERjMyM0QwOUQxREU2
NTAwMEJFMzI1IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REYzMjM3MDlEMURFNjUwMDBCRTMy
NSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi87IH07Ci0JCTY1REYzMjNFMDlE
MURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVERjMyMzgwOUQxREU2NTAwMEJF
MzI1IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi87IH07CiAJCTY1REYzMjYxMDlE
MUUxOTkwMDBCRTMyNSAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2NTgxQUYwOUQxNEVFNjAwMEU2
MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgKi87IH07CiAJCTY1RkVBODY5MDk4
MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLzsg
fTsKIAkJNzI2MjZFMDIwRUYwMjJGRTAwQTA3RTIwIC8qIEZvbnRGYXN0UGF0aC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjYyNkUwMTBFRjAyMkZF
MDBBMDdFMjAgLyogRm9udEZhc3RQYXRoLmNwcCAqLzsgfTsKQEAgLTU0MzMsNyArNTQ5MSw2IEBA
CiAJCTFBOEY2QkJBMERCNTVDREMwMDFEQjc5NCAvKiBNYW5pZmVzdFBhcnNlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYW5pZmVzdFBhcnNlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOEY2QkJCMERCNTVDREMwMDFEQjc5NCAvKiBNYW5p
ZmVzdFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYW5pZmVzdFBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTk4OTU2QTBBQTc4RjgwMDA1
RUY1RUYgLyogS1VSTENGTmV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBLVVJMQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTlFRjQ1
NjBBMUI5NTdEMDAzMzJCNjMgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUIxQUU3
ODBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IHpvb21JbkN1
cnNvci5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQjFBRTc5MEMwNTFGREUw
MDEzOUY0RiAvKiB6b29tT3V0Q3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IHpvb21PdXRDdXJzb3IucG5n
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUI3RkM0NzBBOEI5MkVDMDBEOUQzN0Ig
LyogWFBhdGhFdmFsdWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFhQYXRoRXZhbHVhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU4
OTUsMjQgKzU5NTIsMTYgQEAKIAkJNDk4MzkxNTcwRjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENT
U01hdHJpeC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViS2l0Q1NTTWF0cml4LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk4MzkxNjEwRjFFOEVFMTAwQzIzNzgyIC8q
IEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5ODM5MTYyMEYxRThFRTEwMEMyMzc4MiAvKiBKU1dlYktp
dENTU01hdHJpeENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDk4M0E5NkYxMDQzNUU5MDAwREI3MEY5IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUM3Qjk3QzEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheUN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc051bWJlckFy
cmF5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5N0QxMDQy
RDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODAxMDQy
RDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZh
c0J5dGVBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nh
bnZhc0J5dGVBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTgz
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc0J5dGVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUM3Qjk4NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0ZyYW1l
YnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODUxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDYW52YXNGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0OUM3Qjk4NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc051bWJlckFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5ODcxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDYW52YXNOdW1iZXJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0OUM3Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFtLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUHJvZ3JhbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTg5MTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0NhbnZhc1Byb2dyYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52
YXNQcm9ncmFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOThBMTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOThCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1Jl
bmRlcmJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1Jl
bmRlcmJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3Qjk4QzEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOThEMTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5QzdCOThFMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4RjEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDYW52YXNTaGFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0OUM3Qjk5MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNTaGFkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5OTExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzVGV4
dHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1Rl
eHR1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTkyNiw5ICs1OTc1LDYg
QEAKIAkJNDlDN0I5QUUxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc0ZyYW1lYnVmZmVyLmNw
cDsgcGF0aCA9IGNhbnZhcy9DYW52YXNGcmFtZWJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5QzdCOUFGMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52YXNGcmFtZWJ1ZmZlci5o
OyBwYXRoID0gY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ5QzdCOUIwMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzRnJhbWVidWZmZXIuaWRsOyBwYXRoID0g
Y2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlDN0I5QjExMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc051bWJlckFycmF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc051bWJlckFycmF5LmNwcDsg
cGF0aCA9IGNhbnZhcy9DYW52YXNOdW1iZXJBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5QzdCOUIyMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52YXNOdW1iZXJBcnJheS5oOyBw
YXRoID0gY2FudmFzL0NhbnZhc051bWJlckFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ5QzdCOUIzMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzTnVtYmVyQXJyYXkuaWRsOyBwYXRoID0gY2Fu
dmFzL0NhbnZhc051bWJlckFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlDN0I5QjQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc09iamVjdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNPYmplY3QuY3BwOyBwYXRoID0gY2FudmFz
L0NhbnZhc09iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUI1
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQ2FudmFzT2JqZWN0Lmg7IHBhdGggPSBjYW52YXMvQ2FudmFzT2JqZWN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUI2MTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNQcm9ncmFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IENhbnZhc1Byb2dyYW0uY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1Byb2dyYW0uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTk1NSw3ICs2MDAxLDYgQEAKIAkJNDlDN0I5RkYx
MDQyRDM4QzAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0JBNzgxMDQyRUZBRTAwMDlENDQ3IC8qIE9wZW5H
TC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IE9wZW5HTC5mcmFtZXdvcms7IHBhdGggPSAv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9PcGVuR0wuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0g
IjxhYnNvbHV0ZT4iOyB9OwogCQk0OUM3QkE4QzEwNDJGNUIxMDAwOUQ0NDcgLyogSlNEb2N1bWVu
dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RvY3Vt
ZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0Q0RkExMDQy
Rjk1RjAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlENURDMjcwRjQyM0E3MzAwOEYyMEZE
IC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgcGF0aCA9IHRy
YW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0OUQ1REMyODBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWF0cml4M0RU
cmFuc2Zvcm1PcGVyYXRpb24uaDsgcGF0aCA9IHRyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlENURDMjkwRjQyM0E3
MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
LmNwcDsgcGF0aCA9IHRyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTk4MSw2ICs2MDI2LDc4IEBACiAJCTQ5
RTkxMkE3MEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb25MaXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFuaW1hdGlvbkxpc3QuY3BwOyBwYXRoID0gYW5pbWF0
aW9uL0FuaW1hdGlvbkxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUU5
MTJBODBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBbmltYXRpb25MaXN0Lmg7IHBhdGggPSBhbmltYXRpb24vQW5pbWF0
aW9uTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUU5MTJBOTBFRkFDOTA2
MDA5RDBDQUYgLyogVGltaW5nRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gVGltaW5nRnVuY3Rpb24uaDsgcGF0aCA9IGFuaW1hdGlvbi9UaW1pbmdGdW5jdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0RDNzEwNTAzQzIzMDAwOTlGQUIg
LyogQ2FudmFzQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
Q2FudmFzQXJyYXkuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc0FycmF5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNEQzgxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0Fy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc0FycmF5Lmg7IHBh
dGggPSBjYW52YXMvQ2FudmFzQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDlFRUNEQzkxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0FycmF5LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBDYW52YXNBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzQXJyYXkuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0RDQTEwNTAzQzIzMDAwOTlGQUIg
LyogQ2FudmFzQXJyYXlCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQ2FudmFzQXJyYXlCdWZmZXIuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc0FycmF5QnVm
ZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNEQ0IxMDUwM0MyMzAw
MDk5RkFCIC8qIENhbnZhc0FycmF5QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IENhbnZhc0FycmF5QnVmZmVyLmg7IHBhdGggPSBjYW52YXMvQ2FudmFzQXJyYXlCdWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNEQ0MxMDUwM0MyMzAwMDk5
RkFCIC8qIENhbnZhc0FycmF5QnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52
YXNBcnJheUJ1ZmZlci5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0RDRDEwNTAzQzIzMDAwOTlGQUIgLyog
Q2FudmFzRmxvYXRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBDYW52YXNGbG9hdEFycmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNGbG9hdEFycmF5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNEQ0UxMDUwM0MyMzAwMDk5RkFC
IC8qIENhbnZhc0Zsb2F0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q2FudmFzRmxvYXRBcnJheS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNEQ0YxMDUwM0MyMzAwMDk5RkFCIC8qIENh
bnZhc0Zsb2F0QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc0Zsb2F0QXJy
YXkuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0OUVFQ0REMDEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzSW50QXJy
YXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzSW50QXJy
YXkuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc0ludEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDlFRUNERDExMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0ludEFycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc0ludEFycmF5Lmg7IHBh
dGggPSBjYW52YXMvQ2FudmFzSW50QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDlFRUNERDIxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0ludEFycmF5LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNJbnRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFz
SW50QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0REMzEwNTAz
QzIzMDAwOTlGQUIgLyogQ2FudmFzU2hvcnRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBDYW52YXNTaG9ydEFycmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52
YXNTaG9ydEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNERDQx
MDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc1Nob3J0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQ2FudmFzU2hvcnRBcnJheS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1No
b3J0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNERDUxMDUwM0My
MzAwMDk5RkFCIC8qIENhbnZhc1Nob3J0QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9
IENhbnZhc1Nob3J0QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0RENjEwNTAzQzIzMDAwOTlGQUIg
LyogQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuY3BwOyBwYXRoID0gY2FudmFzL0Nh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDlFRUNERDcxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Lmg7
IHBhdGggPSBjYW52YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNVbnNpZ25lZEJ5dGVB
cnJheS5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0REOTEwNTAzQzIzMDAwOTlGQUIgLyogQ2Fu
dmFzVW5zaWduZWRJbnRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBDYW52YXNVbnNpZ25lZEludEFycmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNVbnNp
Z25lZEludEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNEREEx
MDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oOyBwYXRoID0gY2Fu
dmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDlFRUNEREIxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRsOyBwYXRo
ID0gY2FudmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0OUVFQ0REQzEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRTaG9y
dEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1Vu
c2lnbmVkU2hvcnRBcnJheS5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNEREQxMDUwM0MyNDAw
MDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaDsgcGF0aCA9IGNhbnZhcy9D
YW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDlFRUNEREUxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmlkbDsgcGF0
aCA9IGNhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OUVFQ0VGMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1
ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0Fy
cmF5QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNFRjMxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDYW52YXNBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0OUVFQ0VGNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNGbG9hdEFycmF5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzRmxvYXRB
cnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVDRUY1MTA1MDcwQzQw
MDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDYW52YXNGbG9hdEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzSW50QXJyYXkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIgLyog
SlNDYW52YXNJbnRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Nh
bnZhc0ludEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVDRUY4MTA1
MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNTaG9ydEFycmF5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzU2hv
cnRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1Nob3J0
QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNFRkExMDUwNzBDNDAw
MDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Nh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDlFRUNFRkMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1Vuc2lnbmVk
SW50QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0VGRDEwNTA3
MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEludEFycmF5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0VGRTEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0OUVFQ0VGRjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNGMTkxMDUw
NzJGMzAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNDYW52YXNBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzQXJyYXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNGNzExMDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzQnl0
ZUFycmF5Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDlFRUNGNzIxMDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0Zsb2F0QXJyYXlD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0Y3MzEwNTA4RDlD
MDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0ludEFycmF5Q3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNGNzQxMDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFz
U2hvcnRBcnJheUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0NhbnZhc1Nob3J0QXJyYXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUVFQ0Y3NTEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZh
c1Vuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDlFRUNGNzYxMDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1Vu
c2lnbmVkSW50QXJyYXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
OUVFQ0Y3NzEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNVbnNp
Z25lZFNob3J0QXJyYXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
OUVFQ0Y5OTEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVD
RjlBMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVDRjlCMTA1MDkzODIw
MDA5OUZBQiAvKiBKU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFQ0Y5QzEwNTA5MzgyMDAwOTlGQUIg
LyogSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5RUVDRjlEMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0
QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5RUVDRjlFMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXlD
b25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc0Zs
b2F0QXJyYXlDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVF
Q0Y5RjEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzSW50QXJyYXlDb25z
dHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVDRkEwMTA1MDkz
ODIwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVDRkEzMTA1MDkzODIwMDA5OUZBQiAvKiBKU0Nh
bnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQ5RUVDRkE0MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1No
b3J0QXJyYXlDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUVFQ0ZBNTEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQ5RUVDRkE2MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQ5RUVDRkE3MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVk
SW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQ5RUVDRkE4MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vu
c2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0OUVFQ0ZBOTEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNVbnNp
Z25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUNGQUExMDUwOTM4MjAwMDk5RkFCIC8qIEpT
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFRDEzQzEwNTE5Njk0MDAwOTlGQUIgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVEMTNFMTA1
MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZB
QiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUQxNEIxMDUxOTcxOTAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUQxNEMxMDUxOTcxQTAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUQxNEQxMDUxOTcxQTAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QThDOTZFQTBCRTY5MDMyMDA0RUVG
RjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOyBwYXRoID0gbWFjL1Nl
bGVjdGlvbkNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRC
MjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNEIyNzA5ODEwQUYyRTVFMDAwNjUxMjdGIC8qIFBhc3RlYm9hcmRNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYXN0ZWJvYXJkTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3OCw4ICs2Mzk1LDYgQEAKIAkJNjVERjMyMzQwOUQx
REU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzR3JhZGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQ2FudmFzR3JhZGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjVERjMyMzUwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUGF0dGVybi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNQYXR0ZXJuLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVERjMyMzYwOUQxREU2NTAwMEJFMzI1IC8q
IEpTQ2FudmFzUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlND
YW52YXNQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1REYzMjM3MDlE
MURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NURGMzIzODA5RDFERTY1MDAwQkUz
MjUgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY1RjgwNjk3MDU0RDlGODYwMDhCRjc3NiAvKiBCbG9ja0V4Y2VwdGlv
bnMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBCbG9ja0V4Y2VwdGlvbnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyog
UGFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjI2RTAxMEVGMDIyRkUwMEEwN0UyMCAv
KiBGb250RmFzdFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9udEZhc3RQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMzEzLDIx
ICsxMDQyOCwzMCBAQAogCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdERDMgLyogY2FudmFzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0OUVFQ0RDNzEwNTAz
QzIzMDAwOTlGQUIgLyogQ2FudmFzQXJyYXkuY3BwICovLAorCQkJCTQ5RUVDREM4MTA1MDNDMjMw
MDA5OUZBQiAvKiBDYW52YXNBcnJheS5oICovLAorCQkJCTQ5RUVDREM5MTA1MDNDMjMwMDA5OUZB
QiAvKiBDYW52YXNBcnJheS5pZGwgKi8sCisJCQkJNDlFRUNEQ0ExMDUwM0MyMzAwMDk5RkFCIC8q
IENhbnZhc0FycmF5QnVmZmVyLmNwcCAqLywKKwkJCQk0OUVFQ0RDQjEwNTAzQzIzMDAwOTlGQUIg
LyogQ2FudmFzQXJyYXlCdWZmZXIuaCAqLywKKwkJCQk0OUVFQ0RDQzEwNTAzQzIzMDAwOTlGQUIg
LyogQ2FudmFzQXJyYXlCdWZmZXIuaWRsICovLAogCQkJCTQ5QzdCOUE4MTA0MkQzMkUwMDA5RDQ0
NyAvKiBDYW52YXNCdWZmZXIuY3BwICovLAogCQkJCTQ5QzdCOUE5MTA0MkQzMkUwMDA5RDQ0NyAv
KiBDYW52YXNCdWZmZXIuaCAqLywKIAkJCQk0OUM3QjlBQTEwNDJEMzJFMDAwOUQ0NDcgLyogQ2Fu
dmFzQnVmZmVyLmlkbCAqLywKIAkJCQk0OUM3QjlBQjEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFz
Qnl0ZUFycmF5LmNwcCAqLywKIAkJCQk0OUM3QjlBQzEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFz
Qnl0ZUFycmF5LmggKi8sCiAJCQkJNDlDN0I5QUQxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J5
dGVBcnJheS5pZGwgKi8sCisJCQkJNDlFRUNEQ0QxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0Zs
b2F0QXJyYXkuY3BwICovLAorCQkJCTQ5RUVDRENFMTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNG
bG9hdEFycmF5LmggKi8sCisJCQkJNDlFRUNEQ0YxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0Zs
b2F0QXJyYXkuaWRsICovLAogCQkJCTQ5QzdCOUFFMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNG
cmFtZWJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5QUYxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZh
c0ZyYW1lYnVmZmVyLmggKi8sCiAJCQkJNDlDN0I5QjAxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZh
c0ZyYW1lYnVmZmVyLmlkbCAqLywKIAkJCQk0OTQ4NEZCMzEwMkNGMjNDMDAxODdERDMgLyogQ2Fu
dmFzR3JhZGllbnQuY3BwICovLAogCQkJCTQ5NDg0RkI0MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52
YXNHcmFkaWVudC5oICovLAogCQkJCTQ5NDg0RkI1MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNH
cmFkaWVudC5pZGwgKi8sCi0JCQkJNDlDN0I5QjExMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc051
bWJlckFycmF5LmNwcCAqLywKLQkJCQk0OUM3QjlCMjEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFz
TnVtYmVyQXJyYXkuaCAqLywKLQkJCQk0OUM3QjlCMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFz
TnVtYmVyQXJyYXkuaWRsICovLAorCQkJCTQ5RUVDREQwMTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52
YXNJbnRBcnJheS5jcHAgKi8sCisJCQkJNDlFRUNERDExMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZh
c0ludEFycmF5LmggKi8sCisJCQkJNDlFRUNERDIxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0lu
dEFycmF5LmlkbCAqLywKIAkJCQk0OUM3QjlCNDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2Jq
ZWN0LmNwcCAqLywKIAkJCQk0OUM3QjlCNTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0
LmggKi8sCiAJCQkJNDk0ODRGQjYxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uY3Bw
ICovLApAQCAtMTAzNTQsMTEgKzEwNDc4LDIzIEBACiAJCQkJNDlDN0I5QzIxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1NoYWRlci5jcHAgKi8sCiAJCQkJNDlDN0I5QzMxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1NoYWRlci5oICovLAogCQkJCTQ5QzdCOUM0MTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNTaGFkZXIuaWRsICovLAorCQkJCTQ5RUVDREQzMTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52
YXNTaG9ydEFycmF5LmNwcCAqLywKKwkJCQk0OUVFQ0RENDEwNTAzQzIzMDAwOTlGQUIgLyogQ2Fu
dmFzU2hvcnRBcnJheS5oICovLAorCQkJCTQ5RUVDREQ1MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52
YXNTaG9ydEFycmF5LmlkbCAqLywKIAkJCQk0OTQ4NEZCRjEwMkNGMjNDMDAxODdERDMgLyogQ2Fu
dmFzU3R5bGUuY3BwICovLAogCQkJCTQ5NDg0RkMwMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNT
dHlsZS5oICovLAogCQkJCTQ5QzdCOUM1MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJl
LmNwcCAqLywKIAkJCQk0OUM3QjlDNjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5o
ICovLAogCQkJCTQ5QzdCOUM3MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmlkbCAq
LywKKwkJCQk0OUVFQ0RENjEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRCeXRlQXJy
YXkuY3BwICovLAorCQkJCTQ5RUVDREQ3MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNVbnNpZ25l
ZEJ5dGVBcnJheS5oICovLAorCQkJCTQ5RUVDREQ4MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheS5pZGwgKi8sCisJCQkJNDlFRUNERDkxMDUwM0MyMzAwMDk5RkFCIC8q
IENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuY3BwICovLAorCQkJCTQ5RUVDRERBMTA1MDNDMjMwMDA5
OUZBQiAvKiBDYW52YXNVbnNpZ25lZEludEFycmF5LmggKi8sCisJCQkJNDlFRUNEREIxMDUwM0My
MzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRsICovLAorCQkJCTQ5RUVDRERD
MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuY3BwICovLAorCQkJ
CTQ5RUVDREREMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaCAq
LywKKwkJCQk0OUVFQ0RERTEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5LmlkbCAqLywKIAkJCSk7CiAJCQluYW1lID0gY2FudmFzOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTEyNDI0LDMyICsxMjU2MCw0NiBAQAogCQlBODNCNzkwODBDQ0FGRjJCMDAw
QjA4MjUgLyogSFRNTCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNDlFRUNGMTkxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXkuY3BwICovLAor
CQkJCTQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5LmggKi8sCisJCQkJ
NDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXlCdWZmZXIuY3BwICovLAor
CQkJCTQ5RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVyLmggKi8s
CiAJCQkJNDlDN0I5ODAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmNwcCAqLywK
IAkJCQk0OUM3Qjk4MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCdWZmZXIuaCAqLywKIAkJ
CQk0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCeXRlQXJyYXkuY3BwICovLAog
CQkJCTQ5QzdCOTgzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5oICovLAor
CQkJCTQ5RUVDRUY0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXkuY3BwICov
LAorCQkJCTQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXkuaCAq
LywKIAkJCQk0OUM3Qjk4NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5j
cHAgKi8sCiAJCQkJNDlDN0I5ODUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZm
ZXIuaCAqLywKIAkJCQk2NURGMzIzMzA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNHcmFkaWVu
dC5jcHAgKi8sCiAJCQkJNjVERjMyMzQwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzR3JhZGll
bnQuaCAqLywKLQkJCQk0OUM3Qjk4NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJB
cnJheS5jcHAgKi8sCi0JCQkJNDlDN0I5ODcxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzTnVt
YmVyQXJyYXkuaCAqLywKKwkJCQk0OUVFQ0VGNjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNJ
bnRBcnJheS5jcHAgKi8sCisJCQkJNDlFRUNFRjcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFz
SW50QXJyYXkuaCAqLywKIAkJCQk2NURGMzIzNTA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQ
YXR0ZXJuLmNwcCAqLywKIAkJCQk2NURGMzIzNjA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQ
YXR0ZXJuLmggKi8sCiAJCQkJNDlDN0I5ODgxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJv
Z3JhbS5jcHAgKi8sCiAJCQkJNDlDN0I5ODkxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJv
Z3JhbS5oICovLAogCQkJCTQ5QzdCOThBMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRl
cmJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5OEIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFz
UmVuZGVyYnVmZmVyLmggKi8sCi0JCQkJNDlDN0I5OEMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCi0JCQkJNDlDN0I5OEQxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovLAotCQkJCTY1REYzMjM3MDlEMURFNjUw
MDBCRTMyNSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8sCi0JCQkJNjVERjMy
MzgwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi8sCi0J
CQkJNDlDN0Q0RkExMDQyRjk1RjAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
LmNwcCAqLywKLQkJCQk0OUM3Qjk4RTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QuaCAqLywKKwkJCQk0OUVFRDEzQzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKKwkJCQk0OUVFRDEzRDEwNTE5Njk0MDAwOTlGQUIg
LyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi8sCisJCQkJNDlFRUQxM0UxMDUxOTY5NDAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLywKKwkJCQk0OUVFRDEz
RjEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLywKKwkJ
CQk0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qu
Y3BwICovLAorCQkJCTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5oICovLAogCQkJCTQ5QzdCOThGMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZh
c1NoYWRlci5jcHAgKi8sCiAJCQkJNDlDN0I5OTAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFz
U2hhZGVyLmggKi8sCisJCQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzU2hv
cnRBcnJheS5jcHAgKi8sCisJCQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFz
U2hvcnRBcnJheS5oICovLAogCQkJCTQ5QzdCOTkxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZh
c1RleHR1cmUuY3BwICovLAogCQkJCTQ5QzdCOTkyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZh
c1RleHR1cmUuaCAqLywKKwkJCQk0OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheS5jcHAgKi8sCisJCQkJNDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaCAqLywKKwkJCQk0OUVFQ0VGQzEwNTA3MEM0MDAw
OTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEludEFycmF5LmNwcCAqLywKKwkJCQk0OUVFQ0VGRDEw
NTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEludEFycmF5LmggKi8sCisJCQkJNDlF
RUNFRkUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmNwcCAq
LywKKwkJCQk0OUVFQ0VGRjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkuaCAqLywKIAkJCQlCQzc3RDE2NTBGRjE5RjU1MDA3MDg4N0IgLyogSlNEYXRhR3JpZENv
bHVtbi5jcHAgKi8sCiAJCQkJQkM3N0QxNjYwRkYxOUY1NTAwNzA4ODdCIC8qIEpTRGF0YUdyaWRD
b2x1bW4uaCAqLywKIAkJCQlCQzc3RDE2NzBGRjE5RjU1MDA3MDg4N0IgLyogSlNEYXRhR3JpZENv
bHVtbkxpc3QuY3BwICovLApAQCAtMTM5MDIsNiArMTQwNTIsMjIgQEAKIAkJCQkxNDMyRTg0NjBD
NTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmggKi8sCiAJCQkJRTRFRUZGQzYwRDM0NTUw
QzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJRTRFRUZGQzcwRDM0
NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5oICovLAorCQkJCTQ5RUVDRjk5MTA1
MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLAor
CQkJCTQ5RUVDRjlBMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuaCAqLywKKwkJCQk0OUVFQ0Y5QjEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNCeXRl
QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJNDlFRUNGOUMxMDUwOTM4MjAwMDk5RkFCIC8q
IEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLywKKwkJCQk0OUVFQ0Y5RDEwNTA5Mzgy
MDAwOTlGQUIgLyogSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IuY3BwICovLAorCQkJCTQ5
RUVDRjlFMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5o
ICovLAorCQkJCTQ5RUVDRjlGMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5Q29u
c3RydWN0b3IuY3BwICovLAorCQkJCTQ5RUVDRkEwMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZh
c0ludEFycmF5Q29uc3RydWN0b3IuaCAqLywKKwkJCQk0OUVFQ0ZBMzEwNTA5MzgyMDAwOTlGQUIg
LyogSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwICovLAorCQkJCTQ5RUVDRkE0MTA1
MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5oICovLAorCQkJ
CTQ5RUVDRkE1MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29u
c3RydWN0b3IuY3BwICovLAorCQkJCTQ5RUVDRkE2MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZh
c1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLywKKwkJCQk0OUVFQ0ZBNzEwNTA5Mzgy
MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuY3BwICovLAor
CQkJCTQ5RUVDRkE4MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlD
b25zdHJ1Y3Rvci5oICovLAorCQkJCTQ5RUVDRkE5MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZh
c1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQk0OUVFQ0ZBQTEwNTA5
MzgyMDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oICov
LAogCQkJCUUxMEI5M0MyMEI3M0MyOTEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZl
ci5jcHAgKi8sCiAJCQkJRTEwQjkzN0IwQjczQzAwQTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyLmggKi8sCiAJCQkJQkNCQ0FFM0EwRkYxOTM5OTAwMDc2MkFFIC8qIEpTRGF0YUdy
aWREYXRhU291cmNlLmNwcCAqLywKQEAgLTE0MDU1LDEwICsxNDIyMSwxNiBAQAogCQkJCTkzOTIy
NjJFMTAzMjEwODQwMDZFN0Q1RCAvKiBKU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcCAqLywKIAkJCQlC
QzU4MjVGMjBDMEI4OTM4MDA1M0YxQjUgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNw
cCAqLywKIAkJCQlCQzIwRkI3RTBDMEU4RTZDMDBEMTQ0N0YgLyogSlNDU1NWYWx1ZUN1c3RvbS5j
cHAgKi8sCi0JCQkJNDlDN0I5N0MxMDQyRDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJy
YXlDdXN0b20uY3BwICovLAotCQkJCTQ5ODNBOTZGMTA0MzVFOTAwMERCNzBGOSAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovLAotCQkJCTFBOUVGNDU2MEExQjk1N0QwMDMz
MkI2MyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgKi8sCi0JCQkJNDlD
N0I5N0QxMDQyRDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9t
LmNwcCAqLywKKwkJCQk0OUVFQ0Y3MTEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNCeXRlQXJy
YXlDdXN0b20uY3BwICovLAorCQkJCTQ5RUVDRjcyMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZh
c0Zsb2F0QXJyYXlDdXN0b20uY3BwICovLAorCQkJCTQ5RUVDRjczMTA1MDhEOUMwMDA5OUZBQiAv
KiBKU0NhbnZhc0ludEFycmF5Q3VzdG9tLmNwcCAqLywKKwkJCQk0OUVFRDE0QjEwNTE5NzE5MDAw
OTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwICovLAorCQkJCTQ5
RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3Rv
bS5jcHAgKi8sCisJCQkJNDlFRUQxNEQxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAgKi8sCisJCQkJNDlFRUNGNzQxMDUwOEQ5QzAwMDk5RkFCIC8q
IEpTQ2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHAgKi8sCisJCQkJNDlFRUNGNzUxMDUwOEQ5QzAw
MDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwICovLAorCQkJCTQ5
RUVDRjc2MTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDdXN0b20u
Y3BwICovLAorCQkJCTQ5RUVDRjc3MTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheUN1c3RvbS5jcHAgKi8sCiAJCQkJRkU4MEQ3QTIwRTlDMUVEMjAwMEQ2Rjc1IC8q
IEpTQ3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAgKi8sCiAJCQkJRkU4MEQ3QTMwRTlDMUVEMjAw
MEQ2Rjc1IC8qIEpTQ3VzdG9tUG9zaXRpb25DYWxsYmFjay5oICovLAogCQkJCUZFODBEN0E0MEU5
QzFFRDIwMDBENkY3NSAvKiBKU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAgKi8sCkBA
IC0xNjQyMiw3ICsxNjU5NCw2IEBACiAJCQkJQkMxMjRGMDAwQzI2NDQ3QTAwOUUyMzQ5IC8qIEpT
QmFySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVERjMyM0EwOUQxREU2NTAwMEJFMzI1IC8q
IEpTQ2FudmFzR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1REYzMjNDMDlEMURFNjUw
MDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4uaCBpbiBIZWFkZXJzICovLAotCQkJCTY1REYzMjNF
MDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTNGOUI3QTEwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2NURGMzFGNDA5RDFDQzYwMDAwQkUzMjUgLyogSlNDaGFyYWN0
ZXJEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0MwNjU4ODBGM0NFMkE3MDBDRDJEODcgLyog
SlNDbGllbnRSZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTE3NTMwLDE3ICsxNzcwMSwxMyBAQAog
CQkJCTQ5QzdCOTk0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDlDN0I5OTYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3Qjk5ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52
YXNGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlDN0I5OUExMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOTlD
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1Byb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5QzdCOTlFMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNDlDN0I5QTAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlDN0I5QTExMDQyRDJEMzAwMDlENDQ3
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3
QjlBMzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ5QzdCOUE1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ5QzdCOUM5MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUNDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNCeXRl
QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUNGMTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlDN0I5RDIxMDQyRDMyRjAw
MDlENDQ3IC8qIENhbnZhc051bWJlckFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlE
NTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OUM3QjlENzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDlDN0I5REExMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xNzU1OCw2ICsxNzcyNSwzMyBAQAogCQkJCTUxMEQ0QTM4MTAzMTY1
RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxQUJBRTFCMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1FcnJvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhh
bmRsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFRUNERTAxMDUwM0MyNDAwMDk5RkFCIC8qIENh
bnZhc0FycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUVFQ0RFMzEwNTAzQzI0MDAwOTlGQUIg
LyogQ2FudmFzQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RUVDREU2MTA1MDND
MjQwMDA5OUZBQiAvKiBDYW52YXNGbG9hdEFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUVF
Q0RFOTEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzSW50QXJyYXkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQ5RUVDREVDMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNTaG9ydEFycmF5LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0OUVFQ0RFRjEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRC
eXRlQXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RUVDREYyMTA1MDNDMjQwMDA5OUZBQiAv
KiBDYW52YXNVbnNpZ25lZEludEFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUVFQ0RGNTEw
NTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmggaW4gSGVhZGVycyAq
LywKKwkJCQk0OUVFQ0YwMTEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNDlFRUNGMDMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFz
RmxvYXRBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFRUNGMDUxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTQ2FudmFzSW50QXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RUVDRjA3MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
RUVDRjA5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmggaW4g
SGVhZGVycyAqLywKKwkJCQk0OUVFQ0YwQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNp
Z25lZEludEFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUVFQ0YwRDEwNTA3MEM0MDAwOTlG
QUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
RUVDRjFDMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5LmggaW4gSGVhZGVycyAqLywK
KwkJCQk0OUVFQ0ZBQzEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUVFQ0ZBRTEwNTA5MzgyMDAwOTlGQUIgLyog
SlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFRUNG
QjAxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQk0OUVFQ0ZCMjEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNJbnRB
cnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUVFQ0ZCNjEwNTA5MzgyMDAw
OTlGQUIgLyogSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQ5RUVDRkI4MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RUVDRkJBMTA1MDkzODIwMDA5OUZB
QiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDlFRUNGQkMxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
RUVEMTQ1MTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDlFRUQxNDcxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3NjYwLDYgKzE3ODU0LDE0IEBA
CiAJCQkJMUFCMUFFN0EwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21JbkN1cnNvci5wbmcgaW4gUmVz
b3VyY2VzICovLAogCQkJCTFBQjFBRTdCMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vyc29y
LnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJRTEyODRBREExMDQ0N0FFQjAwRUFFQjUyIC8qIFBh
Z2VUcmFuc2l0aW9uRXZlbnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUVFQ0RFMTEwNTAz
QzI0MDAwOTlGQUIgLyogQ2FudmFzQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUVF
Q0RFNDEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzQXJyYXlCdWZmZXIuaWRsIGluIFJlc291cmNl
cyAqLywKKwkJCQk0OUVFQ0RFNzEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzRmxvYXRBcnJheS5p
ZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTQ5RUVDREVBMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52
YXNJbnRBcnJheS5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTQ5RUVDREVEMTA1MDNDMjQwMDA5
OUZBQiAvKiBDYW52YXNTaG9ydEFycmF5LmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNDlFRUNE
RjAxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmlkbCBpbiBSZXNv
dXJjZXMgKi8sCisJCQkJNDlFRUNERjMxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVk
SW50QXJyYXkuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUVFQ0RGNjEwNTAzQzI0MDAwOTlG
QUIgLyogQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0x
ODUyMyw4ICsxODcyNSw2IEBACiAJCQkJQkMxMjRFRkYwQzI2NDQ3QTAwOUUyMzQ5IC8qIEpTQmFy
SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NURGMzIzOTA5RDFERTY1MDAwQkUzMjUgLyog
SlNDYW52YXNHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NURGMzIzQjA5RDFERTY1
MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTY1REYz
MjNEMDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkxQTlFRjQ1NzBBMUI5NTdEMDAzMzJCNjMgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGOUI3QTAwQkE2
MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
QkE1OUIyMEYyQUE1RkUwMDhFOEU5OSAvKiBKU0NEQVRBU2VjdGlvbkN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2NURGMzFGMzA5RDFDQzYwMDAwQkUzMjUgLyogSlNDaGFyYWN0ZXJEYXRh
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTk2MjEsMjEgKzE5ODIxLDE2IEBACiAJCQkJMDAxNDYy
OEExMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUI1MUJGNkYwMTAyQzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI4NEFFQTEwNDQ3REVFMDBFQUVCNTIgLyogUGFnZVRy
YW5zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUM3Qjk3RTEwNDJEMjA4MDAw
OUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk0OUM3Qjk3RjEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5OTMxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTQ2FudmFzQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOTk1MTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3
Qjk5NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk0OUM3Qjk5OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3Qjk5QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOTlEMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUM3
Qjk5RjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5QzdCOUEyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlBNDEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUM4MTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5Q0IxMDQy
RDMyRjAwMDlENDQ3IC8qIENhbnZhc0J5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
OUM3QjlDRTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVidWZmZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJNDlDN0I5RDExMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc051bWJlckFycmF5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUQ0MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5RDYxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1Byb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5RDkxMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE5
NjQ2LDEzICsxOTg0MSw0OCBAQAogCQkJCTQ5QzdCQTAxMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52
YXMzRExheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0JBMDIxMDQyRDM4QzAwMDlENDQ3
IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCQThE
MTA0MkY1QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQ5QzdENEZCMTA0MkY5NUYwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OTgzQTk3MDEwNDM1RTkwMDBEQjcwRjkgLyogSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjg0
QkIyMTA0NDlGRkEwMEVBRUI1MiAvKiBKU1BhZ2VUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTEyODRCRDUxMDQ0QTAxRTAwRUFFQjUyIC8qIERPTVBhZ2VUcmFuc2l0aW9u
RXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTBENEEzMzEwMzE2NUVFMDA0OUVBNTQgLyog
U29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTM2MTAz
MTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxQUJBRTFGMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDRk5l
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVFQ0RERjEwNTAzQzI0MDAwOTlGQUIgLyogQ2Fu
dmFzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUNERTIxMDUwM0MyNDAwMDk5RkFC
IC8qIENhbnZhc0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RUVDREU1MTA1
MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNGbG9hdEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTQ5RUVDREU4MTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNJbnRBcnJheS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0OUVFQ0RFQjEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzU2hvcnRBcnJheS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVFQ0RFRTEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFz
VW5zaWduZWRCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUNERjExMDUwM0My
NDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDlFRUNERjQxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVFQ0YwMDEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52
YXNBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVFQ0YwMjEwNTA3MEM0MDAw
OTlGQUIgLyogSlNDYW52YXNGbG9hdEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RUVD
RjA0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTQ5RUVDRjA2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXkuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUNGMDgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFz
VW5zaWduZWRCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUNGMEExMDUwNzBD
NDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0OUVFQ0YwQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUNGMUIxMDUwNzJGMzAwMDk5RkFCIC8qIEpT
Q2FudmFzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUNGNzgxMDUwOEQ5QzAwMDk5
RkFCIC8qIEpTQ2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5
RUVDRjc5MTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNDlFRUNGN0ExMDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzSW50
QXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUNGN0IxMDUwOEQ5QzAwMDk5
RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
OUVFQ0Y3QzEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVFQ0Y3RDEwNTA4RDlDMDAwOTlGQUIgLyogSlND
YW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RUVD
RjdFMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVFQ0ZBQjEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52
YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RUVDRkFE
MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTQ5RUVDRkFGMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0
QXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVFQ0ZCMTEwNTA5Mzgy
MDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTQ5RUVDRkI1MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXlDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVFQ0ZCNzEwNTA5MzgyMDAwOTlGQUIg
LyogSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTQ5RUVDRkI5MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJy
YXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVFQ0ZCQjEwNTA5MzgyMDAw
OTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk0OUVFRDE0MjEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RUVEMTQ0MTA1MTk2OTQwMDA5OUZB
QiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
OUVFRDE0NjEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUQxNEUxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RUVEMTRG
MTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0OUVFRDE1MDEwNTE5NzFBMDAwOTlGQUIgLyogSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRl
ICJKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0NhbnZhc0Fy
cmF5QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworY29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19p
bmZvID0geyAiQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciIsIDAsIDAsIDAgfTsKKworSlND
YW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAg
IDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9i
amVjdCkKK3sKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
SlNDYW52YXNBcnJheUJ1ZmZlclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBO
b25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoZXhlYywgMiksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworfQorCitzdGF0aWMg
SlNPYmplY3QqIGNvbnN0cnVjdENhbnZhc0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIEpTQ2FudmFz
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2Fu
dmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKKworICAgIHVuc2lnbmVk
IGludCBzaXplID0gMDsKKyAgICBpZiAoYXJncy5zaXplKCkgPT0gMSkgeworICAgICAgICBzaXpl
ID0gKHVuc2lnbmVkIGludClhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChp
c25hbihzaXplKSkKKyAgICAgICAgICAgIHNpemUgPSAwOworICAgIH0KKyAgICByZXR1cm4gYXNP
YmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgQ2FudmFzQXJy
YXlCdWZmZXI6OmNyZWF0ZShzaXplKSkpOworfQorCitKU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52
YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlv
biA9IGNvbnN0cnVjdENhbnZhc0FycmF5QnVmZmVyOworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBl
SG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNE
X0NBTlZBUykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52
YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10
eXBlCiAgICsgdGV4dC9wbGFpbgpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCisjZGVmaW5l
IEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJKU0RvY3VtZW50LmgiCisjaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1
ZmZlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDYW52YXNBcnJheTsKKworLy8gVGVtcGxhdGUgZnVuY3Rpb24gdXNlZCBieSBD
YW52YXNYWFhBcnJheUNvbnN0cnVjdG9ycwordGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4K
K1Bhc3NSZWZQdHI8Q2FudmFzQXJyYXk+IGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQoreworICAgIC8vIFRoZXJlIGFyZSAzIGNvbnN0cnVj
dG9yczoKKyAgICAvLworICAgIC8vICAxKSAoaW4gaW50IHNpemUpCisgICAgLy8gIDIpIChpbiBD
YW52YXNBcnJheUJ1ZmZlciBidWZmZXIsIFtPcHRpb25hbF0gaW4gaW50IG9mZnNldCwgW09wdGlv
bmFsXSBpbiB1bnNpZ25lZCBpbnQgbGVuZ3RoKQorICAgIC8vICAzKSAoaW4gc2VxdWVuY2U8VD4p
IC0gVGhpcyBlbmRzIHVwIGJlaW5nIGEgSlMgImFycmF5LWxpa2UiIG9iamVjdAorICAgIC8vCisg
ICAgUmVmUHRyPEM+IGFycmF5T2JqZWN0OworICAgIAorICAgIGlmIChhcmdzLnNpemUoKSA8IDEp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmIChhcmdzLmF0KDApLmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIgPSB0b0NhbnZhc0Fy
cmF5QnVmZmVyKGFyZ3MuYXQoMCkpOworICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAg
ICBpbnQgb2Zmc2V0ID0gKGFyZ3Muc2l6ZSgpID4gMSkgPyBhcmdzLmF0KDEpLnRvSW50MzIoZXhl
YykgOiAwOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IChhcmdzLnNpemUoKSA+
IDIpID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihhcmdzLmF0KDIpLnRvSW50MzIoZXhlYykp
IDogMDsKKyAgICAgICAgICAgIHJldHVybiBDOjpjcmVhdGUoYnVmZmVyLCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIGFycmF5ID0g
YXNPYmplY3QoYXJncy5hdCgwKSk7CisgICAgICAgIGludCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4
ZWMsIEpTQzo6SWRlbnRpZmllcihleGVjLCAibGVuZ3RoIikpLnRvSW50MzIoZXhlYyk7CisgICAg
ICAgIHZvaWQqIHRlbXBWYWx1ZXM7CisgICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsZW5ndGgg
KiBzaXplb2YoVCkpLmdldFZhbHVlKHRlbXBWYWx1ZXMpKSB7CisgICAgICAgICAgICB0aHJvd0Vy
cm9yKGV4ZWMsIEpTQzo6R2VuZXJhbEVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBPd25GYXN0TWFsbG9jUHRyPFQ+IHZhbHVlcyhzdGF0
aWNfY2FzdDxUKj4odGVtcFZhbHVlcykpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IGFycmF5LT5nZXQoZXhl
YywgaSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB2YWx1ZXMuZ2V0KClbaV0gPSBzdGF0aWNfY2Fz
dDxUPih2LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIEM6OmNyZWF0ZSh2YWx1ZXMuZ2V0KCksIGxlbmd0aCk7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIHNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYXJncy5hdCgwKS50b0ludDMyKGV4
ZWMpKTsKKyAgICByZXR1cm4gQzo6Y3JlYXRlKHNpemUpOworfQorCitjbGFzcyBKU0NhbnZhc0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHVi
bGljOgorICAgIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgIHZpcnR1YWwgY29uc3QgSlNDOjpD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KK307CisKK30K
KworI2VuZGlmIC8vIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbnZhc0FycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NhbnZhc0FycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5W
QVMpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NhbnZhc0FycmF5LmgiCisK
KyNpbmNsdWRlICJDYW52YXNBcnJheS5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYW52YXNBcnJheSogb2JqZWN0KQor
eworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgCisgICAgCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIGlmIChvYmplY3QtPmlzM2Qo
KSkKKyAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEKj4ob2JqZWN0KSk7CisjZW5kaWYKKyAgICBBU1NFUlQob2JqZWN0LT5pczJkKCkp
OworICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCo+KG9iamVjdCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoM0RfQ0FOVkFTKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc0FycmF5Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10
eXBlCiAgICsgdGV4dC9wbGFpbgpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJheUNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNC
eXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisj
aW5jbHVkZSAiSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJDYW52YXNCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJKU0NhbnZh
c0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmgiCisjaW5jbHVkZSAiSlNDYW52YXNCeXRlQXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vy
cm9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
Y29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IkNhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yIiwgJkpTQ2FudmFzQXJyYXk6OnNfaW5mbywgMCwg
MCB9OworCitKU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yOjpKU0NhbnZhc0J5dGVBcnJheUNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xv
YmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlLCBKU0NhbnZhc0J5dGVBcnJheVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3Qp
LCBOb25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNO
dW1iZXIoZXhlYywgMiksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworfQorCitzdGF0
aWMgSlNPYmplY3QqIGNvbnN0cnVjdENhbnZhc0J5dGVBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBKU0NhbnZh
c0J5dGVBcnJheUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNDYW52
YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKKyAgICBSZWZQdHI8Q2FudmFz
Qnl0ZUFycmF5PiBhcnJheSA9IHN0YXRpY19jYXN0PENhbnZhc0J5dGVBcnJheSo+KGNvbnN0cnVj
dDxDYW52YXNCeXRlQXJyYXksIHNpZ25lZCBjaGFyPihleGVjLCBhcmdzKS5nZXQoKSk7CisgICAg
cmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCks
IGFycmF5LmdldCgpKSk7Cit9CisKK0pTQzo6Q29uc3RydWN0VHlwZSBKU0NhbnZhc0J5dGVBcnJh
eUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYgY29uc3Ry
dWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVj
dENhbnZhc0J5dGVBcnJheTsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQnl0ZUFycmF5Q29u
c3RydWN0b3IuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3Bs
YWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3Iu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNDYW52
YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQ2FudmFzQnl0ZUFycmF5Q29uc3Ry
dWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNEb2N1bWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTQ2FudmFzQnl0ZUFycmF5Q29u
c3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHVibGljOgorICAgIEpT
Q2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6
OkNvbnN0cnVjdERhdGEmKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBK
U0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxl
CiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJh
eUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0J5
dGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisK
KyNpbmNsdWRlICJKU0NhbnZhc0J5dGVBcnJheS5oIgorCisjaW5jbHVkZSAiQ2FudmFzQnl0ZUFy
cmF5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SlNWYWx1ZSBKU0NhbnZhc0J5dGVBcnJheTo6Z2V0QnlJbmRleChKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaW50IGluZGV4KQoreworICAgIHNpZ25lZCBjaGFyIHZhbHVlOworICAgIGlt
cGwoKS0+Z2V0KGluZGV4LCB2YWx1ZSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIHZhbHVlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpTQ2FudmFz
Qnl0ZUFycmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5k
ZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpbXBsKCktPnNldChpbmRleCwgc3RhdGlj
X2Nhc3Q8c2lnbmVkIGNoYXI+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKK30KKworSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbnZhc0J5dGVBcnJheSogb2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01PYmpl
Y3RXcmFwcGVyPEpTQ2FudmFzQnl0ZUFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQnl0
ZUFycmF5Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgdGV4
dC9wbGFpbgpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAi
SlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiQ2FudmFzRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJKU0NhbnZhc0Zsb2F0QXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworY29uc3Qg
Q2xhc3NJbmZvIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJDYW52
YXNGbG9hdEFycmF5Q29uc3RydWN0b3IiLCAmSlNDYW52YXNBcnJheTo6c19pbmZvLCAwLCAwIH07
CisKK0pTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yOjpKU0NhbnZhc0Zsb2F0QXJyYXlDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9i
YWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIEpTQ2FudmFzRmxvYXRBcnJheVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3Qp
LCBOb25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNO
dW1iZXIoZXhlYywgMiksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworfQorCitzdGF0
aWMgSlNPYmplY3QqIGNvbnN0cnVjdENhbnZhc0Zsb2F0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNDYW52
YXNGbG9hdEFycmF5Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU0Nh
bnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKKyAgICBSZWZQdHI8Q2Fu
dmFzRmxvYXRBcnJheT4gYXJyYXkgPSBzdGF0aWNfY2FzdDxDYW52YXNGbG9hdEFycmF5Kj4oY29u
c3RydWN0PENhbnZhc0Zsb2F0QXJyYXksIGZsb2F0PihleGVjLCBhcmdzKS5nZXQoKSk7CisgICAg
cmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCks
IGFycmF5LmdldCgpKSk7Cit9CisKK0pTQzo6Q29uc3RydWN0VHlwZSBKU0NhbnZhc0Zsb2F0QXJy
YXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0
cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1
Y3RDYW52YXNGbG9hdEFycmF5OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNGbG9hdEFycmF5
Q29uc3RydWN0b3IuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0
L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNGbG9hdEFycmF5Q29uc3Ry
dWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU0NhbnZhc0Zsb2F0QXJy
YXlDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RvY3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNDYW52YXNGbG9h
dEFycmF5Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHVibGlj
OgorICAgIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZv
OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNz
SW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorfTsKKworfQorCisj
ZW5kaWYgLy8gSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3JfaAoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBz
dm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYW52YXNGbG9hdEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDYW52YXNGbG9hdEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJKU0NhbnZhc0Zsb2F0QXJyYXkuaCIKKworI2luY2x1
ZGUgIkNhbnZhc0Zsb2F0QXJyYXkuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTQ2FudmFzRmxvYXRBcnJheTo6Z2V0QnlJbmRleChK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW50IGluZGV4KQoreworICAgIGZsb2F0IHZh
bHVlOworICAgIGltcGwoKS0+Z2V0KGluZGV4LCB2YWx1ZSk7CisgICAgSlNDOjpKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHZhbHVlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEpTQ2FudmFzRmxvYXRBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaW1wbCgpLT5zZXQo
aW5kZXgsIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b0ludDMyKGV4ZWMpKSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYW52YXNGbG9hdEFycmF5KiBvYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNGbG9hdEFycmF5PihleGVjLCBnbG9iYWxPYmplY3Qs
IG9iamVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RSgzRF9DQU5WQVMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlw
ZQogICArIHRleHQvcGxhaW4KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0ludEFycmF5Q29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0ludEFy
cmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1
ZGUgIkpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJDYW52YXNJbnRBcnJheS5oIgorI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJKU0NhbnZhc0ludEFycmF5LmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK2NvbnN0IENs
YXNzSW5mbyBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkNhbnZhc0lu
dEFycmF5Q29uc3RydWN0b3IiLCAmSlNDYW52YXNBcnJheTo6c19pbmZvLCAwLCAwIH07CisKK0pT
Q2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcjo6SlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERP
TUNvbnN0cnVjdG9yT2JqZWN0KEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCit7
CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTQ2FudmFz
SW50QXJyYXlQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAg
cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDIp
LCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBj
b25zdHJ1Y3RDYW52YXNJbnRBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1
Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBKU0NhbnZhc0ludEFycmF5Q29uc3Ry
dWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU0NhbnZhc0ludEFycmF5Q29uc3Ry
dWN0b3IqPihjb25zdHJ1Y3Rvcik7CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9
IHN0YXRpY19jYXN0PENhbnZhc0ludEFycmF5Kj4oY29uc3RydWN0PENhbnZhc0ludEFycmF5LCBp
bnQ+KGV4ZWMsIGFyZ3MpLmdldCgpKTsKKyAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBq
c0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKTsKK30KKworSlNDOjpD
b25zdHJ1Y3RUeXBlIEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0
YShKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0
YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RDYW52YXNJbnRBcnJheTsKKyAgICByZXR1cm4g
Q29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRSgzRF9DQU5WQVMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBu
YXRpdmUKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzSW50QXJyYXlDb25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNJbnRBcnJh
eUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3JfaAorI2RlZmluZSBK
U0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVj
dCB7CitwdWJsaWM6CisgICAgSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0lu
Zm8gc19pbmZvOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdl
dENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7CisgICAgdmlydHVhbCBjb25zdCBK
U0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorfTsK
KworfQorCisjZW5kaWYgLy8gSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yX2gKClByb3BlcnR5
IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNJbnRBcnJheUNvbnN0cnVj
dG9yLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FudmFzSW50QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNJbnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2FudmFzSW50QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkpTQ2FudmFzSW50QXJyYXkuaCIKKworI2luY2x1ZGUg
IkNhbnZhc0ludEFycmF5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSlNWYWx1ZSBKU0NhbnZhc0ludEFycmF5OjpnZXRCeUluZGV4KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisgICAgc2lnbmVkIGludCB2YWx1
ZTsKKyAgICBpbXBsKCktPmdldChpbmRleCwgdmFsdWUpOworICAgIEpTQzo6SlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihleGVjLCB2YWx1ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBKU0NhbnZhc0ludEFycmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpbXBsKCktPnNldChpbmRl
eCwgc3RhdGljX2Nhc3Q8c2lnbmVkIGludD4odmFsdWUudG9JbnQzMihleGVjKSkpOworfQorCitK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FudmFzSW50QXJyYXkqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0
RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc0ludEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9i
amVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgz
RF9DQU5WQVMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzSW50QXJyYXlDdXN0b20uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAg
KyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQz
REN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4MTEwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZh
c0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlND
YW52YXNBcnJheS5oIgogI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJKU1dlYktpdENTU01hdHJpeC5oIgpA
QCAtNDQsMjcgKzQ1LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IHRvQ2Fu
dmFzTnVtYmVyQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTVmFsdWUmIHZhbHVl
KQotewotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIAotICAgIEpTT2JqZWN0KiBhcnJheSA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICBpbnQgbGVu
Z3RoID0gYXJyYXktPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsZW5ndGgiKSkudG9JbnQz
MihleGVjKTsKLSAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IG51bWJlckFycmF5ID0gQ2Fu
dmFzTnVtYmVyQXJyYXk6OmNyZWF0ZShsZW5ndGgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXktPmdldChleGVjLCBpKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIGZsb2F0IHZhbHVlID0gdi50b0Zsb2F0KGV4ZWMpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgbnVtYmVy
QXJyYXktPmRhdGEoKVtpXSA9IHZhbHVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVtYmVy
QXJyYXk7Ci19Ci0KIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlckRh
dGEoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKIHsKICAg
ICBpZiAoYXJncy5zaXplKCkgIT0gMykKQEAgLTcyLDI2MSArNTIsMzggQEAgSlNWYWx1ZSBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YnVmZgogCiAgICAgdW5zaWduZWQgdGFyZ2V0ID0gYXJn
cy5hdCgwKS50b0ludDMyKGV4ZWMpOwogICAgIHVuc2lnbmVkIHVzYWdlID0gYXJncy5hdCgyKS50
b0ludDMyKGV4ZWMpOwotICAgIAotICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gbnVtYmVy
QXJyYXkgPSB0b0NhbnZhc051bWJlckFycmF5KGV4ZWMsIGFyZ3MuYXQoMSkpOwotICAgIAotICAg
IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSktPmJ1ZmZlckRh
dGEodGFyZ2V0LCBudW1iZXJBcnJheS5nZXQoKSwgdXNhZ2UpOwotICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotfQotCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJT
dWJEYXRhKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCi17
Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yKTsKLQotICAgIHVuc2lnbmVkIHRhcmdldCA9IGFyZ3MuYXQoMCkudG9J
bnQzMihleGVjKTsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhl
Yyk7Ci0gICAgCi0gICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBudW1iZXJBcnJheSA9IHRv
Q2FudmFzTnVtYmVyQXJyYXkoZXhlYywgYXJncy5hdCgyKSk7Ci0gICAgCi0gICAgc3RhdGljX2Nh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKS0+YnVmZmVyU3ViRGF0YSh0YXJn
ZXQsIG9mZnNldCwgbnVtYmVyQXJyYXkuZ2V0KCkpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKLXsKLSAgICBp
ZiAoYXJncy5zaXplKCkgIT0gMikKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IpOwotCi0gICAgdW5zaWduZWQgaW5keCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVj
KTsKLSAgICAKLSAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IG51bWJlckFycmF5ID0gdG9D
YW52YXNOdW1iZXJBcnJheShleGVjLCBhcmdzLmF0KDEpKTsKLSAgICAKLSAgICBzdGF0aWNfY2Fz
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpLT52ZXJ0ZXhBdHRyaWIoaW5keCwg
bnVtYmVyQXJyYXkuZ2V0KCkpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0vLyB2
b2lkIGdsVmVydGV4QXR0cmliUG9pbnRlciAoaW4gdW5zaWduZWQgbG9uZyBpbmR4LCBpbiBsb25n
IHNpemUsIGluIHVuc2lnbmVkIGxvbmcgdHlwZSwgaW4gYm9vbGVhbiBub3JtYWxpemVkLCBpbiB1
bnNpZ25lZCBsb25nIHN0cmlkZSwgaW4gQ2FudmFzTnVtYmVyQXJyYXkgYXJyYXkpOwotSlNWYWx1
ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcihKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQotewotICAgIGlmIChhcmdz
LnNpemUoKSAhPSA2KQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
cik7Ci0KLSAgICB1bnNpZ25lZCBpbmR4ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOwotICAg
IHVuc2lnbmVkIHNpemUgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgdW5zaWduZWQg
dHlwZSA9IGFyZ3MuYXQoMikudG9JbnQzMihleGVjKTsKLSAgICB1bnNpZ25lZCBub3JtYWxpemVk
ID0gYXJncy5hdCgzKS50b0ludDMyKGV4ZWMpOwotICAgIGJvb2wgc3RyaWRlID0gYXJncy5hdCg0
KS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgCi0gICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBu
dW1iZXJBcnJheSA9IHRvQ2FudmFzTnVtYmVyQXJyYXkoZXhlYywgYXJncy5hdCg1KSk7Ci0gICAg
Ci0gICAgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKS0+dmVy
dGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIG51
bWJlckFycmF5LmdldCgpKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1
ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeChKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQotewotICAgIGlmIChhcmdzLnNpemUo
KSAhPSA0KQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0K
LSAgICB1bnNpZ25lZCBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKLSAgICB1
bnNpZ25lZCBjb3VudCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKLSAgICBib29sIHRyYW5z
cG9zZSA9IGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpOwotICAgIAotICAgIGlmICghYXJncy5h
dCgzKS5pc09iamVjdCgpKQorICAgIC8vIElmIGFyZ3VtZW50IDEgaXMgYSBudW1iZXIsIHdlIGFy
ZSBpbml0aWFsaXppbmcgdGhpcyBidWZmZXIgdG8gdGhhdCBzaXplCisgICAgaWYgKCFhcmdzLmF0
KDEpLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gYXJncy5hdCgx
KS50b0ludDMyKGV4ZWMpOworICAgICAgICBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QqPihpbXBsKCkpLT5idWZmZXJEYXRhKHRhcmdldCwgY291bnQsIHVzYWdlKTsKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1w
bCgpKTsgICAgCi0gICAgV2ViS2l0Q1NTTWF0cml4KiBtYXRyaXggPSB0b1dlYktpdENTU01hdHJp
eChhcmdzLmF0KDMpKTsKLSAgICBpZiAobWF0cml4KQotICAgICAgICBjb250ZXh0LT51bmlmb3Jt
TWF0cml4KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIG1hdHJpeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IEpTT2JqZWN0KiBhcnJheSA9IGFzT2JqZWN0KGFyZ3MuYXQoMykpOwotICAgICAgICBpbnQgbGVu
Z3RoID0gYXJyYXktPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsZW5ndGgiKSkudG9JbnQz
MihleGVjKTsKLSAgICAgICAgaWYgKGxlbmd0aCkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGZp
cnN0IGVsZW1lbnQgaXMgYSBXZWJLaXRDU1NNYXRyaXgsIGhhbmRsZSBhcyB0aG91Z2ggYWxsIGFy
ZS4gT3RoZXJ3aXNlIGhhbmRsZSBhcyBhIG51bWJlciBhcnJheQotICAgICAgICAgICAgV2ViS2l0
Q1NTTWF0cml4KiBtYXRyaXggPSB0b1dlYktpdENTU01hdHJpeChhcnJheS0+Z2V0KGV4ZWMsIDAp
KTsKLSAgICAgICAgICAgIGlmIChtYXRyaXgpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8V2Vi
S2l0Q1NTTWF0cml4Kj4gbWF0cml4QXJyYXkobGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdlYktp
dENTU01hdHJpeCogbWF0cml4ID0gdG9XZWJLaXRDU1NNYXRyaXgoYXJyYXktPmdldChleGVjLCBp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1hdHJpeEFycmF5W2ldID0gbWF0cml4OwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgYXJyYXkgbWF5IGhh
dmUgbnVsbCBlbnRyaWVzLiBXZSBjdXJyZW50bHkgZG9uJ3QgY2hlY2sgZm9yIHRoaXMgaW4gdW5p
Zm9ybU1hdHJpeAotICAgICAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm1NYXRyaXgobG9jYXRp
b24sIHRyYW5zcG9zZSwgbWF0cml4QXJyYXkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IG51bWJlckFycmF5ID0gQ2FudmFz
TnVtYmVyQXJyYXk6OmNyZWF0ZShsZW5ndGgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdmFsdWUg
PSBhcnJheS0+Z2V0KGV4ZWMsIGkpLnRvRmxvYXQoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAg
IG51bWJlckFycmF5LT5kYXRhKClbaV0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybU1hdHJpeChsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgbnVtYmVyQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1mKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xp
c3QgY29uc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotCi0gICAgdW5zaWduZWQgbG9jYXRp
b24gPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgCi0gICAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Kj4oaW1wbCgpKTsgICAgCi0gICAgc3dpdGNoIChhcmdzLnNpemUoKSkgewotICAgICAgICBjYXNl
IDI6Ci0gICAgICAgICAgICBpZiAoYXJncy5hdCgxKS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBudW1iZXJBcnJheSA9IHRvQ2FudmFzTnVt
YmVyQXJyYXkoZXhlYywgYXJncy5hdCgxKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+dW5p
Zm9ybShsb2NhdGlvbiwgbnVtYmVyQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0obG9jYXRpb24sIHN0
YXRpY19jYXN0PGZsb2F0PihhcmdzLmF0KDEpLnRvTnVtYmVyKGV4ZWMpKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAzOiAKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0o
bG9jYXRpb24sIHN0YXRpY19jYXN0PGZsb2F0PihhcmdzLmF0KDEpLnRvTnVtYmVyKGV4ZWMpKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9h
dD4oYXJncy5hdCgyKS50b051bWJlcihleGVjKSkpOyAKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIDQ6IAotICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybShsb2NhdGlvbiwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGFyZ3MuYXQoMSkudG9OdW1iZXIoZXhlYykpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihhcmdzLmF0KDIp
LnRvTnVtYmVyKGV4ZWMpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxmbG9hdD4oYXJncy5hdCgzKS50b051bWJlcihleGVjKSkpOyAKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDU6IAotICAgICAgICAgICAgY29udGV4dC0+dW5p
Zm9ybShsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3MuYXQoMSkudG9OdW1iZXIoZXhl
YykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PGZsb2F0PihhcmdzLmF0KDIpLnRvTnVtYmVyKGV4ZWMpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oYXJncy5hdCgzKS50b051bWJl
cihleGVjKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGFyZ3MuYXQoNCkudG9OdW1iZXIoZXhlYykpKTsgCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yKTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci19Ci0KLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1pKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFy
Z3Muc2l6ZSgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IpOwogCi0gICAgdW5zaWduZWQgbG9jYXRpb24gPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7
Ci0gICAgCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0ID0gc3RhdGljX2Nh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKTsgICAgCi0gICAgc3dpdGNoKGFy
Z3Muc2l6ZSgpKSB7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZv
cm0obG9jYXRpb24sIGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSAzOiAKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0obG9jYXRp
b24sIGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvSW50MzIoZXhlYykpOyAKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIDQ6IAotICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybShsb2Nh
dGlvbiwgYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9JbnQzMihleGVjKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDMpLnRvSW50MzIoZXhlYykpOyAKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDU6IAotICAgICAgICAgICAgY29udGV4dC0+
dW5pZm9ybShsb2NhdGlvbiwgYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9JbnQzMihleGVjKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDMpLnRvSW50MzIo
ZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCg0
KS50b0ludDMyKGV4ZWMpKTsgCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGlmIChhcmdzLmF0KDEpLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAg
ICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IG51bWJlckFycmF5ID0gdG9DYW52YXNOdW1iZXJB
cnJheShleGVjLCBhcmdzLmF0KDEpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT51bmlmb3Jt
KGxvY2F0aW9uLCBudW1iZXJBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgQ2FudmFzQXJyYXkqIGFycmF5ID0gdG9DYW52YXNBcnJheShh
cmdzLmF0KDEpKTsKICAgICAKKyAgICBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QqPihpbXBsKCkpLT5idWZmZXJEYXRhKHRhcmdldCwgYXJyYXksIHVzYWdlKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6dGV4UGFyYW1ldGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29uc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJTdWJEYXRh
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCiB7CiAgICAg
aWYgKGFyZ3Muc2l6ZSgpICE9IDMpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yKTsKIAogICAgIHVuc2lnbmVkIHRhcmdldCA9IGFyZ3MuYXQoMCkudG9JbnQzMihl
eGVjKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKLSAg
ICAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpOyAgICAKLSAgICBpZiAoYXJncy5hdCgy
KS5pc09iamVjdCgpKSB7Ci0gICAgICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gbnVtYmVy
QXJyYXkgPSB0b0NhbnZhc051bWJlckFycmF5KGV4ZWMsIGFyZ3MuYXQoMikpOwotICAgICAgICBj
b250ZXh0LT50ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgbnVtYmVyQXJyYXkuZ2V0KCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IGFyZ3MuYXQoMikudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Ci0gICAgfQorICAgIHVuc2lnbmVkIG9mZnNldCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVj
KTsKICAgICAKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMykKLSAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotCi0gICAgdW5zaWdu
ZWQgbW9kZSA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKLSAgICB1bnNpZ25lZCB0eXBlID0g
YXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIENhbnZhc0FycmF5KiBhcnJheSA9IHRvQ2Fu
dmFzQXJyYXkoYXJncy5hdCgyKSk7CiAgICAgCi0gICAgLy8gSWYgdGhlIHRoaXJkIHBhcmFtIGlz
IG5vdCBhbiBvYmplY3QsIGl0IGlzIGEgbnVtYmVyLCB3aGljaCBpcyB0aGUgY291bnQuCi0gICAg
Ly8gSW4gdGhpcyBjYXNlIGlmIHRoZXJlIGlzIGEgNHRoIHBhcmFtLCBpdCBpcyB0aGUgb2Zmc2V0
LiBJZiB0aGVyZSBpcyBubwotICAgIC8vIDR0aCBwYXJhbSwgdGhlIG9mZnNldCBpcyAwCi0gICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKTsgICAgCi0gICAgaWYgKCFhcmdzLmF0KDIpLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID4gNCkKLSAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgIAotICAgICAgICB1
bnNpZ25lZCBpbnQgY291bnQgPSBhcmdzLmF0KDIpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIHVu
c2lnbmVkIGludCBvZmZzZXQgPSAoYXJncy5zaXplKCkgPT0gNCkgPyBhcmdzLmF0KDMpLnRvSW50
MzIoZXhlYykgOiAwOwotICAgICAgICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQs
IHR5cGUsICh2b2lkKikgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgfQotICAgIAotICAgIC8vIDNyZCBwYXJhbSBpcyBhbiBvYmplY3QuIFRyZWF0IGl0IGFzIGFu
IGFycmF5Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpCi0gICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgCi0gICAgaWYgKHR5cGUgIT0gR0xfVU5T
SUdORURfQllURSAmJiB0eXBlICE9IEdMX1VOU0lHTkVEX1NIT1JUKQotICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICAgICAgIAotICAgIEpTT2JqZWN0KiBh
cnJheSA9IGFzT2JqZWN0KGFyZ3MuYXQoMikpOwotICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGFy
cmF5LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAibGVuZ3RoIikpLnRvSW50MzIoZXhlYyk7
Ci0gICAgc2l6ZV90IHNpemUgPSBjb3VudCAqICgodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKSA/
IHNpemVvZih1bnNpZ25lZCBjaGFyKSA6IHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOwotICAgIAot
ICAgIHZvaWQqIHRlbXBJbmRpY2VzOwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhzaXplKS5nZXRW
YWx1ZSh0ZW1wSW5kaWNlcykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVy
YWxFcnJvcik7Ci0KLSAgICBPd25GYXN0TWFsbG9jUHRyPHZvaWQ+IHBhc3NlZEluZGljZXModGVt
cEluZGljZXMpOwotCi0gICAgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkgewotICAgICAg
ICB1bnNpZ25lZCBjaGFyKiBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBh
c3NlZEluZGljZXMuZ2V0KCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHZhbHVlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oYXJyYXktPmdldChleGVjLCBpKS50b1VJbnQzMihleGVjKSk7
Ci0gICAgICAgICAgICBpbmRpY2VzW2ldID0gdmFsdWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICB1bnNpZ25lZCBzaG9ydCogaW5kaWNlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0Kj4ocGFzc2VkSW5kaWNlcy5nZXQoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdmFs
dWUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oYXJyYXktPmdldChleGVjLCBpKS50b1VJ
bnQzMihleGVjKSk7Ci0gICAgICAgICAgICBpbmRpY2VzW2ldID0gdmFsdWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgICAgIAotICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwg
dHlwZSwgcGFzc2VkSW5kaWNlcy5nZXQoKSk7CisgICAgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEKj4oaW1wbCgpKS0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgYXJy
YXkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAvLyB2b2lkIHRleEltYWdlMkRI
VE1MKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIGxldmVsLCBpbiBI
VE1MSW1hZ2VFbGVtZW50IGltYWdlKTsKIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnRleEltYWdlMkQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAK
LSAgICBpZiAoYXJncy5zaXplKCkgIT0gMykKKyAgICBpZiAoYXJncy5zaXplKCkgPCAzIHx8IGFy
Z3Muc2l6ZSgpID4gNSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IpOwogCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0ID0gc3RhdGljX2Nh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKTsgICAgCkBAIC0zMzksMTMgKzk2
LDE2IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBKU09iamVjdCogbyA9IGFz
T2JqZWN0KHZhbHVlKTsKICAgICAKKyAgICBib29sIGZsaXBZID0gKGFyZ3Muc2l6ZSgpID4gMykg
PyBhcmdzLmF0KDMpLnRvQm9vbGVhbihleGVjKSA6IGZhbHNlOworICAgIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSA9IChhcmdzLnNpemUoKSA+IDQpID8gYXJncy5hdCgzKS50b0Jvb2xlYW4oZXhlYykg
OiBmYWxzZTsKKyAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAoby0+aW5o
ZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6c19pbmZvKSkgewogICAgICAgICBIVE1MSW1hZ2VF
bGVtZW50KiBpbWdFbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oc3RhdGljX2Nh
c3Q8SlNIVE1MRWxlbWVudCo+KG8pLT5pbXBsKCkpOwotICAgICAgICBjb250ZXh0LT50ZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGltZ0VsdCwgZWMpOworICAgICAgICBjb250ZXh0LT50ZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGltZ0VsdCwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGVjKTsK
ICAgICB9IGVsc2UgaWYgKG8tPmluaGVyaXRzKCZKU0hUTUxDYW52YXNFbGVtZW50OjpzX2luZm8p
KSB7CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1M
Q2FudmFzRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKTsK
LSAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjYW52YXMsIGVjKTsK
KyAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjYW52YXMsIGZsaXBZ
LCBwcmVtdWx0aXBseUFscGhhLCBlYyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICB9CkBAIC0zNTYsNyArMTE2LDcg
QEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SQogLy8gdm9pZCB0ZXhT
dWJJbWFnZTJESFRNTChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBs
ZXZlbCwgaW4gdW5zaWduZWQgbG9uZyB4b2ZmLCBpbiB1bnNpZ25lZCBsb25nIHlvZmYsIGluIHVu
c2lnbmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBpbiBIVE1MSW1hZ2VF
bGVtZW50IGltYWdlKTsKIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1
YkltYWdlMkQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKLSAgICBp
ZiAoYXJncy5zaXplKCkgIT0gNykKKyAgICBpZiAoYXJncy5zaXplKCkgPCA3IHx8IGFyZ3Muc2l6
ZSgpID4gOSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwog
CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKTsgICAgCkBAIC0zNzMsMTMgKzEzMywxNiBA
QCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBhc09iamVj
dCh2YWx1ZSk7CiAgICAgCisgICAgYm9vbCBmbGlwWSA9IChhcmdzLnNpemUoKSA+IDMpID8gYXJn
cy5hdCgzKS50b0Jvb2xlYW4oZXhlYykgOiBmYWxzZTsKKyAgICBib29sIHByZW11bHRpcGx5QWxw
aGEgPSAoYXJncy5zaXplKCkgPiA0KSA/IGFyZ3MuYXQoMykudG9Cb29sZWFuKGV4ZWMpIDogZmFs
c2U7CisgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKG8tPmluaGVyaXRz
KCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgSFRNTEltYWdlRWxlbWVu
dCogaW1nRWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KHN0YXRpY19jYXN0PEpT
SFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKTsKLSAgICAgICAgY29udGV4dC0+dGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBpbWdFbHQsIGVjKTsK
KyAgICAgICAgY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2Zm
LCB3aWR0aCwgaGVpZ2h0LCBpbWdFbHQsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBlYyk7CiAg
ICAgfSBlbHNlIGlmIChvLT5pbmhlcml0cygmSlNIVE1MQ2FudmFzRWxlbWVudDo6c19pbmZvKSkg
ewogICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENh
bnZhc0VsZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwoKSk7Ci0g
ICAgICAgIGNvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwg
d2lkdGgsIGhlaWdodCwgY2FudmFzLCBlYyk7CisgICAgICAgIGNvbnRleHQtPnRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgY2FudmFzLCBmbGlw
WSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgfQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzU2hvcnRBcnJheUNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJK
U0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJDYW52YXNTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiSlNDYW52YXNBcnJheS5o
IgorI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0NhbnZhc0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0NhbnZhc1Nob3J0QXJyYXkuaCIK
KyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKworY29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzU2hvcnRBcnJheUNv
bnN0cnVjdG9yOjpzX2luZm8gPSB7ICJDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IiLCAmSlND
YW52YXNBcnJheTo6c19pbmZvLCAwLCAwIH07CisKK0pTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVj
dG9yOjpKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChK
U0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTQ2FudmFzU2hvcnRBcnJheVByb3RvdHlw
ZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMiksIFJlYWRPbmx5fERvbnRE
ZWxldGV8RG9udEVudW0pOworfQorCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdENhbnZhc1No
b3J0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCit7CisgICAgSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IqIGpzQ29u
c3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvcio+KGNv
bnN0cnVjdG9yKTsKKyAgICBSZWZQdHI8Q2FudmFzU2hvcnRBcnJheT4gYXJyYXkgPSBzdGF0aWNf
Y2FzdDxDYW52YXNTaG9ydEFycmF5Kj4oY29uc3RydWN0PENhbnZhc1Nob3J0QXJyYXksIHNob3J0
PihleGVjLCBhcmdzKS5nZXQoKSk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywganND
b25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGFycmF5LmdldCgpKSk7Cit9CisKK0pTQzo6Q29u
c3RydWN0VHlwZSBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0
YShKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0
YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RDYW52YXNTaG9ydEFycmF5OworICAgIHJldHVy
biBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAg
ICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Nob3J0QXJyYXlD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNT
aG9ydEFycmF5Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3Jf
aAorI2RlZmluZSBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RvY3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9N
Q29uc3RydWN0b3JPYmplY3QgeworcHVibGljOgorICAgIEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMg
Y29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgSlND
OjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7Cisg
ICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJnNfaW5mbzsgfQorfTsKKworfQorCisjZW5kaWYgLy8gSlNDYW52YXNTaG9ydEFycmF5Q29u
c3RydWN0b3JfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5
cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Nob3J0QXJyYXlDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5Q3VzdG9tLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5
Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJKU0Nh
bnZhc1Nob3J0QXJyYXkuaCIKKworI2luY2x1ZGUgIkNhbnZhc1Nob3J0QXJyYXkuaCIKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTQ2Fu
dmFzU2hvcnRBcnJheTo6Z2V0QnlJbmRleChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW50IGluZGV4KQoreworICAgIHNpZ25lZCBzaG9ydCB2YWx1ZTsKKyAgICBpbXBsKCktPmdldChp
bmRleCwgdmFsdWUpOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKU0NhbnZhc1Nob3J0QXJyYXk6
OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQoreworICAgIGltcGwoKS0+c2V0KGluZGV4LCBzdGF0aWNfY2FzdDxzaWdu
ZWQgc2hvcnQ+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bnZhc1Nob3J0QXJyYXkqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBl
cjxKU0NhbnZhc1Nob3J0QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5
Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFp
bgpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFT
KQorCisjaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgiCisK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5
LmgiCisjaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQ2FudmFz
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRCeXRl
QXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworY29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiQ2FudmFzVW5zaWduZWRCeXRl
QXJyYXlDb25zdHJ1Y3RvciIsICZKU0NhbnZhc0FycmF5OjpzX2luZm8sIDAsIDAgfTsKKworSlND
YW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yOjpKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDYW52YXNVbnNpZ25lZEJ5dGVB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90
b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheVByb3RvdHlwZTo6c2Vs
ZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMiksIFJlYWRPbmx5fERvbnREZWxldGV8
RG9udEVudW0pOworfQorCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdENhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQoreworICAgIEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rv
cioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlD
b25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKKyAgICBSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRl
QXJyYXk+IGFycmF5ID0gc3RhdGljX2Nhc3Q8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXkqPihjb25z
dHJ1Y3Q8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXksIHVuc2lnbmVkIGNoYXI+KGV4ZWMsIGFyZ3Mp
LmdldCgpKTsKKyAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5n
bG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKTsKK30KKworSlNDOjpDb25zdHJ1Y3RUeXBlIEpT
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0M6
OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RDYW52YXNVbnNpZ25lZEJ5dGVBcnJheTsKKyAgICByZXR1
cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1
Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBK
U0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU0NhbnZhc1Vu
c2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1
Y3Rvck9iamVjdCB7CitwdWJsaWM6CisgICAgSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMg
Y29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgSlND
OjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7Cisg
ICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJnNfaW5mbzsgfQorfTsKKworfQorCisjZW5kaWYgLy8gSlNDYW52YXNVbnNpZ25lZEJ5dGVB
cnJheUNvbnN0cnVjdG9yX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRCeXRl
QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52
YXNVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXku
aCIKKworI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNWYWx1ZSBKU0NhbnZhc1Vuc2ln
bmVkQnl0ZUFycmF5OjpnZXRCeUluZGV4KEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bnQgaW5kZXgpCit7CisgICAgdW5zaWduZWQgY2hhciB2YWx1ZTsKKyAgICBpbXBsKCktPmdldChp
bmRleCwgdmFsdWUpOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKU0NhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpbXBsKCktPnNldChpbmRleCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4odmFsdWUudG9JbnQzMihleGVjKSkpOworfQorCitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0
RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PihleGVjLCBnbG9iYWxP
YmplY3QsIG9iamVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRSgzRF9DQU5WQVMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkSW50QXJy
YXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJKU0NhbnZhc1Vuc2lnbmVk
SW50QXJyYXlDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJDYW52YXNVbnNpZ25lZEludEFycmF5LmgiCisjaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIkpTQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCitjb25z
dCBDbGFzc0luZm8gSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIkNhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3RvciIsICZKU0NhbnZhc0FycmF5Ojpz
X2luZm8sIDAsIDAgfTsKKworSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3I6OkpT
Q2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpT
Q2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJl
Y3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNVbnNpZ25lZEludEFy
cmF5UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOworICAgIHB1dERp
cmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAyKSwgUmVh
ZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7Cit9CisKK3N0YXRpYyBKU09iamVjdCogY29uc3Ry
dWN0Q2FudmFzVW5zaWduZWRJbnRBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25z
dHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBKU0NhbnZhc1Vuc2lnbmVkSW50
QXJyYXlDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFzVW5z
aWduZWRJbnRBcnJheUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOworICAgIFJlZlB0cjxDYW52
YXNVbnNpZ25lZEludEFycmF5PiBhcnJheSA9IHN0YXRpY19jYXN0PENhbnZhc1Vuc2lnbmVkSW50
QXJyYXkqPihjb25zdHJ1Y3Q8Q2FudmFzVW5zaWduZWRJbnRBcnJheSwgdW5zaWduZWQgaW50Pihl
eGVjLCBhcmdzKS5nZXQoKSk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25z
dHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGFycmF5LmdldCgpKSk7Cit9CisKK0pTQzo6Q29uc3Ry
dWN0VHlwZSBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0
RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0
RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RDYW52YXNVbnNpZ25lZEludEFycmF5Owor
ICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBz
dm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29u
c3RydWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU0NhbnZh
c1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJKU0RvY3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgeworcHVibGljOgorICAgIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMg
Y29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgSlND
OjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7Cisg
ICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJnNfaW5mbzsgfQorfTsKKworfQorCisjZW5kaWYgLy8gSlNDYW52YXNVbnNpZ25lZEludEFy
cmF5Q29uc3RydWN0b3JfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkSW50QXJy
YXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNV
bnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKKwor
I2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTQ2FudmFzVW5zaWduZWRJbnRB
cnJheTo6Z2V0QnlJbmRleChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW50IGluZGV4
KQoreworICAgIHVuc2lnbmVkIGludCB2YWx1ZTsKKyAgICBpbXBsKCktPmdldChpbmRleCwgdmFs
dWUpOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXk6Omlu
ZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQoreworICAgIGltcGwoKS0+c2V0KGluZGV4LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBpbnQ+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbnZh
c1Vuc2lnbmVkSW50QXJyYXkqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3Jh
cHBlcjxKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NB
TlZBUykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNV
bnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBl
CiAgICsgdGV4dC9wbGFpbgpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25lZFNob3J0QXJy
YXlDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJDYW52
YXNVbnNpZ25lZFNob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
SlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworY29uc3Qg
Q2xhc3NJbmZvIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIkNhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yIiwgJkpTQ2FudmFzQXJyYXk6
OnNfaW5mbywgMCwgMCB9OworCitKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9y
OjpKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2Jq
ZWN0KEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQoreworICAg
IHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU0NhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsK
KyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhl
YywgMiksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworfQorCitzdGF0aWMgSlNPYmpl
Y3QqIGNvbnN0cnVjdENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBKU0NhbnZh
c1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nh
c3Q8SlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsK
KyAgICBSZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5PiBhcnJheSA9IHN0YXRpY19jYXN0
PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSo+KGNvbnN0cnVjdDxDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXksIHVuc2lnbmVkIHNob3J0PihleGVjLCBhcmdzKS5nZXQoKSk7CisgICAgcmV0dXJuIGFz
T2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGFycmF5Lmdl
dCgpKSk7Cit9CisKK0pTQzo6Q29uc3RydWN0VHlwZSBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYgY29uc3Ry
dWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVj
dENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheTsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5z
aWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1l
LXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNDYW52YXNVbnNpZ25lZFNo
b3J0QXJyYXlDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5
Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
b2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTQ2FudmFzVW5zaWdu
ZWRTaG9ydEFycmF5Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qgewor
cHVibGljOgorICAgIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9
Cit9OworCit9CisKKyNlbmRpZiAvLyBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVj
dG9yX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1l
LXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCisKKyNpbmNsdWRlICJKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oIgorCisj
aW5jbHVkZSAiQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNWYWx1ZSBKU0NhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheTo6Z2V0QnlJbmRleChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW50IGlu
ZGV4KQoreworICAgIHVuc2lnbmVkIHNob3J0IHZhbHVlOworICAgIGltcGwoKS0+Z2V0KGluZGV4
LCB2YWx1ZSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHZhbHVl
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpbXBsKCktPnNldChpbmRleCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKK30KKworSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSogb2JqZWN0KQoreworICAgIHJldHVybiBnZXRE
T01PYmplY3RXcmFwcGVyPEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5PihleGVjLCBnbG9iYWxP
YmplY3QsIG9iamVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRSgzRF9DQU5WQVMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
CShyZXZpc2lvbiA0ODExMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxNiBAQAogI2luY2x1ZGUgIkpTU2hh
cmVkV29ya2VyQ29uc3RydWN0b3IuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKDNEX0NBTlZBUykK
KyNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJK
U0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25l
ZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNDYW52YXNJbnRBcnJheUNvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IkpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0Nh
bnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oIgorI2VuZGlmCiAjaW5jbHVkZSAiSlNXZWJLaXRD
U1NNYXRyaXhDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkpTV29ya2VyQ29uc3RydWN0b3IuaCIKQEAgLTYxMyw2ICs2MjMsNDgg
QEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6d2ViS2l0Q1NTTWF0cml4KEV4ZQogICAgIHJldHVybiBn
ZXRET01Db25zdHJ1Y3RvcjxKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yPihleGVjLCB0aGlz
KTsKIH0KICAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6Y2Fu
dmFzQXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVybiBnZXRE
T01Db25zdHJ1Y3RvcjxKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMp
OworfQorIAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6Y2FudmFzQnl0ZUFycmF5KEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNDYW52YXNCeXRl
QXJyYXlDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7Cit9CisgCitKU1ZhbHVlIEpTRE9NV2luZG93
OjpjYW52YXNVbnNpZ25lZEJ5dGVBcnJheShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1
Y3Rvcj4oZXhlYywgdGhpcyk7Cit9CisgCitKU1ZhbHVlIEpTRE9NV2luZG93OjpjYW52YXNJbnRB
cnJheShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVj
dG9yPEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7Cit9CisgCitKU1Zh
bHVlIEpTRE9NV2luZG93OjpjYW52YXNVbnNpZ25lZEludEFycmF5KEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNDYW52YXNVbnNpZ25lZElu
dEFycmF5Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOworfQorIAorSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6Y2FudmFzU2hvcnRBcnJheShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGdldERPTUNvbnN0cnVjdG9yPEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yPihleGVjLCB0
aGlzKTsKK30KKyAKK0pTVmFsdWUgSlNET01XaW5kb3c6OmNhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOworfQor
IAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6Y2FudmFzRmxvYXRBcnJheShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTQ2FudmFzRmxvYXRBcnJh
eUNvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsKK30KKyNlbmRpZgorIAogSlNWYWx1ZSBKU0RPTVdp
bmRvdzo6eG1sSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I+KGV4ZWMsIHRo
aXMpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0ODExMCkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2NSw3ICsxNjUsOCBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVu
CiAgICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiAgICAgfQogI2lmIEVOQUJMRSgzRF9D
QU5WQVMpICAgIAotICAgIGlmICh0eXBlID09ICJ3ZWJraXQtM2QiKSB7CisgICAgaWYgKCh0eXBl
ID09ICJ3ZWJraXQtM2QiKSB8fAorICAgICAgICAodHlwZSA9PSAiR0wiKSkgewogICAgICAgICBp
ZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPmlzM2QoKSkKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICBpZiAoIW1fY29udGV4dCkgewpAQCAtMjQzLDE1ICsyNDQsMjUgQEAgdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDbwogICAgIGlmIChjb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKKyNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQorICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dDNEID0gTlVMTDsKKyAg
ICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMzZCgpKSB7CisgICAgICAgIGNvbnRleHQz
RCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KG1fY29udGV4dC5nZXQo
KSk7CisgICAgICAgIGNvbnRleHQzRC0+YmVnaW5QYWludCgpOworICAgIH0KKyNlbmRpZgorCiAg
ICAgaWYgKG1faW1hZ2VCdWZmZXIpIHsKICAgICAgICAgSW1hZ2UqIGltYWdlID0gbV9pbWFnZUJ1
ZmZlci0+aW1hZ2UoKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgY29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlLCByKTsKICAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykg
ICAgCi0gICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKSkKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4obV9jb250ZXh0LmdldCgpKS0+cmVz
aGFwZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpOworCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAg
ICBpZiAoY29udGV4dDNEICE9IE5VTEwpIHsKKyAgICAgICAgY29udGV4dDNELT5yZXNoYXBlKHIu
d2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZW5kUGFpbnQoKTsKKyAg
ICB9CiAjZW5kaWYKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0FycmF5LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNBcnJheS5oIgorI2luY2x1
ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBDYW52
YXNBcnJheTo6Q2FudmFzQXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQpCisgICAgICAg
IDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKKyAgICB7Cisg
ICAgICAgIG1fYmFzZUFkZHJlc3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEo
KSkgKyBtX29mZnNldDsKKyAgICB9CisKKyAgICBDYW52YXNBcnJheTo6fkNhbnZhc0FycmF5KCkK
KyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgQ2FudmFzQXJyYXk6OmFsaWduZWRTaXplSW5C
eXRlcygpIGNvbnN0IHsKKyAgICAgICAgLy8gQXNzdW1lIHdlIG9ubHkgbmVlZCB0byByb3VuZCB1
cCB0byA0LWJ5dGUgYm91bmRhcmllcyBmb3IgYWxpZ25tZW50LgorICAgICAgICByZXR1cm4gKChz
aXplSW5CeXRlcygpICsgMykgLyA0KSAqIDQ7CisgICAgfQorfQorCisjZW5kaWYgLy8gRU5BQkxF
KDNEX0NBTlZBUykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzQXJyYXkuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3Bs
YWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
Q2FudmFzQXJyYXlfaAorI2RlZmluZSBDYW52YXNBcnJheV9oCisKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICBjbGFzcyBDYW52YXNBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc0Fy
cmF5PiB7CisgICAgcHVibGljOgorICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVy
PiBidWZmZXIoKSB7CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXI7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkKiBiYXNlQWRkcmVzcygpIHsKKyAgICAgICAgICAgIHJldHVybiBtX2Jhc2VB
ZGRyZXNzOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3Qgewor
ICAgICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgICAgICB9CisKKyAgICAgICAgdmlydHVh
bCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQg
c2l6ZUluQnl0ZXMoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgYWxpZ25l
ZFNpemVJbkJ5dGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgfkNhbnZhc0FycmF5KCk7CisK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIENhbnZhc0FycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJy
YXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgb2Zmc2V0KTsKKworICAgICAgICAvLyBUaGlzIGlz
IHRoZSBhZGRyZXNzIG9mIHRoZSBDYW52YXNBcnJheUJ1ZmZlcidzIHN0b3JhZ2UsIHBsdXMgdGhl
IG9mZnNldC4KKyAgICAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKKyAgICAgICAgdW5zaWduZWQg
bV9vZmZzZXQ7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxDYW52YXNB
cnJheUJ1ZmZlcj4gbV9idWZmZXI7CisgICAgfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIENhbnZhc0FycmF5X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzQXJyYXkuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10
eXBlCiAgICsgdGV4dC9wbGFpbgpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQXJyYXkuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD0z
RF9DQU5WQVNdIENhbnZhc0FycmF5IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcg
bGVuZ3RoOworICAgICAgICBpbnQgc2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgaW50IGFsaWduZWRT
aXplSW5CeXRlcygpOworICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1
ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAg
ICBQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBDYW52YXNBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHVuc2lnbmVkIHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDYW52YXNBcnJheUJ1ZmZlcihzaXplSW5CeXRlcykpOworICAgIH0KKyAgICAKKyAgICBDYW52
YXNBcnJheUJ1ZmZlcjo6Q2FudmFzQXJyYXlCdWZmZXIodW5zaWduZWQgc2l6ZUluQnl0ZXMpIHsK
KyAgICAgICAgbV9zaXplSW5CeXRlcyA9IHNpemVJbkJ5dGVzOworICAgICAgICBtX2RhdGEgPSBX
VEY6OmZhc3RaZXJvZWRNYWxsb2Moc2l6ZUluQnl0ZXMpOworICAgIH0KKyAgICAKKyAgICB2b2lk
KiBDYW52YXNBcnJheUJ1ZmZlcjo6ZGF0YSgpIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBDYW52YXNBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0
IHsKKyAgICAgICAgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7CisgICAgfQorCisgICAgQ2FudmFzQXJy
YXlCdWZmZXI6On5DYW52YXNBcnJheUJ1ZmZlcigpIHsKKyAgICAgICAgV1RGOjpmYXN0RnJlZSht
X2RhdGEpOworICAgIH0KK30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0FycmF5QnVmZmVyLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpBZGRlZDogc3Zu
OmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
QXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0Fy
cmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0Fy
cmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIENhbnZhc0FycmF5QnVmZmVyX2gKKyNkZWZpbmUgQ2FudmFzQXJyYXlCdWZmZXJfaAorCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ2FudmFzQXJyYXlCdWZmZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxDYW52YXNBcnJheUJ1ZmZlcj4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25l
ZCBzaXplSW5CeXRlcyk7CisKKyAgICAgICAgdm9pZCogZGF0YSgpOworICAgICAgICB1bnNpZ25l
ZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisKKyAgICAgICAgfkNhbnZhc0FycmF5QnVmZmVyKCk7CisK
KyAgICBwcml2YXRlOgorICAgICAgICBDYW52YXNBcnJheUJ1ZmZlcih1bnNpZ25lZCBzaXplSW5C
eXRlcyk7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7CisgICAgICAgIHZvaWQqIG1f
ZGF0YTsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
Q2FudmFzQXJyYXlCdWZmZXJfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNBcnJheUJ1ZmZlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUK
ICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheUJ1ZmZlci5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheUJ1ZmZlci5pZGwJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0FycmF5QnVmZmVyLmlkbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZhY2Ug
W0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFzQXJyYXlCdWZmZXIgeworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgaW50IGJ5dGVMZW5ndGg7CisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5jcHAJKHJldmlzaW9uIDQ4MTEwKQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNCeXRlQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywy
MSArMjcsNDkgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKKyNpbmNsdWRlICJDYW52YXNB
cnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkNhbnZhc0J5dGVBcnJheS5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLVBhc3NSZWZQdHI8
Q2FudmFzQnl0ZUFycmF5PiBDYW52YXNCeXRlQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNCeXRlQXJyYXkobGVuZ3RoKSk7Ci19
Ci0KLUNhbnZhc0J5dGVBcnJheTo6Q2FudmFzQnl0ZUFycmF5KHVuc2lnbmVkIGxlbmd0aCkKLSAg
ICA6IG1fZGF0YShsZW5ndGgpCi17Ci19CisgICAgUGFzc1JlZlB0cjxDYW52YXNCeXRlQXJyYXk+
IENhbnZhc0J5dGVBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAg
IFJlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQ2FudmFzQXJyYXlCdWZmZXI6OmNy
ZWF0ZShsZW5ndGggKiBzaXplb2Yoc2lnbmVkIGNoYXIpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZShidWZmZXIsIDAsIGxlbmd0aCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxDYW52YXNCeXRl
QXJyYXk+IENhbnZhc0J5dGVBcnJheTo6Y3JlYXRlKHNpZ25lZCBjaGFyKiBhcnJheSwgdW5zaWdu
ZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgUmVmUHRyPENhbnZhc0J5dGVBcnJheT4gYSA9IENh
bnZhc0J5dGVBcnJheTo6Y3JlYXRlKGxlbmd0aCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGEtPnNldChpLCBhcnJheVtpXSk7Cisg
ICAgICAgIHJldHVybiBhOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5
PiBDYW52YXNCeXRlQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBi
dWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIC8vIENo
ZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBvZgor
ICAgICAgICAvLyB0aGUgZ2l2ZW4gQ2FudmFzQXJyYXlCdWZmZXIncyBzdG9yYWdlLgorICAgICAg
ICBpZiAoKG9mZnNldCArIChsZW5ndGggKiBzaXplb2Yoc2lnbmVkIGNoYXIpKSkgPiBidWZmZXIt
PmJ5dGVMZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KIAor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc0J5dGVBcnJheShidWZmZXIsIG9mZnNl
dCwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAgIENhbnZhc0J5dGVBcnJheTo6Q2FudmFzQnl0
ZUFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6IENhbnZhc0FycmF5KGJ1ZmZlciwgb2Zmc2V0KQor
ICAgICAgICAsIG1fc2l6ZShsZW5ndGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBDYW52YXNCeXRlQXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1fc2l6
ZTsKKyAgICB9CisgICAgICAgIAorICAgIHVuc2lnbmVkIENhbnZhc0J5dGVBcnJheTo6c2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNpemVvZihzaWduZWQg
Y2hhcik7CisgICAgfQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNCeXRlQXJyYXkuaAkocmV2aXNpb24gNDgxMTApCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwy
OSArMjYsNTQgQEAKICNpZm5kZWYgQ2FudmFzQnl0ZUFycmF5X2gKICNkZWZpbmUgQ2FudmFzQnl0
ZUFycmF5X2gKIAorI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPGxpbWl0cz4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgU3RyaW5nOwogICAgIAotICAgIGNsYXNz
IENhbnZhc0J5dGVBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc0J5dGVBcnJheT4gewor
ICAgIGNsYXNzIENhbnZhc0FycmF5QnVmZmVyOworCisgICAgY2xhc3MgQ2FudmFzQnl0ZUFycmF5
IDogcHVibGljIENhbnZhc0FycmF5IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENhbnZhc0J5dGVBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAg
IAotICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KLSAg
ICAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
OyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0J5dGVBcnJheT4gY3JlYXRlKHNp
Z25lZCBjaGFyKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2FudmFzQnl0ZUFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZl
cj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCi0gICAgICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KKyAgICAgICAgdmly
dHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBz
aXplSW5CeXRlcygpIGNvbnN0OworCisgICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBk
b3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGlzbmFuKHZhbHVlKSkg
Ly8gQ2xhbXAgTmFOIHRvIDAKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAg
ICBpZiAodmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPjo6bWluKCkpCisg
ICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPjo6
bWluKCk7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
c2lnbmVkIGNoYXI+OjptYXgoKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8c2lnbmVkIGNoYXI+OjptYXgoKTsKKyAgICAgICAgICAgIHNpZ25lZCBjaGFyKiBz
dG9yYWdlID0gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXIqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAg
ICAgICAgIHN0b3JhZ2VbaW5kZXhdID0gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHNp
Z25lZCBjaGFyJiByZXN1bHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRl
eCA+PSBtX3NpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
c2lnbmVkIGNoYXIqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcio+KG1fYmFzZUFk
ZHJlc3MpOworICAgICAgICAgICAgcmVzdWx0ID0gc3RvcmFnZVtpbmRleF07CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ2FudmFz
Qnl0ZUFycmF5KHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBtX2Rh
dGE7CisgICAgICAgIENhbnZhc0J5dGVBcnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVy
PiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgbV9zaXpl
OwogICAgIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDYW52
YXNOdW1iZXJBcnJheV9oCisjZW5kaWYgLy8gQ2FudmFzQnl0ZUFycmF5X2gKSW5kZXg6IFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5pZGwJKHJldmlzaW9uIDQ4MTEwKQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNCeXRlQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw4ICsyNiwxMSBAQAogbW9kdWxlIGh0bWwgewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENv
bmRpdGlvbmFsPTNEX0NBTlZBUywKLSAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvcgotICAgIF0g
Q2FudmFzQnl0ZUFycmF5IHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmcgbGVuZ3RoOworICAgICAgICBIYXNDdXN0b21JbmRleEdldHRlciwKKyAgICAgICAgSGFzQ3Vz
dG9tSW5kZXhTZXR0ZXIsCisgICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVydGVyLAorICAgICAg
ICBHZW5lcmF0ZUN1c3RvbUNvbnN0cnVjdG9yLAorICAgICAgICBDdXN0b21Ub0pTCisgICAgXSBD
YW52YXNCeXRlQXJyYXkgOiBDYW52YXNBcnJheSB7CiAgICAgfTsKIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNGbG9hdEFycmF5LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQorCisjaW5jbHVkZSAiQ2FudmFzRmxvYXRBcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgCisgICAgUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNGbG9hdEFy
cmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgUmVmUHRyPENhbnZh
c0FycmF5QnVmZmVyPiBidWZmZXIgPSBDYW52YXNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAq
IHNpemVvZihmbG9hdCkpOworICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3Ro
KTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IENhbnZhc0Zsb2F0
QXJyYXk6OmNyZWF0ZShmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhID0gQ2FudmFzRmxvYXRBcnJheTo6Y3JlYXRl
KGxlbmd0aCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkK
KyAgICAgICAgICAgIGEtPnNldChpLCBhcnJheVtpXSk7CisgICAgICAgIHJldHVybiBhOworICAg
IH0KKworICAgIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gQ2FudmFzRmxvYXRBcnJheTo6
Y3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvZmZzZXQg
cmVzdWx0cyBpbiB2YWxpZCBhbGlnbm1lbnQuCisgICAgICAgIGlmICgob2Zmc2V0ICUgc2l6ZW9m
KGZsb2F0KSkgIT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQgYSB2YWxp
ZCByZWdpb24gb2YKKyAgICAgICAgLy8gdGhlIGdpdmVuIENhbnZhc0FycmF5QnVmZmVyJ3Mgc3Rv
cmFnZS4KKyAgICAgICAgaWYgKChvZmZzZXQgKyAobGVuZ3RoICogc2l6ZW9mKGZsb2F0KSkpID4g
YnVmZmVyLT5ieXRlTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNGbG9hdEFycmF5KGJ1ZmZl
ciwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgQ2FudmFzRmxvYXRBcnJheTo6
Q2FudmFzRmxvYXRBcnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGlu
dCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBDYW52YXNBcnJheShidWZmZXIs
IG9mZnNldCkKKyAgICAgICAgLCBtX3NpemUobGVuZ3RoKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgQ2FudmFzRmxvYXRBcnJheTo6bGVuZ3RoKCkgY29uc3QgeworICAgICAgICBy
ZXR1cm4gbV9zaXplOworICAgIH0KKyAgICAgICAgCisgICAgdW5zaWduZWQgQ2FudmFzRmxvYXRB
cnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNp
emVvZihmbG9hdCk7CisgICAgfQorfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5j
cHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KQWRkZWQ6
IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0Zsb2F0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0Zsb2F0QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
RmxvYXRBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBDYW52YXNGbG9hdEFycmF5X2gKKyNkZWZpbmUgQ2FudmFzRmxvYXRBcnJheV9oCisKKyNp
bmNsdWRlICJDYW52YXNBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ2FudmFzRmxvYXRBcnJheSA6IHB1
YmxpYyBDYW52YXNBcnJheSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDYW52YXNGbG9hdEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gY3JlYXRlKGZsb2F0KiBhcnJheSwgdW5z
aWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJh
eT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0OworICAgICAgICBDYW52YXNBcnJheSogaXRlbSh1bnNpZ25lZCBpbmRleCk7CisgICAg
ICAgIAorICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3Q7CisKKyAg
ICAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFtcCBOYU4gdG8gMAorICAgICAg
ICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgIGZsb2F0KiBzdG9yYWdlID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgICAgIHN0b3JhZ2VbaW5kZXhd
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIGZsb2F0JiByZXN1bHQpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgZmxvYXQqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxmbG9h
dCo+KG1fYmFzZUFkZHJlc3MpOworICAgICAgICAgICAgcmVzdWx0ID0gc3RvcmFnZVtpbmRleF07
CisgICAgICAgICAgICBpZiAoaXNuYW4ocmVzdWx0KSkgeworICAgICAgICAgICAgICAgIC8vIENs
YW1wIE5hTiB0byAwCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBDYW52YXNGbG9hdEFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgbV9zaXpl
OworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDYW52
YXNGbG9hdEFycmF5X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzRmxvYXRBcnJheS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0
ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNGbG9hdEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNGbG9hdEFycmF5LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNl
IFsKKyAgICAgICAgQ29uZGl0aW9uYWw9M0RfQ0FOVkFTLAorICAgICAgICBIYXNDdXN0b21JbmRl
eEdldHRlciwKKyAgICAgICAgSGFzQ3VzdG9tSW5kZXhTZXR0ZXIsCisgICAgICAgIEdlbmVyYXRl
TmF0aXZlQ29udmVydGVyLAorICAgICAgICBHZW5lcmF0ZUN1c3RvbUNvbnN0cnVjdG9yLAorICAg
ICAgICBDdXN0b21Ub0pTCisgICAgXSBDYW52YXNGbG9hdEFycmF5IDogQ2FudmFzQXJyYXkgewor
ICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ludEFycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ludEFycmF5LmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzSW50QXJyYXkuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiQ2FudmFzSW50QXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IAorICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc0ludEFycmF5OjpjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVmZmVy
PiBidWZmZXIgPSBDYW52YXNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZihpbnQp
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7CisgICAgfQorCisg
ICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzSW50QXJyYXk6OmNyZWF0ZShpbnQq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBSZWZQdHI8Q2FudmFzSW50
QXJyYXk+IGEgPSBDYW52YXNJbnRBcnJheTo6Y3JlYXRlKGxlbmd0aCk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGEtPnNldChpLCBh
cnJheVtpXSk7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IENhbnZhc0ludEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJh
eUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgb2Zmc2V0IHJlc3VsdHMgaW4gdmFsaWQgYWxpZ25tZW50LgorICAg
ICAgICBpZiAoKG9mZnNldCAlIHNpemVvZihpbnQpKSAhPSAwKSB7CisgICAgICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBh
cmUgdGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBvZgorICAgICAgICAvLyB0aGUgZ2l2ZW4g
Q2FudmFzQXJyYXlCdWZmZXIncyBzdG9yYWdlLgorICAgICAgICBpZiAoKG9mZnNldCArIChsZW5n
dGggKiBzaXplb2YoaW50KSkpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
IHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
YW52YXNJbnRBcnJheShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAg
IENhbnZhc0ludEFycmF5OjpDYW52YXNJbnRBcnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVm
ZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBDYW52
YXNBcnJheShidWZmZXIsIG9mZnNldCkKKyAgICAgICAgLCBtX3NpemUobGVuZ3RoKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgQ2FudmFzSW50QXJyYXk6Omxlbmd0aCgpIGNvbnN0
IHsKKyAgICAgICAgcmV0dXJuIG1fc2l6ZTsKKyAgICB9CisgICAgICAgIAorICAgIHVuc2lnbmVk
IENhbnZhc0ludEFycmF5OjpzaXplSW5CeXRlcygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGxl
bmd0aCgpICogc2l6ZW9mKGludCk7CisgICAgfQorfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NB
TlZBUykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzSW50
QXJyYXkuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWlu
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNJbnRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzSW50QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzSW50QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQ2FudmFzSW50QXJyYXlfaAorI2RlZmluZSBDYW52YXNJbnRBcnJheV9oCisKKyNpbmNs
dWRlICJDYW52YXNBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ2FudmFzSW50QXJyYXkgOiBwdWJsaWMg
Q2FudmFzQXJyYXkgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDYW52YXNJbnRBcnJheT4gY3JlYXRlKGludCogYXJyYXksIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBjcmVhdGUoUGFz
c1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworCisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdDsKKworICAgICAgICB2b2lk
IHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gbV9zaXplKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5hTiB0byAwCisgICAgICAgICAgICAgICAg
dmFsdWUgPSAwOworICAgICAgICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptaW4oKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWluKCk7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOworICAgICAgICAgICAgaW50KiBzdG9yYWdlID0gc3RhdGljX2Nh
c3Q8aW50Kj4obV9iYXNlQWRkcmVzcyk7CisgICAgICAgICAgICBzdG9yYWdlW2luZGV4XSA9IHN0
YXRpY19jYXN0PGludD4odmFsdWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IGdldCh1bnNpZ25lZCBpbmRleCwgaW50JiByZXN1bHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaW50KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8aW50Kj4obV9iYXNlQWRk
cmVzcyk7CisgICAgICAgICAgICByZXN1bHQgPSBzdG9yYWdlW2luZGV4XTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDYW52YXNJ
bnRBcnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICB9OworICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFzSW50QXJyYXlfaAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5oCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0
eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNJbnRBcnJh
eS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5p
ZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ludEFycmF5Lmlk
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21vZHVsZSBodG1sIHsK
KyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD0zRF9DQU5WQVMsCisgICAgICAg
IEhhc0N1c3RvbUluZGV4R2V0dGVyLAorICAgICAgICBIYXNDdXN0b21JbmRleFNldHRlciwKKyAg
ICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIsCisgICAgICAgIEdlbmVyYXRlQ3VzdG9tQ29u
c3RydWN0b3IsCisgICAgICAgIEN1c3RvbVRvSlMKKyAgICBdIENhbnZhc0ludEFycmF5IDogQ2Fu
dmFzQXJyYXkgeworICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA0ODExMCkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
KQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChjYW52YXMpCiAgICAgLCBtX25lZWRzVXBk
YXRlKHRydWUpCisgICAgLCBtX21hcmtlZENhbnZhc0RpcnR5KGZhbHNlKQogewogICAgIG1fY29u
dGV4dC5yZXNoYXBlKG1fY2FudmFzLT53aWR0aCgpLCBtX2NhbnZhcy0+aGVpZ2h0KCkpOwogfQpA
QCAtNTQsMjEgKzU1LDU5IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6fkNhbnZhc1JlbmRl
cmkKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgp
CiB7Ci0gICAgaWYgKG1fY2FudmFzLT5yZW5kZXJCb3goKSAmJiBtX2NhbnZhcy0+cmVuZGVyQm94
KCktPmhhc0xheWVyKCkpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlm
IChtX2NhbnZhcy0+cmVuZGVyQm94KCkgJiYgbV9jYW52YXMtPnJlbmRlckJveCgpLT5oYXNMYXll
cigpKSB7CiAgICAgICAgIG1fY2FudmFzLT5yZW5kZXJCb3goKS0+bGF5ZXIoKS0+cmVuZGVyZXJD
b250ZW50Q2hhbmdlZCgpOworICAgIH0gZWxzZSB7CisjZW5kaWYKKyAgICAgICAgaWYgKCFtX21h
cmtlZENhbnZhc0RpcnR5KSB7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNhbnZhcydz
IGltYWdlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQuCisgICAgICAgICAgICBtX2NhbnZhcy0+YnVmZmVy
KCk7CisgICAgICAgICAgICBtX2NhbnZhcy0+d2lsbERyYXcoRmxvYXRSZWN0KDAsIDAsIG1fY2Fu
dmFzLT53aWR0aCgpLCBtX2NhbnZhcy0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1fbWFya2Vk
Q2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICB9CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorICAgIH0KKyNlbmRpZgorfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6YmVnaW5QYWludCgpCit7CisgICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKKyAgICAg
ICAgbV9jb250ZXh0LmJlZ2luUGFpbnQodGhpcyk7CisgICAgfQorfQorCit2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6ZW5kUGFpbnQoKQoreworICAgIGlmIChtX21hcmtlZENhbnZhc0Rp
cnR5KSB7CisgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgbV9j
b250ZXh0LmVuZFBhaW50KCk7CisgICAgfQogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYgKG1fbmVlZHNV
cGRhdGUpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgIGlmICht
X2NhbnZhcy0+cmVuZGVyQm94KCkgJiYgbV9jYW52YXMtPnJlbmRlckJveCgpLT5oYXNMYXllcigp
KQogICAgICAgICAgICAgbV9jYW52YXMtPnJlbmRlckJveCgpLT5sYXllcigpLT5yZW5kZXJlckNv
bnRlbnRDaGFuZ2VkKCk7CisjZW5kaWYKICAgICAgICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOwog
ICAgIH0KICAgICAKICAgICBtX2NvbnRleHQucmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAor
aW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c2l6ZUluQnl0ZXMoaW50IHR5cGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQuc2l6ZUluQnl0ZXMo
dHlwZSk7CisgICAgaWYgKHJlc3VsdCA8PSAwKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQogewogICAgIG1fY29u
dGV4dC5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOwpAQCAtMTExLDcgKzE1MCw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kUmVuZGUKIH0KIAogCi12b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6YmluZFRleHR1cmUodW5zaWduZWQgdGFyZ2V0LCBDYW52YXNUZXh0dXJl
KiB0ZXh0dXJlKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKQogewogICAgIG1fY29u
dGV4dC5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CkBAIC0xNDgsMjQgKzE4NywzNCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6YmxlbmRGdW5jCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIENhbnZhc051bWJlckFycmF5KiBhcnJheSwgdW5zaWduZWQgbG9uZyB1
c2FnZSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKIHsKLSAgICBtX2Nv
bnRleHQuYnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5LCB1c2FnZSk7CisgICAgbV9jb250ZXh0LmJ1
ZmZlckRhdGEodGFyZ2V0LCBzaXplLCB1c2FnZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlclN1
YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBDYW52YXNOdW1iZXJBcnJh
eSogYXJyYXkpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YnVmZmVyRGF0YSh1bnNp
Z25lZCBsb25nIHRhcmdldCwgQ2FudmFzQXJyYXkqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2Up
CiB7Ci0gICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKS5zaXplKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgbV9jb250ZXh0LmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZz
ZXQsIGFycmF5KTsKKyAgICBtX2NvbnRleHQuYnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEsIHVzYWdl
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi11bnNpZ25lZCBs
b25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhDYW52
YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIENhbnZh
c0FycmF5KiBkYXRhKQogewotICAgIHJldHVybiBtX2NvbnRleHQuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhmcmFtZWJ1ZmZlcik7CisgICAgbV9jb250ZXh0LmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBv
ZmZzZXQsIGRhdGEpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisK
K3Vuc2lnbmVkIGxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIHJldHVybiBtX2NvbnRleHQuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhcih1bnNp
Z25lZCBsb25nIG1hc2spCit7CisgICAgbV9jb250ZXh0LmNsZWFyKG1hc2spOworICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmNsZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBnLCBkb3VibGUgYiwgZG91YmxlIGEp
CkBAIC0xODIsMTIgKzIzMSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVh
ckNvbG8KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKQotewotICAg
IG1fY29udGV4dC5jbGVhcihtYXNrKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1
ZSk7Ci19Ci0KIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhckRlcHRoKGRvdWJs
ZSBkZXB0aCkKIHsKICAgICBtX2NvbnRleHQuY2xlYXJEZXB0aChkZXB0aCk7CkBAIC0yMjQsMTIg
KzI2NywxMDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNvcHlUZXhTdQogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKK1Bhc3NSZWZQdHI8Q2FudmFz
QnVmZmVyPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAg
UmVmUHRyPENhbnZhc0J1ZmZlcj4gbyA9IENhbnZhc0J1ZmZlcjo6Y3JlYXRlKHRoaXMpOworICAg
IGFkZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKyAgICAgICAgCitQYXNzUmVm
UHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZUZy
YW1lYnVmZmVyKCkKK3sKKyAgICBSZWZQdHI8Q2FudmFzRnJhbWVidWZmZXI+IG8gPSBDYW52YXNG
cmFtZWJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOworICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICBy
ZXR1cm4gbzsKK30KKworUGFzc1JlZlB0cjxDYW52YXNUZXh0dXJlPiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIFJlZlB0cjxDYW52YXNUZXh0dXJlPiBv
ID0gQ2FudmFzVGV4dHVyZTo6Y3JlYXRlKHRoaXMpOworICAgIGFkZE9iamVjdChvLmdldCgpKTsK
KyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0cjxDYW52YXNQcm9ncmFtPiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIFJlZlB0cjxDYW52YXNQcm9n
cmFtPiBvID0gQ2FudmFzUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOworICAgIGFkZE9iamVjdChvLmdl
dCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0cjxDYW52YXNSZW5kZXJidWZmZXI+
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBS
ZWZQdHI8Q2FudmFzUmVuZGVyYnVmZmVyPiBvID0gQ2FudmFzUmVuZGVyYnVmZmVyOjpjcmVhdGUo
dGhpcyk7CisgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNz
UmVmUHRyPENhbnZhc1NoYWRlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGVTaGFk
ZXIodW5zaWduZWQgbG9uZyB0eXBlKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGluY2x1ZGUg
R0xfIGNvbnN0YW50cyBmb3IgaW50ZXJuYWwgdXNlCisgICAgLy8gRklYTUU6IE5lZWQgdG8gZG8g
cGFyYW0gY2hlY2tpbmcgYW5kIHRocm93IGV4Y2VwdGlvbiBpZiBhbiBpbGxlZ2FsIHZhbHVlIGlz
IHBhc3NlZCBpbgorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUjsKKyAgICBpZiAodHlwZSA9PSAweDhC
MzApIC8vIEdMX0ZSQUdNRU5UX1NIQURFUgorICAgICAgICBzaGFkZXJUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjsKKyAgICAgICAgCisgICAgUmVmUHRyPENhbnZhc1No
YWRlcj4gbyA9IENhbnZhc1NoYWRlcjo6Y3JlYXRlKHRoaXMsIHNoYWRlclR5cGUpOworICAgIGFk
ZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKwogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmN1bGxGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKICAgICBtX2NvbnRl
eHQuY3VsbEZhY2UobW9kZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihDYW52YXNC
dWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGJ1ZmZlci0+ZGVsZXRlT2JqZWN0KCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZm
ZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGZyYW1lYnVmZmVyLT5kZWxldGVPYmplY3QoKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBp
ZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwcm9ncmFtLT5kZWxldGVP
YmplY3QoKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVJlbmRl
cmJ1ZmZlcihDYW52YXNSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJl
bmRlcmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlbmRlcmJ1ZmZlci0+ZGVs
ZXRlT2JqZWN0KCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVT
aGFkZXIoQ2FudmFzU2hhZGVyKiBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBzaGFkZXItPmRlbGV0ZU9iamVjdCgpOworfQorCit2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZShDYW52YXNUZXh0dXJlKiB0ZXh0
dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHRl
eHR1cmUtPmRlbGV0ZU9iamVjdCgpOworfQorCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6ZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYykKIHsKICAgICBtX2NvbnRleHQuZGVwdGhG
dW5jKGZ1bmMpOwpAQCAtMjcxLDE1ICs0MTAsMTUgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmRpc2FibGVWZQogfQogCiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpk
cmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgdW5zaWduZWQgbG9uZyBj
b3VudCkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkcmF3QXJyYXlzKHVuc2lnbmVk
IGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkKIHsKICAgICBtX2NvbnRleHQuZHJh
d0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bCh0cnVlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRyYXdFbGVtZW50
cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcg
dHlwZSwgdm9pZCogYXJyYXkpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZHJhd0Vs
ZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQg
bG9uZyB0eXBlLCBsb25nIG9mZnNldCkKIHsKLSAgICBtX2NvbnRleHQuZHJhd0VsZW1lbnRzKG1v
ZGUsIGNvdW50LCB0eXBlLCBhcnJheSk7CisgICAgbV9jb250ZXh0LmRyYXdFbGVtZW50cyhtb2Rl
LCBjb3VudCwgdHlwZSwgb2Zmc2V0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1
ZSk7CiB9CiAKQEAgLTM0MywxNiArNDgyLDI0NSBAQCBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRBdHRyaWJMCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXRBdHRyaWJMb2NhdGlvbihw
cm9ncmFtLCBuYW1lKTsKIH0KIAorYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEJv
b2xlYW4odW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBib29sIHJlc3VsdCA9IG1fY29udGV4
dC5nZXRCb29sZWFuKHBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRl
QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9u
ZyBwbmFtZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0g
bV9jb250ZXh0LmdldEJvb2xlYW52KHBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworaW50IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LmdldEJ1ZmZlclBh
cmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIFJlZlB0cjxDYW52YXNJ
bnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4g
YXJyYXk7Cit9CisKIHVuc2lnbmVkIGxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRF
cnJvcigpCiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXRFcnJvcigpOwogfQogCitmbG9hdCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEZsb2F0KHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7
CisgICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LmdldEZsb2F0KHBuYW1lKTsKKyAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Bh
c3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRG
bG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzRmxvYXRBcnJh
eT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0RmxvYXR2KHBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworaW50IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25n
IHBuYW1lKQoreworICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaSh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Bhc3NS
ZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUpOworICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCitpbnQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnZXRJbnRlZ2VyKHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAg
ZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LmdldEludGVnZXIocG5hbWUpOworICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGFzc1Jl
ZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRJbnRlZ2Vy
dih1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJy
YXkgPSBtX2NvbnRleHQuZ2V0SW50ZWdlcnYocG5hbWUpOworICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCitpbnQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnZXRQcm9ncmFtaShDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25l
ZCBsb25nIHBuYW1lKQoreworICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0UHJvZ3JhbWko
cHJvZ3JhbSwgcG5hbWUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwg
dW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5
ID0gbV9jb250ZXh0LmdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSk7CisgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK1N0cmluZyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKENhbnZhc1Byb2dyYW0q
IHByb2dyYW0pCit7CisgICAgU3RyaW5nIHMgPSBtX2NvbnRleHQuZ2V0UHJvZ3JhbUluZm9Mb2co
cHJvZ3JhbSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1
cm4gczsKK30KKworaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sK
KyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkodGFy
Z2V0LCBwbmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIFJlZlB0cjxDYW52YXNJbnRBcnJh
eT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4g
YXJyYXk7Cit9CisKK2ludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFNoYWRlcmkoQ2Fu
dmFzU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgaW50IHJlc3Vs
dCA9IG1fY29udGV4dC5nZXRTaGFkZXJpKHNoYWRlciwgcG5hbWUpOworICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGFzc1JlZlB0
cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRTaGFkZXJpdihD
YW52YXNTaGFkZXIqIHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBSZWZQdHI8
Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFNoYWRlcml2KHNoYWRlciwgcG5h
bWUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIGFy
cmF5OworfQorCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZv
TG9nKENhbnZhc1NoYWRlciogc2hhZGVyKQoreworICAgIFN0cmluZyBzID0gbV9jb250ZXh0Lmdl
dFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOworICAgIHJldHVybiBzOworfQorCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnZXRTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiBzaGFkZXIpCit7CisgICAgU3RyaW5nIHMg
PSBtX2NvbnRleHQuZ2V0U2hhZGVyU291cmNlKHNoYWRlcik7CisgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4gczsKK30KKwogU3RyaW5nIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFtZSkKIHsKICAgICByZXR1
cm4gbV9jb250ZXh0LmdldFN0cmluZyhuYW1lKTsKIH0KIAorZmxvYXQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHBuYW1lKQoreworICAgIGZsb2F0IHJlc3VsdCA9IG1fY29udGV4dC5nZXRUZXhQYXJh
bWV0ZXJmKHRhcmdldCwgcG5hbWUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIFJlZlB0cjxDYW52YXNGbG9h
dEFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1l
KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJh
eTsKK30KKworaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBpbnQgcmVz
dWx0ID0gbV9jb250ZXh0LmdldFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CisgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQ
YXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRl
eFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQor
eworICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0VGV4UGFy
YW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK2Zsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybWYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikK
K3sKKyAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VW5pZm9ybWYocHJvZ3JhbSwgbG9j
YXRpb24pOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxv
Y2F0aW9uKQoreworICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4
dC5nZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24pOworICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCitsb25nIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2V0VW5pZm9ybWkoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBs
b2NhdGlvbikKK3sKKyAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4dC5nZXRVbmlmb3JtaShwcm9n
cmFtLCBsb2NhdGlvbik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBs
b25nIGxvY2F0aW9uKQoreworICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2Nv
bnRleHQuZ2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uKTsKKyAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworbG9uZyBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihDYW52YXNQcm9ncmFtKiBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC5nZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Cit9CisKK2Zsb2F0IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBs
b25nIHBuYW1lKQoreworICAgIGZsb2F0IHJlc3VsdCA9IG1fY29udGV4dC5nZXRWZXJ0ZXhBdHRy
aWJmKGluZGV4LCBwbmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBp
bmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzRmxvYXRBcnJh
eT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lKTsKKyAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30K
KworbG9uZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmkodW5zaWdu
ZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBsb25nIHJlc3VsdCA9
IG1fY29udGV4dC5nZXRWZXJ0ZXhBdHRyaWJpKGluZGV4LCBwbmFtZSk7CisgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQYXNzUmVm
UHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFZlcnRleEF0
dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAg
UmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRWZXJ0ZXhBdHRyaWJp
dihpbmRleCwgcG5hbWUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cisg
ICAgcmV0dXJuIGFycmF5OworfQorCitsb25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0
VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5h
bWUpCit7CisgICAgbG9uZyByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VmVydGV4QXR0cmliT2Zmc2V0
KGluZGV4LCBwbmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aGlu
dCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKQogewogICAgIG1fY29u
dGV4dC5oaW50KHRhcmdldCwgbW9kZSk7CkBAIC00OTAsMzcxICs4NTgsMzUyIEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsT3AKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCi0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhQ
YXJhbWV0ZXIodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgQ2FudmFzTnVtYmVyQXJy
YXkqIGFycmF5KQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMkQodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIENhbnZh
c0FycmF5KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fY29udGV4dC50ZXhQ
YXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSxhcnJheSk7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2Ug
aWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKKyAgICBlYyA9IDA7CisgICAgbV9jb250ZXh0LnRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnRleFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBu
YW1lLCBkb3VibGUgdmFsdWUpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlw
ZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fY29udGV4
dC50ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworICAgIC8vIEZJWE1FOiBGb3Ig
bm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCisgICAgZWMgPSAwOworICAgIG1fY29u
dGV4dC50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtKGxvbmcgbG9jYXRpb24sIENhbnZhc051bWJl
ckFycmF5KiBhcnJheSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhJbWFnZTJE
KHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBtX2NvbnRl
eHQudW5pZm9ybShsb2NhdGlvbiwgYXJyYXkpOworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGln
bm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCisgICAgZWMgPSAwOworICAgIG1fY29udGV4dC50ZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjApCit2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2ln
bmVkIGxldmVsLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybShsb2NhdGlvbiwg
djApOworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVk
CisgICAgZWMgPSAwOworICAgIG1fY29udGV4dC50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNh
bnZhcywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3Jt
KGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybShsb2NhdGlvbiwgdjAsIHYxKTsKKyAgICAv
LyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0g
MDsKKyAgICBtX2NvbnRleHQudGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB2aWRlbywgZmxpcFks
IHByZW11bHRpcGx5QWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtKGxvbmcgbG9jYXRp
b24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBm
bG9hdCBwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybShsb2NhdGlvbiwgdjAsIHYxLCB2
Mik7CisgICAgbV9jb250ZXh0LnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2
MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRl
eFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKQog
ewotICAgIG1fY29udGV4dC51bmlmb3JtKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CisgICAg
bV9jb250ZXh0LnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjp1bmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCkKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2
ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBDYW52YXNBcnJheSogcGl4ZWxzLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybShsb2NhdGlvbiwgdjApOworICAgIC8v
IEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCisgICAgZWMgPSAw
OworICAgIG1fY29udGV4dC50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dW5pZm9ybShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSkKK3ZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0LnVuaWZvcm0obG9jYXRpb24sIHYwLCB2MSk7
CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKKyAg
ICBlYyA9IDA7CisgICAgbV9jb250ZXh0LnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp1bmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBpbnQg
djIpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fY29udGV4dC51
bmlmb3JtKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBp
Z25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0gMDsKKyAgICBtX2NvbnRleHQudGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlm
b3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBpbnQgdjIsIGludCB2MykKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybShs
b2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9y
ZSBhbnkgZXJyb3JzIHJldHVybmVkCisgICAgZWMgPSAwOworICAgIG1fY29udGV4dC50ZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGNh
bnZhcywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4KGxvbmcgbG9jYXRpb24sIGxvbmcgY291bnQsIGJvb2wgdHJhbnNwb3NlLCBDYW52YXNO
dW1iZXJBcnJheSphcnJheSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQs
IHVuc2lnbmVkIHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBIVE1MVmlkZW9FbGVtZW50
KiB2aWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0g
ICAgbV9jb250ZXh0LnVuaWZvcm1NYXRyaXgobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIGFy
cmF5KTsKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5l
ZAorICAgIGVjID0gMDsKKyAgICBtX2NvbnRleHQudGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB2aWRlbywgZmxpcFksIHByZW11bHRp
cGx5QWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4KGxvbmcgbG9jYXRpb24s
IGJvb2wgdHJhbnNwb3NlLCBjb25zdCBWZWN0b3I8V2ViS2l0Q1NTTWF0cml4Kj4mIGFycmF5KQor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xZihsb25nIGxvY2F0aW9uLCBm
bG9hdCB4KQogewotICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4KGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIGFycmF5KTsKKyAgICBtX2NvbnRleHQudW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeChsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwg
Y29uc3QgV2ViS2l0Q1NTTWF0cml4KiBtYXRyaXgpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KQogewot
ICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIG1hdHJpeCk7
CisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCisg
ICAgaWYgKCF2KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fY29udGV4dC51bmlm
b3JtMWZ2KGxvY2F0aW9uLCB2KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dXNlUHJvZ3JhbShDYW52YXNQ
cm9ncmFtKiBwcm9ncmFtKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0x
aShsb25nIGxvY2F0aW9uLCBpbnQgeCkKIHsKLSAgICBtX2NvbnRleHQudXNlUHJvZ3JhbShwcm9n
cmFtKTsKKyAgICBtX2NvbnRleHQudW5pZm9ybTFpKGxvY2F0aW9uLCB4KTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dmFsaWRhdGVQcm9ncmFtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRB
cnJheSogdikKIHsKLSAgICBtX2NvbnRleHQudmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOworICAg
IC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgorICAgIGlm
ICghdikKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX2NvbnRleHQudW5pZm9ybTFp
dihsb2NhdGlvbiwgdik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYih1bnNpZ25lZCBs
b25nIGluZHgsIGZsb2F0IHYwKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZv
cm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIG1fY29udGV4dC52
ZXJ0ZXhBdHRyaWIoaW5keCwgdjApOworICAgIG1fY29udGV4dC51bmlmb3JtMmYobG9jYXRpb24s
IHgsIHkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCB2MCwgZmxvYXQgdjEpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5p
Zm9ybTJmdihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KQogewotICAgIG1fY29u
dGV4dC52ZXJ0ZXhBdHRyaWIoaW5keCwgdjAsIHYxKTsKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0
byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KKyAgICBpZiAoIXYpCisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgbV9jb250ZXh0LnVuaWZvcm0yZnYobG9jYXRpb24sIHYpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwg
ZmxvYXQgdjEsIGZsb2F0IHYyKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZv
cm0yaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgbV9jb250ZXh0LnZlcnRl
eEF0dHJpYihpbmR4LCB2MCwgdjEsIHYyKTsKKyAgICBtX2NvbnRleHQudW5pZm9ybTJpKGxvY2F0
aW9uLCB4LCB5KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcg
aW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJpdihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRB
cnJheSogdikKIHsKLSAgICBtX2NvbnRleHQudmVydGV4QXR0cmliKGluZHgsIHYwLCB2MSwgdjIs
IHYzKTsKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQg
aW4KKyAgICBpZiAoIXYpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9jb250ZXh0
LnVuaWZvcm0yaXYobG9jYXRpb24sIHYpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIo
dW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNOdW1iZXJBcnJheSogYXJyYXkpCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHopCiB7Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYihpbmR4LCBhcnJh
eSk7CisgICAgbV9jb250ZXh0LnVuaWZvcm0zZihsb2NhdGlvbiwgeCwgeSwgeik7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGxvbmcg
c2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGxvbmcg
c3RyaWRlLCBDYW52YXNOdW1iZXJBcnJheSogYXJyYXkpCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KQog
ewotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5v
cm1hbGl6ZWQsIHN0cmlkZSwgYXJyYXkpOworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93
IGlmIG5vIGFycmF5IHBhc3NlZCBpbgorICAgIGlmICghdikKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBtX2NvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgdik7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3Jt
M2kobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeikKIHsKLSAgICBpZiAoaXNuYW4o
eCkpCi0gICAgICAgIHggPSAwOwotICAgIGlmIChpc25hbih5KSkKLSAgICAgICAgeSA9IDA7Ci0g
ICAgaWYgKGlzbmFuKHdpZHRoKSkKLSAgICAgICAgd2lkdGggPSAxMDA7Ci0gICAgaWYgKGlzbmFu
KGhlaWdodCkpCi0gICAgICAgIGhlaWdodCA9IDEwMDsKLSAgICBtX2NvbnRleHQudmlld3BvcnQo
eCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgbV9jb250ZXh0LnVuaWZvcm0zaShsb2NhdGlvbiwg
eCwgeSwgeik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotLy8g
Tm9uLUdMIGZ1bmN0aW9ucwotUGFzc1JlZlB0cjxDYW52YXNCdWZmZXI+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KQogewotICAgIFJl
ZlB0cjxDYW52YXNCdWZmZXI+IG8gPSBDYW52YXNCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBh
ZGRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0gICAgICAgIAotUGFzc1JlZlB0
cjxDYW52YXNGcmFtZWJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGVGcmFt
ZWJ1ZmZlcigpCi17Ci0gICAgUmVmUHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBvID0gQ2FudmFzRnJh
bWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0
dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBSZWZQdHI8Q2FudmFzVGV4dHVyZT4gbyA9
IENhbnZhc1RleHR1cmU6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRPYmplY3Qoby5nZXQoKSk7Ci0g
ICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzUHJvZ3JhbT4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBSZWZQdHI8Q2FudmFzUHJvZ3Jh
bT4gbyA9IENhbnZhc1Byb2dyYW06OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRPYmplY3Qoby5nZXQo
KSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzUmVuZGVyYnVmZmVyPiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgUmVm
UHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4gbyA9IENhbnZhc1JlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRo
aXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1Jl
ZlB0cjxDYW52YXNTaGFkZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVy
KHVuc2lnbmVkIGxvbmcgdHlwZSkKLXsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBpbmNsdWRlIEdM
XyBjb25zdGFudHMgZm9yIGludGVybmFsIHVzZQotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRvIHBh
cmFtIGNoZWNraW5nIGFuZCB0aHJvdyBleGNlcHRpb24gaWYgYW4gaWxsZWdhbCB2YWx1ZSBpcyBw
YXNzZWQgaW4KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI7Ci0gICAgaWYgKHR5cGUgPT0gMHg4QjMw
KSAvLyBHTF9GUkFHTUVOVF9TSEFERVIKLSAgICAgICAgc2hhZGVyVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFHTUVOVF9TSEFERVI7Ci0gICAgICAgIAotICAgIFJlZlB0cjxDYW52YXNTaGFk
ZXI+IG8gPSBDYW52YXNTaGFkZXI6OmNyZWF0ZSh0aGlzLCBzaGFkZXJUeXBlKTsKLSAgICBhZGRP
YmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpkZWxldGVCdWZmZXIoQ2FudmFzQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYg
KCFidWZmZXIpCisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFz
c2VkIGluCisgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVmZmVyLT5k
ZWxldGVPYmplY3QoKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0
ZUZyYW1lYnVmZmVyKENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAo
IWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZnJhbWVidWZmZXItPmRl
bGV0ZU9iamVjdCgpOworICAgICAgICAKKyAgICBtX2NvbnRleHQudW5pZm9ybTNpdihsb2NhdGlv
biwgdik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJv
Z3JhbSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGYobG9uZyBsb2Nh
dGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykKIHsKLSAgICBpZiAoIXBy
b2dyYW0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBwcm9ncmFtLT5kZWxldGVPYmplY3Qo
KTsKKyAgICBtX2NvbnRleHQudW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVy
YnVmZmVyKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00ZnYobG9uZyBs
b2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSogdikKIHsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikK
KyAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KKyAg
ICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZW5kZXJidWZmZXItPmRlbGV0
ZU9iamVjdCgpOworICAgICAgICAKKyAgICBtX2NvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwg
dik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcihDYW52YXNTaGFkZXIqIHNoYWRlcikK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGkobG9uZyBsb2NhdGlvbiwg
aW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpCiB7Ci0gICAgaWYgKCFzaGFkZXIpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBzaGFkZXItPmRlbGV0ZU9iamVjdCgpOworICAgIG1fY29udGV4
dC51bmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpOworICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxl
dGVUZXh0dXJlKENhbnZhc1RleHR1cmUqIHRleHR1cmUpCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSogdikKIHsK
LSAgICBpZiAoIXRleHR1cmUpCisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8g
YXJyYXkgcGFzc2VkIGluCisgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
dGV4dHVyZS0+ZGVsZXRlT2JqZWN0KCk7Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJy
YXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0KHVuc2lnbmVkIGxvbmcgcG5hbWUpCi17
Ci0gICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXQocG5h
bWUpOworICAgICAgICAKKyAgICBtX2NvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgdik7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4gYXJyYXk7CiB9
CiAKLVBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0QnVmZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHBuYW1lKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYo
bG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIENhbnZhc0Zsb2F0QXJyYXkqIHZhbHVlKQog
ewotICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0QnVm
ZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUpOworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRo
cm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgorICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgbV9jb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRy
YW5zcG9zZSwgdmFsdWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci0g
ICAgcmV0dXJuIGFycmF5OwogfQogCi1QYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBs
b25nIHBuYW1lKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgz
ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIENhbnZhc0Zsb2F0QXJyYXkqIHZhbHVl
KQogewotICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUp
OworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgor
ICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9jb250ZXh0
LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdmFsdWUpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci0gICAgcmV0dXJuIGFycmF5OwogfQogCi1QYXNz
UmVmUHRyPENhbnZhc051bWJlckFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFBy
b2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24s
IGJvb2wgdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5KiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8
Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFByb2dyYW0ocHJvZ3JhbSwg
cG5hbWUpOworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3Nl
ZCBpbgorICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9j
b250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdmFsdWUpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci0gICAgcmV0dXJuIGFycmF5OwogfQog
Ci1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhDYW52
YXNQcm9ncmFtKiBwcm9ncmFtKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVzZVBy
b2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBTdHJpbmcgcyA9IG1fY29udGV4
dC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTsKKyAgICBtX2NvbnRleHQudXNlUHJvZ3JhbShw
cm9ncmFtKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgIHJldHVy
biBzOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBwbmFtZSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2YWxp
ZGF0ZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBSZWZQdHI8Q2FudmFz
TnVtYmVyQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih0
YXJnZXQsIHBuYW1lKTsKKyAgICBtX2NvbnRleHQudmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci0gICAgcmV0dXJuIGFycmF5Owog
fQogCi1QYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdldFNoYWRlcihDYW52YXNTaGFkZXIqIHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSkK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBs
b25nIGluZHgsIGZsb2F0IHYwKQogewotICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gYXJy
YXkgPSBtX2NvbnRleHQuZ2V0U2hhZGVyKHNoYWRlciwgcG5hbWUpOworICAgIG1fY29udGV4dC52
ZXJ0ZXhBdHRyaWIxZihpbmR4LCB2MCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKLSAgICByZXR1cm4gYXJyYXk7CiB9CiAKLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coQ2FudmFzU2hhZGVyKiBzaGFkZXIpCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwg
Q2FudmFzRmxvYXRBcnJheSogdmFsdWVzKQogewotICAgIFN0cmluZyBzID0gbV9jb250ZXh0Lmdl
dFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICBtX2NvbnRleHQudmVydGV4QXR0cmliMWZ2KGlu
ZHgsIHZhbHVlcyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICBy
ZXR1cm4gczsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVy
U291cmNlKENhbnZhc1NoYWRlciogc2hhZGVyKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYx
KQogewotICAgIFN0cmluZyBzID0gbV9jb250ZXh0LmdldFNoYWRlclNvdXJjZShzaGFkZXIpOwor
ICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIyZihpbmR4LCB2MCwgdjEpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci0gICAgcmV0dXJuIHM7CiB9CiAKLQotUGFzc1JlZlB0
cjxDYW52YXNOdW1iZXJBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRUZXhQYXJh
bWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5k
eCwgQ2FudmFzRmxvYXRBcnJheSogdmFsdWVzKQogewotICAgIFJlZlB0cjxDYW52YXNOdW1iZXJB
cnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0VGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUpOwor
ICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgdmFsdWVzKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgIHJldHVybiBhcnJheTsKIH0KIAotUGFzc1Jl
ZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlm
b3JtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGxvbmcgc2l6ZSkKK3Zv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25n
IGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCiB7Ci0gICAgUmVmUHRyPENhbnZh
c051bWJlckFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRVbmlmb3JtKHByb2dyYW0sIGxvY2F0
aW9uLCBzaXplKTsKKyAgICBtX2NvbnRleHQudmVydGV4QXR0cmliM2YoaW5keCwgdjAsIHYxLCB2
Mik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4gYXJy
YXk7CiB9CiAKLWxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRp
b24oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgs
IENhbnZhc0Zsb2F0QXJyYXkqIHZhbHVlcykKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0LmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKLX0KLQotUGFzc1JlZlB0cjxDYW52YXNOdW1i
ZXJBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWIodW5zaWdu
ZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKLXsKLSAgICBSZWZQdHI8Q2FudmFz
TnVtYmVyQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFZlcnRleEF0dHJpYihpbmRleCwgcG5h
bWUpOworICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgdmFsdWVzKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgIHJldHVybiBhcnJheTsKIH0KIAot
Ci12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYodW5z
aWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykK
IHsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAot
ICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbWFn
ZSk7CisgICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxl
dmVsLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBp
bmR4LCBDYW52YXNGbG9hdEFycmF5KiB2YWx1ZXMpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBub3cg
d2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKLSAgICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0
LnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgY2FudmFzKTsKKyAgICBtX2NvbnRleHQudmVydGV4
QXR0cmliNGZ2KGluZHgsIHZhbHVlcyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQg
eW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBsb25nIHNpemUsIHVuc2ln
bmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5z
aWduZWQgbG9uZyBvZmZzZXQpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFu
eSBlcnJvcnMgcmV0dXJuZWQKLSAgICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0LnRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgaW1hZ2UpOworICAg
IG1fY29udGV4dC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6
ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5b2Zm
LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBIVE1MQ2FudmFzRWxlbWVudCogY2Fu
dmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2
aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9u
ZyBoZWlnaHQpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMg
cmV0dXJuZWQKLSAgICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0LnRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgY2FudmFzKTsKKyAgICBpZiAoaXNu
YW4oeCkpCisgICAgICAgIHggPSAwOworICAgIGlmIChpc25hbih5KSkKKyAgICAgICAgeSA9IDA7
CisgICAgaWYgKGlzbmFuKHdpZHRoKSkKKyAgICAgICAgd2lkdGggPSAxMDA7CisgICAgaWYgKGlz
bmFuKGhlaWdodCkpCisgICAgICAgIGhlaWdodCA9IDEwMDsKKyAgICBtX2NvbnRleHQudmlld3Bv
cnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5oCShyZXZpc2lvbiA0ODExMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDkgQEAK
IAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiQ2FudmFzTnVtYmVyQXJyYXkuaCIKKyNpbmNsdWRlICJDYW52
YXNGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiQ2FudmFzSW50QXJyYXkuaCIKKyNpbmNsdWRlICJD
YW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIApAQCAtNDIsNiArNDQsOCBAQCBjbGFzcyBD
YW52YXNSZW5kZXJidWZmZXI7CiBjbGFzcyBDYW52YXNTaGFkZXI7CiBjbGFzcyBDYW52YXNUZXh0
dXJlOwogY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKK2NsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Citj
bGFzcyBJbWFnZURhdGE7CiBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAKICAgICBjbGFzcyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CkBA
IC01MSwyMSArNTUsMjggQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpczNkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgICAgIC8vIEhlbHBl
ciB0byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKKyAgICAg
ICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCisgICAgICAgIGludCBzaXplSW5CeXRl
cyhpbnQgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpOworCiAgICAgICAgIHZvaWQgYWN0aXZlVGV4
dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpOwogICAgICAgICB2b2lkIGF0dGFjaFNoYWRlcihD
YW52YXNQcm9ncmFtKiwgQ2FudmFzU2hhZGVyKik7CiAgICAgICAgIHZvaWQgYmluZEF0dHJpYkxv
Y2F0aW9uKENhbnZhc1Byb2dyYW0qLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcm
IG5hbWUpOwogICAgICAgICB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENh
bnZhc0J1ZmZlciopOwogICAgICAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25n
IHRhcmdldCwgQ2FudmFzRnJhbWVidWZmZXIqKTsKICAgICAgICAgdm9pZCBiaW5kUmVuZGVyYnVm
ZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNSZW5kZXJidWZmZXIqKTsKLSAgICAgICAg
dm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCB0YXJnZXQsIENhbnZhc1RleHR1cmUqKTsKKyAgICAg
ICAgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzVGV4dHVyZSop
OwogICAgICAgICB2b2lkIGJsZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3Vi
bGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKLSAgICAgICAgdm9pZCBibGVuZEVxdWF0aW9uKCB1bnNp
Z25lZCBsb25nIG1vZGUgKTsKKyAgICAgICAgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxv
bmcgbW9kZSk7CiAgICAgICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxv
bmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOwogICAgICAgICB2b2lkIGJsZW5k
RnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcgZGZhY3Rvcik7CiAgICAg
ICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVk
IGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFs
cGhhKTsKLSAgICAgICAgdm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52
YXNOdW1iZXJBcnJheSosIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOwotICAgICAgICB2b2lkIGJ1ZmZl
clN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBDYW52YXNOdW1iZXJB
cnJheSopOwotICAgICAgICB1bnNpZ25lZCBsb25nIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoQ2Fu
dmFzRnJhbWVidWZmZXIqKTsKKworICAgICAgICB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKKyAgICAgICAgdm9pZCBi
dWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNBcnJheSogZGF0YSwgdW5zaWdu
ZWQgbG9uZyB1c2FnZSk7CisgICAgICAgIHZvaWQgYnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25n
IHRhcmdldCwgbG9uZyBvZmZzZXQsIENhbnZhc0FycmF5KiBkYXRhKTsKKworICAgICAgICB1bnNp
Z25lZCBsb25nIGNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpOwog
ICAgICAgICB2b2lkIGNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzayk7CiAgICAgICAgIHZvaWQgY2xl
YXJDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxw
aGEpOwogICAgICAgICB2b2lkIGNsZWFyRGVwdGgoZG91YmxlKTsKQEAgLTc4LDE1ICs4OSwzMiBA
QCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgIAogICAgICAgICB2b2lkIGNvcHlUZXhJ
bWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGlu
dGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKTsKICAgICAgICAgdm9pZCBjb3B5VGV4U3ViSW1h
Z2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25n
IHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBs
b25nIGhlaWdodCk7CisKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNCdWZmZXI+IGNyZWF0ZUJ1
ZmZlcigpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBjcmVhdGVGcmFt
ZWJ1ZmZlcigpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1Byb2dyYW0+IGNyZWF0ZVByb2dy
YW0oKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNSZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRl
cmJ1ZmZlcigpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1NoYWRlcj4gY3JlYXRlU2hhZGVy
KHVuc2lnbmVkIGxvbmcgdHlwZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4g
Y3JlYXRlVGV4dHVyZSgpOworCiAgICAgICAgIHZvaWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBt
b2RlKTsKKworICAgICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihDYW52YXNCdWZmZXIqKTsKKyAgICAg
ICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciopOworICAgICAgICB2
b2lkIGRlbGV0ZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSopOworICAgICAgICB2b2lkIGRlbGV0ZVJl
bmRlcmJ1ZmZlcihDYW52YXNSZW5kZXJidWZmZXIqKTsKKyAgICAgICAgdm9pZCBkZWxldGVTaGFk
ZXIoQ2FudmFzU2hhZGVyKik7CisgICAgICAgIHZvaWQgZGVsZXRlVGV4dHVyZShDYW52YXNUZXh0
dXJlKik7CisgICAgICAgIAogICAgICAgICB2b2lkIGRlcHRoRnVuYyh1bnNpZ25lZCBsb25nKTsK
ICAgICAgICAgdm9pZCBkZXB0aE1hc2soYm9vbCk7CiAgICAgICAgIHZvaWQgZGVwdGhSYW5nZShk
b3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKTsKICAgICAgICAgdm9pZCBkZXRhY2hTaGFkZXIoQ2Fu
dmFzUHJvZ3JhbSosIENhbnZhc1NoYWRlciopOwogICAgICAgICB2b2lkIGRpc2FibGUodW5zaWdu
ZWQgbG9uZyBjYXApOwogICAgICAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNp
Z25lZCBsb25nIGluZGV4KTsKLSAgICAgICAgdm9pZCBkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcg
bW9kZSwgbG9uZyBmaXJzdCwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci0gICAgICAgIHZvaWQgZHJh
d0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWdu
ZWQgbG9uZyB0eXBlLCB2b2lkKiBhcnJheSk7CisgICAgICAgIHZvaWQgZHJhd0FycmF5cyh1bnNp
Z25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpOworICAgICAgICB2b2lkIGRy
YXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2ln
bmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpOworCiAgICAgICAgIHZvaWQgZW5hYmxlKHVuc2ln
bmVkIGxvbmcgY2FwKTsKICAgICAgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNp
Z25lZCBsb25nIGluZGV4KTsKICAgICAgICAgdm9pZCBmaW5pc2goKTsKQEAgLTk3LDggKzEyNSw1
NSBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAo
dW5zaWduZWQgbG9uZyB0YXJnZXQpOwogICAgICAgICAKICAgICAgICAgaW50ICBnZXRBdHRyaWJM
b2NhdGlvbihDYW52YXNQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgICAgICBi
b29sIGdldEJvb2xlYW4odW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUp
OworICAgICAgICBpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+
IGdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHBuYW1lKTsKKwogICAgICAgICB1bnNpZ25lZCBsb25nIGdldEVycm9yKCk7CisKKyAgICAgICAg
ZmxvYXQgZ2V0RmxvYXQodW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8
Q2FudmFzRmxvYXRBcnJheT4gZ2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAg
ICBpbnQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVu
dCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIGludCBnZXRJbnRlZ2VyKHVuc2lnbmVk
IGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBnZXRJbnRl
Z2Vydih1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgaW50IGdldFByb2dyYW1pKENhbnZh
c1Byb2dyYW0qLCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52
YXNJbnRBcnJheT4gZ2V0UHJvZ3JhbWl2KENhbnZhc1Byb2dyYW0qLCB1bnNpZ25lZCBsb25nIHBu
YW1lKTsKKyAgICAgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKENhbnZhc1Byb2dyYW0qKTsK
KyAgICAgICAgaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFy
cmF5PiBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5z
aWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIGludCBnZXRTaGFkZXJpKENhbnZhc1NoYWRlcios
IHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5
PiBnZXRTaGFkZXJpdihDYW52YXNTaGFkZXIqLCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKworICAg
ICAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhDYW52YXNTaGFkZXIqKTsKKworICAgICAgICAv
LyBUQkQKKyAgICAgICAgLy8gdm9pZCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVt
IHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBw
cmVjaXNpb24pOworCisgICAgICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVy
Kik7CiAgICAgICAgIFN0cmluZyBnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKTsKKworICAg
ICAgICBmbG9hdCBnZXRUZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBnZXRU
ZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7
CisgICAgICAgIGludCBnZXRUZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gZ2V0
VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
OworCisgICAgICAgIGZsb2F0IGdldFVuaWZvcm1mKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxv
bmcgbG9jYXRpb24pOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGdldFVu
aWZvcm1mdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKTsKKyAgICAgICAg
bG9uZyBnZXRVbmlmb3JtaShDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKTsK
KyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gZ2V0VW5pZm9ybWl2KENhbnZhc1By
b2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pOworCisgICAgICAgIGxvbmcgZ2V0VW5pZm9y
bUxvY2F0aW9uKENhbnZhc1Byb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgICAg
IGZsb2F0IGdldFZlcnRleEF0dHJpYmYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gZ2V0VmVydGV4
QXR0cmliZnYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAg
ICAgIGxvbmcgZ2V0VmVydGV4QXR0cmliaSh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBs
b25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gZ2V0VmVydGV4
QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisKKyAg
ICAgICAgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5z
aWduZWQgbG9uZyBwbmFtZSk7CisKICAgICAgICAgdm9pZCBoaW50KHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpOwogICAgICAgICBib29sIGlzQnVmZmVyKENhbnZhc0J1
ZmZlciopOwogICAgICAgICBib29sIGlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCk7CkBAIC0x
MTIsNyArMTg3LDggQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICB2b2lkIHBpeGVs
U3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pOwogICAgICAgICB2b2lkIHBv
bHlnb25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKTsKICAgICAgICAgCi0gICAg
ICAgIC8vdm9pZCBnbFJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQg
bG9uZyB0eXBlLCB2b2lkKiBwaXhlbHMpOworICAgICAgICAvLyBUQkQKKyAgICAgICAgLy92b2lk
IHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2
b2lkKiBwaXhlbHMpOwogICAgICAgICAKICAgICAgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGls
ZXIoKTsKICAgICAgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCk7CkBAIC0xMjUsNzIgKzIwMSw4NyBAQCBjbGFzcyBXZWJLaXRD
U1NNYXRyaXg7CiAgICAgICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25n
IGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzayk7CiAgICAgICAgIHZvaWQgc3RlbmNpbE9wKHVuc2ln
bmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcyk7
CiAgICAgICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNp
Z25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3Mp
OwotICAgICAgICB2b2lkIHRleFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBu
YW1lLCBDYW52YXNOdW1iZXJBcnJheSopOwotICAgICAgICB2b2lkIHRleFBhcmFtZXRlcih1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBkb3VibGUgdmFsdWUpOwotICAgICAgICB2b2lk
IHVuaWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjApOwotICAgICAgICB2b2lkIHVuaWZvcm0o
bG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxKTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
KGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpOwotICAgICAgICB2
b2lkIHVuaWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2Miwg
ZmxvYXQgdjMpOwotICAgICAgICB2b2lkIHVuaWZvcm0obG9uZyBsb2NhdGlvbiwgaW50IHYwKTsK
LSAgICAgICAgdm9pZCB1bmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxKTsKLSAg
ICAgICAgdm9pZCB1bmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBpbnQgdjIp
OwotICAgICAgICB2b2lkIHVuaWZvcm0obG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGlu
dCB2MiwgaW50IHYzKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtKGxvbmcgbG9jYXRpb24sIENhbnZh
c051bWJlckFycmF5Kik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeChsb25nIGxvY2F0aW9u
LCBsb25nIGNvdW50LCBib29sIHRyYW5zcG9zZSwgQ2FudmFzTnVtYmVyQXJyYXkqKTsKLSAgICAg
ICAgdm9pZCB1bmlmb3JtTWF0cml4KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBjb25z
dCBWZWN0b3I8V2ViS2l0Q1NTTWF0cml4Kj4mKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4
KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBjb25zdCBXZWJLaXRDU1NNYXRyaXgqKTsK
KworICAgICAgICB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZl
bCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIENhbnZhc0FycmF5
KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB0ZXhJbWFnZTJEKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5z
aWduZWQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1
bnNpZ25lZCB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgICAg
ICB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB0ZXhJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11
bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB0ZXhJbWFnZTJEKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLAor
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHBhcmFtKTsKKyAgICAgICAgdm9pZCB0ZXhQ
YXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCBwYXJhbSk7CisK
KyAgICAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2
ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBDYW52YXNBcnJh
eSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdGV4U3ViSW1hZ2UyRCh1
bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25l
ZCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1h
dCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHRleFN1YkltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5z
aWduZWQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBI
VE1MVmlkZW9FbGVtZW50KiB2aWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
ZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgICAg
IHZvaWQgdW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpOworICAgICAgICB2b2lkIHVu
aWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSogdik7CisgICAgICAgIHZv
aWQgdW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB4KTsKKyAgICAgICAgdm9pZCB1bmlmb3Jt
MWl2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlm
b3JtMmYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTJmdihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KTsKKyAgICAgICAgdm9pZCB1
bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7Cisg
ICAgICAgIHZvaWQgdW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2
KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBp
bnQgeik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRB
cnJheSogdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOworICAgICAgICB2b2lkIHVuaWZvcm00ZnYobG9u
ZyBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSogdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTRp
KGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KTsKKyAgICAgICAg
dm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBDYW52
YXNGbG9hdEFycmF5KiB2YWx1ZSk7CisgICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihsb25n
IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgQ2FudmFzRmxvYXRBcnJheSogdmFsdWUpOworICAg
ICAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2Us
IENhbnZhc0Zsb2F0QXJyYXkqIHZhbHVlKTsKKwogICAgICAgICB2b2lkIHVzZVByb2dyYW0oQ2Fu
dmFzUHJvZ3JhbSopOwogICAgICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShDYW52YXNQcm9ncmFt
Kik7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQg
djApOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0
IHYwLCBmbG9hdCB2MSk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcg
aW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2Mik7Ci0gICAgICAgIHZvaWQgdmVydGV4
QXR0cmliKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2Miwg
ZmxvYXQgdjMpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZHgs
IENhbnZhc051bWJlckFycmF5Kik7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcih1
bnNpZ25lZCBsb25nIGluZHgsIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5v
cm1hbGl6ZWQsIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCBDYW52YXNOdW1iZXJBcnJheSopOwotICAg
ICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKLSAgICAgICAgLy8gTm9uLUdMIGZ1bmN0aW9ucwotICAg
ICAgICBQYXNzUmVmUHRyPENhbnZhc0J1ZmZlcj4gY3JlYXRlQnVmZmVyKCk7Ci0gICAgICAgIFBh
c3NSZWZQdHI8Q2FudmFzRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgICAg
IFBhc3NSZWZQdHI8Q2FudmFzUHJvZ3JhbT4gY3JlYXRlUHJvZ3JhbSgpOyAgICAgICAgICAgICAg
ICAgICAgIC8vIHJlcGxhY2VzIGdsQ3JlYXRlUHJvZ3JhbQotICAgICAgICBQYXNzUmVmUHRyPENh
bnZhc1JlbmRlcmJ1ZmZlcj4gY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgICAgIFBhc3NSZWZQ
dHI8Q2FudmFzU2hhZGVyPiBjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyB0eXBlKTsgIC8vIHJl
cGxhY2VzIGdsQ3JlYXRlU2hhZGVyCi0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4g
Y3JlYXRlVGV4dHVyZSgpOwotCi0gICAgICAgIHZvaWQgZGVsZXRlQnVmZmVyKENhbnZhc0J1ZmZl
ciopOyAgICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbERlbGV0ZUJ1ZmZlcnMKLSAgICAgICAg
dm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciopOyAgICAgIC8vIHJlcGxh
Y2VzIGdsRGVsZXRlRnJhbWVidWZmZXJzCi0gICAgICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShDYW52
YXNQcm9ncmFtKik7ICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbERlbGV0ZVByb2dyYW0KLSAg
ICAgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoQ2FudmFzUmVuZGVyYnVmZmVyKik7ICAgIC8v
IHJlcGxhY2VzIGdsRGVsZXRlUmVuZGVyYnVmZmVycwotICAgICAgICB2b2lkIGRlbGV0ZVNoYWRl
cihDYW52YXNTaGFkZXIqKTsgICAgICAgICAgICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVTaGFk
ZXIKLSAgICAgICAgdm9pZCBkZWxldGVUZXh0dXJlKENhbnZhc1RleHR1cmUqKTsgICAgICAgICAg
ICAgIC8vIHJlcGxhY2VzIGdsRGVsZXRlVGV4dHVyZXMKLSAgICAgICAgCi0gICAgICAgIFBhc3NS
ZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGdldCh1bnNpZ25lZCBsb25nIHBuYW1lKTsgICAgICAv
LyByZXBsYWNlcyBnbEdldEJvb2xlYW52Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzTnVtYmVy
QXJyYXk+IGdldEJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBwbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYKLSAgICAgICAg
UGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpOyAvLyByZXBsYWNlcyBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGdldFBy
b2dyYW0oQ2FudmFzUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyByZXBsYWNlcyBn
bEdldFByb2dyYW1pdgotICAgICAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coQ2FudmFzUHJv
Z3JhbSopOyAvLyByZXBsYWNlcyBnbEdldFByb2dyYW1JbmZvTG9nCi0gICAgICAgIFBhc3NSZWZQ
dHI8Q2FudmFzTnVtYmVyQXJyYXk+IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXYKLSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4g
Z2V0U2hhZGVyKENhbnZhc1NoYWRlciosIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyByZXBsYWNl
cyBnbEdldFNoYWRlcml2Ci0gICAgICAgIFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKENhbnZhc1No
YWRlciopOwotICAgICAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKENhbnZhc1NoYWRlciopOwor
ICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCk7
CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2FudmFz
RmxvYXRBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25l
ZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHkpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJp
YjJmdih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zsb2F0QXJyYXkqIHZhbHVlcyk7CisgICAg
ICAgIHZvaWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB6KTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9u
ZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5KiB2YWx1ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0
dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxv
YXQgdyk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwg
Q2FudmFzRmxvYXRBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJv
b2wgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAKLSAgICAgICAgUGFzc1JlZlB0
cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0VGV4UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRUZXhQYXJhbWV0ZXJmdgot
ICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXRVbmlmb3JtKENhbnZhc1By
b2dyYW0qLCBsb25nIGxvY2F0aW9uLCBsb25nIHNpemUpOyAvLyByZXBsYWNlcyBnbEdldFVuaWZv
cm1mdgotICAgICAgICBsb25nIGdldFVuaWZvcm1Mb2NhdGlvbihDYW52YXNQcm9ncmFtKiwgY29u
c3QgU3RyaW5nJiBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRVbmlmb3JtTG9jYXRpb24KLSAgICAg
ICAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0VmVydGV4QXR0cmliKHVuc2lnbmVk
IGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyByZXBsYWNlcyBnbEdldFZlcnRl
eEF0dHJpYmZ2Ci0gICAgICAgIAotICAgICAgICB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICAgICAgdm9pZCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAg
ICAgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVu
c2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgICAgIHZv
aWQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25l
ZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBI
VE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQg
dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KTsKIAogICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0
M0QoKSB7IHJldHVybiAmbV9jb250ZXh0OyB9CiAgICAgCiAgICAgICAgIHZvaWQgcmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNh
dGlvbiBhYm91dCBwYWludCBldmVudHMuCisgICAgICAgIHZvaWQgYmVnaW5QYWludCgpOworICAg
ICAgICB2b2lkIGVuZFBhaW50KCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlbW92ZU9iamVj
dChDYW52YXNPYmplY3QqKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5k
IGNsYXNzIENhbnZhc09iamVjdDsKICAgICAgICAgdm9pZCBhZGRPYmplY3QoQ2FudmFzT2JqZWN0
Kik7CiAgICAgICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwogCkBAIC0yMDQs
NiArMjk1LDkgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICAKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0QgbV9jb250ZXh0OwogICAgICAgICBib29sIG1fbmVlZHNVcGRhdGU7Cisg
ICAgICAgIGJvb2wgbV9tYXJrZWRDYW52YXNEaXJ0eTsKKyAgICAgICAgLy8gRklYTUU6IEkgdGhp
bmsgdGhpcyBpcyBicm9rZW4gLS0gaXQgZG9lcyBub3QgaW5jcmVtZW50IGFueQorICAgICAgICAv
LyByZWZlcmVuY2UgY291bnRzLCBzbyBtYXkgcmVmZXIgdG8gZGVzdHJveWVkIG9iamVjdHMuCiAg
ICAgICAgIEhhc2hTZXQ8Q2FudmFzT2JqZWN0Kj4gbV9jYW52YXNPYmplY3RzOwogICAgIH07CiAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC5pZGwJKHJldmlzaW9uIDQ4MTEwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNiArNDU4LDggQEAgbW9k
dWxlIGh0bWwgewogCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiAgPSAweDA1MDY7CiAKKyAgICAgICAgbG9uZyBzaXplSW5CeXRlcyhpbiB1
bnNpZ25lZCBsb25nIHR5cGUpIHJhaXNlcyhET01FeGNlcHRpb24pOworCiAgICAgICAgIHZvaWQg
ICAgICAgICBhY3RpdmVUZXh0dXJlKGluIHVuc2lnbmVkIGxvbmcgdGV4dHVyZSk7CiAgICAgICAg
IHZvaWQgICAgICAgICBhdHRhY2hTaGFkZXIoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiBD
YW52YXNTaGFkZXIgc2hhZGVyKTsKICAgICAgICAgdm9pZCAgICAgICAgIGJpbmRBdHRyaWJMb2Nh
dGlvbihpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGlu
IERPTVN0cmluZyBuYW1lKTsKQEAgLTQ3MCw5ICs0NzIsMTUgQEAgbW9kdWxlIGh0bWwgewogICAg
ICAgICB2b2lkICAgICAgICAgYmxlbmRFcXVhdGlvblNlcGFyYXRlKGluIHVuc2lnbmVkIGxvbmcg
bW9kZVJHQiwgaW4gdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOwogICAgICAgICB2b2lkICAgICAg
ICAgYmxlbmRGdW5jKGluIHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgaW4gdW5zaWduZWQgbG9uZyBk
ZmFjdG9yKTsKICAgICAgICAgdm9pZCAgICAgICAgIGJsZW5kRnVuY1NlcGFyYXRlKGluIHVuc2ln
bmVkIGxvbmcgc3JjUkdCLCBpbiB1bnNpZ25lZCBsb25nIGRzdFJHQiwgaW4gdW5zaWduZWQgbG9u
ZyBzcmNBbHBoYSwgaW4gdW5zaWduZWQgbG9uZyBkc3RBbHBoYSk7Ci0gICAgICAgIFtDdXN0b21d
IHZvaWQgYnVmZmVyRGF0YShpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gQ2FudmFzQnl0ZUFy
cmF5IGRhdGEsIGluIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOwotICAgICAgICBbQ3VzdG9tXSB2b2lk
IGJ1ZmZlclN1YkRhdGEoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIGxvbmcgb2Zmc2V0LCBp
biBDYW52YXNCeXRlQXJyYXkgZGF0YSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhpbiBDYW52YXNGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CisJLy8gU3Vw
cG9ydGVkIGZvcm1zOgorICAgICAgICAvLyAgIHZvaWQgYnVmZmVyRGF0YSAoaW4gR0xlbnVtIHRh
cmdldCwgaW4gR0xzaXplaSBzaXplLCBpbiBHTGVudW0gdXNhZ2UpOworICAgICAgICAvLyAgIHZv
aWQgYnVmZmVyRGF0YSAoaW4gR0xlbnVtIHRhcmdldCwgaW4gQ2FudmFzQXJyYXkgZGF0YSwgaW4g
R0xlbnVtIHVzYWdlKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBidWZmZXJEYXRhKCk7CisgICAg
ICAgIC8vIFN1cHBvcnRlZCBmb3JtczoKKyAgICAgICAgLy8gICB2b2lkIGJ1ZmZlclN1YkRhdGEg
KGluIEdMZW51bSB0YXJnZXQsIGluIEdMc2l6ZWlwdHIgb2Zmc2V0LCBpbiBDYW52YXNBcnJheSBk
YXRhKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBidWZmZXJTdWJEYXRhKCk7CisKKyAgICAgICAg
dW5zaWduZWQgbG9uZyBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGluIHVuc2lnbmVkIGxvbmcgdGFy
Z2V0KTsKICAgICAgICAgdm9pZCAgICAgICAgIGNsZWFyKGluIHVuc2lnbmVkIGxvbmcgbWFzayk7
CiAgICAgICAgIHZvaWQgICAgICAgICBjbGVhckNvbG9yKGluIGRvdWJsZSByZWQsIGluIGRvdWJs
ZSBncmVlbiwgaW4gZG91YmxlIGJsdWUsIGluIGRvdWJsZSBhbHBoYSk7CiAgICAgICAgIHZvaWQg
ICAgICAgICBjbGVhckRlcHRoKGluIGRvdWJsZSBkZXB0aCk7CkBAIC00ODUsMTUgKzQ5MywzMyBA
QCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIAogICAgICAgICB2b2lkICAgICAgICAgY29weVRleElt
YWdlMkQoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIGxvbmcgbGV2ZWwsIGluIHVuc2lnbmVk
IGxvbmcgaW50ZXJuYWxmb3JtYXQsIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiB1bnNpZ25lZCBs
b25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCwgaW4gbG9uZyBib3JkZXIpOwogICAg
ICAgICB2b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoaW4gdW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGluIGxvbmcgbGV2ZWwsIGluIGxvbmcgeG9mZnNldCwgaW4gbG9uZyB5b2Zmc2V0LCBpbiBs
b25nIHgsIGluIGxvbmcgeSwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9u
ZyBoZWlnaHQpOworCisgICAgICAgIENhbnZhc0J1ZmZlciBjcmVhdGVCdWZmZXIoKTsKKyAgICAg
ICAgQ2FudmFzRnJhbWVidWZmZXIgY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAgICAgQ2FudmFz
UHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIENhbnZhc1JlbmRlcmJ1ZmZlciBjcmVh
dGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgQ2FudmFzU2hhZGVyIGNyZWF0ZVNoYWRlcihpbiB1
bnNpZ25lZCBsb25nIHR5cGUpOworICAgICAgICBDYW52YXNUZXh0dXJlIGNyZWF0ZVRleHR1cmUo
KTsKKwogICAgICAgICB2b2lkICAgICAgICAgY3VsbEZhY2UoaW4gdW5zaWduZWQgbG9uZyBtb2Rl
KTsKKworICAgICAgICB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVyKGluIENhbnZhc0J1ZmZlciBi
dWZmZXIpOworICAgICAgICB2b2lkICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIoaW4gQ2FudmFz
RnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOworICAgICAgICB2b2lkICAgICAgICAgZGVsZXRlUHJv
Z3JhbShpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0pOworICAgICAgICB2b2lkICAgICAgICAgZGVs
ZXRlUmVuZGVyYnVmZmVyKGluIENhbnZhc1JlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOworICAg
ICAgICB2b2lkICAgICAgICAgZGVsZXRlU2hhZGVyKGluIENhbnZhc1NoYWRlciBzaGFkZXIpOwor
ICAgICAgICB2b2lkICAgICAgICAgZGVsZXRlVGV4dHVyZShpbiBDYW52YXNUZXh0dXJlIHRleHR1
cmUpOworCiAgICAgICAgIHZvaWQgICAgICAgICBkZXB0aEZ1bmMoaW4gdW5zaWduZWQgbG9uZyBm
dW5jKTsKICAgICAgICAgdm9pZCAgICAgICAgIGRlcHRoTWFzayhpbiBib29sZWFuIGZsYWcpOwor
ICAgICAgICAvLyBGSVhNRTogdGhpcyBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgV2ViR0wgc3Bl
YyAoZGVwdGhSYW5nZWYpCiAgICAgICAgIHZvaWQgICAgICAgICBkZXB0aFJhbmdlKGluIGRvdWJs
ZSB6TmVhciwgaW4gZG91YmxlIHpGYXIpOwogICAgICAgICB2b2lkICAgICAgICAgZGV0YWNoU2hh
ZGVyKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gQ2FudmFzU2hhZGVyIHNoYWRlcik7CiAg
ICAgICAgIHZvaWQgICAgICAgICBkaXNhYmxlKGluIHVuc2lnbmVkIGxvbmcgY2FwKTsKICAgICAg
ICAgdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbiB1bnNpZ25lZCBsb25n
IGluZGV4KTsKICAgICAgICAgdm9pZCAgICAgICAgIGRyYXdBcnJheXMoaW4gdW5zaWduZWQgbG9u
ZyBtb2RlLCBpbiBsb25nIGZpcnN0LCBpbiB1bnNpZ25lZCBsb25nIGNvdW50KTsKLSAgICAgICAg
W0N1c3RvbV0gdm9pZCBkcmF3RWxlbWVudHMoaW4gdW5zaWduZWQgbG9uZyBtb2RlLCBpbiB1bnNp
Z25lZCBsb25nIHR5cGUsIENhbnZhc0J5dGVBcnJheSk7CisgICAgICAgIHZvaWQgICAgICAgICBk
cmF3RWxlbWVudHMgKGluIHVuc2lnbmVkIGxvbmcgbW9kZSwgaW4gbG9uZyBjb3VudCwgaW4gdW5z
aWduZWQgbG9uZyB0eXBlLCBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKICAgICAgICAgdm9p
ZCAgICAgICAgIGVuYWJsZShpbiB1bnNpZ25lZCBsb25nIGNhcCk7CiAgICAgICAgIHZvaWQgICAg
ICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbiB1bnNpZ25lZCBsb25nIGluZGV4KTsKICAg
ICAgICAgdm9pZCAgICAgICAgIGZpbmlzaCgpOwpAQCAtNTAzLDEyICs1MjksNjEgQEAgbW9kdWxl
IGh0bWwgewogICAgICAgICB2b2lkICAgICAgICAgZnJvbnRGYWNlKGluIHVuc2lnbmVkIGxvbmcg
bW9kZSk7CiAgICAgICAgIHZvaWQgICAgICAgICBnZW5lcmF0ZU1pcG1hcChpbiB1bnNpZ25lZCBs
b25nIHRhcmdldCk7CiAgICAgICAgIAotICAgICAgICAvL3ZvaWQgICAgICAgICBnZXRBdHRhY2hl
ZFNoYWRlcnMoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNpZ25lZCBsb25nIG1heGNv
dW50LCBpbiB1bnNpZ25lZCBsb25nKiBjb3VudCwgaW4gdW5zaWduZWQgbG9uZyogc2hhZGVycyk7
Ci0gICAgICAgIAorICAgICAgICAvLyBGSVhNRTogdGhlc2UgbmVlZCB0byBiZSBhZGRlZCBwZXIg
dGhlIFdlYkdMIHNwZWMKKyAgICAgICAgLy8gQ2FudmFzQWN0aXZlSW5mbyBnZXRBY3RpdmVBdHRy
aWIoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCk7CisgICAgICAgIC8vIENhbnZhc0FjdGl2
ZUluZm8gZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsKKyAg
ICAgICAgLy8gQ2FudmFzU2hhZGVyQXJyYXkgZ2xHZXRBdHRhY2hlZFNoYWRlcnMoR0x1aW50IHBy
b2dyYW0pOworCiAgICAgICAgIGludCAgICAgICAgICBnZXRBdHRyaWJMb2NhdGlvbihpbiBDYW52
YXNQcm9ncmFtIHByb2dyYW0sIGluIERPTVN0cmluZyBuYW1lKTsKKworICAgICAgICBib29sZWFu
IGdldEJvb2xlYW4oaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIENhbnZhc1Vuc2ln
bmVkQnl0ZUFycmF5IGdldEJvb2xlYW52KGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAg
ICBsb25nIGdldEJ1ZmZlclBhcmFtZXRlcmkoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVu
c2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBDYW52YXNJbnRBcnJheSBnZXRCdWZmZXJQYXJh
bWV0ZXJpdihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7
CisKICAgICAgICAgdW5zaWduZWQgbG9uZyBnZXRFcnJvcigpOworCisgICAgICAgIGZsb2F0IGdl
dEZsb2F0KGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBDYW52YXNGbG9hdEFycmF5
IGdldEZsb2F0dihpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgbG9uZyBnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1
bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAg
ICBDYW52YXNJbnRBcnJheSBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihpbiB1
bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCBpbiB1bnNp
Z25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgbG9uZyBnZXRJbnRlZ2VyKGluIHVuc2lnbmVkIGxv
bmcgcG5hbWUpOworICAgICAgICBDYW52YXNJbnRBcnJheSBnZXRJbnRlZ2VydihpbiB1bnNpZ25l
ZCBsb25nIHBuYW1lKTsKKyAgICAgICAgbG9uZyBnZXRQcm9ncmFtaShpbiBDYW52YXNQcm9ncmFt
IHByb2dyYW0sIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBDYW52YXNJbnRBcnJh
eSBnZXRQcm9ncmFtaXYoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNpZ25lZCBsb25n
IHBuYW1lKTsKKyAgICAgICAgRE9NU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKGluIENhbnZhc1By
b2dyYW0gcHJvZ3JhbSk7CisgICAgICAgIGxvbmcgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShp
biB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAg
IENhbnZhc0ludEFycmF5IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KGluIHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgbG9uZyBnZXRTaGFk
ZXJpKGluIENhbnZhc1NoYWRlciBzaGFkZXIsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAg
ICAgICBDYW52YXNJbnRBcnJheSBnZXRTaGFkZXJpdihpbiBDYW52YXNTaGFkZXIgc2hhZGVyLCBp
biB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKworICAgICAgICBET01TdHJpbmcgICAgZ2V0U2hhZGVy
SW5mb0xvZyhpbiBDYW52YXNTaGFkZXIgc2hhZGVyKTsKKworICAgICAgICAvLyBUQkQKKyAgICAg
ICAgLy8gdm9pZCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUs
IEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOwor
CiAgICAgICAgIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoaW4gQ2FudmFzU2hhZGVyIHNo
YWRlcik7CiAgICAgICAgIERPTVN0cmluZyAgICBnZXRTdHJpbmcoaW4gdW5zaWduZWQgbG9uZyBu
YW1lKTsKKworICAgICAgICBmbG9hdCBnZXRUZXhQYXJhbWV0ZXJmKGluIHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgQ2FudmFzRmxvYXRBcnJh
eSBnZXRUZXhQYXJhbWV0ZXJmdihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQg
bG9uZyBwbmFtZSk7CisgICAgICAgIGxvbmcgZ2V0VGV4UGFyYW1ldGVyaShpbiB1bnNpZ25lZCBs
b25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIENhbnZhc0ludEFy
cmF5IGdldFRleFBhcmFtZXRlcml2KGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25l
ZCBsb25nIHBuYW1lKTsKKworICAgICAgICBmbG9hdCBnZXRVbmlmb3JtZihpbiBDYW52YXNQcm9n
cmFtIHByb2dyYW0sIGluIGxvbmcgbG9jYXRpb24pOworICAgICAgICBDYW52YXNGbG9hdEFycmF5
IGdldFVuaWZvcm1mdihpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIGxvbmcgbG9jYXRpb24p
OworICAgICAgICBsb25nIGdldFVuaWZvcm1pKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4g
bG9uZyBsb2NhdGlvbik7CisgICAgICAgIENhbnZhc0ludEFycmF5IGdldFVuaWZvcm1pdihpbiBD
YW52YXNQcm9ncmFtIHByb2dyYW0sIGluIGxvbmcgbG9jYXRpb24pOworICAgICAgICAKKyAgICAg
ICAgbG9uZyBnZXRVbmlmb3JtTG9jYXRpb24oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiBE
T01TdHJpbmcgbmFtZSk7CisKKyAgICAgICAgZmxvYXQgZ2V0VmVydGV4QXR0cmliZihpbiB1bnNp
Z25lZCBsb25nIGluZGV4LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgQ2FudmFz
RmxvYXRBcnJheSBnZXRWZXJ0ZXhBdHRyaWJmdihpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiB1
bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJpKGluIHVu
c2lnbmVkIGxvbmcgaW5kZXgsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBDYW52
YXNJbnRBcnJheSBnZXRWZXJ0ZXhBdHRyaWJpdihpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiB1
bnNpZ25lZCBsb25nIHBuYW1lKTsKKworICAgICAgICBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNl
dChpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKwogICAg
ICAgICB2b2lkICAgICAgICAgaGludChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWdu
ZWQgbG9uZyBtb2RlKTsKICAgICAgICAgYm9vbGVhbiAgICAgIGlzQnVmZmVyKGluIENhbnZhc0J1
ZmZlciBidWZmZXIpOwogICAgICAgICBib29sZWFuICAgICAgaXNFbmFibGVkKGluIHVuc2lnbmVk
IGxvbmcgY2FwKTsKQEAgLTUyMiw2ICs1OTcsNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIHZv
aWQgICAgICAgICBwaXhlbFN0b3JlaShpbiB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbiBsb25nIHBh
cmFtKTsKICAgICAgICAgdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoaW4gZG91YmxlIGZhY3Rv
ciwgaW4gZG91YmxlIHVuaXRzKTsKICAgICAgICAgCisgICAgICAgIC8vIEZJWE1FCiAgICAgICAg
IC8vdm9pZCAgICAgICAgIHJlYWRQaXhlbHMoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBpbiB1bnNpZ25lZCBsb25n
IGZvcm1hdCwgaW4gdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBwaXhlbHMpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCAgICAgICAgIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwpAQCAtNTM1LDYx
ICs2MTEsNzcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICB2b2lkICAgICAgICAgc3RlbmNpbE1h
c2tTZXBhcmF0ZShpbiB1bnNpZ25lZCBsb25nIGZhY2UsIGluIHVuc2lnbmVkIGxvbmcgbWFzayk7
CiAgICAgICAgIHZvaWQgICAgICAgICBzdGVuY2lsT3AoaW4gdW5zaWduZWQgbG9uZyBmYWlsLCBp
biB1bnNpZ25lZCBsb25nIHpmYWlsLCBpbiB1bnNpZ25lZCBsb25nIHpwYXNzKTsKICAgICAgICAg
dm9pZCAgICAgICAgIHN0ZW5jaWxPcFNlcGFyYXRlKGluIHVuc2lnbmVkIGxvbmcgZmFjZSwgaW4g
dW5zaWduZWQgbG9uZyBmYWlsLCBpbiB1bnNpZ25lZCBsb25nIHpmYWlsLCBpbiB1bnNpZ25lZCBs
b25nIHpwYXNzKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB0ZXhQYXJhbWV0ZXIoaW4gdW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGluIENhbnZhc051bWJlckFy
cmF5IHBhcmFtcyk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybWkoaW4gbG9uZyBsb2Nh
dGlvbiwgaW4gQ2FudmFzTnVtYmVyQXJyYXkgcGFyYW1zKTsKLSAgICAgICAgW0N1c3RvbV0gdm9p
ZCB1bmlmb3JtZihpbiBsb25nIGxvY2F0aW9uLCBpbiBDYW52YXNOdW1iZXJBcnJheSBwYXJhbXMp
OwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm1NYXRyaXgoaW4gbG9uZyBsb2NhdGlvbiwg
aW4gbG9uZyBjb3VudCwgaW4gYm9vbGVhbiB0cmFuc3Bvc2UsIGluIENhbnZhc051bWJlckFycmF5
IHBhcmFtcyk7CisKKyAgICAgICAgdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmYoaW4gdW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGluIGZsb2F0IHBhcmFtKTsK
KyAgICAgICAgdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmkoaW4gdW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGluIGxvbmcgcGFyYW0pOworCisgICAgICAgIC8v
IFN1cHBvcnRlZCBmb3JtczoKKyAgICAgICAgLy8gICB2b2lkIHRleEltYWdlMkQoaW4gR0xlbnVt
IHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgaW4gR0xz
aXplaSB3aWR0aCwgaW4gR0xzaXplaSBoZWlnaHQsIAorICAgICAgICAvLyAgICAgICAgICAgICAg
ICAgICBpbiBHTGludCBib3JkZXIsIGluIEdMZW51bSBmb3JtYXQsIGluIEdMZW51bSB0eXBlLCBp
biBDYW52YXNBcnJheSBwaXhlbHMpOworICAgICAgICAvLyAgIHZvaWQgdGV4SW1hZ2UyRChpbiBH
TGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gR0xlbnVtIGludGVybmFsZm9ybWF0LCBp
biBHTHNpemVpIHdpZHRoLCBpbiBHTHNpemVpIGhlaWdodCwgCisgICAgICAgIC8vICAgICAgICAg
ICAgICAgICAgIGluIEdMaW50IGJvcmRlciwgaW4gR0xlbnVtIGZvcm1hdCwgaW4gR0xlbnVtIHR5
cGUsIGluIEltYWdlRGF0YSBwaXhlbHMpOworICAgICAgICAvLyAgIHZvaWQgdGV4SW1hZ2UyRChp
biBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gSFRNTEltYWdlRWxlbWVudCBpbWFn
ZSwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgW09wdGlvbmFsXSBpbiBHTGJvb2xlYW4g
ZmxpcFksIFtPcHRpb25hbF0gaW4gcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgICAgIC8vICAgdm9p
ZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBpbiBIVE1MQ2Fu
dmFzRWxlbWVudCBjYW52YXMsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIFtPcHRpb25h
bF0gaW4gR0xib29sZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGluIHByZW11bHRpcGx5QWxwaGEpOwor
ICAgICAgICAvLyAgIHZvaWQgdGV4SW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBs
ZXZlbCwgaW4gSFRNTFZpZGVvRWxlbWVudCB2aWRlbywKKyAgICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgW09wdGlvbmFsXSBpbiBHTGJvb2xlYW4gZmxpcFksIFtPcHRpb25hbF0gaW4gcHJlbXVs
dGlwbHlBbHBoYSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdGV4SW1hZ2UyRCgpOworCisgICAg
ICAgIC8vIFN1cHBvcnRlZCBmb3JtczoKKyAgICAgICAgLy8gICB2b2lkIHRleFN1YkltYWdlMkQo
aW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEdMaW50IHhvZmZzZXQsIGluIEdM
aW50IHlvZmZzZXQsIAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBpbiBHTHNpemVp
IHdpZHRoLCBpbiBHTHNpemVpIGhlaWdodCwgCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgIGluIEdMZW51bSBmb3JtYXQsIGluIEdMZW51bSB0eXBlLCBpbiBDYW52YXNBcnJheSBwaXhl
bHMpOworICAgICAgICAvLyAgIHZvaWQgdGV4U3ViSW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBp
biBHTGludCBsZXZlbCwgaW4gR0xpbnQgeG9mZnNldCwgaW4gR0xpbnQgeW9mZnNldCwgCisgICAg
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6ZWkg
aGVpZ2h0LCAKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgaW4gR0xlbnVtIGZvcm1h
dCwgaW4gR0xlbnVtIHR5cGUsIGluIEltYWdlRGF0YSBwaXhlbHMpOworICAgICAgICAvLyAgIHZv
aWQgdGV4U3ViSW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gR0xp
bnQgeG9mZnNldCwgaW4gR0xpbnQgeW9mZnNldCwgCisgICAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgIGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVpZ2h0LCBpbiBIVE1MSW1hZ2VF
bGVtZW50IGltYWdlLAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxd
IEdMYm9vbGVhbiBmbGlwWSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsKKyAgICAg
ICAgLy8gICB2b2lkIHRleFN1YkltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2
ZWwsIGluIEdMaW50IHhvZmZzZXQsIGluIEdMaW50IHlvZmZzZXQsIAorICAgICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICBpbiBHTHNpemVpIHdpZHRoLCBpbiBHTHNpemVpIGhlaWdodCwgaW4g
SFRNTENhbnZhc0VsZW1lbnQgY2FudmFzLAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICBbT3B0aW9uYWxdIEdMYm9vbGVhbiBmbGlwWSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBseUFs
cGhhKTsKKyAgICAgICAgLy8gICB2b2lkIHRleFN1YkltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwg
aW4gR0xpbnQgbGV2ZWwsIGluIEdMaW50IHhvZmZzZXQsIGluIEdMaW50IHlvZmZzZXQsIAorICAg
ICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBpbiBHTHNpemVpIHdpZHRoLCBpbiBHTHNpemVp
IGhlaWdodCwgaW4gSFRNTFZpZGVvRWxlbWVudCB2aWRlbywKKyAgICAgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgW09wdGlvbmFsXSBHTGJvb2xlYW4gZmxpcFksIFtPcHRpb25hbF0gaW4gcHJl
bXVsdGlwbHlBbHBoYSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdGV4U3ViSW1hZ2UyRCgpOwor
CisgICAgICAgIHZvaWQgdW5pZm9ybTFmKGluIGxvbmcgbG9jYXRpb24sIGluIGZsb2F0IHgpOwor
ICAgICAgICB2b2lkIHVuaWZvcm0xZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gQ2FudmFzRmxvYXRB
cnJheSB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWkoaW4gbG9uZyBsb2NhdGlvbiwgaW4gbG9u
ZyB4KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWl2KGluIGxvbmcgbG9jYXRpb24sIGluIENhbnZh
c0ludEFycmF5IHYpOworICAgICAgICB2b2lkIHVuaWZvcm0yZihpbiBsb25nIGxvY2F0aW9uLCBp
biBmbG9hdCB4LCBpbiBmbG9hdCB5KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmZ2KGluIGxvbmcg
bG9jYXRpb24sIGluIENhbnZhc0Zsb2F0QXJyYXkgdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTJp
KGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5KTsKKyAgICAgICAgdm9pZCB1
bmlmb3JtMml2KGluIGxvbmcgbG9jYXRpb24sIGluIENhbnZhc0ludEFycmF5IHYpOworICAgICAg
ICB2b2lkIHVuaWZvcm0zZihpbiBsb25nIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBmbG9hdCB5
LCBpbiBmbG9hdCB6KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2Z2KGluIGxvbmcgbG9jYXRpb24s
IGluIENhbnZhc0Zsb2F0QXJyYXkgdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNpKGluIGxvbmcg
bG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHopOworICAgICAgICB2b2lk
IHVuaWZvcm0zaXYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gQ2FudmFzSW50QXJyYXkgdik7CisgICAg
ICAgIHZvaWQgdW5pZm9ybTRmKGluIGxvbmcgbG9jYXRpb24sIGluIGZsb2F0IHgsIGluIGZsb2F0
IHksIGluIGZsb2F0IHosIGluIGZsb2F0IHcpOworICAgICAgICB2b2lkIHVuaWZvcm00ZnYoaW4g
bG9uZyBsb2NhdGlvbiwgaW4gQ2FudmFzRmxvYXRBcnJheSB2KTsKKyAgICAgICAgdm9pZCB1bmlm
b3JtNGkoaW4gbG9uZyBsb2NhdGlvbiwgaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgeiwg
aW4gbG9uZyB3KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGl2KGluIGxvbmcgbG9jYXRpb24sIGlu
IENhbnZhc0ludEFycmF5IHYpOworCisgICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihpbiBs
b25nIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gQ2FudmFzRmxvYXRBcnJheSBh
cnJheSk7CisgICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihpbiBsb25nIGxvY2F0aW9uLCBp
biBib29sZWFuIHRyYW5zcG9zZSwgaW4gQ2FudmFzRmxvYXRBcnJheSBhcnJheSk7CisgICAgICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDRmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5z
cG9zZSwgaW4gQ2FudmFzRmxvYXRBcnJheSBhcnJheSk7CisKICAgICAgICAgdm9pZCAgICAgICAg
IHVzZVByb2dyYW0oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtKTsKICAgICAgICAgdm9pZCAgICAg
ICAgIHZhbGlkYXRlUHJvZ3JhbShpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0pOwotICAgICAgICBb
Q3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYihpbiB1bnNpZ25lZCBsb25nIGluZHgsIGluIENhbnZh
c051bWJlckFycmF5KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVy
KGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gbG9uZyBzaXplLCBpbiB1bnNpZ25lZCBsb25nIHR5
cGUsIGluIGJvb2xlYW4gbm9ybWFsaXplZCwgaW4gdW5zaWduZWQgbG9uZyBzdHJpZGUsIGluIENh
bnZhc0J5dGVBcnJheSBhcnJheSk7Ci0gICAgICAgIHZvaWQgICAgICAgICB2aWV3cG9ydChpbiBs
b25nIHgsIGluIGxvbmcgeSwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9u
ZyBoZWlnaHQpOwogCi0gICAgICAgIC8vIE5vbi1HTCBmdW5jdGlvbnMKLSAgICAgICAgQ2FudmFz
QnVmZmVyIGNyZWF0ZUJ1ZmZlcigpOwotICAgICAgICBDYW52YXNGcmFtZWJ1ZmZlciBjcmVhdGVG
cmFtZWJ1ZmZlcigpOwotICAgICAgICBDYW52YXNQcm9ncmFtIGNyZWF0ZVByb2dyYW0oKTsKLSAg
ICAgICAgQ2FudmFzUmVuZGVyYnVmZmVyIGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgICAgICBD
YW52YXNTaGFkZXIgY3JlYXRlU2hhZGVyKGluIHVuc2lnbmVkIGxvbmcgdHlwZSk7Ci0gICAgICAg
IENhbnZhc1RleHR1cmUgY3JlYXRlVGV4dHVyZSgpOworICAgICAgICB2b2lkICAgICAgICAgdmVy
dGV4QXR0cmliMWYoaW4gdW5zaWduZWQgbG9uZyBpbmR4LCBpbiBmbG9hdCB4KTsKKyAgICAgICAg
dm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjFmdihpbiB1bnNpZ25lZCBsb25nIGluZHgsIGluIENh
bnZhc0Zsb2F0QXJyYXkgdmFsdWVzKTsKKyAgICAgICAgdm9pZCAgICAgICAgIHZlcnRleEF0dHJp
YjJmKGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSk7CisgICAg
ICAgIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIyZnYoaW4gdW5zaWduZWQgbG9uZyBpbmR4LCBp
biBDYW52YXNGbG9hdEFycmF5IHZhbHVlcyk7CisgICAgICAgIHZvaWQgICAgICAgICB2ZXJ0ZXhB
dHRyaWIzZihpbiB1bnNpZ25lZCBsb25nIGluZHgsIGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGlu
IGZsb2F0IHopOworICAgICAgICB2b2lkICAgICAgICAgdmVydGV4QXR0cmliM2Z2KGluIHVuc2ln
bmVkIGxvbmcgaW5keCwgaW4gQ2FudmFzRmxvYXRBcnJheSB2YWx1ZXMpOworICAgICAgICB2b2lk
ICAgICAgICAgdmVydGV4QXR0cmliNGYoaW4gdW5zaWduZWQgbG9uZyBpbmR4LCBpbiBmbG9hdCB4
LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCB6LCBpbiBmbG9hdCB3KTsKKyAgICAgICAgdm9pZCAgICAg
ICAgIHZlcnRleEF0dHJpYjRmdihpbiB1bnNpZ25lZCBsb25nIGluZHgsIGluIENhbnZhc0Zsb2F0
QXJyYXkgdmFsdWVzKTsKKyAgICAgICAgdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBvaW50ZXIo
aW4gdW5zaWduZWQgbG9uZyBpbmR4LCBpbiBsb25nIHNpemUsIGluIHVuc2lnbmVkIGxvbmcgdHlw
ZSwgaW4gYm9vbGVhbiBub3JtYWxpemVkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gbG9uZyBzdHJpZGUsIGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKIAot
ICAgICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihpbiBDYW52YXNCdWZmZXIgYnVmZmVyKTsKLSAgICAg
ICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihpbiBDYW52YXNGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZl
cik7Ci0gICAgICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0p
OwotICAgICAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihpbiBDYW52YXNSZW5kZXJidWZmZXIg
cmVuZGVyYnVmZmVyKTsKLSAgICAgICAgdm9pZCBkZWxldGVTaGFkZXIoaW4gQ2FudmFzU2hhZGVy
IHNoYWRlcik7Ci0gICAgICAgIHZvaWQgZGVsZXRlVGV4dHVyZShpbiBDYW52YXNUZXh0dXJlIHRl
eHR1cmUpOwotICAgICAgICAKLSAgICAgICAgQ2FudmFzTnVtYmVyQXJyYXkgZ2V0KGluIHVuc2ln
bmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBDYW52YXNOdW1iZXJBcnJheSBnZXRCdWZmZXJQYXJh
bWV0ZXIoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwot
ICAgICAgICBDYW52YXNOdW1iZXJBcnJheSBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
aW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIENhbnZhc051bWJlckFycmF5IGdldFBy
b2dyYW0oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsK
LSAgICAgICAgRE9NU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKGluIENhbnZhc1Byb2dyYW0gcHJv
Z3JhbSk7Ci0gICAgICAgIENhbnZhc051bWJlckFycmF5IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAg
ICAgIENhbnZhc051bWJlckFycmF5IGdldFNoYWRlcihpbiBDYW52YXNTaGFkZXIgc2hhZGVyLCBp
biB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgRE9NU3RyaW5nIGdldFNoYWRlckluZm9M
b2coaW4gQ2FudmFzU2hhZGVyIHNoYWRlcik7Ci0KLSAgICAgICAgQ2FudmFzTnVtYmVyQXJyYXkg
Z2V0VGV4UGFyYW1ldGVyKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25n
IHBuYW1lKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBJIGRvbid0IGxpa2UgdGhlIGlk
ZWEgb2YgcGFzc2luZyBhIHNpemUgdG8gdGhpcyBmdW5jdGlvbi4gV2Ugc2hvdWxkIGJlIGFibGUg
dG8gZmlndXJlIGl0IG91dC4KLSAgICAgICAgLy8gQnV0IHRoZSBvbmx5IHdheSB0byBkbyB0aGF0
IGlzIHRvIHNlYXJjaCB0aHJvdWdoIGFsbCBhY3RpdmUgdW5pZm9ybXMgYW5kIGRldGVybWluZSB0
aGUgdHlwZS4KLSAgICAgICAgQ2FudmFzTnVtYmVyQXJyYXkgZ2V0VW5pZm9ybShpbiBDYW52YXNQ
cm9ncmFtIHByb2dyYW0sIGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgc2l6ZSk7Ci0gICAgICAg
IAotICAgICAgICBsb25nIGdldFVuaWZvcm1Mb2NhdGlvbihpbiBDYW52YXNQcm9ncmFtIHByb2dy
YW0sIGluIERPTVN0cmluZyBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRVbmlmb3JtTG9jYXRpb24K
LSAgICAgICAgQ2FudmFzTnVtYmVyQXJyYXkgZ2V0VmVydGV4QXR0cmliKGluIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICAKLSAgICAgICAgW0N1
c3RvbV0gdm9pZCB0ZXhJbWFnZTJEKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25l
ZCBsb25nIGxldmVsLCBpbiBIVE1MSW1hZ2VFbGVtZW50IGltYWdlKTsKLSAgICAgICAgW0N1c3Rv
bV0gdm9pZCB0ZXhTdWJJbWFnZTJEKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25l
ZCBsb25nIGxldmVsLCBpbiB1bnNpZ25lZCBsb25nIHhvZmYsIGluIHVuc2lnbmVkIGxvbmcgeW9m
ZiwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQsIGluIEhU
TUxJbWFnZUVsZW1lbnQgaW1hZ2UpOwotCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRyaWNr
eS4gV2Ugb2J2aW91c2x5IGNhbid0IHJldHVybiBhIHBvaW50ZXIuIEJ1dCBzb21ldGltZXMgdGhp
cyBmdW5jdGlvbiByZXR1cm5zIGFuIG9mZnNldC4KLSAgICAgICAgLy8gQWxzbywgZG8gd2Ugd2Fu
dCB0byB1c2UgdGhpcyB0byBnaXZlIGEgcmVmZXJlbmNlIHRvIGEgQ2FudmFzTnVtYmVyQXJyYXk/
IElmIHNvLCB3b3VsZCB0aGlzIG1lcmVseSBiZSBhIGNvcHkKLSAgICAgICAgLy8gb3IgdGhlIGFj
dHVhbCBtdXRhYmxlIGFycmF5PwotICAgICAgICAvL3ZvaWQgICAgICAgICBnZXRWZXJ0ZXhBdHRy
aWJQb2ludGVydihpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1l
LCB2b2lkKiogcG9pbnRlcik7Ci0KLSAgICAgICAgLy8gRklYTUU6IFRoZXNlIHdpbGwgaGF2ZSB0
byBiZSBkb25lIGJ5IHJldHVybmluZyBhIGRhdGEgdHlwZSB3aGljaCBoYXMgdGhlIHJldHVybmVk
IGF0dHJpYnV0ZXMKLSAgICAgICAgLy92b2lkIGdldEFjdGl2ZUF0dHJpYihpbiBDYW52YXNQcm9n
cmFtIHByb2dyYW0sIGluIHVuc2lnbmVkIGxvbmcgaW5kZXgsIG91dCBsb25nIHNpemUsIG91dCB1
bnNpZ25lZCBsb25nIHR5cGUsIG91dCBET01TdHJpbmcgbmFtZSk7Ci0gICAgICAgIC8vdm9pZCBn
ZXRBY3RpdmVVbmlmb3JtKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gdW5zaWduZWQgbG9u
ZyBpbmRleCwgb3V0IGxvbmcgc2l6ZSwgb3V0IHVuc2lnbmVkIGxvbmcgdHlwZSwgb3V0IERPTVN0
cmluZyBuYW1lKTsKLSAgICAgICAgLy92b2lkIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChpbiB1
bnNpZ25lZCBsb25nIHNoYWRlcnR5cGUsIGluIHVuc2lnbmVkIGxvbmcgcHJlY2lzaW9udHlwZSwg
b3V0IGxvbmcgcmFuZ2VNaW4sIG91dCBsb25nIHJhbmdlTWF4LCBvdXQgbG9uZyBwcmVjaXNpb24p
OworICAgICAgICB2b2lkICAgICAgICAgdmlld3BvcnQoaW4gbG9uZyB4LCBpbiBsb25nIHksIGlu
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKICAgICB9Owog
fQogCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiQ2FudmFzU2hvcnRBcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCisgICAgUGFzc1JlZlB0cjxDYW52YXNTaG9ydEFycmF5PiBDYW52YXNTaG9ydEFycmF5Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5
QnVmZmVyPiBidWZmZXIgPSBDYW52YXNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVv
ZihzaG9ydCkpOworICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKKyAg
ICB9CisKKyAgICBQYXNzUmVmUHRyPENhbnZhc1Nob3J0QXJyYXk+IENhbnZhc1Nob3J0QXJyYXk6
OmNyZWF0ZShzaG9ydCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIFJl
ZlB0cjxDYW52YXNTaG9ydEFycmF5PiBhID0gQ2FudmFzU2hvcnRBcnJheTo6Y3JlYXRlKGxlbmd0
aCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIGEtPnNldChpLCBhcnJheVtpXSk7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKwor
ICAgIFBhc3NSZWZQdHI8Q2FudmFzU2hvcnRBcnJheT4gQ2FudmFzU2hvcnRBcnJheTo6Y3JlYXRl
KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgb2Zmc2V0IHJl
c3VsdHMgaW4gdmFsaWQgYWxpZ25tZW50LgorICAgICAgICBpZiAoKG9mZnNldCAlIHNpemVvZihz
aG9ydCkpICE9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmFsaWQg
cmVnaW9uIG9mCisgICAgICAgIC8vIHRoZSBnaXZlbiBDYW52YXNBcnJheUJ1ZmZlcidzIHN0b3Jh
Z2UuCisgICAgICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZihzaG9ydCkpKSA+IGJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzU2hvcnRBcnJheShidWZmZXIs
IG9mZnNldCwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAgIENhbnZhc1Nob3J0QXJyYXk6OkNh
bnZhc1Nob3J0QXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIDogQ2FudmFzQXJyYXkoYnVmZmVyLCBv
ZmZzZXQpCisgICAgICAgICwgbV9zaXplKGxlbmd0aCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIENhbnZhc1Nob3J0QXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKKyAgICAgICAgcmV0
dXJuIG1fc2l6ZTsKKyAgICB9CisgICAgICAgIAorICAgIHVuc2lnbmVkIENhbnZhc1Nob3J0QXJy
YXk6OnNpemVJbkJ5dGVzKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXpl
b2Yoc2hvcnQpOworICAgIH0KK30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBz
dm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNTaG9ydEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNT
aG9ydEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1No
b3J0QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQ2FudmFzU2hvcnRBcnJheV9oCisjZGVmaW5lIENhbnZhc1Nob3J0QXJyYXlfaAorCisjaW5j
bHVkZSAiQ2FudmFzQXJyYXkuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIENhbnZhc1Nob3J0QXJyYXkgOiBwdWJs
aWMgQ2FudmFzQXJyYXkgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q2FudmFzU2hvcnRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENhbnZhc1Nob3J0QXJyYXk+IGNyZWF0ZShzaG9ydCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Nob3J0QXJyYXk+
IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0OworCisg
ICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgaWYgKGlzbmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAodmFsdWUgPCBzdGQ6Om51bWVy
aWNfbGltaXRzPHNob3J0Pjo6bWluKCkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHNob3J0Pjo6bWluKCk7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKSkKKyAgICAgICAgICAgICAgICB2YWx1
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKTsKKyAgICAgICAgICAgIHNob3J0
KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8c2hvcnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAg
ICAgIHN0b3JhZ2VbaW5kZXhdID0gc3RhdGljX2Nhc3Q8c2hvcnQ+KHZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHNob3J0JiByZXN1
bHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2hvcnQqIHN0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDxzaG9ydCo+KG1fYmFzZUFkZHJlc3MpOworICAgICAgICAgICAgcmVzdWx0
ID0gc3RvcmFnZVtpbmRleF07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FudmFzU2hvcnRBcnJheShQYXNzUmVmUHRyPENhbnZh
c0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
ICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQ2FudmFzU2hvcnRBcnJheV9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuaApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTaG9ydEFycmF5LmlkbAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5pZGwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGh0
bWwgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPTNEX0NBTlZBUywKKyAg
ICAgICAgSGFzQ3VzdG9tSW5kZXhHZXR0ZXIsCisgICAgICAgIEhhc0N1c3RvbUluZGV4U2V0dGVy
LAorICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciwKKyAgICAgICAgR2VuZXJhdGVDdXN0
b21Db25zdHJ1Y3RvciwKKyAgICAgICAgQ3VzdG9tVG9KUworICAgIF0gQ2FudmFzU2hvcnRBcnJh
eSA6IENhbnZhc0FycmF5IHsKKyAgICB9OworfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1RleHR1cmUuY3BwCShyZXZpc2lvbiA0ODExMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgUGFzc1JlZlB0
cjxDYW52YXNUZXh0dXJlPiBDYW52YXNUZXh0dXJlOgogCiBDYW52YXNUZXh0dXJlOjpDYW52YXNU
ZXh0dXJlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY3R4KQogICAgIDogQ2FudmFzT2JqZWN0
KGN0eCkKKyAgICAsIGN1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZChmYWxzZSkKIHsKICAgICBz
ZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVUZXh0dXJlKCkp
OwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmgJKHJldmlzaW9uIDQ4MTEw
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDEwICszOSwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNUZXh0dXJlPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEKik7CiAgICAgCisgICAgICAgIGJvb2wgaXNDdWJlTWFwUldyYXBNb2RlSW5pdGlh
bGl6ZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gY3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVk
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRDdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6
ZWQoYm9vbCBpbml0aWFsaXplZCkgeworICAgICAgICAgICAgY3ViZU1hcFJXcmFwTW9kZUluaXRp
YWxpemVkID0gaW5pdGlhbGl6ZWQ7CisgICAgICAgIH0KKwogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgQ2FudmFzVGV4dHVyZShDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqKTsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgX2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIGJvb2wgY3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkOwogICAgIH07CiAg
ICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAi
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
ICAgIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IENhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgUmVmUHRyPENh
bnZhc0FycmF5QnVmZmVyPiBidWZmZXIgPSBDYW52YXNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0
aCAqIHNpemVvZih1bnNpZ25lZCBjaGFyKSk7CisgICAgICAgIHJldHVybiBjcmVhdGUoYnVmZmVy
LCAwLCBsZW5ndGgpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRl
QXJyYXk+IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUodW5zaWduZWQgY2hhciogYXJy
YXksIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxDYW52YXNVbnNpZ25l
ZEJ5dGVBcnJheT4gYSA9IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUobGVuZ3RoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgYS0+c2V0KGksIGFycmF5W2ldKTsKKyAgICAgICAgcmV0dXJuIGE7CisgICAgfQorCisgICAg
UGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gQ2FudmFzVW5zaWduZWRCeXRlQXJy
YXk6OmNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQorICAg
IHsKKyAgICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IGEg
dmFsaWQgcmVnaW9uIG9mCisgICAgICAgIC8vIHRoZSBnaXZlbiBDYW52YXNBcnJheUJ1ZmZlcidz
IHN0b3JhZ2UuCisgICAgICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZih1bnNpZ25l
ZCBjaGFyKSkpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBO
VUxMOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNVbnNp
Z25lZEJ5dGVBcnJheShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAg
IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OjpDYW52YXNVbnNpZ25lZEJ5dGVBcnJheShQYXNzUmVm
UHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKKyAgICAgICAgOiBDYW52YXNBcnJheShidWZmZXIsIG9mZnNldCkKKyAgICAgICAgLCBtX3Np
emUobGVuZ3RoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgQ2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1fc2l6ZTsKKyAg
ICB9CisgICAgICAgIAorICAgIHVuc2lnbmVkIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OjpzaXpl
SW5CeXRlcygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGxlbmd0aCgpICogc2l6ZW9mKHVuc2ln
bmVkIGNoYXIpOworICAgIH0KK30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpB
ZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5X2gK
KyNkZWZpbmUgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlfaAorCisjaW5jbHVkZSAiQ2FudmFzQXJy
YXkuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAorICAgIGNsYXNzIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5IDogcHVibGljIENhbnZh
c0FycmF5IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Vu
c2lnbmVkQnl0ZUFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBjaGFy
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2Fu
dmFzVW5zaWduZWRCeXRlQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVy
PiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICAgICAgdmlydHVh
bCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaXpl
SW5CeXRlcygpIGNvbnN0OworCisgICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3Vi
bGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGlzbmFuKHZhbHVlKSkgLy8g
Q2xhbXAgTmFOIHRvIDAKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAgICBp
ZiAodmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+OjptaW4oKSkKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj46
Om1pbigpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkIGNoYXI+OjptYXgoKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj46Om1heCgpOworICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtX2Jhc2VBZGRyZXNz
KTsKKyAgICAgICAgICAgIHN0b3JhZ2VbaW5kZXhdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4odmFsdWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGdldCh1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgY2hhciYgcmVzdWx0KSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4obV9iYXNlQWRkcmVzcyk7CisgICAgICAgICAgICByZXN1bHQgPSBzdG9yYWdlW2lu
ZGV4XTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5
QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHVu
c2lnbmVkIG1fc2l6ZTsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxl
CiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5
dGVBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNp
Z25lZEJ5dGVBcnJheS5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRp
b25hbD0zRF9DQU5WQVMsCisgICAgICAgIEhhc0N1c3RvbUluZGV4R2V0dGVyLAorICAgICAgICBI
YXNDdXN0b21JbmRleFNldHRlciwKKyAgICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIsCisg
ICAgICAgIEdlbmVyYXRlQ3VzdG9tQ29uc3RydWN0b3IsCisgICAgICAgIEN1c3RvbVRvSlMKKyAg
ICBdIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5IDogQ2FudmFzQXJyYXkgeworICAgIH07Cit9Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJy
YXkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0Fy
cmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEludEFy
cmF5PiBDYW52YXNVbnNpZ25lZEludEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQorICAg
IHsKKyAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIgPSBDYW52YXNBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0
cjxDYW52YXNVbnNpZ25lZEludEFycmF5PiBDYW52YXNVbnNpZ25lZEludEFycmF5OjpjcmVhdGUo
dW5zaWduZWQgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgUmVm
UHRyPENhbnZhc1Vuc2lnbmVkSW50QXJyYXk+IGEgPSBDYW52YXNVbnNpZ25lZEludEFycmF5Ojpj
cmVhdGUobGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQorICAgICAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsKKyAgICAgICAgcmV0dXJuIGE7
CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEludEFycmF5PiBDYW52YXNV
bnNpZ25lZEludEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoKQorICAgIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvZmZzZXQgcmVzdWx0cyBpbiB2
YWxpZCBhbGlnbm1lbnQuCisgICAgICAgIGlmICgob2Zmc2V0ICUgc2l6ZW9mKHVuc2lnbmVkIGlu
dCkpICE9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmFsaWQgcmVn
aW9uIG9mCisgICAgICAgIC8vIHRoZSBnaXZlbiBDYW52YXNBcnJheUJ1ZmZlcidzIHN0b3JhZ2Uu
CisgICAgICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSkg
PiBidWZmZXItPmJ5dGVMZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1Vuc2lnbmVkSW50QXJy
YXkoYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBDYW52YXNVbnNp
Z25lZEludEFycmF5OjpDYW52YXNVbnNpZ25lZEludEFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJy
YXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6
IENhbnZhc0FycmF5KGJ1ZmZlciwgb2Zmc2V0KQorICAgICAgICAsIG1fc2l6ZShsZW5ndGgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBDYW52YXNVbnNpZ25lZEludEFycmF5Ojps
ZW5ndGgoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtX3NpemU7CisgICAgfQorICAgICAgICAK
KyAgICB1bnNpZ25lZCBDYW52YXNVbnNpZ25lZEludEFycmF5OjpzaXplSW5CeXRlcygpIGNvbnN0
IHsKKyAgICAgICAgcmV0dXJuIGxlbmd0aCgpICogc2l6ZW9mKHVuc2lnbmVkIGludCk7CisgICAg
fQorfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5jcHAKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KQWRkZWQ6IHN2bjplb2wtc3R5
bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVk
SW50QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2ln
bmVkSW50QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
VW5zaWduZWRJbnRBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBDYW52YXNVbnNpZ25lZEludEFycmF5X2gKKyNkZWZpbmUgQ2FudmFzVW5zaWdu
ZWRJbnRBcnJheV9oCisKKyNpbmNsdWRlICJDYW52YXNBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ2Fu
dmFzVW5zaWduZWRJbnRBcnJheSA6IHB1YmxpYyBDYW52YXNBcnJheSB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEludEFycmF5PiBjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWdu
ZWRJbnRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGludCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkSW50QXJyYXk+IGNyZWF0
ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CisKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0OworCisgICAgICAg
IHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgaWYgKGlzbmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAodmFsdWUgPCBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIGludD46Om1pbigpKQorICAgICAgICAgICAgICAgIHZhbHVlID0gc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptaW4oKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSkKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4
KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgICAgIHN0b3JhZ2VbaW5kZXhdID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBpbnQmIHJlc3VsdCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIHN0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHN0b3JhZ2VbaW5kZXhdOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkoUGFz
c1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgICAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgfTsKKyAgICAKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhbnZhc1Vuc2lnbmVkSW50QXJyYXlfaAoKUHJv
cGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFy
cmF5LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRsCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworbW9kdWxlIGh0bWwgeworICAgIGludGVyZmFjZSBbCisg
ICAgICAgIENvbmRpdGlvbmFsPTNEX0NBTlZBUywKKyAgICAgICAgSGFzQ3VzdG9tSW5kZXhHZXR0
ZXIsCisgICAgICAgIEhhc0N1c3RvbUluZGV4U2V0dGVyLAorICAgICAgICBHZW5lcmF0ZU5hdGl2
ZUNvbnZlcnRlciwKKyAgICAgICAgR2VuZXJhdGVDdXN0b21Db25zdHJ1Y3RvciwKKyAgICAgICAg
Q3VzdG9tVG9KUworICAgIF0gQ2FudmFzVW5zaWduZWRJbnRBcnJheSA6IENhbnZhc0FycmF5IHsK
KyAgICB9OworfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWdu
ZWRTaG9ydEFycmF5LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisK
KyNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgUGFzc1JlZlB0
cjxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+IENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheTo6Y3Jl
YXRlKHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxDYW52YXNBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gQ2FudmFzQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0
aCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+IENh
bnZhc1Vuc2lnbmVkU2hvcnRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIHNob3J0KiBhcnJheSwgdW5z
aWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgUmVmUHRyPENhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheT4gYSA9IENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheTo6Y3JlYXRlKGxlbmd0aCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGEt
PnNldChpLCBhcnJheVtpXSk7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKworICAgIFBhc3NS
ZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5PiBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk6
OmNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCkKKyAg
ICB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgb2Zmc2V0IHJlc3VsdHMgaW4gdmFsaWQgYWxp
Z25tZW50LgorICAgICAgICBpZiAoKG9mZnNldCAlIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpICE9
IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLy8g
Q2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmFsaWQgcmVnaW9uIG9m
CisgICAgICAgIC8vIHRoZSBnaXZlbiBDYW52YXNBcnJheUJ1ZmZlcidzIHN0b3JhZ2UuCisgICAg
ICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpKSA+IGJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5
KGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgQ2FudmFzVW5zaWdu
ZWRTaG9ydEFycmF5OjpDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkoUGFzc1JlZlB0cjxDYW52YXNB
cnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIDogQ2FudmFzQXJyYXkoYnVmZmVyLCBvZmZzZXQp
CisgICAgICAgICwgbV9zaXplKGxlbmd0aCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheTo6bGVuZ3RoKCkgY29uc3QgeworICAgICAgICBy
ZXR1cm4gbV9zaXplOworICAgIH0KKyAgICAgICAgCisgICAgdW5zaWduZWQgQ2FudmFzVW5zaWdu
ZWRTaG9ydEFycmF5OjpzaXplSW5CeXRlcygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGxlbmd0
aCgpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoM0RfQ0FOVkFTKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNVbnNpZ25lZFNob3J0QXJyYXkuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5
cGUKICAgKyB0ZXh0L3BsYWluCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJy
YXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5X2gKKyNkZWZpbmUgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5
X2gKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBDYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXkgOiBwdWJsaWMgQ2FudmFzQXJyYXkgeworICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5PiBjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9y
dEFycmF5PiBjcmVhdGUodW5zaWduZWQgc2hvcnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+IGNyZWF0
ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CisKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0OworCisgICAgICAg
IHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgaWYgKGlzbmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAodmFsdWUgPCBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIHNob3J0Pjo6bWluKCkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWluKCk7CisgICAgICAgICAgICBlbHNl
IGlmICh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptYXgoKSkK
KyAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hv
cnQ+OjptYXgoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0KiBzdG9yYWdlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgICAgIHN0b3Jh
Z2VbaW5kZXhdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KHZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIHNo
b3J0JiByZXN1bHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBt
X3NpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1fYmFzZUFk
ZHJlc3MpOworICAgICAgICAgICAgcmVzdWx0ID0gc3RvcmFnZVtpbmRleF07CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FudmFz
VW5zaWduZWRTaG9ydEFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlcixp
bnQgb2Zmc2V0LHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAg
ICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFzVW5z
aWduZWRTaG9ydEFycmF5X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUt
dHlwZQogICArIHRleHQvcGxhaW4KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCklu
ZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXku
aWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNo
b3J0QXJyYXkuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworbW9k
dWxlIGh0bWwgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPTNEX0NBTlZB
UywKKyAgICAgICAgSGFzQ3VzdG9tSW5kZXhHZXR0ZXIsCisgICAgICAgIEhhc0N1c3RvbUluZGV4
U2V0dGVyLAorICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciwKKyAgICAgICAgR2VuZXJh
dGVDdXN0b21Db25zdHJ1Y3RvciwKKyAgICAgICAgQ3VzdG9tVG9KUworICAgIF0gQ2FudmFzVW5z
aWduZWRTaG9ydEFycmF5IDogQ2FudmFzQXJyYXkgeworICAgIH07Cit9CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmlkbAkocmV2aXNpb24gNDgxMTApCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtNDI0LDYgKzQyNCwxNSBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAg
YXR0cmlidXRlIFtDb25kaXRpb25hbD0zRF9DQU5WQVNdIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RENvbnN0cnVjdG9yIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDsKICAgICAgICAgYXR0cmlidXRl
IFRleHRNZXRyaWNzQ29uc3RydWN0b3IgVGV4dE1ldHJpY3M7CiAKKyAgICAgICAgYXR0cmlidXRl
IFtDdXN0b21HZXR0ZXIsQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yIENhbnZhc0FycmF5QnVmZmVyOyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IK
KyAgICAgICAgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXIsQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBD
YW52YXNCeXRlQXJyYXlDb25zdHJ1Y3RvciBDYW52YXNCeXRlQXJyYXk7IC8vIFVzYWJsZSB3aXRo
IG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcixDb25kaXRpb25h
bD0zRF9DQU5WQVNdIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IgQ2FudmFzVW5z
aWduZWRCeXRlQXJyYXk7IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRy
aWJ1dGUgW0N1c3RvbUdldHRlcixDb25kaXRpb25hbD0zRF9DQU5WQVNdIENhbnZhc1Nob3J0QXJy
YXlDb25zdHJ1Y3RvciBDYW52YXNTaG9ydEFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0
b3IKKyAgICAgICAgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXIsQ29uZGl0aW9uYWw9M0RfQ0FOVkFT
XSBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3RvciBDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXk7IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgW0N1
c3RvbUdldHRlcixDb25kaXRpb25hbD0zRF9DQU5WQVNdIENhbnZhc0ludEFycmF5Q29uc3RydWN0
b3IgQ2FudmFzSW50QXJyYXk7IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgorICAgICAgICBh
dHRyaWJ1dGUgW0N1c3RvbUdldHRlcixDb25kaXRpb25hbD0zRF9DQU5WQVNdIENhbnZhc1Vuc2ln
bmVkSW50QXJyYXlDb25zdHJ1Y3RvciBDYW52YXNVbnNpZ25lZEludEFycmF5OyAvLyBVc2FibGUg
d2l0aCBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXIsQ29uZGl0
aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IgQ2FudmFzRmxvYXRB
cnJheTsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCisKICAgICAgICAgYXR0cmlidXRlIEV2
ZW50Q29uc3RydWN0b3IgRXZlbnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBLZXlib2FyZEV2ZW50Q29u
c3RydWN0b3IgS2V5Ym9hcmRFdmVudDsKICAgICAgICAgYXR0cmlidXRlIE1vdXNlRXZlbnRDb25z
dHJ1Y3RvciBNb3VzZUV2ZW50OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNDgxMTApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE1ICs0
NSwyMSBAQCBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9ybTNET2JqCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIENhbnZhc0FycmF5OwogICAgIGNsYXNz
IENhbnZhc0J1ZmZlcjsKKyAgICBjbGFzcyBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheTsKKyAgICBj
bGFzcyBDYW52YXNGbG9hdEFycmF5OwogICAgIGNsYXNzIENhbnZhc0ZyYW1lYnVmZmVyOwotICAg
IGNsYXNzIENhbnZhc051bWJlckFycmF5OworICAgIGNsYXNzIENhbnZhc0ludEFycmF5OwogICAg
IGNsYXNzIENhbnZhc1Byb2dyYW07CiAgICAgY2xhc3MgQ2FudmFzUmVuZGVyYnVmZmVyOworICAg
IGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDsKICAgICBjbGFzcyBDYW52YXNTaGFkZXI7
CiAgICAgY2xhc3MgQ2FudmFzVGV4dHVyZTsKICAgICBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsK
ICAgICBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OworICAgIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7
CisgICAgY2xhc3MgSW1hZ2VEYXRhOwogICAgIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAK
ICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRCA6IE5vbmNvcHlhYmxlIHsKQEAgLTY2LDI5ICs3
MiwzOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHRPYmo7IH0KICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0
Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KKyNlbGlmIFBMQVRGT1JN
KFNLSUEpCisgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCgpIGNvbnN0OworICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4
dHVyZSgpIGNvbnN0OwogI2Vsc2UKICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBw
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gTnVsbFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0Q7IH0KICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1
cmUoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm0zRE9iamVjdDsgfQogI2VuZGlmCiAgICAg
ICAgIHZvaWQgY2hlY2tFcnJvcigpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2
b2lkIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICB2b2lkIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgICAgICAKKyAgICAgICAgLy8gSGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBpbiBi
eXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcworICAgICAgICAvLyBsaWtlIEdMX0ZMT0FULCBHTF9J
TlQsIGV0Yy4KKyAgICAgICAgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKKwogICAgICAgICB2
b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsKICAgICAgICAgdm9pZCBh
dHRhY2hTaGFkZXIoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgQ2FudmFzU2hhZGVyKiBzaGFkZXIp
OwogICAgICAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihDYW52YXNQcm9ncmFtKiwgdW5zaWdu
ZWQgbG9uZyBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICAgICAgdm9pZCBiaW5kQnVm
ZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNCdWZmZXIqKTsKICAgICAgICAgdm9pZCBi
aW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc0ZyYW1lYnVmZmVyKik7
CiAgICAgICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2Fu
dmFzUmVuZGVyYnVmZmVyKik7Ci0gICAgICAgIHZvaWQgYmluZFRleHR1cmUodW5zaWduZWQgdGFy
Z2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlM0QpOworICAgICAgICB2b2lkIGJpbmRUZXh0dXJl
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKTsKICAgICAgICAg
dm9pZCBibGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRv
dWJsZSBhbHBoYSk7Ci0gICAgICAgIHZvaWQgYmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1v
ZGUgKTsKKyAgICAgICAgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSk7CiAg
ICAgICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwg
dW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOwogICAgICAgICB2b2lkIGJsZW5kRnVuYyh1bnNpZ25l
ZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcgZGZhY3Rvcik7CiAgICAgICAgIHZvaWQgYmxl
bmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdC
LCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKTsKLSAgICAg
ICAgdm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNOdW1iZXJBcnJh
eSosIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOwotICAgICAgICB2b2lkIGJ1ZmZlclN1YkRhdGEodW5z
aWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBDYW52YXNOdW1iZXJBcnJheSopOwotICAg
ICAgICB1bnNpZ25lZCBsb25nIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoQ2FudmFzRnJhbWVidWZm
ZXIqKTsKKworICAgICAgICB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGlu
dCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKKyAgICAgICAgdm9pZCBidWZmZXJEYXRhKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNBcnJheSogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2Fn
ZSk7CisgICAgICAgIHZvaWQgYnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9u
ZyBvZmZzZXQsIENhbnZhc0FycmF5KiBkYXRhKTsKKworICAgICAgICB1bnNpZ25lZCBsb25nIGNo
ZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpOwogICAgICAgICB2b2lk
IGNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzayk7CiAgICAgICAgIHZvaWQgY2xlYXJDb2xvcihkb3Vi
bGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpOwogICAgICAg
ICB2b2lkIGNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKTsKQEAgLTEwOCw4ICsxMjQsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGV0YWNoU2hhZGVyKENhbnZhc1Byb2dyYW0q
LCBDYW52YXNTaGFkZXIqKTsKICAgICAgICAgdm9pZCBkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2Fw
KTsKICAgICAgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBp
bmRleCk7Ci0gICAgICAgIHZvaWQgZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcg
Zmlyc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotICAgICAgICB2b2lkIGRyYXdFbGVtZW50cyh1
bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlw
ZSwgdm9pZCogYXJyYXkpOworICAgICAgICB2b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBt
b2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KTsKKyAgICAgICAgdm9pZCBkcmF3RWxlbWVudHMo
dW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5
cGUsIGxvbmcgb2Zmc2V0KTsKKwogICAgICAgICB2b2lkIGVuYWJsZSh1bnNpZ25lZCBsb25nIGNh
cCk7CiAgICAgICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBp
bmRleCk7CiAgICAgICAgIHZvaWQgZmluaXNoKCk7CkBAIC0xMTgsMTAgKzEzNSw1NyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0
ZXh0YXJnZXQsIENhbnZhc1RleHR1cmUqLCBsb25nIGxldmVsKTsKICAgICAgICAgdm9pZCBmcm9u
dEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKICAgICAgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcCh1
bnNpZ25lZCBsb25nIHRhcmdldCk7Ci0gICAgICAgIAorCiAgICAgICAgIGludCAgZ2V0QXR0cmli
TG9jYXRpb24oQ2FudmFzUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICAgICAg
Ym9vbCBnZXRCb29sZWFuKHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRy
PENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1l
KTsKKyAgICAgICAgaW50IGdldEJ1ZmZlclBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5
PiBnZXRCdWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSk7CisKICAgICAgICAgdW5zaWduZWQgbG9uZyBnZXRFcnJvcigpOworCisgICAgICAg
IGZsb2F0IGdldEZsb2F0KHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRy
PENhbnZhc0Zsb2F0QXJyYXk+IGdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAg
ICAgaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1l
bnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBpbnQgZ2V0SW50ZWdlcih1bnNpZ25l
ZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gZ2V0SW50
ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIGludCBnZXRQcm9ncmFtaShDYW52
YXNQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IGdldFByb2dyYW1pdihDYW52YXNQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBw
bmFtZSk7CisgICAgICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhDYW52YXNQcm9ncmFtKik7
CisgICAgICAgIGludCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRB
cnJheT4gZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBpbnQgZ2V0U2hhZGVyaShDYW52YXNTaGFkZXIq
LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJh
eT4gZ2V0U2hhZGVyaXYoQ2FudmFzU2hhZGVyKiwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisKKyAg
ICAgICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coQ2FudmFzU2hhZGVyKik7CisKKyAgICAgICAg
Ly8gVEJECisgICAgICAgIC8vIHZvaWQgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgKEdMZW51
bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQqIHJhbmdlLCBHTGludCog
cHJlY2lzaW9uKTsKKworICAgICAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKENhbnZhc1NoYWRl
ciopOwogICAgICAgICBTdHJpbmcgZ2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFtZSk7CisgICAg
ICAgIAorICAgICAgICBmbG9hdCBnZXRUZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFy
cmF5PiBnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSk7CisgICAgICAgIGludCBnZXRUZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRB
cnJheT4gZ2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgcG5hbWUpOworCisgICAgICAgIGZsb2F0IGdldFVuaWZvcm1mKENhbnZhc1Byb2dyYW0qIHBy
b2dyYW0sIGxvbmcgbG9jYXRpb24pOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJy
YXk+IGdldFVuaWZvcm1mdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKTsK
KyAgICAgICAgaW50IGdldFVuaWZvcm1pKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9j
YXRpb24pOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBnZXRVbmlmb3JtaXYo
Q2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbik7CisKKyAgICAgICAgbG9uZyBn
ZXRVbmlmb3JtTG9jYXRpb24oQ2FudmFzUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisK
KyAgICAgICAgZmxvYXQgZ2V0VmVydGV4QXR0cmliZih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNp
Z25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBn
ZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1l
KTsKKyAgICAgICAgaW50IGdldFZlcnRleEF0dHJpYmkodW5zaWduZWQgbG9uZyBpbmRleCwgdW5z
aWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdl
dFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
OworICAgICAgICAKKyAgICAgICAgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQg
bG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisKICAgICAgICAgdm9pZCBoaW50KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpOwogICAgICAgICBib29sIGlz
QnVmZmVyKENhbnZhc0J1ZmZlciopOwogICAgICAgICBib29sIGlzRW5hYmxlZCh1bnNpZ25lZCBs
b25nIGNhcCk7CkBAIC0xMzUsNyArMTk5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2b2lkIHBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pOwogICAg
ICAgICB2b2lkIHBvbHlnb25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKTsKICAg
ICAgICAgCi0gICAgICAgIC8vdm9pZCByZWFkUGl4ZWxzbG9uZyB4LCBsb25nIHksIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBwaXhlbHMpOworICAgICAgICAvLyBUQkQKKyAgICAg
ICAgLy92b2lkIHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyB0eXBlLCB2b2lkKiBwaXhlbHMpOwogICAgICAgICAKICAgICAgICAgdm9pZCByZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKTsKICAgICAgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CkBAIC0xNDgsNTQgKzIxMyw4MyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZSh1bnNpZ25l
ZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzayk7CiAgICAgICAgIHZvaWQgc3RlbmNpbE9w
KHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6
cGFzcyk7CiAgICAgICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNl
LCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcg
enBhc3MpOwotICAgICAgICB2b2lkIHRleFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVuc2ln
bmVkIHBuYW1lLCBDYW52YXNOdW1iZXJBcnJheSopOwotICAgICAgICB2b2lkIHRleFBhcmFtZXRl
cih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBkb3VibGUgdmFsdWUpOwotICAgICAg
ICB2b2lkIHVuaWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjApOwotICAgICAgICB2b2lkIHVu
aWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxKTsKLSAgICAgICAgdm9pZCB1
bmlmb3JtKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpOwotICAg
ICAgICB2b2lkIHVuaWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9h
dCB2MiwgZmxvYXQgdjMpOwotICAgICAgICB2b2lkIHVuaWZvcm0obG9uZyBsb2NhdGlvbiwgaW50
IHYwKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYx
KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBp
bnQgdjIpOwotICAgICAgICB2b2lkIHVuaWZvcm0obG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQg
djEsIGludCB2MiwgaW50IHYzKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtKGxvbmcgbG9jYXRpb24s
IENhbnZhc051bWJlckFycmF5Kik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeChsb25nIGxv
Y2F0aW9uLCBsb25nIGNvdW50LCBib29sIHRyYW5zcG9zZSwgQ2FudmFzTnVtYmVyQXJyYXkqKTsK
LSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3Nl
LCBjb25zdCBWZWN0b3I8V2ViS2l0Q1NTTWF0cml4Kj4mKTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
TWF0cml4KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBjb25zdCBXZWJLaXRDU1NNYXRy
aXgqKTsKKworICAgICAgICAvLyBUaGVzZSBuZXh0IHNldmVyYWwgZnVuY3Rpb25zIHJldHVybiBh
biBlcnJvciBjb2RlICgwIGlmIG5vIGVycm9ycykgcmF0aGVyIHRoYW4gdXNpbmcgYW4gRXhjZXB0
aW9uQ29kZS4KKyAgICAgICAgLy8gQ3VycmVudGx5IHRoZXkgcmV0dXJuIC0xIG9uIGFueSBlcnJv
ci4KKyAgICAgICAgaW50IHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZl
bCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBDYW52YXNBcnJheSog
cGl4ZWxzKTsKKyAgICAgICAgaW50IHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZURh
dGEqIHBpeGVscyk7CisgICAgICAgIGludCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5z
aWduZWQgbGV2ZWwsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpOworICAgICAgICBpbnQgdGV4
SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11
bHRpcGx5QWxwaGEpOworICAgICAgICBpbnQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVu
c2lnbmVkIGxldmVsLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywKKyAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKKworICAgICAgICB2b2lk
IHRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFy
YW0pOworICAgICAgICB2b2lkIHRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBwbmFtZSwgaW50IHBhcmFtKTsKKworICAgICAgICBpbnQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2ln
bmVkIHR5cGUsIENhbnZhc0FycmF5KiBwaXhlbHMpOworICAgICAgICBpbnQgdGV4U3ViSW1hZ2Uy
RCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNp
Z25lZCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3Jt
YXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzKTsKKyAgICAgICAgaW50IHRleFN1
YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNl
dCwgdW5zaWduZWQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7Cisg
ICAgICAgIGludCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSk7CisgICAgICAgIGludCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdl
dCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs
IEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpOworCisgICAgICAgIHZvaWQgdW5pZm9ybTFm
KGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpOworICAgICAgICB2b2lkIHVuaWZvcm0xZnYobG9uZyBs
b2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSogdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFpKGxv
bmcgbG9jYXRpb24sIGludCB4KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWl2KGxvbmcgbG9jYXRp
b24sIENhbnZhc0ludEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmYobG9uZyBsb2Nh
dGlvbiwgZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgICAgIHZvaWQgdW5pZm9ybTJmdihsb25nIGxv
Y2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmkobG9u
ZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMml2KGxvbmcg
bG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2YobG9u
ZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTNmdihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeik7CisgICAgICAg
IHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSogdik7CisgICAg
ICAgIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosIGZsb2F0IHcpOworICAgICAgICB2b2lkIHVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgQ2Fu
dmFzRmxvYXRBcnJheSogdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTRpKGxvbmcgbG9jYXRpb24s
IGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGl2KGxv
bmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0
cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5KiB2
YWx1ZSk7CisgICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29s
IHRyYW5zcG9zZSwgQ2FudmFzRmxvYXRBcnJheSogdmFsdWUpOworICAgICAgICB2b2lkIHVuaWZv
cm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIENhbnZhc0Zsb2F0QXJy
YXkqIHZhbHVlKTsKKwogICAgICAgICB2b2lkIHVzZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSopOwog
ICAgICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShDYW52YXNQcm9ncmFtKik7Ci0gICAgICAgIHZv
aWQgdmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjApOwotICAgICAgICB2
b2lkIHZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSk7
Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAs
IGZsb2F0IHYxLCBmbG9hdCB2Mik7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliKHVuc2lnbmVk
IGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpOwotICAg
ICAgICB2b2lkIHZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc051bWJlckFy
cmF5Kik7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGlu
ZHgsIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2ln
bmVkIGxvbmcgc3RyaWRlLCBDYW52YXNOdW1iZXJBcnJheSopOworCisgICAgICAgIHZvaWQgdmVy
dGV4QXR0cmliMWYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4KTsKKyAgICAgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5KiB2YWx1
ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxv
YXQgeCwgZmxvYXQgeSk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxv
bmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOwor
ICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zs
b2F0QXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGYodW5zaWduZWQg
bG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKKyAgICAgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5
KiB2YWx1ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9u
ZyBpbmR4LCBpbnQgc2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25n
IG9mZnNldCk7CisKICAgICAgICAgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwotICAgICAgICAKLSAgICAgICAg
UGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0KHVuc2lnbmVkIGxvbmcgcG5hbWUpOwot
ICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXRCdWZmZXJQYXJhbWV0ZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBQYXNz
UmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGdl
dFByb2dyYW0oQ2FudmFzUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBT
dHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coQ2FudmFzUHJvZ3JhbSopOwotICAgICAgICBQYXNzUmVm
UHRyPENhbnZhc051bWJlckFycmF5PiBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBQYXNzUmVmUHRyPENh
bnZhc051bWJlckFycmF5PiBnZXRTaGFkZXIoQ2FudmFzU2hhZGVyKiwgdW5zaWduZWQgbG9uZyBw
bmFtZSk7Ci0gICAgICAgIFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKENhbnZhc1NoYWRlciopOwot
ICAgICAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKENhbnZhc1NoYWRlciopOwotICAgICAgICAK
LSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0VGV4UGFyYW1ldGVyKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgUGFzc1Jl
ZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0VW5pZm9ybShDYW52YXNQcm9ncmFtKiwgbG9uZyBs
b2NhdGlvbiwgbG9uZyBzaXplKTsKLSAgICAgICAgbG9uZyBnZXRVbmlmb3JtTG9jYXRpb24oQ2Fu
dmFzUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2Fu
dmFzTnVtYmVyQXJyYXk+IGdldFZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNp
Z25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZXNlIG5leHQgNCBmdW5j
dGlvbnMgcmV0dXJuIGFuIGVycm9yIGNvZGUwIGlmIG5vIGVycm9ycykgcmF0aGVyIHRoYW4gdXNp
bmcgYW4gRXhjZXB0aW9uQ29kZS4KLSAgICAgICAgLy8gQ3VycmVudGx5IHRoZXkgcmV0dXJuIC0x
IG9uIGFueSBlcnJvci4KLSAgICAgICAgaW50IHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpOwotICAgICAgICBpbnQgdGV4
SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzKTsKLSAgICAgICAgaW50IHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpOwotICAgICAgICBp
bnQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25l
ZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBI
VE1MQ2FudmFzRWxlbWVudCogY2FudmFzKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICB2
b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICAgICAgCisgICAgICAgIC8v
IEhlbHBlcnMgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBwYWludCBldmVudHMKKyAgICAgICAgdm9p
ZCBiZWdpblBhaW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCk7CisgICAgICAg
IHZvaWQgZW5kUGFpbnQoKTsKKwogICAgICAgICAvLyBTdXBwb3J0IGZvciBidWZmZXIgY3JlYXRp
b24gYW5kIGRlbGV0aW9uCiAgICAgICAgIHVuc2lnbmVkIGNyZWF0ZUJ1ZmZlcigpOwogICAgICAg
ICB1bnNpZ25lZCBjcmVhdGVGcmFtZWJ1ZmZlcigpOwpAQCAtMjE0LDkgKzMwOCwxMyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZTogICAgICAgIAogICAgICAgICBpbnQgbV9jdXJy
ZW50V2lkdGgsIG1fY3VycmVudEhlaWdodDsKICAgICAgICAgCisjaWYgUExBVEZPUk0oU0tJQSkK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFNraWEuaCIKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oTUFDKQogICAgICAgICBWZWN0b3I8VmVjdG9yPGZsb2F0PiA+IG1fdmVydGV4QXJyYXk7CiAg
ICAgICAgIAotI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgQ0dMQ29udGV4dE9iaiBtX2NvbnRl
eHRPYmo7CiAgICAgICAgIEdMdWludCBtX3RleHR1cmU7CiAgICAgICAgIEdMdWludCBtX2ZibzsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c0NvbnRleHQzRE1hYy5jcHAJKHJldmlzaW9uIDQ4MTEwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwxMiArMzIsMTUgQEAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhbnZh
c0J1ZmZlci5oIgogI2luY2x1ZGUgIkNhbnZhc0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2Fu
dmFzTnVtYmVyQXJyYXkuaCIKKyNpbmNsdWRlICJDYW52YXNBcnJheS5oIgorI2luY2x1ZGUgIkNh
bnZhc0Zsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJDYW52YXNJbnRBcnJheS5oIgogI2luY2x1ZGUg
IkNhbnZhc09iamVjdC5oIgogI2luY2x1ZGUgIkNhbnZhc1Byb2dyYW0uaCIKICNpbmNsdWRlICJD
YW52YXNSZW5kZXJidWZmZXIuaCIKICNpbmNsdWRlICJDYW52YXNTaGFkZXIuaCIKICNpbmNsdWRl
ICJDYW52YXNUZXh0dXJlLmgiCisjaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaCIK
ICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCkBAIC0xMjEsNiArMTI0LDE1IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmUKICAgICBDR0xTZXRDdXJyZW50Q29udGV4
dChtX2NvbnRleHRPYmopOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KCkKK3sKK30K
Kwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
CiB7CiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJl
bnRIZWlnaHQpCkBAIC0yMDIsNyArMjE0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymlu
ZFJlbmRlcmJ1ZmZlcgogfQogCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJl
KHVuc2lnbmVkIHRhcmdldCwgQ2FudmFzVGV4dHVyZSogdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNUZXh0dXJl
KiB0ZXh0dXJlKQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6Omds
QmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlID8gKEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkg
OiAwKTsKQEAgLTIzOSw0NSArMjUxLDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5k
RnVuY1NlcGFyYXQKICAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNy
Y0FscGhhLCBkc3RBbHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRh
dGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc051bWJlckFycmF5KiBhcnJheSwgdW5zaWdu
ZWQgbG9uZyB1c2FnZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdlKQogewotICAgIGlm
ICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkuc2l6ZSgpKQorICAgIGVuc3VyZUNvbnRleHQobV9j
b250ZXh0T2JqKTsKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsK
K30KK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIENhbnZhc0FycmF5KiBhcnJheSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBpZiAo
IWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMg
YSBjb21wbGV0ZSBoYWNrLiBJZiB0aGUgdGFyZ2V0IGlzIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
IHRoZW4gdGhlCi0gICAgLy8gcGFzc2VkIGRhdGEgbmVlZHMgdG8gYmUgYnl0ZXMgb3Igc2hvcnRz
IGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBvbmx5IHR5cGVzIHN1cHBvcnRlZAotICAgIC8vIGJ5IEdM
IEVTIDIuMC4gU28gZm9yIG5vdyB3ZSBqdXN0IGNvbnZlcnQgdG8gYSBzaG9ydCBidWZmZXIKLSAg
ICBpZiAodGFyZ2V0ID09IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSKSB7Ci0gICAgICAgIHVpbnQx
Nl90KiBidWYgPSAodWludDE2X3QqKSBtYWxsb2MoYXJyYXktPmRhdGEoKS5zaXplKCkgKiBzaXpl
b2YodWludDE2X3QpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS0+ZGF0
YSgpLnNpemUoKTsgKytpKQotICAgICAgICAgICAgYnVmW2ldID0gKHVpbnQxNl90KSBhcnJheS0+
ZGF0YSgpW2ldOwotICAgICAgICAKLSAgICAgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBhcnJh
eS0+ZGF0YSgpLnNpemUoKSAqIHNpemVvZih1aW50MTZfdCksIGJ1ZiwgdXNhZ2UpOwotICAgICAg
ICBmcmVlKGJ1Zik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgOjpnbEJ1ZmZlckRhdGEodGFy
Z2V0LCBhcnJheS0+ZGF0YSgpLnNpemUoKSAqIHNpemVvZihmbG9hdCksICYoYXJyYXktPmRhdGEo
KVswXSksIHVzYWdlKTsKLSAgICAKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5LT5z
aXplSW5CeXRlcygpLCBhcnJheS0+YmFzZUFkZHJlc3MoKSwgdXNhZ2UpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25n
IG9mZnNldCwgQ2FudmFzTnVtYmVyQXJyYXkqIGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIENhbnZh
c0FycmF5KiBhcnJheSkKIHsKLSAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpLnNpemUo
KSkKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbEJ1ZmZlclN1
YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5LT5kYXRhKCkuc2l6ZSgpICogc2l6ZW9mKGZsb2F0
KSwgJihhcnJheS0+ZGF0YSgpWzBdKSk7CisgICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBv
ZmZzZXQsIGFycmF5LT5zaXplSW5CeXRlcygpLCBhcnJheS0+YmFzZUFkZHJlc3MoKSk7CiB9CiAK
LXVuc2lnbmVkIGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Q2FudmFzRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQordW5zaWduZWQgbG9uZyBHcmFwaGljc0Nv
bnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkKIHsK
LSAgICBpZiAoIWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgCiAgICAgZW5z
dXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIHJldHVybiA6OmdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1c0VYVCgoR0x1aW50KSBmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOworICAgIHJldHVybiA6
OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhckNvbG9yKGRvdWJsZSByLCBkb3VibGUgZywgZG91YmxlIGIsIGRvdWJs
ZSBhKQpAQCAtMzc2LDE2ICszNzYsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJs
ZVZlcnRleEF0dAogICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwg
bG9uZyBmaXJzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KQog
ewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6OmdsRHJhd0FycmF5cyht
b2RlLCBmaXJzdCwgY291bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxl
bWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBs
b25nIHR5cGUsIHZvaWQqIGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1l
bnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9u
ZyB0eXBlLCBsb25nIG9mZnNldCkKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
Ci0gICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgYXJyYXkpOworICAgIDo6
Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmVuYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKQEAgLTYzMCwxNTIgKzYzMCwxMzkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdAogICAgIDo6Z2xTdGVuY2ls
T3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1l
LCBDYW52YXNOdW1iZXJBcnJheSogYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQ
YXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHZhbHVlKQog
ewotICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1
cm47Ci0gICAgCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIDo6Z2xUZXhQ
YXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCAmKGFycmF5LT5kYXRhKClbMF0pKTsKKyAgICA6Omds
VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyKHVuc2lnbmVkIHRhcmdl
dCwgdW5zaWduZWQgcG5hbWUsIGRvdWJsZSB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHZhbHVl
KQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICA6OmdsVGV4UGFyYW1l
dGVyZih0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsKKyAgICA6Omds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybShsb25nIGxvY2F0aW9uLCBDYW52
YXNOdW1iZXJBcnJheSogYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYo
bG9uZyBsb2NhdGlvbiwgZmxvYXQgdjApCiB7Ci0gICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRh
dGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBlbnN1cmVDb250ZXh0KG1f
Y29udGV4dE9iaik7Ci0gICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LT5kYXRhKCku
c2l6ZSgpLCAmKGFycmF5LT5kYXRhKClbMF0pKTsKKyAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9u
LCB2MCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0obG9uZyBsb2NhdGlv
biwgZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KGxvbmcgbG9j
YXRpb24sIENhbnZhc0Zsb2F0QXJyYXkqIGFycmF5KQogewogICAgIGVuc3VyZUNvbnRleHQobV9j
b250ZXh0T2JqKTsKLSAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7CisgICAgOjpnbFVu
aWZvcm0xZnYobG9jYXRpb24sIGFycmF5LT5sZW5ndGgoKSwgc3RhdGljX2Nhc3Q8R0xmbG9hdCo+
KGFycmF5LT5iYXNlQWRkcmVzcygpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSkKIHsK
ICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgOjpnbFVuaWZvcm0yZihsb2Nh
dGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybShsb25n
IGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiBhcnJh
eSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgor
ICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsVW5pZm9ybTJmdihsb2Nh
dGlvbiwgYXJyYXktPmxlbmd0aCgpIC8gMiwgc3RhdGljX2Nhc3Q8R0xmbG9hdCo+KGFycmF5LT5i
YXNlQWRkcmVzcygpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihs
b25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQogewogICAgIGVuc3Vy
ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwg
djEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybShsb25nIGxvY2F0
aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSog
YXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDMKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFVuaWZvcm0zZnYo
bG9jYXRpb24sIGFycmF5LT5sZW5ndGgoKSAvIDMsIHN0YXRpY19jYXN0PEdMZmxvYXQqPihhcnJh
eS0+YmFzZUFkZHJlc3MoKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
NGYobG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMp
CiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIDo6Z2xVbmlmb3JtNGYo
bG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybShsb25nIGxvY2F0aW9uLCBpbnQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkqIGFycmF5KQoreworICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgZW5zdXJl
Q29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJh
eS0+bGVuZ3RoKCkgLyA0LCBzdGF0aWNfY2FzdDxHTGZsb2F0Kj4oYXJyYXktPmJhc2VBZGRyZXNz
KCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKGxvbmcgbG9jYXRp
b24sIGludCB2MCkKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgOjpn
bFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSogYXJyYXkpCit7
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xVbmlmb3JtMWl2KGxv
Y2F0aW9uLCBhcnJheS0+bGVuZ3RoKCksIHN0YXRpY19jYXN0PEdMaW50Kj4oYXJyYXktPmJhc2VB
ZGRyZXNzKCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKGxvbmcg
bG9jYXRpb24sIGludCB2MCwgaW50IHYxKQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0
T2JqKTsKICAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBp
bnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24s
IENhbnZhc0ludEFycmF5KiBhcnJheSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgMgorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAg
ICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXktPmxlbmd0aCgpIC8gMiwgc3RhdGljX2Nh
c3Q8R0xpbnQqPihhcnJheS0+YmFzZUFkZHJlc3MoKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2MikK
IHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgOjpnbFVuaWZvcm0zaShs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0obG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2MiwgaW50IHYzKQordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRBcnJh
eSogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDMKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFVuaWZvcm0z
aXYobG9jYXRpb24sIGFycmF5LT5sZW5ndGgoKSAvIDMsIHN0YXRpY19jYXN0PEdMaW50Kj4oYXJy
YXktPmJhc2VBZGRyZXNzKCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTRpKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBpbnQgdjIsIGludCB2MykKIHsKICAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgOjpnbFVuaWZvcm00aShsb2NhdGlv
biwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4KGxvbmcgbG9jYXRpb24sIGxvbmcgY291bnQsIGJvb2wgdHJhbnNwb3NlLCBDYW52YXNO
dW1iZXJBcnJheSogYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KGxv
bmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiBhcnJheSkKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgbmV2ZXIgaGF2ZSB0byBkZWFsIHdpdGggYmFkIHBhcmFtcy4gVGhleSBzaG91bGQg
YmUgY2hlY2tlZCBoaWdoZXIgYW5kIHRocm93IGV4Y2VwdGlvbnMKLSAgICBpZiAoIWFycmF5IHx8
ICFhcnJheS0+ZGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGludCBu
ID0gYXJyYXktPmRhdGEoKS5zaXplKCkgLyBjb3VudDsKLSAgICBpZiAobiA8IDIpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpZiAobiA+IDQpCi0gICAgICAgIG4gPSA0OwotICAgIAorICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0CiAgICAgZW5zdXJl
Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgIAotICAgIHN3aXRjaChuKSB7Ci0gICAgICAgIGNh
c2UgMjogOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsICYo
YXJyYXktPmRhdGEoKVswXSkpOyBicmVhazsKLSAgICAgICAgY2FzZSAzOiA6OmdsVW5pZm9ybU1h
dHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgJihhcnJheS0+ZGF0YSgpWzBdKSk7
IGJyZWFrOwotICAgICAgICBjYXNlIDQ6IDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBj
b3VudCwgdHJhbnNwb3NlLCAmKGFycmF5LT5kYXRhKClbMF0pKTsgYnJlYWs7Ci0gICAgfQorICAg
IDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS0+bGVuZ3RoKCkgLyA0LCBzdGF0aWNfY2Fz
dDxHTGludCo+KGFycmF5LT5iYXNlQWRkcmVzcygpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm1NYXRyaXgobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0
IFZlY3RvcjxXZWJLaXRDU1NNYXRyaXgqPiYgYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBDYW52YXNG
bG9hdEFycmF5KiBhcnJheSkKIHsKLSAgICBpbnQgY291bnQgPSBhcnJheS5zaXplKCk7Ci0gICAg
ZmxvYXQqIGZsb2F0cyA9IChmbG9hdCopIG1hbGxvYyhjb3VudCAqIDE2ICogc2l6ZW9mKGZsb2F0
KSk7Ci0gICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IGZsb2F0c1tpKjE2KyAwXSA9IHN0YXRpY19jYXN0PGZsb2F0PihhcnJheVtpXS0+bTExKCkpOwot
ICAgICAgICBmbG9hdHNbaSoxNisgMV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJyYXlbaV0tPm0x
MigpKTsKLSAgICAgICAgZmxvYXRzW2kqMTYrIDJdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFycmF5
W2ldLT5tMTMoKSk7Ci0gICAgICAgIGZsb2F0c1tpKjE2KyAzXSA9IHN0YXRpY19jYXN0PGZsb2F0
PihhcnJheVtpXS0+bTE0KCkpOwotICAgICAgICBmbG9hdHNbaSoxNisgNF0gPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oYXJyYXlbaV0tPm0yMSgpKTsKLSAgICAgICAgZmxvYXRzW2kqMTYrIDVdID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGFycmF5W2ldLT5tMjIoKSk7Ci0gICAgICAgIGZsb2F0c1tpKjE2KyA2
XSA9IHN0YXRpY19jYXN0PGZsb2F0PihhcnJheVtpXS0+bTIzKCkpOwotICAgICAgICBmbG9hdHNb
aSoxNisgN10gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJyYXlbaV0tPm0yNCgpKTsKLSAgICAgICAg
ZmxvYXRzW2kqMTYrIDhdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFycmF5W2ldLT5tMzEoKSk7Ci0g
ICAgICAgIGZsb2F0c1tpKjE2KyA5XSA9IHN0YXRpY19jYXN0PGZsb2F0PihhcnJheVtpXS0+bTMy
KCkpOwotICAgICAgICBmbG9hdHNbaSoxNisxMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJyYXlb
aV0tPm0zMygpKTsKLSAgICAgICAgZmxvYXRzW2kqMTYrMTFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFycmF5W2ldLT5tMzQoKSk7Ci0gICAgICAgIGZsb2F0c1tpKjE2KzEyXSA9IHN0YXRpY19jYXN0
PGZsb2F0PihhcnJheVtpXS0+bTQxKCkpOwotICAgICAgICBmbG9hdHNbaSoxNisxM10gPSBzdGF0
aWNfY2FzdDxmbG9hdD4oYXJyYXlbaV0tPm00MigpKTsKLSAgICAgICAgZmxvYXRzW2kqMTYrMTRd
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFycmF5W2ldLT5tNDMoKSk7Ci0gICAgICAgIGZsb2F0c1tp
KjE2KzE1XSA9IHN0YXRpY19jYXN0PGZsb2F0PihhcnJheVtpXS0+bTQ0KCkpOwotICAgIH0KLSAg
ICAKLSAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwg
ZmxvYXRzKTsKLSAgICBmcmVlKGZsb2F0cyk7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDQKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Cisg
ICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LT5sZW5ndGgoKSAvIDQsIHRy
YW5zcG9zZSwgc3RhdGljX2Nhc3Q8R0xmbG9hdCo+KGFycmF5LT5iYXNlQWRkcmVzcygpKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgobG9uZyBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIGNvbnN0IFdlYktpdENTU01hdHJpeCogbWF0cml4KQordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5z
cG9zZSwgQ2FudmFzRmxvYXRBcnJheSogYXJyYXkpCiB7Ci0gICAgZmxvYXQqIGZsb2F0cyA9IChm
bG9hdCopIG1hbGxvYygxNiAqIHNpemVvZihmbG9hdCkpOwotICAgIAotICAgIGZsb2F0c1sgMF0g
PSBzdGF0aWNfY2FzdDxmbG9hdD4obWF0cml4LT5tMTEoKSk7Ci0gICAgZmxvYXRzWyAxXSA9IHN0
YXRpY19jYXN0PGZsb2F0PihtYXRyaXgtPm0xMigpKTsKLSAgICBmbG9hdHNbIDJdID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1hdHJpeC0+bTEzKCkpOwotICAgIGZsb2F0c1sgM10gPSBzdGF0aWNfY2Fz
dDxmbG9hdD4obWF0cml4LT5tMTQoKSk7Ci0gICAgZmxvYXRzWyA0XSA9IHN0YXRpY19jYXN0PGZs
b2F0PihtYXRyaXgtPm0yMSgpKTsKLSAgICBmbG9hdHNbIDVdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1hdHJpeC0+bTIyKCkpOwotICAgIGZsb2F0c1sgNl0gPSBzdGF0aWNfY2FzdDxmbG9hdD4obWF0
cml4LT5tMjMoKSk7Ci0gICAgZmxvYXRzWyA3XSA9IHN0YXRpY19jYXN0PGZsb2F0PihtYXRyaXgt
Pm0yNCgpKTsKLSAgICBmbG9hdHNbIDhdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1hdHJpeC0+bTMx
KCkpOwotICAgIGZsb2F0c1sgOV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4obWF0cml4LT5tMzIoKSk7
Ci0gICAgZmxvYXRzWzEwXSA9IHN0YXRpY19jYXN0PGZsb2F0PihtYXRyaXgtPm0zMygpKTsKLSAg
ICBmbG9hdHNbMTFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1hdHJpeC0+bTM0KCkpOwotICAgIGZs
b2F0c1sxMl0gPSBzdGF0aWNfY2FzdDxmbG9hdD4obWF0cml4LT5tNDEoKSk7Ci0gICAgZmxvYXRz
WzEzXSA9IHN0YXRpY19jYXN0PGZsb2F0PihtYXRyaXgtPm00MigpKTsKLSAgICBmbG9hdHNbMTRd
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1hdHJpeC0+bTQzKCkpOwotICAgIGZsb2F0c1sxNV0gPSBz
dGF0aWNfY2FzdDxmbG9hdD4obWF0cml4LT5tNDQoKSk7Ci0gICAgCi0gICAgOjpnbFVuaWZvcm1N
YXRyaXg0ZnYobG9jYXRpb24sIDEsIHRyYW5zcG9zZSwgZmxvYXRzKTsKLSAgICBmcmVlKGZsb2F0
cyk7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkKKyAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYo
bG9jYXRpb24sIGFycmF5LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9zZSwgc3RhdGljX2Nhc3Q8R0xm
bG9hdCo+KGFycmF5LT5iYXNlQWRkcmVzcygpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIENhbnZh
c0Zsb2F0QXJyYXkqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiAxNgorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6
OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXktPmxlbmd0aCgpIC8gMTYsIHRyYW5z
cG9zZSwgc3RhdGljX2Nhc3Q8R0xmbG9hdCo+KGFycmF5LT5iYXNlQWRkcmVzcygpKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3Jh
bSkKQEAgLTc5Niw1NSArNzgzLDU4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRl
UHJvZ3JhbSgKICAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVj
dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliKHVuc2lnbmVk
IGxvbmcgaW5keCwgZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIxZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwKQogewogICAgIGVuc3VyZUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKICAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5keCwgdjApOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4LCBm
bG9hdCB2MCwgZmxvYXQgdjEpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIx
ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5KiBhcnJheSkKK3sKKyAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmR4
LCBzdGF0aWNfY2FzdDxHTGZsb2F0Kj4oYXJyYXktPmJhc2VBZGRyZXNzKCkpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmR4LCBm
bG9hdCB2MCwgZmxvYXQgdjEpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwog
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmR4LCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxv
YXQgdjEsIGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2
KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogYXJyYXkpCit7CisgICAgZW5z
dXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5keCwg
c3RhdGljX2Nhc3Q8R0xmbG9hdCo+KGFycmF5LT5iYXNlQWRkcmVzcygpKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxv
YXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4
dE9iaik7CiAgICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZHgsIHYwLCB2MSwgdjIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4LCBm
bG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zsb2F0QXJy
YXkqIGFycmF5KQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICA6Omds
VmVydGV4QXR0cmliNGYoaW5keCwgdjAsIHYxLCB2MiwgdjMpOworICAgIDo6Z2xWZXJ0ZXhBdHRy
aWIzZnYoaW5keCwgc3RhdGljX2Nhc3Q8R0xmbG9hdCo+KGFycmF5LT5iYXNlQWRkcmVzcygpKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25n
IGluZHgsIENhbnZhc051bWJlckFycmF5KiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBm
bG9hdCB2MiwgZmxvYXQgdjMpCiB7Ci0gICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKS5z
aXplKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBGSVhNRTogSG93IGRvIHdlIGRl
Y2lkZSBiZXR3ZWVuIDFmdiAuLiA0ZnY/CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmop
OwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5keCwgJihhcnJheS0+ZGF0YSgpWzBdKSk7Cisg
ICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2Fu
dmFzRmxvYXRBcnJheSogYXJyYXkpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmop
OworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgc3RhdGljX2Nhc3Q8R0xmbG9hdCo+KGFy
cmF5LT5iYXNlQWRkcmVzcygpKSk7Cit9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxv
bmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgQ2FudmFzTnVt
YmVyQXJyYXkqIGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9p
bnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXplLCBpbnQgdHlwZSwgYm9vbCBub3JtYWxp
emVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAgICAg
ZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIAotICAgIGlmIChhcnJheSkgewotICAg
ICAgICBpZiAobV92ZXJ0ZXhBcnJheS5zaXplKCkgPD0gaW5keCkKLSAgICAgICAgICAgIG1fdmVy
dGV4QXJyYXkucmVzaXplKGluZHgrMSk7Ci0gICAgICAgIAotICAgICAgICBtX3ZlcnRleEFycmF5
W2luZHhdID0gYXJyYXktPmRhdGEoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobV92ZXJ0ZXhBcnJh
eS5zaXplKCkgPiBpbmR4KQotICAgICAgICBtX3ZlcnRleEFycmF5W2luZHhdLmNsZWFyKCk7Ci0g
ICAgCi0gICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFs
aXplZCwgc3RyaWRlLCBhcnJheSA/ICYobV92ZXJ0ZXhBcnJheVtpbmR4XVswXSkgOiAwKTsKKyAg
ICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBz
dHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZz
ZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKQEAgLTk0NSw5
OSArOTM1LDM0IEBAIHN0YXRpYyBpbnQgc2l6ZUZvckdldFBhcmFtKHVuc2lnbmVkIGxvbmcKICAg
ICByZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgdHlwZUZvckdldFBhcmFtKHVuc2lnbmVkIGxv
bmcgcG5hbWUpCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFuKHVuc2lnbmVkIGxv
bmcgcG5hbWUpCiB7Ci0gICAgc3dpdGNoKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR0xfQUNUSVZF
X1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBH
TF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6ICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAg
ICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOiAgICAgICAgcmV0dXJuIEdMX0ZM
T0FUOwotICAgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAg
ICAgICAgcmV0dXJuIEdMX0lOVDsgLy8gKCogYWN0dWFsbHkgYSBDYW52YXNCdWZmZXIqKQotICAg
ICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9C
WVRFOwotICAgICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9GTE9BVDsKLSAgICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6ICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfSU5UOwotICAgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6ICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfQkxFTkRfRVFV
QVRJT05fQUxQSEE6ICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBHTF9C
TEVORF9FUVVBVElPTl9SR0I6ICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOwotICAgICAgICBj
YXNlIEdMX0JMRU5EX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0g
ICAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0lOVDsKLSAgICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfSU5UOwotICAgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOiAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQllURTsKLSAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1RFWFRVUkVfRk9STUFUUzogICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xf
Q1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0JZVEU7Ci0gICAgICAg
IGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsK
LSAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfSU5UOyAvLyAoKiBhY3R1YWxseSBhIENhbnZhc1Byb2dyYW0qKQotICAgICAgICBjYXNlIEdM
X0RFUFRIX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAg
IGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FU
OwotICAgICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6ICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9CWVRFOwotICAgICAgICBjYXNlIEdMX0RFUFRIX1dSSVRF
TUFTSzogICAgICAgICAgICAgICAgIHJldHVybiBHTF9CWVRFOwotICAgICAgICBjYXNlIEdMX0RJ
VEhFUjogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9CWVRFOwotICAgICAgICBj
YXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgIHJldHVybiBHTF9JTlQ7IC8v
ICgqIGFjdHVhbGx5IGEgQ2FudmFzQnVmZmVyKikKLSAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZF
Ul9CSU5ESU5HX0VYVDogICAgICAgICByZXR1cm4gR0xfSU5UOyAvLyAoKiBhY3R1YWxseSBhIENh
bnZhc0ZyYW1lYnVmZmVyKikKLSAgICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfSU5UOwotICAgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1B
UF9ISU5UOiAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfR1JFRU5f
QklUUzogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgICAgIC8v
Y2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDpyZXR1cm4gR0xfSU5UOwot
ICAgICAgICAgICAgLy9jYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTogIHJl
dHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTOnJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfTUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRTogICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgICAgIC8vY2Fz
ZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICByZXR1cm4gR0xfSU5UOwotICAg
ICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRV9FWFQ6ICAgICAgIHJldHVybiBHTF9J
TlQ7Ci0gICAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgcmV0
dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfSU5UOwotICAgICAgICAgICAgLy9jYXNlIEdMX01BWF9WQVJZSU5HX1ZF
Q1RPUlM6ICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfTUFYX1ZF
UlRFWF9BVFRSSUJTOiAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBH
TF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICByZXR1cm4gR0xfSU5UOwotICAgICAg
ICAgICAgLy9jYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOiAgICAgIHJldHVybiBH
TF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6ICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZP
Uk1BVFM6ICByZXR1cm4gR0xfSU5UOwotICAgICAgICAgICAgLy9jYXNlIEdMX05VTV9TSEFERVJf
QklOQVJZX0ZPUk1BVFM6ICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfUEFD
S19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6ICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0g
ICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAgICAgICAgcmV0dXJuIEdM
X0JZVEU7Ci0gICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6ICAgICAgICAgICAg
cmV0dXJuIEdMX0ZMT0FUOwotICAgICAgICBjYXNlIEdMX1JFRF9CSVRTOiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJ
TkRJTkdfRVhUOiAgICAgICAgcmV0dXJuIEdMX0lOVDsgLy8gKCogYWN0dWFsbHkgYSBDYW52YXNS
ZW5kZXJidWZmZXIqKQotICAgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lO
VkVSVDogICAgICAgICAgcmV0dXJuIEdMX0JZVEU7Ci0gICAgICAgIGNhc2UgR0xfU0FNUExFX0NP
VkVSQUdFX1ZBTFVFOiAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAgICBjYXNlIEdM
X1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAg
IGNhc2UgR0xfU0NJU1NPUl9CT1g6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsK
LSAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfQllURTsKLSAgICAgICAgICAgIC8vY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAg
ICAgICAgICByZXR1cm4gR0xfSU5UOwotICAgICAgICAgICAgLy9jYXNlIEdMX1NIQURFUl9DT01Q
SUxFUjogICAgICAgICAgICAgICAgIHJldHVybiBHTF9CWVRFOwotICAgICAgICBjYXNlIEdMX1NU
RU5DSUxfQkFDS19GQUlMOiAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNh
c2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAg
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOiAgICByZXR1cm4gR0xf
SU5UOwotICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgIHJl
dHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVf
TUFTSzogICAgICAgICByZXR1cm4gR0xfSU5UOwotICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFD
S19XUklURU1BU0s6ICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CSVRTOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOiAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOwotICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDogICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9J
TlQ7Ci0gICAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDogICAg
ICAgICByZXR1cm4gR0xfSU5UOwotICAgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9Q
QVNTOiAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1RFU1Q6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQllURTsKLSAgICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6ICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOwotICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgIHJldHVybiBHTF9J
TlQ7Ci0gICAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6ICAgICAgICAg
ICAgICByZXR1cm4gR0xfSU5UOyAvLyAoKiBhY3R1YWxseSBhIENhbnZhc1RleHR1cmUqKQotICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDogICAgICAgIHJldHVybiBHTF9J
TlQ7IC8vICgqIGFjdHVhbGx5IGEgQ2FudmFzVGV4dHVyZSopCi0gICAgICAgIGNhc2UgR0xfVU5Q
QUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2Fz
ZSBHTF9WSUVXUE9SVDogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAg
IGludCBzaXplID0gc2l6ZUZvckdldFBhcmFtKHBuYW1lKTsKKyAgICBpZiAoc2l6ZSA8IDEpIAor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
CisgICAgCisgICAgYm9vbCBpc0FsbG9jZWQgPSBmYWxzZTsKKyAgICBHTGJvb2xlYW4gYnVmWzRd
OworICAgIEdMYm9vbGVhbiogcGJ1ZiA9IGJ1ZjsKKyAgICAgICAgICAgIAorICAgIGlmIChzaXpl
ID4gNCkgeworICAgICAgICBwYnVmID0gKEdMYm9vbGVhbiopIG1hbGxvYyhzaXplICogc2l6ZW9m
KEdMYm9vbGVhbikpOworICAgICAgICBpc0FsbG9jZWQgPSB0cnVlOwogICAgIH0KKyAgICAgICAg
ICAgIAorICAgIDo6Z2xHZXRCb29sZWFudihwbmFtZSwgcGJ1Zik7CiAgICAgCi0gICAgcmV0dXJu
IC0xOworICAgIGJvb2wgdmFsdWUgPSBwYnVmWzBdOworCisgICAgaWYgKGlzQWxsb2NlZCkKKyAg
ICAgICAgZnJlZShwYnVmKTsKKyAgICAKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVBhc3NSZWZQ
dHI8Q2FudmFzTnVtYmVyQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXQodW5zaWduZWQgbG9u
ZyBwbmFtZSkKK1Bhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIGludCBzaXpl
ID0gc2l6ZUZvckdldFBhcmFtKHBuYW1lKTsKICAgICBpZiAoc2l6ZSA8IDEpIApAQCAtMTA0NSwx
MDQgKzk3MCwxOTIgQEAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gR3JhcGhpY3NDbwog
ICAgIAogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAKLSAgICBSZWZQdHI8
Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gQ2FudmFzTnVtYmVyQXJyYXk6OmNyZWF0ZShzaXpl
KTsKKyAgICBSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gQ2FudmFzVW5z
aWduZWRCeXRlQXJyYXk6OmNyZWF0ZShzaXplKTsKICAgICBib29sIGlzQWxsb2NlZCA9IGZhbHNl
OwotICAgIAotICAgIHN3aXRjaCh0eXBlRm9yR2V0UGFyYW0ocG5hbWUpKSB7Ci0gICAgICAgIGNh
c2UgR0xfSU5UOiB7Ci0gICAgICAgICAgICBHTGludCBidWZbNF07Ci0gICAgICAgICAgICBHTGlu
dCogcGJ1ZiA9IGJ1ZjsKKyAgICBHTGJvb2xlYW4gYnVmWzRdOworICAgIEdMYm9vbGVhbiogcGJ1
ZiA9IGJ1ZjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNpemUgPiA0KSB7Ci0gICAg
ICAgICAgICAgICAgcGJ1ZiA9IChHTGludCopIG1hbGxvYyhzaXplICogc2l6ZW9mKEdMaW50KSk7
Ci0gICAgICAgICAgICAgICAgaXNBbGxvY2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KKyAgICBp
ZiAoc2l6ZSA+IDQpIHsKKyAgICAgICAgcGJ1ZiA9IChHTGJvb2xlYW4qKSBtYWxsb2Moc2l6ZSAq
IHNpemVvZihHTGJvb2xlYW4pKTsKKyAgICAgICAgaXNBbGxvY2VkID0gdHJ1ZTsKKyAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgcGJ1Zik7Cisg
ICAgOjpnbEdldEJvb2xlYW52KHBuYW1lLCBwYnVmKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgYXJyYXkt
PmRhdGEoKVtpXSA9IHN0YXRpY19jYXN0PGZsb2F0PihwYnVmW2ldKTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgYXJyYXktPnNldChpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihwYnVmW2ldKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChp
c0FsbG9jZWQpCi0gICAgICAgICAgICAgICAgZnJlZShwYnVmKTsKKyAgICBpZiAoaXNBbGxvY2Vk
KQorICAgICAgICBmcmVlKHBidWYpOworICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKworZmxv
YXQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0KHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7Cisg
ICAgaW50IHNpemUgPSBzaXplRm9yR2V0UGFyYW0ocG5hbWUpOworICAgIGlmIChzaXplIDwgMSkg
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2Jq
KTsKKyAgICAKKyAgICBib29sIGlzQWxsb2NlZCA9IGZhbHNlOworICAgIEdMZmxvYXQgYnVmWzRd
OworICAgIEdMZmxvYXQqIHBidWYgPSBidWY7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0xfRkxPQVQ6IHsKLSAgICAgICAgICAgIEdM
ZmxvYXQgYnVmWzRdOwotICAgICAgICAgICAgR0xmbG9hdCogcGJ1ZiA9IGJ1ZjsKKyAgICBpZiAo
c2l6ZSA+IDQpIHsKKyAgICAgICAgcGJ1ZiA9IChHTGZsb2F0KikgbWFsbG9jKHNpemUgKiBzaXpl
b2YoR0xmbG9hdCkpOworICAgICAgICBpc0FsbG9jZWQgPSB0cnVlOworICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKHNpemUgPiA0KSB7Ci0gICAgICAgICAgICAgICAgcGJ1ZiA9
IChHTGZsb2F0KikgbWFsbG9jKHNpemUgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAgICAgICAg
ICAgIGlzQWxsb2NlZCA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAgOjpnbEdldEZsb2F0dihw
bmFtZSwgcGJ1Zik7CisgICAgCisgICAgZmxvYXQgdmFsdWUgPSBwYnVmWzBdOworCisgICAgaWYg
KGlzQWxsb2NlZCkKKyAgICAgICAgZnJlZShwYnVmKTsKKyAgICAKKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIGludCBzaXplID0gc2l6ZUZvckdl
dFBhcmFtKHBuYW1lKTsKKyAgICBpZiAoc2l6ZSA8IDEpIAorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgCisgICAgUmVmUHRyPENh
bnZhc0Zsb2F0QXJyYXk+IGFycmF5ID0gQ2FudmFzRmxvYXRBcnJheTo6Y3JlYXRlKHNpemUpOwor
ICAgIGJvb2wgaXNBbGxvY2VkID0gZmFsc2U7CisgICAgR0xmbG9hdCBidWZbNF07CisgICAgR0xm
bG9hdCogcGJ1ZiA9IGJ1ZjsKKyAgICAgICAgICAgIAorICAgIGlmIChzaXplID4gNCkgeworICAg
ICAgICBwYnVmID0gKEdMZmxvYXQqKSBtYWxsb2Moc2l6ZSAqIHNpemVvZihHTGZsb2F0KSk7Cisg
ICAgICAgIGlzQWxsb2NlZCA9IHRydWU7CisgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICA6OmdsR2V0RmxvYXR2KHBuYW1lLCBwYnVmKTsKKyAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCBw
YnVmKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCi0gICAgICAgICAgICAgICAgYXJyYXktPmRhdGEoKVtpXSA9IHN0YXRpY19jYXN0PGZs
b2F0PihwYnVmW2ldKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAg
ICAgYXJyYXktPnNldChpLCBzdGF0aWNfY2FzdDxmbG9hdD4ocGJ1ZltpXSkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoaXNBbGxvY2VkKQotICAgICAgICAgICAgICAgIGZyZWUocGJ1
Zik7CisgICAgaWYgKGlzQWxsb2NlZCkKKyAgICAgICAgZnJlZShwYnVmKTsKKyAgICAKKyAgICBy
ZXR1cm4gYXJyYXk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcih1bnNp
Z25lZCBsb25nIHBuYW1lKQoreworICAgIGludCBzaXplID0gc2l6ZUZvckdldFBhcmFtKHBuYW1l
KTsKKyAgICBpZiAoc2l6ZSA8IDEpIAorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBlbnN1
cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgCisgICAgYm9vbCBpc0FsbG9jZWQgPSBmYWxz
ZTsKKyAgICBHTGludCBidWZbNF07CisgICAgR0xpbnQqIHBidWYgPSBidWY7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0xfQllURTog
ewotICAgICAgICAgICAgR0xib29sZWFuIGJ1Zls0XTsKLSAgICAgICAgICAgIEdMYm9vbGVhbiog
cGJ1ZiA9IGJ1ZjsKKyAgICBpZiAoc2l6ZSA+IDQpIHsKKyAgICAgICAgcGJ1ZiA9IChHTGludCop
IG1hbGxvYyhzaXplICogc2l6ZW9mKEdMaW50KSk7CisgICAgICAgIGlzQWxsb2NlZCA9IHRydWU7
CisgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2l6ZSA+IDQpIHsKLSAgICAg
ICAgICAgICAgICBwYnVmID0gKEdMYm9vbGVhbiopIG1hbGxvYyhzaXplICogc2l6ZW9mKEdMYm9v
bGVhbikpOwotICAgICAgICAgICAgICAgIGlzQWxsb2NlZCA9IHRydWU7Ci0gICAgICAgICAgICB9
CisgICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCBwYnVmKTsKKyAgICAKKyAgICBpbnQgdmFsdWUg
PSBwYnVmWzBdOworCisgICAgaWYgKGlzQWxsb2NlZCkKKyAgICAgICAgZnJlZShwYnVmKTsKKyAg
ICAKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydih1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAg
IGludCBzaXplID0gc2l6ZUZvckdldFBhcmFtKHBuYW1lKTsKKyAgICBpZiAoc2l6ZSA8IDEpIAor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
CisgICAgCisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IENhbnZhc0ludEFycmF5
OjpjcmVhdGUoc2l6ZSk7CisgICAgYm9vbCBpc0FsbG9jZWQgPSBmYWxzZTsKKyAgICBHTGludCBi
dWZbNF07CisgICAgR0xpbnQqIHBidWYgPSBidWY7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IDo6Z2xHZXRCb29sZWFudihwbmFtZSwgcGJ1Zik7CisgICAgaWYgKHNpemUgPiA0KSB7CisgICAg
ICAgIHBidWYgPSAoR0xpbnQqKSBtYWxsb2Moc2l6ZSAqIHNpemVvZihHTGludCkpOworICAgICAg
ICBpc0FsbG9jZWQgPSB0cnVlOworICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgYXJyYXktPmRhdGEo
KVtpXSA9IHN0YXRpY19jYXN0PGZsb2F0PihwYnVmW2ldKTsKKyAgICA6OmdsR2V0SW50ZWdlcnYo
cG5hbWUsIHBidWYpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNBbGxvY2VkKQot
ICAgICAgICAgICAgICAgIGZyZWUocGJ1Zik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCisgICAgICAgIGFycmF5LT5zZXQoaSwgc3RhdGljX2Nhc3Q8aW50PihwYnVmW2ldKSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAg
IGlmIChpc0FsbG9jZWQpCisgICAgICAgIGZyZWUocGJ1Zik7CiAgICAgCiAgICAgcmV0dXJuIGFy
cmF5OwogfQogCi1QYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QnVmZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHBuYW1lKQoraW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKKyAgICBHTGludCBkYXRhOworICAgIDo6Z2xHZXRCdWZmZXJQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmZGF0YSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1Bh
c3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJh
bWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgUmVmUHRyPENhbnZhc051bWJlckFy
cmF5PiBhcnJheSA9IENhbnZhc051bWJlckFycmF5OjpjcmVhdGUoMSk7CisgICAgUmVmUHRyPENh
bnZhc0ludEFycmF5PiBhcnJheSA9IENhbnZhc0ludEFycmF5OjpjcmVhdGUoMSk7CiAgICAgR0xp
bnQgZGF0YTsKICAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJmRh
dGEpOwotICAgIGFycmF5LT5kYXRhKClbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oZGF0YSk7Cisg
ICAgYXJyYXktPnNldCgwLCBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEpKTsKICAgICAKICAgICByZXR1
cm4gYXJyYXk7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK2lu
dCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBs
b25nIHBuYW1lKQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBSZWZQ
dHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gQ2FudmFzTnVtYmVyQXJyYXk6OmNyZWF0ZSgx
KTsKICAgICBHTGludCBkYXRhOwogICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmZGF0YSk7Ci0gICAgYXJyYXkt
PmRhdGEoKVswXSA9IHN0YXRpY19jYXN0PGZsb2F0PihkYXRhKTsKKyAgICByZXR1cm4gZGF0YTsK
K30KKworUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgZW5zdXJl
Q29udGV4dChtX2NvbnRleHRPYmopOworICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkg
PSBDYW52YXNJbnRBcnJheTo6Y3JlYXRlKDEpOworICAgIEdMaW50IGRhdGE7CisgICAgOjpnbEdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwg
cG5hbWUsICZkYXRhKTsKKyAgICBhcnJheS0+c2V0KDAsIHN0YXRpY19jYXN0PGludD4oZGF0YSkp
OwogICAgIAogICAgIHJldHVybiBhcnJheTsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJB
cnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3Jh
bSwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3Jh
bWkoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBp
ZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiAwOwotICAgIAogICAgIGVuc3VyZUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKLSAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gQ2Fu
dmFzTnVtYmVyQXJyYXk6OmNyZWF0ZSgxKTsKICAgICBHTGludCBkYXRhOwogICAgIDo6Z2xHZXRQ
cm9ncmFtaXYoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIHBuYW1lLCAmZGF0YSk7Ci0gICAg
YXJyYXktPmRhdGEoKVswXSA9IHN0YXRpY19jYXN0PGZsb2F0PihkYXRhKTsKKyAgICByZXR1cm4g
ZGF0YTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFByb2dyYW1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1l
KQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBSZWZQdHI8Q2FudmFz
SW50QXJyYXk+IGFycmF5ID0gQ2FudmFzSW50QXJyYXk6OmNyZWF0ZSgxKTsKKyAgICBHTGludCBk
YXRhOworICAgIDo6Z2xHZXRQcm9ncmFtaXYoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIHBu
YW1lLCAmZGF0YSk7CisgICAgYXJyYXktPnNldCgwLCBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEpKTsK
ICAgICAKICAgICByZXR1cm4gYXJyYXk7CiB9CkBAIC0xMTY0LDI3ICsxMTc3LDQ2IEBAIFN0cmlu
ZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm8KICAgICByZXR1cm4gczsKIH0KIAot
UGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSkKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9
IENhbnZhc051bWJlckFycmF5OjpjcmVhdGUoMSk7CiAgICAgR0xpbnQgZGF0YTsKICAgICA6Omds
R2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJmRhdGEpOwotICAgIGFycmF5LT5k
YXRhKClbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oZGF0YSk7CisgICAgcmV0dXJuIGRhdGE7Cit9
CisKK1Bhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBw
bmFtZSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgUmVmUHRyPENh
bnZhc0ludEFycmF5PiBhcnJheSA9IENhbnZhc0ludEFycmF5OjpjcmVhdGUoMSk7CisgICAgR0xp
bnQgZGF0YTsKKyAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJmRh
dGEpOworICAgIGFycmF5LT5zZXQoMCwgc3RhdGljX2Nhc3Q8aW50PihkYXRhKSk7CiAgICAgCiAg
ICAgcmV0dXJuIGFycmF5OwogfQogCi1QYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyKENhbnZhc1NoYWRlciogc2hhZGVyLCB1bnNpZ25lZCBs
b25nIHBuYW1lKQoraW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpKENhbnZhc1NoYWRl
ciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIGlmICghc2hhZGVyKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Cisg
ICAgR0xpbnQgZGF0YTsKKyAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVyLT5vYmpl
Y3QoKSwgcG5hbWUsICZkYXRhKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworUGFzc1JlZlB0cjxD
YW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KENhbnZhc1NoYWRl
ciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIGlmICghc2hhZGVyKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0g
ICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IENhbnZhc051bWJlckFycmF5Ojpj
cmVhdGUoMSk7CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IENhbnZhc0ludEFy
cmF5OjpjcmVhdGUoMSk7CiAgICAgR0xpbnQgZGF0YTsKICAgICA6OmdsR2V0U2hhZGVyaXYoKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSwgcG5hbWUsICZkYXRhKTsKLSAgICBhcnJheS0+ZGF0YSgp
WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhdGEpOworICAgIGFycmF5LT5zZXQoMCwgc3RhdGlj
X2Nhc3Q8aW50PihkYXRhKSk7CiAgICAgCiAgICAgcmV0dXJuIGFycmF5OwogfQpAQCAtMTIyNCwz
NiArMTI1Niw4MCBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjCiB9
CiAKIAotUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFRleFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkK
K2Zsb2F0IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKKyAgICBHTGZsb2F0IGRhdGE7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRh
cmdldCwgcG5hbWUsICZkYXRhKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworUGFzc1JlZlB0cjxD
YW52YXNGbG9hdEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7CiAgICAgZW5zdXJlQ29u
dGV4dChtX2NvbnRleHRPYmopOwotICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gYXJyYXkg
PSBDYW52YXNOdW1iZXJBcnJheTo6Y3JlYXRlKDEpOworICAgIFJlZlB0cjxDYW52YXNGbG9hdEFy
cmF5PiBhcnJheSA9IENhbnZhc0Zsb2F0QXJyYXk6OmNyZWF0ZSgxKTsKICAgICBHTGZsb2F0IGRh
dGE7CiAgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZkYXRhKTsKLSAg
ICBhcnJheS0+ZGF0YSgpWzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhdGEpOworICAgIGFycmF5
LT5zZXQoMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhdGEpKTsKICAgICAKICAgICByZXR1cm4gYXJy
YXk7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRVbmlmb3JtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGxvbmcg
c2l6ZSkKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBpZiAoIXByb2dyYW0pCi0g
ICAgICAgIHJldHVybiAwOwotICAgIAogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
LSAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gQ2FudmFzTnVtYmVyQXJyYXk6
OmNyZWF0ZShzaXplKTsKLSAgICAKLSAgICAvLyB0byBhdm9pZCBjcmFzaGVzLCBsZXQncyBnZXQg
aW50byBhIGJ1ZmZlciB0aGF0IHdpbGwgYWx3YXlzIGJlIGJpZyBlbm91Z2gKLSAgICBHTGZsb2F0
IGRhdGFbMTZdOwotICAgIDo6Z2xHZXRVbmlmb3JtZnYoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0
KCksIGxvY2F0aW9uLCBkYXRhKTsKLSAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgYXJyYXktPmRhdGEoKVtpXSA9IHN0YXRpY19jYXN0PGZsb2F0PihkYXRh
W2ldKTsKLSAgICAKKyAgICBHTGludCBkYXRhOworICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCAmZGF0YSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1Bhc3NSZWZQdHI8
Q2FudmFzSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IENh
bnZhc0ludEFycmF5OjpjcmVhdGUoMSk7CisgICAgR0xpbnQgZGF0YTsKKyAgICA6OmdsR2V0VGV4
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJmRhdGEpOworICAgIGFycmF5LT5zZXQoMCwgc3Rh
dGljX2Nhc3Q8aW50PihkYXRhKSk7CiAgICAgCiAgICAgcmV0dXJuIGFycmF5OwogfQogCitmbG9h
dCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwg
bG9uZyBsb2NhdGlvbikKK3sKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBxdWVyeSBnbEdldFVu
aWZvcm1Mb2NhdGlvbiB0byBkZXRlcm1pbmUgdGhlIHNpemUgbmVlZGVkCisgICAgVU5VU0VEX1BB
UkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5
PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KENhbnZhc1Byb2dyYW0qIHByb2dyYW0s
IGxvbmcgbG9jYXRpb24pCit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcXVlcnkgZ2xHZXRV
bmlmb3JtTG9jYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG5lZWRlZAorICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VW5pZm9ybWkoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikKK3sKKyAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byBxdWVyeSBnbEdldFVuaWZvcm1Mb2NhdGlvbiB0byBkZXRlcm1p
bmUgdGhlIHNpemUgbmVlZGVkCisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQoreworICAgIC8v
IEZJWE1FOiBXZSBuZWVkIHRvIHF1ZXJ5IGdsR2V0VW5pZm9ybUxvY2F0aW9uIHRvIGRldGVybWlu
ZSB0aGUgc2l6ZSBuZWVkZWQKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VE
X1BBUkFNKGxvY2F0aW9uKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCiBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oQ2FudmFzUHJv
Z3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmICghcHJvZ3JhbSkK
QEAgLTEyNzgsMjIgKzEzNTQsMTUgQEAgc3RhdGljIGludCBzaXplRm9yR2V0VmVydGV4QXR0cmli
UGFyYW0odQogICAgIHJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCB0eXBlRm9yR2V0VmVydGV4
QXR0cmliUGFyYW0odW5zaWduZWQgbG9uZyBwbmFtZSkKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRWZXJ0ZXhBdHRyaWJmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5h
bWUpCiB7Ci0gICAgc3dpdGNoKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9CVUZGRVJfQklORElORzogICAgIHJldHVybiBHTF9JTlQ7IC8vICgqIGFjdHVhbGx5
IGEgQ2FudmFzQnVmZmVyKikKLSAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VO
QUJMRUQ6ICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX1NJWkU6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAg
Y2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERTogICAgICAgICAgICAgcmV0dXJuIEdM
X0lOVDsKLSAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6ICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X05PUk1BTElaRUQ6ICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgY2FzZSBHTF9DVVJS
RU5UX1ZFUlRFWF9BVFRSSUI6ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gLTE7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmop
OworICAgIEdMZmxvYXQgYnVmWzRdOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwg
cG5hbWUsIGJ1Zik7CisgICAgcmV0dXJuIGJ1ZlswXTsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNO
dW1iZXJBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYih1bnNpZ25lZCBs
b25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFy
cmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBp
bmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBpbnQgc2l6ZSA9IHNpemVGb3JHZXRW
ZXJ0ZXhBdHRyaWJQYXJhbShwbmFtZSk7CiAgICAgaWYgKHNpemUgPCAxKSAKQEAgLTEzMDEsMjkg
KzEzNzAsNTEgQEAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gR3JhcGhpY3NDbwogICAg
IAogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAKLSAgICBSZWZQdHI8Q2Fu
dmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gQ2FudmFzTnVtYmVyQXJyYXk6OmNyZWF0ZShzaXplKTsK
LSAgICAKLSAgICBzd2l0Y2godHlwZUZvckdldFZlcnRleEF0dHJpYlBhcmFtKHBuYW1lKSkgewot
ICAgICAgICBjYXNlIEdMX0lOVDogewotICAgICAgICAgICAgR0xpbnQgYnVmWzRdOwotICAgICAg
ICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgYnVmKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAg
ICAgICAgICAgYXJyYXktPmRhdGEoKVtpXSA9IHN0YXRpY19jYXN0PGZsb2F0PihidWZbaV0pOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0xfRkxPQVQ6IHsKLSAgICAgICAgICAgIEdMZmxvYXQg
YnVmWzRdOworICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IENhbnZhc0Zsb2F0
QXJyYXk6OmNyZWF0ZShzaXplKTsKKyAgICBHTGZsb2F0IGJ1Zls0XTsKKyAgICA6OmdsR2V0VmVy
dGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCBidWYpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICA6OmdsR2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCBidWYpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBhcnJheS0+c2V0KGksIHN0YXRpY19jYXN0
PGZsb2F0PihidWZbaV0pKTsKKyAgICAKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK2ludCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaSh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNp
Z25lZCBsb25nIHBuYW1lKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAg
ICBHTGludCBidWZbNF07CisgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwg
YnVmKTsKKyAgICByZXR1cm4gYnVmWzBdOworfQorCitQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5
PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRl
eCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBpbnQgc2l6ZSA9IHNpemVGb3JHZXRWZXJ0
ZXhBdHRyaWJQYXJhbShwbmFtZSk7CisgICAgaWYgKHNpemUgPCAxKSAKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIAorICAgIFJl
ZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBDYW52YXNJbnRBcnJheTo6Y3JlYXRlKHNpemUp
OworICAgIEdMaW50IGJ1Zls0XTsKKyAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBu
YW1lLCBidWYpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7ICsraSkKLSAgICAgICAgICAgICAgICBhcnJheS0+ZGF0YSgpW2ldID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGJ1ZltpXSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgIGFycmF5LT5zZXQoaSwgc3RhdGljX2Nhc3Q8aW50Pihi
dWZbaV0pKTsKICAgICAKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKK2xvbmcgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25l
ZCBsb25nIHBuYW1lKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICAK
KyAgICB2b2lkKiBwb2ludGVyOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRl
eCwgcG5hbWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxsb25nPihw
b2ludGVyKTsKK30KKwogLy8gQXNzdW1lcyB0aGUgdGV4dHVyZSB5b3Ugd2FudCB0byBnbyBpbnRv
IGlzIGJvdW5kCiBzdGF0aWMgdm9pZCBpbWFnZVRvVGV4dHVyZShJbWFnZSogaW1hZ2UsIHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwpCiB7CkBAIC0xMzQ4LDggKzE0MzksNDIgQEAgc3Rh
dGljIHZvaWQgaW1hZ2VUb1RleHR1cmUoSW1hZ2UqIGltYWdlLAogICAgIGZyZWUodGV4dHVyZURh
dGEpOwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCitpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwg
dW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs
IHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBDYW52YXNB
cnJheSogcGl4ZWxzKQogeworICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZv
cm0KKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwor
ICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRo
KTsKKyAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0oYm9yZGVyKTsK
KyAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAg
VU5VU0VEX1BBUkFNKHBpeGVscyk7CisgICAgcmV0dXJuIC0xOworfQorCitpbnQgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZURhdGEq
IHBpeGVscykKK3sKKyAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmb3JtCisg
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBV
TlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGJvcmRlcik7CisgICAg
VU5VU0VEX1BBUkFNKGZvcm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNF
RF9QQVJBTShwaXhlbHMpOworICAgIHJldHVybiAtMTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhUTUxJbWFn
ZUVsZW1lbnQqIGltYWdlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpCit7Cisg
ICAgLy8gRklYTUU6IG5lZWQgdG8gc3VwcG9ydCBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYQor
ICAgIFVOVVNFRF9QQVJBTShmbGlwWSk7CisgICAgVU5VU0VEX1BBUkFNKHByZW11bHRpcGx5QWxw
aGEpOworICAgIAogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKQEAg
LTEzNjIsOCArMTQ4NywxMiBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5z
aWduCiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MQ2FudmFzRWxlbWVudCogY2Fu
dmFzKQoraW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIGJvb2wgZmxpcFksIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKKyAgICAvLyBGSVhNRTogbmVlZCB0byBzdXBwb3J0IGZs
aXBZIGFuZCBwcmVtdWx0aXBseUFscGhhCisgICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKKyAgICBV
TlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7CisgICAgCiAgICAgaWYgKCFjYW52YXMpCiAg
ICAgICAgIHJldHVybiAtMTsKICAgICAKQEAgLTEzNzYsNyArMTUwNSw1MCBAQCBpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduCiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBH
cmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IGxldmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCB1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0LCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSkKK2ludCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlbywgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorewor
ICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZvcm0KKyAgICBVTlVTRURfUEFS
QU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOworICAgIFVOVVNFRF9QQVJBTSh2
aWRlbyk7CisKKyAgICAvLyBGSVhNRTogbmVlZCB0byBzdXBwb3J0IGZsaXBZIGFuZCBwcmVtdWx0
aXBseUFscGhhCisgICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKKyAgICBVTlVTRURfUEFSQU0ocHJl
bXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIC0xOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0
M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWdu
ZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwg
dW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBDYW52YXNBcnJheSogcGl4ZWxzKQorewor
ICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1z
IHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3Vi
aW1hZ2Ugc2l6ZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShs
ZXZlbCk7CisgICAgVU5VU0VEX1BBUkFNKHhvZmYpOworICAgIFVOVVNFRF9QQVJBTSh5b2ZmKTsK
KyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworICAg
IFVOVVNFRF9QQVJBTShmb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVT
RURfUEFSQU0ocGl4ZWxzKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNp
Z25lZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzKQorewor
ICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1z
IHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3Vi
aW1hZ2Ugc2l6ZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShs
ZXZlbCk7CisgICAgVU5VU0VEX1BBUkFNKHhvZmYpOworICAgIFVOVVNFRF9QQVJBTSh5b2ZmKTsK
KyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworICAg
IFVOVVNFRF9QQVJBTShmb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVT
RURfUEFSQU0ocGl4ZWxzKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNp
Z25lZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
LCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhKQogewogICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3Rv
cmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJv
bSB0aGUgc3ViaW1hZ2Ugc2l6ZQogICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwpAQCAtMTM4Niwx
MCArMTU1OCwxNCBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zCiAg
ICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKICAgICBV
TlVTRURfUEFSQU0oaW1hZ2UpOworCisgICAgLy8gRklYTUU6IG5lZWQgdG8gc3VwcG9ydCBmbGlw
WSBhbmQgcHJlbXVsdGlwbHlBbHBoYSAgICAKKyAgICBVTlVTRURfUEFSQU0oZmxpcFkpOworICAg
IFVOVVNFRF9QQVJBTShwcmVtdWx0aXBseUFscGhhKTsKICAgICByZXR1cm4gLTE7CiB9CiAKLWlu
dCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2ln
bmVkIGxldmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQoraW50IEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSkKIHsKICAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQ
aXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlm
ZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUKICAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKQEAg
LTEzOTksNiArMTU3NSwyNyBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQo
dW5zCiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsK
ICAgICBVTlVTRURfUEFSQU0oY2FudmFzKTsKKworICAgIC8vIEZJWE1FOiBuZWVkIHRvIHN1cHBv
cnQgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgICAgCisgICAgVU5VU0VEX1BBUkFNKGZsaXBZ
KTsKKyAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIC0xOwor
fQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK3sKKyAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVk
IHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBi
dWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUKKyAgICBVTlVTRURfUEFS
QU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOworICAgIFVOVVNFRF9QQVJBTSh4
b2ZmKTsKKyAgICBVTlVTRURfUEFSQU0oeW9mZik7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsK
KyAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0odmlkZW8pOworCisg
ICAgLy8gRklYTUU6IG5lZWQgdG8gc3VwcG9ydCBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSAg
ICAKKyAgICBVTlVTRURfUEFSQU0oZmxpcFkpOworICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0aXBs
eUFscGhhKTsKICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTE0ODIsNiArMTY3OSwyOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKHVuCiAgICAgZ2xEZWxldGVUZXh0dXJl
cygxLCAmdGV4dHVyZSk7CiB9CiAKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6c2l6ZUluQnl0ZXMo
aW50IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR0xfQllURToK
KyAgICAgICAgICAgIHJldHVybiBzaXplb2YoR0xieXRlKTsKKyAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKKyAgICAgICAg
Y2FzZSBHTF9TSE9SVDoKKyAgICAgICAgICAgIHJldHVybiBzaXplb2YoR0xzaG9ydCk7CisgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKEdM
dXNob3J0KTsKKyAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgICByZXR1cm4gc2l6ZW9m
KEdMaW50KTsKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgICAgICByZXR1
cm4gc2l6ZW9mKEdMdWludCk7CisgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQo=
</data>
<flag name="review"
          id="20203"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>