<?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>235636</bug_id>
          
          <creation_ts>2022-01-26 03:07:17 -0800</creation_ts>
          <short_desc>[GPU Process] Remove the resource use counters from the remote resource cache</short_desc>
          <delta_ts>2022-04-13 21:32:05 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=228216</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=238558</see_also>
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1834036</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-01-26 03:07:17 -0800</bug_when>
    <thetext>The display list items and the resource caching messages are both communicated from the WebProcess and the GPUProcess through the stream connection. The resources will be sent to the GPUProcess, consumed by the display items and then released in the right order. So there is no need anymore for the resource use counters. They were added in bug 228216 to synchronize properly the use and the release of the resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834037</commentid>
    <comment_count>1</comment_count>
      <attachid>450010</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-01-26 03:14:41 -0800</bug_when>
    <thetext>Created attachment 450010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834152</commentid>
    <comment_count>2</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-01-26 10:16:56 -0800</bug_when>
    <thetext>The reason for filing this bug is I found the following crash when running the layout tests with &quot;--use-gpu-process&quot;. So instead of trying to investigate this crash, I think it is better to remove this unnecessary code.

No crash log found for GPUProcess:51290.

stdout:

stderr:
ASSERTION FAILED: iterator != m_resourceUseCounters.end()
/Volumes/Data/WebKit/OpenSource/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp(165) : void WebKit::RemoteResourceCache::recordResourceUse(WebKit::QualifiedRenderingResourceIdentifier)
1   0x13b13ef59 WTFCrash
2   0x1277b8d1b WTFCrashWithInfo(int, char const*, char const*, int)
3   0x1284fa36e WebKit::RemoteResourceCache::recordResourceUse(WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt; &gt;)
4   0x1284fbb86 WebKit::RemoteDisplayListRecorder::drawImageBufferWithQualifiedIdentifier(WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt; &gt;, WebCore::FloatRect const&amp;, WebCore::FloatRect const&amp;, WebCore::ImagePaintingOptions const&amp;)
5   0x1284fba3a WebKit::RemoteDisplayListRecorder::drawImageBuffer(WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect const&amp;, WebCore::FloatRect const&amp;, WebCore::ImagePaintingOptions const&amp;)
6   0x128273d75 void IPC::callMemberFunctionImpl&lt;WebKit::RemoteDisplayListRecorder, void (WebKit::RemoteDisplayListRecorder::*)(WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect const&amp;, WebCore::FloatRect const&amp;, WebCore::ImagePaintingOptions const&amp;), std::__1::tuple&lt;WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect, WebCore::FloatRect, WebCore::ImagePaintingOptions&gt;, 0ul, 1ul, 2ul, 3ul&gt;(WebKit::RemoteDisplayListRecorder*, void (WebKit::RemoteDisplayListRecorder::*)(WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect const&amp;, WebCore::FloatRect const&amp;, WebCore::ImagePaintingOptions const&amp;), std::__1::tuple&lt;WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect, WebCore::FloatRect, WebCore::ImagePaintingOptions&gt;&amp;&amp;, std::__1::integer_sequence&lt;unsigned long, 0ul, 1ul, 2ul, 3ul&gt;)
7   0x12827188d void IPC::callMemberFunction&lt;WebKit::RemoteDisplayListRecorder, void (WebKit::RemoteDisplayListRecorder::*)(WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect const&amp;, WebCore::FloatRect const&amp;, WebCore::ImagePaintingOptions const&amp;), std::__1::tuple&lt;WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect, WebCore::FloatRect, WebCore::ImagePaintingOptions&gt;, std::__1::integer_sequence&lt;unsigned long, 0ul, 1ul, 2ul, 3ul&gt; &gt;(std::__1::tuple&lt;WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect, WebCore::FloatRect, WebCore::ImagePaintingOptions&gt;&amp;&amp;, WebKit::RemoteDisplayListRecorder*, void (WebKit::RemoteDisplayListRecorder::*)(WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect const&amp;, WebCore::FloatRect const&amp;, WebCore::ImagePaintingOptions const&amp;))
8   0x12823549a void IPC::handleMessage&lt;Messages::RemoteDisplayListRecorder::DrawImageBuffer, WebKit::RemoteDisplayListRecorder, void (WebKit::RemoteDisplayListRecorder::*)(WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect const&amp;, WebCore::FloatRect const&amp;, WebCore::ImagePaintingOptions const&amp;)&gt;(IPC::Connection&amp;, IPC::Decoder&amp;, WebKit::RemoteDisplayListRecorder*, void (WebKit::RemoteDisplayListRecorder::*)(WTF::ObjectIdentifier&lt;WebCore::RenderingResourceIdentifierType&gt;, WebCore::FloatRect const&amp;, WebCore::FloatRect const&amp;, WebCore::ImagePaintingOptions const&amp;))
9   0x1282328cf WebKit::RemoteDisplayListRecorder::didReceiveStreamMessage(IPC::StreamServerConnectionBase&amp;, IPC::Decoder&amp;)
10  0x128ca73bb IPC::StreamServerConnection::dispatchStreamMessage(IPC::Decoder&amp;&amp;, IPC::StreamMessageReceiver&amp;)
11  0x128ca6d60 IPC::StreamServerConnection::dispatchStreamMessages(unsigned long)
12  0x128ca56b8 IPC::StreamConnectionWorkQueue::processStreams()
13  0x128cad8b0 IPC::StreamConnectionWorkQueue::startProcessingThread()::$_0::operator()()
14  0x128cad869 WTF::Detail::CallableWrapper&lt;IPC::StreamConnectionWorkQueue::startProcessingThread()::$_0, void&gt;::call()
15  0x13b169942 WTF::Function&lt;void ()&gt;::operator()() const
16  0x13b231f18 WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*)
17  0x13b23e375 WTF::wtfThreadEntryPoint(void*)
18  0x10c1d84bc _pthread_start
19  0x10c1d3ebf thread_start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834153</commentid>
    <comment_count>3</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-26 10:17:49 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #2)
&gt; The reason for filing this bug is I found the following crash when running
&gt; the layout tests with &quot;--use-gpu-process&quot;. So instead of trying to
&gt; investigate this crash, I think it is better to remove this unnecessary code.

+1!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834164</commentid>
    <comment_count>4</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-01-26 10:44:16 -0800</bug_when>
    <thetext>The above crash seems to happen because the m_resourceHeap of RemoteResourceCache got out of sync from its m_resourceUseCounters. 

When RemoteDisplayListRecorder::drawImageBufferWithQualifiedIdentifier() calls resourceCache().cachedImageBuffer() with the given imageBufferIdentifier, it finds an ImageBuffer in its m_resourceHeap but when it calls resourceCache().recordResourceUse() with the same imageBufferIdentifier, it does not find a counter in its m_resourceUseCounters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834166</commentid>
    <comment_count>5</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-01-26 10:46:10 -0800</bug_when>
    <thetext>I meant to say the &quot;assertion&quot; not the &quot;crash&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835704</commentid>
    <comment_count>6</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-01-31 13:58:57 -0800</bug_when>
    <thetext>rdar://86150540</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835737</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-31 14:53:26 -0800</bug_when>
    <thetext>Committed r288847 (246608@main): &lt;https://commits.webkit.org/246608@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 450010.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450010</attachid>
            <date>2022-01-26 03:14:41 -0800</date>
            <delta_ts>2022-01-31 14:53:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235636-20220126031440.patch</filename>
            <type>text/plain</type>
            <size>37947</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhjMzA4YmMyM2NlZWNiY2Ew
