<?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>24797</bug_id>
          
          <creation_ts>2009-03-25 01:26:30 -0700</creation_ts>
          <short_desc>Improve wxWebKit keyboard shortcuts</short_desc>
          <delta_ts>2009-05-05 17:51:52 -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>WebKit wx</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Diggilin">mr.diggilin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>115118</commentid>
    <comment_count>0</comment_count>
    <who name="Diggilin">mr.diggilin</who>
    <bug_when>2009-03-25 01:26:30 -0700</bug_when>
    <thetext>wxWebKit cannot scroll with either the mouse wheel or keyboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115119</commentid>
    <comment_count>1</comment_count>
      <attachid>28926</attachid>
    <who name="Diggilin">mr.diggilin</who>
    <bug_when>2009-03-25 01:30:37 -0700</bug_when>
    <thetext>Created attachment 28926
The Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115134</commentid>
    <comment_count>2</comment_count>
    <who name="Diggilin">mr.diggilin</who>
    <bug_when>2009-03-25 05:33:50 -0700</bug_when>
    <thetext>Don&apos;t commit first patch, I&apos;ll have a second one up tomorrow (GMT+8) that handles key scrolling properly (as in, after webkit has handled it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115299</commentid>
    <comment_count>3</comment_count>
      <attachid>28963</attachid>
    <who name="Diggilin">mr.diggilin</who>
    <bug_when>2009-03-25 22:40:11 -0700</bug_when>
    <thetext>Created attachment 28963
Actually Working Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116148</commentid>
    <comment_count>4</comment_count>
      <attachid>29156</attachid>
    <who name="Diggilin">mr.diggilin</who>
    <bug_when>2009-04-01 00:22:40 -0700</bug_when>
    <thetext>Created attachment 29156
more complete keyboard shortcuts support

This is complete and easier to extend. (with a big thanks to whoever designed the windows port&apos;s shortcuts)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116242</commentid>
    <comment_count>5</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2009-04-01 18:40:39 -0700</bug_when>
    <thetext>I think the bug summary is too limited for what this patch deals with, so I&apos;m renaming it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116576</commentid>
    <comment_count>6</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2009-04-05 12:10:40 -0700</bug_when>
    <thetext>Much of this patch is a straight copy and paste of the Windows code used to implement editing key events. As such, I&apos;d rather move the Windows code up to some common location where both the Windows and wx ports can use it (and I suspect other ports will want to as well once it is available). Maybe in Editor? As this involves other ports, it would probably be good to bring this up on webkit-dev and ask. The idea would be that ports would not call these methods whenever they want to provide a different behavior, but otherwise they&apos;d default to the behavior here.

Once that&apos;s done, the only alteration that I think we would need to make would be to make isSystemKey a cross-platform method of PlatformKeyboardEvent, and in wx we&apos;d have it always return false, even on Windows unfortunately because wx makes no distinction between a &apos;system&apos; and &apos;non-system&apos; key.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118808</commentid>
    <comment_count>7</comment_count>
      <attachid>29782</attachid>
    <who name="Diggilin">mr.diggilin</who>
    <bug_when>2009-04-24 23:56:53 -0700</bug_when>
    <thetext>Created attachment 29782
Moved shortcut =&gt; action map to shared location</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120045</commentid>
    <comment_count>8</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2009-05-05 17:51:52 -0700</bug_when>
    <thetext>Landed in r43265, thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28926</attachid>
            <date>2009-03-25 01:30:37 -0700</date>
            <delta_ts>2009-03-25 22:40:11 -0700</delta_ts>
            <desc>The Fix</desc>
            <filename>scrolling.diff</filename>
            <type>text/plain</type>
            <size>9259</size>
            <attacher name="Diggilin">mr.diggilin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5n
ZUxvZwkocmV2aXNpb24gNDE5NjgpCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDMtMjUgIG1pZ2dpbGluICA8bXIuZGlnZ2lsaW5A
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEtleWJvYXJkIHNjcm9sbGluZyBzdXBwb3J0IGFuZCBhIHRvdWNoIG9mIHJlZmFjdG9yaW5n
CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKHd4V2ViVmlldzo6T25LZXlFdmVu
dHMpOgorICAgICAgICAqIFdlYlZpZXcuaDoKKwogMjAwOS0wMy0wMiAgS2V2aW4gT2xsaXZpZXIg
IDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXhlcyBmb3Igd3hX
aWRnZXRzIE1hYyB0cnVuayBidWlsZC4KSW5kZXg6IFdlYktpdC93eC9XZWJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViVmlldy5jcHAJKHJldmlzaW9uIDQxOTM2KQorKysgV2Vi
S2l0L3d4L1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5j
bHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUg
IlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlN1YnN0aXR1dGVEYXRhLmgiCkBAIC01NjYsODYgKzU2Nyw4MiBAQAogICAgIGRlbGV0ZSBpdGVt
OwogfQogCi1ib29sIHd4V2ViVmlldzo6Q2FuQ29weSgpCi17Ci0gICAgaWYgKG1fbWFpbkZyYW1l
KQotICAgICAgICByZXR1cm4gbV9tYWluRnJhbWUtPkNhbkNvcHkoKTsKLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCB3eFdlYlZpZXc6OkNvcHkoKQotewotICAgIGlmIChtX21haW5GcmFt
ZSkKLSAgICAgICAgbV9tYWluRnJhbWUtPkNvcHkoKTsKLX0KLQotYm9vbCB3eFdlYlZpZXc6OkNh
bkN1dCgpCi17Ci0gICAgaWYgKG1fbWFpbkZyYW1lKQotICAgICAgICBtX21haW5GcmFtZS0+Q2Fu
Q3V0KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgd3hXZWJWaWV3OjpDdXQoKQot
ewotICAgIGlmIChtX21haW5GcmFtZSkKLSAgICAgICAgbV9tYWluRnJhbWUtPkN1dCgpOwotfQot
Ci1ib29sIHd4V2ViVmlldzo6Q2FuUGFzdGUoKQotewotICAgIGlmIChtX21haW5GcmFtZSkKLSAg
ICAgICAgbV9tYWluRnJhbWUtPkNhblBhc3RlKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgd3hXZWJWaWV3OjpQYXN0ZSgpCi17Ci0gICAgaWYgKG1fbWFpbkZyYW1lKQotICAgICAg
ICBtX21haW5GcmFtZS0+UGFzdGUoKTsKLQotfQotCiB2b2lkIHd4V2ViVmlldzo6T25LZXlFdmVu
dHMod3hLZXlFdmVudCYgZXZlbnQpCiB7CisgICAgLy9GSVhNRTogaW4gd3hHVEsgYXQgbGVhc3Qs
IHdlIG5ldmVyIGdldCB3eEVWVF9LRVlfRE9XTiBmb3IgY3RybC1jLCBjdHJsLXgsIG9yIGN0cmwt
diwgYnV0IHdlIGRvIGdldCBjdHJsLXouIExvY2F0ZSB0aGUgcm9iYmVyeS4KKwogICAgIFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSA9IDA7CiAgICAgaWYgKG1fbWFpbkZyYW1lKQogICAgICAgICBmcmFt
ZSA9IG1fbWFpbkZyYW1lLT5HZXRGcmFtZSgpOwogICAgICAgICAKICAgICBpZiAoZnJhbWUgJiYg
ZnJhbWUtPnZpZXcoKSkgewotICAgICAgICAvLyBXZWJDb3JlIGRvZXNuJ3QgaGFuZGxlIHRoZXNl
IGV2ZW50cyBpdHNlbGYsIHNvIHdlIG5lZWQgdG8gZG8KLSAgICAgICAgLy8gaXQgYW5kIG5vdCBz
ZW5kIHRoZSBldmVudCBkb3duIG9yIGVsc2UgQ1RSTCtDIHdpbGwgZXJhc2UgdGhlIHRleHQKLSAg
ICAgICAgLy8gYW5kIHJlcGxhY2UgaXQgd2l0aCBjLgotICAgICAgICBpZiAoZXZlbnQuQ21kRG93
bigpICYmIGV2ZW50LkdldEV2ZW50VHlwZSgpID09IHd4RVZUX0tFWV9VUCkgewotICAgICAgICAg
ICAgaWYgKGV2ZW50LkdldEtleUNvZGUoKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KCdDJykpCi0gICAg
ICAgICAgICAgICAgQ29weSgpOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQuR2V0S2V5Q29k
ZSgpID09IHN0YXRpY19jYXN0PGludD4oJ1gnKSkKLSAgICAgICAgICAgICAgICBDdXQoKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LkdldEtleUNvZGUoKSA9PSBzdGF0aWNfY2FzdDxpbnQ+
KCdWJykpCi0gICAgICAgICAgICAgICAgUGFzdGUoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2
ZW50LkdldEtleUNvZGUoKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KCdaJykpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoZXZlbnQuU2hpZnREb3duKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1f
bWFpbkZyYW1lLT5DYW5SZWRvKCkpCisgICAgICAgIGlmIChldmVudC5HZXRFdmVudFR5cGUoKSAh
PSB3eEVWVF9LRVlfVVApIHsKKyAgICAgICAgICAgIGlmIChldmVudC5HZXRFdmVudFR5cGUoKSAh
PSB3eEVWVF9DSEFSKSB7IC8vRG9uJ3QgZ2V0IHRoZSBDSEFSIG9yIGV2ZXJ5dGhpbmcgaGFwcGVu
cyB0d2ljZSAoRVZUX0NIQVIgYW5kIEVWVF9LRVlfRE9XTikKKyAgICAgICAgICAgICAgICAvL0ZJ
WE1FOiBzaG91bGQgd2Ugc3RvcCB0aGVzZSBldmVudHMgZnJvbSBnZXR0aW5nIHRvIFdlYktpdD8g
T3IgaGF2ZSB0aGUgd2Via2l0IGhhbmRsZXIgZmlsdGVyIHRoZW0gYXMgaXMgZG9uZSBub3c/Cisg
ICAgICAgICAgICAgICAgLy9XZWJraXQgZG9lc24ndCBoYW5kbGUgdGhlc2UsIHNlZSBhbHNvIEZJ
WE1FIGF0IGZ1bmN0aW9uIHRvcAorICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQuR2V0S2V5
Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSA2NzogLy8iQyIKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fbWFpbkZyYW1lLT5DYW5Db3B5KCkgJiYgKGV2ZW50LkdldE1vZGlmaWVycygp
ID09IHd4TU9EX0NNRCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX21haW5GcmFtZS0+Q29w
eSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDg4
OiAvLyJYIgorICAgICAgICAgICAgICAgICAgICBpZiAobV9tYWluRnJhbWUtPkNhbkN1dCgpICYm
IChldmVudC5HZXRNb2RpZmllcnMoKSA9PSB3eE1PRF9DTUQpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9tYWluRnJhbWUtPkN1dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDg2OiAvLyJWIgorICAgICAgICAgICAgICAgICAgICBpZiAobV9t
YWluRnJhbWUtPkNhblBhc3RlKCkgJiYgKGV2ZW50LkdldE1vZGlmaWVycygpID09IHd4TU9EX0NN
RCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX21haW5GcmFtZS0+UGFzdGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA5MDogLy8iWiIKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fbWFpbkZyYW1lLT5DYW5VbmRvKCkgJiYgKGV2ZW50Lkdl
dE1vZGlmaWVycygpID09IHd4TU9EX0NNRCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX21h
aW5GcmFtZS0+VW5kbygpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtX21haW5GcmFt
ZS0+Q2FuUmVkbygpICYmIChldmVudC5HZXRNb2RpZmllcnMoKSA9PSB3eE1PRF9DTUQgJiYgd3hN
T0RfU0hJRlQpKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9tYWluRnJhbWUtPlJlZG8oKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXWEtfTEVG
VDoKKyAgICAgICAgICAgICAgICBjYXNlIFdYS19OVU1QQURfTEVGVDoKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZSgtV2ViQ29yZTo6
Y1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV1hLX1VQOgorICAgICAgICAgICAgICAgIGNhc2Ug
V1hLX05VTVBBRF9VUDoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xs
QnkoV2ViQ29yZTo6SW50U2l6ZSgwLCAtV2ViQ29yZTo6Y1Njcm9sbGJhclBpeGVsc1BlckxpbmVT
dGVwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
V1hLX1JJR0hUOgorICAgICAgICAgICAgICAgIGNhc2UgV1hLX05VTVBBRF9SSUdIVDoKKyAgICAg
ICAgICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZShX
ZWJDb3JlOjpjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAsIDApKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXWEtfRE9XTjoKKyAgICAgICAgICAg
ICAgICBjYXNlIFdYS19OVU1QQURfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnZp
ZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZSgwLCBXZWJDb3JlOjpjU2Nyb2xsYmFyUGl4
ZWxzUGVyTGluZVN0ZXApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBXWEtfRU5EOgorICAgICAgICAgICAgICAgIGNhc2UgV1hLX05VTVBBRF9FTkQ6
CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnNldFNjcm9sbFBvc2l0aW9uKFdl
YkNvcmU6OkludFBvaW50KGZyYW1lLT52aWV3KCktPnNjcm9sbFgoKSwgZnJhbWUtPnZpZXcoKS0+
bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgV1hLX0hPTUU6CisgICAgICAgICAgICAgICAgY2FzZSBX
WEtfTlVNUEFEX0hPTUU6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnNldFNj
cm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50KGZyYW1lLT52aWV3KCktPnNjcm9sbFgoKSwg
MCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdY
S19QQUdFVVA6CisgICAgICAgICAgICAgICAgY2FzZSBXWEtfTlVNUEFEX1BBR0VVUDoKKyAgICAg
ICAgICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZSgw
LCAtZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpICsgV2ViQ29yZTo6Y0Ftb3VudFRvS2Vl
cFdoZW5QYWdpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBXWEtfUEFHRURPV046CisgICAgICAgICAgICAgICAgY2FzZSBXWEtfTlVNUEFEX1BB
R0VET1dOOgorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+dmlldygpLT5zY3JvbGxCeShXZWJD
b3JlOjpJbnRTaXplKDAsIGZyYW1lLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSAtIFdlYkNvcmU6
OmNBbW91bnRUb0tlZXBXaGVuUGFnaW5nKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fbWFpbkZyYW1lLT5DYW5VbmRvKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX21haW5GcmFtZS0+VW5kbygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsgICAgCisgICAgICAgICAgICB9IC8vZW5kIGlmICF3eEVWVF9DSEFS
CisKICAgICAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCB3a0V2ZW50KGV2
ZW50KTsKICAgICAgICAgICAgIGlmICh3a0V2ZW50LnR5cGUoKSA9PSBXZWJDb3JlOjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OkNoYXIgJiYgd2tFdmVudC5hbHRLZXkoKSkKICAgICAgICAgICAgICAg
ICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUFjY2Vzc0tleSh3a0V2ZW50KTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2
ZW50KHdrRXZlbnQpOwotICAgICAgICB9CisgICAgICAgIH0gLy9lbmQgaWYgIXd4RVZUX0tFWV9V
UAogICAgIH0KICAgICAKLSAgICAvLyBtYWtlIHN1cmUgd2UgZ2V0IHRoZSBjaGFyYWN0ZXIgZXZl
bnQuCisgICAgLy8gbWFrZSBzdXJlIHdlIGdldCB0aGUgY2hhcmFjdGVyIGV2ZW50LiBGSVhNRTog
d2h5IHNraXAgYXQgYWxsPwogICAgIGlmIChldmVudC5HZXRFdmVudFR5cGUoKSAhPSB3eEVWVF9D
SEFSKQogICAgICAgICBldmVudC5Ta2lwKCk7CiB9CkluZGV4OiBXZWJLaXQvd3gvV2ViVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJWaWV3LmgJKHJldmlzaW9uIDQxOTM2KQorKysg
V2ViS2l0L3d4L1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDE0ICsxMDYsNiBAQAog
ICAgIGJvb2wgQ2FuR29CYWNrKCk7CiAgICAgYm9vbCBDYW5Hb0ZvcndhcmQoKTsKICAgICAKLSAg
ICBib29sIENhbkN1dCgpOwotICAgIGJvb2wgQ2FuQ29weSgpOwotICAgIGJvb2wgQ2FuUGFzdGUo
KTsKLSAgICAKLSAgICB2b2lkIEN1dCgpOwotICAgIHZvaWQgQ29weSgpOwotICAgIHZvaWQgUGFz
dGUoKTsKLSAgICAKICAgICAvL2Jvb2wgQ2FuR2V0UGFnZVNvdXJjZSgpOwogICAgIHd4U3RyaW5n
IEdldFBhZ2VTb3VyY2UoKTsKICAgICB2b2lkIFNldFBhZ2VTb3VyY2UoY29uc3Qgd3hTdHJpbmcm
IHNvdXJjZSwgY29uc3Qgd3hTdHJpbmcmIGJhc2VVcmwgPSB3eEVtcHR5U3RyaW5nKTsKSW5kZXg6
IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiA0MTk2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMDktMDMtMjUgIG1pZ2dpbGluICA8bXIuZGlnZ2lsaW5AZ21haWwuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdBUk5JTkc6
IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIEFsbG93IHd4IHRvIHVz
ZSB3ZWJraXQncyBub24tbmF0aXZlIHNjcm9sbGluZworCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxQb3NpdGlvbik6CisKIDIwMDktMDMtMjQg
IEVsaSBGaWRsZXIgIDxlbGkuZmlkbGVyQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBHZW9yZ2UgU3RhaWtvcy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xs
Vmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdX
eC5jcHAJKHJldmlzaW9uIDQxOTM2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3
V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMTIgKzE5MSwxMiBAQAogICAgIGlmIChuZXdT
Y3JvbGxPZmZzZXQueCA8IDApCiAgICAgICAgIG5ld1Njcm9sbE9mZnNldC54ID0gMDsKICAgICBl
bHNlIGlmIChuZXdTY3JvbGxPZmZzZXQueCArIGNSZWN0LndpZHRoID4gdlJlY3Qud2lkdGgpCi0g
ICAgICAgIG5ld1Njcm9sbE9mZnNldC54ID0gbWF4KDAsIHZSZWN0LndpZHRoIC0gY1JlY3Qud2lk
dGggLSAxKTsKKyAgICAgICAgbmV3U2Nyb2xsT2Zmc2V0LnggPSBtYXgoMCwgdlJlY3Qud2lkdGgg
LSBjUmVjdC53aWR0aCk7CiAKICAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0LnkgPCAwKQogICAgICAg
ICBuZXdTY3JvbGxPZmZzZXQueSA9IDA7CiAgICAgZWxzZSBpZiAobmV3U2Nyb2xsT2Zmc2V0Lnkg
KyBjUmVjdC5oZWlnaHQgPiB2UmVjdC5oZWlnaHQpCi0gICAgICAgIG5ld1Njcm9sbE9mZnNldC55
ID0gbWF4KDAsIHZSZWN0LmhlaWdodCAtIGNSZWN0LmhlaWdodCAtIDEpOworICAgICAgICBuZXdT
Y3JvbGxPZmZzZXQueSA9IG1heCgwLCB2UmVjdC5oZWlnaHQgLSBjUmVjdC5oZWlnaHQpOwogCiAg
ICAgaWYgKG5ld1Njcm9sbE9mZnNldCA9PSBzY3JvbGxPZmZzZXQpCiAgICAgICAgIHJldHVybjsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gNDE5MzYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsOCArNjAxLDEz
IEBACiB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQog
ewogICAgIC8vIFdlIGRvbid0IGFsbG93IG1vdXNlIHdoZWVsaW5nIHRvIGhhcHBlbiBpbiBhIFNj
cm9sbFZpZXcgdGhhdCBoYXMgaGFkIGl0cyBzY3JvbGxiYXJzIGV4cGxpY2l0bHkgZGlzYWJsZWQu
Ci0gICAgaWYgKCFjYW5IYXZlU2Nyb2xsYmFycygpIHx8IHBsYXRmb3JtV2lkZ2V0KCkpCisjaWYg
UExBVEZPUk0oV1gpCisgICAgaWYgKCFjYW5IYXZlU2Nyb2xsYmFycygpKSB7CisjZWxzZQorICAg
IGlmICghY2FuSGF2ZVNjcm9sbGJhcnMoKSB8fCBwbGF0Zm9ybVdpZGdldCgpKSB7CisjZW5kaWYK
ICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIERldGVybWluZSBob3cgbXVjaCB3ZSB3
YW50IHRvIHNjcm9sbC4gIElmIHdlIGNhbiBtb3ZlIGF0IGFsbCwgd2Ugd2lsbCBhY2NlcHQgdGhl
IGV2ZW50LgogICAgIEludFNpemUgbWF4U2Nyb2xsRGVsdGEgPSBtYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28963</attachid>
            <date>2009-03-25 22:40:11 -0700</date>
            <delta_ts>2009-04-01 00:22:40 -0700</delta_ts>
            <desc>Actually Working Fix</desc>
            <filename>scrolling.diff</filename>
            <type>text/plain</type>
            <size>15886</size>
            <attacher name="Diggilin">mr.diggilin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9FZGl0b3JDbGllbnRXeC5jcHAJKHJldmlz
aW9uIDQxOTM2KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRWRpdG9yQ2xpZW50V3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNTggKzMwMCw5OCBAQAogICAgICAgICByZXR1cm47CiAK
ICAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtldmVudCA9IGV2ZW50LT5rZXlFdmVu
dCgpOwotICAgIGlmIChrZXZlbnQtPnR5cGUoKSAhPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6Oktl
eVVwKSB7Ci0gICAgICAgIE5vZGUqIHN0YXJ0ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgp
Lm5vZGUoKTsKLSAgICAgICAgaWYgKCFzdGFydCB8fCAhc3RhcnQtPmlzQ29udGVudEVkaXRhYmxl
KCkpCi0gICAgICAgICAgICByZXR1cm47IAotICAgICAgICAKLSAgICAgICAgaWYgKGtldmVudC0+
dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhciAmJiAha2V2ZW50LT5jdHJsS2V5
KCkgJiYgIWtldmVudC0+YWx0S2V5KCkpIHsKKyAgICBpZiAoIWtldmVudCB8fCBrZXZlbnQtPnR5
cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OktleVVwKQorICAgICAgICByZXR1cm47CisK
KyAgICBOb2RlKiBzdGFydCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCk7Cisg
ICAgaWYgKCFzdGFydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHN0YXJ0LT5pc0NvbnRl
bnRFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmIChrZXZlbnQtPnR5cGUoKSAhPSBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OkNoYXIpIHsKKyAgICAgICAgICAgIC8vRmlyc3Qgd2UgZ2V0IGtleWRvd24u
IElmIHdlIGhhbmRsZSBpdCBoZXJlLCB3ZSBkb24ndCBnZXQgY2hhci4KICAgICAgICAgICAgIHN3
aXRjaCAoa2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewotICAgICAgICAgICAgICAg
IC8vIHdlIGhhbmRsZWQgdGhlc2Ugb24ga2V5IGRvd24sIGlnbm9yZSB0aGVtIGZvciBjaGFyIGV2
ZW50cwotICAgICAgICAgICAgICAgIGNhc2UgVktfQkFDSzoKLSAgICAgICAgICAgICAgICBjYXNl
IFZLX0RFTEVURToKLSAgICAgICAgICAgICAgICBjYXNlIFZLX0xFRlQ6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBWS19SSUdIVDoKLSAgICAgICAgICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAg
ICAgICAgIGNhc2UgVktfRE9XTjoKLSAgICAgICAgICAgICAgICBjYXNlIFZLX1JFVFVSTjoKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGtldmVudC0+dGV4dCgp
LCBldmVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKLSAgICAgICAgICAgIHJldHVybjsgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHN3aXRjaCAoa2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBWS19CQUNLOgogICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRl
V2l0aERpcmVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyR3JhbnVs
YXJpdHksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtldmVudC0+Y3Ry
bEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksIGZhbHNlLCB0
cnVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVktfREVMRVRF
OgogICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERpcmVjdGlvbihT
ZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJELAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXJHcmFudWxhcml0eSwgZmFsc2UsIHRy
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAga2V2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3Jh
bnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwgZmFsc2UsIHRydWUpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWS19MRUZUOgotICAgICAgICAgICAgICAg
IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZUxlZnQiKS5leGVjdXRlKCk7CisgICAgICAg
ICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8g
U2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkxFRlQsCisgICAg
ICAgICAgICAgICAgICAgICAgICBrZXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6
IENoYXJhY3RlckdyYW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZLX1JJR0hUOgotICAgICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZVJpZ2h0IikuZXhlY3V0ZSgp
OworICAgICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtldmVudC0+c2hp
ZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpS
SUdIVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGtldmVudC0+Y3RybEtleSgpID8gV29yZEdy
YW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCisgICAgICAgICAgICAgICAgICAgICAg
ICB0cnVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVktfVVA6
Ci0gICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlVXAiKS5leGVj
dXRlKCk7CisgICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50
LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29u
dHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkJBQ0tXQVJELAorICAgICAgICAgICAgICAgICAgICAgICAga2V2ZW50LT5jdHJsS2V5KCkg
PyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0eSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRydWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBWS19ET1dOOgotICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92
ZURvd24iKS5leGVjdXRlKCk7CisgICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDog
U2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkZPUldBUkQsCisgICAgICAgICAgICAgICAgICAgICAgICBrZXZlbnQt
PmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDogTGluZUdyYW51bGFyaXR5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIFZLX1JFVFVSTjoKICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkt
PmNvbW1hbmQoIkluc2VydExpbmVCcmVhayIpLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIGNhc2Ug
VktfSE9NRToKKyAgICAgICAgICAgICAgICBpZiAoa2V2ZW50LT5jdHJsS2V5KCkgJiYga2V2ZW50
LT5zaGlmdEtleSgpKQorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1h
bmQoIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iKS5leGVjdXRl
KCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V2ZW50LT5jdHJsS2V5KCkpCisgICAgICAg
ICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZVRvQmVnaW5uaW5nT2ZE
b2N1bWVudCIpLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXZlbnQtPnNo
aWZ0S2V5KCkpCisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgi
TW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIikuZXhlY3V0ZSgpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5j
b21tYW5kKCJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiKS5leGVjdXRlKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZLX0VORDoKKyAgICAgICAgICAgICAgICBpZiAo
a2V2ZW50LT5jdHJsS2V5KCkgJiYga2V2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICAgICAgICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2Rp
ZnlTZWxlY3Rpb24iKS5leGVjdXRlKCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V2ZW50
LT5jdHJsS2V5KCkpCisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFu
ZCgiTW92ZVRvRW5kT2ZEb2N1bWVudCIpLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChrZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS0+Y29tbWFuZCgiTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIikuZXhlY3V0
ZSgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmVk
aXRvcigpLT5jb21tYW5kKCJNb3ZlVG9FbmRPZkxpbmUiKS5leGVjdXRlKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZLX1BSSU9SOiAgLy8gUGFnZVVwCisgICAg
ICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGtldmVudC0+c2hpZnRLZXkoKSA/
ICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiA6ICJNb3ZlUGFnZVVwIikuZXhlY3V0ZSgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWS19ORVhUOiAgLy8g
UGFnZURvd24KKyAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoa2V2ZW50
LT5zaGlmdEtleSgpID8gIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgOiAiTW92ZVBh
Z2VEb3duIikuZXhlY3V0ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvL0ZJWE1F
OiBhZGQgY3RybC1iLCBjdHJsLWksIGN0cmwteiwgYW5kIGN0cmwtc2hpZnQtegorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy9LZXlkb3duIGRpZG4ndCBoYW5kbGUgdGhlIGV2ZW50LCBub3cg
d2UgZ2V0IGNoYXIKKyAgICAgICAgICAgIGlmICgha2V2ZW50LT5jdHJsS2V5KCkgJiYgIWtldmVu
dC0+YWx0S2V5KCkgJiYgIWtldmVudC0+dGV4dCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoa2V2ZW50LT50ZXh0KCkubGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgVUNoYXIgY2ggPSBrZXZlbnQtPnRleHQoKVswXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERvbid0IGluc2VydCBudWxsIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBhcyB0
aGV5IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBiZWhhdmlvdXIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaCA+PSAnICcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUt
PmVkaXRvcigpLT5pbnNlcnRUZXh0KGtldmVudC0+dGV4dCgpLCBldmVudCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChrZXZlbnQtPnRleHQoKSwg
ZXZlbnQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgfQorCisgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKIHZvaWQgRWRp
dG9yQ2xpZW50V3g6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KikKSW5kZXg6IFdl
YktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2
aXNpb24gNDE5OTkpCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMDktMDMtMjUgIG1pZ2dpbGluICA8bXIuZGlnZ2lsaW5AZ21haWwuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJs
ZSBLZXkgU2Nyb2xsaW5nLCBhZGQgbW9yZSBrZXkgaGFuZGxpbmcKKworICAgICAgICAqIFdlYktp
dFN1cHBvcnQvRWRpdG9yQ2xpZW50V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xp
ZW50V3g6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAg
ICAgICAod3hXZWJWaWV3OjpDb3B5KToKKyAgICAgICAgKHd4V2ViVmlldzo6UGFzdGUpOgorICAg
ICAgICAod3hXZWJWaWV3OjpPbktleUV2ZW50cyk6CisKIDIwMDktMDMtMDIgIEtldmluIE9sbGl2
aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgQnVpbGQgZml4ZXMgZm9y
IHd4V2lkZ2V0cyBNYWMgdHJ1bmsgYnVpbGQuCkluZGV4OiBXZWJLaXQvd3gvV2ViVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYlZpZXcuY3BwCShyZXZpc2lvbiA0MTkzNikKKysr
IFdlYktpdC93eC9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAog
I2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNs
dWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJTdWJzdGl0dXRlRGF0YS5oIgpAQCAtNTc2LDkgKzU3Nyw5IEBACiAKIHZvaWQgd3hXZWJW
aWV3OjpDb3B5KCkKIHsKLSAgICBpZiAobV9tYWluRnJhbWUpCisgICAgaWYgKG1fbWFpbkZyYW1l
KSAKICAgICAgICAgbV9tYWluRnJhbWUtPkNvcHkoKTsKLX0KK30gCiAKIGJvb2wgd3hXZWJWaWV3
OjpDYW5DdXQoKQogewpAQCAtNjA2LDQ4ICs2MDcsMTA2IEBACiB7CiAgICAgaWYgKG1fbWFpbkZy
YW1lKQogICAgICAgICBtX21haW5GcmFtZS0+UGFzdGUoKTsKLQogfQogCisvL0ZpcnN0IGNvbWVz
IHd4RVZUX0tFWV9ET1dOLCBhbmQgaWYgdGhhdCdzIHNraXAoKWVkIHRoZW4gY29tZXMgd3hFVlRf
Q0hBUiwgdGhlbiBvZiBjb3Vyc2UsIHd4RVZUX0tFWV9VUAogdm9pZCB3eFdlYlZpZXc6Ok9uS2V5
RXZlbnRzKHd4S2V5RXZlbnQmIGV2ZW50KQogewogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9
IDA7CiAgICAgaWYgKG1fbWFpbkZyYW1lKQogICAgICAgICBmcmFtZSA9IG1fbWFpbkZyYW1lLT5H
ZXRGcmFtZSgpOwotICAgICAgICAKKwogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+dmlldygpKSB7
Ci0gICAgICAgIC8vIFdlYkNvcmUgZG9lc24ndCBoYW5kbGUgdGhlc2UgZXZlbnRzIGl0c2VsZiwg
c28gd2UgbmVlZCB0byBkbwotICAgICAgICAvLyBpdCBhbmQgbm90IHNlbmQgdGhlIGV2ZW50IGRv
d24gb3IgZWxzZSBDVFJMK0Mgd2lsbCBlcmFzZSB0aGUgdGV4dAotICAgICAgICAvLyBhbmQgcmVw
bGFjZSBpdCB3aXRoIGMuCi0gICAgICAgIGlmIChldmVudC5DbWREb3duKCkgJiYgZXZlbnQuR2V0
RXZlbnRUeXBlKCkgPT0gd3hFVlRfS0VZX1VQKSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQuR2V0
S2V5Q29kZSgpID09IHN0YXRpY19jYXN0PGludD4oJ0MnKSkKLSAgICAgICAgICAgICAgICBDb3B5
KCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudC5HZXRLZXlDb2RlKCkgPT0gc3RhdGljX2Nh
c3Q8aW50PignWCcpKQotICAgICAgICAgICAgICAgIEN1dCgpOwotICAgICAgICAgICAgZWxzZSBp
ZiAoZXZlbnQuR2V0S2V5Q29kZSgpID09IHN0YXRpY19jYXN0PGludD4oJ1YnKSkKLSAgICAgICAg
ICAgICAgICBQYXN0ZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQuR2V0S2V5Q29kZSgp
ID09IHN0YXRpY19jYXN0PGludD4oJ1onKSkgewotICAgICAgICAgICAgICAgIGlmIChldmVudC5T
aGlmdERvd24oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9tYWluRnJhbWUtPkNhblJl
ZG8oKSkKKyAgICAgICAgaWYgKGV2ZW50LkdldEV2ZW50VHlwZSgpICE9IHd4RVZUX0tFWV9VUCkg
eworCisgICAgICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgd2tFdmVudChl
dmVudCk7CisKKyAgICAgICAgICAgIGlmIChldmVudC5HZXRFdmVudFR5cGUoKSAhPSB3eEVWVF9D
SEFSKSB7CisgICAgICAgICAgICAgICAgLy9XZWJraXQgZG9lc24ndCBoYW5kbGUgdGhlc2UuLi4K
KyAgICAgICAgICAgICAgICBpZiAoZXZlbnQuR2V0TW9kaWZpZXJzKCkgPT0gd3hNT0RfQ01EKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChldmVudC5HZXRL
ZXlDb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA2NzogLy8iQyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX21haW5GcmFtZS0+Q2FuQ29weSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9tYWluRnJhbWUtPkNvcHkoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGNhc2UgODg6IC8vIlgiCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9tYWluRnJhbWUt
PkNhbkN1dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9tYWluRnJhbWUtPkN1
dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIDg2OiAvLyJWIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbWFp
bkZyYW1lLT5DYW5QYXN0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9tYWlu
RnJhbWUtPlBhc3RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgOTA6IC8vIloiCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9tYWluRnJhbWUtPkNhblVuZG8oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbWFpbkZyYW1lLT5VbmRvKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGV2ZW50LkdldE1vZGlmaWVycygpID09IHd4TU9EX0NNRCAmJiB3eE1PRF9TSElGVCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuR2V0S2V5Q29kZSgpID09IDkwICYmIG1fbWFpbkZy
YW1lLT5DYW5SZWRvKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFpbkZyYW1lLT5S
ZWRvKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX21haW5GcmFtZS0+Q2FuVW5kbygpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9tYWluRnJhbWUtPlVuZG8oKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKHdrRXZlbnQuYWx0S2V5KCkpCisgICAgICAgICAgICAgICAgICAgIGlm
IChmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUFjY2Vzc0tleSh3a0V2ZW50KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly9XZWJLaXQgZG9lc24ndCBkbyBrZXlib2FyZCBwYWdlIHNjcm9sbGluZyBvdXRzaWRlIG9mIGFu
IGVkaXRvciBlaXRoZXIuLi4KKyAgICAgICAgICAgIGlmICghZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5rZXlFdmVudCh3a0V2ZW50KSkgeworICAgICAgICAgICAgICAgIGlmIChldmVudC5HZXRFdmVu
dFR5cGUoKSAhPSB3eEVWVF9DSEFSKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZl
bnQuR2V0S2V5Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgV1hLX0xFRlQ6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgV1hLX05VTVBBRF9MRUZUOgorICAgICAgICAgICAgICAg
ICAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZSgtV2ViQ29y
ZTo6Y1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCAwKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGNhc2UgV1hLX1VQOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIFdYS19OVU1QQURfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICBm
cmFtZS0+dmlldygpLT5zY3JvbGxCeShXZWJDb3JlOjpJbnRTaXplKDAsIC1XZWJDb3JlOjpjU2Ny
b2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBXWEtfUklHSFQ6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgV1hLX05VTVBBRF9SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1l
LT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoV2ViQ29yZTo6Y1Njcm9sbGJhclBp
eGVsc1BlckxpbmVTdGVwLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgV1hLX0RPV046CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgV1hLX05VTVBBRF9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnZpZXco
KS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZSgwLCBXZWJDb3JlOjpjU2Nyb2xsYmFyUGl4ZWxz
UGVyTGluZVN0ZXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBXWEtfRU5EOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFdYS19O
VU1QQURfRU5EOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2V0U2Ny
b2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQoZnJhbWUtPnZpZXcoKS0+c2Nyb2xsWCgpLCBm
cmFtZS0+dmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBXWEtfSE9NRToK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBXWEtfTlVNUEFEX0hPTUU6CisgICAgICAgICAgICAg
ICAgICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQ
b2ludChmcmFtZS0+dmlldygpLT5zY3JvbGxYKCksIDApKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBXWEtfUEFHRVVQOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIFdYS19OVU1QQURfUEFHRVVQOgorICAgICAgICAgICAgICAgICAg
ICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZSgwLCAtZnJhbWUt
PnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpICsgV2ViQ29yZTo6Y0Ftb3VudFRvS2VlcFdoZW5QYWdp
bmcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBXWEtfUEFHRURPV046CisgICAgICAgICAgICAgICAgICAgIGNhc2UgV1hLX05VTVBB
RF9QQUdFRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9s
bEJ5KFdlYkNvcmU6OkludFNpemUoMCwgZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpIC0g
V2ViQ29yZTo6Y0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsgICAgCi0gICAgICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQgd2tFdmVudChldmVudCk7Ci0gICAgICAgICAgICBpZiAod2tF
dmVudC50eXBlKCkgPT0gV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyICYmIHdr
RXZlbnQuYWx0S2V5KCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5o
YW5kbGVBY2Nlc3NLZXkod2tFdmVudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudCh3a0V2ZW50KTsKKyAgICAgICAgICAg
IH0gZWxzZSAvL0V2ZW50IHdhcyBoYW5kbGVkIGJ5IHdlYmtpdCBoYW5kbGVyCisgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIC8vIG1ha2Ugc3VyZSB3
ZSBnZXQgdGhlIGNoYXJhY3RlciBldmVudC4KLSAgICBpZiAoZXZlbnQuR2V0RXZlbnRUeXBlKCkg
IT0gd3hFVlRfQ0hBUikKLSAgICAgICAgZXZlbnQuU2tpcCgpOworCisgICAgZXZlbnQuU2tpcCgp
OwogfQogCiB2b2lkIHd4V2ViVmlldzo6T25TZXRGb2N1cyh3eEZvY3VzRXZlbnQmIGV2ZW50KQpJ
bmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDQxOTk5KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNiBAQAorMjAwOS0wMy0yNSAgbWlnZ2lsaW4gIDxtci5kaWdnaWxpbkBnbWFpbC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0FS
TklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgVXNlIFdlYmtp
dCdzIG1vdXNlIHdoZWVsIHNjcm9sbGluZyBmb3IgbmF0aXZlIHd4CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVs
RXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbFBvc2l0aW9uKToKKwogMjAw
OS0wMy0yNSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE9saXZlciBIdW50IGFuZCBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3d4L1Njcm9sbFZpZXdXeC5jcHAJKHJldmlzaW9uIDQxOTM2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS93eC9TY3JvbGxWaWV3V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMTIgKzE5MSwxMiBA
QAogICAgIGlmIChuZXdTY3JvbGxPZmZzZXQueCA8IDApCiAgICAgICAgIG5ld1Njcm9sbE9mZnNl
dC54ID0gMDsKICAgICBlbHNlIGlmIChuZXdTY3JvbGxPZmZzZXQueCArIGNSZWN0LndpZHRoID4g
dlJlY3Qud2lkdGgpCi0gICAgICAgIG5ld1Njcm9sbE9mZnNldC54ID0gbWF4KDAsIHZSZWN0Lndp
ZHRoIC0gY1JlY3Qud2lkdGggLSAxKTsKKyAgICAgICAgbmV3U2Nyb2xsT2Zmc2V0LnggPSBtYXgo
MCwgdlJlY3Qud2lkdGggLSBjUmVjdC53aWR0aCk7CiAKICAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0
LnkgPCAwKQogICAgICAgICBuZXdTY3JvbGxPZmZzZXQueSA9IDA7CiAgICAgZWxzZSBpZiAobmV3
U2Nyb2xsT2Zmc2V0LnkgKyBjUmVjdC5oZWlnaHQgPiB2UmVjdC5oZWlnaHQpCi0gICAgICAgIG5l
d1Njcm9sbE9mZnNldC55ID0gbWF4KDAsIHZSZWN0LmhlaWdodCAtIGNSZWN0LmhlaWdodCAtIDEp
OworICAgICAgICBuZXdTY3JvbGxPZmZzZXQueSA9IG1heCgwLCB2UmVjdC5oZWlnaHQgLSBjUmVj
dC5oZWlnaHQpOwogCiAgICAgaWYgKG5ld1Njcm9sbE9mZnNldCA9PSBzY3JvbGxPZmZzZXQpCiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gNDE5
MzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MDEsOCArNjAxLDEzIEBACiB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1X
aGVlbEV2ZW50JiBlKQogewogICAgIC8vIFdlIGRvbid0IGFsbG93IG1vdXNlIHdoZWVsaW5nIHRv
IGhhcHBlbiBpbiBhIFNjcm9sbFZpZXcgdGhhdCBoYXMgaGFkIGl0cyBzY3JvbGxiYXJzIGV4cGxp
Y2l0bHkgZGlzYWJsZWQuCi0gICAgaWYgKCFjYW5IYXZlU2Nyb2xsYmFycygpIHx8IHBsYXRmb3Jt
V2lkZ2V0KCkpCisjaWYgUExBVEZPUk0oV1gpCisgICAgaWYgKCFjYW5IYXZlU2Nyb2xsYmFycygp
KSB7CisjZWxzZQorICAgIGlmICghY2FuSGF2ZVNjcm9sbGJhcnMoKSB8fCBwbGF0Zm9ybVdpZGdl
dCgpKSB7CisjZW5kaWYKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIERldGVybWlu
ZSBob3cgbXVjaCB3ZSB3YW50IHRvIHNjcm9sbC4gIElmIHdlIGNhbiBtb3ZlIGF0IGFsbCwgd2Ug
d2lsbCBhY2NlcHQgdGhlIGV2ZW50LgogICAgIEludFNpemUgbWF4U2Nyb2xsRGVsdGEgPSBtYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29156</attachid>
            <date>2009-04-01 00:22:40 -0700</date>
            <delta_ts>2009-04-24 23:56:53 -0700</delta_ts>
            <desc>more complete keyboard shortcuts support</desc>
            <filename>keyboardshortcuts.diff</filename>
            <type>text/plain</type>
            <size>26314</size>
            <attacher name="Diggilin">mr.diggilin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9FZGl0b3JDbGllbnRXeC5jcHAJKHJldmlz
aW9uIDQxOTM2KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRWRpdG9yQ2xpZW50V3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8PCAwOworc3RhdGljIGNvbnN0
IHVuc2lnbmVkIEFsdEtleSA9IDEgPDwgMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBTaGlmdEtl
eSA9IDEgPDwgMjsKKworc3RydWN0IEtleURvd25FbnRyeSB7CisgICAgdW5zaWduZWQgdmlydHVh
bEtleTsKKyAgICB1bnNpZ25lZCBtb2RpZmllcnM7CisgICAgY29uc3QgY2hhciogbmFtZTsKK307
CisKK3N0cnVjdCBLZXlQcmVzc0VudHJ5IHsKKyAgICB1bnNpZ25lZCBjaGFyQ29kZTsKKyAgICB1
bnNpZ25lZCBtb2RpZmllcnM7CisgICAgY29uc3QgY2hhciogbmFtZTsKK307CisKK3N0YXRpYyBj
b25zdCBLZXlEb3duRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKKyAgICB7IFZLX0xFRlQsICAg
MCwgICAgICAgICAgICAgICAgICAiTW92ZUxlZnQiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKKyAgICB7IFZLX0xFRlQsICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZUxl
ZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0xFRlQs
ICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRMZWZ0IiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKKyAgICB7IFZLX0xFRlQsICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiTW92
ZVdvcmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1JJ
R0hULCAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1JJR0hULCAgU2hpZnRLZXksICAgICAgICAgICAi
TW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZL
X1JJR0hULCAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRSaWdodCIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1JJR0hULCAgQ3RybEtleSB8IFNoaWZ0S2V5
LCAiTW92ZVdvcmRSaWdodEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwKKyAgICB7
IFZLX1VQLCAgICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVVwIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1VQLCAgICAgU2hpZnRLZXksICAgICAg
ICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICB7IFZLX1BSSU9SLCAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNl
bGVjdGlvbiIgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0RPV04sICAgMCwgICAgICAgICAg
ICAgICAgICAiTW92ZURvd24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICB7IFZLX0RPV04sICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlT
ZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX05FWFQsICAgU2hpZnRLZXks
ICAgICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAg
fSwKKyAgICB7IFZLX1BSSU9SLCAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX05FWFQsICAgMCwgICAg
ICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKKyAgICB7IFZLX0hPTUUsICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5u
aW5nT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0hPTUUsICAgU2hp
ZnRLZXksICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9u
IiAgICAgfSwKKyAgICB7IFZLX0hPTUUsICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVRvQmVn
aW5uaW5nT2ZEb2N1bWVudCIgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0hPTUUsICAg
Q3RybEtleSB8IFNoaWZ0S2V5LCAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNl
bGVjdGlvbiIgfSwKKworICAgIHsgVktfRU5ELCAgICAwLCAgICAgICAgICAgICAgICAgICJNb3Zl
VG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfRU5E
LCAgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rp
b24iICAgICAgICAgICB9LAorICAgIHsgVktfRU5ELCAgICBDdHJsS2V5LCAgICAgICAgICAgICJN
b3ZlVG9FbmRPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktf
RU5ELCAgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICB9LAorCisgICAgeyBWS19CQUNLLCAgIDAsICAgICAgICAgICAgICAg
ICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
eyBWS19CQUNLLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ERUxFVEUsIDAsICAgICAgICAgICAg
ICAgICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgeyBWS19CQUNLLCAgIEN0cmxLZXksICAgICAgICAgICAgIkRlbGV0ZVdvcmRCYWNrd2FyZCIg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ERUxFVEUsIEN0cmxLZXksICAg
ICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgCisgICAgeyAnQicsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlRvZ2dsZUJvbGQi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnSScsICAgICAgIEN0
cmxLZXksICAgICAgICAgICAgIlRvZ2dsZUl0YWxpYyIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCisKKyAgICB7IFZLX0VTQ0FQRSwgMCwgICAgICAgICAgICAgICAgICAiQ2FuY2Vs
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAvL0ZJWE1FOiB0
aGlzJ2xsIG5ldmVyIGhhcHBlbi4gV2UgY2FuIHRyYXNoIGl0IG9yIG1ha2UgaXQgYSBub3JtYWwg
cGVyaW9kCisgICAgeyBWS19PRU1fUEVSSU9ELCBDdHJsS2V5LCAgICAgICAgIkNhbmNlbCIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19UQUIsICAgIDAs
ICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgeyBWS19UQUIsICAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2VydEJh
Y2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SRVRVUk4s
IDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgeyBWS19SRVRVUk4sIEN0cmxLZXksICAgICAgICAgICAgIkluc2Vy
dE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SRVRV
Uk4sIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgeyBWS19SRVRVUk4sIEFsdEtleSB8IFNoaWZ0S2V5LCAgIklu
c2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnQScs
ICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlNlbGVjdEFsbCIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgeyAnWicsICAgICAgIEN0cmxLZXksICAgICAgICAgICAg
IlVuZG8iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAn
WicsICAgICAgIEN0cmxLZXkgfCBTaGlmdEtleSwgIlJlZG8iICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCit9OworCitzdGF0aWMgY29uc3QgS2V5UHJlc3NFbnRyeSBr
ZXlQcmVzc0VudHJpZXNbXSA9IHsKKyAgICB7ICdcdCcsICAgMCwgICAgICAgICAgICAgICAgICAi
SW5zZXJ0VGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdc
dCcsICAgU2hpZnRLZXksICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKKyAgICB7ICdccicsICAgMCwgICAgICAgICAgICAgICAgICAiSW5z
ZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdccics
ICAgQ3RybEtleSwgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKKyAgICB7ICdccicsICAgQWx0S2V5LCAgICAgICAgICAgICAiSW5zZXJ0
TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdccicsICAg
QWx0S2V5IHwgU2hpZnRLZXksICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKK307CisKIEVkaXRvckNsaWVudFd4Ojp+RWRpdG9yQ2xpZW50V3goKQogewog
ICAgIG1fcGFnZSA9IE5VTEw7CkBAIC0yODYsNiArMzYxLDc0IEBACiAgICAgfQogfQogCitib29s
IEVkaXRvckNsaWVudFd4OjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
KiBldmVudCkKK3sKKyAgICBOb2RlKiBub2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsK
KyAgICBBU1NFUlQobm9kZSk7CisgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKTsKKyAgICBBU1NFUlQoZnJhbWUpOworCisgICAgY29uc3QgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50KiBrZXlFdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpOworCisgICAgLy9OQjogdGhpcyBp
cyB3aGF0IHdpbmRvd3MgZG9lcywgYnV0IHRoZXkgYWxzbyBoYXZlIGEga2V5cHJlc3MgZXZlbnQg
Zm9yIEFsdCtFbnRlciB3aGljaCBjbGVhcmx5IHdvbid0IGdldCBoaXQgd2l0aCB0aGlzCisgICAg
aWYgKCFrZXlFdmVudCB8fCBrZXlFdmVudC0+YWx0S2V5KCkpICAvLyBkbyBub3QgdHJlYXQgdGhp
cyBhcyB0ZXh0IGlucHV0IGlmIEFsdCBpcyBkb3duCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGlu
dGVycHJldEtleUV2ZW50KGV2ZW50KSk7CisKKyAgICBpZiAoa2V5RXZlbnQtPnR5cGUoKSA9PSBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlJhd0tleURvd24pIHsKKyAgICAgICAgLy8gV2ViS2l0IGRv
ZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBkZWNpZGUgaG93IGNv
bW1hbmRzIHRoYXQganVzdCBpbnNlcnQgdGV4dCBpZiBleGVjdXRlZCB2aWEgRWRpdG9yIHNob3Vs
ZCBiZSB0cmVhdGVkLAorICAgICAgICAvLyBzbyB3ZSBsZWF2ZSBpdCB1cG9uIFdlYkNvcmUgdG8g
ZWl0aGVyIGhhbmRsZSB0aGVtIGltbWVkaWF0ZWx5IChlLmcuIFRhYiB0aGF0IGNoYW5nZXMgZm9j
dXMpIG9yIGlmIG5vdCB0byBsZXQgYSBDSEFSIGV2ZW50IGJlIGdlbmVyYXRlZAorICAgICAgICAv
LyAoZS5nLiBUYWIgdGhhdCBpbnNlcnRzIGEgVGFiIGNoYXJhY3Rlciwgb3IgRW50ZXIpLgorICAg
ICAgICByZXR1cm4gIWNvbW1hbmQuaXNUZXh0SW5zZXJ0aW9uKCkgJiYgY29tbWFuZC5leGVjdXRl
KGV2ZW50KTsKKyAgICB9CisKKyAgICAgaWYgKGNvbW1hbmQuZXhlY3V0ZShldmVudCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3IgY29udHJvbCBj
aGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91cgorICAg
IGlmIChldmVudC0+Y2hhckNvZGUoKSA8ICcgJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChldmVudC0+a2V5RXZlbnQoKS0+
dGV4dCgpLCBldmVudCk7Cit9CisKK2NvbnN0IGNoYXIqIEVkaXRvckNsaWVudFd4OjppbnRlcnBy
ZXRLZXlFdmVudChjb25zdCBLZXlib2FyZEV2ZW50KiBldnQpCit7CisgICAgQVNTRVJUKGV2dC0+
a2V5RXZlbnQoKS0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5RG93biB8
fCBldnQtPmtleUV2ZW50KCktPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIp
OworCisgICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleURvd25Db21tYW5k
c01hcCA9IDA7CisgICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleVByZXNz
Q29tbWFuZHNNYXAgPSAwOworCisgICAgaWYgKCFrZXlEb3duQ29tbWFuZHNNYXApIHsKKyAgICAg
ICAga2V5RG93bkNvbW1hbmRzTWFwID0gbmV3IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj47Cisg
ICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAgPSBuZXcgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIq
PjsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1hTSVpFT0Yoa2V5RG93bkVu
dHJpZXMpOyBpKyspCisgICAgICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAtPnNldChrZXlEb3du
RW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlEb3duRW50cmllc1tpXS52aXJ0dWFsS2V5
LCBrZXlEb3duRW50cmllc1tpXS5uYW1lKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgV1hTSVpFT0Yoa2V5UHJlc3NFbnRyaWVzKTsgaSsrKQorICAgICAgICAgICAga2V5UHJl
c3NDb21tYW5kc01hcC0+c2V0KGtleVByZXNzRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBr
ZXlQcmVzc0VudHJpZXNbaV0uY2hhckNvZGUsIGtleVByZXNzRW50cmllc1tpXS5uYW1lKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOworICAgIGlmIChldnQtPnNoaWZ0S2V5
KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBTaGlmdEtleTsKKyAgICBpZiAoZXZ0LT5hbHRLZXko
KSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEFsdEtleTsKKyAgICBpZiAoZXZ0LT5jdHJsS2V5KCkp
CisgICAgICAgIG1vZGlmaWVycyB8PSBDdHJsS2V5OworCisgICAgaWYgKGV2dC0+a2V5RXZlbnQo
KS0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5RG93bikgeworICAgICAg
ICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZ0LT5rZXlDb2RlKCk7CisgICAgICAg
IHJldHVybiBtYXBLZXkgPyBrZXlEb3duQ29tbWFuZHNNYXAtPmdldChtYXBLZXkpIDogMDsKKyAg
ICB9CisKKyAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZ0LT5jaGFyQ29kZSgp
OworICAgIHJldHVybiBtYXBLZXkgPyBrZXlQcmVzc0NvbW1hbmRzTWFwLT5nZXQobWFwS2V5KSA6
IDA7Cit9CisKKwogdm9pZCBFZGl0b3JDbGllbnRXeDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3du
KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogLy8gTk9URTogd2UgZG9uJ3QgY3VycmVudGx5IG5l
ZWQgdG8gaGFuZGxlIHRoaXMuIFdoZW4ga2V5IGV2ZW50cyBvY2N1ciwKQEAgLTI5NSw2MyArNDM4
LDggQEAKIAogdm9pZCBFZGl0b3JDbGllbnRXeDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2Fy
ZEV2ZW50KiBldmVudCkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtldmVudCA9IGV2ZW50
LT5rZXlFdmVudCgpOwotICAgIGlmIChrZXZlbnQtPnR5cGUoKSAhPSBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OktleVVwKSB7Ci0gICAgICAgIE5vZGUqIHN0YXJ0ID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5zdGFydCgpLm5vZGUoKTsKLSAgICAgICAgaWYgKCFzdGFydCB8fCAhc3RhcnQtPmlzQ29udGVu
dEVkaXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm47IAotICAgICAgICAKLSAgICAgICAgaWYg
KGtldmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhciAmJiAha2V2ZW50
LT5jdHJsS2V5KCkgJiYgIWtldmVudC0+YWx0S2V5KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
a2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewotICAgICAgICAgICAgICAgIC8vIHdl
IGhhbmRsZWQgdGhlc2Ugb24ga2V5IGRvd24sIGlnbm9yZSB0aGVtIGZvciBjaGFyIGV2ZW50cwot
ICAgICAgICAgICAgICAgIGNhc2UgVktfQkFDSzoKLSAgICAgICAgICAgICAgICBjYXNlIFZLX0RF
TEVURToKLSAgICAgICAgICAgICAgICBjYXNlIFZLX0xFRlQ6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBWS19SSUdIVDoKLSAgICAgICAgICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgICAg
IGNhc2UgVktfRE9XTjoKLSAgICAgICAgICAgICAgICBjYXNlIFZLX1JFVFVSTjoKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGtldmVudC0+dGV4dCgpLCBldmVu
dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKLSAgICAgICAgICAgIHJldHVybjsgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN3
aXRjaCAoa2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewotICAgICAgICAgICAgY2Fz
ZSBWS19CQUNLOgotICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERp
cmVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyR3JhbnVsYXJpdHks
IGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
VktfREVMRVRFOgotICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERp
cmVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJELAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXJHcmFudWxhcml0eSwg
ZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBW
S19MRUZUOgotICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZUxl
ZnQiKS5leGVjdXRlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFZLX1JJR0hUOgotICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92
ZVJpZ2h0IikuZXhlY3V0ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBWS19VUDoKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1v
dmVVcCIpLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgVktfRE9XTjoKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1v
dmVEb3duIikuZXhlY3V0ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBWS19SRVRVUk46Ci0gICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5k
KCJJbnNlcnRMaW5lQnJlYWsiKS5leGVjdXRlKCk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICBpZiAoaGFu
ZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoZXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKLSAgICB9CiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50V3g6OnRleHRGaWVsZERp
ZEJlZ2luRWRpdGluZyhFbGVtZW50KikKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Vk
aXRvckNsaWVudFd4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRWRp
dG9yQ2xpZW50V3guaAkocmV2aXNpb24gNDE5MzYpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9y
dC9FZGl0b3JDbGllbnRXeC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw4IEBACiAgICAg
dmlydHVhbCB2b2lkIHVuZG8oKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVkbygpOwogICAgIAorICAg
IHZpcnR1YWwgY29uc3QgY2hhciogaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgS2V5Ym9hcmRFdmVu
dCopOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXlib2Fy
ZEV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRF
dmVudCopOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9h
cmRFdmVudCopOwogICAgIApJbmRleDogV2ViS2l0L3d4L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjE0OCkKKysrIFdlYktpdC93eC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAwOS0wNC0wMSAgbWlnZ2ls
aW4gIDxtci5kaWdnaWxpbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRnVsbCBLZXlib2FyZCBzaG9ydGN1dCBzdXBwb3J0LgorICAg
ICAgICBJbXBsZW1lbnQgd3hCcm93c2VyIEN1dC9Db3B5L1Bhc3RlIG1lbnUgaXRlbXMuCisKKyAg
ICAgICAgKiBXZWJCcm93c2VyU2hlbGwuY3BwOgorICAgICAgICAod3hXZWJCcm93c2VyU2hlbGw6
Ok9uU2VhcmNoQ3RybEVudGVyKToKKyAgICAgICAgKHd4V2ViQnJvd3NlclNoZWxsOjpPbkN1dCk6
CisgICAgICAgICh3eFdlYkJyb3dzZXJTaGVsbDo6T25Db3B5KToKKyAgICAgICAgKHd4V2ViQnJv
d3NlclNoZWxsOjpPblBhc3RlKToKKyAgICAgICAgKiBXZWJCcm93c2VyU2hlbGwuaDoKKyAgICAg
ICAgKiBXZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Oik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRXeDo6aGFuZGxlRWRpdGluZ0tleWJv
YXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50V3g6OmludGVycHJldEtl
eUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFd4OjpoYW5kbGVLZXlib2Fy
ZEV2ZW50KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4Lmg6CisgICAg
ICAgICogV2ViVmlldy5jcHA6CisgICAgICAgICh3eFdlYlZpZXc6OkNhbkN1dCk6CisgICAgICAg
ICh3eFdlYlZpZXc6OkNhblBhc3RlKToKKyAgICAgICAgKHd4V2ViVmlldzo6UGFzdGUpOgorICAg
ICAgICAod3hXZWJWaWV3OjpPbktleUV2ZW50cyk6CisKIDIwMDktMDMtMzAgIEtldmluIFdhdHRl
cnMgIDxrZXZpbndhdHRlcnNAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtldmlu
IE9sbGl2aWVyLgpJbmRleDogV2ViS2l0L3d4L1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93eC9XZWJWaWV3LmNwcAkocmV2aXNpb24gNDE5MzYpCisrKyBXZWJLaXQvd3gvV2ViVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3Vic3RpdHV0ZURh
dGEuaCIKQEAgLTU4Myw3ICs1ODQsNyBAQAogYm9vbCB3eFdlYlZpZXc6OkNhbkN1dCgpCiB7CiAg
ICAgaWYgKG1fbWFpbkZyYW1lKQotICAgICAgICBtX21haW5GcmFtZS0+Q2FuQ3V0KCk7CisgICAg
ICAgIHJldHVybiBtX21haW5GcmFtZS0+Q2FuQ3V0KCk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9
CkBAIC01OTcsNyArNTk4LDcgQEAKIGJvb2wgd3hXZWJWaWV3OjpDYW5QYXN0ZSgpCiB7CiAgICAg
aWYgKG1fbWFpbkZyYW1lKQotICAgICAgICBtX21haW5GcmFtZS0+Q2FuUGFzdGUoKTsKKyAgICAg
ICAgcmV0dXJuIG1fbWFpbkZyYW1lLT5DYW5QYXN0ZSgpOwogCiAgICAgcmV0dXJuIGZhbHNlOwog
fQpAQCAtNjA2LDcgKzYwNyw2IEBACiB7CiAgICAgaWYgKG1fbWFpbkZyYW1lKQogICAgICAgICBt
X21haW5GcmFtZS0+UGFzdGUoKTsKLQogfQogCiB2b2lkIHd4V2ViVmlldzo6T25LZXlFdmVudHMo
d3hLZXlFdmVudCYgZXZlbnQpCkBAIC02MTQsNDAgKzYxNCwxMzcgQEAKICAgICBXZWJDb3JlOjpG
cmFtZSogZnJhbWUgPSAwOwogICAgIGlmIChtX21haW5GcmFtZSkKICAgICAgICAgZnJhbWUgPSBt
X21haW5GcmFtZS0+R2V0RnJhbWUoKTsKLSAgICAgICAgCi0gICAgaWYgKGZyYW1lICYmIGZyYW1l
LT52aWV3KCkpIHsKLSAgICAgICAgLy8gV2ViQ29yZSBkb2Vzbid0IGhhbmRsZSB0aGVzZSBldmVu
dHMgaXRzZWxmLCBzbyB3ZSBuZWVkIHRvIGRvCi0gICAgICAgIC8vIGl0IGFuZCBub3Qgc2VuZCB0
aGUgZXZlbnQgZG93biBvciBlbHNlIENUUkwrQyB3aWxsIGVyYXNlIHRoZSB0ZXh0Ci0gICAgICAg
IC8vIGFuZCByZXBsYWNlIGl0IHdpdGggYy4KLSAgICAgICAgaWYgKGV2ZW50LkNtZERvd24oKSAm
JiBldmVudC5HZXRFdmVudFR5cGUoKSA9PSB3eEVWVF9LRVlfVVApIHsKLSAgICAgICAgICAgIGlm
IChldmVudC5HZXRLZXlDb2RlKCkgPT0gc3RhdGljX2Nhc3Q8aW50PignQycpKQorCisgICAgaWYg
KCEoZnJhbWUgJiYgZnJhbWUtPnZpZXcoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChl
dmVudC5HZXRLZXlDb2RlKCkgPT0gV1hLX0NBUElUQUwpCisgICAgICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CisKKyAgICBXZWJDb3JlOjpQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQgd2tFdmVudChldmVudCk7CisKKyAgICBpZiAoZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5rZXlFdmVudCh3a0V2ZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly9Tb21lIHRoaW5ncyBXZWJLaXQgd29uJ3QgZG8gZm9yIHVzLi4uIENvcHkvQ3V0L1Bhc3RlIGFu
ZCBLQiBzY3JvbGxpbmcKKyAgICBpZiAoZXZlbnQuR2V0RXZlbnRUeXBlKCkgPT0gd3hFVlRfS0VZ
X0RPV04pIHsKKyAgICAgICAgc3dpdGNoIChldmVudC5HZXRLZXlDb2RlKCkpIHsKKyAgICAgICAg
Y2FzZSA2NzogLy8iQyIKKyAgICAgICAgICAgIGlmIChDYW5Db3B5KCkgJiYgZXZlbnQuR2V0TW9k
aWZpZXJzKCkgPT0gd3hNT0RfQ01EKSB7CiAgICAgICAgICAgICAgICAgQ29weSgpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoZXZlbnQuR2V0S2V5Q29kZSgpID09IHN0YXRpY19jYXN0PGludD4oJ1gn
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSA4NjogLy8iViIKKyAgICAgICAgICAgIGlmIChDYW5QYXN0ZSgp
ICYmIGV2ZW50LkdldE1vZGlmaWVycygpID09IHd4TU9EX0NNRCkgeworICAgICAgICAgICAgICAg
IFBhc3RlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODg6IC8vIlgiCisgICAgICAgICAgICBpZiAoQ2Fu
Q3V0KCkgJiYgZXZlbnQuR2V0TW9kaWZpZXJzKCkgPT0gd3hNT0RfQ01EKSB7CiAgICAgICAgICAg
ICAgICAgQ3V0KCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudC5HZXRLZXlDb2RlKCkgPT0g
c3RhdGljX2Nhc3Q8aW50PignVicpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdYS19JTlNFUlQ6CisgICAg
ICAgICAgICBpZiAoQ2FuQ29weSgpICYmIGV2ZW50LkdldE1vZGlmaWVycygpID09IHd4TU9EX0NN
RCkgeworICAgICAgICAgICAgICAgIENvcHkoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoQ2FuUGFzdGUoKSAmJiBldmVudC5HZXRNb2Rp
ZmllcnMoKSA9PSB3eE1PRF9TSElGVCkgewogICAgICAgICAgICAgICAgIFBhc3RlKCk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChldmVudC5HZXRLZXlDb2RlKCkgPT0gc3RhdGljX2Nhc3Q8aW50Pign
WicpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50LlNoaWZ0RG93bigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX21haW5GcmFtZS0+Q2FuUmVkbygpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9tYWluRnJhbWUtPlJlZG8oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX21haW5GcmFtZS0+Q2Fu
VW5kbygpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9tYWluRnJhbWUtPlVuZG8oKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgeyAgICAKLSAgICAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9h
cmRFdmVudCB3a0V2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIGlmICh3a0V2ZW50LnR5cGUoKSA9
PSBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIgJiYgd2tFdmVudC5hbHRLZXko
KSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUFjY2Vzc0tl
eSh3a0V2ZW50KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmtleUV2ZW50KHdrRXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOyAvL0lu
c2VydCBzaGFsbCBub3QgYmVjb21lIGEgY2hhcgorICAgICAgICBjYXNlIFdYS19ERUxFVEU6Cisg
ICAgICAgICAgICBpZiAoQ2FuQ3V0KCkgJiYgZXZlbnQuR2V0TW9kaWZpZXJzKCkgPT0gd3hNT0Rf
U0hJRlQpIHsKKyAgICAgICAgICAgICAgICBDdXQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXWEtfTEVG
VDoKKyAgICAgICAgY2FzZSBXWEtfTlVNUEFEX0xFRlQ6CisgICAgICAgICAgICBmcmFtZS0+dmll
dygpLT5zY3JvbGxCeShXZWJDb3JlOjpJbnRTaXplKC1XZWJDb3JlOjpjU2Nyb2xsYmFyUGl4ZWxz
UGVyTGluZVN0ZXAsIDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBXWEtf
VVA6CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9VUDoKKyAgICAgICAgICAgIGZyYW1lLT52aWV3
KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoMCwgLVdlYkNvcmU6OmNTY3JvbGxiYXJQaXhl
bHNQZXJMaW5lU3RlcCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFdYS19S
SUdIVDoKKyAgICAgICAgY2FzZSBXWEtfTlVNUEFEX1JJR0hUOgorICAgICAgICAgICAgZnJhbWUt
PnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZShXZWJDb3JlOjpjU2Nyb2xsYmFyUGl4
ZWxzUGVyTGluZVN0ZXAsIDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBX
WEtfRE9XTjoKKyAgICAgICAgY2FzZSBXWEtfTlVNUEFEX0RPV046CisgICAgICAgICAgICBmcmFt
ZS0+dmlldygpLT5zY3JvbGxCeShXZWJDb3JlOjpJbnRTaXplKDAsIFdlYkNvcmU6OmNTY3JvbGxi
YXJQaXhlbHNQZXJMaW5lU3RlcCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFdYS19FTkQ6CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9FTkQ6CisgICAgICAgICAgICBmcmFt
ZS0+dmlldygpLT5zZXRTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludChmcmFtZS0+dmll
dygpLT5zY3JvbGxYKCksIGZyYW1lLT52aWV3KCktPm1heGltdW1TY3JvbGxQb3NpdGlvbigpLnko
KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFdYS19IT01FOgorICAgICAg
ICBjYXNlIFdYS19OVU1QQURfSE9NRToKKyAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnNldFNj
cm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50KGZyYW1lLT52aWV3KCktPnNjcm9sbFgoKSwg
MCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFdYS19QQUdFVVA6CisgICAg
ICAgIGNhc2UgV1hLX05VTVBBRF9QQUdFVVA6CisgICAgICAgICAgICBmcmFtZS0+dmlldygpLT5z
Y3JvbGxCeShXZWJDb3JlOjpJbnRTaXplKDAsIC1mcmFtZS0+dmlldygpLT52aXNpYmxlSGVpZ2h0
KCkgKyBXZWJDb3JlOjpjQW1vdW50VG9LZWVwV2hlblBhZ2luZykpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIFdYS19QQUdFRE9XTjoKKyAgICAgICAgY2FzZSBXWEtfTlVNUEFE
X1BBR0VET1dOOgorICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6
SW50U2l6ZSgwLCBmcmFtZS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCkgLSBXZWJDb3JlOjpjQW1v
dW50VG9LZWVwV2hlblBhZ2luZykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvL1Ro
ZXNlIHdlIGRvbid0IHdhbnQgdHVybmluZyBpbnRvIGNoYXIgZXZlbnRzLCBzdHVmZiAnZW0KKyAg
ICAgICAgY2FzZSBXWEtfRVNDQVBFOgorICAgICAgICBjYXNlIFdYS19MQlVUVE9OOgorICAgICAg
ICBjYXNlIFdYS19SQlVUVE9OOgorICAgICAgICBjYXNlIFdYS19DQU5DRUw6CisgICAgICAgIGNh
c2UgV1hLX01FTlU6CisgICAgICAgIGNhc2UgV1hLX01CVVRUT046CisgICAgICAgIGNhc2UgV1hL
X0NMRUFSOgorICAgICAgICBjYXNlIFdYS19QQVVTRToKKyAgICAgICAgY2FzZSBXWEtfU0VMRUNU
OgorICAgICAgICBjYXNlIFdYS19QUklOVDoKKyAgICAgICAgY2FzZSBXWEtfRVhFQ1VURToKKyAg
ICAgICAgY2FzZSBXWEtfU05BUFNIT1Q6CisgICAgICAgIGNhc2UgV1hLX0hFTFA6CisgICAgICAg
IGNhc2UgV1hLX0YxOgorICAgICAgICBjYXNlIFdYS19GMjoKKyAgICAgICAgY2FzZSBXWEtfRjM6
CisgICAgICAgIGNhc2UgV1hLX0Y0OgorICAgICAgICBjYXNlIFdYS19GNToKKyAgICAgICAgY2Fz
ZSBXWEtfRjY6CisgICAgICAgIGNhc2UgV1hLX0Y3OgorICAgICAgICBjYXNlIFdYS19GODoKKyAg
ICAgICAgY2FzZSBXWEtfRjk6CisgICAgICAgIGNhc2UgV1hLX0YxMDoKKyAgICAgICAgY2FzZSBX
WEtfRjExOgorICAgICAgICBjYXNlIFdYS19GMTI6CisgICAgICAgIGNhc2UgV1hLX0YxMzoKKyAg
ICAgICAgY2FzZSBXWEtfRjE0OgorICAgICAgICBjYXNlIFdYS19GMTU6CisgICAgICAgIGNhc2Ug
V1hLX0YxNjoKKyAgICAgICAgY2FzZSBXWEtfRjE3OgorICAgICAgICBjYXNlIFdYS19GMTg6Cisg
ICAgICAgIGNhc2UgV1hLX0YxOToKKyAgICAgICAgY2FzZSBXWEtfRjIwOgorICAgICAgICBjYXNl
IFdYS19GMjE6CisgICAgICAgIGNhc2UgV1hLX0YyMjoKKyAgICAgICAgY2FzZSBXWEtfRjIzOgor
ICAgICAgICBjYXNlIFdYS19GMjQ6CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9GMToKKyAgICAg
ICAgY2FzZSBXWEtfTlVNUEFEX0YyOgorICAgICAgICBjYXNlIFdYS19OVU1QQURfRjM6CisgICAg
ICAgIGNhc2UgV1hLX05VTVBBRF9GNDoKKyAgICAgICAgLy9XaGVuIG51bWxvY2sgaXMgb2ZmIE51
bXBhZCA1IGJlY29tZXMgQkVHSU4sIG9yIEhPTUUgb24gQ2hhcgorICAgICAgICBjYXNlIFdYS19O
VU1QQURfQkVHSU46CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9JTlNFUlQ6CisgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gbWFrZSBzdXJlIHdlIGdl
dCB0aGUgY2hhcmFjdGVyIGV2ZW50LgotICAgIGlmIChldmVudC5HZXRFdmVudFR5cGUoKSAhPSB3
eEVWVF9DSEFSKQotICAgICAgICBldmVudC5Ta2lwKCk7CisKKyAgICBldmVudC5Ta2lwKCk7CiB9
CiAKIHZvaWQgd3hXZWJWaWV3OjpPblNldEZvY3VzKHd4Rm9jdXNFdmVudCYgZXZlbnQpCkluZGV4
OiBXZWJLaXQvd3gvV2ViQnJvd3NlclNoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gv
V2ViQnJvd3NlclNoZWxsLmNwcAkocmV2aXNpb24gNDE5MzYpCisrKyBXZWJLaXQvd3gvV2ViQnJv
d3NlclNoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOSBAQAogfTsKIAogQkVH
SU5fRVZFTlRfVEFCTEUod3hXZWJCcm93c2VyU2hlbGwsIHd4RnJhbWUpCisgICAgRVZUX01FTlUo
d3hJRF9DVVQsIHd4V2ViQnJvd3NlclNoZWxsOjpPbkN1dCkKKyAgICBFVlRfTUVOVSh3eElEX0NP
UFksIHd4V2ViQnJvd3NlclNoZWxsOjpPbkNvcHkpCisgICAgRVZUX01FTlUod3hJRF9QQVNURSwg
d3hXZWJCcm93c2VyU2hlbGw6Ok9uUGFzdGUpCiAgICAgRVZUX01FTlUod3hJRF9FWElULCAgd3hX
ZWJCcm93c2VyU2hlbGw6Ok9uUXVpdCkKICAgICBFVlRfTUVOVSh3eElEX0FCT1VULCB3eFdlYkJy
b3dzZXJTaGVsbDo6T25BYm91dCkKICAgICBFVlRfTUVOVShJRF9MT0FERklMRSwgd3hXZWJCcm93
c2VyU2hlbGw6Ok9uTG9hZEZpbGUpCkBAIC0yNTIsNiArMjU1LDI0IEBACiAgICAgfQogfQogCit2
b2lkIHd4V2ViQnJvd3NlclNoZWxsOjpPbkN1dCh3eENvbW1hbmRFdmVudCYgZXZlbnQpCit7Cisg
ICAgaWYgKHdlYnZpZXcgJiYgd2Vidmlldy0+Q2FuQ3V0KCkpCisgICAgICAgIHdlYnZpZXctPkN1
dCgpOworfQorCit2b2lkIHd4V2ViQnJvd3NlclNoZWxsOjpPbkNvcHkod3hDb21tYW5kRXZlbnQm
IGV2ZW50KQoreworICAgIGlmICh3ZWJ2aWV3ICYmIHdlYnZpZXctPkNhbkNvcHkoKSkKKyAgICAg
ICAgd2Vidmlldy0+Q29weSgpOworfQorCit2b2lkIHd4V2ViQnJvd3NlclNoZWxsOjpPblBhc3Rl
KHd4Q29tbWFuZEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAod2VidmlldyAmJiB3ZWJ2aWV3LT5D
YW5QYXN0ZSgpKQorICAgICAgICB3ZWJ2aWV3LT5QYXN0ZSgpOworfQorCiB2b2lkIHd4V2ViQnJv
d3NlclNoZWxsOjpPbkJhY2sod3hDb21tYW5kRXZlbnQmIGV2ZW50KQogewogICAgIGlmICh3ZWJ2
aWV3KQpJbmRleDogV2ViS2l0L3d4L1dlYkJyb3dzZXJTaGVsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93eC9XZWJCcm93c2VyU2hlbGwuaAkocmV2aXNpb24gNDE5MzYpCisrKyBXZWJLaXQvd3gv
V2ViQnJvd3NlclNoZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDkgQEAKIHByb3Rl
Y3RlZDoKIAogICAgIC8vIGV2ZW50IGhhbmRsZXJzICh0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIF9u
b3RfIGJlIHZpcnR1YWwpCisgICAgdm9pZCBPbkN1dCh3eENvbW1hbmRFdmVudCYgZXZlbnQpOwor
ICAgIHZvaWQgT25Db3B5KHd4Q29tbWFuZEV2ZW50JiBldmVudCk7CisgICAgdm9pZCBPblBhc3Rl
KHd4Q29tbWFuZEV2ZW50JiBldmVudCk7CiAgICAgdm9pZCBPblF1aXQod3hDb21tYW5kRXZlbnQm
IGV2ZW50KTsKICAgICB2b2lkIE9uQWJvdXQod3hDb21tYW5kRXZlbnQmIGV2ZW50KTsKICAgICB2
b2lkIE9uTG9hZEZpbGUod3hDb21tYW5kRXZlbnQmIGV2ZW50KTsKSW5kZXg6IFdlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjE0OCkK
KysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MDktMDQtMDEgIG1pZ2dpbGluICA8bXIuZGlnZ2lsaW5AZ21haWwuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FT
RVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIE1vdXNlIHdoZWVsIHNjcm9sbGluZyBhbmQg
a2V5Ym9hcmQgc2hvcnRjdXQgc3VwcG9ydCBmb3Igd3guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVsRXZlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL3d4L0tleWJvYXJkRXZlbnRXeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6cGxhdGZvcm1TZXRTY3JvbGxQb3NpdGlvbik6CisKIDIwMDktMDMtMzEgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJvbGxlZCBvdXQgdGhhdCBsYXN0IGNoYW5n
ZSB1bnRpbCBJIGNhbiBpbnZlc3RpZ2F0ZSB0aGUgcmVncmVzc2lvbiB0ZXN0IGZhaWx1cmVzIGl0
IHNlZW1zCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCShyZXZpc2lvbiA0
MTkzNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTkxLDEyICsxOTEsMTIgQEAKICAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0LnggPCAw
KQogICAgICAgICBuZXdTY3JvbGxPZmZzZXQueCA9IDA7CiAgICAgZWxzZSBpZiAobmV3U2Nyb2xs
T2Zmc2V0LnggKyBjUmVjdC53aWR0aCA+IHZSZWN0LndpZHRoKQotICAgICAgICBuZXdTY3JvbGxP
ZmZzZXQueCA9IG1heCgwLCB2UmVjdC53aWR0aCAtIGNSZWN0LndpZHRoIC0gMSk7CisgICAgICAg
IG5ld1Njcm9sbE9mZnNldC54ID0gbWF4KDAsIHZSZWN0LndpZHRoIC0gY1JlY3Qud2lkdGgpOwog
CiAgICAgaWYgKG5ld1Njcm9sbE9mZnNldC55IDwgMCkKICAgICAgICAgbmV3U2Nyb2xsT2Zmc2V0
LnkgPSAwOwogICAgIGVsc2UgaWYgKG5ld1Njcm9sbE9mZnNldC55ICsgY1JlY3QuaGVpZ2h0ID4g
dlJlY3QuaGVpZ2h0KQotICAgICAgICBuZXdTY3JvbGxPZmZzZXQueSA9IG1heCgwLCB2UmVjdC5o
ZWlnaHQgLSBjUmVjdC5oZWlnaHQgLSAxKTsKKyAgICAgICAgbmV3U2Nyb2xsT2Zmc2V0LnkgPSBt
YXgoMCwgdlJlY3QuaGVpZ2h0IC0gY1JlY3QuaGVpZ2h0KTsKIAogICAgIGlmIChuZXdTY3JvbGxP
ZmZzZXQgPT0gc2Nyb2xsT2Zmc2V0KQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3d4L0tleWJvYXJkRXZlbnRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS93eC9LZXlib2FyZEV2ZW50V3guY3BwCShyZXZpc2lvbiA0MTkzNikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vd3gvS2V5Ym9hcmRFdmVudFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDE0
ICsxNjMsMTcgQEAKICAgICAgICAgICAgIHJldHVybiBWS19ERUNJTUFMOyAvLyAoNkUpIERlY2lt
YWwga2V5CiAgICAgICAgIGNhc2UgV1hLX0RJVklERToKICAgICAgICAgICAgIHJldHVybiBWS19E
SVZJREU7IC8vICg2RikgRGl2aWRlIGtleQotCisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9TRVBB
UkFUT1I6CisgICAgICAgICAgICByZXR1cm4gVktfU0VQQVJBVE9SOwogICAgICAgICAKICAgICAg
ICAgY2FzZSBXWEtfQkFDSzoKICAgICAgICAgICAgIHJldHVybiBWS19CQUNLOyAvLyAoMDgpIEJB
Q0tTUEFDRSBrZXkKICAgICAgICAgY2FzZSBXWEtfVEFCOgorICAgICAgICBjYXNlIFdYS19OVU1Q
QURfVEFCOgogICAgICAgICAgICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBUQUIga2V5CiAgICAg
ICAgIGNhc2UgV1hLX0NMRUFSOgogICAgICAgICAgICAgcmV0dXJuIFZLX0NMRUFSOyAvLyAoMEMp
IENMRUFSIGtleQorICAgICAgICBjYXNlIFdYS19OVU1QQURfRU5URVI6CiAgICAgICAgIGNhc2Ug
V1hLX1JFVFVSTjoKICAgICAgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vKDBEKSBSZXR1cm4g
a2V5CiAgICAgICAgIGNhc2UgV1hLX1NISUZUOgpAQCAtMjA0LDIyICsyMDcsMzEgQEAKICAgICAg
ICAgICAgIC8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29udmVydAogICAgICAgICAgICAg
Ly8gVktfQUNDRVBUICgxRSkgSU1FIGFjY2VwdAogICAgICAgICAgICAgLy8gVktfTU9ERUNIQU5H
RSAoMUYpIElNRSBtb2RlIGNoYW5nZSByZXF1ZXN0CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9T
UEFDRToKICAgICAgICAgY2FzZSBXWEtfU1BBQ0U6CiAgICAgICAgICAgICByZXR1cm4gVktfU1BB
Q0U7IC8vICgyMCkgU1BBQ0VCQVIKKyAgICAgICAgY2FzZSBXWEtfTlVNUEFEX1BBR0VVUDoKICAg
ICAgICAgY2FzZSBXWEtfUEFHRVVQOgogICAgICAgICAgICAgcmV0dXJuIFZLX1BSSU9SOyAvLyAo
MjEpIFBBR0UgVVAga2V5CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9QQUdFRE9XTjoKICAgICAg
ICAgY2FzZSBXWEtfUEFHRURPV046CiAgICAgICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIy
KSBQQUdFIERPV04ga2V5CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9FTkQ6CiAgICAgICAgIGNh
c2UgV1hLX0VORDoKICAgICAgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQor
ICAgICAgICBjYXNlIFdYS19OVU1QQURfSE9NRToKICAgICAgICAgY2FzZSBXWEtfSE9NRToKICAg
ICAgICAgICAgIHJldHVybiBWS19IT01FOyAvLyAoMjQpIEhPTUUga2V5CisgICAgICAgIGNhc2Ug
V1hLX05VTVBBRF9MRUZUOgogICAgICAgICBjYXNlIFdYS19MRUZUOgogICAgICAgICAgICAgcmV0
dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKKyAgICAgICAgY2FzZSBXWEtfTlVN
UEFEX1VQOgogICAgICAgICBjYXNlIFdYS19VUDoKICAgICAgICAgICAgIHJldHVybiBWS19VUDsg
Ly8gKDI2KSBVUCBBUlJPVyBrZXkKKyAgICAgICAgY2FzZSBXWEtfTlVNUEFEX1JJR0hUOgogICAg
ICAgICBjYXNlIFdYS19SSUdIVDoKICAgICAgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8gKDI3
KSBSSUdIVCBBUlJPVyBrZXkKKyAgICAgICAgY2FzZSBXWEtfTlVNUEFEX0RPV046CiAgICAgICAg
IGNhc2UgV1hLX0RPV046CiAgICAgICAgICAgICByZXR1cm4gVktfRE9XTjsgLy8gKDI4KSBET1dO
IEFSUk9XIGtleQogICAgICAgICBjYXNlIFdYS19TRUxFQ1Q6CkBAIC0yMjgsMTEgKzI0MCwxMiBA
QAogICAgICAgICAgICAgcmV0dXJuIFZLX1BSSU5UOyAvLyAoMkEpIFBSSU5UIGtleQogICAgICAg
ICBjYXNlIFdYS19FWEVDVVRFOgogICAgICAgICAgICAgcmV0dXJuIFZLX0VYRUNVVEU7Ly8gKDJC
KSBFWEVDVVRFIGtleQotICAgICAgICAgICAgLy9kdW5ubyBvbiB0aGlzCi0gICAgICAgICAgICAv
L2Nhc2UgV1hLX1ByaW50U2NyZWVuOgotICAgICAgICAgICAgLy8gICAgICByZXR1cm4gVktfU05B
UFNIT1Q7IC8vICgyQykgUFJJTlQgU0NSRUVOIGtleQorICAgICAgICBjYXNlIFdYS19TTkFQU0hP
VDoKKyAgICAgICAgICAgICByZXR1cm4gVktfU05BUFNIT1Q7IC8vICgyQykgUFJJTlQgU0NSRUVO
IGtleQorICAgICAgICBjYXNlIFdYS19OVU1QQURfSU5TRVJUOgogICAgICAgICBjYXNlIFdYS19J
TlNFUlQ6CiAgICAgICAgICAgICByZXR1cm4gVktfSU5TRVJUOyAvLyAoMkQpIElOUyBrZXkKKyAg
ICAgICAgY2FzZSBXWEtfTlVNUEFEX0RFTEVURToKICAgICAgICAgY2FzZSBXWEtfREVMRVRFOgog
ICAgICAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5CiAgICAgICAgIGNh
c2UgV1hLX0hFTFA6CkBAIC0zMzYsNyArMzQ5LDE1IEBACiAgICAgaWYgKG1fdHlwZSAhPSBDaGFy
KQogICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yV3hLZXlDb2RlKGV2
ZW50LkdldEtleUNvZGUoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1fdGV4dCA9IHd4U3RyaW5n
KGV2ZW50LkdldFVuaWNvZGVLZXkoKSk7CisgICAgICAgIC8vRU5URVIgaXMgYW4gZWRpdGluZyBj
b21tYW5kIHByb2Nlc3NlZCBhcyBhIGNoYXIgKG9ubHkgRW50ZXIgYW5kIFRhYiBhcmUpCisgICAg
ICAgIC8vdW5mb3J0dW5hdGVseSB0aGUgdW5pY29kZSBrZXkgZm9yIG51bXBhZF9lbnRlciAoMzcw
KSBpcyBOT1Qgd2hhdCB3ZSB3YW50IGhlcmUgKDEzKQorICAgICAgICAvL1RoZSB1bmljb2RlIHZh
bHVlcyBmb3Igbm9ybWFsIGVudGVyIGFuZCB0YWIgYXJlIHRoZSBzYW1lIGFzIHRoZSBBU0NJSSB2
YWx1ZXMsIHRodXMgb2sKKyAgICAgICAgLy9Ob3RlIHRoYXQgSSB0aGluayB0aGlzIGEgd3ggYnVn
LCBhcyB0aGUgQ2hhcmFjdGVyIENvZGUgaXMgYWN0dWFsbHkgMTMgd2hlbgorICAgICAgICAvL251
bXBhZF9lbnRlciBpcyBhIENIQVIgZXZlbnQuCisgICAgICAgIGlmIChldmVudC5HZXRLZXlDb2Rl
KCkgPT0gMTMgJiYgZXZlbnQuR2V0VW5pY29kZUtleSgpID09IHd4Q2hhcigzNzApKQorICAgICAg
ICAgICAgbV90ZXh0ID0gIlxyIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV90ZXh0ID0g
d3hTdHJpbmcoZXZlbnQuR2V0VW5pY29kZUtleSgpKTsKICAgICAgICAgbV91bm1vZGlmaWVkVGV4
dCA9IG1fdGV4dDsKICAgICB9CiAgICAgbV9hdXRvUmVwZWF0ID0gZmFsc2U7IC8vIEZJWE1FOiBu
b3QgY29ycmVjdC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gNDE5MzYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MDEsOCArNjAxLDEzIEBACiB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1XaGVl
bEV2ZW50JiBlKQogewogICAgIC8vIFdlIGRvbid0IGFsbG93IG1vdXNlIHdoZWVsaW5nIHRvIGhh
cHBlbiBpbiBhIFNjcm9sbFZpZXcgdGhhdCBoYXMgaGFkIGl0cyBzY3JvbGxiYXJzIGV4cGxpY2l0
bHkgZGlzYWJsZWQuCi0gICAgaWYgKCFjYW5IYXZlU2Nyb2xsYmFycygpIHx8IHBsYXRmb3JtV2lk
Z2V0KCkpCisjaWYgUExBVEZPUk0oV1gpCisgICAgaWYgKCFjYW5IYXZlU2Nyb2xsYmFycygpKSB7
CisjZWxzZQorICAgIGlmICghY2FuSGF2ZVNjcm9sbGJhcnMoKSB8fCBwbGF0Zm9ybVdpZGdldCgp
KSB7CisjZW5kaWYKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIERldGVybWluZSBo
b3cgbXVjaCB3ZSB3YW50IHRvIHNjcm9sbC4gIElmIHdlIGNhbiBtb3ZlIGF0IGFsbCwgd2Ugd2ls
bCBhY2NlcHQgdGhlIGV2ZW50LgogICAgIEludFNpemUgbWF4U2Nyb2xsRGVsdGEgPSBtYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29782</attachid>
            <date>2009-04-24 23:56:53 -0700</date>
            <delta_ts>2009-05-05 16:17:27 -0700</delta_ts>
            <desc>Moved shortcut =&gt; action map to shared location</desc>
            <filename>keyboardshortcuts2.patch</filename>
            <type>text/plain</type>
            <size>27611</size>
            <attacher name="Diggilin">mr.diggilin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9FZGl0b3JDbGllbnRXeC5jcHAJKHJldmlz
aW9uIDQyNzE2KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRWRpdG9yQ2xpZW50V3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsNjMgKzI5NSwxNCBAQAogCiB2b2lkIEVkaXRvckNsaWVu
dFd4OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEZy
YW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICBOb2RlKiBub2RlID0g
ZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBBU1NFUlQobm9kZSk7CiAKLSAgICBjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtldmVudCA9IGV2ZW50LT5rZXlFdmVudCgpOwotICAg
IGlmIChrZXZlbnQtPnR5cGUoKSAhPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OktleVVwKSB7Ci0g
ICAgICAgIE5vZGUqIHN0YXJ0ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsK
LSAgICAgICAgaWYgKCFzdGFydCB8fCAhc3RhcnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAg
ICAgICAgICByZXR1cm47IAotICAgICAgICAKLSAgICAgICAgaWYgKGtldmVudC0+dHlwZSgpID09
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhciAmJiAha2V2ZW50LT5jdHJsS2V5KCkgJiYgIWtl
dmVudC0+YWx0S2V5KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoa2V2ZW50LT53aW5kb3dzVmly
dHVhbEtleUNvZGUoKSkgewotICAgICAgICAgICAgICAgIC8vIHdlIGhhbmRsZWQgdGhlc2Ugb24g
a2V5IGRvd24sIGlnbm9yZSB0aGVtIGZvciBjaGFyIGV2ZW50cwotICAgICAgICAgICAgICAgIGNh
c2UgVktfQkFDSzoKLSAgICAgICAgICAgICAgICBjYXNlIFZLX0RFTEVURToKLSAgICAgICAgICAg
ICAgICBjYXNlIFZLX0xFRlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBWS19SSUdIVDoKLSAgICAg
ICAgICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgICAgIGNhc2UgVktfRE9XTjoKLSAg
ICAgICAgICAgICAgICBjYXNlIFZLX1JFVFVSTjoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmVk
aXRvcigpLT5pbnNlcnRUZXh0KGtldmVudC0+dGV4dCgpLCBldmVudCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoa2V2ZW50LT53aW5k
b3dzVmlydHVhbEtleUNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBWS19CQUNLOgotICAgICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25D
b250cm9sbGVyOjpCQUNLV0FSRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIGZhbHNlLCB0cnVlKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVktfREVMRVRFOgotICAgICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25D
b250cm9sbGVyOjpGT1JXQVJELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDaGFyYWN0ZXJHcmFudWxhcml0eSwgZmFsc2UsIHRydWUpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWS19MRUZUOgotICAgICAgICAg
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZUxlZnQiKS5leGVjdXRlKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZLX1JJR0hUOgotICAgICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZVJpZ2h0IikuZXhlY3V0ZSgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWS19VUDoKLSAgICAg
ICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVVcCIpLmV4ZWN1dGUoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVktfRE9XTjoKLSAgICAg
ICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVEb3duIikuZXhlY3V0ZSgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWS19SRVRVUk46Ci0g
ICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJJbnNlcnRMaW5lQnJlYWsi
KS5leGVjdXRlKCk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1
bWVudCgpLT5mcmFtZSgpOworICAgIEFTU0VSVChmcmFtZSk7CisgICAgCisgICAgaWYgKGZyYW1l
LT5lZGl0b3IoKSAmJiBmcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50
KGV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQogfQog
CiB2b2lkIEVkaXRvckNsaWVudFd4Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCop
CkluZGV4OiBXZWJLaXQvd3gvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDQyNzIyKQorKysgV2ViS2l0L3d4L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDA5LTA0LTIxICBtaWdnaWxpbiAgPG1yLmRpZ2dpbGlu
QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGdWxsIEtleWJvYXJkIHNob3J0Y3V0IHN1cHBvcnQuCisgICAgICAgIEltcGxlbWVudCB3
eEJyb3dzZXIgQ3V0L0NvcHkvUGFzdGUgbWVudSBpdGVtcy4KKyAgICAgICAgCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDc5NworCisgICAgICAgICog
V2ViQnJvd3NlclNoZWxsLmNwcDoKKyAgICAgICAgKHd4V2ViQnJvd3NlclNoZWxsOjpPbkN1dCk6
CisgICAgICAgICh3eFdlYkJyb3dzZXJTaGVsbDo6T25Db3B5KToKKyAgICAgICAgKHd4V2ViQnJv
d3NlclNoZWxsOjpPblBhc3RlKToKKyAgICAgICAgKiBXZWJCcm93c2VyU2hlbGwuaDoKKyAgICAg
ICAgKiBXZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvckNsaWVudFd4OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBXZWJWaWV3
LmNwcDoKKyAgICAgICAgKHd4V2ViVmlldzo6Q2FuQ3V0KToKKyAgICAgICAgKHd4V2ViVmlldzo6
Q2FuUGFzdGUpOgorICAgICAgICAod3hXZWJWaWV3OjpQYXN0ZSk6CisgICAgICAgICh3eFdlYlZp
ZXc6Ok9uS2V5RXZlbnRzKToKKwogMjAwOS0wNC0xNSAgUm9iaW4gRHVubiAgPHJvYmluQGFsbGR1
bm4uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpJbmRleDogV2Vi
S2l0L3d4L1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJWaWV3LmNwcAko
cmV2aXNpb24gNDI3MTYpCisrKyBXZWJLaXQvd3gvV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3Vic3RpdHV0ZURhdGEuaCIKQEAgLTYzMiw3ICs2MzMs
NyBAQAogYm9vbCB3eFdlYlZpZXc6OkNhbkN1dCgpCiB7CiAgICAgaWYgKG1fbWFpbkZyYW1lKQot
ICAgICAgICBtX21haW5GcmFtZS0+Q2FuQ3V0KCk7CisgICAgICAgIHJldHVybiBtX21haW5GcmFt
ZS0+Q2FuQ3V0KCk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC02NDYsNyArNjQ3LDcgQEAK
IGJvb2wgd3hXZWJWaWV3OjpDYW5QYXN0ZSgpCiB7CiAgICAgaWYgKG1fbWFpbkZyYW1lKQotICAg
ICAgICBtX21haW5GcmFtZS0+Q2FuUGFzdGUoKTsKKyAgICAgICAgcmV0dXJuIG1fbWFpbkZyYW1l
LT5DYW5QYXN0ZSgpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNjU1LDcgKzY1Niw2IEBA
CiB7CiAgICAgaWYgKG1fbWFpbkZyYW1lKQogICAgICAgICBtX21haW5GcmFtZS0+UGFzdGUoKTsK
LQogfQogCiB2b2lkIHd4V2ViVmlldzo6T25LZXlFdmVudHMod3hLZXlFdmVudCYgZXZlbnQpCkBA
IC02NjMsNDAgKzY2MywxMzcgQEAKICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSAwOwogICAg
IGlmIChtX21haW5GcmFtZSkKICAgICAgICAgZnJhbWUgPSBtX21haW5GcmFtZS0+R2V0RnJhbWUo
KTsKLSAgICAgICAgCi0gICAgaWYgKGZyYW1lICYmIGZyYW1lLT52aWV3KCkpIHsKLSAgICAgICAg
Ly8gV2ViQ29yZSBkb2Vzbid0IGhhbmRsZSB0aGVzZSBldmVudHMgaXRzZWxmLCBzbyB3ZSBuZWVk
IHRvIGRvCi0gICAgICAgIC8vIGl0IGFuZCBub3Qgc2VuZCB0aGUgZXZlbnQgZG93biBvciBlbHNl
IENUUkwrQyB3aWxsIGVyYXNlIHRoZSB0ZXh0Ci0gICAgICAgIC8vIGFuZCByZXBsYWNlIGl0IHdp
dGggYy4KLSAgICAgICAgaWYgKGV2ZW50LkNtZERvd24oKSAmJiBldmVudC5HZXRFdmVudFR5cGUo
KSA9PSB3eEVWVF9LRVlfVVApIHsKLSAgICAgICAgICAgIGlmIChldmVudC5HZXRLZXlDb2RlKCkg
PT0gc3RhdGljX2Nhc3Q8aW50PignQycpKQorCisgICAgaWYgKCEoZnJhbWUgJiYgZnJhbWUtPnZp
ZXcoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC5HZXRLZXlDb2RlKCkgPT0g
V1hLX0NBUElUQUwpCisgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y2Fwc0xvY2tTdGF0
ZU1heUhhdmVDaGFuZ2VkKCk7CisKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQg
d2tFdmVudChldmVudCk7CisKKyAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVu
dCh3a0V2ZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy9Tb21lIHRoaW5ncyBXZWJLaXQg
d29uJ3QgZG8gZm9yIHVzLi4uIENvcHkvQ3V0L1Bhc3RlIGFuZCBLQiBzY3JvbGxpbmcKKyAgICBp
ZiAoZXZlbnQuR2V0RXZlbnRUeXBlKCkgPT0gd3hFVlRfS0VZX0RPV04pIHsKKyAgICAgICAgc3dp
dGNoIChldmVudC5HZXRLZXlDb2RlKCkpIHsKKyAgICAgICAgY2FzZSA2NzogLy8iQyIKKyAgICAg
ICAgICAgIGlmIChDYW5Db3B5KCkgJiYgZXZlbnQuR2V0TW9kaWZpZXJzKCkgPT0gd3hNT0RfQ01E
KSB7CiAgICAgICAgICAgICAgICAgQ29weSgpOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQu
R2V0S2V5Q29kZSgpID09IHN0YXRpY19jYXN0PGludD4oJ1gnKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4
NjogLy8iViIKKyAgICAgICAgICAgIGlmIChDYW5QYXN0ZSgpICYmIGV2ZW50LkdldE1vZGlmaWVy
cygpID09IHd4TU9EX0NNRCkgeworICAgICAgICAgICAgICAgIFBhc3RlKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgODg6IC8vIlgiCisgICAgICAgICAgICBpZiAoQ2FuQ3V0KCkgJiYgZXZlbnQuR2V0TW9k
aWZpZXJzKCkgPT0gd3hNT0RfQ01EKSB7CiAgICAgICAgICAgICAgICAgQ3V0KCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChldmVudC5HZXRLZXlDb2RlKCkgPT0gc3RhdGljX2Nhc3Q8aW50PignVicp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdYS19JTlNFUlQ6CisgICAgICAgICAgICBpZiAoQ2FuQ29weSgp
ICYmIGV2ZW50LkdldE1vZGlmaWVycygpID09IHd4TU9EX0NNRCkgeworICAgICAgICAgICAgICAg
IENvcHkoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoQ2FuUGFzdGUoKSAmJiBldmVudC5HZXRNb2RpZmllcnMoKSA9PSB3eE1PRF9TSElG
VCkgewogICAgICAgICAgICAgICAgIFBhc3RlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVu
dC5HZXRLZXlDb2RlKCkgPT0gc3RhdGljX2Nhc3Q8aW50PignWicpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGV2ZW50LlNoaWZ0RG93bigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX21h
aW5GcmFtZS0+Q2FuUmVkbygpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9tYWluRnJhbWUt
PlJlZG8oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChtX21haW5GcmFtZS0+Q2FuVW5kbygpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9tYWluRnJhbWUtPlVuZG8oKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAgICAK
LSAgICAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCB3a0V2ZW50KGV2ZW50
KTsKLSAgICAgICAgICAgIGlmICh3a0V2ZW50LnR5cGUoKSA9PSBXZWJDb3JlOjpQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OkNoYXIgJiYgd2tFdmVudC5hbHRLZXkoKSkKLSAgICAgICAgICAgICAgICBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUFjY2Vzc0tleSh3a0V2ZW50KTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50
KHdrRXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOyAvL0luc2VydCBzaGFsbCBub3QgYmVjb21l
IGEgY2hhcgorICAgICAgICBjYXNlIFdYS19ERUxFVEU6CisgICAgICAgICAgICBpZiAoQ2FuQ3V0
KCkgJiYgZXZlbnQuR2V0TW9kaWZpZXJzKCkgPT0gd3hNT0RfU0hJRlQpIHsKKyAgICAgICAgICAg
ICAgICBDdXQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXWEtfTEVGVDoKKyAgICAgICAgY2FzZSBXWEtf
TlVNUEFEX0xFRlQ6CisgICAgICAgICAgICBmcmFtZS0+dmlldygpLT5zY3JvbGxCeShXZWJDb3Jl
OjpJbnRTaXplKC1XZWJDb3JlOjpjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAsIDApKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBXWEtfVVA6CisgICAgICAgIGNhc2UgV1hL
X05VTVBBRF9VUDoKKyAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6
OkludFNpemUoMCwgLVdlYkNvcmU6OmNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFdYS19SSUdIVDoKKyAgICAgICAgY2FzZSBX
WEtfTlVNUEFEX1JJR0hUOgorICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2Vi
Q29yZTo6SW50U2l6ZShXZWJDb3JlOjpjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAsIDApKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBXWEtfRE9XTjoKKyAgICAgICAgY2Fz
ZSBXWEtfTlVNUEFEX0RPV046CisgICAgICAgICAgICBmcmFtZS0+dmlldygpLT5zY3JvbGxCeShX
ZWJDb3JlOjpJbnRTaXplKDAsIFdlYkNvcmU6OmNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFdYS19FTkQ6CisgICAgICAgIGNh
c2UgV1hLX05VTVBBRF9FTkQ6CisgICAgICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRTY3JvbGxQ
b3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludChmcmFtZS0+dmlldygpLT5zY3JvbGxYKCksIGZyYW1l
LT52aWV3KCktPm1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIFdYS19IT01FOgorICAgICAgICBjYXNlIFdYS19OVU1QQURfSE9N
RToKKyAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnNldFNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6
OkludFBvaW50KGZyYW1lLT52aWV3KCktPnNjcm9sbFgoKSwgMCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIFdYS19QQUdFVVA6CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9Q
QUdFVVA6CisgICAgICAgICAgICBmcmFtZS0+dmlldygpLT5zY3JvbGxCeShXZWJDb3JlOjpJbnRT
aXplKDAsIC1mcmFtZS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCkgKyBXZWJDb3JlOjpjQW1vdW50
VG9LZWVwV2hlblBhZ2luZykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFdY
S19QQUdFRE9XTjoKKyAgICAgICAgY2FzZSBXWEtfTlVNUEFEX1BBR0VET1dOOgorICAgICAgICAg
ICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZSgwLCBmcmFtZS0+dmll
dygpLT52aXNpYmxlSGVpZ2h0KCkgLSBXZWJDb3JlOjpjQW1vdW50VG9LZWVwV2hlblBhZ2luZykp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvL1RoZXNlIHdlIGRvbid0IHdhbnQgdHVy
bmluZyBpbnRvIGNoYXIgZXZlbnRzLCBzdHVmZiAnZW0KKyAgICAgICAgY2FzZSBXWEtfRVNDQVBF
OgorICAgICAgICBjYXNlIFdYS19MQlVUVE9OOgorICAgICAgICBjYXNlIFdYS19SQlVUVE9OOgor
ICAgICAgICBjYXNlIFdYS19DQU5DRUw6CisgICAgICAgIGNhc2UgV1hLX01FTlU6CisgICAgICAg
IGNhc2UgV1hLX01CVVRUT046CisgICAgICAgIGNhc2UgV1hLX0NMRUFSOgorICAgICAgICBjYXNl
IFdYS19QQVVTRToKKyAgICAgICAgY2FzZSBXWEtfU0VMRUNUOgorICAgICAgICBjYXNlIFdYS19Q
UklOVDoKKyAgICAgICAgY2FzZSBXWEtfRVhFQ1VURToKKyAgICAgICAgY2FzZSBXWEtfU05BUFNI
T1Q6CisgICAgICAgIGNhc2UgV1hLX0hFTFA6CisgICAgICAgIGNhc2UgV1hLX0YxOgorICAgICAg
ICBjYXNlIFdYS19GMjoKKyAgICAgICAgY2FzZSBXWEtfRjM6CisgICAgICAgIGNhc2UgV1hLX0Y0
OgorICAgICAgICBjYXNlIFdYS19GNToKKyAgICAgICAgY2FzZSBXWEtfRjY6CisgICAgICAgIGNh
c2UgV1hLX0Y3OgorICAgICAgICBjYXNlIFdYS19GODoKKyAgICAgICAgY2FzZSBXWEtfRjk6Cisg
ICAgICAgIGNhc2UgV1hLX0YxMDoKKyAgICAgICAgY2FzZSBXWEtfRjExOgorICAgICAgICBjYXNl
IFdYS19GMTI6CisgICAgICAgIGNhc2UgV1hLX0YxMzoKKyAgICAgICAgY2FzZSBXWEtfRjE0Ogor
ICAgICAgICBjYXNlIFdYS19GMTU6CisgICAgICAgIGNhc2UgV1hLX0YxNjoKKyAgICAgICAgY2Fz
ZSBXWEtfRjE3OgorICAgICAgICBjYXNlIFdYS19GMTg6CisgICAgICAgIGNhc2UgV1hLX0YxOToK
KyAgICAgICAgY2FzZSBXWEtfRjIwOgorICAgICAgICBjYXNlIFdYS19GMjE6CisgICAgICAgIGNh
c2UgV1hLX0YyMjoKKyAgICAgICAgY2FzZSBXWEtfRjIzOgorICAgICAgICBjYXNlIFdYS19GMjQ6
CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9GMToKKyAgICAgICAgY2FzZSBXWEtfTlVNUEFEX0Yy
OgorICAgICAgICBjYXNlIFdYS19OVU1QQURfRjM6CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9G
NDoKKyAgICAgICAgLy9XaGVuIG51bWxvY2sgaXMgb2ZmIE51bXBhZCA1IGJlY29tZXMgQkVHSU4s
IG9yIEhPTUUgb24gQ2hhcgorICAgICAgICBjYXNlIFdYS19OVU1QQURfQkVHSU46CisgICAgICAg
IGNhc2UgV1hLX05VTVBBRF9JTlNFUlQ6CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgCi0gICAgLy8gbWFrZSBzdXJlIHdlIGdldCB0aGUgY2hhcmFjdGVyIGV2ZW50
LgotICAgIGlmIChldmVudC5HZXRFdmVudFR5cGUoKSAhPSB3eEVWVF9DSEFSKQotICAgICAgICBl
dmVudC5Ta2lwKCk7CisKKyAgICBldmVudC5Ta2lwKCk7CiB9CiAKIHZvaWQgd3hXZWJWaWV3OjpP
blNldEZvY3VzKHd4Rm9jdXNFdmVudCYgZXZlbnQpCkluZGV4OiBXZWJLaXQvd3gvV2ViQnJvd3Nl
clNoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViQnJvd3NlclNoZWxsLmNwcAko
cmV2aXNpb24gNDI3MTYpCisrKyBXZWJLaXQvd3gvV2ViQnJvd3NlclNoZWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNiArNjcsOSBAQAogfTsKIAogQkVHSU5fRVZFTlRfVEFCTEUod3hXZWJC
cm93c2VyU2hlbGwsIHd4RnJhbWUpCisgICAgRVZUX01FTlUod3hJRF9DVVQsIHd4V2ViQnJvd3Nl
clNoZWxsOjpPbkN1dCkKKyAgICBFVlRfTUVOVSh3eElEX0NPUFksIHd4V2ViQnJvd3NlclNoZWxs
OjpPbkNvcHkpCisgICAgRVZUX01FTlUod3hJRF9QQVNURSwgd3hXZWJCcm93c2VyU2hlbGw6Ok9u
UGFzdGUpCiAgICAgRVZUX01FTlUod3hJRF9FWElULCAgd3hXZWJCcm93c2VyU2hlbGw6Ok9uUXVp
dCkKICAgICBFVlRfTUVOVSh3eElEX0FCT1VULCB3eFdlYkJyb3dzZXJTaGVsbDo6T25BYm91dCkK
ICAgICBFVlRfTUVOVShJRF9MT0FERklMRSwgd3hXZWJCcm93c2VyU2hlbGw6Ok9uTG9hZEZpbGUp
CkBAIC0yNTIsNiArMjU1LDI0IEBACiAgICAgfQogfQogCit2b2lkIHd4V2ViQnJvd3NlclNoZWxs
OjpPbkN1dCh3eENvbW1hbmRFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKHdlYnZpZXcgJiYgd2Vi
dmlldy0+Q2FuQ3V0KCkpCisgICAgICAgIHdlYnZpZXctPkN1dCgpOworfQorCit2b2lkIHd4V2Vi
QnJvd3NlclNoZWxsOjpPbkNvcHkod3hDb21tYW5kRXZlbnQmIGV2ZW50KQoreworICAgIGlmICh3
ZWJ2aWV3ICYmIHdlYnZpZXctPkNhbkNvcHkoKSkKKyAgICAgICAgd2Vidmlldy0+Q29weSgpOwor
fQorCit2b2lkIHd4V2ViQnJvd3NlclNoZWxsOjpPblBhc3RlKHd4Q29tbWFuZEV2ZW50JiBldmVu
dCkKK3sKKyAgICBpZiAod2VidmlldyAmJiB3ZWJ2aWV3LT5DYW5QYXN0ZSgpKQorICAgICAgICB3
ZWJ2aWV3LT5QYXN0ZSgpOworfQorCiB2b2lkIHd4V2ViQnJvd3NlclNoZWxsOjpPbkJhY2sod3hD
b21tYW5kRXZlbnQmIGV2ZW50KQogewogICAgIGlmICh3ZWJ2aWV3KQpJbmRleDogV2ViS2l0L3d4
L1dlYkJyb3dzZXJTaGVsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJCcm93c2VyU2hl
bGwuaAkocmV2aXNpb24gNDI3MTYpCisrKyBXZWJLaXQvd3gvV2ViQnJvd3NlclNoZWxsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDkgQEAKIHByb3RlY3RlZDoKIAogICAgIC8vIGV2ZW50
IGhhbmRsZXJzICh0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIF9ub3RfIGJlIHZpcnR1YWwpCisgICAg
dm9pZCBPbkN1dCh3eENvbW1hbmRFdmVudCYgZXZlbnQpOworICAgIHZvaWQgT25Db3B5KHd4Q29t
bWFuZEV2ZW50JiBldmVudCk7CisgICAgdm9pZCBPblBhc3RlKHd4Q29tbWFuZEV2ZW50JiBldmVu
dCk7CiAgICAgdm9pZCBPblF1aXQod3hDb21tYW5kRXZlbnQmIGV2ZW50KTsKICAgICB2b2lkIE9u
QWJvdXQod3hDb21tYW5kRXZlbnQmIGV2ZW50KTsKICAgICB2b2lkIE9uTG9hZEZpbGUod3hDb21t
YW5kRXZlbnQmIGV2ZW50KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA0MjcxNikKKysr
IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3
IEBACiAjaW5jbHVkZSAiTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaCIKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCkBAIC03Miw2ICs3Myw4MyBAQAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKKy8vIGNy
b3NzLXBsYXRmb3JtIGhhbmRsaW5nIG9mIGtleWJvYXJkIHNob3J0Y3V0cyB0aGF0IHBvcnRzIGNh
biBkZWZhdWx0IHRvCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8PCAwOwor
c3RhdGljIGNvbnN0IHVuc2lnbmVkIEFsdEtleSA9IDEgPDwgMTsKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBTaGlmdEtleSA9IDEgPDwgMjsKKworc3RydWN0IEtleURvd25FbnRyeSB7CisgICAgdW5z
aWduZWQgdmlydHVhbEtleTsKKyAgICB1bnNpZ25lZCBtb2RpZmllcnM7CisgICAgY29uc3QgY2hh
ciogbmFtZTsKK307CisKK3N0cnVjdCBLZXlQcmVzc0VudHJ5IHsKKyAgICB1bnNpZ25lZCBjaGFy
Q29kZTsKKyAgICB1bnNpZ25lZCBtb2RpZmllcnM7CisgICAgY29uc3QgY2hhciogbmFtZTsKK307
CisKK3N0YXRpYyBjb25zdCBLZXlEb3duRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKKyAgICB7
IFZLX0xFRlQsICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZUxlZnQiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0xFRlQsICAgU2hpZnRLZXksICAgICAg
ICAgICAiTW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKKyAg
ICB7IFZLX0xFRlQsICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRMZWZ0IiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0xFRlQsICAgQ3RybEtleSB8IFNo
aWZ0S2V5LCAiTW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgfSwK
KyAgICB7IFZLX1JJR0hULCAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1JJR0hULCAgU2hpZnRLZXks
ICAgICAgICAgICAiTW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAg
fSwKKyAgICB7IFZLX1JJR0hULCAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRSaWdodCIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1JJR0hULCAgQ3RybEtl
eSB8IFNoaWZ0S2V5LCAiTW92ZVdvcmRSaWdodEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAg
ICAgfSwKKyAgICB7IFZLX1VQLCAgICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVVwIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1VQLCAgICAgU2hp
ZnRLZXksICAgICAgICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICB7IFZLX1BSSU9SLCAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVBhZ2VV
cEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0RPV04sICAg
MCwgICAgICAgICAgICAgICAgICAiTW92ZURvd24iICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKKyAgICB7IFZLX0RPV04sICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZURv
d25BbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX05FWFQs
ICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAg
ICAgICAgICAgICAgfSwKKyAgICB7IFZLX1BSSU9SLCAgMCwgICAgICAgICAgICAgICAgICAiTW92
ZVBhZ2VVcCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX05F
WFQsICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0hPTUUsICAgMCwgICAgICAgICAgICAgICAgICAi
TW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZL
X0hPTUUsICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9k
aWZ5U2VsZWN0aW9uIiAgICAgfSwKKyAgICB7IFZLX0hPTUUsICAgQ3RybEtleSwgICAgICAgICAg
ICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCIgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7
IFZLX0hPTUUsICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVu
dEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKworICAgIHsgVktfRU5ELCAgICAwLCAgICAgICAgICAg
ICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAor
ICAgIHsgVktfRU5ELCAgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRN
b2RpZnlTZWxlY3Rpb24iICAgICAgICAgICB9LAorICAgIHsgVktfRU5ELCAgICBDdHJsS2V5LCAg
ICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICB9
LAorICAgIHsgVktfRU5ELCAgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9FbmRPZkRvY3Vt
ZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICB9LAorCisgICAgeyBWS19CQUNLLCAgIDAsICAg
ICAgICAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgeyBWS19CQUNLLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkRlbGV0ZUJhY2t3
YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ERUxFVEUsIDAs
ICAgICAgICAgICAgICAgICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgeyBWS19CQUNLLCAgIEN0cmxLZXksICAgICAgICAgICAgIkRlbGV0ZVdv
cmRCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ERUxFVEUs
IEN0cmxLZXksICAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgCisgICAgeyAnQicsICAgICAgIEN0cmxLZXksICAgICAgICAgICAg
IlRvZ2dsZUJvbGQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAn
SScsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlRvZ2dsZUl0YWxpYyIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICB7IFZLX0VTQ0FQRSwgMCwgICAgICAgICAgICAg
ICAgICAiQ2FuY2VsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAvL0ZJWE1FOiB0aGlzJ2xsIG5ldmVyIGhhcHBlbi4gV2UgY2FuIHRyYXNoIGl0IG9yIG1ha2Ug
aXQgYSBub3JtYWwgcGVyaW9kCisgICAgeyBWS19PRU1fUEVSSU9ELCBDdHJsS2V5LCAgICAgICAg
IkNhbmNlbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBW
S19UQUIsICAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19UQUIsICAgIFNoaWZ0S2V5LCAgICAgICAg
ICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
eyBWS19SRVRVUk4sIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SRVRVUk4sIEN0cmxLZXksICAgICAg
ICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgeyBWS19SRVRVUk4sIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SRVRVUk4sIEFsdEtleSB8IFNo
aWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgeyAnQScsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlNlbGVjdEFsbCIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnWicsICAgICAgIEN0cmxLZXks
ICAgICAgICAgICAgIlVuZG8iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgeyAnWicsICAgICAgIEN0cmxLZXkgfCBTaGlmdEtleSwgIlJlZG8iICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCit9OworCitzdGF0aWMgY29uc3QgS2V5
UHJlc3NFbnRyeSBrZXlQcmVzc0VudHJpZXNbXSA9IHsKKyAgICB7ICdcdCcsICAgMCwgICAgICAg
ICAgICAgICAgICAiSW5zZXJ0VGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICB7ICdcdCcsICAgU2hpZnRLZXksICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdccicsICAgMCwgICAgICAgICAg
ICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICB7ICdccicsICAgQ3RybEtleSwgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdccicsICAgQWx0S2V5LCAgICAgICAg
ICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICB7ICdccicsICAgQWx0S2V5IHwgU2hpZnRLZXksICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKK307CisKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBo
YXMgbW92ZWQgdGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBz
aG91bGQgdXNlIHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5n
IG9wZXJhdGlvbi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5k
KEV2ZW50KiBldmVudCkKQEAgLTExMSw2ICsxODksNjggQEAKICAgICAgICAgYy0+aGFuZGxlSW5w
dXRNZXRob2RLZXlkb3duKGV2ZW50KTsKIH0KIAorYm9vbCBFZGl0b3I6OmhhbmRsZUVkaXRpbmdL
ZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIGNvbnN0IFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudCoga2V5RXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKTsKKworICAgIC8vTkI6
IHRoaXMgaXMgd2hhdCB3aW5kb3dzIGRvZXMsIGJ1dCB0aGV5IGFsc28gaGF2ZSBhIGtleXByZXNz
IGV2ZW50IGZvciBBbHQrRW50ZXIgd2hpY2ggY2xlYXJseSB3b24ndCBnZXQgaGl0IHdpdGggdGhp
cworICAgIGlmICgha2V5RXZlbnQgfHwga2V5RXZlbnQtPmFsdEtleSgpKSAgLy8gZG8gbm90IHRy
ZWF0IHRoaXMgYXMgdGV4dCBpbnB1dCBpZiBBbHQgaXMgZG93bgorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBDb21tYW5kIGVkaXRDb21tYW5kID0gY29tbWFuZChpbnRlcnByZXRLZXlFdmVu
dChldmVudCkpOworCisgICAgaWYgKGtleUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpSYXdLZXlEb3duKSB7CisgICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGhhdmUgZW5v
dWdoIGluZm9ybWF0aW9uIGFib3V0IG1vZGUgdG8gZGVjaWRlIGhvdyBjb21tYW5kcyB0aGF0IGp1
c3QgaW5zZXJ0IHRleHQgaWYgZXhlY3V0ZWQgdmlhIEVkaXRvciBzaG91bGQgYmUgdHJlYXRlZCwK
KyAgICAgICAgLy8gc28gd2UgbGVhdmUgaXQgdXBvbiBXZWJDb3JlIHRvIGVpdGhlciBoYW5kbGUg
dGhlbSBpbW1lZGlhdGVseSAoZS5nLiBUYWIgdGhhdCBjaGFuZ2VzIGZvY3VzKSBvciBpZiBub3Qg
dG8gbGV0IGEgQ0hBUiBldmVudCBiZSBnZW5lcmF0ZWQKKyAgICAgICAgLy8gKGUuZy4gVGFiIHRo
YXQgaW5zZXJ0cyBhIFRhYiBjaGFyYWN0ZXIsIG9yIEVudGVyKS4KKyAgICAgICAgcmV0dXJuICFl
ZGl0Q29tbWFuZC5pc1RleHRJbnNlcnRpb24oKSAmJiBlZGl0Q29tbWFuZC5leGVjdXRlKGV2ZW50
KTsKKyAgICB9CisKKyAgICAgaWYgKGVkaXRDb21tYW5kLmV4ZWN1dGUoZXZlbnQpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIERvbid0IGluc2VydCBudWxsIG9yIGNvbnRyb2wgY2hh
cmFjdGVycyBhcyB0aGV5IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBiZWhhdmlvdXIKKyAgICBp
ZiAoZXZlbnQtPmNoYXJDb2RlKCkgPCAnICcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBpbnNlcnRUZXh0KGV2ZW50LT5rZXlFdmVudCgpLT50ZXh0KCksIGV2ZW50KTsKK30K
KworY29uc3QgY2hhciogRWRpdG9yOjppbnRlcnByZXRLZXlFdmVudChjb25zdCBLZXlib2FyZEV2
ZW50KiBldnQpCit7CisgICAgQVNTRVJUKGV2dC0+a2V5RXZlbnQoKS0+dHlwZSgpID09IFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5RG93biB8fCBldnQtPmtleUV2ZW50KCktPnR5cGUoKSA9
PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIpOworCisgICAgc3RhdGljIEhhc2hNYXA8aW50
LCBjb25zdCBjaGFyKj4qIGtleURvd25Db21tYW5kc01hcCA9IDA7CisgICAgc3RhdGljIEhhc2hN
YXA8aW50LCBjb25zdCBjaGFyKj4qIGtleVByZXNzQ29tbWFuZHNNYXAgPSAwOworCisgICAgaWYg
KCFrZXlEb3duQ29tbWFuZHNNYXApIHsKKyAgICAgICAga2V5RG93bkNvbW1hbmRzTWFwID0gbmV3
IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj47CisgICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAg
PSBuZXcgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPjsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgV1hTSVpFT0Yoa2V5RG93bkVudHJpZXMpOyBpKyspCisgICAgICAgICAgICBr
ZXlEb3duQ29tbWFuZHNNYXAtPnNldChrZXlEb3duRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYg
fCBrZXlEb3duRW50cmllc1tpXS52aXJ0dWFsS2V5LCBrZXlEb3duRW50cmllc1tpXS5uYW1lKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1hTSVpFT0Yoa2V5UHJlc3NFbnRy
aWVzKTsgaSsrKQorICAgICAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcC0+c2V0KGtleVByZXNz
RW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlQcmVzc0VudHJpZXNbaV0uY2hhckNvZGUs
IGtleVByZXNzRW50cmllc1tpXS5uYW1lKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtb2RpZmll
cnMgPSAwOworICAgIGlmIChldnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBT
aGlmdEtleTsKKyAgICBpZiAoZXZ0LT5hbHRLZXkoKSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEFs
dEtleTsKKyAgICBpZiAoZXZ0LT5jdHJsS2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBDdHJs
S2V5OworCisgICAgaWYgKGV2dC0+a2V5RXZlbnQoKS0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6UmF3S2V5RG93bikgeworICAgICAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8
IDE2IHwgZXZ0LT5rZXlDb2RlKCk7CisgICAgICAgIHJldHVybiBtYXBLZXkgPyBrZXlEb3duQ29t
bWFuZHNNYXAtPmdldChtYXBLZXkpIDogMDsKKyAgICB9CisKKyAgICBpbnQgbWFwS2V5ID0gbW9k
aWZpZXJzIDw8IDE2IHwgZXZ0LT5jaGFyQ29kZSgpOworICAgIHJldHVybiBtYXBLZXkgPyBrZXlQ
cmVzc0NvbW1hbmRzTWFwLT5nZXQobWFwS2V5KSA6IDA7Cit9CisKIGJvb2wgRWRpdG9yOjpjYW5F
ZGl0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVu
dEVkaXRhYmxlKCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiA0MjcxNikKKysrIFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsMTEgQEAKIAogICAg
IHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAgdm9pZCBoYW5k
bGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCopOwotCisgICAgCisgICAgLy8gZGVm
YXVsdCBoYW5kbGluZyBmb3Iga2V5Ym9hcmQgZXZlbnRzIHNvIHBvcnRzIGRvbid0IG5lZWQgdG8g
ZHVwbGljYXRlCisgICAgLy8gc3RhbmRhcmQga2V5Ym9hcmQgaGFuZGxpbmcKKyAgICBib29sIGhh
bmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KTsKKyAgICAKICAg
ICBib29sIGNhbkVkaXQoKSBjb25zdDsKICAgICBib29sIGNhbkVkaXRSaWNobHkoKSBjb25zdDsK
IApAQCAtMzAyLDcgKzMwNiw5IEBACiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gZmlyc3RWaXNpYmxl
UmFuZ2UoY29uc3QgU3RyaW5nJiwgYm9vbCBjYXNlRmxhZyk7CiAgICAgUGFzc1JlZlB0cjxSYW5n
ZT4gbGFzdFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcmLCBib29sIGNhc2VGbGFnKTsKICAgICAK
LSAgICB2b2lkIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBuZXdTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHls
ZSwgRWRpdENvbW1hbmQqKTsKKyAgICB2b2lkIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcsIGJv
b2wgY2xlYXJUeXBpbmdTdHlsZSwgRWRpdENvbW1hbmQqKTsgICAgCisgICAgCisgICAgY29uc3Qg
Y2hhciogaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgS2V5Ym9hcmRFdmVudCogZXZ0KTsKIH07CiAK
IGlubGluZSB2b2lkIEVkaXRvcjo6c2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKGJvb2wgZmxh
ZykKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiA0MjcyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjcgQEAKKzIwMDktMDQtMjEgIG1pZ2dpbGluICA8bXIuZGlnZ2lsaW5AZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIE1vdXNl
IHdoZWVsIHNjcm9sbGluZyBhbmQga2V5Ym9hcmQgc2hvcnRjdXQgc3VwcG9ydCBmb3Igd3guCisg
ICAgICAgIEFsc28sIG1vdmUgY29kZSBzaGFyZWQgYnkgV2luIGFuZCB3eCBwb3J0cyBpbnRvIGNv
bW1vbiBjb2RlLgorCisJaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0
Nzk3CisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjop
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmludGVycHJldEtleUV2ZW50KToKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxh
dGZvcm0vd3gvS2V5Ym9hcmRFdmVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NL
ZXlDb2RlRm9yS2V5RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L1Njcm9s
bFZpZXdXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNj
cm9sbFBvc2l0aW9uKToKKwogMjAwOS0wNC0yMSAgSnVzdGluIEdhcmNpYSAgPGp1c3Rpbi5nYXJj
aWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcAkocmV2aXNpb24gNDI3MTYpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwx
MiArMTkxLDEyIEBACiAgICAgaWYgKG5ld1Njcm9sbE9mZnNldC54IDwgMCkKICAgICAgICAgbmV3
U2Nyb2xsT2Zmc2V0LnggPSAwOwogICAgIGVsc2UgaWYgKG5ld1Njcm9sbE9mZnNldC54ICsgY1Jl
Y3Qud2lkdGggPiB2UmVjdC53aWR0aCkKLSAgICAgICAgbmV3U2Nyb2xsT2Zmc2V0LnggPSBtYXgo
MCwgdlJlY3Qud2lkdGggLSBjUmVjdC53aWR0aCAtIDEpOworICAgICAgICBuZXdTY3JvbGxPZmZz
ZXQueCA9IG1heCgwLCB2UmVjdC53aWR0aCAtIGNSZWN0LndpZHRoKTsKIAogICAgIGlmIChuZXdT
Y3JvbGxPZmZzZXQueSA8IDApCiAgICAgICAgIG5ld1Njcm9sbE9mZnNldC55ID0gMDsKICAgICBl
bHNlIGlmIChuZXdTY3JvbGxPZmZzZXQueSArIGNSZWN0LmhlaWdodCA+IHZSZWN0LmhlaWdodCkK
LSAgICAgICAgbmV3U2Nyb2xsT2Zmc2V0LnkgPSBtYXgoMCwgdlJlY3QuaGVpZ2h0IC0gY1JlY3Qu
aGVpZ2h0IC0gMSk7CisgICAgICAgIG5ld1Njcm9sbE9mZnNldC55ID0gbWF4KDAsIHZSZWN0Lmhl
aWdodCAtIGNSZWN0LmhlaWdodCk7CiAKICAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ID09IHNjcm9s
bE9mZnNldCkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC9LZXli
b2FyZEV2ZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvS2V5Ym9h
cmRFdmVudFd4LmNwcAkocmV2aXNpb24gNDI3MTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L0tl
eWJvYXJkRXZlbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MiwxNCArMTYyLDE3IEBACiAg
ICAgICAgICAgICByZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQogICAgICAg
ICBjYXNlIFdYS19ESVZJREU6CiAgICAgICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYp
IERpdmlkZSBrZXkKLQorICAgICAgICBjYXNlIFdYS19OVU1QQURfU0VQQVJBVE9SOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX1NFUEFSQVRPUjsKICAgICAgICAgCiAgICAgICAgIGNhc2UgV1hLX0JB
Q0s6CiAgICAgICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNLU1BBQ0Uga2V5CiAg
ICAgICAgIGNhc2UgV1hLX1RBQjoKKyAgICAgICAgY2FzZSBXWEtfTlVNUEFEX1RBQjoKICAgICAg
ICAgICAgIHJldHVybiBWS19UQUI7IC8vICgwOSkgVEFCIGtleQogICAgICAgICBjYXNlIFdYS19D
TEVBUjoKICAgICAgICAgICAgIHJldHVybiBWS19DTEVBUjsgLy8gKDBDKSBDTEVBUiBrZXkKKyAg
ICAgICAgY2FzZSBXWEtfTlVNUEFEX0VOVEVSOgogICAgICAgICBjYXNlIFdYS19SRVRVUk46CiAg
ICAgICAgICAgICByZXR1cm4gVktfUkVUVVJOOyAvLygwRCkgUmV0dXJuIGtleQogICAgICAgICBj
YXNlIFdYS19TSElGVDoKQEAgLTIwMywyMiArMjA2LDMxIEBACiAgICAgICAgICAgICAvLyBWS19O
T05DT05WRVJUICgxRCkgSU1FIG5vbmNvbnZlcnQKICAgICAgICAgICAgIC8vIFZLX0FDQ0VQVCAo
MUUpIElNRSBhY2NlcHQKICAgICAgICAgICAgIC8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9k
ZSBjaGFuZ2UgcmVxdWVzdAorICAgICAgICBjYXNlIFdYS19OVU1QQURfU1BBQ0U6CiAgICAgICAg
IGNhc2UgV1hLX1NQQUNFOgogICAgICAgICAgICAgcmV0dXJuIFZLX1NQQUNFOyAvLyAoMjApIFNQ
QUNFQkFSCisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9QQUdFVVA6CiAgICAgICAgIGNhc2UgV1hL
X1BBR0VVUDoKICAgICAgICAgICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtl
eQorICAgICAgICBjYXNlIFdYS19OVU1QQURfUEFHRURPV046CiAgICAgICAgIGNhc2UgV1hLX1BB
R0VET1dOOgogICAgICAgICAgICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFHRSBET1dOIGtl
eQorICAgICAgICBjYXNlIFdYS19OVU1QQURfRU5EOgogICAgICAgICBjYXNlIFdYS19FTkQ6CiAg
ICAgICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBrZXkKKyAgICAgICAgY2FzZSBX
WEtfTlVNUEFEX0hPTUU6CiAgICAgICAgIGNhc2UgV1hLX0hPTUU6CiAgICAgICAgICAgICByZXR1
cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQorICAgICAgICBjYXNlIFdYS19OVU1QQURfTEVG
VDoKICAgICAgICAgY2FzZSBXWEtfTEVGVDoKICAgICAgICAgICAgIHJldHVybiBWS19MRUZUOyAv
LyAoMjUpIExFRlQgQVJST1cga2V5CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9VUDoKICAgICAg
ICAgY2FzZSBXWEtfVVA6CiAgICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJS
T1cga2V5CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9SSUdIVDoKICAgICAgICAgY2FzZSBXWEtf
UklHSFQ6CiAgICAgICAgICAgICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cg
a2V5CisgICAgICAgIGNhc2UgV1hLX05VTVBBRF9ET1dOOgogICAgICAgICBjYXNlIFdYS19ET1dO
OgogICAgICAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkKICAg
ICAgICAgY2FzZSBXWEtfU0VMRUNUOgpAQCAtMjI3LDExICsyMzksMTIgQEAKICAgICAgICAgICAg
IHJldHVybiBWS19QUklOVDsgLy8gKDJBKSBQUklOVCBrZXkKICAgICAgICAgY2FzZSBXWEtfRVhF
Q1VURToKICAgICAgICAgICAgIHJldHVybiBWS19FWEVDVVRFOy8vICgyQikgRVhFQ1VURSBrZXkK
LSAgICAgICAgICAgIC8vZHVubm8gb24gdGhpcwotICAgICAgICAgICAgLy9jYXNlIFdYS19Qcmlu
dFNjcmVlbjoKLSAgICAgICAgICAgIC8vICAgICAgcmV0dXJuIFZLX1NOQVBTSE9UOyAvLyAoMkMp
IFBSSU5UIFNDUkVFTiBrZXkKKyAgICAgICAgY2FzZSBXWEtfU05BUFNIT1Q6CisgICAgICAgICAg
ICAgcmV0dXJuIFZLX1NOQVBTSE9UOyAvLyAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKKyAgICAgICAg
Y2FzZSBXWEtfTlVNUEFEX0lOU0VSVDoKICAgICAgICAgY2FzZSBXWEtfSU5TRVJUOgogICAgICAg
ICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5CisgICAgICAgIGNhc2UgV1hL
X05VTVBBRF9ERUxFVEU6CiAgICAgICAgIGNhc2UgV1hLX0RFTEVURToKICAgICAgICAgICAgIHJl
dHVybiBWS19ERUxFVEU7IC8vICgyRSkgREVMIGtleQogICAgICAgICBjYXNlIFdYS19IRUxQOgpA
QCAtMzM1LDcgKzM0OCwxNSBAQAogICAgIGlmIChtX3R5cGUgIT0gQ2hhcikKICAgICAgICAgbV9r
ZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZvcld4S2V5Q29kZShldmVudC5HZXRLZXlDb2Rl
KCkpOwogICAgIGVsc2UgewotICAgICAgICBtX3RleHQgPSB3eFN0cmluZyhldmVudC5HZXRVbmlj
b2RlS2V5KCkpOworICAgICAgICAvL0VOVEVSIGlzIGFuIGVkaXRpbmcgY29tbWFuZCBwcm9jZXNz
ZWQgYXMgYSBjaGFyIChvbmx5IEVudGVyIGFuZCBUYWIgYXJlKQorICAgICAgICAvL3VuZm9ydHVu
YXRlbHkgdGhlIHVuaWNvZGUga2V5IGZvciBudW1wYWRfZW50ZXIgKDM3MCkgaXMgTk9UIHdoYXQg
d2Ugd2FudCBoZXJlICgxMykKKyAgICAgICAgLy9UaGUgdW5pY29kZSB2YWx1ZXMgZm9yIG5vcm1h
bCBlbnRlciBhbmQgdGFiIGFyZSB0aGUgc2FtZSBhcyB0aGUgQVNDSUkgdmFsdWVzLCB0aHVzIG9r
CisgICAgICAgIC8vTm90ZSB0aGF0IEkgdGhpbmsgdGhpcyBhIHd4IGJ1ZywgYXMgdGhlIENoYXJh
Y3RlciBDb2RlIGlzIGFjdHVhbGx5IDEzIHdoZW4KKyAgICAgICAgLy9udW1wYWRfZW50ZXIgaXMg
YSBDSEFSIGV2ZW50LgorICAgICAgICBpZiAoZXZlbnQuR2V0S2V5Q29kZSgpID09IDEzICYmIGV2
ZW50LkdldFVuaWNvZGVLZXkoKSA9PSB3eENoYXIoMzcwKSkKKyAgICAgICAgICAgIG1fdGV4dCA9
ICJcciI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdGV4dCA9IHd4U3RyaW5nKGV2ZW50
LkdldFVuaWNvZGVLZXkoKSk7CiAgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBtX3RleHQ7CiAg
ICAgfQogICAgIG1fYXV0b1JlcGVhdCA9IGZhbHNlOyAvLyBGSVhNRTogbm90IGNvcnJlY3QuCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDQyNzE2KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMxLDggKzYzMSwxMyBA
QAogdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKIHsK
ICAgICAvLyBXZSBkb24ndCBhbGxvdyBtb3VzZSB3aGVlbGluZyB0byBoYXBwZW4gaW4gYSBTY3Jv
bGxWaWV3IHRoYXQgaGFzIGhhZCBpdHMgc2Nyb2xsYmFycyBleHBsaWNpdGx5IGRpc2FibGVkLgot
ICAgIGlmICghY2FuSGF2ZVNjcm9sbGJhcnMoKSB8fCBwbGF0Zm9ybVdpZGdldCgpKQorI2lmIFBM
QVRGT1JNKFdYKQorICAgIGlmICghY2FuSGF2ZVNjcm9sbGJhcnMoKSkgeworI2Vsc2UKKyAgICBp
ZiAoIWNhbkhhdmVTY3JvbGxiYXJzKCkgfHwgcGxhdGZvcm1XaWRnZXQoKSkgeworI2VuZGlmCiAg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBEZXRlcm1pbmUgaG93IG11Y2ggd2Ugd2Fu
dCB0byBzY3JvbGwuICBJZiB3ZSBjYW4gbW92ZSBhdCBhbGwsIHdlIHdpbGwgYWNjZXB0IHRoZSBl
dmVudC4KICAgICBJbnRTaXplIG1heFNjcm9sbERlbHRhID0gbWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkgLSBzY3JvbGxQb3NpdGlvbigpOwo=
</data>
<flag name="review"
          id="14908"
          type_id="1"
          status="+"
          setter="kevino"
    />
          </attachment>
      

    </bug>

</bugzilla>