<?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>190101</bug_id>
          
          <creation_ts>2018-09-28 17:04:39 -0700</creation_ts>
          <short_desc>[macOS] Update Pasteboard::read to prioritize native representations over TIFF</short_desc>
          <delta_ts>2022-01-24 15:48:53 -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>HTML Editing</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>akeerthi</cc>
    
    <cc>bdakin</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>rniwa</cc>
    
    <cc>thorton</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1464620</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2018-09-28 17:04:39 -0700</bug_when>
    <thetext>Pasting a pasteboard that contains JPEG data into a web view results in a TIFF representation of the image getting pasted. This is undesirable, but it matches the historic behavior of NSTextView.

As of macOS Mojave, NSTextView checks for NSImage objects on the pasteboard, and given an NSImage, it first tries to get the image data from an existing EPS, PICT, PDF or bitmap representation (of whichever format), before falling back to the TIFF representation.

WebKit should replicate that behavior so that things don’t get unnecessarily transcoded (the JPEG to TIFF example is especially bad!).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464625</commentid>
    <comment_count>1</comment_count>
    <who name="">mitz</who>
    <bug_when>2018-09-28 17:06:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/44879244&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833165</commentid>
    <comment_count>2</comment_count>
      <attachid>449772</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-23 16:44:38 -0800</bug_when>
    <thetext>Created attachment 449772
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833182</commentid>
    <comment_count>3</comment_count>
      <attachid>449772</attachid>
    <who name="">mitz</who>
    <bug_when>2022-01-23 18:01:49 -0800</bug_when>
    <thetext>Comment on attachment 449772
For EWS

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

&gt; Source/WebCore/ChangeLog:20
&gt; +        so, then we convert TIFF data from the pasteboard to JPEG or PNG, respectively.

