<?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>28330</bug_id>
          
          <creation_ts>2009-08-14 16:21:45 -0700</creation_ts>
          <short_desc>Remove AST nodes from use within the Runtime (outside of parsing), stage 1</short_desc>
          <delta_ts>2009-08-14 18:42:09 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>140380</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-14 16:21:45 -0700</bug_when>
    <thetext>Remove the EvalNode and ProgramNode from use in the runtime.  They still exist after this patch, but are hidden behind EvalExecutable and FunctionExecutable, and are also still reachable behind CodeBlock::m_ownerNode.
The next step will be to beat back FunctionBodyNode in the same fashion.
Then remove the usage via CodeBlock, then only construct these nodes only on demand during bytecode generation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140386</commentid>
    <comment_count>1</comment_count>
      <attachid>34881</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-14 17:00:10 -0700</bug_when>
    <thetext>Created attachment 34881
The Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140387</commentid>
    <comment_count>2</comment_count>
      <attachid>34881</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-14 17:07:50 -0700</bug_when>
    <thetext>Comment on attachment 34881
The Patch

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140410</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-14 18:42:09 -0700</bug_when>
    <thetext>fixed in 
http://trac.webkit.org/changeset/47304</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34881</attachid>
            <date>2009-08-14 17:00:10 -0700</date>
            <delta_ts>2009-08-14 17:07:49 -0700</delta_ts>
            <desc>The Patch</desc>
            <filename>patch.28330.0.txt</filename>
            <type>text/plain</type>
            <size>43248</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MzAyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIwMDktMDgtMTQgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBBU1Qgbm9kZXMgZnJvbSB1c2Ugd2l0
