<?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>131051</bug_id>
          
          <creation_ts>2014-04-01 12:07:51 -0700</creation_ts>
          <short_desc>Deleting CodeBlocks should be lazy/incremental</short_desc>
          <delta_ts>2014-04-03 14:07:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>996381</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-01 12:07:51 -0700</bug_when>
    <thetext>Deleting many CodeBlocks synchronously during GC can dramatically increase pause times. We should use a similar approach to JSCell sweeping instead to mitigate these costs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996937</commentid>
    <comment_count>1</comment_count>
      <attachid>228450</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-02 17:28:47 -0700</bug_when>
    <thetext>Created attachment 228450
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997303</commentid>
    <comment_count>2</comment_count>
      <attachid>228542</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-03 14:07:31 -0700</bug_when>
    <thetext>Created attachment 228542
work in progress

Putting this on hold for the moment.

To future me (or whomever picks this up):

There&apos;s a couple of issues with this patch.
(1) You need to make sure that no code assumes that m_alternative (and any other referenced CodeBlocks) is in a consistent state. For example, ProfiledCodeBlockJettisoningWatchpoint can fire after clearing the CodeBlock&apos;s m_alternative field but before the CodeBlock is fully destroyed (along with the Watchpoint itself).
(2) You also need to make the ref-count of a CodeBlock and its notion of isLive is the same. deleteAllCompiledCode is a tricky thing to get right for this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228450</attachid>
            <date>2014-04-02 17:28:47 -0700</date>
            <delta_ts>2014-04-03 14:07:31 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-131051-20140402172828.patch</filename>
            <type>text/plain</type>
            <size>20064</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2NjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE0LTA0LTAyICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgRGVsZXRpbmcgQ29kZUJsb2NrcyBzaG91bGQgYmUgbGF6eS9pbmNyZW1lbnRhbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMDUxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJBbGxSZWZlcmVuY2Vk
