<?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>208492</bug_id>
          
          <creation_ts>2020-03-02 17:48:00 -0800</creation_ts>
          <short_desc>Path::m_path should be a RetainPtr&lt;CGMutablePathRef&gt; on platforms that use CoreGraphics</short_desc>
          <delta_ts>2020-03-04 10:07:09 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</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>DoNotImportToRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1624870</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-03-02 17:48:00 -0800</bug_when>
    <thetext>This would allow us to remove all of the manual CFRetain/CFRelease calls in PathCG.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625192</commentid>
    <comment_count>1</comment_count>
      <attachid>392315</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-03-03 13:01:02 -0800</bug_when>
    <thetext>Created attachment 392315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625208</commentid>
    <comment_count>2</comment_count>
      <attachid>392315</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-03 13:22:33 -0800</bug_when>
    <thetext>Comment on attachment 392315
Patch

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

&gt; Source/WebCore/platform/graphics/cg/PathCG.cpp:220
&gt;      CGMutablePathRef path = CGPathCreateMutable();

This would be better as RetainPtr&lt;CGMutablePathRef&gt; path = adoptCF(), and do a WTFMove below.

&gt; Source/WebCore/platform/graphics/cg/PathCG.cpp:223
&gt; +    CGMutablePathRef path = CGPathCreateMutableCopyByTransformingPath(m_path.get(), &amp;transformCG);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625209</commentid>
    <comment_count>3</comment_count>
      <attachid>392315</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-03-03 13:26:02 -0800</bug_when>
    <thetext>Comment on attachment 392315
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/cg/PathCG.cpp:220
&gt;&gt;      CGMutablePathRef path = CGPathCreateMutable();
&gt; 
&gt; This would be better as RetainPtr&lt;CGMutablePathRef&gt; path = adoptCF(), and do a WTFMove below.

Good call!

&gt;&gt; Source/WebCore/platform/graphics/cg/PathCG.cpp:223
&gt;&gt; +    CGMutablePathRef path = CGPathCreateMutableCopyByTransformingPath(m_path.get(), &amp;transformCG);
&gt; 
&gt; Ditto.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625222</commentid>
    <comment_count>4</comment_count>
      <attachid>392322</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-03-03 13:42:32 -0800</bug_when>
    <thetext>Created attachment 392322
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625243</commentid>
    <comment_count>5</comment_count>
      <attachid>392315</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-03 14:17:54 -0800</bug_when>
    <thetext>Comment on attachment 392315
Patch

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

&gt; Source/WebCore/platform/graphics/Path.h:178
&gt; +#endif
&gt; +#if USE(DIRECT2D) || USE(CG)

I do not think because COMPtr and RetainPtr have the method get(), we should have a single function serving them both. I would prefer adding the same function twice for clarity. It took me awhile to figure out why CG begins to use the same code path of DIRECT2D.

&gt; Source/WebCore/platform/graphics/Path.h:232
&gt; +#elif USE(CG)
&gt; +    mutable RetainPtr&lt;CGMutablePathRef&gt; m_path;
&gt;  #else
&gt; -    mutable PlatformPathPtr m_path { nullptr };
&gt; +    PlatformPathPtr m_path { nullptr };
&gt;  #endif

I do not think we should do that. At the top of this file, we already have large #if...#endif structure to define PlatformPath. After that we define 

typedef PlatformPath* PlatformPathPtr;

And here you are ignoring all of that and adding a new #elif USE(CG) section which defines m_path with another CG new type different from PlatformPath and PlatformPathPtr. I know you are adding it after the DIRECT2D section but I think the DIRECT2D section is also incorrect.

I would expect adding all the platform dependent definitions in one section and then use the platform type without any additional #if&apos;s. 

What is the problem with defining PlatformPathPtr like that:

#if USE(CG)
using PlatformPathPtr = RetainPtr&lt;CGMutablePathRef&gt;;
#elif USE(CAIRO)
using PlatformPathPtr = RefPtr&lt;CairoPath&gt;;
#elif USE(DIRECT2D)
using PlatformPathPtr = COMPtr&lt;ID2D1GeometryGroup&gt;;
#endif

In this case m_path can be defined like this:

    PlatformPathPtr m_path;

And platformPath() can be defined like this:

    PlatformPathPtr platformPath() const { return m_path; }

This will be similar to what we do for NativeImagePtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625275</commentid>
    <comment_count>6</comment_count>
      <attachid>392315</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-03-03 15:14:48 -0800</bug_when>
    <thetext>Comment on attachment 392315
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Path.h:178
&gt;&gt; +#if USE(DIRECT2D) || USE(CG)
&gt; 
&gt; I do not think because COMPtr and RetainPtr have the method get(), we should have a single function serving them both. I would prefer adding the same function twice for clarity. It took me awhile to figure out why CG begins to use the same code path of DIRECT2D.

Okay, I&apos;ll un-merge them.

&gt;&gt; Source/WebCore/platform/graphics/Path.h:232
&gt;&gt;  #endif
&gt; 
&gt; I do not think we should do that. At the top of this file, we already have large #if...#endif structure to define PlatformPath. After that we define 
&gt; 
&gt; typedef PlatformPath* PlatformPathPtr;
&gt; 
&gt; And here you are ignoring all of that and adding a new #elif USE(CG) section which defines m_path with another CG new type different from PlatformPath and PlatformPathPtr. I know you are adding it after the DIRECT2D section but I think the DIRECT2D section is also incorrect.
&gt; 
&gt; I would expect adding all the platform dependent definitions in one section and then use the platform type without any additional #if&apos;s. 
&gt; 
&gt; What is the problem with defining PlatformPathPtr like that:
&gt; 
&gt; #if USE(CG)
&gt; using PlatformPathPtr = RetainPtr&lt;CGMutablePathRef&gt;;
&gt; #elif USE(CAIRO)
&gt; using PlatformPathPtr = RefPtr&lt;CairoPath&gt;;
&gt; #elif USE(DIRECT2D)
&gt; using PlatformPathPtr = COMPtr&lt;ID2D1GeometryGroup&gt;;
&gt; #endif
&gt; 
&gt; In this case m_path can be defined like this:
&gt; 
&gt;     PlatformPathPtr m_path;
&gt; 
&gt; And platformPath() can be defined like this:
&gt; 
&gt;     PlatformPathPtr platformPath() const { return m_path; }
&gt; 
&gt; This will be similar to what we do for NativeImagePtr.

Unlike NativeImagePtr, there isn&apos;t actually any platform-agnostic code that takes advantage of a platform-agnostic PlatformPathPtr in WebKit (all the call sites that handle platform path pointers all already know what they want).

We chatted in person, and you recommended adding something like this to the top of the file:

```
#if USE(CG)
using PlatformPathStorageType = RetainPtr&lt;CGMutablePathPtr&gt;;
#elif USE(DIRECT2D)
using PlatformPathStorageType = COMPtr&lt;ID2D1GeometryGroup&gt;;
#else
using PlatformPathStorageType = PlatformPathPtr;
#endif
```

...which would allow us to just define this in the private section of Path:

```
mutable PlatformPathStorageType m_path;
```

(PathCairo.cpp starts its m_path as 0 anyways, so we don&apos;t need the { nullptr } at the end).

We could additionally consider making PlatformPathPtr a Retain/COMPtr on CG and Direct2D platforms respectively, but I think it&apos;s a bit cumbersome for all call sites to have to take ownership of the platform path, or call `.get()` to obtain the raw pointer. In any case, I&apos;ll pursue this second item as a followup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625283</commentid>
    <comment_count>7</comment_count>
      <attachid>392340</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-03-03 15:33:53 -0800</bug_when>
    <thetext>Created attachment 392340
Address Said&apos;s comments + fix Win build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625364</commentid>
    <comment_count>8</comment_count>
      <attachid>392340</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-03 19:12:41 -0800</bug_when>
    <thetext>Comment on attachment 392340
Address Said&apos;s comments + fix Win build

This is OK but I don’t really see a point in having all these types defined when there is no platform independent code using them. Seriously the entire point of the type names seems to be the so we can share one line to defining a private data member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625371</commentid>
    <comment_count>9</comment_count>
      <attachid>392340</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-03 19:49:54 -0800</bug_when>
    <thetext>Comment on attachment 392340
Address Said&apos;s comments + fix Win build

Clearing flags on attachment: 392340

Committed r257820: &lt;https://trac.webkit.org/changeset/257820&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625372</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-03 19:49:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625577</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-04 09:59:38 -0800</bug_when>
    <thetext>I suggest removing PlatformPath, PlatformPathPtr. PlatformPathStorageType, platformPath, ensuurePlatformPath, and m_path, replacing them with separate platform-specific function and data members.

None of these are used in platform-independent code. The platform-specific code is made less clear by these confusing names. What does &quot;platform&quot; even mean in these names?

I believe that the NativeImagePtr pattern isn’t a good one and shouldn’t be replicated.

But aside from that, this case is different from NativeImagePtr because we are not using any of those things for platform-independent code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625580</commentid>
    <comment_count>12</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-03-04 10:03:53 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #11)