aGluIHRoZSBSdW50aW1lIChvdXRzaWRlIG9mIHBhcnNpbmcpLCBzdGFnZSAxCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMzMAorCisgICAgICAgIFJl
bW92ZSB0aGUgRXZhbE5vZGUgYW5kIFByb2dyYW1Ob2RlIGZyb20gdXNlIGluIHRoZSBydW50aW1l
LiAgVGhleSBzdGlsbCBleGlzdAorICAgICAgICBhZnRlciB0aGlzIHBhdGNoLCBidXQgYXJlIGhp
ZGRlbiBiZWhpbmQgRXZhbEV4ZWN1dGFibGUgYW5kIEZ1bmN0aW9uRXhlY3V0YWJsZSwKKyAgICAg
ICAgYW5kIGFyZSBhbHNvIHN0aWxsIHJlYWNoYWJsZSBiZWhpbmQgQ29kZUJsb2NrOjptX293bmVy
Tm9kZS4KKworICAgICAgICBUaGUgbmV4dCBzdGVwIHdpbGwgYmUgdG8gYmVhdCBiYWNrIEZ1bmN0
aW9uQm9keU5vZGUgaW4gdGhlIHNhbWUgZmFzaGlvbi4KKyAgICAgICAgVGhlbiByZW1vdmUgdGhl
IHVzYWdlIHZpYSBDb2RlQmxvY2ssIHRoZW4gb25seSBjb25zdHJ1Y3QgdGhlc2Ugbm9kZXMgb25s
eSBvbgorICAgICAgICBkZW1hbmQgZHVyaW5nIGJ5dGVjb2RlIGdlbmVyYXRpb24uCisKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpHbG9iYWxDb2RlQmxvY2s6Okds
b2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6Okdsb2JhbENvZGVCbG9jazo6fkdsb2JhbENv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OlByb2dyYW1Db2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpFdmFsQ29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OkZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6TmF0aXZlQ29kZUJsb2NrOjpOYXRpdmVDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVj
b2RlL0V2YWxDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6Z2V0KToK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OmV2YWx1YXRl
SW5HbG9iYWxDYWxsRnJhbWUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
LmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpjYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIHBhcnNlci9Ob2Rl
cy5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZU5hdGl2ZVRodW5r
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6Z2VuZXJhdGVCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmJ5dGVjb2RlRm9yRXhjZXB0aW9uSW5mb1Jl
cGFyc2UpOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6UGFyc2Vy
OjpwYXJzZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cmVwYXJzZSk6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6cGFyc2VGdW5jdGlvbkZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKEpTQzo6Ojpw
YXJzZSk6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
Y2hlY2tTeW50YXgpOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9FcnJvci5jcHA6CisgICAgICAgIChKU0M6OnRocm93RXJyb3IpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3IuaDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OlRlbXBsYXRlRXhlY3V0YWJsZTo6VGVtcGxhdGVFeGVjdXRhYmxlKToKKyAgICAg
ICAgKEpTQzo6VGVtcGxhdGVFeGVjdXRhYmxlOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAgKEpT
Qzo6VGVtcGxhdGVFeGVjdXRhYmxlOjpzb3VyY2VVUkwpOgorICAgICAgICAoSlNDOjpUZW1wbGF0
ZUV4ZWN1dGFibGU6OmxpbmVObyk6CisgICAgICAgIChKU0M6OlRlbXBsYXRlRXhlY3V0YWJsZTo6
Ynl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZUV4ZWN1dGFibGU6OmppdENvZGUpOgor
ICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6RXZhbEV4ZWN1dGFibGUpOgorICAgICAgICAo
SlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6UHJvZ3JhbUV4ZWN1dGFibGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEZ1
bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0
YTo6bnVtZXJpY0NvbXBhcmVGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3Qp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojpjb2RlQmxvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorCiAyMDA5LTA4LTE0ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2Vp
bmlnLgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NzMwMikKKysrIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMiw2ICsxMzIsNyBAQAogCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJN
djdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2QUREMTQzMEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oICovOyB9Owog
CQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZBREQxNDQwRkRERUE5
ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCAqLzsgfTsKIAkJODZDMzZFRUEwRUUx
Mjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkMzNkVFOTBFRTEyODlEMDBCM0RGNTkgLyogTWFjcm9B
c3NlbWJsZXIuaCAqLzsgfTsKKwkJODZDQUZFRTMxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFi
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0FG
RUUyMTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8q
IEpJVElubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmgg
Ki87IH07CiAJCTg2Q0M4NUEzMEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0M4NUEyMEVFNzlCNzQw
MDI4ODY4MiAvKiBKSVRDYWxsLmNwcCAqLzsgfTsKIAkJODZDQzg1QzQwRUU3QTg5NDAwMjg4Njgy
IC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAgKi87IH07CkBAIC02NDYsNiArNjQ3LDcgQEAKIAkJODZBREQxNDMwRkRERUE5ODAw
MDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFSTXY3QXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QURE
MTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNdjcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1i
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2Q0FGRUUyMTAzNURERTYwMDI4QTYwOSAv
KiBFeGVjdXRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDQzg1QTAwRUU3OUE0NzAwMjg4
NjgyIC8qIEpJVElubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkND
ODVBMjBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKSVRDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFByb3BlcnR5QWNjZXNzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNzcsNiArMTM3OSw3IEBACiAJCQkJQkMw
MkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCiAJCQkJMTQyOUQ4
NzcwRUQyMUFDRDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMuY3BwICovLAogCQkJCUE3Mjcw
MUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggKi8sCisJCQkJODZDQUZF
RTIxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAqLywKIAkJCQlCQzI2ODBDMDBFMTZE
NEU5MDBBMDZFOTIgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkMyNjgwQzEw
RTE2RDRFOTAwQTA2RTkyIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuaCAqLywKIAkJCQlGNjkyQTg1
QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwICovLApAQCAtMTkwNCw2
ICsxOTA3LDcgQEAKIAkJCQk5Njg4Q0IxNjBFRDEyQjRFMDAxRDY0OUYgLyogWDg2QXNzZW1ibGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzc5NTU5MDEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q2NDlBQTEwMTUyMjRFMDA5QjJFMUIgLyogUG9z
c2libHlOdWxsLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkNBRkVFMzEwMzVEREU2MDAyOEE2MDkg
LyogRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gNDczMDIpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDkgKzI1MCwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBGYXN0QWxsb2NCYXNlIHsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAg
ICAgICBDb2RlQmxvY2soU2NvcGVOb2RlKiBvd25lck5vZGUpOwogICAgICAgICBDb2RlQmxvY2so
U2NvcGVOb2RlKiBvd25lck5vZGUsIENvZGVUeXBlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiwgdW5zaWduZWQgc291cmNlT2Zmc2V0KTsKKyAgICBwdWJsaWM6CiAgICAgICAgIH5Db2RlQmxv
Y2soKTsKIAogICAgICAgICB2b2lkIG1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJik7CkBAIC01NTAs
MTYgKzU1MSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBQcm9ncmFtIGNvZGUgaXMgbm90
IG1hcmtlZCBieSBhbnkgZnVuY3Rpb24sIHNvIHdlIG1ha2UgdGhlIGdsb2JhbCBvYmplY3QKICAg
ICAvLyByZXNwb25zaWJsZSBmb3IgbWFya2luZyBpdC4KIAotICAgIGNsYXNzIFByb2dyYW1Db2Rl
QmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKKyAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBw
dWJsaWMgQ29kZUJsb2NrIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2so
U2NvcGVOb2RlKiBvd25lck5vZGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikK
LSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyTm9kZSwgY29kZVR5cGUsIHNvdXJjZVByb3Zp
ZGVyLCAwKQorICAgICAgICBHbG9iYWxDb2RlQmxvY2soU2NvcGVOb2RlKiBvd25lck5vZGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
ciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJOb2RlLCBjb2RlVHlwZSwgc291cmNlUHJvdmlk
ZXIsIHNvdXJjZU9mZnNldCkKICAgICAgICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBtX2dsb2JhbE9iamVjdC0+Y29kZUJsb2Nrcygp
LmFkZCh0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIH5Qcm9ncmFtQ29kZUJsb2NrKCkKKyAg
ICAgICAgfkdsb2JhbENvZGVCbG9jaygpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX2ds
b2JhbE9iamVjdCkKICAgICAgICAgICAgICAgICBtX2dsb2JhbE9iamVjdC0+Y29kZUJsb2Nrcygp
LnJlbW92ZSh0aGlzKTsKQEAgLTU3MSwxMCArNTcyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7IC8vIEZvciBwcm9ncmFtIGFuZCBl
dmFsIG5vZGVzLCB0aGUgZ2xvYmFsIG9iamVjdCB0aGF0IG1hcmtzIHRoZSBjb25zdGFudCBwb29s
LgogICAgIH07CiAKLSAgICBjbGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIFByb2dyYW1Db2Rl
QmxvY2sgeworICAgIGNsYXNzIFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJs
b2NrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFByb2dyYW1Db2RlQmxvY2soU2NvcGVOb2RlKiBv
d25lck5vZGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKKyAgICAgICAgICAg
IDogR2xvYmFsQ29kZUJsb2NrKG93bmVyTm9kZSwgY29kZVR5cGUsIHNvdXJjZVByb3ZpZGVyLCAw
LCBnbG9iYWxPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBjbGFz
cyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7CiAgICAgcHVibGljOgog
ICAgICAgICBFdmFsQ29kZUJsb2NrKFNjb3BlTm9kZSogb3duZXJOb2RlLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
ciwgaW50IGJhc2VTY29wZURlcHRoKQotICAgICAgICAgICAgOiBQcm9ncmFtQ29kZUJsb2NrKG93
bmVyTm9kZSwgRXZhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIpCisgICAgICAg
ICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lck5vZGUsIEV2YWxDb2RlLCBzb3VyY2VQcm92aWRl
ciwgMCwgZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGJhc2VT
Y29wZURlcHRoKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTU4NSw2ICs1OTQsMjIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX2Jhc2VTY29wZURlcHRoOwogICAgIH07CiAKKyAg
ICBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2soU2NvcGVOb2RlKiBvd25lck5vZGUsIENvZGVU
eXBlIGNvZGVUeXBlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwg
dW5zaWduZWQgc291cmNlT2Zmc2V0KQorICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJOb2Rl
LCBjb2RlVHlwZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgfTsKKworICAgIGNsYXNzIE5hdGl2ZUNvZGVCbG9jayA6IHB1YmxpYyBDb2Rl
QmxvY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgTmF0aXZlQ29kZUJsb2NrKFNjb3BlTm9kZSog
b3duZXJOb2RlKQorICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJOb2RlKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICB9OworCiAgICAgaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIo
aW50IGluZGV4KQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5j
b2RlQmxvY2soKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgJ
KHJldmlzaW9uIDQ3MzAyKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWZuZGVmIEV2YWxDb2RlQ2Fj
aGVfaAogI2RlZmluZSBFdmFsQ29kZUNhY2hlX2gKIAorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIK
ICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVk
ZSAiUGFyc2VyLmgiCkBAIC00MSwyOSArNDIsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBFdmFsQ29kZUNhY2hlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBhc3NSZWZQdHI8RXZh
bE5vZGU+IGdldChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIGV2YWxTb3VyY2UsIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSkKKyAgICAg
ICAgUGFzc1JlZlB0cjxFdmFsRXhlY3V0YWJsZT4gZ2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
VVN0cmluZyYgZXZhbFNvdXJjZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUm
IGV4Y2VwdGlvblZhbHVlKQogICAgICAgICB7Ci0gICAgICAgICAgICBSZWZQdHI8RXZhbE5vZGU+
IGV2YWxOb2RlOworICAgICAgICAgICAgUmVmUHRyPEV2YWxFeGVjdXRhYmxlPiBldmFsRXhlY3V0
YWJsZTsKIAogICAgICAgICAgICAgaWYgKGV2YWxTb3VyY2Uuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxl
U291cmNlTGVuZ3RoICYmICgqc2NvcGVDaGFpbi0+YmVnaW4oKSktPmlzVmFyaWFibGVPYmplY3Qo
KSkKLSAgICAgICAgICAgICAgICBldmFsTm9kZSA9IG1fY2FjaGVNYXAuZ2V0KGV2YWxTb3VyY2Uu
cmVwKCkpOworICAgICAgICAgICAgICAgIGV2YWxFeGVjdXRhYmxlID0gbV9jYWNoZU1hcC5nZXQo
ZXZhbFNvdXJjZS5yZXAoKSk7CiAKLSAgICAgICAgICAgIGlmICghZXZhbE5vZGUpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgZXJyb3JMaW5lOwotICAgICAgICAgICAgICAgIFVTdHJpbmcgZXJyb3JN
ZXNzYWdlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNvdXJjZUNvZGUgc291
cmNlID0gbWFrZVNvdXJjZShldmFsU291cmNlKTsKLSAgICAgICAgICAgICAgICBldmFsTm9kZSA9
IGV4ZWMtPmdsb2JhbERhdGEoKS5wYXJzZXItPnBhcnNlPEV2YWxOb2RlPihleGVjLCBleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCksIHNvdXJjZSwgJmVycm9yTGluZSwgJmVy
cm9yTWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV2YWxOb2RlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChldmFsU291cmNlLnNpemUoKSA8IG1heENhY2hlYWJsZVNvdXJjZUxlbmd0
aCAmJiAoKnNjb3BlQ2hhaW4tPmJlZ2luKCkpLT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYgbV9jYWNo
ZU1hcC5zaXplKCkgPCBtYXhDYWNoZUVudHJpZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X2NhY2hlTWFwLnNldChldmFsU291cmNlLnJlcCgpLCBldmFsTm9kZSk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJvck1lc3NhZ2UsIGVycm9yTGluZSwgc291cmNl
LnByb3ZpZGVyKCktPmFzSUQoKSwgMCk7CisgICAgICAgICAgICBpZiAoIWV2YWxFeGVjdXRhYmxl
KSB7CisgICAgICAgICAgICAgICAgZXZhbEV4ZWN1dGFibGUgPSBuZXcgRXZhbEV4ZWN1dGFibGUo
bWFrZVNvdXJjZShldmFsU291cmNlKSk7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUg
PSBldmFsRXhlY3V0YWJsZS0+cGFyc2UoZXhlYyk7CisgICAgICAgICAgICAgICAgaWYgKGV4Y2Vw
dGlvblZhbHVlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZXZhbFNvdXJjZS5zaXplKCkgPCBtYXhDYWNoZWFi
bGVTb3VyY2VMZW5ndGggJiYgKCpzY29wZUNoYWluLT5iZWdpbigpKS0+aXNWYXJpYWJsZU9iamVj
dCgpICYmIG1fY2FjaGVNYXAuc2l6ZSgpIDwgbWF4Q2FjaGVFbnRyaWVzKQorICAgICAgICAgICAg
ICAgICAgICBtX2NhY2hlTWFwLnNldChldmFsU291cmNlLnJlcCgpLCBldmFsRXhlY3V0YWJsZSk7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBldmFsTm9kZS5yZWxlYXNlKCk7
CisgICAgICAgICAgICByZXR1cm4gZXZhbEV4ZWN1dGFibGUucmVsZWFzZSgpOwogICAgICAgICB9
CiAKICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZU1hcC5pc0Vt
cHR5KCk7IH0KQEAgLTc4LDcgKzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxlU291cmNlTGVuZ3RoID0gMjU2OwogICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1heENhY2hlRW50cmllcyA9IDY0OwogCi0gICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxSZWZQdHI8VVN0cmluZzo6UmVwPiwgUmVmUHRyPEV2YWxOb2RlPiA+IEV2YWxDYWNoZU1h
cDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVU3RyaW5nOjpSZXA+LCBSZWZQdHI8
RXZhbEV4ZWN1dGFibGU+ID4gRXZhbENhY2hlTWFwOwogICAgICAgICBFdmFsQ2FjaGVNYXAgbV9j
YWNoZU1hcDsKICAgICB9OwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
CShyZXZpc2lvbiA0NzMwMikKKysrIEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDE0ICsxMTMsMTIgQEAgSlNWYWx1ZSBldmFsdWF0ZUlu
R2xvYmFsQ2FsbEZyYW1lKGNvbnN0IAogewogICAgIENhbGxGcmFtZSogZ2xvYmFsQ2FsbEZyYW1l
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBpbnQgZXJyTGluZTsKLSAgICBV
U3RyaW5nIGVyck1zZzsKLSAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0
KTsKLSAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCktPnBhcnNlci0+cGFyc2U8RXZhbE5vZGU+KGdsb2JhbENhbGxGcmFtZSwgZ2xvYmFsT2Jq
ZWN0LT5kZWJ1Z2dlcigpLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKLSAgICBpZiAoIWV2
YWxOb2RlKQotICAgICAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShnbG9iYWxDYWxsRnJhbWUsIFN5
bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigpLT5hc0lEKCksIHNv
dXJjZS5wcm92aWRlcigpLT51cmwoKSk7CisgICAgRXZhbEV4ZWN1dGFibGUgZXZhbChtYWtlU291
cmNlKHNjcmlwdCkpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IGV2YWwucGFyc2UoZ2xvYmFsQ2Fs
bEZyYW1lKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBlcnJvcjsKIAotICAgIHJl
dHVybiBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZh
bE5vZGUuZ2V0KCksIGdsb2JhbENhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxDYWxsRnJh
bWUtPnNjb3BlQ2hhaW4oKSwgJmV4Y2VwdGlvbik7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlci0+ZXhlY3V0ZSgmZXZhbCwgZ2xvYmFsQ2FsbEZyYW1l
LCBnbG9iYWxPYmplY3QsIGdsb2JhbENhbGxGcmFtZS0+c2NvcGVDaGFpbigpLCAmZXhjZXB0aW9u
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiA0NzMwMikKKysrIEphdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzksMTQgKzc5LDEyIEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnMK
ICAgICBpZiAoIW1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKIAotICAgIGludCBlcnJMaW5lOwotICAgIFVTdHJpbmcgZXJyTXNnOwotICAgIFNvdXJj
ZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3JpcHQpOwotICAgIFJlZlB0cjxFdmFsTm9kZT4g
ZXZhbE5vZGUgPSBtX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxEYXRhLT5wYXJzZXIt
PnBhcnNlPEV2YWxOb2RlPihtX2NhbGxGcmFtZSwgbV9jYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxP
YmplY3QoKS0+ZGVidWdnZXIoKSwgc291cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7Ci0gICAgaWYg
KCFldmFsTm9kZSkKLSAgICAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUobV9jYWxsRnJhbWUsIFN5
bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigpLT5hc0lEKCksIHNv
dXJjZS5wcm92aWRlcigpLT51cmwoKSk7CisgICAgRXZhbEV4ZWN1dGFibGUgZXZhbChtYWtlU291
cmNlKHNjcmlwdCkpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IGV2YWwucGFyc2UobV9jYWxsRnJh
bWUpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGVycm9yOwogCi0gICAgcmV0dXJu
IG1fY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbERhdGEtPmludGVycHJldGVyLT5leGVj
dXRlKGV2YWxOb2RlLmdldCgpLCBtX2NhbGxGcmFtZSwgdGhpc09iamVjdCgpLCBtX2NhbGxGcmFt
ZS0+c2NvcGVDaGFpbigpLCAmZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gbV9jYWxsRnJhbWUtPnNj
b3BlQ2hhaW4oKS0+Z2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPmV4ZWN1dGUoJmV2YWwsIG1fY2Fs
bEZyYW1lLCB0aGlzT2JqZWN0KCksIG1fY2FsbEZyYW1lLT5zY29wZUNoYWluKCksICZleGNlcHRp
b24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDQ3MzAyKQorKysgSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsMTEg
KzM1NCwxMSBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBJbnRlcnByZXRlcjo6Y2FsbEV2CiAgICAg
CiAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0g
ICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IGNvZGVCbG9jay0+ZXZhbENvZGVDYWNoZSgp
LmdldChjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UsIHNjb3BlQ2hhaW4sIGV4Y2VwdGlvblZhbHVl
KTsKKyAgICBSZWZQdHI8RXZhbEV4ZWN1dGFibGU+IGV2YWwgPSBjb2RlQmxvY2stPmV2YWxDb2Rl
Q2FjaGUoKS5nZXQoY2FsbEZyYW1lLCBwcm9ncmFtU291cmNlLCBzY29wZUNoYWluLCBleGNlcHRp
b25WYWx1ZSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYg
KGV2YWxOb2RlKQotICAgICAgICByZXN1bHQgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pbnRl
cnByZXRlci0+ZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpLnRvVGhpc09iamVjdChjYWxsRnJhbWUpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygp
IC0gcmVnaXN0ZXJGaWxlLT5zdGFydCgpICsgcmVnaXN0ZXJPZmZzZXQsIHNjb3BlQ2hhaW4sICZl
eGNlcHRpb25WYWx1ZSk7CisgICAgaWYgKGV2YWwpCisgICAgICAgIHJlc3VsdCA9IGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5leGVjdXRlKGV2YWwuZ2V0KCksIGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXNPYmplY3QoY2FsbEZyYW1lKSwgY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSAtIHJlZ2lzdGVyRmlsZS0+c3RhcnQoKSArIHJlZ2lzdGVyT2Zmc2V0
LCBzY29wZUNoYWluLCAmZXhjZXB0aW9uVmFsdWUpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
QEAgLTYxMCw3ICs2MTAsNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVy
Ojp0CiAgICAgcmV0dXJuIGhhbmRsZXI7CiB9CiAKLUpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1
dGUoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTT2JqZWN0KiB0aGlzT2JqLCBKU1ZhbHVlKiBleGNlcHRp
b24pCitKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjdXRhYmxlKiBwcm9n
cmFtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpT
T2JqZWN0KiB0aGlzT2JqLCBKU1ZhbHVlKiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKCFzY29w
ZUNoYWluLT5nbG9iYWxEYXRhLT5leGNlcHRpb24pOwogCkBAIC02MjEsNyArNjIxLDcgQEAgSlNW
YWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtTm9kZQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmcHJvZ3JhbU5vZGUtPmJ5dGVjb2RlKHNjb3Bl
Q2hhaW4pOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJnByb2dyYW0tPmJ5dGVjb2RlKHNj
b3BlQ2hhaW4pOwogCiAgICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fcmVnaXN0ZXJGaWxlLmVuZCgp
OwogICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBvbGRFbmQgKyBjb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7CkBAIC02NDUsNyArNjQ1LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRl
cjo6ZXhlY3V0ZShQcm9ncmFtTm9kZQogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2Zp
bGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQotICAg
ICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBwcm9ncmFtTm9kZS0+
c291cmNlVVJMKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSk7CisgICAgICAgICgqcHJvZmlsZXIp
LT53aWxsRXhlY3V0ZShuZXdDYWxsRnJhbWUsIHByb2dyYW0tPnNvdXJjZVVSTCgpLCBwcm9ncmFt
LT5saW5lTm8oKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICB7CkBAIC02NTMsNyArNjUz
LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtTm9kZQogCiAgICAgICAg
IG1fcmVlbnRyeURlcHRoKys7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0gcHJv
Z3JhbU5vZGUtPmppdENvZGUoc2NvcGVDaGFpbikuZXhlY3V0ZSgmbV9yZWdpc3RlckZpbGUsIG5l
d0NhbGxGcmFtZSwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgZXhjZXB0aW9uKTsKKyAgICAgICAg
cmVzdWx0ID0gcHJvZ3JhbS0+aml0Q29kZShzY29wZUNoYWluKS5leGVjdXRlKCZtX3JlZ2lzdGVy
RmlsZSwgbmV3Q2FsbEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxEYXRhLCBleGNlcHRpb24pOwog
I2Vsc2UKICAgICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3Rl
ckZpbGUsIG5ld0NhbGxGcmFtZSwgZXhjZXB0aW9uKTsKICNlbmRpZgpAQCAtNjYxLDcgKzY2MSw3
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbU5vZGUKICAgICB9CiAKICAg
ICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAoKnByb2ZpbGVyKS0+ZGlkRXhlY3V0ZShjYWxsRnJh
bWUsIHByb2dyYW1Ob2RlLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbU5vZGUtPmxpbmVObygpKTsKKyAg
ICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2VV
UkwoKSwgcHJvZ3JhbS0+bGluZU5vKCkpOwogCiAgICAgaWYgKG1fcmVlbnRyeURlcHRoICYmIGxh
c3RHbG9iYWxPYmplY3QgJiYgZ2xvYmFsT2JqZWN0ICE9IGxhc3RHbG9iYWxPYmplY3QpCiAgICAg
ICAgIGxhc3RHbG9iYWxPYmplY3QtPmNvcHlHbG9iYWxzVG8obV9yZWdpc3RlckZpbGUpOwpAQCAt
ODA0LDEyICs4MDQsMTIgQEAgdm9pZCBJbnRlcnByZXRlcjo6ZW5kUmVwZWF0Q2FsbChDYWxsRnJh
bQogICAgIG1fcmVnaXN0ZXJGaWxlLnNocmluayhjbG9zdXJlLm9sZEVuZCk7CiB9CiAKLUpTVmFs
dWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBK
U1ZhbHVlKiBleGNlcHRpb24pCitKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVj
dXRhYmxlKiBldmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmosIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiBleGNlcHRpb24pCiB7Ci0gICAgcmV0
dXJuIGV4ZWN1dGUoZXZhbE5vZGUsIGNhbGxGcmFtZSwgdGhpc09iaiwgbV9yZWdpc3RlckZpbGUu
c2l6ZSgpICsgZXZhbE5vZGUtPmJ5dGVjb2RlKHNjb3BlQ2hhaW4pLm1fbnVtUGFyYW1ldGVycyAr
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgc2NvcGVDaGFpbiwgZXhjZXB0aW9u
KTsKKyAgICByZXR1cm4gZXhlY3V0ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNPYmosIG1fcmVnaXN0
ZXJGaWxlLnNpemUoKSArIGV2YWwtPmJ5dGVjb2RlKHNjb3BlQ2hhaW4pLm1fbnVtUGFyYW1ldGVy
cyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgc2NvcGVDaGFpbiwgZXhjZXB0
aW9uKTsKIH0KIAotSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5v
ZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaiwgaW50IGdsb2JhbFJl
Z2lzdGVyT2Zmc2V0LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSogZXhjZXB0
aW9uKQorSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2JqLCBpbnQgZ2xvYmFsUmVnaXN0
ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiBleGNlcHRpb24p
CiB7CiAgICAgQVNTRVJUKCFzY29wZUNoYWluLT5nbG9iYWxEYXRhLT5leGNlcHRpb24pOwogCkBA
IC04MjIsNyArODIyLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSog
ZQogCiAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCA/IGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QgOiBzY29wZUNoYWluLT5nbG9i
YWxPYmplY3QoKSk7CiAKLSAgICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZXZhbE5vZGUt
PmJ5dGVjb2RlKHNjb3BlQ2hhaW4pOworICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZl
dmFsLT5ieXRlY29kZShzY29wZUNoYWluKTsKIAogICAgIEpTVmFyaWFibGVPYmplY3QqIHZhcmlh
YmxlT2JqZWN0OwogICAgIGZvciAoU2NvcGVDaGFpbk5vZGUqIG5vZGUgPSBzY29wZUNoYWluOyA7
IG5vZGUgPSBub2RlLT5uZXh0KSB7CkBAIC04NzQsNyArODc0LDcgQEAgSlNWYWx1ZSBJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogZQogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFBy
b2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQot
ICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBldmFsTm9kZS0+
c291cmNlVVJMKCksIGV2YWxOb2RlLT5saW5lTm8oKSk7CisgICAgICAgICgqcHJvZmlsZXIpLT53
aWxsRXhlY3V0ZShuZXdDYWxsRnJhbWUsIGV2YWwtPnNvdXJjZVVSTCgpLCBldmFsLT5saW5lTm8o
KSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICB7CkBAIC04ODIsNyArODgyLDcgQEAgSlNW
YWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogZQogCiAgICAgICAgIG1fcmVlbnRy
eURlcHRoKys7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0gZXZhbE5vZGUtPmpp
dENvZGUoc2NvcGVDaGFpbikuZXhlY3V0ZSgmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwg
c2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0gZXZh
bC0+aml0Q29kZShzY29wZUNoYWluKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZy
YW1lLCBzY29wZUNoYWluLT5nbG9iYWxEYXRhLCBleGNlcHRpb24pOwogI2Vsc2UKICAgICAgICAg
cmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxG
cmFtZSwgZXhjZXB0aW9uKTsKICNlbmRpZgpAQCAtODkwLDcgKzg5MCw3IEBAIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbE5vZGUqIGUKICAgICB9CiAKICAgICBpZiAoKnByb2ZpbGVy
KQotICAgICAgICAoKnByb2ZpbGVyKS0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGV2YWxOb2RlLT5z
b3VyY2VVUkwoKSwgZXZhbE5vZGUtPmxpbmVObygpKTsKKyAgICAgICAgKCpwcm9maWxlciktPmRp
ZEV4ZWN1dGUoY2FsbEZyYW1lLCBldmFsLT5zb3VyY2VVUkwoKSwgZXZhbC0+bGluZU5vKCkpOwog
CiAgICAgbV9yZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVuZCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24g
NDczMDIpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxMiArNDIsMTIgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgQ29kZUJsb2NrOwotICAgIGNsYXNzIEV2YWxOb2RlOworICAgIGNsYXNzIEV2YWxFeGVjdXRh
YmxlOwogICAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7CiAgICAgY2xhc3MgSW50ZXJuYWxGdW5j
dGlvbjsKICAgICBjbGFzcyBKU0Z1bmN0aW9uOwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0Owot
ICAgIGNsYXNzIFByb2dyYW1Ob2RlOworICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlOwogICAg
IGNsYXNzIFJlZ2lzdGVyOwogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOwogICAgIGNsYXNzIFNh
bXBsaW5nVG9vbDsKQEAgLTk1LDkgKzk1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
Ym9vbCBpc09wY29kZShPcGNvZGUpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBleGVjdXRl
KFByb2dyYW1Ob2RlKiwgQ2FsbEZyYW1lKiwgU2NvcGVDaGFpbk5vZGUqLCBKU09iamVjdCogdGhp
c09iaiwgSlNWYWx1ZSogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSBleGVjdXRlKFByb2dy
YW1FeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgU2NvcGVDaGFpbk5vZGUqLCBKU09iamVjdCogdGhp
c09iaiwgSlNWYWx1ZSogZXhjZXB0aW9uKTsKICAgICAgICAgSlNWYWx1ZSBleGVjdXRlKEZ1bmN0
aW9uQm9keU5vZGUqLCBDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgSlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSogZXhjZXB0aW9u
KTsKLSAgICAgICAgSlNWYWx1ZSBleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgQ2FsbEZyYW1l
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpT
VmFsdWUqIGV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWUgZXhlY3V0ZShFdmFsRXhlY3V0YWJs
ZSogZXZhbE5vZGUsIENhbGxGcmFtZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiBleGNlcHRpb24pOwogCiAgICAgICAgIEpTVmFs
dWUgcmV0cmlldmVBcmd1bWVudHMoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiopIGNvbnN0OwogICAg
ICAgICBKU1ZhbHVlIHJldHJpZXZlQ2FsbGVyKENhbGxGcmFtZSosIEludGVybmFsRnVuY3Rpb24q
KSBjb25zdDsKQEAgLTExOSw3ICsxMTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbmRSZXBlYXRDYWxsKENhbGxGcmFtZUNsb3N1cmUmKTsKICAgICAgICAgSlNWYWx1ZSBleGVj
dXRlKENhbGxGcmFtZUNsb3N1cmUmLCBKU1ZhbHVlKiBleGNlcHRpb24pOwogCi0gICAgICAgIEpT
VmFsdWUgZXhlY3V0ZShFdmFsTm9kZSosIENhbGxGcmFtZSosIEpTT2JqZWN0KiB0aGlzT2JqZWN0
LCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSogZXhj
ZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSBleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiwgQ2FsbEZy
YW1lKiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIGludCBnbG9iYWxSZWdpc3Rlck9mZnNldCwgU2Nv
cGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiBleGNlcHRpb24pOwogCiAjaWYgVVNFKElOVEVSUFJFVEVS
KQogICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlKENhbGxGcmFtZSosIEluc3RydWN0
aW9uKiwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
Y3BwCShyZXZpc2lvbiA0NzMwMikKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNDgsNyArMjA0OCw3IEBAIFBhc3NSZWZQdHI8RnVuY3Rpb25C
b2R5Tm9kZT4gRnVuY3Rpb25Cb2QKIHsKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9k
eSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKGdsb2JhbERhdGEpOwogICAgIGdsb2JhbERhdGEtPnBh
cnNlci0+YXJlbmEoKS5yZXNldCgpOwotICAgIGJvZHktPm1fY29kZS5zZXQobmV3IENvZGVCbG9j
ayhib2R5LmdldCgpKSk7CisgICAgYm9keS0+bV9jb2RlLnNldChuZXcgTmF0aXZlQ29kZUJsb2Nr
KGJvZHkuZ2V0KCkpKTsKICAgICBib2R5LT5tX2ppdENvZGUgPSBKSVRDb2RlKEpJVENvZGU6Okhv
c3RGdW5jdGlvbihnbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlOYXRpdmVDYWxsVGh1bmsoKSkpOwog
ICAgIHJldHVybiBib2R5LnJlbGVhc2UoKTsKIH0KQEAgLTIwODYsNyArMjA4Niw3IEBAIHZvaWQg
RnVuY3Rpb25Cb2R5Tm9kZTo6Z2VuZXJhdGVCeXRlY29kZSgKICAgICBTY29wZUNoYWluIHNjb3Bl
Q2hhaW4oc2NvcGVDaGFpbk5vZGUpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpOwogCi0gICAgbV9jb2RlLnNldChuZXcgQ29kZUJs
b2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3Rh
cnRPZmZzZXQoKSkpOworICAgIG1fY29kZS5zZXQobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMs
IEZ1bmN0aW9uQ29kZSwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQo
KSkpOwogCiAgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IobmV3IEJ5dGVj
b2RlR2VuZXJhdG9yKHRoaXMsIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwg
Jm1fY29kZS0+c3ltYm9sVGFibGUoKSwgbV9jb2RlLmdldCgpKSk7CiAgICAgZ2VuZXJhdG9yLT5n
ZW5lcmF0ZSgpOwpAQCAtMjExMiw3ICsyMTEyLDcgQEAgQ29kZUJsb2NrJiBGdW5jdGlvbkJvZHlO
b2RlOjpieXRlY29kZUZvcgogICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihzY29wZUNoYWluTm9k
ZSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4uZ2xvYmFs
T2JqZWN0KCk7CiAKLSAgICBtX2NvZGUuc2V0KG5ldyBDb2RlQmxvY2sodGhpcywgRnVuY3Rpb25D
b2RlLCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpKSk7CisgICAg
bV9jb2RlLnNldChuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBzb3Vy
Y2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpKSk7CiAKICAgICBPd25QdHI8
Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IodGhpcywg
Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCAmbV9jb2RlLT5zeW1ib2xUYWJs
ZSgpLCBtX2NvZGUuZ2V0KCkpKTsKICAgICBnZW5lcmF0b3ItPnNldFJlZ2VuZXJhdGluZ0ZvckV4
Y2VwdGlvbkluZm8oY29kZUJsb2NrQmVpbmdSZWdlbmVyYXRlZEZyb20pOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAkocmV2aXNpb24gNDczMDIpCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgUGFyc2Vy
X2gKIAogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2lu
Y2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgpAQCAtNDEsOSArNDIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBQYXJzZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAg
dGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+IFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2Uo
RXhlY1N0YXRlKiwgRGVidWdnZXIqLCBjb25zdCBTb3VyY2VDb2RlJiwgaW50KiBlcnJMaW5lID0g
MCwgVVN0cmluZyogZXJyTXNnID0gMCk7Ci0gICAgICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWRO
b2RlPiBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHJlcGFyc2UoSlNHbG9iYWxEYXRhKiwgUGFyc2Vk
Tm9kZSopOworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KKyAgICAgICAgUGFz
c1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShFeGVjU3RhdGUqLCBEZWJ1Z2dlciosIGNvbnN0IFNv
dXJjZUNvZGUmLCBpbnQqIGVyckxpbmUgPSAwLCBVU3RyaW5nKiBlcnJNc2cgPSAwKTsKKyAgICAg
ICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+CisgICAgICAgIFBhc3NSZWZQdHI8UGFyc2Vk
Tm9kZT4gcmVwYXJzZShKU0dsb2JhbERhdGEqLCBQYXJzZWROb2RlKik7CiAgICAgICAgIHZvaWQg
cmVwYXJzZUluUGxhY2UoSlNHbG9iYWxEYXRhKiwgRnVuY3Rpb25Cb2R5Tm9kZSopOworICAgICAg
ICBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IHBhcnNlRnVuY3Rpb25Gcm9tR2xvYmFsQ29k
ZShFeGVjU3RhdGUqLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBpbnQqIGVyckxpbmUg
PSAwLCBVU3RyaW5nKiBlcnJNc2cgPSAwKTsKIAogICAgICAgICB2b2lkIGRpZEZpbmlzaFBhcnNp
bmcoU291cmNlRWxlbWVudHMqLCBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZh
clN0YWNrPiosIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VyQXJlbmFEYXRh
PERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiosIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgaW50IGxhc3RMaW5lLCBpbnQgbnVtQ29uc3RhbnRzKTsKQEAgLTYzLDcgKzY3LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX251bUNvbnN0YW50czsKICAgICB9OwogCi0gICAg
dGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+IFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2Vy
OjpwYXJzZShFeGVjU3RhdGUqIGV4ZWMsIERlYnVnZ2VyKiBkZWJ1Z2dlciwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBpbnQqIGVyckxpbmUsIFVTdHJpbmcqIGVyck1zZykKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KKyAgICBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjo6
cGFyc2UoRXhlY1N0YXRlKiBleGVjLCBEZWJ1Z2dlciogZGVidWdnZXIsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgaW50KiBlcnJMaW5lLCBVU3RyaW5nKiBlcnJNc2cpCiAgICAgewogICAgICAg
ICBtX3NvdXJjZSA9ICZzb3VyY2U7CiAgICAgICAgIHBhcnNlKCZleGVjLT5nbG9iYWxEYXRhKCks
IGVyckxpbmUsIGVyck1zZyk7CkBAIC05MCw3ICs5NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgUGFyc2VkTm9kZT4gUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI6OnJlcGFyc2UoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQYXJzZWROb2RlKiBvbGRQYXJzZWROb2RlKQorICAgIHRl
bXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgorICAgIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFy
c2VyOjpyZXBhcnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFyc2VkTm9kZSogb2xkUGFy
c2VkTm9kZSkKICAgICB7CiAgICAgICAgIG1fc291cmNlID0gJm9sZFBhcnNlZE5vZGUtPnNvdXJj
ZSgpOwogICAgICAgICBwYXJzZShnbG9iYWxEYXRhLCAwLCAwKTsKQEAgLTExNSw2ICsxMjEsNDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogICAg
IH0KIAorICAgIGlubGluZSBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IFBhcnNlcjo6cGFy
c2VGdW5jdGlvbkZyb21HbG9iYWxDb2RlKEV4ZWNTdGF0ZSogZXhlYywgRGVidWdnZXIqIGRlYnVn
Z2VyLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGludCogZXJyTGluZSwgVVN0cmluZyogZXJy
TXNnKQorICAgIHsKKyAgICAgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8
UHJvZ3JhbU5vZGU+KGV4ZWMsIGRlYnVnZ2VyLCBzb3VyY2UsIGVyckxpbmUsIGVyck1zZyk7CisK
KyAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAg
U3RhdGVtZW50VmVjdG9yJiBjaGlsZHJlbiA9IHByb2dyYW0tPmNoaWxkcmVuKCk7CisgICAgICAg
IGlmIChjaGlsZHJlbi5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAg
ICAgIFN0YXRlbWVudE5vZGUqIGV4cHJTdGF0ZW1lbnQgPSBjaGlsZHJlblswXTsKKyAgICAgICAg
QVNTRVJUKGV4cHJTdGF0ZW1lbnQpOworICAgICAgICBBU1NFUlQoZXhwclN0YXRlbWVudC0+aXNF
eHByU3RhdGVtZW50KCkpOworICAgICAgICBpZiAoIWV4cHJTdGF0ZW1lbnQgfHwgIWV4cHJTdGF0
ZW1lbnQtPmlzRXhwclN0YXRlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg
ICAgRXhwcmVzc2lvbk5vZGUqIGZ1bmNFeHByID0gc3RhdGljX2Nhc3Q8RXhwclN0YXRlbWVudE5v
ZGUqPihleHByU3RhdGVtZW50KS0+ZXhwcigpOworICAgICAgICBBU1NFUlQoZnVuY0V4cHIpOwor
ICAgICAgICBBU1NFUlQoZnVuY0V4cHItPmlzRnVuY0V4cHJOb2RlKCkpOworICAgICAgICBpZiAo
IWZ1bmNFeHByIHx8ICFmdW5jRXhwci0+aXNGdW5jRXhwck5vZGUoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworCisgICAgICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0gc3RhdGlj
X2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZnVuY0V4cHIpLT5ib2R5KCk7CisgICAgICAgIEFTU0VSVChi
b2R5KTsKKyAgICAgICAgcmV0dXJuIGJvZHkucmVsZWFzZSgpOworICAgIH0KKworICAgIHRlbXBs
YXRlPGNsYXNzIEFTVE5vZGVUeXBlLCBjbGFzcyBDb2RlQmxvY2tUeXBlPgorICAgIGlubGluZSBK
U09iamVjdCogVGVtcGxhdGVFeGVjdXRhYmxlPEFTVE5vZGVUeXBlLCBDb2RlQmxvY2tUeXBlPjo6
cGFyc2UoRXhlY1N0YXRlKiBleGVjLCBib29sIGFsbG93RGVidWcpCisgICAgeworICAgICAgICBp
bnQgZXJyTGluZTsKKyAgICAgICAgVVN0cmluZyBlcnJNc2c7CisgICAgICAgIG1fbm9kZSA9IGV4
ZWMtPmdsb2JhbERhdGEoKS5wYXJzZXItPnBhcnNlPEFTVE5vZGVUeXBlPihleGVjLCBhbGxvd0Rl
YnVnID8gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpIDogMCwgbV9zb3Vy
Y2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKKworICAgICAgICBpZiAoIW1fbm9kZSkKKyAgICAgICAg
ICAgIHJldHVybiBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxp
bmUsIG1fc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSwgbV9zb3VyY2UucHJvdmlkZXIoKS0+dXJs
KCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gUGFyc2VyX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNw
cAkocmV2aXNpb24gNDczMDIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwzMCArNDEsMjcgQEAgQ29tcGxldGlvbiBjaGVja1N5
bnRheChFeGVjU3RhdGUqIGV4ZWMsIAogewogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogCi0gICAg
aW50IGVyckxpbmU7Ci0gICAgVVN0cmluZyBlcnJNc2c7CisgICAgUHJvZ3JhbUV4ZWN1dGFibGUg
cHJvZ3JhbShzb3VyY2UpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0ucGFyc2UoZXhl
Yyk7CisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXJy
b3IpOwogCi0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9nTm9kZSA9IGV4ZWMtPmdsb2JhbERh
dGEoKS5wYXJzZXItPnBhcnNlPFByb2dyYW1Ob2RlPihleGVjLCBleGVjLT5keW5hbWljR2xvYmFs
T2JqZWN0KCktPmRlYnVnZ2VyKCksIHNvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOwotICAgIGlm
ICghcHJvZ05vZGUpCi0gICAgICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LCBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigp
LT5hc0lEKCksIHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSkpOwogICAgIHJldHVybiBDb21wbGV0
aW9uKE5vcm1hbCk7CiB9CiAKIENvbXBsZXRpb24gZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluJiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUg
dGhpc1ZhbHVlKQogewogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwotICAgIAotICAgIGludCBlcnJM
aW5lOwotICAgIFVTdHJpbmcgZXJyTXNnOwotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3Jh
bU5vZGUgPSBleGVjLT5nbG9iYWxEYXRhKCkucGFyc2VyLT5wYXJzZTxQcm9ncmFtTm9kZT4oZXhl
YywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpLCBzb3VyY2UsICZlcnJM
aW5lLCAmZXJyTXNnKTsKIAotICAgIGlmICghcHJvZ3JhbU5vZGUpCi0gICAgICAgIHJldHVybiBD
b21wbGV0aW9uKFRocm93LCBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2cs
IGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigpLT5hc0lEKCksIHNvdXJjZS5wcm92aWRlcigpLT51
cmwoKSkpOworICAgIFByb2dyYW1FeGVjdXRhYmxlIHByb2dyYW0oc291cmNlKTsKKyAgICBKU09i
amVjdCogZXJyb3IgPSBwcm9ncmFtLnBhcnNlKGV4ZWMpOworICAgIGlmIChlcnJvcikKKyAgICAg
ICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIGVycm9yKTsKIAogICAgIEpTT2JqZWN0KiB0aGlz
T2JqID0gKCF0aGlzVmFsdWUgfHwgdGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpID8gZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpIDogdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogCiAg
ICAgSlNWYWx1ZSBleGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnBy
ZXRlcigpLT5leGVjdXRlKHByb2dyYW1Ob2RlLmdldCgpLCBleGVjLCBzY29wZUNoYWluLm5vZGUo
KSwgdGhpc09iaiwgJmV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRl
cnByZXRlcigpLT5leGVjdXRlKCZwcm9ncmFtLCBleGVjLCBzY29wZUNoYWluLm5vZGUoKSwgdGhp
c09iaiwgJmV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgIGlmIChl
eGNlcHRpb24uaXNPYmplY3QoKSAmJiBhc09iamVjdChleGNlcHRpb24pLT5pc1dhdGNoZG9nRXhj
ZXB0aW9uKCkpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkocmV2aXNpb24gNDczMDIp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTcsNiArOTcsMTIgQEAgSlNPYmplY3QqIEVycm9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLAog
ICAgIHJldHVybiBjcmVhdGUoZXhlYywgdHlwZSwgbWVzc2FnZSwgLTEsIC0xLCBOVUxMKTsKIH0K
IAorSlNPYmplY3QqIHRocm93RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZXJyb3Ip
Cit7CisgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9
CisKIEpTT2JqZWN0KiB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIHR5cGUp
CiB7CiAgICAgSlNPYmplY3QqIGVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCB0eXBlLCBVU3Ry
aW5nKCksIC0xLCAtMSwgTlVMTCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCShyZXZpc2lv
biA0NzMwMikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNTksNiArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBKU09iamVjdCogdGhyb3dF
cnJvcihFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpOwogICAg
IEpTT2JqZWN0KiB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29uc3QgY2hhciog
bWVzc2FnZSk7CiAgICAgSlNPYmplY3QqIHRocm93RXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JUeXBl
KTsKKyAgICBKU09iamVjdCogdGhyb3dFcnJvcihFeGVjU3RhdGUqLCBKU09iamVjdCopOwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEV4ZWN1dGFibGVfaAorI2RlZmluZSBFeGVjdXRhYmxl
X2gKKworI2luY2x1ZGUgIk5vZGVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisgICAgdGVtcGxh
dGU8Y2xhc3MgQVNUTm9kZVR5cGUsIGNsYXNzIENvZGVCbG9ja1R5cGU+CisgICAgY2xhc3MgVGVt
cGxhdGVFeGVjdXRhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRlbXBsYXRlRXhlY3V0YWJs
ZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAgICAgICAgICA6IG1fc291cmNlKHNvdXJj
ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgSlNPYmplY3QqIHBhcnNlKEV4ZWNT
dGF0ZSogZXhlYywgYm9vbCBhbGxvd0RlYnVnID0gdHJ1ZSk7CisKKyAgICAgICAgdm9pZCBtYXJr
QWdncmVnYXRlKE1hcmtTdGFjayYgbWFya1N0YWNrKQorICAgICAgICB7CisgICAgICAgICAgICBt
X25vZGUtPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGNv
bnN0IFVTdHJpbmcmIHNvdXJjZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS0+c291cmNlVVJM
KCk7IH0KKyAgICAgICAgaW50IGxpbmVObygpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS0+bGluZU5v
KCk7IH0KKyAgICAgICAgQ29kZUJsb2NrVHlwZSYgYnl0ZWNvZGUoU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW5Ob2RlKSB7IHJldHVybiBtX25vZGUtPmJ5dGVjb2RlKHNjb3BlQ2hhaW5Ob2RlKTsg
fQorICAgICAgICBKSVRDb2RlJiBqaXRDb2RlKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSkgeyByZXR1cm4gbV9ub2RlLT5qaXRDb2RlKHNjb3BlQ2hhaW5Ob2RlKTsgfQorCisgICAgcHJv
dGVjdGVkOgorICAgICAgICBSZWZQdHI8QVNUTm9kZVR5cGU+IG1fbm9kZTsKKyAgICAgICAgU291
cmNlQ29kZSBtX3NvdXJjZTsKKyAgICB9OworCisgICAgY2xhc3MgRXZhbEV4ZWN1dGFibGUgOiBw
dWJsaWMgVGVtcGxhdGVFeGVjdXRhYmxlPEV2YWxOb2RlLCBFdmFsQ29kZUJsb2NrPiwgcHVibGlj
IFJlZkNvdW50ZWQ8RXZhbEV4ZWN1dGFibGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV2YWxF
eGVjdXRhYmxlKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKKyAgICAgICAgICAgIDogVGVtcGxh
dGVFeGVjdXRhYmxlPEV2YWxOb2RlLCBFdmFsQ29kZUJsb2NrPihzb3VyY2UpCisgICAgICAgIHsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBjbGFzcyBQcm9ncmFtRXhlY3V0YWJsZSA6IHB1Ymxp
YyBUZW1wbGF0ZUV4ZWN1dGFibGU8UHJvZ3JhbU5vZGUsIFByb2dyYW1Db2RlQmxvY2s+IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSkKKyAgICAgICAgICAgIDogVGVtcGxhdGVFeGVjdXRhYmxlPFByb2dyYW1Ob2RlLCBQcm9n
cmFtQ29kZUJsb2NrPihzb3VyY2UpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisKK307
CisKKyNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiA0NzMwMikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDMyICs2Niw2IEBA
IENhbGxUeXBlIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmdldENhbGxEYXQKICAgICByZXR1cm4gQ2Fs
bFR5cGVIb3N0OwogfQogCi1GdW5jdGlvbkJvZHlOb2RlKiBleHRyYWN0RnVuY3Rpb25Cb2R5KFBy
b2dyYW1Ob2RlKiBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBTdGF0ZW1lbnRWZWN0b3ImIGNoaWxkcmVuID0gcHJvZ3JhbS0+Y2hpbGRyZW4o
KTsKLSAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgU3RhdGVtZW50Tm9kZSogZXhwclN0YXRlbWVudCA9IGNoaWxkcmVuWzBdOwotICAgIEFTU0VS
VChleHByU3RhdGVtZW50KTsKLSAgICBBU1NFUlQoZXhwclN0YXRlbWVudC0+aXNFeHByU3RhdGVt
ZW50KCkpOwotICAgIGlmICghZXhwclN0YXRlbWVudCB8fCAhZXhwclN0YXRlbWVudC0+aXNFeHBy
U3RhdGVtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgRXhwcmVzc2lvbk5vZGUqIGZ1
bmNFeHByID0gc3RhdGljX2Nhc3Q8RXhwclN0YXRlbWVudE5vZGUqPihleHByU3RhdGVtZW50KS0+
ZXhwcigpOwotICAgIEFTU0VSVChmdW5jRXhwcik7Ci0gICAgQVNTRVJUKGZ1bmNFeHByLT5pc0Z1
bmNFeHByTm9kZSgpKTsKLSAgICBpZiAoIWZ1bmNFeHByIHx8ICFmdW5jRXhwci0+aXNGdW5jRXhw
ck5vZGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5
ID0gc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZnVuY0V4cHIpLT5ib2R5KCk7Ci0gICAgQVNT
RVJUKGJvZHkpOwotICAgIHJldHVybiBib2R5OwotfQotCiAvLyBFQ01BIDE1LjMuMiBUaGUgRnVu
Y3Rpb24gQ29uc3RydWN0b3IKIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IElkZW50aWZpZXImIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlcikKIHsKQEAgLTExMywx
NSArODcsMTMgQEAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZQogICAg
IGludCBlcnJMaW5lOwogICAgIFVTdHJpbmcgZXJyTXNnOwogICAgIFNvdXJjZUNvZGUgc291cmNl
ID0gbWFrZVNvdXJjZShwcm9ncmFtLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIpOwotICAgIFJlZlB0
cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBleGVjLT5nbG9iYWxEYXRhKCkucGFyc2VyLT5w
YXJzZTxQcm9ncmFtTm9kZT4oZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1
Z2dlcigpLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKLQotICAgIEZ1bmN0aW9uQm9keU5v
ZGUqIGJvZHkgPSBleHRyYWN0RnVuY3Rpb25Cb2R5KHByb2dyYW1Ob2RlLmdldCgpKTsKKyAgICBS
ZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5wYXJzZXIt
PnBhcnNlRnVuY3Rpb25Gcm9tR2xvYmFsQ29kZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCktPmRlYnVnZ2VyKCksIHNvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOwogICAgIGlmICgh
Ym9keSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1z
ZywgZXJyTGluZSwgc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSwgc291cmNlLnByb3ZpZGVyKCkt
PnVybCgpKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpKTsK
LSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uTmFtZSwgYm9k
eSwgc2NvcGVDaGFpbi5ub2RlKCkpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24o
ZXhlYywgZnVuY3Rpb25OYW1lLCBib2R5LmdldCgpLCBzY29wZUNoYWluLm5vZGUoKSk7CiB9CiAK
IC8vIEVDTUEgMTUuMy4yIFRoZSBGdW5jdGlvbiBDb25zdHJ1Y3RvcgpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDQ3MzAyKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDggKzI2LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVu
Y3Rpb25Qcm90b3R5cGU7Ci0gICAgY2xhc3MgUHJvZ3JhbU5vZGU7Ci0gICAgY2xhc3MgRnVuY3Rp
b25Cb2R5Tm9kZTsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7CiAgICAgcHVibGljOgpAQCAtNDEsOCArMzksNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb24oRXhlY1N0YXRlKiwgY29uc3Qg
QXJnTGlzdCYsIGNvbnN0IElkZW50aWZpZXImIGZ1bmN0aW9uTmFtZSwgY29uc3QgVVN0cmluZyYg
c291cmNlVVJMLCBpbnQgbGluZU51bWJlcik7CiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0
aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIAotICAgIEZ1bmN0aW9uQm9keU5vZGUq
IGV4dHJhY3RGdW5jdGlvbkJvZHkoUHJvZ3JhbU5vZGUqKTsKLQogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBGdW5jdGlvbkNvbnN0cnVjdG9yX2gKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDQ3MzAyKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsOCArMjM2
LDcgQEAgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPiYgSlNHbG9iYWxEYXRhOgogewogICAgIGlm
ICghbGF6eU51bWVyaWNDb21wYXJlRnVuY3Rpb24uc2l6ZSgpICYmICFpbml0aWFsaXppbmdMYXp5
TnVtZXJpY0NvbXBhcmVGdW5jdGlvbikgewogICAgICAgICBpbml0aWFsaXppbmdMYXp5TnVtZXJp
Y0NvbXBhcmVGdW5jdGlvbiA9IHRydWU7Ci0gICAgICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJv
Z3JhbU5vZGUgPSBwYXJzZXItPnBhcnNlPFByb2dyYW1Ob2RlPihleGVjLCAwLCBtYWtlU291cmNl
KFVTdHJpbmcoIihmdW5jdGlvbiAodjEsIHYyKSB7IHJldHVybiB2MSAtIHYyOyB9KSIpKSwgMCwg
MCk7Ci0gICAgICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJvZHkgPSBleHRy
YWN0RnVuY3Rpb25Cb2R5KHByb2dyYW1Ob2RlLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSA9IHBhcnNlci0+cGFyc2VGdW5jdGlvbkZyb21HbG9i
YWxDb2RlKGV4ZWMsIDAsIG1ha2VTb3VyY2UoVVN0cmluZygiKGZ1bmN0aW9uICh2MSwgdjIpIHsg
cmV0dXJuIHYxIC0gdjI7IH0pIikpLCAwLCAwKTsKICAgICAgICAgbGF6eU51bWVyaWNDb21wYXJl
RnVuY3Rpb24gPSBmdW5jdGlvbkJvZHktPmJ5dGVjb2RlKGV4ZWMtPnNjb3BlQ2hhaW4oKSkuaW5z
dHJ1Y3Rpb25zKCk7CiAgICAgICAgIGluaXRpYWxpemluZ0xhenlOdW1lcmljQ29tcGFyZUZ1bmN0
aW9uID0gZmFsc2U7CiAgICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHJldmlzaW9uIDQ3MzAyKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw4ICsxMTIsOCBAQCBKU0ds
b2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkKICAgICBpZiAoaGVhZE9iamVjdCA9PSB0aGlz
KQogICAgICAgICBoZWFkT2JqZWN0ID0gMDsKIAotICAgIEhhc2hTZXQ8UHJvZ3JhbUNvZGVCbG9j
ayo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjb2RlQmxvY2tzKCkuZW5kKCk7Ci0gICAgZm9yIChI
YXNoU2V0PFByb2dyYW1Db2RlQmxvY2sqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjb2RlQmxvY2tz
KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgIEhhc2hTZXQ8R2xvYmFsQ29kZUJsb2Nr
Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvZGVCbG9ja3MoKS5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8R2xvYmFsQ29kZUJsb2NrKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29kZUJsb2Nrcygp
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPmNsZWFyR2xvYmFsT2Jq
ZWN0KCk7CiAgICAgICAgIAogICAgIFJlZ2lzdGVyRmlsZSYgcmVnaXN0ZXJGaWxlID0gZ2xvYmFs
RGF0YSgpLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCk7CkBAIC0zNjYsOCArMzY2LDggQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6bWFya0NoaWxkcmVuKE1hcmtTdAogewogICAgIEpTVmFyaWFi
bGVPYmplY3Q6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwogICAgIAotICAgIEhhc2hTZXQ8UHJv
Z3JhbUNvZGVCbG9jayo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjb2RlQmxvY2tzKCkuZW5kKCk7
Ci0gICAgZm9yIChIYXNoU2V0PFByb2dyYW1Db2RlQmxvY2sqPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBjb2RlQmxvY2tzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgIEhhc2hTZXQ8R2xv
YmFsQ29kZUJsb2NrKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvZGVCbG9ja3MoKS5lbmQoKTsK
KyAgICBmb3IgKEhhc2hTZXQ8R2xvYmFsQ29kZUJsb2NrKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
Y29kZUJsb2NrcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPm1h
cmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKIAogICAgIFJlZ2lzdGVyRmlsZSYgcmVnaXN0ZXJGaWxl
ID0gZ2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiA0NzMwMikKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsOCArNDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlw
ZTsKICAgICBjbGFzcyBHbG9iYWxFdmFsRnVuY3Rpb247CiAgICAgY2xhc3MgTmF0aXZlRXJyb3JD
b25zdHJ1Y3RvcjsKKyAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2s7CiAgICAgY2xhc3MgT2JqZWN0
Q29uc3RydWN0b3I7Ci0gICAgY2xhc3MgUHJvZ3JhbUNvZGVCbG9jazsKICAgICBjbGFzcyBQcm90
b3R5cGVGdW5jdGlvbjsKICAgICBjbGFzcyBSZWdFeHBDb25zdHJ1Y3RvcjsKICAgICBjbGFzcyBS
ZWdFeHBQcm90b3R5cGU7CkBAIC0xNTEsNyArMTUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGE7CiAKLSAgICAgICAgICAg
IEhhc2hTZXQ8UHJvZ3JhbUNvZGVCbG9jayo+IGNvZGVCbG9ja3M7CisgICAgICAgICAgICBIYXNo
U2V0PEdsb2JhbENvZGVCbG9jayo+IGNvZGVCbG9ja3M7CiAgICAgICAgIH07CiAKICAgICBwdWJs
aWM6CkBAIC0yNTcsNyArMjU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVh
bCBib29sIGlzRHluYW1pY1Njb3BlKCkgY29uc3Q7CiAKLSAgICAgICAgSGFzaFNldDxQcm9ncmFt
Q29kZUJsb2NrKj4mIGNvZGVCbG9ja3MoKSB7IHJldHVybiBkKCktPmNvZGVCbG9ja3M7IH0KKyAg
ICAgICAgSGFzaFNldDxHbG9iYWxDb2RlQmxvY2sqPiYgY29kZUJsb2NrcygpIHsgcmV0dXJuIGQo
KS0+Y29kZUJsb2NrczsgfQogCiAgICAgICAgIHZvaWQgY29weUdsb2JhbHNGcm9tKFJlZ2lzdGVy
RmlsZSYpOwogICAgICAgICB2b2lkIGNvcHlHbG9iYWxzVG8oUmVnaXN0ZXJGaWxlJik7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcAkocmV2aXNpb24gNDczMDIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDE2ICsyODYsMTIgQEAg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4ZQogICAgIGlmIChKU1ZhbHVl
IHBhcnNlZE9iamVjdCA9IHByZXBhcnNlci50cnlMaXRlcmFsUGFyc2UoKSkKICAgICAgICAgcmV0
dXJuIHBhcnNlZE9iamVjdDsKIAotICAgIGludCBlcnJMaW5lOwotICAgIFVTdHJpbmcgZXJyTXNn
OworICAgIEV2YWxFeGVjdXRhYmxlIGV2YWwobWFrZVNvdXJjZShzKSk7CisgICAgSlNPYmplY3Qq
IGVycm9yID0gZXZhbC5wYXJzZShleGVjKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIGVycm9yKTsKIAotICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFr
ZVNvdXJjZShzKTsKLSAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gZXhlYy0+Z2xvYmFs
RGF0YSgpLnBhcnNlci0+cGFyc2U8RXZhbE5vZGU+KGV4ZWMsIGV4ZWMtPmR5bmFtaWNHbG9iYWxP
YmplY3QoKS0+ZGVidWdnZXIoKSwgc291cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7Ci0KLSAgICBp
ZiAoIWV2YWxOb2RlKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
ciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2UucHJvdmlkZXIoKS0+YXNJRCgpLCBOVUxMKTsKLQot
ICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBl
eGVjLCB0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBlZE9i
amVjdCktPmdsb2JhbFNjb3BlQ2hhaW4oKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7
CisgICAgcmV0dXJuIGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUoJmV2YWwsIGV4ZWMsIHRo
aXNPYmplY3QsIHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odW53cmFwcGVkT2JqZWN0KS0+
Z2xvYmFsU2NvcGVDaGFpbigpLm5vZGUoKSwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKTsKIH0KIAog
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
</data>
<flag name="review"
          id="19076"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>