<?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>191915</bug_id>
          
          <creation_ts>2018-11-22 14:42:05 -0800</creation_ts>
          <short_desc>Introduce user-defined literal for LayoutUnit</short_desc>
          <delta_ts>2018-11-23 12:48:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>191538</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ross Kirsling">ross.kirsling</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1481023</commentid>
    <comment_count>0</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-11-22 14:42:05 -0800</bug_when>
    <thetext>Introduce user-defined literal for LayoutUnit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481025</commentid>
    <comment_count>1</comment_count>
      <attachid>355488</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-11-22 14:49:16 -0800</bug_when>
    <thetext>Created attachment 355488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481031</commentid>
    <comment_count>2</comment_count>
      <attachid>355489</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-11-22 15:24:10 -0800</bug_when>
    <thetext>Created attachment 355489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481183</commentid>
    <comment_count>3</comment_count>
      <attachid>355489</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-23 12:47:19 -0800</bug_when>
    <thetext>Comment on attachment 355489
Patch

Clearing flags on attachment: 355489

Committed r238463: &lt;https://trac.webkit.org/changeset/238463&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481184</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-23 12:47:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481185</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-23 12:48:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/46224240&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355488</attachid>
            <date>2018-11-22 14:49:16 -0800</date>
            <delta_ts>2018-11-22 14:54:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191915-20181122144915.patch</filename>
            <type>text/plain</type>
            <size>185913</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4NDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjdlNGI3MWQ3NTExYWQ1
MWFhZWFkMTZkN2ZkYjgzYTBkNDViYTdhNy4uMTAyZmExNzUwNTI0MmQ5MmRlNGUzYjk4YTg5YmU4
NGYwOGJjZTJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDE4LTExLTIyICBSb3Nz
IEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2Ug
dXNlci1kZWZpbmVkIGxpdGVyYWwgZm9yIExheW91dFVuaXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTkxNQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIHVzZXItZGVmaW5lZCBsaXRl
cmFsIGZvciBMYXlvdXRVbml0LCBfbHUsIHJlcGxhY2luZyB0aGUgZXhpc3RpbmcgImZyb21QaXhl
bCIgZmFjdG9yeSBmdW5jdGlvbi4KKworICAgICAgICBVcGRhdGUgYWxsIGluc3RhbmNlcyBvZiBM
YXlvdXRVbml0KCksIExheW91dFVuaXQoMCksIExheW91dFVuaXQgeyAwIH0sIGV0Yy4gYW5kIGFk
ZCBhbnkgb3RoZXIKKyAgICAgICAgbGl0ZXJhbCBjb252ZXJzaW9ucyB0aGF0IHdpbGwgYmUgbmVl
ZGVkIHdoZW4gbWFraW5nIG5vbi1pbnQgTGF5b3V0VW5pdCBjb25zdHJ1Y3RvcnMgZXhwbGljaXQu
CisKKyAgICAgICAgRm9yIGdvb2QgbWVhc3VyZSwgYWxzbyBtYXJrIGFsbCBkZWZhdWx0IHZhbHVl
cyBmb3IgTGF5b3V0VW5pdCBwYXJhbWV0ZXJzLgorCisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAgICAqIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKiBwYWdlL0Zy
YW1lVmlldy5jcHA6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0Lmg6Cisg
ICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9u
Lmg6CisgICAgICAgICogcGxhdGZvcm0vTGF5b3V0VW5pdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9GbGV4aWJsZUJveEFsZ29yaXRobS5jcHA6CisgICAgICAg
ICogcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL0dy
aWRMYXlvdXRGdW5jdGlvbnMuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9HcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG0uY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL0xheW91dFN0YXRlLmg6CisgICAgICAgICogcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25P
ZmZzZXRDYWNoZXMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxl
eGlibGVCb3guY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGli
bGVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRD
b250YWluZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5j
cHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJHcmlkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaXN0TWFya2VyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5GbG93LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1
YnlSdW4uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9UYWJsZUxheW91dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4
dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRTdGF0ZS5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9saW5lL0xpbmVXaWR0aC5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmNwcDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxPcGVyYXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MUGFkZGVkLmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290
LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oOgorICAgICAgICAqIHJl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmg6CisgICAgICAgICogcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxTcGFjZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MVG9rZW4uY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MVG9rZW4uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVy
T3Zlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHA6
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVlLmg6CisKIDIw
MTgtMTEtMjIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZD
XVtJRkNdIE1lcmdlIGFkZE5vbkJyZWFrYWJsZVN0YXJ0L05vbkJyZWFrYWJsZUVuZCBjYWxscy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
LmNwcAppbmRleCAzZGE0MjUzMDBiNDliYzQ4YmEwMTQyM2Y2Y2ExNGE4NTkzYWJmMTUxLi5lNzBh
YzQ1ZjkxZTBkZmIxNGMwZmYyODBkNjBjNWExY2M3MjljZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC00NTgsMTAg
KzQ1OCwxMCBAQCBIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjpvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZQogICAgICAgICAgICAgICAgIG1hcmdp
bkxlZnQgPSBtYXJnaW5SaWdodCA9IG1hcmdpbkxlZnRBbmRSaWdodCAvIDI7ICAKICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBMYXlvdXRVbml0IHsgMCB9OworICAg
ICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gMF9sdTsKICAgICAgICAgICAgICAgICAgICAg
bWFyZ2luUmlnaHQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArICptYXJnaW5MZWZ0
ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9y
ZGVyUmlnaHQgKyAqcmlnaHQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1hcmdpblJpZ2h0ID0gTGF5b3V0VW5pdCB7IDAgfTsKKyAgICAgICAgICAgICAg
ICAgICAgbWFyZ2luUmlnaHQgPSAwX2x1OwogICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xl
ZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICptYXJnaW5SaWdodCAr
ICpyaWdodCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNjU5LDEwICs2
NTksMTAgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWUKICAgICAgICAgICAgIG1hcmdpbkxlZnQg
PSBtYXJnaW5SaWdodCA9IG1hcmdpbkxlZnRBbmRSaWdodCAvIDI7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pIHsKLSAgICAgICAgICAgICAg
ICBtYXJnaW5MZWZ0ID0gTGF5b3V0VW5pdCB7IDAgfTsKKyAgICAgICAgICAgICAgICBtYXJnaW5M
ZWZ0ID0gMF9sdTsKICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IGNvbnRhaW5pbmdCbG9j
a1dpZHRoIC0gKCpsZWZ0ICsgKm1hcmdpbkxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQg
KyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQgPSBMYXlvdXRVbml0IHsg
MCB9OworICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gMF9sdTsKICAgICAgICAgICAgICAg
ICBtYXJnaW5MZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0
ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKm1h
cmdpblJpZ2h0ICsgKnJpZ2h0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtOTAwLDE0
ICs5MDAsMTQgQEAgV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpp
bmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNvbnN0IEwKICAgICAgICAgaWYgKHByZWNvbXB1
dGVkTWFyZ2luUmlnaHQpCiAgICAgICAgICAgICByZXR1cm4gcHJlY29tcHV0ZWRNYXJnaW5SaWdo
dC52YWx1ZSgpOwogICAgICAgICBhdXRvIG1hcmdpblJpZ2h0ID0gY29tcHV0ZWRWYWx1ZUlmTm90
QXV0byhzdHlsZS5tYXJnaW5SaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgICAg
IHJldHVybiBtYXJnaW5SaWdodC52YWx1ZV9vcihMYXlvdXRVbml0IHsgMCB9KTsKKyAgICAgICAg
cmV0dXJuIG1hcmdpblJpZ2h0LnZhbHVlX29yKDBfbHUpOwogICAgIH07CiAKICAgICBhdXRvIGNv
bXB1dGVNYXJnaW5MZWZ0ID0gWyZdKCkgewogICAgICAgICBpZiAocHJlY29tcHV0ZWRNYXJnaW5M
ZWZ0KQogICAgICAgICAgICAgcmV0dXJuIHByZWNvbXB1dGVkTWFyZ2luTGVmdC52YWx1ZSgpOwog
ICAgICAgICBhdXRvIG1hcmdpbkxlZnQgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLm1h
cmdpbkxlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgICAgICByZXR1cm4gbWFyZ2lu
TGVmdC52YWx1ZV9vcihMYXlvdXRVbml0IHsgMCB9KTsKKyAgICAgICAgcmV0dXJuIG1hcmdpbkxl
ZnQudmFsdWVfb3IoMF9sdSk7CiAgICAgfTsKIAogICAgIGF1dG8gcmVwbGFjZWQgPSBsYXlvdXRC
b3gucmVwbGFjZWQoKTsKQEAgLTEwNTIsOCArMTA1Miw4IEBAIEhvcml6b250YWxFZGdlcyBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTm9uQ29sbGFwc2VkSG9yaXpvbnRhbE1h
cmdpCiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKICAgICBhdXRvIGNvbnRh
aW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5
b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKTsKIAotICAgIGF1dG8g
bWFyZ2luTGVmdCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubWFyZ2luTGVmdCgpLCBj
b250YWluaW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoTGF5b3V0VW5pdCB7IDAgfSk7Ci0gICAgYXV0
byBtYXJnaW5SaWdodCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubWFyZ2luUmlnaHQo
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLnZhbHVlX29yKExheW91dFVuaXQgeyAwIH0pOworICAg
IGF1dG8gbWFyZ2luTGVmdCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubWFyZ2luTGVm
dCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoMF9sdSk7CisgICAgYXV0byBtYXJn
aW5SaWdodCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubWFyZ2luUmlnaHQoKSwgY29u
dGFpbmluZ0Jsb2NrV2lkdGgpLnZhbHVlX29yKDBfbHUpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFN
KEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltNYXJnaW5dIC0+IG5vbiBjb2xs
YXBzZWQgaG9yaXpvbnRhbCAtPiBtYXJnaW4oIiA8PCBtYXJnaW5MZWZ0IDw8ICJweCwgIiA8PCBt
YXJnaW5SaWdodCA8PCAicHgpIC0+IGxheW91dEJveDogIiA8PCAmbGF5b3V0Qm94KTsKICAgICBy
ZXR1cm4geyBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCB9OwpAQCAtMTA2NCw4ICsxMDY0LDggQEAg
VmVydGljYWxFZGdlcyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTm9uQ29s
bGFwc2VkVmVydGljYWxNYXJnaW5WYWwKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHls
ZSgpOwogICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hX
aWR0aCgpOwogCi0gICAgYXV0byBtYXJnaW5Ub3AgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0
eWxlLm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoTGF5b3V0VW5p
dCB7IDAgfSk7Ci0gICAgYXV0byBtYXJnaW5Cb3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRv
KHN0eWxlLm1hcmdpbkJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoTGF5
b3V0VW5pdCB7IDAgfSk7CisgICAgYXV0byBtYXJnaW5Ub3AgPSBjb21wdXRlZFZhbHVlSWZOb3RB
dXRvKHN0eWxlLm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoMF9s
dSk7CisgICAgYXV0byBtYXJnaW5Cb3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxl
Lm1hcmdpbkJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoMF9sdSk7CiAK
ICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAi
W01hcmdpbl0gLT4gbm9uIGNvbGxhcHNlZCB2ZXJ0aWNhbCAtPiBtYXJnaW4oIiA8PCBtYXJnaW5U
b3AgPDwgInB4LCAiIDw8IG1hcmdpbkJvdHRvbSA8PCAicHgpIC0+IGxheW91dEJveDogIiA8PCAm
bGF5b3V0Qm94KTsKICAgICByZXR1cm4geyBtYXJnaW5Ub3AsIG1hcmdpbkJvdHRvbSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCBhODAw
YjczNTg4MDBlZTMxNzU5NjJlMTllNzRiZWNmYTA3MmFmYTVhLi5iOTRlNWY0NmYyMDY5OTlhNDE0
ZTNlNTM5ODBjNDRlMDFjODRjOTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcApAQCAtODgsMTAgKzg4LDEwIEBAIHN0YXRpYyBMYXlvdXRVbml0
IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KFRleHRBbGlnbk1vZGUgYWxpZ24sIExheW91dFVuaXQg
bGluZUxvCiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKICAgICBjYXNlIFRleHRBbGln
bk1vZGU6OldlYktpdFJpZ2h0OgogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAg
ICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0ICsgc3RkOjptYXgocmVtYWluaW5nV2lkdGgsIExheW91
dFVuaXQoKSk7CisgICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQgKyBzdGQ6Om1heChyZW1h
aW5pbmdXaWR0aCwgMF9sdSk7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CiAgICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAgICAgIHJldHVybiBsaW5lTG9n
aWNhbExlZnQgKyBzdGQ6Om1heChyZW1haW5pbmdXaWR0aCAvIDIsIExheW91dFVuaXQoKSk7Cisg
ICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQgKyBzdGQ6Om1heChyZW1haW5pbmdXaWR0aCAv
IDIsIDBfbHUpOwogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3Bw
CmluZGV4IDk0NThhOTJlOWIyZTkxNDgzMGZiZGFhODMwZjQ1OTcyMTM4MmFiMDYuLjUzMzNkYWU5
NjFkYTc1Mzk2MzdkNTZjM2I3ZGE5YjA4NjZlYzkzNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5j
cHAKQEAgLTE3MCw4ICsxNzAsOCBAQCBMYXlvdXRVbml0IElubGluZUxpbmVCcmVha2VyOjp0ZXh0
V2lkdGgoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuLAogICAgICAgICBh
dXRvIGVuZFBvc2l0aW9uID0gc3RkOjptaW48SXRlbVBvc2l0aW9uPihzdGFydFBvc2l0aW9uICsg
bGVuZ3RoLCBpbmxpbmVJdGVtTGVuZ3RoKTsKICAgICAgICAgYXV0byB0ZXh0V2lkdGggPSBUZXh0
VXRpbDo6d2lkdGgoY3VycmVudElubGluZUl0ZW0sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
LCBjb250ZW50TG9naWNhbExlZnQpOwogCi0gICAgICAgIGF1dG8gbm9uQnJlYWthYmxlU3RhcnQg
PSAhc3RhcnRQb3NpdGlvbiA/IGN1cnJlbnRJbmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0YXJ0KCkg
OiBMYXlvdXRVbml0KCk7Ci0gICAgICAgIGF1dG8gbm9uQnJlYWthYmxlRW5kID0gIGVuZFBvc2l0
aW9uID09IGlubGluZUl0ZW1MZW5ndGggPyBjdXJyZW50SW5saW5lSXRlbS5ub25CcmVha2FibGVF
bmQoKSA6IExheW91dFVuaXQoKTsKKyAgICAgICAgYXV0byBub25CcmVha2FibGVTdGFydCA9ICFz
dGFydFBvc2l0aW9uID8gY3VycmVudElubGluZUl0ZW0ubm9uQnJlYWthYmxlU3RhcnQoKSA6IDBf
bHU7CisgICAgICAgIGF1dG8gbm9uQnJlYWthYmxlRW5kID0gIGVuZFBvc2l0aW9uID09IGlubGlu
ZUl0ZW1MZW5ndGggPyBjdXJyZW50SW5saW5lSXRlbS5ub25CcmVha2FibGVFbmQoKSA6IDBfbHU7
CiAgICAgICAgIGF1dG8gY29udGVudFdpZHRoID0gbm9uQnJlYWthYmxlU3RhcnQgKyB0ZXh0V2lk
dGggKyBub25CcmVha2FibGVFbmQ7CiAgICAgICAgIGNvbnRlbnRMb2dpY2FsTGVmdCArPSBjb250
ZW50V2lkdGg7CiAgICAgICAgIHdpZHRoICs9IGNvbnRlbnRXaWR0aDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAppbmRleCBmNGFkMmQ2OTlkZGFjMGZhNzFhOTMxMjMzNGVkNjAwNmE0ZTE1MTVk
Li4xNzNkNGFjMDIxMmIwZTlhOGFhMmI5ZDkyZTE0MGJhM2IyZWJhMjFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCkBAIC0xODk1LDcgKzE4OTUsNyBAQCBMYXlvdXRSZWN0IEZyYW1lVmll
dzo6cmVjdEZvclZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKGNvbnN0IExheW91dFJlY3QmIHZp
c2libAogICAgIC8vIFdlIGltcG9zZSBhbiBsb3dlciBsaW1pdCBvbiB0aGUgc2l6ZSAoc28gYW4g
dXBwZXIgbGltaXQgb24gdGhlIHNjYWxlKSBvZgogICAgIC8vIHRoZSByZWN0IHVzZWQgdG8gcG9z
aXRpb24gZml4ZWQgb2JqZWN0cyBzbyB0aGF0IHRoZXkgZG9uJ3QgY3Jvd2QgaW50byB0aGUKICAg
ICAvLyBjZW50ZXIgb2YgdGhlIHNjcmVlbiBhdCBsYXJnZXIgc2NhbGVzLgotICAgIGNvbnN0IExh
eW91dFVuaXQgbWF4Q29udGVudFdpZHRoRm9yWm9vbVRocmVzaG9sZCA9IExheW91dFVuaXQ6OmZy
b21QaXhlbCgxMDI0KTsKKyAgICBjb25zdCBMYXlvdXRVbml0IG1heENvbnRlbnRXaWR0aEZvclpv
b21UaHJlc2hvbGQgPSAxMDI0X2x1OwogICAgIGZsb2F0IHpvb21lZE91dFNjYWxlID0gZnJhbWVT
Y2FsZUZhY3RvciAqIHZpc2libGVDb250ZW50UmVjdC53aWR0aCgpIC8gc3RkOjptaW4obWF4Q29u
dGVudFdpZHRoRm9yWm9vbVRocmVzaG9sZCwgdG90YWxDb250ZW50c1NpemUud2lkdGgoKSk7CiAg
ICAgZmxvYXQgY29uc3RyYWludFRocmVzaG9sZFNjYWxlID0gMS41ICogem9vbWVkT3V0U2NhbGU7
CiAgICAgZmxvYXQgbWF4UG9zdGlvbmVkT2JqZWN0c1JlY3RTY2FsZSA9IHN0ZDo6bWluKGZyYW1l
U2NhbGVGYWN0b3IsIGNvbnN0cmFpbnRUaHJlc2hvbGRTY2FsZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5oCmluZGV4IDM5NDI3NmEzNDc2NjYzYmMxYzY3
ZmY0NTViMjUyM2IwM2NmOTFlZWMuLjlkMGRkYmRlY2YxMmQ5ZjE2ZGY1NzBmMmMyNjQ2Zjk2OGI0
NTc0M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5o
CkBAIC0xMzksNyArMTM5LDcgQEAgcHJpdmF0ZToKICAgICAvLyBTdWJ0cmVlIHB1c2gvcG9wCiAg
ICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyRWxlbWVudCYpOwogICAgIGJvb2wgcHVzaExh
eW91dFN0YXRlRm9yUGFnaW5hdGlvbklmTmVlZGVkKFJlbmRlckJsb2NrRmxvdyYpOwotICAgIGJv
b2wgcHVzaExheW91dFN0YXRlKFJlbmRlckJveCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFNpemUm
IG9mZnNldCwgTGF5b3V0VW5pdCBwYWdlSGVpZ2h0ID0gMCwgYm9vbCBwYWdlSGVpZ2h0Q2hhbmdl
ZCA9IGZhbHNlKTsKKyAgICBib29sIHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJCb3gmIHJlbmRlcmVy
LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXQsIExheW91dFVuaXQgcGFnZUhlaWdodCA9IDBfbHUs
IGJvb2wgcGFnZUhlaWdodENoYW5nZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBwb3BMYXlvdXRTdGF0
ZSgpOwogCiAgICAgLy8gU3VzcGVuZHMgdGhlIExheW91dFN0YXRlIG9wdGltaXphdGlvbi4gVXNl
ZCB1bmRlciB0cmFuc2Zvcm1zIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcAppbmRleCBjOWE2MGU1NTljZTZmYjY2OTlkNTk5MTFlNWFiNDQ3MTJhZjA0NGM5Li5k
NjRlMjYxZjlhZmQ1ZmZmM2Y4YzRlYWM5Zjk1NjAxOTZiZjliNTQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKQEAgLTIxMTUsNyArMjExNSw3IEBAIHZvaWQgUGFnZTo6YWRkUmVsZXZhbnRSZXBhaW50ZWRP
YmplY3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IExheW91dFJlY3QmIG9iCiAgICAgLy8g
Ym90aCBoYWx2ZXMgaGVscHMgdG8gcHJldmVudCBjYXNlcyB3aGVyZSB3ZSBoYXZlIGEgZnVsbHkg
bG9hZGVkIG1lbnUgYmFyIG9yIG1hc3RoZWFkIHdpdGgKICAgICAvLyBubyBjb250ZW50IGJlbmVh
dGggdGhhdC4KICAgICBMYXlvdXRSZWN0IHRvcFJlbGV2YW50UmVjdCA9IHJlbGV2YW50UmVjdDsK
LSAgICB0b3BSZWxldmFudFJlY3QuY29udHJhY3QoTGF5b3V0U2l6ZSgwLCByZWxldmFudFJlY3Qu
aGVpZ2h0KCkgLyAyKSk7CisgICAgdG9wUmVsZXZhbnRSZWN0LmNvbnRyYWN0KExheW91dFNpemUo
MF9sdSwgcmVsZXZhbnRSZWN0LmhlaWdodCgpIC8gMikpOwogICAgIExheW91dFJlY3QgYm90dG9t
UmVsZXZhbnRSZWN0ID0gdG9wUmVsZXZhbnRSZWN0OwogICAgIGJvdHRvbVJlbGV2YW50UmVjdC5z
ZXRZKHJlbGV2YW50UmVjdC5oZWlnaHQoKSAvIDIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRp
YWxOYXZpZ2F0aW9uLmgKaW5kZXggNmYyMDFmNjM1OGVkMTk5YWY5NzM0Y2M5NDhmOTVlZTI4NDU5
ZTU3Zi4uMDM3MDk4M2JiZGY3NDRmMmJkYjQ2MWQ5YTQ4Zjk2M2I2NWUyODA3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaApAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQg
ZGlzdGFuY2VEYXRhRm9yTm9kZShGb2N1c0RpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRhdGUm
IGN1cnJlbnQsIEZvY3VzQ2FuCiBOb2RlKiBzY3JvbGxhYmxlRW5jbG9zaW5nQm94T3JQYXJlbnRG
cmFtZUZvck5vZGVJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgTm9kZSopOwogTGF5b3V0UmVj
dCBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhOb2RlKiwgYm9vbCBpZ25vcmVCb3JkZXIg
PSBmYWxzZSk7CiBMYXlvdXRSZWN0IGZyYW1lUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhGcmFt
ZSopOwotTGF5b3V0UmVjdCB2aXJ0dWFsUmVjdEZvckRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwg
Y29uc3QgTGF5b3V0UmVjdCYgc3RhcnRpbmdSZWN0LCBMYXlvdXRVbml0IHdpZHRoID0gMCk7CitM
YXlvdXRSZWN0IHZpcnR1YWxSZWN0Rm9yRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBM
YXlvdXRSZWN0JiBzdGFydGluZ1JlY3QsIExheW91dFVuaXQgd2lkdGggPSAwX2x1KTsKIExheW91
dFJlY3QgdmlydHVhbFJlY3RGb3JBcmVhRWxlbWVudEFuZERpcmVjdGlvbihIVE1MQXJlYUVsZW1l
bnQqLCBGb2N1c0RpcmVjdGlvbik7CiBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lT3duZXJF
bGVtZW50KEZvY3VzQ2FuZGlkYXRlJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xheW91dFVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQu
aAppbmRleCBhODlhOThhNWMwMDRmZTE1ZjQ4M2M1NTEwOGY5ODhjNzcwZTkzZDQwLi5kNWQ4MmY0
YjU5NjRkMGQ0MjY1ZDQ0YmQxZTVlOGYyZTAyYWZiZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TGF5b3V0VW5pdC5oCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV92YWx1ZSA9
IGNsYW1wVG9JbnRlZ2VyKHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7CiAgICAgfQog
Ci0gICAgc3RhdGljIExheW91dFVuaXQgZnJvbVBpeGVsKGludCB2YWx1ZSkKKyAgICBMYXlvdXRV
bml0IG9wZXJhdG9yIiIgX2x1KGludCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBMYXlv
dXRVbml0KHZhbHVlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5jcHAKaW5kZXggNTRiNWRhMTRkYzEyYjkwMTE3MGQ5NTBmYjgzNTQ1MmNhMjA4M2I0MC4u
OTQ2MjkyMTQ1NDQ5MWE3YmQ3ZTFjYmI1YTFkZjY3MWQ4MTdkZmVkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAtNzE2LDkgKzcxNiw5IEBAIExheW91
dFBvaW50IFNjcm9sbGFibGVBcmVhOjpjb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvck92ZXJoYW5n
KGNvbnN0IExheW91dFJlY3QmCiAgICAgICAgIC8vIElmIHdlIHN0aWxsIGNsaXAsIHB1c2ggb3Vy
IHJlY3QgInVwIiBmcm9tIHRoZSBib3R0b20gcmlnaHQuCiAgICAgICAgIHNjcm9sbFJlY3QuaW50
ZXJzZWN0KGRvY3VtZW50UmVjdCk7CiAgICAgICAgIGlmIChzY3JvbGxSZWN0LndpZHRoKCkgPCBp
ZGVhbFNjcm9sbFJlY3RTaXplLndpZHRoKCkpCi0gICAgICAgICAgICBzY3JvbGxSZWN0Lm1vdmUo
LShpZGVhbFNjcm9sbFJlY3RTaXplLndpZHRoKCkgLSBzY3JvbGxSZWN0LndpZHRoKCkpLCAwKTsK
KyAgICAgICAgICAgIHNjcm9sbFJlY3QubW92ZSgtKGlkZWFsU2Nyb2xsUmVjdFNpemUud2lkdGgo
KSAtIHNjcm9sbFJlY3Qud2lkdGgoKSksIDBfbHUpOwogICAgICAgICBpZiAoc2Nyb2xsUmVjdC5o
ZWlnaHQoKSA8IGlkZWFsU2Nyb2xsUmVjdFNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBzY3Jv
bGxSZWN0Lm1vdmUoMCwgLShpZGVhbFNjcm9sbFJlY3RTaXplLmhlaWdodCgpIC0gc2Nyb2xsUmVj
dC5oZWlnaHQoKSkpOworICAgICAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlKDBfbHUsIC0oaWRlYWxT
Y3JvbGxSZWN0U2l6ZS5oZWlnaHQoKSAtIHNjcm9sbFJlY3QuaGVpZ2h0KCkpKTsKICAgICB9CiAK
ICAgICByZXR1cm4gc2Nyb2xsUmVjdC5sb2NhdGlvbigpIC0gdG9MYXlvdXRTaXplKHNjcm9sbE9y
aWdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAppbmRleCA4MTA1
NGEzYjM1MjMxY2JhZGQ2MDdiNTU2NmMxZjVlMzJiNmYzMmZkLi4wOGJiMzIzNTkzMDg5MDg2M2Vk
ZmNjZTgwNzM5YzhjNjkyNGFhMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNp
c0JveC5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBJbnRSZWN0IEVsbGlwc2lzQm94OjpzZWxlY3Rp
b25SZWN0KCkKICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZS5mb250Q2Fz
Y2FkZSgpOwogICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSByb290KCk7CiAgICAg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3Qg
dGV4dCBydW4gZmxhZ3MgYmVsb3cuCi0gICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5
b3V0UmVjdCh4KCksIHkoKSArIHJvb3RCb3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRp
bmdCbG9jaygpLCAwLCByb290Qm94LnNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2VkaW5n
QmxvY2soKSk7CisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCh4KCks
IHkoKSArIHJvb3RCb3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpLCAw
X2x1LCByb290Qm94LnNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSk7
CiAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bihtX3N0ciwgbGluZVN0eWxlLCBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgc2Vs
ZWN0aW9uUmVjdCk7CiAgICAgLy8gRklYTUU6IHVzZSBkaXJlY3Rpb25hbCBwaXhlbCBzbmFwcGlu
ZyBpbnN0ZWFkLgogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3QpOwpA
QCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgY29uc3QgUm9v
dElubGluZUJveCYgcm9vdEJveCA9IHJvb3QoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5
cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCi0gICAg
TGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCh4KCkgKyBwYWludE9mZnNldC54
KCksIHkoKSArIHBhaW50T2Zmc2V0LnkoKSArIHJvb3RCb3guc2VsZWN0aW9uVG9wKCksIDAsIHJv
b3RCb3guc2VsZWN0aW9uSGVpZ2h0KCkpOworICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9
IExheW91dFJlY3QoeCgpICsgcGFpbnRPZmZzZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55KCkg
KyByb290Qm94LnNlbGVjdGlvblRvcCgpLCAwX2x1LCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgp
KTsKICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKG1fc3Ry
LCBzdHlsZSwgQWxsb3dUcmFpbGluZ0V4cGFuc2lvbik7CiAgICAgZm9udC5hZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dChydW4sIHNlbGVjdGlvblJlY3QpOwogICAgIGNvbnRleHQuZmlsbFJlY3Qo
c25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3Qs
IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCBydW4ubHRyKCkpLCBj
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbGV4aWJsZUJveEFsZ29y
aXRobS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxleGlibGVCb3hBbGdvcml0aG0u
Y3BwCmluZGV4IDFiODQ4ZDYwMjhjOTNlYWUzNWY4YTYyNDY1ZDJmOWVlZWE1NWM3NzAuLjAxMzdm
ZDRiNGMxMDA3NzNkZjhkN2I0MTU4ZTdhNmI3OGExOWQxZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9GbGV4aWJsZUJveEFsZ29yaXRobS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0ZsZXhpYmxlQm94QWxnb3JpdGhtLmNwcApAQCAtNTYsOSArNTYsOSBA
QCBGbGV4TGF5b3V0QWxnb3JpdGhtOjpGbGV4TGF5b3V0QWxnb3JpdGhtKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgTGF5b3V0VW5pdCBsaQogYm9vbCBGbGV4TGF5b3V0QWxnb3JpdGhtOjpjb21w
dXRlTmV4dEZsZXhMaW5lKHNpemVfdCYgbmV4dEluZGV4LCBWZWN0b3I8RmxleEl0ZW0+JiBsaW5l
SXRlbXMsIExheW91dFVuaXQmIHN1bUZsZXhCYXNlU2l6ZSwgZG91YmxlJiB0b3RhbEZsZXhHcm93
LCBkb3VibGUmIHRvdGFsRmxleFNocmluaywgZG91YmxlJiB0b3RhbFdlaWdodGVkRmxleFNocmlu
aywgTGF5b3V0VW5pdCYgc3VtSHlwb3RoZXRpY2FsTWFpblNpemUpCiB7CiAgICAgbGluZUl0ZW1z
LmNsZWFyKCk7Ci0gICAgc3VtRmxleEJhc2VTaXplID0gTGF5b3V0VW5pdCgpOworICAgIHN1bUZs
ZXhCYXNlU2l6ZSA9IDBfbHU7CiAgICAgdG90YWxGbGV4R3JvdyA9IHRvdGFsRmxleFNocmluayA9
IHRvdGFsV2VpZ2h0ZWRGbGV4U2hyaW5rID0gMDsKLSAgICBzdW1IeXBvdGhldGljYWxNYWluU2l6
ZSA9IExheW91dFVuaXQoKTsKKyAgICBzdW1IeXBvdGhldGljYWxNYWluU2l6ZSA9IDBfbHU7CiAK
ICAgICBib29sIGxpbmVIYXNJbkZsb3dJdGVtID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHAKaW5kZXggNDMzOGJkMzliNTMyZDkwMjc1NTU2
ODIwZjg5YTEzMDljNWRjMjYyZC4uNTA0ZTNjYjJmMGM3MTBhZjljNDg2Y2Y1YjkwNjUxMjk2YTQy
MmQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHAK
QEAgLTQ0OCw3ICs0NDgsNyBAQCBpbmxpbmUgYm9vbCBDb21wdXRlRmxvYXRPZmZzZXRGb3JGbG9h
dExheW91dEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQ+OgogdGVtcGxhdGUgPEZs
b2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgogTGF5b3V0VW5pdCBDb21wdXRlRmxv
YXRPZmZzZXRGb3JGbG9hdExheW91dEFkYXB0ZXI8RmxvYXRUeXBlVmFsdWU+OjpoZWlnaHRSZW1h
aW5pbmcoKSBjb25zdAogewotICAgIHJldHVybiB0aGlzLT5tX291dGVybW9zdEZsb2F0ID8gdGhp
cy0+bV9yZW5kZXJlci0+bG9naWNhbEJvdHRvbUZvckZsb2F0KCp0aGlzLT5tX291dGVybW9zdEZs
b2F0KSAtIHRoaXMtPm1fbGluZVRvcCA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgxKTsKKyAgICBy
ZXR1cm4gdGhpcy0+bV9vdXRlcm1vc3RGbG9hdCA/IHRoaXMtPm1fcmVuZGVyZXItPmxvZ2ljYWxC
b3R0b21Gb3JGbG9hdCgqdGhpcy0+bV9vdXRlcm1vc3RGbG9hdCkgLSB0aGlzLT5tX2xpbmVUb3Ag
OiAxX2x1OwogfQogCiB0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFs
dWU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0
aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5j
cHAKaW5kZXggNTA3NjkwMDQ2Y2ZjYzA2ZjQyMmZlNmY3MTA2ZmVmYjM5ZTY0YzA0NS4uN2UzMTVi
ZTdiNGYzYTBiNGRhYzliOTY5OTdkNTRiYWMzY2JiN2E2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0dyaWRMYXlvdXRGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0RnVuY3Rpb25zLmNwcApAQCAtNjksOCArNjksOCBAQCBM
YXlvdXRVbml0IG1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYgZ3Jp
ZCwgR3JpZFRyYWNrU2l6aW5nRGlyZQogICAgIGlmIChjaGlsZC5uZWVkc0xheW91dCgpKQogICAg
ICAgICByZXR1cm4gY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoZ3JpZCwgZGlyZWN0
aW9uLCBjaGlsZCk7CiAgICAgYm9vbCBpc1Jvd0F4aXMgPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JD
aGlsZChncmlkLCBjaGlsZCwgZGlyZWN0aW9uKSA9PSBGb3JDb2x1bW5zOwotICAgIExheW91dFVu
aXQgbWFyZ2luU3RhcnQgPSBtYXJnaW5TdGFydElzQXV0byhjaGlsZCwgZGlyZWN0aW9uKSA/IExh
eW91dFVuaXQoKSA6IGlzUm93QXhpcyA/IGNoaWxkLm1hcmdpblN0YXJ0KCkgOiBjaGlsZC5tYXJn
aW5CZWZvcmUoKTsKLSAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCA9IG1hcmdpbkVuZElzQXV0byhj
aGlsZCwgZGlyZWN0aW9uKSA/IExheW91dFVuaXQoKSA6IGlzUm93QXhpcyA/IGNoaWxkLm1hcmdp
bkVuZCgpIDogY2hpbGQubWFyZ2luQWZ0ZXIoKTsKKyAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0
ID0gbWFyZ2luU3RhcnRJc0F1dG8oY2hpbGQsIGRpcmVjdGlvbikgPyAwX2x1IDogaXNSb3dBeGlz
ID8gY2hpbGQubWFyZ2luU3RhcnQoKSA6IGNoaWxkLm1hcmdpbkJlZm9yZSgpOworICAgIExheW91
dFVuaXQgbWFyZ2luRW5kID0gbWFyZ2luRW5kSXNBdXRvKGNoaWxkLCBkaXJlY3Rpb24pID8gMF9s
dSA6IGlzUm93QXhpcyA/IGNoaWxkLm1hcmdpbkVuZCgpIDogY2hpbGQubWFyZ2luQWZ0ZXIoKTsK
ICAgICByZXR1cm4gbWFyZ2luU3RhcnQgKyBtYXJnaW5FbmQ7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKaW5kZXgg
NjQ4MWEzMmRkOWJkYTVlYjhhNDZjMTM0ODYwOWQyMGY1ODIyZmM5OS4uZjIzN2JlZDhkOTczYjg4
ZjIyMDVlNmQxNzQ3MjhiYmZlOTZkNTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKQEAgLTU1MywxNCArNTUzLDE0
IEBAIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjplc3RpbWF0ZWRHcmlkQXJl
YUJyZWFkdGhGb3JDaGlsZChjb25zdCBSZW5kCiAgICAgICAgIGlmIChtYXhUcmFja1NpemUuaXND
b250ZW50U2l6ZWQoKSB8fCBtYXhUcmFja1NpemUuaXNGbGV4KCkgfHwgaXNSZWxhdGl2ZUdyaWRM
ZW5ndGhBc0F1dG8obWF4VHJhY2tTaXplLCBkaXJlY3Rpb24pKQogICAgICAgICAgICAgZ3JpZEFy
ZWFJc0luZGVmaW5pdGUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBncmlkQXJl
YVNpemUgKz0gdmFsdWVGb3JMZW5ndGgobWF4VHJhY2tTaXplLmxlbmd0aCgpLCBhdmFpbGFibGVT
aXplLnZhbHVlX29yKExheW91dFVuaXQoKSkpOworICAgICAgICAgICAgZ3JpZEFyZWFTaXplICs9
IHZhbHVlRm9yTGVuZ3RoKG1heFRyYWNrU2l6ZS5sZW5ndGgoKSwgYXZhaWxhYmxlU2l6ZS52YWx1
ZV9vcigwX2x1KSk7CiAgICAgfQogCiAgICAgZ3JpZEFyZWFTaXplICs9IG1fcmVuZGVyR3JpZC0+
Z3V0dGVyc1NpemUobV9ncmlkLCBkaXJlY3Rpb24sIHNwYW4uc3RhcnRMaW5lKCksIHNwYW4uaW50
ZWdlclNwYW4oKSwgYXZhaWxhYmxlU2l6ZSk7CiAKICAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdhcmVE
aXJlY3Rpb25Gb3JDaGlsZCgqbV9yZW5kZXJHcmlkLCBjaGlsZCwgRm9yQ29sdW1ucyk7CiAgICAg
aWYgKGdyaWRBcmVhSXNJbmRlZmluaXRlKQotICAgICAgICByZXR1cm4gZGlyZWN0aW9uID09IGNo
aWxkSW5saW5lRGlyZWN0aW9uID8gc3RkOjptYXgoY2hpbGQubWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKCksIGdyaWRBcmVhU2l6ZSkgOiBMYXlvdXRVbml0KC0xKTsKKyAgICAgICAgcmV0dXJuIGRp
cmVjdGlvbiA9PSBjaGlsZElubGluZURpcmVjdGlvbiA/IHN0ZDo6bWF4KGNoaWxkLm1heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCgpLCBncmlkQXJlYVNpemUpIDogLTFfbHU7CiAgICAgcmV0dXJuIGdy
aWRBcmVhU2l6ZTsKIH0KIApAQCAtNjk4LDcgKzY5OCw3IEBAIGRvdWJsZSBHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG06OmZpbmRGclVuaXRTaXplKGNvbnN0IEdyaWRTcGFuJiB0cmFja3NTcGFuLCBM
YXlvCiAKIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpjb21wdXRlR3JpZENvbnRhaW5l
ckludHJpbnNpY1NpemVzKCkKIHsKLSAgICBtX21pbkNvbnRlbnRTaXplID0gbV9tYXhDb250ZW50
U2l6ZSA9IExheW91dFVuaXQoKTsKKyAgICBtX21pbkNvbnRlbnRTaXplID0gbV9tYXhDb250ZW50
U2l6ZSA9IDBfbHU7CiAKICAgICBWZWN0b3I8R3JpZFRyYWNrPiYgYWxsVHJhY2tzID0gdHJhY2tz
KG1fZGlyZWN0aW9uKTsKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogYWxsVHJhY2tzKSB7CkBAIC03
NzMsNyArNzczLDcgQEAgTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVn
eTo6bWluU2l6ZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGMKICAgICAgICAgICAgIEdyaWRU
cmFja1NpemUgdHJhY2tTaXplID0gbV9hbGdvcml0aG0uZ3JpZFRyYWNrU2l6ZShkaXJlY3Rpb24o
KSwgdHJhY2tQb3NpdGlvbik7CiAgICAgICAgICAgICBpZiAoIXRyYWNrU2l6ZS5oYXNGaXhlZE1h
eFRyYWNrQnJlYWR0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBtaW5TaXplOwotICAgICAg
ICAgICAgbWF4QnJlYWR0aCArPSB2YWx1ZUZvckxlbmd0aCh0cmFja1NpemUubWF4VHJhY2tCcmVh
ZHRoKCkubGVuZ3RoKCksIGF2YWlsYWJsZVNwYWNlKCkudmFsdWVfb3IoTGF5b3V0VW5pdCgpKSk7
CisgICAgICAgICAgICBtYXhCcmVhZHRoICs9IHZhbHVlRm9yTGVuZ3RoKHRyYWNrU2l6ZS5tYXhU
cmFja0JyZWFkdGgoKS5sZW5ndGgoKSwgYXZhaWxhYmxlU3BhY2UoKS52YWx1ZV9vcigwX2x1KSk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1pblNpemUgPiBtYXhCcmVhZHRoKSB7CiAgICAgICAg
ICAgICBhdXRvIG1hcmdpbkFuZEJvcmRlckFuZFBhZGRpbmcgPSBHcmlkTGF5b3V0RnVuY3Rpb25z
OjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGRpcmVjdGlvbigpLCBj
aGlsZCk7CkBAIC04OTgsNyArODk4LDcgQEAgYm9vbCBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5Ojpy
ZWNvbXB1dGVVc2VkRmxleEZyYWN0aW9uSWZOZWVkZWQoZG91YmxlJiBmbGV4RnJhY3QKICAgICBp
ZiAoIWNoZWNrTWluU2l6ZSAmJiAhY2hlY2tNYXhTaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBMYXlvdXRVbml0IGZyZWVTcGFjZSA9IGNoZWNrTWF4U2l6ZSA/IG1heFNpemUudmFs
dWUoKSA6IExheW91dFVuaXQoLTEpOworICAgIExheW91dFVuaXQgZnJlZVNwYWNlID0gY2hlY2tN
YXhTaXplID8gbWF4U2l6ZS52YWx1ZSgpIDogLTFfbHU7CiAgICAgY29uc3QgR3JpZCYgZ3JpZCA9
IG1fYWxnb3JpdGhtLmdyaWQoKTsKICAgICBmcmVlU3BhY2UgPSBzdGQ6Om1heChmcmVlU3BhY2Us
IG1pblNpemUudmFsdWUoKSkgLSByZW5kZXJHcmlkLT5ndXR0ZXJzU2l6ZShncmlkLCBGb3JSb3dz
LCAwLCBncmlkLm51bVRyYWNrcyhGb3JSb3dzKSwgYXZhaWxhYmxlU3BhY2UoKSk7CiAKQEAgLTky
NSwxMSArOTI1LDExIEBAIExheW91dFVuaXQgSW5kZWZpbml0ZVNpemVTdHJhdGVneTo6ZnJlZVNw
YWNlRm9yU3RyZXRjaEF1dG9UcmFja3NTdGVwKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1fYWxn
b3JpdGhtLmZyZWVTcGFjZShkaXJlY3Rpb24oKSkpOwogICAgIGlmIChkaXJlY3Rpb24oKSA9PSBG
b3JDb2x1bW5zKQotICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgICAgICByZXR1cm4g
MF9sdTsKIAogICAgIGF1dG8gbWluU2l6ZSA9IHJlbmRlckdyaWQoKS0+Y29tcHV0ZUNvbnRlbnRM
b2dpY2FsSGVpZ2h0KE1pblNpemUsIHJlbmRlckdyaWQoKS0+c3R5bGUoKS5sb2dpY2FsTWluSGVp
Z2h0KCksIHN0ZDo6bnVsbG9wdCk7CiAgICAgaWYgKCFtaW5TaXplKQotICAgICAgICByZXR1cm4g
TGF5b3V0VW5pdCgpOworICAgICAgICByZXR1cm4gMF9sdTsKICAgICByZXR1cm4gbWluU2l6ZS52
YWx1ZSgpIC0gY29tcHV0ZVRyYWNrQmFzZWRTaXplKCk7CiB9CiAKQEAgLTk5NSw3ICs5OTUsNyBA
QCB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6aW5pdGlhbGl6ZVRyYWNrU2l6ZXMoKQog
ICAgIFZlY3RvcjxHcmlkVHJhY2s+JiBhbGxUcmFja3MgPSB0cmFja3MobV9kaXJlY3Rpb24pOwog
ICAgIGNvbnN0IGJvb2wgaGFzRGVmaW5pdGVGcmVlU3BhY2UgPSAhIWF2YWlsYWJsZVNwYWNlKCk7
CiAgICAgY29uc3QgYm9vbCBpbmRlZmluaXRlSGVpZ2h0ID0gbV9kaXJlY3Rpb24gPT0gRm9yUm93
cyAmJiAhbV9yZW5kZXJHcmlkLT5oYXNEZWZpbml0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICBMYXlv
dXRVbml0IG1heFNpemUgPSBzdGQ6Om1heChMYXlvdXRVbml0KCksIGF2YWlsYWJsZVNwYWNlKCku
dmFsdWVfb3IoTGF5b3V0VW5pdCgpKSk7CisgICAgTGF5b3V0VW5pdCBtYXhTaXplID0gc3RkOjpt
YXgoMF9sdSwgYXZhaWxhYmxlU3BhY2UoKS52YWx1ZV9vcigwX2x1KSk7CiAgICAgLy8gMS4gSW5p
dGlhbGl6ZSBwZXIgR3JpZCB0cmFjayB2YXJpYWJsZXMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGFsbFRyYWNrcy5zaXplKCk7ICsraSkgewogICAgICAgICBHcmlkVHJhY2smIHRyYWNr
ID0gYWxsVHJhY2tzW2ldOwpAQCAtMTA4MCw3ICsxMDgwLDcgQEAgdm9pZCBHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG06OnN0cmV0Y2hGbGV4aWJsZVRyYWNrcyhzdGQ6Om9wdGlvbmFsPExheW91dFVu
aXQ+IGYKICAgICBjb21wdXRlRmxleFNpemVkVHJhY2tzR3Jvd3RoKGZsZXhGcmFjdGlvbiwgaW5j
cmVtZW50cywgdG90YWxHcm93dGgpOwogCiAgICAgaWYgKG1fc3RyYXRlZ3ktPnJlY29tcHV0ZVVz
ZWRGbGV4RnJhY3Rpb25JZk5lZWRlZChmbGV4RnJhY3Rpb24sIHRvdGFsR3Jvd3RoKSkgewotICAg
ICAgICB0b3RhbEdyb3d0aCA9IExheW91dFVuaXQoKTsKKyAgICAgICAgdG90YWxHcm93dGggPSAw
X2x1OwogICAgICAgICBjb21wdXRlRmxleFNpemVkVHJhY2tzR3Jvd3RoKGZsZXhGcmFjdGlvbiwg
aW5jcmVtZW50cywgdG90YWxHcm93dGgpOwogICAgIH0KIApAQCAtMTExMCw3ICsxMTEwLDcgQEAg
dm9pZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnN0cmV0Y2hBdXRvVHJhY2tzKCkKICAgICAg
ICAgYXV0byYgdHJhY2sgPSBhbGxUcmFja3NbdHJhY2tJbmRleF07CiAgICAgICAgIHRyYWNrLnNl
dEJhc2VTaXplKHRyYWNrLmJhc2VTaXplKCkgKyBzaXplVG9JbmNyZWFzZSk7CiAgICAgfQotICAg
IHNldEZyZWVTcGFjZShtX2RpcmVjdGlvbiwgTGF5b3V0VW5pdCgpKTsKKyAgICBzZXRGcmVlU3Bh
Y2UobV9kaXJlY3Rpb24sIDBfbHUpOwogfQogCiB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRo
bTo6YWR2YW5jZU5leHRTdGF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKaW5kZXggZDVkNjJjZDBmNzM3N2E5ZDA1MDZlNmY3YjFmNDVjYjc2NzZkYWY4NS4u
ODUzYmNjYmQ1NWU4MDhlZjA0OWU0MGE1YWVkYmQxOTVkMDA3MzY3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtNjk4LDggKzY5OCw4IEBAIHZvaWQg
SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24oTGF5b3V0VW5pdCB0b3As
IExheW91dFVuaXQgbWF4SGVpCiAKICAgICAgICAgICAgICAgICBhdXRvJiBydWJ5UnVuID0gZG93
bmNhc3Q8UmVuZGVyUnVieVJ1bj4oY2hpbGQtPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgICAg
IGlmIChSZW5kZXJSdWJ5QmFzZSogcnVieUJhc2UgPSBydWJ5UnVuLnJ1YnlCYXNlKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21SdWJ5QmFzZUxlYWRpbmcgPSAoY2hp
bGQtPmxvZ2ljYWxIZWlnaHQoKSAtIHJ1YnlCYXNlLT5sb2dpY2FsQm90dG9tKCkpICsgcnVieUJh
c2UtPmxvZ2ljYWxIZWlnaHQoKSAtIChydWJ5QmFzZS0+bGFzdFJvb3RCb3goKSA/IHJ1YnlCYXNl
LT5sYXN0Um9vdEJveCgpLT5saW5lQm90dG9tKCkgOiBMYXlvdXRVbml0KCkpOwotICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IHRvcFJ1YnlCYXNlTGVhZGluZyA9IHJ1YnlCYXNlLT5sb2dp
Y2FsVG9wKCkgKyAocnVieUJhc2UtPmZpcnN0Um9vdEJveCgpID8gcnVieUJhc2UtPmZpcnN0Um9v
dEJveCgpLT5saW5lVG9wKCkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IGJvdHRvbVJ1YnlCYXNlTGVhZGluZyA9IChjaGlsZC0+bG9naWNhbEhlaWdodCgp
IC0gcnVieUJhc2UtPmxvZ2ljYWxCb3R0b20oKSkgKyBydWJ5QmFzZS0+bG9naWNhbEhlaWdodCgp
IC0gKHJ1YnlCYXNlLT5sYXN0Um9vdEJveCgpID8gcnVieUJhc2UtPmxhc3RSb290Qm94KCktPmxp
bmVCb3R0b20oKSA6IDBfbHUpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcFJ1
YnlCYXNlTGVhZGluZyA9IHJ1YnlCYXNlLT5sb2dpY2FsVG9wKCkgKyAocnVieUJhc2UtPmZpcnN0
Um9vdEJveCgpID8gcnVieUJhc2UtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiAwX2x1KTsK
ICAgICAgICAgICAgICAgICAgICAgbmV3TG9naWNhbFRvcCArPSAhcmVuZGVyZXIoKS5zdHlsZSgp
LmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHRvcFJ1YnlCYXNlTGVhZGluZyA6IGJvdHRv
bVJ1YnlCYXNlTGVhZGluZzsKICAgICAgICAgICAgICAgICAgICAgYm94SGVpZ2h0IC09ICh0b3BS
dWJ5QmFzZUxlYWRpbmcgKyBib3R0b21SdWJ5QmFzZUxlYWRpbmcpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTg2Nyw4ICs4NjcsOCBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRCb3Jk
ZXJPdXRzZXRWaXN1YWxPdmVyZmxvdyhMYXlvdXRSZWN0JiBsb2dpY2FsVmlzdQogICAgIExheW91
dFVuaXQgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93ID0gc3RkOjptaW48TGF5b3V0VW5pdD4obG9n
aWNhbFRvcCgpIC0gb3V0c2V0TG9naWNhbFRvcCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnkoKSk7
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBzdGQ6Om1heDxM
YXlvdXRVbml0Pihsb2dpY2FsQm90dG9tKCkgKyBvdXRzZXRMb2dpY2FsQm90dG9tLCBsb2dpY2Fs
VmlzdWFsT3ZlcmZsb3cubWF4WSgpKTsKIAotICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNhbExl
ZnQgPSBpbmNsdWRlTG9naWNhbExlZnRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsTGVmdCA6
IExheW91dFVuaXQoKTsKLSAgICBMYXlvdXRVbml0IG91dHNldExvZ2ljYWxSaWdodCA9IGluY2x1
ZGVMb2dpY2FsUmlnaHRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsUmlnaHQgOiBMYXlvdXRV
bml0KCk7CisgICAgTGF5b3V0VW5pdCBvdXRzZXRMb2dpY2FsTGVmdCA9IGluY2x1ZGVMb2dpY2Fs
TGVmdEVkZ2UoKSA/IGJvcmRlck91dHNldExvZ2ljYWxMZWZ0IDogMF9sdTsKKyAgICBMYXlvdXRV
bml0IG91dHNldExvZ2ljYWxSaWdodCA9IGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKCkgPyBib3Jk
ZXJPdXRzZXRMb2dpY2FsUmlnaHQgOiAwX2x1OwogCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dFZpc3VhbE92ZXJmbG93ID0gc3RkOjptaW48TGF5b3V0VW5pdD4obG9naWNhbExlZnQoKSAtIG91
dHNldExvZ2ljYWxMZWZ0LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueCgpKTsKICAgICBMYXlvdXRV
bml0IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obG9n
aWNhbFJpZ2h0KCkgKyBvdXRzZXRMb2dpY2FsUmlnaHQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5t
YXhYKCkpOwpAQCAtMTI3Myw4ICsxMjczLDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEZp
bGxMYXllcihjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGNvbG8KICAg
ICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBj
dXJyLT5wcmV2TGluZUJveCgpKQogICAgICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9
IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgc3Ry
aXBYID0gcmVjdC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDog
TGF5b3V0VW5pdCgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSByZWN0LnkoKSAtIChp
c0hvcml6b250YWwoKSA/IExheW91dFVuaXQoKSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOworICAg
ICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IHJlY3QueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9n
aWNhbE9mZnNldE9uTGluZSA6IDBfbHUpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IHJl
Y3QueSgpIC0gKGlzSG9yaXpvbnRhbCgpID8gMF9sdSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwog
ICAgICAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9n
aWNhbFdpZHRoIDogTGF5b3V0VW5pdCh3aWR0aCgpKTsKICAgICAgICAgTGF5b3V0VW5pdCBzdHJp
cEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gTGF5b3V0VW5pdChoZWlnaHQoKSkgOiB0b3RhbExv
Z2ljYWxXaWR0aDsKIApAQCAtMTQwOSw4ICsxNDA5LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpw
YWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYKICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxPZmZzZXRP
bkxpbmU7CiAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQogICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGgg
Kz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRq
dXN0ZWRQYWludG9mZnNldC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25M
aW5lIDogTGF5b3V0VW5pdCgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3Rl
ZFBhaW50b2Zmc2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IExheW91dFVuaXQoKSA6IGxvZ2lj
YWxPZmZzZXRPbkxpbmUpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IGFkanVzdGVkUGFp
bnRvZmZzZXQueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6IDBf
bHUpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRvZmZzZXQueSgp
IC0gKGlzSG9yaXpvbnRhbCgpID8gMF9sdSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwogICAgICAg
ICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9naWNhbFdp
ZHRoIDogZnJhbWVSZWN0LndpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgc3RyaXBIZWlnaHQg
PSBpc0hvcml6b250YWwoKSA/IGZyYW1lUmVjdC5oZWlnaHQoKSA6IHRvdGFsTG9naWNhbFdpZHRo
OwogCkBAIC0xNDc3LDggKzE0NzcsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50TWFzayhQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgICAg
ICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKICAg
ICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnIt
Pm5leHRMaW5lQm94KCkpCiAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5s
b2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBhaW50
T2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBMYXlv
dXRVbml0KCkpOwotICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRPZmZz
ZXQueSgpIC0gKGlzSG9yaXpvbnRhbCgpID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbE9mZnNldE9u
TGluZSk7CisgICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludE9mZnNldC54
KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogMF9sdSk7CisgICAg
ICAgIExheW91dFVuaXQgc3RyaXBZID0gYWRqdXN0ZWRQYWludE9mZnNldC55KCkgLSAoaXNIb3Jp
em9udGFsKCkgPyAwX2x1IDogbG9naWNhbE9mZnNldE9uTGluZSk7CiAgICAgICAgIExheW91dFVu
aXQgc3RyaXBXaWR0aCA9IGlzSG9yaXpvbnRhbCgpID8gdG90YWxMb2dpY2FsV2lkdGggOiBmcmFt
ZVJlY3Qud2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcEhlaWdodCA9IGlzSG9yaXpv
bnRhbCgpID8gZnJhbWVSZWN0LmhlaWdodCgpIDogdG90YWxMb2dpY2FsV2lkdGg7CiAKQEAgLTE1
NzUsNyArMTU3NSw3IEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJBbm5v
dGF0aW9uQWRqdXN0bWVudChMYXlvdXRVbml0IGFsbG93ZWRQb3NpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghcnVieVJ1bi5zdHlsZSgp
LmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgICAgIExheW91dFVu
aXQgdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5sb2dpY2FsVG9wKCkgKyAocnVi
eVRleHQtPmZpcnN0Um9vdEJveCgpID8gcnVieVRleHQtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9w
KCkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZGaXJz
dFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5sb2dpY2FsVG9wKCkgKyAocnVieVRleHQtPmZpcnN0
Um9vdEJveCgpID8gcnVieVRleHQtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiAwX2x1KTsK
ICAgICAgICAgICAgICAgICBpZiAodG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA+PSAwKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB0b3BPZkZpcnN0UnVieVRl
eHRMaW5lICs9IGNoaWxkLT5sb2dpY2FsVG9wKCk7CkBAIC0xNjIzLDcgKzE2MjMsNyBAQCBMYXlv
dXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVVbmRlckFubm90YXRpb25BZGp1c3RtZW50KExh
eW91dFVuaXQgYWxsb3dlZFBvcwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
ICAgICBpZiAocnVieVJ1bi5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewot
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlU
ZXh0LT5sb2dpY2FsVG9wKCkgKyAocnVieVRleHQtPmZpcnN0Um9vdEJveCgpID8gcnVieVRleHQt
PmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5sb2dpY2Fs
VG9wKCkgKyAocnVieVRleHQtPmZpcnN0Um9vdEJveCgpID8gcnVieVRleHQtPmZpcnN0Um9vdEJv
eCgpLT5saW5lVG9wKCkgOiAwX2x1KTsKICAgICAgICAgICAgICAgICBpZiAodG9wT2ZGaXJzdFJ1
YnlUZXh0TGluZSA+PSAwKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICB0b3BPZkZpcnN0UnVieVRleHRMaW5lICs9IGNoaWxkLT5sb2dpY2FsVG9wKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggMDhlYjAzOTc2
YzJlMTZiZDQ5OWE3MDZmMGIwYjE4NDk1NTZjMjlhZS4uMWQwMTA5MGIxMWZiYTk1OWYxZDA5YWNm
NjNjMzU1NjE2YzFjMmVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcApAQCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICAg
ICAgICAgIC8vIHRydW5jYXRlZCBzdHJpbmcgaS5lLiAgfEhlbGxvfENCQXwgLT4gfC4uLmxvfENC
QXwKICAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZlZpc2libGVUZXh0ID0gcmVuZGVyZXIo
KS53aWR0aChtX3N0YXJ0LCBtX3RydW5jYXRpb24sIHRleHRQb3MoKSwgaXNGaXJzdExpbmUoKSk7
CiAgICAgICAgICAgICBMYXlvdXRVbml0IHdpZHRoT2ZIaWRkZW5UZXh0ID0gbG9naWNhbFdpZHRo
KCkgLSB3aWR0aE9mVmlzaWJsZVRleHQ7Ci0gICAgICAgICAgICBMYXlvdXRTaXplIHRydW5jYXRp
b25PZmZzZXQoaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gd2lkdGhPZkhpZGRlblRleHQgOiAt
d2lkdGhPZkhpZGRlblRleHQsIDApOworICAgICAgICAgICAgTGF5b3V0U2l6ZSB0cnVuY2F0aW9u
T2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHdpZHRoT2ZIaWRkZW5UZXh0IDogLXdp
ZHRoT2ZIaWRkZW5UZXh0LCAwX2x1KTsKICAgICAgICAgICAgIGxvY2FsUGFpbnRPZmZzZXQubW92
ZShpc0hvcml6b250YWwoKSA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9uT2Zmc2V0LnRy
YW5zcG9zZWRTaXplKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0U3RhdGUuaAppbmRleCA4YTQzMGIwMDQwYWE0ZDNmZWI3ZTczMzRlZmI1YzczNGNiZDQ4
YmUyLi44ZWMzNjAzZjJmYjFkODczYTYzNTE0OWQ4OGI4Njc3OTUyMDExMzUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaApAQCAtMTM3LDcgKzEzNyw3IEBAIHByaXZhdGU6
CiBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KExheW91dFN0YXRlTWFpbnRhaW5lcik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgTGF5b3V0U3Rh
dGVNYWludGFpbmVyKFJlbmRlckJveCYsIExheW91dFNpemUgb2Zmc2V0LCBib29sIGRpc2FibGVT
dGF0ZSA9IGZhbHNlLCBMYXlvdXRVbml0IHBhZ2VIZWlnaHQgPSAwLCBib29sIHBhZ2VIZWlnaHRD
aGFuZ2VkID0gZmFsc2UpOworICAgIGV4cGxpY2l0IExheW91dFN0YXRlTWFpbnRhaW5lcihSZW5k
ZXJCb3gmLCBMYXlvdXRTaXplIG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSwgTGF5
b3V0VW5pdCBwYWdlSGVpZ2h0ID0gMF9sdSwgYm9vbCBwYWdlSGVpZ2h0Q2hhbmdlZCA9IGZhbHNl
KTsKICAgICB+TGF5b3V0U3RhdGVNYWludGFpbmVyKCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMu
aAppbmRleCA1YzRlY2M5YzMzOTBhNzBiNDdlNmQ3ZDFmNjY2ZWI5OWE4Njg0OTJjLi4yYTMwOWVi
ZTZkOThiNDc1ZmEyOTkzN2E3NjM5NjBiM2Y3Mzc4ZDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgKQEAgLTQ5
LDkgKzQ5LDkgQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKG1fY2FjaGUpOwogICAgICAg
ICAgICAgaWYgKG1faGFzRmxvYXRzT3JGcmFnbWVudGVkRmxvd3MgfHwgIW1fY2FjaGVkTG9naWNh
bExlZnRTZWxlY3Rpb25PZmZzZXQpIHsKICAgICAgICAgICAgICAgICBtX2NhY2hlZExvZ2ljYWxM
ZWZ0U2VsZWN0aW9uT2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtX2xvZ2ljYWxMZWZ0
U2VsZWN0aW9uT2Zmc2V0ID0gbV9ibG9jayA/IG1fYmxvY2stPmxvZ2ljYWxMZWZ0U2VsZWN0aW9u
T2Zmc2V0KHJvb3RCbG9jaywgcG9zaXRpb24sICptX2NhY2hlKSA6IExheW91dFVuaXQ6OmZyb21Q
aXhlbCgwKTsKKyAgICAgICAgICAgICAgICBtX2xvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0ID0g
bV9ibG9jayA/IG1fYmxvY2stPmxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywg
cG9zaXRpb24sICptX2NhY2hlKSA6IDBfbHU7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBBU1NFUlQobV9sb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCA9PSAobV9ibG9jayA/
IG1fYmxvY2stPmxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgcG9zaXRpb24s
ICptX2NhY2hlKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKSkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChtX2xvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0ID09IChtX2Jsb2NrID8gbV9ibG9j
ay0+bG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBwb3NpdGlvbiwgKm1fY2Fj
aGUpIDogMF9sdSkpOwogICAgICAgICAgICAgcmV0dXJuIG1fbG9naWNhbExlZnRTZWxlY3Rpb25P
ZmZzZXQ7CiAgICAgICAgIH0KIApAQCAtNjAsOSArNjAsOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBBU1NFUlQobV9jYWNoZSk7CiAgICAgICAgICAgICBpZiAobV9oYXNGbG9hdHNPckZyYWdtZW50
ZWRGbG93cyB8fCAhbV9jYWNoZWRMb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQpIHsKICAgICAg
ICAgICAgICAgICBtX2NhY2hlZExvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgbV9sb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQgPSBtX2Jsb2NrID8g
bV9ibG9jay0+bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgcG9zaXRpb24s
ICptX2NhY2hlKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKKyAgICAgICAgICAgICAgICBt
X2xvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldCA9IG1fYmxvY2sgPyBtX2Jsb2NrLT5sb2dpY2Fs
UmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBwb3NpdGlvbiwgKm1fY2FjaGUpIDogMF9s
dTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVChtX2xvZ2ljYWxS
aWdodFNlbGVjdGlvbk9mZnNldCA9PSAobV9ibG9jayA/IG1fYmxvY2stPmxvZ2ljYWxSaWdodFNl
bGVjdGlvbk9mZnNldChyb290QmxvY2ssIHBvc2l0aW9uLCAqbV9jYWNoZSkgOiBMYXlvdXRVbml0
Ojpmcm9tUGl4ZWwoMCkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9sb2dpY2FsUmlnaHRT
ZWxlY3Rpb25PZmZzZXQgPT0gKG1fYmxvY2sgPyBtX2Jsb2NrLT5sb2dpY2FsUmlnaHRTZWxlY3Rp
b25PZmZzZXQocm9vdEJsb2NrLCBwb3NpdGlvbiwgKm1fY2FjaGUpIDogMF9sdSkpOwogICAgICAg
ICAgICAgcmV0dXJuIG1fbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0OwogICAgICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDFkZjU3MzQyZjY1
NGM0MWZiMTFjM2JiOTc1ZGI2ODllNWFjNTcwMzIuLmY2OWI4YzNmNjZlYTA5YjQzNGM2NWM1NGVh
YzM3NWExZWNiMTU0YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cApAQCAtNjgxLDkgKzY4MSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhM
YXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCkKICAgICAgICAgTGF5b3V0UmVjdCBj
bGllbnRSZWN0KGZsaXBwZWRDbGllbnRCb3hSZWN0KCkpOwogICAgICAgICBMYXlvdXRSZWN0IHJl
Y3RUb0FwcGx5OwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAg
ICAgICAgIHJlY3RUb0FwcGx5ID0gTGF5b3V0UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50UmVj
dC55KCksIDEsIHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNs
aWVudFJlY3QueSgpKSk7CisgICAgICAgICAgICByZWN0VG9BcHBseSA9IExheW91dFJlY3QoY2xp
ZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCAxX2x1LCBzdGQ6Om1heCgwX2x1LCBvbGRDbGll
bnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LnkoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZWN0VG9BcHBseSA9IExheW91dFJlY3QoY2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgp
LCBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0
LngoKSksIDEpOworICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBMYXlvdXRSZWN0KGNsaWVudFJl
Y3QueCgpLCBjbGllbnRSZWN0LnkoKSwgc3RkOjptYXgoMF9sdSwgb2xkQ2xpZW50QWZ0ZXJFZGdl
IC0gY2xpZW50UmVjdC54KCkpLCAxX2x1KTsKICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3cocmVj
dFRvQXBwbHkpOwogICAgICAgICBpZiAoaGFzUmVuZGVyT3ZlcmZsb3coKSkKICAgICAgICAgICAg
IG1fb3ZlcmZsb3ctPnNldExheW91dENsaWVudEFmdGVyRWRnZShvbGRDbGllbnRBZnRlckVkZ2Up
OwpAQCAtNzc0LDExICs3NzQsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0TG9naWNhbExlZnRG
b3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxMZWYKIHsKICAgICBp
ZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICBpZiAoYXBwbHlEZWx0YSA9
PSBBcHBseUxheW91dERlbHRhKQotICAgICAgICAgICAgdmlldygpLmZyYW1lVmlldygpLmxheW91
dENvbnRleHQoKS5hZGRMYXlvdXREZWx0YShMYXlvdXRTaXplKGNoaWxkLngoKSAtIGxvZ2ljYWxM
ZWZ0LCAwKSk7CisgICAgICAgICAgICB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgp
LmFkZExheW91dERlbHRhKExheW91dFNpemUoY2hpbGQueCgpIC0gbG9naWNhbExlZnQsIDBfbHUp
KTsKICAgICAgICAgY2hpbGQuc2V0WChsb2dpY2FsTGVmdCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKGFwcGx5RGVsdGEgPT0gQXBwbHlMYXlvdXREZWx0YSkKLSAgICAgICAgICAgIHZpZXco
KS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuYWRkTGF5b3V0RGVsdGEoTGF5b3V0U2l6ZSgw
LCBjaGlsZC55KCkgLSBsb2dpY2FsTGVmdCkpOworICAgICAgICAgICAgdmlldygpLmZyYW1lVmll
dygpLmxheW91dENvbnRleHQoKS5hZGRMYXlvdXREZWx0YShMYXlvdXRTaXplKDBfbHUsIGNoaWxk
LnkoKSAtIGxvZ2ljYWxMZWZ0KSk7CiAgICAgICAgIGNoaWxkLnNldFkobG9naWNhbExlZnQpOwog
ICAgIH0KIH0KQEAgLTc4NywxMSArNzg3LDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNldExvZ2lj
YWxUb3BGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsCiB7
CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKGFwcGx5
RGVsdGEgPT0gQXBwbHlMYXlvdXREZWx0YSkKLSAgICAgICAgICAgIHZpZXcoKS5mcmFtZVZpZXco
KS5sYXlvdXRDb250ZXh0KCkuYWRkTGF5b3V0RGVsdGEoTGF5b3V0U2l6ZSgwLCBjaGlsZC55KCkg
LSBsb2dpY2FsVG9wKSk7CisgICAgICAgICAgICB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29u
dGV4dCgpLmFkZExheW91dERlbHRhKExheW91dFNpemUoMF9sdSwgY2hpbGQueSgpIC0gbG9naWNh
bFRvcCkpOwogICAgICAgICBjaGlsZC5zZXRZKGxvZ2ljYWxUb3ApOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmIChhcHBseURlbHRhID09IEFwcGx5TGF5b3V0RGVsdGEpCi0gICAgICAgICAgICB2
aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmFkZExheW91dERlbHRhKExheW91dFNp
emUoY2hpbGQueCgpIC0gbG9naWNhbFRvcCwgMCkpOworICAgICAgICAgICAgdmlldygpLmZyYW1l
VmlldygpLmxheW91dENvbnRleHQoKS5hZGRMYXlvdXREZWx0YShMYXlvdXRTaXplKGNoaWxkLngo
KSAtIGxvZ2ljYWxUb3AsIDBfbHUpKTsKICAgICAgICAgY2hpbGQuc2V0WChsb2dpY2FsVG9wKTsK
ICAgICB9CiB9CkBAIC0yMjcxLDcgKzIyNzEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRl
QmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aAog
CiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICBSZW5kZXJCbG9j
ayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgTGF5b3V0
VW5pdCBmbG9hdExlZnRXaWR0aCA9IDAsIGZsb2F0UmlnaHRXaWR0aCA9IDA7CisgICAgTGF5b3V0
VW5pdCBmbG9hdExlZnRXaWR0aCwgZmxvYXRSaWdodFdpZHRoOwogCiAgICAgTGF5b3V0VW5pdCBj
aGlsZE1pbldpZHRoOwogICAgIExheW91dFVuaXQgY2hpbGRNYXhXaWR0aDsKQEAgLTI3MTAsMTMg
KzI3MTAsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVzZXRFbmNsb3NpbmdGcmFnbWVudGVkRmxv
d0FuZENoaWxkSW5mb0luY2x1ZGluZ0Rlc2NlbmRhbnRzKFIKIExheW91dFVuaXQgUmVuZGVyQmxv
Y2s6OnBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0CiB7CiAgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSog
cmFyZURhdGEgPSBnZXRCbG9ja1JhcmVEYXRhKCp0aGlzKTsKLSAgICByZXR1cm4gcmFyZURhdGEg
PyByYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgOiBMYXlvdXRVbml0KCk7CisgICAgcmV0dXJu
IHJhcmVEYXRhID8gcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDogMF9sdTsKIH0KIAogTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6cGFnZUxvZ2ljYWxPZmZzZXQoKSBjb25zdAogewogICAgIFJl
bmRlckJsb2NrUmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0QmxvY2tSYXJlRGF0YSgqdGhpcyk7Ci0g
ICAgcmV0dXJuIHJhcmVEYXRhID8gcmFyZURhdGEtPm1fcGFnZUxvZ2ljYWxPZmZzZXQgOiBMYXlv
dXRVbml0KCk7CisgICAgcmV0dXJuIHJhcmVEYXRhID8gcmFyZURhdGEtPm1fcGFnZUxvZ2ljYWxP
ZmZzZXQgOiAwX2x1OwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQo
TGF5b3V0VW5pdCBzdHJ1dCkKQEAgLTI4NDAsOCArMjg0MCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91
dFBvaW50CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciBibG9jay1mbG93cyB0
aGF0IGFyZSBob3Jpem9udGFsLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDY3ODEKICAgICAgICAgYm9vbCBwcmV2SW5saW5lSGFzTGluZUJveCA9
IGRvd25jYXN0PFJlbmRlcklubGluZT4oKmlubGluZUNvbnRpbnVhdGlvbi0+ZWxlbWVudCgpLT5y
ZW5kZXJlcigpKS5maXJzdExpbmVCb3goKTsKLSAgICAgICAgZmxvYXQgdG9wTWFyZ2luID0gcHJl
dklubGluZUhhc0xpbmVCb3ggPyBjb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSA6IExheW91dFVuaXQo
KTsKLSAgICAgICAgZmxvYXQgYm90dG9tTWFyZ2luID0gbmV4dElubGluZUhhc0xpbmVCb3ggPyBj
b2xsYXBzZWRNYXJnaW5BZnRlcigpIDogTGF5b3V0VW5pdCgpOworICAgICAgICBmbG9hdCB0b3BN
YXJnaW4gPSBwcmV2SW5saW5lSGFzTGluZUJveCA/IGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpIDog
MF9sdTsKKyAgICAgICAgZmxvYXQgYm90dG9tTWFyZ2luID0gbmV4dElubGluZUhhc0xpbmVCb3gg
PyBjb2xsYXBzZWRNYXJnaW5BZnRlcigpIDogMF9sdTsKICAgICAgICAgTGF5b3V0UmVjdCByZWN0
KGFkZGl0aW9uYWxPZmZzZXQueCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSAtIHRvcE1hcmdpbiwg
d2lkdGgoKSwgaGVpZ2h0KCkgKyB0b3BNYXJnaW4gKyBib3R0b21NYXJnaW4pOwogICAgICAgICBp
ZiAoIXJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHJlY3QpOwpAQCAt
MzE4NCw3ICszMTg0LDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCbG9jazo6
YXZhaWxhYmxlTG9naWNhbEhlaWdodEZvclBlcmNlbnRhZ2VDb21wdXQKICAgICAgICAgYXZhaWxh
YmxlSGVpZ2h0ID0gb3ZlcnJpZGVDb250ZW50TG9naWNhbEhlaWdodCgpOwogICAgIGVsc2UgaWYg
KHN0eWxlVG9Vc2UubG9naWNhbEhlaWdodCgpLmlzRml4ZWQoKSkgewogICAgICAgICBMYXlvdXRV
bml0IGNvbnRlbnRCb3hIZWlnaHQgPSBhZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJv
eFNpemluZygoTGF5b3V0VW5pdClzdHlsZVRvVXNlLmxvZ2ljYWxIZWlnaHQoKS52YWx1ZSgpKTsK
LSAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBjb25zdHJh
aW5Db250ZW50Qm94TG9naWNhbEhlaWdodEJ5TWluTWF4KGNvbnRlbnRCb3hIZWlnaHQgLSBzY3Jv
bGxiYXJMb2dpY2FsSGVpZ2h0KCksIHN0ZDo6bnVsbG9wdCkpOworICAgICAgICBhdmFpbGFibGVI
ZWlnaHQgPSBzdGQ6Om1heCgwX2x1LCBjb25zdHJhaW5Db250ZW50Qm94TG9naWNhbEhlaWdodEJ5
TWluTWF4KGNvbnRlbnRCb3hIZWlnaHQgLSBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCksIHN0ZDo6
bnVsbG9wdCkpOwogICAgIH0gZWxzZSBpZiAoc3R5bGVUb1VzZS5sb2dpY2FsSGVpZ2h0KCkuaXNQ
ZXJjZW50T3JDYWxjdWxhdGVkKCkgJiYgIWlzT3V0T2ZGbG93UG9zaXRpb25lZFdpdGhTcGVjaWZp
ZWRIZWlnaHQpIHsKICAgICAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBoZWlnaHRXaXRo
U2Nyb2xsYmFyID0gY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KHN0eWxlVG9Vc2UubG9n
aWNhbEhlaWdodCgpKTsKICAgICAgICAgaWYgKGhlaWdodFdpdGhTY3JvbGxiYXIpIHsKQEAgLTMx
OTQsMTIgKzMxOTQsMTIgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCbG9jazo6
YXZhaWxhYmxlTG9naWNhbEhlaWdodEZvclBlcmNlbnRhZ2VDb21wdXQKICAgICAgICAgICAgIC8v
IHJldHVybiB2YWx1ZSBmcm9tIHRoZSByZWN1cnNpdmUgY2FsbCB3aWxsIG5vdCBoYXZlIGJlZW4g
YWRqdXN0ZWQKICAgICAgICAgICAgIC8vIHlldC4KICAgICAgICAgICAgIExheW91dFVuaXQgY29u
dGVudEJveEhlaWdodCA9IGNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0QnlNaW5NYXgo
Y29udGVudEJveEhlaWdodFdpdGhTY3JvbGxiYXIgLSBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCks
IHN0ZDo6bnVsbG9wdCk7Ci0gICAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBzdGQ6Om1heChM
YXlvdXRVbml0KCksIGNvbnRlbnRCb3hIZWlnaHQpOworICAgICAgICAgICAgYXZhaWxhYmxlSGVp
Z2h0ID0gc3RkOjptYXgoMF9sdSwgY29udGVudEJveEhlaWdodCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKGlzT3V0T2ZGbG93UG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQpIHsKICAg
ICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyB0byBhZmZlY3QgdGhlIGJsb2NrJyBzaXplKCkgbWVt
YmVyIHZhcmlhYmxlLCBzaW5jZSB0aGlzCiAgICAgICAgIC8vIGNhbiBnZXQgY2FsbGVkIHdoaWxl
IHRoZSBibG9jayBpcyBzdGlsbCBsYXlpbmcgb3V0IGl0cyBraWRzLgotICAgICAgICBMb2dpY2Fs
RXh0ZW50Q29tcHV0ZWRWYWx1ZXMgY29tcHV0ZWRWYWx1ZXMgPSBjb21wdXRlTG9naWNhbEhlaWdo
dChsb2dpY2FsSGVpZ2h0KCksIExheW91dFVuaXQoKSk7CisgICAgICAgIExvZ2ljYWxFeHRlbnRD
b21wdXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlcyA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0KGxvZ2lj
YWxIZWlnaHQoKSwgMF9sdSk7CiAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGNvbXB1dGVkVmFs
dWVzLm1fZXh0ZW50IC0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIHNjcm9sbGJh
ckxvZ2ljYWxIZWlnaHQoKTsKICAgICB9IGVsc2UgaWYgKGlzUmVuZGVyVmlldygpKQogICAgICAg
ICBhdmFpbGFibGVIZWlnaHQgPSB2aWV3KCkucGFnZU9yVmlld0xvZ2ljYWxIZWlnaHQoKTsKQEAg
LTMyNjYsNyArMzI2Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEV4Y2x1ZGVkQ2hpbGRy
ZW4oYm9vbCByZWxheW91dENoaWxkcmVuKQogICAgIExheW91dFVuaXQgZmllbGRzZXRCb3JkZXJC
ZWZvcmUgPSBib3JkZXJCZWZvcmUoKTsKICAgICBMYXlvdXRVbml0IGxlZ2VuZExvZ2ljYWxIZWln
aHQgPSBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQobGVnZW5kKTsKICAgICBMYXlvdXRVbml0IGxlZ2Vu
ZEFmdGVyTWFyZ2luID0gbWFyZ2luQWZ0ZXJGb3JDaGlsZChsZWdlbmQpOwotICAgIExheW91dFVu
aXQgdG9wUG9zaXRpb25Gb3JMZWdlbmQgPSBzdGQ6Om1heChMYXlvdXRVbml0KCksIChmaWVsZHNl
dEJvcmRlckJlZm9yZSAtIGxlZ2VuZExvZ2ljYWxIZWlnaHQpIC8gMik7CisgICAgTGF5b3V0VW5p
dCB0b3BQb3NpdGlvbkZvckxlZ2VuZCA9IHN0ZDo6bWF4KDBfbHUsIChmaWVsZHNldEJvcmRlckJl
Zm9yZSAtIGxlZ2VuZExvZ2ljYWxIZWlnaHQpIC8gMik7CiAgICAgTGF5b3V0VW5pdCBib3R0b21Q
b3NpdGlvbkZvckxlZ2VuZCA9IHRvcFBvc2l0aW9uRm9yTGVnZW5kICsgbGVnZW5kTG9naWNhbEhl
aWdodCArIGxlZ2VuZEFmdGVyTWFyZ2luOwogCiAgICAgLy8gUGxhY2UgdGhlIGxlZ2VuZCBub3cu
CkBAIC0zMzA3LDEyICszMzA3LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEJvcmRlckJv
eFJlY3RGb3JQYWludGluZyhMYXlvdXRSZWN0JiBwYWludFJlY3QpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAg
TGF5b3V0VW5pdCB5T2ZmID0gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCAobGVnZW5kLT5oZWlnaHQo
KSAtIFJlbmRlckJveDo6Ym9yZGVyQmVmb3JlKCkpIC8gMik7CisgICAgICAgIExheW91dFVuaXQg
eU9mZiA9IHN0ZDo6bWF4KDBfbHUsIChsZWdlbmQtPmhlaWdodCgpIC0gUmVuZGVyQm94Ojpib3Jk
ZXJCZWZvcmUoKSkgLyAyKTsKICAgICAgICAgcGFpbnRSZWN0LnNldEhlaWdodChwYWludFJlY3Qu
aGVpZ2h0KCkgLSB5T2ZmKTsKICAgICAgICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBU
b3BUb0JvdHRvbVdyaXRpbmdNb2RlKQogICAgICAgICAgICAgcGFpbnRSZWN0LnNldFkocGFpbnRS
ZWN0LnkoKSArIHlPZmYpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIExheW91dFVuaXQgeE9mZiA9
IHN0ZDo6bWF4KExheW91dFVuaXQoKSwgKGxlZ2VuZC0+d2lkdGgoKSAtIFJlbmRlckJveDo6Ym9y
ZGVyQmVmb3JlKCkpIC8gMik7CisgICAgICAgIExheW91dFVuaXQgeE9mZiA9IHN0ZDo6bWF4KDBf
bHUsIChsZWdlbmQtPndpZHRoKCkgLSBSZW5kZXJCb3g6OmJvcmRlckJlZm9yZSgpKSAvIDIpOwog
ICAgICAgICBwYWludFJlY3Quc2V0V2lkdGgocGFpbnRSZWN0LndpZHRoKCkgLSB4T2ZmKTsKICAg
ICAgICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBMZWZ0VG9SaWdodFdyaXRpbmdNb2Rl
KQogICAgICAgICAgICAgcGFpbnRSZWN0LnNldFgocGFpbnRSZWN0LngoKSArIHhPZmYpOwpAQCAt
MzM0Niw3ICszMzQ2LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6cGFpbnRSZWN0VG9DbGlw
T3V0RnJvbUJvcmRlcihjb25zdCBMYXlvdXRSZWN0JiBwYWludFJlY3QKIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6OmludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0KCkgY29uc3QKIHsKICAgICBhdXRv
KiByYXJlRGF0YSA9IGdldEJsb2NrUmFyZURhdGEoKnRoaXMpOwotICAgIHJldHVybiByYXJlRGF0
YSA/IHJhcmVEYXRhLT5tX2ludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0IDogTGF5b3V0VW5pdCgp
OworICAgIHJldHVybiByYXJlRGF0YSA/IHJhcmVEYXRhLT5tX2ludHJpbnNpY0JvcmRlckZvckZp
ZWxkc2V0IDogMF9sdTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6c2V0SW50cmluc2ljQm9yZGVy
Rm9yRmllbGRzZXQoTGF5b3V0VW5pdCBwYWRkaW5nKQpAQCAtMzQ1Myw3ICszNDUzLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0Q29udGVudEJveExvZ2ljYWxIZWlnaHRGb3JCb3hT
aXppbmcoc3RkOjpvcHRpb25hbDwKICAgICAgICAgcmVzdWx0IC09IGJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsSGVpZ2h0KCk7CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgLT0gaW50cmluc2ljQm9y
ZGVyRm9yRmllbGRzZXQoKTsKLSAgICByZXR1cm4gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCByZXN1
bHQpOworICAgIHJldHVybiBzdGQ6Om1heCgwX2x1LCByZXN1bHQpOwogfQogCiB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludEV4Y2x1ZGVkQ2hpbGRyZW5JbkJvcmRlcihQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAppbmRleCA0YzYxNDhiMWZkNzBhODc5YjE0MjkzNGMxNWVmZjE2OGFmNzMw
ZDRkLi5iMmU5YmFjY2MyOTNlZGQ5MDU0YTExOTdjNzI3NzBiYTJmMmJiYWI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxs
ZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUxpbmVzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENo
aWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCk7CisgICAgdmlydHVhbCB2
b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9n
aWNhbEhlaWdodCA9IDBfbHUpOwogCiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVMaW5lTGF5
b3V0UGF0aCgpIHsgfQogCkBAIC0xMjQsNDggKzEyNCw0OCBAQCBwdWJsaWM6CiAKICAgICAvLyBW
ZXJzaW9ucyB0aGF0IGNhbiBjb21wdXRlIGxpbmUgb2Zmc2V0cyB3aXRoIHRoZSBmcmFnbWVudCBh
bmQgcGFnZSBvZmZzZXQgcGFzc2VkIGluLiBVc2VkIGZvciBzcGVlZCB0byBhdm9pZCBoYXZpbmcg
dG8KICAgICAvLyBjb21wdXRlIHRoZSBmcmFnbWVudCBhbGwgb3ZlciBhZ2FpbiB3aGVuIHlvdSBh
bHJlYWR5IGtub3cgaXQuCi0gICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JM
aW5lSW5GcmFnbWVudChMYXlvdXRVbml0IHBvc2l0aW9uLCBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxk
SW5kZW50VGV4dCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAorICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNh
bFdpZHRoRm9yTGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9y
Tm90IHNob3VsZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMF9sdSkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lSW5G
cmFnbWVudChwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgZnJhZ21lbnQsIGxvZ2ljYWxIZWln
aHQpCiAgICAgICAgICAgICAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQocG9z
aXRpb24sIHNob3VsZEluZGVudFRleHQsIGZyYWdtZW50LCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAg
fQotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQoTGF5
b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0g
MCkgY29uc3QKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmVJbkZyYWdt
ZW50KExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0
LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQsIExheW91dFVuaXQgbG9naWNhbEhl
aWdodCA9IDBfbHUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zm
c2V0Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChmcmFnbWVu
dCksIHNob3VsZEluZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpOwogICAgIH0KLSAgICBMYXlvdXRV
bml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBwb3NpdGlv
biwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBw
b3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMF9sdSkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRp
b24sIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChmcmFnbWVudCksIHNob3VsZEluZGVudFRl
eHQsIGxvZ2ljYWxIZWlnaHQpOwogICAgIH0KLSAgICBMYXlvdXRVbml0IHN0YXJ0T2Zmc2V0Rm9y
TGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3Vs
ZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKKyAgICBMYXlvdXRVbml0IHN0YXJ0T2Zmc2V0Rm9y
TGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3Vs
ZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0ID0gMF9sdSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzdHls
ZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUlu
RnJhZ21lbnQocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIGZyYWdtZW50LCBsb2dpY2FsSGVp
Z2h0KQogICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZv
ckxpbmVJbkZyYWdtZW50KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudCwgbG9n
aWNhbEhlaWdodCk7CiAgICAgfQotICAgIExheW91dFVuaXQgZW5kT2Zmc2V0Rm9yTGluZUluRnJh
Z21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRl
eHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0ID0gMCkgY29uc3QKKyAgICBMYXlvdXRVbml0IGVuZE9mZnNldEZvckxpbmVJbkZyYWdt
ZW50KExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0
LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQsIExheW91dFVuaXQgbG9naWNhbEhl
aWdodCA9IDBfbHUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gIXN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudChw
b3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgZnJhZ21lbnQsIGxvZ2ljYWxIZWlnaHQpCiAgICAg
ICAgICAgICA6IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZUluRnJh
Z21lbnQocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIGZyYWdtZW50LCBsb2dpY2FsSGVpZ2h0
KTsKICAgICB9CiAKLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUo
TGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CisgICAgTGF5b3V0VW5pdCBhdmFpbGFi
bGVMb2dpY2FsV2lkdGhGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5v
dCBzaG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwX2x1KSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmVJbkZy
YWdtZW50KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudEF0QmxvY2tPZmZzZXQo
cG9zaXRpb24pLCBsb2dpY2FsSGVpZ2h0KTsKICAgICB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBz
aG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAorICAg
IExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9u
LCBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0ID0gMF9sdSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZz
ZXRGb3JMaW5lKHBvc2l0aW9uLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHBvc2l0aW9u
KSwgc2hvdWxkSW5kZW50VGV4dCwgbG9naWNhbEhlaWdodCk7CiAgICAgfQotICAgIExheW91dFVu
aXQgbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRl
eHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBj
b25zdAorICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQg
cG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQgPSAwX2x1KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHBv
c2l0aW9uKSwgc2hvdWxkSW5kZW50VGV4dCwgbG9naWNhbEhlaWdodCk7CiAgICAgfQotICAgIExh
eW91dFVuaXQgc3RhcnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRl
eHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBj
b25zdAorICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRp
b24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQgPSAwX2x1KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBz
aG91bGRJbmRlbnRUZXh0LCBsb2dpY2FsSGVpZ2h0KQogICAgICAgICAgICAgOiBsb2dpY2FsV2lk
dGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRl
eHQsIGxvZ2ljYWxIZWlnaHQpOwogICAgIH0KLSAgICBMYXlvdXRVbml0IGVuZE9mZnNldEZvckxp
bmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQs
IExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CisgICAgTGF5b3V0VW5pdCBlbmRP
ZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJ
bmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwX2x1KSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgbG9naWNhbEhl
aWdodCkKICAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRG
b3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBsb2dpY2FsSGVpZ2h0KTsKQEAgLTMz
OCwxMSArMzM4LDExIEBAIHByb3RlY3RlZDoKICAgICBlbnVtIFBhaW50QmxvY2tUeXBlIHsgUGFp
bnRBc0Jsb2NrLCBQYWludEFzSW5saW5lQmxvY2sgfTsKICAgICBib29sIHBhaW50Q2hpbGQoUmVu
ZGVyQm94JiwgUGFpbnRJbmZvJiBmb3JTZWxmLCBjb25zdCBMYXlvdXRQb2ludCYsIFBhaW50SW5m
byYgZm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0LCBQYWludEJsb2NrVHlwZSBwYWludFR5cGUg
PSBQYWludEFzQmxvY2spOwogICAgCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRG
b3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9v
bCBhcHBseVRleHRJbmRlbnQsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0Cisg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNh
bFRvcCwgTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQsIExheW91
dFVuaXQgbG9naWNhbEhlaWdodCA9IDBfbHUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
YWRqdXN0TG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShsb2dpY2FsUmlnaHRGbG9hdE9mZnNldEZv
ckxpbmUobG9naWNhbFRvcCwgZml4ZWRPZmZzZXQsIGxvZ2ljYWxIZWlnaHQpLCBhcHBseVRleHRJ
bmRlbnQpOwogICAgIH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShM
YXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlU
ZXh0SW5kZW50LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAorICAgIExheW91
dFVuaXQgbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5
b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQsIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCA9IDBfbHUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gYWRqdXN0TG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxMZWZ0RmxvYXRPZmZzZXRGb3JMaW5lKGxvZ2lj
YWxUb3AsIGZpeGVkT2Zmc2V0LCBsb2dpY2FsSGVpZ2h0KSwgYXBwbHlUZXh0SW5kZW50KTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4
IDMyZGRhY2ViMmU5MTNjODMxNmRkMDYwMTA3ZTk5YmNmMjBkNzVhOWYuLjY3Njg5YTA3NTFlMTg0
ODk0YzZhMGYyOGM5MmUyZDVkM2Y4MDNjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0xMDAsOCArMTAwLDggQEAgUmVuZGVyQmxvY2tGbG93
OjpNYXJnaW5JbmZvOjpNYXJnaW5JbmZvKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIExh
eW91dFVuaXQKIAogICAgIG1fZGlzY2FyZE1hcmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZv
cmVXaXRoQ2hpbGRyZW4gJiYgYmxvY2subXVzdERpc2NhcmRNYXJnaW5CZWZvcmUoKTsKIAotICAg
IG1fcG9zaXRpdmVNYXJnaW4gPSAobV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJl
biAmJiAhYmxvY2subXVzdERpc2NhcmRNYXJnaW5CZWZvcmUoKSkgPyBibG9jay5tYXhQb3NpdGl2
ZU1hcmdpbkJlZm9yZSgpIDogTGF5b3V0VW5pdCgpOwotICAgIG1fbmVnYXRpdmVNYXJnaW4gPSAo
bV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJlbiAmJiAhYmxvY2subXVzdERpc2Nh
cmRNYXJnaW5CZWZvcmUoKSkgPyBibG9jay5tYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIDogTGF5
b3V0VW5pdCgpOworICAgIG1fcG9zaXRpdmVNYXJnaW4gPSAobV9jYW5Db2xsYXBzZU1hcmdpbkJl
Zm9yZVdpdGhDaGlsZHJlbiAmJiAhYmxvY2subXVzdERpc2NhcmRNYXJnaW5CZWZvcmUoKSkgPyBi
bG9jay5tYXhQb3NpdGl2ZU1hcmdpbkJlZm9yZSgpIDogMF9sdTsKKyAgICBtX25lZ2F0aXZlTWFy
Z2luID0gKG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hpbGRyZW4gJiYgIWJsb2NrLm11
c3REaXNjYXJkTWFyZ2luQmVmb3JlKCkpID8gYmxvY2subWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUo
KSA6IDBfbHU7CiB9CiAKIFJlbmRlckJsb2NrRmxvdzo6UmVuZGVyQmxvY2tGbG93KEVsZW1lbnQm
IGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCkBAIC04NDUsNyArODQ1LDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJCbG9ja0Zsb3c6Om1hcmdpbk9mZnNldEZvclNlbGZDb2xsYXBzaW5nQmxvY2so
KQogICAgIFJlbmRlckJsb2NrRmxvdyogcGFyZW50QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9j
a0Zsb3c+KHBhcmVudCgpKTsKICAgICBpZiAocGFyZW50QmxvY2sgJiYgc3R5bGUoKS5jbGVhcigp
ICE9IENsZWFyOjpOb25lICYmIHBhcmVudEJsb2NrLT5nZXRDbGVhckRlbHRhKCp0aGlzLCBsb2dp
Y2FsSGVpZ2h0KCkpKQogICAgICAgICByZXR1cm4gbWFyZ2luVmFsdWVzRm9yQ2hpbGQoKnRoaXMp
LnBvc2l0aXZlTWFyZ2luQmVmb3JlKCk7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoKTsKKyAgICBy
ZXR1cm4gMF9sdTsKIH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmRldGVybWluZUxvZ2ljYWxM
ZWZ0UG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBBcHBseUxheW91dERlbHRhTW9k
ZSBhcHBseURlbHRhKQpAQCAtODgyLDcgKzg4Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojph
ZGp1c3RGbG9hdGluZ0Jsb2NrKGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8pCiAgICAgLy8g
Zm9yIGJ5IHNpbXBseSBjYWxsaW5nIGNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZS4gU2VlCiAg
ICAgLy8gaHR0cDovL3d3dy5oaXhpZS5jaC90ZXN0cy9hZGhvYy9jc3MvYm94L2Jsb2NrL21hcmdp
bi1jb2xsYXBzZS8wNDYuaHRtbCBmb3IKICAgICAvLyBhbiBleGFtcGxlIG9mIHRoaXMgc2NlbmFy
aW8uCi0gICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNl
V2l0aE1hcmdpbkJlZm9yZSgpID8gTGF5b3V0VW5pdCgpIDogbWFyZ2luSW5mby5tYXJnaW4oKTsK
KyAgICBMYXlvdXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRo
TWFyZ2luQmVmb3JlKCkgPyAwX2x1IDogbWFyZ2luSW5mby5tYXJnaW4oKTsKICAgICBzZXRMb2dp
Y2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSArIG1hcmdpbk9mZnNldCk7CiAgICAgcG9zaXRpb25O
ZXdGbG9hdHMoKTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSAtIG1hcmdp
bk9mZnNldCk7CkBAIC0xMDg0LDcgKzEwODQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxv
dzo6Y29sbGFwc2VNYXJnaW5zV2l0aENoaWxkSW5mbyhSZW5kZXJCb3gqIGNoaWxkLCBSZW5kZQog
ICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGF0IHRoZSBiZWZvcmUgc2lkZSBvZiB0aGUgYmxvY2sg
YW5kIHdlIGNvbGxhcHNlLCBpZ25vcmUgdGhlIGNvbXB1dGVkIG1hcmdpbgogICAgICAgICAgICAg
Ly8gYW5kIGp1c3QgYWRkIHRoZSBjaGlsZCBtYXJnaW4gdG8gdGhlIGNvbnRhaW5lciBoZWlnaHQu
IFRoaXMgd2lsbCBjb3JyZWN0bHkgcG9zaXRpb24KICAgICAgICAgICAgIC8vIHRoZSBjaGlsZCBp
bnNpZGUgdGhlIGNvbnRhaW5lci4KLSAgICAgICAgICAgIExheW91dFVuaXQgc2VwYXJhdGVNYXJn
aW4gPSAhbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSA/IG1hcmdpbklu
Zm8ubWFyZ2luKCkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCk7CisgICAgICAgICAgICBMYXlv
dXRVbml0IHNlcGFyYXRlTWFyZ2luID0gIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoTWFyZ2lu
QmVmb3JlKCkgPyBtYXJnaW5JbmZvLm1hcmdpbigpIDogMF9sdTsKICAgICAgICAgICAgIHNldExv
Z2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpICsgc2VwYXJhdGVNYXJnaW4gKyBtYXJnaW5CZWZv
cmVGb3JDaGlsZCgqY2hpbGQpKTsKICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVp
Z2h0KCk7CiAgICAgICAgIH0gZWxzZSBpZiAoIW1hcmdpbkluZm8uZGlzY2FyZE1hcmdpbigpICYm
ICghbWFyZ2luSW5mby5hdEJlZm9yZVNpZGVPZkJsb2NrKCkKQEAgLTE1MjYsNyArMTUyNiw3IEBA
IExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94JiBj
aGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsCiAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gKGNo
ZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLnN0eWxlKCkuYnJlYWtBZnRlcigpID09IEJyZWFrQmV0
d2Vlbjo6Q29sdW1uKQogICAgICAgICB8fCAoY2hlY2tQYWdlQnJlYWtzICYmIGFsd2F5c1BhZ2VC
cmVhayhjaGlsZC5zdHlsZSgpLmJyZWFrQWZ0ZXIoKSkpOwogICAgIGlmIChjaGVja0FmdGVyQWx3
YXlzICYmIGluTm9ybWFsRmxvdyhjaGlsZCkgJiYgaGFzTmV4dFBhZ2UobG9naWNhbE9mZnNldCwg
SW5jbHVkZVBhZ2VCb3VuZGFyeSkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQg
PSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gTGF5b3V0VW5pdCgp
IDogbWFyZ2luSW5mby5tYXJnaW4oKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQg
PSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gMF9sdSA6IG1hcmdp
bkluZm8ubWFyZ2luKCk7CiAKICAgICAgICAgLy8gU28gb3VyIG1hcmdpbiBkb2Vzbid0IHBhcnRp
Y2lwYXRlIGluIHRoZSBuZXh0IGNvbGxhcHNpbmcgc3RlcHMuCiAgICAgICAgIG1hcmdpbkluZm8u
Y2xlYXJNYXJnaW4oKTsKQEAgLTE3NDQsNyArMTc0NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gs
IExhCiAgICAgICAgICAgICAmJiAhaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWlzVGFibGVD
ZWxsKCkpIHsKICAgICAgICAgICAgIGF1dG8gZmlyc3RSb290Qm94ID0gdGhpcy0+Zmlyc3RSb290
Qm94KCk7CiAgICAgICAgICAgICBhdXRvIGZpcnN0Um9vdEJveE92ZXJmbG93UmVjdCA9IGZpcnN0
Um9vdEJveC0+bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdChmaXJzdFJvb3RCb3gtPmxpbmVUb3Ao
KSwgZmlyc3RSb290Qm94LT5saW5lQm90dG9tKCkpOwotICAgICAgICAgICAgYXV0byBmaXJzdExp
bmVVcHBlck92ZXJoYW5nID0gc3RkOjptYXgoLWZpcnN0Um9vdEJveE92ZXJmbG93UmVjdC55KCks
IExheW91dFVuaXQoKSk7CisgICAgICAgICAgICBhdXRvIGZpcnN0TGluZVVwcGVyT3Zlcmhhbmcg
PSBzdGQ6Om1heCgtZmlyc3RSb290Qm94T3ZlcmZsb3dSZWN0LnkoKSwgMF9sdSk7CiAgICAgICAg
ICAgICBpZiAobmVlZHNBcHBsZU1haWxQYWdpbmF0aW9uUXVpcmsoKmxpbmVCb3gpKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dChyZW1haW5p
bmdMb2dpY2FsSGVpZ2h0ICsgbG9naWNhbE9mZnNldCArIGZpcnN0TGluZVVwcGVyT3Zlcmhhbmcp
OwpAQCAtMjM1Myw4ICsyMzUzLDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVMb2dp
Y2FsTG9jYXRpb25Gb3JGbG9hdChGbG9hdGluZ09iamVjdCYgZmxvYXRpbmdPYmoKICAgICB9CiAg
ICAgCiAgICAgaWYgKGNoaWxkQm94LnN0eWxlKCkuZmxvYXRpbmcoKSA9PSBGbG9hdDo6TGVmdCkg
ewotICAgICAgICBMYXlvdXRVbml0IGhlaWdodFJlbWFpbmluZ0xlZnQgPSAxOwotICAgICAgICBM
YXlvdXRVbml0IGhlaWdodFJlbWFpbmluZ1JpZ2h0ID0gMTsKKyAgICAgICAgTGF5b3V0VW5pdCBo
ZWlnaHRSZW1haW5pbmdMZWZ0ID0gMV9sdTsKKyAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHRSZW1h
aW5pbmdSaWdodCA9IDFfbHU7CiAgICAgICAgIGZsb2F0TG9naWNhbExlZnQgPSBsb2dpY2FsTGVm
dE9mZnNldEZvclBvc2l0aW9uaW5nRmxvYXQobG9naWNhbFRvcE9mZnNldCwgbG9naWNhbExlZnRP
ZmZzZXQsIGZhbHNlLCAmaGVpZ2h0UmVtYWluaW5nTGVmdCk7CiAgICAgICAgIHdoaWxlIChsb2dp
Y2FsUmlnaHRPZmZzZXRGb3JQb3NpdGlvbmluZ0Zsb2F0KGxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2lj
YWxSaWdodE9mZnNldCwgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdSaWdodCkgLSBmbG9hdExvZ2lj
YWxMZWZ0IDwgZmxvYXRMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgIGxvZ2ljYWxUb3BPZmZz
ZXQgKz0gc3RkOjptaW4oaGVpZ2h0UmVtYWluaW5nTGVmdCwgaGVpZ2h0UmVtYWluaW5nUmlnaHQp
OwpAQCAtMjM2OCw4ICsyMzY4LDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVMb2dp
Y2FsTG9jYXRpb25Gb3JGbG9hdChGbG9hdGluZ09iamVjdCYgZmxvYXRpbmdPYmoKICAgICAgICAg
fQogICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gc3RkOjptYXgobG9naWNhbExlZnRPZmZzZXQg
LSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbExlZnQoKSwgZmxvYXRMb2dpY2FsTGVmdCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHRSZW1haW5pbmdMZWZ0ID0gMTsKLSAg
ICAgICAgTGF5b3V0VW5pdCBoZWlnaHRSZW1haW5pbmdSaWdodCA9IDE7CisgICAgICAgIExheW91
dFVuaXQgaGVpZ2h0UmVtYWluaW5nTGVmdCA9IDFfbHU7CisgICAgICAgIExheW91dFVuaXQgaGVp
Z2h0UmVtYWluaW5nUmlnaHQgPSAxX2x1OwogICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yUG9zaXRpb25pbmdGbG9hdChsb2dpY2FsVG9wT2Zmc2V0LCBsb2dp
Y2FsUmlnaHRPZmZzZXQsIGZhbHNlLCAmaGVpZ2h0UmVtYWluaW5nUmlnaHQpOwogICAgICAgICB3
aGlsZSAoZmxvYXRMb2dpY2FsTGVmdCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yUG9zaXRpb25pbmdG
bG9hdChsb2dpY2FsVG9wT2Zmc2V0LCBsb2dpY2FsTGVmdE9mZnNldCwgZmFsc2UsICZoZWlnaHRS
ZW1haW5pbmdMZWZ0KSA8IGZsb2F0TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICBsb2dpY2Fs
VG9wT2Zmc2V0ICs9IHN0ZDo6bWluKGhlaWdodFJlbWFpbmluZ0xlZnQsIGhlaWdodFJlbWFpbmlu
Z1JpZ2h0KTsKQEAgLTI3MjAsOCArMjcyMCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGRJ
bnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2tGbG93KiBwcmV2LCBSZW5kZXJCbG9ja0Zsb3cqCiAg
ICAgICAgICAgICAgICAgLy8gaW50byBhY2NvdW50LiBPbmx5IGFwcGx5IHRoaXMgY29kZSBpZiBw
cmV2IGlzIHRoZSBwYXJlbnQsIHNpbmNlIG90aGVyd2lzZSB0aGUgbGVmdCBtYXJnaW4KICAgICAg
ICAgICAgICAgICAvLyB3aWxsIGdldCBhcHBsaWVkIHR3aWNlLgogICAgICAgICAgICAgICAgIExh
eW91dFNpemUgb2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKQotICAgICAgICAgICAg
ICAgICAgICA/IExheW91dFNpemUobG9naWNhbExlZnRPZmZzZXQgLSAocHJldiAhPSBjb250YWlu
ZXIgPyBwcmV2LT5tYXJnaW5MZWZ0KCkgOiBMYXlvdXRVbml0KCkpLCBsb2dpY2FsVG9wT2Zmc2V0
KQotICAgICAgICAgICAgICAgICAgICA6IExheW91dFNpemUobG9naWNhbFRvcE9mZnNldCwgbG9n
aWNhbExlZnRPZmZzZXQgLSAocHJldiAhPSBjb250YWluZXIgPyBwcmV2LT5tYXJnaW5Ub3AoKSA6
IExheW91dFVuaXQoKSkpOworICAgICAgICAgICAgICAgICAgICA/IExheW91dFNpemUobG9naWNh
bExlZnRPZmZzZXQgLSAocHJldiAhPSBjb250YWluZXIgPyBwcmV2LT5tYXJnaW5MZWZ0KCkgOiAw
X2x1KSwgbG9naWNhbFRvcE9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgOiBMYXlvdXRTaXpl
KGxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0IC0gKHByZXYgIT0gY29udGFpbmVy
ID8gcHJldi0+bWFyZ2luVG9wKCkgOiAwX2x1KSk7CiAKICAgICAgICAgICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cy0+YWRkKGZsb2F0aW5nT2JqZWN0LmNvcHlUb05ld0NvbnRhaW5lcihvZmZzZXQp
KTsKICAgICAgICAgICAgIH0KQEAgLTI4MTcsNyArMjgxNyw3IEBAIExheW91dFVuaXQgUmVuZGVy
QmxvY2tGbG93OjpnZXRDbGVhckRlbHRhKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgbG9n
aWNhbFRvCiAgICAgfQogCiAgICAgLy8gV2UgYWxzbyBjbGVhciBmbG9hdHMgaWYgd2UgYXJlIHRv
byBiaWcgdG8gc2l0IG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBmbG9hdCAoYW5kIHdpc2ggdG8gYXZv
aWQgZmxvYXRzIGJ5IGRlZmF1bHQpLgotICAgIExheW91dFVuaXQgcmVzdWx0ID0gY2xlYXJTZXQg
PyBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsQm90dG9tIC0gbG9naWNhbFRvcCkgOiBM
YXlvdXRVbml0KCk7CisgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjbGVhclNldCA/IHN0ZDo6bWF4
PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wKSA6IDBfbHU7CiAgICAg
aWYgKCFyZXN1bHQgJiYgY2hpbGQuYXZvaWRzRmxvYXRzKCkpIHsKICAgICAgICAgTGF5b3V0VW5p
dCBuZXdMb2dpY2FsVG9wID0gbG9naWNhbFRvcDsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKQEAg
LTMyMTksNyArMzIxOSw3IEBAIHN0YXRpYyBpbnQgZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIGludCBsaW5lQ291bnQsIGJvCiAgICAgaWYgKGJsb2Nr
LmNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgZm9yIChhdXRvKiBib3ggPSBibG9jay5maXJz
dFJvb3RCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRSb290Qm94KCkpIHsKICAgICAgICAgICAg
IGlmICgrK2NvdW50ID09IGxpbmVDb3VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYm94LT5s
aW5lQm90dG9tKCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay5ib3JkZXJCb3R0b20oKSArIGJs
b2NrLnBhZGRpbmdCb3R0b20oKSkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBib3gtPmxpbmVCb3R0b20oKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2NrLmJvcmRlckJv
dHRvbSgpICsgYmxvY2sucGFkZGluZ0JvdHRvbSgpKSA6IDBfbHUpOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgUmVuZGVyQm94KiBub3JtYWxGbG93Q2hpbGRXaXRob3V0TGluZXMg
PSBudWxscHRyOwpAQCAtMzIyNyw3ICszMjI3LDcgQEAgc3RhdGljIGludCBnZXRIZWlnaHRGb3JM
aW5lQ291bnQoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9jaywgaW50IGxpbmVDb3VudCwgYm8K
ICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpvYmopICYmIHNob3VsZENoZWNr
TGluZXMoZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93Pigqb2JqKSkpIHsKICAgICAgICAgICAgICAg
ICBpbnQgcmVzdWx0ID0gZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KGRvd25jYXN0PFJlbmRlckJsb2Nr
Rmxvdz4oKm9iaiksIGxpbmVDb3VudCwgZmFsc2UsIGNvdW50KTsKICAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgb2Jq
LT55KCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay5ib3JkZXJCb3R0b20oKSArIGJsb2NrLnBh
ZGRpbmdCb3R0b20oKSkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0ICsgb2JqLT55KCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay5ib3JkZXJCb3R0
b20oKSArIGJsb2NrLnBhZGRpbmdCb3R0b20oKSkgOiAwX2x1KTsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIW9iai0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAg
ICAgICAgIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyA9IG9iajsKICAgICAgICAgfQpAQCAt
MzgzMiw3ICszODMyLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrRm9yUGFnaW5hdGlv
bkxvZ2ljYWxIZWlnaHRDaGFuZ2UoYm9vbCYgcmVsYXlvdXRDaGlsZHIKICAgICBpZiAoUmVuZGVy
TXVsdGlDb2x1bW5GbG93KiBmcmFnbWVudGVkRmxvdyA9IG11bHRpQ29sdW1uRmxvdygpKSB7CiAg
ICAgICAgIExheW91dFVuaXQgbmV3Q29sdW1uSGVpZ2h0OwogICAgICAgICBpZiAoaGFzRGVmaW5p
dGVMb2dpY2FsSGVpZ2h0KCkgfHwgdmlldygpLmZyYW1lVmlldygpLnBhZ2luYXRpb24oKS5tb2Rl
ICE9IFBhZ2luYXRpb246OlVucGFnaW5hdGVkKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXB1dGVk
VmFsdWVzID0gY29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCgpLCBsb2dpY2FsVG9wKCkp
OworICAgICAgICAgICAgYXV0byBjb21wdXRlZFZhbHVlcyA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0
KDBfbHUsIGxvZ2ljYWxUb3AoKSk7CiAgICAgICAgICAgICBuZXdDb2x1bW5IZWlnaHQgPSBzdGQ6
Om1heDxMYXlvdXRVbml0Pihjb21wdXRlZFZhbHVlcy5tX2V4dGVudCAtIGJvcmRlckFuZFBhZGRp
bmdMb2dpY2FsSGVpZ2h0KCkgLSBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCksIDApOwogICAgICAg
ICAgICAgaWYgKGZyYWdtZW50ZWRGbG93LT5jb2x1bW5IZWlnaHRBdmFpbGFibGUoKSAhPSBuZXdD
b2x1bW5IZWlnaHQpCiAgICAgICAgICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CkBA
IC0zODUwLDcgKzM4NTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGb3JQYWdpbmF0
aW9uTG9naWNhbEhlaWdodENoYW5nZShib29sJiByZWxheW91dENoaWxkcgogICAgICAgICAvLyBp
dCdzIHVua25vd24sIHdlIG5lZWQgdG8gcHJldmVudCB0aGUgcGFnaW5hdGlvbiBjb2RlIGZyb20g
YXNzdW1pbmcgcGFnZSBicmVha3MgZXZlcnl3aGVyZQogICAgICAgICAvLyBhbmQgdGhlcmVieSBl
YXRpbmcgZXZlcnkgdG9wIG1hcmdpbi4gSXQgc2hvdWxkIGJlIHRyaXZpYWwgdG8gY2xlYW4gdXAg
YW5kIGdldCByaWQgb2YgdGhpcwogICAgICAgICAvLyBoYWNrIG9uY2UgdGhlIG9sZCBtdWx0aWNv
bCBpbXBsZW1lbnRhdGlvbiBpcyBnb25lIChzZWUgYWxzbyBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0
U3RhdGVGb3JQYWdpbmF0aW9uKS4KLSAgICAgICAgcGFnZUxvZ2ljYWxIZWlnaHQgPSBmcmFnbWVu
dGVkRmxvdy5pc1BhZ2VMb2dpY2FsSGVpZ2h0S25vd24oKSA/IExheW91dFVuaXQoMSkgOiBMYXlv
dXRVbml0KDApOworICAgICAgICBwYWdlTG9naWNhbEhlaWdodCA9IGZyYWdtZW50ZWRGbG93Lmlz
UGFnZUxvZ2ljYWxIZWlnaHRLbm93bigpID8gMV9sdSA6IDBfbHU7CiAKICAgICAgICAgcGFnZUxv
Z2ljYWxIZWlnaHRDaGFuZ2VkID0gZnJhZ21lbnRlZEZsb3cucGFnZUxvZ2ljYWxTaXplQ2hhbmdl
ZCgpOwogICAgIH0KQEAgLTQwNTIsNyArNDA1Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpj
b21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2Fs
CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgUmVu
ZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IHRoaXMtPmNvbnRhaW5pbmdCbG9jaygpOwotICAg
IExheW91dFVuaXQgY3cgPSBjb250YWluaW5nQmxvY2sgPyBjb250YWluaW5nQmxvY2stPmNvbnRl
bnRMb2dpY2FsV2lkdGgoKSA6IExheW91dFVuaXQoKTsKKyAgICBMYXlvdXRVbml0IGN3ID0gY29u
dGFpbmluZ0Jsb2NrID8gY29udGFpbmluZ0Jsb2NrLT5jb250ZW50TG9naWNhbFdpZHRoKCkgOiAw
X2x1OwogCiAgICAgLy8gSWYgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUsIHdlIHdhbnQg
dG8gaWdub3JlIGFsbCB3aGl0ZS1zcGFjZS4KICAgICAvLyBBbHNvIHN0cmlwIHNwYWNlcyBpZiB3
ZSBwcmV2aW91c2x5IGhhZCB0ZXh0IHRoYXQgZW5kZWQgaW4gYSB0cmFpbGluZyBzcGFjZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAppbmRleCBhZjY4YmEwNTEz
Nzk0YTAxNjIwMzJhMDExZDQ2YTlmYTk5NGJhMGVlLi40ZTQwYjExNGQ4NGUwZDJkZTQ3ZDcwYjE2
OGYwNmEwMGE3NWJjMWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5oCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJCbG9ja0Zsb3coRG9j
dW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJCbG9ja0Zsb3coKTsK
ICAgICAgICAgCi0gICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExh
eW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVycmlkZTsKKyAgICB2b2lkIGxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdo
dCA9IDBfbHUpIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB3aWxsQmVEZXN0cm95
ZWQoKSBvdmVycmlkZTsKQEAgLTM5OCw3ICszOTgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBw
dXNoVG9OZXh0UGFnZVdpdGhNaW5pbXVtTG9naWNhbEhlaWdodChMYXlvdXRVbml0JiBhZGp1c3Rt
ZW50LCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQsIExheW91dFVuaXQgbWluaW11bUxvZ2ljYWxI
ZWlnaHQpIGNvbnN0OwogCiAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQg
Y2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0
IHBhZ2UvY29sdW1uLgotICAgIExheW91dFVuaXQgYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQo
UmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBMYXlvdXRVbml0IGJl
Zm9yZU1hcmdpbiA9IExheW91dFVuaXQoKSwgTGF5b3V0VW5pdCBhZnRlck1hcmdpbiA9IExheW91
dFVuaXQoKSk7CisgICAgTGF5b3V0VW5pdCBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5k
ZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQsIExheW91dFVuaXQgYmVmb3Jl
TWFyZ2luID0gMF9sdSwgTGF5b3V0VW5pdCBhZnRlck1hcmdpbiA9IDBfbHUpOwogICAgIExheW91
dFVuaXQgYWRqdXN0QmxvY2tDaGlsZEZvclBhZ2luYXRpb24oTGF5b3V0VW5pdCBsb2dpY2FsVG9w
QWZ0ZXJDbGVhciwgTGF5b3V0VW5pdCBlc3RpbWF0ZVdpdGhvdXRQYWdpbmF0aW9uLCBSZW5kZXJC
b3gmIGNoaWxkLCBib29sIGF0QmVmb3JlU2lkZU9mQmxvY2spOwogICAgIExheW91dFVuaXQgYXBw
bHlCZWZvcmVCcmVhayhSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQp
OyAvLyBJZiB0aGUgY2hpbGQgaGFzIGEgYmVmb3JlIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5
UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCiAgICAg
TGF5b3V0VW5pdCBhcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBs
b2dpY2FsT2Zmc2V0LCBNYXJnaW5JbmZvJik7IC8vIElmIHRoZSBjaGlsZCBoYXMgYW4gYWZ0ZXIg
YnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IG9mZnNldCB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9m
IHRoZSBuZXh0IHBhZ2UvY29sdW1uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCA4MDA1MjUwNGQ3NmYwYmFhYTU0NTZmMTFk
NzlkNDA4NWE5MzRjZTczLi5lMDNmN2IyY2M4ZjlkODJhMDE0MjViNjc3NGVkZWFhYTc0YzZlOTY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcApAQCAtMTYwOSw4ICsxNjA5LDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxpbmtU
b0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgICAgICAg
ICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5hbGlnbkJveGVzSW5CbG9ja0RpcmVjdGlvbihibG9j
a0xvZ2ljYWxIZWlnaHQsIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpOwog
ICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRMaW5lVG9wQm90dG9tUG9zaXRp
b25zKGJsb2NrTG9naWNhbEhlaWdodCwgYmxvY2tMb2dpY2FsSGVpZ2h0LCBibG9ja0xvZ2ljYWxI
ZWlnaHQsIGJsb2NrTG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xp
bmVCb3gtPnNldFBhZ2luYXRlZExpbmVXaWR0aChhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250
ZW50KGJsb2NrTG9naWNhbEhlaWdodCkpOwotICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2dpY2Fs
TGF5b3V0T3ZlcmZsb3coMCwgYmxvY2tMb2dpY2FsSGVpZ2h0LCAxLCBib3R0b21MYXlvdXRPdmVy
ZmxvdyAtIGJsb2NrTG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IGxvZ2lj
YWxWaXN1YWxPdmVyZmxvdygwLCBibG9ja0xvZ2ljYWxIZWlnaHQsIDEsIGJvdHRvbVZpc3VhbE92
ZXJmbG93IC0gYmxvY2tMb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbG9n
aWNhbExheW91dE92ZXJmbG93KDBfbHUsIGJsb2NrTG9naWNhbEhlaWdodCwgMV9sdSwgYm90dG9t
TGF5b3V0T3ZlcmZsb3cgLSBibG9ja0xvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgTGF5b3V0
UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3coMF9sdSwgYmxvY2tMb2dpY2FsSGVpZ2h0LCAxX2x1
LCBib3R0b21WaXN1YWxPdmVyZmxvdyAtIGJsb2NrTG9naWNhbEhlaWdodCk7CiAgICAgICAgICAg
ICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhsb2dp
Y2FsTGF5b3V0T3ZlcmZsb3csIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdywgdHJhaWxpbmdGbG9hdHNM
aW5lQm94LT5saW5lVG9wKCksIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+bGluZUJvdHRvbSgpKTsK
ICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5mcmFnbWVudGVkRmxvdygpKQogICAgICAgICAg
ICAgICAgIHVwZGF0ZUZyYWdtZW50Rm9yTGluZSh0cmFpbGluZ0Zsb2F0c0xpbmVCb3gpOwpAQCAt
MjA4MCw3ICsyMDgwLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJmbG93RnJvbUlu
bGluZUNoaWxkcmVuKCkKICAgICAgICAgU2ltcGxlTGluZUxheW91dDo6Y29sbGVjdEZsb3dPdmVy
ZmxvdygqdGhpcywgKmxheW91dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgTGF5b3V0
VW5pdCBlbmRQYWRkaW5nID0gaGFzT3ZlcmZsb3dDbGlwKCkgPyBwYWRkaW5nRW5kKCkgOiBMYXlv
dXRVbml0KCk7CisgICAgTGF5b3V0VW5pdCBlbmRQYWRkaW5nID0gaGFzT3ZlcmZsb3dDbGlwKCkg
PyBwYWRkaW5nRW5kKCkgOiAwX2x1OwogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGZpbmQgYW5vdGhl
ciB3YXkgdG8gZG8gdGhpcywgc2luY2Ugc2Nyb2xsYmFycyBjb3VsZCBzaG93IHdoZW4gd2UgZG9u
J3Qgd2FudCB0aGVtIHRvLgogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhZW5kUGFkZGlu
ZyAmJiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiBz
dHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgZW5kUGFkZGluZyA9IDE7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDU4MmQ1YWYzODU0YzM1
YzNhNjZiNWI0MDM4MThmNjI0NDZiZmE1YWMuLmJmODhiZDUwZTlhMTdlM2Q3YTU2ZGJlODM4ZDJi
NTA0M2RmMDgyMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0x
MTY1LDcgKzExNjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6YWRqdXN0Q29udGVudEJveExv
Z2ljYWxIZWlnaHRGb3JCb3hTaXppbmcoc3RkOjpvcHRpb25hbDxMYQogICAgIExheW91dFVuaXQg
cmVzdWx0ID0gaGVpZ2h0LnZhbHVlKCk7CiAgICAgaWYgKHN0eWxlKCkuYm94U2l6aW5nKCkgPT0g
Qm94U2l6aW5nOjpCb3JkZXJCb3gpCiAgICAgICAgIHJlc3VsdCAtPSBib3JkZXJBbmRQYWRkaW5n
TG9naWNhbEhlaWdodCgpOwotICAgIHJldHVybiBzdGQ6Om1heChMYXlvdXRVbml0KCksIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KDBfbHUsIHJlc3VsdCk7CiB9CiAKIC8vIEhpdCBUZXN0
aW5nCkBAIC0xODAxLDI0ICsxODAxLDI0IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpjbGlwUmVj
dChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpCiAKICAg
ICBpZiAoIXN0eWxlKCkuY2xpcExlZnQoKS5pc0F1dG8oKSkgewogICAgICAgICBMYXlvdXRVbml0
IGMgPSB2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmNsaXBMZWZ0KCksIGJvcmRlckJveFJlY3Qud2lk
dGgoKSk7Ci0gICAgICAgIGNsaXBSZWN0Lm1vdmUoYywgMCk7Ci0gICAgICAgIGNsaXBSZWN0LmNv
bnRyYWN0KGMsIDApOworICAgICAgICBjbGlwUmVjdC5tb3ZlKGMsIDBfbHUpOworICAgICAgICBj
bGlwUmVjdC5jb250cmFjdChjLCAwX2x1KTsKICAgICB9CiAKICAgICAvLyBXZSBkb24ndCB1c2Ug
dGhlIGZyYWdtZW50LXNwZWNpZmljIGJvcmRlciBib3gncyB3aWR0aCBhbmQgaGVpZ2h0IHNpbmNl
IGNsaXAgb2Zmc2V0cyBhcmUgKHN0dXBpZGx5KSBzcGVjaWZpZWQKICAgICAvLyBmcm9tIHRoZSBs
ZWZ0IGFuZCB0b3AgZWRnZXMuIFRoZXJlZm9yZSBpdCdzIGJldHRlciB0byBhdm9pZCBjb25zdHJh
aW5pbmcgdG8gc21hbGxlciB3aWR0aHMgYW5kIGhlaWdodHMuCiAKICAgICBpZiAoIXN0eWxlKCku
Y2xpcFJpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KHdpZHRoKCkg
LSB2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmNsaXBSaWdodCgpLCB3aWR0aCgpKSwgMCk7CisgICAg
ICAgIGNsaXBSZWN0LmNvbnRyYWN0KHdpZHRoKCkgLSB2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmNs
aXBSaWdodCgpLCB3aWR0aCgpKSwgMF9sdSk7CiAKICAgICBpZiAoIXN0eWxlKCkuY2xpcFRvcCgp
LmlzQXV0bygpKSB7CiAgICAgICAgIExheW91dFVuaXQgYyA9IHZhbHVlRm9yTGVuZ3RoKHN0eWxl
KCkuY2xpcFRvcCgpLCBib3JkZXJCb3hSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgY2xpcFJlY3Qu
bW92ZSgwLCBjKTsKLSAgICAgICAgY2xpcFJlY3QuY29udHJhY3QoMCwgYyk7CisgICAgICAgIGNs
aXBSZWN0Lm1vdmUoMF9sdSwgYyk7CisgICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KDBfbHUsIGMp
OwogICAgIH0KIAogICAgIGlmICghc3R5bGUoKS5jbGlwQm90dG9tKCkuaXNBdXRvKCkpCi0gICAg
ICAgIGNsaXBSZWN0LmNvbnRyYWN0KDAsIGhlaWdodCgpIC0gdmFsdWVGb3JMZW5ndGgoc3R5bGUo
KS5jbGlwQm90dG9tKCksIGhlaWdodCgpKSk7CisgICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KDBf
bHUsIGhlaWdodCgpIC0gdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5jbGlwQm90dG9tKCksIGhlaWdo
dCgpKSk7CiAKICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9CkBAIC0xODI4LDcgKzE4MjgsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlv
dXRVbml0IGNoaWxkTWFyZ2luU3RhcgogICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjb250
YWluaW5nQmxvY2tGcmFnbWVudCA9IG51bGxwdHI7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
UG9zaXRpb24gPSBsb2dpY2FsVG9wKCk7CiAgICAgaWYgKGZyYWdtZW50KSB7Ci0gICAgICAgIExh
eW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZyYWdtZW50ID0gZnJhZ21lbnQgPyBmcmFn
bWVudC0+bG9naWNhbFRvcEZvckZyYWdtZW50ZWRGbG93Q29udGVudCgpIC0gb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSgpIDogTGF5b3V0VW5pdCgpOworICAgICAgICBMYXlvdXRVbml0
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGcmFnbWVudCA9IGZyYWdtZW50ID8gZnJhZ21lbnQtPmxv
Z2ljYWxUb3BGb3JGcmFnbWVudGVkRmxvd0NvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGaXJzdFBhZ2UoKSA6IDBfbHU7CiAgICAgICAgIGxvZ2ljYWxUb3BQb3NpdGlvbiA9IHN0ZDo6
bWF4KGxvZ2ljYWxUb3BQb3NpdGlvbiwgbG9naWNhbFRvcFBvc2l0aW9uICsgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZyYWdtZW50KTsKICAgICAgICAgY29udGFpbmluZ0Jsb2NrRnJhZ21lbnQgPSBj
Yi5jbGFtcFRvU3RhcnRBbmRFbmRGcmFnbWVudHMoZnJhZ21lbnQpOwogICAgIH0KQEAgLTE4NzMs
NyArMTg3Myw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2Fs
V2lkdGhGb3JDb250ZW50KCkgY29uc3QKIAogICAgIGlmIChSZW5kZXJCbG9jayogY2IgPSBjb250
YWluaW5nQmxvY2soKSkKICAgICAgICAgcmV0dXJuIGNiLT5hdmFpbGFibGVMb2dpY2FsV2lkdGgo
KTsKLSAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgIHJldHVybiAwX2x1OwogfQogCiBMYXlv
dXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvckNvbnRlbnQo
QXZhaWxhYmxlTG9naWNhbEhlaWdodFR5cGUgaGVpZ2h0VHlwZSkgY29uc3QKQEAgLTE4ODUsNyAr
MTg4NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVp
Z2h0Rm9yQ29udGVudChBdmFpbGFibGVMb2dpY2FsSGVpCiAKICAgICBpZiAoUmVuZGVyQmxvY2sq
IGNiID0gY29udGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgIHJldHVybiBjYi0+YXZhaWxhYmxlTG9n
aWNhbEhlaWdodChoZWlnaHRUeXBlKTsKLSAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgIHJl
dHVybiAwX2x1OwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9n
aWNhbFdpZHRoRm9yQ29udGVudEluRnJhZ21lbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZy
YWdtZW50KSBjb25zdApAQCAtMTkxMCw3ICsxOTEwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6
OmNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluRnJhZ21lbnQoUmVuZGVyRnJhZ21l
bnQKICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogY29udGFpbmluZ0Jsb2NrRnJhZ21lbnQg
PSBudWxscHRyOwogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvc2l0aW9uID0gbG9naWNhbFRv
cCgpOwogICAgIGlmIChmcmFnbWVudCkgewotICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGcmFnbWVudCA9IGZyYWdtZW50ID8gZnJhZ21lbnQtPmxvZ2ljYWxUb3BGb3JG
cmFnbWVudGVkRmxvd0NvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2Uo
KSA6IExheW91dFVuaXQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRv
cE9mRnJhZ21lbnQgPSBmcmFnbWVudCA/IGZyYWdtZW50LT5sb2dpY2FsVG9wRm9yRnJhZ21lbnRl
ZEZsb3dDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgOiAwX2x1
OwogICAgICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBzdGQ6Om1heChsb2dpY2FsVG9wUG9zaXRp
b24sIGxvZ2ljYWxUb3BQb3NpdGlvbiArIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGcmFnbWVudCk7
CiAgICAgICAgIGNvbnRhaW5pbmdCbG9ja0ZyYWdtZW50ID0gY2ItPmNsYW1wVG9TdGFydEFuZEVu
ZEZyYWdtZW50cyhmcmFnbWVudCk7CiAgICAgfQpAQCAtMjc5OSw3ICsyNzk5LDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0V2l0aG91dExheW91dCgpIGNvbnN0
CiAgICAgLy8gRklYTUU6OiBXZSBzaG91bGQgcHJvYmFibHkgcmV0dXJuIHNvbWV0aGluZyBvdGhl
ciB0aGFuIGp1c3QKICAgICAvLyBib3JkZXIgKyBwYWRkaW5nLCBidXQgZm9yIG5vdyB3ZSBoYXZl
IG5vIGdvb2Qgd2F5IHRvIGRvIGFueXRoaW5nIGVsc2UKICAgICAvLyB3aXRob3V0IGxheW91dCwg
c28gd2UganVzdCB1c2UgdGhhdC4KLSAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMgY29t
cHV0ZWRWYWx1ZXMgPSBjb21wdXRlTG9naWNhbEhlaWdodChib3JkZXJBbmRQYWRkaW5nTG9naWNh
bEhlaWdodCgpLCBMYXlvdXRVbml0KCkpOworICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVl
cyBjb21wdXRlZFZhbHVlcyA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsSGVpZ2h0KCksIDBfbHUpOwogICAgIHJldHVybiBjb21wdXRlZFZhbHVlcy5tX2V4dGVu
dDsKIH0KIApAQCAtMjgzMSw3ICsyODMxLDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBS
ZW5kZXJCb3g6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsQ29udGVudEhlaWdodFVzaW5nKEwKICAg
ICBpZiAobG9naWNhbEhlaWdodExlbmd0aC5pc0ZpbGxBdmFpbGFibGUoKSkKICAgICAgICAgcmV0
dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVMb2dpY2FsSGVpZ2h0KEV4Y2x1ZGVNYXJn
aW5Cb3JkZXJQYWRkaW5nKSAtIGJvcmRlckFuZFBhZGRpbmc7CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoMCk7CisgICAgcmV0dXJuIDBfbHU7CiB9CiAK
IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyQm94Ojpjb21wdXRlQ29udGVudEFuZFNj
cm9sbGJhckxvZ2ljYWxIZWlnaHRVc2luZyhTaXplVHlwZSBoZWlnaHRUeXBlLCBjb25zdCBMZW5n
dGgmIGhlaWdodCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBpbnRyaW5zaWNDb250ZW50SGVp
Z2h0KSBjb25zdApAQCAtMjkzOSw3ICsyOTM5LDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0
PiBSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgK
ICAgICBpZiAoIWF2YWlsYWJsZUhlaWdodCkKICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUhlaWdo
dDsKIAotICAgIExheW91dFVuaXQgcmVzdWx0ID0gdmFsdWVGb3JMZW5ndGgoaGVpZ2h0LCBhdmFp
bGFibGVIZWlnaHQudmFsdWUoKSAtIHJvb3RNYXJnaW5Cb3JkZXJQYWRkaW5nSGVpZ2h0ICsgKGlz
VGFibGUoKSAmJiBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSA/IGNiLT5wYWRkaW5nQmVmb3JlKCkg
KyBjYi0+cGFkZGluZ0FmdGVyKCkgOiBMYXlvdXRVbml0KCkpKTsKKyAgICBMYXlvdXRVbml0IHJl
c3VsdCA9IHZhbHVlRm9yTGVuZ3RoKGhlaWdodCwgYXZhaWxhYmxlSGVpZ2h0LnZhbHVlKCkgLSBy
b290TWFyZ2luQm9yZGVyUGFkZGluZ0hlaWdodCArIChpc1RhYmxlKCkgJiYgaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkgPyBjYi0+cGFkZGluZ0JlZm9yZSgpICsgY2ItPnBhZGRpbmdBZnRlcigpIDog
MF9sdSkpOwogICAgIAogICAgIC8vIHxvdmVycmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0fCBpcyB0
aGUgbWF4aW11bSBoZWlnaHQgbWFkZSBhdmFpbGFibGUgYnkgdGhlCiAgICAgLy8gY2VsbCB0byBp
dHMgcGVyY2VudCBoZWlnaHQgY2hpbGRyZW4gd2hlbiB3ZSBkZWNpZGUgdGhleSBjYW4gZGV0ZXJt
aW5lIHRoZQpAQCAtMjk1MCw3ICsyOTUwLDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBS
ZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgKICAg
ICBib29sIHN1YnRyYWN0Qm9yZGVyQW5kUGFkZGluZyA9IGlzVGFibGUoKSB8fCAoaXM8UmVuZGVy
VGFibGVDZWxsPigqY2IpICYmICFza2lwcGVkQXV0b0hlaWdodENvbnRhaW5pbmdCbG9jayAmJiBj
Yi0+aGFzT3ZlcnJpZGVDb250ZW50TG9naWNhbEhlaWdodCgpKTsKICAgICBpZiAoc3VidHJhY3RC
b3JkZXJBbmRQYWRkaW5nKSB7CiAgICAgICAgIHJlc3VsdCAtPSBib3JkZXJBbmRQYWRkaW5nTG9n
aWNhbEhlaWdodCgpOwotICAgICAgICByZXR1cm4gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gc3RkOjptYXgoMF9sdSwgcmVzdWx0KTsKICAgICB9CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KQEAgLTMwMDEsNyArMzAwMSw3IEBAIExheW91dFVuaXQgUmVuZGVy
Qm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhTaXplVHlwZSB3aWR0aFR5cGUs
IExlbmd0CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lk
dGhVc2luZyhsb2dpY2FsV2lkdGgsIGN3LCBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkp
IC0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgaWYgKGN3ID4g
MCB8fCAoIWN3ICYmIChjb250YWluZXJMb2dpY2FsV2lkdGguaXNGaXhlZCgpIHx8IGNvbnRhaW5l
ckxvZ2ljYWxXaWR0aC5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKSkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBhZGp1c3RDb250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKG1pbmltdW1W
YWx1ZUZvckxlbmd0aChsb2dpY2FsV2lkdGgsIGN3KSk7Ci0gICAgICAgICAgICByZXR1cm4gTGF5
b3V0VW5pdCgpOworICAgICAgICAgICAgcmV0dXJuIDBfbHU7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBJbnRyaW5zaWM6CiAgICAgICAgIGNhc2UgTWluSW50cmluc2ljOgpAQCAtNDMzMCw3ICs0
MzMwLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCog
Ym94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3UKICAgICBib29sIGx0ciA9IGJveCA/IGJv
eC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIDogc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCk7CiAKICAgICBpZiAoKCFjYXJldE9mZnNldCkgXiBsdHIpCi0gICAgICAgIHJlY3QubW92
ZShMYXlvdXRTaXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwKSk7CisgICAgICAgIHJlY3QubW92
ZShMYXlvdXRTaXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwX2x1KSk7CiAKICAgICBpZiAoYm94
KSB7CiAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBib3gtPnJvb3QoKTsK
QEAgLTQ0MDYsOSArNDQwNiw5IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9u
Rm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBjb25zdCBSZW5kCiAgICAgICAgICAg
ICB8fCByZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxl
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSByZW5k
ZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKSArIChpczxSZW5kZXJUYWJs
ZVJvdz4oKnRoaXMpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXIueSgpKTsKKyAgICAgICAgTGF5
b3V0VW5pdCB0b3AgPSByZW5kZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3Ao
KSArIChpczxSZW5kZXJUYWJsZVJvdz4oKnRoaXMpID8gMF9sdSA6IHJlbmRlcmVyLnkoKSk7CiAg
ICAgICAgIExheW91dFVuaXQgYm90dG9tID0gdG9wICsgcmVuZGVyZXIuY29udGVudEhlaWdodCgp
OwotICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci5wYWRkaW5nTGVmdCgpICsgKGlzPFJlbmRlclRhYmxlUm93PigqdGhpcykgPyBMYXlvdXRV
bml0KCkgOiByZW5kZXJlci54KCkpOworICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJl
ci5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci5wYWRkaW5nTGVmdCgpICsgKGlzPFJlbmRlclRhYmxl
Um93PigqdGhpcykgPyAwX2x1IDogcmVuZGVyZXIueCgpKTsKICAgICAgICAgTGF5b3V0VW5pdCBy
aWdodCA9IGxlZnQgKyByZW5kZXJlci5jb250ZW50V2lkdGgoKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChwb2ludC54KCkgPD0gcmlnaHQgJiYgcG9pbnQueCgpID49IGxlZnQgJiYgcG9pbnQueSgp
IDw9IHRvcCAmJiBwb2ludC55KCkgPj0gYm90dG9tKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCBmNTRiYmZlMWM0NTFhZGE5
OGY2NTg1ZmIwMWY1NzBjNDViODdhOTQ5Li45NjA1MmVhMWIzYWFmNzkwZGIzYzlkM2QzZDQ5YjA0
NzliNzg5Y2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKQEAgLTQwMywxMSArNDAzLDExIEBAIExheW91dFNpemUgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSBjb25zdAogICAgIC8vIGNhbGwg
YXZhaWxhYmxlV2lkdGggb24gb3VyIGNvbnRhaW5pbmcgYmxvY2suCiAgICAgaWYgKCFzdHlsZSgp
LmxlZnQoKS5pc0F1dG8oKSkgewogICAgICAgICBpZiAoIXN0eWxlKCkucmlnaHQoKS5pc0F1dG8o
KSAmJiAhY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KQotICAgICAgICAgICAgb2Zmc2V0LnNldFdpZHRoKC12YWx1ZUZvckxlbmd0aChzdHlsZSgpLnJp
Z2h0KCksICFzdHlsZSgpLnJpZ2h0KCkuaXNGaXhlZCgpID8gY29udGFpbmluZ0Jsb2NrKCktPmF2
YWlsYWJsZVdpZHRoKCkgOiBMYXlvdXRVbml0KCkpKTsKKyAgICAgICAgICAgIG9mZnNldC5zZXRX
aWR0aCgtdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5yaWdodCgpLCAhc3R5bGUoKS5yaWdodCgpLmlz
Rml4ZWQoKSA/IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVXaWR0aCgpIDogMF9sdSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHZhbHVlRm9yTGVuZ3RoKHN0
eWxlKCkubGVmdCgpLCAhc3R5bGUoKS5sZWZ0KCkuaXNGaXhlZCgpID8gY29udGFpbmluZ0Jsb2Nr
KCktPmF2YWlsYWJsZVdpZHRoKCkgOiBMYXlvdXRVbml0KCkpLCAwKTsKKyAgICAgICAgICAgIG9m
ZnNldC5leHBhbmQodmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5sZWZ0KCksICFzdHlsZSgpLmxlZnQo
KS5pc0ZpeGVkKCkgPyBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlV2lkdGgoKSA6IDBfbHUp
LCAwX2x1KTsKICAgICB9IGVsc2UgaWYgKCFzdHlsZSgpLnJpZ2h0KCkuaXNBdXRvKCkpIHsKLSAg
ICAgICAgb2Zmc2V0LmV4cGFuZCgtdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5yaWdodCgpLCAhc3R5
bGUoKS5yaWdodCgpLmlzRml4ZWQoKSA/IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVXaWR0
aCgpIDogTGF5b3V0VW5pdCgpKSwgMCk7CisgICAgICAgIG9mZnNldC5leHBhbmQoLXZhbHVlRm9y
TGVuZ3RoKHN0eWxlKCkucmlnaHQoKSwgIXN0eWxlKCkucmlnaHQoKS5pc0ZpeGVkKCkgPyBjb250
YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlV2lkdGgoKSA6IDBfbHUpLCAwX2x1KTsKICAgICB9CiAK
ICAgICAvLyBJZiB0aGUgY29udGFpbmluZyBibG9jayBvZiBhIHJlbGF0aXZlbHkgcG9zaXRpb25l
ZCBlbGVtZW50IGRvZXMgbm90CkBAIC00MjAsMTMgKzQyMCwxMyBAQCBMYXlvdXRTaXplIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkgY29uc3QKICAgICAgICAg
JiYgKCFzdHlsZSgpLnRvcCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpCiAgICAgICAgICAgICB8
fCAhY29udGFpbmluZ0Jsb2NrKCktPmhhc0F1dG9IZWlnaHRPckNvbnRhaW5pbmdCbG9ja1dpdGhB
dXRvSGVpZ2h0KCkKICAgICAgICAgICAgIHx8IGNvbnRhaW5pbmdCbG9jaygpLT5zdHJldGNoZXNU
b1ZpZXdwb3J0KCkpKQotICAgICAgICBvZmZzZXQuZXhwYW5kKDAsIHZhbHVlRm9yTGVuZ3RoKHN0
eWxlKCkudG9wKCksICFzdHlsZSgpLnRvcCgpLmlzRml4ZWQoKSA/IGNvbnRhaW5pbmdCbG9jaygp
LT5hdmFpbGFibGVIZWlnaHQoKSA6IExheW91dFVuaXQoKSkpOworICAgICAgICBvZmZzZXQuZXhw
YW5kKDBfbHUsIHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkudG9wKCksICFzdHlsZSgpLnRvcCgpLmlz
Rml4ZWQoKSA/IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVIZWlnaHQoKSA6IDBfbHUpKTsK
IAogICAgIGVsc2UgaWYgKCFzdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygpCiAgICAgICAgICYmICgh
c3R5bGUoKS5ib3R0b20oKS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKQogICAgICAgICAgICAgfHwg
IWNvbnRhaW5pbmdCbG9jaygpLT5oYXNBdXRvSGVpZ2h0T3JDb250YWluaW5nQmxvY2tXaXRoQXV0
b0hlaWdodCgpCiAgICAgICAgICAgICB8fCBjb250YWluaW5nQmxvY2soKS0+c3RyZXRjaGVzVG9W
aWV3cG9ydCgpKSkKLSAgICAgICAgb2Zmc2V0LmV4cGFuZCgwLCAtdmFsdWVGb3JMZW5ndGgoc3R5
bGUoKS5ib3R0b20oKSwgIXN0eWxlKCkuYm90dG9tKCkuaXNGaXhlZCgpID8gY29udGFpbmluZ0Js
b2NrKCktPmF2YWlsYWJsZUhlaWdodCgpIDogTGF5b3V0VW5pdCgpKSk7CisgICAgICAgIG9mZnNl
dC5leHBhbmQoMF9sdSwgLXZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkuYm90dG9tKCksICFzdHlsZSgp
LmJvdHRvbSgpLmlzRml4ZWQoKSA/IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVIZWlnaHQo
KSA6IDBfbHUpKTsKIAogICAgIHJldHVybiBvZmZzZXQ7CiB9CkBAIC02MzYsNyArNjM2LDcgQEAg
Um91bmRlZFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmdldEJhY2tncm91bmRSb3VuZGVkUmVj
dChjb25zdCBMYXlvdXRSZWN0JiBib3IKIHsKICAgICBSb3VuZGVkUmVjdCBib3JkZXIgPSBzdHls
ZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IoYm9yZGVyUmVjdCwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRn
ZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOwogICAgIGlmIChib3ggJiYgKGJveC0+bmV4dExp
bmVCb3goKSB8fCBib3gtPnByZXZMaW5lQm94KCkpKSB7Ci0gICAgICAgIFJvdW5kZWRSZWN0IHNl
Z21lbnRCb3JkZXIgPSBzdHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IoTGF5b3V0UmVjdCgwLCAw
LCBpbmxpbmVCb3hXaWR0aCwgaW5saW5lQm94SGVpZ2h0KSwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRn
ZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOworICAgICAgICBSb3VuZGVkUmVjdCBzZWdtZW50
Qm9yZGVyID0gc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKExheW91dFJlY3QoMF9sdSwgMF9s
dSwgaW5saW5lQm94V2lkdGgsIGlubGluZUJveEhlaWdodCksIGluY2x1ZGVMb2dpY2FsTGVmdEVk
Z2UsIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKTsKICAgICAgICAgYm9yZGVyLnNldFJhZGlpKHNl
Z21lbnRCb3JkZXIucmFkaWkoKSk7CiAgICAgfQogICAgIHJldHVybiBib3JkZXI7CkBAIC02Nzgs
OCArNjc4LDggQEAgc3RhdGljIExheW91dFJlY3Qgc2hyaW5rUmVjdEJ5T25lRGV2aWNlUGl4ZWwo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb24KIHsKICAgICBMYXlvdXRSZWN0IHNo
cnVua1JlY3QgPSByZWN0OwogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBjb250ZXh0
LmdldENUTSgpOwotICAgIHNocnVua1JlY3QuaW5mbGF0ZVgoLWNlaWxUb0RldmljZVBpeGVsKExh
eW91dFVuaXQ6OmZyb21QaXhlbCgxKSAvIHRyYW5zZm9ybS54U2NhbGUoKSwgZGV2aWNlUGl4ZWxS
YXRpbykpOwotICAgIHNocnVua1JlY3QuaW5mbGF0ZVkoLWNlaWxUb0RldmljZVBpeGVsKExheW91
dFVuaXQ6OmZyb21QaXhlbCgxKSAvIHRyYW5zZm9ybS55U2NhbGUoKSwgZGV2aWNlUGl4ZWxSYXRp
bykpOworICAgIHNocnVua1JlY3QuaW5mbGF0ZVgoLWNlaWxUb0RldmljZVBpeGVsKDFfbHUgLyB0
cmFuc2Zvcm0ueFNjYWxlKCksIGRldmljZVBpeGVsUmF0aW8pKTsKKyAgICBzaHJ1bmtSZWN0Lmlu
ZmxhdGVZKC1jZWlsVG9EZXZpY2VQaXhlbCgxX2x1IC8gdHJhbnNmb3JtLnlTY2FsZSgpLCBkZXZp
Y2VQaXhlbFJhdGlvKSk7CiAgICAgcmV0dXJuIHNocnVua1JlY3Q7CiB9CiAKQEAgLTg0OCwxMCAr
ODQ4LDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5k
ZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgICAgIGNsaXBSb3VuZGVkSW5u
ZXJSZWN0KGNvbnRleHQsIHBpeGVsU25hcHBlZFJlY3QsIGJvcmRlci5waXhlbFNuYXBwZWRSb3Vu
ZGVkUmVjdEZvclBhaW50aW5nKGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgfQogICAgIAotICAg
IExheW91dFVuaXQgYkxlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBib3JkZXJMZWZ0KCkgOiBMYXlv
dXRVbml0Ojpmcm9tUGl4ZWwoMCk7Ci0gICAgTGF5b3V0VW5pdCBiUmlnaHQgPSBpbmNsdWRlUmln
aHRFZGdlID8gYm9yZGVyUmlnaHQoKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKLSAgICBM
YXlvdXRVbml0IHBMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gcGFkZGluZ0xlZnQoKSA6IExheW91
dFVuaXQoKTsKLSAgICBMYXlvdXRVbml0IHBSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBwYWRk
aW5nUmlnaHQoKSA6IExheW91dFVuaXQoKTsKKyAgICBMYXlvdXRVbml0IGJMZWZ0ID0gaW5jbHVk
ZUxlZnRFZGdlID8gYm9yZGVyTGVmdCgpIDogMF9sdTsKKyAgICBMYXlvdXRVbml0IGJSaWdodCA9
IGluY2x1ZGVSaWdodEVkZ2UgPyBib3JkZXJSaWdodCgpIDogMF9sdTsKKyAgICBMYXlvdXRVbml0
IHBMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gcGFkZGluZ0xlZnQoKSA6IDBfbHU7CisgICAgTGF5
b3V0VW5pdCBwUmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdlID8gcGFkZGluZ1JpZ2h0KCkgOiAwX2x1
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBjbGlwV2l0aFNjcm9sbGluZ1N0YXRl
U2F2ZXIoY29udGV4dCwgY2xpcHBlZFdpdGhMb2NhbFNjcm9sbGluZyk7CiAgICAgTGF5b3V0UmVj
dCBzY3JvbGxlZFBhaW50UmVjdCA9IHJlY3Q7CkBAIC04NzQsMTAgKzg3NCwxMCBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjbwogICAgICAgICAvLyBDbGlwIHRvIHRoZSBwYWRkaW5nIG9yIGNvbnRl
bnQgYm94ZXMgYXMgbmVjZXNzYXJ5LgogICAgICAgICBpZiAoIWNsaXBUb0JvcmRlclJhZGl1cykg
ewogICAgICAgICAgICAgYm9vbCBpbmNsdWRlUGFkZGluZyA9IGJnTGF5ZXIuY2xpcCgpID09IEZp
bGxCb3g6OkNvbnRlbnQ7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gTGF5b3V0
UmVjdChzY3JvbGxlZFBhaW50UmVjdC54KCkgKyBiTGVmdCArIChpbmNsdWRlUGFkZGluZyA/IHBM
ZWZ0IDogTGF5b3V0VW5pdCgpKSwKLSAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC55
KCkgKyBib3JkZXJUb3AoKSArIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSA6IExheW91
dFVuaXQoKSksCi0gICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJM
ZWZ0IC0gYlJpZ2h0IC0gKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgKyBwUmlnaHQgOiBMYXlvdXRV
bml0KCkpLAotICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LmhlaWdodCgpIC0gYm9y
ZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3Ao
KSArIHBhZGRpbmdCb3R0b20oKSA6IExheW91dFVuaXQoKSkpOworICAgICAgICAgICAgTGF5b3V0
UmVjdCBjbGlwUmVjdCA9IExheW91dFJlY3Qoc2Nyb2xsZWRQYWludFJlY3QueCgpICsgYkxlZnQg
KyAoaW5jbHVkZVBhZGRpbmcgPyBwTGVmdCA6IDBfbHUpLAorICAgICAgICAgICAgICAgIHNjcm9s
bGVkUGFpbnRSZWN0LnkoKSArIGJvcmRlclRvcCgpICsgKGluY2x1ZGVQYWRkaW5nID8gcGFkZGlu
Z1RvcCgpIDogMF9sdSksCisgICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Qud2lkdGgo
KSAtIGJMZWZ0IC0gYlJpZ2h0IC0gKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgKyBwUmlnaHQgOiAw
X2x1KSwKKyAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5oZWlnaHQoKSAtIGJvcmRl
clRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkg
KyBwYWRkaW5nQm90dG9tKCkgOiAwX2x1KSk7CiAgICAgICAgICAgICBiYWNrZ3JvdW5kQ2xpcFN0
YXRlU2F2ZXIuc2F2ZSgpOwogICAgICAgICAgICAgY29udGV4dC5jbGlwKGNsaXBSZWN0KTsKICAg
ICAgICAgfQpAQCAtMTM1Miw3ICsxMzUyLDcgQEAgQmFja2dyb3VuZEltYWdlR2VvbWV0cnkgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGMKICAg
ICBpZiAoYmFja2dyb3VuZFJlcGVhdFggPT0gRmlsbFJlcGVhdDo6Tm9SZXBlYXQpIHsKICAgICAg
ICAgTGF5b3V0VW5pdCB4T2Zmc2V0ID0gbGVmdCArIGNvbXB1dGVkWFBvc2l0aW9uOwogICAgICAg
ICBpZiAoeE9mZnNldCA+IDApCi0gICAgICAgICAgICBkZXN0aW5hdGlvblJlY3QubW92ZSh4T2Zm
c2V0LCAwKTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5tb3ZlKHhPZmZzZXQsIDBfbHUp
OwogICAgICAgICB4T2Zmc2V0ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oeE9mZnNldCwgMCk7CiAg
ICAgICAgIHBoYXNlLnNldFdpZHRoKC14T2Zmc2V0KTsKICAgICAgICAgZGVzdGluYXRpb25SZWN0
LnNldFdpZHRoKHRpbGVTaXplLndpZHRoKCkgKyB4T2Zmc2V0KTsKQEAgLTEzNzYsNyArMTM3Niw3
IEBAIEJhY2tncm91bmRJbWFnZUdlb21ldHJ5IFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxh
dGVCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeShjCiAgICAgaWYgKGJhY2tncm91bmRSZXBlYXRZID09
IEZpbGxSZXBlYXQ6Ok5vUmVwZWF0KSB7CiAgICAgICAgIExheW91dFVuaXQgeU9mZnNldCA9IHRv
cCArIGNvbXB1dGVkWVBvc2l0aW9uOwogICAgICAgICBpZiAoeU9mZnNldCA+IDApCi0gICAgICAg
ICAgICBkZXN0aW5hdGlvblJlY3QubW92ZSgwLCB5T2Zmc2V0KTsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uUmVjdC5tb3ZlKDBfbHUsIHlPZmZzZXQpOwogICAgICAgICB5T2Zmc2V0ID0gc3RkOjpt
aW48TGF5b3V0VW5pdD4oeU9mZnNldCwgMCk7CiAgICAgICAgIHBoYXNlLnNldEhlaWdodCgteU9m
ZnNldCk7CiAgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5zZXRIZWlnaHQodGlsZVNpemUuaGVpZ2h0
KCkgKyB5T2Zmc2V0KTsKQEAgLTI0MjEsNyArMjQyMSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0
UmVjCiAgICAgICAgICAgICAgICAgLy8gd2hlbiBwYWludGluZyB0aGUgc2hhZG93LiBPbiB0aGUg
b3RoZXIgaGFuZCwgaXQgaW50cm9kdWNlcyBzdWJwaXhlbCBnYXBzIGFsb25nIHRoZQogICAgICAg
ICAgICAgICAgIC8vIGNvcm5lcnMuIFRob3NlIGFyZSBhdm9pZGVkIGJ5IGluc2V0dGluZyB0aGUg
Y2xpcHBpbmcgcGF0aCBieSBvbmUgcGl4ZWwuCiAgICAgICAgICAgICAgICAgaWYgKGhhc09wYXF1
ZUJhY2tncm91bmQpCi0gICAgICAgICAgICAgICAgICAgIHJlY3RUb0NsaXBPdXQuaW5mbGF0ZVdp
dGhSYWRpaShMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoLTEpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmVjdFRvQ2xpcE91dC5pbmZsYXRlV2l0aFJhZGlpKC0xLjBmKTsKIAogICAgICAgICAgICAgICAg
IGlmICghcmVjdFRvQ2xpcE91dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuY2xpcE91dFJvdW5kZWRSZWN0KHJlY3RUb0NsaXBPdXQpOwpAQCAtMjQ0Nyw3ICsyNDQ3LDcg
QEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IEl0J3Mgbm90IGNsZWFyIGlmIHRoaXMgY2hlY2sgaXMgcmlnaHQuIFdoYXQgYWJvdXQgaW50ZWdy
YWwgc2NhbGUgZmFjdG9ycz8KICAgICAgICAgICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRy
YW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm0uYSgpICE9IDEgfHwgKHRyYW5zZm9ybS5kKCkgIT0gMSAmJiB0cmFuc2Zvcm0uZCgpICE9
IC0xKSB8fCB0cmFuc2Zvcm0uYigpIHx8IHRyYW5zZm9ybS5jKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZWN0VG9DbGlwT3V0LmluZmxhdGUoTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKC0xKS50
b0Zsb2F0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVjdFRvQ2xpcE91dC5pbmZsYXRl
KC0xLjBmKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIXJlY3RU
b0NsaXBPdXQuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAppbmRleCBiZmU5OTM1OWYzYTk2ZGM2
OWI0ZGViYTEyMTI2Zjg1NTA0MGY1NjIwLi4zNDgzY2JhMmI0ZmZmNTk0MzkyZDE0YmE5MDAyYjcw
MjUxZjY5NzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVw
cmVjYXRlZEZsZXhpYmxlQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcApAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgUmVu
ZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsQm94KGJvb2wgcmVsYXlv
dXRDaGlsZHJlbikKICAgICAgICAgLy8gT3VyIGZpcnN0IHBhc3MgaXMgZG9uZSB3aXRob3V0IGZs
ZXhpbmcuICBXZSBzaW1wbHkgbGF5IHRoZSBjaGlsZHJlbgogICAgICAgICAvLyBvdXQgd2l0aGlu
IHRoZSBib3guICBXZSBoYXZlIHRvIGRvIGEgbGF5b3V0IGZpcnN0IGluIG9yZGVyIHRvIGRldGVy
bWluZQogICAgICAgICAvLyBvdXIgYm94J3MgaW50cmluc2ljIGhlaWdodC4KLSAgICAgICAgTGF5
b3V0VW5pdCBtYXhBc2NlbnQgPSAwLCBtYXhEZXNjZW50ID0gMDsKKyAgICAgICAgTGF5b3V0VW5p
dCBtYXhBc2NlbnQsIG1heERlc2NlbnQ7CiAgICAgICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9
IGl0ZXJhdG9yLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkgewogICAg
ICAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAgICAgICAgY2hpbGQtPnNl
dENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKQEAgLTY1MCw3ICs2NTAsNyBAQCB2b2lk
IFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbEJveChib29sIHJl
bGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ1NwYWNlIC09IChy
ZW1haW5pbmdTcGFjZS90b3RhbENoaWxkcmVuKTsKICAgICAgICAgICAgICAgICAgICAgLS10b3Rh
bENoaWxkcmVuOwogCi0gICAgICAgICAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxk
LT5sb2NhdGlvbigpICsgTGF5b3V0U2l6ZShvZmZzZXQsIDApKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGxhY2VDaGlsZChjaGlsZCwgY2hpbGQtPmxvY2F0aW9uKCkgKyBMYXlvdXRTaXplKG9mZnNl
dCwgMF9sdSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIHsKQEAgLTY2Miw3ICs2NjIsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eDo6bGF5b3V0SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkRG9lc05vdEFmZmVjdFdpZHRoT3JGbGV4aW5nKGNoaWxkKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNo
aWxkLCBjaGlsZC0+bG9jYXRpb24oKSArIExheW91dFNpemUob2Zmc2V0LCAwKSk7CisgICAgICAg
ICAgICAgICAgcGxhY2VDaGlsZChjaGlsZCwgY2hpbGQtPmxvY2F0aW9uKCkgKyBMYXlvdXRTaXpl
KG9mZnNldCwgMF9sdSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtOTA2
LDcgKzkwNiw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0
aWNhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dCArPSByZW1haW5pbmdTcGFjZS90b3RhbENoaWxkcmVuOwogICAgICAgICAgICAgICAgICAgICBy
ZW1haW5pbmdTcGFjZSAtPSAocmVtYWluaW5nU3BhY2UvdG90YWxDaGlsZHJlbik7CiAgICAgICAg
ICAgICAgICAgICAgIC0tdG90YWxDaGlsZHJlbjsKLSAgICAgICAgICAgICAgICAgICAgcGxhY2VD
aGlsZChjaGlsZCwgY2hpbGQtPmxvY2F0aW9uKCkgKyBMYXlvdXRTaXplKDAsIG9mZnNldCkpOwor
ICAgICAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZC0+bG9jYXRpb24oKSAr
IExheW91dFNpemUoMF9sdSwgb2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtOTE3LDcgKzkxNyw3IEBAIHZvaWQgUmVuZGVyRGVw
cmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJveChib29sIHJlbGF5b3V0Q2hpbGRy
ZW4pCiAgICAgICAgICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBpdGVyYXRvci5maXJzdCgp
OyBjaGlsZDsgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGREb2VzTm90QWZmZWN0V2lkdGhPckZsZXhpbmcoY2hpbGQpKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZC0+
bG9jYXRpb24oKSArIExheW91dFNpemUoMCwgb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgcGxh
Y2VDaGlsZChjaGlsZCwgY2hpbGQtPmxvY2F0aW9uKCkgKyBMYXlvdXRTaXplKDBfbHUsIG9mZnNl
dCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oCmluZGV4IDQ4
MmQ1ZjBmMjU1NzcwYTUwZGY3NWRhMjZmNTFkMTNkNWU0YzJiMjYuLjkwMTNhNDZjZGQyODk0NjZj
ZTc4YmMxY2QxZDVhZjk0YzA4ZjkyMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgKQEAgLTQwLDcgKzQwLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25z
dCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBsYXlvdXRCbG9j
ayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUhlaWdodCA9IDApIG92ZXJy
aWRlOworICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRV
bml0IHBhZ2VIZWlnaHQgPSAwX2x1KSBvdmVycmlkZTsKICAgICB2b2lkIGxheW91dEhvcml6b250
YWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKTsKICAgICB2b2lkIGxheW91dFZlcnRpY2FsQm94
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmNwcAppbmRleCAwMWYzODdhOTdjNjZmNGRhMGZhMmI3NjExMzk3YjgxMzUwMzI5
Y2FkLi4xZGI1NmMxN2VkNmUyOGJhNmE0NDA4NGRlNDNlYzk3YTU4ZWViYjdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCkBAIC0xMTM0LDggKzExMzQsOCBA
QCBib29sIFJlbmRlckVsZW1lbnQ6OnJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHJlcAogICAgICAgICBMYXlvdXRVbml0IHNoYWRvd0xlZnQ7
CiAgICAgICAgIExheW91dFVuaXQgc2hhZG93UmlnaHQ7CiAgICAgICAgIHN0eWxlKCkuZ2V0Qm94
U2hhZG93SG9yaXpvbnRhbEV4dGVudChzaGFkb3dMZWZ0LCBzaGFkb3dSaWdodCk7Ci0gICAgICAg
IExheW91dFVuaXQgYm9yZGVyUmlnaHQgPSBpczxSZW5kZXJCb3g+KCp0aGlzKSA/IGRvd25jYXN0
PFJlbmRlckJveD4oKnRoaXMpLmJvcmRlclJpZ2h0KCkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwo
MCk7Ci0gICAgICAgIExheW91dFVuaXQgYm94V2lkdGggPSBpczxSZW5kZXJCb3g+KCp0aGlzKSA/
IGRvd25jYXN0PFJlbmRlckJveD4oKnRoaXMpLndpZHRoKCkgOiBMYXlvdXRVbml0KCk7CisgICAg
ICAgIExheW91dFVuaXQgYm9yZGVyUmlnaHQgPSBpczxSZW5kZXJCb3g+KCp0aGlzKSA/IGRvd25j
YXN0PFJlbmRlckJveD4oKnRoaXMpLmJvcmRlclJpZ2h0KCkgOiAwX2x1OworICAgICAgICBMYXlv
dXRVbml0IGJveFdpZHRoID0gaXM8UmVuZGVyQm94PigqdGhpcykgPyBkb3duY2FzdDxSZW5kZXJC
b3g+KCp0aGlzKS53aWR0aCgpIDogMF9sdTsKICAgICAgICAgTGF5b3V0VW5pdCBtaW5JbnNldFJp
Z2h0U2hhZG93RXh0ZW50ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oLWluc2V0U2hhZG93RXh0ZW50
LnJpZ2h0KCksIHN0ZDo6bWluKG5ld0JvdW5kcy53aWR0aCgpLCBvbGRCb3VuZHMud2lkdGgoKSkp
OwogICAgICAgICBMYXlvdXRVbml0IGJvcmRlcldpZHRoID0gc3RkOjptYXgoYm9yZGVyUmlnaHQs
IHN0ZDo6bWF4KHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkuYm9yZGVyVG9wUmlnaHRSYWRpdXMoKS53
aWR0aCwgYm94V2lkdGgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmJvcmRlckJvdHRvbVJpZ2h0
UmFkaXVzKCkud2lkdGgsIGJveFdpZHRoKSkpOwogICAgICAgICBMYXlvdXRVbml0IGRlY29yYXRp
b25zV2lkdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0Pigtb3V0bGluZVN0eWxlLm91dGxpbmVPZmZz
ZXQoKSwgYm9yZGVyV2lkdGggKyBtaW5JbnNldFJpZ2h0U2hhZG93RXh0ZW50KSArIHN0ZDo6bWF4
KG91dGxpbmVXaWR0aCwgc2hhZG93UmlnaHQpOwpAQCAtMTE1NCw4ICsxMTU0LDggQEAgYm9vbCBS
ZW5kZXJFbGVtZW50OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiByZXAKICAgICAgICAgTGF5b3V0VW5pdCBzaGFkb3dUb3A7CiAgICAgICAg
IExheW91dFVuaXQgc2hhZG93Qm90dG9tOwogICAgICAgICBzdHlsZSgpLmdldEJveFNoYWRvd1Zl
cnRpY2FsRXh0ZW50KHNoYWRvd1RvcCwgc2hhZG93Qm90dG9tKTsKLSAgICAgICAgTGF5b3V0VW5p
dCBib3JkZXJCb3R0b20gPSBpczxSZW5kZXJCb3g+KCp0aGlzKSA/IGRvd25jYXN0PFJlbmRlckJv
eD4oKnRoaXMpLmJvcmRlckJvdHRvbSgpIDogTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApOwotICAg
ICAgICBMYXlvdXRVbml0IGJveEhlaWdodCA9IGlzPFJlbmRlckJveD4oKnRoaXMpID8gZG93bmNh
c3Q8UmVuZGVyQm94PigqdGhpcykuaGVpZ2h0KCkgOiBMYXlvdXRVbml0KCk7CisgICAgICAgIExh
eW91dFVuaXQgYm9yZGVyQm90dG9tID0gaXM8UmVuZGVyQm94PigqdGhpcykgPyBkb3duY2FzdDxS
ZW5kZXJCb3g+KCp0aGlzKS5ib3JkZXJCb3R0b20oKSA6IDBfbHU7CisgICAgICAgIExheW91dFVu
aXQgYm94SGVpZ2h0ID0gaXM8UmVuZGVyQm94PigqdGhpcykgPyBkb3duY2FzdDxSZW5kZXJCb3g+
KCp0aGlzKS5oZWlnaHQoKSA6IDBfbHU7CiAgICAgICAgIExheW91dFVuaXQgbWluSW5zZXRCb3R0
b21TaGFkb3dFeHRlbnQgPSBzdGQ6Om1pbjxMYXlvdXRVbml0PigtaW5zZXRTaGFkb3dFeHRlbnQu
Ym90dG9tKCksIHN0ZDo6bWluKG5ld0JvdW5kcy5oZWlnaHQoKSwgb2xkQm91bmRzLmhlaWdodCgp
KSk7CiAgICAgICAgIExheW91dFVuaXQgYm9yZGVySGVpZ2h0ID0gc3RkOjptYXgoYm9yZGVyQm90
dG9tLCBzdGQ6Om1heCh2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmJvcmRlckJvdHRvbUxlZnRSYWRp
dXMoKS5oZWlnaHQsIGJveEhlaWdodCksCiAgICAgICAgICAgICB2YWx1ZUZvckxlbmd0aChzdHls
ZSgpLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0LCBib3hIZWlnaHQpKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAppbmRleCAyMTI4
NTgzMzExZDg0NzZlMjhhYTgyNTViYWQwMjU2ODI3NzI0MjA2Li4wMWJkZjA3ZTNlOTQ4Njk0ZTE1
MjZkOWFmOTk1NTdhYzYwMjNhYmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxleGlibGVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbGV4aWJsZUJveC5jcHAKQEAgLTEyMCw4ICsxMjAsOCBAQCB2b2lkIFJlbmRlckZsZXhp
YmxlQm94Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dp
Y2FsV2lkdAogICAgIAogICAgIC8vIER1ZSB0byBuZWdhdGl2ZSBtYXJnaW5zLCBpdCBpcyBwb3Nz
aWJsZSB0aGF0IHdlIGNhbGN1bGF0ZWQgYSBuZWdhdGl2ZQogICAgIC8vIGludHJpbnNpYyB3aWR0
aC4gTWFrZSBzdXJlIHRoYXQgd2UgbmV2ZXIgcmV0dXJuIGEgbmVnYXRpdmUgd2lkdGguCi0gICAg
bWluTG9naWNhbFdpZHRoID0gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBtaW5Mb2dpY2FsV2lkdGgp
OwotICAgIG1heExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KExheW91dFVuaXQoKSwgbWF4TG9naWNh
bFdpZHRoKTsKKyAgICBtaW5Mb2dpY2FsV2lkdGggPSBzdGQ6Om1heCgwX2x1LCBtaW5Mb2dpY2Fs
V2lkdGgpOworICAgIG1heExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KDBfbHUsIG1heExvZ2ljYWxX
aWR0aCk7CiAgICAgCiAgICAgaWYgKGhhZEV4Y2x1ZGVkQ2hpbGRyZW4pIHsKICAgICAgICAgbWlu
TG9naWNhbFdpZHRoID0gc3RkOjptYXgobWluTG9naWNhbFdpZHRoLCBjaGlsZE1pbldpZHRoKTsK
QEAgLTM1OSw3ICszNTksNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpwYWludENoaWxkcmVu
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcAogCiB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjpyZXBvc2l0aW9uTG9naWNhbEhlaWdodERlcGVuZGVudEZsZXhJdGVtcyhW
ZWN0b3I8TGluZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMpCiB7Ci0gICAgTGF5b3V0VW5pdCBjcm9z
c0F4aXNTdGFydEVkZ2UgPSBsaW5lQ29udGV4dHMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDog
bGluZUNvbnRleHRzWzBdLmNyb3NzQXhpc09mZnNldDsKKyAgICBMYXlvdXRVbml0IGNyb3NzQXhp
c1N0YXJ0RWRnZSA9IGxpbmVDb250ZXh0cy5pc0VtcHR5KCkgPyAwX2x1IDogbGluZUNvbnRleHRz
WzBdLmNyb3NzQXhpc09mZnNldDsKICAgICBhbGlnbkZsZXhMaW5lcyhsaW5lQ29udGV4dHMpOwog
ICAgIAogICAgIGFsaWduQ2hpbGRyZW4obGluZUNvbnRleHRzKTsKQEAgLTUxMiw3ICs1MTIsNyBA
QCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjptYWluQXhpc0NvbnRlbnRFeHRlbnQoTGF5
b3V0VW5pdCBjb250ZW50TG9naWNhbEhlaQogICAgICAgICBhdXRvIGNvbXB1dGVkVmFsdWVzID0g
Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoYm9yZGVyQm94TG9naWNhbEhlaWdodCwgbG9naWNhbFRvcCgp
KTsKICAgICAgICAgaWYgKGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50ID09IExheW91dFVuaXQ6Om1h
eCgpKQogICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50OwotICAgICAg
ICByZXR1cm4gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCAt
IGJvcmRlclBhZGRpbmdBbmRTY3JvbGxiYXIpOworICAgICAgICByZXR1cm4gc3RkOjptYXgoMF9s
dSwgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgLSBib3JkZXJQYWRkaW5nQW5kU2Nyb2xsYmFyKTsK
ICAgICB9CiAgICAgcmV0dXJuIGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKIH0KQEAgLTc0MCw3ICs3
NDAsNyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTWFpblNpemVGcm9t
QXNwZWN0UmF0aW9Vc2luZyhjb25zdCBSZW5kZXJCbwogICAgICAgICBBU1NFUlQoY3Jvc3NTaXpl
TGVuZ3RoLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpKTsKICAgICAgICAgY3Jvc3NTaXplID0gaGFz
T3J0aG9nb25hbEZsb3coY2hpbGQpID8gYWRqdXN0Qm9yZGVyQm94TG9naWNhbFdpZHRoRm9yQm94
U2l6aW5nKHZhbHVlRm9yTGVuZ3RoKGNyb3NzU2l6ZUxlbmd0aCwgY29udGVudFdpZHRoKCkpKSA6
IGNoaWxkLmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjcm9zc1NpemVMZW5ndGgpOwog
ICAgICAgICBpZiAoIWNyb3NzU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7
CisgICAgICAgICAgICByZXR1cm4gMF9sdTsKICAgICB9CiAgICAgCiAgICAgY29uc3QgTGF5b3V0
U2l6ZSYgY2hpbGRJbnRyaW5zaWNTaXplID0gY2hpbGQuaW50cmluc2ljU2l6ZSgpOwpAQCAtODIx
LDcgKzgyMSw3IEBAIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVJbm5lckZs
ZXhCYXNlU2l6ZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsCiAgICAgCiAgICAgTGVuZ3RoIGZs
ZXhCYXNpcyA9IGZsZXhCYXNpc0ZvckNoaWxkKGNoaWxkKTsKICAgICBpZiAobWFpbkF4aXNMZW5n
dGhJc0RlZmluaXRlKGNoaWxkLCBmbGV4QmFzaXMpKQotICAgICAgICByZXR1cm4gc3RkOjptYXgo
TGF5b3V0VW5pdCgpLCBjb21wdXRlTWFpbkF4aXNFeHRlbnRGb3JDaGlsZChjaGlsZCwgTWFpbk9y
UHJlZmVycmVkU2l6ZSwgZmxleEJhc2lzKS52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWF4KDBfbHUsIGNvbXB1dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKGNoaWxkLCBNYWluT3JQcmVm
ZXJyZWRTaXplLCBmbGV4QmFzaXMpLnZhbHVlKCkpOwogCiAgICAgLy8gVGhlIGZsZXggYmFzaXMg
aXMgaW5kZWZpbml0ZSAoPWF1dG8pLCBzbyB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhlIGFjdHVhbAog
ICAgIC8vIHdpZHRoIG9mIHRoZSBjaGlsZC4gRm9yIHRoZSBsb2dpY2FsIHdpZHRoIGF4aXMgd2Ug
anVzdCB1c2UgdGhlIHByZWZlcnJlZApAQCAtOTE4LDggKzkxOCw4IEBAIHZvaWQgUmVuZGVyRmxl
eGlibGVCb3g6OmxheW91dEZsZXhJdGVtcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiAKIExheW91
dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmF1dG9NYXJnaW5PZmZzZXRJbk1haW5BeGlzKGNvbnN0
IFZlY3RvcjxGbGV4SXRlbT4mIGNoaWxkcmVuLCBMYXlvdXRVbml0JiBhdmFpbGFibGVGcmVlU3Bh
Y2UpCiB7Ci0gICAgaWYgKGF2YWlsYWJsZUZyZWVTcGFjZSA8PSBMYXlvdXRVbml0KCkpCi0gICAg
ICAgIHJldHVybiBMYXlvdXRVbml0KCk7CisgICAgaWYgKGF2YWlsYWJsZUZyZWVTcGFjZSA8PSAw
X2x1KQorICAgICAgICByZXR1cm4gMF9sdTsKICAgICAKICAgICBpbnQgbnVtYmVyT2ZBdXRvTWFy
Z2lucyA9IDA7CiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxGbG93KCk7CkBA
IC05MzksMTYgKzkzOSwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjphdXRvTWFy
Z2luT2Zmc2V0SW5NYWluQXhpcyhjb25zdCBWZWN0b3I8RmxleEl0ZW0+JgogICAgICAgICB9CiAg
ICAgfQogICAgIGlmICghbnVtYmVyT2ZBdXRvTWFyZ2lucykKLSAgICAgICAgcmV0dXJuIExheW91
dFVuaXQoKTsKKyAgICAgICAgcmV0dXJuIDBfbHU7CiAgICAgCiAgICAgTGF5b3V0VW5pdCBzaXpl
T2ZBdXRvTWFyZ2luID0gYXZhaWxhYmxlRnJlZVNwYWNlIC8gbnVtYmVyT2ZBdXRvTWFyZ2luczsK
LSAgICBhdmFpbGFibGVGcmVlU3BhY2UgPSBMYXlvdXRVbml0KCk7CisgICAgYXZhaWxhYmxlRnJl
ZVNwYWNlID0gMF9sdTsKICAgICByZXR1cm4gc2l6ZU9mQXV0b01hcmdpbjsKIH0KIAogdm9pZCBS
ZW5kZXJGbGV4aWJsZUJveDo6dXBkYXRlQXV0b01hcmdpbnNJbk1haW5BeGlzKFJlbmRlckJveCYg
Y2hpbGQsIExheW91dFVuaXQgYXV0b01hcmdpbk9mZnNldCkKIHsKLSAgICBBU1NFUlQoYXV0b01h
cmdpbk9mZnNldCA+PSBMYXlvdXRVbml0KCkpOworICAgIEFTU0VSVChhdXRvTWFyZ2luT2Zmc2V0
ID49IDBfbHUpOwogICAgIAogICAgIGlmIChpc0hvcml6b250YWxGbG93KCkpIHsKICAgICAgICAg
aWYgKGNoaWxkLnN0eWxlKCkubWFyZ2luTGVmdCgpLmlzQXV0bygpKQpAQCAtOTgwLDcgKzk4MCw3
IEBAIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmF2YWlsYWJsZUFsaWdubWVudFNwYWNl
Rm9yQ2hpbGQoTGF5b3V0VW5pdCBsaW5lQ3JvCiBib29sIFJlbmRlckZsZXhpYmxlQm94Ojp1cGRh
dGVBdXRvTWFyZ2luc0luQ3Jvc3NBeGlzKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgYXZh
aWxhYmxlQWxpZ25tZW50U3BhY2UpCiB7CiAgICAgQVNTRVJUKCFjaGlsZC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSk7Ci0gICAgQVNTRVJUKGF2YWlsYWJsZUFsaWdubWVudFNwYWNlID49IExheW91
dFVuaXQoKSk7CisgICAgQVNTRVJUKGF2YWlsYWJsZUFsaWdubWVudFNwYWNlID49IDBfbHUpOwog
ICAgIAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsRmxvdygpOwogICAgIExl
bmd0aCB0b3BPckxlZnQgPSBpc0hvcml6b250YWwgPyBjaGlsZC5zdHlsZSgpLm1hcmdpblRvcCgp
IDogY2hpbGQuc3R5bGUoKS5tYXJnaW5MZWZ0KCk7CkBAIC0xMDc5LDcgKzEwNzksNyBAQCBMYXlv
dXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjphZGp1c3RDaGlsZFNpemVGb3JNaW5BbmRNYXgoY29u
c3QgUmVuZGVyQm94JiBjaGlsZAogCiAgICAgTGVuZ3RoIG1pbiA9IGlzSG9yaXpvbnRhbEZsb3co
KSA/IGNoaWxkLnN0eWxlKCkubWluV2lkdGgoKSA6IGNoaWxkLnN0eWxlKCkubWluSGVpZ2h0KCk7
CiAgICAgaWYgKG1pbi5pc1NwZWNpZmllZE9ySW50cmluc2ljKCkpCi0gICAgICAgIHJldHVybiBz
dGQ6Om1heChjaGlsZFNpemUsIHN0ZDo6bWF4KExheW91dFVuaXQoKSwgY29tcHV0ZU1haW5BeGlz
RXh0ZW50Rm9yQ2hpbGQoY2hpbGQsIE1pblNpemUsIG1pbikudmFsdWVfb3IoY2hpbGRTaXplKSkp
OworICAgICAgICByZXR1cm4gc3RkOjptYXgoY2hpbGRTaXplLCBzdGQ6Om1heCgwX2x1LCBjb21w
dXRlTWFpbkF4aXNFeHRlbnRGb3JDaGlsZChjaGlsZCwgTWluU2l6ZSwgbWluKS52YWx1ZV9vcihj
aGlsZFNpemUpKSk7CiAgICAgCiAgICAgaWYgKCFpc0ZsZXhpYmxlQm94SW1wbCgpICYmIG1pbi5p
c0F1dG8oKSAmJiBtYWluQXhpc092ZXJmbG93Rm9yQ2hpbGQoY2hpbGQpID09IE92ZXJmbG93OjpW
aXNpYmxlICYmICEoaXNDb2x1bW5GbG93KCkgJiYgaXM8UmVuZGVyRmxleGlibGVCb3g+KGNoaWxk
KSkpIHsKICAgICAgICAgLy8gRklYTUU6IEZvciBub3csIHdlIGRvIG5vdCBoYW5kbGUgbWluLWhl
aWdodDogYXV0byBmb3IgbmVzdGVkCkBAIC0xMTE1LDcgKzExMTUsNyBAQCBMYXlvdXRVbml0IFJl
bmRlckZsZXhpYmxlQm94OjphZGp1c3RDaGlsZFNpemVGb3JNaW5BbmRNYXgoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZAogICAgICAgICByZXR1cm4gc3RkOjptYXgoY2hpbGRTaXplLCBjb250ZW50U2l6
ZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0ZDo6bWF4KExheW91dFVuaXQoKSwgY2hpbGRTaXpl
KTsKKyAgICByZXR1cm4gc3RkOjptYXgoMF9sdSwgY2hpbGRTaXplKTsKIH0KICAgICAKIHN0ZDo6
b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyRmxleGlibGVCb3g6OmNyb3NzU2l6ZUZvclBlcmNl
bnRhZ2VSZXNvbHV0aW9uKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCkBAIC0xNDAxLDcgKzE0MDEs
NyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjpzdGF0aWNNYWluQXhpc1Bvc2l0aW9u
Rm9yUG9zaXRpb25lZENoaWxkKGNvbnN0IFJlbgogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJv
eDo6c3RhdGljQ3Jvc3NBeGlzUG9zaXRpb25Gb3JQb3NpdGlvbmVkQ2hpbGQoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCkKIHsKICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlID0gY3Jvc3NBeGlz
Q29udGVudEV4dGVudCgpIC0gY3Jvc3NBeGlzRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpOwotICAgIHJl
dHVybiBhbGlnbm1lbnRPZmZzZXQoYXZhaWxhYmxlU3BhY2UsIGFsaWdubWVudEZvckNoaWxkKGNo
aWxkKSwgTGF5b3V0VW5pdCgpLCBMYXlvdXRVbml0KCksIHN0eWxlKCkuZmxleFdyYXAoKSA9PSBG
bGV4V3JhcDo6UmV2ZXJzZSk7CisgICAgcmV0dXJuIGFsaWdubWVudE9mZnNldChhdmFpbGFibGVT
cGFjZSwgYWxpZ25tZW50Rm9yQ2hpbGQoY2hpbGQpLCAwX2x1LCAwX2x1LCBzdHlsZSgpLmZsZXhX
cmFwKCkgPT0gRmxleFdyYXA6OlJldmVyc2UpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckZsZXhp
YmxlQm94OjpzdGF0aWNJbmxpbmVQb3NpdGlvbkZvclBvc2l0aW9uZWRDaGlsZChjb25zdCBSZW5k
ZXJCb3gmIGNoaWxkKQpAQCAtMTQ3OSwxNCArMTQ3OSwxNCBAQCB2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpyZXNldEF1dG9NYXJnaW5zQW5kTG9naWNhbFRvcEluQ3Jvc3NBeGlzKFJlbmRlckJveCYg
Y2hpbAogICAgICAgICBjaGlsZC51cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGlmIChp
c0hvcml6b250YWxGbG93KCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC5zdHlsZSgpLm1hcmdp
blRvcCgpLmlzQXV0bygpKQotICAgICAgICAgICAgICAgIGNoaWxkLnNldE1hcmdpblRvcChMYXlv
dXRVbml0KCkpOworICAgICAgICAgICAgICAgIGNoaWxkLnNldE1hcmdpblRvcCgwX2x1KTsKICAg
ICAgICAgICAgIGlmIChjaGlsZC5zdHlsZSgpLm1hcmdpbkJvdHRvbSgpLmlzQXV0bygpKQotICAg
ICAgICAgICAgICAgIGNoaWxkLnNldE1hcmdpbkJvdHRvbShMYXlvdXRVbml0KCkpOworICAgICAg
ICAgICAgICAgIGNoaWxkLnNldE1hcmdpbkJvdHRvbSgwX2x1KTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChjaGlsZC5zdHlsZSgpLm1hcmdpbkxlZnQoKS5pc0F1dG8oKSkKLSAg
ICAgICAgICAgICAgICBjaGlsZC5zZXRNYXJnaW5MZWZ0KExheW91dFVuaXQoKSk7CisgICAgICAg
ICAgICAgICAgY2hpbGQuc2V0TWFyZ2luTGVmdCgwX2x1KTsKICAgICAgICAgICAgIGlmIChjaGls
ZC5zdHlsZSgpLm1hcmdpblJpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgICAgICAgICAgY2hpbGQu
c2V0TWFyZ2luUmlnaHQoTGF5b3V0VW5pdCgpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC5zZXRN
YXJnaW5SaWdodCgwX2x1KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2NjgsNyArMTY2OCw3
IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dENvbHVtblJldmVyc2UoY29uc3QgVmVj
dG9yPEZsZXhJdGVtPiYgY2hpbGRyZW4sIExhCiBzdGF0aWMgTGF5b3V0VW5pdCBpbml0aWFsQWxp
Z25Db250ZW50T2Zmc2V0KExheW91dFVuaXQgYXZhaWxhYmxlRnJlZVNwYWNlLCBDb250ZW50UG9z
aXRpb24gYWxpZ25Db250ZW50LCBDb250ZW50RGlzdHJpYnV0aW9uIGFsaWduQ29udGVudERpc3Ry
aWJ1dGlvbiwgdW5zaWduZWQgbnVtYmVyT2ZMaW5lcykKIHsKICAgICBpZiAobnVtYmVyT2ZMaW5l
cyA8PSAxKQotICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgICAgICByZXR1cm4gMF9s
dTsKICAgICBpZiAoYWxpZ25Db250ZW50ID09IENvbnRlbnRQb3NpdGlvbjo6RmxleEVuZCkKICAg
ICAgICAgcmV0dXJuIGF2YWlsYWJsZUZyZWVTcGFjZTsKICAgICBpZiAoYWxpZ25Db250ZW50ID09
IENvbnRlbnRQb3NpdGlvbjo6Q2VudGVyKQpAQCAtMTY4NSw3ICsxNjg1LDcgQEAgc3RhdGljIExh
eW91dFVuaXQgaW5pdGlhbEFsaWduQ29udGVudE9mZnNldChMYXlvdXRVbml0IGF2YWlsYWJsZUZy
ZWVTcGFjZSwgQ29udGUKICAgICAgICAgLy8gRmFsbGJhY2sgdG8gJ2NlbnRlcicKICAgICAgICAg
cmV0dXJuIGF2YWlsYWJsZUZyZWVTcGFjZSAvIDI7CiAgICAgfQotICAgIHJldHVybiBMYXlvdXRV
bml0KCk7CisgICAgcmV0dXJuIDBfbHU7CiB9CiAKIHN0YXRpYyBMYXlvdXRVbml0IGFsaWduQ29u
dGVudFNwYWNlQmV0d2VlbkNoaWxkcmVuKExheW91dFVuaXQgYXZhaWxhYmxlRnJlZVNwYWNlLCBD
b250ZW50RGlzdHJpYnV0aW9uIGFsaWduQ29udGVudERpc3RyaWJ1dGlvbiwgdW5zaWduZWQgbnVt
YmVyT2ZMaW5lcykKQEAgLTE2OTgsNyArMTY5OCw3IEBAIHN0YXRpYyBMYXlvdXRVbml0IGFsaWdu
Q29udGVudFNwYWNlQmV0d2VlbkNoaWxkcmVuKExheW91dFVuaXQgYXZhaWxhYmxlRnJlZVNwYWNl
CiAgICAgICAgIGlmIChhbGlnbkNvbnRlbnREaXN0cmlidXRpb24gPT0gQ29udGVudERpc3RyaWJ1
dGlvbjo6U3BhY2VFdmVubHkpCiAgICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlRnJlZVNwYWNl
IC8gKG51bWJlck9mTGluZXMgKyAxKTsKICAgICB9Ci0gICAgcmV0dXJuIExheW91dFVuaXQoKTsK
KyAgICByZXR1cm4gMF9sdTsKIH0KICAgICAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWdu
RmxleExpbmVzKFZlY3RvcjxMaW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cykKQEAgLTE3NDEsNyAr
MTc0MSw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWduRmxleExpbmVzKFZlY3RvcjxM
aW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cykKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFkanVz
dEFsaWdubWVudEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgZGVsdGEpCiB7
CiAgICAgQVNTRVJUKCFjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0gICAgc2V0Rmxv
d0F3YXJlTG9jYXRpb25Gb3JDaGlsZChjaGlsZCwgZmxvd0F3YXJlTG9jYXRpb25Gb3JDaGlsZChj
aGlsZCkgKyBMYXlvdXRTaXplKExheW91dFVuaXQoKSwgZGVsdGEpKTsKKyAgICBzZXRGbG93QXdh
cmVMb2NhdGlvbkZvckNoaWxkKGNoaWxkLCBmbG93QXdhcmVMb2NhdGlvbkZvckNoaWxkKGNoaWxk
KSArIExheW91dFNpemUoMF9sdSwgZGVsdGEpKTsKIH0KICAgICAKIHZvaWQgUmVuZGVyRmxleGli
bGVCb3g6OmFsaWduQ2hpbGRyZW4oY29uc3QgVmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNvbnRl
eHRzKQpAQCAtMTc2MSw3ICsxNzYxLDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25D
aGlsZHJlbihjb25zdCBWZWN0b3I8TGluZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMpCiAgICAgICAg
ICAgICBjb25zdCBhdXRvJiBmbGV4SXRlbSA9IGxpbmVDb250ZXh0LmZsZXhJdGVtc1tjaGlsZE51
bWJlcl07CiAgICAgICAgICAgICBBU1NFUlQoIWZsZXhJdGVtLmJveC5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh1cGRhdGVBdXRvTWFyZ2lu
c0luQ3Jvc3NBeGlzKGZsZXhJdGVtLmJveCwgc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBhdmFpbGFi
bGVBbGlnbm1lbnRTcGFjZUZvckNoaWxkKGxpbmVDcm9zc0F4aXNFeHRlbnQsIGZsZXhJdGVtLmJv
eCkpKSkKKyAgICAgICAgICAgIGlmICh1cGRhdGVBdXRvTWFyZ2luc0luQ3Jvc3NBeGlzKGZsZXhJ
dGVtLmJveCwgc3RkOjptYXgoMF9sdSwgYXZhaWxhYmxlQWxpZ25tZW50U3BhY2VGb3JDaGlsZChs
aW5lQ3Jvc3NBeGlzRXh0ZW50LCBmbGV4SXRlbS5ib3gpKSkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEl0ZW1Qb3NpdGlvbiBwb3NpdGlvbiA9
IGFsaWdubWVudEZvckNoaWxkKGZsZXhJdGVtLmJveCk7CkBAIC0xODE1LDcgKzE4MTUsNyBAQCB2
b2lkIFJlbmRlckZsZXhpYmxlQm94OjphcHBseVN0cmV0Y2hBbGlnbm1lbnRUb0NoaWxkKFJlbmRl
ckJveCYgY2hpbGQsIExheW91dFVuaQogICAgICAgICBpZiAoY2hpbGROZWVkc1JlbGF5b3V0IHx8
ICFjaGlsZC5oYXNPdmVycmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgICAgICBj
aGlsZC5zZXRPdmVycmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KGRlc2lyZWRMb2dpY2FsSGVpZ2h0
IC0gY2hpbGQuYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIGlmIChj
aGlsZE5lZWRzUmVsYXlvdXQpIHsKLSAgICAgICAgICAgIGNoaWxkLnNldExvZ2ljYWxIZWlnaHQo
TGF5b3V0VW5pdCgpKTsKKyAgICAgICAgICAgIGNoaWxkLnNldExvZ2ljYWxIZWlnaHQoMF9sdSk7
CiAgICAgICAgICAgICAvLyBXZSBjYWNoZSB0aGUgY2hpbGQncyBpbnRyaW5zaWMgY29udGVudCBs
b2dpY2FsIGhlaWdodCB0byBhdm9pZCBpdCBiZWluZwogICAgICAgICAgICAgLy8gcmVzZXQgdG8g
dGhlIHN0cmV0Y2hlZCBoZWlnaHQuCiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBmcmFn
aWxlLiBSZW5kZXJ0Qm94ZXMgc2hvdWxkIGJlIHNtYXJ0IGVub3VnaCB0bwpAQCAtMTgzMCw3ICsx
ODMwLDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlTdHJldGNoQWxpZ25tZW50VG9D
aGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbmkKICAgICAgICAgICAgIHNldENhY2hlZENo
aWxkSW50cmluc2ljQ29udGVudExvZ2ljYWxIZWlnaHQoY2hpbGQsIGNoaWxkSW50cmluc2ljQ29u
dGVudExvZ2ljYWxIZWlnaHQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChoYXNPcnRob2dv
bmFsRmxvdyhjaGlsZCkgJiYgY2hpbGQuc3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSkg
ewotICAgICAgICBMYXlvdXRVbml0IGNoaWxkV2lkdGggPSBzdGQ6Om1heChMYXlvdXRVbml0KCks
IGxpbmVDcm9zc0F4aXNFeHRlbnQgLSBjcm9zc0F4aXNNYXJnaW5FeHRlbnRGb3JDaGlsZChjaGls
ZCkpOworICAgICAgICBMYXlvdXRVbml0IGNoaWxkV2lkdGggPSBzdGQ6Om1heCgwX2x1LCBsaW5l
Q3Jvc3NBeGlzRXh0ZW50IC0gY3Jvc3NBeGlzTWFyZ2luRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpKTsK
ICAgICAgICAgY2hpbGRXaWR0aCA9IGNoaWxkLmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluRnJhZ21l
bnRCeU1pbk1heChjaGlsZFdpZHRoLCBjcm9zc0F4aXNDb250ZW50RXh0ZW50KCksICp0aGlzLCBu
dWxscHRyKTsKICAgICAgICAgCiAgICAgICAgIGlmIChjaGlsZFdpZHRoICE9IGNoaWxkLmxvZ2lj
YWxXaWR0aCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJv
eC5oCmluZGV4IDM5ZDdjZjIwYjllMDg4ZGNkZGEwNzIzM2Y2N2E5NzQxNDM2ZTc0MzEuLjc5YmZl
ZWVlMmNmYzYyOTYxZTczZGQ2YTRkZGFjZDlkZmIzZGE0NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgYXZvaWRzRmxvYXRzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIGJvb2wgY2FuRHJvcEFub255bW91c0Jsb2NrQ2hpbGQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBM
YXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgZmluYWw7CisgICAgdm9pZCBsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQg
PSAwX2x1KSBmaW5hbDsKIAogICAgIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwg
Ym9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9z
aXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6Om9wdGlvbmFs
PGludD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXIuY3BwCmluZGV4IDBk
NDQ2ZDRhNDliYTZkZmFlMzQxNGU2MTM4MjNmZmQzZWFlMTc5YjYuLjU2NjFmMDA2ZDE2MWUyMzUz
YjJkYzMyOTY3YTdhZDc4YTc3ZTFkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyLmNwcApAQCAtODEsNyArODEsNyBAQCBMYXlv
dXRQb2ludCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6bWFwRnJhZ21lbnRQb2ludEludG9GcmFn
bWVudGVkRmxvd0Nvb3JkaW5hdAogICAgIGVmZmVjdGl2ZUZpeGVkUG9pbnREZW5vbWluYXRvci5z
ZXRSYXdWYWx1ZSgxKTsKIAogICAgIGlmIChwb2ludExvZ2ljYWxUb3AgPCAwKSB7Ci0gICAgICAg
IExheW91dFBvaW50IHBvaW50SW5UaHJlYWQoMCwgZnJhZ21lbnRlZEZsb3dMb2dpY2FsVG9wKTsK
KyAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnRJblRocmVhZCgwX2x1LCBmcmFnbWVudGVkRmxvd0xv
Z2ljYWxUb3ApOwogICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBv
aW50SW5UaHJlYWQgOiBwb2ludEluVGhyZWFkLnRyYW5zcG9zZWRQb2ludCgpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHAK
aW5kZXggMGU2MDU5NGRhMDIwYzY1YzNiZDdhYzgwYjc1Y2NiY2NkMDQ3ZWRkNC4uOTQxZGE0ZjQ1
MTdjN2M1YjllNzQ2MTdjYmVhZjVjNzIyMjFmZWIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCkBAIC0xNjgsNyArMTY4LDcgQEAg
dm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6dXBkYXRlTG9naWNhbFdpZHRoKCkKICAgICAvLyBJ
ZiB0aGUgZnJhZ21lbnRzIGhhdmUgbm9uLXVuaWZvcm0gbG9naWNhbCB3aWR0aHMsIHRoZW4gaW5z
ZXJ0IGluc2V0IGluZm9ybWF0aW9uIGZvciB0aGUgUmVuZGVyRnJhZ21lbnRlZEZsb3cuCiAgICAg
Zm9yIChhdXRvJiBmcmFnbWVudCA6IG1fZnJhZ21lbnRMaXN0KSB7CiAgICAgICAgIExheW91dFVu
aXQgZnJhZ21lbnRMb2dpY2FsV2lkdGggPSBmcmFnbWVudC0+cGFnZUxvZ2ljYWxXaWR0aCgpOwot
ICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBMYXlvdXRVbml0KCkgOiBsb2dpY2FsV2lkdGggLSBmcmFnbWVu
dExvZ2ljYWxXaWR0aDsKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxlKCku
ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCAt
IGZyYWdtZW50TG9naWNhbFdpZHRoOwogICAgICAgICBmcmFnbWVudC0+c2V0UmVuZGVyQm94RnJh
Z21lbnRJbmZvKHRoaXMsIGxvZ2ljYWxMZWZ0LCBmcmFnbWVudExvZ2ljYWxXaWR0aCwgZmFsc2Up
OwogICAgIH0KIH0KQEAgLTI4OCw3ICsyODgsNyBAQCBMYXlvdXRQb2ludCBSZW5kZXJGcmFnbWVu
dGVkRmxvdzo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoY29uc3QgUgog
ICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oYm94TW9kZWxPYmplY3QpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gVXNlIGJvcmRlckJveFJlY3RJbkZyYWdtZW50IHRvIGFjY291bnQgZm9yIHZh
cmlhdGlvbnMgc3VjaCBhcyBwZXJjZW50YWdlIG1hcmdpbnMuCiAgICAgICAgICAgICAgICAgTGF5
b3V0UmVjdCBib3JkZXJCb3hSZWN0ID0gZG93bmNhc3Q8UmVuZGVyQm94Pihib3hNb2RlbE9iamVj
dCkuYm9yZGVyQm94UmVjdEluRnJhZ21lbnQoc3RhcnRGcmFnbWVudCwgUmVuZGVyQm94OjpEb05v
dENhY2hlUmVuZGVyQm94RnJhZ21lbnRJbmZvKTsKLSAgICAgICAgICAgICAgICByZWZlcmVuY2VQ
b2ludC5tb3ZlKGJvcmRlckJveFJlY3QubG9jYXRpb24oKS54KCksIDApOworICAgICAgICAgICAg
ICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUoYm9yZGVyQm94UmVjdC5sb2NhdGlvbigpLngoKSwgMF9s
dSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEdldCB0aGUg
bG9naWNhbCB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBvYmplY3QuCkBAIC0zMTQsOSAr
MzE0LDkgQEAgTGF5b3V0UG9pbnQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OmFkanVzdGVkUG9zaXRp
b25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNvbnN0IFIKICAgICAgICAgICAgIC8vIFNpbmNlIHRo
ZSB0b3AgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgY2hlY2sgaWYgdGhlCiAgICAgICAgICAgICAvLyBy
ZWxhdGl2ZS9zdGlja3kgcG9zaXRpb25pbmcgbXVzdCBiZSByZWNvbnNpZGVyZWQuCiAgICAgICAg
ICAgICBpZiAoYm94TW9kZWxPYmplY3QuaXNSZWxhdGl2ZWx5UG9zaXRpb25lZCgpKQotICAgICAg
ICAgICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUoMCwgYm94TW9kZWxPYmplY3QucmVsYXRpdmVQ
b3NpdGlvbk9mZnNldCgpLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2lu
dC5tb3ZlKDBfbHUsIGJveE1vZGVsT2JqZWN0LnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKS5oZWln
aHQoKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChib3hNb2RlbE9iamVjdC5pc1N0aWNraWx5UG9z
aXRpb25lZCgpKQotICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUoMCwgYm94TW9k
ZWxPYmplY3Quc3RpY2t5UG9zaXRpb25PZmZzZXQoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICAg
ICAgcmVmZXJlbmNlUG9pbnQubW92ZSgwX2x1LCBib3hNb2RlbE9iamVjdC5zdGlja3lQb3NpdGlv
bk9mZnNldCgpLmhlaWdodCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gU2lu
Y2Ugd2UncmUgbG9va2luZyBmb3IgdGhlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgYm9keSwgd2Ug
bXVzdCBhbHNvCkBAIC0zMzAsNyArMzMwLDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyRnJhZ21lbnRl
ZEZsb3c6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNvbnN0IFIKIExh
eW91dFVuaXQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KExh
eW91dFVuaXQgb2Zmc2V0KSBjb25zdAogewogICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBm
cmFnbWVudCA9IGZyYWdtZW50QXRCbG9ja09mZnNldCgwLCBvZmZzZXQsIGZhbHNlKTsKLSAgICBy
ZXR1cm4gZnJhZ21lbnQgPyBmcmFnbWVudC0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQob2Zmc2V0
KSA6IExheW91dFVuaXQoKTsKKyAgICByZXR1cm4gZnJhZ21lbnQgPyBmcmFnbWVudC0+cGFnZUxv
Z2ljYWxUb3BGb3JPZmZzZXQob2Zmc2V0KSA6IDBfbHU7CiB9CiAKIExheW91dFVuaXQgUmVuZGVy
RnJhZ21lbnRlZEZsb3c6OnBhZ2VMb2dpY2FsV2lkdGhGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZz
ZXQpIGNvbnN0CkBAIC03ODcsNyArNzg3LDcgQEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6
dXBkYXRlRnJhZ21lbnRzRnJhZ21lbnRlZEZsb3dQb3J0aW9uUmVjdCgpCiAgICAgICAgIExheW91
dFVuaXQgZnJhZ21lbnRMb2dpY2FsV2lkdGggPSBmcmFnbWVudC0+cGFnZUxvZ2ljYWxXaWR0aCgp
OwogICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbEhlaWdodCA9IHN0ZDo6bWluPExh
eW91dFVuaXQ+KFJlbmRlckZyYWdtZW50ZWRGbG93OjptYXhMb2dpY2FsSGVpZ2h0KCkgLSBsb2dp
Y2FsSGVpZ2h0LCBmcmFnbWVudC0+bG9naWNhbEhlaWdodE9mQWxsRnJhZ21lbnRlZEZsb3dDb250
ZW50KCkpOwogCi0gICAgICAgIExheW91dFJlY3QgZnJhZ21lbnRSZWN0KHN0eWxlKCkuZGlyZWN0
aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbFdpZHRo
KCkgLSBmcmFnbWVudExvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCwgZnJhZ21lbnRMb2dpY2Fs
V2lkdGgsIGZyYWdtZW50TG9naWNhbEhlaWdodCk7CisgICAgICAgIExheW91dFJlY3QgZnJhZ21l
bnRSZWN0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6
IGxvZ2ljYWxXaWR0aCgpIC0gZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQsIGZy
YWdtZW50TG9naWNhbFdpZHRoLCBmcmFnbWVudExvZ2ljYWxIZWlnaHQpOwogCiAgICAgICAgIGZy
YWdtZW50LT5zZXRGcmFnbWVudGVkRmxvd1BvcnRpb25SZWN0KGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBmcmFnbWVudFJlY3QgOiBmcmFnbWVudFJlY3QudHJhbnNwb3NlZFJlY3QoKSk7CiAK
QEAgLTg1Miw3ICs4NTIsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckZyYWdtZW50ZWRGbG93OjpmcmFn
bWVudHNCb3VuZGluZ0JveChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdQogTGF5b3V0VW5pdCBS
ZW5kZXJGcmFnbWVudGVkRmxvdzo6b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0RnJhZ21lbnQo
Y29uc3QgUmVuZGVyQmxvY2sqIGN1cnJlbnRCbG9jaykgY29uc3QKIHsKICAgICAvLyBBcyBhIGxh
c3QgcmVzb3J0LCB0YWtlIHRoZSBzbG93IHBhdGguCi0gICAgTGF5b3V0UmVjdCBibG9ja1JlY3Qo
MCwgMCwgY3VycmVudEJsb2NrLT53aWR0aCgpLCBjdXJyZW50QmxvY2stPmhlaWdodCgpKTsKKyAg
ICBMYXlvdXRSZWN0IGJsb2NrUmVjdCgwX2x1LCAwX2x1LCBjdXJyZW50QmxvY2stPndpZHRoKCks
IGN1cnJlbnRCbG9jay0+aGVpZ2h0KCkpOwogICAgIHdoaWxlIChjdXJyZW50QmxvY2sgJiYgIWlz
PFJlbmRlclZpZXc+KCpjdXJyZW50QmxvY2spICYmICFjdXJyZW50QmxvY2stPmlzUmVuZGVyRnJh
Z21lbnRlZEZsb3coKSkgewogICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmVyQmxvY2sgPSBj
dXJyZW50QmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICBBU1NFUlQoY29udGFpbmVy
QmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IGFiN2My
ZGY3NmM4MTI1MTkxMjJkZjgyZTU2MmYxNTQ4ZDFmMzc2NzEuLjM5ZmJiYjNkMmE1MGE3NjZiNzFk
NmYwOTU0YmIyMjFkZmQwNTdmZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHAKQEAgLTIzNiw4ICsyMzYsOCBAQCB2b2lkIFJlbmRlckdyaWQ6OmxheW91dEJsb2NrKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKICAgICAgICAgLy8gMi0gTmV4dCwgdGhl
IHRyYWNrIHNpemluZyBhbGdvcml0aG0gcmVzb2x2ZXMgdGhlIHNpemVzIG9mIHRoZSBncmlkIHJv
d3MsCiAgICAgICAgIC8vIHVzaW5nIHRoZSBncmlkIGNvbHVtbiBzaXplcyBjYWxjdWxhdGVkIGlu
IHRoZSBwcmV2aW91cyBzdGVwLgogICAgICAgICBpZiAoIWhhc0RlZmluaXRlTG9naWNhbEhlaWdo
dCkgewotICAgICAgICAgICAgbV9taW5Db250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCgpOwotICAg
ICAgICAgICAgbV9tYXhDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCgpOworICAgICAgICAgICAg
bV9taW5Db250ZW50SGVpZ2h0ID0gMF9sdTsKKyAgICAgICAgICAgIG1fbWF4Q29udGVudEhlaWdo
dCA9IDBfbHU7CiAgICAgICAgICAgICBjb21wdXRlVHJhY2tTaXplc0ZvckluZGVmaW5pdGVTaXpl
KG1fdHJhY2tTaXppbmdBbGdvcml0aG0sIEZvclJvd3MsICptX21pbkNvbnRlbnRIZWlnaHQsICpt
X21heENvbnRlbnRIZWlnaHQpOwogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IHJlYWxseSBhZGRlZCB0byB0aGUgaW50cmluc2ljIGhlaWdodCBpbiBSZW5kZXJCb3g6OmNvbXB1
dGVDb250ZW50QW5kU2Nyb2xsYmFyTG9naWNhbEhlaWdodFVzaW5nKCkuCiAgICAgICAgICAgICAv
LyBSZW1vdmUgdGhpcyB3aGVuIHRoYXQgaXMgZml4ZWQuCkBAIC0zMDQsNyArMzA0LDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJHcmlkOjpncmlkR2FwKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJl
Y3Rpb24sIHN0ZDo6b3B0aW9uYWwKIHsKICAgICBjb25zdCBHYXBMZW5ndGgmIGdhcExlbmd0aCA9
IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zPyBzdHlsZSgpLmNvbHVtbkdhcCgpIDogc3R5bGUoKS5y
b3dHYXAoKTsKICAgICBpZiAoZ2FwTGVuZ3RoLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBM
YXlvdXRVbml0KCk7CisgICAgICAgIHJldHVybiAwX2x1OwogCiAgICAgcmV0dXJuIHZhbHVlRm9y
TGVuZ3RoKGdhcExlbmd0aC5sZW5ndGgoKSwgYXZhaWxhYmxlU2l6ZS52YWx1ZV9vcigwKSk7CiB9
CkBAIC00ODEsNyArNDgxLDcgQEAgdW5zaWduZWQgUmVuZGVyR3JpZDo6Y29tcHV0ZUF1dG9SZXBl
YXRUcmFja3NDb3VudChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWMKICAgICB9CiAgICAg
Ly8gRm9yIHRoZSBwdXJwb3NlIG9mIGZpbmRpbmcgdGhlIG51bWJlciBvZiBhdXRvLXJlcGVhdGVk
IHRyYWNrcywgdGhlIFVBIG11c3QgZmxvb3IgdGhlIHRyYWNrIHNpemUgdG8gYSBVQS1zcGVjaWZp
ZWQKICAgICAvLyB2YWx1ZSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLiBJdCBpcyBzdWdnZXN0
ZWQgdGhhdCB0aGlzIGZsb29yIGJlIDFweC4KLSAgICBhdXRvUmVwZWF0VHJhY2tzU2l6ZSA9IHN0
ZDo6bWF4PExheW91dFVuaXQ+KExheW91dFVuaXQoMSksIGF1dG9SZXBlYXRUcmFja3NTaXplKTsK
KyAgICBhdXRvUmVwZWF0VHJhY2tzU2l6ZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDFfbHUsIGF1
dG9SZXBlYXRUcmFja3NTaXplKTsKIAogICAgIC8vIFRoZXJlIHdpbGwgYmUgYWx3YXlzIGF0IGxl
YXN0IDEgYXV0by1yZXBlYXQgdHJhY2ssIHNvIHRha2UgaXQgYWxyZWFkeSBpbnRvIGFjY291bnQg
d2hlbiBjb21wdXRpbmcgdGhlIHRvdGFsIHRyYWNrIHNpemUuCiAgICAgTGF5b3V0VW5pdCB0cmFj
a3NTaXplID0gYXV0b1JlcGVhdFRyYWNrc1NpemU7CkBAIC04MzYsNyArODM2LDcgQEAgVmVjdG9y
PExheW91dFVuaXQ+IFJlbmRlckdyaWQ6OnRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRU
cmFja1NpemluZ0RpcmVjdGkKIAogICAgIEFTU0VSVCghbV9ncmlkLm5lZWRzSXRlbXNQbGFjZW1l
bnQoKSk7CiAgICAgYm9vbCBoYXNDb2xsYXBzZWRUcmFja3MgPSBtX2dyaWQuaGFzQXV0b1JlcGVh
dEVtcHR5VHJhY2tzKGRpcmVjdGlvbik7Ci0gICAgTGF5b3V0VW5pdCBnYXAgPSAhaGFzQ29sbGFw
c2VkVHJhY2tzID8gZ3JpZEdhcChkaXJlY3Rpb24pIDogTGF5b3V0VW5pdCgpOworICAgIExheW91
dFVuaXQgZ2FwID0gIWhhc0NvbGxhcHNlZFRyYWNrcyA/IGdyaWRHYXAoZGlyZWN0aW9uKSA6IDBf
bHU7CiAgICAgdHJhY2tzLnJlc2VydmVDYXBhY2l0eShudW1Qb3NpdGlvbnMgLSAxKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVBvc2l0aW9ucyAtIDI7ICsraSkKICAgICAgICAgdHJh
Y2tzLmFwcGVuZChwb3NpdGlvbnNbaSArIDFdIC0gcG9zaXRpb25zW2ldIC0gb2Zmc2V0QmV0d2Vl
blRyYWNrcyAtIGdhcCk7CkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBv
cHVsYXRlR3JpZFBvc2l0aW9uc0ZvckRpcmVjdGlvbihHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
ZGlyZQogICAgIGlmIChudW1iZXJPZkxpbmVzID4gMSkgewogICAgICAgICAvLyBJZiB3ZSBoYXZl
IGNvbGxhcHNlZCB0cmFja3Mgd2UganVzdCBpZ25vcmUgZ2FwcyBoZXJlIGFuZCBhZGQgdGhlbSBs
YXRlciBhcyB3ZSBtaWdodCBub3QKICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZ2FwIGJldHdlZW4g
dHdvIGNvbnNlY3V0aXZlIHRyYWNrcyB3aXRob3V0IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcg
b25lcy4KLSAgICAgICAgTGF5b3V0VW5pdCBnYXAgPSAhaGFzQ29sbGFwc2VkVHJhY2tzID8gZ3Jp
ZEdhcChkaXJlY3Rpb24pIDogTGF5b3V0VW5pdCgpOworICAgICAgICBMYXlvdXRVbml0IGdhcCA9
ICFoYXNDb2xsYXBzZWRUcmFja3MgPyBncmlkR2FwKGRpcmVjdGlvbikgOiAwX2x1OwogICAgICAg
ICB1bnNpZ25lZCBuZXh0VG9MYXN0TGluZSA9IG51bWJlck9mTGluZXMgLSAyOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmV4dFRvTGFzdExpbmU7ICsraSkKICAgICAgICAgICAg
IHBvc2l0aW9uc1tpICsgMV0gPSBwb3NpdGlvbnNbaV0gKyBvZmZzZXQuZGlzdHJpYnV0aW9uT2Zm
c2V0ICsgdHJhY2tzW2ldLmJhc2VTaXplKCkgKyBnYXA7CkBAIC0xMTA2LDExICsxMTA2LDExIEBA
IHZvaWQgUmVuZGVyR3JpZDo6YXBwbHlTdHJldGNoQWxpZ25tZW50VG9DaGlsZElmTmVlZGVkKFJl
bmRlckJveCYgY2hpbGQpCiAgICAgYm9vbCBhbGxvd2VkVG9TdHJldGNoQ2hpbGRCbG9ja1NpemUg
PSBibG9ja0Zsb3dJc0NvbHVtbkF4aXMgPyBhbGxvd2VkVG9TdHJldGNoQ2hpbGRBbG9uZ0NvbHVt
bkF4aXMoY2hpbGQpIDogYWxsb3dlZFRvU3RyZXRjaENoaWxkQWxvbmdSb3dBeGlzKGNoaWxkKTsK
ICAgICBpZiAoYWxsb3dlZFRvU3RyZXRjaENoaWxkQmxvY2tTaXplKSB7CiAgICAgICAgIExheW91
dFVuaXQgc3RyZXRjaGVkTG9naWNhbEhlaWdodCA9IGF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9y
Q2hpbGRCZWZvcmVTdHJldGNoaW5nKEdyaWRMYXlvdXRGdW5jdGlvbnM6Om92ZXJyaWRlQ29udGFp
bmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRCbG9ja0RpcmVjdGlvbiku
dmFsdWUoKSwgY2hpbGQpOwotICAgICAgICBMYXlvdXRVbml0IGRlc2lyZWRMb2dpY2FsSGVpZ2h0
ID0gY2hpbGQuY29uc3RyYWluTG9naWNhbEhlaWdodEJ5TWluTWF4KHN0cmV0Y2hlZExvZ2ljYWxI
ZWlnaHQsIExheW91dFVuaXQoLTEpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBkZXNpcmVkTG9naWNh
bEhlaWdodCA9IGNoaWxkLmNvbnN0cmFpbkxvZ2ljYWxIZWlnaHRCeU1pbk1heChzdHJldGNoZWRM
b2dpY2FsSGVpZ2h0LCAtMV9sdSk7CiAgICAgICAgIGNoaWxkLnNldE92ZXJyaWRlQ29udGVudExv
Z2ljYWxIZWlnaHQoZGVzaXJlZExvZ2ljYWxIZWlnaHQgLSBjaGlsZC5ib3JkZXJBbmRQYWRkaW5n
TG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgaWYgKGRlc2lyZWRMb2dpY2FsSGVpZ2h0ICE9IGNo
aWxkLmxvZ2ljYWxIZWlnaHQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhdm9pZCBs
YXlpbmcgb3V0IGhlcmUgaW4gc29tZSBjYXNlcy4gU2VlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzg3
OTA1LgotICAgICAgICAgICAgY2hpbGQuc2V0TG9naWNhbEhlaWdodChMYXlvdXRVbml0KCkpOwor
ICAgICAgICAgICAgY2hpbGQuc2V0TG9naWNhbEhlaWdodCgwX2x1KTsKICAgICAgICAgICAgIGNo
aWxkLnNldE5lZWRzTGF5b3V0KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDQwLDcgKzE0NDAs
NyBAQCBib29sIFJlbmRlckdyaWQ6OmdyaWRQb3NpdGlvbklzQXV0b0Zvck91dE9mRmxvdyhHcmlk
UG9zaXRpb24gcG9zaXRpb24sIEdyaWRUcmFjawogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpyZXNv
bHZlQXV0b1N0YXJ0R3JpZFBvc2l0aW9uKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rp
b24pIGNvbnN0CiB7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JSb3dzIHx8IHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAg
ICAgICByZXR1cm4gMF9sdTsKIAogICAgIGludCBsYXN0TGluZSA9IG51bVRyYWNrcyhGb3JDb2x1
bW5zLCBtX2dyaWQpOwogICAgIENvbnRlbnRQb3NpdGlvbiBwb3NpdGlvbiA9IHN0eWxlKCkucmVz
b2x2ZWRKdXN0aWZ5Q29udGVudFBvc2l0aW9uKGNvbnRlbnRBbGlnbm1lbnROb3JtYWxCZWhhdmlv
ckdyaWQoKSk7CkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OnJl
c29sdmVBdXRvU3RhcnRHcmlkUG9zaXRpb24oR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcgog
ICAgICAgICByZXR1cm4gbV9jb2x1bW5Qb3NpdGlvbnNbbGFzdExpbmVdIC0gY2xpZW50TG9naWNh
bFdpZHRoKCk7CiAgICAgaWYgKHBvc2l0aW9uID09IENvbnRlbnRQb3NpdGlvbjo6U3RhcnQgfHwg
c3R5bGUoKS5yZXNvbHZlZEp1c3RpZnlDb250ZW50RGlzdHJpYnV0aW9uKGNvbnRlbnRBbGlnbm1l
bnROb3JtYWxCZWhhdmlvckdyaWQoKSkgPT0gQ29udGVudERpc3RyaWJ1dGlvbjo6U3RyZXRjaCkK
ICAgICAgICAgcmV0dXJuIG1fY29sdW1uUG9zaXRpb25zWzBdIC0gYm9yZGVyQW5kUGFkZGluZ0xv
Z2ljYWxMZWZ0KCk7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoKTsKKyAgICByZXR1cm4gMF9sdTsK
IH0KIAogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpyZXNvbHZlQXV0b0VuZEdyaWRQb3NpdGlvbihH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdApAQCAtMTUxMSwxMyArMTUx
MSwxMyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmdyaWRBcmVhQnJlYWR0aEZvck91dE9mRmxv
d0NoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsCiAgICAgICAgICAgICBlbmQgLT0gaXNSb3dB
eGlzID8gbV9vZmZzZXRCZXR3ZWVuQ29sdW1ucy5kaXN0cmlidXRpb25PZmZzZXQgOiBtX29mZnNl
dEJldHdlZW5Sb3dzLmRpc3RyaWJ1dGlvbk9mZnNldDsKICAgICAgICAgfQogICAgIH0KLSAgICBy
ZXR1cm4gc3RkOjptYXgoZW5kIC0gc3RhcnQsIExheW91dFVuaXQoKSk7CisgICAgcmV0dXJuIHN0
ZDo6bWF4KGVuZCAtIHN0YXJ0LCAwX2x1KTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjps
b2dpY2FsT2Zmc2V0Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgTGF5b3V0VW5pdCB0cmFja0JyZWFkdGgpIGNvbnN0CiB7
CiAgICAgaWYgKGhhc1N0YXRpY1Bvc2l0aW9uRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbikpCi0g
ICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CisgICAgICAgIHJldHVybiAwX2x1OwogCiAgICAg
Ym9vbCBpc1Jvd0F4aXMgPSBkaXJlY3Rpb24gPT0gRm9yQ29sdW1uczsKICAgICBib29sIGlzRmxv
d0F3YXJlUm93QXhpcyA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZv
ckNoaWxkKCp0aGlzLCBjaGlsZCwgZGlyZWN0aW9uKSA9PSBGb3JDb2x1bW5zOwpAQCAtMTYwMiw4
ICsxNjAyLDggQEAgc3RhdGljIHZvaWQgY29udGVudERpc3RyaWJ1dGlvbk9mZnNldChDb250ZW50
QWxpZ25tZW50RGF0YSYgb2Zmc2V0LCBjb25zdCBMYXlvdXQKICAgICAgICAgZmFsbGJhY2tQb3Np
dGlvbiA9IHJlc29sdmVDb250ZW50RGlzdHJpYnV0aW9uRmFsbGJhY2soZGlzdHJpYnV0aW9uKTsK
IAogICAgIC8vIEluaXRpYWxpemUgdG8gYW4gaW52YWxpZCBvZmZzZXQuCi0gICAgb2Zmc2V0LnBv
c2l0aW9uT2Zmc2V0ID0gTGF5b3V0VW5pdCgtMSk7Ci0gICAgb2Zmc2V0LmRpc3RyaWJ1dGlvbk9m
ZnNldCA9IExheW91dFVuaXQoLTEpOworICAgIG9mZnNldC5wb3NpdGlvbk9mZnNldCA9IC0xX2x1
OworICAgIG9mZnNldC5kaXN0cmlidXRpb25PZmZzZXQgPSAtMV9sdTsKICAgICBpZiAoYXZhaWxh
YmxlRnJlZVNwYWNlIDw9IDApCiAgICAgICAgIHJldHVybjsKIApAQCAtMTYxNCw3ICsxNjE0LDcg
QEAgc3RhdGljIHZvaWQgY29udGVudERpc3RyaWJ1dGlvbk9mZnNldChDb250ZW50QWxpZ25tZW50
RGF0YSYgb2Zmc2V0LCBjb25zdCBMYXlvdXQKICAgICAgICAgaWYgKG51bWJlck9mR3JpZFRyYWNr
cyA8IDIpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRpc3RyaWJ1dGlvbk9mZnNldCA9
IGF2YWlsYWJsZUZyZWVTcGFjZSAvIChudW1iZXJPZkdyaWRUcmFja3MgLSAxKTsKLSAgICAgICAg
cG9zaXRpb25PZmZzZXQgPSBMYXlvdXRVbml0KCk7CisgICAgICAgIHBvc2l0aW9uT2Zmc2V0ID0g
MF9sdTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZW50RGlzdHJpYnV0aW9uOjpTcGFj
ZUFyb3VuZDoKICAgICAgICAgaWYgKG51bWJlck9mR3JpZFRyYWNrcyA8IDEpCkBAIC0xNjU3LDgg
KzE2NTcsOCBAQCB2b2lkIFJlbmRlckdyaWQ6OmNvbXB1dGVDb250ZW50UG9zaXRpb25BbmREaXN0
cmlidXRpb25PZmZzZXQoR3JpZFRyYWNrU2l6aW5nRGlyZQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoYXZhaWxhYmxlRnJlZVNwYWNlIDw9IDAgJiYgY29udGVudEFsaWdubWVudERhdGEub3Zl
cmZsb3coKSA9PSBPdmVyZmxvd0FsaWdubWVudDo6U2FmZSkgewotICAgICAgICBvZmZzZXQucG9z
aXRpb25PZmZzZXQgPSBMYXlvdXRVbml0KCk7Ci0gICAgICAgIG9mZnNldC5kaXN0cmlidXRpb25P
ZmZzZXQgPSBMYXlvdXRVbml0KCk7CisgICAgICAgIG9mZnNldC5wb3NpdGlvbk9mZnNldCA9IDBf
bHU7CisgICAgICAgIG9mZnNldC5kaXN0cmlidXRpb25PZmZzZXQgPSAwX2x1OwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0xNjc3LDIxICsxNjc3LDIxIEBAIHZvaWQgUmVuZGVyR3JpZDo6
Y29tcHV0ZUNvbnRlbnRQb3NpdGlvbkFuZERpc3RyaWJ1dGlvbk9mZnNldChHcmlkVHJhY2tTaXpp
bmdEaXJlCiAgICAgY2FzZSBDb250ZW50UG9zaXRpb246OkZsZXhFbmQ6IC8vIE9ubHkgdXNlZCBp
biBmbGV4IGxheW91dCwgZm9yIG90aGVyIGxheW91dCwgaXQncyBlcXVpdmFsZW50IHRvICdlbmQn
LgogICAgIGNhc2UgQ29udGVudFBvc2l0aW9uOjpFbmQ6CiAgICAgICAgIGlmIChpc1Jvd0F4aXMp
Ci0gICAgICAgICAgICBwb3NpdGlvbk9mZnNldCA9IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gYXZhaWxhYmxlRnJlZVNwYWNlIDogTGF5b3V0VW5pdCgpOworICAgICAgICAgICAg
cG9zaXRpb25PZmZzZXQgPSBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGF2YWls
YWJsZUZyZWVTcGFjZSA6IDBfbHU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvc2l0aW9u
T2Zmc2V0ID0gYXZhaWxhYmxlRnJlZVNwYWNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENv
bnRlbnRQb3NpdGlvbjo6RmxleFN0YXJ0OiAvLyBPbmx5IHVzZWQgaW4gZmxleCBsYXlvdXQsIGZv
ciBvdGhlciBsYXlvdXQsIGl0J3MgZXF1aXZhbGVudCB0byAnc3RhcnQnLgogICAgIGNhc2UgQ29u
dGVudFBvc2l0aW9uOjpTdGFydDoKICAgICAgICAgaWYgKGlzUm93QXhpcykKLSAgICAgICAgICAg
IHBvc2l0aW9uT2Zmc2V0ID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBMYXlv
dXRVbml0KCkgOiBhdmFpbGFibGVGcmVlU3BhY2U7CisgICAgICAgICAgICBwb3NpdGlvbk9mZnNl
dCA9IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMF9sdSA6IGF2YWlsYWJsZUZy
ZWVTcGFjZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZW50UG9zaXRpb246OkJhc2Vs
aW5lOgogICAgIGNhc2UgQ29udGVudFBvc2l0aW9uOjpMYXN0QmFzZWxpbmU6CiAgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhlIHByZXZpb3VzIHZhbHVlcy4gRm9yIG5vdywgd2UgYWx3YXlz
ICdzdGFydCcgYWxpZ24uCiAgICAgICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvMTQ1NTY2CiAg
ICAgICAgIGlmIChpc1Jvd0F4aXMpCi0gICAgICAgICAgICBwb3NpdGlvbk9mZnNldCA9IHN0eWxl
KCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTGF5b3V0VW5pdCgpIDogYXZhaWxhYmxlRnJl
ZVNwYWNlOworICAgICAgICAgICAgcG9zaXRpb25PZmZzZXQgPSBzdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IDBfbHUgOiBhdmFpbGFibGVGcmVlU3BhY2U7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ29udGVudFBvc2l0aW9uOjpOb3JtYWw6CiAgICAgZGVmYXVsdDoKQEAgLTE3
MDAsNyArMTcwMCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZUNvbnRlbnRQb3NpdGlvbkFu
ZERpc3RyaWJ1dGlvbk9mZnNldChHcmlkVHJhY2tTaXppbmdEaXJlCiAgICAgfQogCiAgICAgb2Zm
c2V0LnBvc2l0aW9uT2Zmc2V0ID0gcG9zaXRpb25PZmZzZXQ7Ci0gICAgb2Zmc2V0LmRpc3RyaWJ1
dGlvbk9mZnNldCA9IExheW91dFVuaXQoKTsKKyAgICBvZmZzZXQuZGlzdHJpYnV0aW9uT2Zmc2V0
ID0gMF9sdTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjp0cmFuc2xhdGVPdXRPZkZsb3dS
VExDb29yZGluYXRlKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgY29vcmRpbmF0
ZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4IGYzNTkxMGNm
NTA1MmNmNzZiZDRlZDA1NDJmZTkxNzA4YmI1YjdhN2UuLmNhNGNiZTNiZDUwMTVjYTQ1OWYzYzU2
NGU4N2VmNjM0ZDcyMWUzNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJHcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaApA
QCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogICAg
IHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENo
aWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxv
Z2ljYWxIZWlnaHQgPSAwX2x1KSBvdmVycmlkZTsKIAogICAgIGJvb2wgYXZvaWRzRmxvYXRzKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wgY2FuRHJvcEFub255bW91
c0Jsb2NrQ2hpbGQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKaW5kZXggMmM4MzQ5MGI2NTNjOTJkZmFkNzc0
NzllMDdiMzJhNDUwNzJkOGNmNi4uYzJkMDU5YjE1MmM1Y2I5Yzk2MzdiZTZlN2Q3NmM2YTI4MTQ5
YzBiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC03MDMs
NyArNzAzLDcgQEAgYm9vbCBSZW5kZXJJbWFnZTo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9C
ZU9ic2N1cmVkKGNvbnN0IExheW91dFBvaW50JiBwYWludE8KIAogTGF5b3V0VW5pdCBSZW5kZXJJ
bWFnZTo6bWluaW11bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW1hZ2VS
ZXNvdXJjZSgpLmVycm9yT2NjdXJyZWQoKSA/IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKSA6IExh
eW91dFVuaXQoKTsKKyAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZSgpLmVycm9yT2NjdXJyZWQoKSA/
IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKSA6IDBfbHU7CiB9CiAKIEhUTUxNYXBFbGVtZW50KiBS
ZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAKaW5kZXggYmEyNDE2OTk4NWQwYjA5OTlhZjgwNGNhZWIwZjNiZjI2Yzk2MzQ5
NC4uM2FhMjU1MzA2ZmUxY2M5MWRmNjRlYjNlZTMzZjczN2VmZmQ4ODc0YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yNTA4LDcgKzI1MDgsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29s
dXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwogICAgICAgICBBU1NFUlQoYm94KTsKICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEV4cG9zZVJl
Y3QoYm94LT5hYnNvbHV0ZVRvTG9jYWxRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QoYWJzb2x1dGVS
ZWN0KSkpLmJvdW5kaW5nQm94KCkpOwotICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzKDAs
IDAsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIExh
eW91dFJlY3QgbGF5ZXJCb3VuZHMoMF9sdSwgMF9sdSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gt
PmNsaWVudEhlaWdodCgpKTsKICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVj
dFRvRXhwb3NlKGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRp
b25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCiAgICAgICAgIFNjcm9sbE9mZnNldCBjbGFt
cGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0lu
dFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwpAQCAtMjc1NSw3
ICsyNzU1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmYKICAgICAgICAgICAgIHN0eWxlZEVs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCByZW5k
ZXJlci0+bWFyZ2luTGVmdCgpIC8gem9vbUZhY3RvciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
WCk7CiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5TWFyZ2luUmlnaHQsIHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3Rv
ciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgICAgIH0KLSAgICAgICAgTGF5b3V0
VW5pdCBiYXNlV2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/
IExheW91dFVuaXQoKSA6IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVu
dCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlV2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAt
IChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+aG9yaXpvbnRhbEJvcmRlckFu
ZFBhZGRpbmdFeHRlbnQoKSk7CiAgICAgICAgIGJhc2VXaWR0aCA9IGJhc2VXaWR0aCAvIHpvb21G
YWN0b3I7CiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICB9CkBAIC0yNzY2LDcgKzI3NjYsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQs
IGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdp
blRvcCgpIC8gem9vbUZhY3RvciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luQm90dG9tLCByZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VI
ZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyBMYXlvdXRV
bml0KCkgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOworICAg
ICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hT
aXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4
dGVudCgpKTsKICAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOwog
ICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgfQpAQCAtMzc3MSw3ICszNzcxLDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW4KICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBjb250ZXh0LmNsaXAoYWJzUmVjdCk7CiAgICAg
ICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gYWJzUmVjdDsKLSAgICAgICAgbGFyZ2VyQ29y
bmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIExheW91dFVuaXQ6
OmZyb21QaXhlbCgxKSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsgTGF5b3V0VW5pdDo6ZnJvbVBp
eGVsKDEpKSk7CisgICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2Vy
Q29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7CiAg
ICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3IobWFrZVJHQigyMTcsIDIxNywgMjE3
KSkpOwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAgICAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAppbmRleCA3MWRhNmQ3MGQ5ZTBiNTAz
OWM0MzU4NmFhNDZmZTY3OGMyM2EzZTk0Li40OTVlMjBmYjdhZmE5ZmY2NTU3NDAxMGZhZmJmMWM0
OTZiMjczNzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwCkBAIC0xMTc3LDggKzExNzcsOCBAQCBMYXlvdXRSZWN0IFJlbmRlckxpc3RNYXJrZXI6
OmxvY2FsU2VsZWN0aW9uUmVjdCgpCiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9
IG1faW5saW5lQm94V3JhcHBlci0+cm9vdCgpOwogICAgIExheW91dFVuaXQgbmV3TG9naWNhbFRv
cCA9IHJvb3RCb3guYmxvY2tGbG93KCkuc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpID8gbV9pbmxpbmVCb3hXcmFwcGVyLT5sb2dpY2FsQm90dG9tKCkgLSByb290Qm94LnNlbGVj
dGlvbkJvdHRvbSgpIDogcm9vdEJveC5zZWxlY3Rpb25Ub3AoKSAtIG1faW5saW5lQm94V3JhcHBl
ci0+bG9naWNhbFRvcCgpOwogICAgIGlmIChyb290Qm94LmJsb2NrRmxvdygpLnN0eWxlKCkuaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoMCwgbmV3
TG9naWNhbFRvcCwgd2lkdGgoKSwgcm9vdEJveC5zZWxlY3Rpb25IZWlnaHQoKSk7Ci0gICAgcmV0
dXJuIExheW91dFJlY3QobmV3TG9naWNhbFRvcCwgMCwgcm9vdEJveC5zZWxlY3Rpb25IZWlnaHQo
KSwgaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgwX2x1LCBuZXdMb2dpY2Fs
VG9wLCB3aWR0aCgpLCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgpKTsKKyAgICByZXR1cm4gTGF5
b3V0UmVjdChuZXdMb2dpY2FsVG9wLCAwX2x1LCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgpLCBo
ZWlnaHQoKSk7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTEzODUsOSArMTM4
NSw5IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6bGF5b3V0KCkKICAgICBmb3IgKGF1dG8qIGFu
Y2VzdG9yID0gcGFyZW50Qm94KCk7IGFuY2VzdG9yICYmIGFuY2VzdG9yICE9ICZtX2xpc3RJdGVt
OyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRCb3goKSkKICAgICAgICAgYmxvY2tPZmZzZXQg
Kz0gYW5jZXN0b3ItPmxvZ2ljYWxUb3AoKTsKICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCi0gICAgICAgIG1fbGluZU9mZnNldEZvckxpc3RJdGVtID0gbV9saXN0SXRl
bS5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoYmxvY2tPZmZzZXQsIERvTm90SW5kZW50VGV4dCwg
TGF5b3V0VW5pdCgpKTsKKyAgICAgICAgbV9saW5lT2Zmc2V0Rm9yTGlzdEl0ZW0gPSBtX2xpc3RJ
dGVtLmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShibG9ja09mZnNldCwgRG9Ob3RJbmRlbnRUZXh0
LCAwX2x1KTsKICAgICBlbHNlCi0gICAgICAgIG1fbGluZU9mZnNldEZvckxpc3RJdGVtID0gbV9s
aXN0SXRlbS5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGJsb2NrT2Zmc2V0LCBEb05vdEluZGVu
dFRleHQsIExheW91dFVuaXQoKSk7CisgICAgICAgIG1fbGluZU9mZnNldEZvckxpc3RJdGVtID0g
bV9saXN0SXRlbS5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGJsb2NrT2Zmc2V0LCBEb05vdElu
ZGVudFRleHQsIDBfbHUpOwogIAogICAgIGlmIChpc0ltYWdlKCkpIHsKICAgICAgICAgdXBkYXRl
TWFyZ2luc0FuZENvbnRlbnQoKTsKQEAgLTE0NDEsNyArMTQ0MSw3IEBAIHZvaWQgUmVuZGVyTGlz
dE1hcmtlcjo6dXBkYXRlQ29udGVudCgpCiAgICAgaWYgKGlzSW1hZ2UoKSkgewogICAgICAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIHNvbWV3aGF0IGFyYml0cmFyeSB3aWR0aC4gIEdlbmVyYXRlZCBp
bWFnZXMgZm9yIG1hcmtlcnMgcmVhbGx5IHdvbid0IGJlY29tZSBwYXJ0aWN1bGFybHkgdXNlZnVs
CiAgICAgICAgIC8vIHVudGlsIHdlIHN1cHBvcnQgdGhlIENTUzMgbWFya2VyIHBzZXVkb2NsYXNz
IHRvIGFsbG93IGNvbnRyb2wgb3ZlciB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgbWFya2Vy
IGJveC4KLSAgICAgICAgTGF5b3V0VW5pdCBidWxsZXRXaWR0aCA9IHN0eWxlKCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSAvIExheW91dFVuaXQoMik7CisgICAgICAgIExheW91dFVuaXQgYnVsbGV0
V2lkdGggPSBzdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLyAyX2x1OwogICAgICAgICBM
YXlvdXRTaXplIGRlZmF1bHRCdWxsZXRTaXplKGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7CiAg
ICAgICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gY2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1l
bnNpb25zKG1faW1hZ2UuZ2V0KCksIGRlZmF1bHRCdWxsZXRTaXplLCBEb05vdFNjYWxlQnlFZmZl
Y3RpdmVab29tKTsKICAgICAgICAgbV9pbWFnZS0+c2V0Q29udGFpbmVyQ29udGV4dEZvclJlbmRl
cmVyKCp0aGlzLCBpbWFnZVNpemUsIHN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKQEAgLTE3MDAs
NyArMTcwMCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygpCiAgICAg
ICAgICAgICAgICAgY2FzZSBMaXN0U3R5bGVUeXBlOjpOb25lOgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBt
YXJnaW5TdGFydCA9IG1fdGV4dC5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KCkgOiAtbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoKCkgLSBvZmZzZXQgLyAyOworICAgICAgICAgICAgICAgICAgICBtYXJn
aW5TdGFydCA9IG1fdGV4dC5pc0VtcHR5KCkgPyAwX2x1IDogLW1pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpIC0gb2Zmc2V0IC8gMjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBtYXJnaW5FbmQgPSAtbWFyZ2luU3RhcnQgLSBtaW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKTsKQEAgLTE5MDcsNyArMTkwNyw3IEBAIExheW91dFJlY3QgUmVuZGVyTGlzdE1hcmtl
cjo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjCiAg
ICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBSb290SW5saW5lQm94JiByb290Qm94
ID0gaW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7Ci0gICAgTGF5b3V0UmVjdCByZWN0KDAsIHJv
b3RCb3guc2VsZWN0aW9uVG9wKCkgLSB5KCksIHdpZHRoKCksIHJvb3RCb3guc2VsZWN0aW9uSGVp
Z2h0KCkpOworICAgIExheW91dFJlY3QgcmVjdCgwX2x1LCByb290Qm94LnNlbGVjdGlvblRvcCgp
IC0geSgpLCB3aWR0aCgpLCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgpKTsKICAgICAgICAgICAg
IAogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAgICAgcmV0dXJuIGNvbXB1dGVS
ZWN0Rm9yUmVwYWludChyZWN0LCByZXBhaW50Q29udGFpbmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvdy5jcHAKaW5kZXggNmFmYTBkZGZh
NDdiM2M0Njg5ODk4MDkzMzJmZjFiYTRiYmNjYzdiZC4uMGNmN2EzNjM0ZmM2YzliZmFjNmU3OTJk
ZmU3ZmZmMGM2YzNhZmZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck11bHRpQ29sdW1uRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck11bHRpQ29sdW1uRmxvdy5jcHAKQEAgLTI2MCw3ICsyNjAsNyBAQCBib29sIFJlbmRlck11
bHRpQ29sdW1uRmxvdzo6YWRkRm9yY2VkRnJhZ21lbnRCcmVhayhjb25zdCBSZW5kZXJCbG9jayog
YmxvY2ssIExheQogICAgIGlmIChhdXRvKiBtdWx0aWNvbFNldCA9IGRvd25jYXN0PFJlbmRlck11
bHRpQ29sdW1uU2V0PihmcmFnbWVudEF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldCkpKSB7CiAg
ICAgICAgIG11bHRpY29sU2V0LT5hZGRGb3JjZWRCcmVhayhvZmZzZXQpOwogICAgICAgICBpZiAo
b2Zmc2V0QnJlYWtBZGp1c3RtZW50KQotICAgICAgICAgICAgKm9mZnNldEJyZWFrQWRqdXN0bWVu
dCA9IHBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KG9mZnNldCkgPyBwYWdlUmVtYWluaW5nTG9n
aWNhbEhlaWdodEZvck9mZnNldChvZmZzZXQsIEluY2x1ZGVQYWdlQm91bmRhcnkpIDogTGF5b3V0
VW5pdDo6ZnJvbVBpeGVsKDApOworICAgICAgICAgICAgKm9mZnNldEJyZWFrQWRqdXN0bWVudCA9
IHBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KG9mZnNldCkgPyBwYWdlUmVtYWluaW5nTG9naWNh
bEhlaWdodEZvck9mZnNldChvZmZzZXQsIEluY2x1ZGVQYWdlQm91bmRhcnkpIDogMF9sdTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM2NSw5ICsz
NjUsOSBAQCBMYXlvdXRTaXplIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6cGh5c2ljYWxUcmFuc2xh
dGlvbk9mZnNldEZyb21GbG93VG9GcmFnbWVudChjbwogICAgICAgICAgICAgY29sdW1uUmVjdC5z
ZXRXaWR0aChwb3J0aW9uUmVjdC53aWR0aCgpKTsKICAgICAgICAgY29sdW1uU2V0LT5mbGlwRm9y
V3JpdGluZ01vZGUoY29sdW1uUmVjdCk7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKQotICAgICAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQubW92ZSgwLCBjb2x1bW5SZWN0
LnkoKSAtIHBvcnRpb25SZWN0LnkoKSAtIHBoeXNpY2FsRGVsdGFGcm9tUG9ydGlvbkJvdHRvbSk7
CisgICAgICAgICAgICB0cmFuc2xhdGlvbk9mZnNldC5tb3ZlKDBfbHUsIGNvbHVtblJlY3QueSgp
IC0gcG9ydGlvblJlY3QueSgpIC0gcGh5c2ljYWxEZWx0YUZyb21Qb3J0aW9uQm90dG9tKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQubW92ZShjb2x1bW5SZWN0
LngoKSAtIHBvcnRpb25SZWN0LngoKSAtIHBoeXNpY2FsRGVsdGFGcm9tUG9ydGlvbkJvdHRvbSwg
MCk7CisgICAgICAgICAgICB0cmFuc2xhdGlvbk9mZnNldC5tb3ZlKGNvbHVtblJlY3QueCgpIC0g
cG9ydGlvblJlY3QueCgpIC0gcGh5c2ljYWxEZWx0YUZyb21Qb3J0aW9uQm90dG9tLCAwX2x1KTsK
ICAgICB9CiAgICAgCiAgICAgcmV0dXJuIExheW91dFNpemUodHJhbnNsYXRpb25PZmZzZXQueCgp
LCB0cmFuc2xhdGlvbk9mZnNldC55KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKaW5kZXggYmUxMWJlMTlmNjhlMGY5Zjk4M2Q0ZWQz
ODYwYzAwMTZjODdkYzZiMC4uMWMxMmJhODU2ODQ0NDc4ZmQ0MTg4N2Q1ZjdjNTg4MWIzNGYxY2E1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
U2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5T
ZXQuY3BwCkBAIC0xNDgsNyArMTQ4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJNdWx0aUNvbHVtblNl
dDo6aGVpZ2h0QWRqdXN0ZWRGb3JTZXRPZmZzZXQoTGF5b3V0VW5pdCBoZWlnaHQpIGMKICAgICBM
YXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsVG9wID0gbG9naWNhbFRvcCgpIC0gbXVsdGljb2xCbG9j
ay5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAKICAgICBoZWlnaHQgLT0gY29udGVudExvZ2lj
YWxUb3A7Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KGhlaWdodCwgTGF5b3V0VW5pdDo6ZnJvbVBpeGVs
KDEpKTsgLy8gTGV0J3MgYXZvaWQgemVybyBoZWlnaHQsIGFzIHRoYXQgd291bGQgcHJvYmFibHkg
Y2F1c2UgYW4gaW5maW5pdGUgYW1vdW50IG9mIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC4KKyAgICBy
ZXR1cm4gc3RkOjptYXgoaGVpZ2h0LCAxX2x1KTsgLy8gTGV0J3MgYXZvaWQgemVybyBoZWlnaHQs
IGFzIHRoYXQgd291bGQgcHJvYmFibHkgY2F1c2UgYW4gaW5maW5pdGUgYW1vdW50IG9mIGNvbHVt
bnMgdG8gYmUgY3JlYXRlZC4KIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJNdWx0aUNvbHVtblNldDo6
cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpIGNvbnN0CkBAIC01OTgs
OSArNTk4LDkgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdWxlcyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG8KIAogICAgIGlmIChmcmFnbWVudGVk
Rmxvdy0+cHJvZ3Jlc3Npb25Jc0lubGluZSgpKSB7CiAgICAgICAgIGJvb2wgbGVmdFRvUmlnaHQg
PSBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBeIGZyYWdtZW50ZWRGbG93LT5wcm9n
cmVzc2lvbklzUmV2ZXJzZWQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBjdXJyTG9naWNhbExlZnRP
ZmZzZXQgPSBsZWZ0VG9SaWdodCA/IExheW91dFVuaXQoKSA6IGNvbnRlbnRMb2dpY2FsV2lkdGgo
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBjdXJyTG9naWNhbExlZnRPZmZzZXQgPSBsZWZ0VG9SaWdo
dCA/IDBfbHUgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgcnVs
ZUFkZCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwotICAgICAgICBMYXlvdXRVbml0
IHJ1bGVMb2dpY2FsTGVmdCA9IGxlZnRUb1JpZ2h0ID8gTGF5b3V0VW5pdCgpIDogY29udGVudExv
Z2ljYWxXaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHJ1bGVMb2dpY2FsTGVmdCA9IGxlZnRU
b1JpZ2h0ID8gMF9sdSA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5p
dCBpbmxpbmVEaXJlY3Rpb25TaXplID0gY29tcHV0ZWRDb2x1bW5XaWR0aCgpOwogICAgICAgICBC
b3hTaWRlIGJveFNpZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpCiAgICAgICAgICAgICA/
IGxlZnRUb1JpZ2h0ID8gQlNMZWZ0IDogQlNSaWdodApAQCAtNjMwLDkgKzYzMCw5IEBAIHZvaWQg
UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBib29s
IHRvcFRvQm90dG9tID0gIXN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSBeIGZy
YWdtZW50ZWRGbG93LT5wcm9ncmVzc2lvbklzUmV2ZXJzZWQoKTsKLSAgICAgICAgTGF5b3V0VW5p
dCBydWxlTGVmdCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBMYXlvdXRVbml0KCkgOiBj
b2xHYXAgLyAyIC0gY29sR2FwIC0gcnVsZVRoaWNrbmVzcyAvIDI7CisgICAgICAgIExheW91dFVu
aXQgcnVsZUxlZnQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gMF9sdSA6IGNvbEdhcCAv
IDIgLSBjb2xHYXAgLSBydWxlVGhpY2tuZXNzIC8gMjsKICAgICAgICAgTGF5b3V0VW5pdCBydWxl
V2lkdGggPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGVudFdpZHRoKCkgOiBydWxl
VGhpY2tuZXNzOwotICAgICAgICBMYXlvdXRVbml0IHJ1bGVUb3AgPSBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gY29sR2FwIC8gMiAtIGNvbEdhcCAtIHJ1bGVUaGlja25lc3MgLyAyIDogTGF5
b3V0VW5pdCgpOworICAgICAgICBMYXlvdXRVbml0IHJ1bGVUb3AgPSBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gY29sR2FwIC8gMiAtIGNvbEdhcCAtIHJ1bGVUaGlja25lc3MgLyAyIDogMF9s
dTsKICAgICAgICAgTGF5b3V0VW5pdCBydWxlSGVpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IHJ1bGVUaGlja25lc3MgOiBjb250ZW50SGVpZ2h0KCk7CiAgICAgICAgIExheW91dFJl
Y3QgcnVsZVJlY3QocnVsZUxlZnQsIHJ1bGVUb3AsIHJ1bGVXaWR0aCwgcnVsZUhlaWdodCk7CiAK
QEAgLTY0Nyw3ICs2NDcsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVt
blJ1bGVzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQbwogCiAgICAgICAgIEJv
eFNpZGUgYm94U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB0b3BUb0JvdHRvbSA/
IEJTVG9wIDogQlNCb3R0b20gOiB0b3BUb0JvdHRvbSA/IEJTTGVmdCA6IEJTUmlnaHQ7CiAKLSAg
ICAgICAgTGF5b3V0U2l6ZSBzdGVwKDAsIHRvcFRvQm90dG9tID8gY29tcHV0ZWRDb2x1bW5IZWln
aHQoKSArIGNvbEdhcCA6IC0oY29tcHV0ZWRDb2x1bW5IZWlnaHQoKSArIGNvbEdhcCkpOworICAg
ICAgICBMYXlvdXRTaXplIHN0ZXAoMF9sdSwgdG9wVG9Cb3R0b20gPyBjb21wdXRlZENvbHVtbkhl
aWdodCgpICsgY29sR2FwIDogLShjb21wdXRlZENvbHVtbkhlaWdodCgpICsgY29sR2FwKSk7CiAg
ICAgICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHN0ZXAg
PSBzdGVwLnRyYW5zcG9zZWRTaXplKCk7CiAKQEAgLTc4NSw3ICs3ODUsNyBAQCB2b2lkIFJlbmRl
ck11bHRpQ29sdW1uU2V0Ojpjb2xsZWN0TGF5ZXJGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZy
YWdtZW50cywgY29ucwogICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gaW50ZXJzZWN0IHRoZSBk
aXJ0eSByZWN0LiBXZSBoYXZlIHRvIGFwcGx5IGEgdHJhbnNsYXRpb24gYW5kIHNoaWZ0IGJhc2Vk
IG9mZgogICAgICAgICAvLyBvdXIgY29sdW1uIGluZGV4LgogICAgICAgICBMYXlvdXRTaXplIHRy
YW5zbGF0aW9uT2Zmc2V0OwotICAgICAgICBMYXlvdXRVbml0IGlubGluZU9mZnNldCA9IHByb2dy
ZXNzaW9uSXNJbmxpbmUgPyBpICogKGNvbExvZ2ljYWxXaWR0aCArIGNvbEdhcCkgOiBMYXlvdXRV
bml0KCk7CisgICAgICAgIExheW91dFVuaXQgaW5saW5lT2Zmc2V0ID0gcHJvZ3Jlc3Npb25Jc0lu
bGluZSA/IGkgKiAoY29sTG9naWNhbFdpZHRoICsgY29sR2FwKSA6IDBfbHU7CiAgICAgICAgIAog
ICAgICAgICBib29sIGxlZnRUb1JpZ2h0ID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgXiBwcm9ncmVzc2lvblJldmVyc2VkOwogICAgICAgICBpZiAoIWxlZnRUb1JpZ2h0KSB7CkBA
IC05MTUsNyArOTE1LDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnRyYW5z
bGF0ZUZyYWdtZW50UG9pbnRUb0ZyYWdtZW50ZWRGbG93KGNvbnN0IEwKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG5vIG5leHQgY29sdW1uLCB0aGlzIHN0aWxsIG1hcHMgdG8ganVzdCBhZnRl
ciB0aGlzIGNvbHVtbi4KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBvaW50Lnko
KSA+PSBnYXBBbmRDb2x1bW5SZWN0Lm1heFkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBvaW50ID0gZ2FwQW5kQ29sdW1uUmVjdC5sb2NhdGlvbigpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvaW50Lm1vdmUoMCwgZ2FwQW5kQ29sdW1uUmVjdC5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQubW92ZSgwX2x1LCBnYXBBbmRDb2x1bW5S
ZWN0LmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludC54KCkgPCBj
b2xSZWN0LngoKSkKQEAgLTk0NCw3ICs5NDQsNyBAQCBMYXlvdXRQb2ludCBSZW5kZXJNdWx0aUNv
bHVtblNldDo6dHJhbnNsYXRlRnJhZ21lbnRQb2ludFRvRnJhZ21lbnRlZEZsb3coY29uc3QgTAog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gbmV4dCBjb2x1bW4sIHRoaXMgc3RpbGwgbWFw
cyB0byBqdXN0IGFmdGVyIHRoaXMgY29sdW1uLgogICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAocG9pbnQueCgpID49IGdhcEFuZENvbHVtblJlY3QubWF4WCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnYXBBbmRDb2x1bW5SZWN0LmxvY2F0aW9uKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQubW92ZShnYXBBbmRDb2x1bW5SZWN0Lndp
ZHRoKCksIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoZ2FwQW5k
Q29sdW1uUmVjdC53aWR0aCgpLCAwX2x1KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
b2ludC55KCkgPCBjb2xSZWN0LnkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwCmluZGV4IDVlNmE1YjUzMmQwZmYxYTZmYzBkZGNiZTBiNzg4MTk3YzMxNjc2
ZTIuLmEwZjA4Mzk4ZGJiYjViODllMWE3NjZkYjVhODIxZGIxYTRjY2YyNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtNDM1LDcgKzQzNSw3IEBA
IHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEZs
b2F0U2l6ZSYgaW50cmluc2ljU2l6ZSwKIExheW91dFVuaXQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1
dGVDb25zdHJhaW5lZExvZ2ljYWxXaWR0aChTaG91bGRDb21wdXRlUHJlZmVycmVkIHNob3VsZENv
bXB1dGVQcmVmZXJyZWQpIGNvbnN0CiB7CiAgICAgaWYgKHNob3VsZENvbXB1dGVQcmVmZXJyZWQg
PT0gQ29tcHV0ZVByZWZlcnJlZCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChMYXlvdXRVbml0KCksIENvbXB1dGVQcmVmZXJy
ZWQpOworICAgICAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGlu
Z01pbk1heFdpZHRoKDBfbHUsIENvbXB1dGVQcmVmZXJyZWQpOwogCiAgICAgLy8gVGhlIGFmb3Jl
bWVudGlvbmVkICdjb25zdHJhaW50IGVxdWF0aW9uJyB1c2VkIGZvciBibG9jay1sZXZlbCwgbm9u
LXJlcGxhY2VkCiAgICAgLy8gZWxlbWVudHMgaW4gbm9ybWFsIGZsb3c6CkBAIC00NDcsNyArNDQ3
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZUNvbnN0cmFpbmVkTG9naWNh
bFdpZHRoKFNob3VsZENvbXB1dGVQcmVmZXJyZWQKICAgICAvLyBUaGlzIHNvbHZlcyBhYm92ZSBl
cXVhdGlvbiBmb3IgJ3dpZHRoJyAoPT0gbG9naWNhbFdpZHRoKS4KICAgICBMYXlvdXRVbml0IG1h
cmdpblN0YXJ0ID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkubWFyZ2luU3RhcnQoKSwg
bG9naWNhbFdpZHRoKTsKICAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCA9IG1pbmltdW1WYWx1ZUZv
ckxlbmd0aChzdHlsZSgpLm1hcmdpbkVuZCgpLCBsb2dpY2FsV2lkdGgpOwotICAgIGxvZ2ljYWxX
aWR0aCA9IHN0ZDo6bWF4KExheW91dFVuaXQoKSwgKGxvZ2ljYWxXaWR0aCAtIChtYXJnaW5TdGFy
dCArIG1hcmdpbkVuZCArIChzaXplKCkud2lkdGgoKSAtIGNsaWVudFdpZHRoKCkpKSkpOworICAg
IGxvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KDBfbHUsIChsb2dpY2FsV2lkdGggLSAobWFyZ2luU3Rh
cnQgKyBtYXJnaW5FbmQgKyAoc2l6ZSgpLndpZHRoKCkgLSBjbGllbnRXaWR0aCgpKSkpKTsKICAg
ICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRo
KGxvZ2ljYWxXaWR0aCwgc2hvdWxkQ29tcHV0ZVByZWZlcnJlZCk7CiB9CiAKQEAgLTYzMyw4ICs2
MzMsOCBAQCBMYXlvdXRSZWN0IFJlbmRlclJlcGxhY2VkOjpsb2NhbFNlbGVjdGlvblJlY3QoYm9v
bCBjaGVja1doZXRoZXJTZWxlY3RlZCkgY29uc3QKICAgICBjb25zdCBSb290SW5saW5lQm94JiBy
b290Qm94ID0gbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCk7CiAgICAgTGF5b3V0VW5pdCBuZXdM
b2dpY2FsVG9wID0gcm9vdEJveC5ibG9ja0Zsb3coKS5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkgPyBtX2lubGluZUJveFdyYXBwZXItPmxvZ2ljYWxCb3R0b20oKSAtIHJvb3RC
b3guc2VsZWN0aW9uQm90dG9tKCkgOiByb290Qm94LnNlbGVjdGlvblRvcCgpIC0gbV9pbmxpbmVC
b3hXcmFwcGVyLT5sb2dpY2FsVG9wKCk7CiAgICAgaWYgKHJvb3RCb3guYmxvY2tGbG93KCkuc3R5
bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVj
dCgwLCBuZXdMb2dpY2FsVG9wLCB3aWR0aCgpLCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgpKTsK
LSAgICByZXR1cm4gTGF5b3V0UmVjdChuZXdMb2dpY2FsVG9wLCAwLCByb290Qm94LnNlbGVjdGlv
bkhlaWdodCgpLCBoZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KDBfbHUsIG5l
d0xvZ2ljYWxUb3AsIHdpZHRoKCksIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0KCkpOworICAgIHJl
dHVybiBMYXlvdXRSZWN0KG5ld0xvZ2ljYWxUb3AsIDBfbHUsIHJvb3RCb3guc2VsZWN0aW9uSGVp
Z2h0KCksIGhlaWdodCgpKTsKIH0KIAogdm9pZCBSZW5kZXJSZXBsYWNlZDo6c2V0U2VsZWN0aW9u
U3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5oCmluZGV4IDBkZTE1MjZiYWEwM2IyNDMxYWRiYzA3OGQxMjRiYTk2ZWZlZDBj
NzQuLmE4ZGI4NmE0NGZhM2Q5OTg5ZmU2OTBlY2M2ODc4YmI4ZGJkYzFjOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCkBAIC01Miw3ICs1Miw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5p
dCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0IGZp
bmFsOwogCi0gICAgdmlydHVhbCBMYXlvdXRVbml0IG1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIExheW91dFVuaXQoKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtaW5p
bXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiAwX2x1OyB9CiAKICAgICB2b2lkIHNl
dFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgKaW5kZXggNjUxNjY5MDFhYzIyMzM1MGJhY2RiYjZm
MTUzOWUxOGQxZThjZDZkNi4uMTRiOGU2MGNiYWZkODc5N2M3OGJjMjRmMTk3MDYyMmRkY2I3ODJh
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oCkBAIC01Myw3ICs1
Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbGF5b3V0RXhjbHVkZWRDaGlsZHJlbihib29sIHJl
bGF5b3V0Q2hpbGRyZW4pIG92ZXJyaWRlOwogICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFn
ZUhlaWdodCA9IDApIG92ZXJyaWRlOworICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91
dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VIZWlnaHQgPSAwX2x1KSBvdmVycmlkZTsKIAogICAg
IGJvb2wgaXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5
bGUmKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAKaW5kZXggYTI0MDQwM2MzYmI3MGU3OThjMGU0YTY4MDkzMTFhOWY5OTBkMzE2Yi4uOTRl
NTY2YjZhMWY0OGZlZGM3MjdlZmM0YTkwZDAwNzA0YjgwNjU5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0zMDMsMTkgKzMwMywxOSBAQCBMYXlvdXRVbml0
IFJlbmRlclRhYmxlOjpjb252ZXJ0U3R5bGVMb2dpY2FsV2lkdGhUb0NvbXB1dGVkV2lkdGgoY29u
c3QgTGVuZ3RoJiBzdAogICAgIExheW91dFVuaXQgYm9yZGVyczsKICAgICBib29sIGlzQ1NTVGFi
bGUgPSAhaXM8SFRNTFRhYmxlRWxlbWVudD4oZWxlbWVudCgpKTsKICAgICBpZiAoaXNDU1NUYWJs
ZSAmJiBzdHlsZUxvZ2ljYWxXaWR0aC5pc1NwZWNpZmllZCgpICYmIHN0eWxlTG9naWNhbFdpZHRo
LmlzUG9zaXRpdmUoKSAmJiBzdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVu
dEJveCkKLSAgICAgICAgYm9yZGVycyA9IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChj
b2xsYXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQoKSA6IHBhZGRpbmdTdGFydCgpICsgcGFkZGlu
Z0VuZCgpKTsKKyAgICAgICAgYm9yZGVycyA9IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSAr
IChjb2xsYXBzZUJvcmRlcnMoKSA/IDBfbHUgOiBwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQo
KSk7CiAKICAgICByZXR1cm4gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlTG9naWNhbFdpZHRo
LCBhdmFpbGFibGVXaWR0aCkgKyBib3JkZXJzOwogfQogCiBMYXlvdXRVbml0IFJlbmRlclRhYmxl
Ojpjb252ZXJ0U3R5bGVMb2dpY2FsSGVpZ2h0VG9Db21wdXRlZEhlaWdodChjb25zdCBMZW5ndGgm
IHN0eWxlTG9naWNhbEhlaWdodCkKIHsKLSAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdC
ZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQo
KSA6IHBhZGRpbmdCZWZvcmUoKSk7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQWZ0
ZXIgPSBib3JkZXJBZnRlcigpICsgKGNvbGxhcHNlQm9yZGVycygpID8gTGF5b3V0VW5pdCgpIDog
cGFkZGluZ0FmdGVyKCkpOworICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSA9
IGJvcmRlckJlZm9yZSgpICsgKGNvbGxhcHNlQm9yZGVycygpID8gMF9sdSA6IHBhZGRpbmdCZWZv
cmUoKSk7CisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIgPSBib3JkZXJBZnRl
cigpICsgKGNvbGxhcHNlQm9yZGVycygpID8gMF9sdSA6IHBhZGRpbmdBZnRlcigpKTsKICAgICBM
YXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nQmVmb3JlICsgYm9y
ZGVyQW5kUGFkZGluZ0FmdGVyOwogICAgIGlmIChzdHlsZUxvZ2ljYWxIZWlnaHQuaXNGaXhlZCgp
KSB7CiAgICAgICAgIC8vIEhUTUwgdGFibGVzIHNpemUgYXMgdGhvdWdoIENTUyBoZWlnaHQgaW5j
bHVkZXMgYm9yZGVyL3BhZGRpbmcsIENTUyB0YWJsZXMgZG8gbm90LgotICAgICAgICBMYXlvdXRV
bml0IGJvcmRlcnMgPSBMYXlvdXRVbml0KCk7CisgICAgICAgIExheW91dFVuaXQgYm9yZGVyczsK
ICAgICAgICAgLy8gRklYTUU6IFdlIGNhbm5vdCBhcHBseSBib3gtc2l6aW5nOiBjb250ZW50LWJv
eCBvbiA8dGFibGU+IHdoaWNoIG90aGVyIGJyb3dzZXJzIGFsbG93LgogICAgICAgICBpZiAoaXM8
SFRNTFRhYmxlRWxlbWVudD4oZWxlbWVudCgpKSB8fCBzdHlsZSgpLmJveFNpemluZygpID09IEJv
eFNpemluZzo6Qm9yZGVyQm94KSB7CiAgICAgICAgICAgICBib3JkZXJzID0gYm9yZGVyQW5kUGFk
ZGluZzsKQEAgLTMyNyw3ICszMjcsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlOjpjb252ZXJ0
U3R5bGVMb2dpY2FsSGVpZ2h0VG9Db21wdXRlZEhlaWdodChjb25zdCBMZW5ndGgmCiAgICAgICAg
IHJldHVybiBjb21wdXRlSW50cmluc2ljTG9naWNhbENvbnRlbnRIZWlnaHRVc2luZyhzdHlsZUxv
Z2ljYWxIZWlnaHQsIGxvZ2ljYWxIZWlnaHQoKSAtIGJvcmRlckFuZFBhZGRpbmcsIGJvcmRlckFu
ZFBhZGRpbmcpLnZhbHVlX29yKDApOwogICAgIGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoKTsKKyAgICByZXR1cm4gMF9sdTsKIH0KIAog
dm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0Q2FwdGlvbihSZW5kZXJUYWJsZUNhcHRpb24mIGNhcHRp
b24pCkBAIC00NTcsOCArNDU3LDggQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAg
ICAgICAgIG1vdmVkU2VjdGlvbkxvZ2ljYWxUb3AgPSBzdGQ6Om1pbihsb2dpY2FsSGVpZ2h0KCks
IG9sZFRhYmxlTG9naWNhbFRvcCk7CiAgICAgICAgIH0KIAotICAgICAgICBMYXlvdXRVbml0IGJv
cmRlckFuZFBhZGRpbmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChjb2xsYXBzaW5nID8gTGF5
b3V0VW5pdCgpIDogcGFkZGluZ0JlZm9yZSgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJB
bmRQYWRkaW5nQWZ0ZXIgPSBib3JkZXJBZnRlcigpICsgKGNvbGxhcHNpbmcgPyBMYXlvdXRVbml0
KCkgOiBwYWRkaW5nQWZ0ZXIoKSk7CisgICAgICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGlu
Z0JlZm9yZSA9IGJvcmRlckJlZm9yZSgpICsgKGNvbGxhcHNpbmcgPyAwX2x1IDogcGFkZGluZ0Jl
Zm9yZSgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIgPSBib3Jk
ZXJBZnRlcigpICsgKGNvbGxhcHNpbmcgPyAwX2x1IDogcGFkZGluZ0FmdGVyKCkpOwogCiAgICAg
ICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpICsgYm9yZGVyQW5kUGFkZGluZ0Jl
Zm9yZSk7CiAKQEAgLTcyNCwxMSArNzI0LDExIEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkanVzdEJv
cmRlckJveFJlY3RGb3JQYWludGluZyhMYXlvdXRSZWN0JiByZWN0KQogICAgICAgICBpZiAoc3R5
bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICByZWN0LnNldEhl
aWdodChyZWN0LmhlaWdodCgpIC0gY2FwdGlvbkxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAg
aWYgKGNhcHRpb25Jc0JlZm9yZSkKLSAgICAgICAgICAgICAgICByZWN0Lm1vdmUoMCwgY2FwdGlv
bkxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgIHJlY3QubW92ZSgwX2x1LCBjYXB0aW9u
TG9naWNhbEhlaWdodCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZWN0LnNldFdp
ZHRoKHJlY3Qud2lkdGgoKSAtIGNhcHRpb25Mb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgIGlm
IChjYXB0aW9uSXNCZWZvcmUpCi0gICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGNhcHRpb25Mb2dp
Y2FsSGVpZ2h0LCAwKTsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUoY2FwdGlvbkxvZ2ljYWxI
ZWlnaHQsIDBfbHUpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtOTE1LDcgKzkxNSw3IEBA
IExheW91dFVuaXQgUmVuZGVyVGFibGU6Om9mZnNldFRvcEZvckNvbHVtbihjb25zdCBSZW5kZXJU
YWJsZUNvbCYgY29sdW1uKSBjb25zdAogICAgICAgICByZXR1cm4gbV9jb2x1bW5PZmZzZXRUb3A7
CiAgICAgfQogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHRvcE5vbkVtcHR5U2Vj
dGlvbigpOwotICAgIHJldHVybiBtX2NvbHVtbk9mZnNldFRvcCA9IHNlY3Rpb24gPyBzZWN0aW9u
LT5vZmZzZXRUb3AoKSA6IExheW91dFVuaXQoMCk7CisgICAgcmV0dXJuIG1fY29sdW1uT2Zmc2V0
VG9wID0gc2VjdGlvbiA/IHNlY3Rpb24tPm9mZnNldFRvcCgpIDogMF9sdTsKIH0KIAogTGF5b3V0
VW5pdCBSZW5kZXJUYWJsZTo6b2Zmc2V0TGVmdEZvckNvbHVtbihjb25zdCBSZW5kZXJUYWJsZUNv
bCYgY29sdW1uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAppbmRl
eCA5NGM3NTFiYmIwNTc4NTI4ZTI5MWQyYjUwMmJlYWZjY2FjNjM4MDJmLi45YWQ2ZDI2YmY0NzE0
NmEwZGUwYzk2NjA3NWM5ZGJlMmRiZDhjM2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuaApAQCAtMjA0LDcgKzIwNCw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGJv
cmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9uKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIC8vICdib3JkZXItc3BhY2luZycgb25seSBhcHBsaWVzIHRvIHNlcGFyYXRlIGJvcmRlcnMg
KHNlZSAxNy42LjEgVGhlIHNlcGFyYXRlZCBib3JkZXJzIG1vZGVsKS4KLSAgICAgICAgcmV0dXJu
IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IExheW91
dFVuaXQoKSA6IChwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQoKSArIGJvcmRlclNwYWNpbmdJ
blJvd0RpcmVjdGlvbigpKSk7CisgICAgICAgIHJldHVybiBib3JkZXJTdGFydCgpICsgYm9yZGVy
RW5kKCkgKyAoY29sbGFwc2VCb3JkZXJzKCkgPyAwX2x1IDogKHBhZGRpbmdTdGFydCgpICsgcGFk
ZGluZ0VuZCgpICsgYm9yZGVyU3BhY2luZ0luUm93RGlyZWN0aW9uKCkpKTsKICAgICB9CiAKICAg
ICAvLyBSZXR1cm4gdGhlIGZpcnN0IGNvbHVtbiBvciBjb2x1bW4tZ3JvdXAuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IDA5YmFkZjlj
ZWE4MmU0ZmVmNTAzMWYxZmMxYzExNmVjZDNhMTQyNjAuLjY2NTVkODIzZWMyOWI0Njc0NDcwMDBl
ZDEyYWViZDY5NzdkNjdjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJU
YWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KCkKICAgICAgICAgTGF5b3V0VW5pdCBi
YXNlbGluZURlc2NlbnQ7CiAKICAgICAgICAgLy8gT3VyIGJhc2Ugc2l6ZSBpcyB0aGUgYmlnZ2Vz
dCBsb2dpY2FsIGhlaWdodCBmcm9tIG91ciBjZWxscycgc3R5bGVzIChleGNsdWRpbmcgcm93IHNw
YW5uaW5nIGNlbGxzKS4KLSAgICAgICAgbV9yb3dQb3NbciArIDFdID0gc3RkOjptYXgobV9yb3dQ
b3Nbcl0gKyByZXNvbHZlTG9naWNhbEhlaWdodEZvclJvdyhtX2dyaWRbcl0ubG9naWNhbEhlaWdo
dCksIExheW91dFVuaXQ6OmZyb21QaXhlbCgwKSk7CisgICAgICAgIG1fcm93UG9zW3IgKyAxXSA9
IHN0ZDo6bWF4KG1fcm93UG9zW3JdICsgcmVzb2x2ZUxvZ2ljYWxIZWlnaHRGb3JSb3cobV9ncmlk
W3JdLmxvZ2ljYWxIZWlnaHQpLCAwX2x1KTsKIAogICAgICAgICBSb3cmIHJvdyA9IG1fZ3JpZFty
XS5yb3c7CiAgICAgICAgIHVuc2lnbmVkIHRvdGFsQ29scyA9IHJvdy5zaXplKCk7CkBAIC0zMTgs
NyArMzE4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2Fs
SGVpZ2h0KCkKICAgICAgICAgLy8gQWRkIHRoZSBib3JkZXItc3BhY2luZyB0byBvdXIgZmluYWwg
cG9zaXRpb24uCiAgICAgICAgIC8vIFVzZSB0YWJsZSBib3JkZXItc3BhY2luZyBldmVuIGluIG5v
bi10b3Agc2VjdGlvbnMKICAgICAgICAgc3BhY2luZyA9IHRhYmxlKCktPnZCb3JkZXJTcGFjaW5n
KCk7Ci0gICAgICAgIG1fcm93UG9zW3IgKyAxXSArPSBtX2dyaWRbcl0ucm93UmVuZGVyZXIgPyBz
cGFjaW5nIDogTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApOworICAgICAgICBtX3Jvd1Bvc1tyICsg
MV0gKz0gbV9ncmlkW3JdLnJvd1JlbmRlcmVyID8gc3BhY2luZyA6IDBfbHU7CiAgICAgICAgIG1f
cm93UG9zW3IgKyAxXSA9IHN0ZDo6bWF4KG1fcm93UG9zW3IgKyAxXSwgbV9yb3dQb3Nbcl0pOwog
ICAgIH0KIApAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpkaXN0
cmlidXRlRXh0cmFMb2dpY2FsSGVpZ2h0VG9QZXJjZW50Um93cyhMYXlvdXRVbml0JiBlCiAgICAg
ICAgICAgICBMYXlvdXRVbml0IHRvQWRkID0gc3RkOjptaW48TGF5b3V0VW5pdD4oZXh0cmFMb2dp
Y2FsSGVpZ2h0LCAodG90YWxIZWlnaHQgKiBtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5wZXJjZW50
KCkgLyAxMDApIC0gcm93SGVpZ2h0KTsKICAgICAgICAgICAgIC8vIElmIHRvQWRkIGlzIG5lZ2F0
aXZlLCB0aGVuIHdlIGRvbid0IHdhbnQgdG8gc2hyaW5rIHRoZSByb3cgKHRoaXMgYnVnCiAgICAg
ICAgICAgICAvLyBhZmZlY3RlZCBPdXRsb29rIFdlYiBBY2Nlc3MpLgotICAgICAgICAgICAgdG9B
ZGQgPSBzdGQ6Om1heChMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCksIHRvQWRkKTsKKyAgICAgICAg
ICAgIHRvQWRkID0gc3RkOjptYXgoMF9sdSwgdG9BZGQpOwogICAgICAgICAgICAgdG90YWxMb2dp
Y2FsSGVpZ2h0QWRkZWQgKz0gdG9BZGQ7CiAgICAgICAgICAgICBleHRyYUxvZ2ljYWxIZWlnaHQg
LT0gdG9BZGQ7CiAgICAgICAgICAgICB0b3RhbFBlcmNlbnQgLT0gbV9ncmlkW3JdLmxvZ2ljYWxI
ZWlnaHQucGVyY2VudCgpOwpAQCAtNTYwLDcgKzU2MCw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0
aW9uOjpsYXlvdXRSb3dzKCkKICAgICAgICAgaWYgKFJlbmRlclRhYmxlUm93KiByb3dSZW5kZXJl
ciA9IG1fZ3JpZFtyXS5yb3dSZW5kZXJlcikgewogICAgICAgICAgICAgLy8gRklYTUU6IHRoZSB4
KCkgcG9zaXRpb24gb2YgdGhlIHJvdyBzaG91bGQgYmUgdGFibGUoKS0+aEJvcmRlclNwYWNpbmco
KSBzbyB0aGF0IGl0IGNhbiAKICAgICAgICAgICAgIC8vIHJlcG9ydCB0aGUgY29ycmVjdCBvZmZz
ZXRMZWZ0LiBIb3dldmVyLCB0aGF0IHdpbGwgcmVxdWlyZSBhIGxvdCBvZiByZWJhc2VsaW5pbmcg
b2YgdGVzdCByZXN1bHRzLgotICAgICAgICAgICAgcm93UmVuZGVyZXItPnNldExvY2F0aW9uKExh
eW91dFBvaW50KDAsIG1fcm93UG9zW3JdKSk7CisgICAgICAgICAgICByb3dSZW5kZXJlci0+c2V0
TG9jYXRpb24oTGF5b3V0UG9pbnQoMF9sdSwgbV9yb3dQb3Nbcl0pKTsKICAgICAgICAgICAgIHJv
d1JlbmRlcmVyLT5zZXRMb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKCkpOwogICAgICAgICAgICAg
cm93UmVuZGVyZXItPnNldExvZ2ljYWxIZWlnaHQobV9yb3dQb3NbciArIDFdIC0gbV9yb3dQb3Nb
cl0gLSB2c3BhY2luZyk7CiAgICAgICAgICAgICByb3dSZW5kZXJlci0+dXBkYXRlTGF5ZXJUcmFu
c2Zvcm0oKTsKQEAgLTEwODksNDIgKzEwODksNDIgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNl
Y3Rpb246Om9mZnNldExlZnRGb3JSb3dHcm91cEJvcmRlcihSZW5kZXJUYWJsZUNlbGwqIGNlbGwK
IHsKICAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAg
IGlmIChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVy
biBjZWxsID8gY2VsbC0+eCgpICsgY2VsbC0+d2lkdGgoKSA6IExheW91dFVuaXQ6OmZyb21QaXhl
bCgwKTsKKyAgICAgICAgICAgIHJldHVybiBjZWxsID8gY2VsbC0+eCgpICsgY2VsbC0+d2lkdGgo
KSA6IDBfbHU7CiAgICAgICAgIHJldHVybiAtb3V0ZXJCb3JkZXJMZWZ0KCZzdHlsZSgpKTsKICAg
ICB9CiAgICAgYm9vbCBpc0xhc3RSb3cgPSByb3cgKyAxID09IG1fZ3JpZC5zaXplKCk7Ci0gICAg
cmV0dXJuIHJvd0dyb3VwUmVjdC53aWR0aCgpIC0gbV9yb3dQb3Nbcm93ICsgMV0gKyAoaXNMYXN0
Um93ID8gLW91dGVyQm9yZGVyTGVmdCgmc3R5bGUoKSkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwo
MCkpOworICAgIHJldHVybiByb3dHcm91cFJlY3Qud2lkdGgoKSAtIG1fcm93UG9zW3JvdyArIDFd
ICsgKGlzTGFzdFJvdyA/IC1vdXRlckJvcmRlckxlZnQoJnN0eWxlKCkpIDogMF9sdSk7CiB9CiAK
IExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpvZmZzZXRUb3BGb3JSb3dHcm91cEJvcmRl
cihSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIEJveFNpZGUgYm9yZGVyU2lkZSwgdW5zaWduZWQgcm93
KQogewogICAgIGJvb2wgaXNMYXN0Um93ID0gcm93ICsgMSA9PSBtX2dyaWQuc2l6ZSgpOwogICAg
IGlmIChzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBt
X3Jvd1Bvc1tyb3ddICsgKCFyb3cgJiYgYm9yZGVyU2lkZSA9PSBCU1JpZ2h0ID8gLW91dGVyQm9y
ZGVyVG9wKCZzdHlsZSgpKSA6IGlzTGFzdFJvdyAmJiBib3JkZXJTaWRlID09IEJTTGVmdCA/IG91
dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKSk7CisgICAg
ICAgIHJldHVybiBtX3Jvd1Bvc1tyb3ddICsgKCFyb3cgJiYgYm9yZGVyU2lkZSA9PSBCU1JpZ2h0
ID8gLW91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IGlzTGFzdFJvdyAmJiBib3JkZXJTaWRlID09
IEJTTGVmdCA/IG91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IDBfbHUpOwogICAgIGlmIChzdHls
ZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIChjZWxsID8gY2Vs
bC0+eSgpICsgY2VsbC0+aGVpZ2h0KCkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCkpICsgKGJv
cmRlclNpZGUgPT0gQlNMZWZ0ID8gb3V0ZXJCb3JkZXJUb3AoJnN0eWxlKCkpIDogTGF5b3V0VW5p
dDo6ZnJvbVBpeGVsKDApKTsKLSAgICByZXR1cm4gYm9yZGVyU2lkZSA9PSBCU1JpZ2h0ID8gLW91
dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKKyAgICAg
ICAgcmV0dXJuIChjZWxsID8gY2VsbC0+eSgpICsgY2VsbC0+aGVpZ2h0KCkgOiAwX2x1KSArIChi
b3JkZXJTaWRlID09IEJTTGVmdCA/IG91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IDBfbHUpOwor
ICAgIHJldHVybiBib3JkZXJTaWRlID09IEJTUmlnaHQgPyAtb3V0ZXJCb3JkZXJUb3AoJnN0eWxl
KCkpIDogMF9sdTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OnZlcnRpY2Fs
Um93R3JvdXBCb3JkZXJIZWlnaHQoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBjb25zdCBMYXlvdXRS
ZWN0JiByb3dHcm91cFJlY3QsIHVuc2lnbmVkIHJvdykKIHsKICAgICBib29sIGlzTGFzdFJvdyA9
IHJvdyArIDEgPT0gbV9ncmlkLnNpemUoKTsKICAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQotICAgICAgICByZXR1cm4gbV9yb3dQb3Nbcm93ICsgMV0gLSBtX3Jvd1Bv
c1tyb3ddICsgKCFyb3cgPyBvdXRlckJvcmRlclRvcCgmc3R5bGUoKSkgOiBpc0xhc3RSb3cgPyBv
dXRlckJvcmRlckJvdHRvbSgmc3R5bGUoKSkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCkpOwor
ICAgICAgICByZXR1cm4gbV9yb3dQb3Nbcm93ICsgMV0gLSBtX3Jvd1Bvc1tyb3ddICsgKCFyb3cg
PyBvdXRlckJvcmRlclRvcCgmc3R5bGUoKSkgOiBpc0xhc3RSb3cgPyBvdXRlckJvcmRlckJvdHRv
bSgmc3R5bGUoKSkgOiAwX2x1KTsKICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCi0gICAgICAgIHJldHVybiByb3dHcm91cFJlY3QuaGVpZ2h0KCkgLSAoY2VsbCA/IGNl
bGwtPnkoKSArIGNlbGwtPmhlaWdodCgpIDogTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApKSArIG91
dGVyQm9yZGVyQm90dG9tKCZzdHlsZSgpKTsKLSAgICByZXR1cm4gY2VsbCA/IHJvd0dyb3VwUmVj
dC5oZWlnaHQoKSAtIChjZWxsLT55KCkgLSBjZWxsLT5oZWlnaHQoKSkgOiBMYXlvdXRVbml0Ojpm
cm9tUGl4ZWwoMCk7CisgICAgICAgIHJldHVybiByb3dHcm91cFJlY3QuaGVpZ2h0KCkgLSAoY2Vs
bCA/IGNlbGwtPnkoKSArIGNlbGwtPmhlaWdodCgpIDogMF9sdSkgKyBvdXRlckJvcmRlckJvdHRv
bSgmc3R5bGUoKSk7CisgICAgcmV0dXJuIGNlbGwgPyByb3dHcm91cFJlY3QuaGVpZ2h0KCkgLSAo
Y2VsbC0+eSgpIC0gY2VsbC0+aGVpZ2h0KCkpIDogMF9sdTsKIH0KIAogTGF5b3V0VW5pdCBSZW5k
ZXJUYWJsZVNlY3Rpb246Omhvcml6b250YWxSb3dHcm91cEJvcmRlcldpZHRoKFJlbmRlclRhYmxl
Q2VsbCogY2VsbCwgY29uc3QgTGF5b3V0UmVjdCYgcm93R3JvdXBSZWN0LCB1bnNpZ25lZCByb3cs
IHVuc2lnbmVkIGNvbHVtbikKIHsKICAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkK
LSAgICAgICAgICAgIHJldHVybiByb3dHcm91cFJlY3Qud2lkdGgoKSAtIChjZWxsID8gY2VsbC0+
eCgpICsgY2VsbC0+d2lkdGgoKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKSkgKyAoIWNvbHVt
biA/IG91dGVyQm9yZGVyTGVmdCgmc3R5bGUoKSkgOiBjb2x1bW4gPT0gdGFibGUoKS0+bnVtRWZm
Q29scygpID8gb3V0ZXJCb3JkZXJSaWdodCgmc3R5bGUoKSkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4
ZWwoMCkpOwotICAgICAgICByZXR1cm4gY2VsbCA/IHJvd0dyb3VwUmVjdC53aWR0aCgpIC0gKGNl
bGwtPngoKSAtIGNlbGwtPndpZHRoKCkpIDogTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApOworICAg
ICAgICAgICAgcmV0dXJuIHJvd0dyb3VwUmVjdC53aWR0aCgpIC0gKGNlbGwgPyBjZWxsLT54KCkg
KyBjZWxsLT53aWR0aCgpIDogMF9sdSkgKyAoIWNvbHVtbiA/IG91dGVyQm9yZGVyTGVmdCgmc3R5
bGUoKSkgOiBjb2x1bW4gPT0gdGFibGUoKS0+bnVtRWZmQ29scygpID8gb3V0ZXJCb3JkZXJSaWdo
dCgmc3R5bGUoKSkgOiAwX2x1KTsKKyAgICAgICAgcmV0dXJuIGNlbGwgPyByb3dHcm91cFJlY3Qu
d2lkdGgoKSAtIChjZWxsLT54KCkgLSBjZWxsLT53aWR0aCgpKSA6IDBfbHU7CiAgICAgfQogICAg
IGJvb2wgaXNMYXN0Um93ID0gcm93ICsgMSA9PSBtX2dyaWQuc2l6ZSgpOwotICAgIHJldHVybiBt
X3Jvd1Bvc1tyb3cgKyAxXSAtIG1fcm93UG9zW3Jvd10gKyAoaXNMYXN0Um93ID8gb3V0ZXJCb3Jk
ZXJMZWZ0KCZzdHlsZSgpKSA6ICFyb3cgPyBvdXRlckJvcmRlclJpZ2h0KCZzdHlsZSgpKSA6IExh
eW91dFVuaXQ6OmZyb21QaXhlbCgwKSk7CisgICAgcmV0dXJuIG1fcm93UG9zW3JvdyArIDFdIC0g
bV9yb3dQb3Nbcm93XSArIChpc0xhc3RSb3cgPyBvdXRlckJvcmRlckxlZnQoJnN0eWxlKCkpIDog
IXJvdyA/IG91dGVyQm9yZGVyUmlnaHQoJnN0eWxlKCkpIDogMF9sdSk7CiB9CiAKIHZvaWQgUmVu
ZGVyVGFibGVTZWN0aW9uOjpwYWludFJvd0dyb3VwQm9yZGVySWZSZXF1aXJlZChjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCB1bnNpZ25l
ZCByb3csIHVuc2lnbmVkIGNvbHVtbiwgQm94U2lkZSBib3JkZXJTaWRlLCBSZW5kZXJUYWJsZUNl
bGwqIGNlbGwpCkBAIC0xMTM3LDcgKzExMzcsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6
cGFpbnRSb3dHcm91cEJvcmRlcklmUmVxdWlyZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgog
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CiAgICAgYm9vbCBh
bnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXNMaW5lcyhwYWludEluZm8uY29udGV4dCgpKTsKICAg
ICBMYXlvdXRSZWN0IHJvd0dyb3VwUmVjdCA9IExheW91dFJlY3QocGFpbnRPZmZzZXQsIHNpemUo
KSk7Ci0gICAgcm93R3JvdXBSZWN0Lm1vdmVCeSgtTGF5b3V0UG9pbnQob3V0ZXJCb3JkZXJMZWZ0
KCZzdHlsZSksIChib3JkZXJTaWRlID09IEJTUmlnaHQpID8gTGF5b3V0VW5pdDo6ZnJvbVBpeGVs
KDApIDogb3V0ZXJCb3JkZXJUb3AoJnN0eWxlKSkpOworICAgIHJvd0dyb3VwUmVjdC5tb3ZlQnko
LUxheW91dFBvaW50KG91dGVyQm9yZGVyTGVmdCgmc3R5bGUpLCAoYm9yZGVyU2lkZSA9PSBCU1Jp
Z2h0KSA/IDBfbHUgOiBvdXRlckJvcmRlclRvcCgmc3R5bGUpKSk7CiAKICAgICBzd2l0Y2ggKGJv
cmRlclNpZGUpIHsKICAgICBjYXNlIEJTVG9wOgpAQCAtMTU2NSw3ICsxNTY1LDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OnNldExvZ2ljYWxQb3NpdGlvbkZvckNlbGwoUmVuZGVyVGFibGVD
ZWxsKiBjZWxsLCB1bnNpZ24KIHsKICAgICBMYXlvdXRQb2ludCBvbGRDZWxsTG9jYXRpb24gPSBj
ZWxsLT5sb2NhdGlvbigpOwogCi0gICAgTGF5b3V0UG9pbnQgY2VsbExvY2F0aW9uKDAsIG1fcm93
UG9zW2NlbGwtPnJvd0luZGV4KCldKTsKKyAgICBMYXlvdXRQb2ludCBjZWxsTG9jYXRpb24oMF9s
dSwgbV9yb3dQb3NbY2VsbC0+cm93SW5kZXgoKV0pOwogICAgIExheW91dFVuaXQgaG9yaXpvbnRh
bEJvcmRlclNwYWNpbmcgPSB0YWJsZSgpLT5oQm9yZGVyU3BhY2luZygpOwogCiAgICAgLy8gRklY
TUU6IFRoZSB0YWJsZSdzIGRpcmVjdGlvbiBzaG91bGQgZGV0ZXJtaW5lIG91ciByb3cncyBkaXJl
Y3Rpb24sIG5vdCB0aGUgc2VjdGlvbidzIChzZWUgYnVnIDk2NjkxKS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCmluZGV4IDI1NzM5MDM5NmY1MGEzMjI2NmY4MmEwNDhl
NDg2NzJjOTM4YTE1NWQuLmQ2NWE1OGRhYTk2OTQ4ZjJiOGZjMDQ1ZDUyOWUzODc2NmE4MmM5ODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtNTk4LDcgKzU5
OCw3IEBAIExheW91dFBvaW50IFJlbmRlclRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0
ZUJ1dHRvbihjb25zdCBSZW5kZXJCb3gmIG11dGVCCiAgICAgRmxvYXRQb2ludCBhYnNQb2ludCA9
IG11dGVCdXR0b25Cb3gubG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQobXV0ZUJ1dHRvbkJveC5v
ZmZzZXRMZWZ0KCksIHkpLCBJc0ZpeGVkIHwgVXNlVHJhbnNmb3Jtcyk7CiAgICAgaWYgKGFic1Bv
aW50LnkoKSA8IDApCiAgICAgICAgIHkgPSBtdXRlQnV0dG9uQm94LmhlaWdodCgpOwotICAgIHJl
dHVybiBMYXlvdXRQb2ludCgwLCB5KTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoMF9sdSwgeSk7
CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCmluZGV4IDFlODY2NGJlMGQ1NDQwMGI1MmFkZTQ3MzJmNWQ2N2Y5OWNmNWQ2MjkuLjhm
ZDMwMWYzMWMzYzgzODE0OGIzMDlhNTVjZWM0YTY3NmExNTE4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTIzMCw3ICsyMzAsNyBAQCB2
b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBSZW5kZXJPYmplY3QmIG8sCiAKICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGluIG9yZGVy
IHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgbGF5b3V0IHRlc3QgcmVzdWx0
cy4KICAgICBpZiAoYWRqdXN0Rm9yVGFibGVDZWxscykKLSAgICAgICAgci5tb3ZlKDAsIC1kb3du
Y2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpvLmNvbnRhaW5pbmdCbG9jaygpKS5pbnRyaW5zaWNQYWRk
aW5nQmVmb3JlKCkpOworICAgICAgICByLm1vdmUoMF9sdSwgLWRvd25jYXN0PFJlbmRlclRhYmxl
Q2VsbD4oKm8uY29udGFpbmluZ0Jsb2NrKCkpLmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSk7CiAK
ICAgICAvLyBGSVhNRTogQ29udmVydCBsYXlvdXQgdGVzdCByZXN1bHRzIHRvIHJlcG9ydCBzdWIt
cGl4ZWwgdmFsdWVzLCBpbiB0aGUgbWVhbnRpbWUgdXNpbmcgZW5jbG9zaW5nSW50UmVjdAogICAg
IC8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIG9sZCByZXN1bHRzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IDkzNTdjYmNlOWY0ZTliOTFmZjE3YTEwNWM0Yzg0OWVh
MTdkZjY3ZTIuLmRmNDc5ZmNmOWY0YWU5NDA4YWM2ZmIzZjJkZjIxMTg5MWIxOGUzMDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTE3Myw3ICsxNzMsNyBAQCBi
b29sIFJlbmRlclZpZXc6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYgbAogCiBSZW5kZXJCb3g6OkxvZ2ljYWxFeHRlbnRDb21wdXRl
ZFZhbHVlcyBSZW5kZXJWaWV3Ojpjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQsIExheW91dFVuaXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgIXNob3VsZFVzZVBy
aW50aW5nTGF5b3V0KCkgPyBMYXlvdXRVbml0KHZpZXdMb2dpY2FsSGVpZ2h0KCkpIDogbG9naWNh
bEhlaWdodCwgTGF5b3V0VW5pdCgpLCBDb21wdXRlZE1hcmdpblZhbHVlcygpIH07CisgICAgcmV0
dXJuIHsgIXNob3VsZFVzZVByaW50aW5nTGF5b3V0KCkgPyBMYXlvdXRVbml0KHZpZXdMb2dpY2Fs
SGVpZ2h0KCkpIDogbG9naWNhbEhlaWdodCwgMF9sdSwgQ29tcHV0ZWRNYXJnaW5WYWx1ZXMoKSB9
OwogfQogCiB2b2lkIFJlbmRlclZpZXc6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCkBAIC0yMDksNyAr
MjA5LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogCiAgICAgaWYgKHNob3VsZFVzZVBy
aW50aW5nTGF5b3V0KCkpIHsKICAgICAgICAgaWYgKCFtX3BhZ2VMb2dpY2FsU2l6ZSkKLSAgICAg
ICAgICAgIG1fcGFnZUxvZ2ljYWxTaXplID0gTGF5b3V0U2l6ZShsb2dpY2FsV2lkdGgoKSwgMCk7
CisgICAgICAgICAgICBtX3BhZ2VMb2dpY2FsU2l6ZSA9IExheW91dFNpemUobG9naWNhbFdpZHRo
KCksIDBfbHUpOwogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fcGFnZUxv
Z2ljYWxTaXplLT53aWR0aCgpOwogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5oCmluZGV4IDM3OTAyMWUwMjg2MTVmOWI0MDM1MzRiMTVlMGI2MWQ1
NTBlZDcyMWUuLmE2Nzk1YTQwOTNiNjc0OWEwOTM1YTk0OTkxNDgyMjU5MjExMmE5NjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaApAQCAtMjA3LDcgKzIwNyw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBpbmNsdWRlSW5pdGlhbExldHRlckZvckJveChJbmxpbmVCb3gm
KSBjb25zdDsKICAgICBib29sIGluY2x1ZGVNYXJnaW5Gb3JCb3goSW5saW5lQm94JikgY29uc3Q7
CiAKLSAgICBMYXlvdXRVbml0IGxpbmVTbmFwQWRqdXN0bWVudChMYXlvdXRVbml0IGRlbHRhID0g
MCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsaW5lU25hcEFkanVzdG1lbnQoTGF5b3V0VW5pdCBk
ZWx0YSA9IDBfbHUpIGNvbnN0OwogCiAgICAgTGF5b3V0VW5pdCBiZWZvcmVBbm5vdGF0aW9uc0Fk
anVzdG1lbnQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXQuY3BwCmluZGV4IGYxMGZjNDYxMjE3ZWVjMTg4OWZhOTQzMjdhM2JiZDlmMGRhMWQw
YTAuLjExMmE3ZmE4MTliYjFlZWZhODVkMGUwOTk1M2NmNmU1MmJmNWRmNGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKQEAgLTYwNyw3ICs2MDcs
NyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGZsb3csIExpbmVTdGF0ZSYgbGluZSwgYwogICAgIGJvb2wgc2hvdWxkQXBwbHlUZXh0SW5k
ZW50ID0gIWZsb3cuaXNBbm9ueW1vdXMoKSB8fCBmbG93LnBhcmVudCgpLT5maXJzdENoaWxkKCkg
PT0gJmZsb3c7CiAgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBmbG93LmxvZ2ljYWxIZWlnaHQoKTsK
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBmbG93Lm1pbkxpbmVIZWlnaHRGb3JSZXBs
YWNlZFJlbmRlcmVyKGZhbHNlLCAwKTsKLSAgICBsaW5lLnNldExvZ2ljYWxMZWZ0T2Zmc2V0KGZs
b3cubG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgRG9Ob3RJbmRlbnRUZXh0LCBsb2dp
Y2FsSGVpZ2h0KSArIChzaG91bGRBcHBseVRleHRJbmRlbnQgJiYgaXNGaXJzdExpbmUgPyBmbG93
LnRleHRJbmRlbnRPZmZzZXQoKSA6IExheW91dFVuaXQoMCkpKTsKKyAgICBsaW5lLnNldExvZ2lj
YWxMZWZ0T2Zmc2V0KGZsb3cubG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgRG9Ob3RJ
bmRlbnRUZXh0LCBsb2dpY2FsSGVpZ2h0KSArIChzaG91bGRBcHBseVRleHRJbmRlbnQgJiYgaXNG
aXJzdExpbmUgPyBmbG93LnRleHRJbmRlbnRPZmZzZXQoKSA6IDBfbHUpKTsKICAgICBmbG9hdCBs
b2dpY2FsUmlnaHRPZmZzZXQgPSBmbG93LmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoaGVpZ2h0
LCBEb05vdEluZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpOwogICAgIGxpbmUuc2V0QXZhaWxhYmxl
V2lkdGgoc3RkOjptYXg8ZmxvYXQ+KDAsIGxvZ2ljYWxSaWdodE9mZnNldCAtIGxpbmUubG9naWNh
bExlZnRPZmZzZXQoKSkpOwogICAgIGlmIChzdHlsZS50ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9k
ZTo6SnVzdGlmeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dFBhZ2luYXRpb24uY3BwCmluZGV4IDgyM2UwYzMyZDdjNWM1Y2QzZjU0MzlkMDFj
NzcwOGYzNmM2YWMwMjMuLjk5N2RkOTM0MDMzYjcyMjQ3NzkxMGE4YjRmNTVjMDQyODg2YjU0NDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFn
aW5hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRQYWdpbmF0aW9uLmNwcApAQCAtODgsNyArODgsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZUxpbmVCcmVha0luZGV4KHVuc2lnbmVkIGJyZWFrQ2FuZGlkYXRlLCB1bnNpZ25lZCBsaW5lQ291
bgogc3RhdGljIExheW91dFVuaXQgY29tcHV0ZU9mZnNldEFmdGVyTGluZUJyZWFrKExheW91dFVu
aXQgbGluZUJyZWFrUG9zaXRpb24sIGJvb2wgaXNGaXJzdExpbmUsIGJvb2wgYXRUaGVUb3BPZkNv
bHVtbk9yUGFnZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQogewogICAgIC8vIE5vIG9m
ZnNldCBmb3IgdG9wIG9mIHRoZSBwYWdlIGxpbmVzIHVubGVzcyB3aWRvd3MgcHVzaGVkIHRoZSBs
aW5lIGJyZWFrLgotICAgIExheW91dFVuaXQgb2Zmc2V0ID0gaXNGaXJzdExpbmUgPyBmbG93LmJv
cmRlckFuZFBhZGRpbmdCZWZvcmUoKSA6IExheW91dFVuaXQoKTsKKyAgICBMYXlvdXRVbml0IG9m
ZnNldCA9IGlzRmlyc3RMaW5lID8gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiAwX2x1
OwogICAgIGlmIChhdFRoZVRvcE9mQ29sdW1uT3JQYWdlKQogICAgICAgICByZXR1cm4gb2Zmc2V0
OwogICAgIHJldHVybiBvZmZzZXQgKyBmbG93LnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9y
T2Zmc2V0KGxpbmVCcmVha1Bvc2l0aW9uLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdlQm91
bmRhcnkpOwpAQCAtMTA0LDggKzEwNCw4IEBAIHN0YXRpYyB2b2lkIHNldFBhZ2VCcmVha0Zvckxp
bmUodW5zaWduZWQgbGluZUJyZWFrSW5kZXgsIFBhZ2luYXRlZExpbmVzJiBsaW5lcywKICAgICBh
dXRvIG9ycGhhbkRvZXNOb3RGaXQgPSAhc3R5bGUuaGFzQXV0b09ycGhhbnMoKSAmJiBzdHlsZS5v
cnBoYW5zKCkgPiAoc2hvcnQpbGluZUJyZWFrSW5kZXg7CiAgICAgaWYgKGZpcnN0TGluZURvZXNO
b3RGaXQgfHwgb3JwaGFuRG9lc05vdEZpdCkgewogICAgICAgICBhdXRvIGZpcnN0TGluZSA9IGxp
bmVzLmZpcnN0KCk7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5lT3ZlcmZsb3dSZWN0ID0gY29tcHV0
ZU92ZXJmbG93KGZsb3csIExheW91dFJlY3QoMCwgZmlyc3RMaW5lLnRvcCwgMCwgZmlyc3RMaW5l
LmhlaWdodCkpOwotICAgICAgICBhdXRvIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcgPSBzdGQ6Om1h
eDxMYXlvdXRVbml0PigtZmlyc3RMaW5lT3ZlcmZsb3dSZWN0LnkoKSwgMCk7CisgICAgICAgIGF1
dG8gZmlyc3RMaW5lT3ZlcmZsb3dSZWN0ID0gY29tcHV0ZU92ZXJmbG93KGZsb3csIExheW91dFJl
Y3QoMF9sdSwgZmlyc3RMaW5lLnRvcCwgMF9sdSwgZmlyc3RMaW5lLmhlaWdodCkpOworICAgICAg
ICBhdXRvIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcgPSBzdGQ6Om1heDxMYXlvdXRVbml0PigtZmly
c3RMaW5lT3ZlcmZsb3dSZWN0LnkoKSwgMF9sdSk7CiAgICAgICAgIGZsb3cuc2V0UGFnaW5hdGlv
blN0cnV0KGxpbmUudG9wICsgcmVtYWluaW5nTG9naWNhbEhlaWdodCArIGZpcnN0TGluZVVwcGVy
T3ZlcmhhbmcpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGFibGVMYXlvdXQuaAppbmRleCA5MzllNWRlZTJlOTk3MTk1MzFiOWIzMjQ2YzU4MzMzODQ0Y2U0
OWRiLi41YjZjZDAxZDE4YmE5MWQ5NDA2ODlmNmYxZmY3ZDZiZDgxMGNhMzg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+VGFibGVMYXlvdXQoKSA9IGRlZmF1bHQ7CiAKICAgICB2aXJ0dWFsIHZvaWQg
Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluV2lkdGgsIExheW91
dFVuaXQmIG1heFdpZHRoKSA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHNjYWxlZFdpZHRo
RnJvbVBlcmNlbnRDb2x1bW5zKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5pdCgwKTsgfQorICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBzY2FsZWRXaWR0aEZyb21QZXJjZW50Q29sdW1ucygpIGNvbnN0
IHsgcmV0dXJuIDBfbHU7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhRdWlya3MoTGF5b3V0VW5pdCYgbWluV2lkdGgsIExheW91dFVuaXQmIG1heFdpZHRoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaAppbmRleCA2MmYzOTc3MTY0
NzYwMjNmYWYwYTBhZThhN2ZkMTkyYTM1ZTg5ZmY4Li4xYmEwMWRkNDEyMTBhYjM0OGY2ODY3Nzhh
NmFkN2Q2N2ZhNDQxNmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9CcmVha2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9C
cmVha2luZ0NvbnRleHQuaApAQCAtODU1LDcgKzg1NSw3IEBAIGlubGluZSBib29sIEJyZWFraW5n
Q29udGV4dDo6aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBi
b29sCiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNlZSBpZiBhIG1lYXN1cmVtZW50IHRoYXQg
ZXhjbHVkZXMgdGhlIHN0b3Agd291bGQgZml0LiBJZiBzbywgdGhlbiB3ZSBzaG91bGQgaGFuZwog
ICAgICAgICAgICAgLy8gdGhlIHN0b3AvY29tbWEgYXQgdGhlIGVuZC4gRmlyc3QgbWVhc3VyZSBp
bmNsdWRpbmcgdGhlIGNvbW1hLgogICAgICAgICAgICAgbV9oYW5nc0F0RW5kID0gZmFsc2U7Ci0g
ICAgICAgICAgICBmbG9hdCBpbmxpbmVTdGFydFdpZHRoID0gIW1fYXBwbGllZFN0YXJ0V2lkdGgg
PyBpbmxpbmVMb2dpY2FsV2lkdGgobV9jdXJyZW50LnJlbmRlcmVyKCksIHRydWUsIGZhbHNlKSA6
IExheW91dFVuaXQoKTsKKyAgICAgICAgICAgIGZsb2F0IGlubGluZVN0YXJ0V2lkdGggPSAhbV9h
cHBsaWVkU3RhcnRXaWR0aCA/IGlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQucmVuZGVyZXIo
KSwgdHJ1ZSwgZmFsc2UpIDogMF9sdTsKICAgICAgICAgICAgIGZsb2F0IHdpZHRoSW5jbHVkaW5n
Q29tbWEgPSBjb21wdXRlQWRkaXRpb25hbEJldHdlZW5Xb3Jkc1dpZHRoKHJlbmRlclRleHQsIHRl
eHRMYXlvdXQsIGMsIHdvcmRUcmFpbGluZ1NwYWNlLCBmYWxsYmFja0ZvbnRzLCB3b3JkTWVhc3Vy
ZW1lbnRzLCBmb250LCBpc0ZpeGVkUGl0Y2gsIGxhc3RTcGFjZSwgbGFzdFNwYWNlV29yZFNwYWNp
bmcsIHdvcmRTcGFjaW5nRm9yV29yZE1lYXN1cmVtZW50LCBtX2N1cnJlbnQub2Zmc2V0KCkgKyAx
KSArIGlubGluZVN0YXJ0V2lkdGg7CiAgICAgICAgICAgICBtX3dpZHRoLmFkZFVuY29tbWl0dGVk
V2lkdGgod2lkdGhJbmNsdWRpbmdDb21tYSk7CiAgICAgICAgICAgICBpZiAoIW1fd2lkdGguZml0
c09uTGluZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9M
aW5lTGF5b3V0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlv
dXRTdGF0ZS5oCmluZGV4IDdiMWQ2ZGU3YTc0YWRkZjE3ZGRmM2M0YTg4NDcyNTM3YTZlOGI3Y2Eu
Ljc5MmY1NGFlMWE0YmU1MWM2NGY3NDUzNTFkNzBjNDk0NTlmNTgxYjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRTdGF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRTdGF0ZS5oCkBAIC0xNDQsNyArMTQ0
LDcgQEAgcHVibGljOgogICAgICAgICBtX3JlcGFpbnRMb2dpY2FsVG9wID0gbV9yZXBhaW50TG9n
aWNhbEJvdHRvbSA9IGxvZ2ljYWxIZWlnaHQ7CiAgICAgfQogCi0gICAgdm9pZCB1cGRhdGVSZXBh
aW50UmFuZ2VGcm9tQm94KFJvb3RJbmxpbmVCb3gqIGJveCwgTGF5b3V0VW5pdCBwYWdpbmF0aW9u
RGVsdGEgPSAwKQorICAgIHZvaWQgdXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChSb290SW5saW5l
Qm94KiBib3gsIExheW91dFVuaXQgcGFnaW5hdGlvbkRlbHRhID0gMF9sdSkKICAgICB7CiAgICAg
ICAgIG1fdXNlc1JlcGFpbnRCb3VuZHMgPSB0cnVlOwogICAgICAgICBtX3JlcGFpbnRMb2dpY2Fs
VG9wID0gc3RkOjptaW4obV9yZXBhaW50TG9naWNhbFRvcCwgYm94LT5sb2dpY2FsVG9wVmlzdWFs
T3ZlcmZsb3coKSArIHN0ZDo6bWluPExheW91dFVuaXQ+KHBhZ2luYXRpb25EZWx0YSwgMCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZVdpZHRoLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAppbmRleCAxYTVjYTMwZGZj
N2JhZjYyNzhkYjAxZTY2NmY5MjJiOTg4MGJiNDg0Li5kYmZkYjcxNjlkMzI0ZjM2NzMwMDA0NmQ4
MzFlMzdjNDgzNDdkMzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9MaW5lV2lkdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lk
dGguaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNDb21taXR0ZWQoKSBj
b25zdCB7IHJldHVybiBtX2hhc0NvbW1pdHRlZDsgfQogICAgIGJvb2wgaGFzQ29tbWl0dGVkUmVw
bGFjZWQoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbW1pdHRlZFJlcGxhY2VkOyB9CiAKLSAgICB2
b2lkIHVwZGF0ZUF2YWlsYWJsZVdpZHRoKExheW91dFVuaXQgbWluaW11bUhlaWdodCA9IDApOwor
ICAgIHZvaWQgdXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCBtaW5pbXVtSGVpZ2h0ID0g
MF9sdSk7CiAgICAgdm9pZCBzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQo
Y29uc3QgRmxvYXRpbmdPYmplY3QmKTsKICAgICB2b2lkIGFkZFVuY29tbWl0dGVkV2lkdGgoZmxv
YXQgZGVsdGEpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9NYXRoT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9N
YXRoT3BlcmF0b3IuY3BwCmluZGV4IGQ2Mjg4NDk0MmM0ODUxYTNhNTA3ZmU2ZDQwZWVhOGJhM2Fi
ODQ5NjIuLmEyNGEyNjYzNDlmYmI3ZDNlZjFlY2U5NDQzNzY1ZDVmYzBlY2I5NjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKQEAgLTcy
MSw3ICs3MjEsNyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnQoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dAogICAgICAgICBmbG9hdCByYWRp
Y2FsSG9yaXpvbnRhbFNjYWxlID0gc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMSA6
IC0xOwogICAgICAgICBpZiAocmFkaWNhbEhvcml6b250YWxTY2FsZSA9PSAtMSB8fCBtX3JhZGlj
YWxWZXJ0aWNhbFNjYWxlID4gMSkgewogICAgICAgICAgICAgTGF5b3V0UG9pbnQgc2NhbGVPcmln
aW4gPSBwYWludE9mZnNldDsKLSAgICAgICAgICAgIHNjYWxlT3JpZ2luLm1vdmUobV93aWR0aCAv
IDIsIDApOworICAgICAgICAgICAgc2NhbGVPcmlnaW4ubW92ZShtX3dpZHRoIC8gMiwgMF9sdSk7
CiAgICAgICAgICAgICBwYWludEluZm8uYXBwbHlUcmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCku
dHJhbnNsYXRlKHNjYWxlT3JpZ2luKS5zY2FsZShyYWRpY2FsSG9yaXpvbnRhbFNjYWxlLCBtX3Jh
ZGljYWxWZXJ0aWNhbFNjYWxlKS50cmFuc2xhdGUoLXNjYWxlT3JpZ2luKSk7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3Iu
aAppbmRleCA3MzVlYjZhNjM2M2IzMTFiNWFjOTY3NWU5MjU1OTgwYThkM2UxNTUwLi5iYWRlNDhh
ODIxNGRlZDRiM2QwYTAxOGMzNmFiMDQ0YjlmNjYyMzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBH
bHlwaEFzc2VtYmx5RGF0YSYpOwogICAgIHZvaWQgZ2V0TWF0aFZhcmlhbnRzV2l0aEZhbGxiYWNr
KGNvbnN0IFJlbmRlclN0eWxlJiwgYm9vbCBpc1ZlcnRpY2FsLCBWZWN0b3I8R2x5cGg+JiwgVmVj
dG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4mKTsKICAgICB2b2lkIGNhbGN1bGF0
ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2b2lk
IGNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYsIGJvb2wgY2FsY3VsYXRl
TWF4UHJlZmVycmVkV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSA9IDApOworICAgIHZvaWQg
Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiwgYm9vbCBjYWxjdWxhdGVN
YXhQcmVmZXJyZWRXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplID0gMF9sdSk7CiAgICAgYm9v
bCBjYWxjdWxhdGVHbHlwaEFzc2VtYmx5RmFsbGJhY2soY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0
aERhdGE6OkFzc2VtYmx5UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNvbnN0OwogCiAgICAg
TGF5b3V0UmVjdCBwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29u
c3QgR2x5cGhEYXRhJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1t
aW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MQmxvY2suaAppbmRleCA5MzkyNmY2ZDU2YzhiOTJhYjgyNzg1ODhlZWFmYzczY2UzODQ2Nzlh
Li4zYzRlNmRlNDBlNThlZDY2ODdmODRmYzAxZmYzNTlkY2Y0ZTQ3ZTY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCkBAIC03
NSw3ICs3NSw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAKICAgICBMYXlvdXRVbml0IG1hdGhBeGlz
SGVpZ2h0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBtaXJyb3JJZk5lZWRlZChMYXlvdXRVbml0
IGhvcml6b250YWxPZmZzZXQsIExheW91dFVuaXQgYm94V2lkdGggPSAwKSBjb25zdDsKKyAgICBM
YXlvdXRVbml0IG1pcnJvcklmTmVlZGVkKExheW91dFVuaXQgaG9yaXpvbnRhbE9mZnNldCwgTGF5
b3V0VW5pdCBib3hXaWR0aCA9IDBfbHUpIGNvbnN0OwogICAgIExheW91dFVuaXQgbWlycm9ySWZO
ZWVkZWQoTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0LCBjb25zdCBSZW5kZXJCb3gmIGNoaWxk
KSBjb25zdCB7IHJldHVybiBtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0LCBjaGlsZC5s
b2dpY2FsV2lkdGgoKSk7IH0KIAogICAgIHN0YXRpYyBMYXlvdXRVbml0IGFzY2VudEZvckNoaWxk
KGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCkBAIC04Myw3ICs4Myw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgcmV0dXJuIGNoaWxkLmZpcnN0TGluZUJhc2VsaW5lKCkudmFsdWVfb3IoY2hpbGQubG9n
aWNhbEhlaWdodCgpKTsKICAgICB9CiAKLSAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApIG92ZXJyaWRlOwor
ICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBh
Z2VMb2dpY2FsSGVpZ2h0ID0gMF9sdSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBsYXlvdXRJbnZhbGlk
TWFya3VwKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3Bw
CmluZGV4IDBhODdlNDU5ZjdlYWM4OWEyOWU3NzVjZmM1Y2YzNDUwNzU0ZjI5MzEuLjQ5NTg1NzFj
MTI4N2IyNDYzZTQyZGM0OTRjYTFlODgxMzBlMTVjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCkBAIC0x
ODQsMTEgKzE4NCwxMSBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTEZyYWN0aW9uOjpob3Jpem9u
dGFsT2Zmc2V0KFJlbmRlckJveCYgY2hpbGQsIE1hdGhNTEZyYWN0aQogICAgIGNhc2UgTWF0aE1M
RnJhY3Rpb25FbGVtZW50OjpGcmFjdGlvbkFsaWdubWVudENlbnRlcjoKICAgICAgICAgcmV0dXJu
IExheW91dFVuaXQoKGxvZ2ljYWxXaWR0aCgpIC0gY2hpbGQubG9naWNhbFdpZHRoKCkpIC8gMik7
CiAgICAgY2FzZSBNYXRoTUxGcmFjdGlvbkVsZW1lbnQ6OkZyYWN0aW9uQWxpZ25tZW50TGVmdDoK
LSAgICAgICAgcmV0dXJuIExheW91dFVuaXQoMCk7CisgICAgICAgIHJldHVybiAwX2x1OwogICAg
IH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBMYXlvdXRVbml0KDAp
OworICAgIHJldHVybiAwX2x1OwogfQogCiBMYXlvdXRVbml0IFJlbmRlck1hdGhNTEZyYWN0aW9u
Ojphc2NlbnRPdmVySG9yaXpvbnRhbEF4aXMoKSBjb25zdApAQCAtMjU4LDcgKzI1OCw3IEBAIHZv
aWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0CiAgICAgaWYgKGluZm8uY29udGV4dCgpLnBhaW50aW5nRGlz
YWJsZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkZvcmVncm91bmQgfHwgc3R5bGUo
KS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSB8fCAhaXNWYWxpZCgpIHx8ICF0
aGlja25lc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRP
ZmZzZXQgPSByb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpICsgTGF5b3V0
UG9pbnQoMCwgYXNjZW50T3Zlckhvcml6b250YWxBeGlzKCkpKTsKKyAgICBJbnRQb2ludCBhZGp1
c3RlZFBhaW50T2Zmc2V0ID0gcm91bmRlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24o
KSArIExheW91dFBvaW50KDBfbHUsIGFzY2VudE92ZXJIb3Jpem9udGFsQXhpcygpKSk7CiAKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEZyYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEZyYWN0aW9uLmgKaW5kZXggMzE0NWNkMzNlZDA1YjA2YzAxMGJjOTJjODcwMWUyYmUzNGM0NDYy
Ni4uNWQxZDE3YTkyMzJkZTRmNGI4ZmRlMDI1NjMyNWIxMjIwODQ3NzY2MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24u
aApAQCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiUmVuZGVyTWF0aE1MRnJhY3Rpb24iOyB9CiAKICAgICB2
b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgZmluYWw7Ci0gICAgdm9pZCBsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWln
aHQgPSAwKSBmaW5hbDsKKyAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDBfbHUpIGZpbmFsOwogICAgIHN0ZDo6
b3B0aW9uYWw8aW50PiBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBmaW5hbDsKICAgICBSZW5kZXJN
YXRoTUxPcGVyYXRvciogdW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkgY29uc3QgZmluYWw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmNw
cAppbmRleCBlN2M1Y2RmMWVmOTY3YTA0ZDAzN2E5ODM1YjY5YWYyZmRmZmEwNTA4Li4xNzM2ODEx
Y2U3NDBlMzA2NmY0OWYzMzEyYTU1YTljOTUxMzUwZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5jcHAKQEAgLTUwLDcgKzUw
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxNYXRoOjpjZW50ZXJDaGlsZHJlbihMYXlvdXRVbml0IGNv
bnRlbnRXaWR0aCkKICAgICAgICAgY2VudGVyQmxvY2tPZmZzZXQgPSAtY2VudGVyQmxvY2tPZmZz
ZXQ7CiAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgaWYgKCFjaGlsZC0+aXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQt
PmxvY2F0aW9uKCkgKyBMYXlvdXRQb2ludChjZW50ZXJCbG9ja09mZnNldCwgMCkpOworICAgICAg
ICAgICAgY2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT5sb2NhdGlvbigpICsgTGF5b3V0UG9pbnQo
Y2VudGVyQmxvY2tPZmZzZXQsIDBfbHUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmgKaW5kZXggNjA4NGJjZTJm
MDE4MmEyMDQyNmUxNTM3OWU2YTFlZjljMzM0ZDg2Yy4uZmJkNzlmZDRlM2RmMDM3MTRmMDFkZTBj
YmU2YTE2ZWFmMjAwMzUwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxNYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxNYXRoLmgKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKICAgICBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlJlbmRlck1hdGhN
TE1hdGgiOyB9CiAKICAgICB2b2lkIGNlbnRlckNoaWxkcmVuKExheW91dFVuaXQgY29udGVudFdp
ZHRoKTsKLSAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0
VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApIGZpbmFsOworICAgIHZvaWQgbGF5b3V0QmxvY2so
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMF9s
dSkgZmluYWw7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmgKaW5kZXggNzg1NWU1OTkwN2E2NTc1Y2E5ZDE5
NGZmMDIwNjEyZjUwMDE2MGI0ZS4uZDFkZTc1NGRlMjVkZjUwNTA5NTA3YzkzMWIxYTA2OTk1Yzhi
MmU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxNZW5jbG9zZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MTWVuY2xvc2UuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiUmVuZGVy
TWF0aE1MTWVuY2xvc2UiOyB9CiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cygpIGZpbmFsOwotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBM
YXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgZmluYWw7CisgICAgdm9pZCBsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQg
PSAwX2x1KSBmaW5hbDsKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50JikgZmluYWw7CiAKICAgICBMYXlvdXRVbml0IHJ1bGVUaGlja25lc3MoKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3Bl
cmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxP
cGVyYXRvci5jcHAKaW5kZXggNzc3N2JkYjAwMjdjYjM2NjdiYTk4MDMyODNlYjMxOGFkOWU3OWVh
Ny4uMThiZDljY2MyMTU0ODQ1OThiMTM1YTRhMDAwMjM2YzRmY2ZjNjY4NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5jcHAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZwogICAgICAg
ICBzZXRMb2dpY2FsV2lkdGgod2lkdGgpOwogCiAgICAgICAgIC8vIFdlIHRoZW4gbW92ZSB0aGUg
Y2hpbGRyZW4gdG8gdGFrZSBzcGFjaW5nIGludG8gYWNjb3VudC4KLSAgICAgICAgTGF5b3V0UG9p
bnQgaG9yaXpvbnRhbFNoaWZ0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6
TFRSID8gbGVhZGluZ1NwYWNlVmFsdWUgOiAtbGVhZGluZ1NwYWNlVmFsdWUsIDApOworICAgICAg
ICBMYXlvdXRQb2ludCBob3Jpem9udGFsU2hpZnQoc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0
RGlyZWN0aW9uOjpMVFIgPyBsZWFkaW5nU3BhY2VWYWx1ZSA6IC1sZWFkaW5nU3BhY2VWYWx1ZSwg
MF9sdSk7CiAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKQogICAgICAgICAgICAgY2hpbGQtPnNl
dExvY2F0aW9uKGNoaWxkLT5sb2NhdGlvbigpICsgaG9yaXpvbnRhbFNoaWZ0KTsKICAgICB9CkBA
IC0zMDksNyArMzA5LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQoUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQKICAgICAgICAgcmV0dXJu
OwogCiAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQgKyBsb2Nh
dGlvbigpOwotICAgIG9wZXJhdG9yVG9wTGVmdC5tb3ZlKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gbGVhZGluZ1NwYWNlKCkgOiB0cmFpbGluZ1NwYWNlKCksIDApOworICAgIG9w
ZXJhdG9yVG9wTGVmdC5tb3ZlKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbGVh
ZGluZ1NwYWNlKCkgOiB0cmFpbGluZ1NwYWNlKCksIDBfbHUpOwogCiAgICAgbV9tYXRoT3BlcmF0
b3IucGFpbnQoc3R5bGUoKSwgaW5mbywgb3BlcmF0b3JUb3BMZWZ0KTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaApp
bmRleCAyMzgwZGQ1ZWViODg0ZjM0YTU5MzcwNzQ0YTE4YzkzZTAxYzJmOTE0Li40NGI1MmNjODM2
NDQ1NmY4Y2UzNTI3ZmRjYTAzYmE3MjhhYjY4OWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCkBAIC03MSw3ICs3
MSw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgZmluYWw7CiAgICAgdm9p
ZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIGZpbmFsOwotICAgIHZvaWQgbGF5b3V0
QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0
ID0gMCkgZmluYWw7CisgICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwX2x1KSBmaW5hbDsKICAgICB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JikgZmluYWw7CiAKICAgICBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJS
ZW5kZXJNYXRoTUxPcGVyYXRvciAoYW5vbnltb3VzKSIgOiAiUmVuZGVyTWF0aE1MT3BlcmF0b3Ii
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFBhZGRlZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxQYWRkZWQuaAppbmRleCA3MTMzM2UwMTA4M2ZkODVhOGQ1Nzc4Njg4ZDM2OGIyZjAwODI4Mzll
Li4wOTA2Mzc5ZjJkMjZkNDZlY2M0YjMyYjY5M2RjM2QzMTdkZjJjZDEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFBhZGRlZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUGFkZGVkLmgKQEAg
LTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTWF0aE1MUGFkZGVkKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocygpIGZpbmFsOwotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91
dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgZmluYWw7CisgICAg
dm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxv
Z2ljYWxIZWlnaHQgPSAwX2x1KSBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gZmlyc3RM
aW5lQmFzZWxpbmUoKSBjb25zdCBmaW5hbDsKIAogICAgIE1hdGhNTFBhZGRlZEVsZW1lbnQmIGVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxNYXRoTUxQYWRkZWRFbGVtZW50Jj4o
bm9kZUZvck5vbkFub255bW91cygpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKaW5kZXggODQwMzk1Njk1ODAyYWExYjhk
YWUxZWZhMDYwNjZkNDAyOTM4MTE4NC4uNmJjNmVjNTg3ZTEwYTdiOWU4Yzk0YWUyMDgyMGY0ZGQ3
ZGNkYTE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFJvb3QuY3BwCkBAIC0yOTAsMTIgKzI5MCwxMiBAQCB2b2lkIFJlbmRlck1hdGhN
TFJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0KQogICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZVRoaWNrbmVzcyhydWxlVGhpY2tuZXNz
KTsKICAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAg
aW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3Ioc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29s
b3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJvcGVydHlDb2xvcikpOwotICAgIExheW91dFBvaW50IHJ1
bGVPZmZzZXRGcm9tID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpICsgTGF5b3V0UG9pbnQoMCwg
bV9yYWRpY2FsT3BlcmF0b3JUb3AgKyBydWxlVGhpY2tuZXNzIC8gMik7CisgICAgTGF5b3V0UG9p
bnQgcnVsZU9mZnNldEZyb20gPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCkgKyBMYXlvdXRQb2lu
dCgwX2x1LCBtX3JhZGljYWxPcGVyYXRvclRvcCArIHJ1bGVUaGlja25lc3MgLyAyKTsKICAgICBM
YXlvdXRQb2ludCBydWxlT2Zmc2V0VG8gPSBydWxlT2Zmc2V0RnJvbTsKICAgICBob3Jpem9udGFs
T2Zmc2V0ICs9IG1fcmFkaWNhbE9wZXJhdG9yLndpZHRoKCk7Ci0gICAgcnVsZU9mZnNldEZyb20u
bW92ZShtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0KSwgMCk7CisgICAgcnVsZU9mZnNl
dEZyb20ubW92ZShtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0KSwgMF9sdSk7CiAgICAg
aG9yaXpvbnRhbE9mZnNldCArPSBtX2Jhc2VXaWR0aDsKLSAgICBydWxlT2Zmc2V0VG8ubW92ZSht
aXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0KSwgMCk7CisgICAgcnVsZU9mZnNldFRvLm1v
dmUobWlycm9ySWZOZWVkZWQoaG9yaXpvbnRhbE9mZnNldCksIDBfbHUpOwogICAgIGluZm8uY29u
dGV4dCgpLmRyYXdMaW5lKHJ1bGVPZmZzZXRGcm9tLCBydWxlT2Zmc2V0VG8pOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oCmlu
ZGV4IDU0NWZlMjFhYzZiNTE3Mjg2YTFlNzMwN2Q3ZWZlYzMyOWQyYjA4NjIuLjkwY2FlMGEyNWU0
Mjg1NTQwZTg1YmQ3NDQyNTdkMmZiMzA5N2U2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oCkBAIC01Niw3ICs1Niw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZSkgZmluYWw7CiAKICAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKCkgZmluYWw7Ci0gICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0
Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBmaW5hbDsKKyAgICB2
b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9n
aWNhbEhlaWdodCA9IDBfbHUpIGZpbmFsOwogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmKSBmaW5hbDsKIAogICAgIHN0cnVjdCBIb3Jpem9udGFsUGFyYW1ldGVy
cyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFJvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxS
b3cuaAppbmRleCBkMzhiODVmYWYxYjJlNzQ0OGQ0MzA3MDkzOTM2ZjZjMmNkNjFiMjljLi4xMTlk
MmI5MWZmYjgxNzU4MTFmYWJjOGNjMzczMmRkZjBkMGE2ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmgKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogICAgIE1hdGhNTFJvd0VsZW1lbnQmIGVsZW1lbnQoKSBjb25zdDsKIAogcHJv
dGVjdGVkOgotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlv
dXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7CisgICAgdm9pZCBsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQg
PSAwX2x1KSBvdmVycmlkZTsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gZmlyc3RMaW5lQmFzZWxp
bmUoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgc3RyZXRjaFZlcnRpY2FsT3BlcmF0b3Jz
QW5kTGF5b3V0Q2hpbGRyZW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFNjcmlwdHMuY3BwCmluZGV4IGVjOWZlYmQzMjA2Y2Y5NzU0
MGVhNDMwY2VkMTM2ZDhjYmQyMWJmOWIuLjVmYjczZDI5MjUxZTA0Y2E5ZTUyMjA4YzM2YjJjNDli
NDg0NmQ5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MU2NyaXB0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxTY3JpcHRzLmNwcApAQCAtMTkyLDEyICsxOTIsMTIgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxTY3JpcHRzOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgY2Fz
ZSBTY3JpcHRUeXBlOjpTdWI6CiAgICAgY2FzZSBTY3JpcHRUeXBlOjpVbmRlcjoKICAgICAgICAg
bV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gcmVmZXJlbmNlLmJhc2UtPm1heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aCgpOwotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBz
dGQ6Om1heChMYXlvdXRVbml0KDApLCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGgoKSAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uICsgc3BhY2UpOworICAg
ICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heCgwX2x1LCByZWZlcmVu
Y2UuZmlyc3RQb3N0U2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIGJhc2VJdGFs
aWNDb3JyZWN0aW9uICsgc3BhY2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNjcmlwdFR5
cGU6OlN1cGVyOgogICAgIGNhc2UgU2NyaXB0VHlwZTo6T3ZlcjoKICAgICAgICAgbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGggKz0gcmVmZXJlbmNlLmJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpOwotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heChM
YXlvdXRVbml0KDApLCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKSArIHNwYWNlKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgg
Kz0gc3RkOjptYXgoMF9sdSwgcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoKCkgKyBzcGFjZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2NyaXB0
VHlwZTo6U3ViU3VwOgogICAgIGNhc2UgU2NyaXB0VHlwZTo6VW5kZXJPdmVyOgpAQCAtMjE1LDcg
KzIxNSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MU2NyaXB0czo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoKQogICAgICAgICB3aGlsZSAoc3ViU2NyaXB0ICYmIHN1YlNjcmlwdCAhPSByZWZl
cmVuY2UucHJlc2NyaXB0RGVsaW1pdGVyKSB7CiAgICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9
IHN1YlNjcmlwdC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgIEFTU0VSVChzdXBTY3Jp
cHQpOwotICAgICAgICAgICAgTGF5b3V0VW5pdCBzdWJTdXBQYWlyV2lkdGggPSBzdGQ6Om1heChz
dGQ6Om1heChMYXlvdXRVbml0KDApLCBzdWJTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCgpIC0gYmFzZUl0YWxpY0NvcnJlY3Rpb24pLCBzdXBTY3JpcHQtPm1heFByZWZlcnJlZExvZ2lj
YWxXaWR0aCgpKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgc3ViU3VwUGFpcldpZHRoID0gc3Rk
OjptYXgoc3RkOjptYXgoMF9sdSwgc3ViU2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KSAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uKSwgc3VwU2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSk7CiAgICAgICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdWJT
dXBQYWlyV2lkdGggKyBzcGFjZTsKICAgICAgICAgICAgIHN1YlNjcmlwdCA9IHN1cFNjcmlwdC0+
bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgfQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MU2NyaXB0czo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlv
dXRVbml0KQogICAgIHN3aXRjaCAoc2NyaXB0VHlwZSgpKSB7CiAgICAgY2FzZSBTY3JpcHRUeXBl
OjpTdWI6CiAgICAgY2FzZSBTY3JpcHRUeXBlOjpVbmRlcjogewotICAgICAgICBzZXRMb2dpY2Fs
V2lkdGgocmVmZXJlbmNlLmJhc2UtPmxvZ2ljYWxXaWR0aCgpICsgc3RkOjptYXgoTGF5b3V0VW5p
dCgwKSwgcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bG9naWNhbFdpZHRoKCkgLSBiYXNlSXRh
bGljQ29ycmVjdGlvbiArIHNwYWNlKSk7CisgICAgICAgIHNldExvZ2ljYWxXaWR0aChyZWZlcmVu
Y2UuYmFzZS0+bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1heCgwX2x1LCByZWZlcmVuY2UuZmlyc3RQ
b3N0U2NyaXB0LT5sb2dpY2FsV2lkdGgoKSAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uICsgc3BhY2Up
KTsKICAgICAgICAgTGF5b3V0UG9pbnQgYmFzZUxvY2F0aW9uKG1pcnJvcklmTmVlZGVkKGhvcml6
b250YWxPZmZzZXQsICpyZWZlcmVuY2UuYmFzZSksIGFzY2VudCAtIGJhc2VBc2NlbnQpOwogICAg
ICAgICByZWZlcmVuY2UuYmFzZS0+c2V0TG9jYXRpb24oYmFzZUxvY2F0aW9uKTsKICAgICAgICAg
aG9yaXpvbnRhbE9mZnNldCArPSByZWZlcmVuY2UuYmFzZS0+bG9naWNhbFdpZHRoKCk7CkBAIC0z
OTEsNyArMzkxLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U2NyaXB0VHlwZTo6U3VwZXI6CiAgICAgY2FzZSBTY3JpcHRUeXBlOjpPdmVyOiB7Ci0gICAgICAg
IHNldExvZ2ljYWxXaWR0aChyZWZlcmVuY2UuYmFzZS0+bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1h
eChMYXlvdXRVbml0KDApLCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5sb2dpY2FsV2lkdGgo
KSArIHNwYWNlKSk7CisgICAgICAgIHNldExvZ2ljYWxXaWR0aChyZWZlcmVuY2UuYmFzZS0+bG9n
aWNhbFdpZHRoKCkgKyBzdGQ6Om1heCgwX2x1LCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5s
b2dpY2FsV2lkdGgoKSArIHNwYWNlKSk7CiAgICAgICAgIExheW91dFBvaW50IGJhc2VMb2NhdGlv
bihtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0LCAqcmVmZXJlbmNlLmJhc2UpLCBhc2Nl
bnQgLSBiYXNlQXNjZW50KTsKICAgICAgICAgcmVmZXJlbmNlLmJhc2UtPnNldExvY2F0aW9uKGJh
c2VMb2NhdGlvbik7CiAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gcmVmZXJlbmNlLmJhc2Ut
PmxvZ2ljYWxXaWR0aCgpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MU2Ny
aXB0czo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQogICAg
ICAgICB3aGlsZSAoc3ViU2NyaXB0ICYmIHN1YlNjcmlwdCAhPSByZWZlcmVuY2UucHJlc2NyaXB0
RGVsaW1pdGVyKSB7CiAgICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4
dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgIEFTU0VSVChzdXBTY3JpcHQpOwotICAgICAgICAg
ICAgTGF5b3V0VW5pdCBzdWJTdXBQYWlyV2lkdGggPSBzdGQ6Om1heChzdGQ6Om1heChMYXlvdXRV
bml0KDApLCBzdWJTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpIC0gYmFzZUl0YWxpY0NvcnJlY3Rpb24p
LCBzdXBTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgc3Vi
U3VwUGFpcldpZHRoID0gc3RkOjptYXgoc3RkOjptYXgoMF9sdSwgc3ViU2NyaXB0LT5sb2dpY2Fs
V2lkdGgoKSAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uKSwgc3VwU2NyaXB0LT5sb2dpY2FsV2lkdGgo
KSk7CiAgICAgICAgICAgICBsb2dpY2FsV2lkdGggKz0gc3ViU3VwUGFpcldpZHRoICsgc3BhY2U7
CiAgICAgICAgICAgICBzdWJTY3JpcHQgPSBzdXBTY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MU2NyaXB0cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxTY3JpcHRzLmgKaW5kZXggN2ViM2YwOGYwYjQ0Njg0ZTgwYmVhODMwZTFmMmNjMmNl
Y2E4ZTRkOS4uNmNjNzdkOGY0YWIwYjg2M2E4MjUyNTAyMmZlNTdiNWY0NjY5OTRkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3Jp
cHRzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJvdGVjdGVkOgogICAgIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyTWF0aE1MU2NyaXB0cyI7IH0K
ICAgICBTY3JpcHRUeXBlIHNjcmlwdFR5cGUoKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0
VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDBfbHUpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAg
IE1hdGhNTFNjcmlwdHNFbGVtZW50JiBlbGVtZW50KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNwYWNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNwYWNlLmgKaW5kZXggMjBjYjE1
NTQxMzQwYTVlY2JkOTlkMDI3Y2Q3ZDZmNDE5ZTRmMjEzNy4uOWRjZWM3YjZiMWM4MWI1MzUzMjEy
OTViN2JiZGE5OTE2NThiODQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MU3BhY2UuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgaXNSZW5kZXJNYXRoTUxTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KICAgICBib29sIGlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJl
bmRlclN0eWxlJikgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIGNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgZmluYWw7Ci0gICAgdm9pZCBsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBm
aW5hbDsKKyAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0
VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDBfbHUpIGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8
aW50PiBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgTGF5b3V0VW5pdCBz
cGFjZVdpZHRoKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uY3BwCmluZGV4IDM4YWY0YzdiZWMwZjA4MWJmYTFlYTU0
Y2FiOTM5YmMxY2Q0YWE2YjcuLjVkNDE2NmI4YmFiNGIwNTU3MzZkOWU3ZDJmNDBlNWNlNDUyZTQx
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MVG9rZW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MVG9rZW4uY3BwCkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxUb2tl
bjo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
CiAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwogICAgIGJ1ZmZlci5hZGQobWF0aFZhcmlhbnRHbHlw
aC5nbHlwaCwgbWF0aFZhcmlhbnRHbHlwaC5mb250LCBtYXRoVmFyaWFudEdseXBoLmZvbnQtPndp
ZHRoRm9yR2x5cGgobWF0aFZhcmlhbnRHbHlwaC5nbHlwaCkpOwogICAgIExheW91dFVuaXQgZ2x5
cGhBc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoLW1hdGhWYXJpYW50R2x5cGguZm9u
dC0+Ym91bmRzRm9yR2x5cGgobWF0aFZhcmlhbnRHbHlwaC5nbHlwaCkueSgpKSk7Ci0gICAgaW5m
by5jb250ZXh0KCkuZHJhd0dseXBocygqbWF0aFZhcmlhbnRHbHlwaC5mb250LCBidWZmZXIsIDAs
IDEsIHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSArIExheW91dFBvaW50KDAsIGdseXBoQXNjZW50
KSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTbW9vdGhpbmco
KSk7CisgICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocygqbWF0aFZhcmlhbnRHbHlwaC5mb250
LCBidWZmZXIsIDAsIDEsIHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSArIExheW91dFBvaW50KDBf
bHUsIGdseXBoQXNjZW50KSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnREZXNjcmlwdGlvbigp
LmZvbnRTbW9vdGhpbmcoKSk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MVG9rZW46OnBhaW50Q2hp
bGRyZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCwgUGFpbnRJbmZvJiBwYWludEluZm9Gb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2Vu
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmgK
aW5kZXggYjc0NjZmMWYwYjQwYWViMDVjM2VlZDY2YzJmMmNiYjg4NmQ2Mjc4MC4uOWNlOGY1ODNm
NTU5NzU4NzY3ZjZiNzA5YjAwMjlmYzkxYWVjMzk3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uaApAQCAtNTAsNyArNTAsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWludEluZm8mIGZvclNlbGYs
IGNvbnN0IExheW91dFBvaW50JiwgUGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJl
Y3QpIG92ZXJyaWRlOwogICAgIHN0ZDo6b3B0aW9uYWw8aW50PiBmaXJzdExpbmVCYXNlbGluZSgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxk
cmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2lj
YWxIZWlnaHQgPSAwX2x1KSBvdmVycmlkZTsKICAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuaAppbmRleCBlODEy
MTE1ZDQwNzI4YThkNzUyNmRhZWQ4ZjA0MjdkOWFlMWJkYzQwLi4xMGQxYzQ0YjlhYWY2YTMyZDYx
N2VkNGViNTBhYzQzMGZmMWVhMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHJpdmF0ZToKICAgICBNYXRoTUxVbmRlck92ZXJFbGVtZW50JiBlbGVtZW50KCkgY29uc3Q7CiAK
ICAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgZmluYWw7Ci0gICAgdm9p
ZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2lj
YWxIZWlnaHQgPSAwKSBmaW5hbDsKKyAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDBfbHUpIGZpbmFsOwogCiAg
ICAgdm9pZCBzdHJldGNoSG9yaXpvbnRhbE9wZXJhdG9yc0FuZExheW91dENoaWxkcmVuKCk7CiAg
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcAppbmRleCAwMWFhODU1M2JlYTFkYmFiMWE2
ZTc5NGZlMjQwOTJkYmRkNjNiZWE0Li5lZDRiOGE5MmFjZmNhNzlmYzZhNDVkOTgyNGU2MTRlYmE3
YThmODRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
T3V0c2lkZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVPdXRzaWRlSW5mby5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCBjb25zdCBTaGFwZSYgU2hhcGVP
dXRzaWRlSW5mbzo6Y29tcHV0ZWRTaGFwZSgpIGNvbnN0CiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IGNvbnRhaW5pbmdCbG9ja1N0eWxlID0gbV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5
bGUoKTsKIAogICAgIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlID0gY29udGFpbmluZ0Jsb2NrU3R5
bGUud3JpdGluZ01vZGUoKTsKLSAgICBmbG9hdCBtYXJnaW4gPSBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KG1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU1hcmdpbigpLCBtX3JlbmRlcmVyLmNvbnRhaW5pbmdC
bG9jaygpID8gbV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+Y29udGVudFdpZHRoKCkgOiBM
YXlvdXRVbml0KCkpOworICAgIGZsb2F0IG1hcmdpbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgobV9y
ZW5kZXJlci5zdHlsZSgpLnNoYXBlTWFyZ2luKCksIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2Nr
KCkgPyBtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5jb250ZW50V2lkdGgoKSA6IDBfbHUp
OwogICAgIGZsb2F0IHNoYXBlSW1hZ2VUaHJlc2hvbGQgPSBzdHlsZS5zaGFwZUltYWdlVGhyZXNo
b2xkKCk7CiAgICAgY29uc3QgU2hhcGVWYWx1ZSYgc2hhcGVWYWx1ZSA9ICpzdHlsZS5zaGFwZU91
dHNpZGUoKTsKIApAQCAtMjI3LDcgKzIyNyw3IEBAIExheW91dFVuaXQgU2hhcGVPdXRzaWRlSW5m
bzo6bG9naWNhbFRvcE9mZnNldCgpIGNvbnN0CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpNYXJnaW5C
b3g6CiAgICAgICAgIHJldHVybiAtbV9yZW5kZXJlci5tYXJnaW5CZWZvcmUoJm1fcmVuZGVyZXIu
Y29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkpOwogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm9yZGVy
Qm94OgotICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgICAgICByZXR1cm4gMF9sdTsK
ICAgICBjYXNlIENTU0JveFR5cGU6OlBhZGRpbmdCb3g6CiAgICAgICAgIHJldHVybiBib3JkZXJC
ZWZvcmVJbldyaXRpbmdNb2RlKG1fcmVuZGVyZXIsIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2Nr
KCktPnN0eWxlKCkud3JpdGluZ01vZGUoKSk7CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpDb250ZW50
Qm94OgpAQCAtMjQzLDcgKzI0Myw3IEBAIExheW91dFVuaXQgU2hhcGVPdXRzaWRlSW5mbzo6bG9n
aWNhbFRvcE9mZnNldCgpIGNvbnN0CiAgICAgfQogICAgIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBMYXlvdXRVbml0KCk7CisgICAgcmV0dXJuIDBfbHU7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2Rl
KGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKQEAg
LTI3NywxMyArMjc3LDEzIEBAIHN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRk
aW5nU3RhcnRXaXRoU3R5bGVGb3JXcml0aW5nTW9kZShjb25zdCBSZW5kCiBMYXlvdXRVbml0IFNo
YXBlT3V0c2lkZUluZm86OmxvZ2ljYWxMZWZ0T2Zmc2V0KCkgY29uc3QKIHsKICAgICBpZiAobV9y
ZW5kZXJlci5pc1JlbmRlckZyYWdtZW50Q29udGFpbmVyKCkpCi0gICAgICAgIHJldHVybiBMYXlv
dXRVbml0KCk7CisgICAgICAgIHJldHVybiAwX2x1OwogICAgIAogICAgIHN3aXRjaCAocmVmZXJl
bmNlQm94KCptX3JlbmRlcmVyLnN0eWxlKCkuc2hhcGVPdXRzaWRlKCkpKSB7CiAgICAgY2FzZSBD
U1NCb3hUeXBlOjpNYXJnaW5Cb3g6CiAgICAgICAgIHJldHVybiAtbV9yZW5kZXJlci5tYXJnaW5T
dGFydCgmbV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKSk7CiAgICAgY2FzZSBD
U1NCb3hUeXBlOjpCb3JkZXJCb3g6Ci0gICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CisgICAg
ICAgIHJldHVybiAwX2x1OwogICAgIGNhc2UgQ1NTQm94VHlwZTo6UGFkZGluZ0JveDoKICAgICAg
ICAgcmV0dXJuIGJvcmRlclN0YXJ0V2l0aFN0eWxlRm9yV3JpdGluZ01vZGUobV9yZW5kZXJlciwg
bV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKSk7CiAgICAgY2FzZSBDU1NCb3hU
eXBlOjpDb250ZW50Qm94OgpAQCAtMjk5LDcgKzI5OSw3IEBAIExheW91dFVuaXQgU2hhcGVPdXRz
aWRlSW5mbzo6bG9naWNhbExlZnRPZmZzZXQoKSBjb25zdAogICAgIH0KIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBMYXlvdXRVbml0KCk7CisgICAgcmV0dXJuIDBfbHU7
CiB9CiAKIGJvb2wgU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJv
eCYgYm94KQpAQCAtMzI2LDE4ICszMjYsMTggQEAgU2hhcGVPdXRzaWRlRGVsdGFzIFNoYXBlT3V0
c2lkZUluZm86OmNvbXB1dGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKGNvbnN0IFIKIAog
ICAgIGlmIChpc1NoYXBlRGlydHkoKSB8fCAhbV9zaGFwZU91dHNpZGVEZWx0YXMuaXNGb3JMaW5l
KGJvcmRlckJveExpbmVUb3AsIGxpbmVIZWlnaHQpKSB7CiAgICAgICAgIExheW91dFVuaXQgcmVm
ZXJlbmNlQm94TGluZVRvcCA9IGJvcmRlckJveExpbmVUb3AgLSBsb2dpY2FsVG9wT2Zmc2V0KCk7
Ci0gICAgICAgIExheW91dFVuaXQgZmxvYXRNYXJnaW5Cb3hXaWR0aCA9IHN0ZDo6bWF4PExheW91
dFVuaXQ+KExheW91dFVuaXQoKSwgY29udGFpbmluZ0Jsb2NrLmxvZ2ljYWxXaWR0aEZvckZsb2F0
KGZsb2F0aW5nT2JqZWN0KSk7CisgICAgICAgIExheW91dFVuaXQgZmxvYXRNYXJnaW5Cb3hXaWR0
aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDBfbHUsIGNvbnRhaW5pbmdCbG9jay5sb2dpY2FsV2lk
dGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCkpOwogCiAgICAgICAgIGlmIChjb21wdXRlZFNoYXBl
KCkubGluZU92ZXJsYXBzU2hhcGVNYXJnaW5Cb3VuZHMocmVmZXJlbmNlQm94TGluZVRvcCwgbGlu
ZUhlaWdodCkpIHsKICAgICAgICAgICAgIExpbmVTZWdtZW50IHNlZ21lbnQgPSBjb21wdXRlZFNo
YXBlKCkuZ2V0RXhjbHVkZWRJbnRlcnZhbCgoYm9yZGVyQm94TGluZVRvcCAtIGxvZ2ljYWxUb3BP
ZmZzZXQoKSksIHN0ZDo6bWluKGxpbmVIZWlnaHQsIHNoYXBlTG9naWNhbEJvdHRvbSgpIC0gYm9y
ZGVyQm94TGluZVRvcCkpOwogICAgICAgICAgICAgaWYgKHNlZ21lbnQuaXNWYWxpZCkgewogICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRNYXJnaW4gPSBjb250YWluaW5nQmxv
Y2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb250YWluaW5nQmxvY2subWFy
Z2luU3RhcnRGb3JDaGlsZChtX3JlbmRlcmVyKSA6IGNvbnRhaW5pbmdCbG9jay5tYXJnaW5FbmRG
b3JDaGlsZChtX3JlbmRlcmVyKTsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJhd0xlZnRN
YXJnaW5Cb3hEZWx0YSA9IHNlZ21lbnQubG9naWNhbExlZnQgKyBsb2dpY2FsTGVmdE9mZnNldCgp
ICsgbG9naWNhbExlZnRNYXJnaW47Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsZWZ0TWFy
Z2luQm94RGVsdGEgPSBjbGFtcFRvPExheW91dFVuaXQ+KHJhd0xlZnRNYXJnaW5Cb3hEZWx0YSwg
TGF5b3V0VW5pdCgpLCBmbG9hdE1hcmdpbkJveFdpZHRoKTsKKyAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IGxlZnRNYXJnaW5Cb3hEZWx0YSA9IGNsYW1wVG88TGF5b3V0VW5pdD4ocmF3TGVmdE1h
cmdpbkJveERlbHRhLCAwX2x1LCBmbG9hdE1hcmdpbkJveFdpZHRoKTsKIAogICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0TWFyZ2luID0gY29udGFpbmluZ0Jsb2NrLnN0eWxl
KCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY29udGFpbmluZ0Jsb2NrLm1hcmdpbkVuZEZv
ckNoaWxkKG1fcmVuZGVyZXIpIDogY29udGFpbmluZ0Jsb2NrLm1hcmdpblN0YXJ0Rm9yQ2hpbGQo
bV9yZW5kZXJlcik7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByYXdSaWdodE1hcmdpbkJv
eERlbHRhID0gc2VnbWVudC5sb2dpY2FsUmlnaHQgKyBsb2dpY2FsTGVmdE9mZnNldCgpIC0gY29u
dGFpbmluZ0Jsb2NrLmxvZ2ljYWxXaWR0aEZvckNoaWxkKG1fcmVuZGVyZXIpIC0gbG9naWNhbFJp
Z2h0TWFyZ2luOwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgcmlnaHRNYXJnaW5Cb3hEZWx0
YSA9IGNsYW1wVG88TGF5b3V0VW5pdD4ocmF3UmlnaHRNYXJnaW5Cb3hEZWx0YSwgLWZsb2F0TWFy
Z2luQm94V2lkdGgsIExheW91dFVuaXQoKSk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBy
aWdodE1hcmdpbkJveERlbHRhID0gY2xhbXBUbzxMYXlvdXRVbml0PihyYXdSaWdodE1hcmdpbkJv
eERlbHRhLCAtZmxvYXRNYXJnaW5Cb3hXaWR0aCwgMF9sdSk7CiAKICAgICAgICAgICAgICAgICBt
X3NoYXBlT3V0c2lkZURlbHRhcyA9IFNoYXBlT3V0c2lkZURlbHRhcyhsZWZ0TWFyZ2luQm94RGVs
dGEsIHJpZ2h0TWFyZ2luQm94RGVsdGEsIHRydWUsIGJvcmRlckJveExpbmVUb3AsIGxpbmVIZWln
aHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBtX3NoYXBlT3V0c2lkZURlbHRhczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVl
LmgKaW5kZXggN2JjYjcxNjI1MjgxNjJlMTM5ZTUxMjZmNTUxODY2YTI0OWY1NjdjOS4uZWY3NjA3
ZTQ0OTdjOTdhM2E5MjI0MzljYWE5ZTc5NmRmZjQ5NWUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVlLmgKQEAgLTQ3LDcg
KzQ3LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBMYXlvdXRVbml0IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gc3R5bGUoKSA+IEJvcmRlclN0eWxlOjpIaWRkZW4gPyBtX3dpZHRoIDog
TGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApOyB9CisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIHN0eWxlKCkgPiBCb3JkZXJTdHlsZTo6SGlkZGVuID8gbV93aWR0aCA6IDBfbHU7
IH0KICAgICBCb3JkZXJTdHlsZSBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJv
cmRlclN0eWxlPihtX3N0eWxlKTsgfQogICAgIGJvb2wgZXhpc3RzKCkgY29uc3QgeyByZXR1cm4g
cHJlY2VkZW5jZSgpICE9IEJvcmRlclByZWNlZGVuY2U6Ok9mZjsgfQogICAgIGNvbnN0IENvbG9y
JiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355489</attachid>
            <date>2018-11-22 15:24:10 -0800</date>
            <delta_ts>2018-11-23 12:47:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191915-20181122152409.patch</filename>
            <type>text/plain</type>
            <size>186246</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4NDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjdlNGI3MWQ3NTExYWQ1
MWFhZWFkMTZkN2ZkYjgzYTBkNDViYTdhNy4uZjhjOGVjNmQ1N2ViZWU0ZGIyZWZhNjViNTIwZmI3
NDNiNDNkZDY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDE4LTExLTIyICBSb3Nz
IEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2Ug
dXNlci1kZWZpbmVkIGxpdGVyYWwgZm9yIExheW91dFVuaXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTkxNQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vTGF5b3V0VW5pdC5oOgorICAg
ICAgICBJbnRyb2R1Y2UgYSB1c2VyLWRlZmluZWQgbGl0ZXJhbCBmb3IgTGF5b3V0VW5pdCwgX2x1
LCByZXBsYWNpbmcgdGhlIGV4aXN0aW5nICJmcm9tUGl4ZWwiIGZhY3RvcnkgZnVuY3Rpb24uCisK
KyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eS5jcHA6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFr
ZXIuY3BwOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKiBwYWdlL0Zy
YW1lVmlld0xheW91dENvbnRleHQuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvRmxleGlibGVCb3hBbGdvcml0aG0uY3BwOgorICAgICAgICAqIHJlbmRl
cmluZy9GbG9hdGluZ09iamVjdHMuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9HcmlkTGF5b3V0
RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlv
dXRTdGF0ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2Fj
aGVzLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVy
LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyR3JpZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
dy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvVGFibGVM
YXlvdXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0U3RhdGUuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvbGluZS9MaW5lV2lkdGguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHA6CisgICAgICAgICog
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oOgorICAgICAgICAqIHJlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxNYXRoLmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxNZW5jbG9zZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
T3BlcmF0b3IuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFBhZGRl
ZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFNjcmlwdHMuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MU3BhY2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFRva2VuLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2Vu
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1ZS5oOgorICAgICAgICBVcGRh
dGUgYWxsIGluc3RhbmNlcyBvZiBMYXlvdXRVbml0KCksIExheW91dFVuaXQoMCksIExheW91dFVu
aXQgeyAwIH0sIGV0Yy4gYW5kIGFkZCBhbnkgb3RoZXIKKyAgICAgICAgbGl0ZXJhbCBjb252ZXJz
aW9ucyB0aGF0IHdpbGwgYmUgbmVlZGVkIHdoZW4gbWFraW5nIG5vbi1pbnQgTGF5b3V0VW5pdCBj
b25zdHJ1Y3RvcnMgZXhwbGljaXQuCisgICAgICAgIEZvciBnb29kIG1lYXN1cmUsIGFsc28gbWFy
ayBhbGwgZGVmYXVsdCB2YWx1ZXMgZm9yIExheW91dFVuaXQgcGFyYW1ldGVycy4KKwogMjAxOC0x
MS0yMiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lG
Q10gTWVyZ2UgYWRkTm9uQnJlYWthYmxlU3RhcnQvTm9uQnJlYWthYmxlRW5kIGNhbGxzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
CmluZGV4IDNkYTQyNTMwMGI0OWJjNDhiYTAxNDIzZjZjYTE0YTg1OTNhYmYxNTEuLmU3MGFjNDVm
OTFlMGRmYjE0YzBmZjI4MGQ2MGM1YTFjYzcyOWNlZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKQEAgLTQ1OCwxMCArNDU4
LDEwIEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91
dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAgICAgICAgICAgICAgICAgbWFyZ2luTGVm
dCA9IG1hcmdpblJpZ2h0ID0gbWFyZ2luTGVmdEFuZFJpZ2h0IC8gMjsgIAogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IExheW91dFVuaXQgeyAwIH07CisgICAgICAg
ICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSAwX2x1OwogICAgICAgICAgICAgICAgICAgICBtYXJn
aW5SaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgKm1hcmdpbkxlZnQgKyBi
b3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJS
aWdodCArICpyaWdodCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgbWFyZ2luUmlnaHQgPSBMYXlvdXRVbml0IHsgMCB9OworICAgICAgICAgICAgICAgICAg
ICBtYXJnaW5SaWdodCA9IDBfbHU7CiAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBj
b250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCAr
ICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKm1hcmdpblJpZ2h0ICsgKnJp
Z2h0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC02NTksMTAgKzY1OSwx
MCBAQCBIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRP
ZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZQogICAgICAgICAgICAgbWFyZ2luTGVmdCA9IG1h
cmdpblJpZ2h0ID0gbWFyZ2luTGVmdEFuZFJpZ2h0IC8gMjsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbikgewotICAgICAgICAgICAgICAgIG1h
cmdpbkxlZnQgPSBMYXlvdXRVbml0IHsgMCB9OworICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQg
PSAwX2x1OwogICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKmxlZnQgKyAqbWFyZ2luTGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdp
ZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IExheW91dFVuaXQgeyAwIH07
CisgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQgPSAwX2x1OwogICAgICAgICAgICAgICAgIG1h
cmdpbkxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBw
YWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqbWFyZ2lu
UmlnaHQgKyAqcmlnaHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05MDAsMTQgKzkw
MCwxNCBAQCBXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGlu
ZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgTAogICAgICAgICBpZiAocHJlY29tcHV0ZWRN
YXJnaW5SaWdodCkKICAgICAgICAgICAgIHJldHVybiBwcmVjb21wdXRlZE1hcmdpblJpZ2h0LnZh
bHVlKCk7CiAgICAgICAgIGF1dG8gbWFyZ2luUmlnaHQgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRv
KHN0eWxlLm1hcmdpblJpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICAgICAgcmV0
dXJuIG1hcmdpblJpZ2h0LnZhbHVlX29yKExheW91dFVuaXQgeyAwIH0pOworICAgICAgICByZXR1
cm4gbWFyZ2luUmlnaHQudmFsdWVfb3IoMF9sdSk7CiAgICAgfTsKIAogICAgIGF1dG8gY29tcHV0
ZU1hcmdpbkxlZnQgPSBbJl0oKSB7CiAgICAgICAgIGlmIChwcmVjb21wdXRlZE1hcmdpbkxlZnQp
CiAgICAgICAgICAgICByZXR1cm4gcHJlY29tcHV0ZWRNYXJnaW5MZWZ0LnZhbHVlKCk7CiAgICAg
ICAgIGF1dG8gbWFyZ2luTGVmdCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubWFyZ2lu
TGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgICAgIHJldHVybiBtYXJnaW5MZWZ0
LnZhbHVlX29yKExheW91dFVuaXQgeyAwIH0pOworICAgICAgICByZXR1cm4gbWFyZ2luTGVmdC52
YWx1ZV9vcigwX2x1KTsKICAgICB9OwogCiAgICAgYXV0byByZXBsYWNlZCA9IGxheW91dEJveC5y
ZXBsYWNlZCgpOwpAQCAtMTA1Miw4ICsxMDUyLDggQEAgSG9yaXpvbnRhbEVkZ2VzIEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWROb25Db2xsYXBzZWRIb3Jpem9udGFsTWFyZ2kK
ICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwogICAgIGF1dG8gY29udGFpbmlu
Z0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOwogCi0gICAgYXV0byBtYXJn
aW5MZWZ0ID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5MZWZ0KCksIGNvbnRh
aW5pbmdCbG9ja1dpZHRoKS52YWx1ZV9vcihMYXlvdXRVbml0IHsgMCB9KTsKLSAgICBhdXRvIG1h
cmdpblJpZ2h0ID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5SaWdodCgpLCBj
b250YWluaW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoTGF5b3V0VW5pdCB7IDAgfSk7CisgICAgYXV0
byBtYXJnaW5MZWZ0ID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5MZWZ0KCks
IGNvbnRhaW5pbmdCbG9ja1dpZHRoKS52YWx1ZV9vcigwX2x1KTsKKyAgICBhdXRvIG1hcmdpblJp
Z2h0ID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5SaWdodCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCkudmFsdWVfb3IoMF9sdSk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9y
bWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW01hcmdpbl0gLT4gbm9uIGNvbGxhcHNl
ZCBob3Jpem9udGFsIC0+IG1hcmdpbigiIDw8IG1hcmdpbkxlZnQgPDwgInB4LCAiIDw8IG1hcmdp
blJpZ2h0IDw8ICJweCkgLT4gbGF5b3V0Qm94OiAiIDw8ICZsYXlvdXRCb3gpOwogICAgIHJldHVy
biB7IG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0IH07CkBAIC0xMDY0LDggKzEwNjQsOCBAQCBWZXJ0
aWNhbEVkZ2VzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWROb25Db2xsYXBz
ZWRWZXJ0aWNhbE1hcmdpblZhbAogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7
CiAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRo
KCk7CiAKLSAgICBhdXRvIG1hcmdpblRvcCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUu
bWFyZ2luVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKS52YWx1ZV9vcihMYXlvdXRVbml0IHsg
MCB9KTsKLSAgICBhdXRvIG1hcmdpbkJvdHRvbSA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5
bGUubWFyZ2luQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKS52YWx1ZV9vcihMYXlvdXRV
bml0IHsgMCB9KTsKKyAgICBhdXRvIG1hcmdpblRvcCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8o
c3R5bGUubWFyZ2luVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKS52YWx1ZV9vcigwX2x1KTsK
KyAgICBhdXRvIG1hcmdpbkJvdHRvbSA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubWFy
Z2luQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKS52YWx1ZV9vcigwX2x1KTsKIAogICAg
IExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbTWFy
Z2luXSAtPiBub24gY29sbGFwc2VkIHZlcnRpY2FsIC0+IG1hcmdpbigiIDw8IG1hcmdpblRvcCA8
PCAicHgsICIgPDwgbWFyZ2luQm90dG9tIDw8ICJweCkgLT4gbGF5b3V0Qm94OiAiIDw8ICZsYXlv
dXRCb3gpOwogICAgIHJldHVybiB7IG1hcmdpblRvcCwgbWFyZ2luQm90dG9tIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IGE4MDBiNzM1
ODgwMGVlMzE3NTk2MmUxOWU3NGJlY2ZhMDcyYWZhNWEuLmI5NGU1ZjQ2ZjIwNjk5OWE0MTRlM2U1
Mzk4MGM0NGUwMWM4NGM5MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCkBAIC04OCwxMCArODgsMTAgQEAgc3RhdGljIExheW91dFVuaXQgYWRq
dXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4dEFsaWduTW9kZSBhbGlnbiwgTGF5b3V0VW5pdCBsaW5l
TG8KICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgogICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6V2ViS2l0UmlnaHQ6CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJl
dHVybiBsaW5lTG9naWNhbExlZnQgKyBzdGQ6Om1heChyZW1haW5pbmdXaWR0aCwgTGF5b3V0VW5p
dCgpKTsKKyAgICAgICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdCArIHN0ZDo6bWF4KHJlbWFpbmlu
Z1dpZHRoLCAwX2x1KTsKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKICAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgcmV0dXJuIGxpbmVMb2dpY2Fs
TGVmdCArIHN0ZDo6bWF4KHJlbWFpbmluZ1dpZHRoIC8gMiwgTGF5b3V0VW5pdCgpKTsKKyAgICAg
ICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdCArIHN0ZDo6bWF4KHJlbWFpbmluZ1dpZHRoIC8gMiwg
MF9sdSk7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKaW5k
ZXggOTQ1OGE5MmU5YjJlOTE0ODMwZmJkYWE4MzBmNDU5NzIxMzgyYWIwNi4uNTMzM2RhZTk2MWRh
NzUzOTYzN2Q1NmMzYjdkYTliMDg2NmVjOTM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcApA
QCAtMTcwLDggKzE3MCw4IEBAIExheW91dFVuaXQgSW5saW5lTGluZUJyZWFrZXI6OnRleHRXaWR0
aChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4sCiAgICAgICAgIGF1dG8g
ZW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxJdGVtUG9zaXRpb24+KHN0YXJ0UG9zaXRpb24gKyBsZW5n
dGgsIGlubGluZUl0ZW1MZW5ndGgpOwogICAgICAgICBhdXRvIHRleHRXaWR0aCA9IFRleHRVdGls
Ojp3aWR0aChjdXJyZW50SW5saW5lSXRlbSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNv
bnRlbnRMb2dpY2FsTGVmdCk7CiAKLSAgICAgICAgYXV0byBub25CcmVha2FibGVTdGFydCA9ICFz
dGFydFBvc2l0aW9uID8gY3VycmVudElubGluZUl0ZW0ubm9uQnJlYWthYmxlU3RhcnQoKSA6IExh
eW91dFVuaXQoKTsKLSAgICAgICAgYXV0byBub25CcmVha2FibGVFbmQgPSAgZW5kUG9zaXRpb24g
PT0gaW5saW5lSXRlbUxlbmd0aCA/IGN1cnJlbnRJbmxpbmVJdGVtLm5vbkJyZWFrYWJsZUVuZCgp
IDogTGF5b3V0VW5pdCgpOworICAgICAgICBhdXRvIG5vbkJyZWFrYWJsZVN0YXJ0ID0gIXN0YXJ0
UG9zaXRpb24gPyBjdXJyZW50SW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpIDogMF9sdTsK
KyAgICAgICAgYXV0byBub25CcmVha2FibGVFbmQgPSAgZW5kUG9zaXRpb24gPT0gaW5saW5lSXRl
bUxlbmd0aCA/IGN1cnJlbnRJbmxpbmVJdGVtLm5vbkJyZWFrYWJsZUVuZCgpIDogMF9sdTsKICAg
ICAgICAgYXV0byBjb250ZW50V2lkdGggPSBub25CcmVha2FibGVTdGFydCArIHRleHRXaWR0aCAr
IG5vbkJyZWFrYWJsZUVuZDsKICAgICAgICAgY29udGVudExvZ2ljYWxMZWZ0ICs9IGNvbnRlbnRX
aWR0aDsKICAgICAgICAgd2lkdGggKz0gY29udGVudFdpZHRoOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCmluZGV4IGY0YWQyZDY5OWRkYWMwZmE3MWE5MzEyMzM0ZWQ2MDA2YTRlMTUxNWQuLjE3
M2Q0YWMwMjEyYjBlOWE4YWEyYjlkOTJlMTQwYmEzYjJlYmEyMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKQEAgLTE4OTUsNyArMTg5NSw3IEBAIExheW91dFJlY3QgRnJhbWVWaWV3Ojpy
ZWN0Rm9yVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJs
CiAgICAgLy8gV2UgaW1wb3NlIGFuIGxvd2VyIGxpbWl0IG9uIHRoZSBzaXplIChzbyBhbiB1cHBl
ciBsaW1pdCBvbiB0aGUgc2NhbGUpIG9mCiAgICAgLy8gdGhlIHJlY3QgdXNlZCB0byBwb3NpdGlv
biBmaXhlZCBvYmplY3RzIHNvIHRoYXQgdGhleSBkb24ndCBjcm93ZCBpbnRvIHRoZQogICAgIC8v
IGNlbnRlciBvZiB0aGUgc2NyZWVuIGF0IGxhcmdlciBzY2FsZXMuCi0gICAgY29uc3QgTGF5b3V0
VW5pdCBtYXhDb250ZW50V2lkdGhGb3Jab29tVGhyZXNob2xkID0gTGF5b3V0VW5pdDo6ZnJvbVBp
eGVsKDEwMjQpOworICAgIGNvbnN0IExheW91dFVuaXQgbWF4Q29udGVudFdpZHRoRm9yWm9vbVRo
cmVzaG9sZCA9IDEwMjRfbHU7CiAgICAgZmxvYXQgem9vbWVkT3V0U2NhbGUgPSBmcmFtZVNjYWxl
RmFjdG9yICogdmlzaWJsZUNvbnRlbnRSZWN0LndpZHRoKCkgLyBzdGQ6Om1pbihtYXhDb250ZW50
V2lkdGhGb3Jab29tVGhyZXNob2xkLCB0b3RhbENvbnRlbnRzU2l6ZS53aWR0aCgpKTsKICAgICBm
bG9hdCBjb25zdHJhaW50VGhyZXNob2xkU2NhbGUgPSAxLjUgKiB6b29tZWRPdXRTY2FsZTsKICAg
ICBmbG9hdCBtYXhQb3N0aW9uZWRPYmplY3RzUmVjdFNjYWxlID0gc3RkOjptaW4oZnJhbWVTY2Fs
ZUZhY3RvciwgY29uc3RyYWludFRocmVzaG9sZFNjYWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmgKaW5kZXggMzk0Mjc2YTM0NzY2NjNiYzFjNjdmZjQ1
NWIyNTIzYjAzY2Y5MWVlYy4uOWQwZGRiZGVjZjEyZDlmMTZkZjU3MGYyYzI2NDZmOTY4YjQ1NzQz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmgKQEAg
LTEzOSw3ICsxMzksNyBAQCBwcml2YXRlOgogICAgIC8vIFN1YnRyZWUgcHVzaC9wb3AKICAgICB2
b2lkIHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJFbGVtZW50Jik7CiAgICAgYm9vbCBwdXNoTGF5b3V0
U3RhdGVGb3JQYWdpbmF0aW9uSWZOZWVkZWQoUmVuZGVyQmxvY2tGbG93Jik7Ci0gICAgYm9vbCBw
dXNoTGF5b3V0U3RhdGUoUmVuZGVyQm94JiByZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zm
c2V0LCBMYXlvdXRVbml0IHBhZ2VIZWlnaHQgPSAwLCBib29sIHBhZ2VIZWlnaHRDaGFuZ2VkID0g
ZmFsc2UpOworICAgIGJvb2wgcHVzaExheW91dFN0YXRlKFJlbmRlckJveCYgcmVuZGVyZXIsIGNv
bnN0IExheW91dFNpemUmIG9mZnNldCwgTGF5b3V0VW5pdCBwYWdlSGVpZ2h0ID0gMF9sdSwgYm9v
bCBwYWdlSGVpZ2h0Q2hhbmdlZCA9IGZhbHNlKTsKICAgICB2b2lkIHBvcExheW91dFN0YXRlKCk7
CiAKICAgICAvLyBTdXNwZW5kcyB0aGUgTGF5b3V0U3RhdGUgb3B0aW1pemF0aW9uLiBVc2VkIHVu
ZGVyIHRyYW5zZm9ybXMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCmluZGV4IGM5YTYwZTU1OWNlNmZiNjY5OWQ1OTkxMWU1YWI0NDcxMmFmMDQ0YzkuLmQ2NGUy
NjFmOWFmZDVmZmYzZjhjNGVhYzlmOTU2MDE5NmJmOWI1NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApA
QCAtMjExNSw3ICsyMTE1LDcgQEAgdm9pZCBQYWdlOjphZGRSZWxldmFudFJlcGFpbnRlZE9iamVj
dChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgTGF5b3V0UmVjdCYgb2IKICAgICAvLyBib3Ro
IGhhbHZlcyBoZWxwcyB0byBwcmV2ZW50IGNhc2VzIHdoZXJlIHdlIGhhdmUgYSBmdWxseSBsb2Fk
ZWQgbWVudSBiYXIgb3IgbWFzdGhlYWQgd2l0aAogICAgIC8vIG5vIGNvbnRlbnQgYmVuZWF0aCB0
aGF0LgogICAgIExheW91dFJlY3QgdG9wUmVsZXZhbnRSZWN0ID0gcmVsZXZhbnRSZWN0OwotICAg
IHRvcFJlbGV2YW50UmVjdC5jb250cmFjdChMYXlvdXRTaXplKDAsIHJlbGV2YW50UmVjdC5oZWln
aHQoKSAvIDIpKTsKKyAgICB0b3BSZWxldmFudFJlY3QuY29udHJhY3QoTGF5b3V0U2l6ZSgwX2x1
LCByZWxldmFudFJlY3QuaGVpZ2h0KCkgLyAyKSk7CiAgICAgTGF5b3V0UmVjdCBib3R0b21SZWxl
dmFudFJlY3QgPSB0b3BSZWxldmFudFJlY3Q7CiAgICAgYm90dG9tUmVsZXZhbnRSZWN0LnNldFko
cmVsZXZhbnRSZWN0LmhlaWdodCgpIC8gMik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uaAppbmRleCA2ZjIwMWY2MzU4ZWQxOTlhZjk3MzRjYzk0OGY5NWVlMjg0NTllNTdm
Li4wMzcwOTgzYmJkZjc0NGYyYmRiNDYxZDlhNDhmOTYzYjY1ZTI4MDdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5oCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBkaXN0
YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhbmRpZGF0ZSYgY3Vy
cmVudCwgRm9jdXNDYW4KIE5vZGUqIHNjcm9sbGFibGVFbmNsb3NpbmdCb3hPclBhcmVudEZyYW1l
Rm9yTm9kZUluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBOb2RlKik7CiBMYXlvdXRSZWN0IG5v
ZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKE5vZGUqLCBib29sIGlnbm9yZUJvcmRlciA9IGZh
bHNlKTsKIExheW91dFJlY3QgZnJhbWVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKEZyYW1lKik7
Ci1MYXlvdXRSZWN0IHZpcnR1YWxSZWN0Rm9yRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBjb25z
dCBMYXlvdXRSZWN0JiBzdGFydGluZ1JlY3QsIExheW91dFVuaXQgd2lkdGggPSAwKTsKK0xheW91
dFJlY3QgdmlydHVhbFJlY3RGb3JEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24sIGNvbnN0IExheW91
dFJlY3QmIHN0YXJ0aW5nUmVjdCwgTGF5b3V0VW5pdCB3aWR0aCA9IDBfbHUpOwogTGF5b3V0UmVj
dCB2aXJ0dWFsUmVjdEZvckFyZWFFbGVtZW50QW5kRGlyZWN0aW9uKEhUTUxBcmVhRWxlbWVudCos
IEZvY3VzRGlyZWN0aW9uKTsKIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVPd25lckVsZW1l
bnQoRm9jdXNDYW5kaWRhdGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTGF5b3V0VW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oCmlu
ZGV4IGE4OWE5OGE1YzAwNGZlMTVmNDgzYzU1MTA4Zjk4OGM3NzBlOTNkNDAuLmM1NjlkODVhMWEz
YmY2OTA4YjI4OWZmMmM2MjcxMjFkMjMwMGU3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0xheW91dFVuaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlv
dXRVbml0LmgKQEAgLTg1LDExICs4NSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV92YWx1ZSA9IGNs
YW1wVG9JbnRlZ2VyKHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7CiAgICAgfQogCi0g
ICAgc3RhdGljIExheW91dFVuaXQgZnJvbVBpeGVsKGludCB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBMYXlvdXRVbml0KHZhbHVlKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgTGF5b3V0VW5p
dCBmcm9tRmxvYXRDZWlsKGZsb2F0IHZhbHVlKQogICAgIHsKICAgICAgICAgTGF5b3V0VW5pdCB2
OwpAQCAtODI2LDYgKzgyMSwxNSBAQCBpbmxpbmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25zdCBM
YXlvdXRVbml0IHZhbHVlKQogICAgIHJldHVybiB2YWx1ZS50b0ludCgpID09IHZhbHVlOwogfQog
CitpbmxpbmUgbmFtZXNwYWNlIFN0cmluZ0xpdGVyYWxzIHsKKworaW5saW5lIExheW91dFVuaXQg
b3BlcmF0b3IiIiBfbHUodW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQoreworICAgIHJldHVybiBM
YXlvdXRVbml0KHZhbHVlKTsKK30KKworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNp
Zm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAK
aW5kZXggNTRiNWRhMTRkYzEyYjkwMTE3MGQ5NTBmYjgzNTQ1MmNhMjA4M2I0MC4uOTQ2MjkyMTQ1
NDQ5MWE3YmQ3ZTFjYmI1YTFkZjY3MWQ4MTdkZmVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAtNzE2LDkgKzcxNiw5IEBAIExheW91dFBvaW50IFNj
cm9sbGFibGVBcmVhOjpjb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvck92ZXJoYW5nKGNvbnN0IExh
eW91dFJlY3QmCiAgICAgICAgIC8vIElmIHdlIHN0aWxsIGNsaXAsIHB1c2ggb3VyIHJlY3QgInVw
IiBmcm9tIHRoZSBib3R0b20gcmlnaHQuCiAgICAgICAgIHNjcm9sbFJlY3QuaW50ZXJzZWN0KGRv
Y3VtZW50UmVjdCk7CiAgICAgICAgIGlmIChzY3JvbGxSZWN0LndpZHRoKCkgPCBpZGVhbFNjcm9s
bFJlY3RTaXplLndpZHRoKCkpCi0gICAgICAgICAgICBzY3JvbGxSZWN0Lm1vdmUoLShpZGVhbFNj
cm9sbFJlY3RTaXplLndpZHRoKCkgLSBzY3JvbGxSZWN0LndpZHRoKCkpLCAwKTsKKyAgICAgICAg
ICAgIHNjcm9sbFJlY3QubW92ZSgtKGlkZWFsU2Nyb2xsUmVjdFNpemUud2lkdGgoKSAtIHNjcm9s
bFJlY3Qud2lkdGgoKSksIDBfbHUpOwogICAgICAgICBpZiAoc2Nyb2xsUmVjdC5oZWlnaHQoKSA8
IGlkZWFsU2Nyb2xsUmVjdFNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBzY3JvbGxSZWN0Lm1v
dmUoMCwgLShpZGVhbFNjcm9sbFJlY3RTaXplLmhlaWdodCgpIC0gc2Nyb2xsUmVjdC5oZWlnaHQo
KSkpOworICAgICAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlKDBfbHUsIC0oaWRlYWxTY3JvbGxSZWN0
U2l6ZS5oZWlnaHQoKSAtIHNjcm9sbFJlY3QuaGVpZ2h0KCkpKTsKICAgICB9CiAKICAgICByZXR1
cm4gc2Nyb2xsUmVjdC5sb2NhdGlvbigpIC0gdG9MYXlvdXRTaXplKHNjcm9sbE9yaWdpbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAppbmRleCA4MTA1NGEzYjM1MjMx
Y2JhZGQ2MDdiNTU2NmMxZjVlMzJiNmYzMmZkLi4wOGJiMzIzNTkzMDg5MDg2M2VkZmNjZTgwNzM5
YzhjNjkyNGFhMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBz
aXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAK
QEAgLTExOCw3ICsxMTgsNyBAQCBJbnRSZWN0IEVsbGlwc2lzQm94OjpzZWxlY3Rpb25SZWN0KCkK
ICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpOwog
ICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSByb290KCk7CiAgICAgLy8gRklYTUU6
IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4g
ZmxhZ3MgYmVsb3cuCi0gICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCh4
KCksIHkoKSArIHJvb3RCb3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygp
LCAwLCByb290Qm94LnNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSk7
CisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCh4KCksIHkoKSArIHJv
b3RCb3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpLCAwX2x1LCByb290
Qm94LnNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSk7CiAgICAgZm9u
dC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bihtX3N0ciwgbGluZVN0eWxlLCBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgc2VsZWN0aW9uUmVj
dCk7CiAgICAgLy8gRklYTUU6IHVzZSBkaXJlY3Rpb25hbCBwaXhlbCBzbmFwcGluZyBpbnN0ZWFk
LgogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3QpOwpAQCAtMTM5LDcg
KzEzOSw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgY29uc3QgUm9vdElubGluZUJv
eCYgcm9vdEJveCA9IHJvb3QoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZp
eCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCi0gICAgTGF5b3V0UmVj
dCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCh4KCkgKyBwYWludE9mZnNldC54KCksIHkoKSAr
IHBhaW50T2Zmc2V0LnkoKSArIHJvb3RCb3guc2VsZWN0aW9uVG9wKCksIDAsIHJvb3RCb3guc2Vs
ZWN0aW9uSGVpZ2h0KCkpOworICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJl
Y3QoeCgpICsgcGFpbnRPZmZzZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55KCkgKyByb290Qm94
LnNlbGVjdGlvblRvcCgpLCAwX2x1LCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgpKTsKICAgICBU
ZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKG1fc3RyLCBzdHlsZSwg
QWxsb3dUcmFpbGluZ0V4cGFuc2lvbik7CiAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
VGV4dChydW4sIHNlbGVjdGlvblJlY3QpOwogICAgIGNvbnRleHQuZmlsbFJlY3Qoc25hcFJlY3RU
b0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCBydW4ubHRyKCkpLCBjKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbGV4aWJsZUJveEFsZ29yaXRobS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxleGlibGVCb3hBbGdvcml0aG0uY3BwCmluZGV4
IDFiODQ4ZDYwMjhjOTNlYWUzNWY4YTYyNDY1ZDJmOWVlZWE1NWM3NzAuLjAxMzdmZDRiNGMxMDA3
NzNkZjhkN2I0MTU4ZTdhNmI3OGExOWQxZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9GbGV4aWJsZUJveEFsZ29yaXRobS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0ZsZXhpYmxlQm94QWxnb3JpdGhtLmNwcApAQCAtNTYsOSArNTYsOSBAQCBGbGV4TGF5
b3V0QWxnb3JpdGhtOjpGbGV4TGF5b3V0QWxnb3JpdGhtKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgTGF5b3V0VW5pdCBsaQogYm9vbCBGbGV4TGF5b3V0QWxnb3JpdGhtOjpjb21wdXRlTmV4dEZs
ZXhMaW5lKHNpemVfdCYgbmV4dEluZGV4LCBWZWN0b3I8RmxleEl0ZW0+JiBsaW5lSXRlbXMsIExh
eW91dFVuaXQmIHN1bUZsZXhCYXNlU2l6ZSwgZG91YmxlJiB0b3RhbEZsZXhHcm93LCBkb3VibGUm
IHRvdGFsRmxleFNocmluaywgZG91YmxlJiB0b3RhbFdlaWdodGVkRmxleFNocmluaywgTGF5b3V0
VW5pdCYgc3VtSHlwb3RoZXRpY2FsTWFpblNpemUpCiB7CiAgICAgbGluZUl0ZW1zLmNsZWFyKCk7
Ci0gICAgc3VtRmxleEJhc2VTaXplID0gTGF5b3V0VW5pdCgpOworICAgIHN1bUZsZXhCYXNlU2l6
ZSA9IDBfbHU7CiAgICAgdG90YWxGbGV4R3JvdyA9IHRvdGFsRmxleFNocmluayA9IHRvdGFsV2Vp
Z2h0ZWRGbGV4U2hyaW5rID0gMDsKLSAgICBzdW1IeXBvdGhldGljYWxNYWluU2l6ZSA9IExheW91
dFVuaXQoKTsKKyAgICBzdW1IeXBvdGhldGljYWxNYWluU2l6ZSA9IDBfbHU7CiAKICAgICBib29s
IGxpbmVIYXNJbkZsb3dJdGVtID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0Zsb2F0aW5nT2JqZWN0cy5jcHAKaW5kZXggNDMzOGJkMzliNTMyZDkwMjc1NTU2ODIwZjg5YTEz
MDljNWRjMjYyZC4uNTA0ZTNjYjJmMGM3MTBhZjljNDg2Y2Y1YjkwNjUxMjk2YTQyMmQ3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHAKQEAgLTQ0OCw3
ICs0NDgsNyBAQCBpbmxpbmUgYm9vbCBDb21wdXRlRmxvYXRPZmZzZXRGb3JGbG9hdExheW91dEFk
YXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQ+OgogdGVtcGxhdGUgPEZsb2F0aW5nT2Jq
ZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgogTGF5b3V0VW5pdCBDb21wdXRlRmxvYXRPZmZzZXRG
b3JGbG9hdExheW91dEFkYXB0ZXI8RmxvYXRUeXBlVmFsdWU+OjpoZWlnaHRSZW1haW5pbmcoKSBj
b25zdAogewotICAgIHJldHVybiB0aGlzLT5tX291dGVybW9zdEZsb2F0ID8gdGhpcy0+bV9yZW5k
ZXJlci0+bG9naWNhbEJvdHRvbUZvckZsb2F0KCp0aGlzLT5tX291dGVybW9zdEZsb2F0KSAtIHRo
aXMtPm1fbGluZVRvcCA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgxKTsKKyAgICByZXR1cm4gdGhp
cy0+bV9vdXRlcm1vc3RGbG9hdCA/IHRoaXMtPm1fcmVuZGVyZXItPmxvZ2ljYWxCb3R0b21Gb3JG
bG9hdCgqdGhpcy0+bV9vdXRlcm1vc3RGbG9hdCkgLSB0aGlzLT5tX2xpbmVUb3AgOiAxX2x1Owog
fQogCiB0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAKaW5kZXgg
NTA3NjkwMDQ2Y2ZjYzA2ZjQyMmZlNmY3MTA2ZmVmYjM5ZTY0YzA0NS4uN2UzMTViZTdiNGYzYTBi
NGRhYzliOTY5OTdkNTRiYWMzY2JiN2E2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0dyaWRMYXlvdXRGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9HcmlkTGF5b3V0RnVuY3Rpb25zLmNwcApAQCAtNjksOCArNjksOCBAQCBMYXlvdXRVbml0
IG1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYgZ3JpZCwgR3JpZFRy
YWNrU2l6aW5nRGlyZQogICAgIGlmIChjaGlsZC5uZWVkc0xheW91dCgpKQogICAgICAgICByZXR1
cm4gY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoZ3JpZCwgZGlyZWN0aW9uLCBjaGls
ZCk7CiAgICAgYm9vbCBpc1Jvd0F4aXMgPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChncmlk
LCBjaGlsZCwgZGlyZWN0aW9uKSA9PSBGb3JDb2x1bW5zOwotICAgIExheW91dFVuaXQgbWFyZ2lu
U3RhcnQgPSBtYXJnaW5TdGFydElzQXV0byhjaGlsZCwgZGlyZWN0aW9uKSA/IExheW91dFVuaXQo
KSA6IGlzUm93QXhpcyA/IGNoaWxkLm1hcmdpblN0YXJ0KCkgOiBjaGlsZC5tYXJnaW5CZWZvcmUo
KTsKLSAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCA9IG1hcmdpbkVuZElzQXV0byhjaGlsZCwgZGly
ZWN0aW9uKSA/IExheW91dFVuaXQoKSA6IGlzUm93QXhpcyA/IGNoaWxkLm1hcmdpbkVuZCgpIDog
Y2hpbGQubWFyZ2luQWZ0ZXIoKTsKKyAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0ID0gbWFyZ2lu
U3RhcnRJc0F1dG8oY2hpbGQsIGRpcmVjdGlvbikgPyAwX2x1IDogaXNSb3dBeGlzID8gY2hpbGQu
bWFyZ2luU3RhcnQoKSA6IGNoaWxkLm1hcmdpbkJlZm9yZSgpOworICAgIExheW91dFVuaXQgbWFy
Z2luRW5kID0gbWFyZ2luRW5kSXNBdXRvKGNoaWxkLCBkaXJlY3Rpb24pID8gMF9sdSA6IGlzUm93
QXhpcyA/IGNoaWxkLm1hcmdpbkVuZCgpIDogY2hpbGQubWFyZ2luQWZ0ZXIoKTsKICAgICByZXR1
cm4gbWFyZ2luU3RhcnQgKyBtYXJnaW5FbmQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKaW5kZXggNjQ4MWEzMmRk
OWJkYTVlYjhhNDZjMTM0ODYwOWQyMGY1ODIyZmM5OS4uZjIzN2JlZDhkOTczYjg4ZjIyMDVlNmQx
NzQ3MjhiYmZlOTZkNTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dy
aWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKQEAgLTU1MywxNCArNTUzLDE0IEBAIExheW91
dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjplc3RpbWF0ZWRHcmlkQXJlYUJyZWFkdGhG
b3JDaGlsZChjb25zdCBSZW5kCiAgICAgICAgIGlmIChtYXhUcmFja1NpemUuaXNDb250ZW50U2l6
ZWQoKSB8fCBtYXhUcmFja1NpemUuaXNGbGV4KCkgfHwgaXNSZWxhdGl2ZUdyaWRMZW5ndGhBc0F1
dG8obWF4VHJhY2tTaXplLCBkaXJlY3Rpb24pKQogICAgICAgICAgICAgZ3JpZEFyZWFJc0luZGVm
aW5pdGUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBncmlkQXJlYVNpemUgKz0g
dmFsdWVGb3JMZW5ndGgobWF4VHJhY2tTaXplLmxlbmd0aCgpLCBhdmFpbGFibGVTaXplLnZhbHVl
X29yKExheW91dFVuaXQoKSkpOworICAgICAgICAgICAgZ3JpZEFyZWFTaXplICs9IHZhbHVlRm9y
TGVuZ3RoKG1heFRyYWNrU2l6ZS5sZW5ndGgoKSwgYXZhaWxhYmxlU2l6ZS52YWx1ZV9vcigwX2x1
KSk7CiAgICAgfQogCiAgICAgZ3JpZEFyZWFTaXplICs9IG1fcmVuZGVyR3JpZC0+Z3V0dGVyc1Np
emUobV9ncmlkLCBkaXJlY3Rpb24sIHNwYW4uc3RhcnRMaW5lKCksIHNwYW4uaW50ZWdlclNwYW4o
KSwgYXZhaWxhYmxlU2l6ZSk7CiAKICAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRJ
bmxpbmVEaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdhcmVEaXJlY3Rpb25G
b3JDaGlsZCgqbV9yZW5kZXJHcmlkLCBjaGlsZCwgRm9yQ29sdW1ucyk7CiAgICAgaWYgKGdyaWRB
cmVhSXNJbmRlZmluaXRlKQotICAgICAgICByZXR1cm4gZGlyZWN0aW9uID09IGNoaWxkSW5saW5l
RGlyZWN0aW9uID8gc3RkOjptYXgoY2hpbGQubWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCksIGdy
aWRBcmVhU2l6ZSkgOiBMYXlvdXRVbml0KC0xKTsKKyAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9
PSBjaGlsZElubGluZURpcmVjdGlvbiA/IHN0ZDo6bWF4KGNoaWxkLm1heFByZWZlcnJlZExvZ2lj
YWxXaWR0aCgpLCBncmlkQXJlYVNpemUpIDogLTFfbHU7CiAgICAgcmV0dXJuIGdyaWRBcmVhU2l6
ZTsKIH0KIApAQCAtNjk4LDcgKzY5OCw3IEBAIGRvdWJsZSBHcmlkVHJhY2tTaXppbmdBbGdvcml0
aG06OmZpbmRGclVuaXRTaXplKGNvbnN0IEdyaWRTcGFuJiB0cmFja3NTcGFuLCBMYXlvCiAKIHZv
aWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpjb21wdXRlR3JpZENvbnRhaW5lckludHJpbnNp
Y1NpemVzKCkKIHsKLSAgICBtX21pbkNvbnRlbnRTaXplID0gbV9tYXhDb250ZW50U2l6ZSA9IExh
eW91dFVuaXQoKTsKKyAgICBtX21pbkNvbnRlbnRTaXplID0gbV9tYXhDb250ZW50U2l6ZSA9IDBf
bHU7CiAKICAgICBWZWN0b3I8R3JpZFRyYWNrPiYgYWxsVHJhY2tzID0gdHJhY2tzKG1fZGlyZWN0
aW9uKTsKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogYWxsVHJhY2tzKSB7CkBAIC03NzMsNyArNzcz
LDcgQEAgTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bWluU2l6
ZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGMKICAgICAgICAgICAgIEdyaWRUcmFja1NpemUg
dHJhY2tTaXplID0gbV9hbGdvcml0aG0uZ3JpZFRyYWNrU2l6ZShkaXJlY3Rpb24oKSwgdHJhY2tQ
b3NpdGlvbik7CiAgICAgICAgICAgICBpZiAoIXRyYWNrU2l6ZS5oYXNGaXhlZE1heFRyYWNrQnJl
YWR0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBtaW5TaXplOwotICAgICAgICAgICAgbWF4
QnJlYWR0aCArPSB2YWx1ZUZvckxlbmd0aCh0cmFja1NpemUubWF4VHJhY2tCcmVhZHRoKCkubGVu
Z3RoKCksIGF2YWlsYWJsZVNwYWNlKCkudmFsdWVfb3IoTGF5b3V0VW5pdCgpKSk7CisgICAgICAg
ICAgICBtYXhCcmVhZHRoICs9IHZhbHVlRm9yTGVuZ3RoKHRyYWNrU2l6ZS5tYXhUcmFja0JyZWFk
dGgoKS5sZW5ndGgoKSwgYXZhaWxhYmxlU3BhY2UoKS52YWx1ZV9vcigwX2x1KSk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKG1pblNpemUgPiBtYXhCcmVhZHRoKSB7CiAgICAgICAgICAgICBhdXRv
IG1hcmdpbkFuZEJvcmRlckFuZFBhZGRpbmcgPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjptYXJnaW5M
b2dpY2FsU2l6ZUZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGRpcmVjdGlvbigpLCBjaGlsZCk7CkBA
IC04OTgsNyArODk4LDcgQEAgYm9vbCBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpyZWNvbXB1dGVV
c2VkRmxleEZyYWN0aW9uSWZOZWVkZWQoZG91YmxlJiBmbGV4RnJhY3QKICAgICBpZiAoIWNoZWNr
TWluU2l6ZSAmJiAhY2hlY2tNYXhTaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBM
YXlvdXRVbml0IGZyZWVTcGFjZSA9IGNoZWNrTWF4U2l6ZSA/IG1heFNpemUudmFsdWUoKSA6IExh
eW91dFVuaXQoLTEpOworICAgIExheW91dFVuaXQgZnJlZVNwYWNlID0gY2hlY2tNYXhTaXplID8g
bWF4U2l6ZS52YWx1ZSgpIDogLTFfbHU7CiAgICAgY29uc3QgR3JpZCYgZ3JpZCA9IG1fYWxnb3Jp
dGhtLmdyaWQoKTsKICAgICBmcmVlU3BhY2UgPSBzdGQ6Om1heChmcmVlU3BhY2UsIG1pblNpemUu
dmFsdWUoKSkgLSByZW5kZXJHcmlkLT5ndXR0ZXJzU2l6ZShncmlkLCBGb3JSb3dzLCAwLCBncmlk
Lm51bVRyYWNrcyhGb3JSb3dzKSwgYXZhaWxhYmxlU3BhY2UoKSk7CiAKQEAgLTkyNSwxMSArOTI1
LDExIEBAIExheW91dFVuaXQgSW5kZWZpbml0ZVNpemVTdHJhdGVneTo6ZnJlZVNwYWNlRm9yU3Ry
ZXRjaEF1dG9UcmFja3NTdGVwKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1fYWxnb3JpdGhtLmZy
ZWVTcGFjZShkaXJlY3Rpb24oKSkpOwogICAgIGlmIChkaXJlY3Rpb24oKSA9PSBGb3JDb2x1bW5z
KQotICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgICAgICByZXR1cm4gMF9sdTsKIAog
ICAgIGF1dG8gbWluU2l6ZSA9IHJlbmRlckdyaWQoKS0+Y29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVp
Z2h0KE1pblNpemUsIHJlbmRlckdyaWQoKS0+c3R5bGUoKS5sb2dpY2FsTWluSGVpZ2h0KCksIHN0
ZDo6bnVsbG9wdCk7CiAgICAgaWYgKCFtaW5TaXplKQotICAgICAgICByZXR1cm4gTGF5b3V0VW5p
dCgpOworICAgICAgICByZXR1cm4gMF9sdTsKICAgICByZXR1cm4gbWluU2l6ZS52YWx1ZSgpIC0g
Y29tcHV0ZVRyYWNrQmFzZWRTaXplKCk7CiB9CiAKQEAgLTk5NSw3ICs5OTUsNyBAQCB2b2lkIEdy
aWRUcmFja1NpemluZ0FsZ29yaXRobTo6aW5pdGlhbGl6ZVRyYWNrU2l6ZXMoKQogICAgIFZlY3Rv
cjxHcmlkVHJhY2s+JiBhbGxUcmFja3MgPSB0cmFja3MobV9kaXJlY3Rpb24pOwogICAgIGNvbnN0
IGJvb2wgaGFzRGVmaW5pdGVGcmVlU3BhY2UgPSAhIWF2YWlsYWJsZVNwYWNlKCk7CiAgICAgY29u
c3QgYm9vbCBpbmRlZmluaXRlSGVpZ2h0ID0gbV9kaXJlY3Rpb24gPT0gRm9yUm93cyAmJiAhbV9y
ZW5kZXJHcmlkLT5oYXNEZWZpbml0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICBMYXlvdXRVbml0IG1h
eFNpemUgPSBzdGQ6Om1heChMYXlvdXRVbml0KCksIGF2YWlsYWJsZVNwYWNlKCkudmFsdWVfb3Io
TGF5b3V0VW5pdCgpKSk7CisgICAgTGF5b3V0VW5pdCBtYXhTaXplID0gc3RkOjptYXgoMF9sdSwg
YXZhaWxhYmxlU3BhY2UoKS52YWx1ZV9vcigwX2x1KSk7CiAgICAgLy8gMS4gSW5pdGlhbGl6ZSBw
ZXIgR3JpZCB0cmFjayB2YXJpYWJsZXMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFs
bFRyYWNrcy5zaXplKCk7ICsraSkgewogICAgICAgICBHcmlkVHJhY2smIHRyYWNrID0gYWxsVHJh
Y2tzW2ldOwpAQCAtMTA4MCw3ICsxMDgwLDcgQEAgdm9pZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0
aG06OnN0cmV0Y2hGbGV4aWJsZVRyYWNrcyhzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGYKICAg
ICBjb21wdXRlRmxleFNpemVkVHJhY2tzR3Jvd3RoKGZsZXhGcmFjdGlvbiwgaW5jcmVtZW50cywg
dG90YWxHcm93dGgpOwogCiAgICAgaWYgKG1fc3RyYXRlZ3ktPnJlY29tcHV0ZVVzZWRGbGV4RnJh
Y3Rpb25JZk5lZWRlZChmbGV4RnJhY3Rpb24sIHRvdGFsR3Jvd3RoKSkgewotICAgICAgICB0b3Rh
bEdyb3d0aCA9IExheW91dFVuaXQoKTsKKyAgICAgICAgdG90YWxHcm93dGggPSAwX2x1OwogICAg
ICAgICBjb21wdXRlRmxleFNpemVkVHJhY2tzR3Jvd3RoKGZsZXhGcmFjdGlvbiwgaW5jcmVtZW50
cywgdG90YWxHcm93dGgpOwogICAgIH0KIApAQCAtMTExMCw3ICsxMTEwLDcgQEAgdm9pZCBHcmlk
VHJhY2tTaXppbmdBbGdvcml0aG06OnN0cmV0Y2hBdXRvVHJhY2tzKCkKICAgICAgICAgYXV0byYg
dHJhY2sgPSBhbGxUcmFja3NbdHJhY2tJbmRleF07CiAgICAgICAgIHRyYWNrLnNldEJhc2VTaXpl
KHRyYWNrLmJhc2VTaXplKCkgKyBzaXplVG9JbmNyZWFzZSk7CiAgICAgfQotICAgIHNldEZyZWVT
cGFjZShtX2RpcmVjdGlvbiwgTGF5b3V0VW5pdCgpKTsKKyAgICBzZXRGcmVlU3BhY2UobV9kaXJl
Y3Rpb24sIDBfbHUpOwogfQogCiB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6YWR2YW5j
ZU5leHRTdGF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAK
aW5kZXggZDVkNjJjZDBmNzM3N2E5ZDA1MDZlNmY3YjFmNDVjYjc2NzZkYWY4NS4uODUzYmNjYmQ1
NWU4MDhlZjA0OWU0MGE1YWVkYmQxOTVkMDA3MzY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtNjk4LDggKzY5OCw4IEBAIHZvaWQgSW5saW5lRmxv
d0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24oTGF5b3V0VW5pdCB0b3AsIExheW91dFVu
aXQgbWF4SGVpCiAKICAgICAgICAgICAgICAgICBhdXRvJiBydWJ5UnVuID0gZG93bmNhc3Q8UmVu
ZGVyUnVieVJ1bj4oY2hpbGQtPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgICAgIGlmIChSZW5k
ZXJSdWJ5QmFzZSogcnVieUJhc2UgPSBydWJ5UnVuLnJ1YnlCYXNlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21SdWJ5QmFzZUxlYWRpbmcgPSAoY2hpbGQtPmxvZ2lj
YWxIZWlnaHQoKSAtIHJ1YnlCYXNlLT5sb2dpY2FsQm90dG9tKCkpICsgcnVieUJhc2UtPmxvZ2lj
YWxIZWlnaHQoKSAtIChydWJ5QmFzZS0+bGFzdFJvb3RCb3goKSA/IHJ1YnlCYXNlLT5sYXN0Um9v
dEJveCgpLT5saW5lQm90dG9tKCkgOiBMYXlvdXRVbml0KCkpOwotICAgICAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IHRvcFJ1YnlCYXNlTGVhZGluZyA9IHJ1YnlCYXNlLT5sb2dpY2FsVG9wKCkg
KyAocnVieUJhc2UtPmZpcnN0Um9vdEJveCgpID8gcnVieUJhc2UtPmZpcnN0Um9vdEJveCgpLT5s
aW5lVG9wKCkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IGJvdHRvbVJ1YnlCYXNlTGVhZGluZyA9IChjaGlsZC0+bG9naWNhbEhlaWdodCgpIC0gcnVieUJh
c2UtPmxvZ2ljYWxCb3R0b20oKSkgKyBydWJ5QmFzZS0+bG9naWNhbEhlaWdodCgpIC0gKHJ1YnlC
YXNlLT5sYXN0Um9vdEJveCgpID8gcnVieUJhc2UtPmxhc3RSb290Qm94KCktPmxpbmVCb3R0b20o
KSA6IDBfbHUpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcFJ1YnlCYXNlTGVh
ZGluZyA9IHJ1YnlCYXNlLT5sb2dpY2FsVG9wKCkgKyAocnVieUJhc2UtPmZpcnN0Um9vdEJveCgp
ID8gcnVieUJhc2UtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiAwX2x1KTsKICAgICAgICAg
ICAgICAgICAgICAgbmV3TG9naWNhbFRvcCArPSAhcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBl
ZExpbmVzV3JpdGluZ01vZGUoKSA/IHRvcFJ1YnlCYXNlTGVhZGluZyA6IGJvdHRvbVJ1YnlCYXNl
TGVhZGluZzsKICAgICAgICAgICAgICAgICAgICAgYm94SGVpZ2h0IC09ICh0b3BSdWJ5QmFzZUxl
YWRpbmcgKyBib3R0b21SdWJ5QmFzZUxlYWRpbmcpOwogICAgICAgICAgICAgICAgIH0KQEAgLTg2
Nyw4ICs4NjcsOCBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRCb3JkZXJPdXRzZXRW
aXN1YWxPdmVyZmxvdyhMYXlvdXRSZWN0JiBsb2dpY2FsVmlzdQogICAgIExheW91dFVuaXQgbG9n
aWNhbFRvcFZpc3VhbE92ZXJmbG93ID0gc3RkOjptaW48TGF5b3V0VW5pdD4obG9naWNhbFRvcCgp
IC0gb3V0c2V0TG9naWNhbFRvcCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnkoKSk7CiAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBzdGQ6Om1heDxMYXlvdXRVbml0
Pihsb2dpY2FsQm90dG9tKCkgKyBvdXRzZXRMb2dpY2FsQm90dG9tLCBsb2dpY2FsVmlzdWFsT3Zl
cmZsb3cubWF4WSgpKTsKIAotICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNhbExlZnQgPSBpbmNs
dWRlTG9naWNhbExlZnRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsTGVmdCA6IExheW91dFVu
aXQoKTsKLSAgICBMYXlvdXRVbml0IG91dHNldExvZ2ljYWxSaWdodCA9IGluY2x1ZGVMb2dpY2Fs
UmlnaHRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsUmlnaHQgOiBMYXlvdXRVbml0KCk7Cisg
ICAgTGF5b3V0VW5pdCBvdXRzZXRMb2dpY2FsTGVmdCA9IGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2Uo
KSA/IGJvcmRlck91dHNldExvZ2ljYWxMZWZ0IDogMF9sdTsKKyAgICBMYXlvdXRVbml0IG91dHNl
dExvZ2ljYWxSaWdodCA9IGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKCkgPyBib3JkZXJPdXRzZXRM
b2dpY2FsUmlnaHQgOiAwX2x1OwogCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFZpc3VhbE92
ZXJmbG93ID0gc3RkOjptaW48TGF5b3V0VW5pdD4obG9naWNhbExlZnQoKSAtIG91dHNldExvZ2lj
YWxMZWZ0LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueCgpKTsKICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxSaWdodFZpc3VhbE92ZXJmbG93ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obG9naWNhbFJpZ2h0
KCkgKyBvdXRzZXRMb2dpY2FsUmlnaHQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhYKCkpOwpA
QCAtMTI3Myw4ICsxMjczLDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEZpbGxMYXllcihj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGNvbG8KICAgICAgICAgICAg
IGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2
TGluZUJveCgpKQogICAgICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGN1cnItPmxv
Z2ljYWxXaWR0aCgpOwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gcmVj
dC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogTGF5b3V0VW5p
dCgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSByZWN0LnkoKSAtIChpc0hvcml6b250
YWwoKSA/IExheW91dFVuaXQoKSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOworICAgICAgICBMYXlv
dXRVbml0IHN0cmlwWCA9IHJlY3QueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNl
dE9uTGluZSA6IDBfbHUpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IHJlY3QueSgpIC0g
KGlzSG9yaXpvbnRhbCgpID8gMF9sdSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwogICAgICAgICBM
YXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRo
IDogTGF5b3V0VW5pdCh3aWR0aCgpKTsKICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcEhlaWdodCA9
IGlzSG9yaXpvbnRhbCgpID8gTGF5b3V0VW5pdChoZWlnaHQoKSkgOiB0b3RhbExvZ2ljYWxXaWR0
aDsKIApAQCAtMTQwOSw4ICsxNDA5LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERl
Y29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYKICAgICAg
ICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxPZmZzZXRPbkxpbmU7CiAg
ICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJy
LT5uZXh0TGluZUJveCgpKQogICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gY3Vyci0+
bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWlu
dG9mZnNldC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogTGF5
b3V0VW5pdCgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBhaW50b2Zm
c2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IExheW91dFVuaXQoKSA6IGxvZ2ljYWxPZmZzZXRP
bkxpbmUpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IGFkanVzdGVkUGFpbnRvZmZzZXQu
eCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6IDBfbHUpOworICAg
ICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRvZmZzZXQueSgpIC0gKGlzSG9y
aXpvbnRhbCgpID8gMF9sdSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwogICAgICAgICBMYXlvdXRV
bml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRoIDogZnJh
bWVSZWN0LndpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgc3RyaXBIZWlnaHQgPSBpc0hvcml6
b250YWwoKSA/IGZyYW1lUmVjdC5oZWlnaHQoKSA6IHRvdGFsTG9naWNhbFdpZHRoOwogCkBAIC0x
NDc3LDggKzE0NzcsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50TWFzayhQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgICAgICBMYXlvdXRV
bml0IHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKICAgICAgICAgZm9y
IChJbmxpbmVGbG93Qm94KiBjdXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5l
Qm94KCkpCiAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lk
dGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBhaW50T2Zmc2V0Lngo
KSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBMYXlvdXRVbml0KCkp
OwotICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRPZmZzZXQueSgpIC0g
KGlzSG9yaXpvbnRhbCgpID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbE9mZnNldE9uTGluZSk7Cisg
ICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgLSAoaXNI
b3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogMF9sdSk7CisgICAgICAgIExheW91
dFVuaXQgc3RyaXBZID0gYWRqdXN0ZWRQYWludE9mZnNldC55KCkgLSAoaXNIb3Jpem9udGFsKCkg
PyAwX2x1IDogbG9naWNhbE9mZnNldE9uTGluZSk7CiAgICAgICAgIExheW91dFVuaXQgc3RyaXBX
aWR0aCA9IGlzSG9yaXpvbnRhbCgpID8gdG90YWxMb2dpY2FsV2lkdGggOiBmcmFtZVJlY3Qud2lk
dGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8g
ZnJhbWVSZWN0LmhlaWdodCgpIDogdG90YWxMb2dpY2FsV2lkdGg7CiAKQEAgLTE1NzUsNyArMTU3
NSw3IEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJBbm5vdGF0aW9uQWRq
dXN0bWVudChMYXlvdXRVbml0IGFsbG93ZWRQb3NpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghcnVieVJ1bi5zdHlsZSgpLmlzRmxpcHBl
ZExpbmVzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZG
aXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5sb2dpY2FsVG9wKCkgKyAocnVieVRleHQtPmZp
cnN0Um9vdEJveCgpID8gcnVieVRleHQtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiBMYXlv
dXRVbml0KCkpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZGaXJzdFJ1YnlUZXh0
TGluZSA9IHJ1YnlUZXh0LT5sb2dpY2FsVG9wKCkgKyAocnVieVRleHQtPmZpcnN0Um9vdEJveCgp
ID8gcnVieVRleHQtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiAwX2x1KTsKICAgICAgICAg
ICAgICAgICBpZiAodG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA+PSAwKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB0b3BPZkZpcnN0UnVieVRleHRMaW5lICs9
IGNoaWxkLT5sb2dpY2FsVG9wKCk7CkBAIC0xNjIzLDcgKzE2MjMsNyBAQCBMYXlvdXRVbml0IElu
bGluZUZsb3dCb3g6OmNvbXB1dGVVbmRlckFubm90YXRpb25BZGp1c3RtZW50KExheW91dFVuaXQg
YWxsb3dlZFBvcwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBpZiAo
cnVieVJ1bi5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5sb2dp
Y2FsVG9wKCkgKyAocnVieVRleHQtPmZpcnN0Um9vdEJveCgpID8gcnVieVRleHQtPmZpcnN0Um9v
dEJveCgpLT5saW5lVG9wKCkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgIExheW91
dFVuaXQgdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5sb2dpY2FsVG9wKCkgKyAo
cnVieVRleHQtPmZpcnN0Um9vdEJveCgpID8gcnVieVRleHQtPmZpcnN0Um9vdEJveCgpLT5saW5l
VG9wKCkgOiAwX2x1KTsKICAgICAgICAgICAgICAgICBpZiAodG9wT2ZGaXJzdFJ1YnlUZXh0TGlu
ZSA+PSAwKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB0
b3BPZkZpcnN0UnVieVRleHRMaW5lICs9IGNoaWxkLT5sb2dpY2FsVG9wKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggMDhlYjAzOTc2YzJlMTZiZDQ5
OWE3MDZmMGIwYjE4NDk1NTZjMjlhZS4uMWQwMTA5MGIxMWZiYTk1OWYxZDA5YWNmNjNjMzU1NjE2
YzFjMmVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApA
QCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICAgICAgICAgIC8v
IHRydW5jYXRlZCBzdHJpbmcgaS5lLiAgfEhlbGxvfENCQXwgLT4gfC4uLmxvfENCQXwKICAgICAg
ICAgICAgIExheW91dFVuaXQgd2lkdGhPZlZpc2libGVUZXh0ID0gcmVuZGVyZXIoKS53aWR0aCht
X3N0YXJ0LCBtX3RydW5jYXRpb24sIHRleHRQb3MoKSwgaXNGaXJzdExpbmUoKSk7CiAgICAgICAg
ICAgICBMYXlvdXRVbml0IHdpZHRoT2ZIaWRkZW5UZXh0ID0gbG9naWNhbFdpZHRoKCkgLSB3aWR0
aE9mVmlzaWJsZVRleHQ7Ci0gICAgICAgICAgICBMYXlvdXRTaXplIHRydW5jYXRpb25PZmZzZXQo
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gd2lkdGhPZkhpZGRlblRleHQgOiAtd2lkdGhPZkhp
ZGRlblRleHQsIDApOworICAgICAgICAgICAgTGF5b3V0U2l6ZSB0cnVuY2F0aW9uT2Zmc2V0KGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHdpZHRoT2ZIaWRkZW5UZXh0IDogLXdpZHRoT2ZIaWRk
ZW5UZXh0LCAwX2x1KTsKICAgICAgICAgICAgIGxvY2FsUGFpbnRPZmZzZXQubW92ZShpc0hvcml6
b250YWwoKSA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9uT2Zmc2V0LnRyYW5zcG9zZWRT
aXplKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xheW91dFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuaAppbmRleCA4YTQzMGIwMDQwYWE0ZDNmZWI3ZTczMzRlZmI1YzczNGNiZDQ4YmUyLi44ZWMz
NjAzZjJmYjFkODczYTYzNTE0OWQ4OGI4Njc3OTUyMDExMzUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaApAQCAtMTM3LDcgKzEzNyw3IEBAIHByaXZhdGU6CiBjbGFzcyBM
YXlvdXRTdGF0ZU1haW50YWluZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheW91dFN0
YXRlTWFpbnRhaW5lcik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgTGF5b3V0U3RhdGVNYWludGFp
bmVyKFJlbmRlckJveCYsIExheW91dFNpemUgb2Zmc2V0LCBib29sIGRpc2FibGVTdGF0ZSA9IGZh
bHNlLCBMYXlvdXRVbml0IHBhZ2VIZWlnaHQgPSAwLCBib29sIHBhZ2VIZWlnaHRDaGFuZ2VkID0g
ZmFsc2UpOworICAgIGV4cGxpY2l0IExheW91dFN0YXRlTWFpbnRhaW5lcihSZW5kZXJCb3gmLCBM
YXlvdXRTaXplIG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSwgTGF5b3V0VW5pdCBw
YWdlSGVpZ2h0ID0gMF9sdSwgYm9vbCBwYWdlSGVpZ2h0Q2hhbmdlZCA9IGZhbHNlKTsKICAgICB+
TGF5b3V0U3RhdGVNYWludGFpbmVyKCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaAppbmRleCA1
YzRlY2M5YzMzOTBhNzBiNDdlNmQ3ZDFmNjY2ZWI5OWE4Njg0OTJjLi4yYTMwOWViZTZkOThiNDc1
ZmEyOTkzN2E3NjM5NjBiM2Y3Mzc4ZDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgKQEAgLTQ5LDkgKzQ5LDkg
QEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKG1fY2FjaGUpOwogICAgICAgICAgICAgaWYg
KG1faGFzRmxvYXRzT3JGcmFnbWVudGVkRmxvd3MgfHwgIW1fY2FjaGVkTG9naWNhbExlZnRTZWxl
Y3Rpb25PZmZzZXQpIHsKICAgICAgICAgICAgICAgICBtX2NhY2hlZExvZ2ljYWxMZWZ0U2VsZWN0
aW9uT2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtX2xvZ2ljYWxMZWZ0U2VsZWN0aW9u
T2Zmc2V0ID0gbV9ibG9jayA/IG1fYmxvY2stPmxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJv
b3RCbG9jaywgcG9zaXRpb24sICptX2NhY2hlKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsK
KyAgICAgICAgICAgICAgICBtX2xvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0ID0gbV9ibG9jayA/
IG1fYmxvY2stPmxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgcG9zaXRpb24s
ICptX2NhY2hlKSA6IDBfbHU7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBB
U1NFUlQobV9sb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCA9PSAobV9ibG9jayA/IG1fYmxvY2st
PmxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgcG9zaXRpb24sICptX2NhY2hl
KSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKSkpOworICAgICAgICAgICAgICAgIEFTU0VSVCht
X2xvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0ID09IChtX2Jsb2NrID8gbV9ibG9jay0+bG9naWNh
bExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBwb3NpdGlvbiwgKm1fY2FjaGUpIDogMF9s
dSkpOwogICAgICAgICAgICAgcmV0dXJuIG1fbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQ7CiAg
ICAgICAgIH0KIApAQCAtNjAsOSArNjAsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQo
bV9jYWNoZSk7CiAgICAgICAgICAgICBpZiAobV9oYXNGbG9hdHNPckZyYWdtZW50ZWRGbG93cyB8
fCAhbV9jYWNoZWRMb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQpIHsKICAgICAgICAgICAgICAg
ICBtX2NhY2hlZExvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgbV9sb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQgPSBtX2Jsb2NrID8gbV9ibG9jay0+
bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgcG9zaXRpb24sICptX2NhY2hl
KSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKKyAgICAgICAgICAgICAgICBtX2xvZ2ljYWxS
aWdodFNlbGVjdGlvbk9mZnNldCA9IG1fYmxvY2sgPyBtX2Jsb2NrLT5sb2dpY2FsUmlnaHRTZWxl
Y3Rpb25PZmZzZXQocm9vdEJsb2NrLCBwb3NpdGlvbiwgKm1fY2FjaGUpIDogMF9sdTsKICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVChtX2xvZ2ljYWxSaWdodFNlbGVj
dGlvbk9mZnNldCA9PSAobV9ibG9jayA/IG1fYmxvY2stPmxvZ2ljYWxSaWdodFNlbGVjdGlvbk9m
ZnNldChyb290QmxvY2ssIHBvc2l0aW9uLCAqbV9jYWNoZSkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4
ZWwoMCkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9sb2dpY2FsUmlnaHRTZWxlY3Rpb25P
ZmZzZXQgPT0gKG1fYmxvY2sgPyBtX2Jsb2NrLT5sb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQo
cm9vdEJsb2NrLCBwb3NpdGlvbiwgKm1fY2FjaGUpIDogMF9sdSkpOwogICAgICAgICAgICAgcmV0
dXJuIG1fbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0OwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDFkZjU3MzQyZjY1NGM0MWZiMTFj
M2JiOTc1ZGI2ODllNWFjNTcwMzIuLmY2OWI4YzNmNjZlYTA5YjQzNGM2NWM1NGVhYzM3NWExZWNi
MTU0YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNjgx
LDkgKzY4MSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhMYXlvdXRVbml0
IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCkKICAgICAgICAgTGF5b3V0UmVjdCBjbGllbnRSZWN0
KGZsaXBwZWRDbGllbnRCb3hSZWN0KCkpOwogICAgICAgICBMYXlvdXRSZWN0IHJlY3RUb0FwcGx5
OwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHJl
Y3RUb0FwcGx5ID0gTGF5b3V0UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50UmVjdC55KCksIDEs
IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3Qu
eSgpKSk7CisgICAgICAgICAgICByZWN0VG9BcHBseSA9IExheW91dFJlY3QoY2xpZW50UmVjdC54
KCksIGNsaWVudFJlY3QueSgpLCAxX2x1LCBzdGQ6Om1heCgwX2x1LCBvbGRDbGllbnRBZnRlckVk
Z2UgLSBjbGllbnRSZWN0LnkoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWN0VG9B
cHBseSA9IExheW91dFJlY3QoY2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCBzdGQ6Om1h
eDxMYXlvdXRVbml0PigwLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LngoKSksIDEp
OworICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBMYXlvdXRSZWN0KGNsaWVudFJlY3QueCgpLCBj
bGllbnRSZWN0LnkoKSwgc3RkOjptYXgoMF9sdSwgb2xkQ2xpZW50QWZ0ZXJFZGdlIC0gY2xpZW50
UmVjdC54KCkpLCAxX2x1KTsKICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3cocmVjdFRvQXBwbHkp
OwogICAgICAgICBpZiAoaGFzUmVuZGVyT3ZlcmZsb3coKSkKICAgICAgICAgICAgIG1fb3ZlcmZs
b3ctPnNldExheW91dENsaWVudEFmdGVyRWRnZShvbGRDbGllbnRBZnRlckVkZ2UpOwpAQCAtNzc0
LDExICs3NzQsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0TG9naWNhbExlZnRGb3JDaGlsZChS
ZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxMZWYKIHsKICAgICBpZiAoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICBpZiAoYXBwbHlEZWx0YSA9PSBBcHBseUxh
eW91dERlbHRhKQotICAgICAgICAgICAgdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQo
KS5hZGRMYXlvdXREZWx0YShMYXlvdXRTaXplKGNoaWxkLngoKSAtIGxvZ2ljYWxMZWZ0LCAwKSk7
CisgICAgICAgICAgICB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmFkZExheW91
dERlbHRhKExheW91dFNpemUoY2hpbGQueCgpIC0gbG9naWNhbExlZnQsIDBfbHUpKTsKICAgICAg
ICAgY2hpbGQuc2V0WChsb2dpY2FsTGVmdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGFw
cGx5RGVsdGEgPT0gQXBwbHlMYXlvdXREZWx0YSkKLSAgICAgICAgICAgIHZpZXcoKS5mcmFtZVZp
ZXcoKS5sYXlvdXRDb250ZXh0KCkuYWRkTGF5b3V0RGVsdGEoTGF5b3V0U2l6ZSgwLCBjaGlsZC55
KCkgLSBsb2dpY2FsTGVmdCkpOworICAgICAgICAgICAgdmlldygpLmZyYW1lVmlldygpLmxheW91
dENvbnRleHQoKS5hZGRMYXlvdXREZWx0YShMYXlvdXRTaXplKDBfbHUsIGNoaWxkLnkoKSAtIGxv
Z2ljYWxMZWZ0KSk7CiAgICAgICAgIGNoaWxkLnNldFkobG9naWNhbExlZnQpOwogICAgIH0KIH0K
QEAgLTc4NywxMSArNzg3LDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNldExvZ2ljYWxUb3BGb3JD
aGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsCiB7CiAgICAgaWYg
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKGFwcGx5RGVsdGEgPT0g
QXBwbHlMYXlvdXREZWx0YSkKLSAgICAgICAgICAgIHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRD
b250ZXh0KCkuYWRkTGF5b3V0RGVsdGEoTGF5b3V0U2l6ZSgwLCBjaGlsZC55KCkgLSBsb2dpY2Fs
VG9wKSk7CisgICAgICAgICAgICB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmFk
ZExheW91dERlbHRhKExheW91dFNpemUoMF9sdSwgY2hpbGQueSgpIC0gbG9naWNhbFRvcCkpOwog
ICAgICAgICBjaGlsZC5zZXRZKGxvZ2ljYWxUb3ApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
IChhcHBseURlbHRhID09IEFwcGx5TGF5b3V0RGVsdGEpCi0gICAgICAgICAgICB2aWV3KCkuZnJh
bWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmFkZExheW91dERlbHRhKExheW91dFNpemUoY2hpbGQu
eCgpIC0gbG9naWNhbFRvcCwgMCkpOworICAgICAgICAgICAgdmlldygpLmZyYW1lVmlldygpLmxh
eW91dENvbnRleHQoKS5hZGRMYXlvdXREZWx0YShMYXlvdXRTaXplKGNoaWxkLngoKSAtIGxvZ2lj
YWxUb3AsIDBfbHUpKTsKICAgICAgICAgY2hpbGQuc2V0WChsb2dpY2FsVG9wKTsKICAgICB9CiB9
CkBAIC0yMjcxLDcgKzIyNzEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aAogCiAgICAgUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICBSZW5kZXJCbG9jayogY29udGFp
bmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgTGF5b3V0VW5pdCBmbG9h
dExlZnRXaWR0aCA9IDAsIGZsb2F0UmlnaHRXaWR0aCA9IDA7CisgICAgTGF5b3V0VW5pdCBmbG9h
dExlZnRXaWR0aCwgZmxvYXRSaWdodFdpZHRoOwogCiAgICAgTGF5b3V0VW5pdCBjaGlsZE1pbldp
ZHRoOwogICAgIExheW91dFVuaXQgY2hpbGRNYXhXaWR0aDsKQEAgLTI3MTAsMTMgKzI3MTAsMTMg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cmVzZXRFbmNsb3NpbmdGcmFnbWVudGVkRmxvd0FuZENoaWxk
SW5mb0luY2x1ZGluZ0Rlc2NlbmRhbnRzKFIKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OnBhZ2lu
YXRpb25TdHJ1dCgpIGNvbnN0CiB7CiAgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSogcmFyZURhdGEg
PSBnZXRCbG9ja1JhcmVEYXRhKCp0aGlzKTsKLSAgICByZXR1cm4gcmFyZURhdGEgPyByYXJlRGF0
YS0+bV9wYWdpbmF0aW9uU3RydXQgOiBMYXlvdXRVbml0KCk7CisgICAgcmV0dXJuIHJhcmVEYXRh
ID8gcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDogMF9sdTsKIH0KIAogTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6cGFnZUxvZ2ljYWxPZmZzZXQoKSBjb25zdAogewogICAgIFJlbmRlckJsb2Nr
UmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0QmxvY2tSYXJlRGF0YSgqdGhpcyk7Ci0gICAgcmV0dXJu
IHJhcmVEYXRhID8gcmFyZURhdGEtPm1fcGFnZUxvZ2ljYWxPZmZzZXQgOiBMYXlvdXRVbml0KCk7
CisgICAgcmV0dXJuIHJhcmVEYXRhID8gcmFyZURhdGEtPm1fcGFnZUxvZ2ljYWxPZmZzZXQgOiAw
X2x1OwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQoTGF5b3V0VW5p
dCBzdHJ1dCkKQEAgLTI4NDAsOCArMjg0MCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50CiAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciBibG9jay1mbG93cyB0aGF0IGFyZSBo
b3Jpem9udGFsLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDY3ODEKICAgICAgICAgYm9vbCBwcmV2SW5saW5lSGFzTGluZUJveCA9IGRvd25jYXN0
PFJlbmRlcklubGluZT4oKmlubGluZUNvbnRpbnVhdGlvbi0+ZWxlbWVudCgpLT5yZW5kZXJlcigp
KS5maXJzdExpbmVCb3goKTsKLSAgICAgICAgZmxvYXQgdG9wTWFyZ2luID0gcHJldklubGluZUhh
c0xpbmVCb3ggPyBjb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSA6IExheW91dFVuaXQoKTsKLSAgICAg
ICAgZmxvYXQgYm90dG9tTWFyZ2luID0gbmV4dElubGluZUhhc0xpbmVCb3ggPyBjb2xsYXBzZWRN
YXJnaW5BZnRlcigpIDogTGF5b3V0VW5pdCgpOworICAgICAgICBmbG9hdCB0b3BNYXJnaW4gPSBw
cmV2SW5saW5lSGFzTGluZUJveCA/IGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpIDogMF9sdTsKKyAg
ICAgICAgZmxvYXQgYm90dG9tTWFyZ2luID0gbmV4dElubGluZUhhc0xpbmVCb3ggPyBjb2xsYXBz
ZWRNYXJnaW5BZnRlcigpIDogMF9sdTsKICAgICAgICAgTGF5b3V0UmVjdCByZWN0KGFkZGl0aW9u
YWxPZmZzZXQueCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSAtIHRvcE1hcmdpbiwgd2lkdGgoKSwg
aGVpZ2h0KCkgKyB0b3BNYXJnaW4gKyBib3R0b21NYXJnaW4pOwogICAgICAgICBpZiAoIXJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHJlY3QpOwpAQCAtMzE4NCw3ICsz
MTg0LDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCbG9jazo6YXZhaWxhYmxl
TG9naWNhbEhlaWdodEZvclBlcmNlbnRhZ2VDb21wdXQKICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0
ID0gb3ZlcnJpZGVDb250ZW50TG9naWNhbEhlaWdodCgpOwogICAgIGVsc2UgaWYgKHN0eWxlVG9V
c2UubG9naWNhbEhlaWdodCgpLmlzRml4ZWQoKSkgewogICAgICAgICBMYXlvdXRVbml0IGNvbnRl
bnRCb3hIZWlnaHQgPSBhZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJveFNpemluZygo
TGF5b3V0VW5pdClzdHlsZVRvVXNlLmxvZ2ljYWxIZWlnaHQoKS52YWx1ZSgpKTsKLSAgICAgICAg
YXZhaWxhYmxlSGVpZ2h0ID0gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBjb25zdHJhaW5Db250ZW50
Qm94TG9naWNhbEhlaWdodEJ5TWluTWF4KGNvbnRlbnRCb3hIZWlnaHQgLSBzY3JvbGxiYXJMb2dp
Y2FsSGVpZ2h0KCksIHN0ZDo6bnVsbG9wdCkpOworICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBz
dGQ6Om1heCgwX2x1LCBjb25zdHJhaW5Db250ZW50Qm94TG9naWNhbEhlaWdodEJ5TWluTWF4KGNv
bnRlbnRCb3hIZWlnaHQgLSBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCksIHN0ZDo6bnVsbG9wdCkp
OwogICAgIH0gZWxzZSBpZiAoc3R5bGVUb1VzZS5sb2dpY2FsSGVpZ2h0KCkuaXNQZXJjZW50T3JD
YWxjdWxhdGVkKCkgJiYgIWlzT3V0T2ZGbG93UG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQp
IHsKICAgICAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBoZWlnaHRXaXRoU2Nyb2xsYmFy
ID0gY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KHN0eWxlVG9Vc2UubG9naWNhbEhlaWdo
dCgpKTsKICAgICAgICAgaWYgKGhlaWdodFdpdGhTY3JvbGxiYXIpIHsKQEAgLTMxOTQsMTIgKzMx
OTQsMTIgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCbG9jazo6YXZhaWxhYmxl
TG9naWNhbEhlaWdodEZvclBlcmNlbnRhZ2VDb21wdXQKICAgICAgICAgICAgIC8vIHJldHVybiB2
YWx1ZSBmcm9tIHRoZSByZWN1cnNpdmUgY2FsbCB3aWxsIG5vdCBoYXZlIGJlZW4gYWRqdXN0ZWQK
ICAgICAgICAgICAgIC8vIHlldC4KICAgICAgICAgICAgIExheW91dFVuaXQgY29udGVudEJveEhl
aWdodCA9IGNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0QnlNaW5NYXgoY29udGVudEJv
eEhlaWdodFdpdGhTY3JvbGxiYXIgLSBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCksIHN0ZDo6bnVs
bG9wdCk7Ci0gICAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBzdGQ6Om1heChMYXlvdXRVbml0
KCksIGNvbnRlbnRCb3hIZWlnaHQpOworICAgICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gc3Rk
OjptYXgoMF9sdSwgY29udGVudEJveEhlaWdodCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYg
KGlzT3V0T2ZGbG93UG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQpIHsKICAgICAgICAgLy8g
RG9uJ3QgYWxsb3cgdGhpcyB0byBhZmZlY3QgdGhlIGJsb2NrJyBzaXplKCkgbWVtYmVyIHZhcmlh
YmxlLCBzaW5jZSB0aGlzCiAgICAgICAgIC8vIGNhbiBnZXQgY2FsbGVkIHdoaWxlIHRoZSBibG9j
ayBpcyBzdGlsbCBsYXlpbmcgb3V0IGl0cyBraWRzLgotICAgICAgICBMb2dpY2FsRXh0ZW50Q29t
cHV0ZWRWYWx1ZXMgY29tcHV0ZWRWYWx1ZXMgPSBjb21wdXRlTG9naWNhbEhlaWdodChsb2dpY2Fs
SGVpZ2h0KCksIExheW91dFVuaXQoKSk7CisgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZh
bHVlcyBjb21wdXRlZFZhbHVlcyA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQo
KSwgMF9sdSk7CiAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGNvbXB1dGVkVmFsdWVzLm1fZXh0
ZW50IC0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIHNjcm9sbGJhckxvZ2ljYWxI
ZWlnaHQoKTsKICAgICB9IGVsc2UgaWYgKGlzUmVuZGVyVmlldygpKQogICAgICAgICBhdmFpbGFi
bGVIZWlnaHQgPSB2aWV3KCkucGFnZU9yVmlld0xvZ2ljYWxIZWlnaHQoKTsKQEAgLTMyNjYsNyAr
MzI2Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEV4Y2x1ZGVkQ2hpbGRyZW4oYm9vbCBy
ZWxheW91dENoaWxkcmVuKQogICAgIExheW91dFVuaXQgZmllbGRzZXRCb3JkZXJCZWZvcmUgPSBi
b3JkZXJCZWZvcmUoKTsKICAgICBMYXlvdXRVbml0IGxlZ2VuZExvZ2ljYWxIZWlnaHQgPSBsb2dp
Y2FsSGVpZ2h0Rm9yQ2hpbGQobGVnZW5kKTsKICAgICBMYXlvdXRVbml0IGxlZ2VuZEFmdGVyTWFy
Z2luID0gbWFyZ2luQWZ0ZXJGb3JDaGlsZChsZWdlbmQpOwotICAgIExheW91dFVuaXQgdG9wUG9z
aXRpb25Gb3JMZWdlbmQgPSBzdGQ6Om1heChMYXlvdXRVbml0KCksIChmaWVsZHNldEJvcmRlckJl
Zm9yZSAtIGxlZ2VuZExvZ2ljYWxIZWlnaHQpIC8gMik7CisgICAgTGF5b3V0VW5pdCB0b3BQb3Np
dGlvbkZvckxlZ2VuZCA9IHN0ZDo6bWF4KDBfbHUsIChmaWVsZHNldEJvcmRlckJlZm9yZSAtIGxl
Z2VuZExvZ2ljYWxIZWlnaHQpIC8gMik7CiAgICAgTGF5b3V0VW5pdCBib3R0b21Qb3NpdGlvbkZv
ckxlZ2VuZCA9IHRvcFBvc2l0aW9uRm9yTGVnZW5kICsgbGVnZW5kTG9naWNhbEhlaWdodCArIGxl
Z2VuZEFmdGVyTWFyZ2luOwogCiAgICAgLy8gUGxhY2UgdGhlIGxlZ2VuZCBub3cuCkBAIC0zMzA3
LDEyICszMzA3LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEJvcmRlckJveFJlY3RGb3JQ
YWludGluZyhMYXlvdXRSZWN0JiBwYWludFJlY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgTGF5b3V0VW5p
dCB5T2ZmID0gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCAobGVnZW5kLT5oZWlnaHQoKSAtIFJlbmRl
ckJveDo6Ym9yZGVyQmVmb3JlKCkpIC8gMik7CisgICAgICAgIExheW91dFVuaXQgeU9mZiA9IHN0
ZDo6bWF4KDBfbHUsIChsZWdlbmQtPmhlaWdodCgpIC0gUmVuZGVyQm94Ojpib3JkZXJCZWZvcmUo
KSkgLyAyKTsKICAgICAgICAgcGFpbnRSZWN0LnNldEhlaWdodChwYWludFJlY3QuaGVpZ2h0KCkg
LSB5T2ZmKTsKICAgICAgICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBUb3BUb0JvdHRv
bVdyaXRpbmdNb2RlKQogICAgICAgICAgICAgcGFpbnRSZWN0LnNldFkocGFpbnRSZWN0LnkoKSAr
IHlPZmYpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIExheW91dFVuaXQgeE9mZiA9IHN0ZDo6bWF4
KExheW91dFVuaXQoKSwgKGxlZ2VuZC0+d2lkdGgoKSAtIFJlbmRlckJveDo6Ym9yZGVyQmVmb3Jl
KCkpIC8gMik7CisgICAgICAgIExheW91dFVuaXQgeE9mZiA9IHN0ZDo6bWF4KDBfbHUsIChsZWdl
bmQtPndpZHRoKCkgLSBSZW5kZXJCb3g6OmJvcmRlckJlZm9yZSgpKSAvIDIpOwogICAgICAgICBw
YWludFJlY3Quc2V0V2lkdGgocGFpbnRSZWN0LndpZHRoKCkgLSB4T2ZmKTsKICAgICAgICAgaWYg
KHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlKQogICAgICAg
ICAgICAgcGFpbnRSZWN0LnNldFgocGFpbnRSZWN0LngoKSArIHhPZmYpOwpAQCAtMzM0Niw3ICsz
MzQ2LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6cGFpbnRSZWN0VG9DbGlwT3V0RnJvbUJv
cmRlcihjb25zdCBMYXlvdXRSZWN0JiBwYWludFJlY3QKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6
OmludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0KCkgY29uc3QKIHsKICAgICBhdXRvKiByYXJlRGF0
YSA9IGdldEJsb2NrUmFyZURhdGEoKnRoaXMpOwotICAgIHJldHVybiByYXJlRGF0YSA/IHJhcmVE
YXRhLT5tX2ludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0IDogTGF5b3V0VW5pdCgpOworICAgIHJl
dHVybiByYXJlRGF0YSA/IHJhcmVEYXRhLT5tX2ludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0IDog
MF9sdTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6c2V0SW50cmluc2ljQm9yZGVyRm9yRmllbGRz
ZXQoTGF5b3V0VW5pdCBwYWRkaW5nKQpAQCAtMzQ1Myw3ICszNDUzLDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6YWRqdXN0Q29udGVudEJveExvZ2ljYWxIZWlnaHRGb3JCb3hTaXppbmcoc3Rk
OjpvcHRpb25hbDwKICAgICAgICAgcmVzdWx0IC09IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVp
Z2h0KCk7CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgLT0gaW50cmluc2ljQm9yZGVyRm9yRmll
bGRzZXQoKTsKLSAgICByZXR1cm4gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCByZXN1bHQpOworICAg
IHJldHVybiBzdGQ6Om1heCgwX2x1LCByZXN1bHQpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpw
YWludEV4Y2x1ZGVkQ2hpbGRyZW5JbkJvcmRlcihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAppbmRleCA0YzYxNDhiMWZkNzBhODc5YjE0MjkzNGMxNWVmZjE2OGFmNzMwZDRkLi5iMmU5
YmFjY2MyOTNlZGQ5MDU0YTExOTdjNzI3NzBiYTJmMmJiYWI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklY
TUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUg
bW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUxpbmVzKCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBM
YXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCk7CisgICAgdmlydHVhbCB2b2lkIGxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdo
dCA9IDBfbHUpOwogCiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCgp
IHsgfQogCkBAIC0xMjQsNDggKzEyNCw0OCBAQCBwdWJsaWM6CiAKICAgICAvLyBWZXJzaW9ucyB0
aGF0IGNhbiBjb21wdXRlIGxpbmUgb2Zmc2V0cyB3aXRoIHRoZSBmcmFnbWVudCBhbmQgcGFnZSBv
ZmZzZXQgcGFzc2VkIGluLiBVc2VkIGZvciBzcGVlZCB0byBhdm9pZCBoYXZpbmcgdG8KICAgICAv
LyBjb21wdXRlIHRoZSBmcmFnbWVudCBhbGwgb3ZlciBhZ2FpbiB3aGVuIHlvdSBhbHJlYWR5IGtu
b3cgaXQuCi0gICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lSW5GcmFn
bWVudChMYXlvdXRVbml0IHBvc2l0aW9uLCBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4
dCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQgPSAwKSBjb25zdAorICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9y
TGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3Vs
ZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0ID0gMF9sdSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzdGQ6
Om1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudChw
b3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgZnJhZ21lbnQsIGxvZ2ljYWxIZWlnaHQpCiAgICAg
ICAgICAgICAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQocG9zaXRpb24sIHNo
b3VsZEluZGVudFRleHQsIGZyYWdtZW50LCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgfQotICAgIExh
eW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBw
b3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QK
KyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmVJbkZyYWdtZW50KExheW91
dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDBf
bHUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZShwb3NpdGlvbiwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChmcmFnbWVudCksIHNob3Vs
ZEluZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpOwogICAgIH0KLSAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50
VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFn
bWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKKyAgICBMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwg
SW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMF9sdSkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChmcmFnbWVudCksIHNob3VsZEluZGVudFRleHQsIGxvZ2lj
YWxIZWlnaHQpOwogICAgIH0KLSAgICBMYXlvdXRVbml0IHN0YXJ0T2Zmc2V0Rm9yTGluZUluRnJh
Z21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRl
eHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0ID0gMCkgY29uc3QKKyAgICBMYXlvdXRVbml0IHN0YXJ0T2Zmc2V0Rm9yTGluZUluRnJh
Z21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRl
eHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0ID0gMF9sdSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzdHlsZSgpLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQo
cG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIGZyYWdtZW50LCBsb2dpY2FsSGVpZ2h0KQogICAg
ICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmVJbkZy
YWdtZW50KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudCwgbG9naWNhbEhlaWdo
dCk7CiAgICAgfQotICAgIExheW91dFVuaXQgZW5kT2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQoTGF5
b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0g
MCkgY29uc3QKKyAgICBMYXlvdXRVbml0IGVuZE9mZnNldEZvckxpbmVJbkZyYWdtZW50KExheW91
dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDBf
bHUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudChwb3NpdGlvbiwg
c2hvdWxkSW5kZW50VGV4dCwgZnJhZ21lbnQsIGxvZ2ljYWxIZWlnaHQpCiAgICAgICAgICAgICA6
IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQocG9z
aXRpb24sIHNob3VsZEluZGVudFRleHQsIGZyYWdtZW50LCBsb2dpY2FsSGVpZ2h0KTsKICAgICB9
CiAKLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoTGF5b3V0VW5p
dCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIExheW91dFVuaXQg
bG9naWNhbEhlaWdodCA9IDApIGNvbnN0CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2Fs
V2lkdGhGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJ
bmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwX2x1KSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmVJbkZyYWdtZW50KHBv
c2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudEF0QmxvY2tPZmZzZXQocG9zaXRpb24p
LCBsb2dpY2FsSGVpZ2h0KTsKICAgICB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZz
ZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRl
bnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAorICAgIExheW91dFVu
aXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBJbmRlbnRU
ZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMF9s
dSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
KHBvc2l0aW9uLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHBvc2l0aW9uKSwgc2hvdWxk
SW5kZW50VGV4dCwgbG9naWNhbEhlaWdodCk7CiAgICAgfQotICAgIExheW91dFVuaXQgbG9naWNh
bExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBz
aG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAorICAg
IExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24s
IEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQgPSAwX2x1KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHBvc2l0aW9uKSwg
c2hvdWxkSW5kZW50VGV4dCwgbG9naWNhbEhlaWdodCk7CiAgICAgfQotICAgIExheW91dFVuaXQg
c3RhcnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBz
aG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAorICAg
IExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVu
dFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAw
X2x1KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRl
bnRUZXh0LCBsb2dpY2FsSGVpZ2h0KQogICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxv
Z2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIGxvZ2lj
YWxIZWlnaHQpOwogICAgIH0KLSAgICBMYXlvdXRVbml0IGVuZE9mZnNldEZvckxpbmUoTGF5b3V0
VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIExheW91dFVu
aXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CisgICAgTGF5b3V0VW5pdCBlbmRPZmZzZXRGb3JM
aW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0
LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwX2x1KSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgbG9naWNhbEhlaWdodCkKICAg
ICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBv
c2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBsb2dpY2FsSGVpZ2h0KTsKQEAgLTMzOCwxMSArMzM4
LDExIEBAIHByb3RlY3RlZDoKICAgICBlbnVtIFBhaW50QmxvY2tUeXBlIHsgUGFpbnRBc0Jsb2Nr
LCBQYWludEFzSW5saW5lQmxvY2sgfTsKICAgICBib29sIHBhaW50Q2hpbGQoUmVuZGVyQm94Jiwg
UGFpbnRJbmZvJiBmb3JTZWxmLCBjb25zdCBMYXlvdXRQb2ludCYsIFBhaW50SW5mbyYgZm9yQ2hp
bGQsIGJvb2wgdXNlUHJpbnRSZWN0LCBQYWludEJsb2NrVHlwZSBwYWludFR5cGUgPSBQYWludEFz
QmxvY2spOwogICAgCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExh
eW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRl
eHRJbmRlbnQsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5
b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQsIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCA9IDBfbHUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gYWRqdXN0TG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShsb2dpY2FsUmlnaHRGbG9hdE9mZnNldEZvckxpbmUobG9n
aWNhbFRvcCwgZml4ZWRPZmZzZXQsIGxvZ2ljYWxIZWlnaHQpLCBhcHBseVRleHRJbmRlbnQpOwog
ICAgIH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0
IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50
LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAorICAgIExheW91dFVuaXQgbG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBm
aXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQsIExheW91dFVuaXQgbG9naWNhbEhlaWdo
dCA9IDBfbHUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gYWRqdXN0TG9naWNhbExlZnRP
ZmZzZXRGb3JMaW5lKGxvZ2ljYWxMZWZ0RmxvYXRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3AsIGZp
eGVkT2Zmc2V0LCBsb2dpY2FsSGVpZ2h0KSwgYXBwbHlUZXh0SW5kZW50KTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IDMyZGRhY2Vi
MmU5MTNjODMxNmRkMDYwMTA3ZTk5YmNmMjBkNzVhOWYuLjY3Njg5YTA3NTFlMTg0ODk0YzZhMGYy
OGM5MmUyZDVkM2Y4MDNjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwCkBAIC0xMDAsOCArMTAwLDggQEAgUmVuZGVyQmxvY2tGbG93OjpNYXJnaW5J
bmZvOjpNYXJnaW5JbmZvKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIExheW91dFVuaXQK
IAogICAgIG1fZGlzY2FyZE1hcmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hp
bGRyZW4gJiYgYmxvY2subXVzdERpc2NhcmRNYXJnaW5CZWZvcmUoKTsKIAotICAgIG1fcG9zaXRp
dmVNYXJnaW4gPSAobV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJlbiAmJiAhYmxv
Y2subXVzdERpc2NhcmRNYXJnaW5CZWZvcmUoKSkgPyBibG9jay5tYXhQb3NpdGl2ZU1hcmdpbkJl
Zm9yZSgpIDogTGF5b3V0VW5pdCgpOwotICAgIG1fbmVnYXRpdmVNYXJnaW4gPSAobV9jYW5Db2xs
YXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJlbiAmJiAhYmxvY2subXVzdERpc2NhcmRNYXJnaW5C
ZWZvcmUoKSkgPyBibG9jay5tYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIDogTGF5b3V0VW5pdCgp
OworICAgIG1fcG9zaXRpdmVNYXJnaW4gPSAobV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhD
aGlsZHJlbiAmJiAhYmxvY2subXVzdERpc2NhcmRNYXJnaW5CZWZvcmUoKSkgPyBibG9jay5tYXhQ
b3NpdGl2ZU1hcmdpbkJlZm9yZSgpIDogMF9sdTsKKyAgICBtX25lZ2F0aXZlTWFyZ2luID0gKG1f
Y2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hpbGRyZW4gJiYgIWJsb2NrLm11c3REaXNjYXJk
TWFyZ2luQmVmb3JlKCkpID8gYmxvY2subWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKSA6IDBfbHU7
CiB9CiAKIFJlbmRlckJsb2NrRmxvdzo6UmVuZGVyQmxvY2tGbG93KEVsZW1lbnQmIGVsZW1lbnQs
IFJlbmRlclN0eWxlJiYgc3R5bGUpCkBAIC04NDUsNyArODQ1LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCbG9ja0Zsb3c6Om1hcmdpbk9mZnNldEZvclNlbGZDb2xsYXBzaW5nQmxvY2soKQogICAgIFJl
bmRlckJsb2NrRmxvdyogcGFyZW50QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KHBh
cmVudCgpKTsKICAgICBpZiAocGFyZW50QmxvY2sgJiYgc3R5bGUoKS5jbGVhcigpICE9IENsZWFy
OjpOb25lICYmIHBhcmVudEJsb2NrLT5nZXRDbGVhckRlbHRhKCp0aGlzLCBsb2dpY2FsSGVpZ2h0
KCkpKQogICAgICAgICByZXR1cm4gbWFyZ2luVmFsdWVzRm9yQ2hpbGQoKnRoaXMpLnBvc2l0aXZl
TWFyZ2luQmVmb3JlKCk7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoKTsKKyAgICByZXR1cm4gMF9s
dTsKIH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRp
b25Gb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBBcHBseUxheW91dERlbHRhTW9kZSBhcHBseURl
bHRhKQpAQCAtODgyLDcgKzg4Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RGbG9h
dGluZ0Jsb2NrKGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8pCiAgICAgLy8gZm9yIGJ5IHNp
bXBseSBjYWxsaW5nIGNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZS4gU2VlCiAgICAgLy8gaHR0
cDovL3d3dy5oaXhpZS5jaC90ZXN0cy9hZGhvYy9jc3MvYm94L2Jsb2NrL21hcmdpbi1jb2xsYXBz
ZS8wNDYuaHRtbCBmb3IKICAgICAvLyBhbiBleGFtcGxlIG9mIHRoaXMgc2NlbmFyaW8uCi0gICAg
TGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdp
bkJlZm9yZSgpID8gTGF5b3V0VW5pdCgpIDogbWFyZ2luSW5mby5tYXJnaW4oKTsKKyAgICBMYXlv
dXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoTWFyZ2luQmVm
b3JlKCkgPyAwX2x1IDogbWFyZ2luSW5mby5tYXJnaW4oKTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0
KGxvZ2ljYWxIZWlnaHQoKSArIG1hcmdpbk9mZnNldCk7CiAgICAgcG9zaXRpb25OZXdGbG9hdHMo
KTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSAtIG1hcmdpbk9mZnNldCk7
CkBAIC0xMDg0LDcgKzEwODQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxvdzo6Y29sbGFw
c2VNYXJnaW5zV2l0aENoaWxkSW5mbyhSZW5kZXJCb3gqIGNoaWxkLCBSZW5kZQogICAgICAgICAg
ICAgLy8gSWYgd2UgYXJlIGF0IHRoZSBiZWZvcmUgc2lkZSBvZiB0aGUgYmxvY2sgYW5kIHdlIGNv
bGxhcHNlLCBpZ25vcmUgdGhlIGNvbXB1dGVkIG1hcmdpbgogICAgICAgICAgICAgLy8gYW5kIGp1
c3QgYWRkIHRoZSBjaGlsZCBtYXJnaW4gdG8gdGhlIGNvbnRhaW5lciBoZWlnaHQuIFRoaXMgd2ls
bCBjb3JyZWN0bHkgcG9zaXRpb24KICAgICAgICAgICAgIC8vIHRoZSBjaGlsZCBpbnNpZGUgdGhl
IGNvbnRhaW5lci4KLSAgICAgICAgICAgIExheW91dFVuaXQgc2VwYXJhdGVNYXJnaW4gPSAhbWFy
Z2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSA/IG1hcmdpbkluZm8ubWFyZ2lu
KCkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IHNl
cGFyYXRlTWFyZ2luID0gIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoTWFyZ2luQmVmb3JlKCkg
PyBtYXJnaW5JbmZvLm1hcmdpbigpIDogMF9sdTsKICAgICAgICAgICAgIHNldExvZ2ljYWxIZWln
aHQobG9naWNhbEhlaWdodCgpICsgc2VwYXJhdGVNYXJnaW4gKyBtYXJnaW5CZWZvcmVGb3JDaGls
ZCgqY2hpbGQpKTsKICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVpZ2h0KCk7CiAg
ICAgICAgIH0gZWxzZSBpZiAoIW1hcmdpbkluZm8uZGlzY2FyZE1hcmdpbigpICYmICghbWFyZ2lu
SW5mby5hdEJlZm9yZVNpZGVPZkJsb2NrKCkKQEAgLTE1MjYsNyArMTUyNiw3IEBAIExheW91dFVu
aXQgUmVuZGVyQmxvY2tGbG93OjphcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94JiBjaGlsZCwgTGF5
b3V0VW5pdCBsb2dpY2FsCiAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gKGNoZWNrQ29sdW1u
QnJlYWtzICYmIGNoaWxkLnN0eWxlKCkuYnJlYWtBZnRlcigpID09IEJyZWFrQmV0d2Vlbjo6Q29s
dW1uKQogICAgICAgICB8fCAoY2hlY2tQYWdlQnJlYWtzICYmIGFsd2F5c1BhZ2VCcmVhayhjaGls
ZC5zdHlsZSgpLmJyZWFrQWZ0ZXIoKSkpOwogICAgIGlmIChjaGVja0FmdGVyQWx3YXlzICYmIGlu
Tm9ybWFsRmxvdyhjaGlsZCkgJiYgaGFzTmV4dFBhZ2UobG9naWNhbE9mZnNldCwgSW5jbHVkZVBh
Z2VCb3VuZGFyeSkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5J
bmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gTGF5b3V0VW5pdCgpIDogbWFyZ2lu
SW5mby5tYXJnaW4oKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5J
bmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gMF9sdSA6IG1hcmdpbkluZm8ubWFy
Z2luKCk7CiAKICAgICAgICAgLy8gU28gb3VyIG1hcmdpbiBkb2Vzbid0IHBhcnRpY2lwYXRlIGlu
IHRoZSBuZXh0IGNvbGxhcHNpbmcgc3RlcHMuCiAgICAgICAgIG1hcmdpbkluZm8uY2xlYXJNYXJn
aW4oKTsKQEAgLTE3NDQsNyArMTc0NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RM
aW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIExhCiAgICAg
ICAgICAgICAmJiAhaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWlzVGFibGVDZWxsKCkpIHsK
ICAgICAgICAgICAgIGF1dG8gZmlyc3RSb290Qm94ID0gdGhpcy0+Zmlyc3RSb290Qm94KCk7CiAg
ICAgICAgICAgICBhdXRvIGZpcnN0Um9vdEJveE92ZXJmbG93UmVjdCA9IGZpcnN0Um9vdEJveC0+
bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdChmaXJzdFJvb3RCb3gtPmxpbmVUb3AoKSwgZmlyc3RS
b290Qm94LT5saW5lQm90dG9tKCkpOwotICAgICAgICAgICAgYXV0byBmaXJzdExpbmVVcHBlck92
ZXJoYW5nID0gc3RkOjptYXgoLWZpcnN0Um9vdEJveE92ZXJmbG93UmVjdC55KCksIExheW91dFVu
aXQoKSk7CisgICAgICAgICAgICBhdXRvIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcgPSBzdGQ6Om1h
eCgtZmlyc3RSb290Qm94T3ZlcmZsb3dSZWN0LnkoKSwgMF9sdSk7CiAgICAgICAgICAgICBpZiAo
bmVlZHNBcHBsZU1haWxQYWdpbmF0aW9uUXVpcmsoKmxpbmVCb3gpKQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dChyZW1haW5pbmdMb2dpY2Fs
SGVpZ2h0ICsgbG9naWNhbE9mZnNldCArIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcpOwpAQCAtMjM1
Myw4ICsyMzUzLDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVMb2dpY2FsTG9jYXRp
b25Gb3JGbG9hdChGbG9hdGluZ09iamVjdCYgZmxvYXRpbmdPYmoKICAgICB9CiAgICAgCiAgICAg
aWYgKGNoaWxkQm94LnN0eWxlKCkuZmxvYXRpbmcoKSA9PSBGbG9hdDo6TGVmdCkgewotICAgICAg
ICBMYXlvdXRVbml0IGhlaWdodFJlbWFpbmluZ0xlZnQgPSAxOwotICAgICAgICBMYXlvdXRVbml0
IGhlaWdodFJlbWFpbmluZ1JpZ2h0ID0gMTsKKyAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHRSZW1h
aW5pbmdMZWZ0ID0gMV9sdTsKKyAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHRSZW1haW5pbmdSaWdo
dCA9IDFfbHU7CiAgICAgICAgIGZsb2F0TG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdE9mZnNldEZv
clBvc2l0aW9uaW5nRmxvYXQobG9naWNhbFRvcE9mZnNldCwgbG9naWNhbExlZnRPZmZzZXQsIGZh
bHNlLCAmaGVpZ2h0UmVtYWluaW5nTGVmdCk7CiAgICAgICAgIHdoaWxlIChsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JQb3NpdGlvbmluZ0Zsb2F0KGxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxSaWdodE9m
ZnNldCwgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdSaWdodCkgLSBmbG9hdExvZ2ljYWxMZWZ0IDwg
ZmxvYXRMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgIGxvZ2ljYWxUb3BPZmZzZXQgKz0gc3Rk
OjptaW4oaGVpZ2h0UmVtYWluaW5nTGVmdCwgaGVpZ2h0UmVtYWluaW5nUmlnaHQpOwpAQCAtMjM2
OCw4ICsyMzY4LDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVMb2dpY2FsTG9jYXRp
b25Gb3JGbG9hdChGbG9hdGluZ09iamVjdCYgZmxvYXRpbmdPYmoKICAgICAgICAgfQogICAgICAg
ICBmbG9hdExvZ2ljYWxMZWZ0ID0gc3RkOjptYXgobG9naWNhbExlZnRPZmZzZXQgLSBib3JkZXJB
bmRQYWRkaW5nTG9naWNhbExlZnQoKSwgZmxvYXRMb2dpY2FsTGVmdCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHRSZW1haW5pbmdMZWZ0ID0gMTsKLSAgICAgICAgTGF5
b3V0VW5pdCBoZWlnaHRSZW1haW5pbmdSaWdodCA9IDE7CisgICAgICAgIExheW91dFVuaXQgaGVp
Z2h0UmVtYWluaW5nTGVmdCA9IDFfbHU7CisgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVtYWlu
aW5nUmlnaHQgPSAxX2x1OwogICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbG9naWNhbFJpZ2h0
T2Zmc2V0Rm9yUG9zaXRpb25pbmdGbG9hdChsb2dpY2FsVG9wT2Zmc2V0LCBsb2dpY2FsUmlnaHRP
ZmZzZXQsIGZhbHNlLCAmaGVpZ2h0UmVtYWluaW5nUmlnaHQpOwogICAgICAgICB3aGlsZSAoZmxv
YXRMb2dpY2FsTGVmdCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yUG9zaXRpb25pbmdGbG9hdChsb2dp
Y2FsVG9wT2Zmc2V0LCBsb2dpY2FsTGVmdE9mZnNldCwgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdM
ZWZ0KSA8IGZsb2F0TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICBsb2dpY2FsVG9wT2Zmc2V0
ICs9IHN0ZDo6bWluKGhlaWdodFJlbWFpbmluZ0xlZnQsIGhlaWdodFJlbWFpbmluZ1JpZ2h0KTsK
QEAgLTI3MjAsOCArMjcyMCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGRJbnRydWRpbmdG
bG9hdHMoUmVuZGVyQmxvY2tGbG93KiBwcmV2LCBSZW5kZXJCbG9ja0Zsb3cqCiAgICAgICAgICAg
ICAgICAgLy8gaW50byBhY2NvdW50LiBPbmx5IGFwcGx5IHRoaXMgY29kZSBpZiBwcmV2IGlzIHRo
ZSBwYXJlbnQsIHNpbmNlIG90aGVyd2lzZSB0aGUgbGVmdCBtYXJnaW4KICAgICAgICAgICAgICAg
ICAvLyB3aWxsIGdldCBhcHBsaWVkIHR3aWNlLgogICAgICAgICAgICAgICAgIExheW91dFNpemUg
b2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKQotICAgICAgICAgICAgICAgICAgICA/
IExheW91dFNpemUobG9naWNhbExlZnRPZmZzZXQgLSAocHJldiAhPSBjb250YWluZXIgPyBwcmV2
LT5tYXJnaW5MZWZ0KCkgOiBMYXlvdXRVbml0KCkpLCBsb2dpY2FsVG9wT2Zmc2V0KQotICAgICAg
ICAgICAgICAgICAgICA6IExheW91dFNpemUobG9naWNhbFRvcE9mZnNldCwgbG9naWNhbExlZnRP
ZmZzZXQgLSAocHJldiAhPSBjb250YWluZXIgPyBwcmV2LT5tYXJnaW5Ub3AoKSA6IExheW91dFVu
aXQoKSkpOworICAgICAgICAgICAgICAgICAgICA/IExheW91dFNpemUobG9naWNhbExlZnRPZmZz
ZXQgLSAocHJldiAhPSBjb250YWluZXIgPyBwcmV2LT5tYXJnaW5MZWZ0KCkgOiAwX2x1KSwgbG9n
aWNhbFRvcE9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgOiBMYXlvdXRTaXplKGxvZ2ljYWxU
b3BPZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0IC0gKHByZXYgIT0gY29udGFpbmVyID8gcHJldi0+
bWFyZ2luVG9wKCkgOiAwX2x1KSk7CiAKICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cy0+YWRkKGZsb2F0aW5nT2JqZWN0LmNvcHlUb05ld0NvbnRhaW5lcihvZmZzZXQpKTsKICAgICAg
ICAgICAgIH0KQEAgLTI4MTcsNyArMjgxNyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93
OjpnZXRDbGVhckRlbHRhKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgbG9naWNhbFRvCiAg
ICAgfQogCiAgICAgLy8gV2UgYWxzbyBjbGVhciBmbG9hdHMgaWYgd2UgYXJlIHRvbyBiaWcgdG8g
c2l0IG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBmbG9hdCAoYW5kIHdpc2ggdG8gYXZvaWQgZmxvYXRz
IGJ5IGRlZmF1bHQpLgotICAgIExheW91dFVuaXQgcmVzdWx0ID0gY2xlYXJTZXQgPyBzdGQ6Om1h
eDxMYXlvdXRVbml0PigwLCBsb2dpY2FsQm90dG9tIC0gbG9naWNhbFRvcCkgOiBMYXlvdXRVbml0
KCk7CisgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjbGVhclNldCA/IHN0ZDo6bWF4PExheW91dFVu
aXQ+KDAsIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wKSA6IDBfbHU7CiAgICAgaWYgKCFyZXN1
bHQgJiYgY2hpbGQuYXZvaWRzRmxvYXRzKCkpIHsKICAgICAgICAgTGF5b3V0VW5pdCBuZXdMb2dp
Y2FsVG9wID0gbG9naWNhbFRvcDsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTMyMTksNyAr
MzIxOSw3IEBAIHN0YXRpYyBpbnQgZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYgYmxvY2ssIGludCBsaW5lQ291bnQsIGJvCiAgICAgaWYgKGJsb2NrLmNoaWxkcmVu
SW5saW5lKCkpIHsKICAgICAgICAgZm9yIChhdXRvKiBib3ggPSBibG9jay5maXJzdFJvb3RCb3go
KTsgYm94OyBib3ggPSBib3gtPm5leHRSb290Qm94KCkpIHsKICAgICAgICAgICAgIGlmICgrK2Nv
dW50ID09IGxpbmVDb3VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYm94LT5saW5lQm90dG9t
KCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay5ib3JkZXJCb3R0b20oKSArIGJsb2NrLnBhZGRp
bmdCb3R0b20oKSkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBib3gt
PmxpbmVCb3R0b20oKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2NrLmJvcmRlckJvdHRvbSgpICsg
YmxvY2sucGFkZGluZ0JvdHRvbSgpKSA6IDBfbHUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgUmVuZGVyQm94KiBub3JtYWxGbG93Q2hpbGRXaXRob3V0TGluZXMgPSBudWxscHRy
OwpAQCAtMzIyNyw3ICszMjI3LDcgQEAgc3RhdGljIGludCBnZXRIZWlnaHRGb3JMaW5lQ291bnQo
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9jaywgaW50IGxpbmVDb3VudCwgYm8KICAgICAgICAg
ICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpvYmopICYmIHNob3VsZENoZWNrTGluZXMoZG93
bmNhc3Q8UmVuZGVyQmxvY2tGbG93Pigqb2JqKSkpIHsKICAgICAgICAgICAgICAgICBpbnQgcmVz
dWx0ID0gZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKm9i
aiksIGxpbmVDb3VudCwgZmFsc2UsIGNvdW50KTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgb2JqLT55KCkgKyAo
aW5jbHVkZUJvdHRvbSA/IChibG9jay5ib3JkZXJCb3R0b20oKSArIGJsb2NrLnBhZGRpbmdCb3R0
b20oKSkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
ICsgb2JqLT55KCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay5ib3JkZXJCb3R0b20oKSArIGJs
b2NrLnBhZGRpbmdCb3R0b20oKSkgOiAwX2x1KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9i
ai0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIG5v
cm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyA9IG9iajsKICAgICAgICAgfQpAQCAtMzgzMiw3ICsz
ODMyLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxI
ZWlnaHRDaGFuZ2UoYm9vbCYgcmVsYXlvdXRDaGlsZHIKICAgICBpZiAoUmVuZGVyTXVsdGlDb2x1
bW5GbG93KiBmcmFnbWVudGVkRmxvdyA9IG11bHRpQ29sdW1uRmxvdygpKSB7CiAgICAgICAgIExh
eW91dFVuaXQgbmV3Q29sdW1uSGVpZ2h0OwogICAgICAgICBpZiAoaGFzRGVmaW5pdGVMb2dpY2Fs
SGVpZ2h0KCkgfHwgdmlldygpLmZyYW1lVmlldygpLnBhZ2luYXRpb24oKS5tb2RlICE9IFBhZ2lu
YXRpb246OlVucGFnaW5hdGVkKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXB1dGVkVmFsdWVzID0g
Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCgpLCBsb2dpY2FsVG9wKCkpOworICAgICAg
ICAgICAgYXV0byBjb21wdXRlZFZhbHVlcyA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0KDBfbHUsIGxv
Z2ljYWxUb3AoKSk7CiAgICAgICAgICAgICBuZXdDb2x1bW5IZWlnaHQgPSBzdGQ6Om1heDxMYXlv
dXRVbml0Pihjb21wdXRlZFZhbHVlcy5tX2V4dGVudCAtIGJvcmRlckFuZFBhZGRpbmdMb2dpY2Fs
SGVpZ2h0KCkgLSBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCksIDApOwogICAgICAgICAgICAgaWYg
KGZyYWdtZW50ZWRGbG93LT5jb2x1bW5IZWlnaHRBdmFpbGFibGUoKSAhPSBuZXdDb2x1bW5IZWln
aHQpCiAgICAgICAgICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CkBAIC0zODUwLDcg
KzM4NTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGb3JQYWdpbmF0aW9uTG9naWNh
bEhlaWdodENoYW5nZShib29sJiByZWxheW91dENoaWxkcgogICAgICAgICAvLyBpdCdzIHVua25v
d24sIHdlIG5lZWQgdG8gcHJldmVudCB0aGUgcGFnaW5hdGlvbiBjb2RlIGZyb20gYXNzdW1pbmcg
cGFnZSBicmVha3MgZXZlcnl3aGVyZQogICAgICAgICAvLyBhbmQgdGhlcmVieSBlYXRpbmcgZXZl
cnkgdG9wIG1hcmdpbi4gSXQgc2hvdWxkIGJlIHRyaXZpYWwgdG8gY2xlYW4gdXAgYW5kIGdldCBy
aWQgb2YgdGhpcwogICAgICAgICAvLyBoYWNrIG9uY2UgdGhlIG9sZCBtdWx0aWNvbCBpbXBsZW1l
bnRhdGlvbiBpcyBnb25lIChzZWUgYWxzbyBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGVGb3JQ
YWdpbmF0aW9uKS4KLSAgICAgICAgcGFnZUxvZ2ljYWxIZWlnaHQgPSBmcmFnbWVudGVkRmxvdy5p
c1BhZ2VMb2dpY2FsSGVpZ2h0S25vd24oKSA/IExheW91dFVuaXQoMSkgOiBMYXlvdXRVbml0KDAp
OworICAgICAgICBwYWdlTG9naWNhbEhlaWdodCA9IGZyYWdtZW50ZWRGbG93LmlzUGFnZUxvZ2lj
YWxIZWlnaHRLbm93bigpID8gMV9sdSA6IDBfbHU7CiAKICAgICAgICAgcGFnZUxvZ2ljYWxIZWln
aHRDaGFuZ2VkID0gZnJhZ21lbnRlZEZsb3cucGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCgpOwogICAg
IH0KQEAgLTQwNTIsNyArNDA1Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5s
aW5lUHJlZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsCiAKICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgUmVuZGVyQmxvY2sq
IGNvbnRhaW5pbmdCbG9jayA9IHRoaXMtPmNvbnRhaW5pbmdCbG9jaygpOwotICAgIExheW91dFVu
aXQgY3cgPSBjb250YWluaW5nQmxvY2sgPyBjb250YWluaW5nQmxvY2stPmNvbnRlbnRMb2dpY2Fs
V2lkdGgoKSA6IExheW91dFVuaXQoKTsKKyAgICBMYXlvdXRVbml0IGN3ID0gY29udGFpbmluZ0Js
b2NrID8gY29udGFpbmluZ0Jsb2NrLT5jb250ZW50TG9naWNhbFdpZHRoKCkgOiAwX2x1OwogCiAg
ICAgLy8gSWYgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUsIHdlIHdhbnQgdG8gaWdub3Jl
IGFsbCB3aGl0ZS1zcGFjZS4KICAgICAvLyBBbHNvIHN0cmlwIHNwYWNlcyBpZiB3ZSBwcmV2aW91
c2x5IGhhZCB0ZXh0IHRoYXQgZW5kZWQgaW4gYSB0cmFpbGluZyBzcGFjZS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAppbmRleCBhZjY4YmEwNTEzNzk0YTAxNjIw
MzJhMDExZDQ2YTlmYTk5NGJhMGVlLi40ZTQwYjExNGQ4NGUwZDJkZTQ3ZDcwYjE2OGYwNmEwMGE3
NWJjMWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBA
IC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJCbG9ja0Zsb3coRG9jdW1lbnQmLCBS
ZW5kZXJTdHlsZSYmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJCbG9ja0Zsb3coKTsKICAgICAgICAg
Ci0gICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQg
cGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVycmlkZTsKKyAgICB2b2lkIGxheW91dEJsb2NrKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDBfbHUp
IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBvdmVy
cmlkZTsKQEAgLTM5OCw3ICszOTgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBwdXNoVG9OZXh0
UGFnZVdpdGhNaW5pbXVtTG9naWNhbEhlaWdodChMYXlvdXRVbml0JiBhZGp1c3RtZW50LCBMYXlv
dXRVbml0IGxvZ2ljYWxPZmZzZXQsIExheW91dFVuaXQgbWluaW11bUxvZ2ljYWxIZWlnaHQpIGNv
bnN0OwogCiAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQgY2FuJ3QgZml0
IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29s
dW1uLgotICAgIExheW91dFVuaXQgYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94
JiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBMYXlvdXRVbml0IGJlZm9yZU1hcmdp
biA9IExheW91dFVuaXQoKSwgTGF5b3V0VW5pdCBhZnRlck1hcmdpbiA9IExheW91dFVuaXQoKSk7
CisgICAgTGF5b3V0VW5pdCBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gmIGNo
aWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQsIExheW91dFVuaXQgYmVmb3JlTWFyZ2luID0g
MF9sdSwgTGF5b3V0VW5pdCBhZnRlck1hcmdpbiA9IDBfbHUpOwogICAgIExheW91dFVuaXQgYWRq
dXN0QmxvY2tDaGlsZEZvclBhZ2luYXRpb24oTGF5b3V0VW5pdCBsb2dpY2FsVG9wQWZ0ZXJDbGVh
ciwgTGF5b3V0VW5pdCBlc3RpbWF0ZVdpdGhvdXRQYWdpbmF0aW9uLCBSZW5kZXJCb3gmIGNoaWxk
LCBib29sIGF0QmVmb3JlU2lkZU9mQmxvY2spOwogICAgIExheW91dFVuaXQgYXBwbHlCZWZvcmVC
cmVhayhSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQpOyAvLyBJZiB0
aGUgY2hpbGQgaGFzIGEgYmVmb3JlIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQg
c2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCiAgICAgTGF5b3V0VW5p
dCBhcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zm
c2V0LCBNYXJnaW5JbmZvJik7IC8vIElmIHRoZSBjaGlsZCBoYXMgYW4gYWZ0ZXIgYnJlYWssIHRo
ZW4gcmV0dXJuIGEgbmV3IG9mZnNldCB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0
IHBhZ2UvY29sdW1uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcAppbmRleCA4MDA1MjUwNGQ3NmYwYmFhYTU0NTZmMTFkNzlkNDA4NWE5
MzRjZTczLi5lMDNmN2IyY2M4ZjlkODJhMDE0MjViNjc3NGVkZWFhYTc0YzZlOTY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApA
QCAtMTYwOSw4ICsxNjA5LDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxpbmtUb0VuZExpbmVJ
Zk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgICAgICAgICAgdHJhaWxp
bmdGbG9hdHNMaW5lQm94LT5hbGlnbkJveGVzSW5CbG9ja0RpcmVjdGlvbihibG9ja0xvZ2ljYWxI
ZWlnaHQsIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpOwogICAgICAgICAg
ICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRMaW5lVG9wQm90dG9tUG9zaXRpb25zKGJsb2Nr
TG9naWNhbEhlaWdodCwgYmxvY2tMb2dpY2FsSGVpZ2h0LCBibG9ja0xvZ2ljYWxIZWlnaHQsIGJs
b2NrTG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNl
dFBhZ2luYXRlZExpbmVXaWR0aChhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KGJsb2Nr
TG9naWNhbEhlaWdodCkpOwotICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2dpY2FsTGF5b3V0T3Zl
cmZsb3coMCwgYmxvY2tMb2dpY2FsSGVpZ2h0LCAxLCBib3R0b21MYXlvdXRPdmVyZmxvdyAtIGJs
b2NrTG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxP
dmVyZmxvdygwLCBibG9ja0xvZ2ljYWxIZWlnaHQsIDEsIGJvdHRvbVZpc3VhbE92ZXJmbG93IC0g
YmxvY2tMb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbG9naWNhbExheW91
dE92ZXJmbG93KDBfbHUsIGJsb2NrTG9naWNhbEhlaWdodCwgMV9sdSwgYm90dG9tTGF5b3V0T3Zl
cmZsb3cgLSBibG9ja0xvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3coMF9sdSwgYmxvY2tMb2dpY2FsSGVpZ2h0LCAxX2x1LCBib3R0b21W
aXN1YWxPdmVyZmxvdyAtIGJsb2NrTG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICB0cmFpbGlu
Z0Zsb2F0c0xpbmVCb3gtPnNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhsb2dpY2FsTGF5b3V0
T3ZlcmZsb3csIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdywgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5s
aW5lVG9wKCksIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+bGluZUJvdHRvbSgpKTsKICAgICAgICAg
ICAgIGlmIChsYXlvdXRTdGF0ZS5mcmFnbWVudGVkRmxvdygpKQogICAgICAgICAgICAgICAgIHVw
ZGF0ZUZyYWdtZW50Rm9yTGluZSh0cmFpbGluZ0Zsb2F0c0xpbmVCb3gpOwpAQCAtMjA4MCw3ICsy
MDgwLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxk
cmVuKCkKICAgICAgICAgU2ltcGxlTGluZUxheW91dDo6Y29sbGVjdEZsb3dPdmVyZmxvdygqdGhp
cywgKmxheW91dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgTGF5b3V0VW5pdCBlbmRQ
YWRkaW5nID0gaGFzT3ZlcmZsb3dDbGlwKCkgPyBwYWRkaW5nRW5kKCkgOiBMYXlvdXRVbml0KCk7
CisgICAgTGF5b3V0VW5pdCBlbmRQYWRkaW5nID0gaGFzT3ZlcmZsb3dDbGlwKCkgPyBwYWRkaW5n
RW5kKCkgOiAwX2x1OwogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGZpbmQgYW5vdGhlciB3YXkgdG8g
ZG8gdGhpcywgc2luY2Ugc2Nyb2xsYmFycyBjb3VsZCBzaG93IHdoZW4gd2UgZG9uJ3Qgd2FudCB0
aGVtIHRvLgogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhZW5kUGFkZGluZyAmJiBlbGVt
ZW50KCkgJiYgZWxlbWVudCgpLT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiBzdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgZW5kUGFkZGluZyA9IDE7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDU4MmQ1YWYzODU0YzM1YzNhNjZiNWI0
MDM4MThmNjI0NDZiZmE1YWMuLmJmODhiZDUwZTlhMTdlM2Q3YTU2ZGJlODM4ZDJiNTA0M2RmMDgy
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xMTY1LDcgKzEx
NjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6YWRqdXN0Q29udGVudEJveExvZ2ljYWxIZWln
aHRGb3JCb3hTaXppbmcoc3RkOjpvcHRpb25hbDxMYQogICAgIExheW91dFVuaXQgcmVzdWx0ID0g
aGVpZ2h0LnZhbHVlKCk7CiAgICAgaWYgKHN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5n
OjpCb3JkZXJCb3gpCiAgICAgICAgIHJlc3VsdCAtPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhl
aWdodCgpOwotICAgIHJldHVybiBzdGQ6Om1heChMYXlvdXRVbml0KCksIHJlc3VsdCk7CisgICAg
cmV0dXJuIHN0ZDo6bWF4KDBfbHUsIHJlc3VsdCk7CiB9CiAKIC8vIEhpdCBUZXN0aW5nCkBAIC0x
ODAxLDI0ICsxODAxLDI0IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpjbGlwUmVjdChjb25zdCBM
YXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpCiAKICAgICBpZiAoIXN0
eWxlKCkuY2xpcExlZnQoKS5pc0F1dG8oKSkgewogICAgICAgICBMYXlvdXRVbml0IGMgPSB2YWx1
ZUZvckxlbmd0aChzdHlsZSgpLmNsaXBMZWZ0KCksIGJvcmRlckJveFJlY3Qud2lkdGgoKSk7Ci0g
ICAgICAgIGNsaXBSZWN0Lm1vdmUoYywgMCk7Ci0gICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KGMs
IDApOworICAgICAgICBjbGlwUmVjdC5tb3ZlKGMsIDBfbHUpOworICAgICAgICBjbGlwUmVjdC5j
b250cmFjdChjLCAwX2x1KTsKICAgICB9CiAKICAgICAvLyBXZSBkb24ndCB1c2UgdGhlIGZyYWdt
ZW50LXNwZWNpZmljIGJvcmRlciBib3gncyB3aWR0aCBhbmQgaGVpZ2h0IHNpbmNlIGNsaXAgb2Zm
c2V0cyBhcmUgKHN0dXBpZGx5KSBzcGVjaWZpZWQKICAgICAvLyBmcm9tIHRoZSBsZWZ0IGFuZCB0
b3AgZWRnZXMuIFRoZXJlZm9yZSBpdCdzIGJldHRlciB0byBhdm9pZCBjb25zdHJhaW5pbmcgdG8g
c21hbGxlciB3aWR0aHMgYW5kIGhlaWdodHMuCiAKICAgICBpZiAoIXN0eWxlKCkuY2xpcFJpZ2h0
KCkuaXNBdXRvKCkpCi0gICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KHdpZHRoKCkgLSB2YWx1ZUZv
ckxlbmd0aChzdHlsZSgpLmNsaXBSaWdodCgpLCB3aWR0aCgpKSwgMCk7CisgICAgICAgIGNsaXBS
ZWN0LmNvbnRyYWN0KHdpZHRoKCkgLSB2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmNsaXBSaWdodCgp
LCB3aWR0aCgpKSwgMF9sdSk7CiAKICAgICBpZiAoIXN0eWxlKCkuY2xpcFRvcCgpLmlzQXV0bygp
KSB7CiAgICAgICAgIExheW91dFVuaXQgYyA9IHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkuY2xpcFRv
cCgpLCBib3JkZXJCb3hSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgY2xpcFJlY3QubW92ZSgwLCBj
KTsKLSAgICAgICAgY2xpcFJlY3QuY29udHJhY3QoMCwgYyk7CisgICAgICAgIGNsaXBSZWN0Lm1v
dmUoMF9sdSwgYyk7CisgICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KDBfbHUsIGMpOwogICAgIH0K
IAogICAgIGlmICghc3R5bGUoKS5jbGlwQm90dG9tKCkuaXNBdXRvKCkpCi0gICAgICAgIGNsaXBS
ZWN0LmNvbnRyYWN0KDAsIGhlaWdodCgpIC0gdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5jbGlwQm90
dG9tKCksIGhlaWdodCgpKSk7CisgICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KDBfbHUsIGhlaWdo
dCgpIC0gdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5jbGlwQm90dG9tKCksIGhlaWdodCgpKSk7CiAK
ICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9CkBAIC0xODI4LDcgKzE4MjgsNyBAQCBMYXlvdXRVbml0
IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlvdXRVbml0IGNo
aWxkTWFyZ2luU3RhcgogICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjb250YWluaW5nQmxv
Y2tGcmFnbWVudCA9IG51bGxwdHI7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wUG9zaXRpb24g
PSBsb2dpY2FsVG9wKCk7CiAgICAgaWYgKGZyYWdtZW50KSB7Ci0gICAgICAgIExheW91dFVuaXQg
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZyYWdtZW50ID0gZnJhZ21lbnQgPyBmcmFnbWVudC0+bG9n
aWNhbFRvcEZvckZyYWdtZW50ZWRGbG93Q29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSgpIDogTGF5b3V0VW5pdCgpOworICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGcmFnbWVudCA9IGZyYWdtZW50ID8gZnJhZ21lbnQtPmxvZ2ljYWxUb3BG
b3JGcmFnbWVudGVkRmxvd0NvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UoKSA6IDBfbHU7CiAgICAgICAgIGxvZ2ljYWxUb3BQb3NpdGlvbiA9IHN0ZDo6bWF4KGxvZ2lj
YWxUb3BQb3NpdGlvbiwgbG9naWNhbFRvcFBvc2l0aW9uICsgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZyYWdtZW50KTsKICAgICAgICAgY29udGFpbmluZ0Jsb2NrRnJhZ21lbnQgPSBjYi5jbGFtcFRv
U3RhcnRBbmRFbmRGcmFnbWVudHMoZnJhZ21lbnQpOwogICAgIH0KQEAgLTE4NzMsNyArMTg3Myw3
IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JD
b250ZW50KCkgY29uc3QKIAogICAgIGlmIChSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxv
Y2soKSkKICAgICAgICAgcmV0dXJuIGNiLT5hdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKLSAgICBy
ZXR1cm4gTGF5b3V0VW5pdCgpOworICAgIHJldHVybiAwX2x1OwogfQogCiBMYXlvdXRVbml0IFJl
bmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvckNvbnRlbnQoQXZhaWxhYmxl
TG9naWNhbEhlaWdodFR5cGUgaGVpZ2h0VHlwZSkgY29uc3QKQEAgLTE4ODUsNyArMTg4NSw3IEBA
IExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yQ29u
dGVudChBdmFpbGFibGVMb2dpY2FsSGVpCiAKICAgICBpZiAoUmVuZGVyQmxvY2sqIGNiID0gY29u
dGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgIHJldHVybiBjYi0+YXZhaWxhYmxlTG9naWNhbEhlaWdo
dChoZWlnaHRUeXBlKTsKLSAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgIHJldHVybiAwX2x1
OwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRo
Rm9yQ29udGVudEluRnJhZ21lbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KSBj
b25zdApAQCAtMTkxMCw3ICsxOTEwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5p
bmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluRnJhZ21lbnQoUmVuZGVyRnJhZ21lbnQKICAgICBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogY29udGFpbmluZ0Jsb2NrRnJhZ21lbnQgPSBudWxscHRy
OwogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvc2l0aW9uID0gbG9naWNhbFRvcCgpOwogICAg
IGlmIChmcmFnbWVudCkgewotICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGcmFnbWVudCA9IGZyYWdtZW50ID8gZnJhZ21lbnQtPmxvZ2ljYWxUb3BGb3JGcmFnbWVudGVk
Rmxvd0NvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSA6IExheW91
dFVuaXQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRnJhZ21l
bnQgPSBmcmFnbWVudCA/IGZyYWdtZW50LT5sb2dpY2FsVG9wRm9yRnJhZ21lbnRlZEZsb3dDb250
ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgOiAwX2x1OwogICAgICAg
ICBsb2dpY2FsVG9wUG9zaXRpb24gPSBzdGQ6Om1heChsb2dpY2FsVG9wUG9zaXRpb24sIGxvZ2lj
YWxUb3BQb3NpdGlvbiArIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGcmFnbWVudCk7CiAgICAgICAg
IGNvbnRhaW5pbmdCbG9ja0ZyYWdtZW50ID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZEZyYWdtZW50
cyhmcmFnbWVudCk7CiAgICAgfQpAQCAtMjc5OSw3ICsyNzk5LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0V2l0aG91dExheW91dCgpIGNvbnN0CiAgICAgLy8g
RklYTUU6OiBXZSBzaG91bGQgcHJvYmFibHkgcmV0dXJuIHNvbWV0aGluZyBvdGhlciB0aGFuIGp1
c3QKICAgICAvLyBib3JkZXIgKyBwYWRkaW5nLCBidXQgZm9yIG5vdyB3ZSBoYXZlIG5vIGdvb2Qg
d2F5IHRvIGRvIGFueXRoaW5nIGVsc2UKICAgICAvLyB3aXRob3V0IGxheW91dCwgc28gd2UganVz
dCB1c2UgdGhhdC4KLSAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMgY29tcHV0ZWRWYWx1
ZXMgPSBjb21wdXRlTG9naWNhbEhlaWdodChib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgp
LCBMYXlvdXRVbml0KCkpOworICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRl
ZFZhbHVlcyA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVp
Z2h0KCksIDBfbHUpOwogICAgIHJldHVybiBjb21wdXRlZFZhbHVlcy5tX2V4dGVudDsKIH0KIApA
QCAtMjgzMSw3ICsyODMxLDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCb3g6
OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsQ29udGVudEhlaWdodFVzaW5nKEwKICAgICBpZiAobG9n
aWNhbEhlaWdodExlbmd0aC5pc0ZpbGxBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuIGNvbnRh
aW5pbmdCbG9jaygpLT5hdmFpbGFibGVMb2dpY2FsSGVpZ2h0KEV4Y2x1ZGVNYXJnaW5Cb3JkZXJQ
YWRkaW5nKSAtIGJvcmRlckFuZFBhZGRpbmc7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIExheW91dFVuaXQoMCk7CisgICAgcmV0dXJuIDBfbHU7CiB9CiAKIHN0ZDo6b3B0
aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyQm94Ojpjb21wdXRlQ29udGVudEFuZFNjcm9sbGJhckxv
Z2ljYWxIZWlnaHRVc2luZyhTaXplVHlwZSBoZWlnaHRUeXBlLCBjb25zdCBMZW5ndGgmIGhlaWdo
dCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBpbnRyaW5zaWNDb250ZW50SGVpZ2h0KSBjb25z
dApAQCAtMjkzOSw3ICsyOTM5LDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJC
b3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgKICAgICBpZiAo
IWF2YWlsYWJsZUhlaWdodCkKICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUhlaWdodDsKIAotICAg
IExheW91dFVuaXQgcmVzdWx0ID0gdmFsdWVGb3JMZW5ndGgoaGVpZ2h0LCBhdmFpbGFibGVIZWln
aHQudmFsdWUoKSAtIHJvb3RNYXJnaW5Cb3JkZXJQYWRkaW5nSGVpZ2h0ICsgKGlzVGFibGUoKSAm
JiBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSA/IGNiLT5wYWRkaW5nQmVmb3JlKCkgKyBjYi0+cGFk
ZGluZ0FmdGVyKCkgOiBMYXlvdXRVbml0KCkpKTsKKyAgICBMYXlvdXRVbml0IHJlc3VsdCA9IHZh
bHVlRm9yTGVuZ3RoKGhlaWdodCwgYXZhaWxhYmxlSGVpZ2h0LnZhbHVlKCkgLSByb290TWFyZ2lu
Qm9yZGVyUGFkZGluZ0hlaWdodCArIChpc1RhYmxlKCkgJiYgaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgPyBjYi0+cGFkZGluZ0JlZm9yZSgpICsgY2ItPnBhZGRpbmdBZnRlcigpIDogMF9sdSkpOwog
ICAgIAogICAgIC8vIHxvdmVycmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0fCBpcyB0aGUgbWF4aW11
bSBoZWlnaHQgbWFkZSBhdmFpbGFibGUgYnkgdGhlCiAgICAgLy8gY2VsbCB0byBpdHMgcGVyY2Vu
dCBoZWlnaHQgY2hpbGRyZW4gd2hlbiB3ZSBkZWNpZGUgdGhleSBjYW4gZGV0ZXJtaW5lIHRoZQpA
QCAtMjk1MCw3ICsyOTUwLDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCb3g6
OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgKICAgICBib29sIHN1
YnRyYWN0Qm9yZGVyQW5kUGFkZGluZyA9IGlzVGFibGUoKSB8fCAoaXM8UmVuZGVyVGFibGVDZWxs
PigqY2IpICYmICFza2lwcGVkQXV0b0hlaWdodENvbnRhaW5pbmdCbG9jayAmJiBjYi0+aGFzT3Zl
cnJpZGVDb250ZW50TG9naWNhbEhlaWdodCgpKTsKICAgICBpZiAoc3VidHJhY3RCb3JkZXJBbmRQ
YWRkaW5nKSB7CiAgICAgICAgIHJlc3VsdCAtPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdo
dCgpOwotICAgICAgICByZXR1cm4gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCByZXN1bHQpOworICAg
ICAgICByZXR1cm4gc3RkOjptYXgoMF9sdSwgcmVzdWx0KTsKICAgICB9CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTMwMDEsNyArMzAwMSw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21w
dXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhTaXplVHlwZSB3aWR0aFR5cGUsIExlbmd0CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhVc2luZyhs
b2dpY2FsV2lkdGgsIGN3LCBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkpIC0gYm9yZGVy
QW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgaWYgKGN3ID4gMCB8fCAoIWN3
ICYmIChjb250YWluZXJMb2dpY2FsV2lkdGguaXNGaXhlZCgpIHx8IGNvbnRhaW5lckxvZ2ljYWxX
aWR0aC5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBh
ZGp1c3RDb250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKG1pbmltdW1WYWx1ZUZvckxl
bmd0aChsb2dpY2FsV2lkdGgsIGN3KSk7Ci0gICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgp
OworICAgICAgICAgICAgcmV0dXJuIDBfbHU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBJbnRy
aW5zaWM6CiAgICAgICAgIGNhc2UgTWluSW50cmluc2ljOgpAQCAtNDMzMCw3ICs0MzMwLDcgQEAg
TGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCB1bnNp
Z25lZCBjYXJldE9mZnNldCwgTGF5b3UKICAgICBib29sIGx0ciA9IGJveCA/IGJveC0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpIDogc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CiAK
ICAgICBpZiAoKCFjYXJldE9mZnNldCkgXiBsdHIpCi0gICAgICAgIHJlY3QubW92ZShMYXlvdXRT
aXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwKSk7CisgICAgICAgIHJlY3QubW92ZShMYXlvdXRT
aXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwX2x1KSk7CiAKICAgICBpZiAoYm94KSB7CiAgICAg
ICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBib3gtPnJvb3QoKTsKQEAgLTQ0MDYs
OSArNDQwNiw5IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQo
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBjb25zdCBSZW5kCiAgICAgICAgICAgICB8fCByZW5k
ZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSByZW5kZXJlci5ib3Jk
ZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKSArIChpczxSZW5kZXJUYWJsZVJvdz4oKnRo
aXMpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXIueSgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCB0
b3AgPSByZW5kZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKSArIChpczxS
ZW5kZXJUYWJsZVJvdz4oKnRoaXMpID8gMF9sdSA6IHJlbmRlcmVyLnkoKSk7CiAgICAgICAgIExh
eW91dFVuaXQgYm90dG9tID0gdG9wICsgcmVuZGVyZXIuY29udGVudEhlaWdodCgpOwotICAgICAg
ICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci5wYWRk
aW5nTGVmdCgpICsgKGlzPFJlbmRlclRhYmxlUm93PigqdGhpcykgPyBMYXlvdXRVbml0KCkgOiBy
ZW5kZXJlci54KCkpOworICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci5ib3JkZXJM
ZWZ0KCkgKyByZW5kZXJlci5wYWRkaW5nTGVmdCgpICsgKGlzPFJlbmRlclRhYmxlUm93PigqdGhp
cykgPyAwX2x1IDogcmVuZGVyZXIueCgpKTsKICAgICAgICAgTGF5b3V0VW5pdCByaWdodCA9IGxl
ZnQgKyByZW5kZXJlci5jb250ZW50V2lkdGgoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwb2lu
dC54KCkgPD0gcmlnaHQgJiYgcG9pbnQueCgpID49IGxlZnQgJiYgcG9pbnQueSgpIDw9IHRvcCAm
JiBwb2ludC55KCkgPj0gYm90dG9tKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCBmNTRiYmZlMWM0NTFhZGE5OGY2NTg1ZmIw
MWY1NzBjNDViODdhOTQ5Li45NjA1MmVhMWIzYWFmNzkwZGIzYzlkM2QzZDQ5YjA0NzliNzg5Y2Uw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKQEAgLTQwMywxMSArNDAzLDExIEBAIExheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSBjb25zdAogICAgIC8vIGNhbGwgYXZhaWxhYmxl
V2lkdGggb24gb3VyIGNvbnRhaW5pbmcgYmxvY2suCiAgICAgaWYgKCFzdHlsZSgpLmxlZnQoKS5p
c0F1dG8oKSkgewogICAgICAgICBpZiAoIXN0eWxlKCkucmlnaHQoKS5pc0F1dG8oKSAmJiAhY29u
dGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAg
ICAgICAgb2Zmc2V0LnNldFdpZHRoKC12YWx1ZUZvckxlbmd0aChzdHlsZSgpLnJpZ2h0KCksICFz
dHlsZSgpLnJpZ2h0KCkuaXNGaXhlZCgpID8gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZVdp
ZHRoKCkgOiBMYXlvdXRVbml0KCkpKTsKKyAgICAgICAgICAgIG9mZnNldC5zZXRXaWR0aCgtdmFs
dWVGb3JMZW5ndGgoc3R5bGUoKS5yaWdodCgpLCAhc3R5bGUoKS5yaWdodCgpLmlzRml4ZWQoKSA/
IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVXaWR0aCgpIDogMF9sdSkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkubGVm
dCgpLCAhc3R5bGUoKS5sZWZ0KCkuaXNGaXhlZCgpID8gY29udGFpbmluZ0Jsb2NrKCktPmF2YWls
YWJsZVdpZHRoKCkgOiBMYXlvdXRVbml0KCkpLCAwKTsKKyAgICAgICAgICAgIG9mZnNldC5leHBh
bmQodmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5sZWZ0KCksICFzdHlsZSgpLmxlZnQoKS5pc0ZpeGVk
KCkgPyBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlV2lkdGgoKSA6IDBfbHUpLCAwX2x1KTsK
ICAgICB9IGVsc2UgaWYgKCFzdHlsZSgpLnJpZ2h0KCkuaXNBdXRvKCkpIHsKLSAgICAgICAgb2Zm
c2V0LmV4cGFuZCgtdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5yaWdodCgpLCAhc3R5bGUoKS5yaWdo
dCgpLmlzRml4ZWQoKSA/IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVXaWR0aCgpIDogTGF5
b3V0VW5pdCgpKSwgMCk7CisgICAgICAgIG9mZnNldC5leHBhbmQoLXZhbHVlRm9yTGVuZ3RoKHN0
eWxlKCkucmlnaHQoKSwgIXN0eWxlKCkucmlnaHQoKS5pc0ZpeGVkKCkgPyBjb250YWluaW5nQmxv
Y2soKS0+YXZhaWxhYmxlV2lkdGgoKSA6IDBfbHUpLCAwX2x1KTsKICAgICB9CiAKICAgICAvLyBJ
ZiB0aGUgY29udGFpbmluZyBibG9jayBvZiBhIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50
IGRvZXMgbm90CkBAIC00MjAsMTMgKzQyMCwxMyBAQCBMYXlvdXRTaXplIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkgY29uc3QKICAgICAgICAgJiYgKCFzdHls
ZSgpLnRvcCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpCiAgICAgICAgICAgICB8fCAhY29udGFp
bmluZ0Jsb2NrKCktPmhhc0F1dG9IZWlnaHRPckNvbnRhaW5pbmdCbG9ja1dpdGhBdXRvSGVpZ2h0
KCkKICAgICAgICAgICAgIHx8IGNvbnRhaW5pbmdCbG9jaygpLT5zdHJldGNoZXNUb1ZpZXdwb3J0
KCkpKQotICAgICAgICBvZmZzZXQuZXhwYW5kKDAsIHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkudG9w
KCksICFzdHlsZSgpLnRvcCgpLmlzRml4ZWQoKSA/IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFi
bGVIZWlnaHQoKSA6IExheW91dFVuaXQoKSkpOworICAgICAgICBvZmZzZXQuZXhwYW5kKDBfbHUs
IHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkudG9wKCksICFzdHlsZSgpLnRvcCgpLmlzRml4ZWQoKSA/
IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVIZWlnaHQoKSA6IDBfbHUpKTsKIAogICAgIGVs
c2UgaWYgKCFzdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygpCiAgICAgICAgICYmICghc3R5bGUoKS5i
b3R0b20oKS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKQogICAgICAgICAgICAgfHwgIWNvbnRhaW5p
bmdCbG9jaygpLT5oYXNBdXRvSGVpZ2h0T3JDb250YWluaW5nQmxvY2tXaXRoQXV0b0hlaWdodCgp
CiAgICAgICAgICAgICB8fCBjb250YWluaW5nQmxvY2soKS0+c3RyZXRjaGVzVG9WaWV3cG9ydCgp
KSkKLSAgICAgICAgb2Zmc2V0LmV4cGFuZCgwLCAtdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5ib3R0
b20oKSwgIXN0eWxlKCkuYm90dG9tKCkuaXNGaXhlZCgpID8gY29udGFpbmluZ0Jsb2NrKCktPmF2
YWlsYWJsZUhlaWdodCgpIDogTGF5b3V0VW5pdCgpKSk7CisgICAgICAgIG9mZnNldC5leHBhbmQo
MF9sdSwgLXZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkuYm90dG9tKCksICFzdHlsZSgpLmJvdHRvbSgp
LmlzRml4ZWQoKSA/IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVIZWlnaHQoKSA6IDBfbHUp
KTsKIAogICAgIHJldHVybiBvZmZzZXQ7CiB9CkBAIC02MzYsNyArNjM2LDcgQEAgUm91bmRlZFJl
Y3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmdldEJhY2tncm91bmRSb3VuZGVkUmVjdChjb25zdCBM
YXlvdXRSZWN0JiBib3IKIHsKICAgICBSb3VuZGVkUmVjdCBib3JkZXIgPSBzdHlsZSgpLmdldFJv
dW5kZWRCb3JkZXJGb3IoYm9yZGVyUmVjdCwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVk
ZUxvZ2ljYWxSaWdodEVkZ2UpOwogICAgIGlmIChib3ggJiYgKGJveC0+bmV4dExpbmVCb3goKSB8
fCBib3gtPnByZXZMaW5lQm94KCkpKSB7Ci0gICAgICAgIFJvdW5kZWRSZWN0IHNlZ21lbnRCb3Jk
ZXIgPSBzdHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IoTGF5b3V0UmVjdCgwLCAwLCBpbmxpbmVC
b3hXaWR0aCwgaW5saW5lQm94SGVpZ2h0KSwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVk
ZUxvZ2ljYWxSaWdodEVkZ2UpOworICAgICAgICBSb3VuZGVkUmVjdCBzZWdtZW50Qm9yZGVyID0g
c3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKExheW91dFJlY3QoMF9sdSwgMF9sdSwgaW5saW5l
Qm94V2lkdGgsIGlubGluZUJveEhlaWdodCksIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGluY2x1
ZGVMb2dpY2FsUmlnaHRFZGdlKTsKICAgICAgICAgYm9yZGVyLnNldFJhZGlpKHNlZ21lbnRCb3Jk
ZXIucmFkaWkoKSk7CiAgICAgfQogICAgIHJldHVybiBib3JkZXI7CkBAIC02NzgsOCArNjc4LDgg
QEAgc3RhdGljIExheW91dFJlY3Qgc2hyaW5rUmVjdEJ5T25lRGV2aWNlUGl4ZWwoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb24KIHsKICAgICBMYXlvdXRSZWN0IHNocnVua1JlY3Qg
PSByZWN0OwogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBjb250ZXh0LmdldENUTSgp
OwotICAgIHNocnVua1JlY3QuaW5mbGF0ZVgoLWNlaWxUb0RldmljZVBpeGVsKExheW91dFVuaXQ6
OmZyb21QaXhlbCgxKSAvIHRyYW5zZm9ybS54U2NhbGUoKSwgZGV2aWNlUGl4ZWxSYXRpbykpOwot
ICAgIHNocnVua1JlY3QuaW5mbGF0ZVkoLWNlaWxUb0RldmljZVBpeGVsKExheW91dFVuaXQ6OmZy
b21QaXhlbCgxKSAvIHRyYW5zZm9ybS55U2NhbGUoKSwgZGV2aWNlUGl4ZWxSYXRpbykpOworICAg
IHNocnVua1JlY3QuaW5mbGF0ZVgoLWNlaWxUb0RldmljZVBpeGVsKDFfbHUgLyB0cmFuc2Zvcm0u
eFNjYWxlKCksIGRldmljZVBpeGVsUmF0aW8pKTsKKyAgICBzaHJ1bmtSZWN0LmluZmxhdGVZKC1j
ZWlsVG9EZXZpY2VQaXhlbCgxX2x1IC8gdHJhbnNmb3JtLnlTY2FsZSgpLCBkZXZpY2VQaXhlbFJh
dGlvKSk7CiAgICAgcmV0dXJuIHNocnVua1JlY3Q7CiB9CiAKQEAgLTg0OCwxMCArODQ4LDEwIEBA
IHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgICAgIGNsaXBSb3VuZGVkSW5uZXJSZWN0KGNv
bnRleHQsIHBpeGVsU25hcHBlZFJlY3QsIGJvcmRlci5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZv
clBhaW50aW5nKGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgfQogICAgIAotICAgIExheW91dFVu
aXQgYkxlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBib3JkZXJMZWZ0KCkgOiBMYXlvdXRVbml0Ojpm
cm9tUGl4ZWwoMCk7Ci0gICAgTGF5b3V0VW5pdCBiUmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdlID8g
Ym9yZGVyUmlnaHQoKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKLSAgICBMYXlvdXRVbml0
IHBMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gcGFkZGluZ0xlZnQoKSA6IExheW91dFVuaXQoKTsK
LSAgICBMYXlvdXRVbml0IHBSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBwYWRkaW5nUmlnaHQo
KSA6IExheW91dFVuaXQoKTsKKyAgICBMYXlvdXRVbml0IGJMZWZ0ID0gaW5jbHVkZUxlZnRFZGdl
ID8gYm9yZGVyTGVmdCgpIDogMF9sdTsKKyAgICBMYXlvdXRVbml0IGJSaWdodCA9IGluY2x1ZGVS
aWdodEVkZ2UgPyBib3JkZXJSaWdodCgpIDogMF9sdTsKKyAgICBMYXlvdXRVbml0IHBMZWZ0ID0g
aW5jbHVkZUxlZnRFZGdlID8gcGFkZGluZ0xlZnQoKSA6IDBfbHU7CisgICAgTGF5b3V0VW5pdCBw
UmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdlID8gcGFkZGluZ1JpZ2h0KCkgOiAwX2x1OwogCiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBjbGlwV2l0aFNjcm9sbGluZ1N0YXRlU2F2ZXIoY29u
dGV4dCwgY2xpcHBlZFdpdGhMb2NhbFNjcm9sbGluZyk7CiAgICAgTGF5b3V0UmVjdCBzY3JvbGxl
ZFBhaW50UmVjdCA9IHJlY3Q7CkBAIC04NzQsMTAgKzg3NCwxMCBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjbwogICAgICAgICAvLyBDbGlwIHRvIHRoZSBwYWRkaW5nIG9yIGNvbnRlbnQgYm94ZXMg
YXMgbmVjZXNzYXJ5LgogICAgICAgICBpZiAoIWNsaXBUb0JvcmRlclJhZGl1cykgewogICAgICAg
ICAgICAgYm9vbCBpbmNsdWRlUGFkZGluZyA9IGJnTGF5ZXIuY2xpcCgpID09IEZpbGxCb3g6OkNv
bnRlbnQ7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gTGF5b3V0UmVjdChzY3Jv
bGxlZFBhaW50UmVjdC54KCkgKyBiTGVmdCArIChpbmNsdWRlUGFkZGluZyA/IHBMZWZ0IDogTGF5
b3V0VW5pdCgpKSwKLSAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC55KCkgKyBib3Jk
ZXJUb3AoKSArIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSA6IExheW91dFVuaXQoKSks
Ci0gICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJMZWZ0IC0gYlJp
Z2h0IC0gKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgKyBwUmlnaHQgOiBMYXlvdXRVbml0KCkpLAot
ICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LmhlaWdodCgpIC0gYm9yZGVyVG9wKCkg
LSBib3JkZXJCb3R0b20oKSAtIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSArIHBhZGRp
bmdCb3R0b20oKSA6IExheW91dFVuaXQoKSkpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBjbGlw
UmVjdCA9IExheW91dFJlY3Qoc2Nyb2xsZWRQYWludFJlY3QueCgpICsgYkxlZnQgKyAoaW5jbHVk
ZVBhZGRpbmcgPyBwTGVmdCA6IDBfbHUpLAorICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRS
ZWN0LnkoKSArIGJvcmRlclRvcCgpICsgKGluY2x1ZGVQYWRkaW5nID8gcGFkZGluZ1RvcCgpIDog
MF9sdSksCisgICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJMZWZ0
IC0gYlJpZ2h0IC0gKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgKyBwUmlnaHQgOiAwX2x1KSwKKyAg
ICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5oZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0g
Ym9yZGVyQm90dG9tKCkgLSAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5n
Qm90dG9tKCkgOiAwX2x1KSk7CiAgICAgICAgICAgICBiYWNrZ3JvdW5kQ2xpcFN0YXRlU2F2ZXIu
c2F2ZSgpOwogICAgICAgICAgICAgY29udGV4dC5jbGlwKGNsaXBSZWN0KTsKICAgICAgICAgfQpA
QCAtMTM1Miw3ICsxMzUyLDcgQEAgQmFja2dyb3VuZEltYWdlR2VvbWV0cnkgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGMKICAgICBpZiAoYmFj
a2dyb3VuZFJlcGVhdFggPT0gRmlsbFJlcGVhdDo6Tm9SZXBlYXQpIHsKICAgICAgICAgTGF5b3V0
VW5pdCB4T2Zmc2V0ID0gbGVmdCArIGNvbXB1dGVkWFBvc2l0aW9uOwogICAgICAgICBpZiAoeE9m
ZnNldCA+IDApCi0gICAgICAgICAgICBkZXN0aW5hdGlvblJlY3QubW92ZSh4T2Zmc2V0LCAwKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5tb3ZlKHhPZmZzZXQsIDBfbHUpOwogICAgICAg
ICB4T2Zmc2V0ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oeE9mZnNldCwgMCk7CiAgICAgICAgIHBo
YXNlLnNldFdpZHRoKC14T2Zmc2V0KTsKICAgICAgICAgZGVzdGluYXRpb25SZWN0LnNldFdpZHRo
KHRpbGVTaXplLndpZHRoKCkgKyB4T2Zmc2V0KTsKQEAgLTEzNzYsNyArMTM3Niw3IEBAIEJhY2tn
cm91bmRJbWFnZUdlb21ldHJ5IFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrZ3Jv
dW5kSW1hZ2VHZW9tZXRyeShjCiAgICAgaWYgKGJhY2tncm91bmRSZXBlYXRZID09IEZpbGxSZXBl
YXQ6Ok5vUmVwZWF0KSB7CiAgICAgICAgIExheW91dFVuaXQgeU9mZnNldCA9IHRvcCArIGNvbXB1
dGVkWVBvc2l0aW9uOwogICAgICAgICBpZiAoeU9mZnNldCA+IDApCi0gICAgICAgICAgICBkZXN0
aW5hdGlvblJlY3QubW92ZSgwLCB5T2Zmc2V0KTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uUmVj
dC5tb3ZlKDBfbHUsIHlPZmZzZXQpOwogICAgICAgICB5T2Zmc2V0ID0gc3RkOjptaW48TGF5b3V0
VW5pdD4oeU9mZnNldCwgMCk7CiAgICAgICAgIHBoYXNlLnNldEhlaWdodCgteU9mZnNldCk7CiAg
ICAgICAgIGRlc3RpbmF0aW9uUmVjdC5zZXRIZWlnaHQodGlsZVNpemUuaGVpZ2h0KCkgKyB5T2Zm
c2V0KTsKQEAgLTI0MjEsNyArMjQyMSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAg
ICAgICAgICAgICAgLy8gd2hlbiBwYWludGluZyB0aGUgc2hhZG93LiBPbiB0aGUgb3RoZXIgaGFu
ZCwgaXQgaW50cm9kdWNlcyBzdWJwaXhlbCBnYXBzIGFsb25nIHRoZQogICAgICAgICAgICAgICAg
IC8vIGNvcm5lcnMuIFRob3NlIGFyZSBhdm9pZGVkIGJ5IGluc2V0dGluZyB0aGUgY2xpcHBpbmcg
cGF0aCBieSBvbmUgcGl4ZWwuCiAgICAgICAgICAgICAgICAgaWYgKGhhc09wYXF1ZUJhY2tncm91
bmQpCi0gICAgICAgICAgICAgICAgICAgIHJlY3RUb0NsaXBPdXQuaW5mbGF0ZVdpdGhSYWRpaShM
YXlvdXRVbml0Ojpmcm9tUGl4ZWwoLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjdFRvQ2xp
cE91dC5pbmZsYXRlV2l0aFJhZGlpKC0xLjBmKTsKIAogICAgICAgICAgICAgICAgIGlmICghcmVj
dFRvQ2xpcE91dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY2xpcE91
dFJvdW5kZWRSZWN0KHJlY3RUb0NsaXBPdXQpOwpAQCAtMjQ0Nyw3ICsyNDQ3LDcgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90
IGNsZWFyIGlmIHRoaXMgY2hlY2sgaXMgcmlnaHQuIFdoYXQgYWJvdXQgaW50ZWdyYWwgc2NhbGUg
ZmFjdG9ycz8KICAgICAgICAgICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9
IGNvbnRleHQuZ2V0Q1RNKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0uYSgp
ICE9IDEgfHwgKHRyYW5zZm9ybS5kKCkgIT0gMSAmJiB0cmFuc2Zvcm0uZCgpICE9IC0xKSB8fCB0
cmFuc2Zvcm0uYigpIHx8IHRyYW5zZm9ybS5jKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZWN0VG9DbGlwT3V0LmluZmxhdGUoTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKC0xKS50b0Zsb2F0KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmVjdFRvQ2xpcE91dC5pbmZsYXRlKC0xLjBmKTsK
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIXJlY3RUb0NsaXBPdXQu
aXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRl
cHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAppbmRleCBiZmU5OTM1OWYzYTk2ZGM2OWI0ZGViYTEy
MTI2Zjg1NTA0MGY1NjIwLi4zNDgzY2JhMmI0ZmZmNTk0MzkyZDE0YmE5MDAyYjcwMjUxZjY5NzJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94LmNwcApAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsQm94KGJvb2wgcmVsYXlvdXRDaGlsZHJl
bikKICAgICAgICAgLy8gT3VyIGZpcnN0IHBhc3MgaXMgZG9uZSB3aXRob3V0IGZsZXhpbmcuICBX
ZSBzaW1wbHkgbGF5IHRoZSBjaGlsZHJlbgogICAgICAgICAvLyBvdXQgd2l0aGluIHRoZSBib3gu
ICBXZSBoYXZlIHRvIGRvIGEgbGF5b3V0IGZpcnN0IGluIG9yZGVyIHRvIGRldGVybWluZQogICAg
ICAgICAvLyBvdXIgYm94J3MgaW50cmluc2ljIGhlaWdodC4KLSAgICAgICAgTGF5b3V0VW5pdCBt
YXhBc2NlbnQgPSAwLCBtYXhEZXNjZW50ID0gMDsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhBc2Nl
bnQsIG1heERlc2NlbnQ7CiAgICAgICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGl0ZXJhdG9y
LmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICAgICAg
aWYgKHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVl
ZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKQEAgLTY1MCw3ICs2NTAsNyBAQCB2b2lkIFJlbmRlckRl
cHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hp
bGRyZW4pCiAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ1NwYWNlIC09IChyZW1haW5pbmdT
cGFjZS90b3RhbENoaWxkcmVuKTsKICAgICAgICAgICAgICAgICAgICAgLS10b3RhbENoaWxkcmVu
OwogCi0gICAgICAgICAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxkLT5sb2NhdGlv
bigpICsgTGF5b3V0U2l6ZShvZmZzZXQsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgcGxhY2VD
aGlsZChjaGlsZCwgY2hpbGQtPmxvY2F0aW9uKCkgKyBMYXlvdXRTaXplKG9mZnNldCwgMF9sdSkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAg
LTY2Miw3ICs2NjIsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0
SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAgICAgICAgaWYg
KGNoaWxkRG9lc05vdEFmZmVjdFdpZHRoT3JGbGV4aW5nKGNoaWxkKSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGls
ZC0+bG9jYXRpb24oKSArIExheW91dFNpemUob2Zmc2V0LCAwKSk7CisgICAgICAgICAgICAgICAg
cGxhY2VDaGlsZChjaGlsZCwgY2hpbGQtPmxvY2F0aW9uKCkgKyBMYXlvdXRTaXplKG9mZnNldCwg
MF9sdSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtOTA2LDcgKzkwNiw3
IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJveChi
b29sIHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSByZW1h
aW5pbmdTcGFjZS90b3RhbENoaWxkcmVuOwogICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdT
cGFjZSAtPSAocmVtYWluaW5nU3BhY2UvdG90YWxDaGlsZHJlbik7CiAgICAgICAgICAgICAgICAg
ICAgIC0tdG90YWxDaGlsZHJlbjsKLSAgICAgICAgICAgICAgICAgICAgcGxhY2VDaGlsZChjaGls
ZCwgY2hpbGQtPmxvY2F0aW9uKCkgKyBMYXlvdXRTaXplKDAsIG9mZnNldCkpOworICAgICAgICAg
ICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZC0+bG9jYXRpb24oKSArIExheW91dFNp
emUoMF9sdSwgb2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgewpAQCAtOTE3LDcgKzkxNyw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAg
ICAgICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBpdGVyYXRvci5maXJzdCgpOyBjaGlsZDsg
Y2hpbGQgPSBpdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGREb2Vz
Tm90QWZmZWN0V2lkdGhPckZsZXhpbmcoY2hpbGQpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZC0+bG9jYXRpb24o
KSArIExheW91dFNpemUoMCwgb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgcGxhY2VDaGlsZChj
aGlsZCwgY2hpbGQtPmxvY2F0aW9uKCkgKyBMYXlvdXRTaXplKDBfbHUsIG9mZnNldCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oCmluZGV4IDQ4MmQ1ZjBmMjU1
NzcwYTUwZGY3NWRhMjZmNTFkMTNkNWU0YzJiMjYuLjkwMTNhNDZjZGQyODk0NjZjZTc4YmMxY2Qx
ZDVhZjk0YzA4ZjkyMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJEZXByZWNhdGVkRmxleGlibGVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJT
dHlsZSYgbmV3U3R5bGUpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJl
bGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUhlaWdodCA9IDApIG92ZXJyaWRlOworICAg
IHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VI
ZWlnaHQgPSAwX2x1KSBvdmVycmlkZTsKICAgICB2b2lkIGxheW91dEhvcml6b250YWxCb3goYm9v
bCByZWxheW91dENoaWxkcmVuKTsKICAgICB2b2lkIGxheW91dFZlcnRpY2FsQm94KGJvb2wgcmVs
YXlvdXRDaGlsZHJlbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmNwcAppbmRleCAwMWYzODdhOTdjNjZmNGRhMGZhMmI3NjExMzk3YjgxMzUwMzI5Y2FkLi4xZGI1
NmMxN2VkNmUyOGJhNmE0NDA4NGRlNDNlYzk3YTU4ZWViYjdjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCkBAIC0xMTM0LDggKzExMzQsOCBAQCBib29sIFJl
bmRlckVsZW1lbnQ6OnJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIHJlcAogICAgICAgICBMYXlvdXRVbml0IHNoYWRvd0xlZnQ7CiAgICAgICAg
IExheW91dFVuaXQgc2hhZG93UmlnaHQ7CiAgICAgICAgIHN0eWxlKCkuZ2V0Qm94U2hhZG93SG9y
aXpvbnRhbEV4dGVudChzaGFkb3dMZWZ0LCBzaGFkb3dSaWdodCk7Ci0gICAgICAgIExheW91dFVu
aXQgYm9yZGVyUmlnaHQgPSBpczxSZW5kZXJCb3g+KCp0aGlzKSA/IGRvd25jYXN0PFJlbmRlckJv
eD4oKnRoaXMpLmJvcmRlclJpZ2h0KCkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCk7Ci0gICAg
ICAgIExheW91dFVuaXQgYm94V2lkdGggPSBpczxSZW5kZXJCb3g+KCp0aGlzKSA/IGRvd25jYXN0
PFJlbmRlckJveD4oKnRoaXMpLndpZHRoKCkgOiBMYXlvdXRVbml0KCk7CisgICAgICAgIExheW91
dFVuaXQgYm9yZGVyUmlnaHQgPSBpczxSZW5kZXJCb3g+KCp0aGlzKSA/IGRvd25jYXN0PFJlbmRl
ckJveD4oKnRoaXMpLmJvcmRlclJpZ2h0KCkgOiAwX2x1OworICAgICAgICBMYXlvdXRVbml0IGJv
eFdpZHRoID0gaXM8UmVuZGVyQm94PigqdGhpcykgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCp0aGlz
KS53aWR0aCgpIDogMF9sdTsKICAgICAgICAgTGF5b3V0VW5pdCBtaW5JbnNldFJpZ2h0U2hhZG93
RXh0ZW50ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oLWluc2V0U2hhZG93RXh0ZW50LnJpZ2h0KCks
IHN0ZDo6bWluKG5ld0JvdW5kcy53aWR0aCgpLCBvbGRCb3VuZHMud2lkdGgoKSkpOwogICAgICAg
ICBMYXlvdXRVbml0IGJvcmRlcldpZHRoID0gc3RkOjptYXgoYm9yZGVyUmlnaHQsIHN0ZDo6bWF4
KHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkuYm9yZGVyVG9wUmlnaHRSYWRpdXMoKS53aWR0aCwgYm94
V2lkdGgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCku
d2lkdGgsIGJveFdpZHRoKSkpOwogICAgICAgICBMYXlvdXRVbml0IGRlY29yYXRpb25zV2lkdGgg
PSBzdGQ6Om1heDxMYXlvdXRVbml0Pigtb3V0bGluZVN0eWxlLm91dGxpbmVPZmZzZXQoKSwgYm9y
ZGVyV2lkdGggKyBtaW5JbnNldFJpZ2h0U2hhZG93RXh0ZW50KSArIHN0ZDo6bWF4KG91dGxpbmVX
aWR0aCwgc2hhZG93UmlnaHQpOwpAQCAtMTE1NCw4ICsxMTU0LDggQEAgYm9vbCBSZW5kZXJFbGVt
ZW50OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZXAKICAgICAgICAgTGF5b3V0VW5pdCBzaGFkb3dUb3A7CiAgICAgICAgIExheW91dFVu
aXQgc2hhZG93Qm90dG9tOwogICAgICAgICBzdHlsZSgpLmdldEJveFNoYWRvd1ZlcnRpY2FsRXh0
ZW50KHNoYWRvd1RvcCwgc2hhZG93Qm90dG9tKTsKLSAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJC
b3R0b20gPSBpczxSZW5kZXJCb3g+KCp0aGlzKSA/IGRvd25jYXN0PFJlbmRlckJveD4oKnRoaXMp
LmJvcmRlckJvdHRvbSgpIDogTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApOwotICAgICAgICBMYXlv
dXRVbml0IGJveEhlaWdodCA9IGlzPFJlbmRlckJveD4oKnRoaXMpID8gZG93bmNhc3Q8UmVuZGVy
Qm94PigqdGhpcykuaGVpZ2h0KCkgOiBMYXlvdXRVbml0KCk7CisgICAgICAgIExheW91dFVuaXQg
Ym9yZGVyQm90dG9tID0gaXM8UmVuZGVyQm94PigqdGhpcykgPyBkb3duY2FzdDxSZW5kZXJCb3g+
KCp0aGlzKS5ib3JkZXJCb3R0b20oKSA6IDBfbHU7CisgICAgICAgIExheW91dFVuaXQgYm94SGVp
Z2h0ID0gaXM8UmVuZGVyQm94PigqdGhpcykgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCp0aGlzKS5o
ZWlnaHQoKSA6IDBfbHU7CiAgICAgICAgIExheW91dFVuaXQgbWluSW5zZXRCb3R0b21TaGFkb3dF
eHRlbnQgPSBzdGQ6Om1pbjxMYXlvdXRVbml0PigtaW5zZXRTaGFkb3dFeHRlbnQuYm90dG9tKCks
IHN0ZDo6bWluKG5ld0JvdW5kcy5oZWlnaHQoKSwgb2xkQm91bmRzLmhlaWdodCgpKSk7CiAgICAg
ICAgIExheW91dFVuaXQgYm9yZGVySGVpZ2h0ID0gc3RkOjptYXgoYm9yZGVyQm90dG9tLCBzdGQ6
Om1heCh2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS5oZWln
aHQsIGJveEhlaWdodCksCiAgICAgICAgICAgICB2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmJvcmRl
ckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0LCBib3hIZWlnaHQpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAppbmRleCAyMTI4NTgzMzExZDg0
NzZlMjhhYTgyNTViYWQwMjU2ODI3NzI0MjA2Li4wMWJkZjA3ZTNlOTQ4Njk0ZTE1MjZkOWFmOTk1
NTdhYzYwMjNhYmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4
aWJsZUJveC5jcHAKQEAgLTEyMCw4ICsxMjAsOCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojpj
b21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdAog
ICAgIAogICAgIC8vIER1ZSB0byBuZWdhdGl2ZSBtYXJnaW5zLCBpdCBpcyBwb3NzaWJsZSB0aGF0
IHdlIGNhbGN1bGF0ZWQgYSBuZWdhdGl2ZQogICAgIC8vIGludHJpbnNpYyB3aWR0aC4gTWFrZSBz
dXJlIHRoYXQgd2UgbmV2ZXIgcmV0dXJuIGEgbmVnYXRpdmUgd2lkdGguCi0gICAgbWluTG9naWNh
bFdpZHRoID0gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBtaW5Mb2dpY2FsV2lkdGgpOwotICAgIG1h
eExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KExheW91dFVuaXQoKSwgbWF4TG9naWNhbFdpZHRoKTsK
KyAgICBtaW5Mb2dpY2FsV2lkdGggPSBzdGQ6Om1heCgwX2x1LCBtaW5Mb2dpY2FsV2lkdGgpOwor
ICAgIG1heExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KDBfbHUsIG1heExvZ2ljYWxXaWR0aCk7CiAg
ICAgCiAgICAgaWYgKGhhZEV4Y2x1ZGVkQ2hpbGRyZW4pIHsKICAgICAgICAgbWluTG9naWNhbFdp
ZHRoID0gc3RkOjptYXgobWluTG9naWNhbFdpZHRoLCBjaGlsZE1pbldpZHRoKTsKQEAgLTM1OSw3
ICszNTksNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpwYWludENoaWxkcmVuKFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcAogCiB2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpyZXBvc2l0aW9uTG9naWNhbEhlaWdodERlcGVuZGVudEZsZXhJdGVtcyhWZWN0b3I8TGlu
ZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMpCiB7Ci0gICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNTdGFy
dEVkZ2UgPSBsaW5lQ29udGV4dHMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDogbGluZUNvbnRl
eHRzWzBdLmNyb3NzQXhpc09mZnNldDsKKyAgICBMYXlvdXRVbml0IGNyb3NzQXhpc1N0YXJ0RWRn
ZSA9IGxpbmVDb250ZXh0cy5pc0VtcHR5KCkgPyAwX2x1IDogbGluZUNvbnRleHRzWzBdLmNyb3Nz
QXhpc09mZnNldDsKICAgICBhbGlnbkZsZXhMaW5lcyhsaW5lQ29udGV4dHMpOwogICAgIAogICAg
IGFsaWduQ2hpbGRyZW4obGluZUNvbnRleHRzKTsKQEAgLTUxMiw3ICs1MTIsNyBAQCBMYXlvdXRV
bml0IFJlbmRlckZsZXhpYmxlQm94OjptYWluQXhpc0NvbnRlbnRFeHRlbnQoTGF5b3V0VW5pdCBj
b250ZW50TG9naWNhbEhlaQogICAgICAgICBhdXRvIGNvbXB1dGVkVmFsdWVzID0gY29tcHV0ZUxv
Z2ljYWxIZWlnaHQoYm9yZGVyQm94TG9naWNhbEhlaWdodCwgbG9naWNhbFRvcCgpKTsKICAgICAg
ICAgaWYgKGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50ID09IExheW91dFVuaXQ6Om1heCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50OwotICAgICAgICByZXR1cm4g
c3RkOjptYXgoTGF5b3V0VW5pdCgpLCBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCAtIGJvcmRlclBh
ZGRpbmdBbmRTY3JvbGxiYXIpOworICAgICAgICByZXR1cm4gc3RkOjptYXgoMF9sdSwgY29tcHV0
ZWRWYWx1ZXMubV9leHRlbnQgLSBib3JkZXJQYWRkaW5nQW5kU2Nyb2xsYmFyKTsKICAgICB9CiAg
ICAgcmV0dXJuIGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKIH0KQEAgLTc0MCw3ICs3NDAsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTWFpblNpemVGcm9tQXNwZWN0UmF0
aW9Vc2luZyhjb25zdCBSZW5kZXJCbwogICAgICAgICBBU1NFUlQoY3Jvc3NTaXplTGVuZ3RoLmlz
UGVyY2VudE9yQ2FsY3VsYXRlZCgpKTsKICAgICAgICAgY3Jvc3NTaXplID0gaGFzT3J0aG9nb25h
bEZsb3coY2hpbGQpID8gYWRqdXN0Qm9yZGVyQm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKHZh
bHVlRm9yTGVuZ3RoKGNyb3NzU2l6ZUxlbmd0aCwgY29udGVudFdpZHRoKCkpKSA6IGNoaWxkLmNv
bXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjcm9zc1NpemVMZW5ndGgpOwogICAgICAgICBp
ZiAoIWNyb3NzU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CisgICAgICAg
ICAgICByZXR1cm4gMF9sdTsKICAgICB9CiAgICAgCiAgICAgY29uc3QgTGF5b3V0U2l6ZSYgY2hp
bGRJbnRyaW5zaWNTaXplID0gY2hpbGQuaW50cmluc2ljU2l6ZSgpOwpAQCAtODIxLDcgKzgyMSw3
IEBAIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVJbm5lckZsZXhCYXNlU2l6
ZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsCiAgICAgCiAgICAgTGVuZ3RoIGZsZXhCYXNpcyA9
IGZsZXhCYXNpc0ZvckNoaWxkKGNoaWxkKTsKICAgICBpZiAobWFpbkF4aXNMZW5ndGhJc0RlZmlu
aXRlKGNoaWxkLCBmbGV4QmFzaXMpKQotICAgICAgICByZXR1cm4gc3RkOjptYXgoTGF5b3V0VW5p
dCgpLCBjb21wdXRlTWFpbkF4aXNFeHRlbnRGb3JDaGlsZChjaGlsZCwgTWFpbk9yUHJlZmVycmVk
U2l6ZSwgZmxleEJhc2lzKS52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KDBfbHUs
IGNvbXB1dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKGNoaWxkLCBNYWluT3JQcmVmZXJyZWRTaXpl
LCBmbGV4QmFzaXMpLnZhbHVlKCkpOwogCiAgICAgLy8gVGhlIGZsZXggYmFzaXMgaXMgaW5kZWZp
bml0ZSAoPWF1dG8pLCBzbyB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhlIGFjdHVhbAogICAgIC8vIHdp
ZHRoIG9mIHRoZSBjaGlsZC4gRm9yIHRoZSBsb2dpY2FsIHdpZHRoIGF4aXMgd2UganVzdCB1c2Ug
dGhlIHByZWZlcnJlZApAQCAtOTE4LDggKzkxOCw4IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OmxheW91dEZsZXhJdGVtcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiAKIExheW91dFVuaXQgUmVu
ZGVyRmxleGlibGVCb3g6OmF1dG9NYXJnaW5PZmZzZXRJbk1haW5BeGlzKGNvbnN0IFZlY3RvcjxG
bGV4SXRlbT4mIGNoaWxkcmVuLCBMYXlvdXRVbml0JiBhdmFpbGFibGVGcmVlU3BhY2UpCiB7Ci0g
ICAgaWYgKGF2YWlsYWJsZUZyZWVTcGFjZSA8PSBMYXlvdXRVbml0KCkpCi0gICAgICAgIHJldHVy
biBMYXlvdXRVbml0KCk7CisgICAgaWYgKGF2YWlsYWJsZUZyZWVTcGFjZSA8PSAwX2x1KQorICAg
ICAgICByZXR1cm4gMF9sdTsKICAgICAKICAgICBpbnQgbnVtYmVyT2ZBdXRvTWFyZ2lucyA9IDA7
CiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxGbG93KCk7CkBAIC05MzksMTYg
KzkzOSwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjphdXRvTWFyZ2luT2Zmc2V0
SW5NYWluQXhpcyhjb25zdCBWZWN0b3I8RmxleEl0ZW0+JgogICAgICAgICB9CiAgICAgfQogICAg
IGlmICghbnVtYmVyT2ZBdXRvTWFyZ2lucykKLSAgICAgICAgcmV0dXJuIExheW91dFVuaXQoKTsK
KyAgICAgICAgcmV0dXJuIDBfbHU7CiAgICAgCiAgICAgTGF5b3V0VW5pdCBzaXplT2ZBdXRvTWFy
Z2luID0gYXZhaWxhYmxlRnJlZVNwYWNlIC8gbnVtYmVyT2ZBdXRvTWFyZ2luczsKLSAgICBhdmFp
bGFibGVGcmVlU3BhY2UgPSBMYXlvdXRVbml0KCk7CisgICAgYXZhaWxhYmxlRnJlZVNwYWNlID0g
MF9sdTsKICAgICByZXR1cm4gc2l6ZU9mQXV0b01hcmdpbjsKIH0KIAogdm9pZCBSZW5kZXJGbGV4
aWJsZUJveDo6dXBkYXRlQXV0b01hcmdpbnNJbk1haW5BeGlzKFJlbmRlckJveCYgY2hpbGQsIExh
eW91dFVuaXQgYXV0b01hcmdpbk9mZnNldCkKIHsKLSAgICBBU1NFUlQoYXV0b01hcmdpbk9mZnNl
dCA+PSBMYXlvdXRVbml0KCkpOworICAgIEFTU0VSVChhdXRvTWFyZ2luT2Zmc2V0ID49IDBfbHUp
OwogICAgIAogICAgIGlmIChpc0hvcml6b250YWxGbG93KCkpIHsKICAgICAgICAgaWYgKGNoaWxk
LnN0eWxlKCkubWFyZ2luTGVmdCgpLmlzQXV0bygpKQpAQCAtOTgwLDcgKzk4MCw3IEBAIExheW91
dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGQo
TGF5b3V0VW5pdCBsaW5lQ3JvCiBib29sIFJlbmRlckZsZXhpYmxlQm94Ojp1cGRhdGVBdXRvTWFy
Z2luc0luQ3Jvc3NBeGlzKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgYXZhaWxhYmxlQWxp
Z25tZW50U3BhY2UpCiB7CiAgICAgQVNTRVJUKCFjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSk7Ci0gICAgQVNTRVJUKGF2YWlsYWJsZUFsaWdubWVudFNwYWNlID49IExheW91dFVuaXQoKSk7
CisgICAgQVNTRVJUKGF2YWlsYWJsZUFsaWdubWVudFNwYWNlID49IDBfbHUpOwogICAgIAogICAg
IGJvb2wgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsRmxvdygpOwogICAgIExlbmd0aCB0b3BP
ckxlZnQgPSBpc0hvcml6b250YWwgPyBjaGlsZC5zdHlsZSgpLm1hcmdpblRvcCgpIDogY2hpbGQu
c3R5bGUoKS5tYXJnaW5MZWZ0KCk7CkBAIC0xMDc5LDcgKzEwNzksNyBAQCBMYXlvdXRVbml0IFJl
bmRlckZsZXhpYmxlQm94OjphZGp1c3RDaGlsZFNpemVGb3JNaW5BbmRNYXgoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZAogCiAgICAgTGVuZ3RoIG1pbiA9IGlzSG9yaXpvbnRhbEZsb3coKSA/IGNoaWxk
LnN0eWxlKCkubWluV2lkdGgoKSA6IGNoaWxkLnN0eWxlKCkubWluSGVpZ2h0KCk7CiAgICAgaWYg
KG1pbi5pc1NwZWNpZmllZE9ySW50cmluc2ljKCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om1heChj
aGlsZFNpemUsIHN0ZDo6bWF4KExheW91dFVuaXQoKSwgY29tcHV0ZU1haW5BeGlzRXh0ZW50Rm9y
Q2hpbGQoY2hpbGQsIE1pblNpemUsIG1pbikudmFsdWVfb3IoY2hpbGRTaXplKSkpOworICAgICAg
ICByZXR1cm4gc3RkOjptYXgoY2hpbGRTaXplLCBzdGQ6Om1heCgwX2x1LCBjb21wdXRlTWFpbkF4
aXNFeHRlbnRGb3JDaGlsZChjaGlsZCwgTWluU2l6ZSwgbWluKS52YWx1ZV9vcihjaGlsZFNpemUp
KSk7CiAgICAgCiAgICAgaWYgKCFpc0ZsZXhpYmxlQm94SW1wbCgpICYmIG1pbi5pc0F1dG8oKSAm
JiBtYWluQXhpc092ZXJmbG93Rm9yQ2hpbGQoY2hpbGQpID09IE92ZXJmbG93OjpWaXNpYmxlICYm
ICEoaXNDb2x1bW5GbG93KCkgJiYgaXM8UmVuZGVyRmxleGlibGVCb3g+KGNoaWxkKSkpIHsKICAg
ICAgICAgLy8gRklYTUU6IEZvciBub3csIHdlIGRvIG5vdCBoYW5kbGUgbWluLWhlaWdodDogYXV0
byBmb3IgbmVzdGVkCkBAIC0xMTE1LDcgKzExMTUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhp
YmxlQm94OjphZGp1c3RDaGlsZFNpemVGb3JNaW5BbmRNYXgoY29uc3QgUmVuZGVyQm94JiBjaGls
ZAogICAgICAgICByZXR1cm4gc3RkOjptYXgoY2hpbGRTaXplLCBjb250ZW50U2l6ZSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIHN0ZDo6bWF4KExheW91dFVuaXQoKSwgY2hpbGRTaXplKTsKKyAgICBy
ZXR1cm4gc3RkOjptYXgoMF9sdSwgY2hpbGRTaXplKTsKIH0KICAgICAKIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gUmVuZGVyRmxleGlibGVCb3g6OmNyb3NzU2l6ZUZvclBlcmNlbnRhZ2VSZXNv
bHV0aW9uKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCkBAIC0xNDAxLDcgKzE0MDEsNyBAQCBMYXlv
dXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjpzdGF0aWNNYWluQXhpc1Bvc2l0aW9uRm9yUG9zaXRp
b25lZENoaWxkKGNvbnN0IFJlbgogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6c3RhdGlj
Q3Jvc3NBeGlzUG9zaXRpb25Gb3JQb3NpdGlvbmVkQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGls
ZCkKIHsKICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlID0gY3Jvc3NBeGlzQ29udGVudEV4
dGVudCgpIC0gY3Jvc3NBeGlzRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpOwotICAgIHJldHVybiBhbGln
bm1lbnRPZmZzZXQoYXZhaWxhYmxlU3BhY2UsIGFsaWdubWVudEZvckNoaWxkKGNoaWxkKSwgTGF5
b3V0VW5pdCgpLCBMYXlvdXRVbml0KCksIHN0eWxlKCkuZmxleFdyYXAoKSA9PSBGbGV4V3JhcDo6
UmV2ZXJzZSk7CisgICAgcmV0dXJuIGFsaWdubWVudE9mZnNldChhdmFpbGFibGVTcGFjZSwgYWxp
Z25tZW50Rm9yQ2hpbGQoY2hpbGQpLCAwX2x1LCAwX2x1LCBzdHlsZSgpLmZsZXhXcmFwKCkgPT0g
RmxleFdyYXA6OlJldmVyc2UpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94Ojpz
dGF0aWNJbmxpbmVQb3NpdGlvbkZvclBvc2l0aW9uZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNo
aWxkKQpAQCAtMTQ3OSwxNCArMTQ3OSwxNCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpyZXNl
dEF1dG9NYXJnaW5zQW5kTG9naWNhbFRvcEluQ3Jvc3NBeGlzKFJlbmRlckJveCYgY2hpbAogICAg
ICAgICBjaGlsZC51cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGlmIChpc0hvcml6b250
YWxGbG93KCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC5zdHlsZSgpLm1hcmdpblRvcCgpLmlz
QXV0bygpKQotICAgICAgICAgICAgICAgIGNoaWxkLnNldE1hcmdpblRvcChMYXlvdXRVbml0KCkp
OworICAgICAgICAgICAgICAgIGNoaWxkLnNldE1hcmdpblRvcCgwX2x1KTsKICAgICAgICAgICAg
IGlmIChjaGlsZC5zdHlsZSgpLm1hcmdpbkJvdHRvbSgpLmlzQXV0bygpKQotICAgICAgICAgICAg
ICAgIGNoaWxkLnNldE1hcmdpbkJvdHRvbShMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAg
IGNoaWxkLnNldE1hcmdpbkJvdHRvbSgwX2x1KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChjaGlsZC5zdHlsZSgpLm1hcmdpbkxlZnQoKS5pc0F1dG8oKSkKLSAgICAgICAgICAg
ICAgICBjaGlsZC5zZXRNYXJnaW5MZWZ0KExheW91dFVuaXQoKSk7CisgICAgICAgICAgICAgICAg
Y2hpbGQuc2V0TWFyZ2luTGVmdCgwX2x1KTsKICAgICAgICAgICAgIGlmIChjaGlsZC5zdHlsZSgp
Lm1hcmdpblJpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgICAgICAgICAgY2hpbGQuc2V0TWFyZ2lu
UmlnaHQoTGF5b3V0VW5pdCgpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC5zZXRNYXJnaW5SaWdo
dCgwX2x1KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2NjgsNyArMTY2OCw3IEBAIHZvaWQg
UmVuZGVyRmxleGlibGVCb3g6OmxheW91dENvbHVtblJldmVyc2UoY29uc3QgVmVjdG9yPEZsZXhJ
dGVtPiYgY2hpbGRyZW4sIExhCiBzdGF0aWMgTGF5b3V0VW5pdCBpbml0aWFsQWxpZ25Db250ZW50
T2Zmc2V0KExheW91dFVuaXQgYXZhaWxhYmxlRnJlZVNwYWNlLCBDb250ZW50UG9zaXRpb24gYWxp
Z25Db250ZW50LCBDb250ZW50RGlzdHJpYnV0aW9uIGFsaWduQ29udGVudERpc3RyaWJ1dGlvbiwg
dW5zaWduZWQgbnVtYmVyT2ZMaW5lcykKIHsKICAgICBpZiAobnVtYmVyT2ZMaW5lcyA8PSAxKQot
ICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgICAgICByZXR1cm4gMF9sdTsKICAgICBp
ZiAoYWxpZ25Db250ZW50ID09IENvbnRlbnRQb3NpdGlvbjo6RmxleEVuZCkKICAgICAgICAgcmV0
dXJuIGF2YWlsYWJsZUZyZWVTcGFjZTsKICAgICBpZiAoYWxpZ25Db250ZW50ID09IENvbnRlbnRQ
b3NpdGlvbjo6Q2VudGVyKQpAQCAtMTY4NSw3ICsxNjg1LDcgQEAgc3RhdGljIExheW91dFVuaXQg
aW5pdGlhbEFsaWduQ29udGVudE9mZnNldChMYXlvdXRVbml0IGF2YWlsYWJsZUZyZWVTcGFjZSwg
Q29udGUKICAgICAgICAgLy8gRmFsbGJhY2sgdG8gJ2NlbnRlcicKICAgICAgICAgcmV0dXJuIGF2
YWlsYWJsZUZyZWVTcGFjZSAvIDI7CiAgICAgfQotICAgIHJldHVybiBMYXlvdXRVbml0KCk7Cisg
ICAgcmV0dXJuIDBfbHU7CiB9CiAKIHN0YXRpYyBMYXlvdXRVbml0IGFsaWduQ29udGVudFNwYWNl
QmV0d2VlbkNoaWxkcmVuKExheW91dFVuaXQgYXZhaWxhYmxlRnJlZVNwYWNlLCBDb250ZW50RGlz
dHJpYnV0aW9uIGFsaWduQ29udGVudERpc3RyaWJ1dGlvbiwgdW5zaWduZWQgbnVtYmVyT2ZMaW5l
cykKQEAgLTE2OTgsNyArMTY5OCw3IEBAIHN0YXRpYyBMYXlvdXRVbml0IGFsaWduQ29udGVudFNw
YWNlQmV0d2VlbkNoaWxkcmVuKExheW91dFVuaXQgYXZhaWxhYmxlRnJlZVNwYWNlCiAgICAgICAg
IGlmIChhbGlnbkNvbnRlbnREaXN0cmlidXRpb24gPT0gQ29udGVudERpc3RyaWJ1dGlvbjo6U3Bh
Y2VFdmVubHkpCiAgICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlRnJlZVNwYWNlIC8gKG51bWJl
ck9mTGluZXMgKyAxKTsKICAgICB9Ci0gICAgcmV0dXJuIExheW91dFVuaXQoKTsKKyAgICByZXR1
cm4gMF9sdTsKIH0KICAgICAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWduRmxleExpbmVz
KFZlY3RvcjxMaW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cykKQEAgLTE3NDEsNyArMTc0MSw3IEBA
IHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWduRmxleExpbmVzKFZlY3RvcjxMaW5lQ29udGV4
dD4mIGxpbmVDb250ZXh0cykKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFkanVzdEFsaWdubWVu
dEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgZGVsdGEpCiB7CiAgICAgQVNT
RVJUKCFjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0gICAgc2V0Rmxvd0F3YXJlTG9j
YXRpb25Gb3JDaGlsZChjaGlsZCwgZmxvd0F3YXJlTG9jYXRpb25Gb3JDaGlsZChjaGlsZCkgKyBM
YXlvdXRTaXplKExheW91dFVuaXQoKSwgZGVsdGEpKTsKKyAgICBzZXRGbG93QXdhcmVMb2NhdGlv
bkZvckNoaWxkKGNoaWxkLCBmbG93QXdhcmVMb2NhdGlvbkZvckNoaWxkKGNoaWxkKSArIExheW91
dFNpemUoMF9sdSwgZGVsdGEpKTsKIH0KICAgICAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFs
aWduQ2hpbGRyZW4oY29uc3QgVmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNvbnRleHRzKQpAQCAt
MTc2MSw3ICsxNzYxLDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25DaGlsZHJlbihj
b25zdCBWZWN0b3I8TGluZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMpCiAgICAgICAgICAgICBjb25z
dCBhdXRvJiBmbGV4SXRlbSA9IGxpbmVDb250ZXh0LmZsZXhJdGVtc1tjaGlsZE51bWJlcl07CiAg
ICAgICAgICAgICBBU1NFUlQoIWZsZXhJdGVtLmJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh1cGRhdGVBdXRvTWFyZ2luc0luQ3Jvc3NB
eGlzKGZsZXhJdGVtLmJveCwgc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBhdmFpbGFibGVBbGlnbm1l
bnRTcGFjZUZvckNoaWxkKGxpbmVDcm9zc0F4aXNFeHRlbnQsIGZsZXhJdGVtLmJveCkpKSkKKyAg
ICAgICAgICAgIGlmICh1cGRhdGVBdXRvTWFyZ2luc0luQ3Jvc3NBeGlzKGZsZXhJdGVtLmJveCwg
c3RkOjptYXgoMF9sdSwgYXZhaWxhYmxlQWxpZ25tZW50U3BhY2VGb3JDaGlsZChsaW5lQ3Jvc3NB
eGlzRXh0ZW50LCBmbGV4SXRlbS5ib3gpKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIEl0ZW1Qb3NpdGlvbiBwb3NpdGlvbiA9IGFsaWdubWVu
dEZvckNoaWxkKGZsZXhJdGVtLmJveCk7CkBAIC0xODE1LDcgKzE4MTUsNyBAQCB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjphcHBseVN0cmV0Y2hBbGlnbm1lbnRUb0NoaWxkKFJlbmRlckJveCYgY2hp
bGQsIExheW91dFVuaQogICAgICAgICBpZiAoY2hpbGROZWVkc1JlbGF5b3V0IHx8ICFjaGlsZC5o
YXNPdmVycmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgICAgICBjaGlsZC5zZXRP
dmVycmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KGRlc2lyZWRMb2dpY2FsSGVpZ2h0IC0gY2hpbGQu
Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIGlmIChjaGlsZE5lZWRz
UmVsYXlvdXQpIHsKLSAgICAgICAgICAgIGNoaWxkLnNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5p
dCgpKTsKKyAgICAgICAgICAgIGNoaWxkLnNldExvZ2ljYWxIZWlnaHQoMF9sdSk7CiAgICAgICAg
ICAgICAvLyBXZSBjYWNoZSB0aGUgY2hpbGQncyBpbnRyaW5zaWMgY29udGVudCBsb2dpY2FsIGhl
aWdodCB0byBhdm9pZCBpdCBiZWluZwogICAgICAgICAgICAgLy8gcmVzZXQgdG8gdGhlIHN0cmV0
Y2hlZCBoZWlnaHQuCiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBmcmFnaWxlLiBSZW5k
ZXJ0Qm94ZXMgc2hvdWxkIGJlIHNtYXJ0IGVub3VnaCB0bwpAQCAtMTgzMCw3ICsxODMwLDcgQEAg
dm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlTdHJldGNoQWxpZ25tZW50VG9DaGlsZChSZW5k
ZXJCb3gmIGNoaWxkLCBMYXlvdXRVbmkKICAgICAgICAgICAgIHNldENhY2hlZENoaWxkSW50cmlu
c2ljQ29udGVudExvZ2ljYWxIZWlnaHQoY2hpbGQsIGNoaWxkSW50cmluc2ljQ29udGVudExvZ2lj
YWxIZWlnaHQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChoYXNPcnRob2dvbmFsRmxvdyhj
aGlsZCkgJiYgY2hpbGQuc3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSkgewotICAgICAg
ICBMYXlvdXRVbml0IGNoaWxkV2lkdGggPSBzdGQ6Om1heChMYXlvdXRVbml0KCksIGxpbmVDcm9z
c0F4aXNFeHRlbnQgLSBjcm9zc0F4aXNNYXJnaW5FeHRlbnRGb3JDaGlsZChjaGlsZCkpOworICAg
ICAgICBMYXlvdXRVbml0IGNoaWxkV2lkdGggPSBzdGQ6Om1heCgwX2x1LCBsaW5lQ3Jvc3NBeGlz
RXh0ZW50IC0gY3Jvc3NBeGlzTWFyZ2luRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpKTsKICAgICAgICAg
Y2hpbGRXaWR0aCA9IGNoaWxkLmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluRnJhZ21lbnRCeU1pbk1h
eChjaGlsZFdpZHRoLCBjcm9zc0F4aXNDb250ZW50RXh0ZW50KCksICp0aGlzLCBudWxscHRyKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChjaGlsZFdpZHRoICE9IGNoaWxkLmxvZ2ljYWxXaWR0aCgp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCmluZGV4
IDM5ZDdjZjIwYjllMDg4ZGNkZGEwNzIzM2Y2N2E5NzQxNDM2ZTc0MzEuLjc5YmZlZWVlMmNmYzYy
OTYxZTczZGQ2YTRkZGFjZDlkZmIzZGE0NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbGV4aWJsZUJveC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgYXZvaWRzRmxvYXRzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wg
Y2FuRHJvcEFub255bW91c0Jsb2NrQ2hpbGQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsg
fQotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0
IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgZmluYWw7CisgICAgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwX2x1KSBm
aW5hbDsKIAogICAgIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJz
dExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNv
bnRhaW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gZmly
c3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXIuY3BwCmluZGV4IDBkNDQ2ZDRhNDli
YTZkZmFlMzQxNGU2MTM4MjNmZmQzZWFlMTc5YjYuLjU2NjFmMDA2ZDE2MWUyMzUzYjJkYzMyOTY3
YTdhZDc4YTc3ZTFkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFnbWVudENvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYWdtZW50Q29udGFpbmVyLmNwcApAQCAtODEsNyArODEsNyBAQCBMYXlvdXRQb2ludCBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6bWFwRnJhZ21lbnRQb2ludEludG9GcmFnbWVudGVkRmxv
d0Nvb3JkaW5hdAogICAgIGVmZmVjdGl2ZUZpeGVkUG9pbnREZW5vbWluYXRvci5zZXRSYXdWYWx1
ZSgxKTsKIAogICAgIGlmIChwb2ludExvZ2ljYWxUb3AgPCAwKSB7Ci0gICAgICAgIExheW91dFBv
aW50IHBvaW50SW5UaHJlYWQoMCwgZnJhZ21lbnRlZEZsb3dMb2dpY2FsVG9wKTsKKyAgICAgICAg
TGF5b3V0UG9pbnQgcG9pbnRJblRocmVhZCgwX2x1LCBmcmFnbWVudGVkRmxvd0xvZ2ljYWxUb3Ap
OwogICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5UaHJl
YWQgOiBwb2ludEluVGhyZWFkLnRyYW5zcG9zZWRQb2ludCgpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHAKaW5kZXggMGU2
MDU5NGRhMDIwYzY1YzNiZDdhYzgwYjc1Y2NiY2NkMDQ3ZWRkNC4uOTQxZGE0ZjQ1MTdjN2M1Yjll
NzQ2MTdjYmVhZjVjNzIyMjFmZWIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBSZW5k
ZXJGcmFnbWVudGVkRmxvdzo6dXBkYXRlTG9naWNhbFdpZHRoKCkKICAgICAvLyBJZiB0aGUgZnJh
Z21lbnRzIGhhdmUgbm9uLXVuaWZvcm0gbG9naWNhbCB3aWR0aHMsIHRoZW4gaW5zZXJ0IGluc2V0
IGluZm9ybWF0aW9uIGZvciB0aGUgUmVuZGVyRnJhZ21lbnRlZEZsb3cuCiAgICAgZm9yIChhdXRv
JiBmcmFnbWVudCA6IG1fZnJhZ21lbnRMaXN0KSB7CiAgICAgICAgIExheW91dFVuaXQgZnJhZ21l
bnRMb2dpY2FsV2lkdGggPSBmcmFnbWVudC0+cGFnZUxvZ2ljYWxXaWR0aCgpOwotICAgICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIgPyBMYXlvdXRVbml0KCkgOiBsb2dpY2FsV2lkdGggLSBmcmFnbWVudExvZ2ljYWxX
aWR0aDsKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxlKCkuZGlyZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCAtIGZyYWdtZW50
TG9naWNhbFdpZHRoOwogICAgICAgICBmcmFnbWVudC0+c2V0UmVuZGVyQm94RnJhZ21lbnRJbmZv
KHRoaXMsIGxvZ2ljYWxMZWZ0LCBmcmFnbWVudExvZ2ljYWxXaWR0aCwgZmFsc2UpOwogICAgIH0K
IH0KQEAgLTI4OCw3ICsyODgsNyBAQCBMYXlvdXRQb2ludCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6
YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoY29uc3QgUgogICAgICAgICAg
ICAgaWYgKGlzPFJlbmRlckJveD4oYm94TW9kZWxPYmplY3QpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gVXNlIGJvcmRlckJveFJlY3RJbkZyYWdtZW50IHRvIGFjY291bnQgZm9yIHZhcmlhdGlvbnMg
c3VjaCBhcyBwZXJjZW50YWdlIG1hcmdpbnMuCiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBi
b3JkZXJCb3hSZWN0ID0gZG93bmNhc3Q8UmVuZGVyQm94Pihib3hNb2RlbE9iamVjdCkuYm9yZGVy
Qm94UmVjdEluRnJhZ21lbnQoc3RhcnRGcmFnbWVudCwgUmVuZGVyQm94OjpEb05vdENhY2hlUmVu
ZGVyQm94RnJhZ21lbnRJbmZvKTsKLSAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2ludC5tb3Zl
KGJvcmRlckJveFJlY3QubG9jYXRpb24oKS54KCksIDApOworICAgICAgICAgICAgICAgIHJlZmVy
ZW5jZVBvaW50Lm1vdmUoYm9yZGVyQm94UmVjdC5sb2NhdGlvbigpLngoKSwgMF9sdSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEdldCB0aGUgbG9naWNhbCB0
b3AgY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBvYmplY3QuCkBAIC0zMTQsOSArMzE0LDkgQEAg
TGF5b3V0UG9pbnQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2
ZVRvT2Zmc2V0UGFyZW50KGNvbnN0IFIKICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSB0b3AgaGFz
IGJlZW4gb3ZlcnJpZGRlbiwgY2hlY2sgaWYgdGhlCiAgICAgICAgICAgICAvLyByZWxhdGl2ZS9z
dGlja3kgcG9zaXRpb25pbmcgbXVzdCBiZSByZWNvbnNpZGVyZWQuCiAgICAgICAgICAgICBpZiAo
Ym94TW9kZWxPYmplY3QuaXNSZWxhdGl2ZWx5UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAg
IHJlZmVyZW5jZVBvaW50Lm1vdmUoMCwgYm94TW9kZWxPYmplY3QucmVsYXRpdmVQb3NpdGlvbk9m
ZnNldCgpLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2ludC5tb3ZlKDBf
bHUsIGJveE1vZGVsT2JqZWN0LnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKS5oZWlnaHQoKSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChib3hNb2RlbE9iamVjdC5pc1N0aWNraWx5UG9zaXRpb25lZCgp
KQotICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUoMCwgYm94TW9kZWxPYmplY3Qu
c3RpY2t5UG9zaXRpb25PZmZzZXQoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcmVmZXJl
bmNlUG9pbnQubW92ZSgwX2x1LCBib3hNb2RlbE9iamVjdC5zdGlja3lQb3NpdGlvbk9mZnNldCgp
LmhlaWdodCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gU2luY2Ugd2UncmUg
bG9va2luZyBmb3IgdGhlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgYm9keSwgd2UgbXVzdCBhbHNv
CkBAIC0zMzAsNyArMzMwLDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OmFk
anVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNvbnN0IFIKIExheW91dFVuaXQg
UmVuZGVyRnJhZ21lbnRlZEZsb3c6OnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KExheW91dFVuaXQg
b2Zmc2V0KSBjb25zdAogewogICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9
IGZyYWdtZW50QXRCbG9ja09mZnNldCgwLCBvZmZzZXQsIGZhbHNlKTsKLSAgICByZXR1cm4gZnJh
Z21lbnQgPyBmcmFnbWVudC0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQob2Zmc2V0KSA6IExheW91
dFVuaXQoKTsKKyAgICByZXR1cm4gZnJhZ21lbnQgPyBmcmFnbWVudC0+cGFnZUxvZ2ljYWxUb3BG
b3JPZmZzZXQob2Zmc2V0KSA6IDBfbHU7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyRnJhZ21lbnRl
ZEZsb3c6OnBhZ2VMb2dpY2FsV2lkdGhGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpIGNvbnN0
CkBAIC03ODcsNyArNzg3LDcgQEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6dXBkYXRlRnJh
Z21lbnRzRnJhZ21lbnRlZEZsb3dQb3J0aW9uUmVjdCgpCiAgICAgICAgIExheW91dFVuaXQgZnJh
Z21lbnRMb2dpY2FsV2lkdGggPSBmcmFnbWVudC0+cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAg
ICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbEhlaWdodCA9IHN0ZDo6bWluPExheW91dFVuaXQ+
KFJlbmRlckZyYWdtZW50ZWRGbG93OjptYXhMb2dpY2FsSGVpZ2h0KCkgLSBsb2dpY2FsSGVpZ2h0
LCBmcmFnbWVudC0+bG9naWNhbEhlaWdodE9mQWxsRnJhZ21lbnRlZEZsb3dDb250ZW50KCkpOwog
Ci0gICAgICAgIExheW91dFJlY3QgZnJhZ21lbnRSZWN0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0g
VGV4dERpcmVjdGlvbjo6TFRSID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbFdpZHRoKCkgLSBmcmFn
bWVudExvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCwgZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGZy
YWdtZW50TG9naWNhbEhlaWdodCk7CisgICAgICAgIExheW91dFJlY3QgZnJhZ21lbnRSZWN0KHN0
eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2ljYWxX
aWR0aCgpIC0gZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQsIGZyYWdtZW50TG9n
aWNhbFdpZHRoLCBmcmFnbWVudExvZ2ljYWxIZWlnaHQpOwogCiAgICAgICAgIGZyYWdtZW50LT5z
ZXRGcmFnbWVudGVkRmxvd1BvcnRpb25SZWN0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBm
cmFnbWVudFJlY3QgOiBmcmFnbWVudFJlY3QudHJhbnNwb3NlZFJlY3QoKSk7CiAKQEAgLTg1Miw3
ICs4NTIsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckZyYWdtZW50ZWRGbG93OjpmcmFnbWVudHNCb3Vu
ZGluZ0JveChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdQogTGF5b3V0VW5pdCBSZW5kZXJGcmFn
bWVudGVkRmxvdzo6b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0RnJhZ21lbnQoY29uc3QgUmVu
ZGVyQmxvY2sqIGN1cnJlbnRCbG9jaykgY29uc3QKIHsKICAgICAvLyBBcyBhIGxhc3QgcmVzb3J0
LCB0YWtlIHRoZSBzbG93IHBhdGguCi0gICAgTGF5b3V0UmVjdCBibG9ja1JlY3QoMCwgMCwgY3Vy
cmVudEJsb2NrLT53aWR0aCgpLCBjdXJyZW50QmxvY2stPmhlaWdodCgpKTsKKyAgICBMYXlvdXRS
ZWN0IGJsb2NrUmVjdCgwX2x1LCAwX2x1LCBjdXJyZW50QmxvY2stPndpZHRoKCksIGN1cnJlbnRC
bG9jay0+aGVpZ2h0KCkpOwogICAgIHdoaWxlIChjdXJyZW50QmxvY2sgJiYgIWlzPFJlbmRlclZp
ZXc+KCpjdXJyZW50QmxvY2spICYmICFjdXJyZW50QmxvY2stPmlzUmVuZGVyRnJhZ21lbnRlZEZs
b3coKSkgewogICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmVyQmxvY2sgPSBjdXJyZW50Qmxv
Y2stPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxvY2spOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IGFiN2MyZGY3NmM4MTI1
MTkxMjJkZjgyZTU2MmYxNTQ4ZDFmMzc2NzEuLjM5ZmJiYjNkMmE1MGE3NjZiNzFkNmYwOTU0YmIy
MjFkZmQwNTdmZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKQEAg
LTIzNiw4ICsyMzYsOCBAQCB2b2lkIFJlbmRlckdyaWQ6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKICAgICAgICAgLy8gMi0gTmV4dCwgdGhlIHRyYWNrIHNp
emluZyBhbGdvcml0aG0gcmVzb2x2ZXMgdGhlIHNpemVzIG9mIHRoZSBncmlkIHJvd3MsCiAgICAg
ICAgIC8vIHVzaW5nIHRoZSBncmlkIGNvbHVtbiBzaXplcyBjYWxjdWxhdGVkIGluIHRoZSBwcmV2
aW91cyBzdGVwLgogICAgICAgICBpZiAoIWhhc0RlZmluaXRlTG9naWNhbEhlaWdodCkgewotICAg
ICAgICAgICAgbV9taW5Db250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCgpOwotICAgICAgICAgICAg
bV9tYXhDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCgpOworICAgICAgICAgICAgbV9taW5Db250
ZW50SGVpZ2h0ID0gMF9sdTsKKyAgICAgICAgICAgIG1fbWF4Q29udGVudEhlaWdodCA9IDBfbHU7
CiAgICAgICAgICAgICBjb21wdXRlVHJhY2tTaXplc0ZvckluZGVmaW5pdGVTaXplKG1fdHJhY2tT
aXppbmdBbGdvcml0aG0sIEZvclJvd3MsICptX21pbkNvbnRlbnRIZWlnaHQsICptX21heENvbnRl
bnRIZWlnaHQpOwogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlYWxseSBh
ZGRlZCB0byB0aGUgaW50cmluc2ljIGhlaWdodCBpbiBSZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50
QW5kU2Nyb2xsYmFyTG9naWNhbEhlaWdodFVzaW5nKCkuCiAgICAgICAgICAgICAvLyBSZW1vdmUg
dGhpcyB3aGVuIHRoYXQgaXMgZml4ZWQuCkBAIC0zMDQsNyArMzA0LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJHcmlkOjpncmlkR2FwKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHN0
ZDo6b3B0aW9uYWwKIHsKICAgICBjb25zdCBHYXBMZW5ndGgmIGdhcExlbmd0aCA9IGRpcmVjdGlv
biA9PSBGb3JDb2x1bW5zPyBzdHlsZSgpLmNvbHVtbkdhcCgpIDogc3R5bGUoKS5yb3dHYXAoKTsK
ICAgICBpZiAoZ2FwTGVuZ3RoLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRVbml0
KCk7CisgICAgICAgIHJldHVybiAwX2x1OwogCiAgICAgcmV0dXJuIHZhbHVlRm9yTGVuZ3RoKGdh
cExlbmd0aC5sZW5ndGgoKSwgYXZhaWxhYmxlU2l6ZS52YWx1ZV9vcigwKSk7CiB9CkBAIC00ODEs
NyArNDgxLDcgQEAgdW5zaWduZWQgUmVuZGVyR3JpZDo6Y29tcHV0ZUF1dG9SZXBlYXRUcmFja3ND
b3VudChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWMKICAgICB9CiAgICAgLy8gRm9yIHRo
ZSBwdXJwb3NlIG9mIGZpbmRpbmcgdGhlIG51bWJlciBvZiBhdXRvLXJlcGVhdGVkIHRyYWNrcywg
dGhlIFVBIG11c3QgZmxvb3IgdGhlIHRyYWNrIHNpemUgdG8gYSBVQS1zcGVjaWZpZWQKICAgICAv
LyB2YWx1ZSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLiBJdCBpcyBzdWdnZXN0ZWQgdGhhdCB0
aGlzIGZsb29yIGJlIDFweC4KLSAgICBhdXRvUmVwZWF0VHJhY2tzU2l6ZSA9IHN0ZDo6bWF4PExh
eW91dFVuaXQ+KExheW91dFVuaXQoMSksIGF1dG9SZXBlYXRUcmFja3NTaXplKTsKKyAgICBhdXRv
UmVwZWF0VHJhY2tzU2l6ZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDFfbHUsIGF1dG9SZXBlYXRU
cmFja3NTaXplKTsKIAogICAgIC8vIFRoZXJlIHdpbGwgYmUgYWx3YXlzIGF0IGxlYXN0IDEgYXV0
by1yZXBlYXQgdHJhY2ssIHNvIHRha2UgaXQgYWxyZWFkeSBpbnRvIGFjY291bnQgd2hlbiBjb21w
dXRpbmcgdGhlIHRvdGFsIHRyYWNrIHNpemUuCiAgICAgTGF5b3V0VW5pdCB0cmFja3NTaXplID0g
YXV0b1JlcGVhdFRyYWNrc1NpemU7CkBAIC04MzYsNyArODM2LDcgQEAgVmVjdG9yPExheW91dFVu
aXQ+IFJlbmRlckdyaWQ6OnRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRUcmFja1Npemlu
Z0RpcmVjdGkKIAogICAgIEFTU0VSVCghbV9ncmlkLm5lZWRzSXRlbXNQbGFjZW1lbnQoKSk7CiAg
ICAgYm9vbCBoYXNDb2xsYXBzZWRUcmFja3MgPSBtX2dyaWQuaGFzQXV0b1JlcGVhdEVtcHR5VHJh
Y2tzKGRpcmVjdGlvbik7Ci0gICAgTGF5b3V0VW5pdCBnYXAgPSAhaGFzQ29sbGFwc2VkVHJhY2tz
ID8gZ3JpZEdhcChkaXJlY3Rpb24pIDogTGF5b3V0VW5pdCgpOworICAgIExheW91dFVuaXQgZ2Fw
ID0gIWhhc0NvbGxhcHNlZFRyYWNrcyA/IGdyaWRHYXAoZGlyZWN0aW9uKSA6IDBfbHU7CiAgICAg
dHJhY2tzLnJlc2VydmVDYXBhY2l0eShudW1Qb3NpdGlvbnMgLSAxKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bVBvc2l0aW9ucyAtIDI7ICsraSkKICAgICAgICAgdHJhY2tzLmFwcGVu
ZChwb3NpdGlvbnNbaSArIDFdIC0gcG9zaXRpb25zW2ldIC0gb2Zmc2V0QmV0d2VlblRyYWNrcyAt
IGdhcCk7CkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBvcHVsYXRlR3Jp
ZFBvc2l0aW9uc0ZvckRpcmVjdGlvbihHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZQogICAg
IGlmIChudW1iZXJPZkxpbmVzID4gMSkgewogICAgICAgICAvLyBJZiB3ZSBoYXZlIGNvbGxhcHNl
ZCB0cmFja3Mgd2UganVzdCBpZ25vcmUgZ2FwcyBoZXJlIGFuZCBhZGQgdGhlbSBsYXRlciBhcyB3
ZSBtaWdodCBub3QKICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZ2FwIGJldHdlZW4gdHdvIGNvbnNl
Y3V0aXZlIHRyYWNrcyB3aXRob3V0IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgb25lcy4KLSAg
ICAgICAgTGF5b3V0VW5pdCBnYXAgPSAhaGFzQ29sbGFwc2VkVHJhY2tzID8gZ3JpZEdhcChkaXJl
Y3Rpb24pIDogTGF5b3V0VW5pdCgpOworICAgICAgICBMYXlvdXRVbml0IGdhcCA9ICFoYXNDb2xs
YXBzZWRUcmFja3MgPyBncmlkR2FwKGRpcmVjdGlvbikgOiAwX2x1OwogICAgICAgICB1bnNpZ25l
ZCBuZXh0VG9MYXN0TGluZSA9IG51bWJlck9mTGluZXMgLSAyOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbmV4dFRvTGFzdExpbmU7ICsraSkKICAgICAgICAgICAgIHBvc2l0aW9u
c1tpICsgMV0gPSBwb3NpdGlvbnNbaV0gKyBvZmZzZXQuZGlzdHJpYnV0aW9uT2Zmc2V0ICsgdHJh
Y2tzW2ldLmJhc2VTaXplKCkgKyBnYXA7CkBAIC0xMTA2LDExICsxMTA2LDExIEBAIHZvaWQgUmVu
ZGVyR3JpZDo6YXBwbHlTdHJldGNoQWxpZ25tZW50VG9DaGlsZElmTmVlZGVkKFJlbmRlckJveCYg
Y2hpbGQpCiAgICAgYm9vbCBhbGxvd2VkVG9TdHJldGNoQ2hpbGRCbG9ja1NpemUgPSBibG9ja0Zs
b3dJc0NvbHVtbkF4aXMgPyBhbGxvd2VkVG9TdHJldGNoQ2hpbGRBbG9uZ0NvbHVtbkF4aXMoY2hp
bGQpIDogYWxsb3dlZFRvU3RyZXRjaENoaWxkQWxvbmdSb3dBeGlzKGNoaWxkKTsKICAgICBpZiAo
YWxsb3dlZFRvU3RyZXRjaENoaWxkQmxvY2tTaXplKSB7CiAgICAgICAgIExheW91dFVuaXQgc3Ry
ZXRjaGVkTG9naWNhbEhlaWdodCA9IGF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGRCZWZv
cmVTdHJldGNoaW5nKEdyaWRMYXlvdXRGdW5jdGlvbnM6Om92ZXJyaWRlQ29udGFpbmluZ0Jsb2Nr
Q29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRCbG9ja0RpcmVjdGlvbikudmFsdWUoKSwg
Y2hpbGQpOwotICAgICAgICBMYXlvdXRVbml0IGRlc2lyZWRMb2dpY2FsSGVpZ2h0ID0gY2hpbGQu
Y29uc3RyYWluTG9naWNhbEhlaWdodEJ5TWluTWF4KHN0cmV0Y2hlZExvZ2ljYWxIZWlnaHQsIExh
eW91dFVuaXQoLTEpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBkZXNpcmVkTG9naWNhbEhlaWdodCA9
IGNoaWxkLmNvbnN0cmFpbkxvZ2ljYWxIZWlnaHRCeU1pbk1heChzdHJldGNoZWRMb2dpY2FsSGVp
Z2h0LCAtMV9sdSk7CiAgICAgICAgIGNoaWxkLnNldE92ZXJyaWRlQ29udGVudExvZ2ljYWxIZWln
aHQoZGVzaXJlZExvZ2ljYWxIZWlnaHQgLSBjaGlsZC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhl
aWdodCgpKTsKICAgICAgICAgaWYgKGRlc2lyZWRMb2dpY2FsSGVpZ2h0ICE9IGNoaWxkLmxvZ2lj
YWxIZWlnaHQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhdm9pZCBsYXlpbmcgb3V0
IGhlcmUgaW4gc29tZSBjYXNlcy4gU2VlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzg3OTA1LgotICAg
ICAgICAgICAgY2hpbGQuc2V0TG9naWNhbEhlaWdodChMYXlvdXRVbml0KCkpOworICAgICAgICAg
ICAgY2hpbGQuc2V0TG9naWNhbEhlaWdodCgwX2x1KTsKICAgICAgICAgICAgIGNoaWxkLnNldE5l
ZWRzTGF5b3V0KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDQwLDcgKzE0NDAsNyBAQCBib29s
IFJlbmRlckdyaWQ6OmdyaWRQb3NpdGlvbklzQXV0b0Zvck91dE9mRmxvdyhHcmlkUG9zaXRpb24g
cG9zaXRpb24sIEdyaWRUcmFjawogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpyZXNvbHZlQXV0b1N0
YXJ0R3JpZFBvc2l0aW9uKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0
CiB7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JSb3dzIHx8IHN0eWxlKCkuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQotICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgICAgICByZXR1
cm4gMF9sdTsKIAogICAgIGludCBsYXN0TGluZSA9IG51bVRyYWNrcyhGb3JDb2x1bW5zLCBtX2dy
aWQpOwogICAgIENvbnRlbnRQb3NpdGlvbiBwb3NpdGlvbiA9IHN0eWxlKCkucmVzb2x2ZWRKdXN0
aWZ5Q29udGVudFBvc2l0aW9uKGNvbnRlbnRBbGlnbm1lbnROb3JtYWxCZWhhdmlvckdyaWQoKSk7
CkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OnJlc29sdmVBdXRv
U3RhcnRHcmlkUG9zaXRpb24oR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcgogICAgICAgICBy
ZXR1cm4gbV9jb2x1bW5Qb3NpdGlvbnNbbGFzdExpbmVdIC0gY2xpZW50TG9naWNhbFdpZHRoKCk7
CiAgICAgaWYgKHBvc2l0aW9uID09IENvbnRlbnRQb3NpdGlvbjo6U3RhcnQgfHwgc3R5bGUoKS5y
ZXNvbHZlZEp1c3RpZnlDb250ZW50RGlzdHJpYnV0aW9uKGNvbnRlbnRBbGlnbm1lbnROb3JtYWxC
ZWhhdmlvckdyaWQoKSkgPT0gQ29udGVudERpc3RyaWJ1dGlvbjo6U3RyZXRjaCkKICAgICAgICAg
cmV0dXJuIG1fY29sdW1uUG9zaXRpb25zWzBdIC0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxMZWZ0
KCk7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoKTsKKyAgICByZXR1cm4gMF9sdTsKIH0KIAogTGF5
b3V0VW5pdCBSZW5kZXJHcmlkOjpyZXNvbHZlQXV0b0VuZEdyaWRQb3NpdGlvbihHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdApAQCAtMTUxMSwxMyArMTUxMSwxMyBAQCBM
YXlvdXRVbml0IFJlbmRlckdyaWQ6OmdyaWRBcmVhQnJlYWR0aEZvck91dE9mRmxvd0NoaWxkKGNv
bnN0IFJlbmRlckJveCYgY2hpbGQsCiAgICAgICAgICAgICBlbmQgLT0gaXNSb3dBeGlzID8gbV9v
ZmZzZXRCZXR3ZWVuQ29sdW1ucy5kaXN0cmlidXRpb25PZmZzZXQgOiBtX29mZnNldEJldHdlZW5S
b3dzLmRpc3RyaWJ1dGlvbk9mZnNldDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gc3Rk
OjptYXgoZW5kIC0gc3RhcnQsIExheW91dFVuaXQoKSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KGVu
ZCAtIHN0YXJ0LCAwX2x1KTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpsb2dpY2FsT2Zm
c2V0Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIGRpcmVjdGlvbiwgTGF5b3V0VW5pdCB0cmFja0JyZWFkdGgpIGNvbnN0CiB7CiAgICAgaWYg
KGhhc1N0YXRpY1Bvc2l0aW9uRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbikpCi0gICAgICAgIHJl
dHVybiBMYXlvdXRVbml0KCk7CisgICAgICAgIHJldHVybiAwX2x1OwogCiAgICAgYm9vbCBpc1Jv
d0F4aXMgPSBkaXJlY3Rpb24gPT0gRm9yQ29sdW1uczsKICAgICBib29sIGlzRmxvd0F3YXJlUm93
QXhpcyA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCp0
aGlzLCBjaGlsZCwgZGlyZWN0aW9uKSA9PSBGb3JDb2x1bW5zOwpAQCAtMTYwMiw4ICsxNjAyLDgg
QEAgc3RhdGljIHZvaWQgY29udGVudERpc3RyaWJ1dGlvbk9mZnNldChDb250ZW50QWxpZ25tZW50
RGF0YSYgb2Zmc2V0LCBjb25zdCBMYXlvdXQKICAgICAgICAgZmFsbGJhY2tQb3NpdGlvbiA9IHJl
c29sdmVDb250ZW50RGlzdHJpYnV0aW9uRmFsbGJhY2soZGlzdHJpYnV0aW9uKTsKIAogICAgIC8v
IEluaXRpYWxpemUgdG8gYW4gaW52YWxpZCBvZmZzZXQuCi0gICAgb2Zmc2V0LnBvc2l0aW9uT2Zm
c2V0ID0gTGF5b3V0VW5pdCgtMSk7Ci0gICAgb2Zmc2V0LmRpc3RyaWJ1dGlvbk9mZnNldCA9IExh
eW91dFVuaXQoLTEpOworICAgIG9mZnNldC5wb3NpdGlvbk9mZnNldCA9IC0xX2x1OworICAgIG9m
ZnNldC5kaXN0cmlidXRpb25PZmZzZXQgPSAtMV9sdTsKICAgICBpZiAoYXZhaWxhYmxlRnJlZVNw
YWNlIDw9IDApCiAgICAgICAgIHJldHVybjsKIApAQCAtMTYxNCw3ICsxNjE0LDcgQEAgc3RhdGlj
IHZvaWQgY29udGVudERpc3RyaWJ1dGlvbk9mZnNldChDb250ZW50QWxpZ25tZW50RGF0YSYgb2Zm
c2V0LCBjb25zdCBMYXlvdXQKICAgICAgICAgaWYgKG51bWJlck9mR3JpZFRyYWNrcyA8IDIpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRpc3RyaWJ1dGlvbk9mZnNldCA9IGF2YWlsYWJs
ZUZyZWVTcGFjZSAvIChudW1iZXJPZkdyaWRUcmFja3MgLSAxKTsKLSAgICAgICAgcG9zaXRpb25P
ZmZzZXQgPSBMYXlvdXRVbml0KCk7CisgICAgICAgIHBvc2l0aW9uT2Zmc2V0ID0gMF9sdTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZW50RGlzdHJpYnV0aW9uOjpTcGFjZUFyb3VuZDoK
ICAgICAgICAgaWYgKG51bWJlck9mR3JpZFRyYWNrcyA8IDEpCkBAIC0xNjU3LDggKzE2NTcsOCBA
QCB2b2lkIFJlbmRlckdyaWQ6OmNvbXB1dGVDb250ZW50UG9zaXRpb25BbmREaXN0cmlidXRpb25P
ZmZzZXQoR3JpZFRyYWNrU2l6aW5nRGlyZQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXZh
aWxhYmxlRnJlZVNwYWNlIDw9IDAgJiYgY29udGVudEFsaWdubWVudERhdGEub3ZlcmZsb3coKSA9
PSBPdmVyZmxvd0FsaWdubWVudDo6U2FmZSkgewotICAgICAgICBvZmZzZXQucG9zaXRpb25PZmZz
ZXQgPSBMYXlvdXRVbml0KCk7Ci0gICAgICAgIG9mZnNldC5kaXN0cmlidXRpb25PZmZzZXQgPSBM
YXlvdXRVbml0KCk7CisgICAgICAgIG9mZnNldC5wb3NpdGlvbk9mZnNldCA9IDBfbHU7CisgICAg
ICAgIG9mZnNldC5kaXN0cmlidXRpb25PZmZzZXQgPSAwX2x1OwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xNjc3LDIxICsxNjc3LDIxIEBAIHZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZUNv
bnRlbnRQb3NpdGlvbkFuZERpc3RyaWJ1dGlvbk9mZnNldChHcmlkVHJhY2tTaXppbmdEaXJlCiAg
ICAgY2FzZSBDb250ZW50UG9zaXRpb246OkZsZXhFbmQ6IC8vIE9ubHkgdXNlZCBpbiBmbGV4IGxh
eW91dCwgZm9yIG90aGVyIGxheW91dCwgaXQncyBlcXVpdmFsZW50IHRvICdlbmQnLgogICAgIGNh
c2UgQ29udGVudFBvc2l0aW9uOjpFbmQ6CiAgICAgICAgIGlmIChpc1Jvd0F4aXMpCi0gICAgICAg
ICAgICBwb3NpdGlvbk9mZnNldCA9IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
YXZhaWxhYmxlRnJlZVNwYWNlIDogTGF5b3V0VW5pdCgpOworICAgICAgICAgICAgcG9zaXRpb25P
ZmZzZXQgPSBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGF2YWlsYWJsZUZyZWVT
cGFjZSA6IDBfbHU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvc2l0aW9uT2Zmc2V0ID0g
YXZhaWxhYmxlRnJlZVNwYWNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRlbnRQb3Np
dGlvbjo6RmxleFN0YXJ0OiAvLyBPbmx5IHVzZWQgaW4gZmxleCBsYXlvdXQsIGZvciBvdGhlciBs
YXlvdXQsIGl0J3MgZXF1aXZhbGVudCB0byAnc3RhcnQnLgogICAgIGNhc2UgQ29udGVudFBvc2l0
aW9uOjpTdGFydDoKICAgICAgICAgaWYgKGlzUm93QXhpcykKLSAgICAgICAgICAgIHBvc2l0aW9u
T2Zmc2V0ID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBMYXlvdXRVbml0KCkg
OiBhdmFpbGFibGVGcmVlU3BhY2U7CisgICAgICAgICAgICBwb3NpdGlvbk9mZnNldCA9IHN0eWxl
KCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMF9sdSA6IGF2YWlsYWJsZUZyZWVTcGFjZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZW50UG9zaXRpb246OkJhc2VsaW5lOgogICAg
IGNhc2UgQ29udGVudFBvc2l0aW9uOjpMYXN0QmFzZWxpbmU6CiAgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhlIHByZXZpb3VzIHZhbHVlcy4gRm9yIG5vdywgd2UgYWx3YXlzICdzdGFydCcg
YWxpZ24uCiAgICAgICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvMTQ1NTY2CiAgICAgICAgIGlm
IChpc1Jvd0F4aXMpCi0gICAgICAgICAgICBwb3NpdGlvbk9mZnNldCA9IHN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gTGF5b3V0VW5pdCgpIDogYXZhaWxhYmxlRnJlZVNwYWNlOwor
ICAgICAgICAgICAgcG9zaXRpb25PZmZzZXQgPSBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IDBfbHUgOiBhdmFpbGFibGVGcmVlU3BhY2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ29udGVudFBvc2l0aW9uOjpOb3JtYWw6CiAgICAgZGVmYXVsdDoKQEAgLTE3MDAsNyArMTcw
MCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZUNvbnRlbnRQb3NpdGlvbkFuZERpc3RyaWJ1
dGlvbk9mZnNldChHcmlkVHJhY2tTaXppbmdEaXJlCiAgICAgfQogCiAgICAgb2Zmc2V0LnBvc2l0
aW9uT2Zmc2V0ID0gcG9zaXRpb25PZmZzZXQ7Ci0gICAgb2Zmc2V0LmRpc3RyaWJ1dGlvbk9mZnNl
dCA9IExheW91dFVuaXQoKTsKKyAgICBvZmZzZXQuZGlzdHJpYnV0aW9uT2Zmc2V0ID0gMF9sdTsK
IH0KIAogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjp0cmFuc2xhdGVPdXRPZkZsb3dSVExDb29yZGlu
YXRlKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgY29vcmRpbmF0ZSkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4IGYzNTkxMGNmNTA1MmNmNzZi
ZDRlZDA1NDJmZTkxNzA4YmI1YjdhN2UuLmNhNGNiZTNiZDUwMTVjYTQ1OWYzYzU2NGU4N2VmNjM0
ZDcyMWUzNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaApAQCAtNTcsNyAr
NTcsNyBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogICAgIHZvaWQgc3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
IG92ZXJyaWRlOwotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBM
YXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7CisgICAgdm9pZCBsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWln
aHQgPSAwX2x1KSBvdmVycmlkZTsKIAogICAgIGJvb2wgYXZvaWRzRmxvYXRzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wgY2FuRHJvcEFub255bW91c0Jsb2NrQ2hp
bGQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAKaW5kZXggMmM4MzQ5MGI2NTNjOTJkZmFkNzc0NzllMDdiMzJh
NDUwNzJkOGNmNi4uYzJkMDU5YjE1MmM1Y2I5Yzk2MzdiZTZlN2Q3NmM2YTI4MTQ5YzBiZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC03MDMsNyArNzAzLDcg
QEAgYm9vbCBSZW5kZXJJbWFnZTo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9CZU9ic2N1cmVk
KGNvbnN0IExheW91dFBvaW50JiBwYWludE8KIAogTGF5b3V0VW5pdCBSZW5kZXJJbWFnZTo6bWlu
aW11bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZSgp
LmVycm9yT2NjdXJyZWQoKSA/IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKSA6IExheW91dFVuaXQo
KTsKKyAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZSgpLmVycm9yT2NjdXJyZWQoKSA/IGludHJpbnNp
Y1NpemUoKS5oZWlnaHQoKSA6IDBfbHU7CiB9CiAKIEhUTUxNYXBFbGVtZW50KiBSZW5kZXJJbWFn
ZTo6aW1hZ2VNYXAoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKaW5kZXggYmEyNDE2OTk4NWQwYjA5OTlhZjgwNGNhZWIwZjNiZjI2Yzk2MzQ5NC4uM2FhMjU1
MzA2ZmUxY2M5MWRmNjRlYjNlZTMzZjczN2VmZmQ4ODc0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yNTA4LDcgKzI1MDgsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwg
Ym9vbCBpbnNpZAogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgICAg
ICBBU1NFUlQoYm94KTsKICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEV4cG9zZVJlY3QoYm94LT5h
YnNvbHV0ZVRvTG9jYWxRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QoYWJzb2x1dGVSZWN0KSkpLmJv
dW5kaW5nQm94KCkpOwotICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzKDAsIDAsIGJveC0+
Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIExheW91dFJlY3Qg
bGF5ZXJCb3VuZHMoMF9sdSwgMF9sdSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gtPmNsaWVudEhl
aWdodCgpKTsKICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3Nl
KGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWdu
WCwgb3B0aW9ucy5hbGlnblkpOwogCiAgICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xs
T2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91
bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwpAQCAtMjc1NSw3ICsyNzU1LDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0
LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmYKICAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCByZW5kZXJlci0+bWFy
Z2luTGVmdCgpIC8gem9vbUZhY3RvciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAg
ICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
TWFyZ2luUmlnaHQsIHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3RvciwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNl
V2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IExheW91dFVu
aXQoKSA6IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAg
ICAgICAgTGF5b3V0VW5pdCBiYXNlV2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNp
emluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+aG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdF
eHRlbnQoKSk7CiAgICAgICAgIGJhc2VXaWR0aCA9IGJhc2VXaWR0aCAvIHpvb21GYWN0b3I7CiAg
ICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlX
aWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICB9CkBAIC0yNzY2LDcgKzI3NjYsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExh
eW91dFNpemUmIG9sZE9mZgogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8g
em9vbUZhY3RvciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgICAgICAgICBzdHls
ZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9t
LCByZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYKTsKICAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSBy
ZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyBMYXlvdXRVbml0KCkgOiBy
ZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOworICAgICAgICBMYXlv
dXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3Jk
ZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsK
ICAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOwogICAgICAgICBz
dHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBy
b3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCk7CiAgICAgfQpAQCAtMzc3MSw3ICszNzcxLDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW4KICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGNvbnRleHQpOwogICAgICAgICBjb250ZXh0LmNsaXAoYWJzUmVjdCk7CiAgICAgICAgIExheW91
dFJlY3QgbGFyZ2VyQ29ybmVyID0gYWJzUmVjdDsKLSAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNp
emUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIExheW91dFVuaXQ6OmZyb21QaXhl
bCgxKSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsgTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDEpKSk7
CisgICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndp
ZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7CiAgICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3IobWFrZVJHQigyMTcsIDIxNywgMjE3KSkpOwogICAg
ICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAgICAgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAppbmRleCA3MWRhNmQ3MGQ5ZTBiNTAzOWM0MzU4NmFh
NDZmZTY3OGMyM2EzZTk0Li40OTVlMjBmYjdhZmE5ZmY2NTU3NDAxMGZhZmJmMWM0OTZiMjczNzM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCkBA
IC0xMTc3LDggKzExNzcsOCBAQCBMYXlvdXRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OmxvY2FsU2Vs
ZWN0aW9uUmVjdCgpCiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IG1faW5saW5l
Qm94V3JhcHBlci0+cm9vdCgpOwogICAgIExheW91dFVuaXQgbmV3TG9naWNhbFRvcCA9IHJvb3RC
b3guYmxvY2tGbG93KCkuc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gbV9p
bmxpbmVCb3hXcmFwcGVyLT5sb2dpY2FsQm90dG9tKCkgLSByb290Qm94LnNlbGVjdGlvbkJvdHRv
bSgpIDogcm9vdEJveC5zZWxlY3Rpb25Ub3AoKSAtIG1faW5saW5lQm94V3JhcHBlci0+bG9naWNh
bFRvcCgpOwogICAgIGlmIChyb290Qm94LmJsb2NrRmxvdygpLnN0eWxlKCkuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoMCwgbmV3TG9naWNhbFRv
cCwgd2lkdGgoKSwgcm9vdEJveC5zZWxlY3Rpb25IZWlnaHQoKSk7Ci0gICAgcmV0dXJuIExheW91
dFJlY3QobmV3TG9naWNhbFRvcCwgMCwgcm9vdEJveC5zZWxlY3Rpb25IZWlnaHQoKSwgaGVpZ2h0
KCkpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgwX2x1LCBuZXdMb2dpY2FsVG9wLCB3aWR0
aCgpLCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgpKTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdChu
ZXdMb2dpY2FsVG9wLCAwX2x1LCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgpLCBoZWlnaHQoKSk7
CiB9CiAKIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTEzODUsOSArMTM4NSw5IEBAIHZv
aWQgUmVuZGVyTGlzdE1hcmtlcjo6bGF5b3V0KCkKICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0g
cGFyZW50Qm94KCk7IGFuY2VzdG9yICYmIGFuY2VzdG9yICE9ICZtX2xpc3RJdGVtOyBhbmNlc3Rv
ciA9IGFuY2VzdG9yLT5wYXJlbnRCb3goKSkKICAgICAgICAgYmxvY2tPZmZzZXQgKz0gYW5jZXN0
b3ItPmxvZ2ljYWxUb3AoKTsKICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpCi0gICAgICAgIG1fbGluZU9mZnNldEZvckxpc3RJdGVtID0gbV9saXN0SXRlbS5sb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUoYmxvY2tPZmZzZXQsIERvTm90SW5kZW50VGV4dCwgTGF5b3V0VW5p
dCgpKTsKKyAgICAgICAgbV9saW5lT2Zmc2V0Rm9yTGlzdEl0ZW0gPSBtX2xpc3RJdGVtLmxvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yTGluZShibG9ja09mZnNldCwgRG9Ob3RJbmRlbnRUZXh0LCAwX2x1KTsK
ICAgICBlbHNlCi0gICAgICAgIG1fbGluZU9mZnNldEZvckxpc3RJdGVtID0gbV9saXN0SXRlbS5s
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGJsb2NrT2Zmc2V0LCBEb05vdEluZGVudFRleHQsIExh
eW91dFVuaXQoKSk7CisgICAgICAgIG1fbGluZU9mZnNldEZvckxpc3RJdGVtID0gbV9saXN0SXRl
bS5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGJsb2NrT2Zmc2V0LCBEb05vdEluZGVudFRleHQs
IDBfbHUpOwogIAogICAgIGlmIChpc0ltYWdlKCkpIHsKICAgICAgICAgdXBkYXRlTWFyZ2luc0Fu
ZENvbnRlbnQoKTsKQEAgLTE0NDEsNyArMTQ0MSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6
dXBkYXRlQ29udGVudCgpCiAgICAgaWYgKGlzSW1hZ2UoKSkgewogICAgICAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHNvbWV3aGF0IGFyYml0cmFyeSB3aWR0aC4gIEdlbmVyYXRlZCBpbWFnZXMgZm9y
IG1hcmtlcnMgcmVhbGx5IHdvbid0IGJlY29tZSBwYXJ0aWN1bGFybHkgdXNlZnVsCiAgICAgICAg
IC8vIHVudGlsIHdlIHN1cHBvcnQgdGhlIENTUzMgbWFya2VyIHBzZXVkb2NsYXNzIHRvIGFsbG93
IGNvbnRyb2wgb3ZlciB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgbWFya2VyIGJveC4KLSAg
ICAgICAgTGF5b3V0VW5pdCBidWxsZXRXaWR0aCA9IHN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSAvIExheW91dFVuaXQoMik7CisgICAgICAgIExheW91dFVuaXQgYnVsbGV0V2lkdGggPSBz
dHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLyAyX2x1OwogICAgICAgICBMYXlvdXRTaXpl
IGRlZmF1bHRCdWxsZXRTaXplKGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7CiAgICAgICAgIExh
eW91dFNpemUgaW1hZ2VTaXplID0gY2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKG1f
aW1hZ2UuZ2V0KCksIGRlZmF1bHRCdWxsZXRTaXplLCBEb05vdFNjYWxlQnlFZmZlY3RpdmVab29t
KTsKICAgICAgICAgbV9pbWFnZS0+c2V0Q29udGFpbmVyQ29udGV4dEZvclJlbmRlcmVyKCp0aGlz
LCBpbWFnZVNpemUsIHN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKQEAgLTE3MDAsNyArMTcwMCw3
IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygpCiAgICAgICAgICAgICAg
ICAgY2FzZSBMaXN0U3R5bGVUeXBlOjpOb25lOgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBtYXJnaW5TdGFy
dCA9IG1fdGV4dC5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KCkgOiAtbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoKCkgLSBvZmZzZXQgLyAyOworICAgICAgICAgICAgICAgICAgICBtYXJnaW5TdGFydCA9
IG1fdGV4dC5pc0VtcHR5KCkgPyAwX2x1IDogLW1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0g
b2Zmc2V0IC8gMjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBtYXJnaW5FbmQgPSAtbWFyZ2luU3RhcnQgLSBtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsK
QEAgLTE5MDcsNyArMTkwNyw3IEBAIExheW91dFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0
aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjCiAgICAgICAgIHJl
dHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBSb290SW5saW5lQm94JiByb290Qm94ID0gaW5saW5l
Qm94V3JhcHBlcigpLT5yb290KCk7Ci0gICAgTGF5b3V0UmVjdCByZWN0KDAsIHJvb3RCb3guc2Vs
ZWN0aW9uVG9wKCkgLSB5KCksIHdpZHRoKCksIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0KCkpOwor
ICAgIExheW91dFJlY3QgcmVjdCgwX2x1LCByb290Qm94LnNlbGVjdGlvblRvcCgpIC0geSgpLCB3
aWR0aCgpLCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgpKTsKICAgICAgICAgICAgIAogICAgIGlm
IChjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAgICAgcmV0dXJuIGNvbXB1dGVSZWN0Rm9yUmVw
YWludChyZWN0LCByZXBhaW50Q29udGFpbmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvdy5jcHAKaW5kZXggNmFmYTBkZGZhNDdiM2M0Njg5
ODk4MDkzMzJmZjFiYTRiYmNjYzdiZC4uMGNmN2EzNjM0ZmM2YzliZmFjNmU3OTJkZmU3ZmZmMGM2
YzNhZmZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRp
Q29sdW1uRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRp
Q29sdW1uRmxvdy5jcHAKQEAgLTI2MCw3ICsyNjAsNyBAQCBib29sIFJlbmRlck11bHRpQ29sdW1u
Rmxvdzo6YWRkRm9yY2VkRnJhZ21lbnRCcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExh
eQogICAgIGlmIChhdXRvKiBtdWx0aWNvbFNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1u
U2V0PihmcmFnbWVudEF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldCkpKSB7CiAgICAgICAgIG11
bHRpY29sU2V0LT5hZGRGb3JjZWRCcmVhayhvZmZzZXQpOwogICAgICAgICBpZiAob2Zmc2V0QnJl
YWtBZGp1c3RtZW50KQotICAgICAgICAgICAgKm9mZnNldEJyZWFrQWRqdXN0bWVudCA9IHBhZ2VM
b2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KG9mZnNldCkgPyBwYWdlUmVtYWluaW5nTG9naWNhbEhlaWdo
dEZvck9mZnNldChvZmZzZXQsIEluY2x1ZGVQYWdlQm91bmRhcnkpIDogTGF5b3V0VW5pdDo6ZnJv
bVBpeGVsKDApOworICAgICAgICAgICAgKm9mZnNldEJyZWFrQWRqdXN0bWVudCA9IHBhZ2VMb2dp
Y2FsSGVpZ2h0Rm9yT2Zmc2V0KG9mZnNldCkgPyBwYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZv
ck9mZnNldChvZmZzZXQsIEluY2x1ZGVQYWdlQm91bmRhcnkpIDogMF9sdTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM2NSw5ICszNjUsOSBAQCBM
YXlvdXRTaXplIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6cGh5c2ljYWxUcmFuc2xhdGlvbk9mZnNl
dEZyb21GbG93VG9GcmFnbWVudChjbwogICAgICAgICAgICAgY29sdW1uUmVjdC5zZXRXaWR0aChw
b3J0aW9uUmVjdC53aWR0aCgpKTsKICAgICAgICAgY29sdW1uU2V0LT5mbGlwRm9yV3JpdGluZ01v
ZGUoY29sdW1uUmVjdCk7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQot
ICAgICAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQubW92ZSgwLCBjb2x1bW5SZWN0LnkoKSAtIHBv
cnRpb25SZWN0LnkoKSAtIHBoeXNpY2FsRGVsdGFGcm9tUG9ydGlvbkJvdHRvbSk7CisgICAgICAg
ICAgICB0cmFuc2xhdGlvbk9mZnNldC5tb3ZlKDBfbHUsIGNvbHVtblJlY3QueSgpIC0gcG9ydGlv
blJlY3QueSgpIC0gcGh5c2ljYWxEZWx0YUZyb21Qb3J0aW9uQm90dG9tKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQubW92ZShjb2x1bW5SZWN0LngoKSAtIHBv
cnRpb25SZWN0LngoKSAtIHBoeXNpY2FsRGVsdGFGcm9tUG9ydGlvbkJvdHRvbSwgMCk7CisgICAg
ICAgICAgICB0cmFuc2xhdGlvbk9mZnNldC5tb3ZlKGNvbHVtblJlY3QueCgpIC0gcG9ydGlvblJl
Y3QueCgpIC0gcGh5c2ljYWxEZWx0YUZyb21Qb3J0aW9uQm90dG9tLCAwX2x1KTsKICAgICB9CiAg
ICAgCiAgICAgcmV0dXJuIExheW91dFNpemUodHJhbnNsYXRpb25PZmZzZXQueCgpLCB0cmFuc2xh
dGlvbk9mZnNldC55KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck11bHRpQ29sdW1uU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtblNldC5jcHAKaW5kZXggYmUxMWJlMTlmNjhlMGY5Zjk4M2Q0ZWQzODYwYzAwMTZj
ODdkYzZiMC4uMWMxMmJhODU2ODQ0NDc4ZmQ0MTg4N2Q1ZjdjNTg4MWIzNGYxY2E1ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCkBA
IC0xNDgsNyArMTQ4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJNdWx0aUNvbHVtblNldDo6aGVpZ2h0
QWRqdXN0ZWRGb3JTZXRPZmZzZXQoTGF5b3V0VW5pdCBoZWlnaHQpIGMKICAgICBMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsVG9wID0gbG9naWNhbFRvcCgpIC0gbXVsdGljb2xCbG9jay5ib3JkZXJB
bmRQYWRkaW5nQmVmb3JlKCk7CiAKICAgICBoZWlnaHQgLT0gY29udGVudExvZ2ljYWxUb3A7Ci0g
ICAgcmV0dXJuIHN0ZDo6bWF4KGhlaWdodCwgTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDEpKTsgLy8g
TGV0J3MgYXZvaWQgemVybyBoZWlnaHQsIGFzIHRoYXQgd291bGQgcHJvYmFibHkgY2F1c2UgYW4g
aW5maW5pdGUgYW1vdW50IG9mIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC4KKyAgICByZXR1cm4gc3Rk
OjptYXgoaGVpZ2h0LCAxX2x1KTsgLy8gTGV0J3MgYXZvaWQgemVybyBoZWlnaHQsIGFzIHRoYXQg
d291bGQgcHJvYmFibHkgY2F1c2UgYW4gaW5maW5pdGUgYW1vdW50IG9mIGNvbHVtbnMgdG8gYmUg
Y3JlYXRlZC4KIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFnZUxvZ2lj
YWxUb3BGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpIGNvbnN0CkBAIC01OTgsOSArNTk4LDkg
QEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdWxlcyhQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG8KIAogICAgIGlmIChmcmFnbWVudGVkRmxvdy0+cHJv
Z3Jlc3Npb25Jc0lubGluZSgpKSB7CiAgICAgICAgIGJvb2wgbGVmdFRvUmlnaHQgPSBzdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBeIGZyYWdtZW50ZWRGbG93LT5wcm9ncmVzc2lvbklz
UmV2ZXJzZWQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBjdXJyTG9naWNhbExlZnRPZmZzZXQgPSBs
ZWZ0VG9SaWdodCA/IExheW91dFVuaXQoKSA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBjdXJyTG9naWNhbExlZnRPZmZzZXQgPSBsZWZ0VG9SaWdodCA/IDBfbHUg
OiBjb250ZW50TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgcnVsZUFkZCA9IGxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwotICAgICAgICBMYXlvdXRVbml0IHJ1bGVMb2dp
Y2FsTGVmdCA9IGxlZnRUb1JpZ2h0ID8gTGF5b3V0VW5pdCgpIDogY29udGVudExvZ2ljYWxXaWR0
aCgpOworICAgICAgICBMYXlvdXRVbml0IHJ1bGVMb2dpY2FsTGVmdCA9IGxlZnRUb1JpZ2h0ID8g
MF9sdSA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBpbmxpbmVE
aXJlY3Rpb25TaXplID0gY29tcHV0ZWRDb2x1bW5XaWR0aCgpOwogICAgICAgICBCb3hTaWRlIGJv
eFNpZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpCiAgICAgICAgICAgICA/IGxlZnRUb1Jp
Z2h0ID8gQlNMZWZ0IDogQlNSaWdodApAQCAtNjMwLDkgKzYzMCw5IEBAIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5TZXQ6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBib29sIHRvcFRvQm90
dG9tID0gIXN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSBeIGZyYWdtZW50ZWRG
bG93LT5wcm9ncmVzc2lvbklzUmV2ZXJzZWQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBydWxlTGVm
dCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBMYXlvdXRVbml0KCkgOiBjb2xHYXAgLyAy
IC0gY29sR2FwIC0gcnVsZVRoaWNrbmVzcyAvIDI7CisgICAgICAgIExheW91dFVuaXQgcnVsZUxl
ZnQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gMF9sdSA6IGNvbEdhcCAvIDIgLSBjb2xH
YXAgLSBydWxlVGhpY2tuZXNzIC8gMjsKICAgICAgICAgTGF5b3V0VW5pdCBydWxlV2lkdGggPSBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGVudFdpZHRoKCkgOiBydWxlVGhpY2tuZXNz
OwotICAgICAgICBMYXlvdXRVbml0IHJ1bGVUb3AgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gY29sR2FwIC8gMiAtIGNvbEdhcCAtIHJ1bGVUaGlja25lc3MgLyAyIDogTGF5b3V0VW5pdCgp
OworICAgICAgICBMYXlvdXRVbml0IHJ1bGVUb3AgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gY29sR2FwIC8gMiAtIGNvbEdhcCAtIHJ1bGVUaGlja25lc3MgLyAyIDogMF9sdTsKICAgICAg
ICAgTGF5b3V0VW5pdCBydWxlSGVpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJ1
bGVUaGlja25lc3MgOiBjb250ZW50SGVpZ2h0KCk7CiAgICAgICAgIExheW91dFJlY3QgcnVsZVJl
Y3QocnVsZUxlZnQsIHJ1bGVUb3AsIHJ1bGVXaWR0aCwgcnVsZUhlaWdodCk7CiAKQEAgLTY0Nyw3
ICs2NDcsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtblJ1bGVzKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQbwogCiAgICAgICAgIEJveFNpZGUgYm94
U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB0b3BUb0JvdHRvbSA/IEJTVG9wIDog
QlNCb3R0b20gOiB0b3BUb0JvdHRvbSA/IEJTTGVmdCA6IEJTUmlnaHQ7CiAKLSAgICAgICAgTGF5
b3V0U2l6ZSBzdGVwKDAsIHRvcFRvQm90dG9tID8gY29tcHV0ZWRDb2x1bW5IZWlnaHQoKSArIGNv
bEdhcCA6IC0oY29tcHV0ZWRDb2x1bW5IZWlnaHQoKSArIGNvbEdhcCkpOworICAgICAgICBMYXlv
dXRTaXplIHN0ZXAoMF9sdSwgdG9wVG9Cb3R0b20gPyBjb21wdXRlZENvbHVtbkhlaWdodCgpICsg
Y29sR2FwIDogLShjb21wdXRlZENvbHVtbkhlaWdodCgpICsgY29sR2FwKSk7CiAgICAgICAgIGlm
ICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHN0ZXAgPSBzdGVwLnRy
YW5zcG9zZWRTaXplKCk7CiAKQEAgLTc4NSw3ICs3ODUsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29s
dW1uU2V0Ojpjb2xsZWN0TGF5ZXJGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywg
Y29ucwogICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gaW50ZXJzZWN0IHRoZSBkaXJ0eSByZWN0
LiBXZSBoYXZlIHRvIGFwcGx5IGEgdHJhbnNsYXRpb24gYW5kIHNoaWZ0IGJhc2VkIG9mZgogICAg
ICAgICAvLyBvdXIgY29sdW1uIGluZGV4LgogICAgICAgICBMYXlvdXRTaXplIHRyYW5zbGF0aW9u
T2Zmc2V0OwotICAgICAgICBMYXlvdXRVbml0IGlubGluZU9mZnNldCA9IHByb2dyZXNzaW9uSXNJ
bmxpbmUgPyBpICogKGNvbExvZ2ljYWxXaWR0aCArIGNvbEdhcCkgOiBMYXlvdXRVbml0KCk7Cisg
ICAgICAgIExheW91dFVuaXQgaW5saW5lT2Zmc2V0ID0gcHJvZ3Jlc3Npb25Jc0lubGluZSA/IGkg
KiAoY29sTG9naWNhbFdpZHRoICsgY29sR2FwKSA6IDBfbHU7CiAgICAgICAgIAogICAgICAgICBi
b29sIGxlZnRUb1JpZ2h0ID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgXiBwcm9n
cmVzc2lvblJldmVyc2VkOwogICAgICAgICBpZiAoIWxlZnRUb1JpZ2h0KSB7CkBAIC05MTUsNyAr
OTE1LDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnRyYW5zbGF0ZUZyYWdt
ZW50UG9pbnRUb0ZyYWdtZW50ZWRGbG93KGNvbnN0IEwKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG5vIG5leHQgY29sdW1uLCB0aGlzIHN0aWxsIG1hcHMgdG8ganVzdCBhZnRlciB0aGlzIGNv
bHVtbi4KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBvaW50LnkoKSA+PSBnYXBB
bmRDb2x1bW5SZWN0Lm1heFkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50
ID0gZ2FwQW5kQ29sdW1uUmVjdC5sb2NhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBvaW50Lm1vdmUoMCwgZ2FwQW5kQ29sdW1uUmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9pbnQubW92ZSgwX2x1LCBnYXBBbmRDb2x1bW5SZWN0LmhlaWdo
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludC54KCkgPCBjb2xSZWN0Lngo
KSkKQEAgLTk0NCw3ICs5NDQsNyBAQCBMYXlvdXRQb2ludCBSZW5kZXJNdWx0aUNvbHVtblNldDo6
dHJhbnNsYXRlRnJhZ21lbnRQb2ludFRvRnJhZ21lbnRlZEZsb3coY29uc3QgTAogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbm8gbmV4dCBjb2x1bW4sIHRoaXMgc3RpbGwgbWFwcyB0byBqdXN0
IGFmdGVyIHRoaXMgY29sdW1uLgogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocG9p
bnQueCgpID49IGdhcEFuZENvbHVtblJlY3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9pbnQgPSBnYXBBbmRDb2x1bW5SZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9pbnQubW92ZShnYXBBbmRDb2x1bW5SZWN0LndpZHRoKCksIDAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoZ2FwQW5kQ29sdW1uUmVj
dC53aWR0aCgpLCAwX2x1KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludC55KCkg
PCBjb2xSZWN0LnkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwCmluZGV4IDVlNmE1YjUzMmQwZmYxYTZmYzBkZGNiZTBiNzg4MTk3YzMxNjc2ZTIuLmEwZjA4
Mzk4ZGJiYjViODllMWE3NjZkYjVhODIxZGIxYTRjY2YyNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtNDM1LDcgKzQzNSw3IEBAIHZvaWQgUmVu
ZGVyUmVwbGFjZWQ6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEZsb2F0U2l6ZSYg
aW50cmluc2ljU2l6ZSwKIExheW91dFVuaXQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVDb25zdHJh
aW5lZExvZ2ljYWxXaWR0aChTaG91bGRDb21wdXRlUHJlZmVycmVkIHNob3VsZENvbXB1dGVQcmVm
ZXJyZWQpIGNvbnN0CiB7CiAgICAgaWYgKHNob3VsZENvbXB1dGVQcmVmZXJyZWQgPT0gQ29tcHV0
ZVByZWZlcnJlZCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJl
c3BlY3RpbmdNaW5NYXhXaWR0aChMYXlvdXRVbml0KCksIENvbXB1dGVQcmVmZXJyZWQpOworICAg
ICAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdp
ZHRoKDBfbHUsIENvbXB1dGVQcmVmZXJyZWQpOwogCiAgICAgLy8gVGhlIGFmb3JlbWVudGlvbmVk
ICdjb25zdHJhaW50IGVxdWF0aW9uJyB1c2VkIGZvciBibG9jay1sZXZlbCwgbm9uLXJlcGxhY2Vk
CiAgICAgLy8gZWxlbWVudHMgaW4gbm9ybWFsIGZsb3c6CkBAIC00NDcsNyArNDQ3LDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZUNvbnN0cmFpbmVkTG9naWNhbFdpZHRoKFNo
b3VsZENvbXB1dGVQcmVmZXJyZWQKICAgICAvLyBUaGlzIHNvbHZlcyBhYm92ZSBlcXVhdGlvbiBm
b3IgJ3dpZHRoJyAoPT0gbG9naWNhbFdpZHRoKS4KICAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0
ID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkubWFyZ2luU3RhcnQoKSwgbG9naWNhbFdp
ZHRoKTsKICAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChz
dHlsZSgpLm1hcmdpbkVuZCgpLCBsb2dpY2FsV2lkdGgpOwotICAgIGxvZ2ljYWxXaWR0aCA9IHN0
ZDo6bWF4KExheW91dFVuaXQoKSwgKGxvZ2ljYWxXaWR0aCAtIChtYXJnaW5TdGFydCArIG1hcmdp
bkVuZCArIChzaXplKCkud2lkdGgoKSAtIGNsaWVudFdpZHRoKCkpKSkpOworICAgIGxvZ2ljYWxX
aWR0aCA9IHN0ZDo6bWF4KDBfbHUsIChsb2dpY2FsV2lkdGggLSAobWFyZ2luU3RhcnQgKyBtYXJn
aW5FbmQgKyAoc2l6ZSgpLndpZHRoKCkgLSBjbGllbnRXaWR0aCgpKSkpKTsKICAgICByZXR1cm4g
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGxvZ2ljYWxX
aWR0aCwgc2hvdWxkQ29tcHV0ZVByZWZlcnJlZCk7CiB9CiAKQEAgLTYzMyw4ICs2MzMsOCBAQCBM
YXlvdXRSZWN0IFJlbmRlclJlcGxhY2VkOjpsb2NhbFNlbGVjdGlvblJlY3QoYm9vbCBjaGVja1do
ZXRoZXJTZWxlY3RlZCkgY29uc3QKICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0g
bV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCk7CiAgICAgTGF5b3V0VW5pdCBuZXdMb2dpY2FsVG9w
ID0gcm9vdEJveC5ibG9ja0Zsb3coKS5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkgPyBtX2lubGluZUJveFdyYXBwZXItPmxvZ2ljYWxCb3R0b20oKSAtIHJvb3RCb3guc2VsZWN0
aW9uQm90dG9tKCkgOiByb290Qm94LnNlbGVjdGlvblRvcCgpIC0gbV9pbmxpbmVCb3hXcmFwcGVy
LT5sb2dpY2FsVG9wKCk7CiAgICAgaWYgKHJvb3RCb3guYmxvY2tGbG93KCkuc3R5bGUoKS5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgwLCBuZXdM
b2dpY2FsVG9wLCB3aWR0aCgpLCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgpKTsKLSAgICByZXR1
cm4gTGF5b3V0UmVjdChuZXdMb2dpY2FsVG9wLCAwLCByb290Qm94LnNlbGVjdGlvbkhlaWdodCgp
LCBoZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KDBfbHUsIG5ld0xvZ2ljYWxU
b3AsIHdpZHRoKCksIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0KCkpOworICAgIHJldHVybiBMYXlv
dXRSZWN0KG5ld0xvZ2ljYWxUb3AsIDBfbHUsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0KCksIGhl
aWdodCgpKTsKIH0KIAogdm9pZCBSZW5kZXJSZXBsYWNlZDo6c2V0U2VsZWN0aW9uU3RhdGUoU2Vs
ZWN0aW9uU3RhdGUgc3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5oCmluZGV4IDBkZTE1MjZiYWEwM2IyNDMxYWRiYzA3OGQxMjRiYTk2ZWZlZDBjNzQuLmE4ZGI4
NmE0NGZhM2Q5OTg5ZmU2OTBlY2M2ODc4YmI4ZGJkYzFjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCkBAIC01Miw3ICs1Miw3IEBAIHByb3RlY3RlZDoKIAog
ICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9n
aWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0IGZpbmFsOwogCi0g
ICAgdmlydHVhbCBMYXlvdXRVbml0IG1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIExheW91dFVuaXQoKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtaW5pbXVtUmVwbGFj
ZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiAwX2x1OyB9CiAKICAgICB2b2lkIHNldFNlbGVjdGlv
blN0YXRlKFNlbGVjdGlvblN0YXRlKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSdWJ5UnVuLmgKaW5kZXggNjUxNjY5MDFhYzIyMzM1MGJhY2RiYjZmMTUzOWUxOGQx
ZThjZDZkNi4uMTRiOGU2MGNiYWZkODc5N2M3OGJjMjRmMTk3MDYyMmRkY2I3ODJhZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oCkBAIC01Myw3ICs1Myw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgbGF5b3V0RXhjbHVkZWRDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hp
bGRyZW4pIG92ZXJyaWRlOwogICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBs
YXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUhlaWdodCA9
IDApIG92ZXJyaWRlOworICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVu
LCBMYXlvdXRVbml0IHBhZ2VIZWlnaHQgPSAwX2x1KSBvdmVycmlkZTsKIAogICAgIGJvb2wgaXND
aGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25z
dCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5k
ZXggYTI0MDQwM2MzYmI3MGU3OThjMGU0YTY4MDkzMTFhOWY5OTBkMzE2Yi4uOTRlNTY2YjZhMWY0
OGZlZGM3MjdlZmM0YTkwZDAwNzA0YjgwNjU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwCkBAIC0zMDMsMTkgKzMwMywxOSBAQCBMYXlvdXRVbml0IFJlbmRlclRh
YmxlOjpjb252ZXJ0U3R5bGVMb2dpY2FsV2lkdGhUb0NvbXB1dGVkV2lkdGgoY29uc3QgTGVuZ3Ro
JiBzdAogICAgIExheW91dFVuaXQgYm9yZGVyczsKICAgICBib29sIGlzQ1NTVGFibGUgPSAhaXM8
SFRNTFRhYmxlRWxlbWVudD4oZWxlbWVudCgpKTsKICAgICBpZiAoaXNDU1NUYWJsZSAmJiBzdHls
ZUxvZ2ljYWxXaWR0aC5pc1NwZWNpZmllZCgpICYmIHN0eWxlTG9naWNhbFdpZHRoLmlzUG9zaXRp
dmUoKSAmJiBzdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCkKLSAg
ICAgICAgYm9yZGVycyA9IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJv
cmRlcnMoKSA/IExheW91dFVuaXQoKSA6IHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpKTsK
KyAgICAgICAgYm9yZGVycyA9IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBz
ZUJvcmRlcnMoKSA/IDBfbHUgOiBwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQoKSk7CiAKICAg
ICByZXR1cm4gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlTG9naWNhbFdpZHRoLCBhdmFpbGFi
bGVXaWR0aCkgKyBib3JkZXJzOwogfQogCiBMYXlvdXRVbml0IFJlbmRlclRhYmxlOjpjb252ZXJ0
U3R5bGVMb2dpY2FsSGVpZ2h0VG9Db21wdXRlZEhlaWdodChjb25zdCBMZW5ndGgmIHN0eWxlTG9n
aWNhbEhlaWdodCkKIHsKLSAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBi
b3JkZXJCZWZvcmUoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQoKSA6IHBhZGRp
bmdCZWZvcmUoKSk7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIgPSBib3Jk
ZXJBZnRlcigpICsgKGNvbGxhcHNlQm9yZGVycygpID8gTGF5b3V0VW5pdCgpIDogcGFkZGluZ0Fm
dGVyKCkpOworICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSA9IGJvcmRlckJl
Zm9yZSgpICsgKGNvbGxhcHNlQm9yZGVycygpID8gMF9sdSA6IHBhZGRpbmdCZWZvcmUoKSk7Cisg
ICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIgPSBib3JkZXJBZnRlcigpICsgKGNv
bGxhcHNlQm9yZGVycygpID8gMF9sdSA6IHBhZGRpbmdBZnRlcigpKTsKICAgICBMYXlvdXRVbml0
IGJvcmRlckFuZFBhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nQmVmb3JlICsgYm9yZGVyQW5kUGFk
ZGluZ0FmdGVyOwogICAgIGlmIChzdHlsZUxvZ2ljYWxIZWlnaHQuaXNGaXhlZCgpKSB7CiAgICAg
ICAgIC8vIEhUTUwgdGFibGVzIHNpemUgYXMgdGhvdWdoIENTUyBoZWlnaHQgaW5jbHVkZXMgYm9y
ZGVyL3BhZGRpbmcsIENTUyB0YWJsZXMgZG8gbm90LgotICAgICAgICBMYXlvdXRVbml0IGJvcmRl
cnMgPSBMYXlvdXRVbml0KCk7CisgICAgICAgIExheW91dFVuaXQgYm9yZGVyczsKICAgICAgICAg
Ly8gRklYTUU6IFdlIGNhbm5vdCBhcHBseSBib3gtc2l6aW5nOiBjb250ZW50LWJveCBvbiA8dGFi
bGU+IHdoaWNoIG90aGVyIGJyb3dzZXJzIGFsbG93LgogICAgICAgICBpZiAoaXM8SFRNTFRhYmxl
RWxlbWVudD4oZWxlbWVudCgpKSB8fCBzdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6
Qm9yZGVyQm94KSB7CiAgICAgICAgICAgICBib3JkZXJzID0gYm9yZGVyQW5kUGFkZGluZzsKQEAg
LTMyNyw3ICszMjcsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlOjpjb252ZXJ0U3R5bGVMb2dp
Y2FsSGVpZ2h0VG9Db21wdXRlZEhlaWdodChjb25zdCBMZW5ndGgmCiAgICAgICAgIHJldHVybiBj
b21wdXRlSW50cmluc2ljTG9naWNhbENvbnRlbnRIZWlnaHRVc2luZyhzdHlsZUxvZ2ljYWxIZWln
aHQsIGxvZ2ljYWxIZWlnaHQoKSAtIGJvcmRlckFuZFBhZGRpbmcsIGJvcmRlckFuZFBhZGRpbmcp
LnZhbHVlX29yKDApOwogICAgIGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIExheW91dFVuaXQoKTsKKyAgICByZXR1cm4gMF9sdTsKIH0KIAogdm9pZCBSZW5k
ZXJUYWJsZTo6bGF5b3V0Q2FwdGlvbihSZW5kZXJUYWJsZUNhcHRpb24mIGNhcHRpb24pCkBAIC00
NTcsOCArNDU3LDggQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAgICAgICAgIG1v
dmVkU2VjdGlvbkxvZ2ljYWxUb3AgPSBzdGQ6Om1pbihsb2dpY2FsSGVpZ2h0KCksIG9sZFRhYmxl
TG9naWNhbFRvcCk7CiAgICAgICAgIH0KIAotICAgICAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBh
ZGRpbmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChjb2xsYXBzaW5nID8gTGF5b3V0VW5pdCgp
IDogcGFkZGluZ0JlZm9yZSgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5n
QWZ0ZXIgPSBib3JkZXJBZnRlcigpICsgKGNvbGxhcHNpbmcgPyBMYXlvdXRVbml0KCkgOiBwYWRk
aW5nQWZ0ZXIoKSk7CisgICAgICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSA9
IGJvcmRlckJlZm9yZSgpICsgKGNvbGxhcHNpbmcgPyAwX2x1IDogcGFkZGluZ0JlZm9yZSgpKTsK
KyAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIgPSBib3JkZXJBZnRlcigp
ICsgKGNvbGxhcHNpbmcgPyAwX2x1IDogcGFkZGluZ0FmdGVyKCkpOwogCiAgICAgICAgIHNldExv
Z2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpICsgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSk7CiAK
QEAgLTcyNCwxMSArNzI0LDExIEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkanVzdEJvcmRlckJveFJl
Y3RGb3JQYWludGluZyhMYXlvdXRSZWN0JiByZWN0KQogICAgICAgICBpZiAoc3R5bGUoKS5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICByZWN0LnNldEhlaWdodChyZWN0
LmhlaWdodCgpIC0gY2FwdGlvbkxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgaWYgKGNhcHRp
b25Jc0JlZm9yZSkKLSAgICAgICAgICAgICAgICByZWN0Lm1vdmUoMCwgY2FwdGlvbkxvZ2ljYWxI
ZWlnaHQpOworICAgICAgICAgICAgICAgIHJlY3QubW92ZSgwX2x1LCBjYXB0aW9uTG9naWNhbEhl
aWdodCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZWN0LnNldFdpZHRoKHJlY3Qu
d2lkdGgoKSAtIGNhcHRpb25Mb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgIGlmIChjYXB0aW9u
SXNCZWZvcmUpCi0gICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGNhcHRpb25Mb2dpY2FsSGVpZ2h0
LCAwKTsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUoY2FwdGlvbkxvZ2ljYWxIZWlnaHQsIDBf
bHUpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtOTE1LDcgKzkxNSw3IEBAIExheW91dFVu
aXQgUmVuZGVyVGFibGU6Om9mZnNldFRvcEZvckNvbHVtbihjb25zdCBSZW5kZXJUYWJsZUNvbCYg
Y29sdW1uKSBjb25zdAogICAgICAgICByZXR1cm4gbV9jb2x1bW5PZmZzZXRUb3A7CiAgICAgfQog
ICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHRvcE5vbkVtcHR5U2VjdGlvbigpOwot
ICAgIHJldHVybiBtX2NvbHVtbk9mZnNldFRvcCA9IHNlY3Rpb24gPyBzZWN0aW9uLT5vZmZzZXRU
b3AoKSA6IExheW91dFVuaXQoMCk7CisgICAgcmV0dXJuIG1fY29sdW1uT2Zmc2V0VG9wID0gc2Vj
dGlvbiA/IHNlY3Rpb24tPm9mZnNldFRvcCgpIDogMF9sdTsKIH0KIAogTGF5b3V0VW5pdCBSZW5k
ZXJUYWJsZTo6b2Zmc2V0TGVmdEZvckNvbHVtbihjb25zdCBSZW5kZXJUYWJsZUNvbCYgY29sdW1u
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAppbmRleCA5NGM3NTFi
YmIwNTc4NTI4ZTI5MWQyYjUwMmJlYWZjY2FjNjM4MDJmLi45YWQ2ZDI2YmY0NzE0NmEwZGUwYzk2
NjA3NWM5ZGJlMmRiZDhjM2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
aApAQCAtMjA0LDcgKzIwNCw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGJvcmRlcnNQYWRk
aW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vICdi
b3JkZXItc3BhY2luZycgb25seSBhcHBsaWVzIHRvIHNlcGFyYXRlIGJvcmRlcnMgKHNlZSAxNy42
LjEgVGhlIHNlcGFyYXRlZCBib3JkZXJzIG1vZGVsKS4KLSAgICAgICAgcmV0dXJuIGJvcmRlclN0
YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQoKSA6
IChwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQoKSArIGJvcmRlclNwYWNpbmdJblJvd0RpcmVj
dGlvbigpKSk7CisgICAgICAgIHJldHVybiBib3JkZXJTdGFydCgpICsgYm9yZGVyRW5kKCkgKyAo
Y29sbGFwc2VCb3JkZXJzKCkgPyAwX2x1IDogKHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgp
ICsgYm9yZGVyU3BhY2luZ0luUm93RGlyZWN0aW9uKCkpKTsKICAgICB9CiAKICAgICAvLyBSZXR1
cm4gdGhlIGZpcnN0IGNvbHVtbiBvciBjb2x1bW4tZ3JvdXAuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IDA5YmFkZjljZWE4MmU0ZmVm
NTAzMWYxZmMxYzExNmVjZDNhMTQyNjAuLjY2NTVkODIzZWMyOWI0Njc0NDcwMDBlZDEyYWViZDY5
NzdkNjdjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rp
b246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KCkKICAgICAgICAgTGF5b3V0VW5pdCBiYXNlbGluZURl
c2NlbnQ7CiAKICAgICAgICAgLy8gT3VyIGJhc2Ugc2l6ZSBpcyB0aGUgYmlnZ2VzdCBsb2dpY2Fs
IGhlaWdodCBmcm9tIG91ciBjZWxscycgc3R5bGVzIChleGNsdWRpbmcgcm93IHNwYW5uaW5nIGNl
bGxzKS4KLSAgICAgICAgbV9yb3dQb3NbciArIDFdID0gc3RkOjptYXgobV9yb3dQb3Nbcl0gKyBy
ZXNvbHZlTG9naWNhbEhlaWdodEZvclJvdyhtX2dyaWRbcl0ubG9naWNhbEhlaWdodCksIExheW91
dFVuaXQ6OmZyb21QaXhlbCgwKSk7CisgICAgICAgIG1fcm93UG9zW3IgKyAxXSA9IHN0ZDo6bWF4
KG1fcm93UG9zW3JdICsgcmVzb2x2ZUxvZ2ljYWxIZWlnaHRGb3JSb3cobV9ncmlkW3JdLmxvZ2lj
YWxIZWlnaHQpLCAwX2x1KTsKIAogICAgICAgICBSb3cmIHJvdyA9IG1fZ3JpZFtyXS5yb3c7CiAg
ICAgICAgIHVuc2lnbmVkIHRvdGFsQ29scyA9IHJvdy5zaXplKCk7CkBAIC0zMTgsNyArMzE4LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KCkK
ICAgICAgICAgLy8gQWRkIHRoZSBib3JkZXItc3BhY2luZyB0byBvdXIgZmluYWwgcG9zaXRpb24u
CiAgICAgICAgIC8vIFVzZSB0YWJsZSBib3JkZXItc3BhY2luZyBldmVuIGluIG5vbi10b3Agc2Vj
dGlvbnMKICAgICAgICAgc3BhY2luZyA9IHRhYmxlKCktPnZCb3JkZXJTcGFjaW5nKCk7Ci0gICAg
ICAgIG1fcm93UG9zW3IgKyAxXSArPSBtX2dyaWRbcl0ucm93UmVuZGVyZXIgPyBzcGFjaW5nIDog
TGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApOworICAgICAgICBtX3Jvd1Bvc1tyICsgMV0gKz0gbV9n
cmlkW3JdLnJvd1JlbmRlcmVyID8gc3BhY2luZyA6IDBfbHU7CiAgICAgICAgIG1fcm93UG9zW3Ig
KyAxXSA9IHN0ZDo6bWF4KG1fcm93UG9zW3IgKyAxXSwgbV9yb3dQb3Nbcl0pOwogICAgIH0KIApA
QCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpkaXN0cmlidXRlRXh0
cmFMb2dpY2FsSGVpZ2h0VG9QZXJjZW50Um93cyhMYXlvdXRVbml0JiBlCiAgICAgICAgICAgICBM
YXlvdXRVbml0IHRvQWRkID0gc3RkOjptaW48TGF5b3V0VW5pdD4oZXh0cmFMb2dpY2FsSGVpZ2h0
LCAodG90YWxIZWlnaHQgKiBtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5wZXJjZW50KCkgLyAxMDAp
IC0gcm93SGVpZ2h0KTsKICAgICAgICAgICAgIC8vIElmIHRvQWRkIGlzIG5lZ2F0aXZlLCB0aGVu
IHdlIGRvbid0IHdhbnQgdG8gc2hyaW5rIHRoZSByb3cgKHRoaXMgYnVnCiAgICAgICAgICAgICAv
LyBhZmZlY3RlZCBPdXRsb29rIFdlYiBBY2Nlc3MpLgotICAgICAgICAgICAgdG9BZGQgPSBzdGQ6
Om1heChMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCksIHRvQWRkKTsKKyAgICAgICAgICAgIHRvQWRk
ID0gc3RkOjptYXgoMF9sdSwgdG9BZGQpOwogICAgICAgICAgICAgdG90YWxMb2dpY2FsSGVpZ2h0
QWRkZWQgKz0gdG9BZGQ7CiAgICAgICAgICAgICBleHRyYUxvZ2ljYWxIZWlnaHQgLT0gdG9BZGQ7
CiAgICAgICAgICAgICB0b3RhbFBlcmNlbnQgLT0gbV9ncmlkW3JdLmxvZ2ljYWxIZWlnaHQucGVy
Y2VudCgpOwpAQCAtNTYwLDcgKzU2MCw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlv
dXRSb3dzKCkKICAgICAgICAgaWYgKFJlbmRlclRhYmxlUm93KiByb3dSZW5kZXJlciA9IG1fZ3Jp
ZFtyXS5yb3dSZW5kZXJlcikgewogICAgICAgICAgICAgLy8gRklYTUU6IHRoZSB4KCkgcG9zaXRp
b24gb2YgdGhlIHJvdyBzaG91bGQgYmUgdGFibGUoKS0+aEJvcmRlclNwYWNpbmcoKSBzbyB0aGF0
IGl0IGNhbiAKICAgICAgICAgICAgIC8vIHJlcG9ydCB0aGUgY29ycmVjdCBvZmZzZXRMZWZ0LiBI
b3dldmVyLCB0aGF0IHdpbGwgcmVxdWlyZSBhIGxvdCBvZiByZWJhc2VsaW5pbmcgb2YgdGVzdCBy
ZXN1bHRzLgotICAgICAgICAgICAgcm93UmVuZGVyZXItPnNldExvY2F0aW9uKExheW91dFBvaW50
KDAsIG1fcm93UG9zW3JdKSk7CisgICAgICAgICAgICByb3dSZW5kZXJlci0+c2V0TG9jYXRpb24o
TGF5b3V0UG9pbnQoMF9sdSwgbV9yb3dQb3Nbcl0pKTsKICAgICAgICAgICAgIHJvd1JlbmRlcmVy
LT5zZXRMb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKCkpOwogICAgICAgICAgICAgcm93UmVuZGVy
ZXItPnNldExvZ2ljYWxIZWlnaHQobV9yb3dQb3NbciArIDFdIC0gbV9yb3dQb3Nbcl0gLSB2c3Bh
Y2luZyk7CiAgICAgICAgICAgICByb3dSZW5kZXJlci0+dXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsK
QEAgLTEwODksNDIgKzEwODksNDIgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246Om9m
ZnNldExlZnRGb3JSb3dHcm91cEJvcmRlcihSZW5kZXJUYWJsZUNlbGwqIGNlbGwKIHsKICAgICBp
ZiAoc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChzdHls
ZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBjZWxsID8g
Y2VsbC0+eCgpICsgY2VsbC0+d2lkdGgoKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKKyAg
ICAgICAgICAgIHJldHVybiBjZWxsID8gY2VsbC0+eCgpICsgY2VsbC0+d2lkdGgoKSA6IDBfbHU7
CiAgICAgICAgIHJldHVybiAtb3V0ZXJCb3JkZXJMZWZ0KCZzdHlsZSgpKTsKICAgICB9CiAgICAg
Ym9vbCBpc0xhc3RSb3cgPSByb3cgKyAxID09IG1fZ3JpZC5zaXplKCk7Ci0gICAgcmV0dXJuIHJv
d0dyb3VwUmVjdC53aWR0aCgpIC0gbV9yb3dQb3Nbcm93ICsgMV0gKyAoaXNMYXN0Um93ID8gLW91
dGVyQm9yZGVyTGVmdCgmc3R5bGUoKSkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCkpOworICAg
IHJldHVybiByb3dHcm91cFJlY3Qud2lkdGgoKSAtIG1fcm93UG9zW3JvdyArIDFdICsgKGlzTGFz
dFJvdyA/IC1vdXRlckJvcmRlckxlZnQoJnN0eWxlKCkpIDogMF9sdSk7CiB9CiAKIExheW91dFVu
aXQgUmVuZGVyVGFibGVTZWN0aW9uOjpvZmZzZXRUb3BGb3JSb3dHcm91cEJvcmRlcihSZW5kZXJU
YWJsZUNlbGwqIGNlbGwsIEJveFNpZGUgYm9yZGVyU2lkZSwgdW5zaWduZWQgcm93KQogewogICAg
IGJvb2wgaXNMYXN0Um93ID0gcm93ICsgMSA9PSBtX2dyaWQuc2l6ZSgpOwogICAgIGlmIChzdHls
ZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBtX3Jvd1Bvc1ty
b3ddICsgKCFyb3cgJiYgYm9yZGVyU2lkZSA9PSBCU1JpZ2h0ID8gLW91dGVyQm9yZGVyVG9wKCZz
dHlsZSgpKSA6IGlzTGFzdFJvdyAmJiBib3JkZXJTaWRlID09IEJTTGVmdCA/IG91dGVyQm9yZGVy
VG9wKCZzdHlsZSgpKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKSk7CisgICAgICAgIHJldHVy
biBtX3Jvd1Bvc1tyb3ddICsgKCFyb3cgJiYgYm9yZGVyU2lkZSA9PSBCU1JpZ2h0ID8gLW91dGVy
Qm9yZGVyVG9wKCZzdHlsZSgpKSA6IGlzTGFzdFJvdyAmJiBib3JkZXJTaWRlID09IEJTTGVmdCA/
IG91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IDBfbHUpOwogICAgIGlmIChzdHlsZSgpLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIChjZWxsID8gY2VsbC0+eSgpICsg
Y2VsbC0+aGVpZ2h0KCkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCkpICsgKGJvcmRlclNpZGUg
PT0gQlNMZWZ0ID8gb3V0ZXJCb3JkZXJUb3AoJnN0eWxlKCkpIDogTGF5b3V0VW5pdDo6ZnJvbVBp
eGVsKDApKTsKLSAgICByZXR1cm4gYm9yZGVyU2lkZSA9PSBCU1JpZ2h0ID8gLW91dGVyQm9yZGVy
VG9wKCZzdHlsZSgpKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKKyAgICAgICAgcmV0dXJu
IChjZWxsID8gY2VsbC0+eSgpICsgY2VsbC0+aGVpZ2h0KCkgOiAwX2x1KSArIChib3JkZXJTaWRl
ID09IEJTTGVmdCA/IG91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IDBfbHUpOworICAgIHJldHVy
biBib3JkZXJTaWRlID09IEJTUmlnaHQgPyAtb3V0ZXJCb3JkZXJUb3AoJnN0eWxlKCkpIDogMF9s
dTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OnZlcnRpY2FsUm93R3JvdXBC
b3JkZXJIZWlnaHQoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBjb25zdCBMYXlvdXRSZWN0JiByb3dH
cm91cFJlY3QsIHVuc2lnbmVkIHJvdykKIHsKICAgICBib29sIGlzTGFzdFJvdyA9IHJvdyArIDEg
PT0gbV9ncmlkLnNpemUoKTsKICAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKQotICAgICAgICByZXR1cm4gbV9yb3dQb3Nbcm93ICsgMV0gLSBtX3Jvd1Bvc1tyb3ddICsg
KCFyb3cgPyBvdXRlckJvcmRlclRvcCgmc3R5bGUoKSkgOiBpc0xhc3RSb3cgPyBvdXRlckJvcmRl
ckJvdHRvbSgmc3R5bGUoKSkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCkpOworICAgICAgICBy
ZXR1cm4gbV9yb3dQb3Nbcm93ICsgMV0gLSBtX3Jvd1Bvc1tyb3ddICsgKCFyb3cgPyBvdXRlckJv
cmRlclRvcCgmc3R5bGUoKSkgOiBpc0xhc3RSb3cgPyBvdXRlckJvcmRlckJvdHRvbSgmc3R5bGUo
KSkgOiAwX2x1KTsKICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0g
ICAgICAgIHJldHVybiByb3dHcm91cFJlY3QuaGVpZ2h0KCkgLSAoY2VsbCA/IGNlbGwtPnkoKSAr
IGNlbGwtPmhlaWdodCgpIDogTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApKSArIG91dGVyQm9yZGVy
Qm90dG9tKCZzdHlsZSgpKTsKLSAgICByZXR1cm4gY2VsbCA/IHJvd0dyb3VwUmVjdC5oZWlnaHQo
KSAtIChjZWxsLT55KCkgLSBjZWxsLT5oZWlnaHQoKSkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwo
MCk7CisgICAgICAgIHJldHVybiByb3dHcm91cFJlY3QuaGVpZ2h0KCkgLSAoY2VsbCA/IGNlbGwt
PnkoKSArIGNlbGwtPmhlaWdodCgpIDogMF9sdSkgKyBvdXRlckJvcmRlckJvdHRvbSgmc3R5bGUo
KSk7CisgICAgcmV0dXJuIGNlbGwgPyByb3dHcm91cFJlY3QuaGVpZ2h0KCkgLSAoY2VsbC0+eSgp
IC0gY2VsbC0+aGVpZ2h0KCkpIDogMF9sdTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNl
Y3Rpb246Omhvcml6b250YWxSb3dHcm91cEJvcmRlcldpZHRoKFJlbmRlclRhYmxlQ2VsbCogY2Vs
bCwgY29uc3QgTGF5b3V0UmVjdCYgcm93R3JvdXBSZWN0LCB1bnNpZ25lZCByb3csIHVuc2lnbmVk
IGNvbHVtbikKIHsKICAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7
CiAgICAgICAgIGlmIChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAg
ICAgIHJldHVybiByb3dHcm91cFJlY3Qud2lkdGgoKSAtIChjZWxsID8gY2VsbC0+eCgpICsgY2Vs
bC0+d2lkdGgoKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKSkgKyAoIWNvbHVtbiA/IG91dGVy
Qm9yZGVyTGVmdCgmc3R5bGUoKSkgOiBjb2x1bW4gPT0gdGFibGUoKS0+bnVtRWZmQ29scygpID8g
b3V0ZXJCb3JkZXJSaWdodCgmc3R5bGUoKSkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCkpOwot
ICAgICAgICByZXR1cm4gY2VsbCA/IHJvd0dyb3VwUmVjdC53aWR0aCgpIC0gKGNlbGwtPngoKSAt
IGNlbGwtPndpZHRoKCkpIDogTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApOworICAgICAgICAgICAg
cmV0dXJuIHJvd0dyb3VwUmVjdC53aWR0aCgpIC0gKGNlbGwgPyBjZWxsLT54KCkgKyBjZWxsLT53
aWR0aCgpIDogMF9sdSkgKyAoIWNvbHVtbiA/IG91dGVyQm9yZGVyTGVmdCgmc3R5bGUoKSkgOiBj
b2x1bW4gPT0gdGFibGUoKS0+bnVtRWZmQ29scygpID8gb3V0ZXJCb3JkZXJSaWdodCgmc3R5bGUo
KSkgOiAwX2x1KTsKKyAgICAgICAgcmV0dXJuIGNlbGwgPyByb3dHcm91cFJlY3Qud2lkdGgoKSAt
IChjZWxsLT54KCkgLSBjZWxsLT53aWR0aCgpKSA6IDBfbHU7CiAgICAgfQogICAgIGJvb2wgaXNM
YXN0Um93ID0gcm93ICsgMSA9PSBtX2dyaWQuc2l6ZSgpOwotICAgIHJldHVybiBtX3Jvd1Bvc1ty
b3cgKyAxXSAtIG1fcm93UG9zW3Jvd10gKyAoaXNMYXN0Um93ID8gb3V0ZXJCb3JkZXJMZWZ0KCZz
dHlsZSgpKSA6ICFyb3cgPyBvdXRlckJvcmRlclJpZ2h0KCZzdHlsZSgpKSA6IExheW91dFVuaXQ6
OmZyb21QaXhlbCgwKSk7CisgICAgcmV0dXJuIG1fcm93UG9zW3JvdyArIDFdIC0gbV9yb3dQb3Nb
cm93XSArIChpc0xhc3RSb3cgPyBvdXRlckJvcmRlckxlZnQoJnN0eWxlKCkpIDogIXJvdyA/IG91
dGVyQm9yZGVyUmlnaHQoJnN0eWxlKCkpIDogMF9sdSk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGVT
ZWN0aW9uOjpwYWludFJvd0dyb3VwQm9yZGVySWZSZXF1aXJlZChjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCB1bnNpZ25lZCByb3csIHVu
c2lnbmVkIGNvbHVtbiwgQm94U2lkZSBib3JkZXJTaWRlLCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwp
CkBAIC0xMTM3LDcgKzExMzcsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRSb3dH
cm91cEJvcmRlcklmUmVxdWlyZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgogICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CiAgICAgYm9vbCBhbnRpYWxpYXMg
PSBzaG91bGRBbnRpYWxpYXNMaW5lcyhwYWludEluZm8uY29udGV4dCgpKTsKICAgICBMYXlvdXRS
ZWN0IHJvd0dyb3VwUmVjdCA9IExheW91dFJlY3QocGFpbnRPZmZzZXQsIHNpemUoKSk7Ci0gICAg
cm93R3JvdXBSZWN0Lm1vdmVCeSgtTGF5b3V0UG9pbnQob3V0ZXJCb3JkZXJMZWZ0KCZzdHlsZSks
IChib3JkZXJTaWRlID09IEJTUmlnaHQpID8gTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApIDogb3V0
ZXJCb3JkZXJUb3AoJnN0eWxlKSkpOworICAgIHJvd0dyb3VwUmVjdC5tb3ZlQnkoLUxheW91dFBv
aW50KG91dGVyQm9yZGVyTGVmdCgmc3R5bGUpLCAoYm9yZGVyU2lkZSA9PSBCU1JpZ2h0KSA/IDBf
bHUgOiBvdXRlckJvcmRlclRvcCgmc3R5bGUpKSk7CiAKICAgICBzd2l0Y2ggKGJvcmRlclNpZGUp
IHsKICAgICBjYXNlIEJTVG9wOgpAQCAtMTU2NSw3ICsxNTY1LDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OnNldExvZ2ljYWxQb3NpdGlvbkZvckNlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxs
LCB1bnNpZ24KIHsKICAgICBMYXlvdXRQb2ludCBvbGRDZWxsTG9jYXRpb24gPSBjZWxsLT5sb2Nh
dGlvbigpOwogCi0gICAgTGF5b3V0UG9pbnQgY2VsbExvY2F0aW9uKDAsIG1fcm93UG9zW2NlbGwt
PnJvd0luZGV4KCldKTsKKyAgICBMYXlvdXRQb2ludCBjZWxsTG9jYXRpb24oMF9sdSwgbV9yb3dQ
b3NbY2VsbC0+cm93SW5kZXgoKV0pOwogICAgIExheW91dFVuaXQgaG9yaXpvbnRhbEJvcmRlclNw
YWNpbmcgPSB0YWJsZSgpLT5oQm9yZGVyU3BhY2luZygpOwogCiAgICAgLy8gRklYTUU6IFRoZSB0
YWJsZSdzIGRpcmVjdGlvbiBzaG91bGQgZGV0ZXJtaW5lIG91ciByb3cncyBkaXJlY3Rpb24sIG5v
dCB0aGUgc2VjdGlvbidzIChzZWUgYnVnIDk2NjkxKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCmluZGV4IDI1NzM5MDM5NmY1MGEzMjI2NmY4MmEwNDhlNDg2NzJjOTM4
YTE1NWQuLmQ2NWE1OGRhYTk2OTQ4ZjJiOGZjMDQ1ZDUyOWUzODc2NmE4MmM5ODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtNTk4LDcgKzU5OCw3IEBAIExh
eW91dFBvaW50IFJlbmRlclRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihj
b25zdCBSZW5kZXJCb3gmIG11dGVCCiAgICAgRmxvYXRQb2ludCBhYnNQb2ludCA9IG11dGVCdXR0
b25Cb3gubG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQobXV0ZUJ1dHRvbkJveC5vZmZzZXRMZWZ0
KCksIHkpLCBJc0ZpeGVkIHwgVXNlVHJhbnNmb3Jtcyk7CiAgICAgaWYgKGFic1BvaW50LnkoKSA8
IDApCiAgICAgICAgIHkgPSBtdXRlQnV0dG9uQm94LmhlaWdodCgpOwotICAgIHJldHVybiBMYXlv
dXRQb2ludCgwLCB5KTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoMF9sdSwgeSk7CiB9CiAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmlu
ZGV4IDFlODY2NGJlMGQ1NDQwMGI1MmFkZTQ3MzJmNWQ2N2Y5OWNmNWQ2MjkuLjhmZDMwMWYzMWMz
YzgzODE0OGIzMDlhNTVjZWM0YTY3NmExNTE4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIFJlbmRl
clRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJPYmplY3QmIG8sCiAKICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGluIG9yZGVyIHRvIGVuc3Vy
ZSBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgbGF5b3V0IHRlc3QgcmVzdWx0cy4KICAgICBp
ZiAoYWRqdXN0Rm9yVGFibGVDZWxscykKLSAgICAgICAgci5tb3ZlKDAsIC1kb3duY2FzdDxSZW5k
ZXJUYWJsZUNlbGw+KCpvLmNvbnRhaW5pbmdCbG9jaygpKS5pbnRyaW5zaWNQYWRkaW5nQmVmb3Jl
KCkpOworICAgICAgICByLm1vdmUoMF9sdSwgLWRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKm8u
Y29udGFpbmluZ0Jsb2NrKCkpLmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSk7CiAKICAgICAvLyBG
SVhNRTogQ29udmVydCBsYXlvdXQgdGVzdCByZXN1bHRzIHRvIHJlcG9ydCBzdWItcGl4ZWwgdmFs
dWVzLCBpbiB0aGUgbWVhbnRpbWUgdXNpbmcgZW5jbG9zaW5nSW50UmVjdAogICAgIC8vIGZvciBj
b25zaXN0ZW5jeSB3aXRoIG9sZCByZXN1bHRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwCmluZGV4IDkzNTdjYmNlOWY0ZTliOTFmZjE3YTEwNWM0Yzg0OWVhMTdkZjY3ZTIu
LmRmNDc5ZmNmOWY0YWU5NDA4YWM2ZmIzZjJkZjIxMTg5MWIxOGUzMDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTE3Myw3ICsxNzMsNyBAQCBib29sIFJlbmRl
clZpZXc6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgbAogCiBSZW5kZXJCb3g6OkxvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBS
ZW5kZXJWaWV3Ojpjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IExheW91dFVuaXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgIXNob3VsZFVzZVByaW50aW5nTGF5
b3V0KCkgPyBMYXlvdXRVbml0KHZpZXdMb2dpY2FsSGVpZ2h0KCkpIDogbG9naWNhbEhlaWdodCwg
TGF5b3V0VW5pdCgpLCBDb21wdXRlZE1hcmdpblZhbHVlcygpIH07CisgICAgcmV0dXJuIHsgIXNo
b3VsZFVzZVByaW50aW5nTGF5b3V0KCkgPyBMYXlvdXRVbml0KHZpZXdMb2dpY2FsSGVpZ2h0KCkp
IDogbG9naWNhbEhlaWdodCwgMF9sdSwgQ29tcHV0ZWRNYXJnaW5WYWx1ZXMoKSB9OwogfQogCiB2
b2lkIFJlbmRlclZpZXc6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCkBAIC0yMDksNyArMjA5LDcgQEAg
dm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogCiAgICAgaWYgKHNob3VsZFVzZVByaW50aW5nTGF5
b3V0KCkpIHsKICAgICAgICAgaWYgKCFtX3BhZ2VMb2dpY2FsU2l6ZSkKLSAgICAgICAgICAgIG1f
cGFnZUxvZ2ljYWxTaXplID0gTGF5b3V0U2l6ZShsb2dpY2FsV2lkdGgoKSwgMCk7CisgICAgICAg
ICAgICBtX3BhZ2VMb2dpY2FsU2l6ZSA9IExheW91dFNpemUobG9naWNhbFdpZHRoKCksIDBfbHUp
OwogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fcGFnZUxvZ2ljYWxTaXpl
LT53aWR0aCgpOwogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5oCmluZGV4IDM3OTAyMWUwMjg2MTVmOWI0MDM1MzRiMTVlMGI2MWQ1NTBlZDcyMWUu
LmE2Nzk1YTQwOTNiNjc0OWEwOTM1YTk0OTkxNDgyMjU5MjExMmE5NjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaApAQCAtMjA3LDcgKzIwNyw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBpbmNsdWRlSW5pdGlhbExldHRlckZvckJveChJbmxpbmVCb3gmKSBjb25zdDsK
ICAgICBib29sIGluY2x1ZGVNYXJnaW5Gb3JCb3goSW5saW5lQm94JikgY29uc3Q7CiAKLSAgICBM
YXlvdXRVbml0IGxpbmVTbmFwQWRqdXN0bWVudChMYXlvdXRVbml0IGRlbHRhID0gMCkgY29uc3Q7
CisgICAgTGF5b3V0VW5pdCBsaW5lU25hcEFkanVzdG1lbnQoTGF5b3V0VW5pdCBkZWx0YSA9IDBf
bHUpIGNvbnN0OwogCiAgICAgTGF5b3V0VW5pdCBiZWZvcmVBbm5vdGF0aW9uc0FkanVzdG1lbnQo
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQu
Y3BwCmluZGV4IGYxMGZjNDYxMjE3ZWVjMTg4OWZhOTQzMjdhM2JiZDlmMGRhMWQwYTAuLjExMmE3
ZmE4MTliYjFlZWZhODVkMGUwOTk1M2NmNmU1MmJmNWRmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKQEAgLTYwNyw3ICs2MDcsNyBAQCBzdGF0
aWMgdm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cs
IExpbmVTdGF0ZSYgbGluZSwgYwogICAgIGJvb2wgc2hvdWxkQXBwbHlUZXh0SW5kZW50ID0gIWZs
b3cuaXNBbm9ueW1vdXMoKSB8fCBmbG93LnBhcmVudCgpLT5maXJzdENoaWxkKCkgPT0gJmZsb3c7
CiAgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBmbG93LmxvZ2ljYWxIZWlnaHQoKTsKICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBmbG93Lm1pbkxpbmVIZWlnaHRGb3JSZXBsYWNlZFJlbmRl
cmVyKGZhbHNlLCAwKTsKLSAgICBsaW5lLnNldExvZ2ljYWxMZWZ0T2Zmc2V0KGZsb3cubG9naWNh
bExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgRG9Ob3RJbmRlbnRUZXh0LCBsb2dpY2FsSGVpZ2h0
KSArIChzaG91bGRBcHBseVRleHRJbmRlbnQgJiYgaXNGaXJzdExpbmUgPyBmbG93LnRleHRJbmRl
bnRPZmZzZXQoKSA6IExheW91dFVuaXQoMCkpKTsKKyAgICBsaW5lLnNldExvZ2ljYWxMZWZ0T2Zm
c2V0KGZsb3cubG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgRG9Ob3RJbmRlbnRUZXh0
LCBsb2dpY2FsSGVpZ2h0KSArIChzaG91bGRBcHBseVRleHRJbmRlbnQgJiYgaXNGaXJzdExpbmUg
PyBmbG93LnRleHRJbmRlbnRPZmZzZXQoKSA6IDBfbHUpKTsKICAgICBmbG9hdCBsb2dpY2FsUmln
aHRPZmZzZXQgPSBmbG93LmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoaGVpZ2h0LCBEb05vdElu
ZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpOwogICAgIGxpbmUuc2V0QXZhaWxhYmxlV2lkdGgoc3Rk
OjptYXg8ZmxvYXQ+KDAsIGxvZ2ljYWxSaWdodE9mZnNldCAtIGxpbmUubG9naWNhbExlZnRPZmZz
ZXQoKSkpOwogICAgIGlmIChzdHlsZS50ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlm
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
UGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dFBhZ2luYXRpb24uY3BwCmluZGV4IDgyM2UwYzMyZDdjNWM1Y2QzZjU0MzlkMDFjNzcwOGYzNmM2
YWMwMjMuLjk5N2RkOTM0MDMzYjcyMjQ3NzkxMGE4YjRmNTVjMDQyODg2YjU0NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0
aW9uLmNwcApAQCAtODgsNyArODgsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUxpbmVCcmVh
a0luZGV4KHVuc2lnbmVkIGJyZWFrQ2FuZGlkYXRlLCB1bnNpZ25lZCBsaW5lQ291bgogc3RhdGlj
IExheW91dFVuaXQgY29tcHV0ZU9mZnNldEFmdGVyTGluZUJyZWFrKExheW91dFVuaXQgbGluZUJy
ZWFrUG9zaXRpb24sIGJvb2wgaXNGaXJzdExpbmUsIGJvb2wgYXRUaGVUb3BPZkNvbHVtbk9yUGFn
ZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQogewogICAgIC8vIE5vIG9mZnNldCBmb3Ig
dG9wIG9mIHRoZSBwYWdlIGxpbmVzIHVubGVzcyB3aWRvd3MgcHVzaGVkIHRoZSBsaW5lIGJyZWFr
LgotICAgIExheW91dFVuaXQgb2Zmc2V0ID0gaXNGaXJzdExpbmUgPyBmbG93LmJvcmRlckFuZFBh
ZGRpbmdCZWZvcmUoKSA6IExheW91dFVuaXQoKTsKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IGlz
Rmlyc3RMaW5lID8gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiAwX2x1OwogICAgIGlm
IChhdFRoZVRvcE9mQ29sdW1uT3JQYWdlKQogICAgICAgICByZXR1cm4gb2Zmc2V0OwogICAgIHJl
dHVybiBvZmZzZXQgKyBmbG93LnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxp
bmVCcmVha1Bvc2l0aW9uLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdlQm91bmRhcnkpOwpA
QCAtMTA0LDggKzEwNCw4IEBAIHN0YXRpYyB2b2lkIHNldFBhZ2VCcmVha0ZvckxpbmUodW5zaWdu
ZWQgbGluZUJyZWFrSW5kZXgsIFBhZ2luYXRlZExpbmVzJiBsaW5lcywKICAgICBhdXRvIG9ycGhh
bkRvZXNOb3RGaXQgPSAhc3R5bGUuaGFzQXV0b09ycGhhbnMoKSAmJiBzdHlsZS5vcnBoYW5zKCkg
PiAoc2hvcnQpbGluZUJyZWFrSW5kZXg7CiAgICAgaWYgKGZpcnN0TGluZURvZXNOb3RGaXQgfHwg
b3JwaGFuRG9lc05vdEZpdCkgewogICAgICAgICBhdXRvIGZpcnN0TGluZSA9IGxpbmVzLmZpcnN0
KCk7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5lT3ZlcmZsb3dSZWN0ID0gY29tcHV0ZU92ZXJmbG93
KGZsb3csIExheW91dFJlY3QoMCwgZmlyc3RMaW5lLnRvcCwgMCwgZmlyc3RMaW5lLmhlaWdodCkp
OwotICAgICAgICBhdXRvIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcgPSBzdGQ6Om1heDxMYXlvdXRV
bml0PigtZmlyc3RMaW5lT3ZlcmZsb3dSZWN0LnkoKSwgMCk7CisgICAgICAgIGF1dG8gZmlyc3RM
aW5lT3ZlcmZsb3dSZWN0ID0gY29tcHV0ZU92ZXJmbG93KGZsb3csIExheW91dFJlY3QoMF9sdSwg
Zmlyc3RMaW5lLnRvcCwgMF9sdSwgZmlyc3RMaW5lLmhlaWdodCkpOworICAgICAgICBhdXRvIGZp
cnN0TGluZVVwcGVyT3ZlcmhhbmcgPSBzdGQ6Om1heDxMYXlvdXRVbml0PigtZmlyc3RMaW5lT3Zl
cmZsb3dSZWN0LnkoKSwgMF9sdSk7CiAgICAgICAgIGZsb3cuc2V0UGFnaW5hdGlvblN0cnV0KGxp
bmUudG9wICsgcmVtYWluaW5nTG9naWNhbEhlaWdodCArIGZpcnN0TGluZVVwcGVyT3Zlcmhhbmcp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RhYmxlTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlv
dXQuaAppbmRleCA5MzllNWRlZTJlOTk3MTk1MzFiOWIzMjQ2YzU4MzMzODQ0Y2U0OWRiLi41YjZj
ZDAxZDE4YmE5MWQ5NDA2ODlmNmYxZmY3ZDZiZDgxMGNhMzg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGFibGVMYXlvdXQuaApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+VGFibGVMYXlvdXQoKSA9IGRlZmF1bHQ7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUlu
dHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluV2lkdGgsIExheW91dFVuaXQmIG1h
eFdpZHRoKSA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHNjYWxlZFdpZHRoRnJvbVBlcmNl
bnRDb2x1bW5zKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5pdCgwKTsgfQorICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBzY2FsZWRXaWR0aEZyb21QZXJjZW50Q29sdW1ucygpIGNvbnN0IHsgcmV0dXJu
IDBfbHU7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlQcmVmZXJyZWRMb2dpY2FsV2lkdGhRdWly
a3MoTGF5b3V0VW5pdCYgbWluV2lkdGgsIExheW91dFVuaXQmIG1heFdpZHRoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaAppbmRleCA2MmYzOTc3MTY0NzYwMjNmYWYw
YTBhZThhN2ZkMTkyYTM1ZTg5ZmY4Li4xYmEwMWRkNDEyMTBhYjM0OGY2ODY3NzhhNmFkN2Q2N2Zh
NDQxNmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2lu
Z0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0Nv
bnRleHQuaApAQCAtODU1LDcgKzg1NSw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6
aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIHNlZSBpZiBhIG1lYXN1cmVtZW50IHRoYXQgZXhjbHVkZXMg
dGhlIHN0b3Agd291bGQgZml0LiBJZiBzbywgdGhlbiB3ZSBzaG91bGQgaGFuZwogICAgICAgICAg
ICAgLy8gdGhlIHN0b3AvY29tbWEgYXQgdGhlIGVuZC4gRmlyc3QgbWVhc3VyZSBpbmNsdWRpbmcg
dGhlIGNvbW1hLgogICAgICAgICAgICAgbV9oYW5nc0F0RW5kID0gZmFsc2U7Ci0gICAgICAgICAg
ICBmbG9hdCBpbmxpbmVTdGFydFdpZHRoID0gIW1fYXBwbGllZFN0YXJ0V2lkdGggPyBpbmxpbmVM
b2dpY2FsV2lkdGgobV9jdXJyZW50LnJlbmRlcmVyKCksIHRydWUsIGZhbHNlKSA6IExheW91dFVu
aXQoKTsKKyAgICAgICAgICAgIGZsb2F0IGlubGluZVN0YXJ0V2lkdGggPSAhbV9hcHBsaWVkU3Rh
cnRXaWR0aCA/IGlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQucmVuZGVyZXIoKSwgdHJ1ZSwg
ZmFsc2UpIDogMF9sdTsKICAgICAgICAgICAgIGZsb2F0IHdpZHRoSW5jbHVkaW5nQ29tbWEgPSBj
b21wdXRlQWRkaXRpb25hbEJldHdlZW5Xb3Jkc1dpZHRoKHJlbmRlclRleHQsIHRleHRMYXlvdXQs
IGMsIHdvcmRUcmFpbGluZ1NwYWNlLCBmYWxsYmFja0ZvbnRzLCB3b3JkTWVhc3VyZW1lbnRzLCBm
b250LCBpc0ZpeGVkUGl0Y2gsIGxhc3RTcGFjZSwgbGFzdFNwYWNlV29yZFNwYWNpbmcsIHdvcmRT
cGFjaW5nRm9yV29yZE1lYXN1cmVtZW50LCBtX2N1cnJlbnQub2Zmc2V0KCkgKyAxKSArIGlubGlu
ZVN0YXJ0V2lkdGg7CiAgICAgICAgICAgICBtX3dpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgod2lk
dGhJbmNsdWRpbmdDb21tYSk7CiAgICAgICAgICAgICBpZiAoIW1fd2lkdGguZml0c09uTGluZSgp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0
U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRTdGF0ZS5o
CmluZGV4IDdiMWQ2ZGU3YTc0YWRkZjE3ZGRmM2M0YTg4NDcyNTM3YTZlOGI3Y2EuLjc5MmY1NGFl
MWE0YmU1MWM2NGY3NDUzNTFkNzBjNDk0NTlmNTgxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRTdGF0ZS5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHVi
bGljOgogICAgICAgICBtX3JlcGFpbnRMb2dpY2FsVG9wID0gbV9yZXBhaW50TG9naWNhbEJvdHRv
bSA9IGxvZ2ljYWxIZWlnaHQ7CiAgICAgfQogCi0gICAgdm9pZCB1cGRhdGVSZXBhaW50UmFuZ2VG
cm9tQm94KFJvb3RJbmxpbmVCb3gqIGJveCwgTGF5b3V0VW5pdCBwYWdpbmF0aW9uRGVsdGEgPSAw
KQorICAgIHZvaWQgdXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChSb290SW5saW5lQm94KiBib3gs
IExheW91dFVuaXQgcGFnaW5hdGlvbkRlbHRhID0gMF9sdSkKICAgICB7CiAgICAgICAgIG1fdXNl
c1JlcGFpbnRCb3VuZHMgPSB0cnVlOwogICAgICAgICBtX3JlcGFpbnRMb2dpY2FsVG9wID0gc3Rk
OjptaW4obV9yZXBhaW50TG9naWNhbFRvcCwgYm94LT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3co
KSArIHN0ZDo6bWluPExheW91dFVuaXQ+KHBhZ2luYXRpb25EZWx0YSwgMCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZVdpZHRoLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAppbmRleCAxYTVjYTMwZGZjN2JhZjYyNzhk
YjAxZTY2NmY5MjJiOTg4MGJiNDg0Li5kYmZkYjcxNjlkMzI0ZjM2NzMwMDA0NmQ4MzFlMzdjNDgz
NDdkMzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lk
dGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaApAQCAt
NjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNDb21taXR0ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0NvbW1pdHRlZDsgfQogICAgIGJvb2wgaGFzQ29tbWl0dGVkUmVwbGFjZWQoKSBj
b25zdCB7IHJldHVybiBtX2hhc0NvbW1pdHRlZFJlcGxhY2VkOyB9CiAKLSAgICB2b2lkIHVwZGF0
ZUF2YWlsYWJsZVdpZHRoKExheW91dFVuaXQgbWluaW11bUhlaWdodCA9IDApOworICAgIHZvaWQg
dXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCBtaW5pbXVtSGVpZ2h0ID0gMF9sdSk7CiAg
ICAgdm9pZCBzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoY29uc3QgRmxv
YXRpbmdPYmplY3QmKTsKICAgICB2b2lkIGFkZFVuY29tbWl0dGVkV2lkdGgoZmxvYXQgZGVsdGEp
CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRo
T3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0
b3IuY3BwCmluZGV4IGQ2Mjg4NDk0MmM0ODUxYTNhNTA3ZmU2ZDQwZWVhOGJhM2FiODQ5NjIuLmEy
NGEyNjYzNDlmYmI3ZDNlZjFlY2U5NDQzNzY1ZDVmYzBlY2I5NjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKQEAgLTcyMSw3ICs3MjEs
NyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IExheW91dAogICAgICAgICBmbG9hdCByYWRpY2FsSG9yaXpv
bnRhbFNjYWxlID0gc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMSA6IC0xOwogICAg
ICAgICBpZiAocmFkaWNhbEhvcml6b250YWxTY2FsZSA9PSAtMSB8fCBtX3JhZGljYWxWZXJ0aWNh
bFNjYWxlID4gMSkgewogICAgICAgICAgICAgTGF5b3V0UG9pbnQgc2NhbGVPcmlnaW4gPSBwYWlu
dE9mZnNldDsKLSAgICAgICAgICAgIHNjYWxlT3JpZ2luLm1vdmUobV93aWR0aCAvIDIsIDApOwor
ICAgICAgICAgICAgc2NhbGVPcmlnaW4ubW92ZShtX3dpZHRoIC8gMiwgMF9sdSk7CiAgICAgICAg
ICAgICBwYWludEluZm8uYXBwbHlUcmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRl
KHNjYWxlT3JpZ2luKS5zY2FsZShyYWRpY2FsSG9yaXpvbnRhbFNjYWxlLCBtX3JhZGljYWxWZXJ0
aWNhbFNjYWxlKS50cmFuc2xhdGUoLXNjYWxlT3JpZ2luKSk7CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaAppbmRleCA3
MzVlYjZhNjM2M2IzMTFiNWFjOTY3NWU5MjU1OTgwYThkM2UxNTUwLi5iYWRlNDhhODIxNGRlZDRi
M2QwYTAxOGMzNmFiMDQ0YjlmNjYyMzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHNldEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBHbHlwaEFzc2Vt
Ymx5RGF0YSYpOwogICAgIHZvaWQgZ2V0TWF0aFZhcmlhbnRzV2l0aEZhbGxiYWNrKGNvbnN0IFJl
bmRlclN0eWxlJiwgYm9vbCBpc1ZlcnRpY2FsLCBWZWN0b3I8R2x5cGg+JiwgVmVjdG9yPE9wZW5U
eXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4mKTsKICAgICB2b2lkIGNhbGN1bGF0ZURpc3BsYXlT
dHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2b2lkIGNhbGN1bGF0
ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYsIGJvb2wgY2FsY3VsYXRlTWF4UHJlZmVy
cmVkV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSA9IDApOworICAgIHZvaWQgY2FsY3VsYXRl
U3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiwgYm9vbCBjYWxjdWxhdGVNYXhQcmVmZXJy
ZWRXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplID0gMF9sdSk7CiAgICAgYm9vbCBjYWxjdWxh
dGVHbHlwaEFzc2VtYmx5RmFsbGJhY2soY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFz
c2VtYmx5UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNvbnN0OwogCiAgICAgTGF5b3V0UmVj
dCBwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgR2x5cGhE
YXRhJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
aAppbmRleCA5MzkyNmY2ZDU2YzhiOTJhYjgyNzg1ODhlZWFmYzczY2UzODQ2NzlhLi4zYzRlNmRl
NDBlNThlZDY2ODdmODRmYzAxZmYzNTlkY2Y0ZTQ3ZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCkBAIC03NSw3ICs3NSw3
IEBAIHByb3RlY3RlZDoKICAgICB9CiAKICAgICBMYXlvdXRVbml0IG1hdGhBeGlzSGVpZ2h0KCkg
Y29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBtaXJyb3JJZk5lZWRlZChMYXlvdXRVbml0IGhvcml6b250
YWxPZmZzZXQsIExheW91dFVuaXQgYm94V2lkdGggPSAwKSBjb25zdDsKKyAgICBMYXlvdXRVbml0
IG1pcnJvcklmTmVlZGVkKExheW91dFVuaXQgaG9yaXpvbnRhbE9mZnNldCwgTGF5b3V0VW5pdCBi
b3hXaWR0aCA9IDBfbHUpIGNvbnN0OwogICAgIExheW91dFVuaXQgbWlycm9ySWZOZWVkZWQoTGF5
b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0LCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdCB7
IHJldHVybiBtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0LCBjaGlsZC5sb2dpY2FsV2lk
dGgoKSk7IH0KIAogICAgIHN0YXRpYyBMYXlvdXRVbml0IGFzY2VudEZvckNoaWxkKGNvbnN0IFJl
bmRlckJveCYgY2hpbGQpCkBAIC04Myw3ICs4Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0
dXJuIGNoaWxkLmZpcnN0TGluZUJhc2VsaW5lKCkudmFsdWVfb3IoY2hpbGQubG9naWNhbEhlaWdo
dCgpKTsKICAgICB9CiAKLSAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApIG92ZXJyaWRlOworICAgIHZvaWQg
bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2Fs
SGVpZ2h0ID0gMF9sdSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBsYXlvdXRJbnZhbGlkTWFya3VwKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCmluZGV4IDBh
ODdlNDU5ZjdlYWM4OWEyOWU3NzVjZmM1Y2YzNDUwNzU0ZjI5MzEuLjQ5NTg1NzFjMTI4N2IyNDYz
ZTQyZGM0OTRjYTFlODgxMzBlMTVjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCkBAIC0xODQsMTEgKzE4
NCwxMSBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTEZyYWN0aW9uOjpob3Jpem9udGFsT2Zmc2V0
KFJlbmRlckJveCYgY2hpbGQsIE1hdGhNTEZyYWN0aQogICAgIGNhc2UgTWF0aE1MRnJhY3Rpb25F
bGVtZW50OjpGcmFjdGlvbkFsaWdubWVudENlbnRlcjoKICAgICAgICAgcmV0dXJuIExheW91dFVu
aXQoKGxvZ2ljYWxXaWR0aCgpIC0gY2hpbGQubG9naWNhbFdpZHRoKCkpIC8gMik7CiAgICAgY2Fz
ZSBNYXRoTUxGcmFjdGlvbkVsZW1lbnQ6OkZyYWN0aW9uQWxpZ25tZW50TGVmdDoKLSAgICAgICAg
cmV0dXJuIExheW91dFVuaXQoMCk7CisgICAgICAgIHJldHVybiAwX2x1OwogICAgIH0KIAogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBMYXlvdXRVbml0KDApOworICAgIHJl
dHVybiAwX2x1OwogfQogCiBMYXlvdXRVbml0IFJlbmRlck1hdGhNTEZyYWN0aW9uOjphc2NlbnRP
dmVySG9yaXpvbnRhbEF4aXMoKSBjb25zdApAQCAtMjU4LDcgKzI1OCw3IEBAIHZvaWQgUmVuZGVy
TWF0aE1MRnJhY3Rpb246OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0CiAgICAgaWYgKGluZm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSB8
fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmls
aXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSB8fCAhaXNWYWxpZCgpIHx8ICF0aGlja25lc3Mp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBy
b3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpICsgTGF5b3V0UG9pbnQoMCwg
YXNjZW50T3Zlckhvcml6b250YWxBeGlzKCkpKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50
T2Zmc2V0ID0gcm91bmRlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSArIExheW91
dFBvaW50KDBfbHUsIGFzY2VudE92ZXJIb3Jpem9udGFsQXhpcygpKSk7CiAKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9u
LmgKaW5kZXggMzE0NWNkMzNlZDA1YjA2YzAxMGJjOTJjODcwMWUyYmUzNGM0NDYyNi4uNWQxZDE3
YTkyMzJkZTRmNGI4ZmRlMDI1NjMyNWIxMjIwODQ3NzY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaApAQCAtNTAs
NyArNTAsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiUmVuZGVyTWF0aE1MRnJhY3Rpb24iOyB9CiAKICAgICB2b2lkIGNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgZmluYWw7Ci0gICAgdm9pZCBsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBm
aW5hbDsKKyAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0
VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDBfbHUpIGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8
aW50PiBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBmaW5hbDsKICAgICBSZW5kZXJNYXRoTUxPcGVy
YXRvciogdW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmNwcAppbmRleCBl
N2M1Y2RmMWVmOTY3YTA0ZDAzN2E5ODM1YjY5YWYyZmRmZmEwNTA4Li4xNzM2ODExY2U3NDBlMzA2
NmY0OWYzMzEyYTU1YTljOTUxMzUwZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxNYXRoOjpjZW50ZXJDaGlsZHJlbihMYXlvdXRVbml0IGNvbnRlbnRXaWR0
aCkKICAgICAgICAgY2VudGVyQmxvY2tPZmZzZXQgPSAtY2VudGVyQmxvY2tPZmZzZXQ7CiAgICAg
Zm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgaWYgKCFjaGlsZC0+aXNPdXRPZkZsb3dQb3Np
dGlvbmVkKCkpCi0gICAgICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQtPmxvY2F0aW9u
KCkgKyBMYXlvdXRQb2ludChjZW50ZXJCbG9ja09mZnNldCwgMCkpOworICAgICAgICAgICAgY2hp
bGQtPnNldExvY2F0aW9uKGNoaWxkLT5sb2NhdGlvbigpICsgTGF5b3V0UG9pbnQoY2VudGVyQmxv
Y2tPZmZzZXQsIDBfbHUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmgKaW5kZXggNjA4NGJjZTJmMDE4MmEyMDQy
NmUxNTM3OWU2YTFlZjljMzM0ZDg2Yy4uZmJkNzlmZDRlM2RmMDM3MTRmMDFkZTBjYmU2YTE2ZWFm
MjAwMzUwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxNYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxNYXRoLmgKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlJlbmRlck1hdGhNTE1hdGgiOyB9
CiAKICAgICB2b2lkIGNlbnRlckNoaWxkcmVuKExheW91dFVuaXQgY29udGVudFdpZHRoKTsKLSAg
ICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdl
TG9naWNhbEhlaWdodCA9IDApIGZpbmFsOworICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxh
eW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMF9sdSkgZmluYWw7
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE1lbmNsb3NlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE1lbmNsb3NlLmgKaW5kZXggNzg1NWU1OTkwN2E2NTc1Y2E5ZDE5NGZmMDIwNjEy
ZjUwMDE2MGI0ZS4uZDFkZTc1NGRlMjVkZjUwNTA5NTA3YzkzMWIxYTA2OTk1YzhiMmU1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNZW5j
bG9zZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
TWVuY2xvc2UuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiUmVuZGVyTWF0aE1MTWVu
Y2xvc2UiOyB9CiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIGZpbmFs
OwotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0
IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgZmluYWw7CisgICAgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwX2x1KSBm
aW5hbDsKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JikgZmlu
YWw7CiAKICAgICBMYXlvdXRVbml0IHJ1bGVUaGlja25lc3MoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5j
cHAKaW5kZXggNzc3N2JkYjAwMjdjYjM2NjdiYTk4MDMyODNlYjMxOGFkOWU3OWVhNy4uMThiZDlj
Y2MyMTU0ODQ1OThiMTM1YTRhMDAwMjM2YzRmY2ZjNjY4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKQEAg
LTIzOCw3ICsyMzgsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZwogICAgICAgICBzZXRMb2dp
Y2FsV2lkdGgod2lkdGgpOwogCiAgICAgICAgIC8vIFdlIHRoZW4gbW92ZSB0aGUgY2hpbGRyZW4g
dG8gdGFrZSBzcGFjaW5nIGludG8gYWNjb3VudC4KLSAgICAgICAgTGF5b3V0UG9pbnQgaG9yaXpv
bnRhbFNoaWZ0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbGVh
ZGluZ1NwYWNlVmFsdWUgOiAtbGVhZGluZ1NwYWNlVmFsdWUsIDApOworICAgICAgICBMYXlvdXRQ
b2ludCBob3Jpem9udGFsU2hpZnQoc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIgPyBsZWFkaW5nU3BhY2VWYWx1ZSA6IC1sZWFkaW5nU3BhY2VWYWx1ZSwgMF9sdSk7CiAg
ICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKQogICAgICAgICAgICAgY2hpbGQtPnNldExvY2F0aW9u
KGNoaWxkLT5sb2NhdGlvbigpICsgaG9yaXpvbnRhbFNoaWZ0KTsKICAgICB9CkBAIC0zMDksNyAr
MzA5LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQoUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQKICAgICAgICAgcmV0dXJuOwogCiAgICAg
TGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwot
ICAgIG9wZXJhdG9yVG9wTGVmdC5tb3ZlKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gbGVhZGluZ1NwYWNlKCkgOiB0cmFpbGluZ1NwYWNlKCksIDApOworICAgIG9wZXJhdG9yVG9w
TGVmdC5tb3ZlKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbGVhZGluZ1NwYWNl
KCkgOiB0cmFpbGluZ1NwYWNlKCksIDBfbHUpOwogCiAgICAgbV9tYXRoT3BlcmF0b3IucGFpbnQo
c3R5bGUoKSwgaW5mbywgb3BlcmF0b3JUb3BMZWZ0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAppbmRleCAyMzgw
ZGQ1ZWViODg0ZjM0YTU5MzcwNzQ0YTE4YzkzZTAxYzJmOTE0Li40NGI1MmNjODM2NDQ1NmY4Y2Uz
NTI3ZmRjYTAzYmE3MjhhYjY4OWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCkBAIC03MSw3ICs3MSw3IEBAIHBy
b3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgZmluYWw7CiAgICAgdm9pZCBjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocygpIGZpbmFsOwotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9v
bCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgZmlu
YWw7CisgICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVu
aXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwX2x1KSBmaW5hbDsKICAgICB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JikgZmluYWw7CiAKICAgICBjb25zdCBjaGFyKiByZW5k
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJNYXRo
TUxPcGVyYXRvciAoYW5vbnltb3VzKSIgOiAiUmVuZGVyTWF0aE1MT3BlcmF0b3IiOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFBhZGRl
ZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxQYWRkZWQu
aAppbmRleCA3MTMzM2UwMTA4M2ZkODVhOGQ1Nzc4Njg4ZDM2OGIyZjAwODI4MzllLi4wOTA2Mzc5
ZjJkMjZkNDZlY2M0YjMyYjY5M2RjM2QzMTdkZjJjZDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFBhZGRlZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUGFkZGVkLmgKQEAgLTQyLDcgKzQy
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTWF0aE1MUGFkZGVkKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdp
ZHRocygpIGZpbmFsOwotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVu
LCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgZmluYWw7CisgICAgdm9pZCBsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWln
aHQgPSAwX2x1KSBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gZmlyc3RMaW5lQmFzZWxp
bmUoKSBjb25zdCBmaW5hbDsKIAogICAgIE1hdGhNTFBhZGRlZEVsZW1lbnQmIGVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxNYXRoTUxQYWRkZWRFbGVtZW50Jj4obm9kZUZvck5v
bkFub255bW91cygpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKaW5kZXggODQwMzk1Njk1ODAyYWExYjhkYWUxZWZhMDYw
NjZkNDAyOTM4MTE4NC4uNmJjNmVjNTg3ZTEwYTdiOWU4Yzk0YWUyMDgyMGY0ZGQ3ZGNkYTE5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxS
b290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuY3BwCkBAIC0yOTAsMTIgKzI5MCwxMiBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBh
aW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAg
IGluZm8uY29udGV4dCgpLnNldFN0cm9rZVRoaWNrbmVzcyhydWxlVGhpY2tuZXNzKTsKICAgICBp
bmZvLmNvbnRleHQoKS5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAgaW5mby5jb250
ZXh0KCkuc2V0U3Ryb2tlQ29sb3Ioc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29s
b3JGaWx0ZXIoQ1NTUHJvcGVydHlDb2xvcikpOwotICAgIExheW91dFBvaW50IHJ1bGVPZmZzZXRG
cm9tID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpICsgTGF5b3V0UG9pbnQoMCwgbV9yYWRpY2Fs
T3BlcmF0b3JUb3AgKyBydWxlVGhpY2tuZXNzIC8gMik7CisgICAgTGF5b3V0UG9pbnQgcnVsZU9m
ZnNldEZyb20gPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCkgKyBMYXlvdXRQb2ludCgwX2x1LCBt
X3JhZGljYWxPcGVyYXRvclRvcCArIHJ1bGVUaGlja25lc3MgLyAyKTsKICAgICBMYXlvdXRQb2lu
dCBydWxlT2Zmc2V0VG8gPSBydWxlT2Zmc2V0RnJvbTsKICAgICBob3Jpem9udGFsT2Zmc2V0ICs9
IG1fcmFkaWNhbE9wZXJhdG9yLndpZHRoKCk7Ci0gICAgcnVsZU9mZnNldEZyb20ubW92ZShtaXJy
b3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0KSwgMCk7CisgICAgcnVsZU9mZnNldEZyb20ubW92
ZShtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0KSwgMF9sdSk7CiAgICAgaG9yaXpvbnRh
bE9mZnNldCArPSBtX2Jhc2VXaWR0aDsKLSAgICBydWxlT2Zmc2V0VG8ubW92ZShtaXJyb3JJZk5l
ZWRlZChob3Jpem9udGFsT2Zmc2V0KSwgMCk7CisgICAgcnVsZU9mZnNldFRvLm1vdmUobWlycm9y
SWZOZWVkZWQoaG9yaXpvbnRhbE9mZnNldCksIDBfbHUpOwogICAgIGluZm8uY29udGV4dCgpLmRy
YXdMaW5lKHJ1bGVPZmZzZXRGcm9tLCBydWxlT2Zmc2V0VG8pOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oCmluZGV4IDU0NWZl
MjFhYzZiNTE3Mjg2YTFlNzMwN2Q3ZWZlYzMyOWQyYjA4NjIuLjkwY2FlMGEyNWU0Mjg1NTQwZTg1
YmQ3NDQyNTdkMmZiMzA5N2U2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSkgZmluYWw7CiAKICAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKCkgZmluYWw7Ci0gICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBmaW5hbDsKKyAgICB2b2lkIGxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdo
dCA9IDBfbHUpIGZpbmFsOwogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmKSBmaW5hbDsKIAogICAgIHN0cnVjdCBIb3Jpem9udGFsUGFyYW1ldGVycyB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuaAppbmRl
eCBkMzhiODVmYWYxYjJlNzQ0OGQ0MzA3MDkzOTM2ZjZjMmNkNjFiMjljLi4xMTlkMmI5MWZmYjgx
NzU4MTFmYWJjOGNjMzczMmRkZjBkMGE2ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGlj
OgogICAgIE1hdGhNTFJvd0VsZW1lbnQmIGVsZW1lbnQoKSBjb25zdDsKIAogcHJvdGVjdGVkOgot
ICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBh
Z2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7CisgICAgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwX2x1KSBv
dmVycmlkZTsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIHZvaWQgc3RyZXRjaFZlcnRpY2FsT3BlcmF0b3JzQW5kTGF5b3V0
Q2hpbGRyZW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MU2NyaXB0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFNjcmlwdHMuY3BwCmluZGV4IGVjOWZlYmQzMjA2Y2Y5NzU0MGVhNDMwY2Vk
MTM2ZDhjYmQyMWJmOWIuLjVmYjczZDI5MjUxZTA0Y2E5ZTUyMjA4YzM2YjJjNDliNDg0NmQ5MTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
U2NyaXB0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxTY3JpcHRzLmNwcApAQCAtMTkyLDEyICsxOTIsMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxT
Y3JpcHRzOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgY2FzZSBTY3JpcHRU
eXBlOjpTdWI6CiAgICAgY2FzZSBTY3JpcHRUeXBlOjpVbmRlcjoKICAgICAgICAgbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGggKz0gcmVmZXJlbmNlLmJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpOwotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heChM
YXlvdXRVbml0KDApLCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKSAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uICsgc3BhY2UpOworICAgICAgICBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heCgwX2x1LCByZWZlcmVuY2UuZmlyc3RQ
b3N0U2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIGJhc2VJdGFsaWNDb3JyZWN0
aW9uICsgc3BhY2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNjcmlwdFR5cGU6OlN1cGVy
OgogICAgIGNhc2UgU2NyaXB0VHlwZTo6T3ZlcjoKICAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGggKz0gcmVmZXJlbmNlLmJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwot
ICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heChMYXlvdXRVbml0
KDApLCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KSArIHNwYWNlKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gc3RkOjpt
YXgoMF9sdSwgcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKCkgKyBzcGFjZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2NyaXB0VHlwZTo6U3Vi
U3VwOgogICAgIGNhc2UgU2NyaXB0VHlwZTo6VW5kZXJPdmVyOgpAQCAtMjE1LDcgKzIxNSw3IEBA
IHZvaWQgUmVuZGVyTWF0aE1MU2NyaXB0czo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KQogICAgICAgICB3aGlsZSAoc3ViU2NyaXB0ICYmIHN1YlNjcmlwdCAhPSByZWZlcmVuY2UucHJl
c2NyaXB0RGVsaW1pdGVyKSB7CiAgICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9IHN1YlNjcmlw
dC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgIEFTU0VSVChzdXBTY3JpcHQpOwotICAg
ICAgICAgICAgTGF5b3V0VW5pdCBzdWJTdXBQYWlyV2lkdGggPSBzdGQ6Om1heChzdGQ6Om1heChM
YXlvdXRVbml0KDApLCBzdWJTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gYmFz
ZUl0YWxpY0NvcnJlY3Rpb24pLCBzdXBTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
KTsKKyAgICAgICAgICAgIExheW91dFVuaXQgc3ViU3VwUGFpcldpZHRoID0gc3RkOjptYXgoc3Rk
OjptYXgoMF9sdSwgc3ViU2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIGJhc2VJ
dGFsaWNDb3JyZWN0aW9uKSwgc3VwU2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSk7
CiAgICAgICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdWJTdXBQYWlyV2lk
dGggKyBzcGFjZTsKICAgICAgICAgICAgIHN1YlNjcmlwdCA9IHN1cFNjcmlwdC0+bmV4dFNpYmxp
bmdCb3goKTsKICAgICAgICAgfQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1M
U2NyaXB0czo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQog
ICAgIHN3aXRjaCAoc2NyaXB0VHlwZSgpKSB7CiAgICAgY2FzZSBTY3JpcHRUeXBlOjpTdWI6CiAg
ICAgY2FzZSBTY3JpcHRUeXBlOjpVbmRlcjogewotICAgICAgICBzZXRMb2dpY2FsV2lkdGgocmVm
ZXJlbmNlLmJhc2UtPmxvZ2ljYWxXaWR0aCgpICsgc3RkOjptYXgoTGF5b3V0VW5pdCgwKSwgcmVm
ZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bG9naWNhbFdpZHRoKCkgLSBiYXNlSXRhbGljQ29ycmVj
dGlvbiArIHNwYWNlKSk7CisgICAgICAgIHNldExvZ2ljYWxXaWR0aChyZWZlcmVuY2UuYmFzZS0+
bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1heCgwX2x1LCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0
LT5sb2dpY2FsV2lkdGgoKSAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uICsgc3BhY2UpKTsKICAgICAg
ICAgTGF5b3V0UG9pbnQgYmFzZUxvY2F0aW9uKG1pcnJvcklmTmVlZGVkKGhvcml6b250YWxPZmZz
ZXQsICpyZWZlcmVuY2UuYmFzZSksIGFzY2VudCAtIGJhc2VBc2NlbnQpOwogICAgICAgICByZWZl
cmVuY2UuYmFzZS0+c2V0TG9jYXRpb24oYmFzZUxvY2F0aW9uKTsKICAgICAgICAgaG9yaXpvbnRh
bE9mZnNldCArPSByZWZlcmVuY2UuYmFzZS0+bG9naWNhbFdpZHRoKCk7CkBAIC0zOTEsNyArMzkx
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0
Q2hpbGRyZW4sIExheW91dFVuaXQpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2NyaXB0VHlw
ZTo6U3VwZXI6CiAgICAgY2FzZSBTY3JpcHRUeXBlOjpPdmVyOiB7Ci0gICAgICAgIHNldExvZ2lj
YWxXaWR0aChyZWZlcmVuY2UuYmFzZS0+bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1heChMYXlvdXRV
bml0KDApLCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5sb2dpY2FsV2lkdGgoKSArIHNwYWNl
KSk7CisgICAgICAgIHNldExvZ2ljYWxXaWR0aChyZWZlcmVuY2UuYmFzZS0+bG9naWNhbFdpZHRo
KCkgKyBzdGQ6Om1heCgwX2x1LCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5sb2dpY2FsV2lk
dGgoKSArIHNwYWNlKSk7CiAgICAgICAgIExheW91dFBvaW50IGJhc2VMb2NhdGlvbihtaXJyb3JJ
Zk5lZWRlZChob3Jpem9udGFsT2Zmc2V0LCAqcmVmZXJlbmNlLmJhc2UpLCBhc2NlbnQgLSBiYXNl
QXNjZW50KTsKICAgICAgICAgcmVmZXJlbmNlLmJhc2UtPnNldExvY2F0aW9uKGJhc2VMb2NhdGlv
bik7CiAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gcmVmZXJlbmNlLmJhc2UtPmxvZ2ljYWxX
aWR0aCgpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MU2NyaXB0czo6bGF5
b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQogICAgICAgICB3aGls
ZSAoc3ViU2NyaXB0ICYmIHN1YlNjcmlwdCAhPSByZWZlcmVuY2UucHJlc2NyaXB0RGVsaW1pdGVy
KSB7CiAgICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4dFNpYmxpbmdC
b3goKTsKICAgICAgICAgICAgIEFTU0VSVChzdXBTY3JpcHQpOwotICAgICAgICAgICAgTGF5b3V0
VW5pdCBzdWJTdXBQYWlyV2lkdGggPSBzdGQ6Om1heChzdGQ6Om1heChMYXlvdXRVbml0KDApLCBz
dWJTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpIC0gYmFzZUl0YWxpY0NvcnJlY3Rpb24pLCBzdXBTY3Jp
cHQtPmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgc3ViU3VwUGFpcldp
ZHRoID0gc3RkOjptYXgoc3RkOjptYXgoMF9sdSwgc3ViU2NyaXB0LT5sb2dpY2FsV2lkdGgoKSAt
IGJhc2VJdGFsaWNDb3JyZWN0aW9uKSwgc3VwU2NyaXB0LT5sb2dpY2FsV2lkdGgoKSk7CiAgICAg
ICAgICAgICBsb2dpY2FsV2lkdGggKz0gc3ViU3VwUGFpcldpZHRoICsgc3BhY2U7CiAgICAgICAg
ICAgICBzdWJTY3JpcHQgPSBzdXBTY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
U2NyaXB0cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxT
Y3JpcHRzLmgKaW5kZXggN2ViM2YwOGYwYjQ0Njg0ZTgwYmVhODMwZTFmMmNjMmNlY2E4ZTRkOS4u
NmNjNzdkOGY0YWIwYjg2M2E4MjUyNTAyMmZlNTdiNWY0NjY5OTRkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmgKQEAg
LTQ5LDcgKzQ5LDcgQEAgcHJvdGVjdGVkOgogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyTWF0aE1MU2NyaXB0cyI7IH0KICAgICBTY3Jp
cHRUeXBlIHNjcmlwdFR5cGUoKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0
Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdl
TG9naWNhbEhlaWdodCA9IDBfbHUpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIE1hdGhNTFNj
cmlwdHNFbGVtZW50JiBlbGVtZW50KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNwYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNwYWNlLmgKaW5kZXggMjBjYjE1NTQxMzQwYTVl
Y2JkOTlkMDI3Y2Q3ZDZmNDE5ZTRmMjEzNy4uOWRjZWM3YjZiMWM4MWI1MzUzMjEyOTViN2JiZGE5
OTE2NThiODQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxTcGFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MU3BhY2UuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
aXNSZW5kZXJNYXRoTUxTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBi
b29sIGlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxl
JikgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIGNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCkgZmluYWw7Ci0gICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5
b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBmaW5hbDsKKyAg
ICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdl
TG9naWNhbEhlaWdodCA9IDBfbHUpIGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8aW50PiBmaXJz
dExpbmVCYXNlbGluZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgTGF5b3V0VW5pdCBzcGFjZVdpZHRo
KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFRva2VuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MVG9rZW4uY3BwCmluZGV4IDM4YWY0YzdiZWMwZjA4MWJmYTFlYTU0Y2FiOTM5YmMx
Y2Q0YWE2YjcuLjVkNDE2NmI4YmFiNGIwNTU3MzZkOWU3ZDJmNDBlNWNlNDUyZTQxNzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9r
ZW4uY3BwCkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxUb2tlbjo6cGFpbnQo
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgR2x5
cGhCdWZmZXIgYnVmZmVyOwogICAgIGJ1ZmZlci5hZGQobWF0aFZhcmlhbnRHbHlwaC5nbHlwaCwg
bWF0aFZhcmlhbnRHbHlwaC5mb250LCBtYXRoVmFyaWFudEdseXBoLmZvbnQtPndpZHRoRm9yR2x5
cGgobWF0aFZhcmlhbnRHbHlwaC5nbHlwaCkpOwogICAgIExheW91dFVuaXQgZ2x5cGhBc2NlbnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoLW1hdGhWYXJpYW50R2x5cGguZm9udC0+Ym91bmRz
Rm9yR2x5cGgobWF0aFZhcmlhbnRHbHlwaC5nbHlwaCkueSgpKSk7Ci0gICAgaW5mby5jb250ZXh0
KCkuZHJhd0dseXBocygqbWF0aFZhcmlhbnRHbHlwaC5mb250LCBidWZmZXIsIDAsIDEsIHBhaW50
T2Zmc2V0ICsgbG9jYXRpb24oKSArIExheW91dFBvaW50KDAsIGdseXBoQXNjZW50KSwgc3R5bGUo
KS5mb250Q2FzY2FkZSgpLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTbW9vdGhpbmcoKSk7CisgICAg
aW5mby5jb250ZXh0KCkuZHJhd0dseXBocygqbWF0aFZhcmlhbnRHbHlwaC5mb250LCBidWZmZXIs
IDAsIDEsIHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSArIExheW91dFBvaW50KDBfbHUsIGdseXBo
QXNjZW50KSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTbW9v
dGhpbmcoKSk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MVG9rZW46OnBhaW50Q2hpbGRyZW4oUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgUGFpbnRJ
bmZvJiBwYWludEluZm9Gb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmgKaW5kZXggYjc0
NjZmMWYwYjQwYWViMDVjM2VlZDY2YzJmMmNiYjg4NmQ2Mjc4MC4uOWNlOGY1ODNmNTU5NzU4NzY3
ZjZiNzA5YjAwMjlmYzkxYWVjMzk3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uaApAQCAtNTAsNyArNTAsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJy
aWRlOwogICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWludEluZm8mIGZvclNlbGYsIGNvbnN0IExh
eW91dFBvaW50JiwgUGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpIG92ZXJy
aWRlOwogICAgIHN0ZDo6b3B0aW9uYWw8aW50PiBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlv
dXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7CisgICAgdm9pZCBsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQg
PSAwX2x1KSBvdmVycmlkZTsKICAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuaAppbmRleCBlODEyMTE1ZDQwNzI4
YThkNzUyNmRhZWQ4ZjA0MjdkOWFlMWJkYzQwLi4xMGQxYzQ0YjlhYWY2YTMyZDYxN2VkNGViNTBh
YzQzMGZmMWVhMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToK
ICAgICBNYXRoTUxVbmRlck92ZXJFbGVtZW50JiBlbGVtZW50KCkgY29uc3Q7CiAKICAgICB2b2lk
IGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgZmluYWw7Ci0gICAgdm9pZCBsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQg
PSAwKSBmaW5hbDsKKyAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwg
TGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDBfbHUpIGZpbmFsOwogCiAgICAgdm9pZCBz
dHJldGNoSG9yaXpvbnRhbE9wZXJhdG9yc0FuZExheW91dENoaWxkcmVuKCk7CiAgICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZU91dHNpZGVJbmZvLmNwcAppbmRleCAwMWFhODU1M2JlYTFkYmFiMWE2ZTc5NGZlMjQw
OTJkYmRkNjNiZWE0Li5lZDRiOGE5MmFjZmNhNzlmYzZhNDVkOTgyNGU2MTRlYmE3YThmODRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUlu
Zm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRl
SW5mby5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCBjb25zdCBTaGFwZSYgU2hhcGVPdXRzaWRlSW5m
bzo6Y29tcHV0ZWRTaGFwZSgpIGNvbnN0CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGNvbnRhaW5p
bmdCbG9ja1N0eWxlID0gbV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKTsKIAog
ICAgIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlID0gY29udGFpbmluZ0Jsb2NrU3R5bGUud3JpdGlu
Z01vZGUoKTsKLSAgICBmbG9hdCBtYXJnaW4gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fcmVuZGVy
ZXIuc3R5bGUoKS5zaGFwZU1hcmdpbigpLCBtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpID8g
bV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+Y29udGVudFdpZHRoKCkgOiBMYXlvdXRVbml0
KCkpOworICAgIGZsb2F0IG1hcmdpbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgobV9yZW5kZXJlci5z
dHlsZSgpLnNoYXBlTWFyZ2luKCksIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCkgPyBtX3Jl
bmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5jb250ZW50V2lkdGgoKSA6IDBfbHUpOwogICAgIGZs
b2F0IHNoYXBlSW1hZ2VUaHJlc2hvbGQgPSBzdHlsZS5zaGFwZUltYWdlVGhyZXNob2xkKCk7CiAg
ICAgY29uc3QgU2hhcGVWYWx1ZSYgc2hhcGVWYWx1ZSA9ICpzdHlsZS5zaGFwZU91dHNpZGUoKTsK
IApAQCAtMjI3LDcgKzIyNyw3IEBAIExheW91dFVuaXQgU2hhcGVPdXRzaWRlSW5mbzo6bG9naWNh
bFRvcE9mZnNldCgpIGNvbnN0CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpNYXJnaW5Cb3g6CiAgICAg
ICAgIHJldHVybiAtbV9yZW5kZXJlci5tYXJnaW5CZWZvcmUoJm1fcmVuZGVyZXIuY29udGFpbmlu
Z0Jsb2NrKCktPnN0eWxlKCkpOwogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm9yZGVyQm94OgotICAg
ICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgICAgICByZXR1cm4gMF9sdTsKICAgICBjYXNl
IENTU0JveFR5cGU6OlBhZGRpbmdCb3g6CiAgICAgICAgIHJldHVybiBib3JkZXJCZWZvcmVJbldy
aXRpbmdNb2RlKG1fcmVuZGVyZXIsIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxl
KCkud3JpdGluZ01vZGUoKSk7CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpDb250ZW50Qm94OgpAQCAt
MjQzLDcgKzI0Myw3IEBAIExheW91dFVuaXQgU2hhcGVPdXRzaWRlSW5mbzo6bG9naWNhbFRvcE9m
ZnNldCgpIGNvbnN0CiAgICAgfQogICAgIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBMYXlvdXRVbml0KCk7CisgICAgcmV0dXJuIDBfbHU7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgTGF5b3V0VW5pdCBib3JkZXJTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKGNvbnN0IFJl
bmRlckJveCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKQEAgLTI3NywxMyAr
Mjc3LDEzIEBAIHN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nU3RhcnRX
aXRoU3R5bGVGb3JXcml0aW5nTW9kZShjb25zdCBSZW5kCiBMYXlvdXRVbml0IFNoYXBlT3V0c2lk
ZUluZm86OmxvZ2ljYWxMZWZ0T2Zmc2V0KCkgY29uc3QKIHsKICAgICBpZiAobV9yZW5kZXJlci5p
c1JlbmRlckZyYWdtZW50Q29udGFpbmVyKCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7
CisgICAgICAgIHJldHVybiAwX2x1OwogICAgIAogICAgIHN3aXRjaCAocmVmZXJlbmNlQm94KCpt
X3JlbmRlcmVyLnN0eWxlKCkuc2hhcGVPdXRzaWRlKCkpKSB7CiAgICAgY2FzZSBDU1NCb3hUeXBl
OjpNYXJnaW5Cb3g6CiAgICAgICAgIHJldHVybiAtbV9yZW5kZXJlci5tYXJnaW5TdGFydCgmbV9y
ZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKSk7CiAgICAgY2FzZSBDU1NCb3hUeXBl
OjpCb3JkZXJCb3g6Ci0gICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CisgICAgICAgIHJldHVy
biAwX2x1OwogICAgIGNhc2UgQ1NTQm94VHlwZTo6UGFkZGluZ0JveDoKICAgICAgICAgcmV0dXJu
IGJvcmRlclN0YXJ0V2l0aFN0eWxlRm9yV3JpdGluZ01vZGUobV9yZW5kZXJlciwgbV9yZW5kZXJl
ci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKSk7CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpDb250
ZW50Qm94OgpAQCAtMjk5LDcgKzI5OSw3IEBAIExheW91dFVuaXQgU2hhcGVPdXRzaWRlSW5mbzo6
bG9naWNhbExlZnRPZmZzZXQoKSBjb25zdAogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBMYXlvdXRVbml0KCk7CisgICAgcmV0dXJuIDBfbHU7CiB9CiAKIGJv
b2wgU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJveCYgYm94KQpA
QCAtMzI2LDE4ICszMjYsMTggQEAgU2hhcGVPdXRzaWRlRGVsdGFzIFNoYXBlT3V0c2lkZUluZm86
OmNvbXB1dGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKGNvbnN0IFIKIAogICAgIGlmIChp
c1NoYXBlRGlydHkoKSB8fCAhbV9zaGFwZU91dHNpZGVEZWx0YXMuaXNGb3JMaW5lKGJvcmRlckJv
eExpbmVUb3AsIGxpbmVIZWlnaHQpKSB7CiAgICAgICAgIExheW91dFVuaXQgcmVmZXJlbmNlQm94
TGluZVRvcCA9IGJvcmRlckJveExpbmVUb3AgLSBsb2dpY2FsVG9wT2Zmc2V0KCk7Ci0gICAgICAg
IExheW91dFVuaXQgZmxvYXRNYXJnaW5Cb3hXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KExh
eW91dFVuaXQoKSwgY29udGFpbmluZ0Jsb2NrLmxvZ2ljYWxXaWR0aEZvckZsb2F0KGZsb2F0aW5n
T2JqZWN0KSk7CisgICAgICAgIExheW91dFVuaXQgZmxvYXRNYXJnaW5Cb3hXaWR0aCA9IHN0ZDo6
bWF4PExheW91dFVuaXQ+KDBfbHUsIGNvbnRhaW5pbmdCbG9jay5sb2dpY2FsV2lkdGhGb3JGbG9h
dChmbG9hdGluZ09iamVjdCkpOwogCiAgICAgICAgIGlmIChjb21wdXRlZFNoYXBlKCkubGluZU92
ZXJsYXBzU2hhcGVNYXJnaW5Cb3VuZHMocmVmZXJlbmNlQm94TGluZVRvcCwgbGluZUhlaWdodCkp
IHsKICAgICAgICAgICAgIExpbmVTZWdtZW50IHNlZ21lbnQgPSBjb21wdXRlZFNoYXBlKCkuZ2V0
RXhjbHVkZWRJbnRlcnZhbCgoYm9yZGVyQm94TGluZVRvcCAtIGxvZ2ljYWxUb3BPZmZzZXQoKSks
IHN0ZDo6bWluKGxpbmVIZWlnaHQsIHNoYXBlTG9naWNhbEJvdHRvbSgpIC0gYm9yZGVyQm94TGlu
ZVRvcCkpOwogICAgICAgICAgICAgaWYgKHNlZ21lbnQuaXNWYWxpZCkgewogICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgbG9naWNhbExlZnRNYXJnaW4gPSBjb250YWluaW5nQmxvY2suc3R5bGUo
KS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb250YWluaW5nQmxvY2subWFyZ2luU3RhcnRG
b3JDaGlsZChtX3JlbmRlcmVyKSA6IGNvbnRhaW5pbmdCbG9jay5tYXJnaW5FbmRGb3JDaGlsZCht
X3JlbmRlcmVyKTsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJhd0xlZnRNYXJnaW5Cb3hE
ZWx0YSA9IHNlZ21lbnQubG9naWNhbExlZnQgKyBsb2dpY2FsTGVmdE9mZnNldCgpICsgbG9naWNh
bExlZnRNYXJnaW47Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsZWZ0TWFyZ2luQm94RGVs
dGEgPSBjbGFtcFRvPExheW91dFVuaXQ+KHJhd0xlZnRNYXJnaW5Cb3hEZWx0YSwgTGF5b3V0VW5p
dCgpLCBmbG9hdE1hcmdpbkJveFdpZHRoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxl
ZnRNYXJnaW5Cb3hEZWx0YSA9IGNsYW1wVG88TGF5b3V0VW5pdD4ocmF3TGVmdE1hcmdpbkJveERl
bHRhLCAwX2x1LCBmbG9hdE1hcmdpbkJveFdpZHRoKTsKIAogICAgICAgICAgICAgICAgIExheW91
dFVuaXQgbG9naWNhbFJpZ2h0TWFyZ2luID0gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gY29udGFpbmluZ0Jsb2NrLm1hcmdpbkVuZEZvckNoaWxkKG1f
cmVuZGVyZXIpIDogY29udGFpbmluZ0Jsb2NrLm1hcmdpblN0YXJ0Rm9yQ2hpbGQobV9yZW5kZXJl
cik7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByYXdSaWdodE1hcmdpbkJveERlbHRhID0g
c2VnbWVudC5sb2dpY2FsUmlnaHQgKyBsb2dpY2FsTGVmdE9mZnNldCgpIC0gY29udGFpbmluZ0Js
b2NrLmxvZ2ljYWxXaWR0aEZvckNoaWxkKG1fcmVuZGVyZXIpIC0gbG9naWNhbFJpZ2h0TWFyZ2lu
OwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgcmlnaHRNYXJnaW5Cb3hEZWx0YSA9IGNsYW1w
VG88TGF5b3V0VW5pdD4ocmF3UmlnaHRNYXJnaW5Cb3hEZWx0YSwgLWZsb2F0TWFyZ2luQm94V2lk
dGgsIExheW91dFVuaXQoKSk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByaWdodE1hcmdp
bkJveERlbHRhID0gY2xhbXBUbzxMYXlvdXRVbml0PihyYXdSaWdodE1hcmdpbkJveERlbHRhLCAt
ZmxvYXRNYXJnaW5Cb3hXaWR0aCwgMF9sdSk7CiAKICAgICAgICAgICAgICAgICBtX3NoYXBlT3V0
c2lkZURlbHRhcyA9IFNoYXBlT3V0c2lkZURlbHRhcyhsZWZ0TWFyZ2luQm94RGVsdGEsIHJpZ2h0
TWFyZ2luQm94RGVsdGEsIHRydWUsIGJvcmRlckJveExpbmVUb3AsIGxpbmVIZWlnaHQpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBtX3NoYXBlT3V0c2lkZURlbHRhczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1ZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVlLmgKaW5kZXgg
N2JjYjcxNjI1MjgxNjJlMTM5ZTUxMjZmNTUxODY2YTI0OWY1NjdjOS4uZWY3NjA3ZTQ0OTdjOTdh
M2E5MjI0MzljYWE5ZTc5NmRmZjQ5NWUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVlLmgKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gc3R5bGUoKSA+IEJvcmRlclN0eWxlOjpIaWRkZW4gPyBtX3dpZHRoIDogTGF5b3V0VW5p
dDo6ZnJvbVBpeGVsKDApOyB9CisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IHN0eWxlKCkgPiBCb3JkZXJTdHlsZTo6SGlkZGVuID8gbV93aWR0aCA6IDBfbHU7IH0KICAgICBC
b3JkZXJTdHlsZSBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJvcmRlclN0eWxl
PihtX3N0eWxlKTsgfQogICAgIGJvb2wgZXhpc3RzKCkgY29uc3QgeyByZXR1cm4gcHJlY2VkZW5j
ZSgpICE9IEJvcmRlclByZWNlZGVuY2U6Ok9mZjsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>