<?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>184488</bug_id>
          
          <creation_ts>2018-04-10 23:45:33 -0700</creation_ts>
          <short_desc>[curl][WebKit] Implement NetworkDataTaskCurl</short_desc>
          <delta_ts>2018-04-11 17:54:19 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174003</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>pvollan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1413599</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-10 23:45:33 -0700</bug_when>
    <thetext>[curl][WebKit] Implement NetworkDataTaskCurl

Implement NetworkDataTask for curl port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413601</commentid>
    <comment_count>1</comment_count>
      <attachid>337681</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-10 23:48:45 -0700</bug_when>
    <thetext>Created attachment 337681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413624</commentid>
    <comment_count>2</comment_count>
      <attachid>337687</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-11 02:13:06 -0700</bug_when>
    <thetext>Created attachment 337687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413879</commentid>
    <comment_count>3</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-11 17:53:57 -0700</bug_when>
    <thetext>Committed r230551: &lt;https://trac.webkit.org/changeset/230551&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413880</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-11 17:54:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/39367375&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337681</attachid>
            <date>2018-04-10 23:48:45 -0700</date>
            <delta_ts>2018-04-11 02:13:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184488-20180411154844.patch</filename>
            <type>text/plain</type>
            <size>25150</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwNTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ3MTZjOGMzMzE4ZjczNDFm