This sounds like reencoding, which at least in the JPEG case can degrade quality, and that doesn’t sound like what I said AppKit did.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833199</commentid>
    <comment_count>4</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-23 22:18:31 -0800</bug_when>
    <thetext>(In reply to mitz from comment #3)
&gt; Comment on attachment 449772 [details]
&gt; For EWS
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=449772&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:20
&gt; &gt; +        so, then we convert TIFF data from the pasteboard to JPEG or PNG, respectively.
&gt; 
&gt; This sounds like reencoding, which at least in the JPEG case can degrade
&gt; quality, and that doesn’t sound like what I said AppKit did.

Indeed, this is still transcoding image data; note that we can&apos;t expose raw PNG and JPEG data on paste, so we need some kind of strategy to avoid leaking privacy-sensitive metadata on pasted images.

I&apos;m still exploring some strategies to achieve this without transcoding; we might be able to just strip out (most) metadata properties without having to reencode to the original format...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833200</commentid>
    <comment_count>5</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-23 22:21:38 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #4)
&gt; (In reply to mitz from comment #3)
&gt; &gt; Comment on attachment 449772 [details]
&gt; &gt; For EWS
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=449772&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:20
&gt; &gt; &gt; +        so, then we convert TIFF data from the pasteboard to JPEG or PNG, respectively.
&gt; &gt; 
&gt; &gt; This sounds like reencoding, which at least in the JPEG case can degrade
&gt; &gt; quality, and that doesn’t sound like what I said AppKit did.
&gt; 
&gt; Indeed, this is still transcoding image data; note that we can&apos;t expose raw
&gt; PNG and JPEG data on paste, so we need some kind of strategy to avoid
&gt; leaking privacy-sensitive metadata on pasted images.
&gt; 
&gt; I&apos;m still exploring some strategies to achieve this without transcoding; we
&gt; might be able to just strip out (most) metadata properties without having to
&gt; reencode to the original format...

Another strategy is to skip the transcoding step just for Mail, via SPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833208</commentid>
    <comment_count>6</comment_count>
      <attachid>449772</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-01-23 23:33:41 -0800</bug_when>
    <thetext>Comment on attachment 449772
For EWS

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

&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:20
&gt;&gt;&gt;&gt; +        so, then we convert TIFF data from the pasteboard to JPEG or PNG, respectively.
&gt;&gt;&gt; 
&gt;&gt;&gt; This sounds like reencoding, which at least in the JPEG case can degrade quality, and that doesn’t sound like what I said AppKit did.
&gt;&gt; 
&gt;&gt; Indeed, this is still transcoding image data; note that we can&apos;t expose raw PNG and JPEG data on paste, so we need some kind of strategy to avoid leaking privacy-sensitive metadata on pasted images.
&gt;&gt; 
&gt;&gt; I&apos;m still exploring some strategies to achieve this without transcoding; we might be able to just strip out (most) metadata properties without having to reencode to the original format...
&gt; 
&gt; Another strategy is to skip the transcoding step just for Mail, via SPI.

Skipping sanitization process for app usage seems sensible especially if we restrict the origin.
So if origin of the document is local &amp; app opts-in then don&apos;t hide content from the clipboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833209</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-01-23 23:35:09 -0800</bug_when>
    <thetext>Specifically, any app that is browser like or any document whose top-level document origin isn&apos;t local will continue to use the full sanitization path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833314</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2022-01-24 07:56:01 -0800</bug_when>
    <thetext>Out of interest, how is this dealt with for &lt;input type=file&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833319</commentid>
    <comment_count>9</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-24 08:00:38 -0800</bug_when>
    <thetext>(In reply to mitz from comment #8)
&gt; Out of interest, how is this dealt with for &lt;input type=file&gt;?

When using a file input, it&apos;s assumed that the user knows they are uploading the file as-is, with all metadata.

For pasted files, we don&apos;t (or rather, shouldn&apos;t) make the same assumption — we only allow the web page to read data that is &quot;visibly exposed&quot;, from the user&apos;s point of view.

A scenario where this property is especially important to uphold is when copying and pasting markup, in which case comments and other non-rendered content in the fragment can hold PII (as seen when copying from some native apps, such as Microsoft Word).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833328</commentid>
    <comment_count>10</comment_count>
    <who name="">mitz</who>
    <bug_when>2022-01-24 08:09:12 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #9)
&gt; (In reply to mitz from comment #8)
&gt; &gt; Out of interest, how is this dealt with for &lt;input type=file&gt;?
&gt; 
&gt; When using a file input, it&apos;s assumed that the user knows they are uploading
&gt; the file as-is, with all metadata.
&gt; 
&gt; For pasted files, we don&apos;t (or rather, shouldn&apos;t) make the same assumption —
&gt; we only allow the web page to read data that is &quot;visibly exposed&quot;, from the
&gt; user&apos;s point of view.
&gt; 
&gt; A scenario where this property is especially important to uphold is when
&gt; copying and pasting markup, in which case comments and other non-rendered
&gt; content in the fragment can hold PII (as seen when copying from some native
&gt; apps, such as Microsoft Word).

I see. It’s worth keeping in mind that TIFF data may contain metadata as well, so it may need to be processed as well. I think there must be a better way to do this than transcoding, though (notably, sharing photos from iOS uses something to strip some or all metadata).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833331</commentid>
    <comment_count>11</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-24 08:14:08 -0800</bug_when>
    <thetext>(In reply to mitz from comment #10)
&gt; (In reply to Wenson Hsieh from comment #9)
&gt; &gt; (In reply to mitz from comment #8)
&gt; &gt; &gt; Out of interest, how is this dealt with for &lt;input type=file&gt;?
&gt; &gt; 
&gt; &gt; When using a file input, it&apos;s assumed that the user knows they are uploading
&gt; &gt; the file as-is, with all metadata.
&gt; &gt; 
&gt; &gt; For pasted files, we don&apos;t (or rather, shouldn&apos;t) make the same assumption —
&gt; &gt; we only allow the web page to read data that is &quot;visibly exposed&quot;, from the
&gt; &gt; user&apos;s point of view.
&gt; &gt; 
&gt; &gt; A scenario where this property is especially important to uphold is when
&gt; &gt; copying and pasting markup, in which case comments and other non-rendered
&gt; &gt; content in the fragment can hold PII (as seen when copying from some native
&gt; &gt; apps, such as Microsoft Word).
&gt; 
&gt; I see. It’s worth keeping in mind that TIFF data may contain metadata as
&gt; well, so it may need to be processed as well. I think there must be a better
&gt; way to do this than transcoding, though (notably, sharing photos from iOS
&gt; uses something to strip some or all metadata).

Yes! I have an approach that uses CG API to copy out the image data while stripping away all metadata fields except for image orientation, and it seems to be working reasonably well — I&apos;ll post a new patch here soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833354</commentid>
    <comment_count>12</comment_count>
      <attachid>449824</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-24 09:04:40 -0800</bug_when>
    <thetext>Created attachment 449824
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833401</commentid>
    <comment_count>13</comment_count>
      <attachid>449824</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2022-01-24 11:17:46 -0800</bug_when>
    <thetext>Comment on attachment 449824
For EWS

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

&gt; Source/WebCore/platform/mac/PasteboardMac.mm:438
&gt; +static RefPtr&lt;SharedBuffer&gt; imageDataAfterRemovingMetadata(Ref&lt;SharedBuffer&gt;&amp;&amp; buffer)

It seems a bit unfortunate that this very-generically-named function will break all animated images (GIF and APNG). I think your changelog suggests they should never get here; maybe an assertion or type check or something at the top? Or add all of the animation properties to your allowlist?

&gt; Source/WebCore/platform/mac/PasteboardMac.mm:455
&gt; +            if (![name isEqualToString:(__bridge NSString *)kCGImagePropertyTIFFDictionary]) {

Not sure I follow what&apos;s going on here; you&apos;re only preserving image orientation in the TIFF properties? What about the other formats?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833414</commentid>
    <comment_count>14</comment_count>
      <attachid>449824</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-24 11:40:00 -0800</bug_when>
    <thetext>Comment on attachment 449824
For EWS

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

Thanks for taking a look!

&gt;&gt; Source/WebCore/platform/mac/PasteboardMac.mm:438
&gt;&gt; +static RefPtr&lt;SharedBuffer&gt; imageDataAfterRemovingMetadata(Ref&lt;SharedBuffer&gt;&amp;&amp; buffer)
&gt; 
&gt; It seems a bit unfortunate that this very-generically-named function will break all animated images (GIF and APNG). I think your changelog suggests they should never get here; maybe an assertion or type check or something at the top? Or add all of the animation properties to your allowlist?

Yes, that&apos;s right — we&apos;ll only get here for TIFF, PNG and JPEG images. In the future, if we add support for reading image data in image/gif format or support for animated PNG, we&apos;ll need to adjust this logic to preserve animation-related properties as well.

As we discussed, I&apos;ll adjust this to only add the first frame of the image, since that&apos;s the behavior we currently end up with if we have animated PNG, and leave a FIXME to track making GIF/APNG readable in this codepath.

&gt;&gt; Source/WebCore/platform/mac/PasteboardMac.mm:455
&gt;&gt; +            if (![name isEqualToString:(__bridge NSString *)kCGImagePropertyTIFFDictionary]) {
&gt; 
&gt; Not sure I follow what&apos;s going on here; you&apos;re only preserving image orientation in the TIFF properties? What about the other formats?

So from local testing, it seems like image orientation is a subway of the tiff image property dictionary (i.e. the dictionary labeled {TIFF} in the image properties).

All images appear to have this {TIFF} dictionary…at least, from what I could tell. I&apos;ll do more testing and double check this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833433</commentid>
    <comment_count>15</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-24 12:25:32 -0800</bug_when>
    <thetext>So after taking a closer look — it seems that even in the current implementation where we&apos;re transcoding from PNG/JPG =&gt; TIFF, AppKit *still* preserves all metadata properties on the image, so this extra TIFF transcoding step wasn&apos;t giving us any sanitization benefit to begin with — the only thing it does is change the image format and inflate image size 🤦🏻‍♂️.

I think we should address this potential PII leak in a followup, but at least we know that simply reading the JPEG/PNG data isn&apos;t going to introduce any new privacy issues than we have today. I&apos;ll move my WIP on `imageDataAfterRemovingMetadata()` over to &lt;https://webkit.org/b/235534&gt;, and just do the &quot;prioritize JPG/PNG data&quot; part in this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833440</commentid>
    <comment_count>16</comment_count>
      <attachid>449845</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-24 12:38:42 -0800</bug_when>
    <thetext>Created attachment 449845
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833447</commentid>
    <comment_count>17</comment_count>
      <attachid>449845</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-01-24 13:07:31 -0800</bug_when>
    <thetext>Comment on attachment 449845
Patch

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

&gt; Source/WebCore/platform/mac/PasteboardMac.mm:442
&gt; +    Vector&lt;PasteboardItemInfo&gt; relevantItems;

relevant items sounds very generic vague.
How about itemsForIndexByFidelity?
Alternatively, it might be better to create a lambda here
that each case below uses:

e.g.
auto platformTypesFromItems = [](auto&amp; items) {
    HashSet&lt;String&gt; types;
    for (auto&amp; item : types) {
        for (auto&amp; type : item.platformTypesByFidelity)
            nonTranscodedTypes.add(type);
    }
    return types;
}

if (itemIndex) {
    if (auto itemInfo = strategy.informationForItemAtIndex(*itemIndex, m_pasteboardName, m_changeCount, context())) {
        types = itemInfo-&gt;platformTypesByFidelity;
        nonTranscodedTypes = platformTypesFromItems(*itemInfo);
    }
} else {
    strategy.getTypes(types, m_pasteboardName, context());
    if (auto allItems = strategy.allPasteboardItemInfo(m_pasteboardName, m_changeCount, context()))
        nonTranscodedTypes = platformTypesFromItems(*itemInfo);
}

&gt; Source/WebCore/platform/mac/PasteboardMac.mm:537
&gt; +        { String(legacyTIFFPasteboardType()), &quot;image/tiff&quot;_s },

Doesn&apos;t this prefer TIFF and PDF over PNG/JPEG if both are written into the pasteboard?
Perhaps that warrants an explanation in the change log since this patch is about preferring PNG/JPEG.

&gt; Source/WebCore/platform/mac/PasteboardMac.mm:571
&gt; +    // If the original data could not be read directly, fall back by trying to transcode to any of the above types.

This comment repeats what the code says.
Can we instead explain when this would happen?
Why may we not be able to read the original data?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833463</commentid>
    <comment_count>18</comment_count>
      <attachid>449845</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-24 13:50:00 -0800</bug_when>
    <thetext>Comment on attachment 449845
Patch

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

Thanks for the review!

&gt;&gt; Source/WebCore/platform/mac/PasteboardMac.mm:442
&gt;&gt; +    Vector&lt;PasteboardItemInfo&gt; relevantItems;
&gt; 
&gt; relevant items sounds very generic vague.
&gt; How about itemsForIndexByFidelity?
&gt; Alternatively, it might be better to create a lambda here
&gt; that each case below uses:
&gt; 
&gt; e.g.
&gt; auto platformTypesFromItems = [](auto&amp; items) {
&gt;     HashSet&lt;String&gt; types;
&gt;     for (auto&amp; item : types) {
&gt;         for (auto&amp; type : item.platformTypesByFidelity)
&gt;             nonTranscodedTypes.add(type);
&gt;     }
&gt;     return types;
&gt; }
&gt; 
&gt; if (itemIndex) {
&gt;     if (auto itemInfo = strategy.informationForItemAtIndex(*itemIndex, m_pasteboardName, m_changeCount, context())) {
&gt;         types = itemInfo-&gt;platformTypesByFidelity;
&gt;         nonTranscodedTypes = platformTypesFromItems(*itemInfo);
&gt;     }
&gt; } else {
&gt;     strategy.getTypes(types, m_pasteboardName, context());
&gt;     if (auto allItems = strategy.allPasteboardItemInfo(m_pasteboardName, m_changeCount, context()))
&gt;         nonTranscodedTypes = platformTypesFromItems(*itemInfo);
&gt; }

Sounds good! Refactored this to pull the logic out into a lambda.

&gt;&gt; Source/WebCore/platform/mac/PasteboardMac.mm:537
&gt;&gt; +        { String(legacyTIFFPasteboardType()), &quot;image/tiff&quot;_s },
&gt; 
&gt; Doesn&apos;t this prefer TIFF and PDF over PNG/JPEG if both are written into the pasteboard?
&gt; Perhaps that warrants an explanation in the change log since this patch is about preferring PNG/JPEG.

Ah, so this patch is more about avoiding unnecessary transcoding in the case where PNG/JPEG data is supplied to the pasteboard (before this patch, we end up forcing AppKit to transcode to TIFF anyways).

I think that if TIFF is explicitly written to the pasteboard (such that reading it does not require transcoding from another format), then it&apos;s probably fine to continue choosing TIFF (even if some other formats like PNG/JPEG are also written to the pasteboard). I&apos;ll clarify this in the ChangeLog.

&gt;&gt; Source/WebCore/platform/mac/PasteboardMac.mm:571
&gt;&gt; +    // If the original data could not be read directly, fall back by trying to transcode to any of the above types.
&gt; 
&gt; This comment repeats what the code says.
&gt; Can we instead explain when this would happen?
&gt; Why may we not be able to read the original data?

So one scenario where we would end up here is when the pasteboard contains a format that isn&apos;t one of (TIFF, PDF, PNG, JPEG), so in order to still handle the paste we fall back by transcoding to one of these formats.

A more concrete example is when the pasteboard only contains GIF data; in this case it matches none of the 4 types above, so we&apos;ll handle it by transcoding to TIFF instead.

Instead of relying on comments here, I renamed `remainingImageTypesToRead` to `transcodedImageTypesToRead`, which I think better describes this behavior (without needing separate comments).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833506</commentid>
    <comment_count>19</comment_count>
      <attachid>449864</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-24 14:55:09 -0800</bug_when>
    <thetext>Created attachment 449864
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833541</commentid>
    <comment_count>20</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-24 15:48:48 -0800</bug_when>
    <thetext>Committed r288477 (246360@main): &lt;https://commits.webkit.org/246360@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 449864.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449772</attachid>
            <date>2022-01-23 16:44:38 -0800</date>
            <delta_ts>2022-01-24 09:04:38 -0800</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-190101-20220123164437.patch</filename>
            <type>text/plain</type>
            <size>17652</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmFmNzUzMTc3MmY0ZTdi
YWZiMmRhMGQ0NzcwNWE4OWZkMjBjOTM0MC4uYTgwMzIzOTA2NWI3MjE1OWI4OWI2Mzg1NTJjNTRl
YjJiZGI0NzlhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIyLTAxLTIzICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFttYWNPU10gVXBk
YXRlIFBhc3RlYm9hcmQ6OnJlYWQgdG8gcHJpb3JpdGl6ZSBuYXRpdmUgcmVwcmVzZW50YXRpb25z
IG92ZXIgVElGRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkwMTAxCisgICAgICAgIHJkYXI6Ly80NDg3OTI0NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBvbiBtYWNPUywgd2hlbiBwYXN0
aW5nIGltYWdlIGRhdGEgZnJvbSB0aGUgcGFzdGVib2FyZCBpbnRvIHJpY2hseSBlZGl0YWJsZSBl
bGVtZW50cywgd2UgYXR0ZW1wdCB0bworICAgICAgICByZWFkIHRoZSBpbWFnZSBkYXRhIGJ5IGNo
ZWNraW5nIGEgaGFyZC1jb2RlZCBsaXN0IG9mIHR5cGVzOyBpbiBvcmRlciwgdGhlc2UgYXJlOiBU
SUZGLCBQREYsIFBORywgYW5kIGZpbmFsbHkKKyAgICAgICAgSlBFRy4gU2luY2UgQXBwS2l0IGF1
dG9tYXRpY2FsbHkgcHJvdmlkZXMgVElGRiBhcyBhbiBhdmFpbGFibGUgdHlwZSBmb3IgY29tcGF0
aWJpbGl0eSB3aGVuIHdyaXRpbmcgbm9uLVRJRkYKKyAgICAgICAgaW1hZ2UgZGF0YSB0byB0aGUg
cGFzdGVib2FyZCwgdGhpcyBtZWFucyB0aGF0IFdlYktpdCBhdXRvbWF0aWNhbGx5IHRyYW5zY29k
ZXMgYWxsIGltYWdlcyB0byBUSUZGIHdoZW4gcGFzdGluZworICAgICAgICBpbWFnZXMgaW4gZWRp
dGFibGUgYXJlYXMuCisKKyAgICAgICAgV2hpbGUgdGhpcyBwcmV2ZW50cyBpbWFnZSBtZXRhZGF0
YSBmcm9tIHVuaW50ZW50aW9uYWxseSBsZWFraW5nIHRocm91Z2ggdG8gd2VicGFnZXMsIGl0IGFs
c28gbGVhZHMgdG8gdW5leHBlY3RlZAorICAgICAgICBiZWhhdmlvciBpbiBNYWlsIGNvbXBvc2Ug
d2hlbiB1c2luZyB0aGUgY29udGludWl0eSBjYW1lcmEgdG8gaW5zZXJ0IGltYWdlcywgc2luY2Ug
YWxsIGRyYXdpbmdzIGFuZCBwaG90b3MgZW5kIHVwCisgICAgICAgIGJlaW5nIGluc2VydGVkIGFz
IChvZnRlbiBtdWNoIGxhcmdlcikgVElGRiBmaWxlcyBpbnN0ZWFkIG9mIEpQRUcgYW5kIFBORywg
cmVzcGVjdGl2ZWx5LgorCisgICAgICAgIFRvIGFkZHJlc3MgdGhpcywgd2UgY2hlY2sgdG8gc2Vl
IGlmIGltYWdlcyBvbiB0aGUgcGFzdGVib2FyZCB3ZXJlIG9yaWdpbmFsbHkgaW5zZXJ0ZWQgYXMg
SlBFRyBvciBQTkcgZGF0YTsgaWYKKyAgICAgICAgc28sIHRoZW4gd2UgY29udmVydCBUSUZGIGRh
dGEgZnJvbSB0aGUgcGFzdGVib2FyZCB0byBKUEVHIG9yIFBORywgcmVzcGVjdGl2ZWx5LgorCisg
ICAgICAgIFRlc3Q6IFdLQXR0YWNobWVudFRlc3RzLlBhc3RpbmdQcmVzZXJ2ZXNJbWFnZUZvcm1h
dAorCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OnJlYWQpOgorCisgICAgICAgIEFkanVzdCB0aGlzIHRvIGFkZGl0aW9uYWxseSBjb252ZXJ0IFRJ
RkYgZGF0YSB0byBlaXRoZXIgUE5HIG9yIEpQRUcsIHRvIG1hdGNoIHRoZSBzb3VyY2UgaW1hZ2Ug
Zm9ybWF0LgorCisgICAgICAgIChXZWJDb3JlOjpiaXRtYXBQTkdGaWxlVHlwZSk6IERlbGV0ZWQu
CisKKyAgICAgICAgUmVtb3ZlIHRoaXMgc3RhdGljIGhlbHBlciBmdW5jdGlvbiAod2hpY2ggd2Fz
IG9ubHkgYWRkZWQgdG8gaGVscCBoaWRlIHVzZXMgb2YgZGVwcmVjYXRlZCBOU0JpdG1hcEltYWdl
RmlsZVR5cGUKKyAgICAgICAgdmFsdWVzIHByaW9yIHRvIG1hY09TIDEwLjE0KS4KKworICAgICAg
ICAoV2ViQ29yZTo6Y29udmVydFRJRkZUb1BORyk6IERlbGV0ZWQuCisKKyAgICAgICAgUHVsbCB0
aGlzIE1hYy1zcGVjaWZpYyBzdGF0aWMgZnVuY3Rpb24gb3V0IGludG8gUGFzdGVib2FyZE1hYy5t
bSwgYW5kIGV4cG9zZSBpdCBhcyBhIGhlbHBlciBmdW5jdGlvbiBpbiB0aGUKKyAgICAgICAgaGVh
ZGVyLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OmJpdG1hcElt
YWdlRmlsZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRJRkYpOgorCisgICAgICAg
IEFkZCBhIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IFRJRkYgZGF0YSB0byBlaXRoZXIgUE5H
IG9yIEpQRUcgaW1hZ2UgZGF0YS4KKwogMjAyMi0wMS0yMiAgQW5kcmVzIEdvbnphbGV6ICA8YW5k
cmVzZ18yMkBhcHBsZS5jb20+CiAKICAgICAgICAgQ3JlYXRlIGFuY2VzdHJ5IG9mIGlzb2xhdGVk
IG9iamVjdHMgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIHRoZSBlbnRpcmUgc3VidHJlZSBmb3IgYW4g
YW5jZXN0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJk
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXggZjJlYjk3MjAx
OWE0MDJlYjg4Y2VmZjhmNDdjM2U4NjNmZTM0MDJjNi4uNzU3MjczZjk1ZDQ4MDRjNTYzMmZmZjZm
ZWFlZmJlZTMyOTE3NjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFz
dGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApAQCAt
Mzc4LDYgKzM3OCw5IEBAIGV4dGVybiBOU1N0cmluZyAqVUlDb2xvclBib2FyZFR5cGU7CiBleHRl
cm4gY29uc3QgY2hhciogY29uc3QgV2ViQXJjaGl2ZVBib2FyZFR5cGU7CiBleHRlcm4gY29uc3Qg
Y2hhciogY29uc3QgV2ViVVJMTmFtZVBib2FyZFR5cGU7CiBleHRlcm4gY29uc3QgY2hhciogY29u
c3QgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlOworCitlbnVtIGNsYXNzIEltYWdlVHJhbnNj
b2RpbmdUYXJnZXQgOiBib29sIHsgSlBFRywgUE5HIH07CitSZWY8U2hhcmVkQnVmZmVyPiBjb252
ZXJ0VElGRihGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiwgSW1hZ2VUcmFuc2NvZGluZ1RhcmdldCk7
CiAjZW5kaWYKIAogI2lmICFQTEFURk9STShHVEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KaW5kZXggYjgxNzA4MTdjZWM1OWUyMmQzYzBl
OWE3OGYxNDZjMDMzZTRjMTY2OS4uMjA3YzgwZjM5YmNmZTU0MzNkNmU3ZmNkNmU0YzYwMWRiODY0
YTIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2Fy
ZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRD
b2NvYS5tbQpAQCAtNDAsMTMgKzQwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYg
UExBVEZPUk0oTUFDKQotc3RhdGljIE5TQml0bWFwSW1hZ2VGaWxlVHlwZSBiaXRtYXBQTkdGaWxl
VHlwZSgpCi17Ci0gICAgcmV0dXJuIE5TQml0bWFwSW1hZ2VGaWxlVHlwZVBORzsKLX0KLSNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCi0KIC8vIE1ha2luZyB0aGlzIG5vbi1pbmxpbmUgc28gdGhhdCBX
ZWJLaXQgMidzIGRlY29kaW5nIGRvZXNuJ3QgaGF2ZSB0byBpbmNsdWRlIEZyYWdtZW50ZWRTaGFy
ZWRCdWZmZXIuaC4KIFBhc3RlYm9hcmRXZWJDb250ZW50OjpQYXN0ZWJvYXJkV2ViQ29udGVudCgp
ID0gZGVmYXVsdDsKIFBhc3RlYm9hcmRXZWJDb250ZW50Ojp+UGFzdGVib2FyZFdlYkNvbnRlbnQo
KSA9IGRlZmF1bHQ7CkBAIC0yMTAsMTUgKzIwMyw2IEBAIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9h
cmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKQogICAgIHJldHVybiBjb3B5VG9WZWN0
b3IocmVzdWx0KTsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLXN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBjb252ZXJ0VElGRlRvUE5HKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXImIHRpZmZCdWZmZXIp
Ci17Ci0gICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBp
bml0V2l0aERhdGE6IHRpZmZCdWZmZXIubWFrZUNvbnRpZ3VvdXMoKS0+Y3JlYXRlTlNEYXRhKCku
Z2V0KCldKTsKLSAgICBOU0RhdGEgKnBuZ0RhdGEgPSBbaW1hZ2UgcmVwcmVzZW50YXRpb25Vc2lu
Z1R5cGU6Yml0bWFwUE5HRmlsZVR5cGUoKSBwcm9wZXJ0aWVzOkB7IH1dOwotICAgIHJldHVybiBT
aGFyZWRCdWZmZXI6OmNyZWF0ZShwbmdEYXRhKTsKLX0KLSNlbmRpZgotCiB2b2lkIFBhc3RlYm9h
cmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlciwgc3RkOjpvcHRpb25hbDxzaXpl
X3Q+IGl0ZW1JbmRleCkKIHsKICAgICBpZiAoIWl0ZW1JbmRleCkgewpAQCAtMjM5LDcgKzIyMyw3
IEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYgcmVhZGVyLCBz
dGQ6Om9wdGlvbmFsPHNpemVfdD4gaXRlbUluCiAgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IHJl
YWRCdWZmZXIoaXRlbUluZGV4LCBjb2NvYVR5cGUpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAg
ICAgICAgIGlmIChidWZmZXIgJiYgaW1hZ2VUeXBlID09IEltYWdlVHlwZTo6VElGRikKLSAgICAg
ICAgICAgICAgICBidWZmZXIgPSBjb252ZXJ0VElGRlRvUE5HKGJ1ZmZlci5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAgICAgICAgICAgICBidWZmZXIgPSBjb252ZXJ0VElGRihidWZmZXIucmVsZWFz
ZU5vbk51bGwoKSwgSW1hZ2VUcmFuc2NvZGluZ1RhcmdldDo6UE5HKTsKICNlbmRpZgogICAgICAg
ICAgICAgaWYgKGJ1ZmZlcikgewogICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQnVmZmVyKGlt
YWdlVHlwZVRvRmFrZUZpbGVuYW1lKGltYWdlVHlwZSksIG1pbWVUeXBlLCBidWZmZXIucmVsZWFz
ZU5vbk51bGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFz
dGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFj
Lm1tCmluZGV4IDNlNTYzM2ZiZGE3MzVkNWExMTQ1ZTI1MWNjOTgxODk1ZDI0MjMwZjEuLmU2M2I1
ZDYyMzI5NzI2NTc1NmNlMWUyMGZhYjZhZDA2MGI5YjNjZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCkBAIC00MzksMTIgKzQzOSwxOCBAQCB2b2lk
IFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFdlYkNvbnRlbnRSZWFkZXImIHJlYWRlciwgV2Vi
Q29udGVudFJlYWRpbmdQb2xpYwogewogICAgIGF1dG8mIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKIAorICAgIFZlY3RvcjxQYXN0ZWJvYXJk
SXRlbUluZm8+IHJlbGV2YW50SXRlbXM7CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAgICAg
aWYgKGl0ZW1JbmRleCkgewotICAgICAgICBpZiAoYXV0byBpdGVtSW5mbyA9IHN0cmF0ZWd5Lmlu
Zm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoKml0ZW1JbmRleCwgbV9wYXN0ZWJvYXJkTmFtZSwgbV9j
aGFuZ2VDb3VudCwgY29udGV4dCgpKSkKKyAgICAgICAgaWYgKGF1dG8gaXRlbUluZm8gPSBzdHJh
dGVneS5pbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KCppdGVtSW5kZXgsIG1fcGFzdGVib2FyZE5h
bWUsIG1fY2hhbmdlQ291bnQsIGNvbnRleHQoKSkpIHsKICAgICAgICAgICAgIHR5cGVzID0gaXRl
bUluZm8tPnBsYXRmb3JtVHlwZXNCeUZpZGVsaXR5OwotICAgIH0gZWxzZQorICAgICAgICAgICAg
cmVsZXZhbnRJdGVtcyA9IHsgV1RGTW92ZSgqaXRlbUluZm8pIH07CisgICAgICAgIH0KKyAgICB9
IGVsc2UgewogICAgICAgICBzdHJhdGVneS5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFt
ZSwgY29udGV4dCgpKTsKKyAgICAgICAgaWYgKGF1dG8gYWxsSXRlbXMgPSBzdHJhdGVneS5hbGxQ
YXN0ZWJvYXJkSXRlbUluZm8obV9wYXN0ZWJvYXJkTmFtZSwgbV9jaGFuZ2VDb3VudCwgY29udGV4
dCgpKSkKKyAgICAgICAgICAgIHJlbGV2YW50SXRlbXMgPSBXVEZNb3ZlKCphbGxJdGVtcyk7Cisg
ICAgfQogCiAgICAgcmVhZGVyLmNvbnRlbnRPcmlnaW4gPSByZWFkT3JpZ2luKCk7CiAKQEAgLTUx
OSw1MSArNTI1LDU0IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogICAgIGlm
IChwb2xpY3kgPT0gV2ViQ29udGVudFJlYWRpbmdQb2xpY3k6Ok9ubHlSaWNoVGV4dFR5cGVzKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKGxlZ2FjeVRJ
RkZQYXN0ZWJvYXJkVHlwZSgpKSkpIHsKLSAgICAgICAgaWYgKGF1dG8gYnVmZmVyID0gcmVhZEJ1
ZmZlckF0UHJlZmVycmVkSXRlbUluZGV4KGxlZ2FjeVRJRkZQYXN0ZWJvYXJkVHlwZSgpLCBpdGVt
SW5kZXgsIHN0cmF0ZWd5LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpKSB7Ci0gICAgICAg
ICAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBjaGFuZ2VDb3VudCgpIHx8IHJlYWRlci5yZWFkSW1h
Z2UoYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksICJpbWFnZS90aWZmIl9zKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAg
ICBlbnVtIGNsYXNzIENhbkF0dGVtcHRUcmFuc2NvZGluZyA6IGJvb2wgeyBObywgWWVzIH07Cisg
ICAgdXNpbmcgSW1hZ2VSZWFkaW5nSW5mbyA9IHN0ZDo6dHVwbGU8U3RyaW5nLCBBU0NJSUxpdGVy
YWwsIENhbkF0dGVtcHRUcmFuc2NvZGluZz47CisgICAgY29uc3Qgc3RkOjphcnJheTxJbWFnZVJl
YWRpbmdJbmZvLCA2PiBpbWFnZVR5cGVzVG9SZWFkIHsgeworICAgICAgICB7IFN0cmluZyhsZWdh
Y3lUSUZGUGFzdGVib2FyZFR5cGUoKSksICJpbWFnZS90aWZmIl9zLCBDYW5BdHRlbXB0VHJhbnNj
b2Rpbmc6OlllcyB9LAorICAgICAgICB7IFN0cmluZyhOU1Bhc3RlYm9hcmRUeXBlVElGRiksICJp
bWFnZS90aWZmIl9zLCBDYW5BdHRlbXB0VHJhbnNjb2Rpbmc6OlllcyB9LAorICAgICAgICB7IFN0
cmluZyhsZWdhY3lQREZQYXN0ZWJvYXJkVHlwZSgpKSwgImFwcGxpY2F0aW9uL3BkZiJfcywgQ2Fu
QXR0ZW1wdFRyYW5zY29kaW5nOjpObyB9LAorICAgICAgICB7IFN0cmluZyhOU1Bhc3RlYm9hcmRU
eXBlUERGKSwgImFwcGxpY2F0aW9uL3BkZiJfcywgQ2FuQXR0ZW1wdFRyYW5zY29kaW5nOjpObyB9
LAorICAgICAgICB7IFN0cmluZyhrVVRUeXBlUE5HKSwgImltYWdlL3BuZyJfcywgQ2FuQXR0ZW1w
dFRyYW5zY29kaW5nOjpObyB9LAorICAgICAgICB7IFN0cmluZyhrVVRUeXBlSlBFRyksICJpbWFn
ZS9qcGVnIl9zLCBDYW5BdHRlbXB0VHJhbnNjb2Rpbmc6Ok5vIH0KKyAgICB9IH07CisKKyAgICBz
dGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxJbWFnZVRyYW5zY29kaW5nVGFyZ2V0LCBBU0NJSUxpdGVy
YWw+PiB0cmFuc2NvZGluZ1RhcmdldDsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiByZWxldmFudEl0
ZW1zKSB7CisgICAgICAgIGF1dG8mIG5vblRyYW5zY29kZWRUeXBlcyA9IGl0ZW0ucGxhdGZvcm1U
eXBlc0J5RmlkZWxpdHk7CisgICAgICAgIGlmIChub25UcmFuc2NvZGVkVHlwZXMuY29udGFpbnMo
U3RyaW5nKGtVVFR5cGVQTkcpKSkgeworICAgICAgICAgICAgdHJhbnNjb2RpbmdUYXJnZXQgPSB7
IHsgSW1hZ2VUcmFuc2NvZGluZ1RhcmdldDo6UE5HLCAiaW1hZ2UvcG5nIl9zIH0gfTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5z
KFN0cmluZyhOU1Bhc3RlYm9hcmRUeXBlVElGRikpKSB7Ci0gICAgICAgIGlmIChhdXRvIGJ1ZmZl
ciA9IHJlYWRCdWZmZXJBdFByZWZlcnJlZEl0ZW1JbmRleChOU1Bhc3RlYm9hcmRUeXBlVElGRiwg
aXRlbUluZGV4LCBzdHJhdGVneSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKSkgewotICAg
ICAgICAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnQoKSB8fCByZWFkZXIucmVh
ZEltYWdlKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCAiaW1hZ2UvdGlmZiJfcykpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobm9uVHJhbnNjb2RlZFR5cGVzLmNvbnRhaW5z
KFN0cmluZyhrVVRUeXBlSlBFRykpKSB7CisgICAgICAgICAgICB0cmFuc2NvZGluZ1RhcmdldCA9
IHsgeyBJbWFnZVRyYW5zY29kaW5nVGFyZ2V0OjpKUEVHLCAiaW1hZ2UvanBlZyJfcyB9IH07Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKyAgICBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19FTkQKIAotICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcobGVnYWN5
UERGUGFzdGVib2FyZFR5cGUoKSkpKSB7Ci0gICAgICAgIGlmIChhdXRvIGJ1ZmZlciA9IHJlYWRC
dWZmZXJBdFByZWZlcnJlZEl0ZW1JbmRleChsZWdhY3lQREZQYXN0ZWJvYXJkVHlwZSgpLCBpdGVt
SW5kZXgsIHN0cmF0ZWd5LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpKSB7Ci0gICAgICAg
ICAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBjaGFuZ2VDb3VudCgpIHx8IHJlYWRlci5yZWFkSW1h
Z2UoYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksICJhcHBsaWNhdGlvbi9wZGYiX3MpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBmb3IgKGF1dG8mIFtwYXN0
ZWJvYXJkVHlwZSwgbWltZVR5cGUsIGF0dGVtcHRUcmFuc2NvZGluZ10gOiBpbWFnZVR5cGVzVG9S
ZWFkKSB7CisgICAgICAgIGlmICghdHlwZXMuY29udGFpbnMocGFzdGVib2FyZFR5cGUpKQorICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUGFz
dGVib2FyZFR5cGVQREYpKSkgewotICAgICAgICBpZiAoYXV0byBidWZmZXIgPSByZWFkQnVmZmVy
QXRQcmVmZXJyZWRJdGVtSW5kZXgoTlNQYXN0ZWJvYXJkVHlwZVBERiwgaXRlbUluZGV4LCBzdHJh
dGVneSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKSkgewotICAgICAgICAgICAgaWYgKG1f
Y2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnQoKSB8fCByZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5y
ZWxlYXNlTm9uTnVsbCgpLCAiYXBwbGljYXRpb24vcGRmIl9zKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgIGF1dG8gYnVmZmVyID0gcmVhZEJ1ZmZl
ckF0UHJlZmVycmVkSXRlbUluZGV4KHBhc3RlYm9hcmRUeXBlLCBpdGVtSW5kZXgsIHN0cmF0ZWd5
LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOworICAgICAgICBpZiAobV9jaGFuZ2VDb3Vu
dCAhPSBjaGFuZ2VDb3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOwogCi1BTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoa1VU
VHlwZVBORykpKSB7Ci0gICAgICAgIGlmIChhdXRvIGJ1ZmZlciA9IHJlYWRCdWZmZXJBdFByZWZl
cnJlZEl0ZW1JbmRleChrVVRUeXBlUE5HLCBpdGVtSW5kZXgsIHN0cmF0ZWd5LCBtX3Bhc3RlYm9h
cmROYW1lLCBjb250ZXh0KCkpKSB7Ci0gICAgICAgICAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBj
aGFuZ2VDb3VudCgpIHx8IHJlYWRlci5yZWFkSW1hZ2UoYnVmZmVyLnJlbGVhc2VOb25OdWxsKCks
ICJpbWFnZS9wbmciX3MpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgICAgICBpZiAoIWJ1ZmZl
cikKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19CRUdJTgotICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoa1VUVHlwZUpQRUcpKSkgewot
ICAgICAgICBpZiAoYXV0byBidWZmZXIgPSByZWFkQnVmZmVyQXRQcmVmZXJyZWRJdGVtSW5kZXgo
a1VUVHlwZUpQRUcsIGl0ZW1JbmRleCwgc3RyYXRlZ3ksIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRl
eHQoKSkpIHsKLSAgICAgICAgICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IGNoYW5nZUNvdW50KCkg
fHwgcmVhZGVyLnJlYWRJbWFnZShidWZmZXIucmVsZWFzZU5vbk51bGwoKSwgImltYWdlL2pwZWci
X3MpKQorICAgICAgICBpZiAodHJhbnNjb2RpbmdUYXJnZXQgJiYgYXR0ZW1wdFRyYW5zY29kaW5n
ID09IENhbkF0dGVtcHRUcmFuc2NvZGluZzo6WWVzKSB7CisgICAgICAgICAgICBhdXRvIFt0eXBl
LCB0cmFuc2NvZGVkTUlNRVR5cGVdID0gKnRyYW5zY29kaW5nVGFyZ2V0OworICAgICAgICAgICAg
YnVmZmVyID0gY29udmVydFRJRkYoYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIHR5cGUpOworICAg
ICAgICAgICAgaWYgKHJlYWRlci5yZWFkSW1hZ2UoYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIHRy
YW5zY29kZWRNSU1FVHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KKworICAgICAgICBpZiAocmVhZGVyLnJlYWRJbWFnZShidWZm
ZXIucmVsZWFzZU5vbk51bGwoKSwgbWltZVR5cGUpKQorICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAgICAgaWYgKHR5cGVzLmNv
bnRhaW5zKFN0cmluZyhsZWdhY3lVUkxQYXN0ZWJvYXJkVHlwZSgpKSkpIHsKICAgICAgICAgVVJM
IHVybCA9IHN0cmF0ZWd5LnVybChtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwpAQCAtODM2
LDYgKzg0NSwyNSBAQCBib29sIFBhc3RlYm9hcmQ6OmNhbldyaXRlVHJ1c3R3b3J0aHlXZWJVUkxz
UGJvYXJkVHlwZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBOU0JpdG1hcEltYWdl
RmlsZVR5cGUgYml0bWFwSW1hZ2VGaWxlVHlwZShJbWFnZVRyYW5zY29kaW5nVGFyZ2V0IHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJbWFnZVRyYW5zY29kaW5nVGFyZ2V0
OjpKUEVHOgorICAgICAgICByZXR1cm4gTlNCaXRtYXBJbWFnZUZpbGVUeXBlSlBFRzsKKyAgICBj
YXNlIEltYWdlVHJhbnNjb2RpbmdUYXJnZXQ6OlBORzoKKyAgICAgICAgcmV0dXJuIE5TQml0bWFw
SW1hZ2VGaWxlVHlwZVBORzsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIE5TQml0bWFwSW1hZ2VGaWxlVHlwZVBORzsKK30KKworUmVmPFNoYXJlZEJ1ZmZlcj4g
Y29udmVydFRJRkYoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgdGlmZkJ1ZmZlciwgSW1hZ2VUcmFu
c2NvZGluZ1RhcmdldCB0eXBlKQoreworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdE5TKFtbTlNCaXRt
YXBJbWFnZVJlcCBhbGxvY10gaW5pdFdpdGhEYXRhOnRpZmZCdWZmZXIubWFrZUNvbnRpZ3VvdXMo
KS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCldKTsKKyAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFtpbWFn
ZSByZXByZXNlbnRhdGlvblVzaW5nVHlwZTpiaXRtYXBJbWFnZUZpbGVUeXBlKHR5cGUpIHByb3Bl
cnRpZXM6QHsgfV07CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGltYWdlRGF0YSk7
Cit9CisKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmZWU5YmJhNGVjZmIyZmVmYzU3ZjkwMjE3
YjI1ZTExOTU5MDM1M2UxLi45MTYwN2YzMDE5ZDg3ZGU3N2M3MDk1NjU3NGI1MDQ5YWFiODcyYzUx
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjYgQEAKKzIwMjItMDEtMjMgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBs
ZS5jb20+CisKKyAgICAgICAgW21hY09TXSBVcGRhdGUgUGFzdGVib2FyZDo6cmVhZCB0byBwcmlv
cml0aXplIG5hdGl2ZSByZXByZXNlbnRhdGlvbnMgb3ZlciBUSUZGCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTAxMDEKKyAgICAgICAgcmRhcjovLzQ0
ODc5MjQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGEgY3Jvc3MtcGxhdGZvcm0gQVBJIHRlc3QgdG8gdmVyaWZ5IHRoYXQgd2hlbiB1c2luZyB0
aGUgY2xpZW50LXNpZGUgYXR0YWNobWVudHMsIHBhc3RlZCBpbWFnZSBkYXRhIG9mCisgICAgICAg
IHZhcnlpbmcgZm9ybWF0cyAoUERGLCBKUEVHLCBQTkcpIGFyZSByZWFkIGluIHRoZWlyIG9yaWdp
bmFsIGZvcm0uIFNlZSBXZWJDb3JlL0NoYW5nZUxvZyBmb3IgbW9yZSBkZXRhaWxzLiBUaGlzCisg
ICAgICAgIHRlc3QgY3VycmVudGx5IHBhc3NlcyBvbiBpT1MgYnV0IGZhaWxzIG9uIG1hY09TLCB3
aGVyZSBib3RoIHRoZSBQTkcgYW5kIEpQRUcgaW1hZ2VzIGFyZSB0cmFuc2NvZGVkIGFuZCByZWFk
IGFzCisgICAgICAgIFRJRkYuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tOgorICAgICAgICAodGVzdEpQRUdGaWxlVVJMKToK
KyAgICAgICAgKHRlc3RKUEVHRGF0YSk6CisgICAgICAgIChwbGF0Zm9ybUNvcHlQREYpOgorICAg
ICAgICAocGxhdGZvcm1Db3B5SlBFRyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KworICAgICAgICBEcml2ZS1ieSBmaXg6IGFsc28gcmVtb3ZlIGEgSmF2YVNjcmlwdCBldmFsdWF0
aW9uIGluIGEgbmVhcmJ5IHRlc3QgdGhhdCBjb3VsZCBvbmx5IHJlc3VsdCBpbiBhbiBleGNlcHRp
b24gKGFuZAorICAgICAgICB3YXMgcHJvYmFibHkgYWNjaWRlbnRhbGx5IGxlZnQgdGhlcmUgd2hp
bGUgd3JpdGluZyB0aGUgdGVzdCkuCisKIDIwMjItMDEtMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW2ExMXldIFN0b3AgcmVnaXN0
ZXJpbmcgdGhlIHRyZWUgd2hlbiBjbGllbnRzIGFyZSBjb25uZWN0ZWQgd2l0aCBBVFNQSQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1l
bnRUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRh
Y2htZW50VGVzdHMubW0KaW5kZXggN2FlOWMyMzQ5MTE1MDZkMmVlMGM0YmRhYmMyZDc0NzI1N2Vl
MDc0Zi4uMzExMzI0NTcxY2I2NmZmYzZlODBkY2FlODBlMzVhYzQzZTk3NzA1MyAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0
cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNo
bWVudFRlc3RzLm1tCkBAIC0yNjAsNiArMjYwLDE2IEBAIHN0YXRpYyBOU0RhdGEgKnRlc3RQREZE
YXRhKCkKICAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6dGVzdFBERkZp
bGVVUkwoKV07CiB9CiAKK3N0YXRpYyBOU1VSTCAqdGVzdEpQRUdGaWxlVVJMKCkKK3sKKyAgICBy
ZXR1cm4gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInN1bnNldC1pbi1j
dXBlcnRpbm8tNjAwcHgiIHdpdGhFeHRlbnNpb246QCJqcGciIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl07Cit9CisKK3N0YXRpYyBOU0RhdGEgKnRlc3RKUEVHRGF0YSgp
Cit7CisgICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOnRlc3RKUEVHRmls
ZVVSTCgpXTsKK30KKwogQGltcGxlbWVudGF0aW9uIFRlc3RXS1dlYlZpZXcgKEF0dGFjaG1lbnRU
ZXN0aW5nKQogCiAtIChfV0tBdHRhY2htZW50ICopc3luY2hyb25vdXNseUluc2VydEF0dGFjaG1l
bnRXaXRoRmlsZVdyYXBwZXI6KE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBlciBjb250ZW50VHlw
ZTooTlNTdHJpbmcgKiljb250ZW50VHlwZQpAQCAtNjE2LDYgKzYyNiwzNiBAQCB2b2lkIHBsYXRm
b3JtQ29weVBORygpCiAjZW5kaWYKIH0KIAordm9pZCBwbGF0Zm9ybUNvcHlQREYoKQoreworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJv
YXJkIGdlbmVyYWxQYXN0ZWJvYXJkXTsKKyAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6QFso
X19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlUERGXSBvd25lcjpuaWxdOworICAgIFtwYXN0ZWJv
YXJkIHNldERhdGE6dGVzdFBERkRhdGEoKSBmb3JUeXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtV
VFR5cGVQREZdOworI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBVSVBhc3RlYm9hcmQg
KnBhc3RlYm9hcmQgPSBbVUlQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXTsKKyAgICBhdXRv
IGl0ZW0gPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaXRl
bSBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0
eWxlQXR0YWNobWVudF07CisgICAgW2l0ZW0gcmVnaXN0ZXJEYXRhOnRlc3RQREZEYXRhKCkgdHlw
ZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlUERGXTsKKyAgICBwYXN0ZWJvYXJkLml0ZW1Q
cm92aWRlcnMgPSBAWyBpdGVtLmdldCgpIF07CisjZW5kaWYKK30KKwordm9pZCBwbGF0Zm9ybUNv
cHlKUEVHKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJv
YXJkID0gW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF07CisgICAgW3Bhc3RlYm9hcmQg
ZGVjbGFyZVR5cGVzOkBbKF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZUpQRUddIG93bmVyOm5p
bF07CisgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTp0ZXN0SlBFR0RhdGEoKSBmb3JUeXBlOihfX2Jy
aWRnZSBOU1N0cmluZyAqKWtVVFR5cGVKUEVHXTsKKyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgVUlQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW1VJUGFzdGVib2FyZCBnZW5lcmFsUGFz
dGVib2FyZF07CisgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9j
XSBpbml0XSk7CisgICAgW2l0ZW0gc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVm
ZXJyZWRQcmVzZW50YXRpb25TdHlsZUF0dGFjaG1lbnRdOworICAgIFtpdGVtIHJlZ2lzdGVyRGF0
YTp0ZXN0SlBFR0RhdGEoKSB0eXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVKUEVHXTsK
KyAgICBwYXN0ZWJvYXJkLml0ZW1Qcm92aWRlcnMgPSBAWyBpdGVtLmdldCgpIF07CisjZW5kaWYK
K30KKwogI2lmIFBMQVRGT1JNKE1BQykKIHR5cGVkZWYgTlNJbWFnZSBQbGF0Zm9ybUltYWdlOwog
I2Vsc2UKQEAgLTE1ODcsNyArMTYyNyw2IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFj
aG1lbnRJZGVudGlmaWVyT2ZDbG9uZWRBdHRhY2htZW50KQogVEVTVChXS0F0dGFjaG1lbnRUZXN0
cywgU2V0RmlsZVdyYXBwZXJGb3JQREZJbWFnZUF0dGFjaG1lbnQpCiB7CiAgICAgYXV0byB3ZWJW
aWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwotICAgIFt3ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoKSIgY29tcGxldGlvbkhh
bmRsZXI6bmlsXTsKICAgICBOU1N0cmluZyAqaWRlbnRpZmllciA9IFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjb25zdCBpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
aW1nJyk7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaSk7IEhUTUxBdHRhY2htZW50RWxlbWVu
dC5nZXRBdHRhY2htZW50SWRlbnRpZmllcihpKSJdOwogICAgIGF1dG8gYXR0YWNobWVudCA9IHJl
dGFpblB0cihbd2ViVmlldyBfYXR0YWNobWVudEZvcklkZW50aWZpZXI6aWRlbnRpZmllcl0pOwog
CkBAIC0xNjAyLDYgKzE2NDEsMzUgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgU2V0RmlsZVdy
YXBwZXJGb3JQREZJbWFnZUF0dGFjaG1lbnQpCiAgICAgRVhQRUNUX0ZBTFNFKFthdHRhY2htZW50
IGlzQ29ubmVjdGVkXSk7CiB9CiAKK1RFU1QoV0tBdHRhY2htZW50VGVzdHMsIFBhc3RpbmdQcmVz
ZXJ2ZXNJbWFnZUZvcm1hdCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGlu
Z0F0dGFjaG1lbnRzKCk7CisgICAgeworICAgICAgICBwbGF0Zm9ybUNvcHlQTkcoKTsKKyAgICAg
ICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQo
KSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAi
UGFzdGUiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIEVYUEVDVF9FUSgxVSwgb2JzZXJ2ZXIub2Jz
ZXJ2ZXIoKS5pbnNlcnRlZC5jb3VudCk7CisgICAgICAgIF9XS0F0dGFjaG1lbnQgKmF0dGFjaG1l
bnQgPSBvYnNlcnZlci5vYnNlcnZlcigpLmluc2VydGVkWzBdOworICAgICAgICBFWFBFQ1RfV0tf
U1RSRVEoImltYWdlL3BuZyIsIGF0dGFjaG1lbnQuaW5mby5jb250ZW50VHlwZSk7CisgICAgfQor
ICAgIHsKKyAgICAgICAgcGxhdGZvcm1Db3B5UERGKCk7CisgICAgICAgIE9ic2VydmVBdHRhY2ht
ZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBbd2Vi
VmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVudDpu
aWxdOworICAgICAgICBFWFBFQ1RfRVEoMVUsIG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWQu
Y291bnQpOworICAgICAgICBfV0tBdHRhY2htZW50ICphdHRhY2htZW50ID0gb2JzZXJ2ZXIub2Jz
ZXJ2ZXIoKS5pbnNlcnRlZFswXTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlv
bi9wZGYiLCBhdHRhY2htZW50LmluZm8uY29udGVudFR5cGUpOworICAgIH0KKyAgICB7CisgICAg
ICAgIHBsYXRmb3JtQ29weUpQRUcoKTsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVz
Rm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5j
aHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiUGFzdGUiIGFyZ3VtZW50Om5pbF07CisgICAg
ICAgIEVYUEVDVF9FUSgxVSwgb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZC5jb3VudCk7Cisg
ICAgICAgIF9XS0F0dGFjaG1lbnQgKmF0dGFjaG1lbnQgPSBvYnNlcnZlci5vYnNlcnZlcigpLmlu
c2VydGVkWzBdOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoImltYWdlL2pwZWciLCBhdHRhY2ht
ZW50LmluZm8uY29udGVudFR5cGUpOworICAgIH0KK30KKwogI3ByYWdtYSBtYXJrIC0gUGxhdGZv
cm0tc3BlY2lmaWMgdGVzdHMKIAogI2lmIFBMQVRGT1JNKE1BQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449824</attachid>
            <date>2022-01-24 09:04:40 -0800</date>
            <delta_ts>2022-01-24 12:38:40 -0800</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-190101-20220124090439.patch</filename>
            <type>text/plain</type>
            <size>17390</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmFmNzUzMTc3MmY0ZTdi
YWZiMmRhMGQ0NzcwNWE4OWZkMjBjOTM0MC4uMzJlMjliNThhNzQzZjY3NTUxYTEyYzg0YmQ1NmQ1
YjNmNzJkNzIyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDIyLTAxLTI0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFttYWNPU10gVXBk
YXRlIFBhc3RlYm9hcmQ6OnJlYWQgdG8gcHJpb3JpdGl6ZSBuYXRpdmUgcmVwcmVzZW50YXRpb25z
IG92ZXIgVElGRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkwMTAxCisgICAgICAgIHJkYXI6Ly80NDg3OTI0NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBvbiBtYWNPUywgd2hlbiBwYXN0
aW5nIGltYWdlIGRhdGEgZnJvbSB0aGUgcGFzdGVib2FyZCBpbnRvIHJpY2hseSBlZGl0YWJsZSBl
bGVtZW50cywgd2UgYXR0ZW1wdCB0bworICAgICAgICByZWFkIHRoZSBpbWFnZSBkYXRhIGJ5IGNo
ZWNraW5nIGEgaGFyZC1jb2RlZCBsaXN0IG9mIHR5cGVzOyBpbiBvcmRlciwgdGhlc2UgYXJlOiBU
SUZGLCBQREYsIFBORywgYW5kIGZpbmFsbHkKKyAgICAgICAgSlBFRy4gU2luY2UgQXBwS2l0IGF1
dG9tYXRpY2FsbHkgcHJvdmlkZXMgVElGRiBhcyBhbiBhdmFpbGFibGUgdHlwZSBmb3IgY29tcGF0
aWJpbGl0eSB3aGVuIHdyaXRpbmcgbm9uLVRJRkYKKyAgICAgICAgaW1hZ2UgZGF0YSB0byB0aGUg
cGFzdGVib2FyZCwgdGhpcyBtZWFucyB0aGF0IFdlYktpdCBhdXRvbWF0aWNhbGx5IHRyYW5zY29k
ZXMgYWxsIGltYWdlcyB0byBUSUZGIHdoZW4gcGFzdGluZworICAgICAgICBpbWFnZXMgaW4gZWRp
dGFibGUgYXJlYXMuCisKKyAgICAgICAgV2hpbGUgdGhpcyBwcmV2ZW50cyBpbWFnZSBtZXRhZGF0
YSBmcm9tIHVuaW50ZW50aW9uYWxseSBsZWFraW5nIHRocm91Z2ggdG8gd2VicGFnZXMsIGl0IGFs
c28gbGVhZHMgdG8gdW5leHBlY3RlZAorICAgICAgICBiZWhhdmlvciBpbiBNYWlsIGNvbXBvc2Ug
d2hlbiB1c2luZyB0aGUgY29udGludWl0eSBjYW1lcmEgdG8gaW5zZXJ0IGltYWdlcywgc2luY2Ug
YWxsIGRyYXdpbmdzIGFuZCBwaG90b3MgZW5kIHVwCisgICAgICAgIGJlaW5nIGluc2VydGVkIGFz
IChvZnRlbiBtdWNoIGxhcmdlcikgVElGRiBmaWxlcyBpbnN0ZWFkIG9mIEpQRUcgYW5kIFBORywg
cmVzcGVjdGl2ZWx5LgorCisgICAgICAgIFRvIGFkZHJlc3MgdGhpcyB3aXRob3V0IHBvdGVudGlh
bGx5IGxlYWtpbmcgaW1hZ2UgbWV0YWRhdGEgdG8gd2VicGFnZXMsIHdlIGFkanVzdCBgUGFzdGVi
b2FyZDo6cmVhZGAgdG8KKyAgICAgICAgcHJpb3JpdGl6ZSBpbWFnZSBmb3JtYXRzIGluIHRoZSBo
YXJkLWNvZGVkIGxpc3QgYWJvdmUgdGhhdCB3ZXJlIHdyaXR0ZW4gZGlyZWN0bHkgdG8gdGhlIHBh
c3RlYm9hcmQgYnkgdGhlIGNvcGllcgorICAgICAgICAoaS5lLiB3aXRob3V0IHRyYW5zY29kaW5n
KSBiZWZvcmUgcmVhZGluZyBmcm9tIHRoZSByZW1haW5pbmcgdHlwZXMgdGhhdCB3ZXJlIGFkZGVk
IHRvIHRoZSBwYXN0ZWJvYXJkIGJ5IHRoZQorICAgICAgICBzeXN0ZW0gKGFuZCB0aHVzIHJlcXVp
cmUgZXh0cmEgdHJhbnNjb2RpbmcpLiBJbnN0ZWFkIG9mIGV4cG9zaW5nIHRoaXMgcmF3IGltYWdl
IGRhdGEgdG8gdGhlIHBhZ2UsIGhvd2V2ZXIsIHdlCisgICAgICAgIGFkZCBhbiBhZGRpdGlvbmFs
IHN0ZXAgdGhhdCBzdHJpcHMgYXdheSBhbGwgbWV0YWRhdGEgZnJvbSB0aGUgcmF3IGltYWdlIGRh
dGEgYmVmb3JlIGNhbGxpbmcgYHJlYWRJbWFnZWAuCisKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwg
d2UgbWF5IHdhbnQgdG8gY29uc2lkZXIgU1BJIGZvciBpbnRlcm5hbCBjbGllbnRzIHRoYXQgcmVx
dWlyZSBhbGwgbWV0YWRhdGEgcHJvcGVydGllcyB0byBiZQorICAgICAgICBwcmVzZXJ2ZWQ7IGZv
ciBub3csIHRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHdlIGF0IGxlYXN0OgorCisgICAgICAgIDEu
IFN0b3AgdW5jb25kaXRpb25hbGx5IHRyYW5zY29kaW5nIGFsbCBQTkcgYW5kIEpQRUcgaW1hZ2Vz
IHRvIC50aWZmLCBhbmQKKyAgICAgICAgMi4gUHJlc2VydmUgdGhlIG9yaWdpbmFsIHF1YWxpdHkg
b2YgUE5HIGFuZCBKUEVHIGltYWdlcyBwYXN0ZWQgaW4gTWFpbCBjb21wb3NlIChvciBpbnNlcnRl
ZCB2aWEgY29udGludWl0eSkuCisKKyAgICAgICAgVGVzdDogV0tBdHRhY2htZW50VGVzdHMuUGFz
dGluZ1ByZXNlcnZlc0ltYWdlRm9ybWF0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVi
b2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlRGF0YUFmdGVyUmVtb3ZpbmdNZXRh
ZGF0YSk6CisKKyAgICAgICAgR2l2ZW4gYSBibG9iIG9mIGltYWdlIGRhdGEsIGNyZWF0ZSBhIG5l
dyBpbWFnZSB3aXRob3V0IGFueSBvZiB0aGUgb3JpZ2luYWwgbWV0YWRhdGEgcHJvcGVydGllcyAo
d2l0aCB0aGUKKyAgICAgICAgZXhjZXB0aW9uIG9mIGltYWdlIG9yaWVudGF0aW9uKSwgYW5kIHJl
dHVybiB0aGUgbmV3IGltYWdlJ3MgZGF0YSByZXByZXNlbnRhdGlvbi4KKworICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZDo6cmVhZCk6CisKKyAgICAgICAgUmVmYWN0b3IgdGhpcyBsb2dpYyBz
byB0aGF0IHdlIGZpcnN0IHRyeSB0byByZWFkIGFueSBuYXRpdmVseSB3cml0dGVuIGltYWdlIGZv
cm1hdHMgdGhhdCBoYXBwZW4gdG8gYmUgb25lIG9mCisgICAgICAgICgiVElGRiIsICJQREYiLCAi
UE5HIiwgIkpQRUciKSwgYmVmb3JlIHRyeWluZyB0byByZWFkIGFueSBvdGhlciB0eXBlcyB0aGF0
IHdvdWxkIG90aGVyd2lzZSByZXF1aXJlIHRyYW5zY29kaW5nLgorCiAyMDIyLTAxLTIyICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmVhdGUgYW5j
ZXN0cnkgb2YgaXNvbGF0ZWQgb2JqZWN0cyBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgdGhlIGVudGly
ZSBzdWJ0cmVlIGZvciBhbiBhbmNlc3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Bhc3RlYm9hcmRNYWMubW0KaW5kZXggM2U1NjMzZmJkYTczNWQ1YTExNDVlMjUxY2M5ODE4OTVk
MjQyMzBmMS4uNzI4ZTg1ZWExMDgwMGNhNjgxOGY4M2Q1MDhlZTI2MTk5ZjRlNzJmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAgLTQzNSwxNiAr
NDM1LDcwIEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkUGxhaW5UZXh0JiB0ZXh0
LCBQbGFpblRleHRVUkxSZWFkaW5nUG9saWN5IGFsbG93CiAgICAgfQogfQogCitzdGF0aWMgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gaW1hZ2VEYXRhQWZ0ZXJSZW1vdmluZ01ldGFkYXRhKFJlZjxTaGFy
ZWRCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIGF1dG8gb3JpZ2luYWxEYXRhID0gYnVmZmVyLT5j
cmVhdGVDRkRhdGEoKTsKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNy
ZWF0ZVdpdGhEYXRhKG9yaWdpbmFsRGF0YS5nZXQoKSwgbmlsKSk7CisgICAgaWYgKCFzb3VyY2Up
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHJlc3VsdERhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGF1dG8gY291
bnQgPSBDR0ltYWdlU291cmNlR2V0Q291bnQoc291cmNlLmdldCgpKTsKKyAgICBhdXRvIGRlc3Rp
bmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShyZXN1bHRE
YXRhLmdldCgpLCBDR0ltYWdlU291cmNlR2V0VHlwZShzb3VyY2UuZ2V0KCkpLCBjb3VudCwgbmls
KSk7CisgICAgaWYgKCFkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIE5T
TXV0YWJsZURpY3Rpb25hcnkgKnJlcGxhY2VtZW50RGljdGlvbmFyeSA9IFtOU011dGFibGVEaWN0
aW9uYXJ5IGRpY3Rpb25hcnldOworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBj
b3VudDsgKytpbmRleCkgeworICAgICAgICBhdXRvIGFsbFByb3BlcnRpZXMgPSBhZG9wdE5TKChf
X2JyaWRnZSBOU0RpY3Rpb25hcnkgKilDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4
KHNvdXJjZS5nZXQoKSwgaW5kZXgsIG5pbCkpOworICAgICAgICBmb3IgKE5TU3RyaW5nICpuYW1l
IGluIGFsbFByb3BlcnRpZXMuZ2V0KCkpIHsKKyAgICAgICAgICAgIGlmICghW25hbWUgaXNFcXVh
bFRvU3RyaW5nOihfX2JyaWRnZSBOU1N0cmluZyAqKWtDR0ltYWdlUHJvcGVydHlUSUZGRGljdGlv
bmFyeV0pIHsKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudERpY3Rpb25hcnlbbmFtZV0gPSBO
U051bGwubnVsbDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gT25seSBhdHRlbXB0IHRvIHByZXNlcnZlIGltYWdlIG9yaWVudGF0aW9u
LgorICAgICAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqdGlmZlJlcGxhY2VtZW50UHJvcGVy
dGllcyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworICAgICAgICAgICAgYXV0
byB0aWZmUHJvcGVydGllcyA9IGR5bmFtaWNfb2JqY19jYXN0PE5TRGljdGlvbmFyeT4oW2FsbFBy
b3BlcnRpZXMgb2JqZWN0Rm9yS2V5Om5hbWVdKTsKKyAgICAgICAgICAgIGZvciAoTlNTdHJpbmcg
KnByb3BlcnR5TmFtZSBpbiB0aWZmUHJvcGVydGllcykgeworICAgICAgICAgICAgICAgIGlmIChb
cHJvcGVydHlOYW1lIGlzRXF1YWxUb1N0cmluZzooX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dJbWFn
ZVByb3BlcnR5T3JpZW50YXRpb25dKQorICAgICAgICAgICAgICAgICAgICB0aWZmUmVwbGFjZW1l
bnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0aWZmUHJvcGVydGllc1twcm9wZXJ0eU5hbWVd
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGlmZlJlcGxhY2Vt
ZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gTlNOdWxsLm51bGw7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXBsYWNlbWVudERpY3Rpb25hcnlbbmFtZV0gPSB0aWZmUmVwbGFjZW1l
bnRQcm9wZXJ0aWVzOworICAgICAgICB9CisgICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZElt
YWdlRnJvbVNvdXJjZShkZXN0aW5hdGlvbi5nZXQoKSwgc291cmNlLmdldCgpLCBpbmRleCwgKF9f
YnJpZGdlIENGRGljdGlvbmFyeVJlZilyZXBsYWNlbWVudERpY3Rpb25hcnkpOworICAgIH0KKwor
ICAgIGlmICghQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHJl
c3VsdERhdGEuZ2V0KCkpOworfQorCiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFdl
YkNvbnRlbnRSZWFkZXImIHJlYWRlciwgV2ViQ29udGVudFJlYWRpbmdQb2xpY3kgcG9saWN5LCBz
dGQ6Om9wdGlvbmFsPHNpemVfdD4gaXRlbUluZGV4KQogewogICAgIGF1dG8mIHN0cmF0ZWd5ID0g
KnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKIAorICAgIFZlY3Rv
cjxQYXN0ZWJvYXJkSXRlbUluZm8+IHJlbGV2YW50SXRlbXM7CiAgICAgVmVjdG9yPFN0cmluZz4g
dHlwZXM7CiAgICAgaWYgKGl0ZW1JbmRleCkgewotICAgICAgICBpZiAoYXV0byBpdGVtSW5mbyA9
IHN0cmF0ZWd5LmluZm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoKml0ZW1JbmRleCwgbV9wYXN0ZWJv
YXJkTmFtZSwgbV9jaGFuZ2VDb3VudCwgY29udGV4dCgpKSkKKyAgICAgICAgaWYgKGF1dG8gaXRl
bUluZm8gPSBzdHJhdGVneS5pbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KCppdGVtSW5kZXgsIG1f
cGFzdGVib2FyZE5hbWUsIG1fY2hhbmdlQ291bnQsIGNvbnRleHQoKSkpIHsKICAgICAgICAgICAg
IHR5cGVzID0gaXRlbUluZm8tPnBsYXRmb3JtVHlwZXNCeUZpZGVsaXR5OwotICAgIH0gZWxzZQor
ICAgICAgICAgICAgcmVsZXZhbnRJdGVtcyA9IHsgV1RGTW92ZSgqaXRlbUluZm8pIH07CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgewogICAgICAgICBzdHJhdGVneS5nZXRUeXBlcyh0eXBlcywgbV9w
YXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKKyAgICAgICAgaWYgKGF1dG8gYWxsSXRlbXMgPSBz
dHJhdGVneS5hbGxQYXN0ZWJvYXJkSXRlbUluZm8obV9wYXN0ZWJvYXJkTmFtZSwgbV9jaGFuZ2VD
b3VudCwgY29udGV4dCgpKSkKKyAgICAgICAgICAgIHJlbGV2YW50SXRlbXMgPSBXVEZNb3ZlKCph
bGxJdGVtcyk7CisgICAgfQorCisgICAgSGFzaFNldDxTdHJpbmc+IG5vblRyYW5zY29kZWRUeXBl
czsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiByZWxldmFudEl0ZW1zKSB7CisgICAgICAgIGZvciAo
YXV0byYgdHlwZSA6IGl0ZW0ucGxhdGZvcm1UeXBlc0J5RmlkZWxpdHkpCisgICAgICAgICAgICBu
b25UcmFuc2NvZGVkVHlwZXMuYWRkKHR5cGUpOworICAgIH0KIAogICAgIHJlYWRlci5jb250ZW50
T3JpZ2luID0gcmVhZE9yaWdpbigpOwogCkBAIC01MTksNTEgKzU3Myw1MiBAQCBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICBpZiAocG9saWN5ID09IFdlYkNvbnRlbnRSZWFk
aW5nUG9saWN5OjpPbmx5UmljaFRleHRUeXBlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KHR5cGVzLmNvbnRhaW5zKFN0cmluZyhsZWdhY3lUSUZGUGFzdGVib2FyZFR5cGUoKSkpKSB7Ci0g
ICAgICAgIGlmIChhdXRvIGJ1ZmZlciA9IHJlYWRCdWZmZXJBdFByZWZlcnJlZEl0ZW1JbmRleChs
ZWdhY3lUSUZGUGFzdGVib2FyZFR5cGUoKSwgaXRlbUluZGV4LCBzdHJhdGVneSwgbV9wYXN0ZWJv
YXJkTmFtZSwgY29udGV4dCgpKSkgewotICAgICAgICAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0g
Y2hhbmdlQ291bnQoKSB8fCByZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgp
LCAiaW1hZ2UvdGlmZiJfcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQorICAgIGVudW0gY2xhc3MgU2hvdWxkUmVtb3ZlTWV0YWRhdGEgOiBib29sIHsgTm8sIFll
cyB9OworICAgIHVzaW5nIEltYWdlUmVhZGluZ0luZm8gPSBzdGQ6OnR1cGxlPFN0cmluZywgQVND
SUlMaXRlcmFsLCBTaG91bGRSZW1vdmVNZXRhZGF0YT47CisgICAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfQkVHSU4KKyAgICBjb25zdCBzdGQ6OmFycmF5PEltYWdlUmVhZGluZ0luZm8s
IDY+IGltYWdlVHlwZXNUb1JlYWQgeyB7CisgICAgICAgIHsgU3RyaW5nKGxlZ2FjeVRJRkZQYXN0
ZWJvYXJkVHlwZSgpKSwgImltYWdlL3RpZmYiX3MsIFNob3VsZFJlbW92ZU1ldGFkYXRhOjpZZXMg
fSwKKyAgICAgICAgeyBTdHJpbmcoTlNQYXN0ZWJvYXJkVHlwZVRJRkYpLCAiaW1hZ2UvdGlmZiJf
cywgU2hvdWxkUmVtb3ZlTWV0YWRhdGE6OlllcyB9LAorICAgICAgICB7IFN0cmluZyhsZWdhY3lQ
REZQYXN0ZWJvYXJkVHlwZSgpKSwgImFwcGxpY2F0aW9uL3BkZiJfcywgU2hvdWxkUmVtb3ZlTWV0
YWRhdGE6Ok5vIH0sIC8vIEZJWE1FOiBTaG91bGQgd2UgYWxzbyBhdHRlbXB0IHRvIHN0cmlwIGF3
YXkgc29tZSBtZXRhZGF0YSBmcm9tIFBERnM/CisgICAgICAgIHsgU3RyaW5nKE5TUGFzdGVib2Fy
ZFR5cGVQREYpLCAiYXBwbGljYXRpb24vcGRmIl9zLCBTaG91bGRSZW1vdmVNZXRhZGF0YTo6Tm8g
fSwKKyAgICAgICAgeyBTdHJpbmcoa1VUVHlwZVBORyksICJpbWFnZS9wbmciX3MsIFNob3VsZFJl
bW92ZU1ldGFkYXRhOjpZZXMgfSwKKyAgICAgICAgeyBTdHJpbmcoa1VUVHlwZUpQRUcpLCAiaW1h
Z2UvanBlZyJfcywgU2hvdWxkUmVtb3ZlTWV0YWRhdGE6OlllcyB9CisgICAgfSB9OworICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5z
KFN0cmluZyhOU1Bhc3RlYm9hcmRUeXBlVElGRikpKSB7Ci0gICAgICAgIGlmIChhdXRvIGJ1ZmZl
ciA9IHJlYWRCdWZmZXJBdFByZWZlcnJlZEl0ZW1JbmRleChOU1Bhc3RlYm9hcmRUeXBlVElGRiwg
aXRlbUluZGV4LCBzdHJhdGVneSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKSkgewotICAg
ICAgICAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnQoKSB8fCByZWFkZXIucmVh
ZEltYWdlKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCAiaW1hZ2UvdGlmZiJfcykpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIGF1dG8gdHJ5VG9SZWFkSW1h
Z2UgPSBbJl0gKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIEFTQ0lJTGl0ZXJhbCBtaW1l
VHlwZSwgU2hvdWxkUmVtb3ZlTWV0YWRhdGEgcmVtb3ZlTWV0YWRhdGEpIHsKKyAgICAgICAgaWYg
KCF0eXBlcy5jb250YWlucyhwYXN0ZWJvYXJkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKGxlZ2FjeVBERlBhc3RlYm9hcmRU
eXBlKCkpKSkgewotICAgICAgICBpZiAoYXV0byBidWZmZXIgPSByZWFkQnVmZmVyQXRQcmVmZXJy
ZWRJdGVtSW5kZXgobGVnYWN5UERGUGFzdGVib2FyZFR5cGUoKSwgaXRlbUluZGV4LCBzdHJhdGVn
eSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKSkgewotICAgICAgICAgICAgaWYgKG1fY2hh
bmdlQ291bnQgIT0gY2hhbmdlQ291bnQoKSB8fCByZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxl
YXNlTm9uTnVsbCgpLCAiYXBwbGljYXRpb24vcGRmIl9zKSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgIGF1dG8gYnVmZmVyID0gcmVhZEJ1ZmZlckF0
UHJlZmVycmVkSXRlbUluZGV4KHBhc3RlYm9hcmRUeXBlLCBpdGVtSW5kZXgsIHN0cmF0ZWd5LCBt
X3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOworICAgICAgICBpZiAobV9jaGFuZ2VDb3VudCAh
PSBjaGFuZ2VDb3VudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAodHlw
ZXMuY29udGFpbnMoU3RyaW5nKE5TUGFzdGVib2FyZFR5cGVQREYpKSkgewotICAgICAgICBpZiAo
YXV0byBidWZmZXIgPSByZWFkQnVmZmVyQXRQcmVmZXJyZWRJdGVtSW5kZXgoTlNQYXN0ZWJvYXJk
VHlwZVBERiwgaXRlbUluZGV4LCBzdHJhdGVneSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgp
KSkgewotICAgICAgICAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnQoKSB8fCBy
ZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCAiYXBwbGljYXRpb24vcGRm
Il9zKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAg
IGlmIChidWZmZXIgJiYgcmVtb3ZlTWV0YWRhdGEgPT0gU2hvdWxkUmVtb3ZlTWV0YWRhdGE6Olll
cykKKyAgICAgICAgICAgIGJ1ZmZlciA9IGltYWdlRGF0YUFmdGVyUmVtb3ZpbmdNZXRhZGF0YShi
dWZmZXIucmVsZWFzZU5vbk51bGwoKSk7CiAKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhrVVRUeXBlUE5HKSkpIHsKLSAg
ICAgICAgaWYgKGF1dG8gYnVmZmVyID0gcmVhZEJ1ZmZlckF0UHJlZmVycmVkSXRlbUluZGV4KGtV
VFR5cGVQTkcsIGl0ZW1JbmRleCwgc3RyYXRlZ3ksIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQo
KSkpIHsKLSAgICAgICAgICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IGNoYW5nZUNvdW50KCkgfHwg
cmVhZGVyLnJlYWRJbWFnZShidWZmZXIucmVsZWFzZU5vbk51bGwoKSwgImltYWdlL3BuZyJfcykp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWRJbWFnZShidWZm
ZXIucmVsZWFzZU5vbk51bGwoKSwgbWltZVR5cGUpOworICAgIH07CisKKyAgICAvLyBGaXJzdCwg
dHJ5IHRvIHJlYWQgYW55IHBhc3RlYm9hcmQgaW1hZ2UgZGF0YSB0aGF0IHdhcyB3cml0dGVuIGRp
cmVjdGx5IHRvIHRoZSBwYXN0ZWJvYXJkLgorICAgIFZlY3RvcjxJbWFnZVJlYWRpbmdJbmZvLCA2
PiByZW1haW5pbmdJbWFnZVR5cGVzVG9SZWFkOworICAgIGZvciAoYXV0byYgW3Bhc3RlYm9hcmRU
eXBlLCBtaW1lVHlwZSwgcmVtb3ZlTWV0YWRhdGFdIDogaW1hZ2VUeXBlc1RvUmVhZCkgeworICAg
ICAgICBpZiAoIW5vblRyYW5zY29kZWRUeXBlcy5jb250YWlucyhwYXN0ZWJvYXJkVHlwZSkpIHsK
KyAgICAgICAgICAgIHJlbWFpbmluZ0ltYWdlVHlwZXNUb1JlYWQuYXBwZW5kKHsgcGFzdGVib2Fy
ZFR5cGUsIG1pbWVUeXBlLCByZW1vdmVNZXRhZGF0YSB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CisgICAgICAgIGlmICh0cnlUb1JlYWRJbWFnZShwYXN0ZWJvYXJkVHlwZSwg
bWltZVR5cGUsIHJlbW92ZU1ldGFkYXRhKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci1B
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAotQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfQkVHSU4KLSAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKGtVVFR5cGVKUEVH
KSkpIHsKLSAgICAgICAgaWYgKGF1dG8gYnVmZmVyID0gcmVhZEJ1ZmZlckF0UHJlZmVycmVkSXRl
bUluZGV4KGtVVFR5cGVKUEVHLCBpdGVtSW5kZXgsIHN0cmF0ZWd5LCBtX3Bhc3RlYm9hcmROYW1l
LCBjb250ZXh0KCkpKSB7Ci0gICAgICAgICAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBjaGFuZ2VD
b3VudCgpIHx8IHJlYWRlci5yZWFkSW1hZ2UoYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksICJpbWFn
ZS9qcGVnIl9zKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAvLyBJ
ZiB0aGUgb3JpZ2luYWwgZGF0YSBjb3VsZCBub3QgYmUgcmVhZCBkaXJlY3RseSwgZmFsbCBiYWNr
IGJ5IHRyeWluZyB0byB0cmFuc2NvZGUgdG8gYW55IG9mIHRoZSBhYm92ZSB0eXBlcy4KKyAgICBm
b3IgKGF1dG8mIFtwYXN0ZWJvYXJkVHlwZSwgbWltZVR5cGUsIHJlbW92ZU1ldGFkYXRhXSA6IHJl
bWFpbmluZ0ltYWdlVHlwZXNUb1JlYWQpIHsKKyAgICAgICAgaWYgKHRyeVRvUmVhZEltYWdlKHBh
c3RlYm9hcmRUeXBlLCBtaW1lVHlwZSwgcmVtb3ZlTWV0YWRhdGEpKQorICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAgICAgaWYg
KHR5cGVzLmNvbnRhaW5zKFN0cmluZyhsZWdhY3lVUkxQYXN0ZWJvYXJkVHlwZSgpKSkpIHsKICAg
ICAgICAgVVJMIHVybCA9IHN0cmF0ZWd5LnVybChtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGZl
ZTliYmE0ZWNmYjJmZWZjNTdmOTAyMTdiMjVlMTE5NTkwMzUzZTEuLjIyZDUyZjY2M2EwY2NjMDEw
ZTY0MzAwMzM5Y2Q1NzEyZjZkNzVmNDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMi0wMS0yNCAgV2Vuc29uIEhz
aWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbbWFjT1NdIFVwZGF0ZSBQ
YXN0ZWJvYXJkOjpyZWFkIHRvIHByaW9yaXRpemUgbmF0aXZlIHJlcHJlc2VudGF0aW9ucyBvdmVy
IFRJRkYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MDEwMQorICAgICAgICByZGFyOi8vNDQ4NzkyNDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjcm9zcy1wbGF0Zm9ybSBBUEkgdGVzdCB0byB2
ZXJpZnkgdGhhdCB3aGVuIHVzaW5nIHRoZSBjbGllbnQtc2lkZSBhdHRhY2htZW50cywgcGFzdGVk
IGltYWdlIGRhdGEgb2YKKyAgICAgICAgdmFyeWluZyBmb3JtYXRzIChQREYsIEpQRUcsIFBORykg
YXJlIHJlYWQgaW4gdGhlaXIgb3JpZ2luYWwgZm9ybS4gU2VlIFdlYkNvcmUvQ2hhbmdlTG9nIGZv
ciBtb3JlIGRldGFpbHMuIFRoaXMKKyAgICAgICAgdGVzdCBjdXJyZW50bHkgcGFzc2VzIG9uIGlP
UyBidXQgZmFpbHMgb24gbWFjT1MsIHdoZXJlIGJvdGggdGhlIFBORyBhbmQgSlBFRyBpbWFnZXMg
YXJlIHRyYW5zY29kZWQgYW5kIHJlYWQgYXMKKyAgICAgICAgVElGRi4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW06CisgICAg
ICAgICh0ZXN0SlBFR0ZpbGVVUkwpOgorICAgICAgICAodGVzdEpQRUdEYXRhKToKKyAgICAgICAg
KHBsYXRmb3JtQ29weVBERik6CisgICAgICAgIChwbGF0Zm9ybUNvcHlKUEVHKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCisgICAgICAgIERyaXZlLWJ5IGZpeDogYWxzbyByZW1v
dmUgYSBKYXZhU2NyaXB0IGV2YWx1YXRpb24gaW4gYSBuZWFyYnkgdGVzdCB0aGF0IGNvdWxkIG9u
bHkgcmVzdWx0IGluIGFuIGV4Y2VwdGlvbiAoYW5kCisgICAgICAgIHdhcyBwcm9iYWJseSBhY2Np
ZGVudGFsbHkgbGVmdCB0aGVyZSB3aGlsZSB3cml0aW5nIHRoZSB0ZXN0KS4KKwogMjAyMi0wMS0y
MiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS11bYTExeV0gU3RvcCByZWdpc3RlcmluZyB0aGUgdHJlZSB3aGVuIGNsaWVudHMgYXJlIGNv
bm5lY3RlZCB3aXRoIEFUU1BJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQppbmRleCA3YWU5YzIzNDkxMTUw
NmQyZWUwYzRiZGFiYzJkNzQ3MjU3ZWUwNzRmLi4zMTEzMjQ1NzFjYjY2ZmZjNmU4MGRjYWU4MGUz
NWFjNDNlOTc3MDUzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KQEAgLTI2MCw2ICsyNjAsMTYgQEAg
c3RhdGljIE5TRGF0YSAqdGVzdFBERkRhdGEoKQogICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRo
Q29udGVudHNPZlVSTDp0ZXN0UERGRmlsZVVSTCgpXTsKIH0KIAorc3RhdGljIE5TVVJMICp0ZXN0
SlBFR0ZpbGVVUkwoKQoreworICAgIHJldHVybiBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZv
clJlc291cmNlOkAic3Vuc2V0LWluLWN1cGVydGluby02MDBweCIgd2l0aEV4dGVuc2lvbjpAImpw
ZyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKK30KKworc3RhdGlj
IE5TRGF0YSAqdGVzdEpQRUdEYXRhKCkKK3sKKyAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aENv
bnRlbnRzT2ZVUkw6dGVzdEpQRUdGaWxlVVJMKCldOworfQorCiBAaW1wbGVtZW50YXRpb24gVGVz
dFdLV2ViVmlldyAoQXR0YWNobWVudFRlc3RpbmcpCiAKIC0gKF9XS0F0dGFjaG1lbnQgKilzeW5j
aHJvbm91c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjooTlNGaWxlV3JhcHBlciAq
KWZpbGVXcmFwcGVyIGNvbnRlbnRUeXBlOihOU1N0cmluZyAqKWNvbnRlbnRUeXBlCkBAIC02MTYs
NiArNjI2LDM2IEBAIHZvaWQgcGxhdGZvcm1Db3B5UE5HKCkKICNlbmRpZgogfQogCit2b2lkIHBs
YXRmb3JtQ29weVBERigpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIE5TUGFzdGVib2FyZCAq
cGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOworICAgIFtwYXN0
ZWJvYXJkIGRlY2xhcmVUeXBlczpAWyhfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVQREZdIG93
bmVyOm5pbF07CisgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTp0ZXN0UERGRGF0YSgpIGZvclR5cGU6
KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBERl07CisjZWxpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgIFVJUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtVSVBhc3RlYm9hcmQgZ2VuZXJh
bFBhc3RlYm9hcmRdOworICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdF0pOworICAgIFtpdGVtIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJ
UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50XTsKKyAgICBbaXRlbSByZWdpc3Rl
ckRhdGE6dGVzdFBERkRhdGEoKSB0eXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVQREZd
OworICAgIHBhc3RlYm9hcmQuaXRlbVByb3ZpZGVycyA9IEBbIGl0ZW0uZ2V0KCkgXTsKKyNlbmRp
ZgorfQorCit2b2lkIHBsYXRmb3JtQ29weUpQRUcoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJv
YXJkXTsKKyAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6QFsoX19icmlkZ2UgTlNTdHJpbmcg
KilrVVRUeXBlSlBFR10gb3duZXI6bmlsXTsKKyAgICBbcGFzdGVib2FyZCBzZXREYXRhOnRlc3RK
UEVHRGF0YSgpIGZvclR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZUpQRUddOworI2Vs
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBVSVBhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBb
VUlQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXTsKKyAgICBhdXRvIGl0ZW0gPSBhZG9wdE5T
KFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaXRlbSBzZXRQcmVmZXJyZWRQ
cmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudF07
CisgICAgW2l0ZW0gcmVnaXN0ZXJEYXRhOnRlc3RKUEVHRGF0YSgpIHR5cGU6KF9fYnJpZGdlIE5T
U3RyaW5nICopa1VUVHlwZUpQRUddOworICAgIHBhc3RlYm9hcmQuaXRlbVByb3ZpZGVycyA9IEBb
IGl0ZW0uZ2V0KCkgXTsKKyNlbmRpZgorfQorCiAjaWYgUExBVEZPUk0oTUFDKQogdHlwZWRlZiBO
U0ltYWdlIFBsYXRmb3JtSW1hZ2U7CiAjZWxzZQpAQCAtMTU4Nyw3ICsxNjI3LDYgQEAgVEVTVChX
S0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudElkZW50aWZpZXJPZkNsb25lZEF0dGFjaG1lbnQp
CiBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBTZXRGaWxlV3JhcHBlckZvclBERkltYWdlQXR0YWNo
bWVudCkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRz
KCk7Ci0gICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZCgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOwogICAgIE5TU3RyaW5nICppZGVudGlm
aWVyID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbnN0IGkgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChp
KTsgSFRNTEF0dGFjaG1lbnRFbGVtZW50LmdldEF0dGFjaG1lbnRJZGVudGlmaWVyKGkpIl07CiAg
ICAgYXV0byBhdHRhY2htZW50ID0gcmV0YWluUHRyKFt3ZWJWaWV3IF9hdHRhY2htZW50Rm9ySWRl
bnRpZmllcjppZGVudGlmaWVyXSk7CiAKQEAgLTE2MDIsNiArMTY0MSwzNSBAQCBURVNUKFdLQXR0
YWNobWVudFRlc3RzLCBTZXRGaWxlV3JhcHBlckZvclBERkltYWdlQXR0YWNobWVudCkKICAgICBF
WFBFQ1RfRkFMU0UoW2F0dGFjaG1lbnQgaXNDb25uZWN0ZWRdKTsKIH0KIAorVEVTVChXS0F0dGFj
aG1lbnRUZXN0cywgUGFzdGluZ1ByZXNlcnZlc0ltYWdlRm9ybWF0KQoreworICAgIGF1dG8gd2Vi
VmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKKyAgICB7CisgICAgICAgIHBs
YXRmb3JtQ29weVBORygpOworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29w
ZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3Vz
bHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJQYXN0ZSIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAgRVhQ
RUNUX0VRKDFVLCBvYnNlcnZlci5vYnNlcnZlcigpLmluc2VydGVkLmNvdW50KTsKKyAgICAgICAg
X1dLQXR0YWNobWVudCAqYXR0YWNobWVudCA9IG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWRb
MF07CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiaW1hZ2UvcG5nIiwgYXR0YWNobWVudC5pbmZv
LmNvbnRlbnRUeXBlKTsKKyAgICB9CisgICAgeworICAgICAgICBwbGF0Zm9ybUNvcHlQREYoKTsK
KyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmll
dy5nZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21t
YW5kOkAiUGFzdGUiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIEVYUEVDVF9FUSgxVSwgb2JzZXJ2
ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZC5jb3VudCk7CisgICAgICAgIF9XS0F0dGFjaG1lbnQgKmF0
dGFjaG1lbnQgPSBvYnNlcnZlci5vYnNlcnZlcigpLmluc2VydGVkWzBdOworICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEoImFwcGxpY2F0aW9uL3BkZiIsIGF0dGFjaG1lbnQuaW5mby5jb250ZW50VHlw
ZSk7CisgICAgfQorICAgIHsKKyAgICAgICAgcGxhdGZvcm1Db3B5SlBFRygpOworICAgICAgICBP
YnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsK
KyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJQYXN0
ZSIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAgRVhQRUNUX0VRKDFVLCBvYnNlcnZlci5vYnNlcnZl
cigpLmluc2VydGVkLmNvdW50KTsKKyAgICAgICAgX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCA9
IG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWRbMF07CisgICAgICAgIEVYUEVDVF9XS19TVFJF
USgiaW1hZ2UvanBlZyIsIGF0dGFjaG1lbnQuaW5mby5jb250ZW50VHlwZSk7CisgICAgfQorfQor
CiAjcHJhZ21hIG1hcmsgLSBQbGF0Zm9ybS1zcGVjaWZpYyB0ZXN0cwogCiAjaWYgUExBVEZPUk0o
TUFDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449845</attachid>
            <date>2022-01-24 12:38:42 -0800</date>
            <delta_ts>2022-01-24 15:21:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190101-20220124123841.patch</filename>
            <type>text/plain</type>
            <size>14113</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmFmNzUzMTc3MmY0ZTdi
YWZiMmRhMGQ0NzcwNWE4OWZkMjBjOTM0MC4uMGU2YTUyZDcwYWQ2YjUzMmRlMmVlODEzNWZjOTVl
MjZkMTk2NmZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDIyLTAxLTI0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFttYWNPU10gVXBk
YXRlIFBhc3RlYm9hcmQ6OnJlYWQgdG8gcHJpb3JpdGl6ZSBuYXRpdmUgcmVwcmVzZW50YXRpb25z
IG92ZXIgVElGRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkwMTAxCisgICAgICAgIHJkYXI6Ly80NDg3OTI0NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBvbiBtYWNPUywgd2hlbiBwYXN0
aW5nIGltYWdlIGRhdGEgZnJvbSB0aGUgcGFzdGVib2FyZCBpbnRvIHJpY2hseSBlZGl0YWJsZSBl
bGVtZW50cywgd2UgYXR0ZW1wdCB0bworICAgICAgICByZWFkIHRoZSBpbWFnZSBkYXRhIGJ5IGNo
ZWNraW5nIGEgaGFyZC1jb2RlZCBsaXN0IG9mIHR5cGVzOyBpbiBvcmRlciwgdGhlc2UgYXJlOiBU
SUZGLCBQREYsIFBORywgYW5kIGZpbmFsbHkKKyAgICAgICAgSlBFRy4gU2luY2UgQXBwS2l0IGF1
dG9tYXRpY2FsbHkgcHJvdmlkZXMgVElGRiBhcyBhbiBhdmFpbGFibGUgdHlwZSBmb3IgY29tcGF0
aWJpbGl0eSB3aGVuIHdyaXRpbmcgbm9uLVRJRkYKKyAgICAgICAgaW1hZ2UgZGF0YSB0byB0aGUg
cGFzdGVib2FyZCwgdGhpcyBtZWFucyB0aGF0IFdlYktpdCBhdXRvbWF0aWNhbGx5IHRyYW5zY29k
ZXMgYWxsIGltYWdlcyB0byBUSUZGIHdoZW4gcGFzdGluZworICAgICAgICBpbWFnZXMgaW4gZWRp
dGFibGUgYXJlYXMuCisKKyAgICAgICAgVGhpcyBsZWFkcyB0byB1bmV4cGVjdGVkIGJlaGF2aW9y
IGluIE1haWwgY29tcG9zZSB3aGVuIHVzaW5nIHRoZSBjb250aW51aXR5IGNhbWVyYSB0byBpbnNl
cnQgaW1hZ2VzLCBzaW5jZSBhbGwKKyAgICAgICAgZHJhd2luZ3MgYW5kIHBob3RvcyBlbmQgdXAg
YmVpbmcgaW5zZXJ0ZWQgYXMgKG9mdGVuIG11Y2ggbGFyZ2VyKSBUSUZGIGZpbGVzIGluc3RlYWQg
b2YgSlBFRyBhbmQgUE5HLAorICAgICAgICByZXNwZWN0aXZlbHkuIFRvIGFkZHJlc3MgdGhpcywg
d2UgYWRqdXN0IGBQYXN0ZWJvYXJkOjpyZWFkYCB0byBwcmlvcml0aXplIGltYWdlIGZvcm1hdHMg
aW4gdGhlIGhhcmQtY29kZWQgbGlzdAorICAgICAgICBhYm92ZSB0aGF0IHdlcmUgd3JpdHRlbiBk
aXJlY3RseSB0byB0aGUgcGFzdGVib2FyZCBieSB0aGUgY29waWVyIChpLmUuIHdpdGhvdXQgdHJh
bnNjb2RpbmcpIGJlZm9yZSByZWFkaW5nIGZyb20KKyAgICAgICAgdGhlIHJlbWFpbmluZyB0eXBl
cyB0aGF0IHdlcmUgYWRkZWQgdG8gdGhlIHBhc3RlYm9hcmQgYnkgdGhlIHN5c3RlbSAoYW5kIHRo
dXMgcmVxdWlyZSBleHRyYSB0cmFuc2NvZGluZykuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMg
ZXhpc3RpbmcgbG9naWMgZm9yIHJlYWRpbmcgaW1hZ2VzIGRpcmVjdGx5IGludG8gd2ViIGNvbnRl
bnQgaXMgYW4gZXhpc3RpbmcgcHJpdmFjeSByaXNrLCBzaW5jZQorICAgICAgICBBcHBLaXQncyBw
YXN0ZWJvYXJkIGNvZGUgcHJlc2VydmVzIGFsbCBtZXRhZGF0YSBwcm9wZXJ0aWVzIHdoZW4gdHJh
bnNjb2RpbmcgYmV0d2VlbiBpbWFnZSBmb3JtYXRzLiBJbiB0aGUKKyAgICAgICAgZnV0dXJlLCB3
ZSBzaG91bGQgYWRkIGEgc3RlcCBoZXJlIHRvIHN0cmlwIG91dCBhcyBtdWNoIG1ldGFkYXRhIGFz
IHBvc3NpYmxlIGhlcmUsIHdpdGggYW4gYWxsb3ctbGlzdCBvZiBtZXRhZGF0YQorICAgICAgICBw
cm9wZXJ0aWVzIHRoYXQgYXJlIGVzc2VudGlhbCB0byBwcmVzZXJ2aW5nIGltYWdlIGZpZGVsaXR5
IChlLmcuIG9yaWVudGF0aW9uKS4KKworICAgICAgICBTZWU6IDxodHRwczovL3dlYmtpdC5vcmcv
Yi8yMzU1MzQ+IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgVGVzdDogV0tBdHRhY2htZW50
VGVzdHMuUGFzdGluZ1ByZXNlcnZlc0ltYWdlRm9ybWF0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWQp
OgorCisgICAgICAgIFJlZmFjdG9yIHRoaXMgbG9naWMgc28gdGhhdCB3ZSBmaXJzdCB0cnkgdG8g
cmVhZCBhbnkgbmF0aXZlbHkgd3JpdHRlbiBpbWFnZSBmb3JtYXRzIHRoYXQgaGFwcGVuIHRvIGJl
IG9uZSBvZgorICAgICAgICAoIlRJRkYiLCAiUERGIiwgIlBORyIsICJKUEVHIiksIGJlZm9yZSB0
cnlpbmcgdG8gcmVhZCBhbnkgb3RoZXIgdHlwZXMgdGhhdCB3b3VsZCBvdGhlcndpc2UgcmVxdWly
ZSB0cmFuc2NvZGluZy4KKwogMjAyMi0wMS0yMiAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18y
MkBhcHBsZS5jb20+CiAKICAgICAgICAgQ3JlYXRlIGFuY2VzdHJ5IG9mIGlzb2xhdGVkIG9iamVj
dHMgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIHRoZSBlbnRpcmUgc3VidHJlZSBmb3IgYW4gYW5jZXN0
b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCmluZGV4
IDNlNTYzM2ZiZGE3MzVkNWExMTQ1ZTI1MWNjOTgxODk1ZDI0MjMwZjEuLjQ2ODQ4ZGE5ODFiNWI0
ZGY3NmZmZTQyNDkxMDY2MmI3MTQ1Y2I3YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QYXN0ZWJvYXJkTWFjLm1tCkBAIC00MzksMTIgKzQzOSwyNCBAQCB2b2lkIFBhc3RlYm9h
cmQ6OnJlYWQoUGFzdGVib2FyZFdlYkNvbnRlbnRSZWFkZXImIHJlYWRlciwgV2ViQ29udGVudFJl
YWRpbmdQb2xpYwogewogICAgIGF1dG8mIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKIAorICAgIFZlY3RvcjxQYXN0ZWJvYXJkSXRlbUluZm8+
IHJlbGV2YW50SXRlbXM7CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAgICAgaWYgKGl0ZW1J
bmRleCkgewotICAgICAgICBpZiAoYXV0byBpdGVtSW5mbyA9IHN0cmF0ZWd5LmluZm9ybWF0aW9u
Rm9ySXRlbUF0SW5kZXgoKml0ZW1JbmRleCwgbV9wYXN0ZWJvYXJkTmFtZSwgbV9jaGFuZ2VDb3Vu
dCwgY29udGV4dCgpKSkKKyAgICAgICAgaWYgKGF1dG8gaXRlbUluZm8gPSBzdHJhdGVneS5pbmZv
cm1hdGlvbkZvckl0ZW1BdEluZGV4KCppdGVtSW5kZXgsIG1fcGFzdGVib2FyZE5hbWUsIG1fY2hh
bmdlQ291bnQsIGNvbnRleHQoKSkpIHsKICAgICAgICAgICAgIHR5cGVzID0gaXRlbUluZm8tPnBs
YXRmb3JtVHlwZXNCeUZpZGVsaXR5OwotICAgIH0gZWxzZQorICAgICAgICAgICAgcmVsZXZhbnRJ
dGVtcyA9IHsgV1RGTW92ZSgqaXRlbUluZm8pIH07CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewog
ICAgICAgICBzdHJhdGVneS5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4
dCgpKTsKKyAgICAgICAgaWYgKGF1dG8gYWxsSXRlbXMgPSBzdHJhdGVneS5hbGxQYXN0ZWJvYXJk
SXRlbUluZm8obV9wYXN0ZWJvYXJkTmFtZSwgbV9jaGFuZ2VDb3VudCwgY29udGV4dCgpKSkKKyAg
ICAgICAgICAgIHJlbGV2YW50SXRlbXMgPSBXVEZNb3ZlKCphbGxJdGVtcyk7CisgICAgfQorCisg
ICAgSGFzaFNldDxTdHJpbmc+IG5vblRyYW5zY29kZWRUeXBlczsKKyAgICBmb3IgKGF1dG8mIGl0
ZW0gOiByZWxldmFudEl0ZW1zKSB7CisgICAgICAgIGZvciAoYXV0byYgdHlwZSA6IGl0ZW0ucGxh
dGZvcm1UeXBlc0J5RmlkZWxpdHkpCisgICAgICAgICAgICBub25UcmFuc2NvZGVkVHlwZXMuYWRk
KHR5cGUpOworICAgIH0KIAogICAgIHJlYWRlci5jb250ZW50T3JpZ2luID0gcmVhZE9yaWdpbigp
OwogCkBAIC01MTksNTEgKzUzMSw0OCBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19F
TkQKICAgICBpZiAocG9saWN5ID09IFdlYkNvbnRlbnRSZWFkaW5nUG9saWN5OjpPbmx5UmljaFRl
eHRUeXBlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmlu
ZyhsZWdhY3lUSUZGUGFzdGVib2FyZFR5cGUoKSkpKSB7Ci0gICAgICAgIGlmIChhdXRvIGJ1ZmZl
ciA9IHJlYWRCdWZmZXJBdFByZWZlcnJlZEl0ZW1JbmRleChsZWdhY3lUSUZGUGFzdGVib2FyZFR5
cGUoKSwgaXRlbUluZGV4LCBzdHJhdGVneSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKSkg
ewotICAgICAgICAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnQoKSB8fCByZWFk
ZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCAiaW1hZ2UvdGlmZiJfcykpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIHVzaW5nIEltYWdl
UmVhZGluZ0luZm8gPSBzdGQ6OnR1cGxlPFN0cmluZywgQVNDSUlMaXRlcmFsPjsKKyAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgIGNvbnN0IHN0ZDo6YXJyYXk8SW1h
Z2VSZWFkaW5nSW5mbywgNj4gaW1hZ2VUeXBlc1RvUmVhZCB7IHsKKyAgICAgICAgeyBTdHJpbmco
bGVnYWN5VElGRlBhc3RlYm9hcmRUeXBlKCkpLCAiaW1hZ2UvdGlmZiJfcyB9LAorICAgICAgICB7
IFN0cmluZyhOU1Bhc3RlYm9hcmRUeXBlVElGRiksICJpbWFnZS90aWZmIl9zIH0sCisgICAgICAg
IHsgU3RyaW5nKGxlZ2FjeVBERlBhc3RlYm9hcmRUeXBlKCkpLCAiYXBwbGljYXRpb24vcGRmIl9z
IH0sCisgICAgICAgIHsgU3RyaW5nKE5TUGFzdGVib2FyZFR5cGVQREYpLCAiYXBwbGljYXRpb24v
cGRmIl9zIH0sCisgICAgICAgIHsgU3RyaW5nKGtVVFR5cGVQTkcpLCAiaW1hZ2UvcG5nIl9zIH0s
CisgICAgICAgIHsgU3RyaW5nKGtVVFR5cGVKUEVHKSwgImltYWdlL2pwZWciX3MgfQorICAgIH0g
fTsKKyAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAotICAgIGlmICh0eXBl
cy5jb250YWlucyhTdHJpbmcoTlNQYXN0ZWJvYXJkVHlwZVRJRkYpKSkgewotICAgICAgICBpZiAo
YXV0byBidWZmZXIgPSByZWFkQnVmZmVyQXRQcmVmZXJyZWRJdGVtSW5kZXgoTlNQYXN0ZWJvYXJk
VHlwZVRJRkYsIGl0ZW1JbmRleCwgc3RyYXRlZ3ksIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQo
KSkpIHsKLSAgICAgICAgICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IGNoYW5nZUNvdW50KCkgfHwg
cmVhZGVyLnJlYWRJbWFnZShidWZmZXIucmVsZWFzZU5vbk51bGwoKSwgImltYWdlL3RpZmYiX3Mp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBhdXRvIHRy
eVRvUmVhZEltYWdlID0gWyZdIChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBBU0NJSUxp
dGVyYWwgbWltZVR5cGUpIHsKKyAgICAgICAgaWYgKCF0eXBlcy5jb250YWlucyhwYXN0ZWJvYXJk
VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAodHlwZXMuY29udGFp
bnMoU3RyaW5nKGxlZ2FjeVBERlBhc3RlYm9hcmRUeXBlKCkpKSkgewotICAgICAgICBpZiAoYXV0
byBidWZmZXIgPSByZWFkQnVmZmVyQXRQcmVmZXJyZWRJdGVtSW5kZXgobGVnYWN5UERGUGFzdGVi
b2FyZFR5cGUoKSwgaXRlbUluZGV4LCBzdHJhdGVneSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4
dCgpKSkgewotICAgICAgICAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnQoKSB8
fCByZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCAiYXBwbGljYXRpb24v
cGRmIl9zKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAg
ICAgIGF1dG8gYnVmZmVyID0gcmVhZEJ1ZmZlckF0UHJlZmVycmVkSXRlbUluZGV4KHBhc3RlYm9h
cmRUeXBlLCBpdGVtSW5kZXgsIHN0cmF0ZWd5LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkp
OworICAgICAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBjaGFuZ2VDb3VudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUGFzdGVi
b2FyZFR5cGVQREYpKSkgewotICAgICAgICBpZiAoYXV0byBidWZmZXIgPSByZWFkQnVmZmVyQXRQ
cmVmZXJyZWRJdGVtSW5kZXgoTlNQYXN0ZWJvYXJkVHlwZVBERiwgaXRlbUluZGV4LCBzdHJhdGVn
eSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKSkgewotICAgICAgICAgICAgaWYgKG1fY2hh
bmdlQ291bnQgIT0gY2hhbmdlQ291bnQoKSB8fCByZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxl
YXNlTm9uTnVsbCgpLCAiYXBwbGljYXRpb24vcGRmIl9zKSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAg
IGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoa1VUVHlwZVBORykpKSB7Ci0gICAgICAgIGlmIChh
dXRvIGJ1ZmZlciA9IHJlYWRCdWZmZXJBdFByZWZlcnJlZEl0ZW1JbmRleChrVVRUeXBlUE5HLCBp
dGVtSW5kZXgsIHN0cmF0ZWd5LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpKSB7Ci0gICAg
ICAgICAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBjaGFuZ2VDb3VudCgpIHx8IHJlYWRlci5yZWFk
SW1hZ2UoYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksICJpbWFnZS9wbmciX3MpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkSW1hZ2UoYnVmZmVyLnJl
bGVhc2VOb25OdWxsKCksIG1pbWVUeXBlKTsKKyAgICB9OworCisgICAgLy8gRmlyc3QsIHRyeSB0
byByZWFkIGFueSBwYXN0ZWJvYXJkIGltYWdlIGRhdGEgdGhhdCB3YXMgd3JpdHRlbiBkaXJlY3Rs
eSB0byB0aGUgcGFzdGVib2FyZC4KKyAgICBWZWN0b3I8SW1hZ2VSZWFkaW5nSW5mbywgNj4gcmVt
YWluaW5nSW1hZ2VUeXBlc1RvUmVhZDsKKyAgICBmb3IgKGF1dG8mIFtwYXN0ZWJvYXJkVHlwZSwg
bWltZVR5cGVdIDogaW1hZ2VUeXBlc1RvUmVhZCkgeworICAgICAgICBpZiAoIW5vblRyYW5zY29k
ZWRUeXBlcy5jb250YWlucyhwYXN0ZWJvYXJkVHlwZSkpIHsKKyAgICAgICAgICAgIHJlbWFpbmlu
Z0ltYWdlVHlwZXNUb1JlYWQuYXBwZW5kKHsgcGFzdGVib2FyZFR5cGUsIG1pbWVUeXBlIH0pOwor
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHRyeVRvUmVhZElt
YWdlKHBhc3RlYm9hcmRUeXBlLCBtaW1lVHlwZSkpCisgICAgICAgICAgICByZXR1cm47CiAgICAg
fQotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKLUFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhrVVRUeXBl
SlBFRykpKSB7Ci0gICAgICAgIGlmIChhdXRvIGJ1ZmZlciA9IHJlYWRCdWZmZXJBdFByZWZlcnJl
ZEl0ZW1JbmRleChrVVRUeXBlSlBFRywgaXRlbUluZGV4LCBzdHJhdGVneSwgbV9wYXN0ZWJvYXJk
TmFtZSwgY29udGV4dCgpKSkgewotICAgICAgICAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gY2hh
bmdlQ291bnQoKSB8fCByZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCAi
aW1hZ2UvanBlZyJfcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAg
Ly8gSWYgdGhlIG9yaWdpbmFsIGRhdGEgY291bGQgbm90IGJlIHJlYWQgZGlyZWN0bHksIGZhbGwg
YmFjayBieSB0cnlpbmcgdG8gdHJhbnNjb2RlIHRvIGFueSBvZiB0aGUgYWJvdmUgdHlwZXMuCisg
ICAgZm9yIChhdXRvJiBbcGFzdGVib2FyZFR5cGUsIG1pbWVUeXBlXSA6IHJlbWFpbmluZ0ltYWdl
VHlwZXNUb1JlYWQpIHsKKyAgICAgICAgaWYgKHRyeVRvUmVhZEltYWdlKHBhc3RlYm9hcmRUeXBl
LCBtaW1lVHlwZSkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgfQotQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECiAKICAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKGxlZ2Fj
eVVSTFBhc3RlYm9hcmRUeXBlKCkpKSkgewogICAgICAgICBVUkwgdXJsID0gc3RyYXRlZ3kudXJs
KG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmVlOWJiYTRlY2ZiMmZlZmM1N2Y5MDIxN2IyNWUx
MTk1OTAzNTNlMS4uMjJkNTJmNjYzYTBjY2MwMTBlNjQzMDAzMzljZDU3MTJmNmQ3NWY0MSAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDIyLTAxLTI0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgorCisgICAgICAgIFttYWNPU10gVXBkYXRlIFBhc3RlYm9hcmQ6OnJlYWQgdG8gcHJpb3JpdGl6
ZSBuYXRpdmUgcmVwcmVzZW50YXRpb25zIG92ZXIgVElGRgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwMTAxCisgICAgICAgIHJkYXI6Ly80NDg3OTI0
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
IGNyb3NzLXBsYXRmb3JtIEFQSSB0ZXN0IHRvIHZlcmlmeSB0aGF0IHdoZW4gdXNpbmcgdGhlIGNs
aWVudC1zaWRlIGF0dGFjaG1lbnRzLCBwYXN0ZWQgaW1hZ2UgZGF0YSBvZgorICAgICAgICB2YXJ5
aW5nIGZvcm1hdHMgKFBERiwgSlBFRywgUE5HKSBhcmUgcmVhZCBpbiB0aGVpciBvcmlnaW5hbCBm
b3JtLiBTZWUgV2ViQ29yZS9DaGFuZ2VMb2cgZm9yIG1vcmUgZGV0YWlscy4gVGhpcworICAgICAg
ICB0ZXN0IGN1cnJlbnRseSBwYXNzZXMgb24gaU9TIGJ1dCBmYWlscyBvbiBtYWNPUywgd2hlcmUg
Ym90aCB0aGUgUE5HIGFuZCBKUEVHIGltYWdlcyBhcmUgdHJhbnNjb2RlZCBhbmQgcmVhZCBhcwor
ICAgICAgICBUSUZGLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0F0dGFjaG1lbnRUZXN0cy5tbToKKyAgICAgICAgKHRlc3RKUEVHRmlsZVVSTCk6CisgICAg
ICAgICh0ZXN0SlBFR0RhdGEpOgorICAgICAgICAocGxhdGZvcm1Db3B5UERGKToKKyAgICAgICAg
KHBsYXRmb3JtQ29weUpQRUcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKKyAg
ICAgICAgRHJpdmUtYnkgZml4OiBhbHNvIHJlbW92ZSBhIEphdmFTY3JpcHQgZXZhbHVhdGlvbiBp
biBhIG5lYXJieSB0ZXN0IHRoYXQgY291bGQgb25seSByZXN1bHQgaW4gYW4gZXhjZXB0aW9uIChh
bmQKKyAgICAgICAgd2FzIHByb2JhYmx5IGFjY2lkZW50YWxseSBsZWZ0IHRoZXJlIHdoaWxlIHdy
aXRpbmcgdGhlIHRlc3QpLgorCiAyMDIyLTAxLTIyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVthMTF5XSBTdG9wIHJlZ2lzdGVyaW5n
IHRoZSB0cmVlIHdoZW4gY2xpZW50cyBhcmUgY29ubmVjdGVkIHdpdGggQVRTUEkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVz
dHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVu
dFRlc3RzLm1tCmluZGV4IDdhZTljMjM0OTExNTA2ZDJlZTBjNGJkYWJjMmQ3NDcyNTdlZTA3NGYu
LjMxMTMyNDU3MWNiNjZmZmM2ZTgwZGNhZTgwZTM1YWM0M2U5NzcwNTMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRU
ZXN0cy5tbQpAQCAtMjYwLDYgKzI2MCwxNiBAQCBzdGF0aWMgTlNEYXRhICp0ZXN0UERGRGF0YSgp
CiAgICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOnRlc3RQREZGaWxlVVJM
KCldOwogfQogCitzdGF0aWMgTlNVUkwgKnRlc3RKUEVHRmlsZVVSTCgpCit7CisgICAgcmV0dXJu
IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzdW5zZXQtaW4tY3VwZXJ0
aW5vLTYwMHB4IiB3aXRoRXh0ZW5zaW9uOkAianBnIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdOworfQorCitzdGF0aWMgTlNEYXRhICp0ZXN0SlBFR0RhdGEoKQorewor
ICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDp0ZXN0SlBFR0ZpbGVVUkwo
KV07Cit9CisKIEBpbXBsZW1lbnRhdGlvbiBUZXN0V0tXZWJWaWV3IChBdHRhY2htZW50VGVzdGlu
ZykKIAogLSAoX1dLQXR0YWNobWVudCAqKXN5bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0
aEZpbGVXcmFwcGVyOihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBwZXIgY29udGVudFR5cGU6KE5T
U3RyaW5nICopY29udGVudFR5cGUKQEAgLTYxNiw2ICs2MjYsMzYgQEAgdm9pZCBwbGF0Zm9ybUNv
cHlQTkcoKQogI2VuZGlmCiB9CiAKK3ZvaWQgcGxhdGZvcm1Db3B5UERGKCkKK3sKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBn
ZW5lcmFsUGFzdGVib2FyZF07CisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOkBbKF9fYnJp
ZGdlIE5TU3RyaW5nICopa1VUVHlwZVBERl0gb3duZXI6bmlsXTsKKyAgICBbcGFzdGVib2FyZCBz
ZXREYXRhOnRlc3RQREZEYXRhKCkgZm9yVHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBl
UERGXTsKKyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgVUlQYXN0ZWJvYXJkICpwYXN0
ZWJvYXJkID0gW1VJUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF07CisgICAgYXV0byBpdGVt
ID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2l0ZW0gc2V0
UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUF0
dGFjaG1lbnRdOworICAgIFtpdGVtIHJlZ2lzdGVyRGF0YTp0ZXN0UERGRGF0YSgpIHR5cGU6KF9f
YnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBERl07CisgICAgcGFzdGVib2FyZC5pdGVtUHJvdmlk
ZXJzID0gQFsgaXRlbS5nZXQoKSBdOworI2VuZGlmCit9CisKK3ZvaWQgcGxhdGZvcm1Db3B5SlBF
RygpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9
IFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOworICAgIFtwYXN0ZWJvYXJkIGRlY2xh
cmVUeXBlczpAWyhfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVKUEVHXSBvd25lcjpuaWxdOwor
ICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6dGVzdEpQRUdEYXRhKCkgZm9yVHlwZTooX19icmlkZ2Ug
TlNTdHJpbmcgKilrVVRUeXBlSlBFR107CisjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IFVJUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtVSVBhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9h
cmRdOworICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5p
dF0pOworICAgIFtpdGVtIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVycmVk
UHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50XTsKKyAgICBbaXRlbSByZWdpc3RlckRhdGE6dGVz
dEpQRUdEYXRhKCkgdHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlSlBFR107CisgICAg
cGFzdGVib2FyZC5pdGVtUHJvdmlkZXJzID0gQFsgaXRlbS5nZXQoKSBdOworI2VuZGlmCit9CisK
ICNpZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIE5TSW1hZ2UgUGxhdGZvcm1JbWFnZTsKICNlbHNl
CkBAIC0xNTg3LDcgKzE2MjcsNiBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50
SWRlbnRpZmllck9mQ2xvbmVkQXR0YWNobWVudCkKIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIFNl
dEZpbGVXcmFwcGVyRm9yUERGSW1hZ2VBdHRhY2htZW50KQogewogICAgIGF1dG8gd2ViVmlldyA9
IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKLSAgICBbd2ViVmlldyBldmFsdWF0ZUph
dmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCkiIGNvbXBsZXRpb25IYW5kbGVy
Om5pbF07CiAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXIgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiY29uc3QgaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycp
OyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpOyBIVE1MQXR0YWNobWVudEVsZW1lbnQuZ2V0
QXR0YWNobWVudElkZW50aWZpZXIoaSkiXTsKICAgICBhdXRvIGF0dGFjaG1lbnQgPSByZXRhaW5Q
dHIoW3dlYlZpZXcgX2F0dGFjaG1lbnRGb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdKTsKIApAQCAt
MTYwMiw2ICsxNjQxLDM1IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIFNldEZpbGVXcmFwcGVy
Rm9yUERGSW1hZ2VBdHRhY2htZW50KQogICAgIEVYUEVDVF9GQUxTRShbYXR0YWNobWVudCBpc0Nv
bm5lY3RlZF0pOwogfQogCitURVNUKFdLQXR0YWNobWVudFRlc3RzLCBQYXN0aW5nUHJlc2VydmVz
SW1hZ2VGb3JtYXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRh
Y2htZW50cygpOworICAgIHsKKyAgICAgICAgcGxhdGZvcm1Db3B5UE5HKCk7CisgICAgICAgIE9i
c2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwor
ICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlBhc3Rl
IiBhcmd1bWVudDpuaWxdOworICAgICAgICBFWFBFQ1RfRVEoMVUsIG9ic2VydmVyLm9ic2VydmVy
KCkuaW5zZXJ0ZWQuY291bnQpOworICAgICAgICBfV0tBdHRhY2htZW50ICphdHRhY2htZW50ID0g
b2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZFswXTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KCJpbWFnZS9wbmciLCBhdHRhY2htZW50LmluZm8uY29udGVudFR5cGUpOworICAgIH0KKyAgICB7
CisgICAgICAgIHBsYXRmb3JtQ29weVBERigpOworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVw
ZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW3dlYlZpZXcg
X3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJQYXN0ZSIgYXJndW1lbnQ6bmlsXTsK
KyAgICAgICAgRVhQRUNUX0VRKDFVLCBvYnNlcnZlci5vYnNlcnZlcigpLmluc2VydGVkLmNvdW50
KTsKKyAgICAgICAgX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCA9IG9ic2VydmVyLm9ic2VydmVy
KCkuaW5zZXJ0ZWRbMF07CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vcGRm
IiwgYXR0YWNobWVudC5pbmZvLmNvbnRlbnRUeXBlKTsKKyAgICB9CisgICAgeworICAgICAgICBw
bGF0Zm9ybUNvcHlKUEVHKCk7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNj
b3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25v
dXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVudDpuaWxdOworICAgICAgICBF
WFBFQ1RfRVEoMVUsIG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWQuY291bnQpOworICAgICAg
ICBfV0tBdHRhY2htZW50ICphdHRhY2htZW50ID0gb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNlcnRl
ZFswXTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9qcGVnIiwgYXR0YWNobWVudC5p
bmZvLmNvbnRlbnRUeXBlKTsKKyAgICB9Cit9CisKICNwcmFnbWEgbWFyayAtIFBsYXRmb3JtLXNw
ZWNpZmljIHRlc3RzCiAKICNpZiBQTEFURk9STShNQUMpCg==
</data>
<flag name="review"
          id="476063"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="476091"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449864</attachid>
            <date>2022-01-24 14:55:09 -0800</date>
            <delta_ts>2022-01-24 15:48:51 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-190101-20220124145509.patch</filename>
            <type>text/plain</type>
            <size>14473</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmFmNzUzMTc3MmY0ZTdi
YWZiMmRhMGQ0NzcwNWE4OWZkMjBjOTM0MC4uY2E1MTgxMDIyOGMzNDYxYTgzMGZmY2NlOWUxN2Uy
MWRmZTQ1YmFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIyLTAxLTI0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFttYWNPU10gVXBk
YXRlIFBhc3RlYm9hcmQ6OnJlYWQgdG8gcHJpb3JpdGl6ZSBuYXRpdmUgcmVwcmVzZW50YXRpb25z
IG92ZXIgVElGRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkwMTAxCisgICAgICAgIHJkYXI6Ly80NDg3OTI0NAorCisgICAgICAgIFJldmlld2VkIGJ5
IFJ5b3N1a2UgTml3YS4KKworICAgICAgICBDdXJyZW50bHkgb24gbWFjT1MsIHdoZW4gcGFzdGlu
ZyBpbWFnZSBkYXRhIGZyb20gdGhlIHBhc3RlYm9hcmQgaW50byByaWNobHkgZWRpdGFibGUgZWxl
bWVudHMsIHdlIGF0dGVtcHQgdG8KKyAgICAgICAgcmVhZCB0aGUgaW1hZ2UgZGF0YSBieSBjaGVj
a2luZyBhIGhhcmQtY29kZWQgbGlzdCBvZiB0eXBlczsgaW4gb3JkZXIsIHRoZXNlIGFyZTogVElG
RiwgUERGLCBQTkcsIGFuZCBmaW5hbGx5CisgICAgICAgIEpQRUcuIFNpbmNlIEFwcEtpdCBhdXRv
bWF0aWNhbGx5IHByb3ZpZGVzIFRJRkYgYXMgYW4gYXZhaWxhYmxlIHR5cGUgZm9yIGNvbXBhdGli
aWxpdHkgd2hlbiB3cml0aW5nIG5vbi1USUZGCisgICAgICAgIGltYWdlIGRhdGEgdG8gdGhlIHBh
c3RlYm9hcmQsIHRoaXMgbWVhbnMgdGhhdCBXZWJLaXQgYXV0b21hdGljYWxseSB0cmFuc2NvZGVz
IGFsbCBpbWFnZXMgdG8gVElGRiB3aGVuIHBhc3RpbmcKKyAgICAgICAgaW1hZ2VzIGluIGVkaXRh
YmxlIGFyZWFzLgorCisgICAgICAgIFRoaXMgbGVhZHMgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBp
biBNYWlsIGNvbXBvc2Ugd2hlbiB1c2luZyB0aGUgY29udGludWl0eSBjYW1lcmEgdG8gaW5zZXJ0
IGltYWdlcywgc2luY2UgYWxsCisgICAgICAgIGRyYXdpbmdzIGFuZCBwaG90b3MgZW5kIHVwIGJl
aW5nIGluc2VydGVkIGFzIChvZnRlbiBtdWNoIGxhcmdlcikgVElGRiBmaWxlcyBpbnN0ZWFkIG9m
IEpQRUcgYW5kIFBORywKKyAgICAgICAgcmVzcGVjdGl2ZWx5LiBUbyBhZGRyZXNzIHRoaXMsIHdl
IGFkanVzdCBgUGFzdGVib2FyZDo6cmVhZGAgdG8gcHJpb3JpdGl6ZSBpbWFnZSBmb3JtYXRzIGlu
IHRoZSBoYXJkLWNvZGVkIGxpc3QKKyAgICAgICAgYWJvdmUgdGhhdCB3ZXJlIHdyaXR0ZW4gZGly
ZWN0bHkgdG8gdGhlIHBhc3RlYm9hcmQgYnkgdGhlIGNvcGllciAoaS5lLiB3aXRob3V0IHRyYW5z
Y29kaW5nKSBiZWZvcmUgcmVhZGluZyBmcm9tCisgICAgICAgIHRoZSByZW1haW5pbmcgdHlwZXMg
dGhhdCB3ZXJlIGFkZGVkIHRvIHRoZSBwYXN0ZWJvYXJkIGJ5IHRoZSBzeXN0ZW0gKGFuZCB0aHVz
IHJlcXVpcmUgZXh0cmEgdHJhbnNjb2RpbmcpLgorCisgICAgICAgIEluIHRoZSBjYXNlIHdoZXJl
IG9ubHkgUE5HIGFuZCBKUEVHIGRhdGEgd2FzIHdyaXR0ZW4gdG8gdGhlIHBhc3RlYm9hcmQgYnkg
dGhlIGNvcGllciwgdGhpcyBtZWFucyB3ZSdsbCByZWFkCisgICAgICAgIGltYWdlcyBhcyBQTkcg
YW5kIEpQRUcgZGF0YSBkaXJlY3RseS4gSWYgVElGRiB3YXMgZXhwbGljaXRseSB3cml0dGVuIGFz
IGFuIGltYWdlIGZvcm1hdCB0byB0aGUgcGFzdGVib2FyZCwgdGhpcworICAgICAgICBwYXRjaCB3
aWxsIHByZXNlcnZlIGV4aXN0aW5nIGJlaGF2aW9yIGJ5IHJlYWRpbmcgdGhlIGltYWdlIGRhdGEg
YXMgVElGRi4KKworICAgICAgICBOb3RlIHRoYXQgdGhpcyBleGlzdGluZyBsb2dpYyBmb3IgcmVh
ZGluZyBpbWFnZXMgZGlyZWN0bHkgaW50byB3ZWIgY29udGVudCBpcyBhbiBleGlzdGluZyBwcml2
YWN5IHJpc2ssIHNpbmNlCisgICAgICAgIEFwcEtpdCdzIHBhc3RlYm9hcmQgY29kZSBwcmVzZXJ2
ZXMgYWxsIG1ldGFkYXRhIHByb3BlcnRpZXMgd2hlbiB0cmFuc2NvZGluZyBiZXR3ZWVuIGltYWdl
IGZvcm1hdHMuIEluIHRoZQorICAgICAgICBmdXR1cmUsIHdlIHNob3VsZCBhZGQgYSBzdGVwIGhl
cmUgdG8gc3RyaXAgb3V0IGFzIG11Y2ggbWV0YWRhdGEgYXMgcG9zc2libGUgaGVyZSwgd2l0aCBh
biBhbGxvdy1saXN0IG9mIG1ldGFkYXRhCisgICAgICAgIHByb3BlcnRpZXMgdGhhdCBhcmUgZXNz
ZW50aWFsIHRvIHByZXNlcnZpbmcgaW1hZ2UgZmlkZWxpdHkgKGUuZy4gb3JpZW50YXRpb24pLgor
CisgICAgICAgIFNlZTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIzNTUzND4gZm9yIG1vcmUgZGV0
YWlscy4KKworICAgICAgICBUZXN0OiBXS0F0dGFjaG1lbnRUZXN0cy5QYXN0aW5nUHJlc2VydmVz
SW1hZ2VGb3JtYXQKKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6CisKKyAgICAgICAgUmVmYWN0b3Ig
dGhpcyBsb2dpYyBzbyB0aGF0IHdlIGZpcnN0IHRyeSB0byByZWFkIGFueSBuYXRpdmVseSB3cml0
dGVuIGltYWdlIGZvcm1hdHMgdGhhdCBoYXBwZW4gdG8gYmUgb25lIG9mCisgICAgICAgICgiVElG
RiIsICJQREYiLCAiUE5HIiwgIkpQRUciKSwgYmVmb3JlIHRyeWluZyB0byByZWFkIGFueSBvdGhl
ciB0eXBlcyB0aGF0IHdvdWxkIG90aGVyd2lzZSByZXF1aXJlIHRyYW5zY29kaW5nLgorCiAyMDIy
LTAxLTIyICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBDcmVhdGUgYW5jZXN0cnkgb2YgaXNvbGF0ZWQgb2JqZWN0cyBpbnN0ZWFkIG9mIGdlbmVyYXRp
bmcgdGhlIGVudGlyZSBzdWJ0cmVlIGZvciBhbiBhbmNlc3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KaW5kZXggM2U1NjMzZmJkYTczNWQ1YTExNDVl
MjUxY2M5ODE4OTVkMjQyMzBmMS4uYmE4ZWExZWI0NDhhOTIxZTMwZDNhZTZhOWM3N2U4ODIzM2Fi
YzUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0K
QEAgLTQzOCwxMyArNDM4LDI3IEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkUGxh
aW5UZXh0JiB0ZXh0LCBQbGFpblRleHRVUkxSZWFkaW5nUG9saWN5IGFsbG93CiB2b2lkIFBhc3Rl
Ym9hcmQ6OnJlYWQoUGFzdGVib2FyZFdlYkNvbnRlbnRSZWFkZXImIHJlYWRlciwgV2ViQ29udGVu
dFJlYWRpbmdQb2xpY3kgcG9saWN5LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gaXRlbUluZGV4KQog
ewogICAgIGF1dG8mIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKTsKKyAgICBhdXRvIHBsYXRmb3JtVHlwZXNGcm9tSXRlbXMgPSBbXShjb25zdCBW
ZWN0b3I8UGFzdGVib2FyZEl0ZW1JbmZvPiYgaXRlbXMpIHsKKyAgICAgICAgSGFzaFNldDxTdHJp
bmc+IHR5cGVzOworICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgeworICAgICAgICAg
ICAgZm9yIChhdXRvJiB0eXBlIDogaXRlbS5wbGF0Zm9ybVR5cGVzQnlGaWRlbGl0eSkKKyAgICAg
ICAgICAgICAgICB0eXBlcy5hZGQodHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHR5
cGVzOworICAgIH07CiAKKyAgICBIYXNoU2V0PFN0cmluZz4gbm9uVHJhbnNjb2RlZFR5cGVzOwog
ICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwogICAgIGlmIChpdGVtSW5kZXgpIHsKLSAgICAgICAg
aWYgKGF1dG8gaXRlbUluZm8gPSBzdHJhdGVneS5pbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KCpp
dGVtSW5kZXgsIG1fcGFzdGVib2FyZE5hbWUsIG1fY2hhbmdlQ291bnQsIGNvbnRleHQoKSkpCisg
ICAgICAgIGlmIChhdXRvIGl0ZW1JbmZvID0gc3RyYXRlZ3kuaW5mb3JtYXRpb25Gb3JJdGVtQXRJ
bmRleCgqaXRlbUluZGV4LCBtX3Bhc3RlYm9hcmROYW1lLCBtX2NoYW5nZUNvdW50LCBjb250ZXh0
KCkpKSB7CiAgICAgICAgICAgICB0eXBlcyA9IGl0ZW1JbmZvLT5wbGF0Zm9ybVR5cGVzQnlGaWRl
bGl0eTsKLSAgICB9IGVsc2UKKyAgICAgICAgICAgIG5vblRyYW5zY29kZWRUeXBlcyA9IHBsYXRm
b3JtVHlwZXNGcm9tSXRlbXMoeyAqaXRlbUluZm8gfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
ewogICAgICAgICBzdHJhdGVneS5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSwgY29u
dGV4dCgpKTsKKyAgICAgICAgaWYgKGF1dG8gYWxsSXRlbXMgPSBzdHJhdGVneS5hbGxQYXN0ZWJv
YXJkSXRlbUluZm8obV9wYXN0ZWJvYXJkTmFtZSwgbV9jaGFuZ2VDb3VudCwgY29udGV4dCgpKSkK
KyAgICAgICAgICAgIG5vblRyYW5zY29kZWRUeXBlcyA9IHBsYXRmb3JtVHlwZXNGcm9tSXRlbXMo
KmFsbEl0ZW1zKTsKKyAgICB9CiAKICAgICByZWFkZXIuY29udGVudE9yaWdpbiA9IHJlYWRPcmln
aW4oKTsKIApAQCAtNTE5LDUxICs1MzMsNDYgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECiAgICAgaWYgKHBvbGljeSA9PSBXZWJDb250ZW50UmVhZGluZ1BvbGljeTo6T25seVJp
Y2hUZXh0VHlwZXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0eXBlcy5jb250YWlucyhT
dHJpbmcobGVnYWN5VElGRlBhc3RlYm9hcmRUeXBlKCkpKSkgewotICAgICAgICBpZiAoYXV0byBi
dWZmZXIgPSByZWFkQnVmZmVyQXRQcmVmZXJyZWRJdGVtSW5kZXgobGVnYWN5VElGRlBhc3RlYm9h
cmRUeXBlKCksIGl0ZW1JbmRleCwgc3RyYXRlZ3ksIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQo
KSkpIHsKLSAgICAgICAgICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IGNoYW5nZUNvdW50KCkgfHwg
cmVhZGVyLnJlYWRJbWFnZShidWZmZXIucmVsZWFzZU5vbk51bGwoKSwgImltYWdlL3RpZmYiX3Mp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICB1c2luZyBJ
bWFnZVJlYWRpbmdJbmZvID0gc3RkOjp0dXBsZTxTdHJpbmcsIEFTQ0lJTGl0ZXJhbD47CisgICAg
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICBjb25zdCBzdGQ6OmFycmF5
PEltYWdlUmVhZGluZ0luZm8sIDY+IGltYWdlVHlwZXNUb1JlYWQgeyB7CisgICAgICAgIHsgU3Ry
aW5nKGxlZ2FjeVRJRkZQYXN0ZWJvYXJkVHlwZSgpKSwgImltYWdlL3RpZmYiX3MgfSwKKyAgICAg
ICAgeyBTdHJpbmcoTlNQYXN0ZWJvYXJkVHlwZVRJRkYpLCAiaW1hZ2UvdGlmZiJfcyB9LAorICAg
ICAgICB7IFN0cmluZyhsZWdhY3lQREZQYXN0ZWJvYXJkVHlwZSgpKSwgImFwcGxpY2F0aW9uL3Bk
ZiJfcyB9LAorICAgICAgICB7IFN0cmluZyhOU1Bhc3RlYm9hcmRUeXBlUERGKSwgImFwcGxpY2F0
aW9uL3BkZiJfcyB9LAorICAgICAgICB7IFN0cmluZyhrVVRUeXBlUE5HKSwgImltYWdlL3BuZyJf
cyB9LAorICAgICAgICB7IFN0cmluZyhrVVRUeXBlSlBFRyksICJpbWFnZS9qcGVnIl9zIH0KKyAg
ICB9IH07CisgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKLSAgICBpZiAo
dHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUGFzdGVib2FyZFR5cGVUSUZGKSkpIHsKLSAgICAgICAg
aWYgKGF1dG8gYnVmZmVyID0gcmVhZEJ1ZmZlckF0UHJlZmVycmVkSXRlbUluZGV4KE5TUGFzdGVi
b2FyZFR5cGVUSUZGLCBpdGVtSW5kZXgsIHN0cmF0ZWd5LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250
ZXh0KCkpKSB7Ci0gICAgICAgICAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBjaGFuZ2VDb3VudCgp
IHx8IHJlYWRlci5yZWFkSW1hZ2UoYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksICJpbWFnZS90aWZm
Il9zKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgYXV0
byB0cnlUb1JlYWRJbWFnZSA9IFsmXSAoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgQVND
SUlMaXRlcmFsIG1pbWVUeXBlKSB7CisgICAgICAgIGlmICghdHlwZXMuY29udGFpbnMocGFzdGVi
b2FyZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHR5cGVzLmNv
bnRhaW5zKFN0cmluZyhsZWdhY3lQREZQYXN0ZWJvYXJkVHlwZSgpKSkpIHsKLSAgICAgICAgaWYg
KGF1dG8gYnVmZmVyID0gcmVhZEJ1ZmZlckF0UHJlZmVycmVkSXRlbUluZGV4KGxlZ2FjeVBERlBh
c3RlYm9hcmRUeXBlKCksIGl0ZW1JbmRleCwgc3RyYXRlZ3ksIG1fcGFzdGVib2FyZE5hbWUsIGNv
bnRleHQoKSkpIHsKLSAgICAgICAgICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IGNoYW5nZUNvdW50
KCkgfHwgcmVhZGVyLnJlYWRJbWFnZShidWZmZXIucmVsZWFzZU5vbk51bGwoKSwgImFwcGxpY2F0
aW9uL3BkZiJfcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQor
ICAgICAgICBhdXRvIGJ1ZmZlciA9IHJlYWRCdWZmZXJBdFByZWZlcnJlZEl0ZW1JbmRleChwYXN0
ZWJvYXJkVHlwZSwgaXRlbUluZGV4LCBzdHJhdGVneSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4
dCgpKTsKKyAgICAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU1Bh
c3RlYm9hcmRUeXBlUERGKSkpIHsKLSAgICAgICAgaWYgKGF1dG8gYnVmZmVyID0gcmVhZEJ1ZmZl
ckF0UHJlZmVycmVkSXRlbUluZGV4KE5TUGFzdGVib2FyZFR5cGVQREYsIGl0ZW1JbmRleCwgc3Ry
YXRlZ3ksIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSkpIHsKLSAgICAgICAgICAgIGlmICht
X2NoYW5nZUNvdW50ICE9IGNoYW5nZUNvdW50KCkgfHwgcmVhZGVyLnJlYWRJbWFnZShidWZmZXIu
cmVsZWFzZU5vbk51bGwoKSwgImFwcGxpY2F0aW9uL3BkZiJfcykpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
LSAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKGtVVFR5cGVQTkcpKSkgewotICAgICAgICBp
ZiAoYXV0byBidWZmZXIgPSByZWFkQnVmZmVyQXRQcmVmZXJyZWRJdGVtSW5kZXgoa1VUVHlwZVBO
RywgaXRlbUluZGV4LCBzdHJhdGVneSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKSkgewot
ICAgICAgICAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnQoKSB8fCByZWFkZXIu
cmVhZEltYWdlKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCAiaW1hZ2UvcG5nIl9zKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiByZWFkZXIucmVhZEltYWdlKGJ1ZmZl
ci5yZWxlYXNlTm9uTnVsbCgpLCBtaW1lVHlwZSk7CisgICAgfTsKKworICAgIFZlY3RvcjxJbWFn
ZVJlYWRpbmdJbmZvLCA2PiB0cmFuc2NvZGVkSW1hZ2VUeXBlc1RvUmVhZDsKKyAgICBmb3IgKGF1
dG8mIFtwYXN0ZWJvYXJkVHlwZSwgbWltZVR5cGVdIDogaW1hZ2VUeXBlc1RvUmVhZCkgeworICAg
ICAgICBpZiAoIW5vblRyYW5zY29kZWRUeXBlcy5jb250YWlucyhwYXN0ZWJvYXJkVHlwZSkpIHsK
KyAgICAgICAgICAgIHRyYW5zY29kZWRJbWFnZVR5cGVzVG9SZWFkLmFwcGVuZCh7IHBhc3RlYm9h
cmRUeXBlLCBtaW1lVHlwZSB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Cisg
ICAgICAgIGlmICh0cnlUb1JlYWRJbWFnZShwYXN0ZWJvYXJkVHlwZSwgbWltZVR5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAogCi1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIGlmICh0eXBlcy5j
b250YWlucyhTdHJpbmcoa1VUVHlwZUpQRUcpKSkgewotICAgICAgICBpZiAoYXV0byBidWZmZXIg
PSByZWFkQnVmZmVyQXRQcmVmZXJyZWRJdGVtSW5kZXgoa1VUVHlwZUpQRUcsIGl0ZW1JbmRleCwg
c3RyYXRlZ3ksIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSkpIHsKLSAgICAgICAgICAgIGlm
IChtX2NoYW5nZUNvdW50ICE9IGNoYW5nZUNvdW50KCkgfHwgcmVhZGVyLnJlYWRJbWFnZShidWZm
ZXIucmVsZWFzZU5vbk51bGwoKSwgImltYWdlL2pwZWciX3MpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQorICAgIGZvciAoYXV0byYgW3Bhc3RlYm9hcmRUeXBlLCBtaW1lVHlw
ZV0gOiB0cmFuc2NvZGVkSW1hZ2VUeXBlc1RvUmVhZCkgeworICAgICAgICBpZiAodHJ5VG9SZWFk
SW1hZ2UocGFzdGVib2FyZFR5cGUsIG1pbWVUeXBlKSkKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICB9Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogICAgIGlmICh0eXBlcy5j
b250YWlucyhTdHJpbmcobGVnYWN5VVJMUGFzdGVib2FyZFR5cGUoKSkpKSB7CiAgICAgICAgIFVS
TCB1cmwgPSBzdHJhdGVneS51cmwobV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmZWU5YmJhNGVj
ZmIyZmVmYzU3ZjkwMjE3YjI1ZTExOTU5MDM1M2UxLi4wMDAyN2Y0OWE3NGNkZDkyYzQxMzhjYTQx
NThkNzA2Mjk1NTJlODgzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjItMDEtMjQgIFdlbnNvbiBIc2llaCAgPHdl
bnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBVcGRhdGUgUGFzdGVib2Fy
ZDo6cmVhZCB0byBwcmlvcml0aXplIG5hdGl2ZSByZXByZXNlbnRhdGlvbnMgb3ZlciBUSUZGCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTAxMDEKKyAg
ICAgICAgcmRhcjovLzQ0ODc5MjQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdh
LgorCisgICAgICAgIEFkZCBhIGNyb3NzLXBsYXRmb3JtIEFQSSB0ZXN0IHRvIHZlcmlmeSB0aGF0
IHdoZW4gdXNpbmcgdGhlIGNsaWVudC1zaWRlIGF0dGFjaG1lbnRzLCBwYXN0ZWQgaW1hZ2UgZGF0
YSBvZgorICAgICAgICB2YXJ5aW5nIGZvcm1hdHMgKFBERiwgSlBFRywgUE5HKSBhcmUgcmVhZCBp
biB0aGVpciBvcmlnaW5hbCBmb3JtLiBTZWUgV2ViQ29yZS9DaGFuZ2VMb2cgZm9yIG1vcmUgZGV0
YWlscy4gVGhpcworICAgICAgICB0ZXN0IGN1cnJlbnRseSBwYXNzZXMgb24gaU9TIGJ1dCBmYWls
cyBvbiBtYWNPUywgd2hlcmUgYm90aCB0aGUgUE5HIGFuZCBKUEVHIGltYWdlcyBhcmUgdHJhbnNj
b2RlZCBhbmQgcmVhZCBhcworICAgICAgICBUSUZGLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbToKKyAgICAgICAgKHRlc3RK
UEVHRmlsZVVSTCk6CisgICAgICAgICh0ZXN0SlBFR0RhdGEpOgorICAgICAgICAocGxhdGZvcm1D
b3B5UERGKToKKyAgICAgICAgKHBsYXRmb3JtQ29weUpQRUcpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisKKyAgICAgICAgRHJpdmUtYnkgZml4OiBhbHNvIHJlbW92ZSBhIEphdmFT
Y3JpcHQgZXZhbHVhdGlvbiBpbiBhIG5lYXJieSB0ZXN0IHRoYXQgY291bGQgb25seSByZXN1bHQg
aW4gYW4gZXhjZXB0aW9uIChhbmQKKyAgICAgICAgd2FzIHByb2JhYmx5IGFjY2lkZW50YWxseSBs
ZWZ0IHRoZXJlIHdoaWxlIHdyaXRpbmcgdGhlIHRlc3QpLgorCiAyMDIyLTAxLTIyICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVthMTF5
XSBTdG9wIHJlZ2lzdGVyaW5nIHRoZSB0cmVlIHdoZW4gY2xpZW50cyBhcmUgY29ubmVjdGVkIHdp
dGggQVRTUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tBdHRhY2htZW50VGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCmluZGV4IDdhZTljMjM0OTExNTA2ZDJlZTBjNGJk
YWJjMmQ3NDcyNTdlZTA3NGYuLjMxMTMyNDU3MWNiNjZmZmM2ZTgwZGNhZTgwZTM1YWM0M2U5Nzcw
NTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tB
dHRhY2htZW50VGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQpAQCAtMjYwLDYgKzI2MCwxNiBAQCBzdGF0aWMgTlNE
YXRhICp0ZXN0UERGRGF0YSgpCiAgICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09m
VVJMOnRlc3RQREZGaWxlVVJMKCldOwogfQogCitzdGF0aWMgTlNVUkwgKnRlc3RKUEVHRmlsZVVS
TCgpCit7CisgICAgcmV0dXJuIFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6
QCJzdW5zZXQtaW4tY3VwZXJ0aW5vLTYwMHB4IiB3aXRoRXh0ZW5zaW9uOkAianBnIiBzdWJkaXJl
Y3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworfQorCitzdGF0aWMgTlNEYXRhICp0
ZXN0SlBFR0RhdGEoKQoreworICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVS
TDp0ZXN0SlBFR0ZpbGVVUkwoKV07Cit9CisKIEBpbXBsZW1lbnRhdGlvbiBUZXN0V0tXZWJWaWV3
IChBdHRhY2htZW50VGVzdGluZykKIAogLSAoX1dLQXR0YWNobWVudCAqKXN5bmNocm9ub3VzbHlJ
bnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBw
ZXIgY29udGVudFR5cGU6KE5TU3RyaW5nICopY29udGVudFR5cGUKQEAgLTYxNiw2ICs2MjYsMzYg
QEAgdm9pZCBwbGF0Zm9ybUNvcHlQTkcoKQogI2VuZGlmCiB9CiAKK3ZvaWQgcGxhdGZvcm1Db3B5
UERGKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJk
ID0gW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF07CisgICAgW3Bhc3RlYm9hcmQgZGVj
bGFyZVR5cGVzOkBbKF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBERl0gb3duZXI6bmlsXTsK
KyAgICBbcGFzdGVib2FyZCBzZXREYXRhOnRlc3RQREZEYXRhKCkgZm9yVHlwZTooX19icmlkZ2Ug
TlNTdHJpbmcgKilrVVRUeXBlUERGXTsKKyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
VUlQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW1VJUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2Fy
ZF07CisgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0
XSk7CisgICAgW2l0ZW0gc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQ
cmVzZW50YXRpb25TdHlsZUF0dGFjaG1lbnRdOworICAgIFtpdGVtIHJlZ2lzdGVyRGF0YTp0ZXN0
UERGRGF0YSgpIHR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBERl07CisgICAgcGFz
dGVib2FyZC5pdGVtUHJvdmlkZXJzID0gQFsgaXRlbS5nZXQoKSBdOworI2VuZGlmCit9CisKK3Zv
aWQgcGxhdGZvcm1Db3B5SlBFRygpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIE5TUGFzdGVi
b2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOworICAg
IFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpAWyhfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVK
UEVHXSBvd25lcjpuaWxdOworICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6dGVzdEpQRUdEYXRhKCkg
Zm9yVHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlSlBFR107CisjZWxpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgIFVJUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtVSVBhc3RlYm9h
cmQgZ2VuZXJhbFBhc3RlYm9hcmRdOworICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtpdGVtIHNldFByZWZlcnJlZFByZXNlbnRhdGlv
blN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50XTsKKyAgICBbaXRl
bSByZWdpc3RlckRhdGE6dGVzdEpQRUdEYXRhKCkgdHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilr
VVRUeXBlSlBFR107CisgICAgcGFzdGVib2FyZC5pdGVtUHJvdmlkZXJzID0gQFsgaXRlbS5nZXQo
KSBdOworI2VuZGlmCit9CisKICNpZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIE5TSW1hZ2UgUGxh
dGZvcm1JbWFnZTsKICNlbHNlCkBAIC0xNTg3LDcgKzE2MjcsNiBAQCBURVNUKFdLQXR0YWNobWVu
dFRlc3RzLCBBdHRhY2htZW50SWRlbnRpZmllck9mQ2xvbmVkQXR0YWNobWVudCkKIFRFU1QoV0tB
dHRhY2htZW50VGVzdHMsIFNldEZpbGVXcmFwcGVyRm9yUERGSW1hZ2VBdHRhY2htZW50KQogewog
ICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKLSAgICBb
d2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCki
IGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CiAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXIgPSBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29uc3QgaSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2ltZycpOyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpOyBIVE1MQXR0
YWNobWVudEVsZW1lbnQuZ2V0QXR0YWNobWVudElkZW50aWZpZXIoaSkiXTsKICAgICBhdXRvIGF0
dGFjaG1lbnQgPSByZXRhaW5QdHIoW3dlYlZpZXcgX2F0dGFjaG1lbnRGb3JJZGVudGlmaWVyOmlk
ZW50aWZpZXJdKTsKIApAQCAtMTYwMiw2ICsxNjQxLDM1IEBAIFRFU1QoV0tBdHRhY2htZW50VGVz
dHMsIFNldEZpbGVXcmFwcGVyRm9yUERGSW1hZ2VBdHRhY2htZW50KQogICAgIEVYUEVDVF9GQUxT
RShbYXR0YWNobWVudCBpc0Nvbm5lY3RlZF0pOwogfQogCitURVNUKFdLQXR0YWNobWVudFRlc3Rz
LCBQYXN0aW5nUHJlc2VydmVzSW1hZ2VGb3JtYXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gd2Vi
Vmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOworICAgIHsKKyAgICAgICAgcGxhdGZvcm1Db3B5
UE5HKCk7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVy
KHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVF
ZGl0Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVudDpuaWxdOworICAgICAgICBFWFBFQ1RfRVEoMVUs
IG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWQuY291bnQpOworICAgICAgICBfV0tBdHRhY2ht
ZW50ICphdHRhY2htZW50ID0gb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZFswXTsKKyAgICAg
ICAgRVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9wbmciLCBhdHRhY2htZW50LmluZm8uY29udGVudFR5
cGUpOworICAgIH0KKyAgICB7CisgICAgICAgIHBsYXRmb3JtQ29weVBERigpOworICAgICAgICBP
YnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsK
KyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJQYXN0
ZSIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAgRVhQRUNUX0VRKDFVLCBvYnNlcnZlci5vYnNlcnZl
cigpLmluc2VydGVkLmNvdW50KTsKKyAgICAgICAgX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCA9
IG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWRbMF07CisgICAgICAgIEVYUEVDVF9XS19TVFJF
USgiYXBwbGljYXRpb24vcGRmIiwgYXR0YWNobWVudC5pbmZvLmNvbnRlbnRUeXBlKTsKKyAgICB9
CisgICAgeworICAgICAgICBwbGF0Zm9ybUNvcHlKUEVHKCk7CisgICAgICAgIE9ic2VydmVBdHRh
Y2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBb
d2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVu
dDpuaWxdOworICAgICAgICBFWFBFQ1RfRVEoMVUsIG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0
ZWQuY291bnQpOworICAgICAgICBfV0tBdHRhY2htZW50ICphdHRhY2htZW50ID0gb2JzZXJ2ZXIu
b2JzZXJ2ZXIoKS5pbnNlcnRlZFswXTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9q
cGVnIiwgYXR0YWNobWVudC5pbmZvLmNvbnRlbnRUeXBlKTsKKyAgICB9Cit9CisKICNwcmFnbWEg
bWFyayAtIFBsYXRmb3JtLXNwZWNpZmljIHRlc3RzCiAKICNpZiBQTEFURk9STShNQUMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>