<?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>194397</bug_id>
          
          <creation_ts>2019-02-07 10:09:53 -0800</creation_ts>
          <short_desc>[iOS] [WK2] Modernize code for applying autocorrection</short_desc>
          <delta_ts>2019-02-08 23:56:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>194373</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1503772</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-07 10:09:53 -0800</bug_when>
    <thetext>• Use BlockPtr instead of temporarily storing the completion handler.
• Change a LegacySync to Delayed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503774</commentid>
    <comment_count>1</comment_count>
      <attachid>361409</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-07 10:11:47 -0800</bug_when>
    <thetext>Created attachment 361409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503976</commentid>
    <comment_count>2</comment_count>
      <attachid>361459</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-07 15:13:05 -0800</bug_when>
    <thetext>Created attachment 361459
Rebase on trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504054</commentid>
    <comment_count>3</comment_count>
      <attachid>361459</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-07 17:45:48 -0800</bug_when>
    <thetext>Comment on attachment 361459
Rebase on trunk

Clearing flags on attachment: 361459

Committed r241180: &lt;https://trac.webkit.org/changeset/241180&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504485</commentid>
    <comment_count>4</comment_count>
      <attachid>361459</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-02-08 20:28:28 -0800</bug_when>
    <thetext>Comment on attachment 361459
