<?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>171443</bug_id>
          
          <creation_ts>2017-04-28 12:15:51 -0700</creation_ts>
          <short_desc>AX: Improve performance of addChildren()/childrenChanged()</short_desc>
          <delta_ts>2017-04-29 11:55:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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 name="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>buildbot</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>n_wang</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1302703</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-04-28 12:15:51 -0700</bug_when>
    <thetext>When childrenChanged() being called on some element, we are resetting the entire tree. 
Need to reduce the amount of unnecessary work.

&lt;rdar://problem/31349636&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302712</commentid>
    <comment_count>1</comment_count>
      <attachid>308572</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-04-28 12:32:32 -0700</bug_when>
    <thetext>Created attachment 308572
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302881</commentid>
    <comment_count>2</comment_count>
      <attachid>308572</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-04-28 17:07:06 -0700</bug_when>
    <thetext>Comment on attachment 308572
patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        There&apos;s a lot of unnecessary work happening when childrenChanged() being called.

&quot;is&quot; being called

&gt; Source/WebCore/ChangeLog:15
&gt; +        2. In addChild() method we are calling accessibilityIsIgnored() on each child and that 

In the...

&gt; Source/WebCore/ChangeLog:19
&gt; +        3. Reduced the amount work of ARIA text controls updating its parents in childrenChanged() 

text controls &quot;performs when&quot; updating

&gt; Source/WebCore/ChangeLog:22
&gt; +        No new tests since this didn&apos;t change any functionality. 

I think we could add a test for this by getting a reference to an axObject, marking a subtree dirty, then verifying that reference (in the test) is still valid

in the old case, that element would have become invalid because it was thrown away and recreated. In the new case it should still be there even after the sub tree was cleared (likewise, we can probably get a reference to a dirty subtree object and ensure that it is indeed invalid after the update)

&gt; Source/WebCore/ChangeLog:38
&gt; +        (WebCore::AccessibilityObject::setNeedsToUpdateSubTree):

I suspect SubTree should be Subtree (pls check if there are other instances in WebKit code)

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:348
&gt; +    // Only clear the child&apos;s children when we know it&apos;s in the updating chain in order to avoid unnecessary works.

work.

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:351
&gt; +        // Pass m_subTreeDirty flag down to the child so that children cache get reset properly.

gets

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:376
&gt; +    // reset the child&apos;s m_isIgnoredFromParentData since we are done adding that child and its children.

Reset

&gt; Source/WebCore/accessibility/AccessibilityObject.h:1095
&gt; +    void setIsIgnoredFromParentData(AccessibilityIsIgnoredFromParentData data) { m_isIgnoredFromParentData = data; }

should this be AccessibilityIsIgnoredFromParentData&amp;

&gt; Source/WebCore/accessibility/AccessibilityObject.h:1096
&gt; +    void setIsIgnoredFromParentDataForChild(AccessibilityObject*);

const AccessibilityObject</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302891</commentid>
    <comment_count>3</comment_count>
      <attachid>308572</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-04-28 17:22:19 -0700</bug_when>
    <thetext>Comment on attachment 308572
patch

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

&gt;&gt; Source/WebCore/ChangeLog:22
&gt;&gt; +        No new tests since this didn&apos;t change any functionality. 
&gt; 
&gt; I think we could add a test for this by getting a reference to an axObject, marking a subtree dirty, then verifying that reference (in the test) is still valid
&gt; 
&gt; in the old case, that element would have become invalid because it was thrown away and recreated. In the new case it should still be there even after the sub tree was cleared (likewise, we can probably get a reference to a dirty subtree object and ensure that it is indeed invalid after the update)

I think in the old case, the element is still valid since its children list is being cleared instead of itself being thrown away. Here we just reduce the work that is traversing the non affected subtree and retrieving the element that supposed to be a child.

&gt;&gt; Source/WebCore/ChangeLog:38
&gt;&gt; +        (WebCore::AccessibilityObject::setNeedsToUpdateSubTree):
&gt; 
&gt; I suspect SubTree should be Subtree (pls check if there are other instances in WebKit code)

Right, it&apos;s Subtree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302900</commentid>
    <comment_count>4</comment_count>
      <attachid>308572</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-04-28 17:34:44 -0700</bug_when>
    <thetext>Comment on attachment 308572
patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:22
&gt;&gt;&gt; +        No new tests since this didn&apos;t change any functionality. 
&gt;&gt; 
&gt;&gt; I think we could add a test for this by getting a reference to an axObject, marking a subtree dirty, then verifying that reference (in the test) is still valid
&gt;&gt; 
&gt;&gt; in the old case, that element would have become invalid because it was thrown away and recreated. In the new case it should still be there even after the sub tree was cleared (likewise, we can probably get a reference to a dirty subtree object and ensure that it is indeed invalid after the update)
&gt; 
&gt; I think in the old case, the element is still valid since its children list is being cleared instead of itself being thrown away. Here we just reduce the work that is traversing the non affected subtree and retrieving the element that supposed to be a child.

What if we modify my comment instead of grabbing the parent we grab a sibling (or child of that sibling) child and verify that that is not thrown away</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302914</commentid>
    <comment_count>5</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-04-28 17:44:43 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #4)
&gt; Comment on attachment 308572 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=308572&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/ChangeLog:22
&gt; &gt;&gt;&gt; +        No new tests since this didn&apos;t change any functionality. 
&gt; &gt;&gt; 
&gt; &gt;&gt; I think we could add a test for this by getting a reference to an axObject, marking a subtree dirty, then verifying that reference (in the test) is still valid
&gt; &gt;&gt; 
&gt; &gt;&gt; in the old case, that element would have become invalid because it was thrown away and recreated. In the new case it should still be there even after the sub tree was cleared (likewise, we can probably get a reference to a dirty subtree object and ensure that it is indeed invalid after the update)
&gt; &gt; 
&gt; &gt; I think in the old case, the element is still valid since its children list is being cleared instead of itself being thrown away. Here we just reduce the work that is traversing the non affected subtree and retrieving the element that supposed to be a child.
&gt; 
&gt; What if we modify my comment instead of grabbing the parent we grab a
&gt; sibling (or child of that sibling) child and verify that that is not thrown
&gt; away
clearChildren() only empties the m_children list (not invalidating the child) but the sibling/sibling child should be still valid even in the old case. What I did to improve is that we don&apos;t need to empty the sibling&apos;s children list and don&apos;t need to dive into the sibling tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302932</commentid>
    <comment_count>6</comment_count>
      <attachid>308572</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-04-28 18:23:46 -0700</bug_when>
    <thetext>Comment on attachment 308572
patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.h:1096
&gt;&gt; +    void setIsIgnoredFromParentDataForChild(AccessibilityObject*);
&gt; 
&gt; const AccessibilityObject

We are actually modifying the child object here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302933</commentid>
    <comment_count>7</comment_count>
      <attachid>308639</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-04-28 18:24:17 -0700</bug_when>
    <thetext>Created attachment 308639
patch

updated from review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303026</commentid>
    <comment_count>8</comment_count>
      <attachid>308639</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-04-29 11:54:24 -0700</bug_when>
    <thetext>Comment on attachment 308639
patch

The failing tests are unrelated to this patch. Will commit manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303027</commentid>
    <comment_count>9</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-04-29 11:55:20 -0700</bug_when>
    <thetext>Committed r215975: &lt;http://trac.webkit.org/changeset/215975&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308572</attachid>
            <date>2017-04-28 12:32:32 -0700</date>
            <delta_ts>2017-04-28 18:24:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15391</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNTkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDE3LTA0LTI4ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcHJvdmUgcGVyZm9ybWFuY2Ug
