<?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>56193</bug_id>
          
          <creation_ts>2011-03-11 07:51:24 -0800</creation_ts>
          <short_desc>Dragging image to desktop gives webloc instead of image file in WebKit2</short_desc>
          <delta_ts>2011-03-12 20:10:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>eric</cc>
    
    <cc>yongjun_zhang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>366005</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-11 07:51:24 -0800</bug_when>
    <thetext>Dragging image to desktop gives webloc instead of image file in WebKit2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366007</commentid>
    <comment_count>1</comment_count>
      <attachid>85477</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-11 07:55:01 -0800</bug_when>
    <thetext>Created attachment 85477
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366204</commentid>
    <comment_count>2</comment_count>
      <attachid>85477</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-03-11 12:03:19 -0800</bug_when>
    <thetext>Comment on attachment 85477
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=85477&amp;action=review

The code looks good to me. It&apos;s a very clever way of solving the problem! I&apos;m assuming you&apos;ve verified that the rest of the image dragging works as before.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:99
&gt; +    // FIXME: Seems this mesage should be named StartDrag, not SetDragImage.

typo message. It was named after the AppKit API, but I agree that this actually starts the dragging.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:173
&gt; +

It is a bit hard to follow, given the amount of changes, but I don&apos;t understand why you&apos;re writing all the data to the pasteboard without checking the types required. Could you please clarify?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366400</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-11 16:11:21 -0800</bug_when>
    <thetext>Attachment 85477 did not build on mac:
Build output: http://queues.webkit.org/results/8144005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366568</commentid>
    <comment_count>4</comment_count>
      <attachid>85589</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-12 05:30:11 -0800</bug_when>
    <thetext>Created attachment 85589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366600</commentid>
    <comment_count>5</comment_count>
      <attachid>85589</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-03-12 11:03:12 -0800</bug_when>
    <thetext>Comment on attachment 85589
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=85589&amp;action=review

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1519
&gt; +#if PLATFORM(MAC)
&gt; +    platformDragEnded();
&gt; +#endif

In general, I like having calls like these without the #if, and have each platform just have a stubbed out implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366628</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-12 19:12:04 -0800</bug_when>
    <thetext>Committed r80948: &lt;http://trac.webkit.org/changeset/80948&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366645</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-12 20:04:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 85477 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85477&amp;action=review
&gt; 
&gt; The code looks good to me. It&apos;s a very clever way of solving the problem! I&apos;m assuming you&apos;ve verified that the rest of the image dragging works as before.

I did some testing. Not sure I covered everything.

&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:99
&gt; &gt; +    // FIXME: Seems this mesage should be named StartDrag, not SetDragImage.
&gt; 
&gt; typo message. It was named after the AppKit API, but I agree that this actually starts the dragging.

Oops, I missed your note and didn’t fix the typo.

The AppKit API is named dragImage... not setDragImage, so I think our name is not really in the same spirit.

&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:173
&gt; 
&gt; It is a bit hard to follow, given the amount of changes, but I don&apos;t understand why you&apos;re writing all the data to the pasteboard without checking the types required. Could you please clarify?

The way the code works is that it puts the list of types in, and then checks each type. Since the code put the types in, there is no need for it to double check what it put in!

Presumably the checks existed in the code we copied this from because there was some kind of separation of responsibilities of determining which types to include and putting the data on the pasteboard. But here I see no need for this checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366648</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-12 20:09:53 -0800</bug_when>
    <thetext>*** Bug 56224 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366649</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-12 20:10:34 -0800</bug_when>
    <thetext>Oops, wrong bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85477</attachid>
            <date>2011-03-11 07:55:01 -0800</date>
            <delta_ts>2011-03-12 05:30:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56193-20110311075500.patch</filename>
            <type>text/plain</type>
            <size>24056</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwODUzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMTEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIERyYWdnaW5nIGltYWdlIHRvIGRlc2t0b3AgZ2l2ZXMgd2VibG9jIGlu
