<?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>46482</bug_id>
          
          <creation_ts>2010-09-24 10:36:22 -0700</creation_ts>
          <short_desc>Rename prefWidth functions and variables to preferredLogicalWidth</short_desc>
          <delta_ts>2010-09-24 11:21:35 -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>Layout and Rendering</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>
          
          <blocked>46123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>284512</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-24 10:36:22 -0700</bug_when>
    <thetext>Rename prefWidth functions and variables to prefLogicalWidth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284528</commentid>
    <comment_count>1</comment_count>
      <attachid>68710</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-24 10:47:18 -0700</bug_when>
    <thetext>Created attachment 68710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284547</commentid>
    <comment_count>2</comment_count>
      <attachid>68713</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-24 11:05:04 -0700</bug_when>
    <thetext>Created attachment 68713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284549</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-24 11:07:59 -0700</bug_when>
    <thetext>Fixed in r68276.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284560</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-24 11:21:35 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/68276 might have broken Chromium Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/68276
http://trac.webkit.org/changeset/68277</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68710</attachid>
            <date>2010-09-24 10:47:18 -0700</date>
            <delta_ts>2010-09-24 11:05:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>101263</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODI3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM2IEBACisyMDEwLTA5LTI0ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY0ODIKKyAgICAgICAgCisgICAg