b2YgYWRkQ2hpbGRyZW4oKS9jaGlsZHJlbkNoYW5nZWQoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUncyBhIGxvdCBvZiB1bm5lY2Vzc2FyeSB3
b3JrIGhhcHBlbmluZyB3aGVuIGNoaWxkcmVuQ2hhbmdlZCgpIGJlaW5nIGNhbGxlZC4KKyAgICAg
ICAgU29tZSBvZiB0aGUgaW1wcm92ZW1lbnRzIGhlcmU6CisgICAgICAgIDEuIFdoZW4gY2hpbGRy
ZW5DaGFuZ2VkKCkgaXMgYmVpbmcgY2FsbGVkIG9uIHNvbWUgZWxlbWVudCwgd2UgYXJlIG1hcmtp
bmcgaXRzIHBhcmVudAorICAgICAgICAgICBjaGFpbiBkaXJ0eS4gSG93ZXZlciwgaW4gdGhlIGFk
ZENoaWxkKCkgbWV0aG9kIHdlIGFyZSB0aGVuIGNsZWFyaW5nIGVhY2ggY2hpbGQgb2YKKyAgICAg
ICAgICAgdGhhdCAnZGlydHknIHBhcmVudCwgZXZlbnR1YWxseSBtYWtpbmcgdGhlIGVudGlyZSB0
cmVlIGRpcnR5LiAKKyAgICAgICAgICAgQWRkZWQgYSBtX3N1YlRyZWVEaXJ0eSBmbGFnIGFuZCB1
c2luZyB0aGUgbmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCkgY2hlY2sgdG8gbWFrZSBzdXJlCisgICAg
ICAgICAgIHdlIGFyZSBvbmx5IGNsZWFyaW5nIHRoZSByaWdodCBjaGFpbiB3aXRob3V0IHVwZGF0
aW5nIHRoZSB1bmNoYW5nZWQgc2libGluZ3MuCisgICAgICAgIDIuIEluIGFkZENoaWxkKCkgbWV0
aG9kIHdlIGFyZSBjYWxsaW5nIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBvbiBlYWNoIGNoaWxk
IGFuZCB0aGF0IAorICAgICAgICAgICBtaWdodCBsZWFkIHRvIGdvaW5nIHVwIHRoZSBwYXJlbnQg
Y2hhaW4gYWdhaW4gdG8gZ2V0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4gCisgICAgICAgICAgIFNp
bmNlIHdlIGFyZSBhbHJlYWR5IHRyYXZlcnNpbmcgdGhlIHRyZWUgZnJvbSB0b3AgdG8gYm90dG9t
IHRvIGFkZCBjaGlsZHJlbiwgYWRkZWQgYSAKKyAgICAgICAgICAgc3RydWN0IHRvIHN0b3JlIHRo
ZSBpbmZvcm1hdGlvbiBhbmQgcGFzcyBpdCB0byB0aGUgY2hpbGQgc28gdG8gYXZvaWQgdW5uZWNl
c3NhcnkgdHJhdmVyc2FsLgorICAgICAgICAzLiBSZWR1Y2VkIHRoZSBhbW91bnQgd29yayBvZiBB
UklBIHRleHQgY29udHJvbHMgdXBkYXRpbmcgaXRzIHBhcmVudHMgaW4gY2hpbGRyZW5DaGFuZ2Vk
KCkgCisgICAgICAgICAgIHNvIHRoYXQgd2UgZG9uJ3QgdXBkYXRlIGEgYmlnIHBvcnRpb24gb2Yg
dGhlIHRyZWUgd2hpbGUgdHlwaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGlz
IGRpZG4ndCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWxpdHkuIAorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aW5zZXJ0Q2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0Rlc2NlbmRhbnRPZkJh
cnJlblBhcmVudCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRlZmF1bHRPYmpl
Y3RJbmNsdXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0
SXNJZ25vcmVkRnJvbVBhcmVudERhdGFGb3JDaGlsZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkRnJvbVBhcmVudERhdGE6OkFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkRnJvbVBhcmVu
dERhdGE6OmlzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpz
ZXROZWVkc1RvVXBkYXRlU3ViVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpuZWVkc1RvVXBkYXRlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6c2V0SXNJZ25vcmVkRnJvbVBhcmVudERhdGEpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxk
cmVuKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFJlbmRl
ck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpu
ZWVkc1RvVXBkYXRlQ2hpbGRyZW4pOiBEZWxldGVkLgorCiAyMDE3LTA0LTI4ICBEZWFuIEphY2tz
b24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBMYWJlbCBNVExDb21tYW5k
UXVldWVzIHdpdGggYSBwcmVmaXggZm9yIGludGVybmFsIHRlbGVtZXRyeQpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5jcHAJKHJldmlzaW9uIDIxNTY2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4
NSw3IEBAIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Tm8KICAgICA6IEFj
Y2Vzc2liaWxpdHlPYmplY3QoKQogICAgICwgbV9hcmlhUm9sZShVbmtub3duUm9sZSkKICAgICAs
IG1fY2hpbGRyZW5EaXJ0eShmYWxzZSkKKyAgICAsIG1fc3ViVHJlZURpcnR5KGZhbHNlKQogICAg
ICwgbV9yb2xlRm9yTVNBQShVbmtub3duUm9sZSkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2lu
aXRpYWxpemVkKGZhbHNlKQpAQCAtMTI5LDEzICsxMzAsMTkgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6Y2hpbGRyZW5DaAogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybjsK
ICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbih0aGlzLCBkb2N1bWVudCgpLCBBWE9iamVjdENh
Y2hlOjpBWENoaWxkcmVuQ2hhbmdlZCk7CisgICAgCisgICAgLy8gU2hvdWxkIG1ha2UgdGhlIHN1
YiB0cmVlIGRpcnR5IHNvIHRoYXQgZXZlcnl0aGluZyBiZWxvdyB3aWxsIGJlIHVwZGF0ZWQgY29y
cmVjdGx5LgorICAgIHRoaXMtPnNldE5lZWRzVG9VcGRhdGVTdWJUcmVlKCk7CisgICAgYm9vbCBz
aG91bGRTdG9wVXBkYXRpbmdQYXJlbnQgPSBmYWxzZTsKIAogICAgIC8vIEdvIHVwIHRoZSBhY2Nl
c3NpYmlsaXR5IHBhcmVudCBjaGFpbiwgYnV0IG9ubHkgaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBl
eGlzdHMuIFRoaXMgbWV0aG9kIGlzCiAgICAgLy8gY2FsbGVkIGR1cmluZyByZW5kZXIgbGF5b3V0
cywgbWluaW1hbCB3b3JrIHNob3VsZCBiZSBkb25lLiAKICAgICAvLyBJZiBBWCBlbGVtZW50cyBh
cmUgY3JlYXRlZCBub3csIHRoZXkgY291bGQgaW50ZXJyb2dhdGUgdGhlIHJlbmRlciB0cmVlIHdo
aWxlIGl0J3MgaW4gYSBmdW5reSBzdGF0ZS4KICAgICAvLyBBdCB0aGUgc2FtZSB0aW1lLCBwcm9j
ZXNzIEFSSUEgbGl2ZSByZWdpb24gY2hhbmdlcy4KICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHBhcmVudCA9IHRoaXM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3RJ
ZkV4aXN0cygpKSB7Ci0gICAgICAgIHBhcmVudC0+c2V0TmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCk7
CisgICAgICAgIGlmICghc2hvdWxkU3RvcFVwZGF0aW5nUGFyZW50KQorICAgICAgICAgICAgcGFy
ZW50LT5zZXROZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKTsKKyAgICAgICAgCiAKICAgICAgICAgLy8g
VGhlc2Ugbm90aWZpY2F0aW9ucyBhbHdheXMgbmVlZCB0byBiZSBzZW50IGJlY2F1c2Ugc2NyZWVu
cmVhZGVycyBhcmUgcmVsaWFudCBvbiB0aGVtIHRvIHBlcmZvcm0uIAogICAgICAgICAvLyBJbiBv
dGhlciB3b3JkcywgdGhleSBuZWVkIHRvIGJlIHNlbnQgZXZlbiB3aGVuIHRoZSBzY3JlZW4gcmVh
ZGVyIGhhcyBub3QgYWNjZXNzZWQgdGhpcyBsaXZlIHJlZ2lvbiBzaW5jZSB0aGUgbGFzdCB1cGRh
dGUuCkBAIC0xNDgsOCArMTU1LDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNo
aWxkcmVuQ2gKICAgICAgICAgICAgIGNhY2hlLT5wb3N0TGl2ZVJlZ2lvbkNoYW5nZU5vdGlmaWNh
dGlvbihwYXJlbnQpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IGlzIGFu
IEFSSUEgdGV4dCBjb250cm9sLCBub3RpZnkgdGhlIEFUIG9mIGNoYW5nZXMuCi0gICAgICAgIGlm
IChwYXJlbnQtPmlzTm9uTmF0aXZlVGV4dENvbnRyb2woKSkKKyAgICAgICAgaWYgKHBhcmVudC0+
aXNOb25OYXRpdmVUZXh0Q29udHJvbCgpKSB7CiAgICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlm
aWNhdGlvbihwYXJlbnQsIHBhcmVudC0+ZG9jdW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1
ZUNoYW5nZWQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEbyBub3QgbGV0IHRoZSBw
YXJlbnQgdGhhdCdzIGFib3ZlIHRoZSBlZGl0YWJsZSBhbmNlc3RvciB1cGRhdGUgaXRzIGNoaWxk
cmVuCisgICAgICAgICAgICAvLyBzaW5jZSB3ZSBhbHJlYWR5IG5vdGlmeSB0aGUgQVQgb2YgY2hh
bmdlcy4KKyAgICAgICAgICAgIHNob3VsZFN0b3BVcGRhdGluZ1BhcmVudCA9IHRydWU7CisgICAg
ICAgIH0KICAgICB9CiB9CiAKQEAgLTMzMyw4ICszNDUsMjQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aW5zZXJ0Q2hpbAogICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgYXNraW5nIGZv
ciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4sIHRoZW4gZWl0aGVyIGl0J3MgdGhlIGZpcnN0IHRpbWUg
KGFuZCBjbGVhcmluZyBpcyBhIG5vLW9wKSwKICAgICAvLyBvciBpdHMgdmlzaWJpbGl0eSBoYXMg
Y2hhbmdlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGlzIGNoaWxkIG1heSBoYXZlIGEgc3RhbGUg
Y2hpbGQgY2FjaGVkLgogICAgIC8vIFRoaXMgY2FuIHByZXZlbnQgYXJpYS1oaWRkZW4gY2hhbmdl
cyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiBIZW5jZSwgd2hlbmV2ZXIgYSBwYXJlbnQgaXMgZ2V0
dGluZyBjaGlsZHJlbiwgZW5zdXJlIGRhdGEgaXMgbm90IHN0YWxlLgotICAgIGNoaWxkLT5jbGVh
ckNoaWxkcmVuKCk7CisgICAgLy8gT25seSBjbGVhciB0aGUgY2hpbGQncyBjaGlsZHJlbiB3aGVu
IHdlIGtub3cgaXQncyBpbiB0aGUgdXBkYXRpbmcgY2hhaW4gaW4gb3JkZXIgdG8gYXZvaWQgdW5u
ZWNlc3Nhcnkgd29ya3MuCisgICAgaWYgKGNoaWxkLT5uZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKSB8
fCBtX3N1YlRyZWVEaXJ0eSkgeworICAgICAgICBjaGlsZC0+Y2xlYXJDaGlsZHJlbigpOworICAg
ICAgICAvLyBQYXNzIG1fc3ViVHJlZURpcnR5IGZsYWcgZG93biB0byB0aGUgY2hpbGQgc28gdGhh
dCBjaGlsZHJlbiBjYWNoZSBnZXQgcmVzZXQgcHJvcGVybHkuCisgICAgICAgIGlmIChtX3N1YlRy
ZWVEaXJ0eSkKKyAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc1RvVXBkYXRlU3ViVHJlZSgpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aGUgZ3JhbmQgY2hpbGRy
ZW4gbWlnaHQgYmUgZGV0YWNoZWQgc28gdGhhdCB3ZSBuZWVkIHRvIHJlZ2VuZXJhdGUgdGhlCisg
ICAgICAgIC8vIGNoaWxkcmVuIGxpc3Qgb2YgdGhpcyBjaGlsZC4KKyAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBncmFuZENoaWxkIDogY2hpbGQtPmNoaWxkcmVuKGZhbHNlKSkgeworICAgICAgICAg
ICAgaWYgKGdyYW5kQ2hpbGQtPmlzRGV0YWNoZWRGcm9tUGFyZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBjaGlsZC0+Y2xlYXJDaGlsZHJlbigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogICAgIAorICAgIHNldElzSWdub3JlZEZyb21Q
YXJlbnREYXRhRm9yQ2hpbGQoY2hpbGQpOwogICAgIGlmIChjaGlsZC0+YWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gY2hpbGQtPmNoaWxk
cmVuKCk7CiAgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7CkBAIC0zNDQs
NiArMzcyLDkgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aW5zZXJ0Q2hpbAogICAg
ICAgICBBU1NFUlQoY2hpbGQtPnBhcmVudE9iamVjdCgpID09IHRoaXMpOwogICAgICAgICBtX2No
aWxkcmVuLmluc2VydChpbmRleCwgY2hpbGQpOwogICAgIH0KKyAgICAKKyAgICAvLyByZXNldCB0
aGUgY2hpbGQncyBtX2lzSWdub3JlZEZyb21QYXJlbnREYXRhIHNpbmNlIHdlIGFyZSBkb25lIGFk
ZGluZyB0aGF0IGNoaWxkIGFuZCBpdHMgY2hpbGRyZW4uCisgICAgY2hpbGQtPnNldElzSWdub3Jl
ZEZyb21QYXJlbnREYXRhKEFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSgpKTsK
IH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQoQWNjZXNzaWJpbGl0
eU9iamVjdCogY2hpbGQpCkBAIC0zNjgsNiArMzk5LDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6YWRkQ2hpbGRyZQogICAgIAogICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX25vZGUt
PmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAg
ICAgIGFkZENoaWxkKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoY2hpbGQpKTsKKyAgICAK
KyAgICBtX3N1YlRyZWVEaXJ0eSA9IGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdApAQCAtMTA1OSw2ICsxMDkyLDkgQEAgRWxl
bWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1vdXNlQgogCiBib29sIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc0Rlc2NlbmRhbnRPZkJhcnJlblBhcmVudCgpIGNvbnN0CiB7CisgICAg
aWYgKCFtX2lzSWdub3JlZEZyb21QYXJlbnREYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
bV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YS5pc0Rlc2NlbmRhbnRPZkJhcnJlblBhcmVudDsKKyAg
ICAKICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IHBhcmVudE9iamVjdCgp
OyBvYmplY3Q7IG9iamVjdCA9IG9iamVjdC0+cGFyZW50T2JqZWN0KCkpIHsKICAgICAgICAgaWYg
KCFvYmplY3QtPmNhbkhhdmVDaGlsZHJlbigpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5oCShyZXZpc2lvbiAyMTU2NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
Niw2ICsxNDYsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBtX2FyaWFS
b2xlOwogICAgIGJvb2wgbV9jaGlsZHJlbkRpcnR5OworICAgIGJvb2wgbV9zdWJUcmVlRGlydHk7
CiAgICAgbXV0YWJsZSBBY2Nlc3NpYmlsaXR5Um9sZSBtX3JvbGVGb3JNU0FBOwogI2lmbmRlZiBO
REVCVUcKICAgICBib29sIG1faW5pdGlhbGl6ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDIx
NTY2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eU9iamVjdAogICAgICwgbV9oYXZlQ2hpbGRyZW4oZmFsc2UpCiAgICAg
LCBtX3JvbGUoVW5rbm93blJvbGUpCiAgICAgLCBtX2xhc3RLbm93bklzSWdub3JlZFZhbHVlKERl
ZmF1bHRCZWhhdmlvcikKKyAgICAsIG1faXNJZ25vcmVkRnJvbVBhcmVudERhdGEoQWNjZXNzaWJp
bGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRhKCkpCiAjaWYgUExBVEZPUk0oR1RLKQogICAgICwg
bV93cmFwcGVyKG51bGxwdHIpCiAjZW5kaWYKQEAgLTMwMzIsMTMgKzMwMzMsMTUgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0RPTUhpZGRlbigpIAogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0
SW5jbHVzaW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRlZmF1bHRPYmplY3RJbmNsdXNpb24oKSBj
b25zdAogewotICAgIGlmIChpc0FSSUFIaWRkZW4oKSkKKyAgICBib29sIHVzZVBhcmVudERhdGEg
PSAhbV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YS5pc051bGwoKTsKKyAgICAKKyAgICBpZiAodXNl
UGFyZW50RGF0YSA/IG1faXNJZ25vcmVkRnJvbVBhcmVudERhdGEuaXNBUklBSGlkZGVuIDogaXNB
UklBSGlkZGVuKCkpCiAgICAgICAgIHJldHVybiBJZ25vcmVPYmplY3Q7CiAgICAgCiAgICAgaWYg
KGlnbm9yZWRGcm9tQVJJQU1vZGFsUHJlc2VuY2UoKSkKICAgICAgICAgcmV0dXJuIElnbm9yZU9i
amVjdDsKICAgICAKLSAgICBpZiAoaXNQcmVzZW50YXRpb25hbENoaWxkT2ZBcmlhUm9sZSgpKQor
ICAgIGlmICh1c2VQYXJlbnREYXRhID8gbV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YS5pc1ByZXNl
bnRhdGlvbmFsQ2hpbGRPZkFyaWFSb2xlIDogaXNQcmVzZW50YXRpb25hbENoaWxkT2ZBcmlhUm9s
ZSgpKQogICAgICAgICByZXR1cm4gSWdub3JlT2JqZWN0OwogICAgIAogICAgIHJldHVybiBhY2Nl
c3NpYmlsaXR5UGxhdGZvcm1JbmNsdWRlc09iamVjdCgpOwpAQCAtMzIzMCw0ICszMjMzLDIzIEBA
IHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYU93bnNFbGVtZW4KICAgICBhcmlhRWxlbWVu
dHNGcm9tQXR0cmlidXRlKGF4T2JqZWN0cywgYXJpYV9vd25zQXR0cik7CiB9CiAKK3ZvaWQgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6c2V0SXNJZ25vcmVkRnJvbVBhcmVudERhdGFGb3JDaGlsZChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBjaGlsZCkKK3sKKyAgICBpZiAoIWNoaWxkIHx8IGNoaWxkLT5wYXJl
bnRPYmplY3QoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQWNjZXNzaWJp
bGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRhIHJlc3VsdCA9IEFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWRGcm9tUGFyZW50RGF0YSh0aGlzKTsKKyAgICBpZiAoIW1faXNJZ25vcmVkRnJvbVBhcmVudERh
dGEuaXNOdWxsKCkpIHsKKyAgICAgICAgcmVzdWx0LmlzQVJJQUhpZGRlbiA9IG1faXNJZ25vcmVk
RnJvbVBhcmVudERhdGEuaXNBUklBSGlkZGVuIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGNoaWxkLT5nZXRBdHRyaWJ1dGUoYXJpYV9oaWRkZW5BdHRyKSwgInRydWUiKTsKKyAgICAg
ICAgcmVzdWx0LmlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUgPSBtX2lzSWdub3JlZEZy
b21QYXJlbnREYXRhLmlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUgfHwgYXJpYVJvbGVI
YXNQcmVzZW50YXRpb25hbENoaWxkcmVuKCk7CisgICAgICAgIHJlc3VsdC5pc0Rlc2NlbmRhbnRP
ZkJhcnJlblBhcmVudCA9IG1faXNJZ25vcmVkRnJvbVBhcmVudERhdGEuaXNEZXNjZW5kYW50T2ZC
YXJyZW5QYXJlbnQgfHwgIWNhbkhhdmVDaGlsZHJlbigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHJlc3VsdC5pc0FSSUFIaWRkZW4gPSBjaGlsZC0+aXNBUklBSGlkZGVuKCk7CisgICAgICAgIHJl
c3VsdC5pc1ByZXNlbnRhdGlvbmFsQ2hpbGRPZkFyaWFSb2xlID0gY2hpbGQtPmlzUHJlc2VudGF0
aW9uYWxDaGlsZE9mQXJpYVJvbGUoKTsKKyAgICAgICAgcmVzdWx0LmlzRGVzY2VuZGFudE9mQmFy
cmVuUGFyZW50ID0gY2hpbGQtPmlzRGVzY2VuZGFudE9mQmFycmVuUGFyZW50KCk7CisgICAgfQor
ICAgIAorICAgIGNoaWxkLT5zZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YShyZXN1bHQpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gMjE1NjY4KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4NCw2ICsyODQsMjQgQEAgc3RydWN0IEFjY2Vzc2liaWxpdHlUZXh0VW5k
ZXJFbGVtZW50TW9kZQogICAgICAgICAsIGlnbm9yZWRDaGlsZE5vZGUoaWdub3JlZCkKICAgICAg
ICAgeyB9CiB9OworCisvLyBVc2UgdGhpcyBzdHJ1Y3QgdG8gc3RvcmUgdGhlIGlzSWdub3JlZCBk
YXRhIHRoYXQgZGVwZW5kcyBvbiB0aGUgcGFyZW50cywgc28gdGhhdCBpbiBhZGRDaGlsZHJlbigp
CisvLyB3ZSBhdm9pZCBnb2luZyB1cCB0aGUgcGFyZW50IGNoYWluIGZvciBlYWNoIGVsZW1lbnQg
d2hpbGUgdHJhdmVyc2luZyB0aGUgdHJlZSB3aXRoIHVzZWZ1bCBpbmZvcm1hdGlvbiBhbHJlYWR5
Lgorc3RydWN0IEFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSB7CisgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogcGFyZW50OworICAgIGJvb2wgaXNBUklBSGlkZGVuOworICAgIGJv
b2wgaXNQcmVzZW50YXRpb25hbENoaWxkT2ZBcmlhUm9sZTsKKyAgICBib29sIGlzRGVzY2VuZGFu
dE9mQmFycmVuUGFyZW50OworICAgIAorICAgIEFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFy
ZW50RGF0YShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBudWxscHRyKQorICAgICAgICA6
IHBhcmVudChwYXJlbnQpCisgICAgICAgICwgaXNBUklBSGlkZGVuKGZhbHNlKQorICAgICAgICAs
IGlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUoZmFsc2UpCisgICAgICAgICwgaXNEZXNj
ZW5kYW50T2ZCYXJyZW5QYXJlbnQoZmFsc2UpCisgICAgICAgIHsgfQorICAgIAorICAgIGJvb2wg
aXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIXBhcmVudDsgfQorfTsKICAgICAKIGVudW0gQWNjZXNz
aWJpbGl0eU9yaWVudGF0aW9uIHsKICAgICBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25WZXJ0aWNh
bCwKQEAgLTgxNiw3ICs4MzQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc0NoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXZlQ2hpbGRyZW47IH0KICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Rv
VXBkYXRlQ2hpbGRyZW4oKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUb1VwZGF0ZVN1
YlRyZWUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDaGlsZHJlbigpOworICAgIHZpcnR1
YWwgYm9vbCBuZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hGcm9tUGFyZW50KCk7
CiAjZWxzZQpAQCAtMTA3MiwxMiArMTA5MiwxNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGlj
IGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIG1hdGNoZWRQYXJlbnQoY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCYsIGJvb2wgaW5jbHVkZVNlbGYsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChj
b25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0Jik+Jik7CiAgICAgCisgICAgdm9pZCBzZXRJc0lnbm9y
ZWRGcm9tUGFyZW50RGF0YShBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkRnJvbVBhcmVudERhdGEgZGF0
YSkgeyBtX2lzSWdub3JlZEZyb21QYXJlbnREYXRhID0gZGF0YTsgfQorICAgIHZvaWQgc2V0SXNJ
Z25vcmVkRnJvbVBhcmVudERhdGFGb3JDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CisgICAg
CiBwcm90ZWN0ZWQ6CiAgICAgQVhJRCBtX2lkOwogICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBtX2NoaWxkcmVuOwogICAgIG11dGFibGUgYm9vbCBtX2hhdmVDaGlsZHJlbjsKICAgICBB
Y2Nlc3NpYmlsaXR5Um9sZSBtX3JvbGU7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lv
biBtX2xhc3RLbm93bklzSWdub3JlZFZhbHVlOworICAgIEFjY2Vzc2liaWxpdHlJc0lnbm9yZWRG
cm9tUGFyZW50RGF0YSBtX2lzSWdub3JlZEZyb21QYXJlbnREYXRhOwogCiAgICAgdmlydHVhbCBi
b29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDIxNTY2OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5NzksNyArMjk3OSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YWRkSW1hZ2UKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dXBkYXRl
Q2hpbGRyZW5JZk5lY2Vzc2FyeSgpCiB7CiAgICAgaWYgKG5lZWRzVG9VcGRhdGVDaGlsZHJlbigp
KQotICAgICAgICBjbGVhckNoaWxkcmVuKCk7ICAgICAgICAKKyAgICAgICAgY2xlYXJDaGlsZHJl
bigpOwogICAgIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUNoaWxkcmVuSWZOZWNl
c3NhcnkoKTsKIH0KQEAgLTMyMDQsNiArMzIwNCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YWRkQ2hpbGQKICAgICBmb3IgKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBv
YmogPSBmaXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKQogICAgICAg
ICBhZGRDaGlsZChvYmouZ2V0KCkpOwogICAgIAorICAgIG1fc3ViVHJlZURpcnR5ID0gZmFsc2U7
CisgICAgCiAgICAgYWRkSGlkZGVuQ2hpbGRyZW4oKTsKICAgICBhZGRBdHRhY2htZW50Q2hpbGRy
ZW4oKTsKICAgICBhZGRJbWFnZU1hcENoaWxkcmVuKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAko
cmV2aXNpb24gMjE1NjY4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNiBAQCBw
dWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dChSZW5kZXJPYmplY3QqKTsKICAgICB2b2lkIHNldFJlbmRlck9iamVjdChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKSB7IG1fcmVuZGVyZXIgPSByZW5kZXJlcjsgfQotICAgIGJvb2wgbmVlZHNUb1Vw
ZGF0ZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbkRpcnR5OyB9CiAgICAgU2Ny
b2xsYWJsZUFyZWEqIGdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIApAQCAtMjI4LDYgKzIyNyw4IEBAIHByaXZhdGU6CiAgICAgRWxlbWVudCogcm9vdEVkaXRh
YmxlRWxlbWVudEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJikgY29uc3Q7CiAgICAgYm9vbCBu
b2RlSXNUZXh0Q29udHJvbChjb25zdCBOb2RlKikgY29uc3Q7CiAgICAgdm9pZCBzZXROZWVkc1Rv
VXBkYXRlQ2hpbGRyZW4oKSBvdmVycmlkZSB7IG1fY2hpbGRyZW5EaXJ0eSA9IHRydWU7IH0KKyAg
ICBib29sIG5lZWRzVG9VcGRhdGVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
Y2hpbGRyZW5EaXJ0eTsgfQorICAgIHZvaWQgc2V0TmVlZHNUb1VwZGF0ZVN1YlRyZWUoKSBvdmVy
cmlkZSB7IG1fc3ViVHJlZURpcnR5ID0gdHJ1ZTsgfQogICAgIFBhdGggZWxlbWVudFBhdGgoKSBj
b25zdCBvdmVycmlkZTsKICAgICAKICAgICBib29sIGlzVGFiSXRlbVNlbGVjdGVkKCkgY29uc3Q7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308639</attachid>
            <date>2017-04-28 18:24:17 -0700</date>
            <delta_ts>2017-04-29 11:54:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15495</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNTkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDE3LTA0LTI4ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcHJvdmUgcGVyZm9ybWFuY2Ug