c3RlYWQgb2YgaW1hZ2UgZmlsZSBpbiBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjE5MworCisgICAgICAgICogV2ViQ29yZS5leHAuaW46
IEFkZGVkIHNvbWUgYWRkaXRpb25hbCBleHBvcnRzLiBSZS1zb3J0ZWQuCisKIDIwMTEtMDMtMTEg
IERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gODA4NTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMzI1LDYgKzMyNSw3IEBAIF9fWk43
V2ViQ29yZTEzdG9EZXZpY2VTcGFjZUVSS05TXzlGbG9hdFIKIF9fWk43V2ViQ29yZTEzdG9IVE1M
RWxlbWVudEVQTlNfMjFGb3JtQXNzb2NpYXRlZEVsZW1lbnRFCiBfX1pON1dlYkNvcmUxM3RvSlNE
T01XaW5kb3dFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2UxMnJl
bW92ZUNsaWVudEVQTlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKK19fWk43V2ViQ29yZTE0Q2Fj
aGVkUmVzb3VyY2UxNnVucmVnaXN0ZXJIYW5kbGVFUE5TXzI0Q2FjaGVkUmVzb3VyY2VIYW5kbGVC
YXNlRQogX19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTlhZGRDbGllbnRFUE5TXzIwQ2FjaGVk
UmVzb3VyY2VDbGllbnRFCiBfX1pON1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMTBjb21taXREYXRh
RVBLY2kKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxM2F0dGFjaFRvRnJhbWVFdgpAQCAt
NTUzLDYgKzU1NCw3IEBAIF9fWk43V2ViQ29yZTIzY3JlYXRlRnJhZ21lbnRGcm9tTm9kZXNFUE4K
IF9fWk43V2ViQ29yZTIzZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXNFUk4zV1RGN0hhc2hTZXRJTlMw
XzZTdHJpbmdFTlMwXzEwU3RyaW5nSGFzaEVOUzBfMTBIYXNoVHJhaXRzSVMyX0VFRUUKIF9fWk43
V2ViQ29yZTIzb3ZlcnJpZGVEZWZhdWx0TGFuZ3VhZ2VFUktOM1dURjZTdHJpbmdFCiBfX1pON1dl
YkNvcmUyNEJpbmFyeVByb3BlcnR5TGlzdFdyaXRlcjE3d3JpdGVQcm9wZXJ0eUxpc3RFdgorX19a
TjdXZWJDb3JlMjRDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UxMXNldFJlc291cmNlRVBOU18xNENh
Y2hlZFJlc291cmNlRQogX19aTjdXZWJDb3JlMjREb2N1bWVudE1hcmtlckNvbnRyb2xsZXIxM3Jl
bW92ZU1hcmtlcnNFagogX19aTjdXZWJDb3JlMjREb2N1bWVudE1hcmtlckNvbnRyb2xsZXIxNG1h
cmtlcnNGb3JOb2RlRVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTI0RG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyMTRtYXJrZXJzRm9yTm9kZUVQTlNfNE5vZGVFCkBAIC0xMjgwLDEyICsxMjgyLDE3IEBA
IF93a0FkdmFuY2VEZWZhdWx0QnV0dG9uUHVsc2VBbmltYXRpb24KIF93a0NHQ29udGV4dEdldFNo
b3VsZFNtb290aEZvbnRzCiBfd2tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1lCiBfd2tD
b3B5Q09OTkVDVFByb3h5UmVzcG9uc2UKK193a0NvcHlIVFRQQ29va2llU3RvcmFnZQogX3drQ29w
eU5TVVJMUmVzcG9uc2VTdGF0dXNMaW5lCitfd2tDb3B5UmVxdWVzdFdpdGhTdG9yYWdlU2Vzc2lv
bgogX3drQ3JlYXRlQ1RMaW5lV2l0aFVuaUNoYXJQcm92aWRlcgogX3drQ3JlYXRlQ3VzdG9tQ0ZS
ZWFkU3RyZWFtCiBfd2tDcmVhdGVOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZVByb3h5Citfd2tDcmVh
dGVQcml2YXRlSW5NZW1vcnlIVFRQQ29va2llU3RvcmFnZQorX3drQ3JlYXRlUHJpdmF0ZVN0b3Jh
Z2VTZXNzaW9uCiBfd2tDcmVhdGVVUkxOUGFzdGVib2FyZEZsYXZvclR5cGVOYW1lCiBfd2tDcmVh
dGVVUkxQYXN0ZWJvYXJkRmxhdm9yVHlwZU5hbWUKK193a0RlbGV0ZUhUVFBDb29raWUKIF93a0Ry
YXdCZXplbGVkVGV4dEFyZWEKIF93a0RyYXdCZXplbGVkVGV4dEZpZWxkQ2VsbAogX3drRHJhd0Nh
cHNMb2NrSW5kaWNhdG9yCkBAIC0xMjk4LDYgKzEzMDUsNyBAQCBfd2tHZXRGb250SW5MYW5ndWFn
ZUZvckNoYXJhY3RlcgogX3drR2V0Rm9udEluTGFuZ3VhZ2VGb3JSYW5nZQogX3drR2V0R2x5cGhU
cmFuc2Zvcm1lZEFkdmFuY2VzCiBfd2tHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzCitfd2tHZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5CiBfd2tHZXRIVFRQUGlwZWxpbmluZ1ByaW9yaXR5CiBfd2tHZXRI
eXBoZW5hdGlvbkxvY2F0aW9uQmVmb3JlSW5kZXgKIF93a0dldE1JTUVUeXBlRm9yRXh0ZW5zaW9u
CkBAIC0xMzA3LDYgKzEzMTUsNyBAQCBfd2tHZXROU1VSTFJlc3BvbnNlTXVzdFJldmFsaWRhdGUK
IF93a0dldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlCiBfd2tHZXRVc2VyVG9CYXNlQ1RN
CiBfd2tHZXRXaGVlbEV2ZW50RGVsdGFzCitfd2tIVFRQQ29va2llc0ZvclVSTAogX3drSGl0VGVz
dE1lZGlhVUlQYXJ0CiBfd2tJbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJI
b3N0CiBfd2tJc0xhdGNoaW5nV2hlZWxFdmVudApAQCAtMTMyOSw2ICsxMzM4LDcgQEAgX3drU2V0
Q09OTkVDVFByb3h5QXV0aG9yaXphdGlvbkZvclN0cmVhbQogX3drU2V0Q09OTkVDVFByb3h5Rm9y
U3RyZWFtCiBfd2tTZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZAogX3drU2V0
RHJhZ0ltYWdlCitfd2tTZXRIVFRQQ29va2llc0ZvclVSTAogX3drU2V0SFRUUFBpcGVsaW5pbmdQ
cmlvcml0eQogX3drU2V0TlNVUkxDb25uZWN0aW9uRGVmZXJzQ2FsbGJhY2tzCiBfd2tTZXROU1VS
TFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYKQEAgLTEzMzgsMTMgKzEzNDgsNiBAQCBfd2tTZXRV
cEZvbnRDYWNoZQogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRW5kCiBfd2tTaWduYWxDRlJlYWRTdHJl
YW1FcnJvcgogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtSGFzQnl0ZXMKLV93a0NyZWF0ZVByaXZhdGVT
dG9yYWdlU2Vzc2lvbgotX3drQ29weVJlcXVlc3RXaXRoU3RvcmFnZVNlc3Npb24KLV93a0NvcHlI
VFRQQ29va2llU3RvcmFnZQotX3drR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeQotX3drSFRUUENv
b2tpZXNGb3JVUkwKLV93a1NldEhUVFBDb29raWVzRm9yVVJMCi1fd2tEZWxldGVIVFRQQ29va2ll
CiAKICNpZiAhZGVmaW5lZChOREVCVUcpCiBfX1pON1dlYkNvcmUyMExvZ05vdFlldEltcGxlbWVu
dGVkRQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gODA4NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxMS0wMy0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRHJhZ2dpbmcgaW1hZ2UgdG8gZGVza3RvcCBnaXZlcyB3ZWJs
b2MgaW5zdGVhZCBvZiBpbWFnZSBmaWxlIGluIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MTkzCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0
Ojpjb252ZXJ0SW1hZ2VUb0JpdG1hcCk6IEFkZGVkLiBGYWN0b3JlZCBvdXQgZnJvbSBzdGFydERy
YWcgdG8KKyAgICAgICAgbWFrZSB0aGUgc3RhcnREcmFnIGNvZGUgY2xlYXJlci4KKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKTogU3RyZWFtbGluZWQgY29kZSBhIGJp
dC4KKyAgICAgICAgKFdlYktpdDo6Y2FjaGVkSW1hZ2UpOiBBZGRlZC4gSGVscGVyIGZvciBmdW5j
dGlvbiBiZWxvdy4KKyAgICAgICAgKFdlYktpdDo6YXJyYXlGb3JVUkxzV2l0aFRpdGxlcyk6IEFk
ZGVkLiBIZWxwZXIgZm9yIGZ1bmN0aW9uIGJlbG93LgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
Q2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOiBBZGRlZCBjb2RlIHRvIGhhbmRsZSBm
aWxlCisgICAgICAgIHByb21pc2VzIGFuZCByZW1vdmVkIGEgbG9nIG9mIHVuZWVkZWQgY29kZS4K
KyAgICAgICAgKC1bV0tQYXN0ZWJvYXJkRmlsZVByb21pc2VPd25lciBjb3B5RHJvcERpcmVjdG9y
eV0pOiBBZGRlZC4KKyAgICAgICAgKHByb21pc2VkRGF0YUNsaWVudCk6IEFkZGVkLgorICAgICAg
ICAoLVtXS1Bhc3RlYm9hcmRPd25lciBjbGVhckltYWdlXSk6IEFkZGVkLgorICAgICAgICAoLVtX
S1Bhc3RlYm9hcmRPd25lciBpbml0V2l0aEltYWdlOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tQ
YXN0ZWJvYXJkT3duZXIgZGVhbGxvY10pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tQYXN0ZWJvYXJk
T3duZXIgZmluYWxpemVdKTogQWRkZWQuCisgICAgICAgICgtW1dLUGFzdGVib2FyZE93bmVyIHBh
c3RlYm9hcmQ6cHJvdmlkZURhdGFGb3JUeXBlOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tQYXN0
ZWJvYXJkT3duZXIgcGFzdGVib2FyZENoYW5nZWRPd25lcjpdKTogQWRkZWQuCisgICAgICAgICht
YXRjaGVzRXh0ZW5zaW9uT3JFcXVpdmFsZW50KTogQWRkZWQuCisgICAgICAgICgtW1dLUGFzdGVi
b2FyZE93bmVyIG5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRpb246XSk6IEFk
ZGVkLgorICAgICAgICBNdWNoIG9mIHRoZSBuZXcgY29kZSBhYm92ZSBjYW1lIGZyb20gdGhlIFdl
YktpdDEgZHJhZyBjb2RlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmFnRW5kZWQpOiBBZGRlZCBjYWxsIHRv
IE1hYy1vbmx5IHBsYXRmb3JtRHJhZ0VuZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmg6IEFkZGVkIE1hYy1vbmx5IHBsYXRmb3JtRHJhZ0VuZGVkIGFuZCBtX2RyYWdT
b3VyY2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXREcmFnU291cmNlKTogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtRHJhZ0VuZGVkKTogQWRkZWQuCisKIDIwMTEtMDMt
MTEgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
bGljZSBMaXUuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMubW0JKHJldmlzaW9u
IDgwODUzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMv
V2ViRHJhZ0NsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsMTM0ICszMiwyNzIgQEAK
ICNpbXBvcnQgIldlYlBhZ2UuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAj
aW1wb3J0IDxXZWJDb3JlL0NhY2hlZEltYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RPTVByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRE9NRWxlbWVudEludGVybmFsLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0RPTVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9MZWdhY3lXZWJBcmNoaXZlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlckltYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N0cmluZ1RydW5jYXRvci5oPgotI2ltcG9ydCA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkFyY2hpdmUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXROU1N0cmluZ0V4dHJhcy5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYk5TRmlsZU1h
bmFnZXJFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJOU1Bhc3RlYm9hcmRFeHRyYXMuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJOU1VSTEV4dHJhcy5oPgorI2ltcG9ydCA8V2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworLy8gSW50ZXJuYWwgQXBw
S2l0IGNsYXNzLiBJZiB0aGUgcGFzdGVib2FyZCBoYW5kbGluZyB3YXMgaW4gdGhlIHNhbWUgcHJv
Y2VzcworLy8gdGhhdCBjYWxsZWQgdGhlIGRyYWdJbWFnZSBtZXRob2QsIHRoaXMgd291bGQgYmUg
Y3JlYXRlZCBhdXRvbWF0aWNhbGx5LgorLy8gQ3JlYXRlIGl0IGV4cGxpY2l0bHkgYmVjYXVzZSBk
cmFnSW1hZ2UgaXMgY2FsbGVkIGluIHRoZSBVSSBwcm9jZXNzLgorQGludGVyZmFjZSBOU0ZpbGVQ
cm9taXNlRHJhZ1NvdXJjZSA6IE5TT2JqZWN0Cit7CisgICAgY2hhciBfdW5rbm93bkZpZWxkc1sy
NTZdOworfQorLSAoaWQpaW5pdFdpdGhTb3VyY2U6KGlkKWRyYWdTb3VyY2U7CistICh2b2lkKXNl
dFR5cGVzOihOU0FycmF5ICopdHlwZXMgb25QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvYXJkOworQGVuZAorCitAaW50ZXJmYWNlIFdLUGFzdGVib2FyZEZpbGVQcm9taXNlT3duZXIg
OiBOU0ZpbGVQcm9taXNlRHJhZ1NvdXJjZQorQGVuZAorCitAaW50ZXJmYWNlIFdLUGFzdGVib2Fy
ZE93bmVyIDogTlNPYmplY3QKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFn
ZT4gX2ltYWdlOworfQorLSAoaWQpaW5pdFdpdGhJbWFnZTooQ2FjaGVkSW1hZ2UqKWltYWdlOwor
QGVuZAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0g
ICAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2Us
IGNvbnN0IEludFBvaW50JiBhdCwgY29uc3QgSW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQq
IGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lLCBib29sIGxpbmtEcmFnKQorc3RhdGljIFBhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBjb252ZXJ0SW1hZ2VUb0JpdG1hcChOU0ltYWdlICppbWFnZSkK
IHsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNsaXBib2Fy
ZCk7Ci0gICAgCi0gICAgTlNJbWFnZSAqZHJhZ05TSW1hZ2UgPSBkcmFnSW1hZ2UuZ2V0KCk7Ci0g
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ1NoYXJlYWJsZUltYWdlID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShbZHJhZ05TSW1hZ2Ugc2l6ZV0pKTsKLSAg
ICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBkcmFnU2hhcmVhYmxl
SW1hZ2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotCi0gICAgW05TR3JhcGhpY3NDb250ZXh0
IHNhdmVHcmFwaGljc1N0YXRlXTsKLSAgICBOU0dyYXBoaWNzQ29udGV4dCogYml0bWFwQ29udGV4
dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0Omdy
YXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgZmxpcHBlZDpZRVNdOwotICAgIFtOU0dy
YXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDogYml0bWFwQ29udGV4dF07Ci0gICAgCi0g
ICAgW2RyYWdOU0ltYWdlIGRyYXdJblJlY3Q6TlNNYWtlUmVjdCgwLCAwLCBbZHJhZ05TSW1hZ2Ug
c2l6ZV0ud2lkdGggLCBbZHJhZ05TSW1hZ2Ugc2l6ZV0uaGVpZ2h0KSBmcm9tUmVjdDpOU1plcm9S
ZWN0IG9wZXJhdGlvbjpOU0NvbXBvc2l0ZVNvdXJjZU92ZXIgZnJhY3Rpb246MSByZXNwZWN0Rmxp
cHBlZDpZRVMgaGludHM6bmlsXTsKLSAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBo
aWNzU3RhdGVdOwotIAorICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJl
YWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKEludFNpemUoW2ltYWdlIHNpemVdKSk7CisgICAg
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVH
cmFwaGljc0NvbnRleHQoKTsKKworICAgIE5TR3JhcGhpY3NDb250ZXh0ICpzYXZlZENvbnRleHQg
PSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOworCisgICAgW05TR3JhcGhpY3ND
b250ZXh0IHNldEN1cnJlbnRDb250ZXh0OltOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRl
eHRXaXRoR3JhcGhpY3NQb3J0OmdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgZmxp
cHBlZDpZRVNdXTsKKyAgICBbaW1hZ2UgZHJhd0luUmVjdDpOU01ha2VSZWN0KDAsIDAsIGJpdG1h
cC0+c2l6ZSgpLndpZHRoKCksIGJpdG1hcC0+c2l6ZSgpLmhlaWdodCgpKSBmcm9tUmVjdDpOU1pl
cm9SZWN0IG9wZXJhdGlvbjpOU0NvbXBvc2l0ZVNvdXJjZU92ZXIgZnJhY3Rpb246MSByZXNwZWN0
RmxpcHBlZDpZRVMgaGludHM6bmlsXTsKKworICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJy
ZW50Q29udGV4dDpzYXZlZENvbnRleHRdOworCisgICAgcmV0dXJuIGJpdG1hcC5yZWxlYXNlKCk7
Cit9CisKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKFJldGFpblB0cjxOU0ltYWdlPiBp
bWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCos
IEZyYW1lKiwgYm9vbCBsaW5rRHJhZykKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBi
aXRtYXAgPSBjb252ZXJ0SW1hZ2VUb0JpdG1hcChpbWFnZS5nZXQoKSk7CiAgICAgU2hhcmVkTWVt
b3J5OjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICghZHJhZ1NoYXJlYWJsZUltYWdlLT5jcmVhdGVI
YW5kbGUoaGFuZGxlKSkKKyAgICBpZiAoIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBJbnRQb2ludCBjbGllbnRQb2ludChhdCk7Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldERyYWdJbWFnZShjbGllbnRQb2ludCwg
SW50U2l6ZShbZHJhZ05TSW1hZ2Ugc2l6ZV0pLCBoYW5kbGUsIGxpbmtEcmFnKSk7CisgICAgLy8g
RklYTUU6IFNlZW1zIHRoaXMgbWVzYWdlIHNob3VsZCBiZSBuYW1lZCBTdGFydERyYWcsIG5vdCBT
ZXREcmFnSW1hZ2UuCisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNl
dERyYWdJbWFnZShwb2ludCwgYml0bWFwLT5zaXplKCksIGhhbmRsZSwgbGlua0RyYWcpKTsKIH0K
IAotc3RhdGljIHZvaWQgd3JpdGVVUkwoTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBOU1VSTCog
VVJMLCBOU1N0cmluZyogdGl0bGUsIE5TQXJyYXkqIHR5cGVzKQorc3RhdGljIENhY2hlZEltYWdl
KiBjYWNoZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQogewotICAgIEFTU0VSVChVUkwpOwotICAg
IAorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAg
IGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghcmVuZGVyZXItPmlz
UmVuZGVySW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQ2FjaGVkSW1hZ2UqIGltYWdl
ID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlciktPmNhY2hlZEltYWdlKCk7CisgICAgaWYgKCFpbWFn
ZSB8fCBpbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKSAKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGltYWdlOworfQorCitzdGF0aWMgTlNBcnJheSAqYXJyYXlGb3JVUkxzV2l0aFRpdGxlcyhO
U1VSTCAqVVJMLCBOU1N0cmluZyAqdGl0bGUpCit7CisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltVUkwgX3dlYl9vcmlnaW5hbERh
dGFBc1N0cmluZ11dLAorICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W3RpdGxlIF93
ZWJraXRfc3RyaW5nQnlUcmltbWluZ1doaXRlc3BhY2VdXSwgbmlsXTsKK30KKwordm9pZCBXZWJE
cmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoTlNQYXN0ZWJvYXJkICpwYXN0ZWJv
YXJkLCBET01FbGVtZW50ICplbGVtZW50LCBOU1VSTCAqVVJMLCBOU1N0cmluZyAqdGl0bGUsIFdl
YkNvcmU6OkZyYW1lKikKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgQVNTRVJUKHBhc3Rl
Ym9hcmQgJiYgcGFzdGVib2FyZCA9PSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpO
U0RyYWdQYm9hcmRdKTsKKworICAgIEVsZW1lbnQqIGNvcmVFbGVtZW50ID0gY29yZShlbGVtZW50
KTsKKworICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlKGNvcmVFbGVtZW50KTsK
KworICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBAIiI7CisgICAgaWYgKGltYWdlKSB7CisgICAg
ICAgIGV4dGVuc2lvbiA9IGltYWdlLT5pbWFnZSgpLT5maWxlbmFtZUV4dGVuc2lvbigpOworICAg
ICAgICBpZiAoIVtleHRlbnNpb24gbGVuZ3RoXSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBpZiAoIVt0aXRsZSBsZW5ndGhdKSB7CiAgICAgICAgIHRpdGxlID0gW1tVUkwgcGF0
aF0gbGFzdFBhdGhDb21wb25lbnRdOwogICAgICAgICBpZiAoIVt0aXRsZSBsZW5ndGhdKQogICAg
ICAgICAgICAgdGl0bGUgPSBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOwogICAgIH0KLSAg
ICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TVVJMUGJvYXJkVHlwZV0pCi0gICAg
ICAgIFtVUkwgd3JpdGVUb1Bhc3RlYm9hcmQ6cGFzdGVib2FyZF07Ci0gICAgaWYgKFt0eXBlcyBj
b250YWluc09iamVjdDpQYXN0ZWJvYXJkVHlwZXM6OldlYlVSTFBib2FyZFR5cGVdKQotICAgICAg
ICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6W1VSTCBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXSBm
b3JUeXBlOlBhc3RlYm9hcmRUeXBlczo6V2ViVVJMUGJvYXJkVHlwZV07Ci0gICAgaWYgKFt0eXBl
cyBjb250YWluc09iamVjdDpQYXN0ZWJvYXJkVHlwZXM6OldlYlVSTE5hbWVQYm9hcmRUeXBlXSkK
LSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOnRpdGxlIGZvclR5cGU6UGFzdGVib2FyZFR5
cGVzOjpXZWJVUkxOYW1lUGJvYXJkVHlwZV07Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVj
dDpOU1N0cmluZ1Bib2FyZFR5cGVdKQotICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6W1VS
TCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXSBmb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV07Ci0g
ICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpQYXN0ZWJvYXJkVHlwZXM6OldlYlVSTHNXaXRo
VGl0bGVzUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgTlNBcnJheSogVVJMcyA9IFtOU0FycmF5IGFy
cmF5V2l0aE9iamVjdDpVUkxdOwotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFtVUkxzIGNvdW50
XTsKLSAgICAgICAgCi0gICAgICAgIGlmICghY291bnQgfHwgW3Bhc3RlYm9hcmQgYXZhaWxhYmxl
VHlwZUZyb21BcnJheTpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6UGFzdGVib2FyZFR5cGVzOjpX
ZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVdXSA9PSBuaWwpCi0gICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgTlNBcnJheSogdGl0bGVzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnRp
dGxlXTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb3VudCAhPSBbdGl0bGVzIGNvdW50XSkKLSAg
ICAgICAgICAgIHRpdGxlcyA9IG5pbDsKLSAgICAgICAgCi0gICAgICAgIE5TTXV0YWJsZUFycmF5
KiBVUkxTdHJpbmdzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNvdW50XTsK
LSAgICAgICAgTlNNdXRhYmxlQXJyYXkqIHRpdGxlc09yRW1wdHlTdHJpbmdzID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNvdW50XTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFtVUkxTdHJp
bmdzIGFkZE9iamVjdDpbW1VSTHMgb2JqZWN0QXRJbmRleDppbmRleF0gX3dlYl9vcmlnaW5hbERh
dGFBc1N0cmluZ11dOwotICAgICAgICAgICAgW3RpdGxlc09yRW1wdHlTdHJpbmdzIGFkZE9iamVj
dDoodGl0bGVzID09IG5pbCkgPyBAIiIgOiBbW3RpdGxlcyBvYmplY3RBdEluZGV4OmluZGV4XSBf
d2Via2l0X3N0cmluZ0J5VHJpbW1pbmdXaGl0ZXNwYWNlXV07CisgICAgUmVmUHRyPExlZ2FjeVdl
YkFyY2hpdmU+IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoY29yZUVsZW1lbnQp
OworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0eXBlcyhBZG9wdE5TLCBbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6TlNGaWxlc1Byb21pc2VQYm9hcmRUeXBl
LCBuaWxdKTsKKyAgICBbdHlwZXMuZ2V0KCkgYWRkT2JqZWN0c0Zyb21BcnJheTphcmNoaXZlID8g
UGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXNXaXRoQXJjaGl2ZSgpIDogUGFzdGVib2FyZFR5cGVz
Ojpmb3JJbWFnZXMoKV07CisKKyAgICBSZXRhaW5QdHI8V0tQYXN0ZWJvYXJkT3duZXI+IHBhc3Rl
Ym9hcmRPd25lcihBZG9wdE5TLCBbW1dLUGFzdGVib2FyZE93bmVyIGFsbG9jXSBpbml0V2l0aElt
YWdlOmltYWdlXSk7CisKKyAgICBSZXRhaW5QdHI8V0tQYXN0ZWJvYXJkRmlsZVByb21pc2VPd25l
cj4gZmlsZVByb21pc2VPd25lcihBZG9wdE5TLCBbKFdLUGFzdGVib2FyZEZpbGVQcm9taXNlT3du
ZXIgKilbV0tQYXN0ZWJvYXJkRmlsZVByb21pc2VPd25lciBhbGxvY10gaW5pdFdpdGhTb3VyY2U6
cGFzdGVib2FyZE93bmVyLmdldCgpXSk7CisgICAgbV9wYWdlLT5zZXREcmFnU291cmNlKGZpbGVQ
cm9taXNlT3duZXIuZ2V0KCkpOworCisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVz
LmdldCgpIG93bmVyOnBhc3RlYm9hcmRPd25lci5nZXQoKV07ICAgIAorCisgICAgW3Bhc3RlYm9h
cmQgc2V0UHJvcGVydHlMaXN0OltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpleHRlbnNpb25dIGZv
clR5cGU6TlNGaWxlc1Byb21pc2VQYm9hcmRUeXBlXTsKKworICAgIFtmaWxlUHJvbWlzZU93bmVy
LmdldCgpIHNldFR5cGVzOltwYXN0ZWJvYXJkIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlc1By
b21pc2VQYm9hcmRUeXBlXSBvblBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisKKyAgICBbVVJMIHdy
aXRlVG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworCisgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5n
OltVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ10gZm9yVHlwZTpQYXN0ZWJvYXJkVHlwZXM6
OldlYlVSTFBib2FyZFR5cGVdOworCisgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOnRpdGxlIGZv
clR5cGU6UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxOYW1lUGJvYXJkVHlwZV07CisKKyAgICBbcGFz
dGVib2FyZCBzZXRTdHJpbmc6W1VSTCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXSBmb3JUeXBlOk5T
U3RyaW5nUGJvYXJkVHlwZV07CisKKyAgICBbcGFzdGVib2FyZCBzZXRQcm9wZXJ0eUxpc3Q6YXJy
YXlGb3JVUkxzV2l0aFRpdGxlcyhVUkwsIHRpdGxlKSBmb3JUeXBlOlBhc3RlYm9hcmRUeXBlczo6
V2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlXTsKKworICAgIGlmIChhcmNoaXZlKQorICAgICAg
ICBbcGFzdGVib2FyZCBzZXREYXRhOihOU0RhdGEgKilhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50
YXRpb24oKS5nZXQoKSBmb3JUeXBlOlBhc3RlYm9hcmRUeXBlczo6V2ViQXJjaGl2ZVBib2FyZFR5
cGVdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworQGltcGxlbWVudGF0aW9uIFdLUGFz
dGVib2FyZEZpbGVQcm9taXNlT3duZXIKKworLy8gVGhlIEFwcEtpdCBpbXBsZW1lbnRhdGlvbiBv
ZiBjb3B5RHJvcERpcmVjdG9yeSBnZXRzIHRoZSBjdXJyZW50IHBhc3RlYm9hcmQgaW4KKy8vIGEg
d2F5IHRoYXQgb25seSB3b3JrcyBpbiB0aGUgcHJvY2VzcyB3aGVyZSB0aGUgZHJhZyBpcyBpbml0
aWF0ZWQuIFdlIHN1cHBseQorLy8gYW4gaW1wbGVtZW50YXRpb24gdGhhdCBnZXRzIHRoZSBwYXN0
ZWJvYXJkIGJ5IG5hbWUgaW5zdGVhZC4KKy0gKENGVVJMUmVmKWNvcHlEcm9wRGlyZWN0b3J5Cit7
CisgICAgUGFzdGVib2FyZFJlZiBwYXN0ZWJvYXJkOworICAgIE9TU3RhdHVzIHN0YXR1cyA9IFBh
c3RlYm9hcmRDcmVhdGUoKENGU3RyaW5nUmVmKU5TRHJhZ1Bib2FyZCwgJnBhc3RlYm9hcmQpOwor
ICAgIGlmIChzdGF0dXMgIT0gbm9FcnIgfHwgIXBhc3RlYm9hcmQpCisgICAgICAgIHJldHVybiAw
OworICAgIENGVVJMUmVmIGxvY2F0aW9uID0gMDsKKyAgICBzdGF0dXMgPSBQYXN0ZWJvYXJkQ29w
eVBhc3RlTG9jYXRpb24ocGFzdGVib2FyZCwgJmxvY2F0aW9uKTsKKyAgICBDRlJlbGVhc2UocGFz
dGVib2FyZCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0VyciB8fCAhbG9jYXRpb24pCisgICAgICAg
IHJldHVybiAwOworICAgIENGTWFrZUNvbGxlY3RhYmxlKGxvY2F0aW9uKTsKKyAgICByZXR1cm4g
bG9jYXRpb247Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLUGFzdGVib2FyZE93bmVy
CisKK3N0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCogcHJvbWlzZWREYXRhQ2xpZW50KCkKK3sK
KyAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IG5ldyBDYWNoZWRSZXNv
dXJjZUNsaWVudDsKKyAgICByZXR1cm4gY2xpZW50OworfQorCistICh2b2lkKWNsZWFySW1hZ2UK
K3sKKyAgICBpZiAoIV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIF9pbWFnZS0+cmVtb3Zl
Q2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKKyAgICBfaW1hZ2UgPSAwOworfQorCistIChp
ZClpbml0V2l0aEltYWdlOihDYWNoZWRJbWFnZSopaW1hZ2UKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9pbWFn
ZSA9IGltYWdlOworICAgIGlmIChpbWFnZSkKKyAgICAgICAgaW1hZ2UtPmFkZENsaWVudChwcm9t
aXNlZERhdGFDbGllbnQoKSk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxv
YworeworICAgIFtzZWxmIGNsZWFySW1hZ2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
LSAodm9pZClmaW5hbGl6ZQoreworICAgIFtzZWxmIGNsZWFySW1hZ2VdOworICAgIFtzdXBlciBm
aW5hbGl6ZV07Cit9CisKKy0gKHZvaWQpcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZCBwcm92aWRlRGF0YUZvclR5cGU6KE5TU3RyaW5nICopdHlwZQoreworICAgIGlmIChbdHlw
ZSBpc0VxdWFsOk5TVElGRlBib2FyZFR5cGVdKSB7CisgICAgICAgIGlmIChfaW1hZ2UpIHsKKyAg
ICAgICAgICAgIGlmIChJbWFnZSogaW1hZ2UgPSBfaW1hZ2UtPmltYWdlKCkpCisgICAgICAgICAg
ICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICopaW1hZ2UtPmdldFRJRkZSZXByZXNl
bnRhdGlvbigpIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07CisgICAgICAgICAgICBbc2VsZiBj
bGVhckltYWdlXTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0
UHJvcGVydHlMaXN0OltOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6VVJMU3RyaW5ncywgdGl0bGVz
T3JFbXB0eVN0cmluZ3MsIG5pbF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBl
OlBhc3RlYm9hcmRUeXBlczo6V2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlXTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKyAgICAvLyBGSVhNRTogSGFuZGxlIFJURkQgaGVyZS4KIH0KLSAgICAK
LXN0YXRpYyB2b2lkIHdyaXRlSW1hZ2UoTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBOU0ltYWdl
ICppbWFnZSwgRE9NRWxlbWVudCogZWxlbWVudCwgTlNVUkwqIFVSTCwgTlNTdHJpbmcqIHRpdGxl
LCBMZWdhY3lXZWJBcmNoaXZlKiBhcmNoaXZlLCBOU0FycmF5KiB0eXBlcykKKworLSAodm9pZClw
YXN0ZWJvYXJkQ2hhbmdlZE93bmVyOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCiB7Ci0gICAg
QVNTRVJUKGltYWdlIHx8IGVsZW1lbnQpOwotICAgIEFTU0VSVChVUkwpOwotICAgIAotICAgIHdy
aXRlVVJMKHBhc3RlYm9hcmQsIFVSTCwgdGl0bGUsIHR5cGVzKTsKLSAgICAKLSAgICBpZiAoW3R5
cGVzIGNvbnRhaW5zT2JqZWN0Ok5TVElGRlBib2FyZFR5cGVdKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiB3ZSBzaG91bGQgYWRkIGhhbmRsaW5nIG9mIHByb21pc2VkIHR5cGVzLgotICAgICAgICBpZiAo
aW1hZ2UpCi0gICAgICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOltpbWFnZSBUSUZGUmVwcmVz
ZW50YXRpb25dIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07Ci0gICAgICAgIGVsc2UgaWYgKGVs
ZW1lbnQpCi0gICAgICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOltlbGVtZW50IF9pbWFnZVRJ
RkZSZXByZXNlbnRhdGlvbl0gZm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKGFyY2hpdmUgJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0OlBhc3RlYm9hcmRUeXBl
czo6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKQotICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOltb
KE5TRGF0YSAqKWFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpLmdldCgpIHJldGFpbl0g
YXV0b3JlbGVhc2VdIGZvclR5cGU6UGFzdGVib2FyZFR5cGVzOjpXZWJBcmNoaXZlUGJvYXJkVHlw
ZV07CisgICAgW3NlbGYgY2xlYXJJbWFnZV07CiB9Ci0gICAgCi12b2lkIFdlYkRyYWdDbGllbnQ6
OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIERPTUVs
ZW1lbnQqIGVsZW1lbnQsIE5TVVJMKiBVUkwsIE5TU3RyaW5nKiB0aXRsZSwgV2ViQ29yZTo6RnJh
bWUqKQorCitzdGF0aWMgYm9vbCBtYXRjaGVzRXh0ZW5zaW9uT3JFcXVpdmFsZW50KE5TU3RyaW5n
ICpmaWxlbmFtZSwgTlNTdHJpbmcgKmV4dGVuc2lvbikKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7
Ci0gICAgQVNTRVJUKHBhc3RlYm9hcmQgJiYgcGFzdGVib2FyZCA9PSBbTlNQYXN0ZWJvYXJkIHBh
c3RlYm9hcmRXaXRoTmFtZTpOU0RyYWdQYm9hcmRdKTsKKyAgICBOU1N0cmluZyAqZXh0ZW5zaW9u
QXNTdWZmaXggPSBbQCIuIiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpleHRlbnNpb25dOworICAg
IHJldHVybiBbZmlsZW5hbWUgX3dlYmtpdF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXg6ZXh0ZW5z
aW9uQXNTdWZmaXhdCisgICAgICAgIHx8IChbZXh0ZW5zaW9uIF93ZWJraXRfaXNDYXNlSW5zZW5z
aXRpdmVFcXVhbFRvU3RyaW5nOkAianBlZyJdCisgICAgICAgICAgICAmJiBbZmlsZW5hbWUgX3dl
YmtpdF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXg6QCIuanBnIl0pOworfQorCistIChOU0FycmF5
ICopbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXREZXN0aW5hdGlvbjooTlNVUkwgKilkcm9w
RGVzdGluYXRpb24KK3sKKyAgICBOU0ZpbGVXcmFwcGVyICp3cmFwcGVyID0gbmlsOworICAgIE5T
VVJMICpkcmFnZ2luZ0ltYWdlVVJMID0gbmlsOwogICAgIAotICAgIE5TU3RyaW5nICpleHRlbnNp
b24gPSBAIiI7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKGVsZW1lbnQp
LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aXNJbWFnZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoQ2FjaGVkSW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlcikt
PmNhY2hlZEltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICBleHRlbnNpb24gPSBpbWFnZS0+aW1h
Z2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoIVtleHRlbnNp
b24gbGVuZ3RoXSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQor
ICAgIGlmIChfaW1hZ2UpIHsKKyAgICAgICAgaWYgKFNoYXJlZEJ1ZmZlciogYnVmZmVyID0gX2lt
YWdlLT5DYWNoZWRSZXNvdXJjZTo6ZGF0YSgpKSB7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEg
PSBidWZmZXItPmNyZWF0ZU5TRGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVz
cG9uc2UgPSBfaW1hZ2UtPnJlc3BvbnNlKCkubnNVUkxSZXNwb25zZSgpOworICAgICAgICAgICAg
ZHJhZ2dpbmdJbWFnZVVSTCA9IFtyZXNwb25zZSBVUkxdOworICAgICAgICAgICAgd3JhcHBlciA9
IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czpkYXRh
XSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBOU1N0cmluZyogZmlsZW5hbWUgPSBbcmVzcG9u
c2Ugc3VnZ2VzdGVkRmlsZW5hbWVdOworICAgICAgICAgICAgTlNTdHJpbmcqIHRydWVFeHRlbnNp
b24oX2ltYWdlLT5pbWFnZSgpLT5maWxlbmFtZUV4dGVuc2lvbigpKTsKKyAgICAgICAgICAgIGlm
ICghbWF0Y2hlc0V4dGVuc2lvbk9yRXF1aXZhbGVudChmaWxlbmFtZSwgdHJ1ZUV4dGVuc2lvbikp
CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBbW2ZpbGVuYW1lIHN0cmluZ0J5QXBwZW5kaW5n
U3RyaW5nOkAiLiJdIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnRydWVFeHRlbnNpb25dOworICAg
ICAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6ZmlsZW5hbWVdOwogICAgICAg
ICB9CiAgICAgfQorCisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNl
IHdoZXJlIHdlIGRvIG5vdCBoYXZlIGEgQ2FjaGVkSW1hZ2U/CisgICAgLy8gV2ViS2l0MSBoYWQg
Y29kZSBmb3IgdGhpcyBjYXNlLgogICAgIAotICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBh
cmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNvcmUoZWxlbWVudCkpOwotICAgIE5T
TXV0YWJsZUFycmF5ICp0eXBlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoT2Jq
ZWN0czpOU0ZpbGVzUHJvbWlzZVBib2FyZFR5cGUsIG5pbF07Ci0gICAgW3R5cGVzIGFkZE9iamVj
dHNGcm9tQXJyYXk6KGFyY2hpdmUpID8gUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXNXaXRoQXJj
aGl2ZSgpIDogUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXMoKV07Ci0gICAgW3Bhc3RlYm9hcmQg
ZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOm5pbF07ICAgIAotICAgIHdyaXRlSW1hZ2UocGFzdGVi
b2FyZCwgbmlsLCBlbGVtZW50LCBVUkwsIHRpdGxlLCBhcmNoaXZlLmdldCgpLCB0eXBlcyk7Ci0g
ICAgW3R5cGVzIHJlbGVhc2VdOwotICAgIAotICAgIE5TQXJyYXkgKmV4dGVuc2lvbnMgPSBbW05T
QXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpleHRlbnNpb24sIG5pbF07Ci0gICAgW3Bhc3Rl
Ym9hcmQgc2V0UHJvcGVydHlMaXN0OmV4dGVuc2lvbnMgZm9yVHlwZTpOU0ZpbGVzUHJvbWlzZVBi
b2FyZFR5cGVdOwotICAgIFtleHRlbnNpb25zIHJlbGVhc2VdOworICAgIGlmICghd3JhcHBlcikg
eworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2UgZmlsZS4iKTsKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVwb3J0IGFuIGVycm9y
IGlmIHdlIGZhaWwgdG8gY3JlYXRlIGEgZmlsZS4KKyAgICBOU1N0cmluZyAqcGF0aCA9IFtbZHJv
cERlc3RpbmF0aW9uIHBhdGhdIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbd3JhcHBl
ciBwcmVmZXJyZWRGaWxlbmFtZV1dOworICAgIHBhdGggPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIF93ZWJraXRfcGF0aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGg6cGF0aF07Cisg
ICAgaWYgKCFbd3JhcHBlciB3cml0ZVRvRmlsZTpwYXRoIGF0b21pY2FsbHk6Tk8gdXBkYXRlRmls
ZW5hbWVzOllFU10pCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZSBm
aWxlIHZpYSAtW05TRmlsZVdyYXBwZXIgd3JpdGVUb0ZpbGU6YXRvbWljYWxseTp1cGRhdGVGaWxl
bmFtZXM6XSBhdCBwYXRoICVAIiwgcGF0aCk7CisKKyAgICBpZiAoZHJhZ2dpbmdJbWFnZVVSTCkK
KyAgICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBfd2Via2l0X3NldE1ldGFk
YXRhVVJMOltkcmFnZ2luZ0ltYWdlVVJMIGFic29sdXRlU3RyaW5nXSByZWZlcnJlcjpuaWwgYXRQ
YXRoOnBhdGhdOworCisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbcGF0aCBs
YXN0UGF0aENvbXBvbmVudF1dOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKK0BlbmQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJl
dmlzaW9uIDgwODUzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTE0LDYgKzE1MTQsOSBAQCB2b2lkIFdlYlBhZ2U6
OmRyYWdFbmRlZChXZWJDb3JlOjpJbnRQb2luCiAgICAgSW50UG9pbnQgYWRqdXN0ZWRDbGllbnRQ
b3NpdGlvbihjbGllbnRQb3NpdGlvbi54KCkgKyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRy
YWdPZmZzZXQoKS54KCksIGNsaWVudFBvc2l0aW9uLnkoKSArIG1fcGFnZS0+ZHJhZ0NvbnRyb2xs
ZXIoKS0+ZHJhZ09mZnNldCgpLnkoKSk7CiAgICAgSW50UG9pbnQgYWRqdXN0ZWRHbG9iYWxQb3Np
dGlvbihnbG9iYWxQb3NpdGlvbi54KCkgKyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdP
ZmZzZXQoKS54KCksIGdsb2JhbFBvc2l0aW9uLnkoKSArIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIo
KS0+ZHJhZ09mZnNldCgpLnkoKSk7CiAgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHBsYXRm
b3JtRHJhZ0VuZGVkKCk7CisjZW5kaWYKICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRy
YWdFbmRlZCgpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZp
ZXcoKTsKICAgICBpZiAoIXZpZXcpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDgwODUzKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBA
QAogI2luY2x1ZGUgIkRpY3Rpb25hcnlQb3B1cEluZm8uaCIKICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiBPQkpDX0NMQVNTIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0OworT0JKQ19DTEFT
UyBOU09iamVjdDsKICNlbmRpZgogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CkBAIC0zNTYsNiArMzU3
LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yY2VSZXBhaW50V2l0aG91dENhbGxiYWNrKCk7
CiAKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBzZXREcmFnU291cmNlKE5TT2JqZWN0ICop
OworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0
IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKIApAQCAtNDc5LDYgKzQ4NCwxMCBAQCBwcml2
YXRlOgogICAgIHZvaWQgZGlkU2VsZWN0SXRlbUZyb21BY3RpdmVDb250ZXh0TWVudShjb25zdCBX
ZWJDb250ZXh0TWVudUl0ZW1EYXRhJik7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICB2b2lkIHBsYXRmb3JtRHJhZ0VuZGVkKCk7CisjZW5kaWYKKwogICAgIE93blB0cjxXZWJDb3Jl
OjpQYWdlPiBtX3BhZ2U7CiAgICAgUmVmUHRyPFdlYkZyYW1lPiBtX21haW5GcmFtZTsKICAgICBS
ZWZQdHI8SW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3Q+IG1fYmFja0ZvcndhcmRMaXN0OwpA
QCAtNTE4LDYgKzUyNyw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxQbHVnaW5WaWV3Kj4gbV9w
bHVnaW5WaWV3czsKICAgICAKICAgICBSZXRhaW5QdHI8QWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmpl
Y3Q+IG1fbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50OworCisgICAgUmV0YWluUHRyPE5TT2JqZWN0
PiBtX2RyYWdTb3VyY2U7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgLy8gT3VyIHZpZXcncyB3
aW5kb3cgKGluIHRoZSBVSSBwcm9jZXNzKS4KICAgICBIV05EIG1fbmF0aXZlV2luZG93OwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQkocmV2aXNpb24gODA4NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4MSw0ICs0ODEsMTcgQEAg
Ym9vbCBXZWJQYWdlOjpjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYgogICAgIHJldHVybiByZXF1
ZXN0LnVybCgpLnByb3RvY29sSXMoImFwcGxld2ViZGF0YSIpOwogfQogCit2b2lkIFdlYlBhZ2U6
OnNldERyYWdTb3VyY2UoTlNPYmplY3QgKmRyYWdTb3VyY2UpCit7CisgICAgbV9kcmFnU291cmNl
ID0gZHJhZ1NvdXJjZTsKK30KKwordm9pZCBXZWJQYWdlOjpwbGF0Zm9ybURyYWdFbmRlZCgpCit7
CisgICAgLy8gVGhlIGRyYWcgc291cmNlIHdlIGNhcmUgYWJvdXQgaGVyZSBpcyBOU0ZpbGVQcm9t
aXNlRHJhZ1NvdXJjZSwgd2hpY2ggZG9lc24ndCBsb29rIGF0CisgICAgLy8gdGhlIGFyZ3VtZW50
cy4gSXQncyBPSyB0byBqdXN0IHBhc3MgYXJiaXRyYXJ5IGNvbnN0YW50IHZhbHVlcywgc28gd2Ug
anVzdCBwYXNzIGFsbCB6ZXJvZXMuCisgICAgW21fZHJhZ1NvdXJjZS5nZXQoKSBkcmFnZ2VkSW1h
Z2U6bmlsIGVuZGVkQXQ6TlNaZXJvUG9pbnQgb3BlcmF0aW9uOk5TRHJhZ09wZXJhdGlvbk5vbmVd
OworICAgIG1fZHJhZ1NvdXJjZSA9IG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85589</attachid>
            <date>2011-03-12 05:30:11 -0800</date>
            <delta_ts>2011-03-12 11:03:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56193-20110312053009.patch</filename>
            <type>text/plain</type>
            <size>24072</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwOTM0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMTEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIERyYWdnaW5nIGltYWdlIHRvIGRlc2t0b3AgZ2l2ZXMgd2VibG9jIGlu