YTEzOGVkMGU1MTc2M2I1YzE3ZTY5YmQuLmIxZTZiNzY4NDRmODhmODY3YjM1ODAxY2U4N2M3MjAw
MTI4Yzg0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIgQEAKKzIwMjItMDEtMjYgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBSZW1v
dmUgdGhlIHJlc291cmNlIHVzZSBjb3VudGVycyBmcm9tIHRoZSByZW1vdGUgcmVzb3VyY2UgY2Fj
aGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTYz
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBk
aXNwbGF5IGxpc3QgaXRlbXMgYW5kIHRoZSByZXNvdXJjZSBtYW5hZ2VtZW50IG1lc3NhZ2VzIGFy
ZSBib3RoCisgICAgICAgIGNvbW11bmljYXRlZCBmcm9tIHRoZSBXZWJQcm9jZXNzIGFuZCB0aGUg
R1BVUHJvY2VzcyB0aHJvdWdoIHRoZSBzdHJlYW0KKyAgICAgICAgY29ubmVjdGlvbi4gVGhlIHJl
c291cmNlcyB3aWxsIGJlIHNlbnQgdG8gdGhlIEdQVVByb2Nlc3MsIGNvbnN1bWVkIGJ5CisgICAg
ICAgIHRoZSBkaXNwbGF5IGl0ZW1zIGFuZCB0aGVuIHJlbGVhc2VkIGluIHRoZSByaWdodCBvcmRl
ci4gU28gdGhlcmUgaXMgbm8KKyAgICAgICAgbmVlZCBhbnltb3JlIGZvciB0aGUgcmVzb3VyY2Ug
dXNlIGNvdW50ZXJzLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6c2V0U3RhdGVXaXRoUXVhbGlmaWVkSWRlbnRpZmllcnMpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcldpdGhRdWFs
aWZpZWRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6ZHJhd0dseXBoc1dpdGhRdWFsaWZpZWRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyV2l0aFF1YWxpZmll
ZElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpkcmF3TmF0aXZlSW1hZ2VXaXRoUXVhbGlmaWVkSWRlbnRpZmllcik6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmRyYXdQYXR0ZXJuV2l0aFF1YWxpZmllZElk
ZW50aWZpZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJl
bGVhc2VSZW1vdGVSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKToKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2Fn
ZXMuaW46CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlTmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZUZvbnQp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWxlYXNlUmVtb3RlUmVz
b3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjplbnN1cmVSZXNv
dXJjZVVzZUNvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJj
ZUNhY2hlOjptYXliZVJlbW92ZVJlc291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVzb3VyY2VDYWNoZTo6cmVjb3JkUmVzb3VyY2VVc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjp1cGRhdGVIYXNBY3RpdmVEcmF3YWJsZXMp
OiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VD
YWNoZS5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpoYXNBY3RpdmVE
cmF3YWJsZXMgY29uc3QpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291
cmNlVXNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVjb3JkTmF0aXZlSW1hZ2VVc2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlY29yZEZvbnRV
c2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OnJlY29yZEltYWdlQnVmZmVyVXNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlZEltYWdl
QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5
OjpyZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHk6OnJlY29yZEltYWdlQnVmZmVyVXNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5OjpyZWNvcmROYXRpdmVJbWFnZVVzZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cmVjb3JkRm9udFVzZSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cmVsZWFzZU5hdGl2ZUltYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjbGVhck5hdGl2ZUltYWdl
TWFwKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWxlYXNl
QWxsUmVtb3RlRm9udHMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHk6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRm9yRm9udHMpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnJlbW90ZVJlc291cmNlQ2FjaGVXYXNEZXN0cm95ZWQp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eS5oOgorCiAyMDIyLTAxLTI0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjgyMzIwKTogW0NvY29hXSBVc2VyLWluc3Rh
bGxlZCBmb250cyBkb24ndCB3b3JrIGluIHRoZSBHUFUgUHJvY2VzcyAoaW4gV0tXZWJWaWV3KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGQ5YWY1ODQwZGY2ODQzZDllNjE5ZGI2
NjJlYzkwZWE0ODE4NTc5NmEuLjk0ZjA0YTQ3MDM2NDRjNjQ1NWM2ZGUxNDdhYzZiZjMxN2IwMGFi
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM0LDEyICsxMzQsNiBAQCB2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldFN0YXRlV2l0aFF1YWxpZmllZElkZW50aWZp
ZXJzKERpc3BsYXlMaXN0OjpTZQogICAgICAgICBmaWxsUGF0dGVybkltYWdlID0gcmVzb3VyY2VD
YWNoZSgpLmNhY2hlZE5hdGl2ZUltYWdlKGZpbGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKTsKIAog
ICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSwgc3Ryb2tlUGF0dGVybkltYWdlLmdldCgpLCBm
aWxsUGF0dGVybkltYWdlLmdldCgpKTsKLQotICAgIGlmIChzdHJva2VQYXR0ZXJuSW1hZ2UpCi0g
ICAgICAgIHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShzdHJva2VQYXR0ZXJuSW1h
Z2VJZGVudGlmaWVyKTsKLQotICAgIGlmIChmaWxsUGF0dGVybkltYWdlKQotICAgICAgICByZXNv
dXJjZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VVc2UoZmlsbFBhdHRlcm5JbWFnZUlkZW50aWZpZXIp
OwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNh
cCBsaW5lQ2FwKQpAQCAtMTkzLDcgKzE4Nyw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXJXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihRdWFsaWZpCiAg
ICAgfQogCiAgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6Q2xpcFRvSW1hZ2VCdWZmZXIoaW1h
Z2VCdWZmZXJJZGVudGlmaWVyLm9iamVjdCgpLCBkZXN0aW5hdGlvblJlY3QpLCAqaW1hZ2VCdWZm
ZXIpOwotICAgIHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsaXBPdXRU
b1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTI3NSw3ICsyNjgsNiBAQCB2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OmRyYXdHbHlwaHNXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihEaXNw
bGF5TGlzdDo6RAogICAgIH0KIAogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSwgKmZvbnQp
OwotICAgIHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShmb250SWRlbnRpZmllcik7
CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpAQCAtMjk0LDcgKzI4Niw2IEBAIHZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyV2l0aFF1YWxpZmllZElk
ZW50aWZpZXIoUXVhbGlmaWVkCiAgICAgfQogCiAgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6
RHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVySWRlbnRpZmllci5vYmplY3QoKSwgZGVzdGluYXRp
b25SZWN0LCBzcmNSZWN0LCBvcHRpb25zKSwgKmltYWdlQnVmZmVyKTsKLSAgICByZXNvdXJjZUNh
Y2hlKCkucmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKIH0KIAogdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkBAIC0zMTMsNyArMzA0LDYgQEAg
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2VXaXRoUXVhbGlm
aWVkSWRlbnRpZmllcihRdWFsaWZpZWQKICAgICB9CiAKICAgICBoYW5kbGVJdGVtKERpc3BsYXlM
aXN0OjpEcmF3TmF0aXZlSW1hZ2UoaW1hZ2VJZGVudGlmaWVyLm9iamVjdCgpLCBpbWFnZVNpemUs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSwgKmltYWdlKTsKLSAgICByZXNvdXJjZUNhY2hl
KCkucmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpkcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpAQCAt
MzMyLDcgKzMyMiw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZHJhd1BhdHRl
cm5XaXRoUXVhbGlmaWVkSWRlbnRpZmllcihRdWFsaWZpZWRSZW5kCiAgICAgfQogCiAgICAgaGFu
ZGxlSXRlbShEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLm9iamVjdCgp
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyksICppbWFnZSk7Ci0gICAgcmVzb3VyY2VDYWNoZSgpLnJlY29yZFJlc291cmNl
VXNlKGltYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwCmluZGV4IGQyNzQ5MzE0NDhjN2I1MTYxYzExMjhkMjFhZGY1MWE2NzAyNDc3ZjguLjcz
NmRlNDViZWVjNzMzZjhjYWJhMDA0NmYyNjEzN2Y3OTA2YzQ1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zOTAsMTcgKzM5MCwxNyBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmRlbGV0ZUFsbEZvbnRzKCkKICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGUuZGVsZXRlQWxs
Rm9udHMoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZWxlYXNlUmVtb3Rl
UmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIC8vIEltbWVkaWF0ZWx5IHR1cm4gdGhlIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciAod2hpY2ggaXMgZXJyb3ItcHJvbmUpIHRvIGEgUXVh
bGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLAogICAgIC8vIGFuZCB1c2UgYSBoZWxw
ZXIgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgZG9uJ3QgYWNjaWRlbnRhbGx5IHVzZSB0aGUg
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIChiZWNhdXNlIHRoZSBoZWxwZXIgZnVuY3Rpb24g
Y2FuJ3Qgc2VlIGl0KS4KLSAgICByZWxlYXNlUmVtb3RlUmVzb3VyY2VXaXRoUXVhbGlmaWVkSWRl
bnRpZmllcih7IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLT53ZWJQcm9jZXNzSWRlbnRpZmllcigpIH0sIHVzZUNvdW50KTsKKyAgICByZWxl
YXNlUmVtb3RlUmVzb3VyY2VXaXRoUXVhbGlmaWVkSWRlbnRpZmllcih7IHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT53ZWJQcm9jZXNzSWRl
bnRpZmllcigpIH0pOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VS
ZW1vdGVSZXNvdXJjZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKFF1YWxpZmllZFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVz
ZUNvdW50KQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVzb3Vy
Y2VXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotICAgIGF1dG8gc3VjY2VzcyA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5y
ZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VDb3Vu
dCk7CisgICAgYXV0byBzdWNjZXNzID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1v
dGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIE1FU1NBR0VfQ0hF
Q0soc3VjY2VzcywgIlJlc291cmNlIGlzIGJlaW5nIHJlbGVhc2VkIGJlZm9yZSBiZWluZyBjYWNo
ZWQuIik7CiAgICAgdXBkYXRlUmVuZGVyaW5nUmVzb3VyY2VSZXF1ZXN0KCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCmluZGV4IDlhMjZjNDI0YjkxMjExMDExOGI0MzYxODRkZTMwYjhkMjhkZDE1MjMu
LjZjNjAzNjUwZmU4NjY2MmE3ODdiMGQwMzYxMDVlNjRmNjFjYTZiYzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExNyw3ICsxMTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FjaGVOYXRp
dmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZv
bnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1v
dGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90
IHVzZUNvdW50KTsKKyAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZmluYWxpemVSZW5kZXJpbmdVcGRh
dGUoUmVuZGVyaW5nVXBkYXRlSUQpOwogCiAgICAgLy8gUmVjZWl2ZWQgbWVzc2FnZXMgdHJhbnNs
YXRlZCB0byB1c2UgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLgpAQCAtMTI3
LDcgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFn
ZUJ1ZmZlcldpdGhRdWFsaWZpZWRJZGVudGlmaWVyKFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmKTsKICAgICB2b2lkIGNhY2hlTmF0
aXZlSW1hZ2VXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihjb25zdCBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBk
aWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVt
b3J5OjpJUENIYW5kbGUmLCBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVz
dGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJj
ZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgdWludDY0X3QgdXNlQ291bnQpOworICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNl
V2l0aFF1YWxpZmllZElkZW50aWZpZXIoUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKICAgICB2b2lkIGNhY2hlRm9udFdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKFJlZjxXZWJD
b3JlOjpGb250PiYmLCBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCiAg
ICAgUmVmPElQQzo6U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZT4gbV93b3JrUXVldWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IGU3YzFiZmE2N2Y0MzNjZjQ0
YzhlMWMyZWY4OWMzZTY2YTY5ZjlkODguLmE5YWViNGI2MGViMDIwZWI0YmEzNDZiM2ZhMzNkODM2
YWU4ZWM3ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0x
LDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAg
bWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBOb3RSZWZDb3VudGVkIFN0cmVhbSB7
CiAgICAgQ2FjaGVOYXRpdmVJbWFnZShXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhh
bmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikgTm90U3RyZWFtRW5jb2RhYmxlCiAgICAgQ2FjaGVGb250KElQQzo6Rm9u
dFJlZmVyZW5jZSBmb250KSBOb3RTdHJlYW1FbmNvZGFibGUKICAgICBEZWxldGVBbGxGb250cygp
Ci0gICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KQor
ICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIEZpbmFsaXplUmVuZGVyaW5n
VXBkYXRlKFdlYktpdDo6UmVuZGVyaW5nVXBkYXRlSUQgcmVuZGVyaW5nVXBkYXRlSUQpCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNv
dXJjZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZXNvdXJjZUNhY2hlLmNwcAppbmRleCBhZjllNDI4NjljMmE4N2EyMWNjMTVkYzg5YTczZDU5M2Rj
YTA3MjM0Li44OGRiY2FmNDNlNWMzODdjZDkxYTJiOWUxODYzOTg3NDMzNmQwNTAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291
cmNlQ2FjaGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzYsMjAgKzM2LDEwIEBAIFJlbW90ZVJlc291cmNlQ2FjaGU6OlJl
bW90ZVJlc291cmNlQ2FjaGUoUHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIp
CiB7CiB9CiAKLVJlbW90ZVJlc291cmNlQ2FjaGU6OlJlbW90ZVJlc291cmNlQ2FjaGUoUmVtb3Rl
UmVzb3VyY2VDYWNoZSYmIG90aGVyKQotICAgIDogbV9yZXNvdXJjZUhlYXAoV1RGTW92ZShvdGhl
ci5tX3Jlc291cmNlSGVhcCkpCi0gICAgLCBtX3Jlc291cmNlVXNlQ291bnRlcnMoV1RGTW92ZShv
dGhlci5tX3Jlc291cmNlVXNlQ291bnRlcnMpKQotewotICAgIHVwZGF0ZUhhc0FjdGl2ZURyYXdh
YmxlcygpOwotfQotCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIo
UmVmPEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyLCBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIEFTU0VSVChy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIub2JqZWN0KCkgPT0gaW1hZ2VCdWZmZXItPnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpKTsKICAgICBtX3Jlc291cmNlSGVhcC5hZGQocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7Ci0gICAgdXBkYXRl
SGFzQWN0aXZlRHJhd2FibGVzKCk7Ci0KLSAgICBlbnN1cmVSZXNvdXJjZVVzZUNvdW50ZXIocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIH0KIAogSW1hZ2VCdWZmZXIqIFJlbW90ZVJlc291
cmNlQ2FjaGU6OmNhY2hlZEltYWdlQnVmZmVyKFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIGNvbnN0CkBAIC02MSw5ICs1MSw2
IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVOYXRpdmVJbWFnZShSZWY8TmF0aXZl
SW1hZ2U+JiYgaW1hZ2UsIFF1YWxpZmllZFJlCiB7CiAgICAgQVNTRVJUKHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllci5vYmplY3QoKSA9PSBpbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKCkpOwogICAgIG1fcmVzb3VyY2VIZWFwLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFdURk1vdmUoaW1hZ2UpKTsKLSAgICB1cGRhdGVIYXNBY3RpdmVEcmF3YWJsZXMoKTsKLQot
ICAgIGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OwogfQogCiBOYXRpdmVJbWFnZSogUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVkTmF0aXZlSW1h
Z2UoUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikgY29uc3QKQEAgLTc1LDggKzYyLDYgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNh
Y2hlOjpjYWNoZUZvbnQoUmVmPEZvbnQ+JiYgZm9udCwgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3Vy
Y2UKIHsKICAgICBBU1NFUlQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLm9iamVjdCgpID09
IGZvbnQtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKTsKICAgICBtX3Jlc291cmNlSGVh
cC5hZGQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXVEZNb3ZlKGZvbnQpKTsKLQotICAg
IGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
fQogCiBGb250KiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZWRGb250KFF1YWxpZmllZFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIGNvbnN0
CkBAIC04NCwxMDMgKzY5LDIyIEBAIEZvbnQqIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlZEZv
bnQoUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlCiAgICAgcmV0dXJu
IG1fcmVzb3VyY2VIZWFwLmdldEZvbnQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIH0K
IAotdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjplbnN1cmVSZXNvdXJjZVVzZUNvdW50ZXIoUXVh
bGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikKLXsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5hZGQocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJjZVVzZUNvdW50ZXIgeyB9KTsKLSAgICBp
ZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5zdGF0ZTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRl
ciBtYWtpbmcgdGhpcyBhc3NlcnRpb24gTUVTU0FHRV9DSEVDSyB0aGUgd2ViIHByb2Nlc3MuCi0g
ICAgICAgIEFTU0VSVChzdGF0ZSA9PSBSZXNvdXJjZVN0YXRlOjpUb0JlRGVsZXRlZCk7Ci0gICAg
ICAgIHN0YXRlID0gUmVzb3VyY2VTdGF0ZTo6QWxpdmU7Ci0gICAgfQotfQotCiB2b2lkIFJlbW90
ZVJlc291cmNlQ2FjaGU6OmRlbGV0ZUFsbEZvbnRzKCkKIHsKICAgICBtX3Jlc291cmNlSGVhcC5k
ZWxldGVBbGxGb250cygpOwogfQogCi1ib29sIFJlbW90ZVJlc291cmNlQ2FjaGU6Om1heWJlUmVt
b3ZlUmVzb3VyY2UoUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgUmVzb3VyY2VVc2VDb3VudGVyc01hcDo6aXRlcmF0b3ImIGl0
ZXJhdG9yKQorYm9vbCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2Uo
UXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcikKIHsKLSAgICBhdXRvJiB2YWx1ZSA9IGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAo
dmFsdWUuc3RhdGUgPT0gUmVzb3VyY2VTdGF0ZTo6QWxpdmUgfHwgdmFsdWUudXNlT3JQZW5kaW5n
Q291bnQgPCAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICh2YWx1ZS51c2VPclBl
bmRpbmdDb3VudCkgewotICAgICAgICAvLyBUaGlzIG1lYW5zIHdlJ3ZlIGhpdCBhIHNpdHVhdGlv
biB0aGF0J3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gVGhlIFdQIHNlbmRzOgotICAgICAgICAvLyAxLiBTZW5kIGNhY2hlIHJlc291cmNlIG1l
c3NhZ2UKLSAgICAgICAgLy8gMi4gVXNlIHJlc291cmNlIDJ4Ci0gICAgICAgIC8vIDMuIFNlbmQg
cmVsZWFzZSByZXNvdXJjZSBtZXNzYWdlIHdpdGggdXNlQ291bnQgPSAyCi0gICAgICAgIC8vIDQu
IFNlbmQgY2FjaGUgcmVzb3VyY2UgbWVzc2FnZSBhZ2FpbiBmb3IgdGhlIHNhbWUgcmVzb3VyY2UK
LSAgICAgICAgLy8gNS4gVXNlIHJlc291cmNlIDQgdGltZXMKLSAgICAgICAgLy8gNi4gU2VuZCBy
ZWxlYXNlIHJlc291cmNlIG1lc3NhZ2Ugd2l0aCB1c2VDb3VudCA9IDQKLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gVGhlIEdQVVAgc2VlczoKLSAgICAgICAgLy8gMS4gVGhlIGNhY2hlIHJlc291cmNl
IG1lc3NhZ2UKLSAgICAgICAgLy8gMi4gVXNlIHJlc291cmNlIDJ4Ci0gICAgICAgIC8vIDMuIFVz
ZSByZXNvdXJjZSAzeCBtb3JlIHRpbWVzIChmcm9tIHN0ZXAgNSBhYm92ZSkKLSAgICAgICAgLy8g
NC4gUmVsZWFzZSByZXNvdXJjZSBtZXNzYWdlIHdpdGggdXNlQ291bnQgPSAyICA8PT0gVGhpcyBw
YXJ0IHJpZ2h0IGhlcmUKLSAgICAgICAgLy8gNS4gLi4uIG1vcmUgc3R1ZmYgLi4uCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIEluIHRoaXMgc2l0dWF0aW9uLCB3ZSd2ZSBnb3QgYSBoZWFkLXN0YXJ0
IG9uIGEgZnV0dXJlIGZyYW1lJ3MgcmVuZGVyaW5nIGNvbW1hbmRzLAotICAgICAgICAvLyB1c2lu
ZyBhIHJlc291cmNlIHdoaWNoIHdhcyBjYWNoZWQgZnJvbSBhIHByZXZpb3VzIGZyYW1lLiAoVGhp
cyBpcyBub3QgYSBwcm9ibGVtLikKLSAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBrbm93IHRoYXQs
IGluIHRoZSBmdXR1cmUsIHRoZXJlJ3MgZ29pbmcgdG8gYmUgYW5vdGhlciBjYWNoZSByZXNvdXJj
ZQotICAgICAgICAvLyBtZXNzYWdlIHdoaWNoIHdpbGwgd2FudCB1cyB0byBjYWNoZSB0aGlzIGV4
YWN0IHNhbWUgcmVzb3VyY2UgdGhhdCB3ZSBhbHJlYWR5IGhhdmUKLSAgICAgICAgLy8gY2FjaGVk
LgotICAgICAgICAvLwotICAgICAgICAvLyBTbywgbGV0J3MganVzdCBub3QgcmVtb3ZlIHRoZSBy
ZXNvdXJjZSwganVzdCBpbiBjYXNlIHRoZXJlIGFyZSBfbW9yZV8gcmVuZGVyaW5nCi0gICAgICAg
IC8vIGNvbW1hbmRzIHdlIGNhbiBnZXQgYSBoZWFkIHN0YXJ0IG9uIGJlZm9yZSB0aGUgY2FjaGUg
cmVzb3VyY2UgbWVzc2FnZSBldmVudHVhbGx5Ci0gICAgICAgIC8vIGdldHMgZGVsaXZlcmVkLiBU
aGUgZXZlbnR1YWwgY2FjaGUgcmVzb3VyY2UgY29tbWFuZCBpcyBzbWFydCBlbm91Z2ggdG8gcmVh
bGl6ZSB0aGF0Ci0gICAgICAgIC8vIHRoZSB0aGluZyBpdCdzIHN1cHBvc2VkIHRvIGJlIGNhY2hp
bmcgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUsIGFuZCB3aWxsIGNvcnJlY3RseQotICAgICAgICAv
LyBkbyBub3RoaW5nLgotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIG1fcmVz
b3VyY2VVc2VDb3VudGVycy5yZW1vdmUoaXRlcmF0b3IpOwotCiAgICAgaWYgKG1fcmVzb3VyY2VI
ZWFwLnJlbW92ZUltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICAg
ICAgfHwgbV9yZXNvdXJjZUhlYXAucmVtb3ZlTmF0aXZlSW1hZ2UocmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKSkgewotICAgICAgICB1cGRhdGVIYXNBY3RpdmVEcmF3YWJsZXMoKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChtX3Jlc291cmNlSGVhcC5yZW1vdmVGb250
KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCisgICAgICAgIHx8IG1fcmVzb3VyY2VIZWFw
LnJlbW92ZU5hdGl2ZUltYWdlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICAgICAg
fHwgbV9yZXNvdXJjZUhlYXAucmVtb3ZlRm9udChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIENhY2hpbmcgdGhlIHJlbW90ZSByZXNv
dXJjZSBzaG91bGQgaGF2ZSBoYXBwZW5lZCBiZWZvcmUgcmVsZWFzaW5nIGl0LgogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWNvcmRSZXNvdXJjZVVz
ZShRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Jlc291cmNlVXNlQ291bnRlcnMu
ZmluZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotCi0gICAgQVNTRVJUKGl0ZXJhdG9y
ICE9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5lbmQoKSk7Ci0KLSAgICBSZXNvdXJjZVVzZUNvdW50
ZXImIHVzZUNvdW50ZXIgPSBpdGVyYXRvci0+dmFsdWU7Ci0gICAgKyt1c2VDb3VudGVyLnVzZU9y
UGVuZGluZ0NvdW50OwotCi0gICAgbWF5YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIGl0ZXJhdG9yKTsKLX0KLQotYm9vbCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpy
ZWxlYXNlUmVtb3RlUmVzb3VyY2UoUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpCi17Ci0gICAg
YXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fcmVzb3VyY2VVc2VDb3VudGVy
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlc291cmNlVXNlQ291bnRlciYg
dXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1ZTsKLSAgICB1c2VDb3VudGVyLnN0YXRlID0gUmVz
b3VyY2VTdGF0ZTo6VG9CZURlbGV0ZWQ7Ci0gICAgdXNlQ291bnRlci51c2VPclBlbmRpbmdDb3Vu
dCAtPSB1c2VDb3VudDsKLSAgICByZXR1cm4gbWF5YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIGl0ZXJhdG9yKTsKLX0KLQotdm9pZCBSZW1vdGVSZXNvdXJjZUNh
Y2hlOjp1cGRhdGVIYXNBY3RpdmVEcmF3YWJsZXMoKQotewotICAgIG1faGFzQWN0aXZlRHJhd2Fi
bGVzID0gbV9yZXNvdXJjZUhlYXAuaGFzSW1hZ2VCdWZmZXIoKSB8fCBtX3Jlc291cmNlSGVhcC5o
YXNOYXRpdmVJbWFnZSgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCmluZGV4IGE4MTQxYzJhZDQzNDBjZGE1
YmVlZGJhN2UwNjRmMDdlMjUzYjQzYzAuLmYyZjIzNWMyZTc1YTViZmI2ODZlODIyMDE5MDcyYmEy
M2U5OTA2NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZXNvdXJjZUNhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNiBAQCBjbGFzcyBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOwogY2xhc3MgUmVtb3RlUmVzb3VyY2VDYWNoZSB7CiBwdWJsaWM6
CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZShXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQ
cm9jZXNzSWRlbnRpZmllcik7Ci0gICAgUmVtb3RlUmVzb3VyY2VDYWNoZShSZW1vdGVSZXNvdXJj
ZUNhY2hlJiYpOwogCiAgICAgdm9pZCBjYWNoZUltYWdlQnVmZmVyKFJlZjxXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcj4mJiwgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciogY2FjaGVkSW1hZ2VCdWZmZXIoUXVhbGlmaWVkUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKSBjb25zdDsKQEAgLTUyLDQ1ICs1MSwxNCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYsIFF1YWxpZmllZFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgV2ViQ29yZTo6Rm9udCogY2FjaGVkRm9udChRdWFs
aWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIGNvbnN0OwogICAgIHZvaWQgZGVsZXRl
QWxsRm9udHMoKTsKLSAgICBib29sIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShRdWFsaWZpZWRSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KTsKLSAgICB2b2lkIHJl
Y29yZFJlc291cmNlVXNlKFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cisg
ICAgYm9vbCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKIAogICAgIGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXNvdXJjZUhl
YXAmIHJlc291cmNlSGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VIZWFwOyB9CiAKLSAg
ICBib29sIGhhc0FjdGl2ZURyYXdhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWN0aXZlRHJh
d2FibGVzOyB9CisgICAgYm9vbCBoYXNBY3RpdmVEcmF3YWJsZXMoKSBjb25zdCB7IHJldHVybiBt
X3Jlc291cmNlSGVhcC5oYXNJbWFnZUJ1ZmZlcigpIHx8IG1fcmVzb3VyY2VIZWFwLmhhc05hdGl2
ZUltYWdlKCk7IH0KIAogcHJpdmF0ZToKLSAgICAvLyBCZWNhdXNlIHRoZSBjYWNoZS9yZWxlYXNl
IG1lc3NhZ2VzIGFyZSBzZW50IGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIGRpc3BsYXkgbGlzdCBp
dGVtcyB3aGljaAotICAgIC8vIHJlZmVyZW5jZSB0aGUgcmVzb3VyY2VzLCBpdCdzIHRvdGFsbHkg
cG9zc2libGUgdGhhdCB3ZSBzZWUgYSByZWxlYXNlIG1lc3NhZ2UgYmVmb3JlIHdlJ3ZlCi0gICAg
Ly8gZXhlY3V0ZWQgYWxsIHRoZSBkaXNwbGF5IGxpc3QgaXRlbXMgd2hpY2ggcmVmZXJlbmNlIHRo
ZSByZXNvdXJjZS4gVGhlIHdlYiBwcm9jZXNzIHRlbGxzIHVzCi0gICAgLy8gaG93IG1hbnkgZGlz
cGxheSBsaXN0IGl0ZW1zIHdpbGwgcmVmZXJlbmNlIHRoaXMgcmVzb3VyY2UsIGFuZCB3ZSBkZWZl
ciBkZWxldGlvbiBvZiB0aGUgcmVzb3VyY2UKLSAgICAvLyB1bnRpbCB3ZSBleGVjdXRlIHRoYXQg
bWFueSBkaXNwbGF5IGxpc3QgaXRlbXMuIEl0J3MgYWN0dWFsbHkgYSBiaXQgd29yc2UgdGhhbiB0
aGlzLCB0aG91Z2gsCi0gICAgLy8gYmVjYXVzZSB3ZSBtYXkgYWN0dWFsbHkgc2VlIGEgKm5ldyog
Y2FjaGUgbWVzc2FnZSBkdXJpbmcgdGhlIHRpbWUgd2hlbiBkZWxldGlvbiBpcyBkZWZlcnJlZC4K
LSAgICAvLwotICAgIC8vIFdlIGNhbiBvbmx5IHNhZmVseSBkZWxldGUgYSByZXNvdXJjZSB3aGVu
OgotICAgIC8vIDEuIEFsbCB0aGUgY2FjaGUgbWVzc2FnZXMgaGF2ZSBhbiBhY2NvbXBhbnlpbmcg
cmVsZWFzZSBtZXNzYWdlLCBhbmQKLSAgICAvLyAyLiBXZSd2ZSBwcm9jZXNzZWQgYXMgbWFueSBk
aXNwbGF5IGxpc3QgaXRlbXMgdGhhdCByZWZlcmVuY2UgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGFz
IHRoZSB3ZWIKLSAgICAvLyBwcm9jZXNzIGhhcyBlbmNvZGVkLgotICAgIGVudW0gY2xhc3MgUmVz
b3VyY2VTdGF0ZSB7Ci0gICAgICAgIEFsaXZlLAotICAgICAgICBUb0JlRGVsZXRlZAotICAgIH07
Ci0gICAgc3RydWN0IFJlc291cmNlVXNlQ291bnRlciB7Ci0gICAgICAgIFJlc291cmNlU3RhdGUg
c3RhdGUgeyBSZXNvdXJjZVN0YXRlOjpBbGl2ZSB9OwotICAgICAgICBpbnQ2NF90IHVzZU9yUGVu
ZGluZ0NvdW50IHsgMCB9OwotICAgIH07Ci0gICAgdXNpbmcgUmVzb3VyY2VVc2VDb3VudGVyc01h
cCA9IEhhc2hNYXA8UXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJj
ZVVzZUNvdW50ZXI+OwotCi0gICAgYm9vbCBtYXliZVJlbW92ZVJlc291cmNlKFF1YWxpZmllZFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVzb3VyY2VVc2VDb3VudGVyc01hcDo6aXRlcmF0
b3ImKTsKLSAgICB2b2lkIGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihRdWFsaWZpZWRSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwotCi0gICAgdm9pZCB1cGRhdGVIYXNBY3RpdmVEcmF3YWJs
ZXMoKTsKLQogICAgIFF1YWxpZmllZFJlc291cmNlSGVhcCBtX3Jlc291cmNlSGVhcDsKLQotICAg
IFJlc291cmNlVXNlQ291bnRlcnNNYXAgbV9yZXNvdXJjZVVzZUNvdW50ZXJzOwotCi0gICAgc3Rk
OjphdG9taWM8Ym9vbD4gbV9oYXNBY3RpdmVEcmF3YWJsZXMgeyBmYWxzZSB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eS5jcHAKaW5kZXggMjQzM2ZkY2M5NzRhYjY2Nzk3MWEyNWFmNjQ3ODkzNTYwYTMzMWM5Ni4u
ODU3MjNjMzgzZDQ3ZTRhZmMyNTNlMzE1ZDg0YjIyMmE4NDMxNzI3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MTksNyArNDE5LDcgQEAgYm9vbCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUlt
YWdlJiBpbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1fcmVuZGVy
aW5nQmFja2VuZC0+cmVjb3JkTmF0aXZlSW1hZ2VVc2UoaW1hZ2UpOworICAgIG1fcmVuZGVyaW5n
QmFja2VuZC0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkucmVjb3JkTmF0aXZlSW1hZ2VVc2Uo
aW1hZ2UpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MzMsNyArNDMzLDcgQEAgYm9vbCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlcikKICAgICBpZiAoIWNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+cmVj
b3JkSW1hZ2VCdWZmZXJVc2UoaW1hZ2VCdWZmZXIpOworICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+
cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkucmVjb3JkSW1hZ2VCdWZmZXJVc2UoaW1hZ2VCdWZm
ZXIpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00NTUsNyArNDU1LDcgQEAgYm9vbCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKEZvbnQmIGZvbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX3JlbmRlcmluZ0JhY2tlbmQt
PnJlY29yZEZvbnRVc2UoZm9udCk7CisgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5yZW1vdGVSZXNv
dXJjZUNhY2hlUHJveHkoKS5yZWNvcmRGb250VXNlKGZvbnQpOwogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggYzgxNTNk
NjQyZDhjYWE2N2E4ZWY3OTc5YTEyZGQwMTU3ODJhNmVjNC4uMmY4MGVlYmU4OGIwNTk1YzhjOTVh
ZTgyZjFiZTg4YjUxMTBjYzVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI1OCw5ICsyNTgsOSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZGVsZXRlQWxsRm9udHMoKQogICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6RGVsZXRlQWxsRm9udHMoKSk7CiB9CiAKLXZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291
bnQpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVJlbW90ZVJlc291
cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCiB7Ci0gICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VD
b3VudCkpOworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpOwog
fQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdV
cGRhdGUoKQpAQCAtMzI2LDIxICszMjYsNiBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0oSQogICAg
IG1fbmVlZHNXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbSA9IGZhbHNlOwogfQog
Ci12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVjb3JkTmF0aXZlSW1hZ2VVc2Uo
TmF0aXZlSW1hZ2UmIGltYWdlKQotewotICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LnJl
Y29yZE5hdGl2ZUltYWdlVXNlKGltYWdlKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OnJlY29yZEZvbnRVc2UoRm9udCYgZm9udCkKLXsKLSAgICBtX3JlbW90ZVJlc291
cmNlQ2FjaGVQcm94eS5yZWNvcmRGb250VXNlKGZvbnQpOwotfQotCi12b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6cmVjb3JkSW1hZ2VCdWZmZXJVc2UoSW1hZ2VCdWZmZXImIGltYWdl
QnVmZmVyKQotewotICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LnJlY29yZEltYWdlQnVm
ZmVyVXNlKGltYWdlQnVmZmVyKTsKLX0KLQogYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmlzQ2FjaGVkKGNvbnN0IEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikgY29uc3QKIHsKICAg
ICBpZiAoYXV0byBjYWNoZWRJbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5
LmNhY2hlZEltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggMzBlMTYz
MWU4Zjk2N2MwNTk0MDY3MjExZjgxYzNhZmE5MGQ2Nzk1ZS4uMzdlMzVkMTQ2OGY4NzI2OGM3N2Uy
NDljODJjZTU2OGQxZWY5YjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdl
KGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7
CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwotICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291
cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291
bnQpOworICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CiAKICAgICB2b2lkIGZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKCk7
CiAgICAgUmVuZGVyaW5nVXBkYXRlSUQgcmVuZGVyaW5nVXBkYXRlSUQoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcmluZ1VwZGF0ZUlEOyB9CkBAIC0xMzEsMTAgKzEzMSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgc2VuZFRvU3RyZWFtKFdURk1vdmUobWVzc2FnZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKCkpOwogICAgIH0KIAotICAgIHZvaWQgcmVjb3JkTmF0aXZlSW1hZ2VVc2UoV2ViQ29y
ZTo6TmF0aXZlSW1hZ2UmKTsKLSAgICB2b2lkIHJlY29yZEZvbnRVc2UoV2ViQ29yZTo6Rm9udCYp
OwotICAgIHZvaWQgcmVjb3JkSW1hZ2VCdWZmZXJVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKTsK
LQogcHJpdmF0ZToKICAgICBleHBsaWNpdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoV2Vi
UGFnZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKaW5kZXggMzE1YzAz
MmNkNWFlODQ3NTQ5YzRjN2ZlODkwNmNlNmRkZWJhOTZiOS4uMjViNWE0NTU4MjUwZWUwNjA1NmM4
NDNhMTdjMTM4MTk2MTY5ZjNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00NiwxMyArNDYsMTMgQEAgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5Ojp+UmVtb3RlUmVzb3Vy
Y2VDYWNoZVByb3h5KCkKIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlSW1h
Z2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQogewotICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlcnMuYWRkKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBJbWFnZUJ1ZmZlclN0YXRlIHsgaW1hZ2VCdWZmZXIsIDAgfSk7Cisg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX2ltYWdlQnVmZmVycy5hZGQoaW1hZ2VCdWZmZXIucmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlQnVmZmVyKTsKICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCiBJbWFnZUJ1ZmZlciogUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNoZWRJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBjb25zdAogewotICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVycy5nZXQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKS5pbWFn
ZUJ1ZmZlci5nZXQoKTsKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcnMuZ2V0KHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikuZ2V0KCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikKQEAgLTYwLDEyICs2MCwxMCBAQCB2b2lkIFJlbW90ZVJl
c291cmNlQ2FjaGVQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZQogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ltYWdlQnVmZmVycy5maW5kKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXRlcmF0b3IgIT0g
bV9pbWFnZUJ1ZmZlcnMuZW5kKCkpOwogCi0gICAgYXV0byB1c2VDb3VudCA9IGl0ZXJhdG9yLT52
YWx1ZS51c2VDb3VudDsKLQogICAgIGF1dG8gc3VjY2VzcyA9IG1faW1hZ2VCdWZmZXJzLnJlbW92
ZShpdGVyYXRvcik7CiAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKIAotICAg
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVzZUNvdW50KTsKKyAgICBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKIH0KIAogaW5saW5lIHN0YXRpYyBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjcmVh
dGVTaGFyZWFibGVCaXRtYXBGcm9tTmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlKQpAQCAt
ODcsMTggKzg1LDE0IEBAIGlubGluZSBzdGF0aWMgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY3Jl
YXRlU2hhcmVhYmxlQml0bWFwRnJvbU5hdGl2ZUltYWdlKE5hdGl2CiB2b2lkIFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eTo6cmVjb3JkSW1hZ2VCdWZmZXJVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyKQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ltYWdlQnVmZmVycy5maW5k
KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKTsKLSAgICBBU1NFUlQo
aXRlcmF0b3IgIT0gbV9pbWFnZUJ1ZmZlcnMuZW5kKCkpOwotCi0gICAgKytpdGVyYXRvci0+dmFs
dWUudXNlQ291bnQ7CisgICAgQVNTRVJUX1VOVVNFRChpdGVyYXRvciwgaXRlcmF0b3IgIT0gbV9p
bWFnZUJ1ZmZlcnMuZW5kKCkpOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6
cmVjb3JkTmF0aXZlSW1hZ2VVc2UoTmF0aXZlSW1hZ2UmIGltYWdlKQogewogICAgIGF1dG8gaXRl
cmF0b3IgPSBtX25hdGl2ZUltYWdlcy5maW5kKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpKTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9uYXRpdmVJbWFnZXMuZW5kKCkpIHsKLSAg
ICAgICAgKytpdGVyYXRvci0+dmFsdWUudXNlQ291bnQ7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1f
bmF0aXZlSW1hZ2VzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgYXV0byBi
aXRtYXAgPSBjcmVhdGVTaGFyZWFibGVCaXRtYXBGcm9tTmF0aXZlSW1hZ2UoaW1hZ2UpOwogICAg
IGlmICghYml0bWFwKQpAQCAtMTEwLDcgKzEwNCw3IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5OjpyZWNvcmROYXRpdmVJbWFnZVVzZShOYXRpdmVJbWFnZSYgaW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGhhbmRsZS50YWtlT3duZXJzaGlwT2ZNZW1vcnkoTWVtb3J5TGVkZ2Vy
OjpHcmFwaGljcyk7Ci0gICAgbV9uYXRpdmVJbWFnZXMuYWRkKGltYWdlLnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBOYXRpdmVJbWFnZVN0YXRlIHsgaW1hZ2UsIDEgfSk7CisgICAgbV9u
YXRpdmVJbWFnZXMuYWRkKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFn
ZSk7CiAKICAgICAvLyBTZXQgaXRzZWxmIGFzIGFuIG9ic2VydmVyIHRvIE5hdGl2ZUltYWdlLCBz
byByZWxlYXNlTmF0aXZlSW1hZ2UoKQogICAgIC8vIGdldHMgY2FsbGVkIHdoZW4gTmF0aXZlSW1h
Z2UgaXMgYmVpbmcgZGVsZWxldGVkLgpAQCAtMTIyLDkgKzExNiw3IEBAIHZvaWQgUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5OjpyZWNvcmROYXRpdmVJbWFnZVVzZShOYXRpdmVJbWFnZSYgaW1hZ2Up
CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWNvcmRGb250VXNlKEZvbnQmIGZv
bnQpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2ZvbnRzLmVuc3VyZShmb250LnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpLCBbJl0gewotICAgICAgICByZXR1cm4gRm9udFN0YXRlIHsgbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVuZGVyaW5nVXBkYXRlSUQoKSwgMSB9OwotICAg
IH0pOworICAgIGF1dG8gcmVzdWx0ID0gbV9mb250cy5hZGQoZm9udC5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKSwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVuZGVyaW5nVXBk
YXRlSUQoKSk7CiAKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY2FjaGVGb250KGZvbnQpOwpAQCAtMTMzLDkgKzEyNSw4
IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWNvcmRGb250VXNlKEZvbnQmIGZv
bnQpCiAgICAgfQogCiAgICAgYXV0byYgY3VycmVudFN0YXRlID0gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKLSAgICArK2N1cnJlbnRTdGF0ZS51c2VDb3VudDsKLSAgICBpZiAoY3VycmVudFN0YXRl
Lmxhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uVXNlZFdpdGhpbiAhPSBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5yZW5kZXJpbmdVcGRhdGVJRCgpKSB7Ci0gICAgICAgIGN1cnJlbnRTdGF0
ZS5sYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvblVzZWRXaXRoaW4gPSBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5yZW5kZXJpbmdVcGRhdGVJRCgpOworICAgIGlmIChjdXJyZW50U3RhdGUg
IT0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVuZGVyaW5nVXBkYXRlSUQoKSkgewor
ICAgICAgICBjdXJyZW50U3RhdGUgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZW5k
ZXJpbmdVcGRhdGVJRCgpOwogICAgICAgICArK21fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRS
ZW5kZXJpbmdVcGRhdGU7CiAgICAgfQogfQpAQCAtMTQ1LDE4ICsxMzYsMTYgQEAgdm9pZCBSZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHk6OnJlbGVhc2VOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmUKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9uYXRpdmVJbWFnZXMuZmluZChy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXJhdG9y
ICE9IG1fbmF0aXZlSW1hZ2VzLmVuZCgpKTsKIAotICAgIGF1dG8gdXNlQ291bnQgPSBpdGVyYXRv
ci0+dmFsdWUudXNlQ291bnQ7Ci0KICAgICBhdXRvIHN1Y2Nlc3MgPSBtX25hdGl2ZUltYWdlcy5y
ZW1vdmUoaXRlcmF0b3IpOwogICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CiAK
LSAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2Uo
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VDb3VudCk7CisgICAgbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjbGVhck5h
dGl2ZUltYWdlTWFwKCkKIHsKICAgICBmb3IgKGF1dG8mIG5hdGl2ZUltYWdlU3RhdGUgOiBtX25h
dGl2ZUltYWdlcy52YWx1ZXMoKSkKLSAgICAgICAgbmF0aXZlSW1hZ2VTdGF0ZS5pbWFnZS0+cmVt
b3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgICAgICBuYXRpdmVJbWFnZVN0YXRlLT5yZW1vdmVPYnNl
cnZlcigqdGhpcyk7CiAgICAgbV9uYXRpdmVJbWFnZXMuY2xlYXIoKTsKIH0KIApAQCAtMTY4LDcg
KzE1Nyw3IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpwcmVwYXJlRm9yTmV4dFJl
bmRlcmluZ1VwZGF0ZSgpCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cmVsZWFzZUFs
bFJlbW90ZUZvbnRzKCkKIHsKICAgICBmb3IgKGF1dG8mIGZvbnRTdGF0ZSA6IG1fZm9udHMpCi0g
ICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJj
ZShmb250U3RhdGUua2V5LCBmb250U3RhdGUudmFsdWUudXNlQ291bnQpOworICAgICAgICBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UoZm9udFN0YXRl
LmtleSk7CiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjbGVhckZvbnRNYXAo
KQpAQCAtMTg5LDkgKzE3OCw5IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpmaW5h
bGl6ZVJlbmRlcmluZ1VwZGF0ZUZvckZvbnRzKCkKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcj4gdG9SZW1vdmU7CiAgICAgYXV0byByZW5kZXJpbmdVcGRh
dGVJRCA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbmRlcmluZ1VwZGF0ZUlEKCk7
CiAgICAgZm9yIChhdXRvJiBpdGVtIDogbV9mb250cykgewotICAgICAgICBpZiAocmVuZGVyaW5n
VXBkYXRlSUQgLSBpdGVtLnZhbHVlLmxhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uVXNlZFdpdGhp
biA+PSBtaW5pbXVtUmVuZGVyaW5nVXBkYXRlQ291bnRUb0tlZXBGb250QWxpdmUpIHsKKyAgICAg
ICAgaWYgKHJlbmRlcmluZ1VwZGF0ZUlEIC0gaXRlbS52YWx1ZSA+PSBtaW5pbXVtUmVuZGVyaW5n
VXBkYXRlQ291bnRUb0tlZXBGb250QWxpdmUpIHsKICAgICAgICAgICAgIHRvUmVtb3ZlLmFkZChp
dGVtLmtleSk7Ci0gICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxl
YXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5rZXksIGl0ZW0udmFsdWUudXNlQ291bnQpOworICAgICAg
ICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNl
KGl0ZW0ua2V5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEzLDE3ICsyMDIsMTYgQEAgdm9p
ZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnJlbW90ZVJlc291cmNlQ2FjaGVXYXNEZXN0cm95
ZWQoKQogCiAgICAgLy8gR2V0IGEgY29weSBvZiBtX2ltYWdlQnVmZmVycy52YWx1ZXMoKSBiZWNh
dXNlIGNsZWFyQmFja2VuZCgpCiAgICAgLy8gbWF5IHJlbGVhc2Ugc29tZSBvZiB0aGUgY2FjaGVk
IEltYWdlQnVmZmVycy4KLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBjb3B5VG9WZWN0b3IobV9pbWFn
ZUJ1ZmZlcnMudmFsdWVzKCkpKSB7Ci0gICAgICAgIGlmICghaXRlbS5pbWFnZUJ1ZmZlcikKKyAg
ICBmb3IgKGF1dG8mIGltYWdlQnVmZmVyIDogY29weVRvVmVjdG9yKG1faW1hZ2VCdWZmZXJzLnZh
bHVlcygpKSkgeworICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGl0ZW0udXNlQ291bnQgPSAwOwotICAgICAgICBpdGVtLmltYWdlQnVmZmVy
LT5jbGVhckJhY2tlbmQoKTsKKyAgICAgICAgaW1hZ2VCdWZmZXItPmNsZWFyQmFja2VuZCgpOwog
ICAgIH0KIAotICAgIGZvciAoYXV0byYgaXRlbSA6IG1faW1hZ2VCdWZmZXJzLnZhbHVlcygpKSB7
Ci0gICAgICAgIGlmICghaXRlbS5pbWFnZUJ1ZmZlcikKKyAgICBmb3IgKGF1dG8mIGltYWdlQnVm
ZmVyIDogbV9pbWFnZUJ1ZmZlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcmVhdGVSZW1vdGVJbWFnZUJ1ZmZlcigqaXRlbS5pbWFnZUJ1ZmZlcik7CisgICAg
ICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNyZWF0ZVJlbW90ZUltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlcik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHku
aAppbmRleCAzMzc3NGNjMjRmOTg0NjI0NTVlMzE3OWNiODQ0Mzg1YWNhMzBhOGU4Li4yOTVjODUz
Mjk2YjFjOWUyYWNmYTc3ZDAxYjg0ZmFjZDc5MDkzZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VD
YWNoZVByb3h5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAy
MiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02MywyMyArNjMsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW1hZ2Vz
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUltYWdlcy5zaXplKCk7IH0KIAogcHJpdmF0
ZToKLSAgICBzdHJ1Y3QgSW1hZ2VCdWZmZXJTdGF0ZSB7Ci0gICAgICAgIFdlYWtQdHI8V2ViQ29y
ZTo6SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOwotICAgICAgICB1aW50NjRfdCB1c2VDb3VudDsK
LSAgICB9OwotICAgIHVzaW5nIEltYWdlQnVmZmVySGFzaE1hcCA9IEhhc2hNYXA8V2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBJbWFnZUJ1ZmZlclN0YXRlPjsKLQotICAgIHN0
cnVjdCBOYXRpdmVJbWFnZVN0YXRlIHsKLSAgICAgICAgV2Vha1B0cjxXZWJDb3JlOjpOYXRpdmVJ
bWFnZT4gaW1hZ2U7Ci0gICAgICAgIHVpbnQ2NF90IHVzZUNvdW50OwotICAgIH07Ci0gICAgdXNp
bmcgTmF0aXZlSW1hZ2VIYXNoTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIE5hdGl2ZUltYWdlU3RhdGU+OwotCi0gICAgc3RydWN0IEZvbnRTdGF0ZSB7
Ci0gICAgICAgIFJlbmRlcmluZ1VwZGF0ZUlEIGxhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uVXNl
ZFdpdGhpbjsKLSAgICAgICAgdWludDY0X3QgdXNlQ291bnQ7Ci0gICAgfTsKLSAgICB1c2luZyBG
b250SGFzaE1hcCA9IEhhc2hNYXA8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBGb250U3RhdGU+OworICAgIHVzaW5nIEltYWdlQnVmZmVySGFzaE1hcCA9IEhhc2hNYXA8V2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWFrUHRyPFdlYkNvcmU6OkltYWdl
QnVmZmVyPj47CisgICAgdXNpbmcgTmF0aXZlSW1hZ2VIYXNoTWFwID0gSGFzaE1hcDxXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYWtQdHI8V2ViQ29yZTo6TmF0aXZlSW1h
Z2U+PjsKKyAgICB1c2luZyBGb250SGFzaE1hcCA9IEhhc2hNYXA8V2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBSZW5kZXJpbmdVcGRhdGVJRD47CiAgICAgCiAgICAgdm9pZCBy
ZWxlYXNlTmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBv
dmVycmlkZTsKICAgICB2b2lkIGNsZWFyTmF0aXZlSW1hZ2VNYXAoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>