<?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>88117</bug_id>
          
          <creation_ts>2012-06-01 11:57:14 -0700</creation_ts>
          <short_desc>[Qt] Move QObject bridge related tests from tst_qwebframe to tst_qobjectbridge</short_desc>
          <delta_ts>2012-06-02 10:39:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Caio Marcelo de Oliveira Filho">cmarcelo</reporter>
          <assigned_to name="Caio Marcelo de Oliveira Filho">cmarcelo</assigned_to>
          <cc>hausmann</cc>
    
    <cc>noam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>639574</commentid>
    <comment_count>0</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-06-01 11:57:14 -0700</bug_when>
    <thetext>[Qt] Move QObject bridge related tests from tst_qwebframe to tst_qobjectbridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639601</commentid>
    <comment_count>1</comment_count>
      <attachid>145353</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-06-01 12:15:27 -0700</bug_when>
    <thetext>Created attachment 145353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639634</commentid>
    <comment_count>2</comment_count>
      <attachid>145353</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-01 12:45:58 -0700</bug_when>
    <thetext>Comment on attachment 145353
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=145353&amp;action=review

&gt; Source/WebKit/qt/ChangeLog:149
&gt; +        (CustomType):
&gt; +        (MyQObject):
&gt; +        (MyQObject::MyQObject):
&gt; +        (MyQObject::~MyQObject):
&gt; +        (MyQObject::intProperty):
&gt; +        (MyQObject::setIntProperty):
&gt; +        (MyQObject::variantProperty):
&gt; +        (MyQObject::setVariantProperty):
&gt; +        (MyQObject::variantListProperty):
&gt; +        (MyQObject::setVariantListProperty):
&gt; +        (MyQObject::variantMapProperty):
&gt; +        (MyQObject::setVariantMapProperty):
&gt; +        (MyQObject::stringProperty):
&gt; +        (MyQObject::setStringProperty):
&gt; +        (MyQObject::stringListProperty):
&gt; +        (MyQObject::setStringListProperty):
&gt; +        (MyQObject::byteArrayProperty):
&gt; +        (MyQObject::setByteArrayProperty):
&gt; +        (MyQObject::brushProperty):
&gt; +        (MyQObject::setBrushProperty):
&gt; +        (MyQObject::hiddenProperty):
&gt; +        (MyQObject::setHiddenProperty):
&gt; +        (MyQObject::writeOnlyProperty):
&gt; +        (MyQObject::setWriteOnlyProperty):
&gt; +        (MyQObject::readOnlyProperty):
&gt; +        (MyQObject::shortcut):
&gt; +        (MyQObject::setShortcut):
&gt; +        (MyQObject::webElementProperty):
&gt; +        (MyQObject::setWebElementProperty):
&gt; +        (MyQObject::propWithCustomType):
&gt; +        (MyQObject::setPropWithCustomType):
&gt; +        (MyQObject::objectStarProperty):
&gt; +        (MyQObject::setObjectStarProperty):
&gt; +        (MyQObject::qtFunctionInvoked):
&gt; +        (MyQObject::qtFunctionActuals):
&gt; +        (MyQObject::resetQtFunctionInvoked):
&gt; +        (MyQObject::myInvokable):
&gt; +        (MyQObject::myInvokableWithIntArg):
&gt; +        (MyQObject::myInvokableWithLonglongArg):
&gt; +        (MyQObject::myInvokableWithFloatArg):
&gt; +        (MyQObject::myInvokableWithDoubleArg):
&gt; +        (MyQObject::myInvokableWithStringArg):
&gt; +        (MyQObject::myInvokableWithIntArgs):
&gt; +        (MyQObject::myInvokableReturningInt):
&gt; +        (MyQObject::myInvokableReturningLongLong):
&gt; +        (MyQObject::myInvokableReturningString):
&gt; +        (MyQObject::myInvokableWithEnumArg):
&gt; +        (MyQObject::myInvokableWithQualifiedEnumArg):
&gt; +        (MyQObject::myInvokableReturningEnum):
&gt; +        (MyQObject::myInvokableReturningQualifiedEnum):
&gt; +        (MyQObject::myInvokableReturningVectorOfInt):
&gt; +        (MyQObject::myInvokableWithVectorOfIntArg):
&gt; +        (MyQObject::myInvokableReturningQObjectStar):
&gt; +        (MyQObject::myInvokableWithQObjectListArg):
&gt; +        (MyQObject::myInvokableWithVariantArg):
&gt; +        (MyQObject::myInvokableWithVariantMapArg):
&gt; +        (MyQObject::myInvokableWithListOfIntArg):
&gt; +        (MyQObject::myInvokableWithQObjectStarArg):
&gt; +        (MyQObject::myInvokableWithQBrushArg):
&gt; +        (MyQObject::myInvokableWithBrushStyleArg):
&gt; +        (MyQObject::myInvokableWithVoidStarArg):
&gt; +        (MyQObject::myInvokableWithAmbiguousArg):
&gt; +        (MyQObject::myInvokableWithDefaultArgs):
&gt; +        (MyQObject::myInvokableReturningRef):
&gt; +        (MyQObject::myInvokableReturningConstRef):
&gt; +        (MyQObject::myInvokableWithPointArg):
&gt; +        (MyQObject::myInvokableWithBoolArg):
&gt; +        (MyQObject::emitMySignal):
&gt; +        (MyQObject::emitMySignalWithIntArg):
&gt; +        (MyQObject::emitMySignal2):
&gt; +        (MyQObject::emitMySignalWithDateTimeArg):
&gt; +        (MyQObject::emitMySignalWithRegexArg):
&gt; +        (MyQObject::mySlot):
&gt; +        (MyQObject::mySlotWithIntArg):
&gt; +        (MyQObject::mySlotWithDoubleArg):
&gt; +        (MyQObject::mySlotWithStringArg):
&gt; +        (MyQObject::myOverloadedSlot):
&gt; +        (MyQObject::myProtectedSlot):
&gt; +        (MyQObject::myPrivateSlot):
&gt; +        (MyWebElementSlotOnlyObject):
&gt; +        (MyWebElementSlotOnlyObject::doSomethingWithWebElement):
&gt; +        (MyWebElementSlotOnlyObject::tagName):
&gt; +        (MyOtherQObject):
&gt; +        (MyOtherQObject::MyOtherQObject):
&gt; +        (tst_QObjectBridge):
&gt; +        (tst_QObjectBridge::evalJS):
&gt; +        (tst_QObjectBridge::evalJSV):
&gt; +        (tst_QObjectBridge::tst_QObjectBridge):
&gt; +        (tst_QObjectBridge::init):
&gt; +        (tst_QObjectBridge::cleanup):
&gt; +        (tst_QObjectBridge::getSetStaticProperty):
&gt; +        (tst_QObjectBridge::getSetDynamicProperty):
&gt; +        (tst_QObjectBridge::getSetChildren):
&gt; +        (tst_QObjectBridge::callQtInvokable):
&gt; +        (tst_QObjectBridge::connectAndDisconnect):
&gt; +        (tst_QObjectBridge::overrideInvokable):
&gt; +        (tst_QObjectBridge::overloadedSlots):
&gt; +        (MyEnumTestQObject):
&gt; +        (MyEnumTestQObject::MyEnumTestQObject):
&gt; +        (MyEnumTestQObject::p1):
&gt; +        (MyEnumTestQObject::p2):
&gt; +        (MyEnumTestQObject::p3):
&gt; +        (MyEnumTestQObject::p4):
&gt; +        (MyEnumTestQObject::p5):
&gt; +        (MyEnumTestQObject::p6):
&gt; +        (MyEnumTestQObject::mySlot):
&gt; +        (MyEnumTestQObject::myOtherSlot):
&gt; +        (tst_QObjectBridge::enumerate_data):
&gt; +        (tst_QObjectBridge::enumerate):
&gt; +        (tst_QObjectBridge::objectDeleted):
&gt; +        (tst_QObjectBridge::typeConversion):
&gt; +        (StringListTestObject):
&gt; +        (StringListTestObject::stringList):
&gt; +        (tst_QObjectBridge::arrayObjectEnumerable):
&gt; +        (tst_QObjectBridge::domCycles):
&gt; +        (tst_QObjectBridge::jsByteArray):
&gt; +        (tst_QObjectBridge::ownership):
&gt; +        (tst_QObjectBridge::nullValue):
&gt; +        (TestFactory):
&gt; +        (TestFactory::TestFactory):
&gt; +        (TestFactory::getNewObject):
&gt; +        (tst_QObjectBridge::qObjectWrapperWithSameIdentity):
&gt; +        (tst_QObjectBridge::introspectQtMethods_data):
&gt; +        (tst_QObjectBridge::introspectQtMethods):
&gt; +        (tst_QObjectBridge::webElementSlotOnly):
&gt; +        * tests/qwebframe/tst_qwebframe.cpp:
&gt; +        (tst_QWebFrame):
&gt; +        (tst_QWebFrame::init):
&gt; +        (tst_QWebFrame::cleanup):

you don&apos;t need all this in the Changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639648</commentid>
    <comment_count>3</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-06-01 12:58:23 -0700</bug_when>
    <thetext>Committed r119267: &lt;http://trac.webkit.org/changeset/119267&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640058</commentid>
    <comment_count>4</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-02 10:39:15 -0700</bug_when>
    <thetext>Maybe a next step would be to get rid of tests that cover functionality that is not really needed, like testing the toString behavior of specific objects.
These tests many times test internal implementation details rather than expected API behavior.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145353</attachid>
            <date>2012-06-01 12:15:27 -0700</date>
            <delta_ts>2012-06-01 12:45:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88117-20120601161528.patch</filename>
            <type>text/plain</type>
            <size>180766</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGI4NDcxYWFkODVj
ZWYwYjBmMmI2MDQ5ODY3OTgyOThhNTAwYTMxOWEuLmM0OTdhNzI1MjdkODgwYmY4ZjM2MTkzZmJi
YWE4ZDliOWI1MGQzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUzIEBACisyMDEyLTA2
LTAxICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5i
b3NzYS5vcmc+CisKKyAgICAgICAgW1F0XSBNb3ZlIFFPYmplY3QgYnJpZGdlIHJlbGF0ZWQgdGVz
dHMgZnJvbSB0c3RfcXdlYmZyYW1lIHRvIHRzdF9xb2JqZWN0YnJpZGdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODExNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpdmUgdGVzdHMgKGNsYXNzRW51bXMs
IGNsYXNzQ29uc3RydWN0b3IsIHRyYW5zZmVySW52b2thYmxlLCBmaW5kT2JqZWN0IGFuZAorICAg
ICAgICBmaW5kQ2hpbGRyZW4pIHdlcmUgcmVtb3ZlZCBzaW5jZSB0aGV5IGNvbnRhaW5lZCBjb21t
ZW50ZWQgY29kZSBzaW5jZSB0aGUgZmlsZSB3YXMKKyAgICAgICAgYWRkZWQgYmFjayBpbiAyMDA4
LiBUaGUgUU9iamVjdCBicmlkZ2UgdGVzdHMgd2VyZSBwcm9iYWJseSBpbnNwaXJlZCBpbiBzaW1p
bGFyCisgICAgICAgIHRlc3RzIGZvciBRdFNjcmlwdCwgc28gbWFueSBmZWF0dXJlcyBub3QgeWV0
IGltcGxlbWVudGVkIHdlcmUgcHJlc2VudCBpbiBRdFdlYktpdAorICAgICAgICB0ZXN0cyBidXQg
Y29tbWVudGVkLgorCisgICAgICAgIE90aGVyIG1pbm9yIGNoYW5nZXM6CisgICAgICAgIC0gTW92
ZWQgTXlFbnVtVGVzdFFPYmplY3QgbmVhciB0aGUgb25seSB0ZXN0IGZ1bmN0aW9uIHRoYXQgdXNl
cyBpdC4KKyAgICAgICAgLSBSZW1vdmVkIHVubmVjZXNzYXJ5IFFfSU5WT0tBQkxFIGZyb20gc2V0
QnJ1c2hQcm9wZXJ0eS4KKyAgICAgICAgLSBSZW1vdmVkIHNvbWUgYml0cyBvZiBkZWFkIC8gY29t
bWVudGVkIGNvZGUuCisKKyAgICAgICAgKiB0ZXN0cy9xb2JqZWN0YnJpZGdlL3FvYmplY3Ricmlk
Z2UucHJvOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9xb2JqZWN0YnJpZGdlL3RzdF9xb2JqZWN0
YnJpZGdlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2ViZnJhbWUv
dHN0X3F3ZWJmcmFtZS5jcHAuCisgICAgICAgIChDdXN0b21UeXBlKToKKyAgICAgICAgKE15UU9i
amVjdCk6CisgICAgICAgIChNeVFPYmplY3Q6Ok15UU9iamVjdCk6CisgICAgICAgIChNeVFPYmpl
Y3Q6On5NeVFPYmplY3QpOgorICAgICAgICAoTXlRT2JqZWN0OjppbnRQcm9wZXJ0eSk6CisgICAg
ICAgIChNeVFPYmplY3Q6OnNldEludFByb3BlcnR5KToKKyAgICAgICAgKE15UU9iamVjdDo6dmFy
aWFudFByb3BlcnR5KToKKyAgICAgICAgKE15UU9iamVjdDo6c2V0VmFyaWFudFByb3BlcnR5KToK
KyAgICAgICAgKE15UU9iamVjdDo6dmFyaWFudExpc3RQcm9wZXJ0eSk6CisgICAgICAgIChNeVFP
YmplY3Q6OnNldFZhcmlhbnRMaXN0UHJvcGVydHkpOgorICAgICAgICAoTXlRT2JqZWN0Ojp2YXJp
YW50TWFwUHJvcGVydHkpOgorICAgICAgICAoTXlRT2JqZWN0OjpzZXRWYXJpYW50TWFwUHJvcGVy
dHkpOgorICAgICAgICAoTXlRT2JqZWN0OjpzdHJpbmdQcm9wZXJ0eSk6CisgICAgICAgIChNeVFP
YmplY3Q6OnNldFN0cmluZ1Byb3BlcnR5KToKKyAgICAgICAgKE15UU9iamVjdDo6c3RyaW5nTGlz
dFByb3BlcnR5KToKKyAgICAgICAgKE15UU9iamVjdDo6c2V0U3RyaW5nTGlzdFByb3BlcnR5KToK
KyAgICAgICAgKE15UU9iamVjdDo6Ynl0ZUFycmF5UHJvcGVydHkpOgorICAgICAgICAoTXlRT2Jq
ZWN0OjpzZXRCeXRlQXJyYXlQcm9wZXJ0eSk6CisgICAgICAgIChNeVFPYmplY3Q6OmJydXNoUHJv
cGVydHkpOgorICAgICAgICAoTXlRT2JqZWN0OjpzZXRCcnVzaFByb3BlcnR5KToKKyAgICAgICAg
KE15UU9iamVjdDo6aGlkZGVuUHJvcGVydHkpOgorICAgICAgICAoTXlRT2JqZWN0OjpzZXRIaWRk
ZW5Qcm9wZXJ0eSk6CisgICAgICAgIChNeVFPYmplY3Q6OndyaXRlT25seVByb3BlcnR5KToKKyAg
ICAgICAgKE15UU9iamVjdDo6c2V0V3JpdGVPbmx5UHJvcGVydHkpOgorICAgICAgICAoTXlRT2Jq
ZWN0OjpyZWFkT25seVByb3BlcnR5KToKKyAgICAgICAgKE15UU9iamVjdDo6c2hvcnRjdXQpOgor
ICAgICAgICAoTXlRT2JqZWN0OjpzZXRTaG9ydGN1dCk6CisgICAgICAgIChNeVFPYmplY3Q6Ondl
YkVsZW1lbnRQcm9wZXJ0eSk6CisgICAgICAgIChNeVFPYmplY3Q6OnNldFdlYkVsZW1lbnRQcm9w
ZXJ0eSk6CisgICAgICAgIChNeVFPYmplY3Q6OnByb3BXaXRoQ3VzdG9tVHlwZSk6CisgICAgICAg
IChNeVFPYmplY3Q6OnNldFByb3BXaXRoQ3VzdG9tVHlwZSk6CisgICAgICAgIChNeVFPYmplY3Q6
Om9iamVjdFN0YXJQcm9wZXJ0eSk6CisgICAgICAgIChNeVFPYmplY3Q6OnNldE9iamVjdFN0YXJQ
cm9wZXJ0eSk6CisgICAgICAgIChNeVFPYmplY3Q6OnF0RnVuY3Rpb25JbnZva2VkKToKKyAgICAg
ICAgKE15UU9iamVjdDo6cXRGdW5jdGlvbkFjdHVhbHMpOgorICAgICAgICAoTXlRT2JqZWN0Ojpy
ZXNldFF0RnVuY3Rpb25JbnZva2VkKToKKyAgICAgICAgKE15UU9iamVjdDo6bXlJbnZva2FibGUp
OgorICAgICAgICAoTXlRT2JqZWN0OjpteUludm9rYWJsZVdpdGhJbnRBcmcpOgorICAgICAgICAo
TXlRT2JqZWN0OjpteUludm9rYWJsZVdpdGhMb25nbG9uZ0FyZyk6CisgICAgICAgIChNeVFPYmpl
Y3Q6Om15SW52b2thYmxlV2l0aEZsb2F0QXJnKToKKyAgICAgICAgKE15UU9iamVjdDo6bXlJbnZv
a2FibGVXaXRoRG91YmxlQXJnKToKKyAgICAgICAgKE15UU9iamVjdDo6bXlJbnZva2FibGVXaXRo
U3RyaW5nQXJnKToKKyAgICAgICAgKE15UU9iamVjdDo6bXlJbnZva2FibGVXaXRoSW50QXJncyk6
CisgICAgICAgIChNeVFPYmplY3Q6Om15SW52b2thYmxlUmV0dXJuaW5nSW50KToKKyAgICAgICAg
KE15UU9iamVjdDo6bXlJbnZva2FibGVSZXR1cm5pbmdMb25nTG9uZyk6CisgICAgICAgIChNeVFP
YmplY3Q6Om15SW52b2thYmxlUmV0dXJuaW5nU3RyaW5nKToKKyAgICAgICAgKE15UU9iamVjdDo6
bXlJbnZva2FibGVXaXRoRW51bUFyZyk6CisgICAgICAgIChNeVFPYmplY3Q6Om15SW52b2thYmxl
V2l0aFF1YWxpZmllZEVudW1BcmcpOgorICAgICAgICAoTXlRT2JqZWN0OjpteUludm9rYWJsZVJl
dHVybmluZ0VudW0pOgorICAgICAgICAoTXlRT2JqZWN0OjpteUludm9rYWJsZVJldHVybmluZ1F1
YWxpZmllZEVudW0pOgorICAgICAgICAoTXlRT2JqZWN0OjpteUludm9rYWJsZVJldHVybmluZ1Zl
Y3Rvck9mSW50KToKKyAgICAgICAgKE15UU9iamVjdDo6bXlJbnZva2FibGVXaXRoVmVjdG9yT2ZJ
bnRBcmcpOgorICAgICAgICAoTXlRT2JqZWN0OjpteUludm9rYWJsZVJldHVybmluZ1FPYmplY3RT
dGFyKToKKyAgICAgICAgKE15UU9iamVjdDo6bXlJbnZva2FibGVXaXRoUU9iamVjdExpc3RBcmcp
OgorICAgICAgICAoTXlRT2JqZWN0OjpteUludm9rYWJsZVdpdGhWYXJpYW50QXJnKToKKyAgICAg
ICAgKE15UU9iamVjdDo6bXlJbnZva2FibGVXaXRoVmFyaWFudE1hcEFyZyk6CisgICAgICAgIChN
eVFPYmplY3Q6Om15SW52b2thYmxlV2l0aExpc3RPZkludEFyZyk6CisgICAgICAgIChNeVFPYmpl
Y3Q6Om15SW52b2thYmxlV2l0aFFPYmplY3RTdGFyQXJnKToKKyAgICAgICAgKE15UU9iamVjdDo6
bXlJbnZva2FibGVXaXRoUUJydXNoQXJnKToKKyAgICAgICAgKE15UU9iamVjdDo6bXlJbnZva2Fi
bGVXaXRoQnJ1c2hTdHlsZUFyZyk6CisgICAgICAgIChNeVFPYmplY3Q6Om15SW52b2thYmxlV2l0
aFZvaWRTdGFyQXJnKToKKyAgICAgICAgKE15UU9iamVjdDo6bXlJbnZva2FibGVXaXRoQW1iaWd1
b3VzQXJnKToKKyAgICAgICAgKE15UU9iamVjdDo6bXlJbnZva2FibGVXaXRoRGVmYXVsdEFyZ3Mp
OgorICAgICAgICAoTXlRT2JqZWN0OjpteUludm9rYWJsZVJldHVybmluZ1JlZik6CisgICAgICAg
IChNeVFPYmplY3Q6Om15SW52b2thYmxlUmV0dXJuaW5nQ29uc3RSZWYpOgorICAgICAgICAoTXlR
T2JqZWN0OjpteUludm9rYWJsZVdpdGhQb2ludEFyZyk6CisgICAgICAgIChNeVFPYmplY3Q6Om15
SW52b2thYmxlV2l0aEJvb2xBcmcpOgorICAgICAgICAoTXlRT2JqZWN0OjplbWl0TXlTaWduYWwp
OgorICAgICAgICAoTXlRT2JqZWN0OjplbWl0TXlTaWduYWxXaXRoSW50QXJnKToKKyAgICAgICAg
KE15UU9iamVjdDo6ZW1pdE15U2lnbmFsMik6CisgICAgICAgIChNeVFPYmplY3Q6OmVtaXRNeVNp
Z25hbFdpdGhEYXRlVGltZUFyZyk6CisgICAgICAgIChNeVFPYmplY3Q6OmVtaXRNeVNpZ25hbFdp
dGhSZWdleEFyZyk6CisgICAgICAgIChNeVFPYmplY3Q6Om15U2xvdCk6CisgICAgICAgIChNeVFP
YmplY3Q6Om15U2xvdFdpdGhJbnRBcmcpOgorICAgICAgICAoTXlRT2JqZWN0OjpteVNsb3RXaXRo
RG91YmxlQXJnKToKKyAgICAgICAgKE15UU9iamVjdDo6bXlTbG90V2l0aFN0cmluZ0FyZyk6Cisg
ICAgICAgIChNeVFPYmplY3Q6Om15T3ZlcmxvYWRlZFNsb3QpOgorICAgICAgICAoTXlRT2JqZWN0
OjpteVByb3RlY3RlZFNsb3QpOgorICAgICAgICAoTXlRT2JqZWN0OjpteVByaXZhdGVTbG90KToK
KyAgICAgICAgKE15V2ViRWxlbWVudFNsb3RPbmx5T2JqZWN0KToKKyAgICAgICAgKE15V2ViRWxl
bWVudFNsb3RPbmx5T2JqZWN0Ojpkb1NvbWV0aGluZ1dpdGhXZWJFbGVtZW50KToKKyAgICAgICAg
KE15V2ViRWxlbWVudFNsb3RPbmx5T2JqZWN0Ojp0YWdOYW1lKToKKyAgICAgICAgKE15T3RoZXJR
T2JqZWN0KToKKyAgICAgICAgKE15T3RoZXJRT2JqZWN0OjpNeU90aGVyUU9iamVjdCk6CisgICAg
ICAgICh0c3RfUU9iamVjdEJyaWRnZSk6CisgICAgICAgICh0c3RfUU9iamVjdEJyaWRnZTo6ZXZh
bEpTKToKKyAgICAgICAgKHRzdF9RT2JqZWN0QnJpZGdlOjpldmFsSlNWKToKKyAgICAgICAgKHRz
dF9RT2JqZWN0QnJpZGdlOjp0c3RfUU9iamVjdEJyaWRnZSk6CisgICAgICAgICh0c3RfUU9iamVj
dEJyaWRnZTo6aW5pdCk6CisgICAgICAgICh0c3RfUU9iamVjdEJyaWRnZTo6Y2xlYW51cCk6Cisg
ICAgICAgICh0c3RfUU9iamVjdEJyaWRnZTo6Z2V0U2V0U3RhdGljUHJvcGVydHkpOgorICAgICAg
ICAodHN0X1FPYmplY3RCcmlkZ2U6OmdldFNldER5bmFtaWNQcm9wZXJ0eSk6CisgICAgICAgICh0
c3RfUU9iamVjdEJyaWRnZTo6Z2V0U2V0Q2hpbGRyZW4pOgorICAgICAgICAodHN0X1FPYmplY3RC
cmlkZ2U6OmNhbGxRdEludm9rYWJsZSk6CisgICAgICAgICh0c3RfUU9iamVjdEJyaWRnZTo6Y29u
bmVjdEFuZERpc2Nvbm5lY3QpOgorICAgICAgICAodHN0X1FPYmplY3RCcmlkZ2U6Om92ZXJyaWRl
SW52b2thYmxlKToKKyAgICAgICAgKHRzdF9RT2JqZWN0QnJpZGdlOjpvdmVybG9hZGVkU2xvdHMp
OgorICAgICAgICAoTXlFbnVtVGVzdFFPYmplY3QpOgorICAgICAgICAoTXlFbnVtVGVzdFFPYmpl
Y3Q6Ok15RW51bVRlc3RRT2JqZWN0KToKKyAgICAgICAgKE15RW51bVRlc3RRT2JqZWN0OjpwMSk6
CisgICAgICAgIChNeUVudW1UZXN0UU9iamVjdDo6cDIpOgorICAgICAgICAoTXlFbnVtVGVzdFFP
YmplY3Q6OnAzKToKKyAgICAgICAgKE15RW51bVRlc3RRT2JqZWN0OjpwNCk6CisgICAgICAgIChN
eUVudW1UZXN0UU9iamVjdDo6cDUpOgorICAgICAgICAoTXlFbnVtVGVzdFFPYmplY3Q6OnA2KToK
KyAgICAgICAgKE15RW51bVRlc3RRT2JqZWN0OjpteVNsb3QpOgorICAgICAgICAoTXlFbnVtVGVz
dFFPYmplY3Q6Om15T3RoZXJTbG90KToKKyAgICAgICAgKHRzdF9RT2JqZWN0QnJpZGdlOjplbnVt
ZXJhdGVfZGF0YSk6CisgICAgICAgICh0c3RfUU9iamVjdEJyaWRnZTo6ZW51bWVyYXRlKToKKyAg
ICAgICAgKHRzdF9RT2JqZWN0QnJpZGdlOjpvYmplY3REZWxldGVkKToKKyAgICAgICAgKHRzdF9R
T2JqZWN0QnJpZGdlOjp0eXBlQ29udmVyc2lvbik6CisgICAgICAgIChTdHJpbmdMaXN0VGVzdE9i
amVjdCk6CisgICAgICAgIChTdHJpbmdMaXN0VGVzdE9iamVjdDo6c3RyaW5nTGlzdCk6CisgICAg
ICAgICh0c3RfUU9iamVjdEJyaWRnZTo6YXJyYXlPYmplY3RFbnVtZXJhYmxlKToKKyAgICAgICAg
KHRzdF9RT2JqZWN0QnJpZGdlOjpkb21DeWNsZXMpOgorICAgICAgICAodHN0X1FPYmplY3RCcmlk
Z2U6OmpzQnl0ZUFycmF5KToKKyAgICAgICAgKHRzdF9RT2JqZWN0QnJpZGdlOjpvd25lcnNoaXAp
OgorICAgICAgICAodHN0X1FPYmplY3RCcmlkZ2U6Om51bGxWYWx1ZSk6CisgICAgICAgIChUZXN0
RmFjdG9yeSk6CisgICAgICAgIChUZXN0RmFjdG9yeTo6VGVzdEZhY3RvcnkpOgorICAgICAgICAo
VGVzdEZhY3Rvcnk6OmdldE5ld09iamVjdCk6CisgICAgICAgICh0c3RfUU9iamVjdEJyaWRnZTo6
cU9iamVjdFdyYXBwZXJXaXRoU2FtZUlkZW50aXR5KToKKyAgICAgICAgKHRzdF9RT2JqZWN0QnJp
ZGdlOjppbnRyb3NwZWN0UXRNZXRob2RzX2RhdGEpOgorICAgICAgICAodHN0X1FPYmplY3RCcmlk
Z2U6OmludHJvc3BlY3RRdE1ldGhvZHMpOgorICAgICAgICAodHN0X1FPYmplY3RCcmlkZ2U6Ondl
YkVsZW1lbnRTbG90T25seSk6CisgICAgICAgICogdGVzdHMvcXdlYmZyYW1lL3RzdF9xd2ViZnJh
bWUuY3BwOgorICAgICAgICAodHN0X1FXZWJGcmFtZSk6CisgICAgICAgICh0c3RfUVdlYkZyYW1l
Ojppbml0KToKKyAgICAgICAgKHRzdF9RV2ViRnJhbWU6OmNsZWFudXApOgorCiAyMDEyLTA2LTAx
ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAg
ICAgICAgIFtRdF0gUmVtb3ZlIGRlcHJlY2F0ZWQgdG8vZnJvbUFzY2lpKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcW9iamVjdGJyaWRnZS9xb2JqZWN0YnJpZGdlLnBybyBi
L1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcW9iamVjdGJyaWRnZS9xb2JqZWN0YnJpZGdlLnBybwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNDM0Y2NiYzEyMDMxYWExMmNiODhkMTg5ZDQ0MjJhOGUzYmJkZDg4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xb2JqZWN0YnJpZGdlL3FvYmpl
Y3RicmlkZ2UucHJvCkBAIC0wLDAgKzEsMyBAQAoraW5jbHVkZSguLi90ZXN0cy5wcmkpCitleGlz
dHMoJCR7VEFSR0VUfS5xcmMpOlJFU09VUkNFUyArPSAkJHtUQVJHRVR9LnFyYworCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FvYmplY3RicmlkZ2UvdHN0X3FvYmplY3Ricmlk
Z2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xb2JqZWN0YnJpZGdlL3RzdF9xb2JqZWN0
YnJpZGdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMmU4MjMzZWEzNjJmZGE4YmU3ZDg4YWEzYzI5NDdkZWUw
OTZlMzZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xb2JqZWN0
YnJpZGdlL3RzdF9xb2JqZWN0YnJpZGdlLmNwcApAQCAtMCwwICsxLDIxODkgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDA4LDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+CisKKyNpbmNsdWRlIDxx
YnJ1c2guaD4KKyNpbmNsdWRlIDxxd2ViZWxlbWVudC5oPgorI2luY2x1ZGUgPHF3ZWJmcmFtZS5o
PgorI2luY2x1ZGUgPHF3ZWJwYWdlLmg+CisjaW5jbHVkZSA8cXdlYnZpZXcuaD4KKworc3RydWN0
IEN1c3RvbVR5cGUgeworICAgIFFTdHJpbmcgc3RyaW5nOworfTsKK1FfREVDTEFSRV9NRVRBVFlQ
RShDdXN0b21UeXBlKQorCitRX0RFQ0xBUkVfTUVUQVRZUEUoUUJydXNoKikKK1FfREVDTEFSRV9N
RVRBVFlQRShRT2JqZWN0TGlzdCkKK1FfREVDTEFSRV9NRVRBVFlQRShRTGlzdDxpbnQ+KQorUV9E
RUNMQVJFX01FVEFUWVBFKFF0OjpCcnVzaFN0eWxlKQorUV9ERUNMQVJFX01FVEFUWVBFKFFWYXJp
YW50TGlzdCkKK1FfREVDTEFSRV9NRVRBVFlQRShRVmFyaWFudE1hcCkKKworY2xhc3MgTXlRT2Jq
ZWN0IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisKKyAgICBRX1BST1BFUlRZKGlu
dCBpbnRQcm9wZXJ0eSBSRUFEIGludFByb3BlcnR5IFdSSVRFIHNldEludFByb3BlcnR5KQorICAg
IFFfUFJPUEVSVFkoUVZhcmlhbnQgdmFyaWFudFByb3BlcnR5IFJFQUQgdmFyaWFudFByb3BlcnR5
IFdSSVRFIHNldFZhcmlhbnRQcm9wZXJ0eSkKKyAgICBRX1BST1BFUlRZKFFWYXJpYW50TGlzdCB2
YXJpYW50TGlzdFByb3BlcnR5IFJFQUQgdmFyaWFudExpc3RQcm9wZXJ0eSBXUklURSBzZXRWYXJp
YW50TGlzdFByb3BlcnR5KQorICAgIFFfUFJPUEVSVFkoUVZhcmlhbnRNYXAgdmFyaWFudE1hcFBy
b3BlcnR5IFJFQUQgdmFyaWFudE1hcFByb3BlcnR5IFdSSVRFIHNldFZhcmlhbnRNYXBQcm9wZXJ0
eSkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgc3RyaW5nUHJvcGVydHkgUkVBRCBzdHJpbmdQcm9w
ZXJ0eSBXUklURSBzZXRTdHJpbmdQcm9wZXJ0eSkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmdMaXN0
IHN0cmluZ0xpc3RQcm9wZXJ0eSBSRUFEIHN0cmluZ0xpc3RQcm9wZXJ0eSBXUklURSBzZXRTdHJp
bmdMaXN0UHJvcGVydHkpCisgICAgUV9QUk9QRVJUWShRQnl0ZUFycmF5IGJ5dGVBcnJheVByb3Bl
cnR5IFJFQUQgYnl0ZUFycmF5UHJvcGVydHkgV1JJVEUgc2V0Qnl0ZUFycmF5UHJvcGVydHkpCisg
ICAgUV9QUk9QRVJUWShRQnJ1c2ggYnJ1c2hQcm9wZXJ0eSBSRUFEIGJydXNoUHJvcGVydHkgV1JJ
VEUgc2V0QnJ1c2hQcm9wZXJ0eSkKKyAgICBRX1BST1BFUlRZKGRvdWJsZSBoaWRkZW5Qcm9wZXJ0
eSBSRUFEIGhpZGRlblByb3BlcnR5IFdSSVRFIHNldEhpZGRlblByb3BlcnR5IFNDUklQVEFCTEUg
ZmFsc2UpCisgICAgUV9QUk9QRVJUWShpbnQgd3JpdGVPbmx5UHJvcGVydHkgV1JJVEUgc2V0V3Jp
dGVPbmx5UHJvcGVydHkpCisgICAgUV9QUk9QRVJUWShpbnQgcmVhZE9ubHlQcm9wZXJ0eSBSRUFE
IHJlYWRPbmx5UHJvcGVydHkpCisgICAgUV9QUk9QRVJUWShRS2V5U2VxdWVuY2Ugc2hvcnRjdXQg
UkVBRCBzaG9ydGN1dCBXUklURSBzZXRTaG9ydGN1dCkKKyAgICBRX1BST1BFUlRZKEN1c3RvbVR5
cGUgcHJvcFdpdGhDdXN0b21UeXBlIFJFQUQgcHJvcFdpdGhDdXN0b21UeXBlIFdSSVRFIHNldFBy
b3BXaXRoQ3VzdG9tVHlwZSkKKyAgICBRX1BST1BFUlRZKFFXZWJFbGVtZW50IHdlYkVsZW1lbnRQ
cm9wZXJ0eSBSRUFEIHdlYkVsZW1lbnRQcm9wZXJ0eSBXUklURSBzZXRXZWJFbGVtZW50UHJvcGVy
dHkpCisgICAgUV9QUk9QRVJUWShRT2JqZWN0KiBvYmplY3RTdGFyUHJvcGVydHkgUkVBRCBvYmpl
Y3RTdGFyUHJvcGVydHkgV1JJVEUgc2V0T2JqZWN0U3RhclByb3BlcnR5KQorICAgIFFfRU5VTVMo
UG9saWN5IFN0cmF0ZWd5KQorICAgIFFfRkxBR1MoQWJpbGl0eSkKKworcHVibGljOgorICAgIGVu
dW0gUG9saWN5IHsKKyAgICAgICAgRm9vUG9saWN5ID0gMCwKKyAgICAgICAgQmFyUG9saWN5LAor
ICAgICAgICBCYXpQb2xpY3kKKyAgICB9OworCisgICAgZW51bSBTdHJhdGVneSB7CisgICAgICAg
IEZvb1N0cmF0ZWd5ID0gMTAsCisgICAgICAgIEJhclN0cmF0ZWd5LAorICAgICAgICBCYXpTdHJh
dGVneQorICAgIH07CisKKyAgICBlbnVtIEFiaWxpdHlGbGFnIHsKKyAgICAgICAgTm9BYmlsaXR5
ICA9IDB4MDAwLAorICAgICAgICBGb29BYmlsaXR5ID0gMHgwMDEsCisgICAgICAgIEJhckFiaWxp
dHkgPSAweDA4MCwKKyAgICAgICAgQmF6QWJpbGl0eSA9IDB4MjAwLAorICAgICAgICBBbGxBYmls
aXR5ID0gRm9vQWJpbGl0eSB8IEJhckFiaWxpdHkgfCBCYXpBYmlsaXR5CisgICAgfTsKKworICAg
IFFfREVDTEFSRV9GTEFHUyhBYmlsaXR5LCBBYmlsaXR5RmxhZykKKworICAgIE15UU9iamVjdChR
T2JqZWN0KiBwYXJlbnQgPSAwKQorICAgICAgICA6IFFPYmplY3QocGFyZW50KSwKKyAgICAgICAg
ICAgIG1faW50VmFsdWUoMTIzKSwKKyAgICAgICAgICAgIG1fdmFyaWFudFZhbHVlKFFMYXRpbjFT
dHJpbmcoImZvbyIpKSwKKyAgICAgICAgICAgIG1fdmFyaWFudExpc3RWYWx1ZShRVmFyaWFudExp
c3QoKSA8PCBRVmFyaWFudCgxMjMpIDw8IFFWYXJpYW50KFFMYXRpbjFTdHJpbmcoImZvbyIpKSks
CisgICAgICAgICAgICBtX3N0cmluZ1ZhbHVlKFFMYXRpbjFTdHJpbmcoImJhciIpKSwKKyAgICAg
ICAgICAgIG1fc3RyaW5nTGlzdFZhbHVlKFFTdHJpbmdMaXN0KCkgPDwgUUxhdGluMVN0cmluZygi
emlnIikgPDwgUUxhdGluMVN0cmluZygiemFnIikpLAorICAgICAgICAgICAgbV9icnVzaFZhbHVl
KFFDb2xvcigxMCwgMjAsIDMwLCA0MCkpLAorICAgICAgICAgICAgbV9oaWRkZW5WYWx1ZSg0NTYu
MCksCisgICAgICAgICAgICBtX3dyaXRlT25seVZhbHVlKDc4OSksCisgICAgICAgICAgICBtX3Jl
YWRPbmx5VmFsdWUoOTg3KSwKKyAgICAgICAgICAgIG1fb2JqZWN0U3RhcigwKSwKKyAgICAgICAg
ICAgIG1fcXRGdW5jdGlvbkludm9rZWQoLTEpCisgICAgeworICAgICAgICBtX3ZhcmlhbnRNYXBW
YWx1ZS5pbnNlcnQoImEiLCBRVmFyaWFudCgxMjMpKTsKKyAgICAgICAgbV92YXJpYW50TWFwVmFs
dWUuaW5zZXJ0KCJiIiwgUVZhcmlhbnQoUUxhdGluMVN0cmluZygiZm9vIikpKTsKKyAgICAgICAg
bV92YXJpYW50TWFwVmFsdWUuaW5zZXJ0KCJjIiwgUVZhcmlhbnQ6OmZyb21WYWx1ZTxRT2JqZWN0
Kj4odGhpcykpOworICAgIH0KKworICAgIH5NeVFPYmplY3QoKSB7IH0KKworICAgIGludCBpbnRQ
cm9wZXJ0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbnRWYWx1ZTsKKyAgICB9
CisgICAgdm9pZCBzZXRJbnRQcm9wZXJ0eShpbnQgdmFsdWUpCisgICAgeworICAgICAgICBtX2lu
dFZhbHVlID0gdmFsdWU7CisgICAgfQorCisgICAgUVZhcmlhbnQgdmFyaWFudFByb3BlcnR5KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhcmlhbnRWYWx1ZTsKKyAgICB9CisgICAg
dm9pZCBzZXRWYXJpYW50UHJvcGVydHkoY29uc3QgUVZhcmlhbnQmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV92YXJpYW50VmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBRVmFyaWFudExpc3Qg
dmFyaWFudExpc3RQcm9wZXJ0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YXJp
YW50TGlzdFZhbHVlOworICAgIH0KKyAgICB2b2lkIHNldFZhcmlhbnRMaXN0UHJvcGVydHkoY29u
c3QgUVZhcmlhbnRMaXN0JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fdmFyaWFudExpc3RWYWx1
ZSA9IHZhbHVlOworICAgIH0KKworICAgIFFWYXJpYW50TWFwIHZhcmlhbnRNYXBQcm9wZXJ0eSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YXJpYW50TWFwVmFsdWU7CisgICAgfQor
ICAgIHZvaWQgc2V0VmFyaWFudE1hcFByb3BlcnR5KGNvbnN0IFFWYXJpYW50TWFwJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIG1fdmFyaWFudE1hcFZhbHVlID0gdmFsdWU7CisgICAgfQorCisgICAg
UVN0cmluZyBzdHJpbmdQcm9wZXJ0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9z
dHJpbmdWYWx1ZTsKKyAgICB9CisgICAgdm9pZCBzZXRTdHJpbmdQcm9wZXJ0eShjb25zdCBRU3Ry
aW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fc3RyaW5nVmFsdWUgPSB2YWx1ZTsKKyAgICB9
CisKKyAgICBRU3RyaW5nTGlzdCBzdHJpbmdMaXN0UHJvcGVydHkoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fc3RyaW5nTGlzdFZhbHVlOworICAgIH0KKyAgICB2b2lkIHNldFN0cmlu
Z0xpc3RQcm9wZXJ0eShjb25zdCBRU3RyaW5nTGlzdCYgdmFsdWUpCisgICAgeworICAgICAgICBt
X3N0cmluZ0xpc3RWYWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIFFCeXRlQXJyYXkgYnl0ZUFy
cmF5UHJvcGVydHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZUFycmF5VmFs
dWU7CisgICAgfQorICAgIHZvaWQgc2V0Qnl0ZUFycmF5UHJvcGVydHkoY29uc3QgUUJ5dGVBcnJh
eSYgdmFsdWUpCisgICAgeworICAgICAgICBtX2J5dGVBcnJheVZhbHVlID0gdmFsdWU7CisgICAg
fQorCisgICAgUUJydXNoIGJydXNoUHJvcGVydHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fYnJ1c2hWYWx1ZTsKKyAgICB9CisgICAgdm9pZCBzZXRCcnVzaFByb3BlcnR5KGNvbnN0
IFFCcnVzaCYgdmFsdWUpCisgICAgeworICAgICAgICBtX2JydXNoVmFsdWUgPSB2YWx1ZTsKKyAg
ICB9CisKKyAgICBkb3VibGUgaGlkZGVuUHJvcGVydHkoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1faGlkZGVuVmFsdWU7CisgICAgfQorICAgIHZvaWQgc2V0SGlkZGVuUHJvcGVydHko
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9oaWRkZW5WYWx1ZSA9IHZhbHVlOworICAg
IH0KKworICAgIGludCB3cml0ZU9ubHlQcm9wZXJ0eSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV93cml0ZU9ubHlWYWx1ZTsKKyAgICB9CisgICAgdm9pZCBzZXRXcml0ZU9ubHlQcm9w
ZXJ0eShpbnQgdmFsdWUpCisgICAgeworICAgICAgICBtX3dyaXRlT25seVZhbHVlID0gdmFsdWU7
CisgICAgfQorCisgICAgaW50IHJlYWRPbmx5UHJvcGVydHkoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fcmVhZE9ubHlWYWx1ZTsKKyAgICB9CisKKyAgICBRS2V5U2VxdWVuY2Ugc2hv
cnRjdXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2hvcnRjdXQ7CisgICAgfQor
ICAgIHZvaWQgc2V0U2hvcnRjdXQoY29uc3QgUUtleVNlcXVlbmNlJiBzZXEpCisgICAgeworICAg
ICAgICBtX3Nob3J0Y3V0ID0gc2VxOworICAgIH0KKworICAgIFFXZWJFbGVtZW50IHdlYkVsZW1l
bnRQcm9wZXJ0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93ZWJFbGVtZW50Owor
ICAgIH0KKyAgICB2b2lkIHNldFdlYkVsZW1lbnRQcm9wZXJ0eShjb25zdCBRV2ViRWxlbWVudCYg
ZWxlbWVudCkKKyAgICB7CisgICAgICAgIG1fd2ViRWxlbWVudCA9IGVsZW1lbnQ7CisgICAgfQor
CisgICAgQ3VzdG9tVHlwZSBwcm9wV2l0aEN1c3RvbVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fY3VzdG9tVHlwZTsKKyAgICB9CisgICAgdm9pZCBzZXRQcm9wV2l0aEN1c3Rv
bVR5cGUoY29uc3QgQ3VzdG9tVHlwZSYgYykKKyAgICB7CisgICAgICAgIG1fY3VzdG9tVHlwZSA9
IGM7CisgICAgfQorCisgICAgUU9iamVjdCogb2JqZWN0U3RhclByb3BlcnR5KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX29iamVjdFN0YXI7CisgICAgfQorICAgIHZvaWQgc2V0T2Jq
ZWN0U3RhclByb3BlcnR5KFFPYmplY3QqIG9iamVjdCkKKyAgICB7CisgICAgICAgIG1fb2JqZWN0
U3RhciA9IG9iamVjdDsKKyAgICB9CisKKworICAgIGludCBxdEZ1bmN0aW9uSW52b2tlZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9xdEZ1bmN0aW9uSW52b2tlZDsKKyAgICB9CisK
KyAgICBRVmFyaWFudExpc3QgcXRGdW5jdGlvbkFjdHVhbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fYWN0dWFsczsKKyAgICB9CisKKyAgICB2b2lkIHJlc2V0UXRGdW5jdGlvbklu
dm9rZWQoKQorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IC0xOworICAgICAg
ICBtX2FjdHVhbHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBRX0lOVk9LQUJMRSB2b2lkIG15SW52
b2thYmxlKCkKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAwOworICAgIH0K
KyAgICBRX0lOVk9LQUJMRSB2b2lkIG15SW52b2thYmxlV2l0aEludEFyZyhpbnQgYXJnKQorICAg
IHsKKyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDE7CisgICAgICAgIG1fYWN0dWFscyA8
PCBhcmc7CisgICAgfQorICAgIFFfSU5WT0tBQkxFIHZvaWQgbXlJbnZva2FibGVXaXRoTG9uZ2xv
bmdBcmcocWxvbmdsb25nIGFyZykKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQg
PSAyOworICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOworICAgIH0KKyAgICBRX0lOVk9LQUJMRSB2
b2lkIG15SW52b2thYmxlV2l0aEZsb2F0QXJnKGZsb2F0IGFyZykKKyAgICB7CisgICAgICAgIG1f
cXRGdW5jdGlvbkludm9rZWQgPSAzOworICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOworICAgIH0K
KyAgICBRX0lOVk9LQUJMRSB2b2lkIG15SW52b2thYmxlV2l0aERvdWJsZUFyZyhkb3VibGUgYXJn
KQorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDQ7CisgICAgICAgIG1fYWN0
dWFscyA8PCBhcmc7CisgICAgfQorICAgIFFfSU5WT0tBQkxFIHZvaWQgbXlJbnZva2FibGVXaXRo
U3RyaW5nQXJnKGNvbnN0IFFTdHJpbmcmIGFyZykKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlv
bkludm9rZWQgPSA1OworICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOworICAgIH0KKyAgICBRX0lO
Vk9LQUJMRSB2b2lkIG15SW52b2thYmxlV2l0aEludEFyZ3MoaW50IGFyZzEsIGludCBhcmcyKQor
ICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDY7CisgICAgICAgIG1fYWN0dWFs
cyA8PCBhcmcxIDw8IGFyZzI7CisgICAgfQorICAgIFFfSU5WT0tBQkxFIGludCBteUludm9rYWJs
ZVJldHVybmluZ0ludCgpCisgICAgeworICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gNzsK
KyAgICAgICAgcmV0dXJuIDEyMzsKKyAgICB9CisgICAgUV9JTlZPS0FCTEUgcWxvbmdsb25nIG15
SW52b2thYmxlUmV0dXJuaW5nTG9uZ0xvbmcoKQorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9u
SW52b2tlZCA9IDM5OworICAgICAgICByZXR1cm4gNDU2OworICAgIH0KKyAgICBRX0lOVk9LQUJM
RSBRU3RyaW5nIG15SW52b2thYmxlUmV0dXJuaW5nU3RyaW5nKCkKKyAgICB7CisgICAgICAgIG1f
cXRGdW5jdGlvbkludm9rZWQgPSA4OworICAgICAgICByZXR1cm4gUUxhdGluMVN0cmluZygiY2lh
byIpOworICAgIH0KKyAgICBRX0lOVk9LQUJMRSB2b2lkIG15SW52b2thYmxlV2l0aEludEFyZyhp
bnQgYXJnMSwgaW50IGFyZzIpIC8vIE92ZXJsb2FkLgorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0
aW9uSW52b2tlZCA9IDk7CisgICAgICAgIG1fYWN0dWFscyA8PCBhcmcxIDw8IGFyZzI7CisgICAg
fQorICAgIFFfSU5WT0tBQkxFIHZvaWQgbXlJbnZva2FibGVXaXRoRW51bUFyZyhQb2xpY3kgcG9s
aWN5KQorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDEwOworICAgICAgICBt
X2FjdHVhbHMgPDwgcG9saWN5OworICAgIH0KKyAgICBRX0lOVk9LQUJMRSB2b2lkIG15SW52b2th
YmxlV2l0aFF1YWxpZmllZEVudW1BcmcoTXlRT2JqZWN0OjpQb2xpY3kgcG9saWN5KQorICAgIHsK
KyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDM2OworICAgICAgICBtX2FjdHVhbHMgPDwg
cG9saWN5OworICAgIH0KKyAgICBRX0lOVk9LQUJMRSBQb2xpY3kgbXlJbnZva2FibGVSZXR1cm5p
bmdFbnVtKCkKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAzNzsKKyAgICAg
ICAgcmV0dXJuIEJhelBvbGljeTsKKyAgICB9CisgICAgUV9JTlZPS0FCTEUgTXlRT2JqZWN0OjpQ
b2xpY3kgbXlJbnZva2FibGVSZXR1cm5pbmdRdWFsaWZpZWRFbnVtKCkKKyAgICB7CisgICAgICAg
IG1fcXRGdW5jdGlvbkludm9rZWQgPSAzODsKKyAgICAgICAgcmV0dXJuIEJhelBvbGljeTsKKyAg
ICB9CisgICAgUV9JTlZPS0FCTEUgUVZlY3RvcjxpbnQ+IG15SW52b2thYmxlUmV0dXJuaW5nVmVj
dG9yT2ZJbnQoKQorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDExOworICAg
ICAgICByZXR1cm4gUVZlY3RvcjxpbnQ+KCk7CisgICAgfQorICAgIFFfSU5WT0tBQkxFIHZvaWQg
bXlJbnZva2FibGVXaXRoVmVjdG9yT2ZJbnRBcmcoY29uc3QgUVZlY3RvcjxpbnQ+JikKKyAgICB7
CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAxMjsKKyAgICB9CisgICAgUV9JTlZPS0FC
TEUgUU9iamVjdCogbXlJbnZva2FibGVSZXR1cm5pbmdRT2JqZWN0U3RhcigpCisgICAgeworICAg
ICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gMTM7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH0KKyAgICBRX0lOVk9LQUJMRSBRT2JqZWN0TGlzdCBteUludm9rYWJsZVdpdGhRT2JqZWN0TGlz
dEFyZyhjb25zdCBRT2JqZWN0TGlzdCYgbHN0KQorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9u
SW52b2tlZCA9IDE0OworICAgICAgICBtX2FjdHVhbHMgPDwgUVZhcmlhbnQ6OmZyb21WYWx1ZShs
c3QpOworICAgICAgICByZXR1cm4gbHN0OworICAgIH0KKyAgICBRX0lOVk9LQUJMRSBRVmFyaWFu
dCBteUludm9rYWJsZVdpdGhWYXJpYW50QXJnKGNvbnN0IFFWYXJpYW50JiB2KQorICAgIHsKKyAg
ICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDE1OworICAgICAgICBtX2FjdHVhbHMgPDwgdjsK
KyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorICAgIFFfSU5WT0tBQkxFIFFWYXJpYW50TWFwIG15
SW52b2thYmxlV2l0aFZhcmlhbnRNYXBBcmcoY29uc3QgUVZhcmlhbnRNYXAmIHZtKQorICAgIHsK
KyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDE2OworICAgICAgICBtX2FjdHVhbHMgPDwg
dm07CisgICAgICAgIHJldHVybiB2bTsKKyAgICB9CisgICAgUV9JTlZPS0FCTEUgUUxpc3Q8aW50
PiBteUludm9rYWJsZVdpdGhMaXN0T2ZJbnRBcmcoY29uc3QgUUxpc3Q8aW50PiYgbHN0KQorICAg
IHsKKyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDE3OworICAgICAgICBtX2FjdHVhbHMg
PDwgUVZhcmlhbnQ6OmZyb21WYWx1ZShsc3QpOworICAgICAgICByZXR1cm4gbHN0OworICAgIH0K
KyAgICBRX0lOVk9LQUJMRSBRT2JqZWN0KiBteUludm9rYWJsZVdpdGhRT2JqZWN0U3RhckFyZyhR
T2JqZWN0KiBvYmopCisgICAgeworICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gMTg7Cisg
ICAgICAgIG1fYWN0dWFscyA8PCBRVmFyaWFudDo6ZnJvbVZhbHVlKG9iaik7CisgICAgICAgIHJl
dHVybiBvYmo7CisgICAgfQorICAgIFFfSU5WT0tBQkxFIFFCcnVzaCBteUludm9rYWJsZVdpdGhR
QnJ1c2hBcmcoY29uc3QgUUJydXNoJiBicnVzaCkKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlv
bkludm9rZWQgPSAxOTsKKyAgICAgICAgbV9hY3R1YWxzIDw8IFFWYXJpYW50Ojpmcm9tVmFsdWUo
YnJ1c2gpOworICAgICAgICByZXR1cm4gYnJ1c2g7CisgICAgfQorICAgIFFfSU5WT0tBQkxFIHZv
aWQgbXlJbnZva2FibGVXaXRoQnJ1c2hTdHlsZUFyZyhRdDo6QnJ1c2hTdHlsZSBzdHlsZSkKKyAg
ICB7CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSA0MzsKKyAgICAgICAgbV9hY3R1YWxz
IDw8IFFWYXJpYW50Ojpmcm9tVmFsdWUoc3R5bGUpOworICAgIH0KKyAgICBRX0lOVk9LQUJMRSB2
b2lkIG15SW52b2thYmxlV2l0aFZvaWRTdGFyQXJnKHZvaWQqIGFyZykKKyAgICB7CisgICAgICAg
IG1fcXRGdW5jdGlvbkludm9rZWQgPSA0NDsKKyAgICAgICAgbV9hY3R1YWxzIDw8IFFWYXJpYW50
Ojpmcm9tVmFsdWUoYXJnKTsKKyAgICB9CisgICAgUV9JTlZPS0FCTEUgdm9pZCBteUludm9rYWJs
ZVdpdGhBbWJpZ3VvdXNBcmcoaW50IGFyZykKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlvbklu
dm9rZWQgPSA0NTsKKyAgICAgICAgbV9hY3R1YWxzIDw8IFFWYXJpYW50Ojpmcm9tVmFsdWUoYXJn
KTsKKyAgICB9CisgICAgUV9JTlZPS0FCTEUgdm9pZCBteUludm9rYWJsZVdpdGhBbWJpZ3VvdXNB
cmcodWludCBhcmcpCisgICAgeworICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gNDY7Cisg
ICAgICAgIG1fYWN0dWFscyA8PCBRVmFyaWFudDo6ZnJvbVZhbHVlKGFyZyk7CisgICAgfQorICAg
IFFfSU5WT0tBQkxFIHZvaWQgbXlJbnZva2FibGVXaXRoRGVmYXVsdEFyZ3MoaW50IGFyZzEsIGNv
bnN0IFFTdHJpbmcmIGFyZzIgPSBRU3RyaW5nKCkpCisgICAgeworICAgICAgICBtX3F0RnVuY3Rp
b25JbnZva2VkID0gNDc7CisgICAgICAgIG1fYWN0dWFscyA8PCBRVmFyaWFudDo6ZnJvbVZhbHVl
KGFyZzEpIDw8IHFWYXJpYW50RnJvbVZhbHVlKGFyZzIpOworICAgIH0KKyAgICBRX0lOVk9LQUJM
RSBRT2JqZWN0JiBteUludm9rYWJsZVJldHVybmluZ1JlZigpCisgICAgeworICAgICAgICBtX3F0
RnVuY3Rpb25JbnZva2VkID0gNDg7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAg
UV9JTlZPS0FCTEUgY29uc3QgUU9iamVjdCYgbXlJbnZva2FibGVSZXR1cm5pbmdDb25zdFJlZigp
IGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9jYXN0PE15UU9iamVjdCo+KHRoaXMpLT5tX3F0
RnVuY3Rpb25JbnZva2VkID0gNDk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAg
UV9JTlZPS0FCTEUgdm9pZCBteUludm9rYWJsZVdpdGhQb2ludEFyZyhjb25zdCBRUG9pbnQgJmFy
ZykgeworICAgICAgICBjb25zdF9jYXN0PE15UU9iamVjdCo+KHRoaXMpLT5tX3F0RnVuY3Rpb25J
bnZva2VkID0gNTA7CisgICAgICAgIG1fYWN0dWFscyA8PCBRVmFyaWFudDo6ZnJvbVZhbHVlKGFy
Zyk7CisgICAgfQorICAgIFFfSU5WT0tBQkxFIHZvaWQgbXlJbnZva2FibGVXaXRoUG9pbnRBcmco
Y29uc3QgUVBvaW50RiAmYXJnKSB7CisgICAgICAgIGNvbnN0X2Nhc3Q8TXlRT2JqZWN0Kj4odGhp
cyktPm1fcXRGdW5jdGlvbkludm9rZWQgPSA1MTsKKyAgICAgICAgbV9hY3R1YWxzIDw8IFFWYXJp
YW50Ojpmcm9tVmFsdWUoYXJnKTsKKyAgICB9CisgICAgUV9JTlZPS0FCTEUgdm9pZCBteUludm9r
YWJsZVdpdGhCb29sQXJnKGJvb2wgYXJnKSB7CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQg
PSA1MjsKKyAgICAgICAgbV9hY3R1YWxzIDw8IGFyZzsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRN
eVNpZ25hbCgpCisgICAgeworICAgICAgICBlbWl0IG15U2lnbmFsKCk7CisgICAgfQorICAgIHZv
aWQgZW1pdE15U2lnbmFsV2l0aEludEFyZyhpbnQgYXJnKQorICAgIHsKKyAgICAgICAgZW1pdCBt
eVNpZ25hbFdpdGhJbnRBcmcoYXJnKTsKKyAgICB9CisgICAgdm9pZCBlbWl0TXlTaWduYWwyKGJv
b2wgYXJnKQorICAgIHsKKyAgICAgICAgZW1pdCBteVNpZ25hbDIoYXJnKTsKKyAgICB9CisgICAg
dm9pZCBlbWl0TXlTaWduYWwyKCkKKyAgICB7CisgICAgICAgIGVtaXQgbXlTaWduYWwyKCk7Cisg
ICAgfQorICAgIHZvaWQgZW1pdE15U2lnbmFsV2l0aERhdGVUaW1lQXJnKFFEYXRlVGltZSBkdCkK
KyAgICB7CisgICAgICAgIGVtaXQgbXlTaWduYWxXaXRoRGF0ZVRpbWVBcmcoZHQpOworICAgIH0K
KyAgICB2b2lkIGVtaXRNeVNpZ25hbFdpdGhSZWdleEFyZyhRUmVnRXhwIHIpCisgICAgeworICAg
ICAgICBlbWl0IG15U2lnbmFsV2l0aFJlZ2V4QXJnKHIpOworICAgIH0KKworcHVibGljIFFfU0xP
VFM6CisgICAgdm9pZCBteVNsb3QoKQorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tl
ZCA9IDIwOworICAgIH0KKworICAgIHZvaWQgbXlTbG90V2l0aEludEFyZyhpbnQgYXJnKQorICAg
IHsKKyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDIxOworICAgICAgICBtX2FjdHVhbHMg
PDwgYXJnOworICAgIH0KKworICAgIHZvaWQgbXlTbG90V2l0aERvdWJsZUFyZyhkb3VibGUgYXJn
KQorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDIyOworICAgICAgICBtX2Fj
dHVhbHMgPDwgYXJnOworICAgIH0KKworICAgIHZvaWQgbXlTbG90V2l0aFN0cmluZ0FyZyhjb25z
dCBRU3RyaW5nICZhcmcpCisgICAgeworICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gMjM7
CisgICAgICAgIG1fYWN0dWFscyA8PCBhcmc7CisgICAgfQorCisgICAgdm9pZCBteU92ZXJsb2Fk
ZWRTbG90KCkKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAyNDsKKyAgICB9
CisKKyAgICB2b2lkIG15T3ZlcmxvYWRlZFNsb3QoUU9iamVjdCogYXJnKQorICAgIHsKKyAgICAg
ICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDQxOworICAgICAgICBtX2FjdHVhbHMgPDwgUVZhcmlh
bnQ6OmZyb21WYWx1ZShhcmcpOworICAgIH0KKworICAgIHZvaWQgbXlPdmVybG9hZGVkU2xvdChi
b29sIGFyZykKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAyNTsKKyAgICAg
ICAgbV9hY3R1YWxzIDw8IGFyZzsKKyAgICB9CisKKyAgICB2b2lkIG15T3ZlcmxvYWRlZFNsb3Qo
Y29uc3QgUVN0cmluZ0xpc3QgJmFyZykKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9r
ZWQgPSA0MjsKKyAgICAgICAgbV9hY3R1YWxzIDw8IGFyZzsKKyAgICB9CisKKyAgICB2b2lkIG15
T3ZlcmxvYWRlZFNsb3QoZG91YmxlIGFyZykKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlvbklu
dm9rZWQgPSAyNjsKKyAgICAgICAgbV9hY3R1YWxzIDw8IGFyZzsKKyAgICB9CisKKyAgICB2b2lk
IG15T3ZlcmxvYWRlZFNsb3QoZmxvYXQgYXJnKQorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9u
SW52b2tlZCA9IDI3OworICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOworICAgIH0KKworICAgIHZv
aWQgbXlPdmVybG9hZGVkU2xvdChpbnQgYXJnKQorICAgIHsKKyAgICAgICAgbV9xdEZ1bmN0aW9u
SW52b2tlZCA9IDI4OworICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOworICAgIH0KKworICAgIHZv
aWQgbXlPdmVybG9hZGVkU2xvdChjb25zdCBRU3RyaW5nICZhcmcpCisgICAgeworICAgICAgICBt
X3F0RnVuY3Rpb25JbnZva2VkID0gMjk7CisgICAgICAgIG1fYWN0dWFscyA8PCBhcmc7CisgICAg
fQorCisgICAgdm9pZCBteU92ZXJsb2FkZWRTbG90KGNvbnN0IFFDb2xvciAmYXJnKQorICAgIHsK
KyAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDMwOworICAgICAgICBtX2FjdHVhbHMgPDwg
YXJnOworICAgIH0KKworICAgIHZvaWQgbXlPdmVybG9hZGVkU2xvdChjb25zdCBRQnJ1c2ggJmFy
ZykKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAzMTsKKyAgICAgICAgbV9h
Y3R1YWxzIDw8IGFyZzsKKyAgICB9CisKKyAgICB2b2lkIG15T3ZlcmxvYWRlZFNsb3QoY29uc3Qg
UURhdGVUaW1lICZhcmcpCisgICAgeworICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gMzI7
CisgICAgICAgIG1fYWN0dWFscyA8PCBhcmc7CisgICAgfQorCisgICAgdm9pZCBteU92ZXJsb2Fk
ZWRTbG90KGNvbnN0IFFEYXRlICZhcmcpCisgICAgeworICAgICAgICBtX3F0RnVuY3Rpb25JbnZv
a2VkID0gMzM7CisgICAgICAgIG1fYWN0dWFscyA8PCBhcmc7CisgICAgfQorCisgICAgdm9pZCBt
eU92ZXJsb2FkZWRTbG90KGNvbnN0IFFSZWdFeHAgJmFyZykKKyAgICB7CisgICAgICAgIG1fcXRG
dW5jdGlvbkludm9rZWQgPSAzNDsKKyAgICAgICAgbV9hY3R1YWxzIDw8IGFyZzsKKyAgICB9CisK
KyAgICB2b2lkIG15T3ZlcmxvYWRlZFNsb3QoY29uc3QgUVZhcmlhbnQgJmFyZykKKyAgICB7Cisg
ICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAzNTsKKyAgICAgICAgbV9hY3R1YWxzIDw8IGFy
ZzsKKyAgICB9CisKKyAgICB2b2lkIG15T3ZlcmxvYWRlZFNsb3QoY29uc3QgUVdlYkVsZW1lbnQg
JmFyZykKKyAgICB7CisgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAzNjsKKyAgICAgICAg
bV9hY3R1YWxzIDw8IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVdlYkVsZW1lbnQ+KGFyZyk7CisgICAg
fQorCitwcm90ZWN0ZWQgUV9TTE9UUzoKKyAgICB2b2lkIG15UHJvdGVjdGVkU2xvdCgpCisgICAg
eworICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gMzY7CisgICAgfQorCitwcml2YXRlIFFf
U0xPVFM6CisgICAgdm9pZCBteVByaXZhdGVTbG90KCkgeyB9CisKK1FfU0lHTkFMUzoKKyAgICB2
b2lkIG15U2lnbmFsKCk7CisgICAgdm9pZCBteVNpZ25hbFdpdGhJbnRBcmcoaW50KTsKKyAgICB2
b2lkIG15U2lnbmFsV2l0aERvdWJsZUFyZyhkb3VibGUpOworICAgIHZvaWQgbXlTaWduYWwyKGJv
b2wgYXJnID0gZmFsc2UpOworICAgIHZvaWQgbXlTaWduYWxXaXRoRGF0ZVRpbWVBcmcoUURhdGVU
aW1lKTsKKyAgICB2b2lkIG15U2lnbmFsV2l0aFJlZ2V4QXJnKFFSZWdFeHApOworCitwcml2YXRl
OgorICAgIGludCBtX2ludFZhbHVlOworICAgIFFWYXJpYW50IG1fdmFyaWFudFZhbHVlOworICAg
IFFWYXJpYW50TGlzdCBtX3ZhcmlhbnRMaXN0VmFsdWU7CisgICAgUVZhcmlhbnRNYXAgbV92YXJp
YW50TWFwVmFsdWU7CisgICAgUVN0cmluZyBtX3N0cmluZ1ZhbHVlOworICAgIFFTdHJpbmdMaXN0
IG1fc3RyaW5nTGlzdFZhbHVlOworICAgIFFCeXRlQXJyYXkgbV9ieXRlQXJyYXlWYWx1ZTsKKyAg
ICBRQnJ1c2ggbV9icnVzaFZhbHVlOworICAgIGRvdWJsZSBtX2hpZGRlblZhbHVlOworICAgIGlu
dCBtX3dyaXRlT25seVZhbHVlOworICAgIGludCBtX3JlYWRPbmx5VmFsdWU7CisgICAgUUtleVNl
cXVlbmNlIG1fc2hvcnRjdXQ7CisgICAgUVdlYkVsZW1lbnQgbV93ZWJFbGVtZW50OworICAgIEN1
c3RvbVR5cGUgbV9jdXN0b21UeXBlOworICAgIFFPYmplY3QqIG1fb2JqZWN0U3RhcjsKKyAgICBp
bnQgbV9xdEZ1bmN0aW9uSW52b2tlZDsKKyAgICBRVmFyaWFudExpc3QgbV9hY3R1YWxzOworfTsK
KworY2xhc3MgTXlXZWJFbGVtZW50U2xvdE9ubHlPYmplY3QgOiBwdWJsaWMgUU9iamVjdCB7Cisg
ICAgUV9PQkpFQ1QKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgdGFnTmFtZSBSRUFEIHRhZ05hbWUp
CitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBkb1NvbWV0aGluZ1dpdGhXZWJFbGVtZW50KGNvbnN0
IFFXZWJFbGVtZW50JiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgbV90YWdOYW1lID0gZWxlbWVu
dC50YWdOYW1lKCk7CisgICAgfQorCitwdWJsaWM6CisgICAgUVN0cmluZyB0YWdOYW1lKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhZ05hbWU7CisgICAgfQorcHJpdmF0ZToKKyAg
ICBRU3RyaW5nIG1fdGFnTmFtZTsKK307CisKK2NsYXNzIE15T3RoZXJRT2JqZWN0IDogcHVibGlj
IE15UU9iamVjdCB7CitwdWJsaWM6CisgICAgTXlPdGhlclFPYmplY3QoUU9iamVjdCogcGFyZW50
ID0gMCkKKyAgICAgICAgOiBNeVFPYmplY3QocGFyZW50KSB7IH0KK307CisKK2NsYXNzIHRzdF9R
T2JqZWN0QnJpZGdlIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoK
KyAgICB0c3RfUU9iamVjdEJyaWRnZSgpOworCitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBpbml0
KCk7CisgICAgdm9pZCBjbGVhbnVwKCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBnZXRT
ZXRTdGF0aWNQcm9wZXJ0eSgpOworICAgIHZvaWQgZ2V0U2V0RHluYW1pY1Byb3BlcnR5KCk7Cisg
ICAgdm9pZCBnZXRTZXRDaGlsZHJlbigpOworICAgIHZvaWQgY2FsbFF0SW52b2thYmxlKCk7Cisg
ICAgdm9pZCBjb25uZWN0QW5kRGlzY29ubmVjdCgpOworICAgIHZvaWQgb3ZlcnJpZGVJbnZva2Fi
bGUoKTsKKyAgICB2b2lkIG92ZXJsb2FkZWRTbG90cygpOworICAgIHZvaWQgd2ViRWxlbWVudFNs
b3RPbmx5KCk7CisgICAgdm9pZCBlbnVtZXJhdGVfZGF0YSgpOworICAgIHZvaWQgZW51bWVyYXRl
KCk7CisgICAgdm9pZCBvYmplY3REZWxldGVkKCk7CisgICAgdm9pZCB0eXBlQ29udmVyc2lvbigp
OworICAgIHZvaWQgYXJyYXlPYmplY3RFbnVtZXJhYmxlKCk7CisgICAgdm9pZCBkb21DeWNsZXMo
KTsKKyAgICB2b2lkIGpzQnl0ZUFycmF5KCk7CisgICAgdm9pZCBvd25lcnNoaXAoKTsKKyAgICB2
b2lkIG51bGxWYWx1ZSgpOworICAgIHZvaWQgcU9iamVjdFdyYXBwZXJXaXRoU2FtZUlkZW50aXR5
KCk7CisgICAgdm9pZCBpbnRyb3NwZWN0UXRNZXRob2RzX2RhdGEoKTsKKyAgICB2b2lkIGludHJv
c3BlY3RRdE1ldGhvZHMoKTsKKworcHJpdmF0ZToKKyAgICBRU3RyaW5nIGV2YWxKUyhjb25zdCBR
U3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgLy8gQ29udmVydCBhbiB1bmRlZmluZWQgcmV0dXJu
IHZhcmlhbnQgdG8gdGhlIHN0cmluZyAidW5kZWZpbmVkIgorICAgICAgICBRVmFyaWFudCByZXQg
PSBldmFsSlNWKHMpOworICAgICAgICBpZiAocmV0LnVzZXJUeXBlKCkgPT0gUU1ldGFUeXBlOjpW
b2lkKQorICAgICAgICAgICAgcmV0dXJuICJ1bmRlZmluZWQiOworICAgICAgICByZXR1cm4gcmV0
LnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgUVZhcmlhbnQgZXZhbEpTVihjb25zdCBRU3RyaW5n
JiBzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFnZS0+bWFpbkZyYW1lKCktPmV2YWx1YXRl
SmF2YVNjcmlwdChzKTsKKyAgICB9CisKKyAgICBRU3RyaW5nIGV2YWxKUyhjb25zdCBRU3RyaW5n
JiBzLCBRU3RyaW5nJiB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGV2YWxKU1YocywgdHlw
ZSkudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBRVmFyaWFudCBldmFsSlNWKGNvbnN0IFFTdHJp
bmcmIHMsIFFTdHJpbmcmIHR5cGUpCisgICAgeworICAgICAgICAvLyBBcyBhIHNwZWNpYWwgbWVh
c3VyZSwgaWYgd2UgZ2V0IGFuIGV4Y2VwdGlvbiB3ZSBzZXQgdGhlIHR5cGUgdG8gJ2Vycm9yJwor
ICAgICAgICAvLyAoaW4gZWNtYSwgYW4gRXJyb3Igb2JqZWN0IGhhcyB0eXBlb2Ygb2JqZWN0LCBi
dXQgcXRzY3JpcHQgaGFzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24pCisgICAgICAgIC8vIFNpbWls
YXJseSwgYW4gYXJyYXkgaXMgYW4gb2JqZWN0LCBidXQgd2UnZCBwcmVmZXIgdG8gaGF2ZSBhIHR5
cGUgb2YgJ2FycmF5JworICAgICAgICAvLyBBbHNvLCBjb25zaWRlciBhIFFNZXRhVHlwZTo6Vm9p
ZCBRVmFyaWFudCB0byBiZSB1bmRlZmluZWQKKyAgICAgICAgUVN0cmluZyBlc2NhcGVkID0gczsK
KyAgICAgICAgZXNjYXBlZC5yZXBsYWNlKCdcJycsICJcXCciKTsgLy8gRG9uJ3QgcHJlZXNjYXBl
IHlvdXIgc2luZ2xlIHF1b3RlcyEKKyAgICAgICAgUVN0cmluZyBjb2RlKCJ2YXIgcmV0dmFsdWU7
ICIKKyAgICAgICAgICAgICAgICAgICAgICJ2YXIgdHlwZXZhbHVlOyAiCisgICAgICAgICAgICAg
ICAgICAgICAidHJ5IHsgIgorICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR2YWx1ZSA9IGV2
YWwoJyUxJyk7ICIKKyAgICAgICAgICAgICAgICAgICAgICIgICAgdHlwZXZhbHVlID0gdHlwZW9m
IHJldHZhbHVlOyAiCisgICAgICAgICAgICAgICAgICAgICAiICAgIGlmIChyZXR2YWx1ZSBpbnN0
YW5jZW9mIEFycmF5KSAiCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB0eXBldmFsdWUg
PSAnYXJyYXknOyAiCisgICAgICAgICAgICAgICAgICAgICAifSBjYXRjaChlKSB7ICIKKyAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dmFsdWUgPSBlLm5hbWUgKyAnOiAnICsgZS5tZXNzYWdl
OyAiCisgICAgICAgICAgICAgICAgICAgICAiICAgIHR5cGV2YWx1ZSA9ICdlcnJvcic7ICIKKyAg
ICAgICAgICAgICAgICAgICAgICJ9Iik7CisgICAgICAgIGV2YWxKUyhjb2RlLmFyZyhlc2NhcGVk
KSk7CisKKyAgICAgICAgUVZhcmlhbnQgcmV0ID0gZXZhbEpTVigicmV0dmFsdWUiKTsKKyAgICAg
ICAgaWYgKHJldC51c2VyVHlwZSgpICE9IFFNZXRhVHlwZTo6Vm9pZCkKKyAgICAgICAgICAgIHR5
cGUgPSBldmFsSlMoInR5cGV2YWx1ZSIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJl
dCA9IFFTdHJpbmcoInVuZGVmaW5lZCIpOworICAgICAgICAgICAgdHlwZSA9IHNVbmRlZmluZWQ7
CisgICAgICAgIH0KKyAgICAgICAgZXZhbEpTKCJkZWxldGUgcmV0dmFsdWU7IGRlbGV0ZSB0eXBl
dmFsdWUiKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBjb25zdCBRU3RyaW5n
IHNUcnVlOworICAgIGNvbnN0IFFTdHJpbmcgc0ZhbHNlOworICAgIGNvbnN0IFFTdHJpbmcgc1Vu
ZGVmaW5lZDsKKyAgICBjb25zdCBRU3RyaW5nIHNBcnJheTsKKyAgICBjb25zdCBRU3RyaW5nIHNG
dW5jdGlvbjsKKyAgICBjb25zdCBRU3RyaW5nIHNFcnJvcjsKKyAgICBjb25zdCBRU3RyaW5nIHNT
dHJpbmc7CisgICAgY29uc3QgUVN0cmluZyBzT2JqZWN0OworICAgIGNvbnN0IFFTdHJpbmcgc051
bWJlcjsKKworcHJpdmF0ZToKKyAgICBRV2ViVmlldyogbV92aWV3OworICAgIFFXZWJQYWdlKiBt
X3BhZ2U7CisgICAgTXlRT2JqZWN0KiBtX215T2JqZWN0OworfTsKKwordHN0X1FPYmplY3RCcmlk
Z2U6OnRzdF9RT2JqZWN0QnJpZGdlKCkKKyAgICA6IHNUcnVlKCJ0cnVlIikKKyAgICAsIHNGYWxz
ZSgiZmFsc2UiKQorICAgICwgc1VuZGVmaW5lZCgidW5kZWZpbmVkIikKKyAgICAsIHNBcnJheSgi
YXJyYXkiKQorICAgICwgc0Z1bmN0aW9uKCJmdW5jdGlvbiIpCisgICAgLCBzRXJyb3IoImVycm9y
IikKKyAgICAsIHNTdHJpbmcoInN0cmluZyIpCisgICAgLCBzT2JqZWN0KCJvYmplY3QiKQorICAg
ICwgc051bWJlcigibnVtYmVyIikKK3sKK30KKwordm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6aW5p
dCgpCit7CisgICAgbV92aWV3ID0gbmV3IFFXZWJWaWV3KCk7CisgICAgbV9wYWdlID0gbV92aWV3
LT5wYWdlKCk7CisgICAgbV9teU9iamVjdCA9IG5ldyBNeVFPYmplY3QoKTsKKyAgICBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoIm15T2JqZWN0IiwgbV9t
eU9iamVjdCk7Cit9CisKK3ZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6OmNsZWFudXAoKQoreworICAg
IGRlbGV0ZSBtX3ZpZXc7CisgICAgZGVsZXRlIG1fbXlPYmplY3Q7Cit9CisKK3ZvaWQgdHN0X1FP
YmplY3RCcmlkZ2U6OmdldFNldFN0YXRpY1Byb3BlcnR5KCkKK3sKKyAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLT5zZXRIdG1sKCI8aHRtbD48aGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIpOworICAg
IFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lm5vU3VjaFByb3BlcnR5IiksIHNVbmRl
ZmluZWQpOworCisgICAgLy8gaW5pdGlhbCB2YWx1ZSAoc2V0IGluIE15UU9iamVjdCBjb25zdHJ1
Y3RvcikKKyAgICB7CisgICAgICAgIFFTdHJpbmcgdHlwZTsKKyAgICAgICAgUVZhcmlhbnQgcmV0
ID0gZXZhbEpTVigibXlPYmplY3QuaW50UHJvcGVydHkiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBB
UkUodHlwZSwgc051bWJlcik7CisgICAgICAgIFFDT01QQVJFKHJldC50eXBlKCksIFFWYXJpYW50
OjpEb3VibGUpOworICAgICAgICBRQ09NUEFSRShyZXQudG9JbnQoKSwgMTIzKTsKKyAgICB9Cisg
ICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5pbnRQcm9wZXJ0eSA9PT0gMTIzLjAiKSwgc1Ry
dWUpOworCisgICAgeworICAgICAgICBRU3RyaW5nIHR5cGU7CisgICAgICAgIFFWYXJpYW50IHJl
dCA9IGV2YWxKU1YoIm15T2JqZWN0LnZhcmlhbnRQcm9wZXJ0eSIsIHR5cGUpOworICAgICAgICBR
Q09NUEFSRSh0eXBlLCBzU3RyaW5nKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LnR5cGUoKSwgUVZh
cmlhbnQ6OlN0cmluZyk7CisgICAgICAgIFFDT01QQVJFKHJldC50b1N0cmluZygpLCBRTGF0aW4x
U3RyaW5nKCJmb28iKSk7CisgICAgfQorICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QudmFy
aWFudFByb3BlcnR5ID09ICdmb28nIiksIHNUcnVlKTsKKworICAgIHsKKyAgICAgICAgUVN0cmlu
ZyB0eXBlOworICAgICAgICBRVmFyaWFudCByZXQgPSBldmFsSlNWKCJteU9iamVjdC5zdHJpbmdQ
cm9wZXJ0eSIsIHR5cGUpOworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzU3RyaW5nKTsKKyAgICAg
ICAgUUNPTVBBUkUocmV0LnR5cGUoKSwgUVZhcmlhbnQ6OlN0cmluZyk7CisgICAgICAgIFFDT01Q
QVJFKHJldC50b1N0cmluZygpLCBRTGF0aW4xU3RyaW5nKCJiYXIiKSk7CisgICAgfQorICAgIFFD
T01QQVJFKGV2YWxKUygibXlPYmplY3Quc3RyaW5nUHJvcGVydHkgPT09ICdiYXInIiksIHNUcnVl
KTsKKworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRVmFyaWFudCByZXQg
PSBldmFsSlNWKCJteU9iamVjdC52YXJpYW50TGlzdFByb3BlcnR5IiwgdHlwZSk7CisgICAgICAg
IFFDT01QQVJFKHR5cGUsIHNBcnJheSk7CisgICAgICAgIFFDT01QQVJFKHJldC50eXBlKCksIFFW
YXJpYW50OjpMaXN0KTsKKyAgICAgICAgUVZhcmlhbnRMaXN0IHZsID0gcmV0LnZhbHVlPFFWYXJp
YW50TGlzdD4oKTsKKyAgICAgICAgUUNPTVBBUkUodmwuc2l6ZSgpLCAyKTsKKyAgICAgICAgUUNP
TVBBUkUodmwuYXQoMCkudG9JbnQoKSwgMTIzKTsKKyAgICAgICAgUUNPTVBBUkUodmwuYXQoMSku
dG9TdHJpbmcoKSwgUUxhdGluMVN0cmluZygiZm9vIikpOworICAgIH0KKyAgICBRQ09NUEFSRShl
dmFsSlMoIm15T2JqZWN0LnZhcmlhbnRMaXN0UHJvcGVydHkubGVuZ3RoID09PSAyIiksIHNUcnVl
KTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnZhcmlhbnRMaXN0UHJvcGVydHlbMF0g
PT09IDEyMyIpLCBzVHJ1ZSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC52YXJpYW50
TGlzdFByb3BlcnR5WzFdID09PSAnZm9vJyIpLCBzVHJ1ZSk7CisKKyAgICB7CisgICAgICAgIFFT
dHJpbmcgdHlwZTsKKyAgICAgICAgUVZhcmlhbnQgcmV0ID0gZXZhbEpTVigibXlPYmplY3QudmFy
aWFudE1hcFByb3BlcnR5IiwgdHlwZSk7CisgICAgICAgIFFDT01QQVJFKHR5cGUsIHNPYmplY3Qp
OworICAgICAgICBRQ09NUEFSRShyZXQudHlwZSgpLCBRVmFyaWFudDo6TWFwKTsKKyAgICAgICAg
UVZhcmlhbnRNYXAgdm0gPSByZXQudmFsdWU8UVZhcmlhbnRNYXA+KCk7CisgICAgICAgIFFDT01Q
QVJFKHZtLnNpemUoKSwgMyk7CisgICAgICAgIFFDT01QQVJFKHZtLnZhbHVlKCJhIikudG9JbnQo
KSwgMTIzKTsKKyAgICAgICAgUUNPTVBBUkUodm0udmFsdWUoImIiKS50b1N0cmluZygpLCBRTGF0
aW4xU3RyaW5nKCJmb28iKSk7CisgICAgICAgIFFDT01QQVJFKHZtLnZhbHVlKCJjIikudmFsdWU8
UU9iamVjdCo+KCksIHN0YXRpY19jYXN0PFFPYmplY3QqPihtX215T2JqZWN0KSk7CisgICAgfQor
ICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QudmFyaWFudE1hcFByb3BlcnR5LmEgPT09IDEy
MyIpLCBzVHJ1ZSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC52YXJpYW50TWFwUHJv
cGVydHkuYiA9PT0gJ2ZvbyciKSwgc1RydWUpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmpl
Y3QudmFyaWFudE1hcFByb3BlcnR5LmMudmFyaWFudE1hcFByb3BlcnR5LmIgPT09ICdmb28nIiks
IHNUcnVlKTsKKworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRVmFyaWFu
dCByZXQgPSBldmFsSlNWKCJteU9iamVjdC5zdHJpbmdMaXN0UHJvcGVydHkiLCB0eXBlKTsKKyAg
ICAgICAgUUNPTVBBUkUodHlwZSwgc0FycmF5KTsKKyAgICAgICAgUUNPTVBBUkUocmV0LnR5cGUo
KSwgUVZhcmlhbnQ6Okxpc3QpOworICAgICAgICBRVmFyaWFudExpc3QgdmwgPSByZXQudmFsdWU8
UVZhcmlhbnRMaXN0PigpOworICAgICAgICBRQ09NUEFSRSh2bC5zaXplKCksIDIpOworICAgICAg
ICBRQ09NUEFSRSh2bC5hdCgwKS50b1N0cmluZygpLCBRTGF0aW4xU3RyaW5nKCJ6aWciKSk7Cisg
ICAgICAgIFFDT01QQVJFKHZsLmF0KDEpLnRvU3RyaW5nKCksIFFMYXRpbjFTdHJpbmcoInphZyIp
KTsKKyAgICB9CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5zdHJpbmdMaXN0UHJvcGVy
dHkubGVuZ3RoID09PSAyIiksIHNUcnVlKTsKKyAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBt
eU9iamVjdC5zdHJpbmdMaXN0UHJvcGVydHlbMF0iKSwgc1N0cmluZyk7CisgICAgUUNPTVBBUkUo
ZXZhbEpTKCJteU9iamVjdC5zdHJpbmdMaXN0UHJvcGVydHlbMF0iKSwgUUxhdGluMVN0cmluZygi
emlnIikpOworICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0LnN0cmluZ0xpc3RQ
cm9wZXJ0eVsxXSIpLCBzU3RyaW5nKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnN0
cmluZ0xpc3RQcm9wZXJ0eVsxXSIpLCBRTGF0aW4xU3RyaW5nKCJ6YWciKSk7CisKKyAgICAvLyBw
cm9wZXJ0eSBjaGFuZ2UgaW4gQysrIHNob3VsZCBiZSByZWZsZWN0ZWQgaW4gc2NyaXB0CisgICAg
bV9teU9iamVjdC0+c2V0SW50UHJvcGVydHkoNDU2KTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15
T2JqZWN0LmludFByb3BlcnR5ID09IDQ1NiIpLCBzVHJ1ZSk7CisgICAgbV9teU9iamVjdC0+c2V0
SW50UHJvcGVydHkoNzg5KTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LmludFByb3Bl
cnR5ID09IDc4OSIpLCBzVHJ1ZSk7CisKKyAgICBtX215T2JqZWN0LT5zZXRWYXJpYW50UHJvcGVy
dHkoUUxhdGluMVN0cmluZygiYmFyIikpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Qu
dmFyaWFudFByb3BlcnR5ID09PSAnYmFyJyIpLCBzVHJ1ZSk7CisgICAgbV9teU9iamVjdC0+c2V0
VmFyaWFudFByb3BlcnR5KDQyKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnZhcmlh
bnRQcm9wZXJ0eSA9PT0gNDIiKSwgc1RydWUpOworICAgIG1fbXlPYmplY3QtPnNldFZhcmlhbnRQ
cm9wZXJ0eShRVmFyaWFudDo6ZnJvbVZhbHVlKFFCcnVzaCgpKSk7CisKKyAgICBtX215T2JqZWN0
LT5zZXRTdHJpbmdQcm9wZXJ0eShRTGF0aW4xU3RyaW5nKCJiYXoiKSk7CisgICAgUUNPTVBBUkUo
ZXZhbEpTKCJteU9iamVjdC5zdHJpbmdQcm9wZXJ0eSA9PT0gJ2JheiciKSwgc1RydWUpOworICAg
IG1fbXlPYmplY3QtPnNldFN0cmluZ1Byb3BlcnR5KFFMYXRpbjFTdHJpbmcoInphYiIpKTsKKyAg
ICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnN0cmluZ1Byb3BlcnR5ID09PSAnemFiJyIpLCBz
VHJ1ZSk7CisKKyAgICAvLyBwcm9wZXJ0eSBjaGFuZ2UgaW4gc2NyaXB0IHNob3VsZCBiZSByZWZs
ZWN0ZWQgaW4gQysrCisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5pbnRQcm9wZXJ0eSA9
IDEyMyIpLCBRTGF0aW4xU3RyaW5nKCIxMjMiKSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9i
amVjdC5pbnRQcm9wZXJ0eSA9PSAxMjMiKSwgc1RydWUpOworICAgIFFDT01QQVJFKG1fbXlPYmpl
Y3QtPmludFByb3BlcnR5KCksIDEyMyk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5p
bnRQcm9wZXJ0eSA9ICdjaWFvISc7IgorICAgICAgICAgICAgICAgICAgICAibXlPYmplY3QuaW50
UHJvcGVydHkgPT0gMCIpLCBzVHJ1ZSk7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+aW50UHJv
cGVydHkoKSwgMCk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5pbnRQcm9wZXJ0eSA9
ICcxMjMnOyIKKyAgICAgICAgICAgICAgICAgICAgIm15T2JqZWN0LmludFByb3BlcnR5ID09IDEy
MyIpLCBzVHJ1ZSk7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+aW50UHJvcGVydHkoKSwgMTIz
KTsKKworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Quc3RyaW5nUHJvcGVydHkgPSAnY2lh
byciKSwgUUxhdGluMVN0cmluZygiY2lhbyIpKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2Jq
ZWN0LnN0cmluZ1Byb3BlcnR5IiksIFFMYXRpbjFTdHJpbmcoImNpYW8iKSk7CisgICAgUUNPTVBB
UkUobV9teU9iamVjdC0+c3RyaW5nUHJvcGVydHkoKSwgUUxhdGluMVN0cmluZygiY2lhbyIpKTsK
KyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnN0cmluZ1Byb3BlcnR5ID0gMTIzOyIKKyAg
ICAgICAgICAgICAgICAgICAgIm15T2JqZWN0LnN0cmluZ1Byb3BlcnR5IiksIFFMYXRpbjFTdHJp
bmcoIjEyMyIpKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5zdHJpbmdQcm9wZXJ0eSgpLCBR
TGF0aW4xU3RyaW5nKCIxMjMiKSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5zdHJp
bmdQcm9wZXJ0eSA9IG51bGwiKSwgUVN0cmluZygpKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15
T2JqZWN0LnN0cmluZ1Byb3BlcnR5IiksIFFTdHJpbmcoKSk7CisgICAgUUNPTVBBUkUobV9teU9i
amVjdC0+c3RyaW5nUHJvcGVydHkoKSwgUVN0cmluZygpKTsKKyAgICBRQ09NUEFSRShldmFsSlMo
Im15T2JqZWN0LnN0cmluZ1Byb3BlcnR5ID0gdW5kZWZpbmVkIiksIHNVbmRlZmluZWQpOworICAg
IFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Quc3RyaW5nUHJvcGVydHkiKSwgUVN0cmluZygpKTsK
KyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5zdHJpbmdQcm9wZXJ0eSgpLCBRU3RyaW5nKCkpOwor
CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC52YXJpYW50UHJvcGVydHkgPSBuZXcgTnVt
YmVyKDEyMzQpOyIKKyAgICAgICAgICAgICAgICAgICAgIm15T2JqZWN0LnZhcmlhbnRQcm9wZXJ0
eSIpLnRvRG91YmxlKCksIDEyMzQuMCk7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+dmFyaWFu
dFByb3BlcnR5KCkudG9Eb3VibGUoKSwgMTIzNC4wKTsKKworICAgIFFDT01QQVJFKGV2YWxKUygi
bXlPYmplY3QudmFyaWFudFByb3BlcnR5ID0gbmV3IEJvb2xlYW4oMTIzNCk7IgorICAgICAgICAg
ICAgICAgICAgICAibXlPYmplY3QudmFyaWFudFByb3BlcnR5IiksIHNUcnVlKTsKKyAgICBRQ09N
UEFSRShtX215T2JqZWN0LT52YXJpYW50UHJvcGVydHkoKS50b0Jvb2woKSwgdHJ1ZSk7CisKKyAg
ICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnZhcmlhbnRQcm9wZXJ0eSA9IG51bGw7IgorICAg
ICAgICAgICAgICAgICAgICAibXlPYmplY3QudmFyaWFudFByb3BlcnR5LnZhbHVlT2YoKSIpLCBz
VW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT52YXJpYW50UHJvcGVydHkoKSwg
UVZhcmlhbnQoKSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC52YXJpYW50UHJvcGVy
dHkgPSB1bmRlZmluZWQ7IgorICAgICAgICAgICAgICAgICAgICAibXlPYmplY3QudmFyaWFudFBy
b3BlcnR5LnZhbHVlT2YoKSIpLCBzVW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0
LT52YXJpYW50UHJvcGVydHkoKSwgUVZhcmlhbnQoKSk7CisKKyAgICBRQ09NUEFSRShldmFsSlMo
Im15T2JqZWN0LnZhcmlhbnRQcm9wZXJ0eSA9ICdmb28nOyIKKyAgICAgICAgICAgICAgICAgICAg
Im15T2JqZWN0LnZhcmlhbnRQcm9wZXJ0eS52YWx1ZU9mKCkiKSwgUUxhdGluMVN0cmluZygiZm9v
IikpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnZhcmlhbnRQcm9wZXJ0eSgpLCBRVmFyaWFu
dChRTGF0aW4xU3RyaW5nKCJmb28iKSkpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Qu
dmFyaWFudFByb3BlcnR5ID0gNDI7IgorICAgICAgICAgICAgICAgICAgICAibXlPYmplY3QudmFy
aWFudFByb3BlcnR5IikudG9Eb3VibGUoKSwgNDIuMCk7CisgICAgUUNPTVBBUkUobV9teU9iamVj
dC0+dmFyaWFudFByb3BlcnR5KCkudG9Eb3VibGUoKSwgNDIuMCk7CisKKyAgICBRQ09NUEFSRShl
dmFsSlMoIm15T2JqZWN0LnZhcmlhbnRMaXN0UHJvcGVydHkgPSBbMSwgJ3R3bycsIHRydWVdOyIK
KyAgICAgICAgICAgICAgICAgICAgIm15T2JqZWN0LnZhcmlhbnRMaXN0UHJvcGVydHkubGVuZ3Ro
ID09IDMiKSwgc1RydWUpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QudmFyaWFudExp
c3RQcm9wZXJ0eVswXSA9PT0gMSIpLCBzVHJ1ZSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9i
amVjdC52YXJpYW50TGlzdFByb3BlcnR5WzFdIiksIFFMYXRpbjFTdHJpbmcoInR3byIpKTsKKyAg
ICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnZhcmlhbnRMaXN0UHJvcGVydHlbMl0gPT09IHRy
dWUiKSwgc1RydWUpOworCisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5zdHJpbmdMaXN0
UHJvcGVydHkgPSBbMSwgJ3R3bycsIHRydWVdOyIKKyAgICAgICAgICAgICAgICAgICAgIm15T2Jq
ZWN0LnN0cmluZ0xpc3RQcm9wZXJ0eS5sZW5ndGggPT0gMyIpLCBzVHJ1ZSk7CisgICAgUUNPTVBB
UkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3Quc3RyaW5nTGlzdFByb3BlcnR5WzBdIiksIHNTdHJp
bmcpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Quc3RyaW5nTGlzdFByb3BlcnR5WzBd
ID09ICcxJyIpLCBzVHJ1ZSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3Qu
c3RyaW5nTGlzdFByb3BlcnR5WzFdIiksIHNTdHJpbmcpOworICAgIFFDT01QQVJFKGV2YWxKUygi
bXlPYmplY3Quc3RyaW5nTGlzdFByb3BlcnR5WzFdIiksIFFMYXRpbjFTdHJpbmcoInR3byIpKTsK
KyAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5zdHJpbmdMaXN0UHJvcGVydHlb
Ml0iKSwgc1N0cmluZyk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5zdHJpbmdMaXN0
UHJvcGVydHlbMl0iKSwgUUxhdGluMVN0cmluZygidHJ1ZSIpKTsKKyAgICBldmFsSlMoIm15T2Jq
ZWN0LndlYkVsZW1lbnRQcm9wZXJ0eT1kb2N1bWVudC5ib2R5OyIpOworICAgIFFDT01QQVJFKGV2
YWxKUygibXlPYmplY3Qud2ViRWxlbWVudFByb3BlcnR5LnRhZ05hbWUiKSwgUUxhdGluMVN0cmlu
ZygiQk9EWSIpKTsKKworICAgIC8vIHRyeSB0byBkZWxldGUKKyAgICBRQ09NUEFSRShldmFsSlMo
ImRlbGV0ZSBteU9iamVjdC5pbnRQcm9wZXJ0eSIpLCBzRmFsc2UpOworICAgIFFDT01QQVJFKGV2
YWxKUygibXlPYmplY3QuaW50UHJvcGVydHkgPT0gMTIzIiksIHNUcnVlKTsKKworICAgIFFDT01Q
QVJFKGV2YWxKUygiZGVsZXRlIG15T2JqZWN0LnZhcmlhbnRQcm9wZXJ0eSIpLCBzRmFsc2UpOwor
ICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QudmFyaWFudFByb3BlcnR5IikudG9Eb3VibGUo
KSwgNDIuMCk7CisKKyAgICAvLyBjdXN0b20gcHJvcGVydHkKKyAgICBRQ09NUEFSRShldmFsSlMo
Im15T2JqZWN0LmN1c3RvbVByb3BlcnR5IiksIHNVbmRlZmluZWQpOworICAgIFFDT01QQVJFKGV2
YWxKUygibXlPYmplY3QuY3VzdG9tUHJvcGVydHkgPSAxMjM7IgorICAgICAgICAgICAgICAgICAg
ICAibXlPYmplY3QuY3VzdG9tUHJvcGVydHkgPT0gMTIzIiksIHNUcnVlKTsKKyAgICBRVmFyaWFu
dCB2ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+ZXZhbHVhdGVKYXZhU2NyaXB0KCJteU9iamVjdC5j
dXN0b21Qcm9wZXJ0eSIpOworICAgIFFDT01QQVJFKHYudHlwZSgpLCBRVmFyaWFudDo6RG91Ymxl
KTsKKyAgICBRQ09NUEFSRSh2LnRvSW50KCksIDEyMyk7CisKKyAgICAvLyBub24tc2NyaXB0YWJs
ZSBwcm9wZXJ0eQorICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPmhpZGRlblByb3BlcnR5KCksIDQ1
Ni4wKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LmhpZGRlblByb3BlcnR5IiksIHNV
bmRlZmluZWQpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QuaGlkZGVuUHJvcGVydHkg
PSAxMjM7IgorICAgICAgICAgICAgICAgICAgICAibXlPYmplY3QuaGlkZGVuUHJvcGVydHkgPT0g
MTIzIiksIHNUcnVlKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5oaWRkZW5Qcm9wZXJ0eSgp
LCA0NTYuMCk7CisKKyAgICAvLyB3cml0ZS1vbmx5IHByb3BlcnR5CisgICAgUUNPTVBBUkUobV9t
eU9iamVjdC0+d3JpdGVPbmx5UHJvcGVydHkoKSwgNzg5KTsKKyAgICBRQ09NUEFSRShldmFsSlMo
InR5cGVvZiBteU9iamVjdC53cml0ZU9ubHlQcm9wZXJ0eSIpLCBzVW5kZWZpbmVkKTsKKyAgICBR
Q09NUEFSRShldmFsSlMoIm15T2JqZWN0LndyaXRlT25seVByb3BlcnR5ID0gMTIzOyIKKyAgICAg
ICAgICAgICAgICAgICAgInR5cGVvZiBteU9iamVjdC53cml0ZU9ubHlQcm9wZXJ0eSIpLCBzVW5k
ZWZpbmVkKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT53cml0ZU9ubHlQcm9wZXJ0eSgpLCAx
MjMpOworCisgICAgLy8gcmVhZC1vbmx5IHByb3BlcnR5CisgICAgUUNPTVBBUkUobV9teU9iamVj
dC0+cmVhZE9ubHlQcm9wZXJ0eSgpLCA5ODcpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmpl
Y3QucmVhZE9ubHlQcm9wZXJ0eSA9PSA5ODciKSwgc1RydWUpOworICAgIFFDT01QQVJFKGV2YWxK
UygibXlPYmplY3QucmVhZE9ubHlQcm9wZXJ0eSA9IDY1NDsiCisgICAgICAgICAgICAgICAgICAg
ICJteU9iamVjdC5yZWFkT25seVByb3BlcnR5ID09IDk4NyIpLCBzVHJ1ZSk7CisgICAgUUNPTVBB
UkUobV9teU9iamVjdC0+cmVhZE9ubHlQcm9wZXJ0eSgpLCA5ODcpOworCisgICAgLy8gUU9iamVj
dCogcHJvcGVydHkKKyAgICBtX215T2JqZWN0LT5zZXRPYmplY3RTdGFyUHJvcGVydHkoMCk7Cisg
ICAgUUNPTVBBUkUobV9teU9iamVjdC0+b2JqZWN0U3RhclByb3BlcnR5KCksIChRT2JqZWN0Kikw
KTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm9iamVjdFN0YXJQcm9wZXJ0eSA9PSBu
dWxsIiksIHNUcnVlKTsKKyAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5vYmpl
Y3RTdGFyUHJvcGVydHkiKSwgc09iamVjdCk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJCb29sZWFu
KG15T2JqZWN0Lm9iamVjdFN0YXJQcm9wZXJ0eSkiKSwgc0ZhbHNlKTsKKyAgICBRQ09NUEFSRShl
dmFsSlMoIlN0cmluZyhteU9iamVjdC5vYmplY3RTdGFyUHJvcGVydHkpID09ICdudWxsJyIpLCBz
VHJ1ZSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5vYmplY3RTdGFyUHJvcGVydHku
b2JqZWN0U3RhclByb3BlcnR5IiksCisgICAgICAgIHNVbmRlZmluZWQpOworICAgIG1fbXlPYmpl
Y3QtPnNldE9iamVjdFN0YXJQcm9wZXJ0eSh0aGlzKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15
T2JqZWN0Lm9iamVjdFN0YXJQcm9wZXJ0eSAhPSBudWxsIiksIHNUcnVlKTsKKyAgICBRQ09NUEFS
RShldmFsSlMoInR5cGVvZiBteU9iamVjdC5vYmplY3RTdGFyUHJvcGVydHkiKSwgc09iamVjdCk7
CisgICAgUUNPTVBBUkUoZXZhbEpTKCJCb29sZWFuKG15T2JqZWN0Lm9iamVjdFN0YXJQcm9wZXJ0
eSkiKSwgc1RydWUpOworICAgIFFDT01QQVJFKGV2YWxKUygiU3RyaW5nKG15T2JqZWN0Lm9iamVj
dFN0YXJQcm9wZXJ0eSkgIT0gJ251bGwnIiksIHNUcnVlKTsKK30KKwordm9pZCB0c3RfUU9iamVj
dEJyaWRnZTo6Z2V0U2V0RHluYW1pY1Byb3BlcnR5KCkKK3sKKyAgICAvLyBpbml0aWFsbHkgdGhl
IG9iamVjdCBkb2VzIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eQorICAgIC8vIEluIFdlYktpdCwgUnVu
dGltZU9iamVjdHMgZG8gbm90IGluaGVyaXQgT2JqZWN0LCBzbyBkb24ndCBoYXZlIGhhc093blBy
b3BlcnR5CisKKyAgICAvLyBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lmhhc093blByb3BlcnR5
KCdkeW5hbWljUHJvcGVydHknKSIpLCBzRmFsc2UpOworICAgIFFDT01QQVJFKGV2YWxKUygidHlw
ZW9mIG15T2JqZWN0LmR5bmFtaWNQcm9wZXJ0eSIpLCBzVW5kZWZpbmVkKTsKKworICAgIC8vIGFk
ZCBhIGR5bmFtaWMgcHJvcGVydHkgaW4gQysrCisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+c2V0
UHJvcGVydHkoImR5bmFtaWNQcm9wZXJ0eSIsIDEyMyksIGZhbHNlKTsKKyAgICAvLyBRQ09NUEFS
RShldmFsSlMoIm15T2JqZWN0Lmhhc093blByb3BlcnR5KCdkeW5hbWljUHJvcGVydHknKSIpLCBz
VHJ1ZSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3QuZHluYW1pY1Byb3Bl
cnR5ICE9ICd1bmRlZmluZWQnIiksIHNUcnVlKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2Jq
ZWN0LmR5bmFtaWNQcm9wZXJ0eSA9PSAxMjMiKSwgc1RydWUpOworCisgICAgLy8gcHJvcGVydHkg
Y2hhbmdlIGluIHNjcmlwdCBzaG91bGQgYmUgcmVmbGVjdGVkIGluIEMrKworICAgIFFDT01QQVJF
KGV2YWxKUygibXlPYmplY3QuZHluYW1pY1Byb3BlcnR5ID0gJ2Zvbyc7IgorICAgICAgICAgICAg
ICAgICAgICAibXlPYmplY3QuZHluYW1pY1Byb3BlcnR5IiksIFFMYXRpbjFTdHJpbmcoImZvbyIp
KTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5wcm9wZXJ0eSgiZHluYW1pY1Byb3BlcnR5Iiku
dG9TdHJpbmcoKSwgUUxhdGluMVN0cmluZygiZm9vIikpOworCisgICAgLy8gZGVsZXRlIHRoZSBw
cm9wZXJ0eSAoWEZBSUwgLSBjYW4ndCBkZWxldGUgcHJvcGVydGllcykKKyAgICBRRVhQRUNUX0ZB
SUwoIiIsICJjYW4ndCBkZWxldGUgcHJvcGVydGllcyIsIENvbnRpbnVlKTsKKyAgICBRQ09NUEFS
RShldmFsSlMoImRlbGV0ZSBteU9iamVjdC5keW5hbWljUHJvcGVydHkiKSwgc1RydWUpOworICAg
IC8qCisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cHJvcGVydHkoImR5bmFtaWNQcm9wZXJ0eSIp
LmlzVmFsaWQoKSwgZmFsc2UpOworICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0
LmR5bmFtaWNQcm9wZXJ0eSIpLCBzVW5kZWZpbmVkKTsKKyAgICAvLyAgICBRQ09NUEFSRShldmFs
SlMoIm15T2JqZWN0Lmhhc093blByb3BlcnR5KCdkeW5hbWljUHJvcGVydHknKSIpLCBzRmFsc2Up
OworICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0LmR5bmFtaWNQcm9wZXJ0eSIp
LCBzVW5kZWZpbmVkKTsKKyAgICAqLworfQorCit2b2lkIHRzdF9RT2JqZWN0QnJpZGdlOjpnZXRT
ZXRDaGlsZHJlbigpCit7CisgICAgLy8gaW5pdGlhbGx5IHRoZSBvYmplY3QgZG9lcyBub3QgaGF2
ZSB0aGUgY2hpbGQKKyAgICAvLyAoYWdhaW4sIG5vIGhhc093blByb3BlcnR5KQorCisgICAgLy8g
UUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5oYXNPd25Qcm9wZXJ0eSgnY2hpbGQnKSIpLCBzRmFs
c2UpOworICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0LmNoaWxkIiksIHNVbmRl
ZmluZWQpOworCisgICAgLy8gYWRkIGEgY2hpbGQKKyAgICBNeVFPYmplY3QqIGNoaWxkID0gbmV3
IE15UU9iamVjdChtX215T2JqZWN0KTsKKyAgICBjaGlsZC0+c2V0T2JqZWN0TmFtZSgiY2hpbGQi
KTsKKy8vICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lmhhc093blByb3BlcnR5KCdjaGlsZCcp
IiksIHNUcnVlKTsKKyAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5jaGlsZCAh
PSAndW5kZWZpbmVkJyIpLCBzVHJ1ZSk7CisKKyAgICAvLyBhZGQgYSBncmFuZGNoaWxkCisgICAg
TXlRT2JqZWN0KiBncmFuZENoaWxkID0gbmV3IE15UU9iamVjdChjaGlsZCk7CisgICAgZ3JhbmRD
aGlsZC0+c2V0T2JqZWN0TmFtZSgiZ3JhbmRDaGlsZCIpOworLy8gIFFDT01QQVJFKGV2YWxKUygi
bXlPYmplY3QuY2hpbGQuaGFzT3duUHJvcGVydHkoJ2dyYW5kQ2hpbGQnKSIpLCBzVHJ1ZSk7Cisg
ICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3QuY2hpbGQuZ3JhbmRDaGlsZCAhPSAn
dW5kZWZpbmVkJyIpLCBzVHJ1ZSk7CisKKyAgICAvLyBkZWxldGUgZ3JhbmRjaGlsZAorICAgIGRl
bGV0ZSBncmFuZENoaWxkOworLy8gIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QuY2hpbGQuaGFz
T3duUHJvcGVydHkoJ2dyYW5kQ2hpbGQnKSIpLCBzRmFsc2UpOworICAgIFFDT01QQVJFKGV2YWxK
UygidHlwZW9mIG15T2JqZWN0LmNoaWxkLmdyYW5kQ2hpbGQgPT0gJ3VuZGVmaW5lZCciKSwgc1Ry
dWUpOworCisgICAgLy8gZGVsZXRlIGNoaWxkCisgICAgZGVsZXRlIGNoaWxkOworLy8gIFFDT01Q
QVJFKGV2YWxKUygibXlPYmplY3QuaGFzT3duUHJvcGVydHkoJ2NoaWxkJykiKSwgc0ZhbHNlKTsK
KyAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5jaGlsZCA9PSAndW5kZWZpbmVk
JyIpLCBzVHJ1ZSk7Cit9CisKK1FfREVDTEFSRV9NRVRBVFlQRShRVmVjdG9yPGludD4pCitRX0RF
Q0xBUkVfTUVUQVRZUEUoUVZlY3Rvcjxkb3VibGU+KQorUV9ERUNMQVJFX01FVEFUWVBFKFFWZWN0
b3I8UVN0cmluZz4pCisKK3ZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6OmNhbGxRdEludm9rYWJsZSgp
Cit7CisgICAgcVJlZ2lzdGVyTWV0YVR5cGU8UU9iamVjdExpc3Q+KCk7CisKKyAgICBtX215T2Jq
ZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBl
b2YgbXlPYmplY3QubXlJbnZva2FibGUoKSIpLCBzVW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRSht
X215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAwKTsKKyAgICBRQ09NUEFSRShtX215T2Jq
ZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLCBRVmFyaWFudExpc3QoKSk7CisKKyAgICAvLyBleHRy
YSBhcmd1bWVudHMgc2hvdWxkIHNpbGVudGx5IGJlIGlnbm9yZWQKKyAgICBtX215T2JqZWN0LT5y
ZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlP
YmplY3QubXlJbnZva2FibGUoMTAsIDIwLCAzMCkiKSwgc1VuZGVmaW5lZCk7CisgICAgUUNPTVBB
UkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMCk7CisgICAgUUNPTVBBUkUobV9t
eU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKSwgUVZhcmlhbnRMaXN0KCkpOworCisgICAgbV9t
eU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOworICAgIFFDT01QQVJFKGV2YWxKUygi
dHlwZW9mIG15T2JqZWN0Lm15SW52b2thYmxlV2l0aEludEFyZygxMjMpIiksIHNVbmRlZmluZWQp
OworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDEpOworICAg
IFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKKyAg
ICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvSW50KCks
IDEyMyk7CisKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAg
UUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3QubXlJbnZva2FibGVXaXRoSW50QXJnKCcx
MjMnKSIpLCBzVW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9u
SW52b2tlZCgpLCAxKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFs
cygpLnNpemUoKSwgMSk7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVh
bHMoKS5hdCgwKS50b0ludCgpLCAxMjMpOworCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0
aW9uSW52b2tlZCgpOworICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lm15SW52
b2thYmxlV2l0aExvbmdsb25nQXJnKDEyMykiKSwgc1VuZGVmaW5lZCk7CisgICAgUUNPTVBBUkUo
bV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMik7CisgICAgUUNPTVBBUkUobV9teU9i
amVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOworICAgIFFDT01QQVJFKG1fbXlP
YmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9Mb25nTG9uZygpLCBxbG9uZ2xvbmco
MTIzKSk7CisKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAg
UUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3QubXlJbnZva2FibGVXaXRoRmxvYXRBcmco
MTIzLjUpIiksIHNVbmRlZmluZWQpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rp
b25JbnZva2VkKCksIDMpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1
YWxzKCkuc2l6ZSgpLCAxKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0
dWFscygpLmF0KDApLnRvRG91YmxlKCksIDEyMy41KTsKKworICAgIG1fbXlPYmplY3QtPnJlc2V0
UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVj
dC5teUludm9rYWJsZVdpdGhEb3VibGVBcmcoMTIzLjUpIiksIHNVbmRlZmluZWQpOworICAgIFFD
T01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDQpOworICAgIFFDT01QQVJF
KG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKKyAgICBRQ09NUEFS
RShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvRG91YmxlKCksIDEyMy41
KTsKKworICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBRQ09N
UEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5teUludm9rYWJsZVdpdGhEb3VibGVBcmcobmV3
IE51bWJlcigxMjM0LjUpKSIpLCBzVW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0
LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCA0KTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1
bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMSk7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRG
dW5jdGlvbkFjdHVhbHMoKS5hdCgwKS50b0RvdWJsZSgpLCAxMjM0LjUpOworCisgICAgbV9teU9i
amVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOworICAgIFFDT01QQVJFKGV2YWxKUygidHlw
ZW9mIG15T2JqZWN0Lm15SW52b2thYmxlV2l0aEJvb2xBcmcobmV3IEJvb2xlYW4odHJ1ZSkpIiks
IHNVbmRlZmluZWQpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2Vk
KCksIDUyKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNp
emUoKSwgMSk7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5h
dCgwKS50b0Jvb2woKSwgdHJ1ZSk7CisKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25J
bnZva2VkKCk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3QubXlJbnZva2Fi
bGVXaXRoU3RyaW5nQXJnKCdjaWFvJykiKSwgc1VuZGVmaW5lZCk7CisgICAgUUNPTVBBUkUobV9t
eU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgNSk7CisgICAgUUNPTVBBUkUobV9teU9iamVj
dC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOworICAgIFFDT01QQVJFKG1fbXlPYmpl
Y3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9TdHJpbmcoKSwgUUxhdGluMVN0cmluZygi
Y2lhbyIpKTsKKworICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAg
ICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5teUludm9rYWJsZVdpdGhTdHJpbmdB
cmcoMTIzKSIpLCBzVW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0
aW9uSW52b2tlZCgpLCA1KTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0
dWFscygpLnNpemUoKSwgMSk7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFj
dHVhbHMoKS5hdCgwKS50b1N0cmluZygpLCBRTGF0aW4xU3RyaW5nKCIxMjMiKSk7CisKKyAgICBt
X215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgUUNPTVBBUkUoZXZhbEpT
KCJ0eXBlb2YgbXlPYmplY3QubXlJbnZva2FibGVXaXRoU3RyaW5nQXJnKG51bGwpIiksIHNVbmRl
ZmluZWQpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDUp
OworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAx
KTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRv
U3RyaW5nKCksIFFTdHJpbmcoKSk7CisgICAgUVZFUklGWShtX215T2JqZWN0LT5xdEZ1bmN0aW9u
QWN0dWFscygpLmF0KDApLnRvU3RyaW5nKCkuaXNFbXB0eSgpKTsKKworICAgIG1fbXlPYmplY3Qt
PnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBt
eU9iamVjdC5teUludm9rYWJsZVdpdGhTdHJpbmdBcmcodW5kZWZpbmVkKSIpLCBzVW5kZWZpbmVk
KTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCA1KTsKKyAg
ICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMSk7Cisg
ICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKS50b1N0cmlu
ZygpLCBRU3RyaW5nKCkpOworICAgIFFWRVJJRlkobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVh
bHMoKS5hdCgwKS50b1N0cmluZygpLmlzRW1wdHkoKSk7CisKKyAgICBtX215T2JqZWN0LT5yZXNl
dFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmpl
Y3QubXlJbnZva2FibGVXaXRoSW50QXJncygxMjMsIDQ1NikiKSwgc1VuZGVmaW5lZCk7CisgICAg
UUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgNik7CisgICAgUUNPTVBB
UkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDIpOworICAgIFFDT01Q
QVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9JbnQoKSwgMTIzKTsK
KyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDEpLnRvSW50
KCksIDQ1Nik7CisKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Cisg
ICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZVJldHVybmluZ0ludCgpIiks
IFFMYXRpbjFTdHJpbmcoIjEyMyIpKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0
aW9uSW52b2tlZCgpLCA3KTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0
dWFscygpLCBRVmFyaWFudExpc3QoKSk7CisKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rp
b25JbnZva2VkKCk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZVJl
dHVybmluZ0xvbmdMb25nKCkiKSwgUUxhdGluMVN0cmluZygiNDU2IikpOworICAgIFFDT01QQVJF
KG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDM5KTsKKyAgICBRQ09NUEFSRShtX215
T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLCBRVmFyaWFudExpc3QoKSk7CisKKyAgICBtX215
T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJt
eU9iamVjdC5teUludm9rYWJsZVJldHVybmluZ1N0cmluZygpIiksIFFMYXRpbjFTdHJpbmcoImNp
YW8iKSk7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgOCk7
CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKSwgUVZhcmlhbnRM
aXN0KCkpOworCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOworICAg
IFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lm15SW52b2thYmxlV2l0aEludEFyZygx
MjMsIDQ1NikiKSwgc1VuZGVmaW5lZCk7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5j
dGlvbkludm9rZWQoKSwgOSk7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFj
dHVhbHMoKS5zaXplKCksIDIpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25B
Y3R1YWxzKCkuYXQoMCkudG9JbnQoKSwgMTIzKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5x
dEZ1bmN0aW9uQWN0dWFscygpLmF0KDEpLnRvSW50KCksIDQ1Nik7CisKKyAgICBtX215T2JqZWN0
LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2Yg
bXlPYmplY3QubXlJbnZva2FibGVXaXRoVm9pZFN0YXJBcmcobnVsbCkiKSwgc1VuZGVmaW5lZCk7
CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgNDQpOworICAg
IG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICB7CisgICAgICAgIFFT
dHJpbmcgdHlwZTsKKyAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15SW52
b2thYmxlV2l0aFZvaWRTdGFyQXJnKDEyMykiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUodHlw
ZSwgc0Vycm9yKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJy
b3I6IGluY29tcGF0aWJsZSB0eXBlIG9mIGFyZ3VtZW50KHMpIGluIGNhbGwgdG8gbXlJbnZva2Fi
bGVXaXRoVm9pZFN0YXJBcmcoKTsgY2FuZGlkYXRlcyB3ZXJlXG4gICAgbXlJbnZva2FibGVXaXRo
Vm9pZFN0YXJBcmcodm9pZCopIikpOworICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1
bmN0aW9uSW52b2tlZCgpLCAtMSk7CisgICAgfQorCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1
bmN0aW9uSW52b2tlZCgpOworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBR
U3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlJbnZva2FibGVXaXRoQW1iaWd1b3VzQXJn
KDEyMykiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKKyAgICAgICAg
UUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6IGFtYmlndW91cyBjYWxsIG9m
IG92ZXJsb2FkZWQgZnVuY3Rpb24gbXlJbnZva2FibGVXaXRoQW1iaWd1b3VzQXJnKCk7IGNhbmRp
ZGF0ZXMgd2VyZVxuICAgIG15SW52b2thYmxlV2l0aEFtYmlndW91c0FyZyhpbnQpXG4gICAgbXlJ
bnZva2FibGVXaXRoQW1iaWd1b3VzQXJnKHVpbnQpIikpOworICAgIH0KKworICAgIG1fbXlPYmpl
Y3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICB7CisgICAgICAgIFFTdHJpbmcgdHlw
ZTsKKyAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlV2l0
aERlZmF1bHRBcmdzKDEyMywgJ2hlbGxvJykiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUodHlw
ZSwgc1VuZGVmaW5lZCk7CisgICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25J
bnZva2VkKCksIDQ3KTsKKyAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFj
dHVhbHMoKS5zaXplKCksIDIpOworICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0
aW9uQWN0dWFscygpLmF0KDApLnRvSW50KCksIDEyMyk7CisgICAgICAgIFFDT01QQVJFKG1fbXlP
YmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMSkudG9TdHJpbmcoKSwgUUxhdGluMVN0cmlu
ZygiaGVsbG8iKSk7CisgICAgfQorCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52
b2tlZCgpOworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJl
dCA9IGV2YWxKUygibXlPYmplY3QubXlJbnZva2FibGVXaXRoRGVmYXVsdEFyZ3MoNDU2KSIsIHR5
cGUpOworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzVW5kZWZpbmVkKTsKKyAgICAgICAgUUNPTVBB
UkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgNDcpOworICAgICAgICBRQ09NUEFS
RShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMik7CisgICAgICAgIFFD
T01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9JbnQoKSwgNDU2
KTsKKyAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgx
KS50b1N0cmluZygpLCBRU3RyaW5nKCkpOworICAgIH0KKworICAgIC8vIGNhbGxpbmcgZnVuY3Rp
b24gdGhhdCByZXR1cm5zIChjb25zdClyZWYKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rp
b25JbnZva2VkKCk7CisgICAgeworICAgICAgICBRU3RyaW5nIHR5cGU7CisgICAgICAgIFFTdHJp
bmcgcmV0ID0gZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3QubXlJbnZva2FibGVSZXR1cm5pbmdSZWYo
KSIpOworICAgICAgICBRQ09NUEFSRShyZXQsIHNVbmRlZmluZWQpOworICAgICAgICBRQ09NUEFS
RShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCA0OCk7CisgICAgfQorCisgICAgbV9t
eU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOworICAgIHsKKyAgICAgICAgUVN0cmlu
ZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lm15
SW52b2thYmxlUmV0dXJuaW5nQ29uc3RSZWYoKSIpOworICAgICAgICBRQ09NUEFSRShyZXQsIHNV
bmRlZmluZWQpOworICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tl
ZCgpLCA0OSk7CisgICAgfQorCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tl
ZCgpOworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRVmFyaWFudCByZXQg
PSBldmFsSlNWKCJteU9iamVjdC5teUludm9rYWJsZVJldHVybmluZ1FPYmplY3RTdGFyKCkiLCB0
eXBlKTsKKyAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwg
MTMpOworICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNp
emUoKSwgMCk7CisgICAgICAgIFFDT01QQVJFKHR5cGUsIHNPYmplY3QpOworICAgICAgICBRQ09N
UEFSRShyZXQudXNlclR5cGUoKSwgaW50KFFNZXRhVHlwZTo6UU9iamVjdFN0YXIpKTsKKyAgICB9
CisKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgeworICAg
ICAgICBRU3RyaW5nIHR5cGU7CisgICAgICAgIFFWYXJpYW50IHJldCA9IGV2YWxKU1YoIm15T2Jq
ZWN0Lm15SW52b2thYmxlV2l0aFFPYmplY3RMaXN0QXJnKFtteU9iamVjdF0pIiwgdHlwZSk7Cisg
ICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDE0KTsKKyAg
ICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEp
OworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzQXJyYXkpOworICAgICAgICBRQ09NUEFSRShyZXQu
dXNlclR5cGUoKSwgaW50KFFWYXJpYW50OjpMaXN0KSk7IC8vIEFsbCBsaXN0cyBnZXQgZG93bmdy
YWRlZCB0byBRVmFyaWFudExpc3QKKyAgICAgICAgUVZhcmlhbnRMaXN0IHZsID0gcXZhcmlhbnRf
Y2FzdDxRVmFyaWFudExpc3Q+KHJldCk7CisgICAgICAgIFFDT01QQVJFKHZsLmNvdW50KCksIDEp
OworICAgIH0KKworICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAg
ICB7CisgICAgICAgIFFTdHJpbmcgdHlwZTsKKyAgICAgICAgbV9teU9iamVjdC0+c2V0VmFyaWFu
dFByb3BlcnR5KFFWYXJpYW50KDEyMykpOworICAgICAgICBRVmFyaWFudCByZXQgPSBldmFsSlNW
KCJteU9iamVjdC5teUludm9rYWJsZVdpdGhWYXJpYW50QXJnKG15T2JqZWN0LnZhcmlhbnRQcm9w
ZXJ0eSkiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUodHlwZSwgc051bWJlcik7CisgICAgICAg
IFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDE1KTsKKyAgICAgICAg
UUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOworICAg
ICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLCBtX215
T2JqZWN0LT52YXJpYW50UHJvcGVydHkoKSk7CisgICAgICAgIFFDT01QQVJFKHJldC51c2VyVHlw
ZSgpLCBpbnQoUU1ldGFUeXBlOjpEb3VibGUpKTsgLy8gYWxsIEpTIG51bWJlcnMgYXJlIGRvdWJs
ZXMsIGV2ZW4gdGhvdWdoIHRoaXMgc3RhcnRlZCBhcyBhbiBpbnQKKyAgICAgICAgUUNPTVBBUkUo
cmV0LnRvSW50KCksIDEyMyk7CisgICAgfQorCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0
aW9uSW52b2tlZCgpOworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRVmFy
aWFudCByZXQgPSBldmFsSlNWKCJteU9iamVjdC5teUludm9rYWJsZVdpdGhWYXJpYW50QXJnKG51
bGwpIiwgdHlwZSk7CisgICAgICAgIFFDT01QQVJFKHR5cGUsIHNPYmplY3QpOworICAgICAgICBR
Q09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAxNSk7CisgICAgICAgIFFD
T01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKKyAgICAg
ICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKSwgUVZhcmlh
bnQoKSk7CisgICAgICAgIFFWRVJJRlkoIW1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCku
YXQoMCkuaXNWYWxpZCgpKTsKKyAgICB9CisKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rp
b25JbnZva2VkKCk7CisgICAgeworICAgICAgICBRU3RyaW5nIHR5cGU7CisgICAgICAgIFFWYXJp
YW50IHJldCA9IGV2YWxKU1YoIm15T2JqZWN0Lm15SW52b2thYmxlV2l0aFZhcmlhbnRBcmcodW5k
ZWZpbmVkKSIsIHR5cGUpOworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzT2JqZWN0KTsKKyAgICAg
ICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMTUpOworICAgICAg
ICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMSk7Cisg
ICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCksIFFW
YXJpYW50KCkpOworICAgICAgICBRVkVSSUZZKCFtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFs
cygpLmF0KDApLmlzVmFsaWQoKSk7CisgICAgfQorCisgICAgLyogWEZBSUwgLSB2YXJpYW50IHN1
cHBvcnQKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgewor
ICAgICAgICBtX215T2JqZWN0LT5zZXRWYXJpYW50UHJvcGVydHkoUVZhcmlhbnQ6OmZyb21WYWx1
ZShRQnJ1c2goKSkpOworICAgICAgICBRVmFyaWFudCByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15
SW52b2thYmxlV2l0aFZhcmlhbnRBcmcobXlPYmplY3QudmFyaWFudFByb3BlcnR5KSIpOworICAg
ICAgICBRVkVSSUZZKHJldC5pc1ZhcmlhbnQoKSk7CisgICAgICAgIFFDT01QQVJFKG1fbXlPYmpl
Y3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDE1KTsKKyAgICAgICAgUUNPTVBBUkUobV9teU9iamVj
dC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOworICAgICAgICBRQ09NUEFSRShyZXQu
dG9WYXJpYW50KCksIG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkpOworICAg
ICAgICBRQ09NUEFSRShyZXQudG9WYXJpYW50KCksIG1fbXlPYmplY3QtPnZhcmlhbnRQcm9wZXJ0
eSgpKTsKKyAgICB9CisgICAgKi8KKworICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbklu
dm9rZWQoKTsKKyAgICB7CisgICAgICAgIFFTdHJpbmcgdHlwZTsKKyAgICAgICAgUVZhcmlhbnQg
cmV0ID0gZXZhbEpTVigibXlPYmplY3QubXlJbnZva2FibGVXaXRoVmFyaWFudEFyZygxMjMpIiwg
dHlwZSk7CisgICAgICAgIFFDT01QQVJFKHR5cGUsIHNOdW1iZXIpOworICAgICAgICBRQ09NUEFS
RShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAxNSk7CisgICAgICAgIFFDT01QQVJF
KG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKKyAgICAgICAgUUNP
TVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKSwgUVZhcmlhbnQoMTIz
KSk7CisgICAgICAgIFFDT01QQVJFKHJldC51c2VyVHlwZSgpLCBpbnQoUU1ldGFUeXBlOjpEb3Vi
bGUpKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LnRvSW50KCksIDEyMyk7CisgICAgfQorCisgICAg
bV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOworICAgIHsKKyAgICAgICAgUVN0
cmluZyB0eXBlOworICAgICAgICBRVmFyaWFudCByZXQgPSBldmFsSlNWKCJteU9iamVjdC5teUlu
dm9rYWJsZVdpdGhWYXJpYW50TWFwQXJnKHsgYToxMjMsIGI6J2NpYW8nIH0pIiwgdHlwZSk7Cisg
ICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDE2KTsKKyAg
ICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEp
OworCisgICAgICAgIFFWYXJpYW50IHYgPSBtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygp
LmF0KDApOworICAgICAgICBRQ09NUEFSRSh2LnVzZXJUeXBlKCksIGludChRTWV0YVR5cGU6OlFW
YXJpYW50TWFwKSk7CisKKyAgICAgICAgUVZhcmlhbnRNYXAgdm1hcCA9IHF2YXJpYW50X2Nhc3Q8
UVZhcmlhbnRNYXA+KHYpOworICAgICAgICBRQ09NUEFSRSh2bWFwLmtleXMoKS5zaXplKCksIDIp
OworICAgICAgICBRQ09NUEFSRSh2bWFwLmtleXMoKS5hdCgwKSwgUUxhdGluMVN0cmluZygiYSIp
KTsKKyAgICAgICAgUUNPTVBBUkUodm1hcC52YWx1ZSgiYSIpLCBRVmFyaWFudCgxMjMpKTsKKyAg
ICAgICAgUUNPTVBBUkUodm1hcC5rZXlzKCkuYXQoMSksIFFMYXRpbjFTdHJpbmcoImIiKSk7Cisg
ICAgICAgIFFDT01QQVJFKHZtYXAudmFsdWUoImIiKSwgUVZhcmlhbnQoImNpYW8iKSk7CisKKyAg
ICAgICAgUUNPTVBBUkUodHlwZSwgc09iamVjdCk7CisKKyAgICAgICAgUUNPTVBBUkUocmV0LnVz
ZXJUeXBlKCksIGludChRTWV0YVR5cGU6OlFWYXJpYW50TWFwKSk7CisgICAgICAgIHZtYXAgPSBx
dmFyaWFudF9jYXN0PFFWYXJpYW50TWFwPihyZXQpOworICAgICAgICBRQ09NUEFSRSh2bWFwLmtl
eXMoKS5zaXplKCksIDIpOworICAgICAgICBRQ09NUEFSRSh2bWFwLmtleXMoKS5hdCgwKSwgUUxh
dGluMVN0cmluZygiYSIpKTsKKyAgICAgICAgUUNPTVBBUkUodm1hcC52YWx1ZSgiYSIpLCBRVmFy
aWFudCgxMjMpKTsKKyAgICAgICAgUUNPTVBBUkUodm1hcC5rZXlzKCkuYXQoMSksIFFMYXRpbjFT
dHJpbmcoImIiKSk7CisgICAgICAgIFFDT01QQVJFKHZtYXAudmFsdWUoImIiKSwgUVZhcmlhbnQo
ImNpYW8iKSk7CisgICAgfQorCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tl
ZCgpOworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRVmFyaWFudCByZXQg
PSBldmFsSlNWKCJteU9iamVjdC5teUludm9rYWJsZVdpdGhMaXN0T2ZJbnRBcmcoWzEsIDVdKSIs
IHR5cGUpOworICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgp
LCAxNyk7CisgICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCku
c2l6ZSgpLCAxKTsKKyAgICAgICAgUVZhcmlhbnQgdiA9IG1fbXlPYmplY3QtPnF0RnVuY3Rpb25B
Y3R1YWxzKCkuYXQoMCk7CisgICAgICAgIFFDT01QQVJFKHYudXNlclR5cGUoKSwgcU1ldGFUeXBl
SWQ8UUxpc3Q8aW50PiA+KCkpOworICAgICAgICBRTGlzdDxpbnQ+IGlsc3QgPSBxdmFyaWFudF9j
YXN0PFFMaXN0PGludD4gPih2KTsKKyAgICAgICAgUUNPTVBBUkUoaWxzdC5zaXplKCksIDIpOwor
ICAgICAgICBRQ09NUEFSRShpbHN0LmF0KDApLCAxKTsKKyAgICAgICAgUUNPTVBBUkUoaWxzdC5h
dCgxKSwgNSk7CisKKyAgICAgICAgUUNPTVBBUkUodHlwZSwgc0FycmF5KTsKKyAgICAgICAgUUNP
TVBBUkUocmV0LnVzZXJUeXBlKCksIGludChRTWV0YVR5cGU6OlFWYXJpYW50TGlzdCkpOyAvLyBp
bnRzIGdldCBjb252ZXJ0ZWQgdG8gZG91Ymxlcywgc28gdGhpcyBpcyBhIHF2YXJpYW50bGlzdAor
ICAgICAgICBRVmFyaWFudExpc3QgdmxzdCA9IHF2YXJpYW50X2Nhc3Q8UVZhcmlhbnRMaXN0Pihy
ZXQpOworICAgICAgICBRQ09NUEFSRSh2bHN0LnNpemUoKSwgMik7CisgICAgICAgIFFDT01QQVJF
KHZsc3QuYXQoMCkudG9JbnQoKSwgMSk7CisgICAgICAgIFFDT01QQVJFKHZsc3QuYXQoMSkudG9J
bnQoKSwgNSk7CisgICAgfQorCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tl
ZCgpOworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRVmFyaWFudCByZXQg
PSBldmFsSlNWKCJteU9iamVjdC5teUludm9rYWJsZVdpdGhRT2JqZWN0U3RhckFyZyhteU9iamVj
dCkiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9r
ZWQoKSwgMTgpOworICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFs
cygpLnNpemUoKSwgMSk7CisgICAgICAgIFFWYXJpYW50IHYgPSBtX215T2JqZWN0LT5xdEZ1bmN0
aW9uQWN0dWFscygpLmF0KDApOworICAgICAgICBRQ09NUEFSRSh2LnVzZXJUeXBlKCksIGludChR
TWV0YVR5cGU6OlFPYmplY3RTdGFyKSk7CisgICAgICAgIFFDT01QQVJFKHF2YXJpYW50X2Nhc3Q8
UU9iamVjdCo+KHYpLCAoUU9iamVjdCopbV9teU9iamVjdCk7CisKKyAgICAgICAgUUNPTVBBUkUo
cmV0LnVzZXJUeXBlKCksIGludChRTWV0YVR5cGU6OlFPYmplY3RTdGFyKSk7CisgICAgICAgIFFD
T01QQVJFKHF2YXJpYW50X2Nhc3Q8UU9iamVjdCo+KHJldCksIChRT2JqZWN0KiltX215T2JqZWN0
KTsKKworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzT2JqZWN0KTsKKyAgICB9CisKKyAgICBtX215
T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgeworICAgICAgICAvLyBubyBp
bXBsaWNpdCBjb252ZXJzaW9uIGZyb20gaW50ZWdlciB0byBRT2JqZWN0KgorICAgICAgICBRU3Ry
aW5nIHR5cGU7CisgICAgICAgIGV2YWxKUygibXlPYmplY3QubXlJbnZva2FibGVXaXRoUU9iamVj
dFN0YXJBcmcoMTIzKSIsIHR5cGUpOworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwor
ICAgIH0KKworICAgIC8qCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgp
OworICAgIHsKKyAgICAgICAgUVN0cmluZyBmdW4gPSBldmFsSlMoIm15T2JqZWN0Lm15SW52b2th
YmxlV2l0aFFCcnVzaEFyZyIpOworICAgICAgICBRX0FTU0VSVChmdW4uaXNGdW5jdGlvbigpKTsK
KyAgICAgICAgUUNvbG9yIGNvbG9yKDEwLCAyMCwgMzAsIDQwKTsKKyAgICAgICAgLy8gUUNvbG9y
IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gYSBRQnJ1c2gKKyAgICAgICAgUVZhcmlhbnQgcmV0ID0g
ZnVuLmNhbGwoUVN0cmluZygpLCBRU3RyaW5nTGlzdCgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8PCBxU2NyaXB0VmFsdWVGcm9tVmFsdWUobV9lbmdpbmUsIGNvbG9yKSk7
CisgICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDE5KTsK
KyAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCks
IDEpOworICAgICAgICBRVmFyaWFudCB2ID0gbV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMo
KS5hdCgwKTsKKyAgICAgICAgUUNPTVBBUkUodi51c2VyVHlwZSgpLCBpbnQoUU1ldGFUeXBlOjpR
QnJ1c2gpKTsKKyAgICAgICAgUUNPTVBBUkUocXZhcmlhbnRfY2FzdDxRQ29sb3I+KHYpLCBjb2xv
cik7CisKKyAgICAgICAgUUNPTVBBUkUocXNjcmlwdHZhbHVlX2Nhc3Q8UUNvbG9yPihyZXQpLCBj
b2xvcik7CisgICAgfQorICAgICovCisKKyAgICAvLyBwcml2YXRlIHNsb3RzIHNob3VsZCBub3Qg
YmUgcGFydCBvZiB0aGUgUU9iamVjdCBiaW5kaW5nCisgICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBl
b2YgbXlPYmplY3QubXlQcml2YXRlU2xvdCIpLCBzVW5kZWZpbmVkKTsKKworICAgIC8vIHByb3Rl
Y3RlZCBzbG90cyBzaG91bGQgYmUgZmluZQorICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlv
bkludm9rZWQoKTsKKyAgICBldmFsSlMoIm15T2JqZWN0Lm15UHJvdGVjdGVkU2xvdCgpIik7Cisg
ICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMzYpOworCisgICAg
Ly8gY2FsbCB3aXRoIHRvbyBmZXcgYXJndW1lbnRzCisgICAgeworICAgICAgICBRU3RyaW5nIHR5
cGU7CisgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZVdp
dGhJbnRBcmcoKSIsIHR5cGUpOworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAg
ICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIlN5bnRheEVycm9yOiB0b28gZmV3IGFy
Z3VtZW50cyBpbiBjYWxsIHRvIG15SW52b2thYmxlV2l0aEludEFyZygpOyBjYW5kaWRhdGVzIGFy
ZVxuICAgIG15SW52b2thYmxlV2l0aEludEFyZyhpbnQsaW50KVxuICAgIG15SW52b2thYmxlV2l0
aEludEFyZyhpbnQpIikpOworICAgIH0KKworICAgIC8vIGNhbGwgZnVuY3Rpb24gd2hlcmUgbm90
IGFsbCB0eXBlcyBoYXZlIGJlZW4gcmVnaXN0ZXJlZAorICAgIG1fbXlPYmplY3QtPnJlc2V0UXRG
dW5jdGlvbkludm9rZWQoKTsKKyAgICB7CisgICAgICAgIFFTdHJpbmcgdHlwZTsKKyAgICAgICAg
UVN0cmluZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlV2l0aEJydXNoU3R5bGVB
cmcoMCkiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKKyAgICAgICAg
UUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6IGNhbm5vdCBjYWxsIG15SW52
b2thYmxlV2l0aEJydXNoU3R5bGVBcmcoKTogdW5rbm93biB0eXBlIGBRdDo6QnJ1c2hTdHlsZSci
KSk7CisgICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIC0x
KTsKKyAgICB9CisKKyAgICAvLyBjYWxsIGZ1bmN0aW9uIHdpdGggaW5jb21wYXRpYmxlIGFyZ3Vt
ZW50IHR5cGUKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAg
eworICAgICAgICBRU3RyaW5nIHR5cGU7CisgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJt
eU9iamVjdC5teUludm9rYWJsZVdpdGhRQnJ1c2hBcmcobnVsbCkiLCB0eXBlKTsKKyAgICAgICAg
UUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3Ry
aW5nKCJUeXBlRXJyb3I6IGluY29tcGF0aWJsZSB0eXBlIG9mIGFyZ3VtZW50KHMpIGluIGNhbGwg
dG8gbXlJbnZva2FibGVXaXRoUUJydXNoQXJnKCk7IGNhbmRpZGF0ZXMgd2VyZVxuICAgIG15SW52
b2thYmxlV2l0aFFCcnVzaEFyZyhRQnJ1c2gpIikpOworICAgICAgICBRQ09NUEFSRShtX215T2Jq
ZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAtMSk7CisgICAgfQorfQorCit2b2lkIHRzdF9RT2Jq
ZWN0QnJpZGdlOjpjb25uZWN0QW5kRGlzY29ubmVjdCgpCit7CisgICAgLy8gY29ubmVjdChmdW5j
dGlvbikKKyAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5teVNpZ25hbCIpLCBz
RnVuY3Rpb24pOworICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lm15U2lnbmFs
LmNvbm5lY3QiKSwgc0Z1bmN0aW9uKTsKKyAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9i
amVjdC5teVNpZ25hbC5kaXNjb25uZWN0IiksIHNGdW5jdGlvbik7CisKKyAgICB7CisgICAgICAg
IFFTdHJpbmcgdHlwZTsKKyAgICAgICAgZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbC5jb25uZWN0
KDEyMykiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKKyAgICB9CisK
KyAgICBldmFsSlMoIm15SGFuZGxlciA9IGZ1bmN0aW9uKCkgeyB3aW5kb3cuZ290U2lnbmFsID0g
dHJ1ZTsgd2luZG93LnNpZ25hbEFyZ3MgPSBhcmd1bWVudHM7IHdpbmRvdy5zbG90VGhpc09iamVj
dCA9IHRoaXM7IHdpbmRvdy5zaWduYWxTZW5kZXIgPSBfX3F0X3NlbmRlcl9fOyB9Iik7CisKKyAg
ICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmNvbm5lY3QobXlIYW5kbGVyKSIp
LCBzVW5kZWZpbmVkKTsKKworICAgIGV2YWxKUygiZ290U2lnbmFsID0gZmFsc2UiKTsKKyAgICBl
dmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsKCkiKTsKKyAgICBRQ09NUEFSRShldmFsSlMoImdvdFNp
Z25hbCIpLCBzVHJ1ZSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxBcmdzLmxlbmd0aCA9
PSAwIiksIHNUcnVlKTsKKyAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbFNlbmRlciIpLCBldmFs
SlMoIm15T2JqZWN0IikpOworICAgIFFDT01QQVJFKGV2YWxKUygic2xvdFRoaXNPYmplY3QgPT0g
d2luZG93IiksIHNUcnVlKTsKKworICAgIGV2YWxKUygiZ290U2lnbmFsID0gZmFsc2UiKTsKKyAg
ICBtX215T2JqZWN0LT5lbWl0TXlTaWduYWwoKTsKKyAgICBRQ09NUEFSRShldmFsSlMoImdvdFNp
Z25hbCIpLCBzVHJ1ZSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxBcmdzLmxlbmd0aCA9
PSAwIiksIHNUcnVlKTsKKworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWxX
aXRoSW50QXJnLmNvbm5lY3QobXlIYW5kbGVyKSIpLCBzVW5kZWZpbmVkKTsKKworICAgIGV2YWxK
UygiZ290U2lnbmFsID0gZmFsc2UiKTsKKyAgICBtX215T2JqZWN0LT5lbWl0TXlTaWduYWxXaXRo
SW50QXJnKDEyMyk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJnb3RTaWduYWwiKSwgc1RydWUpOwor
ICAgIFFDT01QQVJFKGV2YWxKUygic2lnbmFsQXJncy5sZW5ndGggPT0gMSIpLCBzVHJ1ZSk7Cisg
ICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxBcmdzWzBdID09IDEyMy4wIiksIHNUcnVlKTsKKwor
ICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuZGlzY29ubmVjdChteUhhbmRs
ZXIpIiksIHNVbmRlZmluZWQpOworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAg
ICBldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmRpc2Nvbm5lY3QobXlIYW5kbGVyKSIsIHR5cGUp
OworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAgIH0KKworICAgIGV2YWxKUygi
Z290U2lnbmFsID0gZmFsc2UiKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2ln
bmFsMi5jb25uZWN0KG15SGFuZGxlcikiKSwgc1VuZGVmaW5lZCk7CisgICAgbV9teU9iamVjdC0+
ZW1pdE15U2lnbmFsMih0cnVlKTsKKyAgICBRQ09NUEFSRShldmFsSlMoImdvdFNpZ25hbCIpLCBz
VHJ1ZSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxBcmdzLmxlbmd0aCA9PSAxIiksIHNU
cnVlKTsKKyAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbEFyZ3NbMF0iKSwgc1RydWUpOworCisg
ICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbDIuZGlzY29ubmVjdChteUhhbmRs
ZXIpIiksIHNVbmRlZmluZWQpOworCisgICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmpl
Y3RbJ215U2lnbmFsMigpJ10iKSwgc0Z1bmN0aW9uKTsKKyAgICBRQ09NUEFSRShldmFsSlMoInR5
cGVvZiBteU9iamVjdFsnbXlTaWduYWwyKCknXS5jb25uZWN0IiksIHNGdW5jdGlvbik7CisgICAg
UUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3RbJ215U2lnbmFsMigpJ10uZGlzY29ubmVj
dCIpLCBzRnVuY3Rpb24pOworCisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdFsnbXlTaWdu
YWwyKCknXS5jb25uZWN0KG15SGFuZGxlcikiKSwgc1VuZGVmaW5lZCk7CisKKyAgICBldmFsSlMo
ImdvdFNpZ25hbCA9IGZhbHNlIik7CisgICAgbV9teU9iamVjdC0+ZW1pdE15U2lnbmFsMigpOwor
ICAgIFFDT01QQVJFKGV2YWxKUygiZ290U2lnbmFsIiksIHNUcnVlKTsKKworICAgIFFDT01QQVJF
KGV2YWxKUygibXlPYmplY3RbJ215U2lnbmFsMigpJ10uZGlzY29ubmVjdChteUhhbmRsZXIpIiks
IHNVbmRlZmluZWQpOworCisgICAgLy8gY29ubmVjdChvYmplY3QsIGZ1bmN0aW9uKQorICAgIGV2
YWxKUygib3RoZXJPYmplY3QgPSB7IG5hbWU6J2ZvbycgfSIpOworICAgIFFDT01QQVJFKGV2YWxK
UygibXlPYmplY3QubXlTaWduYWwuY29ubmVjdChvdGhlck9iamVjdCwgbXlIYW5kbGVyKSIpLCBz
VW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmRpc2Nv
bm5lY3Qob3RoZXJPYmplY3QsIG15SGFuZGxlcikiKSwgc1VuZGVmaW5lZCk7CisgICAgZXZhbEpT
KCJnb3RTaWduYWwgPSBmYWxzZSIpOworICAgIG1fbXlPYmplY3QtPmVtaXRNeVNpZ25hbCgpOwor
ICAgIFFDT01QQVJFKGV2YWxKUygiZ290U2lnbmFsIiksIHNGYWxzZSk7CisKKyAgICB7CisgICAg
ICAgIFFTdHJpbmcgdHlwZTsKKyAgICAgICAgZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbC5kaXNj
b25uZWN0KG90aGVyT2JqZWN0LCBteUhhbmRsZXIpIiwgdHlwZSk7CisgICAgICAgIFFDT01QQVJF
KHR5cGUsIHNFcnJvcik7CisgICAgfQorCisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5t
eVNpZ25hbC5jb25uZWN0KG90aGVyT2JqZWN0LCBteUhhbmRsZXIpIiksIHNVbmRlZmluZWQpOwor
ICAgIGV2YWxKUygiZ290U2lnbmFsID0gZmFsc2UiKTsKKyAgICBtX215T2JqZWN0LT5lbWl0TXlT
aWduYWwoKTsKKyAgICBRQ09NUEFSRShldmFsSlMoImdvdFNpZ25hbCIpLCBzVHJ1ZSk7CisgICAg
UUNPTVBBUkUoZXZhbEpTKCJzaWduYWxBcmdzLmxlbmd0aCA9PSAwIiksIHNUcnVlKTsKKyAgICBR
Q09NUEFSRShldmFsSlMoInNsb3RUaGlzT2JqZWN0IiksIGV2YWxKUygib3RoZXJPYmplY3QiKSk7
CisgICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxTZW5kZXIiKSwgZXZhbEpTKCJteU9iamVjdCIp
KTsKKyAgICBRQ09NUEFSRShldmFsSlMoInNsb3RUaGlzT2JqZWN0Lm5hbWUiKSwgUUxhdGluMVN0
cmluZygiZm9vIikpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuZGlz
Y29ubmVjdChvdGhlck9iamVjdCwgbXlIYW5kbGVyKSIpLCBzVW5kZWZpbmVkKTsKKworICAgIGV2
YWxKUygieWV0QW5vdGhlck9iamVjdCA9IHsgbmFtZTonYmFyJywgZnVuYyA6IGZ1bmN0aW9uKCkg
eyB9IH0iKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsMi5jb25uZWN0
KHlldEFub3RoZXJPYmplY3QsIG15SGFuZGxlcikiKSwgc1VuZGVmaW5lZCk7CisgICAgZXZhbEpT
KCJnb3RTaWduYWwgPSBmYWxzZSIpOworICAgIG1fbXlPYmplY3QtPmVtaXRNeVNpZ25hbDIodHJ1
ZSk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJnb3RTaWduYWwiKSwgc1RydWUpOworICAgIFFDT01Q
QVJFKGV2YWxKUygic2lnbmFsQXJncy5sZW5ndGggPT0gMSIpLCBzVHJ1ZSk7CisgICAgUUNPTVBB
UkUoZXZhbEpTKCJzbG90VGhpc09iamVjdCA9PSB5ZXRBbm90aGVyT2JqZWN0IiksIHNUcnVlKTsK
KyAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbFNlbmRlciA9PSBteU9iamVjdCIpLCBzVHJ1ZSk7
CisgICAgUUNPTVBBUkUoZXZhbEpTKCJzbG90VGhpc09iamVjdC5uYW1lIiksIFFMYXRpbjFTdHJp
bmcoImJhciIpKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsMi5kaXNj
b25uZWN0KHlldEFub3RoZXJPYmplY3QsIG15SGFuZGxlcikiKSwgc1VuZGVmaW5lZCk7CisKKyAg
ICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsMi5jb25uZWN0KG15T2JqZWN0LCBt
eUhhbmRsZXIpIiksIHNVbmRlZmluZWQpOworICAgIGV2YWxKUygiZ290U2lnbmFsID0gZmFsc2Ui
KTsKKyAgICBtX215T2JqZWN0LT5lbWl0TXlTaWduYWwyKHRydWUpOworICAgIFFDT01QQVJFKGV2
YWxKUygiZ290U2lnbmFsIiksIHNUcnVlKTsKKyAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbEFy
Z3MubGVuZ3RoID09IDEiKSwgc1RydWUpOworICAgIFFDT01QQVJFKGV2YWxKUygic2xvdFRoaXNP
YmplY3QgPT0gbXlPYmplY3QiKSwgc1RydWUpOworICAgIFFDT01QQVJFKGV2YWxKUygic2lnbmFs
U2VuZGVyID09IG15T2JqZWN0IiksIHNUcnVlKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2Jq
ZWN0Lm15U2lnbmFsMi5kaXNjb25uZWN0KG15T2JqZWN0LCBteUhhbmRsZXIpIiksIHNVbmRlZmlu
ZWQpOworCisgICAgLy8gY29ubmVjdChvYmosIHN0cmluZykKKyAgICBRQ09NUEFSRShldmFsSlMo
Im15T2JqZWN0Lm15U2lnbmFsLmNvbm5lY3QoeWV0QW5vdGhlck9iamVjdCwgJ2Z1bmMnKSIpLCBz
VW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmNvbm5l
Y3QobXlPYmplY3QsICdteVNsb3QnKSIpLCBzVW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRShldmFs
SlMoIm15T2JqZWN0Lm15U2lnbmFsLmRpc2Nvbm5lY3QoeWV0QW5vdGhlck9iamVjdCwgJ2Z1bmMn
KSIpLCBzVW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFs
LmRpc2Nvbm5lY3QobXlPYmplY3QsICdteVNsb3QnKSIpLCBzVW5kZWZpbmVkKTsKKworICAgIC8v
IGNoZWNrIHRoYXQgZW1pdHRpbmcgc2lnbmFscyBmcm9tIHNjcmlwdCB3b3JrcworCisgICAgLy8g
bm8gYXJndW1lbnRzCisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbC5jb25u
ZWN0KG15T2JqZWN0Lm15U2xvdCkiKSwgc1VuZGVmaW5lZCk7CisgICAgbV9teU9iamVjdC0+cmVz
ZXRRdEZ1bmN0aW9uSW52b2tlZCgpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlT
aWduYWwoKSIpLCBzVW5kZWZpbmVkKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0
aW9uSW52b2tlZCgpLCAyMCk7CisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25h
bC5kaXNjb25uZWN0KG15T2JqZWN0Lm15U2xvdCkiKSwgc1VuZGVmaW5lZCk7CisKKyAgICAvLyBv
bmUgYXJndW1lbnQKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0aElu
dEFyZy5jb25uZWN0KG15T2JqZWN0Lm15U2xvdFdpdGhJbnRBcmcpIiksIHNVbmRlZmluZWQpOwor
ICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBRQ09NUEFSRShl
dmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0aEludEFyZygxMjMpIiksIHNVbmRlZmluZWQpOwor
ICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDIxKTsKKyAgICBR
Q09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMSk7CisgICAg
UUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKS50b0ludCgpLCAx
MjMpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWxXaXRoSW50QXJnLmRp
c2Nvbm5lY3QobXlPYmplY3QubXlTbG90V2l0aEludEFyZykiKSwgc1VuZGVmaW5lZCk7CisKKyAg
ICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0aEludEFyZy5jb25uZWN0KG15
T2JqZWN0Lm15U2xvdFdpdGhEb3VibGVBcmcpIiksIHNVbmRlZmluZWQpOworICAgIG1fbXlPYmpl
Y3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2Jq
ZWN0Lm15U2lnbmFsV2l0aEludEFyZygxMjMpIiksIHNVbmRlZmluZWQpOworICAgIFFDT01QQVJF
KG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDIyKTsKKyAgICBRQ09NUEFSRShtX215
T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMSk7CisgICAgUUNPTVBBUkUobV9t
eU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKS50b0RvdWJsZSgpLCAxMjMuMCk7Cisg
ICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhJbnRBcmcuZGlzY29ubmVj
dChteU9iamVjdC5teVNsb3RXaXRoRG91YmxlQXJnKSIpLCBzVW5kZWZpbmVkKTsKKworICAgIFFD
T01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWxXaXRoSW50QXJnLmNvbm5lY3QobXlPYmpl
Y3QubXlTbG90V2l0aFN0cmluZ0FyZykiKSwgc1VuZGVmaW5lZCk7CisgICAgbV9teU9iamVjdC0+
cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOworICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Qu
bXlTaWduYWxXaXRoSW50QXJnKDEyMykiKSwgc1VuZGVmaW5lZCk7CisgICAgUUNPTVBBUkUobV9t
eU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMjMpOworICAgIFFDT01QQVJFKG1fbXlPYmpl
Y3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKKyAgICBRQ09NUEFSRShtX215T2Jq
ZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvU3RyaW5nKCksIFFMYXRpbjFTdHJpbmco
IjEyMyIpKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0aEludEFy
Zy5kaXNjb25uZWN0KG15T2JqZWN0Lm15U2xvdFdpdGhTdHJpbmdBcmcpIiksIHNVbmRlZmluZWQp
OworCisgICAgLy8gY29ubmVjdGluZyB0byBvdmVybG9hZGVkIHNsb3QKKyAgICBRQ09NUEFSRShl
dmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0aEludEFyZy5jb25uZWN0KG15T2JqZWN0Lm15T3Zl
cmxvYWRlZFNsb3QpIiksIHNVbmRlZmluZWQpOworICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5j
dGlvbkludm9rZWQoKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0
aEludEFyZygxMjMpIiksIHNVbmRlZmluZWQpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0
RnVuY3Rpb25JbnZva2VkKCksIDI2KTsgLy8gZG91YmxlIG92ZXJsb2FkCisgICAgUUNPTVBBUkUo
bV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOworICAgIFFDT01QQVJF
KG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9JbnQoKSwgMTIzKTsKKyAg
ICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0aEludEFyZy5kaXNjb25uZWN0
KG15T2JqZWN0Lm15T3ZlcmxvYWRlZFNsb3QpIiksIHNVbmRlZmluZWQpOworCisgICAgUUNPTVBB
UkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhJbnRBcmcuY29ubmVjdChteU9iamVjdFsn
bXlPdmVybG9hZGVkU2xvdChpbnQpJ10pIiksIHNVbmRlZmluZWQpOworICAgIG1fbXlPYmplY3Qt
PnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0
Lm15U2lnbmFsV2l0aEludEFyZyg0NTYpIiksIHNVbmRlZmluZWQpOworICAgIFFDT01QQVJFKG1f
bXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDI4KTsgLy8gaW50IG92ZXJsb2FkCisgICAg
UUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOworICAg
IFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9JbnQoKSwg
NDU2KTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0aEludEFyZy5k
aXNjb25uZWN0KG15T2JqZWN0WydteU92ZXJsb2FkZWRTbG90KGludCknXSkiKSwgc1VuZGVmaW5l
ZCk7CisKKyAgICAvLyBlcnJvbmVvdXMgaW5wdXQKKyAgICB7CisgICAgICAgIC8vICMjIyBRdFNj
cmlwdCBhZGRzIC5jb25uZWN0IHRvIGFsbCBmdW5jdGlvbnMsIFdlYktpdCBkb2VzIG9ubHkgdG8g
c2lnbmFscy9zbG90cworICAgICAgICBRU3RyaW5nIHR5cGU7CisgICAgICAgIFFTdHJpbmcgcmV0
ID0gZXZhbEpTKCIoZnVuY3Rpb24oKSB7IH0pLmNvbm5lY3QoKSIsIHR5cGUpOworICAgICAgICBR
Q09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJp
bmcoIlR5cGVFcnJvcjogJ3VuZGVmaW5lZCcgaXMgbm90IGEgZnVuY3Rpb24iKSk7CisgICAgfQor
ICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxK
UygidmFyIG8gPSB7IH07IG8uY29ubmVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jb25uZWN0OyAg
by5jb25uZWN0KCkiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKKyAg
ICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6ICd1bmRlZmluZWQn
IGlzIG5vdCBhIGZ1bmN0aW9uIikpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUVN0cmluZyB0
eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygiKGZ1bmN0aW9uKCkgeyB9KS5jb25u
ZWN0KDEyMykiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKKyAgICAg
ICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6ICd1bmRlZmluZWQnIGlz
IG5vdCBhIGZ1bmN0aW9uIikpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTdHJpbmcgdHlwZTsK
KyAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoInZhciBvID0geyB9OyBvLmNvbm5lY3QgPSBG
dW5jdGlvbi5wcm90b3R5cGUuY29ubmVjdDsgIG8uY29ubmVjdCgxMjMpIiwgdHlwZSk7CisgICAg
ICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGlu
MVN0cmluZygiVHlwZUVycm9yOiAndW5kZWZpbmVkJyBpcyBub3QgYSBmdW5jdGlvbiIpKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIFFTdHJpbmcgdHlwZTsKKyAgICAgICAgUVN0cmluZyByZXQg
PSBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlLmNvbm5lY3QoMTIzKSIsIHR5cGUpOworICAg
ICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRp
bjFTdHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IE15UU9iamVjdDo6bXlJ
bnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVN0
cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlJbnZv
a2FibGUuY29ubmVjdChmdW5jdGlvbigpIHsgfSkiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUo
dHlwZSwgc0Vycm9yKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBl
RXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2thYmxlKCkgaXMg
bm90IGEgc2lnbmFsIikpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOwor
ICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuY29ubmVjdCgx
MjMpIiwgdHlwZSk7CisgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7CisgICAgICAgIFFD
T01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2QuY29ubmVj
dDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
UVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlT
aWduYWwuZGlzY29ubmVjdCgpIiwgdHlwZSk7CisgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJv
cik7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IFF0TWV0YU1l
dGhvZC5kaXNjb25uZWN0OiBubyBhcmd1bWVudHMgZ2l2ZW4iKSk7CisgICAgfQorICAgIHsKKyAg
ICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygidmFyIG8g
PSB7IH07IG8uZGlzY29ubmVjdCA9IG15T2JqZWN0Lm15U2lnbmFsLmRpc2Nvbm5lY3Q7ICBvLmRp
c2Nvbm5lY3QoKSIsIHR5cGUpOworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAg
ICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRob2QuZGlz
Y29ubmVjdDogbm8gYXJndW1lbnRzIGdpdmVuIikpOworICAgIH0KKworICAgIC8qIFhGQUlMIC0g
RnVuY3Rpb24ucHJvdG90eXBlIGRvZXNuJ3QgZ2V0IGNvbm5lY3QvZGlzY29ubmVjdCwganVzdCBz
aWduYWxzL3Nsb3RzCisgICAgeworICAgICAgICBRU3RyaW5nIHR5cGU7CisgICAgICAgIFFTdHJp
bmcgcmV0ID0gZXZhbEpTKCIoZnVuY3Rpb24oKSB7IH0pLmRpc2Nvbm5lY3QoMTIzKSIsIHR5cGUp
OworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAgICAgICBRQ09NUEFSRShyZXQs
IFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRoaXMg
b2JqZWN0IGlzIG5vdCBhIHNpZ25hbCIpKTsKKyAgICB9CisgICAgKi8KKworICAgIHsKKyAgICAg
ICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygidmFyIG8gPSB7
IH07IG8uZGlzY29ubmVjdCA9IG15T2JqZWN0Lm15SW52b2thYmxlLmRpc2Nvbm5lY3Q7IG8uZGlz
Y29ubmVjdCgxMjMpIiwgdHlwZSk7CisgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Cisg
ICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRo
b2QuZGlzY29ubmVjdDogTXlRT2JqZWN0OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIp
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFFTdHJpbmcgdHlwZTsKKyAgICAgICAgUVN0cmlu
ZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlLmRpc2Nvbm5lY3QoMTIzKSIsIHR5
cGUpOworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAgICAgICBRQ09NUEFSRShy
ZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IE15
UU9iamVjdDo6bXlJbnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CisgICAgfQorICAgIHsK
KyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlP
YmplY3QubXlJbnZva2FibGUuZGlzY29ubmVjdChmdW5jdGlvbigpIHsgfSkiLCB0eXBlKTsKKyAg
ICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0
aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBNeVFPYmplY3Q6
Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3Qu
bXlTaWduYWwuZGlzY29ubmVjdCgxMjMpIiwgdHlwZSk7CisgICAgICAgIFFDT01QQVJFKHR5cGUs
IHNFcnJvcik7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9y
OiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJl
dCA9IGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuZGlzY29ubmVjdChmdW5jdGlvbigpIHsgfSki
LCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKKyAgICAgICAgUUNPTVBB
UkUocmV0LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IGZh
aWxlZCB0byBkaXNjb25uZWN0IGZyb20gTXlRT2JqZWN0OjpteVNpZ25hbCgpIikpOworICAgIH0K
KworICAgIC8vIHdoZW4gdGhlIHdyYXBwZXIgZGllcywgdGhlIGNvbm5lY3Rpb24gc3RheXMgYWxp
dmUKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmNvbm5lY3QobXlPYmpl
Y3QubXlTbG90KSIpLCBzVW5kZWZpbmVkKTsKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rp
b25JbnZva2VkKCk7CisgICAgbV9teU9iamVjdC0+ZW1pdE15U2lnbmFsKCk7CisgICAgUUNPTVBB
UkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMjApOworICAgIGV2YWxKUygibXlP
YmplY3QgPSBudWxsIik7CisgICAgZXZhbEpTKCJnYygpIik7CisgICAgbV9teU9iamVjdC0+cmVz
ZXRRdEZ1bmN0aW9uSW52b2tlZCgpOworICAgIG1fbXlPYmplY3QtPmVtaXRNeVNpZ25hbCgpOwor
ICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDIwKTsKK30KKwor
dm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6b3ZlcnJpZGVJbnZva2FibGUoKQoreworICAgIG1fbXlP
YmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15
T2JqZWN0Lm15SW52b2thYmxlKCkiKSwgc1VuZGVmaW5lZCk7CisgICAgUUNPTVBBUkUobV9teU9i
amVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMCk7CisKKyAgICAvKiBYRkFJTCAtIGNhbid0IHdy
aXRlIHRvIGZ1bmN0aW9ucyB3aXRoIFJ1bnRpbWVPYmplY3QKKyAgICBtX215T2JqZWN0LT5yZXNl
dFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZSA9
IGZ1bmN0aW9uKCkgeyB3aW5kb3cuYSA9IDEyMzsgfSIpOworICAgIGV2YWxKUygibXlPYmplY3Qu
bXlJbnZva2FibGUoKSIpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZv
a2VkKCksIC0xKTsKKyAgICBRQ09NUEFSRShldmFsSlMoIndpbmRvdy5hIikudG9Eb3VibGUoKSwg
MTIzLjApOworCisgICAgZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZSA9IGZ1bmN0aW9uKCkg
eyB3aW5kb3cuYSA9IDQ1NjsgfSIpOworICAgIGV2YWxKUygibXlPYmplY3QubXlJbnZva2FibGUo
KSIpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIC0xKTsK
KyAgICBRQ09NUEFSRShldmFsSlMoIndpbmRvdy5hIikudG9Eb3VibGUoKSwgNDU2LjApOworICAg
ICovCisKKyAgICBldmFsSlMoImRlbGV0ZSBteU9iamVjdC5teUludm9rYWJsZSIpOworICAgIGV2
YWxKUygibXlPYmplY3QubXlJbnZva2FibGUoKSIpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3Qt
PnF0RnVuY3Rpb25JbnZva2VkKCksIDApOworCisgICAgLyogWEZBSUwgLSBkaXR0bworICAgIG1f
bXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBldmFsSlMoIm15T2JqZWN0
Lm15SW52b2thYmxlID0gbXlPYmplY3QubXlJbnZva2FibGVXaXRoSW50QXJnIik7CisgICAgZXZh
bEpTKCJteU9iamVjdC5teUludm9rYWJsZSgxMjMpIik7CisgICAgUUNPTVBBUkUobV9teU9iamVj
dC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMSk7CisgICAgKi8KKworICAgIGV2YWxKUygiZGVsZXRl
IG15T2JqZWN0Lm15SW52b2thYmxlIik7CisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9u
SW52b2tlZCgpOworICAgIC8vIHRoaXMgZm9ybSAod2l0aCB0aGUgJygpJykgaXMgcmVhZC1vbmx5
CisgICAgZXZhbEpTKCJteU9iamVjdFsnbXlJbnZva2FibGUoKSddID0gZnVuY3Rpb24oKSB7IHdp
bmRvdy5hID0gMTIzOyB9Iik7CisgICAgZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZSgpIik7
CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMCk7Cit9CisK
K3ZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6Om92ZXJsb2FkZWRTbG90cygpCit7CisgICAgLy8gc2hv
dWxkIHBpY2sgbXlPdmVybG9hZGVkU2xvdChkb3VibGUpCisgICAgbV9teU9iamVjdC0+cmVzZXRR
dEZ1bmN0aW9uSW52b2tlZCgpOworICAgIGV2YWxKUygibXlPYmplY3QubXlPdmVybG9hZGVkU2xv
dCgxMCkiKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAy
Nik7CisKKyAgICAvLyBzaG91bGQgcGljayBteU92ZXJsb2FkZWRTbG90KGRvdWJsZSkKKyAgICBt
X215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgZXZhbEpTKCJteU9iamVj
dC5teU92ZXJsb2FkZWRTbG90KDEwLjApIik7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRG
dW5jdGlvbkludm9rZWQoKSwgMjYpOworCisgICAgLy8gc2hvdWxkIHBpY2sgbXlPdmVybG9hZGVk
U2xvdChRU3RyaW5nKQorICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsK
KyAgICBldmFsSlMoIm15T2JqZWN0Lm15T3ZlcmxvYWRlZFNsb3QoJzEwJykiKTsKKyAgICBRQ09N
UEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAyOSk7CisKKyAgICAvLyBzaG91
bGQgcGljayBteU92ZXJsb2FkZWRTbG90KGJvb2wpCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1
bmN0aW9uSW52b2tlZCgpOworICAgIGV2YWxKUygibXlPYmplY3QubXlPdmVybG9hZGVkU2xvdCh0
cnVlKSIpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDI1
KTsKKworICAgIC8vIHNob3VsZCBwaWNrIG15T3ZlcmxvYWRlZFNsb3QoUURhdGVUaW1lKQorICAg
IG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBldmFsSlMoIm15T2Jq
ZWN0Lm15T3ZlcmxvYWRlZFNsb3QobmV3IERhdGUoKSkiKTsKKyAgICBRQ09NUEFSRShtX215T2Jq
ZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAzMik7CisKKyAgICAvLyBzaG91bGQgcGljayBteU92
ZXJsb2FkZWRTbG90KFFSZWdFeHApCisgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52
b2tlZCgpOworICAgIGV2YWxKUygibXlPYmplY3QubXlPdmVybG9hZGVkU2xvdChuZXcgUmVnRXhw
KCkpIik7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMzQp
OworCisgICAgLy8gc2hvdWxkIHBpY2sgbXlPdmVybG9hZGVkU2xvdChRVmFyaWFudCkKKyAgICAv
KiBYRkFJTAorICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBR
U3RyaW5nIGYgPSBldmFsSlMoIm15T2JqZWN0Lm15T3ZlcmxvYWRlZFNsb3QiKTsKKyAgICBmLmNh
bGwoUVN0cmluZygpLCBRU3RyaW5nTGlzdCgpIDw8IG1fZW5naW5lLT5uZXdWYXJpYW50KFFWYXJp
YW50KCJjaWFvIikpKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tl
ZCgpLCAzNSk7CisgICAgKi8KKworICAgIC8vIFNob3VsZCBwaWNrIG15T3ZlcmxvYWRlZFNsb3Qo
UVdlYkVsZW1lbnQpLgorICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsK
KyAgICBldmFsSlMoIm15T2JqZWN0Lm15T3ZlcmxvYWRlZFNsb3QoZG9jdW1lbnQuYm9keSkiKTsK
KyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAzNik7CisKKyAg
ICAvLyBzaG91bGQgcGljayBteU92ZXJsb2FkZWRTbG90KFFPYmplY3QqKQorICAgIG1fbXlPYmpl
Y3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBldmFsSlMoIm15T2JqZWN0Lm15T3Zl
cmxvYWRlZFNsb3QobXlPYmplY3QpIik7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5j
dGlvbkludm9rZWQoKSwgNDEpOworCisgICAgLy8gc2hvdWxkIHBpY2sgbXlPdmVybG9hZGVkU2xv
dChRT2JqZWN0KikKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Cisg
ICAgZXZhbEpTKCJteU9iamVjdC5teU92ZXJsb2FkZWRTbG90KG51bGwpIik7CisgICAgUUNPTVBB
UkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgNDEpOworCisgICAgLy8gc2hvdWxk
IHBpY2sgbXlPdmVybG9hZGVkU2xvdChRU3RyaW5nTGlzdCkKKyAgICBtX215T2JqZWN0LT5yZXNl
dFF0RnVuY3Rpb25JbnZva2VkKCk7CisgICAgZXZhbEpTKCJteU9iamVjdC5teU92ZXJsb2FkZWRT
bG90KFsnaGVsbG8nXSkiKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52
b2tlZCgpLCA0Mik7Cit9CisKK2NsYXNzIE15RW51bVRlc3RRT2JqZWN0IDogcHVibGljIFFPYmpl
Y3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHAxIFJFQUQgcDEpCisg
ICAgUV9QUk9QRVJUWShRU3RyaW5nIHAyIFJFQUQgcDIpCisgICAgUV9QUk9QRVJUWShRU3RyaW5n
IHAzIFJFQUQgcDMgU0NSSVBUQUJMRSBmYWxzZSkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgcDQg
UkVBRCBwNCkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgcDUgUkVBRCBwNSBTQ1JJUFRBQkxFIGZh
bHNlKQorICAgIFFfUFJPUEVSVFkoUVN0cmluZyBwNiBSRUFEIHA2KQorcHVibGljOgorICAgIE15
RW51bVRlc3RRT2JqZWN0KFFPYmplY3QqIHBhcmVudCA9IDApCisgICAgICAgIDogUU9iamVjdChw
YXJlbnQpIHsgfQorCisgICAgUVN0cmluZyBwMSgpIGNvbnN0IHsgcmV0dXJuIFFMYXRpbjFTdHJp
bmcoInAxIik7IH0KKyAgICBRU3RyaW5nIHAyKCkgY29uc3QgeyByZXR1cm4gUUxhdGluMVN0cmlu
ZygicDIiKTsgfQorICAgIFFTdHJpbmcgcDMoKSBjb25zdCB7IHJldHVybiBRTGF0aW4xU3RyaW5n
KCJwMyIpOyB9CisgICAgUVN0cmluZyBwNCgpIGNvbnN0IHsgcmV0dXJuIFFMYXRpbjFTdHJpbmco
InA0Iik7IH0KKyAgICBRU3RyaW5nIHA1KCkgY29uc3QgeyByZXR1cm4gUUxhdGluMVN0cmluZygi
cDUiKTsgfQorICAgIFFTdHJpbmcgcDYoKSBjb25zdCB7IHJldHVybiBRTGF0aW4xU3RyaW5nKCJw
NiIpOyB9CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQgbXlTbG90KCkgeyB9CisgICAgdm9p
ZCBteU90aGVyU2xvdCgpIHsgfQorUV9TSUdOQUxTOgorICAgIHZvaWQgbXlTaWduYWwoKTsKK307
CisKK3ZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6OmVudW1lcmF0ZV9kYXRhKCkKK3sKKyAgICBRVGVz
dDo6YWRkQ29sdW1uPFFTdHJpbmdMaXN0PigiZXhwZWN0ZWROYW1lcyIpOworCisgICAgUVRlc3Q6
Om5ld1JvdygiZW51bWVyYXRlIGFsbCIpCisgICAgPDwgKFFTdHJpbmdMaXN0KCkKKyAgICAgICAg
Ly8gbWV0YS1vYmplY3QtZGVmaW5lZCBwcm9wZXJ0aWVzOgorICAgICAgICAvLyAgIGluaGVyaXRl
ZAorICAgICAgICA8PCAib2JqZWN0TmFtZSIKKyAgICAgICAgLy8gICBub24taW5oZXJpdGVkCisg
ICAgICAgIDw8ICJwMSIgPDwgInAyIiA8PCAicDQiIDw8ICJwNiIKKyAgICAgICAgLy8gZHluYW1p
YyBwcm9wZXJ0aWVzCisgICAgICAgIDw8ICJkcDEiIDw8ICJkcDIiIDw8ICJkcDMiCisgICAgICAg
IC8vIGluaGVyaXRlZCBzaWduYWxzIGFuZCBzbG90cworICAgICAgICA8PCAiZGVzdHJveWVkKFFP
YmplY3QqKSIgPDwgImRlc3Ryb3llZCgpIgorI2lmIGRlZmluZWQoSEFWRV9RVDUpICYmIEhBVkVf
UVQ1CisgICAgICAgIDw8ICJvYmplY3ROYW1lQ2hhbmdlZChRU3RyaW5nKSIKKyNlbmRpZgorICAg
ICAgICA8PCAiZGVsZXRlTGF0ZXIoKSIKKyAgICAgICAgLy8gbm90IGluY2x1ZGVkIGJlY2F1c2Ug
aXQncyBwcml2YXRlOgorICAgICAgICAvLyA8PCAiX3FfcmVyZWdpc3RlclRpbWVycyh2b2lkKiki
CisgICAgICAgIC8vIHNpZ25hbHMKKyAgICAgICAgPDwgIm15U2lnbmFsKCkiCisgICAgICAgIC8v
IHNsb3RzCisgICAgICAgIDw8ICJteVNsb3QoKSIgPDwgIm15T3RoZXJTbG90KCkiKTsKK30KKwor
dm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6ZW51bWVyYXRlKCkKK3sKKyAgICBRRkVUQ0goUVN0cmlu
Z0xpc3QsIGV4cGVjdGVkTmFtZXMpOworCisgICAgTXlFbnVtVGVzdFFPYmplY3QgZW51bVFPYmpl
Y3Q7CisgICAgLy8gZ2l2ZSBpdCBzb21lIGR5bmFtaWMgcHJvcGVydGllcworICAgIGVudW1RT2Jq
ZWN0LnNldFByb3BlcnR5KCJkcDEiLCAiZHAxIik7CisgICAgZW51bVFPYmplY3Quc2V0UHJvcGVy
dHkoImRwMiIsICJkcDIiKTsKKyAgICBlbnVtUU9iamVjdC5zZXRQcm9wZXJ0eSgiZHAzIiwgImRw
MyIpOworICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVj
dCgibXlFbnVtT2JqZWN0IiwgJmVudW1RT2JqZWN0KTsKKworICAgIC8vIGVudW1lcmF0ZSBpbiBz
Y3JpcHQKKyAgICB7CisgICAgICAgIGV2YWxKUygidmFyIGVudW1lcmF0ZWRQcm9wZXJ0aWVzID0g
W10iKTsKKyAgICAgICAgZXZhbEpTKCJmb3IgKHZhciBwIGluIG15RW51bU9iamVjdCkgeyBlbnVt
ZXJhdGVkUHJvcGVydGllcy5wdXNoKHApOyB9Iik7CisgICAgICAgIFFTdHJpbmdMaXN0IHJlc3Vs
dCA9IGV2YWxKU1YoImVudW1lcmF0ZWRQcm9wZXJ0aWVzIikudG9TdHJpbmdMaXN0KCk7CisgICAg
ICAgIFFDT01QQVJFKHJlc3VsdC5zaXplKCksIGV4cGVjdGVkTmFtZXMuc2l6ZSgpKTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZE5hbWVzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgUUNPTVBBUkUocmVzdWx0LmF0KGkpLCBleHBlY3RlZE5hbWVzLmF0KGkpKTsKKyAgICB9
Cit9CisKK3ZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6Om9iamVjdERlbGV0ZWQoKQoreworICAgIE15
UU9iamVjdCogcW9iaiA9IG5ldyBNeVFPYmplY3QoKTsKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgp
LT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoImJhciIsIHFvYmopOworICAgIGV2YWxKUygi
YmFyLm9iamVjdE5hbWUgPSAnZm9vJzsiKTsKKyAgICBRQ09NUEFSRShxb2JqLT5vYmplY3ROYW1l
KCksIFFMYXRpbjFTdHJpbmcoImZvbyIpKTsKKyAgICBldmFsSlMoImJhci5pbnRQcm9wZXJ0eSA9
IDEyMzsiKTsKKyAgICBRQ09NUEFSRShxb2JqLT5pbnRQcm9wZXJ0eSgpLCAxMjMpOworICAgIHFv
YmotPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBldmFsSlMoImJhci5teUludm9rYWJs
ZS5jYWxsKGJhcik7Iik7CisgICAgUUNPTVBBUkUocW9iai0+cXRGdW5jdGlvbkludm9rZWQoKSwg
MCk7CisKKyAgICAvLyBkbyB0aGlzLCB0byBlbnN1cmUgdGhhdCB3ZSBjYWNoZSB0aGF0IGl0IGlt
cGxlbWVudHMgY2FsbAorICAgIGV2YWxKUygiYmFyKCkiKTsKKworICAgIC8vIG5vdyBkZWxldGUg
dGhlIG9iamVjdAorICAgIGRlbGV0ZSBxb2JqOworCisgICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBl
b2YgYmFyIiksIHNPYmplY3QpOworCisgICAgLy8gYW55IGF0dGVtcHQgdG8gYWNjZXNzIHByb3Bl
cnRpZXMgb2YgdGhlIG9iamVjdCBzaG91bGQgcmVzdWx0IGluIGFuIGV4Y2VwdGlvbgorICAgIHsK
KyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygiYmFy
Lm9iamVjdE5hbWUiLCB0eXBlKTsKKyAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKKyAg
ICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogY2Fubm90IGFjY2VzcyBt
ZW1iZXIgYG9iamVjdE5hbWUnIG9mIGRlbGV0ZWQgUU9iamVjdCIpKTsKKyAgICB9CisgICAgewor
ICAgICAgICBRU3RyaW5nIHR5cGU7CisgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJiYXIu
b2JqZWN0TmFtZSA9ICdmb28nIiwgdHlwZSk7CisgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJv
cik7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IGNhbm5vdCBh
Y2Nlc3MgbWVtYmVyIGBvYmplY3ROYW1lJyBvZiBkZWxldGVkIFFPYmplY3QiKSk7CisgICAgfQor
CisgICAgLy8gbXlJbnZva2FibGUgaXMgc3RvcmVkIGluIG1lbWJlciB0YWJsZSAoc2luY2Ugd2Un
dmUgYWNjZXNzZWQgaXQgYmVmb3JlIGRlbGV0aW9uKQorICAgIHsKKyAgICAgICAgUVN0cmluZyB0
eXBlOworICAgICAgICBldmFsSlMoImJhci5teUludm9rYWJsZSIsIHR5cGUpOworICAgICAgICBR
Q09NUEFSRSh0eXBlLCBzRnVuY3Rpb24pOworICAgIH0KKworICAgIHsKKyAgICAgICAgUVN0cmlu
ZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygiYmFyLm15SW52b2thYmxlLmNh
bGwoYmFyKTsiLCB0eXBlKTsKKyAgICAgICAgcmV0ID0gZXZhbEpTKCJiYXIubXlJbnZva2FibGUo
YmFyKSIsIHR5cGUpOworICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAgICAgICBR
Q09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBjYW5ub3QgY2FsbCBmdW5jdGlvbiBv
ZiBkZWxldGVkIFFPYmplY3QiKSk7CisgICAgfQorICAgIC8vIG15SW52b2thYmxlV2l0aEludEFy
ZyBpcyBub3Qgc3RvcmVkIGluIG1lbWJlciB0YWJsZSAoc2luY2Ugd2UndmUgbm90IGFjY2Vzc2Vk
IGl0KQorICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9
IGV2YWxKUygiYmFyLm15SW52b2thYmxlV2l0aEludEFyZyIsIHR5cGUpOworICAgICAgICBRQ09N
UEFSRSh0eXBlLCBzRXJyb3IpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmco
IkVycm9yOiBjYW5ub3QgYWNjZXNzIG1lbWJlciBgbXlJbnZva2FibGVXaXRoSW50QXJnJyBvZiBk
ZWxldGVkIFFPYmplY3QiKSk7CisgICAgfQorCisgICAgLy8gYWNjZXNzIGZyb20gc2NyaXB0Cisg
ICAgZXZhbEpTKCJ3aW5kb3cubyA9IGJhcjsiKTsKKyAgICB7CisgICAgICAgIFFTdHJpbmcgdHlw
ZTsKKyAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm8ub2JqZWN0TmFtZSIsIHR5cGUpOwor
ICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFM
YXRpbjFTdHJpbmcoIkVycm9yOiBjYW5ub3QgYWNjZXNzIG1lbWJlciBgb2JqZWN0TmFtZScgb2Yg
ZGVsZXRlZCBRT2JqZWN0IikpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTdHJpbmcgdHlwZTsK
KyAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm8ubXlJbnZva2FibGUoKSIsIHR5cGUpOwor
ICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFM
YXRpbjFTdHJpbmcoIkVycm9yOiBjYW5ub3QgY2FsbCBmdW5jdGlvbiBvZiBkZWxldGVkIFFPYmpl
Y3QiKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3Ry
aW5nIHJldCA9IGV2YWxKUygiby5teUludm9rYWJsZVdpdGhJbnRBcmcoMTApIiwgdHlwZSk7Cisg
ICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxh
dGluMVN0cmluZygiRXJyb3I6IGNhbm5vdCBhY2Nlc3MgbWVtYmVyIGBteUludm9rYWJsZVdpdGhJ
bnRBcmcnIG9mIGRlbGV0ZWQgUU9iamVjdCIpKTsKKyAgICB9Cit9CisKK3ZvaWQgdHN0X1FPYmpl
Y3RCcmlkZ2U6OnR5cGVDb252ZXJzaW9uKCkKK3sKKyAgICBtX215T2JqZWN0LT5yZXNldFF0RnVu
Y3Rpb25JbnZva2VkKCk7CisKKyAgICBRRGF0ZVRpbWUgbG9jYWxkdChRRGF0ZSgyMDA4LCAxLCAx
OCksIFFUaW1lKDEyLCAzMSwgMCkpOworICAgIFFEYXRlVGltZSB1dGNsb2NhbGR0ID0gbG9jYWxk
dC50b1VUQygpOworICAgIFFEYXRlVGltZSB1dGNkdChRRGF0ZSgyMDA4LCAxLCAxOCksIFFUaW1l
KDEyLCAzMSwgMCksIFF0OjpVVEMpOworCisgICAgLy8gRGF0ZXMgaW4gSlMgKGRlZmF1bHQgdG8g
bG9jYWwpCisgICAgZXZhbEpTKCJteU9iamVjdC5teU92ZXJsb2FkZWRTbG90KG5ldyBEYXRlKDIw
MDgsMCwxOCwxMiwzMSwwKSkiKTsKKyAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9u
SW52b2tlZCgpLCAzMik7CisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVh
bHMoKS5zaXplKCksIDEpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1
YWxzKCkuYXQoMCkudG9EYXRlVGltZSgpLnRvVVRDKCksIHV0Y2xvY2FsZHQpOworCisgICAgbV9t
eU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOworICAgIGV2YWxKUygibXlPYmplY3Qu
bXlPdmVybG9hZGVkU2xvdChuZXcgRGF0ZShEYXRlLlVUQygyMDA4LDAsMTgsMTIsMzEsMCkpKSIp
OworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDMyKTsKKyAg
ICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMSk7Cisg
ICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKS50b0RhdGVU
aW1lKCkudG9VVEMoKSwgdXRjZHQpOworCisgICAgLy8gUHVzaGluZyBRRGF0ZVRpbWVzIGludG8g
SlMKKyAgICAvLyBMb2NhbAorICAgIGV2YWxKUygiZnVuY3Rpb24gY2hlY2tEYXRlKGQpIHt3aW5k
b3cuX19kYXRlX2VxdWFscyA9IChkLnRvU3RyaW5nKCkgPT0gbmV3IERhdGUoMjAwOCwwLDE4LDEy
LDMxLDApKT90cnVlOmZhbHNlO30iKTsKKyAgICBldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0
aERhdGVUaW1lQXJnLmNvbm5lY3QoY2hlY2tEYXRlKSIpOworICAgIG1fbXlPYmplY3QtPmVtaXRN
eVNpZ25hbFdpdGhEYXRlVGltZUFyZyhsb2NhbGR0KTsKKyAgICBRQ09NUEFSRShldmFsSlMoIndp
bmRvdy5fX2RhdGVfZXF1YWxzIiksIHNUcnVlKTsKKyAgICBldmFsSlMoImRlbGV0ZSB3aW5kb3cu
X19kYXRlX2VxdWFscyIpOworICAgIG1fbXlPYmplY3QtPmVtaXRNeVNpZ25hbFdpdGhEYXRlVGlt
ZUFyZyh1dGNsb2NhbGR0KTsKKyAgICBRQ09NUEFSRShldmFsSlMoIndpbmRvdy5fX2RhdGVfZXF1
YWxzIiksIHNUcnVlKTsKKyAgICBldmFsSlMoImRlbGV0ZSB3aW5kb3cuX19kYXRlX2VxdWFscyIp
OworICAgIGV2YWxKUygibXlPYmplY3QubXlTaWduYWxXaXRoRGF0ZVRpbWVBcmcuZGlzY29ubmVj
dChjaGVja0RhdGUpOyBkZWxldGUgY2hlY2tEYXRlOyIpOworCisgICAgLy8gVVRDCisgICAgZXZh
bEpTKCJmdW5jdGlvbiBjaGVja0RhdGUoZCkge3dpbmRvdy5fX2RhdGVfZXF1YWxzID0gKGQudG9T
dHJpbmcoKSA9PSBuZXcgRGF0ZShEYXRlLlVUQygyMDA4LDAsMTgsMTIsMzEsMCkpKT90cnVlOmZh
bHNlOyB9Iik7CisgICAgZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhEYXRlVGltZUFyZy5j
b25uZWN0KGNoZWNrRGF0ZSkiKTsKKyAgICBtX215T2JqZWN0LT5lbWl0TXlTaWduYWxXaXRoRGF0
ZVRpbWVBcmcodXRjZHQpOworICAgIFFDT01QQVJFKGV2YWxKUygid2luZG93Ll9fZGF0ZV9lcXVh
bHMiKSwgc1RydWUpOworICAgIGV2YWxKUygiZGVsZXRlIHdpbmRvdy5fX2RhdGVfZXF1YWxzIik7
CisgICAgZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhEYXRlVGltZUFyZy5kaXNjb25uZWN0
KGNoZWNrRGF0ZSk7IGRlbGV0ZSBjaGVja0RhdGU7Iik7CisKKyAgICAvLyAjIyMgUmVnRXhwcwor
fQorCitjbGFzcyBTdHJpbmdMaXN0VGVzdE9iamVjdCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBR
X09CSkVDVAorcHVibGljIFFfU0xPVFM6CisgICAgUVZhcmlhbnQgc3RyaW5nTGlzdCgpCisgICAg
eworICAgICAgICByZXR1cm4gUVN0cmluZ0xpc3QoKSA8PCAiUSIgPDwgInQiOworICAgIH07Cit9
OworCit2b2lkIHRzdF9RT2JqZWN0QnJpZGdlOjphcnJheU9iamVjdEVudW1lcmFibGUoKQorewor
ICAgIFFXZWJQYWdlIHBhZ2U7CisgICAgUVdlYkZyYW1lKiBmcmFtZSA9IHBhZ2UubWFpbkZyYW1l
KCk7CisgICAgUU9iamVjdCogcW9iamVjdCA9IG5ldyBTdHJpbmdMaXN0VGVzdE9iamVjdCgpOwor
ICAgIGZyYW1lLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoInRlc3QiLCBxb2JqZWN0LCBR
U2NyaXB0RW5naW5lOjpTY3JpcHRPd25lcnNoaXApOworCisgICAgY29uc3QgUVN0cmluZyBzY3Jp
cHQoInZhciBzdHJpbmdBcnJheSA9IHRlc3Quc3RyaW5nTGlzdCgpOyIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAidmFyIHJlc3VsdCA9ICcnOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAi
Zm9yICh2YXIgaSBpbiBzdHJpbmdBcnJheSkgeyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJlc3VsdCArPSBzdHJpbmdBcnJheVtpXTsiCisgICAgICAgICAgICAgICAgICAgICAgICAg
In0iCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdDsiKTsKKyAgICBRQ09NUEFSRShm
cmFtZS0+ZXZhbHVhdGVKYXZhU2NyaXB0KHNjcmlwdCkudG9TdHJpbmcoKSwgUVN0cmluZzo6ZnJv
bUxhdGluMSgiUXQiKSk7Cit9CisKK3ZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6OmRvbUN5Y2xlcygp
Cit7CisgICAgbV92aWV3LT5zZXRIdG1sKCI8aHRtbD48Ym9keT4iKTsKKyAgICBRVmFyaWFudCB2
ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+ZXZhbHVhdGVKYXZhU2NyaXB0KCJkb2N1bWVudCIpOwor
ICAgIFFWRVJJRlkodi50eXBlKCkgPT0gUVZhcmlhbnQ6Ok1hcCk7Cit9CisKK3ZvaWQgdHN0X1FP
YmplY3RCcmlkZ2U6OmpzQnl0ZUFycmF5KCkKK3sKKyAgICBRQnl0ZUFycmF5IGJhKCJoZWxsbyB3
b3JsZCIpOworICAgIG1fbXlPYmplY3QtPnNldEJ5dGVBcnJheVByb3BlcnR5KGJhKTsKKworICAg
IC8vIHJlYWQtb25seSBwcm9wZXJ0eQorICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPmJ5dGVBcnJh
eVByb3BlcnR5KCksIGJhKTsKKyAgICBRU3RyaW5nIHR5cGU7CisgICAgUVZhcmlhbnQgdiA9IGV2
YWxKU1YoIm15T2JqZWN0LmJ5dGVBcnJheVByb3BlcnR5Iik7CisgICAgUUNPTVBBUkUoaW50KHYu
dHlwZSgpKSwgaW50KFFWYXJpYW50OjpCeXRlQXJyYXkpKTsKKworICAgIFFDT01QQVJFKHYudG9C
eXRlQXJyYXkoKSwgYmEpOworfQorCit2b2lkIHRzdF9RT2JqZWN0QnJpZGdlOjpvd25lcnNoaXAo
KQoreworICAgIC8vIHRlc3Qgb3duZXJzaGlwCisgICAgeworICAgICAgICBRV2Vha1BvaW50ZXI8
UU9iamVjdD4gcHRyID0gbmV3IFFPYmplY3QoKTsKKyAgICAgICAgUVZFUklGWShwdHIpOworICAg
ICAgICB7CisgICAgICAgICAgICBRV2ViUGFnZSBwYWdlOworICAgICAgICAgICAgUVdlYkZyYW1l
KiBmcmFtZSA9IHBhZ2UubWFpbkZyYW1lKCk7CisgICAgICAgICAgICBmcmFtZS0+YWRkVG9KYXZh
U2NyaXB0V2luZG93T2JqZWN0KCJ0ZXN0IiwgcHRyLmRhdGEoKSwgUVNjcmlwdEVuZ2luZTo6U2Ny
aXB0T3duZXJzaGlwKTsKKyAgICAgICAgfQorICAgICAgICBRVkVSSUZZKCFwdHIpOworICAgIH0K
KyAgICB7CisgICAgICAgIFFXZWFrUG9pbnRlcjxRT2JqZWN0PiBwdHIgPSBuZXcgUU9iamVjdCgp
OworICAgICAgICBRVkVSSUZZKHB0cik7CisgICAgICAgIFFPYmplY3QqIGJlZm9yZSA9IHB0ci5k
YXRhKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFFXZWJQYWdlIHBhZ2U7CisgICAgICAgICAg
ICBRV2ViRnJhbWUqIGZyYW1lID0gcGFnZS5tYWluRnJhbWUoKTsKKyAgICAgICAgICAgIGZyYW1l
LT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoInRlc3QiLCBwdHIuZGF0YSgpLCBRU2NyaXB0
RW5naW5lOjpRdE93bmVyc2hpcCk7CisgICAgICAgIH0KKyAgICAgICAgUVZFUklGWShwdHIuZGF0
YSgpID09IGJlZm9yZSk7CisgICAgICAgIGRlbGV0ZSBwdHIuZGF0YSgpOworICAgIH0KKyAgICB7
CisgICAgICAgIFFPYmplY3QqIHBhcmVudCA9IG5ldyBRT2JqZWN0KCk7CisgICAgICAgIFFPYmpl
Y3QqIGNoaWxkID0gbmV3IFFPYmplY3QocGFyZW50KTsKKyAgICAgICAgUVdlYlBhZ2UgcGFnZTsK
KyAgICAgICAgUVdlYkZyYW1lKiBmcmFtZSA9IHBhZ2UubWFpbkZyYW1lKCk7CisgICAgICAgIGZy
YW1lLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoInRlc3QiLCBjaGlsZCwgUVNjcmlwdEVu
Z2luZTo6UXRPd25lcnNoaXApOworICAgICAgICBRVmFyaWFudCB2ID0gZnJhbWUtPmV2YWx1YXRl
SmF2YVNjcmlwdCgidGVzdCIpOworICAgICAgICBRQ09NUEFSRShxdmFyaWFudF9jYXN0PFFPYmpl
Y3QqPih2KSwgY2hpbGQpOworICAgICAgICBkZWxldGUgcGFyZW50OworICAgICAgICB2ID0gZnJh
bWUtPmV2YWx1YXRlSmF2YVNjcmlwdCgidGVzdCIpOworICAgICAgICBRQ09NUEFSRShxdmFyaWFu
dF9jYXN0PFFPYmplY3QqPih2KSwgKFFPYmplY3QgKikwKTsKKyAgICB9CisgICAgeworICAgICAg
ICBRV2Vha1BvaW50ZXI8UU9iamVjdD4gcHRyID0gbmV3IFFPYmplY3QoKTsKKyAgICAgICAgUVZF
UklGWShwdHIpOworICAgICAgICB7CisgICAgICAgICAgICBRV2ViUGFnZSBwYWdlOworICAgICAg
ICAgICAgUVdlYkZyYW1lKiBmcmFtZSA9IHBhZ2UubWFpbkZyYW1lKCk7CisgICAgICAgICAgICBm
cmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJ0ZXN0IiwgcHRyLmRhdGEoKSwgUVNj
cmlwdEVuZ2luZTo6QXV0b093bmVyc2hpcCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gbm8gcGFy
ZW50LCBzbyBpdCBzaG91bGQgYmUgbGlrZSBTY3JpcHRPd25lcnNoaXAKKyAgICAgICAgUVZFUklG
WSghcHRyKTsKKyAgICB9CisgICAgeworICAgICAgICBRT2JqZWN0KiBwYXJlbnQgPSBuZXcgUU9i
amVjdCgpOworICAgICAgICBRV2Vha1BvaW50ZXI8UU9iamVjdD4gY2hpbGQgPSBuZXcgUU9iamVj
dChwYXJlbnQpOworICAgICAgICBRVkVSSUZZKGNoaWxkKTsKKyAgICAgICAgeworICAgICAgICAg
ICAgUVdlYlBhZ2UgcGFnZTsKKyAgICAgICAgICAgIFFXZWJGcmFtZSogZnJhbWUgPSBwYWdlLm1h
aW5GcmFtZSgpOworICAgICAgICAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVj
dCgidGVzdCIsIGNoaWxkLmRhdGEoKSwgUVNjcmlwdEVuZ2luZTo6QXV0b093bmVyc2hpcCk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gaGFzIHBhcmVudCwgc28gaXQgc2hvdWxkIGJlIGxpa2UgUXRP
d25lcnNoaXAKKyAgICAgICAgUVZFUklGWShjaGlsZCk7CisgICAgICAgIGRlbGV0ZSBwYXJlbnQ7
CisgICAgfQorfQorCit2b2lkIHRzdF9RT2JqZWN0QnJpZGdlOjpudWxsVmFsdWUoKQoreworICAg
IFFWYXJpYW50IHYgPSBtX3ZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRlSmF2YVNj
cmlwdCgibnVsbCIpOworICAgIFFWRVJJRlkodi5pc051bGwoKSk7Cit9CisKK2NsYXNzIFRlc3RG
YWN0b3J5IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgVGVz
dEZhY3RvcnkoKQorICAgICAgICA6IG9iaigwKSwgY291bnRlcigwKQorICAgIHsgfQorCisgICAg
UV9JTlZPS0FCTEUgUU9iamVjdCogZ2V0TmV3T2JqZWN0KCkKKyAgICB7CisgICAgICAgIGRlbGV0
ZSBvYmo7CisgICAgICAgIG9iaiA9IG5ldyBRT2JqZWN0KHRoaXMpOworICAgICAgICBvYmotPnNl
dE9iamVjdE5hbWUoUUxhdGluMVN0cmluZygidGVzdCIpICsgUVN0cmluZzo6bnVtYmVyKCsrY291
bnRlcikpOworICAgICAgICByZXR1cm4gb2JqOworCisgICAgfQorCisgICAgUU9iamVjdCogb2Jq
OworICAgIGludCBjb3VudGVyOworfTsKKwordm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6cU9iamVj
dFdyYXBwZXJXaXRoU2FtZUlkZW50aXR5KCkKK3sKKyAgICBtX3ZpZXctPnNldEh0bWwoIjxzY3Jp
cHQ+ZnVuY3Rpb24gdHJpZ2dlckJ1ZygpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwYW4x
JykuaW5uZXJUZXh0ID0gdGVzdC5nZXROZXdPYmplY3QoKS5vYmplY3ROYW1lOyB9PC9zY3JpcHQ+
IgorICAgICAgICAgICAgICAgICAgICAiPGJvZHk+PHNwYW4gaWQ9J3NwYW4xJz50ZXN0PC9zcGFu
PjwvYm9keT4iKTsKKworICAgIFFXZWJGcmFtZSogbWFpbkZyYW1lID0gbV92aWV3LT5wYWdlKCkt
Pm1haW5GcmFtZSgpOworICAgIFFDT01QQVJFKG1haW5GcmFtZS0+dG9QbGFpblRleHQoKSwgUVN0
cmluZygidGVzdCIpKTsKKworICAgIG1haW5GcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2Jq
ZWN0KCJ0ZXN0IiwgbmV3IFRlc3RGYWN0b3J5LCBRU2NyaXB0RW5naW5lOjpTY3JpcHRPd25lcnNo
aXApOworCisgICAgbWFpbkZyYW1lLT5ldmFsdWF0ZUphdmFTY3JpcHQoInRyaWdnZXJCdWcoKTsi
KTsKKyAgICBRQ09NUEFSRShtYWluRnJhbWUtPnRvUGxhaW5UZXh0KCksIFFTdHJpbmcoInRlc3Qx
IikpOworCisgICAgbWFpbkZyYW1lLT5ldmFsdWF0ZUphdmFTY3JpcHQoInRyaWdnZXJCdWcoKTsi
KTsKKyAgICBRQ09NUEFSRShtYWluRnJhbWUtPnRvUGxhaW5UZXh0KCksIFFTdHJpbmcoInRlc3Qy
IikpOworfQorCit2b2lkIHRzdF9RT2JqZWN0QnJpZGdlOjppbnRyb3NwZWN0UXRNZXRob2RzX2Rh
dGEoKQoreworICAgIFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4oIm9iamVjdEV4cHJlc3Npb24i
KTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJtZXRob2ROYW1lIik7CisgICAgUVRl
c3Q6OmFkZENvbHVtbjxRU3RyaW5nTGlzdD4oImV4cGVjdGVkUHJvcGVydHlOYW1lcyIpOworCisg
ICAgUVRlc3Q6Om5ld1JvdygibXlPYmplY3QubXlTaWduYWwiKQorICAgICAgICA8PCAibXlPYmpl
Y3QiIDw8ICJteVNpZ25hbCIgPDwgKFFTdHJpbmdMaXN0KCkgPDwgImNvbm5lY3QiIDw8ICJkaXNj
b25uZWN0IiA8PCAibGVuZ3RoIiA8PCAibmFtZSIpOworICAgIFFUZXN0OjpuZXdSb3coIm15T2Jq
ZWN0Lm15U2xvdCIpCisgICAgICAgIDw8ICJteU9iamVjdCIgPDwgIm15U2xvdCIgPDwgKFFTdHJp
bmdMaXN0KCkgPDwgImNvbm5lY3QiIDw8ICJkaXNjb25uZWN0IiA8PCAibGVuZ3RoIiA8PCAibmFt
ZSIpOworICAgIFFUZXN0OjpuZXdSb3coIm15T2JqZWN0Lm15SW52b2thYmxlIikKKyAgICAgICAg
PDwgIm15T2JqZWN0IiA8PCAibXlJbnZva2FibGUiIDw8IChRU3RyaW5nTGlzdCgpIDw8ICJjb25u
ZWN0IiA8PCAiZGlzY29ubmVjdCIgPDwgImxlbmd0aCIgPDwgIm5hbWUiKTsKKyAgICBRVGVzdDo6
bmV3Um93KCJteU9iamVjdC5teVNpZ25hbC5jb25uZWN0IikKKyAgICAgICAgPDwgIm15T2JqZWN0
Lm15U2lnbmFsIiA8PCAiY29ubmVjdCIgPDwgKFFTdHJpbmdMaXN0KCkgPDwgImxlbmd0aCIgPDwg
Im5hbWUiKTsKKyAgICBRVGVzdDo6bmV3Um93KCJteU9iamVjdC5teVNpZ25hbC5kaXNjb25uZWN0
IikKKyAgICAgICAgPDwgIm15T2JqZWN0Lm15U2lnbmFsIiA8PCAiZGlzY29ubmVjdCIgPDwgKFFT
dHJpbmdMaXN0KCkgPDwgImxlbmd0aCIgPDwgIm5hbWUiKTsKK30KKwordm9pZCB0c3RfUU9iamVj
dEJyaWRnZTo6aW50cm9zcGVjdFF0TWV0aG9kcygpCit7CisgICAgUUZFVENIKFFTdHJpbmcsIG9i
amVjdEV4cHJlc3Npb24pOworICAgIFFGRVRDSChRU3RyaW5nLCBtZXRob2ROYW1lKTsKKyAgICBR
RkVUQ0goUVN0cmluZ0xpc3QsIGV4cGVjdGVkUHJvcGVydHlOYW1lcyk7CisKKyAgICBRU3RyaW5n
IG1ldGhvZExvb2t1cCA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIiUwWyclMSddIikuYXJnKG9iamVj
dEV4cHJlc3Npb24pLmFyZyhtZXRob2ROYW1lKTsKKyAgICBRQ09NUEFSRShldmFsSlNWKFFTdHJp
bmc6OmZyb21MYXRpbjEoIk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKCUwKS5zb3J0KCkiKS5h
cmcobWV0aG9kTG9va3VwKSkudG9TdHJpbmdMaXN0KCksIGV4cGVjdGVkUHJvcGVydHlOYW1lcyk7
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkUHJvcGVydHlOYW1lcy5zaXplKCk7
ICsraSkgeworICAgICAgICBRU3RyaW5nIG5hbWUgPSBleHBlY3RlZFByb3BlcnR5TmFtZXMuYXQo
aSk7CisgICAgICAgIFFDT01QQVJFKGV2YWxKUyhRU3RyaW5nOjpmcm9tTGF0aW4xKCIlMC5oYXNP
d25Qcm9wZXJ0eSgnJTEnKSIpLmFyZyhtZXRob2RMb29rdXApLmFyZyhuYW1lKSksIHNUcnVlKTsK
KyAgICAgICAgZXZhbEpTKFFTdHJpbmc6OmZyb21MYXRpbjEoInZhciBkZXNjcmlwdG9yID0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciglMCwgJyUxJykiKS5hcmcobWV0aG9kTG9va3Vw
KS5hcmcobmFtZSkpOworICAgICAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBkZXNjcmlwdG9y
IiksIFFTdHJpbmc6OmZyb21MYXRpbjEoIm9iamVjdCIpKTsKKyAgICAgICAgUUNPTVBBUkUoZXZh
bEpTKCJkZXNjcmlwdG9yLmdldCIpLCBzVW5kZWZpbmVkKTsKKyAgICAgICAgUUNPTVBBUkUoZXZh
bEpTKCJkZXNjcmlwdG9yLnNldCIpLCBzVW5kZWZpbmVkKTsKKyAgICAgICAgUUNPTVBBUkUoZXZh
bEpTKFFTdHJpbmc6OmZyb21MYXRpbjEoImRlc2NyaXB0b3IudmFsdWUgPT09ICUwWyclMSddIiku
YXJnKG1ldGhvZExvb2t1cCkuYXJnKG5hbWUpKSwgc1RydWUpOworICAgICAgICBRQ09NUEFSRShl
dmFsSlMoUVN0cmluZzo6ZnJvbUxhdGluMSgiZGVzY3JpcHRvci5lbnVtZXJhYmxlIikpLCBzRmFs
c2UpOworICAgICAgICBRQ09NUEFSRShldmFsSlMoUVN0cmluZzo6ZnJvbUxhdGluMSgiZGVzY3Jp
cHRvci5jb25maWd1cmFibGUiKSksIHNGYWxzZSk7CisgICAgfQorCisgICAgUVZFUklGWShldmFs
SlNWKCJ2YXIgcHJvcHM9W107IGZvciAodmFyIHAgaW4gbXlPYmplY3QuZGVsZXRlTGF0ZXIpIHtw
cm9wcy5wdXNoKHApO307IHByb3BzLnNvcnQoKSIpLnRvU3RyaW5nTGlzdCgpLmlzRW1wdHkoKSk7
Cit9CisKK3ZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6OndlYkVsZW1lbnRTbG90T25seSgpCit7Cisg
ICAgTXlXZWJFbGVtZW50U2xvdE9ubHlPYmplY3Qgb2JqZWN0OworICAgIG1fcGFnZS0+bWFpbkZy
YW1lKCktPnNldEh0bWwoIjxodG1sPjxoZWFkPjxib2R5PjwvYm9keT48L2h0bWw+Iik7CisgICAg
bV9wYWdlLT5tYWluRnJhbWUoKS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJteVdlYkVs
ZW1lbnRTbG90T2JqZWN0IiwgJm9iamVjdCk7CisgICAgZXZhbEpTKCJteVdlYkVsZW1lbnRTbG90
T2JqZWN0LmRvU29tZXRoaW5nV2l0aFdlYkVsZW1lbnQoZG9jdW1lbnQuYm9keSkiKTsKKyAgICBR
Q09NUEFSRShldmFsSlMoIm15V2ViRWxlbWVudFNsb3RPYmplY3QudGFnTmFtZSIpLCBRU3RyaW5n
KCJCT0RZIikpOworfQorCitRVEVTVF9NQUlOKHRzdF9RT2JqZWN0QnJpZGdlKQorI2luY2x1ZGUg
InRzdF9xb2JqZWN0YnJpZGdlLm1vYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVz
dHMvcXdlYmZyYW1lL3RzdF9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9x
d2ViZnJhbWUvdHN0X3F3ZWJmcmFtZS5jcHAKaW5kZXggM2Q4YTJiM2NlNTM1MjYxZjM5MDFkZjI4
MGE0NTNmNzMwNzFhOGMzYy4uMzFkODdiNzVhODc3NjEzOGUwZTkzOWY4YmM1ZDMwZmVlMWE5NTYz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2ViZnJhbWUvdHN0X3F3ZWJm
cmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2ViZnJhbWUvdHN0X3F3ZWJm
cmFtZS5jcHAKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgPHF3ZWJwYWdlLmg+CiAjaW5j
bHVkZSA8cXdlYmVsZW1lbnQuaD4KLSNpbmNsdWRlIDxxd2lkZ2V0Lmg+CiAjaW5jbHVkZSA8cXdl
YnZpZXcuaD4KICNpbmNsdWRlIDxxd2ViZnJhbWUuaD4KICNpbmNsdWRlIDxxd2ViaGlzdG9yeS5o
PgpAQCAtNDAsNTQ5ICszOSwxMSBAQAogI2VuZGlmCiAjaW5jbHVkZSAiLi4vdXRpbC5oIgogCi1z
dHJ1Y3QgQ3VzdG9tVHlwZSB7Ci0gICAgUVN0cmluZyBzdHJpbmc7Ci19OwotUV9ERUNMQVJFX01F
VEFUWVBFKEN1c3RvbVR5cGUpCi0KLVFfREVDTEFSRV9NRVRBVFlQRShRQnJ1c2gqKQotUV9ERUNM
QVJFX01FVEFUWVBFKFFPYmplY3RMaXN0KQotUV9ERUNMQVJFX01FVEFUWVBFKFFMaXN0PGludD4p
Ci1RX0RFQ0xBUkVfTUVUQVRZUEUoUXQ6OkJydXNoU3R5bGUpCi1RX0RFQ0xBUkVfTUVUQVRZUEUo
UVZhcmlhbnRMaXN0KQotUV9ERUNMQVJFX01FVEFUWVBFKFFWYXJpYW50TWFwKQotCi1jbGFzcyBN
eVFPYmplY3QgOiBwdWJsaWMgUU9iamVjdAotewotICAgIFFfT0JKRUNUCi0KLSAgICBRX1BST1BF
UlRZKGludCBpbnRQcm9wZXJ0eSBSRUFEIGludFByb3BlcnR5IFdSSVRFIHNldEludFByb3BlcnR5
KQotICAgIFFfUFJPUEVSVFkoUVZhcmlhbnQgdmFyaWFudFByb3BlcnR5IFJFQUQgdmFyaWFudFBy
b3BlcnR5IFdSSVRFIHNldFZhcmlhbnRQcm9wZXJ0eSkKLSAgICBRX1BST1BFUlRZKFFWYXJpYW50
TGlzdCB2YXJpYW50TGlzdFByb3BlcnR5IFJFQUQgdmFyaWFudExpc3RQcm9wZXJ0eSBXUklURSBz
ZXRWYXJpYW50TGlzdFByb3BlcnR5KQotICAgIFFfUFJPUEVSVFkoUVZhcmlhbnRNYXAgdmFyaWFu
dE1hcFByb3BlcnR5IFJFQUQgdmFyaWFudE1hcFByb3BlcnR5IFdSSVRFIHNldFZhcmlhbnRNYXBQ
cm9wZXJ0eSkKLSAgICBRX1BST1BFUlRZKFFTdHJpbmcgc3RyaW5nUHJvcGVydHkgUkVBRCBzdHJp
bmdQcm9wZXJ0eSBXUklURSBzZXRTdHJpbmdQcm9wZXJ0eSkKLSAgICBRX1BST1BFUlRZKFFTdHJp
bmdMaXN0IHN0cmluZ0xpc3RQcm9wZXJ0eSBSRUFEIHN0cmluZ0xpc3RQcm9wZXJ0eSBXUklURSBz
ZXRTdHJpbmdMaXN0UHJvcGVydHkpCi0gICAgUV9QUk9QRVJUWShRQnl0ZUFycmF5IGJ5dGVBcnJh
eVByb3BlcnR5IFJFQUQgYnl0ZUFycmF5UHJvcGVydHkgV1JJVEUgc2V0Qnl0ZUFycmF5UHJvcGVy
dHkpCi0gICAgUV9QUk9QRVJUWShRQnJ1c2ggYnJ1c2hQcm9wZXJ0eSBSRUFEIGJydXNoUHJvcGVy
dHkgV1JJVEUgc2V0QnJ1c2hQcm9wZXJ0eSkKLSAgICBRX1BST1BFUlRZKGRvdWJsZSBoaWRkZW5Q
cm9wZXJ0eSBSRUFEIGhpZGRlblByb3BlcnR5IFdSSVRFIHNldEhpZGRlblByb3BlcnR5IFNDUklQ
VEFCTEUgZmFsc2UpCi0gICAgUV9QUk9QRVJUWShpbnQgd3JpdGVPbmx5UHJvcGVydHkgV1JJVEUg
c2V0V3JpdGVPbmx5UHJvcGVydHkpCi0gICAgUV9QUk9QRVJUWShpbnQgcmVhZE9ubHlQcm9wZXJ0
eSBSRUFEIHJlYWRPbmx5UHJvcGVydHkpCi0gICAgUV9QUk9QRVJUWShRS2V5U2VxdWVuY2Ugc2hv
cnRjdXQgUkVBRCBzaG9ydGN1dCBXUklURSBzZXRTaG9ydGN1dCkKLSAgICBRX1BST1BFUlRZKEN1
c3RvbVR5cGUgcHJvcFdpdGhDdXN0b21UeXBlIFJFQUQgcHJvcFdpdGhDdXN0b21UeXBlIFdSSVRF
IHNldFByb3BXaXRoQ3VzdG9tVHlwZSkKLSAgICBRX1BST1BFUlRZKFFXZWJFbGVtZW50IHdlYkVs
ZW1lbnRQcm9wZXJ0eSBSRUFEIHdlYkVsZW1lbnRQcm9wZXJ0eSBXUklURSBzZXRXZWJFbGVtZW50
UHJvcGVydHkpCi0gICAgUV9QUk9QRVJUWShRT2JqZWN0KiBvYmplY3RTdGFyUHJvcGVydHkgUkVB
RCBvYmplY3RTdGFyUHJvcGVydHkgV1JJVEUgc2V0T2JqZWN0U3RhclByb3BlcnR5KQotICAgIFFf
RU5VTVMoUG9saWN5IFN0cmF0ZWd5KQotICAgIFFfRkxBR1MoQWJpbGl0eSkKLQotcHVibGljOgot
ICAgIGVudW0gUG9saWN5IHsKLSAgICAgICAgRm9vUG9saWN5ID0gMCwKLSAgICAgICAgQmFyUG9s
aWN5LAotICAgICAgICBCYXpQb2xpY3kKLSAgICB9OwotCi0gICAgZW51bSBTdHJhdGVneSB7Ci0g
ICAgICAgIEZvb1N0cmF0ZWd5ID0gMTAsCi0gICAgICAgIEJhclN0cmF0ZWd5LAotICAgICAgICBC
YXpTdHJhdGVneQotICAgIH07Ci0KLSAgICBlbnVtIEFiaWxpdHlGbGFnIHsKLSAgICAgICAgTm9B
YmlsaXR5ICA9IDB4MDAwLAotICAgICAgICBGb29BYmlsaXR5ID0gMHgwMDEsCi0gICAgICAgIEJh
ckFiaWxpdHkgPSAweDA4MCwKLSAgICAgICAgQmF6QWJpbGl0eSA9IDB4MjAwLAotICAgICAgICBB
bGxBYmlsaXR5ID0gRm9vQWJpbGl0eSB8IEJhckFiaWxpdHkgfCBCYXpBYmlsaXR5Ci0gICAgfTsK
LQotICAgIFFfREVDTEFSRV9GTEFHUyhBYmlsaXR5LCBBYmlsaXR5RmxhZykKLQotICAgIE15UU9i
amVjdChRT2JqZWN0KiBwYXJlbnQgPSAwKQotICAgICAgICA6IFFPYmplY3QocGFyZW50KSwKLSAg
ICAgICAgICAgIG1faW50VmFsdWUoMTIzKSwKLSAgICAgICAgICAgIG1fdmFyaWFudFZhbHVlKFFM
YXRpbjFTdHJpbmcoImZvbyIpKSwKLSAgICAgICAgICAgIG1fdmFyaWFudExpc3RWYWx1ZShRVmFy
aWFudExpc3QoKSA8PCBRVmFyaWFudCgxMjMpIDw8IFFWYXJpYW50KFFMYXRpbjFTdHJpbmcoImZv
byIpKSksCi0gICAgICAgICAgICBtX3N0cmluZ1ZhbHVlKFFMYXRpbjFTdHJpbmcoImJhciIpKSwK
LSAgICAgICAgICAgIG1fc3RyaW5nTGlzdFZhbHVlKFFTdHJpbmdMaXN0KCkgPDwgUUxhdGluMVN0
cmluZygiemlnIikgPDwgUUxhdGluMVN0cmluZygiemFnIikpLAotICAgICAgICAgICAgbV9icnVz
aFZhbHVlKFFDb2xvcigxMCwgMjAsIDMwLCA0MCkpLAotICAgICAgICAgICAgbV9oaWRkZW5WYWx1
ZSg0NTYuMCksCi0gICAgICAgICAgICBtX3dyaXRlT25seVZhbHVlKDc4OSksCi0gICAgICAgICAg
ICBtX3JlYWRPbmx5VmFsdWUoOTg3KSwKLSAgICAgICAgICAgIG1fb2JqZWN0U3RhcigwKSwKLSAg
ICAgICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQoLTEpCi0gICAgewotICAgICAgICBtX3Zhcmlh
bnRNYXBWYWx1ZS5pbnNlcnQoImEiLCBRVmFyaWFudCgxMjMpKTsKLSAgICAgICAgbV92YXJpYW50
TWFwVmFsdWUuaW5zZXJ0KCJiIiwgUVZhcmlhbnQoUUxhdGluMVN0cmluZygiZm9vIikpKTsKLSAg
ICAgICAgbV92YXJpYW50TWFwVmFsdWUuaW5zZXJ0KCJjIiwgUVZhcmlhbnQ6OmZyb21WYWx1ZTxR
T2JqZWN0Kj4odGhpcykpOwotICAgIH0KLQotICAgIH5NeVFPYmplY3QoKSB7IH0KLQotICAgIGlu
dCBpbnRQcm9wZXJ0eSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1faW50VmFsdWU7Ci0gICAg
fQotICAgIHZvaWQgc2V0SW50UHJvcGVydHkoaW50IHZhbHVlKSB7Ci0gICAgICAgIG1faW50VmFs
dWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBRVmFyaWFudCB2YXJpYW50UHJvcGVydHkoKSBjb25z
dCB7Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhbnRWYWx1ZTsKLSAgICB9Ci0gICAgdm9pZCBzZXRW
YXJpYW50UHJvcGVydHkoY29uc3QgUVZhcmlhbnQgJnZhbHVlKSB7Ci0gICAgICAgIG1fdmFyaWFu
dFZhbHVlID0gdmFsdWU7Ci0gICAgfQotCi0gICAgUVZhcmlhbnRMaXN0IHZhcmlhbnRMaXN0UHJv
cGVydHkoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhbnRMaXN0VmFsdWU7Ci0gICAg
fQotICAgIHZvaWQgc2V0VmFyaWFudExpc3RQcm9wZXJ0eShjb25zdCBRVmFyaWFudExpc3QgJnZh
bHVlKSB7Ci0gICAgICAgIG1fdmFyaWFudExpc3RWYWx1ZSA9IHZhbHVlOwotICAgIH0KLQotICAg
IFFWYXJpYW50TWFwIHZhcmlhbnRNYXBQcm9wZXJ0eSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJu
IG1fdmFyaWFudE1hcFZhbHVlOwotICAgIH0KLSAgICB2b2lkIHNldFZhcmlhbnRNYXBQcm9wZXJ0
eShjb25zdCBRVmFyaWFudE1hcCAmdmFsdWUpIHsKLSAgICAgICAgbV92YXJpYW50TWFwVmFsdWUg
PSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBRU3RyaW5nIHN0cmluZ1Byb3BlcnR5KCkgY29uc3Qgewot
ICAgICAgICByZXR1cm4gbV9zdHJpbmdWYWx1ZTsKLSAgICB9Ci0gICAgdm9pZCBzZXRTdHJpbmdQ
cm9wZXJ0eShjb25zdCBRU3RyaW5nICZ2YWx1ZSkgewotICAgICAgICBtX3N0cmluZ1ZhbHVlID0g
dmFsdWU7Ci0gICAgfQotCi0gICAgUVN0cmluZ0xpc3Qgc3RyaW5nTGlzdFByb3BlcnR5KCkgY29u
c3QgewotICAgICAgICByZXR1cm4gbV9zdHJpbmdMaXN0VmFsdWU7Ci0gICAgfQotICAgIHZvaWQg
c2V0U3RyaW5nTGlzdFByb3BlcnR5KGNvbnN0IFFTdHJpbmdMaXN0ICZ2YWx1ZSkgewotICAgICAg
ICBtX3N0cmluZ0xpc3RWYWx1ZSA9IHZhbHVlOwotICAgIH0KLQotICAgIFFCeXRlQXJyYXkgYnl0
ZUFycmF5UHJvcGVydHkoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX2J5dGVBcnJheVZhbHVl
OwotICAgIH0KLSAgICB2b2lkIHNldEJ5dGVBcnJheVByb3BlcnR5KGNvbnN0IFFCeXRlQXJyYXkg
JnZhbHVlKSB7Ci0gICAgICAgIG1fYnl0ZUFycmF5VmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAg
ICBRQnJ1c2ggYnJ1c2hQcm9wZXJ0eSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fYnJ1c2hW
YWx1ZTsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgdm9pZCBzZXRCcnVzaFByb3BlcnR5KGNvbnN0
IFFCcnVzaCAmdmFsdWUpIHsKLSAgICAgICAgbV9icnVzaFZhbHVlID0gdmFsdWU7Ci0gICAgfQot
Ci0gICAgZG91YmxlIGhpZGRlblByb3BlcnR5KCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV9o
aWRkZW5WYWx1ZTsKLSAgICB9Ci0gICAgdm9pZCBzZXRIaWRkZW5Qcm9wZXJ0eShkb3VibGUgdmFs
dWUpIHsKLSAgICAgICAgbV9oaWRkZW5WYWx1ZSA9IHZhbHVlOwotICAgIH0KLQotICAgIGludCB3
cml0ZU9ubHlQcm9wZXJ0eSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fd3JpdGVPbmx5VmFs
dWU7Ci0gICAgfQotICAgIHZvaWQgc2V0V3JpdGVPbmx5UHJvcGVydHkoaW50IHZhbHVlKSB7Ci0g
ICAgICAgIG1fd3JpdGVPbmx5VmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBpbnQgcmVhZE9u
bHlQcm9wZXJ0eSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fcmVhZE9ubHlWYWx1ZTsKLSAg
ICB9Ci0KLSAgICBRS2V5U2VxdWVuY2Ugc2hvcnRjdXQoKSBjb25zdCB7Ci0gICAgICAgIHJldHVy
biBtX3Nob3J0Y3V0OwotICAgIH0KLSAgICB2b2lkIHNldFNob3J0Y3V0KGNvbnN0IFFLZXlTZXF1
ZW5jZSAmc2VxKSB7Ci0gICAgICAgIG1fc2hvcnRjdXQgPSBzZXE7Ci0gICAgfQotCi0gICAgUVdl
YkVsZW1lbnQgd2ViRWxlbWVudFByb3BlcnR5KCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV93
ZWJFbGVtZW50OwotICAgIH0KLQotICAgIHZvaWQgc2V0V2ViRWxlbWVudFByb3BlcnR5KGNvbnN0
IFFXZWJFbGVtZW50JiBlbGVtZW50KSB7Ci0gICAgICAgIG1fd2ViRWxlbWVudCA9IGVsZW1lbnQ7
Ci0gICAgfQotCi0gICAgQ3VzdG9tVHlwZSBwcm9wV2l0aEN1c3RvbVR5cGUoKSBjb25zdCB7Ci0g
ICAgICAgIHJldHVybiBtX2N1c3RvbVR5cGU7Ci0gICAgfQotICAgIHZvaWQgc2V0UHJvcFdpdGhD
dXN0b21UeXBlKGNvbnN0IEN1c3RvbVR5cGUgJmMpIHsKLSAgICAgICAgbV9jdXN0b21UeXBlID0g
YzsKLSAgICB9Ci0KLSAgICBRT2JqZWN0KiBvYmplY3RTdGFyUHJvcGVydHkoKSBjb25zdCB7Ci0g
ICAgICAgIHJldHVybiBtX29iamVjdFN0YXI7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRPYmplY3RT
dGFyUHJvcGVydHkoUU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG1fb2JqZWN0U3RhciA9IG9i
amVjdDsKLSAgICB9Ci0KLQotICAgIGludCBxdEZ1bmN0aW9uSW52b2tlZCgpIGNvbnN0IHsKLSAg
ICAgICAgcmV0dXJuIG1fcXRGdW5jdGlvbkludm9rZWQ7Ci0gICAgfQotCi0gICAgUVZhcmlhbnRM
aXN0IHF0RnVuY3Rpb25BY3R1YWxzKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV9hY3R1YWxz
OwotICAgIH0KLQotICAgIHZvaWQgcmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpIHsKLSAgICAgICAg
bV9xdEZ1bmN0aW9uSW52b2tlZCA9IC0xOwotICAgICAgICBtX2FjdHVhbHMuY2xlYXIoKTsKLSAg
ICB9Ci0KLSAgICBRX0lOVk9LQUJMRSB2b2lkIG15SW52b2thYmxlKCkgewotICAgICAgICBtX3F0
RnVuY3Rpb25JbnZva2VkID0gMDsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgdm9pZCBteUludm9r
YWJsZVdpdGhJbnRBcmcoaW50IGFyZykgewotICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0g
MTsKLSAgICAgICAgbV9hY3R1YWxzIDw8IGFyZzsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgdm9p
ZCBteUludm9rYWJsZVdpdGhMb25nbG9uZ0FyZyhxbG9uZ2xvbmcgYXJnKSB7Ci0gICAgICAgIG1f
cXRGdW5jdGlvbkludm9rZWQgPSAyOwotICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOwotICAgIH0K
LSAgICBRX0lOVk9LQUJMRSB2b2lkIG15SW52b2thYmxlV2l0aEZsb2F0QXJnKGZsb2F0IGFyZykg
ewotICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gMzsKLSAgICAgICAgbV9hY3R1YWxzIDw8
IGFyZzsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgdm9pZCBteUludm9rYWJsZVdpdGhEb3VibGVB
cmcoZG91YmxlIGFyZykgewotICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gNDsKLSAgICAg
ICAgbV9hY3R1YWxzIDw8IGFyZzsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgdm9pZCBteUludm9r
YWJsZVdpdGhTdHJpbmdBcmcoY29uc3QgUVN0cmluZyAmYXJnKSB7Ci0gICAgICAgIG1fcXRGdW5j
dGlvbkludm9rZWQgPSA1OwotICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOwotICAgIH0KLSAgICBR
X0lOVk9LQUJMRSB2b2lkIG15SW52b2thYmxlV2l0aEludEFyZ3MoaW50IGFyZzEsIGludCBhcmcy
KSB7Ci0gICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSA2OwotICAgICAgICBtX2FjdHVhbHMg
PDwgYXJnMSA8PCBhcmcyOwotICAgIH0KLSAgICBRX0lOVk9LQUJMRSBpbnQgbXlJbnZva2FibGVS
ZXR1cm5pbmdJbnQoKSB7Ci0gICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSA3OwotICAgICAg
ICByZXR1cm4gMTIzOwotICAgIH0KLSAgICBRX0lOVk9LQUJMRSBxbG9uZ2xvbmcgbXlJbnZva2Fi
bGVSZXR1cm5pbmdMb25nTG9uZygpIHsKLSAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDM5
OwotICAgICAgICByZXR1cm4gNDU2OwotICAgIH0KLSAgICBRX0lOVk9LQUJMRSBRU3RyaW5nIG15
SW52b2thYmxlUmV0dXJuaW5nU3RyaW5nKCkgewotICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2Vk
ID0gODsKLSAgICAgICAgcmV0dXJuIFFMYXRpbjFTdHJpbmcoImNpYW8iKTsKLSAgICB9Ci0gICAg
UV9JTlZPS0FCTEUgdm9pZCBteUludm9rYWJsZVdpdGhJbnRBcmcoaW50IGFyZzEsIGludCBhcmcy
KSB7IC8vIG92ZXJsb2FkCi0gICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSA5OwotICAgICAg
ICBtX2FjdHVhbHMgPDwgYXJnMSA8PCBhcmcyOwotICAgIH0KLSAgICBRX0lOVk9LQUJMRSB2b2lk
IG15SW52b2thYmxlV2l0aEVudW1BcmcoUG9saWN5IHBvbGljeSkgewotICAgICAgICBtX3F0RnVu
Y3Rpb25JbnZva2VkID0gMTA7Ci0gICAgICAgIG1fYWN0dWFscyA8PCBwb2xpY3k7Ci0gICAgfQot
ICAgIFFfSU5WT0tBQkxFIHZvaWQgbXlJbnZva2FibGVXaXRoUXVhbGlmaWVkRW51bUFyZyhNeVFP
YmplY3Q6OlBvbGljeSBwb2xpY3kpIHsKLSAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDM2
OwotICAgICAgICBtX2FjdHVhbHMgPDwgcG9saWN5OwotICAgIH0KLSAgICBRX0lOVk9LQUJMRSBQ
b2xpY3kgbXlJbnZva2FibGVSZXR1cm5pbmdFbnVtKCkgewotICAgICAgICBtX3F0RnVuY3Rpb25J
bnZva2VkID0gMzc7Ci0gICAgICAgIHJldHVybiBCYXpQb2xpY3k7Ci0gICAgfQotICAgIFFfSU5W
T0tBQkxFIE15UU9iamVjdDo6UG9saWN5IG15SW52b2thYmxlUmV0dXJuaW5nUXVhbGlmaWVkRW51
bSgpIHsKLSAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDM4OwotICAgICAgICByZXR1cm4g
QmF6UG9saWN5OwotICAgIH0KLSAgICBRX0lOVk9LQUJMRSBRVmVjdG9yPGludD4gbXlJbnZva2Fi
bGVSZXR1cm5pbmdWZWN0b3JPZkludCgpIHsKLSAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9
IDExOwotICAgICAgICByZXR1cm4gUVZlY3RvcjxpbnQ+KCk7Ci0gICAgfQotICAgIFFfSU5WT0tB
QkxFIHZvaWQgbXlJbnZva2FibGVXaXRoVmVjdG9yT2ZJbnRBcmcoY29uc3QgUVZlY3RvcjxpbnQ+
ICYpIHsKLSAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDEyOwotICAgIH0KLSAgICBRX0lO
Vk9LQUJMRSBRT2JqZWN0KiBteUludm9rYWJsZVJldHVybmluZ1FPYmplY3RTdGFyKCkgewotICAg
ICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gMTM7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAg
IH0KLSAgICBRX0lOVk9LQUJMRSBRT2JqZWN0TGlzdCBteUludm9rYWJsZVdpdGhRT2JqZWN0TGlz
dEFyZyhjb25zdCBRT2JqZWN0TGlzdCAmbHN0KSB7Ci0gICAgICAgIG1fcXRGdW5jdGlvbkludm9r
ZWQgPSAxNDsKLSAgICAgICAgbV9hY3R1YWxzIDw8IFFWYXJpYW50Ojpmcm9tVmFsdWUobHN0KTsK
LSAgICAgICAgcmV0dXJuIGxzdDsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgUVZhcmlhbnQgbXlJ
bnZva2FibGVXaXRoVmFyaWFudEFyZyhjb25zdCBRVmFyaWFudCAmdikgewotICAgICAgICBtX3F0
RnVuY3Rpb25JbnZva2VkID0gMTU7Ci0gICAgICAgIG1fYWN0dWFscyA8PCB2OwotICAgICAgICBy
ZXR1cm4gdjsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgUVZhcmlhbnRNYXAgbXlJbnZva2FibGVX
aXRoVmFyaWFudE1hcEFyZyhjb25zdCBRVmFyaWFudE1hcCAmdm0pIHsKLSAgICAgICAgbV9xdEZ1
bmN0aW9uSW52b2tlZCA9IDE2OwotICAgICAgICBtX2FjdHVhbHMgPDwgdm07Ci0gICAgICAgIHJl
dHVybiB2bTsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgUUxpc3Q8aW50PiBteUludm9rYWJsZVdp
dGhMaXN0T2ZJbnRBcmcoY29uc3QgUUxpc3Q8aW50PiAmbHN0KSB7Ci0gICAgICAgIG1fcXRGdW5j
dGlvbkludm9rZWQgPSAxNzsKLSAgICAgICAgbV9hY3R1YWxzIDw8IFFWYXJpYW50Ojpmcm9tVmFs
dWUobHN0KTsKLSAgICAgICAgcmV0dXJuIGxzdDsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgUU9i
amVjdCogbXlJbnZva2FibGVXaXRoUU9iamVjdFN0YXJBcmcoUU9iamVjdCogb2JqKSB7Ci0gICAg
ICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAxODsKLSAgICAgICAgbV9hY3R1YWxzIDw8IFFWYXJp
YW50Ojpmcm9tVmFsdWUob2JqKTsKLSAgICAgICAgcmV0dXJuIG9iajsKLSAgICB9Ci0gICAgUV9J
TlZPS0FCTEUgUUJydXNoIG15SW52b2thYmxlV2l0aFFCcnVzaEFyZyhjb25zdCBRQnJ1c2ggJmJy
dXNoKSB7Ci0gICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAxOTsKLSAgICAgICAgbV9hY3R1
YWxzIDw8IFFWYXJpYW50Ojpmcm9tVmFsdWUoYnJ1c2gpOwotICAgICAgICByZXR1cm4gYnJ1c2g7
Ci0gICAgfQotICAgIFFfSU5WT0tBQkxFIHZvaWQgbXlJbnZva2FibGVXaXRoQnJ1c2hTdHlsZUFy
ZyhRdDo6QnJ1c2hTdHlsZSBzdHlsZSkgewotICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0g
NDM7Ci0gICAgICAgIG1fYWN0dWFscyA8PCBRVmFyaWFudDo6ZnJvbVZhbHVlKHN0eWxlKTsKLSAg
ICB9Ci0gICAgUV9JTlZPS0FCTEUgdm9pZCBteUludm9rYWJsZVdpdGhWb2lkU3RhckFyZyh2b2lk
KiBhcmcpIHsKLSAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDQ0OwotICAgICAgICBtX2Fj
dHVhbHMgPDwgUVZhcmlhbnQ6OmZyb21WYWx1ZShhcmcpOwotICAgIH0KLSAgICBRX0lOVk9LQUJM
RSB2b2lkIG15SW52b2thYmxlV2l0aEFtYmlndW91c0FyZyhpbnQgYXJnKSB7Ci0gICAgICAgIG1f
cXRGdW5jdGlvbkludm9rZWQgPSA0NTsKLSAgICAgICAgbV9hY3R1YWxzIDw8IFFWYXJpYW50Ojpm
cm9tVmFsdWUoYXJnKTsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgdm9pZCBteUludm9rYWJsZVdp
dGhBbWJpZ3VvdXNBcmcodWludCBhcmcpIHsKLSAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9
IDQ2OwotICAgICAgICBtX2FjdHVhbHMgPDwgUVZhcmlhbnQ6OmZyb21WYWx1ZShhcmcpOwotICAg
IH0KLSAgICBRX0lOVk9LQUJMRSB2b2lkIG15SW52b2thYmxlV2l0aERlZmF1bHRBcmdzKGludCBh
cmcxLCBjb25zdCBRU3RyaW5nICZhcmcyID0gIiIpIHsKLSAgICAgICAgbV9xdEZ1bmN0aW9uSW52
b2tlZCA9IDQ3OwotICAgICAgICBtX2FjdHVhbHMgPDwgUVZhcmlhbnQ6OmZyb21WYWx1ZShhcmcx
KSA8PCBxVmFyaWFudEZyb21WYWx1ZShhcmcyKTsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgUU9i
amVjdCYgbXlJbnZva2FibGVSZXR1cm5pbmdSZWYoKSB7Ci0gICAgICAgIG1fcXRGdW5jdGlvbklu
dm9rZWQgPSA0ODsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBRX0lOVk9LQUJM
RSBjb25zdCBRT2JqZWN0JiBteUludm9rYWJsZVJldHVybmluZ0NvbnN0UmVmKCkgY29uc3Qgewot
ICAgICAgICBjb25zdF9jYXN0PE15UU9iamVjdCo+KHRoaXMpLT5tX3F0RnVuY3Rpb25JbnZva2Vk
ID0gNDk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgdm9p
ZCBteUludm9rYWJsZVdpdGhQb2ludEFyZyhjb25zdCBRUG9pbnQgJmFyZykgewotICAgICAgICBj
b25zdF9jYXN0PE15UU9iamVjdCo+KHRoaXMpLT5tX3F0RnVuY3Rpb25JbnZva2VkID0gNTA7Ci0g
ICAgICAgIG1fYWN0dWFscyA8PCBRVmFyaWFudDo6ZnJvbVZhbHVlKGFyZyk7Ci0gICAgfQotICAg
IFFfSU5WT0tBQkxFIHZvaWQgbXlJbnZva2FibGVXaXRoUG9pbnRBcmcoY29uc3QgUVBvaW50RiAm
YXJnKSB7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8TXlRT2JqZWN0Kj4odGhpcyktPm1fcXRGdW5jdGlv
bkludm9rZWQgPSA1MTsKLSAgICAgICAgbV9hY3R1YWxzIDw8IFFWYXJpYW50Ojpmcm9tVmFsdWUo
YXJnKTsKLSAgICB9Ci0gICAgUV9JTlZPS0FCTEUgdm9pZCBteUludm9rYWJsZVdpdGhCb29sQXJn
KGJvb2wgYXJnKSB7Ci0gICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSA1MjsKLSAgICAgICAg
bV9hY3R1YWxzIDw8IGFyZzsKLSAgICB9Ci0KLSAgICB2b2lkIGVtaXRNeVNpZ25hbCgpIHsKLSAg
ICAgICAgZW1pdCBteVNpZ25hbCgpOwotICAgIH0KLSAgICB2b2lkIGVtaXRNeVNpZ25hbFdpdGhJ
bnRBcmcoaW50IGFyZykgewotICAgICAgICBlbWl0IG15U2lnbmFsV2l0aEludEFyZyhhcmcpOwot
ICAgIH0KLSAgICB2b2lkIGVtaXRNeVNpZ25hbDIoYm9vbCBhcmcpIHsKLSAgICAgICAgZW1pdCBt
eVNpZ25hbDIoYXJnKTsKLSAgICB9Ci0gICAgdm9pZCBlbWl0TXlTaWduYWwyKCkgewotICAgICAg
ICBlbWl0IG15U2lnbmFsMigpOwotICAgIH0KLSAgICB2b2lkIGVtaXRNeVNpZ25hbFdpdGhEYXRl
VGltZUFyZyhRRGF0ZVRpbWUgZHQpIHsKLSAgICAgICAgZW1pdCBteVNpZ25hbFdpdGhEYXRlVGlt
ZUFyZyhkdCk7Ci0gICAgfQotICAgIHZvaWQgZW1pdE15U2lnbmFsV2l0aFJlZ2V4QXJnKFFSZWdF
eHAgcikgewotICAgICAgICBlbWl0IG15U2lnbmFsV2l0aFJlZ2V4QXJnKHIpOwotICAgIH0KLQot
cHVibGljIFFfU0xPVFM6Ci0gICAgdm9pZCBteVNsb3QoKSB7Ci0gICAgICAgIG1fcXRGdW5jdGlv
bkludm9rZWQgPSAyMDsKLSAgICB9Ci0gICAgdm9pZCBteVNsb3RXaXRoSW50QXJnKGludCBhcmcp
IHsKLSAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDIxOwotICAgICAgICBtX2FjdHVhbHMg
PDwgYXJnOwotICAgIH0KLSAgICB2b2lkIG15U2xvdFdpdGhEb3VibGVBcmcoZG91YmxlIGFyZykg
ewotICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gMjI7Ci0gICAgICAgIG1fYWN0dWFscyA8
PCBhcmc7Ci0gICAgfQotICAgIHZvaWQgbXlTbG90V2l0aFN0cmluZ0FyZyhjb25zdCBRU3RyaW5n
ICZhcmcpIHsKLSAgICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDIzOwotICAgICAgICBtX2Fj
dHVhbHMgPDwgYXJnOwotICAgIH0KLQotICAgIHZvaWQgbXlPdmVybG9hZGVkU2xvdCgpIHsKLSAg
ICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDI0OwotICAgIH0KLSAgICB2b2lkIG15T3Zlcmxv
YWRlZFNsb3QoUU9iamVjdCogYXJnKSB7Ci0gICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSA0
MTsKLSAgICAgICAgbV9hY3R1YWxzIDw8IFFWYXJpYW50Ojpmcm9tVmFsdWUoYXJnKTsKLSAgICB9
Ci0gICAgdm9pZCBteU92ZXJsb2FkZWRTbG90KGJvb2wgYXJnKSB7Ci0gICAgICAgIG1fcXRGdW5j
dGlvbkludm9rZWQgPSAyNTsKLSAgICAgICAgbV9hY3R1YWxzIDw8IGFyZzsKLSAgICB9Ci0gICAg
dm9pZCBteU92ZXJsb2FkZWRTbG90KGNvbnN0IFFTdHJpbmdMaXN0ICZhcmcpIHsKLSAgICAgICAg
bV9xdEZ1bmN0aW9uSW52b2tlZCA9IDQyOwotICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOwotICAg
IH0KLSAgICB2b2lkIG15T3ZlcmxvYWRlZFNsb3QoZG91YmxlIGFyZykgewotICAgICAgICBtX3F0
RnVuY3Rpb25JbnZva2VkID0gMjY7Ci0gICAgICAgIG1fYWN0dWFscyA8PCBhcmc7Ci0gICAgfQot
ICAgIHZvaWQgbXlPdmVybG9hZGVkU2xvdChmbG9hdCBhcmcpIHsKLSAgICAgICAgbV9xdEZ1bmN0
aW9uSW52b2tlZCA9IDI3OwotICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOwotICAgIH0KLSAgICB2
b2lkIG15T3ZlcmxvYWRlZFNsb3QoaW50IGFyZykgewotICAgICAgICBtX3F0RnVuY3Rpb25JbnZv
a2VkID0gMjg7Ci0gICAgICAgIG1fYWN0dWFscyA8PCBhcmc7Ci0gICAgfQotICAgIHZvaWQgbXlP
dmVybG9hZGVkU2xvdChjb25zdCBRU3RyaW5nICZhcmcpIHsKLSAgICAgICAgbV9xdEZ1bmN0aW9u
SW52b2tlZCA9IDI5OwotICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOwotICAgIH0KLSAgICB2b2lk
IG15T3ZlcmxvYWRlZFNsb3QoY29uc3QgUUNvbG9yICZhcmcpIHsKLSAgICAgICAgbV9xdEZ1bmN0
aW9uSW52b2tlZCA9IDMwOwotICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOwotICAgIH0KLSAgICB2
b2lkIG15T3ZlcmxvYWRlZFNsb3QoY29uc3QgUUJydXNoICZhcmcpIHsKLSAgICAgICAgbV9xdEZ1
bmN0aW9uSW52b2tlZCA9IDMxOwotICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOwotICAgIH0KLSAg
ICB2b2lkIG15T3ZlcmxvYWRlZFNsb3QoY29uc3QgUURhdGVUaW1lICZhcmcpIHsKLSAgICAgICAg
bV9xdEZ1bmN0aW9uSW52b2tlZCA9IDMyOwotICAgICAgICBtX2FjdHVhbHMgPDwgYXJnOwotICAg
IH0KLSAgICB2b2lkIG15T3ZlcmxvYWRlZFNsb3QoY29uc3QgUURhdGUgJmFyZykgewotICAgICAg
ICBtX3F0RnVuY3Rpb25JbnZva2VkID0gMzM7Ci0gICAgICAgIG1fYWN0dWFscyA8PCBhcmc7Ci0g
ICAgfQotICAgIHZvaWQgbXlPdmVybG9hZGVkU2xvdChjb25zdCBRUmVnRXhwICZhcmcpIHsKLSAg
ICAgICAgbV9xdEZ1bmN0aW9uSW52b2tlZCA9IDM0OwotICAgICAgICBtX2FjdHVhbHMgPDwgYXJn
OwotICAgIH0KLSAgICB2b2lkIG15T3ZlcmxvYWRlZFNsb3QoY29uc3QgUVZhcmlhbnQgJmFyZykg
ewotICAgICAgICBtX3F0RnVuY3Rpb25JbnZva2VkID0gMzU7Ci0gICAgICAgIG1fYWN0dWFscyA8
PCBhcmc7Ci0gICAgfQotICAgIHZvaWQgbXlPdmVybG9hZGVkU2xvdChjb25zdCBRV2ViRWxlbWVu
dCAmYXJnKSB7Ci0gICAgICAgIG1fcXRGdW5jdGlvbkludm9rZWQgPSAzNjsKLSAgICAgICAgbV9h
Y3R1YWxzIDw8IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVdlYkVsZW1lbnQ+KGFyZyk7Ci0gICAgfQot
Ci0gICAgdm9pZCBxc2NyaXB0X2NhbGwoaW50IGFyZykgewotICAgICAgICBtX3F0RnVuY3Rpb25J
bnZva2VkID0gNDA7Ci0gICAgICAgIG1fYWN0dWFscyA8PCBhcmc7Ci0gICAgfQotCi1wcm90ZWN0
ZWQgUV9TTE9UUzoKLSAgICB2b2lkIG15UHJvdGVjdGVkU2xvdCgpIHsKLSAgICAgICAgbV9xdEZ1
bmN0aW9uSW52b2tlZCA9IDM2OwotICAgIH0KLQotcHJpdmF0ZSBRX1NMT1RTOgotICAgIHZvaWQg
bXlQcml2YXRlU2xvdCgpIHsgfQotCi1RX1NJR05BTFM6Ci0gICAgdm9pZCBteVNpZ25hbCgpOwot
ICAgIHZvaWQgbXlTaWduYWxXaXRoSW50QXJnKGludCBhcmcpOwotICAgIHZvaWQgbXlTaWduYWxX
aXRoRG91YmxlQXJnKGRvdWJsZSBhcmcpOwotICAgIHZvaWQgbXlTaWduYWwyKGJvb2wgYXJnID0g
ZmFsc2UpOwotICAgIHZvaWQgbXlTaWduYWxXaXRoRGF0ZVRpbWVBcmcoUURhdGVUaW1lIGR0KTsK
LSAgICB2b2lkIG15U2lnbmFsV2l0aFJlZ2V4QXJnKFFSZWdFeHAgcik7Ci0KLXByaXZhdGU6Ci0g
ICAgaW50IG1faW50VmFsdWU7Ci0gICAgUVZhcmlhbnQgbV92YXJpYW50VmFsdWU7Ci0gICAgUVZh
cmlhbnRMaXN0IG1fdmFyaWFudExpc3RWYWx1ZTsKLSAgICBRVmFyaWFudE1hcCBtX3ZhcmlhbnRN
YXBWYWx1ZTsKLSAgICBRU3RyaW5nIG1fc3RyaW5nVmFsdWU7Ci0gICAgUVN0cmluZ0xpc3QgbV9z
dHJpbmdMaXN0VmFsdWU7Ci0gICAgUUJ5dGVBcnJheSBtX2J5dGVBcnJheVZhbHVlOwotICAgIFFC
cnVzaCBtX2JydXNoVmFsdWU7Ci0gICAgZG91YmxlIG1faGlkZGVuVmFsdWU7Ci0gICAgaW50IG1f
d3JpdGVPbmx5VmFsdWU7Ci0gICAgaW50IG1fcmVhZE9ubHlWYWx1ZTsKLSAgICBRS2V5U2VxdWVu
Y2UgbV9zaG9ydGN1dDsKLSAgICBRV2ViRWxlbWVudCBtX3dlYkVsZW1lbnQ7Ci0gICAgQ3VzdG9t
VHlwZSBtX2N1c3RvbVR5cGU7Ci0gICAgUU9iamVjdCogbV9vYmplY3RTdGFyOwotICAgIGludCBt
X3F0RnVuY3Rpb25JbnZva2VkOwotICAgIFFWYXJpYW50TGlzdCBtX2FjdHVhbHM7Ci19OwotCi1j
bGFzcyBNeVdlYkVsZW1lbnRTbG90T25seU9iamVjdCA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBR
X09CSkVDVAotICAgIFFfUFJPUEVSVFkoUVN0cmluZyB0YWdOYW1lIFJFQUQgdGFnTmFtZSkKLXB1
YmxpYyBzbG90czoKLSAgICB2b2lkIGRvU29tZXRoaW5nV2l0aFdlYkVsZW1lbnQoY29uc3QgUVdl
YkVsZW1lbnQmIGVsZW1lbnQpCi0gICAgewotICAgICAgICBtX3RhZ05hbWUgPSBlbGVtZW50LnRh
Z05hbWUoKTsKLSAgICB9Ci0KLXB1YmxpYzoKLSAgICBRU3RyaW5nIHRhZ05hbWUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdGFnTmFtZTsKLSAgICB9Ci1wcml2YXRlOgotICAgIFFT
dHJpbmcgbV90YWdOYW1lOwotfTsKLQotY2xhc3MgTXlPdGhlclFPYmplY3QgOiBwdWJsaWMgTXlR
T2JqZWN0Ci17Ci1wdWJsaWM6Ci0gICAgTXlPdGhlclFPYmplY3QoUU9iamVjdCogcGFyZW50ID0g
MCkKLSAgICAgICAgOiBNeVFPYmplY3QocGFyZW50KSB7IH0KLX07Ci0KLWNsYXNzIE15RW51bVRl
c3RRT2JqZWN0IDogcHVibGljIFFPYmplY3QKLXsKLSAgICBRX09CSkVDVAotICAgIFFfUFJPUEVS
VFkoUVN0cmluZyBwMSBSRUFEIHAxKQotICAgIFFfUFJPUEVSVFkoUVN0cmluZyBwMiBSRUFEIHAy
KQotICAgIFFfUFJPUEVSVFkoUVN0cmluZyBwMyBSRUFEIHAzIFNDUklQVEFCTEUgZmFsc2UpCi0g
ICAgUV9QUk9QRVJUWShRU3RyaW5nIHA0IFJFQUQgcDQpCi0gICAgUV9QUk9QRVJUWShRU3RyaW5n
IHA1IFJFQUQgcDUgU0NSSVBUQUJMRSBmYWxzZSkKLSAgICBRX1BST1BFUlRZKFFTdHJpbmcgcDYg
UkVBRCBwNikKLXB1YmxpYzoKLSAgICBNeUVudW1UZXN0UU9iamVjdChRT2JqZWN0KiBwYXJlbnQg
PSAwKQotICAgICAgICA6IFFPYmplY3QocGFyZW50KSB7IH0KLSAgICBRU3RyaW5nIHAxKCkgY29u
c3QgewotICAgICAgICByZXR1cm4gUUxhdGluMVN0cmluZygicDEiKTsKLSAgICB9Ci0gICAgUVN0
cmluZyBwMigpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIFFMYXRpbjFTdHJpbmcoInAyIik7Ci0g
ICAgfQotICAgIFFTdHJpbmcgcDMoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBRTGF0aW4xU3Ry
aW5nKCJwMyIpOwotICAgIH0KLSAgICBRU3RyaW5nIHA0KCkgY29uc3QgewotICAgICAgICByZXR1
cm4gUUxhdGluMVN0cmluZygicDQiKTsKLSAgICB9Ci0gICAgUVN0cmluZyBwNSgpIGNvbnN0IHsK
LSAgICAgICAgcmV0dXJuIFFMYXRpbjFTdHJpbmcoInA1Iik7Ci0gICAgfQotICAgIFFTdHJpbmcg
cDYoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBRTGF0aW4xU3RyaW5nKCJwNSIpOwotICAgIH0K
LXB1YmxpYyBRX1NMT1RTOgotICAgIHZvaWQgbXlTbG90KCkgeyB9Ci0gICAgdm9pZCBteU90aGVy
U2xvdCgpIHsgfQotUV9TSUdOQUxTOgotICAgIHZvaWQgbXlTaWduYWwoKTsKLX07Ci0KIGNsYXNz
IHRzdF9RV2ViRnJhbWUgOiBwdWJsaWMgUU9iamVjdAogewogICAgIFFfT0JKRUNUCiAKIHB1Ymxp
YzoKLSAgICB0c3RfUVdlYkZyYW1lKCk7Ci0gICAgdmlydHVhbCB+dHN0X1FXZWJGcmFtZSgpOwog
ICAgIGJvb2wgZXZlbnRGaWx0ZXIoUU9iamVjdCogd2F0Y2hlZCwgUUV2ZW50KiBldmVudCk7CiAK
IHB1YmxpYyBzbG90czoKQEAgLTU5MSwyOCArNTIsOSBAQCBwdWJsaWMgc2xvdHM6CiAKIHByaXZh
dGUgc2xvdHM6CiAgICAgdm9pZCBob3Jpem9udGFsU2Nyb2xsQWZ0ZXJCYWNrKCk7Ci0gICAgdm9p
ZCBnZXRTZXRTdGF0aWNQcm9wZXJ0eSgpOwotICAgIHZvaWQgZ2V0U2V0RHluYW1pY1Byb3BlcnR5
KCk7Ci0gICAgdm9pZCBnZXRTZXRDaGlsZHJlbigpOwotICAgIHZvaWQgY2FsbFF0SW52b2thYmxl
KCk7Ci0gICAgdm9pZCBjb25uZWN0QW5kRGlzY29ubmVjdCgpOwotICAgIHZvaWQgY2xhc3NFbnVt
cygpOwotICAgIHZvaWQgY2xhc3NDb25zdHJ1Y3RvcigpOwotICAgIHZvaWQgb3ZlcnJpZGVJbnZv
a2FibGUoKTsKLSAgICB2b2lkIHRyYW5zZmVySW52b2thYmxlKCk7Ci0gICAgdm9pZCBmaW5kQ2hp
bGQoKTsKLSAgICB2b2lkIGZpbmRDaGlsZHJlbigpOwotICAgIHZvaWQgb3ZlcmxvYWRlZFNsb3Rz
KCk7Ci0gICAgdm9pZCB3ZWJFbGVtZW50U2xvdE9ubHkoKTsKLSAgICB2b2lkIGVudW1lcmF0ZV9k
YXRhKCk7Ci0gICAgdm9pZCBlbnVtZXJhdGUoKTsKLSAgICB2b2lkIG9iamVjdERlbGV0ZWQoKTsK
LSAgICB2b2lkIHR5cGVDb252ZXJzaW9uKCk7Ci0gICAgdm9pZCBhcnJheU9iamVjdEVudW1lcmFi
bGUoKTsKICAgICB2b2lkIHN5bW1ldHJpY1VybCgpOwogICAgIHZvaWQgcHJvZ3Jlc3NTaWduYWwo
KTsKICAgICB2b2lkIHVybENoYW5nZSgpOwotICAgIHZvaWQgZG9tQ3ljbGVzKCk7CiAgICAgdm9p
ZCByZXF1ZXN0ZWRVcmwoKTsKICAgICB2b2lkIHJlcXVlc3RlZFVybEFmdGVyU2V0QW5kTG9hZEZh
aWx1cmVzKCk7CiAgICAgdm9pZCBqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZF9kYXRhKCk7
CkBAIC02MzAsOSArNzIsNiBAQCBwcml2YXRlIHNsb3RzOgogI2VuZGlmCiAgICAgdm9pZCBpbnB1
dEZpZWxkRm9jdXMoKTsKICAgICB2b2lkIGhpdFRlc3RDb250ZW50KCk7Ci0gICAgdm9pZCBqc0J5
dGVBcnJheSgpOwotICAgIHZvaWQgb3duZXJzaGlwKCk7Ci0gICAgdm9pZCBudWxsVmFsdWUoKTsK
ICAgICB2b2lkIGJhc2VVcmxfZGF0YSgpOwogICAgIHZvaWQgYmFzZVVybCgpOwogICAgIHZvaWQg
aGFzU2V0Rm9jdXMoKTsKQEAgLTY0Miw5ICs4MSw2IEBAIHByaXZhdGUgc2xvdHM6CiAgICAgdm9p
ZCBzY3JvbGxUb0FuY2hvcigpOwogICAgIHZvaWQgc2Nyb2xsYmFyc09mZigpOwogICAgIHZvaWQg
ZXZhbHVhdGVXaWxsQ2F1c2VSZXBhaW50KCk7Ci0gICAgdm9pZCBxT2JqZWN0V3JhcHBlcldpdGhT
YW1lSWRlbnRpdHkoKTsKLSAgICB2b2lkIGludHJvc3BlY3RRdE1ldGhvZHNfZGF0YSgpOwotICAg
IHZvaWQgaW50cm9zcGVjdFF0TWV0aG9kcygpOwogICAgIHZvaWQgc2V0Q29udGVudF9kYXRhKCk7
CiAgICAgdm9pZCBzZXRDb250ZW50KCk7CiAgICAgdm9pZCBzZXRDYWNoZUxvYWRDb250cm9sQXR0
cmlidXRlKCk7CkBAIC02NjIsODAgKzk4LDEyIEBAIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBs
b2FkSW5TaWduYWxIYW5kbGVycygpOwogCiBwcml2YXRlOgotICAgIFFTdHJpbmcgIGV2YWxKUyhj
b25zdCBRU3RyaW5nJnMpIHsKLSAgICAgICAgLy8gQ29udmVydCBhbiB1bmRlZmluZWQgcmV0dXJu
IHZhcmlhbnQgdG8gdGhlIHN0cmluZyAidW5kZWZpbmVkIgotICAgICAgICBRVmFyaWFudCByZXQg
PSBldmFsSlNWKHMpOwotICAgICAgICBpZiAocmV0LnVzZXJUeXBlKCkgPT0gUU1ldGFUeXBlOjpW
b2lkKQotICAgICAgICAgICAgcmV0dXJuICJ1bmRlZmluZWQiOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXR1cm4gcmV0LnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIFFWYXJpYW50IGV2YWxK
U1YoY29uc3QgUVN0cmluZyAmcykgewotICAgICAgICByZXR1cm4gbV9wYWdlLT5tYWluRnJhbWUo
KS0+ZXZhbHVhdGVKYXZhU2NyaXB0KHMpOwotICAgIH0KLQotICAgIFFTdHJpbmcgIGV2YWxKUyhj
b25zdCBRU3RyaW5nJnMsIFFTdHJpbmcmIHR5cGUpIHsKLSAgICAgICAgcmV0dXJuIGV2YWxKU1Yo
cywgdHlwZSkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgUVZhcmlhbnQgZXZhbEpTVihjb25zdCBR
U3RyaW5nICZzLCBRU3RyaW5nJiB0eXBlKSB7Ci0gICAgICAgIC8vIEFzIGEgc3BlY2lhbCBtZWFz
dXJlLCBpZiB3ZSBnZXQgYW4gZXhjZXB0aW9uIHdlIHNldCB0aGUgdHlwZSB0byAnZXJyb3InCi0g
ICAgICAgIC8vIChpbiBlY21hLCBhbiBFcnJvciBvYmplY3QgaGFzIHR5cGVvZiBvYmplY3QsIGJ1
dCBxdHNjcmlwdCBoYXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbikKLSAgICAgICAgLy8gU2ltaWxh
cmx5LCBhbiBhcnJheSBpcyBhbiBvYmplY3QsIGJ1dCB3ZSdkIHByZWZlciB0byBoYXZlIGEgdHlw
ZSBvZiAnYXJyYXknCi0gICAgICAgIC8vIEFsc28sIGNvbnNpZGVyIGEgUU1ldGFUeXBlOjpWb2lk
IFFWYXJpYW50IHRvIGJlIHVuZGVmaW5lZAotICAgICAgICBRU3RyaW5nIGVzY2FwZWQgPSBzOwot
ICAgICAgICBlc2NhcGVkLnJlcGxhY2UoJ1wnJywgIlxcJyIpOyAvLyBEb24ndCBwcmVlc2NhcGUg
eW91ciBzaW5nbGUgcXVvdGVzIQotICAgICAgICBRU3RyaW5nIGNvZGUoInZhciByZXR2YWx1ZTsg
IgotICAgICAgICAgICAgICAgICAgICAgInZhciB0eXBldmFsdWU7ICIKLSAgICAgICAgICAgICAg
ICAgICAgICJ0cnkgeyAiCi0gICAgICAgICAgICAgICAgICAgICAiICAgIHJldHZhbHVlID0gZXZh
bCgnJTEnKTsgIgotICAgICAgICAgICAgICAgICAgICAgIiAgICB0eXBldmFsdWUgPSB0eXBlb2Yg
cmV0dmFsdWU7ICIKLSAgICAgICAgICAgICAgICAgICAgICIgICAgaWYgKHJldHZhbHVlIGluc3Rh
bmNlb2YgQXJyYXkpICIKLSAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHR5cGV2YWx1ZSA9
ICdhcnJheSc7ICIKLSAgICAgICAgICAgICAgICAgICAgICJ9IGNhdGNoKGUpIHsgIgotICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR2YWx1ZSA9IGUubmFtZSArICc6ICcgKyBlLm1lc3NhZ2U7
ICIKLSAgICAgICAgICAgICAgICAgICAgICIgICAgdHlwZXZhbHVlID0gJ2Vycm9yJzsgIgotICAg
ICAgICAgICAgICAgICAgICAgIn0iKTsKLSAgICAgICAgZXZhbEpTKGNvZGUuYXJnKGVzY2FwZWQp
KTsKLQotICAgICAgICBRVmFyaWFudCByZXQgPSBldmFsSlNWKCJyZXR2YWx1ZSIpOwotICAgICAg
ICBpZiAocmV0LnVzZXJUeXBlKCkgIT0gUU1ldGFUeXBlOjpWb2lkKQotICAgICAgICAgICAgdHlw
ZSA9IGV2YWxKUygidHlwZXZhbHVlIik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0
ID0gUVN0cmluZygidW5kZWZpbmVkIik7Ci0gICAgICAgICAgICB0eXBlID0gc1VuZGVmaW5lZDsK
LSAgICAgICAgfQotICAgICAgICBldmFsSlMoImRlbGV0ZSByZXR2YWx1ZTsgZGVsZXRlIHR5cGV2
YWx1ZSIpOwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIGNvbnN0IFFTdHJpbmcg
c1RydWU7Ci0gICAgY29uc3QgUVN0cmluZyBzRmFsc2U7Ci0gICAgY29uc3QgUVN0cmluZyBzVW5k
ZWZpbmVkOwotICAgIGNvbnN0IFFTdHJpbmcgc0FycmF5OwotICAgIGNvbnN0IFFTdHJpbmcgc0Z1
bmN0aW9uOwotICAgIGNvbnN0IFFTdHJpbmcgc0Vycm9yOwotICAgIGNvbnN0IFFTdHJpbmcgc1N0
cmluZzsKLSAgICBjb25zdCBRU3RyaW5nIHNPYmplY3Q7Ci0gICAgY29uc3QgUVN0cmluZyBzTnVt
YmVyOwotCi1wcml2YXRlOgogICAgIFFXZWJWaWV3KiBtX3ZpZXc7CiAgICAgUVdlYlBhZ2UqIG1f
cGFnZTsKLSAgICBNeVFPYmplY3QqIG1fbXlPYmplY3Q7CiAgICAgUVdlYlZpZXcqIG1faW5wdXRG
aWVsZHNUZXN0VmlldzsKICAgICBpbnQgbV9pbnB1dEZpZWxkVGVzdFBhaW50Q291bnQ7CiB9Owog
Ci10c3RfUVdlYkZyYW1lOjp0c3RfUVdlYkZyYW1lKCkKLSAgICA6IHNUcnVlKCJ0cnVlIiksIHNG
YWxzZSgiZmFsc2UiKSwgc1VuZGVmaW5lZCgidW5kZWZpbmVkIiksIHNBcnJheSgiYXJyYXkiKSwg
c0Z1bmN0aW9uKCJmdW5jdGlvbiIpLCBzRXJyb3IoImVycm9yIiksCi0gICAgICAgIHNTdHJpbmco
InN0cmluZyIpLCBzT2JqZWN0KCJvYmplY3QiKSwgc051bWJlcigibnVtYmVyIiksIG1faW5wdXRG
aWVsZHNUZXN0VmlldygwKSwgbV9pbnB1dEZpZWxkVGVzdFBhaW50Q291bnQoMCkKLXsKLX0KLQot
dHN0X1FXZWJGcmFtZTo6fnRzdF9RV2ViRnJhbWUoKQotewotfQotCiBib29sIHRzdF9RV2ViRnJh
bWU6OmV2ZW50RmlsdGVyKFFPYmplY3QqIHdhdGNoZWQsIFFFdmVudCogZXZlbnQpCiB7CiAgICAg
Ly8gdXNlZCBvbiB0aGUgaW5wdXRGaWVsZEZvY3VzIHRlc3QKQEAgLTc1MCwxNDY3ICsxMTgsMTEg
QEAgdm9pZCB0c3RfUVdlYkZyYW1lOjppbml0KCkKIHsKICAgICBtX3ZpZXcgPSBuZXcgUVdlYlZp
ZXcoKTsKICAgICBtX3BhZ2UgPSBtX3ZpZXctPnBhZ2UoKTsKLSAgICBtX215T2JqZWN0ID0gbmV3
IE15UU9iamVjdCgpOwotICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmFkZFRvSmF2YVNjcmlwdFdp
bmRvd09iamVjdCgibXlPYmplY3QiLCBtX215T2JqZWN0KTsKIH0KIAogdm9pZCB0c3RfUVdlYkZy
YW1lOjpjbGVhbnVwKCkKIHsKICAgICBkZWxldGUgbV92aWV3OwotICAgIGRlbGV0ZSBtX215T2Jq
ZWN0OwotfQotCi12b2lkIHRzdF9RV2ViRnJhbWU6OmdldFNldFN0YXRpY1Byb3BlcnR5KCkKLXsK
LSAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5zZXRIdG1sKCI8aHRtbD48aGVhZD48Ym9keT48L2Jv
ZHk+PC9odG1sPiIpOwotICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lm5vU3Vj
aFByb3BlcnR5IiksIHNVbmRlZmluZWQpOwotCi0gICAgLy8gaW5pdGlhbCB2YWx1ZSAoc2V0IGlu
IE15UU9iamVjdCBjb25zdHJ1Y3RvcikKLSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAg
ICAgICAgUVZhcmlhbnQgcmV0ID0gZXZhbEpTVigibXlPYmplY3QuaW50UHJvcGVydHkiLCB0eXBl
KTsKLSAgICAgICAgUUNPTVBBUkUodHlwZSwgc051bWJlcik7Ci0gICAgICAgIFFDT01QQVJFKHJl
dC50eXBlKCksIFFWYXJpYW50OjpEb3VibGUpOwotICAgICAgICBRQ09NUEFSRShyZXQudG9JbnQo
KSwgMTIzKTsKLSAgICB9Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5pbnRQcm9wZXJ0
eSA9PT0gMTIzLjAiKSwgc1RydWUpOwotCi0gICAgewotICAgICAgICBRU3RyaW5nIHR5cGU7Ci0g
ICAgICAgIFFWYXJpYW50IHJldCA9IGV2YWxKU1YoIm15T2JqZWN0LnZhcmlhbnRQcm9wZXJ0eSIs
IHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzU3RyaW5nKTsKLSAgICAgICAgUUNPTVBB
UkUocmV0LnR5cGUoKSwgUVZhcmlhbnQ6OlN0cmluZyk7Ci0gICAgICAgIFFDT01QQVJFKHJldC50
b1N0cmluZygpLCBRTGF0aW4xU3RyaW5nKCJmb28iKSk7Ci0gICAgfQotICAgIFFDT01QQVJFKGV2
YWxKUygibXlPYmplY3QudmFyaWFudFByb3BlcnR5ID09ICdmb28nIiksIHNUcnVlKTsKLQotICAg
IHsKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAgICAgICBRVmFyaWFudCByZXQgPSBldmFsSlNW
KCJteU9iamVjdC5zdHJpbmdQcm9wZXJ0eSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBl
LCBzU3RyaW5nKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LnR5cGUoKSwgUVZhcmlhbnQ6OlN0cmlu
Zyk7Ci0gICAgICAgIFFDT01QQVJFKHJldC50b1N0cmluZygpLCBRTGF0aW4xU3RyaW5nKCJiYXIi
KSk7Ci0gICAgfQotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Quc3RyaW5nUHJvcGVydHkg
PT09ICdiYXInIiksIHNUcnVlKTsKLQotICAgIHsKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAg
ICAgICBRVmFyaWFudCByZXQgPSBldmFsSlNWKCJteU9iamVjdC52YXJpYW50TGlzdFByb3BlcnR5
IiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNBcnJheSk7Ci0gICAgICAgIFFDT01Q
QVJFKHJldC50eXBlKCksIFFWYXJpYW50OjpMaXN0KTsKLSAgICAgICAgUVZhcmlhbnRMaXN0IHZs
ID0gcmV0LnZhbHVlPFFWYXJpYW50TGlzdD4oKTsKLSAgICAgICAgUUNPTVBBUkUodmwuc2l6ZSgp
LCAyKTsKLSAgICAgICAgUUNPTVBBUkUodmwuYXQoMCkudG9JbnQoKSwgMTIzKTsKLSAgICAgICAg
UUNPTVBBUkUodmwuYXQoMSkudG9TdHJpbmcoKSwgUUxhdGluMVN0cmluZygiZm9vIikpOwotICAg
IH0KLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnZhcmlhbnRMaXN0UHJvcGVydHkubGVu
Z3RoID09PSAyIiksIHNUcnVlKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnZhcmlh
bnRMaXN0UHJvcGVydHlbMF0gPT09IDEyMyIpLCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpT
KCJteU9iamVjdC52YXJpYW50TGlzdFByb3BlcnR5WzFdID09PSAnZm9vJyIpLCBzVHJ1ZSk7Ci0K
LSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVZhcmlhbnQgcmV0ID0gZXZh
bEpTVigibXlPYmplY3QudmFyaWFudE1hcFByb3BlcnR5IiwgdHlwZSk7Ci0gICAgICAgIFFDT01Q
QVJFKHR5cGUsIHNPYmplY3QpOwotICAgICAgICBRQ09NUEFSRShyZXQudHlwZSgpLCBRVmFyaWFu
dDo6TWFwKTsKLSAgICAgICAgUVZhcmlhbnRNYXAgdm0gPSByZXQudmFsdWU8UVZhcmlhbnRNYXA+
KCk7Ci0gICAgICAgIFFDT01QQVJFKHZtLnNpemUoKSwgMyk7Ci0gICAgICAgIFFDT01QQVJFKHZt
LnZhbHVlKCJhIikudG9JbnQoKSwgMTIzKTsKLSAgICAgICAgUUNPTVBBUkUodm0udmFsdWUoImIi
KS50b1N0cmluZygpLCBRTGF0aW4xU3RyaW5nKCJmb28iKSk7Ci0gICAgICAgIFFDT01QQVJFKHZt
LnZhbHVlKCJjIikudmFsdWU8UU9iamVjdCo+KCksIHN0YXRpY19jYXN0PFFPYmplY3QqPihtX215
T2JqZWN0KSk7Ci0gICAgfQotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QudmFyaWFudE1h
cFByb3BlcnR5LmEgPT09IDEyMyIpLCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9i
amVjdC52YXJpYW50TWFwUHJvcGVydHkuYiA9PT0gJ2ZvbyciKSwgc1RydWUpOwotICAgIFFDT01Q
QVJFKGV2YWxKUygibXlPYmplY3QudmFyaWFudE1hcFByb3BlcnR5LmMudmFyaWFudE1hcFByb3Bl
cnR5LmIgPT09ICdmb28nIiksIHNUcnVlKTsKLQotICAgIHsKLSAgICAgICAgUVN0cmluZyB0eXBl
OwotICAgICAgICBRVmFyaWFudCByZXQgPSBldmFsSlNWKCJteU9iamVjdC5zdHJpbmdMaXN0UHJv
cGVydHkiLCB0eXBlKTsKLSAgICAgICAgUUNPTVBBUkUodHlwZSwgc0FycmF5KTsKLSAgICAgICAg
UUNPTVBBUkUocmV0LnR5cGUoKSwgUVZhcmlhbnQ6Okxpc3QpOwotICAgICAgICBRVmFyaWFudExp
c3QgdmwgPSByZXQudmFsdWU8UVZhcmlhbnRMaXN0PigpOwotICAgICAgICBRQ09NUEFSRSh2bC5z
aXplKCksIDIpOwotICAgICAgICBRQ09NUEFSRSh2bC5hdCgwKS50b1N0cmluZygpLCBRTGF0aW4x
U3RyaW5nKCJ6aWciKSk7Ci0gICAgICAgIFFDT01QQVJFKHZsLmF0KDEpLnRvU3RyaW5nKCksIFFM
YXRpbjFTdHJpbmcoInphZyIpKTsKLSAgICB9Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVj
dC5zdHJpbmdMaXN0UHJvcGVydHkubGVuZ3RoID09PSAyIiksIHNUcnVlKTsKLSAgICBRQ09NUEFS
RShldmFsSlMoInR5cGVvZiBteU9iamVjdC5zdHJpbmdMaXN0UHJvcGVydHlbMF0iKSwgc1N0cmlu
Zyk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5zdHJpbmdMaXN0UHJvcGVydHlbMF0i
KSwgUUxhdGluMVN0cmluZygiemlnIikpOwotICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15
T2JqZWN0LnN0cmluZ0xpc3RQcm9wZXJ0eVsxXSIpLCBzU3RyaW5nKTsKLSAgICBRQ09NUEFSRShl
dmFsSlMoIm15T2JqZWN0LnN0cmluZ0xpc3RQcm9wZXJ0eVsxXSIpLCBRTGF0aW4xU3RyaW5nKCJ6
YWciKSk7Ci0KLSAgICAvLyBwcm9wZXJ0eSBjaGFuZ2UgaW4gQysrIHNob3VsZCBiZSByZWZsZWN0
ZWQgaW4gc2NyaXB0Ci0gICAgbV9teU9iamVjdC0+c2V0SW50UHJvcGVydHkoNDU2KTsKLSAgICBR
Q09NUEFSRShldmFsSlMoIm15T2JqZWN0LmludFByb3BlcnR5ID09IDQ1NiIpLCBzVHJ1ZSk7Ci0g
ICAgbV9teU9iamVjdC0+c2V0SW50UHJvcGVydHkoNzg5KTsKLSAgICBRQ09NUEFSRShldmFsSlMo
Im15T2JqZWN0LmludFByb3BlcnR5ID09IDc4OSIpLCBzVHJ1ZSk7Ci0KLSAgICBtX215T2JqZWN0
LT5zZXRWYXJpYW50UHJvcGVydHkoUUxhdGluMVN0cmluZygiYmFyIikpOwotICAgIFFDT01QQVJF
KGV2YWxKUygibXlPYmplY3QudmFyaWFudFByb3BlcnR5ID09PSAnYmFyJyIpLCBzVHJ1ZSk7Ci0g
ICAgbV9teU9iamVjdC0+c2V0VmFyaWFudFByb3BlcnR5KDQyKTsKLSAgICBRQ09NUEFSRShldmFs
SlMoIm15T2JqZWN0LnZhcmlhbnRQcm9wZXJ0eSA9PT0gNDIiKSwgc1RydWUpOwotICAgIG1fbXlP
YmplY3QtPnNldFZhcmlhbnRQcm9wZXJ0eShRVmFyaWFudDo6ZnJvbVZhbHVlKFFCcnVzaCgpKSk7
Ci0vL1hGQUlMCi0vLyAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3QudmFyaWFudFBy
b3BlcnR5IiksIHNWYXJpYW50KTsKLQotICAgIG1fbXlPYmplY3QtPnNldFN0cmluZ1Byb3BlcnR5
KFFMYXRpbjFTdHJpbmcoImJheiIpKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnN0
cmluZ1Byb3BlcnR5ID09PSAnYmF6JyIpLCBzVHJ1ZSk7Ci0gICAgbV9teU9iamVjdC0+c2V0U3Ry
aW5nUHJvcGVydHkoUUxhdGluMVN0cmluZygiemFiIikpOwotICAgIFFDT01QQVJFKGV2YWxKUygi
bXlPYmplY3Quc3RyaW5nUHJvcGVydHkgPT09ICd6YWInIiksIHNUcnVlKTsKLQotICAgIC8vIHBy
b3BlcnR5IGNoYW5nZSBpbiBzY3JpcHQgc2hvdWxkIGJlIHJlZmxlY3RlZCBpbiBDKysKLSAgICBR
Q09NUEFSRShldmFsSlMoIm15T2JqZWN0LmludFByb3BlcnR5ID0gMTIzIiksIFFMYXRpbjFTdHJp
bmcoIjEyMyIpKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LmludFByb3BlcnR5ID09
IDEyMyIpLCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+aW50UHJvcGVydHkoKSwg
MTIzKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LmludFByb3BlcnR5ID0gJ2NpYW8h
JzsiCi0gICAgICAgICAgICAgICAgICAgICJteU9iamVjdC5pbnRQcm9wZXJ0eSA9PSAwIiksIHNU
cnVlKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5pbnRQcm9wZXJ0eSgpLCAwKTsKLSAgICBR
Q09NUEFSRShldmFsSlMoIm15T2JqZWN0LmludFByb3BlcnR5ID0gJzEyMyc7IgotICAgICAgICAg
ICAgICAgICAgICAibXlPYmplY3QuaW50UHJvcGVydHkgPT0gMTIzIiksIHNUcnVlKTsKLSAgICBR
Q09NUEFSRShtX215T2JqZWN0LT5pbnRQcm9wZXJ0eSgpLCAxMjMpOwotCi0gICAgUUNPTVBBUkUo
ZXZhbEpTKCJteU9iamVjdC5zdHJpbmdQcm9wZXJ0eSA9ICdjaWFvJyIpLCBRTGF0aW4xU3RyaW5n
KCJjaWFvIikpOwotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Quc3RyaW5nUHJvcGVydHki
KSwgUUxhdGluMVN0cmluZygiY2lhbyIpKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5zdHJp
bmdQcm9wZXJ0eSgpLCBRTGF0aW4xU3RyaW5nKCJjaWFvIikpOwotICAgIFFDT01QQVJFKGV2YWxK
UygibXlPYmplY3Quc3RyaW5nUHJvcGVydHkgPSAxMjM7IgotICAgICAgICAgICAgICAgICAgICAi
bXlPYmplY3Quc3RyaW5nUHJvcGVydHkiKSwgUUxhdGluMVN0cmluZygiMTIzIikpOwotICAgIFFD
T01QQVJFKG1fbXlPYmplY3QtPnN0cmluZ1Byb3BlcnR5KCksIFFMYXRpbjFTdHJpbmcoIjEyMyIp
KTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnN0cmluZ1Byb3BlcnR5ID0gbnVsbCIp
LCBRU3RyaW5nKCkpOwotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Quc3RyaW5nUHJvcGVy
dHkiKSwgUVN0cmluZygpKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5zdHJpbmdQcm9wZXJ0
eSgpLCBRU3RyaW5nKCkpOwotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Quc3RyaW5nUHJv
cGVydHkgPSB1bmRlZmluZWQiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJt
eU9iamVjdC5zdHJpbmdQcm9wZXJ0eSIpLCBRU3RyaW5nKCkpOwotICAgIFFDT01QQVJFKG1fbXlP
YmplY3QtPnN0cmluZ1Byb3BlcnR5KCksIFFTdHJpbmcoKSk7Ci0KLSAgICBRQ09NUEFSRShldmFs
SlMoIm15T2JqZWN0LnZhcmlhbnRQcm9wZXJ0eSA9IG5ldyBOdW1iZXIoMTIzNCk7IgotICAgICAg
ICAgICAgICAgICAgICAibXlPYmplY3QudmFyaWFudFByb3BlcnR5IikudG9Eb3VibGUoKSwgMTIz
NC4wKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT52YXJpYW50UHJvcGVydHkoKS50b0RvdWJs
ZSgpLCAxMjM0LjApOwotCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC52YXJpYW50UHJv
cGVydHkgPSBuZXcgQm9vbGVhbigxMjM0KTsiCi0gICAgICAgICAgICAgICAgICAgICJteU9iamVj
dC52YXJpYW50UHJvcGVydHkiKSwgc1RydWUpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnZh
cmlhbnRQcm9wZXJ0eSgpLnRvQm9vbCgpLCB0cnVlKTsKLQotICAgIFFDT01QQVJFKGV2YWxKUygi
bXlPYmplY3QudmFyaWFudFByb3BlcnR5ID0gbnVsbDsiCi0gICAgICAgICAgICAgICAgICAgICJt
eU9iamVjdC52YXJpYW50UHJvcGVydHkudmFsdWVPZigpIiksIHNVbmRlZmluZWQpOwotICAgIFFD
T01QQVJFKG1fbXlPYmplY3QtPnZhcmlhbnRQcm9wZXJ0eSgpLCBRVmFyaWFudCgpKTsKLSAgICBR
Q09NUEFSRShldmFsSlMoIm15T2JqZWN0LnZhcmlhbnRQcm9wZXJ0eSA9IHVuZGVmaW5lZDsiCi0g
ICAgICAgICAgICAgICAgICAgICJteU9iamVjdC52YXJpYW50UHJvcGVydHkudmFsdWVPZigpIiks
IHNVbmRlZmluZWQpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnZhcmlhbnRQcm9wZXJ0eSgp
LCBRVmFyaWFudCgpKTsKLQotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QudmFyaWFudFBy
b3BlcnR5ID0gJ2Zvbyc7IgotICAgICAgICAgICAgICAgICAgICAibXlPYmplY3QudmFyaWFudFBy
b3BlcnR5LnZhbHVlT2YoKSIpLCBRTGF0aW4xU3RyaW5nKCJmb28iKSk7Ci0gICAgUUNPTVBBUkUo
bV9teU9iamVjdC0+dmFyaWFudFByb3BlcnR5KCksIFFWYXJpYW50KFFMYXRpbjFTdHJpbmcoImZv
byIpKSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC52YXJpYW50UHJvcGVydHkgPSA0
MjsiCi0gICAgICAgICAgICAgICAgICAgICJteU9iamVjdC52YXJpYW50UHJvcGVydHkiKS50b0Rv
dWJsZSgpLCA0Mi4wKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT52YXJpYW50UHJvcGVydHko
KS50b0RvdWJsZSgpLCA0Mi4wKTsKLQotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QudmFy
aWFudExpc3RQcm9wZXJ0eSA9IFsxLCAndHdvJywgdHJ1ZV07IgotICAgICAgICAgICAgICAgICAg
ICAibXlPYmplY3QudmFyaWFudExpc3RQcm9wZXJ0eS5sZW5ndGggPT0gMyIpLCBzVHJ1ZSk7Ci0g
ICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC52YXJpYW50TGlzdFByb3BlcnR5WzBdID09PSAx
IiksIHNUcnVlKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnZhcmlhbnRMaXN0UHJv
cGVydHlbMV0iKSwgUUxhdGluMVN0cmluZygidHdvIikpOwotICAgIFFDT01QQVJFKGV2YWxKUygi
bXlPYmplY3QudmFyaWFudExpc3RQcm9wZXJ0eVsyXSA9PT0gdHJ1ZSIpLCBzVHJ1ZSk7Ci0KLSAg
ICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnN0cmluZ0xpc3RQcm9wZXJ0eSA9IFsxLCAndHdv
JywgdHJ1ZV07IgotICAgICAgICAgICAgICAgICAgICAibXlPYmplY3Quc3RyaW5nTGlzdFByb3Bl
cnR5Lmxlbmd0aCA9PSAzIiksIHNUcnVlKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBt
eU9iamVjdC5zdHJpbmdMaXN0UHJvcGVydHlbMF0iKSwgc1N0cmluZyk7Ci0gICAgUUNPTVBBUkUo
ZXZhbEpTKCJteU9iamVjdC5zdHJpbmdMaXN0UHJvcGVydHlbMF0gPT0gJzEnIiksIHNUcnVlKTsK
LSAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5zdHJpbmdMaXN0UHJvcGVydHlb
MV0iKSwgc1N0cmluZyk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5zdHJpbmdMaXN0
UHJvcGVydHlbMV0iKSwgUUxhdGluMVN0cmluZygidHdvIikpOwotICAgIFFDT01QQVJFKGV2YWxK
UygidHlwZW9mIG15T2JqZWN0LnN0cmluZ0xpc3RQcm9wZXJ0eVsyXSIpLCBzU3RyaW5nKTsKLSAg
ICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0LnN0cmluZ0xpc3RQcm9wZXJ0eVsyXSIpLCBRTGF0
aW4xU3RyaW5nKCJ0cnVlIikpOwotICAgIGV2YWxKUygibXlPYmplY3Qud2ViRWxlbWVudFByb3Bl
cnR5PWRvY3VtZW50LmJvZHk7Iik7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC53ZWJF
bGVtZW50UHJvcGVydHkudGFnTmFtZSIpLCBRTGF0aW4xU3RyaW5nKCJCT0RZIikpOwotCi0gICAg
Ly8gdHJ5IHRvIGRlbGV0ZQotICAgIFFDT01QQVJFKGV2YWxKUygiZGVsZXRlIG15T2JqZWN0Lmlu
dFByb3BlcnR5IiksIHNGYWxzZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5pbnRQ
cm9wZXJ0eSA9PSAxMjMiKSwgc1RydWUpOwotCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJkZWxldGUg
bXlPYmplY3QudmFyaWFudFByb3BlcnR5IiksIHNGYWxzZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpT
KCJteU9iamVjdC52YXJpYW50UHJvcGVydHkiKS50b0RvdWJsZSgpLCA0Mi4wKTsKLQotICAgIC8v
IGN1c3RvbSBwcm9wZXJ0eQotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QuY3VzdG9tUHJv
cGVydHkiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5jdXN0
b21Qcm9wZXJ0eSA9IDEyMzsiCi0gICAgICAgICAgICAgICAgICAgICJteU9iamVjdC5jdXN0b21Q
cm9wZXJ0eSA9PSAxMjMiKSwgc1RydWUpOwotICAgIFFWYXJpYW50IHYgPSBtX3BhZ2UtPm1haW5G
cmFtZSgpLT5ldmFsdWF0ZUphdmFTY3JpcHQoIm15T2JqZWN0LmN1c3RvbVByb3BlcnR5Iik7Ci0g
ICAgUUNPTVBBUkUodi50eXBlKCksIFFWYXJpYW50OjpEb3VibGUpOwotICAgIFFDT01QQVJFKHYu
dG9JbnQoKSwgMTIzKTsKLQotICAgIC8vIG5vbi1zY3JpcHRhYmxlIHByb3BlcnR5Ci0gICAgUUNP
TVBBUkUobV9teU9iamVjdC0+aGlkZGVuUHJvcGVydHkoKSwgNDU2LjApOwotICAgIFFDT01QQVJF
KGV2YWxKUygibXlPYmplY3QuaGlkZGVuUHJvcGVydHkiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNP
TVBBUkUoZXZhbEpTKCJteU9iamVjdC5oaWRkZW5Qcm9wZXJ0eSA9IDEyMzsiCi0gICAgICAgICAg
ICAgICAgICAgICJteU9iamVjdC5oaWRkZW5Qcm9wZXJ0eSA9PSAxMjMiKSwgc1RydWUpOwotICAg
IFFDT01QQVJFKG1fbXlPYmplY3QtPmhpZGRlblByb3BlcnR5KCksIDQ1Ni4wKTsKLQotICAgIC8v
IHdyaXRlLW9ubHkgcHJvcGVydHkKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT53cml0ZU9ubHlQ
cm9wZXJ0eSgpLCA3ODkpOwotICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lndy
aXRlT25seVByb3BlcnR5IiksIHNVbmRlZmluZWQpOwotICAgIFFDT01QQVJFKGV2YWxKUygibXlP
YmplY3Qud3JpdGVPbmx5UHJvcGVydHkgPSAxMjM7IgotICAgICAgICAgICAgICAgICAgICAidHlw
ZW9mIG15T2JqZWN0LndyaXRlT25seVByb3BlcnR5IiksIHNVbmRlZmluZWQpOwotICAgIFFDT01Q
QVJFKG1fbXlPYmplY3QtPndyaXRlT25seVByb3BlcnR5KCksIDEyMyk7Ci0KLSAgICAvLyByZWFk
LW9ubHkgcHJvcGVydHkKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5yZWFkT25seVByb3BlcnR5
KCksIDk4Nyk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5yZWFkT25seVByb3BlcnR5
ID09IDk4NyIpLCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5yZWFkT25s
eVByb3BlcnR5ID0gNjU0OyIKLSAgICAgICAgICAgICAgICAgICAgIm15T2JqZWN0LnJlYWRPbmx5
UHJvcGVydHkgPT0gOTg3IiksIHNUcnVlKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5yZWFk
T25seVByb3BlcnR5KCksIDk4Nyk7Ci0KLSAgICAvLyBRT2JqZWN0KiBwcm9wZXJ0eQotICAgIG1f
bXlPYmplY3QtPnNldE9iamVjdFN0YXJQcm9wZXJ0eSgwKTsKLSAgICBRQ09NUEFSRShtX215T2Jq
ZWN0LT5vYmplY3RTdGFyUHJvcGVydHkoKSwgKFFPYmplY3QqKTApOwotICAgIFFDT01QQVJFKGV2
YWxKUygibXlPYmplY3Qub2JqZWN0U3RhclByb3BlcnR5ID09IG51bGwiKSwgc1RydWUpOwotICAg
IFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lm9iamVjdFN0YXJQcm9wZXJ0eSIpLCBz
T2JqZWN0KTsKLSAgICBRQ09NUEFSRShldmFsSlMoIkJvb2xlYW4obXlPYmplY3Qub2JqZWN0U3Rh
clByb3BlcnR5KSIpLCBzRmFsc2UpOwotICAgIFFDT01QQVJFKGV2YWxKUygiU3RyaW5nKG15T2Jq
ZWN0Lm9iamVjdFN0YXJQcm9wZXJ0eSkgPT0gJ251bGwnIiksIHNUcnVlKTsKLSAgICBRQ09NUEFS
RShldmFsSlMoIm15T2JqZWN0Lm9iamVjdFN0YXJQcm9wZXJ0eS5vYmplY3RTdGFyUHJvcGVydHki
KSwKLSAgICAgICAgc1VuZGVmaW5lZCk7Ci0gICAgbV9teU9iamVjdC0+c2V0T2JqZWN0U3RhclBy
b3BlcnR5KHRoaXMpOwotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3Qub2JqZWN0U3RhclBy
b3BlcnR5ICE9IG51bGwiKSwgc1RydWUpOwotICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15
T2JqZWN0Lm9iamVjdFN0YXJQcm9wZXJ0eSIpLCBzT2JqZWN0KTsKLSAgICBRQ09NUEFSRShldmFs
SlMoIkJvb2xlYW4obXlPYmplY3Qub2JqZWN0U3RhclByb3BlcnR5KSIpLCBzVHJ1ZSk7Ci0gICAg
UUNPTVBBUkUoZXZhbEpTKCJTdHJpbmcobXlPYmplY3Qub2JqZWN0U3RhclByb3BlcnR5KSAhPSAn
bnVsbCciKSwgc1RydWUpOwotfQotCi12b2lkIHRzdF9RV2ViRnJhbWU6OmdldFNldER5bmFtaWNQ
cm9wZXJ0eSgpCi17Ci0gICAgLy8gaW5pdGlhbGx5IHRoZSBvYmplY3QgZG9lcyBub3QgaGF2ZSB0
aGUgcHJvcGVydHkKLSAgICAvLyBJbiBXZWJLaXQsIFJ1bnRpbWVPYmplY3RzIGRvIG5vdCBpbmhl
cml0IE9iamVjdCwgc28gZG9uJ3QgaGF2ZSBoYXNPd25Qcm9wZXJ0eQotCi0gICAgLy9RQ09NUEFS
RShldmFsSlMoIm15T2JqZWN0Lmhhc093blByb3BlcnR5KCdkeW5hbWljUHJvcGVydHknKSIpLCBz
RmFsc2UpOwotICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0LmR5bmFtaWNQcm9w
ZXJ0eSIpLCBzVW5kZWZpbmVkKTsKLQotICAgIC8vIGFkZCBhIGR5bmFtaWMgcHJvcGVydHkgaW4g
QysrCi0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+c2V0UHJvcGVydHkoImR5bmFtaWNQcm9wZXJ0
eSIsIDEyMyksIGZhbHNlKTsKLSAgICAvL1FDT01QQVJFKGV2YWxKUygibXlPYmplY3QuaGFzT3du
UHJvcGVydHkoJ2R5bmFtaWNQcm9wZXJ0eScpIiksIHNUcnVlKTsKLSAgICBRQ09NUEFSRShldmFs
SlMoInR5cGVvZiBteU9iamVjdC5keW5hbWljUHJvcGVydHkgIT0gJ3VuZGVmaW5lZCciKSwgc1Ry
dWUpOwotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QuZHluYW1pY1Byb3BlcnR5ID09IDEy
MyIpLCBzVHJ1ZSk7Ci0KLSAgICAvLyBwcm9wZXJ0eSBjaGFuZ2UgaW4gc2NyaXB0IHNob3VsZCBi
ZSByZWZsZWN0ZWQgaW4gQysrCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5keW5hbWlj
UHJvcGVydHkgPSAnZm9vJzsiCi0gICAgICAgICAgICAgICAgICAgICJteU9iamVjdC5keW5hbWlj
UHJvcGVydHkiKSwgUUxhdGluMVN0cmluZygiZm9vIikpOwotICAgIFFDT01QQVJFKG1fbXlPYmpl
Y3QtPnByb3BlcnR5KCJkeW5hbWljUHJvcGVydHkiKS50b1N0cmluZygpLCBRTGF0aW4xU3RyaW5n
KCJmb28iKSk7Ci0KLSAgICAvLyBkZWxldGUgdGhlIHByb3BlcnR5IChYRkFJTCAtIGNhbid0IGRl
bGV0ZSBwcm9wZXJ0aWVzKQotICAgIFFFWFBFQ1RfRkFJTCgiIiwgImNhbid0IGRlbGV0ZSBwcm9w
ZXJ0aWVzIiwgQ29udGludWUpOwotICAgIFFDT01QQVJFKGV2YWxKUygiZGVsZXRlIG15T2JqZWN0
LmR5bmFtaWNQcm9wZXJ0eSIpLCBzVHJ1ZSk7Ci0gICAgLyoKLSAgICBRQ09NUEFSRShtX215T2Jq
ZWN0LT5wcm9wZXJ0eSgiZHluYW1pY1Byb3BlcnR5IikuaXNWYWxpZCgpLCBmYWxzZSk7Ci0gICAg
UUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3QuZHluYW1pY1Byb3BlcnR5IiksIHNVbmRl
ZmluZWQpOwotICAgIC8vICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QuaGFzT3duUHJvcGVy
dHkoJ2R5bmFtaWNQcm9wZXJ0eScpIiksIHNGYWxzZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJ0
eXBlb2YgbXlPYmplY3QuZHluYW1pY1Byb3BlcnR5IiksIHNVbmRlZmluZWQpOwotICAgICovCi19
Ci0KLXZvaWQgdHN0X1FXZWJGcmFtZTo6Z2V0U2V0Q2hpbGRyZW4oKQotewotICAgIC8vIGluaXRp
YWxseSB0aGUgb2JqZWN0IGRvZXMgbm90IGhhdmUgdGhlIGNoaWxkCi0gICAgLy8gKGFnYWluLCBu
byBoYXNPd25Qcm9wZXJ0eSkKLQotICAgIC8vUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5oYXNP
d25Qcm9wZXJ0eSgnY2hpbGQnKSIpLCBzRmFsc2UpOwotICAgIFFDT01QQVJFKGV2YWxKUygidHlw
ZW9mIG15T2JqZWN0LmNoaWxkIiksIHNVbmRlZmluZWQpOwotCi0gICAgLy8gYWRkIGEgY2hpbGQK
LSAgICBNeVFPYmplY3QqIGNoaWxkID0gbmV3IE15UU9iamVjdChtX215T2JqZWN0KTsKLSAgICBj
aGlsZC0+c2V0T2JqZWN0TmFtZSgiY2hpbGQiKTsKLS8vICBRQ09NUEFSRShldmFsSlMoIm15T2Jq
ZWN0Lmhhc093blByb3BlcnR5KCdjaGlsZCcpIiksIHNUcnVlKTsKLSAgICBRQ09NUEFSRShldmFs
SlMoInR5cGVvZiBteU9iamVjdC5jaGlsZCAhPSAndW5kZWZpbmVkJyIpLCBzVHJ1ZSk7Ci0KLSAg
ICAvLyBhZGQgYSBncmFuZGNoaWxkCi0gICAgTXlRT2JqZWN0KiBncmFuZENoaWxkID0gbmV3IE15
UU9iamVjdChjaGlsZCk7Ci0gICAgZ3JhbmRDaGlsZC0+c2V0T2JqZWN0TmFtZSgiZ3JhbmRDaGls
ZCIpOwotLy8gIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QuY2hpbGQuaGFzT3duUHJvcGVydHko
J2dyYW5kQ2hpbGQnKSIpLCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlP
YmplY3QuY2hpbGQuZ3JhbmRDaGlsZCAhPSAndW5kZWZpbmVkJyIpLCBzVHJ1ZSk7Ci0KLSAgICAv
LyBkZWxldGUgZ3JhbmRjaGlsZAotICAgIGRlbGV0ZSBncmFuZENoaWxkOwotLy8gIFFDT01QQVJF
KGV2YWxKUygibXlPYmplY3QuY2hpbGQuaGFzT3duUHJvcGVydHkoJ2dyYW5kQ2hpbGQnKSIpLCBz
RmFsc2UpOwotICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0LmNoaWxkLmdyYW5k
Q2hpbGQgPT0gJ3VuZGVmaW5lZCciKSwgc1RydWUpOwotCi0gICAgLy8gZGVsZXRlIGNoaWxkCi0g
ICAgZGVsZXRlIGNoaWxkOwotLy8gIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QuaGFzT3duUHJv
cGVydHkoJ2NoaWxkJykiKSwgc0ZhbHNlKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBt
eU9iamVjdC5jaGlsZCA9PSAndW5kZWZpbmVkJyIpLCBzVHJ1ZSk7Ci19Ci0KLVFfREVDTEFSRV9N
RVRBVFlQRShRVmVjdG9yPGludD4pCi1RX0RFQ0xBUkVfTUVUQVRZUEUoUVZlY3Rvcjxkb3VibGU+
KQotUV9ERUNMQVJFX01FVEFUWVBFKFFWZWN0b3I8UVN0cmluZz4pCi0KLXZvaWQgdHN0X1FXZWJG
cmFtZTo6Y2FsbFF0SW52b2thYmxlKCkKLXsKLSAgICBxUmVnaXN0ZXJNZXRhVHlwZTxRT2JqZWN0
TGlzdD4oKTsKLQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAg
ICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5teUludm9rYWJsZSgpIiksIHNVbmRl
ZmluZWQpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDAp
OwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCksIFFWYXJpYW50
TGlzdCgpKTsKLQotICAgIC8vIGV4dHJhIGFyZ3VtZW50cyBzaG91bGQgc2lsZW50bHkgYmUgaWdu
b3JlZAotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBRQ09N
UEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5teUludm9rYWJsZSgxMCwgMjAsIDMwKSIpLCBz
VW5kZWZpbmVkKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgp
LCAwKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLCBRVmFy
aWFudExpc3QoKSk7Ci0KLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7
Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3QubXlJbnZva2FibGVXaXRoSW50
QXJnKDEyMykiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5j
dGlvbkludm9rZWQoKSwgMSk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFj
dHVhbHMoKS5zaXplKCksIDEpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25B
Y3R1YWxzKCkuYXQoMCkudG9JbnQoKSwgMTIzKTsKLQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRG
dW5jdGlvbkludm9rZWQoKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5t
eUludm9rYWJsZVdpdGhJbnRBcmcoJzEyMycpIiksIHNVbmRlZmluZWQpOwotICAgIFFDT01QQVJF
KG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDEpOwotICAgIFFDT01QQVJFKG1fbXlP
YmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKLSAgICBRQ09NUEFSRShtX215
T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvSW50KCksIDEyMyk7Ci0KLSAgICBt
X215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgUUNPTVBBUkUoZXZhbEpT
KCJ0eXBlb2YgbXlPYmplY3QubXlJbnZva2FibGVXaXRoTG9uZ2xvbmdBcmcoMTIzKSIpLCBzVW5k
ZWZpbmVkKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAy
KTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwg
MSk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKS50
b0xvbmdMb25nKCksIHFsb25nbG9uZygxMjMpKTsKLQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRG
dW5jdGlvbkludm9rZWQoKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5t
eUludm9rYWJsZVdpdGhGbG9hdEFyZygxMjMuNSkiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBB
UkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMyk7Ci0gICAgUUNPTVBBUkUobV9t
eU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOwotICAgIFFDT01QQVJFKG1f
bXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9Eb3VibGUoKSwgMTIzLjUpOwot
Ci0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIFFDT01QQVJF
KGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lm15SW52b2thYmxlV2l0aERvdWJsZUFyZygxMjMuNSki
KSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9r
ZWQoKSwgNCk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5z
aXplKCksIDEpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCku
YXQoMCkudG9Eb3VibGUoKSwgMTIzLjUpOwotCi0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0
aW9uSW52b2tlZCgpOwotICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lm15SW52
b2thYmxlV2l0aERvdWJsZUFyZyhuZXcgTnVtYmVyKDEyMzQuNSkpIiksIHNVbmRlZmluZWQpOwot
ICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDQpOwotICAgIFFD
T01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKLSAgICBR
Q09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvRG91YmxlKCks
IDEyMzQuNSk7Ci0KLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0g
ICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3QubXlJbnZva2FibGVXaXRoQm9vbEFy
ZyhuZXcgQm9vbGVhbih0cnVlKSkiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBBUkUobV9teU9i
amVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgNTIpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3Qt
PnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0
LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvQm9vbCgpLCB0cnVlKTsKLQotICAgIG1fbXlP
YmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInR5
cGVvZiBteU9iamVjdC5teUludm9rYWJsZVdpdGhTdHJpbmdBcmcoJ2NpYW8nKSIpLCBzVW5kZWZp
bmVkKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCA1KTsK
LSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMSk7
Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKS50b1N0
cmluZygpLCBRTGF0aW4xU3RyaW5nKCJjaWFvIikpOwotCi0gICAgbV9teU9iamVjdC0+cmVzZXRR
dEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIFFDT01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0
Lm15SW52b2thYmxlV2l0aFN0cmluZ0FyZygxMjMpIiksIHNVbmRlZmluZWQpOwotICAgIFFDT01Q
QVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDUpOwotICAgIFFDT01QQVJFKG1f
bXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKLSAgICBRQ09NUEFSRSht
X215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvU3RyaW5nKCksIFFMYXRpbjFT
dHJpbmcoIjEyMyIpKTsKLQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQo
KTsKLSAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5teUludm9rYWJsZVdpdGhT
dHJpbmdBcmcobnVsbCkiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+
cXRGdW5jdGlvbkludm9rZWQoKSwgNSk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5j
dGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVu
Y3Rpb25BY3R1YWxzKCkuYXQoMCkudG9TdHJpbmcoKSwgUVN0cmluZygpKTsKLSAgICBRVkVSSUZZ
KG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9TdHJpbmcoKS5pc0VtcHR5
KCkpOwotCi0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIFFD
T01QQVJFKGV2YWxKUygidHlwZW9mIG15T2JqZWN0Lm15SW52b2thYmxlV2l0aFN0cmluZ0FyZyh1
bmRlZmluZWQpIiksIHNVbmRlZmluZWQpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVu
Y3Rpb25JbnZva2VkKCksIDUpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25B
Y3R1YWxzKCkuc2l6ZSgpLCAxKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9u
QWN0dWFscygpLmF0KDApLnRvU3RyaW5nKCksIFFTdHJpbmcoKSk7Ci0gICAgUVZFUklGWShtX215
T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvU3RyaW5nKCkuaXNFbXB0eSgpKTsK
LQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBRQ09NUEFS
RShldmFsSlMoInR5cGVvZiBteU9iamVjdC5teUludm9rYWJsZVdpdGhJbnRBcmdzKDEyMywgNDU2
KSIpLCBzVW5kZWZpbmVkKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52
b2tlZCgpLCA2KTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygp
LnNpemUoKSwgMik7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMo
KS5hdCgwKS50b0ludCgpLCAxMjMpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rp
b25BY3R1YWxzKCkuYXQoMSkudG9JbnQoKSwgNDU2KTsKLQotICAgIG1fbXlPYmplY3QtPnJlc2V0
UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15SW52
b2thYmxlUmV0dXJuaW5nSW50KCkiKSwgUUxhdGluMVN0cmluZygiMTIzIikpOwotICAgIFFDT01Q
QVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDcpOwotICAgIFFDT01QQVJFKG1f
bXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCksIFFWYXJpYW50TGlzdCgpKTsKLQotICAgIG1f
bXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBRQ09NUEFSRShldmFsSlMo
Im15T2JqZWN0Lm15SW52b2thYmxlUmV0dXJuaW5nTG9uZ0xvbmcoKSIpLCBRTGF0aW4xU3RyaW5n
KCI0NTYiKSk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwg
MzkpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCksIFFWYXJp
YW50TGlzdCgpKTsKLQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsK
LSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlUmV0dXJuaW5nU3RyaW5n
KCkiKSwgUUxhdGluMVN0cmluZygiY2lhbyIpKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5x
dEZ1bmN0aW9uSW52b2tlZCgpLCA4KTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0
aW9uQWN0dWFscygpLCBRVmFyaWFudExpc3QoKSk7Ci0KLSAgICBtX215T2JqZWN0LT5yZXNldFF0
RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3Qu
bXlJbnZva2FibGVXaXRoSW50QXJnKDEyMywgNDU2KSIpLCBzVW5kZWZpbmVkKTsKLSAgICBRQ09N
UEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCA5KTsKLSAgICBRQ09NUEFSRSht
X215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMik7Ci0gICAgUUNPTVBBUkUo
bV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKS50b0ludCgpLCAxMjMpOwotICAg
IFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMSkudG9JbnQoKSwg
NDU2KTsKLQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBR
Q09NUEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5teUludm9rYWJsZVdpdGhWb2lkU3RhckFy
ZyhudWxsKSIpLCBzVW5kZWZpbmVkKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0
aW9uSW52b2tlZCgpLCA0NCk7Ci0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tl
ZCgpOwotICAgIHsKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAgICAgICBRU3RyaW5nIHJldCA9
IGV2YWxKUygibXlPYmplY3QubXlJbnZva2FibGVXaXRoVm9pZFN0YXJBcmcoMTIzKSIsIHR5cGUp
OwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQs
IFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogaW5jb21wYXRpYmxlIHR5cGUgb2YgYXJndW1lbnQo
cykgaW4gY2FsbCB0byBteUludm9rYWJsZVdpdGhWb2lkU3RhckFyZygpOyBjYW5kaWRhdGVzIHdl
cmVcbiAgICBteUludm9rYWJsZVdpdGhWb2lkU3RhckFyZyh2b2lkKikiKSk7Ci0gICAgICAgIFFD
T01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIC0xKTsKLSAgICB9Ci0KLSAg
ICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgewotICAgICAgICBR
U3RyaW5nIHR5cGU7Ci0gICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUlu
dm9rYWJsZVdpdGhBbWJpZ3VvdXNBcmcoMTIzKSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0
eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVF
cnJvcjogYW1iaWd1b3VzIGNhbGwgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbiBteUludm9rYWJsZVdp
dGhBbWJpZ3VvdXNBcmcoKTsgY2FuZGlkYXRlcyB3ZXJlXG4gICAgbXlJbnZva2FibGVXaXRoQW1i
aWd1b3VzQXJnKGludClcbiAgICBteUludm9rYWJsZVdpdGhBbWJpZ3VvdXNBcmcodWludCkiKSk7
Ci0gICAgfQotCi0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAg
IHsKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygi
bXlPYmplY3QubXlJbnZva2FibGVXaXRoRGVmYXVsdEFyZ3MoMTIzLCAnaGVsbG8nKSIsIHR5cGUp
OwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzVW5kZWZpbmVkKTsKLSAgICAgICAgUUNPTVBBUkUo
bV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgNDcpOwotICAgICAgICBRQ09NUEFSRSht
X215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMik7Ci0gICAgICAgIFFDT01Q
QVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9JbnQoKSwgMTIzKTsK
LSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgxKS50
b1N0cmluZygpLCBRTGF0aW4xU3RyaW5nKCJoZWxsbyIpKTsKLSAgICB9Ci0KLSAgICBtX215T2Jq
ZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgewotICAgICAgICBRU3RyaW5nIHR5
cGU7Ci0gICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZVdp
dGhEZWZhdWx0QXJncyg0NTYpIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNVbmRl
ZmluZWQpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgp
LCA0Nyk7Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCku
c2l6ZSgpLCAyKTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVh
bHMoKS5hdCgwKS50b0ludCgpLCA0NTYpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5x
dEZ1bmN0aW9uQWN0dWFscygpLmF0KDEpLnRvU3RyaW5nKCksIFFTdHJpbmcoKSk7Ci0gICAgfQot
Ci0gICAgLy8gY2FsbGluZyBmdW5jdGlvbiB0aGF0IHJldHVybnMgKGNvbnN0KXJlZgotICAgIG1f
bXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICB7Ci0gICAgICAgIFFTdHJp
bmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoInR5cGVvZiBteU9iamVjdC5t
eUludm9rYWJsZVJldHVybmluZ1JlZigpIik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgc1VuZGVm
aW5lZCk7Ci0gICAgICAgIC8vUVZFUklGWSghbV9lbmdpbmUtPmhhc1VuY2F1Z2h0RXhjZXB0aW9u
KCkpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCA0
OCk7Ci0gICAgfQotCi0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwot
ICAgIHsKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxK
UygidHlwZW9mIG15T2JqZWN0Lm15SW52b2thYmxlUmV0dXJuaW5nQ29uc3RSZWYoKSIpOwotICAg
ICAgICBRQ09NUEFSRShyZXQsIHNVbmRlZmluZWQpOwotICAgICAgICAvL1FWRVJJRlkoIW1fZW5n
aW5lLT5oYXNVbmNhdWdodEV4Y2VwdGlvbigpKTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVj
dC0+cXRGdW5jdGlvbkludm9rZWQoKSwgNDkpOwotICAgIH0KLQotICAgIG1fbXlPYmplY3QtPnJl
c2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAg
ICAgICAgUVZhcmlhbnQgcmV0ID0gZXZhbEpTVigibXlPYmplY3QubXlJbnZva2FibGVSZXR1cm5p
bmdRT2JqZWN0U3RhcigpIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0
RnVuY3Rpb25JbnZva2VkKCksIDEzKTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRG
dW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDApOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzT2Jq
ZWN0KTsKLSAgICAgICAgUUNPTVBBUkUocmV0LnVzZXJUeXBlKCksIGludChRTWV0YVR5cGU6OlFP
YmplY3RTdGFyKSk7Ci0gICAgfQotCi0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52
b2tlZCgpOwotICAgIHsKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAgICAgICBRVmFyaWFudCBy
ZXQgPSBldmFsSlNWKCJteU9iamVjdC5teUludm9rYWJsZVdpdGhRT2JqZWN0TGlzdEFyZyhbbXlP
YmplY3RdKSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9u
SW52b2tlZCgpLCAxNCk7Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25B
Y3R1YWxzKCkuc2l6ZSgpLCAxKTsKLSAgICAgICAgUUNPTVBBUkUodHlwZSwgc0FycmF5KTsKLSAg
ICAgICAgUUNPTVBBUkUocmV0LnVzZXJUeXBlKCksIGludChRVmFyaWFudDo6TGlzdCkpOyAvLyBB
bGwgbGlzdHMgZ2V0IGRvd25ncmFkZWQgdG8gUVZhcmlhbnRMaXN0Ci0gICAgICAgIFFWYXJpYW50
TGlzdCB2bCA9IHF2YXJpYW50X2Nhc3Q8UVZhcmlhbnRMaXN0PihyZXQpOwotICAgICAgICBRQ09N
UEFSRSh2bC5jb3VudCgpLCAxKTsKLSAgICB9Ci0KLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVu
Y3Rpb25JbnZva2VkKCk7Ci0gICAgewotICAgICAgICBRU3RyaW5nIHR5cGU7Ci0gICAgICAgIG1f
bXlPYmplY3QtPnNldFZhcmlhbnRQcm9wZXJ0eShRVmFyaWFudCgxMjMpKTsKLSAgICAgICAgUVZh
cmlhbnQgcmV0ID0gZXZhbEpTVigibXlPYmplY3QubXlJbnZva2FibGVXaXRoVmFyaWFudEFyZyht
eU9iamVjdC52YXJpYW50UHJvcGVydHkpIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUs
IHNOdW1iZXIpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tl
ZCgpLCAxNSk7Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxz
KCkuc2l6ZSgpLCAxKTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFj
dHVhbHMoKS5hdCgwKSwgbV9teU9iamVjdC0+dmFyaWFudFByb3BlcnR5KCkpOwotICAgICAgICBR
Q09NUEFSRShyZXQudXNlclR5cGUoKSwgaW50KFFNZXRhVHlwZTo6RG91YmxlKSk7IC8vIGFsbCBK
UyBudW1iZXJzIGFyZSBkb3VibGVzLCBldmVuIHRob3VnaCB0aGlzIHN0YXJ0ZWQgYXMgYW4gaW50
Ci0gICAgICAgIFFDT01QQVJFKHJldC50b0ludCgpLDEyMyk7Ci0gICAgfQotCi0gICAgbV9teU9i
amVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIHsKLSAgICAgICAgUVN0cmluZyB0
eXBlOwotICAgICAgICBRVmFyaWFudCByZXQgPSBldmFsSlNWKCJteU9iamVjdC5teUludm9rYWJs
ZVdpdGhWYXJpYW50QXJnKG51bGwpIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNP
YmplY3QpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgp
LCAxNSk7Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCku
c2l6ZSgpLCAxKTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVh
bHMoKS5hdCgwKSwgUVZhcmlhbnQoKSk7Ci0gICAgICAgIFFWRVJJRlkoIW1fbXlPYmplY3QtPnF0
RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkuaXNWYWxpZCgpKTsKLSAgICB9Ci0KLSAgICBtX215T2Jq
ZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgewotICAgICAgICBRU3RyaW5nIHR5
cGU7Ci0gICAgICAgIFFWYXJpYW50IHJldCA9IGV2YWxKU1YoIm15T2JqZWN0Lm15SW52b2thYmxl
V2l0aFZhcmlhbnRBcmcodW5kZWZpbmVkKSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBl
LCBzT2JqZWN0KTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9r
ZWQoKSwgMTUpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFs
cygpLnNpemUoKSwgMSk7Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25B
Y3R1YWxzKCkuYXQoMCksIFFWYXJpYW50KCkpOwotICAgICAgICBRVkVSSUZZKCFtX215T2JqZWN0
LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLmlzVmFsaWQoKSk7Ci0gICAgfQotCi0gICAgLyog
WEZBSUwgLSB2YXJpYW50IHN1cHBvcnQKLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25J
bnZva2VkKCk7Ci0gICAgewotICAgICAgICBtX215T2JqZWN0LT5zZXRWYXJpYW50UHJvcGVydHko
UVZhcmlhbnQ6OmZyb21WYWx1ZShRQnJ1c2goKSkpOwotICAgICAgICBRVmFyaWFudCByZXQgPSBl
dmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlV2l0aFZhcmlhbnRBcmcobXlPYmplY3QudmFyaWFu
dFByb3BlcnR5KSIpOwotICAgICAgICBRVkVSSUZZKHJldC5pc1ZhcmlhbnQoKSk7Ci0gICAgICAg
IFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDE1KTsKLSAgICAgICAg
UUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOwotICAg
ICAgICBRQ09NUEFSRShyZXQudG9WYXJpYW50KCksIG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1
YWxzKCkuYXQoMCkpOwotICAgICAgICBRQ09NUEFSRShyZXQudG9WYXJpYW50KCksIG1fbXlPYmpl
Y3QtPnZhcmlhbnRQcm9wZXJ0eSgpKTsKLSAgICB9Ci0gICAgKi8KLQotICAgIG1fbXlPYmplY3Qt
PnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsK
LSAgICAgICAgUVZhcmlhbnQgcmV0ID0gZXZhbEpTVigibXlPYmplY3QubXlJbnZva2FibGVXaXRo
VmFyaWFudEFyZygxMjMpIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNOdW1iZXIp
OwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAxNSk7
Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgp
LCAxKTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5h
dCgwKSwgUVZhcmlhbnQoMTIzKSk7Ci0gICAgICAgIFFDT01QQVJFKHJldC51c2VyVHlwZSgpLCBp
bnQoUU1ldGFUeXBlOjpEb3VibGUpKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LnRvSW50KCksMTIz
KTsKLSAgICB9Ci0KLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0g
ICAgewotICAgICAgICBRU3RyaW5nIHR5cGU7Ci0gICAgICAgIFFWYXJpYW50IHJldCA9IGV2YWxK
U1YoIm15T2JqZWN0Lm15SW52b2thYmxlV2l0aFZhcmlhbnRNYXBBcmcoeyBhOjEyMywgYjonY2lh
bycgfSkiLCB0eXBlKTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbklu
dm9rZWQoKSwgMTYpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0
dWFscygpLnNpemUoKSwgMSk7Ci0KLSAgICAgICAgUVZhcmlhbnQgdiA9IG1fbXlPYmplY3QtPnF0
RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCk7Ci0gICAgICAgIFFDT01QQVJFKHYudXNlclR5cGUoKSwg
aW50KFFNZXRhVHlwZTo6UVZhcmlhbnRNYXApKTsKLQotICAgICAgICBRVmFyaWFudE1hcCB2bWFw
ID0gcXZhcmlhbnRfY2FzdDxRVmFyaWFudE1hcD4odik7Ci0gICAgICAgIFFDT01QQVJFKHZtYXAu
a2V5cygpLnNpemUoKSwgMik7Ci0gICAgICAgIFFDT01QQVJFKHZtYXAua2V5cygpLmF0KDApLCBR
TGF0aW4xU3RyaW5nKCJhIikpOwotICAgICAgICBRQ09NUEFSRSh2bWFwLnZhbHVlKCJhIiksIFFW
YXJpYW50KDEyMykpOwotICAgICAgICBRQ09NUEFSRSh2bWFwLmtleXMoKS5hdCgxKSwgUUxhdGlu
MVN0cmluZygiYiIpKTsKLSAgICAgICAgUUNPTVBBUkUodm1hcC52YWx1ZSgiYiIpLCBRVmFyaWFu
dCgiY2lhbyIpKTsKLQotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzT2JqZWN0KTsKLQotICAgICAg
ICBRQ09NUEFSRShyZXQudXNlclR5cGUoKSwgaW50KFFNZXRhVHlwZTo6UVZhcmlhbnRNYXApKTsK
LSAgICAgICAgdm1hcCA9IHF2YXJpYW50X2Nhc3Q8UVZhcmlhbnRNYXA+KHJldCk7Ci0gICAgICAg
IFFDT01QQVJFKHZtYXAua2V5cygpLnNpemUoKSwgMik7Ci0gICAgICAgIFFDT01QQVJFKHZtYXAu
a2V5cygpLmF0KDApLCBRTGF0aW4xU3RyaW5nKCJhIikpOwotICAgICAgICBRQ09NUEFSRSh2bWFw
LnZhbHVlKCJhIiksIFFWYXJpYW50KDEyMykpOwotICAgICAgICBRQ09NUEFSRSh2bWFwLmtleXMo
KS5hdCgxKSwgUUxhdGluMVN0cmluZygiYiIpKTsKLSAgICAgICAgUUNPTVBBUkUodm1hcC52YWx1
ZSgiYiIpLCBRVmFyaWFudCgiY2lhbyIpKTsKLSAgICB9Ci0KLSAgICBtX215T2JqZWN0LT5yZXNl
dFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgewotICAgICAgICBRU3RyaW5nIHR5cGU7Ci0gICAg
ICAgIFFWYXJpYW50IHJldCA9IGV2YWxKU1YoIm15T2JqZWN0Lm15SW52b2thYmxlV2l0aExpc3RP
ZkludEFyZyhbMSwgNV0pIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0
RnVuY3Rpb25JbnZva2VkKCksIDE3KTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRG
dW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOwotICAgICAgICBRVmFyaWFudCB2ID0gbV9teU9i
amVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKTsKLSAgICAgICAgUUNPTVBBUkUodi51c2Vy
VHlwZSgpLCBxTWV0YVR5cGVJZDxRTGlzdDxpbnQ+ID4oKSk7Ci0gICAgICAgIFFMaXN0PGludD4g
aWxzdCA9IHF2YXJpYW50X2Nhc3Q8UUxpc3Q8aW50PiA+KHYpOwotICAgICAgICBRQ09NUEFSRShp
bHN0LnNpemUoKSwgMik7Ci0gICAgICAgIFFDT01QQVJFKGlsc3QuYXQoMCksIDEpOwotICAgICAg
ICBRQ09NUEFSRShpbHN0LmF0KDEpLCA1KTsKLQotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzQXJy
YXkpOwotICAgICAgICBRQ09NUEFSRShyZXQudXNlclR5cGUoKSwgaW50KFFNZXRhVHlwZTo6UVZh
cmlhbnRMaXN0KSk7IC8vIGludHMgZ2V0IGNvbnZlcnRlZCB0byBkb3VibGVzLCBzbyB0aGlzIGlz
IGEgcXZhcmlhbnRsaXN0Ci0gICAgICAgIFFWYXJpYW50TGlzdCB2bHN0ID0gcXZhcmlhbnRfY2Fz
dDxRVmFyaWFudExpc3Q+KHJldCk7Ci0gICAgICAgIFFDT01QQVJFKHZsc3Quc2l6ZSgpLCAyKTsK
LSAgICAgICAgUUNPTVBBUkUodmxzdC5hdCgwKS50b0ludCgpLCAxKTsKLSAgICAgICAgUUNPTVBB
UkUodmxzdC5hdCgxKS50b0ludCgpLCA1KTsKLSAgICB9Ci0KLSAgICBtX215T2JqZWN0LT5yZXNl
dFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgewotICAgICAgICBRU3RyaW5nIHR5cGU7Ci0gICAg
ICAgIFFWYXJpYW50IHJldCA9IGV2YWxKU1YoIm15T2JqZWN0Lm15SW52b2thYmxlV2l0aFFPYmpl
Y3RTdGFyQXJnKG15T2JqZWN0KSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0
LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAxOCk7Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3Qt
PnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKLSAgICAgICAgUVZhcmlhbnQgdiA9IG1f
bXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCk7Ci0gICAgICAgIFFDT01QQVJFKHYu
dXNlclR5cGUoKSwgaW50KFFNZXRhVHlwZTo6UU9iamVjdFN0YXIpKTsKLSAgICAgICAgUUNPTVBB
UkUocXZhcmlhbnRfY2FzdDxRT2JqZWN0Kj4odiksIChRT2JqZWN0KiltX215T2JqZWN0KTsKLQot
ICAgICAgICBRQ09NUEFSRShyZXQudXNlclR5cGUoKSwgaW50KFFNZXRhVHlwZTo6UU9iamVjdFN0
YXIpKTsKLSAgICAgICAgUUNPTVBBUkUocXZhcmlhbnRfY2FzdDxRT2JqZWN0Kj4ocmV0KSwgKFFP
YmplY3QqKW1fbXlPYmplY3QpOwotCi0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNPYmplY3QpOwot
ICAgIH0KLQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICB7
Ci0gICAgICAgIC8vIG5vIGltcGxpY2l0IGNvbnZlcnNpb24gZnJvbSBpbnRlZ2VyIHRvIFFPYmpl
Y3QqCi0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgZXZhbEpTKCJteU9iamVjdC5teUlu
dm9rYWJsZVdpdGhRT2JqZWN0U3RhckFyZygxMjMpIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJF
KHR5cGUsIHNFcnJvcik7Ci0gICAgfQotCi0gICAgLyoKLSAgICBtX215T2JqZWN0LT5yZXNldFF0
RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgewotICAgICAgICBRU3RyaW5nIGZ1biA9IGV2YWxKUygi
bXlPYmplY3QubXlJbnZva2FibGVXaXRoUUJydXNoQXJnIik7Ci0gICAgICAgIFFfQVNTRVJUKGZ1
bi5pc0Z1bmN0aW9uKCkpOwotICAgICAgICBRQ29sb3IgY29sb3IoMTAsIDIwLCAzMCwgNDApOwot
ICAgICAgICAvLyBRQ29sb3Igc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBhIFFCcnVzaAotICAgICAg
ICBRVmFyaWFudCByZXQgPSBmdW4uY2FsbChRU3RyaW5nKCksIFFTdHJpbmdMaXN0KCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHFTY3JpcHRWYWx1ZUZyb21WYWx1ZSht
X2VuZ2luZSwgY29sb3IpKTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlv
bkludm9rZWQoKSwgMTkpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9u
QWN0dWFscygpLnNpemUoKSwgMSk7Ci0gICAgICAgIFFWYXJpYW50IHYgPSBtX215T2JqZWN0LT5x
dEZ1bmN0aW9uQWN0dWFscygpLmF0KDApOwotICAgICAgICBRQ09NUEFSRSh2LnVzZXJUeXBlKCks
IGludChRTWV0YVR5cGU6OlFCcnVzaCkpOwotICAgICAgICBRQ09NUEFSRShxdmFyaWFudF9jYXN0
PFFDb2xvcj4odiksIGNvbG9yKTsKLQotICAgICAgICBRQ09NUEFSRShxc2NyaXB0dmFsdWVfY2Fz
dDxRQ29sb3I+KHJldCksIGNvbG9yKTsKLSAgICB9Ci0gICAgKi8KLQotICAgIC8vIHByaXZhdGUg
c2xvdHMgc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIHRoZSBRT2JqZWN0IGJpbmRpbmcKLSAgICBRQ09N
UEFSRShldmFsSlMoInR5cGVvZiBteU9iamVjdC5teVByaXZhdGVTbG90IiksIHNVbmRlZmluZWQp
OwotCi0gICAgLy8gcHJvdGVjdGVkIHNsb3RzIHNob3VsZCBiZSBmaW5lCi0gICAgbV9teU9iamVj
dC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIGV2YWxKUygibXlPYmplY3QubXlQcm90
ZWN0ZWRTbG90KCkiKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tl
ZCgpLCAzNik7Ci0KLSAgICAvLyBjYWxsIHdpdGggdG9vIGZldyBhcmd1bWVudHMKLSAgICB7Ci0g
ICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15T2Jq
ZWN0Lm15SW52b2thYmxlV2l0aEludEFyZygpIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5
cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiU3ludGF4
RXJyb3I6IHRvbyBmZXcgYXJndW1lbnRzIGluIGNhbGwgdG8gbXlJbnZva2FibGVXaXRoSW50QXJn
KCk7IGNhbmRpZGF0ZXMgYXJlXG4gICAgbXlJbnZva2FibGVXaXRoSW50QXJnKGludCxpbnQpXG4g
ICAgbXlJbnZva2FibGVXaXRoSW50QXJnKGludCkiKSk7Ci0gICAgfQotCi0gICAgLy8gY2FsbCBm
dW5jdGlvbiB3aGVyZSBub3QgYWxsIHR5cGVzIGhhdmUgYmVlbiByZWdpc3RlcmVkCi0gICAgbV9t
eU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIHsKLSAgICAgICAgUVN0cmlu
ZyB0eXBlOwotICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlJbnZva2Fi
bGVXaXRoQnJ1c2hTdHlsZUFyZygwKSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBz
RXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjog
Y2Fubm90IGNhbGwgbXlJbnZva2FibGVXaXRoQnJ1c2hTdHlsZUFyZygpOiB1bmtub3duIHR5cGUg
YFF0OjpCcnVzaFN0eWxlJyIpKTsKLSAgICAgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5j
dGlvbkludm9rZWQoKSwgLTEpOwotICAgIH0KLQotICAgIC8vIGNhbGwgZnVuY3Rpb24gd2l0aCBp
bmNvbXBhdGlibGUgYXJndW1lbnQgdHlwZQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlv
bkludm9rZWQoKTsKLSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmlu
ZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlV2l0aFFCcnVzaEFyZyhudWxsKSIs
IHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFS
RShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogaW5jb21wYXRpYmxlIHR5cGUgb2YgYXJn
dW1lbnQocykgaW4gY2FsbCB0byBteUludm9rYWJsZVdpdGhRQnJ1c2hBcmcoKTsgY2FuZGlkYXRl
cyB3ZXJlXG4gICAgbXlJbnZva2FibGVXaXRoUUJydXNoQXJnKFFCcnVzaCkiKSk7Ci0gICAgICAg
IFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIC0xKTsKLSAgICB9Ci19
Ci0KLXZvaWQgdHN0X1FXZWJGcmFtZTo6Y29ubmVjdEFuZERpc2Nvbm5lY3QoKQotewotICAgIC8v
IGNvbm5lY3QoZnVuY3Rpb24pCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3Qu
bXlTaWduYWwiKSwgc0Z1bmN0aW9uKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInR5cGVvZiBteU9i
amVjdC5teVNpZ25hbC5jb25uZWN0IiksIHNGdW5jdGlvbik7Ci0gICAgUUNPTVBBUkUoZXZhbEpT
KCJ0eXBlb2YgbXlPYmplY3QubXlTaWduYWwuZGlzY29ubmVjdCIpLCBzRnVuY3Rpb24pOwotCi0g
ICAgewotICAgICAgICBRU3RyaW5nIHR5cGU7Ci0gICAgICAgIGV2YWxKUygibXlPYmplY3QubXlT
aWduYWwuY29ubmVjdCgxMjMpIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJv
cik7Ci0gICAgfQotCi0gICAgZXZhbEpTKCJteUhhbmRsZXIgPSBmdW5jdGlvbigpIHsgd2luZG93
LmdvdFNpZ25hbCA9IHRydWU7IHdpbmRvdy5zaWduYWxBcmdzID0gYXJndW1lbnRzOyB3aW5kb3cu
c2xvdFRoaXNPYmplY3QgPSB0aGlzOyB3aW5kb3cuc2lnbmFsU2VuZGVyID0gX19xdF9zZW5kZXJf
XzsgfSIpOwotCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbC5jb25uZWN0
KG15SGFuZGxlcikiKSwgc1VuZGVmaW5lZCk7Ci0KLSAgICBldmFsSlMoImdvdFNpZ25hbCA9IGZh
bHNlIik7Ci0gICAgZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbCgpIik7Ci0gICAgUUNPTVBBUkUo
ZXZhbEpTKCJnb3RTaWduYWwiKSwgc1RydWUpOwotICAgIFFDT01QQVJFKGV2YWxKUygic2lnbmFs
QXJncy5sZW5ndGggPT0gMCIpLCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxT
ZW5kZXIiKSxldmFsSlMoIm15T2JqZWN0IikpOwotICAgIFFDT01QQVJFKGV2YWxKUygic2xvdFRo
aXNPYmplY3QgPT0gd2luZG93IiksIHNUcnVlKTsKLQotICAgIGV2YWxKUygiZ290U2lnbmFsID0g
ZmFsc2UiKTsKLSAgICBtX215T2JqZWN0LT5lbWl0TXlTaWduYWwoKTsKLSAgICBRQ09NUEFSRShl
dmFsSlMoImdvdFNpZ25hbCIpLCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxB
cmdzLmxlbmd0aCA9PSAwIiksIHNUcnVlKTsKLQotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmpl
Y3QubXlTaWduYWxXaXRoSW50QXJnLmNvbm5lY3QobXlIYW5kbGVyKSIpLCBzVW5kZWZpbmVkKTsK
LQotICAgIGV2YWxKUygiZ290U2lnbmFsID0gZmFsc2UiKTsKLSAgICBtX215T2JqZWN0LT5lbWl0
TXlTaWduYWxXaXRoSW50QXJnKDEyMyk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJnb3RTaWduYWwi
KSwgc1RydWUpOwotICAgIFFDT01QQVJFKGV2YWxKUygic2lnbmFsQXJncy5sZW5ndGggPT0gMSIp
LCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxBcmdzWzBdID09IDEyMy4wIiks
IHNUcnVlKTsKLQotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuZGlzY29u
bmVjdChteUhhbmRsZXIpIiksIHNVbmRlZmluZWQpOwotICAgIHsKLSAgICAgICAgUVN0cmluZyB0
eXBlOwotICAgICAgICBldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmRpc2Nvbm5lY3QobXlIYW5k
bGVyKSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgIH0KLQot
ICAgIGV2YWxKUygiZ290U2lnbmFsID0gZmFsc2UiKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15
T2JqZWN0Lm15U2lnbmFsMi5jb25uZWN0KG15SGFuZGxlcikiKSwgc1VuZGVmaW5lZCk7Ci0gICAg
bV9teU9iamVjdC0+ZW1pdE15U2lnbmFsMih0cnVlKTsKLSAgICBRQ09NUEFSRShldmFsSlMoImdv
dFNpZ25hbCIpLCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxBcmdzLmxlbmd0
aCA9PSAxIiksIHNUcnVlKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbEFyZ3NbMF0iKSwg
c1RydWUpOwotCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbDIuZGlzY29u
bmVjdChteUhhbmRsZXIpIiksIHNVbmRlZmluZWQpOwotCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJ0
eXBlb2YgbXlPYmplY3RbJ215U2lnbmFsMigpJ10iKSwgc0Z1bmN0aW9uKTsKLSAgICBRQ09NUEFS
RShldmFsSlMoInR5cGVvZiBteU9iamVjdFsnbXlTaWduYWwyKCknXS5jb25uZWN0IiksIHNGdW5j
dGlvbik7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgbXlPYmplY3RbJ215U2lnbmFsMigp
J10uZGlzY29ubmVjdCIpLCBzRnVuY3Rpb24pOwotCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9i
amVjdFsnbXlTaWduYWwyKCknXS5jb25uZWN0KG15SGFuZGxlcikiKSwgc1VuZGVmaW5lZCk7Ci0K
LSAgICBldmFsSlMoImdvdFNpZ25hbCA9IGZhbHNlIik7Ci0gICAgbV9teU9iamVjdC0+ZW1pdE15
U2lnbmFsMigpOwotICAgIFFDT01QQVJFKGV2YWxKUygiZ290U2lnbmFsIiksIHNUcnVlKTsKLQot
ICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3RbJ215U2lnbmFsMigpJ10uZGlzY29ubmVjdCht
eUhhbmRsZXIpIiksIHNVbmRlZmluZWQpOwotCi0gICAgLy8gY29ubmVjdChvYmplY3QsIGZ1bmN0
aW9uKQotICAgIGV2YWxKUygib3RoZXJPYmplY3QgPSB7IG5hbWU6J2ZvbycgfSIpOwotICAgIFFD
T01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuY29ubmVjdChvdGhlck9iamVjdCwgbXlI
YW5kbGVyKSIpLCBzVW5kZWZpbmVkKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15
U2lnbmFsLmRpc2Nvbm5lY3Qob3RoZXJPYmplY3QsIG15SGFuZGxlcikiKSwgc1VuZGVmaW5lZCk7
Ci0gICAgZXZhbEpTKCJnb3RTaWduYWwgPSBmYWxzZSIpOwotICAgIG1fbXlPYmplY3QtPmVtaXRN
eVNpZ25hbCgpOwotICAgIFFDT01QQVJFKGV2YWxKUygiZ290U2lnbmFsIiksIHNGYWxzZSk7Ci0K
LSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgZXZhbEpTKCJteU9iamVjdC5t
eVNpZ25hbC5kaXNjb25uZWN0KG90aGVyT2JqZWN0LCBteUhhbmRsZXIpIiwgdHlwZSk7Ci0gICAg
ICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgfQotCi0gICAgUUNPTVBBUkUoZXZhbEpT
KCJteU9iamVjdC5teVNpZ25hbC5jb25uZWN0KG90aGVyT2JqZWN0LCBteUhhbmRsZXIpIiksIHNV
bmRlZmluZWQpOwotICAgIGV2YWxKUygiZ290U2lnbmFsID0gZmFsc2UiKTsKLSAgICBtX215T2Jq
ZWN0LT5lbWl0TXlTaWduYWwoKTsKLSAgICBRQ09NUEFSRShldmFsSlMoImdvdFNpZ25hbCIpLCBz
VHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxBcmdzLmxlbmd0aCA9PSAwIiksIHNU
cnVlKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInNsb3RUaGlzT2JqZWN0IiksZXZhbEpTKCJvdGhl
ck9iamVjdCIpKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbFNlbmRlciIpLGV2YWxKUygi
bXlPYmplY3QiKSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJzbG90VGhpc09iamVjdC5uYW1lIiks
IFFMYXRpbjFTdHJpbmcoImZvbyIpKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15
U2lnbmFsLmRpc2Nvbm5lY3Qob3RoZXJPYmplY3QsIG15SGFuZGxlcikiKSwgc1VuZGVmaW5lZCk7
Ci0KLSAgICBldmFsSlMoInlldEFub3RoZXJPYmplY3QgPSB7IG5hbWU6J2JhcicsIGZ1bmMgOiBm
dW5jdGlvbigpIHsgfSB9Iik7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25h
bDIuY29ubmVjdCh5ZXRBbm90aGVyT2JqZWN0LCBteUhhbmRsZXIpIiksIHNVbmRlZmluZWQpOwot
ICAgIGV2YWxKUygiZ290U2lnbmFsID0gZmFsc2UiKTsKLSAgICBtX215T2JqZWN0LT5lbWl0TXlT
aWduYWwyKHRydWUpOwotICAgIFFDT01QQVJFKGV2YWxKUygiZ290U2lnbmFsIiksIHNUcnVlKTsK
LSAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbEFyZ3MubGVuZ3RoID09IDEiKSwgc1RydWUpOwot
ICAgIFFDT01QQVJFKGV2YWxKUygic2xvdFRoaXNPYmplY3QgPT0geWV0QW5vdGhlck9iamVjdCIp
LCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxTZW5kZXIgPT0gbXlPYmplY3Qi
KSwgc1RydWUpOwotICAgIFFDT01QQVJFKGV2YWxKUygic2xvdFRoaXNPYmplY3QubmFtZSIpLCBR
TGF0aW4xU3RyaW5nKCJiYXIiKSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNp
Z25hbDIuZGlzY29ubmVjdCh5ZXRBbm90aGVyT2JqZWN0LCBteUhhbmRsZXIpIiksIHNVbmRlZmlu
ZWQpOwotCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbDIuY29ubmVjdCht
eU9iamVjdCwgbXlIYW5kbGVyKSIpLCBzVW5kZWZpbmVkKTsKLSAgICBldmFsSlMoImdvdFNpZ25h
bCA9IGZhbHNlIik7Ci0gICAgbV9teU9iamVjdC0+ZW1pdE15U2lnbmFsMih0cnVlKTsKLSAgICBR
Q09NUEFSRShldmFsSlMoImdvdFNpZ25hbCIpLCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpT
KCJzaWduYWxBcmdzLmxlbmd0aCA9PSAxIiksIHNUcnVlKTsKLSAgICBRQ09NUEFSRShldmFsSlMo
InNsb3RUaGlzT2JqZWN0ID09IG15T2JqZWN0IiksIHNUcnVlKTsKLSAgICBRQ09NUEFSRShldmFs
SlMoInNpZ25hbFNlbmRlciA9PSBteU9iamVjdCIpLCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZh
bEpTKCJteU9iamVjdC5teVNpZ25hbDIuZGlzY29ubmVjdChteU9iamVjdCwgbXlIYW5kbGVyKSIp
LCBzVW5kZWZpbmVkKTsKLQotICAgIC8vIGNvbm5lY3Qob2JqLCBzdHJpbmcpCi0gICAgUUNPTVBB
UkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbC5jb25uZWN0KHlldEFub3RoZXJPYmplY3QsICdm
dW5jJykiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNp
Z25hbC5jb25uZWN0KG15T2JqZWN0LCAnbXlTbG90JykiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNP
TVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbC5kaXNjb25uZWN0KHlldEFub3RoZXJPYmpl
Y3QsICdmdW5jJykiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVj
dC5teVNpZ25hbC5kaXNjb25uZWN0KG15T2JqZWN0LCAnbXlTbG90JykiKSwgc1VuZGVmaW5lZCk7
Ci0KLSAgICAvLyBjaGVjayB0aGF0IGVtaXR0aW5nIHNpZ25hbHMgZnJvbSBzY3JpcHQgd29ya3MK
LQotICAgIC8vIG5vIGFyZ3VtZW50cwotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlT
aWduYWwuY29ubmVjdChteU9iamVjdC5teVNsb3QpIiksIHNVbmRlZmluZWQpOwotICAgIG1fbXlP
YmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15
T2JqZWN0Lm15U2lnbmFsKCkiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVj
dC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMjApOwotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmpl
Y3QubXlTaWduYWwuZGlzY29ubmVjdChteU9iamVjdC5teVNsb3QpIiksIHNVbmRlZmluZWQpOwot
Ci0gICAgLy8gb25lIGFyZ3VtZW50Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNp
Z25hbFdpdGhJbnRBcmcuY29ubmVjdChteU9iamVjdC5teVNsb3RXaXRoSW50QXJnKSIpLCBzVW5k
ZWZpbmVkKTsKLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAg
UUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhJbnRBcmcoMTIzKSIpLCBzVW5k
ZWZpbmVkKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAy
MSk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCks
IDEpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCku
dG9JbnQoKSwgMTIzKTsKLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0
aEludEFyZy5kaXNjb25uZWN0KG15T2JqZWN0Lm15U2xvdFdpdGhJbnRBcmcpIiksIHNVbmRlZmlu
ZWQpOwotCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhJbnRBcmcu
Y29ubmVjdChteU9iamVjdC5teVNsb3RXaXRoRG91YmxlQXJnKSIpLCBzVW5kZWZpbmVkKTsKLSAg
ICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgUUNPTVBBUkUoZXZh
bEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhJbnRBcmcoMTIzKSIpLCBzVW5kZWZpbmVkKTsKLSAg
ICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAyMik7Ci0gICAgUUNP
TVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOwotICAgIFFD
T01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9Eb3VibGUoKSwg
MTIzLjApOwotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWxXaXRoSW50QXJn
LmRpc2Nvbm5lY3QobXlPYmplY3QubXlTbG90V2l0aERvdWJsZUFyZykiKSwgc1VuZGVmaW5lZCk7
Ci0KLSAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0aEludEFyZy5jb25u
ZWN0KG15T2JqZWN0Lm15U2xvdFdpdGhTdHJpbmdBcmcpIiksIHNVbmRlZmluZWQpOwotICAgIG1f
bXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBRQ09NUEFSRShldmFsSlMo
Im15T2JqZWN0Lm15U2lnbmFsV2l0aEludEFyZygxMjMpIiksIHNVbmRlZmluZWQpOwotICAgIFFD
T01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDIzKTsKLSAgICBRQ09NUEFS
RShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMSk7Ci0gICAgUUNPTVBB
UkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKS50b1N0cmluZygpLCBRTGF0
aW4xU3RyaW5nKCIxMjMiKSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25h
bFdpdGhJbnRBcmcuZGlzY29ubmVjdChteU9iamVjdC5teVNsb3RXaXRoU3RyaW5nQXJnKSIpLCBz
VW5kZWZpbmVkKTsKLQotICAgIC8vIGNvbm5lY3RpbmcgdG8gb3ZlcmxvYWRlZCBzbG90Ci0gICAg
UUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhJbnRBcmcuY29ubmVjdChteU9i
amVjdC5teU92ZXJsb2FkZWRTbG90KSIpLCBzVW5kZWZpbmVkKTsKLSAgICBtX215T2JqZWN0LT5y
ZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5t
eVNpZ25hbFdpdGhJbnRBcmcoMTIzKSIpLCBzVW5kZWZpbmVkKTsKLSAgICBRQ09NUEFSRShtX215
T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAyNik7IC8vIGRvdWJsZSBvdmVybG9hZAotICAg
IFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKLSAg
ICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvSW50KCks
IDEyMyk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhJbnRBcmcu
ZGlzY29ubmVjdChteU9iamVjdC5teU92ZXJsb2FkZWRTbG90KSIpLCBzVW5kZWZpbmVkKTsKLQot
ICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWxXaXRoSW50QXJnLmNvbm5lY3Qo
bXlPYmplY3RbJ215T3ZlcmxvYWRlZFNsb3QoaW50KSddKSIpLCBzVW5kZWZpbmVkKTsKLSAgICBt
X215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgUUNPTVBBUkUoZXZhbEpT
KCJteU9iamVjdC5teVNpZ25hbFdpdGhJbnRBcmcoNDU2KSIpLCBzVW5kZWZpbmVkKTsKLSAgICBR
Q09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAyOCk7IC8vIGludCBvdmVy
bG9hZAotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgp
LCAxKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDAp
LnRvSW50KCksIDQ1Nik7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdp
dGhJbnRBcmcuZGlzY29ubmVjdChteU9iamVjdFsnbXlPdmVybG9hZGVkU2xvdChpbnQpJ10pIiks
IHNVbmRlZmluZWQpOwotCi0gICAgLy8gZXJyb25lb3VzIGlucHV0Ci0gICAgewotICAgICAgICAv
LyAjIyMgUXRTY3JpcHQgYWRkcyAuY29ubmVjdCB0byBhbGwgZnVuY3Rpb25zLCBXZWJLaXQgZG9l
cyBvbmx5IHRvIHNpZ25hbHMvc2xvdHMKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAgICAgICBR
U3RyaW5nIHJldCA9IGV2YWxKUygiKGZ1bmN0aW9uKCkgeyB9KS5jb25uZWN0KCkiLCB0eXBlKTsK
LSAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBR
TGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6ICd1bmRlZmluZWQnIGlzIG5vdCBhIGZ1bmN0aW9uIikp
OwotICAgIH0KLSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyBy
ZXQgPSBldmFsSlMoInZhciBvID0geyB9OyBvLmNvbm5lY3QgPSBGdW5jdGlvbi5wcm90b3R5cGUu
Y29ubmVjdDsgIG8uY29ubmVjdCgpIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNF
cnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiAn
dW5kZWZpbmVkJyBpcyBub3QgYSBmdW5jdGlvbiIpKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAg
IFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIihmdW5jdGlvbigp
IHsgfSkuY29ubmVjdCgxMjMpIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJv
cik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiAndW5k
ZWZpbmVkJyBpcyBub3QgYSBmdW5jdGlvbiIpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBRU3Ry
aW5nIHR5cGU7Ci0gICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJ2YXIgbyA9IHsgfTsgby5j
b25uZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlLmNvbm5lY3Q7ICBvLmNvbm5lY3QoMTIzKSIsIHR5
cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShy
ZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogJ3VuZGVmaW5lZCcgaXMgbm90IGEgZnVuY3Rp
b24iKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBRU3RyaW5nIHR5cGU7Ci0gICAgICAgIFFT
dHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZS5jb25uZWN0KDEyMykiLCB0
eXBlKTsKLSAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUo
cmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiBNeVFP
YmplY3Q6Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOwotICAgIH0KLSAgICB7Ci0g
ICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15T2Jq
ZWN0Lm15SW52b2thYmxlLmNvbm5lY3QoZnVuY3Rpb24oKSB7IH0pIiwgdHlwZSk7Ci0gICAgICAg
IFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0
cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2QuY29ubmVjdDogTXlRT2JqZWN0OjpteUludm9r
YWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIFFTdHJp
bmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFs
LmNvbm5lY3QoMTIzKSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwot
ICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0
aG9kLmNvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKLSAgICB9Ci0KLSAgICB7
Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15
T2JqZWN0Lm15U2lnbmFsLmRpc2Nvbm5lY3QoKSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0
eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9y
OiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogbm8gYXJndW1lbnRzIGdpdmVuIikpOwotICAgIH0K
LSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFs
SlMoInZhciBvID0geyB9OyBvLmRpc2Nvbm5lY3QgPSBteU9iamVjdC5teVNpZ25hbC5kaXNjb25u
ZWN0OyAgby5kaXNjb25uZWN0KCkiLCB0eXBlKTsKLSAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vy
cm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRh
TWV0aG9kLmRpc2Nvbm5lY3Q6IG5vIGFyZ3VtZW50cyBnaXZlbiIpKTsKLSAgICB9Ci0KLSAgICAv
KiBYRkFJTCAtIEZ1bmN0aW9uLnByb3RvdHlwZSBkb2Vzbid0IGdldCBjb25uZWN0L2Rpc2Nvbm5l
Y3QsIGp1c3Qgc2lnbmFscy9zbG90cwotICAgIHsKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAg
ICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygiKGZ1bmN0aW9uKCkgeyB9KS5kaXNjb25uZWN0KDEy
MykiLCB0eXBlKTsKLSAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNP
TVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNjb25u
ZWN0OiB0aGlzIG9iamVjdCBpcyBub3QgYSBzaWduYWwiKSk7Ci0gICAgfQotICAgICovCi0KLSAg
ICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMo
InZhciBvID0geyB9OyBvLmRpc2Nvbm5lY3QgPSBteU9iamVjdC5teUludm9rYWJsZS5kaXNjb25u
ZWN0OyBvLmRpc2Nvbm5lY3QoMTIzKSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBz
RXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjog
UXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IE15UU9iamVjdDo6bXlJbnZva2FibGUoKSBpcyBub3Qg
YSBzaWduYWwiKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBRU3RyaW5nIHR5cGU7Ci0gICAg
ICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZS5kaXNjb25uZWN0
KDEyMykiLCB0eXBlKTsKLSAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAg
UUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNj
b25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOwotICAg
IH0KLSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBl
dmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlLmRpc2Nvbm5lY3QoZnVuY3Rpb24oKSB7IH0pIiwg
dHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJF
KHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDog
TXlRT2JqZWN0OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKLSAgICB9Ci0KLSAg
ICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMo
Im15T2JqZWN0Lm15U2lnbmFsLmRpc2Nvbm5lY3QoMTIzKSIsIHR5cGUpOwotICAgICAgICBRQ09N
UEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmco
IlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5j
dGlvbiIpKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAg
UVN0cmluZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmRpc2Nvbm5lY3QoZnVuY3Rp
b24oKSB7IH0pIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAg
ICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNj
b25uZWN0OiBmYWlsZWQgdG8gZGlzY29ubmVjdCBmcm9tIE15UU9iamVjdDo6bXlTaWduYWwoKSIp
KTsKLSAgICB9Ci0KLSAgICAvLyB3aGVuIHRoZSB3cmFwcGVyIGRpZXMsIHRoZSBjb25uZWN0aW9u
IHN0YXlzIGFsaXZlCi0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbC5jb25u
ZWN0KG15T2JqZWN0Lm15U2xvdCkiKSwgc1VuZGVmaW5lZCk7Ci0gICAgbV9teU9iamVjdC0+cmVz
ZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIG1fbXlPYmplY3QtPmVtaXRNeVNpZ25hbCgpOwot
ICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDIwKTsKLSAgICBl
dmFsSlMoIm15T2JqZWN0ID0gbnVsbCIpOwotICAgIGV2YWxKUygiZ2MoKSIpOwotICAgIG1fbXlP
YmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBtX215T2JqZWN0LT5lbWl0TXlT
aWduYWwoKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAy
MCk7Ci19Ci0KLXZvaWQgdHN0X1FXZWJGcmFtZTo6Y2xhc3NFbnVtcygpCi17Ci0gICAgLy8gV2Ug
ZG9uJ3QgZG8gdGhlIG1ldGEgdGhpbmcgY3VycmVudGx5LCB1bmZvcnR1bmF0ZWx5ISEhCi0gICAg
LyoKLSAgICBRU3RyaW5nIG15Q2xhc3MgPSBtX2VuZ2luZS0+bmV3UU1ldGFPYmplY3QobV9teU9i
amVjdC0+bWV0YU9iamVjdCgpLCBtX2VuZ2luZS0+dW5kZWZpbmVkVmFsdWUoKSk7Ci0gICAgbV9l
bmdpbmUtPmdsb2JhbE9iamVjdCgpLnNldFByb3BlcnR5KCJNeVFPYmplY3QiLCBteUNsYXNzKTsK
LQotICAgIFFDT01QQVJFKHN0YXRpY19jYXN0PE15UU9iamVjdDo6UG9saWN5PihldmFsSlMoIk15
UU9iamVjdC5Gb29Qb2xpY3kiKS50b0ludCgpKSwKLSAgICAgICAgICAgICBNeVFPYmplY3Q6OkZv
b1BvbGljeSk7Ci0gICAgUUNPTVBBUkUoc3RhdGljX2Nhc3Q8TXlRT2JqZWN0OjpQb2xpY3k+KGV2
YWxKUygiTXlRT2JqZWN0LkJhclBvbGljeSIpLnRvSW50KCkpLAotICAgICAgICAgICAgIE15UU9i
amVjdDo6QmFyUG9saWN5KTsKLSAgICBRQ09NUEFSRShzdGF0aWNfY2FzdDxNeVFPYmplY3Q6OlBv
bGljeT4oZXZhbEpTKCJNeVFPYmplY3QuQmF6UG9saWN5IikudG9JbnQoKSksCi0gICAgICAgICAg
ICAgTXlRT2JqZWN0OjpCYXpQb2xpY3kpOwotCi0gICAgUUNPTVBBUkUoc3RhdGljX2Nhc3Q8TXlR
T2JqZWN0OjpTdHJhdGVneT4oZXZhbEpTKCJNeVFPYmplY3QuRm9vU3RyYXRlZ3kiKS50b0ludCgp
KSwKLSAgICAgICAgICAgICBNeVFPYmplY3Q6OkZvb1N0cmF0ZWd5KTsKLSAgICBRQ09NUEFSRShz
dGF0aWNfY2FzdDxNeVFPYmplY3Q6OlN0cmF0ZWd5PihldmFsSlMoIk15UU9iamVjdC5CYXJTdHJh
dGVneSIpLnRvSW50KCkpLAotICAgICAgICAgICAgIE15UU9iamVjdDo6QmFyU3RyYXRlZ3kpOwot
ICAgIFFDT01QQVJFKHN0YXRpY19jYXN0PE15UU9iamVjdDo6U3RyYXRlZ3k+KGV2YWxKUygiTXlR
T2JqZWN0LkJhelN0cmF0ZWd5IikudG9JbnQoKSksCi0gICAgICAgICAgICAgTXlRT2JqZWN0OjpC
YXpTdHJhdGVneSk7Ci0KLSAgICBRQ09NUEFSRShNeVFPYmplY3Q6OkFiaWxpdHkoZXZhbEpTKCJN
eVFPYmplY3QuTm9BYmlsaXR5IikudG9JbnQoKSksCi0gICAgICAgICAgICAgTXlRT2JqZWN0OjpO
b0FiaWxpdHkpOwotICAgIFFDT01QQVJFKE15UU9iamVjdDo6QWJpbGl0eShldmFsSlMoIk15UU9i
amVjdC5Gb29BYmlsaXR5IikudG9JbnQoKSksCi0gICAgICAgICAgICAgTXlRT2JqZWN0OjpGb29B
YmlsaXR5KTsKLSAgICBRQ09NUEFSRShNeVFPYmplY3Q6OkFiaWxpdHkoZXZhbEpTKCJNeVFPYmpl
Y3QuQmFyQWJpbGl0eSIpLnRvSW50KCkpLAotICAgICAgICAgICAgIE15UU9iamVjdDo6QmFyQWJp
bGl0eSk7Ci0gICAgUUNPTVBBUkUoTXlRT2JqZWN0OjpBYmlsaXR5KGV2YWxKUygiTXlRT2JqZWN0
LkJhekFiaWxpdHkiKS50b0ludCgpKSwKLSAgICAgICAgICAgICBNeVFPYmplY3Q6OkJhekFiaWxp
dHkpOwotICAgIFFDT01QQVJFKE15UU9iamVjdDo6QWJpbGl0eShldmFsSlMoIk15UU9iamVjdC5B
bGxBYmlsaXR5IikudG9JbnQoKSksCi0gICAgICAgICAgICAgTXlRT2JqZWN0OjpBbGxBYmlsaXR5
KTsKLQotICAgIC8vIGVudW1zIGZyb20gUXQgYXJlIGluaGVyaXRlZCB0aHJvdWdoIHByb3RvdHlw
ZQotICAgIFFDT01QQVJFKHN0YXRpY19jYXN0PFF0OjpGb2N1c1BvbGljeT4oZXZhbEpTKCJNeVFP
YmplY3QuU3Ryb25nRm9jdXMiKS50b0ludCgpKSwKLSAgICAgICAgICAgICBRdDo6U3Ryb25nRm9j
dXMpOwotICAgIFFDT01QQVJFKHN0YXRpY19jYXN0PFF0OjpLZXk+KGV2YWxKUygiTXlRT2JqZWN0
LktleV9MZWZ0IikudG9JbnQoKSksCi0gICAgICAgICAgICAgUXQ6OktleV9MZWZ0KTsKLQotICAg
IFFDT01QQVJFKGV2YWxKUygiTXlRT2JqZWN0LmNsYXNzTmFtZSgpIiksIFFMYXRpbjFTdHJpbmco
Ik15UU9iamVjdCIpKTsKLQotICAgIHFSZWdpc3Rlck1ldGFUeXBlPE15UU9iamVjdDo6UG9saWN5
PigiUG9saWN5Iik7Ci0KLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7
Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZVdpdGhFbnVtQXJnKE15
UU9iamVjdC5CYXpQb2xpY3kpIiksIHNVbmRlZmluZWQpOwotICAgIFFDT01QQVJFKG1fbXlPYmpl
Y3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDEwKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5x
dEZ1bmN0aW9uQWN0dWFscygpLnNpemUoKSwgMSk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+
cXRGdW5jdGlvbkFjdHVhbHMoKS5hdCgwKS50b0ludCgpLCBpbnQoTXlRT2JqZWN0OjpCYXpQb2xp
Y3kpKTsKLQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBR
Q09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlV2l0aFF1YWxpZmllZEVudW1Bcmco
TXlRT2JqZWN0LkJhelBvbGljeSkiKSwgc1VuZGVmaW5lZCk7Ci0gICAgUUNPTVBBUkUobV9teU9i
amVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMzYpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3Qt
PnF0RnVuY3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAxKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0
LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvSW50KCksIGludChNeVFPYmplY3Q6OkJhelBv
bGljeSkpOwotCi0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAg
IHsKLSAgICAgICAgUVZhcmlhbnQgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZVJl
dHVybmluZ0VudW0oKSIpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9u
SW52b2tlZCgpLCAzNyk7Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25B
Y3R1YWxzKCkuc2l6ZSgpLCAwKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LmlzVmFyaWFudCgpKTsK
LSAgICB9Ci0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIHsK
LSAgICAgICAgUVZhcmlhbnQgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZVJldHVy
bmluZ1F1YWxpZmllZEVudW0oKSIpOwotICAgICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1
bmN0aW9uSW52b2tlZCgpLCAzOCk7Ci0gICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVu
Y3Rpb25BY3R1YWxzKCkuc2l6ZSgpLCAwKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LmlzTnVtYmVy
KCkpOwotICAgIH0KLSAgICAqLwotfQotCi12b2lkIHRzdF9RV2ViRnJhbWU6OmNsYXNzQ29uc3Ry
dWN0b3IoKQotewotICAgIC8qCi0gICAgUVN0cmluZyBteUNsYXNzID0gcVNjcmlwdFZhbHVlRnJv
bVFNZXRhT2JqZWN0PE15UU9iamVjdD4obV9lbmdpbmUpOwotICAgIG1fZW5naW5lLT5nbG9iYWxP
YmplY3QoKS5zZXRQcm9wZXJ0eSgiTXlRT2JqZWN0IiwgbXlDbGFzcyk7Ci0KLSAgICBRU3RyaW5n
IG15T2JqID0gZXZhbEpTKCJteU9iaiA9IE15UU9iamVjdCgpIik7Ci0gICAgUU9iamVjdCogcW9i
aiA9IG15T2JqLnRvUU9iamVjdCgpOwotICAgIFFWRVJJRlkocW9iaiAhPSAwKTsKLSAgICBRQ09N
UEFSRShxb2JqLT5tZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpLCAiTXlRT2JqZWN0Iik7Ci0gICAg
UUNPTVBBUkUocW9iai0+cGFyZW50KCksIChRT2JqZWN0KikwKTsKLQotICAgIFFTdHJpbmcgcW9i
amVjdENsYXNzID0gcVNjcmlwdFZhbHVlRnJvbVFNZXRhT2JqZWN0PFFPYmplY3Q+KG1fZW5naW5l
KTsKLSAgICBtX2VuZ2luZS0+Z2xvYmFsT2JqZWN0KCkuc2V0UHJvcGVydHkoIlFPYmplY3QiLCBx
b2JqZWN0Q2xhc3MpOwotCi0gICAgUVN0cmluZyBvdGhlck9iaiA9IGV2YWxKUygib3RoZXJPYmog
PSBRT2JqZWN0KG15T2JqKSIpOwotICAgIFFPYmplY3QqIHFxb2JqID0gb3RoZXJPYmoudG9RT2Jq
ZWN0KCk7Ci0gICAgUVZFUklGWShxcW9iaiAhPSAwKTsKLSAgICBRQ09NUEFSRShxcW9iai0+bWV0
YU9iamVjdCgpLT5jbGFzc05hbWUoKSwgIlFPYmplY3QiKTsKLSAgICBRQ09NUEFSRShxcW9iai0+
cGFyZW50KCksIHFvYmopOwotCi0gICAgZGVsZXRlIHFvYmo7Ci0gICAgKi8KLX0KLQotdm9pZCB0
c3RfUVdlYkZyYW1lOjpvdmVycmlkZUludm9rYWJsZSgpCi17Ci0gICAgbV9teU9iamVjdC0+cmVz
ZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlJ
bnZva2FibGUoKSIpLCBzVW5kZWZpbmVkKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1
bmN0aW9uSW52b2tlZCgpLCAwKTsKLQotICAgIC8qIFhGQUlMIC0gY2FuJ3Qgd3JpdGUgdG8gZnVu
Y3Rpb25zIHdpdGggUnVudGltZU9iamVjdAotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlv
bkludm9rZWQoKTsKLSAgICBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlID0gZnVuY3Rpb24o
KSB7IHdpbmRvdy5hID0gMTIzOyB9Iik7Ci0gICAgZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJs
ZSgpIik7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgLTEp
OwotICAgIFFDT01QQVJFKGV2YWxKUygid2luZG93LmEiKS50b0RvdWJsZSgpLCAxMjMuMCk7Ci0K
LSAgICBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlID0gZnVuY3Rpb24oKSB7IHdpbmRvdy5h
ID0gNDU2OyB9Iik7Ci0gICAgZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZSgpIik7Ci0gICAg
UUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgLTEpOwotICAgIFFDT01Q
QVJFKGV2YWxKUygid2luZG93LmEiKS50b0RvdWJsZSgpLCA0NTYuMCk7Ci0gICAgKi8KLQotICAg
IGV2YWxKUygiZGVsZXRlIG15T2JqZWN0Lm15SW52b2thYmxlIik7Ci0gICAgZXZhbEpTKCJteU9i
amVjdC5teUludm9rYWJsZSgpIik7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlv
bkludm9rZWQoKSwgMCk7Ci0KLSAgICAvKiBYRkFJTCAtIGRpdHRvCi0gICAgbV9teU9iamVjdC0+
cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIGV2YWxKUygibXlPYmplY3QubXlJbnZva2Fi
bGUgPSBteU9iamVjdC5teUludm9rYWJsZVdpdGhJbnRBcmciKTsKLSAgICBldmFsSlMoIm15T2Jq
ZWN0Lm15SW52b2thYmxlKDEyMykiKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0
aW9uSW52b2tlZCgpLCAxKTsKLSAgICAqLwotCi0gICAgZXZhbEpTKCJkZWxldGUgbXlPYmplY3Qu
bXlJbnZva2FibGUiKTsKLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7
Ci0gICAgLy8gdGhpcyBmb3JtICh3aXRoIHRoZSAnKCknKSBpcyByZWFkLW9ubHkKLSAgICBldmFs
SlMoIm15T2JqZWN0WydteUludm9rYWJsZSgpJ10gPSBmdW5jdGlvbigpIHsgd2luZG93LmEgPSAx
MjM7IH0iKTsKLSAgICBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlKCkiKTsKLSAgICBRQ09N
UEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAwKTsKLX0KLQotdm9pZCB0c3Rf
UVdlYkZyYW1lOjp0cmFuc2Zlckludm9rYWJsZSgpCi17Ci0gICAgLyogWEZBSUwgLSBjYW4ndCBw
dXQgdG8gZnVuY3Rpb25zIHdpdGggUnVudGltZU9iamVjdAotICAgIG1fbXlPYmplY3QtPnJlc2V0
UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBldmFsSlMoIm15T2JqZWN0LmZvb3piYWxsID0gbXlP
YmplY3QubXlJbnZva2FibGUiKTsKLSAgICBldmFsSlMoIm15T2JqZWN0LmZvb3piYWxsKCkiKTsK
LSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAwKTsKLSAgICBt
X215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgZXZhbEpTKCJteU9iamVj
dC5mb296YmFsbCA9IG15T2JqZWN0Lm15SW52b2thYmxlV2l0aEludEFyZyIpOwotICAgIGV2YWxK
UygibXlPYmplY3QuZm9vemJhbGwoMTIzKSIpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0
RnVuY3Rpb25JbnZva2VkKCksIDEpOwotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbklu
dm9rZWQoKTsKLSAgICBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlID0gbXlPYmplY3QubXlJ
bnZva2FibGVXaXRoSW50QXJnIik7Ci0gICAgZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZSgx
MjMpIik7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMSk7
Ci0KLSAgICBNeU90aGVyUU9iamVjdCBvdGhlcjsKLSAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5h
ZGRUb0pTV2luZG93T2JqZWN0KCJteU90aGVyT2JqZWN0IiwgJm90aGVyKTsKLSAgICBldmFsSlMo
Im15T3RoZXJPYmplY3QuZm9vID0gbXlPYmplY3QuZm9vemJhbGwiKTsKLSAgICBvdGhlci5yZXNl
dFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgZXZhbEpTKCJteU90aGVyT2JqZWN0LmZvbyg0NTYp
Iik7Ci0gICAgUUNPTVBBUkUob3RoZXIucXRGdW5jdGlvbkludm9rZWQoKSwgMSk7Ci0gICAgKi8K
LX0KLQotdm9pZCB0c3RfUVdlYkZyYW1lOjpmaW5kQ2hpbGQoKQotewotICAgIC8qCi0gICAgUU9i
amVjdCogY2hpbGQgPSBuZXcgUU9iamVjdChtX215T2JqZWN0KTsKLSAgICBjaGlsZC0+c2V0T2Jq
ZWN0TmFtZShRTGF0aW4xU3RyaW5nKCJteUNoaWxkT2JqZWN0IikpOwotCi0gICAgewotICAgICAg
ICBRU3RyaW5nIHJlc3VsdCA9IGV2YWxKUygibXlPYmplY3QuZmluZENoaWxkKCdub1N1Y2hDaGls
ZCcpIik7Ci0gICAgICAgIFFDT01QQVJFKHJlc3VsdC5pc051bGwoKSk7Ci0gICAgfQotCi0gICAg
ewotICAgICAgICBRU3RyaW5nIHJlc3VsdCA9IGV2YWxKUygibXlPYmplY3QuZmluZENoaWxkKCdt
eUNoaWxkT2JqZWN0JykiKTsKLSAgICAgICAgUUNPTVBBUkUocmVzdWx0LmlzUU9iamVjdCgpKTsK
LSAgICAgICAgUUNPTVBBUkUocmVzdWx0LnRvUU9iamVjdCgpLCBjaGlsZCk7Ci0gICAgfQotCi0g
ICAgZGVsZXRlIGNoaWxkOwotICAgICovCi19Ci0KLXZvaWQgdHN0X1FXZWJGcmFtZTo6ZmluZENo
aWxkcmVuKCkKLXsKLSAgICAvKgotICAgIFFPYmplY3QqIGNoaWxkID0gbmV3IFFPYmplY3QobV9t
eU9iamVjdCk7Ci0gICAgY2hpbGQtPnNldE9iamVjdE5hbWUoUUxhdGluMVN0cmluZygibXlDaGls
ZE9iamVjdCIpKTsKLQotICAgIHsKLSAgICAgICAgUVN0cmluZyByZXN1bHQgPSBldmFsSlMoIm15
T2JqZWN0LmZpbmRDaGlsZHJlbignbm9TdWNoQ2hpbGQnKSIpOwotICAgICAgICBRQ09NUEFSRShy
ZXN1bHQuaXNBcnJheSgpKTsKLSAgICAgICAgUUNPTVBBUkUocmVzdWx0LnByb3BlcnR5KFFMYXRp
bjFTdHJpbmcoImxlbmd0aCIpKS50b0RvdWJsZSgpLCAwLjApOwotICAgIH0KLQotICAgIHsKLSAg
ICAgICAgUVN0cmluZyByZXN1bHQgPSBldmFsSlMoIm15T2JqZWN0LmZpbmRDaGlsZHJlbignbXlD
aGlsZE9iamVjdCcpIik7Ci0gICAgICAgIFFDT01QQVJFKHJlc3VsdC5pc0FycmF5KCkpOwotICAg
ICAgICBRQ09NUEFSRShyZXN1bHQucHJvcGVydHkoUUxhdGluMVN0cmluZygibGVuZ3RoIikpLnRv
RG91YmxlKCksIDEuMCk7Ci0gICAgICAgIFFDT01QQVJFKHJlc3VsdC5wcm9wZXJ0eShRTGF0aW4x
U3RyaW5nKCIwIikpLnRvUU9iamVjdCgpLCBjaGlsZCk7Ci0gICAgfQotCi0gICAgUU9iamVjdCog
bmFtZWxlc3NDaGlsZCA9IG5ldyBRT2JqZWN0KG1fbXlPYmplY3QpOwotCi0gICAgewotICAgICAg
ICBRU3RyaW5nIHJlc3VsdCA9IGV2YWxKUygibXlPYmplY3QuZmluZENoaWxkcmVuKCdteUNoaWxk
T2JqZWN0JykiKTsKLSAgICAgICAgUUNPTVBBUkUocmVzdWx0LmlzQXJyYXkoKSk7Ci0gICAgICAg
IFFDT01QQVJFKHJlc3VsdC5wcm9wZXJ0eShRTGF0aW4xU3RyaW5nKCJsZW5ndGgiKSkudG9Eb3Vi
bGUoKSwgMS4wKTsKLSAgICAgICAgUUNPTVBBUkUocmVzdWx0LnByb3BlcnR5KFFMYXRpbjFTdHJp
bmcoIjAiKSkudG9RT2JqZWN0KCksIGNoaWxkKTsKLSAgICB9Ci0KLSAgICBRT2JqZWN0KiBhbm90
aGVyQ2hpbGQgPSBuZXcgUU9iamVjdChtX215T2JqZWN0KTsKLSAgICBhbm90aGVyQ2hpbGQtPnNl
dE9iamVjdE5hbWUoUUxhdGluMVN0cmluZygiYW5vdGhlckNoaWxkT2JqZWN0IikpOwotCi0gICAg
ewotICAgICAgICBRU3RyaW5nIHJlc3VsdCA9IGV2YWxKUygibXlPYmplY3QuZmluZENoaWxkcmVu
KCdhbm90aGVyQ2hpbGRPYmplY3QnKSIpOwotICAgICAgICBRQ09NUEFSRShyZXN1bHQuaXNBcnJh
eSgpKTsKLSAgICAgICAgUUNPTVBBUkUocmVzdWx0LnByb3BlcnR5KFFMYXRpbjFTdHJpbmcoImxl
bmd0aCIpKS50b0RvdWJsZSgpLCAxLjApOwotICAgICAgICBRQ09NUEFSRShyZXN1bHQucHJvcGVy
dHkoUUxhdGluMVN0cmluZygiMCIpKS50b1FPYmplY3QoKSwgYW5vdGhlckNoaWxkKTsKLSAgICB9
Ci0KLSAgICBhbm90aGVyQ2hpbGQtPnNldE9iamVjdE5hbWUoUUxhdGluMVN0cmluZygibXlDaGls
ZE9iamVjdCIpKTsKLSAgICB7Ci0gICAgICAgIFFTdHJpbmcgcmVzdWx0ID0gZXZhbEpTKCJteU9i
amVjdC5maW5kQ2hpbGRyZW4oJ215Q2hpbGRPYmplY3QnKSIpOwotICAgICAgICBRQ09NUEFSRShy
ZXN1bHQuaXNBcnJheSgpKTsKLSAgICAgICAgUUNPTVBBUkUocmVzdWx0LnByb3BlcnR5KFFMYXRp
bjFTdHJpbmcoImxlbmd0aCIpKS50b0RvdWJsZSgpLCAyLjApOwotICAgICAgICBRT2JqZWN0KiBv
MSA9IHJlc3VsdC5wcm9wZXJ0eShRTGF0aW4xU3RyaW5nKCIwIikpLnRvUU9iamVjdCgpOwotICAg
ICAgICBRT2JqZWN0KiBvMiA9IHJlc3VsdC5wcm9wZXJ0eShRTGF0aW4xU3RyaW5nKCIxIikpLnRv
UU9iamVjdCgpOwotICAgICAgICBpZiAobzEgIT0gY2hpbGQpIHsKLSAgICAgICAgICAgIFFDT01Q
QVJFKG8xLCBhbm90aGVyQ2hpbGQpOwotICAgICAgICAgICAgUUNPTVBBUkUobzIsIGNoaWxkKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFFDT01QQVJFKG8xLCBjaGlsZCk7Ci0gICAg
ICAgICAgICBRQ09NUEFSRShvMiwgYW5vdGhlckNoaWxkKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIGZpbmQgYWxsCi0gICAgewotICAgICAgICBRU3RyaW5nIHJlc3VsdCA9IGV2YWxKUygi
bXlPYmplY3QuZmluZENoaWxkcmVuKCkiKTsKLSAgICAgICAgUVZFUklGWShyZXN1bHQuaXNBcnJh
eSgpKTsKLSAgICAgICAgaW50IGNvdW50ID0gMzsKLSAgICAgICAgUUNPTVBBUkUocmVzdWx0LnBy
b3BlcnR5KCJsZW5ndGgiKSwgUUxhdGluMVN0cmluZyhjb3VudCk7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBRT2JqZWN0KiBvID0gcmVzdWx0LnBy
b3BlcnR5KGkpLnRvUU9iamVjdCgpOwotICAgICAgICAgICAgaWYgKG8gPT0gbmFtZWxlc3NDaGls
ZCB8fCBvID09IGNoaWxkIHx8IG8gPT0gYW5vdGhlckNoaWxkKQotICAgICAgICAgICAgICAgIC0t
Y291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgUVZFUklGWShjb3VudCA9PSAwKTsKLSAgICB9Ci0K
LSAgICBkZWxldGUgYW5vdGhlckNoaWxkOwotICAgIGRlbGV0ZSBuYW1lbGVzc0NoaWxkOwotICAg
IGRlbGV0ZSBjaGlsZDsKLSAgICAqLwotfQotCi12b2lkIHRzdF9RV2ViRnJhbWU6Om92ZXJsb2Fk
ZWRTbG90cygpCi17Ci0gICAgLy8gc2hvdWxkIHBpY2sgbXlPdmVybG9hZGVkU2xvdChkb3VibGUp
Ci0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIGV2YWxKUygi
bXlPYmplY3QubXlPdmVybG9hZGVkU2xvdCgxMCkiKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0
LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAyNik7Ci0KLSAgICAvLyBzaG91bGQgcGljayBteU92ZXJs
b2FkZWRTbG90KGRvdWJsZSkKLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2Vk
KCk7Ci0gICAgZXZhbEpTKCJteU9iamVjdC5teU92ZXJsb2FkZWRTbG90KDEwLjApIik7Ci0gICAg
UUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMjYpOwotCi0gICAgLy8g
c2hvdWxkIHBpY2sgbXlPdmVybG9hZGVkU2xvdChRU3RyaW5nKQotICAgIG1fbXlPYmplY3QtPnJl
c2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBldmFsSlMoIm15T2JqZWN0Lm15T3ZlcmxvYWRl
ZFNsb3QoJzEwJykiKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tl
ZCgpLCAyOSk7Ci0KLSAgICAvLyBzaG91bGQgcGljayBteU92ZXJsb2FkZWRTbG90KGJvb2wpCi0g
ICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIGV2YWxKUygibXlP
YmplY3QubXlPdmVybG9hZGVkU2xvdCh0cnVlKSIpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3Qt
PnF0RnVuY3Rpb25JbnZva2VkKCksIDI1KTsKLQotICAgIC8vIHNob3VsZCBwaWNrIG15T3Zlcmxv
YWRlZFNsb3QoUURhdGVUaW1lKQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9r
ZWQoKTsKLSAgICBldmFsSlMoIm15T2JqZWN0Lm15T3ZlcmxvYWRlZFNsb3QobmV3IERhdGUoKSki
KTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAzMik7Ci0K
LSAgICAvLyBzaG91bGQgcGljayBteU92ZXJsb2FkZWRTbG90KFFSZWdFeHApCi0gICAgbV9teU9i
amVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIGV2YWxKUygibXlPYmplY3QubXlP
dmVybG9hZGVkU2xvdChuZXcgUmVnRXhwKCkpIik7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+
cXRGdW5jdGlvbkludm9rZWQoKSwgMzQpOwotCi0gICAgLy8gc2hvdWxkIHBpY2sgbXlPdmVybG9h
ZGVkU2xvdChRVmFyaWFudCkKLSAgICAvKiBYRkFJTAotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRG
dW5jdGlvbkludm9rZWQoKTsKLSAgICBRU3RyaW5nIGYgPSBldmFsSlMoIm15T2JqZWN0Lm15T3Zl
cmxvYWRlZFNsb3QiKTsKLSAgICBmLmNhbGwoUVN0cmluZygpLCBRU3RyaW5nTGlzdCgpIDw8IG1f
ZW5naW5lLT5uZXdWYXJpYW50KFFWYXJpYW50KCJjaWFvIikpKTsKLSAgICBRQ09NUEFSRShtX215
T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAzNSk7Ci0gICAgKi8KLQotICAgIC8vIFNob3Vs
ZCBwaWNrIG15T3ZlcmxvYWRlZFNsb3QoUVdlYkVsZW1lbnQpLgotICAgIG1fbXlPYmplY3QtPnJl
c2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAgICBldmFsSlMoIm15T2JqZWN0Lm15T3ZlcmxvYWRl
ZFNsb3QoZG9jdW1lbnQuYm9keSkiKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0
aW9uSW52b2tlZCgpLCAzNik7Ci0KLSAgICAvLyBzaG91bGQgcGljayBteU92ZXJsb2FkZWRTbG90
KFFPYmplY3QqKQotICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAg
ICBldmFsSlMoIm15T2JqZWN0Lm15T3ZlcmxvYWRlZFNsb3QobXlPYmplY3QpIik7Ci0gICAgUUNP
TVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgNDEpOwotCi0gICAgLy8gc2hv
dWxkIHBpY2sgbXlPdmVybG9hZGVkU2xvdChRT2JqZWN0KikKLSAgICBtX215T2JqZWN0LT5yZXNl
dFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgZXZhbEpTKCJteU9iamVjdC5teU92ZXJsb2FkZWRT
bG90KG51bGwpIik7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQo
KSwgNDEpOwotCi0gICAgLy8gc2hvdWxkIHBpY2sgbXlPdmVybG9hZGVkU2xvdChRU3RyaW5nTGlz
dCkKLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0gICAgZXZhbEpT
KCJteU9iamVjdC5teU92ZXJsb2FkZWRTbG90KFsnaGVsbG8nXSkiKTsKLSAgICBRQ09NUEFSRSht
X215T2JqZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCA0Mik7Ci19Ci0KLXZvaWQgdHN0X1FXZWJG
cmFtZTo6ZW51bWVyYXRlX2RhdGEoKQotewotICAgIFFUZXN0OjphZGRDb2x1bW48UVN0cmluZ0xp
c3Q+KCJleHBlY3RlZE5hbWVzIik7Ci0KLSAgICBRVGVzdDo6bmV3Um93KCJlbnVtZXJhdGUgYWxs
IikKLSAgICA8PCAoUVN0cmluZ0xpc3QoKQotICAgICAgICAvLyBtZXRhLW9iamVjdC1kZWZpbmVk
IHByb3BlcnRpZXM6Ci0gICAgICAgIC8vICAgaW5oZXJpdGVkCi0gICAgICAgIDw8ICJvYmplY3RO
YW1lIgotICAgICAgICAvLyAgIG5vbi1pbmhlcml0ZWQKLSAgICAgICAgPDwgInAxIiA8PCAicDIi
IDw8ICJwNCIgPDwgInA2IgotICAgICAgICAvLyBkeW5hbWljIHByb3BlcnRpZXMKLSAgICAgICAg
PDwgImRwMSIgPDwgImRwMiIgPDwgImRwMyIKLSAgICAgICAgLy8gaW5oZXJpdGVkIHNpZ25hbHMg
YW5kIHNsb3RzCi0gICAgICAgIDw8ICJkZXN0cm95ZWQoUU9iamVjdCopIiA8PCAiZGVzdHJveWVk
KCkiCi0jaWYgZGVmaW5lZChIQVZFX1FUNSkgJiYgSEFWRV9RVDUKLSAgICAgICAgPDwgIm9iamVj
dE5hbWVDaGFuZ2VkKFFTdHJpbmcpIgotI2VuZGlmCi0gICAgICAgIDw8ICJkZWxldGVMYXRlcigp
IgotICAgICAgICAvLyBub3QgaW5jbHVkZWQgYmVjYXVzZSBpdCdzIHByaXZhdGU6Ci0gICAgICAg
IC8vIDw8ICJfcV9yZXJlZ2lzdGVyVGltZXJzKHZvaWQqKSIKLSAgICAgICAgLy8gc2lnbmFscwot
ICAgICAgICA8PCAibXlTaWduYWwoKSIKLSAgICAgICAgLy8gc2xvdHMKLSAgICAgICAgPDwgIm15
U2xvdCgpIiA8PCAibXlPdGhlclNsb3QoKSIpOwotfQotCi12b2lkIHRzdF9RV2ViRnJhbWU6OmVu
dW1lcmF0ZSgpCi17Ci0gICAgUUZFVENIKFFTdHJpbmdMaXN0LCBleHBlY3RlZE5hbWVzKTsKLQot
ICAgIE15RW51bVRlc3RRT2JqZWN0IGVudW1RT2JqZWN0OwotICAgIC8vIGdpdmUgaXQgc29tZSBk
eW5hbWljIHByb3BlcnRpZXMKLSAgICBlbnVtUU9iamVjdC5zZXRQcm9wZXJ0eSgiZHAxIiwgImRw
MSIpOwotICAgIGVudW1RT2JqZWN0LnNldFByb3BlcnR5KCJkcDIiLCAiZHAyIik7Ci0gICAgZW51
bVFPYmplY3Quc2V0UHJvcGVydHkoImRwMyIsICJkcDMiKTsKLSAgICBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoIm15RW51bU9iamVjdCIsICZlbnVtUU9i
amVjdCk7Ci0KLSAgICAvLyBlbnVtZXJhdGUgaW4gc2NyaXB0Ci0gICAgewotICAgICAgICBldmFs
SlMoInZhciBlbnVtZXJhdGVkUHJvcGVydGllcyA9IFtdIik7Ci0gICAgICAgIGV2YWxKUygiZm9y
ICh2YXIgcCBpbiBteUVudW1PYmplY3QpIHsgZW51bWVyYXRlZFByb3BlcnRpZXMucHVzaChwKTsg
fSIpOwotICAgICAgICBRU3RyaW5nTGlzdCByZXN1bHQgPSBldmFsSlNWKCJlbnVtZXJhdGVkUHJv
cGVydGllcyIpLnRvU3RyaW5nTGlzdCgpOwotICAgICAgICBRQ09NUEFSRShyZXN1bHQuc2l6ZSgp
LCBleHBlY3RlZE5hbWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhw
ZWN0ZWROYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIFFDT01QQVJFKHJlc3VsdC5hdChp
KSwgZXhwZWN0ZWROYW1lcy5hdChpKSk7Ci0gICAgfQotfQotCi12b2lkIHRzdF9RV2ViRnJhbWU6
Om9iamVjdERlbGV0ZWQoKQotewotICAgIE15UU9iamVjdCogcW9iaiA9IG5ldyBNeVFPYmplY3Qo
KTsKLSAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3Qo
ImJhciIsIHFvYmopOwotICAgIGV2YWxKUygiYmFyLm9iamVjdE5hbWUgPSAnZm9vJzsiKTsKLSAg
ICBRQ09NUEFSRShxb2JqLT5vYmplY3ROYW1lKCksIFFMYXRpbjFTdHJpbmcoImZvbyIpKTsKLSAg
ICBldmFsSlMoImJhci5pbnRQcm9wZXJ0eSA9IDEyMzsiKTsKLSAgICBRQ09NUEFSRShxb2JqLT5p
bnRQcm9wZXJ0eSgpLCAxMjMpOwotICAgIHFvYmotPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsK
LSAgICBldmFsSlMoImJhci5teUludm9rYWJsZS5jYWxsKGJhcik7Iik7Ci0gICAgUUNPTVBBUkUo
cW9iai0+cXRGdW5jdGlvbkludm9rZWQoKSwgMCk7Ci0KLSAgICAvLyBkbyB0aGlzLCB0byBlbnN1
cmUgdGhhdCB3ZSBjYWNoZSB0aGF0IGl0IGltcGxlbWVudHMgY2FsbAotICAgIGV2YWxKUygiYmFy
KCkiKTsKLQotICAgIC8vIG5vdyBkZWxldGUgdGhlIG9iamVjdAotICAgIGRlbGV0ZSBxb2JqOwot
Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJ0eXBlb2YgYmFyIiksIHNPYmplY3QpOwotCi0gICAgLy8g
YW55IGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBzaG91bGQgcmVz
dWx0IGluIGFuIGV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAgICAg
ICBRU3RyaW5nIHJldCA9IGV2YWxKUygiYmFyLm9iamVjdE5hbWUiLCB0eXBlKTsKLSAgICAgICAg
UUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3Ry
aW5nKCJFcnJvcjogY2Fubm90IGFjY2VzcyBtZW1iZXIgYG9iamVjdE5hbWUnIG9mIGRlbGV0ZWQg
UU9iamVjdCIpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBRU3RyaW5nIHR5cGU7Ci0gICAgICAg
IFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJiYXIub2JqZWN0TmFtZSA9ICdmb28nIiwgdHlwZSk7Ci0g
ICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxh
dGluMVN0cmluZygiRXJyb3I6IGNhbm5vdCBhY2Nlc3MgbWVtYmVyIGBvYmplY3ROYW1lJyBvZiBk
ZWxldGVkIFFPYmplY3QiKSk7Ci0gICAgfQotCi0gICAgLy8gbXlJbnZva2FibGUgaXMgc3RvcmVk
IGluIG1lbWJlciB0YWJsZSAoc2luY2Ugd2UndmUgYWNjZXNzZWQgaXQgYmVmb3JlIGRlbGV0aW9u
KQotICAgIHsKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAgICAgICBldmFsSlMoImJhci5teUlu
dm9rYWJsZSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRnVuY3Rpb24pOwotICAg
IH0KLQotICAgIHsKLSAgICAgICAgUVN0cmluZyB0eXBlOwotICAgICAgICBRU3RyaW5nIHJldCA9
IGV2YWxKUygiYmFyLm15SW52b2thYmxlLmNhbGwoYmFyKTsiLCB0eXBlKTsKLSAgICAgICAgcmV0
ID0gZXZhbEpTKCJiYXIubXlJbnZva2FibGUoYmFyKSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFS
RSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVy
cm9yOiBjYW5ub3QgY2FsbCBmdW5jdGlvbiBvZiBkZWxldGVkIFFPYmplY3QiKSk7Ci0gICAgfQot
ICAgIC8vIG15SW52b2thYmxlV2l0aEludEFyZyBpcyBub3Qgc3RvcmVkIGluIG1lbWJlciB0YWJs
ZSAoc2luY2Ugd2UndmUgbm90IGFjY2Vzc2VkIGl0KQotICAgIHsKLSAgICAgICAgUVN0cmluZyB0
eXBlOwotICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygiYmFyLm15SW52b2thYmxlV2l0aElu
dEFyZyIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBR
Q09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBjYW5ub3QgYWNjZXNzIG1lbWJlciBg
bXlJbnZva2FibGVXaXRoSW50QXJnJyBvZiBkZWxldGVkIFFPYmplY3QiKSk7Ci0gICAgfQotCi0g
ICAgLy8gYWNjZXNzIGZyb20gc2NyaXB0Ci0gICAgZXZhbEpTKCJ3aW5kb3cubyA9IGJhcjsiKTsK
LSAgICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFs
SlMoIm8ub2JqZWN0TmFtZSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3Ip
OwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBjYW5ub3QgYWNj
ZXNzIG1lbWJlciBgb2JqZWN0TmFtZScgb2YgZGVsZXRlZCBRT2JqZWN0IikpOwotICAgIH0KLSAg
ICB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMo
Im8ubXlJbnZva2FibGUoKSIsIHR5cGUpOwotICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3Ip
OwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBjYW5ub3QgY2Fs
bCBmdW5jdGlvbiBvZiBkZWxldGVkIFFPYmplY3QiKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAg
UVN0cmluZyB0eXBlOwotICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygiby5teUludm9rYWJs
ZVdpdGhJbnRBcmcoMTApIiwgdHlwZSk7Ci0gICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7
Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IGNhbm5vdCBhY2Nl
c3MgbWVtYmVyIGBteUludm9rYWJsZVdpdGhJbnRBcmcnIG9mIGRlbGV0ZWQgUU9iamVjdCIpKTsK
LSAgICB9Ci19Ci0KLXZvaWQgdHN0X1FXZWJGcmFtZTo6dHlwZUNvbnZlcnNpb24oKQotewotICAg
IG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLQotICAgIFFEYXRlVGltZSBs
b2NhbGR0KFFEYXRlKDIwMDgsMSwxOCksIFFUaW1lKDEyLDMxLDApKTsKLSAgICBRRGF0ZVRpbWUg
dXRjbG9jYWxkdCA9IGxvY2FsZHQudG9VVEMoKTsKLSAgICBRRGF0ZVRpbWUgdXRjZHQoUURhdGUo
MjAwOCwxLDE4KSwgUVRpbWUoMTIsMzEsMCksIFF0OjpVVEMpOwotCi0gICAgLy8gRGF0ZXMgaW4g
SlMgKGRlZmF1bHQgdG8gbG9jYWwpCi0gICAgZXZhbEpTKCJteU9iamVjdC5teU92ZXJsb2FkZWRT
bG90KG5ldyBEYXRlKDIwMDgsMCwxOCwxMiwzMSwwKSkiKTsKLSAgICBRQ09NUEFSRShtX215T2Jq
ZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAzMik7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+
cXRGdW5jdGlvbkFjdHVhbHMoKS5zaXplKCksIDEpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3Qt
PnF0RnVuY3Rpb25BY3R1YWxzKCkuYXQoMCkudG9EYXRlVGltZSgpLnRvVVRDKCksIHV0Y2xvY2Fs
ZHQpOwotCi0gICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOwotICAgIGV2
YWxKUygibXlPYmplY3QubXlPdmVybG9hZGVkU2xvdChuZXcgRGF0ZShEYXRlLlVUQygyMDA4LDAs
MTgsMTIsMzEsMCkpKSIpOwotICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZv
a2VkKCksIDMyKTsKLSAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygp
LnNpemUoKSwgMSk7Ci0gICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMo
KS5hdCgwKS50b0RhdGVUaW1lKCkudG9VVEMoKSwgdXRjZHQpOwotCi0gICAgLy8gUHVzaGluZyBR
RGF0ZVRpbWVzIGludG8gSlMKLSAgICAvLyBMb2NhbAotICAgIGV2YWxKUygiZnVuY3Rpb24gY2hl
Y2tEYXRlKGQpIHt3aW5kb3cuX19kYXRlX2VxdWFscyA9IChkLnRvU3RyaW5nKCkgPT0gbmV3IERh
dGUoMjAwOCwwLDE4LDEyLDMxLDApKT90cnVlOmZhbHNlO30iKTsKLSAgICBldmFsSlMoIm15T2Jq
ZWN0Lm15U2lnbmFsV2l0aERhdGVUaW1lQXJnLmNvbm5lY3QoY2hlY2tEYXRlKSIpOwotICAgIG1f
bXlPYmplY3QtPmVtaXRNeVNpZ25hbFdpdGhEYXRlVGltZUFyZyhsb2NhbGR0KTsKLSAgICBRQ09N
UEFSRShldmFsSlMoIndpbmRvdy5fX2RhdGVfZXF1YWxzIiksIHNUcnVlKTsKLSAgICBldmFsSlMo
ImRlbGV0ZSB3aW5kb3cuX19kYXRlX2VxdWFscyIpOwotICAgIG1fbXlPYmplY3QtPmVtaXRNeVNp
Z25hbFdpdGhEYXRlVGltZUFyZyh1dGNsb2NhbGR0KTsKLSAgICBRQ09NUEFSRShldmFsSlMoIndp
bmRvdy5fX2RhdGVfZXF1YWxzIiksIHNUcnVlKTsKLSAgICBldmFsSlMoImRlbGV0ZSB3aW5kb3cu
X19kYXRlX2VxdWFscyIpOwotICAgIGV2YWxKUygibXlPYmplY3QubXlTaWduYWxXaXRoRGF0ZVRp
bWVBcmcuZGlzY29ubmVjdChjaGVja0RhdGUpOyBkZWxldGUgY2hlY2tEYXRlOyIpOwotCi0gICAg
Ly8gVVRDCi0gICAgZXZhbEpTKCJmdW5jdGlvbiBjaGVja0RhdGUoZCkge3dpbmRvdy5fX2RhdGVf
ZXF1YWxzID0gKGQudG9TdHJpbmcoKSA9PSBuZXcgRGF0ZShEYXRlLlVUQygyMDA4LDAsMTgsMTIs
MzEsMCkpKT90cnVlOmZhbHNlOyB9Iik7Ci0gICAgZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdp
dGhEYXRlVGltZUFyZy5jb25uZWN0KGNoZWNrRGF0ZSkiKTsKLSAgICBtX215T2JqZWN0LT5lbWl0
TXlTaWduYWxXaXRoRGF0ZVRpbWVBcmcodXRjZHQpOwotICAgIFFDT01QQVJFKGV2YWxKUygid2lu
ZG93Ll9fZGF0ZV9lcXVhbHMiKSwgc1RydWUpOwotICAgIGV2YWxKUygiZGVsZXRlIHdpbmRvdy5f
X2RhdGVfZXF1YWxzIik7Ci0gICAgZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhEYXRlVGlt
ZUFyZy5kaXNjb25uZWN0KGNoZWNrRGF0ZSk7IGRlbGV0ZSBjaGVja0RhdGU7Iik7Ci0KLSAgICAv
LyAjIyMgUmVnRXhwcwotfQotCi1jbGFzcyBTdHJpbmdMaXN0VGVzdE9iamVjdCA6IHB1YmxpYyBR
T2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljIFFfU0xPVFM6Ci0gICAgUVZhcmlhbnQgc3Ry
aW5nTGlzdCgpCi0gICAgewotICAgICAgICByZXR1cm4gUVN0cmluZ0xpc3QoKSA8PCAiUSIgPDwg
InQiOwotICAgIH07Ci19OwotCi12b2lkIHRzdF9RV2ViRnJhbWU6OmFycmF5T2JqZWN0RW51bWVy
YWJsZSgpCi17Ci0gICAgUVdlYlBhZ2UgcGFnZTsKLSAgICBRV2ViRnJhbWUqIGZyYW1lID0gcGFn
ZS5tYWluRnJhbWUoKTsKLSAgICBRT2JqZWN0KiBxb2JqZWN0ID0gbmV3IFN0cmluZ0xpc3RUZXN0
T2JqZWN0KCk7Ci0gICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIs
IHFvYmplY3QsIFFTY3JpcHRFbmdpbmU6OlNjcmlwdE93bmVyc2hpcCk7Ci0KLSAgICBjb25zdCBR
U3RyaW5nIHNjcmlwdCgidmFyIHN0cmluZ0FycmF5ID0gdGVzdC5zdHJpbmdMaXN0KCk7IgotICAg
ICAgICAgICAgICAgICAgICAgICAgICJ2YXIgcmVzdWx0ID0gJyc7IgotICAgICAgICAgICAgICAg
ICAgICAgICAgICJmb3IgKHZhciBpIGluIHN0cmluZ0FycmF5KSB7IgotICAgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmVzdWx0ICs9IHN0cmluZ0FycmF5W2ldOyIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAifSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0OyIpOwotICAg
IFFDT01QQVJFKGZyYW1lLT5ldmFsdWF0ZUphdmFTY3JpcHQoc2NyaXB0KS50b1N0cmluZygpLCBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJRdCIpKTsKIH0KIAogdm9pZCB0c3RfUVdlYkZyYW1lOjpzeW1t
ZXRyaWNVcmwoKQpAQCAtMjI4NSwxNCArMTk3LDYgQEAgdm9pZCB0c3RfUVdlYkZyYW1lOjp1cmxD
aGFuZ2UoKQogICAgIFFDT01QQVJFKHVybFNweS5zaXplKCksIDIpOwogfQogCi0KLXZvaWQgdHN0
X1FXZWJGcmFtZTo6ZG9tQ3ljbGVzKCkKLXsKLSAgICBtX3ZpZXctPnNldEh0bWwoIjxodG1sPjxi
b2R5PiIpOwotICAgIFFWYXJpYW50IHYgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5ldmFsdWF0ZUph
dmFTY3JpcHQoImRvY3VtZW50Iik7Ci0gICAgUVZFUklGWSh2LnR5cGUoKSA9PSBRVmFyaWFudDo6
TWFwKTsKLX0KLQogY2xhc3MgRmFrZVJlcGx5IDogcHVibGljIFFOZXR3b3JrUmVwbHkgewogICAg
IFFfT0JKRUNUCiAKQEAgLTI3NTYsODkgKzY2MCw2IEBAIHZvaWQgdHN0X1FXZWJGcmFtZTo6aGl0
VGVzdENvbnRlbnQoKQogICAgIFFDT01QQVJFKGxpbmsuYXR0cmlidXRlKCJ0YXJnZXQiKSwgUVN0
cmluZygiX2ZvbyIpKTsKIH0KIAotdm9pZCB0c3RfUVdlYkZyYW1lOjpqc0J5dGVBcnJheSgpCi17
Ci0gICAgUUJ5dGVBcnJheSBiYSgiaGVsbG8gd29ybGQiKTsKLSAgICBtX215T2JqZWN0LT5zZXRC
eXRlQXJyYXlQcm9wZXJ0eShiYSk7Ci0KLSAgICAvLyByZWFkLW9ubHkgcHJvcGVydHkKLSAgICBR
Q09NUEFSRShtX215T2JqZWN0LT5ieXRlQXJyYXlQcm9wZXJ0eSgpLCBiYSk7Ci0gICAgUVN0cmlu
ZyB0eXBlOwotICAgIFFWYXJpYW50IHYgPSBldmFsSlNWKCJteU9iamVjdC5ieXRlQXJyYXlQcm9w
ZXJ0eSIpOwotICAgIFFDT01QQVJFKGludCh2LnR5cGUoKSksIGludChRVmFyaWFudDo6Qnl0ZUFy
cmF5KSk7Ci0KLSAgICBRQ09NUEFSRSh2LnRvQnl0ZUFycmF5KCksIGJhKTsKLX0KLQotdm9pZCB0
c3RfUVdlYkZyYW1lOjpvd25lcnNoaXAoKQotewotICAgIC8vIHRlc3Qgb3duZXJzaGlwCi0gICAg
ewotICAgICAgICBRV2Vha1BvaW50ZXI8UU9iamVjdD4gcHRyID0gbmV3IFFPYmplY3QoKTsKLSAg
ICAgICAgUVZFUklGWShwdHIgIT0gMCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFFXZWJQYWdl
IHBhZ2U7Ci0gICAgICAgICAgICBRV2ViRnJhbWUqIGZyYW1lID0gcGFnZS5tYWluRnJhbWUoKTsK
LSAgICAgICAgICAgIGZyYW1lLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoInRlc3QiLCBw
dHIuZGF0YSgpLCBRU2NyaXB0RW5naW5lOjpTY3JpcHRPd25lcnNoaXApOwotICAgICAgICB9Ci0g
ICAgICAgIFFWRVJJRlkocHRyID09IDApOwotICAgIH0KLSAgICB7Ci0gICAgICAgIFFXZWFrUG9p
bnRlcjxRT2JqZWN0PiBwdHIgPSBuZXcgUU9iamVjdCgpOwotICAgICAgICBRVkVSSUZZKHB0ciAh
PSAwKTsKLSAgICAgICAgUU9iamVjdCogYmVmb3JlID0gcHRyLmRhdGEoKTsKLSAgICAgICAgewot
ICAgICAgICAgICAgUVdlYlBhZ2UgcGFnZTsKLSAgICAgICAgICAgIFFXZWJGcmFtZSogZnJhbWUg
PSBwYWdlLm1haW5GcmFtZSgpOwotICAgICAgICAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdp
bmRvd09iamVjdCgidGVzdCIsIHB0ci5kYXRhKCksIFFTY3JpcHRFbmdpbmU6OlF0T3duZXJzaGlw
KTsKLSAgICAgICAgfQotICAgICAgICBRVkVSSUZZKHB0ci5kYXRhKCkgPT0gYmVmb3JlKTsKLSAg
ICAgICAgZGVsZXRlIHB0ci5kYXRhKCk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgUU9iamVjdCog
cGFyZW50ID0gbmV3IFFPYmplY3QoKTsKLSAgICAgICAgUU9iamVjdCogY2hpbGQgPSBuZXcgUU9i
amVjdChwYXJlbnQpOwotICAgICAgICBRV2ViUGFnZSBwYWdlOwotICAgICAgICBRV2ViRnJhbWUq
IGZyYW1lID0gcGFnZS5tYWluRnJhbWUoKTsKLSAgICAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlw
dFdpbmRvd09iamVjdCgidGVzdCIsIGNoaWxkLCBRU2NyaXB0RW5naW5lOjpRdE93bmVyc2hpcCk7
Ci0gICAgICAgIFFWYXJpYW50IHYgPSBmcmFtZS0+ZXZhbHVhdGVKYXZhU2NyaXB0KCJ0ZXN0Iik7
Ci0gICAgICAgIFFDT01QQVJFKHF2YXJpYW50X2Nhc3Q8UU9iamVjdCo+KHYpLCBjaGlsZCk7Ci0g
ICAgICAgIGRlbGV0ZSBwYXJlbnQ7Ci0gICAgICAgIHYgPSBmcmFtZS0+ZXZhbHVhdGVKYXZhU2Ny
aXB0KCJ0ZXN0Iik7Ci0gICAgICAgIFFDT01QQVJFKHF2YXJpYW50X2Nhc3Q8UU9iamVjdCo+KHYp
LCAoUU9iamVjdCAqKTApOwotICAgIH0KLSAgICB7Ci0gICAgICAgIFFXZWFrUG9pbnRlcjxRT2Jq
ZWN0PiBwdHIgPSBuZXcgUU9iamVjdCgpOwotICAgICAgICBRVkVSSUZZKHB0ciAhPSAwKTsKLSAg
ICAgICAgewotICAgICAgICAgICAgUVdlYlBhZ2UgcGFnZTsKLSAgICAgICAgICAgIFFXZWJGcmFt
ZSogZnJhbWUgPSBwYWdlLm1haW5GcmFtZSgpOwotICAgICAgICAgICAgZnJhbWUtPmFkZFRvSmF2
YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIHB0ci5kYXRhKCksIFFTY3JpcHRFbmdpbmU6OkF1
dG9Pd25lcnNoaXApOwotICAgICAgICB9Ci0gICAgICAgIC8vIG5vIHBhcmVudCwgc28gaXQgc2hv
dWxkIGJlIGxpa2UgU2NyaXB0T3duZXJzaGlwCi0gICAgICAgIFFWRVJJRlkocHRyID09IDApOwot
ICAgIH0KLSAgICB7Ci0gICAgICAgIFFPYmplY3QqIHBhcmVudCA9IG5ldyBRT2JqZWN0KCk7Ci0g
ICAgICAgIFFXZWFrUG9pbnRlcjxRT2JqZWN0PiBjaGlsZCA9IG5ldyBRT2JqZWN0KHBhcmVudCk7
Ci0gICAgICAgIFFWRVJJRlkoY2hpbGQgIT0gMCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFFX
ZWJQYWdlIHBhZ2U7Ci0gICAgICAgICAgICBRV2ViRnJhbWUqIGZyYW1lID0gcGFnZS5tYWluRnJh
bWUoKTsKLSAgICAgICAgICAgIGZyYW1lLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoInRl
c3QiLCBjaGlsZC5kYXRhKCksIFFTY3JpcHRFbmdpbmU6OkF1dG9Pd25lcnNoaXApOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIGhhcyBwYXJlbnQsIHNvIGl0IHNob3VsZCBiZSBsaWtlIFF0T3duZXJz
aGlwCi0gICAgICAgIFFWRVJJRlkoY2hpbGQgIT0gMCk7Ci0gICAgICAgIGRlbGV0ZSBwYXJlbnQ7
Ci0gICAgfQotfQotCi12b2lkIHRzdF9RV2ViRnJhbWU6Om51bGxWYWx1ZSgpCi17Ci0gICAgUVZh
cmlhbnQgdiA9IG1fdmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZhbHVhdGVKYXZhU2NyaXB0
KCJudWxsIik7Ci0gICAgUVZFUklGWSh2LmlzTnVsbCgpKTsKLX0KLQogdm9pZCB0c3RfUVdlYkZy
YW1lOjpiYXNlVXJsX2RhdGEoKQogewogICAgIFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4oImh0
bWwiKTsKQEAgLTMyMTIsODYgKzEwMzMsNiBAQCB2b2lkIHRzdF9RV2ViRnJhbWU6OmV2YWx1YXRl
V2lsbENhdXNlUmVwYWludCgpCiAgICAgOjp3YWl0Rm9yU2lnbmFsKHZpZXcucGFnZSgpLCBTSUdO
QUwocmVwYWludFJlcXVlc3RlZChRUmVjdCkpKTsKIH0KIAotY2xhc3MgVGVzdEZhY3RvcnkgOiBw
dWJsaWMgUU9iamVjdAotewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgVGVzdEZhY3Rvcnko
KQotICAgICAgICA6IG9iaigwKSwgY291bnRlcigwKQotICAgIHt9Ci0KLSAgICBRX0lOVk9LQUJM
RSBRT2JqZWN0KiBnZXROZXdPYmplY3QoKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG9iajsKLSAg
ICAgICAgb2JqID0gbmV3IFFPYmplY3QodGhpcyk7Ci0gICAgICAgIG9iai0+c2V0T2JqZWN0TmFt
ZShRTGF0aW4xU3RyaW5nKCJ0ZXN0IikgKyBRU3RyaW5nOjpudW1iZXIoKytjb3VudGVyKSk7Ci0g
ICAgICAgIHJldHVybiBvYmo7Ci0KLSAgICB9Ci0KLSAgICBRT2JqZWN0KiBvYmo7Ci0gICAgaW50
IGNvdW50ZXI7Ci19OwotCi12b2lkIHRzdF9RV2ViRnJhbWU6OnFPYmplY3RXcmFwcGVyV2l0aFNh
bWVJZGVudGl0eSgpCi17Ci0gICAgbV92aWV3LT5zZXRIdG1sKCI8c2NyaXB0PmZ1bmN0aW9uIHRy
aWdnZXJCdWcoKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcGFuMScpLmlubmVyVGV4dCA9
IHRlc3QuZ2V0TmV3T2JqZWN0KCkub2JqZWN0TmFtZTsgfTwvc2NyaXB0PiIKLSAgICAgICAgICAg
ICAgICAgICAgIjxib2R5PjxzcGFuIGlkPSdzcGFuMSc+dGVzdDwvc3Bhbj48L2JvZHk+Iik7Ci0K
LSAgICBRV2ViRnJhbWUqIG1haW5GcmFtZSA9IG1fdmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKTsK
LSAgICBRQ09NUEFSRShtYWluRnJhbWUtPnRvUGxhaW5UZXh0KCksIFFTdHJpbmcoInRlc3QiKSk7
Ci0KLSAgICBtYWluRnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIG5l
dyBUZXN0RmFjdG9yeSwgUVNjcmlwdEVuZ2luZTo6U2NyaXB0T3duZXJzaGlwKTsKLQotICAgIG1h
aW5GcmFtZS0+ZXZhbHVhdGVKYXZhU2NyaXB0KCJ0cmlnZ2VyQnVnKCk7Iik7Ci0gICAgUUNPTVBB
UkUobWFpbkZyYW1lLT50b1BsYWluVGV4dCgpLCBRU3RyaW5nKCJ0ZXN0MSIpKTsKLQotICAgIG1h
aW5GcmFtZS0+ZXZhbHVhdGVKYXZhU2NyaXB0KCJ0cmlnZ2VyQnVnKCk7Iik7Ci0gICAgUUNPTVBB
UkUobWFpbkZyYW1lLT50b1BsYWluVGV4dCgpLCBRU3RyaW5nKCJ0ZXN0MiIpKTsKLX0KLQotdm9p
ZCB0c3RfUVdlYkZyYW1lOjppbnRyb3NwZWN0UXRNZXRob2RzX2RhdGEoKQotewotICAgIFFUZXN0
OjphZGRDb2x1bW48UVN0cmluZz4oIm9iamVjdEV4cHJlc3Npb24iKTsKLSAgICBRVGVzdDo6YWRk
Q29sdW1uPFFTdHJpbmc+KCJtZXRob2ROYW1lIik7Ci0gICAgUVRlc3Q6OmFkZENvbHVtbjxRU3Ry
aW5nTGlzdD4oImV4cGVjdGVkUHJvcGVydHlOYW1lcyIpOwotCi0gICAgUVRlc3Q6Om5ld1Jvdygi
bXlPYmplY3QubXlTaWduYWwiKQotICAgICAgICA8PCAibXlPYmplY3QiIDw8ICJteVNpZ25hbCIg
PDwgKFFTdHJpbmdMaXN0KCkgPDwgImNvbm5lY3QiIDw8ICJkaXNjb25uZWN0IiA8PCAibGVuZ3Ro
IiA8PCAibmFtZSIpOwotICAgIFFUZXN0OjpuZXdSb3coIm15T2JqZWN0Lm15U2xvdCIpCi0gICAg
ICAgIDw8ICJteU9iamVjdCIgPDwgIm15U2xvdCIgPDwgKFFTdHJpbmdMaXN0KCkgPDwgImNvbm5l
Y3QiIDw8ICJkaXNjb25uZWN0IiA8PCAibGVuZ3RoIiA8PCAibmFtZSIpOwotICAgIFFUZXN0Ojpu
ZXdSb3coIm15T2JqZWN0Lm15SW52b2thYmxlIikKLSAgICAgICAgPDwgIm15T2JqZWN0IiA8PCAi
bXlJbnZva2FibGUiIDw8IChRU3RyaW5nTGlzdCgpIDw8ICJjb25uZWN0IiA8PCAiZGlzY29ubmVj
dCIgPDwgImxlbmd0aCIgPDwgIm5hbWUiKTsKLSAgICBRVGVzdDo6bmV3Um93KCJteU9iamVjdC5t
eVNpZ25hbC5jb25uZWN0IikKLSAgICAgICAgPDwgIm15T2JqZWN0Lm15U2lnbmFsIiA8PCAiY29u
bmVjdCIgPDwgKFFTdHJpbmdMaXN0KCkgPDwgImxlbmd0aCIgPDwgIm5hbWUiKTsKLSAgICBRVGVz
dDo6bmV3Um93KCJteU9iamVjdC5teVNpZ25hbC5kaXNjb25uZWN0IikKLSAgICAgICAgPDwgIm15
T2JqZWN0Lm15U2lnbmFsIiA8PCAiZGlzY29ubmVjdCIgPDwgKFFTdHJpbmdMaXN0KCkgPDwgImxl
bmd0aCIgPDwgIm5hbWUiKTsKLX0KLQotdm9pZCB0c3RfUVdlYkZyYW1lOjppbnRyb3NwZWN0UXRN
ZXRob2RzKCkKLXsKLSAgICBRRkVUQ0goUVN0cmluZywgb2JqZWN0RXhwcmVzc2lvbik7Ci0gICAg
UUZFVENIKFFTdHJpbmcsIG1ldGhvZE5hbWUpOwotICAgIFFGRVRDSChRU3RyaW5nTGlzdCwgZXhw
ZWN0ZWRQcm9wZXJ0eU5hbWVzKTsKLQotICAgIFFTdHJpbmcgbWV0aG9kTG9va3VwID0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiJTBbJyUxJ10iKS5hcmcob2JqZWN0RXhwcmVzc2lvbikuYXJnKG1ldGhv
ZE5hbWUpOwotICAgIFFDT01QQVJFKGV2YWxKU1YoUVN0cmluZzo6ZnJvbUxhdGluMSgiT2JqZWN0
LmdldE93blByb3BlcnR5TmFtZXMoJTApLnNvcnQoKSIpLmFyZyhtZXRob2RMb29rdXApKS50b1N0
cmluZ0xpc3QoKSwgZXhwZWN0ZWRQcm9wZXJ0eU5hbWVzKTsKLQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZXhwZWN0ZWRQcm9wZXJ0eU5hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFFTdHJp
bmcgbmFtZSA9IGV4cGVjdGVkUHJvcGVydHlOYW1lcy5hdChpKTsKLSAgICAgICAgUUNPTVBBUkUo
ZXZhbEpTKFFTdHJpbmc6OmZyb21MYXRpbjEoIiUwLmhhc093blByb3BlcnR5KCclMScpIikuYXJn
KG1ldGhvZExvb2t1cCkuYXJnKG5hbWUpKSwgc1RydWUpOwotICAgICAgICBldmFsSlMoUVN0cmlu
Zzo6ZnJvbUxhdGluMSgidmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKCUwLCAnJTEnKSIpLmFyZyhtZXRob2RMb29rdXApLmFyZyhuYW1lKSk7Ci0gICAgICAg
IFFDT01QQVJFKGV2YWxKUygidHlwZW9mIGRlc2NyaXB0b3IiKSwgUVN0cmluZzo6ZnJvbUxhdGlu
MSgib2JqZWN0IikpOwotICAgICAgICBRQ09NUEFSRShldmFsSlMoImRlc2NyaXB0b3IuZ2V0Iiks
IHNVbmRlZmluZWQpOwotICAgICAgICBRQ09NUEFSRShldmFsSlMoImRlc2NyaXB0b3Iuc2V0Iiks
IHNVbmRlZmluZWQpOwotICAgICAgICBRQ09NUEFSRShldmFsSlMoUVN0cmluZzo6ZnJvbUxhdGlu
MSgiZGVzY3JpcHRvci52YWx1ZSA9PT0gJTBbJyUxJ10iKS5hcmcobWV0aG9kTG9va3VwKS5hcmco
bmFtZSkpLCBzVHJ1ZSk7Ci0gICAgICAgIFFDT01QQVJFKGV2YWxKUyhRU3RyaW5nOjpmcm9tTGF0
aW4xKCJkZXNjcmlwdG9yLmVudW1lcmFibGUiKSksIHNGYWxzZSk7Ci0gICAgICAgIFFDT01QQVJF
KGV2YWxKUyhRU3RyaW5nOjpmcm9tTGF0aW4xKCJkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSIpKSwg
c0ZhbHNlKTsKLSAgICB9Ci0KLSAgICBRVkVSSUZZKGV2YWxKU1YoInZhciBwcm9wcz1bXTsgZm9y
ICh2YXIgcCBpbiBteU9iamVjdC5kZWxldGVMYXRlcikge3Byb3BzLnB1c2gocCk7fTsgcHJvcHMu
c29ydCgpIikudG9TdHJpbmdMaXN0KCkuaXNFbXB0eSgpKTsKLX0KLQogdm9pZCB0c3RfUVdlYkZy
YW1lOjpzZXRDb250ZW50X2RhdGEoKQogewogICAgIFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4o
Im1pbWVUeXBlIik7CkBAIC0zMzc0LDE1ICsxMTE1LDYgQEAgdm9pZCB0c3RfUVdlYkZyYW1lOjpz
ZXRDYWNoZUxvYWRDb250cm9sQXR0cmlidXRlKCkKICAgICBRQ09NUEFSRShtYW5hZ2VyLT5sYXN0
Q2FjaGVMb2FkKCksIFFOZXR3b3JrUmVxdWVzdDo6UHJlZmVyTmV0d29yayk7CiB9CiAKLXZvaWQg
dHN0X1FXZWJGcmFtZTo6d2ViRWxlbWVudFNsb3RPbmx5KCkKLXsKLSAgICBNeVdlYkVsZW1lbnRT
bG90T25seU9iamVjdCBvYmplY3Q7Ci0gICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+c2V0SHRtbCgi
PGh0bWw+PGhlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iKTsKLSAgICBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoIm15V2ViRWxlbWVudFNsb3RPYmplY3Qi
LCAmb2JqZWN0KTsKLSAgICBldmFsSlMoIm15V2ViRWxlbWVudFNsb3RPYmplY3QuZG9Tb21ldGhp
bmdXaXRoV2ViRWxlbWVudChkb2N1bWVudC5ib2R5KSIpOwotICAgIFFDT01QQVJFKGV2YWxKUygi
bXlXZWJFbGVtZW50U2xvdE9iamVjdC50YWdOYW1lIiksIFFTdHJpbmcoIkJPRFkiKSk7Ci19Ci0K
IC8vIFtRdF0gRml4IHRzdF9RV2ViRnJhbWU6OnNldFVybFdpdGhQZW5kaW5nTG9hZHMoKSBBUEkg
dGVzdAogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMjM3CiAv
KgpkaWZmIC0tZ2l0IGEvU291cmNlL3Rlc3RzLnByaSBiL1NvdXJjZS90ZXN0cy5wcmkKaW5kZXgg
M2MxNWYyOWYzOGMxYjQ1NDZjMDVlNzI4NGY4YjBmNmNjMzIxYWJjNS4uNWQyZWI2Yjk3MGI5ZDIy
MTZkYzZjODc5YTQwYjgxMjUxN2I4YzAxMyAxMDA2NDQKLS0tIGEvU291cmNlL3Rlc3RzLnByaQor
KysgYi9Tb3VyY2UvdGVzdHMucHJpCkBAIC0xMiw2ICsxMiw3IEBAIGxvYWQoZmVhdHVyZXMpCiBX
RUJLSVRfVEVTVFNfRElSID0gJCRQV0QvV2ViS2l0L3F0L3Rlc3RzCiAKIFNVQkRJUlMgKz0gXAor
ICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xb2JqZWN0YnJpZGdlIFwKICAgICAkJFdFQktJVF9URVNU
U19ESVIvcXdlYmZyYW1lIFwKICAgICAkJFdFQktJVF9URVNUU19ESVIvcXdlYnBhZ2UgXAogICAg
ICQkV0VCS0lUX1RFU1RTX0RJUi9xd2ViZWxlbWVudCBcCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cg
Yi9DaGFuZ2VMb2cKaW5kZXggMjhiYTViMGRiNDhkZDQ3YWI2Y2ZjZTMzMWJjMzdlZDdiOGE1OGY1
ZC4uNzJmOWYzMmM3NTYxYWI0MWRmNzU3NTE3NTczMzliZDMxMjUxM2YxYyAxMDA2NDQKLS0tIGEv
Q2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA2LTAxICBD
YWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5v
cmc+CisKKyAgICAgICAgW1F0XSBNb3ZlIFFPYmplY3QgYnJpZGdlIHJlbGF0ZWQgdGVzdHMgZnJv
bSB0c3RfcXdlYmZyYW1lIHRvIHRzdF9xb2JqZWN0YnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODExNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL3Rlc3RzLnByaTogQWRkIG5ldyBl
bnRyeSBmb3IgdHN0X3FvYmplY3RicmlkZ2UuCisKIDIwMTItMDUtMzEgIENocmlzdG9waGUgRHVt
ZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBFbmFibGUg
Q1NTX0lNQUdFX1NFVCBmbGFnCg==
</data>
<flag name="review"
          id="152460"
          type_id="1"
          status="+"
          setter="noam"
    />
          </attachment>
      

    </bug>

</bugzilla>