&gt; I suggest removing PlatformPath, PlatformPathPtr. PlatformPathStorageType,
&gt; platformPath, ensuurePlatformPath, and m_path, replacing them with separate
&gt; platform-specific function and data members.
&gt; 
&gt; None of these are used in platform-independent code. The platform-specific
&gt; code is made less clear by these confusing names. What does &quot;platform&quot; even
&gt; mean in these names?
&gt; 
&gt; I believe that the NativeImagePtr pattern isn’t a good one and shouldn’t be
&gt; replicated.
&gt; 
&gt; But aside from that, this case is different from NativeImagePtr because we
&gt; are not using any of those things for platform-independent code.

Sounds good — I’ll do it in a followup here: https://bugs.webkit.org/show_bug.cgi?id=208579.

Would you suggest we rename platformPath, ensurePlatformPath, and m_path to something along the lines of nativePath, ensureNativePath, and m_nativePath (respectively)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625586</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-04 10:05:41 -0800</bug_when>
    <thetext>As I understand it, our pattern for the future for security’s sake it to use RefPtr and RetainPtr for return values all the time. So I think that pathCG (what is currently called platform path) should be returning RetainPtr&lt;CGPathRef&gt; even though that means writing get() at most of the call sites. This would be done to decrease the chance of subtle object lifetime bugs.

Not related to this refactoring, related to a general new direction across all of WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625593</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-04 10:07:09 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #12)
&gt; Would you suggest we rename platformPath, ensurePlatformPath, and m_path to
&gt; something along the lines of nativePath, ensureNativePath, and m_nativePath
&gt; (respectively)?

For CG, I would suggesting calling them something like this:

pathCG or immutableCGPath or cgPath
mutableCGPath
m_path or m_pathCG or m_cgPath

No abstract name for &quot;what CG is&quot;, because the code that uses this will all be CG-specific.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392315</attachid>
            <date>2020-03-03 13:01:02 -0800</date>
            <delta_ts>2020-03-03 13:42:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208492-20200303130101.patch</filename>
            <type>text/plain</type>
            <size>10011</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3Nzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmExYzRlMGM3NGE5MjFk