Q29kZUJsb2Nrcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aXNMaXZlKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAg
ICogaGVhcC9Db2RlQmxvY2tTZXQuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAg
ICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBo
ZWFwL0luY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXI6OkluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBl
cik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlcjo6fkluY3JlbWVu
dGFsQ29kZUJsb2NrU3dlZXBlcik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsQ29kZUJsb2Nr
U3dlZXBlcjo6dHJ5UmVjeWNsZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFs
Q29kZUJsb2NrU3dlZXBlcjo6aGFzRW1wdHlTbG90KToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50
YWxDb2RlQmxvY2tTd2VlcGVyOjpoYXNCbG9ja1RvRGVzdHJveSk6CisgICAgICAgIChKU0M6Oklu
Y3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlcjo6YWR2YW5jZSk6CisgICAgICAgIChKU0M6OkluY3Jl
bWVudGFsQ29kZUJsb2NrU3dlZXBlcjo6cmVzaXplKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50
YWxDb2RlQmxvY2tTd2VlcGVyOjpkZXN0cm95TGF0ZXIpOgorICAgICAgICAoSlNDOjpJbmNyZW1l
bnRhbENvZGVCbG9ja1N3ZWVwZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFs
Q29kZUJsb2NrU3dlZXBlcjo6ZGVzdHJveU5leHRCbG9jayk6CisgICAgICAgICogaGVhcC9JbmNy
ZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIuaDogQWRkZWQuCisKIDIwMTQtMDQtMDIgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2RlQmxvY2tTZXQg
c2hvdWxkIGJlIGdlbmVyYXRpb25hbApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE2NjY4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDM4LDYgKzE0
MzgsOCBAQAogCQlDMkM4RDAzMTE0QTNDRUZDMDA1NzhFNjUgLyogSGVhcEJsb2NrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkM4RDAyRjE0QTNDRUZD
MDA1NzhFNjUgLyogSGVhcEJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzJDRjM5QzExNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBl
ck9iamVjdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi87IH07
CiAJCUMyQ0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQ0YzOUMwMTZFMTVB
ODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCAqLzsgfTsKKwkJQzJEM0I4NUQxOEVC
OEJBNDAwQkJENUZFIC8qIEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkQzQjg1QjE4RUI4QkE0MDBC
QkQ1RkUgLyogSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyLmNwcCAqLzsgfTsKKwkJQzJEM0I4
NUUxOEVCOEJBNDAwQkJENUZFIC8qIEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEM0I4NUMxOEVCOEJB
NDAwQkJENUZFIC8qIEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlci5oICovOyB9OwogCQlDMkRB
Nzc4MzE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBI
ZWFwSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUMyREY0NDJGMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkRGNDQyRDE3MDdBQzAx
MDBBNUNBOTYgLyogU3VwZXJSZWdpb24uY3BwICovOyB9OwogCQlDMkRGNDQzMDE3MDdBQzAxMDBB
NUNBOTYgLyogU3VwZXJSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMyREY0NDJFMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yOTgzLDYg
KzI5ODUsOCBAQAogCQlDMkM4RDAyRjE0QTNDRUZDMDA1NzhFNjUgLyogSGVhcEJsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBCbG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVy
T2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNBUElX
cmFwcGVyT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkNGMzlDMDE2
RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQVBJV3JhcHBlck9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMkQzQjg1QjE4RUI4QkE0MDBCQkQ1RkUgLyogSW5jcmVtZW50YWxDb2RlQmxv
Y2tTd2VlcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluY3Jl
bWVudGFsQ29kZUJsb2NrU3dlZXBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyRDNCODVDMThFQjhCQTQwMEJCRDVGRSAvKiBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5jcmVtZW50YWxDb2RlQmxvY2tT
d2VlcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyREE3NzgyMThFMjU5OTkw
MDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIZWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkRGNDQyRDE3
MDdBQzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3VwZXJSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMkRGNDQyRTE3MDdBQzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTM2MzIsNiArMzYzNiw4IEBACiAJCQkJMkE4MzYzODQxOEQ3RDBFRTAwMDBF
QkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKIAkJCQkyQTgzNjM4NzE4RDdEMEZF
MDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCiAJCQkJMkE4MzYzODgx
OEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKKwkJCQlDMkQz
Qjg1QjE4RUI4QkE0MDBCQkQ1RkUgLyogSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyLmNwcCAq
LywKKwkJCQlDMkQzQjg1QzE4RUI4QkE0MDBCQkQ1RkUgLyogSW5jcmVtZW50YWxDb2RlQmxvY2tT
d2VlcGVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGhlYXA7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtNTIxNiw2ICs1MjIyLDcgQEAKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVC
NEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgx
N0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdB
OEFGMzkxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQzJEM0I4NUUxOEVCOEJBNDAwQkJENUZFIC8qIEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NDMxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUklu
Zm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExB
YmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEwODE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjQ0LDYgKzYy
NTEsNyBAQAogCQkJCTE0MjgwODJEMTA3RUMwNTcwMDEzRTdCMiAvKiBDYWxsRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDI5RDhERDBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlu
a0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzJEM0I4NUQxOEVCOEJBNDAwQkJENUZFIC8q
IEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkz
MzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY3M0Q3QUUxNjVBMTQyRDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVC
bG9jay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjY2ODApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUzMiw2
ICszNTMyLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjplbmRWYWxpZGF0aW9uRGlkRmFpbCgpCiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OmNsZWFy
QWxsUmVmZXJlbmNlZENvZGVCbG9ja3MoKQoreworICAgIG1fYWx0ZXJuYXRpdmUuY2xlYXIoKTsK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBpZiAoc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwo
KSkKKyAgICAgICAgbV9qaXRDb2RlLT5kZmcoKS0+b3NyRW50cnlCbG9jay5jbGVhcigpOworI2Vu
ZGlmCit9CisKIHZvaWQgQ29kZUJsb2NrOjphZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFr
cG9pbnRzKQogewogICAgIG1fbnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAx
NjY2ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk1MSw2ICs5NTEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBiZWdpblZh
bGlkYXRpb25EaWRGYWlsKCk7CiAgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGVuZFZh
bGlkYXRpb25EaWRGYWlsKCk7CiAKKyAgICB2b2lkIGNsZWFyQWxsUmVmZXJlbmNlZENvZGVCbG9j
a3MoKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkgb3ZlcnJpZGU7CkBAIC0xMDA0LDcgKzEwMDYsMjMgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGR1bXBWYWx1ZVByb2ZpbGluZyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9u
KiYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgIHZvaWQgZHVtcEFycmF5UHJvZmls
aW5nKFByaW50U3RyZWFtJiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgYm9vbCYgaGFzUHJpbnRlZFBy
b2ZpbGluZyk7CiAgICAgdm9pZCBkdW1wUmFyZUNhc2VQcm9maWxlKFByaW50U3RyZWFtJiwgY29u
c3QgY2hhciogbmFtZSwgUmFyZUNhc2VQcm9maWxlKiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGlu
Zyk7Ci0gICAgICAgIAorCisgICAgYm9vbCBpc0xpdmUoKQorICAgIHsKKyAgICAgICAgaWYgKHNo
b3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoIW1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVk
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
ICAgIGlmIChtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5
QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHJldmlzaW9uIDE2NjY4MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDggKzM0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBjb25zdCBib29sIHZlcmJv
c2UgPSBmYWxzZTsKIAotQ29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoQmxvY2tBbGxvY2F0b3Im
IGJsb2NrQWxsb2NhdG9yKQotICAgIDogbV9jdXJyZW50bHlFeGVjdXRpbmcoYmxvY2tBbGxvY2F0
b3IpCitDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldChIZWFwKiBoZWFwKQorICAgIDogbV9jdXJy
ZW50bHlFeGVjdXRpbmcoaGVhcC0+YmxvY2tBbGxvY2F0b3IoKSkKKyAgICAsIG1fY29kZUJsb2Nr
U3dlZXBlcihoZWFwLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCkpCiB7CiB9CiAKQEAgLTkxLDMxICs5
MiwyNCBAQCB2b2lkIENvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlCiB7CiAgICAg
SGFzaFNldDxDb2RlQmxvY2sqPiYgc2V0ID0gY29sbGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rp
b24gPyBtX25ld0NvZGVCbG9ja3MgOiBtX29sZENvZGVCbG9ja3M7CiAKLSAgICAvLyBUaGlzIG5l
ZWRzIHRvIGJlIGEgZml4cG9pbnQgYmVjYXVzZSBjb2RlIGJsb2NrcyB0aGF0IGFyZSB1bm1hcmtl
ZCBtYXkKLSAgICAvLyByZWZlciB0byBlYWNoIG90aGVyLiBGb3IgZXhhbXBsZSwgYSBERkcgY29k
ZSBibG9jayB0aGF0IGlzIG93bmVkIGJ5Ci0gICAgLy8gdGhlIEdDIG1heSByZWZlciB0byBhbiBG
VEwgZm9yLWVudHJ5IGNvZGUgYmxvY2sgdGhhdCBpcyBhbHNvIG93bmVkIGJ5Ci0gICAgLy8gdGhl
IEdDLgotICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAxNj4gdG9SZW1vdmU7CisgICAgVmVjdG9yPENv
ZGVCbG9jayo+IHRvUmVtb3ZlOworICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBzZXQp
IHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNMaXZlKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNvZGVCbG9jayk7CisgICAgfQorCiAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkZpeHBvaW50aW5nIG92ZXIgdW5tYXJrZWQsIHNl
dCBzaXplID0gIiwgc2V0LnNpemUoKSwgIi4uLlxuIik7Ci0gICAgZm9yICg7OykgewotICAgICAg
ICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogc2V0KSB7Ci0gICAgICAgICAgICBpZiAoIWNv
ZGVCbG9jay0+aGFzT25lUmVmKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBpZiAoY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgY29kZUJsb2NrLT5kZXJlZigpOwotICAgICAgICAgICAgdG9S
ZW1vdmUuYXBwZW5kKGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgUmVtb3ZpbmcgIiwgdG9SZW1vdmUuc2l6ZSgpLCAi
IGJsb2Nrcy5cbiIpOwotICAgICAgICBpZiAodG9SZW1vdmUuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiB0b1JlbW92ZSkK
LSAgICAgICAgICAgIHNldC5yZW1vdmUoY29kZUJsb2NrKTsKLSAgICAgICAgdG9SZW1vdmUucmVz
aXplKDApOworICAgICAgICBkYXRhTG9nKCIgICAgUmVtb3ZpbmcgIiwgdG9SZW1vdmUuc2l6ZSgp
LCAiIGJsb2Nrcy5cbiIpOworCisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IHRvUmVt
b3ZlKSB7CisgICAgICAgIHNldC5yZW1vdmUoY29kZUJsb2NrKTsKKyAgICAgICAgY29kZUJsb2Nr
LT5jbGVhckFsbFJlZmVyZW5jZWRDb2RlQmxvY2tzKCk7CisgICAgICAgIG1fY29kZUJsb2NrU3dl
ZXBlci5kZXN0cm95TGF0ZXIoY29kZUJsb2NrKTsKICAgICB9CiAKKyAgICBtX2NvZGVCbG9ja1N3
ZWVwZXIuZG9Xb3JrKCk7CisKICAgICAvLyBBbnkgcmVtYWluaW5nIHlvdW5nIENvZGVCbG9ja3Mg
YXJlIGxpdmUgYW5kIG5lZWQgdG8gYmUgcHJvbW90ZWQgdG8gdGhlIHNldCBvZiBvbGQgQ29kZUJs
b2Nrcy4KICAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rpb24pCiAgICAgICAg
IHByb21vdGVZb3VuZ0NvZGVCbG9ja3MoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvZGVCbG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvZGVCbG9ja1NldC5oCShyZXZpc2lvbiAxNjY2ODApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDE2
IEBACiAKICNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5LmgiCiAjaW5jbHVkZSAiSGVhcE9wZXJh
dGlvbi5oIgorI2luY2x1ZGUgIkluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKworI2lmIE9TKERBUldJTikKKyNpbmNsdWRlIDxk
aXNwYXRjaC9kaXNwYXRjaC5oPiAgICAKKyNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
NDksNyArNTUsNyBAQCBjbGFzcyBDb2RlQmxvY2tTZXQgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENvZGVCbG9ja1NldCk7CiAKIHB1YmxpYzoKLSAgICBDb2RlQmxvY2tTZXQoQmxvY2tBbGxv
Y2F0b3ImKTsKKyAgICBDb2RlQmxvY2tTZXQoSGVhcCopOwogICAgIH5Db2RlQmxvY2tTZXQoKTsK
ICAgICAKICAgICAvLyBBZGQgYSBDb2RlQmxvY2suIFRoaXMgaXMgb25seSBjYWxsZWQgYnkgQ29k
ZUJsb2NrIGNvbnN0cnVjdG9ycy4KQEAgLTEwOCw2ICsxMTQsNyBAQCBwcml2YXRlOgogICAgIEhh
c2hTZXQ8Q29kZUJsb2NrKj4gbV9vbGRDb2RlQmxvY2tzOwogICAgIEhhc2hTZXQ8Q29kZUJsb2Nr
Kj4gbV9uZXdDb2RlQmxvY2tzOwogICAgIEdDU2VnbWVudGVkQXJyYXk8Q29kZUJsb2NrKj4gbV9j
dXJyZW50bHlFeGVjdXRpbmc7CisgICAgSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyIG1fY29k
ZUJsb2NrU3dlZXBlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE2NjY4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDYgQEAg
SGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9zbG90VmlzaXRv
cihtX3NoYXJlZERhdGEpCiAgICAgLCBtX2NvcHlWaXNpdG9yKG1fc2hhcmVkRGF0YSkKICAgICAs
IG1faGFuZGxlU2V0KHZtKQotICAgICwgbV9jb2RlQmxvY2tzKG1fYmxvY2tBbGxvY2F0b3IpCiAg
ICAgLCBtX2lzU2FmZVRvQ29sbGVjdChmYWxzZSkKICAgICAsIG1fd3JpdGVCYXJyaWVyQnVmZmVy
KDI1NikKICAgICAsIG1fdm0odm0pCkBAIC0zMjMsNiArMzIyLDcgQEAgSGVhcDo6SGVhcChWTSog
dm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9sYXN0RnVsbEdDTGVuZ3RoKDAuMDEpCiAg
ICAgLCBtX2xhc3RFZGVuR0NMZW5ndGgoMC4wMSkKICAgICAsIG1fbGFzdENvZGVEaXNjYXJkVGlt
ZShXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKQorICAgICwgbV9jb2RlQmxvY2tz
KHRoaXMpCiAgICAgLCBtX2Z1bGxBY3Rpdml0eUNhbGxiYWNrKEdDQWN0aXZpdHlDYWxsYmFjazo6
Y3JlYXRlRnVsbFRpbWVyKHRoaXMpKQogI2lmIEVOQUJMRShHR0MpCiAgICAgLCBtX2VkZW5BY3Rp
dml0eUNhbGxiYWNrKEdDQWN0aXZpdHlDYWxsYmFjazo6Y3JlYXRlRWRlblRpbWVyKHRoaXMpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTY2NjgwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyAr
MzQ4LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhbmRsZVNldCBtX2hhbmRsZVNldDsKICAgICBIYW5k
bGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgIENvZGVCbG9ja1NldCBtX2NvZGVCbG9ja3M7CiAg
ICAgSklUU3R1YlJvdXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7CiAgICAgRmluYWxpemVyT3du
ZXIgbV9maW5hbGl6ZXJPd25lcjsKICAgICAKQEAgLTM2Myw2ICszNjIsNyBAQCBwcml2YXRlOgog
CiAgICAgRG91Ymx5TGlua2VkTGlzdDxFeGVjdXRhYmxlQmFzZT4gbV9jb21waWxlZENvZGU7CiAg
ICAgCisgICAgQ29kZUJsb2NrU2V0IG1fY29kZUJsb2NrczsKICAgICBSZWZQdHI8R0NBY3Rpdml0
eUNhbGxiYWNrPiBtX2Z1bGxBY3Rpdml0eUNhbGxiYWNrOwogICAgIFJlZlB0cjxHQ0FjdGl2aXR5
Q2FsbGJhY2s+IG1fZWRlbkFjdGl2aXR5Q2FsbGJhY2s7CiAgICAgT3duUHRyPEluY3JlbWVudGFs
U3dlZXBlcj4gbV9zd2VlcGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5j
cmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxDb2RlQmxvY2tTd2Vl
cGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIu
aCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSW5jcmVt
ZW50YWxDb2RlQmxvY2tTd2VlcGVyOjpJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIoSGVhcCog
aGVhcCwgQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCisgICAgOiBIZWFwVGltZXIoaGVhcC0+dm0oKSwg
cnVuTG9vcCkKKyAgICAsIG1fYnVmZmVyKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrKltdPig0
KSkKKyAgICAsIG1fY2FwYWNpdHkoNCkKKyAgICAsIG1fc2l6ZSgwKQorICAgICwgbV9uZXh0RW1w
dHlTbG90KDApCisgICAgLCBtX25leHRCbG9ja1RvRGVzdHJveSgwKQoreworfQorCitJbmNyZW1l
bnRhbENvZGVCbG9ja1N3ZWVwZXI6On5JbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIoKQorewor
ICAgIHdoaWxlIChoYXNCbG9ja1RvRGVzdHJveSgpKQorICAgICAgICBkZXN0cm95TmV4dEJsb2Nr
KCk7Cit9CisKK0NvZGVCbG9jayogSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyOjp0cnlSZWN5
Y2xlQ29kZUJsb2NrKCkKK3sKKyAgICBpZiAoIWhhc0Jsb2NrVG9EZXN0cm95KCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIENvZGVCbG9jayogYmxvY2sgPSBtX2J1ZmZlclttX25leHRC
bG9ja1RvRGVzdHJveV07CisgICAgZGVzdHJveU5leHRCbG9jayhPbmx5Q2FsbERlc3RydWN0b3Ip
OworICAgIHJldHVybiBibG9jazsKK30KKworYm9vbCBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVw
ZXI6Omhhc0VtcHR5U2xvdCgpCit7CisgICAgcmV0dXJuIG1fc2l6ZSA8IG1fY2FwYWNpdHk7Cit9
CisKK2Jvb2wgSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyOjpoYXNCbG9ja1RvRGVzdHJveSgp
Cit7CisgICAgcmV0dXJuIG1fbmV4dEVtcHR5U2xvdCAhPSBtX25leHRCbG9ja1RvRGVzdHJveTsK
K30KKwordm9pZCBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXI6OmFkdmFuY2Uoc2l6ZV90JiBp
bmRleCkKK3sKKyAgICBpbmRleCsrOworICAgIGlmIChpbmRleCA9PSBtX2NhcGFjaXR5KQorICAg
ICAgICBpbmRleCA9IDA7Cit9CisKK3ZvaWQgSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyOjpy
ZXNpemUoc2l6ZV90IG5ld0NhcGFjaXR5KQoreworICAgIEFTU0VSVCghaGFzRW1wdHlTbG90KCkp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQmxvY2sqW10+IG5ld0J1ZmZlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q29kZUJsb2NrKltdPihuZXdDYXBhY2l0eSk7CisgICAgbWVtY3B5KG5ld0J1ZmZl
ci5nZXQoKSwgbV9idWZmZXIuZ2V0KCksIHNpemVvZihDb2RlQmxvY2sqKSAqIG1fY2FwYWNpdHkp
OworICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKKyAgICBtX2J1ZmZlci5zd2FwKG5ld0J1
ZmZlcik7Cit9CisKK3ZvaWQgSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyOjpkZXN0cm95TGF0
ZXIoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYgKCFoYXNFbXB0eVNsb3QoKSkKKyAg
ICAgICAgcmVzaXplKG1fY2FwYWNpdHkgKiAyKTsKKyAgICBBU1NFUlQoaGFzRW1wdHlTbG90KCkp
OworICAgIG1fYnVmZmVyW21fbmV4dEVtcHR5U2xvdF0gPSBjb2RlQmxvY2s7CisgICAgYWR2YW5j
ZShtX25leHRFbXB0eVNsb3QpOworICAgIG1fc2l6ZSsrOworfQorCit2b2lkIEluY3JlbWVudGFs
Q29kZUJsb2NrU3dlZXBlcjo6ZG9Xb3JrKCkKK3sKKyAgICB3aGlsZSAoaGFzQmxvY2tUb0Rlc3Ry
b3koKSkKKyAgICAgICAgZGVzdHJveU5leHRCbG9jaygpOworfQorCit2b2lkIEluY3JlbWVudGFs
Q29kZUJsb2NrU3dlZXBlcjo6ZGVzdHJveU5leHRCbG9jayhEZXN0cm95QmVoYXZpb3IgYmVoYXZp
b3IpCit7CisgICAgQVNTRVJUKGhhc0Jsb2NrVG9EZXN0cm95KCkpOworICAgIENvZGVCbG9jayog
YmxvY2sgPSBudWxscHRyOworICAgIHN0ZDo6c3dhcChibG9jaywgbV9idWZmZXJbbV9uZXh0Qmxv
Y2tUb0Rlc3Ryb3ldKTsKKyAgICBhZHZhbmNlKG1fbmV4dEJsb2NrVG9EZXN0cm95KTsKKyAgICBt
X3NpemUtLTsKKworICAgIEFTU0VSVChibG9jay0+aGFzT25lUmVmKCkpOworICAgIGlmIChiZWhh
dmlvciA9PSBPbmx5Q2FsbERlc3RydWN0b3IpIHsKKyAgICAgICAgYmxvY2stPkNvZGVCbG9jazo6
fkNvZGVCbG9jaygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChiZWhhdmlv
ciA9PSBSZXR1cm5Ub01hbGxvYyk7CisgICAgYmxvY2stPmRlcmVmKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxD
b2RlQmxvY2tTd2VlcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbmNyZW1lbnRh
bENvZGVCbG9ja1N3ZWVwZXJfaAorI2RlZmluZSBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXJf
aAorCisjaW5jbHVkZSAiSGVhcFRpbWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBD
b2RlQmxvY2s7CitjbGFzcyBIZWFwOworCitjbGFzcyBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVw
ZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK3B1YmxpYzoKKyAgICBJbmNyZW1lbnRhbENvZGVCbG9j
a1N3ZWVwZXIoSGVhcCosIENGUnVuTG9vcFJlZik7CisgICAgfkluY3JlbWVudGFsQ29kZUJsb2Nr
U3dlZXBlcigpOworCisgICAgLy8gSWYgdGhlcmUgaXMgYSBDb2RlQmxvY2sgd2FpdGluZyB0byBi
ZSBkZXN0cm95ZWQgd2UgZWFnZXJseSBkZXN0cm95IGl0IGFuZAorICAgIC8vIHJldHVybiBpdHMg
ZW1wdHkgc2hlbGwgYmFjayB0byBiZSByZXVzZWQgZm9yIGEgbmV3IENvZGVCbG9jay4KKyAgICBD
b2RlQmxvY2sqIHRyeVJlY3ljbGVDb2RlQmxvY2soKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgdm9pZCBkb1dvcmsoKSBvdmVycmlkZTsKKworICAgIHZvaWQgZGVzdHJveUxhdGVy
KENvZGVCbG9jayopOworCitwcml2YXRlOgorICAgIGVudW0gRGVzdHJveUJlaGF2aW9yIHsKKyAg
ICAgICAgT25seUNhbGxEZXN0cnVjdG9yLAorICAgICAgICBSZXR1cm5Ub01hbGxvYworICAgIH07
CisKKyAgICBib29sIGhhc0VtcHR5U2xvdCgpOworICAgIGJvb2wgaGFzQmxvY2tUb0Rlc3Ryb3ko
KTsKKyAgICB2b2lkIGFkdmFuY2Uoc2l6ZV90Jik7CisgICAgdm9pZCByZXNpemUoc2l6ZV90KTsK
KyAgICB2b2lkIGRlc3Ryb3lOZXh0QmxvY2soRGVzdHJveUJlaGF2aW9yID0gUmV0dXJuVG9NYWxs
b2MpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9jaypbXT4gbV9idWZmZXI7CisgICAg
c2l6ZV90IG1fY2FwYWNpdHk7CisgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICBzaXplX3QgbV9uZXh0
RW1wdHlTbG90OworICAgIHNpemVfdCBtX25leHRCbG9ja1RvRGVzdHJveTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228542</attachid>
            <date>2014-04-03 14:07:31 -0700</date>
            <delta_ts>2014-04-03 14:07:31 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>33482</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2NjgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE0LTA0LTAyICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgRGVsZXRpbmcgQ29kZUJsb2NrcyBzaG91bGQgYmUgbGF6eS9pbmNyZW1lbnRhbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMDUxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJBbGxSZWZlcmVuY2Vk
Q29kZUJsb2Nrcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aXNMaXZlKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAg
ICogaGVhcC9Db2RlQmxvY2tTZXQuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAg
ICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBo
ZWFwL0luY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXI6OkluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBl
cik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlcjo6fkluY3JlbWVu
dGFsQ29kZUJsb2NrU3dlZXBlcik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsQ29kZUJsb2Nr
U3dlZXBlcjo6dHJ5UmVjeWNsZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFs
Q29kZUJsb2NrU3dlZXBlcjo6aGFzRW1wdHlTbG90KToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50
YWxDb2RlQmxvY2tTd2VlcGVyOjpoYXNCbG9ja1RvRGVzdHJveSk6CisgICAgICAgIChKU0M6Oklu
Y3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlcjo6YWR2YW5jZSk6CisgICAgICAgIChKU0M6OkluY3Jl
bWVudGFsQ29kZUJsb2NrU3dlZXBlcjo6cmVzaXplKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50
YWxDb2RlQmxvY2tTd2VlcGVyOjpkZXN0cm95TGF0ZXIpOgorICAgICAgICAoSlNDOjpJbmNyZW1l
bnRhbENvZGVCbG9ja1N3ZWVwZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFs
Q29kZUJsb2NrU3dlZXBlcjo6ZGVzdHJveU5leHRCbG9jayk6CisgICAgICAgICogaGVhcC9JbmNy
ZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIuaDogQWRkZWQuCisKIDIwMTQtMDQtMDIgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2RlQmxvY2tTZXQg
c2hvdWxkIGJlIGdlbmVyYXRpb25hbApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE2NjY4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03OTgsNiArNzk4
LDggQEAKIAkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUFDRTYz
QTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLzsgfTsKIAkJMkFB
Q0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFBQ0U2M0IxOENBNUEwMzAwRUQw
MTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTJBQUQ5NjRBMTg1Njk0MTcwMDFGOTNCRSAvKiBSZWN1cnNp
dmVBbGxvY2F0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJBQUQ5NjQ5MTg1Njk0MTcwMDFGOTNCRSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9u
U2NvcGUuaCAqLzsgfTsKKwkJMkFBRURDNDcxOEVDRTJFNzAwREMyQzMxIC8qIEluY3JlbWVudGFs
Q29kZUJsb2NrU3dlZXBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQUFFREM0NTE4RUNFMkU3MDBEQzJDMzEgLyogSW5jcmVtZW50YWxDb2RlQmxv
Y2tTd2VlcGVyLmNwcCAqLzsgfTsKKwkJMkFBRURDNDgxOEVDRTJFNzAwREMyQzMxIC8qIEluY3Jl
bWVudGFsQ29kZUJsb2NrU3dlZXBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkFBRURDNDYxOEVDRTJFNzAwREMyQzMxIC8qIEluY3JlbWVudGFsQ29k
ZUJsb2NrU3dlZXBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTJBQzkyMkJCMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUlu
Zm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFD
OTIyQjkxOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5jcHAgKi87IH07
CiAJCTJBQzkyMkJDMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQzkyMkJBMThB
MTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uaCAqLzsgfTsKIAkJMkFDQ0Yz
REUxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUNDRjNEQzE4NUZF
MjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLzsgfTsKQEAg
LTIyOTEsNiArMjI5Myw4IEBACiAJCTJBQUNFNjNBMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2
aXR5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NB
Y3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFBQ0U2
M0IxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ0FjdGl2aXR5Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkFBRDk2NDkxODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2ZUFsbG9j
YXRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNpdmVB
bGxvY2F0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkFBRURDNDUx
OEVDRTJFNzAwREMyQzMxIC8qIEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVw
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQUFFREM0NjE4RUNFMkU3MDBE
QzJDMzEgLyogSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyQUM5MjJCOTE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZE
ZWJ1Z0xpbmVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZU
TERXQVJGRGVidWdMaW5lSW5mby5jcHA7IHBhdGggPSBmdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZv
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFDOTIyQkExOEExNjE4MjAwM0NF
MEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGVExEV0FSRkRlYnVnTGluZUluZm8uaDsgcGF0aCA9IGZ0bC9GVExEV0FSRkRlYnVn
TGluZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFDQ0YzREMxODVGRTI2
QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0zNTI5LDYgKzM1MzMsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2
MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJMkFBRURDNDUxOEVDRTJFNzAwREMyQzMxIC8qIEluY3JlbWVudGFsQ29kZUJsb2Nr
U3dlZXBlci5jcHAgKi8sCisJCQkJMkFBRURDNDYxOEVDRTJFNzAwREMyQzMxIC8qIEluY3JlbWVu
dGFsQ29kZUJsb2NrU3dlZXBlci5oICovLAogCQkJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAv
KiBIZWFwSW5saW5lcy5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFx
dWVSb290U2V0LmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5jcHAgKi8sCkBAIC00OTUzLDYgKzQ5NTksOCBAQAogCQkJCTg2RDNCMkM0MTAx
NTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQw
MzIwMThCRkZCRTEwMDVBMDgxMSAvKiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkyQUFFREM0ODE4RUNFMkU3MDBEQzJDMzEgLyogSW5jcmVtZW50YWxDb2RlQmxvY2tT
d2VlcGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjVGOEJDRTE1NzU0NEE5MDAyNDVCNzEgLyog
SW5jcmVtZW50YWxTd2VlcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAz
MDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTgz
NjM4NjE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNTMwNSw3ICs1MzEzLDYgQEAKIAkJCQlCQzE4QzQw
RjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVG
RDAwNzYxODlCMDM4QzAwNjMzMjMxIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTk2MjMxRTkxOEQxODA0MjAwQzAzRkRBIC8qIEluc3BlY3RvckpTQmFja2VuZENv
bW1hbmRzLmpzIGluIEhlYWRlcnMgKi8sCi0JCQkJQzI1RjhCQ0UxNTc1NDRBOTAwMjQ1QjcxIC8q
IEluY3JlbWVudGFsU3dlZXBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTkxNUVEOEU0
NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5
QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTY1MDQsNiArNjUxMSw3IEBACiAJCQkJMEZDNzEyRTIxN0NEODc5MTAwOEND
OTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0FjdGl2YXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2QzQxMDdFQzI1NTAwNURCQzhEIC8qIEpTQVBJVmFsdWVX
cmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJBQUVEQzQ3MThFQ0UyRTcwMERDMkMzMSAv
KiBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJD
RjM5QzExNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3NjE0MEQxMTgyOTgyQ0IwMDc1MDYyNCAvKiBKU0FyZ3VtZW50c0l0ZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQwMTA3RUMzNzYwMDQyN0E0OCAvKiBKU0Fy
cmF5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE2NjY4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMyLDYg
KzM1MzIsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmVuZFZhbGlkYXRpb25EaWRGYWlsKCkKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIENvZGVCbG9jazo6Y2xlYXJB
bGxSZWZlcmVuY2VkQ29kZUJsb2NrcygpCit7CisgICAgbV9hbHRlcm5hdGl2ZS5jbGVhcigpOwor
I2lmIEVOQUJMRShGVExfSklUKQorICAgIGlmIChzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgp
KQorICAgICAgICBtX2ppdENvZGUtPmRmZygpLT5vc3JFbnRyeUJsb2NrLmNsZWFyKCk7CisjZW5k
aWYKK30KKwogdm9pZCBDb2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtw
b2ludHMpCiB7CiAgICAgbV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2
NjY4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCw4IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJp
ZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIEhlYXAqIG1faGVhcDsKIAor
ICAgIHN0YXRpYyBDb2RlQmxvY2sqIHRyeVJlY3ljbGVDb2RlQmxvY2soSGVhcCogaGVhcCkgeyBy
ZXR1cm4gaGVhcC0+bV9jb2RlQmxvY2tzLnRyeVJlY3ljbGVDb2RlQmxvY2soKTsgfQorCiBwdWJs
aWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q29kZUJsb2NrKCk7CiAKQEAgLTk1
MSw2ICs5NTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7
CiAgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGVuZFZhbGlkYXRpb25EaWRGYWlsKCk7
CiAKKyAgICB2b2lkIGNsZWFyQWxsUmVmZXJlbmNlZENvZGVCbG9ja3MoKTsKKwogcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJp
ZGU7CkBAIC0xMDA0LDcgKzEwMDgsMjMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGR1bXBWYWx1ZVBy
b2ZpbGluZyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKiYsIGJvb2wmIGhhc1ByaW50
ZWRQcm9maWxpbmcpOwogICAgIHZvaWQgZHVtcEFycmF5UHJvZmlsaW5nKFByaW50U3RyZWFtJiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CiAgICAgdm9p
ZCBkdW1wUmFyZUNhc2VQcm9maWxlKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogbmFtZSwgUmFy
ZUNhc2VQcm9maWxlKiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgIAorCisg
ICAgYm9vbCBpc0xpdmUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Zpc2l0QWdncmVnYXRlSGFz
QmVlbkNhbGxlZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoc2hv
dWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIGlmIChtX2ppdENvZGUt
PmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyNlbmRpZgorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJp
bmdTY2FuKCkKICAgICB7CkBAIC0xMTYyLDcgKzExODIsNyBAQCBwcm90ZWN0ZWQ6CiB9OwogCiBj
bGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7Ci1wdWJsaWM6
Citwcml2YXRlOgogICAgIFByb2dyYW1Db2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9n
cmFtQ29kZUJsb2NrJiBvdGhlcikKICAgICA6IEdsb2JhbENvZGVCbG9jayhDb3B5UGFyc2VkQmxv
Y2ssIG90aGVyKQogICAgIHsKQEAgLTExNzMsNiArMTE5MywyNiBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KIAorcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Db2RlQmxvY2s+
IGNyZWF0ZShQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChDb2Rl
QmxvY2sqIGRlYWRCbG9jayA9IHRyeVJlY3ljbGVDb2RlQmxvY2sob3RoZXIubV9oZWFwKSkKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51bGwsIGRlYWRCbG9jaykgUHJvZ3Jh
bUNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKSk7CisgICAg
fQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gY3JlYXRlKAorICAg
ICAgICBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCAKKyAgICAgICAgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgCisgICAgICAgIEpTU2NvcGUq
IHNjb3BlLCAKKyAgICAgICAgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIAorICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgeworICAg
ICAgICBpZiAoQ29kZUJsb2NrKiBkZWFkQmxvY2sgPSB0cnlSZWN5Y2xlQ29kZUJsb2NrKCZzY29w
ZS0+dm0oKS0+aGVhcCkpCisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IChOb3ROdWxs
LCBkZWFkQmxvY2spIFByb2dyYW1Db2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENv
ZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKG93bmVyRXhlY3V0
YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgZmlyc3RMaW5l
Q29sdW1uT2Zmc2V0KSk7CisgICAgfQorCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKQEAgLTExODAsOCAr
MTIyMCwxMCBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIH07CiAKK3N0YXRpY19hc3NlcnQoc2l6ZW9m
KFByb2dyYW1Db2RlQmxvY2spID09IHNpemVvZihDb2RlQmxvY2spLCAiUHJvZ3JhbUNvZGVCbG9j
ayBhbmQgQ29kZUJsb2NrIGhhdmUgc2FtZSBzaXplLiIpOworCiBjbGFzcyBFdmFsQ29kZUJsb2Nr
IDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7Ci1wdWJsaWM6Citwcml2YXRlOgogICAgIEV2YWxD
b2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKICAgICA6
IEdsb2JhbENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQogICAgIHsKQEAgLTExOTEs
NiArMTIzMywyNSBAQCBwdWJsaWM6CiAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhl
Y3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgMSkK
ICAgICB7CiAgICAgfQorCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbENvZGVC
bG9jaz4gY3JlYXRlKEV2YWxDb2RlQmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKENv
ZGVCbG9jayogZGVhZEJsb2NrID0gdHJ5UmVjeWNsZUNvZGVCbG9jayhvdGhlci5tX2hlYXApKQor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgZGVhZEJsb2NrKSBFdmFs
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBFdmFsQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsQ29kZUJsb2NrPiBjcmVhdGUoCisgICAgICAgIEV2
YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIAorICAgICAgICBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCAKKyAgICAgICAgSlNTY29wZSogc2NvcGUsIAorICAg
ICAgICBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKKyAgICB7Cisg
ICAgICAgIGlmIChDb2RlQmxvY2sqIGRlYWRCbG9jayA9IHRyeVJlY3ljbGVDb2RlQmxvY2soJnNj
b3BlLT52bSgpLT5oZWFwKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51
bGwsIGRlYWRCbG9jaykgRXZhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBFdmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNj
b3BlLCBzb3VyY2VQcm92aWRlcikpOworICAgIH0KICAgICAKICAgICBjb25zdCBJZGVudGlmaWVy
JiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2Nr
KCktPnZhcmlhYmxlKGluZGV4KTsgfQogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0
dXJuIHVubGlua2VkRXZhbENvZGVCbG9jaygpLT5udW1WYXJpYWJsZXMoKTsgfQpAQCAtMTIwNSwx
MCArMTI2NiwxMiBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5r
ZWRFdmFsQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4ganNDYXN0PFVubGlua2VkRXZhbENvZGVC
bG9jayo+KHVubGlua2VkQ29kZUJsb2NrKCkpOyB9CiB9OwogCitzdGF0aWNfYXNzZXJ0KHNpemVv
ZihFdmFsQ29kZUJsb2NrKSA9PSBzaXplb2YoQ29kZUJsb2NrKSwgIkV2YWxDb2RlQmxvY2sgYW5k
IENvZGVCbG9jayBoYXZlIHNhbWUgc2l6ZS4iKTsKKwogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2sg
OiBwdWJsaWMgQ29kZUJsb2NrIHsKLXB1YmxpYzoKK3ByaXZhdGU6CiAgICAgRnVuY3Rpb25Db2Rl
QmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCi0gICAg
OiBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2so
Q29weVBhcnNlZEJsb2NrLCBvdGhlcikKICAgICB7CiAgICAgfQogCkBAIC0xMjE2LDcgKzEyNzks
MjggQEAgcHVibGljOgogICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RM
aW5lQ29sdW1uT2Zmc2V0KQogICAgIHsKICAgICB9Ci0gICAgCisgIAorcHVibGljOiAKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gY3JlYXRlKEZ1bmN0aW9uQ29kZUJs
b2NrJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIGRlYWRCbG9jayA9IHRy
eVJlY3ljbGVDb2RlQmxvY2sob3RoZXIubV9oZWFwKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgKE5vdE51bGwsIGRlYWRCbG9jaykgRnVuY3Rpb25Db2RlQmxvY2soQ29weVBhcnNl
ZEJsb2NrLCBvdGhlcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZ1bmN0aW9uQ29k
ZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gY3JlYXRlKAorICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgCisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLCAKKyAgICAgICAgSlNTY29wZSogc2NvcGUsIAorICAgICAg
ICBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgCisgICAgICAgIHVu
c2lnbmVkIHNvdXJjZU9mZnNldCwgCisgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9m
ZnNldCkKKyAgICB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIGRlYWRCbG9jayA9IHRyeVJlY3lj
bGVDb2RlQmxvY2soJnNjb3BlLT52bSgpLT5oZWFwKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgKE5vdE51bGwsIGRlYWRCbG9jaykgRnVuY3Rpb25Db2RlQmxvY2sob3duZXJFeGVj
dXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VP
ZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEZ1bmN0aW9uQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ss
IHNjb3BlLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZz
ZXQpKTsKKyAgICB9CisgCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKQEAgLTEyMjQsNiArMTMwOCw4IEBA
IHByb3RlY3RlZDoKICNlbmRpZgogfTsKIAorc3RhdGljX2Fzc2VydChzaXplb2YoRnVuY3Rpb25D
b2RlQmxvY2spID09IHNpemVvZihDb2RlQmxvY2spLCAiRnVuY3Rpb25Db2RlQmxvY2sgYW5kIENv
ZGVCbG9jayBoYXZlIHNhbWUgc2l6ZS4iKTsKKwogaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5lQ2FsbEZyYW1lKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMTY2Njgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsOCArMzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIGNvbnN0
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi1Db2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldChCbG9j
a0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3IpCi0gICAgOiBtX2N1cnJlbnRseUV4ZWN1dGluZyhi
bG9ja0FsbG9jYXRvcikKK0NvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KEhlYXAqIGhlYXApCisg
ICAgOiBtX2N1cnJlbnRseUV4ZWN1dGluZyhoZWFwLT5ibG9ja0FsbG9jYXRvcigpKQorICAgICwg
bV9jb2RlQmxvY2tTd2VlcGVyKGhlYXAsIENGUnVuTG9vcEdldEN1cnJlbnQoKSkKIHsKIH0KIApA
QCAtNTcsMTIgKzU4LDE4IEBAIHZvaWQgQ29kZUJsb2NrU2V0OjphZGQoUGFzc1JlZlB0cjxDb2Rl
QmwKIAogdm9pZCBDb2RlQmxvY2tTZXQ6OnByb21vdGVZb3VuZ0NvZGVCbG9ja3MoKQogeworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nRigiUHJvbW90aW5nICVkIHlvdW5nIGNvZGUg
YmxvY2tzXG4iLCBtX25ld0NvZGVCbG9ja3Muc2l6ZSgpKTsKKwogICAgIG1fb2xkQ29kZUJsb2Nr
cy5hZGQobV9uZXdDb2RlQmxvY2tzLmJlZ2luKCksIG1fbmV3Q29kZUJsb2Nrcy5lbmQoKSk7CiAg
ICAgbV9uZXdDb2RlQmxvY2tzLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrU2V0OjpjbGVh
ck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKQogeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nRigiQ2xlYXJpbmcgbWFyayBvbiAlZCBvbGQgY29kZSBibG9ja3NcbiIsIG1fb2xkQ29k
ZUJsb2Nrcy5zaXplKCkpOworCiAgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fb2xk
Q29kZUJsb2NrcykgewogICAgICAgICBjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcgPSBmYWxz
ZTsKICAgICAgICAgY29kZUJsb2NrLT5tX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZCA9IGZh
bHNlOwpAQCAtOTEsMjggKzk4LDI3IEBAIHZvaWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtl
ZEFuZFVucmUKIHsKICAgICBIYXNoU2V0PENvZGVCbG9jayo+JiBzZXQgPSBjb2xsZWN0aW9uVHlw
ZSA9PSBFZGVuQ29sbGVjdGlvbiA/IG1fbmV3Q29kZUJsb2NrcyA6IG1fb2xkQ29kZUJsb2NrczsK
IAotICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgYSBmaXhwb2ludCBiZWNhdXNlIGNvZGUgYmxvY2tz
IHRoYXQgYXJlIHVubWFya2VkIG1heQotICAgIC8vIHJlZmVyIHRvIGVhY2ggb3RoZXIuIEZvciBl
eGFtcGxlLCBhIERGRyBjb2RlIGJsb2NrIHRoYXQgaXMgb3duZWQgYnkKLSAgICAvLyB0aGUgR0Mg
bWF5IHJlZmVyIHRvIGFuIEZUTCBmb3ItZW50cnkgY29kZSBibG9jayB0aGF0IGlzIGFsc28gb3du
ZWQgYnkKLSAgICAvLyB0aGUgR0MuCi0gICAgVmVjdG9yPENvZGVCbG9jayosIDE2PiB0b1JlbW92
ZTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiRml4cG9pbnRpbmcgb3ZlciB1
bm1hcmtlZCwgc2V0IHNpemUgPSAiLCBzZXQuc2l6ZSgpLCAiLi4uXG4iKTsKLSAgICBmb3IgKDs7
KSB7CisgICAgVmVjdG9yPENvZGVCbG9jayo+IHRvUmVtb3ZlOworICAgIHdoaWxlICh0cnVlKSB7
CiAgICAgICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBzZXQpIHsKICAgICAgICAgICAg
IGlmICghY29kZUJsb2NrLT5oYXNPbmVSZWYoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmRlcmVmKCk7CiAgICAgICAg
ICAgICB0b1JlbW92ZS5hcHBlbmQoY29kZUJsb2NrKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZW1vdmluZyAiLCB0b1JlbW92ZS5z
aXplKCksICIgYmxvY2tzLlxuIik7CisKICAgICAgICAgaWYgKHRvUmVtb3ZlLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDog
dG9SZW1vdmUpCisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgUmVtb3ZpbmcgIiwgdG9SZW1vdmUuc2l6ZSgpLCAiIGJsb2Nrcy5cbiIpOworCisgICAgICAg
IGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiB0b1JlbW92ZSkgewogICAgICAgICAgICAgc2V0
LnJlbW92ZShjb2RlQmxvY2spOworICAgICAgICAgICAgY29kZUJsb2NrLT5jbGVhckFsbFJlZmVy
ZW5jZWRDb2RlQmxvY2tzKCk7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1N3ZWVwZXIuZGVzdHJv
eUxhdGVyKGNvZGVCbG9jayk7CisgICAgICAgIH0KICAgICAgICAgdG9SZW1vdmUucmVzaXplKDAp
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0
LmgJKHJldmlzaW9uIDE2NjY4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTYgQEAKIAogI2luY2x1ZGUg
IkdDU2VnbWVudGVkQXJyYXkuaCIKICNpbmNsdWRlICJIZWFwT3BlcmF0aW9uLmgiCisjaW5jbHVk
ZSAiSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJp
bWl0aXZlcy5oPgorCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNo
Lmg+ICAgIAorI2VuZGlmCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00OCwxMCArNTQsMTQgQEAg
Y2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxvY2tTZXQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENvZGVCbG9ja1NldCk7CiAKKyAgICBmcmllbmQgY2xhc3MgSGVhcFRpbWVyOwog
cHVibGljOgotICAgIENvZGVCbG9ja1NldChCbG9ja0FsbG9jYXRvciYpOworICAgIENvZGVCbG9j
a1NldChIZWFwKik7CiAgICAgfkNvZGVCbG9ja1NldCgpOwotICAgIAorICAgCisgICAgLy8gUmV0
dXJucyBhIHByZXZpb3VzbHkgZGVzdHJveWVkIENvZGVCbG9jayBpZiBhbnkgYXJlIGF2YWlsYWJs
ZS4KKyAgICBDb2RlQmxvY2sqIHRyeVJlY3ljbGVDb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVC
bG9ja1N3ZWVwZXIudHJ5UmVjeWNsZUNvZGVCbG9jaygpOyB9CisgCiAgICAgLy8gQWRkIGEgQ29k
ZUJsb2NrLiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJ5IENvZGVCbG9jayBjb25zdHJ1Y3RvcnMuCiAg
ICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKICAgICAKQEAgLTEwOCw2ICsxMTgs
NyBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj4gbV9vbGRDb2RlQmxvY2tzOwog
ICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj4gbV9uZXdDb2RlQmxvY2tzOwogICAgIEdDU2VnbWVudGVk
QXJyYXk8Q29kZUJsb2NrKj4gbV9jdXJyZW50bHlFeGVjdXRpbmc7CisgICAgSW5jcmVtZW50YWxD
b2RlQmxvY2tTd2VlcGVyIG1fY29kZUJsb2NrU3dlZXBlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE2NjY4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTQsNyArMzE0LDYgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEpCiAgICAgLCBtX2NvcHlWaXNpdG9y
KG1fc2hhcmVkRGF0YSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQotICAgICwgbV9jb2RlQmxvY2tz
KG1fYmxvY2tBbGxvY2F0b3IpCiAgICAgLCBtX2lzU2FmZVRvQ29sbGVjdChmYWxzZSkKICAgICAs
IG1fd3JpdGVCYXJyaWVyQnVmZmVyKDI1NikKICAgICAsIG1fdm0odm0pCkBAIC0zMjMsNiArMzIy
LDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9sYXN0
RnVsbEdDTGVuZ3RoKDAuMDEpCiAgICAgLCBtX2xhc3RFZGVuR0NMZW5ndGgoMC4wMSkKICAgICAs
IG1fbGFzdENvZGVEaXNjYXJkVGltZShXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
KQorICAgICwgbV9jb2RlQmxvY2tzKHRoaXMpCiAgICAgLCBtX2Z1bGxBY3Rpdml0eUNhbGxiYWNr
KEdDQWN0aXZpdHlDYWxsYmFjazo6Y3JlYXRlRnVsbFRpbWVyKHRoaXMpKQogI2lmIEVOQUJMRShH
R0MpCiAgICAgLCBtX2VkZW5BY3Rpdml0eUNhbGxiYWNrKEdDQWN0aXZpdHlDYWxsYmFjazo6Y3Jl
YXRlRWRlblRpbWVyKHRoaXMpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2
aXNpb24gMTY2NjgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
RGVsYXllZFJlbGVhc2VTY29wZTsKICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0
aW5lOwogICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVTZXQ7CisgICAgZnJpZW5kIGNsYXNzIEhlYXBU
aW1lcjsKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkU3BhY2U7CkBA
IC0zNDgsNyArMzQ5LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhbmRsZVNldCBtX2hhbmRsZVNldDsK
ICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgIENvZGVCbG9ja1NldCBtX2NvZGVC
bG9ja3M7CiAgICAgSklUU3R1YlJvdXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7CiAgICAgRmlu
YWxpemVyT3duZXIgbV9maW5hbGl6ZXJPd25lcjsKICAgICAKQEAgLTM2Myw2ICszNjMsNyBAQCBw
cml2YXRlOgogCiAgICAgRG91Ymx5TGlua2VkTGlzdDxFeGVjdXRhYmxlQmFzZT4gbV9jb21waWxl
ZENvZGU7CiAgICAgCisgICAgQ29kZUJsb2NrU2V0IG1fY29kZUJsb2NrczsKICAgICBSZWZQdHI8
R0NBY3Rpdml0eUNhbGxiYWNrPiBtX2Z1bGxBY3Rpdml0eUNhbGxiYWNrOwogICAgIFJlZlB0cjxH
Q0FjdGl2aXR5Q2FsbGJhY2s+IG1fZWRlbkFjdGl2aXR5Q2FsbGJhY2s7CiAgICAgT3duUHRyPElu
Y3JlbWVudGFsU3dlZXBlcj4gbV9zd2VlcGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcFRpbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwVGltZXIuY3BwCShyZXZpc2lvbiAxNjY2ODApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw4IEBA
IHZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGkKICAgICAgICAgaGVhcFRp
bWVyID0gdm0tPmhlYXAuZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKICAgICBlbHNlIGlmICh2bS0+
aGVhcC5zd2VlcGVyKCktPm1fdGltZXIuZ2V0KCkgPT0gdGltZXIpCiAgICAgICAgIGhlYXBUaW1l
ciA9IHZtLT5oZWFwLnN3ZWVwZXIoKTsKKyAgICBlbHNlIGlmICh2bS0+aGVhcC5tX2NvZGVCbG9j
a3MubV9jb2RlQmxvY2tTd2VlcGVyLm1fdGltZXIuZ2V0KCkgPT0gdGltZXIpCisgICAgICAgIGhl
YXBUaW1lciA9ICZ2bS0+aGVhcC5tX2NvZGVCbG9ja3MubV9jb2RlQmxvY2tTd2VlcGVyOwogICAg
IGVsc2UKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbENvZGVC
bG9ja1N3ZWVwZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBzd2VlcFRpbWVTbGljZSA9
IC4wMTsgLy8gc2Vjb25kcworc3RhdGljIGNvbnN0IGRvdWJsZSBzd2VlcFRpbWVUb3RhbCA9IDAu
NTsKK3N0YXRpYyBjb25zdCBkb3VibGUgc3dlZXBUaW1lTXVsdGlwbGllciA9IDEuMCAvIHN3ZWVw
VGltZVRvdGFsOworCitJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXI6OkluY3JlbWVudGFsQ29k
ZUJsb2NrU3dlZXBlcihIZWFwKiBoZWFwLCBDRlJ1bkxvb3BSZWYgcnVuTG9vcCkKKyAgICA6IEhl
YXBUaW1lcihoZWFwLT52bSgpLCBydW5Mb29wKQorICAgICwgbV9idWZmZXIoc3RkOjptYWtlX3Vu
aXF1ZTxDb2RlQmxvY2sqW10+KDQpKQorICAgICwgbV9jYXBhY2l0eSg0KQorICAgICwgbV9zaXpl
KDApCisgICAgLCBtX25leHRFbXB0eVNsb3QoMCkKKyAgICAsIG1fbmV4dEJsb2NrVG9EZXN0cm95
KDApCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1lbXNldChtX2J1ZmZlci5nZXQoKSwgMCwgc2l6
ZW9mKENvZGVCbG9jayopICogbV9jYXBhY2l0eSk7CisjZW5kaWYKK30KKworSW5jcmVtZW50YWxD
b2RlQmxvY2tTd2VlcGVyOjp+SW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyKCkKK3sKKyAgICB3
aGlsZSAoaGFzQmxvY2tUb0Rlc3Ryb3koKSkKKyAgICAgICAgZGVzdHJveU5leHRCbG9jaygpOwor
fQorCitDb2RlQmxvY2sqIEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlcjo6dHJ5UmVjeWNsZUNv
ZGVCbG9jaygpCit7CisgICAgaWYgKCFoYXNCbG9ja1RvRGVzdHJveSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBDb2RlQmxvY2sqIGJsb2NrID0gbV9idWZmZXJbbV9uZXh0QmxvY2tU
b0Rlc3Ryb3ldOworICAgIGRlc3Ryb3lOZXh0QmxvY2soT25seUNhbGxEZXN0cnVjdG9yKTsKKyAg
ICByZXR1cm4gYmxvY2s7Cit9CisKK2Jvb2wgSW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyOjpo
YXNFbXB0eVNsb3QoKQoreworICAgIHJldHVybiBtX3NpemUgPCBtX2NhcGFjaXR5OworfQorCiti
b29sIEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlcjo6aGFzQmxvY2tUb0Rlc3Ryb3koKQorewor
ICAgIHJldHVybiBtX3NpemUgPiAwOworfQorCit2b2lkIEluY3JlbWVudGFsQ29kZUJsb2NrU3dl
ZXBlcjo6YWR2YW5jZShzaXplX3QmIGluZGV4KQoreworICAgIGluZGV4Kys7CisgICAgaWYgKGlu
ZGV4ID09IG1fY2FwYWNpdHkpCisgICAgICAgIGluZGV4ID0gMDsKK30KKwordm9pZCBJbmNyZW1l
bnRhbENvZGVCbG9ja1N3ZWVwZXI6OnJlc2l6ZShzaXplX3QgbmV3Q2FwYWNpdHkpCit7CisgICAg
ZGF0YUxvZ0YoIlJlc2l6aW5nIGNvZGUgYmxvY2sgcXVldWUgZnJvbSAlbHUgdG8gJWx1XG4iLCBt
X2NhcGFjaXR5LCBuZXdDYXBhY2l0eSk7CisgICAgQVNTRVJUKCFoYXNFbXB0eVNsb3QoKSk7Cisg
ICAgQVNTRVJUKG1fbmV4dEVtcHR5U2xvdCA9PSBtX25leHRCbG9ja1RvRGVzdHJveSk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPENvZGVCbG9jaypbXT4gbmV3QnVmZmVyID0gc3RkOjptYWtlX3VuaXF1
ZTxDb2RlQmxvY2sqW10+KG5ld0NhcGFjaXR5KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbWVtc2V0
KG5ld0J1ZmZlci5nZXQoKSwgMCwgc2l6ZW9mKENvZGVCbG9jayopICogbmV3Q2FwYWNpdHkpOwor
I2VuZGlmCisgICAgLy8gU2hpZnQgdGhlIGVsZW1lbnRzIGRvd24gdG8gdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbmV3IGJ1ZmZlci4KKyAgICBpZiAobV9uZXh0QmxvY2tUb0Rlc3Ryb3kgPCBtX25leHRF
bXB0eVNsb3QpCisgICAgICAgIG1lbWNweShuZXdCdWZmZXIuZ2V0KCksIG1fYnVmZmVyLmdldCgp
ICsgbV9uZXh0QmxvY2tUb0Rlc3Ryb3ksIHNpemVvZihDb2RlQmxvY2sqKSAqIG1fc2l6ZSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIFdlIHdhbnQgdG8gZW5kIHVwIHdpdGggbV9uZXh0QmxvY2tU
b0Rlc3Ryb3kgYXMgdGhlIGZpcnN0IGVsZW1lbnQuCisgICAgICAgIC8vIENvcHkgZnJvbSBtX25l
eHRCbG9ja1RvRGVzdHJveSB0byB0aGUgZW5kIG9mIHRoZSBvbGQgYnVmZmVyLgorICAgICAgICBz
aXplX3QgbnVtRWxlbWVudHNBdFRhaWwgPSBtX3NpemUgLSBtX25leHRCbG9ja1RvRGVzdHJveTsK
KyAgICAgICAgbWVtY3B5KG5ld0J1ZmZlci5nZXQoKSwgbV9idWZmZXIuZ2V0KCkgKyBtX25leHRC
bG9ja1RvRGVzdHJveSwgc2l6ZW9mKENvZGVCbG9jayopICogbnVtRWxlbWVudHNBdFRhaWwpOwor
ICAgICAgICAvLyBDb3B5IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgb2xkIGJ1ZmZlciB0byBt
X25leHRFbXB0eVNsb3QuCisgICAgICAgIG1lbWNweShuZXdCdWZmZXIuZ2V0KCkgKyBudW1FbGVt
ZW50c0F0VGFpbCwgbV9idWZmZXIuZ2V0KCksIHNpemVvZihDb2RlQmxvY2sqKSAqIG1fbmV4dEJs
b2NrVG9EZXN0cm95KTsKKyAgICB9CisgICAgbV9uZXh0QmxvY2tUb0Rlc3Ryb3kgPSAwOworICAg
IG1fbmV4dEVtcHR5U2xvdCA9IG1fc2l6ZTsKKyAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7
CisgICAgbV9idWZmZXIuc3dhcChuZXdCdWZmZXIpOworCit9CisKK3ZvaWQgSW5jcmVtZW50YWxD
b2RlQmxvY2tTd2VlcGVyOjpkZXN0cm95TGF0ZXIoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgaWYgKCFoYXNFbXB0eVNsb3QoKSkKKyAgICAgICAgcmVzaXplKG1fY2FwYWNpdHkgKiAyKTsK
KyAgICBkYXRhTG9nRigiUXVldWluZyBjb2RlIGJsb2NrICVwIHRvIGRlc3Ryb3kgbGF0ZXJcbiIs
IGNvZGVCbG9jayk7CisgICAgQVNTRVJUKGhhc0VtcHR5U2xvdCgpKTsKKyAgICBtX2J1ZmZlcltt
X25leHRFbXB0eVNsb3RdID0gY29kZUJsb2NrOworICAgIGFkdmFuY2UobV9uZXh0RW1wdHlTbG90
KTsKKyAgICBtX3NpemUrKzsKK30KKwordm9pZCBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXI6
OmRvV29yaygpCit7CisgICAgZG9Td2VlcChXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpKTsKK30KKwordm9pZCBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXI6OnNjaGVkdWxlVGlt
ZXIoKQoreworICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCks
IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgKHN3ZWVwVGltZVNsaWNlICogc3dlZXBUaW1l
TXVsdGlwbGllcikpOworfQorCit2b2lkIEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlcjo6Y2Fu
Y2VsVGltZXIoKQoreworICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIu
Z2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgc19kZWNhZGUpOworfQorCit2b2lk
IEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlcjo6ZG9Td2VlcChkb3VibGUgc3dlZXBCZWdpblRp
bWUpIAoreworICAgIGRhdGFMb2dGKCJTd2VlcGluZyBjb2RlIGJsb2Nrcy4uLlxuIik7CisgICAg
d2hpbGUgKGhhc0Jsb2NrVG9EZXN0cm95KCkpIHsKKyAgICAgICAgZGVzdHJveU5leHRCbG9jaygp
OworCisgICAgICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9IFdURjo6bW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCkgLSBzd2VlcEJlZ2luVGltZTsKKyAgICAgICAgaWYgKGVsYXBzZWRUaW1lIDwg
c3dlZXBUaW1lU2xpY2UpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzY2hlZHVs
ZVRpbWVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgSW5jcmVtZW50YWxD
b2RlQmxvY2tTd2VlcGVyOjpkZXN0cm95TmV4dEJsb2NrKERlc3Ryb3lCZWhhdmlvciBiZWhhdmlv
cikKK3sKKyAgICBBU1NFUlQoaGFzQmxvY2tUb0Rlc3Ryb3koKSk7CisgICAgQ29kZUJsb2NrKiBi
bG9jayA9IG51bGxwdHI7CisgICAgc3RkOjpzd2FwKGJsb2NrLCBtX2J1ZmZlclttX25leHRCbG9j
a1RvRGVzdHJveV0pOworICAgIGFkdmFuY2UobV9uZXh0QmxvY2tUb0Rlc3Ryb3kpOworICAgIG1f
c2l6ZS0tOworCisgICAgQVNTRVJUKGJsb2NrLT5oYXNPbmVSZWYoKSk7CisgICAgaWYgKGJlaGF2
aW9yID09IE9ubHlDYWxsRGVzdHJ1Y3RvcikgeworICAgICAgICBkYXRhTG9nRigiRGVzdHJveWlu
ZyBjb2RlIGJsb2NrICVwXG4iLCBibG9jayk7CisgICAgICAgIGJsb2NrLT5Db2RlQmxvY2s6On5D
b2RlQmxvY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkYXRhTG9nRigiRGVsZXRp
bmcgY29kZSBibG9jayAlcFxuIiwgYmxvY2spOworICAgIEFTU0VSVChiZWhhdmlvciA9PSBSZXR1
cm5Ub01hbGxvYyk7CisgICAgYmxvY2stPmRlcmVmKCk7CisKKyAgICBpZiAoIWhhc0Jsb2NrVG9E
ZXN0cm95KCkpCisgICAgICAgIGNhbmNlbFRpbWVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxDb2RlQmxvY2tT
d2VlcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVt
ZW50YWxDb2RlQmxvY2tTd2VlcGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbmNyZW1lbnRhbENvZGVCbG9j
a1N3ZWVwZXJfaAorI2RlZmluZSBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXJfaAorCisjaW5j
bHVkZSAiSGVhcFRpbWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7
CitjbGFzcyBIZWFwOworCitjbGFzcyBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXIgOiBwdWJs
aWMgSGVhcFRpbWVyIHsKKyAgICBmcmllbmQgY2xhc3MgSGVhcFRpbWVyOworcHVibGljOgorICAg
IEluY3JlbWVudGFsQ29kZUJsb2NrU3dlZXBlcihIZWFwKiwgQ0ZSdW5Mb29wUmVmKTsKKyAgICB+
SW5jcmVtZW50YWxDb2RlQmxvY2tTd2VlcGVyKCk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBhIENv
ZGVCbG9jayB3YWl0aW5nIHRvIGJlIGRlc3Ryb3llZCB3ZSBlYWdlcmx5IGRlc3Ryb3kgaXQgYW5k
CisgICAgLy8gcmV0dXJuIGl0cyBlbXB0eSBzaGVsbCBiYWNrIHRvIGJlIHJldXNlZCBmb3IgYSBu
ZXcgQ29kZUJsb2NrLgorICAgIENvZGVCbG9jayogdHJ5UmVjeWNsZUNvZGVCbG9jaygpOworCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIGRvV29yaygpIG92ZXJyaWRlOworCisg
ICAgdm9pZCBkZXN0cm95TGF0ZXIoQ29kZUJsb2NrKik7CisKKyAgICB2b2lkIHNjaGVkdWxlVGlt
ZXIoKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIERlc3Ryb3lCZWhhdmlvciB7CisgICAgICAgIE9u
bHlDYWxsRGVzdHJ1Y3RvciwKKyAgICAgICAgUmV0dXJuVG9NYWxsb2MKKyAgICB9OworCisgICAg
dm9pZCBkb1N3ZWVwKGRvdWJsZSBzd2VlcEJlZ2luVGltZSk7CisgICAgYm9vbCBoYXNFbXB0eVNs
b3QoKTsKKyAgICBib29sIGhhc0Jsb2NrVG9EZXN0cm95KCk7CisgICAgdm9pZCBhZHZhbmNlKHNp
emVfdCYpOworICAgIHZvaWQgcmVzaXplKHNpemVfdCk7CisgICAgdm9pZCBkZXN0cm95TmV4dEJs
b2NrKERlc3Ryb3lCZWhhdmlvciA9IFJldHVyblRvTWFsbG9jKTsKKyAgICB2b2lkIGNhbmNlbFRp
bWVyKCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29kZUJsb2NrKltdPiBtX2J1ZmZlcjsKKyAg
ICBzaXplX3QgbV9jYXBhY2l0eTsKKyAgICBzaXplX3QgbV9zaXplOworICAgIHNpemVfdCBtX25l
eHRFbXB0eVNsb3Q7CisgICAgc2l6ZV90IG1fbmV4dEJsb2NrVG9EZXN0cm95OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmNyZW1lbnRhbENvZGVCbG9ja1N3ZWVwZXJf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJ
KHJldmlzaW9uIDE2NjY4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsOSArMTk2LDkgQEAgUGFzc1JlZlB0cjxD
b2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5k
ID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPm1f
ZXZhbENvZGVCbG9jayk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmdW5jdGlvbik7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygKKyAgICAgICAgcmV0dXJuIEV2
YWxDb2RlQmxvY2s6OmNyZWF0ZSgKICAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUt
Pm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmdldCgpLCAqc2NvcGUsCi0gICAgICAgICAgICBleGVj
dXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpKSk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5z
b3VyY2UoKS5wcm92aWRlcigpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mbygpID09
IFByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKQEAgLTIwNiw5ICsyMDYsOSBAQCBQYXNzUmVm
UHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJs
ZS0+bV9wcm9ncmFtQ29kZUJsb2NrKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZ1bmN0aW9u
KTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKAorICAgICAg
ICByZXR1cm4gUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKAogICAgICAgICAgICAgZXhlY3V0YWJs
ZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suZ2V0KCksICpzY29wZSwK
LSAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUt
PnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJj
ZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpOwogICAg
IH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChjbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1
dGFibGU6OmluZm8oKSk7CkBAIC0yNDIsOCArMjQyLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+
IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCA9IGV4ZWN1dGFi
bGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBl
eGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydENvbHVtbigpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBGdW5jdGlvbkNvZGVCbG9jaygKLSAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2Rl
QmxvY2ssICpzY29wZSwgcHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgc3RhcnRDb2x1bW4pKTsKKyAg
ICByZXR1cm4gRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZShleGVjdXRhYmxlLCB1bmxpbmtlZENv
ZGVCbG9jaywgKnNjb3BlLCBwcm92aWRlciwgc291cmNlT2Zmc2V0LCBzdGFydENvbHVtbik7CiB9
CiAKIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVu
dENvZGVCbG9ja0ZvcigKQEAgLTI1NCw4ICsyNTMsNyBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4g
U2NyaXB0RXhlY3V0YWJsZTo6CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
anNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIEV2YWxDb2RlQmxvY2sqIGJh
c2VsaW5lID0gc3RhdGljX2Nhc3Q8RXZhbENvZGVCbG9jayo+KAogICAgICAgICAgICAgZXhlY3V0
YWJsZS0+bV9ldmFsQ29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgICAgIFJlZlB0
cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygKLSAg
ICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpKTsKKyAgICAg
ICAgUmVmUHRyPEV2YWxDb2RlQmxvY2s+IHJlc3VsdCA9IEV2YWxDb2RlQmxvY2s6OmNyZWF0ZSgq
YmFzZWxpbmUpOwogICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKGJhc2VsaW5lKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yNjUsOCArMjYzLDcgQEAgUGFzc1JlZlB0
cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgICAgICBQcm9ncmFtRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAg
ICBQcm9ncmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxv
Y2sqPigKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCkpOwotICAgICAgICBSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gcmVzdWx0ID0g
YWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxvY2soCi0gICAgICAgICAgICBDb2RlQmxvY2s6OkNv
cHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7CisgICAgICAgIFJlZlB0cjxQcm9ncmFtQ29kZUJs
b2NrPiByZXN1bHQgPSBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUoKmJhc2VsaW5lKTsKICAgICAg
ICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQpAQCAtMjc1LDggKzI3Miw3IEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3Jp
cHRFeGVjdXRhYmxlOjoKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJh
c2VsaW5lID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPigKICAgICAgICAgZXhlY3V0
YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgUmVmUHRy
PEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxv
Y2soCi0gICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpKTsKKyAg
ICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3VsdCA9IEZ1bmN0aW9uQ29kZUJsb2NrOjpj
cmVhdGUoKmJhc2VsaW5lKTsKICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKGJhc2VsaW5lKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>