Rebase on trunk

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

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:3387
&gt; +    _page-&gt;applyAutocorrection(correction, input, [view = retainPtr(self), completion = makeBlockPtr(completionHandler)](auto&amp; string, auto error) {

Why is it necessary to call this even if completionHandler be nil? Can you say what caller passes a nil completion handler? I guess it&apos;s not crazy to pass a nil completion handler for this function if you just want the correction to try to be applied :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504489</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-02-08 20:33:00 -0800</bug_when>
    <thetext>I&apos;m importing this into radar because it trampled over my work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504490</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-08 20:33:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/47938347&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504496</commentid>
    <comment_count>7</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-08 20:39:02 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #4)
&gt; Comment on attachment 361459 [details]
&gt; Rebase on trunk
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361459&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:3387
&gt; &gt; +    _page-&gt;applyAutocorrection(correction, input, [view = retainPtr(self), completion = makeBlockPtr(completionHandler)](auto&amp; string, auto error) {
&gt; 
&gt; Why is it necessary to call this even if completionHandler be nil? Can you
&gt; say what caller passes a nil completion handler? I guess it&apos;s not crazy to
&gt; pass a nil completion handler for this function if you just want the
&gt; correction to try to be applied :/

It&apos;s just defensive programming. In practice, I don&apos;t think the completion handler should be nil. In the case where it is, the API contract is such that we ought to still apply the autocorrection, even if the caller (UIKit) doesn&apos;t care when the autocorrection is finished applying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504516</commentid>
    <comment_count>8</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-02-08 22:24:28 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #7)
&gt; (In reply to Daniel Bates from comment #4)
&gt; &gt; Comment on attachment 361459 [details]
&gt; &gt; Rebase on trunk
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=361459&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:3387
&gt; &gt; &gt; +    _page-&gt;applyAutocorrection(correction, input, [view = retainPtr(self), completion = makeBlockPtr(completionHandler)](auto&amp; string, auto error) {
&gt; &gt; 
&gt; &gt; Why is it necessary to call this even if completionHandler be nil? Can you
&gt; &gt; say what caller passes a nil completion handler? I guess it&apos;s not crazy to
&gt; &gt; pass a nil completion handler for this function if you just want the
&gt; &gt; correction to try to be applied :/
&gt; 
&gt; It&apos;s just defensive programming. In practice, I don&apos;t think the completion
&gt; handler should be nil. In the case where it is, the API contract is such
&gt; that we ought to still apply the autocorrection, even if the caller (UIKit)
&gt; doesn&apos;t care when the autocorrection is finished applying.

I think most of the nullity checks in this patch fall into the illogical and actively harmful category (read: not defensive). How do you figure it makes sense for **(void)** requestAutocorrection...: (&lt;—- emphasis mine) to ever be passed a nil completion handler? I don’t even need to look at the return type to know this. It’s right there in the name, “request”. How are we going to give it to them? This is a violation of an invariant. We must not continue execution, assert or halt and catch fire.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504520</commentid>
    <comment_count>9</comment_count>
      <attachid>361459</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-02-08 22:35:21 -0800</bug_when>
    <thetext>Comment on attachment 361459
Rebase on trunk

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

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:3220
&gt; +        if (completionHandler)

Hell will freeze over before completionHandler is nil here in a sane world. Halt and catch fire.

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:3239
&gt; +        if (completion)

Ditto.

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:3382
&gt; +        if (completionHandler)

I think I could be convinced this could be nil.

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:3388
&gt; +        if (completion)

I think I could be convinced this could be nil.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504521</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-02-08 22:40:07 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #9)
&gt; Comment on attachment 361459 [details]
&gt; Rebase on trunk
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361459&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:3220
&gt; &gt; +        if (completionHandler)
&gt; 
&gt; Hell will freeze over before completionHandler is nil here in a sane world.
&gt; Halt and catch fire.

“sane world” is not the right phrase. I don’t know how to convey what world it would have to be. In logic, I would say a “well-formed world” (it may not be sound though!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504540</commentid>
    <comment_count>11</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-08 23:43:52 -0800</bug_when>
    <thetext>&gt; I think most of the nullity checks in this patch fall into the illogical and
&gt; actively harmful category (read: not defensive). How do you figure it makes
&gt; sense for **(void)** requestAutocorrection...: (&lt;—- emphasis mine) to ever
&gt; be passed a nil completion handler? I don’t even need to look at the return
&gt; type to know this. It’s right there in the name, “request”. How are we going
&gt; to give it to them? This is a violation of an invariant. We must not
&gt; continue execution, assert or halt and catch fire.

I&apos;m not quite I understand the rationale here. It&apos;s true that it doesn&apos;t make sense for -requestAutocorrectionContext…: to take nil. However, I don&apos;t see why that would mean crashing is the optimal choice in this scenario.

That being said, I can see value in letting clients of this API know that they&apos;re passing nil here when they shouldn&apos;t. The canonical way of letting clients know that an API is being misused on Cocoa platforms is to raise an NSException with a description. Maybe this is preferable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504542</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-02-08 23:50:26 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #11)
&gt; &gt; I think most of the nullity checks in this patch fall into the illogical and
&gt; &gt; actively harmful category (read: not defensive). How do you figure it makes
&gt; &gt; sense for **(void)** requestAutocorrection...: (&lt;—- emphasis mine) to ever
&gt; &gt; be passed a nil completion handler? I don’t even need to look at the return
&gt; &gt; type to know this. It’s right there in the name, “request”. How are we going
&gt; &gt; to give it to them? This is a violation of an invariant. We must not
&gt; &gt; continue execution, assert or halt and catch fire.
&gt; 
&gt; I&apos;m not quite I understand the rationale here. It&apos;s true that it doesn&apos;t
&gt; make sense for -requestAutocorrectionContext…: to take nil. However, I don&apos;t
&gt; see why that would mean crashing is the optimal choice in this scenario.
&gt; 

Do anything except what you’re doing now is what I was going for. Do anything that makes noise to be more precise.

&gt; That being said, I can see value in letting clients of this API know that
&gt; they&apos;re passing nil here when they shouldn&apos;t. The canonical way of letting
&gt; clients know that an API is being misused on Cocoa platforms is to raise an
&gt; NSException with a description. Maybe this is preferable?

Yes, this is preferable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504544</commentid>
    <comment_count>13</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-02-08 23:56:18 -0800</bug_when>
    <thetext>Do not go gentle into that good night.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361409</attachid>
            <date>2019-02-07 10:11:47 -0800</date>
            <delta_ts>2019-02-07 12:20:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194397-20190207101146.patch</filename>
            <type>text/plain</type>
            <size>11174</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxMTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ0NmIyNzIxMDM5MTQyZmQ3
OGJiMWE1NDc0YjQzMzA5YmViMzA5ZmUuLjJkMTRhNjgyMzQ5MjRlYjMzMjIzYWM3MGNlY2Y0YzI0
ZTFjMjg2YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTktMDItMDcgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gW1dLMl0gTW9k
ZXJuaXplIGNvZGUgZm9yIGFwcGx5aW5nIGF1dG9jb3JyZWN0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQzOTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgcmVxdWVzdEF1dG9jb3Jy
ZWN0aW9uUmVjdHNGb3JTdHJpbmc6d2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9TdHJpbmc6d2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorCisgICAgICAgIFVzZSBCbG9ja1B0ciBpbnN0ZWFkIG9mIHRlbXBvcmFy
aWx5IHN0b3JpbmcgdGhlIGNvbXBsZXRpb24gaGFuZGxlci4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW46CisKKyAgICAgICAgQ2hhbmdlIGEgTGVnYWN5U3luYyB0byBEZWxheWVk
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6c3luY0FwcGx5QXV0b2NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwpOgorCiAyMDE5LTAyLTA3ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFtX
SzJdIE1vZGVybml6ZSBhdXRvY29ycmVjdGlvbiBjb250ZXh0IGNvZGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRl
eCA4NDIxMDdjYjlhYWExOGNkZDY4YThiYjhiMWJiMmY0Y2VmYWE5MGJkLi41ODcxOTRkN2MxYTQ1
M2I0ZTMxNDA2NWZhOWE0NTY5YzNhNGMzOGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC0xNzYsNyArMTc2
LDYgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKICAgICB1aW50NjRfdCBmb250VHJh
aXRzOwogICAgIENHUmVjdCB0ZXh0Rmlyc3RSZWN0OwogICAgIENHUmVjdCB0ZXh0TGFzdFJlY3Q7
Ci0gICAgVUlXS0F1dG9jb3JyZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIgYXV0b2NvcnJlY3Rpb25I
YW5kbGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggM2Y2MmFiNjcyOWJmYTAxZDdiOTBh
ZWNlN2NjM2NmMzk5NjUxNDNhMC4uMWRiNzMxZjM0YjhhOGI4NjliYmM3NmQ1OWY0OWNkODI2ZjI4
YTgzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0zMjU5LDEzICszMjU5LDEyIEBAIC0gKGNvbnN0IFdl
YktpdDo6V0tBdXRvQ29ycmVjdGlvbkRhdGEmKWF1dG9jb3JyZWN0aW9uRGF0YQogLSAodm9pZCly
ZXF1ZXN0QXV0b2NvcnJlY3Rpb25SZWN0c0ZvclN0cmluZzooTlNTdHJpbmcgKilpbnB1dCB3aXRo
Q29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0
c0ZvcklucHV0KSljb21wbGV0aW9uSGFuZGxlcgogewogICAgIGlmICghaW5wdXQgfHwgIVtpbnB1
dCBsZW5ndGhdKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7CisgICAgICAgIGlm
IChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4g
dmlldyA9IHNlbGY7Ci0gICAgX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkhhbmRs
ZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07Ci0gICAgX3BhZ2UtPnJlcXVlc3RBdXRvY29y
cmVjdGlvbkRhdGEoaW5wdXQsIFt2aWV3XShjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0
PiYgcmVjdHMsIGNvbnN0IFN0cmluZyYgZm9udE5hbWUsIGRvdWJsZSBmb250U2l6ZSwgdWludDY0
X3QgdHJhaXRzLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICBfcGFnZS0+cmVx
dWVzdEF1dG9jb3JyZWN0aW9uRGF0YShpbnB1dCwgW3ZpZXcgPSByZXRhaW5QdHIoc2VsZiksIGNv
bXBsZXRpb24gPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiByZWN0cywg
YXV0byYgZm9udE5hbWUsIGRvdWJsZSBmb250U2l6ZSwgdWludDY0X3QgdHJhaXRzLCBhdXRvKSB7
CiAgICAgICAgIENHUmVjdCBmaXJzdFJlY3QgPSBDR1JlY3RaZXJvOwogICAgICAgICBDR1JlY3Qg
bGFzdFJlY3QgPSBDR1JlY3RaZXJvOwogICAgICAgICBpZiAocmVjdHMuc2l6ZSgpKSB7CkBAIC0z
Mjc5LDkgKzMyNzgsOCBAQCAtICh2b2lkKXJlcXVlc3RBdXRvY29ycmVjdGlvblJlY3RzRm9yU3Ry
aW5nOihOU1N0cmluZyAqKWlucHV0IHdpdGhDb21wbGV0aW9uSGFuZAogICAgICAgICB2aWV3LT5f
YXV0b2NvcnJlY3Rpb25EYXRhLnRleHRGaXJzdFJlY3QgPSBmaXJzdFJlY3Q7CiAgICAgICAgIHZp
ZXctPl9hdXRvY29ycmVjdGlvbkRhdGEudGV4dExhc3RSZWN0ID0gbGFzdFJlY3Q7CiAKLSAgICAg
ICAgdmlldy0+X2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIocmVjdHMu
c2l6ZSgpID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJl
Y3RzOmZpcnN0UmVjdCBsYXN0UmVjdDpsYXN0UmVjdF0gOiBuaWwpOwotICAgICAgICBbdmlldy0+
X2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAg
ICAgIHZpZXctPl9hdXRvY29ycmVjdGlvbkRhdGEuYXV0b2NvcnJlY3Rpb25IYW5kbGVyID0gbmls
OworICAgICAgICBpZiAoY29tcGxldGlvbikKKyAgICAgICAgICAgIGNvbXBsZXRpb24ocmVjdHMu
c2l6ZSgpID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJl
Y3RzOmZpcnN0UmVjdCBsYXN0UmVjdDpsYXN0UmVjdF0gOiBuaWwpOwogICAgIH0pOwogfQogCkBA
IC0zNDIzLDE1ICszNDIxLDE0IEBAIC0gKHZvaWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJp
bmcgKiljb3JyZWN0aW9uIHRvU3RyaW5nOihOU1N0cmluZyAqKWlucHV0IHdpCiAgICAgY29uc3Qg
Ym9vbCB1c2VTeW5jUmVxdWVzdCA9IHRydWU7CiAKICAgICBpZiAodXNlU3luY1JlcXVlc3QpIHsK
LSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoX3BhZ2UtPmFwcGx5QXV0b2NvcnJlY3Rpb24oY29y
cmVjdGlvbiwgaW5wdXQpID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJl
Y3RzV2l0aFJlY3RzOl9hdXRvY29ycmVjdGlvbkRhdGEudGV4dEZpcnN0UmVjdCBsYXN0UmVjdDpf
YXV0b2NvcnJlY3Rpb25EYXRhLnRleHRMYXN0UmVjdF0gOiBuaWwpOworICAgICAgICBpZiAoY29t
cGxldGlvbkhhbmRsZXIpCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihfcGFnZS0+YXBw
bHlBdXRvY29ycmVjdGlvbihjb3JyZWN0aW9uLCBpbnB1dCkgPyBbV0tBdXRvY29ycmVjdGlvblJl
Y3RzIGF1dG9jb3JyZWN0aW9uUmVjdHNXaXRoUmVjdHM6X2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0
Rmlyc3RSZWN0IGxhc3RSZWN0Ol9hdXRvY29ycmVjdGlvbkRhdGEudGV4dExhc3RSZWN0XSA6IG5p
bCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRv
Y29ycmVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07Ci0gICAgUmV0YWlu
UHRyPFdLQ29udGVudFZpZXc+IHZpZXcgPSBzZWxmOwotICAgIF9wYWdlLT5hcHBseUF1dG9jb3Jy
ZWN0aW9uKGNvcnJlY3Rpb24sIGlucHV0LCBbdmlld10oY29uc3QgU3RyaW5nJiBzdHJpbmcsIFdl
YktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICB2aWV3LT5fYXV0b2Nv
cnJlY3Rpb25EYXRhLmF1dG9jb3JyZWN0aW9uSGFuZGxlcighc3RyaW5nLmlzTnVsbCgpID8gW1dL
QXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOnZpZXctPl9h
dXRvY29ycmVjdGlvbkRhdGEudGV4dEZpcnN0UmVjdCBsYXN0UmVjdDp2aWV3LT5fYXV0b2NvcnJl
Y3Rpb25EYXRhLnRleHRMYXN0UmVjdF0gOiBuaWwpOwotICAgICAgICBbdmlldy0+X2F1dG9jb3Jy
ZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgICAgIHZpZXct
Pl9hdXRvY29ycmVjdGlvbkRhdGEuYXV0b2NvcnJlY3Rpb25IYW5kbGVyID0gbmlsOworCisgICAg
X3BhZ2UtPmFwcGx5QXV0b2NvcnJlY3Rpb24oY29ycmVjdGlvbiwgaW5wdXQsIFt2aWV3ID0gcmV0
YWluUHRyKHNlbGYpLCBjb21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVy
KV0oYXV0byYgc3RyaW5nLCBhdXRvIGVycm9yKSB7CisgICAgICAgIGlmIChjb21wbGV0aW9uKQor
ICAgICAgICAgICAgY29tcGxldGlvbighc3RyaW5nLmlzTnVsbCgpID8gW1dLQXV0b2NvcnJlY3Rp
b25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOnZpZXctPl9hdXRvY29ycmVjdGlv
bkRhdGEudGV4dEZpcnN0UmVjdCBsYXN0UmVjdDp2aWV3LT5fYXV0b2NvcnJlY3Rpb25EYXRhLnRl
eHRMYXN0UmVjdF0gOiBuaWwpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggZDYzZjIzMjljODI1MWVlY2YyNzcwN2E3YWZmYjJh
NWIyOGQ5OGJlZi4uNjY0OTMxNDY4M2EzMmE0Zjc3MTRkYWU3YTdmZWQwZWNiNWM3ZWIwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNjQ2LDcgKzY0
Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcGxhY2VTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5n
JiBvbGRUZXh0LCBjb25zdCBTdHJpbmcmIG5ld1RleHQpOwogICAgIHZvaWQgcmVxdWVzdEF1dG9j
b3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcmIHRleHRGb3JBdXRvY29ycmVjdGlvbiwgQ2FsbGJh
Y2tJRCk7CiAgICAgdm9pZCBhcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIENhbGxiYWNrSUQpOwotICAgIHZvaWQg
c3luY0FwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBT
dHJpbmcmIG9yaWdpbmFsVGV4dCwgYm9vbCYgY29ycmVjdGlvbkFwcGxpZWQpOworICAgIHZvaWQg
c3luY0FwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBT
dHJpbmcmIG9yaWdpbmFsVGV4dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAg
ICAgdm9pZCByZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KENhbGxiYWNrSUQpOwogICAgIHZv
aWQgZ2V0QXV0b2NvcnJlY3Rpb25Db250ZXh0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQXV0
b2NvcnJlY3Rpb25Db250ZXh0JiYpPiYmKTsKICAgICB2b2lkIGdldFBvc2l0aW9uSW5mb3JtYXRp
b24oY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJiYpPiYmKTsKQEAgLTExOTMs
NiArMTE5Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZW5kUG9zaXRpb25JbmZvcm1hdGlvbihJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYmKTsKICAgICBJbnRlcmFjdGlvbkluZm9y
bWF0aW9uQXRQb3NpdGlvbiBwb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IEludGVyYWN0aW9uSW5m
b3JtYXRpb25SZXF1ZXN0Jik7CiAgICAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IGF1dG9jb3Jy
ZWN0aW9uQ29udGV4dCgpOworICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQpOwogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoREFUQV9JTlRFUkFDVElP
TikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCmluZGV4IDAzZjFhYjQxNTdhOTFhMmIyYTEzNDU3NDEzNDQ0ZmYxOWYzY2JiMDQu
LmViZDA4ZjVhOTk3MTA4NzhmOTgwOGU3OGNlMDFiNDFhMTgxMzQ2M2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAt
NzcsNyArNzcsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBS
ZXBsYWNlU2VsZWN0ZWRUZXh0KFN0cmluZyBvbGRUZXh0LCBTdHJpbmcgbmV3VGV4dCkKICAgICBS
ZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKFN0cmluZyB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb24sIFdl
YktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIEFwcGx5QXV0b2NvcnJlY3Rpb24oU3Ry
aW5nIGNvcnJlY3Rpb24sIFN0cmluZyBvcmlnaW5hbFRleHQsIFdlYktpdDo6Q2FsbGJhY2tJRCBj
YWxsYmFja0lEKQotICAgIFN5bmNBcHBseUF1dG9jb3JyZWN0aW9uKFN0cmluZyBjb3JyZWN0aW9u
LCBTdHJpbmcgb3JpZ2luYWxUZXh0KSAtPiAoYm9vbCBhdXRvY29ycmVjdGlvbkFwcGxpZWQpIExl
Z2FjeVN5bmMKKyAgICBTeW5jQXBwbHlBdXRvY29ycmVjdGlvbihTdHJpbmcgY29ycmVjdGlvbiwg
U3RyaW5nIG9yaWdpbmFsVGV4dCkgLT4gKGJvb2wgYXV0b2NvcnJlY3Rpb25BcHBsaWVkKSBEZWxh
eWVkCiAgICAgUmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dChXZWJLaXQ6OkNhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKICAgICBHZXRBdXRvY29ycmVjdGlvbkNvbnRleHQoKSAtPiAoc3RydWN0IFdl
YktpdDo6V2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IGNvbnRleHQpIERlbGF5ZWQKICAgICBHZXRQ
b3NpdGlvbkluZm9ybWF0aW9uKHN0cnVjdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25S
ZXF1ZXN0IHJlcXVlc3QpIC0+IChzdHJ1Y3QgV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbiBpbmZvcm1hdGlvbikgRGVsYXllZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCBhZWM0ZTkzMWNjMGZkYWI5
YTJlYjA3YTI2NDZkZmM3NGU1MjIxZjc0Li5mZjI4YzlmN2RlMGU4N2ZhNzk5MDk2YTQxNmE3MTNm
NGY0NjY3M2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQpAQCAtMTg4OSw5ICsxODg5LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1
ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKGNvbnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9u
LCBDYWwKIAogdm9pZCBXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYg
Y29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIENhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKIHsKLSAgICBib29sIGNvcnJlY3Rpb25BcHBsaWVkOwotICAgIHN5bmNBcHBseUF1dG9j
b3JyZWN0aW9uKGNvcnJlY3Rpb24sIG9yaWdpbmFsVGV4dCwgY29ycmVjdGlvbkFwcGxpZWQpOwot
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3RyaW5nQ2FsbGJhY2soY29ycmVjdGlv
bkFwcGxpZWQgPyBjb3JyZWN0aW9uIDogU3RyaW5nKCksIGNhbGxiYWNrSUQpKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0cmluZ0NhbGxiYWNrKGFwcGx5QXV0b2NvcnJlY3Rp
b25JbnRlcm5hbChjb3JyZWN0aW9uLCBvcmlnaW5hbFRleHQpID8gY29ycmVjdGlvbiA6IFN0cmlu
ZygpLCBjYWxsYmFja0lEKSk7CiB9CiAKIFNlY29uZHMgV2ViUGFnZTo6ZXZlbnRUaHJvdHRsaW5n
RGVsYXkoKSBjb25zdApAQCAtMTkxMiwxMyArMTkxMCwxNiBAQCBTZWNvbmRzIFdlYlBhZ2U6OmV2
ZW50VGhyb3R0bGluZ0RlbGF5KCkgY29uc3QKICAgICByZXR1cm4gc3RkOjptaW4obV9lc3RpbWF0
ZWRMYXRlbmN5ICogMiwgMV9zKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpzeW5jQXBwbHlBdXRvY29y
cmVjdGlvbihjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxU
ZXh0LCBib29sJiBjb3JyZWN0aW9uQXBwbGllZCkKK3ZvaWQgV2ViUGFnZTo6c3luY0FwcGx5QXV0
b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsVGV4dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiByZXBseSkKIHsKLSAgICBj
b3JyZWN0aW9uQXBwbGllZCA9IGZhbHNlOworICAgIHJlcGx5KGFwcGx5QXV0b2NvcnJlY3Rpb25J
bnRlcm5hbChjb3JyZWN0aW9uLCBvcmlnaW5hbFRleHQpKTsKK30KIAotICAgIEZyYW1lJiBmcmFt
ZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Citib29s
IFdlYlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChjb25zdCBTdHJpbmcmIGNvcnJl
Y3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0KQoreworICAgIGF1dG8mIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAo
IWZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXRPclJhbmdlKCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKICAgICBTdHJp
bmcgdGV4dEZvclJhbmdlOwpAQCAtMTk1MSwxNyArMTk1MiwxNCBAQCB2b2lkIFdlYlBhZ2U6OnN5
bmNBcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3Ry
aW5nJiBvcgogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJhbmdlIHNlbGVjdGlvbi4KICAgICAg
ICAgcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAg
ICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgICAgICBjb3JyZWN0aW9uQXBwbGllZCA9IGZhbHNlOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmICghcmFuZ2UpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0
UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlLmdldCgpKTsKICAgICB9CiAKLSAgICBpZiAodGV4
dEZvclJhbmdlICE9IG9yaWdpbmFsVGV4dCkgewotICAgICAgICBjb3JyZWN0aW9uQXBwbGllZCA9
IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICh0ZXh0Rm9yUmFuZ2UgIT0g
b3JpZ2luYWxUZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gQ29ycmVj
dGx5IGRldGVybWluZSBhZmZpbml0eSwgdXNpbmcgbG9naWMgY3VycmVudGx5IG9ubHkgcHJlc2Vu
dCBpbiBWaXNpYmxlUG9zaXRpb24KICAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBET1dOU1RSRUFN
OwpAQCAtMTk3Myw3ICsxOTcxLDcgQEAgdm9pZCBXZWJQYWdlOjpzeW5jQXBwbHlBdXRvY29ycmVj
dGlvbihjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgb3IKICAgICAgICAg
ZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChjb3JyZWN0aW9uLCAwLCBvcmlnaW5hbFRleHQuaXNF
bXB0eSgpID8gVGV4dEV2ZW50SW5wdXRLZXlib2FyZCA6IFRleHRFdmVudElucHV0QXV0b2NvbXBs
ZXRpb24pOwogICAgIGVsc2UKICAgICAgICAgZnJhbWUuZWRpdG9yKCkuZGVsZXRlV2l0aERpcmVj
dGlvbihEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIGZhbHNlLCB0cnVl
KTsKLSAgICBjb3JyZWN0aW9uQXBwbGllZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAK
IFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBXZWJQYWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQo
KQo=
</data>
<flag name="review"
          id="378110"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361459</attachid>
            <date>2019-02-07 15:13:05 -0800</date>
            <delta_ts>2019-02-07 17:45:48 -0800</delta_ts>
            <desc>Rebase on trunk</desc>
            <filename>bug-194397-20190207151304.patch</filename>
            <type>text/plain</type>
            <size>11209</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxMDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYzZWY0N2ExNWEwZjdiMDFk
NDhhZjA4MzFlNDlhY2E3NGUzZDgwNGYuLmJjOWE1ZTUxMjgwMzg1N2ExZGZhMzczZDc2ZGVlMDE3
MzcyNDBmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTktMDItMDcgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gW1dLMl0gTW9k
ZXJuaXplIGNvZGUgZm9yIGFwcGx5aW5nIGF1dG9jb3JyZWN0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQzOTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyByZXF1ZXN0QXV0b2NvcnJlY3Rp
b25SZWN0c0ZvclN0cmluZzp3aXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgYXBwbHlBdXRvY29ycmVjdGlvbjp0b1N0cmluZzp3aXRoQ29tcGxldGlvbkhh
bmRsZXI6XSk6CisKKyAgICAgICAgVXNlIEJsb2NrUHRyIGluc3RlYWQgb2YgdGVtcG9yYXJpbHkg
c3RvcmluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbjoKKworICAgICAgICBDaGFuZ2UgYSBMZWdhY3lTeW5jIHRvIERlbGF5ZWQuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpzeW5jQXBwbHlBdXRvY29ycmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbCk6CisKIDIwMTktMDItMDcgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gQ2xpY2tp
bmcgbGlua3MgaW4gU2FmYXJpIHVzaW5nIEFwcGxlIFBlbmNpbCBpcyBtdWNoIG1vcmUgZGlmZmlj
dWx0IGFmdGVyIHIyMzg0NzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCBkYzBkMTczYzQyMzYzYjIwMTAwYTcz
YmE2NWI5ZjNjOGI2YTY1ZmMxLi40NGM2YmY3ZDdlMDA5ZWM2OWEwY2Q2YjZmOTQ5MDdhYTJmN2Y4
OWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5oCkBAIC0xNzUsNyArMTc1LDYgQEAgc3RydWN0IFdLQXV0b0NvcnJl
Y3Rpb25EYXRhIHsKICAgICB1aW50NjRfdCBmb250VHJhaXRzOwogICAgIENHUmVjdCB0ZXh0Rmly
c3RSZWN0OwogICAgIENHUmVjdCB0ZXh0TGFzdFJlY3Q7Ci0gICAgVUlXS0F1dG9jb3JyZWN0aW9u
Q29tcGxldGlvbkhhbmRsZXIgYXV0b2NvcnJlY3Rpb25IYW5kbGVyOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0KaW5kZXggYTRlN2ZjMWMzZTc3NjcyYWYzMWNlMWFmMzVlM2Q5YWQzOWUxMjdlZC4uNjgw
MzY2NDU3NjA3ZTQwMmQ0ZmRjZDQ3OTY0Zjg0ZWQ3MmQ1NDQ2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBA
IC0zMjE3LDEzICszMjE3LDEyIEBAIC0gKGNvbnN0IFdlYktpdDo6V0tBdXRvQ29ycmVjdGlvbkRh
dGEmKWF1dG9jb3JyZWN0aW9uRGF0YQogLSAodm9pZClyZXF1ZXN0QXV0b2NvcnJlY3Rpb25SZWN0
c0ZvclN0cmluZzooTlNTdHJpbmcgKilpbnB1dCB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0c0ZvcklucHV0KSljb21wbGV0aW9uSGFu
ZGxlcgogewogICAgIGlmICghaW5wdXQgfHwgIVtpbnB1dCBsZW5ndGhdKSB7Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKG5pbCk7CisgICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gdmlldyA9IHNlbGY7Ci0gICAgX2F1dG9j
b3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIg
Y29weV07Ci0gICAgX3BhZ2UtPnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoaW5wdXQsIFt2aWV3
XShjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgcmVjdHMsIGNvbnN0IFN0cmluZyYg
Zm9udE5hbWUsIGRvdWJsZSBmb250U2l6ZSwgdWludDY0X3QgdHJhaXRzLCBXZWJLaXQ6OkNhbGxi
YWNrQmFzZTo6RXJyb3IpIHsKKyAgICBfcGFnZS0+cmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YShp
bnB1dCwgW3ZpZXcgPSByZXRhaW5QdHIoc2VsZiksIGNvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIo
Y29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiByZWN0cywgYXV0byYgZm9udE5hbWUsIGRvdWJsZSBm
b250U2l6ZSwgdWludDY0X3QgdHJhaXRzLCBhdXRvKSB7CiAgICAgICAgIENHUmVjdCBmaXJzdFJl
Y3QgPSBDR1JlY3RaZXJvOwogICAgICAgICBDR1JlY3QgbGFzdFJlY3QgPSBDR1JlY3RaZXJvOwog
ICAgICAgICBpZiAocmVjdHMuc2l6ZSgpKSB7CkBAIC0zMjM3LDkgKzMyMzYsOCBAQCAtICh2b2lk
KXJlcXVlc3RBdXRvY29ycmVjdGlvblJlY3RzRm9yU3RyaW5nOihOU1N0cmluZyAqKWlucHV0IHdp
dGhDb21wbGV0aW9uSGFuZAogICAgICAgICB2aWV3LT5fYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRG
aXJzdFJlY3QgPSBmaXJzdFJlY3Q7CiAgICAgICAgIHZpZXctPl9hdXRvY29ycmVjdGlvbkRhdGEu
dGV4dExhc3RSZWN0ID0gbGFzdFJlY3Q7CiAKLSAgICAgICAgdmlldy0+X2F1dG9jb3JyZWN0aW9u
RGF0YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIocmVjdHMuc2l6ZSgpID8gW1dLQXV0b2NvcnJlY3Rp
b25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOmZpcnN0UmVjdCBsYXN0UmVjdDps
YXN0UmVjdF0gOiBuaWwpOwotICAgICAgICBbdmlldy0+X2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRv
Y29ycmVjdGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgICAgIHZpZXctPl9hdXRvY29ycmVjdGlv
bkRhdGEuYXV0b2NvcnJlY3Rpb25IYW5kbGVyID0gbmlsOworICAgICAgICBpZiAoY29tcGxldGlv
bikKKyAgICAgICAgICAgIGNvbXBsZXRpb24ocmVjdHMuc2l6ZSgpID8gW1dLQXV0b2NvcnJlY3Rp
b25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOmZpcnN0UmVjdCBsYXN0UmVjdDps
YXN0UmVjdF0gOiBuaWwpOwogICAgIH0pOwogfQogCkBAIC0zMzgxLDE1ICszMzc5LDE0IEBAIC0g
KHZvaWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcgKiljb3JyZWN0aW9uIHRvU3RyaW5n
OihOU1N0cmluZyAqKWlucHV0IHdpCiAgICAgY29uc3QgYm9vbCB1c2VTeW5jUmVxdWVzdCA9IHRy
dWU7CiAKICAgICBpZiAodXNlU3luY1JlcXVlc3QpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoX3BhZ2UtPmFwcGx5QXV0b2NvcnJlY3Rpb24oY29ycmVjdGlvbiwgaW5wdXQpID8gW1dLQXV0
b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOl9hdXRvY29ycmVj
dGlvbkRhdGEudGV4dEZpcnN0UmVjdCBsYXN0UmVjdDpfYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRM
YXN0UmVjdF0gOiBuaWwpOworICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihfcGFnZS0+YXBwbHlBdXRvY29ycmVjdGlvbihjb3JyZWN0
aW9uLCBpbnB1dCkgPyBbV0tBdXRvY29ycmVjdGlvblJlY3RzIGF1dG9jb3JyZWN0aW9uUmVjdHNX
aXRoUmVjdHM6X2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0Rmlyc3RSZWN0IGxhc3RSZWN0Ol9hdXRv
Y29ycmVjdGlvbkRhdGEudGV4dExhc3RSZWN0XSA6IG5pbCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBbY29t
cGxldGlvbkhhbmRsZXIgY29weV07Ci0gICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IHZpZXcg
PSBzZWxmOwotICAgIF9wYWdlLT5hcHBseUF1dG9jb3JyZWN0aW9uKGNvcnJlY3Rpb24sIGlucHV0
LCBbdmlld10oY29uc3QgU3RyaW5nJiBzdHJpbmcsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJv
ciBlcnJvcikgewotICAgICAgICB2aWV3LT5fYXV0b2NvcnJlY3Rpb25EYXRhLmF1dG9jb3JyZWN0
aW9uSGFuZGxlcighc3RyaW5nLmlzTnVsbCgpID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRv
Y29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOnZpZXctPl9hdXRvY29ycmVjdGlvbkRhdGEudGV4dEZp
cnN0UmVjdCBsYXN0UmVjdDp2aWV3LT5fYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRMYXN0UmVjdF0g
OiBuaWwpOwotICAgICAgICBbdmlldy0+X2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlv
bkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgICAgIHZpZXctPl9hdXRvY29ycmVjdGlvbkRhdGEuYXV0
b2NvcnJlY3Rpb25IYW5kbGVyID0gbmlsOworCisgICAgX3BhZ2UtPmFwcGx5QXV0b2NvcnJlY3Rp
b24oY29ycmVjdGlvbiwgaW5wdXQsIFt2aWV3ID0gcmV0YWluUHRyKHNlbGYpLCBjb21wbGV0aW9u
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYgc3RyaW5nLCBhdXRvIGVy
cm9yKSB7CisgICAgICAgIGlmIChjb21wbGV0aW9uKQorICAgICAgICAgICAgY29tcGxldGlvbigh
c3RyaW5nLmlzTnVsbCgpID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJl
Y3RzV2l0aFJlY3RzOnZpZXctPl9hdXRvY29ycmVjdGlvbkRhdGEudGV4dEZpcnN0UmVjdCBsYXN0
UmVjdDp2aWV3LT5fYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRMYXN0UmVjdF0gOiBuaWwpOwogICAg
IH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5k
ZXggNjMwNjdmYzJiYTM0ODA0ZDFiYWU2Y2Q5MWYxYTY3MDEyZjBiMzEyZi4uNjA2MmFkODhiYzlj
MTNjYzFmY2M2MGJkNzIyNTQ1MmJhZmQ1ZTIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNjQ2LDcgKzY0Niw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlcGxhY2VTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJiBvbGRUZXh0LCBjb25zdCBTdHJpbmcm
IG5ld1RleHQpOwogICAgIHZvaWQgcmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YShjb25zdCBTdHJp
bmcmIHRleHRGb3JBdXRvY29ycmVjdGlvbiwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBhcHBseUF1
dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmln
aW5hbFRleHQsIENhbGxiYWNrSUQpOwotICAgIHZvaWQgc3luY0FwcGx5QXV0b2NvcnJlY3Rpb24o
Y29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgYm9v
bCYgY29ycmVjdGlvbkFwcGxpZWQpOworICAgIHZvaWQgc3luY0FwcGx5QXV0b2NvcnJlY3Rpb24o
Y29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0QXV0b2NvcnJl
Y3Rpb25Db250ZXh0KENhbGxiYWNrSUQpOwogICAgIHZvaWQgYXV0b2NvcnJlY3Rpb25Db250ZXh0
U3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCYmKT4m
Jik7CiAgICAgdm9pZCBnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IEludGVyYWN0aW9uSW5m
b3JtYXRpb25SZXF1ZXN0JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJbnRlcmFjdGlvbkluZm9y
bWF0aW9uQXRQb3NpdGlvbiYmKT4mJik7CkBAIC0xMTkxLDYgKzExOTEsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc2VuZFBvc2l0aW9uSW5mb3JtYXRpb24oSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24mJik7CiAgICAgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gcG9zaXRp
b25JbmZvcm1hdGlvbihjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdCYpOwogICAg
IFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBhdXRvY29ycmVjdGlvbkNvbnRleHQoKTsKKyAgICBi
b29sIGFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24s
IGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0KTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkgJiYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCBlZGQyOTNl
NjU3NzhlNWI2OTk4NmUzNDc1N2E4ZThlNmQzMTk3Y2JjLi5hOGM2MTc2OWU1ZTc0ZDIxNGU4Y2Vm
MGE2NDE1ODQ3OGIyMzAxY2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTc3LDcgKzc3LDcgQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgUmVwbGFjZVNlbGVjdGVkVGV4dChTdHJp
bmcgb2xkVGV4dCwgU3RyaW5nIG5ld1RleHQpCiAgICAgUmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0
YShTdHJpbmcgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKICAgICBBcHBseUF1dG9jb3JyZWN0aW9uKFN0cmluZyBjb3JyZWN0aW9uLCBTdHJpbmcg
b3JpZ2luYWxUZXh0LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKLSAgICBTeW5jQXBw
bHlBdXRvY29ycmVjdGlvbihTdHJpbmcgY29ycmVjdGlvbiwgU3RyaW5nIG9yaWdpbmFsVGV4dCkg
LT4gKGJvb2wgYXV0b2NvcnJlY3Rpb25BcHBsaWVkKSBMZWdhY3lTeW5jCisgICAgU3luY0FwcGx5
QXV0b2NvcnJlY3Rpb24oU3RyaW5nIGNvcnJlY3Rpb24sIFN0cmluZyBvcmlnaW5hbFRleHQpIC0+
IChib29sIGF1dG9jb3JyZWN0aW9uQXBwbGllZCkgRGVsYXllZAogICAgIFJlcXVlc3RBdXRvY29y
cmVjdGlvbkNvbnRleHQoV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgQXV0b2Nv
cnJlY3Rpb25Db250ZXh0U3luYygpIC0+IChzdHJ1Y3QgV2ViS2l0OjpXZWJBdXRvY29ycmVjdGlv
bkNvbnRleHQgY29udGV4dCkgRGVsYXllZAogICAgIEdldFBvc2l0aW9uSW5mb3JtYXRpb24oc3Ry
dWN0IFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QgcmVxdWVzdCkgLT4gKHN0
cnVjdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0aW9u
KSBEZWxheWVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCmluZGV4IDkxN2NmZTM4MzVkNTFmYzE5MDNkZDMyZjRmZWMzM2E1MWRlZGQ0
NGYuLjdlYjcxYWU5MTJhOTM1MDBiMzU4OTM4MzBiNmUyNGEwNjM2Y2Q3ZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0x
ODg5LDkgKzE4ODksNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEo
Y29uc3QgU3RyaW5nJiB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb24sIENhbAogCiB2b2lkIFdlYlBhZ2U6
OmFwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJp
bmcmIG9yaWdpbmFsVGV4dCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewotICAgIGJvb2wgY29y
cmVjdGlvbkFwcGxpZWQ7Ci0gICAgc3luY0FwcGx5QXV0b2NvcnJlY3Rpb24oY29ycmVjdGlvbiwg
b3JpZ2luYWxUZXh0LCBjb3JyZWN0aW9uQXBwbGllZCk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTdHJpbmdDYWxsYmFjayhjb3JyZWN0aW9uQXBwbGllZCA/IGNvcnJlY3Rpb24g
OiBTdHJpbmcoKSwgY2FsbGJhY2tJRCkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U3RyaW5nQ2FsbGJhY2soYXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvcnJlY3Rpb24s
IG9yaWdpbmFsVGV4dCkgPyBjb3JyZWN0aW9uIDogU3RyaW5nKCksIGNhbGxiYWNrSUQpKTsKIH0K
IAogU2Vjb25kcyBXZWJQYWdlOjpldmVudFRocm90dGxpbmdEZWxheSgpIGNvbnN0CkBAIC0xOTEy
LDEzICsxOTEwLDE2IEBAIFNlY29uZHMgV2ViUGFnZTo6ZXZlbnRUaHJvdHRsaW5nRGVsYXkoKSBj
b25zdAogICAgIHJldHVybiBzdGQ6Om1pbihtX2VzdGltYXRlZExhdGVuY3kgKiAyLCAxX3MpOwog
fQogCi12b2lkIFdlYlBhZ2U6OnN5bmNBcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYg
Y29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIGJvb2wmIGNvcnJlY3Rpb25B
cHBsaWVkKQordm9pZCBXZWJQYWdlOjpzeW5jQXBwbHlBdXRvY29ycmVjdGlvbihjb25zdCBTdHJp
bmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIHJlcGx5KQogewotICAgIGNvcnJlY3Rpb25BcHBsaWVkID0gZmFs
c2U7CisgICAgcmVwbHkoYXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvcnJlY3Rpb24sIG9y
aWdpbmFsVGV4dCkpOworfQogCi0gICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKK2Jvb2wgV2ViUGFnZTo6YXBwbHlBdXRvY29y
cmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBv
cmlnaW5hbFRleHQpCit7CisgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUuc2VsZWN0aW9uKCkuaXND
YXJldE9yUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgIFN0cmluZyB0ZXh0Rm9yUmFuZ2U7CkBAIC0x
OTUxLDE3ICsxOTUyLDE0IEBAIHZvaWQgV2ViUGFnZTo6c3luY0FwcGx5QXV0b2NvcnJlY3Rpb24o
Y29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yCiAgICAgfSBlbHNlIHsK
ICAgICAgICAgLy8gUmFuZ2Ugc2VsZWN0aW9uLgogICAgICAgICByYW5nZSA9IGZyYW1lLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIGlmICghcmFuZ2UpIHsKLSAgICAg
ICAgICAgIGNvcnJlY3Rpb25BcHBsaWVkID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2Uo
cmFuZ2UuZ2V0KCkpOwogICAgIH0KIAotICAgIGlmICh0ZXh0Rm9yUmFuZ2UgIT0gb3JpZ2luYWxU
ZXh0KSB7Ci0gICAgICAgIGNvcnJlY3Rpb25BcHBsaWVkID0gZmFsc2U7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHRleHRGb3JSYW5nZSAhPSBvcmlnaW5hbFRleHQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBDb3JyZWN0bHkgZGV0ZXJtaW5lIGFmZmluaXR5
LCB1c2luZyBsb2dpYyBjdXJyZW50bHkgb25seSBwcmVzZW50IGluIFZpc2libGVQb3NpdGlvbgog
ICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IERPV05TVFJFQU07CkBAIC0xOTczLDcgKzE5NzEsNyBA
QCB2b2lkIFdlYlBhZ2U6OnN5bmNBcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29y
cmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcgogICAgICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRU
ZXh0KGNvcnJlY3Rpb24sIDAsIG9yaWdpbmFsVGV4dC5pc0VtcHR5KCkgPyBUZXh0RXZlbnRJbnB1
dEtleWJvYXJkIDogVGV4dEV2ZW50SW5wdXRBdXRvY29tcGxldGlvbik7CiAgICAgZWxzZQogICAg
ICAgICBmcmFtZS5lZGl0b3IoKS5kZWxldGVXaXRoRGlyZWN0aW9uKERpcmVjdGlvbkJhY2t3YXJk
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgZmFsc2UsIHRydWUpOwotICAgIGNvcnJlY3Rpb25BcHBs
aWVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogV2ViQXV0b2NvcnJlY3Rpb25Db250
ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4dCgpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>