c3RlYWQgb2YgaW1hZ2UgZmlsZSBpbiBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjE5MworCisgICAgICAgICogV2ViQ29yZS5leHAuaW46
IEFkZGVkIHNvbWUgYWRkaXRpb25hbCBleHBvcnRzLiBSZS1zb3J0ZWQuCisKIDIwMTEtMDMtMTIg
IFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJl
dmlld2VkOiBJbnNwZWN0IEVsZW1lbnQgYWN0aW9uIHJlZ3Jlc3Npb24gZml4LgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDgwOTM0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTMyNSw2ICszMjUsNyBAQCBfX1pON1dlYkNvcmUx
M3RvRGV2aWNlU3BhY2VFUktOU185RmxvYXRSCiBfX1pON1dlYkNvcmUxM3RvSFRNTEVsZW1lbnRF
UE5TXzIxRm9ybUFzc29jaWF0ZWRFbGVtZW50RQogX19aTjdXZWJDb3JlMTN0b0pTRE9NV2luZG93
RU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlMTJyZW1vdmVDbGll
bnRFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCitfX1pON1dlYkNvcmUxNENhY2hlZFJlc291
cmNlMTZ1bnJlZ2lzdGVySGFuZGxlRVBOU18yNENhY2hlZFJlc291cmNlSGFuZGxlQmFzZUUKIF9f
Wk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2U5YWRkQ2xpZW50RVBOU18yMENhY2hlZFJlc291cmNl
Q2xpZW50RQogX19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRlcjEwY29tbWl0RGF0YUVQS2NpCiBf
X1pON1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMTNhdHRhY2hUb0ZyYW1lRXYKQEAgLTU1Myw2ICs1
NTQsNyBAQCBfX1pON1dlYkNvcmUyM2NyZWF0ZUZyYWdtZW50RnJvbU5vZGVzRVBOCiBfX1pON1dl
YkNvcmUyM2dldEhvc3RuYW1lc1dpdGhDb29raWVzRVJOM1dURjdIYXNoU2V0SU5TMF82U3RyaW5n
RU5TMF8xMFN0cmluZ0hhc2hFTlMwXzEwSGFzaFRyYWl0c0lTMl9FRUVFCiBfX1pON1dlYkNvcmUy
M292ZXJyaWRlRGVmYXVsdExhbmd1YWdlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjRC
aW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXIxN3dyaXRlUHJvcGVydHlMaXN0RXYKK19fWk43V2ViQ29y
ZTI0Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlMTFzZXRSZXNvdXJjZUVQTlNfMTRDYWNoZWRSZXNv
dXJjZUUKIF9fWk43V2ViQ29yZTI0RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyMTNyZW1vdmVNYXJr
ZXJzRWoKIF9fWk43V2ViQ29yZTI0RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyMTRtYXJrZXJzRm9y
Tm9kZUVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUyNERvY3VtZW50TWFya2VyQ29udHJvbGxlcjE0
bWFya2Vyc0Zvck5vZGVFUE5TXzROb2RlRQpAQCAtMTI5MSwxMiArMTI5MywxNiBAQCBfd2tBZHZh
bmNlRGVmYXVsdEJ1dHRvblB1bHNlQW5pbWF0aW9uCiBfd2tDR0NvbnRleHRHZXRTaG91bGRTbW9v
dGhGb250cwogX3drQ29weUNGTG9jYWxpemF0aW9uUHJlZmVycmVkTmFtZQogX3drQ29weUNPTk5F
Q1RQcm94eVJlc3BvbnNlCitfd2tDb3B5SFRUUENvb2tpZVN0b3JhZ2UKIF93a0NvcHlOU1VSTFJl
c3BvbnNlU3RhdHVzTGluZQorX3drQ29weVJlcXVlc3RXaXRoU3RvcmFnZVNlc3Npb24KIF93a0Ny
ZWF0ZUNUTGluZVdpdGhVbmlDaGFyUHJvdmlkZXIKIF93a0NyZWF0ZUN1c3RvbUNGUmVhZFN0cmVh
bQogX3drQ3JlYXRlTlNVUkxDb25uZWN0aW9uRGVsZWdhdGVQcm94eQorX3drQ3JlYXRlUHJpdmF0
ZVN0b3JhZ2VTZXNzaW9uCiBfd2tDcmVhdGVVUkxOUGFzdGVib2FyZEZsYXZvclR5cGVOYW1lCiBf
d2tDcmVhdGVVUkxQYXN0ZWJvYXJkRmxhdm9yVHlwZU5hbWUKK193a0RlbGV0ZUhUVFBDb29raWUK
IF93a0RyYXdCZXplbGVkVGV4dEFyZWEKIF93a0RyYXdCZXplbGVkVGV4dEZpZWxkQ2VsbAogX3dr
RHJhd0NhcHNMb2NrSW5kaWNhdG9yCkBAIC0xMzA5LDYgKzEzMTUsNyBAQCBfd2tHZXRGb250SW5M
YW5ndWFnZUZvckNoYXJhY3RlcgogX3drR2V0Rm9udEluTGFuZ3VhZ2VGb3JSYW5nZQogX3drR2V0
R2x5cGhUcmFuc2Zvcm1lZEFkdmFuY2VzCiBfd2tHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzCitfd2tH
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5CiBfd2tHZXRIVFRQUGlwZWxpbmluZ1ByaW9yaXR5CiBf
d2tHZXRIeXBoZW5hdGlvbkxvY2F0aW9uQmVmb3JlSW5kZXgKIF93a0dldE1JTUVUeXBlRm9yRXh0
ZW5zaW9uCkBAIC0xMzE4LDYgKzEzMjUsNyBAQCBfd2tHZXROU1VSTFJlc3BvbnNlTXVzdFJldmFs
aWRhdGUKIF93a0dldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlCiBfd2tHZXRVc2VyVG9C
YXNlQ1RNCiBfd2tHZXRXaGVlbEV2ZW50RGVsdGFzCitfd2tIVFRQQ29va2llc0ZvclVSTAogX3dr
SGl0VGVzdE1lZGlhVUlQYXJ0CiBfd2tJbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291
bnRQZXJIb3N0CiBfd2tJc0xhdGNoaW5nV2hlZWxFdmVudApAQCAtMTM0MCw2ICsxMzQ4LDcgQEAg
X3drU2V0Q09OTkVDVFByb3h5QXV0aG9yaXphdGlvbkZvclN0cmVhbQogX3drU2V0Q09OTkVDVFBy
b3h5Rm9yU3RyZWFtCiBfd2tTZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZAog
X3drU2V0RHJhZ0ltYWdlCitfd2tTZXRIVFRQQ29va2llc0ZvclVSTAogX3drU2V0SFRUUFBpcGVs
aW5pbmdQcmlvcml0eQogX3drU2V0TlNVUkxDb25uZWN0aW9uRGVmZXJzQ2FsbGJhY2tzCiBfd2tT
ZXROU1VSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYKQEAgLTEzNDksMTMgKzEzNTgsNiBAQCBf
d2tTZXRVcEZvbnRDYWNoZQogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRW5kCiBfd2tTaWduYWxDRlJl
YWRTdHJlYW1FcnJvcgogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtSGFzQnl0ZXMKLV93a0NyZWF0ZVBy
aXZhdGVTdG9yYWdlU2Vzc2lvbgotX3drQ29weVJlcXVlc3RXaXRoU3RvcmFnZVNlc3Npb24KLV93
a0NvcHlIVFRQQ29va2llU3RvcmFnZQotX3drR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeQotX3dr
SFRUUENvb2tpZXNGb3JVUkwKLV93a1NldEhUVFBDb29raWVzRm9yVVJMCi1fd2tEZWxldGVIVFRQ
Q29va2llCiAKICNpZiAhZGVmaW5lZChOREVCVUcpCiBfX1pON1dlYkNvcmUyMExvZ05vdFlldElt
cGxlbWVudGVkRQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gODA5MzQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxMS0wMy0x
MSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRHJhZ2dpbmcgaW1hZ2UgdG8gZGVza3RvcCBnaXZl
cyB3ZWJsb2MgaW5zdGVhZCBvZiBpbWFnZSBmaWxlIGluIFdlYktpdDIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MTkzCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOgorICAgICAgICAo
V2ViS2l0Ojpjb252ZXJ0SW1hZ2VUb0JpdG1hcCk6IEFkZGVkLiBGYWN0b3JlZCBvdXQgZnJvbSBz
dGFydERyYWcgdG8KKyAgICAgICAgbWFrZSB0aGUgc3RhcnREcmFnIGNvZGUgY2xlYXJlci4KKyAg
ICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKTogU3RyZWFtbGluZWQgY29k
ZSBhIGJpdC4KKyAgICAgICAgKFdlYktpdDo6Y2FjaGVkSW1hZ2UpOiBBZGRlZC4gSGVscGVyIGZv
ciBmdW5jdGlvbiBiZWxvdy4KKyAgICAgICAgKFdlYktpdDo6YXJyYXlGb3JVUkxzV2l0aFRpdGxl
cyk6IEFkZGVkLiBIZWxwZXIgZm9yIGZ1bmN0aW9uIGJlbG93LgorICAgICAgICAoV2ViS2l0OjpX
ZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOiBBZGRlZCBjb2RlIHRvIGhh
bmRsZSBmaWxlCisgICAgICAgIHByb21pc2VzIGFuZCByZW1vdmVkIGEgbG9nIG9mIHVuZWVkZWQg
Y29kZS4KKyAgICAgICAgKC1bV0tQYXN0ZWJvYXJkRmlsZVByb21pc2VPd25lciBjb3B5RHJvcERp
cmVjdG9yeV0pOiBBZGRlZC4KKyAgICAgICAgKHByb21pc2VkRGF0YUNsaWVudCk6IEFkZGVkLgor
ICAgICAgICAoLVtXS1Bhc3RlYm9hcmRPd25lciBjbGVhckltYWdlXSk6IEFkZGVkLgorICAgICAg
ICAoLVtXS1Bhc3RlYm9hcmRPd25lciBpbml0V2l0aEltYWdlOl0pOiBBZGRlZC4KKyAgICAgICAg
KC1bV0tQYXN0ZWJvYXJkT3duZXIgZGVhbGxvY10pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tQYXN0
ZWJvYXJkT3duZXIgZmluYWxpemVdKTogQWRkZWQuCisgICAgICAgICgtW1dLUGFzdGVib2FyZE93
bmVyIHBhc3RlYm9hcmQ6cHJvdmlkZURhdGFGb3JUeXBlOl0pOiBBZGRlZC4KKyAgICAgICAgKC1b
V0tQYXN0ZWJvYXJkT3duZXIgcGFzdGVib2FyZENoYW5nZWRPd25lcjpdKTogQWRkZWQuCisgICAg
ICAgIChtYXRjaGVzRXh0ZW5zaW9uT3JFcXVpdmFsZW50KTogQWRkZWQuCisgICAgICAgICgtW1dL
UGFzdGVib2FyZE93bmVyIG5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRpb246
XSk6IEFkZGVkLgorICAgICAgICBNdWNoIG9mIHRoZSBuZXcgY29kZSBhYm92ZSBjYW1lIGZyb20g
dGhlIFdlYktpdDEgZHJhZyBjb2RlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmFnRW5kZWQpOiBBZGRlZCBj
YWxsIHRvIE1hYy1vbmx5IHBsYXRmb3JtRHJhZ0VuZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmg6IEFkZGVkIE1hYy1vbmx5IHBsYXRmb3JtRHJhZ0VuZGVkIGFuZCBt
X2RyYWdTb3VyY2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXREcmFnU291cmNlKTogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtRHJhZ0VuZGVkKTogQWRkZWQuCisKIDIw
MTEtMDMtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50
TWFjLm1tCShyZXZpc2lvbiA4MDkzNCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMy
LDEzNCArMzIsMjcyIEBACiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oIgogI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRJbWFnZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9ET01Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RPTUVsZW1lbnRJbnRlcm5h
bC5oPgorI2ltcG9ydCA8V2ViQ29yZS9ET01Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Ry
YWdDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTGVnYWN5V2ViQXJj
aGl2ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJJbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9SZXNvdXJjZUhhbmRsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdHJpbmdUcnVuY2F0b3IuaD4K
LSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJBcmNoaXZl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0TlNTdHJpbmdFeHRyYXMuaD4KKyNpbXBvcnQgPFdl
YktpdC9XZWJOU0ZpbGVNYW5hZ2VyRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViTlNQYXN0
ZWJvYXJkRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViTlNVUkxFeHRyYXMuaD4KKyNpbXBv
cnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisK
Ky8vIEludGVybmFsIEFwcEtpdCBjbGFzcy4gSWYgdGhlIHBhc3RlYm9hcmQgaGFuZGxpbmcgd2Fz
IGluIHRoZSBzYW1lIHByb2Nlc3MKKy8vIHRoYXQgY2FsbGVkIHRoZSBkcmFnSW1hZ2UgbWV0aG9k
LCB0aGlzIHdvdWxkIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4KKy8vIENyZWF0ZSBpdCBleHBs
aWNpdGx5IGJlY2F1c2UgZHJhZ0ltYWdlIGlzIGNhbGxlZCBpbiB0aGUgVUkgcHJvY2Vzcy4KK0Bp
bnRlcmZhY2UgTlNGaWxlUHJvbWlzZURyYWdTb3VyY2UgOiBOU09iamVjdAoreworICAgIGNoYXIg
X3Vua25vd25GaWVsZHNbMjU2XTsKK30KKy0gKGlkKWluaXRXaXRoU291cmNlOihpZClkcmFnU291
cmNlOworLSAodm9pZClzZXRUeXBlczooTlNBcnJheSAqKXR5cGVzIG9uUGFzdGVib2FyZDooTlNQ
YXN0ZWJvYXJkICopcGFzdGVib2FyZDsKK0BlbmQKKworQGludGVyZmFjZSBXS1Bhc3RlYm9hcmRG
aWxlUHJvbWlzZU93bmVyIDogTlNGaWxlUHJvbWlzZURyYWdTb3VyY2UKK0BlbmQKKworQGludGVy
ZmFjZSBXS1Bhc3RlYm9hcmRPd25lciA6IE5TT2JqZWN0Cit7CisgICAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkSW1hZ2U+IF9pbWFnZTsKK30KKy0gKGlkKWluaXRXaXRoSW1hZ2U6KENhY2hl
ZEltYWdlKilpbWFnZTsKK0BlbmQKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotICAgCi12b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1h
Z2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgYXQsIGNvbnN0IEludFBvaW50JiBldmVu
dFBvcywgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiBmcmFtZSwgYm9vbCBsaW5rRHJhZykK
K3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udmVydEltYWdlVG9CaXRtYXAo
TlNJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVChjbGlwYm9hcmQpOwotICAgIAotICAgIE5TSW1hZ2UgKmRyYWdOU0ltYWdlID0gZHJh
Z0ltYWdlLmdldCgpOwotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdTaGFyZWFibGVJ
bWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKEludFNpemUoW2RyYWdOU0lt
YWdlIHNpemVdKSk7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0
ID0gZHJhZ1NoYXJlYWJsZUltYWdlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLQotICAgIFtO
U0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07Ci0gICAgTlNHcmFwaGljc0NvbnRl
eHQqIGJpdG1hcENvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0
aEdyYXBoaWNzUG9ydDpncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIGZsaXBwZWQ6
WUVTXTsKLSAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6IGJpdG1hcENv
bnRleHRdOwotICAgIAotICAgIFtkcmFnTlNJbWFnZSBkcmF3SW5SZWN0Ok5TTWFrZVJlY3QoMCwg
MCwgW2RyYWdOU0ltYWdlIHNpemVdLndpZHRoICwgW2RyYWdOU0ltYWdlIHNpemVdLmhlaWdodCkg
ZnJvbVJlY3Q6TlNaZXJvUmVjdCBvcGVyYXRpb246TlNDb21wb3NpdGVTb3VyY2VPdmVyIGZyYWN0
aW9uOjEgcmVzcGVjdEZsaXBwZWQ6WUVTIGhpbnRzOm5pbF07Ci0gICAgW05TR3JhcGhpY3NDb250
ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKLSAKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKFtpbWFn
ZSBzaXplXSkpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9
IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICBOU0dyYXBoaWNzQ29udGV4
dCAqc2F2ZWRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKwor
ICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpbTlNHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpncmFwaGljc0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpIGZsaXBwZWQ6WUVTXV07CisgICAgW2ltYWdlIGRyYXdJblJlY3Q6TlNNYWtl
UmVjdCgwLCAwLCBiaXRtYXAtPnNpemUoKS53aWR0aCgpLCBiaXRtYXAtPnNpemUoKS5oZWlnaHQo
KSkgZnJvbVJlY3Q6TlNaZXJvUmVjdCBvcGVyYXRpb246TlNDb21wb3NpdGVTb3VyY2VPdmVyIGZy
YWN0aW9uOjEgcmVzcGVjdEZsaXBwZWQ6WUVTIGhpbnRzOm5pbF07CisKKyAgICBbTlNHcmFwaGlj
c0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6c2F2ZWRDb250ZXh0XTsKKworICAgIHJldHVybiBi
aXRtYXAucmVsZWFzZSgpOworfQorCit2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhSZXRh
aW5QdHI8TlNJbWFnZT4gaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50UG9p
bnQmLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJvb2wgbGlua0RyYWcpCit7CisgICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gYml0bWFwID0gY29udmVydEltYWdlVG9CaXRtYXAoaW1hZ2UuZ2V0KCkp
OwogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIWRyYWdTaGFyZWFi
bGVJbWFnZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCisgICAgaWYgKCFiaXRtYXAtPmNyZWF0ZUhh
bmRsZShoYW5kbGUpKQogICAgICAgICByZXR1cm47Ci0gICAgSW50UG9pbnQgY2xpZW50UG9pbnQo
YXQpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXREcmFnSW1h
Z2UoY2xpZW50UG9pbnQsIEludFNpemUoW2RyYWdOU0ltYWdlIHNpemVdKSwgaGFuZGxlLCBsaW5r
RHJhZykpOworICAgIC8vIEZJWE1FOiBTZWVtcyB0aGlzIG1lc2FnZSBzaG91bGQgYmUgbmFtZWQg
U3RhcnREcmFnLCBub3QgU2V0RHJhZ0ltYWdlLgorICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpTZXREcmFnSW1hZ2UocG9pbnQsIGJpdG1hcC0+c2l6ZSgpLCBoYW5kbGUs
IGxpbmtEcmFnKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlVVJMKE5TUGFzdGVib2FyZCogcGFz
dGVib2FyZCwgTlNVUkwqIFVSTCwgTlNTdHJpbmcqIHRpdGxlLCBOU0FycmF5KiB0eXBlcykKK3N0
YXRpYyBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBB
U1NFUlQoVVJMKTsKLSAgICAKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+
cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAoIXJlbmRlcmVyLT5pc1JlbmRlckltYWdlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIENh
Y2hlZEltYWdlKiBpbWFnZSA9IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIpLT5jYWNoZWRJbWFnZSgp
OworICAgIGlmICghaW1hZ2UgfHwgaW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkgCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIE5TQXJyYXkgKmFycmF5Rm9y
VVJMc1dpdGhUaXRsZXMoTlNVUkwgKlVSTCwgTlNTdHJpbmcgKnRpdGxlKQoreworICAgIHJldHVy
biBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbVVJM
IF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddXSwKKyAgICAgICAgW05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0Olt0aXRsZSBfd2Via2l0X3N0cmluZ0J5VHJpbW1pbmdXaGl0ZXNwYWNlXV0sIG5pbF07
Cit9CisKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKE5TUGFz
dGVib2FyZCAqcGFzdGVib2FyZCwgRE9NRWxlbWVudCAqZWxlbWVudCwgTlNVUkwgKlVSTCwgTlNT
dHJpbmcgKnRpdGxlLCBXZWJDb3JlOjpGcmFtZSopCit7CisgICAgQVNTRVJUKGVsZW1lbnQpOwor
ICAgIEFTU0VSVChwYXN0ZWJvYXJkICYmIHBhc3RlYm9hcmQgPT0gW05TUGFzdGVib2FyZCBwYXN0
ZWJvYXJkV2l0aE5hbWU6TlNEcmFnUGJvYXJkXSk7CisKKyAgICBFbGVtZW50KiBjb3JlRWxlbWVu
dCA9IGNvcmUoZWxlbWVudCk7CisKKyAgICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFn
ZShjb3JlRWxlbWVudCk7CisKKyAgICBOU1N0cmluZyAqZXh0ZW5zaW9uID0gQCIiOworICAgIGlm
IChpbWFnZSkgeworICAgICAgICBleHRlbnNpb24gPSBpbWFnZS0+aW1hZ2UoKS0+ZmlsZW5hbWVF
eHRlbnNpb24oKTsKKyAgICAgICAgaWYgKCFbZXh0ZW5zaW9uIGxlbmd0aF0pCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKCFbdGl0bGUgbGVuZ3RoXSkgewogICAgICAgICB0
aXRsZSA9IFtbVVJMIHBhdGhdIGxhc3RQYXRoQ29tcG9uZW50XTsKICAgICAgICAgaWYgKCFbdGl0
bGUgbGVuZ3RoXSkKICAgICAgICAgICAgIHRpdGxlID0gW1VSTCBfd2ViX3VzZXJWaXNpYmxlU3Ry
aW5nXTsKICAgICB9Ci0gICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1VSTFBi
b2FyZFR5cGVdKQotICAgICAgICBbVVJMIHdyaXRlVG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwot
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxQYm9h
cmRUeXBlXSkKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOltVUkwgX3dlYl9vcmlnaW5h
bERhdGFBc1N0cmluZ10gZm9yVHlwZTpQYXN0ZWJvYXJkVHlwZXM6OldlYlVSTFBib2FyZFR5cGVd
OwotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxO
YW1lUGJvYXJkVHlwZV0pCi0gICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzp0aXRsZSBmb3JU
eXBlOlBhc3RlYm9hcmRUeXBlczo6V2ViVVJMTmFtZVBib2FyZFR5cGVdOwotICAgIGlmIChbdHlw
ZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkKLSAgICAgICAgW3Bhc3RlYm9h
cmQgc2V0U3RyaW5nOltVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ10gZm9yVHlwZTpOU1N0cmlu
Z1Bib2FyZFR5cGVdOwotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6UGFzdGVib2FyZFR5
cGVzOjpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVdKSB7Ci0gICAgICAgIE5TQXJyYXkqIFVS
THMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6VVJMXTsKLSAgICAgICAgdW5zaWduZWQgY291
bnQgPSBbVVJMcyBjb3VudF07Ci0gICAgICAgIAotICAgICAgICBpZiAoIWNvdW50IHx8IFtwYXN0
ZWJvYXJkIGF2YWlsYWJsZVR5cGVGcm9tQXJyYXk6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OlBh
c3RlYm9hcmRUeXBlczo6V2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlXV0gPT0gbmlsKQotICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIE5TQXJyYXkqIHRpdGxlcyA9IFtOU0FycmF5IGFy
cmF5V2l0aE9iamVjdDp0aXRsZV07Ci0gICAgICAgIAotICAgICAgICBpZiAoY291bnQgIT0gW3Rp
dGxlcyBjb3VudF0pCi0gICAgICAgICAgICB0aXRsZXMgPSBuaWw7Ci0gICAgICAgIAotICAgICAg
ICBOU011dGFibGVBcnJheSogVVJMU3RyaW5ncyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhD
YXBhY2l0eTpjb3VudF07Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5KiB0aXRsZXNPckVtcHR5U3Ry
aW5ncyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjb3VudF07Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7Ci0gICAg
ICAgICAgICBbVVJMU3RyaW5ncyBhZGRPYmplY3Q6W1tVUkxzIG9iamVjdEF0SW5kZXg6aW5kZXhd
IF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddXTsKLSAgICAgICAgICAgIFt0aXRsZXNPckVtcHR5
U3RyaW5ncyBhZGRPYmplY3Q6KHRpdGxlcyA9PSBuaWwpID8gQCIiIDogW1t0aXRsZXMgb2JqZWN0
QXRJbmRleDppbmRleF0gX3dlYmtpdF9zdHJpbmdCeVRyaW1taW5nV2hpdGVzcGFjZV1dOworICAg
IFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3Jl
YXRlKGNvcmVFbGVtZW50KTsKKworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gdHlwZXMo
QWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOk5TRmlsZXNQ
cm9taXNlUGJvYXJkVHlwZSwgbmlsXSk7CisgICAgW3R5cGVzLmdldCgpIGFkZE9iamVjdHNGcm9t
QXJyYXk6YXJjaGl2ZSA/IFBhc3RlYm9hcmRUeXBlczo6Zm9ySW1hZ2VzV2l0aEFyY2hpdmUoKSA6
IFBhc3RlYm9hcmRUeXBlczo6Zm9ySW1hZ2VzKCldOworCisgICAgUmV0YWluUHRyPFdLUGFzdGVi
b2FyZE93bmVyPiBwYXN0ZWJvYXJkT3duZXIoQWRvcHROUywgW1tXS1Bhc3RlYm9hcmRPd25lciBh
bGxvY10gaW5pdFdpdGhJbWFnZTppbWFnZV0pOworCisgICAgUmV0YWluUHRyPFdLUGFzdGVib2Fy
ZEZpbGVQcm9taXNlT3duZXI+IGZpbGVQcm9taXNlT3duZXIoQWRvcHROUywgWyhXS1Bhc3RlYm9h
cmRGaWxlUHJvbWlzZU93bmVyICopW1dLUGFzdGVib2FyZEZpbGVQcm9taXNlT3duZXIgYWxsb2Nd
IGluaXRXaXRoU291cmNlOnBhc3RlYm9hcmRPd25lci5nZXQoKV0pOworICAgIG1fcGFnZS0+c2V0
RHJhZ1NvdXJjZShmaWxlUHJvbWlzZU93bmVyLmdldCgpKTsKKworICAgIFtwYXN0ZWJvYXJkIGRl
Y2xhcmVUeXBlczp0eXBlcy5nZXQoKSBvd25lcjpwYXN0ZWJvYXJkT3duZXIuZ2V0KCldOyAgICAK
KworICAgIFtwYXN0ZWJvYXJkIHNldFByb3BlcnR5TGlzdDpbTlNBcnJheSBhcnJheVdpdGhPYmpl
Y3Q6ZXh0ZW5zaW9uXSBmb3JUeXBlOk5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZV07CisKKyAgICBb
ZmlsZVByb21pc2VPd25lci5nZXQoKSBzZXRUeXBlczpbcGFzdGVib2FyZCBwcm9wZXJ0eUxpc3RG
b3JUeXBlOk5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZV0gb25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRd
OworCisgICAgW1VSTCB3cml0ZVRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKworICAgIFtwYXN0
ZWJvYXJkIHNldFN0cmluZzpbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddIGZvclR5cGU6
UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxQYm9hcmRUeXBlXTsKKworICAgIFtwYXN0ZWJvYXJkIHNl
dFN0cmluZzp0aXRsZSBmb3JUeXBlOlBhc3RlYm9hcmRUeXBlczo6V2ViVVJMTmFtZVBib2FyZFR5
cGVdOworCisgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOltVUkwgX3dlYl91c2VyVmlzaWJsZVN0
cmluZ10gZm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdOworCisgICAgW3Bhc3RlYm9hcmQgc2V0
UHJvcGVydHlMaXN0OmFycmF5Rm9yVVJMc1dpdGhUaXRsZXMoVVJMLCB0aXRsZSkgZm9yVHlwZTpQ
YXN0ZWJvYXJkVHlwZXM6OldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZV07CisKKyAgICBpZiAo
YXJjaGl2ZSkKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICopYXJjaGl2ZS0+
cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkgZm9yVHlwZTpQYXN0ZWJvYXJkVHlwZXM6Oldl
YkFyY2hpdmVQYm9hcmRUeXBlXTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0BpbXBs
ZW1lbnRhdGlvbiBXS1Bhc3RlYm9hcmRGaWxlUHJvbWlzZU93bmVyCisKKy8vIFRoZSBBcHBLaXQg
aW1wbGVtZW50YXRpb24gb2YgY29weURyb3BEaXJlY3RvcnkgZ2V0cyB0aGUgY3VycmVudCBwYXN0
ZWJvYXJkIGluCisvLyBhIHdheSB0aGF0IG9ubHkgd29ya3MgaW4gdGhlIHByb2Nlc3Mgd2hlcmUg
dGhlIGRyYWcgaXMgaW5pdGlhdGVkLiBXZSBzdXBwbHkKKy8vIGFuIGltcGxlbWVudGF0aW9uIHRo
YXQgZ2V0cyB0aGUgcGFzdGVib2FyZCBieSBuYW1lIGluc3RlYWQuCistIChDRlVSTFJlZiljb3B5
RHJvcERpcmVjdG9yeQoreworICAgIFBhc3RlYm9hcmRSZWYgcGFzdGVib2FyZDsKKyAgICBPU1N0
YXR1cyBzdGF0dXMgPSBQYXN0ZWJvYXJkQ3JlYXRlKChDRlN0cmluZ1JlZilOU0RyYWdQYm9hcmQs
ICZwYXN0ZWJvYXJkKTsKKyAgICBpZiAoc3RhdHVzICE9IG5vRXJyIHx8ICFwYXN0ZWJvYXJkKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBDRlVSTFJlZiBsb2NhdGlvbiA9IDA7CisgICAgc3RhdHVz
ID0gUGFzdGVib2FyZENvcHlQYXN0ZUxvY2F0aW9uKHBhc3RlYm9hcmQsICZsb2NhdGlvbik7Cisg
ICAgQ0ZSZWxlYXNlKHBhc3RlYm9hcmQpOworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIgfHwgIWxv
Y2F0aW9uKQorICAgICAgICByZXR1cm4gMDsKKyAgICBDRk1ha2VDb2xsZWN0YWJsZShsb2NhdGlv
bik7CisgICAgcmV0dXJuIGxvY2F0aW9uOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
S1Bhc3RlYm9hcmRPd25lcgorCitzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHByb21pc2Vk
RGF0YUNsaWVudCgpCit7CisgICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQg
PSBuZXcgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7CisgICAgcmV0dXJuIGNsaWVudDsKK30KKworLSAo
dm9pZCljbGVhckltYWdlCit7CisgICAgaWYgKCFfaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBfaW1hZ2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7CisgICAgX2ltYWdl
ID0gMDsKK30KKworLSAoaWQpaW5pdFdpdGhJbWFnZTooQ2FjaGVkSW1hZ2UqKWltYWdlCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBfaW1hZ2UgPSBpbWFnZTsKKyAgICBpZiAoaW1hZ2UpCisgICAgICAgIGltYWdl
LT5hZGRDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc2VsZiBjbGVhckltYWdlXTsKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBbc2VsZiBjbGVhckltYWdl
XTsKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQorCistICh2b2lkKXBhc3RlYm9hcmQ6KE5TUGFz
dGVib2FyZCAqKXBhc3RlYm9hcmQgcHJvdmlkZURhdGFGb3JUeXBlOihOU1N0cmluZyAqKXR5cGUK
K3sKKyAgICBpZiAoW3R5cGUgaXNFcXVhbDpOU1RJRkZQYm9hcmRUeXBlXSkgeworICAgICAgICBp
ZiAoX2ltYWdlKSB7CisgICAgICAgICAgICBpZiAoSW1hZ2UqIGltYWdlID0gX2ltYWdlLT5pbWFn
ZSgpKQorICAgICAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6KE5TRGF0YSAqKWltYWdl
LT5nZXRUSUZGUmVwcmVzZW50YXRpb24oKSBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOworICAg
ICAgICAgICAgW3NlbGYgY2xlYXJJbWFnZV07CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IFtwYXN0ZWJvYXJkIHNldFByb3BlcnR5TGlzdDpbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOlVS
TFN0cmluZ3MsIHRpdGxlc09yRW1wdHlTdHJpbmdzLCBuaWxdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yVHlwZTpQYXN0ZWJvYXJkVHlwZXM6OldlYlVSTHNXaXRoVGl0bGVzUGJvYXJk
VHlwZV07CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgLy8gRklYTUU6IEhhbmRsZSBSVEZE
IGhlcmUuCiB9Ci0gICAgCi1zdGF0aWMgdm9pZCB3cml0ZUltYWdlKE5TUGFzdGVib2FyZCogcGFz
dGVib2FyZCwgTlNJbWFnZSAqaW1hZ2UsIERPTUVsZW1lbnQqIGVsZW1lbnQsIE5TVVJMKiBVUkws
IE5TU3RyaW5nKiB0aXRsZSwgTGVnYWN5V2ViQXJjaGl2ZSogYXJjaGl2ZSwgTlNBcnJheSogdHlw
ZXMpCisKKy0gKHZvaWQpcGFzdGVib2FyZENoYW5nZWRPd25lcjooTlNQYXN0ZWJvYXJkICopcGFz
dGVib2FyZAogewotICAgIEFTU0VSVChpbWFnZSB8fCBlbGVtZW50KTsKLSAgICBBU1NFUlQoVVJM
KTsKLSAgICAKLSAgICB3cml0ZVVSTChwYXN0ZWJvYXJkLCBVUkwsIHRpdGxlLCB0eXBlcyk7Ci0g
ICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1RJRkZQYm9hcmRUeXBlXSkgewot
ICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFkZCBoYW5kbGluZyBvZiBwcm9taXNlZCB0eXBl
cy4KLSAgICAgICAgaWYgKGltYWdlKQotICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpb
aW1hZ2UgVElGRlJlcHJlc2VudGF0aW9uXSBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOwotICAg
ICAgICBlbHNlIGlmIChlbGVtZW50KQotICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpb
ZWxlbWVudCBfaW1hZ2VUSUZGUmVwcmVzZW50YXRpb25dIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlw
ZV07Ci0gICAgfQotICAgIAotICAgIGlmIChhcmNoaXZlICYmIFt0eXBlcyBjb250YWluc09iamVj
dDpQYXN0ZWJvYXJkVHlwZXM6OldlYkFyY2hpdmVQYm9hcmRUeXBlXSkKLSAgICAgICAgW3Bhc3Rl
Ym9hcmQgc2V0RGF0YTpbWyhOU0RhdGEgKilhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24o
KS5nZXQoKSByZXRhaW5dIGF1dG9yZWxlYXNlXSBmb3JUeXBlOlBhc3RlYm9hcmRUeXBlczo6V2Vi
QXJjaGl2ZVBib2FyZFR5cGVdOworICAgIFtzZWxmIGNsZWFySW1hZ2VdOwogfQotICAgIAotdm9p
ZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoTlNQYXN0ZWJvYXJkKiBw
YXN0ZWJvYXJkLCBET01FbGVtZW50KiBlbGVtZW50LCBOU1VSTCogVVJMLCBOU1N0cmluZyogdGl0
bGUsIFdlYkNvcmU6OkZyYW1lKikKKworc3RhdGljIGJvb2wgbWF0Y2hlc0V4dGVuc2lvbk9yRXF1
aXZhbGVudChOU1N0cmluZyAqZmlsZW5hbWUsIE5TU3RyaW5nICpleHRlbnNpb24pCiB7Ci0gICAg
QVNTRVJUKGVsZW1lbnQpOwotICAgIEFTU0VSVChwYXN0ZWJvYXJkICYmIHBhc3RlYm9hcmQgPT0g
W05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6TlNEcmFnUGJvYXJkXSk7CisgICAgTlNT
dHJpbmcgKmV4dGVuc2lvbkFzU3VmZml4ID0gW0AiLiIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6
ZXh0ZW5zaW9uXTsKKyAgICByZXR1cm4gW2ZpbGVuYW1lIF93ZWJraXRfaGFzQ2FzZUluc2Vuc2l0
aXZlU3VmZml4OmV4dGVuc2lvbkFzU3VmZml4XQorICAgICAgICB8fCAoW2V4dGVuc2lvbiBfd2Vi
a2l0X2lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxUb1N0cmluZzpAImpwZWciXQorICAgICAgICAgICAg
JiYgW2ZpbGVuYW1lIF93ZWJraXRfaGFzQ2FzZUluc2Vuc2l0aXZlU3VmZml4OkAiLmpwZyJdKTsK
K30KKworLSAoTlNBcnJheSAqKW5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRp
b246KE5TVVJMICopZHJvcERlc3RpbmF0aW9uCit7CisgICAgTlNGaWxlV3JhcHBlciAqd3JhcHBl
ciA9IG5pbDsKKyAgICBOU1VSTCAqZHJhZ2dpbmdJbWFnZVVSTCA9IG5pbDsKICAgICAKLSAgICBO
U1N0cmluZyAqZXh0ZW5zaW9uID0gQCIiOwotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gY29yZShlbGVtZW50KS0+cmVuZGVyZXIoKSkgewotICAgICAgICBpZiAocmVuZGVyZXItPmlz
SW1hZ2UoKSkgewotICAgICAgICAgICAgaWYgKENhY2hlZEltYWdlKiBpbWFnZSA9IHRvUmVuZGVy
SW1hZ2UocmVuZGVyZXIpLT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgZXh0ZW5z
aW9uID0gaW1hZ2UtPmltYWdlKCktPmZpbGVuYW1lRXh0ZW5zaW9uKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFbZXh0ZW5zaW9uIGxlbmd0aF0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KKyAgICBpZiAoX2ltYWdlKSB7CisgICAgICAgIGlmIChTaGFyZWRCdWZm
ZXIqIGJ1ZmZlciA9IF9pbWFnZS0+Q2FjaGVkUmVzb3VyY2U6OmRhdGEoKSkgeworICAgICAgICAg
ICAgTlNEYXRhICpkYXRhID0gYnVmZmVyLT5jcmVhdGVOU0RhdGEoKTsKKyAgICAgICAgICAgIE5T
VVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gX2ltYWdlLT5yZXNwb25zZSgpLm5zVVJMUmVzcG9uc2Uo
KTsKKyAgICAgICAgICAgIGRyYWdnaW5nSW1hZ2VVUkwgPSBbcmVzcG9uc2UgVVJMXTsKKyAgICAg
ICAgICAgIHdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVX
aXRoQ29udGVudHM6ZGF0YV0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgTlNTdHJpbmcqIGZp
bGVuYW1lID0gW3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXTsKKyAgICAgICAgICAgIE5TU3Ry
aW5nKiB0cnVlRXh0ZW5zaW9uKF9pbWFnZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24oKSk7
CisgICAgICAgICAgICBpZiAoIW1hdGNoZXNFeHRlbnNpb25PckVxdWl2YWxlbnQoZmlsZW5hbWUs
IHRydWVFeHRlbnNpb24pKQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gW1tmaWxlbmFtZSBz
dHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi4iXSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzp0cnVl
RXh0ZW5zaW9uXTsKKyAgICAgICAgICAgIFt3cmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOmZp
bGVuYW1lXTsKICAgICAgICAgfQogICAgIH0KKworICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRv
IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBkbyBub3QgaGF2ZSBhIENhY2hlZEltYWdlPworICAg
IC8vIFdlYktpdDEgaGFkIGNvZGUgZm9yIHRoaXMgY2FzZS4KICAgICAKLSAgICBSZWZQdHI8TGVn
YWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb3JlKGVs
ZW1lbnQpKTsKLSAgICBOU011dGFibGVBcnJheSAqdHlwZXMgPSBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aE9iamVjdHM6TlNGaWxlc1Byb21pc2VQYm9hcmRUeXBlLCBuaWxdOwotICAg
IFt0eXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OihhcmNoaXZlKSA/IFBhc3RlYm9hcmRUeXBlczo6
Zm9ySW1hZ2VzV2l0aEFyY2hpdmUoKSA6IFBhc3RlYm9hcmRUeXBlczo6Zm9ySW1hZ2VzKCldOwot
ICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpuaWxdOyAgICAKLSAgICB3
cml0ZUltYWdlKHBhc3RlYm9hcmQsIG5pbCwgZWxlbWVudCwgVVJMLCB0aXRsZSwgYXJjaGl2ZS5n
ZXQoKSwgdHlwZXMpOwotICAgIFt0eXBlcyByZWxlYXNlXTsKLSAgICAKLSAgICBOU0FycmF5ICpl
eHRlbnNpb25zID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6ZXh0ZW5zaW9uLCBu
aWxdOwotICAgIFtwYXN0ZWJvYXJkIHNldFByb3BlcnR5TGlzdDpleHRlbnNpb25zIGZvclR5cGU6
TlNGaWxlc1Byb21pc2VQYm9hcmRUeXBlXTsKLSAgICBbZXh0ZW5zaW9ucyByZWxlYXNlXTsKKyAg
ICBpZiAoIXdyYXBwZXIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGlt
YWdlIGZpbGUuIik7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAgLy8gRklYTUU6
IFJlcG9ydCBhbiBlcnJvciBpZiB3ZSBmYWlsIHRvIGNyZWF0ZSBhIGZpbGUuCisgICAgTlNTdHJp
bmcgKnBhdGggPSBbW2Ryb3BEZXN0aW5hdGlvbiBwYXRoXSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhD
b21wb25lbnQ6W3dyYXBwZXIgcHJlZmVycmVkRmlsZW5hbWVdXTsKKyAgICBwYXRoID0gW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBfd2Via2l0X3BhdGhXaXRoVW5pcXVlRmlsZW5hbWVG
b3JQYXRoOnBhdGhdOworICAgIGlmICghW3dyYXBwZXIgd3JpdGVUb0ZpbGU6cGF0aCBhdG9taWNh
bGx5Ok5PIHVwZGF0ZUZpbGVuYW1lczpZRVNdKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjcmVhdGUgaW1hZ2UgZmlsZSB2aWEgLVtOU0ZpbGVXcmFwcGVyIHdyaXRlVG9GaWxlOmF0b21p
Y2FsbHk6dXBkYXRlRmlsZW5hbWVzOl0gYXQgcGF0aCAlQCIsIHBhdGgpOworCisgICAgaWYgKGRy
YWdnaW5nSW1hZ2VVUkwpCisgICAgICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
X3dlYmtpdF9zZXRNZXRhZGF0YVVSTDpbZHJhZ2dpbmdJbWFnZVVSTCBhYnNvbHV0ZVN0cmluZ10g
cmVmZXJyZXI6bmlsIGF0UGF0aDpwYXRoXTsKKworICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdp
dGhPYmplY3Q6W3BhdGggbGFzdFBhdGhDb21wb25lbnRdXTsKIH0KIAotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA4MDkzNCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxNCw2ICsxNTE0LDkg
QEAgdm9pZCBXZWJQYWdlOjpkcmFnRW5kZWQoV2ViQ29yZTo6SW50UG9pbgogICAgIEludFBvaW50
IGFkanVzdGVkQ2xpZW50UG9zaXRpb24oY2xpZW50UG9zaXRpb24ueCgpICsgbV9wYWdlLT5kcmFn
Q29udHJvbGxlcigpLT5kcmFnT2Zmc2V0KCkueCgpLCBjbGllbnRQb3NpdGlvbi55KCkgKyBtX3Bh
Z2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdPZmZzZXQoKS55KCkpOwogICAgIEludFBvaW50IGFk
anVzdGVkR2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24ueCgpICsgbV9wYWdlLT5kcmFnQ29u
dHJvbGxlcigpLT5kcmFnT2Zmc2V0KCkueCgpLCBnbG9iYWxQb3NpdGlvbi55KCkgKyBtX3BhZ2Ut
PmRyYWdDb250cm9sbGVyKCktPmRyYWdPZmZzZXQoKS55KCkpOwogICAgIAorI2lmIFBMQVRGT1JN
KE1BQykKKyAgICBwbGF0Zm9ybURyYWdFbmRlZCgpOworI2VuZGlmCiAgICAgbV9wYWdlLT5kcmFn
Q29udHJvbGxlcigpLT5kcmFnRW5kZWQoKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiA4MDkzNCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlICJEaWN0aW9uYXJ5UG9wdXBJbmZvLmgiCiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgogT0JKQ19DTEFTUyBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9i
amVjdDsKK09CSkNfQ0xBU1MgTlNPYmplY3Q7CiAjZW5kaWYKIAogbmFtZXNwYWNlIENvcmVJUEMg
ewpAQCAtMzU2LDYgKzM1NywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZvcmNlUmVwYWludFdp
dGhvdXRDYWxsYmFjaygpOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgc2V0RHJhZ1Nv
dXJjZShOU09iamVjdCAqKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2UodWludDY0
X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAKQEAgLTQ3OSw2
ICs0ODQsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFNlbGVjdEl0ZW1Gcm9tQWN0aXZlQ29u
dGV4dE1lbnUoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYpOwogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgdm9pZCBwbGF0Zm9ybURyYWdFbmRlZCgpOworI2VuZGlmCisKICAg
ICBPd25QdHI8V2ViQ29yZTo6UGFnZT4gbV9wYWdlOwogICAgIFJlZlB0cjxXZWJGcmFtZT4gbV9t
YWluRnJhbWU7CiAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0PiBtX2Jh
Y2tGb3J3YXJkTGlzdDsKQEAgLTUxOCw2ICs1MjcsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8
UGx1Z2luVmlldyo+IG1fcGx1Z2luVmlld3M7CiAgICAgCiAgICAgUmV0YWluUHRyPEFjY2Vzc2li
aWxpdHlXZWJQYWdlT2JqZWN0PiBtX21vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudDsKKworICAgIFJl
dGFpblB0cjxOU09iamVjdD4gbV9kcmFnU291cmNlOwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAg
IC8vIE91ciB2aWV3J3Mgd2luZG93IChpbiB0aGUgVUkgcHJvY2VzcykuCiAgICAgSFdORCBtX25h
dGl2ZVdpbmRvdzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDgwOTM0KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
ODEsNCArNDgxLDE3IEBAIGJvb2wgV2ViUGFnZTo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWIK
ICAgICByZXR1cm4gcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJhcHBsZXdlYmRhdGEiKTsKIH0K
IAordm9pZCBXZWJQYWdlOjpzZXREcmFnU291cmNlKE5TT2JqZWN0ICpkcmFnU291cmNlKQorewor
ICAgIG1fZHJhZ1NvdXJjZSA9IGRyYWdTb3VyY2U7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGxhdGZv
cm1EcmFnRW5kZWQoKQoreworICAgIC8vIFRoZSBkcmFnIHNvdXJjZSB3ZSBjYXJlIGFib3V0IGhl
cmUgaXMgTlNGaWxlUHJvbWlzZURyYWdTb3VyY2UsIHdoaWNoIGRvZXNuJ3QgbG9vayBhdAorICAg
IC8vIHRoZSBhcmd1bWVudHMuIEl0J3MgT0sgdG8ganVzdCBwYXNzIGFyYml0cmFyeSBjb25zdGFu
dCB2YWx1ZXMsIHNvIHdlIGp1c3QgcGFzcyBhbGwgemVyb2VzLgorICAgIFttX2RyYWdTb3VyY2Uu
Z2V0KCkgZHJhZ2dlZEltYWdlOm5pbCBlbmRlZEF0Ok5TWmVyb1BvaW50IG9wZXJhdGlvbjpOU0Ry
YWdPcGVyYXRpb25Ob25lXTsKKyAgICBtX2RyYWdTb3VyY2UgPSBudWxscHRyOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="77732"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>