<?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>41826</bug_id>
          
          <creation_ts>2010-07-07 19:10:32 -0700</creation_ts>
          <short_desc>Convert BackForwardList to an abstract base class</short_desc>
          <delta_ts>2010-07-08 09:44:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>History</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>247938</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-07 19:10:32 -0700</bug_when>
    <thetext>Convert BackForwardList to an abstract base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247940</commentid>
    <comment_count>1</comment_count>
      <attachid>60823</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-07 19:12:25 -0700</bug_when>
    <thetext>Created attachment 60823
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247951</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-07-07 19:25:19 -0700</bug_when>
    <thetext>Attachment 60823 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3466003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247956</commentid>
    <comment_count>3</comment_count>
      <attachid>60826</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-07 19:38:33 -0700</bug_when>
    <thetext>Created attachment 60826
Updated patch, don&apos;t break Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247958</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-07-07 19:44:05 -0700</bug_when>
    <thetext>Attachment 60826 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3436007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247959</commentid>
    <comment_count>5</comment_count>
      <attachid>60827</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-07 19:49:49 -0700</bug_when>
    <thetext>Created attachment 60827
Patch 3 (once more with a feeling)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248024</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-07 23:02:38 -0700</bug_when>
    <thetext>Hmm, BackForwardList as an interface makes BackForwardListClient unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248025</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-07 23:08:24 -0700</bug_when>
    <thetext>Attachment 60827 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3473010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248233</commentid>
    <comment_count>8</comment_count>
      <attachid>60891</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-08 08:51:06 -0700</bug_when>
    <thetext>Created attachment 60891
Patch 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248235</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-08 08:52:21 -0700</bug_when>
    <thetext>Attachment 60891 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebhistory.cpp&quot;
WebCore/history/BackForwardListChromium.cpp:29:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248236</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-08 08:53:42 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Hmm, BackForwardList as an interface makes BackForwardListClient unnecessary.

Indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248271</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-08 09:35:54 -0700</bug_when>
    <thetext>Landed in r62792.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248277</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-08 09:44:20 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62792 might have broken Chromium Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60823</attachid>
            <date>2010-07-07 19:12:25 -0700</date>
            <delta_ts>2010-07-07 19:38:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>55562</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mjc0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDctMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxODI2CisgICAgICAg
IENvbnZlcnQgQmFja0ZvcndhcmRMaXN0IHRvIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgYW5kIGFk
ZCBCYWNrRm9yd2FyZExpc3RJbXBsCisgICAgICAgIGFzIHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRh
dGlvbiBvZiBpdC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmFja0ZvcndhcmRDb250cm9sbGVyOjpCYWNrRm9yd2FyZENvbnRyb2xsZXIp
OgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmg6CisgICAgICAgICog
aGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhpc3Rvcnkv
QmFja0ZvcndhcmRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3Q6On5C
YWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0Ojppc0Jh
Y2tGb3J3YXJkTGlzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0OjpC
YWNrRm9yd2FyZExpc3QpOgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5j
cHA6IENvcGllZCBmcm9tIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwLgorICAg
ICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmguCisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2Fy
ZExpc3RJbXBsOjppc0JhY2tGb3J3YXJkTGlzdEltcGwpOgorCiAyMDEwLTA3LTA3ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2Fy
bHNzb24uCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDYyNzI1KQorKysgV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtODk5LDcgKzg5OSw3IEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCiAKICAgICBoaXN0b3J5L0JhY2tGb3J3
YXJkQ29udHJvbGxlci5jcHAKLSAgICBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAKKyAgICBo
aXN0b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuY3BwCiAgICAgaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHAKICAgICBoaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCiAgICAgaGlzdG9yeS9IaXN0b3J5SXRlbS5j
cHAKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjI3MjUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDU0LDggKzEwNTQsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmggXAogCVdlYkNvcmUvaGlzdG9yeS9CYWNr
Rm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCBcCi0JV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJk
TGlzdC5jcHAgXAogCVdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuaCBcCisJV2ViQ29y
ZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuY3BwIFwKKwlXZWJDb3JlL2hpc3RvcnkvQmFj
a0ZvcndhcmRMaXN0SW1wbC5oIFwKIAlXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwIFwK
IAlXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuaCBcCiAJV2ViQ29yZS9oaXN0b3J5L0NhY2hl
ZEZyYW1lUGxhdGZvcm1EYXRhLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA2MjcyNSkKKysrIFdl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTMxNywyOSArMzE3LDYgQEAg
X19aTjdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjQwc2V0RG9tYWluUgogX19aTjdXZWJDb3JlMTRT
ZWN1cml0eU9yaWdpbjZjcmVhdGVFUktOU180S1VSTEVpCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5
T3JpZ2luN2NhbkxvYWRFUktOU180S1VSTEVSS05TXzZTdHJpbmdFUE5TXzhEb2N1bWVudEUKIF9f
Wk43V2ViQ29yZTE1QXJjaGl2ZVJlc291cmNlNmNyZWF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU18x
MlNoYXJlZEJ1ZmZlckVFRVJLTlNfNEtVUkxFUktOU182U3RyaW5nRVNBX1NBX1JLTlNfMTZSZXNv
dXJjZVJlc3BvbnNlRQotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMHJlbW92ZUl0ZW1F
UE5TXzExSGlzdG9yeUl0ZW1FCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDEwc2V0RW5h
YmxlZEViCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDExY3VycmVudEl0ZW1FdgotX19a
TjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMWZvcndhcmRJdGVtRXYKLV9fWk43V2ViQ29yZTE1
QmFja0ZvcndhcmRMaXN0MTFpdGVtQXRJbmRleEVpCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJk
TGlzdDExc2V0Q2FwYWNpdHlFaQotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMmNvbnRh
aW5zSXRlbUVQTlNfMTFIaXN0b3J5SXRlbUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0
MTNiYWNrTGlzdENvdW50RXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0MTZmb3J3YXJk
TGlzdENvdW50RXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0MTdiYWNrTGlzdFdpdGhM
aW1pdEVpUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xMUhpc3RvcnlJdGVtRUVFTG0wRUVF
Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDIwZm9yd2FyZExpc3RXaXRoTGltaXRFaVJO
M1dURjZWZWN0b3JJTlMxXzZSZWZQdHJJTlNfMTFIaXN0b3J5SXRlbUVFRUxtMEVFRQotX19aTjdX
ZWJDb3JlMTVCYWNrRm9yd2FyZExpc3Q1Y2xvc2VFdgotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2Fy
ZExpc3Q2Y2xvc2VkRXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0NmdvQmFja0V2Ci1f
X1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDdhZGRJdGVtRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzExSGlzdG9yeUl0ZW1FRUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0N2VuYWJsZWRF
dgotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3Q3ZW50cmllc0V2Ci1fX1pON1dlYkNvcmUx
NUJhY2tGb3J3YXJkTGlzdDhiYWNrSXRlbUV2Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlz
dDhjYXBhY2l0eUV2Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDhnb1RvSXRlbUVQTlNf
MTFIaXN0b3J5SXRlbUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0OWdvRm9yd2FyZEV2
Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdEMxRVBOU180UGFnZUUKLV9fWk43V2ViQ29y
ZTE1QmFja0ZvcndhcmRMaXN0RDFFdgogX19aTjdXZWJDb3JlMTVET01XcmFwcGVyV29ybGQxNXVu
cmVnaXN0ZXJXb3JsZEV2CiBfX1pON1dlYkNvcmUxNURPTVdyYXBwZXJXb3JsZEQxRXYKIF9fWk43
V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMTJkZWxldGVPcmlnaW5FUE5TXzE0U2VjdXJpdHlPcmln
aW5FCkBAIC00MjIsNiArMzk5LDcgQEAgX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVy
MTZyZXN1bQogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTdzdXNwZW5kQW5pbWF0
aW9uc0VQTlNfOERvY3VtZW50RQogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMjBw
YXVzZUFuaW1hdGlvbkF0VGltZUVQTlNfMTJSZW5kZXJPYmplY3RFUktOU182U3RyaW5nRWQKIF9f
Wk43V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJvbGxlcjIxcGF1c2VUcmFuc2l0aW9uQXRUaW1lRVBO
U18xMlJlbmRlck9iamVjdEVSS05TXzZTdHJpbmdFZAorX19aTjdXZWJDb3JlMTlCYWNrRm9yd2Fy
ZExpc3RJbXBsQzFFUE5TXzRQYWdlRQogX19aTjdXZWJDb3JlMTlDU1NTdHlsZURlY2xhcmF0aW9u
MTFzZXRQcm9wZXJ0eUVSS05TXzZTdHJpbmdFUzNfUmkKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9y
Q29udHJvbGxlcjM0aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2CiBfX1pON1dl
YkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxMHNldEZvY3VzZWRFYgpAQCAtNTA2LDcgKzQ4NCw2
IEBAIF9fWk43V2ViQ29yZTRLVVJMQzFFTlNfMThQYXJzZWRVUkxTdHJpbmcKIF9fWk43V2ViQ29y
ZTRLVVJMQzFFUDVOU1VSTAogX19aTjdXZWJDb3JlNEtVUkxDMUVQSzdfX0NGVVJMCiBfX1pON1dl
YkNvcmU0S1VSTEMxRVJLUzBfUktOU182U3RyaW5nRQotX19aTjdXZWJDb3JlNGNvcmVFUDIwTlNV
UkxQcm90ZWN0aW9uU3BhY2UKIF9fWk43V2ViQ29yZTROb2RlMTByZW5kZXJSZWN0RVBiCiBfX1pO
N1dlYkNvcmU0Tm9kZTE3c3RvcElnbm9yaW5nTGVha3NFdgogX19aTjdXZWJDb3JlNE5vZGUxOHN0
YXJ0SWdub3JpbmdMZWFrc0V2CkBAIC01MzMsNiArNTEwLDcgQEAgX19aTjdXZWJDb3JlNFBhZ2U5
Z29Gb3J3YXJkRXYKIF9fWk43V2ViQ29yZTRQYWdlOWluaXRHcm91cEV2CiBfX1pON1dlYkNvcmU0
UGFnZUMxRVBOU18xMkNocm9tZUNsaWVudEVQTlNfMTdDb250ZXh0TWVudUNsaWVudEVQTlNfMTJF
ZGl0b3JDbGllbnRFUE5TXzEwRHJhZ0NsaWVudEVQTlNfMTVJbnNwZWN0b3JDbGllbnRFUE5TXzE4
UGx1Z2luSGFsdGVyQ2xpZW50RVBOU18yN0dlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudEVQTlNf
MjNEZXZpY2VPcmllbnRhdGlvbkNsaWVudEVQTlNfMjdCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGll
bnRFCiBfX1pON1dlYkNvcmU0UGFnZUQxRXYKK19fWk43V2ViQ29yZTRjb3JlRVAyME5TVVJMUHJv
dGVjdGlvblNwYWNlCiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pT
RE9NR2xvYmFsT2JqZWN0RVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FCiBfX1pON1dlYkNvcmU1
Q2FjaGUxMXNldERpc2FibGVkRWIKIF9fWk43V2ViQ29yZTVDYWNoZTEzZ2V0U3RhdGlzdGljc0V2
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQkocmV2aXNpb24gNjI3MjUpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5MCw4ICsxMzkwLDkgQEAKICAgICAgICAgICAgICdoaXN0b3J5L0JhY2tG
b3J3YXJkQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRD
b250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVy
Q2xpZW50LmgnLAotICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcCcsCiAg
ICAgICAgICAgICAnaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuaCcsCisgICAgICAgICAgICAnaGlz
dG9yeS9CYWNrRm9yd2FyZExpc3RJbXBsLmNwcCcsCisgICAgICAgICAgICAnaGlzdG9yeS9CYWNr
Rm9yd2FyZExpc3RJbXBsLmgnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcCcsCiAg
ICAgICAgICAgICAnaGlzdG9yeS9DYWNoZWRGcmFtZS5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjI3MjUp
CisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAwLDcg
QEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCBcCiAgICAgZWRp
dGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIFwKICAgICBoaXN0b3J5L0Jh
Y2tGb3J3YXJkQ29udHJvbGxlci5jcHAgXAotICAgIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNw
cCBcCisgICAgaGlzdG9yeS9CYWNrRm9yd2FyZExpc3RJbXBsLmNwcCBcCiAgICAgaGlzdG9yeS9D
YWNoZWRGcmFtZS5jcHAgXAogICAgIGhpc3RvcnkvQ2FjaGVkUGFnZS5jcHAgXAogICAgIGhpc3Rv
cnkvSGlzdG9yeUl0ZW0uY3BwIFwKQEAgLTEzNTQsNiArMTM1NCw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIGVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmggXAogICAgIGhpc3Rv
cnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmggXAogICAgIGhpc3RvcnkvQmFja0ZvcndhcmRDb250
cm9sbGVyQ2xpZW50LmggXAorICAgIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oIFwKICAg
ICBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5oIFwKICAgICBoaXN0b3J5L0NhY2hlZEZyYW1lLmgg
XAogICAgIGhpc3RvcnkvQ2FjaGVkUGFnZS5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjI3MjUpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OTQ2NSwxMSArNDk0NjUsMTUgQEAK
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caGlz
dG9yeVxCYWNrRm9yd2FyZExpc3QuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGhpc3Rvcnlc
QmFja0ZvcndhcmRMaXN0LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxoaXN0b3J5XEJhY2tGb3J3YXJkTGlzdC5oIg0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGhpc3RvcnlcQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxoaXN0b3J5XEJhY2tGb3J3
YXJkTGlzdEltcGwuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MjcyNSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTE0LDcgKzExMTQsNiBAQAogCQk1MTcyMUZEMzExRDI3RUYyMDA2MzhCNDIgLyog
SlNCZWZvcmVQcm9jZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNzIxRkQxMTFEMjdFRjIwMDYzOEI0MiAvKiBKU0JlZm9yZVByb2Nlc3NF
dmVudC5oICovOyB9OwogCQk1MTcyMjA0QjExRDI5NjA1MDA2MzhCNDIgLyogQmVmb3JlUHJvY2Vz
c0V2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNzIyMDRBMTFEMjk2MDUwMDYzOEI0MiAvKiBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwICovOyB9
OwogCQk1MTc0MUQwRjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwQjBCMDcyNTlB
MDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE3NDFEMTAwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tG
b3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTc0MUQwQzBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLzsg
fTsKIAkJNTE3NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwRDBCMDcyNTlBMDBF
RDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MTc0MUQxMjBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NDFE
MEUwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLzsgfTsKIAkJNTE3NEUyMEEx
MEExRjQ0RjAwRjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzRFMjA4MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BT
dGF0ZUV2ZW50LmggKi87IH07CkBAIC00Njc5LDkgKzQ2NzgsMTEgQEAKIAkJQkNBODQ2RDYwREM2
N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBODQ2RDQwREM2N0EzNTAwMjZDMzA5IC8qIFJlbmRl
clJlcGxpY2EuY3BwICovOyB9OwogCQlCQ0E4NDZENzBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVy
UmVwbGljYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNBODQ2RDUwREM2N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2EuaCAqLzsgfTsKIAkJQkNB
ODVBMTAwQzNBRUFGNDAwNkY4MzA4IC8qIERPTVNWR051bWJlckludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4NUEwRjBDM0FFQUY0MDA2
RjgzMDggLyogRE9NU1ZHTnVtYmVySW50ZXJuYWwuaCAqLzsgfTsKLQkJQkNBOEM4MUUxMUUzRDM2
OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBOEM4MUMxMUUzRDM2OTAwODEyRkI3IC8qIEJh
Y2tGb3J3YXJkQ29udHJvbGxlci5oICovOyB9OworCQlCQ0E4QzgxRTExRTNEMzY5MDA4MTJGQjcg
LyogQmFja0ZvcndhcmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0E4QzgxQzExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRD
b250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkNBOEM4MUYxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4Qzgx
RDExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJ
QkNBOEM4MzExMUUzRDUzMjAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBOEM4MzAx
MUUzRDUzMjAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDQThDQTVGMTFFNEU2
RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDQTVEMTFFNEU2RDEwMDgxMkZCNyAvKiBC
YWNrRm9yd2FyZExpc3RJbXBsLmNwcCAqLzsgfTsKKwkJQkNBOENBNjAxMUU0RTZEMTAwODEyRkI3
IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQThDQTVFMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExp
c3RJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FBOTBDMjBBN0VCQTYwMDA4QjEy
MjkgLyogU2Nyb2xsYmFyLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkMxMDcyOTIxQTAwQzBDOEEzIC8q
IFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkQxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJD
b250ZW50VVJMUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNBQ0YzQkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVy
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02
ODIzLDcgKzY4MjQsNiBAQAogCQk1MTcyMUZEMTExRDI3RUYyMDA2MzhCNDIgLyogSlNCZWZvcmVQ
cm9jZXNzRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCZWZvcmVQ
cm9jZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3MjIwNEExMUQy
OTYwNTAwNjM4QjQyIC8qIEJlZm9yZVByb2Nlc3NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTc0MUQwQjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTc0MUQwQzBCMDcyNTlBMDBFRDQ0MkMg
LyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEJhY2tGb3J3YXJkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NzQxRDBEMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGlzdG9yeUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE3NDFEMEUwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXN0b3J5SXRlbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzRFMjA4MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0
ZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcFN0YXRlRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjg1LDYgKzEwMjg1LDggQEAKIAkJ
QkNBOEM4MUMxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrRm9yd2FyZENvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBOEM4MUQxMUUzRDM2OTAwODEyRkI3IC8qIEJh
Y2tGb3J3YXJkQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0E4QzgzMDExRTNENTMyMDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkQ29udHJv
bGxlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0E4Q0E1RDExRTRF
NkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkNBOENBNUUxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJk
TGlzdEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0ZvcndhcmRM
aXN0SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FBOTBDMjBBN0VCQTYw
MDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTY3JvbGxiYXIuY3BwOyBwYXRoID0gcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDsgc291
cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQlCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyog
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDQUNGM0JCMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRlcm4u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNvbnRlbnRVUkxQYXR0ZXJu
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTg4Miw4ICsxMTg4NCw5IEBACiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQk5MzYzQjYyOTBGOEU4RkUwMDA4MDM4MTAgLyogY2YgKi8sCiAJ
CQkJNTE2MEY0OTIwQjBBQTcxNTAwQzFEMkFGIC8qIG1hYyAqLywKLQkJCQk1MTc0MUQwQzBCMDcy
NTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLywKIAkJCQk1MTc0MUQwQjBCMDcy
NTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggKi8sCisJCQkJQkNBOENBNUQxMUU0RTZE
MTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwICovLAorCQkJCUJDQThDQTVFMTFF
NEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmggKi8sCiAJCQkJQkNBOEM4MUQx
MUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJQkNB
OEM4MUMxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oICovLAogCQkJ
CUJDQThDODMwMTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQu
aCAqLywKQEAgLTE5NzI0LDYgKzE5NzI3LDcgQEAKIAkJCQk5N0VGNTYxMTExRTQwNzgzMDA3RTAy
NkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQThDODFF
MTFFM0QzNjkwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQThDODMxMTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQThDQTYwMTFFNEU2RDEwMDgxMkZCNyAvKiBC
YWNrRm9yd2FyZExpc3RJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMDczLDcgKzIwMDc3LDYg
QEAKIAkJCQlBOENGRjA1MDBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTI5QTgxMjM3MEZCQjlDMUQwMDUxMDI5MyAvKiBBWE9iamVjdENh
Y2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5QTgxMjRCMEZCQjlDQTkwMDUxMDI5MyAvKiBB
WE9iamVjdENhY2hlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3NDFEMTAwQjA3MjU5QTAw
RUQ0NDJDIC8qIEJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzEyNEVF
NzBDMjY0MUNEMDA5RTIzNDkgLyogQmFySW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMz
REEyMTBEMDA2QzFEMDBFRjZGMjYgLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
NzIyMDRCMTFEMjk2MDUwMDYzOEI0MiAvKiBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yMjExMCw2ICsyMjExMyw3IEBACiAJCQkJQkNBOEM4MUYxMUUzRDM2OTAwODEy
RkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjRG
NUZGQjExQ0JEMkUxMDBBMTg2QkYgLyogUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3RUY1NjEwMTFFNDA3ODMwMDdFMDI2RiAvKiBIVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQ0E4Q0E1RjExRTRFNkQxMDA4MTJGQjcg
LyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUv
aGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2MjcyNSkKKysrIFdl
YkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQu
aCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExp
c3RJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNyArMzcsNyBAQCBCYWNr
Rm9yd2FyZENvbnRyb2xsZXI6OkJhY2tGb3J3YXJkQ29udHJvCiAgICAgLCBtX2NsaWVudChjbGll
bnQpCiB7CiAgICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgbV9saXN0ID0gQmFja0ZvcndhcmRM
aXN0OjpjcmVhdGUocGFnZSk7CisgICAgICAgIG1fbGlzdCA9IEJhY2tGb3J3YXJkTGlzdEltcGw6
OmNyZWF0ZShwYWdlKTsKICAgICBlbHNlCiAgICAgICAgIG1fbGlzdCA9IG1fY2xpZW50LT5jcmVh
dGVCYWNrRm9yd2FyZExpc3QoKTsKIH0KSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2Fy
ZENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRD
b250cm9sbGVyLmgJKHJldmlzaW9uIDYyNzI1KQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUGFnZTsKIGNsYXNzIEJhY2tGb3J3YXJkQ29udHJvbGxl
ckNsaWVudDsKIAogY2xhc3MgQmFja0ZvcndhcmRDb250cm9sbGVyIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCShyZXZpc2lvbiA2Mjcy
NSkKKysrIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJC
YWNrRm9yd2FyZExpc3QuaCIKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkhpc3Rv
cnlJdGVtLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQYWdlQ2FjaGUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgRGVmYXVsdENhcGFjaXR5ID0gMTAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IE5vQ3VycmVudEl0ZW1JbmRleCA9IFVJTlRfTUFYOwotCi1CYWNrRm9yd2FyZExpc3Q6OkJhY2tG
b3J3YXJkTGlzdChQYWdlKiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX2N1cnJl
bnQoTm9DdXJyZW50SXRlbUluZGV4KQotICAgICwgbV9jYXBhY2l0eShEZWZhdWx0Q2FwYWNpdHkp
Ci0gICAgLCBtX2Nsb3NlZCh0cnVlKQotICAgICwgbV9lbmFibGVkKHRydWUpCi17Ci19Ci0KLUJh
Y2tGb3J3YXJkTGlzdDo6fkJhY2tGb3J3YXJkTGlzdCgpCi17Ci0gICAgQVNTRVJUKG1fY2xvc2Vk
KTsKLX0KLQotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5
SXRlbT4gcHJwSXRlbSkKLXsKLSAgICBBU1NFUlQocHJwSXRlbSk7Ci0gICAgaWYgKG1fY2FwYWNp
dHkgPT0gMCB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVG9z
cyBhbnl0aGluZyBpbiB0aGUgZm9yd2FyZCBsaXN0ICAgIAotICAgIGlmIChtX2N1cnJlbnQgIT0g
Tm9DdXJyZW50SXRlbUluZGV4KSB7Ci0gICAgICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBtX2N1
cnJlbnQgKyAxOwotICAgICAgICB3aGlsZSAobV9lbnRyaWVzLnNpemUoKSA+IHRhcmdldFNpemUp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0
KCk7Ci0gICAgICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgbV9l
bnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShp
dGVtLmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRvc3MgdGhlIGZpcnN0IGl0
ZW0gaWYgdGhlIGxpc3QgaXMgZ2V0dGluZyB0b28gYmlnLCBhcyBsb25nIGFzIHdlJ3JlIG5vdCB1
c2luZyBpdAotICAgIC8vIChvciBldmVuIGlmIHdlIGFyZSwgaWYgd2Ugb25seSB3YW50IDEgZW50
cnkpLgotICAgIGlmIChtX2VudHJpZXMuc2l6ZSgpID09IG1fY2FwYWNpdHkgJiYgKG1fY3VycmVu
dCAhPSAwIHx8IG1fY2FwYWNpdHkgPT0gMSkpIHsKLSAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVt
PiBpdGVtID0gbV9lbnRyaWVzWzBdOwotICAgICAgICBtX2VudHJpZXMucmVtb3ZlKDApOwotICAg
ICAgICBtX2VudHJ5SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1v
dmUoaXRlbS5nZXQoKSk7Ci0gICAgICAgIG1fY3VycmVudC0tOwotICAgICAgICBpZiAobV9wYWdl
KQotICAgICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5k
aXNwYXRjaERpZFJlbW92ZUJhY2tGb3J3YXJkSXRlbShpdGVtLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICBtX2VudHJ5SGFzaC5hZGQocHJwSXRlbS5nZXQoKSk7Ci0gICAgbV9lbnRyaWVzLmluc2VydCht
X2N1cnJlbnQgKyAxLCBwcnBJdGVtKTsKLSAgICBtX2N1cnJlbnQrKzsKLSAgICBpZiAobV9wYWdl
KQotICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3Bh
dGNoRGlkQWRkQmFja0ZvcndhcmRJdGVtKGN1cnJlbnRJdGVtKCkpOwotfQotCi12b2lkIEJhY2tG
b3J3YXJkTGlzdDo6Z29CYWNrKCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50ID4gMCk7Ci0gICAg
aWYgKG1fY3VycmVudCA+IDApIHsKLSAgICAgICAgbV9jdXJyZW50LS07Ci0gICAgICAgIGlmICht
X3BhZ2UpCi0gICAgICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmRpc3BhdGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJbmRleCgpOwotICAgIH0KLX0KLQotdm9p
ZCBCYWNrRm9yd2FyZExpc3Q6OmdvRm9yd2FyZCgpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudCA8
IG1fZW50cmllcy5zaXplKCkgLSAxKTsKLSAgICBpZiAobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNp
emUoKSAtIDEpIHsKLSAgICAgICAgbV9jdXJyZW50Kys7Ci0gICAgICAgIGlmIChtX3BhZ2UpCi0g
ICAgICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3Bh
dGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJbmRleCgpOwotICAgIH0KLX0KLQotdm9pZCBCYWNrRm9y
d2FyZExpc3Q6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQotewotICAgIGlmICghbV9lbnRy
aWVzLnNpemUoKSB8fCAhaXRlbSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNp
Z25lZCBpbnQgaW5kZXggPSAwOwotICAgIGZvciAoOyBpbmRleCA8IG1fZW50cmllcy5zaXplKCk7
ICsraW5kZXgpCi0gICAgICAgIGlmIChtX2VudHJpZXNbaW5kZXhdID09IGl0ZW0pCi0gICAgICAg
ICAgICBicmVhazsKLSAgICBpZiAoaW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKSB7Ci0gICAgICAg
IG1fY3VycmVudCA9IGluZGV4OwotICAgICAgICBpZiAobV9wYWdlKQotICAgICAgICAgICAgbV9w
YWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJh
Y2tGb3J3YXJkSW5kZXgoKTsKLSAgICB9Ci19Ci0KLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExp
c3Q6OmJhY2tJdGVtKCkKLXsKLSAgICBpZiAobV9jdXJyZW50ICYmIG1fY3VycmVudCAhPSBOb0N1
cnJlbnRJdGVtSW5kZXgpCi0gICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50IC0gMV0u
Z2V0KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6
OmN1cnJlbnRJdGVtKCkKLXsKLSAgICBpZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRl
eCkKLSAgICAgICAgcmV0dXJuIG1fZW50cmllc1ttX2N1cnJlbnRdLmdldCgpOwotICAgIHJldHVy
biAwOwotfQotCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSgpCi17
Ci0gICAgaWYgKG1fZW50cmllcy5zaXplKCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUo
KSAtIDEpCi0gICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0KCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdFdpdGhMaW1p
dChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQotewotICAgIGxpc3QuY2xlYXIo
KTsKLSAgICBpZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkgewotICAgICAgICB1
bnNpZ25lZCBmaXJzdCA9IG1heCgoaW50KW1fY3VycmVudCAtIGxpbWl0LCAwKTsKLSAgICAgICAg
Zm9yICg7IGZpcnN0IDwgbV9jdXJyZW50OyArK2ZpcnN0KQotICAgICAgICAgICAgbGlzdC5hcHBl
bmQobV9lbnRyaWVzW2ZpcnN0XSk7Ci0gICAgfQotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6
Zm9yd2FyZExpc3RXaXRoTGltaXQoaW50IGxpbWl0LCBIaXN0b3J5SXRlbVZlY3RvciYgbGlzdCkK
LXsKLSAgICBBU1NFUlQobGltaXQgPiAtMSk7Ci0gICAgbGlzdC5jbGVhcigpOwotICAgIGlmICgh
bV9lbnRyaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNpZ25l
ZCBsYXN0RW50cnkgPSBtX2VudHJpZXMuc2l6ZSgpIC0gMTsKLSAgICBpZiAobV9jdXJyZW50IDwg
bGFzdEVudHJ5KSB7Ci0gICAgICAgIGludCBsYXN0ID0gbWluKG1fY3VycmVudCArIGxpbWl0LCBs
YXN0RW50cnkpOwotICAgICAgICBsaW1pdCA9IG1fY3VycmVudCArIDE7Ci0gICAgICAgIGZvciAo
OyBsaW1pdCA8PSBsYXN0OyArK2xpbWl0KQotICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRy
aWVzW2xpbWl0XSk7Ci0gICAgfQotfQotCi1pbnQgQmFja0ZvcndhcmRMaXN0OjpjYXBhY2l0eSgp
Ci17Ci0gICAgcmV0dXJuIG1fY2FwYWNpdHk7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0Ojpz
ZXRDYXBhY2l0eShpbnQgc2l6ZSkKLXsgICAgCi0gICAgd2hpbGUgKHNpemUgPCAoaW50KW1fZW50
cmllcy5zaXplKCkpIHsKLSAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRy
aWVzLmxhc3QoKTsKLSAgICAgICAgbV9lbnRyaWVzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgbV9l
bnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0u
Z2V0KCkpOwotICAgIH0KLQotICAgIGlmICghc2l6ZSkKLSAgICAgICAgbV9jdXJyZW50ID0gTm9D
dXJyZW50SXRlbUluZGV4OwotICAgIGVsc2UgaWYgKG1fY3VycmVudCA+IG1fZW50cmllcy5zaXpl
KCkgLSAxKSB7Ci0gICAgICAgIG1fY3VycmVudCA9IG1fZW50cmllcy5zaXplKCkgLSAxOwotICAg
ICAgICBpZiAobV9wYWdlKQotICAgICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVy
KCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKTsKLSAgICB9
Ci0gICAgbV9jYXBhY2l0eSA9IHNpemU7Ci19Ci0KLWJvb2wgQmFja0ZvcndhcmRMaXN0OjplbmFi
bGVkKCkKLXsKLSAgICByZXR1cm4gbV9lbmFibGVkOwotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlz
dDo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9lbmFibGVkID0gZW5hYmxlZDsK
LSAgICBpZiAoIWVuYWJsZWQpIHsKLSAgICAgICAgaW50IGNhcGFjaXR5ID0gbV9jYXBhY2l0eTsK
LSAgICAgICAgc2V0Q2FwYWNpdHkoMCk7Ci0gICAgICAgIHNldENhcGFjaXR5KGNhcGFjaXR5KTsK
LSAgICB9Ci19Ci0KLWludCBCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKQotewotICAg
IHJldHVybiBtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4ID8gMCA6IG1fY3VycmVudDsK
LX0KLQotaW50IEJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RDb3VudCgpCi17Ci0gICAgcmV0
dXJuIG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggPyAwIDogKGludCltX2VudHJpZXMu
c2l6ZSgpIC0gKG1fY3VycmVudCArIDEpOwotfQotCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRM
aXN0OjppdGVtQXRJbmRleChpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdp
dGhvdXQgZG9pbmcgbWF0aCBvbiBpbmRleCB0byBhdm9pZCBvdmVyZmxvdy4KLSAgICBpZiAoaW5k
ZXggPCAtKGludCltX2N1cnJlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGlmIChp
bmRleCA+IGZvcndhcmRMaXN0Q291bnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAot
ICAgIHJldHVybiBtX2VudHJpZXNbaW5kZXggKyBtX2N1cnJlbnRdLmdldCgpOwotfQotCi1IaXN0
b3J5SXRlbVZlY3RvciYgQmFja0ZvcndhcmRMaXN0OjplbnRyaWVzKCkKLXsKLSAgICByZXR1cm4g
bV9lbnRyaWVzOwotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJdGVtKQotewotICAgIEFTU0VSVChuZXdJdGVtKTsKLSAg
ICBBU1NFUlQobmV3SXRlbS0+c3RhdGVPYmplY3QoKSk7Ci0gICAgCi0gICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBjdXJyZW50ID0gY3VycmVudEl0ZW0oKTsKLSAgICBBU1NFUlQoY3VycmVudCk7Ci0K
LSAgICBhZGRJdGVtKG5ld0l0ZW0pOwotICAgIAotICAgIGlmICghY3VycmVudC0+c3RhdGVPYmpl
Y3QoKSkKLSAgICAgICAgY3VycmVudC0+c2V0U3RhdGVPYmplY3QoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoKSk7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9zZSgpCi17Ci0g
ICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKG1fZW50cmllc1tpXS5nZXQo
KSk7Ci0gICAgbV9lbnRyaWVzLmNsZWFyKCk7Ci0gICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKLSAg
ICBtX3BhZ2UgPSAwOwotICAgIG1fY2xvc2VkID0gdHJ1ZTsKLX0KLQotYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNsb3NlZCgpCi17Ci0gICAgcmV0dXJuIG1fY2xvc2VkOwotfQotCi12b2lkIEJhY2tG
b3J3YXJkTGlzdDo6cmVtb3ZlSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKLXsKLSAgICBpZiAoIWl0
ZW0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9lbnRyaWVzLnNpemUoKTsgKytpKQotICAgICAgICBpZiAobV9lbnRyaWVzW2ldID09IGl0ZW0p
IHsKLSAgICAgICAgICAgIG1fZW50cmllcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBtX2VudHJ5
SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVu
dEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQgPCBpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKG1fY3VycmVudCA+IGkpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50LS07
Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2Vu
dHJpZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPj0gY291bnQpCi0g
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudCA9IGNvdW50ID8gY291bnQgLSAxIDogTm9DdXJy
ZW50SXRlbUluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLX0KLQotYm9vbCBCYWNrRm9yd2FyZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSog
ZW50cnkpCi17Ci0gICAgcmV0dXJuIG1fZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKLX0KLQot
I2lmIEVOQUJMRShXTUwpCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJXTUxQYWdlSGlzdG9y
eSgpCi17Ci0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJl
bnRJdGVtKCk7Ci0KLSAgICBpbnQgc2l6ZSA9IG1fZW50cmllcy5zaXplKCk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9l
bnRyaWVzW2ldLmdldCgpKTsKLQotICAgIG1fZW50cmllcy5jbGVhcigpOwotICAgIG1fZW50cnlI
YXNoLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OwotCi0gICAg
Ly8gU3BlYzogVGhlIGhpc3Rvcnkgc3RhY2sgbWF5IGJlIHJlc2V0IHRvIGEgc3RhdGUgd2hlcmUg
aXQgb25seSBjb250YWlucyB0aGUgY3VycmVudCBjYXJkLgotICAgIGFkZEl0ZW0oY3VycmVudEl0
ZW0pOwotfQotI2VuZGlmCi0KLX07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5
L0JhY2tGb3J3YXJkTGlzdC5oCShyZXZpc2lvbiA2MjcyNSkKKysrIFdlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTkgKzMwLDEzIEBACiAKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIaXN0b3J5SXRlbTsKLWNs
YXNzIFBhZ2U7Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci1jbGFzcyBTdHJpbmc7CiAK
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRlbVZlY3RvcjsK
LXR5cGVkZWYgSGFzaFNldDxSZWZQdHI8SGlzdG9yeUl0ZW0+ID4gSGlzdG9yeUl0ZW1IYXNoU2V0
OwogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAvLyBJbiB0aGUgQ2hyb21pdW0gcG9ydCwgdGhl
IGJhY2svZm9yd2FyZCBsaXN0IGlzIG1hbmFnZWQgZXh0ZXJuYWxseS4KQEAgLTYyLDY1ICs1Niw1
NiBAQCBwdWJsaWM6CiAKIGNsYXNzIEJhY2tGb3J3YXJkTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVk
PEJhY2tGb3J3YXJkTGlzdD4gewogcHVibGljOiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNr
Rm9yd2FyZExpc3Q+IGNyZWF0ZShQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQmFj
a0ZvcndhcmRMaXN0KHBhZ2UpKTsgfQotICAgIH5CYWNrRm9yd2FyZExpc3QoKTsKKyAgICB2aXJ0
dWFsIH5CYWNrRm9yd2FyZExpc3QoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNCYWNrRm9yd2FyZExpc3RJbXBsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQogICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIg
bWV0aG9kcy4gCi0gICAgdm9pZCBzZXRDbGllbnQoQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBjbGll
bnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KEJh
Y2tGb3J3YXJkTGlzdENsaWVudCopID0gMDsKICNlbmRpZgotICAgIAotICAgIFBhZ2UqIHBhZ2Uo
KSB7IHJldHVybiBtX3BhZ2U7IH0KLSAgICAKLSAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4pOwotICAgIHZvaWQgZ29CYWNrKCk7Ci0gICAgdm9pZCBnb0ZvcndhcmQoKTsK
LSAgICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
SXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnb0Jh
Y2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdvRm9yd2FyZCgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qKSA9IDA7CiAgICAgICAgIAotICAgIEhpc3RvcnlJ
dGVtKiBiYWNrSXRlbSgpOwotICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSgpOwotICAgIEhp
c3RvcnlJdGVtKiBmb3J3YXJkSXRlbSgpOwotICAgIEhpc3RvcnlJdGVtKiBpdGVtQXRJbmRleChp
bnQpOwotCi0gICAgdm9pZCBiYWNrTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7Ci0gICAgdm9pZCBmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7Ci0KLSAgICBpbnQgY2FwYWNpdHkoKTsKLSAgICB2b2lkIHNldENhcGFjaXR5KGludCk7Ci0g
ICAgYm9vbCBlbmFibGVkKCk7Ci0gICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwotICAgIGludCBi
YWNrTGlzdENvdW50KCk7Ci0gICAgaW50IGZvcndhcmRMaXN0Q291bnQoKTsKLSAgICBib29sIGNv
bnRhaW5zSXRlbShIaXN0b3J5SXRlbSopOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGJhY2tJ
dGVtKCkgPSAwOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtKCkgPSAwOwor
ICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGZvcndhcmRJdGVtKCkgPSAwOworICAgIHZpcnR1YWwg
SGlzdG9yeUl0ZW0qIGl0ZW1BdEluZGV4KGludCkgPSAwOwogCi0gICAgdm9pZCBjbG9zZSgpOwot
ICAgIGJvb2wgY2xvc2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGJhY2tMaXN0V2l0aExpbWl0KGlu
dCwgSGlzdG9yeUl0ZW1WZWN0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZvcndhcmRMaXN0
V2l0aExpbWl0KGludCwgSGlzdG9yeUl0ZW1WZWN0b3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIGlu
dCBjYXBhY2l0eSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FwYWNpdHkoaW50KSA9IDA7
CisgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEVu
YWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgaW50IGJhY2tMaXN0Q291bnQoKSA9IDA7Cisg
ICAgdmlydHVhbCBpbnQgZm9yd2FyZExpc3RDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
Y29udGFpbnNJdGVtKEhpc3RvcnlJdGVtKikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsb3Nl
KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjbG9zZWQoKSA9IDA7CiAgICAgCi0gICAgdm9pZCBy
ZW1vdmVJdGVtKEhpc3RvcnlJdGVtKik7Ci0gICAgSGlzdG9yeUl0ZW1WZWN0b3ImIGVudHJpZXMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShIaXN0b3J5SXRlbSopICA9IDA7CisgICAg
dmlydHVhbCBIaXN0b3J5SXRlbVZlY3RvciYgZW50cmllcygpICA9IDA7CiAgICAgCi0gICAgdm9p
ZCBwdXNoU3RhdGVJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHVzaFN0YXRlSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPikgPSAwOwogCiAjaWYgRU5B
QkxFKFdNTCkKLSAgICB2b2lkIGNsZWFyV01MUGFnZUhpc3RvcnkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJXTUxQYWdlSGlzdG9yeSgpICA9IDA7CiAjZW5kaWYKIAotcHJpdmF0ZToKLSAgICBC
YWNrRm9yd2FyZExpc3QoUGFnZSopOwotICAgIAotICAgIFBhZ2UqIG1fcGFnZTsKLSNpZiBQTEFU
Rk9STShDSFJPTUlVTSkgCi0gICAgQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBtX2NsaWVudDsKLSNl
bHNlCi0gICAgSGlzdG9yeUl0ZW1WZWN0b3IgbV9lbnRyaWVzOwotICAgIEhpc3RvcnlJdGVtSGFz
aFNldCBtX2VudHJ5SGFzaDsKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnQ7Ci0jZW5kaWYKLSAgICB1
bnNpZ25lZCBtX2NhcGFjaXR5OwotICAgIGJvb2wgbV9jbG9zZWQ7Ci0gICAgYm9vbCBtX2VuYWJs
ZWQ7Citwcm90ZWN0ZWQ6CisgICAgQmFja0ZvcndhcmRMaXN0KCkKKyAgICB7CisgICAgfQogfTsK
ICAgICAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYKKyNlbmRpZiAvLyBCYWNrRm9yd2FyZExpc3RfaApJbmRleDogV2ViQ29yZS9oaXN0b3J5
L0JhY2tGb3J3YXJkTGlzdEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZExpc3RJbXBsLmNwcAkocmV2aXNpb24gNjI2NzQpCShmcm9tIFdlYkNvcmUvaGlz
dG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwOjYyNjc0KQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tG
b3J3YXJkTGlzdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKworI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKKyNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgRGVmYXVsdENhcGFj
aXR5ID0gMTAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE5vQ3VycmVudEl0ZW1JbmRleCA9IFVJ
TlRfTUFYOworCitCYWNrRm9yd2FyZExpc3Q6OkJhY2tGb3J3YXJkTGlzdChQYWdlKiBwYWdlKQor
ICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2N1cnJlbnQoTm9DdXJyZW50SXRlbUluZGV4KQor
ICAgICwgbV9jYXBhY2l0eShEZWZhdWx0Q2FwYWNpdHkpCisgICAgLCBtX2Nsb3NlZCh0cnVlKQor
ICAgICwgbV9lbmFibGVkKHRydWUpCit7Cit9CisKK0JhY2tGb3J3YXJkTGlzdDo6fkJhY2tGb3J3
YXJkTGlzdCgpCit7CisgICAgQVNTRVJUKG1fY2xvc2VkKTsKK30KKwordm9pZCBCYWNrRm9yd2Fy
ZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSkKK3sKKyAgICBB
U1NFUlQocHJwSXRlbSk7CisgICAgaWYgKG1fY2FwYWNpdHkgPT0gMCB8fCAhbV9lbmFibGVkKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVG9zcyBhbnl0aGluZyBpbiB0aGUgZm9yd2Fy
ZCBsaXN0ICAgIAorICAgIGlmIChtX2N1cnJlbnQgIT0gTm9DdXJyZW50SXRlbUluZGV4KSB7Cisg
ICAgICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBtX2N1cnJlbnQgKyAxOworICAgICAgICB3aGls
ZSAobV9lbnRyaWVzLnNpemUoKSA+IHRhcmdldFNpemUpIHsKKyAgICAgICAgICAgIFJlZlB0cjxI
aXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0KCk7CisgICAgICAgICAgICBtX2VudHJp
ZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwor
ICAgICAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShpdGVtLmdldCgpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFRvc3MgdGhlIGZpcnN0IGl0ZW0gaWYgdGhlIGxpc3QgaXMgZ2V0dGlu
ZyB0b28gYmlnLCBhcyBsb25nIGFzIHdlJ3JlIG5vdCB1c2luZyBpdAorICAgIC8vIChvciBldmVu
IGlmIHdlIGFyZSwgaWYgd2Ugb25seSB3YW50IDEgZW50cnkpLgorICAgIGlmIChtX2VudHJpZXMu
c2l6ZSgpID09IG1fY2FwYWNpdHkgJiYgKG1fY3VycmVudCAhPSAwIHx8IG1fY2FwYWNpdHkgPT0g
MSkpIHsKKyAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzWzBdOwor
ICAgICAgICBtX2VudHJpZXMucmVtb3ZlKDApOworICAgICAgICBtX2VudHJ5SGFzaC5yZW1vdmUo
aXRlbSk7CisgICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgICAg
IG1fY3VycmVudC0tOworICAgICAgICBpZiAobV9wYWdlKQorICAgICAgICAgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZFJlbW92ZUJhY2tGb3J3
YXJkSXRlbShpdGVtLmdldCgpKTsKKyAgICB9CisKKyAgICBtX2VudHJ5SGFzaC5hZGQocHJwSXRl
bS5nZXQoKSk7CisgICAgbV9lbnRyaWVzLmluc2VydChtX2N1cnJlbnQgKyAxLCBwcnBJdGVtKTsK
KyAgICBtX2N1cnJlbnQrKzsKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQWRkQmFja0ZvcndhcmRJdGVt
KGN1cnJlbnRJdGVtKCkpOworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Z29CYWNrKCkKK3sK
KyAgICBBU1NFUlQobV9jdXJyZW50ID4gMCk7CisgICAgaWYgKG1fY3VycmVudCA+IDApIHsKKyAg
ICAgICAgbV9jdXJyZW50LS07CisgICAgICAgIGlmIChtX3BhZ2UpCisgICAgICAgICAgICBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQ2hhbmdlQmFj
a0ZvcndhcmRJbmRleCgpOworICAgIH0KK30KKwordm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvRm9y
d2FyZCgpCit7CisgICAgQVNTRVJUKG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkgLSAxKTsK
KyAgICBpZiAobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpIHsKKyAgICAgICAgbV9j
dXJyZW50Kys7CisgICAgICAgIGlmIChtX3BhZ2UpCisgICAgICAgICAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJ
bmRleCgpOworICAgIH0KK30KKwordm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKEhpc3Rv
cnlJdGVtKiBpdGVtKQoreworICAgIGlmICghbV9lbnRyaWVzLnNpemUoKSB8fCAhaXRlbSkKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworICAg
IGZvciAoOyBpbmRleCA8IG1fZW50cmllcy5zaXplKCk7ICsraW5kZXgpCisgICAgICAgIGlmICht
X2VudHJpZXNbaW5kZXhdID09IGl0ZW0pCisgICAgICAgICAgICBicmVhazsKKyAgICBpZiAoaW5k
ZXggPCBtX2VudHJpZXMuc2l6ZSgpKSB7CisgICAgICAgIG1fY3VycmVudCA9IGluZGV4OworICAg
ICAgICBpZiAobV9wYWdlKQorICAgICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVy
KCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKTsKKyAgICB9
Cit9CisKK0hpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmJhY2tJdGVtKCkKK3sKKyAgICBp
ZiAobV9jdXJyZW50ICYmIG1fY3VycmVudCAhPSBOb0N1cnJlbnRJdGVtSW5kZXgpCisgICAgICAg
IHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50IC0gMV0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK0hpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmN1cnJlbnRJdGVtKCkKK3sKKyAgICBp
ZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkKKyAgICAgICAgcmV0dXJuIG1fZW50
cmllc1ttX2N1cnJlbnRdLmdldCgpOworICAgIHJldHVybiAwOworfQorCitIaXN0b3J5SXRlbSog
QmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSgpCit7CisgICAgaWYgKG1fZW50cmllcy5zaXpl
KCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpCisgICAgICAgIHJldHVybiBt
X2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
QmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdFdpdGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVt
VmVjdG9yJiBsaXN0KQoreworICAgIGxpc3QuY2xlYXIoKTsKKyAgICBpZiAobV9jdXJyZW50ICE9
IE5vQ3VycmVudEl0ZW1JbmRleCkgeworICAgICAgICB1bnNpZ25lZCBmaXJzdCA9IG1heCgoaW50
KW1fY3VycmVudCAtIGxpbWl0LCAwKTsKKyAgICAgICAgZm9yICg7IGZpcnN0IDwgbV9jdXJyZW50
OyArK2ZpcnN0KQorICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRyaWVzW2ZpcnN0XSk7Cisg
ICAgfQorfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RXaXRoTGltaXQoaW50
IGxpbWl0LCBIaXN0b3J5SXRlbVZlY3RvciYgbGlzdCkKK3sKKyAgICBBU1NFUlQobGltaXQgPiAt
MSk7CisgICAgbGlzdC5jbGVhcigpOworICAgIGlmICghbV9lbnRyaWVzLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICB1bnNpZ25lZCBsYXN0RW50cnkgPSBtX2VudHJpZXMu
c2l6ZSgpIC0gMTsKKyAgICBpZiAobV9jdXJyZW50IDwgbGFzdEVudHJ5KSB7CisgICAgICAgIGlu
dCBsYXN0ID0gbWluKG1fY3VycmVudCArIGxpbWl0LCBsYXN0RW50cnkpOworICAgICAgICBsaW1p
dCA9IG1fY3VycmVudCArIDE7CisgICAgICAgIGZvciAoOyBsaW1pdCA8PSBsYXN0OyArK2xpbWl0
KQorICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRyaWVzW2xpbWl0XSk7CisgICAgfQorfQor
CitpbnQgQmFja0ZvcndhcmRMaXN0OjpjYXBhY2l0eSgpCit7CisgICAgcmV0dXJuIG1fY2FwYWNp
dHk7Cit9CisKK3ZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRDYXBhY2l0eShpbnQgc2l6ZSkKK3sg
ICAgCisgICAgd2hpbGUgKHNpemUgPCAoaW50KW1fZW50cmllcy5zaXplKCkpIHsKKyAgICAgICAg
UmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKKyAgICAgICAgbV9l
bnRyaWVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwor
ICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0uZ2V0KCkpOworICAgIH0KKworICAgIGlm
ICghc2l6ZSkKKyAgICAgICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworICAgIGVs
c2UgaWYgKG1fY3VycmVudCA+IG1fZW50cmllcy5zaXplKCkgLSAxKSB7CisgICAgICAgIG1fY3Vy
cmVudCA9IG1fZW50cmllcy5zaXplKCkgLSAxOworICAgICAgICBpZiAobV9wYWdlKQorICAgICAg
ICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERp
ZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKTsKKyAgICB9CisgICAgbV9jYXBhY2l0eSA9IHNpemU7
Cit9CisKK2Jvb2wgQmFja0ZvcndhcmRMaXN0OjplbmFibGVkKCkKK3sKKyAgICByZXR1cm4gbV9l
bmFibGVkOworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0RW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAg
ICAgICAgaW50IGNhcGFjaXR5ID0gbV9jYXBhY2l0eTsKKyAgICAgICAgc2V0Q2FwYWNpdHkoMCk7
CisgICAgICAgIHNldENhcGFjaXR5KGNhcGFjaXR5KTsKKyAgICB9Cit9CisKK2ludCBCYWNrRm9y
d2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKQoreworICAgIHJldHVybiBtX2N1cnJlbnQgPT0gTm9D
dXJyZW50SXRlbUluZGV4ID8gMCA6IG1fY3VycmVudDsKK30KKworaW50IEJhY2tGb3J3YXJkTGlz
dDo6Zm9yd2FyZExpc3RDb3VudCgpCit7CisgICAgcmV0dXJuIG1fY3VycmVudCA9PSBOb0N1cnJl
bnRJdGVtSW5kZXggPyAwIDogKGludCltX2VudHJpZXMuc2l6ZSgpIC0gKG1fY3VycmVudCArIDEp
OworfQorCitIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleChpbnQgaW5k
ZXgpCit7CisgICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdpdGhvdXQgZG9pbmcgbWF0aCBvbiBpbmRl
eCB0byBhdm9pZCBvdmVyZmxvdy4KKyAgICBpZiAoaW5kZXggPCAtKGludCltX2N1cnJlbnQpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmIChpbmRleCA+IGZvcndhcmRMaXN0Q291bnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIHJldHVybiBtX2VudHJpZXNbaW5k
ZXggKyBtX2N1cnJlbnRdLmdldCgpOworfQorCitIaXN0b3J5SXRlbVZlY3RvciYgQmFja0Zvcndh
cmRMaXN0OjplbnRyaWVzKCkKK3sKKyAgICByZXR1cm4gbV9lbnRyaWVzOworfQorCit2b2lkIEJh
Y2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJ
dGVtKQoreworICAgIEFTU0VSVChuZXdJdGVtKTsKKyAgICBBU1NFUlQobmV3SXRlbS0+c3RhdGVP
YmplY3QoKSk7CisgICAgCisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50ID0gY3VycmVu
dEl0ZW0oKTsKKyAgICBBU1NFUlQoY3VycmVudCk7CisKKyAgICBhZGRJdGVtKG5ld0l0ZW0pOwor
ICAgIAorICAgIGlmICghY3VycmVudC0+c3RhdGVPYmplY3QoKSkKKyAgICAgICAgY3VycmVudC0+
c2V0U3RhdGVPYmplY3QoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKSk7Cit9CisKK3Zv
aWQgQmFja0ZvcndhcmRMaXN0OjpjbG9zZSgpCit7CisgICAgaW50IHNpemUgPSBtX2VudHJpZXMu
c2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBwYWdl
Q2FjaGUoKS0+cmVtb3ZlKG1fZW50cmllc1tpXS5nZXQoKSk7CisgICAgbV9lbnRyaWVzLmNsZWFy
KCk7CisgICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKKyAgICBtX3BhZ2UgPSAwOworICAgIG1fY2xv
c2VkID0gdHJ1ZTsKK30KKworYm9vbCBCYWNrRm9yd2FyZExpc3Q6OmNsb3NlZCgpCit7CisgICAg
cmV0dXJuIG1fY2xvc2VkOworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6cmVtb3ZlSXRlbShI
aXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUoKTsgKytpKQor
ICAgICAgICBpZiAobV9lbnRyaWVzW2ldID09IGl0ZW0pIHsKKyAgICAgICAgICAgIG1fZW50cmll
cy5yZW1vdmUoaSk7CisgICAgICAgICAgICBtX2VudHJ5SGFzaC5yZW1vdmUoaXRlbSk7CisgICAg
ICAgICAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQg
PCBpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1fY3VycmVudCA+
IGkpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50LS07CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2VudHJpZXMuc2l6ZSgpOworICAgICAgICAg
ICAgICAgIGlmIChtX2N1cnJlbnQgPj0gY291bnQpCisgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudCA9IGNvdW50ID8gY291bnQgLSAxIDogTm9DdXJyZW50SXRlbUluZGV4OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KK30KKworYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSogZW50cnkpCit7CisgICAgcmV0dXJuIG1f
ZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKK30KKworI2lmIEVOQUJMRShXTUwpCit2b2lkIEJh
Y2tGb3J3YXJkTGlzdDo6Y2xlYXJXTUxQYWdlSGlzdG9yeSgpCit7CisgICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJlbnRJdGVtKCk7CisKKyAgICBpbnQgc2l6
ZSA9IG1fZW50cmllcy5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
CisgICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9lbnRyaWVzW2ldLmdldCgpKTsKKworICAg
IG1fZW50cmllcy5jbGVhcigpOworICAgIG1fZW50cnlIYXNoLmNsZWFyKCk7CisgICAgbV9jdXJy
ZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworCisgICAgLy8gU3BlYzogVGhlIGhpc3Rvcnkgc3Rh
Y2sgbWF5IGJlIHJlc2V0IHRvIGEgc3RhdGUgd2hlcmUgaXQgb25seSBjb250YWlucyB0aGUgY3Vy
cmVudCBjYXJkLgorICAgIGFkZEl0ZW0oY3VycmVudEl0ZW0pOworfQorI2VuZGlmCisKK307IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdElt
cGwuY3BwCShyZXZpc2lvbiA2MjY3NCkKKysrIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3RJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJC
YWNrRm9yd2FyZExpc3RJbXBsLmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBEZWZhdWx0Q2FwYWNpdHkgPSAxMDA7CiBzdGF0aWMgY29uc3QgdW5z
aWduZWQgTm9DdXJyZW50SXRlbUluZGV4ID0gVUlOVF9NQVg7CiAKLUJhY2tGb3J3YXJkTGlzdDo6
QmFja0ZvcndhcmRMaXN0KFBhZ2UqIHBhZ2UpCitCYWNrRm9yd2FyZExpc3RJbXBsOjpCYWNrRm9y
d2FyZExpc3RJbXBsKFBhZ2UqIHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fY3Vy
cmVudChOb0N1cnJlbnRJdGVtSW5kZXgpCiAgICAgLCBtX2NhcGFjaXR5KERlZmF1bHRDYXBhY2l0
eSkKQEAgLTUyLDEyICs1MiwxMiBAQCBCYWNrRm9yd2FyZExpc3Q6OkJhY2tGb3J3YXJkTGlzdChQ
YWdlKiBwCiB7CiB9CiAKLUJhY2tGb3J3YXJkTGlzdDo6fkJhY2tGb3J3YXJkTGlzdCgpCitCYWNr
Rm9yd2FyZExpc3RJbXBsOjp+QmFja0ZvcndhcmRMaXN0SW1wbCgpCiB7CiAgICAgQVNTRVJUKG1f
Y2xvc2VkKTsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4gcHJwSXRlbSkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6YWRkSXRlbShQ
YXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogewogICAgIEFTU0VSVChwcnBJdGVtKTsK
ICAgICBpZiAobV9jYXBhY2l0eSA9PSAwIHx8ICFtX2VuYWJsZWQpCkBAIC05Myw3ICs5Myw3IEBA
IHZvaWQgQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFBhc3NSZWZQdHIKICAgICAgICAgbV9wYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZEFkZEJhY2tGb3J3
YXJkSXRlbShjdXJyZW50SXRlbSgpKTsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvQmFj
aygpCit2b2lkIEJhY2tGb3J3YXJkTGlzdEltcGw6OmdvQmFjaygpCiB7CiAgICAgQVNTRVJUKG1f
Y3VycmVudCA+IDApOwogICAgIGlmIChtX2N1cnJlbnQgPiAwKSB7CkBAIC0xMDMsNyArMTAzLDcg
QEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvQmFjaygpCiAgICAgfQogfQogCi12b2lkIEJhY2tG
b3J3YXJkTGlzdDo6Z29Gb3J3YXJkKCkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6Z29Gb3J3
YXJkKCkKIHsKICAgICBBU1NFUlQobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpOwog
ICAgIGlmIChtX2N1cnJlbnQgPCBtX2VudHJpZXMuc2l6ZSgpIC0gMSkgewpAQCAtMTEzLDcgKzEx
Myw3IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0Ojpnb0ZvcndhcmQoKQogICAgIH0KIH0KIAotdm9p
ZCBCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQordm9pZCBCYWNr
Rm9yd2FyZExpc3RJbXBsOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICBpZiAo
IW1fZW50cmllcy5zaXplKCkgfHwgIWl0ZW0pCiAgICAgICAgIHJldHVybjsKQEAgLTEyOSwyOCAr
MTI5LDI4IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0Ojpnb1RvSXRlbShIaXN0b3J5SXQKICAgICB9
CiB9CiAKLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmJhY2tJdGVtKCkKK0hpc3RvcnlJ
dGVtKiBCYWNrRm9yd2FyZExpc3RJbXBsOjpiYWNrSXRlbSgpCiB7CiAgICAgaWYgKG1fY3VycmVu
dCAmJiBtX2N1cnJlbnQgIT0gTm9DdXJyZW50SXRlbUluZGV4KQogICAgICAgICByZXR1cm4gbV9l
bnRyaWVzW21fY3VycmVudCAtIDFdLmdldCgpOwogICAgIHJldHVybiAwOwogfQogCi1IaXN0b3J5
SXRlbSogQmFja0ZvcndhcmRMaXN0OjpjdXJyZW50SXRlbSgpCitIaXN0b3J5SXRlbSogQmFja0Zv
cndhcmRMaXN0SW1wbDo6Y3VycmVudEl0ZW0oKQogewogICAgIGlmIChtX2N1cnJlbnQgIT0gTm9D
dXJyZW50SXRlbUluZGV4KQogICAgICAgICByZXR1cm4gbV9lbnRyaWVzW21fY3VycmVudF0uZ2V0
KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmZv
cndhcmRJdGVtKCkKK0hpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3RJbXBsOjpmb3J3YXJkSXRl
bSgpCiB7CiAgICAgaWYgKG1fZW50cmllcy5zaXplKCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVz
LnNpemUoKSAtIDEpCiAgICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0
KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdFdp
dGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQordm9pZCBCYWNrRm9y
d2FyZExpc3RJbXBsOjpiYWNrTGlzdFdpdGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVj
dG9yJiBsaXN0KQogewogICAgIGxpc3QuY2xlYXIoKTsKICAgICBpZiAobV9jdXJyZW50ICE9IE5v
Q3VycmVudEl0ZW1JbmRleCkgewpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQmFja0ZvcndhcmRM
aXN0OjpiYWNrTGlzdFdpdGhMaW1pdCgKICAgICB9CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0
Ojpmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0
KQordm9pZCBCYWNrRm9yd2FyZExpc3RJbXBsOjpmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQgbGlt
aXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQogewogICAgIEFTU0VSVChsaW1pdCA+IC0xKTsK
ICAgICBsaXN0LmNsZWFyKCk7CkBAIC0xNzYsMTIgKzE3NiwxMiBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6Zm9yd2FyZExpc3RXaXRoTGltCiAgICAgfQogfQogCi1pbnQgQmFja0ZvcndhcmRMaXN0
OjpjYXBhY2l0eSgpCitpbnQgQmFja0ZvcndhcmRMaXN0SW1wbDo6Y2FwYWNpdHkoKQogewogICAg
IHJldHVybiBtX2NhcGFjaXR5OwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0Q2FwYWNp
dHkoaW50IHNpemUpCit2b2lkIEJhY2tGb3J3YXJkTGlzdEltcGw6OnNldENhcGFjaXR5KGludCBz
aXplKQogeyAgICAKICAgICB3aGlsZSAoc2l6ZSA8IChpbnQpbV9lbnRyaWVzLnNpemUoKSkgewog
ICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMubGFzdCgpOwpAQCAt
MjAwLDEyICsyMDAsMTIgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldENhcGFjaXR5KGludCBz
aQogICAgIG1fY2FwYWNpdHkgPSBzaXplOwogfQogCi1ib29sIEJhY2tGb3J3YXJkTGlzdDo6ZW5h
YmxlZCgpCitib29sIEJhY2tGb3J3YXJkTGlzdEltcGw6OmVuYWJsZWQoKQogewogICAgIHJldHVy
biBtX2VuYWJsZWQ7CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6c2V0RW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7CiAgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKICAgICBpZiAoIWVuYWJsZWQpIHsKQEAg
LTIxNSwxNyArMjE1LDE3IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRFbmFibGVkKGJvb2wg
ZW4KICAgICB9CiB9CiAKLWludCBCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKQoraW50
IEJhY2tGb3J3YXJkTGlzdEltcGw6OmJhY2tMaXN0Q291bnQoKQogewogICAgIHJldHVybiBtX2N1
cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4ID8gMCA6IG1fY3VycmVudDsKIH0KIAotaW50IEJh
Y2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RDb3VudCgpCitpbnQgQmFja0ZvcndhcmRMaXN0SW1w
bDo6Zm9yd2FyZExpc3RDb3VudCgpCiB7CiAgICAgcmV0dXJuIG1fY3VycmVudCA9PSBOb0N1cnJl
bnRJdGVtSW5kZXggPyAwIDogKGludCltX2VudHJpZXMuc2l6ZSgpIC0gKG1fY3VycmVudCArIDEp
OwogfQogCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleChpbnQgaW5k
ZXgpCitIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0SW1wbDo6aXRlbUF0SW5kZXgoaW50IGlu
ZGV4KQogewogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aXRob3V0IGRvaW5nIG1hdGggb24gaW5k
ZXggdG8gYXZvaWQgb3ZlcmZsb3cuCiAgICAgaWYgKGluZGV4IDwgLShpbnQpbV9jdXJyZW50KQpA
QCAtMjM3LDEyICsyMzcsMTIgQEAgSGlzdG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdDo6aXRlbUF0
SW5kZQogICAgIHJldHVybiBtX2VudHJpZXNbaW5kZXggKyBtX2N1cnJlbnRdLmdldCgpOwogfQog
Ci1IaXN0b3J5SXRlbVZlY3RvciYgQmFja0ZvcndhcmRMaXN0OjplbnRyaWVzKCkKK0hpc3RvcnlJ
dGVtVmVjdG9yJiBCYWNrRm9yd2FyZExpc3RJbXBsOjplbnRyaWVzKCkKIHsKICAgICByZXR1cm4g
bV9lbnRyaWVzOwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJdGVtKQordm9pZCBCYWNrRm9yd2FyZExpc3RJbXBsOjpw
dXNoU3RhdGVJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IG5ld0l0ZW0pCiB7CiAgICAgQVNT
RVJUKG5ld0l0ZW0pOwogICAgIEFTU0VSVChuZXdJdGVtLT5zdGF0ZU9iamVjdCgpKTsKQEAgLTI1
Niw3ICsyNTYsNyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNzCiAg
ICAgICAgIGN1cnJlbnQtPnNldFN0YXRlT2JqZWN0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKCkpOwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xvc2UoKQordm9pZCBCYWNrRm9y
d2FyZExpc3RJbXBsOjpjbG9zZSgpCiB7CiAgICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgp
OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQpAQCAtMjY3LDEyICsyNjcsMTIg
QEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmNsb3NlKCkKICAgICBtX2Nsb3NlZCA9IHRydWU7CiB9
CiAKLWJvb2wgQmFja0ZvcndhcmRMaXN0OjpjbG9zZWQoKQorYm9vbCBCYWNrRm9yd2FyZExpc3RJ
bXBsOjpjbG9zZWQoKQogewogICAgIHJldHVybiBtX2Nsb3NlZDsKIH0KIAotdm9pZCBCYWNrRm9y
d2FyZExpc3Q6OnJlbW92ZUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIEJhY2tGb3J3YXJk
TGlzdEltcGw6OnJlbW92ZUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiB7CiAgICAgaWYgKCFpdGVt
KQogICAgICAgICByZXR1cm47CkBAIC0yOTQsMTMgKzI5NCwxMyBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6cmVtb3ZlSXRlbShIaXN0b3J5CiAgICAgICAgIH0KIH0KIAotYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSogZW50cnkpCitib29sIEJhY2tGb3J3YXJk
TGlzdEltcGw6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSogZW50cnkpCiB7CiAgICAgcmV0dXJu
IG1fZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKIH0KIAogI2lmIEVOQUJMRShXTUwpCi12b2lk
IEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJXTUxQYWdlSGlzdG9yeSgpCit2b2lkIEJhY2tGb3J3YXJk
TGlzdEltcGw6OmNsZWFyV01MUGFnZUhpc3RvcnkoKQogewogICAgIFJlZlB0cjxIaXN0b3J5SXRl
bT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50SXRlbSgpOwogCkluZGV4OiBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZExpc3RJbXBsLmgJKHJldmlzaW9uIDYyNjc0KQkoZnJvbSBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0Lmg6NjI2NzQpCisrKyBXZWJDb3JlL2hpc3RvcnkvQmFja0Zv
cndhcmRMaXN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QmFja0ZvcndhcmRMaXN0X2gKKyNkZWZpbmUgQmFja0ZvcndhcmRMaXN0X2gKKworI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEhpc3RvcnlJdGVtOworY2xhc3MgUGFn
ZTsKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKK2NsYXNzIFN0cmluZzsKKwordHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPiA+IEhpc3RvcnlJdGVtVmVjdG9yOwordHlwZWRl
ZiBIYXNoU2V0PFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRlbUhhc2hTZXQ7CisKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKy8vIEluIHRoZSBDaHJvbWl1bSBwb3J0LCB0aGUgYmFjay9m
b3J3YXJkIGxpc3QgaXMgbWFuYWdlZCBleHRlcm5hbGx5LgorLy8gU2VlIEJhY2tGb3J3YXJkTGlz
dENocm9taXVtLmNwcAorY2xhc3MgQmFja0ZvcndhcmRMaXN0Q2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5CYWNrRm9yd2FyZExpc3RDbGllbnQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBh
ZGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdv
VG9JdGVtKEhpc3RvcnlJdGVtKikgPSAwOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGN1cnJl
bnRJdGVtKCkgPSAwOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGl0ZW1BdEluZGV4KGludCkg
PSAwOworICAgIHZpcnR1YWwgaW50IGJhY2tMaXN0Q291bnQoKSA9IDA7CisgICAgdmlydHVhbCBp
bnQgZm9yd2FyZExpc3RDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7
Cit9OworI2VuZGlmCisKK2NsYXNzIEJhY2tGb3J3YXJkTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVk
PEJhY2tGb3J3YXJkTGlzdD4geworcHVibGljOiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNr
Rm9yd2FyZExpc3Q+IGNyZWF0ZShQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQmFj
a0ZvcndhcmRMaXN0KHBhZ2UpKTsgfQorICAgIH5CYWNrRm9yd2FyZExpc3QoKTsKKworI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQorICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIg
bWV0aG9kcy4gCisgICAgdm9pZCBzZXRDbGllbnQoQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBjbGll
bnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKyNlbmRpZgorICAgIAorICAgIFBhZ2UqIHBhZ2Uo
KSB7IHJldHVybiBtX3BhZ2U7IH0KKyAgICAKKyAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4pOworICAgIHZvaWQgZ29CYWNrKCk7CisgICAgdm9pZCBnb0ZvcndhcmQoKTsK
KyAgICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKik7CisgICAgICAgIAorICAgIEhpc3RvcnlJ
dGVtKiBiYWNrSXRlbSgpOworICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSgpOworICAgIEhp
c3RvcnlJdGVtKiBmb3J3YXJkSXRlbSgpOworICAgIEhpc3RvcnlJdGVtKiBpdGVtQXRJbmRleChp
bnQpOworCisgICAgdm9pZCBiYWNrTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7CisgICAgdm9pZCBmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7CisKKyAgICBpbnQgY2FwYWNpdHkoKTsKKyAgICB2b2lkIHNldENhcGFjaXR5KGludCk7Cisg
ICAgYm9vbCBlbmFibGVkKCk7CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIGludCBi
YWNrTGlzdENvdW50KCk7CisgICAgaW50IGZvcndhcmRMaXN0Q291bnQoKTsKKyAgICBib29sIGNv
bnRhaW5zSXRlbShIaXN0b3J5SXRlbSopOworCisgICAgdm9pZCBjbG9zZSgpOworICAgIGJvb2wg
Y2xvc2VkKCk7CisgICAgCisgICAgdm9pZCByZW1vdmVJdGVtKEhpc3RvcnlJdGVtKik7CisgICAg
SGlzdG9yeUl0ZW1WZWN0b3ImIGVudHJpZXMoKTsKKyAgICAKKyAgICB2b2lkIHB1c2hTdGF0ZUl0
ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4pOworCisjaWYgRU5BQkxFKFdNTCkKKyAgICB2b2lk
IGNsZWFyV01MUGFnZUhpc3RvcnkoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEJhY2tGb3J3
YXJkTGlzdChQYWdlKik7CisgICAgCisgICAgUGFnZSogbV9wYWdlOworI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKSAKKyAgICBCYWNrRm9yd2FyZExpc3RDbGllbnQqIG1fY2xpZW50OworI2Vsc2UKKyAg
ICBIaXN0b3J5SXRlbVZlY3RvciBtX2VudHJpZXM7CisgICAgSGlzdG9yeUl0ZW1IYXNoU2V0IG1f
ZW50cnlIYXNoOworICAgIHVuc2lnbmVkIG1fY3VycmVudDsKKyNlbmRpZgorICAgIHVuc2lnbmVk
IG1fY2FwYWNpdHk7CisgICAgYm9vbCBtX2Nsb3NlZDsKKyAgICBib29sIG1fZW5hYmxlZDsKK307
CisgICAgCit9IC8vbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZExpc3RJbXBsLmgJKHJldmlzaW9uIDYyNjc0KQorKysgV2ViQ29yZS9oaXN0
b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNDUgKzI1LDI2
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEJhY2tGb3J3YXJkTGlzdF9oCi0j
ZGVmaW5lIEJhY2tGb3J3YXJkTGlzdF9oCisjaWZuZGVmIEJhY2tGb3J3YXJkTGlzdEltcGxfaAor
I2RlZmluZSBCYWNrRm9yd2FyZExpc3RJbXBsX2gKIAotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJCYWNrRm9yd2FyZExp
c3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhpc3RvcnlJ
dGVtOwogY2xhc3MgUGFnZTsKLWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLWNsYXNzIFN0
cmluZzsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPiA+IEhpc3RvcnlJdGVt
VmVjdG9yOwogdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRl
bUhhc2hTZXQ7CiAKLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLS8vIEluIHRoZSBDaHJvbWl1bSBw
b3J0LCB0aGUgYmFjay9mb3J3YXJkIGxpc3QgaXMgbWFuYWdlZCBleHRlcm5hbGx5LgotLy8gU2Vl
IEJhY2tGb3J3YXJkTGlzdENocm9taXVtLmNwcAotY2xhc3MgQmFja0ZvcndhcmRMaXN0Q2xpZW50
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5CYWNrRm9yd2FyZExpc3RDbGllbnQoKSB7fQotICAg
IHZpcnR1YWwgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKikgPSAwOwotICAgIHZpcnR1YWwgSGlz
dG9yeUl0ZW0qIGN1cnJlbnRJdGVtKCkgPSAwOwotICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGl0
ZW1BdEluZGV4KGludCkgPSAwOwotICAgIHZpcnR1YWwgaW50IGJhY2tMaXN0Q291bnQoKSA9IDA7
Ci0gICAgdmlydHVhbCBpbnQgZm9yd2FyZExpc3RDb3VudCgpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgY2xvc2UoKSA9IDA7Ci19OwotI2VuZGlmCi0KLWNsYXNzIEJhY2tGb3J3YXJkTGlzdCA6IHB1
YmxpYyBSZWZDb3VudGVkPEJhY2tGb3J3YXJkTGlzdD4geworY2xhc3MgQmFja0ZvcndhcmRMaXN0
SW1wbCA6IHB1YmxpYyBCYWNrRm9yd2FyZExpc3QgewogcHVibGljOiAKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxCYWNrRm9yd2FyZExpc3Q+IGNyZWF0ZShQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgQmFja0ZvcndhcmRMaXN0KHBhZ2UpKTsgfQotICAgIH5CYWNrRm9yd2FyZExpc3Qo
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNrRm9yd2FyZExpc3RJbXBsPiBjcmVhdGUoUGFn
ZSogcGFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEJhY2tGb3J3YXJkTGlzdEltcGwocGFnZSkp
OyB9CisgICAgfkJhY2tGb3J3YXJkTGlzdEltcGwoKTsKKworICAgIGJvb2wgaXNCYWNrRm9yd2Fy
ZExpc3RJbXBsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgUExBVEZPUk0oQ0hST01J
VU0pCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBtZXRob2RzLiAKQEAg
LTEwNiw3ICs4Nyw3IEBAIHB1YmxpYzogCiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBCYWNrRm9y
d2FyZExpc3QoUGFnZSopOworICAgIEJhY2tGb3J3YXJkTGlzdEltcGwoUGFnZSopOwogICAgIAog
ICAgIFBhZ2UqIG1fcGFnZTsKICNpZiBQTEFURk9STShDSFJPTUlVTSkgCkBAIC0xMjEsNiArMTAy
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZW5hYmxlZDsKIH07CiAgICAgCi19IC8vbmFtZXNw
YWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8g
QmFja0ZvcndhcmRMaXN0SW1wbF9oCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNjI3NDApCisrKyBXZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA3LTA3ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MTgyNgorICAgICAgICBDb252ZXJ0IEJhY2tGb3J3YXJkTGlzdCB0byBhbiBhYnN0
cmFjdCBiYXNlIGNsYXNzIGFuZCBhZGQgQmFja0ZvcndhcmRMaXN0SW1wbAorICAgICAgICBhcyB0
aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgaXQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudDo6Y3JlYXRlQmFja0Zv
cndhcmRMaXN0KToKKwogMjAxMC0wNy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYWNr
Rm9yd2FyZENvbnRyb2xsZXJDbGllbnQuY3BwCShyZXZpc2lvbiA2MjcyNSkKKysrIFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiV2ViQmFja0Zv
cndhcmRDb250cm9sbGVyQ2xpZW50LmgiCiAKICNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9CYWNrRm9yd2FyZExpc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0JhY2tGb3J3
YXJkTGlzdEltcGwuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTM5LDcgKzM5
LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQ6OmJhYwogCiBQYXNzUmVm
UHRyPEJhY2tGb3J3YXJkTGlzdD4gV2ViQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50OjpjcmVh
dGVCYWNrRm9yd2FyZExpc3QoKQogewotICAgIHJldHVybiBCYWNrRm9yd2FyZExpc3Q6OmNyZWF0
ZShtX3BhZ2UtPmNvcmVQYWdlKCkpOworICAgIHJldHVybiBCYWNrRm9yd2FyZExpc3RJbXBsOjpj
cmVhdGUobV9wYWdlLT5jb3JlUGFnZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjI3NDApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA3LTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTgyNgor
ICAgICAgICBDb252ZXJ0IEJhY2tGb3J3YXJkTGlzdCB0byBhbiBhYnN0cmFjdCBiYXNlIGNsYXNz
IGFuZCBhZGQgQmFja0ZvcndhcmRMaXN0SW1wbAorICAgICAgICBhcyB0aGUgY29uY3JldGUgaW1w
bGVtZW50YXRpb24gb2YgaXQuCisKKyAgICAgICAgKiBIaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlz
dC5tbToKKyAgICAgICAgKC1bV2ViQmFja0ZvcndhcmRMaXN0IGluaXRdKToKKyAgICAgICAgKC1b
V2ViQmFja0ZvcndhcmRMaXN0IHNldFBhZ2VDYWNoZVNpemU6XSk6CisgICAgICAgICgtW1dlYkJh
Y2tGb3J3YXJkTGlzdCBwYWdlQ2FjaGVTaXplXSk6CisKIDIwMTAtMDctMDcgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24u
CkluZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0JKHJldmlzaW9u
IDYyNzI1KQorKysgV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2
YXRlLmgiCiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJWaWV3UHJp
dmF0ZS5oIgotI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZExpc3QuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQmFja0ZvcndhcmRMaXN0SW1wbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRl
bS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VDYWNo
ZS5oPgpAQCAtMTA5LDcgKzEwOSw3IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogCiAtIChpZClpbml0
CiB7Ci0gICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoQmFja0ZvcndhcmRMaXN0OkJhY2tGb3J3YXJk
TGlzdDo6Y3JlYXRlKDApXTsKKyAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhCYWNrRm9yd2FyZExp
c3Q6QmFja0ZvcndhcmRMaXN0SW1wbDo6Y3JlYXRlKDApXTsKIH0KIAogLSAodm9pZClkZWFsbG9j
CkBAIC0yOTMsMTIgKzI5MywxNCBAQCAtKE5TU3RyaW5nICopZGVzY3JpcHRpb24KIAogLSAodm9p
ZClzZXRQYWdlQ2FjaGVTaXplOihOU1VJbnRlZ2VyKXNpemUKIHsKLSAgICBba2l0KGNvcmUoc2Vs
ZiktPnBhZ2UoKSkgc2V0VXNlc1BhZ2VDYWNoZTpzaXplICE9IDBdOworICAgIEFTU0VSVChjb3Jl
KHNlbGYpLT5pc0JhY2tGb3J3YXJkTGlzdEltcGwoKSk7CisgICAgW2tpdChzdGF0aWNfY2FzdDxC
YWNrRm9yd2FyZExpc3RJbXBsKj4oY29yZShzZWxmKSktPnBhZ2UoKSkgc2V0VXNlc1BhZ2VDYWNo
ZTpzaXplICE9IDBdOwogfQogCiAtIChOU1VJbnRlZ2VyKXBhZ2VDYWNoZVNpemUKIHsKLSAgICBy
ZXR1cm4gW2tpdChjb3JlKHNlbGYpLT5wYWdlKCkpIHVzZXNQYWdlQ2FjaGVdID8gcGFnZUNhY2hl
KCktPmNhcGFjaXR5KCkgOiAwOworICAgIEFTU0VSVChjb3JlKHNlbGYpLT5pc0JhY2tGb3J3YXJk
TGlzdEltcGwoKSk7CisgICAgcmV0dXJuIFtraXQoc3RhdGljX2Nhc3Q8QmFja0ZvcndhcmRMaXN0
SW1wbCo+KGNvcmUoc2VsZikpLT5wYWdlKCkpIHVzZXNQYWdlQ2FjaGVdID8gcGFnZUNhY2hlKCkt
PmNhcGFjaXR5KCkgOiAwOwogfQogCiAtIChpbnQpYmFja0xpc3RDb3VudAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60826</attachid>
            <date>2010-07-07 19:38:33 -0700</date>
            <delta_ts>2010-07-07 19:49:49 -0700</delta_ts>
            <desc>Updated patch, don&apos;t break Qt.</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>58958</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDctMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxODI2CisgICAgICAg
IENvbnZlcnQgQmFja0ZvcndhcmRMaXN0IHRvIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgYW5kIGFk
ZCBCYWNrRm9yd2FyZExpc3RJbXBsCisgICAgICAgIGFzIHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRh
dGlvbiBvZiBpdC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmFja0ZvcndhcmRDb250cm9sbGVyOjpCYWNrRm9yd2FyZENvbnRyb2xsZXIp
OgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmg6CisgICAgICAgICog
aGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhpc3Rvcnkv
QmFja0ZvcndhcmRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3Q6On5C
YWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0Ojppc0Jh
Y2tGb3J3YXJkTGlzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0OjpC
YWNrRm9yd2FyZExpc3QpOgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5j
cHA6IENvcGllZCBmcm9tIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwLgorICAg
ICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmguCisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2Fy
ZExpc3RJbXBsOjppc0JhY2tGb3J3YXJkTGlzdEltcGwpOgorCiAyMDEwLTA2LTE4ICBNT1JJVEEg
SGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4g
VmFmYWkuCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDYyNzQyKQorKysgV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtODk5LDcgKzg5OSw3IEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCiAKICAgICBoaXN0b3J5L0JhY2tGb3J3
YXJkQ29udHJvbGxlci5jcHAKLSAgICBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAKKyAgICBo
aXN0b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuY3BwCiAgICAgaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHAKICAgICBoaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCiAgICAgaGlzdG9yeS9IaXN0b3J5SXRlbS5j
cHAKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDU0LDggKzEwNTQsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmggXAogCVdlYkNvcmUvaGlzdG9yeS9CYWNr
Rm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCBcCi0JV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJk
TGlzdC5jcHAgXAogCVdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuaCBcCisJV2ViQ29y
ZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuY3BwIFwKKwlXZWJDb3JlL2hpc3RvcnkvQmFj
a0ZvcndhcmRMaXN0SW1wbC5oIFwKIAlXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwIFwK
IAlXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuaCBcCiAJV2ViQ29yZS9oaXN0b3J5L0NhY2hl
ZEZyYW1lUGxhdGZvcm1EYXRhLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA2Mjc0MikKKysrIFdl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTMxNywyOSArMzE3LDYgQEAg
X19aTjdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjQwc2V0RG9tYWluUgogX19aTjdXZWJDb3JlMTRT
ZWN1cml0eU9yaWdpbjZjcmVhdGVFUktOU180S1VSTEVpCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5
T3JpZ2luN2NhbkxvYWRFUktOU180S1VSTEVSS05TXzZTdHJpbmdFUE5TXzhEb2N1bWVudEUKIF9f
Wk43V2ViQ29yZTE1QXJjaGl2ZVJlc291cmNlNmNyZWF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU18x
MlNoYXJlZEJ1ZmZlckVFRVJLTlNfNEtVUkxFUktOU182U3RyaW5nRVNBX1NBX1JLTlNfMTZSZXNv
dXJjZVJlc3BvbnNlRQotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMHJlbW92ZUl0ZW1F
UE5TXzExSGlzdG9yeUl0ZW1FCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDEwc2V0RW5h
YmxlZEViCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDExY3VycmVudEl0ZW1FdgotX19a
TjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMWZvcndhcmRJdGVtRXYKLV9fWk43V2ViQ29yZTE1
QmFja0ZvcndhcmRMaXN0MTFpdGVtQXRJbmRleEVpCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJk
TGlzdDExc2V0Q2FwYWNpdHlFaQotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMmNvbnRh
aW5zSXRlbUVQTlNfMTFIaXN0b3J5SXRlbUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0
MTNiYWNrTGlzdENvdW50RXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0MTZmb3J3YXJk
TGlzdENvdW50RXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0MTdiYWNrTGlzdFdpdGhM
aW1pdEVpUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xMUhpc3RvcnlJdGVtRUVFTG0wRUVF
Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDIwZm9yd2FyZExpc3RXaXRoTGltaXRFaVJO
M1dURjZWZWN0b3JJTlMxXzZSZWZQdHJJTlNfMTFIaXN0b3J5SXRlbUVFRUxtMEVFRQotX19aTjdX
ZWJDb3JlMTVCYWNrRm9yd2FyZExpc3Q1Y2xvc2VFdgotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2Fy
ZExpc3Q2Y2xvc2VkRXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0NmdvQmFja0V2Ci1f
X1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDdhZGRJdGVtRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzExSGlzdG9yeUl0ZW1FRUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0N2VuYWJsZWRF
dgotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3Q3ZW50cmllc0V2Ci1fX1pON1dlYkNvcmUx
NUJhY2tGb3J3YXJkTGlzdDhiYWNrSXRlbUV2Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlz
dDhjYXBhY2l0eUV2Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDhnb1RvSXRlbUVQTlNf
MTFIaXN0b3J5SXRlbUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0OWdvRm9yd2FyZEV2
Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdEMxRVBOU180UGFnZUUKLV9fWk43V2ViQ29y
ZTE1QmFja0ZvcndhcmRMaXN0RDFFdgogX19aTjdXZWJDb3JlMTVET01XcmFwcGVyV29ybGQxNXVu
cmVnaXN0ZXJXb3JsZEV2CiBfX1pON1dlYkNvcmUxNURPTVdyYXBwZXJXb3JsZEQxRXYKIF9fWk43
V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMTJkZWxldGVPcmlnaW5FUE5TXzE0U2VjdXJpdHlPcmln
aW5FCkBAIC00MjIsNiArMzk5LDcgQEAgX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVy
MTZyZXN1bQogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTdzdXNwZW5kQW5pbWF0
aW9uc0VQTlNfOERvY3VtZW50RQogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMjBw
YXVzZUFuaW1hdGlvbkF0VGltZUVQTlNfMTJSZW5kZXJPYmplY3RFUktOU182U3RyaW5nRWQKIF9f
Wk43V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJvbGxlcjIxcGF1c2VUcmFuc2l0aW9uQXRUaW1lRVBO
U18xMlJlbmRlck9iamVjdEVSS05TXzZTdHJpbmdFZAorX19aTjdXZWJDb3JlMTlCYWNrRm9yd2Fy
ZExpc3RJbXBsQzFFUE5TXzRQYWdlRQogX19aTjdXZWJDb3JlMTlDU1NTdHlsZURlY2xhcmF0aW9u
MTFzZXRQcm9wZXJ0eUVSS05TXzZTdHJpbmdFUzNfUmkKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9y
Q29udHJvbGxlcjM0aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2CiBfX1pON1dl
YkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxMHNldEZvY3VzZWRFYgpAQCAtNTA2LDcgKzQ4NCw2
IEBAIF9fWk43V2ViQ29yZTRLVVJMQzFFTlNfMThQYXJzZWRVUkxTdHJpbmcKIF9fWk43V2ViQ29y
ZTRLVVJMQzFFUDVOU1VSTAogX19aTjdXZWJDb3JlNEtVUkxDMUVQSzdfX0NGVVJMCiBfX1pON1dl
YkNvcmU0S1VSTEMxRVJLUzBfUktOU182U3RyaW5nRQotX19aTjdXZWJDb3JlNGNvcmVFUDIwTlNV
UkxQcm90ZWN0aW9uU3BhY2UKIF9fWk43V2ViQ29yZTROb2RlMTByZW5kZXJSZWN0RVBiCiBfX1pO
N1dlYkNvcmU0Tm9kZTE3c3RvcElnbm9yaW5nTGVha3NFdgogX19aTjdXZWJDb3JlNE5vZGUxOHN0
YXJ0SWdub3JpbmdMZWFrc0V2CkBAIC01MzMsNiArNTEwLDcgQEAgX19aTjdXZWJDb3JlNFBhZ2U5
Z29Gb3J3YXJkRXYKIF9fWk43V2ViQ29yZTRQYWdlOWluaXRHcm91cEV2CiBfX1pON1dlYkNvcmU0
UGFnZUMxRVBOU18xMkNocm9tZUNsaWVudEVQTlNfMTdDb250ZXh0TWVudUNsaWVudEVQTlNfMTJF
ZGl0b3JDbGllbnRFUE5TXzEwRHJhZ0NsaWVudEVQTlNfMTVJbnNwZWN0b3JDbGllbnRFUE5TXzE4
UGx1Z2luSGFsdGVyQ2xpZW50RVBOU18yN0dlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudEVQTlNf
MjNEZXZpY2VPcmllbnRhdGlvbkNsaWVudEVQTlNfMjdCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGll
bnRFCiBfX1pON1dlYkNvcmU0UGFnZUQxRXYKK19fWk43V2ViQ29yZTRjb3JlRVAyME5TVVJMUHJv
dGVjdGlvblNwYWNlCiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pT
RE9NR2xvYmFsT2JqZWN0RVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FCiBfX1pON1dlYkNvcmU1
Q2FjaGUxMXNldERpc2FibGVkRWIKIF9fWk43V2ViQ29yZTVDYWNoZTEzZ2V0U3RhdGlzdGljc0V2
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5MCw4ICsxMzkwLDkgQEAKICAgICAgICAgICAgICdoaXN0b3J5L0JhY2tG
b3J3YXJkQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRD
b250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVy
Q2xpZW50LmgnLAotICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcCcsCiAg
ICAgICAgICAgICAnaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuaCcsCisgICAgICAgICAgICAnaGlz
dG9yeS9CYWNrRm9yd2FyZExpc3RJbXBsLmNwcCcsCisgICAgICAgICAgICAnaGlzdG9yeS9CYWNr
Rm9yd2FyZExpc3RJbXBsLmgnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcCcsCiAg
ICAgICAgICAgICAnaGlzdG9yeS9DYWNoZWRGcmFtZS5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjI3NDIp
CisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAwLDcg
QEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCBcCiAgICAgZWRp
dGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIFwKICAgICBoaXN0b3J5L0Jh
Y2tGb3J3YXJkQ29udHJvbGxlci5jcHAgXAotICAgIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNw
cCBcCisgICAgaGlzdG9yeS9CYWNrRm9yd2FyZExpc3RJbXBsLmNwcCBcCiAgICAgaGlzdG9yeS9D
YWNoZWRGcmFtZS5jcHAgXAogICAgIGhpc3RvcnkvQ2FjaGVkUGFnZS5jcHAgXAogICAgIGhpc3Rv
cnkvSGlzdG9yeUl0ZW0uY3BwIFwKQEAgLTEzNTQsNiArMTM1NCw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIGVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmggXAogICAgIGhpc3Rv
cnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmggXAogICAgIGhpc3RvcnkvQmFja0ZvcndhcmRDb250
cm9sbGVyQ2xpZW50LmggXAorICAgIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oIFwKICAg
ICBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5oIFwKICAgICBoaXN0b3J5L0NhY2hlZEZyYW1lLmgg
XAogICAgIGhpc3RvcnkvQ2FjaGVkUGFnZS5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OTQ2NSwxMSArNDk0NjUsMTUgQEAK
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caGlz
dG9yeVxCYWNrRm9yd2FyZExpc3QuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGhpc3Rvcnlc
QmFja0ZvcndhcmRMaXN0LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxoaXN0b3J5XEJhY2tGb3J3YXJkTGlzdC5oIg0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGhpc3RvcnlcQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxoaXN0b3J5XEJhY2tGb3J3
YXJkTGlzdEltcGwuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2Mjc0MikK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTE0LDcgKzExMTQsNiBAQAogCQk1MTcyMUZEMzExRDI3RUYyMDA2MzhCNDIgLyog
SlNCZWZvcmVQcm9jZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNzIxRkQxMTFEMjdFRjIwMDYzOEI0MiAvKiBKU0JlZm9yZVByb2Nlc3NF
dmVudC5oICovOyB9OwogCQk1MTcyMjA0QjExRDI5NjA1MDA2MzhCNDIgLyogQmVmb3JlUHJvY2Vz
c0V2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNzIyMDRBMTFEMjk2MDUwMDYzOEI0MiAvKiBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwICovOyB9
OwogCQk1MTc0MUQwRjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwQjBCMDcyNTlB
MDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE3NDFEMTAwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tG
b3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTc0MUQwQzBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLzsg
fTsKIAkJNTE3NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwRDBCMDcyNTlBMDBF
RDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MTc0MUQxMjBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NDFE
MEUwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLzsgfTsKIAkJNTE3NEUyMEEx
MEExRjQ0RjAwRjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzRFMjA4MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BT
dGF0ZUV2ZW50LmggKi87IH07CkBAIC00Njc5LDkgKzQ2NzgsMTEgQEAKIAkJQkNBODQ2RDYwREM2
N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBODQ2RDQwREM2N0EzNTAwMjZDMzA5IC8qIFJlbmRl
clJlcGxpY2EuY3BwICovOyB9OwogCQlCQ0E4NDZENzBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVy
UmVwbGljYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNBODQ2RDUwREM2N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2EuaCAqLzsgfTsKIAkJQkNB
ODVBMTAwQzNBRUFGNDAwNkY4MzA4IC8qIERPTVNWR051bWJlckludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4NUEwRjBDM0FFQUY0MDA2
RjgzMDggLyogRE9NU1ZHTnVtYmVySW50ZXJuYWwuaCAqLzsgfTsKLQkJQkNBOEM4MUUxMUUzRDM2
OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBOEM4MUMxMUUzRDM2OTAwODEyRkI3IC8qIEJh
Y2tGb3J3YXJkQ29udHJvbGxlci5oICovOyB9OworCQlCQ0E4QzgxRTExRTNEMzY5MDA4MTJGQjcg
LyogQmFja0ZvcndhcmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0E4QzgxQzExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRD
b250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkNBOEM4MUYxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4Qzgx
RDExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJ
QkNBOEM4MzExMUUzRDUzMjAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBOEM4MzAx
MUUzRDUzMjAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDQThDQTVGMTFFNEU2
RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDQTVEMTFFNEU2RDEwMDgxMkZCNyAvKiBC
YWNrRm9yd2FyZExpc3RJbXBsLmNwcCAqLzsgfTsKKwkJQkNBOENBNjAxMUU0RTZEMTAwODEyRkI3
IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQThDQTVFMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExp
c3RJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FBOTBDMjBBN0VCQTYwMDA4QjEy
MjkgLyogU2Nyb2xsYmFyLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkMxMDcyOTIxQTAwQzBDOEEzIC8q
IFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkQxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJD
b250ZW50VVJMUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNBQ0YzQkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVy
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02
ODIzLDcgKzY4MjQsNiBAQAogCQk1MTcyMUZEMTExRDI3RUYyMDA2MzhCNDIgLyogSlNCZWZvcmVQ
cm9jZXNzRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCZWZvcmVQ
cm9jZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3MjIwNEExMUQy
OTYwNTAwNjM4QjQyIC8qIEJlZm9yZVByb2Nlc3NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTc0MUQwQjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTc0MUQwQzBCMDcyNTlBMDBFRDQ0MkMg
LyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEJhY2tGb3J3YXJkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NzQxRDBEMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGlzdG9yeUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE3NDFEMEUwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXN0b3J5SXRlbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzRFMjA4MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0
ZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcFN0YXRlRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjg1LDYgKzEwMjg1LDggQEAKIAkJ
QkNBOEM4MUMxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrRm9yd2FyZENvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBOEM4MUQxMUUzRDM2OTAwODEyRkI3IC8qIEJh
Y2tGb3J3YXJkQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0E4QzgzMDExRTNENTMyMDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkQ29udHJv
bGxlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0E4Q0E1RDExRTRF
NkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkNBOENBNUUxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJk
TGlzdEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0ZvcndhcmRM
aXN0SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FBOTBDMjBBN0VCQTYw
MDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTY3JvbGxiYXIuY3BwOyBwYXRoID0gcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDsgc291
cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQlCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyog
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDQUNGM0JCMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRlcm4u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNvbnRlbnRVUkxQYXR0ZXJu
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTg4Miw4ICsxMTg4NCw5IEBACiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQk5MzYzQjYyOTBGOEU4RkUwMDA4MDM4MTAgLyogY2YgKi8sCiAJ
CQkJNTE2MEY0OTIwQjBBQTcxNTAwQzFEMkFGIC8qIG1hYyAqLywKLQkJCQk1MTc0MUQwQzBCMDcy
NTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLywKIAkJCQk1MTc0MUQwQjBCMDcy
NTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggKi8sCisJCQkJQkNBOENBNUQxMUU0RTZE
MTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwICovLAorCQkJCUJDQThDQTVFMTFF
NEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmggKi8sCiAJCQkJQkNBOEM4MUQx
MUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJQkNB
OEM4MUMxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oICovLAogCQkJ
CUJDQThDODMwMTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQu
aCAqLywKQEAgLTE5NzI0LDYgKzE5NzI3LDcgQEAKIAkJCQk5N0VGNTYxMTExRTQwNzgzMDA3RTAy
NkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQThDODFF
MTFFM0QzNjkwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQThDODMxMTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQThDQTYwMTFFNEU2RDEwMDgxMkZCNyAvKiBC
YWNrRm9yd2FyZExpc3RJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMDczLDcgKzIwMDc3LDYg
QEAKIAkJCQlBOENGRjA1MDBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTI5QTgxMjM3MEZCQjlDMUQwMDUxMDI5MyAvKiBBWE9iamVjdENh
Y2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5QTgxMjRCMEZCQjlDQTkwMDUxMDI5MyAvKiBB
WE9iamVjdENhY2hlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3NDFEMTAwQjA3MjU5QTAw
RUQ0NDJDIC8qIEJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzEyNEVF
NzBDMjY0MUNEMDA5RTIzNDkgLyogQmFySW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMz
REEyMTBEMDA2QzFEMDBFRjZGMjYgLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
NzIyMDRCMTFEMjk2MDUwMDYzOEI0MiAvKiBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yMjExMCw2ICsyMjExMyw3IEBACiAJCQkJQkNBOEM4MUYxMUUzRDM2OTAwODEy
RkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjRG
NUZGQjExQ0JEMkUxMDBBMTg2QkYgLyogUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3RUY1NjEwMTFFNDA3ODMwMDdFMDI2RiAvKiBIVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQ0E4Q0E1RjExRTRFNkQxMDA4MTJGQjcg
LyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUv
aGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2Mjc0MikKKysrIFdl
YkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQu
aCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExp
c3RJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNyArMzcsNyBAQCBCYWNr
Rm9yd2FyZENvbnRyb2xsZXI6OkJhY2tGb3J3YXJkQ29udHJvCiAgICAgLCBtX2NsaWVudChjbGll
bnQpCiB7CiAgICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgbV9saXN0ID0gQmFja0ZvcndhcmRM
aXN0OjpjcmVhdGUocGFnZSk7CisgICAgICAgIG1fbGlzdCA9IEJhY2tGb3J3YXJkTGlzdEltcGw6
OmNyZWF0ZShwYWdlKTsKICAgICBlbHNlCiAgICAgICAgIG1fbGlzdCA9IG1fY2xpZW50LT5jcmVh
dGVCYWNrRm9yd2FyZExpc3QoKTsKIH0KSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2Fy
ZENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRD
b250cm9sbGVyLmgJKHJldmlzaW9uIDYyNzQyKQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUGFnZTsKIGNsYXNzIEJhY2tGb3J3YXJkQ29udHJvbGxl
ckNsaWVudDsKIAogY2xhc3MgQmFja0ZvcndhcmRDb250cm9sbGVyIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCShyZXZpc2lvbiA2Mjc0
MikKKysrIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJC
YWNrRm9yd2FyZExpc3QuaCIKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkhpc3Rv
cnlJdGVtLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQYWdlQ2FjaGUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgRGVmYXVsdENhcGFjaXR5ID0gMTAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IE5vQ3VycmVudEl0ZW1JbmRleCA9IFVJTlRfTUFYOwotCi1CYWNrRm9yd2FyZExpc3Q6OkJhY2tG
b3J3YXJkTGlzdChQYWdlKiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX2N1cnJl
bnQoTm9DdXJyZW50SXRlbUluZGV4KQotICAgICwgbV9jYXBhY2l0eShEZWZhdWx0Q2FwYWNpdHkp
Ci0gICAgLCBtX2Nsb3NlZCh0cnVlKQotICAgICwgbV9lbmFibGVkKHRydWUpCi17Ci19Ci0KLUJh
Y2tGb3J3YXJkTGlzdDo6fkJhY2tGb3J3YXJkTGlzdCgpCi17Ci0gICAgQVNTRVJUKG1fY2xvc2Vk
KTsKLX0KLQotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5
SXRlbT4gcHJwSXRlbSkKLXsKLSAgICBBU1NFUlQocHJwSXRlbSk7Ci0gICAgaWYgKG1fY2FwYWNp
dHkgPT0gMCB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVG9z
cyBhbnl0aGluZyBpbiB0aGUgZm9yd2FyZCBsaXN0ICAgIAotICAgIGlmIChtX2N1cnJlbnQgIT0g
Tm9DdXJyZW50SXRlbUluZGV4KSB7Ci0gICAgICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBtX2N1
cnJlbnQgKyAxOwotICAgICAgICB3aGlsZSAobV9lbnRyaWVzLnNpemUoKSA+IHRhcmdldFNpemUp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0
KCk7Ci0gICAgICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgbV9l
bnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShp
dGVtLmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRvc3MgdGhlIGZpcnN0IGl0
ZW0gaWYgdGhlIGxpc3QgaXMgZ2V0dGluZyB0b28gYmlnLCBhcyBsb25nIGFzIHdlJ3JlIG5vdCB1
c2luZyBpdAotICAgIC8vIChvciBldmVuIGlmIHdlIGFyZSwgaWYgd2Ugb25seSB3YW50IDEgZW50
cnkpLgotICAgIGlmIChtX2VudHJpZXMuc2l6ZSgpID09IG1fY2FwYWNpdHkgJiYgKG1fY3VycmVu
dCAhPSAwIHx8IG1fY2FwYWNpdHkgPT0gMSkpIHsKLSAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVt
PiBpdGVtID0gbV9lbnRyaWVzWzBdOwotICAgICAgICBtX2VudHJpZXMucmVtb3ZlKDApOwotICAg
ICAgICBtX2VudHJ5SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1v
dmUoaXRlbS5nZXQoKSk7Ci0gICAgICAgIG1fY3VycmVudC0tOwotICAgICAgICBpZiAobV9wYWdl
KQotICAgICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5k
aXNwYXRjaERpZFJlbW92ZUJhY2tGb3J3YXJkSXRlbShpdGVtLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICBtX2VudHJ5SGFzaC5hZGQocHJwSXRlbS5nZXQoKSk7Ci0gICAgbV9lbnRyaWVzLmluc2VydCht
X2N1cnJlbnQgKyAxLCBwcnBJdGVtKTsKLSAgICBtX2N1cnJlbnQrKzsKLSAgICBpZiAobV9wYWdl
KQotICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3Bh
dGNoRGlkQWRkQmFja0ZvcndhcmRJdGVtKGN1cnJlbnRJdGVtKCkpOwotfQotCi12b2lkIEJhY2tG
b3J3YXJkTGlzdDo6Z29CYWNrKCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50ID4gMCk7Ci0gICAg
aWYgKG1fY3VycmVudCA+IDApIHsKLSAgICAgICAgbV9jdXJyZW50LS07Ci0gICAgICAgIGlmICht
X3BhZ2UpCi0gICAgICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmRpc3BhdGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJbmRleCgpOwotICAgIH0KLX0KLQotdm9p
ZCBCYWNrRm9yd2FyZExpc3Q6OmdvRm9yd2FyZCgpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudCA8
IG1fZW50cmllcy5zaXplKCkgLSAxKTsKLSAgICBpZiAobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNp
emUoKSAtIDEpIHsKLSAgICAgICAgbV9jdXJyZW50Kys7Ci0gICAgICAgIGlmIChtX3BhZ2UpCi0g
ICAgICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3Bh
dGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJbmRleCgpOwotICAgIH0KLX0KLQotdm9pZCBCYWNrRm9y
d2FyZExpc3Q6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQotewotICAgIGlmICghbV9lbnRy
aWVzLnNpemUoKSB8fCAhaXRlbSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNp
Z25lZCBpbnQgaW5kZXggPSAwOwotICAgIGZvciAoOyBpbmRleCA8IG1fZW50cmllcy5zaXplKCk7
ICsraW5kZXgpCi0gICAgICAgIGlmIChtX2VudHJpZXNbaW5kZXhdID09IGl0ZW0pCi0gICAgICAg
ICAgICBicmVhazsKLSAgICBpZiAoaW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKSB7Ci0gICAgICAg
IG1fY3VycmVudCA9IGluZGV4OwotICAgICAgICBpZiAobV9wYWdlKQotICAgICAgICAgICAgbV9w
YWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJh
Y2tGb3J3YXJkSW5kZXgoKTsKLSAgICB9Ci19Ci0KLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExp
c3Q6OmJhY2tJdGVtKCkKLXsKLSAgICBpZiAobV9jdXJyZW50ICYmIG1fY3VycmVudCAhPSBOb0N1
cnJlbnRJdGVtSW5kZXgpCi0gICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50IC0gMV0u
Z2V0KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6
OmN1cnJlbnRJdGVtKCkKLXsKLSAgICBpZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRl
eCkKLSAgICAgICAgcmV0dXJuIG1fZW50cmllc1ttX2N1cnJlbnRdLmdldCgpOwotICAgIHJldHVy
biAwOwotfQotCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSgpCi17
Ci0gICAgaWYgKG1fZW50cmllcy5zaXplKCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUo
KSAtIDEpCi0gICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0KCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdFdpdGhMaW1p
dChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQotewotICAgIGxpc3QuY2xlYXIo
KTsKLSAgICBpZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkgewotICAgICAgICB1
bnNpZ25lZCBmaXJzdCA9IG1heCgoaW50KW1fY3VycmVudCAtIGxpbWl0LCAwKTsKLSAgICAgICAg
Zm9yICg7IGZpcnN0IDwgbV9jdXJyZW50OyArK2ZpcnN0KQotICAgICAgICAgICAgbGlzdC5hcHBl
bmQobV9lbnRyaWVzW2ZpcnN0XSk7Ci0gICAgfQotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6
Zm9yd2FyZExpc3RXaXRoTGltaXQoaW50IGxpbWl0LCBIaXN0b3J5SXRlbVZlY3RvciYgbGlzdCkK
LXsKLSAgICBBU1NFUlQobGltaXQgPiAtMSk7Ci0gICAgbGlzdC5jbGVhcigpOwotICAgIGlmICgh
bV9lbnRyaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNpZ25l
ZCBsYXN0RW50cnkgPSBtX2VudHJpZXMuc2l6ZSgpIC0gMTsKLSAgICBpZiAobV9jdXJyZW50IDwg
bGFzdEVudHJ5KSB7Ci0gICAgICAgIGludCBsYXN0ID0gbWluKG1fY3VycmVudCArIGxpbWl0LCBs
YXN0RW50cnkpOwotICAgICAgICBsaW1pdCA9IG1fY3VycmVudCArIDE7Ci0gICAgICAgIGZvciAo
OyBsaW1pdCA8PSBsYXN0OyArK2xpbWl0KQotICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRy
aWVzW2xpbWl0XSk7Ci0gICAgfQotfQotCi1pbnQgQmFja0ZvcndhcmRMaXN0OjpjYXBhY2l0eSgp
Ci17Ci0gICAgcmV0dXJuIG1fY2FwYWNpdHk7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0Ojpz
ZXRDYXBhY2l0eShpbnQgc2l6ZSkKLXsgICAgCi0gICAgd2hpbGUgKHNpemUgPCAoaW50KW1fZW50
cmllcy5zaXplKCkpIHsKLSAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRy
aWVzLmxhc3QoKTsKLSAgICAgICAgbV9lbnRyaWVzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgbV9l
bnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0u
Z2V0KCkpOwotICAgIH0KLQotICAgIGlmICghc2l6ZSkKLSAgICAgICAgbV9jdXJyZW50ID0gTm9D
dXJyZW50SXRlbUluZGV4OwotICAgIGVsc2UgaWYgKG1fY3VycmVudCA+IG1fZW50cmllcy5zaXpl
KCkgLSAxKSB7Ci0gICAgICAgIG1fY3VycmVudCA9IG1fZW50cmllcy5zaXplKCkgLSAxOwotICAg
ICAgICBpZiAobV9wYWdlKQotICAgICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVy
KCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKTsKLSAgICB9
Ci0gICAgbV9jYXBhY2l0eSA9IHNpemU7Ci19Ci0KLWJvb2wgQmFja0ZvcndhcmRMaXN0OjplbmFi
bGVkKCkKLXsKLSAgICByZXR1cm4gbV9lbmFibGVkOwotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlz
dDo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9lbmFibGVkID0gZW5hYmxlZDsK
LSAgICBpZiAoIWVuYWJsZWQpIHsKLSAgICAgICAgaW50IGNhcGFjaXR5ID0gbV9jYXBhY2l0eTsK
LSAgICAgICAgc2V0Q2FwYWNpdHkoMCk7Ci0gICAgICAgIHNldENhcGFjaXR5KGNhcGFjaXR5KTsK
LSAgICB9Ci19Ci0KLWludCBCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKQotewotICAg
IHJldHVybiBtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4ID8gMCA6IG1fY3VycmVudDsK
LX0KLQotaW50IEJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RDb3VudCgpCi17Ci0gICAgcmV0
dXJuIG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggPyAwIDogKGludCltX2VudHJpZXMu
c2l6ZSgpIC0gKG1fY3VycmVudCArIDEpOwotfQotCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRM
aXN0OjppdGVtQXRJbmRleChpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdp
dGhvdXQgZG9pbmcgbWF0aCBvbiBpbmRleCB0byBhdm9pZCBvdmVyZmxvdy4KLSAgICBpZiAoaW5k
ZXggPCAtKGludCltX2N1cnJlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGlmIChp
bmRleCA+IGZvcndhcmRMaXN0Q291bnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAot
ICAgIHJldHVybiBtX2VudHJpZXNbaW5kZXggKyBtX2N1cnJlbnRdLmdldCgpOwotfQotCi1IaXN0
b3J5SXRlbVZlY3RvciYgQmFja0ZvcndhcmRMaXN0OjplbnRyaWVzKCkKLXsKLSAgICByZXR1cm4g
bV9lbnRyaWVzOwotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJdGVtKQotewotICAgIEFTU0VSVChuZXdJdGVtKTsKLSAg
ICBBU1NFUlQobmV3SXRlbS0+c3RhdGVPYmplY3QoKSk7Ci0gICAgCi0gICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBjdXJyZW50ID0gY3VycmVudEl0ZW0oKTsKLSAgICBBU1NFUlQoY3VycmVudCk7Ci0K
LSAgICBhZGRJdGVtKG5ld0l0ZW0pOwotICAgIAotICAgIGlmICghY3VycmVudC0+c3RhdGVPYmpl
Y3QoKSkKLSAgICAgICAgY3VycmVudC0+c2V0U3RhdGVPYmplY3QoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoKSk7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9zZSgpCi17Ci0g
ICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKG1fZW50cmllc1tpXS5nZXQo
KSk7Ci0gICAgbV9lbnRyaWVzLmNsZWFyKCk7Ci0gICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKLSAg
ICBtX3BhZ2UgPSAwOwotICAgIG1fY2xvc2VkID0gdHJ1ZTsKLX0KLQotYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNsb3NlZCgpCi17Ci0gICAgcmV0dXJuIG1fY2xvc2VkOwotfQotCi12b2lkIEJhY2tG
b3J3YXJkTGlzdDo6cmVtb3ZlSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKLXsKLSAgICBpZiAoIWl0
ZW0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9lbnRyaWVzLnNpemUoKTsgKytpKQotICAgICAgICBpZiAobV9lbnRyaWVzW2ldID09IGl0ZW0p
IHsKLSAgICAgICAgICAgIG1fZW50cmllcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBtX2VudHJ5
SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVu
dEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQgPCBpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKG1fY3VycmVudCA+IGkpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50LS07
Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2Vu
dHJpZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPj0gY291bnQpCi0g
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudCA9IGNvdW50ID8gY291bnQgLSAxIDogTm9DdXJy
ZW50SXRlbUluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLX0KLQotYm9vbCBCYWNrRm9yd2FyZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSog
ZW50cnkpCi17Ci0gICAgcmV0dXJuIG1fZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKLX0KLQot
I2lmIEVOQUJMRShXTUwpCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJXTUxQYWdlSGlzdG9y
eSgpCi17Ci0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJl
bnRJdGVtKCk7Ci0KLSAgICBpbnQgc2l6ZSA9IG1fZW50cmllcy5zaXplKCk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9l
bnRyaWVzW2ldLmdldCgpKTsKLQotICAgIG1fZW50cmllcy5jbGVhcigpOwotICAgIG1fZW50cnlI
YXNoLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OwotCi0gICAg
Ly8gU3BlYzogVGhlIGhpc3Rvcnkgc3RhY2sgbWF5IGJlIHJlc2V0IHRvIGEgc3RhdGUgd2hlcmUg
aXQgb25seSBjb250YWlucyB0aGUgY3VycmVudCBjYXJkLgotICAgIGFkZEl0ZW0oY3VycmVudEl0
ZW0pOwotfQotI2VuZGlmCi0KLX07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5
L0JhY2tGb3J3YXJkTGlzdC5oCShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTkgKzMwLDEzIEBACiAKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIaXN0b3J5SXRlbTsKLWNs
YXNzIFBhZ2U7Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci1jbGFzcyBTdHJpbmc7CiAK
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRlbVZlY3RvcjsK
LXR5cGVkZWYgSGFzaFNldDxSZWZQdHI8SGlzdG9yeUl0ZW0+ID4gSGlzdG9yeUl0ZW1IYXNoU2V0
OwogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAvLyBJbiB0aGUgQ2hyb21pdW0gcG9ydCwgdGhl
IGJhY2svZm9yd2FyZCBsaXN0IGlzIG1hbmFnZWQgZXh0ZXJuYWxseS4KQEAgLTYyLDY1ICs1Niw1
NiBAQCBwdWJsaWM6CiAKIGNsYXNzIEJhY2tGb3J3YXJkTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVk
PEJhY2tGb3J3YXJkTGlzdD4gewogcHVibGljOiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNr
Rm9yd2FyZExpc3Q+IGNyZWF0ZShQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQmFj
a0ZvcndhcmRMaXN0KHBhZ2UpKTsgfQotICAgIH5CYWNrRm9yd2FyZExpc3QoKTsKKyAgICB2aXJ0
dWFsIH5CYWNrRm9yd2FyZExpc3QoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNCYWNrRm9yd2FyZExpc3RJbXBsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQogICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIg
bWV0aG9kcy4gCi0gICAgdm9pZCBzZXRDbGllbnQoQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBjbGll
bnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KEJh
Y2tGb3J3YXJkTGlzdENsaWVudCopID0gMDsKICNlbmRpZgotICAgIAotICAgIFBhZ2UqIHBhZ2Uo
KSB7IHJldHVybiBtX3BhZ2U7IH0KLSAgICAKLSAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4pOwotICAgIHZvaWQgZ29CYWNrKCk7Ci0gICAgdm9pZCBnb0ZvcndhcmQoKTsK
LSAgICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
SXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnb0Jh
Y2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdvRm9yd2FyZCgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qKSA9IDA7CiAgICAgICAgIAotICAgIEhpc3RvcnlJ
dGVtKiBiYWNrSXRlbSgpOwotICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSgpOwotICAgIEhp
c3RvcnlJdGVtKiBmb3J3YXJkSXRlbSgpOwotICAgIEhpc3RvcnlJdGVtKiBpdGVtQXRJbmRleChp
bnQpOwotCi0gICAgdm9pZCBiYWNrTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7Ci0gICAgdm9pZCBmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7Ci0KLSAgICBpbnQgY2FwYWNpdHkoKTsKLSAgICB2b2lkIHNldENhcGFjaXR5KGludCk7Ci0g
ICAgYm9vbCBlbmFibGVkKCk7Ci0gICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwotICAgIGludCBi
YWNrTGlzdENvdW50KCk7Ci0gICAgaW50IGZvcndhcmRMaXN0Q291bnQoKTsKLSAgICBib29sIGNv
bnRhaW5zSXRlbShIaXN0b3J5SXRlbSopOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGJhY2tJ
dGVtKCkgPSAwOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtKCkgPSAwOwor
ICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGZvcndhcmRJdGVtKCkgPSAwOworICAgIHZpcnR1YWwg
SGlzdG9yeUl0ZW0qIGl0ZW1BdEluZGV4KGludCkgPSAwOwogCi0gICAgdm9pZCBjbG9zZSgpOwot
ICAgIGJvb2wgY2xvc2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGJhY2tMaXN0V2l0aExpbWl0KGlu
dCwgSGlzdG9yeUl0ZW1WZWN0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZvcndhcmRMaXN0
V2l0aExpbWl0KGludCwgSGlzdG9yeUl0ZW1WZWN0b3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIGlu
dCBjYXBhY2l0eSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FwYWNpdHkoaW50KSA9IDA7
CisgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEVu
YWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgaW50IGJhY2tMaXN0Q291bnQoKSA9IDA7Cisg
ICAgdmlydHVhbCBpbnQgZm9yd2FyZExpc3RDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
Y29udGFpbnNJdGVtKEhpc3RvcnlJdGVtKikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsb3Nl
KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjbG9zZWQoKSA9IDA7CiAgICAgCi0gICAgdm9pZCBy
ZW1vdmVJdGVtKEhpc3RvcnlJdGVtKik7Ci0gICAgSGlzdG9yeUl0ZW1WZWN0b3ImIGVudHJpZXMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShIaXN0b3J5SXRlbSopICA9IDA7CisgICAg
dmlydHVhbCBIaXN0b3J5SXRlbVZlY3RvciYgZW50cmllcygpICA9IDA7CiAgICAgCi0gICAgdm9p
ZCBwdXNoU3RhdGVJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHVzaFN0YXRlSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPikgPSAwOwogCiAjaWYgRU5B
QkxFKFdNTCkKLSAgICB2b2lkIGNsZWFyV01MUGFnZUhpc3RvcnkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJXTUxQYWdlSGlzdG9yeSgpICA9IDA7CiAjZW5kaWYKIAotcHJpdmF0ZToKLSAgICBC
YWNrRm9yd2FyZExpc3QoUGFnZSopOwotICAgIAotICAgIFBhZ2UqIG1fcGFnZTsKLSNpZiBQTEFU
Rk9STShDSFJPTUlVTSkgCi0gICAgQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBtX2NsaWVudDsKLSNl
bHNlCi0gICAgSGlzdG9yeUl0ZW1WZWN0b3IgbV9lbnRyaWVzOwotICAgIEhpc3RvcnlJdGVtSGFz
aFNldCBtX2VudHJ5SGFzaDsKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnQ7Ci0jZW5kaWYKLSAgICB1
bnNpZ25lZCBtX2NhcGFjaXR5OwotICAgIGJvb2wgbV9jbG9zZWQ7Ci0gICAgYm9vbCBtX2VuYWJs
ZWQ7Citwcm90ZWN0ZWQ6CisgICAgQmFja0ZvcndhcmRMaXN0KCkKKyAgICB7CisgICAgfQogfTsK
ICAgICAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYKKyNlbmRpZiAvLyBCYWNrRm9yd2FyZExpc3RfaApJbmRleDogV2ViQ29yZS9oaXN0b3J5
L0JhY2tGb3J3YXJkTGlzdEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZExpc3RJbXBsLmNwcAkocmV2aXNpb24gNjI2NzQpCShmcm9tIFdlYkNvcmUvaGlz
dG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwOjYyNjc0KQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tG
b3J3YXJkTGlzdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKworI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKKyNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgRGVmYXVsdENhcGFj
aXR5ID0gMTAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE5vQ3VycmVudEl0ZW1JbmRleCA9IFVJ
TlRfTUFYOworCitCYWNrRm9yd2FyZExpc3Q6OkJhY2tGb3J3YXJkTGlzdChQYWdlKiBwYWdlKQor
ICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2N1cnJlbnQoTm9DdXJyZW50SXRlbUluZGV4KQor
ICAgICwgbV9jYXBhY2l0eShEZWZhdWx0Q2FwYWNpdHkpCisgICAgLCBtX2Nsb3NlZCh0cnVlKQor
ICAgICwgbV9lbmFibGVkKHRydWUpCit7Cit9CisKK0JhY2tGb3J3YXJkTGlzdDo6fkJhY2tGb3J3
YXJkTGlzdCgpCit7CisgICAgQVNTRVJUKG1fY2xvc2VkKTsKK30KKwordm9pZCBCYWNrRm9yd2Fy
ZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSkKK3sKKyAgICBB
U1NFUlQocHJwSXRlbSk7CisgICAgaWYgKG1fY2FwYWNpdHkgPT0gMCB8fCAhbV9lbmFibGVkKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVG9zcyBhbnl0aGluZyBpbiB0aGUgZm9yd2Fy
ZCBsaXN0ICAgIAorICAgIGlmIChtX2N1cnJlbnQgIT0gTm9DdXJyZW50SXRlbUluZGV4KSB7Cisg
ICAgICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBtX2N1cnJlbnQgKyAxOworICAgICAgICB3aGls
ZSAobV9lbnRyaWVzLnNpemUoKSA+IHRhcmdldFNpemUpIHsKKyAgICAgICAgICAgIFJlZlB0cjxI
aXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0KCk7CisgICAgICAgICAgICBtX2VudHJp
ZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwor
ICAgICAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShpdGVtLmdldCgpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFRvc3MgdGhlIGZpcnN0IGl0ZW0gaWYgdGhlIGxpc3QgaXMgZ2V0dGlu
ZyB0b28gYmlnLCBhcyBsb25nIGFzIHdlJ3JlIG5vdCB1c2luZyBpdAorICAgIC8vIChvciBldmVu
IGlmIHdlIGFyZSwgaWYgd2Ugb25seSB3YW50IDEgZW50cnkpLgorICAgIGlmIChtX2VudHJpZXMu
c2l6ZSgpID09IG1fY2FwYWNpdHkgJiYgKG1fY3VycmVudCAhPSAwIHx8IG1fY2FwYWNpdHkgPT0g
MSkpIHsKKyAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzWzBdOwor
ICAgICAgICBtX2VudHJpZXMucmVtb3ZlKDApOworICAgICAgICBtX2VudHJ5SGFzaC5yZW1vdmUo
aXRlbSk7CisgICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgICAg
IG1fY3VycmVudC0tOworICAgICAgICBpZiAobV9wYWdlKQorICAgICAgICAgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZFJlbW92ZUJhY2tGb3J3
YXJkSXRlbShpdGVtLmdldCgpKTsKKyAgICB9CisKKyAgICBtX2VudHJ5SGFzaC5hZGQocHJwSXRl
bS5nZXQoKSk7CisgICAgbV9lbnRyaWVzLmluc2VydChtX2N1cnJlbnQgKyAxLCBwcnBJdGVtKTsK
KyAgICBtX2N1cnJlbnQrKzsKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQWRkQmFja0ZvcndhcmRJdGVt
KGN1cnJlbnRJdGVtKCkpOworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Z29CYWNrKCkKK3sK
KyAgICBBU1NFUlQobV9jdXJyZW50ID4gMCk7CisgICAgaWYgKG1fY3VycmVudCA+IDApIHsKKyAg
ICAgICAgbV9jdXJyZW50LS07CisgICAgICAgIGlmIChtX3BhZ2UpCisgICAgICAgICAgICBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQ2hhbmdlQmFj
a0ZvcndhcmRJbmRleCgpOworICAgIH0KK30KKwordm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvRm9y
d2FyZCgpCit7CisgICAgQVNTRVJUKG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkgLSAxKTsK
KyAgICBpZiAobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpIHsKKyAgICAgICAgbV9j
dXJyZW50Kys7CisgICAgICAgIGlmIChtX3BhZ2UpCisgICAgICAgICAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJ
bmRleCgpOworICAgIH0KK30KKwordm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKEhpc3Rv
cnlJdGVtKiBpdGVtKQoreworICAgIGlmICghbV9lbnRyaWVzLnNpemUoKSB8fCAhaXRlbSkKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworICAg
IGZvciAoOyBpbmRleCA8IG1fZW50cmllcy5zaXplKCk7ICsraW5kZXgpCisgICAgICAgIGlmICht
X2VudHJpZXNbaW5kZXhdID09IGl0ZW0pCisgICAgICAgICAgICBicmVhazsKKyAgICBpZiAoaW5k
ZXggPCBtX2VudHJpZXMuc2l6ZSgpKSB7CisgICAgICAgIG1fY3VycmVudCA9IGluZGV4OworICAg
ICAgICBpZiAobV9wYWdlKQorICAgICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVy
KCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKTsKKyAgICB9
Cit9CisKK0hpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmJhY2tJdGVtKCkKK3sKKyAgICBp
ZiAobV9jdXJyZW50ICYmIG1fY3VycmVudCAhPSBOb0N1cnJlbnRJdGVtSW5kZXgpCisgICAgICAg
IHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50IC0gMV0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK0hpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmN1cnJlbnRJdGVtKCkKK3sKKyAgICBp
ZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkKKyAgICAgICAgcmV0dXJuIG1fZW50
cmllc1ttX2N1cnJlbnRdLmdldCgpOworICAgIHJldHVybiAwOworfQorCitIaXN0b3J5SXRlbSog
QmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSgpCit7CisgICAgaWYgKG1fZW50cmllcy5zaXpl
KCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpCisgICAgICAgIHJldHVybiBt
X2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
QmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdFdpdGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVt
VmVjdG9yJiBsaXN0KQoreworICAgIGxpc3QuY2xlYXIoKTsKKyAgICBpZiAobV9jdXJyZW50ICE9
IE5vQ3VycmVudEl0ZW1JbmRleCkgeworICAgICAgICB1bnNpZ25lZCBmaXJzdCA9IG1heCgoaW50
KW1fY3VycmVudCAtIGxpbWl0LCAwKTsKKyAgICAgICAgZm9yICg7IGZpcnN0IDwgbV9jdXJyZW50
OyArK2ZpcnN0KQorICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRyaWVzW2ZpcnN0XSk7Cisg
ICAgfQorfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RXaXRoTGltaXQoaW50
IGxpbWl0LCBIaXN0b3J5SXRlbVZlY3RvciYgbGlzdCkKK3sKKyAgICBBU1NFUlQobGltaXQgPiAt
MSk7CisgICAgbGlzdC5jbGVhcigpOworICAgIGlmICghbV9lbnRyaWVzLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICB1bnNpZ25lZCBsYXN0RW50cnkgPSBtX2VudHJpZXMu
c2l6ZSgpIC0gMTsKKyAgICBpZiAobV9jdXJyZW50IDwgbGFzdEVudHJ5KSB7CisgICAgICAgIGlu
dCBsYXN0ID0gbWluKG1fY3VycmVudCArIGxpbWl0LCBsYXN0RW50cnkpOworICAgICAgICBsaW1p
dCA9IG1fY3VycmVudCArIDE7CisgICAgICAgIGZvciAoOyBsaW1pdCA8PSBsYXN0OyArK2xpbWl0
KQorICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRyaWVzW2xpbWl0XSk7CisgICAgfQorfQor
CitpbnQgQmFja0ZvcndhcmRMaXN0OjpjYXBhY2l0eSgpCit7CisgICAgcmV0dXJuIG1fY2FwYWNp
dHk7Cit9CisKK3ZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRDYXBhY2l0eShpbnQgc2l6ZSkKK3sg
ICAgCisgICAgd2hpbGUgKHNpemUgPCAoaW50KW1fZW50cmllcy5zaXplKCkpIHsKKyAgICAgICAg
UmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKKyAgICAgICAgbV9l
bnRyaWVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwor
ICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0uZ2V0KCkpOworICAgIH0KKworICAgIGlm
ICghc2l6ZSkKKyAgICAgICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworICAgIGVs
c2UgaWYgKG1fY3VycmVudCA+IG1fZW50cmllcy5zaXplKCkgLSAxKSB7CisgICAgICAgIG1fY3Vy
cmVudCA9IG1fZW50cmllcy5zaXplKCkgLSAxOworICAgICAgICBpZiAobV9wYWdlKQorICAgICAg
ICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERp
ZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKTsKKyAgICB9CisgICAgbV9jYXBhY2l0eSA9IHNpemU7
Cit9CisKK2Jvb2wgQmFja0ZvcndhcmRMaXN0OjplbmFibGVkKCkKK3sKKyAgICByZXR1cm4gbV9l
bmFibGVkOworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0RW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAg
ICAgICAgaW50IGNhcGFjaXR5ID0gbV9jYXBhY2l0eTsKKyAgICAgICAgc2V0Q2FwYWNpdHkoMCk7
CisgICAgICAgIHNldENhcGFjaXR5KGNhcGFjaXR5KTsKKyAgICB9Cit9CisKK2ludCBCYWNrRm9y
d2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKQoreworICAgIHJldHVybiBtX2N1cnJlbnQgPT0gTm9D
dXJyZW50SXRlbUluZGV4ID8gMCA6IG1fY3VycmVudDsKK30KKworaW50IEJhY2tGb3J3YXJkTGlz
dDo6Zm9yd2FyZExpc3RDb3VudCgpCit7CisgICAgcmV0dXJuIG1fY3VycmVudCA9PSBOb0N1cnJl
bnRJdGVtSW5kZXggPyAwIDogKGludCltX2VudHJpZXMuc2l6ZSgpIC0gKG1fY3VycmVudCArIDEp
OworfQorCitIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleChpbnQgaW5k
ZXgpCit7CisgICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdpdGhvdXQgZG9pbmcgbWF0aCBvbiBpbmRl
eCB0byBhdm9pZCBvdmVyZmxvdy4KKyAgICBpZiAoaW5kZXggPCAtKGludCltX2N1cnJlbnQpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmIChpbmRleCA+IGZvcndhcmRMaXN0Q291bnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIHJldHVybiBtX2VudHJpZXNbaW5k
ZXggKyBtX2N1cnJlbnRdLmdldCgpOworfQorCitIaXN0b3J5SXRlbVZlY3RvciYgQmFja0Zvcndh
cmRMaXN0OjplbnRyaWVzKCkKK3sKKyAgICByZXR1cm4gbV9lbnRyaWVzOworfQorCit2b2lkIEJh
Y2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJ
dGVtKQoreworICAgIEFTU0VSVChuZXdJdGVtKTsKKyAgICBBU1NFUlQobmV3SXRlbS0+c3RhdGVP
YmplY3QoKSk7CisgICAgCisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50ID0gY3VycmVu
dEl0ZW0oKTsKKyAgICBBU1NFUlQoY3VycmVudCk7CisKKyAgICBhZGRJdGVtKG5ld0l0ZW0pOwor
ICAgIAorICAgIGlmICghY3VycmVudC0+c3RhdGVPYmplY3QoKSkKKyAgICAgICAgY3VycmVudC0+
c2V0U3RhdGVPYmplY3QoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKSk7Cit9CisKK3Zv
aWQgQmFja0ZvcndhcmRMaXN0OjpjbG9zZSgpCit7CisgICAgaW50IHNpemUgPSBtX2VudHJpZXMu
c2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBwYWdl
Q2FjaGUoKS0+cmVtb3ZlKG1fZW50cmllc1tpXS5nZXQoKSk7CisgICAgbV9lbnRyaWVzLmNsZWFy
KCk7CisgICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKKyAgICBtX3BhZ2UgPSAwOworICAgIG1fY2xv
c2VkID0gdHJ1ZTsKK30KKworYm9vbCBCYWNrRm9yd2FyZExpc3Q6OmNsb3NlZCgpCit7CisgICAg
cmV0dXJuIG1fY2xvc2VkOworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6cmVtb3ZlSXRlbShI
aXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUoKTsgKytpKQor
ICAgICAgICBpZiAobV9lbnRyaWVzW2ldID09IGl0ZW0pIHsKKyAgICAgICAgICAgIG1fZW50cmll
cy5yZW1vdmUoaSk7CisgICAgICAgICAgICBtX2VudHJ5SGFzaC5yZW1vdmUoaXRlbSk7CisgICAg
ICAgICAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQg
PCBpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1fY3VycmVudCA+
IGkpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50LS07CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2VudHJpZXMuc2l6ZSgpOworICAgICAgICAg
ICAgICAgIGlmIChtX2N1cnJlbnQgPj0gY291bnQpCisgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudCA9IGNvdW50ID8gY291bnQgLSAxIDogTm9DdXJyZW50SXRlbUluZGV4OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KK30KKworYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSogZW50cnkpCit7CisgICAgcmV0dXJuIG1f
ZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKK30KKworI2lmIEVOQUJMRShXTUwpCit2b2lkIEJh
Y2tGb3J3YXJkTGlzdDo6Y2xlYXJXTUxQYWdlSGlzdG9yeSgpCit7CisgICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJlbnRJdGVtKCk7CisKKyAgICBpbnQgc2l6
ZSA9IG1fZW50cmllcy5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
CisgICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9lbnRyaWVzW2ldLmdldCgpKTsKKworICAg
IG1fZW50cmllcy5jbGVhcigpOworICAgIG1fZW50cnlIYXNoLmNsZWFyKCk7CisgICAgbV9jdXJy
ZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworCisgICAgLy8gU3BlYzogVGhlIGhpc3Rvcnkgc3Rh
Y2sgbWF5IGJlIHJlc2V0IHRvIGEgc3RhdGUgd2hlcmUgaXQgb25seSBjb250YWlucyB0aGUgY3Vy
cmVudCBjYXJkLgorICAgIGFkZEl0ZW0oY3VycmVudEl0ZW0pOworfQorI2VuZGlmCisKK307IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdElt
cGwuY3BwCShyZXZpc2lvbiA2MjY3NCkKKysrIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3RJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJC
YWNrRm9yd2FyZExpc3RJbXBsLmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBEZWZhdWx0Q2FwYWNpdHkgPSAxMDA7CiBzdGF0aWMgY29uc3QgdW5z
aWduZWQgTm9DdXJyZW50SXRlbUluZGV4ID0gVUlOVF9NQVg7CiAKLUJhY2tGb3J3YXJkTGlzdDo6
QmFja0ZvcndhcmRMaXN0KFBhZ2UqIHBhZ2UpCitCYWNrRm9yd2FyZExpc3RJbXBsOjpCYWNrRm9y
d2FyZExpc3RJbXBsKFBhZ2UqIHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fY3Vy
cmVudChOb0N1cnJlbnRJdGVtSW5kZXgpCiAgICAgLCBtX2NhcGFjaXR5KERlZmF1bHRDYXBhY2l0
eSkKQEAgLTUyLDEyICs1MiwxMiBAQCBCYWNrRm9yd2FyZExpc3Q6OkJhY2tGb3J3YXJkTGlzdChQ
YWdlKiBwCiB7CiB9CiAKLUJhY2tGb3J3YXJkTGlzdDo6fkJhY2tGb3J3YXJkTGlzdCgpCitCYWNr
Rm9yd2FyZExpc3RJbXBsOjp+QmFja0ZvcndhcmRMaXN0SW1wbCgpCiB7CiAgICAgQVNTRVJUKG1f
Y2xvc2VkKTsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4gcHJwSXRlbSkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6YWRkSXRlbShQ
YXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogewogICAgIEFTU0VSVChwcnBJdGVtKTsK
ICAgICBpZiAobV9jYXBhY2l0eSA9PSAwIHx8ICFtX2VuYWJsZWQpCkBAIC05Myw3ICs5Myw3IEBA
IHZvaWQgQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFBhc3NSZWZQdHIKICAgICAgICAgbV9wYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZEFkZEJhY2tGb3J3
YXJkSXRlbShjdXJyZW50SXRlbSgpKTsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvQmFj
aygpCit2b2lkIEJhY2tGb3J3YXJkTGlzdEltcGw6OmdvQmFjaygpCiB7CiAgICAgQVNTRVJUKG1f
Y3VycmVudCA+IDApOwogICAgIGlmIChtX2N1cnJlbnQgPiAwKSB7CkBAIC0xMDMsNyArMTAzLDcg
QEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvQmFjaygpCiAgICAgfQogfQogCi12b2lkIEJhY2tG
b3J3YXJkTGlzdDo6Z29Gb3J3YXJkKCkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6Z29Gb3J3
YXJkKCkKIHsKICAgICBBU1NFUlQobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpOwog
ICAgIGlmIChtX2N1cnJlbnQgPCBtX2VudHJpZXMuc2l6ZSgpIC0gMSkgewpAQCAtMTEzLDcgKzEx
Myw3IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0Ojpnb0ZvcndhcmQoKQogICAgIH0KIH0KIAotdm9p
ZCBCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQordm9pZCBCYWNr
Rm9yd2FyZExpc3RJbXBsOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICBpZiAo
IW1fZW50cmllcy5zaXplKCkgfHwgIWl0ZW0pCiAgICAgICAgIHJldHVybjsKQEAgLTEyOSwyOCAr
MTI5LDI4IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0Ojpnb1RvSXRlbShIaXN0b3J5SXQKICAgICB9
CiB9CiAKLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmJhY2tJdGVtKCkKK0hpc3RvcnlJ
dGVtKiBCYWNrRm9yd2FyZExpc3RJbXBsOjpiYWNrSXRlbSgpCiB7CiAgICAgaWYgKG1fY3VycmVu
dCAmJiBtX2N1cnJlbnQgIT0gTm9DdXJyZW50SXRlbUluZGV4KQogICAgICAgICByZXR1cm4gbV9l
bnRyaWVzW21fY3VycmVudCAtIDFdLmdldCgpOwogICAgIHJldHVybiAwOwogfQogCi1IaXN0b3J5
SXRlbSogQmFja0ZvcndhcmRMaXN0OjpjdXJyZW50SXRlbSgpCitIaXN0b3J5SXRlbSogQmFja0Zv
cndhcmRMaXN0SW1wbDo6Y3VycmVudEl0ZW0oKQogewogICAgIGlmIChtX2N1cnJlbnQgIT0gTm9D
dXJyZW50SXRlbUluZGV4KQogICAgICAgICByZXR1cm4gbV9lbnRyaWVzW21fY3VycmVudF0uZ2V0
KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmZv
cndhcmRJdGVtKCkKK0hpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3RJbXBsOjpmb3J3YXJkSXRl
bSgpCiB7CiAgICAgaWYgKG1fZW50cmllcy5zaXplKCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVz
LnNpemUoKSAtIDEpCiAgICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0
KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdFdp
dGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQordm9pZCBCYWNrRm9y
d2FyZExpc3RJbXBsOjpiYWNrTGlzdFdpdGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVj
dG9yJiBsaXN0KQogewogICAgIGxpc3QuY2xlYXIoKTsKICAgICBpZiAobV9jdXJyZW50ICE9IE5v
Q3VycmVudEl0ZW1JbmRleCkgewpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQmFja0ZvcndhcmRM
aXN0OjpiYWNrTGlzdFdpdGhMaW1pdCgKICAgICB9CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0
Ojpmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0
KQordm9pZCBCYWNrRm9yd2FyZExpc3RJbXBsOjpmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQgbGlt
aXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQogewogICAgIEFTU0VSVChsaW1pdCA+IC0xKTsK
ICAgICBsaXN0LmNsZWFyKCk7CkBAIC0xNzYsMTIgKzE3NiwxMiBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6Zm9yd2FyZExpc3RXaXRoTGltCiAgICAgfQogfQogCi1pbnQgQmFja0ZvcndhcmRMaXN0
OjpjYXBhY2l0eSgpCitpbnQgQmFja0ZvcndhcmRMaXN0SW1wbDo6Y2FwYWNpdHkoKQogewogICAg
IHJldHVybiBtX2NhcGFjaXR5OwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0Q2FwYWNp
dHkoaW50IHNpemUpCit2b2lkIEJhY2tGb3J3YXJkTGlzdEltcGw6OnNldENhcGFjaXR5KGludCBz
aXplKQogeyAgICAKICAgICB3aGlsZSAoc2l6ZSA8IChpbnQpbV9lbnRyaWVzLnNpemUoKSkgewog
ICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMubGFzdCgpOwpAQCAt
MjAwLDEyICsyMDAsMTIgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldENhcGFjaXR5KGludCBz
aQogICAgIG1fY2FwYWNpdHkgPSBzaXplOwogfQogCi1ib29sIEJhY2tGb3J3YXJkTGlzdDo6ZW5h
YmxlZCgpCitib29sIEJhY2tGb3J3YXJkTGlzdEltcGw6OmVuYWJsZWQoKQogewogICAgIHJldHVy
biBtX2VuYWJsZWQ7CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6c2V0RW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7CiAgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKICAgICBpZiAoIWVuYWJsZWQpIHsKQEAg
LTIxNSwxNyArMjE1LDE3IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRFbmFibGVkKGJvb2wg
ZW4KICAgICB9CiB9CiAKLWludCBCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKQoraW50
IEJhY2tGb3J3YXJkTGlzdEltcGw6OmJhY2tMaXN0Q291bnQoKQogewogICAgIHJldHVybiBtX2N1
cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4ID8gMCA6IG1fY3VycmVudDsKIH0KIAotaW50IEJh
Y2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RDb3VudCgpCitpbnQgQmFja0ZvcndhcmRMaXN0SW1w
bDo6Zm9yd2FyZExpc3RDb3VudCgpCiB7CiAgICAgcmV0dXJuIG1fY3VycmVudCA9PSBOb0N1cnJl
bnRJdGVtSW5kZXggPyAwIDogKGludCltX2VudHJpZXMuc2l6ZSgpIC0gKG1fY3VycmVudCArIDEp
OwogfQogCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleChpbnQgaW5k
ZXgpCitIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0SW1wbDo6aXRlbUF0SW5kZXgoaW50IGlu
ZGV4KQogewogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aXRob3V0IGRvaW5nIG1hdGggb24gaW5k
ZXggdG8gYXZvaWQgb3ZlcmZsb3cuCiAgICAgaWYgKGluZGV4IDwgLShpbnQpbV9jdXJyZW50KQpA
QCAtMjM3LDEyICsyMzcsMTIgQEAgSGlzdG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdDo6aXRlbUF0
SW5kZQogICAgIHJldHVybiBtX2VudHJpZXNbaW5kZXggKyBtX2N1cnJlbnRdLmdldCgpOwogfQog
Ci1IaXN0b3J5SXRlbVZlY3RvciYgQmFja0ZvcndhcmRMaXN0OjplbnRyaWVzKCkKK0hpc3RvcnlJ
dGVtVmVjdG9yJiBCYWNrRm9yd2FyZExpc3RJbXBsOjplbnRyaWVzKCkKIHsKICAgICByZXR1cm4g
bV9lbnRyaWVzOwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJdGVtKQordm9pZCBCYWNrRm9yd2FyZExpc3RJbXBsOjpw
dXNoU3RhdGVJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IG5ld0l0ZW0pCiB7CiAgICAgQVNT
RVJUKG5ld0l0ZW0pOwogICAgIEFTU0VSVChuZXdJdGVtLT5zdGF0ZU9iamVjdCgpKTsKQEAgLTI1
Niw3ICsyNTYsNyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNzCiAg
ICAgICAgIGN1cnJlbnQtPnNldFN0YXRlT2JqZWN0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKCkpOwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xvc2UoKQordm9pZCBCYWNrRm9y
d2FyZExpc3RJbXBsOjpjbG9zZSgpCiB7CiAgICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgp
OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQpAQCAtMjY3LDEyICsyNjcsMTIg
QEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmNsb3NlKCkKICAgICBtX2Nsb3NlZCA9IHRydWU7CiB9
CiAKLWJvb2wgQmFja0ZvcndhcmRMaXN0OjpjbG9zZWQoKQorYm9vbCBCYWNrRm9yd2FyZExpc3RJ
bXBsOjpjbG9zZWQoKQogewogICAgIHJldHVybiBtX2Nsb3NlZDsKIH0KIAotdm9pZCBCYWNrRm9y
d2FyZExpc3Q6OnJlbW92ZUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIEJhY2tGb3J3YXJk
TGlzdEltcGw6OnJlbW92ZUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiB7CiAgICAgaWYgKCFpdGVt
KQogICAgICAgICByZXR1cm47CkBAIC0yOTQsMTMgKzI5NCwxMyBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6cmVtb3ZlSXRlbShIaXN0b3J5CiAgICAgICAgIH0KIH0KIAotYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSogZW50cnkpCitib29sIEJhY2tGb3J3YXJk
TGlzdEltcGw6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSogZW50cnkpCiB7CiAgICAgcmV0dXJu
IG1fZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKIH0KIAogI2lmIEVOQUJMRShXTUwpCi12b2lk
IEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJXTUxQYWdlSGlzdG9yeSgpCit2b2lkIEJhY2tGb3J3YXJk
TGlzdEltcGw6OmNsZWFyV01MUGFnZUhpc3RvcnkoKQogewogICAgIFJlZlB0cjxIaXN0b3J5SXRl
bT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50SXRlbSgpOwogCkluZGV4OiBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZExpc3RJbXBsLmgJKHJldmlzaW9uIDYyNjc0KQkoZnJvbSBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0Lmg6NjI2NzQpCisrKyBXZWJDb3JlL2hpc3RvcnkvQmFja0Zv
cndhcmRMaXN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QmFja0ZvcndhcmRMaXN0X2gKKyNkZWZpbmUgQmFja0ZvcndhcmRMaXN0X2gKKworI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEhpc3RvcnlJdGVtOworY2xhc3MgUGFn
ZTsKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKK2NsYXNzIFN0cmluZzsKKwordHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPiA+IEhpc3RvcnlJdGVtVmVjdG9yOwordHlwZWRl
ZiBIYXNoU2V0PFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRlbUhhc2hTZXQ7CisKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKy8vIEluIHRoZSBDaHJvbWl1bSBwb3J0LCB0aGUgYmFjay9m
b3J3YXJkIGxpc3QgaXMgbWFuYWdlZCBleHRlcm5hbGx5LgorLy8gU2VlIEJhY2tGb3J3YXJkTGlz
dENocm9taXVtLmNwcAorY2xhc3MgQmFja0ZvcndhcmRMaXN0Q2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5CYWNrRm9yd2FyZExpc3RDbGllbnQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBh
ZGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdv
VG9JdGVtKEhpc3RvcnlJdGVtKikgPSAwOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGN1cnJl
bnRJdGVtKCkgPSAwOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGl0ZW1BdEluZGV4KGludCkg
PSAwOworICAgIHZpcnR1YWwgaW50IGJhY2tMaXN0Q291bnQoKSA9IDA7CisgICAgdmlydHVhbCBp
bnQgZm9yd2FyZExpc3RDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7
Cit9OworI2VuZGlmCisKK2NsYXNzIEJhY2tGb3J3YXJkTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVk
PEJhY2tGb3J3YXJkTGlzdD4geworcHVibGljOiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNr
Rm9yd2FyZExpc3Q+IGNyZWF0ZShQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQmFj
a0ZvcndhcmRMaXN0KHBhZ2UpKTsgfQorICAgIH5CYWNrRm9yd2FyZExpc3QoKTsKKworI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQorICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIg
bWV0aG9kcy4gCisgICAgdm9pZCBzZXRDbGllbnQoQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBjbGll
bnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKyNlbmRpZgorICAgIAorICAgIFBhZ2UqIHBhZ2Uo
KSB7IHJldHVybiBtX3BhZ2U7IH0KKyAgICAKKyAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4pOworICAgIHZvaWQgZ29CYWNrKCk7CisgICAgdm9pZCBnb0ZvcndhcmQoKTsK
KyAgICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKik7CisgICAgICAgIAorICAgIEhpc3RvcnlJ
dGVtKiBiYWNrSXRlbSgpOworICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSgpOworICAgIEhp
c3RvcnlJdGVtKiBmb3J3YXJkSXRlbSgpOworICAgIEhpc3RvcnlJdGVtKiBpdGVtQXRJbmRleChp
bnQpOworCisgICAgdm9pZCBiYWNrTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7CisgICAgdm9pZCBmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7CisKKyAgICBpbnQgY2FwYWNpdHkoKTsKKyAgICB2b2lkIHNldENhcGFjaXR5KGludCk7Cisg
ICAgYm9vbCBlbmFibGVkKCk7CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIGludCBi
YWNrTGlzdENvdW50KCk7CisgICAgaW50IGZvcndhcmRMaXN0Q291bnQoKTsKKyAgICBib29sIGNv
bnRhaW5zSXRlbShIaXN0b3J5SXRlbSopOworCisgICAgdm9pZCBjbG9zZSgpOworICAgIGJvb2wg
Y2xvc2VkKCk7CisgICAgCisgICAgdm9pZCByZW1vdmVJdGVtKEhpc3RvcnlJdGVtKik7CisgICAg
SGlzdG9yeUl0ZW1WZWN0b3ImIGVudHJpZXMoKTsKKyAgICAKKyAgICB2b2lkIHB1c2hTdGF0ZUl0
ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4pOworCisjaWYgRU5BQkxFKFdNTCkKKyAgICB2b2lk
IGNsZWFyV01MUGFnZUhpc3RvcnkoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEJhY2tGb3J3
YXJkTGlzdChQYWdlKik7CisgICAgCisgICAgUGFnZSogbV9wYWdlOworI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKSAKKyAgICBCYWNrRm9yd2FyZExpc3RDbGllbnQqIG1fY2xpZW50OworI2Vsc2UKKyAg
ICBIaXN0b3J5SXRlbVZlY3RvciBtX2VudHJpZXM7CisgICAgSGlzdG9yeUl0ZW1IYXNoU2V0IG1f
ZW50cnlIYXNoOworICAgIHVuc2lnbmVkIG1fY3VycmVudDsKKyNlbmRpZgorICAgIHVuc2lnbmVk
IG1fY2FwYWNpdHk7CisgICAgYm9vbCBtX2Nsb3NlZDsKKyAgICBib29sIG1fZW5hYmxlZDsKK307
CisgICAgCit9IC8vbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZExpc3RJbXBsLmgJKHJldmlzaW9uIDYyNjc0KQorKysgV2ViQ29yZS9oaXN0
b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNDUgKzI1LDI2
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEJhY2tGb3J3YXJkTGlzdF9oCi0j
ZGVmaW5lIEJhY2tGb3J3YXJkTGlzdF9oCisjaWZuZGVmIEJhY2tGb3J3YXJkTGlzdEltcGxfaAor
I2RlZmluZSBCYWNrRm9yd2FyZExpc3RJbXBsX2gKIAotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJCYWNrRm9yd2FyZExp
c3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhpc3RvcnlJ
dGVtOwogY2xhc3MgUGFnZTsKLWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLWNsYXNzIFN0
cmluZzsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPiA+IEhpc3RvcnlJdGVt
VmVjdG9yOwogdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRl
bUhhc2hTZXQ7CiAKLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLS8vIEluIHRoZSBDaHJvbWl1bSBw
b3J0LCB0aGUgYmFjay9mb3J3YXJkIGxpc3QgaXMgbWFuYWdlZCBleHRlcm5hbGx5LgotLy8gU2Vl
IEJhY2tGb3J3YXJkTGlzdENocm9taXVtLmNwcAotY2xhc3MgQmFja0ZvcndhcmRMaXN0Q2xpZW50
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5CYWNrRm9yd2FyZExpc3RDbGllbnQoKSB7fQotICAg
IHZpcnR1YWwgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKikgPSAwOwotICAgIHZpcnR1YWwgSGlz
dG9yeUl0ZW0qIGN1cnJlbnRJdGVtKCkgPSAwOwotICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGl0
ZW1BdEluZGV4KGludCkgPSAwOwotICAgIHZpcnR1YWwgaW50IGJhY2tMaXN0Q291bnQoKSA9IDA7
Ci0gICAgdmlydHVhbCBpbnQgZm9yd2FyZExpc3RDb3VudCgpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgY2xvc2UoKSA9IDA7Ci19OwotI2VuZGlmCi0KLWNsYXNzIEJhY2tGb3J3YXJkTGlzdCA6IHB1
YmxpYyBSZWZDb3VudGVkPEJhY2tGb3J3YXJkTGlzdD4geworY2xhc3MgQmFja0ZvcndhcmRMaXN0
SW1wbCA6IHB1YmxpYyBCYWNrRm9yd2FyZExpc3QgewogcHVibGljOiAKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxCYWNrRm9yd2FyZExpc3Q+IGNyZWF0ZShQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgQmFja0ZvcndhcmRMaXN0KHBhZ2UpKTsgfQotICAgIH5CYWNrRm9yd2FyZExpc3Qo
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNrRm9yd2FyZExpc3RJbXBsPiBjcmVhdGUoUGFn
ZSogcGFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEJhY2tGb3J3YXJkTGlzdEltcGwocGFnZSkp
OyB9CisgICAgfkJhY2tGb3J3YXJkTGlzdEltcGwoKTsKKworICAgIGJvb2wgaXNCYWNrRm9yd2Fy
ZExpc3RJbXBsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgUExBVEZPUk0oQ0hST01J
VU0pCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBtZXRob2RzLiAKQEAg
LTEwNiw3ICs4Nyw3IEBAIHB1YmxpYzogCiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBCYWNrRm9y
d2FyZExpc3QoUGFnZSopOworICAgIEJhY2tGb3J3YXJkTGlzdEltcGwoUGFnZSopOwogICAgIAog
ICAgIFBhZ2UqIG1fcGFnZTsKICNpZiBQTEFURk9STShDSFJPTUlVTSkgCkBAIC0xMjEsNiArMTAy
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZW5hYmxlZDsKIH07CiAgICAgCi19IC8vbmFtZXNw
YWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8g
QmFja0ZvcndhcmRMaXN0SW1wbF9oCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA3LTA3ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MTgyNgorICAgICAgICBDb252ZXJ0IEJhY2tGb3J3YXJkTGlzdCB0byBhbiBhYnN0
cmFjdCBiYXNlIGNsYXNzIGFuZCBhZGQgQmFja0ZvcndhcmRMaXN0SW1wbAorICAgICAgICBhcyB0
aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgaXQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudDo6Y3JlYXRlQmFja0Zv
cndhcmRMaXN0KToKKwogMjAxMC0wNy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYWNr
Rm9yd2FyZENvbnRyb2xsZXJDbGllbnQuY3BwCShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiV2ViQmFja0Zv
cndhcmRDb250cm9sbGVyQ2xpZW50LmgiCiAKICNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9CYWNrRm9yd2FyZExpc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0JhY2tGb3J3
YXJkTGlzdEltcGwuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTM5LDcgKzM5
LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQ6OmJhYwogCiBQYXNzUmVm
UHRyPEJhY2tGb3J3YXJkTGlzdD4gV2ViQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50OjpjcmVh
dGVCYWNrRm9yd2FyZExpc3QoKQogewotICAgIHJldHVybiBCYWNrRm9yd2FyZExpc3Q6OmNyZWF0
ZShtX3BhZ2UtPmNvcmVQYWdlKCkpOworICAgIHJldHVybiBCYWNrRm9yd2FyZExpc3RJbXBsOjpj
cmVhdGUobV9wYWdlLT5jb3JlUGFnZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA3LTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTgyNgor
ICAgICAgICBDb252ZXJ0IEJhY2tGb3J3YXJkTGlzdCB0byBhbiBhYnN0cmFjdCBiYXNlIGNsYXNz
IGFuZCBhZGQgQmFja0ZvcndhcmRMaXN0SW1wbAorICAgICAgICBhcyB0aGUgY29uY3JldGUgaW1w
bGVtZW50YXRpb24gb2YgaXQuCisKKyAgICAgICAgKiBIaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlz
dC5tbToKKyAgICAgICAgKC1bV2ViQmFja0ZvcndhcmRMaXN0IGluaXRdKToKKyAgICAgICAgKC1b
V2ViQmFja0ZvcndhcmRMaXN0IHNldFBhZ2VDYWNoZVNpemU6XSk6CisgICAgICAgICgtW1dlYkJh
Y2tGb3J3YXJkTGlzdCBwYWdlQ2FjaGVTaXplXSk6CisKIDIwMTAtMDctMDcgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24u
CkluZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0JKHJldmlzaW9u
IDYyNzQyKQorKysgV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2
YXRlLmgiCiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJWaWV3UHJp
dmF0ZS5oIgotI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZExpc3QuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQmFja0ZvcndhcmRMaXN0SW1wbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRl
bS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VDYWNo
ZS5oPgpAQCAtMTA5LDcgKzEwOSw3IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogCiAtIChpZClpbml0
CiB7Ci0gICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoQmFja0ZvcndhcmRMaXN0OkJhY2tGb3J3YXJk
TGlzdDo6Y3JlYXRlKDApXTsKKyAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhCYWNrRm9yd2FyZExp
c3Q6QmFja0ZvcndhcmRMaXN0SW1wbDo6Y3JlYXRlKDApXTsKIH0KIAogLSAodm9pZClkZWFsbG9j
CkBAIC0yOTMsMTIgKzI5MywxNCBAQCAtKE5TU3RyaW5nICopZGVzY3JpcHRpb24KIAogLSAodm9p
ZClzZXRQYWdlQ2FjaGVTaXplOihOU1VJbnRlZ2VyKXNpemUKIHsKLSAgICBba2l0KGNvcmUoc2Vs
ZiktPnBhZ2UoKSkgc2V0VXNlc1BhZ2VDYWNoZTpzaXplICE9IDBdOworICAgIEFTU0VSVChjb3Jl
KHNlbGYpLT5pc0JhY2tGb3J3YXJkTGlzdEltcGwoKSk7CisgICAgW2tpdChzdGF0aWNfY2FzdDxC
YWNrRm9yd2FyZExpc3RJbXBsKj4oY29yZShzZWxmKSktPnBhZ2UoKSkgc2V0VXNlc1BhZ2VDYWNo
ZTpzaXplICE9IDBdOwogfQogCiAtIChOU1VJbnRlZ2VyKXBhZ2VDYWNoZVNpemUKIHsKLSAgICBy
ZXR1cm4gW2tpdChjb3JlKHNlbGYpLT5wYWdlKCkpIHVzZXNQYWdlQ2FjaGVdID8gcGFnZUNhY2hl
KCktPmNhcGFjaXR5KCkgOiAwOworICAgIEFTU0VSVChjb3JlKHNlbGYpLT5pc0JhY2tGb3J3YXJk
TGlzdEltcGwoKSk7CisgICAgcmV0dXJuIFtraXQoc3RhdGljX2Nhc3Q8QmFja0ZvcndhcmRMaXN0
SW1wbCo+KGNvcmUoc2VsZikpLT5wYWdlKCkpIHVzZXNQYWdlQ2FjaGVdID8gcGFnZUNhY2hlKCkt
PmNhcGFjaXR5KCkgOiAwOwogfQogCiAtIChpbnQpYmFja0xpc3RDb3VudApJbmRleDogV2ViS2l0
L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lv
biA2Mjc0MikKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxOSBAQAorMjAxMC0wNy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE4MjYKKyAgICAgICAgQ29udmVy
dCBCYWNrRm9yd2FyZExpc3QgdG8gYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBhbmQgYWRkIEJhY2tG
b3J3YXJkTGlzdEltcGwKKyAgICAgICAgYXMgdGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9m
IGl0LgorCisgICAgICAgICogQXBpL3F3ZWJoaXN0b3J5LmNwcDoKKyAgICAgICAgKFFXZWJIaXN0
b3J5OjpjbGVhcik6CisgICAgICAgIChRV2ViSGlzdG9yeTo6YmFjayk6CisgICAgICAgIChRV2Vi
SGlzdG9yeTo6Zm9yd2FyZCk6CisgICAgICAgIChRV2ViSGlzdG9yeTo6Z29Ub0l0ZW0pOgorICAg
ICAgICAob3BlcmF0b3I+Pik6CisgICAgICAgIChRV2ViSGlzdG9yeVByaXZhdGU6OnBhZ2UpOgor
CiAyMDEwLTA3LTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9y
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAJKHJldmlz
aW9uIDYyNzQyKQorKysgV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJxd2ViaGlzdG9yeV9wLmgiCiAjaW5jbHVk
ZSAicXdlYmZyYW1lX3AuaCIKIAorI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdEltcGwuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAi
S1VSTC5oIgpAQCAtMjU5LDcgKzI2MCw3IEBAIHZvaWQgUVdlYkhpc3Rvcnk6OmNsZWFyKCkKICAg
ICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGxzdCA9IGQtPmxzdDsKIAogICAgIC8vY2xlYXIg
dmlzaXRlZCBsaW5rcwotICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBsc3QtPnBhZ2UoKTsKKyAg
ICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc3RhdGljX2Nhc3Q8QmFja0ZvcndhcmRMaXN0SW1wbCo+
KGxzdCktPnBhZ2UoKTsKICAgICBpZiAocGFnZSAmJiBwYWdlLT5ncm91cFB0cigpKQogICAgICAg
ICBwYWdlLT5ncm91cFB0cigpLT5yZW1vdmVWaXNpdGVkTGlua3MoKTsKIApAQCAtMzYzLDcgKzM2
NCw3IEBAIGJvb2wgUVdlYkhpc3Rvcnk6OmNhbkdvRm9yd2FyZCgpIGNvbnN0CiB2b2lkIFFXZWJI
aXN0b3J5OjpiYWNrKCkKIHsKICAgICBpZiAoY2FuR29CYWNrKCkpIHsKLSAgICAgICAgV2ViQ29y
ZTo6UGFnZSogcGFnZSA9IGQtPmxzdC0+cGFnZSgpOworICAgICAgICBXZWJDb3JlOjpQYWdlKiBw
YWdlID0gc3RhdGljX2Nhc3Q8QmFja0ZvcndhcmRMaXN0SW1wbCo+KGQtPmxzdCktPnBhZ2UoKTsK
ICAgICAgICAgcGFnZS0+Z29Ub0l0ZW0oZC0+bHN0LT5iYWNrSXRlbSgpLCBXZWJDb3JlOjpGcmFt
ZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJkKTsKICAgICB9CiB9CkBAIC0zNzcsNyArMzc4LDcg
QEAgdm9pZCBRV2ViSGlzdG9yeTo6YmFjaygpCiB2b2lkIFFXZWJIaXN0b3J5Ojpmb3J3YXJkKCkK
IHsKICAgICBpZiAoY2FuR29Gb3J3YXJkKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6UGFnZSogcGFn
ZSA9IGQtPmxzdC0+cGFnZSgpOworICAgICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc3RhdGlj
X2Nhc3Q8QmFja0ZvcndhcmRMaXN0SW1wbCo+KGQtPmxzdCktPnBhZ2UoKTsKICAgICAgICAgcGFn
ZS0+Z29Ub0l0ZW0oZC0+bHN0LT5mb3J3YXJkSXRlbSgpLCBXZWJDb3JlOjpGcmFtZUxvYWRUeXBl
SW5kZXhlZEJhY2tGb3J3YXJkKTsKICAgICB9CiB9CkBAIC0zODksNyArMzkwLDcgQEAgdm9pZCBR
V2ViSGlzdG9yeTo6Zm9yd2FyZCgpCiAqLwogdm9pZCBRV2ViSGlzdG9yeTo6Z29Ub0l0ZW0oY29u
c3QgUVdlYkhpc3RvcnlJdGVtICZpdGVtKQogewotICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBk
LT5sc3QtPnBhZ2UoKTsKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc3RhdGljX2Nhc3Q8QmFj
a0ZvcndhcmRMaXN0SW1wbCo+KGQtPmxzdCktPnBhZ2UoKTsKICAgICBwYWdlLT5nb1RvSXRlbShp
dGVtLmQtPml0ZW0sIFdlYkNvcmU6OkZyYW1lTG9hZFR5cGVJbmRleGVkQmFja0ZvcndhcmQpOwog
fQogCkBAIC01MzgsNyArNTM5LDcgQEAgUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oUURhdGFTdHJl
YW0mIHNvdQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZC0+bHN0LT5yZW1vdmVJdGVtKG51
bGxJdGVtKTsKICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgSGlzdG9yeUNvbnRyb2xsZXIuCi0g
ICAgICAgICAgICBoaXN0b3J5LmQtPmxzdC0+cGFnZSgpLT5tYWluRnJhbWUoKS0+bG9hZGVyKCkt
Pmhpc3RvcnkoKS0+c2V0Q3VycmVudEl0ZW0oaGlzdG9yeS5kLT5sc3QtPmVudHJpZXMoKVtjdXJy
ZW50SW5kZXhdLmdldCgpKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEJhY2tGb3J3YXJkTGlz
dEltcGwqPihoaXN0b3J5LmQtPmxzdCktPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5o
aXN0b3J5KCktPnNldEN1cnJlbnRJdGVtKGhpc3RvcnkuZC0+bHN0LT5lbnRyaWVzKClbY3VycmVu
dEluZGV4XS5nZXQoKSk7CiAgICAgICAgICAgICBoaXN0b3J5LmdvVG9JdGVtKGhpc3RvcnkuaXRl
bUF0KGN1cnJlbnRJbmRleCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTUwLDcgKzU1MSw3IEBA
IFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KFFEYXRhU3RyZWFtJiBzb3UKIAogUVdlYlBhZ2VQcml2
YXRlKiBRV2ViSGlzdG9yeVByaXZhdGU6OnBhZ2UoKQogewotICAgIHJldHVybiBRV2ViRnJhbWVQ
cml2YXRlOjpraXQobHN0LT5wYWdlKCktPm1haW5GcmFtZSgpKS0+cGFnZSgpLT5oYW5kbGUoKTsK
KyAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KHN0YXRpY19jYXN0PEJhY2tGb3J3YXJk
TGlzdEltcGwqPihsc3QpLT5wYWdlKCktPm1haW5GcmFtZSgpKS0+cGFnZSgpLT5oYW5kbGUoKTsK
IH0KIAogV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIFFXZWJIaXN0b3J5SXRlbVByaXZhdGU6OmNvcmUo
UVdlYkhpc3RvcnlJdGVtKiBxKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60827</attachid>
            <date>2010-07-07 19:49:49 -0700</date>
            <delta_ts>2010-07-08 08:51:06 -0700</delta_ts>
            <desc>Patch 3 (once more with a feeling)</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>59012</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDctMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxODI2CisgICAgICAg
IENvbnZlcnQgQmFja0ZvcndhcmRMaXN0IHRvIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgYW5kIGFk
ZCBCYWNrRm9yd2FyZExpc3RJbXBsCisgICAgICAgIGFzIHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRh
dGlvbiBvZiBpdC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmFja0ZvcndhcmRDb250cm9sbGVyOjpCYWNrRm9yd2FyZENvbnRyb2xsZXIp
OgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmg6CisgICAgICAgICog
aGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhpc3Rvcnkv
QmFja0ZvcndhcmRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3Q6On5C
YWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0Ojppc0Jh
Y2tGb3J3YXJkTGlzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0OjpC
YWNrRm9yd2FyZExpc3QpOgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5j
cHA6IENvcGllZCBmcm9tIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwLgorICAg
ICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmguCisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2Fy
ZExpc3RJbXBsOjppc0JhY2tGb3J3YXJkTGlzdEltcGwpOgorCiAyMDEwLTA2LTE4ICBNT1JJVEEg
SGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4g
VmFmYWkuCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDYyNzQyKQorKysgV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtODk5LDcgKzg5OSw3IEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCiAKICAgICBoaXN0b3J5L0JhY2tGb3J3
YXJkQ29udHJvbGxlci5jcHAKLSAgICBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAKKyAgICBo
aXN0b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuY3BwCiAgICAgaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHAKICAgICBoaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCiAgICAgaGlzdG9yeS9IaXN0b3J5SXRlbS5j
cHAKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDU0LDggKzEwNTQsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmggXAogCVdlYkNvcmUvaGlzdG9yeS9CYWNr
Rm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCBcCi0JV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJk
TGlzdC5jcHAgXAogCVdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuaCBcCisJV2ViQ29y
ZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuY3BwIFwKKwlXZWJDb3JlL2hpc3RvcnkvQmFj
a0ZvcndhcmRMaXN0SW1wbC5oIFwKIAlXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwIFwK
IAlXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuaCBcCiAJV2ViQ29yZS9oaXN0b3J5L0NhY2hl
ZEZyYW1lUGxhdGZvcm1EYXRhLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA2Mjc0MikKKysrIFdl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTMxNywyOSArMzE3LDYgQEAg
X19aTjdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjQwc2V0RG9tYWluUgogX19aTjdXZWJDb3JlMTRT
ZWN1cml0eU9yaWdpbjZjcmVhdGVFUktOU180S1VSTEVpCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5
T3JpZ2luN2NhbkxvYWRFUktOU180S1VSTEVSS05TXzZTdHJpbmdFUE5TXzhEb2N1bWVudEUKIF9f
Wk43V2ViQ29yZTE1QXJjaGl2ZVJlc291cmNlNmNyZWF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU18x
MlNoYXJlZEJ1ZmZlckVFRVJLTlNfNEtVUkxFUktOU182U3RyaW5nRVNBX1NBX1JLTlNfMTZSZXNv
dXJjZVJlc3BvbnNlRQotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMHJlbW92ZUl0ZW1F
UE5TXzExSGlzdG9yeUl0ZW1FCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDEwc2V0RW5h
YmxlZEViCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDExY3VycmVudEl0ZW1FdgotX19a
TjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMWZvcndhcmRJdGVtRXYKLV9fWk43V2ViQ29yZTE1
QmFja0ZvcndhcmRMaXN0MTFpdGVtQXRJbmRleEVpCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJk
TGlzdDExc2V0Q2FwYWNpdHlFaQotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMmNvbnRh
aW5zSXRlbUVQTlNfMTFIaXN0b3J5SXRlbUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0
MTNiYWNrTGlzdENvdW50RXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0MTZmb3J3YXJk
TGlzdENvdW50RXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0MTdiYWNrTGlzdFdpdGhM
aW1pdEVpUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xMUhpc3RvcnlJdGVtRUVFTG0wRUVF
Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDIwZm9yd2FyZExpc3RXaXRoTGltaXRFaVJO
M1dURjZWZWN0b3JJTlMxXzZSZWZQdHJJTlNfMTFIaXN0b3J5SXRlbUVFRUxtMEVFRQotX19aTjdX
ZWJDb3JlMTVCYWNrRm9yd2FyZExpc3Q1Y2xvc2VFdgotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2Fy
ZExpc3Q2Y2xvc2VkRXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0NmdvQmFja0V2Ci1f
X1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDdhZGRJdGVtRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzExSGlzdG9yeUl0ZW1FRUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0N2VuYWJsZWRF
dgotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3Q3ZW50cmllc0V2Ci1fX1pON1dlYkNvcmUx
NUJhY2tGb3J3YXJkTGlzdDhiYWNrSXRlbUV2Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlz
dDhjYXBhY2l0eUV2Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDhnb1RvSXRlbUVQTlNf
MTFIaXN0b3J5SXRlbUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0OWdvRm9yd2FyZEV2
Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdEMxRVBOU180UGFnZUUKLV9fWk43V2ViQ29y
ZTE1QmFja0ZvcndhcmRMaXN0RDFFdgogX19aTjdXZWJDb3JlMTVET01XcmFwcGVyV29ybGQxNXVu
cmVnaXN0ZXJXb3JsZEV2CiBfX1pON1dlYkNvcmUxNURPTVdyYXBwZXJXb3JsZEQxRXYKIF9fWk43
V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMTJkZWxldGVPcmlnaW5FUE5TXzE0U2VjdXJpdHlPcmln
aW5FCkBAIC00MjIsNiArMzk5LDcgQEAgX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVy
MTZyZXN1bQogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTdzdXNwZW5kQW5pbWF0
aW9uc0VQTlNfOERvY3VtZW50RQogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMjBw
YXVzZUFuaW1hdGlvbkF0VGltZUVQTlNfMTJSZW5kZXJPYmplY3RFUktOU182U3RyaW5nRWQKIF9f
Wk43V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJvbGxlcjIxcGF1c2VUcmFuc2l0aW9uQXRUaW1lRVBO
U18xMlJlbmRlck9iamVjdEVSS05TXzZTdHJpbmdFZAorX19aTjdXZWJDb3JlMTlCYWNrRm9yd2Fy
ZExpc3RJbXBsQzFFUE5TXzRQYWdlRQogX19aTjdXZWJDb3JlMTlDU1NTdHlsZURlY2xhcmF0aW9u
MTFzZXRQcm9wZXJ0eUVSS05TXzZTdHJpbmdFUzNfUmkKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9y
Q29udHJvbGxlcjM0aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2CiBfX1pON1dl
YkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxMHNldEZvY3VzZWRFYgpAQCAtNTA2LDcgKzQ4NCw2
IEBAIF9fWk43V2ViQ29yZTRLVVJMQzFFTlNfMThQYXJzZWRVUkxTdHJpbmcKIF9fWk43V2ViQ29y
ZTRLVVJMQzFFUDVOU1VSTAogX19aTjdXZWJDb3JlNEtVUkxDMUVQSzdfX0NGVVJMCiBfX1pON1dl
YkNvcmU0S1VSTEMxRVJLUzBfUktOU182U3RyaW5nRQotX19aTjdXZWJDb3JlNGNvcmVFUDIwTlNV
UkxQcm90ZWN0aW9uU3BhY2UKIF9fWk43V2ViQ29yZTROb2RlMTByZW5kZXJSZWN0RVBiCiBfX1pO
N1dlYkNvcmU0Tm9kZTE3c3RvcElnbm9yaW5nTGVha3NFdgogX19aTjdXZWJDb3JlNE5vZGUxOHN0
YXJ0SWdub3JpbmdMZWFrc0V2CkBAIC01MzMsNiArNTEwLDcgQEAgX19aTjdXZWJDb3JlNFBhZ2U5
Z29Gb3J3YXJkRXYKIF9fWk43V2ViQ29yZTRQYWdlOWluaXRHcm91cEV2CiBfX1pON1dlYkNvcmU0
UGFnZUMxRVBOU18xMkNocm9tZUNsaWVudEVQTlNfMTdDb250ZXh0TWVudUNsaWVudEVQTlNfMTJF
ZGl0b3JDbGllbnRFUE5TXzEwRHJhZ0NsaWVudEVQTlNfMTVJbnNwZWN0b3JDbGllbnRFUE5TXzE4
UGx1Z2luSGFsdGVyQ2xpZW50RVBOU18yN0dlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudEVQTlNf
MjNEZXZpY2VPcmllbnRhdGlvbkNsaWVudEVQTlNfMjdCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGll
bnRFCiBfX1pON1dlYkNvcmU0UGFnZUQxRXYKK19fWk43V2ViQ29yZTRjb3JlRVAyME5TVVJMUHJv
dGVjdGlvblNwYWNlCiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pT
RE9NR2xvYmFsT2JqZWN0RVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FCiBfX1pON1dlYkNvcmU1
Q2FjaGUxMXNldERpc2FibGVkRWIKIF9fWk43V2ViQ29yZTVDYWNoZTEzZ2V0U3RhdGlzdGljc0V2
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5MCw4ICsxMzkwLDkgQEAKICAgICAgICAgICAgICdoaXN0b3J5L0JhY2tG
b3J3YXJkQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRD
b250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVy
Q2xpZW50LmgnLAotICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcCcsCiAg
ICAgICAgICAgICAnaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuaCcsCisgICAgICAgICAgICAnaGlz
dG9yeS9CYWNrRm9yd2FyZExpc3RJbXBsLmNwcCcsCisgICAgICAgICAgICAnaGlzdG9yeS9CYWNr
Rm9yd2FyZExpc3RJbXBsLmgnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcCcsCiAg
ICAgICAgICAgICAnaGlzdG9yeS9DYWNoZWRGcmFtZS5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjI3NDIp
CisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAwLDcg
QEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCBcCiAgICAgZWRp
dGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIFwKICAgICBoaXN0b3J5L0Jh
Y2tGb3J3YXJkQ29udHJvbGxlci5jcHAgXAotICAgIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNw
cCBcCisgICAgaGlzdG9yeS9CYWNrRm9yd2FyZExpc3RJbXBsLmNwcCBcCiAgICAgaGlzdG9yeS9D
YWNoZWRGcmFtZS5jcHAgXAogICAgIGhpc3RvcnkvQ2FjaGVkUGFnZS5jcHAgXAogICAgIGhpc3Rv
cnkvSGlzdG9yeUl0ZW0uY3BwIFwKQEAgLTEzNTQsNiArMTM1NCw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIGVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmggXAogICAgIGhpc3Rv
cnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmggXAogICAgIGhpc3RvcnkvQmFja0ZvcndhcmRDb250
cm9sbGVyQ2xpZW50LmggXAorICAgIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oIFwKICAg
ICBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5oIFwKICAgICBoaXN0b3J5L0NhY2hlZEZyYW1lLmgg
XAogICAgIGhpc3RvcnkvQ2FjaGVkUGFnZS5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OTQ2NSwxMSArNDk0NjUsMTUgQEAK
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caGlz
dG9yeVxCYWNrRm9yd2FyZExpc3QuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGhpc3Rvcnlc
QmFja0ZvcndhcmRMaXN0LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxoaXN0b3J5XEJhY2tGb3J3YXJkTGlzdC5oIg0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGhpc3RvcnlcQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxoaXN0b3J5XEJhY2tGb3J3
YXJkTGlzdEltcGwuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2Mjc0MikK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTE0LDcgKzExMTQsNiBAQAogCQk1MTcyMUZEMzExRDI3RUYyMDA2MzhCNDIgLyog
SlNCZWZvcmVQcm9jZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNzIxRkQxMTFEMjdFRjIwMDYzOEI0MiAvKiBKU0JlZm9yZVByb2Nlc3NF
dmVudC5oICovOyB9OwogCQk1MTcyMjA0QjExRDI5NjA1MDA2MzhCNDIgLyogQmVmb3JlUHJvY2Vz
c0V2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNzIyMDRBMTFEMjk2MDUwMDYzOEI0MiAvKiBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwICovOyB9
OwogCQk1MTc0MUQwRjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwQjBCMDcyNTlB
MDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE3NDFEMTAwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tG
b3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTc0MUQwQzBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLzsg
fTsKIAkJNTE3NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwRDBCMDcyNTlBMDBF
RDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MTc0MUQxMjBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NDFE
MEUwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLzsgfTsKIAkJNTE3NEUyMEEx
MEExRjQ0RjAwRjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzRFMjA4MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BT
dGF0ZUV2ZW50LmggKi87IH07CkBAIC00Njc5LDkgKzQ2NzgsMTEgQEAKIAkJQkNBODQ2RDYwREM2
N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBODQ2RDQwREM2N0EzNTAwMjZDMzA5IC8qIFJlbmRl
clJlcGxpY2EuY3BwICovOyB9OwogCQlCQ0E4NDZENzBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVy
UmVwbGljYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNBODQ2RDUwREM2N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2EuaCAqLzsgfTsKIAkJQkNB
ODVBMTAwQzNBRUFGNDAwNkY4MzA4IC8qIERPTVNWR051bWJlckludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4NUEwRjBDM0FFQUY0MDA2
RjgzMDggLyogRE9NU1ZHTnVtYmVySW50ZXJuYWwuaCAqLzsgfTsKLQkJQkNBOEM4MUUxMUUzRDM2
OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBOEM4MUMxMUUzRDM2OTAwODEyRkI3IC8qIEJh
Y2tGb3J3YXJkQ29udHJvbGxlci5oICovOyB9OworCQlCQ0E4QzgxRTExRTNEMzY5MDA4MTJGQjcg
LyogQmFja0ZvcndhcmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0E4QzgxQzExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRD
b250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkNBOEM4MUYxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4Qzgx
RDExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJ
QkNBOEM4MzExMUUzRDUzMjAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBOEM4MzAx
MUUzRDUzMjAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDQThDQTVGMTFFNEU2
RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDQTVEMTFFNEU2RDEwMDgxMkZCNyAvKiBC
YWNrRm9yd2FyZExpc3RJbXBsLmNwcCAqLzsgfTsKKwkJQkNBOENBNjAxMUU0RTZEMTAwODEyRkI3
IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQThDQTVFMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExp
c3RJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FBOTBDMjBBN0VCQTYwMDA4QjEy
MjkgLyogU2Nyb2xsYmFyLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkMxMDcyOTIxQTAwQzBDOEEzIC8q
IFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkQxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJD
b250ZW50VVJMUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNBQ0YzQkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVy
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02
ODIzLDcgKzY4MjQsNiBAQAogCQk1MTcyMUZEMTExRDI3RUYyMDA2MzhCNDIgLyogSlNCZWZvcmVQ
cm9jZXNzRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCZWZvcmVQ
cm9jZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3MjIwNEExMUQy
OTYwNTAwNjM4QjQyIC8qIEJlZm9yZVByb2Nlc3NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTc0MUQwQjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTc0MUQwQzBCMDcyNTlBMDBFRDQ0MkMg
LyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEJhY2tGb3J3YXJkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NzQxRDBEMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGlzdG9yeUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE3NDFEMEUwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXN0b3J5SXRlbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzRFMjA4MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0
ZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcFN0YXRlRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjg1LDYgKzEwMjg1LDggQEAKIAkJ
QkNBOEM4MUMxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrRm9yd2FyZENvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBOEM4MUQxMUUzRDM2OTAwODEyRkI3IC8qIEJh
Y2tGb3J3YXJkQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0E4QzgzMDExRTNENTMyMDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkQ29udHJv
bGxlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0E4Q0E1RDExRTRF
NkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkNBOENBNUUxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJk
TGlzdEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0ZvcndhcmRM
aXN0SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FBOTBDMjBBN0VCQTYw
MDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTY3JvbGxiYXIuY3BwOyBwYXRoID0gcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDsgc291
cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQlCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyog
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDQUNGM0JCMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRlcm4u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNvbnRlbnRVUkxQYXR0ZXJu
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTg4Miw4ICsxMTg4NCw5IEBACiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQk5MzYzQjYyOTBGOEU4RkUwMDA4MDM4MTAgLyogY2YgKi8sCiAJ
CQkJNTE2MEY0OTIwQjBBQTcxNTAwQzFEMkFGIC8qIG1hYyAqLywKLQkJCQk1MTc0MUQwQzBCMDcy
NTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLywKIAkJCQk1MTc0MUQwQjBCMDcy
NTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggKi8sCisJCQkJQkNBOENBNUQxMUU0RTZE
MTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwICovLAorCQkJCUJDQThDQTVFMTFF
NEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmggKi8sCiAJCQkJQkNBOEM4MUQx
MUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJQkNB
OEM4MUMxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oICovLAogCQkJ
CUJDQThDODMwMTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQu
aCAqLywKQEAgLTE5NzI0LDYgKzE5NzI3LDcgQEAKIAkJCQk5N0VGNTYxMTExRTQwNzgzMDA3RTAy
NkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQThDODFF
MTFFM0QzNjkwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQThDODMxMTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQThDQTYwMTFFNEU2RDEwMDgxMkZCNyAvKiBC
YWNrRm9yd2FyZExpc3RJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMDczLDcgKzIwMDc3LDYg
QEAKIAkJCQlBOENGRjA1MDBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTI5QTgxMjM3MEZCQjlDMUQwMDUxMDI5MyAvKiBBWE9iamVjdENh
Y2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5QTgxMjRCMEZCQjlDQTkwMDUxMDI5MyAvKiBB
WE9iamVjdENhY2hlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3NDFEMTAwQjA3MjU5QTAw
RUQ0NDJDIC8qIEJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzEyNEVF
NzBDMjY0MUNEMDA5RTIzNDkgLyogQmFySW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMz
REEyMTBEMDA2QzFEMDBFRjZGMjYgLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
NzIyMDRCMTFEMjk2MDUwMDYzOEI0MiAvKiBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yMjExMCw2ICsyMjExMyw3IEBACiAJCQkJQkNBOEM4MUYxMUUzRDM2OTAwODEy
RkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjRG
NUZGQjExQ0JEMkUxMDBBMTg2QkYgLyogUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3RUY1NjEwMTFFNDA3ODMwMDdFMDI2RiAvKiBIVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQ0E4Q0E1RjExRTRFNkQxMDA4MTJGQjcg
LyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUv
aGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2Mjc0MikKKysrIFdl
YkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQu
aCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExp
c3RJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNyArMzcsNyBAQCBCYWNr
Rm9yd2FyZENvbnRyb2xsZXI6OkJhY2tGb3J3YXJkQ29udHJvCiAgICAgLCBtX2NsaWVudChjbGll
bnQpCiB7CiAgICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgbV9saXN0ID0gQmFja0ZvcndhcmRM
aXN0OjpjcmVhdGUocGFnZSk7CisgICAgICAgIG1fbGlzdCA9IEJhY2tGb3J3YXJkTGlzdEltcGw6
OmNyZWF0ZShwYWdlKTsKICAgICBlbHNlCiAgICAgICAgIG1fbGlzdCA9IG1fY2xpZW50LT5jcmVh
dGVCYWNrRm9yd2FyZExpc3QoKTsKIH0KSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2Fy
ZENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRD
b250cm9sbGVyLmgJKHJldmlzaW9uIDYyNzQyKQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUGFnZTsKIGNsYXNzIEJhY2tGb3J3YXJkQ29udHJvbGxl
ckNsaWVudDsKIAogY2xhc3MgQmFja0ZvcndhcmRDb250cm9sbGVyIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCShyZXZpc2lvbiA2Mjc0
MikKKysrIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJC
YWNrRm9yd2FyZExpc3QuaCIKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkhpc3Rv
cnlJdGVtLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQYWdlQ2FjaGUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgRGVmYXVsdENhcGFjaXR5ID0gMTAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IE5vQ3VycmVudEl0ZW1JbmRleCA9IFVJTlRfTUFYOwotCi1CYWNrRm9yd2FyZExpc3Q6OkJhY2tG
b3J3YXJkTGlzdChQYWdlKiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX2N1cnJl
bnQoTm9DdXJyZW50SXRlbUluZGV4KQotICAgICwgbV9jYXBhY2l0eShEZWZhdWx0Q2FwYWNpdHkp
Ci0gICAgLCBtX2Nsb3NlZCh0cnVlKQotICAgICwgbV9lbmFibGVkKHRydWUpCi17Ci19Ci0KLUJh
Y2tGb3J3YXJkTGlzdDo6fkJhY2tGb3J3YXJkTGlzdCgpCi17Ci0gICAgQVNTRVJUKG1fY2xvc2Vk
KTsKLX0KLQotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5
SXRlbT4gcHJwSXRlbSkKLXsKLSAgICBBU1NFUlQocHJwSXRlbSk7Ci0gICAgaWYgKG1fY2FwYWNp
dHkgPT0gMCB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVG9z
cyBhbnl0aGluZyBpbiB0aGUgZm9yd2FyZCBsaXN0ICAgIAotICAgIGlmIChtX2N1cnJlbnQgIT0g
Tm9DdXJyZW50SXRlbUluZGV4KSB7Ci0gICAgICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBtX2N1
cnJlbnQgKyAxOwotICAgICAgICB3aGlsZSAobV9lbnRyaWVzLnNpemUoKSA+IHRhcmdldFNpemUp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0
KCk7Ci0gICAgICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgbV9l
bnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShp
dGVtLmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRvc3MgdGhlIGZpcnN0IGl0
ZW0gaWYgdGhlIGxpc3QgaXMgZ2V0dGluZyB0b28gYmlnLCBhcyBsb25nIGFzIHdlJ3JlIG5vdCB1
c2luZyBpdAotICAgIC8vIChvciBldmVuIGlmIHdlIGFyZSwgaWYgd2Ugb25seSB3YW50IDEgZW50
cnkpLgotICAgIGlmIChtX2VudHJpZXMuc2l6ZSgpID09IG1fY2FwYWNpdHkgJiYgKG1fY3VycmVu
dCAhPSAwIHx8IG1fY2FwYWNpdHkgPT0gMSkpIHsKLSAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVt
PiBpdGVtID0gbV9lbnRyaWVzWzBdOwotICAgICAgICBtX2VudHJpZXMucmVtb3ZlKDApOwotICAg
ICAgICBtX2VudHJ5SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1v
dmUoaXRlbS5nZXQoKSk7Ci0gICAgICAgIG1fY3VycmVudC0tOwotICAgICAgICBpZiAobV9wYWdl
KQotICAgICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5k
aXNwYXRjaERpZFJlbW92ZUJhY2tGb3J3YXJkSXRlbShpdGVtLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICBtX2VudHJ5SGFzaC5hZGQocHJwSXRlbS5nZXQoKSk7Ci0gICAgbV9lbnRyaWVzLmluc2VydCht
X2N1cnJlbnQgKyAxLCBwcnBJdGVtKTsKLSAgICBtX2N1cnJlbnQrKzsKLSAgICBpZiAobV9wYWdl
KQotICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3Bh
dGNoRGlkQWRkQmFja0ZvcndhcmRJdGVtKGN1cnJlbnRJdGVtKCkpOwotfQotCi12b2lkIEJhY2tG
b3J3YXJkTGlzdDo6Z29CYWNrKCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50ID4gMCk7Ci0gICAg
aWYgKG1fY3VycmVudCA+IDApIHsKLSAgICAgICAgbV9jdXJyZW50LS07Ci0gICAgICAgIGlmICht
X3BhZ2UpCi0gICAgICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmRpc3BhdGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJbmRleCgpOwotICAgIH0KLX0KLQotdm9p
ZCBCYWNrRm9yd2FyZExpc3Q6OmdvRm9yd2FyZCgpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudCA8
IG1fZW50cmllcy5zaXplKCkgLSAxKTsKLSAgICBpZiAobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNp
emUoKSAtIDEpIHsKLSAgICAgICAgbV9jdXJyZW50Kys7Ci0gICAgICAgIGlmIChtX3BhZ2UpCi0g
ICAgICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3Bh
dGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJbmRleCgpOwotICAgIH0KLX0KLQotdm9pZCBCYWNrRm9y
d2FyZExpc3Q6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQotewotICAgIGlmICghbV9lbnRy
aWVzLnNpemUoKSB8fCAhaXRlbSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNp
Z25lZCBpbnQgaW5kZXggPSAwOwotICAgIGZvciAoOyBpbmRleCA8IG1fZW50cmllcy5zaXplKCk7
ICsraW5kZXgpCi0gICAgICAgIGlmIChtX2VudHJpZXNbaW5kZXhdID09IGl0ZW0pCi0gICAgICAg
ICAgICBicmVhazsKLSAgICBpZiAoaW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKSB7Ci0gICAgICAg
IG1fY3VycmVudCA9IGluZGV4OwotICAgICAgICBpZiAobV9wYWdlKQotICAgICAgICAgICAgbV9w
YWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJh
Y2tGb3J3YXJkSW5kZXgoKTsKLSAgICB9Ci19Ci0KLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExp
c3Q6OmJhY2tJdGVtKCkKLXsKLSAgICBpZiAobV9jdXJyZW50ICYmIG1fY3VycmVudCAhPSBOb0N1
cnJlbnRJdGVtSW5kZXgpCi0gICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50IC0gMV0u
Z2V0KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6
OmN1cnJlbnRJdGVtKCkKLXsKLSAgICBpZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRl
eCkKLSAgICAgICAgcmV0dXJuIG1fZW50cmllc1ttX2N1cnJlbnRdLmdldCgpOwotICAgIHJldHVy
biAwOwotfQotCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSgpCi17
Ci0gICAgaWYgKG1fZW50cmllcy5zaXplKCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUo
KSAtIDEpCi0gICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0KCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdFdpdGhMaW1p
dChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQotewotICAgIGxpc3QuY2xlYXIo
KTsKLSAgICBpZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkgewotICAgICAgICB1
bnNpZ25lZCBmaXJzdCA9IG1heCgoaW50KW1fY3VycmVudCAtIGxpbWl0LCAwKTsKLSAgICAgICAg
Zm9yICg7IGZpcnN0IDwgbV9jdXJyZW50OyArK2ZpcnN0KQotICAgICAgICAgICAgbGlzdC5hcHBl
bmQobV9lbnRyaWVzW2ZpcnN0XSk7Ci0gICAgfQotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6
Zm9yd2FyZExpc3RXaXRoTGltaXQoaW50IGxpbWl0LCBIaXN0b3J5SXRlbVZlY3RvciYgbGlzdCkK
LXsKLSAgICBBU1NFUlQobGltaXQgPiAtMSk7Ci0gICAgbGlzdC5jbGVhcigpOwotICAgIGlmICgh
bV9lbnRyaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNpZ25l
ZCBsYXN0RW50cnkgPSBtX2VudHJpZXMuc2l6ZSgpIC0gMTsKLSAgICBpZiAobV9jdXJyZW50IDwg
bGFzdEVudHJ5KSB7Ci0gICAgICAgIGludCBsYXN0ID0gbWluKG1fY3VycmVudCArIGxpbWl0LCBs
YXN0RW50cnkpOwotICAgICAgICBsaW1pdCA9IG1fY3VycmVudCArIDE7Ci0gICAgICAgIGZvciAo
OyBsaW1pdCA8PSBsYXN0OyArK2xpbWl0KQotICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRy
aWVzW2xpbWl0XSk7Ci0gICAgfQotfQotCi1pbnQgQmFja0ZvcndhcmRMaXN0OjpjYXBhY2l0eSgp
Ci17Ci0gICAgcmV0dXJuIG1fY2FwYWNpdHk7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0Ojpz
ZXRDYXBhY2l0eShpbnQgc2l6ZSkKLXsgICAgCi0gICAgd2hpbGUgKHNpemUgPCAoaW50KW1fZW50
cmllcy5zaXplKCkpIHsKLSAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRy
aWVzLmxhc3QoKTsKLSAgICAgICAgbV9lbnRyaWVzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgbV9l
bnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0u
Z2V0KCkpOwotICAgIH0KLQotICAgIGlmICghc2l6ZSkKLSAgICAgICAgbV9jdXJyZW50ID0gTm9D
dXJyZW50SXRlbUluZGV4OwotICAgIGVsc2UgaWYgKG1fY3VycmVudCA+IG1fZW50cmllcy5zaXpl
KCkgLSAxKSB7Ci0gICAgICAgIG1fY3VycmVudCA9IG1fZW50cmllcy5zaXplKCkgLSAxOwotICAg
ICAgICBpZiAobV9wYWdlKQotICAgICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVy
KCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKTsKLSAgICB9
Ci0gICAgbV9jYXBhY2l0eSA9IHNpemU7Ci19Ci0KLWJvb2wgQmFja0ZvcndhcmRMaXN0OjplbmFi
bGVkKCkKLXsKLSAgICByZXR1cm4gbV9lbmFibGVkOwotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlz
dDo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9lbmFibGVkID0gZW5hYmxlZDsK
LSAgICBpZiAoIWVuYWJsZWQpIHsKLSAgICAgICAgaW50IGNhcGFjaXR5ID0gbV9jYXBhY2l0eTsK
LSAgICAgICAgc2V0Q2FwYWNpdHkoMCk7Ci0gICAgICAgIHNldENhcGFjaXR5KGNhcGFjaXR5KTsK
LSAgICB9Ci19Ci0KLWludCBCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKQotewotICAg
IHJldHVybiBtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4ID8gMCA6IG1fY3VycmVudDsK
LX0KLQotaW50IEJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RDb3VudCgpCi17Ci0gICAgcmV0
dXJuIG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggPyAwIDogKGludCltX2VudHJpZXMu
c2l6ZSgpIC0gKG1fY3VycmVudCArIDEpOwotfQotCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRM
aXN0OjppdGVtQXRJbmRleChpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdp
dGhvdXQgZG9pbmcgbWF0aCBvbiBpbmRleCB0byBhdm9pZCBvdmVyZmxvdy4KLSAgICBpZiAoaW5k
ZXggPCAtKGludCltX2N1cnJlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGlmIChp
bmRleCA+IGZvcndhcmRMaXN0Q291bnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAot
ICAgIHJldHVybiBtX2VudHJpZXNbaW5kZXggKyBtX2N1cnJlbnRdLmdldCgpOwotfQotCi1IaXN0
b3J5SXRlbVZlY3RvciYgQmFja0ZvcndhcmRMaXN0OjplbnRyaWVzKCkKLXsKLSAgICByZXR1cm4g
bV9lbnRyaWVzOwotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJdGVtKQotewotICAgIEFTU0VSVChuZXdJdGVtKTsKLSAg
ICBBU1NFUlQobmV3SXRlbS0+c3RhdGVPYmplY3QoKSk7Ci0gICAgCi0gICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBjdXJyZW50ID0gY3VycmVudEl0ZW0oKTsKLSAgICBBU1NFUlQoY3VycmVudCk7Ci0K
LSAgICBhZGRJdGVtKG5ld0l0ZW0pOwotICAgIAotICAgIGlmICghY3VycmVudC0+c3RhdGVPYmpl
Y3QoKSkKLSAgICAgICAgY3VycmVudC0+c2V0U3RhdGVPYmplY3QoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoKSk7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9zZSgpCi17Ci0g
ICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKG1fZW50cmllc1tpXS5nZXQo
KSk7Ci0gICAgbV9lbnRyaWVzLmNsZWFyKCk7Ci0gICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKLSAg
ICBtX3BhZ2UgPSAwOwotICAgIG1fY2xvc2VkID0gdHJ1ZTsKLX0KLQotYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNsb3NlZCgpCi17Ci0gICAgcmV0dXJuIG1fY2xvc2VkOwotfQotCi12b2lkIEJhY2tG
b3J3YXJkTGlzdDo6cmVtb3ZlSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKLXsKLSAgICBpZiAoIWl0
ZW0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9lbnRyaWVzLnNpemUoKTsgKytpKQotICAgICAgICBpZiAobV9lbnRyaWVzW2ldID09IGl0ZW0p
IHsKLSAgICAgICAgICAgIG1fZW50cmllcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBtX2VudHJ5
SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVu
dEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQgPCBpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKG1fY3VycmVudCA+IGkpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50LS07
Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2Vu
dHJpZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPj0gY291bnQpCi0g
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudCA9IGNvdW50ID8gY291bnQgLSAxIDogTm9DdXJy
ZW50SXRlbUluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLX0KLQotYm9vbCBCYWNrRm9yd2FyZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSog
ZW50cnkpCi17Ci0gICAgcmV0dXJuIG1fZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKLX0KLQot
I2lmIEVOQUJMRShXTUwpCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJXTUxQYWdlSGlzdG9y
eSgpCi17Ci0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJl
bnRJdGVtKCk7Ci0KLSAgICBpbnQgc2l6ZSA9IG1fZW50cmllcy5zaXplKCk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9l
bnRyaWVzW2ldLmdldCgpKTsKLQotICAgIG1fZW50cmllcy5jbGVhcigpOwotICAgIG1fZW50cnlI
YXNoLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OwotCi0gICAg
Ly8gU3BlYzogVGhlIGhpc3Rvcnkgc3RhY2sgbWF5IGJlIHJlc2V0IHRvIGEgc3RhdGUgd2hlcmUg
aXQgb25seSBjb250YWlucyB0aGUgY3VycmVudCBjYXJkLgotICAgIGFkZEl0ZW0oY3VycmVudEl0
ZW0pOwotfQotI2VuZGlmCi0KLX07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5
L0JhY2tGb3J3YXJkTGlzdC5oCShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTkgKzMwLDEzIEBACiAKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIaXN0b3J5SXRlbTsKLWNs
YXNzIFBhZ2U7Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci1jbGFzcyBTdHJpbmc7CiAK
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRlbVZlY3RvcjsK
LXR5cGVkZWYgSGFzaFNldDxSZWZQdHI8SGlzdG9yeUl0ZW0+ID4gSGlzdG9yeUl0ZW1IYXNoU2V0
OwogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAvLyBJbiB0aGUgQ2hyb21pdW0gcG9ydCwgdGhl
IGJhY2svZm9yd2FyZCBsaXN0IGlzIG1hbmFnZWQgZXh0ZXJuYWxseS4KQEAgLTYyLDY1ICs1Niw1
NiBAQCBwdWJsaWM6CiAKIGNsYXNzIEJhY2tGb3J3YXJkTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVk
PEJhY2tGb3J3YXJkTGlzdD4gewogcHVibGljOiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNr
Rm9yd2FyZExpc3Q+IGNyZWF0ZShQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQmFj
a0ZvcndhcmRMaXN0KHBhZ2UpKTsgfQotICAgIH5CYWNrRm9yd2FyZExpc3QoKTsKKyAgICB2aXJ0
dWFsIH5CYWNrRm9yd2FyZExpc3QoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNCYWNrRm9yd2FyZExpc3RJbXBsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQogICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIg
bWV0aG9kcy4gCi0gICAgdm9pZCBzZXRDbGllbnQoQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBjbGll
bnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KEJh
Y2tGb3J3YXJkTGlzdENsaWVudCopID0gMDsKICNlbmRpZgotICAgIAotICAgIFBhZ2UqIHBhZ2Uo
KSB7IHJldHVybiBtX3BhZ2U7IH0KLSAgICAKLSAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4pOwotICAgIHZvaWQgZ29CYWNrKCk7Ci0gICAgdm9pZCBnb0ZvcndhcmQoKTsK
LSAgICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
SXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnb0Jh
Y2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdvRm9yd2FyZCgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qKSA9IDA7CiAgICAgICAgIAotICAgIEhpc3RvcnlJ
dGVtKiBiYWNrSXRlbSgpOwotICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSgpOwotICAgIEhp
c3RvcnlJdGVtKiBmb3J3YXJkSXRlbSgpOwotICAgIEhpc3RvcnlJdGVtKiBpdGVtQXRJbmRleChp
bnQpOwotCi0gICAgdm9pZCBiYWNrTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7Ci0gICAgdm9pZCBmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7Ci0KLSAgICBpbnQgY2FwYWNpdHkoKTsKLSAgICB2b2lkIHNldENhcGFjaXR5KGludCk7Ci0g
ICAgYm9vbCBlbmFibGVkKCk7Ci0gICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwotICAgIGludCBi
YWNrTGlzdENvdW50KCk7Ci0gICAgaW50IGZvcndhcmRMaXN0Q291bnQoKTsKLSAgICBib29sIGNv
bnRhaW5zSXRlbShIaXN0b3J5SXRlbSopOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGJhY2tJ
dGVtKCkgPSAwOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtKCkgPSAwOwor
ICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGZvcndhcmRJdGVtKCkgPSAwOworICAgIHZpcnR1YWwg
SGlzdG9yeUl0ZW0qIGl0ZW1BdEluZGV4KGludCkgPSAwOwogCi0gICAgdm9pZCBjbG9zZSgpOwot
ICAgIGJvb2wgY2xvc2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGJhY2tMaXN0V2l0aExpbWl0KGlu
dCwgSGlzdG9yeUl0ZW1WZWN0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZvcndhcmRMaXN0
V2l0aExpbWl0KGludCwgSGlzdG9yeUl0ZW1WZWN0b3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIGlu
dCBjYXBhY2l0eSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FwYWNpdHkoaW50KSA9IDA7
CisgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEVu
YWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgaW50IGJhY2tMaXN0Q291bnQoKSA9IDA7Cisg
ICAgdmlydHVhbCBpbnQgZm9yd2FyZExpc3RDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
Y29udGFpbnNJdGVtKEhpc3RvcnlJdGVtKikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsb3Nl
KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjbG9zZWQoKSA9IDA7CiAgICAgCi0gICAgdm9pZCBy
ZW1vdmVJdGVtKEhpc3RvcnlJdGVtKik7Ci0gICAgSGlzdG9yeUl0ZW1WZWN0b3ImIGVudHJpZXMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShIaXN0b3J5SXRlbSopICA9IDA7CisgICAg
dmlydHVhbCBIaXN0b3J5SXRlbVZlY3RvciYgZW50cmllcygpICA9IDA7CiAgICAgCi0gICAgdm9p
ZCBwdXNoU3RhdGVJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHVzaFN0YXRlSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPikgPSAwOwogCiAjaWYgRU5B
QkxFKFdNTCkKLSAgICB2b2lkIGNsZWFyV01MUGFnZUhpc3RvcnkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJXTUxQYWdlSGlzdG9yeSgpICA9IDA7CiAjZW5kaWYKIAotcHJpdmF0ZToKLSAgICBC
YWNrRm9yd2FyZExpc3QoUGFnZSopOwotICAgIAotICAgIFBhZ2UqIG1fcGFnZTsKLSNpZiBQTEFU
Rk9STShDSFJPTUlVTSkgCi0gICAgQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBtX2NsaWVudDsKLSNl
bHNlCi0gICAgSGlzdG9yeUl0ZW1WZWN0b3IgbV9lbnRyaWVzOwotICAgIEhpc3RvcnlJdGVtSGFz
aFNldCBtX2VudHJ5SGFzaDsKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnQ7Ci0jZW5kaWYKLSAgICB1
bnNpZ25lZCBtX2NhcGFjaXR5OwotICAgIGJvb2wgbV9jbG9zZWQ7Ci0gICAgYm9vbCBtX2VuYWJs
ZWQ7Citwcm90ZWN0ZWQ6CisgICAgQmFja0ZvcndhcmRMaXN0KCkKKyAgICB7CisgICAgfQogfTsK
ICAgICAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYKKyNlbmRpZiAvLyBCYWNrRm9yd2FyZExpc3RfaApJbmRleDogV2ViQ29yZS9oaXN0b3J5
L0JhY2tGb3J3YXJkTGlzdEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZExpc3RJbXBsLmNwcAkocmV2aXNpb24gNjI2NzQpCShmcm9tIFdlYkNvcmUvaGlz
dG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwOjYyNjc0KQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tG
b3J3YXJkTGlzdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKworI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKKyNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgRGVmYXVsdENhcGFj
aXR5ID0gMTAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE5vQ3VycmVudEl0ZW1JbmRleCA9IFVJ
TlRfTUFYOworCitCYWNrRm9yd2FyZExpc3Q6OkJhY2tGb3J3YXJkTGlzdChQYWdlKiBwYWdlKQor
ICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2N1cnJlbnQoTm9DdXJyZW50SXRlbUluZGV4KQor
ICAgICwgbV9jYXBhY2l0eShEZWZhdWx0Q2FwYWNpdHkpCisgICAgLCBtX2Nsb3NlZCh0cnVlKQor
ICAgICwgbV9lbmFibGVkKHRydWUpCit7Cit9CisKK0JhY2tGb3J3YXJkTGlzdDo6fkJhY2tGb3J3
YXJkTGlzdCgpCit7CisgICAgQVNTRVJUKG1fY2xvc2VkKTsKK30KKwordm9pZCBCYWNrRm9yd2Fy
ZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSkKK3sKKyAgICBB
U1NFUlQocHJwSXRlbSk7CisgICAgaWYgKG1fY2FwYWNpdHkgPT0gMCB8fCAhbV9lbmFibGVkKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVG9zcyBhbnl0aGluZyBpbiB0aGUgZm9yd2Fy
ZCBsaXN0ICAgIAorICAgIGlmIChtX2N1cnJlbnQgIT0gTm9DdXJyZW50SXRlbUluZGV4KSB7Cisg
ICAgICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBtX2N1cnJlbnQgKyAxOworICAgICAgICB3aGls
ZSAobV9lbnRyaWVzLnNpemUoKSA+IHRhcmdldFNpemUpIHsKKyAgICAgICAgICAgIFJlZlB0cjxI
aXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0KCk7CisgICAgICAgICAgICBtX2VudHJp
ZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwor
ICAgICAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShpdGVtLmdldCgpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFRvc3MgdGhlIGZpcnN0IGl0ZW0gaWYgdGhlIGxpc3QgaXMgZ2V0dGlu
ZyB0b28gYmlnLCBhcyBsb25nIGFzIHdlJ3JlIG5vdCB1c2luZyBpdAorICAgIC8vIChvciBldmVu
IGlmIHdlIGFyZSwgaWYgd2Ugb25seSB3YW50IDEgZW50cnkpLgorICAgIGlmIChtX2VudHJpZXMu
c2l6ZSgpID09IG1fY2FwYWNpdHkgJiYgKG1fY3VycmVudCAhPSAwIHx8IG1fY2FwYWNpdHkgPT0g
MSkpIHsKKyAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzWzBdOwor
ICAgICAgICBtX2VudHJpZXMucmVtb3ZlKDApOworICAgICAgICBtX2VudHJ5SGFzaC5yZW1vdmUo
aXRlbSk7CisgICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgICAg
IG1fY3VycmVudC0tOworICAgICAgICBpZiAobV9wYWdlKQorICAgICAgICAgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZFJlbW92ZUJhY2tGb3J3
YXJkSXRlbShpdGVtLmdldCgpKTsKKyAgICB9CisKKyAgICBtX2VudHJ5SGFzaC5hZGQocHJwSXRl
bS5nZXQoKSk7CisgICAgbV9lbnRyaWVzLmluc2VydChtX2N1cnJlbnQgKyAxLCBwcnBJdGVtKTsK
KyAgICBtX2N1cnJlbnQrKzsKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQWRkQmFja0ZvcndhcmRJdGVt
KGN1cnJlbnRJdGVtKCkpOworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Z29CYWNrKCkKK3sK
KyAgICBBU1NFUlQobV9jdXJyZW50ID4gMCk7CisgICAgaWYgKG1fY3VycmVudCA+IDApIHsKKyAg
ICAgICAgbV9jdXJyZW50LS07CisgICAgICAgIGlmIChtX3BhZ2UpCisgICAgICAgICAgICBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQ2hhbmdlQmFj
a0ZvcndhcmRJbmRleCgpOworICAgIH0KK30KKwordm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvRm9y
d2FyZCgpCit7CisgICAgQVNTRVJUKG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkgLSAxKTsK
KyAgICBpZiAobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpIHsKKyAgICAgICAgbV9j
dXJyZW50Kys7CisgICAgICAgIGlmIChtX3BhZ2UpCisgICAgICAgICAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJ
bmRleCgpOworICAgIH0KK30KKwordm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKEhpc3Rv
cnlJdGVtKiBpdGVtKQoreworICAgIGlmICghbV9lbnRyaWVzLnNpemUoKSB8fCAhaXRlbSkKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworICAg
IGZvciAoOyBpbmRleCA8IG1fZW50cmllcy5zaXplKCk7ICsraW5kZXgpCisgICAgICAgIGlmICht
X2VudHJpZXNbaW5kZXhdID09IGl0ZW0pCisgICAgICAgICAgICBicmVhazsKKyAgICBpZiAoaW5k
ZXggPCBtX2VudHJpZXMuc2l6ZSgpKSB7CisgICAgICAgIG1fY3VycmVudCA9IGluZGV4OworICAg
ICAgICBpZiAobV9wYWdlKQorICAgICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVy
KCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKTsKKyAgICB9
Cit9CisKK0hpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmJhY2tJdGVtKCkKK3sKKyAgICBp
ZiAobV9jdXJyZW50ICYmIG1fY3VycmVudCAhPSBOb0N1cnJlbnRJdGVtSW5kZXgpCisgICAgICAg
IHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50IC0gMV0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK0hpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmN1cnJlbnRJdGVtKCkKK3sKKyAgICBp
ZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkKKyAgICAgICAgcmV0dXJuIG1fZW50
cmllc1ttX2N1cnJlbnRdLmdldCgpOworICAgIHJldHVybiAwOworfQorCitIaXN0b3J5SXRlbSog
QmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSgpCit7CisgICAgaWYgKG1fZW50cmllcy5zaXpl
KCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpCisgICAgICAgIHJldHVybiBt
X2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
QmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdFdpdGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVt
VmVjdG9yJiBsaXN0KQoreworICAgIGxpc3QuY2xlYXIoKTsKKyAgICBpZiAobV9jdXJyZW50ICE9
IE5vQ3VycmVudEl0ZW1JbmRleCkgeworICAgICAgICB1bnNpZ25lZCBmaXJzdCA9IG1heCgoaW50
KW1fY3VycmVudCAtIGxpbWl0LCAwKTsKKyAgICAgICAgZm9yICg7IGZpcnN0IDwgbV9jdXJyZW50
OyArK2ZpcnN0KQorICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRyaWVzW2ZpcnN0XSk7Cisg
ICAgfQorfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RXaXRoTGltaXQoaW50
IGxpbWl0LCBIaXN0b3J5SXRlbVZlY3RvciYgbGlzdCkKK3sKKyAgICBBU1NFUlQobGltaXQgPiAt
MSk7CisgICAgbGlzdC5jbGVhcigpOworICAgIGlmICghbV9lbnRyaWVzLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICB1bnNpZ25lZCBsYXN0RW50cnkgPSBtX2VudHJpZXMu
c2l6ZSgpIC0gMTsKKyAgICBpZiAobV9jdXJyZW50IDwgbGFzdEVudHJ5KSB7CisgICAgICAgIGlu
dCBsYXN0ID0gbWluKG1fY3VycmVudCArIGxpbWl0LCBsYXN0RW50cnkpOworICAgICAgICBsaW1p
dCA9IG1fY3VycmVudCArIDE7CisgICAgICAgIGZvciAoOyBsaW1pdCA8PSBsYXN0OyArK2xpbWl0
KQorICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRyaWVzW2xpbWl0XSk7CisgICAgfQorfQor
CitpbnQgQmFja0ZvcndhcmRMaXN0OjpjYXBhY2l0eSgpCit7CisgICAgcmV0dXJuIG1fY2FwYWNp
dHk7Cit9CisKK3ZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRDYXBhY2l0eShpbnQgc2l6ZSkKK3sg
ICAgCisgICAgd2hpbGUgKHNpemUgPCAoaW50KW1fZW50cmllcy5zaXplKCkpIHsKKyAgICAgICAg
UmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKKyAgICAgICAgbV9l
bnRyaWVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwor
ICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0uZ2V0KCkpOworICAgIH0KKworICAgIGlm
ICghc2l6ZSkKKyAgICAgICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworICAgIGVs
c2UgaWYgKG1fY3VycmVudCA+IG1fZW50cmllcy5zaXplKCkgLSAxKSB7CisgICAgICAgIG1fY3Vy
cmVudCA9IG1fZW50cmllcy5zaXplKCkgLSAxOworICAgICAgICBpZiAobV9wYWdlKQorICAgICAg
ICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERp
ZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKTsKKyAgICB9CisgICAgbV9jYXBhY2l0eSA9IHNpemU7
Cit9CisKK2Jvb2wgQmFja0ZvcndhcmRMaXN0OjplbmFibGVkKCkKK3sKKyAgICByZXR1cm4gbV9l
bmFibGVkOworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0RW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAg
ICAgICAgaW50IGNhcGFjaXR5ID0gbV9jYXBhY2l0eTsKKyAgICAgICAgc2V0Q2FwYWNpdHkoMCk7
CisgICAgICAgIHNldENhcGFjaXR5KGNhcGFjaXR5KTsKKyAgICB9Cit9CisKK2ludCBCYWNrRm9y
d2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKQoreworICAgIHJldHVybiBtX2N1cnJlbnQgPT0gTm9D
dXJyZW50SXRlbUluZGV4ID8gMCA6IG1fY3VycmVudDsKK30KKworaW50IEJhY2tGb3J3YXJkTGlz
dDo6Zm9yd2FyZExpc3RDb3VudCgpCit7CisgICAgcmV0dXJuIG1fY3VycmVudCA9PSBOb0N1cnJl
bnRJdGVtSW5kZXggPyAwIDogKGludCltX2VudHJpZXMuc2l6ZSgpIC0gKG1fY3VycmVudCArIDEp
OworfQorCitIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleChpbnQgaW5k
ZXgpCit7CisgICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdpdGhvdXQgZG9pbmcgbWF0aCBvbiBpbmRl
eCB0byBhdm9pZCBvdmVyZmxvdy4KKyAgICBpZiAoaW5kZXggPCAtKGludCltX2N1cnJlbnQpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmIChpbmRleCA+IGZvcndhcmRMaXN0Q291bnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIHJldHVybiBtX2VudHJpZXNbaW5k
ZXggKyBtX2N1cnJlbnRdLmdldCgpOworfQorCitIaXN0b3J5SXRlbVZlY3RvciYgQmFja0Zvcndh
cmRMaXN0OjplbnRyaWVzKCkKK3sKKyAgICByZXR1cm4gbV9lbnRyaWVzOworfQorCit2b2lkIEJh
Y2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJ
dGVtKQoreworICAgIEFTU0VSVChuZXdJdGVtKTsKKyAgICBBU1NFUlQobmV3SXRlbS0+c3RhdGVP
YmplY3QoKSk7CisgICAgCisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50ID0gY3VycmVu
dEl0ZW0oKTsKKyAgICBBU1NFUlQoY3VycmVudCk7CisKKyAgICBhZGRJdGVtKG5ld0l0ZW0pOwor
ICAgIAorICAgIGlmICghY3VycmVudC0+c3RhdGVPYmplY3QoKSkKKyAgICAgICAgY3VycmVudC0+
c2V0U3RhdGVPYmplY3QoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKSk7Cit9CisKK3Zv
aWQgQmFja0ZvcndhcmRMaXN0OjpjbG9zZSgpCit7CisgICAgaW50IHNpemUgPSBtX2VudHJpZXMu
c2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBwYWdl
Q2FjaGUoKS0+cmVtb3ZlKG1fZW50cmllc1tpXS5nZXQoKSk7CisgICAgbV9lbnRyaWVzLmNsZWFy
KCk7CisgICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKKyAgICBtX3BhZ2UgPSAwOworICAgIG1fY2xv
c2VkID0gdHJ1ZTsKK30KKworYm9vbCBCYWNrRm9yd2FyZExpc3Q6OmNsb3NlZCgpCit7CisgICAg
cmV0dXJuIG1fY2xvc2VkOworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6cmVtb3ZlSXRlbShI
aXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUoKTsgKytpKQor
ICAgICAgICBpZiAobV9lbnRyaWVzW2ldID09IGl0ZW0pIHsKKyAgICAgICAgICAgIG1fZW50cmll
cy5yZW1vdmUoaSk7CisgICAgICAgICAgICBtX2VudHJ5SGFzaC5yZW1vdmUoaXRlbSk7CisgICAg
ICAgICAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQg
PCBpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1fY3VycmVudCA+
IGkpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50LS07CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2VudHJpZXMuc2l6ZSgpOworICAgICAgICAg
ICAgICAgIGlmIChtX2N1cnJlbnQgPj0gY291bnQpCisgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudCA9IGNvdW50ID8gY291bnQgLSAxIDogTm9DdXJyZW50SXRlbUluZGV4OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KK30KKworYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSogZW50cnkpCit7CisgICAgcmV0dXJuIG1f
ZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKK30KKworI2lmIEVOQUJMRShXTUwpCit2b2lkIEJh
Y2tGb3J3YXJkTGlzdDo6Y2xlYXJXTUxQYWdlSGlzdG9yeSgpCit7CisgICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJlbnRJdGVtKCk7CisKKyAgICBpbnQgc2l6
ZSA9IG1fZW50cmllcy5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
CisgICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9lbnRyaWVzW2ldLmdldCgpKTsKKworICAg
IG1fZW50cmllcy5jbGVhcigpOworICAgIG1fZW50cnlIYXNoLmNsZWFyKCk7CisgICAgbV9jdXJy
ZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworCisgICAgLy8gU3BlYzogVGhlIGhpc3Rvcnkgc3Rh
Y2sgbWF5IGJlIHJlc2V0IHRvIGEgc3RhdGUgd2hlcmUgaXQgb25seSBjb250YWlucyB0aGUgY3Vy
cmVudCBjYXJkLgorICAgIGFkZEl0ZW0oY3VycmVudEl0ZW0pOworfQorI2VuZGlmCisKK307IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdElt
cGwuY3BwCShyZXZpc2lvbiA2MjY3NCkKKysrIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3RJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJC
YWNrRm9yd2FyZExpc3RJbXBsLmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBEZWZhdWx0Q2FwYWNpdHkgPSAxMDA7CiBzdGF0aWMgY29uc3QgdW5z
aWduZWQgTm9DdXJyZW50SXRlbUluZGV4ID0gVUlOVF9NQVg7CiAKLUJhY2tGb3J3YXJkTGlzdDo6
QmFja0ZvcndhcmRMaXN0KFBhZ2UqIHBhZ2UpCitCYWNrRm9yd2FyZExpc3RJbXBsOjpCYWNrRm9y
d2FyZExpc3RJbXBsKFBhZ2UqIHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fY3Vy
cmVudChOb0N1cnJlbnRJdGVtSW5kZXgpCiAgICAgLCBtX2NhcGFjaXR5KERlZmF1bHRDYXBhY2l0
eSkKQEAgLTUyLDEyICs1MiwxMiBAQCBCYWNrRm9yd2FyZExpc3Q6OkJhY2tGb3J3YXJkTGlzdChQ
YWdlKiBwCiB7CiB9CiAKLUJhY2tGb3J3YXJkTGlzdDo6fkJhY2tGb3J3YXJkTGlzdCgpCitCYWNr
Rm9yd2FyZExpc3RJbXBsOjp+QmFja0ZvcndhcmRMaXN0SW1wbCgpCiB7CiAgICAgQVNTRVJUKG1f
Y2xvc2VkKTsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4gcHJwSXRlbSkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6YWRkSXRlbShQ
YXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogewogICAgIEFTU0VSVChwcnBJdGVtKTsK
ICAgICBpZiAobV9jYXBhY2l0eSA9PSAwIHx8ICFtX2VuYWJsZWQpCkBAIC05Myw3ICs5Myw3IEBA
IHZvaWQgQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFBhc3NSZWZQdHIKICAgICAgICAgbV9wYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZEFkZEJhY2tGb3J3
YXJkSXRlbShjdXJyZW50SXRlbSgpKTsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvQmFj
aygpCit2b2lkIEJhY2tGb3J3YXJkTGlzdEltcGw6OmdvQmFjaygpCiB7CiAgICAgQVNTRVJUKG1f
Y3VycmVudCA+IDApOwogICAgIGlmIChtX2N1cnJlbnQgPiAwKSB7CkBAIC0xMDMsNyArMTAzLDcg
QEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvQmFjaygpCiAgICAgfQogfQogCi12b2lkIEJhY2tG
b3J3YXJkTGlzdDo6Z29Gb3J3YXJkKCkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6Z29Gb3J3
YXJkKCkKIHsKICAgICBBU1NFUlQobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpOwog
ICAgIGlmIChtX2N1cnJlbnQgPCBtX2VudHJpZXMuc2l6ZSgpIC0gMSkgewpAQCAtMTEzLDcgKzEx
Myw3IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0Ojpnb0ZvcndhcmQoKQogICAgIH0KIH0KIAotdm9p
ZCBCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQordm9pZCBCYWNr
Rm9yd2FyZExpc3RJbXBsOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICBpZiAo
IW1fZW50cmllcy5zaXplKCkgfHwgIWl0ZW0pCiAgICAgICAgIHJldHVybjsKQEAgLTEyOSwyOCAr
MTI5LDI4IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0Ojpnb1RvSXRlbShIaXN0b3J5SXQKICAgICB9
CiB9CiAKLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmJhY2tJdGVtKCkKK0hpc3RvcnlJ
dGVtKiBCYWNrRm9yd2FyZExpc3RJbXBsOjpiYWNrSXRlbSgpCiB7CiAgICAgaWYgKG1fY3VycmVu
dCAmJiBtX2N1cnJlbnQgIT0gTm9DdXJyZW50SXRlbUluZGV4KQogICAgICAgICByZXR1cm4gbV9l
bnRyaWVzW21fY3VycmVudCAtIDFdLmdldCgpOwogICAgIHJldHVybiAwOwogfQogCi1IaXN0b3J5
SXRlbSogQmFja0ZvcndhcmRMaXN0OjpjdXJyZW50SXRlbSgpCitIaXN0b3J5SXRlbSogQmFja0Zv
cndhcmRMaXN0SW1wbDo6Y3VycmVudEl0ZW0oKQogewogICAgIGlmIChtX2N1cnJlbnQgIT0gTm9D
dXJyZW50SXRlbUluZGV4KQogICAgICAgICByZXR1cm4gbV9lbnRyaWVzW21fY3VycmVudF0uZ2V0
KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmZv
cndhcmRJdGVtKCkKK0hpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3RJbXBsOjpmb3J3YXJkSXRl
bSgpCiB7CiAgICAgaWYgKG1fZW50cmllcy5zaXplKCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVz
LnNpemUoKSAtIDEpCiAgICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0
KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdFdp
dGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQordm9pZCBCYWNrRm9y
d2FyZExpc3RJbXBsOjpiYWNrTGlzdFdpdGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVj
dG9yJiBsaXN0KQogewogICAgIGxpc3QuY2xlYXIoKTsKICAgICBpZiAobV9jdXJyZW50ICE9IE5v
Q3VycmVudEl0ZW1JbmRleCkgewpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQmFja0ZvcndhcmRM
aXN0OjpiYWNrTGlzdFdpdGhMaW1pdCgKICAgICB9CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0
Ojpmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQgbGltaXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0
KQordm9pZCBCYWNrRm9yd2FyZExpc3RJbXBsOjpmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQgbGlt
aXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQogewogICAgIEFTU0VSVChsaW1pdCA+IC0xKTsK
ICAgICBsaXN0LmNsZWFyKCk7CkBAIC0xNzYsMTIgKzE3NiwxMiBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6Zm9yd2FyZExpc3RXaXRoTGltCiAgICAgfQogfQogCi1pbnQgQmFja0ZvcndhcmRMaXN0
OjpjYXBhY2l0eSgpCitpbnQgQmFja0ZvcndhcmRMaXN0SW1wbDo6Y2FwYWNpdHkoKQogewogICAg
IHJldHVybiBtX2NhcGFjaXR5OwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0Q2FwYWNp
dHkoaW50IHNpemUpCit2b2lkIEJhY2tGb3J3YXJkTGlzdEltcGw6OnNldENhcGFjaXR5KGludCBz
aXplKQogeyAgICAKICAgICB3aGlsZSAoc2l6ZSA8IChpbnQpbV9lbnRyaWVzLnNpemUoKSkgewog
ICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMubGFzdCgpOwpAQCAt
MjAwLDEyICsyMDAsMTIgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldENhcGFjaXR5KGludCBz
aQogICAgIG1fY2FwYWNpdHkgPSBzaXplOwogfQogCi1ib29sIEJhY2tGb3J3YXJkTGlzdDo6ZW5h
YmxlZCgpCitib29sIEJhY2tGb3J3YXJkTGlzdEltcGw6OmVuYWJsZWQoKQogewogICAgIHJldHVy
biBtX2VuYWJsZWQ7CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6c2V0RW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7CiAgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKICAgICBpZiAoIWVuYWJsZWQpIHsKQEAg
LTIxNSwxNyArMjE1LDE3IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRFbmFibGVkKGJvb2wg
ZW4KICAgICB9CiB9CiAKLWludCBCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKQoraW50
IEJhY2tGb3J3YXJkTGlzdEltcGw6OmJhY2tMaXN0Q291bnQoKQogewogICAgIHJldHVybiBtX2N1
cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4ID8gMCA6IG1fY3VycmVudDsKIH0KIAotaW50IEJh
Y2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RDb3VudCgpCitpbnQgQmFja0ZvcndhcmRMaXN0SW1w
bDo6Zm9yd2FyZExpc3RDb3VudCgpCiB7CiAgICAgcmV0dXJuIG1fY3VycmVudCA9PSBOb0N1cnJl
bnRJdGVtSW5kZXggPyAwIDogKGludCltX2VudHJpZXMuc2l6ZSgpIC0gKG1fY3VycmVudCArIDEp
OwogfQogCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleChpbnQgaW5k
ZXgpCitIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0SW1wbDo6aXRlbUF0SW5kZXgoaW50IGlu
ZGV4KQogewogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aXRob3V0IGRvaW5nIG1hdGggb24gaW5k
ZXggdG8gYXZvaWQgb3ZlcmZsb3cuCiAgICAgaWYgKGluZGV4IDwgLShpbnQpbV9jdXJyZW50KQpA
QCAtMjM3LDEyICsyMzcsMTIgQEAgSGlzdG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdDo6aXRlbUF0
SW5kZQogICAgIHJldHVybiBtX2VudHJpZXNbaW5kZXggKyBtX2N1cnJlbnRdLmdldCgpOwogfQog
Ci1IaXN0b3J5SXRlbVZlY3RvciYgQmFja0ZvcndhcmRMaXN0OjplbnRyaWVzKCkKK0hpc3RvcnlJ
dGVtVmVjdG9yJiBCYWNrRm9yd2FyZExpc3RJbXBsOjplbnRyaWVzKCkKIHsKICAgICByZXR1cm4g
bV9lbnRyaWVzOwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJdGVtKQordm9pZCBCYWNrRm9yd2FyZExpc3RJbXBsOjpw
dXNoU3RhdGVJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IG5ld0l0ZW0pCiB7CiAgICAgQVNT
RVJUKG5ld0l0ZW0pOwogICAgIEFTU0VSVChuZXdJdGVtLT5zdGF0ZU9iamVjdCgpKTsKQEAgLTI1
Niw3ICsyNTYsNyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNzCiAg
ICAgICAgIGN1cnJlbnQtPnNldFN0YXRlT2JqZWN0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKCkpOwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xvc2UoKQordm9pZCBCYWNrRm9y
d2FyZExpc3RJbXBsOjpjbG9zZSgpCiB7CiAgICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgp
OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQpAQCAtMjY3LDEyICsyNjcsMTIg
QEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmNsb3NlKCkKICAgICBtX2Nsb3NlZCA9IHRydWU7CiB9
CiAKLWJvb2wgQmFja0ZvcndhcmRMaXN0OjpjbG9zZWQoKQorYm9vbCBCYWNrRm9yd2FyZExpc3RJ
bXBsOjpjbG9zZWQoKQogewogICAgIHJldHVybiBtX2Nsb3NlZDsKIH0KIAotdm9pZCBCYWNrRm9y
d2FyZExpc3Q6OnJlbW92ZUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIEJhY2tGb3J3YXJk
TGlzdEltcGw6OnJlbW92ZUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiB7CiAgICAgaWYgKCFpdGVt
KQogICAgICAgICByZXR1cm47CkBAIC0yOTQsMTMgKzI5NCwxMyBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6cmVtb3ZlSXRlbShIaXN0b3J5CiAgICAgICAgIH0KIH0KIAotYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSogZW50cnkpCitib29sIEJhY2tGb3J3YXJk
TGlzdEltcGw6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSogZW50cnkpCiB7CiAgICAgcmV0dXJu
IG1fZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKIH0KIAogI2lmIEVOQUJMRShXTUwpCi12b2lk
IEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJXTUxQYWdlSGlzdG9yeSgpCit2b2lkIEJhY2tGb3J3YXJk
TGlzdEltcGw6OmNsZWFyV01MUGFnZUhpc3RvcnkoKQogewogICAgIFJlZlB0cjxIaXN0b3J5SXRl
bT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50SXRlbSgpOwogCkluZGV4OiBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZExpc3RJbXBsLmgJKHJldmlzaW9uIDYyNjc0KQkoZnJvbSBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0Lmg6NjI2NzQpCisrKyBXZWJDb3JlL2hpc3RvcnkvQmFja0Zv
cndhcmRMaXN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QmFja0ZvcndhcmRMaXN0X2gKKyNkZWZpbmUgQmFja0ZvcndhcmRMaXN0X2gKKworI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEhpc3RvcnlJdGVtOworY2xhc3MgUGFn
ZTsKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKK2NsYXNzIFN0cmluZzsKKwordHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPiA+IEhpc3RvcnlJdGVtVmVjdG9yOwordHlwZWRl
ZiBIYXNoU2V0PFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRlbUhhc2hTZXQ7CisKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKy8vIEluIHRoZSBDaHJvbWl1bSBwb3J0LCB0aGUgYmFjay9m
b3J3YXJkIGxpc3QgaXMgbWFuYWdlZCBleHRlcm5hbGx5LgorLy8gU2VlIEJhY2tGb3J3YXJkTGlz
dENocm9taXVtLmNwcAorY2xhc3MgQmFja0ZvcndhcmRMaXN0Q2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5CYWNrRm9yd2FyZExpc3RDbGllbnQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBh
ZGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdv
VG9JdGVtKEhpc3RvcnlJdGVtKikgPSAwOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGN1cnJl
bnRJdGVtKCkgPSAwOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGl0ZW1BdEluZGV4KGludCkg
PSAwOworICAgIHZpcnR1YWwgaW50IGJhY2tMaXN0Q291bnQoKSA9IDA7CisgICAgdmlydHVhbCBp
bnQgZm9yd2FyZExpc3RDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7
Cit9OworI2VuZGlmCisKK2NsYXNzIEJhY2tGb3J3YXJkTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVk
PEJhY2tGb3J3YXJkTGlzdD4geworcHVibGljOiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNr
Rm9yd2FyZExpc3Q+IGNyZWF0ZShQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQmFj
a0ZvcndhcmRMaXN0KHBhZ2UpKTsgfQorICAgIH5CYWNrRm9yd2FyZExpc3QoKTsKKworI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQorICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIg
bWV0aG9kcy4gCisgICAgdm9pZCBzZXRDbGllbnQoQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBjbGll
bnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKyNlbmRpZgorICAgIAorICAgIFBhZ2UqIHBhZ2Uo
KSB7IHJldHVybiBtX3BhZ2U7IH0KKyAgICAKKyAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4pOworICAgIHZvaWQgZ29CYWNrKCk7CisgICAgdm9pZCBnb0ZvcndhcmQoKTsK
KyAgICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKik7CisgICAgICAgIAorICAgIEhpc3RvcnlJ
dGVtKiBiYWNrSXRlbSgpOworICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSgpOworICAgIEhp
c3RvcnlJdGVtKiBmb3J3YXJkSXRlbSgpOworICAgIEhpc3RvcnlJdGVtKiBpdGVtQXRJbmRleChp
bnQpOworCisgICAgdm9pZCBiYWNrTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7CisgICAgdm9pZCBmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9y
Jik7CisKKyAgICBpbnQgY2FwYWNpdHkoKTsKKyAgICB2b2lkIHNldENhcGFjaXR5KGludCk7Cisg
ICAgYm9vbCBlbmFibGVkKCk7CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIGludCBi
YWNrTGlzdENvdW50KCk7CisgICAgaW50IGZvcndhcmRMaXN0Q291bnQoKTsKKyAgICBib29sIGNv
bnRhaW5zSXRlbShIaXN0b3J5SXRlbSopOworCisgICAgdm9pZCBjbG9zZSgpOworICAgIGJvb2wg
Y2xvc2VkKCk7CisgICAgCisgICAgdm9pZCByZW1vdmVJdGVtKEhpc3RvcnlJdGVtKik7CisgICAg
SGlzdG9yeUl0ZW1WZWN0b3ImIGVudHJpZXMoKTsKKyAgICAKKyAgICB2b2lkIHB1c2hTdGF0ZUl0
ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4pOworCisjaWYgRU5BQkxFKFdNTCkKKyAgICB2b2lk
IGNsZWFyV01MUGFnZUhpc3RvcnkoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEJhY2tGb3J3
YXJkTGlzdChQYWdlKik7CisgICAgCisgICAgUGFnZSogbV9wYWdlOworI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKSAKKyAgICBCYWNrRm9yd2FyZExpc3RDbGllbnQqIG1fY2xpZW50OworI2Vsc2UKKyAg
ICBIaXN0b3J5SXRlbVZlY3RvciBtX2VudHJpZXM7CisgICAgSGlzdG9yeUl0ZW1IYXNoU2V0IG1f
ZW50cnlIYXNoOworICAgIHVuc2lnbmVkIG1fY3VycmVudDsKKyNlbmRpZgorICAgIHVuc2lnbmVk
IG1fY2FwYWNpdHk7CisgICAgYm9vbCBtX2Nsb3NlZDsKKyAgICBib29sIG1fZW5hYmxlZDsKK307
CisgICAgCit9IC8vbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZExpc3RJbXBsLmgJKHJldmlzaW9uIDYyNjc0KQorKysgV2ViQ29yZS9oaXN0
b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNDUgKzI1LDI2
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEJhY2tGb3J3YXJkTGlzdF9oCi0j
ZGVmaW5lIEJhY2tGb3J3YXJkTGlzdF9oCisjaWZuZGVmIEJhY2tGb3J3YXJkTGlzdEltcGxfaAor
I2RlZmluZSBCYWNrRm9yd2FyZExpc3RJbXBsX2gKIAotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJCYWNrRm9yd2FyZExp
c3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhpc3RvcnlJ
dGVtOwogY2xhc3MgUGFnZTsKLWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLWNsYXNzIFN0
cmluZzsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPiA+IEhpc3RvcnlJdGVt
VmVjdG9yOwogdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRl
bUhhc2hTZXQ7CiAKLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLS8vIEluIHRoZSBDaHJvbWl1bSBw
b3J0LCB0aGUgYmFjay9mb3J3YXJkIGxpc3QgaXMgbWFuYWdlZCBleHRlcm5hbGx5LgotLy8gU2Vl
IEJhY2tGb3J3YXJkTGlzdENocm9taXVtLmNwcAotY2xhc3MgQmFja0ZvcndhcmRMaXN0Q2xpZW50
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5CYWNrRm9yd2FyZExpc3RDbGllbnQoKSB7fQotICAg
IHZpcnR1YWwgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKikgPSAwOwotICAgIHZpcnR1YWwgSGlz
dG9yeUl0ZW0qIGN1cnJlbnRJdGVtKCkgPSAwOwotICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGl0
ZW1BdEluZGV4KGludCkgPSAwOwotICAgIHZpcnR1YWwgaW50IGJhY2tMaXN0Q291bnQoKSA9IDA7
Ci0gICAgdmlydHVhbCBpbnQgZm9yd2FyZExpc3RDb3VudCgpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgY2xvc2UoKSA9IDA7Ci19OwotI2VuZGlmCi0KLWNsYXNzIEJhY2tGb3J3YXJkTGlzdCA6IHB1
YmxpYyBSZWZDb3VudGVkPEJhY2tGb3J3YXJkTGlzdD4geworY2xhc3MgQmFja0ZvcndhcmRMaXN0
SW1wbCA6IHB1YmxpYyBCYWNrRm9yd2FyZExpc3QgewogcHVibGljOiAKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxCYWNrRm9yd2FyZExpc3Q+IGNyZWF0ZShQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgQmFja0ZvcndhcmRMaXN0KHBhZ2UpKTsgfQotICAgIH5CYWNrRm9yd2FyZExpc3Qo
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNrRm9yd2FyZExpc3RJbXBsPiBjcmVhdGUoUGFn
ZSogcGFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEJhY2tGb3J3YXJkTGlzdEltcGwocGFnZSkp
OyB9CisgICAgfkJhY2tGb3J3YXJkTGlzdEltcGwoKTsKKworICAgIGJvb2wgaXNCYWNrRm9yd2Fy
ZExpc3RJbXBsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgUExBVEZPUk0oQ0hST01J
VU0pCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBtZXRob2RzLiAKQEAg
LTEwNiw3ICs4Nyw3IEBAIHB1YmxpYzogCiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBCYWNrRm9y
d2FyZExpc3QoUGFnZSopOworICAgIEJhY2tGb3J3YXJkTGlzdEltcGwoUGFnZSopOwogICAgIAog
ICAgIFBhZ2UqIG1fcGFnZTsKICNpZiBQTEFURk9STShDSFJPTUlVTSkgCkBAIC0xMjEsNiArMTAy
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZW5hYmxlZDsKIH07CiAgICAgCi19IC8vbmFtZXNw
YWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8g
QmFja0ZvcndhcmRMaXN0SW1wbF9oCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA3LTA3ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MTgyNgorICAgICAgICBDb252ZXJ0IEJhY2tGb3J3YXJkTGlzdCB0byBhbiBhYnN0
cmFjdCBiYXNlIGNsYXNzIGFuZCBhZGQgQmFja0ZvcndhcmRMaXN0SW1wbAorICAgICAgICBhcyB0
aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgaXQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudDo6Y3JlYXRlQmFja0Zv
cndhcmRMaXN0KToKKwogMjAxMC0wNy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYWNr
Rm9yd2FyZENvbnRyb2xsZXJDbGllbnQuY3BwCShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiV2ViQmFja0Zv
cndhcmRDb250cm9sbGVyQ2xpZW50LmgiCiAKICNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9CYWNrRm9yd2FyZExpc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0JhY2tGb3J3
YXJkTGlzdEltcGwuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTM5LDcgKzM5
LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQ6OmJhYwogCiBQYXNzUmVm
UHRyPEJhY2tGb3J3YXJkTGlzdD4gV2ViQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50OjpjcmVh
dGVCYWNrRm9yd2FyZExpc3QoKQogewotICAgIHJldHVybiBCYWNrRm9yd2FyZExpc3Q6OmNyZWF0
ZShtX3BhZ2UtPmNvcmVQYWdlKCkpOworICAgIHJldHVybiBCYWNrRm9yd2FyZExpc3RJbXBsOjpj
cmVhdGUobV9wYWdlLT5jb3JlUGFnZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA3LTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTgyNgor
ICAgICAgICBDb252ZXJ0IEJhY2tGb3J3YXJkTGlzdCB0byBhbiBhYnN0cmFjdCBiYXNlIGNsYXNz
IGFuZCBhZGQgQmFja0ZvcndhcmRMaXN0SW1wbAorICAgICAgICBhcyB0aGUgY29uY3JldGUgaW1w
bGVtZW50YXRpb24gb2YgaXQuCisKKyAgICAgICAgKiBIaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlz
dC5tbToKKyAgICAgICAgKC1bV2ViQmFja0ZvcndhcmRMaXN0IGluaXRdKToKKyAgICAgICAgKC1b
V2ViQmFja0ZvcndhcmRMaXN0IHNldFBhZ2VDYWNoZVNpemU6XSk6CisgICAgICAgICgtW1dlYkJh
Y2tGb3J3YXJkTGlzdCBwYWdlQ2FjaGVTaXplXSk6CisKIDIwMTAtMDctMDcgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24u
CkluZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0JKHJldmlzaW9u
IDYyNzQyKQorKysgV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2
YXRlLmgiCiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJWaWV3UHJp
dmF0ZS5oIgotI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZExpc3QuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQmFja0ZvcndhcmRMaXN0SW1wbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRl
bS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VDYWNo
ZS5oPgpAQCAtMTA5LDcgKzEwOSw3IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogCiAtIChpZClpbml0
CiB7Ci0gICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoQmFja0ZvcndhcmRMaXN0OkJhY2tGb3J3YXJk
TGlzdDo6Y3JlYXRlKDApXTsKKyAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhCYWNrRm9yd2FyZExp
c3Q6QmFja0ZvcndhcmRMaXN0SW1wbDo6Y3JlYXRlKDApXTsKIH0KIAogLSAodm9pZClkZWFsbG9j
CkBAIC0yOTMsMTIgKzI5MywxNCBAQCAtKE5TU3RyaW5nICopZGVzY3JpcHRpb24KIAogLSAodm9p
ZClzZXRQYWdlQ2FjaGVTaXplOihOU1VJbnRlZ2VyKXNpemUKIHsKLSAgICBba2l0KGNvcmUoc2Vs
ZiktPnBhZ2UoKSkgc2V0VXNlc1BhZ2VDYWNoZTpzaXplICE9IDBdOworICAgIEFTU0VSVChjb3Jl
KHNlbGYpLT5pc0JhY2tGb3J3YXJkTGlzdEltcGwoKSk7CisgICAgW2tpdChzdGF0aWNfY2FzdDxC
YWNrRm9yd2FyZExpc3RJbXBsKj4oY29yZShzZWxmKSktPnBhZ2UoKSkgc2V0VXNlc1BhZ2VDYWNo
ZTpzaXplICE9IDBdOwogfQogCiAtIChOU1VJbnRlZ2VyKXBhZ2VDYWNoZVNpemUKIHsKLSAgICBy
ZXR1cm4gW2tpdChjb3JlKHNlbGYpLT5wYWdlKCkpIHVzZXNQYWdlQ2FjaGVdID8gcGFnZUNhY2hl
KCktPmNhcGFjaXR5KCkgOiAwOworICAgIEFTU0VSVChjb3JlKHNlbGYpLT5pc0JhY2tGb3J3YXJk
TGlzdEltcGwoKSk7CisgICAgcmV0dXJuIFtraXQoc3RhdGljX2Nhc3Q8QmFja0ZvcndhcmRMaXN0
SW1wbCo+KGNvcmUoc2VsZikpLT5wYWdlKCkpIHVzZXNQYWdlQ2FjaGVdID8gcGFnZUNhY2hlKCkt
PmNhcGFjaXR5KCkgOiAwOwogfQogCiAtIChpbnQpYmFja0xpc3RDb3VudApJbmRleDogV2ViS2l0
L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lv
biA2Mjc0MikKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxOSBAQAorMjAxMC0wNy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE4MjYKKyAgICAgICAgQ29udmVy
dCBCYWNrRm9yd2FyZExpc3QgdG8gYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBhbmQgYWRkIEJhY2tG
b3J3YXJkTGlzdEltcGwKKyAgICAgICAgYXMgdGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9m
IGl0LgorCisgICAgICAgICogQXBpL3F3ZWJoaXN0b3J5LmNwcDoKKyAgICAgICAgKFFXZWJIaXN0
b3J5OjpjbGVhcik6CisgICAgICAgIChRV2ViSGlzdG9yeTo6YmFjayk6CisgICAgICAgIChRV2Vi
SGlzdG9yeTo6Zm9yd2FyZCk6CisgICAgICAgIChRV2ViSGlzdG9yeTo6Z29Ub0l0ZW0pOgorICAg
ICAgICAob3BlcmF0b3I+Pik6CisgICAgICAgIChRV2ViSGlzdG9yeVByaXZhdGU6OnBhZ2UpOgor
CiAyMDEwLTA3LTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9y
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAJKHJldmlz
aW9uIDYyNzQyKQorKysgV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJxd2ViaGlzdG9yeV9wLmgiCiAjaW5jbHVk
ZSAicXdlYmZyYW1lX3AuaCIKIAorI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdEltcGwuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAi
S1VSTC5oIgpAQCAtMjU5LDcgKzI2MCw3IEBAIHZvaWQgUVdlYkhpc3Rvcnk6OmNsZWFyKCkKICAg
ICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGxzdCA9IGQtPmxzdDsKIAogICAgIC8vY2xlYXIg
dmlzaXRlZCBsaW5rcwotICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBsc3QtPnBhZ2UoKTsKKyAg
ICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRM
aXN0SW1wbCo+KGxzdCktPnBhZ2UoKTsKICAgICBpZiAocGFnZSAmJiBwYWdlLT5ncm91cFB0cigp
KQogICAgICAgICBwYWdlLT5ncm91cFB0cigpLT5yZW1vdmVWaXNpdGVkTGlua3MoKTsKIApAQCAt
MzYzLDcgKzM2NCw3IEBAIGJvb2wgUVdlYkhpc3Rvcnk6OmNhbkdvRm9yd2FyZCgpIGNvbnN0CiB2
b2lkIFFXZWJIaXN0b3J5OjpiYWNrKCkKIHsKICAgICBpZiAoY2FuR29CYWNrKCkpIHsKLSAgICAg
ICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IGQtPmxzdC0+cGFnZSgpOworICAgICAgICBXZWJDb3Jl
OjpQYWdlKiBwYWdlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+
KGQtPmxzdCktPnBhZ2UoKTsKICAgICAgICAgcGFnZS0+Z29Ub0l0ZW0oZC0+bHN0LT5iYWNrSXRl
bSgpLCBXZWJDb3JlOjpGcmFtZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJkKTsKICAgICB9CiB9
CkBAIC0zNzcsNyArMzc4LDcgQEAgdm9pZCBRV2ViSGlzdG9yeTo6YmFjaygpCiB2b2lkIFFXZWJI
aXN0b3J5Ojpmb3J3YXJkKCkKIHsKICAgICBpZiAoY2FuR29Gb3J3YXJkKCkpIHsKLSAgICAgICAg
V2ViQ29yZTo6UGFnZSogcGFnZSA9IGQtPmxzdC0+cGFnZSgpOworICAgICAgICBXZWJDb3JlOjpQ
YWdlKiBwYWdlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KGQt
PmxzdCktPnBhZ2UoKTsKICAgICAgICAgcGFnZS0+Z29Ub0l0ZW0oZC0+bHN0LT5mb3J3YXJkSXRl
bSgpLCBXZWJDb3JlOjpGcmFtZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJkKTsKICAgICB9CiB9
CkBAIC0zODksNyArMzkwLDcgQEAgdm9pZCBRV2ViSGlzdG9yeTo6Zm9yd2FyZCgpCiAqLwogdm9p
ZCBRV2ViSGlzdG9yeTo6Z29Ub0l0ZW0oY29uc3QgUVdlYkhpc3RvcnlJdGVtICZpdGVtKQogewot
ICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBkLT5sc3QtPnBhZ2UoKTsKKyAgICBXZWJDb3JlOjpQ
YWdlKiBwYWdlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KGQt
PmxzdCktPnBhZ2UoKTsKICAgICBwYWdlLT5nb1RvSXRlbShpdGVtLmQtPml0ZW0sIFdlYkNvcmU6
OkZyYW1lTG9hZFR5cGVJbmRleGVkQmFja0ZvcndhcmQpOwogfQogCkBAIC01MzgsNyArNTM5LDcg
QEAgUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oUURhdGFTdHJlYW0mIHNvdQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZC0+bHN0LT5yZW1vdmVJdGVtKG51bGxJdGVtKTsKICAgICAgICAgICAg
IC8vIFVwZGF0ZSB0aGUgSGlzdG9yeUNvbnRyb2xsZXIuCi0gICAgICAgICAgICBoaXN0b3J5LmQt
PmxzdC0+cGFnZSgpLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+c2V0Q3VycmVu
dEl0ZW0oaGlzdG9yeS5kLT5sc3QtPmVudHJpZXMoKVtjdXJyZW50SW5kZXhdLmdldCgpKTsKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqPihoaXN0
b3J5LmQtPmxzdCktPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5oaXN0b3J5KCktPnNl
dEN1cnJlbnRJdGVtKGhpc3RvcnkuZC0+bHN0LT5lbnRyaWVzKClbY3VycmVudEluZGV4XS5nZXQo
KSk7CiAgICAgICAgICAgICBoaXN0b3J5LmdvVG9JdGVtKGhpc3RvcnkuaXRlbUF0KGN1cnJlbnRJ
bmRleCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTUwLDcgKzU1MSw3IEBAIFFEYXRhU3RyZWFt
JiBvcGVyYXRvcj4+KFFEYXRhU3RyZWFtJiBzb3UKIAogUVdlYlBhZ2VQcml2YXRlKiBRV2ViSGlz
dG9yeVByaXZhdGU6OnBhZ2UoKQogewotICAgIHJldHVybiBRV2ViRnJhbWVQcml2YXRlOjpraXQo
bHN0LT5wYWdlKCktPm1haW5GcmFtZSgpKS0+cGFnZSgpLT5oYW5kbGUoKTsKKyAgICByZXR1cm4g
UVdlYkZyYW1lUHJpdmF0ZTo6a2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlz
dEltcGwqPihsc3QpLT5wYWdlKCktPm1haW5GcmFtZSgpKS0+cGFnZSgpLT5oYW5kbGUoKTsKIH0K
IAogV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIFFXZWJIaXN0b3J5SXRlbVByaXZhdGU6OmNvcmUoUVdl
Ykhpc3RvcnlJdGVtKiBxKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60891</attachid>
            <date>2010-07-08 08:51:06 -0700</date>
            <delta_ts>2010-07-08 09:24:12 -0700</delta_ts>
            <desc>Patch 4</desc>
            <filename>patch4.diff</filename>
            <type>text/plain</type>
            <size>62607</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mjc4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxODI2CisgICAgICAg
IENvbnZlcnQgQmFja0ZvcndhcmRMaXN0IHRvIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgYW5kIGFk
ZCBCYWNrRm9yd2FyZExpc3RJbXBsCisgICAgICAgIGFzIHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRh
dGlvbiBvZiBpdC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmFja0ZvcndhcmRDb250cm9sbGVyOjpCYWNrRm9yd2FyZENvbnRyb2xsZXIp
OgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmg6CisgICAgICAgICog
aGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhpc3Rvcnkv
QmFja0ZvcndhcmRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3Q6On5C
YWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0Ojppc0Jh
Y2tGb3J3YXJkTGlzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0OjpC
YWNrRm9yd2FyZExpc3QpOgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0Q2hyb21p
dW0uY3BwOgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5jcHA6IENvcGll
ZCBmcm9tIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwLgorICAgICAgICAqIGhp
c3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2hpc3Rvcnkv
QmFja0ZvcndhcmRMaXN0LmguCisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBs
Ojppc0JhY2tGb3J3YXJkTGlzdEltcGwpOgorCiAyMDEwLTA3LTA4ICBYYW4gTG9wZXogIDx4bG9w
ZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCklu
ZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDYyNzQyKQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtODk5LDcgKzg5OSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBl
ZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCiAKICAgICBoaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJv
bGxlci5jcHAKLSAgICBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAKKyAgICBoaXN0b3J5L0Jh
Y2tGb3J3YXJkTGlzdEltcGwuY3BwCiAgICAgaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKICAgICBo
aXN0b3J5L0NhY2hlZFBhZ2UuY3BwCiAgICAgaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDU0LDggKzEwNTQsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3JlL2hpc3Rvcnkv
QmFja0ZvcndhcmRDb250cm9sbGVyLmggXAogCVdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENv
bnRyb2xsZXJDbGllbnQuaCBcCi0JV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAg
XAogCVdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuaCBcCisJV2ViQ29yZS9oaXN0b3J5
L0JhY2tGb3J3YXJkTGlzdEltcGwuY3BwIFwKKwlXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRM
aXN0SW1wbC5oIFwKIAlXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwIFwKIAlXZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkRnJhbWUuaCBcCiAJV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lUGxh
dGZvcm1EYXRhLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTMxNywyOSArMzE3LDYgQEAgX19aTjdXZWJD
b3JlMTRTZWN1cml0eU9yaWdpbjQwc2V0RG9tYWluUgogX19aTjdXZWJDb3JlMTRTZWN1cml0eU9y
aWdpbjZjcmVhdGVFUktOU180S1VSTEVpCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luN2Nh
bkxvYWRFUktOU180S1VSTEVSS05TXzZTdHJpbmdFUE5TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29y
ZTE1QXJjaGl2ZVJlc291cmNlNmNyZWF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU18xMlNoYXJlZEJ1
ZmZlckVFRVJLTlNfNEtVUkxFUktOU182U3RyaW5nRVNBX1NBX1JLTlNfMTZSZXNvdXJjZVJlc3Bv
bnNlRQotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMHJlbW92ZUl0ZW1FUE5TXzExSGlz
dG9yeUl0ZW1FCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDEwc2V0RW5hYmxlZEViCi1f
X1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDExY3VycmVudEl0ZW1FdgotX19aTjdXZWJDb3Jl
MTVCYWNrRm9yd2FyZExpc3QxMWZvcndhcmRJdGVtRXYKLV9fWk43V2ViQ29yZTE1QmFja0Zvcndh
cmRMaXN0MTFpdGVtQXRJbmRleEVpCi1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDExc2V0
Q2FwYWNpdHlFaQotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3QxMmNvbnRhaW5zSXRlbUVQ
TlNfMTFIaXN0b3J5SXRlbUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0MTNiYWNrTGlz
dENvdW50RXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0MTZmb3J3YXJkTGlzdENvdW50
RXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0MTdiYWNrTGlzdFdpdGhMaW1pdEVpUk4z
V1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xMUhpc3RvcnlJdGVtRUVFTG0wRUVFCi1fX1pON1dl
YkNvcmUxNUJhY2tGb3J3YXJkTGlzdDIwZm9yd2FyZExpc3RXaXRoTGltaXRFaVJOM1dURjZWZWN0
b3JJTlMxXzZSZWZQdHJJTlNfMTFIaXN0b3J5SXRlbUVFRUxtMEVFRQotX19aTjdXZWJDb3JlMTVC
YWNrRm9yd2FyZExpc3Q1Y2xvc2VFdgotX19aTjdXZWJDb3JlMTVCYWNrRm9yd2FyZExpc3Q2Y2xv
c2VkRXYKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0NmdvQmFja0V2Ci1fX1pON1dlYkNv
cmUxNUJhY2tGb3J3YXJkTGlzdDdhZGRJdGVtRU4zV1RGMTBQYXNzUmVmUHRySU5TXzExSGlzdG9y
eUl0ZW1FRUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0N2VuYWJsZWRFdgotX19aTjdX
ZWJDb3JlMTVCYWNrRm9yd2FyZExpc3Q3ZW50cmllc0V2Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3
YXJkTGlzdDhiYWNrSXRlbUV2Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDhjYXBhY2l0
eUV2Ci1fX1pON1dlYkNvcmUxNUJhY2tGb3J3YXJkTGlzdDhnb1RvSXRlbUVQTlNfMTFIaXN0b3J5
SXRlbUUKLV9fWk43V2ViQ29yZTE1QmFja0ZvcndhcmRMaXN0OWdvRm9yd2FyZEV2Ci1fX1pON1dl
YkNvcmUxNUJhY2tGb3J3YXJkTGlzdEMxRVBOU180UGFnZUUKLV9fWk43V2ViQ29yZTE1QmFja0Zv
cndhcmRMaXN0RDFFdgogX19aTjdXZWJDb3JlMTVET01XcmFwcGVyV29ybGQxNXVucmVnaXN0ZXJX
b3JsZEV2CiBfX1pON1dlYkNvcmUxNURPTVdyYXBwZXJXb3JsZEQxRXYKIF9fWk43V2ViQ29yZTE1
RGF0YWJhc2VUcmFja2VyMTJkZWxldGVPcmlnaW5FUE5TXzE0U2VjdXJpdHlPcmlnaW5FCkBAIC00
MjIsNiArMzk5LDcgQEAgX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTZyZXN1bQog
X19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTdzdXNwZW5kQW5pbWF0aW9uc0VQTlNf
OERvY3VtZW50RQogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMjBwYXVzZUFuaW1h
dGlvbkF0VGltZUVQTlNfMTJSZW5kZXJPYmplY3RFUktOU182U3RyaW5nRWQKIF9fWk43V2ViQ29y
ZTE5QW5pbWF0aW9uQ29udHJvbGxlcjIxcGF1c2VUcmFuc2l0aW9uQXRUaW1lRVBOU18xMlJlbmRl
ck9iamVjdEVSS05TXzZTdHJpbmdFZAorX19aTjdXZWJDb3JlMTlCYWNrRm9yd2FyZExpc3RJbXBs
QzFFUE5TXzRQYWdlRQogX19aTjdXZWJDb3JlMTlDU1NTdHlsZURlY2xhcmF0aW9uMTFzZXRQcm9w
ZXJ0eUVSS05TXzZTdHJpbmdFUzNfUmkKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjM0aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2CiBfX1pON1dlYkNvcmUxOVNl
bGVjdGlvbkNvbnRyb2xsZXIxMHNldEZvY3VzZWRFYgpAQCAtNTA2LDcgKzQ4NCw2IEBAIF9fWk43
V2ViQ29yZTRLVVJMQzFFTlNfMThQYXJzZWRVUkxTdHJpbmcKIF9fWk43V2ViQ29yZTRLVVJMQzFF
UDVOU1VSTAogX19aTjdXZWJDb3JlNEtVUkxDMUVQSzdfX0NGVVJMCiBfX1pON1dlYkNvcmU0S1VS
TEMxRVJLUzBfUktOU182U3RyaW5nRQotX19aTjdXZWJDb3JlNGNvcmVFUDIwTlNVUkxQcm90ZWN0
aW9uU3BhY2UKIF9fWk43V2ViQ29yZTROb2RlMTByZW5kZXJSZWN0RVBiCiBfX1pON1dlYkNvcmU0
Tm9kZTE3c3RvcElnbm9yaW5nTGVha3NFdgogX19aTjdXZWJDb3JlNE5vZGUxOHN0YXJ0SWdub3Jp
bmdMZWFrc0V2CkBAIC01MzMsNiArNTEwLDcgQEAgX19aTjdXZWJDb3JlNFBhZ2U5Z29Gb3J3YXJk
RXYKIF9fWk43V2ViQ29yZTRQYWdlOWluaXRHcm91cEV2CiBfX1pON1dlYkNvcmU0UGFnZUMxRVBO
U18xMkNocm9tZUNsaWVudEVQTlNfMTdDb250ZXh0TWVudUNsaWVudEVQTlNfMTJFZGl0b3JDbGll
bnRFUE5TXzEwRHJhZ0NsaWVudEVQTlNfMTVJbnNwZWN0b3JDbGllbnRFUE5TXzE4UGx1Z2luSGFs
dGVyQ2xpZW50RVBOU18yN0dlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudEVQTlNfMjNEZXZpY2VP
cmllbnRhdGlvbkNsaWVudEVQTlNfMjdCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnRFCiBfX1pO
N1dlYkNvcmU0UGFnZUQxRXYKK19fWk43V2ViQ29yZTRjb3JlRVAyME5TVVJMUHJvdGVjdGlvblNw
YWNlCiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFs
T2JqZWN0RVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FCiBfX1pON1dlYkNvcmU1Q2FjaGUxMXNl
dERpc2FibGVkRWIKIF9fWk43V2ViQ29yZTVDYWNoZTEzZ2V0U3RhdGlzdGljc0V2CkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gNjI3NDIpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtMTM5MCw4ICsxMzkwLDkgQEAKICAgICAgICAgICAgICdoaXN0b3J5L0JhY2tGb3J3YXJkQ29u
dHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVy
LmgnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50Lmgn
LAotICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcCcsCiAgICAgICAgICAg
ICAnaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuaCcsCisgICAgICAgICAgICAnaGlzdG9yeS9CYWNr
Rm9yd2FyZExpc3RJbXBsLmNwcCcsCisgICAgICAgICAgICAnaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3RJbXBsLmgnLAogICAgICAgICAgICAgJ2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0Q2hyb21pdW0u
Y3BwJywKICAgICAgICAgICAgICdoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcCcsCiAgICAgICAgICAg
ICAnaGlzdG9yeS9DYWNoZWRGcmFtZS5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJD
b3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAwLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCBcCiAgICAgZWRpdGluZy9XcmFw
Q29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIFwKICAgICBoaXN0b3J5L0JhY2tGb3J3YXJk
Q29udHJvbGxlci5jcHAgXAotICAgIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcCBcCisgICAg
aGlzdG9yeS9CYWNrRm9yd2FyZExpc3RJbXBsLmNwcCBcCiAgICAgaGlzdG9yeS9DYWNoZWRGcmFt
ZS5jcHAgXAogICAgIGhpc3RvcnkvQ2FjaGVkUGFnZS5jcHAgXAogICAgIGhpc3RvcnkvSGlzdG9y
eUl0ZW0uY3BwIFwKQEAgLTEzNTQsNiArMTM1NCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGVkaXRp
bmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmggXAogICAgIGhpc3RvcnkvQmFja0Zv
cndhcmRDb250cm9sbGVyLmggXAogICAgIGhpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyQ2xp
ZW50LmggXAorICAgIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oIFwKICAgICBoaXN0b3J5
L0JhY2tGb3J3YXJkTGlzdC5oIFwKICAgICBoaXN0b3J5L0NhY2hlZEZyYW1lLmggXAogICAgIGhp
c3RvcnkvQ2FjaGVkUGFnZS5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OTQ2NSwxMSArNDk0NjUsMTUgQEAKIAkJCQk+DQog
CQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caGlzdG9yeVxCYWNr
Rm9yd2FyZExpc3QuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGhpc3RvcnlcQmFja0Zvcndh
cmRMaXN0LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxoaXN0b3J5XEJhY2tGb3J3YXJkTGlzdC5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGhpc3RvcnlcQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxoaXN0b3J5XEJhY2tGb3J3YXJkTGlzdElt
cGwuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTE0LDcgKzExMTQsNiBAQAogCQk1MTcyMUZEMzExRDI3RUYyMDA2MzhCNDIgLyogSlNCZWZvcmVQ
cm9jZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNzIxRkQxMTFEMjdFRjIwMDYzOEI0MiAvKiBKU0JlZm9yZVByb2Nlc3NFdmVudC5oICov
OyB9OwogCQk1MTcyMjA0QjExRDI5NjA1MDA2MzhCNDIgLyogQmVmb3JlUHJvY2Vzc0V2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzIyMDRB
MTFEMjk2MDUwMDYzOEI0MiAvKiBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwICovOyB9OwogCQk1MTc0
MUQwRjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwQjBCMDcyNTlBMDBFRDQ0MkMg
LyogQmFja0ZvcndhcmRMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJNTE3NDFEMTAwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tGb3J3YXJkTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0
MUQwQzBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLzsgfTsKIAkJNTE3
NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwRDBCMDcyNTlBMDBFRDQ0MkMgLyog
SGlzdG9yeUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MTc0MUQxMjBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NDFEMEUwQjA3MjU5
QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLzsgfTsKIAkJNTE3NEUyMEExMEExRjQ0RjAw
Rjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNzRFMjA4MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0ZUV2ZW50
LmggKi87IH07CkBAIC00Njc5LDkgKzQ2NzgsMTEgQEAKIAkJQkNBODQ2RDYwREM2N0EzNTAwMjZD
MzA5IC8qIFJlbmRlclJlcGxpY2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNBODQ2RDQwREM2N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2Eu
Y3BwICovOyB9OwogCQlCQ0E4NDZENzBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBODQ2RDUw
REM2N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2EuaCAqLzsgfTsKIAkJQkNBODVBMTAwQzNB
RUFGNDAwNkY4MzA4IC8qIERPTVNWR051bWJlckludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4NUEwRjBDM0FFQUY0MDA2RjgzMDggLyog
RE9NU1ZHTnVtYmVySW50ZXJuYWwuaCAqLzsgfTsKLQkJQkNBOEM4MUUxMUUzRDM2OTAwODEyRkI3
IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNBOEM4MUMxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJk
Q29udHJvbGxlci5oICovOyB9OworCQlCQ0E4QzgxRTExRTNEMzY5MDA4MTJGQjcgLyogQmFja0Zv
cndhcmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0E4QzgxQzExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNB
OEM4MUYxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4QzgxRDExRTNEMzY5
MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQkNBOEM4MzEx
MUUzRDUzMjAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBOEM4MzAxMUUzRDUzMjAw
ODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDQThDQTVGMTFFNEU2RDEwMDgxMkZC
NyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDQTVEMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2Fy
ZExpc3RJbXBsLmNwcCAqLzsgfTsKKwkJQkNBOENBNjAxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tG
b3J3YXJkTGlzdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDQThDQTVFMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNBQTkw
QzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FBOTBDMjBBN0VCQTYwMDA4QjEyMjkgLyogU2Ny
b2xsYmFyLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkMxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250
ZW50VVJMUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJu
LmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkQxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJM
UGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNBQ0YzQkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02ODIzLDcgKzY4
MjQsNiBAQAogCQk1MTcyMUZEMTExRDI3RUYyMDA2MzhCNDIgLyogSlNCZWZvcmVQcm9jZXNzRXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCZWZvcmVQcm9jZXNzRXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3MjIwNEExMUQyOTYwNTAwNjM4
QjQyIC8qIEJlZm9yZVByb2Nlc3NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTc0MUQwQjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1MTc0MUQwQzBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0Zv
cndhcmRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhY2tG
b3J3YXJkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzQxRDBEMEIw
NzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGlzdG9yeUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3
NDFEMEUwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXN0b3J5SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxNzRFMjA4MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0ZUV2ZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcFN0YXRlRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjg1LDYgKzEwMjg1LDggQEAKIAkJQkNBOEM4MUMx
MUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrRm9yd2FyZENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkNBOEM4MUQxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJk
Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYWNr
Rm9yd2FyZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E4
QzgzMDExRTNENTMyMDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0E4Q0E1RDExRTRFNkQxMDA4MTJG
QjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkNBOENBNUUxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0ZvcndhcmRMaXN0SW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FBOTBDMjBBN0VCQTYwMDA4QjEyMjkg
LyogU2Nyb2xsYmFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBT
Y3JvbGxiYXIuY3BwOyBwYXRoID0gcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDsgc291cmNlVHJlZSA9
IFNPVVJDRV9ST09UOyB9OwogCQlCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRl
bnRVUkxQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVz
ZXJDb250ZW50VVJMUGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
QUNGM0JCMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRlcm4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTg4Miw4ICsxMTg4NCw5IEBACiAJCQljaGlsZHJl
biA9ICgKIAkJCQk5MzYzQjYyOTBGOEU4RkUwMDA4MDM4MTAgLyogY2YgKi8sCiAJCQkJNTE2MEY0
OTIwQjBBQTcxNTAwQzFEMkFGIC8qIG1hYyAqLywKLQkJCQk1MTc0MUQwQzBCMDcyNTlBMDBFRDQ0
MkMgLyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLywKIAkJCQk1MTc0MUQwQjBCMDcyNTlBMDBFRDQ0
MkMgLyogQmFja0ZvcndhcmRMaXN0LmggKi8sCisJCQkJQkNBOENBNUQxMUU0RTZEMTAwODEyRkI3
IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwICovLAorCQkJCUJDQThDQTVFMTFFNEU2RDEwMDgx
MkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmggKi8sCiAJCQkJQkNBOEM4MUQxMUUzRDM2OTAw
ODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJQkNBOEM4MUMxMUUz
RDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oICovLAogCQkJCUJDQThDODMw
MTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCAqLywKQEAg
LTE5NzI0LDYgKzE5NzI3LDcgQEAKIAkJCQk5N0VGNTYxMTExRTQwNzgzMDA3RTAyNkYgLyogSFRN
TENvbnN0cnVjdGlvblNpdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQThDODFFMTFFM0QzNjkw
MDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
QThDODMxMTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCUJDQThDQTYwMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2Fy
ZExpc3RJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMDczLDcgKzIwMDc3LDYgQEAKIAkJCQlB
OENGRjA1MDBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTI5QTgxMjM3MEZCQjlDMUQwMDUxMDI5MyAvKiBBWE9iamVjdENhY2hlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTI5QTgxMjRCMEZCQjlDQTkwMDUxMDI5MyAvKiBBWE9iamVjdENh
Y2hlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3NDFEMTAwQjA3MjU5QTAwRUQ0NDJDIC8q
IEJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzEyNEVFNzBDMjY0MUNE
MDA5RTIzNDkgLyogQmFySW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEyMTBEMDA2
QzFEMDBFRjZGMjYgLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNzIyMDRCMTFE
Mjk2MDUwMDYzOEI0MiAvKiBCZWZvcmVQcm9jZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yMjExMCw2ICsyMjExMyw3IEBACiAJCQkJQkNBOEM4MUYxMUUzRDM2OTAwODEyRkI3IC8qIEJh
Y2tGb3J3YXJkQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjRGNUZGQjExQ0JE
MkUxMDBBMTg2QkYgLyogUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3RUY1NjEwMTFFNDA3ODMwMDdFMDI2RiAvKiBIVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlCQ0E4Q0E1RjExRTRFNkQxMDA4MTJGQjcgLyogQmFja0Zv
cndhcmRMaXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYkNvcmUvaGlz
dG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCIKICNpbmNs
dWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RJbXBsLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNyArMzcsNyBAQCBCYWNrRm9yd2FyZENv
bnRyb2xsZXI6OkJhY2tGb3J3YXJkQ29udHJvCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiB7CiAg
ICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgbV9saXN0ID0gQmFja0ZvcndhcmRMaXN0OjpjcmVh
dGUocGFnZSk7CisgICAgICAgIG1fbGlzdCA9IEJhY2tGb3J3YXJkTGlzdEltcGw6OmNyZWF0ZShw
YWdlKTsKICAgICBlbHNlCiAgICAgICAgIG1fbGlzdCA9IG1fY2xpZW50LT5jcmVhdGVCYWNrRm9y
d2FyZExpc3QoKTsKIH0KSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVy
LmgJKHJldmlzaW9uIDYyNzQyKQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgUGFnZTsKIGNsYXNzIEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudDsK
IAogY2xhc3MgQmFja0ZvcndhcmRDb250cm9sbGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKSW5k
ZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCShyZXZpc2lvbiA2Mjc0MikKKysrIFdl
YkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMy
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCYWNrRm9yd2Fy
ZExpc3QuaCIKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
LSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdl
Q2FjaGUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLQotdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgRGVmYXVsdENhcGFjaXR5ID0gMTAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIE5vQ3VycmVu
dEl0ZW1JbmRleCA9IFVJTlRfTUFYOwotCi1CYWNrRm9yd2FyZExpc3Q6OkJhY2tGb3J3YXJkTGlz
dChQYWdlKiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX2N1cnJlbnQoTm9DdXJy
ZW50SXRlbUluZGV4KQotICAgICwgbV9jYXBhY2l0eShEZWZhdWx0Q2FwYWNpdHkpCi0gICAgLCBt
X2Nsb3NlZCh0cnVlKQotICAgICwgbV9lbmFibGVkKHRydWUpCi17Ci19Ci0KLUJhY2tGb3J3YXJk
TGlzdDo6fkJhY2tGb3J3YXJkTGlzdCgpCi17Ci0gICAgQVNTRVJUKG1fY2xvc2VkKTsKLX0KLQot
dm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJw
SXRlbSkKLXsKLSAgICBBU1NFUlQocHJwSXRlbSk7Ci0gICAgaWYgKG1fY2FwYWNpdHkgPT0gMCB8
fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVG9zcyBhbnl0aGlu
ZyBpbiB0aGUgZm9yd2FyZCBsaXN0ICAgIAotICAgIGlmIChtX2N1cnJlbnQgIT0gTm9DdXJyZW50
SXRlbUluZGV4KSB7Ci0gICAgICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBtX2N1cnJlbnQgKyAx
OwotICAgICAgICB3aGlsZSAobV9lbnRyaWVzLnNpemUoKSA+IHRhcmdldFNpemUpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0KCk7Ci0gICAg
ICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgbV9lbnRyeUhhc2gu
cmVtb3ZlKGl0ZW0pOwotICAgICAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShpdGVtLmdldCgp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRvc3MgdGhlIGZpcnN0IGl0ZW0gaWYgdGhl
IGxpc3QgaXMgZ2V0dGluZyB0b28gYmlnLCBhcyBsb25nIGFzIHdlJ3JlIG5vdCB1c2luZyBpdAot
ICAgIC8vIChvciBldmVuIGlmIHdlIGFyZSwgaWYgd2Ugb25seSB3YW50IDEgZW50cnkpLgotICAg
IGlmIChtX2VudHJpZXMuc2l6ZSgpID09IG1fY2FwYWNpdHkgJiYgKG1fY3VycmVudCAhPSAwIHx8
IG1fY2FwYWNpdHkgPT0gMSkpIHsKLSAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0g
bV9lbnRyaWVzWzBdOwotICAgICAgICBtX2VudHJpZXMucmVtb3ZlKDApOwotICAgICAgICBtX2Vu
dHJ5SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUoaXRlbS5n
ZXQoKSk7Ci0gICAgICAgIG1fY3VycmVudC0tOwotICAgICAgICBpZiAobV9wYWdlKQotICAgICAg
ICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERp
ZFJlbW92ZUJhY2tGb3J3YXJkSXRlbShpdGVtLmdldCgpKTsKLSAgICB9Ci0KLSAgICBtX2VudHJ5
SGFzaC5hZGQocHJwSXRlbS5nZXQoKSk7Ci0gICAgbV9lbnRyaWVzLmluc2VydChtX2N1cnJlbnQg
KyAxLCBwcnBJdGVtKTsKLSAgICBtX2N1cnJlbnQrKzsKLSAgICBpZiAobV9wYWdlKQotICAgICAg
ICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQWRk
QmFja0ZvcndhcmRJdGVtKGN1cnJlbnRJdGVtKCkpOwotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlz
dDo6Z29CYWNrKCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50ID4gMCk7Ci0gICAgaWYgKG1fY3Vy
cmVudCA+IDApIHsKLSAgICAgICAgbV9jdXJyZW50LS07Ci0gICAgICAgIGlmIChtX3BhZ2UpCi0g
ICAgICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3Bh
dGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJbmRleCgpOwotICAgIH0KLX0KLQotdm9pZCBCYWNrRm9y
d2FyZExpc3Q6OmdvRm9yd2FyZCgpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudCA8IG1fZW50cmll
cy5zaXplKCkgLSAxKTsKLSAgICBpZiAobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEp
IHsKLSAgICAgICAgbV9jdXJyZW50Kys7Ci0gICAgICAgIGlmIChtX3BhZ2UpCi0gICAgICAgICAg
ICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQ2hh
bmdlQmFja0ZvcndhcmRJbmRleCgpOwotICAgIH0KLX0KLQotdm9pZCBCYWNrRm9yd2FyZExpc3Q6
OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQotewotICAgIGlmICghbV9lbnRyaWVzLnNpemUo
KSB8fCAhaXRlbSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNpZ25lZCBpbnQg
aW5kZXggPSAwOwotICAgIGZvciAoOyBpbmRleCA8IG1fZW50cmllcy5zaXplKCk7ICsraW5kZXgp
Ci0gICAgICAgIGlmIChtX2VudHJpZXNbaW5kZXhdID09IGl0ZW0pCi0gICAgICAgICAgICBicmVh
azsKLSAgICBpZiAoaW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKSB7Ci0gICAgICAgIG1fY3VycmVu
dCA9IGluZGV4OwotICAgICAgICBpZiAobV9wYWdlKQotICAgICAgICAgICAgbV9wYWdlLT5tYWlu
RnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJhY2tGb3J3YXJk
SW5kZXgoKTsKLSAgICB9Ci19Ci0KLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmJhY2tJ
dGVtKCkKLXsKLSAgICBpZiAobV9jdXJyZW50ICYmIG1fY3VycmVudCAhPSBOb0N1cnJlbnRJdGVt
SW5kZXgpCi0gICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50IC0gMV0uZ2V0KCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6OmN1cnJlbnRJ
dGVtKCkKLXsKLSAgICBpZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkKLSAgICAg
ICAgcmV0dXJuIG1fZW50cmllc1ttX2N1cnJlbnRdLmdldCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSgpCi17Ci0gICAgaWYg
KG1fZW50cmllcy5zaXplKCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpCi0g
ICAgICAgIHJldHVybiBtX2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0KCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdFdpdGhMaW1pdChpbnQgbGlt
aXQsIEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQotewotICAgIGxpc3QuY2xlYXIoKTsKLSAgICBp
ZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkgewotICAgICAgICB1bnNpZ25lZCBm
aXJzdCA9IG1heCgoaW50KW1fY3VycmVudCAtIGxpbWl0LCAwKTsKLSAgICAgICAgZm9yICg7IGZp
cnN0IDwgbV9jdXJyZW50OyArK2ZpcnN0KQotICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRy
aWVzW2ZpcnN0XSk7Ci0gICAgfQotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExp
c3RXaXRoTGltaXQoaW50IGxpbWl0LCBIaXN0b3J5SXRlbVZlY3RvciYgbGlzdCkKLXsKLSAgICBB
U1NFUlQobGltaXQgPiAtMSk7Ci0gICAgbGlzdC5jbGVhcigpOwotICAgIGlmICghbV9lbnRyaWVz
LnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNpZ25lZCBsYXN0RW50
cnkgPSBtX2VudHJpZXMuc2l6ZSgpIC0gMTsKLSAgICBpZiAobV9jdXJyZW50IDwgbGFzdEVudHJ5
KSB7Ci0gICAgICAgIGludCBsYXN0ID0gbWluKG1fY3VycmVudCArIGxpbWl0LCBsYXN0RW50cnkp
OwotICAgICAgICBsaW1pdCA9IG1fY3VycmVudCArIDE7Ci0gICAgICAgIGZvciAoOyBsaW1pdCA8
PSBsYXN0OyArK2xpbWl0KQotICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9lbnRyaWVzW2xpbWl0
XSk7Ci0gICAgfQotfQotCi1pbnQgQmFja0ZvcndhcmRMaXN0OjpjYXBhY2l0eSgpCi17Ci0gICAg
cmV0dXJuIG1fY2FwYWNpdHk7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRDYXBhY2l0
eShpbnQgc2l6ZSkKLXsgICAgCi0gICAgd2hpbGUgKHNpemUgPCAoaW50KW1fZW50cmllcy5zaXpl
KCkpIHsKLSAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3Qo
KTsKLSAgICAgICAgbV9lbnRyaWVzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgbV9lbnRyeUhhc2gu
cmVtb3ZlKGl0ZW0pOwotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0uZ2V0KCkpOwot
ICAgIH0KLQotICAgIGlmICghc2l6ZSkKLSAgICAgICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRl
bUluZGV4OwotICAgIGVsc2UgaWYgKG1fY3VycmVudCA+IG1fZW50cmllcy5zaXplKCkgLSAxKSB7
Ci0gICAgICAgIG1fY3VycmVudCA9IG1fZW50cmllcy5zaXplKCkgLSAxOwotICAgICAgICBpZiAo
bV9wYWdlKQotICAgICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5kaXNwYXRjaERpZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKTsKLSAgICB9Ci0gICAgbV9j
YXBhY2l0eSA9IHNpemU7Ci19Ci0KLWJvb2wgQmFja0ZvcndhcmRMaXN0OjplbmFibGVkKCkKLXsK
LSAgICByZXR1cm4gbV9lbmFibGVkOwotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0RW5h
YmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9lbmFibGVkID0gZW5hYmxlZDsKLSAgICBpZiAo
IWVuYWJsZWQpIHsKLSAgICAgICAgaW50IGNhcGFjaXR5ID0gbV9jYXBhY2l0eTsKLSAgICAgICAg
c2V0Q2FwYWNpdHkoMCk7Ci0gICAgICAgIHNldENhcGFjaXR5KGNhcGFjaXR5KTsKLSAgICB9Ci19
Ci0KLWludCBCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKQotewotICAgIHJldHVybiBt
X2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4ID8gMCA6IG1fY3VycmVudDsKLX0KLQotaW50
IEJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RDb3VudCgpCi17Ci0gICAgcmV0dXJuIG1fY3Vy
cmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggPyAwIDogKGludCltX2VudHJpZXMuc2l6ZSgpIC0g
KG1fY3VycmVudCArIDEpOwotfQotCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjppdGVt
QXRJbmRleChpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdpdGhvdXQgZG9p
bmcgbWF0aCBvbiBpbmRleCB0byBhdm9pZCBvdmVyZmxvdy4KLSAgICBpZiAoaW5kZXggPCAtKGlu
dCltX2N1cnJlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGlmIChpbmRleCA+IGZv
cndhcmRMaXN0Q291bnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAotICAgIHJldHVy
biBtX2VudHJpZXNbaW5kZXggKyBtX2N1cnJlbnRdLmdldCgpOwotfQotCi1IaXN0b3J5SXRlbVZl
Y3RvciYgQmFja0ZvcndhcmRMaXN0OjplbnRyaWVzKCkKLXsKLSAgICByZXR1cm4gbV9lbnRyaWVz
OwotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6cHVzaFN0YXRlSXRlbShQYXNzUmVmUHRyPEhp
c3RvcnlJdGVtPiBuZXdJdGVtKQotewotICAgIEFTU0VSVChuZXdJdGVtKTsKLSAgICBBU1NFUlQo
bmV3SXRlbS0+c3RhdGVPYmplY3QoKSk7Ci0gICAgCi0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBj
dXJyZW50ID0gY3VycmVudEl0ZW0oKTsKLSAgICBBU1NFUlQoY3VycmVudCk7Ci0KLSAgICBhZGRJ
dGVtKG5ld0l0ZW0pOwotICAgIAotICAgIGlmICghY3VycmVudC0+c3RhdGVPYmplY3QoKSkKLSAg
ICAgICAgY3VycmVudC0+c2V0U3RhdGVPYmplY3QoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoKSk7Ci19Ci0KLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9zZSgpCi17Ci0gICAgaW50IHNp
emUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKG1fZW50cmllc1tpXS5nZXQoKSk7Ci0gICAg
bV9lbnRyaWVzLmNsZWFyKCk7Ci0gICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKLSAgICBtX3BhZ2Ug
PSAwOwotICAgIG1fY2xvc2VkID0gdHJ1ZTsKLX0KLQotYm9vbCBCYWNrRm9yd2FyZExpc3Q6OmNs
b3NlZCgpCi17Ci0gICAgcmV0dXJuIG1fY2xvc2VkOwotfQotCi12b2lkIEJhY2tGb3J3YXJkTGlz
dDo6cmVtb3ZlSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKLXsKLSAgICBpZiAoIWl0ZW0pCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVz
LnNpemUoKTsgKytpKQotICAgICAgICBpZiAobV9lbnRyaWVzW2ldID09IGl0ZW0pIHsKLSAgICAg
ICAgICAgIG1fZW50cmllcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBtX2VudHJ5SGFzaC5yZW1v
dmUoaXRlbSk7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRl
eCB8fCBtX2N1cnJlbnQgPCBpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
aWYgKG1fY3VycmVudCA+IGkpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50LS07Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2VudHJpZXMuc2l6
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPj0gY291bnQpCi0gICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudCA9IGNvdW50ID8gY291bnQgLSAxIDogTm9DdXJyZW50SXRlbUlu
ZGV4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLX0KLQot
Ym9vbCBCYWNrRm9yd2FyZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSogZW50cnkpCi17
Ci0gICAgcmV0dXJuIG1fZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKLX0KLQotI2lmIEVOQUJM
RShXTUwpCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJXTUxQYWdlSGlzdG9yeSgpCi17Ci0g
ICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJlbnRJdGVtKCk7
Ci0KLSAgICBpbnQgc2l6ZSA9IG1fZW50cmllcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9lbnRyaWVzW2ld
LmdldCgpKTsKLQotICAgIG1fZW50cmllcy5jbGVhcigpOwotICAgIG1fZW50cnlIYXNoLmNsZWFy
KCk7Ci0gICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OwotCi0gICAgLy8gU3BlYzog
VGhlIGhpc3Rvcnkgc3RhY2sgbWF5IGJlIHJlc2V0IHRvIGEgc3RhdGUgd2hlcmUgaXQgb25seSBj
b250YWlucyB0aGUgY3VycmVudCBjYXJkLgotICAgIGFkZEl0ZW0oY3VycmVudEl0ZW0pOwotfQot
I2VuZGlmCi0KLX07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2hpc3Rvcnkv
QmFja0ZvcndhcmRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkTGlzdC5oCShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2Fy
ZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTkgKzMwLDEzIEBACiAKICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIaXN0b3J5SXRlbTsKLWNsYXNzIFBhZ2U7
Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci1jbGFzcyBTdHJpbmc7CiAKIHR5cGVkZWYg
VmVjdG9yPFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRlbVZlY3RvcjsKLXR5cGVkZWYg
SGFzaFNldDxSZWZQdHI8SGlzdG9yeUl0ZW0+ID4gSGlzdG9yeUl0ZW1IYXNoU2V0OwogCiAjaWYg
UExBVEZPUk0oQ0hST01JVU0pCiAvLyBJbiB0aGUgQ2hyb21pdW0gcG9ydCwgdGhlIGJhY2svZm9y
d2FyZCBsaXN0IGlzIG1hbmFnZWQgZXh0ZXJuYWxseS4KQEAgLTYyLDY1ICs1Niw1NiBAQCBwdWJs
aWM6CiAKIGNsYXNzIEJhY2tGb3J3YXJkTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPEJhY2tGb3J3
YXJkTGlzdD4gewogcHVibGljOiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNrRm9yd2FyZExp
c3Q+IGNyZWF0ZShQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQmFja0ZvcndhcmRM
aXN0KHBhZ2UpKTsgfQotICAgIH5CYWNrRm9yd2FyZExpc3QoKTsKKyAgICB2aXJ0dWFsIH5CYWNr
Rm9yd2FyZExpc3QoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNCYWNrRm9y
d2FyZExpc3RJbXBsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQogICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgbWV0aG9kcy4g
Ci0gICAgdm9pZCBzZXRDbGllbnQoQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBjbGllbnQpIHsgbV9j
bGllbnQgPSBjbGllbnQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KEJhY2tGb3J3YXJk
TGlzdENsaWVudCopID0gMDsKICNlbmRpZgotICAgIAotICAgIFBhZ2UqIHBhZ2UoKSB7IHJldHVy
biBtX3BhZ2U7IH0KLSAgICAKLSAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRl
bT4pOwotICAgIHZvaWQgZ29CYWNrKCk7Ci0gICAgdm9pZCBnb0ZvcndhcmQoKTsKLSAgICB2b2lk
IGdvVG9JdGVtKEhpc3RvcnlJdGVtKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkSXRlbShQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnb0JhY2soKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGdvRm9yd2FyZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ29U
b0l0ZW0oSGlzdG9yeUl0ZW0qKSA9IDA7CiAgICAgICAgIAotICAgIEhpc3RvcnlJdGVtKiBiYWNr
SXRlbSgpOwotICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSgpOwotICAgIEhpc3RvcnlJdGVt
KiBmb3J3YXJkSXRlbSgpOwotICAgIEhpc3RvcnlJdGVtKiBpdGVtQXRJbmRleChpbnQpOwotCi0g
ICAgdm9pZCBiYWNrTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9yJik7Ci0gICAg
dm9pZCBmb3J3YXJkTGlzdFdpdGhMaW1pdChpbnQsIEhpc3RvcnlJdGVtVmVjdG9yJik7Ci0KLSAg
ICBpbnQgY2FwYWNpdHkoKTsKLSAgICB2b2lkIHNldENhcGFjaXR5KGludCk7Ci0gICAgYm9vbCBl
bmFibGVkKCk7Ci0gICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwotICAgIGludCBiYWNrTGlzdENv
dW50KCk7Ci0gICAgaW50IGZvcndhcmRMaXN0Q291bnQoKTsKLSAgICBib29sIGNvbnRhaW5zSXRl
bShIaXN0b3J5SXRlbSopOworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGJhY2tJdGVtKCkgPSAw
OworICAgIHZpcnR1YWwgSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtKCkgPSAwOworICAgIHZpcnR1
YWwgSGlzdG9yeUl0ZW0qIGZvcndhcmRJdGVtKCkgPSAwOworICAgIHZpcnR1YWwgSGlzdG9yeUl0
ZW0qIGl0ZW1BdEluZGV4KGludCkgPSAwOwogCi0gICAgdm9pZCBjbG9zZSgpOwotICAgIGJvb2wg
Y2xvc2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGJhY2tMaXN0V2l0aExpbWl0KGludCwgSGlzdG9y
eUl0ZW1WZWN0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZvcndhcmRMaXN0V2l0aExpbWl0
KGludCwgSGlzdG9yeUl0ZW1WZWN0b3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBjYXBhY2l0
eSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FwYWNpdHkoaW50KSA9IDA7CisgICAgdmly
dHVhbCBib29sIGVuYWJsZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZWQoYm9v
bCkgPSAwOworICAgIHZpcnR1YWwgaW50IGJhY2tMaXN0Q291bnQoKSA9IDA7CisgICAgdmlydHVh
bCBpbnQgZm9yd2FyZExpc3RDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNJ
dGVtKEhpc3RvcnlJdGVtKikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBjbG9zZWQoKSA9IDA7CiAgICAgCi0gICAgdm9pZCByZW1vdmVJdGVt
KEhpc3RvcnlJdGVtKik7Ci0gICAgSGlzdG9yeUl0ZW1WZWN0b3ImIGVudHJpZXMoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShIaXN0b3J5SXRlbSopICA9IDA7CisgICAgdmlydHVhbCBI
aXN0b3J5SXRlbVZlY3RvciYgZW50cmllcygpICA9IDA7CiAgICAgCi0gICAgdm9pZCBwdXNoU3Rh
dGVJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFN0
YXRlSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPikgPSAwOwogCiAjaWYgRU5BQkxFKFdNTCkK
LSAgICB2b2lkIGNsZWFyV01MUGFnZUhpc3RvcnkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJX
TUxQYWdlSGlzdG9yeSgpICA9IDA7CiAjZW5kaWYKIAotcHJpdmF0ZToKLSAgICBCYWNrRm9yd2Fy
ZExpc3QoUGFnZSopOwotICAgIAotICAgIFBhZ2UqIG1fcGFnZTsKLSNpZiBQTEFURk9STShDSFJP
TUlVTSkgCi0gICAgQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBtX2NsaWVudDsKLSNlbHNlCi0gICAg
SGlzdG9yeUl0ZW1WZWN0b3IgbV9lbnRyaWVzOwotICAgIEhpc3RvcnlJdGVtSGFzaFNldCBtX2Vu
dHJ5SGFzaDsKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnQ7Ci0jZW5kaWYKLSAgICB1bnNpZ25lZCBt
X2NhcGFjaXR5OwotICAgIGJvb2wgbV9jbG9zZWQ7Ci0gICAgYm9vbCBtX2VuYWJsZWQ7Citwcm90
ZWN0ZWQ6CisgICAgQmFja0ZvcndhcmRMaXN0KCkKKyAgICB7CisgICAgfQogfTsKICAgICAKLX0g
Ly9uYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNl
bmRpZiAvLyBCYWNrRm9yd2FyZExpc3RfaApJbmRleDogV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkTGlzdENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0Zv
cndhcmRMaXN0Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA2Mjc0MikKKysrIFdlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmFja0ZvcndhcmRM
aXN0LmgiCisjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0SW1wbC5oIgogCiAjaW5jbHVkZSAiSGlz
dG9yeUl0ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEZWZhdWx0Q2FwYWNpdHkgPSAx
MDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgTm9DdXJyZW50SXRlbUluZGV4ID0gVUlOVF9NQVg7
CiAKLUJhY2tGb3J3YXJkTGlzdDo6QmFja0ZvcndhcmRMaXN0KFBhZ2UqIHBhZ2UpCitCYWNrRm9y
d2FyZExpc3RJbXBsOjpCYWNrRm9yd2FyZExpc3RJbXBsKFBhZ2UqIHBhZ2UpCiAgICAgOiBtX3Bh
Z2UocGFnZSkKICAgICAsIG1fY2xpZW50KDApCiAgICAgLCBtX2NhcGFjaXR5KERlZmF1bHRDYXBh
Y2l0eSkKQEAgLTQ1LDEyICs0NSwxMiBAQCBCYWNrRm9yd2FyZExpc3Q6OkJhY2tGb3J3YXJkTGlz
dChQYWdlKiBwCiB7CiB9CiAKLUJhY2tGb3J3YXJkTGlzdDo6fkJhY2tGb3J3YXJkTGlzdCgpCitC
YWNrRm9yd2FyZExpc3RJbXBsOjp+QmFja0ZvcndhcmRMaXN0SW1wbCgpCiB7CiAgICAgQVNTRVJU
KG1fY2xvc2VkKTsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0
cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6YWRkSXRl
bShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogewogICAgIEFTU0VSVChwcnBJdGVt
KTsKICAgICBpZiAobV9jYXBhY2l0eSA9PSAwIHx8ICFtX2VuYWJsZWQpCkBAIC01OSw0NCArNTks
NDQgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cgogICAgIG1fY2xp
ZW50LT5hZGRJdGVtKHBycEl0ZW0pOwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6Z29Ub0l0
ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIEJhY2tGb3J3YXJkTGlzdEltcGw6OmdvVG9JdGVt
KEhpc3RvcnlJdGVtKiBpdGVtKQogewogICAgIG1fY2xpZW50LT5nb1RvSXRlbShpdGVtKTsKIH0K
IAotSGlzdG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdDo6YmFja0l0ZW0oKQorSGlzdG9yeUl0ZW0q
IEJhY2tGb3J3YXJkTGlzdEltcGw6OmJhY2tJdGVtKCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotSGlzdG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdDo6
Zm9yd2FyZEl0ZW0oKQorSGlzdG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdEltcGw6OmZvcndhcmRJ
dGVtKCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKIH0KIAot
SGlzdG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdDo6Y3VycmVudEl0ZW0oKQorSGlzdG9yeUl0ZW0q
IEJhY2tGb3J3YXJkTGlzdEltcGw6OmN1cnJlbnRJdGVtKCkKIHsKICAgICByZXR1cm4gbV9jbGll
bnQtPmN1cnJlbnRJdGVtKCk7CiB9CiAKLWludCBCYWNrRm9yd2FyZExpc3Q6OmNhcGFjaXR5KCkK
K2ludCBCYWNrRm9yd2FyZExpc3RJbXBsOjpjYXBhY2l0eSgpCiB7CiAgICAgcmV0dXJuIG1fY2Fw
YWNpdHk7CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRDYXBhY2l0eShpbnQgc2l6ZSkK
K3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6c2V0Q2FwYWNpdHkoaW50IHNpemUpCiB7CiAgICAg
bV9jYXBhY2l0eSA9IHNpemU7CiB9CiAKLWJvb2wgQmFja0ZvcndhcmRMaXN0OjplbmFibGVkKCkK
K2Jvb2wgQmFja0ZvcndhcmRMaXN0SW1wbDo6ZW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIG1fZW5h
YmxlZDsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVk
KQordm9pZCBCYWNrRm9yd2FyZExpc3RJbXBsOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsK
ICAgICBtX2VuYWJsZWQgPSBlbmFibGVkOwogICAgIGlmICghZW5hYmxlZCkgewpAQCAtMTA2LDIy
ICsxMDYsMjIgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldEVuYWJsZWQoYm9vbCBlbgogICAg
IH0KIH0KIAotaW50IEJhY2tGb3J3YXJkTGlzdDo6YmFja0xpc3RDb3VudCgpCitpbnQgQmFja0Zv
cndhcmRMaXN0SW1wbDo6YmFja0xpc3RDb3VudCgpCiB7CiAgICAgcmV0dXJuIG1fY2xpZW50LT5i
YWNrTGlzdENvdW50KCk7CiB9CiAKLWludCBCYWNrRm9yd2FyZExpc3Q6OmZvcndhcmRMaXN0Q291
bnQoKQoraW50IEJhY2tGb3J3YXJkTGlzdEltcGw6OmZvcndhcmRMaXN0Q291bnQoKQogewogICAg
IHJldHVybiBtX2NsaWVudC0+Zm9yd2FyZExpc3RDb3VudCgpOwogfQogCi1IaXN0b3J5SXRlbSog
QmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleChpbnQgaW5kZXgpCitIaXN0b3J5SXRlbSogQmFj
a0ZvcndhcmRMaXN0SW1wbDo6aXRlbUF0SW5kZXgoaW50IGluZGV4KQogewogICAgIHJldHVybiBt
X2NsaWVudC0+aXRlbUF0SW5kZXgoaW5kZXgpOwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6
cHVzaFN0YXRlSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJdGVtKQordm9pZCBCYWNr
Rm9yd2FyZExpc3RJbXBsOjpwdXNoU3RhdGVJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IG5l
d0l0ZW0pCiB7CiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50ID0gbV9jbGllbnQtPmN1
cnJlbnRJdGVtKCk7CiAKQEAgLTEzMSwxMyArMTMxLDEzIEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0
OjpwdXNoU3RhdGVJdGVtKFBhc3MKICAgICAgICAgY3VycmVudC0+c2V0U3RhdGVPYmplY3QoU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKSk7CiB9CiAKLUhpc3RvcnlJdGVtVmVjdG9yJiBC
YWNrRm9yd2FyZExpc3Q6OmVudHJpZXMoKQorSGlzdG9yeUl0ZW1WZWN0b3ImIEJhY2tGb3J3YXJk
TGlzdEltcGw6OmVudHJpZXMoKQogewogICAgIHN0YXRpYyBIaXN0b3J5SXRlbVZlY3RvciBub0Vu
dHJpZXM7CiAgICAgcmV0dXJuIG5vRW50cmllczsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6
OmNsb3NlKCkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6Y2xvc2UoKQogewogICAgIGlmICht
X2NsaWVudCkKICAgICAgICAgbV9jbGllbnQtPmNsb3NlKCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAg
dm9pZCBCYWNrRm9yd2FyZExpc3Q6OmNsb3NlKCkKICAgICBtX2Nsb3NlZCA9IHRydWU7CiB9CiAK
LWJvb2wgQmFja0ZvcndhcmRMaXN0OjpjbG9zZWQoKQorYm9vbCBCYWNrRm9yd2FyZExpc3RJbXBs
OjpjbG9zZWQoKQogewogICAgIHJldHVybiBtX2Nsb3NlZDsKIH0KSW5kZXg6IFdlYkNvcmUvaGlz
dG9yeS9CYWNrRm9yd2FyZExpc3RJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3Rv
cnkvQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAJKHJldmlzaW9uIDYyNjc0KQkoZnJvbSBXZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcDo2MjY3NCkKKysrIFdlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZExpc3RJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCisK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCisj
aW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIERlZmF1bHRD
YXBhY2l0eSA9IDEwMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBOb0N1cnJlbnRJdGVtSW5kZXgg
PSBVSU5UX01BWDsKKworQmFja0ZvcndhcmRMaXN0OjpCYWNrRm9yd2FyZExpc3QoUGFnZSogcGFn
ZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jdXJyZW50KE5vQ3VycmVudEl0ZW1JbmRl
eCkKKyAgICAsIG1fY2FwYWNpdHkoRGVmYXVsdENhcGFjaXR5KQorICAgICwgbV9jbG9zZWQodHJ1
ZSkKKyAgICAsIG1fZW5hYmxlZCh0cnVlKQoreworfQorCitCYWNrRm9yd2FyZExpc3Q6On5CYWNr
Rm9yd2FyZExpc3QoKQoreworICAgIEFTU0VSVChtX2Nsb3NlZCk7Cit9CisKK3ZvaWQgQmFja0Zv
cndhcmRMaXN0OjphZGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IHBycEl0ZW0pCit7Cisg
ICAgQVNTRVJUKHBycEl0ZW0pOworICAgIGlmIChtX2NhcGFjaXR5ID09IDAgfHwgIW1fZW5hYmxl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFRvc3MgYW55dGhpbmcgaW4gdGhlIGZv
cndhcmQgbGlzdCAgICAKKyAgICBpZiAobV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkg
eworICAgICAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gbV9jdXJyZW50ICsgMTsKKyAgICAgICAg
d2hpbGUgKG1fZW50cmllcy5zaXplKCkgPiB0YXJnZXRTaXplKSB7CisgICAgICAgICAgICBSZWZQ
dHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMubGFzdCgpOworICAgICAgICAgICAgbV9l
bnRyaWVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIG1fZW50cnlIYXNoLnJlbW92ZShpdGVt
KTsKKyAgICAgICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBUb3NzIHRoZSBmaXJzdCBpdGVtIGlmIHRoZSBsaXN0IGlzIGdl
dHRpbmcgdG9vIGJpZywgYXMgbG9uZyBhcyB3ZSdyZSBub3QgdXNpbmcgaXQKKyAgICAvLyAob3Ig
ZXZlbiBpZiB3ZSBhcmUsIGlmIHdlIG9ubHkgd2FudCAxIGVudHJ5KS4KKyAgICBpZiAobV9lbnRy
aWVzLnNpemUoKSA9PSBtX2NhcGFjaXR5ICYmIChtX2N1cnJlbnQgIT0gMCB8fCBtX2NhcGFjaXR5
ID09IDEpKSB7CisgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllc1sw
XTsKKyAgICAgICAgbV9lbnRyaWVzLnJlbW92ZSgwKTsKKyAgICAgICAgbV9lbnRyeUhhc2gucmVt
b3ZlKGl0ZW0pOworICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0uZ2V0KCkpOworICAg
ICAgICBtX2N1cnJlbnQtLTsKKyAgICAgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgICAgIG1fcGFn
ZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hEaWRSZW1vdmVCYWNr
Rm9yd2FyZEl0ZW0oaXRlbS5nZXQoKSk7CisgICAgfQorCisgICAgbV9lbnRyeUhhc2guYWRkKHBy
cEl0ZW0uZ2V0KCkpOworICAgIG1fZW50cmllcy5pbnNlcnQobV9jdXJyZW50ICsgMSwgcHJwSXRl
bSk7CisgICAgbV9jdXJyZW50Kys7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZEFkZEJhY2tGb3J3YXJk
SXRlbShjdXJyZW50SXRlbSgpKTsKK30KKwordm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvQmFjaygp
Cit7CisgICAgQVNTRVJUKG1fY3VycmVudCA+IDApOworICAgIGlmIChtX2N1cnJlbnQgPiAwKSB7
CisgICAgICAgIG1fY3VycmVudC0tOworICAgICAgICBpZiAobV9wYWdlKQorICAgICAgICAgICAg
bV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5n
ZUJhY2tGb3J3YXJkSW5kZXgoKTsKKyAgICB9Cit9CisKK3ZvaWQgQmFja0ZvcndhcmRMaXN0Ojpn
b0ZvcndhcmQoKQoreworICAgIEFTU0VSVChtX2N1cnJlbnQgPCBtX2VudHJpZXMuc2l6ZSgpIC0g
MSk7CisgICAgaWYgKG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkgLSAxKSB7CisgICAgICAg
IG1fY3VycmVudCsrOworICAgICAgICBpZiAobV9wYWdlKQorICAgICAgICAgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUJhY2tGb3J3
YXJkSW5kZXgoKTsKKyAgICB9Cit9CisKK3ZvaWQgQmFja0ZvcndhcmRMaXN0Ojpnb1RvSXRlbShI
aXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBpZiAoIW1fZW50cmllcy5zaXplKCkgfHwgIWl0ZW0p
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgdW5zaWduZWQgaW50IGluZGV4ID0gMDsK
KyAgICBmb3IgKDsgaW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpOyArK2luZGV4KQorICAgICAgICBp
ZiAobV9lbnRyaWVzW2luZGV4XSA9PSBpdGVtKQorICAgICAgICAgICAgYnJlYWs7CisgICAgaWYg
KGluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSkgeworICAgICAgICBtX2N1cnJlbnQgPSBpbmRleDsK
KyAgICAgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxv
YWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hEaWRDaGFuZ2VCYWNrRm9yd2FyZEluZGV4KCk7Cisg
ICAgfQorfQorCitIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjpiYWNrSXRlbSgpCit7Cisg
ICAgaWYgKG1fY3VycmVudCAmJiBtX2N1cnJlbnQgIT0gTm9DdXJyZW50SXRlbUluZGV4KQorICAg
ICAgICByZXR1cm4gbV9lbnRyaWVzW21fY3VycmVudCAtIDFdLmdldCgpOworICAgIHJldHVybiAw
OworfQorCitIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjpjdXJyZW50SXRlbSgpCit7Cisg
ICAgaWYgKG1fY3VycmVudCAhPSBOb0N1cnJlbnRJdGVtSW5kZXgpCisgICAgICAgIHJldHVybiBt
X2VudHJpZXNbbV9jdXJyZW50XS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSGlzdG9yeUl0
ZW0qIEJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZEl0ZW0oKQoreworICAgIGlmIChtX2VudHJpZXMu
c2l6ZSgpICYmIG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkgLSAxKQorICAgICAgICByZXR1
cm4gbV9lbnRyaWVzW21fY3VycmVudCArIDFdLmdldCgpOworICAgIHJldHVybiAwOworfQorCit2
b2lkIEJhY2tGb3J3YXJkTGlzdDo6YmFja0xpc3RXaXRoTGltaXQoaW50IGxpbWl0LCBIaXN0b3J5
SXRlbVZlY3RvciYgbGlzdCkKK3sKKyAgICBsaXN0LmNsZWFyKCk7CisgICAgaWYgKG1fY3VycmVu
dCAhPSBOb0N1cnJlbnRJdGVtSW5kZXgpIHsKKyAgICAgICAgdW5zaWduZWQgZmlyc3QgPSBtYXgo
KGludCltX2N1cnJlbnQgLSBsaW1pdCwgMCk7CisgICAgICAgIGZvciAoOyBmaXJzdCA8IG1fY3Vy
cmVudDsgKytmaXJzdCkKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKG1fZW50cmllc1tmaXJzdF0p
OworICAgIH0KK30KKwordm9pZCBCYWNrRm9yd2FyZExpc3Q6OmZvcndhcmRMaXN0V2l0aExpbWl0
KGludCBsaW1pdCwgSGlzdG9yeUl0ZW1WZWN0b3ImIGxpc3QpCit7CisgICAgQVNTRVJUKGxpbWl0
ID4gLTEpOworICAgIGxpc3QuY2xlYXIoKTsKKyAgICBpZiAoIW1fZW50cmllcy5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgdW5zaWduZWQgbGFzdEVudHJ5ID0gbV9lbnRy
aWVzLnNpemUoKSAtIDE7CisgICAgaWYgKG1fY3VycmVudCA8IGxhc3RFbnRyeSkgeworICAgICAg
ICBpbnQgbGFzdCA9IG1pbihtX2N1cnJlbnQgKyBsaW1pdCwgbGFzdEVudHJ5KTsKKyAgICAgICAg
bGltaXQgPSBtX2N1cnJlbnQgKyAxOworICAgICAgICBmb3IgKDsgbGltaXQgPD0gbGFzdDsgKyts
aW1pdCkKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKG1fZW50cmllc1tsaW1pdF0pOworICAgIH0K
K30KKworaW50IEJhY2tGb3J3YXJkTGlzdDo6Y2FwYWNpdHkoKQoreworICAgIHJldHVybiBtX2Nh
cGFjaXR5OworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0Q2FwYWNpdHkoaW50IHNpemUp
Cit7ICAgIAorICAgIHdoaWxlIChzaXplIDwgKGludCltX2VudHJpZXMuc2l6ZSgpKSB7CisgICAg
ICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0KCk7CisgICAgICAg
IG1fZW50cmllcy5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fZW50cnlIYXNoLnJlbW92ZShpdGVt
KTsKKyAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShpdGVtLmdldCgpKTsKKyAgICB9CisKKyAg
ICBpZiAoIXNpemUpCisgICAgICAgIG1fY3VycmVudCA9IE5vQ3VycmVudEl0ZW1JbmRleDsKKyAg
ICBlbHNlIGlmIChtX2N1cnJlbnQgPiBtX2VudHJpZXMuc2l6ZSgpIC0gMSkgeworICAgICAgICBt
X2N1cnJlbnQgPSBtX2VudHJpZXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgaWYgKG1fcGFnZSkKKyAg
ICAgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0
Y2hEaWRDaGFuZ2VCYWNrRm9yd2FyZEluZGV4KCk7CisgICAgfQorICAgIG1fY2FwYWNpdHkgPSBz
aXplOworfQorCitib29sIEJhY2tGb3J3YXJkTGlzdDo6ZW5hYmxlZCgpCit7CisgICAgcmV0dXJu
IG1fZW5hYmxlZDsKK30KKwordm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldEVuYWJsZWQoYm9vbCBl
bmFibGVkKQoreworICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgaWYgKCFlbmFibGVkKSB7
CisgICAgICAgIGludCBjYXBhY2l0eSA9IG1fY2FwYWNpdHk7CisgICAgICAgIHNldENhcGFjaXR5
KDApOworICAgICAgICBzZXRDYXBhY2l0eShjYXBhY2l0eSk7CisgICAgfQorfQorCitpbnQgQmFj
a0ZvcndhcmRMaXN0OjpiYWNrTGlzdENvdW50KCkKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50ID09
IE5vQ3VycmVudEl0ZW1JbmRleCA/IDAgOiBtX2N1cnJlbnQ7Cit9CisKK2ludCBCYWNrRm9yd2Fy
ZExpc3Q6OmZvcndhcmRMaXN0Q291bnQoKQoreworICAgIHJldHVybiBtX2N1cnJlbnQgPT0gTm9D
dXJyZW50SXRlbUluZGV4ID8gMCA6IChpbnQpbV9lbnRyaWVzLnNpemUoKSAtIChtX2N1cnJlbnQg
KyAxKTsKK30KKworSGlzdG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdDo6aXRlbUF0SW5kZXgoaW50
IGluZGV4KQoreworICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aXRob3V0IGRvaW5nIG1hdGggb24g
aW5kZXggdG8gYXZvaWQgb3ZlcmZsb3cuCisgICAgaWYgKGluZGV4IDwgLShpbnQpbV9jdXJyZW50
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAoaW5kZXggPiBmb3J3YXJkTGlzdENv
dW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICByZXR1cm4gbV9lbnRyaWVz
W2luZGV4ICsgbV9jdXJyZW50XS5nZXQoKTsKK30KKworSGlzdG9yeUl0ZW1WZWN0b3ImIEJhY2tG
b3J3YXJkTGlzdDo6ZW50cmllcygpCit7CisgICAgcmV0dXJuIG1fZW50cmllczsKK30KKwordm9p
ZCBCYWNrRm9yd2FyZExpc3Q6OnB1c2hTdGF0ZUl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4g
bmV3SXRlbSkKK3sKKyAgICBBU1NFUlQobmV3SXRlbSk7CisgICAgQVNTRVJUKG5ld0l0ZW0tPnN0
YXRlT2JqZWN0KCkpOworICAgIAorICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gY3VycmVudCA9IGN1
cnJlbnRJdGVtKCk7CisgICAgQVNTRVJUKGN1cnJlbnQpOworCisgICAgYWRkSXRlbShuZXdJdGVt
KTsKKyAgICAKKyAgICBpZiAoIWN1cnJlbnQtPnN0YXRlT2JqZWN0KCkpCisgICAgICAgIGN1cnJl
bnQtPnNldFN0YXRlT2JqZWN0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCkpOworfQor
Cit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xvc2UoKQoreworICAgIGludCBzaXplID0gbV9lbnRy
aWVzLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAg
cGFnZUNhY2hlKCktPnJlbW92ZShtX2VudHJpZXNbaV0uZ2V0KCkpOworICAgIG1fZW50cmllcy5j
bGVhcigpOworICAgIG1fZW50cnlIYXNoLmNsZWFyKCk7CisgICAgbV9wYWdlID0gMDsKKyAgICBt
X2Nsb3NlZCA9IHRydWU7Cit9CisKK2Jvb2wgQmFja0ZvcndhcmRMaXN0OjpjbG9zZWQoKQorewor
ICAgIHJldHVybiBtX2Nsb3NlZDsKK30KKwordm9pZCBCYWNrRm9yd2FyZExpc3Q6OnJlbW92ZUl0
ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZW50cmllcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgaWYgKG1fZW50cmllc1tpXSA9PSBpdGVtKSB7CisgICAgICAgICAgICBtX2Vu
dHJpZXMucmVtb3ZlKGkpOworICAgICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwor
ICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJy
ZW50IDwgaSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChtX2N1cnJl
bnQgPiBpKQorICAgICAgICAgICAgICAgIG1fY3VycmVudC0tOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gbV9lbnRyaWVzLnNpemUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9jdXJyZW50ID49IGNvdW50KQorICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnQgPSBjb3VudCA/IGNvdW50IC0gMSA6IE5vQ3VycmVudEl0ZW1JbmRleDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cit9CisKK2Jvb2wgQmFja0Zv
cndhcmRMaXN0Ojpjb250YWluc0l0ZW0oSGlzdG9yeUl0ZW0qIGVudHJ5KQoreworICAgIHJldHVy
biBtX2VudHJ5SGFzaC5jb250YWlucyhlbnRyeSk7Cit9CisKKyNpZiBFTkFCTEUoV01MKQordm9p
ZCBCYWNrRm9yd2FyZExpc3Q6OmNsZWFyV01MUGFnZUhpc3RvcnkoKQoreworICAgIFJlZlB0cjxI
aXN0b3J5SXRlbT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50SXRlbSgpOworCisgICAgaW50
IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKG1fZW50cmllc1tpXS5nZXQoKSk7CisK
KyAgICBtX2VudHJpZXMuY2xlYXIoKTsKKyAgICBtX2VudHJ5SGFzaC5jbGVhcigpOworICAgIG1f
Y3VycmVudCA9IE5vQ3VycmVudEl0ZW1JbmRleDsKKworICAgIC8vIFNwZWM6IFRoZSBoaXN0b3J5
IHN0YWNrIG1heSBiZSByZXNldCB0byBhIHN0YXRlIHdoZXJlIGl0IG9ubHkgY29udGFpbnMgdGhl
IGN1cnJlbnQgY2FyZC4KKyAgICBhZGRJdGVtKGN1cnJlbnRJdGVtKTsKK30KKyNlbmRpZgorCit9
OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJk
TGlzdEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3RJbXBsLmNwcAkocmV2aXNpb24gNjI2NzQpCisrKyBXZWJDb3JlL2hpc3RvcnkvQmFja0Zvcndh
cmRMaXN0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVk
ZSAiQmFja0ZvcndhcmRMaXN0SW1wbC5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBz
dGF0aWMgY29uc3QgdW5zaWduZWQgRGVmYXVsdENhcGFjaXR5ID0gMTAwOwogc3RhdGljIGNvbnN0
IHVuc2lnbmVkIE5vQ3VycmVudEl0ZW1JbmRleCA9IFVJTlRfTUFYOwogCi1CYWNrRm9yd2FyZExp
c3Q6OkJhY2tGb3J3YXJkTGlzdChQYWdlKiBwYWdlKQorQmFja0ZvcndhcmRMaXN0SW1wbDo6QmFj
a0ZvcndhcmRMaXN0SW1wbChQYWdlKiBwYWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBt
X2N1cnJlbnQoTm9DdXJyZW50SXRlbUluZGV4KQogICAgICwgbV9jYXBhY2l0eShEZWZhdWx0Q2Fw
YWNpdHkpCkBAIC01MiwxMiArNTIsMTIgQEAgQmFja0ZvcndhcmRMaXN0OjpCYWNrRm9yd2FyZExp
c3QoUGFnZSogcAogewogfQogCi1CYWNrRm9yd2FyZExpc3Q6On5CYWNrRm9yd2FyZExpc3QoKQor
QmFja0ZvcndhcmRMaXN0SW1wbDo6fkJhY2tGb3J3YXJkTGlzdEltcGwoKQogewogICAgIEFTU0VS
VChtX2Nsb3NlZCk7CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFBhc3NSZWZQ
dHI8SGlzdG9yeUl0ZW0+IHBycEl0ZW0pCit2b2lkIEJhY2tGb3J3YXJkTGlzdEltcGw6OmFkZEl0
ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSkKIHsKICAgICBBU1NFUlQocHJwSXRl
bSk7CiAgICAgaWYgKG1fY2FwYWNpdHkgPT0gMCB8fCAhbV9lbmFibGVkKQpAQCAtOTMsNyArOTMs
NyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6YWRkSXRlbShQYXNzUmVmUHRyCiAgICAgICAgIG1f
cGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hEaWRBZGRCYWNr
Rm9yd2FyZEl0ZW0oY3VycmVudEl0ZW0oKSk7CiB9CiAKLXZvaWQgQmFja0ZvcndhcmRMaXN0Ojpn
b0JhY2soKQordm9pZCBCYWNrRm9yd2FyZExpc3RJbXBsOjpnb0JhY2soKQogewogICAgIEFTU0VS
VChtX2N1cnJlbnQgPiAwKTsKICAgICBpZiAobV9jdXJyZW50ID4gMCkgewpAQCAtMTAzLDcgKzEw
Myw3IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0Ojpnb0JhY2soKQogICAgIH0KIH0KIAotdm9pZCBC
YWNrRm9yd2FyZExpc3Q6OmdvRm9yd2FyZCgpCit2b2lkIEJhY2tGb3J3YXJkTGlzdEltcGw6Omdv
Rm9yd2FyZCgpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkgLSAx
KTsKICAgICBpZiAobV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpIHsKQEAgLTExMyw3
ICsxMTMsNyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Z29Gb3J3YXJkKCkKICAgICB9CiB9CiAK
LXZvaWQgQmFja0ZvcndhcmRMaXN0Ojpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKK3ZvaWQg
QmFja0ZvcndhcmRMaXN0SW1wbDo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiB7CiAgICAg
aWYgKCFtX2VudHJpZXMuc2l6ZSgpIHx8ICFpdGVtKQogICAgICAgICByZXR1cm47CkBAIC0xMjks
MjggKzEyOSwyOCBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Z29Ub0l0ZW0oSGlzdG9yeUl0CiAg
ICAgfQogfQogCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjpiYWNrSXRlbSgpCitIaXN0
b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0SW1wbDo6YmFja0l0ZW0oKQogewogICAgIGlmIChtX2N1
cnJlbnQgJiYgbV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkKICAgICAgICAgcmV0dXJu
IG1fZW50cmllc1ttX2N1cnJlbnQgLSAxXS5nZXQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotSGlz
dG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdDo6Y3VycmVudEl0ZW0oKQorSGlzdG9yeUl0ZW0qIEJh
Y2tGb3J3YXJkTGlzdEltcGw6OmN1cnJlbnRJdGVtKCkKIHsKICAgICBpZiAobV9jdXJyZW50ICE9
IE5vQ3VycmVudEl0ZW1JbmRleCkKICAgICAgICAgcmV0dXJuIG1fZW50cmllc1ttX2N1cnJlbnRd
LmdldCgpOwogICAgIHJldHVybiAwOwogfQogCi1IaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0
Ojpmb3J3YXJkSXRlbSgpCitIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0SW1wbDo6Zm9yd2Fy
ZEl0ZW0oKQogewogICAgIGlmIChtX2VudHJpZXMuc2l6ZSgpICYmIG1fY3VycmVudCA8IG1fZW50
cmllcy5zaXplKCkgLSAxKQogICAgICAgICByZXR1cm4gbV9lbnRyaWVzW21fY3VycmVudCArIDFd
LmdldCgpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6YmFja0xp
c3RXaXRoTGltaXQoaW50IGxpbWl0LCBIaXN0b3J5SXRlbVZlY3RvciYgbGlzdCkKK3ZvaWQgQmFj
a0ZvcndhcmRMaXN0SW1wbDo6YmFja0xpc3RXaXRoTGltaXQoaW50IGxpbWl0LCBIaXN0b3J5SXRl
bVZlY3RvciYgbGlzdCkKIHsKICAgICBsaXN0LmNsZWFyKCk7CiAgICAgaWYgKG1fY3VycmVudCAh
PSBOb0N1cnJlbnRJdGVtSW5kZXgpIHsKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIEJhY2tGb3J3
YXJkTGlzdDo6YmFja0xpc3RXaXRoTGltaXQoCiAgICAgfQogfQogCi12b2lkIEJhY2tGb3J3YXJk
TGlzdDo6Zm9yd2FyZExpc3RXaXRoTGltaXQoaW50IGxpbWl0LCBIaXN0b3J5SXRlbVZlY3RvciYg
bGlzdCkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1wbDo6Zm9yd2FyZExpc3RXaXRoTGltaXQoaW50
IGxpbWl0LCBIaXN0b3J5SXRlbVZlY3RvciYgbGlzdCkKIHsKICAgICBBU1NFUlQobGltaXQgPiAt
MSk7CiAgICAgbGlzdC5jbGVhcigpOwpAQCAtMTc2LDEyICsxNzYsMTIgQEAgdm9pZCBCYWNrRm9y
d2FyZExpc3Q6OmZvcndhcmRMaXN0V2l0aExpbQogICAgIH0KIH0KIAotaW50IEJhY2tGb3J3YXJk
TGlzdDo6Y2FwYWNpdHkoKQoraW50IEJhY2tGb3J3YXJkTGlzdEltcGw6OmNhcGFjaXR5KCkKIHsK
ICAgICByZXR1cm4gbV9jYXBhY2l0eTsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldENh
cGFjaXR5KGludCBzaXplKQordm9pZCBCYWNrRm9yd2FyZExpc3RJbXBsOjpzZXRDYXBhY2l0eShp
bnQgc2l6ZSkKIHsgICAgCiAgICAgd2hpbGUgKHNpemUgPCAoaW50KW1fZW50cmllcy5zaXplKCkp
IHsKICAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsK
QEAgLTIwMCwxMiArMjAwLDEyIEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRDYXBhY2l0eShp
bnQgc2kKICAgICBtX2NhcGFjaXR5ID0gc2l6ZTsKIH0KIAotYm9vbCBCYWNrRm9yd2FyZExpc3Q6
OmVuYWJsZWQoKQorYm9vbCBCYWNrRm9yd2FyZExpc3RJbXBsOjplbmFibGVkKCkKIHsKICAgICBy
ZXR1cm4gbV9lbmFibGVkOwogfQogCi12b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0RW5hYmxlZChi
b29sIGVuYWJsZWQpCit2b2lkIEJhY2tGb3J3YXJkTGlzdEltcGw6OnNldEVuYWJsZWQoYm9vbCBl
bmFibGVkKQogewogICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAgaWYgKCFlbmFibGVkKSB7
CkBAIC0yMTUsMTcgKzIxNSwxNyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0RW5hYmxlZChi
b29sIGVuCiAgICAgfQogfQogCi1pbnQgQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdENvdW50KCkK
K2ludCBCYWNrRm9yd2FyZExpc3RJbXBsOjpiYWNrTGlzdENvdW50KCkKIHsKICAgICByZXR1cm4g
bV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCA/IDAgOiBtX2N1cnJlbnQ7CiB9CiAKLWlu
dCBCYWNrRm9yd2FyZExpc3Q6OmZvcndhcmRMaXN0Q291bnQoKQoraW50IEJhY2tGb3J3YXJkTGlz
dEltcGw6OmZvcndhcmRMaXN0Q291bnQoKQogewogICAgIHJldHVybiBtX2N1cnJlbnQgPT0gTm9D
dXJyZW50SXRlbUluZGV4ID8gMCA6IChpbnQpbV9lbnRyaWVzLnNpemUoKSAtIChtX2N1cnJlbnQg
KyAxKTsKIH0KIAotSGlzdG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdDo6aXRlbUF0SW5kZXgoaW50
IGluZGV4KQorSGlzdG9yeUl0ZW0qIEJhY2tGb3J3YXJkTGlzdEltcGw6Oml0ZW1BdEluZGV4KGlu
dCBpbmRleCkKIHsKICAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2l0aG91dCBkb2luZyBtYXRoIG9u
IGluZGV4IHRvIGF2b2lkIG92ZXJmbG93LgogICAgIGlmIChpbmRleCA8IC0oaW50KW1fY3VycmVu
dCkKQEAgLTIzNywxMiArMjM3LDEyIEBAIEhpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3Q6Oml0
ZW1BdEluZGUKICAgICByZXR1cm4gbV9lbnRyaWVzW2luZGV4ICsgbV9jdXJyZW50XS5nZXQoKTsK
IH0KIAotSGlzdG9yeUl0ZW1WZWN0b3ImIEJhY2tGb3J3YXJkTGlzdDo6ZW50cmllcygpCitIaXN0
b3J5SXRlbVZlY3RvciYgQmFja0ZvcndhcmRMaXN0SW1wbDo6ZW50cmllcygpCiB7CiAgICAgcmV0
dXJuIG1fZW50cmllczsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnB1c2hTdGF0ZUl0ZW0o
UGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gbmV3SXRlbSkKK3ZvaWQgQmFja0ZvcndhcmRMaXN0SW1w
bDo6cHVzaFN0YXRlSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBuZXdJdGVtKQogewogICAg
IEFTU0VSVChuZXdJdGVtKTsKICAgICBBU1NFUlQobmV3SXRlbS0+c3RhdGVPYmplY3QoKSk7CkBA
IC0yNTYsNyArMjU2LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnB1c2hTdGF0ZUl0ZW0oUGFz
cwogICAgICAgICBjdXJyZW50LT5zZXRTdGF0ZU9iamVjdChTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmNsb3NlKCkKK3ZvaWQgQmFj
a0ZvcndhcmRMaXN0SW1wbDo6Y2xvc2UoKQogewogICAgIGludCBzaXplID0gbV9lbnRyaWVzLnNp
emUoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKQEAgLTI2NywxMiArMjY3
LDEyIEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9zZSgpCiAgICAgbV9jbG9zZWQgPSB0cnVl
OwogfQogCi1ib29sIEJhY2tGb3J3YXJkTGlzdDo6Y2xvc2VkKCkKK2Jvb2wgQmFja0ZvcndhcmRM
aXN0SW1wbDo6Y2xvc2VkKCkKIHsKICAgICByZXR1cm4gbV9jbG9zZWQ7CiB9CiAKLXZvaWQgQmFj
a0ZvcndhcmRMaXN0OjpyZW1vdmVJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQordm9pZCBCYWNrRm9y
d2FyZExpc3RJbXBsOjpyZW1vdmVJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQogewogICAgIGlmICgh
aXRlbSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjk0LDEzICsyOTQsMTMgQEAgdm9pZCBCYWNrRm9y
d2FyZExpc3Q6OnJlbW92ZUl0ZW0oSGlzdG9yeQogICAgICAgICB9CiB9CiAKLWJvb2wgQmFja0Zv
cndhcmRMaXN0Ojpjb250YWluc0l0ZW0oSGlzdG9yeUl0ZW0qIGVudHJ5KQorYm9vbCBCYWNrRm9y
d2FyZExpc3RJbXBsOjpjb250YWluc0l0ZW0oSGlzdG9yeUl0ZW0qIGVudHJ5KQogewogICAgIHJl
dHVybiBtX2VudHJ5SGFzaC5jb250YWlucyhlbnRyeSk7CiB9CiAKICNpZiBFTkFCTEUoV01MKQot
dm9pZCBCYWNrRm9yd2FyZExpc3Q6OmNsZWFyV01MUGFnZUhpc3RvcnkoKQordm9pZCBCYWNrRm9y
d2FyZExpc3RJbXBsOjpjbGVhcldNTFBhZ2VIaXN0b3J5KCkKIHsKICAgICBSZWZQdHI8SGlzdG9y
eUl0ZW0+IGN1cnJlbnRJdGVtID0gdGhpcy0+Y3VycmVudEl0ZW0oKTsKIApJbmRleDogV2ViQ29y
ZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oCShyZXZpc2lvbiA2MjY3NCkJKGZyb20gV2ViQ29y
ZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5oOjYyNjc0KQorKysgV2ViQ29yZS9oaXN0b3J5L0Jh
Y2tGb3J3YXJkTGlzdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEJhY2tGb3J3YXJkTGlzdF9oCisjZGVmaW5lIEJhY2tGb3J3YXJkTGlzdF9oCisKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBIaXN0b3J5SXRlbTsKK2NsYXNz
IFBhZ2U7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CitjbGFzcyBTdHJpbmc7CisKK3R5
cGVkZWYgVmVjdG9yPFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRlbVZlY3RvcjsKK3R5
cGVkZWYgSGFzaFNldDxSZWZQdHI8SGlzdG9yeUl0ZW0+ID4gSGlzdG9yeUl0ZW1IYXNoU2V0Owor
CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisvLyBJbiB0aGUgQ2hyb21pdW0gcG9ydCwgdGhlIGJh
Y2svZm9yd2FyZCBsaXN0IGlzIG1hbmFnZWQgZXh0ZXJuYWxseS4KKy8vIFNlZSBCYWNrRm9yd2Fy
ZExpc3RDaHJvbWl1bS5jcHAKK2NsYXNzIEJhY2tGb3J3YXJkTGlzdENsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+QmFja0ZvcndhcmRMaXN0Q2xpZW50KCkge30KKyAgICB2aXJ0dWFsIHZv
aWQgYWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBnb1RvSXRlbShIaXN0b3J5SXRlbSopID0gMDsKKyAgICB2aXJ0dWFsIEhpc3RvcnlJdGVtKiBj
dXJyZW50SXRlbSgpID0gMDsKKyAgICB2aXJ0dWFsIEhpc3RvcnlJdGVtKiBpdGVtQXRJbmRleChp
bnQpID0gMDsKKyAgICB2aXJ0dWFsIGludCBiYWNrTGlzdENvdW50KCkgPSAwOworICAgIHZpcnR1
YWwgaW50IGZvcndhcmRMaXN0Q291bnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkg
PSAwOworfTsKKyNlbmRpZgorCitjbGFzcyBCYWNrRm9yd2FyZExpc3QgOiBwdWJsaWMgUmVmQ291
bnRlZDxCYWNrRm9yd2FyZExpc3Q+IHsKK3B1YmxpYzogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
QmFja0ZvcndhcmRMaXN0PiBjcmVhdGUoUGFnZSogcGFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IEJhY2tGb3J3YXJkTGlzdChwYWdlKSk7IH0KKyAgICB+QmFja0ZvcndhcmRMaXN0KCk7CisKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90
aGVyIG1ldGhvZHMuIAorICAgIHZvaWQgc2V0Q2xpZW50KEJhY2tGb3J3YXJkTGlzdENsaWVudCog
Y2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CisjZW5kaWYKKyAgICAKKyAgICBQYWdlKiBw
YWdlKCkgeyByZXR1cm4gbV9wYWdlOyB9CisgICAgCisgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQ
dHI8SGlzdG9yeUl0ZW0+KTsKKyAgICB2b2lkIGdvQmFjaygpOworICAgIHZvaWQgZ29Gb3J3YXJk
KCk7CisgICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSopOworICAgICAgICAKKyAgICBIaXN0
b3J5SXRlbSogYmFja0l0ZW0oKTsKKyAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0oKTsKKyAg
ICBIaXN0b3J5SXRlbSogZm9yd2FyZEl0ZW0oKTsKKyAgICBIaXN0b3J5SXRlbSogaXRlbUF0SW5k
ZXgoaW50KTsKKworICAgIHZvaWQgYmFja0xpc3RXaXRoTGltaXQoaW50LCBIaXN0b3J5SXRlbVZl
Y3RvciYpOworICAgIHZvaWQgZm9yd2FyZExpc3RXaXRoTGltaXQoaW50LCBIaXN0b3J5SXRlbVZl
Y3RvciYpOworCisgICAgaW50IGNhcGFjaXR5KCk7CisgICAgdm9pZCBzZXRDYXBhY2l0eShpbnQp
OworICAgIGJvb2wgZW5hYmxlZCgpOworICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKyAgICBp
bnQgYmFja0xpc3RDb3VudCgpOworICAgIGludCBmb3J3YXJkTGlzdENvdW50KCk7CisgICAgYm9v
bCBjb250YWluc0l0ZW0oSGlzdG9yeUl0ZW0qKTsKKworICAgIHZvaWQgY2xvc2UoKTsKKyAgICBi
b29sIGNsb3NlZCgpOworICAgIAorICAgIHZvaWQgcmVtb3ZlSXRlbShIaXN0b3J5SXRlbSopOwor
ICAgIEhpc3RvcnlJdGVtVmVjdG9yJiBlbnRyaWVzKCk7CisgICAgCisgICAgdm9pZCBwdXNoU3Rh
dGVJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KTsKKworI2lmIEVOQUJMRShXTUwpCisgICAg
dm9pZCBjbGVhcldNTFBhZ2VIaXN0b3J5KCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBCYWNr
Rm9yd2FyZExpc3QoUGFnZSopOworICAgIAorICAgIFBhZ2UqIG1fcGFnZTsKKyNpZiBQTEFURk9S
TShDSFJPTUlVTSkgCisgICAgQmFja0ZvcndhcmRMaXN0Q2xpZW50KiBtX2NsaWVudDsKKyNlbHNl
CisgICAgSGlzdG9yeUl0ZW1WZWN0b3IgbV9lbnRyaWVzOworICAgIEhpc3RvcnlJdGVtSGFzaFNl
dCBtX2VudHJ5SGFzaDsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnQ7CisjZW5kaWYKKyAgICB1bnNp
Z25lZCBtX2NhcGFjaXR5OworICAgIGJvb2wgbV9jbG9zZWQ7CisgICAgYm9vbCBtX2VuYWJsZWQ7
Cit9OworICAgIAorfSAvL25hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0SW1wbC5oCShyZXZpc2lvbiA2MjY3NCkKKysrIFdlYkNvcmUv
aGlzdG9yeS9CYWNrRm9yd2FyZExpc3RJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDQ1ICsy
NSwyNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBCYWNrRm9yd2FyZExpc3Rf
aAotI2RlZmluZSBCYWNrRm9yd2FyZExpc3RfaAorI2lmbmRlZiBCYWNrRm9yd2FyZExpc3RJbXBs
X2gKKyNkZWZpbmUgQmFja0ZvcndhcmRMaXN0SW1wbF9oCiAKLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSAiQmFja0Zvcndh
cmRMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIaXN0
b3J5SXRlbTsKIGNsYXNzIFBhZ2U7Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci1jbGFz
cyBTdHJpbmc7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5
SXRlbVZlY3RvcjsKIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8SGlzdG9yeUl0ZW0+ID4gSGlzdG9y
eUl0ZW1IYXNoU2V0OwogCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0vLyBJbiB0aGUgQ2hyb21p
dW0gcG9ydCwgdGhlIGJhY2svZm9yd2FyZCBsaXN0IGlzIG1hbmFnZWQgZXh0ZXJuYWxseS4KLS8v
IFNlZSBCYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5jcHAKLWNsYXNzIEJhY2tGb3J3YXJkTGlzdENs
aWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QmFja0ZvcndhcmRMaXN0Q2xpZW50KCkge30K
LSAgICB2aXJ0dWFsIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSopID0gMDsKLSAgICB2aXJ0dWFs
IEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSgpID0gMDsKLSAgICB2aXJ0dWFsIEhpc3RvcnlJdGVt
KiBpdGVtQXRJbmRleChpbnQpID0gMDsKLSAgICB2aXJ0dWFsIGludCBiYWNrTGlzdENvdW50KCkg
PSAwOwotICAgIHZpcnR1YWwgaW50IGZvcndhcmRMaXN0Q291bnQoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNsb3NlKCkgPSAwOwotfTsKLSNlbmRpZgotCi1jbGFzcyBCYWNrRm9yd2FyZExpc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxCYWNrRm9yd2FyZExpc3Q+IHsKK2NsYXNzIEJhY2tGb3J3YXJk
TGlzdEltcGwgOiBwdWJsaWMgQmFja0ZvcndhcmRMaXN0IHsKIHB1YmxpYzogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8QmFja0ZvcndhcmRMaXN0PiBjcmVhdGUoUGFnZSogcGFnZSkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IEJhY2tGb3J3YXJkTGlzdChwYWdlKSk7IH0KLSAgICB+QmFja0ZvcndhcmRM
aXN0KCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmFja0ZvcndhcmRMaXN0SW1wbD4gY3JlYXRl
KFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBCYWNrRm9yd2FyZExpc3RJbXBsKHBh
Z2UpKTsgfQorICAgIH5CYWNrRm9yd2FyZExpc3RJbXBsKCk7CisKKyAgICBib29sIGlzQmFja0Zv
cndhcmRMaXN0SW1wbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQogICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgbWV0aG9kcy4g
CkBAIC0xMDYsNyArODcsNyBAQCBwdWJsaWM6IAogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgQmFj
a0ZvcndhcmRMaXN0KFBhZ2UqKTsKKyAgICBCYWNrRm9yd2FyZExpc3RJbXBsKFBhZ2UqKTsKICAg
ICAKICAgICBQYWdlKiBtX3BhZ2U7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pIApAQCAtMTIxLDYg
KzEwMiw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiB9OwogICAgIAotfSAvL25h
bWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlm
IC8vIEJhY2tGb3J3YXJkTGlzdEltcGxfaApJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyNzQyKQorKysgV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wNy0wNyAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDE4MjYKKyAgICAgICAgQ29udmVydCBCYWNrRm9yd2FyZExpc3QgdG8gYW4g
YWJzdHJhY3QgYmFzZSBjbGFzcyBhbmQgYWRkIEJhY2tGb3J3YXJkTGlzdEltcGwKKyAgICAgICAg
YXMgdGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIGl0LgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQ6OmNyZWF0ZUJh
Y2tGb3J3YXJkTGlzdCk6CisKIDIwMTAtMDctMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
QmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50LmNwcAkocmV2aXNpb24gNjI3NDIpCisrKyBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQmFja0ZvcndhcmRDb250cm9sbGVyQ2xp
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIldlYkJh
Y2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5oIgogCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvQmFja0ZvcndhcmRMaXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9CYWNr
Rm9yd2FyZExpc3RJbXBsLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOSw3
ICszOSw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50OjpiYWMKIAogUGFz
c1JlZlB0cjxCYWNrRm9yd2FyZExpc3Q+IFdlYkJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudDo6
Y3JlYXRlQmFja0ZvcndhcmRMaXN0KCkKIHsKLSAgICByZXR1cm4gQmFja0ZvcndhcmRMaXN0Ojpj
cmVhdGUobV9wYWdlLT5jb3JlUGFnZSgpKTsKKyAgICByZXR1cm4gQmFja0ZvcndhcmRMaXN0SW1w
bDo6Y3JlYXRlKG1fcGFnZS0+Y29yZVBhZ2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYyNzQyKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE4
MjYKKyAgICAgICAgQ29udmVydCBCYWNrRm9yd2FyZExpc3QgdG8gYW4gYWJzdHJhY3QgYmFzZSBj
bGFzcyBhbmQgYWRkIEJhY2tGb3J3YXJkTGlzdEltcGwKKyAgICAgICAgYXMgdGhlIGNvbmNyZXRl
IGltcGxlbWVudGF0aW9uIG9mIGl0LgorCisgICAgICAgICogSGlzdG9yeS9XZWJCYWNrRm9yd2Fy
ZExpc3QubW06CisgICAgICAgICgtW1dlYkJhY2tGb3J3YXJkTGlzdCBpbml0XSk6CisgICAgICAg
ICgtW1dlYkJhY2tGb3J3YXJkTGlzdCBzZXRQYWdlQ2FjaGVTaXplOl0pOgorICAgICAgICAoLVtX
ZWJCYWNrRm9yd2FyZExpc3QgcGFnZUNhY2hlU2l6ZV0pOgorCiAyMDEwLTA3LTA3ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxz
c29uLgpJbmRleDogV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCShyZXZp
c2lvbiA2Mjc0MikKKysrIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0J
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKICNpbXBvcnQgIldlYlByZWZlcmVuY2Vz
UHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViVmll
d1ByaXZhdGUuaCIKLSNpbXBvcnQgPFdlYkNvcmUvQmFja0ZvcndhcmRMaXN0Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL0JhY2tGb3J3YXJkTGlzdEltcGwuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9y
eUl0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdl
Q2FjaGUuaD4KQEAgLTEwOSw3ICsxMDksNyBAQCArICh2b2lkKWluaXRpYWxpemUKIAogLSAoaWQp
aW5pdAogewotICAgIHJldHVybiBbc2VsZiBpbml0V2l0aEJhY2tGb3J3YXJkTGlzdDpCYWNrRm9y
d2FyZExpc3Q6OmNyZWF0ZSgwKV07CisgICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoQmFja0Zvcndh
cmRMaXN0OkJhY2tGb3J3YXJkTGlzdEltcGw6OmNyZWF0ZSgwKV07CiB9CiAKIC0gKHZvaWQpZGVh
bGxvYwpAQCAtMjkzLDEyICsyOTMsMTQgQEAgLShOU1N0cmluZyAqKWRlc2NyaXB0aW9uCiAKIC0g
KHZvaWQpc2V0UGFnZUNhY2hlU2l6ZTooTlNVSW50ZWdlcilzaXplCiB7Ci0gICAgW2tpdChjb3Jl
KHNlbGYpLT5wYWdlKCkpIHNldFVzZXNQYWdlQ2FjaGU6c2l6ZSAhPSAwXTsKKyAgICBBU1NFUlQo
Y29yZShzZWxmKS0+aXNCYWNrRm9yd2FyZExpc3RJbXBsKCkpOworICAgIFtraXQoc3RhdGljX2Nh
c3Q8QmFja0ZvcndhcmRMaXN0SW1wbCo+KGNvcmUoc2VsZikpLT5wYWdlKCkpIHNldFVzZXNQYWdl
Q2FjaGU6c2l6ZSAhPSAwXTsKIH0KIAogLSAoTlNVSW50ZWdlcilwYWdlQ2FjaGVTaXplCiB7Ci0g
ICAgcmV0dXJuIFtraXQoY29yZShzZWxmKS0+cGFnZSgpKSB1c2VzUGFnZUNhY2hlXSA/IHBhZ2VD
YWNoZSgpLT5jYXBhY2l0eSgpIDogMDsKKyAgICBBU1NFUlQoY29yZShzZWxmKS0+aXNCYWNrRm9y
d2FyZExpc3RJbXBsKCkpOworICAgIHJldHVybiBba2l0KHN0YXRpY19jYXN0PEJhY2tGb3J3YXJk
TGlzdEltcGwqPihjb3JlKHNlbGYpKS0+cGFnZSgpKSB1c2VzUGFnZUNhY2hlXSA/IHBhZ2VDYWNo
ZSgpLT5jYXBhY2l0eSgpIDogMDsKIH0KIAogLSAoaW50KWJhY2tMaXN0Q291bnQKSW5kZXg6IFdl
YktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2
aXNpb24gNjI3NDIpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTAtMDctMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3Ig
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxODI2CisgICAgICAgIENv
bnZlcnQgQmFja0ZvcndhcmRMaXN0IHRvIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgYW5kIGFkZCBC
YWNrRm9yd2FyZExpc3RJbXBsCisgICAgICAgIGFzIHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlv
biBvZiBpdC4KKworICAgICAgICAqIEFwaS9xd2ViaGlzdG9yeS5jcHA6CisgICAgICAgIChRV2Vi
SGlzdG9yeTo6Y2xlYXIpOgorICAgICAgICAoUVdlYkhpc3Rvcnk6OmJhY2spOgorICAgICAgICAo
UVdlYkhpc3Rvcnk6OmZvcndhcmQpOgorICAgICAgICAoUVdlYkhpc3Rvcnk6OmdvVG9JdGVtKToK
KyAgICAgICAgKG9wZXJhdG9yPj4pOgorICAgICAgICAoUVdlYkhpc3RvcnlQcml2YXRlOjpwYWdl
KToKKwogMjAxMC0wNy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYmhp
c3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwCShy
ZXZpc2lvbiA2Mjc0MikKKysrIFdlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAicXdlYmhpc3RvcnlfcC5oIgogI2lu
Y2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RJbXBsLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1
ZGUgIktVUkwuaCIKQEAgLTI1OSw3ICsyNjAsNyBAQCB2b2lkIFFXZWJIaXN0b3J5OjpjbGVhcigp
CiAgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBsc3QgPSBkLT5sc3Q7CiAKICAgICAvL2Ns
ZWFyIHZpc2l0ZWQgbGlua3MKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gbHN0LT5wYWdlKCk7
CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3
YXJkTGlzdEltcGwqPihsc3QpLT5wYWdlKCk7CiAgICAgaWYgKHBhZ2UgJiYgcGFnZS0+Z3JvdXBQ
dHIoKSkKICAgICAgICAgcGFnZS0+Z3JvdXBQdHIoKS0+cmVtb3ZlVmlzaXRlZExpbmtzKCk7CiAK
QEAgLTM2Myw3ICszNjQsNyBAQCBib29sIFFXZWJIaXN0b3J5OjpjYW5Hb0ZvcndhcmQoKSBjb25z
dAogdm9pZCBRV2ViSGlzdG9yeTo6YmFjaygpCiB7CiAgICAgaWYgKGNhbkdvQmFjaygpKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBkLT5sc3QtPnBhZ2UoKTsKKyAgICAgICAgV2Vi
Q29yZTo6UGFnZSogcGFnZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdElt
cGwqPihkLT5sc3QpLT5wYWdlKCk7CiAgICAgICAgIHBhZ2UtPmdvVG9JdGVtKGQtPmxzdC0+YmFj
a0l0ZW0oKSwgV2ViQ29yZTo6RnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2FyZCk7CiAgICAg
fQogfQpAQCAtMzc3LDcgKzM3OCw3IEBAIHZvaWQgUVdlYkhpc3Rvcnk6OmJhY2soKQogdm9pZCBR
V2ViSGlzdG9yeTo6Zm9yd2FyZCgpCiB7CiAgICAgaWYgKGNhbkdvRm9yd2FyZCgpKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBkLT5sc3QtPnBhZ2UoKTsKKyAgICAgICAgV2ViQ29y
ZTo6UGFnZSogcGFnZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwq
PihkLT5sc3QpLT5wYWdlKCk7CiAgICAgICAgIHBhZ2UtPmdvVG9JdGVtKGQtPmxzdC0+Zm9yd2Fy
ZEl0ZW0oKSwgV2ViQ29yZTo6RnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2FyZCk7CiAgICAg
fQogfQpAQCAtMzg5LDcgKzM5MCw3IEBAIHZvaWQgUVdlYkhpc3Rvcnk6OmZvcndhcmQoKQogKi8K
IHZvaWQgUVdlYkhpc3Rvcnk6OmdvVG9JdGVtKGNvbnN0IFFXZWJIaXN0b3J5SXRlbSAmaXRlbSkK
IHsKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gZC0+bHN0LT5wYWdlKCk7CisgICAgV2ViQ29y
ZTo6UGFnZSogcGFnZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwq
PihkLT5sc3QpLT5wYWdlKCk7CiAgICAgcGFnZS0+Z29Ub0l0ZW0oaXRlbS5kLT5pdGVtLCBXZWJD
b3JlOjpGcmFtZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJkKTsKIH0KIApAQCAtNTM4LDcgKzUz
OSw3IEBAIFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KFFEYXRhU3RyZWFtJiBzb3UKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGQtPmxzdC0+cmVtb3ZlSXRlbShudWxsSXRlbSk7CiAgICAgICAg
ICAgICAvLyBVcGRhdGUgdGhlIEhpc3RvcnlDb250cm9sbGVyLgotICAgICAgICAgICAgaGlzdG9y
eS5kLT5sc3QtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5oaXN0b3J5KCktPnNldEN1
cnJlbnRJdGVtKGhpc3RvcnkuZC0+bHN0LT5lbnRyaWVzKClbY3VycmVudEluZGV4XS5nZXQoKSk7
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4o
aGlzdG9yeS5kLT5sc3QpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+aGlzdG9yeSgp
LT5zZXRDdXJyZW50SXRlbShoaXN0b3J5LmQtPmxzdC0+ZW50cmllcygpW2N1cnJlbnRJbmRleF0u
Z2V0KCkpOwogICAgICAgICAgICAgaGlzdG9yeS5nb1RvSXRlbShoaXN0b3J5Lml0ZW1BdChjdXJy
ZW50SW5kZXgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU1MCw3ICs1NTEsNyBAQCBRRGF0YVN0
cmVhbSYgb3BlcmF0b3I+PihRRGF0YVN0cmVhbSYgc291CiAKIFFXZWJQYWdlUHJpdmF0ZSogUVdl
Ykhpc3RvcnlQcml2YXRlOjpwYWdlKCkKIHsKLSAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6
a2l0KGxzdC0+cGFnZSgpLT5tYWluRnJhbWUoKSktPnBhZ2UoKS0+aGFuZGxlKCk7CisgICAgcmV0
dXJuIFFXZWJGcmFtZVByaXZhdGU6OmtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2Fy
ZExpc3RJbXBsKj4obHN0KS0+cGFnZSgpLT5tYWluRnJhbWUoKSktPnBhZ2UoKS0+aGFuZGxlKCk7
CiB9CiAKIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBRV2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjpjb3Jl
KFFXZWJIaXN0b3J5SXRlbSogcSkK
</data>
<flag name="review"
          id="48706"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>