b2YgYWRkQ2hpbGRyZW4oKS9jaGlsZHJlbkNoYW5nZWQoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUncyBhIGxvdCBvZiB1bm5lY2Vzc2FyeSB3
b3JrIGhhcHBlbmluZyB3aGVuIGNoaWxkcmVuQ2hhbmdlZCgpIGlzIGJlaW5nIGNhbGxlZC4KKyAg
ICAgICAgU29tZSBvZiB0aGUgaW1wcm92ZW1lbnRzIGhlcmU6CisgICAgICAgIDEuIFdoZW4gY2hp
bGRyZW5DaGFuZ2VkKCkgaXMgYmVpbmcgY2FsbGVkIG9uIHNvbWUgZWxlbWVudCwgd2UgYXJlIG1h
cmtpbmcgaXRzIHBhcmVudAorICAgICAgICAgICBjaGFpbiBkaXJ0eS4gSG93ZXZlciwgaW4gdGhl
IGFkZENoaWxkKCkgbWV0aG9kIHdlIGFyZSB0aGVuIGNsZWFyaW5nIGVhY2ggY2hpbGQgb2YKKyAg
ICAgICAgICAgdGhhdCAnZGlydHknIHBhcmVudCwgZXZlbnR1YWxseSBtYWtpbmcgdGhlIGVudGly
ZSB0cmVlIGRpcnR5LiAKKyAgICAgICAgICAgQWRkZWQgYSBtX3N1YlRyZWVEaXJ0eSBmbGFnIGFu
ZCB1c2luZyB0aGUgbmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCkgY2hlY2sgdG8gbWFrZSBzdXJlCisg
ICAgICAgICAgIHdlIGFyZSBvbmx5IGNsZWFyaW5nIHRoZSByaWdodCBjaGFpbiB3aXRob3V0IHVw
ZGF0aW5nIHRoZSB1bmNoYW5nZWQgc2libGluZ3MuCisgICAgICAgIDIuIEluIHRoZSBhZGRDaGls
ZCgpIG1ldGhvZCB3ZSBhcmUgY2FsbGluZyBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgb24gZWFj
aCBjaGlsZCBhbmQgdGhhdCAKKyAgICAgICAgICAgbWlnaHQgbGVhZCB0byBnb2luZyB1cCB0aGUg
cGFyZW50IGNoYWluIGFnYWluIHRvIGdldCBuZWNlc3NhcnkgaW5mb3JtYXRpb24uIAorICAgICAg
ICAgICBTaW5jZSB3ZSBhcmUgYWxyZWFkeSB0cmF2ZXJzaW5nIHRoZSB0cmVlIGZyb20gdG9wIHRv
IGJvdHRvbSB0byBhZGQgY2hpbGRyZW4sIGFkZGVkIGEgCisgICAgICAgICAgIHN0cnVjdCB0byBz
dG9yZSB0aGUgaW5mb3JtYXRpb24gYW5kIHBhc3MgaXQgdG8gdGhlIGNoaWxkIHNvIHRvIGF2b2lk
IHVubmVjZXNzYXJ5IHRyYXZlcnNhbC4KKyAgICAgICAgMy4gUmVkdWNlZCB0aGUgYW1vdW50IHdv
cmsgb2YgQVJJQSB0ZXh0IGNvbnRyb2xzIHBlcmZvcm0gd2hlbiB1cGRhdGluZyBpdHMgcGFyZW50
cyBpbiBjaGlsZHJlbkNoYW5nZWQoKSAKKyAgICAgICAgICAgc28gdGhhdCB3ZSBkb24ndCB1cGRh
dGUgYSBiaWcgcG9ydGlvbiBvZiB0aGUgdHJlZSB3aGlsZSB0eXBpbmcuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIHNpbmNlIHRoaXMgZGlkbid0IGNoYW5nZSBhbnkgZnVuY3Rpb25hbGl0eS4gCisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2hp
bGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjppbnNlcnRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmlzRGVzY2VuZGFudE9mQmFycmVuUGFyZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6ZGVmYXVsdE9iamVjdEluY2x1c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YUZvckNoaWxkKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YTo6QWNjZXNzaWJpbGl0
eUlzSWdub3JlZEZyb21QYXJlbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YTo6aXNOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnNldE5lZWRzVG9VcGRhdGVTdWJUcmVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Om5lZWRzVG9VcGRhdGVDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRJc0lnbm9yZWRGcm9tUGFyZW50
RGF0YSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnVwZGF0
ZUNoaWxkcmVuSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6c2V0UmVuZGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6Om5lZWRzVG9VcGRhdGVDaGlsZHJlbik6IERlbGV0ZWQuCisKIDIw
MTctMDQtMjggIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJH
UFVdIExhYmVsIE1UTENvbW1hbmRRdWV1ZXMgd2l0aCBhIHByZWZpeCBmb3IgaW50ZXJuYWwgdGVs
ZW1ldHJ5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMjE1NjY4KQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OkFjY2Vz
c2liaWxpdHlObwogICAgIDogQWNjZXNzaWJpbGl0eU9iamVjdCgpCiAgICAgLCBtX2FyaWFSb2xl
KFVua25vd25Sb2xlKQogICAgICwgbV9jaGlsZHJlbkRpcnR5KGZhbHNlKQorICAgICwgbV9zdWJ0
cmVlRGlydHkoZmFsc2UpCiAgICAgLCBtX3JvbGVGb3JNU0FBKFVua25vd25Sb2xlKQogI2lmbmRl
ZiBOREVCVUcKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCkBAIC0xMjksMTMgKzEzMCwxOSBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGlsZHJlbkNoCiAgICAgaWYgKCFjYWNo
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHRoaXMsIGRv
Y3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYQ2hpbGRyZW5DaGFuZ2VkKTsKKyAgICAKKyAgICAv
LyBTaG91bGQgbWFrZSB0aGUgc3ViIHRyZWUgZGlydHkgc28gdGhhdCBldmVyeXRoaW5nIGJlbG93
IHdpbGwgYmUgdXBkYXRlZCBjb3JyZWN0bHkuCisgICAgdGhpcy0+c2V0TmVlZHNUb1VwZGF0ZVN1
YnRyZWUoKTsKKyAgICBib29sIHNob3VsZFN0b3BVcGRhdGluZ1BhcmVudCA9IGZhbHNlOwogCiAg
ICAgLy8gR28gdXAgdGhlIGFjY2Vzc2liaWxpdHkgcGFyZW50IGNoYWluLCBidXQgb25seSBpZiB0
aGUgZWxlbWVudCBhbHJlYWR5IGV4aXN0cy4gVGhpcyBtZXRob2QgaXMKICAgICAvLyBjYWxsZWQg
ZHVyaW5nIHJlbmRlciBsYXlvdXRzLCBtaW5pbWFsIHdvcmsgc2hvdWxkIGJlIGRvbmUuIAogICAg
IC8vIElmIEFYIGVsZW1lbnRzIGFyZSBjcmVhdGVkIG5vdywgdGhleSBjb3VsZCBpbnRlcnJvZ2F0
ZSB0aGUgcmVuZGVyIHRyZWUgd2hpbGUgaXQncyBpbiBhIGZ1bmt5IHN0YXRlLgogICAgIC8vIEF0
IHRoZSBzYW1lIHRpbWUsIHByb2Nlc3MgQVJJQSBsaXZlIHJlZ2lvbiBjaGFuZ2VzLgogICAgIGZv
ciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gdGhpczsgcGFyZW50OyBwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudE9iamVjdElmRXhpc3RzKCkpIHsKLSAgICAgICAgcGFyZW50LT5zZXROZWVk
c1RvVXBkYXRlQ2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKCFzaG91bGRTdG9wVXBkYXRpbmdQYXJl
bnQpCisgICAgICAgICAgICBwYXJlbnQtPnNldE5lZWRzVG9VcGRhdGVDaGlsZHJlbigpOworICAg
ICAgICAKIAogICAgICAgICAvLyBUaGVzZSBub3RpZmljYXRpb25zIGFsd2F5cyBuZWVkIHRvIGJl
IHNlbnQgYmVjYXVzZSBzY3JlZW5yZWFkZXJzIGFyZSByZWxpYW50IG9uIHRoZW0gdG8gcGVyZm9y
bS4gCiAgICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCB0aGV5IG5lZWQgdG8gYmUgc2VudCBldmVu
IHdoZW4gdGhlIHNjcmVlbiByZWFkZXIgaGFzIG5vdCBhY2Nlc3NlZCB0aGlzIGxpdmUgcmVnaW9u
IHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS4KQEAgLTE0OCw4ICsxNTUsMTMgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6Y2hpbGRyZW5DaAogICAgICAgICAgICAgY2FjaGUtPnBvc3RMaXZl
UmVnaW9uQ2hhbmdlTm90aWZpY2F0aW9uKHBhcmVudCk7CiAgICAgICAgIAogICAgICAgICAvLyBJ
ZiB0aGlzIGVsZW1lbnQgaXMgYW4gQVJJQSB0ZXh0IGNvbnRyb2wsIG5vdGlmeSB0aGUgQVQgb2Yg
Y2hhbmdlcy4KLSAgICAgICAgaWYgKHBhcmVudC0+aXNOb25OYXRpdmVUZXh0Q29udHJvbCgpKQor
ICAgICAgICBpZiAocGFyZW50LT5pc05vbk5hdGl2ZVRleHRDb250cm9sKCkpIHsKICAgICAgICAg
ICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHBhcmVudCwgcGFyZW50LT5kb2N1bWVudCgpLCBB
WE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIERvIG5vdCBsZXQgdGhlIHBhcmVudCB0aGF0J3MgYWJvdmUgdGhlIGVkaXRhYmxlIGFuY2Vz
dG9yIHVwZGF0ZSBpdHMgY2hpbGRyZW4KKyAgICAgICAgICAgIC8vIHNpbmNlIHdlIGFscmVhZHkg
bm90aWZ5IHRoZSBBVCBvZiBjaGFuZ2VzLgorICAgICAgICAgICAgc2hvdWxkU3RvcFVwZGF0aW5n
UGFyZW50ID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMzMzLDggKzM0NSwyNCBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGlsCiAgICAgLy8gSWYgdGhl
IHBhcmVudCBpcyBhc2tpbmcgZm9yIHRoaXMgY2hpbGQncyBjaGlsZHJlbiwgdGhlbiBlaXRoZXIg
aXQncyB0aGUgZmlyc3QgdGltZSAoYW5kIGNsZWFyaW5nIGlzIGEgbm8tb3ApLAogICAgIC8vIG9y
IGl0cyB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoaXMgY2hp
bGQgbWF5IGhhdmUgYSBzdGFsZSBjaGlsZCBjYWNoZWQuCiAgICAgLy8gVGhpcyBjYW4gcHJldmVu
dCBhcmlhLWhpZGRlbiBjaGFuZ2VzIGZyb20gd29ya2luZyBjb3JyZWN0bHkuIEhlbmNlLCB3aGVu
ZXZlciBhIHBhcmVudCBpcyBnZXR0aW5nIGNoaWxkcmVuLCBlbnN1cmUgZGF0YSBpcyBub3Qgc3Rh
bGUuCi0gICAgY2hpbGQtPmNsZWFyQ2hpbGRyZW4oKTsKKyAgICAvLyBPbmx5IGNsZWFyIHRoZSBj
aGlsZCdzIGNoaWxkcmVuIHdoZW4gd2Uga25vdyBpdCdzIGluIHRoZSB1cGRhdGluZyBjaGFpbiBp
biBvcmRlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3b3JrLgorICAgIGlmIChjaGlsZC0+bmVlZHNU
b1VwZGF0ZUNoaWxkcmVuKCkgfHwgbV9zdWJ0cmVlRGlydHkpIHsKKyAgICAgICAgY2hpbGQtPmNs
ZWFyQ2hpbGRyZW4oKTsKKyAgICAgICAgLy8gUGFzcyBtX3N1YnRyZWVEaXJ0eSBmbGFnIGRvd24g
dG8gdGhlIGNoaWxkIHNvIHRoYXQgY2hpbGRyZW4gY2FjaGUgZ2V0cyByZXNldCBwcm9wZXJseS4K
KyAgICAgICAgaWYgKG1fc3VidHJlZURpcnR5KQorICAgICAgICAgICAgY2hpbGQtPnNldE5lZWRz
VG9VcGRhdGVTdWJ0cmVlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRm9yIHNvbWUgcmVh
c29uIHRoZSBncmFuZCBjaGlsZHJlbiBtaWdodCBiZSBkZXRhY2hlZCBzbyB0aGF0IHdlIG5lZWQg
dG8gcmVnZW5lcmF0ZSB0aGUKKyAgICAgICAgLy8gY2hpbGRyZW4gbGlzdCBvZiB0aGlzIGNoaWxk
LgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGdyYW5kQ2hpbGQgOiBjaGlsZC0+Y2hpbGRyZW4o
ZmFsc2UpKSB7CisgICAgICAgICAgICBpZiAoZ3JhbmRDaGlsZC0+aXNEZXRhY2hlZEZyb21QYXJl
bnQoKSkgeworICAgICAgICAgICAgICAgIGNoaWxkLT5jbGVhckNoaWxkcmVuKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAgICAgCisg
ICAgc2V0SXNJZ25vcmVkRnJvbVBhcmVudERhdGFGb3JDaGlsZChjaGlsZCk7CiAgICAgaWYgKGNo
aWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKICAgICAgICAgY29uc3QgYXV0byYgY2hp
bGRyZW4gPSBjaGlsZC0+Y2hpbGRyZW4oKTsKICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGNoaWxk
cmVuLnNpemUoKTsKQEAgLTM0NCw2ICszNzIsOSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjppbnNlcnRDaGlsCiAgICAgICAgIEFTU0VSVChjaGlsZC0+cGFyZW50T2JqZWN0KCkgPT0g
dGhpcyk7CiAgICAgICAgIG1fY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCBjaGlsZCk7CiAgICAgfQor
ICAgIAorICAgIC8vIFJlc2V0IHRoZSBjaGlsZCdzIG1faXNJZ25vcmVkRnJvbVBhcmVudERhdGEg
c2luY2Ugd2UgYXJlIGRvbmUgYWRkaW5nIHRoYXQgY2hpbGQgYW5kIGl0cyBjaGlsZHJlbi4KKyAg
ICBjaGlsZC0+Y2xlYXJJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSgpOwogfQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCkK
QEAgLTM2OCw2ICszOTksOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGls
ZHJlCiAgICAgCiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgYWRkQ2hpbGQoYXhP
YmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjaGlsZCkpOworICAgIAorICAgIG1fc3VidHJlZURp
cnR5ID0gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbkhhdmVD
aGlsZHJlbigpIGNvbnN0CkBAIC0xMDU5LDYgKzEwOTIsOSBAQCBFbGVtZW50KiBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6bW91c2VCCiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omlz
RGVzY2VuZGFudE9mQmFycmVuUGFyZW50KCkgY29uc3QKIHsKKyAgICBpZiAoIW1faXNJZ25vcmVk
RnJvbVBhcmVudERhdGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX2lzSWdub3JlZEZyb21Q
YXJlbnREYXRhLmlzRGVzY2VuZGFudE9mQmFycmVuUGFyZW50OworICAgIAogICAgIGZvciAoQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gcGFyZW50T2JqZWN0KCk7IG9iamVjdDsgb2JqZWN0
ID0gb2JqZWN0LT5wYXJlbnRPYmplY3QoKSkgewogICAgICAgICBpZiAoIW9iamVjdC0+Y2FuSGF2
ZUNoaWxkcmVuKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJ
KHJldmlzaW9uIDIxNTY2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0Niw3IEBAIHBy
b3RlY3RlZDoKIAogICAgIEFjY2Vzc2liaWxpdHlSb2xlIG1fYXJpYVJvbGU7CiAgICAgYm9vbCBt
X2NoaWxkcmVuRGlydHk7CisgICAgYm9vbCBtX3N1YnRyZWVEaXJ0eTsKICAgICBtdXRhYmxlIEFj
Y2Vzc2liaWxpdHlSb2xlIG1fcm9sZUZvck1TQUE7CiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wg
bV9pbml0aWFsaXplZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjE1NjY4KQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODYsNiArODYsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
T2JqZWN0CiAgICAgLCBtX2hhdmVDaGlsZHJlbihmYWxzZSkKICAgICAsIG1fcm9sZShVbmtub3du
Um9sZSkKICAgICAsIG1fbGFzdEtub3duSXNJZ25vcmVkVmFsdWUoRGVmYXVsdEJlaGF2aW9yKQor
ICAgICwgbV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YShBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkRnJv
bVBhcmVudERhdGEoKSkKICNpZiBQTEFURk9STShHVEspCiAgICAgLCBtX3dyYXBwZXIobnVsbHB0
cikKICNlbmRpZgpAQCAtMzAzMiwxMyArMzAzMywxNSBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmlzRE9NSGlkZGVuKCkgCiAKIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQWNjZXNz
aWJpbGl0eU9iamVjdDo6ZGVmYXVsdE9iamVjdEluY2x1c2lvbigpIGNvbnN0CiB7Ci0gICAgaWYg
KGlzQVJJQUhpZGRlbigpKQorICAgIGJvb2wgdXNlUGFyZW50RGF0YSA9ICFtX2lzSWdub3JlZEZy
b21QYXJlbnREYXRhLmlzTnVsbCgpOworICAgIAorICAgIGlmICh1c2VQYXJlbnREYXRhID8gbV9p
c0lnbm9yZWRGcm9tUGFyZW50RGF0YS5pc0FSSUFIaWRkZW4gOiBpc0FSSUFIaWRkZW4oKSkKICAg
ICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKICAgICAKICAgICBpZiAoaWdub3JlZEZyb21BUklB
TW9kYWxQcmVzZW5jZSgpKQogICAgICAgICByZXR1cm4gSWdub3JlT2JqZWN0OwogICAgIAotICAg
IGlmIChpc1ByZXNlbnRhdGlvbmFsQ2hpbGRPZkFyaWFSb2xlKCkpCisgICAgaWYgKHVzZVBhcmVu
dERhdGEgPyBtX2lzSWdub3JlZEZyb21QYXJlbnREYXRhLmlzUHJlc2VudGF0aW9uYWxDaGlsZE9m
QXJpYVJvbGUgOiBpc1ByZXNlbnRhdGlvbmFsQ2hpbGRPZkFyaWFSb2xlKCkpCiAgICAgICAgIHJl
dHVybiBJZ25vcmVPYmplY3Q7CiAgICAgCiAgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlQbGF0Zm9y
bUluY2x1ZGVzT2JqZWN0KCk7CkBAIC0zMjMwLDQgKzMyMzMsMjMgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjphcmlhT3duc0VsZW1lbgogICAgIGFyaWFFbGVtZW50c0Zyb21BdHRyaWJ1dGUo
YXhPYmplY3RzLCBhcmlhX293bnNBdHRyKTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YUZvckNoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNoaWxkKQoreworICAgIGlmICghY2hpbGQgfHwgY2hpbGQtPnBhcmVudE9iamVjdCgpICE9IHRo
aXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkRnJv
bVBhcmVudERhdGEgcmVzdWx0ID0gQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRh
KHRoaXMpOworICAgIGlmICghbV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YS5pc051bGwoKSkgewor
ICAgICAgICByZXN1bHQuaXNBUklBSGlkZGVuID0gbV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YS5p
c0FSSUFIaWRkZW4gfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY2hpbGQtPmdldEF0
dHJpYnV0ZShhcmlhX2hpZGRlbkF0dHIpLCAidHJ1ZSIpOworICAgICAgICByZXN1bHQuaXNQcmVz
ZW50YXRpb25hbENoaWxkT2ZBcmlhUm9sZSA9IG1faXNJZ25vcmVkRnJvbVBhcmVudERhdGEuaXNQ
cmVzZW50YXRpb25hbENoaWxkT2ZBcmlhUm9sZSB8fCBhcmlhUm9sZUhhc1ByZXNlbnRhdGlvbmFs
Q2hpbGRyZW4oKTsKKyAgICAgICAgcmVzdWx0LmlzRGVzY2VuZGFudE9mQmFycmVuUGFyZW50ID0g
bV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YS5pc0Rlc2NlbmRhbnRPZkJhcnJlblBhcmVudCB8fCAh
Y2FuSGF2ZUNoaWxkcmVuKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0LmlzQVJJQUhp
ZGRlbiA9IGNoaWxkLT5pc0FSSUFIaWRkZW4oKTsKKyAgICAgICAgcmVzdWx0LmlzUHJlc2VudGF0
aW9uYWxDaGlsZE9mQXJpYVJvbGUgPSBjaGlsZC0+aXNQcmVzZW50YXRpb25hbENoaWxkT2ZBcmlh
Um9sZSgpOworICAgICAgICByZXN1bHQuaXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQgPSBjaGls
ZC0+aXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQoKTsKKyAgICB9CisgICAgCisgICAgY2hpbGQt
PnNldElzSWdub3JlZEZyb21QYXJlbnREYXRhKHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCShyZXZpc2lvbiAyMTU2NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjg0
LDYgKzI4NCwyNCBAQCBzdHJ1Y3QgQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlCiAg
ICAgICAgICwgaWdub3JlZENoaWxkTm9kZShpZ25vcmVkKQogICAgICAgICB7IH0KIH07CisKKy8v
IFVzZSB0aGlzIHN0cnVjdCB0byBzdG9yZSB0aGUgaXNJZ25vcmVkIGRhdGEgdGhhdCBkZXBlbmRz
IG9uIHRoZSBwYXJlbnRzLCBzbyB0aGF0IGluIGFkZENoaWxkcmVuKCkKKy8vIHdlIGF2b2lkIGdv
aW5nIHVwIHRoZSBwYXJlbnQgY2hhaW4gZm9yIGVhY2ggZWxlbWVudCB3aGlsZSB0cmF2ZXJzaW5n
IHRoZSB0cmVlIHdpdGggdXNlZnVsIGluZm9ybWF0aW9uIGFscmVhZHkuCitzdHJ1Y3QgQWNjZXNz
aWJpbGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRhIHsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQ7CisgICAgYm9vbCBpc0FSSUFIaWRkZW47CisgICAgYm9vbCBpc1ByZXNlbnRhdGlv
bmFsQ2hpbGRPZkFyaWFSb2xlOworICAgIGJvb2wgaXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQ7
CisgICAgCisgICAgQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRhKEFjY2Vzc2li
aWxpdHlPYmplY3QqIHBhcmVudCA9IG51bGxwdHIpCisgICAgICAgIDogcGFyZW50KHBhcmVudCkK
KyAgICAgICAgLCBpc0FSSUFIaWRkZW4oZmFsc2UpCisgICAgICAgICwgaXNQcmVzZW50YXRpb25h
bENoaWxkT2ZBcmlhUm9sZShmYWxzZSkKKyAgICAgICAgLCBpc0Rlc2NlbmRhbnRPZkJhcnJlblBh
cmVudChmYWxzZSkKKyAgICAgICAgeyB9CisgICAgCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiAhcGFyZW50OyB9Cit9OwogICAgIAogZW51bSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b24gewogICAgIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvblZlcnRpY2FsLApAQCAtODE2LDcgKzgz
NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hpbGRyZW4oKSBjb25zdCB7IHJl
dHVybiBtX2hhdmVDaGlsZHJlbjsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDaGlsZHJlbklm
TmVjZXNzYXJ5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVG9VcGRhdGVDaGlsZHJlbigp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RvVXBkYXRlU3VidHJlZSgpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBjbGVhckNoaWxkcmVuKCk7CisgICAgdmlydHVhbCBib29sIG5lZWRzVG9V
cGRhdGVDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaEZyb21QYXJlbnQoKTsKICNlbHNlCkBAIC0xMDcy
LDEyICsxMDkyLDE4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCogbWF0Y2hlZFBhcmVudChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgYm9v
bCBpbmNsdWRlU2VsZiwgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IEFjY2Vzc2liaWxp
dHlPYmplY3QmKT4mKTsKICAgICAKKyAgICB2b2lkIGNsZWFySXNJZ25vcmVkRnJvbVBhcmVudERh
dGEoKSB7IG1faXNJZ25vcmVkRnJvbVBhcmVudERhdGEgPSBBY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
RnJvbVBhcmVudERhdGEoKTsgfQorICAgIHZvaWQgc2V0SXNJZ25vcmVkRnJvbVBhcmVudERhdGFG
b3JDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgQVhJ
RCBtX2lkOwogICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NoaWxkcmVuOwogICAg
IG11dGFibGUgYm9vbCBtX2hhdmVDaGlsZHJlbjsKICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBtX3Jv
bGU7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBtX2xhc3RLbm93bklzSWdub3Jl
ZFZhbHVlOworICAgIEFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSBtX2lzSWdu
b3JlZEZyb21QYXJlbnREYXRhOworICAgIAorICAgIHZvaWQgc2V0SXNJZ25vcmVkRnJvbVBhcmVu
dERhdGEoQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRhJiBkYXRhKSB7IG1faXNJ
Z25vcmVkRnJvbVBhcmVudERhdGEgPSBkYXRhOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY29tcHV0
ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMjE1NjY4KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjk3OSw3ICsyOTc5LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
ZGRJbWFnZQogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cGRhdGVDaGlsZHJlbklm
TmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCkpCi0gICAgICAg
IGNsZWFyQ2hpbGRyZW4oKTsgICAgICAgIAorICAgICAgICBjbGVhckNoaWxkcmVuKCk7CiAgICAg
CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6dXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwog
fQpAQCAtMzIwNCw2ICszMjA0LDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
ZGRDaGlsZAogICAgIGZvciAoUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGZpcnN0
Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGFkZENoaWxk
KG9iai5nZXQoKSk7CiAgICAgCisgICAgbV9zdWJ0cmVlRGlydHkgPSBmYWxzZTsKKyAgICAKICAg
ICBhZGRIaWRkZW5DaGlsZHJlbigpOwogICAgIGFkZEF0dGFjaG1lbnRDaGlsZHJlbigpOwogICAg
IGFkZEltYWdlTWFwQ2hpbGRyZW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCShyZXZpc2lvbiAy
MTU2NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw2IEBAIHB1YmxpYzoKIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KFJlbmRlck9i
amVjdCopOwogICAgIHZvaWQgc2V0UmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCogcmVuZGVyZXIp
IHsgbV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9Ci0gICAgYm9vbCBuZWVkc1RvVXBkYXRlQ2hpbGRy
ZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuRGlydHk7IH0KICAgICBTY3JvbGxhYmxlQXJl
YSogZ2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2
b2lkIHNjcm9sbFRvKGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgCkBAIC0y
MjgsNiArMjI3LDggQEAgcHJpdmF0ZToKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50
Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKSBjb25zdDsKICAgICBib29sIG5vZGVJc1RleHRD
b250cm9sKGNvbnN0IE5vZGUqKSBjb25zdDsKICAgICB2b2lkIHNldE5lZWRzVG9VcGRhdGVDaGls
ZHJlbigpIG92ZXJyaWRlIHsgbV9jaGlsZHJlbkRpcnR5ID0gdHJ1ZTsgfQorICAgIGJvb2wgbmVl
ZHNUb1VwZGF0ZUNoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jaGlsZHJlbkRp
cnR5OyB9CisgICAgdm9pZCBzZXROZWVkc1RvVXBkYXRlU3VidHJlZSgpIG92ZXJyaWRlIHsgbV9z
dWJ0cmVlRGlydHkgPSB0cnVlOyB9CiAgICAgUGF0aCBlbGVtZW50UGF0aCgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIAogICAgIGJvb2wgaXNUYWJJdGVtU2VsZWN0ZWQoKSBjb25zdDsK
</data>
<flag name="review"
          id="329792"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
    <flag name="commit-queue"
          id="329793"
          type_id="3"
          status="-"
          setter="n_wang"
    />
          </attachment>
      

    </bug>

</bugzilla>