NTA3NmU0NDZmOWM0OGUxNmFjMTBiNThlMS4uNGUxMmY3ZTU2ZmM1MzE4NDZhMjczNWUxZmIyYTQ2
NjMwMGZhNDJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIwLTAzLTAzICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFBhdGg6Om1fcGF0
aCBzaG91bGQgYmUgYSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gb24gcGxhdGZvcm1zIHRo
YXQgdXNlIENvcmVHcmFwaGljcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA4NDkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTWFrZSBtX3BhdGggYSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gb24g
cGxhdGZvcm1zIHRoYXQgdXNlIENvcmVHcmFwaGljcy4gVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3Zl
IGFsbCB0aGUKKyAgICAgICAgbWFudWFsIHJldGFpbmluZyBhbmQgcmVsZWFzaW5nIG9uIG1fcGF0
aCB0aGF0IGN1cnJlbnRseSByZXNpZGVzIGluIFBhdGhDRy5jcHAuIFNlZSBiZWxvdyBmb3IgbW9y
ZSBkZXRhaWxzLgorICAgICAgICBUaGVyZSBzaG91bGQgYmUgbm8gY2hhbmdlIGluIGJlaGF2aW9y
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tOgorCisgICAgICAg
IEFkZCBgYWRvcHRDRmAgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIFdlYkNvcmU6OlBhdGggZnJvbSB0
aGUgbmV3bHkgY3JlYXRlZCBDR011dGFibGVQYXRoUmVmLgorCisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2hhcGVQYXRoIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6UGF0aCk6
CisKKyAgICAgICAgSW5zdGVhZCBvZiB0YWtpbmcgYSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJl
Zj4gYW5kIGxlYWtpbmcgdGhlIHBvaW50ZXIsIGNoYW5nZSB0aGlzIHRvIHRha2UgYW4gcnZhbHVl
IHJlZmVyZW5jZQorICAgICAgICBhbmQgYFdURk1vdmVgIGl0IGRpcmVjdGx5IGludG8gbV9wYXRo
LgorCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjplbnN1cmVQbGF0Zm9ybVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmJvdW5kaW5nUmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpmYXN0Qm91bmRpbmdSZWN0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6aXNFbXB0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjpjdXJyZW50UG9pbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6YXBwbHkgY29uc3QpOgorCisgICAgICAgIENoYW5nZSBgbV9wYXRoYCB0byBgbV9wYXRo
LmdldCgpYCBhbmQgYWRkIGBhZG9wdENGYHMsIGFzIG5lZWRlZC4gUmVtb3ZlIGV4cGxpY2l0IGNh
bGxzIHRvIENGUmVsZWFzZSBhbmQKKyAgICAgICAgQ0ZSZXRhaW4uCisKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6On5QYXRoKTogRGVsZXRlZC4KKworICAgICAgICBKdXN0IHVzZSB0aGUgZGVmYXVs
dCBkZXN0cnVjdG9yLCBub3cgdGhhdCB0aGVyZSdzIG5vIGxvbmdlciBhIG5lZWQgdG8gZXhwbGlj
aXRseSBjYWxsIENGUmVsZWFzZSBvbiBtX3BhdGguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9y
bVBhdGhGb3JHbHlwaCBjb25zdCk6CisKKyAgICAgICAgU2luY2UgdGhlIFBhdGggY29uc3RydWN0
b3Igbm93IHRha2VzIGBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4mJmAsIHVzZSBtb3ZlIHNl
bWFudGljcyB3aGVuIGNyZWF0aW5nIHRoZSBuZXcKKyAgICAgICAgV2ViQ29yZTo6UGF0aCBmcm9t
IHRoZSBSZXRhaW5QdHIuCisKIDIwMjAtMDMtMDMgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2ll
aEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkcmVzcyBwb3N0LWNvbW1pdCBmZWVkYmFjayBhZnRl
ciByMjU3NzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
YXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKaW5kZXggY2Nk
OGM5MzBmYWJlYjI3OTAyM2JhMzgzOGUzYjhkZGYxYzQ0MWUzMy4uY2Q1ZjE3YzM3YWIwZWY5ZGIz
MmI5MjcwM2FlNTBkY2E0ZjBhZTY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaApAQCAtMTE0LDcgKzExNCw3IEBAIGNsYXNzIFBhdGggewogcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIFBhdGgoKTsKICNpZiBVU0UoQ0cpCi0gICAgUGF0aChSZXRhaW5QdHI8Q0dN
dXRhYmxlUGF0aFJlZj4pOworICAgIFBhdGgoUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+JiYp
OwogI2VuZGlmCiAgICAgV0VCQ09SRV9FWFBPUlQgflBhdGgoKTsKIApAQCAtMTc0LDYgKzE3NCw4
IEBAIHB1YmxpYzoKICAgICAvLyBtZWFuaW5nIFBhdGg6OnBsYXRmb3JtUGF0aCgpIGNhbiByZXR1
cm4gbnVsbC4KICNpZiBVU0UoRElSRUNUMkQpCiAgICAgRmxvYXRSZWN0IGZhc3RCb3VuZGluZ1Jl
Y3RGb3JTdHJva2UoY29uc3QgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKSBjb25zdDsKKyNlbmRp
ZgorI2lmIFVTRShESVJFQ1QyRCkgfHwgVVNFKENHKQogICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0
Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KICNlbHNlCiAgICAgUGxh
dGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQpAQCAt
MjIzLDggKzIyNSwxMCBAQCBwcml2YXRlOgogICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+
IG1fcGF0aDsKICAgICBtdXRhYmxlIENPTVB0cjxJRDJEMUdlb21ldHJ5U2luaz4gbV9hY3RpdmVQ
YXRoOwogICAgIG11dGFibGUgYm9vbCBtX2ZpZ3VyZUlzT3BlbmVkIHsgZmFsc2UgfTsKKyNlbGlm
IFVTRShDRykKKyAgICBtdXRhYmxlIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBtX3BhdGg7
CiAjZWxzZQotICAgIG11dGFibGUgUGxhdGZvcm1QYXRoUHRyIG1fcGF0aCB7IG51bGxwdHIgfTsK
KyAgICBQbGF0Zm9ybVBhdGhQdHIgbV9wYXRoIHsgbnVsbHB0ciB9OwogI2VuZGlmCiAKICNpZiBV
U0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9j
b2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCmluZGV4IGFjOTdhYWZhYzhl
YjYxZmRlZDI2ZTlkOTUzODcxZTM2NjRlNmQ5YjUuLjFhZmQ0ODhhMzczODA4MWQ4MzYxYzI0ZWI1
NTBjNTVkOGUyYTQ5MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCkBAIC05
ODksNyArOTg5LDcgQEAgUGF0aCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2hhcGVQYXRoKCkgY29u
c3QKICAgICBBU1NFUlQobV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlU2hhcGVMYXllcik7CiAKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICByZXR1cm4gUGF0aChDR1BhdGhDcmVh
dGVNdXRhYmxlQ29weShbKENBU2hhcGVMYXllciAqKW1fbGF5ZXIgcGF0aF0pKTsKKyAgICByZXR1
cm4geyBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5KFsoQ0FTaGFwZUxheWVyICopbV9s
YXllciBwYXRoXSkpIH07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCA5YTBk
OTM0ZWNmOWY3MmY5M2U1M2Y5MDRlODFjNDNmZTk3NDA0NWQzLi42MzA0MDY4M2QzZmMwOGNhYTBj
N2Q5NjBlNGUxODI5ZWM0NWYzZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTgyLDMyICs4MiwyNCBAQCBQYXRoIFBhdGg6OnBvbHln
b25QYXRoRnJvbVBvaW50cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIHBvaW50cykKICAgICBy
ZXR1cm4gcGF0aDsKIH0KIAotUGF0aDo6UGF0aCgpCi0gICAgOiBtX3BhdGgobnVsbHB0cikKK1Bh
dGg6OlBhdGgoUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+JiYgcGF0aCkKKyAgICA6IG1fcGF0
aChXVEZNb3ZlKHBhdGgpKQogewogfQogCi1QYXRoOjpQYXRoKFJldGFpblB0cjxDR011dGFibGVQ
YXRoUmVmPiBwKQotICAgIDogbV9wYXRoKHAubGVha1JlZigpKQotewotfQotCi1QYXRoOjp+UGF0
aCgpCi17Ci0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgQ0ZSZWxlYXNlKG1fcGF0aCk7Ci19CitQ
YXRoOjpQYXRoKCkgPSBkZWZhdWx0OworUGF0aDo6flBhdGgoKSA9IGRlZmF1bHQ7CiAKIFBsYXRm
b3JtUGF0aFB0ciBQYXRoOjplbnN1cmVQbGF0Zm9ybVBhdGgoKQogewogICAgIGlmICghbV9wYXRo
KQotICAgICAgICBtX3BhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CisgICAgICAgIG1fcGF0
aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKICAgICBlbHNlIGlmIChtX2NvcHlQ
YXRoQmVmb3JlTXV0YXRpb24pIHsKLSAgICAgICAgaWYgKENGR2V0UmV0YWluQ291bnQobV9wYXRo
KSA+IDEpCi0gICAgICAgICAgICBDRlJlbGVhc2Uoc3RkOjpleGNoYW5nZShtX3BhdGgsIENHUGF0
aENyZWF0ZU11dGFibGVDb3B5KG1fcGF0aCkpKTsKKyAgICAgICAgaWYgKENGR2V0UmV0YWluQ291
bnQobV9wYXRoLmdldCgpKSA+IDEpCisgICAgICAgICAgICBtX3BhdGggPSBhZG9wdENGKENHUGF0
aENyZWF0ZU11dGFibGVDb3B5KG1fcGF0aC5nZXQoKSkpOwogICAgICAgICBtX2NvcHlQYXRoQmVm
b3JlTXV0YXRpb24gPSBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIG1fcGF0aDsKKyAgICByZXR1
cm4gbV9wYXRoLmdldCgpOwogfQogCiBQYXRoOjpQYXRoKGNvbnN0IFBhdGgmIG90aGVyKQpAQCAt
MTE2LDcgKzEwOCw2IEBAIFBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCiAgICAgaWYgKG1f
cGF0aCkgewogICAgICAgICBtX2NvcHlQYXRoQmVmb3JlTXV0YXRpb24gPSB0cnVlOwogICAgICAg
ICBvdGhlci5tX2NvcHlQYXRoQmVmb3JlTXV0YXRpb24gPSB0cnVlOwotICAgICAgICBDRlJldGFp
bihtX3BhdGgpOwogICAgIH0KIH0KIApAQCAtMTg5LDcgKzE4MCw3IEBAIGJvb2wgUGF0aDo6Y29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCAmcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENHUGF0aENvbnRhaW5zUG9pbnQgcmV0dXJucyBm
YWxzZSBmb3Igbm9uLWNsb3NlZCBwYXRocywgYXMgYSB3b3JrLWFyb3VuZCwgd2UgY29weSBhbmQg
Y2xvc2UgdGhlIHBhdGggZmlyc3QuICBSYWRhciA0NzU4OTk4IGFza3MgZm9yIGEgYmV0dGVyIENH
IEFQSSB0byB1c2UKLSAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gcGF0aCA9IGFkb3B0
Q0YoY29weUNHUGF0aENsb3NpbmdTdWJwYXRocyhtX3BhdGgpKTsKKyAgICBhdXRvIHBhdGggPSBh
ZG9wdENGKGNvcHlDR1BhdGhDbG9zaW5nU3VicGF0aHMobV9wYXRoLmdldCgpKSk7CiAgICAgYm9v
bCByZXQgPSBDR1BhdGhDb250YWluc1BvaW50KHBhdGguZ2V0KCksIDAsIHBvaW50LCBydWxlID09
IFdpbmRSdWxlOjpFdmVuT2RkID8gdHJ1ZSA6IGZhbHNlKTsKICAgICByZXR1cm4gcmV0OwogfQpA
QCAtMjI3LDEyICsyMTgsMTEgQEAgdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtQ0cgPSB0
cmFuc2Zvcm07CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9
IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLSAgICBDR1BhdGhBZGRQYXRoKHBhdGgsICZ0cmFuc2Zv
cm1DRywgbV9wYXRoKTsKKyAgICBDR1BhdGhBZGRQYXRoKHBhdGgsICZ0cmFuc2Zvcm1DRywgbV9w
YXRoLmdldCgpKTsKICNlbHNlCi0gICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3Jl
YXRlTXV0YWJsZUNvcHlCeVRyYW5zZm9ybWluZ1BhdGgobV9wYXRoLCAmdHJhbnNmb3JtQ0cpOwor
ICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGVDb3B5QnlUcmFu
c2Zvcm1pbmdQYXRoKG1fcGF0aC5nZXQoKSwgJnRyYW5zZm9ybUNHKTsKICNlbmRpZgotICAgIENG
UmVsZWFzZShtX3BhdGgpOwotICAgIG1fcGF0aCA9IHBhdGg7CisgICAgbV9wYXRoID0gYWRvcHRD
RihwYXRoKTsKICAgICBtX2NvcHlQYXRoQmVmb3JlTXV0YXRpb24gPSBmYWxzZTsKIH0KIApAQCAt
MjQzLDcgKzIzMyw3IEBAIEZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAogCiAg
ICAgLy8gQ0dQYXRoR2V0Qm91bmRpbmdCb3ggaW5jbHVkZXMgdGhlIHBhdGgncyBjb250cm9sIHBv
aW50cywgQ0dQYXRoR2V0UGF0aEJvdW5kaW5nQm94IGRvZXMgbm90LgogCi0gICAgQ0dSZWN0IGJv
dW5kID0gQ0dQYXRoR2V0UGF0aEJvdW5kaW5nQm94KG1fcGF0aCk7CisgICAgQ0dSZWN0IGJvdW5k
ID0gQ0dQYXRoR2V0UGF0aEJvdW5kaW5nQm94KG1fcGF0aC5nZXQoKSk7CiAgICAgcmV0dXJuIENH
UmVjdElzTnVsbChib3VuZCkgPyBDR1JlY3RaZXJvIDogYm91bmQ7CiB9CiAKQEAgLTI1MSw3ICsy
NDEsNyBAQCBGbG9hdFJlY3QgUGF0aDo6ZmFzdEJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAgICAg
aWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLSAgICBDR1JlY3QgYm91
bmQgPSBDR1BhdGhHZXRCb3VuZGluZ0JveChtX3BhdGgpOworICAgIENHUmVjdCBib3VuZCA9IENH
UGF0aEdldEJvdW5kaW5nQm94KG1fcGF0aC5nZXQoKSk7CiAgICAgcmV0dXJuIENHUmVjdElzTnVs
bChib3VuZCkgPyBDR1JlY3RaZXJvIDogYm91bmQ7CiB9CiAKQEAgLTQwNCw5ICszOTQsOCBAQCB2
b2lkIFBhdGg6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCiAgICAgICAgIENHUGF0aEFkZFBhdGgoZW5zdXJlUGxhdGZvcm1QYXRoKCks
ICZ0cmFuc2Zvcm1DRywgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgQ0dQYXRoUmVmIHBhdGhDb3B5ID0gQ0dQYXRoQ3JlYXRlQ29weShwYXRoLnBsYXRm
b3JtUGF0aCgpKTsKLSAgICBDR1BhdGhBZGRQYXRoKGVuc3VyZVBsYXRmb3JtUGF0aCgpLCAmdHJh
bnNmb3JtQ0csIHBhdGhDb3B5KTsKLSAgICBDRlJlbGVhc2UocGF0aENvcHkpOworICAgIGF1dG8g
cGF0aENvcHkgPSBhZG9wdENGKENHUGF0aENyZWF0ZUNvcHkocGF0aC5wbGF0Zm9ybVBhdGgoKSkp
OworICAgIENHUGF0aEFkZFBhdGgoZW5zdXJlUGxhdGZvcm1QYXRoKCksICZ0cmFuc2Zvcm1DRywg
cGF0aENvcHkuZ2V0KCkpOwogfQogCiB2b2lkIFBhdGg6OmNsZWFyKCkKQEAgLTQxNCwxNCArNDAz
LDEzIEBAIHZvaWQgUGF0aDo6Y2xlYXIoKQogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgQ0ZSZWxlYXNlKG1fcGF0aCk7Ci0gICAgbV9wYXRoID0gQ0dQYXRoQ3JlYXRl
TXV0YWJsZSgpOworICAgIG1fcGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsK
ICAgICBtX2NvcHlQYXRoQmVmb3JlTXV0YXRpb24gPSBmYWxzZTsKIH0KIAogYm9vbCBQYXRoOjpp
c0VtcHR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNOdWxsKCkgfHwgQ0dQYXRoSXNFbXB0eSht
X3BhdGgpOworICAgIHJldHVybiBpc051bGwoKSB8fCBDR1BhdGhJc0VtcHR5KG1fcGF0aC5nZXQo
KSk7CiB9CiAKIGJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKQEAgLTQzMyw3ICs0
MjEsNyBAQCBGbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0CiB7CiAgICAgaWYg
KGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOwotICAgIHJldHVybiBDR1Bh
dGhHZXRDdXJyZW50UG9pbnQobV9wYXRoKTsKKyAgICByZXR1cm4gQ0dQYXRoR2V0Q3VycmVudFBv
aW50KG1fcGF0aC5nZXQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIENHUGF0aEFwcGxpZXJUb1BhdGhB
cHBsaWVyKHZvaWQqIGluZm8sIGNvbnN0IENHUGF0aEVsZW1lbnQqIGVsZW1lbnQpCkBAIC00Njcs
NyArNDU1LDcgQEAgdm9pZCBQYXRoOjphcHBseShjb25zdCBQYXRoQXBwbGllckZ1bmN0aW9uJiBm
dW5jdGlvbikgY29uc3QKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IENHUGF0aEFwcGx5KG1fcGF0aCwgKHZvaWQqKSZmdW5jdGlvbiwgQ0dQYXRoQXBwbGllclRvUGF0
aEFwcGxpZXIpOworICAgIENHUGF0aEFwcGx5KG1fcGF0aC5nZXQoKSwgKHZvaWQqKSZmdW5jdGlv
biwgQ0dQYXRoQXBwbGllclRvUGF0aEFwcGxpZXIpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KaW5kZXggZGZiMDgw
ZDAwZDZiYjM0NmI4MTUxNDYwN2U1ZGRkZWNiMTIxYjM4OS4uMTRhNWEzNjJiOGIxNGRlZmEzMzQ5
MWJkMWMzNDA0OTRkZjYyMjAxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpAQCAtNjQyLDkgKzY0Miw5IEBAIFBhdGggRm9u
dDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAgICAgICAgIENHUGF0
aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwgbnVsbHB0ciwgcmVzdWx0LmdldCgpKTsKICAgICAgICAg
YXV0byB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKHN5bnRo
ZXRpY0JvbGRPZmZzZXQsIDApOwogICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0KCks
ICZ0cmFuc2xhdGlvbiwgcmVzdWx0LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIG5ld1BhdGg7Cisg
ICAgICAgIHJldHVybiB7IFdURk1vdmUobmV3UGF0aCkgfTsKICAgICB9Ci0gICAgcmV0dXJuIGFk
b3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHkocmVzdWx0LmdldCgpKSk7CisgICAgcmV0dXJu
IHsgYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlQ29weShyZXN1bHQuZ2V0KCkpKSB9OwogfQog
CiBib29sIEZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIs
IE9wdGlvbmFsPFVDaGFyMzI+IHZhcmlhdGlvbikgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392322</attachid>
            <date>2020-03-03 13:42:32 -0800</date>
            <delta_ts>2020-03-03 15:33:51 -0800</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-208492-20200303134231.patch</filename>
            <type>text/plain</type>
            <size>10057</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3Nzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmExYzRlMGM3NGE5MjFk