ICAgIFJlbmFtZSBhbGwgb2YgdGhlIHByZWZXaWR0aCBmdW5jdGlvbnMgdG8gdXNlIHByZWZMb2dp
Y2FsV2lkdGggaW5zdGVhZC4KKworICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4pOgor
ICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0Ojpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0
aHMpOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlV2lk
dGgpOgorICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFRh
YmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFRhYmxl
TGF5b3V0Ojpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9G
aXhlZFRhYmxlTGF5b3V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJlZkxvZ2ljYWxXaWR0aHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZMb2dpY2FsV2lk
dGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpcnR5
TGluZUJveGVzRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxh
eW91dElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6UmVuZGVyQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6bWluUHJlZkxvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6Om1heFByZWZMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94Ojpjb21wdXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQ
cmVmTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6Y29tcHV0ZVByZWZMb2dpY2FsV2lk
dGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEYXRh
R3JpZDo6Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRGF0YUdyaWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRzZXQ6OmNvbXB1dGVQcmVmTG9naWNhbFdpZHRo
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZpbGVVcGxvYWRDb250cm9sOjpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4
aWJsZUJveDo6Y2FsY0hvcml6b250YWxQcmVmV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZsZXhpYmxlQm94OjpjYWxjVmVydGljYWxQcmVmV2lkdGhzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmFsbG93ZWRDaGlsZEZsZXgpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJGcmFtZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVCYXNlOjps
YXlvdXRXaXRoRmxhdHRlbmluZyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52
YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZhczo6Y2FudmFzU2l6ZUNo
YW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpjb21w
dXRlUHJlZkxvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RJdGVtOjp1cGRhdGVNYXJrZXJMb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjps
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVByZWZM
b2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnVwZGF0
ZU1hcmdpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1lbnVMaXN0Ojpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZXRQcmVmTG9naWNhbFdpZHRoc0RpcnR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aW52YWxpZGF0ZUNvbnRhaW5lclByZWZM
b2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnByZWZMb2dpY2FsV2lkdGhzRGlydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNS
ZWNhbGMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjptaW5QcmVmTG9naWNhbFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bWF4UHJlZkxvZ2ljYWxXaWR0
aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlcGxhY2VkOjpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJSZXBsaWNhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxpY2E6OmNvbXB1dGVQ
cmVmTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSb290Ojpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhclBhcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyUGFydDo6Y29t
cHV0ZVByZWZMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xs
YmFyUGFydC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNvbXB1dGVMb2dp
Y2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNvbXB1dGVQcmVmTG9n
aWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZUNlbGw6OmNvbXB1dGVQcmVmTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNv
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6Y29tcHV0ZVByZWZMb2dp
Y2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Ojp0cmltbWVkUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpt
aW5QcmVmTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Om1heFBy
ZWZMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29tcHV0ZVBy
ZWZMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OndpZHRoKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bDo6Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6cHJlZmVycmVkQ29udGVudFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkRGVjb3JhdGlvbldpZHRoUmlnaHQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWRlbzo6dXBkYXRlSW50cmluc2ljU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVmlldy5oOgorICAgICAgICAqIHJlbmRlcmluZy9UYWJsZUxheW91dC5oOgorCiAyMDEw
LTA5LTI0ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3Bw
CShyZXZpc2lvbiA2ODIzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6
OnJlY2FsY0NvbHVtbihpbnQgZQogCiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIGlmIChj
aGlsZC0+aXNUYWJsZUNvbCgpKQotICAgICAgICAgICAgdG9SZW5kZXJUYWJsZUNvbChjaGlsZCkt
PmNhbGNQcmVmV2lkdGhzKCk7CisgICAgICAgICAgICB0b1JlbmRlclRhYmxlQ29sKGNoaWxkKS0+
Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKCk7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5pc1Rh
YmxlU2VjdGlvbigpKSB7CiAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24g
PSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCk7CiAgICAgICAgICAgICBpbnQgbnVtUm93cyA9
IHNlY3Rpb24tPm51bVJvd3MoKTsKQEAgLTc5LDExICs3OSwxMSBAQCB2b2lkIEF1dG9UYWJsZUxh
eW91dDo6cmVjYWxjQ29sdW1uKGludCBlCiAgICAgICAgICAgICAgICAgICAgIC8vIGEgbWluL21h
eCB3aWR0aCBvZiBhdCBsZWFzdCAxcHggZm9yIHRoaXMgY29sdW1uIG5vdy4KICAgICAgICAgICAg
ICAgICAgICAgbC5taW5XaWR0aCA9IG1heChsLm1pbldpZHRoLCBjZWxsSGFzQ29udGVudCA/IDEg
OiAwKTsKICAgICAgICAgICAgICAgICAgICAgbC5tYXhXaWR0aCA9IG1heChsLm1heFdpZHRoLCAx
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwtPnByZWZXaWR0aHNEaXJ0eSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2VsbC0+Y2FsY1ByZWZXaWR0aHMoKTsKLSAgICAgICAgICAg
ICAgICAgICAgbC5taW5XaWR0aCA9IG1heChjZWxsLT5taW5QcmVmV2lkdGgoKSwgbC5taW5XaWR0
aCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLT5tYXhQcmVmV2lkdGgoKSA+IGwubWF4
V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGwubWF4V2lkdGggPSBjZWxsLT5tYXhQ
cmVmV2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwtPnByZWZMb2dpY2FsV2lk
dGhzRGlydHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPmNvbXB1dGVQcmVmTG9n
aWNhbFdpZHRocygpOworICAgICAgICAgICAgICAgICAgICBsLm1pbldpZHRoID0gbWF4KGNlbGwt
Pm1pblByZWZMb2dpY2FsV2lkdGgoKSwgbC5taW5XaWR0aCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjZWxsLT5tYXhQcmVmTG9naWNhbFdpZHRoKCkgPiBsLm1heFdpZHRoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsLm1heFdpZHRoID0gY2VsbC0+bWF4UHJlZkxvZ2ljYWxXaWR0aCgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29udHJpYnV0b3IgPSBjZWxsOwogICAgICAg
ICAgICAgICAgICAgICB9CiAKQEAgLTIzOSw3ICsyMzksNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRT
Y2FsZUNvbHVtbnMoUmVuZGVyVGFiCiAgICAgcmV0dXJuIHNjYWxlOwogfQogCi12b2lkIEF1dG9U
YWJsZUxheW91dDo6Y2FsY1ByZWZXaWR0aHMoaW50JiBtaW5XaWR0aCwgaW50JiBtYXhXaWR0aCkK
K3ZvaWQgQXV0b1RhYmxlTGF5b3V0Ojpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoaW50JiBtaW5X
aWR0aCwgaW50JiBtYXhXaWR0aCkKIHsKICAgICBmdWxsUmVjYWxjKCk7CiAKQEAgLTMxNyw4ICsz
MTcsOCBAQCBpbnQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlV2lkdGgoCiAKICAgICAg
ICAgaW50IGNvbCA9IG1fdGFibGUtPmNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpKTsKICAgICAgICAg
dW5zaWduZWQgaW50IGxhc3RDb2wgPSBjb2w7Ci0gICAgICAgIGludCBjTWluV2lkdGggPSBjZWxs
LT5taW5QcmVmV2lkdGgoKSArIGhzcGFjaW5nOwotICAgICAgICBmbG9hdCBjTWF4V2lkdGggPSBj
ZWxsLT5tYXhQcmVmV2lkdGgoKSArIGhzcGFjaW5nOworICAgICAgICBpbnQgY01pbldpZHRoID0g
Y2VsbC0+bWluUHJlZkxvZ2ljYWxXaWR0aCgpICsgaHNwYWNpbmc7CisgICAgICAgIGZsb2F0IGNN
YXhXaWR0aCA9IGNlbGwtPm1heFByZWZMb2dpY2FsV2lkdGgoKSArIGhzcGFjaW5nOwogICAgICAg
ICBpbnQgdG90YWxQZXJjZW50ID0gMDsKICAgICAgICAgaW50IG1pbldpZHRoID0gMDsKICAgICAg
ICAgZmxvYXQgbWF4V2lkdGggPSAwOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxl
TGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0
LmgJKHJldmlzaW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIEF1dG9UYWJs
ZUxheW91dChSZW5kZXJUYWJsZSopOwogICAgIH5BdXRvVGFibGVMYXlvdXQoKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocyhpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKGludCYgbWluV2lkdGgs
IGludCYgbWF4V2lkdGgpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogcHJvdGVjdGVk
OgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHJldmlzaW9uIDY4
MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBpbnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRo
QXJyYXkoaW50CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFZmZlY3RpdmVDb2x1bW4rKzsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b1JlbmRlclRh
YmxlQ29sKGNoaWxkKS0+Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICAgICAgICAgIHRvUmVuZGVyVGFi
bGVDb2woY2hpbGQpLT5jb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMTU1LDggKzE1NSw4IEBAIGludCBGaXhlZFRhYmxl
TGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAg
ICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBSZW5k
ZXJUYWJsZUNlbGwqIGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChjaGlsZCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNlbGwtPnByZWZXaWR0aHNEaXJ0eSgpKQotICAgICAgICAgICAgICAgICAgICBj
ZWxsLT5jYWxjUHJlZldpZHRocygpOworICAgICAgICAgICAgICAgIGlmIChjZWxsLT5wcmVmTG9n
aWNhbFdpZHRoc0RpcnR5KCkpCisgICAgICAgICAgICAgICAgICAgIGNlbGwtPmNvbXB1dGVQcmVm
TG9naWNhbFdpZHRocygpOwogCiAgICAgICAgICAgICAgICAgTGVuZ3RoIHcgPSBjZWxsLT5zdHls
ZU9yQ29sV2lkdGgoKTsKICAgICAgICAgICAgICAgICBpbnQgc3BhbiA9IGNlbGwtPmNvbFNwYW4o
KTsKQEAgLTE5MCw3ICsxOTAsNyBAQCBpbnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJy
YXkoaW50CiAvLyBLZWVwIHRoaXMgaW4gc3luY2ggd2l0aCBCTE9DS19NQVhfV0lEVEggaW4gUmVu
ZGVyQmxvY2suY3BwCiAjZGVmaW5lIFRBQkxFX01BWF9XSURUSCAxNTAwMAogCi12b2lkIEZpeGVk
VGFibGVMYXlvdXQ6OmNhbGNQcmVmV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgp
Cit2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmTG9naWNhbFdpZHRocyhpbnQmIG1p
bldpZHRoLCBpbnQmIG1heFdpZHRoKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGVudGlyZSBjYWxj
dWxhdGlvbiBpcyBpbmNvcnJlY3QgZm9yIGJvdGggbWlud2lkdGggYW5kIG1heHdpZHRoLgogICAg
IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkocmV2aXNpb24gNjgxNzQp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgRml4ZWRUYWJsZUxheW91dCA6IHB1YmxpYyBUYWJsZUxh
eQogcHVibGljOgogICAgIEZpeGVkVGFibGVMYXlvdXQoUmVuZGVyVGFibGUqKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocyhpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKGludCYgbWluV2lkdGgs
IGludCYgbWF4V2lkdGgpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogcHJvdGVjdGVk
OgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNjgyMzkpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3ODEs
NyArMTc4MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KIAog
ICAgICAgICAvLyBJZiByZWxheW91dENoaWxkcmVuIGlzIHNldCBhbmQgd2UgaGF2ZSBwZXJjZW50
YWdlIHBhZGRpbmcsIHdlIGFsc28gbmVlZCB0byBpbnZhbGlkYXRlIHRoZSBjaGlsZCdzIHByZWYg
d2lkdGhzLgogICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiAmJiAoY2hpbGQtPnN0eWxlKCkt
PnBhZGRpbmdMZWZ0KCkuaXNQZXJjZW50KCkgfHwgY2hpbGQtPnN0eWxlKCktPnBhZGRpbmdSaWdo
dCgpLmlzUGVyY2VudCgpKSkKLSAgICAgICAgICAgIGNoaWxkLT5zZXRQcmVmV2lkdGhzRGlydHko
dHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgY2hpbGQtPnNldFByZWZMb2dpY2FsV2lkdGhzRGly
dHkodHJ1ZSwgZmFsc2UpOwogCiAgICAgICAgIC8vIEhhbmRsZSB0aGUgZm91ciB0eXBlcyBvZiBz
cGVjaWFsIGVsZW1lbnRzIGZpcnN0LiAgVGhlc2UgaW5jbHVkZSBwb3NpdGlvbmVkIGNvbnRlbnQs
IGZsb2F0aW5nIGNvbnRlbnQsIGNvbXBhY3RzIGFuZAogICAgICAgICAvLyBydW4taW5zLiAgV2hl
biB3ZSBlbmNvdW50ZXIgdGhlc2UgZm91ciB0eXBlcyBvZiBvYmplY3RzLCB3ZSBkb24ndCBhY3R1
YWxseSBsYXkgdGhlbSBvdXQgYXMgbm9ybWFsIGZsb3cgYmxvY2tzLgpAQCAtMjAxMCw3ICsyMDEw
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdAogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gSWYgcmVsYXlvdXRDaGlsZHJlbiBpcyBzZXQgYW5kIHdl
IGhhdmUgcGVyY2VudGFnZSBwYWRkaW5nLCB3ZSBhbHNvIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUg
Y2hpbGQncyBwcmVmIHdpZHRocy4KICAgICAgICAgICAgIC8vaWYgKHJlbGF5b3V0Q2hpbGRyZW4g
JiYgKHItPnN0eWxlKCktPnBhZGRpbmdMZWZ0KCkuaXNQZXJjZW50KCkgfHwgci0+c3R5bGUoKS0+
cGFkZGluZ1JpZ2h0KCkuaXNQZXJjZW50KCkpKQotICAgICAgICAgICAgICAgIHItPnNldFByZWZX
aWR0aHNEaXJ0eSh0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgci0+c2V0UHJlZkxvZ2lj
YWxXaWR0aHNEaXJ0eSh0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
ICghci0+bmVlZHNMYXlvdXQoKSAmJiBwYWdpbmF0ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgp
LT5tX3BhZ2VIZWlnaHQpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5k
ZXJCbG9jayA9IHItPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2socikgOiAwOwpAQCAt
MzkzMyw3ICszOTMzLDcgQEAgaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlckJv
eAogICAgIGludCByZXN1bHQgPSBjbGVhclNldCA/IG1heCgwLCBib3R0b20gLSB5UG9zKSA6IDA7
CiAgICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQtPmF2b2lkc0Zsb2F0cygpKSB7CiAgICAgICAgIGlu
dCBhdmFpbGFibGVXaWR0aCA9IHRoaXMtPmF2YWlsYWJsZVdpZHRoKCk7Ci0gICAgICAgIGlmIChj
aGlsZC0+bWluUHJlZldpZHRoKCkgPiBhdmFpbGFibGVXaWR0aCkKKyAgICAgICAgaWYgKGNoaWxk
LT5taW5QcmVmTG9naWNhbFdpZHRoKCkgPiBhdmFpbGFibGVXaWR0aCkKICAgICAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgICAgIGludCB5ID0geVBvczsKQEAgLTQ1OTAsNDggKzQ1OTAsNDggQEAg
dm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1ucyhJbnRTaQogICAgIH0KIH0KIAotdm9p
ZCBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKQordm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0
ZVByZWZMb2dpY2FsV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwor
ICAgIEFTU0VSVChwcmVmTG9naWNhbFdpZHRoc0RpcnR5KCkpOwogCiAgICAgdXBkYXRlRmlyc3RM
ZXR0ZXIoKTsKIAogICAgIGlmICghaXNUYWJsZUNlbGwoKSAmJiBzdHlsZSgpLT53aWR0aCgpLmlz
Rml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkgPiAwKQotICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
c3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRo
ID0gbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
c3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgbV9taW5QcmVm
V2lkdGggPSAwOwotICAgICAgICBtX21heFByZWZXaWR0aCA9IDA7CisgICAgICAgIG1fbWluUHJl
ZkxvZ2ljYWxXaWR0aCA9IDA7CisgICAgICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IDA7CiAK
ICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCi0gICAgICAgICAgICBjYWxjSW5saW5lUHJl
ZldpZHRocygpOworICAgICAgICAgICAgY29tcHV0ZUlubGluZVByZWZMb2dpY2FsV2lkdGhzKCk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGNCbG9ja1ByZWZXaWR0aHMoKTsKKyAgICAg
ICAgICAgIGNvbXB1dGVCbG9ja1ByZWZMb2dpY2FsV2lkdGhzKCk7CiAKLSAgICAgICAgbV9tYXhQ
cmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIG1fbWF4UHJlZldpZHRoKTsKKyAgICAgICAg
bV9tYXhQcmVmTG9naWNhbFdpZHRoID0gbWF4KG1fbWluUHJlZkxvZ2ljYWxXaWR0aCwgbV9tYXhQ
cmVmTG9naWNhbFdpZHRoKTsKIAogICAgICAgICBpZiAoIXN0eWxlKCktPmF1dG9XcmFwKCkgJiYg
Y2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFBy
ZWZXaWR0aDsKKyAgICAgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZkxv
Z2ljYWxXaWR0aDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gQSBob3Jpem9udGFsIG1h
cnF1ZWUgd2l0aCBpbmxpbmUgY2hpbGRyZW4gaGFzIG5vIG1pbmltdW0gd2lkdGguCiAgICAgICAg
ICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFycXVl
ZSgpLT5pc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IDA7
CisgICAgICAgICAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gMDsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChpc1RhYmxlQ2VsbCgpKSB7CiAgICAgICAgICAgICBMZW5ndGggdyA9IHRv
UmVuZGVyVGFibGVDZWxsKHRoaXMpLT5zdHlsZU9yQ29sV2lkdGgoKTsKICAgICAgICAgICAgIGlm
ICh3LmlzRml4ZWQoKSAmJiB3LnZhbHVlKCkgPiAwKQotICAgICAgICAgICAgICAgIG1fbWF4UHJl
ZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0
aCh3LnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSBt
YXgobV9taW5QcmVmTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aCh3
LnZhbHVlKCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAoc3R5bGUoKS0+bWlu
V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpID4gMCkgewot
ICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAg
IG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExv
Z2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQ
cmVmTG9naWNhbFdpZHRoID0gbWF4KG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAg
IG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1heChtX21pblByZWZMb2dpY2FsV2lkdGgsIGNvbXB1
dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwog
ICAgIH0KICAgICAKICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAgICAgICBt
X21heFByZWZXaWR0aCA9IG1pbihtX21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dp
Y2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluUHJl
ZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0
aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmTG9naWNh
bFdpZHRoID0gbWluKG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dp
Y2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJl
ZkxvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50
Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAog
ICAgIGludCB0b0FkZCA9IDA7CkBAIC00NjQwLDEwICs0NjQwLDEwIEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc3R5bGUo
KS0+b3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCkKICAgICAgICAgdG9BZGQgKz0gdmVydGljYWxTY3Jv
bGxiYXJXaWR0aCgpOwogCi0gICAgbV9taW5QcmVmV2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhQ
cmVmV2lkdGggKz0gdG9BZGQ7CisgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoICs9IHRvQWRkOwor
ICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCArPSB0b0FkZDsKIAotICAgIHNldFByZWZXaWR0aHNE
aXJ0eShmYWxzZSk7CisgICAgc2V0UHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAK
IHN0cnVjdCBJbmxpbmVNaW5NYXhJdGVyYXRvciB7CkBAIC00NzQ3LDcgKzQ3NDcsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc3RyaXBUcmFpbGluZ1NwYWNlKGluCiAgICAgfQogfQogCi12b2lkIFJl
bmRlckJsb2NrOjpjYWxjSW5saW5lUHJlZldpZHRocygpCit2b2lkIFJlbmRlckJsb2NrOjpjb21w
dXRlSW5saW5lUHJlZkxvZ2ljYWxXaWR0aHMoKQogewogICAgIGludCBpbmxpbmVNYXggPSAwOwog
ICAgIGludCBpbmxpbmVNaW4gPSAwOwpAQCAtNDgyNiw3ICs0ODI2LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y2FsY0lubGluZVByZWZXaWR0aHMoKQogICAgICAgICAgICAgICAgICAgICBpbmxpbmVN
aW4gKz0gY2hpbGRNaW47CiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCArPSBjaGlsZE1h
eDsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRQ
cmVmV2lkdGhzRGlydHkoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0UHJl
ZkxvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gSW5saW5lIHJlcGxhY2VkIGVsdHMgYWRkIGluIHRoZWlyIG1h
cmdpbnMgdG8gdGhlaXIgbWluL21heCB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgIGludCBt
YXJnaW5zID0gMDsKQEAgLTQ4NDUsOCArNDg0NSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJ
bmxpbmVQcmVmV2lkdGhzKCkKICAgICAgICAgICAgICAgICAvLyBDYXNlICgyKS4gSW5saW5lIHJl
cGxhY2VkIGVsZW1lbnRzIGFuZCBmbG9hdHMuCiAgICAgICAgICAgICAgICAgLy8gR28gYWhlYWQg
YW5kIHRlcm1pbmF0ZSB0aGUgY3VycmVudCBsaW5lIGFzIGZhciBhcwogICAgICAgICAgICAgICAg
IC8vIG1pbndpZHRoIGlzIGNvbmNlcm5lZC4KLSAgICAgICAgICAgICAgICBjaGlsZE1pbiArPSBj
aGlsZC0+bWluUHJlZldpZHRoKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGRNYXggKz0gY2hpbGQt
Pm1heFByZWZXaWR0aCgpOworICAgICAgICAgICAgICAgIGNoaWxkTWluICs9IGNoaWxkLT5taW5Q
cmVmTG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICAgICAgY2hpbGRNYXggKz0gY2hpbGQtPm1h
eFByZWZMb2dpY2FsV2lkdGgoKTsKIAogICAgICAgICAgICAgICAgIGJvb2wgY2xlYXJQcmV2aW91
c0Zsb2F0OwogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpKSB7CkBAIC00
ODU5LDEzICs0ODU5LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhz
KCkKIAogICAgICAgICAgICAgICAgIGJvb2wgY2FuQnJlYWtSZXBsYWNlZEVsZW1lbnQgPSAhY2hp
bGQtPmlzSW1hZ2UoKSB8fCBhbGxvd0ltYWdlc1RvQnJlYWs7CiAgICAgICAgICAgICAgICAgaWYg
KChjYW5CcmVha1JlcGxhY2VkRWxlbWVudCAmJiAoYXV0b1dyYXAgfHwgb2xkQXV0b1dyYXApKSB8
fCBjbGVhclByZXZpb3VzRmxvYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lk
dGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CisgICAgICAgICAgICAgICAgICAg
IG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZkxvZ2ljYWxX
aWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IDA7CiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgc3VwcG9zZWQgdG8gY2xlYXIgdGhl
IHByZXZpb3VzIGZsb2F0LCB0aGVuIHRlcm1pbmF0ZSBtYXh3aWR0aCBhcyB3ZWxsLgogICAgICAg
ICAgICAgICAgIGlmIChjbGVhclByZXZpb3VzRmxvYXQpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9tYXhQcmVmV2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFByZWZXaWR0aCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IG1heChpbmxpbmVNYXgsIG1fbWF4
UHJlZkxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCA9IDA7CiAg
ICAgICAgICAgICAgICAgfQogCkBAIC00ODgzLDEyICs0ODgzLDEyIEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkKIAogICAgICAgICAgICAgICAgIGlmICghYXV0b1dy
YXAgfHwgIWNhbkJyZWFrUmVwbGFjZWRFbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChjaGlsZC0+aXNGbG9hdGluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVm
V2lkdGggPSBtYXgoY2hpbGRNaW4sIG1fbWluUHJlZldpZHRoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1heChjaGlsZE1pbiwgbV9taW5QcmVmTG9n
aWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5saW5lTWluICs9IGNoaWxkTWluOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIE5vdyBjaGVjayBvdXIgbGluZS4KLSAgICAgICAgICAgICAg
ICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoY2hpbGRNaW4sIG1fbWluUHJlZldpZHRoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbWF4KGNoaWxkTWluLCBt
X21pblByZWZMb2dpY2FsV2lkdGgpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBzdGFy
dCBhIG5ldyBsaW5lLgogICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOwpAQCAtNDkw
NSw3ICs0OTA1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0lubGluZVByZWZXaWR0aHMoKQog
ICAgICAgICAgICAgICAgIFJlbmRlclRleHQqIHQgPSB0b1JlbmRlclRleHQoY2hpbGQpOwogCiAg
ICAgICAgICAgICAgICAgaWYgKHQtPmlzV29yZEJyZWFrKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9taW5QcmVmV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1f
bWluUHJlZkxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IDA7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTQ5
MjYsNyArNDkyNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkK
ICAgICAgICAgICAgICAgICAvLyBUaGlzIHRleHQgb2JqZWN0IHdpbGwgbm90IGJlIHJlbmRlcmVk
LCBidXQgaXQgbWF5IHN0aWxsIHByb3ZpZGUgYSBicmVha2luZyBvcHBvcnR1bml0eS4KICAgICAg
ICAgICAgICAgICBpZiAoIWhhc0JyZWFrICYmIGNoaWxkTWF4ID09IDApIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG9XcmFwICYmIChiZWdpbldTIHx8IGVuZFdTKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZX
aWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBt
YXgoaW5saW5lTWluLCBtX21pblByZWZMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5saW5lTWluID0gMDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTQ5NTYsMTAgKzQ5NTYsMTAgQEAgdm9pZCBSZW5kZXJCbG9j
azo6Y2FsY0lubGluZVByZWZXaWR0aHMoKQogICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzdGFy
dCBhbmQgZW5kIHdpdGggd2hpdGVzcGFjZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2lu
V1MpCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgZW5kIHRoZSBjdXJy
ZW50IGxpbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChp
bmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWlu
UHJlZkxvZ2ljYWxXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCk7
CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5s
aW5lTWluICs9IGJlZ2luTWluOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lk
dGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZMb2dp
Y2FsV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gLT0gdGk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KIApAQCAtNDk2OCwxOCArNDk2OCwxOCBAQCB2b2lkIFJlbmRlckJs
b2NrOjpjYWxjSW5saW5lUHJlZldpZHRocygpCiAgICAgICAgICAgICAgICAgICAgIGlmIChlbmRX
UykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZW5kIGluIHdoaXRlc3BhY2UsIHdo
aWNoIG1lYW5zIHdlIGNhbiBnbyBhaGVhZAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5k
IGVuZCBvdXIgY3VycmVudCBsaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVm
V2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZM
b2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluID0gMDsKICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWlu
UHJlZldpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVmV2lkdGgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5Q
cmVmTG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IGVu
ZE1pbjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIGlmIChoYXNCcmVhaykgewogICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXgg
Kz0gYmVnaW5NYXg7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KGlu
bGluZU1heCwgbV9tYXhQcmVmV2lkdGgpOwotICAgICAgICAgICAgICAgICAgICBtX21heFByZWZX
aWR0aCA9IG1heChjaGlsZE1heCwgbV9tYXhQcmVmV2lkdGgpOworICAgICAgICAgICAgICAgICAg
ICBtX21heFByZWZMb2dpY2FsV2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFByZWZMb2dpY2Fs
V2lkdGgpOworICAgICAgICAgICAgICAgICAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSBtYXgo
Y2hpbGRNYXgsIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlu
bGluZU1heCA9IGVuZE1heDsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgaW5saW5lTWF4ICs9IGNoaWxkTWF4OwpAQCAtNDk4OSw4ICs0OTg5LDggQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Y2FsY0lubGluZVByZWZXaWR0aHMoKQogICAgICAgICAgICAgaWYgKGNoaWxk
LT5pc0xpc3RNYXJrZXIoKSkKICAgICAgICAgICAgICAgICBzdHJpcEZyb250U3BhY2VzID0gdHJ1
ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KGlu
bGluZU1pbiwgbV9taW5QcmVmV2lkdGgpOwotICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBt
YXgoaW5saW5lTWF4LCBtX21heFByZWZXaWR0aCk7CisgICAgICAgICAgICBtX21pblByZWZMb2dp
Y2FsV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZMb2dpY2FsV2lkdGgpOworICAgICAg
ICAgICAgbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gbWF4KGlubGluZU1heCwgbV9tYXhQcmVmTG9n
aWNhbFdpZHRoKTsKICAgICAgICAgICAgIGlubGluZU1pbiA9IGlubGluZU1heCA9IDA7CiAgICAg
ICAgICAgICBzdHJpcEZyb250U3BhY2VzID0gdHJ1ZTsKICAgICAgICAgICAgIHRyYWlsaW5nU3Bh
Y2VDaGlsZCA9IDA7CkBAIC01MDAyLDE0ICs1MDAyLDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNh
bGNJbmxpbmVQcmVmV2lkdGhzKCkKICAgICBpZiAoc3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNl
KCkpCiAgICAgICAgIHN0cmlwVHJhaWxpbmdTcGFjZShpbmxpbmVNYXgsIGlubGluZU1pbiwgdHJh
aWxpbmdTcGFjZUNoaWxkKTsKIAotICAgIG1fbWluUHJlZldpZHRoID0gbWF4KGlubGluZU1pbiwg
bV9taW5QcmVmV2lkdGgpOwotICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KGlubGluZU1heCwgbV9t
YXhQcmVmV2lkdGgpOworICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1heChpbmxpbmVNaW4s
IG1fbWluUHJlZkxvZ2ljYWxXaWR0aCk7CisgICAgbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gbWF4
KGlubGluZU1heCwgbV9tYXhQcmVmTG9naWNhbFdpZHRoKTsKIH0KIAogLy8gVXNlIGEgdmVyeSBs
YXJnZSB2YWx1ZSAoaW4gZWZmZWN0IGluZmluaXRlKS4KICNkZWZpbmUgQkxPQ0tfTUFYX1dJRFRI
IDE1MDAwCiAKLXZvaWQgUmVuZGVyQmxvY2s6OmNhbGNCbG9ja1ByZWZXaWR0aHMoKQordm9pZCBS
ZW5kZXJCbG9jazo6Y29tcHV0ZUJsb2NrUHJlZkxvZ2ljYWxXaWR0aHMoKQogewogICAgIGJvb2wg
bm93cmFwID0gc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IE5PV1JBUDsKIApAQCAtNTAyNSwxMSAr
NTAyNSwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKCkKICAgICAg
ICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgKGNoaWxkLT5pc0JveCgpICYmIHRvUmVuZGVy
Qm94KGNoaWxkKS0+YXZvaWRzRmxvYXRzKCkpKSB7CiAgICAgICAgICAgICBpbnQgZmxvYXRUb3Rh
bFdpZHRoID0gZmxvYXRMZWZ0V2lkdGggKyBmbG9hdFJpZ2h0V2lkdGg7CiAgICAgICAgICAgICBp
ZiAoY2hpbGQtPnN0eWxlKCktPmNsZWFyKCkgJiBDTEVGVCkgewotICAgICAgICAgICAgICAgIG1f
bWF4UHJlZldpZHRoID0gbWF4KGZsb2F0VG90YWxXaWR0aCwgbV9tYXhQcmVmV2lkdGgpOworICAg
ICAgICAgICAgICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IG1heChmbG9hdFRvdGFsV2lkdGgs
IG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAgICAgZmxvYXRMZWZ0V2lkdGgg
PSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5jbGVh
cigpICYgQ1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoZmxv
YXRUb3RhbFdpZHRoLCBtX21heFByZWZXaWR0aCk7CisgICAgICAgICAgICAgICAgbV9tYXhQcmVm
TG9naWNhbFdpZHRoID0gbWF4KGZsb2F0VG90YWxXaWR0aCwgbV9tYXhQcmVmTG9naWNhbFdpZHRo
KTsKICAgICAgICAgICAgICAgICBmbG9hdFJpZ2h0V2lkdGggPSAwOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC01MDQ2LDE0ICs1MDQ2LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNC
bG9ja1ByZWZXaWR0aHMoKQogICAgICAgICAgICAgbWFyZ2luUmlnaHQgKz0gbXIudmFsdWUoKTsK
ICAgICAgICAgbWFyZ2luID0gbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0OwogCi0gICAgICAgIGlu
dCB3ID0gY2hpbGQtPm1pblByZWZXaWR0aCgpICsgbWFyZ2luOwotICAgICAgICBtX21pblByZWZX
aWR0aCA9IG1heCh3LCBtX21pblByZWZXaWR0aCk7CisgICAgICAgIGludCB3ID0gY2hpbGQtPm1p
blByZWZMb2dpY2FsV2lkdGgoKSArIG1hcmdpbjsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdp
ZHRoID0gbWF4KHcsIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIAogICAgICAgICAv
LyBJRSBpZ25vcmVzIHRhYmxlcyBmb3IgY2FsY3VsYXRpb24gb2Ygbm93cmFwLiBNYWtlcyBzb21l
IHNlbnNlLgogICAgICAgICBpZiAobm93cmFwICYmICFjaGlsZC0+aXNUYWJsZSgpKQotICAgICAg
ICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgodywgbV9tYXhQcmVmV2lkdGgpOworICAgICAgICAg
ICAgbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gbWF4KHcsIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCk7
CiAKLSAgICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSArIG1hcmdpbjsKKyAgICAgICAg
dyA9IGNoaWxkLT5tYXhQcmVmTG9naWNhbFdpZHRoKCkgKyBtYXJnaW47CiAKICAgICAgICAgaWYg
KCFjaGlsZC0+aXNGbG9hdGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkg
JiYgdG9SZW5kZXJCb3goY2hpbGQpLT5hdm9pZHNGbG9hdHMoKSkgewpAQCAtNTA2MiwxMSArNTA2
MiwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKCkKICAgICAgICAg
ICAgICAgICAvLyBpcyBzbWFsbGVyIHRoYW4gdGhlIGZsb2F0IHdpZHRoLgogICAgICAgICAgICAg
ICAgIGludCBtYXhMZWZ0ID0gbWFyZ2luTGVmdCA+IDAgPyBtYXgoZmxvYXRMZWZ0V2lkdGgsIG1h
cmdpbkxlZnQpIDogZmxvYXRMZWZ0V2lkdGggKyBtYXJnaW5MZWZ0OwogICAgICAgICAgICAgICAg
IGludCBtYXhSaWdodCA9IG1hcmdpblJpZ2h0ID4gMCA/IG1heChmbG9hdFJpZ2h0V2lkdGgsIG1h
cmdpblJpZ2h0KSA6IGZsb2F0UmlnaHRXaWR0aCArIG1hcmdpblJpZ2h0OwotICAgICAgICAgICAg
ICAgIHcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkgKyBtYXhMZWZ0ICsgbWF4UmlnaHQ7CisgICAg
ICAgICAgICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmTG9naWNhbFdpZHRoKCkgKyBtYXhMZWZ0ICsg
bWF4UmlnaHQ7CiAgICAgICAgICAgICAgICAgdyA9IG1heCh3LCBmbG9hdExlZnRXaWR0aCArIGZs
b2F0UmlnaHRXaWR0aCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoZmxvYXRMZWZ0V2lkdGggKyBmbG9hdFJpZ2h0
V2lkdGgsIG1fbWF4UHJlZldpZHRoKTsKKyAgICAgICAgICAgICAgICBtX21heFByZWZMb2dpY2Fs
V2lkdGggPSBtYXgoZmxvYXRMZWZ0V2lkdGggKyBmbG9hdFJpZ2h0V2lkdGgsIG1fbWF4UHJlZkxv
Z2ljYWxXaWR0aCk7CiAgICAgICAgICAgICBmbG9hdExlZnRXaWR0aCA9IGZsb2F0UmlnaHRXaWR0
aCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01MDc2LDcgKzUwNzYsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKCkKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmbG9hdFJpZ2h0V2lkdGggKz0gdzsKICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBtX21heFByZWZXaWR0aCA9IG1heCh3LCBtX21heFByZWZXaWR0aCk7CisgICAgICAgICAg
ICBtX21heFByZWZMb2dpY2FsV2lkdGggPSBtYXgodywgbV9tYXhQcmVmTG9naWNhbFdpZHRoKTsK
IAogICAgICAgICAvLyBBIHZlcnkgc3BlY2lmaWMgV2luSUUgcXVpcmsuCiAgICAgICAgIC8vIEV4
YW1wbGU6CkBAIC01MDkyLDIyICs1MDkyLDIyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNCbG9j
a1ByZWZXaWR0aHMoKQogICAgICAgICAvLyBXZSBjYW4gYWNoaWV2ZSB0aGlzIGVmZmVjdCBieSBt
YWtpbmcgdGhlIG1heHdpZHRoIG9mIGJsb2NrcyB0aGF0IGNvbnRhaW4gdGFibGVzCiAgICAgICAg
IC8vIHdpdGggcGVyY2VudGFnZSB3aWR0aHMgYmUgaW5maW5pdGUgKGFzIGxvbmcgYXMgdGhleSBh
cmUgbm90IGluc2lkZSBhIHRhYmxlIGNlbGwpLgogICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aW5R
dWlya3NNb2RlKCkgJiYgY2hpbGQtPnN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgJiYKLSAg
ICAgICAgICAgICFpc1RhYmxlQ2VsbCgpICYmIGNoaWxkLT5pc1RhYmxlKCkgJiYgbV9tYXhQcmVm
V2lkdGggPCBCTE9DS19NQVhfV0lEVEgpIHsKKyAgICAgICAgICAgICFpc1RhYmxlQ2VsbCgpICYm
IGNoaWxkLT5pc1RhYmxlKCkgJiYgbV9tYXhQcmVmTG9naWNhbFdpZHRoIDwgQkxPQ0tfTUFYX1dJ
RFRIKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsK
ICAgICAgICAgICAgIHdoaWxlICghY2ItPmlzUmVuZGVyVmlldygpICYmICFjYi0+aXNUYWJsZUNl
bGwoKSkKICAgICAgICAgICAgICAgICBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsKICAgICAg
ICAgICAgIGlmICghY2ItPmlzVGFibGVDZWxsKCkpCi0gICAgICAgICAgICAgICAgbV9tYXhQcmVm
V2lkdGggPSBCTE9DS19NQVhfV0lEVEg7CisgICAgICAgICAgICAgICAgbV9tYXhQcmVmTG9naWNh
bFdpZHRoID0gQkxPQ0tfTUFYX1dJRFRIOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgIH0KIAogICAgIC8vIEFsd2F5cyBtYWtl
IHN1cmUgdGhlc2UgdmFsdWVzIGFyZSBub24tbmVnYXRpdmUuCi0gICAgbV9taW5QcmVmV2lkdGgg
PSBtYXgoMCwgbV9taW5QcmVmV2lkdGgpOwotICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KDAsIG1f
bWF4UHJlZldpZHRoKTsKKyAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtYXgoMCwgbV9taW5Q
cmVmTG9naWNhbFdpZHRoKTsKKyAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSBtYXgoMCwgbV9t
YXhQcmVmTG9naWNhbFdpZHRoKTsKIAotICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KGZsb2F0TGVm
dFdpZHRoICsgZmxvYXRSaWdodFdpZHRoLCBtX21heFByZWZXaWR0aCk7CisgICAgbV9tYXhQcmVm
TG9naWNhbFdpZHRoID0gbWF4KGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoLCBtX21h
eFByZWZMb2dpY2FsV2lkdGgpOwogfQogCiBib29sIFJlbmRlckJsb2NrOjpoYXNMaW5lSWZFbXB0
eSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDY4MjA2KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjI3
LDcgKzIyNyw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldp
ZHRocygpOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKTsKIAog
ICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBpbnQgbGFzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0OwpAQCAtNDE3LDggKzQxNyw4IEBAIHBy
aXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRl
c3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKIAotICAgIHZvaWQgY2Fs
Y0lubGluZVByZWZXaWR0aHMoKTsKLSAgICB2b2lkIGNhbGNCbG9ja1ByZWZXaWR0aHMoKTsKKyAg
ICB2b2lkIGNvbXB1dGVJbmxpbmVQcmVmTG9naWNhbFdpZHRocygpOworICAgIHZvaWQgY29tcHV0
ZUJsb2NrUHJlZkxvZ2ljYWxXaWR0aHMoKTsKIAogICAgIC8vIE9idGFpbnMgdGhlIG5lYXJlc3Qg
ZW5jbG9zaW5nIGJsb2NrIChpbmNsdWRpbmcgdGhpcyBibG9jaykgdGhhdCBjb250cmlidXRlcyBh
IGZpcnN0LWxpbmUgc3R5bGUgdG8gb3VyIGlubGluZQogICAgIC8vIGNoaWxkcmVuLgpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA2
ODIzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwMiw4ICsyMDIsOCBAQCBzdGF0aWMgaW5saW5lIElubGluZUJveCog
Y3JlYXRlSW5saW5lQm94CiBzdGF0aWMgaW5saW5lIHZvaWQgZGlydHlMaW5lQm94ZXNGb3JSZW5k
ZXJlcihSZW5kZXJPYmplY3QqIG8sIGJvb2wgZnVsbExheW91dCkKIHsKICAgICBpZiAoby0+aXNU
ZXh0KCkpIHsKLSAgICAgICAgaWYgKG8tPnByZWZXaWR0aHNEaXJ0eSgpICYmIG8tPmlzQ291bnRl
cigpKQotICAgICAgICAgICAgdG9SZW5kZXJUZXh0KG8pLT5jYWxjUHJlZldpZHRocygwKTsgLy8g
RklYTUU6IENvdW50ZXJzIGRlcGVuZCBvbiB0aGlzIGhhY2suIE5vIGNsdWUgd2h5LiBTaG91bGQg
YmUgaW52ZXN0aWdhdGVkIGFuZCByZW1vdmVkLgorICAgICAgICBpZiAoby0+cHJlZkxvZ2ljYWxX
aWR0aHNEaXJ0eSgpICYmIG8tPmlzQ291bnRlcigpKQorICAgICAgICAgICAgdG9SZW5kZXJUZXh0
KG8pLT5jb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoMCk7IC8vIEZJWE1FOiBDb3VudGVycyBkZXBl
bmQgb24gdGhpcyBoYWNrLiBObyBjbHVlIHdoeS4gU2hvdWxkIGJlIGludmVzdGlnYXRlZCBhbmQg
cmVtb3ZlZC4KICAgICAgICAgdG9SZW5kZXJUZXh0KG8pLT5kaXJ0eUxpbmVCb3hlcyhmdWxsTGF5
b3V0KTsKICAgICB9IGVsc2UKICAgICAgICAgdG9SZW5kZXJJbmxpbmUobyktPmRpcnR5TGluZUJv
eGVzKGZ1bGxMYXlvdXQpOwpAQCAtNTcxLDcgKzU3MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLy8gSWYgcmVsYXlvdXRDaGlsZHJlbiBpcyBzZXQgYW5kIHdlIGhhdmUgcGVyY2VudGFnZSBw
YWRkaW5nLCB3ZSBhbHNvIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2hpbGQncyBwcmVmIHdpZHRo
cy4KICAgICAgICAgICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiAmJiAoby0+c3R5bGUoKS0+
cGFkZGluZ0xlZnQoKS5pc1BlcmNlbnQoKSB8fCBvLT5zdHlsZSgpLT5wYWRkaW5nUmlnaHQoKS5p
c1BlcmNlbnQoKSkpCi0gICAgICAgICAgICAgICAgICAgIG8tPnNldFByZWZXaWR0aHNEaXJ0eSh0
cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIG8tPnNldFByZWZMb2dpY2FsV2lkdGhz
RGlydHkodHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG8t
PmlzUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgICAgICBvLT5jb250YWluaW5nQmxvY2so
KS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChib3gpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCShyZXZpc2lvbiA2ODI3MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDggKzcyLDggQEAgUmVuZGVyQm94OjpSZW5kZXJCb3goTm9k
ZSogbm9kZSkKICAgICAsIG1fbWFyZ2luUmlnaHQoMCkKICAgICAsIG1fbWFyZ2luVG9wKDApCiAg
ICAgLCBtX21hcmdpbkJvdHRvbSgwKQotICAgICwgbV9taW5QcmVmV2lkdGgoLTEpCi0gICAgLCBt
X21heFByZWZXaWR0aCgtMSkKKyAgICAsIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCgtMSkKKyAgICAs
IG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCgtMSkKICAgICAsIG1faW5saW5lQm94V3JhcHBlcigwKQog
ewogICAgIHNldElzQm94KCk7CkBAIC01MzksMjAgKzUzOSwyMCBAQCB2b2lkIFJlbmRlckJveDo6
cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50CiAgICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Q
b2ludChzb3VyY2UpOwogfQogCi1pbnQgUmVuZGVyQm94OjptaW5QcmVmV2lkdGgoKSBjb25zdAor
aW50IFJlbmRlckJveDo6bWluUHJlZkxvZ2ljYWxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHBy
ZWZXaWR0aHNEaXJ0eSgpKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckJveCo+KHRoaXMpLT5j
YWxjUHJlZldpZHRocygpOworICAgIGlmIChwcmVmTG9naWNhbFdpZHRoc0RpcnR5KCkpCisgICAg
ICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcyktPmNvbXB1dGVQcmVmTG9naWNhbFdpZHRo
cygpOwogICAgICAgICAKLSAgICByZXR1cm4gbV9taW5QcmVmV2lkdGg7CisgICAgcmV0dXJuIG1f
bWluUHJlZkxvZ2ljYWxXaWR0aDsKIH0KIAotaW50IFJlbmRlckJveDo6bWF4UHJlZldpZHRoKCkg
Y29uc3QKK2ludCBSZW5kZXJCb3g6Om1heFByZWZMb2dpY2FsV2lkdGgoKSBjb25zdAogewotICAg
IGlmIChwcmVmV2lkdGhzRGlydHkoKSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gqPih0
aGlzKS0+Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICBpZiAocHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSgp
KQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlckJveCo+KHRoaXMpLT5jb21wdXRlUHJlZkxvZ2lj
YWxXaWR0aHMoKTsKICAgICAgICAgCi0gICAgcmV0dXJuIG1fbWF4UHJlZldpZHRoOworICAgIHJl
dHVybiBtX21heFByZWZMb2dpY2FsV2lkdGg7CiB9CiAKIGludCBSZW5kZXJCb3g6Om92ZXJyaWRl
U2l6ZSgpIGNvbnN0CkBAIC0xMzgzLDcgKzEzODMsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0
ZUxvZ2ljYWxXaWR0aCgpCiAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2FsY01p
blZhbHVlKGNvbnRhaW5lcldpZHRoKTsKICAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1hcmdpblJp
Z2h0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0aCk7CiAgICAgICAgIGlmICh0cmVhdEFzUmVw
bGFjZWQpCi0gICAgICAgICAgICBzZXRXaWR0aChtYXgody52YWx1ZSgpICsgYm9yZGVyQW5kUGFk
ZGluZ1dpZHRoKCksIG1pblByZWZXaWR0aCgpKSk7CisgICAgICAgICAgICBzZXRXaWR0aChtYXgo
dy52YWx1ZSgpICsgYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCksIG1pblByZWZMb2dpY2FsV2lkdGgo
KSkpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDEzLDcgKzE0MTMsNyBAQCB2b2lk
IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgfQogCiAgICAgaWYgKHN0cmV0
Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSkgewotICAgICAgICBzZXRXaWR0aChtYXgod2lkdGgo
KSwgbWluUHJlZldpZHRoKCkpKTsKKyAgICAgICAgc2V0V2lkdGgobWF4KHdpZHRoKCksIG1pblBy
ZWZMb2dpY2FsV2lkdGgoKSkpOwogICAgICAgICB3ID0gTGVuZ3RoKHdpZHRoKCksIEZpeGVkKTsK
ICAgICB9CiAKQEAgLTE0NTQsOCArMTQ1NCw4IEBAIGludCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dp
Y2FsV2lkdGhVc2luZygKICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aFJlc3VsdCA9IGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCAtIG1hcmdpblN0YXJ0IC0gbWFyZ2luRW5kOwogCiAgICAgICAgIGlmIChz
aXplc1RvSW50cmluc2ljV2lkdGgod2lkdGhUeXBlKSkgewotICAgICAgICAgICAgbG9naWNhbFdp
ZHRoUmVzdWx0ID0gbWF4KGxvZ2ljYWxXaWR0aFJlc3VsdCwgbWluUHJlZldpZHRoKCkpOwotICAg
ICAgICAgICAgbG9naWNhbFdpZHRoUmVzdWx0ID0gbWluKGxvZ2ljYWxXaWR0aFJlc3VsdCwgbWF4
UHJlZldpZHRoKCkpOworICAgICAgICAgICAgbG9naWNhbFdpZHRoUmVzdWx0ID0gbWF4KGxvZ2lj
YWxXaWR0aFJlc3VsdCwgbWluUHJlZkxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgIGxvZ2lj
YWxXaWR0aFJlc3VsdCA9IG1pbihsb2dpY2FsV2lkdGhSZXN1bHQsIG1heFByZWZMb2dpY2FsV2lk
dGgoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgLy8gRklYTUU6IElmIHRoZSBjb250YWluaW5n
IGJsb2NrIGZsb3cgaXMgcGVycGVuZGljdWxhciB0byBvdXIgZGlyZWN0aW9uIHdlIG5lZWQgdG8g
dXNlIHRoZSBhdmFpbGFibGUgbG9naWNhbCBoZWlnaHQgaW5zdGVhZC4KICAgICAgICAgbG9naWNh
bFdpZHRoUmVzdWx0ID0gY29tcHV0ZUJvcmRlckJveExvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgu
Y2FsY1ZhbHVlKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkpOyAKQEAgLTIwMzEsOCArMjAzMSw4IEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChzdHJldGNoZXNUb01pbkludHJpbnNpY1dpZHRoKCkgJiYgd2lkdGgoKSA8
IG1pblByZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nKSB7Ci0gICAgICAgIGNvbXB1dGVQ
b3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoKG1pblByZWZXaWR0aCgpIC0gYm9yZGVy
c1BsdXNQYWRkaW5nLCBGaXhlZCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJEaXJlY3Rpb24s
CisgICAgaWYgKHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSAmJiB3aWR0aCgpIDwgbWlu
UHJlZkxvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nKSB7CisgICAgICAgIGNvbXB1
dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoKG1pblByZWZMb2dpY2FsV2lkdGgo
KSAtIGJvcmRlcnNQbHVzUGFkZGluZywgRml4ZWQpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVy
RGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5l
cldpZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoUmVzdWx0LCBtX21hcmdpbkxlZnQsIG1f
bWFyZ2luUmlnaHQsIHhSZXN1bHQpOwpAQCAtMjE2OCw4ICsyMTY4LDggQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgICAgICAgICAgaW50IHJpZ2h0VmFsdWUg
PSByaWdodC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOwogCiAgICAgICAgICAgICAvLyBGSVhN
RTogd291bGQgaXQgYmUgYmV0dGVyIHRvIGhhdmUgc2hyaW5rLXRvLWZpdCBpbiBvbmUgc3RlcD8K
LSAgICAgICAgICAgIGludCBwcmVmZXJyZWRXaWR0aCA9IG1heFByZWZXaWR0aCgpIC0gYm9yZGVy
c1BsdXNQYWRkaW5nOwotICAgICAgICAgICAgaW50IHByZWZlcnJlZE1pbldpZHRoID0gbWluUHJl
ZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgcHJlZmVycmVk
V2lkdGggPSBtYXhQcmVmTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAg
ICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5QcmVmTG9naWNhbFdpZHRoKCkgLSBi
b3JkZXJzUGx1c1BhZGRpbmc7CiAgICAgICAgICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBhdmFp
bGFibGVTcGFjZSAtIHJpZ2h0VmFsdWU7CiAgICAgICAgICAgICB3aWR0aFZhbHVlID0gbWluKG1h
eChwcmVmZXJyZWRNaW5XaWR0aCwgYXZhaWxhYmxlV2lkdGgpLCBwcmVmZXJyZWRXaWR0aCk7CiAg
ICAgICAgICAgICBsZWZ0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtICh3aWR0aFZhbHVlICsgcmln
aHRWYWx1ZSk7CkBAIC0yMTc4LDggKzIxNzgsOCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBv
c2l0aW9uZWRMb2dpY2FsCiAgICAgICAgICAgICBsZWZ0VmFsdWUgPSBsZWZ0LmNhbGNWYWx1ZShj
b250YWluZXJXaWR0aCk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBpdCBiZSBiZXR0
ZXIgdG8gaGF2ZSBzaHJpbmstdG8tZml0IGluIG9uZSBzdGVwPwotICAgICAgICAgICAgaW50IHBy
ZWZlcnJlZFdpZHRoID0gbWF4UHJlZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7Ci0gICAg
ICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQ
bHVzUGFkZGluZzsKKyAgICAgICAgICAgIGludCBwcmVmZXJyZWRXaWR0aCA9IG1heFByZWZMb2dp
Y2FsV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICAgICAgICAgIGludCBwcmVmZXJy
ZWRNaW5XaWR0aCA9IG1pblByZWZMb2dpY2FsV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsK
ICAgICAgICAgICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gbGVmdFZh
bHVlOwogICAgICAgICAgICAgd2lkdGhWYWx1ZSA9IG1pbihtYXgocHJlZmVycmVkTWluV2lkdGgs
IGF2YWlsYWJsZVdpZHRoKSwgcHJlZmVycmVkV2lkdGgpOwogICAgICAgICB9IGVsc2UgaWYgKGxl
ZnRJc0F1dG8gJiYgIXdpZHRoLmlzQXV0bygpICYmICFyaWdodElzQXV0bykgewpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDY4MjcwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw4ICsxNzUsOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCi0gICAgdmlydHVhbCBpbnQgbWluUHJlZldpZHRo
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbWF4UHJlZldpZHRoKCkgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgbWluUHJlZkxvZ2ljYWxXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IG1h
eFByZWZMb2dpY2FsV2lkdGgoKSBjb25zdDsKIAogICAgIGludCBvdmVycmlkZVNpemUoKSBjb25z
dDsKICAgICBpbnQgb3ZlcnJpZGVXaWR0aCgpIGNvbnN0OwpAQCAtMzU4LDcgKzM1OCw3IEBAIHBy
aXZhdGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIGFuZCBt
YXhpbXVtIHByZWZlcnJlZCB3aWR0aHMgZm9yIGFuIG9iamVjdC4KICAgICAvLyBUaGVzZSB2YWx1
ZXMgYXJlIHVzZWQgaW4gc2hyaW5rLXRvLWZpdCBsYXlvdXQgc3lzdGVtcy4KICAgICAvLyBUaGVz
ZSBpbmNsdWRlIHRhYmxlcywgcG9zaXRpb25lZCBvYmplY3RzLCBmbG9hdHMgYW5kIGZsZXhpYmxl
IGJveGVzLgotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpIHsgc2V0UHJlZldpZHRo
c0RpcnR5KGZhbHNlKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZkxvZ2ljYWxXaWR0
aHMoKSB7IHNldFByZWZMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOyB9CiAKIHByaXZhdGU6CiAg
ICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgY29udGVudHMgKyBib3JkZXJzICsgcGFkZGlu
Zy4gIFRoZSB4L3kgbG9jYXRpb24gaXMgcmVsYXRpdmUgdG8gb3VyIGNvbnRhaW5lciAod2hpY2gg
aXMgbm90IGFsd2F5cyBvdXIgcGFyZW50KS4KQEAgLTM3MCwxMSArMzcwLDExIEBAIHByb3RlY3Rl
ZDoKICAgICBpbnQgbV9tYXJnaW5Ub3A7CiAgICAgaW50IG1fbWFyZ2luQm90dG9tOwogCi0gICAg
Ly8gVGhlIHByZWZlcnJlZCB3aWR0aCBvZiB0aGUgZWxlbWVudCBpZiBpdCB3ZXJlIHRvIGJyZWFr
IGl0cyBsaW5lcyBhdCBldmVyeSBwb3NzaWJsZSBvcHBvcnR1bml0eS4KLSAgICBpbnQgbV9taW5Q
cmVmV2lkdGg7CisgICAgLy8gVGhlIHByZWZlcnJlZCBsb2dpY2FsIHdpZHRoIG9mIHRoZSBlbGVt
ZW50IGlmIGl0IHdlcmUgdG8gYnJlYWsgaXRzIGxpbmVzIGF0IGV2ZXJ5IHBvc3NpYmxlIG9wcG9y
dHVuaXR5LgorICAgIGludCBtX21pblByZWZMb2dpY2FsV2lkdGg7CiAgICAgCi0gICAgLy8gVGhl
IHByZWZlcnJlZCB3aWR0aCBvZiB0aGUgZWxlbWVudCBpZiBpdCBuZXZlciBicmVha3MgYW55IGxp
bmVzIGF0IGFsbC4KLSAgICBpbnQgbV9tYXhQcmVmV2lkdGg7CisgICAgLy8gVGhlIHByZWZlcnJl
ZCBsb2dpY2FsIHdpZHRoIG9mIHRoZSBlbGVtZW50IGlmIGl0IG5ldmVyIGJyZWFrcyBhbnkgbGlu
ZXMgYXQgYWxsLgorICAgIGludCBtX21heFByZWZMb2dpY2FsV2lkdGg7CiAKICAgICAvLyBGb3Ig
aW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLCB0aGUgaW5saW5lIGJveCB0aGF0IG93bnMgdXMuCiAg
ICAgSW5saW5lQm94KiBtX2lubGluZUJveFdyYXBwZXI7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJDb3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmNwcAkocmV2aXNpb24gNjgxNzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDEwICszMjgsMTAgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBSZW5kZXJDb3VudGVyOjpvcgogICAgIHJldHVybiB0ZXh0LmltcGwo
KTsKIH0KIAotdm9pZCBSZW5kZXJDb3VudGVyOjpjYWxjUHJlZldpZHRocyhpbnQgbGVhZCkKK3Zv
aWQgUmVuZGVyQ291bnRlcjo6Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKGludCBsZWFkKQogewog
ICAgIHNldFRleHRJbnRlcm5hbChvcmlnaW5hbFRleHQoKSk7Ci0gICAgUmVuZGVyVGV4dDo6Y2Fs
Y1ByZWZXaWR0aHMobGVhZCk7CisgICAgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZMb2dpY2FsV2lk
dGhzKGxlYWQpOwogfQogCiB2b2lkIFJlbmRlckNvdW50ZXI6OmludmFsaWRhdGUoY29uc3QgQXRv
bWljU3RyaW5nJiBpZGVudGlmaWVyKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291
bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAko
cmV2aXNpb24gNjgxNzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
aXNDb3VudGVyKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9y
aWdpbmFsVGV4dCgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRo
cyhpbnQgbGVhZFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZMb2dpY2FsV2lk
dGhzKGludCBsZWFkV2lkdGgpOwogCiAgICAgQ291bnRlckNvbnRlbnQgbV9jb3VudGVyOwogICAg
IG11dGFibGUgQ291bnRlck5vZGUqIG1fY291bnRlck5vZGU7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJEYXRhR3JpZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRGF0YUdyaWQuY3BwCShyZXZpc2lvbiA2ODIzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRhdGFHcmlkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMzQgKzg4LDM0IEBAIFJl
bmRlclN0eWxlKiBSZW5kZXJEYXRhR3JpZDo6aGVhZGVyU3R5bGUKICAgICByZXR1cm4gY29sdW1u
LT5oZWFkZXJTdHlsZSgpOwogfQogCi12b2lkIFJlbmRlckRhdGFHcmlkOjpjYWxjUHJlZldpZHRo
cygpCit2b2lkIFJlbmRlckRhdGFHcmlkOjpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKQogewot
ICAgIG1fbWluUHJlZldpZHRoID0gMDsKLSAgICBtX21heFByZWZXaWR0aCA9IDA7CisgICAgbV9t
aW5QcmVmTG9naWNhbFdpZHRoID0gMDsKKyAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSAwOwog
CiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCku
dmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwor
ICAgICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtX21heFByZWZMb2dpY2FsV2lkdGggPSBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwog
ICAgIGVsc2UKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBjb21wdXRlQ29udGVudEJveExvZ2lj
YWxXaWR0aChjRGVmYXVsdFdpZHRoKTsKKyAgICAgICAgbV9tYXhQcmVmTG9naWNhbFdpZHRoID0g
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoY0RlZmF1bHRXaWR0aCk7CiAKICAgICBpZiAo
c3R5bGUoKS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1
ZSgpID4gMCkgewotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0aCwg
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgp
KSk7Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjb21wdXRl
Q29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAg
ICAgICAgbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gbWF4KG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCwg
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgp
KSk7CisgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1heChtX21pblByZWZMb2dpY2Fs
V2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCku
dmFsdWUoKSkpOwogICAgIH0gZWxzZSBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8
fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNl
bnQoKSkpCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAgICAgICAgbV9taW5QcmVmTG9n
aWNhbFdpZHRoID0gMDsKICAgICBlbHNlCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQ
cmVmV2lkdGg7CisgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZkxvZ2lj
YWxXaWR0aDsKIAogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHls
ZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7Ci0gICAgICAgIG1f
bWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2lj
YWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5QcmVm
V2lkdGggPSBtaW4obV9taW5QcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRo
KHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZMb2dpY2Fs
V2lkdGggPSBtaW4obV9tYXhQcmVmTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2lj
YWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVm
TG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZkxvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRC
b3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogCiAg
ICAgaW50IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAgbV9taW5QcmVmV2lk
dGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhQcmVmV2lkdGggKz0gdG9BZGQ7CisgICAgbV9taW5QcmVm
TG9naWNhbFdpZHRoICs9IHRvQWRkOworICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCArPSB0b0Fk
ZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgc2V0UHJlZldpZHRoc0Rp
cnR5KGZhbHNlKTsKKyAgICBzZXRQcmVmTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAog
dm9pZCBSZW5kZXJEYXRhR3JpZDo6bGF5b3V0KCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckRhdGFHcmlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0
YUdyaWQuaAkocmV2aXNpb24gNjgxNzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRh
R3JpZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
RGF0YUdyaWQiOyB9CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAg
dmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmTG9naWNhbFdpZHRocygpOwogICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHkpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCShy
ZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsMTEgKzQ0LDExIEBAIFJlbmRlckZpZWxkc2V0OjpSZW5kZXJG
aWVsZHNldChOb2RlKiBlbGUKIHsKIH0KIAotdm9pZCBSZW5kZXJGaWVsZHNldDo6Y2FsY1ByZWZX
aWR0aHMoKQordm9pZCBSZW5kZXJGaWVsZHNldDo6Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKCkK
IHsKLSAgICBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICBSZW5kZXJCbG9jazo6
Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKCk7CiAgICAgaWYgKFJlbmRlckJveCogbGVnZW5kID0g
ZmluZExlZ2VuZCgpKSB7Ci0gICAgICAgIGludCBsZWdlbmRNaW5XaWR0aCA9IGxlZ2VuZC0+bWlu
UHJlZldpZHRoKCk7CisgICAgICAgIGludCBsZWdlbmRNaW5XaWR0aCA9IGxlZ2VuZC0+bWluUHJl
ZkxvZ2ljYWxXaWR0aCgpOwogCiAgICAgICAgIExlbmd0aCBsZWdlbmRNYXJnaW5MZWZ0ID0gbGVn
ZW5kLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgIExlbmd0aCBsZWdlbmRNYXJnaW5S
aWdodCA9IGxlZ2VuZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpOwpAQCAtNTksNyArNTksNyBAQCB2
b2lkIFJlbmRlckZpZWxkc2V0OjpjYWxjUHJlZldpZHRocygpCiAgICAgICAgIGlmIChsZWdlbmRN
YXJnaW5SaWdodC5pc0ZpeGVkKCkpCiAgICAgICAgICAgICBsZWdlbmRNaW5XaWR0aCArPSBsZWdl
bmRNYXJnaW5SaWdodC52YWx1ZSgpOwogCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1f
bWluUHJlZldpZHRoLCBsZWdlbmRNaW5XaWR0aCArIGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpKTsK
KyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbWF4KG1fbWluUHJlZkxvZ2ljYWxXaWR0
aCwgbGVnZW5kTWluV2lkdGggKyBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CiAgICAgfQogfQog
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmgJKHJldmlzaW9uIDY4MTc0KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NyArNDAsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxheW91dExl
Z2VuZChib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVm
V2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmTG9naWNhbFdpZHRocygpOwog
ICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCBib29sIHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDY4MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsNDEgKzI1Nyw0
MSBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjCiAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6OmNhbGNQcmVmV2lkdGhzKCkKK3ZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNv
bXB1dGVQcmVmTG9naWNhbFdpZHRocygpCiB7Ci0gICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgp
KTsKKyAgICBBU1NFUlQocHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAotICAgIG1fbWluUHJl
ZldpZHRoID0gMDsKLSAgICBtX21heFByZWZXaWR0aCA9IDA7CisgICAgbV9taW5QcmVmTG9naWNh
bFdpZHRoID0gMDsKKyAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSAwOwogCiAgICAgaWYgKHN0
eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDAp
Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjb21wdXRlQ29udGVu
dEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21p
blByZWZMb2dpY2FsV2lkdGggPSBtX21heFByZWZMb2dpY2FsV2lkdGggPSBjb21wdXRlQ29udGVu
dEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAgIGVsc2Ugewog
ICAgICAgICAvLyBGaWd1cmUgb3V0IGhvdyBiaWcgdGhlIGZpbGVuYW1lIHNwYWNlIG5lZWRzIHRv
IGJlIGZvciBhIGdpdmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzCiAgICAgICAgIC8vICh1c2luZyAi
MCIgYXMgdGhlIG5vbWluYWwgY2hhcmFjdGVyKS4KICAgICAgICAgY29uc3QgVUNoYXIgY2ggPSAn
MCc7CiAgICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IHN0eWxlKCktPmZvbnQoKS5mbG9hdFdpZHRo
KFRleHRSdW4oJmNoLCAxLCBmYWxzZSwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSkpOwotICAg
ICAgICBtX21heFByZWZXaWR0aCA9IChpbnQpY2VpbGYoY2hhcldpZHRoICogZGVmYXVsdFdpZHRo
TnVtQ2hhcnMpOworICAgICAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSAoaW50KWNlaWxmKGNo
YXJXaWR0aCAqIGRlZmF1bHRXaWR0aE51bUNoYXJzKTsKICAgICB9CiAKICAgICBpZiAoc3R5bGUo
KS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpID4g
MCkgewotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0aCwgY29tcHV0
ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0g
ICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVu
dEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAg
bV9tYXhQcmVmTG9naWNhbFdpZHRoID0gbWF4KG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCwgY29tcHV0
ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Cisg
ICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1heChtX21pblByZWZMb2dpY2FsV2lkdGgs
IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUo
KSkpOwogICAgIH0gZWxzZSBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCAoc3R5
bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSkp
Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdp
ZHRoID0gMDsKICAgICBlbHNlCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lk
dGg7CisgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZkxvZ2ljYWxXaWR0
aDsKIAogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5t
YXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7Ci0gICAgICAgIG1fbWF4UHJl
ZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0
aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5QcmVmV2lkdGgg
PSBtaW4obV9taW5QcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxl
KCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZMb2dpY2FsV2lkdGgg
PSBtaW4obV9tYXhQcmVmTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0
aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmTG9naWNh
bFdpZHRoID0gbWluKG1fbWluUHJlZkxvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dp
Y2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogCiAgICAgaW50
IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAgbV9taW5QcmVmV2lkdGggKz0g
dG9BZGQ7Ci0gICAgbV9tYXhQcmVmV2lkdGggKz0gdG9BZGQ7CisgICAgbV9taW5QcmVmTG9naWNh
bFdpZHRoICs9IHRvQWRkOworICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCArPSB0b0FkZDsKIAot
ICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CisgICAgc2V0UHJlZkxvZ2ljYWxXaWR0aHNE
aXJ0eShmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnJlY2VpdmVE
cm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCShyZXZpc2lvbiA2ODE3NCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJl
bmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wiOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZMb2dpY2FsV2lk
dGhzKCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYsIGludCB0eCwg
aW50IHR5KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiA2ODIzOSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDggKzEzMiw4
IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNIb3Jpem9udGFsUHIKICAgICAgICAgICAg
IG1hcmdpblJpZ2h0ICs9IG1yLnZhbHVlKCk7CiAgICAgICAgIG1hcmdpbiA9IG1hcmdpbkxlZnQg
KyBtYXJnaW5SaWdodDsKIAotICAgICAgICBtX21pblByZWZXaWR0aCArPSBjaGlsZC0+bWluUHJl
ZldpZHRoKCkgKyBtYXJnaW47Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoICs9IGNoaWxkLT5tYXhQ
cmVmV2lkdGgoKSArIG1hcmdpbjsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoICs9IGNo
aWxkLT5taW5QcmVmTG9naWNhbFdpZHRoKCkgKyBtYXJnaW47CisgICAgICAgIG1fbWF4UHJlZkxv
Z2ljYWxXaWR0aCArPSBjaGlsZC0+bWF4UHJlZkxvZ2ljYWxXaWR0aCgpICsgbWFyZ2luOwogICAg
IH0gICAgCiB9CiAKQEAgLTE1NSwzOSArMTU1LDM5IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OmNhbGNWZXJ0aWNhbFByZWYKICAgICAgICAgaWYgKG1yLmlzRml4ZWQoKSkKICAgICAgICAgICAg
IG1hcmdpbiArPSBtci52YWx1ZSgpOwogICAgICAgICAKLSAgICAgICAgaW50IHcgPSBjaGlsZC0+
bWluUHJlZldpZHRoKCkgKyBtYXJnaW47Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KHcs
IG1fbWluUHJlZldpZHRoKTsKKyAgICAgICAgaW50IHcgPSBjaGlsZC0+bWluUHJlZkxvZ2ljYWxX
aWR0aCgpICsgbWFyZ2luOworICAgICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtYXgodywg
bV9taW5QcmVmTG9naWNhbFdpZHRoKTsKICAgICAgICAgCi0gICAgICAgIHcgPSBjaGlsZC0+bWF4
UHJlZldpZHRoKCkgKyBtYXJnaW47Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KHcsIG1f
bWF4UHJlZldpZHRoKTsKKyAgICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmTG9naWNhbFdpZHRoKCkg
KyBtYXJnaW47CisgICAgICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IG1heCh3LCBtX21heFBy
ZWZMb2dpY2FsV2lkdGgpOwogICAgIH0gICAgCiB9CiAKLXZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OmNhbGNQcmVmV2lkdGhzKCkKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVQcmVmTG9n
aWNhbFdpZHRocygpCiB7Ci0gICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICBBU1NF
UlQocHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAogICAgIGlmIChzdHlsZSgpLT53aWR0aCgp
LmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkgPiAwKQotICAgICAgICBtX21p
blByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lk
dGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdp
ZHRoID0gbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lk
dGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgbV9taW5Q
cmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IDA7CisgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxX
aWR0aCA9IG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IDA7CiAKICAgICAgICAgaWYgKGhhc011bHRp
cGxlTGluZXMoKSB8fCBpc1ZlcnRpY2FsKCkpCiAgICAgICAgICAgICBjYWxjVmVydGljYWxQcmVm
V2lkdGhzKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGNIb3Jpem9udGFsUHJlZldp
ZHRocygpOwogCi0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBt
X21heFByZWZXaWR0aCk7CisgICAgICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IG1heChtX21p
blByZWZMb2dpY2FsV2lkdGgsIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCk7CiAgICAgfQogCiAgICAg
aWYgKHN0eWxlKCktPm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCku
dmFsdWUoKSA+IDApIHsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lk
dGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFs
dWUoKSkpOwotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY29t
cHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7
CisgICAgICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IG1heChtX21heFByZWZMb2dpY2FsV2lk
dGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFs
dWUoKSkpOworICAgICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmTG9n
aWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0
aCgpLnZhbHVlKCkpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCku
aXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5n
dGgpIHsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNvbXB1
dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwot
ICAgICAgICBtX21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAg
IG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZMb2dpY2FsV2lkdGgsIGNvbXB1
dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwor
ICAgICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmTG9naWNhbFdpZHRo
LCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVl
KCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsK
QEAgLTE5NSwxMCArMTk1LDEwIEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNQcmVmV2lk
dGhzKCkKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc3R5bGUoKS0+b3ZlcmZsb3dZKCkg
PT0gT1NDUk9MTCkKICAgICAgICAgdG9BZGQgKz0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwog
Ci0gICAgbV9taW5QcmVmV2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhQcmVmV2lkdGggKz0gdG9B
ZGQ7CisgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoICs9IHRvQWRkOworICAgIG1fbWF4UHJlZkxv
Z2ljYWxXaWR0aCArPSB0b0FkZDsKIAotICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7Cisg
ICAgc2V0UHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyRmxl
eGlibGVCb3g6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IC8qcGFnZUhl
aWdodCBGSVhNRTogSW1wbGVtZW50ICovKQpAQCAtMTA1NCw5ICsxMDU0LDkgQEAgaW50IFJlbmRl
ckZsZXhpYmxlQm94OjphbGxvd2VkQ2hpbGRGbGV4KAogICAgICAgICAgICAgICAgIGNoaWxkLT5z
dHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkKICAgICAgICAgICAgICAgICBtYXhXID0gY2hp
bGQtPnN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGNo
aWxkLT5zdHlsZSgpLT5tYXhXaWR0aCgpLnR5cGUoKSA9PSBJbnRyaW5zaWMpCi0gICAgICAgICAg
ICAgICAgbWF4VyA9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKTsKKyAgICAgICAgICAgICAgICBtYXhX
ID0gY2hpbGQtPm1heFByZWZMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGNo
aWxkLT5zdHlsZSgpLT5tYXhXaWR0aCgpLnR5cGUoKSA9PSBNaW5JbnRyaW5zaWMpCi0gICAgICAg
ICAgICAgICAgbWF4VyA9IGNoaWxkLT5taW5QcmVmV2lkdGgoKTsKKyAgICAgICAgICAgICAgICBt
YXhXID0gY2hpbGQtPm1pblByZWZMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgIGlmIChtYXhX
ID09IElOVF9NQVgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1heFc7CiAgICAgICAgICAgICBy
ZXR1cm4gbWF4KDAsIG1heFcgLSB3KTsKQEAgLTEwNzUsMTQgKzEwNzUsMTQgQEAgaW50IFJlbmRl
ckZsZXhpYmxlQm94OjphbGxvd2VkQ2hpbGRGbGV4KAogCiAgICAgLy8gRklYTUU6IEZvciBub3cg
anVzdCBoYW5kbGUgZml4ZWQgdmFsdWVzLgogICAgIGlmIChpc0hvcml6b250YWwoKSkgewotICAg
ICAgICBpbnQgbWluVyA9IGNoaWxkLT5taW5QcmVmV2lkdGgoKTsKKyAgICAgICAgaW50IG1pblcg
PSBjaGlsZC0+bWluUHJlZkxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBpbnQgdyA9IGNoaWxkLT5v
dmVycmlkZVdpZHRoKCkgLSBjaGlsZC0+Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAgICAgICAg
IGlmIChjaGlsZC0+c3R5bGUoKS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkpCiAgICAgICAgICAgICBt
aW5XID0gY2hpbGQtPnN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKTsKICAgICAgICAgZWxzZSBp
ZiAoY2hpbGQtPnN0eWxlKCktPm1pbldpZHRoKCkudHlwZSgpID09IEludHJpbnNpYykKLSAgICAg
ICAgICAgIG1pblcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCk7CisgICAgICAgICAgICBtaW5XID0g
Y2hpbGQtPm1heFByZWZMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnN0
eWxlKCktPm1pbldpZHRoKCkudHlwZSgpID09IE1pbkludHJpbnNpYykKLSAgICAgICAgICAgIG1p
blcgPSBjaGlsZC0+bWluUHJlZldpZHRoKCk7CisgICAgICAgICAgICBtaW5XID0gY2hpbGQtPm1p
blByZWZMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgIAogICAgICAgICBpbnQgYWxsb3dlZFNo
cmlua2FnZSA9IG1pbigwLCBtaW5XIC0gdyk7CiAgICAgICAgIHJldHVybiBhbGxvd2VkU2hyaW5r
YWdlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCShyZXZpc2lvbiA2
ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKCk7CiAgICAgdm9p
ZCBjYWxjSG9yaXpvbnRhbFByZWZXaWR0aHMoKTsKICAgICB2b2lkIGNhbGNWZXJ0aWNhbFByZWZX
aWR0aHMoKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwCShyZXZp
c2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDggQEAgdm9pZCBSZW5kZXJGcmFtZUJhc2U6OmxheW91
dFdpdGhGbGF0dGVuaQogCiAgICAgLy8gbmVlZCB0byB1cGRhdGUgdG8gY2FsY3VsYXRlIG1pbi9t
YXggY29ycmVjdGx5CiAgICAgdXBkYXRlV2lkZ2V0UG9zaXRpb24oKTsKLSAgICBpZiAoY2hpbGRS
b290LT5wcmVmV2lkdGhzRGlydHkoKSkKLSAgICAgICAgY2hpbGRSb290LT5jYWxjUHJlZldpZHRo
cygpOworICAgIGlmIChjaGlsZFJvb3QtPnByZWZMb2dpY2FsV2lkdGhzRGlydHkoKSkKKyAgICAg
ICAgY2hpbGRSb290LT5jb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKTsKIAogICAgIC8vIGlmIHNj
cm9sbGJhcnMgYXJlIG9mZiwgYW5kIHRoZSB3aWR0aCBvciBoZWlnaHQgYXJlIGZpeGVkCiAgICAg
Ly8gd2Ugb2JleSB0aGVtIGFuZCBkbyBub3QgZXhwYW5kLiBXaXRoIGZyYW1lIGZsYXR0ZW5pbmcK
QEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBSZW5kZXJGcmFtZUJhc2U6OmxheW91dFdpdGhGbGF0dGVu
aQogCiAgICAgLy8gbWFrZSBzdXJlIG1pbmltdW0gcHJlZmVycmVkIHdpZHRoIGlzIGVuZm9yY2Vk
CiAgICAgaWYgKGlzU2Nyb2xsYWJsZSB8fCAhZml4ZWRXaWR0aCkgewotICAgICAgICBzZXRXaWR0
aChtYXgod2lkdGgoKSwgY2hpbGRSb290LT5taW5QcmVmV2lkdGgoKSArIGhCb3JkZXIpKTsKKyAg
ICAgICAgc2V0V2lkdGgobWF4KHdpZHRoKCksIGNoaWxkUm9vdC0+bWluUHJlZkxvZ2ljYWxXaWR0
aCgpICsgaEJvcmRlcikpOwogICAgICAgICAvLyB1cGRhdGUgYWdhaW4gdG8gcGFzcyB0aGUgbmV3
IHdpZHRoIHRvIHRoZSBjaGlsZCBmcmFtZQogICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbigp
OwogICAgICAgICBjaGlsZEZyYW1lVmlldy0+bGF5b3V0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkocmV2aXNpb24gNjgyMzgpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsOCBA
QCB2b2lkIFJlbmRlckhUTUxDYW52YXM6OmNhbnZhc1NpemVDaGFuZ2VkCiAgICAgaWYgKCFwYXJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFwcmVmV2lkdGhzRGlydHkoKSkKLSAg
ICAgICAgc2V0UHJlZldpZHRoc0RpcnR5KHRydWUpOworICAgIGlmICghcHJlZkxvZ2ljYWxXaWR0
aHNEaXJ0eSgpKQorICAgICAgICBzZXRQcmVmTG9naWNhbFdpZHRoc0RpcnR5KHRydWUpOwogCiAg
ICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwogICAgIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDY4MjM5KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsOCAr
MTUxLDggQEAgdm9pZCBSZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbQogICAgICAg
ICAgICAgLy8gbGV0cyBzZWUgaWYgd2UgbmVlZCB0byByZWxheW91dCBhdCBhbGwuLgogICAgICAg
ICAgICAgaW50IG9sZHdpZHRoID0gd2lkdGgoKTsKICAgICAgICAgICAgIGludCBvbGRoZWlnaHQg
PSBoZWlnaHQoKTsKLSAgICAgICAgICAgIGlmICghcHJlZldpZHRoc0RpcnR5KCkpCi0gICAgICAg
ICAgICAgICAgc2V0UHJlZldpZHRoc0RpcnR5KHRydWUpOworICAgICAgICAgICAgaWYgKCFwcmVm
TG9naWNhbFdpZHRoc0RpcnR5KCkpCisgICAgICAgICAgICAgICAgc2V0UHJlZkxvZ2ljYWxXaWR0
aHNEaXJ0eSh0cnVlKTsKICAgICAgICAgICAgIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKICAgICAg
ICAgICAgIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCShyZXZpc2lvbiA2ODIzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMzkgKzE2MCwzOSBAQCB2b2lkIFJl
bmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsU2VsZWN0CiAgICAgICAgIHNjcm9sbFRvUmV2ZWFs
RWxlbWVudEF0TGlzdEluZGV4KGZpcnN0SW5kZXgpOwogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6
OmNhbGNQcmVmV2lkdGhzKCkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6Y29tcHV0ZVByZWZMb2dpY2Fs
V2lkdGhzKCkKIHsKICAgICBBU1NFUlQoIW1fb3B0aW9uc0NoYW5nZWQpOwogCi0gICAgbV9taW5Q
cmVmV2lkdGggPSAwOwotICAgIG1fbWF4UHJlZldpZHRoID0gMDsKKyAgICBtX21pblByZWZMb2dp
Y2FsV2lkdGggPSAwOworICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IDA7CiAKICAgICBpZiAo
c3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpID4g
MCkKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IGNvbXB1dGVDb250
ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgICAgIG1f
bWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IGNvbXB1dGVDb250
ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbV9vcHRpb25zV2lkdGggKyAyICogb3B0aW9uc1Nw
YWNpbmdIb3Jpem9udGFsOworICAgICAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSBtX29wdGlv
bnNXaWR0aCArIDIgKiBvcHRpb25zU3BhY2luZ0hvcml6b250YWw7CiAgICAgICAgIGlmIChtX3ZC
YXIpCi0gICAgICAgICAgICBtX21heFByZWZXaWR0aCArPSBtX3ZCYXItPndpZHRoKCk7CisgICAg
ICAgICAgICBtX21heFByZWZMb2dpY2FsV2lkdGggKz0gbV92QmFyLT53aWR0aCgpOwogICAgIH0K
IAogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5X
aWR0aCgpLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4
UHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0
aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lk
dGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFs
dWUoKSkpOworICAgICAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSBtYXgobV9tYXhQcmVmTG9n
aWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0
aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbWF4KG1fbWlu
UHJlZkxvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+
bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChzdHlsZSgpLT53aWR0aCgpLmlz
UGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdo
dCgpLmlzUGVyY2VudCgpKSkKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOworICAgICAgICBt
X21pblByZWZMb2dpY2FsV2lkdGggPSAwOwogICAgIGVsc2UKLSAgICAgICAgbV9taW5QcmVmV2lk
dGggPSBtX21heFByZWZXaWR0aDsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbV9t
YXhQcmVmTG9naWNhbFdpZHRoOwogCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhl
ZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsK
LSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250
ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwotICAgICAg
ICBtX21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hM
b2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4
UHJlZkxvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250
ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAg
ICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmTG9naWNhbFdpZHRoLCBjb21w
dXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsK
ICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKLSAgICBt
X21pblByZWZXaWR0aCArPSB0b0FkZDsKLSAgICBtX21heFByZWZXaWR0aCArPSB0b0FkZDsKKyAg
ICBtX21pblByZWZMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CisgICAgbV9tYXhQcmVmTG9naWNhbFdp
ZHRoICs9IHRvQWRkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBzZXRQ
cmVmV2lkdGhzRGlydHkoZmFsc2UpOworICAgIHNldFByZWZMb2dpY2FsV2lkdGhzRGlydHkoZmFs
c2UpOwogfQogCiBpbnQgUmVuZGVyTGlzdEJveDo6c2l6ZSgpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiA2ODIzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgTm9kZSoqIHN0b3BOb2RlID0gMCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0
ZVByZWZMb2dpY2FsV2lkdGhzKCk7CiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihi
b29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RJdGVtLmNwcAkocmV2aXNpb24gNjgyMDYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIFJlbmRl
ckxpc3RJdGVtOjp1cGRhdGVNYXJrZXJMb2NhdGlvCiAgICAgICAgICAgICAgICAgbGluZUJveFBh
cmVudCA9IHRoaXM7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobWFya2VyUGFyICE9IGxpbmVC
b3hQYXJlbnQgfHwgbV9tYXJrZXItPnByZWZXaWR0aHNEaXJ0eSgpKSB7CisgICAgICAgIGlmICht
YXJrZXJQYXIgIT0gbGluZUJveFBhcmVudCB8fCBtX21hcmtlci0+cHJlZkxvZ2ljYWxXaWR0aHNE
aXJ0eSgpKSB7CiAgICAgICAgICAgICAvLyBSZW1vdmluZyBhbmQgYWRkaW5nIHRoZSBtYXJrZXIg
Y2FuIHRyaWdnZXIgcmVwYWludGluZyBpbgogICAgICAgICAgICAgLy8gY29udGFpbmVycyBvdGhl
ciB0aGFuIG91cnNlbHZlcywgc28gd2UgbmVlZCB0byBkaXNhYmxlIExheW91dFN0YXRlLgogICAg
ICAgICAgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKQEAgLTIxOSwyMCArMjE5LDIw
IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0ZU1hcmtlckxvY2F0aW8KICAgICAgICAgICAg
IGlmICghbGluZUJveFBhcmVudCkKICAgICAgICAgICAgICAgICBsaW5lQm94UGFyZW50ID0gdGhp
czsKICAgICAgICAgICAgIGxpbmVCb3hQYXJlbnQtPmFkZENoaWxkKG1fbWFya2VyLCBmaXJzdE5v
bk1hcmtlckNoaWxkKGxpbmVCb3hQYXJlbnQpKTsKLSAgICAgICAgICAgIGlmIChtX21hcmtlci0+
cHJlZldpZHRoc0RpcnR5KCkpCi0gICAgICAgICAgICAgICAgbV9tYXJrZXItPmNhbGNQcmVmV2lk
dGhzKCk7CisgICAgICAgICAgICBpZiAobV9tYXJrZXItPnByZWZMb2dpY2FsV2lkdGhzRGlydHko
KSkKKyAgICAgICAgICAgICAgICBtX21hcmtlci0+Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKCk7
CiAgICAgICAgICAgICB2aWV3KCktPmVuYWJsZUxheW91dFN0YXRlKCk7CiAgICAgICAgIH0KICAg
ICB9CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEl0ZW06OmNhbGNQcmVmV2lkdGhzKCkKK3ZvaWQgUmVu
ZGVyTGlzdEl0ZW06OmNvbXB1dGVQcmVmTG9naWNhbFdpZHRocygpCiB7Ci0gICAgQVNTRVJUKHBy
ZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICBBU1NFUlQocHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsK
ICAgICAKICAgICB1cGRhdGVNYXJrZXJMb2NhdGlvbigpOwogCi0gICAgUmVuZGVyQmxvY2s6OmNh
bGNQcmVmV2lkdGhzKCk7CisgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVQcmVmTG9naWNhbFdpZHRo
cygpOwogfQogCiB2b2lkIFJlbmRlckxpc3RJdGVtOjpsYXlvdXQoKQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0SXRlbS5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwog
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldp
ZHRocygpOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbkxpc3RNYXJrZXIoKTsKIApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDY4MTc0KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzQsMTMg
KzEyNzQsMTMgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogdm9p
ZCBSZW5kZXJMaXN0TWFya2VyOjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgp
KTsKLSAgICBBU1NFUlQoIXByZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICBBU1NFUlQoIXByZWZMb2dp
Y2FsV2lkdGhzRGlydHkoKSk7CiAKICAgICBpZiAoaXNJbWFnZSgpKSB7CiAgICAgICAgIHNldFdp
ZHRoKG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLndp
ZHRoKCkpOwogICAgICAgICBzZXRIZWlnaHQobV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSkuaGVpZ2h0KCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNl
dFdpZHRoKG1pblByZWZXaWR0aCgpKTsKKyAgICAgICAgc2V0V2lkdGgobWluUHJlZkxvZ2ljYWxX
aWR0aCgpKTsKICAgICAgICAgc2V0SGVpZ2h0KHN0eWxlKCktPmZvbnQoKS5oZWlnaHQoKSk7CiAg
ICAgfQogCkBAIC0xMzA4LDkgKzEzMDgsOSBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmltYWdl
Q2hhbmdlZChXcmFwCiAgICAgICAgIHJlcGFpbnQoKTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0TWFy
a2VyOjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNvbXB1dGVQcmVm
TG9naWNhbFdpZHRocygpCiB7Ci0gICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICBB
U1NFUlQocHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAogICAgIG1fdGV4dCA9ICIiOwogCkBA
IC0xMzIxLDggKzEzMjEsOCBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNhbGNQcmVmV2lkdGhz
KCkKICAgICAgICAgLy8gdW50aWwgd2Ugc3VwcG9ydCB0aGUgQ1NTMyBtYXJrZXIgcHNldWRvY2xh
c3MgdG8gYWxsb3cgY29udHJvbCBvdmVyIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBtYXJr
ZXIgYm94LgogICAgICAgICBpbnQgYnVsbGV0V2lkdGggPSBmb250LmFzY2VudCgpIC8gMjsKICAg
ICAgICAgbV9pbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKEludFNpemUoYnVsbGV0V2lkdGgs
IGJ1bGxldFdpZHRoKSk7Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGgg
PSBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS53aWR0
aCgpOwotICAgICAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOworICAgICAgICBtX21pblBy
ZWZMb2dpY2FsV2lkdGggPSBtX21heFByZWZMb2dpY2FsV2lkdGggPSBtX2ltYWdlLT5pbWFnZVNp
emUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS53aWR0aCgpOworICAgICAgICBzZXRQ
cmVmTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKICAgICAgICAgdXBkYXRlTWFyZ2lucygpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQyOCwxMCArMTQyOCwxMCBAQCB2b2lkIFJlbmRl
ckxpc3RNYXJrZXI6OmNhbGNQcmVmV2lkdGhzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIG1fbWluUHJlZldpZHRoID0gd2lkdGg7Ci0gICAgbV9tYXhQcmVmV2lkdGggPSB3aWR0
aDsKKyAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSB3aWR0aDsKKyAgICBtX21heFByZWZMb2dp
Y2FsV2lkdGggPSB3aWR0aDsKIAotICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CisgICAg
c2V0UHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiAgICAgCiAgICAgdXBkYXRlTWFyZ2lu
cygpOwogfQpAQCAtMTQ1NSw5ICsxNDU1LDkgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjp1cGRh
dGVNYXJnaW5zKCkKICAgICAgICAgICAgIGNhc2UgU3F1YXJlOgogICAgICAgICAgICAgICAgIGlm
IChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgICAgICAgICAgICAgbWFy
Z2luTGVmdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IGZvbnQuYXNj
ZW50KCkgLSBtaW5QcmVmV2lkdGgoKSArIDE7CisgICAgICAgICAgICAgICAgICAgIG1hcmdpblJp
Z2h0ID0gZm9udC5hc2NlbnQoKSAtIG1pblByZWZMb2dpY2FsV2lkdGgoKSArIDE7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IGZvbnQu
YXNjZW50KCkgLSBtaW5QcmVmV2lkdGgoKSArIDE7CisgICAgICAgICAgICAgICAgICAgIG1hcmdp
bkxlZnQgPSBmb250LmFzY2VudCgpIC0gbWluUHJlZkxvZ2ljYWxXaWR0aCgpICsgMTsKICAgICAg
ICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQgPSAtMTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDY3LDcgKzE0NjcsNyBAQCB2b2lkIFJlbmRlckxpc3RN
YXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzdHlsZSgp
LT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgICAgIGlmIChpc0ltYWdlKCkpCi0gICAg
ICAgICAgICAgICAgbWFyZ2luTGVmdCA9IC1taW5QcmVmV2lkdGgoKSAtIGNNYXJrZXJQYWRkaW5n
OworICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSAtbWluUHJlZkxvZ2ljYWxXaWR0aCgpIC0g
Y01hcmtlclBhZGRpbmc7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpbnQg
b2Zmc2V0ID0gZm9udC5hc2NlbnQoKSAqIDIgLyAzOwogICAgICAgICAgICAgICAgIHN3aXRjaCAo
c3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSB7CkBAIC0xNDc5LDcgKzE0NzksNyBAQCB2b2lkIFJl
bmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgICAgICAgICAgICAgICAgICBjYXNl
IE5vbmVMaXN0U3R5bGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQg
PSBtX3RleHQuaXNFbXB0eSgpID8gMCA6IC1taW5QcmVmV2lkdGgoKSAtIG9mZnNldCAvIDI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gbV90ZXh0LmlzRW1wdHkoKSA/IDAg
OiAtbWluUHJlZkxvZ2ljYWxXaWR0aCgpIC0gb2Zmc2V0IC8gMjsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNDkxLDcgKzE0OTEsNyBAQCB2
b2lkIFJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgICAgICAgICAgICAgICAg
ICBjYXNlIERpc2M6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2lyY2xlOgogICAgICAgICAg
ICAgICAgICAgICBjYXNlIFNxdWFyZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxl
ZnQgPSBvZmZzZXQgKyBjTWFya2VyUGFkZGluZyArIDEgLSBtaW5QcmVmV2lkdGgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBvZmZzZXQgKyBjTWFya2VyUGFkZGluZyAr
IDEgLSBtaW5QcmVmTG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBOb25lTGlzdFN0eWxlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTAwLDcgKzE1MDAsNyBAQCB2b2lkIFJlbmRlckxpc3RN
YXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBtYXJnaW5SaWdodCA9IC1tYXJnaW5MZWZ0IC0gbWluUHJlZldp
ZHRoKCk7CisgICAgICAgIG1hcmdpblJpZ2h0ID0gLW1hcmdpbkxlZnQgLSBtaW5QcmVmTG9naWNh
bFdpZHRoKCk7CiAgICAgfQogCiAgICAgc3R5bGUoKS0+c2V0TWFyZ2luTGVmdChMZW5ndGgobWFy
Z2luTGVmdCwgRml4ZWQpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgJ
KHJldmlzaW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMaXN0
TWFya2VyKFJlbmRlckxpc3RJdGVtKik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGlzdE1hcmtlcigp
OwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVQcmVmTG9naWNhbFdpZHRocygpOwogCiAgICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5jcHAJKHJldmlzaW9uIDY4MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksMzQgKzIzOSwzNCBAQCBJbnRSZWN0IFJl
bmRlck1lbnVMaXN0Ojpjb250cm9sQ2xpcFJlY3QoCiAgICAgcmV0dXJuIGludGVyc2VjdGlvbihv
dXRlckJveCwgaW5uZXJCb3gpOwogfQogCi12b2lkIFJlbmRlck1lbnVMaXN0OjpjYWxjUHJlZldp
ZHRocygpCit2b2lkIFJlbmRlck1lbnVMaXN0Ojpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKQog
ewotICAgIG1fbWluUHJlZldpZHRoID0gMDsKLSAgICBtX21heFByZWZXaWR0aCA9IDA7CisgICAg
bV9taW5QcmVmTG9naWNhbFdpZHRoID0gMDsKKyAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSAw
OwogICAgIAogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53
aWR0aCgpLnZhbHVlKCkgPiAwKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldp
ZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1
ZSgpKTsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmTG9naWNhbFdp
ZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1
ZSgpKTsKICAgICBlbHNlCi0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fb3B0aW9uc1dp
ZHRoLCB0aGVtZSgpLT5taW5pbXVtTWVudUxpc3RTaXplKHN0eWxlKCkpKSArIG1faW5uZXJCbG9j
ay0+cGFkZGluZ0xlZnQoKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ1JpZ2h0KCk7CisgICAgICAg
IG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IG1heChtX29wdGlvbnNXaWR0aCwgdGhlbWUoKS0+bWlu
aW11bU1lbnVMaXN0U2l6ZShzdHlsZSgpKSkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCkg
KyBtX2lubmVyQmxvY2stPnBhZGRpbmdSaWdodCgpOwogCiAgICAgaWYgKHN0eWxlKCktPm1pbldp
ZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsKLSAg
ICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50
Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBt
X21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dp
Y2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJl
ZkxvZ2ljYWxXaWR0aCA9IG1heChtX21heFByZWZMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50
Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBt
X21pblByZWZMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmTG9naWNhbFdpZHRoLCBjb21wdXRl
Q29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAg
ICB9IGVsc2UgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndp
ZHRoKCkuaXNBdXRvKCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKQotICAgICAg
ICBtX21pblByZWZXaWR0aCA9IDA7CisgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IDA7
CiAgICAgZWxzZQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoOworICAg
ICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtX21heFByZWZMb2dpY2FsV2lkdGg7CiAKICAg
ICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgo
KS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFByZWZXaWR0aCA9
IG1pbihtX21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1f
bWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhX
aWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gbWluKG1f
bWF4UHJlZkxvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9
IG1pbihtX21pblByZWZMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRo
KHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAogICAgIGludCB0b0FkZCA9
IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwotICAgIG1fbWluUHJlZldpZHRoICs9IHRvQWRkOwot
ICAgIG1fbWF4UHJlZldpZHRoICs9IHRvQWRkOworICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCAr
PSB0b0FkZDsKKyAgICBtX21heFByZWZMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CiAKLSAgICBzZXRQ
cmVmV2lkdGhzRGlydHkoZmFsc2UpOworICAgIHNldFByZWZMb2dpY2FsV2lkdGhzRGlydHkoZmFs
c2UpOwogfQogCiB2b2lkIFJlbmRlck1lbnVMaXN0OjpzaG93UG9wdXAoKQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0
dXJuICJSZW5kZXJNZW51TGlzdCI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRo
cygpOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gNjgyMzkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgUmVuZGVyT2JqZWN0OjpSZW5kZXJPYmpl
Y3QoTm9kZSogbm9kZSkKICAgICAsIG1fbmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoZmFs
c2UpCiAgICAgLCBtX25vcm1hbENoaWxkTmVlZHNMYXlvdXQoZmFsc2UpCiAgICAgLCBtX3Bvc0No
aWxkTmVlZHNMYXlvdXQoZmFsc2UpCi0gICAgLCBtX3ByZWZXaWR0aHNEaXJ0eShmYWxzZSkKKyAg
ICAsIG1fcHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSkKICAgICAsIG1fZmxvYXRpbmcoZmFs
c2UpCiAgICAgLCBtX3Bvc2l0aW9uZWQoZmFsc2UpCiAgICAgLCBtX3JlbFBvc2l0aW9uZWQoZmFs
c2UpCkBAIC01NzMsMjcgKzU3MywyNyBAQCBSZW5kZXJCbG9jayogUmVuZGVyT2JqZWN0OjpmaXJz
dExpbmVCbG9jCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpzZXRQcmVm
V2lkdGhzRGlydHkoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzKQordm9pZCBSZW5kZXJPYmplY3Q6
OnNldFByZWZMb2dpY2FsV2lkdGhzRGlydHkoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzKQogewot
ICAgIGJvb2wgYWxyZWFkeURpcnR5ID0gbV9wcmVmV2lkdGhzRGlydHk7Ci0gICAgbV9wcmVmV2lk
dGhzRGlydHkgPSBiOworICAgIGJvb2wgYWxyZWFkeURpcnR5ID0gbV9wcmVmTG9naWNhbFdpZHRo
c0RpcnR5OworICAgIG1fcHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSA9IGI7CiAgICAgaWYgKGIgJiYg
IWFscmVhZHlEaXJ0eSAmJiBtYXJrUGFyZW50cyAmJiAoaXNUZXh0KCkgfHwgKHN0eWxlKCktPnBv
c2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbiAmJiBzdHlsZSgpLT5wb3NpdGlvbigpICE9IEFic29s
dXRlUG9zaXRpb24pKSkKLSAgICAgICAgaW52YWxpZGF0ZUNvbnRhaW5lclByZWZXaWR0aHMoKTsK
KyAgICAgICAgaW52YWxpZGF0ZUNvbnRhaW5lclByZWZMb2dpY2FsV2lkdGhzKCk7CiB9CiAKLXZv
aWQgUmVuZGVyT2JqZWN0OjppbnZhbGlkYXRlQ29udGFpbmVyUHJlZldpZHRocygpCit2b2lkIFJl
bmRlck9iamVjdDo6aW52YWxpZGF0ZUNvbnRhaW5lclByZWZMb2dpY2FsV2lkdGhzKCkKIHsKICAg
ICAvLyBJbiBvcmRlciB0byBhdm9pZCBwYXRob2xvZ2ljYWwgYmVoYXZpb3Igd2hlbiBpbmxpbmVz
IGFyZSBkZWVwbHkgbmVzdGVkLCB3ZSBkbyBpbmNsdWRlIHRoZW0KICAgICAvLyBpbiB0aGUgY2hh
aW4gdGhhdCB3ZSBtYXJrIGRpcnR5IChldmVuIHRob3VnaCB0aGV5J3JlIGtpbmQgb2YgaXJyZWxl
dmFudCkuCiAgICAgUmVuZGVyT2JqZWN0KiBvID0gaXNUYWJsZUNlbGwoKSA/IGNvbnRhaW5pbmdC
bG9jaygpIDogY29udGFpbmVyKCk7Ci0gICAgd2hpbGUgKG8gJiYgIW8tPm1fcHJlZldpZHRoc0Rp
cnR5KSB7CisgICAgd2hpbGUgKG8gJiYgIW8tPm1fcHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSkgewog
ICAgICAgICAvLyBEb24ndCBpbnZhbGlkYXRlIHRoZSBvdXRlcm1vc3Qgb2JqZWN0IG9mIGFuIHVu
cm9vdGVkIHN1YnRyZWUuIFRoYXQgb2JqZWN0IHdpbGwgYmUgCiAgICAgICAgIC8vIGludmFsaWRh
dGVkIHdoZW4gdGhlIHN1YnRyZWUgaXMgYWRkZWQgdG8gdGhlIGRvY3VtZW50LgogICAgICAgICBS
ZW5kZXJPYmplY3QqIGNvbnRhaW5lciA9IG8tPmlzVGFibGVDZWxsKCkgPyBvLT5jb250YWluaW5n
QmxvY2soKSA6IG8tPmNvbnRhaW5lcigpOwogICAgICAgICBpZiAoIWNvbnRhaW5lciAmJiAhby0+
aXNSZW5kZXJWaWV3KCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBvLT5tX3ByZWZX
aWR0aHNEaXJ0eSA9IHRydWU7CisgICAgICAgIG8tPm1fcHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSA9
IHRydWU7CiAgICAgICAgIGlmIChvLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRp
b24gfHwgby0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uKQogICAgICAg
ICAgICAgLy8gQSBwb3NpdGlvbmVkIG9iamVjdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBtaW4vbWF4
IHdpZHRoIG9mIGl0cyBjb250YWluaW5nIGJsb2NrIGV2ZXIuCiAgICAgICAgICAgICAvLyBXZSBj
YW4gb3B0aW1pemUgdGhpcyBjYXNlIGFuZCBub3QgZ28gdXAgYW55IGZ1cnRoZXIuCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gNjgyMzkpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDcgKzM5NCw3IEBAIHB1
YmxpYzoKICAgICBib29sIHBvc0NoaWxkTmVlZHNMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX3Bv
c0NoaWxkTmVlZHNMYXlvdXQ7IH0KICAgICBib29sIG5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSBj
b25zdCB7IHJldHVybiBtX25vcm1hbENoaWxkTmVlZHNMYXlvdXQ7IH0KICAgICAKLSAgICBib29s
IHByZWZXaWR0aHNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZldpZHRoc0RpcnR5OyB9Cisg
ICAgYm9vbCBwcmVmTG9naWNhbFdpZHRoc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcmVmTG9n
aWNhbFdpZHRoc0RpcnR5OyB9CiAKICAgICBib29sIGlzU2VsZWN0aW9uQm9yZGVyKCkgY29uc3Q7
CiAKQEAgLTQ1NSwxMyArNDU1LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzTGF5b3V0
KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cyA9IHRydWUpOwogICAgIHZvaWQgc2V0Q2hpbGROZWVk
c0xheW91dChib29sIGIsIGJvb2wgbWFya1BhcmVudHMgPSB0cnVlKTsKICAgICB2b2lkIHNldE5l
ZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCk7Ci0gICAgdm9pZCBzZXRQcmVmV2lkdGhzRGly
dHkoYm9vbCwgYm9vbCBtYXJrUGFyZW50cyA9IHRydWUpOwotICAgIHZvaWQgaW52YWxpZGF0ZUNv
bnRhaW5lclByZWZXaWR0aHMoKTsKKyAgICB2b2lkIHNldFByZWZMb2dpY2FsV2lkdGhzRGlydHko
Ym9vbCwgYm9vbCBtYXJrUGFyZW50cyA9IHRydWUpOworICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRh
aW5lclByZWZMb2dpY2FsV2lkdGhzKCk7CiAgICAgCiAgICAgdm9pZCBzZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKQogICAgIHsKICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7
Ci0gICAgICAgIHNldFByZWZXaWR0aHNEaXJ0eSh0cnVlKTsKKyAgICAgICAgc2V0UHJlZkxvZ2lj
YWxXaWR0aHNEaXJ0eSh0cnVlKTsKICAgICB9CiAKICAgICB2b2lkIHNldFBvc2l0aW9uZWQoYm9v
bCBiID0gdHJ1ZSkgIHsgbV9wb3NpdGlvbmVkID0gYjsgIH0KQEAgLTU2MSw4ICs1NjEsOCBAQCBw
dWJsaWM6CiAgICAgLy8gdGhlIHJlY3QgdGhhdCB3aWxsIGJlIHBhaW50ZWQgaWYgdGhpcyBvYmpl
Y3QgaXMgcGFzc2VkIGFzIHRoZSBwYWludGluZ1Jvb3QKICAgICBJbnRSZWN0IHBhaW50aW5nUm9v
dFJlY3QoSW50UmVjdCYgdG9wTGV2ZWxSZWN0KTsKIAotICAgIHZpcnR1YWwgaW50IG1pblByZWZX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBtYXhQcmVmV2lkdGgo
KSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgbWluUHJlZkxvZ2ljYWxXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBtYXhQcmVmTG9naWNhbFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQogICAgIFJlbmRlclN0eWxlKiBmaXJzdExpbmVT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpID8g
Zmlyc3RMaW5lU3R5bGVTbG93Q2FzZSgpIDogc3R5bGUoKTsgfQpAQCAtODEyLDcgKzgxMiw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX25lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0IDoxOwog
ICAgIGJvb2wgbV9ub3JtYWxDaGlsZE5lZWRzTGF5b3V0ICAgIDogMTsKICAgICBib29sIG1fcG9z
Q2hpbGROZWVkc0xheW91dCAgICAgICA6IDE7Ci0gICAgYm9vbCBtX3ByZWZXaWR0aHNEaXJ0eSAg
ICAgICAgICAgOiAxOworICAgIGJvb2wgbV9wcmVmTG9naWNhbFdpZHRoc0RpcnR5ICAgICAgICAg
ICA6IDE7CiAgICAgYm9vbCBtX2Zsb2F0aW5nICAgICAgICAgICAgICAgICAgOiAxOwogCiAgICAg
Ym9vbCBtX3Bvc2l0aW9uZWQgICAgICAgICAgICAgICAgOiAxOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gNjgyMzkpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NywyNCArMjU3LDI0IEBA
IGludCBSZW5kZXJSZXBsYWNlZDo6Y2FsY0FzcGVjdFJhdGlvSGVpZ2gKICAgICByZXR1cm4gUmVu
ZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRXaWR0aCgpICogaW50cmluc2ljSGVpZ2h0IC8gaW50cmlu
c2ljV2lkdGg7CiB9CiAKLXZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNhbGNQcmVmV2lkdGhzKCkKK3Zv
aWQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVQcmVmTG9naWNhbFdpZHRocygpCiB7Ci0gICAgQVNT
RVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICBBU1NFUlQocHJlZkxvZ2ljYWxXaWR0aHNEaXJ0
eSgpKTsKIAogICAgIGludCBib3JkZXJBbmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRo
KCk7Ci0gICAgbV9tYXhQcmVmV2lkdGggPSBjb21wdXRlUmVwbGFjZWRXaWR0aChmYWxzZSkgKyBi
b3JkZXJBbmRQYWRkaW5nOworICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IGNvbXB1dGVSZXBs
YWNlZFdpZHRoKGZhbHNlKSArIGJvcmRlckFuZFBhZGRpbmc7CiAKICAgICBpZiAoc3R5bGUoKS0+
bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVu
ZGVmaW5lZExlbmd0aCkKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lk
dGgsIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9
PSBDT05URU5UX0JPWCA/IGJvcmRlckFuZFBhZGRpbmcgOiAwKSk7CisgICAgICAgIG1fbWF4UHJl
ZkxvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZMb2dpY2FsV2lkdGgsIHN0eWxlKCktPm1heFdp
ZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IGJv
cmRlckFuZFBhZGRpbmcgOiAwKSk7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNl
bnQoKSB8fCBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKQogICAgICAgICB8fCBzdHlsZSgp
LT5tYXhXaWR0aCgpLmlzUGVyY2VudCgpIHx8IHN0eWxlKCktPm1heEhlaWdodCgpLmlzUGVyY2Vu
dCgpCiAgICAgICAgIHx8IHN0eWxlKCktPm1pbldpZHRoKCkuaXNQZXJjZW50KCkgfHwgc3R5bGUo
KS0+bWluSGVpZ2h0KCkuaXNQZXJjZW50KCkpCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsK
KyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gMDsKICAgICBlbHNlCi0gICAgICAgIG1f
bWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGg7CisgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxX
aWR0aCA9IG1fbWF4UHJlZkxvZ2ljYWxXaWR0aDsKIAotICAgIHNldFByZWZXaWR0aHNEaXJ0eShm
YWxzZSk7CisgICAgc2V0UHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKIGludCBS
ZW5kZXJSZXBsYWNlZDo6bGluZUhlaWdodChib29sLCBib29sKSBjb25zdApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5oCShyZXZpc2lvbiA2ODIzOSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlz
Um9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3Np
dGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lkIGNv
bXB1dGVQcmVmTG9naWNhbFdpZHRocygpOwogCiAgICAgaW50IGNhbGNBc3BlY3RSYXRpb1dpZHRo
KCkgY29uc3Q7CiAgICAgaW50IGNhbGNBc3BlY3RSYXRpb0hlaWdodCgpIGNvbnN0OwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAJKHJldmlzaW9uIDY4MTc0KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDExICs1
MiwxMSBAQCB2b2lkIFJlbmRlclJlcGxpY2E6OmxheW91dCgpCiAgICAgc2V0TmVlZHNMYXlvdXQo
ZmFsc2UpOwogfQogCi12b2lkIFJlbmRlclJlcGxpY2E6OmNhbGNQcmVmV2lkdGhzKCkKK3ZvaWQg
UmVuZGVyUmVwbGljYTo6Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKCkKIHsKLSAgICBtX21pblBy
ZWZXaWR0aCA9IHBhcmVudEJveCgpLT53aWR0aCgpOwotICAgIG1fbWF4UHJlZldpZHRoID0gbV9t
aW5QcmVmV2lkdGg7Ci0gICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICBtX21pblBy
ZWZMb2dpY2FsV2lkdGggPSBwYXJlbnRCb3goKS0+d2lkdGgoKTsKKyAgICBtX21heFByZWZMb2dp
Y2FsV2lkdGggPSBtX21pblByZWZMb2dpY2FsV2lkdGg7CisgICAgc2V0UHJlZkxvZ2ljYWxXaWR0
aHNEaXJ0eShmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyUmVwbGljYTo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGljYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxp
Y2EuaAkocmV2aXNpb24gNjgxNzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOworICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKTsKICAgICAKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gNjgyMzkpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOSArNjMsOSBA
QCBpbnQgUmVuZGVyU1ZHUm9vdDo6YmFzZWxpbmVQb3NpdGlvbihib29sCiAgICAgcmV0dXJuIGhl
aWdodCgpICsgbWFyZ2luVG9wKCkgKyBtYXJnaW5Cb3R0b20oKTsKIH0KIAotdm9pZCBSZW5kZXJT
VkdSb290OjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVQcmVm
TG9naWNhbFdpZHRocygpCiB7Ci0gICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICBB
U1NFUlQocHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAogICAgIGludCBib3JkZXJBbmRQYWRk
aW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAgICAgaW50IHdpZHRoID0gY29tcHV0ZVJl
cGxhY2VkV2lkdGgoZmFsc2UpICsgYm9yZGVyQW5kUGFkZGluZzsKQEAgLTc0LDEyICs3NCwxMiBA
QCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmNhbGNQcmVmV2lkdGhzKCkKICAgICAgICAgd2lkdGggPSBt
aW4od2lkdGgsIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXpp
bmcoKSA9PSBDT05URU5UX0JPWCA/IGJvcmRlckFuZFBhZGRpbmcgOiAwKSk7CiAKICAgICBpZiAo
c3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8o
KSAmJiBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSkpIHsKLSAgICAgICAgbV9taW5QcmVm
V2lkdGggPSAwOwotICAgICAgICBtX21heFByZWZXaWR0aCA9IHdpZHRoOworICAgICAgICBtX21p
blByZWZMb2dpY2FsV2lkdGggPSAwOworICAgICAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSB3
aWR0aDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0
aCA9IHdpZHRoOworICAgICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtX21heFByZWZMb2dp
Y2FsV2lkdGggPSB3aWR0aDsKIAotICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CisgICAg
c2V0UHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKIGludCBSZW5kZXJTVkdSb290
Ojpjb21wdXRlUmVwbGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDY4MjM5KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBA
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgYiwgYm9vbCBpc1Jv
b3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRp
b24oYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7Ci0gICAgdmlydHVh
bCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmTG9n
aWNhbFdpZHRocygpOwogICAgIHZpcnR1YWwgaW50IGNvbXB1dGVSZXBsYWNlZFdpZHRoKGJvb2wg
aW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJl
cGxhY2VkSGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAJKHJldmlzaW9uIDY4MTc0
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNCwxNCArMTE0LDE0IEBAIHZvaWQgUmVuZGVyU2Nyb2xsYmFyUGFydDo6Y29t
cHV0ZVNjcm9sbGIKICAgICBtX21hcmdpbkJvdHRvbSA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgp
LmNhbGNNaW5WYWx1ZSh2aXNpYmxlU2l6ZSk7CiB9CiAKLXZvaWQgUmVuZGVyU2Nyb2xsYmFyUGFy
dDo6Y2FsY1ByZWZXaWR0aHMoKQordm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0Ojpjb21wdXRlUHJl
ZkxvZ2ljYWxXaWR0aHMoKQogewotICAgIGlmICghcHJlZldpZHRoc0RpcnR5KCkpCisgICAgaWYg
KCFwcmVmTG9naWNhbFdpZHRoc0RpcnR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBt
X21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gMDsKKyAgICBtX21pblByZWZMb2dpY2Fs
V2lkdGggPSBtX21heFByZWZMb2dpY2FsV2lkdGggPSAwOwogCi0gICAgc2V0UHJlZldpZHRoc0Rp
cnR5KGZhbHNlKTsKKyAgICBzZXRQcmVmTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAog
dm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmgJKHJldmlzaW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2
b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmTG9naWNh
bFdpZHRocygpOwogICAgIAogICAgIHZvaWQgcGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQq
LCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYpOwogICAgIApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTbGlkZXIuY3BwCShyZXZpc2lvbiA2ODIzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNsaWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwzNCArMTYwLDM0IEBAIGlu
dCBSZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCwKICAgICByZXR1cm4gaGVpZ2h0
KCkgKyBtYXJnaW5Ub3AoKTsKIH0KIAotdm9pZCBSZW5kZXJTbGlkZXI6OmNhbGNQcmVmV2lkdGhz
KCkKK3ZvaWQgUmVuZGVyU2xpZGVyOjpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKQogewotICAg
IG1fbWluUHJlZldpZHRoID0gMDsKLSAgICBtX21heFByZWZXaWR0aCA9IDA7CisgICAgbV9taW5Q
cmVmTG9naWNhbFdpZHRoID0gMDsKKyAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSAwOwogCiAg
ICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFs
dWUoKSA+IDApCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjb21w
dXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOworICAg
ICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtX21heFByZWZMb2dpY2FsV2lkdGggPSBjb21w
dXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAg
IGVsc2UKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBkZWZhdWx0VHJhY2tMZW5ndGggKiBzdHls
ZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCA9IGRl
ZmF1bHRUcmFja0xlbmd0aCAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIGlmIChz
dHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVl
KCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJlZldpZHRoLCBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkp
KTsKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIGNvbXB1dGVD
b250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAg
ICAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSBtYXgobV9tYXhQcmVmTG9naWNhbFdpZHRoLCBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkp
KTsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbWF4KG1fbWluUHJlZkxvZ2ljYWxX
aWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52
YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8
IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2Vu
dCgpKSkKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOworICAgICAgICBtX21pblByZWZMb2dp
Y2FsV2lkdGggPSAwOwogICAgIGVsc2UKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFBy
ZWZXaWR0aDsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmTG9naWNh
bFdpZHRoOwogICAgIAogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7Ci0gICAgICAg
IG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExv
Z2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5Q
cmVmV2lkdGggPSBtaW4obV9taW5QcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdp
ZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZMb2dp
Y2FsV2lkdGggPSBtaW4obV9tYXhQcmVmTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExv
Z2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5Q
cmVmTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZkxvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQog
CiAgICAgaW50IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAgbV9taW5QcmVm
V2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhQcmVmV2lkdGggKz0gdG9BZGQ7CisgICAgbV9taW5Q
cmVmTG9naWNhbFdpZHRoICs9IHRvQWRkOworICAgIG1fbWF4UHJlZkxvZ2ljYWxXaWR0aCArPSB0
b0FkZDsKIAotICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7IAorICAgIHNldFByZWZMb2dp
Y2FsV2lkdGhzRGlydHkoZmFsc2UpOyAKIH0KIAogdm9pZCBSZW5kZXJTbGlkZXI6OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAkocmV2aXNpb24gNjgxNzQpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NsaWRlcigp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBv
c2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZX
aWR0aHMoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmTG9naWNhbFdpZHRocygp
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVGcm9tRWxlbWVudCgpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShy
ZXZpc2lvbiA2ODIzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNvbXB1dGVM
b2dpY2FsV2lkdGgoKQogICAgIGlmICh3aWR0aFR5cGUgPiBSZWxhdGl2ZSAmJiBzdHlsZSgpLT53
aWR0aCgpLmlzUG9zaXRpdmUoKSkgewogICAgICAgICAvLyBQZXJjZW50IG9yIGZpeGVkIHRhYmxl
CiAgICAgICAgIHNldFdpZHRoKHN0eWxlKCktPndpZHRoKCkuY2FsY01pblZhbHVlKGF2YWlsYWJs
ZVdpZHRoKSk7Ci0gICAgICAgIHNldFdpZHRoKG1heChtaW5QcmVmV2lkdGgoKSwgd2lkdGgoKSkp
OworICAgICAgICBzZXRXaWR0aChtYXgobWluUHJlZkxvZ2ljYWxXaWR0aCgpLCB3aWR0aCgpKSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQW4gYXV0byB3aWR0aCB0YWJsZSBzaG91bGQgc2hy
aW5rIHRvIGZpdCB3aXRoaW4gdGhlIGxpbmUgd2lkdGggaWYgbmVjZXNzYXJ5IGluIG9yZGVyIHRv
IAogICAgICAgICAvLyBhdm9pZCBvdmVybGFwcGluZyBmbG9hdHMuCkBAIC0yMjMsMTAgKzIyMywx
MCBAQCB2b2lkIFJlbmRlclRhYmxlOjpjb21wdXRlTG9naWNhbFdpZHRoKCkKICAgICAgICAgaW50
IGF2YWlsQ29udGVudFdpZHRoID0gbWF4KDAsIGF2YWlsYWJsZVdpZHRoIC0gbWFyZ2luVG90YWwp
OwogICAgICAgICAKICAgICAgICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBiaWdnZXIgdGhhbiBvdXIg
bWF4IHdpZHRoIG9yIHNtYWxsZXIgdGhhbiBvdXIgbWluIHdpZHRoLgotICAgICAgICBzZXRXaWR0
aChtaW4oYXZhaWxDb250ZW50V2lkdGgsIG1heFByZWZXaWR0aCgpKSk7CisgICAgICAgIHNldFdp
ZHRoKG1pbihhdmFpbENvbnRlbnRXaWR0aCwgbWF4UHJlZkxvZ2ljYWxXaWR0aCgpKSk7CiAgICAg
fQogICAgIAotICAgIHNldFdpZHRoKG1heCh3aWR0aCgpLCBtaW5QcmVmV2lkdGgoKSkpOworICAg
IHNldFdpZHRoKG1heCh3aWR0aCgpLCBtaW5QcmVmTG9naWNhbFdpZHRoKCkpKTsKIAogICAgIC8v
IEZpbmFsbHksIHdpdGggb3VyIHRydWUgd2lkdGggZGV0ZXJtaW5lZCwgY29tcHV0ZSBvdXIgbWFy
Z2lucyBmb3IgcmVhbC4KICAgICBtX21hcmdpblJpZ2h0ID0gMDsKQEAgLTUzMywxOSArNTMzLDE5
IEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50TWFzayhQYWludEluZm8mIHAKICAgICBwYWludE1h
c2tJbWFnZXMocGFpbnRJbmZvLCB0eCwgdHksIHcsIGgpOwogfQogCi12b2lkIFJlbmRlclRhYmxl
OjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlclRhYmxlOjpjb21wdXRlUHJlZkxvZ2ljYWxX
aWR0aHMoKQogewotICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7CisgICAgQVNTRVJUKHBy
ZWZMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKICAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7
CiAgICAgcmVjYWxjSG9yaXpvbnRhbEJvcmRlcnMoKTsKIAotICAgIG1fdGFibGVMYXlvdXQtPmNh
bGNQcmVmV2lkdGhzKG1fbWluUHJlZldpZHRoLCBtX21heFByZWZXaWR0aCk7CisgICAgbV90YWJs
ZUxheW91dC0+Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKG1fbWluUHJlZkxvZ2ljYWxXaWR0aCwg
bV9tYXhQcmVmTG9naWNhbFdpZHRoKTsKIAogICAgIGlmIChtX2NhcHRpb24pCi0gICAgICAgIG1f
bWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBtX2NhcHRpb24tPm1pblByZWZXaWR0
aCgpKTsKKyAgICAgICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbWF4KG1fbWluUHJlZkxvZ2lj
YWxXaWR0aCwgbV9jYXB0aW9uLT5taW5QcmVmTG9naWNhbFdpZHRoKCkpOwogCi0gICAgc2V0UHJl
ZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICBzZXRQcmVmTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNl
KTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZTo6c3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0
U3BhbikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gNjgyMzgpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyAr
MTYwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwot
ICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOworICAgIHZpcnR1YWwgdm9pZCBjb21w
dXRlUHJlZkxvZ2ljYWxXaWR0aHMoKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHhQb3MsIGludCB5UG9zLCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCBpbnQgZmly
c3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmNwcAkocmV2aXNpb24gNjgyMzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTQgKzEyMiwxNCBAQCBMZW5ndGgg
UmVuZGVyVGFibGVDZWxsOjpzdHlsZU9yQ29sV2lkdGgoCiAgICAgcmV0dXJuIHc7CiB9CiAKLXZv
aWQgUmVuZGVyVGFibGVDZWxsOjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlclRhYmxlQ2Vs
bDo6Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKCkKIHsKLSAgICAvLyBUaGUgY2hpbGQgY2VsbHMg
cmVseSBvbiB0aGUgZ3JpZHMgdXAgaW4gdGhlIHNlY3Rpb25zIHRvIGRvIHRoZWlyIGNhbGNQcmVm
V2lkdGhzIHdvcmsuICBOb3JtYWxseSB0aGUgc2VjdGlvbnMgYXJlIHNldCB1cCBlYXJseSwgYXMg
dGFibGUKKyAgICAvLyBUaGUgY2hpbGQgY2VsbHMgcmVseSBvbiB0aGUgZ3JpZHMgdXAgaW4gdGhl
IHNlY3Rpb25zIHRvIGRvIHRoZWlyIGNvbXB1dGVQcmVmTG9naWNhbFdpZHRocyB3b3JrLiAgTm9y
bWFsbHkgdGhlIHNlY3Rpb25zIGFyZSBzZXQgdXAgZWFybHksIGFzIHRhYmxlCiAgICAgLy8gY2Vs
bHMgYXJlIGFkZGVkLCBidXQgcmVsYXlvdXQgY2FuIGNhdXNlIHRoZSBjZWxscyB0byBiZSBmcmVl
ZCwgbGVhdmluZyBzdGFsZSBwb2ludGVycyBpbiB0aGUgc2VjdGlvbnMnCiAgICAgLy8gZ3JpZHMu
ICBXZSBtdXN0IHJlZnJlc2ggdGhvc2UgZ3JpZHMgYmVmb3JlIHRoZSBjaGlsZCBjZWxscyB0cnkg
dG8gdXNlIHRoZW0uCiAgICAgdGFibGUoKS0+cmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwogCi0g
ICAgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKCk7CisgICAgUmVuZGVyQmxvY2s6OmNvbXB1
dGVQcmVmTG9naWNhbFdpZHRocygpOwogICAgIGlmIChub2RlKCkgJiYgc3R5bGUoKS0+YXV0b1dy
YXAoKSkgewogICAgICAgICAvLyBTZWUgaWYgbm93cmFwIHdhcyBzZXQuCiAgICAgICAgIExlbmd0
aCB3ID0gc3R5bGVPckNvbFdpZHRoKCk7CkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBSZW5kZXJU
YWJsZUNlbGw6OmNhbGNQcmVmV2lkdGhzKCkKICAgICAgICAgICAgIC8vIHRvIG1ha2UgdGhlIG1p
bndpZHRoIG9mIHRoZSBjZWxsIGludG8gdGhlIGZpeGVkIHdpZHRoLiAgVGhleSBkbyB0aGlzCiAg
ICAgICAgICAgICAvLyBldmVuIGluIHN0cmljdCBtb2RlLCBzbyBkbyBub3QgbWFrZSB0aGlzIGEg
cXVpcmsuICBBZmZlY3RlZCB0aGUgdG9wCiAgICAgICAgICAgICAvLyBvZiBoaXB0b3AuY29tLgot
ICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgody52YWx1ZSgpLCBtX21pblByZWZXaWR0
aCk7CisgICAgICAgICAgICBtX21pblByZWZMb2dpY2FsV2lkdGggPSBtYXgody52YWx1ZSgpLCBt
X21pblByZWZMb2dpY2FsV2lkdGgpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmgJKHJldmlzaW9uIDY4MjM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgog
CiAgICAgTGVuZ3RoIHN0eWxlT3JDb2xXaWR0aCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lk
IGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmTG9naWNhbFdp
ZHRocygpOwogCiAgICAgdm9pZCB1cGRhdGVXaWR0aChpbnQpOwogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDb2wuY3BwCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTIgKzg4LDEyIEBA
IHZvaWQgUmVuZGVyVGFibGVDb2w6OmltYWdlQ2hhbmdlZChXcmFwcGUKICAgICByZXBhaW50KCk7
CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVDb2w6OmNhbGNQcmVmV2lkdGhzKCkKK3ZvaWQgUmVuZGVy
VGFibGVDb2w6OmNvbXB1dGVQcmVmTG9naWNhbFdpZHRocygpCiB7Ci0gICAgc2V0UHJlZldpZHRo
c0RpcnR5KGZhbHNlKTsKKyAgICBzZXRQcmVmTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKIAog
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5zZXRQcmVmV2lkdGhzRGly
dHkoZmFsc2UpOworICAgICAgICBjaGlsZC0+c2V0UHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eShmYWxz
ZSk7CiB9CiAKIFJlbmRlclRhYmxlKiBSZW5kZXJUYWJsZUNvbDo6dGFibGUoKSBjb25zdApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4o
KSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogICAgIFJlbmRlck9iamVjdENoaWxkTGlz
dCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogCi0gICAgdmlydHVhbCB2b2lk
IGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmTG9naWNhbFdp
ZHRocygpOwogCiAgICAgaW50IHNwYW4oKSBjb25zdCB7IHJldHVybiBtX3NwYW47IH0KICAgICB2
b2lkIHNldFNwYW4oaW50IHNwYW4pIHsgbV9zcGFuID0gc3BhbjsgfQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDY4MTc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MSw4ICs1ODEsOCBAQCB2b2lkIFJlbmRl
clRleHQ6OnRyaW1tZWRQcmVmV2lkdGhzKGludCBsCiAgICAgaWYgKCFjb2xsYXBzZVdoaXRlU3Bh
Y2UpCiAgICAgICAgIHN0cmlwRnJvbnRTcGFjZXMgPSBmYWxzZTsKIAotICAgIGlmIChtX2hhc1Rh
YiB8fCBwcmVmV2lkdGhzRGlydHkoKSkKLSAgICAgICAgY2FsY1ByZWZXaWR0aHMobGVhZFdpZHRo
KTsKKyAgICBpZiAobV9oYXNUYWIgfHwgcHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSgpKQorICAgICAg
ICBjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMobGVhZFdpZHRoKTsKIAogICAgIGJlZ2luV1MgPSAh
c3RyaXBGcm9udFNwYWNlcyAmJiBtX2hhc0JlZ2luV1M7CiAgICAgZW5kV1MgPSBtX2hhc0VuZFdT
OwpAQCAtNjY0LDM0ICs2NjQsMzQgQEAgc3RhdGljIGlubGluZSBib29sIGlzU3BhY2VBY2NvcmRp
bmdUb1N0eQogICAgIHJldHVybiBjID09ICcgJyB8fCAoYyA9PSBub0JyZWFrU3BhY2UgJiYgc3R5
bGUtPm5ic3BNb2RlKCkgPT0gU1BBQ0UpOwogfQogCi1pbnQgUmVuZGVyVGV4dDo6bWluUHJlZldp
ZHRoKCkgY29uc3QKK2ludCBSZW5kZXJUZXh0OjptaW5QcmVmTG9naWNhbFdpZHRoKCkgY29uc3QK
IHsKLSAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVy
VGV4dCo+KHRoaXMpLT5jYWxjUHJlZldpZHRocygwKTsKKyAgICBpZiAocHJlZkxvZ2ljYWxXaWR0
aHNEaXJ0eSgpKQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlclRleHQqPih0aGlzKS0+Y29tcHV0
ZVByZWZMb2dpY2FsV2lkdGhzKDApOwogICAgICAgICAKICAgICByZXR1cm4gbV9taW5XaWR0aDsK
IH0KIAotaW50IFJlbmRlclRleHQ6Om1heFByZWZXaWR0aCgpIGNvbnN0CitpbnQgUmVuZGVyVGV4
dDo6bWF4UHJlZkxvZ2ljYWxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHByZWZXaWR0aHNEaXJ0
eSgpKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlclRleHQqPih0aGlzKS0+Y2FsY1ByZWZXaWR0
aHMoMCk7CisgICAgaWYgKHByZWZMb2dpY2FsV2lkdGhzRGlydHkoKSkKKyAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJUZXh0Kj4odGhpcyktPmNvbXB1dGVQcmVmTG9naWNhbFdpZHRocygwKTsKICAg
ICAgICAgCiAgICAgcmV0dXJuIG1fbWF4V2lkdGg7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y2Fs
Y1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCkKK3ZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZM
b2dpY2FsV2lkdGhzKGludCBsZWFkV2lkdGgpCiB7CiAgICAgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+IGZhbGxiYWNrRm9udHM7CiAgICAgR2x5cGhPdmVyZmxvdyBnbHlwaE92ZXJmbG93
OwotICAgIGNhbGNQcmVmV2lkdGhzKGxlYWRXaWR0aCwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVy
Zmxvdyk7CisgICAgY29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKGxlYWRXaWR0aCwgZmFsbGJhY2tG
b250cywgZ2x5cGhPdmVyZmxvdyk7CiAgICAgaWYgKGZhbGxiYWNrRm9udHMuaXNFbXB0eSgpICYm
ICFnbHlwaE92ZXJmbG93LmxlZnQgJiYgIWdseXBoT3ZlcmZsb3cucmlnaHQgJiYgIWdseXBoT3Zl
cmZsb3cudG9wICYmICFnbHlwaE92ZXJmbG93LmJvdHRvbSkKICAgICAgICAgbV9rbm93blRvSGF2
ZU5vT3ZlcmZsb3dBbmROb0ZhbGxiYWNrRm9udHMgPSB0cnVlOwogfQogCi12b2lkIFJlbmRlclRl
eHQ6OmNhbGNQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKK3Zv
aWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKGludCBsZWFkV2lkdGgsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxv
dyYgZ2x5cGhPdmVyZmxvdykKIHsKLSAgICBBU1NFUlQobV9oYXNUYWIgfHwgcHJlZldpZHRoc0Rp
cnR5KCkgfHwgIW1fa25vd25Ub0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzKTsKKyAg
ICBBU1NFUlQobV9oYXNUYWIgfHwgcHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSgpIHx8ICFtX2tub3du
VG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyk7CiAKICAgICBtX21pbldpZHRoID0g
MDsKICAgICBtX2JlZ2luTWluV2lkdGggPSAwOwpAQCAtODc3LDcgKzg3Nyw3IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWQKICAgICAgICAgbV9lbmRNaW5XaWR0aCA9
IGN1cnJNYXhXaWR0aDsKICAgICB9CiAKLSAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwor
ICAgIHNldFByZWZMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCiBib29sIFJlbmRlclRl
eHQ6OmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCkKQEAgLTEyNDksMTQgKzEyNDksMTQgQEAg
dW5zaWduZWQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbQogICAgICAgICBpZiAoIXN0
eWxlKCktPnByZXNlcnZlTmV3bGluZSgpICYmICFmcm9tICYmIGxlbiA9PSB0ZXh0TGVuZ3RoKCkp
IHsKICAgICAgICAgICAgIGlmIChmYWxsYmFja0ZvbnRzKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGdseXBoT3ZlcmZsb3cpOwotICAgICAgICAgICAgICAgIGlmIChwcmVmV2lkdGhzRGlydHko
KSB8fCAhbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dBbmROb0ZhbGxiYWNrRm9udHMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJUZXh0Kj4odGhpcyktPmNhbGNQcmVmV2lk
dGhzKDAsICpmYWxsYmFja0ZvbnRzLCAqZ2x5cGhPdmVyZmxvdyk7CisgICAgICAgICAgICAgICAg
aWYgKHByZWZMb2dpY2FsV2lkdGhzRGlydHkoKSB8fCAhbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dB
bmROb0ZhbGxiYWNrRm9udHMpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJUZXh0Kj4odGhpcyktPmNvbXB1dGVQcmVmTG9naWNhbFdpZHRocygwLCAqZmFsbGJhY2tGb250
cywgKmdseXBoT3ZlcmZsb3cpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGJhY2tGb250
cy0+aXNFbXB0eSgpICYmICFnbHlwaE92ZXJmbG93LT5sZWZ0ICYmICFnbHlwaE92ZXJmbG93LT5y
aWdodCAmJiAhZ2x5cGhPdmVyZmxvdy0+dG9wICYmICFnbHlwaE92ZXJmbG93LT5ib3R0b20pCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJh
Y2tGb250cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHcgPSBt
X21heFdpZHRoOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgdyA9IG1heFBy
ZWZXaWR0aCgpOworICAgICAgICAgICAgICAgIHcgPSBtYXhQcmVmTG9naWNhbFdpZHRoKCk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdyA9IHdpZHRoRnJvbUNhY2hlKGYsIGZyb20sIGxl
biwgeFBvcywgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiAgICAgfSBlbHNlCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsOCArNzYsOCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9v
dExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGludCBtaW5QcmVmV2lkdGgo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBtYXhQcmVmV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGludCBtaW5QcmVmTG9naWNhbFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbWF4
UHJlZkxvZ2ljYWxXaWR0aCgpIGNvbnN0OwogCiAgICAgdm9pZCB0cmltbWVkUHJlZldpZHRocyhp
bnQgbGVhZFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBiZWdpbk1pblcs
IGJvb2wmIGJlZ2luV1MsCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0
aHMoaW50IGxlYWRXaWR0aCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmTG9naWNhbFdp
ZHRocyhpbnQgbGVhZFdpZHRoKTsKICAgICBib29sIGlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNl
KCk7CiAgICAgCiBwcm90ZWN0ZWQ6CkBAIC0xMzcsNyArMTM3LDcgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgSW5saW5lVGV4dEJveCogY3JlYXRlVGV4dEJveCgpOyAvLyBTdWJjbGFzc2VkIGJ5
IFNWRy4KIAogcHJpdmF0ZToKLSAgICB2b2lkIGNhbGNQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgs
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyYpOworICAgIHZvaWQgY29tcHV0ZVByZWZMb2dpY2FsV2lkdGhzKGludCBsZWFkV2lkdGgs
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyYpOwogCiAgICAgLy8gTWFrZSBsZW5ndGgoKSBwcml2YXRlIHNvIHRoYXQgY2FsbGVycyB0
aGF0IGhhdmUgYSBSZW5kZXJUZXh0KgogICAgIC8vIHdpbGwgdXNlIHRoZSBtb3JlIGVmZmljaWVu
dCB0ZXh0TGVuZ3RoKCkgaW5zdGVhZCwgd2hpbGUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDY4MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsNDAgKzUwNCw0MCBA
QCBmbG9hdCBSZW5kZXJUZXh0Q29udHJvbDo6c2NhbGVFbVRvVW5pdHMoCiAgICAgcmV0dXJuIHJv
dW5kZihzdHlsZSgpLT5mb250KCkuc2l6ZSgpICogeCAvIHVuaXRzUGVyRW0pOwogfQogCi12b2lk
IFJlbmRlclRleHRDb250cm9sOjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlclRleHRDb250
cm9sOjpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKQogewotICAgIEFTU0VSVChwcmVmV2lkdGhz
RGlydHkoKSk7CisgICAgQVNTRVJUKHByZWZMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBt
X21pblByZWZXaWR0aCA9IDA7Ci0gICAgbV9tYXhQcmVmV2lkdGggPSAwOworICAgIG1fbWluUHJl
ZkxvZ2ljYWxXaWR0aCA9IDA7CisgICAgbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gMDsKIAogICAg
IGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZhbHVl
KCkgPiAwKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY29tcHV0
ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKKyAgICAg
ICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gY29tcHV0
ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBl
bHNlIHsKICAgICAgICAgLy8gVXNlIGF2ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoLiBNYXRjaGVzIElF
LgogICAgICAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gc3R5bGUoKS0+Zm9udCgpLmZhbWlseSgp
LmZhbWlseSgpOwotICAgICAgICBtX21heFByZWZXaWR0aCA9IHByZWZlcnJlZENvbnRlbnRXaWR0
aChnZXRBdmdDaGFyV2lkdGgoZmFtaWx5KSkgKyBtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPnBh
ZGRpbmdMZWZ0KCkgKyBtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPnBhZGRpbmdSaWdodCgpOwor
ICAgICAgICBtX21heFByZWZMb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRDb250ZW50V2lkdGgoZ2V0
QXZnQ2hhcldpZHRoKGZhbWlseSkpICsgbV9pbm5lclRleHQtPnJlbmRlckJveCgpLT5wYWRkaW5n
TGVmdCgpICsgbV9pbm5lclRleHQtPnJlbmRlckJveCgpLT5wYWRkaW5nUmlnaHQoKTsKICAgICB9
CiAKICAgICBpZiAoc3R5bGUoKS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWlu
V2lkdGgoKS52YWx1ZSgpID4gMCkgewotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21h
eFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lk
dGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldp
ZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZh
bHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gbWF4KG1fbWF4UHJlZkxv
Z2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lk
dGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1heChtX21p
blByZWZMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCkt
Pm1pbldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0gZWxzZSBpZiAoc3R5bGUoKS0+d2lkdGgoKS5p
c1BlcmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWln
aHQoKS5pc1BlcmNlbnQoKSkpCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAgICAgICAg
bV9taW5QcmVmTG9naWNhbFdpZHRoID0gMDsKICAgICBlbHNlCi0gICAgICAgIG1fbWluUHJlZldp
ZHRoID0gbV9tYXhQcmVmV2lkdGg7CisgICAgICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0aCA9IG1f
bWF4UHJlZkxvZ2ljYWxXaWR0aDsKIAogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4
ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7
Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjb21wdXRlQ29u
dGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAg
ICAgbV9taW5QcmVmV2lkdGggPSBtaW4obV9taW5QcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94
TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21h
eFByZWZMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmTG9naWNhbFdpZHRoLCBjb21wdXRlQ29u
dGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAg
ICAgbV9taW5QcmVmTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZkxvZ2ljYWxXaWR0aCwgY29t
cHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7
CiAgICAgfQogCiAgICAgaW50IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAKLSAg
ICBtX21pblByZWZXaWR0aCArPSB0b0FkZDsKLSAgICBtX21heFByZWZXaWR0aCArPSB0b0FkZDsK
KyAgICBtX21pblByZWZMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CisgICAgbV9tYXhQcmVmTG9naWNh
bFdpZHRoICs9IHRvQWRkOwogCi0gICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICBz
ZXRQcmVmTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbDo6c2VsZWN0aW9uQ2hhbmdlZChib29sIHVzZXJUcmlnZ2VyZWQpCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgJKHJldmlzaW9uIDY4MjM4KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUs
NyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJUZXh0Q29udHJvbCI7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNUZXh0Q29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZMb2dp
Y2FsV2lkdGhzKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxv
Y2soUmVuZGVyQmxvY2sqKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgYXZvaWRzRmxvYXRzKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA2ODIzOCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1OSw3ICs1NTksNyBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpw
cmVmZXJyCiAgICAgICAgICAgICAgICAgICBjYW5jZWxSZW5kZXJlci0+cGFkZGluZ0xlZnQoKSAr
IGNhbmNlbFJlbmRlcmVyLT5wYWRkaW5nUmlnaHQoKTsKIAogICAgIGlmIChSZW5kZXJCb3gqIHNw
aW5SZW5kZXJlciA9IG1faW5uZXJTcGluQnV0dG9uID8gbV9pbm5lclNwaW5CdXR0b24tPnJlbmRl
ckJveCgpIDogMCkKLSAgICAgICAgcmVzdWx0ICs9IHNwaW5SZW5kZXJlci0+bWluUHJlZldpZHRo
KCk7CisgICAgICAgIHJlc3VsdCArPSBzcGluUmVuZGVyZXItPm1pblByZWZMb2dpY2FsV2lkdGgo
KTsKIAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgaWYgKFJlbmRlckJveCogc3BlZWNo
UmVuZGVyZXIgPSBtX3NwZWVjaEJ1dHRvbiA/IG1fc3BlZWNoQnV0dG9uLT5yZW5kZXJCb3goKSA6
IDApIHsKQEAgLTU3NSw3ICs1NzUsNyBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpwcmVmZXJyCiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpZiAoUmVuZGVyQm94KiBzcGluUmVu
ZGVyZXIgPSBtX291dGVyU3BpbkJ1dHRvbiA/IG1fb3V0ZXJTcGluQnV0dG9uLT5yZW5kZXJCb3go
KSA6IDApIHsKICAgICAgICAgc3BpblJlbmRlcmVyLT5jb21wdXRlTG9naWNhbFdpZHRoKCk7Ci0g
ICAgICAgIHdpZHRoICs9IHNwaW5SZW5kZXJlci0+bWluUHJlZldpZHRoKCkgKyBzcGluUmVuZGVy
ZXItPm1hcmdpbkxlZnQoKSArIHNwaW5SZW5kZXJlci0+bWFyZ2luUmlnaHQoKTsKKyAgICAgICAg
d2lkdGggKz0gc3BpblJlbmRlcmVyLT5taW5QcmVmTG9naWNhbFdpZHRoKCkgKyBzcGluUmVuZGVy
ZXItPm1hcmdpbkxlZnQoKSArIHNwaW5SZW5kZXJlci0+bWFyZ2luUmlnaHQoKTsKICAgICB9CiAg
ICAgaWYgKHdpZHRoID4gMCkKICAgICAgICAgd2lkdGggKz0gcGFkZGluZ1JpZ2h0KCkgKyBib3Jk
ZXJSaWdodCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkocmV2aXNpb24gNjgy
MzkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBSZW5kZXJWaWRlbzo6dXBkYXRlSW50cmluc2ljU2l6ZSgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIHNldEludHJpbnNpY1NpemUoc2l6ZSk7Ci0gICAgc2V0
UHJlZldpZHRoc0RpcnR5KHRydWUpOworICAgIHNldFByZWZMb2dpY2FsV2lkdGhzRGlydHkodHJ1
ZSk7CiAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAgICAgCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gNjgyMzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEwIEBAIFJlbmRlclZpZXc6
OlJlbmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWUKICAgICAvLyBpbml0IFJlbmRlck9iamVjdCBh
dHRyaWJ1dGVzCiAgICAgc2V0SW5saW5lKGZhbHNlKTsKICAgICAKLSAgICBtX21pblByZWZXaWR0
aCA9IDA7Ci0gICAgbV9tYXhQcmVmV2lkdGggPSAwOworICAgIG1fbWluUHJlZkxvZ2ljYWxXaWR0
aCA9IDA7CisgICAgbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gMDsKIAotICAgIHNldFByZWZXaWR0
aHNEaXJ0eSh0cnVlLCBmYWxzZSk7CisgICAgc2V0UHJlZkxvZ2ljYWxXaWR0aHNEaXJ0eSh0cnVl
LCBmYWxzZSk7CiAgICAgCiAgICAgc2V0UG9zaXRpb25lZCh0cnVlKTsgLy8gdG8gMCwwIDopCiB9
CkBAIC04NiwxMyArODYsMTMgQEAgdm9pZCBSZW5kZXJWaWV3Ojpjb21wdXRlTG9naWNhbFdpZHRo
KCkKICAgICBtX21hcmdpblJpZ2h0ID0gMDsKIH0KIAotdm9pZCBSZW5kZXJWaWV3OjpjYWxjUHJl
ZldpZHRocygpCit2b2lkIFJlbmRlclZpZXc6OmNvbXB1dGVQcmVmTG9naWNhbFdpZHRocygpCiB7
Ci0gICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICBBU1NFUlQocHJlZkxvZ2ljYWxX
aWR0aHNEaXJ0eSgpKTsKIAotICAgIFJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRocygpOworICAg
IFJlbmRlckJsb2NrOjpjb21wdXRlUHJlZkxvZ2ljYWxXaWR0aHMoKTsKIAotICAgIG1fbWF4UHJl
ZldpZHRoID0gbV9taW5QcmVmV2lkdGg7CisgICAgbV9tYXhQcmVmTG9naWNhbFdpZHRoID0gbV9t
aW5QcmVmTG9naWNhbFdpZHRoOwogfQogCiB2b2lkIFJlbmRlclZpZXc6OmxheW91dCgpCkBAIC0x
MDEsNyArMTAxLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogICAgICAgICBzZXRQYWdl
SGVpZ2h0KDApOwogCiAgICAgaWYgKHByaW50aW5nKCkpCi0gICAgICAgIG1fbWluUHJlZldpZHRo
ID0gbV9tYXhQcmVmV2lkdGggPSB3aWR0aCgpOworICAgICAgICBtX21pblByZWZMb2dpY2FsV2lk
dGggPSBtX21heFByZWZMb2dpY2FsV2lkdGggPSB3aWR0aCgpOwogCiAgICAgLy8gVXNlIGNhbGNX
aWR0aC9IZWlnaHQgdG8gZ2V0IHRoZSBuZXcgd2lkdGgvaGVpZ2h0LCBzaW5jZSB0aGlzIHdpbGwg
dGFrZSB0aGUgZnVsbCBwYWdlIHpvb20gZmFjdG9yIGludG8gYWNjb3VudC4KICAgICBib29sIHJl
bGF5b3V0Q2hpbGRyZW4gPSAhcHJpbnRpbmcoKSAmJiAoIW1fZnJhbWVWaWV3IHx8IHdpZHRoKCkg
IT0gdmlld1dpZHRoKCkgfHwgaGVpZ2h0KCkgIT0gdmlld0hlaWdodCgpKTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDY4MjM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsV2lk
dGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZM
b2dpY2FsV2lkdGhzKCk7CiAKICAgICAvLyBUaGUgc2FtZSBhcyB0aGUgRnJhbWVWaWV3J3MgbGF5
b3V0SGVpZ2h0L2xheW91dFdpZHRoIGJ1dCB3aXRoIG51bGwgY2hlY2sgZ3VhcmRzLgogICAgIGlu
dCB2aWV3SGVpZ2h0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9UYWJsZUxheW91
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgJKHJldmlz
aW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5UYWJsZUxheW91
dCgpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKGludCYgbWluV2lkdGgs
IGludCYgbWF4V2lkdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZMb2dpY2Fs
V2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCkgPSAwOwogCiBwcm90ZWN0ZWQ6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68713</attachid>
            <date>2010-09-24 11:05:04 -0700</date>
            <delta_ts>2010-09-24 11:07:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>103666</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODI3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM1IEBACisyMDEwLTA5LTI0ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY0ODIsIHJlbmFtZSB0aGUgdmFy
