<?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>57391</bug_id>
          
          <creation_ts>2011-03-29 15:02:14 -0700</creation_ts>
          <short_desc>Introduce SimulatedClickEvent and move all simulated-click dispatch code there.</short_desc>
          <delta_ts>2011-03-29 16:05:58 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>55515</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>375789</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-29 15:02:14 -0700</bug_when>
    <thetext>Introduce SimulatedClickEvent and move all simulated-click dispatch code there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375799</commentid>
    <comment_count>1</comment_count>
      <attachid>87415</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-29 15:10:26 -0700</bug_when>
    <thetext>Created attachment 87415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375810</commentid>
    <comment_count>2</comment_count>
      <attachid>87418</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-29 15:33:09 -0700</bug_when>
    <thetext>Created attachment 87418
Rebased to ToT and sorted xcodeproj.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375816</commentid>
    <comment_count>3</comment_count>
      <attachid>87415</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-29 15:43:28 -0700</bug_when>
    <thetext>Comment on attachment 87415
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        The SimulatedClickEvent, instead of dispatching self, fires one or more SimulatedMouseEvents.

I don’t understand why a simulated click, which is a sequence of events, now needs to be a kind of event. Can’t we simulate clicks by sending a sequence of events? Why do we need to trigger that with yet another event?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375824</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-29 15:51:11 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 87415 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=87415&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        The SimulatedClickEvent, instead of dispatching self, fires one or more SimulatedMouseEvents.
&gt; 
&gt; I don’t understand why a simulated click, which is a sequence of events, now needs to be a kind of event. Can’t we simulate clicks by sending a sequence of events? Why do we need to trigger that with yet another event?

The fact that it fires multiple events is a detail that isn&apos;t exposed anywhere from the call site of Node::dispatchSimulatedClick, just like dispatchMouseEvent may fire an extra dblclick event.

Wrapping this into an Event seems consistent with how any other event would be dispatched: dispatchEvent(FooEvent::create(...)).

Also, it wraps the logic neatly into its own class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375831</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-29 15:55:26 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 87415 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=87415&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; &gt; +        The SimulatedClickEvent, instead of dispatching self, fires one or more SimulatedMouseEvents.
&gt; &gt; 
&gt; &gt; I don’t understand why a simulated click, which is a sequence of events, now needs to be a kind of event. Can’t we simulate clicks by sending a sequence of events? Why do we need to trigger that with yet another event?
&gt; 
&gt; The fact that it fires multiple events is a detail that isn&apos;t exposed anywhere from the call site of Node::dispatchSimulatedClick, just like dispatchMouseEvent may fire an extra dblclick event.
&gt; 
&gt; Wrapping this into an Event seems consistent with how any other event would be dispatched: dispatchEvent(FooEvent::create(...)).
&gt; 
&gt; Also, it wraps the logic neatly into its own class.

I can also just have SimulatedMouseEvent (possibly put it the MouseEvent files), then leave EventDispatcher::dispatchSimulatedClick using them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375841</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-29 16:00:55 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; The fact that it fires multiple events is a detail that isn&apos;t exposed anywhere from the call site of Node::dispatchSimulatedClick, just like dispatchMouseEvent may fire an extra dblclick event.

Sure, we can encapsulate that into a function.

&gt; Wrapping this into an Event seems consistent with how any other event would be dispatched: dispatchEvent(FooEvent::create(...)).

This seems to be the sole benefit, and I’m not sure it’s better.

&gt; Also, it wraps the logic neatly into its own class.

You could do that without having the class be derived from Event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375843</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-29 16:01:13 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I can also just have SimulatedMouseEvent (possibly put it the MouseEvent files), then leave EventDispatcher::dispatchSimulatedClick using them.

I’d prefer that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375848</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-29 16:05:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; I can also just have SimulatedMouseEvent (possibly put it the MouseEvent files), then leave EventDispatcher::dispatchSimulatedClick using them.
&gt; 
&gt; I’d prefer that.

ok, patch coming up.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87415</attachid>
            <date>2011-03-29 15:10:26 -0700</date>
            <delta_ts>2011-03-29 15:43:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57391-20110329151025.patch</filename>
            <type>text/plain</type>
            <size>29535</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODIyNjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IGVkMzNhY2VhZWU0NDE1
