<?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>133862</bug_id>
          
          <creation_ts>2014-06-13 09:08:03 -0700</creation_ts>
          <short_desc>Convert LayerPool and TileCoverageMap from ObjC to C++</short_desc>
          <delta_ts>2014-06-13 14:16:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>133704</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1015446</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-06-13 09:08:03 -0700</bug_when>
    <thetext>Second step in porting the Mac Tiled Drawing logic to Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015447</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-06-13 09:08:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/17302883&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015456</commentid>
    <comment_count>2</comment_count>
      <attachid>233057</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-06-13 10:01:05 -0700</bug_when>
    <thetext>Created attachment 233057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015525</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-06-13 14:14:14 -0700</bug_when>
    <thetext>Committed r169948: &lt;http://trac.webkit.org/changeset/169948&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233057</attachid>
            <date>2014-06-13 10:01:05 -0700</date>
            <delta_ts>2014-06-13 14:13:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133862-20140613100042.patch</filename>
            <type>text/plain</type>
            <size>51803</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE0LTA2LTEzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIENvbnZlcnQgTGF5ZXJQb29s
IGFuZCBUaWxlQ292ZXJhZ2VNYXAgZnJvbSBPYmpDIHRvIEMrKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzODYyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xNzMwMjg4Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGp1c3QgbW92ZXMgdHdvIE9iakMgZmlsZXMgZnJvbSB0aGUgbWFjIHN1YmRp
cmVjdG9yeSB0byB0aGUgcGFyZW50IGFuZAorICAgICAgICByZXZpc2VzIHRoZSBwcm9qZWN0IHRv
IGJ1aWxkIHRoZW0gYXMgQysrLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0xheWVyUG9vbC5jcHA6
IENvcGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wubW0uCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvTGF5ZXJQb29sLmg6IENvcGllZCBmcm9tIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwOiBDb3BpZWQgZnJvbSBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvVGlsZUNvdmVyYWdlTWFwLm1tLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL1RpbGVDb3ZlcmFnZU1hcC5oOiBDb3BpZWQgZnJvbSBwbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvdmVyYWdlTWFwLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L0xheWVyUG9vbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9MYXllclBvb2wubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1RpbGVDb3ZlcmFnZU1hcC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9UaWxlQ292ZXJhZ2VNYXAubW06IFJlbW92ZWQuCisKIDIwMTQtMDYtMTMgIEph
cmVrIEN6ZWthbHNraSAgPGphcmVrY3pla0Bwb2N6dGEub25ldC5wbD4KIAogICAgICAgICBbQVRL
XSBGaXggdGV4dCBpbnNpZGUgInNwYW4iIGJsb2NrIGluICJhIiBibG9jayB3YXMgbm90IGFjY2Vz
c2libGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjk5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNDgsNiArMjM0
OCwxMCBAQAogCQk3QUEzQTY5QTE5NEE2NEU3MDAxQ0JEMjQgLyogVGlsZUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQTNBNjk2MTk0
QTY0RTcwMDFDQkQyNCAvKiBUaWxlQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdBQTNBNjlCMTk0QTY0RTcwMDFDQkQyNCAvKiBU
aWxlR3JpZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUEzQTY5NzE5NEE2NEU3MDAxQ0JEMjQgLyogVGlsZUdyaWQuY3BwICovOyB9OwogCQk3QUEz
QTY5QzE5NEE2NEU3MDAxQ0JEMjQgLyogVGlsZUdyaWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQTNBNjk4MTk0QTY0RTcwMDFDQkQyNCAvKiBUaWxl
R3JpZC5oICovOyB9OworCQk3QUEzQTY5RjE5NEI1OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQTNBNjlE
MTk0QjU5QjYwMDFDQkQyNCAvKiBMYXllclBvb2wuY3BwICovOyB9OworCQk3QUEzQTZBMDE5NEI1
OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QUEzQTY5RTE5NEI1OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmgg
Ki87IH07CisJCTdBQTNBNkEzMTk0QjVDMjIwMDFDQkQyNCAvKiBUaWxlQ292ZXJhZ2VNYXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FBM0E2QTEx
OTRCNUMyMjAwMUNCRDI0IC8qIFRpbGVDb3ZlcmFnZU1hcC5jcHAgKi87IH07CisJCTdBQTNBNkE0
MTk0QjVDMjIwMDFDQkQyNCAvKiBUaWxlQ292ZXJhZ2VNYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQTNBNkEyMTk0QjVDMjIwMDFDQkQyNCAvKiBU
aWxlQ292ZXJhZ2VNYXAuaCAqLzsgfTsKIAkJN0FBQkEyNTkxNEJDNjEzMzAwQUE5QTExIC8qIERP
TUVkaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUFCQTI1NzE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmNwcCAqLzsgfTsKIAkJN0FB
QkEyNUExNEJDNjEzMzAwQUE5QTExIC8qIERPTUVkaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FBQkEyNTgxNEJDNjEzMzAwQUE5QTExIC8qIERP
TUVkaXRvci5oICovOyB9OwogCQk3QUIwQjFDMDEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QUIwQjFCRTEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dC5jcHAgKi87IH07CkBAIC0zMzQ1LDggKzMzNDksNiBAQAogCQk5M0YxRDVDMTEyRDUzMzU2MDA4
MzJCRUMgLyogSlNXZWJHTExvc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YxRDVCRjEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExv
c2VDb250ZXh0LmggKi87IH07CiAJCTkzRjZGMUVEMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENv
bnRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0Y2RjFFQTEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuY3BwICov
OyB9OwogCQk5M0Y2RjFFRTEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjZGMUVCMTI3
RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5oICovOyB9OwotCQk5M0Y3MkFGMzE2
NjZFREZDMDAyQTAyQkQgLyogTGF5ZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y3MkFGMTE2NjZFREZDMDAyQTAyQkQgLyogTGF5ZXJQb29s
LmggKi87IH07Ci0JCTkzRjcyQUY0MTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBvb2wubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y3MkFGMjE2NjZF
REZDMDAyQTAyQkQgLyogTGF5ZXJQb29sLm1tICovOyB9OwogCQk5M0Y5MjU0MzBGN0VGNUI4MDA3
RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGOTI1NDEwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRS
YWRpb0J1dHRvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk5M0Y5MjU0NDBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5MjU0
MjBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgKi87IH07CiAJCTkz
RjlCNjU3MEJBMEYzNUUwMDg1NDA2NCAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlCNjU0MEJBMEYzNUUw
MDg1NDA2NCAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5tbSAqLzsgfTsKQEAgLTYxMjIsOCArNjEy
NCw2IEBACiAJCUU0N0I0QkU5MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRs
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdC
NEJFNzBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwICovOyB9Owog
CQlFNDdFMjc2NTE2MDM2RUQyMDBFRTJBRkIgLyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3
NjQxNjAzNkVEMjAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDdFMjc2ODE2
MDM2RURDMDBFRTJBRkIgLyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdFMjc2NzE2MDM2RURD
MDBFRTJBRkIgLyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgKi87IH07Ci0JCUU0
ODMwQTM5MThGNEM1OTQwMDE1NEExQiAvKiBUaWxlQ292ZXJhZ2VNYXAubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDgzMEEzODE4RjRDNTk0MDAxNTRB
MUIgLyogVGlsZUNvdmVyYWdlTWFwLm1tICovOyB9OwotCQlFNDgzMEEzRDE4RjRDNUI3MDAxNTRB
MUIgLyogVGlsZUNvdmVyYWdlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDgzMEEzQzE4RjRDNUI3MDAxNTRBMUIgLyogVGlsZUNvdmVyYWdlTWFw
LmggKi87IH07CiAJCUU0ODk0NEEyMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0
NEEwMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLzsgfTsKIAkJRTQ4
OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEExMTgwQjU3RDgwMEYxNjVE
OCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTQ5NDZFQUUxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUlt
cG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDk0NkVBQzE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmNwcCAqLzsgfTsKQEAg
LTk0NTQsNiArOTQ1NCwxMCBAQAogCQk3QUEzQTY5NjE5NEE2NEU3MDAxQ0JEMjQgLyogVGlsZUNv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGlsZUNvbnRyb2xs
ZXIuaDsgcGF0aCA9IGNhL1RpbGVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdBQTNBNjk3MTk0QTY0RTcwMDFDQkQyNCAvKiBUaWxlR3JpZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUaWxlR3JpZC5jcHA7IHBhdGggPSBjYS9UaWxl
R3JpZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQTNBNjk4MTk0QTY0RTcw
MDFDQkQyNCAvKiBUaWxlR3JpZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBU
aWxlR3JpZC5oOyBwYXRoID0gY2EvVGlsZUdyaWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0FBM0E2OUQxOTRCNTlCNjAwMUNCRDI0IC8qIExheWVyUG9vbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMYXllclBvb2wuY3BwOyBwYXRoID0gY2EvTGF5
ZXJQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FBM0E2OUUxOTRCNTlC
NjAwMUNCRDI0IC8qIExheWVyUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBMYXllclBvb2wuaDsgcGF0aCA9IGNhL0xheWVyUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QUEzQTZBMTE5NEI1QzIyMDAxQ0JEMjQgLyogVGlsZUNvdmVyYWdlTWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRpbGVDb3ZlcmFnZU1hcC5j
cHA7IHBhdGggPSBjYS9UaWxlQ292ZXJhZ2VNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QUEzQTZBMjE5NEI1QzIyMDAxQ0JEMjQgLyogVGlsZUNvdmVyYWdlTWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVDb3ZlcmFnZU1hcC5oOyBwYXRoID0g
Y2EvVGlsZUNvdmVyYWdlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQUJB
MjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRE9NRWRpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0FBQkEyNTgxNEJDNjEzMzAwQUE5QTExIC8qIERPTUVkaXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01FZGl0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvckRhdGFiYXNlQWdl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDQzMyw4ICsx
MDQzNyw2IEBACiAJCTkzRjZGMUVBMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTENvbnRleHRF
dmVudC5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0Y2RjFFQjEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250
ZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xDb250ZXh0
RXZlbnQuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRFdmVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5M0Y2RjFFQzEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0
RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMQ29udGV4dEV2ZW50LmlkbDsg
cGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTkzRjcyQUYxMTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBvb2wuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGF5ZXJQb29sLmg7IHBhdGggPSBjYS9tYWMvTGF5
ZXJQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzRjcyQUYyMTY2NkVERkMw
MDJBMDJCRCAvKiBMYXllclBvb2wubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBMYXllclBvb2wubW07IHBhdGggPSBjYS9tYWMvTGF5ZXJQb29sLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNTBBMzAwRkUxMDBGNjFBQjggLyogQ29kZUdl
bmVyYXRvci5wbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnBlcmw7IG5hbWUgPSBDb2RlR2VuZXJh
dG9yLnBtOyBwYXRoID0gc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5M0Y4QjMwNjBBMzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpT
LnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5w
bTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB3cmFwc0xpbmVzID0gMDsgfTsKIAkJOTNGOEIzMDcwQTMwMEZFQTAwRjYxQUI4IC8q
IGdlbmVyYXRlLWJpbmRpbmdzLnBsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9
ICJnZW5lcmF0ZS1iaW5kaW5ncy5wbCI7IHBhdGggPSAic2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5n
cy5wbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzU4NCw4ICsxMzU4Niw2IEBA
CiAJCUU0N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0UyNzY0MTYwMzZFRDIwMEVF
MkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUU0ODMwQTM4MThGNEM1OTQwMDE1NEExQiAvKiBUaWxlQ292ZXJhZ2VNYXAu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaWxlQ292ZXJhZ2VN
YXAubW07IHBhdGggPSBjYS9tYWMvVGlsZUNvdmVyYWdlTWFwLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFNDgzMEEzQzE4RjRDNUI3MDAxNTRBMUIgLyogVGlsZUNvdmVyYWdlTWFw
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVDb3ZlcmFnZU1hcC5oOyBw
YXRoID0gY2EvbWFjL1RpbGVDb3ZlcmFnZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8q
IFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lt
cGxlTGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDk0NkVBQzE1
NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlUnVsZUltcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTc4MywxNiArMTU3ODMsMTIgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCiAJCQkJMjkxN0I1NjUxNDczNDk5NTAwNTJDOUQwIC8qIExheWVyRmx1
c2hTY2hlZHVsZXJNYWMuY3BwICovLAotCQkJCTkzRjcyQUYxMTY2NkVERkMwMDJBMDJCRCAvKiBM
YXllclBvb2wuaCAqLywKLQkJCQk5M0Y3MkFGMjE2NjZFREZDMDAyQTAyQkQgLyogTGF5ZXJQb29s
Lm1tICovLAogCQkJCTBGNUUyMDA1MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0
aW9uTWFjLmggKi8sCiAJCQkJNDk1ODc4MUYxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FB
bmltYXRpb25NYWMubW0gKi8sCiAJCQkJRDY2QjJENUIxODY4MzAwNTAwNzNDNEREIC8qIFBsYXRm
b3JtQ0FGaWx0ZXJzTWFjLmggKi8sCiAJCQkJMEYxMzE2M0YxNkVEMENERTAwMzVDQzA0IC8qIFBs
YXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovLAogCQkJCTJENzBCQTEyMTgwNzREREYwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCAqLywKIAkJCQk0OTU4NzgyMDEyQTU3RERGMDA3MjM4QUMg
LyogUGxhdGZvcm1DQUxheWVyTWFjLm1tICovLAotCQkJCUU0ODMwQTNDMThGNEM1QjcwMDE1NEEx
QiAvKiBUaWxlQ292ZXJhZ2VNYXAuaCAqLywKLQkJCQlFNDgzMEEzODE4RjRDNTk0MDAxNTRBMUIg
LyogVGlsZUNvdmVyYWdlTWFwLm1tICovLAogCQkJCTBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAv
KiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovLAogCQkJCTBGNTgwRkEyMTQ5NjkzOTEwMEZCNUJE
OCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5tbSAqLywKIAkJCSk7CkBAIC0xNTgzMSw2ICsxNTgy
Nyw4IEBACiAJCQkJMjkxN0I1NUUxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVs
ZXIuY3BwICovLAogCQkJCTI5MTdCNTVGMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2No
ZWR1bGVyLmggKi8sCiAJCQkJMjkxN0I1NjAxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hT
Y2hlZHVsZXJDbGllbnQuaCAqLywKKwkJCQk3QUEzQTY5RDE5NEI1OUI2MDAxQ0JEMjQgLyogTGF5
ZXJQb29sLmNwcCAqLywKKwkJCQk3QUEzQTY5RTE5NEI1OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29s
LmggKi8sCiAJCQkJNDk5QjNFREMxMjhEQjUwMTAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FBbmltYXRp
b24uaCAqLywKIAkJCQkwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRl
cnMuaCAqLywKIAkJCQkyRDcwQkExNDE4MDc0Rjg1MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVy
LmNwcCAqLywKQEAgLTE1ODM4LDYgKzE1ODM2LDggQEAKIAkJCQk0OTNFNUUwODEyRDY0MjA1MDAw
MjAwODEgLyogUGxhdGZvcm1DQUxheWVyQ2xpZW50LmggKi8sCiAJCQkJN0FBM0E2OTUxOTRBNjRF
NzAwMUNCRDI0IC8qIFRpbGVDb250cm9sbGVyLmNwcCAqLywKIAkJCQk3QUEzQTY5NjE5NEE2NEU3
MDAxQ0JEMjQgLyogVGlsZUNvbnRyb2xsZXIuaCAqLywKKwkJCQk3QUEzQTZBMTE5NEI1QzIyMDAx
Q0JEMjQgLyogVGlsZUNvdmVyYWdlTWFwLmNwcCAqLywKKwkJCQk3QUEzQTZBMjE5NEI1QzIyMDAx
Q0JEMjQgLyogVGlsZUNvdmVyYWdlTWFwLmggKi8sCiAJCQkJN0FBM0E2OTcxOTRBNjRFNzAwMUNC
RDI0IC8qIFRpbGVHcmlkLmNwcCAqLywKIAkJCQk3QUEzQTY5ODE5NEE2NEU3MDAxQ0JEMjQgLyog
VGlsZUdyaWQuaCAqLywKIAkJCQk0OTRCQzQwQzEyQUVERDlFMDA3NDNCRDIgLyogVHJhbnNmb3Jt
YXRpb25NYXRyaXhDQS5jcHAgKi8sCkBAIC0yMzc0OCw2ICsyMzc0OCw3IEBACiAJCQkJODVCQTRE
MEYwQUE2ODg2ODAwODgwNTJEIC8qIERPTUhUTUxETGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg1RTcxMUE1MEFDNUQ1MzUwMDUzMjcwRiAvKiBET01IVE1MRExpc3RFbGVtZW50SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QkNCQzEzMEFCQkE4N0QwMDM4MTE2MCAvKiBE
T01IVE1MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdBQTNBNkE0MTk0QjVDMjIwMDFD
QkQyNCAvKiBUaWxlQ292ZXJhZ2VNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUE2MEFD
NUQ1MzUwMDUzMjcwRiAvKiBET01IVE1MRG9jdW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODVERjJFRUQwQUEzODdDQjAwQUQ2NEM1IC8qIERPTUhUTUxFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NUU3MTFBNzBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTEVsZW1lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDkzMSw3ICsyNDkzMiw2IEBACiAJCQkJQjJG
QTNEQjcwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJGQTNEQjkwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0FyY0Ficy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJGQTNEQkIwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0Fy
Y1JlbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ4MzBBM0QxOEY0QzVCNzAwMTU0QTFCIC8qIFRp
bGVDb3ZlcmFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQkQwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNE
QkYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJGQTNEQzEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1JlbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTA3Miw3ICsyNTA3Miw2IEBACiAJ
CQkJODVFQzlBRkIwQTcxQTJDNjAwRUVFQUVEIC8qIExhbmd1YWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyOTE3QjU2MjE0NzM0OTZDMDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjkxN0I1NjMxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hT
Y2hlZHVsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzRjcyQUYzMTY2NkVERkMwMDJB
MDJCRCAvKiBMYXllclBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MURDMDUwMTY0ODM0Qjkw
MDM3MUU1QSAvKiBMYXlvdXRCb3hFeHRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMUQ3MkY2
MTVGRTY5NTMwMEM0QzA3RSAvKiBMYXlvdXRNaWxlc3RvbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDFEQzA1MTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMjYxOTYsNiArMjYxOTUsNyBAQAogCQkJCUMxMDVEQTY0MEYzQUE2QjgwMDFERDQ0RiAv
KiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNDkwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzNBMTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk3QUEzQTZBMDE5NEI1OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzdCNDFBMDEyRTY3NUE5MDA1NDM0M0QgLyogVGV4dEV2ZW50SW5wdXRUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0REODEyNTFGMTJEMDAzRUYyNjkgLyogVGV4dEZpZWxk
SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxODA5OUU2NDkyMDA1NkU1ODEg
LyogVGV4dEdyYW51bGFyaXR5LmggaW4gSGVhZGVycyAqLywKQEAgLTI3MTMxLDcgKzI3MTMxLDYg
QEAKIAkJCQlFMTlBQzNGOTE4MjU2NkY3MDAzNDk0MjYgLyogQ3J5cHRvS2V5TWFjLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxRjgwQjg3MTgzMTcyNTIwMDc4ODVDMyAvKiBDcnlwdG9LZXlQYWly
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEM0VGNDQ5MTkxNzkxNUMwMDAzNDE4NCAvKiBXZWJB
Y3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKLQkJCQlFNDgz
MEEzOTE4RjRDNTk0MDAxNTRBMUIgLyogVGlsZUNvdmVyYWdlTWFwLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTE2NEZBQTUxODMxNUUxQTAwREI0RTYxIC8qIENyeXB0b0tleVJTQU1hYy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlFMTI1Rjg1OTE4MkMxQUE2MDBEODRDRDkgLyogQ3J5cHRvS2V5U2Vy
aWFsaXphdGlvblJhdy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDQUU5RjkwRjE0NjQ0MUYwMDBD
MjQ1QjAgLyogQ1NTQXNwZWN0UmF0aW9WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MzQ1
LDYgKzI3MzQ0LDcgQEAKIAkJCQk4NUJDQkMxNDBBQkJBODdEMDAzODExNjAgLyogRE9NSFRNTERv
Y3VtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVERjJFRUUwQUEzODdDQjAwQUQ2NEM1IC8q
IERPTUhUTUxFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVDMDUwQkIwQUQ4NEY1RTAw
NTUzMkU3IC8qIERPTUhUTUxFbWJlZEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQk3QUEz
QTZBMzE5NEI1QzIyMDAxQ0JEMjQgLyogVGlsZUNvdmVyYWdlTWFwLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg1QkE0Q0UwMEFBNjg2MUIwMDg4MDUyRCAvKiBET01IVE1MRmllbGRTZXRFbGVtZW50
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVFQ0JFRjAwQUE3NjI2OTAwNTQ0RjBCIC8qIERPTUhU
TUxGb250RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1REYyQzVEMEFBMzQxRjYwMEFE
NjRDNSAvKiBET01IVE1MRm9ybUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKQEAgLTI4NjExLDcg
KzI4NjExLDYgQEAKIAkJCQk5MzUyMDg0NTA5QkQ0M0I5MDBGMjAzOEQgLyogTGFuZ3VhZ2UubW0g
aW4gU291cmNlcyAqLywKIAkJCQkyOTE3QjU2MTE0NzM0OTZDMDA1MkM5RDAgLyogTGF5ZXJGbHVz
aFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTE3QjU2NjE0NzM0OTk1MDA1MkM5
RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0Y3
MkFGNDE2NjZFREZDMDAyQTAyQkQgLyogTGF5ZXJQb29sLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQxREMwNEYxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dEJveEV4dGVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDFEQzA1MjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMTIwQUNBNDEzRjk5OENBMDBGRTRBQzcgLyogTGF5b3V0UmVwYWlu
dGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjkwNjcsNiArMjkwNjYsNyBAQAogCQkJCTA3OEUw
OTBBMTdEMTRDRUUwMDQyMEFBMSAvKiBSVENJY2VDYW5kaWRhdGVFdmVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwNzhFMDkwQjE3RDE0Q0VFMDA0MjBBQTEgLyogUlRDUGVlckNvbm5lY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDczQkUzNTAxN0QxODFBNjAwMkJENDMxIC8qIFJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QUEzQTY5RjE5NEI1
OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3OEUwOTBD
MTdEMTRDRUUwMDQyMEFBMSAvKiBSVENTZXNzaW9uRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMDczQkUzNEUxN0QxODBCMjAwMkJENDMxIC8qIFJUQ1Nlc3Npb25EZXNjcmlwdGlv
bkRlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4RTA5MEQxN0QxNENFRTAwNDIw
QUExIC8qIFJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3RJbXBsLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvTGF5ZXJQb29sLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXll
clBvb2wuY3BwCShyZXZpc2lvbiAxNjk5MjMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wubW06MTY5OTIzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvTGF5ZXJQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5ZXJQb29sLmgiCisKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBjYXBhY2l0eURlY2F5VGltZSA9IDU7CisK
K0xheWVyUG9vbDo6TGF5ZXJQb29sKCkKKyAgICA6IG1fdG90YWxCeXRlcygwKQorICAgICwgbV9t
YXhCeXRlc0ZvclBvb2woNDggKiAxMDI0ICogMTAyNCkKKyAgICAsIG1fcHJ1bmVUaW1lcih0aGlz
LCAmTGF5ZXJQb29sOjpwcnVuZVRpbWVyRmlyZWQpCisgICAgLCBtX2xhc3RBZGRUaW1lKDApCit7
Cit9CisKK0xheWVyUG9vbCogTGF5ZXJQb29sOjpzaGFyZWRQb29sKCkKK3sKKyAgICBzdGF0aWMg
TGF5ZXJQb29sKiBzaGFyZWRQb29sID0gbmV3IExheWVyUG9vbDsKKyAgICByZXR1cm4gc2hhcmVk
UG9vbDsKK30KKwordW5zaWduZWQgTGF5ZXJQb29sOjpiYWNraW5nU3RvcmVCeXRlc0ZvclNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gc2l6ZS53aWR0aCgpICogc2l6ZS5o
ZWlnaHQoKSAqIDQ7Cit9CisKK0xheWVyUG9vbDo6TGF5ZXJMaXN0JiBMYXllclBvb2w6Omxpc3RP
ZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSkKK3sKKyAgICBIYXNoTWFwPEludFNpemUsIExheWVyTGlzdD46Oml0ZXJhdG9yIGl0ID0gbV9y
ZXVzZUxpc3RzLmZpbmQoc2l6ZSk7CisgICAgaWYgKGl0ID09IG1fcmV1c2VMaXN0cy5lbmQoKSkg
eworICAgICAgICBpdCA9IG1fcmV1c2VMaXN0cy5hZGQoc2l6ZSwgTGF5ZXJMaXN0KCkpLml0ZXJh
dG9yOworICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLmFwcGVuZChzaXplKTsKKyAgICB9IGVs
c2UgaWYgKGFjY2Vzc1R5cGUgPT0gTWFya0FzVXNlZCkgeworICAgICAgICBtX3NpemVzSW5QcnVu
ZU9yZGVyLnJlbW92ZShtX3NpemVzSW5QcnVuZU9yZGVyLnJldmVyc2VGaW5kKHNpemUpKTsKKyAg
ICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5hcHBlbmQoc2l6ZSk7CisgICAgfQorICAgIHJldHVy
biBpdC0+dmFsdWU7Cit9CisKK3ZvaWQgTGF5ZXJQb29sOjphZGRMYXllcihjb25zdCBSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiYgbGF5ZXIpCit7CisgICAgSW50U2l6ZSBsYXllclNpemUoZXhwYW5k
ZWRJbnRTaXplKGxheWVyLT5ib3VuZHMoKS5zaXplKCkpKTsKKyAgICBpZiAoIWNhblJldXNlTGF5
ZXJXaXRoU2l6ZShsYXllclNpemUpKQorICAgICAgICByZXR1cm47CisKKyAgICBsaXN0T2ZMYXll
cnNXaXRoU2l6ZShsYXllclNpemUpLnByZXBlbmQobGF5ZXIpOworICAgIG1fdG90YWxCeXRlcyAr
PSBiYWNraW5nU3RvcmVCeXRlc0ZvclNpemUobGF5ZXJTaXplKTsKKyAgICAKKyAgICBtX2xhc3RB
ZGRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgc2NoZWR1bGVQcnVu
ZSgpOworfQorCitSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBMYXllclBvb2w6OnRha2VMYXllcldp
dGhTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0
aFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgTGF5ZXJMaXN0JiByZXVzZUxp
c3QgPSBsaXN0T2ZMYXllcnNXaXRoU2l6ZShzaXplLCBNYXJrQXNVc2VkKTsKKyAgICBpZiAocmV1
c2VMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBtX3RvdGFsQnl0ZXMg
LT0gYmFja2luZ1N0b3JlQnl0ZXNGb3JTaXplKHNpemUpOworICAgIHJldHVybiByZXVzZUxpc3Qu
dGFrZUZpcnN0KCk7Cit9CisgICAgCit1bnNpZ25lZCBMYXllclBvb2w6OmRlY2F5ZWRDYXBhY2l0
eSgpIGNvbnN0Cit7CisgICAgLy8gRGVjYXkgdG8gb25lIHF1YXJ0ZXIgb3ZlciBjYXBhY2l0eURl
Y2F5VGltZQorICAgIGRvdWJsZSB0aW1lU2luY2VMYXN0QWRkID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCkgLSBtX2xhc3RBZGRUaW1lOworICAgIGlmICh0aW1lU2luY2VMYXN0QWRkID4g
Y2FwYWNpdHlEZWNheVRpbWUpCisgICAgICAgIHJldHVybiBtX21heEJ5dGVzRm9yUG9vbCAvIDQ7
CisgICAgZmxvYXQgZGVjYXlQcm9nZXNzID0gZmxvYXQodGltZVNpbmNlTGFzdEFkZCAvIGNhcGFj
aXR5RGVjYXlUaW1lKTsKKyAgICByZXR1cm4gbV9tYXhCeXRlc0ZvclBvb2wgLyA0ICsgbV9tYXhC
eXRlc0ZvclBvb2wgKiAzIC8gNCAqICgxIC0gZGVjYXlQcm9nZXNzKTsKK30KKwordm9pZCBMYXll
clBvb2w6OnNjaGVkdWxlUHJ1bmUoKQoreworICAgIGlmIChtX3BydW5lVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcHJ1bmVUaW1lci5zdGFydE9uZVNob3QoMSk7Cit9
CisKK3ZvaWQgTGF5ZXJQb29sOjpwcnVuZVRpbWVyRmlyZWQoVGltZXI8TGF5ZXJQb29sPiYpCit7
CisgICAgdW5zaWduZWQgc2hyaW5rVG8gPSBkZWNheWVkQ2FwYWNpdHkoKTsKKyAgICB3aGlsZSAo
bV90b3RhbEJ5dGVzID4gc2hyaW5rVG8pIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemVzSW5QcnVu
ZU9yZGVyLmlzRW1wdHkoKSk7CisgICAgICAgIEludFNpemUgc2l6ZVRvRHJvcCA9IG1fc2l6ZXNJ
blBydW5lT3JkZXIuZmlyc3QoKTsKKyAgICAgICAgTGF5ZXJMaXN0JiBvbGRlc3RSZXVzZUxpc3Qg
PSBtX3JldXNlTGlzdHMuZmluZChzaXplVG9Ecm9wKS0+dmFsdWU7CisgICAgICAgIGlmIChvbGRl
c3RSZXVzZUxpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX3JldXNlTGlzdHMucmVtb3Zl
KHNpemVUb0Ryb3ApOworICAgICAgICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5yZW1vdmUoMCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fdG90YWxCeXRl
cyAtPSBiYWNraW5nU3RvcmVCeXRlc0ZvclNpemUoc2l6ZVRvRHJvcCk7CisgICAgICAgIC8vIFRo
ZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGxpc3QgaXMgdGhlIG9sZGVzdCwgaGVuY2UgbW9zdCBsaWtl
bHkgbm90IHRvCisgICAgICAgIC8vIHN0aWxsIGhhdmUgYSBiYWNraW5nIHN0b3JlLgorICAgICAg
ICBvbGRlc3RSZXVzZUxpc3QucmVtb3ZlKC0tb2xkZXN0UmV1c2VMaXN0LmVuZCgpKTsKKyAgICB9
CisgICAgaWYgKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gbV9sYXN0QWRkVGltZSA8
PSBjYXBhY2l0eURlY2F5VGltZSkKKyAgICAgICAgc2NoZWR1bGVQcnVuZSgpOworfQorCit2b2lk
IExheWVyUG9vbDo6ZHJhaW4oKQoreworICAgIG1fcmV1c2VMaXN0cy5jbGVhcigpOworICAgIG1f
c2l6ZXNJblBydW5lT3JkZXIuY2xlYXIoKTsKKyAgICBtX3RvdGFsQnl0ZXMgPSAwOworfQorCit9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0xheWVy
UG9vbC5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0xheWVyUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0xheWVyUG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0xheWVyUG9vbC5oCShyZXZpc2lvbiAxNjk5MjMpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wuaDox
Njk5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBM
YXllclBvb2xfaAorI2RlZmluZSBMYXllclBvb2xfaAorCisjaW5jbHVkZSAiSW50U2l6ZS5oIgor
I2luY2x1ZGUgIkludFNpemVIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisj
aW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCitjbGFzcyBMYXllclBvb2wgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheWVyUG9v
bCk7CitwdWJsaWM6CisgICAgc3RhdGljIExheWVyUG9vbCogc2hhcmVkUG9vbCgpOworICAgIAor
ICAgIHZvaWQgYWRkTGF5ZXIoY29uc3QgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4mKTsKKyAgICBS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyPiB0YWtlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7
CisKKyAgICB2b2lkIGRyYWluKCk7CisKKyAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGFsbCBx
dWV1ZWQgbGF5ZXJzIGluIGJ5dGVzLgorICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhCeXRlc0ZvclBvb2w7IH0KKworcHJpdmF0ZToKKyAgICBMYXllclBvb2woKTsK
KworICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4+IExheWVyTGlzdDsK
KworICAgIHVuc2lnbmVkIGRlY2F5ZWRDYXBhY2l0eSgpIGNvbnN0OworCisgICAgYm9vbCBjYW5S
ZXVzZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QgeyByZXR1cm4gbV9t
YXhCeXRlc0ZvclBvb2wgJiYgIXNpemUuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBzY2hlZHVsZVBy
dW5lKCk7CisgICAgdm9pZCBwcnVuZVRpbWVyRmlyZWQoVGltZXI8TGF5ZXJQb29sPiYpOworCisg
ICAgdHlwZWRlZiBlbnVtIHsgTGVhdmVVbmNoYW5nZWQsIE1hcmtBc1VzZWQgfSBBY2Nlc3NUeXBl
OworICAgIExheWVyTGlzdCYgbGlzdE9mTGF5ZXJzV2l0aFNpemUoY29uc3QgSW50U2l6ZSYsIEFj
Y2Vzc1R5cGUgPSBMZWF2ZVVuY2hhbmdlZCk7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgYmFja2lu
Z1N0b3JlQnl0ZXNGb3JTaXplKGNvbnN0IEludFNpemUmKTsKKworICAgIEhhc2hNYXA8SW50U2l6
ZSwgTGF5ZXJMaXN0PiBtX3JldXNlTGlzdHM7CisgICAgLy8gT3JkZXJlZCBieSByZWNlbnQgdXNl
LiBUaGUgbGFzdCBzaXplIGlzIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQuCisgICAgVmVjdG9yPElu
dFNpemU+IG1fc2l6ZXNJblBydW5lT3JkZXI7CisgICAgdW5zaWduZWQgbV90b3RhbEJ5dGVzOwor
ICAgIHVuc2lnbmVkIG1fbWF4Qnl0ZXNGb3JQb29sOworCisgICAgVGltZXI8TGF5ZXJQb29sPiBt
X3BydW5lVGltZXI7CisKKyAgICBkb3VibGUgbV9sYXN0QWRkVGltZTsKK307CisKK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXll
clBvb2wuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvTGF5ZXJQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvdmVyYWdlTWFwLmNwcAkocmV2aXNp
b24gMTY5OTIzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
VGlsZUNvdmVyYWdlTWFwLm1tOjE2OTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGls
ZUNvdmVyYWdlTWFwLmgiCisKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAi
VGlsZUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIlRpbGVHcmlkLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworVGlsZUNvdmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXAoY29uc3QgVGlsZUNvbnRy
b2xsZXImIGNvbnRyb2xsZXIpCisgICAgOiBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikKKyAgICAs
IG1fbGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxlTGF5ZXIsIHRoaXMpKQorICAgICwgbV92aXNp
YmxlUmVjdEluZGljYXRvckxheWVyKCpjb250cm9sbGVyLnJvb3RMYXllcigpLmNyZWF0ZUNvbXBh
dGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBudWxscHRyKSkKKyAg
ICAsIG1fcG9zaXRpb24oRmxvYXRQb2ludCgwLCBjb250cm9sbGVyLnRvcENvbnRlbnRJbnNldCgp
KSkKK3sKKyAgICBtX2xheWVyLmdldCgpLnNldE9wYWNpdHkoMC43NSk7CisgICAgbV9sYXllci5n
ZXQoKS5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAgbV9sYXllci5nZXQoKS5z
ZXRCb3JkZXJDb2xvcihDb2xvcjo6YmxhY2spOworICAgIG1fbGF5ZXIuZ2V0KCkuc2V0Qm9yZGVy
V2lkdGgoMSk7CisgICAgbV9sYXllci5nZXQoKS5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDIsIDIp
KTsKKyAgICBtX2xheWVyLmdldCgpLnNldENvbnRlbnRzU2NhbGUobV9jb250cm9sbGVyLmRldmlj
ZVNjYWxlRmFjdG9yKCkpOworICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5z
ZXRCb3JkZXJXaWR0aCgyKTsKKyAgICBtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXIuZ2V0KCku
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0
b3JMYXllci5nZXQoKS5zZXRCb3JkZXJDb2xvcihDb2xvcigyNTUsIDAsIDApKTsKKworICAgIG1f
bGF5ZXIuZ2V0KCkuYXBwZW5kU3VibGF5ZXIoJm1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci5n
ZXQoKSk7CisKKyAgICB1cGRhdGUoKTsKK30KKworVGlsZUNvdmVyYWdlTWFwOjp+VGlsZUNvdmVy
YWdlTWFwKCkKK3sKKyAgICBtX2xheWVyLmdldCgpLnNldE93bmVyKG51bGxwdHIpOworfQorCit2
b2lkIFRpbGVDb3ZlcmFnZU1hcDo6dXBkYXRlKCkKK3sKKyAgICBGbG9hdFJlY3QgY29udGFpbmVy
Qm91bmRzID0gbV9jb250cm9sbGVyLmJvdW5kcygpOworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVj
dCA9IG1fY29udHJvbGxlci52aXNpYmxlUmVjdCgpOworICAgIHZpc2libGVSZWN0LmNvbnRyYWN0
KDQsIDQpOyAvLyBMYXllciBpcyBwb3NpdGlvbmVkIDJweCBmcm9tIHRvcCBhbmQgbGVmdCBlZGdl
cy4KKyAgICB2aXNpYmxlUmVjdC5zZXRIZWlnaHQodmlzaWJsZVJlY3QuaGVpZ2h0KCkgLSBtX2Nv
bnRyb2xsZXIudG9wQ29udGVudEluc2V0KCkpOworCisgICAgZmxvYXQgd2lkdGhTY2FsZSA9IDE7
CisgICAgZmxvYXQgc2NhbGUgPSAxOworICAgIGlmICghY29udGFpbmVyQm91bmRzLmlzRW1wdHko
KSkgeworICAgICAgICB3aWR0aFNjYWxlID0gc3RkOjptaW48ZmxvYXQ+KHZpc2libGVSZWN0Lndp
ZHRoKCkgLyBjb250YWluZXJCb3VuZHMud2lkdGgoKSwgMC4xKTsKKyAgICAgICAgc2NhbGUgPSBz
dGQ6Om1pbih3aWR0aFNjYWxlLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAvIGNvbnRhaW5lckJvdW5k
cy5oZWlnaHQoKSk7CisgICAgfQorCisgICAgZmxvYXQgaW5kaWNhdG9yU2NhbGUgPSBzY2FsZSAq
IG1fY29udHJvbGxlci50aWxlR3JpZCgpLnNjYWxlKCk7CisgICAgRmxvYXRSZWN0IG1hcEJvdW5k
cyA9IGNvbnRhaW5lckJvdW5kczsKKyAgICBtYXBCb3VuZHMuc2NhbGUoaW5kaWNhdG9yU2NhbGUs
IGluZGljYXRvclNjYWxlKTsKKworICAgIG1fbGF5ZXIuZ2V0KCkuc2V0UG9zaXRpb24obV9wb3Np
dGlvbiArIEZsb2F0UG9pbnQoMiwgMikpOworICAgIG1fbGF5ZXIuZ2V0KCkuc2V0Qm91bmRzKG1h
cEJvdW5kcyk7CisgICAgbV9sYXllci5nZXQoKS5zZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIHZp
c2libGVSZWN0LnNjYWxlKGluZGljYXRvclNjYWxlLCBpbmRpY2F0b3JTY2FsZSk7CisgICAgdmlz
aWJsZVJlY3QuZXhwYW5kKDIsIDIpOworICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+
c2V0UG9zaXRpb24odmlzaWJsZVJlY3QubG9jYXRpb24oKSk7CisgICAgbV92aXNpYmxlUmVjdElu
ZGljYXRvckxheWVyLT5zZXRCb3VuZHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdmlzaWJsZVJl
Y3Quc2l6ZSgpKSk7CisKKyAgICBDb2xvciB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yOworICAg
IHN3aXRjaCAobV9jb250cm9sbGVyLmluZGljYXRvck1vZGUoKSkgeworICAgIGNhc2UgU3luY2hy
b25vdXNTY3JvbGxpbmdCZWNhdXNlT2ZTdHlsZUluZGljYXRpb246CisgICAgICAgIHZpc2libGVS
ZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xvcigyNTUsIDAsIDApOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFN5bmNocm9ub3VzU2Nyb2xsaW5nQmVjYXVzZU9mRXZlbnRIYW5kbGVyc0luZGljYXRp
b246CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xvcigyNTUsIDI1NSwg
MCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXN5bmNTY3JvbGxpbmdJbmRpY2F0aW9uOgor
ICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMCwgMjAwLCAwKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV92aXNpYmxlUmVjdEluZGljYXRvckxheWVyLmdl
dCgpLnNldEJvcmRlckNvbG9yKHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IpOworfQorCit2b2lk
IFRpbGVDb3ZlcmFnZU1hcDo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9ybUNB
TGF5ZXIqIHBsYXRmb3JtQ0FMYXllciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmKQoreworICAgIEFTU0VSVF9VTlVTRUQocGxhdGZvcm1DQUxheWVyLCBwbGF0Zm9y
bUNBTGF5ZXIgPT0gJm1fbGF5ZXIuZ2V0KCkpOworICAgIG1fY29udHJvbGxlci50aWxlR3JpZCgp
LmRyYXdUaWxlTWFwQ29udGVudHMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgbV9sYXllci5n
ZXQoKS5ib3VuZHMoKSk7Cit9CisKK2Zsb2F0IFRpbGVDb3ZlcmFnZU1hcDo6cGxhdGZvcm1DQUxh
eWVyRGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRyb2xsZXIu
cm9vdExheWVyKCkub3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0b3IoKTsK
K30KKwordm9pZCBUaWxlQ292ZXJhZ2VNYXA6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKQoreworICAgIG1fbGF5ZXIuZ2V0KCkuc2V0Q29udGVudHNTY2FsZShk
ZXZpY2VTY2FsZUZhY3Rvcik7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5oCShyZXZpc2lvbiAxNjk5
MjMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ292
ZXJhZ2VNYXAuaDoxNjk5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9UaWxlQ292ZXJhZ2VNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFRpbGVDb3ZlcmFnZU1hcF9oCisjZGVmaW5lIFRpbGVDb3Zl
cmFnZU1hcF9oCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBJbnRSZWN0
OworY2xhc3MgVGlsZUNvbnRyb2xsZXI7CisKK2NsYXNzIFRpbGVDb3ZlcmFnZU1hcCA6IHB1Ymxp
YyBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGVD
b3ZlcmFnZU1hcCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFRpbGVD
b3ZlcmFnZU1hcChjb25zdCBUaWxlQ29udHJvbGxlciYpOworICAgIH5UaWxlQ292ZXJhZ2VNYXAo
KTsKKworICAgIHZvaWQgdXBkYXRlKCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0KKworICAgIFBsYXRm
b3JtQ0FMYXllciYgbGF5ZXIoKSB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9CisKKyAgICB2b2lk
IHNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0KTsKKworcHJpdmF0ZToKKyAgICAvLyBQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGlu
YXRlc1RvcERvd247IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyQ29udGVudHNP
cGFxdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IHBsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0
Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGZsb2F0IHBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBjb25zdCBUaWxlQ29udHJvbGxlciYgbV9jb250cm9sbGVy
OworCisgICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gbV9sYXllcjsKKyAgICBSZWY8UGxhdGZvcm1D
QUxheWVyPiBtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXI7CisKKyAgICBGbG9hdFBvaW50IG1f
cG9zaXRpb247Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wuaAkocmV2aXNpb24gMTY5OTM2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExh
eWVyUG9vbF9oCi0jZGVmaW5lIExheWVyUG9vbF9oCi0KLSNpbmNsdWRlICJJbnRTaXplLmgiCi0j
aW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKLSNp
bmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICAKLWNsYXNzIExheWVyUG9vbCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJQb29s
KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgTGF5ZXJQb29sKiBzaGFyZWRQb29sKCk7Ci0gICAgCi0g
ICAgdm9pZCBhZGRMYXllcihjb25zdCBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiYpOwotICAgIFJl
ZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IHRha2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmKTsK
LQotICAgIHZvaWQgZHJhaW4oKTsKLQotICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgb2YgYWxsIHF1
ZXVlZCBsYXllcnMgaW4gYnl0ZXMuCi0gICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJl
dHVybiBtX21heEJ5dGVzRm9yUG9vbDsgfQotCi1wcml2YXRlOgotICAgIExheWVyUG9vbCgpOwot
Ci0gICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8UGxhdGZvcm1DQUxheWVyPj4gTGF5ZXJMaXN0Owot
Ci0gICAgdW5zaWduZWQgZGVjYXllZENhcGFjaXR5KCkgY29uc3Q7Ci0KLSAgICBib29sIGNhblJl
dXNlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdCB7IHJldHVybiBtX21h
eEJ5dGVzRm9yUG9vbCAmJiAhc2l6ZS5pc0VtcHR5KCk7IH0KLSAgICB2b2lkIHNjaGVkdWxlUHJ1
bmUoKTsKLSAgICB2b2lkIHBydW5lVGltZXJGaXJlZChUaW1lcjxMYXllclBvb2w+Jik7Ci0KLSAg
ICB0eXBlZGVmIGVudW0geyBMZWF2ZVVuY2hhbmdlZCwgTWFya0FzVXNlZCB9IEFjY2Vzc1R5cGU7
Ci0gICAgTGF5ZXJMaXN0JiBsaXN0T2ZMYXllcnNXaXRoU2l6ZShjb25zdCBJbnRTaXplJiwgQWNj
ZXNzVHlwZSA9IExlYXZlVW5jaGFuZ2VkKTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBiYWNraW5n
U3RvcmVCeXRlc0ZvclNpemUoY29uc3QgSW50U2l6ZSYpOwotCi0gICAgSGFzaE1hcDxJbnRTaXpl
LCBMYXllckxpc3Q+IG1fcmV1c2VMaXN0czsKLSAgICAvLyBPcmRlcmVkIGJ5IHJlY2VudCB1c2Uu
IFRoZSBsYXN0IHNpemUgaXMgdGhlIG1vc3QgcmVjZW50bHkgdXNlZC4KLSAgICBWZWN0b3I8SW50
U2l6ZT4gbV9zaXplc0luUHJ1bmVPcmRlcjsKLSAgICB1bnNpZ25lZCBtX3RvdGFsQnl0ZXM7Ci0g
ICAgdW5zaWduZWQgbV9tYXhCeXRlc0ZvclBvb2w7Ci0KLSAgICBUaW1lcjxMYXllclBvb2w+IG1f
cHJ1bmVUaW1lcjsKLQotICAgIGRvdWJsZSBtX2xhc3RBZGRUaW1lOwotfTsKLQotfQotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBv
b2wubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL0xheWVyUG9vbC5tbQkocmV2aXNpb24gMTY5OTM2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwx
MzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5ZXJQb29sLmgiCi0KLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBjYXBhY2l0eURlY2F5VGltZSA9IDU7Ci0K
LUxheWVyUG9vbDo6TGF5ZXJQb29sKCkKLSAgICA6IG1fdG90YWxCeXRlcygwKQotICAgICwgbV9t
YXhCeXRlc0ZvclBvb2woNDggKiAxMDI0ICogMTAyNCkKLSAgICAsIG1fcHJ1bmVUaW1lcih0aGlz
LCAmTGF5ZXJQb29sOjpwcnVuZVRpbWVyRmlyZWQpCi0gICAgLCBtX2xhc3RBZGRUaW1lKDApCi17
Ci19Ci0KLUxheWVyUG9vbCogTGF5ZXJQb29sOjpzaGFyZWRQb29sKCkKLXsKLSAgICBzdGF0aWMg
TGF5ZXJQb29sKiBzaGFyZWRQb29sID0gbmV3IExheWVyUG9vbDsKLSAgICByZXR1cm4gc2hhcmVk
UG9vbDsKLX0KLQotdW5zaWduZWQgTGF5ZXJQb29sOjpiYWNraW5nU3RvcmVCeXRlc0ZvclNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gc2l6ZS53aWR0aCgpICogc2l6ZS5o
ZWlnaHQoKSAqIDQ7Ci19Ci0KLUxheWVyUG9vbDo6TGF5ZXJMaXN0JiBMYXllclBvb2w6Omxpc3RP
ZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSkKLXsKLSAgICBIYXNoTWFwPEludFNpemUsIExheWVyTGlzdD46Oml0ZXJhdG9yIGl0ID0gbV9y
ZXVzZUxpc3RzLmZpbmQoc2l6ZSk7Ci0gICAgaWYgKGl0ID09IG1fcmV1c2VMaXN0cy5lbmQoKSkg
ewotICAgICAgICBpdCA9IG1fcmV1c2VMaXN0cy5hZGQoc2l6ZSwgTGF5ZXJMaXN0KCkpLml0ZXJh
dG9yOwotICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLmFwcGVuZChzaXplKTsKLSAgICB9IGVs
c2UgaWYgKGFjY2Vzc1R5cGUgPT0gTWFya0FzVXNlZCkgewotICAgICAgICBtX3NpemVzSW5QcnVu
ZU9yZGVyLnJlbW92ZShtX3NpemVzSW5QcnVuZU9yZGVyLnJldmVyc2VGaW5kKHNpemUpKTsKLSAg
ICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5hcHBlbmQoc2l6ZSk7Ci0gICAgfQotICAgIHJldHVy
biBpdC0+dmFsdWU7Ci19Ci0KLXZvaWQgTGF5ZXJQb29sOjphZGRMYXllcihjb25zdCBSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiYgbGF5ZXIpCi17Ci0gICAgSW50U2l6ZSBsYXllclNpemUoZXhwYW5k
ZWRJbnRTaXplKGxheWVyLT5ib3VuZHMoKS5zaXplKCkpKTsKLSAgICBpZiAoIWNhblJldXNlTGF5
ZXJXaXRoU2l6ZShsYXllclNpemUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsaXN0T2ZMYXll
cnNXaXRoU2l6ZShsYXllclNpemUpLnByZXBlbmQobGF5ZXIpOwotICAgIG1fdG90YWxCeXRlcyAr
PSBiYWNraW5nU3RvcmVCeXRlc0ZvclNpemUobGF5ZXJTaXplKTsKLSAgICAKLSAgICBtX2xhc3RB
ZGRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAgc2NoZWR1bGVQcnVu
ZSgpOwotfQotCi1SZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBMYXllclBvb2w6OnRha2VMYXllcldp
dGhTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0
aFNpemUoc2l6ZSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgTGF5ZXJMaXN0JiByZXVzZUxp
c3QgPSBsaXN0T2ZMYXllcnNXaXRoU2l6ZShzaXplLCBNYXJrQXNVc2VkKTsKLSAgICBpZiAocmV1
c2VMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBtX3RvdGFsQnl0ZXMg
LT0gYmFja2luZ1N0b3JlQnl0ZXNGb3JTaXplKHNpemUpOwotICAgIHJldHVybiByZXVzZUxpc3Qu
dGFrZUZpcnN0KCk7Ci19Ci0gICAgCi11bnNpZ25lZCBMYXllclBvb2w6OmRlY2F5ZWRDYXBhY2l0
eSgpIGNvbnN0Ci17Ci0gICAgLy8gRGVjYXkgdG8gb25lIHF1YXJ0ZXIgb3ZlciBjYXBhY2l0eURl
Y2F5VGltZQotICAgIGRvdWJsZSB0aW1lU2luY2VMYXN0QWRkID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCkgLSBtX2xhc3RBZGRUaW1lOwotICAgIGlmICh0aW1lU2luY2VMYXN0QWRkID4g
Y2FwYWNpdHlEZWNheVRpbWUpCi0gICAgICAgIHJldHVybiBtX21heEJ5dGVzRm9yUG9vbCAvIDQ7
Ci0gICAgZmxvYXQgZGVjYXlQcm9nZXNzID0gZmxvYXQodGltZVNpbmNlTGFzdEFkZCAvIGNhcGFj
aXR5RGVjYXlUaW1lKTsKLSAgICByZXR1cm4gbV9tYXhCeXRlc0ZvclBvb2wgLyA0ICsgbV9tYXhC
eXRlc0ZvclBvb2wgKiAzIC8gNCAqICgxIC0gZGVjYXlQcm9nZXNzKTsKLX0KLQotdm9pZCBMYXll
clBvb2w6OnNjaGVkdWxlUHJ1bmUoKQotewotICAgIGlmIChtX3BydW5lVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcHJ1bmVUaW1lci5zdGFydE9uZVNob3QoMSk7Ci19
Ci0KLXZvaWQgTGF5ZXJQb29sOjpwcnVuZVRpbWVyRmlyZWQoVGltZXI8TGF5ZXJQb29sPiYpCi17
Ci0gICAgdW5zaWduZWQgc2hyaW5rVG8gPSBkZWNheWVkQ2FwYWNpdHkoKTsKLSAgICB3aGlsZSAo
bV90b3RhbEJ5dGVzID4gc2hyaW5rVG8pIHsKLSAgICAgICAgQVNTRVJUKCFtX3NpemVzSW5QcnVu
ZU9yZGVyLmlzRW1wdHkoKSk7Ci0gICAgICAgIEludFNpemUgc2l6ZVRvRHJvcCA9IG1fc2l6ZXNJ
blBydW5lT3JkZXIuZmlyc3QoKTsKLSAgICAgICAgTGF5ZXJMaXN0JiBvbGRlc3RSZXVzZUxpc3Qg
PSBtX3JldXNlTGlzdHMuZmluZChzaXplVG9Ecm9wKS0+dmFsdWU7Ci0gICAgICAgIGlmIChvbGRl
c3RSZXVzZUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX3JldXNlTGlzdHMucmVtb3Zl
KHNpemVUb0Ryb3ApOwotICAgICAgICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5yZW1vdmUoMCk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fdG90YWxCeXRl
cyAtPSBiYWNraW5nU3RvcmVCeXRlc0ZvclNpemUoc2l6ZVRvRHJvcCk7Ci0gICAgICAgIC8vIFRo
ZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGxpc3QgaXMgdGhlIG9sZGVzdCwgaGVuY2UgbW9zdCBsaWtl
bHkgbm90IHRvCi0gICAgICAgIC8vIHN0aWxsIGhhdmUgYSBiYWNraW5nIHN0b3JlLgotICAgICAg
ICBvbGRlc3RSZXVzZUxpc3QucmVtb3ZlKC0tb2xkZXN0UmV1c2VMaXN0LmVuZCgpKTsKLSAgICB9
Ci0gICAgaWYgKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gbV9sYXN0QWRkVGltZSA8
PSBjYXBhY2l0eURlY2F5VGltZSkKLSAgICAgICAgc2NoZWR1bGVQcnVuZSgpOwotfQotCi12b2lk
IExheWVyUG9vbDo6ZHJhaW4oKQotewotICAgIG1fcmV1c2VMaXN0cy5jbGVhcigpOwotICAgIG1f
c2l6ZXNJblBydW5lT3JkZXIuY2xlYXIoKTsKLSAgICBtX3RvdGFsQnl0ZXMgPSAwOwotfQotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvdmVy
YWdlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1RpbGVDb3ZlcmFnZU1hcC5oCShyZXZpc2lvbiAxNjk5MzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvdmVyYWdlTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUaWxlQ292
ZXJhZ2VNYXBfaAotI2RlZmluZSBUaWxlQ292ZXJhZ2VNYXBfaAotCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllckNsaWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZsb2F0UmVjdDsKLWNs
YXNzIEludFBvaW50OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIFRpbGVDb250cm9sbGVyOwotCi1j
bGFzcyBUaWxlQ292ZXJhZ2VNYXAgOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyQ2xpZW50IHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlQ292ZXJhZ2VNYXApOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBUaWxlQ292ZXJhZ2VNYXAoY29uc3QgVGlsZUNvbnRyb2xs
ZXImKTsKLSAgICB+VGlsZUNvdmVyYWdlTWFwKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZSgpOwotICAg
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlv
biA9IHBvc2l0aW9uOyB9Ci0KLSAgICBQbGF0Zm9ybUNBTGF5ZXImIGxheWVyKCkgeyByZXR1cm4g
bV9sYXllci5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7
Ci0KLXByaXZhdGU6Ci0gICAgLy8gUGxhdGZvcm1DQUxheWVyQ2xpZW50Ci0gICAgdmlydHVhbCBH
cmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1D
QUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEdyYXBo
aWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duOyB9Ci0gICAgdmlydHVhbCBi
b29sIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3BhcXVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxheWVyKiwgR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBmbG9hdCBwbGF0Zm9y
bUNBTGF5ZXJEZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3Qg
VGlsZUNvbnRyb2xsZXImIG1fY29udHJvbGxlcjsKLQotICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+
IG1fbGF5ZXI7Ci0gICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gbV92aXNpYmxlUmVjdEluZGljYXRv
ckxheWVyOwotCi0gICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwotfTsKLQotfQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ292ZXJh
Z2VNYXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1RpbGVDb3ZlcmFnZU1hcC5tbQkocmV2aXNpb24gMTY5OTM2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb3ZlcmFnZU1hcC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJUaWxlQ292ZXJhZ2VNYXAuaCIKLQotI2ltcG9ydCAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgotI2ltcG9ydCAiVGlsZUdyaWQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1UaWxlQ292ZXJhZ2VNYXA6OlRpbGVDb3ZlcmFn
ZU1hcChjb25zdCBUaWxlQ29udHJvbGxlciYgY29udHJvbGxlcikKLSAgICA6IG1fY29udHJvbGxl
cihjb250cm9sbGVyKQotICAgICwgbV9sYXllcigqY29udHJvbGxlci5yb290TGF5ZXIoKS5jcmVh
dGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTaW1wbGVMYXllciwg
dGhpcykpCi0gICAgLCBtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXIoKmNvbnRyb2xsZXIucm9v
dExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
TGF5ZXIsIG51bGxwdHIpKQotICAgICwgbV9wb3NpdGlvbihGbG9hdFBvaW50KDAsIGNvbnRyb2xs
ZXIudG9wQ29udGVudEluc2V0KCkpKQotewotICAgIG1fbGF5ZXIuZ2V0KCkuc2V0T3BhY2l0eSgw
Ljc1KTsKLSAgICBtX2xheWVyLmdldCgpLnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsK
LSAgICBtX2xheWVyLmdldCgpLnNldEJvcmRlckNvbG9yKENvbG9yOjpibGFjayk7Ci0gICAgbV9s
YXllci5nZXQoKS5zZXRCb3JkZXJXaWR0aCgxKTsKLSAgICBtX2xheWVyLmdldCgpLnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoMiwgMikpOwotICAgIG1fbGF5ZXIuZ2V0KCkuc2V0Q29udGVudHNTY2Fs
ZShtX2NvbnRyb2xsZXIuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgbV92aXNpYmxlUmVjdElu
ZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlcldpZHRoKDIpOwotICAgIG1fdmlzaWJsZVJlY3RJ
bmRpY2F0b3JMYXllci5nZXQoKS5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7Ci0gICAg
bV92aXNpYmxlUmVjdEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlckNvbG9yKENvbG9yKDI1
NSwgMCwgMCkpOwotCi0gICAgbV9sYXllci5nZXQoKS5hcHBlbmRTdWJsYXllcigmbV92aXNpYmxl
UmVjdEluZGljYXRvckxheWVyLmdldCgpKTsKLQotICAgIHVwZGF0ZSgpOwotfQotCi1UaWxlQ292
ZXJhZ2VNYXA6On5UaWxlQ292ZXJhZ2VNYXAoKQotewotICAgIG1fbGF5ZXIuZ2V0KCkuc2V0T3du
ZXIobnVsbHB0cik7Ci19Ci0KLXZvaWQgVGlsZUNvdmVyYWdlTWFwOjp1cGRhdGUoKQotewotICAg
IEZsb2F0UmVjdCBjb250YWluZXJCb3VuZHMgPSBtX2NvbnRyb2xsZXIuYm91bmRzKCk7Ci0gICAg
RmxvYXRSZWN0IHZpc2libGVSZWN0ID0gbV9jb250cm9sbGVyLnZpc2libGVSZWN0KCk7Ci0gICAg
dmlzaWJsZVJlY3QuY29udHJhY3QoNCwgNCk7IC8vIExheWVyIGlzIHBvc2l0aW9uZWQgMnB4IGZy
b20gdG9wIGFuZCBsZWZ0IGVkZ2VzLgotICAgIHZpc2libGVSZWN0LnNldEhlaWdodCh2aXNpYmxl
UmVjdC5oZWlnaHQoKSAtIG1fY29udHJvbGxlci50b3BDb250ZW50SW5zZXQoKSk7Ci0KLSAgICBm
bG9hdCB3aWR0aFNjYWxlID0gMTsKLSAgICBmbG9hdCBzY2FsZSA9IDE7Ci0gICAgaWYgKCFjb250
YWluZXJCb3VuZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHdpZHRoU2NhbGUgPSBzdGQ6Om1pbjxm
bG9hdD4odmlzaWJsZVJlY3Qud2lkdGgoKSAvIGNvbnRhaW5lckJvdW5kcy53aWR0aCgpLCAwLjEp
OwotICAgICAgICBzY2FsZSA9IHN0ZDo6bWluKHdpZHRoU2NhbGUsIHZpc2libGVSZWN0LmhlaWdo
dCgpIC8gY29udGFpbmVyQm91bmRzLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBpbmRp
Y2F0b3JTY2FsZSA9IHNjYWxlICogbV9jb250cm9sbGVyLnRpbGVHcmlkKCkuc2NhbGUoKTsKLSAg
ICBGbG9hdFJlY3QgbWFwQm91bmRzID0gY29udGFpbmVyQm91bmRzOwotICAgIG1hcEJvdW5kcy5z
Y2FsZShpbmRpY2F0b3JTY2FsZSwgaW5kaWNhdG9yU2NhbGUpOwotCi0gICAgbV9sYXllci5nZXQo
KS5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uICsgRmxvYXRQb2ludCgyLCAyKSk7Ci0gICAgbV9sYXll
ci5nZXQoKS5zZXRCb3VuZHMobWFwQm91bmRzKTsKLSAgICBtX2xheWVyLmdldCgpLnNldE5lZWRz
RGlzcGxheSgpOwotCi0gICAgdmlzaWJsZVJlY3Quc2NhbGUoaW5kaWNhdG9yU2NhbGUsIGluZGlj
YXRvclNjYWxlKTsKLSAgICB2aXNpYmxlUmVjdC5leHBhbmQoMiwgMik7Ci0gICAgbV92aXNpYmxl
UmVjdEluZGljYXRvckxheWVyLT5zZXRQb3NpdGlvbih2aXNpYmxlUmVjdC5sb2NhdGlvbigpKTsK
LSAgICBtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXItPnNldEJvdW5kcyhGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCB2aXNpYmxlUmVjdC5zaXplKCkpKTsKLQotICAgIENvbG9yIHZpc2libGVSZWN0
SW5kaWNhdG9yQ29sb3I7Ci0gICAgc3dpdGNoIChtX2NvbnRyb2xsZXIuaW5kaWNhdG9yTW9kZSgp
KSB7Ci0gICAgY2FzZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlv
bjoKLSAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3luY2hyb25vdXNTY3JvbGxpbmdCZWNhdXNlT2ZF
dmVudEhhbmRsZXJzSW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xv
ciA9IENvbG9yKDI1NSwgMjU1LCAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBc3luY1Nj
cm9sbGluZ0luZGljYXRpb246Ci0gICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBD
b2xvcigwLCAyMDAsIDApOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX3Zpc2libGVS
ZWN0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyQ29sb3IodmlzaWJsZVJlY3RJbmRpY2F0
b3JDb2xvcik7Ci19Ci0KLXZvaWQgVGlsZUNvdmVyYWdlTWFwOjpwbGF0Zm9ybUNBTGF5ZXJQYWlu
dENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVyLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChwbGF0
Zm9ybUNBTGF5ZXIsIHBsYXRmb3JtQ0FMYXllciA9PSAmbV9sYXllci5nZXQoKSk7Ci0gICAgbV9j
b250cm9sbGVyLnRpbGVHcmlkKCkuZHJhd1RpbGVNYXBDb250ZW50cyhjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLCBtX2xheWVyLmdldCgpLmJvdW5kcygpKTsKLX0KLQotZmxvYXQgVGlsZUNvdmVy
YWdlTWFwOjpwbGF0Zm9ybUNBTGF5ZXJEZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fY29udHJvbGxlci5yb290TGF5ZXIoKS5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJE
ZXZpY2VTY2FsZUZhY3RvcigpOwotfQotCi12b2lkIFRpbGVDb3ZlcmFnZU1hcDo6c2V0RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCi17Ci0gICAgbV9sYXllci5nZXQo
KS5zZXRDb250ZW50c1NjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLX0KLQotfQo=
</data>
<flag name="review"
          id="257553"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>