<?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>8995</bug_id>
          
          <creation_ts>2006-05-19 08:51:06 -0700</creation_ts>
          <short_desc>memory leak in XPath code -- seen in layout tests</short_desc>
          <delta_ts>2019-02-06 09:02:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>42884</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-19 08:51:06 -0700</bug_when>
    <thetext>We&apos;re seeing leaks in the XPath parsing code:

Leak: 0x18667850  size=32	
	0x00000001 0x00000006 0x18667b30 0x00000000 	.........f{0....
	0x00000000 0x00000000 0xffffffff 0x00000000 	................
	Call stack: [thread 39a7]: | 0x0 | start | _start | main | dumpRenderTree | -[NSRunLoop runMode:beforeDate:] | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoSources0 | _sendCallbacks | -[NSURLConnection(NSURLConnectionInternal) _sendCallbacks] | -[NSURLConnection(NSURLConnectionInternal) _sendDidFinishLoadingCallback] | -[WebLoader connectionDidFinishLoading:] | -[WebSubresourceLoader didFinishLoading] | -[KWQResourceLoader finishWithData:] | -[KWQResourceLoader finishJobAndHandle:] | WebCore::Loader::receivedAllData(WebCore::TransferJob*, NSData*) | WebCore::CachedScript::data(WebCore::DeprecatedArray&lt;char&gt;&amp;, bool) | WebCore::CachedScript::checkNotify() | WebCore::XMLTokenizer::notifyFinished(WebCore::CachedObject*) | WebCore::XMLTokenizer::executeScripts() | WebCore::CachedScript::ref(WebCore::CachedObjectClient*) | WebCore::XMLTokenizer::notifyFinished(WebCore::CachedObject*) | WebCore::Frame::executeScript(WebCore::Node*, DeprecatedString const&amp;, bool) | WebCore::KJSProxy::evaluate(WebCore::String const&amp;, int, WebCore::String const&amp;, WebCore::Node*) | KJS::Interpreter::evaluate(KJS::UString const&amp;, int, KJS::UChar const*, int, KJS::JSValue*) | KJS::InterpreterImp::evaluate(KJS::UChar const*, int, KJS::JSValue*, KJS::UString const&amp;, int) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::TryNode::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ExprStatementNode::execute(KJS::ExecState*) | KJS::FunctionCallResolveNode::evaluate(KJS::ExecState*) | KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::DeclaredFunctionImp::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ExprStatementNode::execute(KJS::ExecState*) | KJS::FunctionCallResolveNode::evaluate(KJS::ExecState*) | KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::DeclaredFunctionImp::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ForNode::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ExprStatementNode::execute(KJS::ExecState*) | KJS::AssignResolveNode::evaluate(KJS::ExecState*) | KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) | KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | WebCore::JSDocumentProtoFunc::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | WebCore::Document::createExpression(WebCore::String const&amp;, WebCore::XPathNSResolver*, int&amp;) | WebCore::XPathEvaluator::createExpression(WebCore::String const&amp;, WebCore::XPathNSResolver*, int&amp;) | WebCore::XPathExpression::createExpression(WebCore::String const&amp;, WebCore::XPathNSResolver*, int&amp;) | WebCore::XPath::Parser::parseStatement(WebCore::String const&amp;, int&amp;) | xpathyyparse(void*) | xpathyylex(YYSTYPE*) | WebCore::XPath::Parser::lex(void*) | WebCore::XPath::Parser::nextToken() | WebCore::XPath::Parser::nextTokenInternal() | WebCore::XPath::Parser::lexString() | WebCore::String::String[in-charge](DeprecatedString const&amp;) | operator new(unsigned long) | WTF::fastMalloc(unsigned long) 
Leak: 0x18667810  size=32	
	0x015bbe98 0x00000000 0x00000000 0x00000000 	.[..............
	0x00000000 0x18667850 0x00000000 0x00000000 	.....fxP........
	Call stack: [thread 8bbb]: | 0x0 | start | _start | main | dumpRenderTree | -[NSRunLoop runMode:beforeDate:] | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoSources0 | _sendCallbacks | -[NSURLConnection(NSURLConnectionInternal) _sendCallbacks] | -[NSURLConnection(NSURLConnectionInternal) _sendDidFinishLoadingCallback] | -[WebLoader connectionDidFinishLoading:] | -[WebSubresourceLoader didFinishLoading] | -[KWQResourceLoader finishWithData:] | -[KWQResourceLoader finishJobAndHandle:] | WebCore::Loader::receivedAllData(WebCore::TransferJob*, NSData*) | WebCore::CachedScript::data(WebCore::DeprecatedArray&lt;char&gt;&amp;, bool) | WebCore::CachedScript::checkNotify() | WebCore::XMLTokenizer::notifyFinished(WebCore::CachedObject*) | WebCore::XMLTokenizer::executeScripts() | WebCore::CachedScript::ref(WebCore::CachedObjectClient*) | WebCore::XMLTokenizer::notifyFinished(WebCore::CachedObject*) | WebCore::Frame::executeScript(WebCore::Node*, DeprecatedString const&amp;, bool) | WebCore::KJSProxy::evaluate(WebCore::String const&amp;, int, WebCore::String const&amp;, WebCore::Node*) | KJS::Interpreter::evaluate(KJS::UString const&amp;, int, KJS::UChar const*, int, KJS::JSValue*) | KJS::InterpreterImp::evaluate(KJS::UChar const*, int, KJS::JSValue*, KJS::UString const&amp;, int) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::TryNode::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ExprStatementNode::execute(KJS::ExecState*) | KJS::FunctionCallResolveNode::evaluate(KJS::ExecState*) | KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::DeclaredFunctionImp::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ExprStatementNode::execute(KJS::ExecState*) | KJS::FunctionCallResolveNode::evaluate(KJS::ExecState*) | KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::DeclaredFunctionImp::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ForNode::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ExprStatementNode::execute(KJS::ExecState*) | KJS::AssignResolveNode::evaluate(KJS::ExecState*) | KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) | KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | WebCore::JSDocumentProtoFunc::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | WebCore::Document::createExpression(WebCore::String const&amp;, WebCore::XPathNSResolver*, int&amp;) | WebCore::XPathEvaluator::createExpression(WebCore::String const&amp;, WebCore::XPathNSResolver*, int&amp;) | WebCore::XPathExpression::createExpression(WebCore::String const&amp;, WebCore::XPathNSResolver*, int&amp;) | WebCore::XPath::Parser::parseStatement(WebCore::String const&amp;, int&amp;) | xpathyyparse(void*) | operator new(unsigned long) | WTF::fastMalloc(unsigned long) 
Leak: 0x18667b30  size=16	
	0x00430041 0x004e0041 0x00440041 0x00010001 	.C.A.N.A.D.A....
	Call stack: [thread bfffe97b]: | 0x0 | start | _start | main | dumpRenderTree | -[NSRunLoop runMode:beforeDate:] | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoSources0 | _sendCallbacks | -[NSURLConnection(NSURLConnectionInternal) _sendCallbacks] | -[NSURLConnection(NSURLConnectionInternal) _sendDidFinishLoadingCallback] | -[WebLoader connectionDidFinishLoading:] | -[WebSubresourceLoader didFinishLoading] | -[KWQResourceLoader finishWithData:] | -[KWQResourceLoader finishJobAndHandle:] | WebCore::Loader::receivedAllData(WebCore::TransferJob*, NSData*) | WebCore::CachedScript::data(WebCore::DeprecatedArray&lt;char&gt;&amp;, bool) | WebCore::CachedScript::checkNotify() | WebCore::XMLTokenizer::notifyFinished(WebCore::CachedObject*) | WebCore::XMLTokenizer::executeScripts() | WebCore::CachedScript::ref(WebCore::CachedObjectClient*) | WebCore::XMLTokenizer::notifyFinished(WebCore::CachedObject*) | WebCore::Frame::executeScript(WebCore::Node*, DeprecatedString const&amp;, bool) | WebCore::KJSProxy::evaluate(WebCore::String const&amp;, int, WebCore::String const&amp;, WebCore::Node*) | KJS::Interpreter::evaluate(KJS::UString const&amp;, int, KJS::UChar const*, int, KJS::JSValue*) | KJS::InterpreterImp::evaluate(KJS::UChar const*, int, KJS::JSValue*, KJS::UString const&amp;, int) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::TryNode::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ExprStatementNode::execute(KJS::ExecState*) | KJS::FunctionCallResolveNode::evaluate(KJS::ExecState*) | KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::DeclaredFunctionImp::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ExprStatementNode::execute(KJS::ExecState*) | KJS::FunctionCallResolveNode::evaluate(KJS::ExecState*) | KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::DeclaredFunctionImp::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ForNode::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ExprStatementNode::execute(KJS::ExecState*) | KJS::AssignResolveNode::evaluate(KJS::ExecState*) | KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) | KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | WebCore::JSDocumentProtoFunc::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | WebCore::Document::createExpression(WebCore::String const&amp;, WebCore::XPathNSResolver*, int&amp;) | WebCore::XPathEvaluator::createExpression(WebCore::String const&amp;, WebCore::XPathNSResolver*, int&amp;) | WebCore::XPathExpression::createExpression(WebCore::String const&amp;, WebCore::XPathNSResolver*, int&amp;) | WebCore::XPath::Parser::parseStatement(WebCore::String const&amp;, int&amp;) | xpathyyparse(void*) | xpathyylex(YYSTYPE*) | WebCore::XPath::Parser::lex(void*) | WebCore::XPath::Parser::nextToken() | WebCore::XPath::Parser::nextTokenInternal() | WebCore::XPath::Parser::lexString() | WebCore::String::String[in-charge](DeprecatedString const&amp;) | WebCore::StringImpl::StringImpl[in-charge](unsigned short const*, unsigned) | WebCore::StringImpl::init(unsigned short const*, unsigned) | WebCore::newUCharVector(unsigned) | WTF::fastMalloc(unsigned long)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44573</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-03 17:38:35 -0700</bug_when>
    <thetext>I figured out the problem, and I have a patch to fix it along with some other XPath code cleanup and improvements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44575</commentid>
    <comment_count>2</comment_count>
      <attachid>8685</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-03 18:46:09 -0700</bug_when>
    <thetext>Created attachment 8685
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44592</commentid>
    <comment_count>3</comment_count>
      <attachid>8685</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-06-04 01:22:52 -0700</bug_when>
    <thetext>Comment on attachment 8685
patch

Looks great! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44641</commentid>
    <comment_count>4</comment_count>
      <attachid>8693</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-04 11:11:13 -0700</bug_when>
    <thetext>Created attachment 8693
updated patch (merged with Anders&apos;s XPath change)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44642</commentid>
    <comment_count>5</comment_count>
      <attachid>8693</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-06-04 11:13:14 -0700</bug_when>
    <thetext>Comment on attachment 8693
updated patch (merged with Anders&apos;s XPath change)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44699</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-04 15:58:54 -0700</bug_when>
    <thetext>Committed revision 14729.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502808</commentid>
    <comment_count>7</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:02:37 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8685</attachid>
            <date>2006-06-03 18:46:09 -0700</date>
            <delta_ts>2006-06-04 11:11:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>XPathLeakPatch.txt</filename>
            <type>text/plain</type>
            <size>116840</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NzE1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDYtMDYtMDMgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gY2hhbmdlZCBkZWxldGVBbGxWYWx1ZXMgc28gaXQgY2FuIHdvcmsg
b24gImNvbnN0IiBjb2xsZWN0aW9ucworICAgICAgICAgIERlbGV0aW5nIHRoZSB2YWx1ZXMgYWZm
ZWN0cyB0aGUgdmFsdWVzLCBub3QgdGhlIHBvaW50ZXJzIGluIHRoZQorICAgICAgICAgIGNvbGxl
Y3Rpb24sIHNvIGl0J3MgbGVnaXRpbWF0ZSB0byBkbyBpdCB0byBhIGNvbnN0IGNvbGxlY3Rpb24s
CisgICAgICAgICAgYW5kIGEgY2FzZSBvZiB0aGF0IGFjdHVhbGx5IGNhbWUgdXAgaW4gdGhlIFhQ
YXRoIGNvZGUuCisKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RGOjpkZWxl
dGVBbGxQYWlyU2Vjb25kcyk6IFVzZSBjb25zdCBpdGVyYXRvcnMuCisgICAgICAgIChXVEY6OmRl
bGV0ZUFsbFZhbHVlcyk6IFRha2UgY29uc3QgSGFzaE1hcCByZWZlcmVuY2UgYXMgYSBwYXJhbWV0
ZXIuCisgICAgICAgICogd3RmL0hhc2hTZXQuaDoKKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsVmFs
dWVzKTogVGFrZSBjb25zdCBIYXNoU2V0IHJlZmVyZW5jZSBhcyBhIHBhcmFtZXRlciwKKyAgICAg
ICAgYW5kIHVzZSBjb25zdCBpdGVyYXRvcnMuCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAg
ICAgICAoV1RGOjpkZWxldGVBbGxWYWx1ZXMpOiBUYWtlIGNvbnN0IFZlY3RvciByZWZlcmVuY2Ug
YXMgYSBwYXJhbWV0ZXIuCisKKyAgICAgICAgLSBhZGRlZCBtb3JlIGZ1bmN0aW9ucyB0aGF0IGFy
ZSBwcmVzZW50IGluIDxtYXRoLmg+IG9uIHNvbWUgcGxhdGZvcm1zLAorICAgICAgICAgIGJ1dCBu
b3Qgb24gb3RoZXJzOyBtb3ZlZCBoZXJlIGZyb20gdmFyaW91cyBmaWxlcyBpbiBXZWJDb3JlCisK
KyAgICAgICAgKiB3dGYvTWF0aEV4dHJhcy5oOgorICAgICAgICAoaXNpbmYpOiBBZGRlZC4KKyAg
ICAgICAgKGlzbmFuKTogQWRkZWQuCisgICAgICAgIChscm91bmQpOiBBZGRlZC4KKyAgICAgICAg
KGxyb3VuZGYpOiBUd2Vha2VkLgorICAgICAgICAocm91bmQpOiBBZGRlZC4KKyAgICAgICAgKHJv
dW5kZik6IFR3ZWFrZWQuCisgICAgICAgIChzaWduYml0KTogQWRkZWQuCisKIDIwMDYtMDYtMDIg
IE1pdHogUGV0dGVsICA8b3BlbmRhcndpbi5vcmdAbWl0enBldHRlbC5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgZ2dhcmVuLgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFNldC5oCShyZXZpc2lvbiAxNDcx
MSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDcgQEAKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIEhhc2hTZXQ7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4K
LSAgICB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+Jik7CisgICAgdm9pZCBkZWxldGVBbGxWYWx1ZXMoY29uc3QgSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPiYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz46Okhh
c2gsCiAgICAgICAgIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+ID4g
Y2xhc3MgSGFzaFNldCB7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIHZvaWQgcmVmQWxsKCk7
CiAgICAgICAgIHZvaWQgZGVyZWZBbGwoKTsKIAotICAgICAgICBmcmllbmQgdm9pZCBkZWxldGVB
bGxWYWx1ZXM8PihIYXNoU2V0Jik7CisgICAgICAgIGZyaWVuZCB2b2lkIGRlbGV0ZUFsbFZhbHVl
czw+KGNvbnN0IEhhc2hTZXQmKTsKIAogICAgICAgICBIYXNoVGFibGVUeXBlIG1faW1wbDsKICAg
ICB9OwpAQCAtMjk0LDE0ICsyOTQsMTQgQEAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5
cGUsIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CiAgICAgdm9pZCBkZWxldGVBbGxWYWx1ZXMoSGFz
aFRhYmxlVHlwZSYgY29sbGVjdGlvbikKICAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
SGFzaFRhYmxlVHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgIGl0ZXJh
dG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBj
b2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGRlbGV0ZSAq
KFZhbHVlVHlwZSopJippdDsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGluZSB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhIYXNo
U2V0PFQsIFUsIFY+JiBjb2xsZWN0aW9uKQorICAgIGlubGluZSB2b2lkIGRlbGV0ZUFsbFZhbHVl
cyhjb25zdCBIYXNoU2V0PFQsIFUsIFY+JiBjb2xsZWN0aW9uKQogICAgIHsKICAgICAgICAgZGVs
ZXRlQWxsVmFsdWVzPHR5cGVuYW1lIEhhc2hTZXQ8VCwgVSwgVj46OlZhbHVlVHlwZT4oY29sbGVj
dGlvbi5tX2ltcGwpOwogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDE0NzEx
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nzks
MTEgKzU3OSwxMSBAQAogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KLSAgICB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHk+JiBjb2xsZWN0aW9uKQorICAgIHZvaWQgZGVsZXRlQWxsVmFsdWVzKGNvbnN0IFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGNvbGxlY3Rpb24pCiAgICAgewotICAgICAgICB0eXBl
ZGVmIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gVmVjOwotICAgICAgICB0eXBlbmFtZSBWZWM6
Oml0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7Ci0gICAgICAgIGZvciAodHlwZW5hbWUg
VmVjOjppdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OmNvbnN0
X2l0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVu
ZCgpOworICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBkZWxldGUgKml0OwogICAgIH0KIApJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAxNDcxMSkKKysrIEphdmFTY3JpcHRDb3JlL3d0
Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNCBAQAogCiAjaWYg
UExBVEZPUk0oV0lOKQogCi1pbmxpbmUgZmxvYXQgcm91bmRmKGZsb2F0IG51bSkKLXsKLSAgICBy
ZXR1cm4gbnVtID4gMCA/IGZsb29yZihudW0gKyAwLjVmKSA6IGNlaWxmKG51bSAtIDAuNWYpOwot
fQorI2luY2x1ZGUgPHhtYXRoLmg+CiAKLWlubGluZSBsb25nIGxyb3VuZGYoZmxvYXQgbnVtKQot
ewotICAgIHJldHVybiBudW0gPiAwID8gbnVtICsgMC41ZiA6IGNlaWxmKG51bSAtIDAuNWYpOwot
fQoraW5saW5lIGJvb2wgaXNpbmYoZG91YmxlIG51bSkgeyByZXR1cm4gIV9maW5pdGUobnVtKTsg
fQoraW5saW5lIGJvb2wgaXNuYW4oZG91YmxlIG51bSkgeyByZXR1cm4gX2lzbmFuKG51bSk7IH0K
K2lubGluZSBsb25nIGxyb3VuZChkb3VibGUgbnVtKSB7IHJldHVybiBudW0gPiAwID8gbnVtICsg
MC41IDogY2VpbChudW0gLSAwLjUpOyB9CitpbmxpbmUgbG9uZyBscm91bmRmKGZsb2F0IG51bSkg
eyByZXR1cm4gbnVtID4gMCA/IG51bSArIDAuNWYgOiBjZWlsZihudW0gLSAwLjVmKTsgfQoraW5s
aW5lIGRvdWJsZSByb3VuZChkb3VibGUgbnVtKSB7IHJldHVybiBudW0gPiAwID8gZmxvb3IobnVt
ICsgMC41KSA6IGNlaWwobnVtIC0gMC41KTsgfQoraW5saW5lIGZsb2F0IHJvdW5kZihmbG9hdCBu
dW0pIHsgcmV0dXJuIG51bSA+IDAgPyBmbG9vcmYobnVtICsgMC41ZikgOiBjZWlsZihudW0gLSAw
LjVmKTsgfQoraW5saW5lIGJvb2wgc2lnbmJpdChkb3VibGUgbnVtKSB7IHJldHVybiBfY29weXNp
Z24oMS4wLCBudW0pIDwgMDsgfQogCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9I
YXNoTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hNYXAuaAkocmV2
aXNpb24gMTQ3MTEpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaE1hcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDgsMTQgKzMwOCwxNCBAQAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcHBlZFR5
cGUsIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CiAgICAgdm9pZCBkZWxldGVBbGxQYWlyU2Vjb25k
cyhIYXNoVGFibGVUeXBlJiBjb2xsZWN0aW9uKQogICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBIYXNoVGFibGVUeXBlOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgICAgICAg
aXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKICAgICAgICAgZm9yIChpdGVyYXRvciBp
dCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgZGVs
ZXRlICooTWFwcGVkVHlwZSopJml0LT5zZWNvbmQ7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
LSAgICBpbmxpbmUgdm9pZCBkZWxldGVBbGxWYWx1ZXMoSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYg
Y29sbGVjdGlvbikKKyAgICBpbmxpbmUgdm9pZCBkZWxldGVBbGxWYWx1ZXMoY29uc3QgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPiYgY29sbGVjdGlvbikKICAgICB7CiAgICAgICAgIGRlbGV0ZUFsbFBh
aXJTZWNvbmRzPHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Ok1hcHBlZFR5cGU+KGNv
bGxlY3Rpb24pOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTQ3MTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsOCArMTQ4LDcgQEAK
ICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZShzaGlmdCk7CiAgICAg
CiAgICAgIyBXaGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcyAK
LSAgICAjIHJlb3JnYW5pemF0aW9uLCB3ZSBkb24ndCBuZWVkIHRoZXNlIHNwZWNpYWwgY2FzZXMu
Ci0gICAgCisgICAgIyByZW9yZ2FuaXphdGlvbiwgd2Ugd29uJ3QgbmVlZCB0aGVzZSBzcGVjaWFs
IGNhc2VzLgogICAgIGlmICgkdHlwZSBlcSAiTXV0YXRpb25FdmVudCIgb3IKICAgICAgICAgJHR5
cGUgZXEgIktleWJvYXJkRXZlbnQiIG9yCiAgICAgICAgICR0eXBlIGVxICJNb3VzZUV2ZW50IiBv
cgpAQCAtMTU3LDE5ICsxNTYsMjMgQEAKICAgICAgICAgJHR5cGUgZXEgIlVJRXZlbnQiIG9yCiAg
ICAgICAgICR0eXBlIGVxICJXaGVlbEV2ZW50IikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJk
b20yX2V2ZW50c2ltcGwuaCJ9ID0gMTsKLSAgICB9IGVsc2lmICgkdHlwZSBlcSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEIikgeworICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1p
dGl2ZVR5cGUoJHR5cGUpCisgICAgICAgIG9yICR0eXBlIGVxICJET01TdHJpbmciIG9yICR0eXBl
IGVxICJET01PYmplY3QiIG9yICR0eXBlIGVxICJSR0JDb2xvciIgb3IgJHR5cGUgZXEgIlJlY3Qi
KSB7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5h
bWVkIGZpbGUKKyAgICAgICAgJGltcGxJbmNsdWRlc3siJHt0eXBlfS5oIn0gPSAxOworICAgIH0K
KworICAgICMgYWRkaXRpb25hbCBpbmNsdWRlcyAodGhpbmdzIG5lZWRlZCB0byBjb21waWxlIHRo
ZSBiaW5kaW5ncyBidXQgbm90IHRoZSBoZWFkZXIpCisKKyAgICBpZiAoJHR5cGUgZXEgIkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzR3Jh
ZGllbnQuaCJ9ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzUGF0dGVybi5oIn0g
PSAxOwotICAgICAgICAkaW1wbEluY2x1ZGVzeyJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCJ9
ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzU3R5bGUuaCJ9ID0gMTsKLSAgICB9
IGVsc2lmICgkdHlwZSBlcSAiQ2FudmFzR3JhZGllbnQiKSB7Ci0gICAgICAgICRpbXBsSW5jbHVk
ZXN7IkNhbnZhc0dyYWRpZW50LmgifSA9IDE7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJD
YW52YXNHcmFkaWVudCIgb3IgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKICAgICAgICAg
JGltcGxJbmNsdWRlc3siUGxhdGZvcm1TdHJpbmcuaCJ9ID0gMTsKLSAgICB9IGVsc2lmICgkY29k
ZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBvcgotICAgICAgICAkdHlwZSBlcSAi
RE9NU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NT2JqZWN0IiBvciAkdHlwZSBlcSAiUkdCQ29sb3Ii
IG9yICR0eXBlIGVxICJSZWN0IikgewotICAgIH0gZWxzZSB7Ci0gICAgICAgICMgZGVmYXVsdCwg
aW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlCi0gICAgICAgICRpbXBsSW5jbHVkZXN7IiR7dHlw
ZX0uaCJ9ID0gMTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaAkocmV2
aXNpb24gMTQ3MTEpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw2ICs0Myw4IEBACiAKIGNsYXNzIERPTUltcGxlbWVudGF0aW9uIDogcHVi
bGljIFNoYXJlZDxET01JbXBsZW1lbnRhdGlvbj4gewogcHVibGljOgorICAgIHZpcnR1YWwgfkRP
TUltcGxlbWVudGF0aW9uKCk7IAorCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZv
ciBET01JbXBsZW1lbnRhdGlvbgogICAgIGJvb2wgaGFzRmVhdHVyZShjb25zdCBTdHJpbmcmIGZl
YXR1cmUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxEb2N1
bWVudFR5cGU+IGNyZWF0ZURvY3VtZW50VHlwZShjb25zdCBTdHJpbmcmIHF1YWxpZmllZE5hbWUs
IGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyAmc3lzdGVtSWQsIEV4Y2VwdGlv
bkNvZGUmKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDE0NzEx
KQorKysgV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0NiwxMCBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorRE9NSW1wbGVtZW50YXRp
b246On5ET01JbXBsZW1lbnRhdGlvbigpCit7Cit9CisKIGJvb2wgRE9NSW1wbGVtZW50YXRpb246
Omhhc0ZlYXR1cmUgKGNvbnN0IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KSBjb25zdAogewogICAgIFN0cmluZyBsb3dlciA9IGZlYXR1cmUubG93ZXIoKTsKSW5kZXg6IFdl
YkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBh
dGgvWFBhdGhOYW1lc3BhY2UuY3BwCShyZXZpc2lvbiAxNDcxMSkKKysrIFdlYkNvcmUveHBhdGgv
WFBhdGhOYW1lc3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMCArMjMsMjEgQEAKICAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiWFBhdGhOYW1lc3BhY2UuaCIKIAogI2lmIFhQQVRIX1NVUFBPUlQKIAotI2lu
Y2x1ZGUgIlhQYXRoTmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogWFBhdGhOYW1lc3BhY2U6OlhQ
YXRoTmFtZXNwYWNlKFBhc3NSZWZQdHI8RWxlbWVudD4gb3duZXJFbGVtZW50LCBjb25zdCBTdHJp
bmcmIHByZWZpeCwgY29uc3QgU3RyaW5nJiB1cmkpCi0gICAgOiBOb2RlKG93bmVyRWxlbWVudC0+
ZG9jdW1lbnQoKSksCi0gICAgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KSwKLSAgICBtX3By
ZWZpeChwcmVmaXgpLAotICAgIG1fdXJpKHVyaSkKKyAgICA6IE5vZGUob3duZXJFbGVtZW50LT5k
b2N1bWVudCgpKQorICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQorICAgICwgbV9w
cmVmaXgocHJlZml4KQorICAgICwgbV91cmkodXJpKQogewogfQogCkBAIC04Miw0ICs4MywzIEBA
CiB9CiAKICNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCi0KSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBh
dGhFeHByZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVz
c2lvbi5jcHAJKHJldmlzaW9uIDE0NzExKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Np
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTIgQEAKICAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
WFBhdGhFeHByZXNzaW9uLmgiCiAKICNpZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0
aEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgpAQCAtNDYsMTMgKzQ3LDEzIEBACiB7CiAgICAg
UmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gZXhwciA9IG5ldyBYUGF0aEV4cHJlc3Npb247CiAgICAg
UGFyc2VyIHBhcnNlcjsKLSAgICAKKwogICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0
KCkucmVzb2x2ZXIgPSByZXNvbHZlcjsKICAgICBleHByLT5tX3RvcEV4cHJlc3Npb24gPSBwYXJz
ZXIucGFyc2VTdGF0ZW1lbnQoZXhwcmVzc2lvbiwgZWMpOwogICAgIGlmICghZXhwci0+bV90b3BF
eHByZXNzaW9uKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBleHByOworICAgIHJl
dHVybiBleHByLnJlbGVhc2UoKTsKIH0KIAogWFBhdGhFeHByZXNzaW9uOjp+WFBhdGhFeHByZXNz
aW9uKCkKQEAgLTYwLDI4ICs2MSwyNCBAQAogICAgIGRlbGV0ZSBtX3RvcEV4cHJlc3Npb247CiB9
CiAKLVBhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IFhQYXRoRXhwcmVzc2lvbjo6ZXZhbHVhdGUoTm9k
ZSogY29udGV4dE5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0KiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNz
UmVmUHRyPFhQYXRoUmVzdWx0PiBYUGF0aEV4cHJlc3Npb246OmV2YWx1YXRlKE5vZGUqIGNvbnRl
eHROb2RlLCB1bnNpZ25lZCBzaG9ydCB0eXBlLCBYUGF0aFJlc3VsdCosIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIGlmICghaXNWYWxpZENvbnRleHROb2RlKGNvbnRleHROb2RlKSkgewogICAg
ICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0g
ICAgCi0gICAgTm9kZSogZXZlbnRUYXJnZXQgPSBjb250ZXh0Tm9kZS0+b3duZXJEb2N1bWVudCgp
ID8gCi0gICAgICAgIGNvbnRleHROb2RlLT5vd25lckRvY3VtZW50KCkgOiBjb250ZXh0Tm9kZTsK
LSAgICAKKworICAgIEV2ZW50VGFyZ2V0Tm9kZSogZXZlbnRUYXJnZXQgPSBjb250ZXh0Tm9kZS0+
b3duZXJEb2N1bWVudCgpCisgICAgICAgID8gY29udGV4dE5vZGUtPm93bmVyRG9jdW1lbnQoKQor
ICAgICAgICA6IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGNvbnRleHROb2RlKTsKKwog
ICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSA9IGNvbnRleHROb2RlOyAg
ICAKICAgICBtX3RvcEV4cHJlc3Npb24tPm9wdGltaXplKCk7Ci0gICAgCi0gICAgUmVmUHRyPFhQ
YXRoUmVzdWx0PiByZXN1bHQgPSBuZXcgWFBhdGhSZXN1bHQoc3RhdGljX2Nhc3Q8RXZlbnRUYXJn
ZXROb2RlKj4oZXZlbnRUYXJnZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdG9wRXhwcmVzc2lvbi0+ZXZhbHVhdGUoKSk7Ci0gICAgCisgICAg
UmVmUHRyPFhQYXRoUmVzdWx0PiByZXN1bHQgPSBuZXcgWFBhdGhSZXN1bHQoZXZlbnRUYXJnZXQs
IG1fdG9wRXhwcmVzc2lvbi0+ZXZhbHVhdGUoKSk7CisKICAgICBpZiAodHlwZSAhPSBYUGF0aFJl
c3VsdDo6QU5ZX1RZUEUpIHsKKyAgICAgICAgZWMgPSAwOwogICAgICAgICByZXN1bHQtPmNvbnZl
cnRUbyh0eXBlLCBlYyk7Ci0KICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVzcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuaAkocmV2aXNpb24gMTQ3MTEpCisrKyBX
ZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDQxICsy
Myw0MCBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYg
WFBhdGhOYW1lc3BhY2VfSAogI2RlZmluZSBYUGF0aE5hbWVzcGFjZV9ICiAKICNpZiBYUEFUSF9T
VVBQT1JUCiAKLSNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgi
CisjaW5jbHVkZSAiTm9kZS5oIgogCi1uYW1lc3BhY2UgV2ViQ29yZQoteworbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFz
cyBFbGVtZW50OwogCi1jbGFzcyBYUGF0aE5hbWVzcGFjZSA6IHB1YmxpYyBOb2RlCi17Ci1wdWJs
aWM6Ci0gICAgWFBhdGhOYW1lc3BhY2UoUGFzc1JlZlB0cjxFbGVtZW50PiBvd25lckVsZW1lbnQs
Ci0gICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFN0cmluZyYg
dXJpKTsKLSAgICB2aXJ0dWFsIH5YUGF0aE5hbWVzcGFjZSgpOworICAgIGNsYXNzIFhQYXRoTmFt
ZXNwYWNlIDogcHVibGljIE5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgWFBhdGhOYW1lc3Bh
Y2UoUGFzc1JlZlB0cjxFbGVtZW50PiBvd25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJlZml4
LCBjb25zdCBTdHJpbmcmIHVyaSk7CisgICAgICAgIHZpcnR1YWwgflhQYXRoTmFtZXNwYWNlKCk7
CiAKLSAgICB2aXJ0dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBFbGVtZW50KiBvd25lckVsZW1lbnQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBEb2N1
bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEVsZW1lbnQqIG93
bmVyRWxlbWVudCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVO
YW1lKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIE5vZGU6Ok5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgTm9kZTo6Tm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKIAotcHJpdmF0ZToKLSAg
ICBSZWZQdHI8RWxlbWVudD4gbV9vd25lckVsZW1lbnQ7Ci0gICAgQXRvbWljU3RyaW5nIG1fcHJl
Zml4OwotICAgIEF0b21pY1N0cmluZyBtX3VyaTsKLX07CisgICAgcHJpdmF0ZToKKyAgICAgICAg
UmVmUHRyPEVsZW1lbnQ+IG1fb3duZXJFbGVtZW50OworICAgICAgICBBdG9taWNTdHJpbmcgbV9w
cmVmaXg7CisgICAgICAgIEF0b21pY1N0cmluZyBtX3VyaTsKKyAgICB9OwogCiB9CiAKSW5kZXg6
IFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE0NzExKQorKysgV2ViQ29yZS94
cGF0aC9YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTIg
QEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCiAKICNpZiBYUEFUSF9TVVBQT1JU
CiAKLSNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDYgKzM4LDEwIEBACiB7CiB9CiAKK1hQYXRoTlNSZXNv
bHZlcjo6flhQYXRoTlNSZXNvbHZlcigpCit7Cit9CisKIFN0cmluZyBYUGF0aE5TUmVzb2x2ZXI6
Omxvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBTdHJpbmcmIHByZWZpeCkKIHsKICAgICAvLyBUaGlz
IGlzIG5vdCBkb25lIGJ5IE5vZGU6Omxvb2t1cE5hbWVzcGFjZVVSSSBhcyBwZXIgdGhlIERPTTMg
Q29yZSBzcGVjLApJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDE0NzEx
KQorKysgV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDE3ICsyMywxNyBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisK
ICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgogCiAjaWYg
WFBBVEhfU1VQUE9SVAogCi0jaW5jbHVkZSAiWFBhdGhFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlhQYXRoRXhwcmVz
c2lvbi5oIgogI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1ZGUgIlhQYXRoUmVz
dWx0LmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0KICNpbmNsdWRlICJYUGF0aFV0
aWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV4
cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5o
CShyZXZpc2lvbiAxNDcxMSkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDQ2ICsyMyw0MCBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCisKICNpZm5kZWYgWFBhdGhFeHByZXNzaW9uX0gKICNkZWZpbmUgWFBhdGhF
eHByZXNzaW9uX0gKIAogI2lmIFhQQVRIX1NVUFBPUlQKIAogI2luY2x1ZGUgIlNoYXJlZC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAot
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2luY2x1
ZGUgIlhQYXRoRXhwcmVzc2lvbk5vZGUuaCIKKyAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2Rl
OwogCi1uYW1lc3BhY2UgV2ViQ29yZQotewotY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBOb2RlOwor
ICAgIGNsYXNzIFN0cmluZzsKKyAgICBjbGFzcyBYUGF0aE5TUmVzb2x2ZXI7CisgICAgY2xhc3Mg
WFBhdGhSZXN1bHQ7CiAKLWNsYXNzIFhQYXRoTlNSZXNvbHZlcjsKLWNsYXNzIFhQYXRoUmVzdWx0
OworICAgIG5hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIGNsYXNzIEV4cHJlc3Npb247CisgICAg
fQogCi1jbGFzcyBYUGF0aEV4cHJlc3Npb24gOiBwdWJsaWMgU2hhcmVkPFhQYXRoRXhwcmVzc2lv
bj4KLXsKLXB1YmxpYzoKLSAgICB+WFBhdGhFeHByZXNzaW9uKCk7CisgICAgY2xhc3MgWFBhdGhF
eHByZXNzaW9uIDogcHVibGljIFNoYXJlZDxYUGF0aEV4cHJlc3Npb24+IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIH5YUGF0aEV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
WFBhdGhFeHByZXNzaW9uPiBjcmVhdGVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lv
biwgWFBhdGhOU1Jlc29sdmVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBQYXNzUmVmUHRy
PFhQYXRoUmVzdWx0PiBldmFsdWF0ZShOb2RlKiBjb250ZXh0Tm9kZSwgdW5zaWduZWQgc2hvcnQg
dHlwZSwgWFBhdGhSZXN1bHQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICBYUGF0aDo6RXhwcmVzc2lvbiogbV90b3BFeHByZXNzaW9uOworICAg
IH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxYUGF0aEV4cHJlc3Npb24+IGNyZWF0ZUV4cHJl
c3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIqLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICBQYXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBldmFsdWF0ZShOb2RlKiBj
b250ZXh0Tm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRo
UmVzdWx0KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25D
b2RlJik7Ci0gICAgICAgIAotcHJpdmF0ZToKLSAgICBYUGF0aDo6RXhwcmVzc2lvbiogbV90b3BF
eHByZXNzaW9uOwotfTsKLQogfQogCiAjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAogCiAjZW5kaWYg
Ly8gWFBhdGhFeHByZXNzaW9uX0gKLQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCShyZXZp
c2lvbiAxNDcxMSkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDMwICsyMywzMSBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCisKICNpZm5kZWYgWFBhdGhOU1Jlc29sdmVyX0gKICNkZWZpbmUgWFBhdGhOU1Jlc29s
dmVyX0gKIAogI2lmIFhQQVRIX1NVUFBPUlQKIAogI2luY2x1ZGUgIlNoYXJlZC5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZQot
eworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBOb2RlOworICAgIGNsYXNzIE5vZGU7Cisg
ICAgY2xhc3MgU3RyaW5nOwogCi1jbGFzcyBYUGF0aE5TUmVzb2x2ZXIgOiBwdWJsaWMgU2hhcmVk
PFhQYXRoTlNSZXNvbHZlcj4KLXsKKyAgICBjbGFzcyBYUGF0aE5TUmVzb2x2ZXIgOiBwdWJsaWMg
U2hhcmVkPFhQYXRoTlNSZXNvbHZlcj4gewogICAgIHB1YmxpYzoKICAgICAgICAgWFBhdGhOU1Jl
c29sdmVyKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgICAgICB+WFBhdGhOU1Jlc29sdmVyKCk7CiAK
ICAgICAgICAgU3RyaW5nIGxvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBTdHJpbmcmIHByZWZpeCk7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwotfTsKKyAgICB9
OwogCiB9CiAKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmgJKHJldmlzaW9uIDE0NzExKQorKysg
V2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw0NyAr
MjMsNDAgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVm
IFhQYXRoRXZhbHVhdG9yX0gKICNkZWZpbmUgWFBhdGhFdmFsdWF0b3JfSAogCiAjaWYgWFBBVEhf
U1VQUE9SVAogCiAjaW5jbHVkZSAiU2hhcmVkLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
IAotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3BhY2UgV2ViQ29yZQotewotY2xhc3MgTm9k
ZTsKKyAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBYUGF0aEV4cHJlc3Np
b247Ci1jbGFzcyBYUGF0aE5TUmVzb2x2ZXI7Ci1jbGFzcyBYUGF0aFJlc3VsdDsKKyAgICBjbGFz
cyBOb2RlOworICAgIGNsYXNzIFN0cmluZzsKKyAgICBjbGFzcyBYUGF0aEV4cHJlc3Npb247Cisg
ICAgY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworICAgIGNsYXNzIFhQYXRoUmVzdWx0OwogCi1jb25z
dCBpbnQgWFBhdGhFeGNlcHRpb25PZmZzZXQgPSA0MDA7Ci1jb25zdCBpbnQgWFBhdGhFeGNlcHRp
b25NYXggPSA0OTk7ICAgCisgICAgLy8gRklYTUU6IFNob3VsZCB0aGVzZSBleGNlcHRpb24gY29k
ZXMgbW92ZSB0byBhbm90aGVyIGhlYWRlcj8KKyAgICBjb25zdCBpbnQgWFBhdGhFeGNlcHRpb25P
ZmZzZXQgPSA0MDA7CisgICAgY29uc3QgaW50IFhQYXRoRXhjZXB0aW9uTWF4ID0gNDk5OworICAg
IGVudW0gWFBhdGhFeGNlcHRpb25Db2RlIHsgSU5WQUxJRF9FWFBSRVNTSU9OX0VSUiA9IFhQYXRo
RXhjZXB0aW9uT2Zmc2V0ICsgNTEsIFRZUEVfRVJSIH07CiAKLWVudW0gWFBhdGhFeGNlcHRpb25D
b2RlIHsgSU5WQUxJRF9FWFBSRVNTSU9OX0VSUiA9IFhQYXRoRXhjZXB0aW9uT2Zmc2V0ICsgNTEs
IFRZUEVfRVJSIH07CisgICAgY2xhc3MgWFBhdGhFdmFsdWF0b3IgOiBwdWJsaWMgU2hhcmVkPFhQ
YXRoRXZhbHVhdG9yPiB7CisgICAgcHVibGljOgorICAgICAgICBQYXNzUmVmUHRyPFhQYXRoRXhw
cmVzc2lvbj4gY3JlYXRlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFhQYXRo
TlNSZXNvbHZlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxYUGF0aE5T
UmVzb2x2ZXI+IGNyZWF0ZU5TUmVzb2x2ZXIoTm9kZSogbm9kZVJlc29sdmVyKTsKKyAgICAgICAg
UGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBOb2RlKiBjb250ZXh0Tm9kZSwKKyAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciosIHVuc2ln
bmVkIHNob3J0IHR5cGUsIFhQYXRoUmVzdWx0KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIH07CiAK
LWNsYXNzIFhQYXRoRXZhbHVhdG9yIDogcHVibGljIFNoYXJlZDxYUGF0aEV2YWx1YXRvcj4KLXsK
LXB1YmxpYzoKLSAgICBQYXNzUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gY3JlYXRlRXhwcmVzc2lv
bihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciosCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gY3JlYXRlTlNSZXNvbHZlcihOb2RlKiBub2RlUmVz
b2x2ZXIpOwotICAgIFBhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IGV2YWx1YXRlKGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBjb250ZXh0Tm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0
aE5TUmVzb2x2ZXIqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBh
dGhSZXN1bHQqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUmKTsKLX07Ci0KIH0KIAogI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKIAogI2VuZGlmIC8v
IFhQYXRoRXZhbHVhdG9yX0gKLQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUGF0aC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUGF0aC5jcHAJKHJldmlz
aW9uIDE0NzExKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUGF0aC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDEzICsyNSwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJYUGF0aFBhdGguaCIKIAogI2lmIFhQQVRIX1NVUFBPUlQKIAotI2luY2x1ZGUgIlhQ
YXRoUGF0aC5oIgotCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCisj
aW5jbHVkZSAiWFBhdGhQcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJYUGF0aFN0ZXAuaCIKICNpbmNs
dWRlICJYUGF0aFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUv
eHBhdGgvaW1wbC9YUGF0aFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9p
bXBsL1hQYXRoUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ3MTEpCisrKyBXZWJDb3JlL3hwYXRoL2lt
cGwvWFBhdGhQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw1NiArMjMsMzIgQEAKICAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiWFBhdGhQYXJzZXIuaCIKIAogI2lmIFhQQVRIX1NVUFBPUlQKIAotI2luY2x1
ZGUgIlhQYXRoUGFyc2VyLmgiCi0KLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRl
ICJYUGF0aEV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlhQYXRoUHJlZGljYXRlLmgiCisjaW5jbHVk
ZSAiWFBhdGhTdGVwLmgiCiAKK2ludCB4cGF0aHl5cGFyc2Uodm9pZCopOworCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBuYW1lc3BhY2UgWFBhdGggewogCitjbGFzcyBMb2NhdGlvblBhdGg7CisKICNp
bmNsdWRlICJYUGF0aEdyYW1tYXIuaCIgICAgCiAKLXN0cnVjdCBBeGlzTmFtZU1hcHBpbmcgewot
ICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgU3RlcDo6QXhpc1R5cGUgdHlwZTsKLX07Ci0KLXN0
YXRpYyBBeGlzTmFtZU1hcHBpbmcgYXhpc05hbWVzW10gPSB7Ci0gICAgeyAiYW5jZXN0b3IiLCBT
dGVwOjpBbmNlc3RvckF4aXMgfSwKLSAgICB7ICJhbmNlc3Rvci1vci1zZWxmIiwgU3RlcDo6QW5j
ZXN0b3JPclNlbGZBeGlzIH0sCi0gICAgeyAiYXR0cmlidXRlIiwgU3RlcDo6QXR0cmlidXRlQXhp
cyB9LAotICAgIHsgImNoaWxkIiwgU3RlcDo6Q2hpbGRBeGlzIH0sCi0gICAgeyAiZGVzY2VuZGFu
dCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0sCi0gICAgeyAiZGVzY2VuZGFudC1vci1zZWxmIiwg
U3RlcDo6RGVzY2VuZGFudE9yU2VsZkF4aXMgfSwKLSAgICB7ICJmb2xsb3dpbmciLCBTdGVwOjpG
b2xsb3dpbmdBeGlzIH0sCi0gICAgeyAiZm9sbG93aW5nLXNpYmxpbmciLCBTdGVwOjpGb2xsb3dp
bmdTaWJsaW5nQXhpcyB9LAotICAgIHsgIm5hbWVzcGFjZSIsIFN0ZXA6Ok5hbWVzcGFjZUF4aXMg
fSwKLSAgICB7ICJwYXJlbnQiLCBTdGVwOjpQYXJlbnRBeGlzIH0sCi0gICAgeyAicHJlY2VkaW5n
IiwgU3RlcDo6UHJlY2VkaW5nQXhpcyB9LAotICAgIHsgInByZWNlZGluZy1zaWJsaW5nIiwgU3Rl
cDo6UHJlY2VkaW5nU2libGluZ0F4aXMgfSwKLSAgICB7ICJzZWxmIiwgU3RlcDo6U2VsZkF4aXMg
fQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGF4aXNOYW1lc0NvdW50ID0gc2l6ZW9mKGF4aXNOYW1l
cykgLyBzaXplb2YoYXhpc05hbWVzWzBdKTsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBub2Rl
VHlwZU5hbWVzW10gPSB7Ci0gICAgImNvbW1lbnQiLAotICAgICJ0ZXh0IiwKLSAgICAicHJvY2Vz
c2luZy1pbnN0cnVjdGlvbiIsCi0gICAgIm5vZGUiLAotICAgIDAKLX07Ci0KLUhhc2hNYXA8U3Ry
aW5nLCBTdGVwOjpBeGlzVHlwZT4qIFBhcnNlcjo6c19heGlzTmFtZXNEaWN0ID0gMDsKLUhhc2hT
ZXQ8U3RyaW5nPiogUGFyc2VyOjpzX25vZGVUeXBlTmFtZXNEaWN0ID0gMDsKLQogUGFyc2VyKiBQ
YXJzZXI6OmN1cnJlbnRQYXJzZXIgPSAwOworICAgIAorZW51bSBYTUxDYXQgeyBOYW1lU3RhcnQs
IE5hbWVDb250LCBOb3RQYXJ0T2ZOYW1lIH07CiAKLVBhcnNlcjo6WE1MQ2F0IFBhcnNlcjo6Y2hh
ckNhdChVQ2hhciBhQ2hhcikKK3N0YXRpYyBYTUxDYXQgY2hhckNhdChVQ2hhciBhQ2hhcikKIHsK
ICAgICAvLyMjIyBtaWdodCBuZWVkIHRvIGFkZCBzb21lIHNwZWNpYWwgY2FzZXMgZnJvbSB0aGUg
WE1MIHNwZWMuCiAKQEAgLTk5LDM3ICs3NSw2MiBAQAogICAgIH0KIH0KIAotYm9vbCBQYXJzZXI6
OmlzQXhpc05hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdGVwOjpBeGlzVHlwZSYgdHlwZSkKK3N0
YXRpYyB2b2lkIHNldFVwQXhpc05hbWVzTWFwKEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiYg
YXhpc05hbWVzKQogewotICAgIGlmICghc19heGlzTmFtZXNEaWN0KSB7Ci0gICAgICAgIHNfYXhp
c05hbWVzRGljdCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpc1R5cGU+OwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIHAgPSAwOyBwIDwgYXhpc05hbWVzQ291bnQ7ICsrcCkKLSAgICAgICAg
ICAgIHNfYXhpc05hbWVzRGljdC0+c2V0KGF4aXNOYW1lc1twXS5uYW1lLCBheGlzTmFtZXNbcF0u
dHlwZSk7Ci0gICAgfQorICAgIHN0cnVjdCBBeGlzTmFtZSB7CisgICAgICAgIGNvbnN0IGNoYXIq
IG5hbWU7CisgICAgICAgIFN0ZXA6OkF4aXMgYXhpczsKKyAgICB9OworICAgIGNvbnN0IEF4aXNO
YW1lIGF4aXNOYW1lTGlzdFtdID0geworICAgICAgICB7ICJhbmNlc3RvciIsIFN0ZXA6OkFuY2Vz
dG9yQXhpcyB9LAorICAgICAgICB7ICJhbmNlc3Rvci1vci1zZWxmIiwgU3RlcDo6QW5jZXN0b3JP
clNlbGZBeGlzIH0sCisgICAgICAgIHsgImF0dHJpYnV0ZSIsIFN0ZXA6OkF0dHJpYnV0ZUF4aXMg
fSwKKyAgICAgICAgeyAiY2hpbGQiLCBTdGVwOjpDaGlsZEF4aXMgfSwKKyAgICAgICAgeyAiZGVz
Y2VuZGFudCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQt
b3Itc2VsZiIsIFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZBeGlzIH0sCisgICAgICAgIHsgImZvbGxv
d2luZyIsIFN0ZXA6OkZvbGxvd2luZ0F4aXMgfSwKKyAgICAgICAgeyAiZm9sbG93aW5nLXNpYmxp
bmciLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhpcyB9LAorICAgICAgICB7ICJuYW1lc3BhY2Ui
LCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCisgICAgICAgIHsgInBhcmVudCIsIFN0ZXA6OlBhcmVu
dEF4aXMgfSwKKyAgICAgICAgeyAicHJlY2VkaW5nIiwgU3RlcDo6UHJlY2VkaW5nQXhpcyB9LAor
ICAgICAgICB7ICJwcmVjZWRpbmctc2libGluZyIsIFN0ZXA6OlByZWNlZGluZ1NpYmxpbmdBeGlz
IH0sCisgICAgICAgIHsgInNlbGYiLCBTdGVwOjpTZWxmQXhpcyB9CisgICAgfTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKGF4aXNOYW1lTGlzdCkgLyBzaXplb2YoYXhpc05h
bWVMaXN0WzBdKTsgKytpKQorICAgICAgICBheGlzTmFtZXMuc2V0KGF4aXNOYW1lTGlzdFtpXS5u
YW1lLCBheGlzTmFtZUxpc3RbaV0uYXhpcyk7Cit9CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU3Rl
cDo6QXhpc1R5cGU+OjppdGVyYXRvciBpdCA9IHNfYXhpc05hbWVzRGljdC0+ZmluZChuYW1lKTsK
K3N0YXRpYyBib29sIGlzQXhpc05hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdGVwOjpBeGlzJiB0
eXBlKQoreworICAgIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpcz4gYXhpc05hbWVz
OwogCi0gICAgaWYgKGl0ID09IHNfYXhpc05hbWVzRGljdC0+ZW5kKCkpCisgICAgaWYgKGF4aXNO
YW1lcy5pc0VtcHR5KCkpCisgICAgICAgIHNldFVwQXhpc05hbWVzTWFwKGF4aXNOYW1lcyk7CisK
KyAgICBIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpcz46Oml0ZXJhdG9yIGl0ID0gYXhpc05hbWVz
LmZpbmQobmFtZSk7CisgICAgaWYgKGl0ID09IGF4aXNOYW1lcy5lbmQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIHR5cGUgPSBpdC0+c2Vjb25kOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFBhcnNlcjo6aXNOb2RlVHlwZU5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQorc3RhdGlj
IGJvb2wgaXNOb2RlVHlwZU5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlmICghc19u
b2RlVHlwZU5hbWVzRGljdCkgewotICAgICAgICBzX25vZGVUeXBlTmFtZXNEaWN0ID0gbmV3IEhh
c2hTZXQ8U3RyaW5nPjsKLSAgICAgICAgZm9yIChpbnQgcCA9IDA7IG5vZGVUeXBlTmFtZXNbcF07
ICsrcCkKLSAgICAgICAgICAgIHNfbm9kZVR5cGVOYW1lc0RpY3QtPmFkZChub2RlVHlwZU5hbWVz
W3BdKTsKKyAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG5vZGVUeXBlTmFtZXM7CisgICAgaWYg
KG5vZGVUeXBlTmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIG5vZGVUeXBlTmFtZXMuYWRkKCJj
b21tZW50Iik7CisgICAgICAgIG5vZGVUeXBlTmFtZXMuYWRkKCJ0ZXh0Iik7CisgICAgICAgIG5v
ZGVUeXBlTmFtZXMuYWRkKCJwcm9jZXNzaW5nLWluc3RydWN0aW9uIik7CisgICAgICAgIG5vZGVU
eXBlTmFtZXMuYWRkKCJub2RlIik7CiAgICAgfQotICAgIHJldHVybiBzX25vZGVUeXBlTmFtZXNE
aWN0LT5jb250YWlucyhTdHJpbmcobmFtZSkpOworICAgIHJldHVybiBub2RlVHlwZU5hbWVzLmNv
bnRhaW5zKG5hbWUpOwogfQogCiAvKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGxhc3QgcGFyc2VkIHRv
a2VuIG1hdGNoZXMgdGhlIFszMl0gT3BlcmF0b3IgcnVsZQogICogKGNoZWNrIGh0dHA6Ly93d3cu
dzMub3JnL1RSL3hwYXRoI2V4cHJsZXgpLiBOZWNlc3NhcnkgdG8gZGlzYW1iaWd1YXRlCiAgKiB0
aGUgdG9rZW5zLgogICovCi1ib29sIFBhcnNlcjo6aXNPcGVyYXRvckNvbnRleHQoKQorYm9vbCBQ
YXJzZXI6OmlzT3BlcmF0b3JDb250ZXh0KCkgY29uc3QKIHsKICAgICBpZiAobV9uZXh0UG9zID09
IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1NywxMiArMTU4LDE4IEBACiAgICAgcmV0
dXJuIFRva2VuKGNvZGUpOwogfQogCi1Ub2tlbiBQYXJzZXI6Om1ha2VJbnRUb2tlbkFuZEFkdmFu
Y2UoaW50IGNvZGUsIGludCB2YWwsIGludCBhZHZhbmNlKQorVG9rZW4gUGFyc2VyOjptYWtlVG9r
ZW5BbmRBZHZhbmNlKGludCBjb2RlLCBOdW1lcmljT3A6Ok9wY29kZSB2YWwsIGludCBhZHZhbmNl
KQogewogICAgIG1fbmV4dFBvcyArPSBhZHZhbmNlOwogICAgIHJldHVybiBUb2tlbihjb2RlLCB2
YWwpOwogfQogCitUb2tlbiBQYXJzZXI6Om1ha2VUb2tlbkFuZEFkdmFuY2UoaW50IGNvZGUsIEVx
VGVzdE9wOjpPcGNvZGUgdmFsLCBpbnQgYWR2YW5jZSkKK3sKKyAgICBtX25leHRQb3MgKz0gYWR2
YW5jZTsKKyAgICByZXR1cm4gVG9rZW4oY29kZSwgdmFsKTsKK30KKwogLy8gUmV0dXJucyBuZXh0
IGNoYXIgaWYgaXQncyB0aGVyZSBhbmQgaW50ZXJlc3RpbmcsIDAgb3RoZXJ3aXNlCiBjaGFyIFBh
cnNlcjo6cGVla0FoZWFkSGVscGVyKCkKIHsKQEAgLTE4NywyMCArMTk0LDE5IEBACiBUb2tlbiBQ
YXJzZXI6OmxleFN0cmluZygpCiB7CiAgICAgVUNoYXIgZGVsaW1pdGVyID0gbV9kYXRhW21fbmV4
dFBvc107Ci0gICAgaW50ICAgc3RhcnRQb3MgID0gbV9uZXh0UG9zICsgMTsKKyAgICBpbnQgc3Rh
cnRQb3MgPSBtX25leHRQb3MgKyAxOwogCiAgICAgZm9yIChtX25leHRQb3MgPSBzdGFydFBvczsg
bV9uZXh0UG9zIDwgbV9kYXRhLmxlbmd0aCgpOyArK21fbmV4dFBvcykgewogICAgICAgICBpZiAo
bV9kYXRhW21fbmV4dFBvc10gPT0gZGVsaW1pdGVyKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFs
dWUgPSBtX2RhdGEuZGVwcmVjYXRlZFN0cmluZygpLm1pZChzdGFydFBvcywgbV9uZXh0UG9zIC0g
c3RhcnRQb3MpOworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gbV9kYXRhLnN1YnN0cmluZyhz
dGFydFBvcywgbV9uZXh0UG9zIC0gc3RhcnRQb3MpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmlz
TnVsbCgpKQogICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICArK21fbmV4dFBvczsgLy9Db25zdW1lIHRoZSBjaGFyOworICAgICAgICAgICAg
KyttX25leHRQb3M7IC8vIENvbnN1bWUgdGhlIGNoYXIuCiAgICAgICAgICAgICByZXR1cm4gVG9r
ZW4oTElURVJBTCwgdmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy9PdWNoLCB3ZW50
IG9mZiB0aGUgZW5kIC0tIHJlcG9ydCBlcnJvcgorICAgIC8vIE91Y2gsIHdlbnQgb2ZmIHRoZSBl
bmQgLS0gcmVwb3J0IGVycm9yLgogICAgIHJldHVybiBUb2tlbihFUlJPUik7CiB9CiAKQEAgLTIw
OSw3ICsyMTUsNyBAQAogICAgIGludCBzdGFydFBvcyA9IG1fbmV4dFBvczsKICAgICBib29sIHNl
ZW5Eb3QgPSBmYWxzZTsKIAotICAgIC8vR28gdW50aWwgZW5kIG9yIGEgbm9uLWRpZ2l0cyBjaGFy
YWN0ZXIKKyAgICAvLyBHbyB1bnRpbCBlbmQgb3IgYSBub24tZGlnaXRzIGNoYXJhY3Rlci4KICAg
ICBmb3IgKDsgbV9uZXh0UG9zIDwgbV9kYXRhLmxlbmd0aCgpOyArK21fbmV4dFBvcykgewogICAg
ICAgICBVQ2hhciBhQ2hhciA9IG1fZGF0YVttX25leHRQb3NdOwogICAgICAgICBpZiAoYUNoYXIg
Pj0gMHhmZikgYnJlYWs7CkBAIC0yMjIsNDEgKzIyOCw0OCBAQAogICAgICAgICB9CiAgICAgfQog
Ci0gICAgU3RyaW5nIHZhbHVlID0gbV9kYXRhLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoc3RhcnRQ
b3MsIG1fbmV4dFBvcyAtIHN0YXJ0UG9zKTsKLSAgICByZXR1cm4gVG9rZW4oTlVNQkVSLCB2YWx1
ZSk7CisgICAgcmV0dXJuIFRva2VuKE5VTUJFUiwgbV9kYXRhLnN1YnN0cmluZyhzdGFydFBvcywg
bV9uZXh0UG9zIC0gc3RhcnRQb3MpKTsKIH0KIAotVG9rZW4gUGFyc2VyOjpsZXhOQ05hbWUoKQor
Ym9vbCBQYXJzZXI6OmxleE5DTmFtZShTdHJpbmcmIG5hbWUpCiB7CiAgICAgaW50IHN0YXJ0UG9z
ID0gbV9uZXh0UG9zOwotICAgIGlmIChtX25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCkgJiYgY2hh
ckNhdChtX2RhdGFbbV9uZXh0UG9zXSkgPT0gTmFtZVN0YXJ0KSB7Ci0gICAgICAgIC8vS2VlcCBn
b2luZyB1bnRpbCB3ZSBnZXQgYSBjaGFyYWN0ZXIgdGhhdCdzIG5vdCBnb29kIGZvciBuYW1lcy4K
LSAgICAgICAgZm9yICg7IG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKTsgKyttX25leHRQb3Mp
IHsKLSAgICAgICAgICAgIGlmIChjaGFyQ2F0KG1fZGF0YVttX25leHRQb3NdKSA9PSBOb3RQYXJ0
T2ZOYW1lKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBTdHJpbmcgdmFsdWUgPSBtX2RhdGEuZGVwcmVjYXRlZFN0cmluZygpLm1pZChzdGFydFBv
cywgbV9uZXh0UG9zIC0gc3RhcnRQb3MpOwotICAgICAgICByZXR1cm4gVG9rZW4oRVJST1IgKyAx
LCB2YWx1ZSk7Ci0gICAgfQorICAgIGlmIChtX25leHRQb3MgPj0gbV9kYXRhLmxlbmd0aCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShF
UlJPUik7CisgICAgaWYgKGNoYXJDYXQobV9kYXRhW21fbmV4dFBvc10pICE9IE5hbWVTdGFydCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gS2VlcCBnb2luZyB1bnRpbCB3ZSBnZXQg
YSBjaGFyYWN0ZXIgdGhhdCdzIG5vdCBnb29kIGZvciBuYW1lcy4KKyAgICBmb3IgKDsgbV9uZXh0
UG9zIDwgbV9kYXRhLmxlbmd0aCgpOyArK21fbmV4dFBvcykKKyAgICAgICAgaWYgKGNoYXJDYXQo
bV9kYXRhW21fbmV4dFBvc10pID09IE5vdFBhcnRPZk5hbWUpCisgICAgICAgICAgICBicmVhazsK
KworICAgIG5hbWUgPSBtX2RhdGEuc3Vic3RyaW5nKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBzdGFy
dFBvcyk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVRva2VuIFBhcnNlcjo6bGV4UU5hbWUoKQor
Ym9vbCBQYXJzZXI6OmxleFFOYW1lKFN0cmluZyYgbmFtZSkKIHsKLSAgICBUb2tlbiB0MSA9IGxl
eE5DTmFtZSgpOwotICAgIGlmICh0MS50eXBlID09IEVSUk9SKSByZXR1cm4gdDE7CisgICAgU3Ry
aW5nIG4xOworICAgIGlmICghbGV4TkNOYW1lKG4xKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CiAgICAgc2tpcFdTKCk7Ci0gICAgLy9JZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgOiwgd2hhdCB3
ZSBqdXN0IGdvdCBpdCB0aGUgcHJlZml4LCBpZiBub3QsCi0gICAgLy9pdCdzIHRoZSB3aG9sZSB0
aGluZwotICAgIGlmIChwZWVrQWhlYWRIZWxwZXIoKSAhPSAnOicpCi0gICAgICAgIHJldHVybiB0
MTsKIAotICAgIFRva2VuIHQyID0gbGV4TkNOYW1lKCk7Ci0gICAgaWYgKHQyLnR5cGUgPT0gRVJS
T1IpIHJldHVybiB0MjsKKyAgICAvLyBJZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgOiwgd2hhdCB3
ZSBqdXN0IGdvdCBpdCB0aGUgcHJlZml4LCBpZiBub3QsCisgICAgLy8gaXQncyB0aGUgd2hvbGUg
dGhpbmcuCisgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpICE9ICc6JykgeworICAgICAgICBuYW1l
ID0gbjE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAgIHJldHVybiBUb2tlbihF
UlJPUiArIDEsIHQxLnZhbHVlICsgIjoiICsgdDIudmFsdWUpOworICAgIFN0cmluZyBuMjsKKyAg
ICBpZiAoIWxleE5DTmFtZShuMikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG5hbWUg
PSBuMSArICI6IiArIG4yOworICAgIHJldHVybiB0cnVlOwogfQogCiBUb2tlbiBQYXJzZXI6Om5l
eHRUb2tlbkludGVybmFsKCkKQEAgLTI4MSw2NyArMjk0LDYwIEBACiAgICAgICAgICAgICBjaGFy
IG5leHQgPSBwZWVrQWhlYWRIZWxwZXIoKTsKICAgICAgICAgICAgIGlmIChuZXh0ID09ICcuJykK
ICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShET1RET1QsIDIpOwot
ICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA+PSAnMCcgJiYgbmV4dCA8PSAnOScpCisgICAgICAg
ICAgICBpZiAobmV4dCA+PSAnMCcgJiYgbmV4dCA8PSAnOScpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGxleE51bWJlcigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVG9rZW5BbmRBZHZhbmNlKCcuJyk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2Vu
QW5kQWR2YW5jZSgnLicpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgJy8nOgogICAgICAgICAg
ICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICcvJykKICAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVRva2VuQW5kQWR2YW5jZShTTEFTSFNMQVNILCAyKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZSgnLycpOworICAgICAgICAg
ICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoJy8nKTsKICAgICAgICAgY2FzZSAnKyc6CiAg
ICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShQTFVTKTsKICAgICAgICAgY2Fz
ZSAnLSc6CiAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShNSU5VUyk7CiAg
ICAgICAgIGNhc2UgJz0nOgotICAgICAgICAgICAgcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFu
Y2UoRVFPUCwgRXFUZXN0T3A6Ok9QX0VRKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5B
bmRBZHZhbmNlKEVRT1AsIEVxVGVzdE9wOjpPUF9FUSk7CiAgICAgICAgIGNhc2UgJyEnOgogICAg
ICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICc9JykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShFUU9QLCBFcVRlc3RPcDo6T1BfTkUsIDIpOwot
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoRVFPUCwgRXFUZXN0
T3A6Ok9QX05FLCAyKTsKICAgICAgICAgICAgIHJldHVybiBUb2tlbihFUlJPUik7CiAgICAgICAg
IGNhc2UgJzwnOgogICAgICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICc9JykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVtZXJp
Y09wOjpPUF9MRSwgMik7Ci0KLSAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZh
bmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0xUKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVtZXJpY09wOjpPUF9MRSwgMik7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVtZXJpY09wOjpPUF9MVCk7CiAg
ICAgICAgIGNhc2UgJz4nOgogICAgICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICc9
JykKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShSRUxPUCwg
TnVtZXJpY09wOjpPUF9HRSwgMik7Ci0KLSAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9rZW5B
bmRBZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0dUKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVtZXJpY09wOjpPUF9HRSwgMik7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVtZXJpY09wOjpPUF9H
VCk7CiAgICAgICAgIGNhc2UgJyonOgogICAgICAgICAgICAgaWYgKGlzT3BlcmF0b3JDb250ZXh0
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoTVVMT1As
IE51bWVyaWNPcDo6T1BfTXVsKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICsrbV9uZXh0UG9zOwotICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbihOQU1FVEVTVCwgIioi
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnJCc6IHsvLyQgUU5hbWUKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShNVUxPUCwgTnVtZXJpY09wOjpPUF9N
dWwpOworICAgICAgICAgICAgKyttX25leHRQb3M7CisgICAgICAgICAgICByZXR1cm4gVG9rZW4o
TkFNRVRFU1QsICIqIik7CisgICAgICAgIGNhc2UgJyQnOiB7IC8vICQgUU5hbWUKICAgICAgICAg
ICAgIG1fbmV4dFBvcysrOwotICAgICAgICAgICAgVG9rZW4gcGFyID0gbGV4UU5hbWUoKTsKLSAg
ICAgICAgICAgIGlmIChwYXIudHlwZSA9PSBFUlJPUikKLSAgICAgICAgICAgICAgICByZXR1cm4g
cGFyOwotCi0gICAgICAgICAgICByZXR1cm4gVG9rZW4oVkFSSUFCTEVSRUZFUkVOQ0UsIHBhci52
YWx1ZSk7CisgICAgICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgICAgIGlmICghbGV4UU5h
bWUobmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKEVSUk9SKTsKKyAgICAgICAg
ICAgIHJldHVybiBUb2tlbihWQVJJQUJMRVJFRkVSRU5DRSwgbmFtZSk7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBUb2tlbiB0MSA9IGxleE5DTmFtZSgpOwotICAgIGlmICh0MS50eXBlID09IEVS
Uk9SKSByZXR1cm4gdDE7CisgICAgU3RyaW5nIG5hbWU7CisgICAgaWYgKCFsZXhOQ05hbWUobmFt
ZSkpCisgICAgICAgIHJldHVybiBUb2tlbihFUlJPUik7CiAKICAgICBza2lwV1MoKTsKICAgICAv
LyBJZiB3ZSdyZSBpbiBhbiBvcGVyYXRvciBjb250ZXh0LCBjaGVjayBmb3IgYW55IG9wZXJhdG9y
IG5hbWVzCiAgICAgaWYgKGlzT3BlcmF0b3JDb250ZXh0KCkpIHsKLSAgICAgICAgaWYgKHQxLnZh
bHVlID09ICJhbmQiKSAvLyMjIyBoYXNoPworICAgICAgICBpZiAobmFtZSA9PSAiYW5kIikgLy8j
IyMgaGFzaD8KICAgICAgICAgICAgIHJldHVybiBUb2tlbihBTkQpOwotICAgICAgICBpZiAodDEu
dmFsdWUgPT0gIm9yIikKKyAgICAgICAgaWYgKG5hbWUgPT0gIm9yIikKICAgICAgICAgICAgIHJl
dHVybiBUb2tlbihPUik7Ci0gICAgICAgIGlmICh0MS52YWx1ZSA9PSAibW9kIikKKyAgICAgICAg
aWYgKG5hbWUgPT0gIm1vZCIpCiAgICAgICAgICAgICByZXR1cm4gVG9rZW4oTVVMT1AsIE51bWVy
aWNPcDo6T1BfTW9kKTsKLSAgICAgICAgaWYgKHQxLnZhbHVlID09ICJkaXYiKQorICAgICAgICBp
ZiAobmFtZSA9PSAiZGl2IikKICAgICAgICAgICAgIHJldHVybiBUb2tlbihNVUxPUCwgTnVtZXJp
Y09wOjpPUF9EaXYpOwogICAgIH0KIApAQCAtMzUzLDkgKzM1OSw5IEBACiAgICAgICAgICAgICBt
X25leHRQb3MrKzsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy9JdCBtaWdodCBiZSBhbiBh
eGlzIG5hbWUuCi0gICAgICAgICAgICBTdGVwOjpBeGlzVHlwZSBheGlzVHlwZTsKLSAgICAgICAg
ICAgIGlmIChpc0F4aXNOYW1lKHQxLnZhbHVlLCBheGlzVHlwZSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFRva2VuKEFYSVNOQU1FLCBheGlzVHlwZSk7CisgICAgICAgICAgICBTdGVwOjpBeGlz
IGF4aXM7CisgICAgICAgICAgICBpZiAoaXNBeGlzTmFtZShuYW1lLCBheGlzKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVG9rZW4oQVhJU05BTUUsIGF4aXMpOwogICAgICAgICAgICAgLy8gVWdo
LCA6OiBpcyBvbmx5IHZhbGlkIGluIGF4aXMgbmFtZXMgLT4gZXJyb3IKICAgICAgICAgICAgIHJl
dHVybiBUb2tlbihFUlJPUik7CiAgICAgICAgIH0KQEAgLTM2NCwxNSArMzcwLDE1IEBACiAgICAg
ICAgIHNraXBXUygpOwogICAgICAgICBpZiAocGVla0N1ckhlbHBlcigpID09ICcqJykgewogICAg
ICAgICAgICAgbV9uZXh0UG9zKys7Ci0gICAgICAgICAgICByZXR1cm4gVG9rZW4oTkFNRVRFU1Qs
IHQxLnZhbHVlICsgIjoqIik7CisgICAgICAgICAgICByZXR1cm4gVG9rZW4oTkFNRVRFU1QsIG5h
bWUgKyAiOioiKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gTWFrZSBhIGZ1bGwg
cW5hbWUuLgotICAgICAgICBUb2tlbiB0MiA9IGxleE5DTmFtZSgpOwotICAgICAgICBpZiAodDIu
dHlwZSA9PSBFUlJPUikKLSAgICAgICAgICAgIHJldHVybiB0MjsKKyAgICAgICAgLy8gTWFrZSBh
IGZ1bGwgcW5hbWUuCisgICAgICAgIFN0cmluZyBuMjsKKyAgICAgICAgaWYgKCFsZXhOQ05hbWUo
bjIpKQorICAgICAgICAgICAgcmV0dXJuIFRva2VuKEVSUk9SKTsKICAgICAgICAgCi0gICAgICAg
IHQxLnZhbHVlID0gdDEudmFsdWUgKyAiOiIgKyB0Mi52YWx1ZTsKKyAgICAgICAgbmFtZSA9IG5h
bWUgKyAiOiIgKyBuMjsKICAgICB9CiAKICAgICBza2lwV1MoKTsKQEAgLTM4MCwxOCArMzg2LDE4
IEBACiAgICAgICAgIC8vbm90ZTogd2UgZG9uJ3Qgc3dhbGxvdyB0aGUgKGhlcmUhCiAgICAgICAg
IAogICAgICAgICAvL2VpdGhlciBub2RlIHR5cGUgb2YgZnVuY3Rpb24gbmFtZQotICAgICAgICBp
ZiAoaXNOb2RlVHlwZU5hbWUodDEudmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAodDEudmFsdWUg
PT0gInByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iKQotICAgICAgICAgICAgICAgIHJldHVybiBUb2tl
bihQSSwgdDEudmFsdWUpOworICAgICAgICBpZiAoaXNOb2RlVHlwZU5hbWUobmFtZSkpIHsKKyAg
ICAgICAgICAgIGlmIChuYW1lID09ICJwcm9jZXNzaW5nLWluc3RydWN0aW9uIikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVG9rZW4oUEksIG5hbWUpOwogCi0gICAgICAgICAgICByZXR1cm4gVG9r
ZW4oTk9ERVRZUEUsIHQxLnZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBUb2tlbihOT0RFVFlQ
RSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgLy9tdXN0IGJlIGEgZnVuY3Rpb24gbmFtZS4K
LSAgICAgICAgcmV0dXJuIFRva2VuKEZVTkNUSU9OTkFNRSwgdDEudmFsdWUpOworICAgICAgICBy
ZXR1cm4gVG9rZW4oRlVOQ1RJT05OQU1FLCBuYW1lKTsKICAgICB9CiAKLSAgICAvL0F0IHRoaXMg
cG9pbnQsIGl0IG11c3QgYmUgTkFNRVRFU1QKLSAgICByZXR1cm4gVG9rZW4oTkFNRVRFU1QsIHQx
LnZhbHVlKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50LCBpdCBtdXN0IGJlIE5BTUVURVNULgorICAg
IHJldHVybiBUb2tlbihOQU1FVEVTVCwgbmFtZSk7CiB9CiAKIFRva2VuIFBhcnNlcjo6bmV4dFRv
a2VuKCkKQEAgLTQyMCw0NiArNDI2LDgyIEBACiB7CiAgICAgWVlTVFlQRSogeXlsdmFsID0gc3Rh
dGljX2Nhc3Q8WVlTVFlQRSo+KGRhdGEpOwogICAgIFRva2VuIHRvayA9IG5leHRUb2tlbigpOwot
IAotICAgIGlmICghdG9rLnZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgIHl5bHZhbC0+c3RyID0g
bmV3IFN0cmluZyh0b2sudmFsdWUpOwotICAgICAgICByZWdpc3RlclN0cmluZyh5eWx2YWwtPnN0
cik7Ci0gICAgfSBlbHNlIGlmICh0b2suaW50VmFsdWUpCi0gICAgICAgIHl5bHZhbC0+bnVtID0g
dG9rLmludFZhbHVlOwotICAgIAorCisgICAgc3dpdGNoICh0b2sudHlwZSkgeworICAgICAgICBj
YXNlIEFYSVNOQU1FOgorICAgICAgICAgICAgeXlsdmFsLT5heGlzID0gdG9rLmF4aXM7CisgICAg
ICAgIGNhc2UgTVVMT1A6CisgICAgICAgIGNhc2UgUkVMT1A6CisgICAgICAgICAgICB5eWx2YWwt
Pm51bW9wID0gdG9rLm51bW9wOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVFP
UDoKKyAgICAgICAgICAgIHl5bHZhbC0+ZXFvcCA9IHRvay5lcW9wOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTk9ERVRZUEU6CisgICAgICAgIGNhc2UgUEk6CisgICAgICAgIGNh
c2UgRlVOQ1RJT05OQU1FOgorICAgICAgICBjYXNlIExJVEVSQUw6CisgICAgICAgIGNhc2UgVkFS
SUFCTEVSRUZFUkVOQ0U6CisgICAgICAgIGNhc2UgTlVNQkVSOgorICAgICAgICBjYXNlIE5BTUVU
RVNUOgorICAgICAgICAgICAgeXlsdmFsLT5zdHIgPSBuZXcgU3RyaW5nKHRvay5zdHIpOworICAg
ICAgICAgICAgcmVnaXN0ZXJTdHJpbmcoeXlsdmFsLT5zdHIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorCiAgICAgcmV0dXJuIHRvay50eXBlOwogfQogCiBFeHByZXNzaW9uKiBQYXJzZXI6
OnBhcnNlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICByZXNldChzdGF0ZW1lbnQpOwotICAgIAorCiAgICAgUGFyc2VyKiBvbGRQYXJz
ZXIgPSBjdXJyZW50UGFyc2VyOwogICAgIGN1cnJlbnRQYXJzZXIgPSB0aGlzOwogICAgIGludCBw
YXJzZUVycm9yID0geHBhdGh5eXBhcnNlKHRoaXMpOwogICAgIGN1cnJlbnRQYXJzZXIgPSBvbGRQ
YXJzZXI7Ci0gICAgICAgIAorCiAgICAgaWYgKHBhcnNlRXJyb3IpIHsKICAgICAgICAgZGVsZXRl
QWxsVmFsdWVzKG1fcGFyc2VOb2Rlcyk7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2V4cHJl
c3Npb25WZWN0b3JzKTsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcHJlZGljYXRlVmVjdG9y
cyk7CisgICAgICAgIG1fcGFyc2VOb2Rlcy5jbGVhcigpOworCisgICAgICAgIEhhc2hTZXQ8VmVj
dG9yPFByZWRpY2F0ZSo+Kj46Oml0ZXJhdG9yIHBlbmQgPSBtX3ByZWRpY2F0ZVZlY3RvcnMuZW5k
KCk7CisgICAgICAgIGZvciAoSGFzaFNldDxWZWN0b3I8UHJlZGljYXRlKj4qPjo6aXRlcmF0b3Ig
aXQgPSBtX3ByZWRpY2F0ZVZlY3RvcnMuYmVnaW4oKTsgaXQgIT0gcGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCoqaXQpOworICAgICAgICAgICAgZGVsZXRlICppdDsK
KyAgICAgICAgfQorICAgICAgICBtX3ByZWRpY2F0ZVZlY3RvcnMuY2xlYXIoKTsKKworICAgICAg
ICBIYXNoU2V0PFZlY3RvcjxFeHByZXNzaW9uKj4qPjo6aXRlcmF0b3IgZWVuZCA9IG1fZXhwcmVz
c2lvblZlY3RvcnMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxWZWN0b3I8RXhwcmVzc2lv
bio+Kj46Oml0ZXJhdG9yIGl0ID0gbV9leHByZXNzaW9uVmVjdG9ycy5iZWdpbigpOyBpdCAhPSBl
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKippdCk7CisgICAgICAg
ICAgICBkZWxldGUgKml0OworICAgICAgICB9CisgICAgICAgIG1fZXhwcmVzc2lvblZlY3RvcnMu
Y2xlYXIoKTsKKwogICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9zdHJpbmdzKTsKLSAgICAgICAg
CisgICAgICAgIG1fc3RyaW5ncy5jbGVhcigpOworCisgICAgICAgIG1fdG9wRXhwciA9IDA7CisK
ICAgICAgICAgaWYgKG1fZ290TmFtZXNwYWNlRXJyb3IpCiAgICAgICAgICAgICBlYyA9IE5BTUVT
UEFDRV9FUlI7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9FWFBSRVNT
SU9OX0VSUjsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJU
KG1fcGFyc2VOb2Rlcy5zaXplKCkgPT0gMSk7IC8vIFRvcCBleHByZXNzaW9uCi0gICAgICAgIEFT
U0VSVChtX2V4cHJlc3Npb25WZWN0b3JzLnNpemUoKSA9PSAwKTsKLSAgICAgICAgQVNTRVJUKG1f
cHJlZGljYXRlVmVjdG9ycy5zaXplKCkgPT0gMCk7Ci0gICAgICAgIEFTU0VSVChtX3N0cmluZ3Mu
c2l6ZSgpID09IDApOwotICAgICAgICAKLSAgICAgICAgbV9wYXJzZU5vZGVzLmNsZWFyKCk7CiAg
ICAgfQotICAgIAotICAgIHJldHVybiBtX3RvcEV4cHI7CisKKyAgICBBU1NFUlQobV9wYXJzZU5v
ZGVzLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQoKm1fcGFyc2VOb2Rlcy5iZWdpbigpID09IG1f
dG9wRXhwcik7CisgICAgQVNTRVJUKG1fZXhwcmVzc2lvblZlY3RvcnMuc2l6ZSgpID09IDApOwor
ICAgIEFTU0VSVChtX3ByZWRpY2F0ZVZlY3RvcnMuc2l6ZSgpID09IDApOworICAgIEFTU0VSVCht
X3N0cmluZ3Muc2l6ZSgpID09IDApOworCisgICAgbV9wYXJzZU5vZGVzLmNsZWFyKCk7CisgICAg
RXhwcmVzc2lvbiogcmVzdWx0ID0gbV90b3BFeHByOworICAgIG1fdG9wRXhwciA9IDA7CisKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFBhcnNlcjo6cmVnaXN0ZXJQYXJzZU5vZGUoUGFy
c2VOb2RlKiBub2RlKQpAQCAtNDkyLDcgKzUzNCw3IEBACiAgICAgbV9wcmVkaWNhdGVWZWN0b3Jz
LmFkZCh2ZWN0b3IpOwogfQogCi12b2lkIFBhcnNlcjo6dW5yZWdpc3RlclByZWRpY2F0ZVZlY3Rv
cihWZWN0b3I8UHJlZGljYXRlKj4qIHZlY3RvcikKK3ZvaWQgUGFyc2VyOjpkZWxldGVQcmVkaWNh
dGVWZWN0b3IoVmVjdG9yPFByZWRpY2F0ZSo+KiB2ZWN0b3IpCiB7CiAgICAgaWYgKHZlY3RvciA9
PSAwKQogICAgICAgICByZXR1cm47CkBAIC01MDAsNiArNTQyLDcgQEAKICAgICBBU1NFUlQobV9w
cmVkaWNhdGVWZWN0b3JzLmNvbnRhaW5zKHZlY3RvcikpOwogICAgIAogICAgIG1fcHJlZGljYXRl
VmVjdG9ycy5yZW1vdmUodmVjdG9yKTsKKyAgICBkZWxldGUgdmVjdG9yOwogfQogCiAKQEAgLTUx
MywxNCArNTU2LDE1IEBACiAgICAgbV9leHByZXNzaW9uVmVjdG9ycy5hZGQodmVjdG9yKTsgICAg
CiB9CiAKLXZvaWQgUGFyc2VyOjp1bnJlZ2lzdGVyRXhwcmVzc2lvblZlY3RvcihWZWN0b3I8RXhw
cmVzc2lvbio+KiB2ZWN0b3IpCit2b2lkIFBhcnNlcjo6ZGVsZXRlRXhwcmVzc2lvblZlY3RvcihW
ZWN0b3I8RXhwcmVzc2lvbio+KiB2ZWN0b3IpCiB7CiAgICAgaWYgKHZlY3RvciA9PSAwKQogICAg
ICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9leHByZXNzaW9uVmVjdG9ycy5jb250YWlucyh2
ZWN0b3IpKTsKICAgICAKLSAgICBtX2V4cHJlc3Npb25WZWN0b3JzLnJlbW92ZSh2ZWN0b3IpOyAg
ICAgICAgCisgICAgbV9leHByZXNzaW9uVmVjdG9ycy5yZW1vdmUodmVjdG9yKTsKKyAgICBkZWxl
dGUgdmVjdG9yOwogfQogCiB2b2lkIFBhcnNlcjo6cmVnaXN0ZXJTdHJpbmcoU3RyaW5nKiBzKQpA
QCAtNTMzLDcgKzU3Nyw3IEBACiAgICAgbV9zdHJpbmdzLmFkZChzKTsgICAgICAgIAogfQogCi12
b2lkIFBhcnNlcjo6dW5yZWdpc3RlclN0cmluZyhTdHJpbmcqIHMpCit2b2lkIFBhcnNlcjo6ZGVs
ZXRlU3RyaW5nKFN0cmluZyogcykKIHsKICAgICBpZiAocyA9PSAwKQogICAgICAgICByZXR1cm47
CkBAIC01NDEsNiArNTg1LDcgQEAKICAgICBBU1NFUlQobV9zdHJpbmdzLmNvbnRhaW5zKHMpKTsK
ICAgICAKICAgICBtX3N0cmluZ3MucmVtb3ZlKHMpOworICAgIGRlbGV0ZSBzOwogfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhQcmVkaWNhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFByZWRpY2F0ZS5jcHAJKHJldmlzaW9uIDE0NzExKQor
KysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUHJlZGljYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODAsOCArODAsOCBAQAogICAgIHJldHVybiAtcC50b051bWJlcigpOwogfQogCi1OdW1lcmlj
T3A6Ok51bWVyaWNPcChpbnQgb3BDb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24qIHJo
cykgOgotICAgIG1fb3BDb2RlKG9wQ29kZSkKK051bWVyaWNPcDo6TnVtZXJpY09wKE9wY29kZSBv
cGNvZGUsIEV4cHJlc3Npb24qIGxocywgRXhwcmVzc2lvbiogcmhzKQorICAgIDogbV9vcGNvZGUo
b3Bjb2RlKQogewogICAgIGFkZFN1YkV4cHJlc3Npb24obGhzKTsKICAgICBhZGRTdWJFeHByZXNz
aW9uKHJocyk7CkBAIC05Nyw3ICs5Nyw3IEBACiAKICAgICBkb3VibGUgbGVmdFZhbCA9IGxocy50
b051bWJlcigpLCByaWdodFZhbCA9IHJocy50b051bWJlcigpOwogCi0gICAgc3dpdGNoIChtX29w
Q29kZSkgeworICAgIHN3aXRjaCAobV9vcGNvZGUpIHsKICAgICAgICAgY2FzZSBPUF9BZGQ6CiAg
ICAgICAgICAgICByZXR1cm4gbGVmdFZhbCArIHJpZ2h0VmFsOwogICAgICAgICBjYXNlIE9QX1N1
YjoKQEAgLTEyMSw4ICsxMjEsOCBAQAogICAgIHJldHVybiBWYWx1ZSgpOwogfQogCi1FcVRlc3RP
cDo6RXFUZXN0T3AoaW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMp
IDoKLSAgICBtX29wQ29kZShvcENvZGUpCitFcVRlc3RPcDo6RXFUZXN0T3AoT3Bjb2RlIG9wY29k
ZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMpCisgICAgOiBtX29wY29kZShvcGNv
ZGUpCiB7CiAgICAgYWRkU3ViRXhwcmVzc2lvbihsaHMpOwogICAgIGFkZFN1YkV4cHJlc3Npb24o
cmhzKTsKQEAgLTEzNCwyMiArMTM0LDIxIEBACiAgICAgVmFsdWUgcmhzKHN1YkV4cHIoMSktPmV2
YWx1YXRlKCkpOwogCiAgICAgYm9vbCBlcXVhbDsKLSAgICBpZiAobGhzLmlzQm9vbGVhbigpIHx8
IHJocy5pc0Jvb2xlYW4oKSkgewotICAgICAgICBlcXVhbCA9IChsaHMudG9Cb29sZWFuKCkgPT0g
cmhzLnRvQm9vbGVhbigpKTsKLSAgICB9IGVsc2UgaWYgKGxocy5pc051bWJlcigpIHx8IHJocy5p
c051bWJlcigpKSB7Ci0gICAgICAgIGVxdWFsID0gKGxocy50b051bWJlcigpID09IHJocy50b051
bWJlcigpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlcXVhbCA9IChsaHMudG9TdHJpbmcoKSA9
PSByaHMudG9TdHJpbmcoKSk7Ci0gICAgfQorICAgIGlmIChsaHMuaXNCb29sZWFuKCkgfHwgcmhz
LmlzQm9vbGVhbigpKQorICAgICAgICBlcXVhbCA9IGxocy50b0Jvb2xlYW4oKSA9PSByaHMudG9C
b29sZWFuKCk7CisgICAgZWxzZSBpZiAobGhzLmlzTnVtYmVyKCkgfHwgcmhzLmlzTnVtYmVyKCkp
CisgICAgICAgIGVxdWFsID0gbGhzLnRvTnVtYmVyKCkgPT0gcmhzLnRvTnVtYmVyKCk7CisgICAg
ZWxzZQorICAgICAgICBlcXVhbCA9IGxocy50b1N0cmluZygpID09IHJocy50b1N0cmluZygpOwog
Ci0gICAgaWYgKG1fb3BDb2RlID09IE9QX0VRKQorICAgIGlmIChtX29wY29kZSA9PSBPUF9FUSkK
ICAgICAgICAgcmV0dXJuIGVxdWFsOwogCiAgICAgcmV0dXJuICFlcXVhbDsKIH0KIAotTG9naWNh
bE9wOjpMb2dpY2FsT3AoaW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiBy
aHMpIDoKLSAgICBtX29wQ29kZShvcENvZGUpCitMb2dpY2FsT3A6OkxvZ2ljYWxPcChPcGNvZGUg
b3Bjb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24qIHJocykKKyAgICA6IG1fb3Bjb2Rl
KG9wY29kZSkKIHsKICAgICBhZGRTdWJFeHByZXNzaW9uKGxocyk7CiAgICAgYWRkU3ViRXhwcmVz
c2lvbihyaHMpOwpAQCAtMTU3LDcgKzE1Niw3IEBACiAKIGJvb2wgTG9naWNhbE9wOjpzaG9ydENp
cmN1aXRPbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fb3BDb2RlID09IE9QX0FuZCkKKyAgICBpZiAo
bV9vcGNvZGUgPT0gT1BfQW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vZmFsc2UgYW5kIGZv
bwogCiAgICAgcmV0dXJuIHRydWU7ICAvL3RydWUgb3IgYmFyCkBAIC0yMjMsMTQgKzIyMiw5IEBA
CiAKICAgICBWYWx1ZSByZXN1bHQobV9leHByLT5ldmFsdWF0ZSgpKTsKIAotICAgIC8vIGZvb1sz
XSByZWFsbHkgbWVhbnMgZm9vW3Bvc2l0aW9uKCk9M10KLSAgICBpZiAocmVzdWx0LmlzTnVtYmVy
KCkpIHsKLSAgICAgICAgRXhwcmVzc2lvbiogcmVhbEV4cHIgPSBuZXcgRXFUZXN0T3AoRXFUZXN0
T3A6Ok9QX0VRLAotICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25MaWJyYXJ5OjpzZWxm
KCkuY3JlYXRlRnVuY3Rpb24oInBvc2l0aW9uIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBu
ZXcgTnVtYmVyKHJlc3VsdC50b051bWJlcigpKSk7Ci0gICAgICAgIHJlc3VsdCA9IHJlYWxFeHBy
LT5ldmFsdWF0ZSgpOwotICAgICAgICBkZWxldGUgcmVhbEV4cHI7Ci0gICAgfQorICAgIC8vIGZv
b1szXSBtZWFucyBmb29bcG9zaXRpb24oKT0zXQorICAgIGlmIChyZXN1bHQuaXNOdW1iZXIoKSkK
KyAgICAgICAgcmV0dXJuIEVxVGVzdE9wKEVxVGVzdE9wOjpPUF9FUSwgY3JlYXRlRnVuY3Rpb24o
InBvc2l0aW9uIiksIG5ldyBOdW1iZXIocmVzdWx0LnRvTnVtYmVyKCkpKS5ldmFsdWF0ZSgpLnRv
Qm9vbGVhbigpOwogCiAgICAgcmV0dXJuIHJlc3VsdC50b0Jvb2xlYW4oKTsKIH0KSW5kZXg6IFdl
YkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRo
L2ltcGwvWFBhdGhQYXRoLmgJKHJldmlzaW9uIDE0NzExKQorKysgV2ViQ29yZS94cGF0aC9pbXBs
L1hQYXRoUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2NyArMjMsNjcgQEAKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIFhQYXRoUGF0aF9ICiAjZGVm
aW5lIFhQYXRoUGF0aF9ICiAKICNpZiBYUEFUSF9TVVBQT1JUCiAKICNpbmNsdWRlICJYUGF0aEV4
cHJlc3Npb25Ob2RlLmgiCi0jaW5jbHVkZSAiWFBhdGhTdGVwLmgiCiAKLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CitpbnQgeHBhdGh5eXBhcnNlKHZvaWQqKTsKIAotZXh0ZXJuIGludCB4cGF0aHl5
cGFyc2Uodm9pZCopOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgWFBhdGggewot
ICAgICAgICAKLWNsYXNzIEZpbHRlciA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci1wdWJsaWM6Ci0g
ICAgRmlsdGVyKEV4cHJlc3Npb24qLCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4mID0gVmVjdG9y
PFByZWRpY2F0ZSo+KCkpOwotICAgIHZpcnR1YWwgfkZpbHRlcigpOwogCi1wcml2YXRlOgotICAg
IHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworICAgIG5hbWVzcGFjZSBYUGF0aCB7
CiAKLSAgICBFeHByZXNzaW9uKiBtX2V4cHI7Ci0gICAgVmVjdG9yPFByZWRpY2F0ZSo+IG1fcHJl
ZGljYXRlczsKLX07CisgICAgICAgIGNsYXNzIFByZWRpY2F0ZTsKKyAgICAgICAgY2xhc3MgU3Rl
cDsKIAotY2xhc3MgTG9jYXRpb25QYXRoIDogcHVibGljIEV4cHJlc3Npb24KLXsKLWZyaWVuZCBp
bnQgOjp4cGF0aHl5cGFyc2Uodm9pZCopOwotcHVibGljOgotICAgIExvY2F0aW9uUGF0aCgpOwot
ICAgIHZpcnR1YWwgfkxvY2F0aW9uUGF0aCgpOworICAgICAgICBjbGFzcyBGaWx0ZXIgOiBwdWJs
aWMgRXhwcmVzc2lvbiB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZpbHRlcihFeHBy
ZXNzaW9uKiwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiA9IFZlY3RvcjxQcmVkaWNhdGUqPigp
KTsKKyAgICAgICAgICAgIHZpcnR1YWwgfkZpbHRlcigpOwogCi0gICAgdm9pZCBvcHRpbWl6ZSgp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRl
KCkgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29u
c3Q7CisgICAgICAgICAgICBFeHByZXNzaW9uKiBtX2V4cHI7CisgICAgICAgICAgICBWZWN0b3I8
UHJlZGljYXRlKj4gbV9wcmVkaWNhdGVzOworICAgICAgICB9OwogCi0gICAgVmVjdG9yPFN0ZXAq
PiBtX3N0ZXBzOwotICAgIGJvb2wgbV9hYnNvbHV0ZTsKLX07CisgICAgICAgIGNsYXNzIExvY2F0
aW9uUGF0aCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgTG9jYXRpb25QYXRoKCk7CisgICAgICAgICAgICB2aXJ0dWFsIH5Mb2NhdGlvblBhdGgoKTsK
IAotY2xhc3MgUGF0aCA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci1wdWJsaWM6Ci0gICAgUGF0aChG
aWx0ZXIqLCBMb2NhdGlvblBhdGgqKTsKLSAgICB2aXJ0dWFsIH5QYXRoKCk7CisgICAgICAgICAg
ICB2b2lkIG9wdGltaXplKCk7CiAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1
YXRlKCkgY29uc3Q7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB2aXJ0dWFsIFZhbHVl
IGRvRXZhbHVhdGUoKSBjb25zdDsKIAotICAgIEZpbHRlciogbV9maWx0ZXI7Ci0gICAgTG9jYXRp
b25QYXRoKiBtX3BhdGg7Ci19OworICAgICAgICAgICAgVmVjdG9yPFN0ZXAqPiBtX3N0ZXBzOwor
ICAgICAgICAgICAgYm9vbCBtX2Fic29sdXRlOwogCisgICAgICAgICAgICBmcmllbmQgaW50IDo6
eHBhdGh5eXBhcnNlKHZvaWQqKTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBQYXRoIDog
cHVibGljIEV4cHJlc3Npb24KKyAgICAgICAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBQYXRoKEZpbHRlciosIExvY2F0aW9uUGF0aCopOworICAgICAgICAgICAgdmlydHVhbCB+UGF0
aCgpOworCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZh
bHVhdGUoKSBjb25zdDsKKworICAgICAgICAgICAgRmlsdGVyKiBtX2ZpbHRlcjsKKyAgICAgICAg
ICAgIExvY2F0aW9uUGF0aCogbV9wYXRoOworICAgICAgICB9OworCisgICAgfQogfQotfQogCiAj
ZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAogCiAjZW5kaWYgLy8gWFBhdGhfUGF0aF9ICi0KSW5kZXg6
IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eHBhdGgvaW1wbC9YUGF0aFBhcnNlci5oCShyZXZpc2lvbiAxNDcxMSkKKysrIFdlYkNvcmUveHBh
dGgvaW1wbC9YUGF0aFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMDIgKzI5LDkyIEBA
CiAKICNpZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQot
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotCiAj
aW5jbHVkZSAiWFBhdGhTdGVwLmgiCi0jaW5jbHVkZSAiWFBhdGhQYXRoLmgiCiAjaW5jbHVkZSAi
WFBhdGhQcmVkaWNhdGUuaCIKLSNpbmNsdWRlICJYUGF0aEV4cHJlc3Npb25Ob2RlLmgiCi0jaW5j
bHVkZSAiWFBhdGhVdGlsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBYUGF0
aCB7CiAKLXN0cnVjdCBUb2tlbiB7Ci0gICAgaW50ICAgICB0eXBlOwotICAgIFN0cmluZyB2YWx1
ZTsKLSAgICBpbnQgICAgIGludFZhbHVlOyAvLzAgaWYgbm90IHNldAotICAgIAotICAgIFRva2Vu
KGludCB0KTogdHlwZSh0KSwgaW50VmFsdWUoMCkge30KLSAgICBUb2tlbihpbnQgdCwgY29uc3Qg
U3RyaW5nJiB2KTogdHlwZSh0KSwgdmFsdWUodikge30KLSAgICBUb2tlbihpbnQgdCwgaW50IHYp
OiB0eXBlKHQpLCBpbnRWYWx1ZSh2KSB7fQotfTsKKyAgICB0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwogCi1jbGFzcyBQYXJzZXIgOiBOb25jb3B5YWJsZQotewotcHJpdmF0ZToKLSAgICBzdGF0
aWMgUGFyc2VyKiBjdXJyZW50UGFyc2VyOwotICAgIAotICAgIHVuc2lnbmVkIG1fbmV4dFBvczsK
LSAgICBTdHJpbmcgbV9kYXRhOwotICAgIGludCBtX2xhc3RUb2tlblR5cGU7Ci0gICAgCi0gICAg
c3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlwZT4qIHNfYXhpc05hbWVzRGljdDsK
LSAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+KiBzX25vZGVUeXBlTmFtZXNEaWN0OwotICAgIAot
ICAgIGVudW0gWE1MQ2F0IHsKLSAgICAgICAgTmFtZVN0YXJ0LAotICAgICAgICBOYW1lQ29udCwK
LSAgICAgICAgTm90UGFydE9mTmFtZQotICAgIH07Ci0gICAgCi0gICAgWE1MQ2F0IGNoYXJDYXQo
VUNoYXIpOwotICAgIAotICAgIGJvb2wgaXNBeGlzTmFtZShjb25zdCBTdHJpbmcmIG5hbWUsIFN0
ZXA6OkF4aXNUeXBlICZ0eXBlKTsKLSAgICBib29sIGlzTm9kZVR5cGVOYW1lKGNvbnN0IFN0cmlu
ZyYgbmFtZSk7Ci0gICAgYm9vbCBpc09wZXJhdG9yQ29udGV4dCgpOwotICAgIAotICAgIHZvaWQg
IHNraXBXUygpOwotICAgIFRva2VuIG1ha2VUb2tlbkFuZEFkdmFuY2UoaW50IGNvZGUsIGludCBh
ZHZhbmNlID0gMSk7Ci0gICAgVG9rZW4gbWFrZUludFRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwg
aW50IHZhbCwgaW50IGFkdmFuY2UgPSAxKTsKLSAgICBjaGFyICBwZWVrQWhlYWRIZWxwZXIoKTsK
LSAgICBjaGFyICBwZWVrQ3VySGVscGVyKCk7Ci0gICAgCi0gICAgVG9rZW4gbGV4U3RyaW5nKCk7
Ci0gICAgVG9rZW4gbGV4TnVtYmVyKCk7Ci0gICAgVG9rZW4gbGV4TkNOYW1lKCk7Ci0gICAgVG9r
ZW4gbGV4UU5hbWUoKTsKLSAgICAKLSAgICBUb2tlbiBuZXh0VG9rZW4oKTsKLSAgICBUb2tlbiBu
ZXh0VG9rZW5JbnRlcm5hbCgpOwotICAgIAotICAgIHZvaWQgcmVzZXQoY29uc3QgU3RyaW5nJiBk
YXRhKTsKLSAgICAKLSAgICBIYXNoU2V0PFBhcnNlTm9kZSo+IG1fcGFyc2VOb2RlczsKLSAgICBI
YXNoU2V0PFZlY3RvcjxQcmVkaWNhdGUqPio+IG1fcHJlZGljYXRlVmVjdG9yczsKLSAgICBIYXNo
U2V0PFZlY3RvcjxFeHByZXNzaW9uKj4qPiBtX2V4cHJlc3Npb25WZWN0b3JzOwotICAgIEhhc2hT
ZXQ8U3RyaW5nKj4gbV9zdHJpbmdzOworICAgIG5hbWVzcGFjZSBYUGF0aCB7CiAKLXB1YmxpYzoK
LSAgICBQYXJzZXIoKTsKLSAgICAKLSAgICBFeHByZXNzaW9uKiBwYXJzZVN0YXRlbWVudChjb25z
dCBTdHJpbmcmIHN0YXRlbWVudCwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBjbGFzcyBFeHBy
ZXNzaW9uOworICAgICAgICBjbGFzcyBQYXJzZU5vZGU7CisgICAgICAgIGNsYXNzIFByZWRpY2F0
ZTsKIAotICAgIHN0YXRpYyBQYXJzZXIqIGN1cnJlbnQoKSB7IHJldHVybiBjdXJyZW50UGFyc2Vy
OyB9Ci0gICAgICAgICAgCi0gICAgaW50IGxleCh2b2lkKiB5eWx2YWwpOworICAgICAgICBzdHJ1
Y3QgVG9rZW4geworICAgICAgICAgICAgaW50IHR5cGU7CisgICAgICAgICAgICBTdHJpbmcgc3Ry
OworICAgICAgICAgICAgU3RlcDo6QXhpcyBheGlzOworICAgICAgICAgICAgTnVtZXJpY09wOjpP
cGNvZGUgbnVtb3A7CisgICAgICAgICAgICBFcVRlc3RPcDo6T3Bjb2RlIGVxb3A7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFRva2VuKGludCB0KSA6IHR5cGUodCkge30KKyAgICAgICAgICAg
IFRva2VuKGludCB0LCBjb25zdCBTdHJpbmcmIHYpOiB0eXBlKHQpLCBzdHIodikge30KKyAgICAg
ICAgICAgIFRva2VuKGludCB0LCBTdGVwOjpBeGlzIHYpOiB0eXBlKHQpLCBheGlzKHYpIHt9Cisg
ICAgICAgICAgICBUb2tlbihpbnQgdCwgTnVtZXJpY09wOjpPcGNvZGUgdik6IHR5cGUodCksIG51
bW9wKHYpIHt9CisgICAgICAgICAgICBUb2tlbihpbnQgdCwgRXFUZXN0T3A6Ok9wY29kZSB2KTog
dHlwZSh0KSwgZXFvcCh2KSB7fQorICAgICAgICB9OwogCi0gICAgRXhwcmVzc2lvbiogbV90b3BF
eHByOwotICAgIGJvb2wgbV9nb3ROYW1lc3BhY2VFcnJvcjsKLSAgICAKLSAgICB2b2lkIHJlZ2lz
dGVyUGFyc2VOb2RlKFBhcnNlTm9kZSopOwotICAgIHZvaWQgdW5yZWdpc3RlclBhcnNlTm9kZShQ
YXJzZU5vZGUqKTsKLSAgICAKLSAgICB2b2lkIHJlZ2lzdGVyUHJlZGljYXRlVmVjdG9yKFZlY3Rv
cjxQcmVkaWNhdGUqPiopOwotICAgIHZvaWQgdW5yZWdpc3RlclByZWRpY2F0ZVZlY3RvcihWZWN0
b3I8UHJlZGljYXRlKj4qKTsKKyAgICAgICAgY2xhc3MgUGFyc2VyIDogTm9uY29weWFibGUgewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBQYXJzZXIoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgRXhwcmVzc2lvbiogcGFyc2VTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzdGF0ZW1l
bnQsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIHZvaWQgcmVnaXN0ZXJFeHByZXNzaW9uVmVjdG9y
KFZlY3RvcjxFeHByZXNzaW9uKj4qKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJFeHByZXNzaW9uVmVj
dG9yKFZlY3RvcjxFeHByZXNzaW9uKj4qKTsKLSAgICAKLSAgICB2b2lkIHJlZ2lzdGVyU3RyaW5n
KFN0cmluZyopOwotICAgIHZvaWQgdW5yZWdpc3RlclN0cmluZyhTdHJpbmcqKTsKLX07CisgICAg
ICAgICAgICBzdGF0aWMgUGFyc2VyKiBjdXJyZW50KCkgeyByZXR1cm4gY3VycmVudFBhcnNlcjsg
fQorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7
CiAKKyAgICAgICAgICAgIEV4cHJlc3Npb24qIG1fdG9wRXhwcjsKKyAgICAgICAgICAgIGJvb2wg
bV9nb3ROYW1lc3BhY2VFcnJvcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9pZCByZWdp
c3RlclBhcnNlTm9kZShQYXJzZU5vZGUqKTsKKyAgICAgICAgICAgIHZvaWQgdW5yZWdpc3RlclBh
cnNlTm9kZShQYXJzZU5vZGUqKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9pZCByZWdp
c3RlclByZWRpY2F0ZVZlY3RvcihWZWN0b3I8UHJlZGljYXRlKj4qKTsKKyAgICAgICAgICAgIHZv
aWQgZGVsZXRlUHJlZGljYXRlVmVjdG9yKFZlY3RvcjxQcmVkaWNhdGUqPiopOworCisgICAgICAg
ICAgICB2b2lkIHJlZ2lzdGVyRXhwcmVzc2lvblZlY3RvcihWZWN0b3I8RXhwcmVzc2lvbio+Kik7
CisgICAgICAgICAgICB2b2lkIGRlbGV0ZUV4cHJlc3Npb25WZWN0b3IoVmVjdG9yPEV4cHJlc3Np
b24qPiopOworICAgICAgICAgICAgCisgICAgICAgICAgICB2b2lkIHJlZ2lzdGVyU3RyaW5nKFN0
cmluZyopOworICAgICAgICAgICAgdm9pZCBkZWxldGVTdHJpbmcoU3RyaW5nKik7CisKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGJvb2wgaXNPcGVyYXRvckNvbnRleHQoKSBjb25zdDsK
KworICAgICAgICAgICAgdm9pZCBza2lwV1MoKTsKKyAgICAgICAgICAgIFRva2VuIG1ha2VUb2tl
bkFuZEFkdmFuY2UoaW50IHR5cGUsIGludCBhZHZhbmNlID0gMSk7CisgICAgICAgICAgICBUb2tl
biBtYWtlVG9rZW5BbmRBZHZhbmNlKGludCB0eXBlLCBOdW1lcmljT3A6Ok9wY29kZSwgaW50IGFk
dmFuY2UgPSAxKTsKKyAgICAgICAgICAgIFRva2VuIG1ha2VUb2tlbkFuZEFkdmFuY2UoaW50IHR5
cGUsIEVxVGVzdE9wOjpPcGNvZGUsIGludCBhZHZhbmNlID0gMSk7CisgICAgICAgICAgICBjaGFy
IHBlZWtBaGVhZEhlbHBlcigpOworICAgICAgICAgICAgY2hhciBwZWVrQ3VySGVscGVyKCk7CisK
KyAgICAgICAgICAgIFRva2VuIGxleFN0cmluZygpOworICAgICAgICAgICAgVG9rZW4gbGV4TnVt
YmVyKCk7CisgICAgICAgICAgICBib29sIGxleE5DTmFtZShTdHJpbmcmKTsKKyAgICAgICAgICAg
IGJvb2wgbGV4UU5hbWUoU3RyaW5nJik7CisKKyAgICAgICAgICAgIFRva2VuIG5leHRUb2tlbigp
OworICAgICAgICAgICAgVG9rZW4gbmV4dFRva2VuSW50ZXJuYWwoKTsKKworICAgICAgICAgICAg
dm9pZCByZXNldChjb25zdCBTdHJpbmcmIGRhdGEpOworCisgICAgICAgICAgICBzdGF0aWMgUGFy
c2VyKiBjdXJyZW50UGFyc2VyOworCisgICAgICAgICAgICB1bnNpZ25lZCBtX25leHRQb3M7Cisg
ICAgICAgICAgICBTdHJpbmcgbV9kYXRhOworICAgICAgICAgICAgaW50IG1fbGFzdFRva2VuVHlw
ZTsKKworICAgICAgICAgICAgSGFzaFNldDxQYXJzZU5vZGUqPiBtX3BhcnNlTm9kZXM7CisgICAg
ICAgICAgICBIYXNoU2V0PFZlY3RvcjxQcmVkaWNhdGUqPio+IG1fcHJlZGljYXRlVmVjdG9yczsK
KyAgICAgICAgICAgIEhhc2hTZXQ8VmVjdG9yPEV4cHJlc3Npb24qPio+IG1fZXhwcmVzc2lvblZl
Y3RvcnM7CisgICAgICAgICAgICBIYXNoU2V0PFN0cmluZyo+IG1fc3RyaW5nczsKKyAgICAgICAg
fTsKKworICAgIH0KIH0KLX0KIAogI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKIApJbmRleDogV2Vi
Q29yZS94cGF0aC9pbXBsL1hQYXRoVmFyaWFibGVSZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmNwcAkocmV2aXNpb24g
MTQ3MTEpCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxMSBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJYUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmgiCiAKICNpZiBYUEFUSF9T
VVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmgiCi0KLSNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJYUGF0aFZh
bHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDEyICs0NywxMSBAQAogCiBWYWx1
ZSBWYXJpYWJsZVJlZmVyZW5jZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0CiB7Ci0gICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4qIGJpbmRpbmdzID0gJmV2YWx1YXRpb25Db250ZXh0KCkudmFyaWFibGVC
aW5kaW5nczsKLSAgICBpZiAoIWJpbmRpbmdzLT5jb250YWlucyhtX25hbWUpKQotICAgICAgICAv
LyBGSVhNRSBXaGF0IHRvIGRvIGlmIGFuIHVua25vd24gdmFyaWFibGUgaXMgcmVmZXJlbmNlZD8K
KyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgYmluZGluZ3MgPSBldmFsdWF0aW9uQ29udGV4
dCgpLnZhcmlhYmxlQmluZGluZ3M7CisgICAgaWYgKCFiaW5kaW5ncy5jb250YWlucyhtX25hbWUp
KQorICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gaWYgYW4g
dW5rbm93biB2YXJpYWJsZSBpcyByZWZlcmVuY2VkPwogICAgICAgICByZXR1cm4gIiI7Ci0KLSAg
ICByZXR1cm4gYmluZGluZ3MtPmdldChtX25hbWUpOworICAgIHJldHVybiBiaW5kaW5ncy5nZXQo
bV9uYW1lKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUHJlZGljYXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUHJlZGljYXRlLmgJKHJl
dmlzaW9uIDE0NzExKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUHJlZGljYXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogcHJlZGljYXRlLmggLSBDb3B5cmln
aHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IDIwMDUg
RnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjMsNiArMjMsNyBAQAogICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgWFBhdGhQcmVkaWNh
dGVfSAogI2RlZmluZSBYUGF0aFByZWRpY2F0ZV9ICiAKQEAgLTMxLDEyNiArMzIsODMgQEAKICNp
bmNsdWRlICJYUGF0aEV4cHJlc3Npb25Ob2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLW5h
bWVzcGFjZSBYUGF0aCB7CisKKyAgICBuYW1lc3BhY2UgWFBhdGggewogICAgICAgICAKLWNsYXNz
IE51bWJlciA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci1wdWJsaWM6Ci0gICAgTnVtYmVyKGRvdWJs
ZSB2YWx1ZSk7CisgICAgICAgIGNsYXNzIE51bWJlciA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgTnVtYmVyKGRvdWJsZSk7CisgICAgICAgICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworICAgICAgICAgICAgZG91YmxlIG1fdmFs
dWU7CisgICAgICAgIH07CiAKLSAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKyAgICAgICAg
Y2xhc3MgU3RyaW5nRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgU3RyaW5nRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICAg
ICAgICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisgICAgICAgICAgICBTdHJp
bmcgbV92YWx1ZTsKKyAgICAgICAgfTsKIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFZhbHVlIGRv
RXZhbHVhdGUoKSBjb25zdDsKKyAgICAgICAgY2xhc3MgTmVnYXRpdmUgOiBwdWJsaWMgRXhwcmVz
c2lvbiB7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZh
bHVhdGUoKSBjb25zdDsKKyAgICAgICAgfTsKIAotICAgIGRvdWJsZSBtX3ZhbHVlOwotfTsKKyAg
ICAgICAgY2xhc3MgTnVtZXJpY09wIDogcHVibGljIEV4cHJlc3Npb24geworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBlbnVtIE9wY29kZSB7CisgICAgICAgICAgICAgICAgT1BfQWRkLCBP
UF9TdWIsIE9QX011bCwgT1BfRGl2LCBPUF9Nb2QsCisgICAgICAgICAgICAgICAgT1BfR1QsIE9Q
X0xULCBPUF9HRSwgT1BfTEUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBOdW1lcmljT3Ao
T3Bjb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24qIHJocyk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKyAgICAg
ICAgICAgIE9wY29kZSBtX29wY29kZTsKKyAgICAgICAgfTsKIAotY2xhc3MgU3RyaW5nRXhwcmVz
c2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci1wdWJsaWM6Ci0gICAgU3RyaW5nRXhwcmVzc2lv
bihjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICAgICAgY2xhc3MgRXFUZXN0T3AgOiBwdWJsaWMg
RXhwcmVzc2lvbiB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGVudW0gT3Bjb2RlIHsg
T1BfRVEsIE9QX05FIH07CisgICAgICAgICAgICBFcVRlc3RPcChPcGNvZGUsIEV4cHJlc3Npb24q
IGxocywgRXhwcmVzc2lvbiogcmhzKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworICAgICAgICAgICAgT3Bjb2RlIG1fb3Bj
b2RlOworICAgICAgICB9OwogCi0gICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisgICAgICAg
IGNsYXNzIExvZ2ljYWxPcCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICAgICAgcHVibGljOgor
ICAgICAgICAgICAgZW51bSBPcGNvZGUgeyBPUF9BbmQsIE9QX09yIH07CisgICAgICAgICAgICBM
b2dpY2FsT3AoT3Bjb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24qIHJocyk7CisgICAg
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgYm9vbCBzaG9ydENpcmN1aXRPbigpIGNvbnN0OworICAgICAgICAgICAg
dmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisgICAgICAgICAgICBPcGNvZGUgbV9v
cGNvZGU7CisgICAgICAgIH07CiAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1
YXRlKCkgY29uc3Q7CisgICAgICAgIGNsYXNzIFVuaW9uIDogcHVibGljIEV4cHJlc3Npb24gewor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkg
Y29uc3Q7CisgICAgICAgIH07CiAKLSAgICBTdHJpbmcgbV92YWx1ZTsKLX07CisgICAgICAgIGNs
YXNzIFByZWRpY2F0ZSA6IE5vbmNvcHlhYmxlIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgUHJlZGljYXRlKEV4cHJlc3Npb24qKTsKKyAgICAgICAgICAgIH5QcmVkaWNhdGUoKTsKKyAg
ICAgICAgICAgIGJvb2wgZXZhbHVhdGUoKSBjb25zdDsKKyAgICAgICAgICAgIHZvaWQgb3B0aW1p
emUoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEV4cHJlc3Npb24qIG1fZXhwcjsK
KyAgICAgICAgfTsKIAotY2xhc3MgTmVnYXRpdmUgOiBwdWJsaWMgRXhwcmVzc2lvbgotewotcHJp
dmF0ZToKLSAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKLX07CisgICAgfQog
Ci1jbGFzcyBCaW5hcnlFeHByQmFzZSA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci19OwotCi1jbGFz
cyBOdW1lcmljT3AgOiBwdWJsaWMgQmluYXJ5RXhwckJhc2UKLXsKLXB1YmxpYzoKLSAgICBlbnVt
IHsKLSAgICAgICAgT1BfQWRkID0gMSwKLSAgICAgICAgT1BfU3ViLAotICAgICAgICBPUF9NdWws
Ci0gICAgICAgIE9QX0RpdiwKLSAgICAgICAgT1BfTW9kLAotICAgICAgICBPUF9HVCwKLSAgICAg
ICAgT1BfTFQsCi0gICAgICAgIE9QX0dFLAotICAgICAgICBPUF9MRQotICAgIH07Ci0KLSAgICBO
dW1lcmljT3AoaW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMpOwot
Ci1wcml2YXRlOgotICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OwotICAgIGlu
dCBtX29wQ29kZTsKLX07Ci0KLWNsYXNzIEVxVGVzdE9wIDogcHVibGljIEJpbmFyeUV4cHJCYXNl
Ci17Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE9QX0VRID0gMSwKLSAgICAgICAgT1Bf
TkUKLSAgICB9OwotCi0gICAgRXFUZXN0T3AoaW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBF
eHByZXNzaW9uKiByaHMpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0
ZSgpIGNvbnN0OwotICAgIGludCBtX29wQ29kZTsKLX07Ci0KLWNsYXNzIExvZ2ljYWxPcCA6IHB1
YmxpYyBCaW5hcnlFeHByQmFzZQotewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBPUF9B
bmQgPSAxLAotICAgICAgICBPUF9PcgotICAgIH07Ci0KLSAgICBMb2dpY2FsT3AoaW50IG9wQ29k
ZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMpOwotCi0gICAgdmlydHVhbCBib29s
IGlzQ29uc3RhbnQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBib29sIHNob3J0Q2lyY3VpdE9u
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Ci0gICAgaW50
IG1fb3BDb2RlOwotfTsKLQotY2xhc3MgVW5pb24gOiBwdWJsaWMgQmluYXJ5RXhwckJhc2UKLXsK
LXByaXZhdGU6Ci0gICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Ci19OwotCi1j
bGFzcyBQcmVkaWNhdGUKLXsKLXB1YmxpYzoKLSAgICBQcmVkaWNhdGUoRXhwcmVzc2lvbiopOwot
ICAgIH5QcmVkaWNhdGUoKTsKLQotICAgIGJvb2wgZXZhbHVhdGUoKSBjb25zdDsKLQotICAgIHZv
aWQgb3B0aW1pemUoKTsKLQotcHJpdmF0ZToKLSAgICBQcmVkaWNhdGUoY29uc3QgUHJlZGljYXRl
ICZyaHMpOwotICAgIFByZWRpY2F0ZSAmb3BlcmF0b3I9KGNvbnN0IFByZWRpY2F0ZSAmcmhzKTsK
LQotICAgIEV4cHJlc3Npb24qIG1fZXhwcjsKLX07Ci0KIH0KLX0KIAogI2VuZGlmIC8vIFhQQVRI
X1NVUFBPUlQKIAotI2VuZGlmIC8vIFBSRURJQ0FURV9ICi0KKyNlbmRpZiAvLyBYUGF0aFByZWRp
Y2F0ZV9ICkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhFeHByZXNzaW9uTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoRXhwcmVzc2lvbk5vZGUuY3Bw
CShyZXZpc2lvbiAxNDcxMSkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEV4cHJlc3Npb25O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTggKzI1LDEzIEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbk5vZGUuaCIKIAogI2lmIFhQ
QVRIX1NVUFBPUlQKIAotI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbk5vZGUuaCIKLQotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiWFBhdGhWYWx1ZS5o
IgotI2luY2x1ZGUgPG1hdGguaD4KIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKICAgICAKQEAgLTExNyw0ICsxMTIsMyBAQAog
fQogCiAjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAotCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwv
WFBhdGhGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0
aEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDE0NzExKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQ
YXRoRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzggKzI1LDIyIEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhQYXRoRnVuY3Rpb25zLmgiCiAKICNp
ZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0aEZ1bmN0aW9ucy5oIgotCi0jaW5jbHVk
ZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIk5hbWVkQXR0ck1hcC5oIgotI2luY2x1
ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJYUGF0aFZhbHVlLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZmRlZiBfTVNDX1ZFUiAvLyBObyByb3Vu
ZCgpIGluIHN0YW5kYXJkIEMgbGlicmFyeSBmb3IgVmlzdWFsIFN0dWRpbwotc3RhdGljIGRvdWJs
ZSByb3VuZChkb3VibGUgdmFsKQotewotICAgIGRvdWJsZSB2YWxGbG9vciA9IGZsb29yKHZhbCk7
Ci0gICAgaWYgKHZhbCA+PSAwKQotICAgICAgICByZXR1cm4gKHZhbCAtIHZhbEZsb29yIDwgMC41
KSA/IHZhbEZsb29yIDogKHZhbEZsb29yKzEuMCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4g
KHZhbCAtIHZhbEZsb29yIDw9IDAuNSkgPyB2YWxGbG9vciA6ICh2YWxGbG9vcisxLjApOwotfQot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBYUGF0aCB7CiAgICAgICAg
IAotI2RlZmluZSBERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihDbGFzcykgXAotc3RhdGljIEZ1bmN0
aW9uICpjcmVhdGUjI0NsYXNzKCkgeyByZXR1cm4gbmV3IENsYXNzOyB9CisjZGVmaW5lIERFRklO
RV9GVU5DVElPTl9DUkVBVE9SKENsYXNzKSBzdGF0aWMgRnVuY3Rpb24qIGNyZWF0ZSMjQ2xhc3Mo
KSB7IHJldHVybiBuZXcgQ2xhc3M7IH0KIAotY2xhc3MgSW50ZXJ2YWwKLXsKK2NsYXNzIEludGVy
dmFsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgaW50IEluZiA9LTE7CisgICAgc3RhdGlj
IGNvbnN0IGludCBJbmYgPSAtMTsKIAogICAgIEludGVydmFsKCk7CiAgICAgSW50ZXJ2YWwoaW50
IHZhbHVlKTsKQEAgLTY0LDE5MyArNDgsMTI5IEBACiAKICAgICBib29sIGNvbnRhaW5zKGludCB2
YWx1ZSkgY29uc3Q7CiAKLSAgICBTdHJpbmcgYXNTdHJpbmcoKSBjb25zdDsKLQogcHJpdmF0ZToK
ICAgICBpbnQgbV9taW47CiAgICAgaW50IG1fbWF4OwogfTsKIAotY2xhc3MgRnVuTGFzdCA6IHB1
YmxpYyBGdW5jdGlvbgotewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkg
Y29uc3Q7CitzdHJ1Y3QgRnVuY3Rpb25SZWMgeworICAgIHR5cGVkZWYgRnVuY3Rpb24gKigqRmFj
dG9yeUZuKSgpOworICAgIEZhY3RvcnlGbiBmYWN0b3J5Rm47CisgICAgSW50ZXJ2YWwgYXJnczsK
K307CiAKLXByaXZhdGU6CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVjPiogZnVu
Y3Rpb25NYXA7CisKK2NsYXNzIEZ1bkxhc3QgOiBwdWJsaWMgRnVuY3Rpb24geworICAgIHZpcnR1
YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRl
KCkgY29uc3Q7CiB9OwogCi1jbGFzcyBGdW5Qb3NpdGlvbiA6IHB1YmxpYyBGdW5jdGlvbgotewot
cHVibGljOgorY2xhc3MgRnVuUG9zaXRpb24gOiBwdWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1
YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7Ci0KLXByaXZhdGU6CiAgICAgdmlydHVhbCBWYWx1
ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBGdW5Db3VudCA6IHB1YmxpYyBGdW5j
dGlvbgotewotcHVibGljOgorY2xhc3MgRnVuQ291bnQgOiBwdWJsaWMgRnVuY3Rpb24gewogICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7Ci0KLXByaXZhdGU6CiAgICAgdmlydHVh
bCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBGdW5Mb2NhbE5hbWUgOiBw
dWJsaWMgRnVuY3Rpb24KLXsKLXB1YmxpYzoKK2NsYXNzIEZ1bkxvY2FsTmFtZSA6IHB1YmxpYyBG
dW5jdGlvbiB7CiAgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKLQotcHJpdmF0
ZToKICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1
bk5hbWVzcGFjZVVSSSA6IHB1YmxpYyBGdW5jdGlvbgotewotcHVibGljOgorY2xhc3MgRnVuTmFt
ZXNwYWNlVVJJIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFu
dCgpIGNvbnN0OwotCi1wcml2YXRlOgogICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNv
bnN0OwogfTsKIAotY2xhc3MgRnVuTmFtZSA6IHB1YmxpYyBGdW5jdGlvbgotewotcHVibGljOgor
Y2xhc3MgRnVuTmFtZSA6IHB1YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBib29sIGlzQ29u
c3RhbnQoKSBjb25zdDsKLQotcHJpdmF0ZToKICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUo
KSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1blN0cmluZyA6IHB1YmxpYyBGdW5jdGlvbgotewotcHJp
dmF0ZToKK2NsYXNzIEZ1blN0cmluZyA6IHB1YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBW
YWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBGdW5Db25jYXQgOiBwdWJsaWMg
RnVuY3Rpb24KLXsKLXByaXZhdGU6CitjbGFzcyBGdW5Db25jYXQgOiBwdWJsaWMgRnVuY3Rpb24g
ewogICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OwogfTsKIAotY2xhc3MgRnVu
U3RhcnRzV2l0aCA6IHB1YmxpYyBGdW5jdGlvbgotewotcHJpdmF0ZToKK2NsYXNzIEZ1blN0YXJ0
c1dpdGggOiBwdWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgp
IGNvbnN0OwogfTsKIAotY2xhc3MgRnVuQ29udGFpbnMgOiBwdWJsaWMgRnVuY3Rpb24KLXsKLXBy
aXZhdGU6CitjbGFzcyBGdW5Db250YWlucyA6IHB1YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVh
bCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBGdW5TdWJzdHJpbmdCZWZv
cmUgOiBwdWJsaWMgRnVuY3Rpb24KLXsKLXByaXZhdGU6CitjbGFzcyBGdW5TdWJzdHJpbmdCZWZv
cmUgOiBwdWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNv
bnN0OwogfTsKIAotY2xhc3MgRnVuU3Vic3RyaW5nQWZ0ZXIgOiBwdWJsaWMgRnVuY3Rpb24KLXsK
LXByaXZhdGU6CitjbGFzcyBGdW5TdWJzdHJpbmdBZnRlciA6IHB1YmxpYyBGdW5jdGlvbiB7CiAg
ICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBGdW5TdWJz
dHJpbmcgOiBwdWJsaWMgRnVuY3Rpb24KLXsKLXByaXZhdGU6CitjbGFzcyBGdW5TdWJzdHJpbmcg
OiBwdWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0
OwogfTsKIAotY2xhc3MgRnVuU3RyaW5nTGVuZ3RoIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wcml2
YXRlOgorY2xhc3MgRnVuU3RyaW5nTGVuZ3RoIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0
dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1bk5vcm1hbGl6ZVNw
YWNlIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wcml2YXRlOgorY2xhc3MgRnVuTm9ybWFsaXplU3Bh
Y2UgOiBwdWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNv
bnN0OwogfTsKIAotY2xhc3MgRnVuVHJhbnNsYXRlIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wcml2
YXRlOgorY2xhc3MgRnVuVHJhbnNsYXRlIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFs
IFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1bkJvb2xlYW4gOiBwdWJs
aWMgRnVuY3Rpb24KLXsKLXByaXZhdGU6CitjbGFzcyBGdW5Cb29sZWFuIDogcHVibGljIEZ1bmN0
aW9uIHsKICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNz
IEZ1bk5vdCA6IHB1YmxpYyBGdW5jdGlvbgotewotcHJpdmF0ZToKK2NsYXNzIEZ1bk5vdCA6IHB1
YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9
OwogCi1jbGFzcyBGdW5UcnVlIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wdWJsaWM6CitjbGFzcyBG
dW5UcnVlIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgp
IGNvbnN0OwotCi1wcml2YXRlOgogICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0
OwogfTsKIAotY2xhc3MgRnVuRmFsc2UgOiBwdWJsaWMgRnVuY3Rpb24KLXsKLXB1YmxpYzoKK2Ns
YXNzIEZ1bkZhbHNlIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb25z
dGFudCgpIGNvbnN0OwotCi1wcml2YXRlOgogICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgp
IGNvbnN0OwogfTsKIAotY2xhc3MgRnVuTGFuZyA6IHB1YmxpYyBGdW5jdGlvbgotewotcHVibGlj
OgorY2xhc3MgRnVuTGFuZyA6IHB1YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBib29sIGlz
Q29uc3RhbnQoKSBjb25zdDsKLQotcHJpdmF0ZToKICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVh
dGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1bk51bWJlciA6IHB1YmxpYyBGdW5jdGlvbgotewot
cHJpdmF0ZToKK2NsYXNzIEZ1bk51bWJlciA6IHB1YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVh
bCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBGdW5TdW0gOiBwdWJsaWMg
RnVuY3Rpb24KLXsKLXByaXZhdGU6CitjbGFzcyBGdW5TdW0gOiBwdWJsaWMgRnVuY3Rpb24gewog
ICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OwogfTsKIAotY2xhc3MgRnVuRmxv
b3IgOiBwdWJsaWMgRnVuY3Rpb24KLXsKLXByaXZhdGU6CitjbGFzcyBGdW5GbG9vciA6IHB1Ymxp
YyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9Owog
Ci1jbGFzcyBGdW5DZWlsaW5nIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wcml2YXRlOgorY2xhc3Mg
RnVuQ2VpbGluZyA6IHB1YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1
YXRlKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBGdW5Sb3VuZCA6IHB1YmxpYyBGdW5jdGlvbgotewot
cHJpdmF0ZToKK2NsYXNzIEZ1blJvdW5kIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFs
IFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKIH07CiAKQEAgLTI4NiwyNSArMjA2LDIyIEBACiAK
ICN1bmRlZiBERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUgogCi1JbnRlcnZhbDo6SW50ZXJ2YWwoKQot
ICAgIDogbV9taW4oSW5mKSwKLSAgICBtX21heChJbmYpCitpbmxpbmUgSW50ZXJ2YWw6OkludGVy
dmFsKCkKKyAgICA6IG1fbWluKEluZiksIG1fbWF4KEluZikKIHsKIH0KIAotSW50ZXJ2YWw6Oklu
dGVydmFsKGludCB2YWx1ZSkKLSAgICA6IG1fbWluKHZhbHVlKSwKLSAgICBtX21heCh2YWx1ZSkK
K2lubGluZSBJbnRlcnZhbDo6SW50ZXJ2YWwoaW50IHZhbHVlKQorICAgIDogbV9taW4odmFsdWUp
LCBtX21heCh2YWx1ZSkKIHsKIH0KIAotSW50ZXJ2YWw6OkludGVydmFsKGludCBtaW4sIGludCBt
YXgpCi0gICAgOiBtX21pbihtaW4pLAotICAgIG1fbWF4KG1heCkKK2lubGluZSBJbnRlcnZhbDo6
SW50ZXJ2YWwoaW50IG1pbiwgaW50IG1heCkKKyAgICA6IG1fbWluKG1pbiksIG1fbWF4KG1heCkK
IHsKIH0KIAotYm9vbCBJbnRlcnZhbDo6Y29udGFpbnMoaW50IHZhbHVlKSBjb25zdAoraW5saW5l
IGJvb2wgSW50ZXJ2YWw6OmNvbnRhaW5zKGludCB2YWx1ZSkgY29uc3QKIHsKICAgICBpZiAobV9t
aW4gPT0gSW5mICYmIG1fbWF4ID09IEluZikKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMTgs
MjcgKzIzNSw2IEBACiAgICAgcmV0dXJuIHZhbHVlID49IG1fbWluICYmIHZhbHVlIDw9IG1fbWF4
OwogfQogCi1TdHJpbmcgSW50ZXJ2YWw6OmFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICBTdHJpbmcg
cyA9ICJbIjsKLQotICAgIGlmIChtX21pbiA9PSBJbmYpCi0gICAgICAgIHMgKz0gIi1JbmZpbml0
eSI7Ci0gICAgZWxzZQotICAgICAgICBzICs9IFN0cmluZzo6bnVtYmVyKG1fbWluKTsKLQotICAg
IHMgKz0gIi4uIjsKLQotICAgIGlmIChtX21heCA9PSBJbmYpCi0gICAgICAgIHMgKz0gIkluZmlu
aXR5IjsKLSAgICBlbHNlCi0gICAgICAgIHMgKz0gU3RyaW5nOjpudW1iZXIobV9tYXgpOwotCi0g
ICAgcyArPSAiXSI7Ci0KLSAgICByZXR1cm4gczsKLX0KLQogdm9pZCBGdW5jdGlvbjo6c2V0QXJn
dW1lbnRzKGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4mIGFyZ3MpCiB7CiAgICAgVmVjdG9yPEV4
cHJlc3Npb24qPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKQEAgLTU0NiwxMSAr
NDQyLDExIEBACiBWYWx1ZSBGdW5TdWJzdHJpbmc6OmRvRXZhbHVhdGUoKSBjb25zdAogewogICAg
IFN0cmluZyBzID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7Ci0gICAgbG9uZyBwb3Mg
PSBsb25nKHJvdW5kKGFyZygxKS0+ZXZhbHVhdGUoKS50b051bWJlcigpKSk7CisgICAgbG9uZyBw
b3MgPSBscm91bmQoYXJnKDEpLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCkpOwogICAgIGJvb2wgaGF2
ZUxlbmd0aCA9IGFyZ0NvdW50KCkgPT0gMzsKICAgICBsb25nIGxlbiA9IC0xOwogICAgIGlmICho
YXZlTGVuZ3RoKQotICAgICAgICBsZW4gPSBsb25nKHJvdW5kKGFyZygyKS0+ZXZhbHVhdGUoKS50
b051bWJlcigpKSk7CisgICAgICAgIGxlbiA9IGxyb3VuZChhcmcoMiktPmV2YWx1YXRlKCkudG9O
dW1iZXIoKSk7CiAKICAgICBpZiAocG9zID4gbG9uZyhzLmxlbmd0aCgpKSkgCiAgICAgICAgIHJl
dHVybiAiIjsKQEAgLTYzMiwxNyArNTI4LDEyIEBACiAKICAgICBSZWZQdHI8Tm9kZT4gbGFuZ05v
ZGUgPSAwOwogICAgIE5vZGUqIG5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCk7
Ci0KLSAgICBTdHJpbmcgeG1zKCJ4bXMiKTsKLSAgICBTdHJpbmcgeG1zbnNVUkkgPSBub2RlLT5s
b29rdXBOYW1lc3BhY2VVUkkoeG1zKTsKLQorICAgIFN0cmluZyB4bXNuc1VSSSA9IG5vZGUtPmxv
b2t1cE5hbWVzcGFjZVVSSSgieG1zIik7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgTmFt
ZWRBdHRyTWFwICphdHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKLSAgICAgICAgU3RyaW5nIGwo
ImxhbmciKTsKLSAgICAgICAgbGFuZ05vZGUgPSBhdHRycy0+Z2V0TmFtZWRJdGVtTlMoeG1zbnNV
UkksIGwpOworICAgICAgICBOYW1lZEF0dHJNYXAqIGF0dHJzID0gbm9kZS0+YXR0cmlidXRlcygp
OworICAgICAgICBsYW5nTm9kZSA9IGF0dHJzLT5nZXROYW1lZEl0ZW1OUyh4bXNuc1VSSSwgImxh
bmciKTsKICAgICAgICAgaWYgKGxhbmdOb2RlKQogICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAg
ICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICB9CiAKQEAgLTY1NSw4ICs1NDYsOCBA
QAogICAgIGludCBpbmRleCA9IGxhbmdOb2RlVmFsdWUuZmluZCgnLScpOwogICAgIGlmIChpbmRl
eCAhPSAtMSkKICAgICAgICAgbGFuZ05vZGVWYWx1ZSA9IGxhbmdOb2RlVmFsdWUubGVmdChpbmRl
eCk7Ci0gICAgCi0gICAgcmV0dXJuIGxhbmdOb2RlVmFsdWUubG93ZXIoKSA9PSBsYW5nLmxvd2Vy
KCk7CisKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobGFuZ05vZGVWYWx1ZSwgbGFuZyk7
CiB9CiAKIGJvb2wgRnVuTGFuZzo6aXNDb25zdGFudCgpIGNvbnN0CkBAIC02OTYsMTYgKzU4Nywx
MiBAQAogCiBWYWx1ZSBGdW5GbG9vcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0CiB7Ci0gICAgZG91Ymxl
IG51bSA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b051bWJlcigpOwotCi0gICAgcmV0dXJuIGZsb29y
KG51bSk7CisgICAgcmV0dXJuIGZsb29yKGFyZygwKS0+ZXZhbHVhdGUoKS50b051bWJlcigpKTsK
IH0KIAogVmFsdWUgRnVuQ2VpbGluZzo6ZG9FdmFsdWF0ZSgpIGNvbnN0CiB7Ci0gICAgZG91Ymxl
IG51bSA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b051bWJlcigpOwotCi0gICAgcmV0dXJuIGNlaWwo
bnVtKTsKKyAgICByZXR1cm4gY2VpbChhcmcoMCktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSk7CiB9
CiAKIFZhbHVlIEZ1blJvdW5kOjpkb0V2YWx1YXRlKCkgY29uc3QKQEAgLTcxMyw4MiArNjAwLDcw
IEBACiAgICAgcmV0dXJuIHJvdW5kKGFyZygwKS0+ZXZhbHVhdGUoKS50b051bWJlcigpKTsKIH0K
IAotc3RydWN0IEZ1bmN0aW9uTGlicmFyeTo6RnVuY3Rpb25SZWMKK3N0YXRpYyB2b2lkIGNyZWF0
ZUZ1bmN0aW9uTWFwKCkKIHsKLSAgICB0eXBlZGVmIEZ1bmN0aW9uICooKkZhY3RvcnlGbikoKTsK
LQotICAgIEZhY3RvcnlGbiBmYWN0b3J5Rm47Ci0gICAgSW50ZXJ2YWwgYXJnczsKLX07Ci0KLXN0
cnVjdCBGdW5jdGlvbk1hcHBpbmcKLXsKLSAgICBjb25zdCBjaGFyICpuYW1lOwotICAgIEZ1bmN0
aW9uTGlicmFyeTo6RnVuY3Rpb25SZWMgZnVuY3Rpb247Ci19OwotCi1GdW5jdGlvbkxpYnJhcnkm
IEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpCi17Ci0gICAgc3RhdGljIEZ1bmN0aW9uTGlicmFyeSBp
bnN0YW5jZTsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLUZ1bmN0aW9uTGlicmFyeTo6RnVu
Y3Rpb25MaWJyYXJ5KCkKLXsKKyAgICBzdHJ1Y3QgRnVuY3Rpb25NYXBwaW5nIHsKKyAgICAgICAg
Y29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgRnVuY3Rpb25SZWMgZnVuY3Rpb247CisgICAgfTsK
ICAgICBzdGF0aWMgY29uc3QgRnVuY3Rpb25NYXBwaW5nIGZ1bmN0aW9uc1tdID0gewotICAgIHsg
Imxhc3QiLCB7ICZjcmVhdGVGdW5MYXN0LCAwIH0gfSwKLSAgICB7ICJsYXN0IiwgeyAmY3JlYXRl
RnVuTGFzdCwgMCB9IH0sCi0gICAgeyAicG9zaXRpb24iLCB7ICZjcmVhdGVGdW5Qb3NpdGlvbiwg
MCB9IH0sCi0gICAgeyAiY291bnQiLCB7ICZjcmVhdGVGdW5Db3VudCwgMSB9IH0sCi0gICAgeyAi
c3VtIiwgeyAmY3JlYXRlRnVuU3VtLCAxIH0gfSwKLSAgICB7ICJsb2NhbC1uYW1lIiwgeyAmY3Jl
YXRlRnVuTG9jYWxOYW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgeyAibmFtZXNwYWNlLXVy
aSIsIHsgJmNyZWF0ZUZ1bk5hbWVzcGFjZVVSSSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgIHsg
Im5hbWUiLCB7ICZjcmVhdGVGdW5OYW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgeyAic3Ry
aW5nIiwgeyAmY3JlYXRlRnVuU3RyaW5nLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgeyAiY29u
Y2F0IiwgeyAmY3JlYXRlRnVuQ29uY2F0LCBJbnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0s
Ci0gICAgeyAic3RhcnRzLXdpdGgiLCB7ICZjcmVhdGVGdW5TdGFydHNXaXRoLCAyIH0gfSwKLSAg
ICB7ICJjb250YWlucyIsIHsgJmNyZWF0ZUZ1bkNvbnRhaW5zLCAyIH0gfSwKLSAgICB7ICJzdWJz
dHJpbmctYmVmb3JlIiwgeyAmY3JlYXRlRnVuU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKLSAgICB7
ICJzdWJzdHJpbmctYWZ0ZXIiLCB7ICZjcmVhdGVGdW5TdWJzdHJpbmdBZnRlciwgMiB9IH0sCi0g
ICAgeyAic3Vic3RyaW5nIiwgeyAmY3JlYXRlRnVuU3Vic3RyaW5nLCBJbnRlcnZhbCgyLCAzKSB9
IH0sCi0gICAgeyAic3RyaW5nLWxlbmd0aCIsIHsgJmNyZWF0ZUZ1blN0cmluZ0xlbmd0aCwgMSB9
IH0sCi0gICAgeyAibm9ybWFsaXplLXNwYWNlIiwgeyAmY3JlYXRlRnVuTm9ybWFsaXplU3BhY2Us
IDEgfSB9LAotICAgIHsgInRyYW5zbGF0ZSIsIHsgJmNyZWF0ZUZ1blRyYW5zbGF0ZSwgMyB9IH0s
Ci0gICAgICAgIAotICAgIHsgImJvb2xlYW4iLCB7ICZjcmVhdGVGdW5Cb29sZWFuLCAxIH0gfSwK
LSAgICB7ICJub3QiLCB7ICZjcmVhdGVGdW5Ob3QsIDEgfSB9LAotICAgIHsgInRydWUiLCB7ICZj
cmVhdGVGdW5UcnVlLCAwIH0gfSwKLSAgICB7ICJmYWxzZSIsIHsgJmNyZWF0ZUZ1bkZhbHNlLCAw
IH0gfSwKLSAgICB7ICJsYW5nIiwgeyAmY3JlYXRlRnVuTGFuZywgMSB9IH0sCi0gICAgICAgIAot
ICAgIHsgIm51bWJlciIsIHsgJmNyZWF0ZUZ1bk51bWJlciwgMSB9IH0sCi0gICAgeyAiZmxvb3Ii
LCB7ICZjcmVhdGVGdW5GbG9vciwgMSB9IH0sCi0gICAgeyAiY2VpbGluZyIsIHsgJmNyZWF0ZUZ1
bkNlaWxpbmcsIDEgfSB9LAotICAgIHsgInJvdW5kIiwgeyAmY3JlYXRlRnVuUm91bmQsIDEgfSB9
CisgICAgICAgIHsgImJvb2xlYW4iLCB7ICZjcmVhdGVGdW5Cb29sZWFuLCAxIH0gfSwKKyAgICAg
ICAgeyAiY2VpbGluZyIsIHsgJmNyZWF0ZUZ1bkNlaWxpbmcsIDEgfSB9LAorICAgICAgICB7ICJj
b25jYXQiLCB7ICZjcmVhdGVGdW5Db25jYXQsIEludGVydmFsKDIsIEludGVydmFsOjpJbmYpIH0g
fSwKKyAgICAgICAgeyAiY29udGFpbnMiLCB7ICZjcmVhdGVGdW5Db250YWlucywgMiB9IH0sCisg
ICAgICAgIHsgImNvdW50IiwgeyAmY3JlYXRlRnVuQ291bnQsIDEgfSB9LAorICAgICAgICB7ICJm
YWxzZSIsIHsgJmNyZWF0ZUZ1bkZhbHNlLCAwIH0gfSwKKyAgICAgICAgeyAiZmxvb3IiLCB7ICZj
cmVhdGVGdW5GbG9vciwgMSB9IH0sCisgICAgICAgIHsgImxhbmciLCB7ICZjcmVhdGVGdW5MYW5n
LCAxIH0gfSwKKyAgICAgICAgeyAibGFzdCIsIHsgJmNyZWF0ZUZ1bkxhc3QsIDAgfSB9LAorICAg
ICAgICB7ICJsb2NhbC1uYW1lIiwgeyAmY3JlYXRlRnVuTG9jYWxOYW1lLCBJbnRlcnZhbCgwLCAx
KSB9IH0sCisgICAgICAgIHsgIm5hbWUiLCB7ICZjcmVhdGVGdW5OYW1lLCBJbnRlcnZhbCgwLCAx
KSB9IH0sCisgICAgICAgIHsgIm5hbWVzcGFjZS11cmkiLCB7ICZjcmVhdGVGdW5OYW1lc3BhY2VV
UkksIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibm9ybWFsaXplLXNwYWNlIiwgeyAm
Y3JlYXRlRnVuTm9ybWFsaXplU3BhY2UsIDEgfSB9LAorICAgICAgICB7ICJub3QiLCB7ICZjcmVh
dGVGdW5Ob3QsIDEgfSB9LAorICAgICAgICB7ICJudW1iZXIiLCB7ICZjcmVhdGVGdW5OdW1iZXIs
IDEgfSB9LAorICAgICAgICB7ICJwb3NpdGlvbiIsIHsgJmNyZWF0ZUZ1blBvc2l0aW9uLCAwIH0g
fSwKKyAgICAgICAgeyAicm91bmQiLCB7ICZjcmVhdGVGdW5Sb3VuZCwgMSB9IH0sCisgICAgICAg
IHsgInN0YXJ0cy13aXRoIiwgeyAmY3JlYXRlRnVuU3RhcnRzV2l0aCwgMiB9IH0sCisgICAgICAg
IHsgInN0cmluZyIsIHsgJmNyZWF0ZUZ1blN0cmluZywgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAg
ICAgICB7ICJzdHJpbmctbGVuZ3RoIiwgeyAmY3JlYXRlRnVuU3RyaW5nTGVuZ3RoLCAxIH0gfSwK
KyAgICAgICAgeyAic3Vic3RyaW5nIiwgeyAmY3JlYXRlRnVuU3Vic3RyaW5nLCBJbnRlcnZhbCgy
LCAzKSB9IH0sCisgICAgICAgIHsgInN1YnN0cmluZy1hZnRlciIsIHsgJmNyZWF0ZUZ1blN1YnN0
cmluZ0FmdGVyLCAyIH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWJlZm9yZSIsIHsgJmNyZWF0
ZUZ1blN1YnN0cmluZ0JlZm9yZSwgMiB9IH0sCisgICAgICAgIHsgInN1bSIsIHsgJmNyZWF0ZUZ1
blN1bSwgMSB9IH0sCisgICAgICAgIHsgInRyYW5zbGF0ZSIsIHsgJmNyZWF0ZUZ1blRyYW5zbGF0
ZSwgMyB9IH0sCisgICAgICAgIHsgInRydWUiLCB7ICZjcmVhdGVGdW5UcnVlLCAwIH0gfSwKICAg
ICB9OwotICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1GdW5jdGlvbnMgPSBzaXplb2YoZnVuY3Rp
b25zKSAvIHNpemVvZihmdW5jdGlvbnNbIDAgXSk7Ci0gICAgICAgIAorICAgIGNvbnN0IHVuc2ln
bmVkIGludCBudW1GdW5jdGlvbnMgPSBzaXplb2YoZnVuY3Rpb25zKSAvIHNpemVvZihmdW5jdGlv
bnNbMF0pOworCisgICAgZnVuY3Rpb25NYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9u
UmVjPjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnVuY3Rpb25zOyArK2kpCi0g
ICAgICAgIG1fZnVuY3Rpb25EaWN0LnNldChmdW5jdGlvbnNbaV0ubmFtZSwgZnVuY3Rpb25zW2ld
LmZ1bmN0aW9uKTsKKyAgICAgICAgZnVuY3Rpb25NYXAtPnNldChmdW5jdGlvbnNbaV0ubmFtZSwg
ZnVuY3Rpb25zW2ldLmZ1bmN0aW9uKTsKIH0KIAotRnVuY3Rpb24gKkZ1bmN0aW9uTGlicmFyeTo6
Y3JlYXRlRnVuY3Rpb24oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb24q
PiAmYXJncykgY29uc3QKK0Z1bmN0aW9uKiBjcmVhdGVGdW5jdGlvbihjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4mIGFyZ3MpCiB7Ci0gICAgaWYgKCFtX2Z1bmN0
aW9uRGljdC5jb250YWlucyhuYW1lKSkgeworICAgIGlmICghZnVuY3Rpb25NYXApCisgICAgICAg
IGNyZWF0ZUZ1bmN0aW9uTWFwKCk7CisKKyAgICBpZiAoIWZ1bmN0aW9uTWFwLT5jb250YWlucyhu
YW1lKSkgeworICAgICAgICBkZWxldGVBbGxWYWx1ZXMoYXJncyk7CisKICAgICAgICAgLy8gUmV0
dXJuIGEgZHVtbXkgZnVuY3Rpb24gaW5zdGVhZCBvZiAwLgotICAgICAgICBGdW5jdGlvbiAqZnVu
Y1RydWUgPSBtX2Z1bmN0aW9uRGljdC5nZXQoInRydWUiKS5mYWN0b3J5Rm4oKTsKKyAgICAgICAg
RnVuY3Rpb24qIGZ1bmNUcnVlID0gZnVuY3Rpb25NYXAtPmdldCgidHJ1ZSIpLmZhY3RvcnlGbigp
OwogICAgICAgICBmdW5jVHJ1ZS0+c2V0TmFtZSgidHJ1ZSIpOwogICAgICAgICByZXR1cm4gZnVu
Y1RydWU7CiAgICAgfQogCi0gICAgRnVuY3Rpb25SZWMgZnVuY3Rpb25SZWMgPSBtX2Z1bmN0aW9u
RGljdC5nZXQobmFtZSk7Ci0gICAgaWYgKCFmdW5jdGlvblJlYy5hcmdzLmNvbnRhaW5zKGFyZ3Mu
c2l6ZSgpKSkKKyAgICBGdW5jdGlvblJlYyBmdW5jdGlvblJlYyA9IGZ1bmN0aW9uTWFwLT5nZXQo
bmFtZSk7CisgICAgaWYgKCFmdW5jdGlvblJlYy5hcmdzLmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkg
eworICAgICAgICBkZWxldGVBbGxWYWx1ZXMoYXJncyk7CiAgICAgICAgIHJldHVybiAwOworICAg
IH0KIAotICAgIEZ1bmN0aW9uICpmdW5jdGlvbiA9IGZ1bmN0aW9uUmVjLmZhY3RvcnlGbigpOwor
ICAgIEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGZ1bmN0aW9uUmVjLmZhY3RvcnlGbigpOwogICAgIGZ1
bmN0aW9uLT5zZXRBcmd1bWVudHMoYXJncyk7CiAgICAgZnVuY3Rpb24tPnNldE5hbWUobmFtZSk7
Ci0gICAgCiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCkluZGV4OiBXZWJDb3JlL3hwYXRoL2lt
cGwvWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgv
aW1wbC9YUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmgJKHJldmlzaW9uIDE0NzExKQorKysgV2ViQ29y
ZS94cGF0aC9pbXBsL1hQYXRoVmFyaWFibGVSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiB2YXJpYWJsZXJlZmVyZW5jZS5oIC0gQ29weXJpZ2h0IDIwMDUg
RnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2gg
UmFhYmUgPHJhYWJlQGtkZS5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIyLDYgKzIyLDcgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAj
aWZuZGVmIFhQYXRoVmFyaWFibGVSZWZlcmVuY2VfSAogI2RlZmluZSBYUGF0aFZhcmlhYmxlUmVm
ZXJlbmNlX0gKIApAQCAtMzAsMjUgKzMxLDIxIEBACiAjaW5jbHVkZSAiWFBhdGhFeHByZXNzaW9u
Tm9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgWFBhdGggeworCisgICAg
bmFtZXNwYWNlIFhQYXRoIHsKICAgICAKLWNsYXNzIFZhcmlhYmxlUmVmZXJlbmNlIDogcHVibGlj
IEV4cHJlc3Npb24KLXsKLXB1YmxpYzoKLSAgICBWYXJpYWJsZVJlZmVyZW5jZShjb25zdCBTdHJp
bmcmIG5hbWUpOworICAgICAgICBjbGFzcyBWYXJpYWJsZVJlZmVyZW5jZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFyaWFibGVSZWZlcmVuY2Uo
Y29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50
KCkgY29uc3Q7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB2aXJ0dWFsIFZhbHVlIGRv
RXZhbHVhdGUoKSBjb25zdDsKKyAgICAgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgICAgIH07
CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OwotCi0gICAgU3RyaW5nIG1fbmFtZTsK
LX07Ci0KKyAgICB9CiB9Ci19CiAKICNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCiAKICNlbmRpZiAv
LyBYUGF0aF9WYXJpYWJsZVJlZmVyZW5jZV9ICi0KSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9Y
UGF0aEV4cHJlc3Npb25Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQ
YXRoRXhwcmVzc2lvbk5vZGUuaAkocmV2aXNpb24gMTQ3MTEpCisrKyBXZWJDb3JlL3hwYXRoL2lt
cGwvWFBhdGhFeHByZXNzaW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIGV4cHJlc3Npb24uaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJl
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0zNSw2MCArMzUsNjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBOb2RlOwotY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworICAgIGNsYXNzIE5vZGU7CisgICAgY2xh
c3MgWFBhdGhOU1Jlc29sdmVyOwogCi1uYW1lc3BhY2UgWFBhdGggeworICAgIG5hbWVzcGFjZSBY
UGF0aCB7CiAKLWNsYXNzIFZhbHVlOworICAgICAgICBjbGFzcyBWYWx1ZTsKICAgICAgICAgCi1z
dHJ1Y3QgRXZhbHVhdGlvbkNvbnRleHQgewotICAgIEV2YWx1YXRpb25Db250ZXh0KCkgOiBub2Rl
KDApLCBzaXplKDApLCBwb3NpdGlvbigwKSwgcmVzb2x2ZXIoMCkgeyB9CisgICAgICAgIHN0cnVj
dCBFdmFsdWF0aW9uQ29udGV4dCB7CisgICAgICAgICAgICBFdmFsdWF0aW9uQ29udGV4dCgpIDog
bm9kZSgwKSwgc2l6ZSgwKSwgcG9zaXRpb24oMCksIHJlc29sdmVyKDApIHsgfQogCi0gICAgUmVm
UHRyPE5vZGU+IG5vZGU7Ci0gICAgdW5zaWduZWQgbG9uZyBzaXplOwotICAgIHVuc2lnbmVkIGxv
bmcgcG9zaXRpb247Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFyaWFibGVCaW5kaW5n
czsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlOworICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBzaXplOworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwb3NpdGlvbjsKKyAgICAgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcmlhYmxlQmluZGluZ3M7CiAKLSAgICAvKiBU
aGUgZnVuY3Rpb24gbGlicmFyeSBpcyBnbG9iYWxseSBhY2Nlc3NpYmxlIHRocm91Z2gKLSAgICAg
KiBGdW5jdGlvbkxpYnJhcnk6OnNlbGYoKQotICAgICAqLwotICAgIFhQYXRoTlNSZXNvbHZlciog
cmVzb2x2ZXI7Ci19OworICAgICAgICAgICAgLyogVGhlIGZ1bmN0aW9uIGxpYnJhcnkgaXMgZ2xv
YmFsbHkgYWNjZXNzaWJsZSB0aHJvdWdoCisgICAgICAgICAgICAgKiBGdW5jdGlvbkxpYnJhcnk6
OnNlbGYoKQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJl
c29sdmVyOworICAgICAgICB9OwogCi1jbGFzcyBQYXJzZU5vZGUgewotcHVibGljOgotICAgIHZp
cnR1YWwgflBhcnNlTm9kZSgpIHsgfQotfTsKKyAgICAgICAgY2xhc3MgUGFyc2VOb2RlIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgdmlydHVhbCB+UGFyc2VOb2RlKCkgeyB9CisgICAg
ICAgIH07CiAKLWNsYXNzIEV4cHJlc3Npb24gOiBwdWJsaWMgUGFyc2VOb2RlCi17Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIEV2YWx1YXRpb25Db250ZXh0JiBldmFsdWF0aW9uQ29udGV4dCgpOworICAg
ICAgICBjbGFzcyBFeHByZXNzaW9uIDogcHVibGljIFBhcnNlTm9kZSwgTm9uY29weWFibGUgewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBzdGF0aWMgRXZhbHVhdGlvbkNvbnRleHQmIGV2
YWx1YXRpb25Db250ZXh0KCk7CiAKLSAgICBFeHByZXNzaW9uKCk7Ci0gICAgdmlydHVhbCB+RXhw
cmVzc2lvbigpOworICAgICAgICAgICAgRXhwcmVzc2lvbigpOworICAgICAgICAgICAgdmlydHVh
bCB+RXhwcmVzc2lvbigpOwogCi0gICAgdmlydHVhbCBWYWx1ZSBldmFsdWF0ZSgpIGNvbnN0Owor
ICAgICAgICAgICAgdmlydHVhbCBWYWx1ZSBldmFsdWF0ZSgpIGNvbnN0OwogCi0gICAgdm9pZCBh
ZGRTdWJFeHByZXNzaW9uKEV4cHJlc3Npb24qKTsKLSAgICB2b2lkIG9wdGltaXplKCk7Ci0gICAg
dmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKyAgICAgICAgICAgIHZvaWQgYWRkU3Vi
RXhwcmVzc2lvbihFeHByZXNzaW9uKik7CisgICAgICAgICAgICB2b2lkIG9wdGltaXplKCk7Cisg
ICAgICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OwogCi1wcm90ZWN0ZWQ6
Ci0gICAgdW5zaWduZWQgc3ViRXhwckNvdW50KCkgY29uc3Q7Ci0gICAgRXhwcmVzc2lvbiogc3Vi
RXhwcih1bnNpZ25lZCBpKTsKLSAgICBjb25zdCBFeHByZXNzaW9uKiBzdWJFeHByKHVuc2lnbmVk
IGkpIGNvbnN0OworICAgICAgICBwcm90ZWN0ZWQ6CisgICAgICAgICAgICB1bnNpZ25lZCBzdWJF
eHByQ291bnQoKSBjb25zdDsKKyAgICAgICAgICAgIEV4cHJlc3Npb24qIHN1YkV4cHIodW5zaWdu
ZWQpOworICAgICAgICAgICAgY29uc3QgRXhwcmVzc2lvbiogc3ViRXhwcih1bnNpZ25lZCkgY29u
c3Q7CiAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3QgPSAw
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRl
KCkgY29uc3QgPSAwOwogCi0gICAgVmVjdG9yPEV4cHJlc3Npb24qPiBtX3N1YkV4cHJlc3Npb25z
OwotICAgIFZhbHVlKiBtX2NvbnN0YW50VmFsdWU7Ci19OworICAgICAgICAgICAgVmVjdG9yPEV4
cHJlc3Npb24qPiBtX3N1YkV4cHJlc3Npb25zOworICAgICAgICAgICAgVmFsdWUqIG1fY29uc3Rh
bnRWYWx1ZTsKKyAgICAgICAgfTsKIAorICAgIH0KKwogfQotfQogCiAjZW5kaWYgLy8gWFBBVEhf
U1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhTdGVwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhTdGVwLmNwcAkocmV2aXNpb24gMTQ3MTEp
CisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhTdGVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsNTIgKzIzLDI0IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwog
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhQYXRoU3RlcC5oIgogCiAjaWYgWFBBVEhf
U1VQUE9SVAogCi0jaW5jbHVkZSAiWFBhdGhTdGVwLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIk5hbWVkQXR0ck1hcC5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRl
ICJUZXh0LmgiCiAjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCisjaW5jbHVkZSAiWFBhdGhQ
cmVkaWNhdGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKIAot
U3RyaW5nIFN0ZXA6OmF4aXNBc1N0cmluZyhBeGlzVHlwZSBheGlzKQorU3RlcDo6U3RlcChBeGlz
IGF4aXMsIGNvbnN0IFN0cmluZyYgbm9kZVRlc3QsIGNvbnN0IFZlY3RvcjxQcmVkaWNhdGUqPiYg
cHJlZGljYXRlcykKKyAgICA6IG1fYXhpcyhheGlzKSwgbV9ub2RlVGVzdChub2RlVGVzdCksIG1f
cHJlZGljYXRlcyhwcmVkaWNhdGVzKQogewotICAgIHN3aXRjaCAoYXhpcykgewotICAgICAgICBj
YXNlIEFuY2VzdG9yQXhpczogcmV0dXJuICJhbmNlc3RvciI7Ci0gICAgICAgIGNhc2UgQW5jZXN0
b3JPclNlbGZBeGlzOiByZXR1cm4gImFuY2VzdG9yLW9yLXNlbGYiOwotICAgICAgICBjYXNlIEF0
dHJpYnV0ZUF4aXM6IHJldHVybiAiYXR0cmlidXRlIjsKLSAgICAgICAgY2FzZSBDaGlsZEF4aXM6
IHJldHVybiAiY2hpbGQiOwotICAgICAgICBjYXNlIERlc2NlbmRhbnRBeGlzOiByZXR1cm4gImRl
c2NlbmRhbnQiOwotICAgICAgICBjYXNlIERlc2NlbmRhbnRPclNlbGZBeGlzOiByZXR1cm4gImRl
c2NlbmRhbnQtb3Itc2VsZiI7Ci0gICAgICAgIGNhc2UgRm9sbG93aW5nQXhpczogcmV0dXJuICJm
b2xsb3dpbmciOwotICAgICAgICBjYXNlIEZvbGxvd2luZ1NpYmxpbmdBeGlzOiByZXR1cm4gImZv
bGxvd2luZy1zaWJsaW5nIjsKLSAgICAgICAgY2FzZSBOYW1lc3BhY2VBeGlzOiByZXR1cm4gIm5h
bWVzcGFjZSI7Ci0gICAgICAgIGNhc2UgUGFyZW50QXhpczogcmV0dXJuICJwYXJlbnQiOwotICAg
ICAgICBjYXNlIFByZWNlZGluZ0F4aXM6IHJldHVybiAicHJlY2VkaW5nIjsKLSAgICAgICAgY2Fz
ZSBQcmVjZWRpbmdTaWJsaW5nQXhpczogcmV0dXJuICJwcmVjZWRpbmctc2libGluZyI7Ci0gICAg
ICAgIGNhc2UgU2VsZkF4aXM6IHJldHVybiAic2VsZiI7Ci0gICAgfQotICAgIHJldHVybiBTdHJp
bmcoKTsKIH0KIAotU3RlcDo6U3RlcCgpCi17Ci19Ci0KLVN0ZXA6OlN0ZXAoQXhpc1R5cGUgYXhp
cywgY29uc3QgU3RyaW5nJiBub2RlVGVzdCwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVk
aWNhdGVzKQotICAgIDogbV9heGlzKGF4aXMpLAotICAgIG1fbm9kZVRlc3Qobm9kZVRlc3QpLAot
ICAgIG1fcHJlZGljYXRlcyhwcmVkaWNhdGVzKQotewotfQotCiBTdGVwOjp+U3RlcCgpCiB7CiAg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fcHJlZGljYXRlcyk7CkBAIC0zMjksNyArMzAxLDcgQEAKICAg
ICByZXR1cm4gY3R4Tm9kZS0+bG9va3VwTmFtZXNwYWNlVVJJKHByZWZpeCk7CiB9CiAKLU5vZGU6
Ok5vZGVUeXBlIFN0ZXA6OnByaW1hcnlOb2RlVHlwZShBeGlzVHlwZSBheGlzKSBjb25zdAorTm9k
ZTo6Tm9kZVR5cGUgU3RlcDo6cHJpbWFyeU5vZGVUeXBlKEF4aXMgYXhpcykgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKGF4aXMpIHsKICAgICAgICAgY2FzZSBBdHRyaWJ1dGVBeGlzOgpJbmRleDogV2Vi
Q29yZS94cGF0aC9pbXBsL1hQYXRoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBh
dGgvaW1wbC9YUGF0aFZhbHVlLmNwcAkocmV2aXNpb24gMTQ3MTEpCisrKyBXZWJDb3JlL3hwYXRo
L2ltcGwvWFBhdGhWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYxICsyNSw1NCBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYUGF0aFZhbHVlLmgiCiAKICNp
ZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0aFZhbHVlLmgiCisjaW5jbHVkZSAiTm9k
ZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpbmNsdWRlICJEZXByZWNhdGVk
U3RyaW5nLmgiCi0KLSNpZmRlZiBfTVNDX1ZFUiAvLyBtYXRoIGZ1bmN0aW9ucyBtaXNzaW5nIGZy
b20gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gc3RhbmRhcmQgQyBsaWJyYXJ5Ci0jaW5jbHVkZSA8
eG1hdGguaD4KLSNkZWZpbmUgaXNuYW4oeCkgX2lzbmFuKHgpCi0jZGVmaW5lIGlzaW5mKHgpICFf
ZmluaXRlKHgpCi0jZGVmaW5lIHNpZ25iaXQoeCkgKF9jb3B5c2lnbigxLjAsICh4KSkgPCAwKQot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBYUGF0aCB7CiAKIFZhbHVl
OjpWYWx1ZSgpCi0gICAgOiBtX3R5cGUoQm9vbGVhbiksIG1fYm9vbChmYWxzZSkKKyAgICA6IG1f
dHlwZShCb29sZWFuVmFsdWUpLCBtX2Jvb2woZmFsc2UpCiB7CiB9CiAKIFZhbHVlOjpWYWx1ZShO
b2RlKiB2YWx1ZSkKLSAgICA6IG1fdHlwZShOb2RlVmVjdG9yXykKKyAgICA6IG1fdHlwZShOb2Rl
VmVjdG9yVmFsdWUpCiB7CiAgICAgbV9ub2RlVmVjdG9yLmFwcGVuZCh2YWx1ZSk7CiB9CiAKIFZh
bHVlOjpWYWx1ZShjb25zdCBOb2RlVmVjdG9yJiB2YWx1ZSkKLSAgICA6IG1fdHlwZShOb2RlVmVj
dG9yXyksIG1fbm9kZVZlY3Rvcih2YWx1ZSkKKyAgICA6IG1fdHlwZShOb2RlVmVjdG9yVmFsdWUp
LCBtX25vZGVWZWN0b3IodmFsdWUpCiB7CiB9CiAKIFZhbHVlOjpWYWx1ZShib29sIHZhbHVlKQot
ICAgIDogbV90eXBlKEJvb2xlYW4pLCBtX2Jvb2wodmFsdWUpCisgICAgOiBtX3R5cGUoQm9vbGVh
blZhbHVlKSwgbV9ib29sKHZhbHVlKQogewogfQogCiBWYWx1ZTo6VmFsdWUodW5zaWduZWQgdmFs
dWUpCi0gICAgOiBtX3R5cGUoTnVtYmVyKSwgbV9udW1iZXIodmFsdWUpCisgICAgOiBtX3R5cGUo
TnVtYmVyVmFsdWUpLCBtX251bWJlcih2YWx1ZSkKIHsKIH0KIAogVmFsdWU6OlZhbHVlKHVuc2ln
bmVkIGxvbmcgdmFsdWUpCi0gICAgOiBtX3R5cGUoTnVtYmVyKSwgbV9udW1iZXIodmFsdWUpCisg
ICAgOiBtX3R5cGUoTnVtYmVyVmFsdWUpLCBtX251bWJlcih2YWx1ZSkKIHsKIH0KIAogVmFsdWU6
OlZhbHVlKGRvdWJsZSB2YWx1ZSkKLSAgICA6IG1fdHlwZShOdW1iZXIpLCBtX251bWJlcih2YWx1
ZSkKKyAgICA6IG1fdHlwZShOdW1iZXJWYWx1ZSksIG1fbnVtYmVyKHZhbHVlKQogewogfQogCiBW
YWx1ZTo6VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICA6IG1fdHlwZShTdHJpbmdfKSwg
bV9zdHJpbmcodmFsdWUpCisgICAgOiBtX3R5cGUoU3RyaW5nVmFsdWUpLCBtX3N0cmluZyh2YWx1
ZSkKIHsKIH0KIApAQCAtOTEsNDggKzg0LDUwIEBACiBib29sIFZhbHVlOjp0b0Jvb2xlYW4oKSBj
b25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgTm9kZVZlY3Rvcl86
CisgICAgICAgIGNhc2UgTm9kZVZlY3RvclZhbHVlOgogICAgICAgICAgICAgcmV0dXJuICFtX25v
ZGVWZWN0b3IuaXNFbXB0eSgpOwotICAgICAgICBjYXNlIEJvb2xlYW46CisgICAgICAgIGNhc2Ug
Qm9vbGVhblZhbHVlOgogICAgICAgICAgICAgcmV0dXJuIG1fYm9vbDsKLSAgICAgICAgY2FzZSBO
dW1iZXI6CisgICAgICAgIGNhc2UgTnVtYmVyVmFsdWU6CiAgICAgICAgICAgICByZXR1cm4gbV9u
dW1iZXIgIT0gMDsKLSAgICAgICAgY2FzZSBTdHJpbmdfOgorICAgICAgICBjYXNlIFN0cmluZ1Zh
bHVlOgogICAgICAgICAgICAgcmV0dXJuICFtX3N0cmluZy5pc0VtcHR5KCk7CiAgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogZG91YmxlIFZh
bHVlOjp0b051bWJlcigpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAg
Y2FzZSBOb2RlVmVjdG9yXzoKKyAgICAgICAgY2FzZSBOb2RlVmVjdG9yVmFsdWU6CiAgICAgICAg
ICAgICByZXR1cm4gVmFsdWUodG9TdHJpbmcoKSkudG9OdW1iZXIoKTsKLSAgICAgICAgY2FzZSBO
dW1iZXI6CisgICAgICAgIGNhc2UgTnVtYmVyVmFsdWU6CiAgICAgICAgICAgICByZXR1cm4gbV9u
dW1iZXI7Ci0gICAgICAgIGNhc2UgU3RyaW5nXzogeworICAgICAgICBjYXNlIFN0cmluZ1ZhbHVl
OiB7CiAgICAgICAgICAgICBib29sIGNhbkNvbnZlcnQ7CiAgICAgICAgICAgICBkb3VibGUgdmFs
dWUgPSBtX3N0cmluZy5kZXByZWNhdGVkU3RyaW5nKCkuc2ltcGxpZnlXaGl0ZVNwYWNlKCkudG9E
b3VibGUoJmNhbkNvbnZlcnQpOwogICAgICAgICAgICAgaWYgKGNhbkNvbnZlcnQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgcmV0dXJuIE5BTjsKICAgICAgICAg
fQotICAgICAgICBjYXNlIEJvb2xlYW46CisgICAgICAgIGNhc2UgQm9vbGVhblZhbHVlOgogICAg
ICAgICAgICAgcmV0dXJuIG1fYm9vbDsKICAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgcmV0dXJuIDAuMDsKIH0KIAogU3RyaW5nIFZhbHVlOjp0b1N0cmluZygpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBOb2RlVmVjdG9yXzoKKyAgICAg
ICAgY2FzZSBOb2RlVmVjdG9yVmFsdWU6CiAgICAgICAgICAgICBpZiAobV9ub2RlVmVjdG9yLmlz
RW1wdHkoKSkgCiAgICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICAgcmV0dXJu
IHN0cmluZ1ZhbHVlKG1fbm9kZVZlY3RvclswXS5nZXQoKSk7Ci0gICAgICAgIGNhc2UgU3RyaW5n
XzoKKyAgICAgICAgY2FzZSBTdHJpbmdWYWx1ZToKICAgICAgICAgICAgIHJldHVybiBtX3N0cmlu
ZzsKLSAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgIGNhc2UgTnVtYmVyVmFsdWU6CiAgICAg
ICAgICAgICBpZiAoaXNuYW4obV9udW1iZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiAiTmFO
IjsKICAgICAgICAgICAgIGlmIChtX251bWJlciA9PSAwKQpAQCAtMTQwLDEzICsxMzUsMTQgQEAK
ICAgICAgICAgICAgIGlmIChpc2luZihtX251bWJlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHNpZ25iaXQobV9udW1iZXIpID8gIi1JbmZpbml0eSIgOiAiSW5maW5pdHkiOwogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG1fbnVtYmVyKTsKLSAgICAgICAgY2FzZSBCb29sZWFu
OgorICAgICAgICBjYXNlIEJvb2xlYW5WYWx1ZToKICAgICAgICAgICAgIHJldHVybiBtX2Jvb2wg
PyAidHJ1ZSIgOiAiZmFsc2UiOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIH0KIH0KIAotI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVApJbmRl
eDogV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIueQkocmV2aXNpb24gMTQ3MTEpCisrKyBXZWJDb3Jl
L3hwYXRoL2ltcGwvWFBhdGhHcmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE4ICsyNSwx
NiBAQAogICovCiAKICV7CisKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiWFBh
dGhFdmFsdWF0b3IuaCIKKyNpZiBYUEFUSF9TVVBQT1JUCisKICNpbmNsdWRlICJYUGF0aEZ1bmN0
aW9ucy5oIgogI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1ZGUgIlhQYXRoUGFy
c2VyLmgiCiAjaW5jbHVkZSAiWFBhdGhQYXRoLmgiCiAjaW5jbHVkZSAiWFBhdGhQcmVkaWNhdGUu
aCIKLSNpbmNsdWRlICJYUGF0aFN0ZXAuaCIKLSNpbmNsdWRlICJYUGF0aFV0aWwuaCIKICNpbmNs
dWRlICJYUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmgiCiAKICNkZWZpbmUgWVlERUJVRyAwCkBAIC01
MSwxNCArNDksMTUgQEAKIAogJXVuaW9uCiB7Ci0gICAgU3RlcDo6QXhpc1R5cGUgYXhpc1R5cGU7
Ci0gICAgaW50ICAgICAgICBudW07Ci0gICAgU3RyaW5nICpzdHI7CisgICAgU3RlcDo6QXhpcyBh
eGlzOworICAgIE51bWVyaWNPcDo6T3Bjb2RlIG51bW9wOworICAgIEVxVGVzdE9wOjpPcGNvZGUg
ZXFvcDsKKyAgICBTdHJpbmcqIHN0cjsKICAgICBFeHByZXNzaW9uKiBleHByOwogICAgIFZlY3Rv
cjxQcmVkaWNhdGUqPiogcHJlZExpc3Q7CiAgICAgVmVjdG9yPEV4cHJlc3Npb24qPiogYXJnTGlz
dDsKICAgICBTdGVwKiBzdGVwOwotICAgIExvY2F0aW9uUGF0aCAqbG9jYXRpb25QYXRoOworICAg
IExvY2F0aW9uUGF0aCogbG9jYXRpb25QYXRoOwogfQogCiAlewpAQCAtNjgsMjAgKzY3LDIyIEBA
CiAgICAgCiAlfQogCi0lbGVmdCA8bnVtPiBNVUxPUCBSRUxPUCBFUU9QCi0lbGVmdCA8c3RyPiBQ
TFVTIE1JTlVTCi0lbGVmdCA8c3RyPiBPUiBBTkQKLSV0b2tlbiA8YXhpc1R5cGU+IEFYSVNOQU1F
CislbGVmdCA8bnVtb3A+IE1VTE9QIFJFTE9QCislbGVmdCA8ZXFvcD4gRVFPUAorJWxlZnQgUExV
UyBNSU5VUworJWxlZnQgT1IgQU5ECisldG9rZW4gPGF4aXM+IEFYSVNOQU1FCiAldG9rZW4gPHN0
cj4gTk9ERVRZUEUgUEkgRlVOQ1RJT05OQU1FIExJVEVSQUwKICV0b2tlbiA8c3RyPiBWQVJJQUJM
RVJFRkVSRU5DRSBOVU1CRVIKLSV0b2tlbiA8c3RyPiBET1RET1QgU0xBU0hTTEFTSCBOQU1FVEVT
VAorJXRva2VuIERPVERPVCBTTEFTSFNMQVNICisldG9rZW4gPHN0cj4gTkFNRVRFU1QKICV0b2tl
biBFUlJPUgogCiAldHlwZSA8bG9jYXRpb25QYXRoPiBMb2NhdGlvblBhdGgKICV0eXBlIDxsb2Nh
dGlvblBhdGg+IEFic29sdXRlTG9jYXRpb25QYXRoCiAldHlwZSA8bG9jYXRpb25QYXRoPiBSZWxh
dGl2ZUxvY2F0aW9uUGF0aAogJXR5cGUgPHN0ZXA+IFN0ZXAKLSV0eXBlIDxheGlzVHlwZT4gQXhp
c1NwZWNpZmllcgorJXR5cGUgPGF4aXM+IEF4aXNTcGVjaWZpZXIKICV0eXBlIDxzdGVwPiBEZXNj
ZW5kYW50T3JTZWxmCiAldHlwZSA8c3RyPiBOb2RlVGVzdAogJXR5cGUgPGV4cHI+IFByZWRpY2F0
ZQpAQCAtMTcyLDM3ICsxNzMsMzEgQEAKICAgICBOb2RlVGVzdAogICAgIHsKICAgICAgICAgJCQg
PSBuZXcgU3RlcChTdGVwOjpDaGlsZEF4aXMsICokMSk7Ci0gICAgICAgIGRlbGV0ZSAkMTsKICAg
ICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQp
OwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyU3RyaW5n
KCQxKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+ZGVsZXRlU3RyaW5n
KCQxKTsKICAgICB9CiAgICAgfAogICAgIE5vZGVUZXN0IFByZWRpY2F0ZUxpc3QKICAgICB7CiAg
ICAgICAgICQkID0gbmV3IFN0ZXAoU3RlcDo6Q2hpbGRBeGlzLCAqJDEsICokMik7Ci0gICAgICAg
IGRlbGV0ZSAkMTsKLSAgICAgICAgZGVsZXRlICQyOwogICAgICAgICBzdGF0aWNfY2FzdDxQYXJz
ZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0
PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJpbmcoJDEpOwotICAgICAgICBzdGF0aWNf
Y2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUHJlZGljYXRlVmVjdG9yKCQyKTsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+ZGVsZXRlU3RyaW5nKCQxKTsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+ZGVsZXRlUHJlZGljYXRlVmVjdG9y
KCQyKTsKICAgICB9CiAgICAgfAogICAgIEF4aXNTcGVjaWZpZXIgTm9kZVRlc3QKICAgICB7CiAg
ICAgICAgICQkID0gbmV3IFN0ZXAoJDEsICokMik7Ci0gICAgICAgIGRlbGV0ZSAkMjsKICAgICAg
ICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwot
ICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyU3RyaW5nKCQy
KTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+ZGVsZXRlU3RyaW5nKCQy
KTsKICAgICB9CiAgICAgfAogICAgIEF4aXNTcGVjaWZpZXIgTm9kZVRlc3QgUHJlZGljYXRlTGlz
dAogICAgIHsKLSAgICAgICAgJCQgPSBuZXcgU3RlcCgkMSwgKiQyLCAgKiQzKTsKLSAgICAgICAg
ZGVsZXRlICQyOwotICAgICAgICBkZWxldGUgJDM7CisgICAgICAgICQkID0gbmV3IFN0ZXAoJDEs
ICokMiwgKiQzKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0
ZXJQYXJzZU5vZGUoJCQpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51
bnJlZ2lzdGVyU3RyaW5nKCQyKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2Vy
KS0+dW5yZWdpc3RlclByZWRpY2F0ZVZlY3RvcigkMyk7CisgICAgICAgIHN0YXRpY19jYXN0PFBh
cnNlcio+KHBhcnNlciktPmRlbGV0ZVN0cmluZygkMik7CisgICAgICAgIHN0YXRpY19jYXN0PFBh
cnNlcio+KHBhcnNlciktPmRlbGV0ZVByZWRpY2F0ZVZlY3RvcigkMyk7CiAgICAgfQogICAgIHwK
ICAgICBBYmJyZXZpYXRlZFN0ZXAKQEAgLTIyMCwxMCArMjE1LDEwIEBACiBOb2RlVGVzdDoKICAg
ICBOQU1FVEVTVAogICAgIHsKLSAgICAgICAgY29uc3QgaW50IGNvbG9uID0gJDEtPmZpbmQoJzon
KTsKLSAgICAgICAgaWYgKGNvbG9uID4gLTEpIHsKLSAgICAgICAgICAgIFN0cmluZyBwcmVmaXgo
JDEtPmxlZnQoY29sb24pKTsKLSAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciAqcmVzb2x2ZXIg
PSBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnJlc29sdmVyOworICAgICAgICBpbnQg
Y29sb24gPSAkJC0+ZmluZCgnOicpOworICAgICAgICBpZiAoY29sb24gPj0gMCkgeworICAgICAg
ICAgICAgU3RyaW5nIHByZWZpeCgkJC0+bGVmdChjb2xvbikpOworICAgICAgICAgICAgWFBhdGhO
U1Jlc29sdmVyKiByZXNvbHZlciA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucmVz
b2x2ZXI7CiAgICAgICAgICAgICBpZiAoIXJlc29sdmVyIHx8IHJlc29sdmVyLT5sb29rdXBOYW1l
c3BhY2VVUkkocHJlZml4KS5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFBhcnNlcio+KHBhcnNlciktPm1fZ290TmFtZXNwYWNlRXJyb3IgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIFlZQUJPUlQ7CkBAIC0yMzQsOSArMjI5LDggQEAKICAgICBOT0RFVFlQRSAnKCcgJykn
CiAgICAgewogICAgICAgICAkJCA9IG5ldyBTdHJpbmcoKiQxICsgIigpIik7Ci0gICAgICAgIGRl
bGV0ZSAkMTsKICAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJT
dHJpbmcoJCQpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lz
dGVyU3RyaW5nKCQxKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+ZGVs
ZXRlU3RyaW5nKCQxKTsKICAgICB9CiAgICAgfAogICAgIFBJICcoJyAnKScKQEAgLTI0NSwxMSAr
MjM5LDkgQEAKICAgICB7CiAgICAgICAgIFN0cmluZyBzID0gKiQxICsgIiAiICsgKiQzOwogICAg
ICAgICAkJCA9IG5ldyBTdHJpbmcocy5kZXByZWNhdGVkU3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNl
KCkpOwotICAgICAgICBkZWxldGUgJDE7Ci0gICAgICAgIGRlbGV0ZSAkMzsKICAgICAgICAgc3Rh
dGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJTdHJpbmcoJCQpOwotICAgICAgICBz
dGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyU3RyaW5nKCQxKTsgICAgICAg
IAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyU3RyaW5n
KCQzKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+ZGVsZXRlU3RyaW5n
KCQxKTsgICAgICAgIAorICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5kZWxl
dGVTdHJpbmcoJDMpOwogICAgIH0KICAgICA7CiAKQEAgLTMwMiw5ICsyOTQsOCBAQAogICAgIFZB
UklBQkxFUkVGRVJFTkNFCiAgICAgewogICAgICAgICAkJCA9IG5ldyBWYXJpYWJsZVJlZmVyZW5j
ZSgqJDEpOwotICAgICAgICBkZWxldGUgJDE7CiAgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+
KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFy
c2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclN0cmluZygkMSk7CisgICAgICAgIHN0YXRpY19jYXN0
PFBhcnNlcio+KHBhcnNlciktPmRlbGV0ZVN0cmluZygkMSk7CiAgICAgfQogICAgIHwKICAgICAn
KCcgRXhwciAnKScKQEAgLTMxNSwxNyArMzA2LDE1IEBACiAgICAgTElURVJBTAogICAgIHsKICAg
ICAgICAgJCQgPSBuZXcgU3RyaW5nRXhwcmVzc2lvbigqJDEpOwotICAgICAgICBkZWxldGUgJDE7
CiAgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2Rl
KCQkKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclN0
cmluZygkMSk7ICAgICAgICAKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+
ZGVsZXRlU3RyaW5nKCQxKTsgICAgICAgIAogICAgIH0KICAgICB8CiAgICAgTlVNQkVSCiAgICAg
ewogICAgICAgICAkJCA9IG5ldyBOdW1iZXIoJDEtPmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJs
ZSgpKTsKLSAgICAgICAgZGVsZXRlICQxOwogICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihw
YXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNl
cio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJpbmcoJDEpOworICAgICAgICBzdGF0aWNfY2FzdDxQ
YXJzZXIqPihwYXJzZXIpLT5kZWxldGVTdHJpbmcoJDEpOwogICAgIH0KICAgICB8CiAgICAgRnVu
Y3Rpb25DYWxsCkBAIC0zMzQsMjAgKzMyMywxNyBAQAogRnVuY3Rpb25DYWxsOgogICAgIEZVTkNU
SU9OTkFNRSAnKCcgJyknCiAgICAgewotICAgICAgICAkJCA9IEZ1bmN0aW9uTGlicmFyeTo6c2Vs
ZigpLmNyZWF0ZUZ1bmN0aW9uKCQxLT5kZXByZWNhdGVkU3RyaW5nKCkubGF0aW4xKCkpOwotICAg
ICAgICBkZWxldGUgJDE7CisgICAgICAgICQkID0gY3JlYXRlRnVuY3Rpb24oKiQxKTsKICAgICAg
ICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwot
ICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyU3RyaW5nKCQx
KTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+ZGVsZXRlU3RyaW5nKCQx
KTsKICAgICB9CiAgICAgfAogICAgIEZVTkNUSU9OTkFNRSAnKCcgQXJndW1lbnRMaXN0ICcpJwog
ICAgIHsKLSAgICAgICAgJCQgPSBGdW5jdGlvbkxpYnJhcnk6OnNlbGYoKS5jcmVhdGVGdW5jdGlv
bigkMS0+ZGVwcmVjYXRlZFN0cmluZygpLmxhdGluMSgpLCAqJDMpOwotICAgICAgICBkZWxldGUg
JDE7Ci0gICAgICAgIGRlbGV0ZSAkMzsKKyAgICAgICAgJCQgPSBjcmVhdGVGdW5jdGlvbigqJDEs
ICokMyk7CiAgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnJlZ2lzdGVyUGFy
c2VOb2RlKCQkKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdp
c3RlclN0cmluZygkMSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVu
cmVnaXN0ZXJFeHByZXNzaW9uVmVjdG9yKCQzKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2Vy
Kj4ocGFyc2VyKS0+ZGVsZXRlU3RyaW5nKCQxKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2Vy
Kj4ocGFyc2VyKS0+ZGVsZXRlRXhwcmVzc2lvblZlY3RvcigkMyk7CiAgICAgfQogICAgIDsKIApA
QCAtMzcxLDcgKzM1Nyw2IEBACiAgICAgRXhwcgogICAgIDsKIAotCiBVbmlvbkV4cHI6CiAgICAg
UGF0aEV4cHIKICAgICB8CkBAIC0zOTMsOSArMzc4LDYgQEAKICAgICB9CiAgICAgfAogICAgIEZp
bHRlckV4cHIKLSAgICB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQogICAgIHwKICAgICBGaWx0
ZXJFeHByICcvJyBSZWxhdGl2ZUxvY2F0aW9uUGF0aAogICAgIHsKQEAgLTQxMywyMyArMzk1LDIw
IEBACiAgICAgICAgICQkID0gbmV3IFBhdGgoc3RhdGljX2Nhc3Q8RmlsdGVyKj4oJDEpLCAkMyk7
CiAgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2Rl
KCQkKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBh
cnNlTm9kZSgkMSk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVn
aXN0ZXJQYXJzZU5vZGUoJDIpOwogICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIp
LT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQzKTsKICAgICB9CiAgICAgOwogCiBGaWx0ZXJFeHByOgog
ICAgIFByaW1hcnlFeHByCi0gICAgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KICAgICB8CiAg
ICAgUHJpbWFyeUV4cHIgUHJlZGljYXRlTGlzdAogICAgIHsKICAgICAgICAgJCQgPSBuZXcgRmls
dGVyKCQxLCAqJDIpOwotICAgICAgICBkZWxldGUgJDI7CiAgICAgICAgIHN0YXRpY19jYXN0PFBh
cnNlcio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKICAgICAgICAgc3RhdGljX2Nh
c3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7Ci0gICAgICAgIHN0
YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQcmVkaWNhdGVWZWN0b3IoJDIp
OworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5kZWxldGVQcmVkaWNhdGVW
ZWN0b3IoJDIpOwogICAgIH0KICAgICA7CiAKQEAgLTUyNSw0ICs1MDQsNiBAQAogICAgIH0KICAg
ICA7CiAKKyUlCiAKKyNlbmRpZgpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVXRpbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVXRpbC5jcHAJKHJldmlz
aW9uIDE0NzExKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVXRpbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDExICsyMywxMiBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYUGF0aFV0aWwuaCIKIAog
I2lmIFhQQVRIX1NVUFBPUlQKIAotI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogI2luY2x1ZGUgIk5v
ZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzgsNCArNzksMyBAQAogfQogCiAjZW5k
aWYgLy8gWFBBVEhfU1VQUE9SVAotCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhGdW5j
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhGdW5jdGlvbnMu
aAkocmV2aXNpb24gMTQ3MTEpCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhGdW5jdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCisKICNpZm5kZWYgWFBhdGhGdW5jdGlvbnNfSAogI2RlZmluZSBYUGF0
aEZ1bmN0aW9uc19ICiAKQEAgLTMwLDQ5ICszMSwzMCBAQAogCiAjaW5jbHVkZSAiWFBhdGhFeHBy
ZXNzaW9uTm9kZS5oIgogCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotCi0jaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFhQYXRoIHsK
LSAgICAKLWNsYXNzIEZ1bmN0aW9uIDogcHVibGljIEV4cHJlc3Npb24KLXsKLXB1YmxpYzoKLSAg
ICB2b2lkIHNldEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8RXhwcmVzc2lvbio+Jik7Ci0gICAgdm9p
ZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgRXhwcmVzc2lvbiog
YXJnKGludCBwb3MpOwotICAgIGNvbnN0IEV4cHJlc3Npb24qIGFyZyhpbnQgcG9zKSBjb25zdDsK
LSAgICB1bnNpZ25lZCBpbnQgYXJnQ291bnQoKSBjb25zdDsKLSAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0OworICAgIG5hbWVzcGFjZSBYUGF0aCB7CiAKLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fbmFt
ZTsKLX07CisgICAgICAgIGNsYXNzIEZ1bmN0aW9uIDogcHVibGljIEV4cHJlc3Npb24geworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICB2b2lkIHNldEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8
RXhwcmVzc2lvbio+Jik7CisgICAgICAgICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7
CiAKLWNsYXNzIEZ1bmN0aW9uTGlicmFyeQotewotICAgIGZyaWVuZCBzdHJ1Y3QgRnVuY3Rpb25N
YXBwaW5nOwotcHVibGljOgotICAgIHN0YXRpYyBGdW5jdGlvbkxpYnJhcnkgJnNlbGYoKTsKKyAg
ICAgICAgcHJvdGVjdGVkOgorICAgICAgICAgICAgRXhwcmVzc2lvbiogYXJnKGludCBwb3MpOwor
ICAgICAgICAgICAgY29uc3QgRXhwcmVzc2lvbiogYXJnKGludCBwb3MpIGNvbnN0OworICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGFyZ0NvdW50KCkgY29uc3Q7CisgICAgICAgICAgICBTdHJpbmcg
bmFtZSgpIGNvbnN0OwogCi0gICAgRnVuY3Rpb24qIGNyZWF0ZUZ1bmN0aW9uKGNvbnN0IGNoYXIq
IG5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4gJmFyZ3MgPSBWZWN0b3I8RXhwcmVzc2lv
bio+KCkpIGNvbnN0OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgU3RyaW5nIG1fbmFt
ZTsKKyAgICAgICAgfTsKIAotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgRnVuY3Rpb25SZWM7CisgICAg
ICAgIEZ1bmN0aW9uKiBjcmVhdGVGdW5jdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZl
Y3RvcjxFeHByZXNzaW9uKj4mIGFyZ3MgPSBWZWN0b3I8RXhwcmVzc2lvbio+KCkpOwogCi0gICAg
RnVuY3Rpb25MaWJyYXJ5KCk7Ci0gICAgRnVuY3Rpb25MaWJyYXJ5KGNvbnN0IEZ1bmN0aW9uTGli
cmFyeSAmcmhzKTsKLSAgICBGdW5jdGlvbkxpYnJhcnkgJm9wZXJhdG9yPShjb25zdCBGdW5jdGlv
bkxpYnJhcnkgJnJocyk7CisgICAgfQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVj
PiBtX2Z1bmN0aW9uRGljdDsKLX07Ci0KIH0KLX0KIAogI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQK
IApJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoU3RlcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveHBhdGgvaW1wbC9YUGF0aFN0ZXAuaAkocmV2aXNpb24gMTQ3MTEpCisrKyBXZWJDb3Jl
L3hwYXRoL2ltcGwvWFBhdGhTdGVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogc3RlcC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTIzLDU1ICsyMyw1NCBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CisKICNpZm5kZWYgWFBhdGhTdGVwX0gKICNkZWZpbmUgWFBhdGhTdGVwX0gKIAogI2lmIFhQQVRI
X1NVUFBPUlQKIAotI2luY2x1ZGUgIlhQYXRoUHJlZGljYXRlLmgiCisjaW5jbHVkZSAiTm9kZS5o
IgorI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbk5vZGUuaCIKICNpbmNsdWRlICJYUGF0aFV0aWwu
aCIKIAotI2luY2x1ZGUgIk5vZGUuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNl
IFhQYXRoIHsKKworICAgIG5hbWVzcGFjZSBYUGF0aCB7CisKKyAgICAgICAgY2xhc3MgUHJlZGlj
YXRlOwogICAgICAgICAKLWNsYXNzIFN0ZXAgOiBwdWJsaWMgUGFyc2VOb2RlCi17Ci1wdWJsaWM6
Ci0gICAgZW51bSBBeGlzVHlwZSB7Ci0gICAgICAgIEFuY2VzdG9yQXhpcz0xLCBBbmNlc3Rvck9y
U2VsZkF4aXMsIEF0dHJpYnV0ZUF4aXMsCi0gICAgICAgIENoaWxkQXhpcywgRGVzY2VuZGFudEF4
aXMsIERlc2NlbmRhbnRPclNlbGZBeGlzLAotICAgICAgICBGb2xsb3dpbmdBeGlzLCBGb2xsb3dp
bmdTaWJsaW5nQXhpcywgTmFtZXNwYWNlQXhpcywKLSAgICAgICAgUGFyZW50QXhpcywgUHJlY2Vk
aW5nQXhpcywgUHJlY2VkaW5nU2libGluZ0F4aXMsCi0gICAgICAgIFNlbGZBeGlzCi0gICAgfTsK
KyAgICAgICAgY2xhc3MgU3RlcCA6IHB1YmxpYyBQYXJzZU5vZGUsIE5vbmNvcHlhYmxlIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgZW51bSBBeGlzIHsKKyAgICAgICAgICAgICAgICBB
bmNlc3RvckF4aXMsIEFuY2VzdG9yT3JTZWxmQXhpcywgQXR0cmlidXRlQXhpcywKKyAgICAgICAg
ICAgICAgICBDaGlsZEF4aXMsIERlc2NlbmRhbnRBeGlzLCBEZXNjZW5kYW50T3JTZWxmQXhpcywK
KyAgICAgICAgICAgICAgICBGb2xsb3dpbmdBeGlzLCBGb2xsb3dpbmdTaWJsaW5nQXhpcywgTmFt
ZXNwYWNlQXhpcywKKyAgICAgICAgICAgICAgICBQYXJlbnRBeGlzLCBQcmVjZWRpbmdBeGlzLCBQ
cmVjZWRpbmdTaWJsaW5nQXhpcywKKyAgICAgICAgICAgICAgICBTZWxmQXhpcworICAgICAgICAg
ICAgfTsKIAotICAgIHN0YXRpYyBTdHJpbmcgYXhpc0FzU3RyaW5nKEF4aXNUeXBlIGF4aXMpOwor
ICAgICAgICAgICAgU3RlcChBeGlzLCBjb25zdCBTdHJpbmcmIG5vZGVUZXN0LCBjb25zdCBWZWN0
b3I8UHJlZGljYXRlKj4mIHByZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGljYXRlKj4oKSk7CisgICAg
ICAgICAgICB+U3RlcCgpOwogCi0gICAgU3RlcCgpOwotICAgIFN0ZXAoQXhpc1R5cGUgYXhpcywg
Y29uc3QgU3RyaW5nJiBub2RlVGVzdCwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+ICZwcmVkaWNh
dGVzID0gVmVjdG9yPFByZWRpY2F0ZSo+KCkpOwotICAgIH5TdGVwKCk7CisgICAgICAgICAgICBO
b2RlVmVjdG9yIGV2YWx1YXRlKE5vZGUqIGNvbnRleHQpIGNvbnN0OwogCi0gICAgTm9kZVZlY3Rv
ciBldmFsdWF0ZShOb2RlKiBjb250ZXh0KSBjb25zdDsKKyAgICAgICAgICAgIHZvaWQgb3B0aW1p
emUoKTsKIAotICAgIHZvaWQgb3B0aW1pemUoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIE5vZGVWZWN0b3Igbm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCkgY29uc3Q7CisgICAgICAg
ICAgICBOb2RlVmVjdG9yIG5vZGVUZXN0TWF0Y2hlcyhjb25zdCBOb2RlVmVjdG9yJiBub2Rlcykg
Y29uc3Q7CisgICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlRnJvbU5vZGV0ZXN0KGNvbnN0IFN0
cmluZyYgbm9kZVRlc3QpIGNvbnN0OworICAgICAgICAgICAgTm9kZTo6Tm9kZVR5cGUgcHJpbWFy
eU5vZGVUeXBlKEF4aXMpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIE5vZGVWZWN0b3Igbm9kZXNJ
bkF4aXMoTm9kZSogY29udGV4dCkgY29uc3Q7Ci0gICAgTm9kZVZlY3RvciBub2RlVGVzdE1hdGNo
ZXMoY29uc3QgTm9kZVZlY3RvciYgbm9kZXMpIGNvbnN0OwotICAgIFN0cmluZyBuYW1lc3BhY2VG
cm9tTm9kZXRlc3QoY29uc3QgU3RyaW5nJiBub2RlVGVzdCkgY29uc3Q7Ci0gICAgTm9kZTo6Tm9k
ZVR5cGUgcHJpbWFyeU5vZGVUeXBlKEF4aXNUeXBlIGF4aXMpIGNvbnN0OworICAgICAgICAgICAg
QXhpcyBtX2F4aXM7CisgICAgICAgICAgICBTdHJpbmcgbV9ub2RlVGVzdDsKKyAgICAgICAgICAg
IFZlY3RvcjxQcmVkaWNhdGUqPiBtX3ByZWRpY2F0ZXM7CisgICAgICAgIH07CiAKLSAgICBBeGlz
VHlwZSBtX2F4aXM7Ci0gICAgU3RyaW5nIG1fbm9kZVRlc3Q7Ci0gICAgVmVjdG9yPFByZWRpY2F0
ZSo+IG1fcHJlZGljYXRlczsKLX07CisgICAgfQogCiB9Ci19CiAKICNlbmRpZiAvLyBYUEFUSF9T
VVBQT1JUCiAKICNlbmRpZiAvLyBYUGF0aF9TdGVwX0gKLQpJbmRleDogV2ViQ29yZS94cGF0aC9p
bXBsL1hQYXRoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhW
YWx1ZS5oCShyZXZpc2lvbiAxNDcxMSkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogdXRpbC5oIC0gQ29weXJp
Z2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAyMDA1
IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIzLDUzICsyMyw1NSBAQAog
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgWFBhdGhWYWx1
ZV9ICiAjZGVmaW5lIFhQYXRoVmFsdWVfSAogCiAjaWYgWFBBVEhfU1VQUE9SVAogCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJYUGF0aFV0aWwuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotbmFtZXNwYWNlIFhQYXRoIHsKKworICAgIG5hbWVzcGFjZSBYUGF0aCB7CiAg
ICAgCi1jbGFzcyBWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsgTm9kZVZlY3Rvcl8s
IEJvb2xlYW4sIE51bWJlciwgU3RyaW5nXyB9OwotICAgIAotICAgIFZhbHVlKCk7Ci0gICAgVmFs
dWUoTm9kZSopOwotICAgIFZhbHVlKGNvbnN0IE5vZGVWZWN0b3ImKTsKLSAgICBWYWx1ZShib29s
KTsKLSAgICBWYWx1ZSh1bnNpZ25lZCk7Ci0gICAgVmFsdWUodW5zaWduZWQgbG9uZyk7Ci0gICAg
VmFsdWUoZG91YmxlKTsKLSAgICBWYWx1ZShjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAgICAgY2xhc3MgVmFsdWUgewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBlbnVtIFR5cGUgeyBOb2RlVmVjdG9yVmFsdWUs
IEJvb2xlYW5WYWx1ZSwgTnVtYmVyVmFsdWUsIFN0cmluZ1ZhbHVlIH07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFZhbHVlKCk7CisgICAgICAgICAgICBWYWx1ZShOb2RlKik7CisgICAgICAg
ICAgICBWYWx1ZShjb25zdCBOb2RlVmVjdG9yJik7CisgICAgICAgICAgICBWYWx1ZShib29sKTsK
KyAgICAgICAgICAgIFZhbHVlKHVuc2lnbmVkKTsKKyAgICAgICAgICAgIFZhbHVlKHVuc2lnbmVk
IGxvbmcpOworICAgICAgICAgICAgVmFsdWUoZG91YmxlKTsKKyAgICAgICAgICAgIFZhbHVlKGNv
bnN0IFN0cmluZyYpOworICAgICAgICAgICAgCisgICAgICAgICAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KIAotICAgIGJvb2wgaXNOb2RlVmVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlID09IE5vZGVWZWN0b3JfOyB9Ci0gICAgYm9vbCBpc0Jvb2xlYW4oKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gQm9vbGVhbjsgfQotICAgIGJvb2wgaXNOdW1iZXIoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gTnVtYmVyOyB9Ci0gICAgYm9vbCBpc1N0cmluZygpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBTdHJpbmdfOyB9CisgICAgICAgICAgICBib29sIGlzTm9kZVZl
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBOb2RlVmVjdG9yVmFsdWU7IH0KKyAgICAg
ICAgICAgIGJvb2wgaXNCb29sZWFuKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IEJvb2xlYW5W
YWx1ZTsgfQorICAgICAgICAgICAgYm9vbCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZSA9PSBOdW1iZXJWYWx1ZTsgfQorICAgICAgICAgICAgYm9vbCBpc1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBTdHJpbmdWYWx1ZTsgfQogCi0gICAgY29uc3QgTm9kZVZlY3RvciYg
dG9Ob2RlVmVjdG9yKCkgY29uc3Q7ICAgIAotICAgIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7Ci0g
ICAgZG91YmxlIHRvTnVtYmVyKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7
Ci0gICAgCi1wcml2YXRlOgotICAgIFR5cGUgbV90eXBlOwotICAgIE5vZGVWZWN0b3IgbV9ub2Rl
VmVjdG9yOwotICAgIGJvb2wgbV9ib29sOwotICAgIGRvdWJsZSBtX251bWJlcjsKLSAgICBTdHJp
bmcgbV9zdHJpbmc7Ci19OworICAgICAgICAgICAgY29uc3QgTm9kZVZlY3RvciYgdG9Ob2RlVmVj
dG9yKCkgY29uc3Q7ICAgIAorICAgICAgICAgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKKyAg
ICAgICAgICAgIGRvdWJsZSB0b051bWJlcigpIGNvbnN0OworICAgICAgICAgICAgU3RyaW5nIHRv
U3RyaW5nKCkgY29uc3Q7CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIFR5cGUgbV90eXBlOworICAgICAgICAgICAgTm9kZVZlY3RvciBtX25vZGVWZWN0b3I7Cisg
ICAgICAgICAgICBib29sIG1fYm9vbDsKKyAgICAgICAgICAgIGRvdWJsZSBtX251bWJlcjsKKyAg
ICAgICAgICAgIFN0cmluZyBtX3N0cmluZzsKKyAgICAgICAgfTsKIAorICAgIH0KIH0KLX0KIAog
I2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKIAogI2VuZGlmIC8vIFhQYXRoX1ZhbHVlX0gKLQpJbmRl
eDogV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eHBhdGgvaW1wbC9YUGF0aFV0aWwuaAkocmV2aXNpb24gMTQ3MTEpCisrKyBXZWJDb3JlL3hwYXRo
L2ltcGwvWFBhdGhVdGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
dXRpbC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIz
LDM5ICsyMywzNiBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNp
Zm5kZWYgWFBhdGhVdGlsX0gKICNkZWZpbmUgWFBhdGhVdGlsX0gKIAogI2lmIFhQQVRIX1NVUFBP
UlQKIAotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFj
ZSBYUGF0aCB7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBTdHJpbmc7CiAKLXR5cGVkZWYg
VmVjdG9yPFJlZlB0cjxOb2RlPiA+IE5vZGVWZWN0b3I7Ci0gICAgCi0vKiBAcmV0dXJuIHdoZXRo
ZXIgdGhlIGdpdmVuIG5vZGUgaXMgdGhlIHJvb3Qgbm9kZS4KLSAqLwotYm9vbCBpc1Jvb3REb21O
b2RlKE5vZGUqIG5vZGUpOworICAgIG5hbWVzcGFjZSBYUGF0aCB7CiAKLS8qIEByZXR1cm4gdGhl
ICdzdHJpbmctdmFsdWUnIG9mIHRoZSBnaXZlbiBub2RlIGFzIHNwZWNpZmllZCBieQotICAgaHR0
cDovL3d3dy53My5vcmcvVFIveHBhdGgKLSAqLwotU3RyaW5nIHN0cmluZ1ZhbHVlKE5vZGUqIG5v
ZGUpOworICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBOb2RlVmVjdG9yOwor
ICAgICAgICAKKyAgICAgICAgLyogQHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBub2RlIGlzIHRo
ZSByb290IG5vZGUgKi8KKyAgICAgICAgYm9vbCBpc1Jvb3REb21Ob2RlKE5vZGUqKTsKIAotLyog
QHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBub2RlIGlzIGEgdmFsaWQgY29udGV4dCBub2RlCi0g
Ki8KLWJvb2wgaXNWYWxpZENvbnRleHROb2RlKE5vZGUqIG5vZGUpOworICAgICAgICAvKiBAcmV0
dXJuIHRoZSAnc3RyaW5nLXZhbHVlJyBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBzcGVjaWZpZWQgYnkg
aHR0cDovL3d3dy53My5vcmcvVFIveHBhdGggKi8KKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVl
KE5vZGUqKTsKIAorICAgICAgICAvKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgaXMg
YSB2YWxpZCBjb250ZXh0IG5vZGUgKi8KKyAgICAgICAgYm9vbCBpc1ZhbGlkQ29udGV4dE5vZGUo
Tm9kZSopOworCisgICAgfQorCiB9Ci19CiAKICNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCiAKICNl
bmRpZiAvLyBYUGF0aF9VdGlsX0gKLQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5jcHAJKHJldmlzaW9u
IDE0NzExKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDE5ICsyMywxNyBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CisKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYUGF0aFJlc3VsdC5oIgogCiAjaWYg
WFBBVEhfU1VQUE9SVAogCi0jaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKLSNpbmNsdWRlICJYUGF0
aEV2YWx1YXRvci5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0Tm9kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJY
UGF0aEV2YWx1YXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDM4ICs0MSwz
NiBAQAogCiBjbGFzcyBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyIDogcHVibGljIEV2ZW50TGlz
dGVuZXIgewogcHVibGljOgotICAgIEludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXIoRXZlbnRUYXJn
ZXROb2RlKiBub2RlLCBYUGF0aFJlc3VsdCogcmVzdWx0KSAKLSAgICAgICAgOiBtX25vZGUobm9k
ZSksIG1fcmVzdWx0KHJlc3VsdCkgeyB9Ci0gICAgCisgICAgSW52YWxpZGF0aW5nRXZlbnRMaXN0
ZW5lcihYUGF0aFJlc3VsdCogcmVzdWx0KSA6IG1fcmVzdWx0KHJlc3VsdCkgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50KiwgYm9vbCkgeyBtX3Jlc3VsdC0+aW52YWxpZGF0
ZUl0ZXJhdG9yU3RhdGUoKTsgfQogcHJpdmF0ZToKLSAgICBFdmVudFRhcmdldE5vZGUqIG1fbm9k
ZTsKICAgICBYUGF0aFJlc3VsdCogbV9yZXN1bHQ7CiB9OwogCi1YUGF0aFJlc3VsdDo6WFBhdGhS
ZXN1bHQoRXZlbnRUYXJnZXROb2RlKiBldmVudFRhcmdldCwgY29uc3QgVmFsdWUgJnZhbHVlKQor
WFBhdGhSZXN1bHQ6OlhQYXRoUmVzdWx0KEV2ZW50VGFyZ2V0Tm9kZSogZXZlbnRUYXJnZXQsIGNv
bnN0IFZhbHVlJiB2YWx1ZSkKICAgICA6IG1fdmFsdWUodmFsdWUpCiAgICAgLCBtX2V2ZW50VGFy
Z2V0KGV2ZW50VGFyZ2V0KQogewotICAgIG1fZXZlbnRMaXN0ZW5lciA9IG5ldyBJbnZhbGlkYXRp
bmdFdmVudExpc3RlbmVyKG1fZXZlbnRUYXJnZXQuZ2V0KCksIHRoaXMpOworICAgIG1fZXZlbnRM
aXN0ZW5lciA9IG5ldyBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyKHRoaXMpOwogICAgIG1fZXZl
bnRUYXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIoRXZlbnROYW1lczo6RE9NU3VidHJlZU1vZGlmaWVk
RXZlbnQsIG1fZXZlbnRMaXN0ZW5lciwgZmFsc2UpOwotICAgICAgICAKICAgICBzd2l0Y2ggKG1f
dmFsdWUudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgVmFsdWU6OkJvb2xlYW46CisgICAgICAgIGNh
c2UgVmFsdWU6OkJvb2xlYW5WYWx1ZToKICAgICAgICAgICAgIG1fcmVzdWx0VHlwZSA9IEJPT0xF
QU5fVFlQRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZhbHVlOjpOdW1iZXI6
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgVmFsdWU6Ok51bWJlclZhbHVlOgog
ICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gTlVNQkVSX1RZUEU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBWYWx1ZTo6U3RyaW5nXzoKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBWYWx1ZTo6U3RyaW5nVmFsdWU6CiAgICAgICAgICAgICBtX3Jlc3VsdFR5cGUg
PSBTVFJJTkdfVFlQRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZhbHVlOjpO
b2RlVmVjdG9yXzoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBWYWx1ZTo6Tm9k
ZVZlY3RvclZhbHVlOgogICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gVU5PUkRFUkVEX05PREVf
SVRFUkFUT1JfVFlQRTsKICAgICAgICAgICAgIG1fbm9kZVNldFBvc2l0aW9uID0gMDsKICAgICAg
ICAgICAgIG1fbm9kZVNldCA9IG1fdmFsdWUudG9Ob2RlVmVjdG9yKCk7CiAgICAgICAgICAgICBt
X2ludmFsaWRJdGVyYXRvclN0YXRlID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBYUGF0aFJlc3VsdDo6flhQYXRoUmVz
dWx0KCkKQEAgLTE0OCw4ICsxNDQsNyBAQAogCiBOb2RlKiBYUGF0aFJlc3VsdDo6c2luZ2xlTm9k
ZVZhbHVlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmIChyZXN1bHRUeXBlKCkg
IT0gQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgJiYKLSAgICAgICAgIHJlc3VsdFR5cGUoKSAhPSBG
SVJTVF9PUkRFUkVEX05PREVfVFlQRSkgeworICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gQU5ZX1VO
T1JERVJFRF9OT0RFX1RZUEUgJiYgcmVzdWx0VHlwZSgpICE9IEZJUlNUX09SREVSRURfTk9ERV9U
WVBFKSB7CiAgICAgICAgIGVjID0gVFlQRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
QEAgLTE3NSw4ICsxNzAsNyBAQAogCiBib29sIFhQYXRoUmVzdWx0OjppbnZhbGlkSXRlcmF0b3JT
dGF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlc3VsdFR5cGUoKSAhPSBVTk9SREVSRURfTk9ERV9J
VEVSQVRPUl9UWVBFICYmCi0gICAgICAgIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRSkKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX0lURVJB
VE9SX1RZUEUgJiYgcmVzdWx0VHlwZSgpICE9IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuIG1faW52YWxpZEl0ZXJhdG9y
U3RhdGU7CkBAIC0xODQsOCArMTc4LDcgQEAKIAogdW5zaWduZWQgbG9uZyBYUGF0aFJlc3VsdDo6
c25hcHNob3RMZW5ndGgoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKHJlc3Vs
dFR5cGUoKSAhPSBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFICYmCi0gICAgICAgIHJlc3Vs
dFR5cGUoKSAhPSBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSkgeworICAgIGlmIChyZXN1bHRU
eXBlKCkgIT0gVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSAmJiByZXN1bHRUeXBlKCkgIT0g
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpIHsKICAgICAgICAgZWMgPSBUWVBFX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTk1LDggKzE4OCw3IEBACiAKIE5vZGUqIFhQYXRo
UmVzdWx0OjppdGVyYXRlTmV4dChFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAocmVzdWx0
VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgJiYKLSAgICAgICAgcmVzdWx0
VHlwZSgpICE9IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFKSB7CisgICAgaWYgKHJlc3VsdFR5
cGUoKSAhPSBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICYmIHJlc3VsdFR5cGUoKSAhPSBP
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSkgewogICAgICAgICBlYyA9IFRZUEVfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0yMTgsOCArMjEwLDcgQEAKIAogTm9kZSogWFBhdGhS
ZXN1bHQ6OnNuYXBzaG90SXRlbSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBpZiAocmVzdWx0VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUgJiYKLSAgICAgICAgIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQ
RSkgeworICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQ
RSAmJiByZXN1bHRUeXBlKCkgIT0gT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpIHsKICAgICAg
ICAgZWMgPSBUWVBFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogV2ViQ29y
ZS94cGF0aC9YUGF0aFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhS
ZXN1bHQuaAkocmV2aXNpb24gMTQ3MTEpCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDY5ICsyMyw3MCBAQAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCisKICNpZm5kZWYgWFBhdGhSZXN1bHRfSAogI2RlZmluZSBYUGF0aFJl
c3VsdF9ICiAKICNpZiBYUEFUSF9TVVBQT1JUCiAKICNpbmNsdWRlICJTaGFyZWQuaCIKLQogI2lu
Y2x1ZGUgIlhQYXRoVmFsdWUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE5vZGU7Ci1jbGFzcyBFdmVudFRhcmdldE5vZGU7Ci1j
bGFzcyBFdmVudExpc3RlbmVyOworICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNs
YXNzIFhQYXRoUmVzdWx0IDogcHVibGljIFNoYXJlZDxYUGF0aFJlc3VsdD4KLXsKLXB1YmxpYzoK
LSAgICBlbnVtIFhQYXRoUmVzdWx0VHlwZSB7Ci0gICAgICAgIEFOWV9UWVBFID0gMCwKLSAgICAg
ICAgTlVNQkVSX1RZUEUgPSAxLAotICAgICAgICBTVFJJTkdfVFlQRSA9IDIsCi0gICAgICAgIEJP
T0xFQU5fVFlQRSA9IDMsCi0gICAgICAgIFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0
LAotICAgICAgICBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDUsCi0gICAgICAgIFVOT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2LAotICAgICAgICBPUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRSA9IDcsCi0gICAgICAgIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gOCwKLSAgICAg
ICAgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5Ci0gICAgfTsKLSAgICAKLSAgICBYUGF0aFJl
c3VsdChFdmVudFRhcmdldE5vZGUqLCBjb25zdCBYUGF0aDo6VmFsdWUmKTsKLSAgICB+WFBhdGhS
ZXN1bHQoKTsKLSAgICAKLSAgICB2b2lkIGNvbnZlcnRUbyh1bnNpZ25lZCBzaG9ydCB0eXBlLCBF
eGNlcHRpb25Db2RlJik7CisgICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBFdmVu
dFRhcmdldE5vZGU7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBTdHJpbmc7CiAKLSAgICB1
bnNpZ25lZCBzaG9ydCByZXN1bHRUeXBlKCkgY29uc3Q7CisgICAgY2xhc3MgWFBhdGhSZXN1bHQg
OiBwdWJsaWMgU2hhcmVkPFhQYXRoUmVzdWx0PiB7CisgICAgcHVibGljOgorICAgICAgICBlbnVt
IFhQYXRoUmVzdWx0VHlwZSB7CisgICAgICAgICAgICBBTllfVFlQRSA9IDAsCisgICAgICAgICAg
ICBOVU1CRVJfVFlQRSA9IDEsCisgICAgICAgICAgICBTVFJJTkdfVFlQRSA9IDIsCisgICAgICAg
ICAgICBCT09MRUFOX1RZUEUgPSAzLAorICAgICAgICAgICAgVU5PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRSA9IDQsCisgICAgICAgICAgICBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDUs
CisgICAgICAgICAgICBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNiwKKyAgICAgICAg
ICAgIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNywKKyAgICAgICAgICAgIEFOWV9VTk9S
REVSRURfTk9ERV9UWVBFID0gOCwKKyAgICAgICAgICAgIEZJUlNUX09SREVSRURfTk9ERV9UWVBF
ID0gOQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgWFBhdGhSZXN1bHQoRXZlbnRUYXJn
ZXROb2RlKiwgY29uc3QgWFBhdGg6OlZhbHVlJik7CisgICAgICAgIH5YUGF0aFJlc3VsdCgpOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCBjb252ZXJ0VG8odW5zaWduZWQgc2hvcnQgdHlwZSwgRXhj
ZXB0aW9uQ29kZSYpOwogCi0gICAgZG91YmxlIG51bWJlclZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAg
IGJvb2wgYm9vbGVhblZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBOb2RlKiBzaW5n
bGVOb2RlVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgICAgICB1bnNpZ25lZCBzaG9y
dCByZXN1bHRUeXBlKCkgY29uc3Q7CiAKLSAgICBib29sIGludmFsaWRJdGVyYXRvclN0YXRlKCkg
Y29uc3Q7Ci0gICAgdW5zaWduZWQgbG9uZyBzbmFwc2hvdExlbmd0aChFeGNlcHRpb25Db2RlJikg
Y29uc3Q7Ci0gICAgTm9kZSogaXRlcmF0ZU5leHQoRXhjZXB0aW9uQ29kZSYpOwotICAgIE5vZGUq
IHNuYXBzaG90SXRlbSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAg
ICAgIGRvdWJsZSBudW1iZXJWYWx1ZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgICAgIFN0
cmluZyBzdHJpbmdWYWx1ZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgICAgIGJvb2wgYm9v
bGVhblZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICAgICAgTm9kZSogc2luZ2xlTm9k
ZVZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKIAotICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJh
dG9yU3RhdGUoKTsKLXByaXZhdGU6Ci0gICAgWFBhdGg6OlZhbHVlIG1fdmFsdWU7Ci0gICAgdW5z
aWduZWQgbV9ub2RlU2V0UG9zaXRpb247Ci0gICAgWFBhdGg6Ok5vZGVWZWN0b3IgbV9ub2RlU2V0
OwotICAgIHVuc2lnbmVkIHNob3J0IG1fcmVzdWx0VHlwZTsKLSAgICBib29sIG1faW52YWxpZEl0
ZXJhdG9yU3RhdGU7Ci0gICAgUmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4gbV9ldmVudFRhcmdldDsK
LSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9ldmVudExpc3RlbmVyOwotfTsKKyAgICAgICAg
Ym9vbCBpbnZhbGlkSXRlcmF0b3JTdGF0ZSgpIGNvbnN0OworICAgICAgICB1bnNpZ25lZCBsb25n
IHNuYXBzaG90TGVuZ3RoKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICAgICAgTm9kZSogaXRl
cmF0ZU5leHQoRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBOb2RlKiBzbmFwc2hvdEl0ZW0odW5z
aWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgICAgIHZvaWQgaW52YWxp
ZGF0ZUl0ZXJhdG9yU3RhdGUoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFhQYXRoOjpWYWx1
ZSBtX3ZhbHVlOworICAgICAgICB1bnNpZ25lZCBtX25vZGVTZXRQb3NpdGlvbjsKKyAgICAgICAg
WFBhdGg6Ok5vZGVWZWN0b3IgbV9ub2RlU2V0OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBtX3Jl
c3VsdFR5cGU7CisgICAgICAgIGJvb2wgbV9pbnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgICAg
UmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4gbV9ldmVudFRhcmdldDsKKyAgICAgICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lcjsKKyAgICB9OworCiB9CiAKICNlbmRpZiAvLyBY
UEFUSF9TVVBQT1JUCiAKICNlbmRpZiAvLyBYUGF0aFJlc3VsdF9ICi0KSW5kZXg6IFdlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDcx
NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMwIEBA
CisyMDA2LTA2LTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGZpeCBodHRwOi8vYnVnemls
bGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTg5OTUKKyAgICAgICAgICBtZW1vcnkg
bGVhayBpbiBYUGF0aCBjb2RlIC0tIHNlZW4gaW4gbGF5b3V0IHRlc3RzCisgICAgICAgIC0gZml4
ZWQgbWFsbG9jIGVycm9yIG9uIGV4aXQgZHVlIHRvIFNWR0RPTUltcGxlbWVudGF0aW9uIGRlc3Ry
dWN0b3IKKyAgICAgICAgLSBhdHRlbXB0ZWQgdG8gZml4IHRoZSBuby1YUEFUSF9TVVBQT1JUIGJ1
aWxkIGJ5IGFkZGluZyBhbiAjaWYKKyAgICAgICAgLSBjaGFuZ2VkIGFyb3VuZCBpbmNsdWRlcyBh
bmQgaGVhZGVyLWZpbGUgZm9ybWF0dGluZyBpbiBYUGF0aCBjb2RlCisKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogSW5jbHVkZSBQbGF0Zm9ybVN0cmluZy5o
IHdoZW4KKyAgICAgICAgZ2VuZXJhdGluZyB0aGUgYmluZGluZ3MgZm9yIFhQYXRoTlNSZXNvbHZl
ci4KKworICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5oOiBBZGRlZCBhIHZpcnR1YWwg
ZGVzdHJ1Y3RvciBmb3IgdGhlIGJlbmVmaXQgb2YKKyAgICAgICAgU1ZHRE9NSW1wbGVtZW50YXRp
b24uCisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcDogKFdlYkNvcmU6OkRPTUlt
cGxlbWVudGF0aW9uOjp+RE9NSW1wbGVtZW50YXRpb24pOiBBZGRlZC4KKworICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdET01JbXBsZW1lbnRhdGlvbi5oOiBSZWZvcm1hdHRlZCBhIGJpdCwgcmVtb3Zl
ZCB1bm5lZWRlZCBkZWNsYXJhdGlvbnMuCisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0RPTUltcGxl
bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFNWR0RPTUltcGxlbWVudGF0aW9uOjp+U1ZHRE9NSW1w
bGVtZW50YXRpb24pOiBSZW1vdmUgY29tbWVudGVkLW91dCBjb2RlLgorICAgICAgICAoU1ZHRE9N
SW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50KTogUmVtb3ZlIGEgcmVmZXJlbmNlIHRvIEtE
T01WaWV3LgorCisgICAgICAgICogeHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbjo6Y3JlYXRlRXhwcmVzc2lvbik6IENhbGxlZCByZWxl
YXNlIHRvIGF2b2lkIGEgdGlueSBiaXQgb2YKKyAgICAgICAgcmVmZXJlbmNlIGNvdW50IGNodXJu
LgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uOjpldmFsdWF0ZSk6IFNldCBleGNl
cHRpb24gY29kZSBleHBsaWNpdGx5LCBiZWNhdXNlIHRoZSBjb2RlCisgICAgICAgIHJlbGllcyBv
biBpdCBiZWluZyAwIHdoZW4gdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLgorCisgICAgICAgICogeHBh
dGgvWFBhdGhSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW52YWxpZGF0aW5nRXZlbnRM
aXN0ZW5lcjo6SW52YWxpZGF0aW5nRXZlbnRMaXN0ZW5lcik6IFJlbW92ZWQKKyAgICAgICAgdW5u
ZWVkZWQgdGFyZ2V0IG5vZGUgZGF0YSBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJl
c3VsdDo6WFBhdGhSZXN1bHQpOiBVcGRhdGVkIGZvciBlbnVtIG5hbWUgY2hhbmdlcyBhbmQKKyAg
ICAgICAgSW52YWxpZGF0aW5nRXZlbnRMaXN0ZW5lciBuYW1lIGNoYW5nZS4gQWRkZWQgYW4gYXNz
ZXJ0aW9uLgorCisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aEZ1bmN0aW9ucy5oOiBSZW1vdmVk
IHRoZSBGdW5jdGlvbkxpYnJhcnkgY2xhc3MuIENoYW5nZWQgdGhlIHBhcmFtZXRlcgorICAgICAg
ICBmb3IgY3JlYXRlRnVuY3Rpb24gdG8gYmUgYSBTdHJpbmcgaW5zdGVhZCBvZiBjaGFyKi4KKyAg
ICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoRnVuY3Rpb25zLmNwcDogR290IHJpZCBvZiBsb2NhbCBp
bXBsZW1lbnRhdGlvbiBvZiAicm91bmQiLCBhbmQKKyAgICAgICAgdXNlZCA8d3RmL01hdGhFeHRy
YXMuaD4gaW5zdGVhZC4gQWxzbyByZW1vdmVkIHVudXNlZCBJbnRlcnZhbDo6YXNTdHJpbmcuIE1h
cmtlZCBhbGwKKyAgICAgICAgdGhlIEludGVydmFsIGZ1bmN0aW9ucyBpbmxpbmUuCisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6RnVuU3Vic3RyaW5nOjpkb0V2YWx1YXRlKTogVXNlIGxyb3VuZCgp
IGluc3RlYWQgb2YgKGxvbmcpcm91bmQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5M
YW5nOjpkb0V2YWx1YXRlKTogUmVtb3ZlZCBzb21lIHVubmVlZGVkIHRlbXBvcmFyeSBTdHJpbmcg
dmFyaWFibGVzLgorICAgICAgICBVc2UgZXF1YWxJZ25vcmluZ0Nhc2UoKSBpbnN0ZWFkIG9mIGNh
bGxpbmcgbG93ZXIoKSBvbiB0d28gc3RyaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpj
cmVhdGVGdW5jdGlvbk1hcCk6IENoYW5nZWQgaG93IHRoaXMgd29ya3Mgc28gdGhhdCBpdCdzIGFs
bCBsb2NhbCB0bworICAgICAgICB0aGlzIGZ1bmN0aW9uLiBBbHNvIHJlbW92ZWQgYSBkdXBsaWNh
dGUgZW50cnkgZm9yIHRoZSAibGFzdCIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6Y3JlYXRlRnVuY3Rpb24pOiBDaGFuZ2VkIGZyb20gYSBtZW1iZXIgZnVuY3Rpb24gdG8gYSBz
ZXBhcmF0ZSBmdW5jdGlvbi4KKworICAgICAgICAqIHhwYXRoL2ltcGwvWFBhdGhHcmFtbWFyLnk6
IFB1dCBYUEFUSF9TVVBQT1JUIGlmZGVmIGluLiBSZXBsYWNlZCA8bnVtPiB3aXRoIHZhbHVlcyBv
ZgorICAgICAgICBzcGVjaWZpYyB0eXBlcyAobnVtb3AsIGVxb3ApLiBVcGRhdGVkIGZvciBuYW1l
IGNoYW5nZSBmcm9tIEF4aXNUeXBlIHRvIEF4aXMuIENoYW5nZWQKKyAgICAgICAgdG9rZW5zIHRo
YXQgd2VyZSBkZWNsYXJlZCBhcyA8c3RyPiBidXQgd2VyZW4ndCBhY3R1YWxseSB1c2luZyB0aGUg
c3RyaW5nIHRvIGJlCisgICAgICAgIGRlY2xhcmVkIHdpdGggbm8gdHlwZSAoUExVUywgTUlOVVMs
IE9SLCBBTkQsIERPVERPVCwgU0xBU0hTTEFTSCkuIFJlcGxhY2VkIHVzZSBvZgorICAgICAgICB1
bnJlZ2lzdGVyU3RyaW5nLCB1bnJlZ2lzdGVyUHJlZGljYXRlVmVjdG9yLCBhbmQgdW5yZWdpc3Rl
ckV4cHJlc3Npb25WZWN0b3IgdG8KKyAgICAgICAgY2FsbCBkZWxldGUgZnVuY3Rpb25zIGluc3Rl
YWQgdGhhdCBib3RoIHVucmVnaXN0ZXIgYW5kIGRlbGV0ZS4gQ2hhbmdlIGNhbGwgc2l0ZXMgZm9y
CisgICAgICAgIGNyZWF0ZUZ1bmN0aW9uIHRvIGp1c3QgdXNlIHRoZSBTdHJpbmcsIHJlbW92aW5n
IHRoZSBkZXByZWNhdGVkU3RyaW5nKCkubGF0aW4xKCkgY2FsbAorICAgICAgICB0aGF0IGlzIG5v
IGxvbmdlciBuZWVkZWQuIEFkZGVkIGEgY2FsbCB0byB1bnJlZ2lzdGVyUGFyc2VOb2RlIHRoYXQg
d2FzIG1pc3NpbmcgaW4gdGhlCisgICAgICAgICJGaWx0ZXJFeHByIERlc2NlbmRhbnRPclNlbGYg
UmVsYXRpdmVMb2NhdGlvblBhdGgiIHByb2R1Y3Rpb24uCisKKyAgICAgICAgKiB4cGF0aC9pbXBs
L1hQYXRoUGFyc2VyLmg6IENoYW5nZWQgVG9rZW4gdG8gaG9sZCBhIFN0cmluZywgU3RlcDo6QXhp
cywgTnVtZXJpY09wOjpPcGNvZGUsCisgICAgICAgIGFuZCBFcVRlc3RPcDo6T3Bjb2RlLiBUaGUg
dG9rZW4gSUQgbnVtYmVyIHRlbGxzIHVzIHdoaWNoIHRvIHVzZS4gUmVhcnJhbmdlZCB0byBwdXQg
dGhlIHByaXZhdGUKKyAgICAgICAgcGFydCBvZiB0aGUgUGFyc2VyIGNsYXNzIGxhc3QuIE1vdmVk
IGEgbnVtYmVyIG9mIHByaXZhdGUgdGhpbmdzIGluc2lkZSB0aGUgY3BwIGZpbGUuCisgICAgICAg
ICogeHBhdGgvaW1wbC9YUGF0aFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
Y2hhckNhdCk6IE1hZGUgdGhpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIGEgc3Rh
dGljIG1lbWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjppc0F4aXNOYW1lKTogRGl0dG8u
IEFsc28gcHV0IHRoZSBnbG9iYWwgYXhpcyBtYXAgaW5zaWRlIHRoZSBmdW5jdGlvbiwKKyAgICAg
ICAgYWxsb3dpbmcgdXNlIG9mIGEgbWFwIGluc3RlYWQgb2YgYSBtYXAgcG9pbnRlci4KKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjppc05vZGVUeXBlTmFtZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlBhcnNlcjo6aXNPcGVyYXRvckNvbnRleHQpOiBNYWRlIHRoaXMgY29uc3Qu
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjptYWtlVG9rZW5BbmRBZHZhbmNlKTog
R290IHJpZCBvZiB0aGUgImludCIgdmVyc2lvbiBvZiB0aGlzLgorICAgICAgICBCeSB1c2luZyB0
aGUgYWN0dWFsIHR5cGVzLCB3ZSBjYW4gc2FmZWx5IHVzZSBvdmVybG9hZCBpbnN0ZWFkLgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6bGV4U3RyaW5nKTogVXNlIHN1YnN0cmluZygp
IGluc3RlYWQgb2YgZGVwcmVjYXRlZFN0cmluZygpLm1pZCgpLgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlBhcnNlcjo6bGV4TnVtYmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6UGFyc2VyOjpsZXhOQ05hbWUpOiBDaGFuZ2VkIHRvIHJldHVybiBhIGJvb2wgYW5kIGEgU3Ry
aW5nIGluc3RlYWQgb2YgYQorICAgICAgICBUb2tlbi4gVGhpcyBhdm9pZHMgdGhlIGhhY2sgb2Yg
dXNpbmcgYSB0b2tlbiB2YWx1ZSBvZiAiRVJST1IgKyAxIiB3aGljaCBJIGZvdW5kIHF1aXRlCisg
ICAgICAgIGNvbmZ1c2luZyBhbmQgaXMgYWxzbyBhIGJpdCBtb3JlIGV4cGxpY2l0LgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6bGV4UU5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpQYXJzZXI6Om5leHRUb2tlbkludGVybmFsKTogQ2hhbmdlZCB0byBhZGFw
dCB0byB0aGUgY2hhbmdlcyBhYm92ZSBhbmQKKyAgICAgICAgdG8gcmVtb3ZlIHNvbWUgdW5uZWVk
ZWQgZWxzZSBzdGF0ZW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6bGV4
KTogQ2hhbmdlZCB0aGUgbG9naWMgdGhhdCBzZXRzIHVwIHl5bHZhbCB0byB1c2UgdGhlIHRva2Vu
IElECisgICAgICAgIHRvIGRlY2lkZSB3aGF0IHRoZSB0eXBlIGlzLiBUaGlzIG1hdGNoZXMgd2hh
dCB0aGUgZ3JhbW1hciBleHBlY3RzLCBhbmQgcmVtb3ZlcyB0aGUgbmVlZAorICAgICAgICBmb3Ig
dGhlIHRva2VuIG9iamVjdCB0byB0cmFjayB3aGljaCBwYXJ0IG9mIHRoZSB2YWx1ZSBpcyBnb29k
IGFuZCB0aGUgbmVlZCB0byByZXNlcnZlIDAKKyAgICAgICAgdG8gaGF2ZSBhIHNwZWNpYWwgbWVh
bmluZy4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OnBhcnNlU3RhdGVtZW50KTog
QWRkZWQgY29kZSB0byBkZWxldGUgdGhlIHByZWRpY2F0ZXMgYW5kIHRoZQorICAgICAgICBleHBy
ZXNzaW9ucyBpbiB0aGUgcHJlZGljYXRlIGFuZCBleHByZXNzaW9uIHZlY3RvcnMuIEJlZm9yZSwg
d2Ugd2VyZSBvbmx5IGRlbGV0aW5nCisgICAgICAgIHRoZSB2ZWN0b3JzLiBUaGlzIHdhcyB0aGUg
c291cmNlIG9mIHRoZSBzdG9yYWdlIGxlYWsuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFy
c2VyOjpkZWxldGVQcmVkaWNhdGVWZWN0b3IpOiBSZW5hbWVkLCBhbmQgY2hhbmdlZCB0byBkZWxl
dGUKKyAgICAgICAgdGhlIHZlY3Rvci4gSG93ZXZlciB0aGlzIGRvZXMgbm90IGRlbGV0ZSB0aGUg
cHJlZGljYXRlcyBpbiB0aGUgdmVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNl
cjo6ZGVsZXRlRXhwcmVzc2lvblZlY3Rvcik6IFJlbmFtZWQsIGFuZCBjaGFuZ2VkIHRvIGRlbGV0
ZQorICAgICAgICB0aGUgdmVjdG9yLiBIb3dldmVyIHRoaXMgZG9lcyBub3QgZGVsZXRlIHRoZSBl
eHByZXNzaW9ucyBpbiB0aGUgdmVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNl
cjo6ZGVsZXRlU3RyaW5nKTogUmVuYW1lZCwgYW5kIGNoYW5nZWQgdG8gZGVsZXRlIHRoZSBzdHJp
bmcuCisKKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoUHJlZGljYXRlLmg6CisgICAgICAgICog
eHBhdGgvaW1wbC9YUGF0aFByZWRpY2F0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
TnVtZXJpY09wOjpOdW1lcmljT3ApOiBDaGFuZ2VkIG9wY29kZSBmcm9tIGFuIGludCB0byBhbiBl
bnVtLCBhbmQKKyAgICAgICAgcmVuYW1lZCB0byAib3Bjb2RlIiBpbnN0ZWFkIG9mICJvcENvZGUi
LgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWVyaWNPcDo6ZG9FdmFsdWF0ZSk6IE1vcmUg
b2YgdGhlIHNhbWUuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXFUZXN0T3A6OkVxVGVzdE9w
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXFUZXN0T3A6OmRvRXZhbHVhdGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6OkxvZ2ljYWxPcCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvZ2ljYWxPcDo6c2hvcnRDaXJjdWl0
T24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQcmVkaWNhdGU6OmV2YWx1YXRl
KTogUmVtb3ZlZCBhbiB1bm5lZWRlZCAibmV3Ii4KKworICAgICAgICAqIHhwYXRoL2ltcGwvWFBh
dGhTdGVwLmg6CisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aFN0ZXAuY3BwOiBSZW5hbWVkIEF4
aXNUeXBlIHRvIEF4aXMuIFJlbW92ZWQgdW51c2VkIGF4aXNBc1N0cmluZworICAgICAgICBmdW5j
dGlvbiBhbmQgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIHhwYXRoL2ltcGwvWFBh
dGhWYWx1ZS5oOiBSZW5hbWVkIHRoZSB0eXBlIGNvbnN0YW50cyB0byBoYXZlIGEgVmFsdWUgc3Vm
Zml4LAorICAgICAgICBpbnN0ZWFkIG9mIHRoZSB1bmRlcnNjb3JlIHN1ZmZpeCB1c2VkIGJlZm9y
ZSBvbiBOb2RlVmVjdG9yIGFuZCBTdHJpbmcuCisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aFZh
bHVlLmNwcDogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuIEFkZGVkIGFzc2VydHMuCisKKyAgICAg
ICAgKiB4cGF0aC9pbXBsL1hQYXRoVmFyaWFibGVSZWZlcmVuY2UuY3BwOiAoV2ViQ29yZTo6WFBh
dGg6OlZhcmlhYmxlUmVmZXJlbmNlOjpkb0V2YWx1YXRlKToKKyAgICAgICAgVXNlIGEgcmVmZXJl
bmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogeHBhdGgvWFBhdGhFdmFsdWF0
b3IuY3BwOgorICAgICAgICAqIHhwYXRoL1hQYXRoRXZhbHVhdG9yLmg6CisgICAgICAgICogeHBh
dGgvWFBhdGhFeHByZXNzaW9uLmg6CisgICAgICAgICogeHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNw
cDoKKyAgICAgICAgKiB4cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaDoKKyAgICAgICAgKiB4cGF0aC9Y
UGF0aE5hbWVzcGFjZS5jcHA6CisgICAgICAgICogeHBhdGgvWFBhdGhOYW1lc3BhY2UuaDoKKyAg
ICAgICAgKiB4cGF0aC9YUGF0aFJlc3VsdC5oOgorICAgICAgICAqIHhwYXRoL2ltcGwvWFBhdGhF
eHByZXNzaW9uTm9kZS5jcHA6CisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aEV4cHJlc3Npb25O
b2RlLmg6CisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aFBhdGguY3BwOgorICAgICAgICAqIHhw
YXRoL2ltcGwvWFBhdGhQYXRoLmg6CisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aFV0aWwuY3Bw
OgorICAgICAgICAqIHhwYXRoL2ltcGwvWFBhdGhVdGlsLmg6CisgICAgICAgICogeHBhdGgvaW1w
bC9YUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmg6CisgICAgICAgIFJlZm9ybWF0dGVkIGFuZCBjaGFu
Z2VkIGluY2x1ZGVzIGFyb3VuZDsgbm8gc3Vic3RhbnRpdmUgY2hhbmdlcy4KKwogMjAwNi0wNi0w
MyAgUm9iIEJ1aXMgIDxidWlzQGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgbWpzLiAg
VHdlYWtlZCBhbmQgbGFuZGVkIGJ5IGRka2lsemVyLgpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRE9NSW1wbGVtZW50YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdET01JbXBsZW1lbnRhdGlvbi5oCShyZXZpc2lvbiAxNDcxMSkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0RPTUltcGxlbWVudGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDM0ICsyNSwy
NyBAQAogI2lmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgot
I2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmdMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICBjbGFzcyBDU1NTdHlsZVNoZWV0OwotICAgIGNsYXNzIERvY3VtZW50OwotICAgIGNsYXNz
IERvY3VtZW50VHlwZTsKLSAgICBjbGFzcyBTdHJpbmc7CisKICAgICBjbGFzcyBTdHJpbmdJbXBs
OwogCi0gICAgdHlwZWRlZiBGcmFtZVZpZXcgS0RPTVZpZXc7Ci0KLSAgICBjbGFzcyBTVkdET01J
bXBsZW1lbnRhdGlvbiA6IHB1YmxpYyBET01JbXBsZW1lbnRhdGlvbgotICAgIHsKKyAgICBjbGFz
cyBTVkdET01JbXBsZW1lbnRhdGlvbiA6IHB1YmxpYyBET01JbXBsZW1lbnRhdGlvbiB7CiAgICAg
cHVibGljOgogICAgICAgICBTVkdET01JbXBsZW1lbnRhdGlvbigpOwogICAgICAgICB2aXJ0dWFs
IH5TVkdET01JbXBsZW1lbnRhdGlvbigpOwogCi0gICAgICAgIHN0YXRpYyBTVkdET01JbXBsZW1l
bnRhdGlvbiAqaW5zdGFuY2UoKTsKKyAgICAgICAgc3RhdGljIFNWR0RPTUltcGxlbWVudGF0aW9u
KiBpbnN0YW5jZSgpOwogCiAgICAgICAgIC8vICdTVkdET01JbXBsZW1lbnRhdGlvbicgZnVuY3Rp
b25zCi0gICAgICAgIGJvb2wgaGFzRmVhdHVyZShTdHJpbmdJbXBsICpmZWF0dXJlLCBTdHJpbmdJ
bXBsICp2ZXJzaW9uKSBjb25zdDsKLSAgICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudFR5cGU+IGNy
ZWF0ZURvY3VtZW50VHlwZShTdHJpbmdJbXBsICpxdWFsaWZpZWROYW1lLCBTdHJpbmdJbXBsICpw
dWJsaWNJZCwgU3RyaW5nSW1wbCAqc3lzdGVtSWQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAg
ICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnQoU3RyaW5nSW1wbCAqbmFt
ZXNwYWNlVVJJLCBTdHJpbmdJbXBsICpxdWFsaWZpZWROYW1lLCBEb2N1bWVudFR5cGUgKmRvY3R5
cGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4g
Y3JlYXRlRG9jdW1lbnQoU3RyaW5nSW1wbCAqbmFtZXNwYWNlVVJJLCBTdHJpbmdJbXBsICpxdWFs
aWZpZWROYW1lLCBEb2N1bWVudFR5cGUgKmRvY3R5cGUsIGJvb2wgY3JlYXRlRG9jRWxlbWVudCwg
RnJhbWVWaWV3KiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgICAgICBib29sIGhhc0ZlYXR1
cmUoU3RyaW5nSW1wbCogZmVhdHVyZSwgU3RyaW5nSW1wbCogdmVyc2lvbikgY29uc3Q7CisgICAg
ICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRUeXBlPiBjcmVhdGVEb2N1bWVudFR5cGUoU3RyaW5nSW1w
bCogcXVhbGlmaWVkTmFtZSwgU3RyaW5nSW1wbCogcHVibGljSWQsIFN0cmluZ0ltcGwqIHN5c3Rl
bUlkLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+
IGNyZWF0ZURvY3VtZW50KFN0cmluZ0ltcGwqIG5hbWVzcGFjZVVSSSwgU3RyaW5nSW1wbCogcXVh
bGlmaWVkTmFtZSwgRG9jdW1lbnRUeXBlKiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgICAg
ICBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudChTdHJpbmdJbXBsKiBuYW1lc3Bh
Y2VVUkksIFN0cmluZ0ltcGwqIHF1YWxpZmllZE5hbWUsIERvY3VtZW50VHlwZSosIGJvb2wgY3Jl
YXRlRG9jRWxlbWVudCwgRnJhbWVWaWV3KiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogCi0gICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGVDU1NTdHlsZVNoZWV0
KFN0cmluZ0ltcGwgKnRpdGxlLCBTdHJpbmdJbXBsICptZWRpYSkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGVDU1NTdHlsZVNoZWV0KFN0cmlu
Z0ltcGwqIHRpdGxlLCBTdHJpbmdJbXBsKiBtZWRpYSkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVh
bCBEb2N1bWVudFR5cGUgKmRlZmF1bHREb2N1bWVudFR5cGUoKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCBEb2N1bWVudFR5cGUqIGRlZmF1bHREb2N1bWVudFR5cGUoKSBjb25zdDsKIAogICAgICAg
ICBib29sIGluQW5pbWF0aW9uQ29udGV4dCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEFuaW1h
dGlvbkNvbnRleHQoYm9vbCB2YWx1ZSk7CkBAIC02Myw2ICs1Niw3IEBACiAgICAgcHJpdmF0ZToK
ICAgICAgICAgYm9vbCBtX2FuaW1hdGlvbkNvbnRleHQgOiAxOwogICAgIH07CisKIH0KIAogI2Vu
ZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdET01JbXBsZW1l
bnRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRE9NSW1wbGVt
ZW50YXRpb24uY3BwCShyZXZpc2lvbiAxNDcxMSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RP
TUltcGxlbWVudGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksNiBAQAogCiBT
VkdET01JbXBsZW1lbnRhdGlvbjo6flNWR0RPTUltcGxlbWVudGF0aW9uKCkKIHsKLSAgICAvLyBj
bGVhbiB1cCBzdGF0aWMgZGF0YQotICAgIC8vU1ZHUmVuZGVyU3R5bGU6OmNsZWFudXAoKTsKIH0K
IAogU1ZHRE9NSW1wbGVtZW50YXRpb24gKlNWR0RPTUltcGxlbWVudGF0aW9uOjppbnN0YW5jZSgp
CkBAIC0xNTUsNyArMTUzLDcgQEAKICAgICByZXR1cm4gY3JlYXRlRG9jdW1lbnQobmFtZXNwYWNl
VVJJLCBxdWFsaWZpZWROYW1lSW1wbCwgZG9jdHlwZSwgdHJ1ZSwgMCwgZWMpOwogfQogCi1QYXNz
UmVmUHRyPERvY3VtZW50PiBTVkdET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoU3Ry
aW5nSW1wbCAqbmFtZXNwYWNlVVJJSW1wbCwgU3RyaW5nSW1wbCAqcXVhbGlmaWVkTmFtZUltcGws
IERvY3VtZW50VHlwZSAqZG9jdHlwZSwgYm9vbCBjcmVhdGVEb2NFbGVtZW50LCBLRE9NVmlldyAq
dmlldywgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitQYXNzUmVmUHRyPERvY3VtZW50PiBTVkdE
T01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoU3RyaW5nSW1wbCAqbmFtZXNwYWNlVVJJ
SW1wbCwgU3RyaW5nSW1wbCAqcXVhbGlmaWVkTmFtZUltcGwsIERvY3VtZW50VHlwZSAqZG9jdHlw
ZSwgYm9vbCBjcmVhdGVEb2NFbGVtZW50LCBGcmFtZVZpZXcgKnZpZXcsIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAogewogICAgIFN0cmluZyBuYW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJSW1wbCk7
CiAgICAgU3RyaW5nIHF1YWxpZmllZE5hbWUocXVhbGlmaWVkTmFtZUltcGwpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8693</attachid>
            <date>2006-06-04 11:11:13 -0700</date>
            <delta_ts>2006-06-04 11:13:14 -0700</delta_ts>
            <desc>updated patch (merged with Anders&apos;s XPath change)</desc>
            <filename>XPathLeakPatch.txt</filename>
            <type>text/plain</type>
            <size>127784</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NzE3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDYtMDYtMDQgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gY2hhbmdlZCBkZWxldGVBbGxWYWx1ZXMgc28gaXQgY2FuIHdvcmsg
b24gImNvbnN0IiBjb2xsZWN0aW9ucworICAgICAgICAgIERlbGV0aW5nIHRoZSB2YWx1ZXMgYWZm
ZWN0cyB0aGUgdmFsdWVzLCBub3QgdGhlIHBvaW50ZXJzIGluIHRoZQorICAgICAgICAgIGNvbGxl
Y3Rpb24sIHNvIGl0J3MgbGVnaXRpbWF0ZSB0byBkbyBpdCB0byBhIGNvbnN0IGNvbGxlY3Rpb24s
CisgICAgICAgICAgYW5kIGEgY2FzZSBvZiB0aGF0IGFjdHVhbGx5IGNhbWUgdXAgaW4gdGhlIFhQ
YXRoIGNvZGUuCisKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RGOjpkZWxl
dGVBbGxQYWlyU2Vjb25kcyk6IFVzZSBjb25zdCBpdGVyYXRvcnMuCisgICAgICAgIChXVEY6OmRl
bGV0ZUFsbFZhbHVlcyk6IFRha2UgY29uc3QgSGFzaE1hcCByZWZlcmVuY2UgYXMgYSBwYXJhbWV0
ZXIuCisgICAgICAgICogd3RmL0hhc2hTZXQuaDoKKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsVmFs
dWVzKTogVGFrZSBjb25zdCBIYXNoU2V0IHJlZmVyZW5jZSBhcyBhIHBhcmFtZXRlciwKKyAgICAg
ICAgYW5kIHVzZSBjb25zdCBpdGVyYXRvcnMuCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAg
ICAgICAoV1RGOjpkZWxldGVBbGxWYWx1ZXMpOiBUYWtlIGNvbnN0IFZlY3RvciByZWZlcmVuY2Ug
YXMgYSBwYXJhbWV0ZXIuCisKKyAgICAgICAgLSBhZGRlZCBtb3JlIGZ1bmN0aW9ucyB0aGF0IGFy
ZSBwcmVzZW50IGluIDxtYXRoLmg+IG9uIHNvbWUgcGxhdGZvcm1zLAorICAgICAgICAgIGJ1dCBu
b3Qgb24gb3RoZXJzOyBtb3ZlZCBoZXJlIGZyb20gdmFyaW91cyBmaWxlcyBpbiBXZWJDb3JlCisK
KyAgICAgICAgKiB3dGYvTWF0aEV4dHJhcy5oOgorICAgICAgICAoaXNpbmYpOiBBZGRlZC4KKyAg
ICAgICAgKGlzbmFuKTogQWRkZWQuCisgICAgICAgIChscm91bmQpOiBBZGRlZC4KKyAgICAgICAg
KGxyb3VuZGYpOiBUd2Vha2VkLgorICAgICAgICAocm91bmQpOiBBZGRlZC4KKyAgICAgICAgKHJv
dW5kZik6IFR3ZWFrZWQuCisgICAgICAgIChzaWduYml0KTogQWRkZWQuCisKIDIwMDYtMDYtMDIg
IE1pdHogUGV0dGVsICA8b3BlbmRhcndpbi5vcmdAbWl0enBldHRlbC5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgZ2dhcmVuLgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFNldC5oCShyZXZpc2lvbiAxNDcx
NykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDcgQEAKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIEhhc2hTZXQ7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4K
LSAgICB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+Jik7CisgICAgdm9pZCBkZWxldGVBbGxWYWx1ZXMoY29uc3QgSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPiYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz46Okhh
c2gsCiAgICAgICAgIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+ID4g
Y2xhc3MgSGFzaFNldCB7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIHZvaWQgcmVmQWxsKCk7
CiAgICAgICAgIHZvaWQgZGVyZWZBbGwoKTsKIAotICAgICAgICBmcmllbmQgdm9pZCBkZWxldGVB
bGxWYWx1ZXM8PihIYXNoU2V0Jik7CisgICAgICAgIGZyaWVuZCB2b2lkIGRlbGV0ZUFsbFZhbHVl
czw+KGNvbnN0IEhhc2hTZXQmKTsKIAogICAgICAgICBIYXNoVGFibGVUeXBlIG1faW1wbDsKICAg
ICB9OwpAQCAtMjk0LDE0ICsyOTQsMTQgQEAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5
cGUsIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CiAgICAgdm9pZCBkZWxldGVBbGxWYWx1ZXMoSGFz
aFRhYmxlVHlwZSYgY29sbGVjdGlvbikKICAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
SGFzaFRhYmxlVHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgIGl0ZXJh
dG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBj
b2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGRlbGV0ZSAq
KFZhbHVlVHlwZSopJippdDsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGluZSB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhIYXNo
U2V0PFQsIFUsIFY+JiBjb2xsZWN0aW9uKQorICAgIGlubGluZSB2b2lkIGRlbGV0ZUFsbFZhbHVl
cyhjb25zdCBIYXNoU2V0PFQsIFUsIFY+JiBjb2xsZWN0aW9uKQogICAgIHsKICAgICAgICAgZGVs
ZXRlQWxsVmFsdWVzPHR5cGVuYW1lIEhhc2hTZXQ8VCwgVSwgVj46OlZhbHVlVHlwZT4oY29sbGVj
dGlvbi5tX2ltcGwpOwogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDE0NzE3
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nzks
MTEgKzU3OSwxMSBAQAogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KLSAgICB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHk+JiBjb2xsZWN0aW9uKQorICAgIHZvaWQgZGVsZXRlQWxsVmFsdWVzKGNvbnN0IFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGNvbGxlY3Rpb24pCiAgICAgewotICAgICAgICB0eXBl
ZGVmIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gVmVjOwotICAgICAgICB0eXBlbmFtZSBWZWM6
Oml0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7Ci0gICAgICAgIGZvciAodHlwZW5hbWUg
VmVjOjppdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OmNvbnN0
X2l0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVu
ZCgpOworICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBkZWxldGUgKml0OwogICAgIH0KIApJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAxNDcxNykKKysrIEphdmFTY3JpcHRDb3JlL3d0
Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNCBAQAogCiAjaWYg
UExBVEZPUk0oV0lOKQogCi1pbmxpbmUgZmxvYXQgcm91bmRmKGZsb2F0IG51bSkKLXsKLSAgICBy
ZXR1cm4gbnVtID4gMCA/IGZsb29yZihudW0gKyAwLjVmKSA6IGNlaWxmKG51bSAtIDAuNWYpOwot
fQorI2luY2x1ZGUgPHhtYXRoLmg+CiAKLWlubGluZSBsb25nIGxyb3VuZGYoZmxvYXQgbnVtKQot
ewotICAgIHJldHVybiBudW0gPiAwID8gbnVtICsgMC41ZiA6IGNlaWxmKG51bSAtIDAuNWYpOwot
fQoraW5saW5lIGJvb2wgaXNpbmYoZG91YmxlIG51bSkgeyByZXR1cm4gIV9maW5pdGUobnVtKTsg
fQoraW5saW5lIGJvb2wgaXNuYW4oZG91YmxlIG51bSkgeyByZXR1cm4gX2lzbmFuKG51bSk7IH0K
K2lubGluZSBsb25nIGxyb3VuZChkb3VibGUgbnVtKSB7IHJldHVybiBudW0gPiAwID8gbnVtICsg
MC41IDogY2VpbChudW0gLSAwLjUpOyB9CitpbmxpbmUgbG9uZyBscm91bmRmKGZsb2F0IG51bSkg
eyByZXR1cm4gbnVtID4gMCA/IG51bSArIDAuNWYgOiBjZWlsZihudW0gLSAwLjVmKTsgfQoraW5s
aW5lIGRvdWJsZSByb3VuZChkb3VibGUgbnVtKSB7IHJldHVybiBudW0gPiAwID8gZmxvb3IobnVt
ICsgMC41KSA6IGNlaWwobnVtIC0gMC41KTsgfQoraW5saW5lIGZsb2F0IHJvdW5kZihmbG9hdCBu
dW0pIHsgcmV0dXJuIG51bSA+IDAgPyBmbG9vcmYobnVtICsgMC41ZikgOiBjZWlsZihudW0gLSAw
LjVmKTsgfQoraW5saW5lIGJvb2wgc2lnbmJpdChkb3VibGUgbnVtKSB7IHJldHVybiBfY29weXNp
Z24oMS4wLCBudW0pIDwgMDsgfQogCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9I
YXNoTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hNYXAuaAkocmV2
aXNpb24gMTQ3MTcpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaE1hcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDgsMTQgKzMwOCwxNCBAQAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcHBlZFR5
cGUsIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CiAgICAgdm9pZCBkZWxldGVBbGxQYWlyU2Vjb25k
cyhIYXNoVGFibGVUeXBlJiBjb2xsZWN0aW9uKQogICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBIYXNoVGFibGVUeXBlOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgICAgICAg
aXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKICAgICAgICAgZm9yIChpdGVyYXRvciBp
dCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgZGVs
ZXRlICooTWFwcGVkVHlwZSopJml0LT5zZWNvbmQ7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
LSAgICBpbmxpbmUgdm9pZCBkZWxldGVBbGxWYWx1ZXMoSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYg
Y29sbGVjdGlvbikKKyAgICBpbmxpbmUgdm9pZCBkZWxldGVBbGxWYWx1ZXMoY29uc3QgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPiYgY29sbGVjdGlvbikKICAgICB7CiAgICAgICAgIGRlbGV0ZUFsbFBh
aXJTZWNvbmRzPHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Ok1hcHBlZFR5cGU+KGNv
bGxlY3Rpb24pOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTQ3MTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsOCArMTQ4LDcgQEAK
ICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZShzaGlmdCk7CiAgICAg
CiAgICAgIyBXaGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcyAK
LSAgICAjIHJlb3JnYW5pemF0aW9uLCB3ZSBkb24ndCBuZWVkIHRoZXNlIHNwZWNpYWwgY2FzZXMu
Ci0gICAgCisgICAgIyByZW9yZ2FuaXphdGlvbiwgd2Ugd29uJ3QgbmVlZCB0aGVzZSBzcGVjaWFs
IGNhc2VzLgogICAgIGlmICgkdHlwZSBlcSAiTXV0YXRpb25FdmVudCIgb3IKICAgICAgICAgJHR5
cGUgZXEgIktleWJvYXJkRXZlbnQiIG9yCiAgICAgICAgICR0eXBlIGVxICJNb3VzZUV2ZW50IiBv
cgpAQCAtMTU3LDE5ICsxNTYsMjMgQEAKICAgICAgICAgJHR5cGUgZXEgIlVJRXZlbnQiIG9yCiAg
ICAgICAgICR0eXBlIGVxICJXaGVlbEV2ZW50IikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJk
b20yX2V2ZW50c2ltcGwuaCJ9ID0gMTsKLSAgICB9IGVsc2lmICgkdHlwZSBlcSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEIikgeworICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1p
dGl2ZVR5cGUoJHR5cGUpCisgICAgICAgIG9yICR0eXBlIGVxICJET01TdHJpbmciIG9yICR0eXBl
IGVxICJET01PYmplY3QiIG9yICR0eXBlIGVxICJSR0JDb2xvciIgb3IgJHR5cGUgZXEgIlJlY3Qi
KSB7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5h
bWVkIGZpbGUKKyAgICAgICAgJGltcGxJbmNsdWRlc3siJHt0eXBlfS5oIn0gPSAxOworICAgIH0K
KworICAgICMgYWRkaXRpb25hbCBpbmNsdWRlcyAodGhpbmdzIG5lZWRlZCB0byBjb21waWxlIHRo
ZSBiaW5kaW5ncyBidXQgbm90IHRoZSBoZWFkZXIpCisKKyAgICBpZiAoJHR5cGUgZXEgIkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzR3Jh
ZGllbnQuaCJ9ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzUGF0dGVybi5oIn0g
PSAxOwotICAgICAgICAkaW1wbEluY2x1ZGVzeyJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCJ9
ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzU3R5bGUuaCJ9ID0gMTsKLSAgICB9
IGVsc2lmICgkdHlwZSBlcSAiQ2FudmFzR3JhZGllbnQiKSB7Ci0gICAgICAgICRpbXBsSW5jbHVk
ZXN7IkNhbnZhc0dyYWRpZW50LmgifSA9IDE7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJD
YW52YXNHcmFkaWVudCIgb3IgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKICAgICAgICAg
JGltcGxJbmNsdWRlc3siUGxhdGZvcm1TdHJpbmcuaCJ9ID0gMTsKLSAgICB9IGVsc2lmICgkY29k
ZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBvcgotICAgICAgICAkdHlwZSBlcSAi
RE9NU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NT2JqZWN0IiBvciAkdHlwZSBlcSAiUkdCQ29sb3Ii
IG9yICR0eXBlIGVxICJSZWN0IikgewotICAgIH0gZWxzZSB7Ci0gICAgICAgICMgZGVmYXVsdCwg
aW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlCi0gICAgICAgICRpbXBsSW5jbHVkZXN7IiR7dHlw
ZX0uaCJ9ID0gMTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuaAkocmV2
aXNpb24gMTQ3MTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw4ICszOSw2IEBACiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCi0gICAg
dmlydHVhbCBpbnQgc3RhcnQoKSBjb25zdCB7IHJldHVybiAxOyB9Ci0KICAgICBib29sIGNvbXBh
Y3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CiAKSW5kZXg6IFdlYkNvcmUv
ZG9tL0RPTUltcGxlbWVudGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRE9NSW1w
bGVtZW50YXRpb24uaAkocmV2aXNpb24gMTQ3MTcpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1l
bnRhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBACiAKIGNsYXNzIERPTUlt
cGxlbWVudGF0aW9uIDogcHVibGljIFNoYXJlZDxET01JbXBsZW1lbnRhdGlvbj4gewogcHVibGlj
OgorICAgIHZpcnR1YWwgfkRPTUltcGxlbWVudGF0aW9uKCk7IAorCiAgICAgLy8gRE9NIG1ldGhv
ZHMgJiBhdHRyaWJ1dGVzIGZvciBET01JbXBsZW1lbnRhdGlvbgogICAgIGJvb2wgaGFzRmVhdHVy
ZShjb25zdCBTdHJpbmcmIGZlYXR1cmUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikgY29uc3Q7CiAg
ICAgUGFzc1JlZlB0cjxEb2N1bWVudFR5cGU+IGNyZWF0ZURvY3VtZW50VHlwZShjb25zdCBTdHJp
bmcmIHF1YWxpZmllZE5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyAm
c3lzdGVtSWQsIEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVu
dGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5j
cHAJKHJldmlzaW9uIDE0NzE3KQorKysgV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAorRE9NSW1wbGVtZW50YXRpb246On5ET01JbXBsZW1lbnRhdGlvbigpCit7Cit9CisKIGJvb2wg
RE9NSW1wbGVtZW50YXRpb246Omhhc0ZlYXR1cmUgKGNvbnN0IFN0cmluZyYgZmVhdHVyZSwgY29u
c3QgU3RyaW5nJiB2ZXJzaW9uKSBjb25zdAogewogICAgIFN0cmluZyBsb3dlciA9IGZlYXR1cmUu
bG93ZXIoKTsKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNDcxNykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI0LDYgKzE1MjQsMjMgQEAKIAkJRkFFMDQxOTAw
OTc1OTZDOTAwMDU0MEJFIC8qIFNWR0ltYWdlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQUUwNDE4RTA5NzU5NkM5MDAwNTQwQkUgLyogU1ZH
SW1hZ2VMb2FkZXIuaCAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCisv
KiBCZWdpbiBQQlhCdWlsZFN0eWxlIHNlY3Rpb24gKi8KKwkJOTNGRjdFRjMwQTMzNENDNzAwNTYz
ODdDIC8qIERldmVsb3BtZW50ICovID0geworCQkJaXNhID0gUEJYQnVpbGRTdHlsZTsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJfTsKKwkJCW5h
bWUgPSBEZXZlbG9wbWVudDsKKwkJfTsKKwkJOTNGRjdFRjQwQTMzNENDNzAwNTYzODdDIC8qIERl
cGxveW1lbnQgKi8gPSB7CisJCQlpc2EgPSBQQlhCdWlsZFN0eWxlOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJfTsKKwkJCW5hbWUgPSBEZXBs
b3ltZW50OworCQl9OworLyogRW5kIFBCWEJ1aWxkU3R5bGUgc2VjdGlvbiAqLworCiAvKiBCZWdp
biBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwogCQlERDA0MUZGMDA5RDlFMzI1MDAx
MEFGMkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFp
bmVySXRlbVByb3h5OwpAQCAtNjIxNiw2ICs2MjMzLDEyIEBACiAJCTA4NjdENjkwRkU4NDAyOEZD
MDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJ
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJfTsKKwkJCWJ1aWxkU3R5bGVzID0gKAorCQkJCTkzRkY3RUYz
MEEzMzRDQzcwMDU2Mzg3QyAvKiBEZXZlbG9wbWVudCAqLywKKwkJCQk5M0ZGN0VGNDBBMzM0Q0M3
MDA1NjM4N0MgLyogRGVwbG95bWVudCAqLywKKwkJCSk7CiAJCQloYXNTY2FubmVkRm9yRW5jb2Rp
bmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApJbmRleDogV2ViQ29y
ZS94cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9Y
UGF0aE5hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDE0NzE3KQorKysgV2ViQ29yZS94cGF0aC9YUGF0
aE5hbWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIwICsyMywyMSBAQAogICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJYUGF0aE5hbWVzcGFjZS5oIgogCiAjaWYgWFBBVEhfU1VQUE9SVAogCi0jaW5jbHVk
ZSAiWFBhdGhOYW1lc3BhY2UuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBYUGF0aE5hbWVzcGFjZTo6WFBhdGhO
YW1lc3BhY2UoUGFzc1JlZlB0cjxFbGVtZW50PiBvd25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
cHJlZml4LCBjb25zdCBTdHJpbmcmIHVyaSkKLSAgICA6IE5vZGUob3duZXJFbGVtZW50LT5kb2N1
bWVudCgpKSwKLSAgICBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpLAotICAgIG1fcHJlZml4
KHByZWZpeCksCi0gICAgbV91cmkodXJpKQorICAgIDogTm9kZShvd25lckVsZW1lbnQtPmRvY3Vt
ZW50KCkpCisgICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCisgICAgLCBtX3ByZWZp
eChwcmVmaXgpCisgICAgLCBtX3VyaSh1cmkpCiB7CiB9CiAKQEAgLTgyLDQgKzgzLDMgQEAKIH0K
IAogI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKLQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV4
cHJlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9u
LmNwcAkocmV2aXNpb24gMTQ3MTcpCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxMiBAQAogICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYUGF0
aEV4cHJlc3Npb24uaCIKIAogI2lmIFhQQVRIX1NVUFBPUlQKIAotI2luY2x1ZGUgIlhQYXRoRXhw
cmVzc2lvbi5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCkBAIC00NiwxMiArNDcsMTIgQEAKIHsKICAgICBSZWZQ
dHI8WFBhdGhFeHByZXNzaW9uPiBleHByID0gbmV3IFhQYXRoRXhwcmVzc2lvbjsKICAgICBQYXJz
ZXIgcGFyc2VyOwotICAgIAorCiAgICAgZXhwci0+bV90b3BFeHByZXNzaW9uID0gcGFyc2VyLnBh
cnNlU3RhdGVtZW50KGV4cHJlc3Npb24sIHJlc29sdmVyLCBlYyk7CiAgICAgaWYgKCFleHByLT5t
X3RvcEV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGV4cHI7Cisg
ICAgcmV0dXJuIGV4cHIucmVsZWFzZSgpOwogfQogCiBYUGF0aEV4cHJlc3Npb246On5YUGF0aEV4
cHJlc3Npb24oKQpAQCAtNTksMjggKzYwLDI0IEBACiAgICAgZGVsZXRlIG1fdG9wRXhwcmVzc2lv
bjsKIH0KIAotUGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gWFBhdGhFeHByZXNzaW9uOjpldmFsdWF0
ZShOb2RlKiBjb250ZXh0Tm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQqLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykK
K1Bhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IFhQYXRoRXhwcmVzc2lvbjo6ZXZhbHVhdGUoTm9kZSog
Y29udGV4dE5vZGUsIHVuc2lnbmVkIHNob3J0IHR5cGUsIFhQYXRoUmVzdWx0KiwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgaWYgKCFpc1ZhbGlkQ29udGV4dE5vZGUoY29udGV4dE5vZGUpKSB7
CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICAKLSAgICBOb2RlKiBldmVudFRhcmdldCA9IGNvbnRleHROb2RlLT5vd25lckRvY3Vt
ZW50KCkgPyAKLSAgICAgICAgY29udGV4dE5vZGUtPm93bmVyRG9jdW1lbnQoKSA6IGNvbnRleHRO
b2RlOwotICAgIAorCisgICAgRXZlbnRUYXJnZXROb2RlKiBldmVudFRhcmdldCA9IGNvbnRleHRO
b2RlLT5vd25lckRvY3VtZW50KCkKKyAgICAgICAgPyBjb250ZXh0Tm9kZS0+b3duZXJEb2N1bWVu
dCgpCisgICAgICAgIDogc3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXROb2RlKj4oY29udGV4dE5vZGUp
OworCiAgICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlID0gY29udGV4dE5v
ZGU7ICAgIAogICAgIG1fdG9wRXhwcmVzc2lvbi0+b3B0aW1pemUoKTsKLSAgICAKLSAgICBSZWZQ
dHI8WFBhdGhSZXN1bHQ+IHJlc3VsdCA9IG5ldyBYUGF0aFJlc3VsdChzdGF0aWNfY2FzdDxFdmVu
dFRhcmdldE5vZGUqPihldmVudFRhcmdldCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV90b3BFeHByZXNzaW9uLT5ldmFsdWF0ZSgpKTsKLSAgICAK
KyAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+IHJlc3VsdCA9IG5ldyBYUGF0aFJlc3VsdChldmVudFRh
cmdldCwgbV90b3BFeHByZXNzaW9uLT5ldmFsdWF0ZSgpKTsKKwogICAgIGlmICh0eXBlICE9IFhQ
YXRoUmVzdWx0OjpBTllfVFlQRSkgeworICAgICAgICBlYyA9IDA7CiAgICAgICAgIHJlc3VsdC0+
Y29udmVydFRvKHR5cGUsIGVjKTsKLQogICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICB9CkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVzcGFjZS5oCShyZXZpc2lvbiAxNDcxNykK
KysrIFdlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NDEgKzIzLDQwIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lm
bmRlZiBYUGF0aE5hbWVzcGFjZV9ICiAjZGVmaW5lIFhQYXRoTmFtZXNwYWNlX0gKIAogI2lmIFhQ
QVRIX1NVUFBPUlQKIAotI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJBdG9taWNTdHJp
bmcuaCIKKyNpbmNsdWRlICJOb2RlLmgiCiAKLW5hbWVzcGFjZSBXZWJDb3JlCi17CituYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIERvY3VtZW50OworICAg
IGNsYXNzIEVsZW1lbnQ7CiAKLWNsYXNzIFhQYXRoTmFtZXNwYWNlIDogcHVibGljIE5vZGUKLXsK
LXB1YmxpYzoKLSAgICBYUGF0aE5hbWVzcGFjZShQYXNzUmVmUHRyPEVsZW1lbnQ+IG93bmVyRWxl
bWVudCwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHByZWZpeCwgY29uc3QgU3Ry
aW5nJiB1cmkpOwotICAgIHZpcnR1YWwgflhQYXRoTmFtZXNwYWNlKCk7CisgICAgY2xhc3MgWFBh
dGhOYW1lc3BhY2UgOiBwdWJsaWMgTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBYUGF0aE5h
bWVzcGFjZShQYXNzUmVmUHRyPEVsZW1lbnQ+IG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiBw
cmVmaXgsIGNvbnN0IFN0cmluZyYgdXJpKTsKKyAgICAgICAgdmlydHVhbCB+WFBhdGhOYW1lc3Bh
Y2UoKTsKIAotICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEVsZW1lbnQqIG93bmVyRWxlbWVudCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgRWxlbWVu
dCogb3duZXJFbGVtZW50KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJlZml4KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcg
bm9kZU5hbWUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgbm9kZVZhbHVlKCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgTm9kZTo6Tm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBOb2RlOjpOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OwogCi1wcml2YXRl
OgotICAgIFJlZlB0cjxFbGVtZW50PiBtX293bmVyRWxlbWVudDsKLSAgICBBdG9taWNTdHJpbmcg
bV9wcmVmaXg7Ci0gICAgQXRvbWljU3RyaW5nIG1fdXJpOwotfTsKKyAgICBwcml2YXRlOgorICAg
ICAgICBSZWZQdHI8RWxlbWVudD4gbV9vd25lckVsZW1lbnQ7CisgICAgICAgIEF0b21pY1N0cmlu
ZyBtX3ByZWZpeDsKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fdXJpOworICAgIH07CiAKIH0KIApJ
bmRleDogV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTQ3MTcpCisrKyBXZWJD
b3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsy
MywxMiBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKIAogI2lmIFhQQVRIX1NV
UFBPUlQKIAotI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNiArMzgsMTAgQEAKIHsKIH0KIAorWFBhdGhO
U1Jlc29sdmVyOjp+WFBhdGhOU1Jlc29sdmVyKCkKK3sKK30KKwogU3RyaW5nIFhQYXRoTlNSZXNv
bHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKGNvbnN0IFN0cmluZyYgcHJlZml4KQogewogICAgIC8v
IFRoaXMgaXMgbm90IGRvbmUgYnkgTm9kZTo6bG9va3VwTmFtZXNwYWNlVVJJIGFzIHBlciB0aGUg
RE9NMyBDb3JlIHNwZWMsCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAkocmV2aXNpb24g
MTQ3MTcpCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMsMTcgKzIzLDE3IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAK
ICNpZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiWFBhdGhF
eHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiWFBh
dGhSZXN1bHQuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQogI2luY2x1ZGUgIlhQ
YXRoVXRpbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQ
YXRoRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNz
aW9uLmgJKHJldmlzaW9uIDE0NzE3KQorKysgV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Npb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsNDYgKzIzLDQwIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
ICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBYUGF0aEV4cHJlc3Npb25fSAogI2RlZmluZSBY
UGF0aEV4cHJlc3Npb25fSAogCiAjaWYgWFBBVEhfU1VQUE9SVAogCiAjaW5jbHVkZSAiU2hhcmVk
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorbmFtZXNwYWNlIFdlYkNvcmUgewogCi0j
aW5jbHVkZSAiWFBhdGhFeHByZXNzaW9uTm9kZS5oIgorICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CiAKLW5hbWVzcGFjZSBXZWJDb3JlCi17Ci1jbGFzcyBOb2RlOworICAgIGNsYXNzIE5v
ZGU7CisgICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNzIFhQYXRoTlNSZXNvbHZlcjsKKyAgICBj
bGFzcyBYUGF0aFJlc3VsdDsKIAotY2xhc3MgWFBhdGhOU1Jlc29sdmVyOwotY2xhc3MgWFBhdGhS
ZXN1bHQ7CisgICAgbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAgICAgY2xhc3MgRXhwcmVzc2lvbjsK
KyAgICB9CiAKLWNsYXNzIFhQYXRoRXhwcmVzc2lvbiA6IHB1YmxpYyBTaGFyZWQ8WFBhdGhFeHBy
ZXNzaW9uPgotewotcHVibGljOgotICAgIH5YUGF0aEV4cHJlc3Npb24oKTsKKyAgICBjbGFzcyBY
UGF0aEV4cHJlc3Npb24gOiBwdWJsaWMgU2hhcmVkPFhQYXRoRXhwcmVzc2lvbj4geworICAgIHB1
YmxpYzoKKyAgICAgICAgflhQYXRoRXhwcmVzc2lvbigpOworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxYUGF0aEV4cHJlc3Npb24+IGNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBYUGF0aE5TUmVzb2x2ZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFBhc3NS
ZWZQdHI8WFBhdGhSZXN1bHQ+IGV2YWx1YXRlKE5vZGUqIGNvbnRleHROb2RlLCB1bnNpZ25lZCBz
aG9ydCB0eXBlLCBYUGF0aFJlc3VsdCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgICAgIAor
ICAgIHByaXZhdGU6CisgICAgICAgIFhQYXRoOjpFeHByZXNzaW9uKiBtX3RvcEV4cHJlc3Npb247
CisgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gY3JlYXRl
RXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciosCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUmKTsKLQotICAgIFBhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IGV2YWx1YXRlKE5v
ZGUqIGNvbnRleHROb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WFBhdGhSZXN1bHQqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICAgICAgCi1wcml2YXRlOgotICAgIFhQYXRoOjpFeHByZXNzaW9uKiBt
X3RvcEV4cHJlc3Npb247Ci19OwotCiB9CiAKICNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCiAKICNl
bmRpZiAvLyBYUGF0aEV4cHJlc3Npb25fSAotCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoTlNS
ZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmgJ
KHJldmlzaW9uIDE0NzE3KQorKysgV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsMzAgKzIzLDMxIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KKwogI2lmbmRlZiBYUGF0aE5TUmVzb2x2ZXJfSAogI2RlZmluZSBYUGF0aE5T
UmVzb2x2ZXJfSAogCiAjaWYgWFBBVEhfU1VQUE9SVAogCiAjaW5jbHVkZSAiU2hhcmVkLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBXZWJD
b3JlCi17CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE5vZGU7CisgICAgY2xhc3MgTm9k
ZTsKKyAgICBjbGFzcyBTdHJpbmc7CiAKLWNsYXNzIFhQYXRoTlNSZXNvbHZlciA6IHB1YmxpYyBT
aGFyZWQ8WFBhdGhOU1Jlc29sdmVyPgoteworICAgIGNsYXNzIFhQYXRoTlNSZXNvbHZlciA6IHB1
YmxpYyBTaGFyZWQ8WFBhdGhOU1Jlc29sdmVyPiB7CiAgICAgcHVibGljOgogICAgICAgICBYUGF0
aE5TUmVzb2x2ZXIoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgICAgIH5YUGF0aE5TUmVzb2x2ZXIo
KTsKIAogICAgICAgICBTdHJpbmcgbG9va3VwTmFtZXNwYWNlVVJJKGNvbnN0IFN0cmluZyYgcHJl
Zml4KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7Ci19Owor
ICAgIH07CiAKIH0KIApJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaAkocmV2aXNpb24gMTQ3MTcp
CisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDQ3ICsyMyw0MCBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNp
Zm5kZWYgWFBhdGhFdmFsdWF0b3JfSAogI2RlZmluZSBYUGF0aEV2YWx1YXRvcl9ICiAKICNpZiBY
UEFUSF9TVVBQT1JUCiAKICNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSBXZWJDb3JlCi17Ci1jbGFz
cyBOb2RlOworICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIFhQYXRoRXhw
cmVzc2lvbjsKLWNsYXNzIFhQYXRoTlNSZXNvbHZlcjsKLWNsYXNzIFhQYXRoUmVzdWx0OworICAg
IGNsYXNzIE5vZGU7CisgICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNzIFhQYXRoRXhwcmVzc2lv
bjsKKyAgICBjbGFzcyBYUGF0aE5TUmVzb2x2ZXI7CisgICAgY2xhc3MgWFBhdGhSZXN1bHQ7CiAK
LWNvbnN0IGludCBYUGF0aEV4Y2VwdGlvbk9mZnNldCA9IDQwMDsKLWNvbnN0IGludCBYUGF0aEV4
Y2VwdGlvbk1heCA9IDQ5OTsgICAKKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIGV4Y2VwdGlv
biBjb2RlcyBtb3ZlIHRvIGFub3RoZXIgaGVhZGVyPworICAgIGNvbnN0IGludCBYUGF0aEV4Y2Vw
dGlvbk9mZnNldCA9IDQwMDsKKyAgICBjb25zdCBpbnQgWFBhdGhFeGNlcHRpb25NYXggPSA0OTk7
CisgICAgZW51bSBYUGF0aEV4Y2VwdGlvbkNvZGUgeyBJTlZBTElEX0VYUFJFU1NJT05fRVJSID0g
WFBhdGhFeGNlcHRpb25PZmZzZXQgKyA1MSwgVFlQRV9FUlIgfTsKIAotZW51bSBYUGF0aEV4Y2Vw
dGlvbkNvZGUgeyBJTlZBTElEX0VYUFJFU1NJT05fRVJSID0gWFBhdGhFeGNlcHRpb25PZmZzZXQg
KyA1MSwgVFlQRV9FUlIgfTsKKyAgICBjbGFzcyBYUGF0aEV2YWx1YXRvciA6IHB1YmxpYyBTaGFy
ZWQ8WFBhdGhFdmFsdWF0b3I+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBhc3NSZWZQdHI8WFBh
dGhFeHByZXNzaW9uPiBjcmVhdGVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
WFBhdGhOU1Jlc29sdmVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBQYXNzUmVmUHRyPFhQ
YXRoTlNSZXNvbHZlcj4gY3JlYXRlTlNSZXNvbHZlcihOb2RlKiBub2RlUmVzb2x2ZXIpOworICAg
ICAgICBQYXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIE5vZGUqIGNvbnRleHROb2RlLAorICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiwg
dW5zaWduZWQgc2hvcnQgdHlwZSwgWFBhdGhSZXN1bHQqLCBFeGNlcHRpb25Db2RlJik7CisgICAg
fTsKIAotY2xhc3MgWFBhdGhFdmFsdWF0b3IgOiBwdWJsaWMgU2hhcmVkPFhQYXRoRXZhbHVhdG9y
PgotewotcHVibGljOgotICAgIFBhc3NSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBjcmVhdGVFeHBy
ZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIFBhc3NSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBjcmVhdGVOU1Jlc29sdmVyKE5vZGUqIG5v
ZGVSZXNvbHZlcik7Ci0gICAgUGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gZXZhbHVhdGUoY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGNvbnRleHROb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhQYXRoTlNSZXNvbHZlciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYUGF0aFJlc3VsdCosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSYpOwotfTsKLQogfQogCiAjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAogCiAjZW5k
aWYgLy8gWFBhdGhFdmFsdWF0b3JfSAotCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhcnNlci5j
cHAJKHJldmlzaW9uIDE0NzE3KQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMsNTYgKzIzLDMyIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
ICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhQYXRo
UGFyc2VyLmgiCiAKICNpZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0aFBhcnNlci5o
IgotCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiWFBhdGhFdmFsdWF0b3Iu
aCIKKyNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJYUGF0aFN0ZXAuaCIK
IAoraW50IHhwYXRoeXlwYXJzZSh2b2lkKik7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBYUGF0aCB7CiAKK2NsYXNzIExvY2F0aW9uUGF0aDsKKwogI2luY2x1ZGUgIlhQYXRoR3Jh
bW1hci5oIiAgICAKIAotc3RydWN0IEF4aXNOYW1lTWFwcGluZyB7Ci0gICAgY29uc3QgY2hhciog
bmFtZTsKLSAgICBTdGVwOjpBeGlzVHlwZSB0eXBlOwotfTsKLQotc3RhdGljIEF4aXNOYW1lTWFw
cGluZyBheGlzTmFtZXNbXSA9IHsKLSAgICB7ICJhbmNlc3RvciIsIFN0ZXA6OkFuY2VzdG9yQXhp
cyB9LAotICAgIHsgImFuY2VzdG9yLW9yLXNlbGYiLCBTdGVwOjpBbmNlc3Rvck9yU2VsZkF4aXMg
fSwKLSAgICB7ICJhdHRyaWJ1dGUiLCBTdGVwOjpBdHRyaWJ1dGVBeGlzIH0sCi0gICAgeyAiY2hp
bGQiLCBTdGVwOjpDaGlsZEF4aXMgfSwKLSAgICB7ICJkZXNjZW5kYW50IiwgU3RlcDo6RGVzY2Vu
ZGFudEF4aXMgfSwKLSAgICB7ICJkZXNjZW5kYW50LW9yLXNlbGYiLCBTdGVwOjpEZXNjZW5kYW50
T3JTZWxmQXhpcyB9LAotICAgIHsgImZvbGxvd2luZyIsIFN0ZXA6OkZvbGxvd2luZ0F4aXMgfSwK
LSAgICB7ICJmb2xsb3dpbmctc2libGluZyIsIFN0ZXA6OkZvbGxvd2luZ1NpYmxpbmdBeGlzIH0s
Ci0gICAgeyAibmFtZXNwYWNlIiwgU3RlcDo6TmFtZXNwYWNlQXhpcyB9LAotICAgIHsgInBhcmVu
dCIsIFN0ZXA6OlBhcmVudEF4aXMgfSwKLSAgICB7ICJwcmVjZWRpbmciLCBTdGVwOjpQcmVjZWRp
bmdBeGlzIH0sCi0gICAgeyAicHJlY2VkaW5nLXNpYmxpbmciLCBTdGVwOjpQcmVjZWRpbmdTaWJs
aW5nQXhpcyB9LAotICAgIHsgInNlbGYiLCBTdGVwOjpTZWxmQXhpcyB9Ci19OwotCi1zdGF0aWMg
dW5zaWduZWQgYXhpc05hbWVzQ291bnQgPSBzaXplb2YoYXhpc05hbWVzKSAvIHNpemVvZihheGlz
TmFtZXNbMF0pOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IG5vZGVUeXBlTmFtZXNbXSA9IHsK
LSAgICAiY29tbWVudCIsCi0gICAgInRleHQiLAotICAgICJwcm9jZXNzaW5nLWluc3RydWN0aW9u
IiwKLSAgICAibm9kZSIsCi0gICAgMAotfTsKLQotSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXNU
eXBlPiogUGFyc2VyOjpzX2F4aXNOYW1lc0RpY3QgPSAwOwotSGFzaFNldDxTdHJpbmc+KiBQYXJz
ZXI6OnNfbm9kZVR5cGVOYW1lc0RpY3QgPSAwOwotCiBQYXJzZXIqIFBhcnNlcjo6Y3VycmVudFBh
cnNlciA9IDA7CisgICAgCitlbnVtIFhNTENhdCB7IE5hbWVTdGFydCwgTmFtZUNvbnQsIE5vdFBh
cnRPZk5hbWUgfTsKIAotUGFyc2VyOjpYTUxDYXQgUGFyc2VyOjpjaGFyQ2F0KFVDaGFyIGFDaGFy
KQorc3RhdGljIFhNTENhdCBjaGFyQ2F0KFVDaGFyIGFDaGFyKQogewogICAgIC8vIyMjIG1pZ2h0
IG5lZWQgdG8gYWRkIHNvbWUgc3BlY2lhbCBjYXNlcyBmcm9tIHRoZSBYTUwgc3BlYy4KIApAQCAt
OTksMzcgKzc1LDYyIEBACiAgICAgfQogfQogCi1ib29sIFBhcnNlcjo6aXNBeGlzTmFtZShjb25z
dCBTdHJpbmcmIG5hbWUsIFN0ZXA6OkF4aXNUeXBlJiB0eXBlKQorc3RhdGljIHZvaWQgc2V0VXBB
eGlzTmFtZXNNYXAoSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+JiBheGlzTmFtZXMpCiB7Ci0g
ICAgaWYgKCFzX2F4aXNOYW1lc0RpY3QpIHsKLSAgICAgICAgc19heGlzTmFtZXNEaWN0ID0gbmV3
IEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlwZT47Ci0gICAgICAgIGZvciAodW5zaWduZWQg
cCA9IDA7IHAgPCBheGlzTmFtZXNDb3VudDsgKytwKQotICAgICAgICAgICAgc19heGlzTmFtZXNE
aWN0LT5zZXQoYXhpc05hbWVzW3BdLm5hbWUsIGF4aXNOYW1lc1twXS50eXBlKTsKLSAgICB9Cisg
ICAgc3RydWN0IEF4aXNOYW1lIHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAg
U3RlcDo6QXhpcyBheGlzOworICAgIH07CisgICAgY29uc3QgQXhpc05hbWUgYXhpc05hbWVMaXN0
W10gPSB7CisgICAgICAgIHsgImFuY2VzdG9yIiwgU3RlcDo6QW5jZXN0b3JBeGlzIH0sCisgICAg
ICAgIHsgImFuY2VzdG9yLW9yLXNlbGYiLCBTdGVwOjpBbmNlc3Rvck9yU2VsZkF4aXMgfSwKKyAg
ICAgICAgeyAiYXR0cmlidXRlIiwgU3RlcDo6QXR0cmlidXRlQXhpcyB9LAorICAgICAgICB7ICJj
aGlsZCIsIFN0ZXA6OkNoaWxkQXhpcyB9LAorICAgICAgICB7ICJkZXNjZW5kYW50IiwgU3RlcDo6
RGVzY2VuZGFudEF4aXMgfSwKKyAgICAgICAgeyAiZGVzY2VuZGFudC1vci1zZWxmIiwgU3RlcDo6
RGVzY2VuZGFudE9yU2VsZkF4aXMgfSwKKyAgICAgICAgeyAiZm9sbG93aW5nIiwgU3RlcDo6Rm9s
bG93aW5nQXhpcyB9LAorICAgICAgICB7ICJmb2xsb3dpbmctc2libGluZyIsIFN0ZXA6OkZvbGxv
d2luZ1NpYmxpbmdBeGlzIH0sCisgICAgICAgIHsgIm5hbWVzcGFjZSIsIFN0ZXA6Ok5hbWVzcGFj
ZUF4aXMgfSwKKyAgICAgICAgeyAicGFyZW50IiwgU3RlcDo6UGFyZW50QXhpcyB9LAorICAgICAg
ICB7ICJwcmVjZWRpbmciLCBTdGVwOjpQcmVjZWRpbmdBeGlzIH0sCisgICAgICAgIHsgInByZWNl
ZGluZy1zaWJsaW5nIiwgU3RlcDo6UHJlY2VkaW5nU2libGluZ0F4aXMgfSwKKyAgICAgICAgeyAi
c2VsZiIsIFN0ZXA6OlNlbGZBeGlzIH0KKyAgICB9OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplb2YoYXhpc05hbWVMaXN0KSAvIHNpemVvZihheGlzTmFtZUxpc3RbMF0pOyArK2kp
CisgICAgICAgIGF4aXNOYW1lcy5zZXQoYXhpc05hbWVMaXN0W2ldLm5hbWUsIGF4aXNOYW1lTGlz
dFtpXS5heGlzKTsKK30KIAotICAgIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlwZT46Oml0
ZXJhdG9yIGl0ID0gc19heGlzTmFtZXNEaWN0LT5maW5kKG5hbWUpOworc3RhdGljIGJvb2wgaXNB
eGlzTmFtZShjb25zdCBTdHJpbmcmIG5hbWUsIFN0ZXA6OkF4aXMmIHR5cGUpCit7CisgICAgc3Rh
dGljIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBheGlzTmFtZXM7CiAKLSAgICBpZiAoaXQg
PT0gc19heGlzTmFtZXNEaWN0LT5lbmQoKSkKKyAgICBpZiAoYXhpc05hbWVzLmlzRW1wdHkoKSkK
KyAgICAgICAgc2V0VXBBeGlzTmFtZXNNYXAoYXhpc05hbWVzKTsKKworICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdGVwOjpBeGlzPjo6aXRlcmF0b3IgaXQgPSBheGlzTmFtZXMuZmluZChuYW1lKTsKKyAg
ICBpZiAoaXQgPT0gYXhpc05hbWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
dHlwZSA9IGl0LT5zZWNvbmQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUGFyc2VyOjpp
c05vZGVUeXBlTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCitzdGF0aWMgYm9vbCBpc05vZGVUeXBl
TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFzX25vZGVUeXBlTmFtZXNEaWN0
KSB7Ci0gICAgICAgIHNfbm9kZVR5cGVOYW1lc0RpY3QgPSBuZXcgSGFzaFNldDxTdHJpbmc+Owot
ICAgICAgICBmb3IgKGludCBwID0gMDsgbm9kZVR5cGVOYW1lc1twXTsgKytwKQotICAgICAgICAg
ICAgc19ub2RlVHlwZU5hbWVzRGljdC0+YWRkKG5vZGVUeXBlTmFtZXNbcF0pOworICAgIHN0YXRp
YyBIYXNoU2V0PFN0cmluZz4gbm9kZVR5cGVOYW1lczsKKyAgICBpZiAobm9kZVR5cGVOYW1lcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgbm9kZVR5cGVOYW1lcy5hZGQoImNvbW1lbnQiKTsKKyAgICAg
ICAgbm9kZVR5cGVOYW1lcy5hZGQoInRleHQiKTsKKyAgICAgICAgbm9kZVR5cGVOYW1lcy5hZGQo
InByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iKTsKKyAgICAgICAgbm9kZVR5cGVOYW1lcy5hZGQoIm5v
ZGUiKTsKICAgICB9Ci0gICAgcmV0dXJuIHNfbm9kZVR5cGVOYW1lc0RpY3QtPmNvbnRhaW5zKFN0
cmluZyhuYW1lKSk7CisgICAgcmV0dXJuIG5vZGVUeXBlTmFtZXMuY29udGFpbnMobmFtZSk7CiB9
CiAKIC8qIFJldHVybnMgd2hldGhlciB0aGUgbGFzdCBwYXJzZWQgdG9rZW4gbWF0Y2hlcyB0aGUg
WzMyXSBPcGVyYXRvciBydWxlCiAgKiAoY2hlY2sgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgj
ZXhwcmxleCkuIE5lY2Vzc2FyeSB0byBkaXNhbWJpZ3VhdGUKICAqIHRoZSB0b2tlbnMuCiAgKi8K
LWJvb2wgUGFyc2VyOjppc09wZXJhdG9yQ29udGV4dCgpCitib29sIFBhcnNlcjo6aXNPcGVyYXRv
ckNvbnRleHQoKSBjb25zdAogewogICAgIGlmIChtX25leHRQb3MgPT0gMCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTU3LDEyICsxNTgsMTggQEAKICAgICByZXR1cm4gVG9rZW4oY29kZSk7
CiB9CiAKLVRva2VuIFBhcnNlcjo6bWFrZUludFRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwgaW50
IHZhbCwgaW50IGFkdmFuY2UpCitUb2tlbiBQYXJzZXI6Om1ha2VUb2tlbkFuZEFkdmFuY2UoaW50
IGNvZGUsIE51bWVyaWNPcDo6T3Bjb2RlIHZhbCwgaW50IGFkdmFuY2UpCiB7CiAgICAgbV9uZXh0
UG9zICs9IGFkdmFuY2U7CiAgICAgcmV0dXJuIFRva2VuKGNvZGUsIHZhbCk7CiB9CiAKK1Rva2Vu
IFBhcnNlcjo6bWFrZVRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwgRXFUZXN0T3A6Ok9wY29kZSB2
YWwsIGludCBhZHZhbmNlKQoreworICAgIG1fbmV4dFBvcyArPSBhZHZhbmNlOworICAgIHJldHVy
biBUb2tlbihjb2RlLCB2YWwpOworfQorCiAvLyBSZXR1cm5zIG5leHQgY2hhciBpZiBpdCdzIHRo
ZXJlIGFuZCBpbnRlcmVzdGluZywgMCBvdGhlcndpc2UKIGNoYXIgUGFyc2VyOjpwZWVrQWhlYWRI
ZWxwZXIoKQogewpAQCAtMTg3LDIwICsxOTQsMTkgQEAKIFRva2VuIFBhcnNlcjo6bGV4U3RyaW5n
KCkKIHsKICAgICBVQ2hhciBkZWxpbWl0ZXIgPSBtX2RhdGFbbV9uZXh0UG9zXTsKLSAgICBpbnQg
ICBzdGFydFBvcyAgPSBtX25leHRQb3MgKyAxOworICAgIGludCBzdGFydFBvcyA9IG1fbmV4dFBv
cyArIDE7CiAKICAgICBmb3IgKG1fbmV4dFBvcyA9IHN0YXJ0UG9zOyBtX25leHRQb3MgPCBtX2Rh
dGEubGVuZ3RoKCk7ICsrbV9uZXh0UG9zKSB7CiAgICAgICAgIGlmIChtX2RhdGFbbV9uZXh0UG9z
XSA9PSBkZWxpbWl0ZXIpIHsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IG1fZGF0YS5kZXBy
ZWNhdGVkU3RyaW5nKCkubWlkKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBzdGFydFBvcyk7CisgICAg
ICAgICAgICBTdHJpbmcgdmFsdWUgPSBtX2RhdGEuc3Vic3RyaW5nKHN0YXJ0UG9zLCBtX25leHRQ
b3MgLSBzdGFydFBvcyk7CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCiAgICAgICAg
ICAgICAgICAgdmFsdWUgPSAiIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICsrbV9u
ZXh0UG9zOyAvL0NvbnN1bWUgdGhlIGNoYXI7CisgICAgICAgICAgICArK21fbmV4dFBvczsgLy8g
Q29uc3VtZSB0aGUgY2hhci4KICAgICAgICAgICAgIHJldHVybiBUb2tlbihMSVRFUkFMLCB2YWx1
ZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvL091Y2gsIHdlbnQgb2ZmIHRoZSBlbmQgLS0g
cmVwb3J0IGVycm9yCisgICAgLy8gT3VjaCwgd2VudCBvZmYgdGhlIGVuZCAtLSByZXBvcnQgZXJy
b3IuCiAgICAgcmV0dXJuIFRva2VuKEVSUk9SKTsKIH0KIApAQCAtMjA5LDcgKzIxNSw3IEBACiAg
ICAgaW50IHN0YXJ0UG9zID0gbV9uZXh0UG9zOwogICAgIGJvb2wgc2VlbkRvdCA9IGZhbHNlOwog
Ci0gICAgLy9HbyB1bnRpbCBlbmQgb3IgYSBub24tZGlnaXRzIGNoYXJhY3RlcgorICAgIC8vIEdv
IHVudGlsIGVuZCBvciBhIG5vbi1kaWdpdHMgY2hhcmFjdGVyLgogICAgIGZvciAoOyBtX25leHRQ
b3MgPCBtX2RhdGEubGVuZ3RoKCk7ICsrbV9uZXh0UG9zKSB7CiAgICAgICAgIFVDaGFyIGFDaGFy
ID0gbV9kYXRhW21fbmV4dFBvc107CiAgICAgICAgIGlmIChhQ2hhciA+PSAweGZmKSBicmVhazsK
QEAgLTIyMiw0MSArMjI4LDQ4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTdHJpbmcgdmFs
dWUgPSBtX2RhdGEuZGVwcmVjYXRlZFN0cmluZygpLm1pZChzdGFydFBvcywgbV9uZXh0UG9zIC0g
c3RhcnRQb3MpOwotICAgIHJldHVybiBUb2tlbihOVU1CRVIsIHZhbHVlKTsKKyAgICByZXR1cm4g
VG9rZW4oTlVNQkVSLCBtX2RhdGEuc3Vic3RyaW5nKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBzdGFy
dFBvcykpOwogfQogCi1Ub2tlbiBQYXJzZXI6OmxleE5DTmFtZSgpCitib29sIFBhcnNlcjo6bGV4
TkNOYW1lKFN0cmluZyYgbmFtZSkKIHsKICAgICBpbnQgc3RhcnRQb3MgPSBtX25leHRQb3M7Ci0g
ICAgaWYgKG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKSAmJiBjaGFyQ2F0KG1fZGF0YVttX25l
eHRQb3NdKSA9PSBOYW1lU3RhcnQpIHsKLSAgICAgICAgLy9LZWVwIGdvaW5nIHVudGlsIHdlIGdl
dCBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGdvb2QgZm9yIG5hbWVzLgotICAgICAgICBmb3IgKDsg
bV9uZXh0UG9zIDwgbV9kYXRhLmxlbmd0aCgpOyArK21fbmV4dFBvcykgewotICAgICAgICAgICAg
aWYgKGNoYXJDYXQobV9kYXRhW21fbmV4dFBvc10pID09IE5vdFBhcnRPZk5hbWUpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0cmluZyB2YWx1
ZSA9IG1fZGF0YS5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBz
dGFydFBvcyk7Ci0gICAgICAgIHJldHVybiBUb2tlbihFUlJPUiArIDEsIHZhbHVlKTsKLSAgICB9
CisgICAgaWYgKG1fbmV4dFBvcyA+PSBtX2RhdGEubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKEVSUk9SKTsKKyAgICBpZiAo
Y2hhckNhdChtX2RhdGFbbV9uZXh0UG9zXSkgIT0gTmFtZVN0YXJ0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBLZWVwIGdvaW5nIHVudGlsIHdlIGdldCBhIGNoYXJhY3RlciB0aGF0
J3Mgbm90IGdvb2QgZm9yIG5hbWVzLgorICAgIGZvciAoOyBtX25leHRQb3MgPCBtX2RhdGEubGVu
Z3RoKCk7ICsrbV9uZXh0UG9zKQorICAgICAgICBpZiAoY2hhckNhdChtX2RhdGFbbV9uZXh0UG9z
XSkgPT0gTm90UGFydE9mTmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgbmFtZSA9IG1f
ZGF0YS5zdWJzdHJpbmcoc3RhcnRQb3MsIG1fbmV4dFBvcyAtIHN0YXJ0UG9zKTsKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotVG9rZW4gUGFyc2VyOjpsZXhRTmFtZSgpCitib29sIFBhcnNlcjo6bGV4
UU5hbWUoU3RyaW5nJiBuYW1lKQogewotICAgIFRva2VuIHQxID0gbGV4TkNOYW1lKCk7Ci0gICAg
aWYgKHQxLnR5cGUgPT0gRVJST1IpIHJldHVybiB0MTsKKyAgICBTdHJpbmcgbjE7CisgICAgaWYg
KCFsZXhOQ05hbWUobjEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBza2lwV1MoKTsK
LSAgICAvL0lmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyA6LCB3aGF0IHdlIGp1c3QgZ290IGl0IHRo
ZSBwcmVmaXgsIGlmIG5vdCwKLSAgICAvL2l0J3MgdGhlIHdob2xlIHRoaW5nCi0gICAgaWYgKHBl
ZWtBaGVhZEhlbHBlcigpICE9ICc6JykKLSAgICAgICAgcmV0dXJuIHQxOwogCi0gICAgVG9rZW4g
dDIgPSBsZXhOQ05hbWUoKTsKLSAgICBpZiAodDIudHlwZSA9PSBFUlJPUikgcmV0dXJuIHQyOwor
ICAgIC8vIElmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyA6LCB3aGF0IHdlIGp1c3QgZ290IGl0IHRo
ZSBwcmVmaXgsIGlmIG5vdCwKKyAgICAvLyBpdCdzIHRoZSB3aG9sZSB0aGluZy4KKyAgICBpZiAo
cGVla0FoZWFkSGVscGVyKCkgIT0gJzonKSB7CisgICAgICAgIG5hbWUgPSBuMTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgcmV0dXJuIFRva2VuKEVSUk9SICsgMSwgdDEudmFs
dWUgKyAiOiIgKyB0Mi52YWx1ZSk7CisgICAgU3RyaW5nIG4yOworICAgIGlmICghbGV4TkNOYW1l
KG4yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbmFtZSA9IG4xICsgIjoiICsgbjI7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRva2VuIFBhcnNlcjo6bmV4dFRva2VuSW50ZXJuYWwo
KQpAQCAtMjgxLDY3ICsyOTQsNjAgQEAKICAgICAgICAgICAgIGNoYXIgbmV4dCA9IHBlZWtBaGVh
ZEhlbHBlcigpOwogICAgICAgICAgICAgaWYgKG5leHQgPT0gJy4nKQogICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKERPVERPVCwgMik7Ci0gICAgICAgICAgICBlbHNl
IGlmIChuZXh0ID49ICcwJyAmJiBuZXh0IDw9ICc5JykKKyAgICAgICAgICAgIGlmIChuZXh0ID49
ICcwJyAmJiBuZXh0IDw9ICc5JykKICAgICAgICAgICAgICAgICByZXR1cm4gbGV4TnVtYmVyKCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFk
dmFuY2UoJy4nKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKCcuJyk7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICBpZiAocGVla0FoZWFk
SGVscGVyKCkgPT0gJy8nKQogICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZh
bmNlKFNMQVNIU0xBU0gsIDIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKCcvJyk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRv
a2VuQW5kQWR2YW5jZSgnLycpOwogICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgIHJldHVy
biBtYWtlVG9rZW5BbmRBZHZhbmNlKFBMVVMpOwogICAgICAgICBjYXNlICctJzoKICAgICAgICAg
ICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKE1JTlVTKTsKICAgICAgICAgY2FzZSAnPSc6
Ci0gICAgICAgICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShFUU9QLCBFcVRlc3RP
cDo6T1BfRVEpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoRVFPUCwg
RXFUZXN0T3A6Ok9QX0VRKTsKICAgICAgICAgY2FzZSAnISc6CiAgICAgICAgICAgICBpZiAocGVl
a0FoZWFkSGVscGVyKCkgPT0gJz0nKQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9r
ZW5BbmRBZHZhbmNlKEVRT1AsIEVxVGVzdE9wOjpPUF9ORSwgMik7Ci0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShFUU9QLCBFcVRlc3RPcDo6T1BfTkUsIDIpOwog
ICAgICAgICAgICAgcmV0dXJuIFRva2VuKEVSUk9SKTsKICAgICAgICAgY2FzZSAnPCc6CiAgICAg
ICAgICAgICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJz0nKQotICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0xFLCAyKTsK
LQotICAgICAgICAgICAgcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoUkVMT1AsIE51bWVy
aWNPcDo6T1BfTFQpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNl
KFJFTE9QLCBOdW1lcmljT3A6Ok9QX0xFLCAyKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9r
ZW5BbmRBZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0xUKTsKICAgICAgICAgY2FzZSAnPic6
CiAgICAgICAgICAgICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJz0nKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0dF
LCAyKTsKLQotICAgICAgICAgICAgcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoUkVMT1As
IE51bWVyaWNPcDo6T1BfR1QpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRB
ZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0dFLCAyKTsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0dUKTsKICAgICAgICAgY2Fz
ZSAnKic6CiAgICAgICAgICAgICBpZiAoaXNPcGVyYXRvckNvbnRleHQoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShNVUxPUCwgTnVtZXJpY09wOjpPUF9N
dWwpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgKyttX25leHRQb3M7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKE5BTUVURVNULCAiKiIpOwotICAgICAgICAgICAg
fQotICAgICAgICBjYXNlICckJzogey8vJCBRTmFtZQorICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlVG9rZW5BbmRBZHZhbmNlKE1VTE9QLCBOdW1lcmljT3A6Ok9QX011bCk7CisgICAgICAgICAg
ICArK21fbmV4dFBvczsKKyAgICAgICAgICAgIHJldHVybiBUb2tlbihOQU1FVEVTVCwgIioiKTsK
KyAgICAgICAgY2FzZSAnJCc6IHsgLy8gJCBRTmFtZQogICAgICAgICAgICAgbV9uZXh0UG9zKys7
Ci0gICAgICAgICAgICBUb2tlbiBwYXIgPSBsZXhRTmFtZSgpOwotICAgICAgICAgICAgaWYgKHBh
ci50eXBlID09IEVSUk9SKQotICAgICAgICAgICAgICAgIHJldHVybiBwYXI7Ci0KLSAgICAgICAg
ICAgIHJldHVybiBUb2tlbihWQVJJQUJMRVJFRkVSRU5DRSwgcGFyLnZhbHVlKTsKKyAgICAgICAg
ICAgIFN0cmluZyBuYW1lOworICAgICAgICAgICAgaWYgKCFsZXhRTmFtZShuYW1lKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gVG9rZW4oRVJST1IpOworICAgICAgICAgICAgcmV0dXJuIFRva2Vu
KFZBUklBQkxFUkVGRVJFTkNFLCBuYW1lKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFRva2Vu
IHQxID0gbGV4TkNOYW1lKCk7Ci0gICAgaWYgKHQxLnR5cGUgPT0gRVJST1IpIHJldHVybiB0MTsK
KyAgICBTdHJpbmcgbmFtZTsKKyAgICBpZiAoIWxleE5DTmFtZShuYW1lKSkKKyAgICAgICAgcmV0
dXJuIFRva2VuKEVSUk9SKTsKIAogICAgIHNraXBXUygpOwogICAgIC8vIElmIHdlJ3JlIGluIGFu
IG9wZXJhdG9yIGNvbnRleHQsIGNoZWNrIGZvciBhbnkgb3BlcmF0b3IgbmFtZXMKICAgICBpZiAo
aXNPcGVyYXRvckNvbnRleHQoKSkgewotICAgICAgICBpZiAodDEudmFsdWUgPT0gImFuZCIpIC8v
IyMjIGhhc2g/CisgICAgICAgIGlmIChuYW1lID09ICJhbmQiKSAvLyMjIyBoYXNoPwogICAgICAg
ICAgICAgcmV0dXJuIFRva2VuKEFORCk7Ci0gICAgICAgIGlmICh0MS52YWx1ZSA9PSAib3IiKQor
ICAgICAgICBpZiAobmFtZSA9PSAib3IiKQogICAgICAgICAgICAgcmV0dXJuIFRva2VuKE9SKTsK
LSAgICAgICAgaWYgKHQxLnZhbHVlID09ICJtb2QiKQorICAgICAgICBpZiAobmFtZSA9PSAibW9k
IikKICAgICAgICAgICAgIHJldHVybiBUb2tlbihNVUxPUCwgTnVtZXJpY09wOjpPUF9Nb2QpOwot
ICAgICAgICBpZiAodDEudmFsdWUgPT0gImRpdiIpCisgICAgICAgIGlmIChuYW1lID09ICJkaXYi
KQogICAgICAgICAgICAgcmV0dXJuIFRva2VuKE1VTE9QLCBOdW1lcmljT3A6Ok9QX0Rpdik7CiAg
ICAgfQogCkBAIC0zNTMsOSArMzU5LDkgQEAKICAgICAgICAgICAgIG1fbmV4dFBvcysrOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAvL0l0IG1pZ2h0IGJlIGFuIGF4aXMgbmFtZS4KLSAgICAg
ICAgICAgIFN0ZXA6OkF4aXNUeXBlIGF4aXNUeXBlOwotICAgICAgICAgICAgaWYgKGlzQXhpc05h
bWUodDEudmFsdWUsIGF4aXNUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4oQVhJ
U05BTUUsIGF4aXNUeXBlKTsKKyAgICAgICAgICAgIFN0ZXA6OkF4aXMgYXhpczsKKyAgICAgICAg
ICAgIGlmIChpc0F4aXNOYW1lKG5hbWUsIGF4aXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBU
b2tlbihBWElTTkFNRSwgYXhpcyk7CiAgICAgICAgICAgICAvLyBVZ2gsIDo6IGlzIG9ubHkgdmFs
aWQgaW4gYXhpcyBuYW1lcyAtPiBlcnJvcgogICAgICAgICAgICAgcmV0dXJuIFRva2VuKEVSUk9S
KTsKICAgICAgICAgfQpAQCAtMzY0LDE1ICszNzAsMTUgQEAKICAgICAgICAgc2tpcFdTKCk7CiAg
ICAgICAgIGlmIChwZWVrQ3VySGVscGVyKCkgPT0gJyonKSB7CiAgICAgICAgICAgICBtX25leHRQ
b3MrKzsKLSAgICAgICAgICAgIHJldHVybiBUb2tlbihOQU1FVEVTVCwgdDEudmFsdWUgKyAiOioi
KTsKKyAgICAgICAgICAgIHJldHVybiBUb2tlbihOQU1FVEVTVCwgbmFtZSArICI6KiIpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBNYWtlIGEgZnVsbCBxbmFtZS4uCi0gICAgICAg
IFRva2VuIHQyID0gbGV4TkNOYW1lKCk7Ci0gICAgICAgIGlmICh0Mi50eXBlID09IEVSUk9SKQot
ICAgICAgICAgICAgcmV0dXJuIHQyOworICAgICAgICAvLyBNYWtlIGEgZnVsbCBxbmFtZS4KKyAg
ICAgICAgU3RyaW5nIG4yOworICAgICAgICBpZiAoIWxleE5DTmFtZShuMikpCisgICAgICAgICAg
ICByZXR1cm4gVG9rZW4oRVJST1IpOwogICAgICAgICAKLSAgICAgICAgdDEudmFsdWUgPSB0MS52
YWx1ZSArICI6IiArIHQyLnZhbHVlOworICAgICAgICBuYW1lID0gbmFtZSArICI6IiArIG4yOwog
ICAgIH0KIAogICAgIHNraXBXUygpOwpAQCAtMzgwLDE4ICszODYsMTggQEAKICAgICAgICAgLy9u
b3RlOiB3ZSBkb24ndCBzd2FsbG93IHRoZSAoaGVyZSEKICAgICAgICAgCiAgICAgICAgIC8vZWl0
aGVyIG5vZGUgdHlwZSBvZiBmdW5jdGlvbiBuYW1lCi0gICAgICAgIGlmIChpc05vZGVUeXBlTmFt
ZSh0MS52YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmICh0MS52YWx1ZSA9PSAicHJvY2Vzc2luZy1p
bnN0cnVjdGlvbiIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKFBJLCB0MS52YWx1ZSk7
CisgICAgICAgIGlmIChpc05vZGVUeXBlTmFtZShuYW1lKSkgeworICAgICAgICAgICAgaWYgKG5h
bWUgPT0gInByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iKQorICAgICAgICAgICAgICAgIHJldHVybiBU
b2tlbihQSSwgbmFtZSk7CiAKLSAgICAgICAgICAgIHJldHVybiBUb2tlbihOT0RFVFlQRSwgdDEu
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIFRva2VuKE5PREVUWVBFLCBuYW1lKTsKICAgICAg
ICAgfQogICAgICAgICAvL211c3QgYmUgYSBmdW5jdGlvbiBuYW1lLgotICAgICAgICByZXR1cm4g
VG9rZW4oRlVOQ1RJT05OQU1FLCB0MS52YWx1ZSk7CisgICAgICAgIHJldHVybiBUb2tlbihGVU5D
VElPTk5BTUUsIG5hbWUpOwogICAgIH0KIAotICAgIC8vQXQgdGhpcyBwb2ludCwgaXQgbXVzdCBi
ZSBOQU1FVEVTVAotICAgIHJldHVybiBUb2tlbihOQU1FVEVTVCwgdDEudmFsdWUpOworICAgIC8v
IEF0IHRoaXMgcG9pbnQsIGl0IG11c3QgYmUgTkFNRVRFU1QuCisgICAgcmV0dXJuIFRva2VuKE5B
TUVURVNULCBuYW1lKTsKIH0KIAogVG9rZW4gUGFyc2VyOjpuZXh0VG9rZW4oKQpAQCAtNDIwLDQ4
ICs0MjYsODQgQEAKIHsKICAgICBZWVNUWVBFKiB5eWx2YWwgPSBzdGF0aWNfY2FzdDxZWVNUWVBF
Kj4oZGF0YSk7CiAgICAgVG9rZW4gdG9rID0gbmV4dFRva2VuKCk7Ci0gCi0gICAgaWYgKCF0b2su
dmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgeXlsdmFsLT5zdHIgPSBuZXcgU3RyaW5nKHRvay52
YWx1ZSk7Ci0gICAgICAgIHJlZ2lzdGVyU3RyaW5nKHl5bHZhbC0+c3RyKTsKLSAgICB9IGVsc2Ug
aWYgKHRvay5pbnRWYWx1ZSkKLSAgICAgICAgeXlsdmFsLT5udW0gPSB0b2suaW50VmFsdWU7Ci0g
ICAgCisKKyAgICBzd2l0Y2ggKHRvay50eXBlKSB7CisgICAgICAgIGNhc2UgQVhJU05BTUU6Cisg
ICAgICAgICAgICB5eWx2YWwtPmF4aXMgPSB0b2suYXhpczsKKyAgICAgICAgY2FzZSBNVUxPUDoK
KyAgICAgICAgY2FzZSBSRUxPUDoKKyAgICAgICAgICAgIHl5bHZhbC0+bnVtb3AgPSB0b2subnVt
b3A7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUU9QOgorICAgICAgICAgICAg
eXlsdmFsLT5lcW9wID0gdG9rLmVxb3A7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOT0RFVFlQRToKKyAgICAgICAgY2FzZSBQSToKKyAgICAgICAgY2FzZSBGVU5DVElPTk5BTUU6
CisgICAgICAgIGNhc2UgTElURVJBTDoKKyAgICAgICAgY2FzZSBWQVJJQUJMRVJFRkVSRU5DRToK
KyAgICAgICAgY2FzZSBOVU1CRVI6CisgICAgICAgIGNhc2UgTkFNRVRFU1Q6CisgICAgICAgICAg
ICB5eWx2YWwtPnN0ciA9IG5ldyBTdHJpbmcodG9rLnN0cik7CisgICAgICAgICAgICByZWdpc3Rl
clN0cmluZyh5eWx2YWwtPnN0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBy
ZXR1cm4gdG9rLnR5cGU7CiB9CiAKIEV4cHJlc3Npb24qIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQo
Y29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIFBhc3NSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiByZXNv
bHZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgcmVzZXQoc3RhdGVtZW50KTsKLSAgICAK
KwogICAgIG1fcmVzb2x2ZXIgPSByZXNvbHZlcjsKICAgICAKICAgICBQYXJzZXIqIG9sZFBhcnNl
ciA9IGN1cnJlbnRQYXJzZXI7CiAgICAgY3VycmVudFBhcnNlciA9IHRoaXM7CiAgICAgaW50IHBh
cnNlRXJyb3IgPSB4cGF0aHl5cGFyc2UodGhpcyk7CiAgICAgY3VycmVudFBhcnNlciA9IG9sZFBh
cnNlcjsKLSAgICAgICAgCisKICAgICBpZiAocGFyc2VFcnJvcikgewogICAgICAgICBkZWxldGVB
bGxWYWx1ZXMobV9wYXJzZU5vZGVzKTsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZXhwcmVz
c2lvblZlY3RvcnMpOwotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9wcmVkaWNhdGVWZWN0b3Jz
KTsKKyAgICAgICAgbV9wYXJzZU5vZGVzLmNsZWFyKCk7CisKKyAgICAgICAgSGFzaFNldDxWZWN0
b3I8UHJlZGljYXRlKj4qPjo6aXRlcmF0b3IgcGVuZCA9IG1fcHJlZGljYXRlVmVjdG9ycy5lbmQo
KTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFZlY3RvcjxQcmVkaWNhdGUqPio+OjppdGVyYXRvciBp
dCA9IG1fcHJlZGljYXRlVmVjdG9ycy5iZWdpbigpOyBpdCAhPSBwZW5kOyArK2l0KSB7CisgICAg
ICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKippdCk7CisgICAgICAgICAgICBkZWxldGUgKml0Owor
ICAgICAgICB9CisgICAgICAgIG1fcHJlZGljYXRlVmVjdG9ycy5jbGVhcigpOworCisgICAgICAg
IEhhc2hTZXQ8VmVjdG9yPEV4cHJlc3Npb24qPio+OjppdGVyYXRvciBlZW5kID0gbV9leHByZXNz
aW9uVmVjdG9ycy5lbmQoKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFZlY3RvcjxFeHByZXNzaW9u
Kj4qPjo6aXRlcmF0b3IgaXQgPSBtX2V4cHJlc3Npb25WZWN0b3JzLmJlZ2luKCk7IGl0ICE9IGVl
bmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqKml0KTsKKyAgICAgICAg
ICAgIGRlbGV0ZSAqaXQ7CisgICAgICAgIH0KKyAgICAgICAgbV9leHByZXNzaW9uVmVjdG9ycy5j
bGVhcigpOworCiAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3N0cmluZ3MpOwotICAgICAgICAK
KyAgICAgICAgbV9zdHJpbmdzLmNsZWFyKCk7CisKKyAgICAgICAgbV90b3BFeHByID0gMDsKKwog
ICAgICAgICBpZiAobV9nb3ROYW1lc3BhY2VFcnJvcikKICAgICAgICAgICAgIGVjID0gTkFNRVNQ
QUNFX0VSUjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZWMgPSBJTlZBTElEX0VYUFJFU1NJ
T05fRVJSOwogICAgICAgICByZXR1cm4gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQo
bV9wYXJzZU5vZGVzLnNpemUoKSA9PSAxKTsgLy8gVG9wIGV4cHJlc3Npb24KLSAgICAgICAgQVNT
RVJUKG1fZXhwcmVzc2lvblZlY3RvcnMuc2l6ZSgpID09IDApOwotICAgICAgICBBU1NFUlQobV9w
cmVkaWNhdGVWZWN0b3JzLnNpemUoKSA9PSAwKTsKLSAgICAgICAgQVNTRVJUKG1fc3RyaW5ncy5z
aXplKCkgPT0gMCk7Ci0gICAgICAgIAotICAgICAgICBtX3BhcnNlTm9kZXMuY2xlYXIoKTsKICAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIG1fdG9wRXhwcjsKKworICAgIEFTU0VSVChtX3BhcnNlTm9k
ZXMuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVCgqbV9wYXJzZU5vZGVzLmJlZ2luKCkgPT0gbV90
b3BFeHByKTsKKyAgICBBU1NFUlQobV9leHByZXNzaW9uVmVjdG9ycy5zaXplKCkgPT0gMCk7Cisg
ICAgQVNTRVJUKG1fcHJlZGljYXRlVmVjdG9ycy5zaXplKCkgPT0gMCk7CisgICAgQVNTRVJUKG1f
c3RyaW5ncy5zaXplKCkgPT0gMCk7CisKKyAgICBtX3BhcnNlTm9kZXMuY2xlYXIoKTsKKyAgICBF
eHByZXNzaW9uKiByZXN1bHQgPSBtX3RvcEV4cHI7CisgICAgbV90b3BFeHByID0gMDsKKworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgUGFyc2VyOjpyZWdpc3RlclBhcnNlTm9kZShQYXJz
ZU5vZGUqIG5vZGUpCkBAIC00OTQsNyArNTM2LDcgQEAKICAgICBtX3ByZWRpY2F0ZVZlY3RvcnMu
YWRkKHZlY3Rvcik7CiB9CiAKLXZvaWQgUGFyc2VyOjp1bnJlZ2lzdGVyUHJlZGljYXRlVmVjdG9y
KFZlY3RvcjxQcmVkaWNhdGUqPiogdmVjdG9yKQordm9pZCBQYXJzZXI6OmRlbGV0ZVByZWRpY2F0
ZVZlY3RvcihWZWN0b3I8UHJlZGljYXRlKj4qIHZlY3RvcikKIHsKICAgICBpZiAodmVjdG9yID09
IDApCiAgICAgICAgIHJldHVybjsKQEAgLTUwMiw2ICs1NDQsNyBAQAogICAgIEFTU0VSVChtX3By
ZWRpY2F0ZVZlY3RvcnMuY29udGFpbnModmVjdG9yKSk7CiAgICAgCiAgICAgbV9wcmVkaWNhdGVW
ZWN0b3JzLnJlbW92ZSh2ZWN0b3IpOworICAgIGRlbGV0ZSB2ZWN0b3I7CiB9CiAKIApAQCAtNTE1
LDE0ICs1NTgsMTUgQEAKICAgICBtX2V4cHJlc3Npb25WZWN0b3JzLmFkZCh2ZWN0b3IpOyAgICAK
IH0KIAotdm9pZCBQYXJzZXI6OnVucmVnaXN0ZXJFeHByZXNzaW9uVmVjdG9yKFZlY3RvcjxFeHBy
ZXNzaW9uKj4qIHZlY3RvcikKK3ZvaWQgUGFyc2VyOjpkZWxldGVFeHByZXNzaW9uVmVjdG9yKFZl
Y3RvcjxFeHByZXNzaW9uKj4qIHZlY3RvcikKIHsKICAgICBpZiAodmVjdG9yID09IDApCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX2V4cHJlc3Npb25WZWN0b3JzLmNvbnRhaW5zKHZl
Y3RvcikpOwogICAgIAotICAgIG1fZXhwcmVzc2lvblZlY3RvcnMucmVtb3ZlKHZlY3Rvcik7ICAg
ICAgICAKKyAgICBtX2V4cHJlc3Npb25WZWN0b3JzLnJlbW92ZSh2ZWN0b3IpOworICAgIGRlbGV0
ZSB2ZWN0b3I7CiB9CiAKIHZvaWQgUGFyc2VyOjpyZWdpc3RlclN0cmluZyhTdHJpbmcqIHMpCkBA
IC01MzUsNyArNTc5LDcgQEAKICAgICBtX3N0cmluZ3MuYWRkKHMpOyAgICAgICAgCiB9CiAKLXZv
aWQgUGFyc2VyOjp1bnJlZ2lzdGVyU3RyaW5nKFN0cmluZyogcykKK3ZvaWQgUGFyc2VyOjpkZWxl
dGVTdHJpbmcoU3RyaW5nKiBzKQogewogICAgIGlmIChzID09IDApCiAgICAgICAgIHJldHVybjsK
QEAgLTU0Myw2ICs1ODcsNyBAQAogICAgIEFTU0VSVChtX3N0cmluZ3MuY29udGFpbnMocykpOwog
ICAgIAogICAgIG1fc3RyaW5ncy5yZW1vdmUocyk7CisgICAgZGVsZXRlIHM7CiB9CiAKIH0KSW5k
ZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveHBhdGgvaW1wbC9YUGF0aFBhdGguY3BwCShyZXZpc2lvbiAxNDcxNykKKysrIFdlYkNvcmUv
eHBhdGgvaW1wbC9YUGF0aFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTMg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWFBhdGhQYXRoLmgiCiAK
ICNpZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0aFBhdGguaCIKLQogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlhQYXRoUHJlZGljYXRl
LmgiCisjaW5jbHVkZSAiWFBhdGhTdGVwLmgiCiAjaW5jbHVkZSAiWFBhdGhWYWx1ZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhQcmVkaWNh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFByZWRpY2F0ZS5j
cHAJKHJldmlzaW9uIDE0NzE3KQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUHJlZGljYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsOCArODAsOCBAQAogICAgIHJldHVybiAtcC50b051
bWJlcigpOwogfQogCi1OdW1lcmljT3A6Ok51bWVyaWNPcChpbnQgb3BDb2RlLCBFeHByZXNzaW9u
KiBsaHMsIEV4cHJlc3Npb24qIHJocykgOgotICAgIG1fb3BDb2RlKG9wQ29kZSkKK051bWVyaWNP
cDo6TnVtZXJpY09wKE9wY29kZSBvcGNvZGUsIEV4cHJlc3Npb24qIGxocywgRXhwcmVzc2lvbiog
cmhzKQorICAgIDogbV9vcGNvZGUob3Bjb2RlKQogewogICAgIGFkZFN1YkV4cHJlc3Npb24obGhz
KTsKICAgICBhZGRTdWJFeHByZXNzaW9uKHJocyk7CkBAIC05Nyw3ICs5Nyw3IEBACiAKICAgICBk
b3VibGUgbGVmdFZhbCA9IGxocy50b051bWJlcigpLCByaWdodFZhbCA9IHJocy50b051bWJlcigp
OwogCi0gICAgc3dpdGNoIChtX29wQ29kZSkgeworICAgIHN3aXRjaCAobV9vcGNvZGUpIHsKICAg
ICAgICAgY2FzZSBPUF9BZGQ6CiAgICAgICAgICAgICByZXR1cm4gbGVmdFZhbCArIHJpZ2h0VmFs
OwogICAgICAgICBjYXNlIE9QX1N1YjoKQEAgLTEyMSw4ICsxMjEsOCBAQAogICAgIHJldHVybiBW
YWx1ZSgpOwogfQogCi1FcVRlc3RPcDo6RXFUZXN0T3AoaW50IG9wQ29kZSwgRXhwcmVzc2lvbiog
bGhzLCBFeHByZXNzaW9uKiByaHMpIDoKLSAgICBtX29wQ29kZShvcENvZGUpCitFcVRlc3RPcDo6
RXFUZXN0T3AoT3Bjb2RlIG9wY29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMp
CisgICAgOiBtX29wY29kZShvcGNvZGUpCiB7CiAgICAgYWRkU3ViRXhwcmVzc2lvbihsaHMpOwog
ICAgIGFkZFN1YkV4cHJlc3Npb24ocmhzKTsKQEAgLTEzNCwyMiArMTM0LDIxIEBACiAgICAgVmFs
dWUgcmhzKHN1YkV4cHIoMSktPmV2YWx1YXRlKCkpOwogCiAgICAgYm9vbCBlcXVhbDsKLSAgICBp
ZiAobGhzLmlzQm9vbGVhbigpIHx8IHJocy5pc0Jvb2xlYW4oKSkgewotICAgICAgICBlcXVhbCA9
IChsaHMudG9Cb29sZWFuKCkgPT0gcmhzLnRvQm9vbGVhbigpKTsKLSAgICB9IGVsc2UgaWYgKGxo
cy5pc051bWJlcigpIHx8IHJocy5pc051bWJlcigpKSB7Ci0gICAgICAgIGVxdWFsID0gKGxocy50
b051bWJlcigpID09IHJocy50b051bWJlcigpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlcXVh
bCA9IChsaHMudG9TdHJpbmcoKSA9PSByaHMudG9TdHJpbmcoKSk7Ci0gICAgfQorICAgIGlmIChs
aHMuaXNCb29sZWFuKCkgfHwgcmhzLmlzQm9vbGVhbigpKQorICAgICAgICBlcXVhbCA9IGxocy50
b0Jvb2xlYW4oKSA9PSByaHMudG9Cb29sZWFuKCk7CisgICAgZWxzZSBpZiAobGhzLmlzTnVtYmVy
KCkgfHwgcmhzLmlzTnVtYmVyKCkpCisgICAgICAgIGVxdWFsID0gbGhzLnRvTnVtYmVyKCkgPT0g
cmhzLnRvTnVtYmVyKCk7CisgICAgZWxzZQorICAgICAgICBlcXVhbCA9IGxocy50b1N0cmluZygp
ID09IHJocy50b1N0cmluZygpOwogCi0gICAgaWYgKG1fb3BDb2RlID09IE9QX0VRKQorICAgIGlm
IChtX29wY29kZSA9PSBPUF9FUSkKICAgICAgICAgcmV0dXJuIGVxdWFsOwogCiAgICAgcmV0dXJu
ICFlcXVhbDsKIH0KIAotTG9naWNhbE9wOjpMb2dpY2FsT3AoaW50IG9wQ29kZSwgRXhwcmVzc2lv
biogbGhzLCBFeHByZXNzaW9uKiByaHMpIDoKLSAgICBtX29wQ29kZShvcENvZGUpCitMb2dpY2Fs
T3A6OkxvZ2ljYWxPcChPcGNvZGUgb3Bjb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24q
IHJocykKKyAgICA6IG1fb3Bjb2RlKG9wY29kZSkKIHsKICAgICBhZGRTdWJFeHByZXNzaW9uKGxo
cyk7CiAgICAgYWRkU3ViRXhwcmVzc2lvbihyaHMpOwpAQCAtMTU3LDcgKzE1Niw3IEBACiAKIGJv
b2wgTG9naWNhbE9wOjpzaG9ydENpcmN1aXRPbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fb3BDb2Rl
ID09IE9QX0FuZCkKKyAgICBpZiAobV9vcGNvZGUgPT0gT1BfQW5kKQogICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vZmFsc2UgYW5kIGZvbwogCiAgICAgcmV0dXJuIHRydWU7ICAvL3RydWUgb3IgYmFy
CkBAIC0yMjMsMTQgKzIyMiw5IEBACiAKICAgICBWYWx1ZSByZXN1bHQobV9leHByLT5ldmFsdWF0
ZSgpKTsKIAotICAgIC8vIGZvb1szXSByZWFsbHkgbWVhbnMgZm9vW3Bvc2l0aW9uKCk9M10KLSAg
ICBpZiAocmVzdWx0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgRXhwcmVzc2lvbiogcmVhbEV4cHIg
PSBuZXcgRXFUZXN0T3AoRXFUZXN0T3A6Ok9QX0VRLAotICAgICAgICAgICAgICAgICAgICAgICAg
RnVuY3Rpb25MaWJyYXJ5OjpzZWxmKCkuY3JlYXRlRnVuY3Rpb24oInBvc2l0aW9uIiksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBuZXcgTnVtYmVyKHJlc3VsdC50b051bWJlcigpKSk7Ci0gICAg
ICAgIHJlc3VsdCA9IHJlYWxFeHByLT5ldmFsdWF0ZSgpOwotICAgICAgICBkZWxldGUgcmVhbEV4
cHI7Ci0gICAgfQorICAgIC8vIGZvb1szXSBtZWFucyBmb29bcG9zaXRpb24oKT0zXQorICAgIGlm
IChyZXN1bHQuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIEVxVGVzdE9wKEVxVGVzdE9wOjpP
UF9FUSwgY3JlYXRlRnVuY3Rpb24oInBvc2l0aW9uIiksIG5ldyBOdW1iZXIocmVzdWx0LnRvTnVt
YmVyKCkpKS5ldmFsdWF0ZSgpLnRvQm9vbGVhbigpOwogCiAgICAgcmV0dXJuIHJlc3VsdC50b0Jv
b2xlYW4oKTsKIH0KSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhcnNlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhcnNlci5oCShyZXZpc2lvbiAxNDcx
NykKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMDggKzI5LDk3IEBACiAKICNpZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KLQotI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgotCiAjaW5jbHVkZSAiWFBhdGhTdGVwLmgiCi0jaW5jbHVkZSAiWFBhdGhQ
YXRoLmgiCiAjaW5jbHVkZSAiWFBhdGhQcmVkaWNhdGUuaCIKLSNpbmNsdWRlICJYUGF0aEV4cHJl
c3Npb25Ob2RlLmgiCi0jaW5jbHVkZSAiWFBhdGhVdGlsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLSAgICAKLWNsYXNzIFhQYXRoUmVzb2x2ZXI7Ci0gICAgCi1uYW1lc3BhY2UgWFBhdGggewog
Ci1zdHJ1Y3QgVG9rZW4gewotICAgIGludCAgICAgdHlwZTsKLSAgICBTdHJpbmcgdmFsdWU7Ci0g
ICAgaW50ICAgICBpbnRWYWx1ZTsgLy8wIGlmIG5vdCBzZXQKLSAgICAKLSAgICBUb2tlbihpbnQg
dCk6IHR5cGUodCksIGludFZhbHVlKDApIHt9Ci0gICAgVG9rZW4oaW50IHQsIGNvbnN0IFN0cmlu
ZyYgdik6IHR5cGUodCksIHZhbHVlKHYpIHt9Ci0gICAgVG9rZW4oaW50IHQsIGludCB2KTogdHlw
ZSh0KSwgaW50VmFsdWUodikge30KLX07CisgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
IAotY2xhc3MgUGFyc2VyIDogTm9uY29weWFibGUKLXsKLXByaXZhdGU6Ci0gICAgc3RhdGljIFBh
cnNlciogY3VycmVudFBhcnNlcjsKLSAgICAKLSAgICB1bnNpZ25lZCBtX25leHRQb3M7Ci0gICAg
U3RyaW5nIG1fZGF0YTsKLSAgICBpbnQgbV9sYXN0VG9rZW5UeXBlOwotICAgIFJlZlB0cjxYUGF0
aE5TUmVzb2x2ZXI+IG1fcmVzb2x2ZXI7Ci0gICAgCi0gICAgc3RhdGljIEhhc2hNYXA8U3RyaW5n
LCBTdGVwOjpBeGlzVHlwZT4qIHNfYXhpc05hbWVzRGljdDsKLSAgICBzdGF0aWMgSGFzaFNldDxT
dHJpbmc+KiBzX25vZGVUeXBlTmFtZXNEaWN0OwotICAgIAotICAgIGVudW0gWE1MQ2F0IHsKLSAg
ICAgICAgTmFtZVN0YXJ0LAotICAgICAgICBOYW1lQ29udCwKLSAgICAgICAgTm90UGFydE9mTmFt
ZQotICAgIH07Ci0gICAgCi0gICAgWE1MQ2F0IGNoYXJDYXQoVUNoYXIpOwotICAgIAotICAgIGJv
b2wgaXNBeGlzTmFtZShjb25zdCBTdHJpbmcmIG5hbWUsIFN0ZXA6OkF4aXNUeXBlICZ0eXBlKTsK
LSAgICBib29sIGlzTm9kZVR5cGVOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgYm9vbCBp
c09wZXJhdG9yQ29udGV4dCgpOwotICAgIAotICAgIHZvaWQgIHNraXBXUygpOwotICAgIFRva2Vu
IG1ha2VUb2tlbkFuZEFkdmFuY2UoaW50IGNvZGUsIGludCBhZHZhbmNlID0gMSk7Ci0gICAgVG9r
ZW4gbWFrZUludFRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwgaW50IHZhbCwgaW50IGFkdmFuY2Ug
PSAxKTsKLSAgICBjaGFyICBwZWVrQWhlYWRIZWxwZXIoKTsKLSAgICBjaGFyICBwZWVrQ3VySGVs
cGVyKCk7Ci0gICAgCi0gICAgVG9rZW4gbGV4U3RyaW5nKCk7Ci0gICAgVG9rZW4gbGV4TnVtYmVy
KCk7Ci0gICAgVG9rZW4gbGV4TkNOYW1lKCk7Ci0gICAgVG9rZW4gbGV4UU5hbWUoKTsKLSAgICAK
LSAgICBUb2tlbiBuZXh0VG9rZW4oKTsKLSAgICBUb2tlbiBuZXh0VG9rZW5JbnRlcm5hbCgpOwot
ICAgIAotICAgIHZvaWQgcmVzZXQoY29uc3QgU3RyaW5nJiBkYXRhKTsKLSAgICAKLSAgICBIYXNo
U2V0PFBhcnNlTm9kZSo+IG1fcGFyc2VOb2RlczsKLSAgICBIYXNoU2V0PFZlY3RvcjxQcmVkaWNh
dGUqPio+IG1fcHJlZGljYXRlVmVjdG9yczsKLSAgICBIYXNoU2V0PFZlY3RvcjxFeHByZXNzaW9u
Kj4qPiBtX2V4cHJlc3Npb25WZWN0b3JzOwotICAgIEhhc2hTZXQ8U3RyaW5nKj4gbV9zdHJpbmdz
OworICAgIGNsYXNzIFhQYXRoTlNSZXNvbHZlcjsKIAotcHVibGljOgotICAgIFBhcnNlcigpOwot
ICAgIAotICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jl
c29sdmVyLmdldCgpOyB9Ci0gICAgRXhwcmVzc2lvbiogcGFyc2VTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzdGF0ZW1lbnQsIFBhc3NSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIG5hbWVzcGFjZSBYUGF0aCB7CiAKLSAgICBzdGF0aWMgUGFyc2VyKiBjdXJyZW50
KCkgeyByZXR1cm4gY3VycmVudFBhcnNlcjsgfQotICAgICAgICAgIAotICAgIGludCBsZXgodm9p
ZCogeXlsdmFsKTsKKyAgICAgICAgY2xhc3MgRXhwcmVzc2lvbjsKKyAgICAgICAgY2xhc3MgUGFy
c2VOb2RlOworICAgICAgICBjbGFzcyBQcmVkaWNhdGU7CiAKLSAgICBFeHByZXNzaW9uKiBtX3Rv
cEV4cHI7Ci0gICAgYm9vbCBtX2dvdE5hbWVzcGFjZUVycm9yOwotICAgIFN0cmluZyBtX2N1cnJl
bnROYW1lc3BhY2VVUkk7Ci0gICAgCi0gICAgdm9pZCByZWdpc3RlclBhcnNlTm9kZShQYXJzZU5v
ZGUqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJQYXJzZU5vZGUoUGFyc2VOb2RlKik7Ci0gICAgCi0g
ICAgdm9pZCByZWdpc3RlclByZWRpY2F0ZVZlY3RvcihWZWN0b3I8UHJlZGljYXRlKj4qKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJQcmVkaWNhdGVWZWN0b3IoVmVjdG9yPFByZWRpY2F0ZSo+Kik7Cisg
ICAgICAgIHN0cnVjdCBUb2tlbiB7CisgICAgICAgICAgICBpbnQgdHlwZTsKKyAgICAgICAgICAg
IFN0cmluZyBzdHI7CisgICAgICAgICAgICBTdGVwOjpBeGlzIGF4aXM7CisgICAgICAgICAgICBO
dW1lcmljT3A6Ok9wY29kZSBudW1vcDsKKyAgICAgICAgICAgIEVxVGVzdE9wOjpPcGNvZGUgZXFv
cDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVG9rZW4oaW50IHQpIDogdHlwZSh0KSB7fQor
ICAgICAgICAgICAgVG9rZW4oaW50IHQsIGNvbnN0IFN0cmluZyYgdik6IHR5cGUodCksIHN0cih2
KSB7fQorICAgICAgICAgICAgVG9rZW4oaW50IHQsIFN0ZXA6OkF4aXMgdik6IHR5cGUodCksIGF4
aXModikge30KKyAgICAgICAgICAgIFRva2VuKGludCB0LCBOdW1lcmljT3A6Ok9wY29kZSB2KTog
dHlwZSh0KSwgbnVtb3Aodikge30KKyAgICAgICAgICAgIFRva2VuKGludCB0LCBFcVRlc3RPcDo6
T3Bjb2RlIHYpOiB0eXBlKHQpLCBlcW9wKHYpIHt9CisgICAgICAgIH07CiAKLSAgICB2b2lkIHJl
Z2lzdGVyRXhwcmVzc2lvblZlY3RvcihWZWN0b3I8RXhwcmVzc2lvbio+Kik7Ci0gICAgdm9pZCB1
bnJlZ2lzdGVyRXhwcmVzc2lvblZlY3RvcihWZWN0b3I8RXhwcmVzc2lvbio+Kik7Ci0gICAgCi0g
ICAgdm9pZCByZWdpc3RlclN0cmluZyhTdHJpbmcqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTdHJp
bmcoU3RyaW5nKik7Ci19OworICAgICAgICBjbGFzcyBQYXJzZXIgOiBOb25jb3B5YWJsZSB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFBhcnNlcigpOwogCisgICAgICAgICAgICBYUGF0
aE5TUmVzb2x2ZXIqIHJlc29sdmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlci5nZXQoKTsg
fQorICAgICAgICAgICAgRXhwcmVzc2lvbiogcGFyc2VTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBz
dGF0ZW1lbnQsIFBhc3NSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiwgRXhjZXB0aW9uQ29kZSYpOwor
CisgICAgICAgICAgICBzdGF0aWMgUGFyc2VyKiBjdXJyZW50KCkgeyByZXR1cm4gY3VycmVudFBh
cnNlcjsgfQorCisgICAgICAgICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7CisKKyAgICAgICAg
ICAgIEV4cHJlc3Npb24qIG1fdG9wRXhwcjsKKyAgICAgICAgICAgIGJvb2wgbV9nb3ROYW1lc3Bh
Y2VFcnJvcjsKKyAgICAgICAgICAgIFN0cmluZyBtX2N1cnJlbnROYW1lc3BhY2VVUkk7CisKKyAg
ICAgICAgICAgIHZvaWQgcmVnaXN0ZXJQYXJzZU5vZGUoUGFyc2VOb2RlKik7CisgICAgICAgICAg
ICB2b2lkIHVucmVnaXN0ZXJQYXJzZU5vZGUoUGFyc2VOb2RlKik7CisKKyAgICAgICAgICAgIHZv
aWQgcmVnaXN0ZXJQcmVkaWNhdGVWZWN0b3IoVmVjdG9yPFByZWRpY2F0ZSo+Kik7CisgICAgICAg
ICAgICB2b2lkIGRlbGV0ZVByZWRpY2F0ZVZlY3RvcihWZWN0b3I8UHJlZGljYXRlKj4qKTsKKwor
ICAgICAgICAgICAgdm9pZCByZWdpc3RlckV4cHJlc3Npb25WZWN0b3IoVmVjdG9yPEV4cHJlc3Np
b24qPiopOworICAgICAgICAgICAgdm9pZCBkZWxldGVFeHByZXNzaW9uVmVjdG9yKFZlY3RvcjxF
eHByZXNzaW9uKj4qKTsKKworICAgICAgICAgICAgdm9pZCByZWdpc3RlclN0cmluZyhTdHJpbmcq
KTsKKyAgICAgICAgICAgIHZvaWQgZGVsZXRlU3RyaW5nKFN0cmluZyopOworCisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICBib29sIGlzT3BlcmF0b3JDb250ZXh0KCkgY29uc3Q7CisKKyAg
ICAgICAgICAgIHZvaWQgc2tpcFdTKCk7CisgICAgICAgICAgICBUb2tlbiBtYWtlVG9rZW5BbmRB
ZHZhbmNlKGludCB0eXBlLCBpbnQgYWR2YW5jZSA9IDEpOworICAgICAgICAgICAgVG9rZW4gbWFr
ZVRva2VuQW5kQWR2YW5jZShpbnQgdHlwZSwgTnVtZXJpY09wOjpPcGNvZGUsIGludCBhZHZhbmNl
ID0gMSk7CisgICAgICAgICAgICBUb2tlbiBtYWtlVG9rZW5BbmRBZHZhbmNlKGludCB0eXBlLCBF
cVRlc3RPcDo6T3Bjb2RlLCBpbnQgYWR2YW5jZSA9IDEpOworICAgICAgICAgICAgY2hhciBwZWVr
QWhlYWRIZWxwZXIoKTsKKyAgICAgICAgICAgIGNoYXIgcGVla0N1ckhlbHBlcigpOworCisgICAg
ICAgICAgICBUb2tlbiBsZXhTdHJpbmcoKTsKKyAgICAgICAgICAgIFRva2VuIGxleE51bWJlcigp
OworICAgICAgICAgICAgYm9vbCBsZXhOQ05hbWUoU3RyaW5nJik7CisgICAgICAgICAgICBib29s
IGxleFFOYW1lKFN0cmluZyYpOworCisgICAgICAgICAgICBUb2tlbiBuZXh0VG9rZW4oKTsKKyAg
ICAgICAgICAgIFRva2VuIG5leHRUb2tlbkludGVybmFsKCk7CisKKyAgICAgICAgICAgIHZvaWQg
cmVzZXQoY29uc3QgU3RyaW5nJiBkYXRhKTsKKworICAgICAgICAgICAgc3RhdGljIFBhcnNlciog
Y3VycmVudFBhcnNlcjsKKworICAgICAgICAgICAgdW5zaWduZWQgbV9uZXh0UG9zOworICAgICAg
ICAgICAgU3RyaW5nIG1fZGF0YTsKKyAgICAgICAgICAgIGludCBtX2xhc3RUb2tlblR5cGU7Cisg
ICAgICAgICAgICBSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBtX3Jlc29sdmVyOworCisgICAgICAg
ICAgICBIYXNoU2V0PFBhcnNlTm9kZSo+IG1fcGFyc2VOb2RlczsKKyAgICAgICAgICAgIEhhc2hT
ZXQ8VmVjdG9yPFByZWRpY2F0ZSo+Kj4gbV9wcmVkaWNhdGVWZWN0b3JzOworICAgICAgICAgICAg
SGFzaFNldDxWZWN0b3I8RXhwcmVzc2lvbio+Kj4gbV9leHByZXNzaW9uVmVjdG9yczsKKyAgICAg
ICAgICAgIEhhc2hTZXQ8U3RyaW5nKj4gbV9zdHJpbmdzOworICAgICAgICB9OworCisgICAgfQog
fQotfQogCiAjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL3hwYXRoL2lt
cGwvWFBhdGhQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUGF0
aC5oCShyZXZpc2lvbiAxNDcxNykKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhdGguaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNjcgKzIzLDY3IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBYUGF0aFBhdGhfSAogI2RlZmluZSBYUGF0aFBhdGhf
SAogCiAjaWYgWFBBVEhfU1VQUE9SVAogCiAjaW5jbHVkZSAiWFBhdGhFeHByZXNzaW9uTm9kZS5o
IgotI2luY2x1ZGUgIlhQYXRoU3RlcC5oIgogCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgoraW50
IHhwYXRoeXlwYXJzZSh2b2lkKik7CiAKLWV4dGVybiBpbnQgeHBhdGh5eXBhcnNlKHZvaWQqKTsK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFhQYXRoIHsKLSAgICAgICAgCi1jbGFz
cyBGaWx0ZXIgOiBwdWJsaWMgRXhwcmVzc2lvbgotewotcHVibGljOgotICAgIEZpbHRlcihFeHBy
ZXNzaW9uKiwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiA9IFZlY3RvcjxQcmVkaWNhdGUqPigp
KTsKLSAgICB2aXJ0dWFsIH5GaWx0ZXIoKTsKIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFZhbHVl
IGRvRXZhbHVhdGUoKSBjb25zdDsKKyAgICBuYW1lc3BhY2UgWFBhdGggewogCi0gICAgRXhwcmVz
c2lvbiogbV9leHByOwotICAgIFZlY3RvcjxQcmVkaWNhdGUqPiBtX3ByZWRpY2F0ZXM7Ci19Owor
ICAgICAgICBjbGFzcyBQcmVkaWNhdGU7CisgICAgICAgIGNsYXNzIFN0ZXA7CiAKLWNsYXNzIExv
Y2F0aW9uUGF0aCA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci1mcmllbmQgaW50IDo6eHBhdGh5eXBh
cnNlKHZvaWQqKTsKLXB1YmxpYzoKLSAgICBMb2NhdGlvblBhdGgoKTsKLSAgICB2aXJ0dWFsIH5M
b2NhdGlvblBhdGgoKTsKKyAgICAgICAgY2xhc3MgRmlsdGVyIDogcHVibGljIEV4cHJlc3Npb24g
eworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGaWx0ZXIoRXhwcmVzc2lvbiosIGNvbnN0
IFZlY3RvcjxQcmVkaWNhdGUqPiYgPSBWZWN0b3I8UHJlZGljYXRlKj4oKSk7CisgICAgICAgICAg
ICB2aXJ0dWFsIH5GaWx0ZXIoKTsKIAotICAgIHZvaWQgb3B0aW1pemUoKTsKKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OwogCi1w
cml2YXRlOgotICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworICAgICAgICAg
ICAgRXhwcmVzc2lvbiogbV9leHByOworICAgICAgICAgICAgVmVjdG9yPFByZWRpY2F0ZSo+IG1f
cHJlZGljYXRlczsKKyAgICAgICAgfTsKIAotICAgIFZlY3RvcjxTdGVwKj4gbV9zdGVwczsKLSAg
ICBib29sIG1fYWJzb2x1dGU7Ci19OworICAgICAgICBjbGFzcyBMb2NhdGlvblBhdGggOiBwdWJs
aWMgRXhwcmVzc2lvbiB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIExvY2F0aW9uUGF0
aCgpOworICAgICAgICAgICAgdmlydHVhbCB+TG9jYXRpb25QYXRoKCk7CiAKLWNsYXNzIFBhdGgg
OiBwdWJsaWMgRXhwcmVzc2lvbgotewotcHVibGljOgotICAgIFBhdGgoRmlsdGVyKiwgTG9jYXRp
b25QYXRoKik7Ci0gICAgdmlydHVhbCB+UGF0aCgpOworICAgICAgICAgICAgdm9pZCBvcHRpbWl6
ZSgpOwogCi1wcml2YXRlOgotICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0Owor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkg
Y29uc3Q7CiAKLSAgICBGaWx0ZXIqIG1fZmlsdGVyOwotICAgIExvY2F0aW9uUGF0aCogbV9wYXRo
OwotfTsKKyAgICAgICAgICAgIFZlY3RvcjxTdGVwKj4gbV9zdGVwczsKKyAgICAgICAgICAgIGJv
b2wgbV9hYnNvbHV0ZTsKIAorICAgICAgICAgICAgZnJpZW5kIGludCA6OnhwYXRoeXlwYXJzZSh2
b2lkKik7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgUGF0aCA6IHB1YmxpYyBFeHByZXNz
aW9uCisgICAgICAgIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgUGF0aChGaWx0ZXIq
LCBMb2NhdGlvblBhdGgqKTsKKyAgICAgICAgICAgIHZpcnR1YWwgflBhdGgoKTsKKworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7
CisKKyAgICAgICAgICAgIEZpbHRlciogbV9maWx0ZXI7CisgICAgICAgICAgICBMb2NhdGlvblBh
dGgqIG1fcGF0aDsKKyAgICAgICAgfTsKKworICAgIH0KIH0KLX0KIAogI2VuZGlmIC8vIFhQQVRI
X1NVUFBPUlQKIAogI2VuZGlmIC8vIFhQYXRoX1BhdGhfSAotCkluZGV4OiBXZWJDb3JlL3hwYXRo
L2ltcGwvWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
cGF0aC9pbXBsL1hQYXRoVmFyaWFibGVSZWZlcmVuY2UuY3BwCShyZXZpc2lvbiAxNDcxNykKKysr
IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTIgKzI1LDExIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlhQYXRoVmFyaWFibGVSZWZlcmVuY2UuaCIKIAogI2lmIFhQQVRIX1NVUFBPUlQKIAot
I2luY2x1ZGUgIlhQYXRoVmFyaWFibGVSZWZlcmVuY2UuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlhQYXRoVmFsdWUuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsMTIgKzQ3LDExIEBACiAKIFZhbHVlIFZhcmlhYmxl
UmVmZXJlbmNlOjpkb0V2YWx1YXRlKCkgY29uc3QKIHsKLSAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiogYmluZGluZ3MgPSAmZXZhbHVhdGlvbkNvbnRleHQoKS52YXJpYWJsZUJpbmRpbmdzOwot
ICAgIGlmICghYmluZGluZ3MtPmNvbnRhaW5zKG1fbmFtZSkpCi0gICAgICAgIC8vIEZJWE1FIFdo
YXQgdG8gZG8gaWYgYW4gdW5rbm93biB2YXJpYWJsZSBpcyByZWZlcmVuY2VkPworICAgIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+JiBiaW5kaW5ncyA9IGV2YWx1YXRpb25Db250ZXh0KCkudmFyaWFi
bGVCaW5kaW5nczsKKyAgICBpZiAoIWJpbmRpbmdzLmNvbnRhaW5zKG1fbmFtZSkpCisgICAgICAg
IC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCB0aGluZyB0byBkbyBpZiBhbiB1bmtub3duIHZh
cmlhYmxlIGlzIHJlZmVyZW5jZWQ/CiAgICAgICAgIHJldHVybiAiIjsKLQotICAgIHJldHVybiBi
aW5kaW5ncy0+Z2V0KG1fbmFtZSk7CisgICAgcmV0dXJuIGJpbmRpbmdzLmdldChtX25hbWUpOwog
fQogCiB9CkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhFeHByZXNzaW9uTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoRXhwcmVzc2lvbk5vZGUuY3Bw
CShyZXZpc2lvbiAxNDcxNykKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEV4cHJlc3Npb25O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTggKzI1LDEzIEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbk5vZGUuaCIKIAogI2lmIFhQ
QVRIX1NVUFBPUlQKIAotI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbk5vZGUuaCIKLQotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiWFBhdGhWYWx1ZS5o
IgotI2luY2x1ZGUgPG1hdGguaD4KIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKICAgICAKQEAgLTExNyw0ICsxMTIsMyBAQAog
fQogCiAjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAotCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwv
WFBhdGhQcmVkaWNhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhQ
cmVkaWNhdGUuaAkocmV2aXNpb24gMTQ3MTcpCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhQ
cmVkaWNhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBwcmVkaWNh
dGUuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMyw2
ICsyMyw3IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRl
ZiBYUGF0aFByZWRpY2F0ZV9ICiAjZGVmaW5lIFhQYXRoUHJlZGljYXRlX0gKIApAQCAtMzEsMTI2
ICszMiw4MyBAQAogI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbk5vZGUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotbmFtZXNwYWNlIFhQYXRoIHsKKworICAgIG5hbWVzcGFjZSBYUGF0aCB7CiAg
ICAgICAgIAotY2xhc3MgTnVtYmVyIDogcHVibGljIEV4cHJlc3Npb24KLXsKLXB1YmxpYzoKLSAg
ICBOdW1iZXIoZG91YmxlIHZhbHVlKTsKKyAgICAgICAgY2xhc3MgTnVtYmVyIDogcHVibGljIEV4
cHJlc3Npb24geworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOdW1iZXIoZG91YmxlKTsK
KyAgICAgICAgICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisgICAgICAgICAg
ICBkb3VibGUgbV92YWx1ZTsKKyAgICAgICAgfTsKIAotICAgIGJvb2wgaXNDb25zdGFudCgpIGNv
bnN0OworICAgICAgICBjbGFzcyBTdHJpbmdFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24g
eworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBTdHJpbmdFeHByZXNzaW9uKGNvbnN0IFN0
cmluZyYpOworICAgICAgICAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKyAg
ICAgICAgICAgIFN0cmluZyBtX3ZhbHVlOworICAgICAgICB9OwogCi1wcml2YXRlOgotICAgIHZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworICAgICAgICBjbGFzcyBOZWdhdGl2ZSA6
IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZpcnR1
YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworICAgICAgICB9OwogCi0gICAgZG91YmxlIG1f
dmFsdWU7Ci19OworICAgICAgICBjbGFzcyBOdW1lcmljT3AgOiBwdWJsaWMgRXhwcmVzc2lvbiB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGVudW0gT3Bjb2RlIHsKKyAgICAgICAgICAg
ICAgICBPUF9BZGQsIE9QX1N1YiwgT1BfTXVsLCBPUF9EaXYsIE9QX01vZCwKKyAgICAgICAgICAg
ICAgICBPUF9HVCwgT1BfTFQsIE9QX0dFLCBPUF9MRQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIE51bWVyaWNPcChPcGNvZGUsIEV4cHJlc3Npb24qIGxocywgRXhwcmVzc2lvbiogcmhzKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgp
IGNvbnN0OworICAgICAgICAgICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgICAgICB9OwogCi1jbGFz
cyBTdHJpbmdFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24KLXsKLXB1YmxpYzoKLSAgICBT
dHJpbmdFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgICAgICBjbGFzcyBFcVRl
c3RPcCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
ZW51bSBPcGNvZGUgeyBPUF9FUSwgT1BfTkUgfTsKKyAgICAgICAgICAgIEVxVGVzdE9wKE9wY29k
ZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisgICAgICAgICAg
ICBPcGNvZGUgbV9vcGNvZGU7CisgICAgICAgIH07CiAKLSAgICBib29sIGlzQ29uc3RhbnQoKSBj
b25zdDsKKyAgICAgICAgY2xhc3MgTG9naWNhbE9wIDogcHVibGljIEV4cHJlc3Npb24geworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBlbnVtIE9wY29kZSB7IE9QX0FuZCwgT1BfT3IgfTsK
KyAgICAgICAgICAgIExvZ2ljYWxPcChPcGNvZGUsIEV4cHJlc3Npb24qIGxocywgRXhwcmVzc2lv
biogcmhzKTsKKyAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBib29sIHNob3J0Q2lyY3VpdE9uKCkgY29uc3Q7
CisgICAgICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKyAgICAgICAg
ICAgIE9wY29kZSBtX29wY29kZTsKKyAgICAgICAgfTsKIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKyAgICAgICAgY2xhc3MgVW5pb24gOiBwdWJsaWMg
RXhwcmVzc2lvbiB7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB2aXJ0dWFsIFZhbHVl
IGRvRXZhbHVhdGUoKSBjb25zdDsKKyAgICAgICAgfTsKIAotICAgIFN0cmluZyBtX3ZhbHVlOwot
fTsKKyAgICAgICAgY2xhc3MgUHJlZGljYXRlIDogTm9uY29weWFibGUgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBQcmVkaWNhdGUoRXhwcmVzc2lvbiopOworICAgICAgICAgICAgflBy
ZWRpY2F0ZSgpOworICAgICAgICAgICAgYm9vbCBldmFsdWF0ZSgpIGNvbnN0OworICAgICAgICAg
ICAgdm9pZCBvcHRpbWl6ZSgpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgRXhwcmVz
c2lvbiogbV9leHByOworICAgICAgICB9OwogCi1jbGFzcyBOZWdhdGl2ZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uCi17Ci1wcml2YXRlOgotICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0
OwotfTsKKyAgICB9CiAKLWNsYXNzIEJpbmFyeUV4cHJCYXNlIDogcHVibGljIEV4cHJlc3Npb24K
LXsKLX07Ci0KLWNsYXNzIE51bWVyaWNPcCA6IHB1YmxpYyBCaW5hcnlFeHByQmFzZQotewotcHVi
bGljOgotICAgIGVudW0gewotICAgICAgICBPUF9BZGQgPSAxLAotICAgICAgICBPUF9TdWIsCi0g
ICAgICAgIE9QX011bCwKLSAgICAgICAgT1BfRGl2LAotICAgICAgICBPUF9Nb2QsCi0gICAgICAg
IE9QX0dULAotICAgICAgICBPUF9MVCwKLSAgICAgICAgT1BfR0UsCi0gICAgICAgIE9QX0xFCi0g
ICAgfTsKLQotICAgIE51bWVyaWNPcChpbnQgb3BDb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJl
c3Npb24qIHJocyk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkg
Y29uc3Q7Ci0gICAgaW50IG1fb3BDb2RlOwotfTsKLQotY2xhc3MgRXFUZXN0T3AgOiBwdWJsaWMg
QmluYXJ5RXhwckJhc2UKLXsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgT1BfRVEgPSAx
LAotICAgICAgICBPUF9ORQotICAgIH07Ci0KLSAgICBFcVRlc3RPcChpbnQgb3BDb2RlLCBFeHBy
ZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24qIHJocyk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBW
YWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Ci0gICAgaW50IG1fb3BDb2RlOwotfTsKLQotY2xhc3Mg
TG9naWNhbE9wIDogcHVibGljIEJpbmFyeUV4cHJCYXNlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSB7
Ci0gICAgICAgIE9QX0FuZCA9IDEsCi0gICAgICAgIE9QX09yCi0gICAgfTsKLQotICAgIExvZ2lj
YWxPcChpbnQgb3BDb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24qIHJocyk7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGJvb2wg
c2hvcnRDaXJjdWl0T24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBj
b25zdDsKLSAgICBpbnQgbV9vcENvZGU7Ci19OwotCi1jbGFzcyBVbmlvbiA6IHB1YmxpYyBCaW5h
cnlFeHByQmFzZQotewotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBj
b25zdDsKLX07Ci0KLWNsYXNzIFByZWRpY2F0ZQotewotcHVibGljOgotICAgIFByZWRpY2F0ZShF
eHByZXNzaW9uKik7Ci0gICAgflByZWRpY2F0ZSgpOwotCi0gICAgYm9vbCBldmFsdWF0ZSgpIGNv
bnN0OwotCi0gICAgdm9pZCBvcHRpbWl6ZSgpOwotCi1wcml2YXRlOgotICAgIFByZWRpY2F0ZShj
b25zdCBQcmVkaWNhdGUgJnJocyk7Ci0gICAgUHJlZGljYXRlICZvcGVyYXRvcj0oY29uc3QgUHJl
ZGljYXRlICZyaHMpOwotCi0gICAgRXhwcmVzc2lvbiogbV9leHByOwotfTsKLQogfQotfQogCiAj
ZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAogCi0jZW5kaWYgLy8gUFJFRElDQVRFX0gKLQorI2VuZGlm
IC8vIFhQYXRoUHJlZGljYXRlX0gKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEZ1bmN0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoRnVuY3Rpb25z
LmNwcAkocmV2aXNpb24gMTQ3MTcpCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhGdW5jdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwzOCArMjUsMjIgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWFBhdGhGdW5jdGlvbnMuaCIKIAogI2lmIFhQQVRIX1NV
UFBPUlQKIAotI2luY2x1ZGUgIlhQYXRoRnVuY3Rpb25zLmgiCi0KLSNpbmNsdWRlICJEZXByZWNh
dGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCi0jaW5jbHVkZSAiTm9kZS5o
IgogI2luY2x1ZGUgIlhQYXRoVmFsdWUuaCIKLSNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmZGVmIF9NU0NfVkVSIC8vIE5vIHJvdW5kKCkgaW4gc3Rh
bmRhcmQgQyBsaWJyYXJ5IGZvciBWaXN1YWwgU3R1ZGlvCi1zdGF0aWMgZG91YmxlIHJvdW5kKGRv
dWJsZSB2YWwpCi17Ci0gICAgZG91YmxlIHZhbEZsb29yID0gZmxvb3IodmFsKTsKLSAgICBpZiAo
dmFsID49IDApCi0gICAgICAgIHJldHVybiAodmFsIC0gdmFsRmxvb3IgPCAwLjUpID8gdmFsRmxv
b3IgOiAodmFsRmxvb3IrMS4wKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAodmFsIC0gdmFs
Rmxvb3IgPD0gMC41KSA/IHZhbEZsb29yIDogKHZhbEZsb29yKzEuMCk7Ci19Ci0jZW5kaWYKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKICAgICAgICAgCi0jZGVmaW5l
IERFRklORV9GVU5DVElPTl9DUkVBVE9SKENsYXNzKSBcCi1zdGF0aWMgRnVuY3Rpb24gKmNyZWF0
ZSMjQ2xhc3MoKSB7IHJldHVybiBuZXcgQ2xhc3M7IH0KKyNkZWZpbmUgREVGSU5FX0ZVTkNUSU9O
X0NSRUFUT1IoQ2xhc3MpIHN0YXRpYyBGdW5jdGlvbiogY3JlYXRlIyNDbGFzcygpIHsgcmV0dXJu
IG5ldyBDbGFzczsgfQogCi1jbGFzcyBJbnRlcnZhbAoteworY2xhc3MgSW50ZXJ2YWwgewogcHVi
bGljOgotICAgIHN0YXRpYyBjb25zdCBpbnQgSW5mID0tMTsKKyAgICBzdGF0aWMgY29uc3QgaW50
IEluZiA9IC0xOwogCiAgICAgSW50ZXJ2YWwoKTsKICAgICBJbnRlcnZhbChpbnQgdmFsdWUpOwpA
QCAtNjQsMTkzICs0OCwxMjkgQEAKIAogICAgIGJvb2wgY29udGFpbnMoaW50IHZhbHVlKSBjb25z
dDsKIAotICAgIFN0cmluZyBhc1N0cmluZygpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIGludCBt
X21pbjsKICAgICBpbnQgbV9tYXg7CiB9OwogCi1jbGFzcyBGdW5MYXN0IDogcHVibGljIEZ1bmN0
aW9uCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKK3N0
cnVjdCBGdW5jdGlvblJlYyB7CisgICAgdHlwZWRlZiBGdW5jdGlvbiAqKCpGYWN0b3J5Rm4pKCk7
CisgICAgRmFjdG9yeUZuIGZhY3RvcnlGbjsKKyAgICBJbnRlcnZhbCBhcmdzOworfTsKIAotcHJp
dmF0ZToKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgRnVuY3Rpb25SZWM+KiBmdW5jdGlvbk1hcDsK
KworY2xhc3MgRnVuTGFzdCA6IHB1YmxpYyBGdW5jdGlvbiB7CisgICAgdmlydHVhbCBib29sIGlz
Q29uc3RhbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsK
IH07CiAKLWNsYXNzIEZ1blBvc2l0aW9uIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wdWJsaWM6Citj
bGFzcyBGdW5Qb3NpdGlvbiA6IHB1YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBib29sIGlz
Q29uc3RhbnQoKSBjb25zdDsKLQotcHJpdmF0ZToKICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVh
dGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1bkNvdW50IDogcHVibGljIEZ1bmN0aW9uCi17Ci1w
dWJsaWM6CitjbGFzcyBGdW5Db3VudCA6IHB1YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdDsKLQotcHJpdmF0ZToKICAgICB2aXJ0dWFsIFZhbHVlIGRv
RXZhbHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1bkxvY2FsTmFtZSA6IHB1YmxpYyBGdW5j
dGlvbgotewotcHVibGljOgorY2xhc3MgRnVuTG9jYWxOYW1lIDogcHVibGljIEZ1bmN0aW9uIHsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OwotCi1wcml2YXRlOgogICAgIHZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OwogfTsKIAotY2xhc3MgRnVuTmFtZXNwYWNl
VVJJIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wdWJsaWM6CitjbGFzcyBGdW5OYW1lc3BhY2VVUkkg
OiBwdWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7
Ci0KLXByaXZhdGU6CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9Owog
Ci1jbGFzcyBGdW5OYW1lIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wdWJsaWM6CitjbGFzcyBGdW5O
YW1lIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNv
bnN0OwotCi1wcml2YXRlOgogICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0Owog
fTsKIAotY2xhc3MgRnVuU3RyaW5nIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wcml2YXRlOgorY2xh
c3MgRnVuU3RyaW5nIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZh
bHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1bkNvbmNhdCA6IHB1YmxpYyBGdW5jdGlvbgot
ewotcHJpdmF0ZToKK2NsYXNzIEZ1bkNvbmNhdCA6IHB1YmxpYyBGdW5jdGlvbiB7CiAgICAgdmly
dHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBGdW5TdGFydHNXaXRo
IDogcHVibGljIEZ1bmN0aW9uCi17Ci1wcml2YXRlOgorY2xhc3MgRnVuU3RhcnRzV2l0aCA6IHB1
YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9
OwogCi1jbGFzcyBGdW5Db250YWlucyA6IHB1YmxpYyBGdW5jdGlvbgotewotcHJpdmF0ZToKK2Ns
YXNzIEZ1bkNvbnRhaW5zIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFsIFZhbHVlIGRv
RXZhbHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1blN1YnN0cmluZ0JlZm9yZSA6IHB1Ymxp
YyBGdW5jdGlvbgotewotcHJpdmF0ZToKK2NsYXNzIEZ1blN1YnN0cmluZ0JlZm9yZSA6IHB1Ymxp
YyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9Owog
Ci1jbGFzcyBGdW5TdWJzdHJpbmdBZnRlciA6IHB1YmxpYyBGdW5jdGlvbgotewotcHJpdmF0ZToK
K2NsYXNzIEZ1blN1YnN0cmluZ0FmdGVyIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFs
IFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1blN1YnN0cmluZyA6IHB1
YmxpYyBGdW5jdGlvbgotewotcHJpdmF0ZToKK2NsYXNzIEZ1blN1YnN0cmluZyA6IHB1YmxpYyBG
dW5jdGlvbiB7CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9OwogCi1j
bGFzcyBGdW5TdHJpbmdMZW5ndGggOiBwdWJsaWMgRnVuY3Rpb24KLXsKLXByaXZhdGU6CitjbGFz
cyBGdW5TdHJpbmdMZW5ndGggOiBwdWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1YWwgVmFsdWUg
ZG9FdmFsdWF0ZSgpIGNvbnN0OwogfTsKIAotY2xhc3MgRnVuTm9ybWFsaXplU3BhY2UgOiBwdWJs
aWMgRnVuY3Rpb24KLXsKLXByaXZhdGU6CitjbGFzcyBGdW5Ob3JtYWxpemVTcGFjZSA6IHB1Ymxp
YyBGdW5jdGlvbiB7CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9Owog
Ci1jbGFzcyBGdW5UcmFuc2xhdGUgOiBwdWJsaWMgRnVuY3Rpb24KLXsKLXByaXZhdGU6CitjbGFz
cyBGdW5UcmFuc2xhdGUgOiBwdWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1YWwgVmFsdWUgZG9F
dmFsdWF0ZSgpIGNvbnN0OwogfTsKIAotY2xhc3MgRnVuQm9vbGVhbiA6IHB1YmxpYyBGdW5jdGlv
bgotewotcHJpdmF0ZToKK2NsYXNzIEZ1bkJvb2xlYW4gOiBwdWJsaWMgRnVuY3Rpb24gewogICAg
IHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OwogfTsKIAotY2xhc3MgRnVuTm90IDog
cHVibGljIEZ1bmN0aW9uCi17Ci1wcml2YXRlOgorY2xhc3MgRnVuTm90IDogcHVibGljIEZ1bmN0
aW9uIHsKICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNz
IEZ1blRydWUgOiBwdWJsaWMgRnVuY3Rpb24KLXsKLXB1YmxpYzoKK2NsYXNzIEZ1blRydWUgOiBw
dWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7Ci0K
LXByaXZhdGU6CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9OwogCi1j
bGFzcyBGdW5GYWxzZSA6IHB1YmxpYyBGdW5jdGlvbgotewotcHVibGljOgorY2xhc3MgRnVuRmFs
c2UgOiBwdWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29u
c3Q7Ci0KLXByaXZhdGU6CiAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9
OwogCi1jbGFzcyBGdW5MYW5nIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wdWJsaWM6CitjbGFzcyBG
dW5MYW5nIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgp
IGNvbnN0OwotCi1wcml2YXRlOgogICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0
OwogfTsKIAotY2xhc3MgRnVuTnVtYmVyIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wcml2YXRlOgor
Y2xhc3MgRnVuTnVtYmVyIDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFsIFZhbHVlIGRv
RXZhbHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1blN1bSA6IHB1YmxpYyBGdW5jdGlvbgot
ewotcHJpdmF0ZToKK2NsYXNzIEZ1blN1bSA6IHB1YmxpYyBGdW5jdGlvbiB7CiAgICAgdmlydHVh
bCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBGdW5GbG9vciA6IHB1Ymxp
YyBGdW5jdGlvbgotewotcHJpdmF0ZToKK2NsYXNzIEZ1bkZsb29yIDogcHVibGljIEZ1bmN0aW9u
IHsKICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKIH07CiAKLWNsYXNzIEZ1
bkNlaWxpbmcgOiBwdWJsaWMgRnVuY3Rpb24KLXsKLXByaXZhdGU6CitjbGFzcyBGdW5DZWlsaW5n
IDogcHVibGljIEZ1bmN0aW9uIHsKICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25z
dDsKIH07CiAKLWNsYXNzIEZ1blJvdW5kIDogcHVibGljIEZ1bmN0aW9uCi17Ci1wcml2YXRlOgor
Y2xhc3MgRnVuUm91bmQgOiBwdWJsaWMgRnVuY3Rpb24gewogICAgIHZpcnR1YWwgVmFsdWUgZG9F
dmFsdWF0ZSgpIGNvbnN0OwogfTsKIApAQCAtMjg2LDI1ICsyMDYsMjIgQEAKIAogI3VuZGVmIERF
RklORV9GVU5DVElPTl9DUkVBVE9SCiAKLUludGVydmFsOjpJbnRlcnZhbCgpCi0gICAgOiBtX21p
bihJbmYpLAotICAgIG1fbWF4KEluZikKK2lubGluZSBJbnRlcnZhbDo6SW50ZXJ2YWwoKQorICAg
IDogbV9taW4oSW5mKSwgbV9tYXgoSW5mKQogewogfQogCi1JbnRlcnZhbDo6SW50ZXJ2YWwoaW50
IHZhbHVlKQotICAgIDogbV9taW4odmFsdWUpLAotICAgIG1fbWF4KHZhbHVlKQoraW5saW5lIElu
dGVydmFsOjpJbnRlcnZhbChpbnQgdmFsdWUpCisgICAgOiBtX21pbih2YWx1ZSksIG1fbWF4KHZh
bHVlKQogewogfQogCi1JbnRlcnZhbDo6SW50ZXJ2YWwoaW50IG1pbiwgaW50IG1heCkKLSAgICA6
IG1fbWluKG1pbiksCi0gICAgbV9tYXgobWF4KQoraW5saW5lIEludGVydmFsOjpJbnRlcnZhbChp
bnQgbWluLCBpbnQgbWF4KQorICAgIDogbV9taW4obWluKSwgbV9tYXgobWF4KQogewogfQogCi1i
b29sIEludGVydmFsOjpjb250YWlucyhpbnQgdmFsdWUpIGNvbnN0CitpbmxpbmUgYm9vbCBJbnRl
cnZhbDo6Y29udGFpbnMoaW50IHZhbHVlKSBjb25zdAogewogICAgIGlmIChtX21pbiA9PSBJbmYg
JiYgbV9tYXggPT0gSW5mKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxOCwyNyArMjM1LDYg
QEAKICAgICByZXR1cm4gdmFsdWUgPj0gbV9taW4gJiYgdmFsdWUgPD0gbV9tYXg7CiB9CiAKLVN0
cmluZyBJbnRlcnZhbDo6YXNTdHJpbmcoKSBjb25zdAotewotICAgIFN0cmluZyBzID0gIlsiOwot
Ci0gICAgaWYgKG1fbWluID09IEluZikKLSAgICAgICAgcyArPSAiLUluZmluaXR5IjsKLSAgICBl
bHNlCi0gICAgICAgIHMgKz0gU3RyaW5nOjpudW1iZXIobV9taW4pOwotCi0gICAgcyArPSAiLi4i
OwotCi0gICAgaWYgKG1fbWF4ID09IEluZikKLSAgICAgICAgcyArPSAiSW5maW5pdHkiOwotICAg
IGVsc2UKLSAgICAgICAgcyArPSBTdHJpbmc6Om51bWJlcihtX21heCk7Ci0KLSAgICBzICs9ICJd
IjsKLQotICAgIHJldHVybiBzOwotfQotCiB2b2lkIEZ1bmN0aW9uOjpzZXRBcmd1bWVudHMoY29u
c3QgVmVjdG9yPEV4cHJlc3Npb24qPiYgYXJncykKIHsKICAgICBWZWN0b3I8RXhwcmVzc2lvbio+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgpOwpAQCAtNTQ2LDExICs0NDIsMTEgQEAK
IFZhbHVlIEZ1blN1YnN0cmluZzo6ZG9FdmFsdWF0ZSgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHMg
PSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKLSAgICBsb25nIHBvcyA9IGxvbmcocm91
bmQoYXJnKDEpLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCkpKTsKKyAgICBsb25nIHBvcyA9IGxyb3Vu
ZChhcmcoMSktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSk7CiAgICAgYm9vbCBoYXZlTGVuZ3RoID0g
YXJnQ291bnQoKSA9PSAzOwogICAgIGxvbmcgbGVuID0gLTE7CiAgICAgaWYgKGhhdmVMZW5ndGgp
Ci0gICAgICAgIGxlbiA9IGxvbmcocm91bmQoYXJnKDIpLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCkp
KTsKKyAgICAgICAgbGVuID0gbHJvdW5kKGFyZygyKS0+ZXZhbHVhdGUoKS50b051bWJlcigpKTsK
IAogICAgIGlmIChwb3MgPiBsb25nKHMubGVuZ3RoKCkpKSAKICAgICAgICAgcmV0dXJuICIiOwpA
QCAtNjMyLDE3ICs1MjgsMTIgQEAKIAogICAgIFJlZlB0cjxOb2RlPiBsYW5nTm9kZSA9IDA7CiAg
ICAgTm9kZSogbm9kZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZS5nZXQoKTsKLQotICAgIFN0
cmluZyB4bXMoInhtcyIpOwotICAgIFN0cmluZyB4bXNuc1VSSSA9IG5vZGUtPmxvb2t1cE5hbWVz
cGFjZVVSSSh4bXMpOwotCisgICAgU3RyaW5nIHhtc25zVVJJID0gbm9kZS0+bG9va3VwTmFtZXNw
YWNlVVJJKCJ4bXMiKTsKICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBOYW1lZEF0dHJNYXAg
KmF0dHJzID0gbm9kZS0+YXR0cmlidXRlcygpOwotICAgICAgICBTdHJpbmcgbCgibGFuZyIpOwot
ICAgICAgICBsYW5nTm9kZSA9IGF0dHJzLT5nZXROYW1lZEl0ZW1OUyh4bXNuc1VSSSwgbCk7Cisg
ICAgICAgIE5hbWVkQXR0ck1hcCogYXR0cnMgPSBub2RlLT5hdHRyaWJ1dGVzKCk7CisgICAgICAg
IGxhbmdOb2RlID0gYXR0cnMtPmdldE5hbWVkSXRlbU5TKHhtc25zVVJJLCAibGFuZyIpOwogICAg
ICAgICBpZiAobGFuZ05vZGUpCiAgICAgICAgICAgICBicmVhazsKLQogICAgICAgICBub2RlID0g
bm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KIApAQCAtNjU1LDggKzU0Niw4IEBACiAgICAgaW50
IGluZGV4ID0gbGFuZ05vZGVWYWx1ZS5maW5kKCctJyk7CiAgICAgaWYgKGluZGV4ICE9IC0xKQog
ICAgICAgICBsYW5nTm9kZVZhbHVlID0gbGFuZ05vZGVWYWx1ZS5sZWZ0KGluZGV4KTsKLSAgICAK
LSAgICByZXR1cm4gbGFuZ05vZGVWYWx1ZS5sb3dlcigpID09IGxhbmcubG93ZXIoKTsKKworICAg
IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShsYW5nTm9kZVZhbHVlLCBsYW5nKTsKIH0KIAogYm9v
bCBGdW5MYW5nOjppc0NvbnN0YW50KCkgY29uc3QKQEAgLTY5NiwxNiArNTg3LDEyIEBACiAKIFZh
bHVlIEZ1bkZsb29yOjpkb0V2YWx1YXRlKCkgY29uc3QKIHsKLSAgICBkb3VibGUgbnVtID0gYXJn
KDApLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCk7Ci0KLSAgICByZXR1cm4gZmxvb3IobnVtKTsKKyAg
ICByZXR1cm4gZmxvb3IoYXJnKDApLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCkpOwogfQogCiBWYWx1
ZSBGdW5DZWlsaW5nOjpkb0V2YWx1YXRlKCkgY29uc3QKIHsKLSAgICBkb3VibGUgbnVtID0gYXJn
KDApLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCk7Ci0KLSAgICByZXR1cm4gY2VpbChudW0pOworICAg
IHJldHVybiBjZWlsKGFyZygwKS0+ZXZhbHVhdGUoKS50b051bWJlcigpKTsKIH0KIAogVmFsdWUg
RnVuUm91bmQ6OmRvRXZhbHVhdGUoKSBjb25zdApAQCAtNzEzLDgyICs2MDAsNzAgQEAKICAgICBy
ZXR1cm4gcm91bmQoYXJnKDApLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCkpOwogfQogCi1zdHJ1Y3Qg
RnVuY3Rpb25MaWJyYXJ5OjpGdW5jdGlvblJlYworc3RhdGljIHZvaWQgY3JlYXRlRnVuY3Rpb25N
YXAoKQogewotICAgIHR5cGVkZWYgRnVuY3Rpb24gKigqRmFjdG9yeUZuKSgpOwotCi0gICAgRmFj
dG9yeUZuIGZhY3RvcnlGbjsKLSAgICBJbnRlcnZhbCBhcmdzOwotfTsKLQotc3RydWN0IEZ1bmN0
aW9uTWFwcGluZwotewotICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gICAgRnVuY3Rpb25MaWJyYXJ5
OjpGdW5jdGlvblJlYyBmdW5jdGlvbjsKLX07Ci0KLUZ1bmN0aW9uTGlicmFyeSYgRnVuY3Rpb25M
aWJyYXJ5OjpzZWxmKCkKLXsKLSAgICBzdGF0aWMgRnVuY3Rpb25MaWJyYXJ5IGluc3RhbmNlOwot
ICAgIHJldHVybiBpbnN0YW5jZTsKLX0KLQotRnVuY3Rpb25MaWJyYXJ5OjpGdW5jdGlvbkxpYnJh
cnkoKQoteworICAgIHN0cnVjdCBGdW5jdGlvbk1hcHBpbmcgeworICAgICAgICBjb25zdCBjaGFy
ICpuYW1lOworICAgICAgICBGdW5jdGlvblJlYyBmdW5jdGlvbjsKKyAgICB9OwogICAgIHN0YXRp
YyBjb25zdCBGdW5jdGlvbk1hcHBpbmcgZnVuY3Rpb25zW10gPSB7Ci0gICAgeyAibGFzdCIsIHsg
JmNyZWF0ZUZ1bkxhc3QsIDAgfSB9LAotICAgIHsgImxhc3QiLCB7ICZjcmVhdGVGdW5MYXN0LCAw
IH0gfSwKLSAgICB7ICJwb3NpdGlvbiIsIHsgJmNyZWF0ZUZ1blBvc2l0aW9uLCAwIH0gfSwKLSAg
ICB7ICJjb3VudCIsIHsgJmNyZWF0ZUZ1bkNvdW50LCAxIH0gfSwKLSAgICB7ICJzdW0iLCB7ICZj
cmVhdGVGdW5TdW0sIDEgfSB9LAotICAgIHsgImxvY2FsLW5hbWUiLCB7ICZjcmVhdGVGdW5Mb2Nh
bE5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICB7ICJuYW1lc3BhY2UtdXJpIiwgeyAmY3Jl
YXRlRnVuTmFtZXNwYWNlVVJJLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgeyAibmFtZSIsIHsg
JmNyZWF0ZUZ1bk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICB7ICJzdHJpbmciLCB7ICZj
cmVhdGVGdW5TdHJpbmcsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICB7ICJjb25jYXQiLCB7ICZj
cmVhdGVGdW5Db25jYXQsIEludGVydmFsKDIsIEludGVydmFsOjpJbmYpIH0gfSwKLSAgICB7ICJz
dGFydHMtd2l0aCIsIHsgJmNyZWF0ZUZ1blN0YXJ0c1dpdGgsIDIgfSB9LAotICAgIHsgImNvbnRh
aW5zIiwgeyAmY3JlYXRlRnVuQ29udGFpbnMsIDIgfSB9LAotICAgIHsgInN1YnN0cmluZy1iZWZv
cmUiLCB7ICZjcmVhdGVGdW5TdWJzdHJpbmdCZWZvcmUsIDIgfSB9LAotICAgIHsgInN1YnN0cmlu
Zy1hZnRlciIsIHsgJmNyZWF0ZUZ1blN1YnN0cmluZ0FmdGVyLCAyIH0gfSwKLSAgICB7ICJzdWJz
dHJpbmciLCB7ICZjcmVhdGVGdW5TdWJzdHJpbmcsIEludGVydmFsKDIsIDMpIH0gfSwKLSAgICB7
ICJzdHJpbmctbGVuZ3RoIiwgeyAmY3JlYXRlRnVuU3RyaW5nTGVuZ3RoLCAxIH0gfSwKLSAgICB7
ICJub3JtYWxpemUtc3BhY2UiLCB7ICZjcmVhdGVGdW5Ob3JtYWxpemVTcGFjZSwgMSB9IH0sCi0g
ICAgeyAidHJhbnNsYXRlIiwgeyAmY3JlYXRlRnVuVHJhbnNsYXRlLCAzIH0gfSwKLSAgICAgICAg
Ci0gICAgeyAiYm9vbGVhbiIsIHsgJmNyZWF0ZUZ1bkJvb2xlYW4sIDEgfSB9LAotICAgIHsgIm5v
dCIsIHsgJmNyZWF0ZUZ1bk5vdCwgMSB9IH0sCi0gICAgeyAidHJ1ZSIsIHsgJmNyZWF0ZUZ1blRy
dWUsIDAgfSB9LAotICAgIHsgImZhbHNlIiwgeyAmY3JlYXRlRnVuRmFsc2UsIDAgfSB9LAotICAg
IHsgImxhbmciLCB7ICZjcmVhdGVGdW5MYW5nLCAxIH0gfSwKLSAgICAgICAgCi0gICAgeyAibnVt
YmVyIiwgeyAmY3JlYXRlRnVuTnVtYmVyLCAxIH0gfSwKLSAgICB7ICJmbG9vciIsIHsgJmNyZWF0
ZUZ1bkZsb29yLCAxIH0gfSwKLSAgICB7ICJjZWlsaW5nIiwgeyAmY3JlYXRlRnVuQ2VpbGluZywg
MSB9IH0sCi0gICAgeyAicm91bmQiLCB7ICZjcmVhdGVGdW5Sb3VuZCwgMSB9IH0KKyAgICAgICAg
eyAiYm9vbGVhbiIsIHsgJmNyZWF0ZUZ1bkJvb2xlYW4sIDEgfSB9LAorICAgICAgICB7ICJjZWls
aW5nIiwgeyAmY3JlYXRlRnVuQ2VpbGluZywgMSB9IH0sCisgICAgICAgIHsgImNvbmNhdCIsIHsg
JmNyZWF0ZUZ1bkNvbmNhdCwgSW50ZXJ2YWwoMiwgSW50ZXJ2YWw6OkluZikgfSB9LAorICAgICAg
ICB7ICJjb250YWlucyIsIHsgJmNyZWF0ZUZ1bkNvbnRhaW5zLCAyIH0gfSwKKyAgICAgICAgeyAi
Y291bnQiLCB7ICZjcmVhdGVGdW5Db3VudCwgMSB9IH0sCisgICAgICAgIHsgImZhbHNlIiwgeyAm
Y3JlYXRlRnVuRmFsc2UsIDAgfSB9LAorICAgICAgICB7ICJmbG9vciIsIHsgJmNyZWF0ZUZ1bkZs
b29yLCAxIH0gfSwKKyAgICAgICAgeyAibGFuZyIsIHsgJmNyZWF0ZUZ1bkxhbmcsIDEgfSB9LAor
ICAgICAgICB7ICJsYXN0IiwgeyAmY3JlYXRlRnVuTGFzdCwgMCB9IH0sCisgICAgICAgIHsgImxv
Y2FsLW5hbWUiLCB7ICZjcmVhdGVGdW5Mb2NhbE5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKKyAg
ICAgICAgeyAibmFtZSIsIHsgJmNyZWF0ZUZ1bk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKKyAg
ICAgICAgeyAibmFtZXNwYWNlLXVyaSIsIHsgJmNyZWF0ZUZ1bk5hbWVzcGFjZVVSSSwgSW50ZXJ2
YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJub3JtYWxpemUtc3BhY2UiLCB7ICZjcmVhdGVGdW5O
b3JtYWxpemVTcGFjZSwgMSB9IH0sCisgICAgICAgIHsgIm5vdCIsIHsgJmNyZWF0ZUZ1bk5vdCwg
MSB9IH0sCisgICAgICAgIHsgIm51bWJlciIsIHsgJmNyZWF0ZUZ1bk51bWJlciwgMSB9IH0sCisg
ICAgICAgIHsgInBvc2l0aW9uIiwgeyAmY3JlYXRlRnVuUG9zaXRpb24sIDAgfSB9LAorICAgICAg
ICB7ICJyb3VuZCIsIHsgJmNyZWF0ZUZ1blJvdW5kLCAxIH0gfSwKKyAgICAgICAgeyAic3RhcnRz
LXdpdGgiLCB7ICZjcmVhdGVGdW5TdGFydHNXaXRoLCAyIH0gfSwKKyAgICAgICAgeyAic3RyaW5n
IiwgeyAmY3JlYXRlRnVuU3RyaW5nLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisgICAgICAgIHsgInN0
cmluZy1sZW5ndGgiLCB7ICZjcmVhdGVGdW5TdHJpbmdMZW5ndGgsIDEgfSB9LAorICAgICAgICB7
ICJzdWJzdHJpbmciLCB7ICZjcmVhdGVGdW5TdWJzdHJpbmcsIEludGVydmFsKDIsIDMpIH0gfSwK
KyAgICAgICAgeyAic3Vic3RyaW5nLWFmdGVyIiwgeyAmY3JlYXRlRnVuU3Vic3RyaW5nQWZ0ZXIs
IDIgfSB9LAorICAgICAgICB7ICJzdWJzdHJpbmctYmVmb3JlIiwgeyAmY3JlYXRlRnVuU3Vic3Ry
aW5nQmVmb3JlLCAyIH0gfSwKKyAgICAgICAgeyAic3VtIiwgeyAmY3JlYXRlRnVuU3VtLCAxIH0g
fSwKKyAgICAgICAgeyAidHJhbnNsYXRlIiwgeyAmY3JlYXRlRnVuVHJhbnNsYXRlLCAzIH0gfSwK
KyAgICAgICAgeyAidHJ1ZSIsIHsgJmNyZWF0ZUZ1blRydWUsIDAgfSB9LAogICAgIH07Ci0gICAg
Y29uc3QgdW5zaWduZWQgaW50IG51bUZ1bmN0aW9ucyA9IHNpemVvZihmdW5jdGlvbnMpIC8gc2l6
ZW9mKGZ1bmN0aW9uc1sgMCBdKTsKLSAgICAgICAgCisgICAgY29uc3QgdW5zaWduZWQgaW50IG51
bUZ1bmN0aW9ucyA9IHNpemVvZihmdW5jdGlvbnMpIC8gc2l6ZW9mKGZ1bmN0aW9uc1swXSk7CisK
KyAgICBmdW5jdGlvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgRnVuY3Rpb25SZWM+OwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GdW5jdGlvbnM7ICsraSkKLSAgICAgICAgbV9m
dW5jdGlvbkRpY3Quc2V0KGZ1bmN0aW9uc1tpXS5uYW1lLCBmdW5jdGlvbnNbaV0uZnVuY3Rpb24p
OworICAgICAgICBmdW5jdGlvbk1hcC0+c2V0KGZ1bmN0aW9uc1tpXS5uYW1lLCBmdW5jdGlvbnNb
aV0uZnVuY3Rpb24pOwogfQogCi1GdW5jdGlvbiAqRnVuY3Rpb25MaWJyYXJ5OjpjcmVhdGVGdW5j
dGlvbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvbio+ICZhcmdzKSBj
b25zdAorRnVuY3Rpb24qIGNyZWF0ZUZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
VmVjdG9yPEV4cHJlc3Npb24qPiYgYXJncykKIHsKLSAgICBpZiAoIW1fZnVuY3Rpb25EaWN0LmNv
bnRhaW5zKG5hbWUpKSB7CisgICAgaWYgKCFmdW5jdGlvbk1hcCkKKyAgICAgICAgY3JlYXRlRnVu
Y3Rpb25NYXAoKTsKKworICAgIGlmICghZnVuY3Rpb25NYXAtPmNvbnRhaW5zKG5hbWUpKSB7Cisg
ICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhhcmdzKTsKKwogICAgICAgICAvLyBSZXR1cm4gYSBkdW1t
eSBmdW5jdGlvbiBpbnN0ZWFkIG9mIDAuCi0gICAgICAgIEZ1bmN0aW9uICpmdW5jVHJ1ZSA9IG1f
ZnVuY3Rpb25EaWN0LmdldCgidHJ1ZSIpLmZhY3RvcnlGbigpOworICAgICAgICBGdW5jdGlvbiog
ZnVuY1RydWUgPSBmdW5jdGlvbk1hcC0+Z2V0KCJ0cnVlIikuZmFjdG9yeUZuKCk7CiAgICAgICAg
IGZ1bmNUcnVlLT5zZXROYW1lKCJ0cnVlIik7CiAgICAgICAgIHJldHVybiBmdW5jVHJ1ZTsKICAg
ICB9CiAKLSAgICBGdW5jdGlvblJlYyBmdW5jdGlvblJlYyA9IG1fZnVuY3Rpb25EaWN0LmdldChu
YW1lKTsKLSAgICBpZiAoIWZ1bmN0aW9uUmVjLmFyZ3MuY29udGFpbnMoYXJncy5zaXplKCkpKQor
ICAgIEZ1bmN0aW9uUmVjIGZ1bmN0aW9uUmVjID0gZnVuY3Rpb25NYXAtPmdldChuYW1lKTsKKyAg
ICBpZiAoIWZ1bmN0aW9uUmVjLmFyZ3MuY29udGFpbnMoYXJncy5zaXplKCkpKSB7CisgICAgICAg
IGRlbGV0ZUFsbFZhbHVlcyhhcmdzKTsKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCi0gICAg
RnVuY3Rpb24gKmZ1bmN0aW9uID0gZnVuY3Rpb25SZWMuZmFjdG9yeUZuKCk7CisgICAgRnVuY3Rp
b24qIGZ1bmN0aW9uID0gZnVuY3Rpb25SZWMuZmFjdG9yeUZuKCk7CiAgICAgZnVuY3Rpb24tPnNl
dEFyZ3VtZW50cyhhcmdzKTsKICAgICBmdW5jdGlvbi0+c2V0TmFtZShuYW1lKTsKLSAgICAKICAg
ICByZXR1cm4gZnVuY3Rpb247CiB9CiAKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFZh
cmlhYmxlUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRo
VmFyaWFibGVSZWZlcmVuY2UuaAkocmV2aXNpb24gMTQ3MTcpCisrKyBXZWJDb3JlL3hwYXRoL2lt
cGwvWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIHZhcmlhYmxlcmVmZXJlbmNlLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJh
YWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFh
YmVAa2RlLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIsNiArMjIs
NyBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgWFBh
dGhWYXJpYWJsZVJlZmVyZW5jZV9ICiAjZGVmaW5lIFhQYXRoVmFyaWFibGVSZWZlcmVuY2VfSAog
CkBAIC0zMCwyNSArMzEsMjEgQEAKICNpbmNsdWRlICJYUGF0aEV4cHJlc3Npb25Ob2RlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBYUGF0aCB7CisKKyAgICBuYW1lc3BhY2Ug
WFBhdGggewogICAgIAotY2xhc3MgVmFyaWFibGVSZWZlcmVuY2UgOiBwdWJsaWMgRXhwcmVzc2lv
bgotewotcHVibGljOgotICAgIFZhcmlhYmxlUmVmZXJlbmNlKGNvbnN0IFN0cmluZyYgbmFtZSk7
CisgICAgICAgIGNsYXNzIFZhcmlhYmxlUmVmZXJlbmNlIDogcHVibGljIEV4cHJlc3Npb24gewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYXJpYWJsZVJlZmVyZW5jZShjb25zdCBTdHJp
bmcmIG5hbWUpOworICAgICAgICAgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgp
IGNvbnN0OworICAgICAgICAgICAgU3RyaW5nIG1fbmFtZTsKKyAgICAgICAgfTsKIAotICAgIHZp
cnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBW
YWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Ci0KLSAgICBTdHJpbmcgbV9uYW1lOwotfTsKLQorICAg
IH0KIH0KLX0KIAogI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKIAogI2VuZGlmIC8vIFhQYXRoX1Zh
cmlhYmxlUmVmZXJlbmNlX0gKLQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoRXhwcmVz
c2lvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhFeHByZXNz
aW9uTm9kZS5oCShyZXZpc2lvbiAxNDcxNykKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEV4
cHJlc3Npb25Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogZXhw
cmVzc2lvbi5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTI5LDY2ICsyOSw2MSBAQAogCiAjaWYgWFBBVEhfU1VQUE9SVAogCi0jaW5jbHVkZSAiWFBhdGhO
U1Jlc29sdmVyLmgiCi0KICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBOb2RlOwogCi1uYW1lc3BhY2UgWFBhdGggeworICAg
IG5hbWVzcGFjZSBYUGF0aCB7CiAKLWNsYXNzIFZhbHVlOworICAgICAgICBjbGFzcyBWYWx1ZTsK
ICAgICAgICAgCi1zdHJ1Y3QgRXZhbHVhdGlvbkNvbnRleHQgewotICAgIEV2YWx1YXRpb25Db250
ZXh0KCkgOiBub2RlKDApLCBzaXplKDApLCBwb3NpdGlvbigwKSB7IH0KKyAgICAgICAgc3RydWN0
IEV2YWx1YXRpb25Db250ZXh0IHsKKyAgICAgICAgICAgIEV2YWx1YXRpb25Db250ZXh0KCkgOiBu
b2RlKDApLCBzaXplKDApLCBwb3NpdGlvbigwKSB7IH0KIAotICAgIFJlZlB0cjxOb2RlPiBub2Rl
OwotICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKLSAgICB1bnNpZ25lZCBsb25nIHBvc2l0aW9uOwot
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcmlhYmxlQmluZGluZ3M7CisgICAgICAgICAg
ICBSZWZQdHI8Tm9kZT4gbm9kZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9zaXRpb247CisgICAgICAgICAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiB2YXJpYWJsZUJpbmRpbmdzOwogCi0gICAgLyogVGhlIGZ1bmN0aW9uIGxp
YnJhcnkgaXMgZ2xvYmFsbHkgYWNjZXNzaWJsZSB0aHJvdWdoCi0gICAgICogRnVuY3Rpb25MaWJy
YXJ5OjpzZWxmKCkKLSAgICAgKi8KLX07CisgICAgICAgIH07CiAKLWNsYXNzIFBhcnNlTm9kZSB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UGFyc2VOb2RlKCkgeyB9Ci19OworICAgICAgICBjbGFz
cyBQYXJzZU5vZGUgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICB2aXJ0dWFsIH5QYXJz
ZU5vZGUoKSB7IH0KKyAgICAgICAgfTsKIAotY2xhc3MgRXhwcmVzc2lvbiA6IHB1YmxpYyBQYXJz
ZU5vZGUKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgRXZhbHVhdGlvbkNvbnRleHQmIGV2YWx1YXRp
b25Db250ZXh0KCk7CisgICAgICAgIGNsYXNzIEV4cHJlc3Npb24gOiBwdWJsaWMgUGFyc2VOb2Rl
LCBOb25jb3B5YWJsZSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHN0YXRpYyBFdmFs
dWF0aW9uQ29udGV4dCYgZXZhbHVhdGlvbkNvbnRleHQoKTsKIAotICAgIEV4cHJlc3Npb24oKTsK
LSAgICB2aXJ0dWFsIH5FeHByZXNzaW9uKCk7CisgICAgICAgICAgICBFeHByZXNzaW9uKCk7Cisg
ICAgICAgICAgICB2aXJ0dWFsIH5FeHByZXNzaW9uKCk7CiAKLSAgICB2aXJ0dWFsIFZhbHVlIGV2
YWx1YXRlKCkgY29uc3Q7CisgICAgICAgICAgICB2aXJ0dWFsIFZhbHVlIGV2YWx1YXRlKCkgY29u
c3Q7CiAKLSAgICB2b2lkIGFkZFN1YkV4cHJlc3Npb24oRXhwcmVzc2lvbiopOwotICAgIHZvaWQg
b3B0aW1pemUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworICAgICAg
ICAgICAgdm9pZCBhZGRTdWJFeHByZXNzaW9uKEV4cHJlc3Npb24qKTsKKyAgICAgICAgICAgIHZv
aWQgb3B0aW1pemUoKTsKKyAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29u
c3Q7CiAKLXByb3RlY3RlZDoKLSAgICB1bnNpZ25lZCBzdWJFeHByQ291bnQoKSBjb25zdDsKLSAg
ICBFeHByZXNzaW9uKiBzdWJFeHByKHVuc2lnbmVkIGkpOwotICAgIGNvbnN0IEV4cHJlc3Npb24q
IHN1YkV4cHIodW5zaWduZWQgaSkgY29uc3Q7CisgICAgICAgIHByb3RlY3RlZDoKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHN1YkV4cHJDb3VudCgpIGNvbnN0OworICAgICAgICAgICAgRXhwcmVzc2lv
biogc3ViRXhwcih1bnNpZ25lZCk7CisgICAgICAgICAgICBjb25zdCBFeHByZXNzaW9uKiBzdWJF
eHByKHVuc2lnbmVkKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFZhbHVlIGRvRXZh
bHVhdGUoKSBjb25zdCA9IDA7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB2aXJ0dWFs
IFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdCA9IDA7CiAKLSAgICBWZWN0b3I8RXhwcmVzc2lvbio+
IG1fc3ViRXhwcmVzc2lvbnM7Ci0gICAgVmFsdWUqIG1fY29uc3RhbnRWYWx1ZTsKLX07CisgICAg
ICAgICAgICBWZWN0b3I8RXhwcmVzc2lvbio+IG1fc3ViRXhwcmVzc2lvbnM7CisgICAgICAgICAg
ICBWYWx1ZSogbV9jb25zdGFudFZhbHVlOworICAgICAgICB9OwogCisgICAgfQorCiB9Ci19CiAK
ICNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0
aFN0ZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFN0ZXAuY3Bw
CShyZXZpc2lvbiAxNDcxNykKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFN0ZXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw1NCArMjMsMjQgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWFBhdGhTdGVw
LmgiCiAKICNpZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0aFN0ZXAuaCIKLQotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCi0jaW5jbHVkZSAi
Tm9kZS5oIgotI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJYUGF0aFBhcnNlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgWFBhdGggewogCi1TdHJpbmcgU3RlcDo6YXhpc0FzU3RyaW5nKEF4aXNUeXBlIGF4aXMpCitT
dGVwOjpTdGVwKEF4aXMgYXhpcywgY29uc3QgU3RyaW5nJiBub2RlVGVzdCwgY29uc3QgVmVjdG9y
PFByZWRpY2F0ZSo+JiBwcmVkaWNhdGVzKQorICAgIDogbV9heGlzKGF4aXMpLCBtX25vZGVUZXN0
KG5vZGVUZXN0KSwgbV9wcmVkaWNhdGVzKHByZWRpY2F0ZXMpCiB7Ci0gICAgc3dpdGNoIChheGlz
KSB7Ci0gICAgICAgIGNhc2UgQW5jZXN0b3JBeGlzOiByZXR1cm4gImFuY2VzdG9yIjsKLSAgICAg
ICAgY2FzZSBBbmNlc3Rvck9yU2VsZkF4aXM6IHJldHVybiAiYW5jZXN0b3Itb3Itc2VsZiI7Ci0g
ICAgICAgIGNhc2UgQXR0cmlidXRlQXhpczogcmV0dXJuICJhdHRyaWJ1dGUiOwotICAgICAgICBj
YXNlIENoaWxkQXhpczogcmV0dXJuICJjaGlsZCI7Ci0gICAgICAgIGNhc2UgRGVzY2VuZGFudEF4
aXM6IHJldHVybiAiZGVzY2VuZGFudCI7Ci0gICAgICAgIGNhc2UgRGVzY2VuZGFudE9yU2VsZkF4
aXM6IHJldHVybiAiZGVzY2VuZGFudC1vci1zZWxmIjsKLSAgICAgICAgY2FzZSBGb2xsb3dpbmdB
eGlzOiByZXR1cm4gImZvbGxvd2luZyI7Ci0gICAgICAgIGNhc2UgRm9sbG93aW5nU2libGluZ0F4
aXM6IHJldHVybiAiZm9sbG93aW5nLXNpYmxpbmciOwotICAgICAgICBjYXNlIE5hbWVzcGFjZUF4
aXM6IHJldHVybiAibmFtZXNwYWNlIjsKLSAgICAgICAgY2FzZSBQYXJlbnRBeGlzOiByZXR1cm4g
InBhcmVudCI7Ci0gICAgICAgIGNhc2UgUHJlY2VkaW5nQXhpczogcmV0dXJuICJwcmVjZWRpbmci
OwotICAgICAgICBjYXNlIFByZWNlZGluZ1NpYmxpbmdBeGlzOiByZXR1cm4gInByZWNlZGluZy1z
aWJsaW5nIjsKLSAgICAgICAgY2FzZSBTZWxmQXhpczogcmV0dXJuICJzZWxmIjsKLSAgICB9Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdGVwOjpTdGVwKCkKLXsKLX0KLQotU3RlcDo6U3Rl
cChBeGlzVHlwZSBheGlzLCBjb25zdCBTdHJpbmcmIG5vZGVUZXN0LCBjb25zdCBWZWN0b3I8UHJl
ZGljYXRlKj4mIHByZWRpY2F0ZXMpCi0gICAgOiBtX2F4aXMoYXhpcykKLSAgICAsIG1fbm9kZVRl
c3Qobm9kZVRlc3QpCi0gICAgLCBtX3ByZWRpY2F0ZXMocHJlZGljYXRlcykKLXsKICAgICBQYXJz
ZXIqIHBhcnNlciA9IFBhcnNlcjo6Y3VycmVudCgpOwogICAgIEFTU0VSVChwYXJzZXIpOwotICAg
IAogICAgIG1fbmFtZXNwYWNlVVJJID0gcGFyc2VyLT5tX2N1cnJlbnROYW1lc3BhY2VVUkk7CiAg
ICAgcGFyc2VyLT5tX2N1cnJlbnROYW1lc3BhY2VVUkkgPSBTdHJpbmcoKTsKIH0KQEAgLTMwNSw3
ICsyNzUsNyBAQAogICAgICAgICBtX3ByZWRpY2F0ZXNbaV0tPm9wdGltaXplKCk7CiB9CiAKLU5v
ZGU6Ok5vZGVUeXBlIFN0ZXA6OnByaW1hcnlOb2RlVHlwZShBeGlzVHlwZSBheGlzKSBjb25zdAor
Tm9kZTo6Tm9kZVR5cGUgU3RlcDo6cHJpbWFyeU5vZGVUeXBlKEF4aXMgYXhpcykgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKGF4aXMpIHsKICAgICAgICAgY2FzZSBBdHRyaWJ1dGVBeGlzOgpJbmRleDog
V2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIueQkocmV2aXNpb24gMTQ3MTcpCisrKyBXZWJDb3JlL3hw
YXRoL2ltcGwvWFBhdGhHcmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIyICsyNSwyMSBA
QAogICovCiAKICV7CisKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIkRlcHJlY2F0
ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiWFBhdGhF
dmFsdWF0b3IuaCIKKyNpZiBYUEFUSF9TVVBQT1JUCisKICNpbmNsdWRlICJYUGF0aEZ1bmN0aW9u
cy5oIgogI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1ZGUgIlhQYXRoUGFyc2Vy
LmgiCiAjaW5jbHVkZSAiWFBhdGhQYXRoLmgiCiAjaW5jbHVkZSAiWFBhdGhQcmVkaWNhdGUuaCIK
LSNpbmNsdWRlICJYUGF0aFN0ZXAuaCIKLSNpbmNsdWRlICJYUGF0aFV0aWwuaCIKICNpbmNsdWRl
ICJYUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmgiCiAKICNkZWZpbmUgWVlERUJVRyAwCi0jZGVmaW5l
IFlZUEFSU0VfUEFSQU0gcGFyc2VyCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0gcGFyc2VyUGFyYW1l
dGVyCisjZGVmaW5lIFBBUlNFUiBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXJQYXJhbWV0ZXIp
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFhQYXRoOwpAQCAt
NTEsMTQgKzUwLDE1IEBACiAKICV1bmlvbgogewotICAgIFN0ZXA6OkF4aXNUeXBlIGF4aXNUeXBl
OwotICAgIGludCAgICAgICAgbnVtOwotICAgIFN0cmluZyAqc3RyOworICAgIFN0ZXA6OkF4aXMg
YXhpczsKKyAgICBOdW1lcmljT3A6Ok9wY29kZSBudW1vcDsKKyAgICBFcVRlc3RPcDo6T3Bjb2Rl
IGVxb3A7CisgICAgU3RyaW5nKiBzdHI7CiAgICAgRXhwcmVzc2lvbiogZXhwcjsKICAgICBWZWN0
b3I8UHJlZGljYXRlKj4qIHByZWRMaXN0OwogICAgIFZlY3RvcjxFeHByZXNzaW9uKj4qIGFyZ0xp
c3Q7CiAgICAgU3RlcCogc3RlcDsKLSAgICBMb2NhdGlvblBhdGggKmxvY2F0aW9uUGF0aDsKKyAg
ICBMb2NhdGlvblBhdGgqIGxvY2F0aW9uUGF0aDsKIH0KIAogJXsKQEAgLTY4LDIwICs2OCwyMiBA
QAogICAgIAogJX0KIAotJWxlZnQgPG51bT4gTVVMT1AgUkVMT1AgRVFPUAotJWxlZnQgPHN0cj4g
UExVUyBNSU5VUwotJWxlZnQgPHN0cj4gT1IgQU5ECi0ldG9rZW4gPGF4aXNUeXBlPiBBWElTTkFN
RQorJWxlZnQgPG51bW9wPiBNVUxPUCBSRUxPUAorJWxlZnQgPGVxb3A+IEVRT1AKKyVsZWZ0IFBM
VVMgTUlOVVMKKyVsZWZ0IE9SIEFORAorJXRva2VuIDxheGlzPiBBWElTTkFNRQogJXRva2VuIDxz
dHI+IE5PREVUWVBFIFBJIEZVTkNUSU9OTkFNRSBMSVRFUkFMCiAldG9rZW4gPHN0cj4gVkFSSUFC
TEVSRUZFUkVOQ0UgTlVNQkVSCi0ldG9rZW4gPHN0cj4gRE9URE9UIFNMQVNIU0xBU0ggTkFNRVRF
U1QKKyV0b2tlbiBET1RET1QgU0xBU0hTTEFTSAorJXRva2VuIDxzdHI+IE5BTUVURVNUCiAldG9r
ZW4gRVJST1IKIAogJXR5cGUgPGxvY2F0aW9uUGF0aD4gTG9jYXRpb25QYXRoCiAldHlwZSA8bG9j
YXRpb25QYXRoPiBBYnNvbHV0ZUxvY2F0aW9uUGF0aAogJXR5cGUgPGxvY2F0aW9uUGF0aD4gUmVs
YXRpdmVMb2NhdGlvblBhdGgKICV0eXBlIDxzdGVwPiBTdGVwCi0ldHlwZSA8YXhpc1R5cGU+IEF4
aXNTcGVjaWZpZXIKKyV0eXBlIDxheGlzPiBBeGlzU3BlY2lmaWVyCiAldHlwZSA8c3RlcD4gRGVz
Y2VuZGFudE9yU2VsZgogJXR5cGUgPHN0cj4gTm9kZVRlc3QKICV0eXBlIDxleHByPiBQcmVkaWNh
dGUKQEAgLTEwOCw3ICsxMTAsNyBAQAogRXhwcjoKICAgICBPckV4cHIKICAgICB7Ci0gICAgICAg
IHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPm1fdG9wRXhwciA9ICQxOworICAgICAgICBQ
QVJTRVItPm1fdG9wRXhwciA9ICQxOwogICAgIH0KICAgICA7CiAKQEAgLTEyOCw3ICsxMzAsNyBA
QAogICAgICcvJwogICAgIHsKICAgICAgICAgJCQgPSBuZXcgTG9jYXRpb25QYXRoOwotICAgICAg
ICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7Cisg
ICAgICAgIFBBUlNFUi0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAgICB8CiAgICAg
Jy8nIFJlbGF0aXZlTG9jYXRpb25QYXRoCkBAIC0xNDAsNyArMTQyLDcgQEAKICAgICB7CiAgICAg
ICAgICQkID0gJDI7CiAgICAgICAgICQkLT5tX3N0ZXBzLmluc2VydCgwLCAkMSk7Ci0gICAgICAg
IHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOwor
ICAgICAgICBQQVJTRVItPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOwogICAgIH0KICAgICA7CiAK
QEAgLTE0OSwyMiArMTUxLDIyIEBACiAgICAgewogICAgICAgICAkJCA9IG5ldyBMb2NhdGlvblBh
dGg7CiAgICAgICAgICQkLT5tX3N0ZXBzLmFwcGVuZCgkMSk7Ci0gICAgICAgIHN0YXRpY19jYXN0
PFBhcnNlcio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7CisgICAgICAg
IFBBUlNFUi0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7CisgICAgICAgIFBBUlNFUi0+cmVnaXN0
ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAgICB8CiAgICAgUmVsYXRpdmVMb2NhdGlvblBhdGgg
Jy8nIFN0ZXAKICAgICB7CiAgICAgICAgICQkLT5tX3N0ZXBzLmFwcGVuZCgkMyk7Ci0gICAgICAg
IHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOwor
ICAgICAgICBQQVJTRVItPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOwogICAgIH0KICAgICB8CiAg
ICAgUmVsYXRpdmVMb2NhdGlvblBhdGggRGVzY2VuZGFudE9yU2VsZiBTdGVwCiAgICAgewogICAg
ICAgICAkJC0+bV9zdGVwcy5hcHBlbmQoJDIpOwogICAgICAgICAkJC0+bV9zdGVwcy5hcHBlbmQo
JDMpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFy
c2VOb2RlKCQyKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdp
c3RlclBhcnNlTm9kZSgkMyk7CisgICAgICAgIFBBUlNFUi0+dW5yZWdpc3RlclBhcnNlTm9kZSgk
Mik7CisgICAgICAgIFBBUlNFUi0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMyk7CiAgICAgfQogICAg
IDsKIApAQCAtMTcyLDM3ICsxNzQsMzEgQEAKICAgICBOb2RlVGVzdAogICAgIHsKICAgICAgICAg
JCQgPSBuZXcgU3RlcChTdGVwOjpDaGlsZEF4aXMsICokMSk7Ci0gICAgICAgIGRlbGV0ZSAkMTsK
LSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJQYXJzZU5vZGUo
JCQpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyU3Ry
aW5nKCQxKTsKKyAgICAgICAgUEFSU0VSLT5kZWxldGVTdHJpbmcoJDEpOworICAgICAgICBQQVJT
RVItPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKICAgICB9CiAgICAgfAogICAgIE5vZGVUZXN0IFBy
ZWRpY2F0ZUxpc3QKICAgICB7CiAgICAgICAgICQkID0gbmV3IFN0ZXAoU3RlcDo6Q2hpbGRBeGlz
LCAqJDEsICokMik7Ci0gICAgICAgIGRlbGV0ZSAkMTsKLSAgICAgICAgZGVsZXRlICQyOwotICAg
ICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7
Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJpbmco
JDEpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUHJl
ZGljYXRlVmVjdG9yKCQyKTsKKyAgICAgICAgUEFSU0VSLT5kZWxldGVTdHJpbmcoJDEpOworICAg
ICAgICBQQVJTRVItPmRlbGV0ZVByZWRpY2F0ZVZlY3RvcigkMik7CisgICAgICAgIFBBUlNFUi0+
cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAgICB8CiAgICAgQXhpc1NwZWNpZmllciBO
b2RlVGVzdAogICAgIHsKICAgICAgICAgJCQgPSBuZXcgU3RlcCgkMSwgKiQyKTsKLSAgICAgICAg
ZGVsZXRlICQyOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3Rl
clBhcnNlTm9kZSgkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVu
cmVnaXN0ZXJTdHJpbmcoJDIpOworICAgICAgICBQQVJTRVItPmRlbGV0ZVN0cmluZygkMik7Cisg
ICAgICAgIFBBUlNFUi0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAgICB8CiAgICAg
QXhpc1NwZWNpZmllciBOb2RlVGVzdCBQcmVkaWNhdGVMaXN0CiAgICAgewotICAgICAgICAkJCA9
IG5ldyBTdGVwKCQxLCAqJDIsICAqJDMpOwotICAgICAgICBkZWxldGUgJDI7Ci0gICAgICAgIGRl
bGV0ZSAkMzsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJQ
YXJzZU5vZGUoJCQpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJl
Z2lzdGVyU3RyaW5nKCQyKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+
dW5yZWdpc3RlclByZWRpY2F0ZVZlY3RvcigkMyk7CisgICAgICAgICQkID0gbmV3IFN0ZXAoJDEs
ICokMiwgKiQzKTsKKyAgICAgICAgUEFSU0VSLT5kZWxldGVTdHJpbmcoJDIpOworICAgICAgICBQ
QVJTRVItPmRlbGV0ZVByZWRpY2F0ZVZlY3RvcigkMyk7CisgICAgICAgIFBBUlNFUi0+cmVnaXN0
ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAgICB8CiAgICAgQWJicmV2aWF0ZWRTdGVwCkBAIC0y
MjAsMzUgKzIxNiwyOSBAQAogTm9kZVRlc3Q6CiAgICAgTkFNRVRFU1QKICAgICB7Ci0gICAgICAg
IGNvbnN0IGludCBjb2xvbiA9ICQxLT5maW5kKCc6Jyk7Ci0gICAgICAgIGlmIChjb2xvbiA+IC0x
KSB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4KCQxLT5sZWZ0KGNvbG9uKSk7Ci0gICAgICAg
ICAgICBYUGF0aE5TUmVzb2x2ZXIgKnJlc29sdmVyID0gc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFy
c2VyKS0+cmVzb2x2ZXIoKTsKKyAgICAgICAgaW50IGNvbG9uID0gJCQtPmZpbmQoJzonKTsKKyAg
ICAgICAgaWYgKGNvbG9uID49IDApIHsKKyAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciogcmVz
b2x2ZXIgPSBQQVJTRVItPnJlc29sdmVyKCk7CiAgICAgICAgICAgICBpZiAoIXJlc29sdmVyKSB7
Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+bV9nb3ROYW1l
c3BhY2VFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgUEFSU0VSLT5tX2dvdE5hbWVzcGFj
ZUVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBZWUFCT1JUOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5t
X2N1cnJlbnROYW1lc3BhY2VVUkkgPSByZXNvbHZlci0+bG9va3VwTmFtZXNwYWNlVVJJKHByZWZp
eCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxQYXJzZXIqPihw
YXJzZXIpLT5tX2N1cnJlbnROYW1lc3BhY2VVUkkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5tX2dvdE5hbWVzcGFjZUVycm9yID0gdHJ1
ZTsKKyAgICAgICAgICAgIFBBUlNFUi0+bV9jdXJyZW50TmFtZXNwYWNlVVJJID0gcmVzb2x2ZXIt
Pmxvb2t1cE5hbWVzcGFjZVVSSSgkJC0+bGVmdChjb2xvbikpOworICAgICAgICAgICAgaWYgKFBB
UlNFUi0+bV9jdXJyZW50TmFtZXNwYWNlVVJJLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAg
UEFSU0VSLT5tX2dvdE5hbWVzcGFjZUVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBZWUFC
T1JUOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICAkJCA9IG5ldyBT
dHJpbmcoJDEtPnN1YnN0cmluZyhjb2xvbiArIDEpKTsKLSAgICAgICAgICAgIGRlbGV0ZSAkMTsK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnJlZ2lzdGVyU3RyaW5n
KCQkKTsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0
ZXJTdHJpbmcoJDEpOworICAgICAgICAgICAgUEFSU0VSLT5kZWxldGVTdHJpbmcoJDEpOworICAg
ICAgICAgICAgUEFSU0VSLT5yZWdpc3RlclN0cmluZygkJCk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgfAogICAgIE5PREVUWVBFICcoJyAnKScKICAgICB7CiAgICAgICAgICQkID0gbmV3IFN0cmlu
ZygqJDEgKyAiKCkiKTsKLSAgICAgICAgZGVsZXRlICQxOwotICAgICAgICBzdGF0aWNfY2FzdDxQ
YXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclN0cmluZygkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0
PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJpbmcoJDEpOworICAgICAgICBQQVJTRVIt
PmRlbGV0ZVN0cmluZygkMSk7CisgICAgICAgIFBBUlNFUi0+cmVnaXN0ZXJTdHJpbmcoJCQpOwog
ICAgIH0KICAgICB8CiAgICAgUEkgJygnICcpJwpAQCAtMjU3LDExICsyNDcsOSBAQAogICAgIHsK
ICAgICAgICAgU3RyaW5nIHMgPSAqJDEgKyAiICIgKyAqJDM7CiAgICAgICAgICQkID0gbmV3IFN0
cmluZyhzLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKSk7Ci0gICAgICAgIGRl
bGV0ZSAkMTsKLSAgICAgICAgZGVsZXRlICQzOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIq
PihwYXJzZXIpLT5yZWdpc3RlclN0cmluZygkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNl
cio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJpbmcoJDEpOyAgICAgICAgCi0gICAgICAgIHN0YXRp
Y19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJpbmcoJDMpOworICAgICAgICBQ
QVJTRVItPmRlbGV0ZVN0cmluZygkMSk7ICAgICAgICAKKyAgICAgICAgUEFSU0VSLT5kZWxldGVT
dHJpbmcoJDMpOworICAgICAgICBQQVJTRVItPnJlZ2lzdGVyU3RyaW5nKCQkKTsKICAgICB9CiAg
ICAgOwogCkBAIC0yNzAsMTQgKzI1OCwxNCBAQAogICAgIHsKICAgICAgICAgJCQgPSBuZXcgVmVj
dG9yPFByZWRpY2F0ZSo+OwogICAgICAgICAkJC0+YXBwZW5kKG5ldyBQcmVkaWNhdGUoJDEpKTsK
LSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJQcmVkaWNhdGVW
ZWN0b3IoJCQpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lz
dGVyUGFyc2VOb2RlKCQxKTsKKyAgICAgICAgUEFSU0VSLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQx
KTsKKyAgICAgICAgUEFSU0VSLT5yZWdpc3RlclByZWRpY2F0ZVZlY3RvcigkJCk7CiAgICAgfQog
ICAgIHwKICAgICBQcmVkaWNhdGVMaXN0IFByZWRpY2F0ZQogICAgIHsKICAgICAgICAgJCQtPmFw
cGVuZChuZXcgUHJlZGljYXRlKCQyKSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBh
cnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDIpOworICAgICAgICBQQVJTRVItPnVucmVnaXN0
ZXJQYXJzZU5vZGUoJDIpOwogICAgIH0KICAgICA7CiAKQEAgLTI5Miw3ICsyODAsNyBAQAogICAg
IFNMQVNIU0xBU0gKICAgICB7CiAgICAgICAgICQkID0gbmV3IFN0ZXAoU3RlcDo6RGVzY2VuZGFu
dE9yU2VsZkF4aXMsICJub2RlKCkiKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFy
c2VyKS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOworICAgICAgICBQQVJTRVItPnJlZ2lzdGVyUGFy
c2VOb2RlKCQkKTsKICAgICB9CiAgICAgOwogCkBAIC0zMDAsMTMgKzI4OCwxMyBAQAogICAgICcu
JwogICAgIHsKICAgICAgICAgJCQgPSBuZXcgU3RlcChTdGVwOjpTZWxmQXhpcywgIm5vZGUoKSIp
OwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9k
ZSgkJCk7CisgICAgICAgIFBBUlNFUi0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAg
ICB8CiAgICAgRE9URE9UCiAgICAgewogICAgICAgICAkJCA9IG5ldyBTdGVwKFN0ZXA6OlBhcmVu
dEF4aXMsICJub2RlKCkiKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+
cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOworICAgICAgICBQQVJTRVItPnJlZ2lzdGVyUGFyc2VOb2Rl
KCQkKTsKICAgICB9CiAgICAgOwogCkBAIC0zMTQsOSArMzAyLDggQEAKICAgICBWQVJJQUJMRVJF
RkVSRU5DRQogICAgIHsKICAgICAgICAgJCQgPSBuZXcgVmFyaWFibGVSZWZlcmVuY2UoKiQxKTsK
LSAgICAgICAgZGVsZXRlICQxOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIp
LT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBh
cnNlciktPnVucmVnaXN0ZXJTdHJpbmcoJDEpOworICAgICAgICBQQVJTRVItPmRlbGV0ZVN0cmlu
ZygkMSk7CisgICAgICAgIFBBUlNFUi0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAg
ICB8CiAgICAgJygnIEV4cHIgJyknCkBAIC0zMjcsMTcgKzMxNCwxNSBAQAogICAgIExJVEVSQUwK
ICAgICB7CiAgICAgICAgICQkID0gbmV3IFN0cmluZ0V4cHJlc3Npb24oKiQxKTsKLSAgICAgICAg
ZGVsZXRlICQxOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3Rl
clBhcnNlTm9kZSgkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVu
cmVnaXN0ZXJTdHJpbmcoJDEpOyAgICAgICAgCisgICAgICAgIFBBUlNFUi0+ZGVsZXRlU3RyaW5n
KCQxKTsgICAgICAgIAorICAgICAgICBQQVJTRVItPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKICAg
ICB9CiAgICAgfAogICAgIE5VTUJFUgogICAgIHsKICAgICAgICAgJCQgPSBuZXcgTnVtYmVyKCQx
LT5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7Ci0gICAgICAgIGRlbGV0ZSAkMTsKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQp
OwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyU3RyaW5n
KCQxKTsKKyAgICAgICAgUEFSU0VSLT5kZWxldGVTdHJpbmcoJDEpOworICAgICAgICBQQVJTRVIt
PnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKICAgICB9CiAgICAgfAogICAgIEZ1bmN0aW9uQ2FsbApA
QCAtMzQ2LDIwICszMzEsMTcgQEAKIEZ1bmN0aW9uQ2FsbDoKICAgICBGVU5DVElPTk5BTUUgJygn
ICcpJwogICAgIHsKLSAgICAgICAgJCQgPSBGdW5jdGlvbkxpYnJhcnk6OnNlbGYoKS5jcmVhdGVG
dW5jdGlvbigkMS0+ZGVwcmVjYXRlZFN0cmluZygpLmxhdGluMSgpKTsKLSAgICAgICAgZGVsZXRl
ICQxOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNl
Tm9kZSgkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0
ZXJTdHJpbmcoJDEpOworICAgICAgICAkJCA9IGNyZWF0ZUZ1bmN0aW9uKCokMSk7CisgICAgICAg
IFBBUlNFUi0+ZGVsZXRlU3RyaW5nKCQxKTsKKyAgICAgICAgUEFSU0VSLT5yZWdpc3RlclBhcnNl
Tm9kZSgkJCk7CiAgICAgfQogICAgIHwKICAgICBGVU5DVElPTk5BTUUgJygnIEFyZ3VtZW50TGlz
dCAnKScKICAgICB7Ci0gICAgICAgICQkID0gRnVuY3Rpb25MaWJyYXJ5OjpzZWxmKCkuY3JlYXRl
RnVuY3Rpb24oJDEtPmRlcHJlY2F0ZWRTdHJpbmcoKS5sYXRpbjEoKSwgKiQzKTsKLSAgICAgICAg
ZGVsZXRlICQxOwotICAgICAgICBkZWxldGUgJDM7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNl
cio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8
UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclN0cmluZygkMSk7Ci0gICAgICAgIHN0YXRpY19j
YXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJFeHByZXNzaW9uVmVjdG9yKCQzKTsKKyAg
ICAgICAgJCQgPSBjcmVhdGVGdW5jdGlvbigqJDEsICokMyk7CisgICAgICAgIFBBUlNFUi0+ZGVs
ZXRlU3RyaW5nKCQxKTsKKyAgICAgICAgUEFSU0VSLT5kZWxldGVFeHByZXNzaW9uVmVjdG9yKCQz
KTsKKyAgICAgICAgUEFSU0VSLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CiAgICAgfQogICAgIDsK
IApAQCAtMzY4LDE0ICszNTAsMTQgQEAKICAgICB7CiAgICAgICAgICQkID0gbmV3IFZlY3RvcjxF
eHByZXNzaW9uKj47CiAgICAgICAgICQkLT5hcHBlbmQoJDEpOwotICAgICAgICBzdGF0aWNfY2Fz
dDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlckV4cHJlc3Npb25WZWN0b3IoJCQpOwotICAgICAg
ICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsK
KyAgICAgICAgUEFSU0VSLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsKKyAgICAgICAgUEFSU0VS
LT5yZWdpc3RlckV4cHJlc3Npb25WZWN0b3IoJCQpOwogICAgIH0KICAgICB8CiAgICAgQXJndW1l
bnRMaXN0ICcsJyBBcmd1bWVudAogICAgIHsKICAgICAgICAgJCQtPmFwcGVuZCgkMyk7Ci0gICAg
ICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMp
OworICAgICAgICBQQVJTRVItPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOwogICAgIH0KICAgICA7
CiAKQEAgLTM4Myw3ICszNjUsNiBAQAogICAgIEV4cHIKICAgICA7CiAKLQogVW5pb25FeHByOgog
ICAgIFBhdGhFeHByCiAgICAgfApAQCAtMzkyLDkgKzM3Myw5IEBACiAgICAgICAgICQkID0gbmV3
IFVuaW9uOwogICAgICAgICAkJC0+YWRkU3ViRXhwcmVzc2lvbigkMSk7CiAgICAgICAgICQkLT5h
ZGRTdWJFeHByZXNzaW9uKCQzKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2Vy
KS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihw
YXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFy
c2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMyk7CisgICAgICAgIFBBUlNFUi0+
dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7CisgICAgICAgIFBBUlNFUi0+dW5yZWdpc3RlclBhcnNl
Tm9kZSgkMyk7CisgICAgICAgIFBBUlNFUi0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0K
ICAgICA7CiAKQEAgLTQwNSwxNyArMzg2LDE0IEBACiAgICAgfQogICAgIHwKICAgICBGaWx0ZXJF
eHByCi0gICAgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KICAgICB8CiAgICAgRmlsdGVyRXhw
ciAnLycgUmVsYXRpdmVMb2NhdGlvblBhdGgKICAgICB7CiAgICAgICAgICQzLT5tX2Fic29sdXRl
ID0gdHJ1ZTsKICAgICAgICAgJCQgPSBuZXcgUGF0aChzdGF0aWNfY2FzdDxGaWx0ZXIqPigkMSks
ICQzKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJQYXJz
ZU5vZGUoJCQpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lz
dGVyUGFyc2VOb2RlKCQxKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+
dW5yZWdpc3RlclBhcnNlTm9kZSgkMyk7CisgICAgICAgIFBBUlNFUi0+dW5yZWdpc3RlclBhcnNl
Tm9kZSgkMSk7CisgICAgICAgIFBBUlNFUi0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMyk7CisgICAg
ICAgIFBBUlNFUi0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAgICB8CiAgICAgRmls
dGVyRXhwciBEZXNjZW5kYW50T3JTZWxmIFJlbGF0aXZlTG9jYXRpb25QYXRoCkBAIC00MjMsMjUg
KzQwMSwyMiBAQAogICAgICAgICAkMy0+bV9zdGVwcy5pbnNlcnQoMCwgJDIpOwogICAgICAgICAk
My0+bV9hYnNvbHV0ZSA9IHRydWU7CiAgICAgICAgICQkID0gbmV3IFBhdGgoc3RhdGljX2Nhc3Q8
RmlsdGVyKj4oJDEpLCAkMyk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlcikt
PnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFy
c2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNl
cio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOworICAgICAgICBQQVJTRVItPnVu
cmVnaXN0ZXJQYXJzZU5vZGUoJDEpOworICAgICAgICBQQVJTRVItPnVucmVnaXN0ZXJQYXJzZU5v
ZGUoJDIpOworICAgICAgICBQQVJTRVItPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOworICAgICAg
ICBQQVJTRVItPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKICAgICB9CiAgICAgOwogCiBGaWx0ZXJF
eHByOgogICAgIFByaW1hcnlFeHByCi0gICAgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KICAg
ICB8CiAgICAgUHJpbWFyeUV4cHIgUHJlZGljYXRlTGlzdAogICAgIHsKICAgICAgICAgJCQgPSBu
ZXcgRmlsdGVyKCQxLCAqJDIpOwotICAgICAgICBkZWxldGUgJDI7Ci0gICAgICAgIHN0YXRpY19j
YXN0PFBhcnNlcio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7Ci0gICAg
ICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQcmVkaWNhdGVWZWN0
b3IoJDIpOworICAgICAgICBQQVJTRVItPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOworICAgICAg
ICBQQVJTRVItPmRlbGV0ZVByZWRpY2F0ZVZlY3RvcigkMik7CisgICAgICAgIFBBUlNFUi0+cmVn
aXN0ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAgICA7CiAKQEAgLTQ1MSw5ICs0MjYsOSBAQAog
ICAgIE9yRXhwciBPUiBBbmRFeHByCiAgICAgewogICAgICAgICAkJCA9IG5ldyBMb2dpY2FsT3Ao
TG9naWNhbE9wOjpPUF9PciwgJDEsICQzKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4o
cGFyc2VyKS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJz
ZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsKLSAgICAgICAgc3RhdGljX2Nh
c3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMyk7CisgICAgICAgIFBB
UlNFUi0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7CisgICAgICAgIFBBUlNFUi0+dW5yZWdpc3Rl
clBhcnNlTm9kZSgkMyk7CisgICAgICAgIFBBUlNFUi0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwog
ICAgIH0KICAgICA7CiAKQEAgLTQ2Myw5ICs0MzgsOSBAQAogICAgIEFuZEV4cHIgQU5EIEVxdWFs
aXR5RXhwcgogICAgIHsKICAgICAgICAgJCQgPSBuZXcgTG9naWNhbE9wKExvZ2ljYWxPcDo6T1Bf
QW5kLCAkMSwgJDMpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdp
c3RlclBhcnNlTm9kZSgkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlcikt
PnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihw
YXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQzKTsKKyAgICAgICAgUEFSU0VSLT51bnJlZ2lz
dGVyUGFyc2VOb2RlKCQxKTsKKyAgICAgICAgUEFSU0VSLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQz
KTsKKyAgICAgICAgUEFSU0VSLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CiAgICAgfQogICAgIDsK
IApAQCAtNDc1LDkgKzQ1MCw5IEBACiAgICAgRXF1YWxpdHlFeHByIEVRT1AgUmVsYXRpb25hbEV4
cHIKICAgICB7CiAgICAgICAgICQkID0gbmV3IEVxVGVzdE9wKCQyLCAkMSwgJDMpOwotICAgICAg
ICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7Ci0g
ICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUo
JDEpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFy
c2VOb2RlKCQzKTsKKyAgICAgICAgUEFSU0VSLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsKKyAg
ICAgICAgUEFSU0VSLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQzKTsKKyAgICAgICAgUEFSU0VSLT5y
ZWdpc3RlclBhcnNlTm9kZSgkJCk7CiAgICAgfQogICAgIDsKIApAQCAtNDg3LDkgKzQ2Miw5IEBA
CiAgICAgUmVsYXRpb25hbEV4cHIgUkVMT1AgQWRkaXRpdmVFeHByCiAgICAgewogICAgICAgICAk
JCA9IG5ldyBOdW1lcmljT3AoJDIsICQxLCAkMyk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNl
cio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8
UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7Ci0gICAgICAgIHN0YXRp
Y19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOworICAgICAg
ICBQQVJTRVItPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOworICAgICAgICBQQVJTRVItPnVucmVn
aXN0ZXJQYXJzZU5vZGUoJDMpOworICAgICAgICBQQVJTRVItPnJlZ2lzdGVyUGFyc2VOb2RlKCQk
KTsKICAgICB9CiAgICAgOwogCkBAIC00OTksMTcgKzQ3NCwxNyBAQAogICAgIEFkZGl0aXZlRXhw
ciBQTFVTIE11bHRpcGxpY2F0aXZlRXhwcgogICAgIHsKICAgICAgICAgJCQgPSBuZXcgTnVtZXJp
Y09wKE51bWVyaWNPcDo6T1BfQWRkLCAkMSwgJDMpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJz
ZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0
PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOwotICAgICAgICBzdGF0
aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQzKTsKKyAgICAg
ICAgUEFSU0VSLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsKKyAgICAgICAgUEFSU0VSLT51bnJl
Z2lzdGVyUGFyc2VOb2RlKCQzKTsKKyAgICAgICAgUEFSU0VSLT5yZWdpc3RlclBhcnNlTm9kZSgk
JCk7CiAgICAgfQogICAgIHwKICAgICBBZGRpdGl2ZUV4cHIgTUlOVVMgTXVsdGlwbGljYXRpdmVF
eHByCiAgICAgewogICAgICAgICAkJCA9IG5ldyBOdW1lcmljT3AoTnVtZXJpY09wOjpPUF9TdWIs
ICQxLCAkMyk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnJlZ2lzdGVy
UGFyc2VOb2RlKCQkKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5y
ZWdpc3RlclBhcnNlTm9kZSgkMSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNl
ciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOworICAgICAgICBQQVJTRVItPnVucmVnaXN0ZXJQ
YXJzZU5vZGUoJDEpOworICAgICAgICBQQVJTRVItPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOwor
ICAgICAgICBQQVJTRVItPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKICAgICB9CiAgICAgOwogCkBA
IC01MTksOSArNDk0LDkgQEAKICAgICBNdWx0aXBsaWNhdGl2ZUV4cHIgTVVMT1AgVW5hcnlFeHBy
CiAgICAgewogICAgICAgICAkJCA9IG5ldyBOdW1lcmljT3AoJDIsICQxLCAkMyk7Ci0gICAgICAg
IHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgk
MSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJz
ZU5vZGUoJDMpOworICAgICAgICBQQVJTRVItPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOworICAg
ICAgICBQQVJTRVItPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOworICAgICAgICBQQVJTRVItPnJl
Z2lzdGVyUGFyc2VOb2RlKCQkKTsKICAgICB9CiAgICAgOwogCkBAIC01MzIsOSArNTA3LDExIEBA
CiAgICAgewogICAgICAgICAkJCA9IG5ldyBOZWdhdGl2ZTsKICAgICAgICAgJCQtPmFkZFN1YkV4
cHJlc3Npb24oJDIpOwotICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdp
c3RlclBhcnNlTm9kZSgkJCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlcikt
PnVucmVnaXN0ZXJQYXJzZU5vZGUoJDIpOworICAgICAgICBQQVJTRVItPnVucmVnaXN0ZXJQYXJz
ZU5vZGUoJDIpOworICAgICAgICBQQVJTRVItPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKICAgICB9
CiAgICAgOwogCislJQogCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhWYWx1ZS5jcHAJ
KHJldmlzaW9uIDE0NzE3KQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw2MSArMjUsNTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiWFBhdGhWYWx1ZS5oIgogCiAjaWYgWFBBVEhfU1VQUE9SVAogCi0jaW5j
bHVkZSAiWFBhdGhWYWx1ZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgotCi0jaWZkZWYgX01T
Q19WRVIgLy8gbWF0aCBmdW5jdGlvbnMgbWlzc2luZyBmcm9tIE1pY3Jvc29mdCBWaXN1YWwgU3R1
ZGlvIHN0YW5kYXJkIEMgbGlicmFyeQotI2luY2x1ZGUgPHhtYXRoLmg+Ci0jZGVmaW5lIGlzbmFu
KHgpIF9pc25hbih4KQotI2RlZmluZSBpc2luZih4KSAhX2Zpbml0ZSh4KQotI2RlZmluZSBzaWdu
Yml0KHgpIChfY29weXNpZ24oMS4wLCAoeCkpIDwgMCkKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBuYW1lc3BhY2UgWFBhdGggewogCiBWYWx1ZTo6VmFsdWUoKQotICAgIDogbV90eXBl
KEJvb2xlYW4pLCBtX2Jvb2woZmFsc2UpCisgICAgOiBtX3R5cGUoQm9vbGVhblZhbHVlKSwgbV9i
b29sKGZhbHNlKQogewogfQogCiBWYWx1ZTo6VmFsdWUoTm9kZSogdmFsdWUpCi0gICAgOiBtX3R5
cGUoTm9kZVZlY3Rvcl8pCisgICAgOiBtX3R5cGUoTm9kZVZlY3RvclZhbHVlKQogewogICAgIG1f
bm9kZVZlY3Rvci5hcHBlbmQodmFsdWUpOwogfQogCiBWYWx1ZTo6VmFsdWUoY29uc3QgTm9kZVZl
Y3RvciYgdmFsdWUpCi0gICAgOiBtX3R5cGUoTm9kZVZlY3Rvcl8pLCBtX25vZGVWZWN0b3IodmFs
dWUpCisgICAgOiBtX3R5cGUoTm9kZVZlY3RvclZhbHVlKSwgbV9ub2RlVmVjdG9yKHZhbHVlKQog
ewogfQogCiBWYWx1ZTo6VmFsdWUoYm9vbCB2YWx1ZSkKLSAgICA6IG1fdHlwZShCb29sZWFuKSwg
bV9ib29sKHZhbHVlKQorICAgIDogbV90eXBlKEJvb2xlYW5WYWx1ZSksIG1fYm9vbCh2YWx1ZSkK
IHsKIH0KIAogVmFsdWU6OlZhbHVlKHVuc2lnbmVkIHZhbHVlKQotICAgIDogbV90eXBlKE51bWJl
ciksIG1fbnVtYmVyKHZhbHVlKQorICAgIDogbV90eXBlKE51bWJlclZhbHVlKSwgbV9udW1iZXIo
dmFsdWUpCiB7CiB9CiAKIFZhbHVlOjpWYWx1ZSh1bnNpZ25lZCBsb25nIHZhbHVlKQotICAgIDog
bV90eXBlKE51bWJlciksIG1fbnVtYmVyKHZhbHVlKQorICAgIDogbV90eXBlKE51bWJlclZhbHVl
KSwgbV9udW1iZXIodmFsdWUpCiB7CiB9CiAKIFZhbHVlOjpWYWx1ZShkb3VibGUgdmFsdWUpCi0g
ICAgOiBtX3R5cGUoTnVtYmVyKSwgbV9udW1iZXIodmFsdWUpCisgICAgOiBtX3R5cGUoTnVtYmVy
VmFsdWUpLCBtX251bWJlcih2YWx1ZSkKIHsKIH0KIAogVmFsdWU6OlZhbHVlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgOiBtX3R5cGUoU3RyaW5nXyksIG1fc3RyaW5nKHZhbHVlKQorICAgIDog
bV90eXBlKFN0cmluZ1ZhbHVlKSwgbV9zdHJpbmcodmFsdWUpCiB7CiB9CiAKQEAgLTkxLDQ4ICs4
NCw1MCBAQAogYm9vbCBWYWx1ZTo6dG9Cb29sZWFuKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewotICAgICAgICBjYXNlIE5vZGVWZWN0b3JfOgorICAgICAgICBjYXNlIE5vZGVWZWN0
b3JWYWx1ZToKICAgICAgICAgICAgIHJldHVybiAhbV9ub2RlVmVjdG9yLmlzRW1wdHkoKTsKLSAg
ICAgICAgY2FzZSBCb29sZWFuOgorICAgICAgICBjYXNlIEJvb2xlYW5WYWx1ZToKICAgICAgICAg
ICAgIHJldHVybiBtX2Jvb2w7Ci0gICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICBjYXNlIE51
bWJlclZhbHVlOgogICAgICAgICAgICAgcmV0dXJuIG1fbnVtYmVyICE9IDA7Ci0gICAgICAgIGNh
c2UgU3RyaW5nXzoKKyAgICAgICAgY2FzZSBTdHJpbmdWYWx1ZToKICAgICAgICAgICAgIHJldHVy
biAhbV9zdHJpbmcuaXNFbXB0eSgpOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGRvdWJsZSBWYWx1ZTo6dG9OdW1iZXIoKSBjb25zdAog
ewogICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgTm9kZVZlY3Rvcl86CisgICAg
ICAgIGNhc2UgTm9kZVZlY3RvclZhbHVlOgogICAgICAgICAgICAgcmV0dXJuIFZhbHVlKHRvU3Ry
aW5nKCkpLnRvTnVtYmVyKCk7Ci0gICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICBjYXNlIE51
bWJlclZhbHVlOgogICAgICAgICAgICAgcmV0dXJuIG1fbnVtYmVyOwotICAgICAgICBjYXNlIFN0
cmluZ186IHsKKyAgICAgICAgY2FzZSBTdHJpbmdWYWx1ZTogewogICAgICAgICAgICAgYm9vbCBj
YW5Db252ZXJ0OwogICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gbV9zdHJpbmcuZGVwcmVjYXRl
ZFN0cmluZygpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLnRvRG91YmxlKCZjYW5Db252ZXJ0KTsKICAg
ICAgICAgICAgIGlmIChjYW5Db252ZXJ0KQogICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK
ICAgICAgICAgICAgIHJldHVybiBOQU47CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBCb29sZWFu
OgorICAgICAgICBjYXNlIEJvb2xlYW5WYWx1ZToKICAgICAgICAgICAgIHJldHVybiBtX2Jvb2w7
CiAgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwLjA7CiB9CiAK
IFN0cmluZyBWYWx1ZTo6dG9TdHJpbmcoKSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgICAgIGNhc2UgTm9kZVZlY3Rvcl86CisgICAgICAgIGNhc2UgTm9kZVZlY3RvclZhbHVl
OgogICAgICAgICAgICAgaWYgKG1fbm9kZVZlY3Rvci5pc0VtcHR5KCkpIAogICAgICAgICAgICAg
ICAgIHJldHVybiAiIjsKICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShtX25vZGVWZWN0
b3JbMF0uZ2V0KCkpOwotICAgICAgICBjYXNlIFN0cmluZ186CisgICAgICAgIGNhc2UgU3RyaW5n
VmFsdWU6CiAgICAgICAgICAgICByZXR1cm4gbV9zdHJpbmc7Ci0gICAgICAgIGNhc2UgTnVtYmVy
OgorICAgICAgICBjYXNlIE51bWJlclZhbHVlOgogICAgICAgICAgICAgaWYgKGlzbmFuKG1fbnVt
YmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gIk5hTiI7CiAgICAgICAgICAgICBpZiAobV9u
dW1iZXIgPT0gMCkKQEAgLTE0MCwxMyArMTM1LDE0IEBACiAgICAgICAgICAgICBpZiAoaXNpbmYo
bV9udW1iZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBzaWduYml0KG1fbnVtYmVyKSA/ICIt
SW5maW5pdHkiIDogIkluZmluaXR5IjsKICAgICAgICAgICAgIHJldHVybiBTdHJpbmc6Om51bWJl
cihtX251bWJlcik7Ci0gICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgY2FzZSBCb29sZWFu
VmFsdWU6CiAgICAgICAgICAgICByZXR1cm4gbV9ib29sID8gInRydWUiIDogImZhbHNlIjsKICAg
ICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
CiB9CiB9CiAKLSNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQorI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9Y
UGF0aFV0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFV0aWwu
Y3BwCShyZXZpc2lvbiAxNDcxNykKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFV0aWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTIgQEAKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgog
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWFBhdGhV
dGlsLmgiCiAKICNpZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0aFV0aWwuaCIKICNp
bmNsdWRlICJOb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc4LDQgKzc5LDMgQEAK
IH0KIAogI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKLQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBs
L1hQYXRoRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRo
RnVuY3Rpb25zLmgJKHJldmlzaW9uIDE0NzE3KQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRo
RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIFhQYXRoRnVuY3Rpb25zX0gKICNk
ZWZpbmUgWFBhdGhGdW5jdGlvbnNfSAogCkBAIC0zMCw0OSArMzEsMzAgQEAKIAogI2luY2x1ZGUg
IlhQYXRoRXhwcmVzc2lvbk5vZGUuaCIKIAotI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKLQotI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFj
ZSBYUGF0aCB7Ci0gICAgCi1jbGFzcyBGdW5jdGlvbiA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRBcmd1bWVudHMoY29uc3QgVmVjdG9yPEV4cHJlc3Npb24qPiYp
OwotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKIAotcHJvdGVjdGVkOgotICAgIEV4
cHJlc3Npb24qIGFyZyhpbnQgcG9zKTsKLSAgICBjb25zdCBFeHByZXNzaW9uKiBhcmcoaW50IHBv
cykgY29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IGFyZ0NvdW50KCkgY29uc3Q7Ci0gICAgU3RyaW5n
IG5hbWUoKSBjb25zdDsKKyAgICBuYW1lc3BhY2UgWFBhdGggewogCi1wcml2YXRlOgotICAgIFN0
cmluZyBtX25hbWU7Ci19OworICAgICAgICBjbGFzcyBGdW5jdGlvbiA6IHB1YmxpYyBFeHByZXNz
aW9uIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdm9pZCBzZXRBcmd1bWVudHMoY29u
c3QgVmVjdG9yPEV4cHJlc3Npb24qPiYpOworICAgICAgICAgICAgdm9pZCBzZXROYW1lKGNvbnN0
IFN0cmluZyYpOwogCi1jbGFzcyBGdW5jdGlvbkxpYnJhcnkKLXsKLSAgICBmcmllbmQgc3RydWN0
IEZ1bmN0aW9uTWFwcGluZzsKLXB1YmxpYzoKLSAgICBzdGF0aWMgRnVuY3Rpb25MaWJyYXJ5ICZz
ZWxmKCk7CisgICAgICAgIHByb3RlY3RlZDoKKyAgICAgICAgICAgIEV4cHJlc3Npb24qIGFyZyhp
bnQgcG9zKTsKKyAgICAgICAgICAgIGNvbnN0IEV4cHJlc3Npb24qIGFyZyhpbnQgcG9zKSBjb25z
dDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdDb3VudCgpIGNvbnN0OworICAgICAgICAg
ICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKIAotICAgIEZ1bmN0aW9uKiBjcmVhdGVGdW5jdGlvbihj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvbio+ICZhcmdzID0gVmVjdG9y
PEV4cHJlc3Npb24qPigpKSBjb25zdDsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIFN0
cmluZyBtX25hbWU7CisgICAgICAgIH07CiAKLXByaXZhdGU6Ci0gICAgc3RydWN0IEZ1bmN0aW9u
UmVjOworICAgICAgICBGdW5jdGlvbiogY3JlYXRlRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvbio+JiBhcmdzID0gVmVjdG9yPEV4cHJlc3Npb24qPigp
KTsKIAotICAgIEZ1bmN0aW9uTGlicmFyeSgpOwotICAgIEZ1bmN0aW9uTGlicmFyeShjb25zdCBG
dW5jdGlvbkxpYnJhcnkgJnJocyk7Ci0gICAgRnVuY3Rpb25MaWJyYXJ5ICZvcGVyYXRvcj0oY29u
c3QgRnVuY3Rpb25MaWJyYXJ5ICZyaHMpOworICAgIH0KIAotICAgIEhhc2hNYXA8U3RyaW5nLCBG
dW5jdGlvblJlYz4gbV9mdW5jdGlvbkRpY3Q7Ci19OwotCiB9Ci19CiAKICNlbmRpZiAvLyBYUEFU
SF9TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFN0ZXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhTdGVwLmgJKHJldmlzaW9uIDE0NzE3KQor
KysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoU3RlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIHN0ZXAuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJh
YWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0yMyw1NiArMjMsNTUgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLworCiAjaWZuZGVmIFhQYXRoU3RlcF9ICiAjZGVmaW5lIFhQYXRoU3RlcF9ICiAK
ICNpZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0aFByZWRpY2F0ZS5oIgorI2luY2x1
ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJYUGF0aEV4cHJlc3Npb25Ob2RlLmgiCiAjaW5jbHVkZSAi
WFBhdGhVdGlsLmgiCiAKLSNpbmNsdWRlICJOb2RlLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LW5hbWVzcGFjZSBYUGF0aCB7CisKKyAgICBuYW1lc3BhY2UgWFBhdGggeworCisgICAgICAgIGNs
YXNzIFByZWRpY2F0ZTsKICAgICAgICAgCi1jbGFzcyBTdGVwIDogcHVibGljIFBhcnNlTm9kZQot
ewotcHVibGljOgotICAgIGVudW0gQXhpc1R5cGUgewotICAgICAgICBBbmNlc3RvckF4aXM9MSwg
QW5jZXN0b3JPclNlbGZBeGlzLCBBdHRyaWJ1dGVBeGlzLAotICAgICAgICBDaGlsZEF4aXMsIERl
c2NlbmRhbnRBeGlzLCBEZXNjZW5kYW50T3JTZWxmQXhpcywKLSAgICAgICAgRm9sbG93aW5nQXhp
cywgRm9sbG93aW5nU2libGluZ0F4aXMsIE5hbWVzcGFjZUF4aXMsCi0gICAgICAgIFBhcmVudEF4
aXMsIFByZWNlZGluZ0F4aXMsIFByZWNlZGluZ1NpYmxpbmdBeGlzLAotICAgICAgICBTZWxmQXhp
cwotICAgIH07CisgICAgICAgIGNsYXNzIFN0ZXAgOiBwdWJsaWMgUGFyc2VOb2RlLCBOb25jb3B5
YWJsZSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGVudW0gQXhpcyB7CisgICAgICAg
ICAgICAgICAgQW5jZXN0b3JBeGlzLCBBbmNlc3Rvck9yU2VsZkF4aXMsIEF0dHJpYnV0ZUF4aXMs
CisgICAgICAgICAgICAgICAgQ2hpbGRBeGlzLCBEZXNjZW5kYW50QXhpcywgRGVzY2VuZGFudE9y
U2VsZkF4aXMsCisgICAgICAgICAgICAgICAgRm9sbG93aW5nQXhpcywgRm9sbG93aW5nU2libGlu
Z0F4aXMsIE5hbWVzcGFjZUF4aXMsCisgICAgICAgICAgICAgICAgUGFyZW50QXhpcywgUHJlY2Vk
aW5nQXhpcywgUHJlY2VkaW5nU2libGluZ0F4aXMsCisgICAgICAgICAgICAgICAgU2VsZkF4aXMK
KyAgICAgICAgICAgIH07CiAKLSAgICBzdGF0aWMgU3RyaW5nIGF4aXNBc1N0cmluZyhBeGlzVHlw
ZSBheGlzKTsKKyAgICAgICAgICAgIFN0ZXAoQXhpcywgY29uc3QgU3RyaW5nJiBub2RlVGVzdCwg
Y29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVkaWNhdGVzID0gVmVjdG9yPFByZWRpY2F0ZSo+
KCkpOworICAgICAgICAgICAgflN0ZXAoKTsKIAotICAgIFN0ZXAoKTsKLSAgICBTdGVwKEF4aXNU
eXBlIGF4aXMsIGNvbnN0IFN0cmluZyYgbm9kZVRlc3QsIGNvbnN0IFZlY3RvcjxQcmVkaWNhdGUq
PiAmcHJlZGljYXRlcyA9IFZlY3RvcjxQcmVkaWNhdGUqPigpKTsKLSAgICB+U3RlcCgpOworICAg
ICAgICAgICAgTm9kZVZlY3RvciBldmFsdWF0ZShOb2RlKiBjb250ZXh0KSBjb25zdDsKIAotICAg
IE5vZGVWZWN0b3IgZXZhbHVhdGUoTm9kZSogY29udGV4dCkgY29uc3Q7CisgICAgICAgICAgICB2
b2lkIG9wdGltaXplKCk7CiAKLSAgICB2b2lkIG9wdGltaXplKCk7CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBOb2RlVmVjdG9yIG5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQpIGNvbnN0
OworICAgICAgICAgICAgTm9kZVZlY3RvciBub2RlVGVzdE1hdGNoZXMoY29uc3QgTm9kZVZlY3Rv
ciYgbm9kZXMpIGNvbnN0OworICAgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZUZyb21Ob2RldGVz
dChjb25zdCBTdHJpbmcmIG5vZGVUZXN0KSBjb25zdDsKKyAgICAgICAgICAgIE5vZGU6Ok5vZGVU
eXBlIHByaW1hcnlOb2RlVHlwZShBeGlzKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBOb2RlVmVj
dG9yIG5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQpIGNvbnN0OwotICAgIE5vZGVWZWN0b3Igbm9k
ZVRlc3RNYXRjaGVzKGNvbnN0IE5vZGVWZWN0b3ImIG5vZGVzKSBjb25zdDsKLSAgICBTdHJpbmcg
bmFtZXNwYWNlRnJvbU5vZGV0ZXN0KGNvbnN0IFN0cmluZyYgbm9kZVRlc3QpIGNvbnN0OwotICAg
IE5vZGU6Ok5vZGVUeXBlIHByaW1hcnlOb2RlVHlwZShBeGlzVHlwZSBheGlzKSBjb25zdDsKKyAg
ICAgICAgICAgIEF4aXMgbV9heGlzOworICAgICAgICAgICAgU3RyaW5nIG1fbm9kZVRlc3Q7Cisg
ICAgICAgICAgICBTdHJpbmcgbV9uYW1lc3BhY2VVUkk7CisgICAgICAgICAgICBWZWN0b3I8UHJl
ZGljYXRlKj4gbV9wcmVkaWNhdGVzOworICAgICAgICB9OwogCi0gICAgQXhpc1R5cGUgbV9heGlz
OwotICAgIFN0cmluZyBtX25vZGVUZXN0OwotICAgIFN0cmluZyBtX25hbWVzcGFjZVVSSTsKLSAg
ICBWZWN0b3I8UHJlZGljYXRlKj4gbV9wcmVkaWNhdGVzOwotfTsKKyAgICB9CiAKIH0KLX0KIAog
I2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKIAogI2VuZGlmIC8vIFhQYXRoX1N0ZXBfSAotCkluZGV4
OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eHBhdGgvaW1wbC9YUGF0aFZhbHVlLmgJKHJldmlzaW9uIDE0NzE3KQorKysgV2ViQ29yZS94cGF0
aC9pbXBsL1hQYXRoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiB1dGlsLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgor
ICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MjMsNTMgKzIzLDU1IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwog
I2lmbmRlZiBYUGF0aFZhbHVlX0gKICNkZWZpbmUgWFBhdGhWYWx1ZV9ICiAKICNpZiBYUEFUSF9T
VVBQT1JUCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlhQYXRoVXRp
bC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgWFBhdGggeworCisgICAgbmFt
ZXNwYWNlIFhQYXRoIHsKICAgICAKLWNsYXNzIFZhbHVlIHsKLXB1YmxpYzoKLSAgICBlbnVtIFR5
cGUgeyBOb2RlVmVjdG9yXywgQm9vbGVhbiwgTnVtYmVyLCBTdHJpbmdfIH07Ci0gICAgCi0gICAg
VmFsdWUoKTsKLSAgICBWYWx1ZShOb2RlKik7Ci0gICAgVmFsdWUoY29uc3QgTm9kZVZlY3RvciYp
OwotICAgIFZhbHVlKGJvb2wpOwotICAgIFZhbHVlKHVuc2lnbmVkKTsKLSAgICBWYWx1ZSh1bnNp
Z25lZCBsb25nKTsKLSAgICBWYWx1ZShkb3VibGUpOwotICAgIFZhbHVlKGNvbnN0IFN0cmluZyYp
OwotICAgIAotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAg
ICBjbGFzcyBWYWx1ZSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGVudW0gVHlwZSB7
IE5vZGVWZWN0b3JWYWx1ZSwgQm9vbGVhblZhbHVlLCBOdW1iZXJWYWx1ZSwgU3RyaW5nVmFsdWUg
fTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFsdWUoKTsKKyAgICAgICAgICAgIFZhbHVl
KE5vZGUqKTsKKyAgICAgICAgICAgIFZhbHVlKGNvbnN0IE5vZGVWZWN0b3ImKTsKKyAgICAgICAg
ICAgIFZhbHVlKGJvb2wpOworICAgICAgICAgICAgVmFsdWUodW5zaWduZWQpOworICAgICAgICAg
ICAgVmFsdWUodW5zaWduZWQgbG9uZyk7CisgICAgICAgICAgICBWYWx1ZShkb3VibGUpOworICAg
ICAgICAgICAgVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCi0gICAgYm9vbCBpc05vZGVW
ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gTm9kZVZlY3Rvcl87IH0KLSAgICBib29s
IGlzQm9vbGVhbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBCb29sZWFuOyB9Ci0gICAgYm9v
bCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBOdW1iZXI7IH0KLSAgICBib29s
IGlzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFN0cmluZ187IH0KKyAgICAgICAg
ICAgIGJvb2wgaXNOb2RlVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IE5vZGVWZWN0
b3JWYWx1ZTsgfQorICAgICAgICAgICAgYm9vbCBpc0Jvb2xlYW4oKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gQm9vbGVhblZhbHVlOyB9CisgICAgICAgICAgICBib29sIGlzTnVtYmVyKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlID09IE51bWJlclZhbHVlOyB9CisgICAgICAgICAgICBib29sIGlz
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFN0cmluZ1ZhbHVlOyB9CiAKLSAgICBj
b25zdCBOb2RlVmVjdG9yJiB0b05vZGVWZWN0b3IoKSBjb25zdDsgICAgCi0gICAgYm9vbCB0b0Jv
b2xlYW4oKSBjb25zdDsKLSAgICBkb3VibGUgdG9OdW1iZXIoKSBjb25zdDsKLSAgICBTdHJpbmcg
dG9TdHJpbmcoKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgVHlwZSBtX3R5cGU7Ci0gICAg
Tm9kZVZlY3RvciBtX25vZGVWZWN0b3I7Ci0gICAgYm9vbCBtX2Jvb2w7Ci0gICAgZG91YmxlIG1f
bnVtYmVyOwotICAgIFN0cmluZyBtX3N0cmluZzsKLX07CisgICAgICAgICAgICBjb25zdCBOb2Rl
VmVjdG9yJiB0b05vZGVWZWN0b3IoKSBjb25zdDsgICAgCisgICAgICAgICAgICBib29sIHRvQm9v
bGVhbigpIGNvbnN0OworICAgICAgICAgICAgZG91YmxlIHRvTnVtYmVyKCkgY29uc3Q7CisgICAg
ICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICAgICAgICAgIAorICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgICAgICBOb2RlVmVjdG9y
IG1fbm9kZVZlY3RvcjsKKyAgICAgICAgICAgIGJvb2wgbV9ib29sOworICAgICAgICAgICAgZG91
YmxlIG1fbnVtYmVyOworICAgICAgICAgICAgU3RyaW5nIG1fc3RyaW5nOworICAgICAgICB9Owog
CisgICAgfQogfQotfQogCiAjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAogCiAjZW5kaWYgLy8gWFBh
dGhfVmFsdWVfSAotCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhVdGlsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVXRpbC5oCShyZXZpc2lvbiAxNDcxNykK
KysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFV0aWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiB1dGlsLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxy
YWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjMsMzkgKzIzLDM2IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KKwogI2lmbmRlZiBYUGF0aFV0aWxfSAogI2RlZmluZSBYUGF0aFV0aWxfSAog
CiAjaWYgWFBBVEhfU1VQUE9SVAogCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlICJOb2RlLmgiCi0KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotbmFtZXNwYWNlIFhQYXRoIHsKKyAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIFN0
cmluZzsKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gTm9kZVZlY3RvcjsKLSAgICAK
LS8qIEByZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBpcyB0aGUgcm9vdCBub2RlLgotICov
Ci1ib29sIGlzUm9vdERvbU5vZGUoTm9kZSogbm9kZSk7CisgICAgbmFtZXNwYWNlIFhQYXRoIHsK
IAotLyogQHJldHVybiB0aGUgJ3N0cmluZy12YWx1ZScgb2YgdGhlIGdpdmVuIG5vZGUgYXMgc3Bl
Y2lmaWVkIGJ5Ci0gICBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aAotICovCi1TdHJpbmcgc3Ry
aW5nVmFsdWUoTm9kZSogbm9kZSk7CisgICAgICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxOb2Rl
PiA+IE5vZGVWZWN0b3I7CisgICAgICAgIAorICAgICAgICAvKiBAcmV0dXJuIHdoZXRoZXIgdGhl
IGdpdmVuIG5vZGUgaXMgdGhlIHJvb3Qgbm9kZSAqLworICAgICAgICBib29sIGlzUm9vdERvbU5v
ZGUoTm9kZSopOwogCi0vKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgaXMgYSB2YWxp
ZCBjb250ZXh0IG5vZGUKLSAqLwotYm9vbCBpc1ZhbGlkQ29udGV4dE5vZGUoTm9kZSogbm9kZSk7
CisgICAgICAgIC8qIEByZXR1cm4gdGhlICdzdHJpbmctdmFsdWUnIG9mIHRoZSBnaXZlbiBub2Rl
IGFzIHNwZWNpZmllZCBieSBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCAqLworICAgICAgICBT
dHJpbmcgc3RyaW5nVmFsdWUoTm9kZSopOwogCisgICAgICAgIC8qIEByZXR1cm4gd2hldGhlciB0
aGUgZ2l2ZW4gbm9kZSBpcyBhIHZhbGlkIGNvbnRleHQgbm9kZSAqLworICAgICAgICBib29sIGlz
VmFsaWRDb250ZXh0Tm9kZShOb2RlKik7CisKKyAgICB9CisKIH0KLX0KIAogI2VuZGlmIC8vIFhQ
QVRIX1NVUFBPUlQKIAogI2VuZGlmIC8vIFhQYXRoX1V0aWxfSAotCkluZGV4OiBXZWJDb3JlL3hw
YXRoL1hQYXRoUmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoUmVz
dWx0LmNwcAkocmV2aXNpb24gMTQ3MTcpCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTkgKzIzLDE3IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
ICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhQYXRo
UmVzdWx0LmgiCiAKICNpZiBYUEFUSF9TVVBQT1JUCiAKLSNpbmNsdWRlICJYUGF0aFJlc3VsdC5o
IgotI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXROb2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDMsMzggKzQxLDM2IEBACiAKIGNsYXNzIEludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXIg
OiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6Ci0gICAgSW52YWxpZGF0aW5nRXZlbnRM
aXN0ZW5lcihFdmVudFRhcmdldE5vZGUqIG5vZGUsIFhQYXRoUmVzdWx0KiByZXN1bHQpIAotICAg
ICAgICA6IG1fbm9kZShub2RlKSwgbV9yZXN1bHQocmVzdWx0KSB7IH0KLSAgICAKKyAgICBJbnZh
bGlkYXRpbmdFdmVudExpc3RlbmVyKFhQYXRoUmVzdWx0KiByZXN1bHQpIDogbV9yZXN1bHQocmVz
dWx0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqLCBib29sKSB7IG1f
cmVzdWx0LT5pbnZhbGlkYXRlSXRlcmF0b3JTdGF0ZSgpOyB9CiBwcml2YXRlOgotICAgIEV2ZW50
VGFyZ2V0Tm9kZSogbV9ub2RlOwogICAgIFhQYXRoUmVzdWx0KiBtX3Jlc3VsdDsKIH07CiAKLVhQ
YXRoUmVzdWx0OjpYUGF0aFJlc3VsdChFdmVudFRhcmdldE5vZGUqIGV2ZW50VGFyZ2V0LCBjb25z
dCBWYWx1ZSAmdmFsdWUpCitYUGF0aFJlc3VsdDo6WFBhdGhSZXN1bHQoRXZlbnRUYXJnZXROb2Rl
KiBldmVudFRhcmdldCwgY29uc3QgVmFsdWUmIHZhbHVlKQogICAgIDogbV92YWx1ZSh2YWx1ZSkK
ICAgICAsIG1fZXZlbnRUYXJnZXQoZXZlbnRUYXJnZXQpCiB7Ci0gICAgbV9ldmVudExpc3RlbmVy
ID0gbmV3IEludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXIobV9ldmVudFRhcmdldC5nZXQoKSwgdGhp
cyk7CisgICAgbV9ldmVudExpc3RlbmVyID0gbmV3IEludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXIo
dGhpcyk7CiAgICAgbV9ldmVudFRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpE
T01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgbV9ldmVudExpc3RlbmVyLCBmYWxzZSk7Ci0gICAgICAg
IAogICAgIHN3aXRjaCAobV92YWx1ZS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBWYWx1ZTo6Qm9v
bGVhbjoKKyAgICAgICAgY2FzZSBWYWx1ZTo6Qm9vbGVhblZhbHVlOgogICAgICAgICAgICAgbV9y
ZXN1bHRUeXBlID0gQk9PTEVBTl9UWVBFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgVmFsdWU6Ok51bWJlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBWYWx1
ZTo6TnVtYmVyVmFsdWU6CiAgICAgICAgICAgICBtX3Jlc3VsdFR5cGUgPSBOVU1CRVJfVFlQRTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZhbHVlOjpTdHJpbmdfOgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFZhbHVlOjpTdHJpbmdWYWx1ZToKICAgICAgICAg
ICAgIG1fcmVzdWx0VHlwZSA9IFNUUklOR19UWVBFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgVmFsdWU6Ok5vZGVWZWN0b3JfOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIFZhbHVlOjpOb2RlVmVjdG9yVmFsdWU6CiAgICAgICAgICAgICBtX3Jlc3VsdFR5cGUg
PSBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFOwogICAgICAgICAgICAgbV9ub2RlU2V0UG9z
aXRpb24gPSAwOwogICAgICAgICAgICAgbV9ub2RlU2V0ID0gbV92YWx1ZS50b05vZGVWZWN0b3Io
KTsKICAgICAgICAgICAgIG1faW52YWxpZEl0ZXJhdG9yU3RhdGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFhQYXRo
UmVzdWx0Ojp+WFBhdGhSZXN1bHQoKQpAQCAtMTQ4LDggKzE0NCw3IEBACiAKIE5vZGUqIFhQYXRo
UmVzdWx0OjpzaW5nbGVOb2RlVmFsdWUoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAg
aWYgKHJlc3VsdFR5cGUoKSAhPSBBTllfVU5PUkRFUkVEX05PREVfVFlQRSAmJgotICAgICAgICAg
cmVzdWx0VHlwZSgpICE9IEZJUlNUX09SREVSRURfTk9ERV9UWVBFKSB7CisgICAgaWYgKHJlc3Vs
dFR5cGUoKSAhPSBBTllfVU5PUkRFUkVEX05PREVfVFlQRSAmJiByZXN1bHRUeXBlKCkgIT0gRklS
U1RfT1JERVJFRF9OT0RFX1RZUEUpIHsKICAgICAgICAgZWMgPSBUWVBFX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQpAQCAtMTc1LDggKzE3MCw3IEBACiAKIGJvb2wgWFBhdGhSZXN1bHQ6
OmludmFsaWRJdGVyYXRvclN0YXRlKCkgY29uc3QKIHsKLSAgICBpZiAocmVzdWx0VHlwZSgpICE9
IFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgJiYKLSAgICAgICAgcmVzdWx0VHlwZSgpICE9
IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFKQorICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gVU5P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAmJiByZXN1bHRUeXBlKCkgIT0gT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4g
bV9pbnZhbGlkSXRlcmF0b3JTdGF0ZTsKQEAgLTE4NCw4ICsxNzgsNyBAQAogCiB1bnNpZ25lZCBs
b25nIFhQYXRoUmVzdWx0OjpzbmFwc2hvdExlbmd0aChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
IHsKLSAgICBpZiAocmVzdWx0VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUg
JiYKLSAgICAgICAgcmVzdWx0VHlwZSgpICE9IE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKSB7
CisgICAgaWYgKHJlc3VsdFR5cGUoKSAhPSBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFICYm
IHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSkgewogICAgICAgICBl
YyA9IFRZUEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xOTUsOCArMTg4LDcg
QEAKIAogTm9kZSogWFBhdGhSZXN1bHQ6Oml0ZXJhdGVOZXh0KEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAm
JgotICAgICAgICByZXN1bHRUeXBlKCkgIT0gT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUpIHsK
KyAgICBpZiAocmVzdWx0VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgJiYg
cmVzdWx0VHlwZSgpICE9IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFKSB7CiAgICAgICAgIGVj
ID0gVFlQRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIxOCw4ICsyMTAsNyBA
QAogCiBOb2RlKiBYUGF0aFJlc3VsdDo6c25hcHNob3RJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRFUkVE
X05PREVfU05BUFNIT1RfVFlQRSAmJgotICAgICAgICAgcmVzdWx0VHlwZSgpICE9IE9SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFKSB7CisgICAgaWYgKHJlc3VsdFR5cGUoKSAhPSBVTk9SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFICYmIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRSkgewogICAgICAgICBlYyA9IFRZUEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS94cGF0aC9YUGF0aFJlc3VsdC5oCShyZXZpc2lvbiAxNDcxNykKKysrIFdlYkNvcmUveHBh
dGgvWFBhdGhSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNjkgKzIzLDcwIEBACiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBYUGF0aFJlc3VsdF9I
CiAjZGVmaW5lIFhQYXRoUmVzdWx0X0gKIAogI2lmIFhQQVRIX1NVUFBPUlQKIAogI2luY2x1ZGUg
IlNoYXJlZC5oIgotCiAjaW5jbHVkZSAiWFBhdGhWYWx1ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTm9kZTsKLWNsYXNzIEV2
ZW50VGFyZ2V0Tm9kZTsKLWNsYXNzIEV2ZW50TGlzdGVuZXI7CisgICAgdHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKIAotY2xhc3MgWFBhdGhSZXN1bHQgOiBwdWJsaWMgU2hhcmVkPFhQYXRoUmVz
dWx0PgotewotcHVibGljOgotICAgIGVudW0gWFBhdGhSZXN1bHRUeXBlIHsKLSAgICAgICAgQU5Z
X1RZUEUgPSAwLAotICAgICAgICBOVU1CRVJfVFlQRSA9IDEsCi0gICAgICAgIFNUUklOR19UWVBF
ID0gMiwKLSAgICAgICAgQk9PTEVBTl9UWVBFID0gMywKLSAgICAgICAgVU5PUkRFUkVEX05PREVf
SVRFUkFUT1JfVFlQRSA9IDQsCi0gICAgICAgIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0g
NSwKLSAgICAgICAgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDYsCi0gICAgICAgIE9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNywKLSAgICAgICAgQU5ZX1VOT1JERVJFRF9OT0RF
X1RZUEUgPSA4LAotICAgICAgICBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDkKLSAgICB9Owot
ICAgIAotICAgIFhQYXRoUmVzdWx0KEV2ZW50VGFyZ2V0Tm9kZSosIGNvbnN0IFhQYXRoOjpWYWx1
ZSYpOwotICAgIH5YUGF0aFJlc3VsdCgpOwotICAgIAotICAgIHZvaWQgY29udmVydFRvKHVuc2ln
bmVkIHNob3J0IHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBjbGFzcyBFdmVudExpc3RlbmVy
OworICAgIGNsYXNzIEV2ZW50VGFyZ2V0Tm9kZTsKKyAgICBjbGFzcyBOb2RlOworICAgIGNsYXNz
IFN0cmluZzsKIAotICAgIHVuc2lnbmVkIHNob3J0IHJlc3VsdFR5cGUoKSBjb25zdDsKKyAgICBj
bGFzcyBYUGF0aFJlc3VsdCA6IHB1YmxpYyBTaGFyZWQ8WFBhdGhSZXN1bHQ+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIGVudW0gWFBhdGhSZXN1bHRUeXBlIHsKKyAgICAgICAgICAgIEFOWV9UWVBF
ID0gMCwKKyAgICAgICAgICAgIE5VTUJFUl9UWVBFID0gMSwKKyAgICAgICAgICAgIFNUUklOR19U
WVBFID0gMiwKKyAgICAgICAgICAgIEJPT0xFQU5fVFlQRSA9IDMsCisgICAgICAgICAgICBVTk9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNCwKKyAgICAgICAgICAgIE9SREVSRURfTk9ERV9J
VEVSQVRPUl9UWVBFID0gNSwKKyAgICAgICAgICAgIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUgPSA2LAorICAgICAgICAgICAgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3LAorICAg
ICAgICAgICAgQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4LAorICAgICAgICAgICAgRklSU1Rf
T1JERVJFRF9OT0RFX1RZUEUgPSA5CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBYUGF0
aFJlc3VsdChFdmVudFRhcmdldE5vZGUqLCBjb25zdCBYUGF0aDo6VmFsdWUmKTsKKyAgICAgICAg
flhQYXRoUmVzdWx0KCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGNvbnZlcnRUbyh1bnNpZ25l
ZCBzaG9ydCB0eXBlLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBkb3VibGUgbnVtYmVyVmFsdWUo
RXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIFN0cmluZyBzdHJpbmdWYWx1ZShFeGNlcHRpb25D
b2RlJikgY29uc3Q7Ci0gICAgYm9vbCBib29sZWFuVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OwotICAgIE5vZGUqIHNpbmdsZU5vZGVWYWx1ZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHJlc3VsdFR5cGUoKSBjb25zdDsKIAotICAgIGJvb2wgaW52YWxp
ZEl0ZXJhdG9yU3RhdGUoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBsb25nIHNuYXBzaG90TGVuZ3Ro
KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBOb2RlKiBpdGVyYXRlTmV4dChFeGNlcHRpb25D
b2RlJik7Ci0gICAgTm9kZSogc25hcHNob3RJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICAgICAgZG91YmxlIG51bWJlclZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
KyAgICAgICAgYm9vbCBib29sZWFuVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgICAg
ICBOb2RlKiBzaW5nbGVOb2RlVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogCi0gICAgdm9p
ZCBpbnZhbGlkYXRlSXRlcmF0b3JTdGF0ZSgpOwotcHJpdmF0ZToKLSAgICBYUGF0aDo6VmFsdWUg
bV92YWx1ZTsKLSAgICB1bnNpZ25lZCBtX25vZGVTZXRQb3NpdGlvbjsKLSAgICBYUGF0aDo6Tm9k
ZVZlY3RvciBtX25vZGVTZXQ7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9yZXN1bHRUeXBlOwotICAg
IGJvb2wgbV9pbnZhbGlkSXRlcmF0b3JTdGF0ZTsKLSAgICBSZWZQdHI8RXZlbnRUYXJnZXROb2Rl
PiBtX2V2ZW50VGFyZ2V0OwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX2V2ZW50TGlzdGVu
ZXI7Ci19OworICAgICAgICBib29sIGludmFsaWRJdGVyYXRvclN0YXRlKCkgY29uc3Q7CisgICAg
ICAgIHVuc2lnbmVkIGxvbmcgc25hcHNob3RMZW5ndGgoRXhjZXB0aW9uQ29kZSYpIGNvbnN0Owor
ICAgICAgICBOb2RlKiBpdGVyYXRlTmV4dChFeGNlcHRpb25Db2RlJik7CisgICAgICAgIE5vZGUq
IHNuYXBzaG90SXRlbSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAKKyAg
ICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JTdGF0ZSgpOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgWFBhdGg6OlZhbHVlIG1fdmFsdWU7CisgICAgICAgIHVuc2lnbmVkIG1fbm9kZVNldFBv
c2l0aW9uOworICAgICAgICBYUGF0aDo6Tm9kZVZlY3RvciBtX25vZGVTZXQ7CisgICAgICAgIHVu
c2lnbmVkIHNob3J0IG1fcmVzdWx0VHlwZTsKKyAgICAgICAgYm9vbCBtX2ludmFsaWRJdGVyYXRv
clN0YXRlOworICAgICAgICBSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBtX2V2ZW50VGFyZ2V0Owor
ICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9ldmVudExpc3RlbmVyOworICAgIH07CisK
IH0KIAogI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKIAogI2VuZGlmIC8vIFhQYXRoUmVzdWx0X0gK
LQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE0NzE3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMzAgQEAKKzIwMDYtMDYtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0g
Zml4IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5NQor
ICAgICAgICAgIG1lbW9yeSBsZWFrIGluIFhQYXRoIGNvZGUgLS0gc2VlbiBpbiBsYXlvdXQgdGVz
dHMKKyAgICAgICAgLSBmaXhlZCBtYWxsb2MgZXJyb3Igb24gZXhpdCBkdWUgdG8gU1ZHRE9NSW1w
bGVtZW50YXRpb24gZGVzdHJ1Y3RvcgorICAgICAgICAtIGF0dGVtcHRlZCB0byBmaXggdGhlIG5v
LVhQQVRIX1NVUFBPUlQgYnVpbGQgYnkgYWRkaW5nIGFuICNpZgorICAgICAgICAtIGNoYW5nZWQg
YXJvdW5kIGluY2x1ZGVzIGFuZCBoZWFkZXItZmlsZSBmb3JtYXR0aW5nIGluIFhQYXRoIGNvZGUK
KworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOiBJbmNsdWRl
IFBsYXRmb3JtU3RyaW5nLmggd2hlbgorICAgICAgICBnZW5lcmF0aW5nIHRoZSBiaW5kaW5ncyBm
b3IgWFBhdGhOU1Jlc29sdmVyLgorCisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmg6
IEFkZGVkIGEgdmlydHVhbCBkZXN0cnVjdG9yIGZvciB0aGUgYmVuZWZpdCBvZgorICAgICAgICBT
VkdET01JbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3Bw
OiAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246On5ET01JbXBsZW1lbnRhdGlvbik6IEFkZGVk
LgorCisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0RPTUltcGxlbWVudGF0aW9uLmg6IFJlZm9ybWF0
dGVkIGEgYml0LCByZW1vdmVkIHVubmVlZGVkIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoU1ZHRE9NSW1wbGVtZW50
YXRpb246On5TVkdET01JbXBsZW1lbnRhdGlvbik6IFJlbW92ZSBjb21tZW50ZWQtb3V0IGNvZGUu
CisgICAgICAgIChTVkdET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQpOiBSZW1vdmUg
YSByZWZlcmVuY2UgdG8gS0RPTVZpZXcuCisKKyAgICAgICAgKiB4cGF0aC9YUGF0aEV4cHJlc3Np
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uOjpjcmVhdGVFeHByZXNz
aW9uKTogQ2FsbGVkIHJlbGVhc2UgdG8gYXZvaWQgYSB0aW55IGJpdCBvZgorICAgICAgICByZWZl
cmVuY2UgY291bnQgY2h1cm4uCisgICAgICAgIChXZWJDb3JlOjpYUGF0aEV4cHJlc3Npb246OmV2
YWx1YXRlKTogU2V0IGV4Y2VwdGlvbiBjb2RlIGV4cGxpY2l0bHksIGJlY2F1c2UgdGhlIGNvZGUK
KyAgICAgICAgcmVsaWVzIG9uIGl0IGJlaW5nIDAgd2hlbiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMu
CisKKyAgICAgICAgKiB4cGF0aC9YUGF0aFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnZhbGlkYXRpbmdFdmVudExpc3RlbmVyOjpJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyKTogUmVt
b3ZlZAorICAgICAgICB1bm5lZWRlZCB0YXJnZXQgbm9kZSBkYXRhIG1lbWJlci4KKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoUmVzdWx0OjpYUGF0aFJlc3VsdCk6IFVwZGF0ZWQgZm9yIGVudW0gbmFt
ZSBjaGFuZ2VzIGFuZAorICAgICAgICBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyIG5hbWUgY2hh
bmdlLiBBZGRlZCBhbiBhc3NlcnRpb24uCisKKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoRnVu
Y3Rpb25zLmg6IFJlbW92ZWQgdGhlIEZ1bmN0aW9uTGlicmFyeSBjbGFzcy4gQ2hhbmdlZCB0aGUg
cGFyYW1ldGVyCisgICAgICAgIGZvciBjcmVhdGVGdW5jdGlvbiB0byBiZSBhIFN0cmluZyBpbnN0
ZWFkIG9mIGNoYXIqLgorICAgICAgICAqIHhwYXRoL2ltcGwvWFBhdGhGdW5jdGlvbnMuY3BwOiBH
b3QgcmlkIG9mIGxvY2FsIGltcGxlbWVudGF0aW9uIG9mICJyb3VuZCIsIGFuZAorICAgICAgICB1
c2VkIDx3dGYvTWF0aEV4dHJhcy5oPiBpbnN0ZWFkLiBBbHNvIHJlbW92ZWQgdW51c2VkIEludGVy
dmFsOjphc1N0cmluZy4gTWFya2VkIGFsbAorICAgICAgICB0aGUgSW50ZXJ2YWwgZnVuY3Rpb25z
IGlubGluZS4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdWJzdHJpbmc6OmRvRXZhbHVh
dGUpOiBVc2UgbHJvdW5kKCkgaW5zdGVhZCBvZiAobG9uZylyb3VuZCgpLgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OkZ1bkxhbmc6OmRvRXZhbHVhdGUpOiBSZW1vdmVkIHNvbWUgdW5uZWVkZWQg
dGVtcG9yYXJ5IFN0cmluZyB2YXJpYWJsZXMuCisgICAgICAgIFVzZSBlcXVhbElnbm9yaW5nQ2Fz
ZSgpIGluc3RlYWQgb2YgY2FsbGluZyBsb3dlcigpIG9uIHR3byBzdHJpbmdzLgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OmNyZWF0ZUZ1bmN0aW9uTWFwKTogQ2hhbmdlZCBob3cgdGhpcyB3b3Jr
cyBzbyB0aGF0IGl0J3MgYWxsIGxvY2FsIHRvCisgICAgICAgIHRoaXMgZnVuY3Rpb24uIEFsc28g
cmVtb3ZlZCBhIGR1cGxpY2F0ZSBlbnRyeSBmb3IgdGhlICJsYXN0IiBmdW5jdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVGdW5jdGlvbik6IENoYW5nZWQgZnJvbSBhIG1lbWJl
ciBmdW5jdGlvbiB0byBhIHNlcGFyYXRlIGZ1bmN0aW9uLgorCisgICAgICAgICogeHBhdGgvaW1w
bC9YUGF0aEdyYW1tYXIueTogUHV0IFhQQVRIX1NVUFBPUlQgaWZkZWYgaW4uIFJlcGxhY2VkIDxu
dW0+IHdpdGggdmFsdWVzIG9mCisgICAgICAgIHNwZWNpZmljIHR5cGVzIChudW1vcCwgZXFvcCku
IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlIGZyb20gQXhpc1R5cGUgdG8gQXhpcy4gQ2hhbmdlZAor
ICAgICAgICB0b2tlbnMgdGhhdCB3ZXJlIGRlY2xhcmVkIGFzIDxzdHI+IGJ1dCB3ZXJlbid0IGFj
dHVhbGx5IHVzaW5nIHRoZSBzdHJpbmcgdG8gYmUKKyAgICAgICAgZGVjbGFyZWQgd2l0aCBubyB0
eXBlIChQTFVTLCBNSU5VUywgT1IsIEFORCwgRE9URE9ULCBTTEFTSFNMQVNIKS4gUmVwbGFjZWQg
dXNlIG9mCisgICAgICAgIHVucmVnaXN0ZXJTdHJpbmcsIHVucmVnaXN0ZXJQcmVkaWNhdGVWZWN0
b3IsIGFuZCB1bnJlZ2lzdGVyRXhwcmVzc2lvblZlY3RvciB0bworICAgICAgICBjYWxsIGRlbGV0
ZSBmdW5jdGlvbnMgaW5zdGVhZCB0aGF0IGJvdGggdW5yZWdpc3RlciBhbmQgZGVsZXRlLiBDaGFu
Z2UgY2FsbCBzaXRlcyBmb3IKKyAgICAgICAgY3JlYXRlRnVuY3Rpb24gdG8ganVzdCB1c2UgdGhl
IFN0cmluZywgcmVtb3ZpbmcgdGhlIGRlcHJlY2F0ZWRTdHJpbmcoKS5sYXRpbjEoKSBjYWxsCisg
ICAgICAgIHRoYXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gQWRkZWQgYSBjYWxsIHRvIHVucmVnaXN0
ZXJQYXJzZU5vZGUgdGhhdCB3YXMgbWlzc2luZyBpbiB0aGUKKyAgICAgICAgIkZpbHRlckV4cHIg
RGVzY2VuZGFudE9yU2VsZiBSZWxhdGl2ZUxvY2F0aW9uUGF0aCIgcHJvZHVjdGlvbi4KKworICAg
ICAgICAqIHhwYXRoL2ltcGwvWFBhdGhQYXJzZXIuaDogQ2hhbmdlZCBUb2tlbiB0byBob2xkIGEg
U3RyaW5nLCBTdGVwOjpBeGlzLCBOdW1lcmljT3A6Ok9wY29kZSwKKyAgICAgICAgYW5kIEVxVGVz
dE9wOjpPcGNvZGUuIFRoZSB0b2tlbiBJRCBudW1iZXIgdGVsbHMgdXMgd2hpY2ggdG8gdXNlLiBS
ZWFycmFuZ2VkIHRvIHB1dCB0aGUgcHJpdmF0ZQorICAgICAgICBwYXJ0IG9mIHRoZSBQYXJzZXIg
Y2xhc3MgbGFzdC4gTW92ZWQgYSBudW1iZXIgb2YgcHJpdmF0ZSB0aGluZ3MgaW5zaWRlIHRoZSBj
cHAgZmlsZS4KKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpjaGFyQ2F0KTogTWFkZSB0aGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24s
IGluc3RlYWQgb2YgYSBzdGF0aWMgbWVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Omlz
QXhpc05hbWUpOiBEaXR0by4gQWxzbyBwdXQgdGhlIGdsb2JhbCBheGlzIG1hcCBpbnNpZGUgdGhl
IGZ1bmN0aW9uLAorICAgICAgICBhbGxvd2luZyB1c2Ugb2YgYSBtYXAgaW5zdGVhZCBvZiBhIG1h
cCBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmlzTm9kZVR5cGVOYW1lKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjppc09wZXJhdG9yQ29udGV4dCk6
IE1hZGUgdGhpcyBjb25zdC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6Om1ha2VU
b2tlbkFuZEFkdmFuY2UpOiBHb3QgcmlkIG9mIHRoZSAiaW50IiB2ZXJzaW9uIG9mIHRoaXMuCisg
ICAgICAgIEJ5IHVzaW5nIHRoZSBhY3R1YWwgdHlwZXMsIHdlIGNhbiBzYWZlbHkgdXNlIG92ZXJs
b2FkIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjpsZXhTdHJpbmcp
OiBVc2Ugc3Vic3RyaW5nKCkgaW5zdGVhZCBvZiBkZXByZWNhdGVkU3RyaW5nKCkubWlkKCkuCisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjpsZXhOdW1iZXIpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OmxleE5DTmFtZSk6IENoYW5nZWQgdG8gcmV0dXJu
IGEgYm9vbCBhbmQgYSBTdHJpbmcgaW5zdGVhZCBvZiBhCisgICAgICAgIFRva2VuLiBUaGlzIGF2
b2lkcyB0aGUgaGFjayBvZiB1c2luZyBhIHRva2VuIHZhbHVlIG9mICJFUlJPUiArIDEiIHdoaWNo
IEkgZm91bmQgcXVpdGUKKyAgICAgICAgY29uZnVzaW5nIGFuZCBpcyBhbHNvIGEgYml0IG1vcmUg
ZXhwbGljaXQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjpsZXhRTmFtZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6bmV4dFRva2VuSW50ZXJuYWwp
OiBDaGFuZ2VkIHRvIGFkYXB0IHRvIHRoZSBjaGFuZ2VzIGFib3ZlIGFuZAorICAgICAgICB0byBy
ZW1vdmUgc29tZSB1bm5lZWRlZCBlbHNlIHN0YXRlbWVudHMuCisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6UGFyc2VyOjpsZXgpOiBDaGFuZ2VkIHRoZSBsb2dpYyB0aGF0IHNldHMgdXAgeXlsdmFs
IHRvIHVzZSB0aGUgdG9rZW4gSUQKKyAgICAgICAgdG8gZGVjaWRlIHdoYXQgdGhlIHR5cGUgaXMu
IFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSBncmFtbWFyIGV4cGVjdHMsIGFuZCByZW1vdmVzIHRoZSBu
ZWVkCisgICAgICAgIGZvciB0aGUgdG9rZW4gb2JqZWN0IHRvIHRyYWNrIHdoaWNoIHBhcnQgb2Yg
dGhlIHZhbHVlIGlzIGdvb2QgYW5kIHRoZSBuZWVkIHRvIHJlc2VydmUgMAorICAgICAgICB0byBo
YXZlIGEgc3BlY2lhbCBtZWFuaW5nLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6
cGFyc2VTdGF0ZW1lbnQpOiBBZGRlZCBjb2RlIHRvIGRlbGV0ZSB0aGUgcHJlZGljYXRlcyBhbmQg
dGhlCisgICAgICAgIGV4cHJlc3Npb25zIGluIHRoZSBwcmVkaWNhdGUgYW5kIGV4cHJlc3Npb24g
dmVjdG9ycy4gQmVmb3JlLCB3ZSB3ZXJlIG9ubHkgZGVsZXRpbmcKKyAgICAgICAgdGhlIHZlY3Rv
cnMuIFRoaXMgd2FzIHRoZSBzb3VyY2Ugb2YgdGhlIHN0b3JhZ2UgbGVhay4KKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpQYXJzZXI6OmRlbGV0ZVByZWRpY2F0ZVZlY3Rvcik6IFJlbmFtZWQsIGFu
ZCBjaGFuZ2VkIHRvIGRlbGV0ZQorICAgICAgICB0aGUgdmVjdG9yLiBIb3dldmVyIHRoaXMgZG9l
cyBub3QgZGVsZXRlIHRoZSBwcmVkaWNhdGVzIGluIHRoZSB2ZWN0b3IuCisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6UGFyc2VyOjpkZWxldGVFeHByZXNzaW9uVmVjdG9yKTogUmVuYW1lZCwgYW5k
IGNoYW5nZWQgdG8gZGVsZXRlCisgICAgICAgIHRoZSB2ZWN0b3IuIEhvd2V2ZXIgdGhpcyBkb2Vz
IG5vdCBkZWxldGUgdGhlIGV4cHJlc3Npb25zIGluIHRoZSB2ZWN0b3IuCisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6UGFyc2VyOjpkZWxldGVTdHJpbmcpOiBSZW5hbWVkLCBhbmQgY2hhbmdlZCB0
byBkZWxldGUgdGhlIHN0cmluZy4KKworICAgICAgICAqIHhwYXRoL2ltcGwvWFBhdGhQcmVkaWNh
dGUuaDoKKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoUHJlZGljYXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpOdW1lcmljT3A6Ok51bWVyaWNPcCk6IENoYW5nZWQgb3Bjb2RlIGZy
b20gYW4gaW50IHRvIGFuIGVudW0sIGFuZAorICAgICAgICByZW5hbWVkIHRvICJvcGNvZGUiIGlu
c3RlYWQgb2YgIm9wQ29kZSIuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVtZXJpY09wOjpk
b0V2YWx1YXRlKTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpF
cVRlc3RPcDo6RXFUZXN0T3ApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFcVRl
c3RPcDo6ZG9FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvZ2lj
YWxPcDo6TG9naWNhbE9wKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9naWNh
bE9wOjpzaG9ydENpcmN1aXRPbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBy
ZWRpY2F0ZTo6ZXZhbHVhdGUpOiBSZW1vdmVkIGFuIHVubmVlZGVkICJuZXciLgorCisgICAgICAg
ICogeHBhdGgvaW1wbC9YUGF0aFN0ZXAuaDoKKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoU3Rl
cC5jcHA6IFJlbmFtZWQgQXhpc1R5cGUgdG8gQXhpcy4gUmVtb3ZlZCB1bnVzZWQgYXhpc0FzU3Ry
aW5nCisgICAgICAgIGZ1bmN0aW9uIGFuZCBkZWZhdWx0IGNvbnN0cnVjdG9yLgorCisgICAgICAg
ICogeHBhdGgvaW1wbC9YUGF0aFZhbHVlLmg6IFJlbmFtZWQgdGhlIHR5cGUgY29uc3RhbnRzIHRv
IGhhdmUgYSBWYWx1ZSBzdWZmaXgsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIHVuZGVyc2NvcmUg
c3VmZml4IHVzZWQgYmVmb3JlIG9uIE5vZGVWZWN0b3IgYW5kIFN0cmluZy4KKyAgICAgICAgKiB4
cGF0aC9pbXBsL1hQYXRoVmFsdWUuY3BwOiBVcGRhdGVkIGZvciBuYW1lIGNoYW5nZS4gQWRkZWQg
YXNzZXJ0cy4KKworICAgICAgICAqIHhwYXRoL2ltcGwvWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5j
cHA6IChXZWJDb3JlOjpYUGF0aDo6VmFyaWFibGVSZWZlcmVuY2U6OmRvRXZhbHVhdGUpOgorICAg
ICAgICBVc2UgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisKKyAgICAgICAgKiB4
cGF0aC9YUGF0aEV2YWx1YXRvci5jcHA6CisgICAgICAgICogeHBhdGgvWFBhdGhFdmFsdWF0b3Iu
aDoKKyAgICAgICAgKiB4cGF0aC9YUGF0aEV4cHJlc3Npb24uaDoKKyAgICAgICAgKiB4cGF0aC9Y
UGF0aE5TUmVzb2x2ZXIuY3BwOgorICAgICAgICAqIHhwYXRoL1hQYXRoTlNSZXNvbHZlci5oOgor
ICAgICAgICAqIHhwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcDoKKyAgICAgICAgKiB4cGF0aC9YUGF0
aE5hbWVzcGFjZS5oOgorICAgICAgICAqIHhwYXRoL1hQYXRoUmVzdWx0Lmg6CisgICAgICAgICog
eHBhdGgvaW1wbC9YUGF0aEV4cHJlc3Npb25Ob2RlLmNwcDoKKyAgICAgICAgKiB4cGF0aC9pbXBs
L1hQYXRoRXhwcmVzc2lvbk5vZGUuaDoKKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoUGF0aC5j
cHA6CisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aFBhdGguaDoKKyAgICAgICAgKiB4cGF0aC9p
bXBsL1hQYXRoVXRpbC5jcHA6CisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aFV0aWwuaDoKKyAg
ICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoVmFyaWFibGVSZWZlcmVuY2UuaDoKKyAgICAgICAgUmVm
b3JtYXR0ZWQgYW5kIGNoYW5nZWQgaW5jbHVkZXMgYXJvdW5kOyBubyBzdWJzdGFudGl2ZSBjaGFu
Z2VzLgorCiAyMDA2LTA2LTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhY2FybHNzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRE9NSW1wbGVtZW50YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdET01JbXBsZW1lbnRhdGlvbi5oCShyZXZpc2lvbiAxNDcxNykKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0RPTUltcGxlbWVudGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDM0ICsyNSwy
NyBAQAogI2lmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgot
I2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmdMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICBjbGFzcyBDU1NTdHlsZVNoZWV0OwotICAgIGNsYXNzIERvY3VtZW50OwotICAgIGNsYXNz
IERvY3VtZW50VHlwZTsKLSAgICBjbGFzcyBTdHJpbmc7CisKICAgICBjbGFzcyBTdHJpbmdJbXBs
OwogCi0gICAgdHlwZWRlZiBGcmFtZVZpZXcgS0RPTVZpZXc7Ci0KLSAgICBjbGFzcyBTVkdET01J
bXBsZW1lbnRhdGlvbiA6IHB1YmxpYyBET01JbXBsZW1lbnRhdGlvbgotICAgIHsKKyAgICBjbGFz
cyBTVkdET01JbXBsZW1lbnRhdGlvbiA6IHB1YmxpYyBET01JbXBsZW1lbnRhdGlvbiB7CiAgICAg
cHVibGljOgogICAgICAgICBTVkdET01JbXBsZW1lbnRhdGlvbigpOwogICAgICAgICB2aXJ0dWFs
IH5TVkdET01JbXBsZW1lbnRhdGlvbigpOwogCi0gICAgICAgIHN0YXRpYyBTVkdET01JbXBsZW1l
bnRhdGlvbiAqaW5zdGFuY2UoKTsKKyAgICAgICAgc3RhdGljIFNWR0RPTUltcGxlbWVudGF0aW9u
KiBpbnN0YW5jZSgpOwogCiAgICAgICAgIC8vICdTVkdET01JbXBsZW1lbnRhdGlvbicgZnVuY3Rp
b25zCi0gICAgICAgIGJvb2wgaGFzRmVhdHVyZShTdHJpbmdJbXBsICpmZWF0dXJlLCBTdHJpbmdJ
bXBsICp2ZXJzaW9uKSBjb25zdDsKLSAgICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudFR5cGU+IGNy
ZWF0ZURvY3VtZW50VHlwZShTdHJpbmdJbXBsICpxdWFsaWZpZWROYW1lLCBTdHJpbmdJbXBsICpw
dWJsaWNJZCwgU3RyaW5nSW1wbCAqc3lzdGVtSWQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAg
ICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnQoU3RyaW5nSW1wbCAqbmFt
ZXNwYWNlVVJJLCBTdHJpbmdJbXBsICpxdWFsaWZpZWROYW1lLCBEb2N1bWVudFR5cGUgKmRvY3R5
cGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4g
Y3JlYXRlRG9jdW1lbnQoU3RyaW5nSW1wbCAqbmFtZXNwYWNlVVJJLCBTdHJpbmdJbXBsICpxdWFs
aWZpZWROYW1lLCBEb2N1bWVudFR5cGUgKmRvY3R5cGUsIGJvb2wgY3JlYXRlRG9jRWxlbWVudCwg
RnJhbWVWaWV3KiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgICAgICBib29sIGhhc0ZlYXR1
cmUoU3RyaW5nSW1wbCogZmVhdHVyZSwgU3RyaW5nSW1wbCogdmVyc2lvbikgY29uc3Q7CisgICAg
ICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRUeXBlPiBjcmVhdGVEb2N1bWVudFR5cGUoU3RyaW5nSW1w
bCogcXVhbGlmaWVkTmFtZSwgU3RyaW5nSW1wbCogcHVibGljSWQsIFN0cmluZ0ltcGwqIHN5c3Rl
bUlkLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+
IGNyZWF0ZURvY3VtZW50KFN0cmluZ0ltcGwqIG5hbWVzcGFjZVVSSSwgU3RyaW5nSW1wbCogcXVh
bGlmaWVkTmFtZSwgRG9jdW1lbnRUeXBlKiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgICAg
ICBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudChTdHJpbmdJbXBsKiBuYW1lc3Bh
Y2VVUkksIFN0cmluZ0ltcGwqIHF1YWxpZmllZE5hbWUsIERvY3VtZW50VHlwZSosIGJvb2wgY3Jl
YXRlRG9jRWxlbWVudCwgRnJhbWVWaWV3KiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogCi0gICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGVDU1NTdHlsZVNoZWV0
KFN0cmluZ0ltcGwgKnRpdGxlLCBTdHJpbmdJbXBsICptZWRpYSkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGVDU1NTdHlsZVNoZWV0KFN0cmlu
Z0ltcGwqIHRpdGxlLCBTdHJpbmdJbXBsKiBtZWRpYSkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVh
bCBEb2N1bWVudFR5cGUgKmRlZmF1bHREb2N1bWVudFR5cGUoKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCBEb2N1bWVudFR5cGUqIGRlZmF1bHREb2N1bWVudFR5cGUoKSBjb25zdDsKIAogICAgICAg
ICBib29sIGluQW5pbWF0aW9uQ29udGV4dCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEFuaW1h
dGlvbkNvbnRleHQoYm9vbCB2YWx1ZSk7CkBAIC02Myw2ICs1Niw3IEBACiAgICAgcHJpdmF0ZToK
ICAgICAgICAgYm9vbCBtX2FuaW1hdGlvbkNvbnRleHQgOiAxOwogICAgIH07CisKIH0KIAogI2Vu
ZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdET01JbXBsZW1l
bnRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRE9NSW1wbGVt
ZW50YXRpb24uY3BwCShyZXZpc2lvbiAxNDcxNykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RP
TUltcGxlbWVudGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksNiBAQAogCiBT
VkdET01JbXBsZW1lbnRhdGlvbjo6flNWR0RPTUltcGxlbWVudGF0aW9uKCkKIHsKLSAgICAvLyBj
bGVhbiB1cCBzdGF0aWMgZGF0YQotICAgIC8vU1ZHUmVuZGVyU3R5bGU6OmNsZWFudXAoKTsKIH0K
IAogU1ZHRE9NSW1wbGVtZW50YXRpb24gKlNWR0RPTUltcGxlbWVudGF0aW9uOjppbnN0YW5jZSgp
CkBAIC0xNTUsNyArMTUzLDcgQEAKICAgICByZXR1cm4gY3JlYXRlRG9jdW1lbnQobmFtZXNwYWNl
VVJJLCBxdWFsaWZpZWROYW1lSW1wbCwgZG9jdHlwZSwgdHJ1ZSwgMCwgZWMpOwogfQogCi1QYXNz
UmVmUHRyPERvY3VtZW50PiBTVkdET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoU3Ry
aW5nSW1wbCAqbmFtZXNwYWNlVVJJSW1wbCwgU3RyaW5nSW1wbCAqcXVhbGlmaWVkTmFtZUltcGws
IERvY3VtZW50VHlwZSAqZG9jdHlwZSwgYm9vbCBjcmVhdGVEb2NFbGVtZW50LCBLRE9NVmlldyAq
dmlldywgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitQYXNzUmVmUHRyPERvY3VtZW50PiBTVkdE
T01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoU3RyaW5nSW1wbCAqbmFtZXNwYWNlVVJJ
SW1wbCwgU3RyaW5nSW1wbCAqcXVhbGlmaWVkTmFtZUltcGwsIERvY3VtZW50VHlwZSAqZG9jdHlw
ZSwgYm9vbCBjcmVhdGVEb2NFbGVtZW50LCBGcmFtZVZpZXcgKnZpZXcsIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAogewogICAgIFN0cmluZyBuYW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJSW1wbCk7
CiAgICAgU3RyaW5nIHF1YWxpZmllZE5hbWUocXVhbGlmaWVkTmFtZUltcGwpOwo=
</data>
<flag name="review"
          id="2511"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>