ZmFhMWUyYTEwYzkxZGEyNDEwNmY4MjYuLjhhOTE4N2EzY2JlZjYzN2UyMGQ4YWY4OTNkMmY2YTk4
NGJmY2FjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTgtMDQtMTAgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW2N1cmxdW1dlYktp
dF0gSW1wbGVtZW50IE5ldHdvcmtEYXRhVGFza0N1cmwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDQ4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpjcmVhdGUpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpOZXR3b3JrRGF0YVRhc2tDdXJs
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6fk5ldHdvcmtEYXRhVGFz
a0N1cmwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpyZXN1bWUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpzdXNwZW5kKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrQ3VybDo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFza0N1cmw6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrQ3VybDo6Y3JlYXRlQ3VybFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkU2VuZERhdGEpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6Y3VybERpZFJlY2VpdmVCdWZmZXIpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkQ29tcGxldGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkRmFpbFdpdGhFcnJvcik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1cmw6OnNob3VsZFJlZGlyZWN0QXNH
RVQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjp3aWxsUGVyZm9ybUhU
VFBSZWRpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1cmw6OnRy
eUh0dHBBdXRoZW50aWNhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1
cmw6OnJlc3RhcnRXaXRoQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFza0N1cmw6OmFwcGVuZENvb2tpZUhlYWRlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtE
YXRhVGFza0N1cmw6OmhhbmRsZUNvb2tpZUhlYWRlcnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5oOiBBZGRlZC4KKyAgICAgICAgKiBQbGF0Zm9y
bVdpbi5jbWFrZToKKwogMjAxOC0wNC0xMCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIHRlc3QgZml4IGFmdGVyIHIyMzA0NjgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcAppbmRleCA1
NGQwMzc0NTgyMDZkNTYzMzhlZGQ0NDgzNzQxZDVmODA4MTgyZGIzLi41NWRjYjA1MDk3YjgyNjM2
ZTJiZjdmYWI4NmNlMmJiOTI2MzQ4NmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC00MCw2ICs0MCw5IEBACiAjaWYgVVNFKFNP
VVApCiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrU291cC5oIgogI2VuZGlmCisjaWYgVVNFKENV
UkwpCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrQ3VybC5oIgorI2VuZGlmCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC01Niw2ICs1OSw5IEBAIFJlZjxOZXR3b3JrRGF0YVRhc2s+
IE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3Jr
RGF0CiAjaWYgVVNFKFNPVVApCiAgICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0
ZShzZXNzaW9uLCBjbGllbnQsIHBhcmFtZXRlcnMucmVxdWVzdCwgcGFyYW1ldGVycy5zdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgcGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3ksIHBhcmFt
ZXRlcnMuY29udGVudEVuY29kaW5nU25pZmZpbmdQb2xpY3ksIHBhcmFtZXRlcnMuc2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CiAjZW5kaWYKKyNpZiBVU0UoQ1VSTCkK
KyAgICByZXR1cm4gTmV0d29ya0RhdGFUYXNrQ3VybDo6Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwg
cGFyYW1ldGVycy5yZXF1ZXN0LCBwYXJhbWV0ZXJzLnN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBw
YXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSwgcGFyYW1ldGVycy5jb250ZW50RW5jb2Rp
bmdTbmlmZmluZ1BvbGljeSwgcGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0KTsKKyNlbmRpZgogfQogCiBOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRh
VGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGll
bnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGJvb2wgc2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zYTdkZGNlMDhlZTJjMmRhNDlkZjYwNzliMTI1Y2ZiN2MzMmFmYmNlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtEYXRhVGFz
a0N1cmwuY3BwCkBAIC0wLDAgKzEsNDAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tDdXJsLmgiCisKKyNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbkN1cmwuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9Db29raWVzU3RyYXRlZ3kuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0N1cmxSZXF1ZXN0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVy
cm9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworTmV0d29ya0RhdGFUYXNrQ3VybDo6TmV0d29ya0RhdGFUYXNrQ3VybChOZXR3b3JrU2Vzc2lv
biYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250
ZW50U25pZmYsIENvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5LCBib29sIHNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCisgICAgOiBOZXR3b3JrRGF0YVRhc2soc2Vz
c2lvbiwgY2xpZW50LCByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBzdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKK3sKKyAgICBp
ZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gcmVxdWVzdCA9IHJlcXVlc3RXaXRoQ3JlZGVudGlhbHM7CisgICAgaWYgKHJl
cXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7CisgICAgICAgIGlmIChtX3N0
b3JlZENyZWRlbnRpYWxzUG9saWN5ID09IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UpIHsK
KyAgICAgICAgICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgICAgIG1fdXNl
ciA9IHVybC51c2VyKCk7CisgICAgICAgICAgICBtX3Bhc3N3b3JkID0gdXJsLnBhc3MoKTsKKyAg
ICAgICAgICAgIHJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKworICAgICAgICAgICAgaWYg
KG1fdXNlci5pc0VtcHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQobV9wYXJ0aXRpb24sIHJlcXVlc3QudXJsKCkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2Vzc2lvbi0+bmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQobV9wYXJ0aXRpb24sIENyZWRlbnRp
YWwobV91c2VyLCBtX3Bhc3N3b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgcmVxdWVz
dC51cmwoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2N1cmxSZXF1ZXN0ID0gY3JlYXRl
Q3VybFJlcXVlc3QocmVxdWVzdCwgU2hvdWxkUHJlcHJvY2Vzczo6WWVzKTsKKyAgICBpZiAoIW1f
aW5pdGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRV
c2VyUGFzcyhtX2luaXRpYWxDcmVkZW50aWFsLnVzZXIoKSwgbV9pbml0aWFsQ3JlZGVudGlhbC5w
YXNzd29yZCgpKTsKKyAgICBtX2N1cmxSZXF1ZXN0LT5zdGFydCgpOworfQorCitOZXR3b3JrRGF0
YVRhc2tDdXJsOjp+TmV0d29ya0RhdGFUYXNrQ3VybCgpCit7CisgICAgaWYgKG1fY3VybFJlcXVl
c3QpCisgICAgICAgIG1fY3VybFJlcXVlc3QtPmludmFsaWRhdGVDbGllbnQoKTsKK30KKwordm9p
ZCBOZXR3b3JrRGF0YVRhc2tDdXJsOjpyZXN1bWUoKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9
IFN0YXRlOjpSdW5uaW5nKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8
IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
dGF0ZSA9IFN0YXRlOjpSdW5uaW5nOworCisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUg
IT0gTm9GYWlsdXJlKSB7CisgICAgICAgIEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2N1cmxSZXF1ZXN0KQorICAg
ICAgICBtX2N1cmxSZXF1ZXN0LT5yZXN1bWUoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tD
dXJsOjpzdXNwZW5kKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6U3VzcGVuZGVk
KTsKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3Rh
dGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpT
dXNwZW5kZWQ7CisKKyAgICBpZiAobV9jdXJsUmVxdWVzdCkKKyAgICAgICAgbV9jdXJsUmVxdWVz
dC0+c3VzcGVuZCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmNhbmNlbCgpCit7
CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRl
OjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2Fu
Y2VsaW5nOworCisgICAgaWYgKG1fY3VybFJlcXVlc3QpCisgICAgICAgIG1fY3VybFJlcXVlc3Qt
PmNhbmNlbCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmludmFsaWRhdGVBbmRD
YW5jZWwoKQoreworICAgIGNhbmNlbCgpOworCisgICAgaWYgKG1fY3VybFJlcXVlc3QpCisgICAg
ICAgIG1fY3VybFJlcXVlc3QtPmludmFsaWRhdGVDbGllbnQoKTsKK30KKworTmV0d29ya0RhdGFU
YXNrOjpTdGF0ZSBOZXR3b3JrRGF0YVRhc2tDdXJsOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc3RhdGU7Cit9CisKK1JlZjxDdXJsUmVxdWVzdD4gTmV0d29ya0RhdGFUYXNrQ3VybDo6
Y3JlYXRlQ3VybFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTaG91bGRQ
cmVwcm9jZXNzIHNob3VsZFByZXByb2Nlc3MpCit7CisgICAgbV9jdXJyZW50UmVxdWVzdCA9IHJl
cXVlc3Q7CisKKyAgICBpZiAoc2hvdWxkUHJlcHJvY2VzcyA9PSBTaG91bGRQcmVwcm9jZXNzOjpZ
ZXMpCisgICAgICAgIGFwcGVuZENvb2tpZUhlYWRlcihtX2N1cnJlbnRSZXF1ZXN0KTsKKworICAg
IC8vIENyZWF0ZXMgYSBDdXJsUmVxdWVzdCBpbiBzdXNwZW5kZWQgc3RhdGUuCisgICAgLy8gVGhl
biwgTmV0d29ya0RhdGFUYXNrQ3VybDo6cmVzdW1lKCkgd2lsbCBiZSBjYWxsZWQgYW5kIGNvbW11
bmljYXRpb24gcmVzdW1lcy4KKyAgICByZXR1cm4gQ3VybFJlcXVlc3Q6OmNyZWF0ZShtX2N1cnJl
bnRSZXF1ZXN0LCAqdGhpcywgQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQ6Olllcyk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrQ3VybDo6Y3VybERpZFNlbmREYXRhKEN1cmxSZXF1ZXN0Jiwg
dW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc0V4cGVjdGVkVG9TZW5kKQoreworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpOworICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgc3RhdGUo
KSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKHRvdGFsQnl0ZXNTZW50LCB0b3RhbEJ5dGVzRXhwZWN0
ZWRUb1NlbmQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmN1cmxEaWRSZWNlaXZl
UmVzcG9uc2UoQ3VybFJlcXVlc3QmLCBjb25zdCBDdXJsUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9u
c2UpCit7CisgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7CisgICAgaWYg
KHN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBzdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0
ZWQgfHwgIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jlc3BvbnNlID0gUmVz
b3VyY2VSZXNwb25zZShyZWNlaXZlZFJlc3BvbnNlKTsKKworICAgIGhhbmRsZUNvb2tpZUhlYWRl
cnMocmVjZWl2ZWRSZXNwb25zZSk7CisKKyAgICBpZiAobV9yZXNwb25zZS5zaG91bGRSZWRpcmVj
dCgpKSB7CisgICAgICAgIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV9yZXNwb25zZS5pc1VuYXV0aG9yaXplZCgpKSB7Cisg
ICAgICAgIHRyeUh0dHBBdXRoZW50aWNhdGlvbihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShyZWNl
aXZlZFJlc3BvbnNlLCBtX2F1dGhGYWlsdXJlQ291bnQsIG1fcmVzcG9uc2UpKTsKKyAgICAgICAg
bV9hdXRoRmFpbHVyZUNvdW50Kys7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaWRS
ZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbikgewor
ICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3Rh
dGU6OkNvbXBsZXRlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzd2l0Y2ggKHBv
bGljeUFjdGlvbikgeworICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6VXNlOgorICAgICAgICAg
ICAgaWYgKG1fY3VybFJlcXVlc3QpCisgICAgICAgICAgICAgICAgbV9jdXJsUmVxdWVzdC0+Y29t
cGxldGVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFBvbGljeUFjdGlvbjo6SWdub3JlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUG9saWN5QWN0aW9uOjpEb3dubG9hZDoKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFza0N1cmw6OmN1cmxEaWRSZWNlaXZlQnVmZmVyKEN1cmxSZXF1ZXN0JiwgUmVmPFNo
YXJlZEJ1ZmZlcj4mJiBidWZmZXIpCit7CisgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyk7CisgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBzdGF0ZSgp
ID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2NsaWVudCAmJiAhaXNEb3dubG9hZCgpKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKFdURk1vdmUoYnVm
ZmVyKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ3VybDo6Y3VybERpZENvbXBsZXRlKEN1
cmxSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgc3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICghbV9jbGllbnQgJiYgIWlzRG93
bmxvYWQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVzcG9uc2Uuc2V0RGVwcmVjYXRl
ZE5ldHdvcmtMb2FkTWV0cmljcyhyZXF1ZXN0LmdldE5ldHdvcmtMb2FkTWV0cmljcygpKTsKKwor
ICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0sIG1fcmVzcG9uc2UuZGVwcmVj
YXRlZE5ldHdvcmtMb2FkTWV0cmljcygpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tDdXJs
OjpjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlRXJyb3Im
IHJlc291cmNlRXJyb3IpCit7CisgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8
fCBzdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2NsaWVudCAmJiAhaXNEb3dubG9h
ZCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVy
cm9yKHJlc291cmNlRXJyb3IpOworfQorCitib29sIE5ldHdvcmtEYXRhVGFza0N1cmw6OnNob3Vs
ZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGNyb3Nz
T3JpZ2luKQoreworICAgIGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCByZXF1
ZXN0Lmh0dHBNZXRob2QoKSA9PSAiSEVBRCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgaWYgKG1fcmVzcG9uc2UuaXNTZWVPdGhlcigpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmICgobV9yZXNwb25zZS5pc01vdmVkUGVybWFuZW50bHkoKSB8
fCBtX3Jlc3BvbnNlLmlzRm91bmQoKSkgJiYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NU
IikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGNyb3NzT3JpZ2luICYmIChyZXF1
ZXN0Lmh0dHBNZXRob2QoKSA9PSAiREVMRVRFIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OndpbGxQZXJm
b3JtSFRUUFJlZGlyZWN0aW9uKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heFJlZGlyZWN0
cyA9IDIwOworCisgICAgaWYgKG1fcmVkaXJlY3RDb3VudCsrID4gbWF4UmVkaXJlY3RzKSB7Cisg
ICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihSZXNvdXJjZUVycm9yOjpodHRw
RXJyb3IoQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTLCBtX3Jlc3BvbnNlLnVybCgpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IG1fY3Vy
cmVudFJlcXVlc3Q7CisgICAgVVJMIHJlZGlyZWN0ZWRVUkwgPSBVUkwobV9yZXNwb25zZS51cmwo
KSwgbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkxvY2F0aW9uKSk7
CisgICAgaWYgKCFyZWRpcmVjdGVkVVJMLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpICYmIHJlcXVl
c3QudXJsKCkuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpCisgICAgICAgIHJlZGlyZWN0ZWRVUkwu
c2V0RnJhZ21lbnRJZGVudGlmaWVyKHJlcXVlc3QudXJsKCkuZnJhZ21lbnRJZGVudGlmaWVyKCkp
OworICAgIHJlcXVlc3Quc2V0VVJMKHJlZGlyZWN0ZWRVUkwpOworCisgICAgLy8gU2hvdWxkIG5v
dCBzZXQgUmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1cmUgcmVzb3VyY2UgdG8g
bm9uLXNlY3VyZSBvbmUuCisgICAgaWYgKG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCAmJiAhcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYmIHByb3Rv
Y29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikpCisgICAgICAgIHJlcXVlc3Qu
Y2xlYXJIVFRQUmVmZXJyZXIoKTsKKworICAgIGJvb2wgaXNDcm9zc09yaWdpbiA9ICFwcm90b2Nv
bEhvc3RBbmRQb3J0QXJlRXF1YWwobV9jdXJyZW50UmVxdWVzdC51cmwoKSwgcmVxdWVzdC51cmwo
KSk7CisgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXF1ZXN0Lmh0dHBN
ZXRob2QoKSwgImdldCIpKSB7CisgICAgICAgIC8vIENoYW5nZSByZXF1ZXN0IG1ldGhvZCB0byBH
RVQgaWYgY2hhbmdlIHdhcyBtYWRlIGR1cmluZyBhIHByZXZpb3VzIHJlZGlyZWN0aW9uIG9yIGlm
IGN1cnJlbnQgcmVkaXJlY3Rpb24gc2F5cyBzby4KKyAgICAgICAgaWYgKCFyZXF1ZXN0LnVybCgp
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCBzaG91bGRSZWRpcmVjdEFzR0VUKHJlcXVlc3Qs
IGlzQ3Jvc3NPcmlnaW4pKSB7CisgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdF
VCIpOworICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShudWxscHRyKTsKKyAgICAgICAg
ICAgIHJlcXVlc3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgZGlkQ2hhbmdlQ3JlZGVudGlhbCA9IGZhbHNlOworICAgIGNvbnN0IGF1dG8mIHVy
bCA9IHJlcXVlc3QudXJsKCk7CisgICAgbV91c2VyID0gdXJsLnVzZXIoKTsKKyAgICBtX3Bhc3N3
b3JkID0gdXJsLnBhc3MoKTsKKyAgICBtX2xhc3RIVFRQTWV0aG9kID0gcmVxdWVzdC5odHRwTWV0
aG9kKCk7CisgICAgcmVxdWVzdC5yZW1vdmVDcmVkZW50aWFscygpOworCisgICAgaWYgKGlzQ3Jv
c3NPcmlnaW4pIHsKKyAgICAgICAgLy8gVGhlIG5ldHdvcmsgbGF5ZXIgbWlnaHQgY2Fycnkgb3Zl
ciBzb21lIGhlYWRlcnMgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdCB0aGF0CisgICAgICAgIC8v
IHdlIHdhbnQgdG8gc3RyaXAgaGVyZSBiZWNhdXNlIHRoZSByZWRpcmVjdCBpcyBjcm9zcy1vcmln
aW4uCisgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQQXV0aG9yaXphdGlvbigpOworICAgICAgICBy
ZXF1ZXN0LmNsZWFySFRUUE9yaWdpbigpOworICAgIH0gZWxzZSBpZiAobV9zdG9yZWRDcmVkZW50
aWFsc1BvbGljeSA9PSBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlKSB7CisgICAgICAgIC8v
IE9ubHkgY29uc2lkZXIgYXBwbHlpbmcgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgaWYgdGhp
cyBpcyBhY3R1YWxseSBhIHJlZGlyZWN0IGFuZCB0aGUgcmVkaXJlY3QKKyAgICAgICAgLy8gVVJM
IGRpZG4ndCBpbmNsdWRlIGNyZWRlbnRpYWxzIG9mIGl0cyBvd24uCisgICAgICAgIGlmIChtX3Vz
ZXIuaXNFbXB0eSgpICYmIG1fcGFzc3dvcmQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhdXRv
IGNyZWRlbnRpYWwgPSBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRp
YWxTdG9yYWdlKCkuZ2V0KG1fcGFydGl0aW9uLCByZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgICAg
IGlmICghY3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtX2luaXRpYWxD
cmVkZW50aWFsID0gY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICBkaWRDaGFuZ2VDcmVkZW50
aWFsID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8g
cmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKG1fcmVzcG9uc2UpOworICAgIG1fY2xpZW50LT53
aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXVEZNb3ZlKHJlc3BvbnNlKSwgV1RGTW92ZShyZXF1
ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZGlkQ2hhbmdlQ3Jl
ZGVudGlhbF0oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KSB7CisgICAgICAgIGlm
IChuZXdSZXF1ZXN0LmlzTnVsbCgpIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9jdXJsUmVxdWVzdCkKKyAgICAgICAg
ICAgIG1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOworCisgICAgICAgIG1fY3VybFJlcXVlc3QgPSBj
cmVhdGVDdXJsUmVxdWVzdChuZXdSZXF1ZXN0LCBTaG91bGRQcmVwcm9jZXNzOjpZZXMpOworICAg
ICAgICBpZiAoZGlkQ2hhbmdlQ3JlZGVudGlhbCAmJiAhbV9pbml0aWFsQ3JlZGVudGlhbC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhtX2luaXRpYWxD
cmVkZW50aWFsLnVzZXIoKSwgbV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICAg
ICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQoKTsKKworICAgICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0
ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsK
KyAgICAgICAgICAgIHJlc3VtZSgpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQ3VybDo6dHJ5SHR0cEF1dGhlbnRpY2F0aW9uKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCit7CisgICAgaWYgKCFtX3VzZXIuaXNOdWxsKCkgJiYg
IW1fcGFzc3dvcmQuaXNOdWxsKCkpIHsKKyAgICAgICAgYXV0byBwZXJzaXN0ZW5jZSA9IG1fc3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6
OlVzZSA/IFdlYkNvcmU6OkNyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24gOiBXZWJDb3Jl
OjpDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lOworICAgICAgICByZXN0YXJ0V2l0aENyZWRlbnRp
YWwoQ3JlZGVudGlhbChtX3VzZXIsIG1fcGFzc3dvcmQsIHBlcnNpc3RlbmNlKSk7CisgICAgICAg
IG1fdXNlciA9IFN0cmluZygpOworICAgICAgICBtX3Bhc3N3b3JkID0gU3RyaW5nKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9
PSBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlKSB7CisgICAgICAgIGlmICghbV9pbml0aWFs
Q3JlZGVudGlhbC5pc0VtcHR5KCkgfHwgY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBzdG9yZWQgY3JlZGVudGlhbCB3YXNuJ3QgYWNjZXB0ZWQs
IHN0b3AgdXNpbmcgaXQuIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24KKyAgICAgICAgICAgIC8v
IGhlcmUsIHNpbmNlIGEgZGlmZmVyZW50IGNyZWRlbnRpYWwgbWlnaHQgaGF2ZSBhbHJlYWR5IGJl
ZW4gc3RvcmVkIGJ5IGFub3RoZXIKKyAgICAgICAgICAgIC8vIE5ldHdvcmtEYXRhVGFzaywgYnV0
IHRoZSBvYnNlcnZhYmxlIGVmZmVjdCBzaG91bGQgYmUgdmVyeSBtaW5vciwgaWYgYW55LgorICAg
ICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3Rv
cmFnZSgpLnJlbW92ZShtX3BhcnRpdGlvbiwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50
KCkpIHsKKyAgICAgICAgICAgIGF1dG8gY3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0
b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQobV9wYXJ0aXRpb24sIGNoYWxs
ZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7CisgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNF
bXB0eSgpICYmIGNyZWRlbnRpYWwgIT0gbV9pbml0aWFsQ3JlZGVudGlhbCkgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNp
c3RlbmNlTm9uZSk7CisgICAgICAgICAgICAgICAgaWYgKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9u
c2UoKS5pc1VuYXV0aG9yaXplZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRo
ZSBjcmVkZW50aWFsIGJhY2ssIHBvc3NpYmx5IGFkZGluZyBpdCBhcyBhIGRlZmF1bHQgZm9yIHRo
aXMgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KG1fcGFydGl0aW9uLCBjcmVkZW50
aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9u
c2UoKS51cmwoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3RhcnRX
aXRoQ3JlZGVudGlhbChjcmVkZW50aWFsKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNo
YWxsZW5nZShjaGFsbGVuZ2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNoYWxsZW5nZV0oQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlv
biwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkgeworICAgICAgICBpZiAobV9zdGF0ZSA9
PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoZGlzcG9zaXRpb24gPT0gQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6Q2FuY2VsKSB7CisgICAgICAgICAgICBjYW5jZWwoKTsK
KyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihSZXNvdXJjZUVycm9y
OjpodHRwRXJyb3IoQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1QsIG1fcmVzcG9uc2UudXJsKCkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkaXNwb3Np
dGlvbiA9PSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFs
ICYmICFjcmVkZW50aWFsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKG1fc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgPT0gU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSkgeworICAgICAg
ICAgICAgICAgIGlmIChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNp
c3RlbmNlRm9yU2Vzc2lvbiB8fCBjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlh
bFBlcnNpc3RlbmNlUGVybWFuZW50KQorICAgICAgICAgICAgICAgICAgICBtX3Nlc3Npb24tPm5l
dHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KG1fcGFydGl0aW9u
LCBjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5mYWls
dXJlUmVzcG9uc2UoKS51cmwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXN0YXJ0V2l0aENyZWRlbnRpYWwoY3JlZGVudGlhbCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrQ3VybDo6cmVzdGFydFdpdGhDcmVkZW50aWFsKGNvbnN0IENyZWRlbnRp
YWwmIGNyZWRlbnRpYWwpCit7CisgICAgaWYgKG1fY3VybFJlcXVlc3QpCisgICAgICAgIG1fY3Vy
bFJlcXVlc3QtPmNhbmNlbCgpOworCisgICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1
ZXN0KG1fY3VycmVudFJlcXVlc3QsIFNob3VsZFByZXByb2Nlc3M6Ok5vKTsKKyAgICBpZiAoIWNy
ZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhj
cmVkZW50aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICBtX2N1cmxSZXF1
ZXN0LT5zdGFydCgpOworCisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OlN1c3BlbmRlZCkgewor
ICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsKKyAgICAgICAgcmVzdW1lKCk7Cisg
ICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmFwcGVuZENvb2tpZUhlYWRlcihX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgY29uc3QgYXV0byYgc3Rv
cmFnZVNlc3Npb24gPSBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworICAgIGNv
bnN0IGF1dG8mIGNvb2tpZUphciA9IHN0b3JhZ2VTZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKKyAg
ICBhdXRvIGluY2x1ZGVTZWN1cmVDb29raWVzID0gcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJo
dHRwcyIpID8gSW5jbHVkZVNlY3VyZUNvb2tpZXM6OlllcyA6IEluY2x1ZGVTZWN1cmVDb29raWVz
OjpObzsKKyAgICBhdXRvIGNvb2tpZUhlYWRlckZpZWxkID0gY29va2llSmFyLmNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKHN0b3JhZ2VTZXNzaW9uLCByZXF1ZXN0LmZpcnN0UGFydHlGb3JD
b29raWVzKCksIHJlcXVlc3QudXJsKCksIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBpbmNs
dWRlU2VjdXJlQ29va2llcykuZmlyc3Q7CisgICAgaWYgKCFjb29raWVIZWFkZXJGaWVsZC5pc0Vt
cHR5KCkpCisgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpDb29raWUsIGNvb2tpZUhlYWRlckZpZWxkKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tD
dXJsOjpoYW5kbGVDb29raWVIZWFkZXJzKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVzcG9uc2UpCit7
CisgICAgc3RhdGljIGNvbnN0IGF1dG8gc2V0Q29va2llSGVhZGVyID0gInNldC1jb29raWU6ICI7
CisKKyAgICBjb25zdCBhdXRvJiBzdG9yYWdlU2Vzc2lvbiA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0
b3JhZ2VTZXNzaW9uKCk7CisgICAgY29uc3QgYXV0byYgY29va2llSmFyID0gc3RvcmFnZVNlc3Np
b24uY29va2llU3RvcmFnZSgpOworICAgIGZvciAoYXV0byBoZWFkZXIgOiByZXNwb25zZS5oZWFk
ZXJzKSB7CisgICAgICAgIGlmIChoZWFkZXIuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHNl
dENvb2tpZUhlYWRlcikpIHsKKyAgICAgICAgICAgIFN0cmluZyBzZXRDb29raWVTdHJpbmcgPSBo
ZWFkZXIucmlnaHQoaGVhZGVyLmxlbmd0aCgpIC0gc3RybGVuKHNldENvb2tpZUhlYWRlcikpOwor
ICAgICAgICAgICAgY29va2llSmFyLnNldENvb2tpZXNGcm9tSFRUUFJlc3BvbnNlKHN0b3JhZ2VT
ZXNzaW9uLCByZXNwb25zZS51cmwsIHNldENvb2tpZVN0cmluZyk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtEYXRhVGFza0N1cmwuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Ey
Y2RmYjdjZGI4NTM5NjQ1YWYyYmI2NjIyMjliZTdhZWYwNGI0ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmgK
QEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkN1cmxSZXF1ZXN0Q2xpZW50LmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrTG9hZE1ldHJpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVzcG9uc2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ3VybFJl
cXVlc3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tD
dXJsIGZpbmFsIDogcHVibGljIE5ldHdvcmtEYXRhVGFzaywgcHVibGljIFdlYkNvcmU6OkN1cmxS
ZXF1ZXN0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtEYXRhVGFzaz4g
Y3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNs
aWVudCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgV2ViQ29yZTo6
Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgV2ViQ29yZTo6Q29udGVu
dEVuY29kaW5nU25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYsIGJvb2wg
c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFza0N1cmwoc2Vzc2lvbiwgY2xpZW50
LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgc2hvdWxkQ29udGVudFNuaWZmLCBz
aG91bGRDb250ZW50RW5jb2RpbmdTbmlmZiwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCkpOworICAgIH0KKworICAgIH5OZXR3b3JrRGF0YVRhc2tDdXJsKCk7CisKKyAg
ICB2b2lkIHJlZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxOZXR3b3JrRGF0YVRhc2s+OjpyZWYo
KTsgfQorICAgIHZvaWQgZGVyZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8TmV0d29ya0RhdGFU
YXNrPjo6ZGVyZWYoKTsgfQorCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgU2hvdWxkUHJlcHJv
Y2VzcyA6IGJvb2wgeworICAgICAgICBObyA9IGZhbHNlLAorICAgICAgICBZZXMgPSB0cnVlCisg
ICAgfTsKKworICAgIE5ldHdvcmtEYXRhVGFza0N1cmwoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3Jr
RGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5
LCBXZWJDb3JlOjpDb250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKKworICAgIHZvaWQgc3VzcGVuZCgpIG92
ZXJyaWRlOworICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN1bWUoKSBv
dmVycmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlkZTsKKyAgICBO
ZXR3b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWY8
V2ViQ29yZTo6Q3VybFJlcXVlc3Q+IGNyZWF0ZUN1cmxSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIFNob3VsZFByZXByb2Nlc3MpOworICAgIHZvaWQgY3VybERpZFNlbmRE
YXRhKFdlYkNvcmU6OkN1cmxSZXF1ZXN0JiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBs
b25nIGxvbmcpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShXZWJD
b3JlOjpDdXJsUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OkN1cmxSZXNwb25zZSYpIG92ZXJyaWRl
OworICAgIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIoV2ViQ29yZTo6Q3VybFJlcXVlc3QmLCBS
ZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRD
b21wbGV0ZShXZWJDb3JlOjpDdXJsUmVxdWVzdCYpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERp
ZEZhaWxXaXRoRXJyb3IoV2ViQ29yZTo6Q3VybFJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJikgb3ZlcnJpZGU7CisKKyAgICBib29sIHNob3VsZFJlZGlyZWN0QXNHRVQoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBjcm9zc09yaWdpbik7CisgICAgdm9p
ZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbigpOworCisgICAgdm9pZCB0cnlIdHRwQXV0aGVu
dGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2
b2lkIHJlc3RhcnRXaXRoQ3JlZGVudGlhbChjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik7CisK
KyAgICB2b2lkIGFwcGVuZENvb2tpZUhlYWRlcihXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsK
KyAgICB2b2lkIGhhbmRsZUNvb2tpZUhlYWRlcnMoY29uc3QgV2ViQ29yZTo6Q3VybFJlc3BvbnNl
Jik7CisKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OworCisgICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkN1cmxSZXF1ZXN0PiBtX2N1cmxSZXF1ZXN0OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UgbV9yZXNwb25zZTsKKyAgICB1bnNpZ25lZCBtX3JlZGlyZWN0Q291bnQgeyAwIH07Cisg
ICAgdW5zaWduZWQgbV9hdXRoRmFpbHVyZUNvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCA4NDFkNGE3MDFkNTg4YmYyNzc3
MTYzZjVjN2FmMjQ5NjgyNzYxM2YwLi4zZTBiYmViNzMxMDk2MzE4YzNjZjdmOWU5MGI2N2QyZGY1
OWI5MDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTksNiArOSwxNiBAQCBmaWxlKE1B
S0VfRElSRUNUT1JZICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVF9ESVJ9KQogYWRkX2RlZmluaXRp
b25zKC1EQlVJTERJTkdfV0VCS0lUKQogCiBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUworICAg
IE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAKKwor
ICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc0N1cmwuY3BwCisgICAg
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCisgICAgTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsQ3VybC5jcHAKKworICAgIE5ldHdv
cmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHAKKyAgICBOZXR3b3JrUHJvY2Vz
cy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL1Jl
bW90ZU5ldHdvcmtpbmdDb250ZXh0Q3VybC5jcHAKKwogICAgIE5ldHdvcmtQcm9jZXNzL3dpbi9O
ZXR3b3JrUHJvY2Vzc01haW5XaW4uY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mvd2luL1N5c3RlbVBy
b3h5V2luLmNwcAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337687</attachid>
            <date>2018-04-11 02:13:06 -0700</date>
            <delta_ts>2018-04-11 10:50:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184488-20180411181304.patch</filename>
            <type>text/plain</type>
            <size>24879</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwNTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ3MTZjOGMzMzE4ZjczNDFm