NmQ4YjUyNzEzMzdmYzFmMmEwYzIwZTI2NTAuLjc5MjQ0OGE1ZTU5YjMyYTRlOWMzMDEzMWM4MDNi
MDg1MzA3MjllM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtMTc1LDYgKzE3NSw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCWRvbS9TY3JpcHRSdW5uZXIuY3BwIFwKIAlk
b20vU2VsZWN0RWxlbWVudC5jcHAgXAogCWRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcCBcCisJZG9t
L1NpbXVsYXRlZENsaWNrRXZlbnQuY3BwIFwKIAlkb20vU3BhY2VTcGxpdFN0cmluZy5jcHAgXAog
CWRvbS9TdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwIFwKIAlkb20vU3RhdGljTm9kZUxpc3QuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMjI2NTcyZGE1NDVmMGM2ODc0ZDY3MTg4ZjNhMjFm
NGUyYzAzYzk1OS4uNjVlMjIwNGUwMTNlNTZjMzc3NzRkNWNjYjkyNzA5ZjlhZDgwZTY1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTYwMyw2ICs2MDMsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgZG9tL1NjcmlwdFJ1bm5lci5jcHAKICAgICBkb20vU2VsZWN0RWxlbWVudC5jcHAKICAg
ICBkb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAKKyAgICBkb20vU2ltdWxhdGVkQ2xpY2tFdmVudC5j
cHAKICAgICBkb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKICAgICBkb20vU3RhdGljSGFzaFNldE5v
ZGVMaXN0LmNwcAogICAgIGRvbS9TdGF0aWNOb2RlTGlzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNWQy
ODU1YWJmODlmNDVlYmZiMTMxNDVkN2JhZDRjY2UyOGY3YjI5Li5mNDU4ZmUzYzEyOTE2ZWMwZDlj
NjNmOWM4NTFmMDZjNTc5ZWYzYjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEt
MDMtMjkgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgU2ltdWxh
dGVkQ2xpY2tFdmVudCBhbmQgbW92ZSBhbGwgc2ltdWxhdGVkLWNsaWNrIGRpc3BhdGNoIGNvZGUg
dGhlcmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NzM5MQorCisgICAgICAgIFRoZSBTaW11bGF0ZWRDbGlja0V2ZW50LCBpbnN0ZWFkIG9mIGRpc3Bh
dGNoaW5nIHNlbGYsIGZpcmVzIG9uZSBvciBtb3JlIFNpbXVsYXRlZE1vdXNlRXZlbnRzLgorCisg
ICAgICAgIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIEFuZHJvaWQubWs6IEFkZGVkIFNpbXVsYXRlZENsaWNrRXZlbnQgdG8gYnVp
bGQgc3lzdGVtLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKyAg
ICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogRGl0dG8uCisgICAgICAgICogZG9tL0RPTUFsbEluT25lLmNwcDogRGl0dG8uCisg
ICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dERpc3BhdGNoZXI6Om5vZGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogQ29tYmluZWQgdHdvIGhlbHBlciBmdW5jdGlvbnMK
KyAgICAgICAgICAgIGludG8gb25lLCBub3cgdGhhdCB0aGUgc2ltdWxhdGVkIGNsaWNrIGhhbmRs
aW5nIGRvZXNuJ3QgbmVlZCBvbmUuCisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5oOiBV
cGRhdGVkIGRlY2xzLgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6IE1hZGUgY29uc3RydWN0
b3IgcHJvdGVjdGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2spOiBDaGFuZ2VkIHRvIHVzZSBkaXNwYXRjaEV2
ZW50LCBub3QKKyAgICAgICAgICAgIGEgc3BlY2lhbGl6ZWQgbWV0aG9kLgorICAgICAgICAqIGRv
bS9TaW11bGF0ZWRDbGlja0V2ZW50LmNwcDogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXVsYXRl
ZENsaWNrRXZlbnQuaDogQWRkZWQuCisKIDIwMTEtMDMtMjggIERpbWl0cmkgR2xhemtvdiAgPGRn
bGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KaW5kZXggODU2ZGIwNmUwOTY0Nzk3NDA1ZjUwM2FkNThiYmVjNWNk
ODM0NWNiNy4uZDdjYmJhOTU3MGZkZjVhZTJkMDhiN2YyMTIyMzJiNTY0NzFjNTg3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KQEAgLTEzMTcsNiArMTMxNyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdEVsZW1lbnQuaCBcCiAJU291cmNlL1dlYkNvcmUv
ZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JO
b2RlTGlzdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9kb20vU2ltdWxhdGVkQ2xpY2tFdmVudC5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL2RvbS9TaW11bGF0ZWRDbGlja0V2ZW50LmggXAogCVNvdXJjZS9X
ZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1Nw
YWNlU3BsaXRTdHJpbmcuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY0hhc2hTZXROb2Rl
TGlzdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGQyMThmNDczMGZjZmZlNjYwYTM2MTFhOTUy
ZDZlOGE0MzcyMTYzNWMuLjEzYmI2MmVhMzQ3ODk0NjExYTc0YzE0MDUzODdhMzc0YzY5NDZjMTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTI1MDksNiArMjUwOSw4IEBACiAgICAgICAgICAgICAnZG9t
L1NlbGVjdEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3Bw
JywKICAgICAgICAgICAgICdkb20vU2VsZWN0b3JOb2RlTGlzdC5oJywKKyAgICAgICAgICAgICdk
b20vU2ltdWxhdGVkQ2xpY2tFdmVudC5jcHAnLAorICAgICAgICAgICAgJ2RvbS9TaW11bGF0ZWRD
bGlja0V2ZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcCcsCiAg
ICAgICAgICAgICAnZG9tL1N0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAnLAogICAgICAgICAgICAg
J2RvbS9TdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDQyNTFkNzM4
NTkxNWMzOTNiMDhkZmNjZDc0YmMyOTEzMmE1MTQ4N2IuLjAxOWUwYjM1MWVhODU2MzVhMzdhYmYy
MzdkMWFlN2E4ZjY4OTBlOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01MzIsNiArNTMyLDcgQEAgU09V
UkNFUyArPSBcCiAgICAgZG9tL1NjcmlwdFJ1bm5lci5jcHAgXAogICAgIGRvbS9TZWxlY3RFbGVt
ZW50LmNwcCBcCiAgICAgZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwIFwKKyAgICBkb20vU2ltdWxh
dGVkQ2xpY2tFdmVudC5jcHAgXAogICAgIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcCBcCiAgICAg
ZG9tL1N0YXRpY05vZGVMaXN0LmNwcCBcCiAgICAgZG9tL1N0eWxlZEVsZW1lbnQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggN2MzMWY1
ZjI5MTQyMTZiOWMwYjg4ZDllN2I2ZDY3NWQzMTY1NTA2Mi4uMWQ4YzM3MDM2MmQ4ZWRkNjhlNTFi
ZjlkNzQ0NDY0Zjk2YjFkZjIwNiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKQEAgLTQ2NTQyLDYgKzQ2NTQyLDYyIEBACiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxTaW11bGF0ZWRDbGlja0V2ZW50
LmNwcCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdp
bjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAor
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMy
IgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxU
b29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2Vf
Q2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJ
PgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1l
PSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+
CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9
IlJlbGVhc2VfTFRDR3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxkb21cU2ltdWxhdGVkQ2xpY2tFdmVudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cU3BhY2VTcGxpdFN0cmluZy5jcHAi
CiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNkNjU1MzM1ZjZkNWRmZTJlYjM1
MWMyNTRlYjFkZGNmZGMxNjFjYWMuLjc4YThiYTFhMTdlNjIxMDQ0MDRlNzRmNGU0OTYwMjM2YjMz
MzAxNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTkwMCw2ICs5MDAsOCBAQAogCQk0MTZFNzVCRjBFREY4RkQ3MDAzNjBFMUQg
LyogU2NyaXB0Q2FsbFN0YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxNkU3NUJEMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2su
Y3BwICovOyB9OwogCQk0MTZFNzVDQjBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1l
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVD
OTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmggKi87IH07CiAJCTQxNkU3NUND
MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8q
IFNjcmlwdENhbGxGcmFtZS5jcHAgKi87IH07CisJCTQxNzBFRDlFMTM0MjgwQjkwMEZBNzkyRSAv
KiBTaW11bGF0ZWRDbGlja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxNzBFRDlDMTM0MjgwQjkwMEZBNzkyRSAvKiBTaW11bGF0ZWRDbGlj
a0V2ZW50LmNwcCAqLzsgfTsKKwkJNDE3MEVEOUYxMzQyODBCOTAwRkE3OTJFIC8qIFNpbXVsYXRl
ZENsaWNrRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxNzBFRDlEMTM0MjgwQjkwMEZBNzkyRSAvKiBTaW11bGF0ZWRDbGlja0V2ZW50LmggKi87
IH07CiAJCTQxODg1QjkzMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE4ODVCOTExMUI2RkRB
NjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE4ODVCOTQxMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1T
dWJtaXNzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxODg1QjkyMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5jcHAgKi87IH07
CiAJCTQxOEEwNkQwMTMzQzA0RDUwMENEMzc5QyAvKiBFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxOEEwNkNFMTMzQzA0RDUw
MENEMzc5QyAvKiBFdmVudERpc3BhdGNoZXIuaCAqLzsgfTsKQEAgLTczMjYsNiArNzMyOCw4IEBA
CiAJCTQxNkU3NUJEMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FsbFN0YWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RTc1QzkwRURGOTBDNzAwMzYwRTFEIC8qIFNj
cmlwdENhbGxGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRD
YWxsRnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RTc1Q0EwRURGOTBD
NzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTY3JpcHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MTcwRUQ5QzEzNDI4MEI5MDBGQTc5MkUgLyogU2ltdWxhdGVkQ2xpY2tFdmVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW11bGF0ZWRDbGlja0V2
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE3MEVEOUQxMzQyODBCOTAw
RkE3OTJFIC8qIFNpbXVsYXRlZENsaWNrRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2ltdWxhdGVkQ2xpY2tFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTg4NUI5MTExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybVN1Ym1pc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDE4ODVCOTIxMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNz
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1TdWJtaXNz
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE4QTA2Q0UxMzNDMDRENTAw
Q0QzNzlDIC8qIEV2ZW50RGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFdmVudERpc3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5
MTAyLDYgKzE5MTA2LDggQEAKIAkJRjUyM0QzMjQwMkRFNDQ3ODAxODYzNUNBIC8qIGRvbSAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDE3MEVEOUMxMzQy
ODBCOTAwRkE3OTJFIC8qIFNpbXVsYXRlZENsaWNrRXZlbnQuY3BwICovLAorCQkJCTQxNzBFRDlE
MTM0MjgwQjkwMEZBNzkyRSAvKiBTaW11bGF0ZWRDbGlja0V2ZW50LmggKi8sCiAJCQkJRTFDNERF
NkQwRUE3NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgKi8sCiAJCQkJRTFDNERF
NjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oICovLAogCQkJCUE4QzRBN0ZD
MDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmNwcCAqLywKQEAgLTIyNzE0LDYgKzIyNzIwLDcgQEAK
IAkJCQlCQzc3MkUxMzEzMzE2MjBDMDAxRUM5Q0UgLyogQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNEYxNDQyMjkxMzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVI
aWdobGlnaHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTlCMEVFQTcxMzJBNkYyQTAwNDMzMUM3
IC8qIEphdmFUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTcwRUQ5RjEzNDI4MEI5MDBGQTc5
MkUgLyogU2ltdWxhdGVkQ2xpY2tFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTM4Niw2ICsy
NTM5Myw3IEBACiAJCQkJN0UzN0VGMkUxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9h
ZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEYxNDQyMjgxMzM5RkQ2MjAwRTBENkY4IC8q
IERPTU5vZGVIaWdobGlnaHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NEI2MjY4NTEzMzEz
OEY5MDA5NUE0ODkgLyogRm9udFBsYXRmb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
MTcwRUQ5RTEzNDI4MEI5MDBGQTc5MkUgLyogU2ltdWxhdGVkQ2xpY2tFdmVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCmluZGV4IGNjNDg4OGYyZjMxMWJj
NzViODFhNjllODA2NDcxYzVkODUwNDg1MzMuLjY0YzIwMGY2YjVjMWI4NDZkYWQ5NmY3Mzc3ZGJi
NDg3ZGJjOTA5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcApAQCAtMTA4LDYgKzEw
OCw3IEBACiAjaW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmNwcCIKICNpbmNsdWRl
ICJTZWxlY3RFbGVtZW50LmNwcCIKICNpbmNsdWRlICJTZWxlY3Rvck5vZGVMaXN0LmNwcCIKKyNp
bmNsdWRlICJTaW11bGF0ZWRDbGlja0V2ZW50LmNwcCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3Ry
aW5nLmNwcCIKICNpbmNsdWRlICJTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwIgogI2luY2x1ZGUg
IlN0YXRpY05vZGVMaXN0LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAK
aW5kZXggMzU2YjE2Zjk1NGFiNzJjMjY5MDNkZGEwMGJiYzhjYmFhZTIxZGY4My4uMmM3YTBiMDg0
YmY0YzU0NzU5MzFkZjA4MWZkMzhmZTU3MTA4OTEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
RGlzcGF0Y2hlci5jcHAKQEAgLTUxLDggKzUxLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgSGFzaFNldDxOb2RlKj4qIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tz
ID0gMDsKLQogYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogbm9kZSwg
UGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiB7CiAgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9
IHBycEV2ZW50OwpAQCAtOTksNTEgKzk3LDYgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoU2NvcGVkRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAg
U2NvcGVkRXZlbnRRdWV1ZTo6aW5zdGFuY2UoKS0+ZW5xdWV1ZUV2ZW50KGV2ZW50KTsKIH0KIAot
Ym9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoTW91c2VFdmVudChOb2RlKiBub2RlLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwKLSAgICBpbnQgZGV0YWlsLCBOb2RlKiByZWxhdGVkVGFyZ2V0KQotewotICAgIEFTU0VSVCgh
ZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBFdmVudERpc3BhdGNoZXIgZGlzcGF0Y2hl
cihub2RlKTsKLQotICAgIEludFBvaW50IGNvbnRlbnRzUG9zOwotICAgIGlmIChGcmFtZVZpZXcq
IHZpZXcgPSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCkpCi0gICAgICAgIGNvbnRlbnRzUG9zID0g
dmlldy0+d2luZG93VG9Db250ZW50cyhldmVudC5wb3MoKSk7Ci0KLSAgICBzaG9ydCBidXR0b24g
PSBldmVudC5idXR0b24oKTsKLQotICAgIEFTU0VSVChldmVudC5ldmVudFR5cGUoKSA9PSBNb3Vz
ZUV2ZW50TW92ZWQgfHwgYnV0dG9uICE9IE5vQnV0dG9uKTsKLQotICAgIHJldHVybiBkaXNwYXRj
aGVyLmRpc3BhdGNoTW91c2VFdmVudChldmVudFR5cGUsIGJ1dHRvbiwgZGV0YWlsLAotICAgICAg
ICBjb250ZW50c1Bvcy54KCksIGNvbnRlbnRzUG9zLnkoKSwgZXZlbnQuZ2xvYmFsWCgpLCBldmVu
dC5nbG9iYWxZKCksCi0gICAgICAgIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5KCksIGV2
ZW50LnNoaWZ0S2V5KCksIGV2ZW50Lm1ldGFLZXkoKSwKLSAgICAgICAgZmFsc2UsIHJlbGF0ZWRU
YXJnZXQsIDApOwotfQotCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTaW11bGF0ZWRD
bGljayhOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgYm9vbCBzZW5kTW91c2VF
dmVudHMsIGJvb2wgc2hvd1ByZXNzZWRMb29rKQotewotICAgIEV2ZW50RGlzcGF0Y2hlciBkaXNw
YXRjaGVyKG5vZGUpOwotCi0gICAgaWYgKCFnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNr
cykKLSAgICAgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSBuZXcgSGFzaFNl
dDxOb2RlKj47Ci0gICAgZWxzZSBpZiAoZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3Mt
PmNvbnRhaW5zKG5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnTm9kZXNEaXNwYXRjaGlu
Z1NpbXVsYXRlZENsaWNrcy0+YWRkKG5vZGUpOwotCi0gICAgLy8gc2VuZCBtb3VzZWRvd24gYW5k
IG1vdXNldXAgYmVmb3JlIHRoZSBjbGljaywgaWYgcmVxdWVzdGVkCi0gICAgaWYgKHNlbmRNb3Vz
ZUV2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQo
ZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBldmVudC5nZXQoKSk7Ci0gICAgbm9kZS0+c2V0
QWN0aXZlKHRydWUsIHNob3dQcmVzc2VkTG9vayk7Ci0gICAgaWYgKHNlbmRNb3VzZUV2ZW50cykK
LSAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCwgZXZlbnQuZ2V0KCkpOwotICAgIG5vZGUtPnNldEFjdGl2ZShmYWxz
ZSk7Ci0KLSAgICAvLyBhbHdheXMgc2VuZCBjbGljawotICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2hT
aW11bGF0ZWRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBldmVudCk7Ci0KLSAg
ICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+cmVtb3ZlKG5vZGUpOwotfQotCiBp
bmxpbmUgc3RhdGljIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCiB7CiAgICAgcmV0dXJuIGV2ZW50LmdyYW51bGFyaXR5
KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCA/IFdoZWVsRXZlbnQ6OlBhZ2UgOiBXaGVlbEV2
ZW50OjpQaXhlbDsKQEAgLTIzNyw2ICsxOTAsMTEgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6Omdl
dEV2ZW50QW5jZXN0b3JzKEV2ZW50VGFyZ2V0KiBvcmlnaW5hbFRhcmdldCwgRXZlbnREaXNwYXQK
ICAgICB9CiB9CiAKK05vZGUqIEV2ZW50RGlzcGF0Y2hlcjo6bm9kZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbm9kZS5nZXQoKTsKK30KKwogYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7CiAgICAgZXZlbnQtPnNldFRhcmdldChl
dmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKQEAgLTMy
OSwxOSArMjg3LDI1IEBAIGRvbmVXaXRoRGVmYXVsdDoKIAogICAgIHJldHVybiAhZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKTsKIH0KLQotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoTW91
c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGJ1dHRvbiwgaW50IGRl
dGFpbCwKLSAgICBpbnQgcGFnZVgsIGludCBwYWdlWSwgaW50IHNjcmVlblgsIGludCBzY3JlZW5Z
LAotICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0
YUtleSwKLSAgICBib29sIGlzU2ltdWxhdGVkLCBOb2RlKiByZWxhdGVkVGFyZ2V0QXJnLCBQYXNz
UmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQpCitib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hNb3VzZUV2ZW50KE5vZGUqIG5vZGUsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZl
bnQsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLAorICAgIGludCBkZXRhaWwsIE5vZGUq
IHJlbGF0ZWRUYXJnZXRBcmcpCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVu
KCkpOwotICAgIGlmIChtX25vZGUtPmRpc2FibGVkKCkpIC8vIERvbid0IGV2ZW4gc2VuZCBET00g
ZXZlbnRzIGZvciBkaXNhYmxlZCBjb250cm9scy4uCisgICAgaWYgKG5vZGUtPmRpc2FibGVkKCkp
IC8vIERvbid0IGV2ZW4gc2VuZCBET00gZXZlbnRzIGZvciBkaXNhYmxlZCBjb250cm9scy4uCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKGV2ZW50VHlwZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gU2hvdWxkbid0IGhhcHBlbi4KIAorICAgIEV2ZW50RGlzcGF0
Y2hlciBkaXNwYXRjaGVyKG5vZGUpOworCisgICAgSW50UG9pbnQgY29udGVudHNQb3M7CisgICAg
aWYgKEZyYW1lVmlldyogdmlldyA9IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKSkKKyAgICAgICAg
Y29udGVudHNQb3MgPSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LnBvcygpKTsKKworICAg
IEFTU0VSVChldmVudC5ldmVudFR5cGUoKSA9PSBNb3VzZUV2ZW50TW92ZWQgfHwgZXZlbnQuYnV0
dG9uKCkgIT0gTm9CdXR0b24pOworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGluIG1v
dXNlIGV2ZW50IGNvbnN0cnVjdG9yLgogICAgIGJvb2wgY2FuY2VsYWJsZSA9IGV2ZW50VHlwZSAh
PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQ7CiAKICAgICBib29sIHN3YWxsb3dFdmVudCA9
IGZhbHNlOwpAQCAtMzQ5LDI2ICszMTMsMjYgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGJ1dHQKICAg
ICAvLyBBdHRlbXB0aW5nIHRvIGRpc3BhdGNoIHdpdGggYSBub24tRXZlbnRUYXJnZXQgcmVsYXRl
ZFRhcmdldCBjYXVzZXMgdGhlIHJlbGF0ZWRUYXJnZXQgdG8gYmUgc2lsZW50bHkgaWdub3JlZC4K
ICAgICBSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCA9IHB1bGxPdXRPZlNoYWRvdyhyZWxhdGVk
VGFyZ2V0QXJnKTsKIAotICAgIGludCBhZGp1c3RlZFBhZ2VYID0gcGFnZVg7Ci0gICAgaW50IGFk
anVzdGVkUGFnZVkgPSBwYWdlWTsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9ub2RlLT5kb2N1
bWVudCgpLT5mcmFtZSgpKSB7CisgICAgaW50IGFkanVzdGVkUGFnZVggPSBjb250ZW50c1Bvcy54
KCk7CisgICAgaW50IGFkanVzdGVkUGFnZVkgPSBjb250ZW50c1Bvcy55KCk7CisgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgZmxvYXQg
cGFnZVpvb20gPSBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKTsKICAgICAgICAgaWYgKHBhZ2Vab29t
ICE9IDEuMGYpIHsKICAgICAgICAgICAgIC8vIEFkanVzdCBvdXIgcGFnZVggYW5kIHBhZ2VZIHRv
IGFjY291bnQgZm9yIHRoZSBwYWdlIHpvb20uCi0gICAgICAgICAgICBhZGp1c3RlZFBhZ2VYID0g
bHJvdW5kZihwYWdlWCAvIHBhZ2Vab29tKTsKLSAgICAgICAgICAgIGFkanVzdGVkUGFnZVkgPSBs
cm91bmRmKHBhZ2VZIC8gcGFnZVpvb20pOworICAgICAgICAgICAgYWRqdXN0ZWRQYWdlWCA9IGxy
b3VuZGYoY29udGVudHNQb3MueCgpIC8gcGFnZVpvb20pOworICAgICAgICAgICAgYWRqdXN0ZWRQ
YWdlWSA9IGxyb3VuZGYoY29udGVudHNQb3MueSgpIC8gcGFnZVpvb20pOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50Ojpj
cmVhdGUoZXZlbnRUeXBlLAotICAgICAgICB0cnVlLCBjYW5jZWxhYmxlLCBtX25vZGUtPmRvY3Vt
ZW50KCktPmRlZmF1bHRWaWV3KCksCi0gICAgICAgIGRldGFpbCwgc2NyZWVuWCwgc2NyZWVuWSwg
YWRqdXN0ZWRQYWdlWCwgYWRqdXN0ZWRQYWdlWSwKLSAgICAgICAgY3RybEtleSwgYWx0S2V5LCBz
aGlmdEtleSwgbWV0YUtleSwgYnV0dG9uLAotICAgICAgICByZWxhdGVkVGFyZ2V0LCAwLCBpc1Np
bXVsYXRlZCk7Ci0gICAgbW91c2VFdmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdF
dmVudC5nZXQoKSk7Ci0gICAgbW91c2VFdmVudC0+c2V0QWJzb2x1dGVMb2NhdGlvbihJbnRQb2lu
dChwYWdlWCwgcGFnZVkpKTsKLQotICAgIGRpc3BhdGNoRXZlbnQobW91c2VFdmVudCk7CisgICAg
ICAgIHRydWUsIGNhbmNlbGFibGUsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCisg
ICAgICAgIGRldGFpbCwgZXZlbnQuZ2xvYmFsWCgpLCBldmVudC5nbG9iYWxZKCksIGFkanVzdGVk
UGFnZVgsIGFkanVzdGVkUGFnZVksCisgICAgICAgIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0
S2V5KCksIGV2ZW50LnNoaWZ0S2V5KCksIGV2ZW50Lm1ldGFLZXkoKSwgZXZlbnQuYnV0dG9uKCks
CisgICAgICAgIHJlbGF0ZWRUYXJnZXQsICAwLCBmYWxzZSk7CisgICAgLy8gRklYTUU6IFNob3Vs
ZCB0aGlzIGJlIGFkanVzdGVkUGFnZVgsIGFkanVzdGVkUGFnZVk/CisgICAgbW91c2VFdmVudC0+
c2V0QWJzb2x1dGVMb2NhdGlvbihJbnRQb2ludChjb250ZW50c1Bvcy54KCksIGNvbnRlbnRzUG9z
LnkoKSkpOworCisgICAgZGlzcGF0Y2hlci5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpOwogICAg
IGJvb2wgZGVmYXVsdEhhbmRsZWQgPSBtb3VzZUV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwogICAg
IGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IG1vdXNlRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsK
ICAgICBpZiAoZGVmYXVsdEhhbmRsZWQgfHwgZGVmYXVsdFByZXZlbnRlZCkKQEAgLTM3OSwxNCAr
MzQzLDEzIEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGludCBidXR0CiAgICAgLy8gYXMgYSBzZXBhcmF0ZSBl
dmVudCBpbiBvdGhlciBET00tY29tcGxpYW50IGJyb3dzZXJzIGxpa2UgRmlyZWZveCwgYW5kIHNv
IHdlIGRvIHRoZSBzYW1lLgogICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmNsaWNr
RXZlbnQgJiYgZGV0YWlsID09IDIpIHsKICAgICAgICAgUmVmUHRyPEV2ZW50PiBkb3VibGVDbGlj
a0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50LAot
ICAgICAgICAgICAgdHJ1ZSwgY2FuY2VsYWJsZSwgbV9ub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0
VmlldygpLAotICAgICAgICAgICAgZGV0YWlsLCBzY3JlZW5YLCBzY3JlZW5ZLCBhZGp1c3RlZFBh
Z2VYLCBhZGp1c3RlZFBhZ2VZLAotICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtl
eSwgbWV0YUtleSwgYnV0dG9uLAotICAgICAgICAgICAgcmVsYXRlZFRhcmdldCwgMCwgaXNTaW11
bGF0ZWQpOwotICAgICAgICBkb3VibGVDbGlja0V2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodW5k
ZXJseWluZ0V2ZW50LmdldCgpKTsKKyAgICAgICAgICAgIHRydWUsIGNhbmNlbGFibGUsIG5vZGUt
PmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCisgICAgICAgICAgICBkZXRhaWwsIGV2ZW50Lmds
b2JhbFgoKSwgZXZlbnQuZ2xvYmFsWSgpLCBhZGp1c3RlZFBhZ2VYLCBhZGp1c3RlZFBhZ2VZLAor
ICAgICAgICAgICAgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRLZXkoKSwgZXZlbnQuc2hpZnRL
ZXkoKSwgZXZlbnQubWV0YUtleSgpLCBldmVudC5idXR0b24oKSwKKyAgICAgICAgICAgIHJlbGF0
ZWRUYXJnZXQsIDAsIGZhbHNlKTsKICAgICAgICAgaWYgKGRlZmF1bHRIYW5kbGVkKQogICAgICAg
ICAgICAgZG91YmxlQ2xpY2tFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgZGlz
cGF0Y2hFdmVudChkb3VibGVDbGlja0V2ZW50KTsKKyAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRj
aEV2ZW50KGRvdWJsZUNsaWNrRXZlbnQpOwogICAgICAgICBpZiAoZG91YmxlQ2xpY2tFdmVudC0+
ZGVmYXVsdEhhbmRsZWQoKSB8fCBkb3VibGVDbGlja0V2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkp
CiAgICAgICAgICAgICBzd2FsbG93RXZlbnQgPSB0cnVlOwogICAgIH0KQEAgLTM5NCwyNiArMzU3
LDYgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGJ1dHQKICAgICByZXR1cm4gc3dhbGxvd0V2ZW50Owog
fQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5n
RXZlbnQpCi17Ci0gICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotCi0gICAg
Ym9vbCBjdHJsS2V5ID0gZmFsc2U7Ci0gICAgYm9vbCBhbHRLZXkgPSBmYWxzZTsKLSAgICBib29s
IHNoaWZ0S2V5ID0gZmFsc2U7Ci0gICAgYm9vbCBtZXRhS2V5ID0gZmFsc2U7Ci0gICAgaWYgKFVJ
RXZlbnRXaXRoS2V5U3RhdGUqIGtleVN0YXRlRXZlbnQgPSBmaW5kRXZlbnRXaXRoS2V5U3RhdGUo
dW5kZXJseWluZ0V2ZW50LmdldCgpKSkgewotICAgICAgICBjdHJsS2V5ID0ga2V5U3RhdGVFdmVu
dC0+Y3RybEtleSgpOwotICAgICAgICBhbHRLZXkgPSBrZXlTdGF0ZUV2ZW50LT5hbHRLZXkoKTsK
LSAgICAgICAgc2hpZnRLZXkgPSBrZXlTdGF0ZUV2ZW50LT5zaGlmdEtleSgpOwotICAgICAgICBt
ZXRhS2V5ID0ga2V5U3RhdGVFdmVudC0+bWV0YUtleSgpOwotICAgIH0KLQotICAgIC8vIExpa2Ug
R2Vja28sIHdlIGp1c3QgcGFzcyAwIGZvciBldmVyeXRoaW5nIHdoZW4gd2UgbWFrZSBhIGZha2Ug
bW91c2UgZXZlbnQuCi0gICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgaW5zdGVhZCBnaXZlcyB0aGUg
Y3VycmVudCBtb3VzZSBwb3NpdGlvbiBhbmQgc3RhdGUuCi0gICAgZGlzcGF0Y2hNb3VzZUV2ZW50
KGV2ZW50VHlwZSwgMCwgMCwgMCwgMCwgMCwgMCwgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwg
bWV0YUtleSwgdHJ1ZSwgMCwgdW5kZXJseWluZ0V2ZW50KTsKLX0KLQogY29uc3QgRXZlbnRDb250
ZXh0KiBFdmVudERpc3BhdGNoZXI6OnRvcEV2ZW50Q29udGV4dCgpCiB7CiAgICAgcmV0dXJuIG1f
YW5jZXN0b3JzLmlzRW1wdHkoKSA/IDAgOiAmbV9hbmNlc3RvcnMubGFzdCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDM3MmM2NzhlYjJjMDViNzZkNDMwZmViZTMyYTg5
MGVlNzAwNmI5YTUuLjE0MDY2OGYwYWYyNGIxMjIxNGI3N2ZlOThlNTg2NmY2ZGFkNjdjMTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTUxLDEwICs1MSwxMCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlKiwgUGFzc1JlZlB0
cjxFdmVudD4pOwogCiAgICAgc3RhdGljIGJvb2wgZGlzcGF0Y2hNb3VzZUV2ZW50KE5vZGUqLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
aW50IGNsaWNrQ291bnQgPSAwLCBOb2RlKiByZWxhdGVkVGFyZ2V0ID0gMCk7Ci0gICAgc3RhdGlj
IHZvaWQgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiwgUGFzc1JlZlB0cjxFdmVudD4gdW5k
ZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cyA9IGZhbHNlLCBib29sIHNob3dQcmVz
c2VkTG9vayA9IHRydWUpOwogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoV2hlZWxFdmVudChOb2Rl
KiwgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKICAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pOworICAgIE5vZGUqIG5vZGUoKSBjb25zdDsKIHByaXZhdGU6CiAgICAgRXZl
bnREaXNwYXRjaGVyKE5vZGUqKTsKIApAQCAtNjYsNyArNjYsNiBAQCBwcml2YXRlOgogICAgIGJv
b2wgZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQg
YnV0dG9uLCBpbnQgZGV0YWlsLAogICAgICAgICBpbnQgcGFnZVgsIGludCBwYWdlWSwgaW50IHNj
cmVlblgsIGludCBzY3JlZW5ZLCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0
S2V5LCBib29sIG1ldGFLZXksCiAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQsIE5vZGUqIHJlbGF0
ZWRUYXJnZXRBcmcsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCk7Ci0gICAgdm9p
ZCBkaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCk7CiAKICAgICBWZWN0b3I8RXZl
bnRDb250ZXh0PiBtX2FuY2VzdG9yczsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Nb3VzZUV2ZW50LmgKaW5kZXggNzQ1NGIwNDkyZDZiYTc2OWZjZTllNGNhMGJmNjg4ZjQ4MTE4
ZGU1YS4uNmUyYWY4YTE5OTdkODdiOWU5ODUwZjRlOGZiNmU0NDM0ZjVmYWFjYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTW91c2VFdmVudC5oCkBAIC02OCwxMyArNjgsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsKICAgICAgICAgdmlydHVh
bCBpbnQgd2hpY2goKSBjb25zdDsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIE1vdXNlRXZlbnQo
KTsKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPEFic3Ry
YWN0Vmlldz4sCiAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVlblgsIGlu
dCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBwYWdlWSwKICAgICAgICAgICAgICAgICAgICBib29s
IGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksIHVuc2ln
bmVkIHNob3J0IGJ1dHRvbiwKICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEV2ZW50VGFy
Z2V0PiByZWxhdGVkVGFyZ2V0LCBQYXNzUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkLCBib29s
IGlzU2ltdWxhdGVkKTsKIAorICAgIHByaXZhdGU6CisgICAgICAgIE1vdXNlRXZlbnQoKTsKKwog
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBtX2J1dHRvbjsKICAgICAgICAgYm9vbCBtX2J1dHRvbkRv
d247CiAgICAgICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCmluZGV4IDllY2JjY2I1Y2Q3Y2VjOGIzYjg5MzExYjExMzE2MWQ1MjE0OGI1MjAuLmMw
NGY5MGQ1OTUwYjI3ZGQ3YTI1NDJmMjJmYmVhNTZkZTZmMGYxOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
QEAgLTc2LDYgKzc2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2Nv
cGVkRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJTaW11bGF0ZWRDbGlja0V2ZW50LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JOb2RlTGlzdC5oIgog
I2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKQEAg
LTI2NTAsNyArMjY1MSw3IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIGNvbnN0IEF0b21pY1N0cmluCiAKIHZvaWQgTm9kZTo6
ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgYm9vbCBzZW5k
TW91c2VFdmVudHMsIGJvb2wgc2hvd1ByZXNzZWRMb29rKQogewotICAgIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayh0aGlzLCBldmVudCwgc2VuZE1vdXNlRXZlbnRzLCBz
aG93UHJlc3NlZExvb2spOworICAgIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlz
LCBTaW11bGF0ZWRDbGlja0V2ZW50OjpjcmVhdGUoZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwg
ZXZlbnQsIHNlbmRNb3VzZUV2ZW50cywgc2hvd1ByZXNzZWRMb29rKSk7CiB9CiAKIHZvaWQgTm9k
ZTo6ZGlzcGF0Y2hXaGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW11bGF0ZWRDbGlja0V2ZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaW11bGF0ZWRDbGlja0V2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40M2RhYTQ0MTlkNWRm
MWUwMWQ5MWI2MDZhMWQ4NGYwYzc2YjFjMDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXVsYXRlZENsaWNrRXZlbnQuY3BwCkBAIC0wLDAgKzEsMTA3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAg
ICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXVsYXRlZENsaWNr
RXZlbnQuaCIKKworI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIk1vdXNl
RXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaW11bGF0ZWRNb3VzZUV2
ZW50IDogcHVibGljIE1vdXNlRXZlbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNpbXVsYXRlZE1vdXNlRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5n
RXZlbnQpOworICAgIHZpcnR1YWwgflNpbXVsYXRlZE1vdXNlRXZlbnQoKTsKKworcHJpdmF0ZToK
KyAgICBTaW11bGF0ZWRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQ
YXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVu
dCk7Cit9OworCitQYXNzUmVmUHRyPFNpbXVsYXRlZE1vdXNlRXZlbnQ+IFNpbXVsYXRlZE1vdXNl
RXZlbnQ6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxB
YnN0cmFjdFZpZXc+IHZpZXcsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNpbXVsYXRlZE1vdXNlRXZlbnQoZXZlbnRUeXBlLCB2
aWV3LCB1bmRlcmx5aW5nRXZlbnQpKTsKK30KKworU2ltdWxhdGVkTW91c2VFdmVudDo6flNpbXVs
YXRlZE1vdXNlRXZlbnQoKQoreworfQorCitTaW11bGF0ZWRNb3VzZUV2ZW50OjpTaW11bGF0ZWRN
b3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEFic3Ry
YWN0Vmlldz4gdmlldywgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KQorICAgIDog
TW91c2VFdmVudChldmVudFR5cGUsIHRydWUsIHRydWUsIHZpZXcsIDAsIDAsIDAsIDAsIDAsIGZh
bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCAwLCAwLCB0cnVlKQoreworICAgIGlmIChVSUV2
ZW50V2l0aEtleVN0YXRlKiBrZXlTdGF0ZUV2ZW50ID0gZmluZEV2ZW50V2l0aEtleVN0YXRlKHVu
ZGVybHlpbmdFdmVudC5nZXQoKSkpIHsKKyAgICAgICAgbV9jdHJsS2V5ID0ga2V5U3RhdGVFdmVu
dC0+Y3RybEtleSgpOworICAgICAgICBtX2FsdEtleSA9IGtleVN0YXRlRXZlbnQtPmFsdEtleSgp
OworICAgICAgICBtX3NoaWZ0S2V5ID0ga2V5U3RhdGVFdmVudC0+c2hpZnRLZXkoKTsKKyAgICAg
ICAgbV9tZXRhS2V5ID0ga2V5U3RhdGVFdmVudC0+bWV0YUtleSgpOworICAgIH0KKyAgICBzZXRV
bmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50KTsKK30KKworc3RhdGljIEhhc2hTZXQ8Tm9k
ZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IDA7CisKK1Bhc3NSZWZQdHI8
U2ltdWxhdGVkQ2xpY2tFdmVudD4gU2ltdWxhdGVkQ2xpY2tFdmVudDo6Y3JlYXRlKFBhc3NSZWZQ
dHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQs
IGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9vaykKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNpbXVsYXRlZENsaWNrRXZlbnQodmlldywgdW5kZXJseWluZ0V2ZW50
LCBzZW5kTW91c2VFdmVudHMsIHNob3dQcmVzc2VkTG9vaykpOworfQorCitTaW11bGF0ZWRDbGlj
a0V2ZW50OjpTaW11bGF0ZWRDbGlja0V2ZW50KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3
LCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRz
LCBib29sIHNob3dQcmVzc2VkTG9vaykKKyAgICA6IFVJRXZlbnQoZXZlbnROYW1lcygpLmNsaWNr
RXZlbnQsIGZhbHNlLCBmYWxzZSwgdmlldywgMCkKKyAgICAsIG1fc2VuZE1vdXNlRXZlbnRzKHNl
bmRNb3VzZUV2ZW50cykKKyAgICAsIG1fc2hvd1ByZXNzZWRMb29rKHNob3dQcmVzc2VkTG9vaykK
K3sKKyAgICBzZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50KTsKK30KKworU2ltdWxh
dGVkQ2xpY2tFdmVudDo6flNpbXVsYXRlZENsaWNrRXZlbnQoKQoreworfQorCitib29sIFNpbXVs
YXRlZENsaWNrRXZlbnQ6OmRpc3BhdGNoKEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikKK3sK
KyAgICBpZiAoIWdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzKQorICAgICAgICBnTm9k
ZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IG5ldyBIYXNoU2V0PE5vZGUqPjsKKyAgICBl
bHNlIGlmIChnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+Y29udGFpbnMoZGlzcGF0
Y2hlci0+bm9kZSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBnTm9kZXNEaXNwYXRj
aGluZ1NpbXVsYXRlZENsaWNrcy0+YWRkKGRpc3BhdGNoZXItPm5vZGUoKSk7CisKKyAgICAvLyBz
ZW5kIG1vdXNlZG93biBhbmQgbW91c2V1cCBiZWZvcmUgdGhlIGNsaWNrLCBpZiByZXF1ZXN0ZWQK
KyAgICBpZiAobV9zZW5kTW91c2VFdmVudHMpCisgICAgICAgIGRpc3BhdGNoZXItPmRpc3BhdGNo
RXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25F
dmVudCwgdmlldygpLCB1bmRlcmx5aW5nRXZlbnQoKSkpOworICAgIGRpc3BhdGNoZXItPm5vZGUo
KS0+c2V0QWN0aXZlKHRydWUsIG1fc2hvd1ByZXNzZWRMb29rKTsKKyAgICAgICAgaWYgKG1fc2Vu
ZE1vdXNlRXZlbnRzKQorICAgICAgICBkaXNwYXRjaGVyLT5kaXNwYXRjaEV2ZW50KFNpbXVsYXRl
ZE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCB2aWV3KCksIHVu
ZGVybHlpbmdFdmVudCgpKSk7CisgICAgZGlzcGF0Y2hlci0+bm9kZSgpLT5zZXRBY3RpdmUoZmFs
c2UpOworCisgICAgLy8gYWx3YXlzIHNlbmQgY2xpY2sKKyAgICBkaXNwYXRjaGVyLT5kaXNwYXRj
aEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCwgdmlldygpLCB1bmRlcmx5aW5nRXZlbnQoKSkpOworCisgICAgZ05vZGVzRGlzcGF0Y2hpbmdT
aW11bGF0ZWRDbGlja3MtPnJlbW92ZShkaXNwYXRjaGVyLT5ub2RlKCkpOworICAgIHJldHVybiB0
cnVlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltdWxhdGVkQ2xp
Y2tFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXVsYXRlZENsaWNrRXZlbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lZWM0MGQ5MDUzZWYzMjFmZTM3OGVjNzA3MjAwZTQzZjJmYTc3OGY1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXVsYXRlZENsaWNrRXZlbnQuaApAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICog
Q29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
IChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTaW11bGF0ZWRDbGlja0V2ZW50
X2gKKyNkZWZpbmUgU2ltdWxhdGVkQ2xpY2tFdmVudF9oCisKKyNpbmNsdWRlICJVSUV2ZW50Lmgi
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBTaW11bGF0ZWRDbGlja0V2ZW50IDogcHVibGljIFVJRXZlbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNpbXVsYXRlZENsaWNrRXZlbnQ+IGNyZWF0ZShQYXNzUmVmUHRyPEFi
c3RyYWN0Vmlldz4sIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCwgYm9vbCBzZW5k
TW91c2VFdmVudHMsIGJvb2wgc2hvd1ByZXNzZWRMb29rKTsKKworcHJpdmF0ZToKKyAgICBTaW11
bGF0ZWRDbGlja0V2ZW50KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgUGFzc1JlZlB0cjxFdmVu
dD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3Nl
ZExvb2spOworICAgIHZpcnR1YWwgflNpbXVsYXRlZENsaWNrRXZlbnQoKTsKKworICAgIHZpcnR1
YWwgYm9vbCBkaXNwYXRjaChFdmVudERpc3BhdGNoZXIqKTsKKworICAgIGJvb2wgbV9zZW5kTW91
c2VFdmVudHMgOiAxOworICAgIGJvb2wgbV9zaG93UHJlc3NlZExvb2sgOiAxOworfTsKKworfQor
CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87418</attachid>
            <date>2011-03-29 15:33:09 -0700</date>
            <delta_ts>2011-03-29 16:05:58 -0700</delta_ts>
            <desc>Rebased to ToT and sorted xcodeproj.</desc>
            <filename>bug-57391-20110329153308.patch</filename>
            <type>text/plain</type>
            <size>30059</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODIzMzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IGVkMzNhY2VhZWU0NDE1