NTA3NmU0NDZmOWM0OGUxNmFjMTBiNThlMS4uMmZkNmU5NDJhYzIxNmI5YTExYTAwYzBkMzNiOTQy
MmNkZWQ1OTlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIwLTAzLTAzICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFBhdGg6Om1fcGF0
aCBzaG91bGQgYmUgYSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gb24gcGxhdGZvcm1zIHRo
YXQgdXNlIENvcmVHcmFwaGljcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA4NDkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgor
CisgICAgICAgIE1ha2UgbV9wYXRoIGEgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+IG9uIHBs
YXRmb3JtcyB0aGF0IHVzZSBDb3JlR3JhcGhpY3MuIFRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBh
bGwgdGhlCisgICAgICAgIG1hbnVhbCByZXRhaW5pbmcgYW5kIHJlbGVhc2luZyBvbiBtX3BhdGgg
dGhhdCBjdXJyZW50bHkgcmVzaWRlcyBpbiBQYXRoQ0cuY3BwLiBTZWUgYmVsb3cgZm9yIG1vcmUg
ZGV0YWlscy4KKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbToKKworICAgICAgICBB
ZGQgYGFkb3B0Q0ZgIHdoZW4gY29uc3RydWN0aW5nIHRoZSBXZWJDb3JlOjpQYXRoIGZyb20gdGhl
IG5ld2x5IGNyZWF0ZWQgQ0dNdXRhYmxlUGF0aFJlZi4KKworICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyQ29jb2E6OnNoYXBlUGF0aCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgor
CisgICAgICAgIEluc3RlYWQgb2YgdGFraW5nIGEgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+
IGFuZCBsZWFraW5nIHRoZSBwb2ludGVyLCBjaGFuZ2UgdGhpcyB0byB0YWtlIGFuIHJ2YWx1ZSBy
ZWZlcmVuY2UKKyAgICAgICAgYW5kIGBXVEZNb3ZlYCBpdCBkaXJlY3RseSBpbnRvIG1fcGF0aC4K
KworICAgICAgICAoV2ViQ29yZTo6UGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhdGg6OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6
OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpib3VuZGluZ1JlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6ZmFzdEJvdW5kaW5nUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjphZGRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6Y3VycmVudFBvaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGg6OmFwcGx5IGNvbnN0KToKKworICAgICAgICBDaGFuZ2UgYG1fcGF0aGAgdG8gYG1fcGF0aC5n
ZXQoKWAgYW5kIGFkZCBgYWRvcHRDRmBzLCBhcyBuZWVkZWQuIFJlbW92ZSBleHBsaWNpdCBjYWxs
cyB0byBDRlJlbGVhc2UgYW5kCisgICAgICAgIENGUmV0YWluLgorCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjp+UGF0aCk6IERlbGV0ZWQuCisKKyAgICAgICAgSnVzdCB1c2UgdGhlIGRlZmF1bHQg
ZGVzdHJ1Y3Rvciwgbm93IHRoYXQgdGhlcmUncyBubyBsb25nZXIgYSBuZWVkIHRvIGV4cGxpY2l0
bHkgY2FsbCBDRlJlbGVhc2Ugb24gbV9wYXRoLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1Q
YXRoRm9yR2x5cGggY29uc3QpOgorCisgICAgICAgIFNpbmNlIHRoZSBQYXRoIGNvbnN0cnVjdG9y
IG5vdyB0YWtlcyBgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+JiZgLCB1c2UgbW92ZSBzZW1h
bnRpY3Mgd2hlbiBjcmVhdGluZyB0aGUgbmV3CisgICAgICAgIFdlYkNvcmU6OlBhdGggZnJvbSB0
aGUgUmV0YWluUHRyLgorCiAyMDIwLTAzLTAzICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZHJlc3MgcG9zdC1jb21taXQgZmVlZGJhY2sgYWZ0ZXIg
cjI1NzczMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmluZGV4IGNjZDhj
OTMwZmFiZWIyNzkwMjNiYTM4MzhlM2I4ZGRmMWM0NDFlMzMuLmNkNWYxN2MzN2FiMGVmOWRiMzJi
OTI3MDNhZTUwZGNhNGYwYWU2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
YXRoLmgKQEAgLTExNCw3ICsxMTQsNyBAQCBjbGFzcyBQYXRoIHsKIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBQYXRoKCk7CiAjaWYgVVNFKENHKQotICAgIFBhdGgoUmV0YWluUHRyPENHTXV0
YWJsZVBhdGhSZWY+KTsKKyAgICBQYXRoKFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiYmKTsK
ICNlbmRpZgogICAgIFdFQkNPUkVfRVhQT1JUIH5QYXRoKCk7CiAKQEAgLTE3NCw2ICsxNzQsOCBA
QCBwdWJsaWM6CiAgICAgLy8gbWVhbmluZyBQYXRoOjpwbGF0Zm9ybVBhdGgoKSBjYW4gcmV0dXJu
IG51bGwuCiAjaWYgVVNFKERJUkVDVDJEKQogICAgIEZsb2F0UmVjdCBmYXN0Qm91bmRpbmdSZWN0
Rm9yU3Ryb2tlKGNvbnN0IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJikgY29uc3Q7CisjZW5kaWYK
KyNpZiBVU0UoRElSRUNUMkQpIHx8IFVTRShDRykKICAgICBQbGF0Zm9ybVBhdGhQdHIgcGxhdGZv
cm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9CiAjZWxzZQogICAgIFBsYXRm
b3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KQEAgLTIy
Myw4ICsyMjUsMTAgQEAgcHJpdmF0ZToKICAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBt
X3BhdGg7CiAgICAgbXV0YWJsZSBDT01QdHI8SUQyRDFHZW9tZXRyeVNpbms+IG1fYWN0aXZlUGF0
aDsKICAgICBtdXRhYmxlIGJvb2wgbV9maWd1cmVJc09wZW5lZCB7IGZhbHNlIH07CisjZWxpZiBV
U0UoQ0cpCisgICAgbXV0YWJsZSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gbV9wYXRoOwog
I2Vsc2UKLSAgICBtdXRhYmxlIFBsYXRmb3JtUGF0aFB0ciBtX3BhdGggeyBudWxscHRyIH07Cisg
ICAgUGxhdGZvcm1QYXRoUHRyIG1fcGF0aCB7IG51bGxwdHIgfTsKICNlbmRpZgogCiAjaWYgVVNF
KENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbQppbmRleCBhYzk3YWFmYWM4ZWI2
MWZkZWQyNmU5ZDk1Mzg3MWUzNjY0ZTZkOWI1Li4xYWZkNDg4YTM3MzgwODFkODM2MWMyNGViNTUw
YzU1ZDhlMmE0OTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbQpAQCAtOTg5
LDcgKzk4OSw3IEBAIFBhdGggUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNoYXBlUGF0aCgpIGNvbnN0
CiAgICAgQVNTRVJUKG1fbGF5ZXJUeXBlID09IExheWVyVHlwZVNoYXBlTGF5ZXIpOwogCiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgcmV0dXJuIFBhdGgoQ0dQYXRoQ3JlYXRl
TXV0YWJsZUNvcHkoWyhDQVNoYXBlTGF5ZXIgKiltX2xheWVyIHBhdGhdKSk7CisgICAgcmV0dXJu
IHsgYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlQ29weShbKENBU2hhcGVMYXllciAqKW1fbGF5
ZXIgcGF0aF0pKSB9OwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKaW5kZXggOWEwZDkz
NGVjZjlmNzJmOTNlNTNmOTA0ZTgxYzQzZmU5NzQwNDVkMy4uOGUzZGQxNjgxNzhjODRkM2ZiZDI0
OTEyZTMxN2E2OTE4Nzc5ZmI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0aENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCkBAIC04MiwzMiArODIsMjQgQEAgUGF0aCBQYXRoOjpwb2x5Z29u
UGF0aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBwb2ludHMpCiAgICAgcmV0
dXJuIHBhdGg7CiB9CiAKLVBhdGg6OlBhdGgoKQotICAgIDogbV9wYXRoKG51bGxwdHIpCitQYXRo
OjpQYXRoKFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiYmIHBhdGgpCisgICAgOiBtX3BhdGgo
V1RGTW92ZShwYXRoKSkKIHsKIH0KIAotUGF0aDo6UGF0aChSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0
aFJlZj4gcCkKLSAgICA6IG1fcGF0aChwLmxlYWtSZWYoKSkKLXsKLX0KLQotUGF0aDo6flBhdGgo
KQotewotICAgIGlmIChtX3BhdGgpCi0gICAgICAgIENGUmVsZWFzZShtX3BhdGgpOwotfQorUGF0
aDo6UGF0aCgpID0gZGVmYXVsdDsKK1BhdGg6On5QYXRoKCkgPSBkZWZhdWx0OwogCiBQbGF0Zm9y
bVBhdGhQdHIgUGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoKCkKIHsKICAgICBpZiAoIW1fcGF0aCkK
LSAgICAgICAgbV9wYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOworICAgICAgICBtX3BhdGgg
PSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CiAgICAgZWxzZSBpZiAobV9jb3B5UGF0
aEJlZm9yZU11dGF0aW9uKSB7Ci0gICAgICAgIGlmIChDRkdldFJldGFpbkNvdW50KG1fcGF0aCkg
PiAxKQotICAgICAgICAgICAgQ0ZSZWxlYXNlKHN0ZDo6ZXhjaGFuZ2UobV9wYXRoLCBDR1BhdGhD
cmVhdGVNdXRhYmxlQ29weShtX3BhdGgpKSk7CisgICAgICAgIGlmIChDRkdldFJldGFpbkNvdW50
KG1fcGF0aC5nZXQoKSkgPiAxKQorICAgICAgICAgICAgbV9wYXRoID0gYWRvcHRDRihDR1BhdGhD
cmVhdGVNdXRhYmxlQ29weShtX3BhdGguZ2V0KCkpKTsKICAgICAgICAgbV9jb3B5UGF0aEJlZm9y
ZU11dGF0aW9uID0gZmFsc2U7CiAgICAgfQotICAgIHJldHVybiBtX3BhdGg7CisgICAgcmV0dXJu
IG1fcGF0aC5nZXQoKTsKIH0KIAogUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKQEAgLTEx
Niw3ICsxMDgsNiBAQCBQYXRoOjpQYXRoKGNvbnN0IFBhdGgmIG90aGVyKQogICAgIGlmIChtX3Bh
dGgpIHsKICAgICAgICAgbV9jb3B5UGF0aEJlZm9yZU11dGF0aW9uID0gdHJ1ZTsKICAgICAgICAg
b3RoZXIubV9jb3B5UGF0aEJlZm9yZU11dGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgQ0ZSZXRhaW4o
bV9wYXRoKTsKICAgICB9CiB9CiAKQEAgLTE4OSw3ICsxODAsNyBAQCBib29sIFBhdGg6OmNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQgJnBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDR1BhdGhDb250YWluc1BvaW50IHJldHVybnMgZmFs
c2UgZm9yIG5vbi1jbG9zZWQgcGF0aHMsIGFzIGEgd29yay1hcm91bmQsIHdlIGNvcHkgYW5kIGNs
b3NlIHRoZSBwYXRoIGZpcnN0LiAgUmFkYXIgNDc1ODk5OCBhc2tzIGZvciBhIGJldHRlciBDRyBB
UEkgdG8gdXNlCi0gICAgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+IHBhdGggPSBhZG9wdENG
KGNvcHlDR1BhdGhDbG9zaW5nU3VicGF0aHMobV9wYXRoKSk7CisgICAgYXV0byBwYXRoID0gYWRv
cHRDRihjb3B5Q0dQYXRoQ2xvc2luZ1N1YnBhdGhzKG1fcGF0aC5nZXQoKSkpOwogICAgIGJvb2wg
cmV0ID0gQ0dQYXRoQ29udGFpbnNQb2ludChwYXRoLmdldCgpLCAwLCBwb2ludCwgcnVsZSA9PSBX
aW5kUnVsZTo6RXZlbk9kZCA/IHRydWUgOiBmYWxzZSk7CiAgICAgcmV0dXJuIHJldDsKIH0KQEAg
LTIyNiwxMyArMjE3LDEyIEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtQ0cgPSB0
cmFuc2Zvcm07CiAjaWYgUExBVEZPUk0oV0lOKQotICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9
IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLSAgICBDR1BhdGhBZGRQYXRoKHBhdGgsICZ0cmFuc2Zv
cm1DRywgbV9wYXRoKTsKKyAgICBhdXRvIHBhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFi
bGUoKSk7CisgICAgQ0dQYXRoQWRkUGF0aChwYXRoLCAmdHJhbnNmb3JtQ0csIG1fcGF0aC5nZXQo
KSk7CiAjZWxzZQotICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFi
bGVDb3B5QnlUcmFuc2Zvcm1pbmdQYXRoKG1fcGF0aCwgJnRyYW5zZm9ybUNHKTsKKyAgICBhdXRv
IHBhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5QnlUcmFuc2Zvcm1pbmdQYXRo
KG1fcGF0aC5nZXQoKSwgJnRyYW5zZm9ybUNHKSk7CiAjZW5kaWYKLSAgICBDRlJlbGVhc2UobV9w
YXRoKTsKLSAgICBtX3BhdGggPSBwYXRoOworICAgIG1fcGF0aCA9IFdURk1vdmUocGF0aCk7CiAg
ICAgbV9jb3B5UGF0aEJlZm9yZU11dGF0aW9uID0gZmFsc2U7CiB9CiAKQEAgLTI0Myw3ICsyMzMs
NyBAQCBGbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKIAogICAgIC8vIENHUGF0
aEdldEJvdW5kaW5nQm94IGluY2x1ZGVzIHRoZSBwYXRoJ3MgY29udHJvbCBwb2ludHMsIENHUGF0
aEdldFBhdGhCb3VuZGluZ0JveCBkb2VzIG5vdC4KIAotICAgIENHUmVjdCBib3VuZCA9IENHUGF0
aEdldFBhdGhCb3VuZGluZ0JveChtX3BhdGgpOworICAgIENHUmVjdCBib3VuZCA9IENHUGF0aEdl
dFBhdGhCb3VuZGluZ0JveChtX3BhdGguZ2V0KCkpOwogICAgIHJldHVybiBDR1JlY3RJc051bGwo
Ym91bmQpID8gQ0dSZWN0WmVybyA6IGJvdW5kOwogfQogCkBAIC0yNTEsNyArMjQxLDcgQEAgRmxv
YXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3QoKSBjb25zdAogewogICAgIGlmIChpc051bGwo
KSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87Ci0gICAgQ0dSZWN0IGJvdW5kID0gQ0dQYXRo
R2V0Qm91bmRpbmdCb3gobV9wYXRoKTsKKyAgICBDR1JlY3QgYm91bmQgPSBDR1BhdGhHZXRCb3Vu
ZGluZ0JveChtX3BhdGguZ2V0KCkpOwogICAgIHJldHVybiBDR1JlY3RJc051bGwoYm91bmQpID8g
Q0dSZWN0WmVybyA6IGJvdW5kOwogfQogCkBAIC00MDQsOSArMzk0LDggQEAgdm9pZCBQYXRoOjph
ZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQogICAgICAgICBDR1BhdGhBZGRQYXRoKGVuc3VyZVBsYXRmb3JtUGF0aCgpLCAmdHJhbnNmb3Jt
Q0csIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIENH
UGF0aFJlZiBwYXRoQ29weSA9IENHUGF0aENyZWF0ZUNvcHkocGF0aC5wbGF0Zm9ybVBhdGgoKSk7
Ci0gICAgQ0dQYXRoQWRkUGF0aChlbnN1cmVQbGF0Zm9ybVBhdGgoKSwgJnRyYW5zZm9ybUNHLCBw
YXRoQ29weSk7Ci0gICAgQ0ZSZWxlYXNlKHBhdGhDb3B5KTsKKyAgICBhdXRvIHBhdGhDb3B5ID0g
YWRvcHRDRihDR1BhdGhDcmVhdGVDb3B5KHBhdGgucGxhdGZvcm1QYXRoKCkpKTsKKyAgICBDR1Bh
dGhBZGRQYXRoKGVuc3VyZVBsYXRmb3JtUGF0aCgpLCAmdHJhbnNmb3JtQ0csIHBhdGhDb3B5Lmdl
dCgpKTsKIH0KIAogdm9pZCBQYXRoOjpjbGVhcigpCkBAIC00MTQsMTQgKzQwMywxMyBAQCB2b2lk
IFBhdGg6OmNsZWFyKCkKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IENGUmVsZWFzZShtX3BhdGgpOwotICAgIG1fcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsK
KyAgICBtX3BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CiAgICAgbV9jb3B5
UGF0aEJlZm9yZU11dGF0aW9uID0gZmFsc2U7CiB9CiAKIGJvb2wgUGF0aDo6aXNFbXB0eSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGlzTnVsbCgpIHx8IENHUGF0aElzRW1wdHkobV9wYXRoKTsKKyAg
ICByZXR1cm4gaXNOdWxsKCkgfHwgQ0dQYXRoSXNFbXB0eShtX3BhdGguZ2V0KCkpOwogfQogCiBi
b29sIFBhdGg6Omhhc0N1cnJlbnRQb2ludCgpIGNvbnN0CkBAIC00MzMsNyArNDIxLDcgQEAgRmxv
YXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gQ0dQYXRoR2V0Q3VycmVu
dFBvaW50KG1fcGF0aCk7CisgICAgcmV0dXJuIENHUGF0aEdldEN1cnJlbnRQb2ludChtX3BhdGgu
Z2V0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBDR1BhdGhBcHBsaWVyVG9QYXRoQXBwbGllcih2b2lk
KiBpbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50KiBlbGVtZW50KQpAQCAtNDY3LDcgKzQ1NSw3IEBA
IHZvaWQgUGF0aDo6YXBwbHkoY29uc3QgUGF0aEFwcGxpZXJGdW5jdGlvbiYgZnVuY3Rpb24pIGNv
bnN0CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDR1BhdGhBcHBs
eShtX3BhdGgsICh2b2lkKikmZnVuY3Rpb24sIENHUGF0aEFwcGxpZXJUb1BhdGhBcHBsaWVyKTsK
KyAgICBDR1BhdGhBcHBseShtX3BhdGguZ2V0KCksICh2b2lkKikmZnVuY3Rpb24sIENHUGF0aEFw
cGxpZXJUb1BhdGhBcHBsaWVyKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCmluZGV4IGRmYjA4MGQwMGQ2YmIzNDZi
ODE1MTQ2MDdlNWRkZGVjYjEyMWIzODkuLjE0YTVhMzYyYjhiMTRkZWZhMzM0OTFiZDFjMzQwNDk0
ZGY2MjIwMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q29jb2EubW0KQEAgLTY0Miw5ICs2NDIsOSBAQCBQYXRoIEZvbnQ6OnBsYXRmb3Jt
UGF0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogICAgICAgICBDR1BhdGhBZGRQYXRoKG5l
d1BhdGguZ2V0KCksIG51bGxwdHIsIHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIGF1dG8gdHJhbnNs
YXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFuc2xhdGlvbihzeW50aGV0aWNCb2xkT2Zm
c2V0LCAwKTsKICAgICAgICAgQ0dQYXRoQWRkUGF0aChuZXdQYXRoLmdldCgpLCAmdHJhbnNsYXRp
b24sIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBuZXdQYXRoOworICAgICAgICByZXR1
cm4geyBXVEZNb3ZlKG5ld1BhdGgpIH07CiAgICAgfQotICAgIHJldHVybiBhZG9wdENGKENHUGF0
aENyZWF0ZU11dGFibGVDb3B5KHJlc3VsdC5nZXQoKSkpOworICAgIHJldHVybiB7IGFkb3B0Q0Yo
Q0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHkocmVzdWx0LmdldCgpKSkgfTsKIH0KIAogYm9vbCBGb250
OjpwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50KFVDaGFyMzIgY2hhcmFjdGVyLCBPcHRpb25hbDxV
Q2hhcjMyPiB2YXJpYXRpb24pIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392340</attachid>
            <date>2020-03-03 15:33:53 -0800</date>
            <delta_ts>2020-03-03 19:49:54 -0800</delta_ts>
            <desc>Address Said&apos;s comments + fix Win build</desc>
            <filename>bug-208492-20200303153352.patch</filename>
            <type>text/plain</type>
            <size>10473</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3Nzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmExYzRlMGM3NGE5MjFk