aW91cyBwcmVmV2lkdGggZnVuY3Rpb25zIHRvIHVzZQorICAgICAgICBwcmVmZXJyZWRMb2dpY2Fs
V2lkdGguCisKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dG9UYWJsZUxheW91dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlV2lkdGgpOgor
ICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvRml4ZWRUYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFRhYmxlTGF5
b3V0OjpjYWxjV2lkdGhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFRhYmxlTGF5b3V0
Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL0Zp
eGVkVGFibGVMYXlvdXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2ljYWxX
aWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZl
cnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZGlydHlMaW5lQm94ZXNGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpSZW5kZXJCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjptYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0
aFVzaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJD
b3VudGVyOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckNvdW50ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OmNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmllbGRzZXQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6
OmNhbGNIb3Jpem9udGFsUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4
aWJsZUJveDo6Y2FsY1ZlcnRpY2FsUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbGV4aWJsZUJveDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmFsbG93ZWRDaGlsZEZsZXgpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJGcmFtZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVCYXNlOjpsYXlv
dXRXaXRoRmxhdHRlbmluZyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZhczo6Y2FudmFzU2l6ZUNoYW5n
ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZU1hcmtlckxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1h
cmtlcjo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RN
YXJrZXI6OnVwZGF0ZU1hcmdpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OlJl
bmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFByZWZlcnJl
ZExvZ2ljYWxXaWR0aHNEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omlu
dmFsaWRhdGVDb250YWluZXJQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6Om1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6Om1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJl
cGxhY2VkOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxpY2Eu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGljYTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhclBhcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyUGFydDo6Y29t
cHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
Y3JvbGxiYXJQYXJ0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpj
b21wdXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjb21w
dXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q29sOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ29sLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Om1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp3aWR0aCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVk
Q29udGVudFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6cHJlZmVycmVkRGVjb3JhdGlvbldpZHRoUmlnaHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJWaWRlby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6dXBkYXRl
SW50cmluc2ljU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJWaWV3Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJW
aWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1RhYmxlTGF5b3V0Lmg6CisKIDIwMTAtMDktMjQg
IEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFs
ZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlv
dXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5j
cHAJKHJldmlzaW9uIDY4MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91
dDo6cmVjYWxjQ29sdW1uKGludCBlCiAKICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgaWYg
KGNoaWxkLT5pc1RhYmxlQ29sKCkpCi0gICAgICAgICAgICB0b1JlbmRlclRhYmxlQ29sKGNoaWxk
KS0+Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICAgICAgICAgIHRvUmVuZGVyVGFibGVDb2woY2hpbGQp
LT5jb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICBlbHNlIGlmIChjaGls
ZC0+aXNUYWJsZVNlY3Rpb24oKSkgewogICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBz
ZWN0aW9uID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24oY2hpbGQpOwogICAgICAgICAgICAgaW50IG51
bVJvd3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7CkBAIC03OSwxMSArNzksMTEgQEAgdm9pZCBBdXRv
VGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbihpbnQgZQogICAgICAgICAgICAgICAgICAgICAvLyBh
IG1pbi9tYXggd2lkdGggb2YgYXQgbGVhc3QgMXB4IGZvciB0aGlzIGNvbHVtbiBub3cuCiAgICAg
ICAgICAgICAgICAgICAgIGwubWluV2lkdGggPSBtYXgobC5taW5XaWR0aCwgY2VsbEhhc0NvbnRl
bnQgPyAxIDogMCk7CiAgICAgICAgICAgICAgICAgICAgIGwubWF4V2lkdGggPSBtYXgobC5tYXhX
aWR0aCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLT5wcmVmV2lkdGhzRGlydHko
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPmNhbGNQcmVmV2lkdGhzKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGwubWluV2lkdGggPSBtYXgoY2VsbC0+bWluUHJlZldpZHRoKCksIGwu
bWluV2lkdGgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC0+bWF4UHJlZldpZHRoKCkg
PiBsLm1heFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsLm1heFdpZHRoID0gY2Vs
bC0+bWF4UHJlZldpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLT5wcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzRGlydHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CisgICAgICAgICAgICAgICAgICAgIGwubWlu
V2lkdGggPSBtYXgoY2VsbC0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCksIGwubWluV2lkdGgp
OworICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
KCkgPiBsLm1heFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsLm1heFdpZHRoID0g
Y2VsbC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXhDb250cmlidXRvciA9IGNlbGw7CiAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjM5
LDcgKzIzOSw3IEBAIHN0YXRpYyBib29sIHNob3VsZFNjYWxlQ29sdW1ucyhSZW5kZXJUYWIKICAg
ICByZXR1cm4gc2NhbGU7CiB9CiAKLXZvaWQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjUHJlZldpZHRo
cyhpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRoKQordm9pZCBBdXRvVGFibGVMYXlvdXQ6OmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgp
CiB7CiAgICAgZnVsbFJlY2FsYygpOwogCkBAIC0zMTcsOCArMzE3LDggQEAgaW50IEF1dG9UYWJs
ZUxheW91dDo6Y2FsY0VmZmVjdGl2ZVdpZHRoKAogCiAgICAgICAgIGludCBjb2wgPSBtX3RhYmxl
LT5jb2xUb0VmZkNvbChjZWxsLT5jb2woKSk7CiAgICAgICAgIHVuc2lnbmVkIGludCBsYXN0Q29s
ID0gY29sOwotICAgICAgICBpbnQgY01pbldpZHRoID0gY2VsbC0+bWluUHJlZldpZHRoKCkgKyBo
c3BhY2luZzsKLSAgICAgICAgZmxvYXQgY01heFdpZHRoID0gY2VsbC0+bWF4UHJlZldpZHRoKCkg
KyBoc3BhY2luZzsKKyAgICAgICAgaW50IGNNaW5XaWR0aCA9IGNlbGwtPm1pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCgpICsgaHNwYWNpbmc7CisgICAgICAgIGZsb2F0IGNNYXhXaWR0aCA9IGNlbGwt
Pm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgaHNwYWNpbmc7CiAgICAgICAgIGludCB0b3Rh
bFBlcmNlbnQgPSAwOwogICAgICAgICBpbnQgbWluV2lkdGggPSAwOwogICAgICAgICBmbG9hdCBt
YXhXaWR0aCA9IDA7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAkocmV2aXNp
b24gNjgxNzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgQXV0b1RhYmxlTGF5b3V0KFJl
bmRlclRhYmxlKik7CiAgICAgfkF1dG9UYWJsZUxheW91dCgpOwogCi0gICAgdmlydHVhbCB2b2lk
IGNhbGNQcmVmV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpOworICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhpbnQmIG1pbldpZHRoLCBpbnQm
IG1heFdpZHRoKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKIHByb3RlY3RlZDoKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiA2ODE3NCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjYsNyArMTI2LDcgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5
KGludAogICAgICAgICAgICAgICAgICAgICBjdXJyZW50RWZmZWN0aXZlQ29sdW1uKys7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgdG9SZW5kZXJUYWJsZUNv
bChjaGlsZCktPmNhbGNQcmVmV2lkdGhzKCk7CisgICAgICAgICAgICB0b1JlbmRlclRhYmxlQ29s
KGNoaWxkKS0+Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMTU1LDggKzE1NSw4IEBAIGludCBGaXhlZFRhYmxl
TGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAg
ICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBSZW5k
ZXJUYWJsZUNlbGwqIGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChjaGlsZCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNlbGwtPnByZWZXaWR0aHNEaXJ0eSgpKQotICAgICAgICAgICAgICAgICAgICBj
ZWxsLT5jYWxjUHJlZldpZHRocygpOworICAgICAgICAgICAgICAgIGlmIChjZWxsLT5wcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzRGlydHkoKSkKKyAgICAgICAgICAgICAgICAgICAgY2VsbC0+Y29tcHV0
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIAogICAgICAgICAgICAgICAgIExlbmd0aCB3ID0g
Y2VsbC0+c3R5bGVPckNvbFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgaW50IHNwYW4gPSBjZWxs
LT5jb2xTcGFuKCk7CkBAIC0xOTAsNyArMTkwLDcgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNh
bGNXaWR0aEFycmF5KGludAogLy8gS2VlcCB0aGlzIGluIHN5bmNoIHdpdGggQkxPQ0tfTUFYX1dJ
RFRIIGluIFJlbmRlckJsb2NrLmNwcAogI2RlZmluZSBUQUJMRV9NQVhfV0lEVEggMTUwMDAKIAot
dm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjUHJlZldpZHRocyhpbnQmIG1pbldpZHRoLCBpbnQm
IG1heFdpZHRoKQordm9pZCBGaXhlZFRhYmxlTGF5b3V0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNh
bFdpZHRocyhpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRoKQogewogICAgIC8vIEZJWE1FOiBU
aGlzIGVudGlyZSBjYWxjdWxhdGlvbiBpcyBpbmNvcnJlY3QgZm9yIGJvdGggbWlud2lkdGggYW5k
IG1heHdpZHRoLgogICAgIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAko
cmV2aXNpb24gNjgxNzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgRml4ZWRUYWJsZUxheW91dCA6
IHB1YmxpYyBUYWJsZUxheQogcHVibGljOgogICAgIEZpeGVkVGFibGVMYXlvdXQoUmVuZGVyVGFi
bGUqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocyhpbnQmIG1pbldpZHRoLCBp
bnQmIG1heFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxX
aWR0aHMoaW50JiBtaW5XaWR0aCwgaW50JiBtYXhXaWR0aCk7CiAgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShy
ZXZpc2lvbiA2ODIzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc4MSw3ICsxNzgxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
QmxvY2tDaGlsZHJlbihibwogCiAgICAgICAgIC8vIElmIHJlbGF5b3V0Q2hpbGRyZW4gaXMgc2V0
IGFuZCB3ZSBoYXZlIHBlcmNlbnRhZ2UgcGFkZGluZywgd2UgYWxzbyBuZWVkIHRvIGludmFsaWRh
dGUgdGhlIGNoaWxkJ3MgcHJlZiB3aWR0aHMuCiAgICAgICAgIGlmIChyZWxheW91dENoaWxkcmVu
ICYmIChjaGlsZC0+c3R5bGUoKS0+cGFkZGluZ0xlZnQoKS5pc1BlcmNlbnQoKSB8fCBjaGlsZC0+
c3R5bGUoKS0+cGFkZGluZ1JpZ2h0KCkuaXNQZXJjZW50KCkpKQotICAgICAgICAgICAgY2hpbGQt
PnNldFByZWZXaWR0aHNEaXJ0eSh0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBjaGlsZC0+c2V0
UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KHRydWUsIGZhbHNlKTsKIAogICAgICAgICAvLyBI
YW5kbGUgdGhlIGZvdXIgdHlwZXMgb2Ygc3BlY2lhbCBlbGVtZW50cyBmaXJzdC4gIFRoZXNlIGlu
Y2x1ZGUgcG9zaXRpb25lZCBjb250ZW50LCBmbG9hdGluZyBjb250ZW50LCBjb21wYWN0cyBhbmQK
ICAgICAgICAgLy8gcnVuLWlucy4gIFdoZW4gd2UgZW5jb3VudGVyIHRoZXNlIGZvdXIgdHlwZXMg
b2Ygb2JqZWN0cywgd2UgZG9uJ3QgYWN0dWFsbHkgbGF5IHRoZW0gb3V0IGFzIG5vcm1hbCBmbG93
IGJsb2Nrcy4KQEAgLTIwMTAsNyArMjAxMCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFBv
c2l0aW9uZWRPYmplY3QKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIElmIHJlbGF5
b3V0Q2hpbGRyZW4gaXMgc2V0IGFuZCB3ZSBoYXZlIHBlcmNlbnRhZ2UgcGFkZGluZywgd2UgYWxz
byBuZWVkIHRvIGludmFsaWRhdGUgdGhlIGNoaWxkJ3MgcHJlZiB3aWR0aHMuCiAgICAgICAgICAg
ICAvL2lmIChyZWxheW91dENoaWxkcmVuICYmIChyLT5zdHlsZSgpLT5wYWRkaW5nTGVmdCgpLmlz
UGVyY2VudCgpIHx8IHItPnN0eWxlKCktPnBhZGRpbmdSaWdodCgpLmlzUGVyY2VudCgpKSkKLSAg
ICAgICAgICAgICAgICByLT5zZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSwgZmFsc2UpOworICAgICAg
ICAgICAgICAgIHItPnNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSh0cnVlLCBmYWxzZSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghci0+bmVlZHNMYXlvdXQoKSAmJiBwYWdp
bmF0ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQpIHsKICAgICAgICAg
ICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9IHItPmlzUmVuZGVyQmxvY2so
KSA/IHRvUmVuZGVyQmxvY2socikgOiAwOwpAQCAtMzkzMyw3ICszOTMzLDcgQEAgaW50IFJlbmRl
ckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlckJveAogICAgIGludCByZXN1bHQgPSBjbGVhclNl
dCA/IG1heCgwLCBib3R0b20gLSB5UG9zKSA6IDA7CiAgICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQt
PmF2b2lkc0Zsb2F0cygpKSB7CiAgICAgICAgIGludCBhdmFpbGFibGVXaWR0aCA9IHRoaXMtPmF2
YWlsYWJsZVdpZHRoKCk7Ci0gICAgICAgIGlmIChjaGlsZC0+bWluUHJlZldpZHRoKCkgPiBhdmFp
bGFibGVXaWR0aCkKKyAgICAgICAgaWYgKGNoaWxkLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KSA+IGF2YWlsYWJsZVdpZHRoKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgaW50
IHkgPSB5UG9zOwpAQCAtNDU5MCw0OCArNDU5MCw0OCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1
c3RGb3JDb2x1bW5zKEludFNpCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpjYWxjUHJl
ZldpZHRocygpCit2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cygpCiB7Ci0gICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICBBU1NFUlQocHJlZmVy
cmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpOwogCiAgICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKIAog
ICAgIGlmICghaXNUYWJsZUNlbGwoKSAmJiBzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBz
dHlsZSgpLT53aWR0aCgpLnZhbHVlKCkgPiAwKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1f
bWF4UHJlZldpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+d2lk
dGgoKS52YWx1ZSgpKTsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0
eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1fbWluUHJlZldp
ZHRoID0gMDsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSAwOworICAgICAgICBtX21pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCA9IDA7CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
ID0gMDsKIAogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKLSAgICAgICAgICAgIGNhbGNJ
bmxpbmVQcmVmV2lkdGhzKCk7CisgICAgICAgICAgICBjb21wdXRlSW5saW5lUHJlZmVycmVkTG9n
aWNhbFdpZHRocygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxjQmxvY2tQcmVmV2lk
dGhzKCk7CisgICAgICAgICAgICBjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7
CiAKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIG1fbWF4UHJl
ZldpZHRoKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKIAogICAg
ICAgICBpZiAoIXN0eWxlKCktPmF1dG9XcmFwKCkgJiYgY2hpbGRyZW5JbmxpbmUoKSkgewotICAg
ICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aDsKKyAgICAgICAgICAgIG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5s
aW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgogICAgICAgICAgICAgaWYgKGxheWVy
KCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpICYmIGxheWVyKCktPm1hcnF1ZWUoKS0+aXNIb3Jpem9u
dGFsKCkpCi0gICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOworICAgICAgICAgICAg
ICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gMDsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChpc1RhYmxlQ2VsbCgpKSB7CiAgICAgICAgICAgICBMZW5ndGggdyA9IHRvUmVuZGVyVGFi
bGVDZWxsKHRoaXMpLT5zdHlsZU9yQ29sV2lkdGgoKTsKICAgICAgICAgICAgIGlmICh3LmlzRml4
ZWQoKSAmJiB3LnZhbHVlKCkgPiAwKQotICAgICAgICAgICAgICAgIG1fbWF4UHJlZldpZHRoID0g
bWF4KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aCh3LnZhbHVl
KCkpKTsKKyAgICAgICAgICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heCht
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
dy52YWx1ZSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKHN0eWxlKCktPm1p
bldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsK
LSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250
ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAg
ICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hM
b2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkp
KTsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1p
bldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KICAgICAKICAgICBpZiAoc3R5bGUoKS0+bWF4V2lk
dGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5l
ZExlbmd0aCkgewotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1pbihtX21heFByZWZXaWR0aCwg
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgp
KSk7Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRoLCBjb21wdXRl
Q29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAg
ICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRo
KCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbiht
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogCiAgICAgaW50IHRvQWRkID0g
MDsKQEAgLTQ2NDAsMTAgKzQ2NDAsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0
aHMoKQogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzdHlsZSgpLT5vdmVyZmxvd1koKSA9
PSBPU0NST0xMKQogICAgICAgICB0b0FkZCArPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAK
LSAgICBtX21pblByZWZXaWR0aCArPSB0b0FkZDsKLSAgICBtX21heFByZWZXaWR0aCArPSB0b0Fk
ZDsKKyAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSB0b0FkZDsKKyAgICBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCArPSB0b0FkZDsKIAotICAgIHNldFByZWZXaWR0aHNEaXJ0eShm
YWxzZSk7CisgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAog
c3RydWN0IElubGluZU1pbk1heEl0ZXJhdG9yIHsKQEAgLTQ3NDcsNyArNDc0Nyw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBzdHJpcFRyYWlsaW5nU3BhY2UoaW4KICAgICB9CiB9CiAKLXZvaWQgUmVu
ZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1
dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKICAgICBpbnQgaW5saW5lTWF4ID0g
MDsKICAgICBpbnQgaW5saW5lTWluID0gMDsKQEAgLTQ4MjYsNyArNDgyNiw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkKICAgICAgICAgICAgICAgICAgICAgaW5s
aW5lTWluICs9IGNoaWxkTWluOwogICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXggKz0gY2hp
bGRNYXg7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjaGlsZC0+
c2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnNl
dFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSW5saW5lIHJlcGxhY2VkIGVsdHMgYWRkIGlu
IHRoZWlyIG1hcmdpbnMgdG8gdGhlaXIgbWluL21heCB2YWx1ZXMuCiAgICAgICAgICAgICAgICAg
ICAgIGludCBtYXJnaW5zID0gMDsKQEAgLTQ4NDUsOCArNDg0NSw4IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkKICAgICAgICAgICAgICAgICAvLyBDYXNlICgyKS4g
SW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzIGFuZCBmbG9hdHMuCiAgICAgICAgICAgICAgICAgLy8g
R28gYWhlYWQgYW5kIHRlcm1pbmF0ZSB0aGUgY3VycmVudCBsaW5lIGFzIGZhciBhcwogICAgICAg
ICAgICAgICAgIC8vIG1pbndpZHRoIGlzIGNvbmNlcm5lZC4KLSAgICAgICAgICAgICAgICBjaGls
ZE1pbiArPSBjaGlsZC0+bWluUHJlZldpZHRoKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGRNYXgg
Kz0gY2hpbGQtPm1heFByZWZXaWR0aCgpOworICAgICAgICAgICAgICAgIGNoaWxkTWluICs9IGNo
aWxkLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgICAgICAgICBjaGlsZE1h
eCArPSBjaGlsZC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CiAKICAgICAgICAgICAgICAg
ICBib29sIGNsZWFyUHJldmlvdXNGbG9hdDsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlz
RmxvYXRpbmcoKSkgewpAQCAtNDg1OSwxMyArNDg1OSwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpj
YWxjSW5saW5lUHJlZldpZHRocygpCiAKICAgICAgICAgICAgICAgICBib29sIGNhbkJyZWFrUmVw
bGFjZWRFbGVtZW50ID0gIWNoaWxkLT5pc0ltYWdlKCkgfHwgYWxsb3dJbWFnZXNUb0JyZWFrOwog
ICAgICAgICAgICAgICAgIGlmICgoY2FuQnJlYWtSZXBsYWNlZEVsZW1lbnQgJiYgKGF1dG9XcmFw
IHx8IG9sZEF1dG9XcmFwKSkgfHwgY2xlYXJQcmV2aW91c0Zsb2F0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVmV2lkdGgpOwor
ICAgICAgICAgICAgICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChpbmxp
bmVNaW4sIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAg
aW5saW5lTWluID0gMDsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSdyZSBzdXBwb3NlZCB0byBjbGVhciB0aGUgcHJldmlvdXMgZmxvYXQsIHRoZW4gdGVybWlu
YXRlIG1heHdpZHRoIGFzIHdlbGwuCiAgICAgICAgICAgICAgICAgaWYgKGNsZWFyUHJldmlvdXNG
bG9hdCkgewotICAgICAgICAgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChpbmxpbmVN
YXgsIG1fbWF4UHJlZldpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7
CiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCA9IDA7CiAgICAgICAgICAgICAgICAgfQog
CkBAIC00ODgzLDEyICs0ODgzLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVm
V2lkdGhzKCkKIAogICAgICAgICAgICAgICAgIGlmICghYXV0b1dyYXAgfHwgIWNhbkJyZWFrUmVw
bGFjZWRFbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGlu
ZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoY2hpbGRN
aW4sIG1fbWluUHJlZldpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoID0gbWF4KGNoaWxkTWluLCBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0
aCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
bGluZU1pbiArPSBjaGlsZE1pbjsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAvLyBOb3cgY2hlY2sgb3VyIGxpbmUuCi0gICAgICAgICAgICAgICAgICAgIG1f
bWluUHJlZldpZHRoID0gbWF4KGNoaWxkTWluLCBtX21pblByZWZXaWR0aCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGNoaWxkTWluLCBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHN0
YXJ0IGEgbmV3IGxpbmUuCiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IDA7CkBAIC00
OTA1LDcgKzQ5MDUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5lUHJlZldpZHRocygp
CiAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogdCA9IHRvUmVuZGVyVGV4dChjaGlsZCk7CiAK
ICAgICAgICAgICAgICAgICBpZiAodC0+aXNXb3JkQnJlYWsoKSkgewotICAgICAgICAgICAgICAg
ICAgICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgoaW5saW5l
TWluLCBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlu
bGluZU1pbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTQ5MjYsNyArNDkyNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQ
cmVmV2lkdGhzKCkKICAgICAgICAgICAgICAgICAvLyBUaGlzIHRleHQgb2JqZWN0IHdpbGwgbm90
IGJlIHJlbmRlcmVkLCBidXQgaXQgbWF5IHN0aWxsIHByb3ZpZGUgYSBicmVha2luZyBvcHBvcnR1
bml0eS4KICAgICAgICAgICAgICAgICBpZiAoIWhhc0JyZWFrICYmIGNoaWxkTWF4ID09IDApIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9XcmFwICYmIChiZWdpbldTIHx8IGVuZFdTKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoaW5saW5lTWlu
LCBtX21pblByZWZXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX21pblByZWZlcnJl
ZExvZ2ljYWxXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IDA7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00OTU2LDEwICs0OTU2
LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkKICAgICAgICAg
ICAgICAgICAgICAgLy8gd2Ugc3RhcnQgYW5kIGVuZCB3aXRoIHdoaXRlc3BhY2UuCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChiZWdpbldTKQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gR28g
YWhlYWQgYW5kIGVuZCB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAg
bV9taW5QcmVmV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChpbmxpbmVN
aW4sIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gKz0gYmVnaW5NaW47Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWlu
UHJlZldpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gLT0gdGk7CiAgICAgICAgICAgICAgICAgICAg
IH0KIApAQCAtNDk2OCwxOCArNDk2OCwxOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5l
UHJlZldpZHRocygpCiAgICAgICAgICAgICAgICAgICAgIGlmIChlbmRXUykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgZW5kIGluIHdoaXRlc3BhY2UsIHdoaWNoIG1lYW5zIHdlIGNh
biBnbyBhaGVhZAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGVuZCBvdXIgY3VycmVu
dCBsaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoaW5s
aW5lTWluLCBtX21pblByZWZXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX21pblBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21pblByZWZX
aWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWlu
ID0gZW5kTWluOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgaWYgKGhhc0JyZWFrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlubGlu
ZU1heCArPSBiZWdpbk1heDsKLSAgICAgICAgICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBt
YXgoaW5saW5lTWF4LCBtX21heFByZWZXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWF4
UHJlZldpZHRoID0gbWF4KGNoaWxkTWF4LCBtX21heFByZWZXaWR0aCk7CisgICAgICAgICAgICAg
ICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGlubGluZU1heCwgbV9tYXhQ
cmVmZXJyZWRMb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgICAgICAgICBtX21heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aCA9IG1heChjaGlsZE1heCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgp
OwogICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXggPSBlbmRNYXg7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCArPSBjaGlsZE1heDsKQEAg
LTQ5ODksOCArNDk4OSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhz
KCkKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNMaXN0TWFya2VyKCkpCiAgICAgICAgICAgICAg
ICAgc3RyaXBGcm9udFNwYWNlcyA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKLSAgICAg
ICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KGlubGluZU1heCwgbV9tYXhQcmVmV2lkdGgpOwor
ICAgICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgoaW5saW5lTWluLCBt
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CisgICAgICAgICAgICBtX21heFByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IG1heChpbmxpbmVNYXgsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsK
ICAgICAgICAgICAgIGlubGluZU1pbiA9IGlubGluZU1heCA9IDA7CiAgICAgICAgICAgICBzdHJp
cEZyb250U3BhY2VzID0gdHJ1ZTsKICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VDaGlsZCA9IDA7
CkBAIC01MDAyLDE0ICs1MDAyLDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVm
V2lkdGhzKCkKICAgICBpZiAoc3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkpCiAgICAgICAg
IHN0cmlwVHJhaWxpbmdTcGFjZShpbmxpbmVNYXgsIGlubGluZU1pbiwgdHJhaWxpbmdTcGFjZUNo
aWxkKTsKIAotICAgIG1fbWluUHJlZldpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVmV2lk
dGgpOwotICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KGlubGluZU1heCwgbV9tYXhQcmVmV2lkdGgp
OworICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgpOworICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bWF4KGlubGluZU1heCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogfQogCiAvLyBVc2Ug
YSB2ZXJ5IGxhcmdlIHZhbHVlIChpbiBlZmZlY3QgaW5maW5pdGUpLgogI2RlZmluZSBCTE9DS19N
QVhfV0lEVEggMTUwMDAKIAotdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0Jsb2NrUHJlZldpZHRocygp
Cit2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkK
IHsKICAgICBib29sIG5vd3JhcCA9IHN0eWxlKCktPndoaXRlU3BhY2UoKSA9PSBOT1dSQVA7CiAK
QEAgLTUwMjUsMTEgKzUwMjUsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0Jsb2NrUHJlZldp
ZHRocygpCiAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpIHx8IChjaGlsZC0+aXNCb3go
KSAmJiB0b1JlbmRlckJveChjaGlsZCktPmF2b2lkc0Zsb2F0cygpKSkgewogICAgICAgICAgICAg
aW50IGZsb2F0VG90YWxXaWR0aCA9IGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoOwog
ICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5jbGVhcigpICYgQ0xFRlQpIHsKLSAgICAg
ICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChmbG9hdFRvdGFsV2lkdGgsIG1fbWF4UHJl
ZldpZHRoKTsKKyAgICAgICAgICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1h
eChmbG9hdFRvdGFsV2lkdGgsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKICAgICAgICAg
ICAgICAgICBmbG9hdExlZnRXaWR0aCA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoY2hpbGQtPnN0eWxlKCktPmNsZWFyKCkgJiBDUklHSFQpIHsKLSAgICAgICAgICAgICAgICBt
X21heFByZWZXaWR0aCA9IG1heChmbG9hdFRvdGFsV2lkdGgsIG1fbWF4UHJlZldpZHRoKTsKKyAg
ICAgICAgICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChmbG9hdFRvdGFs
V2lkdGgsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICBmbG9h
dFJpZ2h0V2lkdGggPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MDQ2LDE0ICs1
MDQ2LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNCbG9ja1ByZWZXaWR0aHMoKQogICAgICAg
ICAgICAgbWFyZ2luUmlnaHQgKz0gbXIudmFsdWUoKTsKICAgICAgICAgbWFyZ2luID0gbWFyZ2lu
TGVmdCArIG1hcmdpblJpZ2h0OwogCi0gICAgICAgIGludCB3ID0gY2hpbGQtPm1pblByZWZXaWR0
aCgpICsgbWFyZ2luOwotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heCh3LCBtX21pblByZWZX
aWR0aCk7CisgICAgICAgIGludCB3ID0gY2hpbGQtPm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
ICsgbWFyZ2luOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heCh3LCBt
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAgICAgICAgIAogICAgICAgICAvLyBJRSBpZ25v
cmVzIHRhYmxlcyBmb3IgY2FsY3VsYXRpb24gb2Ygbm93cmFwLiBNYWtlcyBzb21lIHNlbnNlLgog
ICAgICAgICBpZiAobm93cmFwICYmICFjaGlsZC0+aXNUYWJsZSgpKQotICAgICAgICAgICAgbV9t
YXhQcmVmV2lkdGggPSBtYXgodywgbV9tYXhQcmVmV2lkdGgpOworICAgICAgICAgICAgbV9tYXhQ
cmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgodywgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgp
OwogCi0gICAgICAgIHcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkgKyBtYXJnaW47CisgICAgICAg
IHcgPSBjaGlsZC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyBtYXJnaW47CiAKICAgICAg
ICAgaWYgKCFjaGlsZC0+aXNGbG9hdGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlz
Qm94KCkgJiYgdG9SZW5kZXJCb3goY2hpbGQpLT5hdm9pZHNGbG9hdHMoKSkgewpAQCAtNTA2Miwx
MSArNTA2MiwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKCkKICAg
ICAgICAgICAgICAgICAvLyBpcyBzbWFsbGVyIHRoYW4gdGhlIGZsb2F0IHdpZHRoLgogICAgICAg
ICAgICAgICAgIGludCBtYXhMZWZ0ID0gbWFyZ2luTGVmdCA+IDAgPyBtYXgoZmxvYXRMZWZ0V2lk
dGgsIG1hcmdpbkxlZnQpIDogZmxvYXRMZWZ0V2lkdGggKyBtYXJnaW5MZWZ0OwogICAgICAgICAg
ICAgICAgIGludCBtYXhSaWdodCA9IG1hcmdpblJpZ2h0ID4gMCA/IG1heChmbG9hdFJpZ2h0V2lk
dGgsIG1hcmdpblJpZ2h0KSA6IGZsb2F0UmlnaHRXaWR0aCArIG1hcmdpblJpZ2h0OwotICAgICAg
ICAgICAgICAgIHcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkgKyBtYXhMZWZ0ICsgbWF4UmlnaHQ7
CisgICAgICAgICAgICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAr
IG1heExlZnQgKyBtYXhSaWdodDsKICAgICAgICAgICAgICAgICB3ID0gbWF4KHcsIGZsb2F0TGVm
dFdpZHRoICsgZmxvYXRSaWdodFdpZHRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChmbG9hdExlZnRXaWR0aCAr
IGZsb2F0UmlnaHRXaWR0aCwgbV9tYXhQcmVmV2lkdGgpOworICAgICAgICAgICAgICAgIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdp
ZHRoLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICBmbG9hdExlZnRX
aWR0aCA9IGZsb2F0UmlnaHRXaWR0aCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01MDc2
LDcgKzUwNzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKCkKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmbG9hdFJpZ2h0V2lkdGggKz0gdzsKICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heCh3LCBtX21heFBy
ZWZXaWR0aCk7CisgICAgICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heCh3
LCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAKICAgICAgICAgLy8gQSB2ZXJ5IHNwZWNp
ZmljIFdpbklFIHF1aXJrLgogICAgICAgICAvLyBFeGFtcGxlOgpAQCAtNTA5MiwyMiArNTA5Miwy
MiBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKCkKICAgICAgICAgLy8g
V2UgY2FuIGFjaGlldmUgdGhpcyBlZmZlY3QgYnkgbWFraW5nIHRoZSBtYXh3aWR0aCBvZiBibG9j
a3MgdGhhdCBjb250YWluIHRhYmxlcwogICAgICAgICAvLyB3aXRoIHBlcmNlbnRhZ2Ugd2lkdGhz
IGJlIGluZmluaXRlIChhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBpbnNpZGUgYSB0YWJsZSBjZWxs
KS4KICAgICAgICAgaWYgKGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpICYmIGNoaWxkLT5zdHls
ZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpICYmCi0gICAgICAgICAgICAhaXNUYWJsZUNlbGwoKSAm
JiBjaGlsZC0+aXNUYWJsZSgpICYmIG1fbWF4UHJlZldpZHRoIDwgQkxPQ0tfTUFYX1dJRFRIKSB7
CisgICAgICAgICAgICAhaXNUYWJsZUNlbGwoKSAmJiBjaGlsZC0+aXNUYWJsZSgpICYmIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoIDwgQkxPQ0tfTUFYX1dJRFRIKSB7CiAgICAgICAgICAgICBS
ZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIHdoaWxlICgh
Y2ItPmlzUmVuZGVyVmlldygpICYmICFjYi0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgICAgICAg
ICBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIGlmICghY2ItPmlzVGFi
bGVDZWxsKCkpCi0gICAgICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBCTE9DS19NQVhfV0lE
VEg7CisgICAgICAgICAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBCTE9DS19N
QVhfV0lEVEg7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCk7CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIG1ha2Ugc3VyZSB0aGVzZSB2YWx1
ZXMgYXJlIG5vbi1uZWdhdGl2ZS4KLSAgICBtX21pblByZWZXaWR0aCA9IG1heCgwLCBtX21pblBy
ZWZXaWR0aCk7Ci0gICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoMCwgbV9tYXhQcmVmV2lkdGgpOwor
ICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KDAsIG1fbWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoKTsKKyAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heCgwLCBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAKLSAgICBtX21heFByZWZXaWR0aCA9IG1heChmbG9h
dExlZnRXaWR0aCArIGZsb2F0UmlnaHRXaWR0aCwgbV9tYXhQcmVmV2lkdGgpOworICAgIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdp
ZHRoLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6
Omhhc0xpbmVJZkVtcHR5KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2
aXNpb24gNjgyMDYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjcsNyArMjI3LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4
LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCi0gICAgdmlydHVhbCB2
b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKCk7CiAKICAgICB2aXJ0dWFsIGludCBmaXJzdExpbmVCb3hCYXNlbGluZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGxhc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdDsKQEAg
LTQxNyw4ICs0MTcsOCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRJbk92
ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0
eSk7CiAKLSAgICB2b2lkIGNhbGNJbmxpbmVQcmVmV2lkdGhzKCk7Ci0gICAgdm9pZCBjYWxjQmxv
Y2tQcmVmV2lkdGhzKCk7CisgICAgdm9pZCBjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdp
ZHRocygpOworICAgIHZvaWQgY29tcHV0ZUJsb2NrUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwog
CiAgICAgLy8gT2J0YWlucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgYmxvY2sgKGluY2x1ZGluZyB0
aGlzIGJsb2NrKSB0aGF0IGNvbnRyaWJ1dGVzIGEgZmlyc3QtbGluZSBzdHlsZSB0byBvdXIgaW5s
aW5lCiAgICAgLy8gY2hpbGRyZW4uCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDY4MjM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDggKzIwMiw4
IEBAIHN0YXRpYyBpbmxpbmUgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3gKIHN0YXRpYyBpbmxp
bmUgdm9pZCBkaXJ0eUxpbmVCb3hlc0ZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogbywgYm9vbCBm
dWxsTGF5b3V0KQogewogICAgIGlmIChvLT5pc1RleHQoKSkgewotICAgICAgICBpZiAoby0+cHJl
ZldpZHRoc0RpcnR5KCkgJiYgby0+aXNDb3VudGVyKCkpCi0gICAgICAgICAgICB0b1JlbmRlclRl
eHQobyktPmNhbGNQcmVmV2lkdGhzKDApOyAvLyBGSVhNRTogQ291bnRlcnMgZGVwZW5kIG9uIHRo
aXMgaGFjay4gTm8gY2x1ZSB3aHkuIFNob3VsZCBiZSBpbnZlc3RpZ2F0ZWQgYW5kIHJlbW92ZWQu
CisgICAgICAgIGlmIChvLT5wcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSAmJiBvLT5pc0Nv
dW50ZXIoKSkKKyAgICAgICAgICAgIHRvUmVuZGVyVGV4dChvKS0+Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoMCk7IC8vIEZJWE1FOiBDb3VudGVycyBkZXBlbmQgb24gdGhpcyBoYWNrLiBO
byBjbHVlIHdoeS4gU2hvdWxkIGJlIGludmVzdGlnYXRlZCBhbmQgcmVtb3ZlZC4KICAgICAgICAg
dG9SZW5kZXJUZXh0KG8pLT5kaXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0KTsKICAgICB9IGVsc2UK
ICAgICAgICAgdG9SZW5kZXJJbmxpbmUobyktPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQpOwpA
QCAtNTcxLDcgKzU3MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVu
KGIKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSWYgcmVsYXlvdXRD
aGlsZHJlbiBpcyBzZXQgYW5kIHdlIGhhdmUgcGVyY2VudGFnZSBwYWRkaW5nLCB3ZSBhbHNvIG5l
ZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2hpbGQncyBwcmVmIHdpZHRocy4KICAgICAgICAgICAgICAg
ICBpZiAocmVsYXlvdXRDaGlsZHJlbiAmJiAoby0+c3R5bGUoKS0+cGFkZGluZ0xlZnQoKS5pc1Bl
cmNlbnQoKSB8fCBvLT5zdHlsZSgpLT5wYWRkaW5nUmlnaHQoKS5pc1BlcmNlbnQoKSkpCi0gICAg
ICAgICAgICAgICAgICAgIG8tPnNldFByZWZXaWR0aHNEaXJ0eSh0cnVlLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgIG8tPnNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSh0cnVlLCBm
YWxzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoby0+aXNQb3NpdGlvbmVk
KCkpCiAgICAgICAgICAgICAgICAgICAgIG8tPmNvbnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3Np
dGlvbmVkT2JqZWN0KGJveCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9u
IDY4MjcwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzIsOCArNzIsOCBAQCBSZW5kZXJCb3g6OlJlbmRlckJveChOb2RlKiBub2RlKQogICAg
ICwgbV9tYXJnaW5SaWdodCgwKQogICAgICwgbV9tYXJnaW5Ub3AoMCkKICAgICAsIG1fbWFyZ2lu
Qm90dG9tKDApCi0gICAgLCBtX21pblByZWZXaWR0aCgtMSkKLSAgICAsIG1fbWF4UHJlZldpZHRo
KC0xKQorICAgICwgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoLTEpCisgICAgLCBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCgtMSkKICAgICAsIG1faW5saW5lQm94V3JhcHBlcigwKQogewog
ICAgIHNldElzQm94KCk7CkBAIC01MzksMjAgKzUzOSwyMCBAQCB2b2lkIFJlbmRlckJveDo6cGFu
U2Nyb2xsKGNvbnN0IEludFBvaW50CiAgICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Qb2lu
dChzb3VyY2UpOwogfQogCi1pbnQgUmVuZGVyQm94OjptaW5QcmVmV2lkdGgoKSBjb25zdAoraW50
IFJlbmRlckJveDo6bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3QKIHsKLSAgICBpZiAo
cHJlZldpZHRoc0RpcnR5KCkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcykt
PmNhbGNQcmVmV2lkdGhzKCk7CisgICAgaWYgKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgp
KQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlckJveCo+KHRoaXMpLT5jb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocygpOwogICAgICAgICAKLSAgICByZXR1cm4gbV9taW5QcmVmV2lkdGg7Cisg
ICAgcmV0dXJuIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoOwogfQogCi1pbnQgUmVuZGVyQm94
OjptYXhQcmVmV2lkdGgoKSBjb25zdAoraW50IFJlbmRlckJveDo6bWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoKCkgY29uc3QKIHsKLSAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkpCi0gICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcyktPmNhbGNQcmVmV2lkdGhzKCk7CisgICAgaWYgKHBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlckJv
eCo+KHRoaXMpLT5jb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICAKLSAg
ICByZXR1cm4gbV9tYXhQcmVmV2lkdGg7CisgICAgcmV0dXJuIG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoOwogfQogCiBpbnQgUmVuZGVyQm94OjpvdmVycmlkZVNpemUoKSBjb25zdApAQCAtMTM4
Myw3ICsxMzgzLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQogICAg
ICAgICBtX21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0
aCk7CiAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW5SaWdodC5jYWxjTWluVmFsdWUoY29u
dGFpbmVyV2lkdGgpOwogICAgICAgICBpZiAodHJlYXRBc1JlcGxhY2VkKQotICAgICAgICAgICAg
c2V0V2lkdGgobWF4KHcudmFsdWUoKSArIGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpLCBtaW5QcmVm
V2lkdGgoKSkpOworICAgICAgICAgICAgc2V0V2lkdGgobWF4KHcudmFsdWUoKSArIGJvcmRlckFu
ZFBhZGRpbmdXaWR0aCgpLCBtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSkpOwogCiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0xNDEzLDcgKzE0MTMsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29t
cHV0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgfQogCiAgICAgaWYgKHN0cmV0Y2hlc1RvTWluSW50cmlu
c2ljV2lkdGgoKSkgewotICAgICAgICBzZXRXaWR0aChtYXgod2lkdGgoKSwgbWluUHJlZldpZHRo
KCkpKTsKKyAgICAgICAgc2V0V2lkdGgobWF4KHdpZHRoKCksIG1pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpKSk7CiAgICAgICAgIHcgPSBMZW5ndGgod2lkdGgoKSwgRml4ZWQpOwogICAgIH0KIApA
QCAtMTQ1NCw4ICsxNDU0LDggQEAgaW50IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aFVz
aW5nKAogICAgICAgICAgICAgbG9naWNhbFdpZHRoUmVzdWx0ID0gYXZhaWxhYmxlTG9naWNhbFdp
ZHRoIC0gbWFyZ2luU3RhcnQgLSBtYXJnaW5FbmQ7CiAKICAgICAgICAgaWYgKHNpemVzVG9JbnRy
aW5zaWNXaWR0aCh3aWR0aFR5cGUpKSB7Ci0gICAgICAgICAgICBsb2dpY2FsV2lkdGhSZXN1bHQg
PSBtYXgobG9naWNhbFdpZHRoUmVzdWx0LCBtaW5QcmVmV2lkdGgoKSk7Ci0gICAgICAgICAgICBs
b2dpY2FsV2lkdGhSZXN1bHQgPSBtaW4obG9naWNhbFdpZHRoUmVzdWx0LCBtYXhQcmVmV2lkdGgo
KSk7CisgICAgICAgICAgICBsb2dpY2FsV2lkdGhSZXN1bHQgPSBtYXgobG9naWNhbFdpZHRoUmVz
dWx0LCBtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICBsb2dpY2FsV2lk
dGhSZXN1bHQgPSBtaW4obG9naWNhbFdpZHRoUmVzdWx0LCBtYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGgoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgLy8gRklYTUU6IElmIHRoZSBjb250YWluaW5n
IGJsb2NrIGZsb3cgaXMgcGVycGVuZGljdWxhciB0byBvdXIgZGlyZWN0aW9uIHdlIG5lZWQgdG8g
dXNlIHRoZSBhdmFpbGFibGUgbG9naWNhbCBoZWlnaHQgaW5zdGVhZC4KICAgICAgICAgbG9naWNh
bFdpZHRoUmVzdWx0ID0gY29tcHV0ZUJvcmRlckJveExvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgu
Y2FsY1ZhbHVlKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkpOyAKQEAgLTIwMzEsOCArMjAzMSw4IEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChzdHJldGNoZXNUb01pbkludHJpbnNpY1dpZHRoKCkgJiYgd2lkdGgoKSA8
IG1pblByZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nKSB7Ci0gICAgICAgIGNvbXB1dGVQ
b3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoKG1pblByZWZXaWR0aCgpIC0gYm9yZGVy
c1BsdXNQYWRkaW5nLCBGaXhlZCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJEaXJlY3Rpb24s
CisgICAgaWYgKHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSAmJiB3aWR0aCgpIDwgbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmcpIHsKKyAgICAgICAg
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhMZW5ndGgobWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmcsIEZpeGVkKSwgY29udGFpbmVyQmxvY2ss
IGNvbnRhaW5lckRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aFJlc3VsdCwgbV9tYXJn
aW5MZWZ0LCBtX21hcmdpblJpZ2h0LCB4UmVzdWx0KTsKQEAgLTIxNjgsOCArMjE2OCw4IEBAIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAgICAgICAgIGludCBy
aWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKIAogICAgICAgICAg
ICAgLy8gRklYTUU6IHdvdWxkIGl0IGJlIGJldHRlciB0byBoYXZlIHNocmluay10by1maXQgaW4g
b25lIHN0ZXA/Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBtYXhQcmVmV2lkdGgo
KSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRNaW5XaWR0
aCA9IG1pblByZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgaW50
IHByZWZlcnJlZFdpZHRoID0gbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1
c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKICAgICAgICAgICAgIGludCBh
dmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gcmlnaHRWYWx1ZTsKICAgICAgICAgICAg
IHdpZHRoVmFsdWUgPSBtaW4obWF4KHByZWZlcnJlZE1pbldpZHRoLCBhdmFpbGFibGVXaWR0aCks
IHByZWZlcnJlZFdpZHRoKTsKICAgICAgICAgICAgIGxlZnRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNl
IC0gKHdpZHRoVmFsdWUgKyByaWdodFZhbHVlKTsKQEAgLTIxNzgsOCArMjE3OCw4IEBAIHZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAgICAgICAgIGxlZnRWYWx1
ZSA9IGxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKIAogICAgICAgICAgICAgLy8gRklY
TUU6IHdvdWxkIGl0IGJlIGJldHRlciB0byBoYXZlIHNocmluay10by1maXQgaW4gb25lIHN0ZXA/
Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBtYXhQcmVmV2lkdGgoKSAtIGJvcmRl
cnNQbHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1pblBy
ZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgaW50IHByZWZlcnJl
ZFdpZHRoID0gbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7
CisgICAgICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKICAgICAgICAgICAgIGludCBhdmFpbGFibGVX
aWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gbGVmdFZhbHVlOwogICAgICAgICAgICAgd2lkdGhWYWx1
ZSA9IG1pbihtYXgocHJlZmVycmVkTWluV2lkdGgsIGF2YWlsYWJsZVdpZHRoKSwgcHJlZmVycmVk
V2lkdGgpOwogICAgICAgICB9IGVsc2UgaWYgKGxlZnRJc0F1dG8gJiYgIXdpZHRoLmlzQXV0bygp
ICYmICFyaWdodElzQXV0bykgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDY4
MjcwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3NSw4ICsxNzUsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwog
Ci0gICAgdmlydHVhbCBpbnQgbWluUHJlZldpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
bWF4UHJlZldpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
KCkgY29uc3Q7CiAKICAgICBpbnQgb3ZlcnJpZGVTaXplKCkgY29uc3Q7CiAgICAgaW50IG92ZXJy
aWRlV2lkdGgoKSBjb25zdDsKQEAgLTM1OCw3ICszNTgsNyBAQCBwcml2YXRlOgogICAgIC8vIFRo
aXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBwcmVmZXJyZWQg
d2lkdGhzIGZvciBhbiBvYmplY3QuCiAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGluIHNo
cmluay10by1maXQgbGF5b3V0IHN5c3RlbXMuCiAgICAgLy8gVGhlc2UgaW5jbHVkZSB0YWJsZXMs
IHBvc2l0aW9uZWQgb2JqZWN0cywgZmxvYXRzIGFuZCBmbGV4aWJsZSBib3hlcy4KLSAgICB2aXJ0
dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKSB7IHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKSB7IHNldFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7IH0KIAogcHJpdmF0ZToKICAgICAvLyBU
aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSBjb250ZW50cyArIGJvcmRlcnMgKyBwYWRkaW5nLiAgVGhl
IHgveSBsb2NhdGlvbiBpcyByZWxhdGl2ZSB0byBvdXIgY29udGFpbmVyICh3aGljaCBpcyBub3Qg
YWx3YXlzIG91ciBwYXJlbnQpLgpAQCAtMzcwLDExICszNzAsMTEgQEAgcHJvdGVjdGVkOgogICAg
IGludCBtX21hcmdpblRvcDsKICAgICBpbnQgbV9tYXJnaW5Cb3R0b207CiAKLSAgICAvLyBUaGUg
cHJlZmVycmVkIHdpZHRoIG9mIHRoZSBlbGVtZW50IGlmIGl0IHdlcmUgdG8gYnJlYWsgaXRzIGxp
bmVzIGF0IGV2ZXJ5IHBvc3NpYmxlIG9wcG9ydHVuaXR5LgotICAgIGludCBtX21pblByZWZXaWR0
aDsKKyAgICAvLyBUaGUgcHJlZmVycmVkIGxvZ2ljYWwgd2lkdGggb2YgdGhlIGVsZW1lbnQgaWYg
aXQgd2VyZSB0byBicmVhayBpdHMgbGluZXMgYXQgZXZlcnkgcG9zc2libGUgb3Bwb3J0dW5pdHku
CisgICAgaW50IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoOwogICAgIAotICAgIC8vIFRoZSBw
cmVmZXJyZWQgd2lkdGggb2YgdGhlIGVsZW1lbnQgaWYgaXQgbmV2ZXIgYnJlYWtzIGFueSBsaW5l
cyBhdCBhbGwuCi0gICAgaW50IG1fbWF4UHJlZldpZHRoOworICAgIC8vIFRoZSBwcmVmZXJyZWQg
bG9naWNhbCB3aWR0aCBvZiB0aGUgZWxlbWVudCBpZiBpdCBuZXZlciBicmVha3MgYW55IGxpbmVz
IGF0IGFsbC4KKyAgICBpbnQgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiAKICAgICAvLyBG
b3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLCB0aGUgaW5saW5lIGJveCB0aGF0IG93bnMgdXMu
CiAgICAgSW5saW5lQm94KiBtX2lubGluZUJveFdyYXBwZXI7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb3VudGVyLmNwcAkocmV2aXNpb24gNjgxNzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDEwICszMjgsMTAgQEAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBSZW5kZXJDb3VudGVyOjpvcgogICAgIHJldHVybiB0ZXh0Lmlt
cGwoKTsKIH0KIAotdm9pZCBSZW5kZXJDb3VudGVyOjpjYWxjUHJlZldpZHRocyhpbnQgbGVhZCkK
K3ZvaWQgUmVuZGVyQ291bnRlcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoaW50IGxl
YWQpCiB7CiAgICAgc2V0VGV4dEludGVybmFsKG9yaWdpbmFsVGV4dCgpKTsKLSAgICBSZW5kZXJU
ZXh0OjpjYWxjUHJlZldpZHRocyhsZWFkKTsKKyAgICBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocyhsZWFkKTsKIH0KIAogdm9pZCBSZW5kZXJDb3VudGVyOjppbnZhbGlk
YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcikKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckNvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmgJKHJldmlzaW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBib29sIGlzQ291bnRlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBvcmlnaW5hbFRleHQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKGludCBsZWFkV2lkdGgpOwogCiAgICAgQ291bnRlckNvbnRl
bnQgbV9jb3VudGVyOwogICAgIG11dGFibGUgQ291bnRlck5vZGUqIG1fY291bnRlck5vZGU7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCShyZXZpc2lvbiA2ODIzOSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODgsMzQgKzg4LDM0IEBAIFJlbmRlclN0eWxlKiBSZW5kZXJEYXRhR3JpZDo6aGVhZGVyU3R5bGUK
ICAgICByZXR1cm4gY29sdW1uLT5oZWFkZXJTdHlsZSgpOwogfQogCi12b2lkIFJlbmRlckRhdGFH
cmlkOjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlckRhdGFHcmlkOjpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocygpCiB7Ci0gICAgbV9taW5QcmVmV2lkdGggPSAwOwotICAgIG1fbWF4
UHJlZldpZHRoID0gMDsKKyAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CisgICAg
bV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRo
KCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAgIG1f
bWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjb21wdXRlQ29udGVudEJveExvZ2ljYWxX
aWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gY29tcHV0ZUNvbnRlbnRC
b3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlCi0gICAg
ICAgIG1fbWF4UHJlZldpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoY0RlZmF1
bHRXaWR0aCk7CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gY29tcHV0ZUNv
bnRlbnRCb3hMb2dpY2FsV2lkdGgoY0RlZmF1bHRXaWR0aCk7CiAKICAgICBpZiAoc3R5bGUoKS0+
bWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpID4gMCkg
ewotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0aCwgY29tcHV0ZUNv
bnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJv
eExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9t
YXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgs
IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUo
KSkpOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChtX21pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+
bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChzdHlsZSgpLT53aWR0aCgpLmlz
UGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdo
dCgpLmlzUGVyY2VudCgpKSkKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOworICAgICAgICBt
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CiAgICAgZWxzZQotICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoOwogCiAgICAgaWYgKHN0eWxlKCktPm1h
eFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRl
ZmluZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lk
dGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFs
dWUoKSkpOwotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY29t
cHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7
CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhX
aWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBt
aW4obV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdp
ZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAogICAgIGludCB0b0Fk
ZCA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwotICAgIG1fbWluUHJlZldpZHRoICs9IHRvQWRk
OwotICAgIG1fbWF4UHJlZldpZHRoICs9IHRvQWRkOworICAgIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoICs9IHRvQWRkOworICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IHRvQWRk
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBzZXRQcmVmV2lkdGhzRGly
dHkoZmFsc2UpOworICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9
CiAKIHZvaWQgUmVuZGVyRGF0YUdyaWQ6OmxheW91dCgpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEYXRhR3JpZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckRhdGFHcmlkLmgJKHJldmlzaW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RGF0YUdyaWQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJl
bmRlckRhdGFHcmlkIjsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwor
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJ
bmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
aWVsZHNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRz
ZXQuY3BwCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxk
c2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTEgKzQ0LDExIEBAIFJlbmRlckZpZWxkc2V0
OjpSZW5kZXJGaWVsZHNldChOb2RlKiBlbGUKIHsKIH0KIAotdm9pZCBSZW5kZXJGaWVsZHNldDo6
Y2FsY1ByZWZXaWR0aHMoKQordm9pZCBSZW5kZXJGaWVsZHNldDo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoKQogewotICAgIFJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRocygpOworICAg
IFJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgIGlmIChS
ZW5kZXJCb3gqIGxlZ2VuZCA9IGZpbmRMZWdlbmQoKSkgewotICAgICAgICBpbnQgbGVnZW5kTWlu
V2lkdGggPSBsZWdlbmQtPm1pblByZWZXaWR0aCgpOworICAgICAgICBpbnQgbGVnZW5kTWluV2lk
dGggPSBsZWdlbmQtPm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwogCiAgICAgICAgIExlbmd0
aCBsZWdlbmRNYXJnaW5MZWZ0ID0gbGVnZW5kLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCk7CiAgICAg
ICAgIExlbmd0aCBsZWdlbmRNYXJnaW5SaWdodCA9IGxlZ2VuZC0+c3R5bGUoKS0+bWFyZ2luTGVm
dCgpOwpAQCAtNTksNyArNTksNyBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpjYWxjUHJlZldpZHRo
cygpCiAgICAgICAgIGlmIChsZWdlbmRNYXJnaW5SaWdodC5pc0ZpeGVkKCkpCiAgICAgICAgICAg
ICBsZWdlbmRNaW5XaWR0aCArPSBsZWdlbmRNYXJnaW5SaWdodC52YWx1ZSgpOwogCi0gICAgICAg
IG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBsZWdlbmRNaW5XaWR0aCArIGJv
cmRlckFuZFBhZGRpbmdXaWR0aCgpKTsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSBtYXgobV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGxlZ2VuZE1pbldpZHRoICsgYm9y
ZGVyQW5kUGFkZGluZ1dpZHRoKCkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmllbGRzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWVsZHNldC5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZpZWxkc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBsYXlvdXRMZWdlbmQoYm9vbCByZWxheW91dENoaWxk
cmVuKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOworICAgIHZpcnR1YWwg
dm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgIHZpcnR1YWwgYm9vbCBh
dm9pZHNGbG9hdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHN0
cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJl
dmlzaW9uIDY4MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsNDEgKzI1Nyw0MSBAQCB2b2lkIFJlbmRlckZp
bGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7CiB9CiAKLXZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNhbGNQcmVmV2lk
dGhzKCkKK3ZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOworICAgIEFTU0VS
VChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBtX21pblByZWZXaWR0aCA9
IDA7Ci0gICAgbV9tYXhQcmVmV2lkdGggPSAwOworICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoID0gMDsKKyAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CiAKICAgICBpZiAo
c3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpID4g
MCkKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IGNvbXB1dGVDb250
ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgICAgIG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwog
ICAgIGVsc2UgewogICAgICAgICAvLyBGaWd1cmUgb3V0IGhvdyBiaWcgdGhlIGZpbGVuYW1lIHNw
YWNlIG5lZWRzIHRvIGJlIGZvciBhIGdpdmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzCiAgICAgICAg
IC8vICh1c2luZyAiMCIgYXMgdGhlIG5vbWluYWwgY2hhcmFjdGVyKS4KICAgICAgICAgY29uc3Qg
VUNoYXIgY2ggPSAnMCc7CiAgICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IHN0eWxlKCktPmZvbnQo
KS5mbG9hdFdpZHRoKFRleHRSdW4oJmNoLCAxLCBmYWxzZSwgMCwgMCwgZmFsc2UsIGZhbHNlLCBm
YWxzZSkpOwotICAgICAgICBtX21heFByZWZXaWR0aCA9IChpbnQpY2VpbGYoY2hhcldpZHRoICog
ZGVmYXVsdFdpZHRoTnVtQ2hhcnMpOworICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IChpbnQpY2VpbGYoY2hhcldpZHRoICogZGVmYXVsdFdpZHRoTnVtQ2hhcnMpOwogICAgIH0K
IAogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5X
aWR0aCgpLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4
UHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0
aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lk
dGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFs
dWUoKSkpOworICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUo
KS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoID0gbWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExv
Z2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9IGVsc2UgaWYg
KHN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRv
KCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKQotICAgICAgICBtX21pblByZWZX
aWR0aCA9IDA7CisgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gMDsKICAgICBl
bHNlCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGg7CisgICAgICAgIG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiAK
ICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lk
dGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFByZWZXaWR0
aCA9IG1pbihtX21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWlu
KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5t
YXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgg
PSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNh
bFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0
ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAg
ICAgfQogCiAgICAgaW50IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAgbV9t
aW5QcmVmV2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhQcmVmV2lkdGggKz0gdG9BZGQ7CisgICAg
bV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CisgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggKz0gdG9BZGQ7CiAKLSAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwor
ICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKIHZvaWQgUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2w6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhdGhzKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbC5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAi
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wiOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJv
bUVsZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgdmlydHVh
bCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJ
KHJldmlzaW9uIDY4MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsOCArMTMyLDggQEAgdm9pZCBSZW5kZXJGbGV4aWJs
ZUJveDo6Y2FsY0hvcml6b250YWxQcgogICAgICAgICAgICAgbWFyZ2luUmlnaHQgKz0gbXIudmFs
dWUoKTsKICAgICAgICAgbWFyZ2luID0gbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0OwogCi0gICAg
ICAgIG1fbWluUHJlZldpZHRoICs9IGNoaWxkLT5taW5QcmVmV2lkdGgoKSArIG1hcmdpbjsKLSAg
ICAgICAgbV9tYXhQcmVmV2lkdGggKz0gY2hpbGQtPm1heFByZWZXaWR0aCgpICsgbWFyZ2luOwor
ICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBjaGlsZC0+bWluUHJlZmVycmVk
TG9naWNhbFdpZHRoKCkgKyBtYXJnaW47CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoICs9IGNoaWxkLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIG1hcmdpbjsKICAgICB9
ICAgIAogfQogCkBAIC0xNTUsMzkgKzE1NSwzOSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojpj
YWxjVmVydGljYWxQcmVmCiAgICAgICAgIGlmIChtci5pc0ZpeGVkKCkpCiAgICAgICAgICAgICBt
YXJnaW4gKz0gbXIudmFsdWUoKTsKICAgICAgICAgCi0gICAgICAgIGludCB3ID0gY2hpbGQtPm1p
blByZWZXaWR0aCgpICsgbWFyZ2luOwotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heCh3LCBt
X21pblByZWZXaWR0aCk7CisgICAgICAgIGludCB3ID0gY2hpbGQtPm1pblByZWZlcnJlZExvZ2lj
YWxXaWR0aCgpICsgbWFyZ2luOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1heCh3LCBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAgICAgICAgIAotICAgICAgICB3
ID0gY2hpbGQtPm1heFByZWZXaWR0aCgpICsgbWFyZ2luOwotICAgICAgICBtX21heFByZWZXaWR0
aCA9IG1heCh3LCBtX21heFByZWZXaWR0aCk7CisgICAgICAgIHcgPSBjaGlsZC0+bWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoKCkgKyBtYXJnaW47CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbWF4KHcsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKICAgICB9ICAgIAog
fQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRl
ckZsZXhpYmxlQm94Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiB7Ci0gICAgQVNT
RVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICBBU1NFUlQocHJlZmVycmVkTG9naWNhbFdpZHRo
c0RpcnR5KCkpOwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxl
KCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQ
cmVmV2lkdGggPSBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgp
LnZhbHVlKCkpOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJl
ZmVycmVkTG9naWNhbFdpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUo
KS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgbV9taW5QcmVmV2lkdGgg
PSBtX21heFByZWZXaWR0aCA9IDA7CisgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRo
ID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOwogCiAgICAgICAgIGlmIChoYXNNdWx0
aXBsZUxpbmVzKCkgfHwgaXNWZXJ0aWNhbCgpKQogICAgICAgICAgICAgY2FsY1ZlcnRpY2FsUHJl
ZldpZHRocygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxjSG9yaXpvbnRhbFByZWZX
aWR0aHMoKTsKIAotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwg
bV9tYXhQcmVmV2lkdGgpOworICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1h
eChtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgp
OwogICAgIH0KIAogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHls
ZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0g
bWF4KG1fbWF4UHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgp
LT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9t
aW5QcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldp
ZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1h
eChtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lk
dGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoID0gbWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29u
dGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9
CiAgICAgCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCkt
Pm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhQ
cmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdp
ZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pblByZWZXaWR0
aCA9IG1pbihtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJv
eExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgs
IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUo
KSkpOwogICAgIH0KIAogICAgIGludCB0b0FkZCA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwpA
QCAtMTk1LDEwICsxOTUsMTAgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y2FsY1ByZWZXaWR0
aHMoKQogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzdHlsZSgpLT5vdmVyZmxvd1koKSA9
PSBPU0NST0xMKQogICAgICAgICB0b0FkZCArPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAK
LSAgICBtX21pblByZWZXaWR0aCArPSB0b0FkZDsKLSAgICBtX21heFByZWZXaWR0aCArPSB0b0Fk
ZDsKKyAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSB0b0FkZDsKKyAgICBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCArPSB0b0FkZDsKIAotICAgIHNldFByZWZXaWR0aHNEaXJ0eShm
YWxzZSk7CisgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAog
dm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVu
LCBpbnQgLypwYWdlSGVpZ2h0IEZJWE1FOiBJbXBsZW1lbnQgKi8pCkBAIC0xMDU0LDkgKzEwNTQs
OSBAQCBpbnQgUmVuZGVyRmxleGlibGVCb3g6OmFsbG93ZWRDaGlsZEZsZXgoCiAgICAgICAgICAg
ICAgICAgY2hpbGQtPnN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKQogICAgICAgICAgICAg
ICAgIG1heFcgPSBjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpOwogICAgICAgICAg
ICAgZWxzZSBpZiAoY2hpbGQtPnN0eWxlKCktPm1heFdpZHRoKCkudHlwZSgpID09IEludHJpbnNp
YykKLSAgICAgICAgICAgICAgICBtYXhXID0gY2hpbGQtPm1heFByZWZXaWR0aCgpOworICAgICAg
ICAgICAgICAgIG1heFcgPSBjaGlsZC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CiAgICAg
ICAgICAgICBlbHNlIGlmIChjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS50eXBlKCkgPT0gTWlu
SW50cmluc2ljKQotICAgICAgICAgICAgICAgIG1heFcgPSBjaGlsZC0+bWluUHJlZldpZHRoKCk7
CisgICAgICAgICAgICAgICAgbWF4VyA9IGNoaWxkLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KTsKICAgICAgICAgICAgIGlmIChtYXhXID09IElOVF9NQVgpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG1heFc7CiAgICAgICAgICAgICByZXR1cm4gbWF4KDAsIG1heFcgLSB3KTsKQEAgLTEwNzUs
MTQgKzEwNzUsMTQgQEAgaW50IFJlbmRlckZsZXhpYmxlQm94OjphbGxvd2VkQ2hpbGRGbGV4KAog
CiAgICAgLy8gRklYTUU6IEZvciBub3cganVzdCBoYW5kbGUgZml4ZWQgdmFsdWVzLgogICAgIGlm
IChpc0hvcml6b250YWwoKSkgewotICAgICAgICBpbnQgbWluVyA9IGNoaWxkLT5taW5QcmVmV2lk
dGgoKTsKKyAgICAgICAgaW50IG1pblcgPSBjaGlsZC0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRo
KCk7CiAgICAgICAgIGludCB3ID0gY2hpbGQtPm92ZXJyaWRlV2lkdGgoKSAtIGNoaWxkLT5ib3Jk
ZXJBbmRQYWRkaW5nV2lkdGgoKTsKICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5taW5XaWR0
aCgpLmlzRml4ZWQoKSkKICAgICAgICAgICAgIG1pblcgPSBjaGlsZC0+c3R5bGUoKS0+bWluV2lk
dGgoKS52YWx1ZSgpOwogICAgICAgICBlbHNlIGlmIChjaGlsZC0+c3R5bGUoKS0+bWluV2lkdGgo
KS50eXBlKCkgPT0gSW50cmluc2ljKQotICAgICAgICAgICAgbWluVyA9IGNoaWxkLT5tYXhQcmVm
V2lkdGgoKTsKKyAgICAgICAgICAgIG1pblcgPSBjaGlsZC0+bWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKCk7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zdHlsZSgpLT5taW5XaWR0aCgpLnR5cGUo
KSA9PSBNaW5JbnRyaW5zaWMpCi0gICAgICAgICAgICBtaW5XID0gY2hpbGQtPm1pblByZWZXaWR0
aCgpOworICAgICAgICAgICAgbWluVyA9IGNoaWxkLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KTsKICAgICAgICAgICAgIAogICAgICAgICBpbnQgYWxsb3dlZFNocmlua2FnZSA9IG1pbigwLCBt
aW5XIC0gdyk7CiAgICAgICAgIHJldHVybiBhbGxvd2VkU2hyaW5rYWdlOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICB2b2lkIGNhbGNIb3Jpem9u
dGFsUHJlZldpZHRocygpOwogICAgIHZvaWQgY2FsY1ZlcnRpY2FsUHJlZldpZHRocygpOwogCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAJKHJldmlzaW9uIDY4MTc0KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMsOCArNTMsOCBAQCB2b2lkIFJlbmRlckZyYW1lQmFzZTo6bGF5b3V0V2l0aEZsYXR0ZW5p
CiAKICAgICAvLyBuZWVkIHRvIHVwZGF0ZSB0byBjYWxjdWxhdGUgbWluL21heCBjb3JyZWN0bHkK
ICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbigpOwotICAgIGlmIChjaGlsZFJvb3QtPnByZWZXaWR0
aHNEaXJ0eSgpKQotICAgICAgICBjaGlsZFJvb3QtPmNhbGNQcmVmV2lkdGhzKCk7CisgICAgaWYg
KGNoaWxkUm9vdC0+cHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpCisgICAgICAgIGNoaWxk
Um9vdC0+Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIAogICAgIC8vIGlmIHNjcm9s
bGJhcnMgYXJlIG9mZiwgYW5kIHRoZSB3aWR0aCBvciBoZWlnaHQgYXJlIGZpeGVkCiAgICAgLy8g
d2Ugb2JleSB0aGVtIGFuZCBkbyBub3QgZXhwYW5kLiBXaXRoIGZyYW1lIGZsYXR0ZW5pbmcKQEAg
LTY5LDcgKzY5LDcgQEAgdm9pZCBSZW5kZXJGcmFtZUJhc2U6OmxheW91dFdpdGhGbGF0dGVuaQog
CiAgICAgLy8gbWFrZSBzdXJlIG1pbmltdW0gcHJlZmVycmVkIHdpZHRoIGlzIGVuZm9yY2VkCiAg
ICAgaWYgKGlzU2Nyb2xsYWJsZSB8fCAhZml4ZWRXaWR0aCkgewotICAgICAgICBzZXRXaWR0aCht
YXgod2lkdGgoKSwgY2hpbGRSb290LT5taW5QcmVmV2lkdGgoKSArIGhCb3JkZXIpKTsKKyAgICAg
ICAgc2V0V2lkdGgobWF4KHdpZHRoKCksIGNoaWxkUm9vdC0+bWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoKCkgKyBoQm9yZGVyKSk7CiAgICAgICAgIC8vIHVwZGF0ZSBhZ2FpbiB0byBwYXNzIHRoZSBu
ZXcgd2lkdGggdG8gdGhlIGNoaWxkIGZyYW1lCiAgICAgICAgIHVwZGF0ZVdpZGdldFBvc2l0aW9u
KCk7CiAgICAgICAgIGNoaWxkRnJhbWVWaWV3LT5sYXlvdXQoKTsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiA2ODIzOCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw4
IEBAIHZvaWQgUmVuZGVySFRNTENhbnZhczo6Y2FudmFzU2l6ZUNoYW5nZWQKICAgICBpZiAoIXBh
cmVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXByZWZXaWR0aHNEaXJ0eSgpKQot
ICAgICAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7CisgICAgaWYgKCFwcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkoKSkKKyAgICAgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5
KHRydWUpOwogCiAgICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwogICAgIGNvbXB1dGVMb2dp
Y2FsV2lkdGgoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDY4
MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTEsOCArMTUxLDggQEAgdm9pZCBSZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKFdyYXBw
ZWRJbQogICAgICAgICAgICAgLy8gbGV0cyBzZWUgaWYgd2UgbmVlZCB0byByZWxheW91dCBhdCBh
bGwuLgogICAgICAgICAgICAgaW50IG9sZHdpZHRoID0gd2lkdGgoKTsKICAgICAgICAgICAgIGlu
dCBvbGRoZWlnaHQgPSBoZWlnaHQoKTsKLSAgICAgICAgICAgIGlmICghcHJlZldpZHRoc0RpcnR5
KCkpCi0gICAgICAgICAgICAgICAgc2V0UHJlZldpZHRoc0RpcnR5KHRydWUpOworICAgICAgICAg
ICAgaWYgKCFwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSkKKyAgICAgICAgICAgICAgICBz
ZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkodHJ1ZSk7CiAgICAgICAgICAgICBjb21wdXRl
TG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAgICBjb21wdXRlTG9naWNhbEhlaWdodCgpOwogCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gNjgyMzkpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYw
LDM5ICsxNjAsMzkgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbFNlbGVjdAog
ICAgICAgICBzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleChmaXJzdEluZGV4KTsKIH0K
IAotdm9pZCBSZW5kZXJMaXN0Qm94OjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlckxpc3RC
b3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKICAgICBBU1NFUlQoIW1fb3B0
aW9uc0NoYW5nZWQpOwogCi0gICAgbV9taW5QcmVmV2lkdGggPSAwOwotICAgIG1fbWF4UHJlZldp
ZHRoID0gMDsKKyAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CisgICAgbV9tYXhQ
cmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNG
aXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluUHJl
ZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChz
dHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dp
Y2FsV2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAg
bV9tYXhQcmVmV2lkdGggPSBtX29wdGlvbnNXaWR0aCArIDIgKiBvcHRpb25zU3BhY2luZ0hvcml6
b250YWw7CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9vcHRpb25zV2lk
dGggKyAyICogb3B0aW9uc1NwYWNpbmdIb3Jpem9udGFsOwogICAgICAgICBpZiAobV92QmFyKQot
ICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggKz0gbV92QmFyLT53aWR0aCgpOworICAgICAgICAg
ICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gbV92QmFyLT53aWR0aCgpOwogICAgIH0K
IAogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5X
aWR0aCgpLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4
UHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0
aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lk
dGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFs
dWUoKSkpOworICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUo
KS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoID0gbWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExv
Z2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9IGVsc2UgaWYg
KHN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRv
KCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKQotICAgICAgICBtX21pblByZWZX
aWR0aCA9IDA7CisgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gMDsKICAgICBl
bHNlCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGg7CisgICAgICAgIG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiAK
ICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lk
dGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFByZWZXaWR0
aCA9IG1pbihtX21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWlu
KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5t
YXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgg
PSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNh
bFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0
ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAg
ICAgfQogCiAgICAgaW50IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAgbV9t
aW5QcmVmV2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhQcmVmV2lkdGggKz0gdG9BZGQ7CisgICAg
bV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CisgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggKz0gdG9BZGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CisgICAgc2V0UHJlZmVycmVkTG9naWNhbFdp
ZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAogaW50IFJlbmRlckxpc3RCb3g6OnNpemUoKSBjb25zdApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gNjgyMzgpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcw
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9k
ZSA9IDApOwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgdmlydHVhbCBpbnQg
YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gNjgyMDYpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsy
MTAsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVNYXJrZXJMb2NhdGlvCiAgICAgICAg
ICAgICAgICAgbGluZUJveFBhcmVudCA9IHRoaXM7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
bWFya2VyUGFyICE9IGxpbmVCb3hQYXJlbnQgfHwgbV9tYXJrZXItPnByZWZXaWR0aHNEaXJ0eSgp
KSB7CisgICAgICAgIGlmIChtYXJrZXJQYXIgIT0gbGluZUJveFBhcmVudCB8fCBtX21hcmtlci0+
cHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpIHsKICAgICAgICAgICAgIC8vIFJlbW92aW5n
IGFuZCBhZGRpbmcgdGhlIG1hcmtlciBjYW4gdHJpZ2dlciByZXBhaW50aW5nIGluCiAgICAgICAg
ICAgICAvLyBjb250YWluZXJzIG90aGVyIHRoYW4gb3Vyc2VsdmVzLCBzbyB3ZSBuZWVkIHRvIGRp
c2FibGUgTGF5b3V0U3RhdGUuCiAgICAgICAgICAgICB2aWV3KCktPmRpc2FibGVMYXlvdXRTdGF0
ZSgpOwpAQCAtMjE5LDIwICsyMTksMjAgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTWFy
a2VyTG9jYXRpbwogICAgICAgICAgICAgaWYgKCFsaW5lQm94UGFyZW50KQogICAgICAgICAgICAg
ICAgIGxpbmVCb3hQYXJlbnQgPSB0aGlzOwogICAgICAgICAgICAgbGluZUJveFBhcmVudC0+YWRk
Q2hpbGQobV9tYXJrZXIsIGZpcnN0Tm9uTWFya2VyQ2hpbGQobGluZUJveFBhcmVudCkpOwotICAg
ICAgICAgICAgaWYgKG1fbWFya2VyLT5wcmVmV2lkdGhzRGlydHkoKSkKLSAgICAgICAgICAgICAg
ICBtX21hcmtlci0+Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICAgICAgICAgIGlmIChtX21hcmtlci0+
cHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpCisgICAgICAgICAgICAgICAgbV9tYXJrZXIt
PmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgICAgICAgICB2aWV3KCktPmVu
YWJsZUxheW91dFN0YXRlKCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGlz
dEl0ZW06OmNhbGNQcmVmV2lkdGhzKCkKK3ZvaWQgUmVuZGVyTGlzdEl0ZW06OmNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwor
ICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAgICAgCiAgICAgdXBk
YXRlTWFya2VyTG9jYXRpb24oKTsKIAotICAgIFJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRocygp
OworICAgIFJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogfQog
CiB2b2lkIFJlbmRlckxpc3RJdGVtOjpsYXlvdXQoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgdmly
dHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwor
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogCiAgICAg
dmlydHVhbCB2b2lkIHBvc2l0aW9uTGlzdE1hcmtlcigpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gNjgxNzQpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3NCwxMyArMTI3
NCwxMyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiB2b2lkIFJl
bmRlckxpc3RNYXJrZXI6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwot
ICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5KCkpOworICAgIEFTU0VSVCghcHJlZmVycmVkTG9n
aWNhbFdpZHRoc0RpcnR5KCkpOwogCiAgICAgaWYgKGlzSW1hZ2UoKSkgewogICAgICAgICBzZXRX
aWR0aChtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS53
aWR0aCgpKTsKICAgICAgICAgc2V0SGVpZ2h0KG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpLmhlaWdodCgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBz
ZXRXaWR0aChtaW5QcmVmV2lkdGgoKSk7CisgICAgICAgIHNldFdpZHRoKG1pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCgpKTsKICAgICAgICAgc2V0SGVpZ2h0KHN0eWxlKCktPmZvbnQoKS5oZWlnaHQo
KSk7CiAgICAgfQogCkBAIC0xMzA4LDkgKzEzMDgsOSBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6
OmltYWdlQ2hhbmdlZChXcmFwCiAgICAgICAgIHJlcGFpbnQoKTsKIH0KIAotdm9pZCBSZW5kZXJM
aXN0TWFya2VyOjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5
KCkpOworICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKICAgICBt
X3RleHQgPSAiIjsKIApAQCAtMTMyMSw4ICsxMzIxLDggQEAgdm9pZCBSZW5kZXJMaXN0TWFya2Vy
OjpjYWxjUHJlZldpZHRocygpCiAgICAgICAgIC8vIHVudGlsIHdlIHN1cHBvcnQgdGhlIENTUzMg
bWFya2VyIHBzZXVkb2NsYXNzIHRvIGFsbG93IGNvbnRyb2wgb3ZlciB0aGUgd2lkdGggYW5kIGhl
aWdodCBvZiB0aGUgbWFya2VyIGJveC4KICAgICAgICAgaW50IGJ1bGxldFdpZHRoID0gZm9udC5h
c2NlbnQoKSAvIDI7CiAgICAgICAgIG1faW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShJbnRT
aXplKGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCkpOwotICAgICAgICBtX21pblByZWZXaWR0aCA9
IG1fbWF4UHJlZldpZHRoID0gbV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSkud2lkdGgoKTsKLSAgICAgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsK
KyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2lj
YWxXaWR0aCA9IG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpLndpZHRoKCk7CisgICAgICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxz
ZSk7CiAgICAgICAgIHVwZGF0ZU1hcmdpbnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTE0MjgsMTAgKzE0MjgsMTAgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpjYWxjUHJlZldpZHRo
cygpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX21pblByZWZXaWR0aCA9IHdp
ZHRoOwotICAgIG1fbWF4UHJlZldpZHRoID0gd2lkdGg7CisgICAgbV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGggPSB3aWR0aDsKKyAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHdpZHRo
OwogCi0gICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICBzZXRQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkoZmFsc2UpOwogICAgIAogICAgIHVwZGF0ZU1hcmdpbnMoKTsKIH0KQEAg
LTE0NTUsOSArMTQ1NSw5IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygp
CiAgICAgICAgICAgICBjYXNlIFNxdWFyZToKICAgICAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSAt
MTsKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQgPSBmb250LmFzY2VudCgpIC0gbWlu
UHJlZldpZHRoKCkgKyAxOworICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IGZvbnQu
YXNjZW50KCkgLSBtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIDE7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IGZvbnQuYXNjZW50
KCkgLSBtaW5QcmVmV2lkdGgoKSArIDE7CisgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQg
PSBmb250LmFzY2VudCgpIC0gbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyAxOwogICAgICAg
ICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IC0xOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTE0NjcsNyArMTQ2Nyw3IEBAIHZvaWQgUmVuZGVyTGlzdE1h
cmtlcjo6dXBkYXRlTWFyZ2lucygpCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHN0eWxlKCkt
PmRpcmVjdGlvbigpID09IExUUikgewogICAgICAgICAgICAgaWYgKGlzSW1hZ2UoKSkKLSAgICAg
ICAgICAgICAgICBtYXJnaW5MZWZ0ID0gLW1pblByZWZXaWR0aCgpIC0gY01hcmtlclBhZGRpbmc7
CisgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IC1taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KSAtIGNNYXJrZXJQYWRkaW5nOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
aW50IG9mZnNldCA9IGZvbnQuYXNjZW50KCkgKiAyIC8gMzsKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgewpAQCAtMTQ3OSw3ICsxNDc5LDcgQEAgdm9p
ZCBSZW5kZXJMaXN0TWFya2VyOjp1cGRhdGVNYXJnaW5zKCkKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBOb25lTGlzdFN0eWxlOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5M
ZWZ0ID0gbV90ZXh0LmlzRW1wdHkoKSA/IDAgOiAtbWluUHJlZldpZHRoKCkgLSBvZmZzZXQgLyAy
OworICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IG1fdGV4dC5pc0VtcHR5KCkg
PyAwIDogLW1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gb2Zmc2V0IC8gMjsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNDkxLDcgKzE0
OTEsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgICAgICAg
ICAgICAgICAgICBjYXNlIERpc2M6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2lyY2xlOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIFNxdWFyZToKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1hcmdpbkxlZnQgPSBvZmZzZXQgKyBjTWFya2VyUGFkZGluZyArIDEgLSBtaW5QcmVmV2lkdGgo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBvZmZzZXQgKyBjTWFya2Vy
UGFkZGluZyArIDEgLSBtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIE5vbmVMaXN0U3R5bGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE1MDAsNyArMTUwMCw3IEBAIHZv
aWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygpCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG1hcmdpblJpZ2h0ID0gLW1hcmdpbkxl
ZnQgLSBtaW5QcmVmV2lkdGgoKTsKKyAgICAgICAgbWFyZ2luUmlnaHQgPSAtbWFyZ2luTGVmdCAt
IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwogICAgIH0KIAogICAgIHN0eWxlKCktPnNldE1h
cmdpbkxlZnQoTGVuZ3RoKG1hcmdpbkxlZnQsIEZpeGVkKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJs
aWM6CiAgICAgUmVuZGVyTGlzdE1hcmtlcihSZW5kZXJMaXN0SXRlbSopOwogICAgIHZpcnR1YWwg
flJlbmRlckxpc3RNYXJrZXIoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygp
OworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogCiAg
ICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CiAKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDY4MjM5KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzks
MzQgKzIzOSwzNCBAQCBJbnRSZWN0IFJlbmRlck1lbnVMaXN0Ojpjb250cm9sQ2xpcFJlY3QoCiAg
ICAgcmV0dXJuIGludGVyc2VjdGlvbihvdXRlckJveCwgaW5uZXJCb3gpOwogfQogCi12b2lkIFJl
bmRlck1lbnVMaXN0OjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlck1lbnVMaXN0Ojpjb21w
dXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiB7Ci0gICAgbV9taW5QcmVmV2lkdGggPSAwOwot
ICAgIG1fbWF4UHJlZldpZHRoID0gMDsKKyAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IDA7CisgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOwogICAgIAogICAgIGlmIChz
dHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkgPiAw
KQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKKyAgICAgICAgbV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IGNv
bXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CiAg
ICAgZWxzZQotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX29wdGlvbnNXaWR0aCwgdGhl
bWUoKS0+bWluaW11bU1lbnVMaXN0U2l6ZShzdHlsZSgpKSkgKyBtX2lubmVyQmxvY2stPnBhZGRp
bmdMZWZ0KCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdSaWdodCgpOworICAgICAgICBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChtX29wdGlvbnNXaWR0aCwgdGhlbWUoKS0+bWluaW11
bU1lbnVMaXN0U2l6ZShzdHlsZSgpKSkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCkgKyBt
X2lubmVyQmxvY2stPnBhZGRpbmdSaWdodCgpOwogCiAgICAgaWYgKHN0eWxlKCktPm1pbldpZHRo
KCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsKLSAgICAg
ICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94
TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21p
blByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoID0gbWF4KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRl
Q29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAg
ICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRo
KCkudmFsdWUoKSkpOwogICAgIH0gZWxzZSBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQo
KSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWlnaHQoKS5pc1Bl
cmNlbnQoKSkpCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAgICAgICAgbV9taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSAwOwogICAgIGVsc2UKLSAgICAgICAgbV9taW5QcmVmV2lkdGgg
PSBtX21heFByZWZXaWR0aDsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBt
X21heFByZWZlcnJlZExvZ2ljYWxXaWR0aDsKIAogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgp
LmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVu
Z3RoKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjb21w
dXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsK
LSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtaW4obV9taW5QcmVmV2lkdGgsIGNvbXB1dGVDb250
ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAg
ICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52
YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHls
ZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBib3Jk
ZXJBbmRQYWRkaW5nV2lkdGgoKTsKLSAgICBtX21pblByZWZXaWR0aCArPSB0b0FkZDsKLSAgICBt
X21heFByZWZXaWR0aCArPSB0b0FkZDsKKyAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCAr
PSB0b0FkZDsKKyAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSB0b0FkZDsKIAotICAg
IHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CisgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRo
c0RpcnR5KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkocmV2aXNpb24gNjgxNzQpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3
NCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyTWVudUxpc3QiOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2Fs
Y1ByZWZXaWR0aHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxX
aWR0aHMoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNjgyMzkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgUmVuZGVyT2Jq
ZWN0OjpSZW5kZXJPYmplY3QoTm9kZSogbm9kZSkKICAgICAsIG1fbmVlZHNQb3NpdGlvbmVkTW92
ZW1lbnRMYXlvdXQoZmFsc2UpCiAgICAgLCBtX25vcm1hbENoaWxkTmVlZHNMYXlvdXQoZmFsc2Up
CiAgICAgLCBtX3Bvc0NoaWxkTmVlZHNMYXlvdXQoZmFsc2UpCi0gICAgLCBtX3ByZWZXaWR0aHNE
aXJ0eShmYWxzZSkKKyAgICAsIG1fcHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKQog
ICAgICwgbV9mbG9hdGluZyhmYWxzZSkKICAgICAsIG1fcG9zaXRpb25lZChmYWxzZSkKICAgICAs
IG1fcmVsUG9zaXRpb25lZChmYWxzZSkKQEAgLTU3MywyNyArNTczLDI3IEBAIFJlbmRlckJsb2Nr
KiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZUJsb2MKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBS
ZW5kZXJPYmplY3Q6OnNldFByZWZXaWR0aHNEaXJ0eShib29sIGIsIGJvb2wgbWFya1BhcmVudHMp
Cit2b2lkIFJlbmRlck9iamVjdDo6c2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGJvb2wg
YiwgYm9vbCBtYXJrUGFyZW50cykKIHsKLSAgICBib29sIGFscmVhZHlEaXJ0eSA9IG1fcHJlZldp
ZHRoc0RpcnR5OwotICAgIG1fcHJlZldpZHRoc0RpcnR5ID0gYjsKKyAgICBib29sIGFscmVhZHlE
aXJ0eSA9IG1fcHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5OworICAgIG1fcHJlZmVycmVkTG9n
aWNhbFdpZHRoc0RpcnR5ID0gYjsKICAgICBpZiAoYiAmJiAhYWxyZWFkeURpcnR5ICYmIG1hcmtQ
YXJlbnRzICYmIChpc1RleHQoKSB8fCAoc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0
aW9uICYmIHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gQWJzb2x1dGVQb3NpdGlvbikpKQotICAgICAg
ICBpbnZhbGlkYXRlQ29udGFpbmVyUHJlZldpZHRocygpOworICAgICAgICBpbnZhbGlkYXRlQ29u
dGFpbmVyUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6
aW52YWxpZGF0ZUNvbnRhaW5lclByZWZXaWR0aHMoKQordm9pZCBSZW5kZXJPYmplY3Q6OmludmFs
aWRhdGVDb250YWluZXJQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKICAgICAvLyBJbiBvcmRl
ciB0byBhdm9pZCBwYXRob2xvZ2ljYWwgYmVoYXZpb3Igd2hlbiBpbmxpbmVzIGFyZSBkZWVwbHkg
bmVzdGVkLCB3ZSBkbyBpbmNsdWRlIHRoZW0KICAgICAvLyBpbiB0aGUgY2hhaW4gdGhhdCB3ZSBt
YXJrIGRpcnR5IChldmVuIHRob3VnaCB0aGV5J3JlIGtpbmQgb2YgaXJyZWxldmFudCkuCiAgICAg
UmVuZGVyT2JqZWN0KiBvID0gaXNUYWJsZUNlbGwoKSA/IGNvbnRhaW5pbmdCbG9jaygpIDogY29u
dGFpbmVyKCk7Ci0gICAgd2hpbGUgKG8gJiYgIW8tPm1fcHJlZldpZHRoc0RpcnR5KSB7CisgICAg
d2hpbGUgKG8gJiYgIW8tPm1fcHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KSB7CiAgICAgICAg
IC8vIERvbid0IGludmFsaWRhdGUgdGhlIG91dGVybW9zdCBvYmplY3Qgb2YgYW4gdW5yb290ZWQg
c3VidHJlZS4gVGhhdCBvYmplY3Qgd2lsbCBiZSAKICAgICAgICAgLy8gaW52YWxpZGF0ZWQgd2hl
biB0aGUgc3VidHJlZSBpcyBhZGRlZCB0byB0aGUgZG9jdW1lbnQuCiAgICAgICAgIFJlbmRlck9i
amVjdCogY29udGFpbmVyID0gby0+aXNUYWJsZUNlbGwoKSA/IG8tPmNvbnRhaW5pbmdCbG9jaygp
IDogby0+Y29udGFpbmVyKCk7CiAgICAgICAgIGlmICghY29udGFpbmVyICYmICFvLT5pc1JlbmRl
clZpZXcoKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG8tPm1fcHJlZldpZHRoc0Rp
cnR5ID0gdHJ1ZTsKKyAgICAgICAgby0+bV9wcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkgPSB0
cnVlOwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9u
IHx8IG8tPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikKICAgICAgICAg
ICAgIC8vIEEgcG9zaXRpb25lZCBvYmplY3QgaGFzIG5vIGVmZmVjdCBvbiB0aGUgbWluL21heCB3
aWR0aCBvZiBpdHMgY29udGFpbmluZyBibG9jayBldmVyLgogICAgICAgICAgICAgLy8gV2UgY2Fu
IG9wdGltaXplIHRoaXMgY2FzZSBhbmQgbm90IGdvIHVwIGFueSBmdXJ0aGVyLgpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDY4MjM5KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw3ICszOTQsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBwb3NDaGlsZE5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9wb3ND
aGlsZE5lZWRzTGF5b3V0OyB9CiAgICAgYm9vbCBub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkgY29u
c3QgeyByZXR1cm4gbV9ub3JtYWxDaGlsZE5lZWRzTGF5b3V0OyB9CiAgICAgCi0gICAgYm9vbCBw
cmVmV2lkdGhzRGlydHkoKSBjb25zdCB7IHJldHVybiBtX3ByZWZXaWR0aHNEaXJ0eTsgfQorICAg
IGJvb2wgcHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzRGlydHk7IH0KIAogICAgIGJvb2wgaXNTZWxlY3Rpb25Cb3JkZXIo
KSBjb25zdDsKIApAQCAtNDU1LDEzICs0NTUsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVl
ZHNMYXlvdXQoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzID0gdHJ1ZSk7CiAgICAgdm9pZCBzZXRD
aGlsZE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cyA9IHRydWUpOwogICAgIHZv
aWQgc2V0TmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKTsKLSAgICB2b2lkIHNldFByZWZX
aWR0aHNEaXJ0eShib29sLCBib29sIG1hcmtQYXJlbnRzID0gdHJ1ZSk7Ci0gICAgdm9pZCBpbnZh
bGlkYXRlQ29udGFpbmVyUHJlZldpZHRocygpOworICAgIHZvaWQgc2V0UHJlZmVycmVkTG9naWNh
bFdpZHRoc0RpcnR5KGJvb2wsIGJvb2wgbWFya1BhcmVudHMgPSB0cnVlKTsKKyAgICB2b2lkIGlu
dmFsaWRhdGVDb250YWluZXJQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgCiAgICAgdm9p
ZCBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKQogICAgIHsKICAgICAgICAgc2V0
TmVlZHNMYXlvdXQodHJ1ZSk7Ci0gICAgICAgIHNldFByZWZXaWR0aHNEaXJ0eSh0cnVlKTsKKyAg
ICAgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KHRydWUpOwogICAgIH0KIAogICAg
IHZvaWQgc2V0UG9zaXRpb25lZChib29sIGIgPSB0cnVlKSAgeyBtX3Bvc2l0aW9uZWQgPSBiOyAg
fQpAQCAtNTYxLDggKzU2MSw4IEBAIHB1YmxpYzoKICAgICAvLyB0aGUgcmVjdCB0aGF0IHdpbGwg
YmUgcGFpbnRlZCBpZiB0aGlzIG9iamVjdCBpcyBwYXNzZWQgYXMgdGhlIHBhaW50aW5nUm9vdAog
ICAgIEludFJlY3QgcGFpbnRpbmdSb290UmVjdChJbnRSZWN0JiB0b3BMZXZlbFJlY3QpOwogCi0g
ICAgdmlydHVhbCBpbnQgbWluUHJlZldpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgaW50IG1heFByZWZXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IGludCBtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBpbnQgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsg
fQogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQo
KTsgfQogICAgIFJlbmRlclN0eWxlKiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGRv
Y3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpID8gZmlyc3RMaW5lU3R5bGVTbG93Q2FzZSgp
IDogc3R5bGUoKTsgfQpAQCAtODEyLDcgKzgxMiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25l
ZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0IDoxOwogICAgIGJvb2wgbV9ub3JtYWxDaGlsZE5l
ZWRzTGF5b3V0ICAgIDogMTsKICAgICBib29sIG1fcG9zQ2hpbGROZWVkc0xheW91dCAgICAgICA6
IDE7Ci0gICAgYm9vbCBtX3ByZWZXaWR0aHNEaXJ0eSAgICAgICAgICAgOiAxOworICAgIGJvb2wg
bV9wcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkgICAgICAgICAgIDogMTsKICAgICBib29sIG1f
ZmxvYXRpbmcgICAgICAgICAgICAgICAgICA6IDE7CiAKICAgICBib29sIG1fcG9zaXRpb25lZCAg
ICAgICAgICAgICAgICA6IDE7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3Bw
CShyZXZpc2lvbiA2ODIzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDI0ICsyNTcsMjQgQEAgaW50IFJlbmRlclJlcGxhY2Vk
OjpjYWxjQXNwZWN0UmF0aW9IZWlnaAogICAgIHJldHVybiBSZW5kZXJCb3g6OmNvbXB1dGVSZXBs
YWNlZFdpZHRoKCkgKiBpbnRyaW5zaWNIZWlnaHQgLyBpbnRyaW5zaWNXaWR0aDsKIH0KIAotdm9p
ZCBSZW5kZXJSZXBsYWNlZDo6Y2FsY1ByZWZXaWR0aHMoKQordm9pZCBSZW5kZXJSZXBsYWNlZDo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogewotICAgIEFTU0VSVChwcmVmV2lkdGhz
RGlydHkoKSk7CisgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAog
ICAgIGludCBib3JkZXJBbmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAg
bV9tYXhQcmVmV2lkdGggPSBjb21wdXRlUmVwbGFjZWRXaWR0aChmYWxzZSkgKyBib3JkZXJBbmRQ
YWRkaW5nOworICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gY29tcHV0ZVJlcGxhY2Vk
V2lkdGgoZmFsc2UpICsgYm9yZGVyQW5kUGFkZGluZzsKIAogICAgIGlmIChzdHlsZSgpLT5tYXhX
aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZp
bmVkTGVuZ3RoKQotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1pbihtX21heFByZWZXaWR0aCwg
c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENP
TlRFTlRfQk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IDApKTsKKyAgICAgICAgbV9tYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIHN0eWxlKCkt
Pm1heFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JP
WCA/IGJvcmRlckFuZFBhZGRpbmcgOiAwKSk7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5p
c1BlcmNlbnQoKSB8fCBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKQogICAgICAgICB8fCBz
dHlsZSgpLT5tYXhXaWR0aCgpLmlzUGVyY2VudCgpIHx8IHN0eWxlKCktPm1heEhlaWdodCgpLmlz
UGVyY2VudCgpCiAgICAgICAgIHx8IHN0eWxlKCktPm1pbldpZHRoKCkuaXNQZXJjZW50KCkgfHwg
c3R5bGUoKS0+bWluSGVpZ2h0KCkuaXNQZXJjZW50KCkpCi0gICAgICAgIG1fbWluUHJlZldpZHRo
ID0gMDsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOwogICAgIGVsc2UK
LSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aDsKKyAgICAgICAgbV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aDsKIAotICAg
IHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CisgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRo
c0RpcnR5KGZhbHNlKTsKIH0KIAogaW50IFJlbmRlclJlcGxhY2VkOjpsaW5lSGVpZ2h0KGJvb2ws
IGJvb2wpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHJldmlzaW9u
IDY4MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50IGxpbmVIZWln
aHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9v
dExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0
aHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsK
IAogICAgIGludCBjYWxjQXNwZWN0UmF0aW9XaWR0aCgpIGNvbnN0OwogICAgIGludCBjYWxjQXNw
ZWN0UmF0aW9IZWlnaHQoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
cGxpY2EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2Eu
Y3BwCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2Eu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMSArNTIsMTEgQEAgdm9pZCBSZW5kZXJSZXBsaWNh
OjpsYXlvdXQoKQogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJS
ZXBsaWNhOjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlclJlcGxpY2E6OmNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKLSAgICBtX21pblByZWZXaWR0aCA9IHBhcmVudEJveCgp
LT53aWR0aCgpOwotICAgIG1fbWF4UHJlZldpZHRoID0gbV9taW5QcmVmV2lkdGg7Ci0gICAgc2V0
UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IHBhcmVudEJveCgpLT53aWR0aCgpOworICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGg7CisgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRo
c0RpcnR5KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJSZXBsaWNhOjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsaWNhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGlj
YS5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2Eu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAg
dmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDY4MjM5KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYz
LDkgQEAgaW50IFJlbmRlclNWR1Jvb3Q6OmJhc2VsaW5lUG9zaXRpb24oYm9vbAogICAgIHJldHVy
biBoZWlnaHQoKSArIG1hcmdpblRvcCgpICsgbWFyZ2luQm90dG9tKCk7CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHUm9vdDo6Y2FsY1ByZWZXaWR0aHMoKQordm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocygpCiB7Ci0gICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgp
KTsKKyAgICBBU1NFUlQocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpOwogCiAgICAgaW50
IGJvcmRlckFuZFBhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKICAgICBpbnQgd2lk
dGggPSBjb21wdXRlUmVwbGFjZWRXaWR0aChmYWxzZSkgKyBib3JkZXJBbmRQYWRkaW5nOwpAQCAt
NzQsMTIgKzc0LDEyIEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6Y2FsY1ByZWZXaWR0aHMoKQogICAg
ICAgICB3aWR0aCA9IG1pbih3aWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0
eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IDAp
KTsKIAogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53
aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkgewotICAg
ICAgICBtX21pblByZWZXaWR0aCA9IDA7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gd2lkdGg7
CisgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gMDsKKyAgICAgICAgbV9tYXhQ
cmVmZXJyZWRMb2dpY2FsV2lkdGggPSB3aWR0aDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9taW5Q
cmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IHdpZHRoOworICAgICAgICBtX21pblByZWZlcnJl
ZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gd2lkdGg7CiAKLSAg
ICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOworICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0
aHNEaXJ0eShmYWxzZSk7CiB9CiAKIGludCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRX
aWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSb290LmgJKHJldmlzaW9uIDY4MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
Um9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2Up
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBiLCBib29sIGlz
Um9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lk
dGhzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7
CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lk
dGggPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRIZWlnaHQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAkocmV2aXNpb24gNjgxNzQpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0
LDE0ICsxMTQsMTQgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0Ojpjb21wdXRlU2Nyb2xsYgog
ICAgIG1fbWFyZ2luQm90dG9tID0gc3R5bGUoKS0+bWFyZ2luQm90dG9tKCkuY2FsY01pblZhbHVl
KHZpc2libGVTaXplKTsKIH0KIAotdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpjYWxjUHJlZldp
ZHRocygpCit2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKCkKIHsKLSAgICBpZiAoIXByZWZXaWR0aHNEaXJ0eSgpKQorICAgIGlmICghcHJlZmVy
cmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX21p
blByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gMDsKKyAgICBtX21pblByZWZlcnJlZExvZ2lj
YWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gMDsKIAotICAgIHNldFByZWZX
aWR0aHNEaXJ0eShmYWxzZSk7CisgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGZh
bHNlKTsKIH0KIAogdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpzdHlsZVdpbGxDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmgJKHJldmlzaW9uIDY4MTc0KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgCiAgICAgdm9pZCBwYWludEludG9SZWN0
KEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0Jik7CiAgICAg
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHJldmlzaW9uIDY4MjM5KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYw
LDM0ICsxNjAsMzQgQEAgaW50IFJlbmRlclNsaWRlcjo6YmFzZWxpbmVQb3NpdGlvbihib29sLAog
ICAgIHJldHVybiBoZWlnaHQoKSArIG1hcmdpblRvcCgpOwogfQogCi12b2lkIFJlbmRlclNsaWRl
cjo6Y2FsY1ByZWZXaWR0aHMoKQordm9pZCBSZW5kZXJTbGlkZXI6OmNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKCkKIHsKLSAgICBtX21pblByZWZXaWR0aCA9IDA7Ci0gICAgbV9tYXhQcmVm
V2lkdGggPSAwOworICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gMDsKKyAgICBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5p
c0ZpeGVkKCkgJiYgc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpID4gMCkKLSAgICAgICAgbV9taW5Q
cmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRo
KHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBjb21wdXRlQ29udGVudEJveExv
Z2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAgIGVsc2UKLSAgICAgICAg
bV9tYXhQcmVmV2lkdGggPSBkZWZhdWx0VHJhY2tMZW5ndGggKiBzdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCk7CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gZGVmYXVsdFRyYWNr
TGVuZ3RoICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgaWYgKHN0eWxlKCktPm1p
bldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsK
LSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250
ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAg
ICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hM
b2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkp
KTsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1p
bldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0gZWxzZSBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1Bl
cmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWlnaHQo
KS5pc1BlcmNlbnQoKSkpCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAgICAgICAgbV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOwogICAgIGVsc2UKLSAgICAgICAgbV9taW5QcmVm
V2lkdGggPSBtX21heFByZWZXaWR0aDsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aDsKICAgICAKICAgICBpZiAoc3R5bGUoKS0+
bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVu
ZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1pbihtX21heFByZWZX
aWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52
YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRoLCBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkp
KTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1h
eFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1pbihtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogCiAgICAgaW50IHRv
QWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAgbV9taW5QcmVmV2lkdGggKz0gdG9B
ZGQ7Ci0gICAgbV9tYXhQcmVmV2lkdGggKz0gdG9BZGQ7CisgICAgbV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGggKz0gdG9BZGQ7CisgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gdG9B
ZGQ7CiAKLSAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOyAKKyAgICBzZXRQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOyAKIH0KIAogdm9pZCBSZW5kZXJTbGlkZXI6OnN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAkocmV2aXNpb24gNjgxNzQpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NsaWRl
cigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICB2aXJ0dWFsIGludCBiYXNlbGlu
ZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsY1By
ZWZXaWR0aHMoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAJKHJldmlzaW9uIDY4MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6
Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgaWYgKHdpZHRoVHlwZSA+IFJlbGF0aXZlICYmIHN0
eWxlKCktPndpZHRoKCkuaXNQb3NpdGl2ZSgpKSB7CiAgICAgICAgIC8vIFBlcmNlbnQgb3IgZml4
ZWQgdGFibGUKICAgICAgICAgc2V0V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUo
YXZhaWxhYmxlV2lkdGgpKTsKLSAgICAgICAgc2V0V2lkdGgobWF4KG1pblByZWZXaWR0aCgpLCB3
aWR0aCgpKSk7CisgICAgICAgIHNldFdpZHRoKG1heChtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KSwgd2lkdGgoKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEFuIGF1dG8gd2lkdGggdGFi
bGUgc2hvdWxkIHNocmluayB0byBmaXQgd2l0aGluIHRoZSBsaW5lIHdpZHRoIGlmIG5lY2Vzc2Fy
eSBpbiBvcmRlciB0byAKICAgICAgICAgLy8gYXZvaWQgb3ZlcmxhcHBpbmcgZmxvYXRzLgpAQCAt
MjIzLDEwICsyMjMsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgp
CiAgICAgICAgIGludCBhdmFpbENvbnRlbnRXaWR0aCA9IG1heCgwLCBhdmFpbGFibGVXaWR0aCAt
IG1hcmdpblRvdGFsKTsKICAgICAgICAgCiAgICAgICAgIC8vIEVuc3VyZSB3ZSBhcmVuJ3QgYmln
Z2VyIHRoYW4gb3VyIG1heCB3aWR0aCBvciBzbWFsbGVyIHRoYW4gb3VyIG1pbiB3aWR0aC4KLSAg
ICAgICAgc2V0V2lkdGgobWluKGF2YWlsQ29udGVudFdpZHRoLCBtYXhQcmVmV2lkdGgoKSkpOwor
ICAgICAgICBzZXRXaWR0aChtaW4oYXZhaWxDb250ZW50V2lkdGgsIG1heFByZWZlcnJlZExvZ2lj
YWxXaWR0aCgpKSk7CiAgICAgfQogICAgIAotICAgIHNldFdpZHRoKG1heCh3aWR0aCgpLCBtaW5Q
cmVmV2lkdGgoKSkpOworICAgIHNldFdpZHRoKG1heCh3aWR0aCgpLCBtaW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKSkpOwogCiAgICAgLy8gRmluYWxseSwgd2l0aCBvdXIgdHJ1ZSB3aWR0aCBkZXRl
cm1pbmVkLCBjb21wdXRlIG91ciBtYXJnaW5zIGZvciByZWFsLgogICAgIG1fbWFyZ2luUmlnaHQg
PSAwOwpAQCAtNTMzLDE5ICs1MzMsMTkgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnRNYXNrKFBh
aW50SW5mbyYgcAogICAgIHBhaW50TWFza0ltYWdlcyhwYWludEluZm8sIHR4LCB0eSwgdywgaCk7
CiB9CiAKLXZvaWQgUmVuZGVyVGFibGU6OmNhbGNQcmVmV2lkdGhzKCkKK3ZvaWQgUmVuZGVyVGFi
bGU6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQocHJlZldp
ZHRoc0RpcnR5KCkpOworICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7
CiAKICAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAgICAgcmVjYWxjSG9yaXpvbnRhbEJv
cmRlcnMoKTsKIAotICAgIG1fdGFibGVMYXlvdXQtPmNhbGNQcmVmV2lkdGhzKG1fbWluUHJlZldp
ZHRoLCBtX21heFByZWZXaWR0aCk7CisgICAgbV90YWJsZUxheW91dC0+Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMobV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIG1fbWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoKTsKIAogICAgIGlmIChtX2NhcHRpb24pCi0gICAgICAgIG1fbWluUHJlZldp
ZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBtX2NhcHRpb24tPm1pblByZWZXaWR0aCgpKTsKKyAg
ICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGgsIG1fY2FwdGlvbi0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkpOwogCi0gICAg
c2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
RGlydHkoZmFsc2UpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlOjpzcGxpdENvbHVtbihpbnQgcG9z
LCBpbnQgZmlyc3RTcGFuKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCShyZXZpc2lvbiA2
ODIzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2MCw3ICsxNjAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERl
Y29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRNYXNrKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4
UG9zLCBpbnQgeVBvcywgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogICAgIAogICAg
IHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3Q7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDY4MjM4KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDE0ICsx
MjIsMTQgQEAgTGVuZ3RoIFJlbmRlclRhYmxlQ2VsbDo6c3R5bGVPckNvbFdpZHRoKAogICAgIHJl
dHVybiB3OwogfQogCi12b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y2FsY1ByZWZXaWR0aHMoKQordm9p
ZCBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKLSAg
ICAvLyBUaGUgY2hpbGQgY2VsbHMgcmVseSBvbiB0aGUgZ3JpZHMgdXAgaW4gdGhlIHNlY3Rpb25z
IHRvIGRvIHRoZWlyIGNhbGNQcmVmV2lkdGhzIHdvcmsuICBOb3JtYWxseSB0aGUgc2VjdGlvbnMg
YXJlIHNldCB1cCBlYXJseSwgYXMgdGFibGUKKyAgICAvLyBUaGUgY2hpbGQgY2VsbHMgcmVseSBv
biB0aGUgZ3JpZHMgdXAgaW4gdGhlIHNlY3Rpb25zIHRvIGRvIHRoZWlyIGNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzIHdvcmsuICBOb3JtYWxseSB0aGUgc2VjdGlvbnMgYXJlIHNldCB1cCBl
YXJseSwgYXMgdGFibGUKICAgICAvLyBjZWxscyBhcmUgYWRkZWQsIGJ1dCByZWxheW91dCBjYW4g
Y2F1c2UgdGhlIGNlbGxzIHRvIGJlIGZyZWVkLCBsZWF2aW5nIHN0YWxlIHBvaW50ZXJzIGluIHRo
ZSBzZWN0aW9ucycKICAgICAvLyBncmlkcy4gIFdlIG11c3QgcmVmcmVzaCB0aG9zZSBncmlkcyBi
ZWZvcmUgdGhlIGNoaWxkIGNlbGxzIHRyeSB0byB1c2UgdGhlbS4KICAgICB0YWJsZSgpLT5yZWNh
bGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAKLSAgICBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMo
KTsKKyAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAg
ICBpZiAobm9kZSgpICYmIHN0eWxlKCktPmF1dG9XcmFwKCkpIHsKICAgICAgICAgLy8gU2VlIGlm
IG5vd3JhcCB3YXMgc2V0LgogICAgICAgICBMZW5ndGggdyA9IHN0eWxlT3JDb2xXaWR0aCgpOwpA
QCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjYWxjUHJlZldpZHRocygp
CiAgICAgICAgICAgICAvLyB0byBtYWtlIHRoZSBtaW53aWR0aCBvZiB0aGUgY2VsbCBpbnRvIHRo
ZSBmaXhlZCB3aWR0aC4gIFRoZXkgZG8gdGhpcwogICAgICAgICAgICAgLy8gZXZlbiBpbiBzdHJp
Y3QgbW9kZSwgc28gZG8gbm90IG1ha2UgdGhpcyBhIHF1aXJrLiAgQWZmZWN0ZWQgdGhlIHRvcAog
ICAgICAgICAgICAgLy8gb2YgaGlwdG9wLmNvbS4KLSAgICAgICAgICAgIG1fbWluUHJlZldpZHRo
ID0gbWF4KHcudmFsdWUoKSwgbV9taW5QcmVmV2lkdGgpOworICAgICAgICAgICAgbV9taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgody52YWx1ZSgpLCBtX21pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAko
cmV2aXNpb24gNjgyMzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAko
d29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBMZW5ndGggc3R5
bGVPckNvbFdpZHRoKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIAog
ICAgIHZvaWQgdXBkYXRlV2lkdGgoaW50KTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ29sLmNwcAkocmV2aXNpb24gNjgxNzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEyICs4OCwxMiBAQCB2b2lkIFJlbmRl
clRhYmxlQ29sOjppbWFnZUNoYW5nZWQoV3JhcHBlCiAgICAgcmVwYWludCgpOwogfQogCi12b2lk
IFJlbmRlclRhYmxlQ29sOjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlclRhYmxlQ29sOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiB7Ci0gICAgc2V0UHJlZldpZHRoc0RpcnR5
KGZhbHNlKTsKKyAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwogCiAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnNldFByZWZXaWR0aHNEaXJ0
eShmYWxzZSk7CisgICAgICAgIGNoaWxkLT5zZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHko
ZmFsc2UpOwogfQogCiBSZW5kZXJUYWJsZSogUmVuZGVyVGFibGVDb2w6OnRhYmxlKCkgY29uc3QK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAkocmV2aXNpb24gNjgxNzQpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3
ICszOSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KICAgICBSZW5kZXJPYmplY3RDaGls
ZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KIAotICAgIHZpcnR1YWwg
dm9pZCBjYWxjUHJlZldpZHRocygpOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocygpOwogCiAgICAgaW50IHNwYW4oKSBjb25zdCB7IHJldHVybiBtX3NwYW47
IH0KICAgICB2b2lkIHNldFNwYW4oaW50IHNwYW4pIHsgbV9zcGFuID0gc3BhbjsgfQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDY4MTc3KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MSw4ICs1ODEsOCBAQCB2
b2lkIFJlbmRlclRleHQ6OnRyaW1tZWRQcmVmV2lkdGhzKGludCBsCiAgICAgaWYgKCFjb2xsYXBz
ZVdoaXRlU3BhY2UpCiAgICAgICAgIHN0cmlwRnJvbnRTcGFjZXMgPSBmYWxzZTsKIAotICAgIGlm
IChtX2hhc1RhYiB8fCBwcmVmV2lkdGhzRGlydHkoKSkKLSAgICAgICAgY2FsY1ByZWZXaWR0aHMo
bGVhZFdpZHRoKTsKKyAgICBpZiAobV9oYXNUYWIgfHwgcHJlZmVycmVkTG9naWNhbFdpZHRoc0Rp
cnR5KCkpCisgICAgICAgIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGxlYWRXaWR0aCk7
CiAKICAgICBiZWdpbldTID0gIXN0cmlwRnJvbnRTcGFjZXMgJiYgbV9oYXNCZWdpbldTOwogICAg
IGVuZFdTID0gbV9oYXNFbmRXUzsKQEAgLTY2NCwzNCArNjY0LDM0IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NwYWNlQWNjb3JkaW5nVG9TdHkKICAgICByZXR1cm4gYyA9PSAnICcgfHwgKGMgPT0g
bm9CcmVha1NwYWNlICYmIHN0eWxlLT5uYnNwTW9kZSgpID09IFNQQUNFKTsKIH0KIAotaW50IFJl
bmRlclRleHQ6Om1pblByZWZXaWR0aCgpIGNvbnN0CitpbnQgUmVuZGVyVGV4dDo6bWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoKCkgY29uc3QKIHsKLSAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkpCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyVGV4dCo+KHRoaXMpLT5jYWxjUHJlZldpZHRocygwKTsK
KyAgICBpZiAocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpCisgICAgICAgIGNvbnN0X2Nh
c3Q8UmVuZGVyVGV4dCo+KHRoaXMpLT5jb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygwKTsK
ICAgICAgICAgCiAgICAgcmV0dXJuIG1fbWluV2lkdGg7CiB9CiAKLWludCBSZW5kZXJUZXh0Ojpt
YXhQcmVmV2lkdGgoKSBjb25zdAoraW50IFJlbmRlclRleHQ6Om1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQotICAgICAgICBjb25z
dF9jYXN0PFJlbmRlclRleHQqPih0aGlzKS0+Y2FsY1ByZWZXaWR0aHMoMCk7CisgICAgaWYgKHBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlclRl
eHQqPih0aGlzKS0+Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoMCk7CiAgICAgICAgIAog
ICAgIHJldHVybiBtX21heFdpZHRoOwogfQogCi12b2lkIFJlbmRlclRleHQ6OmNhbGNQcmVmV2lk
dGhzKGludCBsZWFkV2lkdGgpCit2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKGludCBsZWFkV2lkdGgpCiB7CiAgICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+IGZhbGxiYWNrRm9udHM7CiAgICAgR2x5cGhPdmVyZmxvdyBnbHlwaE92ZXJmbG93Owot
ICAgIGNhbGNQcmVmV2lkdGhzKGxlYWRXaWR0aCwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxv
dyk7CisgICAgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMobGVhZFdpZHRoLCBmYWxsYmFj
a0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBpZiAoZmFsbGJhY2tGb250cy5pc0VtcHR5KCkg
JiYgIWdseXBoT3ZlcmZsb3cubGVmdCAmJiAhZ2x5cGhPdmVyZmxvdy5yaWdodCAmJiAhZ2x5cGhP
dmVyZmxvdy50b3AgJiYgIWdseXBoT3ZlcmZsb3cuYm90dG9tKQogICAgICAgICBtX2tub3duVG9I
YXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyA9IHRydWU7CiB9CiAKLXZvaWQgUmVuZGVy
VGV4dDo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQor
dm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhpbnQgbGVhZFdp
ZHRoLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBo
T3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCiB7Ci0gICAgQVNTRVJUKG1faGFzVGFiIHx8IHByZWZX
aWR0aHNEaXJ0eSgpIHx8ICFtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250
cyk7CisgICAgQVNTRVJUKG1faGFzVGFiIHx8IHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgp
IHx8ICFtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyk7CiAKICAgICBt
X21pbldpZHRoID0gMDsKICAgICBtX2JlZ2luTWluV2lkdGggPSAwOwpAQCAtODc3LDcgKzg3Nyw3
IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWQKICAgICAgICAgbV9l
bmRNaW5XaWR0aCA9IGN1cnJNYXhXaWR0aDsKICAgICB9CiAKLSAgICBzZXRQcmVmV2lkdGhzRGly
dHkoZmFsc2UpOworICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGV4dDo6aXNBbGxDb2xsYXBzaWJsZVdoaXRlc3BhY2UoKQpAQCAtMTI0
OSwxNCArMTI0OSwxNCBAQCB1bnNpZ25lZCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9t
CiAgICAgICAgIGlmICghc3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgIWZyb20gJiYgbGVu
ID09IHRleHRMZW5ndGgoKSkgewogICAgICAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMpIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoZ2x5cGhPdmVyZmxvdyk7Ci0gICAgICAgICAgICAgICAgaWYg
KHByZWZXaWR0aHNEaXJ0eSgpIHx8ICFtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJh
Y2tGb250cykgewotICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRlclRleHQqPih0
aGlzKS0+Y2FsY1ByZWZXaWR0aHMoMCwgKmZhbGxiYWNrRm9udHMsICpnbHlwaE92ZXJmbG93KTsK
KyAgICAgICAgICAgICAgICBpZiAocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkgfHwgIW1f
a25vd25Ub0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyVGV4dCo+KHRoaXMpLT5jb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocygwLCAqZmFsbGJhY2tGb250cywgKmdseXBoT3ZlcmZsb3cpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoZmFsbGJhY2tGb250cy0+aXNFbXB0eSgpICYmICFnbHlwaE92ZXJmbG93
LT5sZWZ0ICYmICFnbHlwaE92ZXJmbG93LT5yaWdodCAmJiAhZ2x5cGhPdmVyZmxvdy0+dG9wICYm
ICFnbHlwaE92ZXJmbG93LT5ib3R0b20pCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2tub3du
VG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIHcgPSBtX21heFdpZHRoOwogICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgdyA9IG1heFByZWZXaWR0aCgpOworICAgICAgICAgICAgICAgIHcg
PSBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICB3ID0gd2lkdGhGcm9tQ2FjaGUoZiwgZnJvbSwgbGVuLCB4UG9zLCBmYWxsYmFja0ZvbnRzLCBn
bHlwaE92ZXJmbG93KTsKICAgICB9IGVsc2UKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJl
dmlzaW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Niw4ICs3Niw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgaW50IGxpbmVI
ZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgaW50IG1pblByZWZXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50
IG1heFByZWZXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IG1pblByZWZlcnJlZExvZ2lj
YWxXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IG1heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCgpIGNvbnN0OwogCiAgICAgdm9pZCB0cmltbWVkUHJlZldpZHRocyhpbnQgbGVhZFdpZHRoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBiZWdpbk1pblcsIGJvb2wmIGJlZ2luV1Ms
CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0
aCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGludCBs
ZWFkV2lkdGgpOwogICAgIGJvb2wgaXNBbGxDb2xsYXBzaWJsZVdoaXRlc3BhY2UoKTsKICAgICAK
IHByb3RlY3RlZDoKQEAgLTEzNyw3ICsxMzcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBJ
bmxpbmVUZXh0Qm94KiBjcmVhdGVUZXh0Qm94KCk7IC8vIFN1YmNsYXNzZWQgYnkgU1ZHLgogCiBw
cml2YXRlOgotICAgIHZvaWQgY2FsY1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7Cisg
ICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhpbnQgbGVhZFdpZHRoLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cm
KTsKIAogICAgIC8vIE1ha2UgbGVuZ3RoKCkgcHJpdmF0ZSBzbyB0aGF0IGNhbGxlcnMgdGhhdCBo
YXZlIGEgUmVuZGVyVGV4dCoKICAgICAvLyB3aWxsIHVzZSB0aGUgbW9yZSBlZmZpY2llbnQgdGV4
dExlbmd0aCgpIGluc3RlYWQsIHdoaWxlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwCShyZXZpc2lvbiA2ODIzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDQwICs1MDQsNDAgQEAgZmxv
YXQgUmVuZGVyVGV4dENvbnRyb2w6OnNjYWxlRW1Ub1VuaXRzKAogICAgIHJldHVybiByb3VuZGYo
c3R5bGUoKS0+Zm9udCgpLnNpemUoKSAqIHggLyB1bml0c1BlckVtKTsKIH0KIAotdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbDo6Y2FsY1ByZWZXaWR0aHMoKQordm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogewotICAgIEFTU0VSVChwcmVmV2lkdGhz
RGlydHkoKSk7CisgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAot
ICAgIG1fbWluUHJlZldpZHRoID0gMDsKLSAgICBtX21heFByZWZXaWR0aCA9IDA7CisgICAgbV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOworICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoID0gMDsKIAogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgp
LT53aWR0aCgpLnZhbHVlKCkgPiAwKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJl
ZldpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52
YWx1ZSgpKTsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCkt
PndpZHRoKCkudmFsdWUoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFVzZSBhdmVyYWdlIGNo
YXJhY3RlciB3aWR0aC4gTWF0Y2hlcyBJRS4KICAgICAgICAgQXRvbWljU3RyaW5nIGZhbWlseSA9
IHN0eWxlKCktPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKTsKLSAgICAgICAgbV9tYXhQcmVmV2lk
dGggPSBwcmVmZXJyZWRDb250ZW50V2lkdGgoZ2V0QXZnQ2hhcldpZHRoKGZhbWlseSkpICsgbV9p
bm5lclRleHQtPnJlbmRlckJveCgpLT5wYWRkaW5nTGVmdCgpICsgbV9pbm5lclRleHQtPnJlbmRl
ckJveCgpLT5wYWRkaW5nUmlnaHQoKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSBwcmVmZXJyZWRDb250ZW50V2lkdGgoZ2V0QXZnQ2hhcldpZHRoKGZhbWlseSkpICsgbV9p
bm5lclRleHQtPnJlbmRlckJveCgpLT5wYWRkaW5nTGVmdCgpICsgbV9pbm5lclRleHQtPnJlbmRl
ckJveCgpLT5wYWRkaW5nUmlnaHQoKTsKICAgICB9CiAKICAgICBpZiAoc3R5bGUoKS0+bWluV2lk
dGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpID4gMCkgewotICAg
ICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRC
b3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1f
bWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2lj
YWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1
dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwor
ICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChtX21pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lk
dGgoKS52YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2Vu
dCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdodCgpLmlz
UGVyY2VudCgpKSkKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOworICAgICAgICBtX21pblBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CiAgICAgZWxzZQotICAgICAgICBtX21pblByZWZXaWR0
aCA9IG1fbWF4UHJlZldpZHRoOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoOwogCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRo
KCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRM
ZW5ndGgpIHsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNv
bXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkp
OwotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY29tcHV0ZUNv
bnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAg
ICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgp
LnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0
eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAogICAgIGludCB0b0FkZCA9IGJv
cmRlckFuZFBhZGRpbmdXaWR0aCgpOwogCi0gICAgbV9taW5QcmVmV2lkdGggKz0gdG9BZGQ7Ci0g
ICAgbV9tYXhQcmVmV2lkdGggKz0gdG9BZGQ7CisgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGggKz0gdG9BZGQ7CisgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CiAK
LSAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOworICAgIHNldFByZWZlcnJlZExvZ2ljYWxX
aWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdGlv
bkNoYW5nZWQoYm9vbCB1c2VyVHJpZ2dlcmVkKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5oCShyZXZpc2lvbiA2ODIzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHJvdGVjdGVk
OgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7
IHJldHVybiAiUmVuZGVyVGV4dENvbnRyb2wiOyB9CiAgICAgdmlydHVhbCBib29sIGlzVGV4dENv
bnRyb2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVm
V2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2soUmVuZGVy
QmxvY2sqKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgYXZvaWRzRmxvYXRzKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA2ODIzOCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
OSw3ICs1NTksNyBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyCiAg
ICAgICAgICAgICAgICAgICBjYW5jZWxSZW5kZXJlci0+cGFkZGluZ0xlZnQoKSArIGNhbmNlbFJl
bmRlcmVyLT5wYWRkaW5nUmlnaHQoKTsKIAogICAgIGlmIChSZW5kZXJCb3gqIHNwaW5SZW5kZXJl
ciA9IG1faW5uZXJTcGluQnV0dG9uID8gbV9pbm5lclNwaW5CdXR0b24tPnJlbmRlckJveCgpIDog
MCkKLSAgICAgICAgcmVzdWx0ICs9IHNwaW5SZW5kZXJlci0+bWluUHJlZldpZHRoKCk7CisgICAg
ICAgIHJlc3VsdCArPSBzcGluUmVuZGVyZXItPm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwog
CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBpZiAoUmVuZGVyQm94KiBzcGVlY2hSZW5k
ZXJlciA9IG1fc3BlZWNoQnV0dG9uID8gbV9zcGVlY2hCdXR0b24tPnJlbmRlckJveCgpIDogMCkg
ewpAQCAtNTc1LDcgKzU3NSw3IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBy
ZWZlcnIKICAgICBpbnQgd2lkdGggPSAwOwogICAgIGlmIChSZW5kZXJCb3gqIHNwaW5SZW5kZXJl
ciA9IG1fb3V0ZXJTcGluQnV0dG9uID8gbV9vdXRlclNwaW5CdXR0b24tPnJlbmRlckJveCgpIDog
MCkgewogICAgICAgICBzcGluUmVuZGVyZXItPmNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKLSAgICAg
ICAgd2lkdGggKz0gc3BpblJlbmRlcmVyLT5taW5QcmVmV2lkdGgoKSArIHNwaW5SZW5kZXJlci0+
bWFyZ2luTGVmdCgpICsgc3BpblJlbmRlcmVyLT5tYXJnaW5SaWdodCgpOworICAgICAgICB3aWR0
aCArPSBzcGluUmVuZGVyZXItPm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgc3BpblJlbmRl
cmVyLT5tYXJnaW5MZWZ0KCkgKyBzcGluUmVuZGVyZXItPm1hcmdpblJpZ2h0KCk7CiAgICAgfQog
ICAgIGlmICh3aWR0aCA+IDApCiAgICAgICAgIHdpZHRoICs9IHBhZGRpbmdSaWdodCgpICsgYm9y
ZGVyUmlnaHQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJKHJldmlzaW9uIDY4
MjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgUmVuZGVyVmlkZW86OnVwZGF0ZUludHJpbnNpY1NpemUo
KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJbnRyaW5zaWNTaXplKHNpemUpOwotICAgIHNl
dFByZWZXaWR0aHNEaXJ0eSh0cnVlKTsKKyAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGly
dHkodHJ1ZSk7CiAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAgICAgCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gNjgyMzgpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEwIEBAIFJlbmRl
clZpZXc6OlJlbmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWUKICAgICAvLyBpbml0IFJlbmRlck9i
amVjdCBhdHRyaWJ1dGVzCiAgICAgc2V0SW5saW5lKGZhbHNlKTsKICAgICAKLSAgICBtX21pblBy
ZWZXaWR0aCA9IDA7Ci0gICAgbV9tYXhQcmVmV2lkdGggPSAwOworICAgIG1fbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoID0gMDsKKyAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CiAK
LSAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSwgZmFsc2UpOworICAgIHNldFByZWZlcnJlZExv
Z2ljYWxXaWR0aHNEaXJ0eSh0cnVlLCBmYWxzZSk7CiAgICAgCiAgICAgc2V0UG9zaXRpb25lZCh0
cnVlKTsgLy8gdG8gMCwwIDopCiB9CkBAIC04NiwxMyArODYsMTMgQEAgdm9pZCBSZW5kZXJWaWV3
Ojpjb21wdXRlTG9naWNhbFdpZHRoKCkKICAgICBtX21hcmdpblJpZ2h0ID0gMDsKIH0KIAotdm9p
ZCBSZW5kZXJWaWV3OjpjYWxjUHJlZldpZHRocygpCit2b2lkIFJlbmRlclZpZXc6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkp
OworICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBSZW5k
ZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMoKTsKIAotICAgIG1fbWF4UHJlZldpZHRoID0gbV9taW5QcmVmV2lk
dGg7CisgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21pblByZWZlcnJlZExvZ2lj
YWxXaWR0aDsKIH0KIAogdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQpAQCAtMTAxLDcgKzEwMSw3
IEBAIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKICAgICAgICAgc2V0UGFnZUhlaWdodCgwKTsK
IAogICAgIGlmIChwcmludGluZygpKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJl
ZldpZHRoID0gd2lkdGgoKTsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBt
X21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHdpZHRoKCk7CiAKICAgICAvLyBVc2UgY2FsY1dp
ZHRoL0hlaWdodCB0byBnZXQgdGhlIG5ldyB3aWR0aC9oZWlnaHQsIHNpbmNlIHRoaXMgd2lsbCB0
YWtlIHRoZSBmdWxsIHBhZ2Ugem9vbSBmYWN0b3IgaW50byBhY2NvdW50LgogICAgIGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiA9ICFwcmludGluZygpICYmICghbV9mcmFtZVZpZXcgfHwgd2lkdGgoKSAh
PSB2aWV3V2lkdGgoKSB8fCBoZWlnaHQoKSAhPSB2aWV3SGVpZ2h0KCkpOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuaAkocmV2aXNpb24gNjgyMzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxXaWR0
aCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodCgpOwotICAgIHZpcnR1
YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocygpOwogCiAgICAgLy8gVGhlIHNhbWUgYXMgdGhlIEZyYW1lVmlldydz
IGxheW91dEhlaWdodC9sYXlvdXRXaWR0aCBidXQgd2l0aCBudWxsIGNoZWNrIGd1YXJkcy4KICAg
ICBpbnQgdmlld0hlaWdodCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVM
YXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9UYWJsZUxheW91dC5oCShy
ZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+VGFibGVM
YXlvdXQoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocyhpbnQmIG1pbldp
ZHRoLCBpbnQmIG1heFdpZHRoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCkgPSAwOwogCiBwcm90ZWN0ZWQ6Cg==
</data>
<flag name="review"
          id="58271"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>