NmQ4YjUyNzEzMzdmYzFmMmEwYzIwZTI2NTAuLjc5MjQ0OGE1ZTU5YjMyYTRlOWMzMDEzMWM4MDNi
MDg1MzA3MjllM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtMTc1LDYgKzE3NSw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCWRvbS9TY3JpcHRSdW5uZXIuY3BwIFwKIAlk
b20vU2VsZWN0RWxlbWVudC5jcHAgXAogCWRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcCBcCisJZG9t
L1NpbXVsYXRlZENsaWNrRXZlbnQuY3BwIFwKIAlkb20vU3BhY2VTcGxpdFN0cmluZy5jcHAgXAog
CWRvbS9TdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwIFwKIAlkb20vU3RhdGljTm9kZUxpc3QuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODA3ZjU1ZGRjMzdmNWRjMDc4MTJhNzlkNWUxMzEy
NWY4NTM0NWRiYi4uMDgzMWY0OGYyMDE0MDQ0ZmFmZDIwY2I5Y2ZjNDE4N2U0NmU2MDVlYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTYwMyw2ICs2MDMsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgZG9tL1NjcmlwdFJ1bm5lci5jcHAKICAgICBkb20vU2VsZWN0RWxlbWVudC5jcHAKICAg
ICBkb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAKKyAgICBkb20vU2ltdWxhdGVkQ2xpY2tFdmVudC5j
cHAKICAgICBkb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKICAgICBkb20vU3RhdGljSGFzaFNldE5v
ZGVMaXN0LmNwcAogICAgIGRvbS9TdGF0aWNOb2RlTGlzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwOTEy
NjZiNzcwNmI1MmNkNzczMTcwZTg4Y2M2YzJhNmFkNjgwNGNiLi5jNjkzYzNkODUyYzhiNDZmNmM3
OWJmOTk5ZDk3MGYzNjFmODg5MmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzYgQEAKIDIwMTEt
MDMtMjkgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAorICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgU2ltdWxh
dGVkQ2xpY2tFdmVudCBhbmQgbW92ZSBhbGwgc2ltdWxhdGVkLWNsaWNrIGRpc3BhdGNoIGNvZGUg
dGhlcmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NzM5MQorCisgICAgICAgIFRoZSBTaW11bGF0ZWRDbGlja0V2ZW50LCBpbnN0ZWFkIG9mIGRpc3Bh
dGNoaW5nIHNlbGYsIGZpcmVzIG9uZSBvciBtb3JlIFNpbXVsYXRlZE1vdXNlRXZlbnRzLgorCisg
ICAgICAgIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIEFuZHJvaWQubWs6IEFkZGVkIFNpbXVsYXRlZENsaWNrRXZlbnQgdG8gYnVp
bGQgc3lzdGVtLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKyAg
ICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogRGl0dG8uCisgICAgICAgICogZG9tL0RPTUFsbEluT25lLmNwcDogRGl0dG8uCisg
ICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dERpc3BhdGNoZXI6Om5vZGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogQ29tYmluZWQgdHdvIGhlbHBlciBmdW5jdGlvbnMK
KyAgICAgICAgICAgIGludG8gb25lLCBub3cgdGhhdCB0aGUgc2ltdWxhdGVkIGNsaWNrIGhhbmRs
aW5nIGRvZXNuJ3QgbmVlZCBvbmUuCisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5oOiBV
cGRhdGVkIGRlY2xzLgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6IE1hZGUgY29uc3RydWN0
b3IgcHJvdGVjdGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2spOiBDaGFuZ2VkIHRvIHVzZSBkaXNwYXRjaEV2
ZW50LCBub3QKKyAgICAgICAgICAgIGEgc3BlY2lhbGl6ZWQgbWV0aG9kLgorICAgICAgICAqIGRv
bS9TaW11bGF0ZWRDbGlja0V2ZW50LmNwcDogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXVsYXRl
ZENsaWNrRXZlbnQuaDogQWRkZWQuCisKKzIwMTEtMDMtMjkgIERpbWl0cmkgR2xhemtvdiAgPGRn
bGF6a292QGNocm9taXVtLm9yZz4KKwogICAgICAgICBTb3J0ZWQgWENvZGUgcHJvamVjdC4gSXQn
cyBnb3R0ZW4gcXVpdGUgb3V0IG9mIHNvcnRzLgogCiAgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOiBSYW4gc29ydC1YQ29kZS1wcm9qZWN0LWZpbGUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCmluZGV4IDU4MzY4YmRkOWYyODZkN2ExYjJkOGM2YmVjNGU5ZTNhYjhkMTQwZGYu
LjU1YTgwMmVkYzM5MzlkNjI3YTI5NmMzOWI1YWYyMDMzMWEwZTFkYmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCkBAIC0xMzE3LDYgKzEzMTcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL2RvbS9TZWxlY3RFbGVtZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9TZWxl
Y3Rvck5vZGVMaXN0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3Qu
aCBcCisJU291cmNlL1dlYkNvcmUvZG9tL1NpbXVsYXRlZENsaWNrRXZlbnQuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltdWxhdGVkQ2xpY2tFdmVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9k
b20vU3BhY2VTcGxpdFN0cmluZy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0
U3RyaW5nLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4Zjg5Y2RhMTY3ZjdhNTE3ZjE0M2I2MWVmOTJmYmM5ODVk
Mzc0MDc0Li5kYmQzZTI2YmMyOGE3ZmVjYzUzYmUyNmQ2OTUxNzAwN2JlNzQ5NjdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC0yNTA5LDYgKzI1MDksOCBAQAogICAgICAgICAgICAgJ2RvbS9TZWxlY3RF
bGVtZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcCcsCiAgICAg
ICAgICAgICAnZG9tL1NlbGVjdG9yTm9kZUxpc3QuaCcsCisgICAgICAgICAgICAnZG9tL1NpbXVs
YXRlZENsaWNrRXZlbnQuY3BwJywKKyAgICAgICAgICAgICdkb20vU2ltdWxhdGVkQ2xpY2tFdmVu
dC5oJywKICAgICAgICAgICAgICdkb20vU3BhY2VTcGxpdFN0cmluZy5jcHAnLAogICAgICAgICAg
ICAgJ2RvbS9TdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwJywKICAgICAgICAgICAgICdkb20vU3Rh
dGljSGFzaFNldE5vZGVMaXN0LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBkMmQyODA5MDM2MjkyYTgx
YjA1NDU2OTc0MjIzYzdjMGViMDk2NDA0Li41NjJkNjkzZDI3NmEzMDc5MmFjNWQzZTA5NDEzM2U3
ZDE5ZDdmNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNTMyLDYgKzUzMiw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIGRvbS9TY3JpcHRSdW5uZXIuY3BwIFwKICAgICBkb20vU2VsZWN0RWxlbWVudC5jcHAg
XAogICAgIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcCBcCisgICAgZG9tL1NpbXVsYXRlZENsaWNr
RXZlbnQuY3BwIFwKICAgICBkb20vU3BhY2VTcGxpdFN0cmluZy5jcHAgXAogICAgIGRvbS9TdGF0
aWNOb2RlTGlzdC5jcHAgXAogICAgIGRvbS9TdHlsZWRFbGVtZW50LmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGRjZWIzNWRhNjU5NWRj
ZWQzMTg4NWFiNDRjYjMyNzI3MGQ1YzQ2ZGQuLmU0ODBiZTk4OWExYzJjOWFkMDYyZGI0NDc2ZjJk
OTVlMDc4YTFjMzYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC00NjUwMiw2ICs0NjUwMiw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cU2ltdWxhdGVkQ2xpY2tFdmVudC5jcHAiCisJ
CQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMy
IgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NG
TGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJ
PFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdf
QWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8
VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNl
X0xUQ0d8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJ
CTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZG9tXFNpbXVsYXRlZENsaWNrRXZlbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFNwYWNlU3BsaXRTdHJpbmcuY3BwIgogCQkJCT4K
IAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5NzBhZjQ5YzdhMWI5NDgwYzk3OTFmYTcwZjFi
Y2I4ZmY5NGY0NWQ0Li5iNzU1MzMwZGQ1OTcwODZmOGU2NDU0OTI4YWYyMmY0NWNhNDc3M2JlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC05MDAsNiArOTAwLDggQEAKIAkJNDE2RTc1QkYwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlw
dENhbGxTdGFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCAqLzsg
fTsKIAkJNDE2RTc1Q0IwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QzkwRURGOTBD
NzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5oICovOyB9OwogCQk0MTZFNzVDQzBFREY5MEM3
MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRD
YWxsRnJhbWUuY3BwICovOyB9OworCQk0MTcwRURDQTEzNDI5MzNEMDBGQTc5MkUgLyogU2ltdWxh
dGVkQ2xpY2tFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MTcwRURDODEzNDI5MzNEMDBGQTc5MkUgLyogU2ltdWxhdGVkQ2xpY2tFdmVudC5j
cHAgKi87IH07CisJCTQxNzBFRENCMTM0MjkzM0QwMEZBNzkyRSAvKiBTaW11bGF0ZWRDbGlja0V2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTcw
RURDOTEzNDI5MzNEMDBGQTc5MkUgLyogU2ltdWxhdGVkQ2xpY2tFdmVudC5oICovOyB9OwogCQk0
MTg4NUI5MzExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxODg1QjkxMTFCNkZEQTYwMDMzODNC
QiAvKiBGb3JtU3VibWlzc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTQxODg1Qjk0MTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTg4
NUI5MjExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uY3BwICovOyB9OwogCQk0MThB
MDZEMDEzM0MwNEQ1MDBDRDM3OUMgLyogRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MThBMDZDRTEzM0MwNEQ1MDBDRDM3OUMg
LyogRXZlbnREaXNwYXRjaGVyLmggKi87IH07CkBAIC03MzI4LDYgKzczMzAsOCBAQAogCQk0MTZF
NzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENhbGxTdGFjay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxNkU3NUM5MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxs
RnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUx
RCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDE3MEVEQzgxMzQyOTMzRDAwRkE3OTJFIC8qIFNpbXVsYXRlZENsaWNrRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2tFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxNzBFREM5MTM0MjkzM0QwMEZBNzkyRSAv
KiBTaW11bGF0ZWRDbGlja0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNpbXVsYXRlZENsaWNrRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE4
ODVCOTExMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1TdWJtaXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxODg1QjkyMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtU3VibWlzc2lvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxOEEwNkNFMTMzQzA0RDUwMENEMzc5QyAv
KiBFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZl
bnREaXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTM2MCw2ICsx
OTM2NCw4IEBACiAJCQkJMDg0QUVCRTMwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQu
aCAqLywKIAkJCQlCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5j
cHAgKi8sCiAJCQkJQkM3RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3Qu
aCAqLywKKwkJCQk0MTcwRURDODEzNDI5MzNEMDBGQTc5MkUgLyogU2ltdWxhdGVkQ2xpY2tFdmVu
dC5jcHAgKi8sCisJCQkJNDE3MEVEQzkxMzQyOTMzRDAwRkE3OTJFIC8qIFNpbXVsYXRlZENsaWNr
RXZlbnQuaCAqLywKIAkJCQlEMDFBMjdBQjEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0
cmluZy5jcHAgKi8sCiAJCQkJRDAxQTI3QUMxMEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3BsaXRT
dHJpbmcuaCAqLywKIAkJCQlDRUEzOTQ5QTExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNl
dE5vZGVMaXN0LmNwcCAqLywKQEAgLTIyMTU3LDYgKzIyMTYzLDcgQEAKIAkJCQk0MUQxNjhFQTEw
MjI2RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDFEMTY4RUUxMDIyNkU4OTAwOUJDODI3IC8qIFNoYXJlZFdvcmtlclRocmVhZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnRE
YXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTcwRURDQjEzNDI5MzNEMDBGQTc5MkUgLyogU2lt
dWxhdGVkQ2xpY2tFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzMjdENjAxMUEzM0EyQjAw
NEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTExQ0QwRUY4
NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxNTBGOUYxMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjQ5NTYsNiArMjQ5NjMsNyBAQAogCQkJCTE2M0U4QjEzMTE4QjNBREQw
MEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUFUU1VJLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTYz
RTg4RjcxMThBMzlEMjAwRUQ5MjMxIC8qIFNpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJBRkZDN0YwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRh
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNDE3MEVEQ0ExMzQyOTMzRDAwRkE3OTJFIC8qIFNp
bXVsYXRlZENsaWNrRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEzMjdENjExMUEzM0Ey
QjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUU5MTFD
QzBFRjg2RDQ3MDA5RDBDQUYgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0MTUwRjlGMjEyQjZFMEU3MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFs
bEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKaW5kZXggY2M0
ODg4ZjJmMzExYmM3NWI4MWE2OWU4MDY0NzFjNWQ4NTA0ODUzMy4uNjRjMjAwZjZiNWMxYjg0NmRh
ZDk2ZjczNzdkYmI0ODdkYmM5MDlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RP
TUFsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCkBA
IC0xMDgsNiArMTA4LDcgQEAKICNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuY3Bw
IgogI2luY2x1ZGUgIlNlbGVjdEVsZW1lbnQuY3BwIgogI2luY2x1ZGUgIlNlbGVjdG9yTm9kZUxp
c3QuY3BwIgorI2luY2x1ZGUgIlNpbXVsYXRlZENsaWNrRXZlbnQuY3BwIgogI2luY2x1ZGUgIlNw
YWNlU3BsaXRTdHJpbmcuY3BwIgogI2luY2x1ZGUgIlN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAi
CiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNw
YXRjaGVyLmNwcAppbmRleCAzNTZiMTZmOTU0YWI3MmMyNjkwM2RkYTAwYmJjOGNiYWFlMjFkZjgz
Li4yYzdhMGIwODRiZjRjNTQ3NTkzMWRmMDgxZmQzOGZlNTcxMDg5MTMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtNTEsOCArNTEsNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11
bGF0ZWRDbGlja3MgPSAwOwotCiBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChO
b2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKIHsKICAgICBSZWZQdHI8RXZl
bnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CkBAIC05OSw1MSArOTcsNiBAQCB2b2lkIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKICAgICBTY29wZWRFdmVudFF1ZXVlOjppbnN0YW5jZSgpLT5lbnF1ZXVlRXZlbnQoZXZl
bnQpOwogfQogCi1ib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KE5vZGUq
IG5vZGUsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLAotICAgIGludCBkZXRhaWwsIE5vZGUqIHJlbGF0ZWRUYXJnZXQpCi17Ci0g
ICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIEV2ZW50RGlzcGF0Y2hl
ciBkaXNwYXRjaGVyKG5vZGUpOwotCi0gICAgSW50UG9pbnQgY29udGVudHNQb3M7Ci0gICAgaWYg
KEZyYW1lVmlldyogdmlldyA9IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKSkKLSAgICAgICAgY29u
dGVudHNQb3MgPSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LnBvcygpKTsKLQotICAgIHNo
b3J0IGJ1dHRvbiA9IGV2ZW50LmJ1dHRvbigpOwotCi0gICAgQVNTRVJUKGV2ZW50LmV2ZW50VHlw
ZSgpID09IE1vdXNlRXZlbnRNb3ZlZCB8fCBidXR0b24gIT0gTm9CdXR0b24pOwotCi0gICAgcmV0
dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50VHlwZSwgYnV0dG9uLCBkZXRh
aWwsCi0gICAgICAgIGNvbnRlbnRzUG9zLngoKSwgY29udGVudHNQb3MueSgpLCBldmVudC5nbG9i
YWxYKCksIGV2ZW50Lmdsb2JhbFkoKSwKLSAgICAgICAgZXZlbnQuY3RybEtleSgpLCBldmVudC5h
bHRLZXkoKSwgZXZlbnQuc2hpZnRLZXkoKSwgZXZlbnQubWV0YUtleSgpLAotICAgICAgICBmYWxz
ZSwgcmVsYXRlZFRhcmdldCwgMCk7Ci19Ci0KLXZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aFNpbXVsYXRlZENsaWNrKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBib29s
IHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spCi17Ci0gICAgRXZlbnREaXNw
YXRjaGVyIGRpc3BhdGNoZXIobm9kZSk7Ci0KLSAgICBpZiAoIWdOb2Rlc0Rpc3BhdGNoaW5nU2lt
dWxhdGVkQ2xpY2tzKQotICAgICAgICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9
IG5ldyBIYXNoU2V0PE5vZGUqPjsKLSAgICBlbHNlIGlmIChnTm9kZXNEaXNwYXRjaGluZ1NpbXVs
YXRlZENsaWNrcy0+Y29udGFpbnMobm9kZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdOb2Rl
c0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5hZGQobm9kZSk7Ci0KLSAgICAvLyBzZW5kIG1v
dXNlZG93biBhbmQgbW91c2V1cCBiZWZvcmUgdGhlIGNsaWNrLCBpZiByZXF1ZXN0ZWQKLSAgICBp
ZiAoc2VuZE1vdXNlRXZlbnRzKQotICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoU2ltdWxhdGVk
TW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIGV2ZW50LmdldCgpKTsKLSAg
ICBub2RlLT5zZXRBY3RpdmUodHJ1ZSwgc2hvd1ByZXNzZWRMb29rKTsKLSAgICBpZiAoc2VuZE1v
dXNlRXZlbnRzKQotICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoU2ltdWxhdGVkTW91c2VFdmVu
dChldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBldmVudC5nZXQoKSk7Ci0gICAgbm9kZS0+c2V0
QWN0aXZlKGZhbHNlKTsKLQotICAgIC8vIGFsd2F5cyBzZW5kIGNsaWNrCi0gICAgZGlzcGF0Y2hl
ci5kaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGV2
ZW50KTsKLQotICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5yZW1vdmUobm9k
ZSk7Ci19Ci0KIGlubGluZSBzdGF0aWMgV2hlZWxFdmVudDo6R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHkoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKIHsKICAgICByZXR1cm4gZXZlbnQu
Z3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBhZ2VXaGVlbEV2ZW50ID8gV2hlZWxFdmVudDo6UGFn
ZSA6IFdoZWVsRXZlbnQ6OlBpeGVsOwpAQCAtMjM3LDYgKzE5MCwxMSBAQCB2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6Z2V0RXZlbnRBbmNlc3RvcnMoRXZlbnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0LCBF
dmVudERpc3BhdAogICAgIH0KIH0KIAorTm9kZSogRXZlbnREaXNwYXRjaGVyOjpub2RlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9ub2RlLmdldCgpOworfQorCiBib29sIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIHsKICAgICBldmVudC0+
c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQo
KSkpOwpAQCAtMzI5LDE5ICsyODcsMjUgQEAgZG9uZVdpdGhEZWZhdWx0OgogCiAgICAgcmV0dXJu
ICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwogfQotCi1ib29sIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgYnV0
dG9uLCBpbnQgZGV0YWlsLAotICAgIGludCBwYWdlWCwgaW50IHBhZ2VZLCBpbnQgc2NyZWVuWCwg
aW50IHNjcmVlblksCi0gICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtl
eSwgYm9vbCBtZXRhS2V5LAotICAgIGJvb2wgaXNTaW11bGF0ZWQsIE5vZGUqIHJlbGF0ZWRUYXJn
ZXRBcmcsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKK2Jvb2wgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoTm9kZSogbm9kZSwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBldmVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsCisgICAgaW50IGRl
dGFpbCwgTm9kZSogcmVsYXRlZFRhcmdldEFyZykKIHsKICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0
Y2hGb3JiaWRkZW4oKSk7Ci0gICAgaWYgKG1fbm9kZS0+ZGlzYWJsZWQoKSkgLy8gRG9uJ3QgZXZl
biBzZW5kIERPTSBldmVudHMgZm9yIGRpc2FibGVkIGNvbnRyb2xzLi4KKyAgICBpZiAobm9kZS0+
ZGlzYWJsZWQoKSkgLy8gRG9uJ3QgZXZlbiBzZW5kIERPTSBldmVudHMgZm9yIGRpc2FibGVkIGNv
bnRyb2xzLi4KICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoZXZlbnRUeXBlLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTaG91bGRuJ3QgaGFwcGVuLgogCisgICAg
RXZlbnREaXNwYXRjaGVyIGRpc3BhdGNoZXIobm9kZSk7CisKKyAgICBJbnRQb2ludCBjb250ZW50
c1BvczsKKyAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygp
KQorICAgICAgICBjb250ZW50c1BvcyA9IHZpZXctPndpbmRvd1RvQ29udGVudHMoZXZlbnQucG9z
KCkpOworCisgICAgQVNTRVJUKGV2ZW50LmV2ZW50VHlwZSgpID09IE1vdXNlRXZlbnRNb3ZlZCB8
fCBldmVudC5idXR0b24oKSAhPSBOb0J1dHRvbik7CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgaW4gbW91c2UgZXZlbnQgY29uc3RydWN0b3IuCiAgICAgYm9vbCBjYW5jZWxhYmxlID0g
ZXZlbnRUeXBlICE9IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudDsKIAogICAgIGJvb2wgc3dh
bGxvd0V2ZW50ID0gZmFsc2U7CkBAIC0zNDksMjYgKzMxMywyNiBAQCBib29sIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBp
bnQgYnV0dAogICAgIC8vIEF0dGVtcHRpbmcgdG8gZGlzcGF0Y2ggd2l0aCBhIG5vbi1FdmVudFRh
cmdldCByZWxhdGVkVGFyZ2V0IGNhdXNlcyB0aGUgcmVsYXRlZFRhcmdldCB0byBiZSBzaWxlbnRs
eSBpZ25vcmVkLgogICAgIFJlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0ID0gcHVsbE91dE9mU2hh
ZG93KHJlbGF0ZWRUYXJnZXRBcmcpOwogCi0gICAgaW50IGFkanVzdGVkUGFnZVggPSBwYWdlWDsK
LSAgICBpbnQgYWRqdXN0ZWRQYWdlWSA9IHBhZ2VZOwotICAgIGlmIChGcmFtZSogZnJhbWUgPSBt
X25vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICBpbnQgYWRqdXN0ZWRQYWdlWCA9IGNv
bnRlbnRzUG9zLngoKTsKKyAgICBpbnQgYWRqdXN0ZWRQYWdlWSA9IGNvbnRlbnRzUG9zLnkoKTsK
KyAgICBpZiAoRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewogICAg
ICAgICBmbG9hdCBwYWdlWm9vbSA9IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpOwogICAgICAgICBp
ZiAocGFnZVpvb20gIT0gMS4wZikgewogICAgICAgICAgICAgLy8gQWRqdXN0IG91ciBwYWdlWCBh
bmQgcGFnZVkgdG8gYWNjb3VudCBmb3IgdGhlIHBhZ2Ugem9vbS4KLSAgICAgICAgICAgIGFkanVz
dGVkUGFnZVggPSBscm91bmRmKHBhZ2VYIC8gcGFnZVpvb20pOwotICAgICAgICAgICAgYWRqdXN0
ZWRQYWdlWSA9IGxyb3VuZGYocGFnZVkgLyBwYWdlWm9vbSk7CisgICAgICAgICAgICBhZGp1c3Rl
ZFBhZ2VYID0gbHJvdW5kZihjb250ZW50c1Bvcy54KCkgLyBwYWdlWm9vbSk7CisgICAgICAgICAg
ICBhZGp1c3RlZFBhZ2VZID0gbHJvdW5kZihjb250ZW50c1Bvcy55KCkgLyBwYWdlWm9vbSk7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VFdmVudCA9IE1v
dXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsCi0gICAgICAgIHRydWUsIGNhbmNlbGFibGUsIG1f
bm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKLSAgICAgICAgZGV0YWlsLCBzY3JlZW5Y
LCBzY3JlZW5ZLCBhZGp1c3RlZFBhZ2VYLCBhZGp1c3RlZFBhZ2VZLAotICAgICAgICBjdHJsS2V5
LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBidXR0b24sCi0gICAgICAgIHJlbGF0ZWRUYXJn
ZXQsIDAsIGlzU2ltdWxhdGVkKTsKLSAgICBtb3VzZUV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQo
dW5kZXJseWluZ0V2ZW50LmdldCgpKTsKLSAgICBtb3VzZUV2ZW50LT5zZXRBYnNvbHV0ZUxvY2F0
aW9uKEludFBvaW50KHBhZ2VYLCBwYWdlWSkpOwotCi0gICAgZGlzcGF0Y2hFdmVudChtb3VzZUV2
ZW50KTsKKyAgICAgICAgdHJ1ZSwgY2FuY2VsYWJsZSwgbm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVs
dFZpZXcoKSwKKyAgICAgICAgZGV0YWlsLCBldmVudC5nbG9iYWxYKCksIGV2ZW50Lmdsb2JhbFko
KSwgYWRqdXN0ZWRQYWdlWCwgYWRqdXN0ZWRQYWdlWSwKKyAgICAgICAgZXZlbnQuY3RybEtleSgp
LCBldmVudC5hbHRLZXkoKSwgZXZlbnQuc2hpZnRLZXkoKSwgZXZlbnQubWV0YUtleSgpLCBldmVu
dC5idXR0b24oKSwKKyAgICAgICAgcmVsYXRlZFRhcmdldCwgIDAsIGZhbHNlKTsKKyAgICAvLyBG
SVhNRTogU2hvdWxkIHRoaXMgYmUgYWRqdXN0ZWRQYWdlWCwgYWRqdXN0ZWRQYWdlWT8KKyAgICBt
b3VzZUV2ZW50LT5zZXRBYnNvbHV0ZUxvY2F0aW9uKEludFBvaW50KGNvbnRlbnRzUG9zLngoKSwg
Y29udGVudHNQb3MueSgpKSk7CisKKyAgICBkaXNwYXRjaGVyLmRpc3BhdGNoRXZlbnQobW91c2VF
dmVudCk7CiAgICAgYm9vbCBkZWZhdWx0SGFuZGxlZCA9IG1vdXNlRXZlbnQtPmRlZmF1bHRIYW5k
bGVkKCk7CiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gbW91c2VFdmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpOwogICAgIGlmIChkZWZhdWx0SGFuZGxlZCB8fCBkZWZhdWx0UHJldmVudGVkKQpA
QCAtMzc5LDE0ICszNDMsMTMgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoTW91c2VF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGJ1dHQKICAgICAvLyBhcyBh
IHNlcGFyYXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMgbGlrZSBGaXJl
Zm94LCBhbmQgc28gd2UgZG8gdGhlIHNhbWUuCiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuY2xpY2tFdmVudCAmJiBkZXRhaWwgPT0gMikgewogICAgICAgICBSZWZQdHI8RXZlbnQ+
IGRvdWJsZUNsaWNrRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmRibGNs
aWNrRXZlbnQsCi0gICAgICAgICAgICB0cnVlLCBjYW5jZWxhYmxlLCBtX25vZGUtPmRvY3VtZW50
KCktPmRlZmF1bHRWaWV3KCksCi0gICAgICAgICAgICBkZXRhaWwsIHNjcmVlblgsIHNjcmVlblks
IGFkanVzdGVkUGFnZVgsIGFkanVzdGVkUGFnZVksCi0gICAgICAgICAgICBjdHJsS2V5LCBhbHRL
ZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBidXR0b24sCi0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0
LCAwLCBpc1NpbXVsYXRlZCk7Ci0gICAgICAgIGRvdWJsZUNsaWNrRXZlbnQtPnNldFVuZGVybHlp
bmdFdmVudCh1bmRlcmx5aW5nRXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgdHJ1ZSwgY2FuY2Vs
YWJsZSwgbm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKKyAgICAgICAgICAgIGRldGFp
bCwgZXZlbnQuZ2xvYmFsWCgpLCBldmVudC5nbG9iYWxZKCksIGFkanVzdGVkUGFnZVgsIGFkanVz
dGVkUGFnZVksCisgICAgICAgICAgICBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBl
dmVudC5zaGlmdEtleSgpLCBldmVudC5tZXRhS2V5KCksIGV2ZW50LmJ1dHRvbigpLAorICAgICAg
ICAgICAgcmVsYXRlZFRhcmdldCwgMCwgZmFsc2UpOwogICAgICAgICBpZiAoZGVmYXVsdEhhbmRs
ZWQpCiAgICAgICAgICAgICBkb3VibGVDbGlja0V2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwot
ICAgICAgICBkaXNwYXRjaEV2ZW50KGRvdWJsZUNsaWNrRXZlbnQpOworICAgICAgICBkaXNwYXRj
aGVyLmRpc3BhdGNoRXZlbnQoZG91YmxlQ2xpY2tFdmVudCk7CiAgICAgICAgIGlmIChkb3VibGVD
bGlja0V2ZW50LT5kZWZhdWx0SGFuZGxlZCgpIHx8IGRvdWJsZUNsaWNrRXZlbnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKSkKICAgICAgICAgICAgIHN3YWxsb3dFdmVudCA9IHRydWU7CiAgICAgfQpAQCAt
Mzk0LDI2ICszNTcsNiBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgYnV0dAogICAgIHJldHVybiBzd2Fs
bG93RXZlbnQ7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZE1v
dXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnQ+
IHVuZGVybHlpbmdFdmVudCkKLXsKLSAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4o
KSk7Ci0KLSAgICBib29sIGN0cmxLZXkgPSBmYWxzZTsKLSAgICBib29sIGFsdEtleSA9IGZhbHNl
OwotICAgIGJvb2wgc2hpZnRLZXkgPSBmYWxzZTsKLSAgICBib29sIG1ldGFLZXkgPSBmYWxzZTsK
LSAgICBpZiAoVUlFdmVudFdpdGhLZXlTdGF0ZSoga2V5U3RhdGVFdmVudCA9IGZpbmRFdmVudFdp
dGhLZXlTdGF0ZSh1bmRlcmx5aW5nRXZlbnQuZ2V0KCkpKSB7Ci0gICAgICAgIGN0cmxLZXkgPSBr
ZXlTdGF0ZUV2ZW50LT5jdHJsS2V5KCk7Ci0gICAgICAgIGFsdEtleSA9IGtleVN0YXRlRXZlbnQt
PmFsdEtleSgpOwotICAgICAgICBzaGlmdEtleSA9IGtleVN0YXRlRXZlbnQtPnNoaWZ0S2V5KCk7
Ci0gICAgICAgIG1ldGFLZXkgPSBrZXlTdGF0ZUV2ZW50LT5tZXRhS2V5KCk7Ci0gICAgfQotCi0g
ICAgLy8gTGlrZSBHZWNrbywgd2UganVzdCBwYXNzIDAgZm9yIGV2ZXJ5dGhpbmcgd2hlbiB3ZSBt
YWtlIGEgZmFrZSBtb3VzZSBldmVudC4KLSAgICAvLyBJbnRlcm5ldCBFeHBsb3JlciBpbnN0ZWFk
IGdpdmVzIHRoZSBjdXJyZW50IG1vdXNlIHBvc2l0aW9uIGFuZCBzdGF0ZS4KLSAgICBkaXNwYXRj
aE1vdXNlRXZlbnQoZXZlbnRUeXBlLCAwLCAwLCAwLCAwLCAwLCAwLCBjdHJsS2V5LCBhbHRLZXks
IHNoaWZ0S2V5LCBtZXRhS2V5LCB0cnVlLCAwLCB1bmRlcmx5aW5nRXZlbnQpOwotfQotCiBjb25z
dCBFdmVudENvbnRleHQqIEV2ZW50RGlzcGF0Y2hlcjo6dG9wRXZlbnRDb250ZXh0KCkKIHsKICAg
ICByZXR1cm4gbV9hbmNlc3RvcnMuaXNFbXB0eSgpID8gMCA6ICZtX2FuY2VzdG9ycy5sYXN0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggMzcyYzY3OGViMmMwNWI3NmQ0
MzBmZWJlMzJhODkwZWU3MDA2YjlhNS4uMTQwNjY4ZjBhZjI0YjEyMjE0Yjc3ZmU5OGU1ODY2ZjZk
YWQ2N2MxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtNTEsMTAgKzUx
LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNjb3BlZEV2ZW50KE5vZGUq
LCBQYXNzUmVmUHRyPEV2ZW50Pik7CiAKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaE1vdXNlRXZl
bnQoTm9kZSosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBpbnQgY2xpY2tDb3VudCA9IDAsIE5vZGUqIHJlbGF0ZWRUYXJnZXQgPSAwKTsK
LSAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNzUmVmUHRy
PEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzID0gZmFsc2UsIGJv
b2wgc2hvd1ByZXNzZWRMb29rID0gdHJ1ZSk7CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hXaGVl
bEV2ZW50KE5vZGUqLCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKIAogICAgIGJvb2wgZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogcHJpdmF0
ZToKICAgICBFdmVudERpc3BhdGNoZXIoTm9kZSopOwogCkBAIC02Niw3ICs2Niw2IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGludCBidXR0b24sIGludCBkZXRhaWwsCiAgICAgICAgIGludCBwYWdlWCwgaW50IHBh
Z2VZLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXks
IGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwKICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCwg
Tm9kZSogcmVsYXRlZFRhcmdldEFyZywgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50
KTsKLSAgICB2b2lkIGRpc3BhdGNoU2ltdWxhdGVkTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KTsKIAogICAg
IFZlY3RvcjxFdmVudENvbnRleHQ+IG1fYW5jZXN0b3JzOwogICAgIFJlZlB0cjxOb2RlPiBtX25v
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaAppbmRleCA3NDU0YjA0OTJkNmJhNzY5ZmNlOWU0Y2Ew
YmY2ODhmNDgxMThkZTVhLi42ZTJhZjhhMTk5N2Q4N2I5ZTk4NTBmNGU4ZmI2ZTQ0MzRmNWZhYWNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgKQEAgLTY4LDEzICs2OCwxNSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
TW91c2VFdmVudCgpOworICAgIHByb3RlY3RlZDoKICAgICAgICAgTW91c2VFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NS
ZWZQdHI8QWJzdHJhY3RWaWV3PiwKICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsLCBpbnQg
c2NyZWVuWCwgaW50IHNjcmVlblksIGludCBwYWdlWCwgaW50IHBhZ2VZLAogICAgICAgICAgICAg
ICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0
YUtleSwgdW5zaWduZWQgc2hvcnQgYnV0dG9uLAogICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQsIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjbGlw
Ym9hcmQsIGJvb2wgaXNTaW11bGF0ZWQpOwogCisgICAgcHJpdmF0ZToKKyAgICAgICAgTW91c2VF
dmVudCgpOworCiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG1fYnV0dG9uOwogICAgICAgICBib29s
IG1fYnV0dG9uRG93bjsKICAgICAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX3JlbGF0ZWRUYXJn
ZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKaW5kZXggOWVjYmNjYjVjZDdjZWM4YjNiODkzMTFiMTEzMTYxZDUy
MTQ4YjUyMC4uYzA0ZjkwZDU5NTBiMjdkZDdhMjU0MmYyMmZiZWE1NmRlNmYwZjE5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcApAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5o
IgorI2luY2x1ZGUgIlNpbXVsYXRlZENsaWNrRXZlbnQuaCIKICNpbmNsdWRlICJTZWxlY3Rvck5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJUYWdOb2Rl
TGlzdC5oIgpAQCAtMjY1MCw3ICsyNjUxLDcgQEAgYm9vbCBOb2RlOjpkaXNwYXRjaE1vdXNlRXZl
bnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgY29uc3QgQXRvbWljU3RyaW4KIAog
dm9pZCBOb2RlOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spCiB7Ci0gICAgRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKHRoaXMsIGV2ZW50LCBzZW5kTW91
c2VFdmVudHMsIHNob3dQcmVzc2VkTG9vayk7CisgICAgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aEV2ZW50KHRoaXMsIFNpbXVsYXRlZENsaWNrRXZlbnQ6OmNyZWF0ZShkb2N1bWVudCgpLT5kZWZh
dWx0VmlldygpLCBldmVudCwgc2VuZE1vdXNlRXZlbnRzLCBzaG93UHJlc3NlZExvb2spKTsKIH0K
IAogdm9pZCBOb2RlOjpkaXNwYXRjaFdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXVsYXRlZENsaWNrRXZlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NpbXVsYXRlZENsaWNrRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQz
ZGFhNDQxOWQ1ZGYxZTAxZDkxYjYwNmExZDg0ZjBjNzZiMWMwNDcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltdWxhdGVkQ2xpY2tFdmVudC5jcHAKQEAgLTAsMCArMSwx
MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKKyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKKyAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2lt
dWxhdGVkQ2xpY2tFdmVudC5oIgorCisjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCisjaW5j
bHVkZSAiTW91c2VFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNpbXVs
YXRlZE1vdXNlRXZlbnQgOiBwdWJsaWMgTW91c2VFdmVudCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2ltdWxhdGVkTW91c2VFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIFBhc3NSZWZQdHI8RXZlbnQ+
IHVuZGVybHlpbmdFdmVudCk7CisgICAgdmlydHVhbCB+U2ltdWxhdGVkTW91c2VFdmVudCgpOwor
Citwcml2YXRlOgorICAgIFNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgUGFzc1JlZlB0cjxFdmVudD4gdW5k
ZXJseWluZ0V2ZW50KTsKK307CisKK1Bhc3NSZWZQdHI8U2ltdWxhdGVkTW91c2VFdmVudD4gU2lt
dWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQ
YXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWlu
Z0V2ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2ltdWxhdGVkTW91c2VFdmVudChl
dmVudFR5cGUsIHZpZXcsIHVuZGVybHlpbmdFdmVudCkpOworfQorCitTaW11bGF0ZWRNb3VzZUV2
ZW50Ojp+U2ltdWxhdGVkTW91c2VFdmVudCgpCit7Cit9CisKK1NpbXVsYXRlZE1vdXNlRXZlbnQ6
OlNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NS
ZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZl
bnQpCisgICAgOiBNb3VzZUV2ZW50KGV2ZW50VHlwZSwgdHJ1ZSwgdHJ1ZSwgdmlldywgMCwgMCwg
MCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIDAsIDAsIHRydWUpCit7Cisg
ICAgaWYgKFVJRXZlbnRXaXRoS2V5U3RhdGUqIGtleVN0YXRlRXZlbnQgPSBmaW5kRXZlbnRXaXRo
S2V5U3RhdGUodW5kZXJseWluZ0V2ZW50LmdldCgpKSkgeworICAgICAgICBtX2N0cmxLZXkgPSBr
ZXlTdGF0ZUV2ZW50LT5jdHJsS2V5KCk7CisgICAgICAgIG1fYWx0S2V5ID0ga2V5U3RhdGVFdmVu
dC0+YWx0S2V5KCk7CisgICAgICAgIG1fc2hpZnRLZXkgPSBrZXlTdGF0ZUV2ZW50LT5zaGlmdEtl
eSgpOworICAgICAgICBtX21ldGFLZXkgPSBrZXlTdGF0ZUV2ZW50LT5tZXRhS2V5KCk7CisgICAg
fQorICAgIHNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQpOworfQorCitzdGF0aWMg
SGFzaFNldDxOb2RlKj4qIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsKKwor
UGFzc1JlZlB0cjxTaW11bGF0ZWRDbGlja0V2ZW50PiBTaW11bGF0ZWRDbGlja0V2ZW50OjpjcmVh
dGUoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVy
bHlpbmdFdmVudCwgYm9vbCBzZW5kTW91c2VFdmVudHMsIGJvb2wgc2hvd1ByZXNzZWRMb29rKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2ltdWxhdGVkQ2xpY2tFdmVudCh2aWV3LCB1bmRl
cmx5aW5nRXZlbnQsIHNlbmRNb3VzZUV2ZW50cywgc2hvd1ByZXNzZWRMb29rKSk7Cit9CisKK1Np
bXVsYXRlZENsaWNrRXZlbnQ6OlNpbXVsYXRlZENsaWNrRXZlbnQoUGFzc1JlZlB0cjxBYnN0cmFj
dFZpZXc+IHZpZXcsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCwgYm9vbCBzZW5k
TW91c2VFdmVudHMsIGJvb2wgc2hvd1ByZXNzZWRMb29rKQorICAgIDogVUlFdmVudChldmVudE5h
bWVzKCkuY2xpY2tFdmVudCwgZmFsc2UsIGZhbHNlLCB2aWV3LCAwKQorICAgICwgbV9zZW5kTW91
c2VFdmVudHMoc2VuZE1vdXNlRXZlbnRzKQorICAgICwgbV9zaG93UHJlc3NlZExvb2soc2hvd1By
ZXNzZWRMb29rKQoreworICAgIHNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQpOwor
fQorCitTaW11bGF0ZWRDbGlja0V2ZW50Ojp+U2ltdWxhdGVkQ2xpY2tFdmVudCgpCit7Cit9CisK
K2Jvb2wgU2ltdWxhdGVkQ2xpY2tFdmVudDo6ZGlzcGF0Y2goRXZlbnREaXNwYXRjaGVyKiBkaXNw
YXRjaGVyKQoreworICAgIGlmICghZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MpCisg
ICAgICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gbmV3IEhhc2hTZXQ8Tm9k
ZSo+OworICAgIGVsc2UgaWYgKGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5jb250
YWlucyhkaXNwYXRjaGVyLT5ub2RlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGdO
b2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5hZGQoZGlzcGF0Y2hlci0+bm9kZSgpKTsK
KworICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGJlZm9yZSB0aGUgY2xpY2ssIGlm
IHJlcXVlc3RlZAorICAgIGlmIChtX3NlbmRNb3VzZUV2ZW50cykKKyAgICAgICAgZGlzcGF0Y2hl
ci0+ZGlzcGF0Y2hFdmVudChTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50LCB2aWV3KCksIHVuZGVybHlpbmdFdmVudCgpKSk7CisgICAgZGlzcGF0
Y2hlci0+bm9kZSgpLT5zZXRBY3RpdmUodHJ1ZSwgbV9zaG93UHJlc3NlZExvb2spOworICAgICAg
ICBpZiAobV9zZW5kTW91c2VFdmVudHMpCisgICAgICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoRXZl
bnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQs
IHZpZXcoKSwgdW5kZXJseWluZ0V2ZW50KCkpKTsKKyAgICBkaXNwYXRjaGVyLT5ub2RlKCktPnNl
dEFjdGl2ZShmYWxzZSk7CisKKyAgICAvLyBhbHdheXMgc2VuZCBjbGljaworICAgIGRpc3BhdGNo
ZXItPmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50LCB2aWV3KCksIHVuZGVybHlpbmdFdmVudCgpKSk7CisKKyAgICBnTm9kZXNE
aXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+cmVtb3ZlKGRpc3BhdGNoZXItPm5vZGUoKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW11bGF0ZWRDbGlja0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltdWxhdGVkQ2xpY2tF
dmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmVlYzQwZDkwNTNlZjMyMWZlMzc4ZWM3MDcyMDBlNDNmMmZhNzc4
ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltdWxhdGVkQ2xpY2tF
dmVudC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNpbXVsYXRl
ZENsaWNrRXZlbnRfaAorI2RlZmluZSBTaW11bGF0ZWRDbGlja0V2ZW50X2gKKworI2luY2x1ZGUg
IlVJRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNpbXVsYXRlZENsaWNrRXZlbnQgOiBwdWJsaWMgVUlFdmVudCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2ltdWxhdGVkQ2xpY2tFdmVudD4gY3JlYXRlKFBh
c3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50
LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spOworCitwcml2YXRl
OgorICAgIFNpbXVsYXRlZENsaWNrRXZlbnQoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBQYXNz
UmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29s
IHNob3dQcmVzc2VkTG9vayk7CisgICAgdmlydHVhbCB+U2ltdWxhdGVkQ2xpY2tFdmVudCgpOwor
CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoKEV2ZW50RGlzcGF0Y2hlciopOworCisgICAgYm9v
bCBtX3NlbmRNb3VzZUV2ZW50cyA6IDE7CisgICAgYm9vbCBtX3Nob3dQcmVzc2VkTG9vayA6IDE7
Cit9OworCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>