ZmFhMWUyYTEwYzkxZGEyNDEwNmY4MjYuLmU3NzZjMDVhYTYwNjgwMjc1NGUyNjc1YWU4YTIwYzM3
NmRkNjg0NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTgtMDQtMTEgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW2N1cmxdW1dlYktp
dF0gSW1wbGVtZW50IE5ldHdvcmtEYXRhVGFza0N1cmwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDQ4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpjcmVhdGUpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpOZXR3b3JrRGF0YVRhc2tDdXJs
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6fk5ldHdvcmtEYXRhVGFz
a0N1cmwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpyZXN1bWUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpzdXNwZW5kKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrQ3VybDo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFza0N1cmw6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrQ3VybDo6Y3JlYXRlQ3VybFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkU2VuZERhdGEpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6Y3VybERpZFJlY2VpdmVCdWZmZXIpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkQ29tcGxldGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkRmFpbFdpdGhFcnJvcik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1cmw6OnNob3VsZFJlZGlyZWN0QXNH
RVQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDdXJsOjp3aWxsUGVyZm9ybUhU
VFBSZWRpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1cmw6OnRy
eUh0dHBBdXRoZW50aWNhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1
cmw6OnJlc3RhcnRXaXRoQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFza0N1cmw6OmFwcGVuZENvb2tpZUhlYWRlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtE
YXRhVGFza0N1cmw6OmhhbmRsZUNvb2tpZUhlYWRlcnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5oOiBBZGRlZC4KKyAgICAgICAgKiBQbGF0Zm9y
bVdpbi5jbWFrZToKKwogMjAxOC0wNC0xMCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIHRlc3QgZml4IGFmdGVyIHIyMzA0NjgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcAppbmRleCA1
NGQwMzc0NTgyMDZkNTYzMzhlZGQ0NDgzNzQxZDVmODA4MTgyZGIzLi41NWRjYjA1MDk3YjgyNjM2
ZTJiZjdmYWI4NmNlMmJiOTI2MzQ4NmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC00MCw2ICs0MCw5IEBACiAjaWYgVVNFKFNP
VVApCiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrU291cC5oIgogI2VuZGlmCisjaWYgVVNFKENV
UkwpCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrQ3VybC5oIgorI2VuZGlmCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC01Niw2ICs1OSw5IEBAIFJlZjxOZXR3b3JrRGF0YVRhc2s+
IE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3Jr
RGF0CiAjaWYgVVNFKFNPVVApCiAgICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0
ZShzZXNzaW9uLCBjbGllbnQsIHBhcmFtZXRlcnMucmVxdWVzdCwgcGFyYW1ldGVycy5zdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgcGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3ksIHBhcmFt
ZXRlcnMuY29udGVudEVuY29kaW5nU25pZmZpbmdQb2xpY3ksIHBhcmFtZXRlcnMuc2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CiAjZW5kaWYKKyNpZiBVU0UoQ1VSTCkK
KyAgICByZXR1cm4gTmV0d29ya0RhdGFUYXNrQ3VybDo6Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwg
cGFyYW1ldGVycy5yZXF1ZXN0LCBwYXJhbWV0ZXJzLnN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBw
YXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSwgcGFyYW1ldGVycy5jb250ZW50RW5jb2Rp
bmdTbmlmZmluZ1BvbGljeSwgcGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0KTsKKyNlbmRpZgogfQogCiBOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRh
VGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGll
bnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGJvb2wgc2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zYTdkZGNlMDhlZTJjMmRhNDlkZjYwNzliMTI1Y2ZiN2MzMmFmYmNlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtEYXRhVGFz
a0N1cmwuY3BwCkBAIC0wLDAgKzEsNDAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tDdXJsLmgiCisKKyNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbkN1cmwuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9Db29raWVzU3RyYXRlZ3kuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0N1cmxSZXF1ZXN0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVy
cm9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworTmV0d29ya0RhdGFUYXNrQ3VybDo6TmV0d29ya0RhdGFUYXNrQ3VybChOZXR3b3JrU2Vzc2lv
biYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250
ZW50U25pZmYsIENvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5LCBib29sIHNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCisgICAgOiBOZXR3b3JrRGF0YVRhc2soc2Vz
c2lvbiwgY2xpZW50LCByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBzdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKK3sKKyAgICBp
ZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gcmVxdWVzdCA9IHJlcXVlc3RXaXRoQ3JlZGVudGlhbHM7CisgICAgaWYgKHJl
cXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7CisgICAgICAgIGlmIChtX3N0
b3JlZENyZWRlbnRpYWxzUG9saWN5ID09IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UpIHsK
KyAgICAgICAgICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgICAgIG1fdXNl
ciA9IHVybC51c2VyKCk7CisgICAgICAgICAgICBtX3Bhc3N3b3JkID0gdXJsLnBhc3MoKTsKKyAg
ICAgICAgICAgIHJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKworICAgICAgICAgICAgaWYg
KG1fdXNlci5pc0VtcHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQobV9wYXJ0aXRpb24sIHJlcXVlc3QudXJsKCkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2Vzc2lvbi0+bmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQobV9wYXJ0aXRpb24sIENyZWRlbnRp
YWwobV91c2VyLCBtX3Bhc3N3b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgcmVxdWVz
dC51cmwoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2N1cmxSZXF1ZXN0ID0gY3JlYXRl
Q3VybFJlcXVlc3QocmVxdWVzdCwgU2hvdWxkUHJlcHJvY2Vzczo6WWVzKTsKKyAgICBpZiAoIW1f
aW5pdGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRV
c2VyUGFzcyhtX2luaXRpYWxDcmVkZW50aWFsLnVzZXIoKSwgbV9pbml0aWFsQ3JlZGVudGlhbC5w
YXNzd29yZCgpKTsKKyAgICBtX2N1cmxSZXF1ZXN0LT5zdGFydCgpOworfQorCitOZXR3b3JrRGF0
YVRhc2tDdXJsOjp+TmV0d29ya0RhdGFUYXNrQ3VybCgpCit7CisgICAgaWYgKG1fY3VybFJlcXVl
c3QpCisgICAgICAgIG1fY3VybFJlcXVlc3QtPmludmFsaWRhdGVDbGllbnQoKTsKK30KKwordm9p
ZCBOZXR3b3JrRGF0YVRhc2tDdXJsOjpyZXN1bWUoKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9
IFN0YXRlOjpSdW5uaW5nKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8
IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
dGF0ZSA9IFN0YXRlOjpSdW5uaW5nOworCisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUg
IT0gTm9GYWlsdXJlKSB7CisgICAgICAgIEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2N1cmxSZXF1ZXN0KQorICAg
ICAgICBtX2N1cmxSZXF1ZXN0LT5yZXN1bWUoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tD
dXJsOjpzdXNwZW5kKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6U3VzcGVuZGVk
KTsKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3Rh
dGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpT
dXNwZW5kZWQ7CisKKyAgICBpZiAobV9jdXJsUmVxdWVzdCkKKyAgICAgICAgbV9jdXJsUmVxdWVz
dC0+c3VzcGVuZCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmNhbmNlbCgpCit7
CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRl
OjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2Fu
Y2VsaW5nOworCisgICAgaWYgKG1fY3VybFJlcXVlc3QpCisgICAgICAgIG1fY3VybFJlcXVlc3Qt
PmNhbmNlbCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmludmFsaWRhdGVBbmRD
YW5jZWwoKQoreworICAgIGNhbmNlbCgpOworCisgICAgaWYgKG1fY3VybFJlcXVlc3QpCisgICAg
ICAgIG1fY3VybFJlcXVlc3QtPmludmFsaWRhdGVDbGllbnQoKTsKK30KKworTmV0d29ya0RhdGFU
YXNrOjpTdGF0ZSBOZXR3b3JrRGF0YVRhc2tDdXJsOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc3RhdGU7Cit9CisKK1JlZjxDdXJsUmVxdWVzdD4gTmV0d29ya0RhdGFUYXNrQ3VybDo6
Y3JlYXRlQ3VybFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTaG91bGRQ
cmVwcm9jZXNzIHNob3VsZFByZXByb2Nlc3MpCit7CisgICAgbV9jdXJyZW50UmVxdWVzdCA9IHJl
cXVlc3Q7CisKKyAgICBpZiAoc2hvdWxkUHJlcHJvY2VzcyA9PSBTaG91bGRQcmVwcm9jZXNzOjpZ
ZXMpCisgICAgICAgIGFwcGVuZENvb2tpZUhlYWRlcihtX2N1cnJlbnRSZXF1ZXN0KTsKKworICAg
IC8vIENyZWF0ZXMgYSBDdXJsUmVxdWVzdCBpbiBzdXNwZW5kZWQgc3RhdGUuCisgICAgLy8gVGhl
biwgTmV0d29ya0RhdGFUYXNrQ3VybDo6cmVzdW1lKCkgd2lsbCBiZSBjYWxsZWQgYW5kIGNvbW11
bmljYXRpb24gcmVzdW1lcy4KKyAgICByZXR1cm4gQ3VybFJlcXVlc3Q6OmNyZWF0ZShtX2N1cnJl
bnRSZXF1ZXN0LCAqdGhpcywgQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQ6Olllcyk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrQ3VybDo6Y3VybERpZFNlbmREYXRhKEN1cmxSZXF1ZXN0Jiwg
dW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc0V4cGVjdGVkVG9TZW5kKQoreworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpOworICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgc3RhdGUo
KSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKHRvdGFsQnl0ZXNTZW50LCB0b3RhbEJ5dGVzRXhwZWN0
ZWRUb1NlbmQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmN1cmxEaWRSZWNlaXZl
UmVzcG9uc2UoQ3VybFJlcXVlc3QmLCBjb25zdCBDdXJsUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9u
c2UpCit7CisgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7CisgICAgaWYg
KHN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBzdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0
ZWQgfHwgIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jlc3BvbnNlID0gUmVz
b3VyY2VSZXNwb25zZShyZWNlaXZlZFJlc3BvbnNlKTsKKworICAgIGhhbmRsZUNvb2tpZUhlYWRl
cnMocmVjZWl2ZWRSZXNwb25zZSk7CisKKyAgICBpZiAobV9yZXNwb25zZS5zaG91bGRSZWRpcmVj
dCgpKSB7CisgICAgICAgIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV9yZXNwb25zZS5pc1VuYXV0aG9yaXplZCgpKSB7Cisg
ICAgICAgIHRyeUh0dHBBdXRoZW50aWNhdGlvbihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShyZWNl
aXZlZFJlc3BvbnNlLCBtX2F1dGhGYWlsdXJlQ291bnQsIG1fcmVzcG9uc2UpKTsKKyAgICAgICAg
bV9hdXRoRmFpbHVyZUNvdW50Kys7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaWRS
ZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbikgewor
ICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3Rh
dGU6OkNvbXBsZXRlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzd2l0Y2ggKHBv
bGljeUFjdGlvbikgeworICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6VXNlOgorICAgICAgICAg
ICAgaWYgKG1fY3VybFJlcXVlc3QpCisgICAgICAgICAgICAgICAgbV9jdXJsUmVxdWVzdC0+Y29t
cGxldGVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFBvbGljeUFjdGlvbjo6SWdub3JlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUG9saWN5QWN0aW9uOjpEb3dubG9hZDoKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFza0N1cmw6OmN1cmxEaWRSZWNlaXZlQnVmZmVyKEN1cmxSZXF1ZXN0JiwgUmVmPFNo
YXJlZEJ1ZmZlcj4mJiBidWZmZXIpCit7CisgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyk7CisgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBzdGF0ZSgp
ID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2NsaWVudCAmJiAhaXNEb3dubG9hZCgpKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKFdURk1vdmUoYnVm
ZmVyKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ3VybDo6Y3VybERpZENvbXBsZXRlKEN1
cmxSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgc3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICghbV9jbGllbnQgJiYgIWlzRG93
bmxvYWQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVzcG9uc2Uuc2V0RGVwcmVjYXRl
ZE5ldHdvcmtMb2FkTWV0cmljcyhyZXF1ZXN0LmdldE5ldHdvcmtMb2FkTWV0cmljcygpKTsKKwor
ICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0sIG1fcmVzcG9uc2UuZGVwcmVj
YXRlZE5ldHdvcmtMb2FkTWV0cmljcygpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tDdXJs
OjpjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlRXJyb3Im
IHJlc291cmNlRXJyb3IpCit7CisgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8
fCBzdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2NsaWVudCAmJiAhaXNEb3dubG9h
ZCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVy
cm9yKHJlc291cmNlRXJyb3IpOworfQorCitib29sIE5ldHdvcmtEYXRhVGFza0N1cmw6OnNob3Vs
ZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGNyb3Nz
T3JpZ2luKQoreworICAgIGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCByZXF1
ZXN0Lmh0dHBNZXRob2QoKSA9PSAiSEVBRCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgaWYgKG1fcmVzcG9uc2UuaXNTZWVPdGhlcigpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmICgobV9yZXNwb25zZS5pc01vdmVkUGVybWFuZW50bHkoKSB8
fCBtX3Jlc3BvbnNlLmlzRm91bmQoKSkgJiYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NU
IikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGNyb3NzT3JpZ2luICYmIChyZXF1
ZXN0Lmh0dHBNZXRob2QoKSA9PSAiREVMRVRFIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OndpbGxQZXJm
b3JtSFRUUFJlZGlyZWN0aW9uKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heFJlZGlyZWN0
cyA9IDIwOworCisgICAgaWYgKG1fcmVkaXJlY3RDb3VudCsrID4gbWF4UmVkaXJlY3RzKSB7Cisg
ICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihSZXNvdXJjZUVycm9yOjpodHRw
RXJyb3IoQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTLCBtX3Jlc3BvbnNlLnVybCgpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IG1fY3Vy
cmVudFJlcXVlc3Q7CisgICAgVVJMIHJlZGlyZWN0ZWRVUkwgPSBVUkwobV9yZXNwb25zZS51cmwo
KSwgbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkxvY2F0aW9uKSk7
CisgICAgaWYgKCFyZWRpcmVjdGVkVVJMLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpICYmIHJlcXVl
c3QudXJsKCkuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpCisgICAgICAgIHJlZGlyZWN0ZWRVUkwu
c2V0RnJhZ21lbnRJZGVudGlmaWVyKHJlcXVlc3QudXJsKCkuZnJhZ21lbnRJZGVudGlmaWVyKCkp
OworICAgIHJlcXVlc3Quc2V0VVJMKHJlZGlyZWN0ZWRVUkwpOworCisgICAgLy8gU2hvdWxkIG5v
dCBzZXQgUmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1cmUgcmVzb3VyY2UgdG8g
bm9uLXNlY3VyZSBvbmUuCisgICAgaWYgKG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCAmJiAhcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYmIHByb3Rv
Y29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikpCisgICAgICAgIHJlcXVlc3Qu
Y2xlYXJIVFRQUmVmZXJyZXIoKTsKKworICAgIGJvb2wgaXNDcm9zc09yaWdpbiA9ICFwcm90b2Nv
bEhvc3RBbmRQb3J0QXJlRXF1YWwobV9jdXJyZW50UmVxdWVzdC51cmwoKSwgcmVxdWVzdC51cmwo
KSk7CisgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXF1ZXN0Lmh0dHBN
ZXRob2QoKSwgImdldCIpKSB7CisgICAgICAgIC8vIENoYW5nZSByZXF1ZXN0IG1ldGhvZCB0byBH
RVQgaWYgY2hhbmdlIHdhcyBtYWRlIGR1cmluZyBhIHByZXZpb3VzIHJlZGlyZWN0aW9uIG9yIGlm
IGN1cnJlbnQgcmVkaXJlY3Rpb24gc2F5cyBzby4KKyAgICAgICAgaWYgKCFyZXF1ZXN0LnVybCgp
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCBzaG91bGRSZWRpcmVjdEFzR0VUKHJlcXVlc3Qs
IGlzQ3Jvc3NPcmlnaW4pKSB7CisgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdF
VCIpOworICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShudWxscHRyKTsKKyAgICAgICAg
ICAgIHJlcXVlc3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgZGlkQ2hhbmdlQ3JlZGVudGlhbCA9IGZhbHNlOworICAgIGNvbnN0IGF1dG8mIHVy
bCA9IHJlcXVlc3QudXJsKCk7CisgICAgbV91c2VyID0gdXJsLnVzZXIoKTsKKyAgICBtX3Bhc3N3
b3JkID0gdXJsLnBhc3MoKTsKKyAgICBtX2xhc3RIVFRQTWV0aG9kID0gcmVxdWVzdC5odHRwTWV0
aG9kKCk7CisgICAgcmVxdWVzdC5yZW1vdmVDcmVkZW50aWFscygpOworCisgICAgaWYgKGlzQ3Jv
c3NPcmlnaW4pIHsKKyAgICAgICAgLy8gVGhlIG5ldHdvcmsgbGF5ZXIgbWlnaHQgY2Fycnkgb3Zl
ciBzb21lIGhlYWRlcnMgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdCB0aGF0CisgICAgICAgIC8v
IHdlIHdhbnQgdG8gc3RyaXAgaGVyZSBiZWNhdXNlIHRoZSByZWRpcmVjdCBpcyBjcm9zcy1vcmln
aW4uCisgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQQXV0aG9yaXphdGlvbigpOworICAgICAgICBy
ZXF1ZXN0LmNsZWFySFRUUE9yaWdpbigpOworICAgIH0gZWxzZSBpZiAobV9zdG9yZWRDcmVkZW50
aWFsc1BvbGljeSA9PSBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlKSB7CisgICAgICAgIC8v
IE9ubHkgY29uc2lkZXIgYXBwbHlpbmcgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgaWYgdGhp
cyBpcyBhY3R1YWxseSBhIHJlZGlyZWN0IGFuZCB0aGUgcmVkaXJlY3QKKyAgICAgICAgLy8gVVJM
IGRpZG4ndCBpbmNsdWRlIGNyZWRlbnRpYWxzIG9mIGl0cyBvd24uCisgICAgICAgIGlmIChtX3Vz
ZXIuaXNFbXB0eSgpICYmIG1fcGFzc3dvcmQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhdXRv
IGNyZWRlbnRpYWwgPSBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRp
YWxTdG9yYWdlKCkuZ2V0KG1fcGFydGl0aW9uLCByZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgICAg
IGlmICghY3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtX2luaXRpYWxD
cmVkZW50aWFsID0gY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICBkaWRDaGFuZ2VDcmVkZW50
aWFsID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8g
cmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKG1fcmVzcG9uc2UpOworICAgIG1fY2xpZW50LT53
aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXVEZNb3ZlKHJlc3BvbnNlKSwgV1RGTW92ZShyZXF1
ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZGlkQ2hhbmdlQ3Jl
ZGVudGlhbF0oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KSB7CisgICAgICAgIGlm
IChuZXdSZXF1ZXN0LmlzTnVsbCgpIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9jdXJsUmVxdWVzdCkKKyAgICAgICAg
ICAgIG1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOworCisgICAgICAgIG1fY3VybFJlcXVlc3QgPSBj
cmVhdGVDdXJsUmVxdWVzdChuZXdSZXF1ZXN0LCBTaG91bGRQcmVwcm9jZXNzOjpZZXMpOworICAg
ICAgICBpZiAoZGlkQ2hhbmdlQ3JlZGVudGlhbCAmJiAhbV9pbml0aWFsQ3JlZGVudGlhbC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhtX2luaXRpYWxD
cmVkZW50aWFsLnVzZXIoKSwgbV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICAg
ICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQoKTsKKworICAgICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0
ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsK
KyAgICAgICAgICAgIHJlc3VtZSgpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQ3VybDo6dHJ5SHR0cEF1dGhlbnRpY2F0aW9uKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCit7CisgICAgaWYgKCFtX3VzZXIuaXNOdWxsKCkgJiYg
IW1fcGFzc3dvcmQuaXNOdWxsKCkpIHsKKyAgICAgICAgYXV0byBwZXJzaXN0ZW5jZSA9IG1fc3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6
OlVzZSA/IFdlYkNvcmU6OkNyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24gOiBXZWJDb3Jl
OjpDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lOworICAgICAgICByZXN0YXJ0V2l0aENyZWRlbnRp
YWwoQ3JlZGVudGlhbChtX3VzZXIsIG1fcGFzc3dvcmQsIHBlcnNpc3RlbmNlKSk7CisgICAgICAg
IG1fdXNlciA9IFN0cmluZygpOworICAgICAgICBtX3Bhc3N3b3JkID0gU3RyaW5nKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9
PSBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlKSB7CisgICAgICAgIGlmICghbV9pbml0aWFs
Q3JlZGVudGlhbC5pc0VtcHR5KCkgfHwgY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBzdG9yZWQgY3JlZGVudGlhbCB3YXNuJ3QgYWNjZXB0ZWQs
IHN0b3AgdXNpbmcgaXQuIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24KKyAgICAgICAgICAgIC8v
IGhlcmUsIHNpbmNlIGEgZGlmZmVyZW50IGNyZWRlbnRpYWwgbWlnaHQgaGF2ZSBhbHJlYWR5IGJl
ZW4gc3RvcmVkIGJ5IGFub3RoZXIKKyAgICAgICAgICAgIC8vIE5ldHdvcmtEYXRhVGFzaywgYnV0
IHRoZSBvYnNlcnZhYmxlIGVmZmVjdCBzaG91bGQgYmUgdmVyeSBtaW5vciwgaWYgYW55LgorICAg
ICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3Rv
cmFnZSgpLnJlbW92ZShtX3BhcnRpdGlvbiwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50
KCkpIHsKKyAgICAgICAgICAgIGF1dG8gY3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0
b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQobV9wYXJ0aXRpb24sIGNoYWxs
ZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7CisgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNF
bXB0eSgpICYmIGNyZWRlbnRpYWwgIT0gbV9pbml0aWFsQ3JlZGVudGlhbCkgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNp
c3RlbmNlTm9uZSk7CisgICAgICAgICAgICAgICAgaWYgKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9u
c2UoKS5pc1VuYXV0aG9yaXplZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRo
ZSBjcmVkZW50aWFsIGJhY2ssIHBvc3NpYmx5IGFkZGluZyBpdCBhcyBhIGRlZmF1bHQgZm9yIHRo
aXMgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KG1fcGFydGl0aW9uLCBjcmVkZW50
aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9u
c2UoKS51cmwoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3RhcnRX
aXRoQ3JlZGVudGlhbChjcmVkZW50aWFsKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNo
YWxsZW5nZShjaGFsbGVuZ2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNoYWxsZW5nZV0oQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlv
biwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkgeworICAgICAgICBpZiAobV9zdGF0ZSA9
PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoZGlzcG9zaXRpb24gPT0gQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6Q2FuY2VsKSB7CisgICAgICAgICAgICBjYW5jZWwoKTsK
KyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihSZXNvdXJjZUVycm9y
OjpodHRwRXJyb3IoQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1QsIG1fcmVzcG9uc2UudXJsKCkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkaXNwb3Np
dGlvbiA9PSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFs
ICYmICFjcmVkZW50aWFsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKG1fc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgPT0gU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSkgeworICAgICAg
ICAgICAgICAgIGlmIChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNp
c3RlbmNlRm9yU2Vzc2lvbiB8fCBjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlh
bFBlcnNpc3RlbmNlUGVybWFuZW50KQorICAgICAgICAgICAgICAgICAgICBtX3Nlc3Npb24tPm5l
dHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KG1fcGFydGl0aW9u
LCBjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5mYWls
dXJlUmVzcG9uc2UoKS51cmwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXN0YXJ0V2l0aENyZWRlbnRpYWwoY3JlZGVudGlhbCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrQ3VybDo6cmVzdGFydFdpdGhDcmVkZW50aWFsKGNvbnN0IENyZWRlbnRp
YWwmIGNyZWRlbnRpYWwpCit7CisgICAgaWYgKG1fY3VybFJlcXVlc3QpCisgICAgICAgIG1fY3Vy
bFJlcXVlc3QtPmNhbmNlbCgpOworCisgICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1
ZXN0KG1fY3VycmVudFJlcXVlc3QsIFNob3VsZFByZXByb2Nlc3M6Ok5vKTsKKyAgICBpZiAoIWNy
ZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhj
cmVkZW50aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICBtX2N1cmxSZXF1
ZXN0LT5zdGFydCgpOworCisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OlN1c3BlbmRlZCkgewor
ICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsKKyAgICAgICAgcmVzdW1lKCk7Cisg
ICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmFwcGVuZENvb2tpZUhlYWRlcihX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgY29uc3QgYXV0byYgc3Rv
cmFnZVNlc3Npb24gPSBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworICAgIGNv
bnN0IGF1dG8mIGNvb2tpZUphciA9IHN0b3JhZ2VTZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKKyAg
ICBhdXRvIGluY2x1ZGVTZWN1cmVDb29raWVzID0gcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJo
dHRwcyIpID8gSW5jbHVkZVNlY3VyZUNvb2tpZXM6OlllcyA6IEluY2x1ZGVTZWN1cmVDb29raWVz
OjpObzsKKyAgICBhdXRvIGNvb2tpZUhlYWRlckZpZWxkID0gY29va2llSmFyLmNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKHN0b3JhZ2VTZXNzaW9uLCByZXF1ZXN0LmZpcnN0UGFydHlGb3JD
b29raWVzKCksIHJlcXVlc3QudXJsKCksIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBpbmNs
dWRlU2VjdXJlQ29va2llcykuZmlyc3Q7CisgICAgaWYgKCFjb29raWVIZWFkZXJGaWVsZC5pc0Vt
cHR5KCkpCisgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpDb29raWUsIGNvb2tpZUhlYWRlckZpZWxkKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tD
dXJsOjpoYW5kbGVDb29raWVIZWFkZXJzKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVzcG9uc2UpCit7
CisgICAgc3RhdGljIGNvbnN0IGF1dG8gc2V0Q29va2llSGVhZGVyID0gInNldC1jb29raWU6ICI7
CisKKyAgICBjb25zdCBhdXRvJiBzdG9yYWdlU2Vzc2lvbiA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0
b3JhZ2VTZXNzaW9uKCk7CisgICAgY29uc3QgYXV0byYgY29va2llSmFyID0gc3RvcmFnZVNlc3Np
b24uY29va2llU3RvcmFnZSgpOworICAgIGZvciAoYXV0byBoZWFkZXIgOiByZXNwb25zZS5oZWFk
ZXJzKSB7CisgICAgICAgIGlmIChoZWFkZXIuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHNl
dENvb2tpZUhlYWRlcikpIHsKKyAgICAgICAgICAgIFN0cmluZyBzZXRDb29raWVTdHJpbmcgPSBo
ZWFkZXIucmlnaHQoaGVhZGVyLmxlbmd0aCgpIC0gc3RybGVuKHNldENvb2tpZUhlYWRlcikpOwor
ICAgICAgICAgICAgY29va2llSmFyLnNldENvb2tpZXNGcm9tSFRUUFJlc3BvbnNlKHN0b3JhZ2VT
ZXNzaW9uLCByZXNwb25zZS51cmwsIHNldENvb2tpZVN0cmluZyk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtEYXRhVGFza0N1cmwuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Ey
Y2RmYjdjZGI4NTM5NjQ1YWYyYmI2NjIyMjliZTdhZWYwNGI0ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmgK
QEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkN1cmxSZXF1ZXN0Q2xpZW50LmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrTG9hZE1ldHJpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVzcG9uc2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ3VybFJl
cXVlc3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tD
dXJsIGZpbmFsIDogcHVibGljIE5ldHdvcmtEYXRhVGFzaywgcHVibGljIFdlYkNvcmU6OkN1cmxS
ZXF1ZXN0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtEYXRhVGFzaz4g
Y3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNs
aWVudCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgV2ViQ29yZTo6
Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgV2ViQ29yZTo6Q29udGVu
dEVuY29kaW5nU25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYsIGJvb2wg
c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFza0N1cmwoc2Vzc2lvbiwgY2xpZW50
LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgc2hvdWxkQ29udGVudFNuaWZmLCBz
aG91bGRDb250ZW50RW5jb2RpbmdTbmlmZiwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCkpOworICAgIH0KKworICAgIH5OZXR3b3JrRGF0YVRhc2tDdXJsKCk7CisKKyAg
ICB2b2lkIHJlZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxOZXR3b3JrRGF0YVRhc2s+OjpyZWYo
KTsgfQorICAgIHZvaWQgZGVyZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8TmV0d29ya0RhdGFU
YXNrPjo6ZGVyZWYoKTsgfQorCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgU2hvdWxkUHJlcHJv
Y2VzcyA6IGJvb2wgeworICAgICAgICBObyA9IGZhbHNlLAorICAgICAgICBZZXMgPSB0cnVlCisg
ICAgfTsKKworICAgIE5ldHdvcmtEYXRhVGFza0N1cmwoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3Jr
RGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5
LCBXZWJDb3JlOjpDb250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKKworICAgIHZvaWQgc3VzcGVuZCgpIG92
ZXJyaWRlOworICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN1bWUoKSBv
dmVycmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlkZTsKKyAgICBO
ZXR3b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWY8
V2ViQ29yZTo6Q3VybFJlcXVlc3Q+IGNyZWF0ZUN1cmxSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIFNob3VsZFByZXByb2Nlc3MpOworICAgIHZvaWQgY3VybERpZFNlbmRE
YXRhKFdlYkNvcmU6OkN1cmxSZXF1ZXN0JiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBs
b25nIGxvbmcpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShXZWJD
b3JlOjpDdXJsUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OkN1cmxSZXNwb25zZSYpIG92ZXJyaWRl
OworICAgIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIoV2ViQ29yZTo6Q3VybFJlcXVlc3QmLCBS
ZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRD
b21wbGV0ZShXZWJDb3JlOjpDdXJsUmVxdWVzdCYpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERp
ZEZhaWxXaXRoRXJyb3IoV2ViQ29yZTo6Q3VybFJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJikgb3ZlcnJpZGU7CisKKyAgICBib29sIHNob3VsZFJlZGlyZWN0QXNHRVQoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBjcm9zc09yaWdpbik7CisgICAgdm9p
ZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbigpOworCisgICAgdm9pZCB0cnlIdHRwQXV0aGVu
dGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2
b2lkIHJlc3RhcnRXaXRoQ3JlZGVudGlhbChjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik7CisK
KyAgICB2b2lkIGFwcGVuZENvb2tpZUhlYWRlcihXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsK
KyAgICB2b2lkIGhhbmRsZUNvb2tpZUhlYWRlcnMoY29uc3QgV2ViQ29yZTo6Q3VybFJlc3BvbnNl
Jik7CisKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OworCisgICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkN1cmxSZXF1ZXN0PiBtX2N1cmxSZXF1ZXN0OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UgbV9yZXNwb25zZTsKKyAgICB1bnNpZ25lZCBtX3JlZGlyZWN0Q291bnQgeyAwIH07Cisg
ICAgdW5zaWduZWQgbV9hdXRoRmFpbHVyZUNvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCA4NDFkNGE3MDFkNTg4YmYyNzc3
MTYzZjVjN2FmMjQ5NjgyNzYxM2YwLi4zNmQ5ZjM0Y2NlNmZjNzdlNmM2YzA4NDg1YjE3NjUwNDgw
ZGJmY2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTExOSw2ICsxMTksNyBAQCBpZiAo
JHtXVEZfUExBVEZPUk1fV0lOX0NBSVJPfSkKICAgICAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUlPQ2hhbm5lbEN1cmwuY3BwCiAKKyAgICAgICAgTmV0d29ya1Byb2Nlc3MvY3Vy
bC9OZXR3b3JrRGF0YVRhc2tDdXJsLmNwcAogICAgICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAKICAgICAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9SZW1vdGVO
ZXR3b3JraW5nQ29udGV4dEN1cmwuY3BwCiAK
</data>
<flag name="review"
          id="356058"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>