NTA3NmU0NDZmOWM0OGUxNmFjMTBiNThlMS4uMjU5NmZlMjNlZDQ2OWM1NmY1ZWNkMjA1MTk2ZWRk
N2U3MzI3ODcxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIwLTAzLTAzICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFBhdGg6Om1fcGF0
aCBzaG91bGQgYmUgYSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gb24gcGxhdGZvcm1zIHRo
YXQgdXNlIENvcmVHcmFwaGljcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA4NDkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyIGFu
ZCBTYWlkIEFib3UtSGFsbGF3YS4KKworICAgICAgICBNYWtlIG1fcGF0aCBhIFJldGFpblB0cjxD
R011dGFibGVQYXRoUmVmPiBvbiBwbGF0Zm9ybXMgdGhhdCB1c2UgQ29yZUdyYXBoaWNzLiBUaGlz
IGFsbG93cyB1cyB0byByZW1vdmUgYWxsIHRoZQorICAgICAgICBtYW51YWwgcmV0YWluaW5nIGFu
ZCByZWxlYXNpbmcgb24gbV9wYXRoIHRoYXQgY3VycmVudGx5IHJlc2lkZXMgaW4gUGF0aENHLmNw
cC4gU2VlIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIFRoZXJlIHNob3VsZCBiZSBu
byBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW06CisKKyAgICAgICAgQWRkIGBhZG9wdENGYCB3aGVuIGNvbnN0cnVjdGluZyB0aGUg
V2ViQ29yZTo6UGF0aCBmcm9tIHRoZSBuZXdseSBjcmVhdGVkIENHTXV0YWJsZVBhdGhSZWYuCisK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNvY29hOjpzaGFwZVBhdGggY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpQYXRoKToKKworICAgICAgICBJbnN0ZWFkIG9mIHRha2luZyBhIFJldGFp
blB0cjxDR011dGFibGVQYXRoUmVmPiBhbmQgbGVha2luZyB0aGUgcG9pbnRlciwgY2hhbmdlIHRo
aXMgdG8gdGFrZSBhbiBydmFsdWUgcmVmZXJlbmNlCisgICAgICAgIGFuZCBgV1RGTW92ZWAgaXQg
ZGlyZWN0bHkgaW50byBtX3BhdGguCisKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmVuc3VyZVBs
YXRmb3JtUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjb250YWlucyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6Ym91bmRpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmZhc3RCb3Vu
ZGluZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjppc0Vt
cHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmN1cnJlbnRQb2ludCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphcHBseSBjb25zdCk6CisKKyAgICAgICAgQ2hhbmdl
IGBtX3BhdGhgIHRvIGBtX3BhdGguZ2V0KClgIGFuZCBhZGQgYGFkb3B0Q0ZgcywgYXMgbmVlZGVk
LiBSZW1vdmUgZXhwbGljaXQgY2FsbHMgdG8gQ0ZSZWxlYXNlIGFuZAorICAgICAgICBDRlJldGFp
bi4KKworICAgICAgICAoV2ViQ29yZTo6UGF0aDo6flBhdGgpOiBEZWxldGVkLgorCisgICAgICAg
IEp1c3QgdXNlIHRoZSBkZWZhdWx0IGRlc3RydWN0b3IsIG5vdyB0aGF0IHRoZXJlJ3Mgbm8gbG9u
Z2VyIGEgbmVlZCB0byBleHBsaWNpdGx5IGNhbGwgQ0ZSZWxlYXNlIG9uIG1fcGF0aC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OnBsYXRmb3JtUGF0aEZvckdseXBoIGNvbnN0KToKKworICAgICAgICBTaW5j
ZSB0aGUgUGF0aCBjb25zdHJ1Y3RvciBub3cgdGFrZXMgYFJldGFpblB0cjxDR011dGFibGVQYXRo
UmVmPiYmYCwgdXNlIG1vdmUgc2VtYW50aWNzIHdoZW4gY3JlYXRpbmcgdGhlIG5ldworICAgICAg
ICBXZWJDb3JlOjpQYXRoIGZyb20gdGhlIFJldGFpblB0ci4KKwogMjAyMC0wMy0wMyAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGRyZXNzIHBvc3Qt
Y29tbWl0IGZlZWRiYWNrIGFmdGVyIHIyNTc3MzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGguaAppbmRleCBjY2Q4YzkzMGZhYmViMjc5MDIzYmEzODM4ZTNiOGRkZjFjNDQxZTMz
Li4zZTVkMWE2N2I0MDdlNzY1NDUxNzE1NTgzOGNlMGU1NmE2ZmY1NmJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCkBAIC03Niw2ICs3NiwxNCBAQCB0eXBlZGVmIHZv
aWQgUGxhdGZvcm1QYXRoOwogCiB0eXBlZGVmIFBsYXRmb3JtUGF0aCogUGxhdGZvcm1QYXRoUHRy
OwogCisjaWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgPSBSZXRhaW5Q
dHI8Q0dNdXRhYmxlUGF0aFJlZj47CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9y
bVBhdGhTdG9yYWdlVHlwZSA9IENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+OworI2Vsc2UKK3Vz
aW5nIFBsYXRmb3JtUGF0aFN0b3JhZ2VUeXBlID0gUGxhdGZvcm1QYXRoUHRyOworI2VuZGlmCisK
IG5hbWVzcGFjZSBXVEYgewogY2xhc3MgVGV4dFN0cmVhbTsKIH0KQEAgLTExNCw3ICsxMjIsNyBA
QCBjbGFzcyBQYXRoIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBQYXRoKCk7CiAjaWYg
VVNFKENHKQotICAgIFBhdGgoUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+KTsKKyAgICBQYXRo
KFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiYmKTsKICNlbmRpZgogICAgIFdFQkNPUkVfRVhQ
T1JUIH5QYXRoKCk7CiAKQEAgLTE3NSw2ICsxODMsOCBAQCBwdWJsaWM6CiAjaWYgVVNFKERJUkVD
VDJEKQogICAgIEZsb2F0UmVjdCBmYXN0Qm91bmRpbmdSZWN0Rm9yU3Ryb2tlKGNvbnN0IFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJikgY29uc3Q7CiAgICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3Jt
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsgfQorI2VsaWYgVVNFKENHKQorICAg
IFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0
KCk7IH0KICNlbHNlCiAgICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQogI2VuZGlmCkBAIC0yMTgsMTMgKzIyOCwxMiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3dhcChQYXRoJik7CiAjZW5kaWYKIAorICAgIG11dGFibGUgUGxhdGZvcm1QYXRo
U3RvcmFnZVR5cGUgbV9wYXRoOworCiAjaWYgVVNFKERJUkVDVDJEKQogICAgIFZlY3RvcjxJRDJE
MUdlb21ldHJ5Kj4gbV9nZW9tZXRyaWVzOwotICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+
IG1fcGF0aDsKICAgICBtdXRhYmxlIENPTVB0cjxJRDJEMUdlb21ldHJ5U2luaz4gbV9hY3RpdmVQ
YXRoOwogICAgIG11dGFibGUgYm9vbCBtX2ZpZ3VyZUlzT3BlbmVkIHsgZmFsc2UgfTsKLSNlbHNl
Ci0gICAgbXV0YWJsZSBQbGF0Zm9ybVBhdGhQdHIgbV9wYXRoIHsgbnVsbHB0ciB9OwogI2VuZGlm
CiAKICNpZiBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCmluZGV4IGFj
OTdhYWZhYzhlYjYxZmRlZDI2ZTlkOTUzODcxZTM2NjRlNmQ5YjUuLjFhZmQ0ODhhMzczODA4MWQ4
MzYxYzI0ZWI1NTBjNTVkOGUyYTQ5MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29h
Lm1tCkBAIC05ODksNyArOTg5LDcgQEAgUGF0aCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2hhcGVQ
YXRoKCkgY29uc3QKICAgICBBU1NFUlQobV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlU2hhcGVMYXll
cik7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICByZXR1cm4gUGF0aChD
R1BhdGhDcmVhdGVNdXRhYmxlQ29weShbKENBU2hhcGVMYXllciAqKW1fbGF5ZXIgcGF0aF0pKTsK
KyAgICByZXR1cm4geyBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5KFsoQ0FTaGFwZUxh
eWVyICopbV9sYXllciBwYXRoXSkpIH07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRo
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApp
bmRleCA5YTBkOTM0ZWNmOWY3MmY5M2U1M2Y5MDRlODFjNDNmZTk3NDA0NWQzLi5iMDFhZmY5NGRh
OTEzMWJiMmI1ZjM3OWQ3ZGM5MTlkZGE3YjJkZmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTgyLDMyICs4MiwyNCBAQCBQYXRoIFBh
dGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIHBvaW50
cykKICAgICByZXR1cm4gcGF0aDsKIH0KIAotUGF0aDo6UGF0aCgpCi0gICAgOiBtX3BhdGgobnVs
bHB0cikKK1BhdGg6OlBhdGgoUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+JiYgcGF0aCkKKyAg
ICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQogewogfQogCi1QYXRoOjpQYXRoKFJldGFpblB0cjxD
R011dGFibGVQYXRoUmVmPiBwKQotICAgIDogbV9wYXRoKHAubGVha1JlZigpKQotewotfQotCi1Q
YXRoOjp+UGF0aCgpCi17Ci0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgQ0ZSZWxlYXNlKG1fcGF0
aCk7Ci19CitQYXRoOjpQYXRoKCkgPSBkZWZhdWx0OworUGF0aDo6flBhdGgoKSA9IGRlZmF1bHQ7
CiAKIFBsYXRmb3JtUGF0aFB0ciBQYXRoOjplbnN1cmVQbGF0Zm9ybVBhdGgoKQogewogICAgIGlm
ICghbV9wYXRoKQotICAgICAgICBtX3BhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CisgICAg
ICAgIG1fcGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKICAgICBlbHNlIGlm
IChtX2NvcHlQYXRoQmVmb3JlTXV0YXRpb24pIHsKLSAgICAgICAgaWYgKENGR2V0UmV0YWluQ291
bnQobV9wYXRoKSA+IDEpCi0gICAgICAgICAgICBDRlJlbGVhc2Uoc3RkOjpleGNoYW5nZShtX3Bh
dGgsIENHUGF0aENyZWF0ZU11dGFibGVDb3B5KG1fcGF0aCkpKTsKKyAgICAgICAgaWYgKENGR2V0
UmV0YWluQ291bnQobV9wYXRoLmdldCgpKSA+IDEpCisgICAgICAgICAgICBtX3BhdGggPSBhZG9w
dENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5KG1fcGF0aC5nZXQoKSkpOwogICAgICAgICBtX2Nv
cHlQYXRoQmVmb3JlTXV0YXRpb24gPSBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIG1fcGF0aDsK
KyAgICByZXR1cm4gbV9wYXRoLmdldCgpOwogfQogCiBQYXRoOjpQYXRoKGNvbnN0IFBhdGgmIG90
aGVyKQpAQCAtMTE2LDcgKzEwOCw2IEBAIFBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCiAg
ICAgaWYgKG1fcGF0aCkgewogICAgICAgICBtX2NvcHlQYXRoQmVmb3JlTXV0YXRpb24gPSB0cnVl
OwogICAgICAgICBvdGhlci5tX2NvcHlQYXRoQmVmb3JlTXV0YXRpb24gPSB0cnVlOwotICAgICAg
ICBDRlJldGFpbihtX3BhdGgpOwogICAgIH0KIH0KIApAQCAtMTg5LDcgKzE4MCw3IEBAIGJvb2wg
UGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCAmcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNv
bnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENHUGF0aENvbnRhaW5zUG9pbnQg
cmV0dXJucyBmYWxzZSBmb3Igbm9uLWNsb3NlZCBwYXRocywgYXMgYSB3b3JrLWFyb3VuZCwgd2Ug
Y29weSBhbmQgY2xvc2UgdGhlIHBhdGggZmlyc3QuICBSYWRhciA0NzU4OTk4IGFza3MgZm9yIGEg
YmV0dGVyIENHIEFQSSB0byB1c2UKLSAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gcGF0
aCA9IGFkb3B0Q0YoY29weUNHUGF0aENsb3NpbmdTdWJwYXRocyhtX3BhdGgpKTsKKyAgICBhdXRv
IHBhdGggPSBhZG9wdENGKGNvcHlDR1BhdGhDbG9zaW5nU3VicGF0aHMobV9wYXRoLmdldCgpKSk7
CiAgICAgYm9vbCByZXQgPSBDR1BhdGhDb250YWluc1BvaW50KHBhdGguZ2V0KCksIDAsIHBvaW50
LCBydWxlID09IFdpbmRSdWxlOjpFdmVuT2RkID8gdHJ1ZSA6IGZhbHNlKTsKICAgICByZXR1cm4g
cmV0OwogfQpAQCAtMjI2LDEzICsyMTcsMTIgQEAgdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAKICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm1DRyA9IHRyYW5zZm9ybTsKICNpZiBQTEFURk9STShXSU4pCi0gICAgQ0dNdXRhYmxlUGF0
aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIENHUGF0aEFkZFBhdGgocGF0
aCwgJnRyYW5zZm9ybUNHLCBtX3BhdGgpOworICAgIGF1dG8gcGF0aCA9IGFkb3B0Q0YoQ0dQYXRo
Q3JlYXRlTXV0YWJsZSgpKTsKKyAgICBDR1BhdGhBZGRQYXRoKHBhdGguZ2V0KCksICZ0cmFuc2Zv
cm1DRywgbV9wYXRoLmdldCgpKTsKICNlbHNlCi0gICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0g
Q0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHlCeVRyYW5zZm9ybWluZ1BhdGgobV9wYXRoLCAmdHJhbnNm
b3JtQ0cpOworICAgIGF1dG8gcGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHlC
eVRyYW5zZm9ybWluZ1BhdGgobV9wYXRoLmdldCgpLCAmdHJhbnNmb3JtQ0cpKTsKICNlbmRpZgot
ICAgIENGUmVsZWFzZShtX3BhdGgpOwotICAgIG1fcGF0aCA9IHBhdGg7CisgICAgbV9wYXRoID0g
V1RGTW92ZShwYXRoKTsKICAgICBtX2NvcHlQYXRoQmVmb3JlTXV0YXRpb24gPSBmYWxzZTsKIH0K
IApAQCAtMjQzLDcgKzIzMyw3IEBAIEZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25z
dAogCiAgICAgLy8gQ0dQYXRoR2V0Qm91bmRpbmdCb3ggaW5jbHVkZXMgdGhlIHBhdGgncyBjb250
cm9sIHBvaW50cywgQ0dQYXRoR2V0UGF0aEJvdW5kaW5nQm94IGRvZXMgbm90LgogCi0gICAgQ0dS
ZWN0IGJvdW5kID0gQ0dQYXRoR2V0UGF0aEJvdW5kaW5nQm94KG1fcGF0aCk7CisgICAgQ0dSZWN0
IGJvdW5kID0gQ0dQYXRoR2V0UGF0aEJvdW5kaW5nQm94KG1fcGF0aC5nZXQoKSk7CiAgICAgcmV0
dXJuIENHUmVjdElzTnVsbChib3VuZCkgPyBDR1JlY3RaZXJvIDogYm91bmQ7CiB9CiAKQEAgLTI1
MSw3ICsyNDEsNyBAQCBGbG9hdFJlY3QgUGF0aDo6ZmFzdEJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7
CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLSAgICBDR1Jl
Y3QgYm91bmQgPSBDR1BhdGhHZXRCb3VuZGluZ0JveChtX3BhdGgpOworICAgIENHUmVjdCBib3Vu
ZCA9IENHUGF0aEdldEJvdW5kaW5nQm94KG1fcGF0aC5nZXQoKSk7CiAgICAgcmV0dXJuIENHUmVj
dElzTnVsbChib3VuZCkgPyBDR1JlY3RaZXJvIDogYm91bmQ7CiB9CiAKQEAgLTQwNCw5ICszOTQs
OCBAQCB2b2lkIFBhdGg6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgICAgIENHUGF0aEFkZFBhdGgoZW5zdXJlUGxhdGZvcm1Q
YXRoKCksICZ0cmFuc2Zvcm1DRywgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgQ0dQYXRoUmVmIHBhdGhDb3B5ID0gQ0dQYXRoQ3JlYXRlQ29weShwYXRo
LnBsYXRmb3JtUGF0aCgpKTsKLSAgICBDR1BhdGhBZGRQYXRoKGVuc3VyZVBsYXRmb3JtUGF0aCgp
LCAmdHJhbnNmb3JtQ0csIHBhdGhDb3B5KTsKLSAgICBDRlJlbGVhc2UocGF0aENvcHkpOworICAg
IGF1dG8gcGF0aENvcHkgPSBhZG9wdENGKENHUGF0aENyZWF0ZUNvcHkocGF0aC5wbGF0Zm9ybVBh
dGgoKSkpOworICAgIENHUGF0aEFkZFBhdGgoZW5zdXJlUGxhdGZvcm1QYXRoKCksICZ0cmFuc2Zv
cm1DRywgcGF0aENvcHkuZ2V0KCkpOwogfQogCiB2b2lkIFBhdGg6OmNsZWFyKCkKQEAgLTQxNCwx
NCArNDAzLDEzIEBAIHZvaWQgUGF0aDo6Y2xlYXIoKQogICAgIGlmIChpc051bGwoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQ0ZSZWxlYXNlKG1fcGF0aCk7Ci0gICAgbV9wYXRoID0gQ0dQYXRo
Q3JlYXRlTXV0YWJsZSgpOworICAgIG1fcGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJs
ZSgpKTsKICAgICBtX2NvcHlQYXRoQmVmb3JlTXV0YXRpb24gPSBmYWxzZTsKIH0KIAogYm9vbCBQ
YXRoOjppc0VtcHR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNOdWxsKCkgfHwgQ0dQYXRoSXNF
bXB0eShtX3BhdGgpOworICAgIHJldHVybiBpc051bGwoKSB8fCBDR1BhdGhJc0VtcHR5KG1fcGF0
aC5nZXQoKSk7CiB9CiAKIGJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKQEAgLTQz
Myw3ICs0MjEsNyBAQCBGbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0CiB7CiAg
ICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOwotICAgIHJldHVy
biBDR1BhdGhHZXRDdXJyZW50UG9pbnQobV9wYXRoKTsKKyAgICByZXR1cm4gQ0dQYXRoR2V0Q3Vy
cmVudFBvaW50KG1fcGF0aC5nZXQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIENHUGF0aEFwcGxpZXJU
b1BhdGhBcHBsaWVyKHZvaWQqIGluZm8sIGNvbnN0IENHUGF0aEVsZW1lbnQqIGVsZW1lbnQpCkBA
IC00NjcsNyArNDU1LDcgQEAgdm9pZCBQYXRoOjphcHBseShjb25zdCBQYXRoQXBwbGllckZ1bmN0
aW9uJiBmdW5jdGlvbikgY29uc3QKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIENHUGF0aEFwcGx5KG1fcGF0aCwgKHZvaWQqKSZmdW5jdGlvbiwgQ0dQYXRoQXBwbGll
clRvUGF0aEFwcGxpZXIpOworICAgIENHUGF0aEFwcGx5KG1fcGF0aC5nZXQoKSwgKHZvaWQqKSZm
dW5jdGlvbiwgQ0dQYXRoQXBwbGllclRvUGF0aEFwcGxpZXIpOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KaW5kZXgg
ZGZiMDgwZDAwZDZiYjM0NmI4MTUxNDYwN2U1ZGRkZWNiMTIxYjM4OS4uMTRhNWEzNjJiOGIxNGRl
ZmEzMzQ5MWJkMWMzNDA0OTRkZjYyMjAxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpAQCAtNjQyLDkgKzY0Miw5IEBAIFBh
dGggRm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAgICAgICAg
IENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwgbnVsbHB0ciwgcmVzdWx0LmdldCgpKTsKICAg
ICAgICAgYXV0byB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9u
KHN5bnRoZXRpY0JvbGRPZmZzZXQsIDApOwogICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGgu
Z2V0KCksICZ0cmFuc2xhdGlvbiwgcmVzdWx0LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIG5ld1Bh
dGg7CisgICAgICAgIHJldHVybiB7IFdURk1vdmUobmV3UGF0aCkgfTsKICAgICB9Ci0gICAgcmV0
dXJuIGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHkocmVzdWx0LmdldCgpKSk7CisgICAg
cmV0dXJuIHsgYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlQ29weShyZXN1bHQuZ2V0KCkpKSB9
OwogfQogCiBib29sIEZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIzMiBjaGFy
YWN0ZXIsIE9wdGlvbmFsPFVDaGFyMzI+IHZhcmlhdGlvbikgY29uc3QK
</data>

          </attachment>
      

    </bug>

</bugzilla>