ZGlmZiAtLWdpdCBhL2FjbG9jYWwubTQgYi9hY2xvY2FsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZTk4NmIKLS0tIC9kZXYvbnVsbAorKysgYi9hY2xvY2FsLm00CkBAIC0wLDAgKzEsMzY1NSBAQAorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuOC41IC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLVNoZWxsLXNjcmlwdC0qLQorCisjIHNlcmlhbCA0NiBBQ19QUk9HX0xJQlRPT0wKKworQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sCitbQUNfUkVRVUlSRShbQUNfTElCVE9PTF9TRVRVUF0pZG5sCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCitBQ19TVUJTVChMSUJUT09MKWRubAorCisjIFByZXZlbnQgbXVsdGlwbGUgZXhwYW5zaW9uCitkZWZpbmUoW0FDX1BST0dfTElCVE9PTF0sIFtdKQorXSkKKworQUNfREVGVU4oW0FDX0xJQlRPT0xfU0VUVVBdLAorW0FDX1BSRVJFUSgyLjEzKWRubAorQUNfUkVRVUlSRShbQUNfRU5BQkxFX1NIQVJFRF0pZG5sCitBQ19SRVFVSVJFKFtBQ19FTkFCTEVfU1RBVElDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19MRF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTk1dKWRubAorQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAorCitBQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAorQUNfUkVRVUlSRShbQUNfREVQTElCU19DSEVDS19NRVRIT0RdKWRubAorQUNfUkVRVUlSRShbQUNfT0JKRVhUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0VYRUVYVF0pZG5sCitkbmwKKworX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0gKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAorY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KK2ZpbGVfbWFnaWMqKQorICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisgICAgQUNfUEFUSF9NQUdJQworICBmaQorICA7OworZXNhYworCitBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQorQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCisKK2lmZGVmKFtBQ19QUk9WSURFX0FDX0xJQlRPT0xfRExPUEVOXSwgZW5hYmxlX2Rsb3Blbj15ZXMsIGVuYWJsZV9kbG9wZW49bm8pCitpZmRlZihbQUNfUFJPVklERV9BQ19MSUJUT09MX1dJTjMyX0RMTF0sCitlbmFibGVfd2luMzJfZGxsPXllcywgZW5hYmxlX3dpbjMyX2RsbD1ubykKKworQUNfQVJHX0VOQUJMRShsaWJ0b29sLWxvY2ssCisgIFsgIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgIGF2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKQordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAqMzItYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtMzIiCisgICAgICA7OworICAgICpOMzIqKQorICAgICAgTEQ9IiR7TEQtbGR9IC1uMzIiCisgICAgICA7OworICAgICo2NC1iaXQqKQorICAgICAgTEQ9IiR7TEQtbGR9IC02NCIKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAorICAgIFtBQ19MQU5HX1NBVkUKKyAgICAgQUNfTEFOR19DCisgICAgIEFDX1RSWV9MSU5LKFtdLFtdLFtsdF9jdl9jY19uZWVkc19iZWxmPXllc10sW2x0X2N2X2NjX25lZWRzX2JlbGY9bm9dKQorICAgICBBQ19MQU5HX1JFU1RPUkVdKQorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7OworCitpZmRlZihbQUNfUFJPVklERV9BQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqKQorICBBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQorICBBQ19DSEVDS19UT09MKEFTLCBhcywgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCisKKyAgIyByZWNlbnQgY3lnd2luIGFuZCBtaW5ndyBzeXN0ZW1zIHN1cHBseSBhIHN0dWIgRGxsTWFpbiB3aGljaCB0aGUgdXNlcgorICAjIGNhbiBvdmVycmlkZSwgYnV0IG9uIG9sZGVyIHN5c3RlbXMgd2UgaGF2ZSB0byBzdXBwbHkgb25lCisgIEFDX0NBQ0hFX0NIRUNLKFtpZiBsaWJ0b29sIHNob3VsZCBzdXBwbHkgRGxsTWFpbiBmdW5jdGlvbl0sIGx0X2N2X25lZWRfZGxsbWFpbiwKKyAgICBbQUNfVFJZX0xJTksoW10sCisgICAgICBbZXh0ZXJuIGludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERsbE1haW4odm9pZCosIGludCwgdm9pZCopOworICAgICAgRGxsTWFpbiAoMCwgMCwgMCk7XSwKKyAgICAgIFtsdF9jdl9uZWVkX2RsbG1haW49bm9dLFtsdF9jdl9uZWVkX2RsbG1haW49eWVzXSldKQorCisgIGNhc2UgJGhvc3QvJENDIGluCisgICotKi1jeWd3aW4qL2djYyotbW5vLWN5Z3dpbip8Ki0qLW1pbmd3KikKKyAgICAjIG9sZCBtaW5ndyBzeXN0ZW1zIHJlcXVpcmUgIi1kbGwiIHRvIGxpbmsgYSBETEwsIHdoaWxlIG1vcmUgcmVjZW50IG9uZXMKKyAgICAjIHJlcXVpcmUgIi1tZGxsIgorICAgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIENGTEFHUz0iJENGTEFHUyAtbWRsbCIKKyAgICBBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGxpbmsgRExMc10sIGx0X2N2X2NjX2RsbF9zd2l0Y2gsCisgICAgICBbQUNfVFJZX0xJTksoW10sIFtdLCBbbHRfY3ZfY2NfZGxsX3N3aXRjaD0tbWRsbF0sW2x0X2N2X2NjX2RsbF9zd2l0Y2g9LWRsbF0pXSkKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIgOzsKKyAgKi0qLWN5Z3dpbiogfCAqLSotcHczMiopCisgICAgIyBjeWd3aW4gc3lzdGVtcyBuZWVkIHRvIHBhc3MgLS1kbGwgdG8gdGhlIGxpbmtlciwgYW5kIG5vdCBsaW5rCisgICAgIyBjcnQubyB3aGljaCB3aWxsIHJlcXVpcmUgYSBXaW5NYWluQDE2IGRlZmluaXRpb24uCisgICAgbHRfY3ZfY2NfZGxsX3N3aXRjaD0iLVdsLC0tZGxsIC1ub3N0YXJ0ZmlsZXMiIDs7CisgIGVzYWMKKyAgOzsKKyAgXSkKK2VzYWMKKworX0xUX0FDX0xUQ09ORklHX0hBQ0sKKworXSkKKworIyBBQ19MSUJUT09MX0hFQURFUl9BU1NFUlQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfTElCVE9PTF9IRUFERVJfQVNTRVJUXSwKK1tBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkQ0Mgc3VwcG9ydHMgYXNzZXJ0IHdpdGhvdXQgYmFja2xpbmtpbmddLAorICAgIFtsdF9jdl9mdW5jX2Fzc2VydF93b3Jrc10sCisgICAgW2Nhc2UgJGhvc3QgaW4KKyAgICAqLSotc29sYXJpcyopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllczsgdGhlbgorICAgICAgICBjYXNlIGAkQ0MgLS12ZXJzaW9uIDI+L2Rldi9udWxsYCBpbgorICAgICAgICBbWzEyXV0uKikgbHRfY3ZfZnVuY19hc3NlcnRfd29ya3M9bm8gOzsKKyAgICAgICAgKikgICAgICAgIGx0X2N2X2Z1bmNfYXNzZXJ0X3dvcmtzPXllcyA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjXSkKKworaWYgdGVzdCAieCRsdF9jdl9mdW5jX2Fzc2VydF93b3JrcyIgPSB4eWVzOyB0aGVuCisgIEFDX0NIRUNLX0hFQURFUlMoYXNzZXJ0LmgpCitmaQorXSkjIEFDX0xJQlRPT0xfSEVBREVSX0FTU0VSVAorCisjIF9MVF9BQ19DSEVDS19ETEZDTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9BQ19DSEVDS19ETEZDTl0sCitbQUNfQ0hFQ0tfSEVBREVSUyhkbGZjbi5oKQorXSkjIF9MVF9BQ19DSEVDS19ETEZDTgorCisjIEFDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKK0FDX1JFUVVJUkUoW0FDX1BST0dfTk1dKQorQUNfUkVRVUlSRShbQUNfT0JKRVhUXSkKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCitBQ19NU0dfQ0hFQ0tJTkcoW2NvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dF0pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbZG5sCisKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbW19BLVphLXpdXVtbX0EtWmEtejAtOV1dKlwpJworCisjIFRyYW5zZm9ybSB0aGUgYWJvdmUgaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCitzeW14ZnJtPSdcMSBcMlwzIFwzJworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uCitsdF9jdl9nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXi4gLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3ZfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbW0JDRFRdXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKKyAgOzsKK2hwdXgqKSAjIEl0cyBsaW5rZXIgZGlzdGluZ3Vpc2hlcyBkYXRhIGZyb20gY29kZSBzeW1ib2xzCisgIGx0X2N2X2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgIGx0X2N2X2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKKyAgOzsKK3NvbGFyaXMqIHwgc3lzdjUqKQorICBzeW1jb2RlPSdbW0JEVF1dJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tbREZOU1RVXV0nCisgIDs7Citlc2FjCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkaG9zdF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YGVjaG8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitpZiAkTk0gLVYgMj4mMSB8IGVncmVwICcoR05VfHdpdGggQkZEKScgPiAvZGV2L251bGw7IHRoZW4KKyAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKK2ZpCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbIAldXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbIAldXVtbIAldXSpcKCRhY19zeW1wcmZ4XCkkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYygpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorRU9GCisKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIEFDX1RSWV9FVkFMKE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0KSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmIGVncmVwICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgZWdyZXAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxFT0YgPiBjb25mdGVzdC4kYWNfZXh0CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisjaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCisjIGRlZmluZSBsdF9wdHIgdm9pZCAqCisjZWxzZQorIyBkZWZpbmUgbHRfcHRyIGNoYXIgKgorIyBkZWZpbmUgY29uc3QKKyNlbmRpZgorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gKi8KK2NvbnN0IHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGx0X3B0ciBhZGRyZXNzOworfQorbHRfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KK3sKK0VPRgorCSAgc2VkICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC8iIDwgIiRubGlzdCIgPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAobHRfcHRyKSAwfQorfTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgc2F2ZV9MSUJTPSIkTElCUyIKKwkgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRub19idWlsdGluX2ZsYWciCisJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9IiRzYXZlX0xJQlMiCisJICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFDX0ZEX0NDCisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQUNfRkRfQ0MKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBQ19GRF9DQworICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQUNfRkRfQ0MKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKK10pCitnbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIgoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CisgIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9CitlbHNlCisgIGdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9IiRsdF9jdl9nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIgorICBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSIkbHRfY3ZfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIKK2ZpCitpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlJGdsb2JhbF9zeW1ib2xfdG9fY2RlYyRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIjsKK3RoZW4KKyAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCitlbHNlCisgIEFDX01TR19SRVNVTFQob2spCitmaQorXSkgIyBBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEUKKworIyBfTFRfQUNfTElCVE9PTF9TWVNfUEFUSF9TRVBBUkFUT1IKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX0xJQlRPT0xfU1lTX1BBVEhfU0VQQVJBVE9SXSwKK1sjIEZpbmQgdGhlIGNvcnJlY3QgUEFUSCBzZXBhcmF0b3IuICBVc3VhbGx5IHRoaXMgaXMgYDonLCBidXQKKyMgREpHUFAgdXNlcyBgOycgbGlrZSBET1MuCitpZiB0ZXN0ICJYJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBYc2V0OyB0aGVuCisgIFVOQU1FPSR7VU5BTUUtYHVuYW1lIDI+L2Rldi9udWxsYH0KKyAgY2FzZSBYJFVOQU1FIGluCisgICAgKi1ET1MpIGx0X2N2X3N5c19wYXRoX3NlcGFyYXRvcj0nOycgOzsKKyAgICAqKSAgICAgbHRfY3Zfc3lzX3BhdGhfc2VwYXJhdG9yPSc6JyA7OworICBlc2FjCisgIFBBVEhfU0VQQVJBVE9SPSRsdF9jdl9zeXNfcGF0aF9zZXBhcmF0b3IKK2ZpCitdKSMgX0xUX0FDX0xJQlRPT0xfU1lTX1BBVEhfU0VQQVJBVE9SCisKKyMgX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoCisjIHdpbGwgZmluZCBhbiBlY2hvIGNvbW1hbmQgd2hpY2ggZG9lc24ndCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCitBQ19ERUZVTihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdLAorW2lmZGVmKFtBQ19ESVZFUlNJT05fTk9USUNFXSwgW0FDX0RJVkVSVF9QVVNIKEFDX0RJVkVSU0lPTl9OT1RJQ0UpXSwKKwkJCSAgICAgIFtBQ19ESVZFUlRfUFVTSChOT1RJQ0UpXSkKK19MVF9BQ19MSUJUT09MX1NZU19QQVRIX1NFUEFSQVRPUgorCisjIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCitjYXNlIFgkRUNITyBpbgorWCotLWZhbGxiYWNrLWVjaG8pCisgICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCisgIEVDSE89YGVjaG8gIiRFQ0hPIiB8IHNlZCAncyxcXFxcXFskXVxcWyRdMCwnWyRdMCcsJ2AKKyAgOzsKK2VzYWMKKworZWNobz0ke0VDSE8tZWNob30KK2lmIHRlc3QgIlhbJF0xIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KKyAgc2hpZnQKK2VsaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCisgIDoKK2VsaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisgICMgWWlwcGVlLCAkZWNobyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCisgIGV4ZWMgJFNIRUxMICJbJF0wIiAtLW5vLXJlZXhlYyAkezErIlskXUAifQorZmkKKworaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxFT0YKKyQqCitFT0YKKyAgZXhpdCAwCitmaQorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgoraWYgdGVzdCAiWCR7Q0RQQVRIK3NldH0iID0gWHNldDsgdGhlbiBDRFBBVEg9OjsgZXhwb3J0IENEUEFUSDsgZmkKKworaWYgdGVzdCAteiAiJEVDSE8iOyB0aGVuCitpZiB0ZXN0ICJYJHtlY2hvX3Rlc3Rfc3RyaW5nK3NldH0iICE9IFhzZXQ7IHRoZW4KKyMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAorICBmb3IgY21kIGluICdzZWQgNTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMnEgIlskXTAiJyAnZWNobyB0ZXN0JzsgZG8KKyAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorICAgIGlmIChlY2hvX3Rlc3Rfc3RyaW5nPSJgZXZhbCAkY21kYCIpIDI+L2Rldi9udWxsICYmCisgICAgICAgZWNob190ZXN0X3N0cmluZz0iYGV2YWwgJGNtZGAiICYmCisgICAgICAgKHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGwKKyAgICB0aGVuCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRlY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgIDoKK2Vsc2UKKyAgIyBUaGUgU29sYXJpcywgQUlYLCBhbmQgRGlnaXRhbCBVbml4IGRlZmF1bHQgZWNobyBwcm9ncmFtcyB1bnF1b3RlCisgICMgYmFja3NsYXNoZXMuICBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgdG8gcXVvdGUgYmFja3NsYXNoZXMgdXNpbmcKKyAgIyAgIGVjaG8gIiRzb21ldGhpbmciIHwgc2VkICdzL1xcL1xcXFwvZycKKyAgIworICAjIFNvLCBmaXJzdCB3ZSBsb29rIGZvciBhIHdvcmtpbmcgZWNobyBpbiB0aGUgdXNlcidzIFBBVEguCisKKyAgSUZTPSIke0lGUz0gCX0iOyBzYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKyAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgorICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorICAgICAgZWNobz0iJGRpci9lY2hvIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJHNhdmVfaWZzIgorCisgIGlmIHRlc3QgIlgkZWNobyIgPSBYZWNobzsgdGhlbgorICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgorICAgIGlmIHRlc3QgIlhgKHByaW50IC1yICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YChwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCisgICAgICBlY2hvPSdwcmludCAtcicKKyAgICBlbGlmICh0ZXN0IC1mIC9iaW4va3NoIHx8IHRlc3QgLWYgL2Jpbi9rc2gkYWNfZXhlZXh0KSAmJgorCSB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUga3NoLCB0cnkgcnVubmluZyBjb25maWd1cmUgYWdhaW4gd2l0aCBpdC4KKyAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAorICAgICAgQ09ORklHX1NIRUxMPS9iaW4va3NoCisgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICBleGVjICRDT05GSUdfU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9CisgICAgZWxzZQorICAgICAgIyBUcnkgdXNpbmcgcHJpbnRmLgorICAgICAgZWNobz0ncHJpbnRmICVzXG4nCisgICAgICBpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKwkgZWNob190ZXN0aW5nX3N0cmluZz1gKCRlY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkjIENvb2wsIHByaW50ZiB3b3JrcworCToKKyAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKwkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCUNPTkZJR19TSEVMTD0kT1JJR0lOQUxfQ09ORklHX1NIRUxMCisJZXhwb3J0IENPTkZJR19TSEVMTAorCVNIRUxMPSIkQ09ORklHX1NIRUxMIgorCWV4cG9ydCBTSEVMTAorCWVjaG89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwllY2hvPSIkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgZWxzZQorCSMgbWF5YmUgd2l0aCBhIHNtYWxsZXIgc3RyaW5nLi4uCisJcHJldj06CisKKwlmb3IgY21kIGluICdlY2hvIHRlc3QnICdzZWQgMnEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMjBxICJbJF0wIicgJ3NlZCA1MHEgIlskXTAiJzsgZG8KKwkgIGlmICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCIpIDI+L2Rldi9udWxsCisJICB0aGVuCisJICAgIGJyZWFrCisJICBmaQorCSAgcHJldj0iJGNtZCIKKwlkb25lCisKKwlpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIlskXTAiJzsgdGhlbgorCSAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkcHJldmAKKwkgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCisJICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiWyRdMCIgJHsxKyJbJF1AIn0KKwllbHNlCisJICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgorCSAgZWNobz1lY2hvCisJZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK2ZpCitmaQorCisjIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCisjIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KK0VDSE89JGVjaG8KK2lmIHRlc3QgIlgkRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisgICBFQ0hPPSIkQ09ORklHX1NIRUxMIFxcXCRcWyRdMCAtLWZhbGxiYWNrLWVjaG8iCitmaQorCitBQ19TVUJTVChFQ0hPKQorQUNfRElWRVJUX1BPUAorXSkjIF9MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNICisKKyMgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0sCitbaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBbJDRdCitlbHNlCisgIEFDX1JFUVVJUkUoW19MVF9BQ19DSEVDS19ETEZDTl0pZG5sCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorWyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKKyNlbmRpZgorCit2b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorCisgICAgZXhpdCAoc3RhdHVzKTsKK31dCitFT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApIDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKKyAgICAgIHgkbHRfdW5rbm93bnx4KikgJDMgOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgJDMKKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCitdKSMgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRgorCisjIEFDX0xJQlRPT0xfRExPUEVOX1NFTEYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLAorW2lmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorICBlbmFibGVfZGxvcGVuPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCitlbHNlCisgIGx0X2N2X2Rsb3Blbj1ubworICBsdF9jdl9kbG9wZW5fbGlicz0KKworICBjYXNlICRob3N0X29zIGluCisgIGJlb3MqKQorICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgIDs7CisKKyAgKikKKyAgICBBQ19DSEVDS19GVU5DKFtzaGxfbG9hZF0sCisgICAgICAgICAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiXSwKKyAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCisgICAgICAgICAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1kbGQiXSwKKwlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKKwkgICAgICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iXSwKKwkgIFtBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJICAgICAgICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCisJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKKwkgICAgICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCisJICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKKwkgICAgICAgICAgICBbbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1kbGQiXSkKKwkgICAgICBdKQorCSAgICBdKQorCSAgXSkKKwldKQorICAgICAgXSkKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPW5vCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgQUNfUkVRVUlSRShbX0xUX0FDX0NIRUNLX0RMRkNOXSlkbmwKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9BQ19UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgTERGTEFHUz0iJExERkxBR1MgJGxpbmtfc3RhdGljX2ZsYWciCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorICAgIAkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAorCSAgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQorICAgICAgXSkKKyAgICBmaQorCisgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCitdKSMgQUNfTElCVE9PTF9ETE9QRU5fU0VMRgorCitBQ19ERUZVTihbX0xUX0FDX0xUQ09ORklHX0hBQ0tdLAorW0FDX1JFUVVJUkUoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0pZG5sCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorWHNlZD0nc2VkIC1lIHMvXlgvLycKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtbXFwiXFxgJFxcXFxdXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbW1xcIlxcYFxcXFxdXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgQ29uc3RhbnRzOgorcm09InJtIC1mIgorCisjIEdsb2JhbCB2YXJpYWJsZXM6CitkZWZhdWx0X29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNJFZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorb2ZpbGU9IiRkZWZhdWx0X29maWxlIgord2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQVIiICYmIEFSPWFyCit0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQordGVzdCAteiAiJEFTIiAmJiBBUz1hcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAordGVzdCAteiAiJExEIiAmJiBMRD1sZAordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06Cit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK2lmIHRlc3QgeCIkaG9zdCIgIT0geCIkYnVpbGQiOyB0aGVuCisgIGFjX3Rvb2xfcHJlZml4PSR7aG9zdF9hbGlhc30tCitlbHNlCisgIGFjX3Rvb2xfcHJlZml4PQorZmkKKworIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2xpbnV4LWdudSopIDs7CitsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKK2VzYWMKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSJcJFJBTkxJQiAtdCBcJG9sZGxpYn4kb2xkX3Bvc3RpbnN0YWxsX2NtZHMiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iXCRSQU5MSUIgXCRvbGRsaWJ+JG9sZF9wb3N0aW5zdGFsbF9jbWRzIgorICAgIDs7CisgIGVzYWMKKyAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCitmaQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorc2V0IGR1bW15ICRDQworY29tcGlsZXI9IlskXTIiCisKK0FDX01TR19DSEVDS0lORyhbZm9yIG9iamRpcl0pCitybSAtZiAubGlicyAyPi9kZXYvbnVsbAorbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLmxpYnM7IHRoZW4KKyAgb2JqZGlyPS5saWJzCitlbHNlCisgICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCisgIG9iamRpcj1fbGlicworZmkKK3JtZGlyIC5saWJzIDI+L2Rldi9udWxsCitBQ19NU0dfUkVTVUxUKCRvYmpkaXIpCisKKworQUNfQVJHX1dJVEgocGljLAorWyAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlIGJvdGhdXSwKK3BpY19tb2RlPSIkd2l0aHZhbCIsIHBpY19tb2RlPWRlZmF1bHQpCit0ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKKworIyBXZSBhc3N1bWUgaGVyZSB0aGF0IHRoZSB2YWx1ZSBmb3IgbHRfY3ZfcHJvZ19jY19waWMgd2lsbCBub3QgYmUgY2FjaGVkCisjIGluIGlzb2xhdGlvbiwgYW5kIHRoYXQgc2VlaW5nIGl0IHNldCAoZnJvbSB0aGUgY2FjaGUpIGluZGljYXRlcyB0aGF0CisjIHRoZSBhc3NvY2lhdGVkIHZhbHVlcyBhcmUgc2V0IChpbiB0aGUgY2FjaGUpIGNvcnJlY3RseSB0b28uCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wcm9nX2NjX3BpYywKK1sgbHRfY3ZfcHJvZ19jY19waWM9CisgIGx0X2N2X3Byb2dfY2Nfc2hsaWI9CisgIGx0X2N2X3Byb2dfY2Nfd2w9CisgIGx0X2N2X3Byb2dfY2Nfc3RhdGljPQorICBsdF9jdl9wcm9nX2NjX25vX2J1aWx0aW49CisgIGx0X2N2X3Byb2dfY2NfY2FuX2J1aWxkX3NoYXJlZD0kY2FuX2J1aWxkX3NoYXJlZAorCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19jY193bD0nLVdsLCcKKyAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgIyBCZWxvdyB0aGVyZSBpcyBhIGRpcnR5IGhhY2sgdG8gZm9yY2Ugbm9ybWFsIHN0YXRpYyBsaW5raW5nIHdpdGggLWxkbAorICAgICAgIyBUaGUgcHJvYmxlbSBpcyBiZWNhdXNlIGxpYmRsIGR5bmFtaWNhbGx5IGxpbmtlZCB3aXRoIGJvdGggbGliYyBhbmQKKyAgICAgICMgbGliQyAoQUlYIEMrKyBsaWJyYXJ5KSwgd2hpY2ggb2J2aW91c2x5IGRvZXNuJ3QgaW5jbHVkZWQgaW4gbGlicmFyaWVzCisgICAgICAjIGxpc3QgYnkgZ2NjLiBUaGlzIGNhdXNlIHVuZGVmaW5lZCBzeW1ib2xzIHdpdGggLXN0YXRpYyBmbGFncy4KKyAgICAgICMgVGhpcyBoYWNrIGFsbG93cyBDIHByb2dyYW1zIHRvIGJlIGxpbmtlZCB3aXRoICItc3RhdGljIC1sZGwiLCBidXQKKyAgICAgICMgbm90IHN1cmUgYWJvdXQgQysrIHByb2dyYW1zLgorICAgICAgbHRfY3ZfcHJvZ19jY19zdGF0aWM9IiRsdF9jdl9wcm9nX2NjX3N0YXRpYyAke2x0X2N2X3Byb2dfY2Nfd2x9LWxDIgorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgIGx0X2N2X3Byb2dfY2NfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICA7OworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfY3ZfcHJvZ19jY19waWM9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIGx0X2N2X3Byb2dfY2NfcGljPSctRERMTF9FWFBPUlQnCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwkgbHRfY3ZfcHJvZ19jY19waWM9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGx0X2N2X3Byb2dfY2NfcGljPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgIyBQT1JUTUUgQ2hlY2sgZm9yIFBJQyBmbGFncyBmb3IgdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyogfCBhaXg0KiB8IGFpeDUqKQorICAgICAgbHRfY3ZfcHJvZ19jY193bD0nLVdsLCcKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJbHRfY3ZfcHJvZ19jY19zdGF0aWM9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X2N2X3Byb2dfY2Nfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIGx0X2N2X3Byb2dfY2Nfd2w9Jy1XbCwnCisgICAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0iJHtsdF9jdl9wcm9nX2NjX3dsfS1hICR7bHRfY3ZfcHJvZ19jY193bH1hcmNoaXZlIgorICAgICAgbHRfY3ZfcHJvZ19jY19waWM9JytaJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBsdF9jdl9wcm9nX2NjX3dsPSctV2wsJworICAgICAgbHRfY3ZfcHJvZ19jY19zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgorICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfY3ZfcHJvZ19jY19waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgbHRfY3ZfcHJvZ19jY19waWM9Jy1LUElDJworICAgICAgbHRfY3ZfcHJvZ19jY19zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfY3ZfcHJvZ19jY193bD0nLVdsLCcKKyAgICAgIGx0X2N2X3Byb2dfY2Nfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzY28zLjJ2NSopCisgICAgICBsdF9jdl9wcm9nX2NjX3BpYz0nLUtwaWMnCisgICAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLWRuJworICAgICAgbHRfY3ZfcHJvZ19jY19zaGxpYj0nLWJlbGYnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBsdF9jdl9wcm9nX2NjX3BpYz0nLUtQSUMnCisgICAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBsdF9jdl9wcm9nX2NjX3dsPSctV2wsJworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBsdF9jdl9wcm9nX2NjX3BpYz0nLVBJQycKKyAgICAgIGx0X2N2X3Byb2dfY2Nfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGx0X2N2X3Byb2dfY2Nfd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisgICAgICBsdF9jdl9wcm9nX2NjX3BpYz0nLUtQSUMnCisgICAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBsdF9jdl9wcm9nX2NjX3dsPSctV2wsJworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgbHRfY3ZfcHJvZ19jY19waWM9Jy1waWMnCisgICAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCWx0X2N2X3Byb2dfY2NfcGljPSctS2NvbmZvcm1fcGljJworCWx0X2N2X3Byb2dfY2Nfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgKikKKyAgICAgIGx0X2N2X3Byb2dfY2NfY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3Byb2dfY2NfcGljIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFtub25lXSkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChbJGx0X2N2X3Byb2dfY2NfcGljXSkKKworICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcGljX2ZsYWcgYWN0dWFsbHkgd29ya3MuCisgIEFDX01TR19DSEVDS0lORyhbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9jdl9wcm9nX2NjX3BpYyB3b3Jrc10pCisgIEFDX0NBQ0hFX1ZBTChsdF9jdl9wcm9nX2NjX3BpY193b3JrcywgW2RubAorICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIENGTEFHUz0iJENGTEFHUyAkbHRfY3ZfcHJvZ19jY19waWMgLURQSUMiCisgICAgQUNfVFJZX0NPTVBJTEUoW10sIFtdLCBbZG5sCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwkjIE9uIEhQLVVYLCBib3RoIENDIGFuZCBHQ0Mgb25seSB3YXJuIHRoYXQgUElDIGlzIHN1cHBvcnRlZC4uLiB0aGVuCisJIyB0aGV5IGNyZWF0ZSBub24tUElDIG9iamVjdHMuICBTbywgaWYgdGhlcmUgd2VyZSBhbnkgd2FybmluZ3MsIHdlCisJIyBhc3N1bWUgdGhhdCBQSUMgaXMgbm90IHN1cHBvcnRlZC4KKwlpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgbHRfY3ZfcHJvZ19jY19waWNfd29ya3M9bm8KKwllbHNlCisJICBsdF9jdl9wcm9nX2NjX3BpY193b3Jrcz15ZXMKKwlmaQorCTs7CisgICAgICAqKQorCWx0X2N2X3Byb2dfY2NfcGljX3dvcmtzPXllcworCTs7CisgICAgICBlc2FjCisgICAgXSwgW2RubAorICAgICAgbHRfY3ZfcHJvZ19jY19waWNfd29ya3M9bm8KKyAgICBdKQorICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICBdKQorCisgIGlmIHRlc3QgIlgkbHRfY3ZfcHJvZ19jY19waWNfd29ya3MiID0gWG5vOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19jY19waWM9CisgICAgbHRfY3ZfcHJvZ19jY19jYW5fYnVpbGRfc2hhcmVkPW5vCisgIGVsc2UKKyAgICBsdF9jdl9wcm9nX2NjX3BpYz0iICRsdF9jdl9wcm9nX2NjX3BpYyIKKyAgZmkKKworICBBQ19NU0dfUkVTVUxUKFskbHRfY3ZfcHJvZ19jY19waWNfd29ya3NdKQorZmkKKworIyBDaGVjayBmb3IgYW55IHNwZWNpYWwgc2hhcmVkIGxpYnJhcnkgY29tcGlsYXRpb24gZmxhZ3MuCitpZiB0ZXN0IC1uICIkbHRfY3ZfcHJvZ19jY19zaGxpYiI7IHRoZW4KKyAgQUNfTVNHX1dBUk4oW1xgJENDJyByZXF1aXJlcyBcYCRsdF9jdl9wcm9nX2NjX3NobGliJyB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgaWYgZWNobyAiJG9sZF9DQyAkb2xkX0NGTEFHUyAiIHwgZWdyZXAgLWUgIltbIAldXSRsdF9jdl9wcm9nX2NjX3NobGliW1sgCV1dIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgZWxzZQorICAgQUNfTVNHX1dBUk4oW2FkZCBcYCRsdF9jdl9wcm9nX2NjX3NobGliJyB0byB0aGUgQ0Mgb3IgQ0ZMQUdTIGVudiB2YXJpYWJsZSBhbmQgcmVjb25maWd1cmVdKQorICAgIGx0X2N2X3Byb2dfY2NfY2FuX2J1aWxkX3NoYXJlZD1ubworICBmaQorZmkKKworQUNfTVNHX0NIRUNLSU5HKFtpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X2N2X3Byb2dfY2Nfc3RhdGljIHdvcmtzXSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3ZfcHJvZ19jY19zdGF0aWNfd29ya3NdLCBbZG5sCisgIGx0X2N2X3Byb2dfY2Nfc3RhdGljX3dvcmtzPW5vCisgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgIExERkxBR1M9IiRMREZMQUdTICRsdF9jdl9wcm9nX2NjX3N0YXRpYyIKKyAgQUNfVFJZX0xJTksoW10sIFtdLCBbbHRfY3ZfcHJvZ19jY19zdGF0aWNfd29ya3M9eWVzXSkKKyAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKK10pCisKKyMgQmVsdCAqYW5kKiBicmFjZXMgdG8gc3RvcCBteSB0cm91c2VycyBmYWxsaW5nIGRvd246Cit0ZXN0ICJYJGx0X2N2X3Byb2dfY2Nfc3RhdGljX3dvcmtzIiA9IFhubyAmJiBsdF9jdl9wcm9nX2NjX3N0YXRpYz0KK0FDX01TR19SRVNVTFQoWyRsdF9jdl9wcm9nX2NjX3N0YXRpY193b3Jrc10pCisKK3BpY19mbGFnPSIkbHRfY3ZfcHJvZ19jY19waWMiCitzcGVjaWFsX3NobGliX2NvbXBpbGVfZmxhZ3M9IiRsdF9jdl9wcm9nX2NjX3NobGliIgord2w9IiRsdF9jdl9wcm9nX2NjX3dsIgorbGlua19zdGF0aWNfZmxhZz0iJGx0X2N2X3Byb2dfY2Nfc3RhdGljIgorbm9fYnVpbHRpbl9mbGFnPSIkbHRfY3ZfcHJvZ19jY19ub19idWlsdGluIgorY2FuX2J1aWxkX3NoYXJlZD0iJGx0X2N2X3Byb2dfY2NfY2FuX2J1aWxkX3NoYXJlZCIKKworCisjIENoZWNrIHRvIHNlZSBpZiBvcHRpb25zIC1vIGFuZCAtYyBhcmUgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyCitBQ19NU0dfQ0hFQ0tJTkcoW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9jb21waWxlcl9jX29dLCBbCiskcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKK21rZGlyIGNvbmZ0ZXN0CitjZCBjb25mdGVzdAorZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0Citta2RpciBvdXQKKyMgQWNjb3JkaW5nIHRvIFRvbSBUcm9tZXksIElhbiBMYW5jZSBUYXlsb3IgcmVwb3J0ZWQgdGhlcmUgYXJlIEMgY29tcGlsZXJzCisjIHRoYXQgd2lsbCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSByZWdhcmRsZXNzIG9mCisjIHRoZSBvdXRwdXQgZGlyZWN0b3J5LiAgVGh1cywgbWFraW5nIENXRCByZWFkLW9ubHkgd2lsbCBjYXVzZSB0aGlzIHRlc3QKKyMgdG8gZmFpbCwgZW5hYmxpbmcgbG9ja2luZyBvciBhdCBsZWFzdCB3YXJuaW5nIHRoZSB1c2VyIG5vdCB0byBkbyBwYXJhbGxlbAorIyBidWlsZHMuCitjaG1vZCAtdyAuCitzYXZlX0NGTEFHUz0iJENGTEFHUyIKK0NGTEFHUz0iJENGTEFHUyAtbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCitjb21waWxlcl9jX289bm8KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6X19vbGluZV9fOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPm91dC9jb25mdGVzdC5lcnI7IH0gJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQ7IHRoZW4KKyAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgIGlmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGx0X2N2X2NvbXBpbGVyX2Nfbz1ubworICBlbHNlCisgICAgbHRfY3ZfY29tcGlsZXJfY19vPXllcworICBmaQorZWxzZQorICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciAxPiZBQ19GRF9DQworICBsdF9jdl9jb21waWxlcl9jX289bm8KK2ZpCitDRkxBR1M9IiRzYXZlX0NGTEFHUyIKK2NobW9kIHUrdyAuCiskcm0gY29uZnRlc3QqIG91dC8qCitybWRpciBvdXQKK2NkIC4uCitybWRpciBjb25mdGVzdAorJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCitdKQorY29tcGlsZXJfY19vPSRsdF9jdl9jb21waWxlcl9jX28KK0FDX01TR19SRVNVTFQoWyRjb21waWxlcl9jX29dKQorCitpZiB0ZXN0IHgiJGNvbXBpbGVyX2NfbyIgPSB4InllcyI7IHRoZW4KKyAgIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIHdyaXRlIHRvIGEgLmxvCisgIEFDX01TR19DSEVDS0lORyhbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUubG9dKQorICBBQ19DQUNIRV9WQUwoW2x0X2N2X2NvbXBpbGVyX29fbG9dLCBbCisgIGx0X2N2X2NvbXBpbGVyX29fbG89bm8KKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYyAtbyBjb25mdGVzdC5sbyIKKyAgc2F2ZV9vYmpleHQ9IiRhY19vYmpleHQiCisgIGFjX29iamV4dD1sbworICBBQ19UUllfQ09NUElMRShbXSwgW2ludCBzb21lX3ZhcmlhYmxlID0gMDtdLCBbZG5sCisgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgbHRfY3ZfY29tcGlsZXJfb19sbz1ubworICAgIGVsc2UKKyAgICAgIGx0X2N2X2NvbXBpbGVyX29fbG89eWVzCisgICAgZmkKKyAgXSkKKyAgYWNfb2JqZXh0PSIkc2F2ZV9vYmpleHQiCisgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICBdKQorICBjb21waWxlcl9vX2xvPSRsdF9jdl9jb21waWxlcl9vX2xvCisgIEFDX01TR19SRVNVTFQoWyRjb21waWxlcl9vX2xvXSkKK2Vsc2UKKyAgY29tcGlsZXJfb19sbz1ubworZmkKKworIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAoraGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzXSkKKyAgaGFyZF9saW5rcz15ZXMKKyAgJHJtIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgQUNfTVNHX1JFU1VMVChbJGhhcmRfbGlua3NdKQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIEFDX01TR19XQVJOKFtcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10pCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMgLWMgY29uZnRlc3QuJGFjX2V4dCIKKyAgY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPW5vCisgIEFDX1RSWV9DT01QSUxFKFtdLCBbaW50IHNvbWVfdmFyaWFibGUgPSAwO10sIFtkbmwKKyAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICBjb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KKyAgICBlbHNlCisgICAgICBjb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCisgICAgZmkKKyAgXSkKKyAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgIEFDX01TR19SRVNVTFQoWyRjb21waWxlcl9ydHRpX2V4Y2VwdGlvbnNdKQorCisgIGlmIHRlc3QgIiRjb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0gInllcyI7IHRoZW4KKyAgICBub19idWlsdGluX2ZsYWc9JyAtZm5vLWJ1aWx0aW4gLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucycKKyAgZWxzZQorICAgIG5vX2J1aWx0aW5fZmxhZz0nIC1mbm8tYnVpbHRpbicKKyAgZmkKK2ZpCisKKyMgU2VlIGlmIHRoZSBsaW5rZXIgc3VwcG9ydHMgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorCithbGxvd191bmRlZmluZWRfZmxhZz0KK25vX3VuZGVmaW5lZF9mbGFnPQorbmVlZF9saWJfcHJlZml4PXVua25vd24KK25lZWRfdmVyc2lvbj11bmtub3duCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworYXJjaGl2ZV9jbWRzPQorYXJjaGl2ZV9leHBzeW1fY21kcz0KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9CitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQordGhyZWFkX3NhZmVfZmxhZ19zcGVjPQoraGFyZGNvZGVfaW50b19saWJzPW5vCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KK2hhcmRjb2RlX2RpcmVjdD1ubworaGFyZGNvZGVfbWludXNfTD1ubworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorcnVucGF0aF92YXI9CitsaW5rX2FsbF9kZXBsaWJzPXVua25vd24KK2Fsd2F5c19leHBvcnRfc3ltYm9scz1ubworZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAoraW5jbHVkZV9leHBzeW1zPQorIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGVncmVwIHJlZ3VsYXIgZXhwcmVzc2lvbiBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorZXhjbHVkZV9leHBzeW1zPSJfR0xPQkFMX09GRlNFVF9UQUJMRV8iCisjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCitleHRyYWN0X2V4cHN5bXNfY21kcz0KKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgIHdpdGhfZ251X2xkPW5vCisgIGZpCisgIDs7CitvcGVuYnNkKikKKyAgd2l0aF9nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKKworbGRfc2hsaWJzPXllcworaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICB3bGFyYz0nJHt3bH0nCisKKyAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyogfCBhaXg0KiB8IGFpeDUqKQorICAgICMgT24gQUlYLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICMgTm90ZTpDaGVjayBHTlUgbGlua2VyIG9uIEFJWCA1LUlBNjQgd2hlbi9pZiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4KKyAgICBsZF9zaGxpYnM9bm8KKyAgICBjYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKworRU9GCisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICBhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisKKyAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cworICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCisgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCisgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKKyAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4gdXNlCisgICAgIyB0aGVtLgorICAgIGxkX3NobGlicz1ubworICAgIDs7CisKKyAgYmVvcyopCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZWdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKyAgICAgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgIGVsc2UKKyAgICAgIGxkX3NobGlicz1ubworICAgIGZpCisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworCisgICAgZXh0cmFjdF9leHBzeW1zX2NtZHM9J3Rlc3QgLWYgJG91dHB1dF9vYmpkaXIvaW1wZ2VuLmMgfHwgXAorICAgICAgc2VkIC1lICIvXiMgXC9cKiBpbXBnZW5cLmMgc3RhcnRzIGhlcmUgXCpcLy8sL14jIFwvXCogaW1wZ2VuLmMgZW5kcyBoZXJlIFwqXC8vIHsgcy9eIyAvLztzL14jICokLy87IHA7IH0iIC1lIGQgPCAkJycwID4gJG91dHB1dF9vYmpkaXIvaW1wZ2VuLmN+CisgICAgICB0ZXN0IC1mICRvdXRwdXRfb2JqZGlyL2ltcGdlbi5leGUgfHwgKGNkICRvdXRwdXRfb2JqZGlyICYmIFwKKyAgICAgIGlmIHRlc3QgIngkSE9TVF9DQyIgIT0gIngiIDsgdGhlbiAkSE9TVF9DQyAtbyBpbXBnZW4gaW1wZ2VuLmMgOyBcCisgICAgICBlbHNlICRDQyAtbyBpbXBnZW4gaW1wZ2VuLmMgOyBmaSl+CisgICAgICAkb3V0cHV0X29iamRpci9pbXBnZW4gJGRpci8kc29yb290ID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYnCisKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0nJERMTFRPT0wgLS1hcz0kQVMgLS1kbGxuYW1lICRzb25hbWUgLS1kZWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYgLS1vdXRwdXQtbGliICRvdXRwdXRfb2JqZGlyLyRuZXdsaWInCisKKyAgICAjIGN5Z3dpbiBhbmQgbWluZ3cgZGxscyBoYXZlIGRpZmZlcmVudCBlbnRyeSBwb2ludHMgYW5kIHNldHMgb2Ygc3ltYm9scworICAgICMgdG8gZXhjbHVkZS4KKyAgICAjIEZJWE1FOiB3aGF0IGFib3V0IHZhbHVlcyBmb3IgTVNWQz8KKyAgICBkbGxfZW50cnk9X19jeWd3aW5fZGxsX2VudHJ5QDEyCisgICAgZGxsX2V4Y2x1ZGVfc3ltYm9scz1EbGxNYWluQDEyLF9jeWd3aW5fZGxsX2VudHJ5QDEyLF9jeWd3aW5fbm9uY3lnd2luX2RsbF9lbnRyeUAxMn4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqKQorICAgICAgIyBtaW5ndyB2YWx1ZXMKKyAgICAgIGRsbF9lbnRyeT1fRGxsTWFpbkNSVFN0YXJ0dXBAMTIKKyAgICAgIGRsbF9leGNsdWRlX3N5bWJvbHM9RGxsTWFpbkAxMixEbGxNYWluQ1JUU3RhcnR1cEAxMixEbGxFbnRyeVBvaW50QDEyfgorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIG1pbmd3IGFuZCBjeWd3aW4gZGlmZmVyLCBhbmQgaXQncyBzaW1wbGVzdCB0byBqdXN0IGV4Y2x1ZGUgdGhlIHVuaW9uCisgICAgIyBvZiB0aGUgdHdvIHN5bWJvbCBzZXRzLgorICAgIGRsbF9leGNsdWRlX3N5bWJvbHM9RGxsTWFpbkAxMixfY3lnd2luX2RsbF9lbnRyeUAxMixfY3lnd2luX25vbmN5Z3dpbl9kbGxfZW50cnlAMTIsRGxsTWFpbkNSVFN0YXJ0dXBAMTIsRGxsRW50cnlQb2ludEAxMgorCisgICAgIyByZWNlbnQgY3lnd2luIGFuZCBtaW5ndyBzeXN0ZW1zIHN1cHBseSBhIHN0dWIgRGxsTWFpbiB3aGljaCB0aGUgdXNlcgorICAgICMgY2FuIG92ZXJyaWRlLCBidXQgb24gb2xkZXIgc3lzdGVtcyB3ZSBoYXZlIHRvIHN1cHBseSBvbmUgKGluIGx0ZGxsLmMpCisgICAgaWYgdGVzdCAieCRsdF9jdl9uZWVkX2RsbG1haW4iID0gInh5ZXMiOyB0aGVuCisgICAgICBsdGRsbF9vYmo9JyRvdXRwdXRfb2JqZGlyLyRzb25hbWUtbHRkbGwuJyIkYWNfb2JqZXh0ICIKKyAgICAgIGx0ZGxsX2NtZHM9J3Rlc3QgLWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1sdGRsbC5jIHx8IHNlZCAtZSAiL14jIFwvXCogbHRkbGxcLmMgc3RhcnRzIGhlcmUgXCpcLy8sL14jIFwvXCogbHRkbGwuYyBlbmRzIGhlcmUgXCpcLy8geyBzL14jIC8vOyBwOyB9IiAtZSBkIDwgJCcnMCA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtbHRkbGwuY34KKwl0ZXN0IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtbHRkbGwuJGFjX29iamV4dCB8fCAoY2QgJG91dHB1dF9vYmpkaXIgJiYgJENDIC1jICRzb25hbWUtbHRkbGwuYyl+JworICAgIGVsc2UKKyAgICAgIGx0ZGxsX29iaj0KKyAgICAgIGx0ZGxsX2NtZHM9CisgICAgZmkKKworICAgICMgRXh0cmFjdCB0aGUgc3ltYm9sIGV4cG9ydCBsaXN0IGZyb20gYW4gYC0tZXhwb3J0LWFsbCcgZGVmIGZpbGUsCisgICAgIyB0aGVuIHJlZ2VuZXJhdGUgdGhlIGRlZiBmaWxlIGZyb20gdGhlIHN5bWJvbCBleHBvcnQgbGlzdCwgc28gdGhhdAorICAgICMgdGhlIGNvbXBpbGVkIGRsbCBvbmx5IGV4cG9ydHMgdGhlIHN5bWJvbCBleHBvcnQgbGlzdC4KKyAgICAjIEJlIGNhcmVmdWwgbm90IHRvIHN0cmlwIHRoZSBEQVRBIHRhZyBsZWZ0IGJlIG5ld2VyIGRsbHRvb2xzLgorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9IiRsdGRsbF9jbWRzIicKKyAgICAgICRETExUT09MIC0tZXhwb3J0LWFsbCAtLWV4Y2x1ZGUtc3ltYm9scyAnJGRsbF9leGNsdWRlX3N5bWJvbHMnIC0tb3V0cHV0LWRlZiAkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiAnJGx0ZGxsX29iaickbGlib2JqcyAkY29udmVuaWVuY2V+CisgICAgICBzZWQgLWUgIjEsL0VYUE9SVFMvZCIgLWUgInMvIEAgW1swLTldXSovLyIgLWUgInMvICo7LiokLy8iIDwgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYgPiAkZXhwb3J0X3N5bWJvbHMnCisKKyAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzLgorICAgICMgSWYgREFUQSB0YWdzIGZyb20gYSByZWNlbnQgZGxsdG9vbCBhcmUgcHJlc2VudCwgaG9ub3VyIHRoZW0hCisgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGBzZWQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCWNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZjsKKyAgICAgIGVsc2UKKwllY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZjsKKwlfbHRfaGludD0xOworCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCB3aGlsZSByZWFkIHN5bWJvbDsgZG8KKwkgc2V0IGR1bW15IFwkc3ltYm9sOworCSBjYXNlIFxbJF0jIGluCisJICAgMikgZWNobyAiICAgXFskXTIgQCBcJF9sdF9oaW50IDsgIiA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZjs7CisJICAgNCkgZWNobyAiICAgXFskXTIgXFskXTMgXFskXTQgOyAiID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmOyBfbHRfaGludD1gZXhwciBcJF9sdF9oaW50IC0gMWA7OworCSAgICopIGVjaG8gIiAgICAgXFskXTIgQCBcJF9sdF9oaW50IFxbJF0zIDsgIiA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZjs7CisJIGVzYWM7CisJIF9sdF9oaW50PWBleHByIDEgKyBcJF9sdF9oaW50YDsKKwlkb25lOworICAgICAgZml+CisgICAgICAnIiRsdGRsbF9jbWRzIicKKyAgICAgICRDQyAtV2wsLS1iYXNlLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1iYXNlICckbHRfY3ZfY2NfZGxsX3N3aXRjaCcgLVdsLC1lLCckZGxsX2VudHJ5JyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICckbHRkbGxfb2JqJyRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34KKyAgICAgICRETExUT09MIC0tYXM9JEFTIC0tZGxsbmFtZSAkc29uYW1lIC0tZXhjbHVkZS1zeW1ib2xzICckZGxsX2V4Y2x1ZGVfc3ltYm9scycgLS1kZWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYgLS1iYXNlLWZpbGUgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1iYXNlIC0tb3V0cHV0LWV4cCAkb3V0cHV0X29iamRpci8kc29uYW1lLWV4cH4KKyAgICAgICRDQyAtV2wsLS1iYXNlLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1iYXNlICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZXhwICckbHRfY3ZfY2NfZGxsX3N3aXRjaCcgLVdsLC1lLCckZGxsX2VudHJ5JyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICckbHRkbGxfb2JqJyRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34KKyAgICAgICRETExUT09MIC0tYXM9JEFTIC0tZGxsbmFtZSAkc29uYW1lIC0tZXhjbHVkZS1zeW1ib2xzICckZGxsX2V4Y2x1ZGVfc3ltYm9scycgLS1kZWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYgLS1iYXNlLWZpbGUgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1iYXNlIC0tb3V0cHV0LWV4cCAkb3V0cHV0X29iamRpci8kc29uYW1lLWV4cCAtLW91dHB1dC1saWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGxsLmF+CisgICAgICAkQ0MgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1leHAgJyRsdF9jdl9jY19kbGxfc3dpdGNoJyAtV2wsLWUsJyRkbGxfZW50cnknIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJyRsdGRsbF9vYmonJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgIDs7CisKKyAgbmV0YnNkKikKKyAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgICAgICB3bGFyYz0KKyAgICBlbHNlCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1ub2RlZmF1bHRsaWJzICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgLW5vZGVmYXVsdGxpYnMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgZmkKKyAgICA7OworCisgIHNvbGFyaXMqIHwgc3lzdjUqKQorICAgIGlmICRMRCAtdiAyPiYxIHwgZWdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBjYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworRU9GCisgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBlZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgZWxzZQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgZmkKKyAgICA7OworCisgIHN1bm9zNCopCisgICAgYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgIHdsYXJjPQorICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgOzsKKworICAqKQorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGVncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICBlbHNlCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICIkbGRfc2hsaWJzIiA9IHllczsgdGhlbgorICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBkbGx0b29sIGRvZXNuJ3QgdW5kZXJzdGFuZCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICAgICA7OworICAgICopCisgICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBlZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKwl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgIGVsc2UKKwl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKK2Vsc2UKKyAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisgICAgICAjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKyAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgZmkKKyAgICA7OworCisgIGFpeDQqIHwgYWl4NSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICBlbHNlCisgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeDUqKQorCWZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgY2FzZSAkbGRfZmxhZyBpbgorCSAgKi1icnRsKikKKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIDs7CisJICBlc2FjCisJZG9uZQorICAgICAgZXNhYworCisgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgIGZpCisKKyAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgIGFyY2hpdmVfY21kcz0nJworICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorCWNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwlpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisJICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzCisJZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKwlmaQorICAgICAgZXNhYworCisgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKyAgICBlbHNlCisgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwllbHNlCisJICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCWZpCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgY2FuIGRvIHN0cmFuZ2UgdGhpbmdzLCBzbyBpdCBpcyBiZXR0ZXIgdG8KKyAgICAjIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOi91c3IvbGliOi9saWInCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRub19lbnRyeV9mbGFnIFwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwlhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgorCWFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS1oJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRub19lbnRyeV9mbGFnIFwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgIGVsc2UKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibm9saWJwYXRoICR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tYmVyb2snCisJIyBUaGlzIGlzIGEgYml0IHN0cmFuZ2UsIGJ1dCBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMKKwkjIGl0J3Mgc2hhcmVkIGxpYnJhcmllcy4KKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JG5vX2VudHJ5X2ZsYWcgXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIicgfiRBUiAtY3JsbyAkb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb2JqZGlyLyRzb25hbWUnCisgICAgICBmaQorICAgIGZpCisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICBhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgorICAgIGxkX3NobGlicz1ubworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKyAgICBsaWJleHQ9bGliCisgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCBzZWQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgL09VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCisgICAgOzsKKworICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSctdW5kZWZpbmVkIHN1cHByZXNzJworICAgICAgOzsKKyAgICAqKSAjIERhcndpbiAxLjMgb24KKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSctZmxhdF9uYW1lc3BhY2UgLXVuZGVmaW5lZCBzdXBwcmVzcycKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgRklYTUU6IFJlbHlpbmcgb24gcG9zaXh5ICQoKSB3aWxsIGNhdXNlIHByb2JsZW1zIGZvcgorICAgICMgICAgICAgIGNyb3NzLWNvbXBpbGF0aW9uLCBidXQgdW5mb3J0dW5hdGVseSB0aGUgZWNobyB0ZXN0cyBkbyBub3QKKyAgICAjICAgICAgICB5ZXQgZGV0ZWN0IHpzaCBlY2hvJ3MgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuICBBbHNvIHpzaCBtYW5nbGVzCisgICAgIwkgICAgIGAiJyBxdW90ZXMgaWYgd2UgcHV0IHRoZW0gaW4gaGVyZS4uLiBzbyBkb24ndCEKKyAgICBhcmNoaXZlX2NtZHM9JyRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2JqcyAmJiAkQ0MgJCh0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC1idW5kbGUgfHwgZWNobyAtZHluYW1pY2xpYikgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzJGxpbmtlcl9mbGFncyAkKHRlc3QgLiRtb2R1bGUgIT0gLnllcyAmJiBlY2hvIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZyknCisgICAgIyBXZSBuZWVkIHRvIGFkZCAnXycgdG8gdGhlIHN5bWJvbHMgaW4gJGV4cG9ydF9zeW1ib2xzIGZpcnN0CisgICAgI2FyY2hpdmVfZXhwc3ltX2NtZHM9IiRhcmNoaXZlX2NtZHMiJyAmJiBzdHJpcCAtcyAkZXhwb3J0X3N5bWJvbHMnCisgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLWFsbF9sb2FkICRjb252ZW5pZW5jZScKKyAgICA7OworCisgIGZyZWVic2QxKikKKyAgICBsZF9zaGxpYnM9bm8KKyAgICA7OworCisgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICMgZXh0cmEgc3BhY2UpLgorICBmcmVlYnNkMi4yKikKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgOzsKKworICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgIGZyZWVic2QyKikKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIDs7CisKKyAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICBmcmVlYnNkKikKKyAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIDs7CisKKyAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGhwdXg5KikgYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicgOzsKKyAgICAqKSBhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnIDs7CisgICAgZXNhYworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICBoYXJkY29kZV9taW51c19MPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworICAgIDs7CisKKyAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgZWxzZQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgZmkKKyAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgIDs7CisKKyAgbmV0YnNkKikKKyAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgZWxzZQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKyAgICBmaQorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIDs7CisKKyAgbmV3c29zNikKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICA7OworCisgIG9wZW5ic2QqKQorICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisgICAgZWxzZQorICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBvcGVuYnNkW1swMV1dLiogfCBvcGVuYnNkMi5bWzAtN11dIHwgb3BlbmJzZDIuW1swLTddXS4qKQorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisKKyAgb3MyKikKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgIGFyY2hpdmVfY21kcz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICA7OworCisgIG9zZjMqKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgIGVsc2UKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgZmkKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgOzsKKworICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGVsc2UKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiLWV4cG9ydGVkX3N5bWJvbCAiID4+ICRsaWIuZXhwOyBlY2hvICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorICAgICAgJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKKworICAgICAgI0JvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKyAgICBmaQorICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgIDs7CisKKyAgc2NvMy4ydjUqKQorICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIGhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmV4cG9ydCcKKyAgICA7OworCisgIHNvbGFyaXMqKQorICAgICMgZ2NjIC0tdmVyc2lvbiA8IDMuMCB3aXRob3V0IGJpbnV0aWxzIGNhbm5vdCBjcmVhdGUgc2VsZiBjb250YWluZWQKKyAgICAjIHNoYXJlZCBsaWJyYXJpZXMgcmVsaWFibHksIHJlcXVpcmluZyBsaWJnY2MuYSB0byByZXNvbHZlIHNvbWUgb2YKKyAgICAjIHRoZSBvYmplY3Qgc3ltYm9scyBnZW5lcmF0ZWQgaW4gc29tZSBjYXNlcy4gIExpYnJhcmllcyB0aGF0IHVzZQorICAgICMgYXNzZXJ0IG5lZWQgbGliZ2NjLmEgdG8gcmVzb2x2ZSBfX2VwcmludGYsIGZvciBleGFtcGxlLiAgTGlua2luZworICAgICMgYSBjb3B5IG9mIGxpYmdjYy5hIGludG8gZXZlcnkgc2hhcmVkIGxpYnJhcnkgdG8gZ3VhcmFudGVlIHJlc29sdmluZworICAgICMgc3VjaCBzeW1ib2xzIGNhdXNlcyBvdGhlciBwcm9ibGVtczogIEFjY29yZGluZyB0byBUaW0gVmFuIEhvbGRlcgorICAgICMgPHRpbS52YW4uaG9sZGVyQHBhbmRvcmEuYmU+LCBDKysgbGlicmFyaWVzIGVuZCB1cCB3aXRoIGEgc2VwYXJhdGUKKyAgICAjICh0byB0aGUgYXBwbGljYXRpb24pIGV4Y2VwdGlvbiBzdGFjayBmb3Igb25lIHRoaW5nLgorICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgY2FzZSBgJENDIC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAgaW4KKyAgICAgIFtbMTJdXS4qKQorCWNhdCA8PEVPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiBHQ0MgZWFybGllciB0aGFuIHZlcnNpb24gMy4wIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzZWxmIGNvbnRhaW5lZCBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcywgd2l0aG91dAorKioqIGludHJvZHVjaW5nIGEgZGVwZW5kZW5jeSBvbiBsaWJnY2MuYS4gIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcKKyoqKiAtbm8tdW5kZWZpbmVkIHN1cHBvcnQsIHdoaWNoIHdpbGwgYXQgbGVhc3QgYWxsb3cgeW91IHRvIGJ1aWxkIHNoYXJlZAorKioqIGxpYnJhcmllcy4gIEhvd2V2ZXIsIHlvdSBtYXkgZmluZCB0aGF0IHdoZW4geW91IGxpbmsgc3VjaCBsaWJyYXJpZXMKKyoqKiBpbnRvIGFuIGFwcGxpY2F0aW9uIHdpdGhvdXQgdXNpbmcgR0NDLCB5b3UgaGF2ZSB0byBtYW51YWxseSBhZGQKKyoqKiBcYGdjYyAtLXByaW50LWxpYmdjYy1maWxlLW5hbWVcYCB0byB0aGUgbGluayBjb21tYW5kLiAgV2UgdXJnZSB5b3UgdG8KKyoqKiB1cGdyYWRlIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZiBHQ0MuICBBbm90aGVyIG9wdGlvbiBpcyB0byByZWJ1aWxkIHlvdXIKKyoqKiBjdXJyZW50IEdDQyB0byB1c2UgdGhlIEdOVSBsaW5rZXIgZnJvbSBHTlUgYmludXRpbHMgMi45LjEgb3IgbmV3ZXIuCisKK0VPRgorICAgICAgICBub191bmRlZmluZWRfZmxhZz0KKwk7OworICAgICAgZXNhYworICAgIGZpCisgICAgIyAkQ0MgLXNoYXJlZCB3aXRob3V0IEdOVSBsZCB3aWxsIG5vdCBjcmVhdGUgYSBsaWJyYXJ5IGZyb20gQysrCisgICAgIyBvYmplY3QgZmlsZXMgYW5kIGEgc3RhdGljIGxpYnN0ZGMrKywgYmV0dGVyIGF2b2lkIGl0IGJ5IG5vdworICAgIGFyY2hpdmVfY21kcz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisgICAgKikgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JyA7OworICAgIGVzYWMKKyAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgIDs7CisKKyAgc3Vub3M0KikKKyAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisgICAgICAjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisgICAgICAjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICBlbHNlCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgZmkKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIDs7CisKKyAgc3lzdjQpCisgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICAgIHNuaSkKKyAgICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisgICAgICAgIDs7CisgICAgICBzaWVtZW5zKQorICAgICAgICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKyAgICAgICAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorICAgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgIHJlbG9hZF9jbWRzPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgIDs7CisgICAgICBtb3Rvcm9sYSkKKyAgICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisgICAgICAgIDs7CisgICAgZXNhYworICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgOzsKKworICBzeXN2NC4zKikKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSctQmV4cG9ydCcKKyAgICA7OworCisgIHN5c3Y1KikKKyAgICBub191bmRlZmluZWRfZmxhZz0nIC16IHRleHQnCisgICAgIyAkQ0MgLXNoYXJlZCB3aXRob3V0IEdOVSBsZCB3aWxsIG5vdCBjcmVhdGUgYSBsaWJyYXJ5IGZyb20gQysrCisgICAgIyBvYmplY3QgZmlsZXMgYW5kIGEgc3RhdGljIGxpYnN0ZGMrKywgYmV0dGVyIGF2b2lkIGl0IGJ5IG5vdworICAgIGFyY2hpdmVfY21kcz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICA7OworCisgIHV0czQqKQorICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgOzsKKworICBkZ3V4KikKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIDs7CisKKyAgc3lzdjQqTVAqKQorICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIGhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworICAgICAgbGRfc2hsaWJzPXllcworICAgIGZpCisgICAgOzsKKworICBzeXN2NC4ydXcyKikKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgIGhhcmRjb2RlX21pbnVzX0w9bm8KKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICA7OworCisgIHN5c3Y1dXc3KiB8IHVuaXh3YXJlNyopCisgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXogJHt3bH10ZXh0JworICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgIGVsc2UKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgIGZpCisgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICA7OworCisgICopCisgICAgbGRfc2hsaWJzPW5vCisgICAgOzsKKyAgZXNhYworZmkKK0FDX01TR19SRVNVTFQoWyRsZF9zaGxpYnNdKQordGVzdCAiJGxkX3NobGlicyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgorQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKK2hhcmRjb2RlX2FjdGlvbj0KK2lmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8fCBcCisgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIGhhcmRjb2RlX2FjdGlvbj1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCitmaQorQUNfTVNHX1JFU1VMVChbJGhhcmRjb2RlX2FjdGlvbl0pCisKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8IGdyZXAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKKworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKKyMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKK0FDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworICA7OworCithaXg0KiB8IGFpeDUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJGxpYm5hbWUuc28nCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bWzAxXV0gfCBhaXg0LltbMDFdXS4qKQorCWlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgICBlY2hvICcgeWVzICcKKwkgICAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwkgIDoKKwllbHNlCisJICBjYW5fYnVpbGRfc2hhcmVkPW5vCisJZmkKKwk7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuCisgICAgIyBub3QgaGFyZGNvZGUgY29ycmVjdCBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4KKyAgICAjIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8gY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuCisgICAgIyBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3IgJGxpYm5hbWUuc28nCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCithbWlnYW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgIihjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hKSI7IChjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hKSB8fCBleGl0IDE7IGRvbmUnCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uc28nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaTQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICRsaWJuYW1lLnNvJworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0tcmR5bmFtaWMKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgY2FzZSAkR0NDLCRob3N0X29zIGluCisgIHllcyxjeWd3aW4qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgc2VkIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9LmRsbCcKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdkbHBhdGg9YGJhc2ggMj4mMSAtYyAnXCcnLiAkZGlyLyR7ZmlsZX1pO2VjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAubGlicy8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWBiYXNoIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJHJtIFwkZGxwYXRoJworICAgIDs7CisgIHllcyxtaW5ndyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8IHNlZCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fS5kbGwnCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgc2VkIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLzsvIC9nIiAtZSAicyw9LywvLGciYAorICAgIDs7CisgIHllcyxwdzMyKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCBzZWQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9LmRsbCcKKyAgICA7OworICAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCBzZWQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0uZGxsICRsaWJuYW1lLmxpYicKKyAgICA7OworICBlc2FjCisgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICAjIEZJWE1FOiBSZWx5aW5nIG9uIHBvc2l4eSAkKCkgd2lsbCBjYXVzZSBwcm9ibGVtcyBmb3IKKyAgIyAgICAgICAgY3Jvc3MtY29tcGlsYXRpb24sIGJ1dCB1bmZvcnR1bmF0ZWx5IHRoZSBlY2hvIHRlc3RzIGRvIG5vdAorICAjICAgICAgICB5ZXQgZGV0ZWN0IHpzaCBlY2hvJ3MgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0uJCh0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIHNvIHx8IGVjaG8gZHlsaWIpICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0uJCh0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIHNvIHx8IGVjaG8gZHlsaWIpICR7bGlibmFtZX0uJCh0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIHNvIHx8IGVjaG8gZHlsaWIpJworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfS4kKHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gc28gfHwgZWNobyBkeWxpYiknCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2ZyZWVic2QqKQorICBvYmpmb3JtYXQ9YHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0ICYmIC91c3IvYmluL29iamZvcm1hdCB8fCBlY2hvIGFvdXRgCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28gJGxpYm5hbWUuc28nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAkbGlibmFtZS5zbyR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIqKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICAqKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHttYWpvcn0gJHtsaWJuYW1lfS5zbycKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbCR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc2wkbWFqb3IgJGxpYm5hbWUuc2wnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbCRtYWpvcicKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopICAgICAgICAgIHZlcnNpb25fdHlwZT1pcml4IDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvICRsaWJuYW1lLnNvJworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgIikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgtZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3IgJGxpYm5hbWUuc28nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nIChtdWx0aWxpYiBMaW51eCB4ODZfNjQgaGFjaykuCisgIGxpYnN1ZmY9CisgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgeDg2XzY0KnxzMzkweCopCisgICAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqNjQtYml0KikKKyAgICAgICAgbGlic3VmZj02NAorICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgcm0gLXJmIGNvbmZ0ZXN0KgorICAgIDs7CisgICopCisgICAgOzsKKyAgZXNhYworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiR7bGlic3VmZn0gL3Vzci9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIke2xpYnN1ZmZ9IC91c3IvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9LnNvJHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvICR7bGlibmFtZX0uc28nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICRsaWJuYW1lLnNvJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgOzsKKyAgICAqKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGZpCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0uc28kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwgJGxpYm5hbWUuYScKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICRsaWJuYW1lLnNvJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitzY28zLjJ2NSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvciAkbGlibmFtZS5zbycKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICRsaWJuYW1lLnNvJworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfS5zbyR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICRsaWJuYW1lLnNvJworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3IgJGxpYm5hbWUuc28nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICRsaWJuYW1lLnNvJworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuc28uJHZlcnN1ZmZpeCAkbGlibmFtZS5zby4kbWFqb3IgJGxpYm5hbWUuc28nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lLnNvLiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyMgUmVwb3J0IHRoZSBmaW5hbCBjb25zZXF1ZW5jZXMuCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCitBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKK3Rlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KK2Nhc2UgIiRob3N0X29zIiBpbgorYWl4MyopCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgZmkKKyAgOzsKKworYWl4NCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICBmaQorICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KK3Rlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluazsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitBQ19MSUJUT09MX0RMT1BFTl9TRUxGCisKK2lmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRhcmNoaXZlX2NtZHMgaW4KKyAgKid+JyopCisgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgIDs7CisgICckQ0MgJyopCisgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSkKKyAgICBBQ19DQUNIRV9WQUwoW2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjXSwKKyAgICBbJHJtIGNvbmZ0ZXN0KgorICAgIGVjaG8gJ3N0YXRpYyBpbnQgZHVtbXk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgICBzb25hbWU9Y29uZnRlc3QKKyAgICAgIGxpYj1jb25mdGVzdAorICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisgICAgICBkZXBsaWJzPQorICAgICAgd2w9JGx0X2N2X3Byb2dfY2Nfd2wKKyAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CisgICAgICBsaW5rZXJfZmxhZ3M9LXYKKyAgICAgIHZlcnN0cmluZz0KKyAgICAgIG91dHB1dF9vYmpkaXI9LgorICAgICAgbGlibmFtZT1jb25mdGVzdAorICAgICAgc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorICAgICAgaWYgQUNfVFJZX0VWQUwoYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpCisgICAgICB0aGVuCisJbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgIGVsc2UKKwlsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKyAgICAgIGZpCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0kc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworICAgIGVsc2UKKyAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgIGZpCisgICAgJHJtIGNvbmZ0ZXN0Kl0pCisgICAgQUNfTVNHX1JFU1VMVChbJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjXSkKKyAgICA7OworICBlc2FjCitmaQorbmVlZF9sYz0ke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjLXllc30KKworIyBUaGUgc2Vjb25kIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKKyMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCisjIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKKyMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgoraWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KKyAgOgorZWxzZQorICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCisgICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQorICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCisgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKK2ZpCisKK2lmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCisgIHRyYXAgIiRybSBcIiR7b2ZpbGV9VFwiOyBleGl0IDEiIDEgMiAxNQorICAkcm0gLWYgIiR7b2ZpbGV9VCIKKworICBlY2hvIGNyZWF0aW5nICRvZmlsZQorCisgICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKKyAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCisgICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KKyAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIFNFRCBcCisgICAgQVIgQVJfRkxBR1MgQ0MgTEQgTE5fUyBOTSBTSEVMTCBcCisgICAgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgd2wgXAorICAgIHBpY19mbGFnIGxpbmtfc3RhdGljX2ZsYWcgbm9fYnVpbHRpbl9mbGFnIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCisgICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIGxpYm5hbWVfc3BlYyBcCisgICAgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIFwKKyAgICBSQU5MSUIgb2xkX2FyY2hpdmVfY21kcyBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIG9sZF9wb3N0aW5zdGFsbF9jbWRzIFwKKyAgICBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIGFyY2hpdmVfY21kcyBhcmNoaXZlX2V4cHN5bV9jbWRzIHBvc3RpbnN0YWxsX2NtZHMgXAorICAgIHBvc3R1bmluc3RhbGxfY21kcyBleHRyYWN0X2V4cHN5bXNfY21kcyBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyBcCisgICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIGFsbG93X3VuZGVmaW5lZF9mbGFnIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyAgICBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBnbG9iYWxfc3ltYm9sX3BpcGUgZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgICAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yICBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKKyAgICBjb21waWxlcl9jX28gY29tcGlsZXJfb19sbyBuZWVkX2xvY2tzIGV4Y2x1ZGVfZXhwc3ltcyBpbmNsdWRlX2V4cHN5bXM7IGRvCisKKyAgICBjYXNlICR2YXIgaW4KKyAgICByZWxvYWRfY21kcyB8IG9sZF9hcmNoaXZlX2NtZHMgfCBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIHwgXAorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzIHwgYXJjaGl2ZV9jbWRzIHwgYXJjaGl2ZV9leHBzeW1fY21kcyB8IFwKKyAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIHwgXAorICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCisgICAgZmluaXNoX2NtZHMgfCBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKKyAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KKyAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIGNhdCA8PF9fRU9GX18gPiAiJHtvZmlsZX1UIgorIyEgJFNIRUxMCisKKyMgYCRlY2hvICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QKQorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgQSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iJHtTRUR9IC1lIHMvXlgvLyIKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KK2lmIHRlc3QgIlhcJHtDRFBBVEgrc2V0fSIgPSBYc2V0OyB0aGVuIENEUEFUSD06OyBleHBvcnQgQ0RQQVRIOyBmaQorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSRsdF9TSEVMTAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRuZWVkX2xjCisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAorCisjIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KK2VjaG89JGx0X2VjaG8KKworIyBUaGUgYXJjaGl2ZXIuCitBUj0kbHRfQVIKK0FSX0ZMQUdTPSRsdF9BUl9GTEFHUworCisjIFRoZSBkZWZhdWx0IEMgY29tcGlsZXIuCitDQz0kbHRfQ0MKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQworCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTEQKKworIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KK05NPSRsdF9OTQorCisjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCitTVFJJUD0kU1RSSVAKKworIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgorTUFHSUNfQ01EPSRNQUdJQ19DTUQKKworIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSIkRExMVE9PTCIKKworIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KK09CSkRVTVA9IiRPQkpEVU1QIgorCisjIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCitBUz0iJEFTIgorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF93bAorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0iJGFjX29iamV4dCIKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgorZXhlZXh0PSIkZXhlZXh0IgorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9waWNfZmxhZworcGljX21vZGU9JHBpY19tb2RlCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9jb21waWxlcl9jX28KKworIyBDYW4gd2Ugd3JpdGUgZGlyZWN0bHkgdG8gYSAubG8gPworY29tcGlsZXJfb19sbz0kbHRfY29tcGlsZXJfb19sbworCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uID8KK25lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKworIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbGlua19zdGF0aWNfZmxhZworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X25vX2J1aWx0aW5fZmxhZworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KK3RocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcworYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcworcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcworcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCitvbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgorc3RyaXBsaWI9JGx0X3N0cmlwbGliCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCitmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0wKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bworIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSIkZml4X3NyY2ZpbGVfcGF0aCIKKworIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXMKKworIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCitpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX19FT0ZfXworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XEVPRiA+PiAiJHtvZmlsZX1UIgorCisjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgoraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorRU9GCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICBjYXQgPDwnRU9GJyA+PiAiJHtvZmlsZX1UIgorICAgICAgIyBUaGlzIGlzIGEgc291cmNlIHByb2dyYW0gdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSBkbGxzIG9uIFdpbmRvd3MKKyAgICAgICMgRG9uJ3QgcmVtb3ZlIG5vciBtb2RpZnkgdGhlIHN0YXJ0aW5nIGFuZCBjbG9zaW5nIGNvbW1lbnRzCisjIC8qIGx0ZGxsLmMgc3RhcnRzIGhlcmUgKi8KKyMgI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjICN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICNpbmNsdWRlIDxzdGRpby5oPgorIworIyAjaWZuZGVmIF9fQ1lHV0lOX18KKyMgIyAgaWZkZWYgX19DWUdXSU4zMl9fCisjICMgICAgZGVmaW5lIF9fQ1lHV0lOX18gX19DWUdXSU4zMl9fCisjICMgIGVuZGlmCisjICNlbmRpZgorIworIyAjaWZkZWYgX19jcGx1c3BsdXMKKyMgZXh0ZXJuICJDIiB7CisjICNlbmRpZgorIyBCT09MIEFQSUVOVFJZIERsbE1haW4gKEhJTlNUQU5DRSBoSW5zdCwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpOworIyAjaWZkZWYgX19jcGx1c3BsdXMKKyMgfQorIyAjZW5kaWYKKyMKKyMgI2lmZGVmIF9fQ1lHV0lOX18KKyMgI2luY2x1ZGUgPGN5Z3dpbi9jeWd3aW5fZGxsLmg+CisjIERFQ0xBUkVfQ1lHV0lOX0RMTCggRGxsTWFpbiApOworIyAjZW5kaWYKKyMgSElOU1RBTkNFIF9faERsbEluc3RhbmNlX2Jhc2U7CisjCisjIEJPT0wgQVBJRU5UUlkKKyMgRGxsTWFpbiAoSElOU1RBTkNFIGhJbnN0LCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkKKyMgeworIyAgIF9faERsbEluc3RhbmNlX2Jhc2UgPSBoSW5zdDsKKyMgICByZXR1cm4gVFJVRTsKKyMgfQorIyAvKiBsdGRsbC5jIGVuZHMgaGVyZSAqLworCSMgVGhpcyBpcyBhIHNvdXJjZSBwcm9ncmFtIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgaW1wb3J0IGxpYnJhcmllcworCSMgb24gV2luZG93cyBmb3IgZGxscyB3aGljaCBsYWNrIHRoZW0uIERvbid0IHJlbW92ZSBub3IgbW9kaWZ5IHRoZQorCSMgc3RhcnRpbmcgYW5kIGNsb3NpbmcgY29tbWVudHMKKyMgLyogaW1wZ2VuLmMgc3RhcnRzIGhlcmUgKi8KKyMgLyogICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBsaWJ0b29sLgorIworIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjICAqLworIworIyAjaW5jbHVkZSA8c3RkaW8uaD4JCS8qIGZvciBwcmludGYoKSAqLworIyAjaW5jbHVkZSA8dW5pc3RkLmg+CQkvKiBmb3Igb3BlbigpLCBsc2VlaygpLCByZWFkKCkgKi8KKyMgI2luY2x1ZGUgPGZjbnRsLmg+CQkvKiBmb3IgT19SRE9OTFksIE9fQklOQVJZICovCisjICNpbmNsdWRlIDxzdHJpbmcuaD4JCS8qIGZvciBzdHJkdXAoKSAqLworIworIyAvKiBPX0JJTkFSWSBpc24ndCByZXF1aXJlZCAob3IgZXZlbiBkZWZpbmVkIHNvbWV0aW1lcykgdW5kZXIgVW5peCAqLworIyAjaWZuZGVmIE9fQklOQVJZCisjICNkZWZpbmUgT19CSU5BUlkgMAorIyAjZW5kaWYKKyMKKyMgc3RhdGljIHVuc2lnbmVkIGludAorIyBwZV9nZXQxNiAoZmQsIG9mZnNldCkKKyMgICAgICBpbnQgZmQ7CisjICAgICAgaW50IG9mZnNldDsKKyMgeworIyAgIHVuc2lnbmVkIGNoYXIgYlsyXTsKKyMgICBsc2VlayAoZmQsIG9mZnNldCwgU0VFS19TRVQpOworIyAgIHJlYWQgKGZkLCBiLCAyKTsKKyMgICByZXR1cm4gYlswXSArIChiWzFdPDw4KTsKKyMgfQorIworIyBzdGF0aWMgdW5zaWduZWQgaW50CisjIHBlX2dldDMyIChmZCwgb2Zmc2V0KQorIyAgICAgaW50IGZkOworIyAgICAgaW50IG9mZnNldDsKKyMgeworIyAgIHVuc2lnbmVkIGNoYXIgYls0XTsKKyMgICBsc2VlayAoZmQsIG9mZnNldCwgU0VFS19TRVQpOworIyAgIHJlYWQgKGZkLCBiLCA0KTsKKyMgICByZXR1cm4gYlswXSArIChiWzFdPDw4KSArIChiWzJdPDwxNikgKyAoYlszXTw8MjQpOworIyB9CisjCisjIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyMgcGVfYXMzMiAocHRyKQorIyAgICAgIHZvaWQgKnB0cjsKKyMgeworIyAgIHVuc2lnbmVkIGNoYXIgKmIgPSBwdHI7CisjICAgcmV0dXJuIGJbMF0gKyAoYlsxXTw8OCkgKyAoYlsyXTw8MTYpICsgKGJbM108PDI0KTsKKyMgfQorIworIyBpbnQKKyMgbWFpbiAoYXJnYywgYXJndikKKyMgICAgIGludCBhcmdjOworIyAgICAgY2hhciAqYXJndltdOworIyB7CisjICAgICBpbnQgZGxsOworIyAgICAgdW5zaWduZWQgbG9uZyBwZV9oZWFkZXJfb2Zmc2V0LCBvcHRoZHJfb2ZzLCBudW1fZW50cmllcywgaTsKKyMgICAgIHVuc2lnbmVkIGxvbmcgZXhwb3J0X3J2YSwgZXhwb3J0X3NpemUsIG5zZWN0aW9ucywgc2VjcHRyLCBleHBwdHI7CisjICAgICB1bnNpZ25lZCBsb25nIG5hbWVfcnZhcywgbmV4cDsKKyMgICAgIHVuc2lnbmVkIGNoYXIgKmV4cGRhdGEsICplcnZhOworIyAgICAgY2hhciAqZmlsZW5hbWUsICpkbGxfbmFtZTsKKyMKKyMgICAgIGZpbGVuYW1lID0gYXJndlsxXTsKKyMKKyMgICAgIGRsbCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZfE9fQklOQVJZKTsKKyMgICAgIGlmIChkbGwgPCAxKQorIyAJcmV0dXJuIDE7CisjCisjICAgICBkbGxfbmFtZSA9IGZpbGVuYW1lOworIworIyAgICAgZm9yIChpPTA7IGZpbGVuYW1lW2ldOyBpKyspCisjIAlpZiAoZmlsZW5hbWVbaV0gPT0gJy8nIHx8IGZpbGVuYW1lW2ldID09ICdcXCcgIHx8IGZpbGVuYW1lW2ldID09ICc6JykKKyMgCSAgICBkbGxfbmFtZSA9IGZpbGVuYW1lICsgaSArMTsKKyMKKyMgICAgIHBlX2hlYWRlcl9vZmZzZXQgPSBwZV9nZXQzMiAoZGxsLCAweDNjKTsKKyMgICAgIG9wdGhkcl9vZnMgPSBwZV9oZWFkZXJfb2Zmc2V0ICsgNCArIDIwOworIyAgICAgbnVtX2VudHJpZXMgPSBwZV9nZXQzMiAoZGxsLCBvcHRoZHJfb2ZzICsgOTIpOworIworIyAgICAgaWYgKG51bV9lbnRyaWVzIDwgMSkgLyogbm8gZXhwb3J0cyAqLworIyAJcmV0dXJuIDE7CisjCisjICAgICBleHBvcnRfcnZhID0gcGVfZ2V0MzIgKGRsbCwgb3B0aGRyX29mcyArIDk2KTsKKyMgICAgIGV4cG9ydF9zaXplID0gcGVfZ2V0MzIgKGRsbCwgb3B0aGRyX29mcyArIDEwMCk7CisjICAgICBuc2VjdGlvbnMgPSBwZV9nZXQxNiAoZGxsLCBwZV9oZWFkZXJfb2Zmc2V0ICsgNCArMik7CisjICAgICBzZWNwdHIgPSAocGVfaGVhZGVyX29mZnNldCArIDQgKyAyMCArCisjIAkgICAgICBwZV9nZXQxNiAoZGxsLCBwZV9oZWFkZXJfb2Zmc2V0ICsgNCArIDE2KSk7CisjCisjICAgICBleHBwdHIgPSAwOworIyAgICAgZm9yIChpID0gMDsgaSA8IG5zZWN0aW9uczsgaSsrKQorIyAgICAgeworIyAJY2hhciBzbmFtZVs4XTsKKyMgCXVuc2lnbmVkIGxvbmcgc2VjcHRyMSA9IHNlY3B0ciArIDQwICogaTsKKyMgCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBwZV9nZXQzMiAoZGxsLCBzZWNwdHIxICsgMTIpOworIyAJdW5zaWduZWQgbG9uZyB2c2l6ZSA9IHBlX2dldDMyIChkbGwsIHNlY3B0cjEgKyAxNik7CisjIAl1bnNpZ25lZCBsb25nIGZwdHIgPSBwZV9nZXQzMiAoZGxsLCBzZWNwdHIxICsgMjApOworIyAJbHNlZWsoZGxsLCBzZWNwdHIxLCBTRUVLX1NFVCk7CisjIAlyZWFkKGRsbCwgc25hbWUsIDgpOworIyAJaWYgKHZhZGRyIDw9IGV4cG9ydF9ydmEgJiYgdmFkZHIrdnNpemUgPiBleHBvcnRfcnZhKQorIyAJeworIyAJICAgIGV4cHB0ciA9IGZwdHIgKyAoZXhwb3J0X3J2YSAtIHZhZGRyKTsKKyMgCSAgICBpZiAoZXhwb3J0X3J2YSArIGV4cG9ydF9zaXplID4gdmFkZHIgKyB2c2l6ZSkKKyMgCQlleHBvcnRfc2l6ZSA9IHZzaXplIC0gKGV4cG9ydF9ydmEgLSB2YWRkcik7CisjIAkgICAgYnJlYWs7CisjIAl9CisjICAgICB9CisjCisjICAgICBleHBkYXRhID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYyhleHBvcnRfc2l6ZSk7CisjICAgICBsc2VlayAoZGxsLCBleHBwdHIsIFNFRUtfU0VUKTsKKyMgICAgIHJlYWQgKGRsbCwgZXhwZGF0YSwgZXhwb3J0X3NpemUpOworIyAgICAgZXJ2YSA9IGV4cGRhdGEgLSBleHBvcnRfcnZhOworIworIyAgICAgbmV4cCA9IHBlX2FzMzIgKGV4cGRhdGErMjQpOworIyAgICAgbmFtZV9ydmFzID0gcGVfYXMzMiAoZXhwZGF0YSszMik7CisjCisjICAgICBwcmludGYgKCJFWFBPUlRTXG4iKTsKKyMgICAgIGZvciAoaSA9IDA7IGk8bmV4cDsgaSsrKQorIyAgICAgeworIyAJdW5zaWduZWQgbG9uZyBuYW1lX3J2YSA9IHBlX2FzMzIgKGVydmErbmFtZV9ydmFzK2kqNCk7CisjIAlwcmludGYgKCJcdCVzIEAgJWxkIDtcbiIsIGVydmErbmFtZV9ydmEsIDErIGkpOworIyAgICAgfQorIworIyAgICAgcmV0dXJuIDA7CisjIH0KKyMgLyogaW1wZ2VuLmMgZW5kcyBoZXJlICovCisKK0VPRgorICAgIDs7CisgIGVzYWMKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiR7b2ZpbGV9VCIgfHwgKHJtIC1mICIke29maWxlfVQiOyBleGl0IDEpCisKKyAgbXYgLWYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIgfHwgXAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJHtvZmlsZX1UIiAiJG9maWxlIiAmJiBybSAtZiAiJHtvZmlsZX1UIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKK2ZpCisKK10pIyBfTFRfQUNfTFRDT05GSUdfSEFDSworCisjIEFDX0xJQlRPT0xfRExPUEVOIC0gZW5hYmxlIGNoZWNrcyBmb3IgZGxvcGVuIHN1cHBvcnQKK0FDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sIFtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pXSkKKworIyBBQ19MSUJUT09MX1dJTjMyX0RMTCAtIGRlY2xhcmUgcGFja2FnZSBzdXBwb3J0IGZvciBidWlsZGluZyB3aW4zMiBkbGwncworQUNfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwgW0FDX0JFRk9SRShbJDBdLCBbQUNfTElCVE9PTF9TRVRVUF0pXSkKKworIyBBQ19FTkFCTEVfU0hBUkVEIC0gaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZworIyBVc2FnZTogQUNfRU5BQkxFX1NIQVJFRFsoREVGQVVMVCldCisjICAgV2hlcmUgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvCisjICAgYHllcycuCitBQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCitbZGVmaW5lKFtBQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKK0FDX0FSR19FTkFCTEUoc2hhcmVkLAorY2hhbmdlcXVvdGUoPDwsID4+KWRubAorPDwgIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10gIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9Pj5BQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFRdLAorY2hhbmdlcXVvdGUoWywgXSlkbmwKK1twPSR7UEFDS0FHRS1kZWZhdWx0fQorY2FzZSAkZW5hYmxldmFsIGluCit5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CitubykgZW5hYmxlX3NoYXJlZD1ubyA7OworKikKKyAgZW5hYmxlX3NoYXJlZD1ubworICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfTosIgorICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisgICAgaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKyAgICAgIGVuYWJsZV9zaGFyZWQ9eWVzCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgOzsKK2VzYWNdLAorZW5hYmxlX3NoYXJlZD1BQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFQpZG5sCitdKQorCisjIEFDX0RJU0FCTEVfU0hBUkVEIC0gc2V0IHRoZSBkZWZhdWx0IHNoYXJlZCBmbGFnIHRvIC0tZGlzYWJsZS1zaGFyZWQKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NIQVJFRF0sCitbQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfU0VUVVBdKWRubAorQUNfRU5BQkxFX1NIQVJFRChubyldKQorCisjIEFDX0VOQUJMRV9TVEFUSUMgLSBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnCisjIFVzYWdlOiBBQ19FTkFCTEVfU1RBVElDWyhERUZBVUxUKV0KKyMgICBXaGVyZSBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8KKyMgICBgeWVzJy4KK0FDX0RFRlVOKFtBQ19FTkFCTEVfU1RBVElDXSwKK1tkZWZpbmUoW0FDX0VOQUJMRV9TVEFUSUNfREVGQVVMVF0sIGlmZWxzZSgkMSwgbm8sIG5vLCB5ZXMpKWRubAorQUNfQVJHX0VOQUJMRShzdGF0aWMsCitjaGFuZ2VxdW90ZSg8PCwgPj4pZG5sCis8PCAgLS1lbmFibGUtc3RhdGljWz1QS0dTXSAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD0+PkFDX0VOQUJMRV9TVEFUSUNfREVGQVVMVF0sCitjaGFuZ2VxdW90ZShbLCBdKWRubAorW3A9JHtQQUNLQUdFLWRlZmF1bHR9CitjYXNlICRlbmFibGV2YWwgaW4KK3llcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKK25vKSBlbmFibGVfc3RhdGljPW5vIDs7CisqKQorICBlbmFibGVfc3RhdGljPW5vCisgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiwiCisgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKyAgICBpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorICAgICAgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorICA7OworZXNhY10sCitlbmFibGVfc3RhdGljPUFDX0VOQUJMRV9TVEFUSUNfREVGQVVMVClkbmwKK10pCisKKyMgQUNfRElTQUJMRV9TVEFUSUMgLSBzZXQgdGhlIGRlZmF1bHQgc3RhdGljIGZsYWcgdG8gLS1kaXNhYmxlLXN0YXRpYworQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKK1tBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCitBQ19FTkFCTEVfU1RBVElDKG5vKV0pCisKKworIyBBQ19FTkFCTEVfRkFTVF9JTlNUQUxMIC0gaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZworIyBVc2FnZTogQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTFsoREVGQVVMVCldCisjICAgV2hlcmUgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvCisjICAgYHllcycuCitBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbZGVmaW5lKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKK0FDX0FSR19FTkFCTEUoZmFzdC1pbnN0YWxsLAorY2hhbmdlcXVvdGUoPDwsID4+KWRubAorPDwgIC0tZW5hYmxlLWZhc3QtaW5zdGFsbFs9UEtHU10gIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBbZGVmYXVsdD0+PkFDX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVF0sCitjaGFuZ2VxdW90ZShbLCBdKWRubAorW3A9JHtQQUNLQUdFLWRlZmF1bHR9CitjYXNlICRlbmFibGV2YWwgaW4KK3llcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKK25vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisqKQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiwiCisgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKyAgICBpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorICA7OworZXNhY10sCitlbmFibGVfZmFzdF9pbnN0YWxsPUFDX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVClkbmwKK10pCisKKyMgQUNfRElTQUJMRV9GQVNUX0lOU1RBTEwgLSBzZXQgdGhlIGRlZmF1bHQgdG8gLS1kaXNhYmxlLWZhc3QtaW5zdGFsbAorQUNfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCitBQ19FTkFCTEVfRkFTVF9JTlNUQUxMKG5vKV0pCisKKyMgQUNfTElCVE9PTF9QSUNNT0RFIC0gaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcKKyMgVXNhZ2U6IEFDX0xJQlRPT0xfUElDTU9ERVsoTU9ERSldCisjICAgV2hlcmUgTU9ERSBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvCisjICAgYGJvdGgnLgorQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCitbQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfU0VUVVBdKWRubAorcGljX21vZGU9aWZlbHNlKCQjLDEsJDEsZGVmYXVsdCldKQorCisKKyMgQUNfUEFUSF9UT09MX1BSRUZJWCAtIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbmlzZSBzaGFyZWQgbGlicmFyeQorQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLAorW0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKK1tjYXNlICRNQUdJQ19DTUQgaW4KKyAgLyopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgPzovKikKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKyAgOzsKKyAgKikKKyAgYWNfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCisgIElGUz0iJHtJRlM9ICAgfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCitkbmwgUE9TSVguMiB3b3JkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIG91dHB1dCBvZiB3b3JkIGV4cGFuc2lvbnMsCitkbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgorICBhY19kdW1teT0iaWZlbHNlKFskMl0sICwgJFBBVEgsIFskMl0pIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kMTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJDEiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9ImBleHByIFwiJGRlcGxpYnNfY2hlY2tfbWV0aG9kXCIgOiBcImZpbGVfbWFnaWMgXCguKlwpXCJgIgorCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgIGVncmVwICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIE1BR0lDX0NNRD0iJGFjX3NhdmVfTUFHSUNfQ01EIgorICA7OworZXNhY10pCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCitdKQorCisKKyMgQUNfUEFUSF9NQUdJQyAtIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbmlzZSBhIHNoYXJlZCBsaWJyYXJ5CitBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10sCitbQUNfUkVRVUlSRShbQUNfQ0hFQ0tfVE9PTF9QUkVGSVhdKWRubAorQUNfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluOiRQQVRIKQoraWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgQUNfUEFUSF9UT09MX1BSRUZJWChmaWxlLCAvdXNyL2JpbjokUEFUSCkKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorXSkKKworCisjIEFDX1BST0dfTEQgLSBmaW5kIHRoZSBwYXRoIHRvIHRoZSBHTlUgb3Igbm9uLUdOVSBsaW5rZXIKK0FDX0RFRlVOKFtBQ19QUk9HX0xEXSwKK1tBQ19BUkdfV0lUSChnbnUtbGQsCitbICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dXSwKK3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcywgd2l0aF9nbnVfbGQ9bm8pCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19SRVFVSVJFKFtfTFRfQUNfTElCVE9PTF9TWVNfUEFUSF9TRVBBUkFUT1JdKWRubAorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL11dKiB8IFtbQS1aYS16XV06W1tcXC9dXSopCisgICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAorW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgaWYgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsIHwgZWdyZXAgJyhHTlV8d2l0aCBCRkQpJyA+IC9kZXYvbnVsbDsgdGhlbgorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKyAgICAgIGVsc2UKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmldKQorTEQ9IiRsdF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRMRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCit0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorQUNfUFJPR19MRF9HTlUKK10pCisKKyMgQUNfUFJPR19MRF9HTlUgLQorQUNfREVGVU4oW0FDX1BST0dfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgoraWYgJExEIC12IDI+JjEgPC9kZXYvbnVsbCB8IGVncmVwICcoR05VfHdpdGggQkZEKScgMT4mNTsgdGhlbgorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KK2ZpXSkKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorXSkKKworIyBBQ19QUk9HX0xEX1JFTE9BRF9GTEFHIC0gZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCisjICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KK0FDX0RFRlVOKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAorW2x0X2N2X2xkX3JlbG9hZF9mbGFnPSctciddKQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCit0ZXN0IC1uICIkcmVsb2FkX2ZsYWciICYmIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIgorXSkKKworIyBBQ19ERVBMSUJTX0NIRUNLX01FVEhPRCAtIGhvdyB0byBjaGVjayBmb3IgbGlicmFyeSBkZXBlbmRlbmNpZXMKKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK0FDX0RFRlVOKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byByZWNvZ25pc2UgZGVwZW5kZW50IGxpYnJhcmllc10sCitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCwKK1tsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGVncmVwIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXg0KiB8IGFpeDUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitiZW9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYnNkaTQqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIE1hY2gtTyBkeW5hbWljYWxseSBsaW5rZWQgc2hhcmVkIGxpYnJhcnknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1N5c3RlbS5mcmFtZXdvcmsvVmVyc2lvbnMvKi9TeXN0ZW0gfCBoZWFkIC0xYAorICAgIDs7CisgICopICMgRGFyd2luIDEuMyBvbgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPScvdXNyL2xpYi9saWJTeXN0ZW0uZHlsaWInCisgICAgOzsKKyAgZXNhYworICA7OworCitmcmVlYnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEKS9pW1szLTldXTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitnbnUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqfGhwdXgxMSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICMgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gd2l0aCBwYXNzX2FsbCwgYnV0IGxldCB1cyBrZWVwIGl0IGp1c3QgaW4gY2FzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiAzMi1iaXQgTVNCIGR5bmFtaWMgbGliIE1JUFMgLSB2ZXJzaW9uIDEiCisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbgorICAgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICAjIHRoaXMgd2lsbCBiZSBvdmVycmlkZGVuIHdpdGggcGFzc19hbGwsIGJ1dCBsZXQgdXMga2VlcCBpdCBqdXN0IGluIGNhc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgJHtsaWJtYWdpY30gTVNCIG1pcHMtW1sxMjM0XV0gZHluYW1pYyBsaWIgTUlQUyAtIHZlcnNpb24gMSIKKyAgICA7OworICBlc2FjCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIke2xpYnN1ZmZ9L2xpYmMuc28qYAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eC1nbnUqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBhbHBoYSogfCBocHBhKiB8IGkqODYgfCBtaXBzIHwgbWlwc2VsIHwgcG93ZXJwYyogfCBzcGFyYyogfCBpYTY0KiB8IHMzOTAqIHwgeDg2XzY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbCA7OworICAqKQorICAgICMgZ2xpYmMgdXAgdG8gMi4xLjEgZG9lcyBub3QgcGVyZm9ybSBzb21lIHJlbG9jYXRpb25zIG9uIEFSTQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknIDs7CisgIGVzYWMKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJjLnNvKiAvbGliL2xpYmMtKi5zb2AKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL1wuXV0rXC5zb1wuW1swLTldXStcLltbMC05XV0rJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXC5dXStcLnNvJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCitvcGVuYnNkKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIHNoYXJlZCBvYmplY3QnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBPcGVuQlNELiogc2hhcmVkIGxpYnJhcnknCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgIyB0aGlzIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aXRoIHBhc3NfYWxsLCBidXQgbGV0IHVzIGtlZXAgaXQganVzdCBpbiBjYXNlCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIENPRkYgZm9ybWF0IGFscGhhIHNoYXJlZCBsaWJyYXJ5JworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzY28zLjJ2NSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgOzsKKworc3lzdjV1d1tbNzhdXSogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworZXNhYworXSkKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCitdKQorCisKKyMgQUNfUFJPR19OTSAtIGZpbmQgdGhlIHBhdGggdG8gYSBCU0QtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0FDX1BST0dfTk1dLAorW0FDX1JFUVVJUkUoW19MVF9BQ19MSUJUT09MX1NZU19QQVRIX1NFUEFSQVRPUl0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBCU0QtY29tcGF0aWJsZSBubV0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9OTSwKK1tpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSIkTk0iCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICB0bXBfbm09JGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fW5tCisgICAgaWYgdGVzdCAtZiAkdG1wX25tIHx8IHRlc3QgLWYgJHRtcF9ubSRhY19leGVleHQgOyB0aGVuCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKyAgICAgICMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisgICAgICAjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisgICAgICAjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKyAgICAgIGlmICgkdG1wX25tIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSc7IGV4aXQgMCkgfCBlZ3JlcCAnKC9kZXYvbnVsbHxJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUpJyA+L2Rldi9udWxsOyB0aGVuCisJbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwlicmVhaworICAgICAgZWxpZiAoJHRtcF9ubSAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnOyBleGl0IDApIHwgZWdyZXAgL2Rldi9udWxsID4vZGV2L251bGw7IHRoZW4KKwlsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCWJyZWFrCisgICAgICBlbHNlCisJbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwljb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworICAgICAgZmkKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorICB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9OTSIgJiYgbHRfY3ZfcGF0aF9OTT1ubQorZmldKQorTk09IiRsdF9jdl9wYXRoX05NIgorQUNfTVNHX1JFU1VMVChbJE5NXSkKK10pCisKKyMgQUNfQ0hFQ0tfTElCTSAtIGNoZWNrIGZvciBtYXRoIGxpYnJhcnkKK0FDX0RFRlVOKFtBQ19DSEVDS19MSUJNXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitMSUJNPQorY2FzZSAkaG9zdCBpbgorKi0qLWJlb3MqIHwgKi0qLWN5Z3dpbiogfCAqLSotcHczMiopCisgICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibQorICA7OworKi1uY3Itc3lzdjQuMyopCisgIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09Ii1sbXciKQorICBBQ19DSEVDS19MSUIobSwgbWFpbiwgTElCTT0iJExJQk0gLWxtIikKKyAgOzsKKyopCisgIEFDX0NIRUNLX0xJQihtLCBtYWluLCBMSUJNPSItbG0iKQorICA7OworZXNhYworXSkKKworIyBBQ19MSUJMVERMX0NPTlZFTklFTkNFWyhkaXIpXSAtIHNldHMgTElCTFRETCB0byB0aGUgbGluayBmbGFncyBmb3IKKyMgdGhlIGxpYmx0ZGwgY29udmVuaWVuY2UgbGlicmFyeSBhbmQgTFRETElOQ0wgdG8gdGhlIGluY2x1ZGUgZmxhZ3MgZm9yCisjIHRoZSBsaWJsdGRsIGhlYWRlciBhbmQgYWRkcyAtLWVuYWJsZS1sdGRsLWNvbnZlbmllbmNlIHRvIHRoZQorIyBjb25maWd1cmUgYXJndW1lbnRzLiAgTm90ZSB0aGF0IExJQkxUREwgYW5kIExURExJTkNMIGFyZSBub3QKKyMgQUNfU1VCU1RlZCwgbm9yIGlzIEFDX0NPTkZJR19TVUJESVJTIGNhbGxlZC4gIElmIERJUiBpcyBub3QKKyMgcHJvdmlkZWQsIGl0IGlzIGFzc3VtZWQgdG8gYmUgYGxpYmx0ZGwnLiAgTElCTFRETCB3aWxsIGJlIHByZWZpeGVkCisjIHdpdGggJyR7dG9wX2J1aWxkZGlyfS8nIGFuZCBMVERMSU5DTCB3aWxsIGJlIHByZWZpeGVkIHdpdGgKKyMgJyR7dG9wX3NyY2Rpcn0vJyAobm90ZSB0aGUgc2luZ2xlIHF1b3RlcyEpLiAgSWYgeW91ciBwYWNrYWdlIGlzIG5vdAorIyBmbGF0IGFuZCB5b3UncmUgbm90IHVzaW5nIGF1dG9tYWtlLCBkZWZpbmUgdG9wX2J1aWxkZGlyIGFuZAorIyB0b3Bfc3JjZGlyIGFwcHJvcHJpYXRlbHkgaW4gdGhlIE1ha2VmaWxlcy4KK0FDX0RFRlVOKFtBQ19MSUJMVERMX0NPTlZFTklFTkNFXSwKK1tBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCisgIGNhc2UgJGVuYWJsZV9sdGRsX2NvbnZlbmllbmNlIGluCisgIG5vKSBBQ19NU0dfRVJST1IoW3RoaXMgcGFja2FnZSBuZWVkcyBhIGNvbnZlbmllbmNlIGxpYmx0ZGxdKSA7OworICAiIikgZW5hYmxlX2x0ZGxfY29udmVuaWVuY2U9eWVzCisgICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZW5hYmxlLWx0ZGwtY29udmVuaWVuY2UiIDs7CisgIGVzYWMKKyAgTElCTFRETD0nJHt0b3BfYnVpbGRkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKS9saWJsdGRsYy5sYQorICBMVERMSU5DTD0nLUkke3RvcF9zcmNkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKQorICAjIEZvciBiYWNrd2FyZHMgbm9uLWdldHRleHQgY29uc2lzdGVudCBjb21wYXRpYmlsaXR5Li4uCisgIElOQ0xUREw9IiRMVERMSU5DTCIKK10pCisKKyMgQUNfTElCTFRETF9JTlNUQUxMQUJMRVsoZGlyKV0gLSBzZXRzIExJQkxUREwgdG8gdGhlIGxpbmsgZmxhZ3MgZm9yCisjIHRoZSBsaWJsdGRsIGluc3RhbGxhYmxlIGxpYnJhcnkgYW5kIExURExJTkNMIHRvIHRoZSBpbmNsdWRlIGZsYWdzIGZvcgorIyB0aGUgbGlibHRkbCBoZWFkZXIgYW5kIGFkZHMgLS1lbmFibGUtbHRkbC1pbnN0YWxsIHRvIHRoZSBjb25maWd1cmUKKyMgYXJndW1lbnRzLiAgTm90ZSB0aGF0IExJQkxUREwgYW5kIExURExJTkNMIGFyZSBub3QgQUNfU1VCU1RlZCwgbm9yIGlzCisjIEFDX0NPTkZJR19TVUJESVJTIGNhbGxlZC4gIElmIERJUiBpcyBub3QgcHJvdmlkZWQgYW5kIGFuIGluc3RhbGxlZAorIyBsaWJsdGRsIGlzIG5vdCBmb3VuZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuICBMSUJMVERMIHdpbGwKKyMgYmUgcHJlZml4ZWQgd2l0aCAnJHt0b3BfYnVpbGRkaXJ9LycgYW5kIExURExJTkNMIHdpbGwgYmUgcHJlZml4ZWQKKyMgd2l0aCAnJHt0b3Bfc3JjZGlyfS8nIChub3RlIHRoZSBzaW5nbGUgcXVvdGVzISkuICBJZiB5b3VyIHBhY2thZ2UgaXMKKyMgbm90IGZsYXQgYW5kIHlvdSdyZSBub3QgdXNpbmcgYXV0b21ha2UsIGRlZmluZSB0b3BfYnVpbGRkaXIgYW5kCisjIHRvcF9zcmNkaXIgYXBwcm9wcmlhdGVseSBpbiB0aGUgTWFrZWZpbGVzLgorIyBJbiB0aGUgZnV0dXJlLCB0aGlzIG1hY3JvIG1heSBoYXZlIHRvIGJlIGNhbGxlZCBhZnRlciBBQ19QUk9HX0xJQlRPT0wuCitBQ19ERUZVTihbQUNfTElCTFRETF9JTlNUQUxMQUJMRV0sCitbQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfU0VUVVBdKWRubAorICBBQ19DSEVDS19MSUIobHRkbCwgbWFpbiwKKyAgW3Rlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgIT0geHllcyAmJiBlbmFibGVfbHRkbF9pbnN0YWxsPW5vXSwKKyAgW2lmIHRlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgPSB4bm87IHRoZW4KKyAgICAgQUNfTVNHX1dBUk4oW2xpYmx0ZGwgbm90IGluc3RhbGxlZCwgYnV0IGluc3RhbGxhdGlvbiBkaXNhYmxlZF0pCisgICBlbHNlCisgICAgIGVuYWJsZV9sdGRsX2luc3RhbGw9eWVzCisgICBmaQorICBdKQorICBpZiB0ZXN0IHgiJGVuYWJsZV9sdGRsX2luc3RhbGwiID0geCJ5ZXMiOyB0aGVuCisgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWluc3RhbGwiCisgICAgTElCTFRETD0nJHt0b3BfYnVpbGRkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKS9saWJsdGRsLmxhCisgICAgTFRETElOQ0w9Jy1JJHt0b3Bfc3JjZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkKKyAgZWxzZQorICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1pbnN0YWxsPW5vIgorICAgIExJQkxUREw9Ii1sbHRkbCIKKyAgICBMVERMSU5DTD0KKyAgZmkKKyAgIyBGb3IgYmFja3dhcmRzIG5vbi1nZXR0ZXh0IGNvbnNpc3RlbnQgY29tcGF0aWJpbGl0eS4uLgorICBJTkNMVERMPSIkTFRETElOQ0wiCitdKQorCisjIG9sZCBuYW1lcworQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sICAgW0FDX1BST0dfTElCVE9PTF0pCitBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sICBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQorQUNfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCAgW0FDX0VOQUJMRV9TVEFUSUMoJEApXSkKK0FDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtBQ19ESVNBQkxFX1NIQVJFRCgkQCldKQorQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCitBQ19ERUZVTihbQU1fUFJPR19MRF0sICAgICAgICBbQUNfUFJPR19MRF0pCitBQ19ERUZVTihbQU1fUFJPR19OTV0sICAgICAgICBbQUNfUFJPR19OTV0pCisKKyMgVGhpcyBpcyBqdXN0IHRvIHNpbGVuY2UgYWNsb2NhbCBhYm91dCB0aGUgbWFjcm8gbm90IGJlaW5nIHVzZWQKK2lmZWxzZShbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKQorCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgTFRfQUNfUFJPR19TRUQKKyMgLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKKyMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KK0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sCitbQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfU0VELAorWyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgorIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgorYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgIF9zZWRfbGlzdD0iJF9zZWRfbGlzdCAkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKKworICAjIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCBob29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorJGRlYnVnIHx8Cit7CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/OyBybSAtcmYgJHRtcCAmJiBleGl0ICRleGl0X3N0YXR1cycgMAorICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQorfQorCisjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KKzogJHtUTVBESVI9L3RtcH0KK3sKKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAtcSAiJFRNUERJUi9zZWRYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYKKyAgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIKK30gIHx8Cit7CisgIHRtcD0kVE1QRElSL3NlZCQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKQorfSB8fAoreworICAgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorfQorICBfbWF4PTAKKyAgX2NvdW50PTAKKyAgIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKKyAgIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KKyAgZm9yIF9zZWQgaW4gJF9zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KKyAgICB0ZXN0ICEgLWYgJHtfc2VkfSAmJiBicmVhaworICAgIGNhdCAvZGV2L251bGwgPiAiJHRtcC9zZWQuaW4iCisgICAgX2NvdW50PTAKKyAgICBlY2hvICR7RUNIT19OLSRhY19ufSAiMDEyMzQ1Njc4OSR7RUNIT19DLSRhY19jfSIgPiIkdG1wL3NlZC5pbiIKKyAgICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICAgaWYgIiR7X3NlZH0iIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZWdyZXAgJyhHTlUpJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9TRUQ9JHtfc2VkfQorICAgICAgYnJlYWsKKyAgICBmaQorICAgIHdoaWxlIHRydWU7IGRvCisgICAgICBjYXQgIiR0bXAvc2VkLmluIiAiJHRtcC9zZWQuaW4iID4iJHRtcC9zZWQudG1wIgorICAgICAgbXYgIiR0bXAvc2VkLnRtcCIgIiR0bXAvc2VkLmluIgorICAgICAgY3AgIiR0bXAvc2VkLmluIiAiJHRtcC9zZWQubmwiCisgICAgICBlY2hvID4+IiR0bXAvc2VkLm5sIgorICAgICAgJHtfc2VkfSAtZSAncy9hJC8vJyA8ICIkdG1wL3NlZC5ubCIgPiIkdG1wL3NlZC5vdXQiIHx8IGJyZWFrCisgICAgICBjbXAgLXMgIiR0bXAvc2VkLm91dCIgIiR0bXAvc2VkLm5sIiB8fCBicmVhaworICAgICAgIyA0MDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgICB0ZXN0ICRfY291bnQgLWd0IDEwICYmIGJyZWFrCisgICAgICBfY291bnQ9YGV4cHIgJF9jb3VudCArIDFgCisgICAgICBpZiB0ZXN0ICRfY291bnQgLWd0ICRfbWF4OyB0aGVuCisgICAgICAgIF9tYXg9JF9jb3VudAorICAgICAgICBsdF9jdl9wYXRoX1NFRD0kX3NlZAorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKKyAgcm0gLXJmICIkdG1wIgorXSkKK2lmIHRlc3QgIlgkU0VEIiAhPSAiWCI7IHRoZW4KKyAgbHRfY3ZfcGF0aF9TRUQ9JFNFRAorZWxzZQorICBTRUQ9JGx0X2N2X3BhdGhfU0VECitmaQorQUNfTVNHX1JFU1VMVChbJFNFRF0pCitdKQorCmRpZmYgLS1naXQgYS9hbHR1aS9SRUFETUUuYWx0IGIvYWx0dWkvUkVBRE1FLmFsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGYzMWRiCi0tLSAvZGV2L251bGwKKysrIGIvYWx0dWkvUkVBRE1FLmFsdApAQCAtMCwwICsxLDcxIEBACitIZXJlIGlzIGFuIGFsdGVybmF0ZSBjb21tYW5kLWxpbmUgdXNlciBpbnRlcmZhY2UgZm9yIHRoZSBJSkcgSlBFRyBzb2Z0d2FyZS4KK0l0IGlzIGRlc2lnbmVkIGZvciB1c2UgdW5kZXIgTVMtRE9TLCBhbmQgbWF5IGFsc28gYmUgdXNlZnVsIG9uIG90aGVyIG5vbi1Vbml4CitvcGVyYXRpbmcgc3lzdGVtcy4gIChGb3IgdGhhdCBtYXR0ZXIsIHRoaXMgY29kZSB3b3JrcyBmaW5lIG9uIFVuaXgsIGJ1dCB0aGUKK3N0YW5kYXJkIGNvbW1hbmQtbGluZSBzeW50YXggaXMgYmV0dGVyIG9uIFVuaXggYmVjYXVzZSBpdCBpcyBwaXBlLWZyaWVuZGx5LikKKworV2l0aCB0aGlzIHVzZXIgaW50ZXJmYWNlLCBjanBlZyBhbmQgZGpwZWcgYWNjZXB0IG11bHRpcGxlIGlucHV0IGZpbGUgbmFtZXMKK29uIHRoZSBjb21tYW5kIGxpbmU7IG91dHB1dCBmaWxlIG5hbWVzIGFyZSBnZW5lcmF0ZWQgYnkgc3Vic3RpdHV0aW5nCithcHByb3ByaWF0ZSBleHRlbnNpb25zLiAgVGhlIHVzZXIgaXMgcHJvbXB0ZWQgYmVmb3JlIGFueSBhbHJlYWR5LWV4aXN0aW5nCitmaWxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uICBTZWUgdXNhZ2UuYWx0IGZvciBkZXRhaWxzLgorCitFeHBhbnNpb24gb2Ygd2lsZC1jYXJkIGZpbGUgc3BlY2lmaWNhdGlvbnMgaXMgdXNlZnVsIGJ1dCBpcyBub3QgZGlyZWN0bHkKK3Byb3ZpZGVkIGJ5IHRoaXMgY29kZS4gIE1vc3QgRE9TIEMgY29tcGlsZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZG8gd2lsZC1jYXJkCitleHBhbnNpb24gImJlaGluZCB0aGUgc2NlbmVzIiwgYW5kIHdlIHJlbHkgb24gdGhhdCBmZWF0dXJlLiAgT24gb3RoZXIgc3lzdGVtcywKK3RoZSBzaGVsbCBtYXkgZG8gaXQgZm9yIHlvdSwgYXMgaXMgZG9uZSBvbiBVbml4LgorCitBbHNvLCBhIERPUy1zcGVjaWZpYyByb3V0aW5lIGlzIHByb3ZpZGVkIHRvIGRldGVybWluZSBhdmFpbGFibGUgbWVtb3J5OwordGhpcyBtYWtlcyB0aGUgLW1heG1lbW9yeSBzd2l0Y2ggdW5uZWNlc3NhcnkgZXhjZXB0IGluIHVudXN1YWwgY2FzZXMuCitJZiB5b3Uga25vdyBob3cgdG8gZGV0ZXJtaW5lIGF2YWlsYWJsZSBtZW1vcnkgb24gYSBkaWZmZXJlbnQgc3lzdGVtLAoreW91IGNhbiBlYXNpbHkgYWRkIHRoZSBuZWNlc3NhcnkgY29kZS4gIChBbmQgcGxlYXNlIHNlbmQgaXQgYWxvbmcgdG8KK2pwZWctaW5mb0B1dW5ldC51dS5uZXQgc28gd2UgY2FuIGluY2x1ZGUgaXQgaW4gZnV0dXJlIHJlbGVhc2VzISkKKworCitJTlNUQUxMQVRJT04KKz09PT09PT09PT09PQorCitZb3UgbmVlZCB0byBoYXZlIHRoZSBtYWluIElKRyBKUEVHIGRpc3RyaWJ1dGlvbiwgcmVsZWFzZSA2IG9yIGxhdGVyLgorUmVwbGFjZSB0aGUgc3RhbmRhcmQgY2pwZWcuYyBhbmQgZGpwZWcuYyBmaWxlcyB3aXRoIHRoZSBvbmVzIHByb3ZpZGVkIGhlcmUuCitUaGVuIGJ1aWxkIHRoZSBzb2Z0d2FyZSBhcyBkZXNjcmliZWQgaW4gdGhlIG1haW4gZGlzdHJpYnV0aW9uJ3MgaW5zdGFsbC5kb2MKK2ZpbGUsIHdpdGggdGhlc2UgZXhjZXB0aW9uczoKKworKiBEZWZpbmUgUFJPR1JFU1NfUkVQT1JUIGluIGpjb25maWcuaCBpZiB5b3Ugd2FudCB0aGUgcGVyY2VudC1kb25lIGRpc3BsYXkuCisqIERlZmluZSBOT19PVkVSV1JJVEVfQ0hFQ0sgaWYgeW91ICpkb24ndCogd2FudCBvdmVyd3JpdGUgY29uZmlybWF0aW9uLgorKiBZb3UgbWF5IGlnbm9yZSB0aGUgVVNFX1NFVE1PREUgYW5kIFRXT19GSUxFX0NPTU1BTkRMSU5FIHN5bWJvbHMgZGlzY3Vzc2VkCisgIGluIGluc3RhbGwuZG9jOyB0aGVzZSBmaWxlcyBkbyBub3QgdXNlIHRoZW0uCisqIEFzIGdpdmVuLCBkanBlZy5jIGRlZmF1bHRzIHRvIEdJRiBvdXRwdXQgKG5vdCBQUE0gb3V0cHV0IGFzIGluIHRoZSBzdGFuZGFyZAorICBkanBlZy5jKS4gIElmIHlvdSB3YW50IHNvbWV0aGluZyBkaWZmZXJlbnQsIG1vZGlmeSBERUZBVUxUX0ZNVC4KKworWW91IG1heSBhbHNvIG5lZWQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwgdG8gZW5hYmxlIGZpbGVuYW1lIHdpbGQtY2FyZAorZXhwYW5zaW9uLCBhc3N1bWluZyB5b3VyIGNvbXBpbGVyIGhhcyB0aGF0IGNhcGFiaWxpdHkgYXQgYWxsLgorCitNb2RpZnkgdGhlIHN0YW5kYXJkIHVzYWdlLmRvYyBmaWxlIGFzIGRlc2NyaWJlZCBpbiB1c2FnZS5hbHQuICAoSWYgeW91IHdhbnQKK3RvIHVzZSB0aGUgVW5peC1zdHlsZSBtYW51YWwgcGFnZXMgY2pwZWcuMSBhbmQgZGpwZWcuMSwgYmV0dGVyIGZpeCB0aGVtIHRvby4pCisKKworSGVyZSBhcmUgc29tZSBzcGVjaWZpYyBub3RlcyBmb3IgcG9wdWxhciBNUy1ET1MgY29tcGlsZXJzOgorCitCb3JsYW5kIEM6CisgIEFkZCAiLURNU0RPUyIgdG8gQ0ZMQUdTIHRvIGVuYWJsZSB1c2Ugb2YgdGhlIERPUyBtZW1vcnkgZGV0ZXJtaW5hdGlvbiBjb2RlLgorICBMaW5rIHdpdGggdGhlIHN0YW5kYXJkIGxpYnJhcnkgZmlsZSBXSUxEQVJHUy5PQkogdG8gZ2V0IHdpbGQtY2FyZCBleHBhbnNpb24uCisKK01pY3Jvc29mdCBDOgorICBBZGQgIi1ETVNET1MiIHRvIENGTEFHUyB0byBlbmFibGUgdXNlIG9mIHRoZSBET1MgbWVtb3J5IGRldGVybWluYXRpb24gY29kZS4KKyAgTGluayB3aXRoIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGZpbGUgU0VUQVJHVi5PQkogdG8gZ2V0IHdpbGQtY2FyZCBleHBhbnNpb24uCisgIEluIHRoZSB2ZXJzaW9ucyBJJ3ZlIHVzZWQsIHlvdSBtdXN0IGFsc28gYWRkIC9OT0UgdG8gdGhlIGxpbmtlciBzd2l0Y2hlcyB0bworICBhdm9pZCBhIGR1cGxpY2F0ZS1zeW1ib2wgZXJyb3IgZnJvbSBpbmNsdWRpbmcgU0VUQVJHVi4KKworREpHUFAgKHdlIHJlY29tbWVuZCB2ZXJzaW9uIDIuMCBvciBsYXRlcik6CisgIEFkZCAiLURGUkVFX01FTV9FU1RJTUFURT0wIiB0byBDRkxBR1MuICBXaWxkLWNhcmQgZXhwYW5zaW9uIGlzIGF1dG9tYXRpYy4KKworCitMRUdBTCBJU1NVRVMKKz09PT09PT09PT09PQorCitUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KK1Rlcm1zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIGZyZWUgSUpHIEpQRUcgc29mdHdhcmU7CitzZWUgaXRzIFJFQURNRSBmaWxlIGZvciBkZXRhaWxzLgorCitUaGUgYXV0aG9ycyBtYWtlIE5PIFdBUlJBTlRZIG9yIHJlcHJlc2VudGF0aW9uLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLAord2l0aCByZXNwZWN0IHRvIHRoaXMgc29mdHdhcmUsIGl0cyBxdWFsaXR5LCBhY2N1cmFjeSwgbWVyY2hhbnRhYmlsaXR5LCBvcgorZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUyIsIGFuZCB5b3UsCitpdHMgdXNlciwgYXNzdW1lIHRoZSBlbnRpcmUgcmlzayBhcyB0byBpdHMgcXVhbGl0eSBhbmQgYWNjdXJhY3kuCmRpZmYgLS1naXQgYS9hbHR1aS9janBlZy5jIGIvYWx0dWkvY2pwZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjFhNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYWx0dWkvY2pwZWcuYwpAQCAtMCwwICsxLDgxMyBAQAorLyoKKyAqIGFsdGVybmF0ZSBjanBlZy5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBmb3IgU0lNRCBleHRlbnNpb24uCisgKiBMYXN0IE1vZGlmaWVkIDogSmFudWFyeSA2LCAyMDA2CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYW4gYWx0ZXJuYXRlIHVzZXIgaW50ZXJmYWNlIGZvciB0aGUgSlBFRyBjb21wcmVzc29yLgorICogT25lIG9yIG1vcmUgaW5wdXQgZmlsZXMgYXJlIG5hbWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBvdXRwdXQgZmlsZQorICogbmFtZXMgYXJlIGNyZWF0ZWQgYnkgc3Vic3RpdHV0aW5nICIuanBnIiBmb3IgdGhlIGlucHV0IGZpbGUncyBleHRlbnNpb24uCisgKi8KKworI2luY2x1ZGUgImNkanBlZy5oIgkJLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKyNpbmNsdWRlICJqdmVyc2lvbi5oIgkJLyogZm9yIHZlcnNpb24gbWVzc2FnZSAqLworCisjaWZkZWYgVVNFX0NDT01NQU5ECQkvKiBjb21tYW5kLWxpbmUgcmVhZGVyIGZvciBNYWNpbnRvc2ggKi8KKyNpZmRlZiBfX01XRVJLU19fCisjaW5jbHVkZSA8U0lPVVguaD4gICAgICAgICAgICAgIC8qIE1ldHJvd2Vya3MgbmVlZHMgdGhpcyAqLworI2luY2x1ZGUgPGNvbnNvbGUuaD4JCS8qIC4uLiBhbmQgdGhpcyAqLworI2VuZGlmCisjaWZkZWYgVEhJTktfQworI2luY2x1ZGUgPGNvbnNvbGUuaD4JCS8qIFRoaW5rIGRlY2xhcmVzIGl0IGhlcmUgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgUEFUSF9NQVgJCS8qIEFOU0kgbWF4aW11bS1wYXRobmFtZS1sZW5ndGggY29uc3RhbnQgKi8KKyNkZWZpbmUgUEFUSF9NQVggMjU2CisjZW5kaWYKKworCisvKiBDcmVhdGUgdGhlIGFkZC1vbiBtZXNzYWdlIHN0cmluZyB0YWJsZS4gKi8KKworI2RlZmluZSBKTUVTU0FHRShjb2RlLHN0cmluZykJc3RyaW5nICwKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjZGpwZWdfbWVzc2FnZV90YWJsZVtdID0geworI2luY2x1ZGUgImNkZXJyb3IuaCIKKyAgTlVMTAorfTsKKworCisvKgorICogU0lNRCBFeHQ6IGNvbXBpbGVyLXNwZWNpZmljIGhhY2tzIHRvIGVuYWJsZSBmaWxlbmFtZSB3aWxkLWNhcmQgZXhwYW5zaW9uCisgKi8KKworI2lmZGVmIF9NU0NfVkVSCQkvKiBNaWNyb3NvZnQgVmlzdWFsIEMrKyAqLworLyogZnJvbSBzZXRhcmd2LmMgKHNldGFyZ3Yub2JqKSAqLworLyogVGVzdGVkIHVuZGVyIFZpc3VhbCBDKysgVjYuMCwgVG9vbGtpdCAyMDAzLCBhbmQgMjAwNSBFeHByZXNzIEVkaXRpb24gKi8KK2ludCBfX2NkZWNsIF9zZXRhcmd2KHZvaWQpIHsgaW50IF9fY2RlY2wgX19zZXRhcmd2KHZvaWQpOyByZXR1cm4gX19zZXRhcmd2KCk7IH0KKyNlbmRpZgorI2lmZGVmIF9fQk9STEFORENfXwkvKiBCb3JsYW5kIEMrKyAqLworLyogZnJvbSB3aWxkYXJncy5jICh3aWxkYXJncy5vYmopICovCisvKiBUZXN0ZWQgdW5kZXIgQm9ybGFuZCBDKysgQ29tcGlsZXIgNS41ICh3aW4zMikgKi8KKyNpbmNsdWRlIDx3aWxkYXJncy5oPgordHlwZWRlZiB2b2lkIF9SVExFTlRSWSAoKiBfUlRMRU5UUlkgX2FyZ3ZfZXhwYW5kX2ZuYykoY2hhciAqLCBfUEZOX0FEREFSRyk7CitfYXJndl9leHBhbmRfZm5jIF9hcmd2X2V4cGFuZF9wdHIgPSBfZXhwYW5kX3dpbGQ7CisjZW5kaWYKKworCisvKgorICogQXV0b21hdGljIGRldGVybWluYXRpb24gb2YgYXZhaWxhYmxlIG1lbW9yeS4KKyAqLworCitzdGF0aWMgbG9uZyBkZWZhdWx0X21heG1lbTsJLyogc2F2ZXMgdmFsdWUgZGV0ZXJtaW5lZCBhdCBzdGFydHVwLCBvciAwICovCisKKyNpZm5kZWYgRlJFRV9NRU1fRVNUSU1BVEUJLyogbWF5IGJlIGRlZmluZWQgZnJvbSBjb21tYW5kIGxpbmUgKi8KKworI2lmZGVmIE1TRE9TCQkJLyogRm9yIE1TLURPUyAodW5sZXNzIGZsYXQtbWVtb3J5IG1vZGVsKSAqLworCisjaW5jbHVkZSA8ZG9zLmg+CQkvKiBmb3IgYWNjZXNzIHRvIGludGRvcygpIGNhbGwgKi8KKworTE9DQUwobG9uZykKK3VudXNlZF9kb3NfbWVtb3J5ICh2b2lkKQorLyogT2J0YWluIHRvdGFsIGFtb3VudCBvZiB1bmFsbG9jYXRlZCBET1MgbWVtb3J5ICovCit7CisgIHVuaW9uIFJFR1MgcmVnczsKKyAgbG9uZyBucGFyYXM7CisKKyAgcmVncy5oLmFoID0gMHg0ODsJCS8qIERPUyBmdW5jdGlvbiBBbGxvY2F0ZSBNZW1vcnkgQmxvY2sgKi8KKyAgcmVncy54LmJ4ID0gMHhGRkZGOwkJLyogQXNrIGZvciBtb3JlIG1lbW9yeSB0aGFuIERPUyBjYW4gaGF2ZSAqLworICAodm9pZCkgaW50ZG9zKCZyZWdzLCAmcmVncyk7CisgIC8qIERPUyB3aWxsIGZhaWwgYW5kIHJldHVybiAjIG9mIHBhcmFncmFwaHMgYWN0dWFsbHkgYXZhaWxhYmxlIGluIEJYLiAqLworICBucGFyYXMgPSAodW5zaWduZWQgaW50KSByZWdzLnguYng7CisgIC8qIFRpbWVzIDE2IHRvIGNvbnZlcnQgdG8gYnl0ZXMuICovCisgIHJldHVybiBucGFyYXMgPDwgNDsKK30KKworLyogVGhlIGRlZmF1bHQgbWVtb3J5IHNldHRpbmcgaXMgOTUlIG9mIHRoZSBhdmFpbGFibGUgc3BhY2UuICovCisjZGVmaW5lIEZSRUVfTUVNX0VTVElNQVRFICAoKHVudXNlZF9kb3NfbWVtb3J5KCkgKiA5NUwpIC8gMTAwTCkKKworI2VuZGlmIC8qIE1TRE9TICovCisKKyNpZmRlZiBBVEFSSQkJCS8qIEZvciBBdGFyaSBTVC9TVEUvVFQsIFB1cmUgQyBvciBUdXJibyBDICovCisKKyNpbmNsdWRlIDxleHQuaD4KKworLyogVGhlIGRlZmF1bHQgbWVtb3J5IHNldHRpbmcgaXMgOTAlIG9mIHRoZSBhdmFpbGFibGUgc3BhY2UuICovCisjZGVmaW5lIEZSRUVfTUVNX0VTVElNQVRFICAoKChsb25nKSBjb3JlbGVmdCgpICogOTBMKSAvIDEwMEwpCisKKyNlbmRpZiAvKiBBVEFSSSAqLworCisvKiBBZGQgbWVtb3J5LWVzdGltYXRpb24gcHJvY2VkdXJlcyBmb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgaGVyZSwKKyAqIHdpdGggYXBwcm9wcmlhdGUgI2lmZGVmJ3MgYXJvdW5kIHRoZW0uCisgKi8KKworI2VuZGlmIC8qICFGUkVFX01FTV9FU1RJTUFURSAqLworCisKKy8qCisgKiBUaGlzIHJvdXRpbmUgZGV0ZXJtaW5lcyB3aGF0IGZvcm1hdCB0aGUgaW5wdXQgZmlsZSBpcywKKyAqIGFuZCBzZWxlY3RzIHRoZSBhcHByb3ByaWF0ZSBpbnB1dC1yZWFkaW5nIG1vZHVsZS4KKyAqCisgKiBUbyBkZXRlcm1pbmUgd2hpY2ggZmFtaWx5IG9mIGlucHV0IGZvcm1hdHMgdGhlIGZpbGUgYmVsb25ncyB0bywKKyAqIHdlIG1heSBsb29rIG9ubHkgYXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGZpbGUsIHNpbmNlIEMgZG9lcyBub3QKKyAqIGd1YXJhbnRlZSB0aGF0IG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyIGNhbiBiZSBwdXNoZWQgYmFjayB3aXRoIHVuZ2V0Yy4KKyAqIExvb2tpbmcgYXQgYWRkaXRpb25hbCBieXRlcyB3b3VsZCByZXF1aXJlIG9uZSBvZiB0aGVzZSBhcHByb2FjaGVzOgorICogICAgIDEpIGFzc3VtZSB3ZSBjYW4gZnNlZWsoKSB0aGUgaW5wdXQgZmlsZSAoZmFpbHMgZm9yIHBpcGVkIGlucHV0KTsKKyAqICAgICAyKSBhc3N1bWUgd2UgY2FuIHB1c2ggYmFjayBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciAod29ya3MgaW4KKyAqICAgICAgICBzb21lIEMgaW1wbGVtZW50YXRpb25zLCBidXQgdW5wb3J0YWJsZSk7CisgKiAgICAgMykgcHJvdmlkZSBvdXIgb3duIGJ1ZmZlcmluZyAoYnJlYWtzIGlucHV0IHJlYWRlcnMgdGhhdCB3YW50IHRvIHVzZQorICogICAgICAgIHN0ZGlvIGRpcmVjdGx5LCBzdWNoIGFzIHRoZSBSTEUgbGlicmFyeSk7CisgKiBvciAgNCkgZG9uJ3QgcHV0IGJhY2sgdGhlIGRhdGEsIGFuZCBtb2RpZnkgdGhlIGlucHV0X2luaXQgbWV0aG9kcyB0byBhc3N1bWUKKyAqICAgICAgICB0aGV5IHN0YXJ0IHJlYWRpbmcgYWZ0ZXIgdGhlIHN0YXJ0IG9mIGZpbGUgKGFsc28gYnJlYWtzIFJMRSBsaWJyYXJ5KS4KKyAqICMxIGlzIGF0dHJhY3RpdmUgZm9yIE1TLURPUyBidXQgaXMgdW50ZW5hYmxlIG9uIFVuaXguCisgKgorICogVGhlIG1vc3QgcG9ydGFibGUgc29sdXRpb24gZm9yIGZpbGUgdHlwZXMgdGhhdCBjYW4ndCBiZSBpZGVudGlmaWVkIGJ5IHRoZWlyCisgKiBmaXJzdCBieXRlIGlzIHRvIG1ha2UgdGhlIHVzZXIgdGVsbCB1cyB3aGF0IHRoZXkgYXJlLiAgVGhpcyBpcyBhbHNvIHRoZQorICogb25seSBhcHByb2FjaCBmb3IgInJhdyIgZmlsZSB0eXBlcyB0aGF0IGNvbnRhaW4gb25seSBhcmJpdHJhcnkgdmFsdWVzLgorICogV2UgcHJlc2VudGx5IGFwcGx5IHRoaXMgbWV0aG9kIGZvciBUYXJnYSBmaWxlcy4gIE1vc3Qgb2YgdGhlIHRpbWUgVGFyZ2EKKyAqIGZpbGVzIHN0YXJ0IHdpdGggMHgwMCwgc28gd2UgcmVjb2duaXplIHRoYXQgY2FzZS4gIFBvdGVudGlhbGx5LCBob3dldmVyLAorICogYSBUYXJnYSBmaWxlIGNvdWxkIHN0YXJ0IHdpdGggYW55IGJ5dGUgdmFsdWUgKGJ5dGUgMCBpcyB0aGUgbGVuZ3RoIG9mIHRoZQorICogc2VsZG9tLXVzZWQgSUQgZmllbGQpLCBzbyB3ZSBwcm92aWRlIGEgc3dpdGNoIHRvIGZvcmNlIFRhcmdhIGlucHV0IG1vZGUuCisgKi8KKworc3RhdGljIGJvb2xlYW4gaXNfdGFyZ2E7CS8qIHJlY29yZHMgdXNlciAtdGFyZ2Egc3dpdGNoICovCisKKworTE9DQUwoY2pwZWdfc291cmNlX3B0cikKK3NlbGVjdF9maWxlX3R5cGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBGSUxFICogaW5maWxlKQoreworICBpbnQgYzsKKworICBpZiAoaXNfdGFyZ2EpIHsKKyNpZmRlZiBUQVJHQV9TVVBQT1JURUQKKyAgICByZXR1cm4gamluaXRfcmVhZF90YXJnYShjaW5mbyk7CisjZWxzZQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEdBX05PVENPTVApOworI2VuZGlmCisgIH0KKworICBpZiAoKGMgPSBnZXRjKGluZmlsZSkpID09IEVPRikKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0lOUFVUX0VNUFRZKTsKKyAgaWYgKHVuZ2V0YyhjLCBpbmZpbGUpID09IEVPRikKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1VOR0VUQ19GQUlMRUQpOworCisgIHN3aXRjaCAoYykgeworI2lmZGVmIEJNUF9TVVBQT1JURUQKKyAgY2FzZSAnQic6CisgICAgcmV0dXJuIGppbml0X3JlYWRfYm1wKGNpbmZvKTsKKyNlbmRpZgorI2lmZGVmIEdJRl9TVVBQT1JURUQKKyAgY2FzZSAnRyc6CisgICAgcmV0dXJuIGppbml0X3JlYWRfZ2lmKGNpbmZvKTsKKyNlbmRpZgorI2lmZGVmIFBQTV9TVVBQT1JURUQKKyAgY2FzZSAnUCc6CisgICAgcmV0dXJuIGppbml0X3JlYWRfcHBtKGNpbmZvKTsKKyNlbmRpZgorI2lmZGVmIFJMRV9TVVBQT1JURUQKKyAgY2FzZSAnUic6CisgICAgcmV0dXJuIGppbml0X3JlYWRfcmxlKGNpbmZvKTsKKyNlbmRpZgorI2lmZGVmIFRBUkdBX1NVUFBPUlRFRAorICBjYXNlIDB4MDA6CisgICAgcmV0dXJuIGppbml0X3JlYWRfdGFyZ2EoY2luZm8pOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9VTktOT1dOX0ZPUk1BVCk7CisgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gTlVMTDsJCQkvKiBzdXBwcmVzcyBjb21waWxlciB3YXJuaW5ncyAqLworfQorCisKKy8qCisgKiBBcmd1bWVudC1wYXJzaW5nIGNvZGUuCisgKiBUaGUgc3dpdGNoIHBhcnNlciBpcyBkZXNpZ25lZCB0byBiZSB1c2VmdWwgd2l0aCBET1Mtc3R5bGUgY29tbWFuZCBsaW5lCisgKiBzeW50YXgsIGllLCBpbnRlcm1peGVkIHN3aXRjaGVzIGFuZCBmaWxlIG5hbWVzLCB3aGVyZSBvbmx5IHRoZSBzd2l0Y2hlcworICogdG8gdGhlIGxlZnQgb2YgYSBnaXZlbiBmaWxlIG5hbWUgYWZmZWN0IHByb2Nlc3Npbmcgb2YgdGhhdCBmaWxlLgorICovCisKKworc3RhdGljIGNvbnN0IGNoYXIgKiBwcm9nbmFtZTsJLyogcHJvZ3JhbSBuYW1lIGZvciBlcnJvciBtZXNzYWdlcyAqLworc3RhdGljIGNoYXIgKiBvdXRmaWxlbmFtZTsJLyogZm9yIC1vdXRmaWxlIHN3aXRjaCAqLworCisKK0xPQ0FMKHZvaWQpCit1c2FnZSAodm9pZCkKKy8qIGNvbXBsYWluIGFib3V0IGJhZCBjb21tYW5kIGxpbmUgKi8KK3sKKyAgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgW3N3aXRjaGVzXSBpbnB1dGZpbGUocylcbiIsIHByb2duYW1lKTsKKyAgZnByaW50ZihzdGRlcnIsICJMaXN0IG9mIGlucHV0IGZpbGVzIG1heSB1c2Ugd2lsZGNhcmRzICgqIGFuZCA/KVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiT3V0cHV0IGZpbGVuYW1lIGlzIHNhbWUgYXMgaW5wdXQgZmlsZW5hbWUsIGJ1dCBleHRlbnNpb24gLmpwZ1xuIik7CisKKyAgZnByaW50ZihzdGRlcnIsICJTd2l0Y2hlcyAobmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkKTpcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXF1YWxpdHkgTiAgICAgQ29tcHJlc3Npb24gcXVhbGl0eSAoMC4uMTAwOyA1LTk1IGlzIHVzZWZ1bCByYW5nZSlcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLWdyYXlzY2FsZSAgICAgQ3JlYXRlIG1vbm9jaHJvbWUgSlBFRyBmaWxlXG4iKTsKKyNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1vcHRpbWl6ZSAgICAgIE9wdGltaXplIEh1ZmZtYW4gdGFibGUgKHNtYWxsZXIgZmlsZSwgYnV0IHNsb3cgY29tcHJlc3Npb24pXG4iKTsKKyNlbmRpZgorI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtcHJvZ3Jlc3NpdmUgICBDcmVhdGUgcHJvZ3Jlc3NpdmUgSlBFRyBmaWxlXG4iKTsKKyNlbmRpZgorI2lmZGVmIFRBUkdBX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLXRhcmdhICAgICAgICAgSW5wdXQgZmlsZSBpcyBUYXJnYSBmb3JtYXQgKHVzdWFsbHkgbm90IG5lZWRlZClcbiIpOworI2VuZGlmCisgIGZwcmludGYoc3RkZXJyLCAiU3dpdGNoZXMgZm9yIGFkdmFuY2VkIHVzZXJzOlxuIik7CisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLWRjdCBpbnQgICAgICAgVXNlIGludGVnZXIgRENUIG1ldGhvZCVzXG4iLAorCSAgKEpEQ1RfREVGQVVMVCA9PSBKRENUX0lTTE9XID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyNlbmRpZgorI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgZmFzdCAgICAgIFVzZSBmYXN0IGludGVnZXIgRENUIChsZXNzIGFjY3VyYXRlKSVzXG4iLAorCSAgKEpEQ1RfREVGQVVMVCA9PSBKRENUX0lGQVNUID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgZmxvYXQgICAgIFVzZSBmbG9hdGluZy1wb2ludCBEQ1QgbWV0aG9kJXNcbiIsCisJICAoSkRDVF9ERUZBVUxUID09IEpEQ1RfRkxPQVQgPyAiIChkZWZhdWx0KSIgOiAiIikpOworI2VuZGlmCisgIGZwcmludGYoc3RkZXJyLCAiICAtcmVzdGFydCBOICAgICBTZXQgcmVzdGFydCBpbnRlcnZhbCBpbiByb3dzLCBvciBpbiBibG9ja3Mgd2l0aCBCXG4iKTsKKyNpZmRlZiBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtc21vb3RoIE4gICAgICBTbW9vdGggZGl0aGVyZWQgaW5wdXQgKE49MS4uMTAwIGlzIHN0cmVuZ3RoKVxuIik7CisjZW5kaWYKKyNpZm5kZWYgRlJFRV9NRU1fRVNUSU1BVEUKKyAgZnByaW50ZihzdGRlcnIsICIgIC1tYXhtZW1vcnkgTiAgIE1heGltdW0gbWVtb3J5IHRvIHVzZSAoaW4ga2J5dGVzKVxuIik7CisjZW5kaWYKKyAgZnByaW50ZihzdGRlcnIsICIgIC1vdXRmaWxlIG5hbWUgIFNwZWNpZnkgbmFtZSBmb3Igb3V0cHV0IGZpbGVcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXZlcmJvc2UgIG9yICAtZGVidWcgICBFbWl0IGRlYnVnIG91dHB1dFxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiU3dpdGNoZXMgZm9yIHdpemFyZHM6XG4iKTsKKyNpZmRlZiBDX0FSSVRIX0NPRElOR19TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1hcml0aG1ldGljICAgIFVzZSBhcml0aG1ldGljIGNvZGluZ1xuIik7CisjZW5kaWYKKyAgZnByaW50ZihzdGRlcnIsICIgIC1iYXNlbGluZSAgICAgIEZvcmNlIGJhc2VsaW5lIHF1YW50aXphdGlvbiB0YWJsZXNcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXF0YWJsZXMgZmlsZSAgVXNlIHF1YW50aXphdGlvbiB0YWJsZXMgZ2l2ZW4gaW4gZmlsZVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtcXNsb3RzIE5bLC4uLl0gICAgU2V0IGNvbXBvbmVudCBxdWFudGl6YXRpb24gdGFibGVzXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1zYW1wbGUgSHhWWywuLi5dICBTZXQgY29tcG9uZW50IHNhbXBsaW5nIGZhY3RvcnNcbiIpOworI2lmZGVmIENfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLXNjYW5zIGZpbGUgICAgQ3JlYXRlIG11bHRpLXNjYW4gSlBFRyBwZXIgc2NyaXB0IGZpbGVcbiIpOworI2VuZGlmCisgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworCisjaWZuZGVmIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKworTE9DQUwodm9pZCkKK3ByaW50X3NpbWRfaW5mbyAoRklMRSAqIGZpbGUsIGNoYXIgKiBsYWJlbHN0ciwgdW5zaWduZWQgaW50IHNpbWQpCit7CisgIGZwcmludGYoZmlsZSwgIiVzJXMlcyVzJXMlc1xuIiwgbGFiZWxzdHIsCisJICBzaW1kICYgSlNJTURfTU1YICAgPyAiIE1NWCIgICAgOiAiIiwKKwkgIHNpbWQgJiBKU0lNRF8zRE5PVyA/ICIgM0ROb3chIiA6ICIiLAorCSAgc2ltZCAmIEpTSU1EX1NTRSAgID8gIiBTU0UiICAgIDogIiIsCisJICBzaW1kICYgSlNJTURfU1NFMiAgPyAiIFNTRTIiICAgOiAiIiwKKwkgIHNpbWQgPT0gSlNJTURfTk9ORSA/ICIgTk9ORSIgICA6ICIiKTsKK30KKworI2VuZGlmIC8qICFKU0lNRF9NT0RFSU5GT19OT1RfU1VQUE9SVEVEICovCisKKworTE9DQUwoaW50KQorcGFyc2Vfc3dpdGNoZXMgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCisJCWludCBsYXN0X2ZpbGVfYXJnX3NlZW4sIGJvb2xlYW4gZm9yX3JlYWwpCisvKiBQYXJzZSBvcHRpb25hbCBzd2l0Y2hlcy4KKyAqIFJldHVybnMgYXJndltdIGluZGV4IG9mIGZpcnN0IGZpbGUtbmFtZSBhcmd1bWVudCAoPT0gYXJnYyBpZiBub25lKS4KKyAqIEFueSBmaWxlIG5hbWVzIHdpdGggaW5kZXhlcyA8PSBsYXN0X2ZpbGVfYXJnX3NlZW4gYXJlIGlnbm9yZWQ7CisgKiB0aGV5IGhhdmUgcHJlc3VtYWJseSBiZWVuIHByb2Nlc3NlZCBpbiBhIHByZXZpb3VzIGl0ZXJhdGlvbi4KKyAqIChQYXNzIDAgZm9yIGxhc3RfZmlsZV9hcmdfc2VlbiBvbiB0aGUgZmlyc3Qgb3Igb25seSBpdGVyYXRpb24uKQorICogZm9yX3JlYWwgaXMgRkFMU0Ugb24gdGhlIGZpcnN0IChkdW1teSkgcGFzczsgd2UgbWF5IHNraXAgYW55IGV4cGVuc2l2ZQorICogcHJvY2Vzc2luZy4KKyAqLworeworICBpbnQgYXJnbjsKKyAgY2hhciAqIGFyZzsKKyAgaW50IHF1YWxpdHk7CQkJLyogLXF1YWxpdHkgcGFyYW1ldGVyICovCisgIGludCBxX3NjYWxlX2ZhY3RvcjsJCS8qIHNjYWxpbmcgcGVyY2VudGFnZSBmb3IgLXF0YWJsZXMgKi8KKyAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZTsKKyAgYm9vbGVhbiBzaW1wbGVfcHJvZ3Jlc3NpdmU7CisgIGNoYXIgKiBxdGFibGVmaWxlID0gTlVMTDsJLyogc2F2ZXMgLXF0YWJsZXMgZmlsZW5hbWUgaWYgYW55ICovCisgIGNoYXIgKiBxc2xvdHNhcmcgPSBOVUxMOwkvKiBzYXZlcyAtcXNsb3RzIHBhcm0gaWYgYW55ICovCisgIGNoYXIgKiBzYW1wbGVhcmcgPSBOVUxMOwkvKiBzYXZlcyAtc2FtcGxlIHBhcm0gaWYgYW55ICovCisgIGNoYXIgKiBzY2Fuc2FyZyA9IE5VTEw7CS8qIHNhdmVzIC1zY2FucyBwYXJtIGlmIGFueSAqLworCisgIC8qIFNldCB1cCBkZWZhdWx0IEpQRUcgcGFyYW1ldGVycy4gKi8KKyAgLyogTm90ZSB0aGF0IGRlZmF1bHQgLXF1YWxpdHkgbGV2ZWwgbmVlZCBub3QsIGFuZCBkb2VzIG5vdCwKKyAgICogbWF0Y2ggdGhlIGRlZmF1bHQgc2NhbGluZyBmb3IgYW4gZXhwbGljaXQgLXF0YWJsZXMgYXJndW1lbnQuCisgICAqLworICBxdWFsaXR5ID0gNzU7CQkJLyogZGVmYXVsdCAtcXVhbGl0eSB2YWx1ZSAqLworICBxX3NjYWxlX2ZhY3RvciA9IDEwMDsJCS8qIGRlZmF1bHQgdG8gbm8gc2NhbGluZyBmb3IgLXF0YWJsZXMgKi8KKyAgZm9yY2VfYmFzZWxpbmUgPSBGQUxTRTsJLyogYnkgZGVmYXVsdCwgYWxsb3cgMTYtYml0IHF1YW50aXplcnMgKi8KKyAgc2ltcGxlX3Byb2dyZXNzaXZlID0gRkFMU0U7CisgIGlzX3RhcmdhID0gRkFMU0U7CisgIG91dGZpbGVuYW1lID0gTlVMTDsKKyAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPSAwOworICBpZiAoZGVmYXVsdF9tYXhtZW0gPiAwKQkvKiBvdmVycmlkZSBsaWJyYXJ5J3MgZGVmYXVsdCB2YWx1ZSAqLworICAgIGNpbmZvLT5tZW0tPm1heF9tZW1vcnlfdG9fdXNlID0gZGVmYXVsdF9tYXhtZW07CisKKyAgLyogU2NhbiBjb21tYW5kIGxpbmUgb3B0aW9ucywgYWRqdXN0IHBhcmFtZXRlcnMgKi8KKworICBmb3IgKGFyZ24gPSAxOyBhcmduIDwgYXJnYzsgYXJnbisrKSB7CisgICAgYXJnID0gYXJndlthcmduXTsKKyAgICBpZiAoKmFyZyAhPSAnLScpIHsKKyAgICAgIC8qIE5vdCBhIHN3aXRjaCwgbXVzdCBiZSBhIGZpbGUgbmFtZSBhcmd1bWVudCAqLworICAgICAgaWYgKGFyZ24gPD0gbGFzdF9maWxlX2FyZ19zZWVuKSB7CisJb3V0ZmlsZW5hbWUgPSBOVUxMOwkvKiAtb3V0ZmlsZSBhcHBsaWVzIHRvIGp1c3Qgb25lIGlucHV0IGZpbGUgKi8KKwljb250aW51ZTsJCS8qIGlnbm9yZSB0aGlzIG5hbWUgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOwkJCS8qIGVsc2UgZG9uZSBwYXJzaW5nIHN3aXRjaGVzICovCisgICAgfQorICAgIGFyZysrOwkJCS8qIGFkdmFuY2UgcGFzdCBzd2l0Y2ggbWFya2VyIGNoYXJhY3RlciAqLworCisgICAgaWYgKGtleW1hdGNoKGFyZywgImFyaXRobWV0aWMiLCAxKSkgeworICAgICAgLyogVXNlIGFyaXRobWV0aWMgY29kaW5nLiAqLworI2lmZGVmIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAorICAgICAgY2luZm8tPmFyaXRoX2NvZGUgPSBUUlVFOworI2Vsc2UKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvcnJ5LCBhcml0aG1ldGljIGNvZGluZyBub3Qgc3VwcG9ydGVkXG4iLAorCSAgICAgIHByb2duYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyNlbmRpZgorCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJiYXNlbGluZSIsIDEpKSB7CisgICAgICAvKiBGb3JjZSBiYXNlbGluZS1jb21wYXRpYmxlIG91dHB1dCAoOC1iaXQgcXVhbnRpemVyIHZhbHVlcykuICovCisgICAgICBmb3JjZV9iYXNlbGluZSA9IFRSVUU7CisKKyNpZm5kZWYgSlNJTURfTUFTS0ZVTkNfTk9UX1NVUFBPUlRFRAorICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibm9zaW1kIiAsIDQpKSB7CisgICAgICBqcGVnX3NpbWRfbWFzaygoal9jb21tb25fcHRyKSBjaW5mbywgSlNJTURfTk9ORSwgSlNJTURfQUxMKTsKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm5vbW14IiAgLCAzKSkgeworICAgICAganBlZ19zaW1kX21hc2soKGpfY29tbW9uX3B0cikgY2luZm8sIEpTSU1EX05PTkUsIEpTSU1EX01NWCk7CisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJubzNkbm93IiwgMykpIHsKKyAgICAgIGpwZWdfc2ltZF9tYXNrKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKU0lNRF9OT05FLCBKU0lNRF8zRE5PVyk7CisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJub3NzZSIgICwgNCkpIHsKKyAgICAgIGpwZWdfc2ltZF9tYXNrKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKU0lNRF9OT05FLCBKU0lNRF9TU0UpOworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibm9zc2UyIiAsIDYpKSB7CisgICAgICBqcGVnX3NpbWRfbWFzaygoal9jb21tb25fcHRyKSBjaW5mbywgSlNJTURfTk9ORSwgSlNJTURfU1NFMik7CisjZW5kaWYgLyogIUpTSU1EX01BU0tGVU5DX05PVF9TVVBQT1JURUQgKi8KKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiZGN0IiwgMikpIHsKKyAgICAgIC8qIFNlbGVjdCBEQ1QgYWxnb3JpdGhtLiAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKwl1c2FnZSgpOworICAgICAgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJpbnQiLCAxKSkgeworCWNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9JU0xPVzsKKyAgICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImZhc3QiLCAyKSkgeworCWNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9JRkFTVDsKKyAgICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImZsb2F0IiwgMikpIHsKKwljaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfRkxPQVQ7CisgICAgICB9IGVsc2UKKwl1c2FnZSgpOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJkZWJ1ZyIsIDEpIHx8IGtleW1hdGNoKGFyZywgInZlcmJvc2UiLCAxKSkgeworICAgICAgLyogRW5hYmxlIGRlYnVnIHByaW50b3V0cy4gKi8KKyAgICAgIC8qIE9uIGZpcnN0IC1kLCBwcmludCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uICovCisgICAgICBzdGF0aWMgYm9vbGVhbiBwcmludGVkX3ZlcnNpb24gPSBGQUxTRTsKKworICAgICAgaWYgKCEgcHJpbnRlZF92ZXJzaW9uKSB7CisJZnByaW50ZihzdGRlcnIsICJJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgQ0pQRUcsIHZlcnNpb24gJXNcbiVzXG4iLAorCQlKVkVSU0lPTiwgSkNPUFlSSUdIVCk7CisJZnByaW50ZihzdGRlcnIsCisJCSJcbng4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwgdmVyc2lvbiAlc1xuXG4iLAorCQlKUEVHX1NJTURFWFRfVkVSX1NUUik7CisjaWZuZGVmIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiU0lNRCBpbnN0cnVjdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0gOiIsCisJCQlqcGVnX3NpbWRfc3VwcG9ydChOVUxMKSk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxuICAgICAgPT09IFNJTUQgT3BlcmF0aW9uIE1vZGVzID09PVxuIik7CisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorCXByaW50X3NpbWRfaW5mbyhzdGRlcnIsICJBY2N1cmF0ZSBpbnRlZ2VyIERDVCAgKC1kY3QgaW50KSAgIDoiLAorCQkJanBlZ19zaW1kX2ZvcndhcmRfZGN0KGNpbmZvLCBKRENUX0lTTE9XKSk7CisjZW5kaWYKKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisJcHJpbnRfc2ltZF9pbmZvKHN0ZGVyciwgIkZhc3QgaW50ZWdlciBEQ1QgICAgICAoLWRjdCBmYXN0KSAgOiIsCisJCQlqcGVnX3NpbWRfZm9yd2FyZF9kY3QoY2luZm8sIEpEQ1RfSUZBU1QpKTsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiRmxvYXRpbmctcG9pbnQgRENUICAgICgtZGN0IGZsb2F0KSA6IiwKKwkJCWpwZWdfc2ltZF9mb3J3YXJkX2RjdChjaW5mbywgSkRDVF9GTE9BVCkpOworI2VuZGlmCisJcHJpbnRfc2ltZF9pbmZvKHN0ZGVyciwgIkRvd25zYW1wbGluZyAoLXNhbXBsZSAyeDIgb3IgMngxKSAgOiIsCisJCQlqcGVnX3NpbWRfZG93bnNhbXBsZXIoY2luZm8pKTsKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiQ29sb3JzcGFjZSBjb252ZXJzaW9uIChSR0ItPllDYkNyKSA6IiwKKwkJCWpwZWdfc2ltZF9jb2xvcl9jb252ZXJ0ZXIoY2luZm8pKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisjZW5kaWYgLyogIUpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQgKi8KKwlwcmludGVkX3ZlcnNpb24gPSBUUlVFOworICAgICAgfQorICAgICAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwrKzsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiZ3JheXNjYWxlIiwgMikgfHwga2V5bWF0Y2goYXJnLCAiZ3JleXNjYWxlIiwyKSkgeworICAgICAgLyogRm9yY2UgYSBtb25vY2hyb21lIEpQRUcgZmlsZSB0byBiZSBnZW5lcmF0ZWQuICovCisgICAgICBqcGVnX3NldF9jb2xvcnNwYWNlKGNpbmZvLCBKQ1NfR1JBWVNDQUxFKTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibWF4bWVtb3J5IiwgMykpIHsKKyAgICAgIC8qIE1heGltdW0gbWVtb3J5IGluIEtiIChvciBNYiB3aXRoICdtJykuICovCisgICAgICBsb25nIGx2YWw7CisgICAgICBjaGFyIGNoID0gJ3gnOworCisgICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworCXVzYWdlKCk7CisgICAgICBpZiAoc3NjYW5mKGFyZ3ZbYXJnbl0sICIlbGQlYyIsICZsdmFsLCAmY2gpIDwgMSkKKwl1c2FnZSgpOworICAgICAgaWYgKGNoID09ICdtJyB8fCBjaCA9PSAnTScpCisJbHZhbCAqPSAxMDAwTDsKKyAgICAgIGNpbmZvLT5tZW0tPm1heF9tZW1vcnlfdG9fdXNlID0gbHZhbCAqIDEwMDBMOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJvcHRpbWl6ZSIsIDEpIHx8IGtleW1hdGNoKGFyZywgIm9wdGltaXNlIiwgMSkpIHsKKyAgICAgIC8qIEVuYWJsZSBlbnRyb3B5IHBhcm0gb3B0aW1pemF0aW9uLiAqLworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorICAgICAgY2luZm8tPm9wdGltaXplX2NvZGluZyA9IFRSVUU7CisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIGVudHJvcHkgb3B0aW1pemF0aW9uIHdhcyBub3QgY29tcGlsZWRcbiIsCisJICAgICAgcHJvZ25hbWUpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworI2VuZGlmCisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm91dGZpbGUiLCA0KSkgeworICAgICAgLyogU2V0IG91dHB1dCBmaWxlIG5hbWUuICovCisgICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworCXVzYWdlKCk7CisgICAgICBvdXRmaWxlbmFtZSA9IGFyZ3ZbYXJnbl07CS8qIHNhdmUgaXQgYXdheSBmb3IgbGF0ZXIgdXNlICovCisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInByb2dyZXNzaXZlIiwgMSkpIHsKKyAgICAgIC8qIFNlbGVjdCBzaW1wbGUgcHJvZ3Jlc3NpdmUgbW9kZS4gKi8KKyNpZmRlZiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRAorICAgICAgc2ltcGxlX3Byb2dyZXNzaXZlID0gVFJVRTsKKyAgICAgIC8qIFdlIG11c3QgcG9zdHBvbmUgZXhlY3V0aW9uIHVudGlsIG51bV9jb21wb25lbnRzIGlzIGtub3duLiAqLworI2Vsc2UKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvcnJ5LCBwcm9ncmVzc2l2ZSBvdXRwdXQgd2FzIG5vdCBjb21waWxlZFxuIiwKKwkgICAgICBwcm9nbmFtZSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisjZW5kaWYKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicXVhbGl0eSIsIDEpKSB7CisgICAgICAvKiBRdWFsaXR5IGZhY3RvciAocXVhbnRpemF0aW9uIHRhYmxlIHNjYWxpbmcgZmFjdG9yKS4gKi8KKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisJdXNhZ2UoKTsKKyAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiVkIiwgJnF1YWxpdHkpICE9IDEpCisJdXNhZ2UoKTsKKyAgICAgIC8qIENoYW5nZSBzY2FsZSBmYWN0b3IgaW4gY2FzZSAtcXRhYmxlcyBpcyBwcmVzZW50LiAqLworICAgICAgcV9zY2FsZV9mYWN0b3IgPSBqcGVnX3F1YWxpdHlfc2NhbGluZyhxdWFsaXR5KTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicXNsb3RzIiwgMikpIHsKKyAgICAgIC8qIFF1YW50aXphdGlvbiB0YWJsZSBzbG90IG51bWJlcnMuICovCisgICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworCXVzYWdlKCk7CisgICAgICBxc2xvdHNhcmcgPSBhcmd2W2FyZ25dOworICAgICAgLyogTXVzdCBkZWxheSBzZXR0aW5nIHFzbG90cyB1bnRpbCBhZnRlciB3ZSBoYXZlIHByb2Nlc3NlZCBhbnkKKyAgICAgICAqIGNvbG9yc3BhY2UtZGV0ZXJtaW5pbmcgc3dpdGNoZXMsIHNpbmNlIGpwZWdfc2V0X2NvbG9yc3BhY2Ugc2V0cworICAgICAgICogZGVmYXVsdCBxdWFudCB0YWJsZSBudW1iZXJzLgorICAgICAgICovCisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInF0YWJsZXMiLCAyKSkgeworICAgICAgLyogUXVhbnRpemF0aW9uIHRhYmxlcyBmZXRjaGVkIGZyb20gZmlsZS4gKi8KKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisJdXNhZ2UoKTsKKyAgICAgIHF0YWJsZWZpbGUgPSBhcmd2W2FyZ25dOworICAgICAgLyogV2UgcG9zdHBvbmUgYWN0dWFsbHkgcmVhZGluZyB0aGUgZmlsZSBpbiBjYXNlIC1xdWFsaXR5IGNvbWVzIGxhdGVyLiAqLworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJyZXN0YXJ0IiwgMSkpIHsKKyAgICAgIC8qIFJlc3RhcnQgaW50ZXJ2YWwgaW4gTUNVIHJvd3MgKG9yIGluIE1DVXMgd2l0aCAnYicpLiAqLworICAgICAgbG9uZyBsdmFsOworICAgICAgY2hhciBjaCA9ICd4JzsKKworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKwl1c2FnZSgpOworICAgICAgaWYgKHNzY2FuZihhcmd2W2FyZ25dLCAiJWxkJWMiLCAmbHZhbCwgJmNoKSA8IDEpCisJdXNhZ2UoKTsKKyAgICAgIGlmIChsdmFsIDwgMCB8fCBsdmFsID4gNjU1MzVMKQorCXVzYWdlKCk7CisgICAgICBpZiAoY2ggPT0gJ2InIHx8IGNoID09ICdCJykgeworCWNpbmZvLT5yZXN0YXJ0X2ludGVydmFsID0gKHVuc2lnbmVkIGludCkgbHZhbDsKKwljaW5mby0+cmVzdGFydF9pbl9yb3dzID0gMDsgLyogZWxzZSBwcmlvciAnLXJlc3RhcnQgbicgb3ZlcnJpZGVzIG1lICovCisgICAgICB9IGVsc2UgeworCWNpbmZvLT5yZXN0YXJ0X2luX3Jvd3MgPSAoaW50KSBsdmFsOworCS8qIHJlc3RhcnRfaW50ZXJ2YWwgd2lsbCBiZSBjb21wdXRlZCBkdXJpbmcgc3RhcnR1cCAqLworICAgICAgfQorCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJzYW1wbGUiLCAyKSkgeworICAgICAgLyogU2V0IHNhbXBsaW5nIGZhY3RvcnMuICovCisgICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworCXVzYWdlKCk7CisgICAgICBzYW1wbGVhcmcgPSBhcmd2W2FyZ25dOworICAgICAgLyogTXVzdCBkZWxheSBzZXR0aW5nIHNhbXBsZSBmYWN0b3JzIHVudGlsIGFmdGVyIHdlIGhhdmUgcHJvY2Vzc2VkIGFueQorICAgICAgICogY29sb3JzcGFjZS1kZXRlcm1pbmluZyBzd2l0Y2hlcywgc2luY2UganBlZ19zZXRfY29sb3JzcGFjZSBzZXRzCisgICAgICAgKiBkZWZhdWx0IHNhbXBsaW5nIGZhY3RvcnMuCisgICAgICAgKi8KKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAic2NhbnMiLCAyKSkgeworICAgICAgLyogU2V0IHNjYW4gc2NyaXB0LiAqLworI2lmZGVmIENfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAorICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKwl1c2FnZSgpOworICAgICAgc2NhbnNhcmcgPSBhcmd2W2FyZ25dOworICAgICAgLyogV2UgbXVzdCBwb3N0cG9uZSByZWFkaW5nIHRoZSBmaWxlIGluIGNhc2UgLXByb2dyZXNzaXZlIGFwcGVhcnMuICovCisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIG11bHRpLXNjYW4gb3V0cHV0IHdhcyBub3QgY29tcGlsZWRcbiIsCisJICAgICAgcHJvZ25hbWUpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworI2VuZGlmCisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInNtb290aCIsIDIpKSB7CisgICAgICAvKiBTZXQgaW5wdXQgc21vb3RoaW5nIGZhY3Rvci4gKi8KKyAgICAgIGludCB2YWw7CisKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisJdXNhZ2UoKTsKKyAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiVkIiwgJnZhbCkgIT0gMSkKKwl1c2FnZSgpOworICAgICAgaWYgKHZhbCA8IDAgfHwgdmFsID4gMTAwKQorCXVzYWdlKCk7CisgICAgICBjaW5mby0+c21vb3RoaW5nX2ZhY3RvciA9IHZhbDsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAidGFyZ2EiLCAxKSkgeworICAgICAgLyogSW5wdXQgZmlsZSBpcyBUYXJnYSBmb3JtYXQuICovCisgICAgICBpc190YXJnYSA9IFRSVUU7CisKKyAgICB9IGVsc2UgeworICAgICAgdXNhZ2UoKTsJCQkvKiBib2d1cyBzd2l0Y2ggKi8KKyAgICB9CisgIH0KKworICAvKiBQb3N0LXN3aXRjaC1zY2FubmluZyBjbGVhbnVwICovCisKKyAgaWYgKGZvcl9yZWFsKSB7CisKKyAgICAvKiBTZXQgcXVhbnRpemF0aW9uIHRhYmxlcyBmb3Igc2VsZWN0ZWQgcXVhbGl0eS4gKi8KKyAgICAvKiBTb21lIG9yIGFsbCBtYXkgYmUgb3ZlcnJpZGRlbiBpZiAtcXRhYmxlcyBpcyBwcmVzZW50LiAqLworICAgIGpwZWdfc2V0X3F1YWxpdHkoY2luZm8sIHF1YWxpdHksIGZvcmNlX2Jhc2VsaW5lKTsKKworICAgIGlmIChxdGFibGVmaWxlICE9IE5VTEwpCS8qIHByb2Nlc3MgLXF0YWJsZXMgaWYgaXQgd2FzIHByZXNlbnQgKi8KKyAgICAgIGlmICghIHJlYWRfcXVhbnRfdGFibGVzKGNpbmZvLCBxdGFibGVmaWxlLAorCQkJICAgICAgcV9zY2FsZV9mYWN0b3IsIGZvcmNlX2Jhc2VsaW5lKSkKKwl1c2FnZSgpOworCisgICAgaWYgKHFzbG90c2FyZyAhPSBOVUxMKQkvKiBwcm9jZXNzIC1xc2xvdHMgaWYgaXQgd2FzIHByZXNlbnQgKi8KKyAgICAgIGlmICghIHNldF9xdWFudF9zbG90cyhjaW5mbywgcXNsb3RzYXJnKSkKKwl1c2FnZSgpOworCisgICAgaWYgKHNhbXBsZWFyZyAhPSBOVUxMKQkvKiBwcm9jZXNzIC1zYW1wbGUgaWYgaXQgd2FzIHByZXNlbnQgKi8KKyAgICAgIGlmICghIHNldF9zYW1wbGVfZmFjdG9ycyhjaW5mbywgc2FtcGxlYXJnKSkKKwl1c2FnZSgpOworCisjaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQKKyAgICBpZiAoc2ltcGxlX3Byb2dyZXNzaXZlKQkvKiBwcm9jZXNzIC1wcm9ncmVzc2l2ZTsgLXNjYW5zIGNhbiBvdmVycmlkZSAqLworICAgICAganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24oY2luZm8pOworI2VuZGlmCisKKyNpZmRlZiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKKyAgICBpZiAoc2NhbnNhcmcgIT0gTlVMTCkJLyogcHJvY2VzcyAtc2NhbnMgaWYgaXQgd2FzIHByZXNlbnQgKi8KKyAgICAgIGlmICghIHJlYWRfc2Nhbl9zY3JpcHQoY2luZm8sIHNjYW5zYXJnKSkKKwl1c2FnZSgpOworI2VuZGlmCisgIH0KKworICByZXR1cm4gYXJnbjsJCQkvKiByZXR1cm4gaW5kZXggb2YgbmV4dCBhcmcgKGZpbGUgbmFtZSkgKi8KK30KKworCisvKgorICogQ2hlY2sgZm9yIG92ZXJ3cml0ZSBvZiBhbiBleGlzdGluZyBmaWxlOyBjbGVhciBpdCB3aXRoIHVzZXIKKyAqLworCisjaWZuZGVmIE5PX09WRVJXUklURV9DSEVDSworCitMT0NBTChib29sZWFuKQoraXNfd3JpdGVfb2sgKGNoYXIgKiBvdXRmbmFtZSkKK3sKKyAgRklMRSAqIG9maWxlOworICBpbnQgY2g7CisKKyAgb2ZpbGUgPSBmb3BlbihvdXRmbmFtZSwgUkVBRF9CSU5BUlkpOworICBpZiAob2ZpbGUgPT0gTlVMTCkKKyAgICByZXR1cm4gVFJVRTsJCS8qIG5vdCBwcmVzZW50ICovCisgIGZjbG9zZShvZmlsZSk7CQkvKiBvb3BzLCBpdCBpcyBwcmVzZW50ICovCisKKyAgZm9yICg7OykgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXMgYWxyZWFkeSBleGlzdHMsIG92ZXJ3cml0ZSBpdD8gW3kvbl0gIiwKKwkgICAgb3V0Zm5hbWUpOworICAgIGZmbHVzaChzdGRlcnIpOworICAgIGNoID0gZ2V0YyhzdGRpbik7CisgICAgaWYgKGNoICE9ICdcbicpCQkvKiBmbHVzaCByZXN0IG9mIGxpbmUgKi8KKyAgICAgIHdoaWxlIChnZXRjKHN0ZGluKSAhPSAnXG4nKQorCS8qIG5vdGhpbmcgKi87CisKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAnWSc6CisgICAgY2FzZSAneSc6CisgICAgICByZXR1cm4gVFJVRTsKKyAgICBjYXNlICdOJzoKKyAgICBjYXNlICduJzoKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICAvKiBvdGhlcndpc2UsIGFzayBhZ2FpbiAqLworICAgIH0KKyAgfQorfQorCisjZW5kaWYKKworCisvKgorICogUHJvY2VzcyBhIHNpbmdsZSBpbnB1dCBmaWxlIG5hbWUsIGFuZCByZXR1cm4gaXRzIGluZGV4IGluIGFyZ3ZbXS4KKyAqIEZpbGUgbmFtZXMgYXQgb3IgdG8gbGVmdCBvZiBvbGRfZmlsZV9pbmRleCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGFscmVhZHkuCisgKi8KKworTE9DQUwoaW50KQorcHJvY2Vzc19vbmVfZmlsZSAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgb2xkX2ZpbGVfaW5kZXgpCit7CisgIHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCBjaW5mbzsKKyAgc3RydWN0IGpwZWdfZXJyb3JfbWdyIGplcnI7CisgIGNoYXIgKmluZmlsZW5hbWU7CisgIGNoYXIgd29ya2ZpbGVuYW1lW1BBVEhfTUFYXTsKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgc3RydWN0IGNkanBlZ19wcm9ncmVzc19tZ3IgcHJvZ3Jlc3M7CisjZW5kaWYKKyAgaW50IGZpbGVfaW5kZXg7CisgIGNqcGVnX3NvdXJjZV9wdHIgc3JjX21ncjsKKyAgRklMRSAqIGlucHV0X2ZpbGUgPSBOVUxMOworICBGSUxFICogb3V0cHV0X2ZpbGUgPSBOVUxMOworICBKRElNRU5TSU9OIG51bV9zY2FubGluZXM7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgSlBFRyBjb21wcmVzc2lvbiBvYmplY3Qgd2l0aCBkZWZhdWx0IGVycm9yIGhhbmRsaW5nLiAqLworICBjaW5mby5lcnIgPSBqcGVnX3N0ZF9lcnJvcigmamVycik7CisgIGpwZWdfY3JlYXRlX2NvbXByZXNzKCZjaW5mbyk7CisgIC8qIEFkZCBzb21lIGFwcGxpY2F0aW9uLXNwZWNpZmljIGVycm9yIG1lc3NhZ2VzIChmcm9tIGNkZXJyb3IuaCkgKi8KKyAgamVyci5hZGRvbl9tZXNzYWdlX3RhYmxlID0gY2RqcGVnX21lc3NhZ2VfdGFibGU7CisgIGplcnIuZmlyc3RfYWRkb25fbWVzc2FnZSA9IEpNU0dfRklSU1RBRERPTkNPREU7CisgIGplcnIubGFzdF9hZGRvbl9tZXNzYWdlID0gSk1TR19MQVNUQURET05DT0RFOworCisgIC8qIE5vdyBzYWZlIHRvIGVuYWJsZSBzaWduYWwgY2F0Y2hlci4gKi8KKyNpZmRlZiBORUVEX1NJR05BTF9DQVRDSEVSCisgIGVuYWJsZV9zaWduYWxfY2F0Y2hlcigoal9jb21tb25fcHRyKSAmY2luZm8pOworI2VuZGlmCisKKyAgLyogSW5pdGlhbGl6ZSBKUEVHIHBhcmFtZXRlcnMuCisgICAqIE11Y2ggb2YgdGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBsYXRlci4KKyAgICogSW4gcGFydGljdWxhciwgd2UgZG9uJ3QgeWV0IGtub3cgdGhlIGlucHV0IGZpbGUncyBjb2xvciBzcGFjZSwKKyAgICogYnV0IHdlIG5lZWQgdG8gcHJvdmlkZSBzb21lIHZhbHVlIGZvciBqcGVnX3NldF9kZWZhdWx0cygpIHRvIHdvcmsuCisgICAqLworCisgIGNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsgLyogYXJiaXRyYXJ5IGd1ZXNzICovCisgIGpwZWdfc2V0X2RlZmF1bHRzKCZjaW5mbyk7CisKKyAgLyogU2NhbiBjb21tYW5kIGxpbmUgdG8gZmluZCBuZXh0IGZpbGUgbmFtZS4KKyAgICogSXQgaXMgY29udmVuaWVudCB0byB1c2UganVzdCBvbmUgc3dpdGNoLXBhcnNpbmcgcm91dGluZSwgYnV0IHRoZSBzd2l0Y2gKKyAgICogdmFsdWVzIHJlYWQgaGVyZSBhcmUgaWdub3JlZDsgd2Ugd2lsbCByZXNjYW4gdGhlIHN3aXRjaGVzIGFmdGVyIG9wZW5pbmcKKyAgICogdGhlIGlucHV0IGZpbGUuCisgICAqLworCisgIGZpbGVfaW5kZXggPSBwYXJzZV9zd2l0Y2hlcygmY2luZm8sIGFyZ2MsIGFyZ3YsIG9sZF9maWxlX2luZGV4LCBGQUxTRSk7CisgIGlmIChmaWxlX2luZGV4ID49IGFyZ2MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBtaXNzaW5nIGlucHV0IGZpbGUgbmFtZVxuIiwgcHJvZ25hbWUpOworICAgIHVzYWdlKCk7CisgIH0KKworICAvKiBPcGVuIHRoZSBpbnB1dCBmaWxlLiAqLworICBpbmZpbGVuYW1lID0gYXJndltmaWxlX2luZGV4XTsKKyAgaWYgKChpbnB1dF9maWxlID0gZm9wZW4oaW5maWxlbmFtZSwgUkVBRF9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiAlc1xuIiwgcHJvZ25hbWUsIGluZmlsZW5hbWUpOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgIHN0YXJ0X3Byb2dyZXNzX21vbml0b3IoKGpfY29tbW9uX3B0cikgJmNpbmZvLCAmcHJvZ3Jlc3MpOworI2VuZGlmCisKKyAgLyogRmlndXJlIG91dCB0aGUgaW5wdXQgZmlsZSBmb3JtYXQsIGFuZCBzZXQgdXAgdG8gcmVhZCBpdC4gKi8KKyAgc3JjX21nciA9IHNlbGVjdF9maWxlX3R5cGUoJmNpbmZvLCBpbnB1dF9maWxlKTsKKyAgc3JjX21nci0+aW5wdXRfZmlsZSA9IGlucHV0X2ZpbGU7CisKKyAgLyogUmVhZCB0aGUgaW5wdXQgZmlsZSBoZWFkZXIgdG8gb2J0YWluIGZpbGUgc2l6ZSAmIGNvbG9yc3BhY2UuICovCisgICgqc3JjX21nci0+c3RhcnRfaW5wdXQpICgmY2luZm8sIHNyY19tZ3IpOworCisgIC8qIE5vdyB0aGF0IHdlIGtub3cgaW5wdXQgY29sb3JzcGFjZSwgZml4IGNvbG9yc3BhY2UtZGVwZW5kZW50IGRlZmF1bHRzICovCisgIGpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlKCZjaW5mbyk7CisKKyAgLyogQWRqdXN0IGRlZmF1bHQgY29tcHJlc3Npb24gcGFyYW1ldGVycyBieSByZS1wYXJzaW5nIHRoZSBvcHRpb25zICovCisgIGZpbGVfaW5kZXggPSBwYXJzZV9zd2l0Y2hlcygmY2luZm8sIGFyZ2MsIGFyZ3YsIG9sZF9maWxlX2luZGV4LCBUUlVFKTsKKworICAvKiBJZiB1c2VyIGRpZG4ndCBzdXBwbHkgLW91dGZpbGUgc3dpdGNoLCBzZWxlY3Qgb3V0cHV0IGZpbGUgbmFtZS4gKi8KKyAgaWYgKG91dGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICBpbnQgaTsKKworICAgIG91dGZpbGVuYW1lID0gd29ya2ZpbGVuYW1lOworICAgIC8qIE1ha2Ugb3V0ZmlsZW5hbWUgYmUgaW5maWxlbmFtZSB3aXRoIC5qcGcgc3Vic3RpdHV0ZWQgZm9yIGV4dGVuc2lvbiAqLworICAgIHN0cmNweShvdXRmaWxlbmFtZSwgaW5maWxlbmFtZSk7CisgICAgZm9yIChpID0gc3RybGVuKG91dGZpbGVuYW1lKS0xOyBpID49IDA7IGktLSkgeworICAgICAgc3dpdGNoIChvdXRmaWxlbmFtZVtpXSkgeworICAgICAgY2FzZSAnOic6CisgICAgICBjYXNlICcvJzoKKyAgICAgIGNhc2UgJ1xcJzoKKwlpID0gMDsJCQkvKiBzdG9wIHNjYW5uaW5nICovCisJYnJlYWs7CisgICAgICBjYXNlICcuJzoKKwlvdXRmaWxlbmFtZVtpXSA9ICdcMCc7CS8qIGxvcCBvZmYgZXhpc3RpbmcgZXh0ZW5zaW9uICovCisJaSA9IDA7CQkJLyogc3RvcCBzY2FubmluZyAqLworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwlicmVhazsJCQkvKiBrZWVwIHNjYW5uaW5nICovCisgICAgICB9CisgICAgfQorICAgIHN0cmNhdChvdXRmaWxlbmFtZSwgIi5qcGciKTsKKyAgfQorCisgIGZwcmludGYoc3RkZXJyLCAiQ29tcHJlc3NpbmcgJXMgPT4gJXNcbiIsIGluZmlsZW5hbWUsIG91dGZpbGVuYW1lKTsKKyNpZm5kZWYgTk9fT1ZFUldSSVRFX0NIRUNLCisgIGlmICghIGlzX3dyaXRlX29rKG91dGZpbGVuYW1lKSkKKyAgICBnb3RvIGZhaWw7CisjZW5kaWYKKworICAvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZS4gKi8KKyAgaWYgKChvdXRwdXRfZmlsZSA9IGZvcGVuKG91dGZpbGVuYW1lLCBXUklURV9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3QgY3JlYXRlICVzXG4iLCBwcm9nbmFtZSwgb3V0ZmlsZW5hbWUpOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIC8qIFNwZWNpZnkgZGF0YSBkZXN0aW5hdGlvbiBmb3IgY29tcHJlc3Npb24gKi8KKyAganBlZ19zdGRpb19kZXN0KCZjaW5mbywgb3V0cHV0X2ZpbGUpOworCisgIC8qIFN0YXJ0IGNvbXByZXNzb3IgKi8KKyAganBlZ19zdGFydF9jb21wcmVzcygmY2luZm8sIFRSVUUpOworCisgIC8qIFByb2Nlc3MgZGF0YSAqLworICB3aGlsZSAoY2luZm8ubmV4dF9zY2FubGluZSA8IGNpbmZvLmltYWdlX2hlaWdodCkgeworICAgIG51bV9zY2FubGluZXMgPSAoKnNyY19tZ3ItPmdldF9waXhlbF9yb3dzKSAoJmNpbmZvLCBzcmNfbWdyKTsKKyAgICAodm9pZCkganBlZ193cml0ZV9zY2FubGluZXMoJmNpbmZvLCBzcmNfbWdyLT5idWZmZXIsIG51bV9zY2FubGluZXMpOworICB9CisKKyAgLyogRmluaXNoIGNvbXByZXNzaW9uIGFuZCByZWxlYXNlIG1lbW9yeSAqLworICAoKnNyY19tZ3ItPmZpbmlzaF9pbnB1dCkgKCZjaW5mbywgc3JjX21ncik7CisgIGpwZWdfZmluaXNoX2NvbXByZXNzKCZjaW5mbyk7CisKKyAgLyogQ2xlYW4gdXAgYW5kIGV4aXQgKi8KK2ZhaWw6CisgIGpwZWdfZGVzdHJveV9jb21wcmVzcygmY2luZm8pOworCisgIGlmIChpbnB1dF9maWxlICE9IE5VTEwpIGZjbG9zZShpbnB1dF9maWxlKTsKKyAgaWYgKG91dHB1dF9maWxlICE9IE5VTEwpIGZjbG9zZShvdXRwdXRfZmlsZSk7CisKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgZW5kX3Byb2dyZXNzX21vbml0b3IoKGpfY29tbW9uX3B0cikgJmNpbmZvKTsKKyNlbmRpZgorCisgIC8qIERpc2FibGUgc2lnbmFsIGNhdGNoZXIuICovCisjaWZkZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUgorICBlbmFibGVfc2lnbmFsX2NhdGNoZXIoKGpfY29tbW9uX3B0cikgTlVMTCk7CisjZW5kaWYKKworICByZXR1cm4gZmlsZV9pbmRleDsKK30KKworCisvKgorICogVGhlIG1haW4gcHJvZ3JhbS4KKyAqLworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGZpbGVfaW5kZXg7CisKKyAgLyogT24gTWFjLCBmZXRjaCBhIGNvbW1hbmQgbGluZS4gKi8KKyNpZmRlZiBVU0VfQ0NPTU1BTkQKKyAgYXJnYyA9IGNjb21tYW5kKCZhcmd2KTsKKyNlbmRpZgorCisjaWZkZWYgTVNET1MKKyAgcHJvZ25hbWUgPSAiY2pwZWciOwkJLyogRE9TIHRlbmRzIHRvIGJlIHRvbyB2ZXJib3NlIGFib3V0IGFyZ3ZbMF0gKi8KKyNlbHNlCisgIHByb2duYW1lID0gYXJndlswXTsKKyAgaWYgKHByb2duYW1lID09IE5VTEwgfHwgcHJvZ25hbWVbMF0gPT0gMCkKKyAgICBwcm9nbmFtZSA9ICJjanBlZyI7CQkvKiBpbiBjYXNlIEMgbGlicmFyeSBkb2Vzbid0IHByb3ZpZGUgaXQgKi8KKyNlbmRpZgorCisgIC8qIFRoZSBkZWZhdWx0IG1heG1lbSBtdXN0IGJlIGNvbXB1dGVkIG9ubHkgb25jZSBhdCBwcm9ncmFtIHN0YXJ0dXAsCisgICAqIHNpbmNlIHJlbGVhc2luZyBtZW1vcnkgd2l0aCBmcmVlKCkgd29uJ3QgZ2l2ZSBpdCBiYWNrIHRvIHRoZSBPUy4KKyAgICovCisjaWZkZWYgRlJFRV9NRU1fRVNUSU1BVEUKKyAgZGVmYXVsdF9tYXhtZW0gPSBGUkVFX01FTV9FU1RJTUFURTsKKyNlbHNlCisgIGRlZmF1bHRfbWF4bWVtID0gMDsKKyNlbmRpZgorCisgIC8qIFNjYW4gY29tbWFuZCBsaW5lLCBwYXJzZSBzd2l0Y2hlcyBhbmQgbG9jYXRlIGlucHV0IGZpbGUgbmFtZXMgKi8KKworICBpZiAoYXJnYyA8IDIpCisgICAgdXNhZ2UoKTsJCQkvKiBub3RoaW5nIG9uIHRoZSBjb21tYW5kIGxpbmU/PyAqLworCisgIGZpbGVfaW5kZXggPSAwOworCisgIHdoaWxlIChmaWxlX2luZGV4IDwgYXJnYy0xKQorICAgIGZpbGVfaW5kZXggPSBwcm9jZXNzX29uZV9maWxlKGFyZ2MsIGFyZ3YsIGZpbGVfaW5kZXgpOworCisgIC8qIEFsbCBkb25lLiAqLworICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgIHJldHVybiAwOwkJCS8qIHN1cHByZXNzIG5vLXJldHVybi12YWx1ZSB3YXJuaW5ncyAqLworfQpkaWZmIC0tZ2l0IGEvYWx0dWkvZGpwZWcuYyBiL2FsdHVpL2RqcGVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwMGQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2FsdHVpL2RqcGVnLmMKQEAgLTAsMCArMSw4MzYgQEAKKy8qCisgKiBhbHRlcm5hdGUgZGpwZWcuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgZm9yIFNJTUQgZXh0ZW5zaW9uLgorICogTGFzdCBNb2RpZmllZCA6IEphbnVhcnkgNiwgMjAwNgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFuIGFsdGVybmF0ZSB1c2VyIGludGVyZmFjZSBmb3IgdGhlIEpQRUcgZGVjb21wcmVzc29yLgorICogT25lIG9yIG1vcmUgaW5wdXQgZmlsZXMgYXJlIG5hbWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBvdXRwdXQgZmlsZQorICogbmFtZXMgYXJlIGNyZWF0ZWQgYnkgc3Vic3RpdHV0aW5nIGFuIGFwcHJvcHJpYXRlIGV4dGVuc2lvbi4KKyAqLworCisjaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgImp2ZXJzaW9uLmgiCQkvKiBmb3IgdmVyc2lvbiBtZXNzYWdlICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgkJLyogdG8gZGVjbGFyZSBpc3ByaW50KCkgKi8KKworI2lmZGVmIFVTRV9DQ09NTUFORAkJLyogY29tbWFuZC1saW5lIHJlYWRlciBmb3IgTWFjaW50b3NoICovCisjaWZkZWYgX19NV0VSS1NfXworI2luY2x1ZGUgPFNJT1VYLmg+ICAgICAgICAgICAgICAvKiBNZXRyb3dlcmtzIG5lZWRzIHRoaXMgKi8KKyNpbmNsdWRlIDxjb25zb2xlLmg+CQkvKiAuLi4gYW5kIHRoaXMgKi8KKyNlbmRpZgorI2lmZGVmIFRISU5LX0MKKyNpbmNsdWRlIDxjb25zb2xlLmg+CQkvKiBUaGluayBkZWNsYXJlcyBpdCBoZXJlICovCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFBBVEhfTUFYCQkvKiBBTlNJIG1heGltdW0tcGF0aG5hbWUtbGVuZ3RoIGNvbnN0YW50ICovCisjZGVmaW5lIFBBVEhfTUFYIDI1NgorI2VuZGlmCisKKworLyogQ3JlYXRlIHRoZSBhZGQtb24gbWVzc2FnZSBzdHJpbmcgdGFibGUuICovCisKKyNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpCXN0cmluZyAsCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2RqcGVnX21lc3NhZ2VfdGFibGVbXSA9IHsKKyNpbmNsdWRlICJjZGVycm9yLmgiCisgIE5VTEwKK307CisKKworLyoKKyAqIFNJTUQgRXh0OiBjb21waWxlci1zcGVjaWZpYyBoYWNrcyB0byBlbmFibGUgZmlsZW5hbWUgd2lsZC1jYXJkIGV4cGFuc2lvbgorICovCisKKyNpZmRlZiBfTVNDX1ZFUgkJLyogTWljcm9zb2Z0IFZpc3VhbCBDKysgKi8KKy8qIGZyb20gc2V0YXJndi5jIChzZXRhcmd2Lm9iaikgKi8KKy8qIFRlc3RlZCB1bmRlciBWaXN1YWwgQysrIFY2LjAsIFRvb2xraXQgMjAwMywgYW5kIDIwMDUgRXhwcmVzcyBFZGl0aW9uICovCitpbnQgX19jZGVjbCBfc2V0YXJndih2b2lkKSB7IGludCBfX2NkZWNsIF9fc2V0YXJndih2b2lkKTsgcmV0dXJuIF9fc2V0YXJndigpOyB9CisjZW5kaWYKKyNpZmRlZiBfX0JPUkxBTkRDX18JLyogQm9ybGFuZCBDKysgKi8KKy8qIGZyb20gd2lsZGFyZ3MuYyAod2lsZGFyZ3Mub2JqKSAqLworLyogVGVzdGVkIHVuZGVyIEJvcmxhbmQgQysrIENvbXBpbGVyIDUuNSAod2luMzIpICovCisjaW5jbHVkZSA8d2lsZGFyZ3MuaD4KK3R5cGVkZWYgdm9pZCBfUlRMRU5UUlkgKCogX1JUTEVOVFJZIF9hcmd2X2V4cGFuZF9mbmMpKGNoYXIgKiwgX1BGTl9BRERBUkcpOworX2FyZ3ZfZXhwYW5kX2ZuYyBfYXJndl9leHBhbmRfcHRyID0gX2V4cGFuZF93aWxkOworI2VuZGlmCisKKworLyoKKyAqIEF1dG9tYXRpYyBkZXRlcm1pbmF0aW9uIG9mIGF2YWlsYWJsZSBtZW1vcnkuCisgKi8KKworc3RhdGljIGxvbmcgZGVmYXVsdF9tYXhtZW07CS8qIHNhdmVzIHZhbHVlIGRldGVybWluZWQgYXQgc3RhcnR1cCwgb3IgMCAqLworCisjaWZuZGVmIEZSRUVfTUVNX0VTVElNQVRFCS8qIG1heSBiZSBkZWZpbmVkIGZyb20gY29tbWFuZCBsaW5lICovCisKKyNpZmRlZiBNU0RPUwkJCS8qIEZvciBNUy1ET1MgKHVubGVzcyBmbGF0LW1lbW9yeSBtb2RlbCkgKi8KKworI2luY2x1ZGUgPGRvcy5oPgkJLyogZm9yIGFjY2VzcyB0byBpbnRkb3MoKSBjYWxsICovCisKK0xPQ0FMKGxvbmcpCit1bnVzZWRfZG9zX21lbW9yeSAodm9pZCkKKy8qIE9idGFpbiB0b3RhbCBhbW91bnQgb2YgdW5hbGxvY2F0ZWQgRE9TIG1lbW9yeSAqLworeworICB1bmlvbiBSRUdTIHJlZ3M7CisgIGxvbmcgbnBhcmFzOworCisgIHJlZ3MuaC5haCA9IDB4NDg7CQkvKiBET1MgZnVuY3Rpb24gQWxsb2NhdGUgTWVtb3J5IEJsb2NrICovCisgIHJlZ3MueC5ieCA9IDB4RkZGRjsJCS8qIEFzayBmb3IgbW9yZSBtZW1vcnkgdGhhbiBET1MgY2FuIGhhdmUgKi8KKyAgKHZvaWQpIGludGRvcygmcmVncywgJnJlZ3MpOworICAvKiBET1Mgd2lsbCBmYWlsIGFuZCByZXR1cm4gIyBvZiBwYXJhZ3JhcGhzIGFjdHVhbGx5IGF2YWlsYWJsZSBpbiBCWC4gKi8KKyAgbnBhcmFzID0gKHVuc2lnbmVkIGludCkgcmVncy54LmJ4OworICAvKiBUaW1lcyAxNiB0byBjb252ZXJ0IHRvIGJ5dGVzLiAqLworICByZXR1cm4gbnBhcmFzIDw8IDQ7Cit9CisKKy8qIFRoZSBkZWZhdWx0IG1lbW9yeSBzZXR0aW5nIGlzIDk1JSBvZiB0aGUgYXZhaWxhYmxlIHNwYWNlLiAqLworI2RlZmluZSBGUkVFX01FTV9FU1RJTUFURSAgKCh1bnVzZWRfZG9zX21lbW9yeSgpICogOTVMKSAvIDEwMEwpCisKKyNlbmRpZiAvKiBNU0RPUyAqLworCisjaWZkZWYgQVRBUkkJCQkvKiBGb3IgQXRhcmkgU1QvU1RFL1RULCBQdXJlIEMgb3IgVHVyYm8gQyAqLworCisjaW5jbHVkZSA8ZXh0Lmg+CisKKy8qIFRoZSBkZWZhdWx0IG1lbW9yeSBzZXR0aW5nIGlzIDkwJSBvZiB0aGUgYXZhaWxhYmxlIHNwYWNlLiAqLworI2RlZmluZSBGUkVFX01FTV9FU1RJTUFURSAgKCgobG9uZykgY29yZWxlZnQoKSAqIDkwTCkgLyAxMDBMKQorCisjZW5kaWYgLyogQVRBUkkgKi8KKworLyogQWRkIG1lbW9yeS1lc3RpbWF0aW9uIHByb2NlZHVyZXMgZm9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGhlcmUsCisgKiB3aXRoIGFwcHJvcHJpYXRlICNpZmRlZidzIGFyb3VuZCB0aGVtLgorICovCisKKyNlbmRpZiAvKiAhRlJFRV9NRU1fRVNUSU1BVEUgKi8KKworCisvKgorICogVGhpcyBsaXN0IGRlZmluZXMgdGhlIGtub3duIG91dHB1dCBpbWFnZSBmb3JtYXRzCisgKiAobm90IGFsbCBvZiB3aGljaCBuZWVkIGJlIHN1cHBvcnRlZCBieSBhIGdpdmVuIHZlcnNpb24pLgorICogWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgb3V0cHV0IGZvcm1hdCBieSBkZWZpbmluZyBERUZBVUxUX0ZNVDsKKyAqIGluZGVlZCwgeW91IGhhZCBiZXR0ZXIgZG8gc28gaWYgeW91IHVuZGVmaW5lIFBQTV9TVVBQT1JURUQuCisgKi8KKwordHlwZWRlZiBlbnVtIHsKKwlGTVRfQk1QLAkJLyogQk1QIGZvcm1hdCAoV2luZG93cyBmbGF2b3IpICovCisJRk1UX0dJRiwJCS8qIEdJRiBmb3JtYXQgKi8KKwlGTVRfT1MyLAkJLyogQk1QIGZvcm1hdCAoT1MvMiBmbGF2b3IpICovCisJRk1UX1BQTSwJCS8qIFBQTS9QR00gKFBCTVBMVVMgZm9ybWF0cykgKi8KKwlGTVRfUkxFLAkJLyogUkxFIGZvcm1hdCAqLworCUZNVF9UQVJHQSwJCS8qIFRhcmdhIGZvcm1hdCAqLworCUZNVF9USUZGCQkvKiBUSUZGIGZvcm1hdCAqLworfSBJTUFHRV9GT1JNQVRTOworCisjaWZuZGVmIERFRkFVTFRfRk1UCQkvKiBzbyBjYW4gb3ZlcnJpZGUgZnJvbSBDRkxBR1MgaW4gTWFrZWZpbGUgKi8KKyNkZWZpbmUgREVGQVVMVF9GTVQJRk1UX0dJRgorI2VuZGlmCisKK3N0YXRpYyBJTUFHRV9GT1JNQVRTIHJlcXVlc3RlZF9mbXQ7CisKKworLyoKKyAqIEFyZ3VtZW50LXBhcnNpbmcgY29kZS4KKyAqIFRoZSBzd2l0Y2ggcGFyc2VyIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWZ1bCB3aXRoIERPUy1zdHlsZSBjb21tYW5kIGxpbmUKKyAqIHN5bnRheCwgaWUsIGludGVybWl4ZWQgc3dpdGNoZXMgYW5kIGZpbGUgbmFtZXMsIHdoZXJlIG9ubHkgdGhlIHN3aXRjaGVzCisgKiB0byB0aGUgbGVmdCBvZiBhIGdpdmVuIGZpbGUgbmFtZSBhZmZlY3QgcHJvY2Vzc2luZyBvZiB0aGF0IGZpbGUuCisgKi8KKworCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2duYW1lOwkvKiBwcm9ncmFtIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCitzdGF0aWMgY2hhciAqIG91dGZpbGVuYW1lOwkvKiBmb3IgLW91dGZpbGUgc3dpdGNoICovCisKKworTE9DQUwodm9pZCkKK3VzYWdlICh2b2lkKQorLyogY29tcGxhaW4gYWJvdXQgYmFkIGNvbW1hbmQgbGluZSAqLworeworICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyBbc3dpdGNoZXNdIGlucHV0ZmlsZShzKVxuIiwgcHJvZ25hbWUpOworICBmcHJpbnRmKHN0ZGVyciwgIkxpc3Qgb2YgaW5wdXQgZmlsZXMgbWF5IHVzZSB3aWxkY2FyZHMgKCogYW5kID8pXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICJPdXRwdXQgZmlsZW5hbWUgaXMgc2FtZSBhcyBpbnB1dCBmaWxlbmFtZSBleGNlcHQgZm9yIGV4dGVuc2lvblxuIik7CisKKyAgZnByaW50ZihzdGRlcnIsICJTd2l0Y2hlcyAobmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkKTpcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLWNvbG9ycyBOICAgICAgUmVkdWNlIGltYWdlIHRvIG5vIG1vcmUgdGhhbiBOIGNvbG9yc1xuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtZmFzdCAgICAgICAgICBGYXN0LCBsb3ctcXVhbGl0eSBwcm9jZXNzaW5nXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1ncmF5c2NhbGUgICAgIEZvcmNlIGdyYXlzY2FsZSBvdXRwdXRcbiIpOworI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1zY2FsZSBNL04gICAgIFNjYWxlIG91dHB1dCBpbWFnZSBieSBmcmFjdGlvbiBNL04sIGVnLCAxLzhcbiIpOworI2VuZGlmCisjaWZkZWYgQk1QX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLWJtcCAgICAgICAgICAgU2VsZWN0IEJNUCBvdXRwdXQgZm9ybWF0IChXaW5kb3dzIHN0eWxlKSVzXG4iLAorCSAgKERFRkFVTFRfRk1UID09IEZNVF9CTVAgPyAiIChkZWZhdWx0KSIgOiAiIikpOworI2VuZGlmCisjaWZkZWYgR0lGX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLWdpZiAgICAgICAgICAgU2VsZWN0IEdJRiBvdXRwdXQgZm9ybWF0JXNcbiIsCisJICAoREVGQVVMVF9GTVQgPT0gRk1UX0dJRiA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisjZW5kaWYKKyNpZmRlZiBCTVBfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtb3MyICAgICAgICAgICBTZWxlY3QgQk1QIG91dHB1dCBmb3JtYXQgKE9TLzIgc3R5bGUpJXNcbiIsCisJICAoREVGQVVMVF9GTVQgPT0gRk1UX09TMiA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisjZW5kaWYKKyNpZmRlZiBQUE1fU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtcG5tICAgICAgICAgICBTZWxlY3QgUEJNUExVUyAoUFBNL1BHTSkgb3V0cHV0IGZvcm1hdCVzXG4iLAorCSAgKERFRkFVTFRfRk1UID09IEZNVF9QUE0gPyAiIChkZWZhdWx0KSIgOiAiIikpOworI2VuZGlmCisjaWZkZWYgUkxFX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLXJsZSAgICAgICAgICAgU2VsZWN0IFV0YWggUkxFIG91dHB1dCBmb3JtYXQlc1xuIiwKKwkgIChERUZBVUxUX0ZNVCA9PSBGTVRfUkxFID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyNlbmRpZgorI2lmZGVmIFRBUkdBX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLXRhcmdhICAgICAgICAgU2VsZWN0IFRhcmdhIG91dHB1dCBmb3JtYXQlc1xuIiwKKwkgIChERUZBVUxUX0ZNVCA9PSBGTVRfVEFSR0EgPyAiIChkZWZhdWx0KSIgOiAiIikpOworI2VuZGlmCisgIGZwcmludGYoc3RkZXJyLCAiU3dpdGNoZXMgZm9yIGFkdmFuY2VkIHVzZXJzOlxuIik7CisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLWRjdCBpbnQgICAgICAgVXNlIGludGVnZXIgRENUIG1ldGhvZCVzXG4iLAorCSAgKEpEQ1RfREVGQVVMVCA9PSBKRENUX0lTTE9XID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyNlbmRpZgorI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgZmFzdCAgICAgIFVzZSBmYXN0IGludGVnZXIgRENUIChsZXNzIGFjY3VyYXRlKSVzXG4iLAorCSAgKEpEQ1RfREVGQVVMVCA9PSBKRENUX0lGQVNUID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgZmxvYXQgICAgIFVzZSBmbG9hdGluZy1wb2ludCBEQ1QgbWV0aG9kJXNcbiIsCisJICAoSkRDVF9ERUZBVUxUID09IEpEQ1RfRkxPQVQgPyAiIChkZWZhdWx0KSIgOiAiIikpOworI2VuZGlmCisgIGZwcmludGYoc3RkZXJyLCAiICAtZGl0aGVyIGZzICAgICBVc2UgRi1TIGRpdGhlcmluZyAoZGVmYXVsdClcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLWRpdGhlciBub25lICAgRG9uJ3QgdXNlIGRpdGhlcmluZyBpbiBxdWFudGl6YXRpb25cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLWRpdGhlciBvcmRlcmVkICBVc2Ugb3JkZXJlZCBkaXRoZXIgKG1lZGl1bSBzcGVlZCwgcXVhbGl0eSlcbiIpOworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLW1hcCBGSUxFICAgICAgTWFwIHRvIGNvbG9ycyB1c2VkIGluIG5hbWVkIGltYWdlIGZpbGVcbiIpOworI2VuZGlmCisgIGZwcmludGYoc3RkZXJyLCAiICAtbm9zbW9vdGggICAgICBEb24ndCB1c2UgaGlnaC1xdWFsaXR5IHVwc2FtcGxpbmdcbiIpOworI2lmZGVmIFFVQU5UXzFQQVNTX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLW9uZXBhc3MgICAgICAgVXNlIDEtcGFzcyBxdWFudGl6YXRpb24gKGZhc3QsIGxvdyBxdWFsaXR5KVxuIik7CisjZW5kaWYKKyNpZm5kZWYgRlJFRV9NRU1fRVNUSU1BVEUKKyAgZnByaW50ZihzdGRlcnIsICIgIC1tYXhtZW1vcnkgTiAgIE1heGltdW0gbWVtb3J5IHRvIHVzZSAoaW4ga2J5dGVzKVxuIik7CisjZW5kaWYKKyAgZnByaW50ZihzdGRlcnIsICIgIC1vdXRmaWxlIG5hbWUgIFNwZWNpZnkgbmFtZSBmb3Igb3V0cHV0IGZpbGVcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXZlcmJvc2UgIG9yICAtZGVidWcgICBFbWl0IGRlYnVnIG91dHB1dFxuIik7CisgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworCisjaWZuZGVmIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKworTE9DQUwodm9pZCkKK3ByaW50X3NpbWRfaW5mbyAoRklMRSAqIGZpbGUsIGNoYXIgKiBsYWJlbHN0ciwgdW5zaWduZWQgaW50IHNpbWQpCit7CisgIGZwcmludGYoZmlsZSwgIiVzJXMlcyVzJXMlc1xuIiwgbGFiZWxzdHIsCisJICBzaW1kICYgSlNJTURfTU1YICAgPyAiIE1NWCIgICAgOiAiIiwKKwkgIHNpbWQgJiBKU0lNRF8zRE5PVyA/ICIgM0ROb3chIiA6ICIiLAorCSAgc2ltZCAmIEpTSU1EX1NTRSAgID8gIiBTU0UiICAgIDogIiIsCisJICBzaW1kICYgSlNJTURfU1NFMiAgPyAiIFNTRTIiICAgOiAiIiwKKwkgIHNpbWQgPT0gSlNJTURfTk9ORSA/ICIgTk9ORSIgICA6ICIiKTsKK30KKworI2VuZGlmIC8qICFKU0lNRF9NT0RFSU5GT19OT1RfU1VQUE9SVEVEICovCisKKworTE9DQUwoaW50KQorcGFyc2Vfc3dpdGNoZXMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBhcmdjLCBjaGFyICoqYXJndiwKKwkJaW50IGxhc3RfZmlsZV9hcmdfc2VlbiwgYm9vbGVhbiBmb3JfcmVhbCkKKy8qIFBhcnNlIG9wdGlvbmFsIHN3aXRjaGVzLgorICogUmV0dXJucyBhcmd2W10gaW5kZXggb2YgZmlyc3QgZmlsZS1uYW1lIGFyZ3VtZW50ICg9PSBhcmdjIGlmIG5vbmUpLgorICogQW55IGZpbGUgbmFtZXMgd2l0aCBpbmRleGVzIDw9IGxhc3RfZmlsZV9hcmdfc2VlbiBhcmUgaWdub3JlZDsKKyAqIHRoZXkgaGF2ZSBwcmVzdW1hYmx5IGJlZW4gcHJvY2Vzc2VkIGluIGEgcHJldmlvdXMgaXRlcmF0aW9uLgorICogKFBhc3MgMCBmb3IgbGFzdF9maWxlX2FyZ19zZWVuIG9uIHRoZSBmaXJzdCBvciBvbmx5IGl0ZXJhdGlvbi4pCisgKiBmb3JfcmVhbCBpcyBGQUxTRSBvbiB0aGUgZmlyc3QgKGR1bW15KSBwYXNzOyB3ZSBtYXkgc2tpcCBhbnkgZXhwZW5zaXZlCisgKiBwcm9jZXNzaW5nLgorICovCit7CisgIGludCBhcmduOworICBjaGFyICogYXJnOworCisgIC8qIFNldCB1cCBkZWZhdWx0IEpQRUcgcGFyYW1ldGVycy4gKi8KKyAgcmVxdWVzdGVkX2ZtdCA9IERFRkFVTFRfRk1UOwkvKiBzZXQgZGVmYXVsdCBvdXRwdXQgZmlsZSBmb3JtYXQgKi8KKyAgb3V0ZmlsZW5hbWUgPSBOVUxMOworICBjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCA9IDA7CisgIGlmIChkZWZhdWx0X21heG1lbSA+IDApCS8qIG92ZXJyaWRlIGxpYnJhcnkncyBkZWZhdWx0IHZhbHVlICovCisgICAgY2luZm8tPm1lbS0+bWF4X21lbW9yeV90b191c2UgPSBkZWZhdWx0X21heG1lbTsKKworICAvKiBTY2FuIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhZGp1c3QgcGFyYW1ldGVycyAqLworCisgIGZvciAoYXJnbiA9IDE7IGFyZ24gPCBhcmdjOyBhcmduKyspIHsKKyAgICBhcmcgPSBhcmd2W2FyZ25dOworICAgIGlmICgqYXJnICE9ICctJykgeworICAgICAgLyogTm90IGEgc3dpdGNoLCBtdXN0IGJlIGEgZmlsZSBuYW1lIGFyZ3VtZW50ICovCisgICAgICBpZiAoYXJnbiA8PSBsYXN0X2ZpbGVfYXJnX3NlZW4pIHsKKwlvdXRmaWxlbmFtZSA9IE5VTEw7CS8qIC1vdXRmaWxlIGFwcGxpZXMgdG8ganVzdCBvbmUgaW5wdXQgZmlsZSAqLworCWNvbnRpbnVlOwkJLyogaWdub3JlIHRoaXMgbmFtZSBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqLworICAgICAgfQorICAgICAgYnJlYWs7CQkJLyogZWxzZSBkb25lIHBhcnNpbmcgc3dpdGNoZXMgKi8KKyAgICB9CisgICAgYXJnKys7CQkJLyogYWR2YW5jZSBwYXN0IHN3aXRjaCBtYXJrZXIgY2hhcmFjdGVyICovCisKKyAgICBpZiAoa2V5bWF0Y2goYXJnLCAiYm1wIiwgMSkpIHsKKyAgICAgIC8qIEJNUCBvdXRwdXQgZm9ybWF0LiAqLworICAgICAgcmVxdWVzdGVkX2ZtdCA9IEZNVF9CTVA7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImNvbG9ycyIsIDEpIHx8IGtleW1hdGNoKGFyZywgImNvbG91cnMiLCAxKSB8fAorCSAgICAgICBrZXltYXRjaChhcmcsICJxdWFudGl6ZSIsIDEpIHx8IGtleW1hdGNoKGFyZywgInF1YW50aXNlIiwgMSkpIHsKKyAgICAgIC8qIERvIGNvbG9yIHF1YW50aXphdGlvbi4gKi8KKyAgICAgIGludCB2YWw7CisKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisJdXNhZ2UoKTsKKyAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiVkIiwgJnZhbCkgIT0gMSkKKwl1c2FnZSgpOworICAgICAgY2luZm8tPmRlc2lyZWRfbnVtYmVyX29mX2NvbG9ycyA9IHZhbDsKKyAgICAgIGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgPSBUUlVFOworCisjaWZuZGVmIEpTSU1EX01BU0tGVU5DX05PVF9TVVBQT1JURUQKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm5vc2ltZCIgLCA0KSkgeworICAgICAganBlZ19zaW1kX21hc2soKGpfY29tbW9uX3B0cikgY2luZm8sIEpTSU1EX05PTkUsIEpTSU1EX0FMTCk7CisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJub21teCIgICwgMykpIHsKKyAgICAgIGpwZWdfc2ltZF9tYXNrKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKU0lNRF9OT05FLCBKU0lNRF9NTVgpOworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibm8zZG5vdyIsIDMpKSB7CisgICAgICBqcGVnX3NpbWRfbWFzaygoal9jb21tb25fcHRyKSBjaW5mbywgSlNJTURfTk9ORSwgSlNJTURfM0ROT1cpOworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibm9zc2UiICAsIDQpKSB7CisgICAgICBqcGVnX3NpbWRfbWFzaygoal9jb21tb25fcHRyKSBjaW5mbywgSlNJTURfTk9ORSwgSlNJTURfU1NFKTsKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm5vc3NlMiIgLCA2KSkgeworICAgICAganBlZ19zaW1kX21hc2soKGpfY29tbW9uX3B0cikgY2luZm8sIEpTSU1EX05PTkUsIEpTSU1EX1NTRTIpOworI2VuZGlmIC8qICFKU0lNRF9NQVNLRlVOQ19OT1RfU1VQUE9SVEVEICovCisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImRjdCIsIDIpKSB7CisgICAgICAvKiBTZWxlY3QgSURDVCBhbGdvcml0aG0uICovCisgICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworCXVzYWdlKCk7CisgICAgICBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImludCIsIDEpKSB7CisJY2luZm8tPmRjdF9tZXRob2QgPSBKRENUX0lTTE9XOworICAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAiZmFzdCIsIDIpKSB7CisJY2luZm8tPmRjdF9tZXRob2QgPSBKRENUX0lGQVNUOworICAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAiZmxvYXQiLCAyKSkgeworCWNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9GTE9BVDsKKyAgICAgIH0gZWxzZQorCXVzYWdlKCk7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImRpdGhlciIsIDIpKSB7CisgICAgICAvKiBTZWxlY3QgZGl0aGVyaW5nIGFsZ29yaXRobS4gKi8KKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisJdXNhZ2UoKTsKKyAgICAgIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAiZnMiLCAyKSkgeworCWNpbmZvLT5kaXRoZXJfbW9kZSA9IEpESVRIRVJfRlM7CisgICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJub25lIiwgMikpIHsKKwljaW5mby0+ZGl0aGVyX21vZGUgPSBKRElUSEVSX05PTkU7CisgICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJvcmRlcmVkIiwgMikpIHsKKwljaW5mby0+ZGl0aGVyX21vZGUgPSBKRElUSEVSX09SREVSRUQ7CisgICAgICB9IGVsc2UKKwl1c2FnZSgpOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJkZWJ1ZyIsIDEpIHx8IGtleW1hdGNoKGFyZywgInZlcmJvc2UiLCAxKSkgeworICAgICAgLyogRW5hYmxlIGRlYnVnIHByaW50b3V0cy4gKi8KKyAgICAgIC8qIE9uIGZpcnN0IC1kLCBwcmludCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uICovCisgICAgICBzdGF0aWMgYm9vbGVhbiBwcmludGVkX3ZlcnNpb24gPSBGQUxTRTsKKworICAgICAgaWYgKCEgcHJpbnRlZF92ZXJzaW9uKSB7CisJZnByaW50ZihzdGRlcnIsICJJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgREpQRUcsIHZlcnNpb24gJXNcbiVzXG4iLAorCQlKVkVSU0lPTiwgSkNPUFlSSUdIVCk7CisJZnByaW50ZihzdGRlcnIsCisJCSJcbng4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwgdmVyc2lvbiAlc1xuXG4iLAorCQlKUEVHX1NJTURFWFRfVkVSX1NUUik7CisjaWZuZGVmIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiU0lNRCBpbnN0cnVjdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0gOiIsCisJCQlqcGVnX3NpbWRfc3VwcG9ydChOVUxMKSk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxuICAgICAgPT09IFNJTUQgT3BlcmF0aW9uIE1vZGVzID09PVxuIik7CisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorCXByaW50X3NpbWRfaW5mbyhzdGRlcnIsICJBY2N1cmF0ZSBpbnRlZ2VyIERDVCAgKC1kY3QgaW50KSAgIDoiLAorCQkJanBlZ19zaW1kX2ludmVyc2VfZGN0KGNpbmZvLCBKRENUX0lTTE9XKSk7CisjZW5kaWYKKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisJcHJpbnRfc2ltZF9pbmZvKHN0ZGVyciwgIkZhc3QgaW50ZWdlciBEQ1QgICAgICAoLWRjdCBmYXN0KSAgOiIsCisJCQlqcGVnX3NpbWRfaW52ZXJzZV9kY3QoY2luZm8sIEpEQ1RfSUZBU1QpKTsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiRmxvYXRpbmctcG9pbnQgRENUICAgICgtZGN0IGZsb2F0KSA6IiwKKwkJCWpwZWdfc2ltZF9pbnZlcnNlX2RjdChjaW5mbywgSkRDVF9GTE9BVCkpOworI2VuZGlmCisjaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAorCXByaW50X3NpbWRfaW5mbyhzdGRlcnIsICJSZWR1Y2VkLXNpemUgRENUICAgICAgKC1zY2FsZSBNL04pIDoiLAorCQkJanBlZ19zaW1kX2ludmVyc2VfZGN0KGNpbmZvLCBKRENUX0ZMT0FUKzEpKTsKKyNlbmRpZgorCXByaW50X3NpbWRfaW5mbyhzdGRlcnIsICJIaWdoLXF1YWxpdHkgdXBzYW1wbGluZyAoZGVmYXVsdCkgIDoiLAorCQkJanBlZ19zaW1kX3Vwc2FtcGxlcihjaW5mbywgVFJVRSkpOworCXByaW50X3NpbWRfaW5mbyhzdGRlcnIsICJMb3ctcXVhbGl0eSB1cHNhbXBsaW5nICgtbm9zbW9vdGgpIDoiLAorCQkJanBlZ19zaW1kX3Vwc2FtcGxlcihjaW5mbywgRkFMU0UpKTsKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiQ29sb3JzcGFjZSBjb252ZXJzaW9uIChZQ2JDci0+UkdCKSA6IiwKKwkJCWpwZWdfc2ltZF9jb2xvcl9kZWNvbnZlcnRlcihjaW5mbykpOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyNlbmRpZiAvKiAhSlNJTURfTU9ERUlORk9fTk9UX1NVUFBPUlRFRCAqLworCXByaW50ZWRfdmVyc2lvbiA9IFRSVUU7CisgICAgICB9CisgICAgICBjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCsrOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJmYXN0IiwgMSkpIHsKKyAgICAgIC8qIFNlbGVjdCByZWNvbW1lbmRlZCBwcm9jZXNzaW5nIG9wdGlvbnMgZm9yIHF1aWNrLWFuZC1kaXJ0eSBvdXRwdXQuICovCisgICAgICBjaW5mby0+dHdvX3Bhc3NfcXVhbnRpemUgPSBGQUxTRTsKKyAgICAgIGNpbmZvLT5kaXRoZXJfbW9kZSA9IEpESVRIRVJfT1JERVJFRDsKKyAgICAgIGlmICghIGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpIC8qIGRvbid0IG92ZXJyaWRlIGFuIGVhcmxpZXIgLWNvbG9ycyAqLworCWNpbmZvLT5kZXNpcmVkX251bWJlcl9vZl9jb2xvcnMgPSAyMTY7CisgICAgICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfRkFTVEVTVDsKKyAgICAgIGNpbmZvLT5kb19mYW5jeV91cHNhbXBsaW5nID0gRkFMU0U7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImdpZiIsIDEpKSB7CisgICAgICAvKiBHSUYgb3V0cHV0IGZvcm1hdC4gKi8KKyAgICAgIHJlcXVlc3RlZF9mbXQgPSBGTVRfR0lGOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJncmF5c2NhbGUiLCAyKSB8fCBrZXltYXRjaChhcmcsICJncmV5c2NhbGUiLDIpKSB7CisgICAgICAvKiBGb3JjZSBtb25vY2hyb21lIG91dHB1dC4gKi8KKyAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfR1JBWVNDQUxFOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJtYXAiLCAzKSkgeworICAgICAgLyogUXVhbnRpemUgdG8gYSBjb2xvciBtYXAgdGFrZW4gZnJvbSBhbiBpbnB1dCBmaWxlLiAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKwl1c2FnZSgpOworICAgICAgaWYgKGZvcl9yZWFsKSB7CQkvKiB0b28gZXhwZW5zaXZlIHRvIGRvIHR3aWNlISAqLworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAkvKiBvdGhlcndpc2UgY2FuJ3QgcXVhbnRpemUgdG8gc3VwcGxpZWQgbWFwICovCisJRklMRSAqIG1hcGZpbGU7CisKKwlpZiAoKG1hcGZpbGUgPSBmb3Blbihhcmd2W2FyZ25dLCBSRUFEX0JJTkFSWSkpID09IE5VTEwpIHsKKwkgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gJXNcbiIsIHByb2duYW1lLCBhcmd2W2FyZ25dKTsKKwkgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJcmVhZF9jb2xvcl9tYXAoY2luZm8sIG1hcGZpbGUpOworCWZjbG9zZShtYXBmaWxlKTsKKwljaW5mby0+cXVhbnRpemVfY29sb3JzID0gVFJVRTsKKyNlbHNlCisJRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmCisgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm1heG1lbW9yeSIsIDMpKSB7CisgICAgICAvKiBNYXhpbXVtIG1lbW9yeSBpbiBLYiAob3IgTWIgd2l0aCAnbScpLiAqLworICAgICAgbG9uZyBsdmFsOworICAgICAgY2hhciBjaCA9ICd4JzsKKworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKwl1c2FnZSgpOworICAgICAgaWYgKHNzY2FuZihhcmd2W2FyZ25dLCAiJWxkJWMiLCAmbHZhbCwgJmNoKSA8IDEpCisJdXNhZ2UoKTsKKyAgICAgIGlmIChjaCA9PSAnbScgfHwgY2ggPT0gJ00nKQorCWx2YWwgKj0gMTAwMEw7CisgICAgICBjaW5mby0+bWVtLT5tYXhfbWVtb3J5X3RvX3VzZSA9IGx2YWwgKiAxMDAwTDsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibm9zbW9vdGgiLCAzKSkgeworICAgICAgLyogU3VwcHJlc3MgZmFuY3kgdXBzYW1wbGluZyAqLworICAgICAgY2luZm8tPmRvX2ZhbmN5X3Vwc2FtcGxpbmcgPSBGQUxTRTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAib25lcGFzcyIsIDMpKSB7CisgICAgICAvKiBVc2UgZmFzdCBvbmUtcGFzcyBxdWFudGl6YXRpb24uICovCisgICAgICBjaW5mby0+dHdvX3Bhc3NfcXVhbnRpemUgPSBGQUxTRTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAib3MyIiwgMykpIHsKKyAgICAgIC8qIEJNUCBvdXRwdXQgZm9ybWF0IChPUy8yIGZsYXZvcikuICovCisgICAgICByZXF1ZXN0ZWRfZm10ID0gRk1UX09TMjsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAib3V0ZmlsZSIsIDQpKSB7CisgICAgICAvKiBTZXQgb3V0cHV0IGZpbGUgbmFtZS4gKi8KKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisJdXNhZ2UoKTsKKyAgICAgIG91dGZpbGVuYW1lID0gYXJndlthcmduXTsJLyogc2F2ZSBpdCBhd2F5IGZvciBsYXRlciB1c2UgKi8KKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicG5tIiwgMSkgfHwga2V5bWF0Y2goYXJnLCAicHBtIiwgMSkpIHsKKyAgICAgIC8qIFBQTS9QR00gb3V0cHV0IGZvcm1hdC4gKi8KKyAgICAgIHJlcXVlc3RlZF9mbXQgPSBGTVRfUFBNOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJybGUiLCAxKSkgeworICAgICAgLyogUkxFIG91dHB1dCBmb3JtYXQuICovCisgICAgICByZXF1ZXN0ZWRfZm10ID0gRk1UX1JMRTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAic2NhbGUiLCAxKSkgeworICAgICAgLyogU2NhbGUgdGhlIG91dHB1dCBpbWFnZSBieSBhIGZyYWN0aW9uIE0vTi4gKi8KKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisJdXNhZ2UoKTsKKyAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiVkLyVkIiwKKwkJICZjaW5mby0+c2NhbGVfbnVtLCAmY2luZm8tPnNjYWxlX2Rlbm9tKSAhPSAyKQorCXVzYWdlKCk7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInRhcmdhIiwgMSkpIHsKKyAgICAgIC8qIFRhcmdhIG91dHB1dCBmb3JtYXQuICovCisgICAgICByZXF1ZXN0ZWRfZm10ID0gRk1UX1RBUkdBOworCisgICAgfSBlbHNlIHsKKyAgICAgIHVzYWdlKCk7CQkJLyogYm9ndXMgc3dpdGNoICovCisgICAgfQorICB9CisKKyAgcmV0dXJuIGFyZ247CQkJLyogcmV0dXJuIGluZGV4IG9mIG5leHQgYXJnIChmaWxlIG5hbWUpICovCit9CisKKworLyoKKyAqIE1hcmtlciBwcm9jZXNzb3IgZm9yIENPTSBhbmQgaW50ZXJlc3RpbmcgQVBQbiBtYXJrZXJzLgorICogVGhpcyByZXBsYWNlcyB0aGUgbGlicmFyeSdzIGJ1aWx0LWluIHByb2Nlc3Nvciwgd2hpY2gganVzdCBza2lwcyB0aGUgbWFya2VyLgorICogV2Ugd2FudCB0byBwcmludCBvdXQgdGhlIG1hcmtlciBhcyB0ZXh0LCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLgorICogTm90ZSB0aGlzIGNvZGUgcmVsaWVzIG9uIGEgbm9uLXN1c3BlbmRpbmcgZGF0YSBzb3VyY2UuCisgKi8KKworTE9DQUwodW5zaWduZWQgaW50KQoranBlZ19nZXRjIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogUmVhZCBuZXh0IGJ5dGUgKi8KK3sKKyAgc3RydWN0IGpwZWdfc291cmNlX21nciAqIGRhdGFzcmMgPSBjaW5mby0+c3JjOworCisgIGlmIChkYXRhc3JjLT5ieXRlc19pbl9idWZmZXIgPT0gMCkgeworICAgIGlmICghICgqZGF0YXNyYy0+ZmlsbF9pbnB1dF9idWZmZXIpIChjaW5mbykpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NBTlRfU1VTUEVORCk7CisgIH0KKyAgZGF0YXNyYy0+Ynl0ZXNfaW5fYnVmZmVyLS07CisgIHJldHVybiBHRVRKT0NURVQoKmRhdGFzcmMtPm5leHRfaW5wdXRfYnl0ZSsrKTsKK30KKworCitNRVRIT0RERUYoYm9vbGVhbikKK3ByaW50X3RleHRfbWFya2VyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBib29sZWFuIHRyYWNlaXQgPSAoY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPj0gMSk7CisgIElOVDMyIGxlbmd0aDsKKyAgdW5zaWduZWQgaW50IGNoOworICB1bnNpZ25lZCBpbnQgbGFzdGNoID0gMDsKKworICBsZW5ndGggPSBqcGVnX2dldGMoY2luZm8pIDw8IDg7CisgIGxlbmd0aCArPSBqcGVnX2dldGMoY2luZm8pOworICBsZW5ndGggLT0gMjsJCQkvKiBkaXNjb3VudCB0aGUgbGVuZ3RoIHdvcmQgaXRzZWxmICovCisKKyAgaWYgKHRyYWNlaXQpIHsKKyAgICBpZiAoY2luZm8tPnVucmVhZF9tYXJrZXIgPT0gSlBFR19DT00pCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbW1lbnQsIGxlbmd0aCAlbGQ6XG4iLCAobG9uZykgbGVuZ3RoKTsKKyAgICBlbHNlCQkJLyogYXNzdW1lIGl0IGlzIGFuIEFQUG4gb3RoZXJ3aXNlICovCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkFQUCVkLCBsZW5ndGggJWxkOlxuIiwKKwkgICAgICBjaW5mby0+dW5yZWFkX21hcmtlciAtIEpQRUdfQVBQMCwgKGxvbmcpIGxlbmd0aCk7CisgIH0KKworICB3aGlsZSAoLS1sZW5ndGggPj0gMCkgeworICAgIGNoID0ganBlZ19nZXRjKGNpbmZvKTsKKyAgICBpZiAodHJhY2VpdCkgeworICAgICAgLyogRW1pdCB0aGUgY2hhcmFjdGVyIGluIGEgcmVhZGFibGUgZm9ybS4KKyAgICAgICAqIE5vbnByaW50YWJsZXMgYXJlIGNvbnZlcnRlZCB0byBcbm5uIGZvcm0sCisgICAgICAgKiB3aGlsZSBcIGlzIGNvbnZlcnRlZCB0byBcXC4KKyAgICAgICAqIE5ld2xpbmVzIGluIENSLCBDUi9MRiwgb3IgTEYgZm9ybSB3aWxsIGJlIHByaW50ZWQgYXMgb25lIG5ld2xpbmUuCisgICAgICAgKi8KKyAgICAgIGlmIChjaCA9PSAnXHInKSB7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXG4nKSB7CisJaWYgKGxhc3RjaCAhPSAnXHInKQorCSAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXFwnKSB7CisJZnByaW50ZihzdGRlcnIsICJcXFxcIik7CisgICAgICB9IGVsc2UgaWYgKGlzcHJpbnQoY2gpKSB7CisJcHV0YyhjaCwgc3RkZXJyKTsKKyAgICAgIH0gZWxzZSB7CisJZnByaW50ZihzdGRlcnIsICJcXCUwM28iLCBjaCk7CisgICAgICB9CisgICAgICBsYXN0Y2ggPSBjaDsKKyAgICB9CisgIH0KKworICBpZiAodHJhY2VpdCkKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIENoZWNrIGZvciBvdmVyd3JpdGUgb2YgYW4gZXhpc3RpbmcgZmlsZTsgY2xlYXIgaXQgd2l0aCB1c2VyCisgKi8KKworI2lmbmRlZiBOT19PVkVSV1JJVEVfQ0hFQ0sKKworTE9DQUwoYm9vbGVhbikKK2lzX3dyaXRlX29rIChjaGFyICogb3V0Zm5hbWUpCit7CisgIEZJTEUgKiBvZmlsZTsKKyAgaW50IGNoOworCisgIG9maWxlID0gZm9wZW4ob3V0Zm5hbWUsIFJFQURfQklOQVJZKTsKKyAgaWYgKG9maWxlID09IE5VTEwpCisgICAgcmV0dXJuIFRSVUU7CQkvKiBub3QgcHJlc2VudCAqLworICBmY2xvc2Uob2ZpbGUpOwkJLyogb29wcywgaXQgaXMgcHJlc2VudCAqLworCisgIGZvciAoOzspIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGFscmVhZHkgZXhpc3RzLCBvdmVyd3JpdGUgaXQ/IFt5L25dICIsCisJICAgIG91dGZuYW1lKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKKyAgICBjaCA9IGdldGMoc3RkaW4pOworICAgIGlmIChjaCAhPSAnXG4nKQkJLyogZmx1c2ggcmVzdCBvZiBsaW5lICovCisgICAgICB3aGlsZSAoZ2V0YyhzdGRpbikgIT0gJ1xuJykKKwkvKiBub3RoaW5nICovOworCisgICAgc3dpdGNoIChjaCkgeworICAgIGNhc2UgJ1knOgorICAgIGNhc2UgJ3knOgorICAgICAgcmV0dXJuIFRSVUU7CisgICAgY2FzZSAnTic6CisgICAgY2FzZSAnbic6CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgLyogb3RoZXJ3aXNlLCBhc2sgYWdhaW4gKi8KKyAgICB9CisgIH0KK30KKworI2VuZGlmCisKKworLyoKKyAqIFByb2Nlc3MgYSBzaW5nbGUgaW5wdXQgZmlsZSBuYW1lLCBhbmQgcmV0dXJuIGl0cyBpbmRleCBpbiBhcmd2W10uCisgKiBGaWxlIG5hbWVzIGF0IG9yIHRvIGxlZnQgb2Ygb2xkX2ZpbGVfaW5kZXggaGF2ZSBiZWVuIHByb2Nlc3NlZCBhbHJlYWR5LgorICovCisKK0xPQ0FMKGludCkKK3Byb2Nlc3Nfb25lX2ZpbGUgKGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50IG9sZF9maWxlX2luZGV4KQoreworICBzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCBjaW5mbzsKKyAgc3RydWN0IGpwZWdfZXJyb3JfbWdyIGplcnI7CisgIGNoYXIgKmluZmlsZW5hbWU7CisgIGNoYXIgd29ya2ZpbGVuYW1lW1BBVEhfTUFYXTsKKyAgY29uc3QgY2hhciAqZGVmYXVsdF9leHRlbnNpb24gPSBOVUxMOworI2lmZGVmIFBST0dSRVNTX1JFUE9SVAorICBzdHJ1Y3QgY2RqcGVnX3Byb2dyZXNzX21nciBwcm9ncmVzczsKKyNlbmRpZgorICBpbnQgZmlsZV9pbmRleDsKKyAgZGpwZWdfZGVzdF9wdHIgZGVzdF9tZ3IgPSBOVUxMOworICBGSUxFICogaW5wdXRfZmlsZSA9IE5VTEw7CisgIEZJTEUgKiBvdXRwdXRfZmlsZSA9IE5VTEw7CisgIEpESU1FTlNJT04gbnVtX3NjYW5saW5lczsKKworICAvKiBJbml0aWFsaXplIHRoZSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0IHdpdGggZGVmYXVsdCBlcnJvciBoYW5kbGluZy4gKi8KKyAgY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmplcnIpOworICBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKCZjaW5mbyk7CisgIC8qIEFkZCBzb21lIGFwcGxpY2F0aW9uLXNwZWNpZmljIGVycm9yIG1lc3NhZ2VzIChmcm9tIGNkZXJyb3IuaCkgKi8KKyAgamVyci5hZGRvbl9tZXNzYWdlX3RhYmxlID0gY2RqcGVnX21lc3NhZ2VfdGFibGU7CisgIGplcnIuZmlyc3RfYWRkb25fbWVzc2FnZSA9IEpNU0dfRklSU1RBRERPTkNPREU7CisgIGplcnIubGFzdF9hZGRvbl9tZXNzYWdlID0gSk1TR19MQVNUQURET05DT0RFOworCisgIC8qIEluc2VydCBjdXN0b20gbWFya2VyIHByb2Nlc3NvciBmb3IgQ09NIGFuZCBBUFAxMi4KKyAgICogQVBQMTIgaXMgdXNlZCBieSBzb21lIGRpZ2l0YWwgY2FtZXJhIG1ha2VycyBmb3IgdGV4dHVhbCBpbmZvLAorICAgKiBzbyB3ZSBwcm92aWRlIHRoZSBhYmlsaXR5IHRvIGRpc3BsYXkgaXQgYXMgdGV4dC4KKyAgICogSWYgeW91IGxpa2UsIGFkZGl0aW9uYWwgQVBQbiBtYXJrZXIgdHlwZXMgY2FuIGJlIHNlbGVjdGVkIGZvciBkaXNwbGF5LAorICAgKiBidXQgZG9uJ3QgdHJ5IHRvIG92ZXJyaWRlIEFQUDAgb3IgQVBQMTQgdGhpcyB3YXkgKHNlZSBsaWJqcGVnLmRvYykuCisgICAqLworICBqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yKCZjaW5mbywgSlBFR19DT00sIHByaW50X3RleHRfbWFya2VyKTsKKyAganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvcigmY2luZm8sIEpQRUdfQVBQMCsxMiwgcHJpbnRfdGV4dF9tYXJrZXIpOworCisgIC8qIE5vdyBzYWZlIHRvIGVuYWJsZSBzaWduYWwgY2F0Y2hlci4gKi8KKyNpZmRlZiBORUVEX1NJR05BTF9DQVRDSEVSCisgIGVuYWJsZV9zaWduYWxfY2F0Y2hlcigoal9jb21tb25fcHRyKSAmY2luZm8pOworI2VuZGlmCisKKyAgLyogU2NhbiBjb21tYW5kIGxpbmUgdG8gZmluZCBuZXh0IGZpbGUgbmFtZS4KKyAgICogSXQgaXMgY29udmVuaWVudCB0byB1c2UganVzdCBvbmUgc3dpdGNoLXBhcnNpbmcgcm91dGluZSwgYnV0IHRoZSBzd2l0Y2gKKyAgICogdmFsdWVzIHJlYWQgaGVyZSBhcmUgaWdub3JlZDsgd2Ugd2lsbCByZXNjYW4gdGhlIHN3aXRjaGVzIGFmdGVyIG9wZW5pbmcKKyAgICogdGhlIGlucHV0IGZpbGUuCisgICAqIChFeGNlcHRpb246IHRyYWNpbmcgbGV2ZWwgc2V0IGhlcmUgY29udHJvbHMgdmVyYm9zaXR5IGZvciBDT00gbWFya2VycworICAgKiBmb3VuZCBkdXJpbmcganBlZ19yZWFkX2hlYWRlci4uLikKKyAgICovCisKKyAgZmlsZV9pbmRleCA9IHBhcnNlX3N3aXRjaGVzKCZjaW5mbywgYXJnYywgYXJndiwgb2xkX2ZpbGVfaW5kZXgsIEZBTFNFKTsKKyAgaWYgKGZpbGVfaW5kZXggPj0gYXJnYykgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG1pc3NpbmcgaW5wdXQgZmlsZSBuYW1lXG4iLCBwcm9nbmFtZSk7CisgICAgdXNhZ2UoKTsKKyAgfQorCisgIC8qIE9wZW4gdGhlIGlucHV0IGZpbGUuICovCisgIGluZmlsZW5hbWUgPSBhcmd2W2ZpbGVfaW5kZXhdOworICBpZiAoKGlucHV0X2ZpbGUgPSBmb3BlbihpbmZpbGVuYW1lLCBSRUFEX0JJTkFSWSkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzXG4iLCBwcm9nbmFtZSwgaW5maWxlbmFtZSk7CisgICAgZ290byBmYWlsOworICB9CisKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgc3RhcnRfcHJvZ3Jlc3NfbW9uaXRvcigoal9jb21tb25fcHRyKSAmY2luZm8sICZwcm9ncmVzcyk7CisjZW5kaWYKKworICAvKiBTcGVjaWZ5IGRhdGEgc291cmNlIGZvciBkZWNvbXByZXNzaW9uICovCisgIGpwZWdfc3RkaW9fc3JjKCZjaW5mbywgaW5wdXRfZmlsZSk7CisKKyAgLyogUmVhZCBmaWxlIGhlYWRlciwgc2V0IGRlZmF1bHQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzICovCisgICh2b2lkKSBqcGVnX3JlYWRfaGVhZGVyKCZjaW5mbywgVFJVRSk7CisKKyAgLyogQWRqdXN0IGRlZmF1bHQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGJ5IHJlLXBhcnNpbmcgdGhlIG9wdGlvbnMgKi8KKyAgZmlsZV9pbmRleCA9IHBhcnNlX3N3aXRjaGVzKCZjaW5mbywgYXJnYywgYXJndiwgb2xkX2ZpbGVfaW5kZXgsIFRSVUUpOworCisgIC8qIEluaXRpYWxpemUgdGhlIG91dHB1dCBtb2R1bGUgbm93IHRvIGxldCBpdCBvdmVycmlkZSBhbnkgY3J1Y2lhbAorICAgKiBvcHRpb24gc2V0dGluZ3MgKGZvciBpbnN0YW5jZSwgR0lGIHdhbnRzIHRvIGZvcmNlIGNvbG9yIHF1YW50aXphdGlvbikuCisgICAqLworICBzd2l0Y2ggKHJlcXVlc3RlZF9mbXQpIHsKKyNpZmRlZiBCTVBfU1VQUE9SVEVECisgIGNhc2UgRk1UX0JNUDoKKyAgICBkZXN0X21nciA9IGppbml0X3dyaXRlX2JtcCgmY2luZm8sIEZBTFNFKTsKKyAgICBkZWZhdWx0X2V4dGVuc2lvbiA9ICIuYm1wIjsKKyAgICBicmVhazsKKyAgY2FzZSBGTVRfT1MyOgorICAgIGRlc3RfbWdyID0gamluaXRfd3JpdGVfYm1wKCZjaW5mbywgVFJVRSk7CisgICAgZGVmYXVsdF9leHRlbnNpb24gPSAiLmJtcCI7CisgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBHSUZfU1VQUE9SVEVECisgIGNhc2UgRk1UX0dJRjoKKyAgICBkZXN0X21nciA9IGppbml0X3dyaXRlX2dpZigmY2luZm8pOworICAgIGRlZmF1bHRfZXh0ZW5zaW9uID0gIi5naWYiOworICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgUFBNX1NVUFBPUlRFRAorICBjYXNlIEZNVF9QUE06CisgICAgZGVzdF9tZ3IgPSBqaW5pdF93cml0ZV9wcG0oJmNpbmZvKTsKKyAgICBkZWZhdWx0X2V4dGVuc2lvbiA9ICIucHBtIjsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFJMRV9TVVBQT1JURUQKKyAgY2FzZSBGTVRfUkxFOgorICAgIGRlc3RfbWdyID0gamluaXRfd3JpdGVfcmxlKCZjaW5mbyk7CisgICAgZGVmYXVsdF9leHRlbnNpb24gPSAiLnJsZSI7CisgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBUQVJHQV9TVVBQT1JURUQKKyAgY2FzZSBGTVRfVEFSR0E6CisgICAgZGVzdF9tZ3IgPSBqaW5pdF93cml0ZV90YXJnYSgmY2luZm8pOworICAgIGRlZmF1bHRfZXh0ZW5zaW9uID0gIi50Z2EiOworICAgIGJyZWFrOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVCgmY2luZm8sIEpFUlJfVU5TVVBQT1JURURfRk9STUFUKTsKKyAgICBicmVhazsKKyAgfQorCisgIC8qIElmIHVzZXIgZGlkbid0IHN1cHBseSAtb3V0ZmlsZSBzd2l0Y2gsIHNlbGVjdCBvdXRwdXQgZmlsZSBuYW1lLiAqLworICBpZiAob3V0ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgIGludCBpOworCisgICAgb3V0ZmlsZW5hbWUgPSB3b3JrZmlsZW5hbWU7CisgICAgLyogTWFrZSBvdXRmaWxlbmFtZSBiZSBpbmZpbGVuYW1lIHdpdGggYXBwcm9wcmlhdGUgZXh0ZW5zaW9uICovCisgICAgc3RyY3B5KG91dGZpbGVuYW1lLCBpbmZpbGVuYW1lKTsKKyAgICBmb3IgKGkgPSBzdHJsZW4ob3V0ZmlsZW5hbWUpLTE7IGkgPj0gMDsgaS0tKSB7CisgICAgICBzd2l0Y2ggKG91dGZpbGVuYW1lW2ldKSB7CisgICAgICBjYXNlICc6JzoKKyAgICAgIGNhc2UgJy8nOgorICAgICAgY2FzZSAnXFwnOgorCWkgPSAwOwkJCS8qIHN0b3Agc2Nhbm5pbmcgKi8KKwlicmVhazsKKyAgICAgIGNhc2UgJy4nOgorCW91dGZpbGVuYW1lW2ldID0gJ1wwJzsJLyogbG9wIG9mZiBleGlzdGluZyBleHRlbnNpb24gKi8KKwlpID0gMDsJCQkvKiBzdG9wIHNjYW5uaW5nICovCisJYnJlYWs7CisgICAgICBkZWZhdWx0OgorCWJyZWFrOwkJCS8qIGtlZXAgc2Nhbm5pbmcgKi8KKyAgICAgIH0KKyAgICB9CisgICAgc3RyY2F0KG91dGZpbGVuYW1lLCBkZWZhdWx0X2V4dGVuc2lvbik7CisgIH0KKworICBmcHJpbnRmKHN0ZGVyciwgIkRlY29tcHJlc3NpbmcgJXMgPT4gJXNcbiIsIGluZmlsZW5hbWUsIG91dGZpbGVuYW1lKTsKKyNpZm5kZWYgTk9fT1ZFUldSSVRFX0NIRUNLCisgIGlmICghIGlzX3dyaXRlX29rKG91dGZpbGVuYW1lKSkKKyAgICBnb3RvIGZhaWw7CisjZW5kaWYKKworICAvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZS4gKi8KKyAgaWYgKChvdXRwdXRfZmlsZSA9IGZvcGVuKG91dGZpbGVuYW1lLCBXUklURV9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3QgY3JlYXRlICVzXG4iLCBwcm9nbmFtZSwgb3V0ZmlsZW5hbWUpOworICAgIGdvdG8gZmFpbDsKKyAgfQorICBkZXN0X21nci0+b3V0cHV0X2ZpbGUgPSBvdXRwdXRfZmlsZTsKKworICAvKiBTdGFydCBkZWNvbXByZXNzb3IgKi8KKyAgKHZvaWQpIGpwZWdfc3RhcnRfZGVjb21wcmVzcygmY2luZm8pOworCisgIC8qIFdyaXRlIG91dHB1dCBmaWxlIGhlYWRlciAqLworICAoKmRlc3RfbWdyLT5zdGFydF9vdXRwdXQpICgmY2luZm8sIGRlc3RfbWdyKTsKKworICAvKiBQcm9jZXNzIGRhdGEgKi8KKyAgd2hpbGUgKGNpbmZvLm91dHB1dF9zY2FubGluZSA8IGNpbmZvLm91dHB1dF9oZWlnaHQpIHsKKyAgICBudW1fc2NhbmxpbmVzID0ganBlZ19yZWFkX3NjYW5saW5lcygmY2luZm8sIGRlc3RfbWdyLT5idWZmZXIsCisJCQkJCWRlc3RfbWdyLT5idWZmZXJfaGVpZ2h0KTsKKyAgICAoKmRlc3RfbWdyLT5wdXRfcGl4ZWxfcm93cykgKCZjaW5mbywgZGVzdF9tZ3IsIG51bV9zY2FubGluZXMpOworICB9CisKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgLyogSGFjazogY291bnQgZmluYWwgcGFzcyBhcyBkb25lIGluIGNhc2UgZmluaXNoX291dHB1dCBkb2VzIGFuIGV4dHJhIHBhc3MuCisgICAqIFRoZSBsaWJyYXJ5IHdvbid0IGhhdmUgdXBkYXRlZCBjb21wbGV0ZWRfcGFzc2VzLgorICAgKi8KKyAgcHJvZ3Jlc3MucHViLmNvbXBsZXRlZF9wYXNzZXMgPSBwcm9ncmVzcy5wdWIudG90YWxfcGFzc2VzOworI2VuZGlmCisKKyAgLyogRmluaXNoIGRlY29tcHJlc3Npb24gYW5kIHJlbGVhc2UgbWVtb3J5LgorICAgKiBJIG11c3QgZG8gaXQgaW4gdGhpcyBvcmRlciBiZWNhdXNlIG91dHB1dCBtb2R1bGUgaGFzIGFsbG9jYXRlZCBtZW1vcnkKKyAgICogb2YgbGlmZXNwYW4gSlBPT0xfSU1BR0U7IGl0IG5lZWRzIHRvIGZpbmlzaCBiZWZvcmUgcmVsZWFzaW5nIG1lbW9yeS4KKyAgICovCisgICgqZGVzdF9tZ3ItPmZpbmlzaF9vdXRwdXQpICgmY2luZm8sIGRlc3RfbWdyKTsKKyAgKHZvaWQpIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoJmNpbmZvKTsKKworICAvKiBDbGVhbiB1cCBhbmQgZXhpdCAqLworZmFpbDoKKyAganBlZ19kZXN0cm95X2RlY29tcHJlc3MoJmNpbmZvKTsKKworICBpZiAoaW5wdXRfZmlsZSAhPSBOVUxMKSBmY2xvc2UoaW5wdXRfZmlsZSk7CisgIGlmIChvdXRwdXRfZmlsZSAhPSBOVUxMKSBmY2xvc2Uob3V0cHV0X2ZpbGUpOworCisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgIGVuZF9wcm9ncmVzc19tb25pdG9yKChqX2NvbW1vbl9wdHIpICZjaW5mbyk7CisjZW5kaWYKKworICAvKiBEaXNhYmxlIHNpZ25hbCBjYXRjaGVyLiAqLworI2lmZGVmIE5FRURfU0lHTkFMX0NBVENIRVIKKyAgZW5hYmxlX3NpZ25hbF9jYXRjaGVyKChqX2NvbW1vbl9wdHIpIE5VTEwpOworI2VuZGlmCisKKyAgcmV0dXJuIGZpbGVfaW5kZXg7Cit9CisKKworLyoKKyAqIFRoZSBtYWluIHByb2dyYW0uCisgKi8KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBmaWxlX2luZGV4OworCisgIC8qIE9uIE1hYywgZmV0Y2ggYSBjb21tYW5kIGxpbmUuICovCisjaWZkZWYgVVNFX0NDT01NQU5ECisgIGFyZ2MgPSBjY29tbWFuZCgmYXJndik7CisjZW5kaWYKKworI2lmZGVmIE1TRE9TCisgIHByb2duYW1lID0gImRqcGVnIjsJCS8qIERPUyB0ZW5kcyB0byBiZSB0b28gdmVyYm9zZSBhYm91dCBhcmd2WzBdICovCisjZWxzZQorICBwcm9nbmFtZSA9IGFyZ3ZbMF07CisgIGlmIChwcm9nbmFtZSA9PSBOVUxMIHx8IHByb2duYW1lWzBdID09IDApCisgICAgcHJvZ25hbWUgPSAiZGpwZWciOwkJLyogaW4gY2FzZSBDIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIGl0ICovCisjZW5kaWYKKworICAvKiBUaGUgZGVmYXVsdCBtYXhtZW0gbXVzdCBiZSBjb21wdXRlZCBvbmx5IG9uY2UgYXQgcHJvZ3JhbSBzdGFydHVwLAorICAgKiBzaW5jZSByZWxlYXNpbmcgbWVtb3J5IHdpdGggZnJlZSgpIHdvbid0IGdpdmUgaXQgYmFjayB0byB0aGUgT1MuCisgICAqLworI2lmZGVmIEZSRUVfTUVNX0VTVElNQVRFCisgIGRlZmF1bHRfbWF4bWVtID0gRlJFRV9NRU1fRVNUSU1BVEU7CisjZWxzZQorICBkZWZhdWx0X21heG1lbSA9IDA7CisjZW5kaWYKKworICAvKiBTY2FuIGNvbW1hbmQgbGluZSwgcGFyc2Ugc3dpdGNoZXMgYW5kIGxvY2F0ZSBpbnB1dCBmaWxlIG5hbWVzICovCisKKyAgaWYgKGFyZ2MgPCAyKQorICAgIHVzYWdlKCk7CQkJLyogbm90aGluZyBvbiB0aGUgY29tbWFuZCBsaW5lPz8gKi8KKworICBmaWxlX2luZGV4ID0gMDsKKworICB3aGlsZSAoZmlsZV9pbmRleCA8IGFyZ2MtMSkKKyAgICBmaWxlX2luZGV4ID0gcHJvY2Vzc19vbmVfZmlsZShhcmdjLCBhcmd2LCBmaWxlX2luZGV4KTsKKworICAvKiBBbGwgZG9uZS4gKi8KKyAgZXhpdChFWElUX1NVQ0NFU1MpOworICByZXR1cm4gMDsJCQkvKiBzdXBwcmVzcyBuby1yZXR1cm4tdmFsdWUgd2FybmluZ3MgKi8KK30KZGlmZiAtLWdpdCBhL2FsdHVpL3VzYWdlLmFsdCBiL2FsdHVpL3VzYWdlLmFsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzczMzJiCi0tLSAvZGV2L251bGwKKysrIGIvYWx0dWkvdXNhZ2UuYWx0CkBAIC0wLDAgKzEsNjIgQEAKKyhNb3N0IG9mIHRoZSBzdGFuZGFyZCB1c2FnZS5kb2MgZmlsZSBhbHNvIGFwcGxpZXMgdG8gdGhpcyBhbHRlcm5hdGUgdmVyc2lvbiwKK2J1dCByZXBsYWNlIGl0cyAiR0VORVJBTCBVU0FHRSIgc2VjdGlvbiB3aXRoIHRoZSB0ZXh0IGJlbG93LiAgRWRpdCB0aGUgdGV4dAorYXMgbmVjZXNzYXJ5IGlmIHlvdSBkb24ndCBzdXBwb3J0IHdpbGRjYXJkcyBvciBvdmVyd3JpdGUgY2hlY2tpbmcuICBCZSBzdXJlCit0byBmaXggdGhlIGRqcGVnIHN3aXRjaCBkZXNjcmlwdGlvbnMgaWYgeW91IGFyZSBub3QgZGVmYXVsdGluZyB0byBQUE0gb3V0cHV0LgorQWxzbywgaWYgeW91J3ZlIHByb3ZpZGVkIGFuIGFjY3VyYXRlIG1lbW9yeS1lc3RpbWF0aW9uIHByb2NlZHVyZSwgeW91IGNhbgorcHJvYmFibHkgZWxpbWluYXRlIHRoZSBISU5UUyByZWxhdGVkIHRvIHRoZSAtbWF4bWVtb3J5IHN3aXRjaC4pCisKKworR0VORVJBTCBVU0FHRQorCitXZSBwcm92aWRlIHR3byBwcm9ncmFtcywgY2pwZWcgdG8gY29tcHJlc3MgYW4gaW1hZ2UgZmlsZSBpbnRvIEpQRUcgZm9ybWF0LAorYW5kIGRqcGVnIHRvIGRlY29tcHJlc3MgYSBKUEVHIGZpbGUgYmFjayBpbnRvIGEgY29udmVudGlvbmFsIGltYWdlIGZvcm1hdC4KKworVGhlIGJhc2ljIGNvbW1hbmQgbGluZSBpczoKKwljanBlZyBbc3dpdGNoZXNdIGxpc3Qgb2YgaW1hZ2UgZmlsZXMKK29yCisJZGpwZWcgW3N3aXRjaGVzXSBsaXN0IG9mIGpwZWcgZmlsZXMKKworRWFjaCBmaWxlIG5hbWVkIGlzIGNvbXByZXNzZWQgb3IgZGVjb21wcmVzc2VkLiAgVGhlIGlucHV0IGZpbGUocykgYXJlIG5vdAorbW9kaWZpZWQ7IHRoZSBvdXRwdXQgZGF0YSBpcyB3cml0dGVuIHRvIGZpbGVzIHdoaWNoIGhhdmUgdGhlIHNhbWUgbmFtZXMKK2V4Y2VwdCBmb3IgZXh0ZW5zaW9uLiAgY2pwZWcgYWx3YXlzIHVzZXMgIi5qcGciIGZvciB0aGUgb3V0cHV0IGZpbGUgbmFtZSdzCitleHRlbnNpb247IGRqcGVnIHVzZXMgb25lIG9mICIuYm1wIiwgIi5naWYiLCAiLnBwbSIsICIucmxlIiwgb3IgIi50Z2EiLAorZGVwZW5kaW5nIG9uIHdoYXQgb3V0cHV0IGZvcm1hdCBpcyBzZWxlY3RlZCBieSB0aGUgc3dpdGNoZXMuCisKK0ZvciBleGFtcGxlLCB0byBjb252ZXJ0IHh4eC5ibXAgdG8geHh4LmpwZyBhbmQgeXl5LnBwbSB0byB5eXkuanBnLCBzYXk6CisJY2pwZWcgeHh4LmJtcCB5eXkucHBtCisKK09uIG1vc3Qgc3lzdGVtcyB5b3UgY2FuIHVzZSBzdGFuZGFyZCB3aWxkY2FyZHMgdG8gc3BlY2lmeSB0aGUgbGlzdCBvZiBpbnB1dAorZmlsZXM7IGZvciBleGFtcGxlLCBvbiBET1MgImRqcGVnICouanBnIiBkZWNvbXByZXNzZXMgYWxsIHRoZSBKUEVHIGZpbGVzIGluCit0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKK0lmIGFuIGludGVuZGVkIG91dHB1dCBmaWxlIGFscmVhZHkgZXhpc3RzLCB5b3UnbGwgYmUgYXNrZWQgd2hldGhlciBvciBub3QgdG8KK292ZXJ3cml0ZSBpdC4gIElmIHlvdSBzYXkgbm8sIHRoZSBwcm9ncmFtIHNraXBzIHRoYXQgaW5wdXQgZmlsZSBhbmQgZ29lcyBvbgordG8gdGhlIG5leHQgb25lLgorCitZb3UgY2FuIGludGVybWl4IHN3aXRjaGVzIGFuZCBmaWxlIG5hbWVzOyBmb3IgZXhhbXBsZQorCWRqcGVnIC1naWYgZmlsZTEuanBnIC10YXJnYSBmaWxlMi5qcGcKK2RlY29tcHJlc3NlcyBmaWxlMS5qcGcgaW50byBHSUYgZm9ybWF0IChmaWxlMS5naWYpIGFuZCBmaWxlMi5qcGcgaW50byBUYXJnYQorZm9ybWF0IChmaWxlMi50Z2EpLiAgT25seSBzd2l0Y2hlcyB0byB0aGUgbGVmdCBvZiBhIGdpdmVuIGZpbGUgbmFtZSBhZmZlY3QKK3Byb2Nlc3Npbmcgb2YgdGhhdCBmaWxlOyB3aGVuIHRoZXJlIGFyZSBjb25mbGljdGluZyBzd2l0Y2hlcywgdGhlIHJpZ2h0bW9zdAorb25lIHRha2VzIHByZWNlZGVuY2UuCisKK1lvdSBjYW4gb3ZlcnJpZGUgdGhlIHByb2dyYW0ncyBjaG9pY2Ugb2Ygb3V0cHV0IGZpbGUgbmFtZSBieSB1c2luZyB0aGUKKy1vdXRmaWxlIHN3aXRjaCwgYXMgaW4KKwljanBlZyAtb3V0ZmlsZSBvdXRwdXQuanBnIGlucHV0LnBwbQorLW91dGZpbGUgb25seSBhZmZlY3RzIHRoZSBmaXJzdCBpbnB1dCBmaWxlIG5hbWUgdG8gaXRzIHJpZ2h0LgorCitUaGUgY3VycmVudGx5IHN1cHBvcnRlZCBpbWFnZSBmaWxlIGZvcm1hdHMgYXJlOiBQUE0gKFBCTVBMVVMgY29sb3IgZm9ybWF0KSwKK1BHTSAoUEJNUExVUyBncmF5LXNjYWxlIGZvcm1hdCksIEJNUCwgR0lGLCBUYXJnYSwgYW5kIFJMRSAoVXRhaCBSYXN0ZXIKK1Rvb2xraXQgZm9ybWF0KS4gIChSTEUgaXMgc3VwcG9ydGVkIG9ubHkgaWYgdGhlIFVSVCBsaWJyYXJ5IGlzIGF2YWlsYWJsZSwKK3doaWNoIGl0IGlzbid0IG9uIG1vc3Qgbm9uLVVuaXggc3lzdGVtcy4pICBjanBlZyByZWNvZ25pemVzIHRoZSBpbnB1dCBpbWFnZQorZm9ybWF0IGF1dG9tYXRpY2FsbHksIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBzb21lIFRhcmdhLWZvcm1hdCBmaWxlcy4gIFlvdQoraGF2ZSB0byB0ZWxsIGRqcGVnIHdoaWNoIGZvcm1hdCB0byBnZW5lcmF0ZS4KKworSlBFRyBmaWxlcyBhcmUgaW4gdGhlIGRlZmFjdG8gc3RhbmRhcmQgSkZJRiBmaWxlIGZvcm1hdC4gIFRoZXJlIGFyZSBvdGhlciwKK2xlc3Mgd2lkZWx5IHVzZWQgSlBFRy1iYXNlZCBmaWxlIGZvcm1hdHMsIGJ1dCB3ZSBkb24ndCBzdXBwb3J0IHRoZW0uCisKK0FsbCBzd2l0Y2ggbmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkOyBmb3IgZXhhbXBsZSwgLWdyYXlzY2FsZSBtYXkgYmUgd3JpdHRlbgorLWdyYXkgb3IgLWdyLiAgTW9zdCBvZiB0aGUgImJhc2ljIiBzd2l0Y2hlcyBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gYXMgbGl0dGxlIGFzCitvbmUgbGV0dGVyLiAgVXBwZXIgYW5kIGxvd2VyIGNhc2UgYXJlIGVxdWl2YWxlbnQgKC1CTVAgaXMgdGhlIHNhbWUgYXMgLWJtcCkuCitCcml0aXNoIHNwZWxsaW5ncyBhcmUgYWxzbyBhY2NlcHRlZCAoZS5nLiwgLWdyZXlzY2FsZSksIHRob3VnaCBmb3IgYnJldml0eQordGhlc2UgYXJlIG5vdCBtZW50aW9uZWQgYmVsb3cuCmRpZmYgLS1naXQgYS9janBlZy5jIGIvY2pwZWcuYwppbmRleCBmMmE5MjlmLi4xMGY1ZjViIDEwMDY0NAotLS0gYS9janBlZy5jCisrKyBiL2NqcGVnLmMKQEAgLTUsNiArNSwxMyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBmb3IgU0lNRCBleHRlbnNpb24uCisgKiBMYXN0IE1vZGlmaWVkIDogQXVndXN0IDIzLCAyMDA1CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb21tYW5kLWxpbmUgdXNlciBpbnRlcmZhY2UgZm9yIHRoZSBKUEVHIGNvbXByZXNzb3IuCiAgKiBJdCBzaG91bGQgd29yayBvbiBhbnkgc3lzdGVtIHdpdGggVW5peC0gb3IgTVMtRE9TLXN0eWxlIGNvbW1hbmQgbGluZXMuCiAgKgpAQCAtMTk1LDYgKzIwMiwyMiBAQAogfQogCiAKKyNpZm5kZWYgSlNJTURfTU9ERUlORk9fTk9UX1NVUFBPUlRFRAorCitMT0NBTCh2b2lkKQorcHJpbnRfc2ltZF9pbmZvIChGSUxFICogZmlsZSwgY2hhciAqIGxhYmVsc3RyLCB1bnNpZ25lZCBpbnQgc2ltZCkKK3sKKyAgZnByaW50ZihmaWxlLCAiJXMlcyVzJXMlcyVzXG4iLCBsYWJlbHN0ciwKKwkgIHNpbWQgJiBKU0lNRF9NTVggICA/ICIgTU1YIiAgICA6ICIiLAorCSAgc2ltZCAmIEpTSU1EXzNETk9XID8gIiAzRE5vdyEiIDogIiIsCisJICBzaW1kICYgSlNJTURfU1NFICAgPyAiIFNTRSIgICAgOiAiIiwKKwkgIHNpbWQgJiBKU0lNRF9TU0UyICA/ICIgU1NFMiIgICA6ICIiLAorCSAgc2ltZCA9PSBKU0lNRF9OT05FID8gIiBOT05FIiAgIDogIiIpOworfQorCisjZW5kaWYgLyogIUpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQgKi8KKworCiBMT0NBTChpbnQpCiBwYXJzZV9zd2l0Y2hlcyAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBhcmdjLCBjaGFyICoqYXJndiwKIAkJaW50IGxhc3RfZmlsZV9hcmdfc2VlbiwgYm9vbGVhbiBmb3JfcmVhbCkKQEAgLTI1OCw2ICsyODEsMTkgQEAKICAgICAgIC8qIEZvcmNlIGJhc2VsaW5lLWNvbXBhdGlibGUgb3V0cHV0ICg4LWJpdCBxdWFudGl6ZXIgdmFsdWVzKS4gKi8KICAgICAgIGZvcmNlX2Jhc2VsaW5lID0gVFJVRTsKIAorI2lmbmRlZiBKU0lNRF9NQVNLRlVOQ19OT1RfU1VQUE9SVEVECisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJub3NpbWQiICwgNCkpIHsKKyAgICAgIGpwZWdfc2ltZF9tYXNrKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKU0lNRF9OT05FLCBKU0lNRF9BTEwpOworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibm9tbXgiICAsIDMpKSB7CisgICAgICBqcGVnX3NpbWRfbWFzaygoal9jb21tb25fcHRyKSBjaW5mbywgSlNJTURfTk9ORSwgSlNJTURfTU1YKTsKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm5vM2Rub3ciLCAzKSkgeworICAgICAganBlZ19zaW1kX21hc2soKGpfY29tbW9uX3B0cikgY2luZm8sIEpTSU1EX05PTkUsIEpTSU1EXzNETk9XKTsKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm5vc3NlIiAgLCA0KSkgeworICAgICAganBlZ19zaW1kX21hc2soKGpfY29tbW9uX3B0cikgY2luZm8sIEpTSU1EX05PTkUsIEpTSU1EX1NTRSk7CisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJub3NzZTIiICwgNikpIHsKKyAgICAgIGpwZWdfc2ltZF9tYXNrKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKU0lNRF9OT05FLCBKU0lNRF9TU0UyKTsKKyNlbmRpZiAvKiAhSlNJTURfTUFTS0ZVTkNfTk9UX1NVUFBPUlRFRCAqLworCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJkY3QiLCAyKSkgewogICAgICAgLyogU2VsZWN0IERDVCBhbGdvcml0aG0uICovCiAgICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwpAQCAtMjc5LDYgKzMxNSwzMiBAQAogICAgICAgaWYgKCEgcHJpbnRlZF92ZXJzaW9uKSB7CiAJZnByaW50ZihzdGRlcnIsICJJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgQ0pQRUcsIHZlcnNpb24gJXNcbiVzXG4iLAogCQlKVkVSU0lPTiwgSkNPUFlSSUdIVCk7CisJZnByaW50ZihzdGRlcnIsCisJCSJcbng4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwgdmVyc2lvbiAlc1xuXG4iLAorCQlKUEVHX1NJTURFWFRfVkVSX1NUUik7CisjaWZuZGVmIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiU0lNRCBpbnN0cnVjdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0gOiIsCisJCQlqcGVnX3NpbWRfc3VwcG9ydChOVUxMKSk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxuICAgICAgPT09IFNJTUQgT3BlcmF0aW9uIE1vZGVzID09PVxuIik7CisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorCXByaW50X3NpbWRfaW5mbyhzdGRlcnIsICJBY2N1cmF0ZSBpbnRlZ2VyIERDVCAgKC1kY3QgaW50KSAgIDoiLAorCQkJanBlZ19zaW1kX2ZvcndhcmRfZGN0KGNpbmZvLCBKRENUX0lTTE9XKSk7CisjZW5kaWYKKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisJcHJpbnRfc2ltZF9pbmZvKHN0ZGVyciwgIkZhc3QgaW50ZWdlciBEQ1QgICAgICAoLWRjdCBmYXN0KSAgOiIsCisJCQlqcGVnX3NpbWRfZm9yd2FyZF9kY3QoY2luZm8sIEpEQ1RfSUZBU1QpKTsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiRmxvYXRpbmctcG9pbnQgRENUICAgICgtZGN0IGZsb2F0KSA6IiwKKwkJCWpwZWdfc2ltZF9mb3J3YXJkX2RjdChjaW5mbywgSkRDVF9GTE9BVCkpOworI2VuZGlmCisJcHJpbnRfc2ltZF9pbmZvKHN0ZGVyciwgIkRvd25zYW1wbGluZyAoLXNhbXBsZSAyeDIgb3IgMngxKSAgOiIsCisJCQlqcGVnX3NpbWRfZG93bnNhbXBsZXIoY2luZm8pKTsKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiQ29sb3JzcGFjZSBjb252ZXJzaW9uIChSR0ItPllDYkNyKSA6IiwKKwkJCWpwZWdfc2ltZF9jb2xvcl9jb252ZXJ0ZXIoY2luZm8pKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisjZW5kaWYgLyogIUpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQgKi8KIAlwcmludGVkX3ZlcnNpb24gPSBUUlVFOwogICAgICAgfQogICAgICAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwrKzsKZGlmZiAtLWdpdCBhL2NrY29uZmlnLmMgYi9ja2NvbmZpZy5jCmluZGV4IDM0YmFmNzkuLmJhMzgwZGMgMTAwNjQ0Ci0tLSBhL2NrY29uZmlnLmMKKysrIGIvY2tjb25maWcuYwpAQCAtNCw2ICs0LDEzIEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NCwgVGhvbWFzIEcuIExhbmUuCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIGZvciBTSU1EIGV4dGVuc2lvbi4KKyAqIExhc3QgTW9kaWZpZWQgOiBNYXJjaCAyOCwgMjAwNQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAogLyoKQEAgLTM2MiwxMiArMzY5LDI0IEBACiAjZWxzZQogICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU5cbiIpOwogI2VuZGlmCisjaWZkZWYgX1dJTjMyCisgIGZwcmludGYob3V0ZmlsZSwgIlxuLyogRGVmaW5lICJib29sZWFuIiBhcyB1bnNpZ25lZCBjaGFyLCBub3QgaW50LCBwZXIgV2luZG93cyBjdXN0b20gKi9cbiIpOworICBmcHJpbnRmKG91dGZpbGUsICIjZGVmaW5lIFRZUEVERUZfVUNIQVJfQk9PTEVBTlxuIik7CisjZW5kaWYKICAgZnByaW50ZihvdXRmaWxlLCAiXG4jaWZkZWYgSlBFR19JTlRFUk5BTFNcblxuIik7CiAgIGlmIChpc19zaGlmdGluZ19zaWduZWQoLTB4N0Y3RTgwQjFMKSkKICAgICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORURcbiIpOwogICBlbHNlCiAgICAgZnByaW50ZihvdXRmaWxlLCAiI2RlZmluZSBSSUdIVF9TSElGVF9JU19VTlNJR05FRFxuIik7CiAgIGZwcmludGYob3V0ZmlsZSwgIlxuI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxTICovXG4iKTsKKworICBmcHJpbnRmKG91dGZpbGUsICJcbiNpZiBkZWZpbmVkKEpQRUdfSU5URVJOQUxTKSB8fCBkZWZpbmVkKEpQRUdfSU5URVJOQUxfT1BUSU9OUylcbiIpOworICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgSlNJTURfTU1YX05PVF9TVVBQT1JURURcbiIpOworICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgSlNJTURfM0ROT1dfTk9UX1NVUFBPUlRFRFxuIik7CisgIGZwcmludGYob3V0ZmlsZSwgIiN1bmRlZiBKU0lNRF9TU0VfTk9UX1NVUFBPUlRFRFxuIik7CisgIGZwcmludGYob3V0ZmlsZSwgIiN1bmRlZiBKU0lNRF9TU0UyX05PVF9TVVBQT1JURURcbiIpOworICBmcHJpbnRmKG91dGZpbGUsICIjZW5kaWZcbiIpOworCiAgIGZwcmludGYob3V0ZmlsZSwgIlxuI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUdcblxuIik7CiAgIGZwcmludGYob3V0ZmlsZSwgIiNkZWZpbmUgQk1QX1NVUFBPUlRFRAkJLyogQk1QIGltYWdlIGZpbGUgZm9ybWF0ICovXG4iKTsKICAgZnByaW50ZihvdXRmaWxlLCAiI2RlZmluZSBHSUZfU1VQUE9SVEVECQkvKiBHSUYgaW1hZ2UgZmlsZSBmb3JtYXQgKi9cbiIpOwpAQCAtMzc1LDYgKzM5NCw5IEBACiAgIGZwcmludGYob3V0ZmlsZSwgIiN1bmRlZiBSTEVfU1VQUE9SVEVECQkvKiBVdGFoIFJMRSBpbWFnZSBmaWxlIGZvcm1hdCAqL1xuIik7CiAgIGZwcmludGYob3V0ZmlsZSwgIiNkZWZpbmUgVEFSR0FfU1VQUE9SVEVECQkvKiBUYXJnYSBpbWFnZSBmaWxlIGZvcm1hdCAqL1xuXG4iKTsKICAgZnByaW50ZihvdXRmaWxlLCAiI3VuZGVmIFRXT19GSUxFX0NPTU1BTkRMSU5FCS8qIFlvdSBtYXkgbmVlZCB0aGlzIG9uIG5vbi1Vbml4IHN5c3RlbXMgKi9cbiIpOworI2lmZGVmIF9XSU4zMgorICBmcHJpbnRmKG91dGZpbGUsICIjZGVmaW5lIFVTRV9TRVRNT0RFCQkvKiBOZWVkZWQgdG8gbWFrZSBvbmUtZmlsZSBzdHlsZSB3b3JrICovXG4iKTsKKyNlbmRpZgogICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUgkvKiBEZWZpbmUgdGhpcyBpZiB5b3UgdXNlIGptZW1uYW1lLmMgKi9cbiIpOwogICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgRE9OVF9VU0VfQl9NT0RFXG4iKTsKICAgZnByaW50ZihvdXRmaWxlLCAiLyogI2RlZmluZSBQUk9HUkVTU19SRVBPUlQgKi8JLyogb3B0aW9uYWwgKi9cbiIpOwpkaWZmIC0tZ2l0IGEvY29uZmlnLmd1ZXNzIGIvY29uZmlnLmd1ZXNzCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggNDEzZWQ0MS4uZmIyNWZhNAotLS0gYS9jb25maWcuZ3Vlc3MKKysrIGIvY29uZmlnLmd1ZXNzCkBAIC0xLDcgKzEsMTAgQEAKICMhIC9iaW4vc2gKICMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KLSMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDkzLCA5NCwgOTUsIDk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIworIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMDYtMDEtMzAnCisKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTE0LDE1NCArMTcsMzI2IEBACiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KICMKICMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQogIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKICMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCi0jIFdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIgPGJvdGhuZXJAY3lnbnVzLmNvbT4uCi0jIFRoZSBtYXN0ZXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgYXQgdGhlIEZTRiBpbiAvaG9tZS9nZC9nbnUvbGliLgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lciA8cGVyQGJvdGhuZXIuY29tPi4KKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0CisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KICMKICMgVGhpcyBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUgc2ltaWxhciB0bwogIyBjb25maWcuc3ViLiAgSWYgaXQgc3VjY2VlZHMsIGl0IHByaW50cyB0aGUgc3lzdGVtIG5hbWUgb24gc3Rkb3V0LCBhbmQKICMgZXhpdHMgd2l0aCAwLiAgT3RoZXJ3aXNlLCBpdCBleGl0cyB3aXRoIDEuCiAjCiAjIFRoZSBwbGFuIGlzIHRoYXQgdGhpcyBjYW4gYmUgY2FsbGVkIGJ5IGNvbmZpZ3VyZSBzY3JpcHRzIGlmIHlvdQotIyBkb24ndCBzcGVjaWZ5IGFuIGV4cGxpY2l0IHN5c3RlbSB0eXBlIChob3N0L3RhcmdldCBuYW1lKS4KLSMKLSMgT25seSBhIGZldyBzeXN0ZW1zIGhhdmUgYmVlbiBhZGRlZCB0byB0aGlzIGxpc3Q7IHBsZWFzZSBhZGQgb3RoZXJzCi0jIChidXQgdHJ5IHRvIGtlZXAgdGhlIHN0cnVjdHVyZSBjbGVhbikuCi0jCisjIGRvbid0IHNwZWNpZnkgYW4gZXhwbGljaXQgYnVpbGQgc3lzdGVtIHR5cGUuCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKK3RyYXAgJ2V4aXQgMScgMSAyIDE1CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOworCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKKwkgIGZpIDsKKwlkb25lIDsKKwlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKKwlmaQorCTs7CisgLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKKyAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Citlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKIAogIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KLSMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSA4LzI0Lzk0LikKKyMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQogaWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KIAlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKIGZpCiAKIFVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgogVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCi1VTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgogVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCiAKLXRyYXAgJ3JtIC1mIGR1bW15LmMgZHVtbXkubyBkdW1teTsgZXhpdCAxJyAxIDIgMTUKLQogIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgogCiBjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCisgICAgKjpOZXRCU0Q6KjoqKQorCSMgTmV0QlNEIChuYnNkKSB0YXJnZXRzIHNob3VsZCAod2hlcmUgYXBwbGljYWJsZSkgbWF0Y2ggb25lIG9yCisJIyBtb3JlIG9mIHRoZSB0dXBwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5ldGJzZGFvdXQqLAorCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5CisJIyBzd2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxkIHNlbGVjdCB0aGUgb2xkCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJvdGggZm9yd2FyZAorCSMgY29tcGF0aWJpbGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIHRoZQorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LgorCSMKKwkjIE5vdGU6IE5ldEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJseSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKKwkjIHBvcnRpb24gb2YgdGhlIG5hbWUuICBXZSBhbHdheXMgc2V0IGl0IHRvICJ1bmtub3duIi4KKwlzeXNjdGw9InN5c2N0bCAtbiBody5tYWNoaW5lX2FyY2giCisJVU5BTUVfTUFDSElORV9BUkNIPWAoL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCisJICAgIC91c3Ivc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bilgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm1lYikgbWFjaGluZT1hcm1lYi11bmtub3duIDs7CisJICAgIGFybSopIG1hY2hpbmU9YXJtLXVua25vd24gOzsKKwkgICAgc2gzZWwpIG1hY2hpbmU9c2hsLXVua25vd24gOzsKKwkgICAgc2gzZWIpIG1hY2hpbmU9c2gtdW5rbm93biA7OworCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CisJZXNhYworCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAorCSMgdG8gRUxGIHJlY2VudGx5LCBvciB3aWxsIGluIHRoZSBmdXR1cmUuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbAorCQl0aGVuCisJCSAgICAjIE9uY2UgYWxsIHV0aWxpdGllcyBjYW4gYmUgRUNPRkYgKG5ldGJzZGVjb2ZmKSBvciBhLm91dCAobmV0YnNkYW91dCkuCisJCSAgICAjIFJldHVybiBuZXRic2QgZm9yIGVpdGhlci4gIEZJWD8KKwkJICAgIG9zPW5ldGJzZAorCQllbHNlCisJCSAgICBvcz1uZXRic2RlbGYKKwkJZmkKKwkJOzsKKwkgICAgKikKKwkgICAgICAgIG9zPW5ldGJzZAorCQk7OworCWVzYWMKKwkjIFRoZSBPUyByZWxlYXNlCisJIyBEZWJpYW4gR05VL05ldEJTRCBtYWNoaW5lcyBoYXZlIGEgZGlmZmVyZW50IHVzZXJsYW5kLCBhbmQKKwkjIHRodXMsIG5lZWQgYSBkaXN0aW5jdCB0cmlwbGV0LiBIb3dldmVyLCB0aGV5IGRvIG5vdCBuZWVkCisJIyBrZXJuZWwgdmVyc2lvbiBpbmZvcm1hdGlvbiwgc28gaXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYQorCSMgc3VpdGFibGUgdGFnLCBpbiB0aGUgc3R5bGUgb2YgbGludXgtZ251LgorCWNhc2UgIiR7VU5BTUVfVkVSU0lPTn0iIGluCisJICAgIERlYmlhbiopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy1fXS4qL1wuLydgCisJCTs7CisJZXNhYworCSMgU2luY2UgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNOgorCSMgY29udGFpbnMgcmVkdW5kYW50IGluZm9ybWF0aW9uLCB0aGUgc2hvcnRlciBmb3JtOgorCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KKwllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSIKKwlleGl0IDs7CisgICAgKjpPcGVuQlNEOio6KikKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvT3BlbkJTRC4vLydgCisJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOmVra29CU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVra29ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6U29saWRCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXNvbGlkYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYWNwcGM6TWlyQlNEOio6KikKKwllY2hvIHBvd2VycHBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKICAgICBhbHBoYTpPU0YxOio6KikKLQlpZiB0ZXN0ICRVTkFNRV9SRUxFQVNFID0gIlY0LjAiOyB0aGVuCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCiAJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCi0JZmkKKwkJOzsKKwkqNS4qKQorCSAgICAgICAgVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgorCSAgICAiRVY0ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY1ICgyMTE2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIgOzsKKwkgICAgIkVWNS42ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIgOzsKKwkgICAgIkVWNS43ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTciIDs7CisJICAgICJFVjYgKDIxMjY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciIDs7CisJICAgICJFVjYuOENCICgyMTI2NEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OSIgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjciIDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3OSIgOzsKKwllc2FjCisJIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KIAkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KIAkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgogCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgogCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgotCWNhdCA8PEVPRiA+ZHVtbXkucwotCS5nbG9ibCBtYWluCi0JLmVudCBtYWluCi1tYWluOgotCS5mcmFtZSBcJDMwLDAsXCQyNiwwCi0JLnByb2xvZ3VlIDAKLQkubG9uZyAweDQ3ZTAzZDgwICMgaW1wbHZlciAkMAotCWxkYSBcJDIsMjU5Ci0JLmxvbmcgMHg0N2UyMGMyMSAjIGFtYXNrICQyLCQxCi0Jc3JsIFwkMSw4LFwkMgotCXNsbCBcJDIsMixcJDIKLQlzbGwgXCQwLDMsXCQwCi0JYWRkbCBcJDEsXCQwLFwkMAotCWFkZGwgXCQyLFwkMCxcJDAKLQlyZXQgXCQzMSwoXCQyNiksMQotCS5lbmQgbWFpbgotRU9GCi0JJHtDQy1jY30gZHVtbXkucyAtbyBkdW1teSAyPi9kZXYvbnVsbAotCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuCi0JCS4vZHVtbXkKLQkJY2FzZSAiJD8iIGluCi0JCQk3KQotCQkJCVVOQU1FX01BQ0hJTkU9ImFscGhhIgotCQkJCTs7Ci0JCQkxNSkKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIKLQkJCQk7OwotCQkJMTQpCi0JCQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IgotCQkJCTs7Ci0JCQkxMCkKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IgotCQkJCTs7Ci0JCQkxNikKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NiIKLQkJCQk7OwotCQllc2FjCi0JZmkKLQlybSAtZiBkdW1teS5zIGR1bW15Ci0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1vc2ZgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL15bVlRYXS8vJyB8IHRyIFtbQS1aXV0gW1thLXpdXWAKLQlleGl0IDAgOzsKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLW9zZmBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKwlleGl0IDs7CisgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCisJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CisJZWNobyBhbHBoYS1wYy1pbnRlcml4CisJZXhpdCA7OwogICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKIAllY2hvIGFscGhhLWRlYy13aW5udDMuNQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKLQllY2hvIG02OGstY2JtLXN5c3Y0Ci0JZXhpdCAwOzsKLSAgICBhbWlnYTpOZXRCU0Q6KjoqKQotICAgICAgZWNobyBtNjhrLWNibS1uZXRic2Qke1VOQU1FX1JFTEVBU0V9Ci0gICAgICBleGl0IDAgOzsKLSAgICBhbWlnYTpPcGVuQlNEOio6KikKLQllY2hvIG02OGstdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIGFyYzY0Ok9wZW5CU0Q6KjoqKQotCWVjaG8gbWlwczY0ZWwtdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIGFyYzpPcGVuQlNEOio6KikKLQllY2hvIG1pcHNlbC11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgaGttaXBzOk9wZW5CU0Q6KjoqKQotCWVjaG8gbWlwcy11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgcG1heDpPcGVuQlNEOio6KikKLQllY2hvIG1pcHNlbC11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgc2dpOk9wZW5CU0Q6KjoqKQotCWVjaG8gbWlwcy11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgd2dyaXNjOk9wZW5CU0Q6KjoqKQotCWVjaG8gbWlwc2VsLXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKKwlleGl0IDs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCisJZXhpdCA7OworICAgICo6T1MvMzkwOio6KikKKwllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKyAgICAgICAgZWNobyBwb3dlcnBjLWlibS1vczQwMAorCWV4aXQgOzsKICAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCiAJZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMDs7Ci0gICAgYXJtMzI6TmV0QlNEOio6KikKLQllY2hvIGFybS11bmtub3duLW5ldGJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stX10uKi9cLi8nYAotCWV4aXQgMCA7OwotICAgIFNSMj8wMTpISS1VWC9NUFA6KjoqKQorCWV4aXQgOzsKKyAgICBhcm06cmlzY29zOio6Knxhcm06UklTQ09TOio6KikKKwllY2hvIGFybS11bmtub3duLXJpc2NvcworCWV4aXQgOzsKKyAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQogCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKLQlleGl0IDA7OwotICAgIFB5cmFtaWQqOk9TeCo6KjoqfE1JUyo6T1N4KjoqOiopCisJZXhpdCA7OworICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQogCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCiAJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgogCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MwogCWVsc2UKIAkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCiAJZmkKLQlleGl0IDAgOzsKLSAgICBOSUxFOio6KjpkY29zeCkKKwlleGl0IDs7CisgICAgTklMRSo6KjoqOmRjb3N4KQogCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQogCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGk4NnBjOlN1bk9TOjUuKjoqKQogCWVjaG8gaTM4Ni1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo2KjoqKQogCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCiAJIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKIAkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgogCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHN1bjQqOlN1bk9TOio6KikKIAljYXNlICJgL3Vzci9iaW4vYXJjaCAta2AiIGluCiAJICAgIFNlcmllcyp8UzQqKQpAQCAtMTcwLDEyICszNDUsMTIgQEAKIAllc2FjCiAJIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgogCWVjaG8gc3BhcmMtc3VuLXN1bm9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fLydgCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHN1bjMqOlN1bk9TOio6KikKIAllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBzdW4qOio6NC4yQlNEOiopCi0JVU5BTUVfUkVMRUFTRT1gKGhlYWQgLTEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKIAl0ZXN0ICJ4JHtVTkFNRV9SRUxFQVNFfSIgPSAieCIgJiYgVU5BTUVfUkVMRUFTRT0zCiAJY2FzZSAiYC9iaW4vYXJjaGAiIGluCiAJICAgIHN1bjMpCkBAIC0xODUsNTIgKzM2MCw2MyBAQAogCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KIAkJOzsKIAllc2FjCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGF1c2hwOlN1bk9TOio6KikKIAllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKLSAgICBhdGFyaSo6TmV0QlNEOio6KikKLQllY2hvIG02OGstYXRhcmktbmV0YnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIGF0YXJpKjpPcGVuQlNEOio6KikKLQllY2hvIG02OGstdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIHN1bjMqOk5ldEJTRDoqOiopCi0JZWNobyBtNjhrLXN1bi1uZXRic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgc3VuMyo6T3BlbkJTRDoqOiopCi0JZWNobyBtNjhrLXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKLSAgICBtYWM2OGs6TmV0QlNEOio6KikKLQllY2hvIG02OGstYXBwbGUtbmV0YnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIG1hYzY4azpPcGVuQlNEOio6KikKLQllY2hvIG02OGstdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIG12bWU2OGs6T3BlbkJTRDoqOiopCi0JZWNobyBtNjhrLXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKLSAgICBtdm1lODhrOk9wZW5CU0Q6KjoqKQotCWVjaG8gbTg4ay11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgICMgVGhlIHNpdHVhdGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRsZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCisgICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90CisgICAgIyAiYXRhcmlzdCIgb3IgImF0YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHByb2Nlc3NvcgorICAgICMgPiBtNjgwMDApLiAgVGhlIHN5c3RlbSBuYW1lIHJhbmdlcyBmcm9tICJNaU5UIiBvdmVyICJGcmVlTWlOVCIKKyAgICAjIHRvIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiAibWludCIgKG9yICJmcmVlbWludCIpLiAgRmluYWxseQorICAgICMgdGhlIHN5c3RlbSBuYW1lICJUT1MiIGRlbm90ZXMgYSBzeXN0ZW0gd2hpY2ggaXMgYWN0dWFsbHkgbm90CisgICAgIyBNaU5ULiAgQnV0IE1pTlQgaXMgZG93bndhcmQgY29tcGF0aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCisgICAgIyBiZSBubyBwcm9ibGVtLgorICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstaGFkZXMtbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgbTY4azptYWNodGVuOio6KikKKwllY2hvIG02OGstYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgcG93ZXJwYzptYWNodGVuOio6KikKIAllY2hvIHBvd2VycGMtYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgUklTQyo6TWFjaDoqOiopCiAJZWNobyBtaXBzLWRlYy1tYWNoX2JzZDQuMwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBSSVNDKjpVTFRSSVg6KjoqKQogCWVjaG8gbWlwcy1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBWQVgqOlVMVFJJWCo6KjoqKQogCWVjaG8gdmF4LWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgMjAyMDpDTElYOio6KikKKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCiAJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+ZHVtbXkuYwotCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7IHsKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKyNpZmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBmb3IgcHJpbnRmKCkgcHJvdG90eXBlICovCisJaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyNlbHNlCisJaW50IG1haW4gKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICphcmd2W107IHsKKyNlbmRpZgogCSNpZiBkZWZpbmVkIChob3N0X21pcHMpICYmIGRlZmluZWQgKE1JUFNFQikKIAkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TWVNWKQogCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3lzdlxuIiwgYXJndlsxXSk7IGV4aXQgKDApOwpAQCAtMjQ1LDYyICs0MzEsODMgQEAKIAkgIGV4aXQgKC0xKTsKIAl9CiBFT0YKLQkke0NDLWNjfSBkdW1teS5jIC1vIGR1bW15IFwKLQkgICYmIC4vZHVtbXkgYGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgXAotCSAgJiYgcm0gZHVtbXkuYyBkdW1teSAmJiBleGl0IDAKLQlybSAtZiBkdW1teS5jIGR1bW15CisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CiAJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OwogICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCiAJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgbTg4azpDWC9VWDo3KjoqKQogCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgbTg4azoqOjQqOlI0KikKIAllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgbTg4azoqOjMqOlIzKikKIAllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgQVZpaU9OOmRndXg6KjoqKQogICAgICAgICAjIERHL1VYIHJldHVybnMgQVZpaU9OIGZvciBhbGwgYXJjaGl0ZWN0dXJlcwogICAgICAgICBVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAotICAgICAgICBpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIC1vICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTEwIF0gOyB0aGVuCi0JaWYgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSBtODhrZGd1eGVsZnggXAotCSAgICAgLW8gJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0geCBdIDsgdGhlbgorCWlmIFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMDAgXSB8fCBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTEwIF0KKwl0aGVuCisJICAgIGlmIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0gbTg4a2RndXhlbGZ4IF0gfHwgXAorCSAgICAgICBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IHggXQorCSAgICB0aGVuCiAJCWVjaG8gbTg4ay1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQotCWVsc2UKKwkgICAgZWxzZQogCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQogCWZpCi0gICAgICAgIGVsc2UgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9Ci0gICAgICAgIGZpCi0gCWV4aXQgMCA7OworIAlleGl0IDs7CiAgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKIAllY2hvIG04OGstZG9scGhpbi1zeXN2MwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBNODgqOio6UjMqOiopCiAJIyBEZWx0YSA4OGsgc3lzdGVtIHJ1bm5pbmcgU1ZSMwogCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBYRDg4KjoqOio6KikgIyBUZWt0cm9uaXggWEQ4OCBzeXN0ZW0gcnVubmluZyBVVGVrViAoU1ZSMykKIAllY2hvIG04OGstdGVrdHJvbml4LXN5c3YzCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCiAJZWNobyBtNjhrLXRla3Ryb25peC1ic2QKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKjpJUklYKjoqOiopCiAJZWNobyBtaXBzLXNnaS1pcml4YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fL2cnYAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCi0JZWNobyByb21wLWlibS1haXggICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCi0JZXhpdCAwIDs7ICAgICAgICAgICAgICAjIE5vdGUgdGhhdDogZWNobyAiJ2B1bmFtZSAtc2AnIiBnaXZlcyAnQUlYICcKLSAgICBpPzg2OkFJWDoqOiopCisJZWNobyByb21wLWlibS1haXggICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKKwlleGl0IDs7ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCisgICAgaSo4NjpBSVg6KjoqKQogCWVjaG8gaTM4Ni1pYm0tYWl4Ci0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgIGlhNjQ6QUlYOio6KikKKwlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CiAgICAgKjpBSVg6MjozKQogCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgotCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+ZHVtbXkuYworCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCXNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYwogCQkjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgogCiAJCW1haW4oKQpAQCAtMzExLDE3ICs1MTgsMjEgQEAKIAkJCWV4aXQoMCk7CiAJCQl9CiBFT0YKLQkJJHtDQy1jY30gZHVtbXkuYyAtbyBkdW1teSAmJiAuL2R1bW15ICYmIHJtIGR1bW15LmMgZHVtbXkgJiYgZXhpdCAwCi0JCXJtIC1mIGR1bW15LmMgZHVtbXkKLQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41CisJCWlmICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgCisJCXRoZW4KKwkJCWVjaG8gIiRTWVNURU1fTkFNRSIKKwkJZWxzZQorCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41CisJCWZpCiAJZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KIAkJZWNobyByczYwMDAtaWJtLWFpeDMuMi40CiAJZWxzZQogCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCiAJZmkKLQlleGl0IDAgOzsKLSAgICAqOkFJWDoqOjQpCi0JaWYgL3Vzci9zYmluL2xzYXR0ciAtRUhsIHByb2MwIHwgZ3JlcCBQT1dFUiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwlleGl0IDs7CisgICAgKjpBSVg6KjpbNDVdKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgogCQlJQk1fQVJDSD1yczYwMDAKIAllbHNlCiAJCUlCTV9BUkNIPXBvd2VycGMKQEAgLTMyOSw0MyArNTQwLDEyMCBAQAogCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgogCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAogCWVsc2UKLQkJSUJNX1JFVj00LiR7VU5BTUVfUkVMRUFTRX0KKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KIAlmaQogCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKjpBSVg6KjoqKQogCWVjaG8gcnM2MDAwLWlibS1haXgKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCiAJZWNobyByb21wLWlibS1ic2Q0LjQKLQlleGl0IDAgOzsKLSAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgTmV0QlNEIGFuZAorCWV4aXQgOzsKKyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAogCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KLQlleGl0IDAgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworCWV4aXQgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVwb3J0OiByb21wLWlibSBCU0QgNC4zCiAgICAgKjpCT1NYOio6KikKIAllY2hvIHJzNjAwMC1idWxsLWJvc3gKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgRFBYLzI/MDA6Qi5PLlMuOio6KikKIAllY2hvIG02OGstYnVsbC1zeXN2MwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICA5MDAwL1szNF0/Pzo0LjNic2Q6MS4qOiopCiAJZWNobyBtNjhrLWhwLWJzZAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBocDMwMDo0LjRCU0Q6KjoqIHwgOTAwMC9bMzRdPz86NC4zYnNkOjIuKjoqKQogCWVjaG8gbTY4ay1ocC1ic2Q0LjQKLQlleGl0IDAgOzsKLSAgICA5MDAwL1szNDc4XT8/OkhQLVVYOio6KikKKwlleGl0IDs7CisgICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAogCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCiAJICAgIDkwMDAvMzE/ICkgICAgICAgICAgICBIUF9BUkNIPW02ODAwMCA7OwogCSAgICA5MDAwL1szNF0/PyApICAgICAgICAgSFBfQVJDSD1tNjhrIDs7Ci0JICAgIDkwMDAvNz8/IHwgOTAwMC84P1sxNjc5XSApIEhQX0FSQ0g9aHBwYTEuMSA7OwotCSAgICA5MDAwLzg/PyApICAgICAgICAgICAgSFBfQVJDSD1ocHBhMS4wIDs7CisJICAgIDkwMDAvWzY3OF1bMC05XVswLTldKQorCQlpZiBbIC14IC91c3IvYmluL2dldGNvbmYgXTsgdGhlbgorCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICA1MjMpIEhQX0FSQ0g9ImhwcGExLjAiIDs7ICMgQ1BVX1BBX1JJU0MxXzAKKyAgICAgICAgICAgICAgICAgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKKyAgICAgICAgICAgICAgICAgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAzMikgSFBfQVJDSD0iaHBwYTIuMG4iIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIDY0KSBIUF9BUkNIPSJocHBhMi4wdyIgOzsKKwkJCSAgJycpIEhQX0FSQ0g9ImhwcGEyLjAiIDs7ICAgIyBIUC1VWCAxMC4yMAorICAgICAgICAgICAgICAgICAgICAgICAgZXNhYyA7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisJCWZpCisJCWlmIFsgIiR7SFBfQVJDSH0iID0gIiIgXTsgdGhlbgorCQkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQkgICAgc2VkICdzL14gICAgICAgICAgICAgIC8vJyA8PCBFT0YgPiRkdW1teS5jCisKKyAgICAgICAgICAgICAgI2RlZmluZSBfSFBVWF9TT1VSQ0UKKyAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgICAjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyAgICAgICAgICAgICAgaW50IG1haW4gKCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisgICAgICAgICAgICAgICAgICBsb25nIGJpdHMgPSBzeXNjb25mKF9TQ19LRVJORUxfQklUUyk7CisgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgbG9uZyBjcHUgID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKworICAgICAgICAgICAgICAgICAgc3dpdGNoIChjcHUpCisgICAgICAgICAgICAgIAl7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xIik7IGJyZWFrOworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzJfMDoKKyAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorICAgICAgICAgICAgICAJICAgIHN3aXRjaCAoYml0cykKKyAgICAgICAgICAgICAgCQl7CisgICAgICAgICAgICAgIAkJY2FzZSA2NDogcHV0cyAoImhwcGEyLjB3Iik7IGJyZWFrOworICAgICAgICAgICAgICAJCWNhc2UgMzI6IHB1dHMgKCJocHBhMi4wbiIpOyBicmVhazsKKyAgICAgICAgICAgICAgCQlkZWZhdWx0OiBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgCQl9IGJyZWFrOworICAgICAgICAgICAgICAjZWxzZSAgLyogIWRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKSAqLworICAgICAgICAgICAgICAJICAgIHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgCWRlZmF1bHQ6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgZXhpdCAoMCk7CisgICAgICAgICAgICAgIH0KK0VPRgorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwpICYmIEhQX0FSQ0g9YCRkdW1teWAKKwkJICAgIHRlc3QgLXogIiRIUF9BUkNIIiAmJiBIUF9BUkNIPWhwcGEKKwkJZmkgOzsKIAllc2FjCi0JSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJaWYgWyAke0hQX0FSQ0h9ID0gImhwcGEyLjB3IiBdCisJdGhlbgorCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisKKwkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKKwkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCisJICAgICMgZ2VuZXJhdGluZyA2NC1iaXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVudCBub21lbmNsYXR1cmU6CisJICAgICMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGEyLjB3LWhwLWhwdXgxMS4yMworCSAgICAjICQgQ0NfRk9SX0JVSUxEPSJjYyArREEyLjB3IiAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKKworCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8CisJCWdyZXAgX19MUDY0X18gPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCUhQX0FSQ0g9ImhwcGEyLjB3IgorCSAgICBlbHNlCisJCUhQX0FSQ0g9ImhwcGE2NCIKKwkgICAgZmkKKwlmaQogCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKICAgICAzMDUwKjpISS1VWDoqOiopCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+ZHVtbXkuYworCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwogCSNpbmNsdWRlIDx1bmlzdGQuaD4KIAlpbnQKIAltYWluICgpCkBAIC0zOTAsMzI0ICs2NzgsNDY3IEBACiAJICBleGl0ICgwKTsKIAl9CiBFT0YKLQkke0NDLWNjfSBkdW1teS5jIC1vIGR1bW15ICYmIC4vZHVtbXkgJiYgcm0gZHVtbXkuYyBkdW1teSAmJiBleGl0IDAKLQlybSAtZiBkdW1teS5jIGR1bW15CisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CiAJZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KiApCiAJZWNobyBocHBhMS4xLWhwLWJzZAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICA5MDAwLzg/Pzo0LjNic2Q6KjoqKQogCWVjaG8gaHBwYTEuMC1ocC1ic2QKLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1tcGVpeAorCWV4aXQgOzsKICAgICBocDc/PzpPU0YxOio6KiB8IGhwOD9bNzldOk9TRjE6KjoqICkKIAllY2hvIGhwcGExLjEtaHAtb3NmCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGhwOD8/Ok9TRjE6KjoqKQogCWVjaG8gaHBwYTEuMC1ocC1vc2YKLQlleGl0IDAgOzsKLSAgICBpPzg2Ok9TRjE6KjoqKQorCWV4aXQgOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQogCWlmIFsgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gXSA7IHRoZW4KIAkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMW1rCiAJZWxzZQogCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxCiAJZmkKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQogCWVjaG8gaHBwYTEuMS1ocC1saXRlcwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMxKjoqKQogCWVjaG8gYzEtY29udmV4LWJzZAotICAgICAgICBleGl0IDAgOzsKKyAgICAgICAgZXhpdCA7OwogICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCiAJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCiAJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCiAJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKIAlmaQotICAgICAgICBleGl0IDAgOzsKKyAgICAgICAgZXhpdCA7OwogICAgIEMzNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzNCo6KikKIAllY2hvIGMzNC1jb252ZXgtYnNkCi0gICAgICAgIGV4aXQgMCA7OworICAgICAgICBleGl0IDs7CiAgICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQogCWVjaG8gYzM4LWNvbnZleC1ic2QKLSAgICAgICAgZXhpdCAwIDs7CisgICAgICAgIGV4aXQgOzsKICAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQogCWVjaG8gYzQtY29udmV4LWJzZAotICAgICAgICBleGl0IDAgOzsKLSAgICBDUkFZKlgtTVA6KjoqOiopCi0JZWNobyB4bXAtY3JheS11bmljb3MKLSAgICAgICAgZXhpdCAwIDs7CisgICAgICAgIGV4aXQgOzsKICAgICBDUkFZKlktTVA6KjoqOiopCi0JZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CiAgICAgQ1JBWSpbQS1aXTkwOio6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAogCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAotCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovCi0JZXhpdCAwIDs7CisJICAgICAgLWUgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8gXAorCSAgICAgIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CiAgICAgQ1JBWSpUUzoqOio6KikKLQllY2hvIHQ5MC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKLSAgICBDUkFZLTI6KjoqOiopCi0JZWNobyBjcmF5Mi1jcmF5LXVuaWNvcwotICAgICAgICBleGl0IDAgOzsKLSAgICBGMzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQotICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciBbQS1aXSBbYS16XSB8IHNlZCAtZSAncy9cLy8vJ2AKKwllY2hvIHQ5MC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlQzRToqOio6KikKKwllY2hvIGFscGhhZXY1LWNyYXktdW5pY29zbWske1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpTVjE6KjoqOiopCisJZWNobyBzdjEtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgKjpVTklDT1MvbXA6KjoqKQorCWVjaG8gY3JheW52LWNyYXktdW5pY29zbXAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgRjMwWzAxXTpVTklYX1N5c3RlbV9WOio6KiB8IEY3MDA6VU5JWF9TeXN0ZW1fVjoqOiopCisJRlVKSVRTVV9QUk9DPWB1bmFtZSAtbSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKyAgICAgICAgRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAogICAgICAgICBGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAotICAgICAgICBlY2hvICJmMzAwLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKLSAgICAgICAgZXhpdCAwIDs7Ci0gICAgRjMwMTpVTklYX1N5c3RlbV9WOio6KikKLSAgICAgICBlY2hvIGYzMDEtZnVqaXRzdS11eHB2YGVjaG8gJFVOQU1FX1JFTEVBU0UgfCBzZWQgJ3MvIC4qLy8nYAotICAgICAgIGV4aXQgMCA7OwotICAgIGhwM1swLTldWzA1XTpOZXRCU0Q6KjoqKQotCWVjaG8gbTY4ay1ocC1uZXRic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgaHAzMDA6T3BlbkJTRDoqOiopCi0JZWNobyBtNjhrLXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKLSAgICBpPzg2OkJTRC8zODY6KjoqIHwgKjpCU0QvT1M6KjoqKQorICAgICAgICBlY2hvICIke0ZVSklUU1VfUFJPQ30tZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorICAgICAgICBleGl0IDs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisgICAgICAgIEZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvIC9fLydgCisgICAgICAgIGVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgIHNwYXJjKjpCU0QvT1M6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkJTRC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgKjpGcmVlQlNEOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAotCWV4aXQgMCA7OwotICAgICo6TmV0QlNEOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1uZXRic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKLQlleGl0IDAgOzsKLSAgICAqOk9wZW5CU0Q6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9wZW5ic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKLQlleGl0IDAgOzsKKwljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgcGM5OCkKKwkJZWNobyBpMzg2LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgKikKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCisJZXhpdCA7OwogICAgIGkqOkNZR1dJTio6KikKLQllY2hvIGkzODYtcGMtY3lnd2luMzIKLQlleGl0IDAgOzsKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCisJZXhpdCA7OwogICAgIGkqOk1JTkdXKjoqKQotCWVjaG8gaTM4Ni1wYy1taW5ndzMyCi0JZXhpdCAwIDs7CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorICAgIAkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpQVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorCWV4aXQgOzsKKyAgICB4ODY6SW50ZXJpeCo6WzM0NV0qKQorCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvXC4uKi8vJworCWV4aXQgOzsKKyAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCisJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKwlleGl0IDs7CisgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCisJIyBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZCBvZiBpMzg2PworCWVjaG8gaTU4Ni1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIGkqOlVXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXV3aW4KKwlleGl0IDs7CisgICAgYW1kNjQ6Q1lHV0lOKjoqOiogfCB4ODZfNjQ6Q1lHV0lOKjoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CiAgICAgcCo6Q1lHV0lOKjoqKQotCWVjaG8gcG93ZXJwY2xlLXVua25vd24tY3lnd2luMzIKLQlleGl0IDAgOzsKKwllY2hvIHBvd2VycGNsZS11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKICAgICBwcmVwKjpTdW5PUzo1Lio6KikKIAllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6R05VOio6KikKKwkjIHRoZSBHTlUgc3lzdGVtCiAJZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLWdudWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCi0JZXhpdCAwIDs7Ci0gICAgKjpMaW51eDoqOiopCisJZXhpdCA7OworICAgICo6R05VLyo6KjoqKQorCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtZ251CisJZXhpdCA7OworICAgIGkqODY6TWluaXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAorCWV4aXQgOzsKKyAgICBhcm0qOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgY3JpczpMaW51eDoqOiopCisJZWNobyBjcmlzLWF4aXMtbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCWVjaG8gY3Jpc3YzMi1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBmcnY6TGludXg6KjoqKQorICAgIAllY2hvIGZydi11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBpYTY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTMycio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtNjgqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbWlwczpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiBtaXBzCisJI3VuZGVmIG1pcHNlbAorCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJQ1BVPW1pcHNlbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9bWlwcworCSNlbHNlCisJQ1BVPQorCSNlbmRpZgorCSNlbmRpZgorRU9GCisJZXZhbCAiYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBzZWQgLW4gJworCSAgICAvXkNQVS97CisJCXM6IDo6ZworCQlwCisJICAgIH0nYCIKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQorCTs7CisgICAgbWlwczY0OkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjdW5kZWYgQ1BVCisJI3VuZGVmIG1pcHM2NAorCSN1bmRlZiBtaXBzNjRlbAorCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJQ1BVPW1pcHM2NGVsCisJI2Vsc2UKKwkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQorCUNQVT1taXBzNjQKKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKKwkgICAgL15DUFUveworCQlzOiA6OmcKKwkJcAorCSAgICB9J2AiCisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKwk7OworICAgIG9yMzI6TGludXg6KjoqKQorCWVjaG8gb3IzMi11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgYWxwaGE6TGludXg6KjoqKQorCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCisJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgRVY2NykgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7CisJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKyAgICAgICAgZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgbGQuc28uMSA+L2Rldi9udWxsCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCisJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LWdudSA7OworCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKKwlleGl0IDs7CisgICAgc2g2NCo6TGludXg6KjoqKQorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc2gqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHZheDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgeDg2XzY0OkxpbnV4Oio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKIAkjIFRoZSBCRkQgbGlua2VyIGtub3dzIHdoYXQgdGhlIGRlZmF1bHQgb2JqZWN0IGZpbGUgZm9ybWF0IGlzLCBzbwotCSMgZmlyc3Qgc2VlIGlmIGl0IHdpbGwgdGVsbCB1cy4KLQlsZF9oZWxwX3N0cmluZz1gbGQgLS1oZWxwIDI+JjFgCi0JbGRfc3VwcG9ydGVkX2VtdWxhdGlvbnM9YGVjaG8gJGxkX2hlbHBfc3RyaW5nIFwKLQkJCSB8IHNlZCAtbmUgJy9zdXBwb3J0ZWQgZW11bGF0aW9uczovIWQKKwkjIGZpcnN0IHNlZSBpZiBpdCB3aWxsIHRlbGwgdXMuIGNkIHRvIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmV2ZW50CisJIyBwcm9ibGVtcyB3aXRoIG90aGVyIHByb2dyYW1zIG9yIGRpcmVjdG9yaWVzIGNhbGxlZCBgbGQnIGluIHRoZSBwYXRoLgorCSMgU2V0IExDX0FMTD1DIHRvIGVuc3VyZSBsZCBvdXRwdXRzIG1lc3NhZ2VzIGluIEVuZ2xpc2guCisJbGRfc3VwcG9ydGVkX3RhcmdldHM9YGNkIC87IExDX0FMTD1DIGxkIC0taGVscCAyPiYxIFwKKwkJCSB8IHNlZCAtbmUgJy9zdXBwb3J0ZWQgdGFyZ2V0czovIWQKIAkJCQkgICAgcy9bIAldWyAJXSovIC9nCi0JCQkJICAgIHMvLipzdXBwb3J0ZWQgZW11bGF0aW9uczogKi8vCisJCQkJICAgIHMvLipzdXBwb3J0ZWQgdGFyZ2V0czogKi8vCiAJCQkJICAgIHMvIC4qLy8KIAkJCQkgICAgcCdgCi0gICAgICAgIGNhc2UgIiRsZF9zdXBwb3J0ZWRfZW11bGF0aW9ucyIgaW4KLQkgIGk/ODZsaW51eCkgIGVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251YW91dCIgICAgICA7IGV4aXQgMCA7OwotCSAgaT84NmNvZmYpICAgZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVjb2ZmIiAgICAgIDsgZXhpdCAwIDs7Ci0JICBzcGFyY2xpbnV4KSBlY2hvICIke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251YW91dCIgOyBleGl0IDAgOzsKLQkgIG02OGtsaW51eCkgIGVjaG8gIiR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVhb3V0IiA7IGV4aXQgMCA7OwotCSAgZWxmMzJwcGMpICAgZWNobyAicG93ZXJwYy11bmtub3duLWxpbnV4LWdudSIgICAgICAgICAgICAgIDsgZXhpdCAwIDs7CisgICAgICAgIGNhc2UgIiRsZF9zdXBwb3J0ZWRfdGFyZ2V0cyIgaW4KKwkgIGVsZjMyLWkzODYpCisJCVRFTlRBVElWRT0iJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnUiCisJCTs7CisJICBhLm91dC1pMzg2LWxpbnV4KQorCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudWFvdXQiCisJCWV4aXQgOzsKKwkgIGNvZmYtaTM4NikKKwkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVjb2ZmIgorCQlleGl0IDs7CisJICAiIikKKwkJIyBFaXRoZXIgYSBwcmUtQkZEIGEub3V0IGxpbmtlciAobGludXgtZ251b2xkbGQpIG9yCisJCSMgb25lIHRoYXQgZG9lcyBub3QgZ2l2ZSB1cyB1c2VmdWwgLS1oZWxwLgorCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudW9sZGxkIgorCQlleGl0IDs7CiAJZXNhYwotCi0JaWYgdGVzdCAiJHtVTkFNRV9NQUNISU5FfSIgPSAiYWxwaGEiIDsgdGhlbgotCQlzZWQgJ3MvXgkvLycgIDw8RU9GID5kdW1teS5zCi0JCS5nbG9ibCBtYWluCi0JCS5lbnQgbWFpbgotCW1haW46Ci0JCS5mcmFtZSBcJDMwLDAsXCQyNiwwCi0JCS5wcm9sb2d1ZSAwCi0JCS5sb25nIDB4NDdlMDNkODAgIyBpbXBsdmVyICQwCi0JCWxkYSBcJDIsMjU5Ci0JCS5sb25nIDB4NDdlMjBjMjEgIyBhbWFzayAkMiwkMQotCQlzcmwgXCQxLDgsXCQyCi0JCXNsbCBcJDIsMixcJDIKLQkJc2xsIFwkMCwzLFwkMAotCQlhZGRsIFwkMSxcJDAsXCQwCi0JCWFkZGwgXCQyLFwkMCxcJDAKLQkJcmV0IFwkMzEsKFwkMjYpLDEKLQkJLmVuZCBtYWluCisJIyBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGVmYXVsdCBjb21waWxlciBpcyBhLm91dCBvciBlbGYKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKwkjaWZkZWYgX19FTEZfXworCSMgaWZkZWYgX19HTElCQ19fCisJIyAgaWYgX19HTElCQ19fID49IDIKKwlMSUJDPWdudQorCSMgIGVsc2UKKwlMSUJDPWdudWxpYmMxCisJIyAgZW5kaWYKKwkjIGVsc2UKKwlMSUJDPWdudWxpYmMxCisJIyBlbmRpZgorCSNlbHNlCisJI2lmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgfHwgZGVmaW5lZChfX1BHSSkKKwlMSUJDPWdudQorCSNlbHNlCisJTElCQz1nbnVhb3V0CisJI2VuZGlmCisJI2VuZGlmCisJI2lmZGVmIF9fZGlldGxpYmNfXworCUxJQkM9ZGlldGxpYmMKKwkjZW5kaWYKIEVPRgotCQlMSUJDPSIiCi0JCSR7Q0MtY2N9IGR1bW15LnMgLW8gZHVtbXkgMj4vZGV2L251bGwKLQkJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4KLQkJCS4vZHVtbXkKLQkJCWNhc2UgIiQ/IiBpbgotCQkJNykKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIKLQkJCQk7OwotCQkJMTUpCi0JCQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjUiCi0JCQkJOzsKLQkJCTE0KQotCQkJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1NiIKLQkJCQk7OwotCQkJMTApCi0JCQkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIKLQkJCQk7OwotCQkJMTYpCi0JCQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjYiCi0JCQkJOzsKLQkJCWVzYWMJCi0KLQkJCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgZHVtbXkgfCBcCi0JCQkgIGdyZXAgbGQuc28uMSA+IC9kZXYvbnVsbAotCQkJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4KLQkJCQlMSUJDPSJsaWJjMSIKLQkJCWZpCi0JCWZpCQotCQlybSAtZiBkdW1teS5zIGR1bW15Ci0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30gOyBleGl0IDAKLQllbGlmIHRlc3QgIiR7VU5BTUVfTUFDSElORX0iID0gIm1pcHMiIDsgdGhlbgotCSAgY2F0ID5kdW1teS5jIDw8RU9GCi1tYWluKGFyZ2MsIGFyZ3YpCi0gICAgIGludCBhcmdjOwotICAgICBjaGFyICphcmd2W107Ci17Ci0jaWZkZWYgX19NSVBTRUJfXwotICBwcmludGYgKCIlcy11bmtub3duLWxpbnV4LWdudVxuIiwgYXJndlsxXSk7Ci0jZW5kaWYKLSNpZmRlZiBfX01JUFNFTF9fCi0gIHByaW50ZiAoIiVzZWwtdW5rbm93bi1saW51eC1nbnVcbiIsIGFyZ3ZbMV0pOwotI2VuZGlmCi0gIHJldHVybiAwOwotfQotRU9GCi0JICAke0NDLWNjfSBkdW1teS5jIC1vIGR1bW15IDI+L2Rldi9udWxsICYmIC4vZHVtbXkgIiR7VU5BTUVfTUFDSElORX0iICYmIHJtIGR1bW15LmMgZHVtbXkgJiYgZXhpdCAwCi0JICBybSAtZiBkdW1teS5jIGR1bW15Ci0JZWxzZQotCSAgIyBFaXRoZXIgYSBwcmUtQkZEIGEub3V0IGxpbmtlciAobGludXgtZ251b2xkbGQpCi0JICAjIG9yIG9uZSB0aGF0IGRvZXMgbm90IGdpdmUgdXMgdXNlZnVsIC0taGVscC4KLQkgICMgR0NDIHdhbnRzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbGludXgtZ251b2xkbGQgYW5kIGxpbnV4LWdudWFvdXQuCi0JICAjIElmIGxkIGRvZXMgbm90IHByb3ZpZGUgKmFueSogInN1cHBvcnRlZCBlbXVsYXRpb25zOiIKLQkgICMgdGhhdCBtZWFucyBpdCBpcyBnbnVvbGRsZC4KLQkgIGVjaG8gIiRsZF9oZWxwX3N0cmluZyIgfCBncmVwID4vZGV2L251bGwgMj4mMSAic3VwcG9ydGVkIGVtdWxhdGlvbnM6IgotCSAgdGVzdCAkPyAhPSAwICYmIGVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251b2xkbGQiICYmIGV4aXQgMAotCi0JICBjYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgotCSAgaT84NikKLQkgICAgVkVORE9SPXBjOwotCSAgICA7OwotCSAgKikKLQkgICAgVkVORE9SPXVua25vd247Ci0JICAgIDs7Ci0JICBlc2FjCi0JICAjIERldGVybWluZSB3aGV0aGVyIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGlzIGEub3V0IG9yIGVsZgotCSAgY2F0ID5kdW1teS5jIDw8RU9GCi0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLW1haW4oYXJnYywgYXJndikKLSAgICAgaW50IGFyZ2M7Ci0gICAgIGNoYXIgKmFyZ3ZbXTsKLXsKLSNpZmRlZiBfX0VMRl9fCi0jIGlmZGVmIF9fR0xJQkNfXwotIyAgaWYgX19HTElCQ19fID49IDIKLSAgICBwcmludGYgKCIlcy0ke1ZFTkRPUn0tbGludXgtZ251XG4iLCBhcmd2WzFdKTsKLSMgIGVsc2UKLSAgICBwcmludGYgKCIlcy0ke1ZFTkRPUn0tbGludXgtZ251bGliYzFcbiIsIGFyZ3ZbMV0pOwotIyAgZW5kaWYKLSMgZWxzZQotICAgcHJpbnRmICgiJXMtJHtWRU5ET1J9LWxpbnV4LWdudWxpYmMxXG4iLCBhcmd2WzFdKTsKLSMgZW5kaWYKLSNlbHNlCi0gIHByaW50ZiAoIiVzLSR7VkVORE9SfS1saW51eC1nbnVhb3V0XG4iLCBhcmd2WzFdKTsKLSNlbmRpZgotICByZXR1cm4gMDsKLX0KLUVPRgotCSAgJHtDQy1jY30gZHVtbXkuYyAtbyBkdW1teSAyPi9kZXYvbnVsbCAmJiAuL2R1bW15ICIke1VOQU1FX01BQ0hJTkV9IiAmJiBybSBkdW1teS5jIGR1bW15ICYmIGV4aXQgMAotCSAgcm0gLWYgZHVtbXkuYyBkdW1teQotCWZpIDs7Ci0jIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLiAgZWFybGllciB2ZXJzaW9ucwotIyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGggc3lzbmFtZSBhbmQgbm9kZW5hbWUuCi0gICAgaT84NjpEWU5JWC9wdHg6NCo6KikKKwlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCisJICAgIC9eTElCQy97CisJCXM6IDo6ZworCQlwCisJICAgIH0nYCIKKwl0ZXN0IHgiJHtMSUJDfSIgIT0geCAmJiB7CisJCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKwkJZXhpdAorCX0KKwl0ZXN0IHgiJHtURU5UQVRJVkV9IiAhPSB4ICYmIHsgZWNobyAiJHtURU5UQVRJVkV9IjsgZXhpdDsgfQorCTs7CisgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgogCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0Ci0JZXhpdCAwIDs7Ci0gICAgaT84NjpVTklYX1NWOjQuMk1QOjIuKikKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKICAgICAgICAgIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgogICAgICAgICAjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCiAgICAgICAgICMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKIAkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCiAgICAgICAgICMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059Ci0JZXhpdCAwIDs7Ci0gICAgaT84NjoqOjQuKjoqIHwgaT84NjpTWVNURU1fVjo0Lio6KikKKwlleGl0IDs7CisgICAgaSo4NjpPUy8yOio6KikKKwkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQorCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1vczItZW14CisJZXhpdCA7OworICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3RvcAorCWV4aXQgOzsKKyAgICBpKjg2OmF0aGVvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCisJZXhpdCA7OworICAgIGkqODY6c3lsbGFibGU6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQorCWV4aXQgOzsKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuMCo6KikKKwllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGkqODY6KkRPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgaSo4NjoqOjQuKjoqIHwgaSo4NjpTWVNURU1fVjo0Lio6KikKKwlVTkFNRV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAncy9cL01QJC8vJ2AKIAlpZiBncmVwIE5vdmVsbCAvdXNyL2luY2x1ZGUvbGluay5oID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVuaXZlbC1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5pdmVsLXN5c3Yke1VOQU1FX1JFTH0KIAllbHNlCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMfQogCWZpCi0JZXhpdCAwIDs7Ci0gICAgaT84NjoqOjMuMjoqKQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpbNjc4XSopCisgICAgCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCisJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKKwkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6KjozLjI6KikKIAlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCiAJCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKIAkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWlzYyRVTkFNRV9SRUwKIAllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KLQkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxlZ3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKLQkJKC9iaW4vdW5hbWUgLVh8ZWdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgotCQkoL2Jpbi91bmFtZSAtWHxlZ3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKIAkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudCAqSUknID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgogCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2NvJFVOQU1FX1JFTAogCWVsc2UKIAkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3YzMgogCWZpCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHBjOio6KjoqKQorCSMgTGVmdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5OgogICAgICAgICAjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAogICAgICAgICAjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpMzg2LgogCWVjaG8gaTM4Ni1wYy1tc2Rvc2RqZ3BwCi0gICAgICAgIGV4aXQgMCA7OworICAgICAgICBleGl0IDs7CiAgICAgSW50ZWw6TWFjaDozKjoqKQogCWVjaG8gaTM4Ni1wYy1tYWNoMwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBwYXJhZ29uOio6KjoqKQogCWVjaG8gaTg2MC1pbnRlbC1vc2YxCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGk4NjA6Kjo0Lio6KikgIyBpODYwLVNWUjQKIAlpZiBncmVwIFN0YXJkZW50IC91c3IvaW5jbHVkZS9zeXMvdWFkbWluLmggPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgogCSAgZWNobyBpODYwLXN0YXJkZW50LXN5c3Yke1VOQU1FX1JFTEVBU0V9ICMgU3RhcmRlbnQgVmlzdHJhIGk4NjAtU1ZSNAogCWVsc2UgIyBBZGQgb3RoZXIgaTg2MC1TVlI0IHZlbmRvcnMgYmVsb3cgYXMgdGhleSBhcmUgZGlzY292ZXJlZC4KIAkgIGVjaG8gaTg2MC11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9ICAjIFVua25vd24gaTg2MC1TVlI0CiAJZmkKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgbWluaSo6Q1RJWDpTWVMqNToqKQogCSMgIm1pbmlmcmFtZSIKIAllY2hvIG02ODAxMC1jb252ZXJnZW50LXN5c3YKLQlleGl0IDAgOzsKLSAgICBNNjgqOio6UjNWWzU2N10qOiopCi0JdGVzdCAtciAvc3lzVjY4ICYmIGVjaG8gJ202OGstbW90b3JvbGEtc3lzdicgJiYgZXhpdCAwIDs7Ci0gICAgM1szNF0/PzoqOjQuMDozLjAgfCAzWzM0XT8/LCo6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjApCisJZXhpdCA7OworICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKKwllY2hvIG02OGstY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIE02ODA/MDpELU5JWDo1LjM6KikKKwllY2hvIG02OGstZGlhYi1kbml4CisJZXhpdCA7OworICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQogCU9TX1JFTD0nJwogCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAogCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCiAJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0JICAmJiBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH0gJiYgZXhpdCAwCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQogCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAotCSAgJiYgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9ICYmIGV4aXQgMCA7OworCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKICAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKICAgICAgICAgL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0gICAgICAgICAgJiYgZWNobyBpNDg2LW5jci1zeXN2NCAmJiBleGl0IDAgOzsKLSAgICBtNjgqOkx5bnhPUzoyLio6KikKKyAgICAgICAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKIAllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKIAllY2hvIG02OGstYXRhcmktc3lzdjQKLQlleGl0IDAgOzsKLSAgICBpPzg2Okx5bnhPUzoyLio6KikKLQllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQogCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgcnM2MDAwOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjIuKjoqKQorCWV4aXQgOzsKKyAgICByczYwMDA6THlueE9TOjIuKjoqKQogCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuMCo6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OwogICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCiAJZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKICAgICBSTSo6U0lOSVgtKjoqOiopCiAJZWNobyBtaXBzLXNuaS1zeXN2NAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOlNJTklYLSo6KjoqKQogCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCiAJCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCkBAIC03MTUsMzkgKzExNDYsMTU2IEBACiAJZWxzZQogCQllY2hvIG5zMzJrLXNuaS1zeXN2CiAJZmkKLQlleGl0IDAgOzsKLSAgICBQRU5USVVNOkNQdW5peDo0LjAqOiopICMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CisJZXhpdCA7OworICAgIFBFTlRJVU06Kjo0LjAqOiopICMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0CisgICAgICAgICAgICAgICAgICAgICAgIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgogICAgICAgICBlY2hvIGk1ODYtdW5pc3lzLXN5c3Y0Ci0gICAgICAgIGV4aXQgMCA7OworICAgICAgICBleGl0IDs7CiAgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCiAJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgogCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQogCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6KjoqOkZUWCopCiAJIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCiAJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCisJZXhpdCA7OwogICAgIG1jNjgqOkEvVVg6KjoqKQogCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgbmV3cyo6TkVXUy1PUzoqOjYqKQorCWV4aXQgOzsKKyAgICBuZXdzKjpORVdTLU9TOjYqOiopCiAJZWNobyBtaXBzLXNvbnktbmV3c29zNgotCWV4aXQgMCA7OwotICAgIFIzMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KikKKwlleGl0IDs7CisgICAgUlszNF0wMDA6KlN5c3RlbV9WKjoqOiogfCBSNDAwMDpVTklYX1NZU1Y6KjoqIHwgUiowMDA6VU5JWF9TVjoqOiopCiAJaWYgWyAtZCAvdXNyL25lYyBdOyB0aGVuCiAJICAgICAgICBlY2hvIG1pcHMtbmVjLXN5c3Yke1VOQU1FX1JFTEVBU0V9CiAJZWxzZQogCSAgICAgICAgZWNobyBtaXBzLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0KIAlmaQotICAgICAgICBleGl0IDAgOzsKKyAgICAgICAgZXhpdCA7OworICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYmUtYmVvcworCWV4aXQgOzsKKyAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtYmVvcworCWV4aXQgOzsKKyAgICBTWC00OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNTpTVVBFUi1VWDoqOiopCisJZWNobyBzeDUtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTY6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlcio6UmhhcHNvZHk6KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpSaGFwc29keToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRhcndpbjoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KKwljYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkgICAgdW5rbm93bikgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tYXBwbGUtZGFyd2luJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOnByb2NudG8qOio6KiB8ICo6UU5YOlswMTIzNDU2Nzg5XSo6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYAorCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gIng4NiI7IHRoZW4KKwkJVU5BTUVfUFJPQ0VTU09SPWkzODYKKwkJVU5BTUVfTUFDSElORT1wYworCWZpCisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tJHtVTkFNRV9NQUNISU5FfS1udG8tcW54JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlFOWDoqOjQqKQorCWVjaG8gaTM4Ni1wYy1xbngKKwlleGl0IDs7CisgICAgTlNFLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk5vblN0b3AtVVg6KjoqKQorCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4CisJZXhpdCA7OworICAgIEJTMjAwMDpQT1NJWCo6KjoqKQorCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgorCWV4aXQgOzsKKyAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlBsYW45Oio6KikKKwkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKKwkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgorCSMgb3BlcmF0aW5nIHN5c3RlbXMuCisJaWYgdGVzdCAiJGNwdXR5cGUiID0gIjM4NiI7IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45CisJZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAorCWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwlleGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAKKwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisgICAgICAgIGVjaG8gbWlwcy1zZWktc2VpdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RHJhZ29uRmx5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1kcmFnb25mbHlgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgCisJZXhpdCA7OworICAgICo6KlZNUzoqOiopCisgICAgCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBWKikgZWNobyB2YXgtZGVjLXZtcyA7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgKjpYRU5JWDoqOlN5c1YpCisJZWNobyBpMzg2LXBjLXhlbml4CisJZXhpdCA7OworICAgIGkqODY6c2t5b3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX1gIHwgc2VkIC1lICdzLyAuKiQvLycKKwlleGl0IDs7CisgICAgaSo4NjpyZG9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcworCWV4aXQgOzsKIGVzYWMKIAogI2VjaG8gJyhObyB1bmFtZSBjb21tYW5kIG9yIHVuYW1lIG91dHB1dCBub3QgcmVjb2duaXplZC4pJyAxPiYyCiAjZWNobyAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiAxPiYyCiAKLWNhdCA+ZHVtbXkuYyA8PEVPRgorZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorY2F0ID4kZHVtbXkuYyA8PEVPRgogI2lmZGVmIF9TRVFVRU5UXwogIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KQEAgLTc3Miw3ICsxMzIwLDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZCAoX19hcm0pICYmIGRlZmluZWQgKF9fYWNvcm4pICYmIGRlZmluZWQgKF9fdW5peCkKLSAgcHJpbnRmICgiYXJtLWFjb3JuLXJpc2NpeCIpOyBleGl0ICgwKTsKKyAgcHJpbnRmICgiYXJtLWFjb3JuLXJpc2NpeFxuIik7IGV4aXQgKDApOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkIChocDMwMCkgJiYgIWRlZmluZWQgKGhwdXgpCkBAIC03ODUsNyArMTMzMywxMCBAQAogI2VuZGlmCiAgIGludCB2ZXJzaW9uOwogICB2ZXJzaW9uPWAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbGA7Ci0gIHByaW50ZiAoIiVzLW5leHQtbmV4dHN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGlmICh2ZXJzaW9uIDwgNCkKKyAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBlbHNlCisgICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKICAgZXhpdCAoMCk7CiAjZW5kaWYKIApAQCAtODMwLDExICsxMzgxLDI0IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQgKHZheCkKLSNpZiAhZGVmaW5lZCAodWx0cml4KQotICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOwotI2Vsc2UKLSAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgorIyBpZiAhZGVmaW5lZCAodWx0cml4KQorIyAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICBpZiBkZWZpbmVkIChCU0QpCisjICAgaWYgQlNEID09IDQzCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM1xuIik7IGV4aXQgKDApOworIyAgIGVsc2UKKyMgICAgaWYgQlNEID09IDE5OTAwNgorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNyZW5vXG4iKTsgZXhpdCAoMCk7CisjICAgIGVsc2UKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgZW5kaWYKKyMgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtdWx0cml4XG4iKTsgZXhpdCAoMCk7CisjIGVuZGlmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQgKGFsbGlhbnQpICYmIGRlZmluZWQgKGk4NjApCkBAIC04NDUsMTIgKzE0MDksMTIgQEAKIH0KIEVPRgogCi0ke0NDLWNjfSBkdW1teS5jIC1vIGR1bW15IDI+L2Rldi9udWxsICYmIC4vZHVtbXkgJiYgcm0gZHVtbXkuYyBkdW1teSAmJiBleGl0IDAKLXJtIC1mIGR1bW15LmMgZHVtbXkKKyRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CiAKICMgQXBvbGxvcyBwdXQgdGhlIHN5c3RlbSB0eXBlIGluIHRoZSBlbnZpcm9ubWVudC4KIAotdGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gJHtJU1B9LWFwb2xsby0ke1NZU1RZUEV9OyBleGl0IDA7IH0KK3Rlc3QgLWQgL3Vzci9hcG9sbG8gJiYgeyBlY2hvICR7SVNQfS1hcG9sbG8tJHtTWVNUWVBFfTsgZXhpdDsgfQogCiAjIENvbnZleCB2ZXJzaW9ucyB0aGF0IHByZWRhdGUgdW5hbWUgY2FuIHVzZSBnZXRzeXNpbmZvKDEpCiAKQEAgLTg1OSwyNSArMTQyMyw2OSBAQAogICAgIGNhc2UgYGdldHN5c2luZm8gLWYgY3B1X3R5cGVgIGluCiAgICAgYzEqKQogCWVjaG8gYzEtY29udmV4LWJzZAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBjMiopCiAJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCiAJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCiAJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKIAlmaQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBjMzQqKQogCWVjaG8gYzM0LWNvbnZleC1ic2QKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgYzM4KikKIAllY2hvIGMzOC1jb252ZXgtYnNkCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGM0KikKIAllY2hvIGM0LWNvbnZleC1ic2QKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgZXNhYwogZmkKIAotI2VjaG8gJyhVbmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUpJyAxPiYyCitjYXQgPiYyIDw8RU9GCiskMDogdW5hYmxlIHRvIGd1ZXNzIHN5c3RlbSB0eXBlCisKK1RoaXMgc2NyaXB0LCBsYXN0IG1vZGlmaWVkICR0aW1lc3RhbXAsIGhhcyBmYWlsZWQgdG8gcmVjb2duaXplCit0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91Citkb3dubG9hZCB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24gb2YgdGhlIGNvbmZpZyBzY3JpcHRzIGZyb20KKworICBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9jZ2ktYmluL3ZpZXdjdnMvKmNoZWNrb3V0Ki9jb25maWcvY29uZmlnL2NvbmZpZy5ndWVzcworYW5kCisgIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2NnaS1iaW4vdmlld2N2cy8qY2hlY2tvdXQqL2NvbmZpZy9jb25maWcvY29uZmlnLnN1YgorCitJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKK3NlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCitwZXJ0aW5lbnQgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIG5lZWRlZAoraW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgorCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAorCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKKworaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAorCitVTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQorVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KK1VOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KK1VOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059CitFT0YKIAogZXhpdCAxCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2NvbmZpZy5zdWIgYi9jb25maWcuc3ViCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggMjEzYTZkNC4uYTRlOGE5NAotLS0gYS9jb25maWcuc3ViCisrKyBiL2NvbmZpZy5zdWIKQEAgLTEsNiArMSwxMCBAQAogIyEgL2Jpbi9zaAotIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQsIHZlcnNpb24gMS4xLgotIyAgIENvcHlyaWdodCAoQykgMTk5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAwNi0wMS0wMicKKwogIyBUaGlzIGZpbGUgaXMgKGluIHByaW5jaXBsZSkgY29tbW9uIHRvIEFMTCBHTlUgc29mdHdhcmUuCiAjIFRoZSBwcmVzZW5jZSBvZiBhIG1hY2hpbmUgaW4gdGhpcyBmaWxlIHN1Z2dlc3RzIHRoYXQgU09NRSBHTlUgc29mdHdhcmUKICMgY2FuIGhhbmRsZSB0aGF0IG1hY2hpbmUuICBJdCBkb2VzIG5vdCBpbXBseSBBTEwgR05VIHNvZnR3YXJlIGNhbi4KQEAgLTE3LDE0ICsyMSwxOCBAQAogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0jIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKICMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQogIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKICMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0CisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KKyMKICMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCiAjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KICMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCkBAIC00NSwzMCArNTMsNzUgQEAKICMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCiAjIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KIAotaWYgWyB4JDEgPSB4IF0KLXRoZW4KLQllY2hvIENvbmZpZ3VyYXRpb24gbmFtZSBtaXNzaW5nLiAxPiYyCi0JZWNobyAiVXNhZ2U6ICQwIENQVS1NRlItT1BTWVMiIDE+JjIKLQllY2hvICJvciAgICAgJDAgQUxJQVMiIDE+JjIKLQllY2hvIHdoZXJlIEFMSUFTIGlzIGEgcmVjb2duaXplZCBjb25maWd1cmF0aW9uIHR5cGUuIDE+JjIKLQlleGl0IDEKLWZpCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKIAotIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCi1jYXNlICQxIGluCi0JKmxvY2FsKikKLQkJZWNobyAkMQotCQlleGl0IDAKLQkJOzsKLQkqKQotCTs7Cit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMKKyAgICAgICAkMCBbT1BUSU9OXSBBTElBUworCitDYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKIGVzYWMKIAogIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgogIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KIG1heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAogY2FzZSAkbWF5YmVfb3MgaW4KLSAgbGludXgtZ251KikKKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgbGludXgtdWNsaWJjKiB8IFwKKyAgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCiAgICAgb3M9LSRtYXliZV9vcwogICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCiAgICAgOzsKQEAgLTk0LDE1ICsxNDcsMzcgQEAKIAktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAogCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCiAJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCi0JLWFwcGxlKQorCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkpCiAJCW9zPQogCQliYXNpY19tYWNoaW5lPSQxCiAJCTs7CisJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLXNjb3V0KQorCQk7OworCS13cnMpCisJCW9zPS12eHdvcmtzCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktY2hvcnVzb3MqKQorCQlvcz0tY2hvcnVzb3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworIAktY2hvcnVzcmRiKQorIAkJb3M9LWNob3J1c3JkYgorCQliYXNpY19tYWNoaW5lPSQxCisgCQk7OwogCS1oaXV4KikKIAkJb3M9LWhpdXh3ZTIKIAkJOzsKKwktc2NvNikKKwkJb3M9LXNjbzV2NgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CiAJLXNjbzUpCi0JCW9zPXNjbzMuMnY1CisJCW9zPS1zY28zLjJ2NQogCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCiAJCTs7CiAJLXNjbzQpCkBAIC0xMTcsMTAgKzE5MiwxNyBAQAogCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgogCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCiAJCTs7CisJLXNjbzV2NiopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKIAktc2NvKikKIAkJb3M9LXNjbzMuMnYyCiAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKIAkJOzsKKwktdWRrKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OwogCS1pc2MpCiAJCW9zPS1pc2MyLjIKIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYApAQCAtMTQzLDI2ICsyMjUsODQgQEAKIAktcHNvcyopCiAJCW9zPS1wc29zCiAJCTs7CisJLW1pbnQgfCAtbWludFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7CiBlc2FjCiAKICMgRGVjb2RlIGFsaWFzZXMgZm9yIGNlcnRhaW4gQ1BVLUNPTVBBTlkgY29tYmluYXRpb25zLgogY2FzZSAkYmFzaWNfbWFjaGluZSBpbgogCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCiAJIyBTb21lIGFyZSBvbWl0dGVkIGhlcmUgYmVjYXVzZSB0aGV5IGhhdmUgc3BlY2lhbCBtZWFuaW5ncyBiZWxvdy4KLQl0YWhvZSB8IGk4NjAgfCBtMzJyIHwgbTY4ayB8IG02ODAwMCB8IG04OGsgfCBuczMyayB8IGFyYyB8IGFybSBcCi0JCXwgYXJtZVtsYl0gfCBweXJhbWlkIHwgbW4xMDIwMCB8IG1uMTAzMDAgXAotCQl8IHRyb24gfCBhMjlrIHwgNTgwIHwgaTk2MCB8IGg4MzAwIHwgaHBwYSB8IGhwcGExLjAgfCBocHBhMS4xIFwKLQkJfCBhbHBoYSB8IGFscGhhZXY1IHwgYWxwaGFldjU2IHwgd2UzMmsgfCBuczE2ayB8IGNsaXBwZXIgXAotCQl8IGkzNzAgfCBzaCB8IHBvd2VycGMgfCBwb3dlcnBjbGUgfCAxNzUwYSB8IGRzcDE2eHggfCBwZHAxMSBcCi0JCXwgbWlwczY0IHwgbWlwc2VsIHwgbWlwczY0ZWwgfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAotCQl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCi0JCXwgc3BhcmMgfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSB8IHNwYXJjNjQgfCB2ODUwKQorCTE3NTBhIHwgNTgwIFwKKwl8IGEyOWsgXAorCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gfCBhbHBoYXBjYTVbNjddIFwKKwl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAorCXwgYW0zM18yLjAgXAorCXwgYXJjIHwgYXJtIHwgYXJtW2JsXWUgfCBhcm1lW2xiXSB8IGFybXZbMjM0NV0gfCBhcm12WzM0NV1bbGJdIHwgYXZyIFwKKwl8IGJmaW4gXAorCXwgYzR4IHwgY2xpcHBlciBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAorCXwgZnIzMCB8IGZydiBcCisJfCBoODMwMCB8IGg4NTAwIHwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAorCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCisJfCBpcDJrIHwgaXEyMDAwIFwKKwl8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayB8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSBcCisJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKKwl8IG1pcHMxNiBcCisJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCisJfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAorCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbnMxNmsgfCBuczMyayBcCisJfCBvcjMyIFwKKwl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCisJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwcGNiZSBcCisJfCBweXJhbWlkIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKKwl8IHNoNjQgfCBzaDY0bGUgXAorCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKKwl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgXAorCXwgc3Ryb25nYXJtIFwKKwl8IHRhaG9lIHwgdGh1bWIgfCB0aWM0eCB8IHRpYzgwIHwgdHJvbiBcCisJfCB2ODUwIHwgdjg1MGUgXAorCXwgd2UzMmsgXAorCXwgeDg2IHwgeHNjYWxlIHwgeHNjYWxlZVtibF0gfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAorCXwgejhrKQogCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJOzsKKwltMzJjKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIpCisJCSMgTW90b3JvbGEgNjhIQzExLzEyLgorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwltODgxMTAgfCBtNjgwWzEyMzQ2XTAgfCBtNjgzPzIgfCBtNjgzNjAgfCBtNTIwMCB8IHY3MCB8IHc2NSB8IHo4aykKKwkJOzsKKwltczEpCisJCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgorCQk7OworCiAJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKIAkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKIAkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCi0JaVszNDU2XTg2KQorCWkqODYgfCB4ODZfNjQpCiAJICBiYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXBjCiAJICA7OwogCSMgT2JqZWN0IGlmIG1vcmUgdGhhbiBvbmUgY29tcGFueSBuYW1lIHdvcmQuCkBAIC0xNzEsMjcgKzMxMSw5MSBAQAogCQlleGl0IDEKIAkJOzsKIAkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGggY29tcGFueSBuYW1lLgotCXZheC0qIHwgdGFob2UtKiB8IGlbMzQ1Nl04Ni0qIHwgaTg2MC0qIHwgbTMyci0qIHwgbTY4ay0qIHwgbTY4MDAwLSogXAotCSAgICAgIHwgbTg4ay0qIHwgc3BhcmMtKiB8IG5zMzJrLSogfCBmeDgwLSogfCBhcmMtKiB8IGFybS0qIHwgY1sxMjNdKiBcCi0JICAgICAgfCBtaXBzLSogfCBweXJhbWlkLSogfCB0cm9uLSogfCBhMjlrLSogfCByb21wLSogfCByczYwMDAtKiBcCi0JICAgICAgfCBwb3dlci0qIHwgbm9uZS0qIHwgNTgwLSogfCBjcmF5Mi0qIHwgaDgzMDAtKiB8IGk5NjAtKiBcCi0JICAgICAgfCB4bXAtKiB8IHltcC0qIHwgaHBwYS0qIHwgaHBwYTEuMC0qIHwgaHBwYTEuMS0qIFwKLQkgICAgICB8IGFscGhhLSogfCBhbHBoYWV2NS0qIHwgYWxwaGFldjU2LSogfCB3ZTMyay0qIHwgY3lkcmEtKiBcCi0JICAgICAgfCBuczE2ay0qIHwgcG4tKiB8IG5wMS0qIHwgeHBzMTAwLSogfCBjbGlwcGVyLSogfCBvcmlvbi0qIFwKLQkgICAgICB8IHNwYXJjbGl0ZS0qIHwgcGRwMTEtKiB8IHNoLSogfCBwb3dlcnBjLSogfCBwb3dlcnBjbGUtKiBcCi0JICAgICAgfCBzcGFyYzY0LSogfCBtaXBzNjQtKiB8IG1pcHNlbC0qIFwKLQkgICAgICB8IG1pcHM2NGVsLSogfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qICBcCi0JICAgICAgfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKLQkgICAgICB8IGYzMDEtKikKKwk1ODAtKiBcCisJfCBhMjlrLSogXAorCXwgYWxwaGEtKiB8IGFscGhhZXZbNC04XS0qIHwgYWxwaGFldjU2LSogfCBhbHBoYWV2Nls3OF0tKiBcCisJfCBhbHBoYTY0LSogfCBhbHBoYTY0ZXZbNC04XS0qIHwgYWxwaGE2NGV2NTYtKiB8IGFscGhhNjRldjZbNzhdLSogXAorCXwgYWxwaGFwY2E1WzY3XS0qIHwgYWxwaGE2NHBjYTVbNjddLSogfCBhcmMtKiBcCisJfCBhcm0tKiAgfCBhcm1iZS0qIHwgYXJtbGUtKiB8IGFybWViLSogfCBhcm12Ki0qIFwKKwl8IGF2ci0qIFwKKwl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIHwgYzU0eC0qIHwgYzU1eC0qIHwgYzZ4LSogXAorCXwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKKwl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKKwl8IGVseHNpLSogXAorCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAorCXwgaDgzMDAtKiB8IGg4NTAwLSogXAorCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKKwl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBtMzJyLSogfCBtMzJybGUtKiBcCisJfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAorCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIFwKKwl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKKwl8IG1pcHMxNi0qIFwKKwl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCisJfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKwl8IG1pcHM2NG9yaW9uLSogfCBtaXBzNjRvcmlvbmVsLSogXAorCXwgbWlwczY0dnI0MTAwLSogfCBtaXBzNjR2cjQxMDBlbC0qIFwKKwl8IG1pcHM2NHZyNDMwMC0qIHwgbWlwczY0dnI0MzAwZWwtKiBcCisJfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXAorCXwgbWlwczY0dnI1OTAwLSogfCBtaXBzNjR2cjU5MDBlbC0qIFwKKwl8IG1pcHNpc2EzMi0qIHwgbWlwc2lzYTMyZWwtKiBcCisJfCBtaXBzaXNhMzJyMi0qIHwgbWlwc2lzYTMycjJlbC0qIFwKKwl8IG1pcHNpc2E2NC0qIHwgbWlwc2lzYTY0ZWwtKiBcCisJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKKwl8IG1pcHNpc2E2NHNiMS0qIHwgbWlwc2lzYTY0c2IxZWwtKiBcCisJfCBtaXBzaXNhNjRzcjcxay0qIHwgbWlwc2lzYTY0c3I3MWtlbC0qIFwKKwl8IG1pcHN0eDM5LSogfCBtaXBzdHgzOWVsLSogXAorCXwgbW1peC0qIFwKKwl8IG10LSogXAorCXwgbXNwNDMwLSogXAorCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCisJfCBvcmlvbi0qIFwKKwl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAorCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogfCBwcGNiZS0qIFwKKwl8IHB5cmFtaWQtKiBcCisJfCByb21wLSogfCByczYwMDAtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGJlLSogXAorCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCisJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKKwl8IHNwYXJjbGl0ZS0qIFwKKwl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzdHJvbmdhcm0tKiB8IHN2MS0qIHwgc3g/LSogXAorCXwgdGFob2UtKiB8IHRodW1iLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogXAorCXwgdHJvbi0qIFwKKwl8IHY4NTAtKiB8IHY4NTBlLSogfCB2YXgtKiBcCisJfCB3ZTMyay0qIFwKKwl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4cHMxMDAtKiB8IHhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKiBcCisJfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYS0qIFwKKwl8IHltcC0qIFwKKwl8IHo4ay0qKQorCQk7OworCW0zMmMtKikKIAkJOzsKIAkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCiAJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KKwkzODZic2QpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1ic2QKKwkJOzsKIAkzYjEgfCA3MzAwIHwgNzMwMC1hdHQgfCBhdHQtNzMwMCB8IHBjNzMwMCB8IHNhZmFyaSB8IHVuaXhwYykKIAkJYmFzaWNfbWFjaGluZT1tNjgwMDAtYXR0CiAJCTs7CiAJM2IqKQogCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAogCQk7OworCWEyOWtoaWYpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworICAgIAlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CiAJYWxsaWFudCB8IGZ4ODApCiAJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CiAJCTs7CkBAIC0yMDIsMjUgKzQwNiwzNSBAQAogCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQogCQlvcz0tYnNkCiAJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKIAlhbWRhaGwpCiAJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAogCQlvcz0tc3lzdgogCQk7OwogCWFtaWdhIHwgYW1pZ2EtKikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWNibQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgogCQk7OwogCWFtaWdhb3MgfCBhbWlnYWRvcykKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWNibQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgogCQlvcz0tYW1pZ2FvcwogCQk7OwogCWFtaWdhdW5peCB8IGFtaXgpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1jYm0KKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KIAkJb3M9LXN5c3Y0CiAJCTs7CiAJYXBvbGxvNjgpCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KIAkJb3M9LXN5c3YKIAkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CiAJYXV4KQogCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKIAkJb3M9LWF1eApAQCAtMjI5LDYgKzQ0MywxMCBAQAogCQliYXNpY19tYWNoaW5lPW5zMzJrLXNlcXVlbnQKIAkJb3M9LWR5bml4CiAJCTs7CisJYzkwKQorCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKIAljb252ZXgtYzEpCiAJCWJhc2ljX21hY2hpbmU9YzEtY29udmV4CiAJCW9zPS1ic2QKQEAgLTI0OSwyNyArNDY3LDQ1IEBACiAJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAogCQlvcz0tYnNkCiAJCTs7Ci0JY3JheSB8IHltcCkKLQkJYmFzaWNfbWFjaGluZT15bXAtY3JheQorCWNyYXkgfCBqOTApCisJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKIAkJb3M9LXVuaWNvcwogCQk7OwotCWNyYXkyKQotCQliYXNpY19tYWNoaW5lPWNyYXkyLWNyYXkKLQkJb3M9LXVuaWNvcworCWNyYXludikKKwkJYmFzaWNfbWFjaGluZT1jcmF5bnYtY3JheQorCQlvcz0tdW5pY29zbXAKIAkJOzsKLQlbY3RqXTkwLWNyYXkpCi0JCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKLQkJb3M9LXVuaWNvcworCWNyMTZjKQorCQliYXNpY19tYWNoaW5lPWNyMTZjLXVua25vd24KKwkJb3M9LWVsZgogCQk7OwogCWNyZHMgfCB1bm9zKQogCQliYXNpY19tYWNoaW5lPW02OGstY3JkcwogCQk7OworCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKKwkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKKwkJOzsKKwljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQorCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcworCQk7OworCWNyeCkKKwkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CiAJZGEzMCB8IGRhMzAtKikKIAkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKIAkJOzsKIAlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCiAJCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKIAkJOzsKKwlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMTAKKwkJOzsKKwlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMjAKKwkJOzsKIAlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAogCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQogCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKQEAgLTI3OCw2ICs1MTQsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCiAJCW9zPS1zeXN2MwogCQk7OworCWRqZ3BwKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJb3M9LW1zZG9zZGpncHAKKwkJOzsKIAlkcHgyMCB8IGRweDIwLSopCiAJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWJ1bGwKIAkJb3M9LWJvc3gKQEAgLTI5Nyw2ICs1MzcsMTAgQEAKIAllbmNvcmUgfCB1bWF4IHwgbW1heCkKIAkJYmFzaWNfbWFjaGluZT1uczMyay1lbmNvcmUKIAkJOzsKKwllczE4MDAgfCBPU0U2OGsgfCBvc2U2OGsgfCBvc2UgfCBPU0UpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CiAJZngyODAwKQogCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAogCQk7OwpAQCAtMzA3LDYgKzU1MSwxMCBAQAogCQliYXNpY19tYWNoaW5lPXRyb24tZ21pY3JvCiAJCW9zPS1zeXN2CiAJCTs7CisJZ28zMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1nbzMyCisJCTs7CiAJaDMwNTByKiB8IGhpdXgqKQogCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQogCQlvcz0taGl1eHdlMgpAQCAtMzE1LDYgKzU2MywxNCBAQAogCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKIAkJb3M9LWhtcwogCQk7OworCWg4MzAweHJheSkKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS14cmF5CisJCTs7CisJaDg1MDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDg1MDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CiAJaGFycmlzKQogCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCiAJCW9zPS1zeXN2MwpAQCAtMzMwLDEzICs1ODYsMzAgQEAKIAkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCiAJCW9zPS1ocHV4CiAJCTs7CisJaHAzazlbMC05XVswLTldIHwgaHA5WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CiAJaHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCiAJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWhwCiAJCTs7CiAJaHA5azNbMi05XVswLTldKQogCQliYXNpY19tYWNoaW5lPW02OGstaHAKIAkJOzsKLQlocDlrN1swLTldWzAtOV0gfCBocDdbMC05XVswLTldIHwgaHA5azhbMC05XTcgfCBocDhbMC05XTcpCisJaHA5azZbMC05XVswLTldIHwgaHA2WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azdbMC03OV1bMC05XSB8IGhwN1swLTc5XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrNzhbMC05XSB8IGhwNzhbMC05XSkKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbNjddMSB8IGhwOFs2N10xIHwgaHA5azgwWzI0XSB8IGhwODBbMjRdIHwgaHA5azhbNzhdOSB8IGhwOFs3OF05IHwgaHA5azg5MyB8IGhwODkzKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzEzNjc5XSB8IGhwOFswLTldWzEzNjc5XSkKIAkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCiAJCTs7CiAJaHA5azhbMC05XVswLTldIHwgaHA4WzAtOV1bMC05XSkKQEAgLTM0NSwyNyArNjE4LDQyIEBACiAJaHBwYS1uZXh0KQogCQlvcz0tbmV4dHN0ZXAzCiAJCTs7CisJaHBwYW9zZikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1vc2YKKwkJOzsKKwlocHBybykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1wcm9lbGYKKwkJOzsKIAlpMzcwLWlibSogfCBpYm0qKQogCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCi0JCW9zPS1tdnMKIAkJOzsKICMgSSdtIG5vdCBzdXJlIHdoYXQgIlN5c3YzMiIgbWVhbnMuICBTaG91bGQgdGhpcyBiZSBzeXN2My4yPwotCWlbMzQ1Nl04NnYzMikKKwlpKjg2djMyKQogCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKIAkJb3M9LXN5c3YzMgogCQk7OwotCWlbMzQ1Nl04NnY0KikKKwlpKjg2djQqKQogCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKIAkJb3M9LXN5c3Y0CiAJCTs7Ci0JaVszNDU2XTg2dikKKwlpKjg2dikKIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCiAJCW9zPS1zeXN2CiAJCTs7Ci0JaVszNDU2XTg2c29sMikKKwlpKjg2c29sMikKIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCiAJCW9zPS1zb2xhcmlzMgogCQk7OworCWkzODZtYWNoKQorCQliYXNpY19tYWNoaW5lPWkzODYtbWFjaAorCQlvcz0tbWFjaAorCQk7OworCWkzODYtdnN0YSB8IHZzdGEpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS12c3RhCisJCTs7CiAJaXJpcyB8IGlyaXM0ZCkKIAkJYmFzaWNfbWFjaGluZT1taXBzLXNnaQogCQljYXNlICRvcyBpbgpAQCAtMzkxLDE2ICs2NzksMTYgQEAKIAkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCiAJCW9zPS1zeXN2CiAJCTs7CisJbWluZ3czMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CiAJbWluaWZyYW1lKQogCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CiAJCTs7Ci0JbWlwc2VsKi1saW51eCopCi0JCWJhc2ljX21hY2hpbmU9bWlwc2VsLXVua25vd24KLQkJb3M9LWxpbnV4LWdudQotCQk7OwotCW1pcHMqLWxpbnV4KikKLQkJYmFzaWNfbWFjaGluZT1taXBzLXVua25vd24KLQkJb3M9LWxpbnV4LWdudQorCSptaW50IHwgLW1pbnRbMC05XSogfCAqTWlOVCB8ICpNaU5UWzAtOV0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKKwkJb3M9LW1pbnQKIAkJOzsKIAltaXBzMyotKikKIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AKQEAgLTQwOCwxMCArNjk2LDM3IEBACiAJbWlwczMqKQogCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYC11bmtub3duCiAJCTs7CisJbW9uaXRvcikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCW1vcnBob3MpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCW9zPS1tb3JwaG9zCisJCTs7CisJbXNkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXNkb3MKKwkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW12cykKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQlvcz0tbXZzCisJCTs7CiAJbmNyMzAwMCkKIAkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgogCQlvcz0tc3lzdjQKIAkJOzsKKwluZXRic2QzODYpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1uZXRic2QKKwkJOzsKKwluZXR3aW5kZXIpCisJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCisJCW9zPS1saW51eAorCQk7OwogCW5ld3MgfCBuZXdzNzAwIHwgbmV3czgwMCB8IG5ld3M5MDApCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1zb255CiAJCW9zPS1uZXdzb3MKQEAgLTQyNCw2ICs3MzksMTAgQEAKIAkJYmFzaWNfbWFjaGluZT1taXBzLXNvbnkKIAkJb3M9LW5ld3NvcwogCQk7OworCW5lY3Y3MCkKKwkJYmFzaWNfbWFjaGluZT12NzAtbmVjCisJCW9zPS1zeXN2CisJCTs7CiAJbmV4dCB8IG0qLW5leHQgKQogCQliYXNpY19tYWNoaW5lPW02OGstbmV4dAogCQljYXNlICRvcyBpbgpAQCAtNDQ5LDkgKzc2OCwzOSBAQAogCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKIAkJb3M9LW5pbmR5CiAJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CiAJbnAxKQogCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAogCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKIAlwYS1oaXRhY2hpKQogCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQogCQlvcz0taGl1eHdlMgpAQCAtNDY2LDUzICs4MTUsMTA1IEBACiAJcGJiKQogCQliYXNpY19tYWNoaW5lPW02OGstdHRpCiAJCTs7Ci0gICAgICAgIHBjNTMyIHwgcGM1MzItKikKKwlwYzUzMiB8IHBjNTMyLSopCiAJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKIAkJOzsKLQlwZW50aXVtIHwgcDUpCi0JCWJhc2ljX21hY2hpbmU9aTU4Ni1pbnRlbAorCXBjOTgpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwogCQk7OwotCXBlbnRpdW1wcm8gfCBwNikKLQkJYmFzaWNfbWFjaGluZT1pNjg2LWludGVsCisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKIAkJOzsKLQlwZW50aXVtLSogfCBwNS0qKQorCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKIAkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCiAJCTs7Ci0JcGVudGl1bXByby0qIHwgcDYtKikKKwlwZW50aXVtcHJvLSogfCBwNi0qIHwgNng4Ni0qIHwgYXRobG9uLSopCiAJCWJhc2ljX21hY2hpbmU9aTY4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAogCQk7OwotCWs1KQotCQkjIFdlIGRvbid0IGhhdmUgc3BlY2lmaWMgc3VwcG9ydCBmb3IgQU1EJ3MgSzUgeWV0LCBzbyBqdXN0IGNhbGwgaXQgYSBQZW50aXVtCi0JCWJhc2ljX21hY2hpbmU9aTU4Ni1hbWQKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKIAkJOzsKLQluZXhlbikKLQkJIyBXZSBkb24ndCBoYXZlIHNwZWNpZmljIHN1cHBvcnQgZm9yIE5leGdlbiB5ZXQsIHNvIGp1c3QgY2FsbCBpdCBhIFBlbnRpdW0KLQkJYmFzaWNfbWFjaGluZT1pNTg2LW5leGdlbgorCXBlbnRpdW00LSopCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAogCQk7OwogCXBuKQogCQliYXNpY19tYWNoaW5lPXBuLWdvdWxkCiAJCTs7Ci0JcG93ZXIpCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQorCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQogCQk7OwogCXBwYykJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KLQkgICAgICAgIDs7CisJCTs7CiAJcHBjLSopCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAogCQk7OwogCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQogCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCi0JICAgICAgICA7OworCQk7OwogCXBwY2xlLSogfCBwb3dlcnBjbGl0dGxlLSopCiAJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCiAJCTs7CisJcHBjNjQpCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LXVua25vd24KKwkJOzsKKwlwcGM2NC0qKSBiYXNpY19tYWNoaW5lPXBvd2VycGM2NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0bGUgfCBwb3dlcnBjNjRsaXR0bGUgfCBwcGM2NC1sZSB8IHBvd2VycGM2NC1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtdW5rbm93bgorCQk7OworCXBwYzY0bGUtKiB8IHBvd2VycGM2NGxpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CiAJcHMyKQogCQliYXNpY19tYWNoaW5lPWkzODYtaWJtCiAJCTs7CisJcHczMikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXVua25vd24KKwkJb3M9LXB3MzIKKwkJOzsKKwlyZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LXJkb3MKKwkJOzsKKwlyb202OGspCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKIAlybVs0Nl0wMCkKIAkJYmFzaWNfbWFjaGluZT1taXBzLXNpZW1lbnMKIAkJOzsKIAlydHBjIHwgcnRwYy0qKQogCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCiAJCTs7CisJczM5MCB8IHMzOTAtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkwLWlibQorCQk7OworCXMzOTB4IHwgczM5MHgtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJOzsKKwlzYTI5MjAwKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwlzYjEpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxLXVua25vd24KKwkJOzsKKwlzYjFlbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjFlbC11bmtub3duCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OwogCXNlcXVlbnQpCiAJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CiAJCTs7CkBAIC01MjAsNiArOTIxLDEzIEBACiAJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQogCQlvcz0taG1zCiAJCTs7CisJc2g2NCkKKwkJYmFzaWNfbWFjaGluZT1zaDY0LXVua25vd24KKwkJOzsKKwlzcGFyY2xpdGUtd3JzIHwgc2ltc28td3JzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjbGl0ZS13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKIAlzcHM3KQogCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAogCQlvcz0tc3lzdjIKQEAgLTUyNyw2ICs5MzUsMTMgQEAKIAlzcHVyKQogCQliYXNpY19tYWNoaW5lPXNwdXItdW5rbm93bgogCQk7OworCXN0MjAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXRhbmRlbQorCQk7OworCXN0cmF0dXMpCisJCWJhc2ljX21hY2hpbmU9aTg2MC1zdHJhdHVzCisJCW9zPS1zeXN2NAorCQk7OwogCXN1bjIpCiAJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgogCQk7OwpAQCAtNTY3LDE5ICs5ODIsNTEgQEAKIAlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKIAkJYmFzaWNfbWFjaGluZT1pMzg2LXN1bgogCQk7OworCXN2MSkKKwkJYmFzaWNfbWFjaGluZT1zdjEtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CiAJc3ltbWV0cnkpCiAJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CiAJCW9zPS1keW5peAogCQk7OworCXQzZSkKKwkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0OTApCisJCWJhc2ljX21hY2hpbmU9dDkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXRpYzU0eCB8IGM1NHgqKQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNTV4IHwgYzU1eCopCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM2eCB8IGM2eCopCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OwogCXR4MzkpCiAJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzktdW5rbm93bgogCQk7OwogCXR4MzllbCkKIAkJYmFzaWNfbWFjaGluZT1taXBzdHgzOWVsLXVua25vd24KIAkJOzsKKwl0b2FkMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC14a2wKKwkJb3M9LXRvcHMyMAorCQk7OwogCXRvd2VyIHwgdG93ZXItMzIpCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1uY3IKIAkJOzsKKwl0cGYpCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCW9zPS10cGYKKwkJOzsKIAl1ZGkyOWspCiAJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKIAkJb3M9LXVkaQpAQCAtNTg4LDYgKzEwMzUsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT1hMjlrLW55dQogCQlvcz0tc3ltMQogCQk7OworCXY4MTAgfCBuZWN2ODEwKQorCQliYXNpY19tYWNoaW5lPXY4MTAtbmVjCisJCW9zPS1ub25lCisJCTs7CiAJdmF4dikKIAkJYmFzaWNfbWFjaGluZT12YXgtZGVjCiAJCW9zPS1zeXN2CkBAIC01OTcsOCArMTA0OCw4IEBACiAJCW9zPS12bXMKIAkJOzsKIAl2cHAqfHZ4fHZ4LSopCi0gICAgICAgICAgICAgICBiYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQotICAgICAgICAgICAgICAgOzsKKwkJYmFzaWNfbWFjaGluZT1mMzAxLWZ1aml0c3UKKwkJOzsKIAl2eHdvcmtzOTYwKQogCQliYXNpY19tYWNoaW5lPWk5NjAtd3JzCiAJCW9zPS12eHdvcmtzCkBAIC02MTEsMTIgKzEwNjIsMjggQEAKIAkJYmFzaWNfbWFjaGluZT1hMjlrLXdycwogCQlvcz0tdnh3b3JrcwogCQk7OwotCXhtcCkKLQkJYmFzaWNfbWFjaGluZT14bXAtY3JheQorCXc2NSopCisJCWJhc2ljX21hY2hpbmU9dzY1LXdkYworCQlvcz0tbm9uZQorCQk7OworCXc4OWstKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJb3M9LXByb2VsZgorCQk7OworCXhib3gpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCXhwcyB8IHhwczEwMCkKKwkJYmFzaWNfbWFjaGluZT14cHMxMDAtaG9uZXl3ZWxsCisJCTs7CisJeW1wKQorCQliYXNpY19tYWNoaW5lPXltcC1jcmF5CiAJCW9zPS11bmljb3MKIAkJOzsKLSAgICAgICAgeHBzIHwgeHBzMTAwKQotCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwl6OGstKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCisJCW9zPS1zaW0KIAkJOzsKIAlub25lKQogCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQpAQCAtNjI1LDMyICsxMDkyLDQ0IEBACiAKICMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KICMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KLQltaXBzKQotCQlpZiBbIHgkb3MgPSB4LWxpbnV4LWdudSBdOyB0aGVuCi0JCQliYXNpY19tYWNoaW5lPW1pcHMtdW5rbm93bgotCQllbHNlCi0JCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcwotCQlmaQorCXc4OWspCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCTs7CisJb3A1MG4pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlvcDYwYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQogCQk7OwogCXJvbXApCiAJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KIAkJOzsKKwltbWl4KQorCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKKwkJOzsKIAlyczYwMDApCiAJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQogCQk7OwogCXZheCkKIAkJYmFzaWNfbWFjaGluZT12YXgtZGVjCiAJCTs7CisJcGRwMTApCisJCSMgdGhlcmUgYXJlIG1hbnkgY2xvbmVzLCBzbyBERUMgaXMgbm90IGEgc2FmZSBiZXQKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC11bmtub3duCisJCTs7CiAJcGRwMTEpCiAJCWJhc2ljX21hY2hpbmU9cGRwMTEtZGVjCiAJCTs7CiAJd2UzMmspCiAJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CiAJCTs7Ci0Jc3BhcmMpCisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KKwkJOzsKKwlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIpCiAJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCiAJCTs7Ci0gICAgICAgIGN5ZHJhKQorCWN5ZHJhKQogCQliYXNpY19tYWNoaW5lPWN5ZHJhLWN5ZHJvbWUKIAkJOzsKIAlvcmlvbikKQEAgLTY1OSw2ICsxMTM4LDE1IEBACiAJb3Jpb24xMDUpCiAJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1oaWdobGV2ZWwKIAkJOzsKKwltYWMgfCBtcHcgfCBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJOzsKKwlwbWFjIHwgcG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1hcHBsZQorCQk7OworCSotdW5rbm93bikKKwkJIyBNYWtlIHN1cmUgdG8gbWF0Y2ggYW4gYWxyZWFkeS1jYW5vbmljYWxpemVkIG1hY2hpbmUgbmFtZS4KKwkJOzsKIAkqKQogCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKIAkJZXhpdCAxCkBAIC03MTEsMTQgKzExOTksNDkgQEAKIAkgICAgICB8IC1hb3MqIFwKIAkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAogCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAotCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAtbmV0YnNkKiB8IC1vcGVuYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIFwKLQkgICAgICB8IC1seW54b3MqIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtb3BlbmJzZCogfCAtc29saWRic2QqIFwKKwkgICAgICB8IC1la2tvYnNkKiB8IC1rZnJlZWJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiB8IC1seW54b3MqIFwKKwkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCiAJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAogCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAotCSAgICAgIHwgLWN5Z3dpbjMyKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAotCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtdXhwdiopCisJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LW5ld2xpYiogfCAtbGludXgtdWNsaWJjKiBcCisJICAgICAgfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCisJICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCisJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAorCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAorCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKikKIAkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCiAJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OwogCS1saW51eCopCiAJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKIAkJOzsKQEAgLTcyOCw2ICsxMjUxLDE1IEBACiAJLXN1bm9zNiopCiAJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczZ8c29sYXJpczN8J2AKIAkJOzsKKwktb3BlbmVkKikKKwkJb3M9LW9wZW5lZGl0aW9uCisJCTs7CisgICAgICAgIC1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OwogCS1vc2Zyb3NlKikKIAkJb3M9LW9zZnJvc2UKIAkJOzsKQEAgLTc0MywxMSArMTI3NSwyNiBAQAogCS1hY2lzKikKIAkJb3M9LWFvcwogCQk7OworCS1hdGhlb3MqKQorCQlvcz0tYXRoZW9zCisJCTs7CisJLXN5bGxhYmxlKikKKwkJb3M9LXN5bGxhYmxlCisJCTs7CisJLTM4NmJzZCkKKwkJb3M9LWJzZAorCQk7OwogCS1jdGl4KiB8IC11dHMqKQogCQlvcz0tc3lzdgogCQk7OworCS1ub3ZhKikKKwkJb3M9LXJ0bWstbm92YQorCQk7OwogCS1uczIgKQotCSAgICAgICAgb3M9LW5leHRzdGVwMgorCQlvcz0tbmV4dHN0ZXAyCisJCTs7CisJLW5zayopCisJCW9zPS1uc2sKIAkJOzsKIAkjIFByZXNlcnZlIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBzaW5peDUuCiAJLXNpbml4NS4qKQpAQCAtNzU2LDYgKzEzMDMsOSBAQAogCS1zaW5peCopCiAJCW9zPS1zeXN2NAogCQk7OworICAgICAgICAtdHBmKikKKwkJb3M9LXRwZgorCQk7OwogCS10cml0b24qKQogCQlvcz0tc3lzdjMKIAkJOzsKQEAgLTc3NCw5ICsxMzI0LDI3IEBACiAJIyBUaGlzIG11c3QgY29tZSBhZnRlciAtc3lzdnI0LgogCS1zeXN2KikKIAkJOzsKKwktb3NlKikKKwkJb3M9LW9zZQorCQk7OworCS1lczE4MDAqKQorCQlvcz0tb3NlCisJCTs7CiAJLXhlbml4KQogCQlvcz0teGVuaXgKIAkJOzsKKwktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQlvcz0tbWludAorCQk7OworCS1hcm9zKikKKwkJb3M9LWFyb3MKKwkJOzsKKwkta2FvcyopCisJCW9zPS1rYW9zCisJCTs7CisJLXp2bW9lKQorCQlvcz0tenZtb2UKKwkJOzsKIAktbm9uZSkKIAkJOzsKIAkqKQpAQCAtODAyLDEwICsxMzcwLDIwIEBACiAJKi1hY29ybikKIAkJb3M9LXJpc2NpeDEuMgogCQk7OworCWFybSotcmViZWwpCisJCW9zPS1saW51eAorCQk7OwogCWFybSotc2VtaSkKIAkJb3M9LWFvdXQKIAkJOzsKLSAgICAgICAgcGRwMTEtKikKKyAgICBjNHgtKiB8IHRpYzR4LSopCisgICAgICAgIG9zPS1jb2ZmCisgICAgICAgIDs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQogCQlvcz0tbm9uZQogCQk7OwogCSotZGVjIHwgdmF4LSopCkBAIC04MjMsMTUgKzE0MDEsNDUgQEAKIAkJIyBkZWZhdWx0LgogCQkjIG9zPS1zdW5vczQKIAkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworCW1pcHMqLWNpc2NvKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotKikKKwkJb3M9LWVsZgorCQk7OworCW9yMzItKikKKwkJb3M9LWNvZmYKKwkJOzsKIAkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgogCQlvcz0tc3lzdjMKIAkJOzsKIAlzcGFyYy0qIHwgKi1zdW4pCiAJCW9zPS1zdW5vczQuMS4xCiAJCTs7CisJKi1iZSkKKwkJb3M9LWJlb3MKKwkJOzsKKwkqLWhhaWt1KQorCQlvcz0taGFpa3UKKwkJOzsKIAkqLWlibSkKIAkJb3M9LWFpeAogCQk7OworICAgIAkqLWtudXRoKQorCQlvcz0tbW1peHdhcmUKKwkJOzsKKwkqLXdlYykKKwkJb3M9LXByb2VsZgorCQk7OworCSotd2luYm9uZCkKKwkJb3M9LXByb2VsZgorCQk7OworCSotb2tpKQorCQlvcz0tcHJvZWxmCisJCTs7CiAJKi1ocCkKIAkJb3M9LWhwdXgKIAkJOzsKQEAgLTg3NCwyNyArMTQ4MiwzOSBAQAogCSotbmV4dCkKIAkJb3M9LW5leHRzdGVwMwogCQk7OwotICAgICAgICAqLWdvdWxkKQorCSotZ291bGQpCiAJCW9zPS1zeXN2CiAJCTs7Ci0gICAgICAgICotaGlnaGxldmVsKQorCSotaGlnaGxldmVsKQogCQlvcz0tYnNkCiAJCTs7CiAJKi1lbmNvcmUpCiAJCW9zPS1ic2QKIAkJOzsKLSAgICAgICAgKi1zZ2kpCisJKi1zZ2kpCiAJCW9zPS1pcml4CiAJCTs7Ci0gICAgICAgICotc2llbWVucykKKwkqLXNpZW1lbnMpCiAJCW9zPS1zeXN2NAogCQk7OwogCSotbWFzc2NvbXApCiAJCW9zPS1ydHUKIAkJOzsKLQlmMzAxLWZ1aml0c3UpCisJZjMwWzAxXS1mdWppdHN1IHwgZjcwMC1mdWppdHN1KQogCQlvcz0tdXhwdgogCQk7OworCSotcm9tNjhrKQorCQlvcz0tY29mZgorCQk7OworCSotKmJ1ZykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLWFwcGxlKQorCQlvcz0tbWFjb3MKKwkJOzsKKwkqLWF0YXJpKikKKwkJb3M9LW1pbnQKKwkJOzsKIAkqKQogCQlvcz0tbm9uZQogCQk7OwpAQCAtOTE2LDkgKzE1MzYsMTUgQEAKIAkJCS1haXgqKQogCQkJCXZlbmRvcj1pYm0KIAkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CiAJCQktaHB1eCopCiAJCQkJdmVuZG9yPWhwCiAJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKIAkJCS1oaXV4KikKIAkJCQl2ZW5kb3I9aGl0YWNoaQogCQkJCTs7CkBAIC05MzQsMjEgKzE1NjAsNDcgQEAKIAkJCS1nZW5peCopCiAJCQkJdmVuZG9yPW5zCiAJCQkJOzsKLQkJCS1tdnMqKQorCQkJLW12cyogfCAtb3BlbmVkKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1vczQwMCopCiAJCQkJdmVuZG9yPWlibQogCQkJCTs7CiAJCQktcHR4KikKIAkJCQl2ZW5kb3I9c2VxdWVudAogCQkJCTs7Ci0JCQktdnhzaW0qIHwgLXZ4d29ya3MqKQorCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQogCQkJCXZlbmRvcj13cnMKIAkJCQk7OwogCQkJLWF1eCopCiAJCQkJdmVuZG9yPWFwcGxlCiAJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OwogCQllc2FjCiAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCiAJCTs7CiBlc2FjCiAKIGVjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvY29uZmlnLnZlciBiL2NvbmZpZy52ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2YjZjOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy52ZXIKQEAgLTAsMCArMSw0NCBAQAorCitKUEVHX1ZFUl9NQUpPUj02MgorSlBFR19WRVJfTUlOT1I9MQorSlBFR19SRVZJU0lPTj0wCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKikKKyAgICAjIFRoZSBzaGFyZWQgbGlicmFyeSBidWlsdCBmcm9tIHRoaXMgc291cmNlIGNvZGUgaXMgKm5vdCogYmluYXJ5CisgICAgIyBjb21wYXRpYmxlIHdpdGggdGhlIGN5Z3dpbidzIG9mZmljaWFsIGJpbmFyeSByZWxlYXNlIChjeWdqcGVnLTYyLmRsbCkuCisgICAgIyBUaGlzIGlzIGJlY2F1c2UgdGhlIG9mZmljaWFsIGJpbmFyeSBoYXMgYmVlbiBidWlsdCB3aXRoCisgICAgIyB0aGUgbG9zc2xlc3MganBlZyBwYXRjaCB3aGljaCBpcyBhdmFpbGFibGUgYXMgbGpwZWctNmIudGFyLmd6IC4KKyAgICAjIFRoZXJlZm9yZSB3ZSBkZWNpZGVkIHRvIGdpdmUgdGhlIHNoYXJlZCBsaWJyYXJ5IHRoZSB2ZXJzaW9uIG51bWJlcgorICAgICMgb3RoZXIgdGhhbiA2Mi4KKyAgICAjCisgICAgSlBFR19WRVJfTUFKT1I9MTYyCisgICAgSlBFR19WRVJfTUlOT1I9MAorICAgIDs7CisgIGZyZWVic2QqKQorICAgICMgVGhpcyBmb2xsb3dzIHRoZSBvZmZpY2lhbCBiaW5hcnkgcmVsZWFzZSBpbiB0aGUgcG9ydHMgY29sbGVjdGlvbi4KKyAgICBKUEVHX1ZFUl9NQUpPUj05CisgICAgOzsKK2VzYWMKKworIyBjb252ZXJ0IGFic29sdXRlIHZlcnNpb24gbnVtYmVycyB0byBsaWJ0b29sIGFnZXMKK2Nhc2UgJHZlcnNpb25fdHlwZSBpbgorICBmcmVlYnNkLWFvdXR8ZnJlZWJzZC1lbGZ8c3Vub3MpCisgICAgSlBFR19MVF9DVVJSRU5UPSRKUEVHX1ZFUl9NQUpPUgorICAgIEpQRUdfTFRfUkVWSVNJT049JEpQRUdfVkVSX01JTk9SCisgICAgSlBFR19MVF9BR0U9MAorICAgIDs7CisgIGlyaXh8bm9uc3RvcHV4KQorICAgIEpQRUdfTFRfQ1VSUkVOVD1gZXhwciAkSlBFR19WRVJfTUFKT1IgKyAkSlBFR19WRVJfTUlOT1IgLSAxYAorICAgIEpQRUdfTFRfQUdFPSRKUEVHX1ZFUl9NSU5PUgorICAgIEpQRUdfTFRfUkVWSVNJT049JEpQRUdfVkVSX01JTk9SCisgICAgOzsKKyAgKikKKyAgICBKUEVHX0xUX0NVUlJFTlQ9YGV4cHIgJEpQRUdfVkVSX01BSk9SICsgJEpQRUdfVkVSX01JTk9SYAorICAgIEpQRUdfTFRfQUdFPSRKUEVHX1ZFUl9NSU5PUgorICAgIEpQRUdfTFRfUkVWSVNJT049JEpQRUdfUkVWSVNJT04KKyAgICA7OworZXNhYworCitKUEVHX0xJQl9WRVJTSU9OPSRKUEVHX0xUX0NVUlJFTlQ6JEpQRUdfTFRfUkVWSVNJT046JEpQRUdfTFRfQUdFCisKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCAzNWM5ZGI1Li45YzM2OGU1IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDcgKzEsNyBAQAogIyEgL2Jpbi9zaAogCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IHVzaW5nIGF1dG9jb25mIHZlcnNpb24gMi4xMiAKKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgdXNpbmcgYXV0b2NvbmYgdmVyc2lvbiAyLjEzIAogIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDkzLCA5NCwgOTUsIDk2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgpAQCAtMTIsMTMgKzEyLDE5MCBAQAogYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAogIyBBbnkgYWRkaXRpb25zIGZyb20gY29uZmlndXJlLmluOgogYWNfaGVscD0iJGFjX2hlbHAKLSAgLS1lbmFibGUtc2hhcmVkICAgICAgICAgYnVpbGQgc2hhcmVkIGxpYnJhcnkgdXNpbmcgR05VIGxpYnRvb2wiCisgIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10gIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9bm9dIgogYWNfaGVscD0iJGFjX2hlbHAKLSAgLS1lbmFibGUtc3RhdGljICAgICAgICAgYnVpbGQgc3RhdGljIGxpYnJhcnkgdXNpbmcgR05VIGxpYnRvb2wiCisgIC0tZW5hYmxlLXN0YXRpY1s9UEtHU10gIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgW2RlZmF1bHQ9bm9dIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXSAgb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIFtkZWZhdWx0PXllc10iCithY19oZWxwPSIkYWNfaGVscAorICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dIgorCisjIEZpbmQgdGhlIGNvcnJlY3QgUEFUSCBzZXBhcmF0b3IuICBVc3VhbGx5IHRoaXMgaXMgYDonLCBidXQKKyMgREpHUFAgdXNlcyBgOycgbGlrZSBET1MuCitpZiB0ZXN0ICJYJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBYc2V0OyB0aGVuCisgIFVOQU1FPSR7VU5BTUUtYHVuYW1lIDI+L2Rldi9udWxsYH0KKyAgY2FzZSBYJFVOQU1FIGluCisgICAgKi1ET1MpIGx0X2N2X3N5c19wYXRoX3NlcGFyYXRvcj0nOycgOzsKKyAgICAqKSAgICAgbHRfY3Zfc3lzX3BhdGhfc2VwYXJhdG9yPSc6JyA7OworICBlc2FjCisgIFBBVEhfU0VQQVJBVE9SPSRsdF9jdl9zeXNfcGF0aF9zZXBhcmF0b3IKK2ZpCisKKworIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKworY2FzZSBYJEVDSE8gaW4KK1gqLS1mYWxsYmFjay1lY2hvKQorICAjIFJlbW92ZSBvbmUgbGV2ZWwgb2YgcXVvdGF0aW9uICh3aGljaCB3YXMgcmVxdWlyZWQgZm9yIE1ha2UpLgorICBFQ0hPPWBlY2hvICIkRUNITyIgfCBzZWQgJ3MsXFxcXFwkXFwkMCwnJDAnLCdgCisgIDs7Citlc2FjCisKK2VjaG89JHtFQ0hPLWVjaG99CitpZiB0ZXN0ICJYJDEiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICBzaGlmdAorZWxpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCisgIDoKK2VsaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisgICMgWWlwcGVlLCAkZWNobyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCisgIGV4ZWMgJFNIRUxMICIkMCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CitmaQorCitpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxFT0YKKworRU9GCisgIGV4aXQgMAorZmkKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KK2lmIHRlc3QgIlgke0NEUEFUSCtzZXR9IiA9IFhzZXQ7IHRoZW4gQ0RQQVRIPTo7IGV4cG9ydCBDRFBBVEg7IGZpCisKK2lmIHRlc3QgLXogIiRFQ0hPIjsgdGhlbgoraWYgdGVzdCAiWCR7ZWNob190ZXN0X3N0cmluZytzZXR9IiAhPSBYc2V0OyB0aGVuCisjIGZpbmQgYSBzdHJpbmcgYXMgbGFyZ2UgYXMgcG9zc2libGUsIGFzIGxvbmcgYXMgdGhlIHNoZWxsIGNhbiBjb3BlIHdpdGggaXQKKyAgZm9yIGNtZCBpbiAnc2VkIDUwcSAiJDAiJyAnc2VkIDIwcSAiJDAiJyAnc2VkIDEwcSAiJDAiJyAnc2VkIDJxICIkMCInICdlY2hvIHRlc3QnOyBkbworICAgICMgZXhwZWN0ZWQgc2l6ZXM6IGxlc3MgdGhhbiAyS2IsIDFLYiwgNTEyIGJ5dGVzLCAxNiBieXRlcywgLi4uCisgICAgaWYgKGVjaG9fdGVzdF9zdHJpbmc9ImBldmFsICRjbWRgIikgMj4vZGV2L251bGwgJiYKKyAgICAgICBlY2hvX3Rlc3Rfc3RyaW5nPSJgZXZhbCAkY21kYCIgJiYKKyAgICAgICAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbAorICAgIHRoZW4KKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorZmkKKworaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgOgorZWxzZQorICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKKyAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZworICAjICAgZWNobyAiJHNvbWV0aGluZyIgfCBzZWQgJ3MvXFwvXFxcXC9nJworICAjCisgICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KKworICBJRlM9IiR7SUZTPSAJfSI7IHNhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbworICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCisgICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICBlY2hvPSIkZGlyL2VjaG8iCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkc2F2ZV9pZnMiCisKKyAgaWYgdGVzdCAiWCRlY2hvIiA9IFhlY2hvOyB0aGVuCisgICAgIyBXZSBkaWRuJ3QgZmluZCBhIGJldHRlciBlY2hvLCBzbyBsb29rIGZvciBhbHRlcm5hdGl2ZXMuCisgICAgaWYgdGVzdCAiWGAocHJpbnQgLXIgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KKyAgICAgIGVjaG89J3ByaW50IC1yJworICAgIGVsaWYgKHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQpICYmCisJIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KKyAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgorICAgICAgT1JJR0lOQUxfQ09ORklHX1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CisgICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCisgICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKKyAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiJDAiIC0tbm8tcmVleGVjICR7MSsiJEAifQorICAgIGVsc2UKKyAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KKyAgICAgIGVjaG89J3ByaW50ZiAlc1xuJworICAgICAgaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisJIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJIyBDb29sLCBwcmludGYgd29ya3MKKwk6CisgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCUNPTkZJR19TSEVMTD0kT1JJR0lOQUxfQ09ORklHX1NIRUxMCisJZXhwb3J0IENPTkZJR19TSEVMTAorCVNIRUxMPSIkQ09ORklHX1NIRUxMIgorCWV4cG9ydCBTSEVMTAorCWVjaG89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKwkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwllY2hvPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKKyAgICAgIGVsc2UKKwkjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgorCXByZXY9OgorCisJZm9yIGNtZCBpbiAnZWNobyB0ZXN0JyAnc2VkIDJxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgNTBxICIkMCInOyBkbworCSAgaWYgKHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWGBldmFsICRjbWRgIikgMj4vZGV2L251bGwKKwkgIHRoZW4KKwkgICAgYnJlYWsKKwkgIGZpCisJICBwcmV2PSIkY21kIgorCWRvbmUKKworCWlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiJDAiJzsgdGhlbgorCSAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkcHJldmAKKwkgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCisJICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiJDAiICR7MSsiJEAifQorCWVsc2UKKwkgICMgT29wcy4gIFdlIGxvc3QgY29tcGxldGVseSwgc28ganVzdCBzdGljayB3aXRoIGVjaG8uCisJICBlY2hvPWVjaG8KKwlmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorZmkKK2ZpCisKKyMgQ29weSBlY2hvIGFuZCBxdW90ZSB0aGUgY29weSBzdWl0YWJseSBmb3IgcGFzc2luZyB0byBsaWJ0b29sIGZyb20KKyMgdGhlIE1ha2VmaWxlLCBpbnN0ZWFkIG9mIHF1b3RpbmcgdGhlIG9yaWdpbmFsLCB3aGljaCBpcyB1c2VkIGxhdGVyLgorRUNITz0kZWNobworaWYgdGVzdCAiWCRFQ0hPIiA9ICJYJENPTkZJR19TSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisgICBFQ0hPPSIkQ09ORklHX1NIRUxMIFxcXCRcJDAgLS1mYWxsYmFjay1lY2hvIgorZmkKKworCithY19oZWxwPSIkYWNfaGVscAorICAtLWRpc2FibGUtbGlidG9vbC1sb2NrICBhdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlIGJvdGhdIgogYWNfaGVscD0iJGFjX2hlbHAKICAgLS1lbmFibGUtbWF4bWVtWz1OXSAgICAgZW5hYmxlIHVzZSBvZiB0ZW1wIGZpbGVzLCBzZXQgbWF4IG1lbSB1c2FnZSB0byBOIE1CIgogYWNfaGVscD0iJGFjX2hlbHAKICIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZGlzYWJsZS1tbXggICAgICAgICAgIGRvIG5vdCB1c2UgTU1YIGluc3RydWN0aW9uIHNldCIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZGlzYWJsZS0zZG5vdyAgICAgICAgIGRvIG5vdCB1c2UgM0ROb3chIGluc3RydWN0aW9uIHNldCIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZGlzYWJsZS1zc2UgICAgICAgICAgIGRvIG5vdCB1c2UgU1NFIGluc3RydWN0aW9uIHNldCIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZGlzYWJsZS1zc2UyICAgICAgICAgIGRvIG5vdCB1c2UgU1NFMiBpbnN0cnVjdGlvbiBzZXQiCithY19oZWxwPSIkYWNfaGVscAorICAtLWVuYWJsZS11Y2hhci1ib29sZWFuICBkZWZpbmUgdHlwZSBcImJvb2xlYW5cIiBhcyB1bnNpZ25lZCBjaGFyIChmb3IgV2luZG93cykiCiAKICMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KICMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCkBAIC01Nyw2ICsyMzQsNyBAQAogIyBJbml0aWFsaXplIHNvbWUgb3RoZXIgdmFyaWFibGVzLgogc3ViZGlycz0KIE1GTEFHUz0gTUFLRUZMQUdTPQorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KICMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2hlbGwgaGVyZSBkb2N1bWVudC4KIGFjX21heF9oZXJlX2xpbmVzPTEyCiAKQEAgLTM0MCw3ICs1MTgsNyBAQAogICAgIHZlcmJvc2U9eWVzIDs7CiAKICAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMpCi0gICAgZWNobyAiY29uZmlndXJlIGdlbmVyYXRlZCBieSBhdXRvY29uZiB2ZXJzaW9uIDIuMTIiCisgICAgZWNobyAiY29uZmlndXJlIGdlbmVyYXRlZCBieSBhdXRvY29uZiB2ZXJzaW9uIDIuMTMiCiAgICAgZXhpdCAwIDs7CiAKICAgLXdpdGgtKiB8IC0td2l0aC0qKQpAQCAtMzg2LDE3ICs1NjQsNiBAQAogICAtKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfb3B0aW9uOiBpbnZhbGlkIG9wdGlvbjsgdXNlIC0taGVscCB0byBzaG93IHVzYWdlIiAxPiYyOyBleGl0IDE7IH0KICAgICA7OwogCi0gICo9KikKLSAgICB2YXJuYW1lPWBlY2hvICIkYWNfb3B0aW9uInxzZWQgLWUgJ3MvPS4qLy8nYAotICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlbid0IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGlmIHRlc3QgLW4gImBlY2hvICR2YXJuYW1lfCBzZWQgJ3MvW2EtekEtWjAtOV9dLy9nJ2AiOyB0aGVuCi0gICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6ICR2YXJuYW1lOiBpbnZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQotICAgIGZpCi0gICAgdmFsPSJgZWNobyAiJGFjX29wdGlvbiJ8c2VkICdzL1tePV0qPS8vJ2AiCi0gICAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglzZXR0aW5nIHNoZWxsIHZhcmlhYmxlICR2YXJuYW1lIHRvICR2YWwiCi0gICAgZXZhbCAiJHZhcm5hbWU9JyR2YWwnIgotICAgIGV2YWwgImV4cG9ydCAkdmFybmFtZSIgOzsKLQogICAqKQogICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19vcHRpb258IHNlZCAncy9bLWEtejAtOS5dLy9nJ2AiOyB0aGVuCiAgICAgICBlY2hvICJjb25maWd1cmU6IHdhcm5pbmc6ICRhY19vcHRpb246IGludmFsaWQgaG9zdCB0eXBlIiAxPiYyCkBAIC01MDksMTQgKzY3NiwyMyBAQAogICBmaQogZG9uZQogCitpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgZWNobyAibG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgLiAkY2FjaGVfZmlsZQorZWxzZQorICBlY2hvICJjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgPiAkY2FjaGVfZmlsZQorZmkKIAogYWNfZXh0PWMKICMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCi1hY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCithY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCiBjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKIAorYWNfZXhlZXh0PQorYWNfb2JqZXh0PW8KIGlmIChlY2hvICJ0ZXN0aW5nXGMiOyBlY2hvIDEsMiwzKSB8IGdyZXAgYyA+L2Rldi9udWxsOyB0aGVuCiAgICMgU3RhcmRlbnQgVmlzdHJhIFNWUjQgZ3JlcCBsYWNrcyAtZSwgc2F5cyBnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1LgogICBpZiAoZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzKSB8IHNlZCBzLy1uL3huLyB8IGdyZXAgeG4gPi9kZXYvbnVsbDsgdGhlbgpAQCAtNTM0LDE1ICs3MTAsMTYgQEAKICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NTM4OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAiY29uZmlndXJlOjcxNDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgogZWxzZQotICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgotICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwogICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCiAgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCiAgICAgICBhY19jdl9wcm9nX0NDPSJnY2MiCkBAIC01NjMsMTYgKzc0MCwxNyBAQAogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBjYzsgYWNfd29yZD0kMgogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo1Njc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICJjb25maWd1cmU6NzQ0OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCiBlbHNlCi0gIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfToiCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCiAgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgogICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgogICAgICAgaWYgdGVzdCAiJGFjX2Rpci8kYWNfd29yZCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCkBAIC02MDcsMjUgKzc4NSw2MSBAQAogICBlY2hvICIkYWNfdCIibm8iIDE+JjYKIGZpCiAKKyAgaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgIGNhc2UgImB1bmFtZSAtc2AiIGluCisgICAgKndpbjMyKiB8ICpXSU4zMiopCisgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjbDsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3OTU6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DQycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19DQz0iY2wiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK0NDPSIkYWNfY3ZfcHJvZ19DQyIKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRDQyIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisgOzsKKyAgICBlc2FjCisgIGZpCiAgIHRlc3QgLXogIiRDQyIgJiYgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGNjIGZvdW5kIGluIFwkUEFUSCIgMT4mMjsgZXhpdCAxOyB9CiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgd29ya3MiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjYxNTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4Mjc6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSB3b3JrcyIgPiY1CiAKIGFjX2V4dD1jCiAjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwogYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JwotYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3QgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JwogY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCiAKLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDYyNSAiY29uZmlndXJlIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PCBFT0YKKworI2xpbmUgODM4ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKwogbWFpbigpe3JldHVybigwKTt9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjI5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODQzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgYWNfY3ZfcHJvZ19jY193b3Jrcz15ZXMKICAgIyBJZiB3ZSBjYW4ndCBydW4gYSB0cml2aWFsIHByb2dyYW0sIHdlIGFyZSBwcm9iYWJseSB1c2luZyBhIGNyb3NzIGNvbXBpbGVyLgogICBpZiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KQEAgLTYzOSwxOCArODUzLDI0IEBACiAgIGFjX2N2X3Byb2dfY2Nfd29ya3M9bm8KIGZpCiBybSAtZnIgY29uZnRlc3QqCithY19leHQ9YworIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKK2FjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKK2Nyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcwogCiBlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfY2Nfd29ya3MiIDE+JjYKIGlmIHRlc3QgJGFjX2N2X3Byb2dfY2Nfd29ya3MgPSBubzsgdGhlbgogICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcy4iIDE+JjI7IGV4aXQgMTsgfQogZmkKIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo2NDk6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4Njk6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiA+JjUKIGVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19jcm9zcyIgMT4mNgogY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo2NTQ6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4NzQ6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX2djYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCkBAIC02NTksNyArODc5LDcgQEAKICAgeWVzOwogI2VuZGlmCiBFT0YKLWlmIHsgYWNfdHJ5PScke0NDLWNjfSAtRSBjb25mdGVzdC5jJzsgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2NjM6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9OyB9IHwgZWdyZXAgeWVzID4vZGV2L251bGwgMj4mMTsgdGhlbgoraWYgeyBhY190cnk9JyR7Q0MtY2N9IC1FIGNvbmZ0ZXN0LmMnOyB7IChldmFsIGVjaG8gY29uZmlndXJlOjg4MzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH07IH0gfCBlZ3JlcCB5ZXMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgIGFjX2N2X3Byb2dfZ2NjPXllcwogZWxzZQogICBhY19jdl9wcm9nX2djYz1ubwpAQCAtNjcwLDE0ICs4OTAsNDcgQEAKIAogaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2MgPSB5ZXM7IHRoZW4KICAgR0NDPXllcwotICB0ZXN0ICIke0NGTEFHUytzZXR9IiA9IHNldCB8fCBDRkxBR1M9Ii1PMiIKIGVsc2UKICAgR0NDPQotICB0ZXN0ICIke0NGTEFHUytzZXR9IiA9IHNldCB8fCBDRkxBR1M9Ii1PIgorZmkKKworYWNfdGVzdF9DRkxBR1M9IiR7Q0ZMQUdTK3NldH0iCithY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKK0NGTEFHUz0KK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQy1jY30gYWNjZXB0cyAtZyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6OTAyOiBjaGVja2luZyB3aGV0aGVyICR7Q0MtY2N9IGFjY2VwdHMgLWciID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfY2NfZycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGVjaG8gJ3ZvaWQgZigpe30nID4gY29uZnRlc3QuYworaWYgdGVzdCAteiAiYCR7Q0MtY2N9IC1nIC1jIGNvbmZ0ZXN0LmMgMj4mMWAiOyB0aGVuCisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19nPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19nIiAxPiY2CitpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCisgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9CisgIGZpCiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NjgxOiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CitlY2hvICJjb25maWd1cmU6OTM0OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiAjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgogaWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KICAgQ1BQPQpAQCAtNjkyLDE0ICs5NDUsMTQgQEAKICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4KICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNjk2ICJjb25maWd1cmUiCisjbGluZSA5NDkgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogU3ludGF4IEVycm9yCiBFT0YKIGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCi17IChldmFsIGVjaG8gY29uZmlndXJlOjcwMjogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KLWFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0YAoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo5NTU6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICA6CiBlbHNlCkBAIC03MDksMTQgKzk2MiwzMSBAQAogICBybSAtcmYgY29uZnRlc3QqCiAgIENQUD0iJHtDQy1jY30gLUUgLXRyYWRpdGlvbmFsLWNwcCIKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzEzICJjb25maWd1cmUiCisjbGluZSA5NjYgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogU3ludGF4IEVycm9yCiBFT0YKIGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCi17IChldmFsIGVjaG8gY29uZmlndXJlOjcxOTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KLWFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0YAoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo5NzI6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBDUFA9IiR7Q0MtY2N9IC1ub2xvZ28gLUUiCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDk4MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitTeW50YXggRXJyb3IKK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6OTg5OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KICAgOgogZWxzZQpAQCAtNzI5LDYgKzk5OSw4IEBACiBybSAtZiBjb25mdGVzdCoKIGZpCiBybSAtZiBjb25mdGVzdCoKK2ZpCitybSAtZiBjb25mdGVzdCoKICAgYWNfY3ZfcHJvZ19DUFA9IiRDUFAiCiBmaQogICBDUFA9IiRhY19jdl9wcm9nX0NQUCIKQEAgLTczOCwxMiArMTAxMCwxMiBAQAogZWNobyAiJGFjX3QiIiRDUFAiIDE+JjYKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGZ1bmN0aW9uIHByb3RvdHlwZXMiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjc0MjogY2hlY2tpbmcgZm9yIGZ1bmN0aW9uIHByb3RvdHlwZXMiID4mNQorZWNobyAiY29uZmlndXJlOjEwMTQ6IGNoZWNraW5nIGZvciBmdW5jdGlvbiBwcm90b3R5cGVzIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydpamdfY3ZfaGF2ZV9wcm90b3R5cGVzJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzQ3ICJjb25maWd1cmUiCisjbGluZSAxMDE5ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogaW50IHRlc3RmdW5jdGlvbiAoaW50IGFyZzEsIGludCAqIGFyZzIpOyAvKiBjaGVjayBwcm90b3R5cGVzICovCkBAIC03NjEsNyArMTAzMyw3IEBACiAgCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzY1OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEwMzc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBpamdfY3ZfaGF2ZV9wcm90b3R5cGVzPXllcwogZWxzZQpAQCAtNzg4LDE4ICsxMDYwLDE4IEBACiBmaQogYWNfc2FmZT1gZWNobyAic3RkZGVmLmgiIHwgc2VkICd5JS4vKy0lX19wXyUnYAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHN0ZGRlZi5oIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3OTI6IGNoZWNraW5nIGZvciBzdGRkZWYuaCIgPiY1CitlY2hvICJjb25maWd1cmU6MTA2NDogY2hlY2tpbmcgZm9yIHN0ZGRlZi5oIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA3OTcgImNvbmZpZ3VyZSIKKyNsaW5lIDEwNjkgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogRU9GCiBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MDI6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Ci1hY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dGAKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MTA3NDogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKIGlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKQEAgLTgyNCwxOCArMTA5NiwxOCBAQAogCiBhY19zYWZlPWBlY2hvICJzdGRsaWIuaCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCiBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc3RkbGliLmgiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjgyODogY2hlY2tpbmcgZm9yIHN0ZGxpYi5oIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxMTAwOiBjaGVja2luZyBmb3Igc3RkbGliLmgiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDgzMyAiY29uZmlndXJlIgorI2xpbmUgMTEwNSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiBFT0YKIGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCi17IChldmFsIGVjaG8gY29uZmlndXJlOjgzODogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KLWFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0YAoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMTEwOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgpAQCAtODYwLDE4ICsxMTMyLDE4IEBACiAKIGFjX3NhZmU9YGVjaG8gInN0cmluZy5oIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBzdHJpbmcuaCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODY0OiBjaGVja2luZyBmb3Igc3RyaW5nLmgiID4mNQorZWNobyAiY29uZmlndXJlOjExMzY6IGNoZWNraW5nIGZvciBzdHJpbmcuaCIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODY5ICJjb25maWd1cmUiCisjbGluZSAxMTQxICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KIEVPRgogYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKLXsgKGV2YWwgZWNobyBjb25maWd1cmU6ODc0OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQotYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRgCit7IChldmFsIGVjaG8gY29uZmlndXJlOjExNDY6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCkBAIC04OTYsOSArMTE2OCw5IEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc2l6ZV90IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo5MDA6IGNoZWNraW5nIGZvciBzaXplX3QiID4mNQorZWNobyAiY29uZmlndXJlOjExNzI6IGNoZWNraW5nIGZvciBzaXplX3QiID4mNQogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgOTAyICJjb25maWd1cmUiCisjbGluZSAxMTc0ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmZGVmIEhBVkVfU1REREVGX0gKQEAgLTkxOSw3ICsxMTkxLDcgQEAKICBteV9zaXplX3QgZm9vdmFyOyAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo5MjM6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTE5NTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGlqZ19zaXplX3Rfb2s9eWVzCiBlbHNlCkBAIC05MzMsMTggKzEyMDUsMTggQEAKIGlmIHRlc3QgIiRpamdfc2l6ZV90X29rIiAhPSB5ZXM7IHRoZW4KIGFjX3NhZmU9YGVjaG8gInN5cy90eXBlcy5oIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBzeXMvdHlwZXMuaCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6OTM3OiBjaGVja2luZyBmb3Igc3lzL3R5cGVzLmgiID4mNQorZWNobyAiY29uZmlndXJlOjEyMDk6IGNoZWNraW5nIGZvciBzeXMvdHlwZXMuaCIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgOTQyICJjb25maWd1cmUiCisjbGluZSAxMjE0ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIEVPRgogYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKLXsgKGV2YWwgZWNobyBjb25maWd1cmU6OTQ3OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQotYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRgCit7IChldmFsIGVjaG8gY29uZmlndXJlOjEyMTk6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCkBAIC05NjQsNyArMTIzNiw3IEBACiBFT0YKIAogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgOTY4ICJjb25maWd1cmUiCisjbGluZSAxMjQwICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIEVPRgpAQCAtOTkwLDE2ICsxMjYyLDE2IEBACiBmaQogZmkKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciB0eXBlIHVuc2lnbmVkIGNoYXIiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjk5NDogY2hlY2tpbmcgZm9yIHR5cGUgdW5zaWduZWQgY2hhciIgPiY1CitlY2hvICJjb25maWd1cmU6MTI2NjogY2hlY2tpbmcgZm9yIHR5cGUgdW5zaWduZWQgY2hhciIgPiY1CiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA5OTYgImNvbmZpZ3VyZSIKKyNsaW5lIDEyNjggImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiBpbnQgbWFpbigpIHsKICB1bnNpZ25lZCBjaGFyIHVuX2NoYXI7IAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEwMDM6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTI3NTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgpAQCAtMTAxNCwxNiArMTI4NiwxNiBAQAogZmkKIHJtIC1mIGNvbmZ0ZXN0KgogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHR5cGUgdW5zaWduZWQgc2hvcnQiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjEwMTg6IGNoZWNraW5nIGZvciB0eXBlIHVuc2lnbmVkIHNob3J0IiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxMjkwOiBjaGVja2luZyBmb3IgdHlwZSB1bnNpZ25lZCBzaG9ydCIgPiY1CiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMDIwICJjb25maWd1cmUiCisjbGluZSAxMjkyICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogaW50IG1haW4oKSB7CiAgdW5zaWduZWQgc2hvcnQgdW5fc2hvcnQ7IAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEwMjc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTI5OTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgpAQCAtMTAzOCw5ICsxMzEwLDkgQEAKIGZpCiBybSAtZiBjb25mdGVzdCoKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciB0eXBlIHZvaWQiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjEwNDI6IGNoZWNraW5nIGZvciB0eXBlIHZvaWQiID4mNQorZWNobyAiY29uZmlndXJlOjEzMTQ6IGNoZWNraW5nIGZvciB0eXBlIHZvaWQiID4mNQogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTA0NCAiY29uZmlndXJlIgorI2xpbmUgMTMxNiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIC8qIENhdXRpb246IGEgQysrIGNvbXBpbGVyIHdpbGwgaW5zaXN0IG9uIHZhbGlkIHByb3RvdHlwZXMgKi8KQEAgLTEwNjgsNyArMTM0MCw3IEBACiAgCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTA3MjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMzQ0OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgogZWxzZQpAQCAtMTA4NCwxMiArMTM1NiwxMiBAQAogcm0gLWYgY29uZnRlc3QqCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciB3b3JraW5nIGNvbnN0IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxMDg4OiBjaGVja2luZyBmb3Igd29ya2luZyBjb25zdCIgPiY1CitlY2hvICJjb25maWd1cmU6MTM2MDogY2hlY2tpbmcgZm9yIHdvcmtpbmcgY29uc3QiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2NfY29uc3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMDkzICJjb25maWd1cmUiCisjbGluZSAxMzY1ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogaW50IG1haW4oKSB7CkBAIC0xMTM4LDcgKzE0MTAsNyBAQAogCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTE0MjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNDE0OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgYWNfY3ZfY19jb25zdD15ZXMKIGVsc2UKQEAgLTExNTksMTAgKzE0MzEsMTAgQEAKIGZpCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbmxpbmUiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjExNjM6IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQorZWNobyAiY29uZmlndXJlOjE0MzU6IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQogaWpnX2N2X2lubGluZT0iIgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTE2NiAiY29uZmlndXJlIgorI2xpbmUgMTQzOCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewpAQCAtMTE3MCw3ICsxNDQyLDcgQEAKIGludCBiYXIoKSB7IHJldHVybiBmb28oKTsKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMTc0OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE0NDY6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBpamdfY3ZfaW5saW5lPSJfX2lubGluZV9fIgogZWxzZQpAQCAtMTE3OCw3ICsxNDUwLDcgQEAKICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAgIHJtIC1yZiBjb25mdGVzdCoKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTE4MiAiY29uZmlndXJlIgorI2xpbmUgMTQ1NCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewpAQCAtMTE4Niw3ICsxNDU4LDcgQEAKIGludCBiYXIoKSB7IHJldHVybiBmb28oKTsKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMTkwOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE0NjI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBpamdfY3ZfaW5saW5lPSJfX2lubGluZSIKIGVsc2UKQEAgLTExOTQsNyArMTQ2Niw3IEBACiAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQogICBybSAtcmYgY29uZnRlc3QqCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDExOTggImNvbmZpZ3VyZSIKKyNsaW5lIDE0NzAgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiBpbnQgbWFpbigpIHsKQEAgLTEyMDIsNyArMTQ3NCw3IEBACiBpbnQgYmFyKCkgeyByZXR1cm4gZm9vKCk7CiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTIwNjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNDc4OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgaWpnX2N2X2lubGluZT0iaW5saW5lIgogZWxzZQpAQCAtMTIyMCwxNiArMTQ5MiwxNiBAQAogRU9GCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBicm9rZW4gaW5jb21wbGV0ZSB0eXBlcyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTIyNDogY2hlY2tpbmcgZm9yIGJyb2tlbiBpbmNvbXBsZXRlIHR5cGVzIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxNDk2OiBjaGVja2luZyBmb3IgYnJva2VuIGluY29tcGxldGUgdHlwZXMiID4mNQogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTIyNiAiY29uZmlndXJlIgorI2xpbmUgMTQ5OCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAgdHlwZWRlZiBzdHJ1Y3QgdW5kZWZpbmVkX3N0cnVjdHVyZSAqIHVuZGVmX3N0cnVjdF9wdHI7IAogaW50IG1haW4oKSB7CiAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjMzOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE1MDU6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIib2siIDE+JjYKIGVsc2UKQEAgLTEyNDQsOSArMTUxNiw5IEBACiBmaQogcm0gLWYgY29uZnRlc3QqCiBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc2hvcnQgZXh0ZXJuYWwgbmFtZXMiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjEyNDg6IGNoZWNraW5nIGZvciBzaG9ydCBleHRlcm5hbCBuYW1lcyIgPiY1CitlY2hvICJjb25maWd1cmU6MTUyMDogY2hlY2tpbmcgZm9yIHNob3J0IGV4dGVybmFsIG5hbWVzIiA+JjUKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEyNTAgImNvbmZpZ3VyZSIKKyNsaW5lIDE1MjIgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiBpbnQgcG9zc2libHlfZHVwbGljYXRlX2Z1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0KQEAgLTEyNTYsNyArMTUyOCw3IEBACiAgCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTI2MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE1MzI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJvayIgMT4mNgogZWxzZQpAQCAtMTI3MSwxNCArMTU0MywxNCBAQAogZmkKIHJtIC1mIGNvbmZ0ZXN0KgogZWNobyAkYWNfbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGNoYXIgaXMgc2lnbmVkIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxMjc1OiBjaGVja2luZyB0byBzZWUgaWYgY2hhciBpcyBzaWduZWQiID4mNQorZWNobyAiY29uZmlndXJlOjE1NDc6IGNoZWNraW5nIHRvIHNlZSBpZiBjaGFyIGlzIHNpZ25lZCIgPiY1CiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICBlY2hvIEFzc3VtaW5nIHRoYXQgY2hhciBpcyBzaWduZWQgb24gdGFyZ2V0IG1hY2hpbmUuCiBlY2hvIElmIGl0IGlzIHVuc2lnbmVkLCB0aGlzIHdpbGwgYmUgYSBsaXR0bGUgYml0IGluZWZmaWNpZW50LgogCiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEyODIgImNvbmZpZ3VyZSIKKyNsaW5lIDE1NTQgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaWZkZWYgSEFWRV9QUk9UT1RZUEVTCkBAIC0xMzAyLDcgKzE1NzQsNyBAQAogICBleGl0KGlzX2NoYXJfc2lnbmVkKChpbnQpIHNpZ25lZF9jaGFyX2NoZWNrKSk7CiB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTMwNjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNTc4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCiB0aGVuCiAgIGVjaG8gIiRhY190IiJubyIgMT4mNgogY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCkBAIC0xMzE5LDEyICsxNTkxLDEyIEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyB0byBzZWUgaWYgcmlnaHQgc2hpZnQgaXMgc2lnbmVkIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxMzIzOiBjaGVja2luZyB0byBzZWUgaWYgcmlnaHQgc2hpZnQgaXMgc2lnbmVkIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxNTk1OiBjaGVja2luZyB0byBzZWUgaWYgcmlnaHQgc2hpZnQgaXMgc2lnbmVkIiA+JjUKIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCiAgIGVjaG8gIiRhY190IiJBc3N1bWluZyB0aGF0IHJpZ2h0IHNoaWZ0IGlzIHNpZ25lZCBvbiB0YXJnZXQgbWFjaGluZS4iIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTMyOCAiY29uZmlndXJlIgorI2xpbmUgMTYwMCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpZmRlZiBIQVZFX1BST1RPVFlQRVMKQEAgLTEzNTQsNyArMTYyNiw3IEBACiAgIGV4aXQoaXNfc2hpZnRpbmdfc2lnbmVkKC0weDdGN0U4MEIxTCkpOwogfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEzNTg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTYzMDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAogdGhlbgogICBlY2hvICIkYWNfdCIibm8iIDE+JjYKIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgpAQCAtMTM3MSwxMiArMTY0MywxMiBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGZvcGVuIGFjY2VwdHMgYiBzcGVjIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxMzc1OiBjaGVja2luZyB0byBzZWUgaWYgZm9wZW4gYWNjZXB0cyBiIHNwZWMiID4mNQorZWNobyAiY29uZmlndXJlOjE2NDc6IGNoZWNraW5nIHRvIHNlZSBpZiBmb3BlbiBhY2NlcHRzIGIgc3BlYyIgPiY1CiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICBlY2hvICIkYWNfdCIiQXNzdW1pbmcgdGhhdCBpdCBkb2VzLiIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMzgwICJjb25maWd1cmUiCisjbGluZSAxNjUyICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xMzg2LDcgKzE2NTgsNyBAQAogICBleGl0KDEpOwogfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEzOTA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTY2MjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAogdGhlbgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CiBlbHNlCkBAIC0xNDI4LDI4ICsxNzAwLDMwIEBACiAjIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKICMgSVJJWCAvc2Jpbi9pbnN0YWxsCiAjIEFJWCAvYmluL2luc3RhbGwKKyMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCiAjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKICMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKICMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGEgQlNEIGNvbXBhdGlibGUgaW5zdGFsbCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTQzNjogY2hlY2tpbmcgZm9yIGEgQlNEIGNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CitlY2hvICJjb25maWd1cmU6MTcwOTogY2hlY2tpbmcgZm9yIGEgQlNEIGNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CiBpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX2luc3RhbGwnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQotICAgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9IiR7SUZTfToiCisgICAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0iOiIKICAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KICAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KICAgICBjYXNlICIkYWNfZGlyLyIgaW4KICAgICAvfC4vfC4vL3wvZXRjLyp8L3Vzci9zYmluLyp8L3Vzci9ldGMvKnwvc2Jpbi8qfC91c3IvYWZzd3MvYmluLyp8L3Vzci91Y2IvKikgOzsKICAgICAqKQogICAgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KLSAgICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIGluc3RhbGxic2Qgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisgICAgICAjIGJ5IGRlZmF1bHQuCisgICAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCiAgICAgICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfcHJvZzsgdGhlbgogCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKICAgICAgICAgICAgIGdyZXAgZHNwbXNnICRhY19kaXIvJGFjX3Byb2cgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KLQkgICAgIyBPU0YvMSBpbnN0YWxsYnNkIGFsc28gdXNlcyBkc3Btc2csIGJ1dCBpcyB1c2FibGUuCiAJICAgIDoKIAkgIGVsc2UKIAkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYWNfZGlyLyRhY19wcm9nIC1jIgpAQCAtMTQ3OSwyMCArMTc1MywyMyBAQAogIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KIHRlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKIAordGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMX1BST0dSQU19JworCiB0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JwogCiAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjE0ODg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICJjb25maWd1cmU6MTc2NDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX1JBTkxJQicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCiAgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KIGVsc2UKLSAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiIKLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgogICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgogICAgICAgYWNfY3ZfcHJvZ19SQU5MSUI9InJhbmxpYiIKQEAgLTE1MTEsMzAgKzE3ODgsMTg2IEBACiBmaQogCiAKKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgoraWYgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGFjX2NvbmZpZ19zdWIgc3VuNCA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorZWxzZSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgcnVuICRhY19jb25maWdfc3ViIiAxPiYyOyBleGl0IDE7IH0KK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE3OTk6IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorCitob3N0X2FsaWFzPSRob3N0CitjYXNlICIkaG9zdF9hbGlhcyIgaW4KK05PTkUpCisgIGNhc2UgJG5vbm9wdCBpbgorICBOT05FKQorICAgIGlmIGhvc3RfYWxpYXM9YCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRhY19jb25maWdfZ3Vlc3NgOyB0aGVuIDoKKyAgICBlbHNlIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBndWVzcyBob3N0IHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAxPiYyOyBleGl0IDE7IH0KKyAgICBmaSA7OworICAqKSBob3N0X2FsaWFzPSRub25vcHQgOzsKKyAgZXNhYyA7OworZXNhYworCitob3N0PWAke0NPTkZJR19TSEVMTC0vYmluL3NofSAkYWNfY29uZmlnX3N1YiAkaG9zdF9hbGlhc2AKK2hvc3RfY3B1PWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK2hvc3RfdmVuZG9yPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2hvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorZWNobyAiJGFjX3QiIiRob3N0IiAxPiY2CisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBDeWd3aW4gZW52aXJvbm1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE4MjA6IGNoZWNraW5nIGZvciBDeWd3aW4gZW52aXJvbm1lbnQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2N5Z3dpbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDE4MjUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKKworI2lmbmRlZiBfX0NZR1dJTl9fCisjZGVmaW5lIF9fQ1lHV0lOX18gX19DWUdXSU4zMl9fCisjZW5kaWYKK3JldHVybiBfX0NZR1dJTl9fOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE4MzY6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9jeWd3aW49eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X2N5Z3dpbj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0Kgorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X2N5Z3dpbiIgMT4mNgorQ1lHV0lOPQordGVzdCAiJGFjX2N2X2N5Z3dpbiIgPSB5ZXMgJiYgQ1lHV0lOPXllcworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIG1pbmd3MzIgZW52aXJvbm1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE4NTM6IGNoZWNraW5nIGZvciBtaW5ndzMyIGVudmlyb25tZW50IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9taW5ndzMyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTg1OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworcmV0dXJuIF9fTUlOR1czMl9fOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE4NjU6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9taW5ndzMyPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9taW5ndzMyPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfbWluZ3czMiIgMT4mNgorTUlOR1czMj0KK3Rlc3QgIiRhY19jdl9taW5ndzMyIiA9IHllcyAmJiBNSU5HVzMyPXllcworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBleGVjdXRhYmxlIHN1ZmZpeCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTg4NDogY2hlY2tpbmcgZm9yIGV4ZWN1dGFibGUgc3VmZml4IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9leGVleHQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0ICIkQ1lHV0lOIiA9IHllcyB8fCB0ZXN0ICIkTUlOR1czMiIgPSB5ZXM7IHRoZW4KKyAgYWNfY3ZfZXhlZXh0PS5leGUKK2Vsc2UKKyAgcm0gLWYgY29uZnRlc3QqCisgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuJGFjX2V4dAorICBhY19jdl9leGVleHQ9CisgIGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTg5NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfTsgdGhlbgorICAgIGZvciBmaWxlIGluIGNvbmZ0ZXN0Lio7IGRvCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLmMgfCAqLm8gfCAqLm9iaikgOzsKKyAgICAgICopIGFjX2N2X2V4ZWV4dD1gZWNobyAkZmlsZSB8IHNlZCAtZSBzL2NvbmZ0ZXN0Ly9gIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorICBlbHNlCisgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVtOiBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzLiIgMT4mMjsgZXhpdCAxOyB9CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KgorICB0ZXN0IHgiJHthY19jdl9leGVleHR9IiA9IHggJiYgYWNfY3ZfZXhlZXh0PW5vCitmaQorZmkKKworRVhFRVhUPSIiCit0ZXN0IHgiJHthY19jdl9leGVleHR9IiAhPSB4bm8gJiYgRVhFRVhUPSR7YWNfY3ZfZXhlZXh0fQorZWNobyAiJGFjX3QiIiR7YWNfY3ZfZXhlZXh0fSIgMT4mNgorYWNfZXhlZXh0PSRFWEVFWFQKKworCiAjIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBsaWJ0b29sLAogIyBhbmQgaWYgc28gd2hldGhlciB0byBidWlsZCBzaGFyZWQsIHN0YXRpYywgb3IgYm90aCBmbGF2b3JzIG9mIGxpYnJhcnkuCi1MVFNIQVJFRD0ibm8iCiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIG9yIC0tZGlzYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgogaWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuCiAgIGVuYWJsZXZhbD0iJGVuYWJsZV9zaGFyZWQiCi0gIExUU0hBUkVEPSIkZW5hYmxldmFsIgorICBwPSR7UEFDS0FHRS1kZWZhdWx0fQorY2FzZSAkZW5hYmxldmFsIGluCit5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CitubykgZW5hYmxlX3NoYXJlZD1ubyA7OworKikKKyAgZW5hYmxlX3NoYXJlZD1ubworICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfTosIgorICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisgICAgaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKyAgICAgIGVuYWJsZV9zaGFyZWQ9eWVzCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgOzsKK2VzYWMKK2Vsc2UKKyAgZW5hYmxlX3NoYXJlZD1ubwogZmkKIAotTFRTVEFUSUM9Im5vIgogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyBvciAtLWRpc2FibGUtc3RhdGljIHdhcyBnaXZlbi4KIGlmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbgogICBlbmFibGV2YWw9IiRlbmFibGVfc3RhdGljIgotICBMVFNUQVRJQz0iJGVuYWJsZXZhbCIKKyAgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KK2Nhc2UgJGVuYWJsZXZhbCBpbgoreWVzKSBlbmFibGVfc3RhdGljPXllcyA7Oworbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyopCisgIGVuYWJsZV9zdGF0aWM9bm8KKyAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306LCIKKyAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworICAgIGlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisgICAgICBlbmFibGVfc3RhdGljPXllcworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIDs7Citlc2FjCitlbHNlCisgIGVuYWJsZV9zdGF0aWM9bm8KIGZpCiAKLWlmIHRlc3QgIngkTFRTSEFSRUQiICE9IHhubyAgLW8gICJ4JExUU1RBVElDIiAhPSB4bm87IHRoZW4KK2lmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0geG5vICAtbyAgIngkZW5hYmxlX3N0YXRpYyIgIT0geG5vOyB0aGVuCiAgIFVTRUxJQlRPT0w9InllcyIKLSAgTElCVE9PTD0iLi9saWJ0b29sIgorIyBMSUJUT09MPSIuL2xpYnRvb2wiCiAgIE89ImxvIgogICBBPSJsYSIKICAgTE49JyQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQyknCiAgIElOU1RBTExfTElCPSckKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICR7SU5TVEFMTH0nCiAgIElOU1RBTExfUFJPR1JBTT0iXCQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJElOU1RBTExfUFJPR1JBTSIKKyAgVU5JTlNUQUxMPSckKExJQlRPT0wpIC0tbW9kZT11bmluc3RhbGwgJChSTSknCiBlbHNlCiAgIFVTRUxJQlRPT0w9Im5vIgogICBMSUJUT09MPSIiCkBAIC0xNTQyLDYgKzE5NzUsNyBAQAogICBBPSJhIgogICBMTj0nJChDQyknCiAgIElOU1RBTExfTElCPSIkSU5TVEFMTF9EQVRBIgorICBVTklOU1RBTEw9JyQoUk0pJwogZmkKIAogCkBAIC0xNTQ5LDE5ICsxOTgzLDQyNjYgQEAKIAogCiAKKwogIyBDb25maWd1cmUgbGlidG9vbCBpZiBuZWVkZWQuCiBpZiB0ZXN0ICRVU0VMSUJUT09MID0geWVzOyB0aGVuCi0gIGRpc2FibGVfc2hhcmVkPQotICBkaXNhYmxlX3N0YXRpYz0KLSAgaWYgdGVzdCAieCRMVFNIQVJFRCIgPSB4bm87IHRoZW4KLSAgICBkaXNhYmxlX3NoYXJlZD0iLS1kaXNhYmxlLXNoYXJlZCIKLSAgZmkKLSAgaWYgdGVzdCAieCRMVFNUQVRJQyIgPSB4bm87IHRoZW4KLSAgICBkaXNhYmxlX3N0YXRpYz0iLS1kaXNhYmxlLXN0YXRpYyIKLSAgZmkKLSAgJHNyY2Rpci9sdGNvbmZpZyAkZGlzYWJsZV9zaGFyZWQgJGRpc2FibGVfc3RhdGljICRzcmNkaXIvbHRtYWluLnNoCisgIAorICAKKyAgIyBGaW5kIHRoZSBjb3JyZWN0IFBBVEggc2VwYXJhdG9yLiAgVXN1YWxseSB0aGlzIGlzIGA6JywgYnV0CisjIERKR1BQIHVzZXMgYDsnIGxpa2UgRE9TLgoraWYgdGVzdCAiWCR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gWHNldDsgdGhlbgorICBVTkFNRT0ke1VOQU1FLWB1bmFtZSAyPi9kZXYvbnVsbGB9CisgIGNhc2UgWCRVTkFNRSBpbgorICAgICotRE9TKSBsdF9jdl9zeXNfcGF0aF9zZXBhcmF0b3I9JzsnIDs7CisgICAgKikgICAgIGx0X2N2X3N5c19wYXRoX3NlcGFyYXRvcj0nOicgOzsKKyAgZXNhYworICBQQVRIX1NFUEFSQVRPUj0kbHRfY3Zfc3lzX3BhdGhfc2VwYXJhdG9yCiBmaQogCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIG9yIC0tZGlzYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9mYXN0X2luc3RhbGwiCisgIHA9JHtQQUNLQUdFLWRlZmF1bHR9CitjYXNlICRlbmFibGV2YWwgaW4KK3llcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKK25vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisqKQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiwiCisgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKyAgICBpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorICA7OworZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIwMjc6IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKworYnVpbGRfYWxpYXM9JGJ1aWxkCitjYXNlICIkYnVpbGRfYWxpYXMiIGluCitOT05FKQorICBjYXNlICRub25vcHQgaW4KKyAgTk9ORSkgYnVpbGRfYWxpYXM9JGhvc3RfYWxpYXMgOzsKKyAgKikgYnVpbGRfYWxpYXM9JG5vbm9wdCA7OworICBlc2FjIDs7Citlc2FjCisKK2J1aWxkPWAke0NPTkZJR19TSEVMTC0vYmluL3NofSAkYWNfY29uZmlnX3N1YiAkYnVpbGRfYWxpYXNgCitidWlsZF9jcHU9YGVjaG8gJGJ1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK2J1aWxkX3ZlbmRvcj1gZWNobyAkYnVpbGQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAorYnVpbGRfb3M9YGVjaG8gJGJ1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKK2VjaG8gIiRhY190IiIkYnVpbGQiIDE+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgb3IgLS13aXRob3V0LWdudS1sZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2dudV9sZCIKKyAgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgR0NDIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyMDU2OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSBHQ0MiID4mNQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRoIG9mIGxkCisgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgR05VIGxkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyMDg2OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKK2Vsc2UKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIwODk6IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snbHRfY3ZfcGF0aF9MRCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgaWYgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsIHwgZWdyZXAgJyhHTlV8d2l0aCBCRkQpJyA+IC9kZXYvbnVsbDsgdGhlbgorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKyAgICAgIGVsc2UKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRMRCIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCit0ZXN0IC16ICIkTEQiICYmIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiIDE+JjI7IGV4aXQgMTsgfQorZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIxMjQ6IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydsdF9jdl9wcm9nX2dudV9sZCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCitpZiAkTEQgLXYgMj4mMSA8L2Rldi9udWxsIHwgZWdyZXAgJyhHTlV8d2l0aCBCRkQpJyAxPiY1OyB0aGVuCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworZWxzZQorICBsdF9jdl9wcm9nX2dudV9sZD1ubworZmkKK2ZpCisKK2VjaG8gIiRhY190IiIkbHRfY3ZfcHJvZ19nbnVfbGQiIDE+JjYKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIxNDE6IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2x0X2N2X2xkX3JlbG9hZF9mbGFnJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJworZmkKKworZWNobyAiJGFjX3QiIiRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgMT4mNgorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCit0ZXN0IC1uICIkcmVsb2FkX2ZsYWciICYmIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIgorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgQlNELWNvbXBhdGlibGUgbm0iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIxNTM6IGNoZWNraW5nIGZvciBCU0QtY29tcGF0aWJsZSBubSIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snbHRfY3ZfcGF0aF9OTScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09IiROTSIKK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIHRtcF9ubT0kYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9bm0KKyAgICBpZiB0ZXN0IC1mICR0bXBfbm0gfHwgdGVzdCAtZiAkdG1wX25tJGFjX2V4ZWV4dCA7IHRoZW4KKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorICAgICAgIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKyAgICAgICMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKyAgICAgICMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorICAgICAgaWYgKCR0bXBfbm0gLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJzsgZXhpdCAwKSB8IGVncmVwICcoL2Rldi9udWxsfEludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZSknID4vZGV2L251bGw7IHRoZW4KKwlsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCWJyZWFrCisgICAgICBlbGlmICgkdG1wX25tIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSc7IGV4aXQgMCkgfCBlZ3JlcCAvZGV2L251bGwgPi9kZXYvbnVsbDsgdGhlbgorCWx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJYnJlYWsKKyAgICAgIGVsc2UKKwlsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCWNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIHRlc3QgLXogIiRsdF9jdl9wYXRoX05NIiAmJiBsdF9jdl9wYXRoX05NPW5tCitmaQorZmkKKworTk09IiRsdF9jdl9wYXRoX05NIgorZWNobyAiJGFjX3QiIiROTSIgMT4mNgorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIxOTE6IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snbHRfY3ZfcGF0aF9TRUQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KKyMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KK2FzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICBfc2VkX2xpc3Q9IiRfc2VkX2xpc3QgJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCitkb25lCisKKyAgIyBDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBhbmQgaG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyRkZWJ1ZyB8fAoreworICB0cmFwICdleGl0X3N0YXR1cz0kPzsgcm0gLXJmICR0bXAgJiYgZXhpdCAkZXhpdF9zdGF0dXMnIDAKKyAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKK30KKworIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCis6ICR7VE1QRElSPS90bXB9Cit7CisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgLXEgIiRUTVBESVIvc2VkWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9JFRNUERJUi9zZWQkJC0kUkFORE9NCisgICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkKK30gfHwKK3sKKyAgIGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH0KK30KKyAgX21heD0wCisgIF9jb3VudD0wCisgICMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCisgICMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCisgIGZvciBfc2VkIGluICRfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCisgICAgdGVzdCAhIC1mICR7X3NlZH0gJiYgYnJlYWsKKyAgICBjYXQgL2Rldi9udWxsID4gIiR0bXAvc2VkLmluIgorICAgIF9jb3VudD0wCisgICAgZWNobyAke0VDSE9fTi0kYWNfbn0gIjAxMjM0NTY3ODkke0VDSE9fQy0kYWNfY30iID4iJHRtcC9zZWQuaW4iCisgICAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAgIGlmICIke19zZWR9IiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGVncmVwICcoR05VKScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfU0VEPSR7X3NlZH0KKyAgICAgIGJyZWFrCisgICAgZmkKKyAgICB3aGlsZSB0cnVlOyBkbworICAgICAgY2F0ICIkdG1wL3NlZC5pbiIgIiR0bXAvc2VkLmluIiA+IiR0bXAvc2VkLnRtcCIKKyAgICAgIG12ICIkdG1wL3NlZC50bXAiICIkdG1wL3NlZC5pbiIKKyAgICAgIGNwICIkdG1wL3NlZC5pbiIgIiR0bXAvc2VkLm5sIgorICAgICAgZWNobyA+PiIkdG1wL3NlZC5ubCIKKyAgICAgICR7X3NlZH0gLWUgJ3MvYSQvLycgPCAiJHRtcC9zZWQubmwiID4iJHRtcC9zZWQub3V0IiB8fCBicmVhaworICAgICAgY21wIC1zICIkdG1wL3NlZC5vdXQiICIkdG1wL3NlZC5ubCIgfHwgYnJlYWsKKyAgICAgICMgNDAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgICAgdGVzdCAkX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgICAgX2NvdW50PWBleHByICRfY291bnQgKyAxYAorICAgICAgaWYgdGVzdCAkX2NvdW50IC1ndCAkX21heDsgdGhlbgorICAgICAgICBfbWF4PSRfY291bnQKKyAgICAgICAgbHRfY3ZfcGF0aF9TRUQ9JF9zZWQKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCisgIHJtIC1yZiAiJHRtcCIKKworZmkKKworaWYgdGVzdCAiWCRTRUQiICE9ICJYIjsgdGhlbgorICBsdF9jdl9wYXRoX1NFRD0kU0VECitlbHNlCisgIFNFRD0kbHRfY3ZfcGF0aF9TRUQKK2ZpCitlY2hvICIkYWNfdCIiJFNFRCIgMT4mNgorCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyMjc1OiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0xOX1MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBybSAtZiBjb25mdGVzdGRhdGEKK2lmIGxuIC1zIFggY29uZnRlc3RkYXRhIDI+L2Rldi9udWxsCit0aGVuCisgIHJtIC1mIGNvbmZ0ZXN0ZGF0YQorICBhY19jdl9wcm9nX0xOX1M9ImxuIC1zIgorZWxzZQorICBhY19jdl9wcm9nX0xOX1M9bG4KK2ZpCitmaQorTE5fUz0iJGFjX2N2X3Byb2dfTE5fUyIKK2lmIHRlc3QgIiRhY19jdl9wcm9nX0xOX1MiID0gImxuIC1zIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbmlzZSBkZXBlbmRlbnQgbGlicmFyaWVzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyMjk2OiBjaGVja2luZyBob3cgdG8gcmVjb2duaXNlIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBlZ3JlcCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4NCogfCBhaXg1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGk0KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBNYWNoLU8gZHluYW1pY2FsbHkgbGlua2VkIHNoYXJlZCBsaWJyYXJ5JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvU3lzdGVtLmZyYW1ld29yay9WZXJzaW9ucy8qL1N5c3RlbSB8IGhlYWQgLTFgCisgICAgOzsKKyAgKikgIyBEYXJ3aW4gMS4zIG9uCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9Jy91c3IvbGliL2xpYlN5c3RlbS5keWxpYicKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ZyZWVic2QqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0QpL2lbMy05XTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitnbnUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqfGhwdXgxMSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfFBBLVJJU0NbMC05XS5bMC05XSkgc2hhcmVkIGxpYnJhcnknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgIyB0aGlzIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aXRoIHBhc3NfYWxsLCBidXQgbGV0IHVzIGtlZXAgaXQganVzdCBpbiBjYXNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIDMyLWJpdCBNU0IgZHluYW1pYyBsaWIgTUlQUyAtIHZlcnNpb24gMSIKKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluCisgICAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgICMgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gd2l0aCBwYXNzX2FsbCwgYnV0IGxldCB1cyBrZWVwIGl0IGp1c3QgaW4gY2FzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiAke2xpYm1hZ2ljfSBNU0IgbWlwcy1bMTIzNF0gZHluYW1pYyBsaWIgTUlQUyAtIHZlcnNpb24gMSIKKyAgICA7OworICBlc2FjCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIke2xpYnN1ZmZ9L2xpYmMuc28qYAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eC1nbnUqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBhbHBoYSogfCBocHBhKiB8IGkqODYgfCBtaXBzIHwgbWlwc2VsIHwgcG93ZXJwYyogfCBzcGFyYyogfCBpYTY0KiB8IHMzOTAqIHwgeDg2XzY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbCA7OworICAqKQorICAgICMgZ2xpYmMgdXAgdG8gMi4xLjEgZG9lcyBub3QgcGVyZm9ybSBzb21lIHJlbG9jYXRpb25zIG9uIEFSTQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknIDs7CisgIGVzYWMKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJjLnNvKiAvbGliL2xpYmMtKi5zb2AKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXC5dK1wuc29cLlswLTldK1wuWzAtOV0rJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9cLl0rXC5zbyQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworb3BlbmJzZCopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiBzaGFyZWQgb2JqZWN0JworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgT3BlbkJTRC4qIHNoYXJlZCBsaWJyYXJ5JworICBmaQorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICMgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gd2l0aCBwYXNzX2FsbCwgYnV0IGxldCB1cyBrZWVwIGl0IGp1c3QgaW4gY2FzZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBDT0ZGIGZvcm1hdCBhbHBoYSBzaGFyZWQgbGlicmFyeScKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc2NvMy4ydjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgIDs7CisKK3N5c3Y1dXdbNzhdKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bMC05XVswLTldKiBWZXJzaW9uIFswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7Citlc2FjCisKK2ZpCisKK2VjaG8gIiRhY190IiIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiIDE+JjYKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBvYmplY3Qgc3VmZml4IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyNDgyOiBjaGVja2luZyBmb3Igb2JqZWN0IHN1ZmZpeCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfb2JqZXh0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgcm0gLWYgY29uZnRlc3QqCitlY2hvICdpbnQgaSA9IDE7JyA+IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjQ4ODogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC4qOyBkbworICAgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLmMpIDs7CisgICAgKikgYWNfY3Zfb2JqZXh0PWBlY2hvICRhY19maWxlIHwgc2VkIC1lIHMvY29uZnRlc3QuLy9gIDs7CisgICAgZXNhYworICBkb25lCitlbHNlCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogaW5zdGFsbGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gcHJvYmxlbTsgY29tcGlsZXIgZG9lcyBub3Qgd29yayIgMT4mMjsgZXhpdCAxOyB9CitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X29iamV4dCIgMT4mNgorT0JKRVhUPSRhY19jdl9vYmpleHQKK2FjX29iamV4dD0kYWNfY3Zfb2JqZXh0CisKK2lmIHRlc3QgJGhvc3QgIT0gJGJ1aWxkOyB0aGVuCisgIGFjX3Rvb2xfcHJlZml4PSR7aG9zdF9hbGlhc30tCitlbHNlCisgIGFjX3Rvb2xfcHJlZml4PQorZmkKKworCisKKworIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK2VjaG8gJGFjX24gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjUxNjogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tCQ0RFR1JTVF0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtfQS1aYS16XVtfQS1aYS16MC05XSpcKScKKworIyBUcmFuc2Zvcm0gdGhlIGFib3ZlIGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorc3lteGZybT0nXDEgXDJcMyBcMycKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgorbHRfY3ZfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL14uIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgorCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW0JDRFRdJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICBzeW1jb2RlPSdbQUJDREdJU1RXXScKKyAgOzsKK2hwdXgqKSAjIEl0cyBsaW5rZXIgZGlzdGluZ3Vpc2hlcyBkYXRhIGZyb20gY29kZSBzeW1ib2xzCisgIGx0X2N2X2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgIGx0X2N2X2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW0JDREVHUlNUXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tCQ0RFR1FSU1RdJworICA7Oworc29sYXJpcyogfCBzeXN2NSopCisgIHN5bWNvZGU9J1tCRFRdJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tERk5TVFVdJworICA7OworZXNhYworCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGhvc3Rfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWBlY2hvICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgoraWYgJE5NIC1WIDI+JjEgfCBlZ3JlcCAnKEdOVXx3aXRoIEJGRCknID4gL2Rldi9udWxsOyB0aGVuCisgIHN5bWNvZGU9J1tBQkNER0lTVFddJworZmkKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcmNvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWyAJXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsgCV1bIAldKlwoJGFjX3N5bXByZnhcKSRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitFT0YKKworICBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI1OTk6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjYwMjogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3RcIikgMT4mNTsgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0KSAyPiY1OyB9ICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgZWdyZXAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiBlZ3JlcCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PEVPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3ZfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8RU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KKyMgZGVmaW5lIGx0X3B0ciB2b2lkICoKKyNlbHNlCisjIGRlZmluZSBsdF9wdHIgY2hhciAqCisjIGRlZmluZSBjb25zdAorI2VuZGlmCisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAqLworY29uc3Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgbHRfcHRyIGFkZHJlc3M7Cit9CitsdF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3sKK0VPRgorCSAgc2VkICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC8iIDwgIiRubGlzdCIgPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAobHRfcHRyKSAwfQorfTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgc2F2ZV9MSUJTPSIkTElCUyIKKwkgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRub19idWlsdGluX2ZsYWciCisJICBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI2NTM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSIkc2F2ZV9MSUJTIgorCSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKKworZmkKKworZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorICBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPQorZWxzZQorICBnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSIkbHRfY3ZfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIKKyAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0iJGx0X2N2X2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiCitmaQoraWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSRnbG9iYWxfc3ltYm9sX3RvX2NkZWMkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyI7Cit0aGVuCisgIGVjaG8gIiRhY190IiJmYWlsZWQiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm9rIiAxPiY2CitmaQorCitmb3IgYWNfaGRyIGluIGRsZmNuLmgKK2RvCithY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfaGRyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyNzAyOiBjaGVja2luZyBmb3IgJGFjX2hkciIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjcwNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JGFjX2hkcj4KK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MjcxMjogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJGFjX2hkciB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfaGRyIDEKK0VPRgorIAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitkb25lCisKKworCisKKworCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI3NDg6IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2x0X2N2X3BhdGhfTUFHSUNfQ01EJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2FzZSAkTUFHSUNfQ01EIGluCisgIC8qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgID86LyopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgZG9zIHBhdGguCisgIDs7CisgICopCisgIGFjX3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBJRlM9IiR7SUZTPSAgIH0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9Ii91c3IvYmluOiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGU7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD0iYGV4cHIgXCIkZGVwbGlic19jaGVja19tZXRob2RcIiA6IFwiZmlsZV9tYWdpYyBcKC4qXClcImAiCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgZWdyZXAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PEVPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitFT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkYWNfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkTUFHSUNfQ01EIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworaWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGZpbGUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI4MTA6IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydsdF9jdl9wYXRoX01BR0lDX0NNRCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorICAvKikKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICA/Oi8qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIGRvcyBwYXRoLgorICA7OworICAqKQorICBhY19zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgSUZTPSIke0lGUz0gICB9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIvdXNyL2JpbjokUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvZmlsZTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD0iYGV4cHIgXCIkZGVwbGlic19jaGVja19tZXRob2RcIiA6IFwiZmlsZV9tYWdpYyBcKC4qXClcImAiCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgZWdyZXAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PEVPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitFT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkYWNfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkTUFHSUNfQ01EIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCisKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Mjg4MTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX1JBTkxJQicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorZmkKK2ZpCitSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkUkFOTElCIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjkxMzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX1JBTkxJQicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19SQU5MSUI9InJhbmxpYiIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIiAmJiBhY19jdl9wcm9nX1JBTkxJQj0iOiIKK2ZpCitmaQorUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJFJBTkxJQiIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2Vsc2UKKyAgUkFOTElCPSI6IgorZmkKK2ZpCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyOTQ4OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfU1RSSVAnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK1NUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRTVFJJUCIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKworaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI5ODA6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19TVFJJUCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19TVFJJUD0ic3RyaXAiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIiAmJiBhY19jdl9wcm9nX1NUUklQPSI6IgorZmkKK2ZpCitTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkU1RSSVAiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCitlbHNlCisgIFNUUklQPSI6IgorZmkKK2ZpCisKKworZW5hYmxlX2Rsb3Blbj15ZXMKK2VuYWJsZV93aW4zMl9kbGw9eWVzCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgb3IgLS1kaXNhYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAgOgorZmkKKwordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnI2xpbmUgMzAyOSAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzAzMDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAqMzItYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtMzIiCisgICAgICA7OworICAgICpOMzIqKQorICAgICAgTEQ9IiR7TEQtbGR9IC1uMzIiCisgICAgICA7OworICAgICo2NC1iaXQqKQorICAgICAgTEQ9IiR7TEQtbGR9IC02NCIKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzA1MTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snbHRfY3ZfY2NfbmVlZHNfYmVsZicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorICAgICBhY19leHQ9YworIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKK2FjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKK2Nyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworCisgICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMwNjQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMwNzE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGx0X2N2X2NjX25lZWRzX2JlbGY9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgICAgYWNfZXh0PWMKKyMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCithY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCitjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKworZmkKKworZWNobyAiJGFjX3QiIiRsdF9jdl9jY19uZWVkc19iZWxmIiAxPiY2CisgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCisgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisgIGZpCisgIDs7CisKKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKikKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozMTAxOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfRExMVE9PTCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK0RMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCitpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRETExUT09MIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzEzMzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0RMTFRPT0wnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iZGxsdG9vbCIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCIgJiYgYWNfY3ZfcHJvZ19ETExUT09MPSJmYWxzZSIKK2ZpCitmaQorRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJERMTFRPT0wiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCitlbHNlCisgIERMTFRPT0w9ImZhbHNlIgorZmkKK2ZpCisKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMxNjg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19BUycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19BUz0iJHthY190b29sX3ByZWZpeH1hcyIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKK2ZpCitmaQorQVM9IiRhY19jdl9wcm9nX0FTIgoraWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJEFTIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXM7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzIwMDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0FTJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorICBhY19jdl9wcm9nX0FTPSIkQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wcm9nX0FTPSJhcyIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVMiICYmIGFjX2N2X3Byb2dfQVM9ImZhbHNlIgorZmkKK2ZpCitBUz0iJGFjX2N2X3Byb2dfQVMiCitpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkQVMiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCitlbHNlCisgIEFTPSJmYWxzZSIKK2ZpCitmaQorCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzIzNTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX09CSkRVTVAnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorZmkKK2ZpCitPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgoraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkT0JKRFVNUCIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKworaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMyNjc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19PQkpEVU1QJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wcm9nX09CSkRVTVA9Im9iamR1bXAiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiICYmIGFjX2N2X3Byb2dfT0JKRFVNUD0iZmFsc2UiCitmaQorZmkKK09CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCitpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRPQkpEVU1QIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZWxzZQorICBPQkpEVU1QPSJmYWxzZSIKK2ZpCitmaQorCisKKyAgIyByZWNlbnQgY3lnd2luIGFuZCBtaW5ndyBzeXN0ZW1zIHN1cHBseSBhIHN0dWIgRGxsTWFpbiB3aGljaCB0aGUgdXNlcgorICAjIGNhbiBvdmVycmlkZSwgYnV0IG9uIG9sZGVyIHN5c3RlbXMgd2UgaGF2ZSB0byBzdXBwbHkgb25lCisgIGVjaG8gJGFjX24gImNoZWNraW5nIGlmIGxpYnRvb2wgc2hvdWxkIHN1cHBseSBEbGxNYWluIGZ1bmN0aW9uIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozMzAzOiBjaGVja2luZyBpZiBsaWJ0b29sIHNob3VsZCBzdXBwbHkgRGxsTWFpbiBmdW5jdGlvbiIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snbHRfY3ZfbmVlZF9kbGxtYWluJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzMwOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworZXh0ZXJuIGludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERsbE1haW4odm9pZCosIGludCwgdm9pZCopOworICAgICAgRGxsTWFpbiAoMCwgMCwgMCk7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzMxNjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgbHRfY3ZfbmVlZF9kbGxtYWluPW5vCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGx0X2N2X25lZWRfZGxsbWFpbj15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2VjaG8gIiRhY190IiIkbHRfY3ZfbmVlZF9kbGxtYWluIiAxPiY2CisKKyAgY2FzZSAkaG9zdC8kQ0MgaW4KKyAgKi0qLWN5Z3dpbiovZ2NjKi1tbm8tY3lnd2luKnwqLSotbWluZ3cqKQorICAgICMgb2xkIG1pbmd3IHN5c3RlbXMgcmVxdWlyZSAiLWRsbCIgdG8gbGluayBhIERMTCwgd2hpbGUgbW9yZSByZWNlbnQgb25lcworICAgICMgcmVxdWlyZSAiLW1kbGwiCisgICAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1tZGxsIgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGhvdyB0byBsaW5rIERMTHMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMzMzc6IGNoZWNraW5nIGhvdyB0byBsaW5rIERMTHMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2x0X2N2X2NjX2RsbF9zd2l0Y2gnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzMzQyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMzQ5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBsdF9jdl9jY19kbGxfc3dpdGNoPS1tZGxsCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGx0X2N2X2NjX2RsbF9zd2l0Y2g9LWRsbAorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAiJGFjX3QiIiRsdF9jdl9jY19kbGxfc3dpdGNoIiAxPiY2CisgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiIDs7CisgICotKi1jeWd3aW4qIHwgKi0qLXB3MzIqKQorICAgICMgY3lnd2luIHN5c3RlbXMgbmVlZCB0byBwYXNzIC0tZGxsIHRvIHRoZSBsaW5rZXIsIGFuZCBub3QgbGluaworICAgICMgY3J0Lm8gd2hpY2ggd2lsbCByZXF1aXJlIGEgV2luTWFpbkAxNiBkZWZpbml0aW9uLgorICAgIGx0X2N2X2NjX2RsbF9zd2l0Y2g9Ii1XbCwtLWRsbCAtbm9zdGFydGZpbGVzIiA7OworICBlc2FjCisgIDs7CisgIAorZXNhYworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorWHNlZD0nc2VkIC1lIHMvXlgvLycKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGAkXFxcXF1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1xcIlxcYFxcXFxdXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKworIyBDb25zdGFudHM6CitybT0icm0gLWYiCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK2RlZmF1bHRfb2ZpbGU9bGlidG9vbAorY2FuX2J1aWxkX3NoYXJlZD15ZXMKKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE0kVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitvZmlsZT0iJGRlZmF1bHRfb2ZpbGUiCit3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgorbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRBUiIgJiYgQVI9YXIKK3Rlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Cit0ZXN0IC16ICIkQVMiICYmIEFTPWFzCit0ZXN0IC16ICIkQ0MiICYmIENDPWNjCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQordGVzdCAteiAiJE5NIiAmJiBOTT1ubQordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgordGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KKworaWYgdGVzdCB4IiRob3N0IiAhPSB4IiRidWlsZCI7IHRoZW4KKyAgYWNfdG9vbF9wcmVmaXg9JHtob3N0X2FsaWFzfS0KK2Vsc2UKKyAgYWNfdG9vbF9wcmVmaXg9CitmaQorCisjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorY2FzZSAkaG9zdF9vcyBpbgorbGludXgtZ251KikgOzsKK2xpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorZXNhYworCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IlwkUkFOTElCIC10IFwkb2xkbGlifiRvbGRfcG9zdGluc3RhbGxfY21kcyIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSJcJFJBTkxJQiBcJG9sZGxpYn4kb2xkX3Bvc3RpbnN0YWxsX2NtZHMiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitzZXQgZHVtbXkgJENDCitjb21waWxlcj0iJDIiCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBvYmpkaXIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM0NjM6IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQorcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIG9iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBvYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbAorZWNobyAiJGFjX3QiIiRvYmpkaXIiIDE+JjYKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyBvciAtLXdpdGhvdXQtcGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9waWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfcGljIgorICBwaWNfbW9kZT0iJHdpdGh2YWwiCitlbHNlCisgIHBpY19tb2RlPWRlZmF1bHQKK2ZpCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAorCisjIFdlIGFzc3VtZSBoZXJlIHRoYXQgdGhlIHZhbHVlIGZvciBsdF9jdl9wcm9nX2NjX3BpYyB3aWxsIG5vdCBiZSBjYWNoZWQKKyMgaW4gaXNvbGF0aW9uLCBhbmQgdGhhdCBzZWVpbmcgaXQgc2V0IChmcm9tIHRoZSBjYWNoZSkgaW5kaWNhdGVzIHRoYXQKKyMgdGhlIGFzc29jaWF0ZWQgdmFsdWVzIGFyZSBzZXQgKGluIHRoZSBjYWNoZSkgY29ycmVjdGx5IHRvby4KK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozNDkwOiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snbHRfY3ZfcHJvZ19jY19waWMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAgbHRfY3ZfcHJvZ19jY19waWM9CisgIGx0X2N2X3Byb2dfY2Nfc2hsaWI9CisgIGx0X2N2X3Byb2dfY2Nfd2w9CisgIGx0X2N2X3Byb2dfY2Nfc3RhdGljPQorICBsdF9jdl9wcm9nX2NjX25vX2J1aWx0aW49CisgIGx0X2N2X3Byb2dfY2NfY2FuX2J1aWxkX3NoYXJlZD0kY2FuX2J1aWxkX3NoYXJlZAorCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19jY193bD0nLVdsLCcKKyAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgIyBCZWxvdyB0aGVyZSBpcyBhIGRpcnR5IGhhY2sgdG8gZm9yY2Ugbm9ybWFsIHN0YXRpYyBsaW5raW5nIHdpdGggLWxkbAorICAgICAgIyBUaGUgcHJvYmxlbSBpcyBiZWNhdXNlIGxpYmRsIGR5bmFtaWNhbGx5IGxpbmtlZCB3aXRoIGJvdGggbGliYyBhbmQKKyAgICAgICMgbGliQyAoQUlYIEMrKyBsaWJyYXJ5KSwgd2hpY2ggb2J2aW91c2x5IGRvZXNuJ3QgaW5jbHVkZWQgaW4gbGlicmFyaWVzCisgICAgICAjIGxpc3QgYnkgZ2NjLiBUaGlzIGNhdXNlIHVuZGVmaW5lZCBzeW1ib2xzIHdpdGggLXN0YXRpYyBmbGFncy4KKyAgICAgICMgVGhpcyBoYWNrIGFsbG93cyBDIHByb2dyYW1zIHRvIGJlIGxpbmtlZCB3aXRoICItc3RhdGljIC1sZGwiLCBidXQKKyAgICAgICMgbm90IHN1cmUgYWJvdXQgQysrIHByb2dyYW1zLgorICAgICAgbHRfY3ZfcHJvZ19jY19zdGF0aWM9IiRsdF9jdl9wcm9nX2NjX3N0YXRpYyAke2x0X2N2X3Byb2dfY2Nfd2x9LWxDIgorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgIGx0X2N2X3Byb2dfY2NfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICA7OworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfY3ZfcHJvZ19jY19waWM9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIGx0X2N2X3Byb2dfY2NfcGljPSctRERMTF9FWFBPUlQnCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwkgbHRfY3ZfcHJvZ19jY19waWM9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGx0X2N2X3Byb2dfY2NfcGljPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgIyBQT1JUTUUgQ2hlY2sgZm9yIFBJQyBmbGFncyBmb3IgdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyogfCBhaXg0KiB8IGFpeDUqKQorICAgICAgbHRfY3ZfcHJvZ19jY193bD0nLVdsLCcKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJbHRfY3ZfcHJvZ19jY19zdGF0aWM9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X2N2X3Byb2dfY2Nfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIGx0X2N2X3Byb2dfY2Nfd2w9Jy1XbCwnCisgICAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0iJHtsdF9jdl9wcm9nX2NjX3dsfS1hICR7bHRfY3ZfcHJvZ19jY193bH1hcmNoaXZlIgorICAgICAgbHRfY3ZfcHJvZ19jY19waWM9JytaJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBsdF9jdl9wcm9nX2NjX3dsPSctV2wsJworICAgICAgbHRfY3ZfcHJvZ19jY19zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgorICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfY3ZfcHJvZ19jY19waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgbHRfY3ZfcHJvZ19jY19waWM9Jy1LUElDJworICAgICAgbHRfY3ZfcHJvZ19jY19zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfY3ZfcHJvZ19jY193bD0nLVdsLCcKKyAgICAgIGx0X2N2X3Byb2dfY2Nfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzY28zLjJ2NSopCisgICAgICBsdF9jdl9wcm9nX2NjX3BpYz0nLUtwaWMnCisgICAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLWRuJworICAgICAgbHRfY3ZfcHJvZ19jY19zaGxpYj0nLWJlbGYnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBsdF9jdl9wcm9nX2NjX3BpYz0nLUtQSUMnCisgICAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBsdF9jdl9wcm9nX2NjX3dsPSctV2wsJworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBsdF9jdl9wcm9nX2NjX3BpYz0nLVBJQycKKyAgICAgIGx0X2N2X3Byb2dfY2Nfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGx0X2N2X3Byb2dfY2Nfd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisgICAgICBsdF9jdl9wcm9nX2NjX3BpYz0nLUtQSUMnCisgICAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBsdF9jdl9wcm9nX2NjX3dsPSctV2wsJworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgbHRfY3ZfcHJvZ19jY19waWM9Jy1waWMnCisgICAgICBsdF9jdl9wcm9nX2NjX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCWx0X2N2X3Byb2dfY2NfcGljPSctS2NvbmZvcm1fcGljJworCWx0X2N2X3Byb2dfY2Nfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgKikKKyAgICAgIGx0X2N2X3Byb2dfY2NfY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKK2ZpCisKK2lmIHRlc3QgLXogIiRsdF9jdl9wcm9nX2NjX3BpYyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIm5vbmUiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIiRsdF9jdl9wcm9nX2NjX3BpYyIgMT4mNgorCisgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBwaWNfZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9jdl9wcm9nX2NjX3BpYyB3b3JrcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzYzODogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9jdl9wcm9nX2NjX3BpYyB3b3JrcyIgPiY1CisgIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydsdF9jdl9wcm9nX2NjX3BpY193b3Jrcycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICBDRkxBR1M9IiRDRkxBR1MgJGx0X2N2X3Byb2dfY2NfcGljIC1EUElDIgorICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM2NDUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjM2NTI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwkjIE9uIEhQLVVYLCBib3RoIENDIGFuZCBHQ0Mgb25seSB3YXJuIHRoYXQgUElDIGlzIHN1cHBvcnRlZC4uLiB0aGVuCisJIyB0aGV5IGNyZWF0ZSBub24tUElDIG9iamVjdHMuICBTbywgaWYgdGhlcmUgd2VyZSBhbnkgd2FybmluZ3MsIHdlCisJIyBhc3N1bWUgdGhhdCBQSUMgaXMgbm90IHN1cHBvcnRlZC4KKwlpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgbHRfY3ZfcHJvZ19jY19waWNfd29ya3M9bm8KKwllbHNlCisJICBsdF9jdl9wcm9nX2NjX3BpY193b3Jrcz15ZXMKKwlmaQorCTs7CisgICAgICAqKQorCWx0X2N2X3Byb2dfY2NfcGljX3dvcmtzPXllcworCTs7CisgICAgICBlc2FjCisgICAgCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgICAgICAgIGx0X2N2X3Byb2dfY2NfcGljX3dvcmtzPW5vCisgICAgCitmaQorcm0gLWYgY29uZnRlc3QqCisgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgIAorZmkKKworCisgIGlmIHRlc3QgIlgkbHRfY3ZfcHJvZ19jY19waWNfd29ya3MiID0gWG5vOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19jY19waWM9CisgICAgbHRfY3ZfcHJvZ19jY19jYW5fYnVpbGRfc2hhcmVkPW5vCisgIGVsc2UKKyAgICBsdF9jdl9wcm9nX2NjX3BpYz0iICRsdF9jdl9wcm9nX2NjX3BpYyIKKyAgZmkKKworICBlY2hvICIkYWNfdCIiJGx0X2N2X3Byb2dfY2NfcGljX3dvcmtzIiAxPiY2CitmaQorCisjIENoZWNrIGZvciBhbnkgc3BlY2lhbCBzaGFyZWQgbGlicmFyeSBjb21waWxhdGlvbiBmbGFncy4KK2lmIHRlc3QgLW4gIiRsdF9jdl9wcm9nX2NjX3NobGliIjsgdGhlbgorICBlY2hvICJjb25maWd1cmU6IHdhcm5pbmc6IFxgJENDJyByZXF1aXJlcyBcYCRsdF9jdl9wcm9nX2NjX3NobGliJyB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiAxPiYyCisgIGlmIGVjaG8gIiRvbGRfQ0MgJG9sZF9DRkxBR1MgIiB8IGVncmVwIC1lICJbIAldJGx0X2N2X3Byb2dfY2Nfc2hsaWJbIAldIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgZWxzZQorICAgZWNobyAiY29uZmlndXJlOiB3YXJuaW5nOiBhZGQgXGAkbHRfY3ZfcHJvZ19jY19zaGxpYicgdG8gdGhlIENDIG9yIENGTEFHUyBlbnYgdmFyaWFibGUgYW5kIHJlY29uZmlndXJlIiAxPiYyCisgICAgbHRfY3ZfcHJvZ19jY19jYW5fYnVpbGRfc2hhcmVkPW5vCisgIGZpCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X2N2X3Byb2dfY2Nfc3RhdGljIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozNzA0OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X2N2X3Byb2dfY2Nfc3RhdGljIHdvcmtzIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydsdF9jdl9wcm9nX2NjX3N0YXRpY193b3Jrcycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgICAgbHRfY3ZfcHJvZ19jY19zdGF0aWNfd29ya3M9bm8KKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgTERGTEFHUz0iJExERkxBR1MgJGx0X2N2X3Byb2dfY2Nfc3RhdGljIgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzNzEyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNzE5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBsdF9jdl9wcm9nX2NjX3N0YXRpY193b3Jrcz15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QqCisgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCisKKworIyBCZWx0ICphbmQqIGJyYWNlcyB0byBzdG9wIG15IHRyb3VzZXJzIGZhbGxpbmcgZG93bjoKK3Rlc3QgIlgkbHRfY3ZfcHJvZ19jY19zdGF0aWNfd29ya3MiID0gWG5vICYmIGx0X2N2X3Byb2dfY2Nfc3RhdGljPQorZWNobyAiJGFjX3QiIiRsdF9jdl9wcm9nX2NjX3N0YXRpY193b3JrcyIgMT4mNgorCitwaWNfZmxhZz0iJGx0X2N2X3Byb2dfY2NfcGljIgorc3BlY2lhbF9zaGxpYl9jb21waWxlX2ZsYWdzPSIkbHRfY3ZfcHJvZ19jY19zaGxpYiIKK3dsPSIkbHRfY3ZfcHJvZ19jY193bCIKK2xpbmtfc3RhdGljX2ZsYWc9IiRsdF9jdl9wcm9nX2NjX3N0YXRpYyIKK25vX2J1aWx0aW5fZmxhZz0iJGx0X2N2X3Byb2dfY2Nfbm9fYnVpbHRpbiIKK2Nhbl9idWlsZF9zaGFyZWQ9IiRsdF9jdl9wcm9nX2NjX2Nhbl9idWlsZF9zaGFyZWQiCisKKworIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtbyBhbmQgLWMgYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlcgorZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Mzc0NjogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snbHRfY3ZfY29tcGlsZXJfY19vJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCiskcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKK21rZGlyIGNvbmZ0ZXN0CitjZCBjb25mdGVzdAorZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0Citta2RpciBvdXQKKyMgQWNjb3JkaW5nIHRvIFRvbSBUcm9tZXksIElhbiBMYW5jZSBUYXlsb3IgcmVwb3J0ZWQgdGhlcmUgYXJlIEMgY29tcGlsZXJzCisjIHRoYXQgd2lsbCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSByZWdhcmRsZXNzIG9mCisjIHRoZSBvdXRwdXQgZGlyZWN0b3J5LiAgVGh1cywgbWFraW5nIENXRCByZWFkLW9ubHkgd2lsbCBjYXVzZSB0aGlzIHRlc3QKKyMgdG8gZmFpbCwgZW5hYmxpbmcgbG9ja2luZyBvciBhdCBsZWFzdCB3YXJuaW5nIHRoZSB1c2VyIG5vdCB0byBkbyBwYXJhbGxlbAorIyBidWlsZHMuCitjaG1vZCAtdyAuCitzYXZlX0NGTEFHUz0iJENGTEFHUyIKK0NGTEFHUz0iJENGTEFHUyAtbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCitjb21waWxlcl9jX289bm8KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mzc2NTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj5vdXQvY29uZnRlc3QuZXJyOyB9ICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0OyB0aGVuCisgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICBpZiB0ZXN0IC1zIG91dC9jb25mdGVzdC5lcnI7IHRoZW4KKyAgICBsdF9jdl9jb21waWxlcl9jX289bm8KKyAgZWxzZQorICAgIGx0X2N2X2NvbXBpbGVyX2Nfbz15ZXMKKyAgZmkKK2Vsc2UKKyAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgY2F0IG91dC9jb25mdGVzdC5lcnIgMT4mNQorICBsdF9jdl9jb21waWxlcl9jX289bm8KK2ZpCitDRkxBR1M9IiRzYXZlX0NGTEFHUyIKK2NobW9kIHUrdyAuCiskcm0gY29uZnRlc3QqIG91dC8qCitybWRpciBvdXQKK2NkIC4uCitybWRpciBjb25mdGVzdAorJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisKK2ZpCisKK2NvbXBpbGVyX2Nfbz0kbHRfY3ZfY29tcGlsZXJfY19vCitlY2hvICIkYWNfdCIiJGNvbXBpbGVyX2NfbyIgMT4mNgorCitpZiB0ZXN0IHgiJGNvbXBpbGVyX2NfbyIgPSB4InllcyI7IHRoZW4KKyAgIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIHdyaXRlIHRvIGEgLmxvCisgIGVjaG8gJGFjX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLmxvIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozNzk0OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS5sbyIgPiY1CisgIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydsdF9jdl9jb21waWxlcl9vX2xvJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCisgIGx0X2N2X2NvbXBpbGVyX29fbG89bm8KKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYyAtbyBjb25mdGVzdC5sbyIKKyAgc2F2ZV9vYmpleHQ9IiRhY19vYmpleHQiCisgIGFjX29iamV4dD1sbworICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzODA1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CitpbnQgc29tZV92YXJpYWJsZSA9IDA7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzgxMjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICBsdF9jdl9jb21waWxlcl9vX2xvPW5vCisgICAgZWxzZQorICAgICAgbHRfY3ZfY29tcGlsZXJfb19sbz15ZXMKKyAgICBmaQorICAKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QqCisgIGFjX29iamV4dD0iJHNhdmVfb2JqZXh0IgorICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgCitmaQorCisgIGNvbXBpbGVyX29fbG89JGx0X2N2X2NvbXBpbGVyX29fbG8KKyAgZWNobyAiJGFjX3QiIiRjb21waWxlcl9vX2xvIiAxPiY2CitlbHNlCisgIGNvbXBpbGVyX29fbG89bm8KK2ZpCisKKyMgQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkbyBoYXJkIGxpbmtzIHRvIGxvY2sgc29tZSBmaWxlcyBpZiBuZWVkZWQKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRjb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBlY2hvICRhY19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM4NDM6IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CisgIGhhcmRfbGlua3M9eWVzCisgICRybSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIGVjaG8gIiRhY190IiIkaGFyZF9saW5rcyIgMT4mNgorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgMT4mMgorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIHRvIHNlZSBpZiBvcHRpb25zIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMgYXJlIHN1cHBvcnRlZCBieSBjb21waWxlcgorICBlY2hvICRhY19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Mzg2MjogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIC1jIGNvbmZ0ZXN0LiRhY19leHQiCisgIGNvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubworICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzODY4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CitpbnQgc29tZV92YXJpYWJsZSA9IDA7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mzg3NTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICBjb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KKyAgICBlbHNlCisgICAgICBjb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCisgICAgZmkKKyAgCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgZWNobyAiJGFjX3QiIiRjb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiIDE+JjYKKworICBpZiB0ZXN0ICIkY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA9ICJ5ZXMiOyB0aGVuCisgICAgbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMnCisgIGVsc2UKKyAgICBub19idWlsdGluX2ZsYWc9JyAtZm5vLWJ1aWx0aW4nCisgIGZpCitmaQorCisjIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzkwMjogY2hlY2tpbmcgd2hldGhlciB0aGUgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorCithbGxvd191bmRlZmluZWRfZmxhZz0KK25vX3VuZGVmaW5lZF9mbGFnPQorbmVlZF9saWJfcHJlZml4PXVua25vd24KK25lZWRfdmVyc2lvbj11bmtub3duCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworYXJjaGl2ZV9jbWRzPQorYXJjaGl2ZV9leHBzeW1fY21kcz0KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9CitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQordGhyZWFkX3NhZmVfZmxhZ19zcGVjPQoraGFyZGNvZGVfaW50b19saWJzPW5vCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KK2hhcmRjb2RlX2RpcmVjdD1ubworaGFyZGNvZGVfbWludXNfTD1ubworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorcnVucGF0aF92YXI9CitsaW5rX2FsbF9kZXBsaWJzPXVua25vd24KK2Fsd2F5c19leHBvcnRfc3ltYm9scz1ubworZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAoraW5jbHVkZV9leHBzeW1zPQorIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGVncmVwIHJlZ3VsYXIgZXhwcmVzc2lvbiBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorZXhjbHVkZV9leHBzeW1zPSJfR0xPQkFMX09GRlNFVF9UQUJMRV8iCisjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCitleHRyYWN0X2V4cHN5bXNfY21kcz0KKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgIHdpdGhfZ251X2xkPW5vCisgIGZpCisgIDs7CitvcGVuYnNkKikKKyAgd2l0aF9nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKKworbGRfc2hsaWJzPXllcworaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICB3bGFyYz0nJHt3bH0nCisKKyAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyogfCBhaXg0KiB8IGFpeDUqKQorICAgICMgT24gQUlYLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICMgTm90ZTpDaGVjayBHTlUgbGlua2VyIG9uIEFJWCA1LUlBNjQgd2hlbi9pZiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4KKyAgICBsZF9zaGxpYnM9bm8KKyAgICBjYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKworRU9GCisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICBhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisKKyAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cworICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCisgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCisgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKKyAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4gdXNlCisgICAgIyB0aGVtLgorICAgIGxkX3NobGlicz1ubworICAgIDs7CisKKyAgYmVvcyopCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZWdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKyAgICAgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgIGVsc2UKKyAgICAgIGxkX3NobGlicz1ubworICAgIGZpCisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworCisgICAgZXh0cmFjdF9leHBzeW1zX2NtZHM9J3Rlc3QgLWYgJG91dHB1dF9vYmpkaXIvaW1wZ2VuLmMgfHwgXAorICAgICAgc2VkIC1lICIvXiMgXC9cKiBpbXBnZW5cLmMgc3RhcnRzIGhlcmUgXCpcLy8sL14jIFwvXCogaW1wZ2VuLmMgZW5kcyBoZXJlIFwqXC8vIHsgcy9eIyAvLztzL14jICokLy87IHA7IH0iIC1lIGQgPCAkJycwID4gJG91dHB1dF9vYmpkaXIvaW1wZ2VuLmN+CisgICAgICB0ZXN0IC1mICRvdXRwdXRfb2JqZGlyL2ltcGdlbi5leGUgfHwgKGNkICRvdXRwdXRfb2JqZGlyICYmIFwKKyAgICAgIGlmIHRlc3QgIngkSE9TVF9DQyIgIT0gIngiIDsgdGhlbiAkSE9TVF9DQyAtbyBpbXBnZW4gaW1wZ2VuLmMgOyBcCisgICAgICBlbHNlICRDQyAtbyBpbXBnZW4gaW1wZ2VuLmMgOyBmaSl+CisgICAgICAkb3V0cHV0X29iamRpci9pbXBnZW4gJGRpci8kc29yb290ID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYnCisKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0nJERMTFRPT0wgLS1hcz0kQVMgLS1kbGxuYW1lICRzb25hbWUgLS1kZWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYgLS1vdXRwdXQtbGliICRvdXRwdXRfb2JqZGlyLyRuZXdsaWInCisKKyAgICAjIGN5Z3dpbiBhbmQgbWluZ3cgZGxscyBoYXZlIGRpZmZlcmVudCBlbnRyeSBwb2ludHMgYW5kIHNldHMgb2Ygc3ltYm9scworICAgICMgdG8gZXhjbHVkZS4KKyAgICAjIEZJWE1FOiB3aGF0IGFib3V0IHZhbHVlcyBmb3IgTVNWQz8KKyAgICBkbGxfZW50cnk9X19jeWd3aW5fZGxsX2VudHJ5QDEyCisgICAgZGxsX2V4Y2x1ZGVfc3ltYm9scz1EbGxNYWluQDEyLF9jeWd3aW5fZGxsX2VudHJ5QDEyLF9jeWd3aW5fbm9uY3lnd2luX2RsbF9lbnRyeUAxMn4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqKQorICAgICAgIyBtaW5ndyB2YWx1ZXMKKyAgICAgIGRsbF9lbnRyeT1fRGxsTWFpbkNSVFN0YXJ0dXBAMTIKKyAgICAgIGRsbF9leGNsdWRlX3N5bWJvbHM9RGxsTWFpbkAxMixEbGxNYWluQ1JUU3RhcnR1cEAxMixEbGxFbnRyeVBvaW50QDEyfgorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIG1pbmd3IGFuZCBjeWd3aW4gZGlmZmVyLCBhbmQgaXQncyBzaW1wbGVzdCB0byBqdXN0IGV4Y2x1ZGUgdGhlIHVuaW9uCisgICAgIyBvZiB0aGUgdHdvIHN5bWJvbCBzZXRzLgorICAgIGRsbF9leGNsdWRlX3N5bWJvbHM9RGxsTWFpbkAxMixfY3lnd2luX2RsbF9lbnRyeUAxMixfY3lnd2luX25vbmN5Z3dpbl9kbGxfZW50cnlAMTIsRGxsTWFpbkNSVFN0YXJ0dXBAMTIsRGxsRW50cnlQb2ludEAxMgorCisgICAgIyByZWNlbnQgY3lnd2luIGFuZCBtaW5ndyBzeXN0ZW1zIHN1cHBseSBhIHN0dWIgRGxsTWFpbiB3aGljaCB0aGUgdXNlcgorICAgICMgY2FuIG92ZXJyaWRlLCBidXQgb24gb2xkZXIgc3lzdGVtcyB3ZSBoYXZlIHRvIHN1cHBseSBvbmUgKGluIGx0ZGxsLmMpCisgICAgaWYgdGVzdCAieCRsdF9jdl9uZWVkX2RsbG1haW4iID0gInh5ZXMiOyB0aGVuCisgICAgICBsdGRsbF9vYmo9JyRvdXRwdXRfb2JqZGlyLyRzb25hbWUtbHRkbGwuJyIkYWNfb2JqZXh0ICIKKyAgICAgIGx0ZGxsX2NtZHM9J3Rlc3QgLWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1sdGRsbC5jIHx8IHNlZCAtZSAiL14jIFwvXCogbHRkbGxcLmMgc3RhcnRzIGhlcmUgXCpcLy8sL14jIFwvXCogbHRkbGwuYyBlbmRzIGhlcmUgXCpcLy8geyBzL14jIC8vOyBwOyB9IiAtZSBkIDwgJCcnMCA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtbHRkbGwuY34KKwl0ZXN0IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtbHRkbGwuJGFjX29iamV4dCB8fCAoY2QgJG91dHB1dF9vYmpkaXIgJiYgJENDIC1jICRzb25hbWUtbHRkbGwuYyl+JworICAgIGVsc2UKKyAgICAgIGx0ZGxsX29iaj0KKyAgICAgIGx0ZGxsX2NtZHM9CisgICAgZmkKKworICAgICMgRXh0cmFjdCB0aGUgc3ltYm9sIGV4cG9ydCBsaXN0IGZyb20gYW4gYC0tZXhwb3J0LWFsbCcgZGVmIGZpbGUsCisgICAgIyB0aGVuIHJlZ2VuZXJhdGUgdGhlIGRlZiBmaWxlIGZyb20gdGhlIHN5bWJvbCBleHBvcnQgbGlzdCwgc28gdGhhdAorICAgICMgdGhlIGNvbXBpbGVkIGRsbCBvbmx5IGV4cG9ydHMgdGhlIHN5bWJvbCBleHBvcnQgbGlzdC4KKyAgICAjIEJlIGNhcmVmdWwgbm90IHRvIHN0cmlwIHRoZSBEQVRBIHRhZyBsZWZ0IGJlIG5ld2VyIGRsbHRvb2xzLgorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9IiRsdGRsbF9jbWRzIicKKyAgICAgICRETExUT09MIC0tZXhwb3J0LWFsbCAtLWV4Y2x1ZGUtc3ltYm9scyAnJGRsbF9leGNsdWRlX3N5bWJvbHMnIC0tb3V0cHV0LWRlZiAkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiAnJGx0ZGxsX29iaickbGlib2JqcyAkY29udmVuaWVuY2V+CisgICAgICBzZWQgLWUgIjEsL0VYUE9SVFMvZCIgLWUgInMvIEAgWzAtOV0qLy8iIC1lICJzLyAqOy4qJC8vIiA8ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmID4gJGV4cG9ydF9zeW1ib2xzJworCisgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpcy4KKyAgICAjIElmIERBVEEgdGFncyBmcm9tIGEgcmVjZW50IGRsbHRvb2wgYXJlIHByZXNlbnQsIGhvbm91ciB0aGVtIQorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgc2VkIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwljcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWY7CisgICAgICBlbHNlCisJZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWY7CisJX2x0X2hpbnQ9MTsKKwljYXQgJGV4cG9ydF9zeW1ib2xzIHwgd2hpbGUgcmVhZCBzeW1ib2w7IGRvCisJIHNldCBkdW1teSBcJHN5bWJvbDsKKwkgY2FzZSBcJCMgaW4KKwkgICAyKSBlY2hvICIgICBcJDIgQCBcJF9sdF9oaW50IDsgIiA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZjs7CisJICAgNCkgZWNobyAiICAgXCQyIFwkMyBcJDQgOyAiID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmOyBfbHRfaGludD1gZXhwciBcJF9sdF9oaW50IC0gMWA7OworCSAgICopIGVjaG8gIiAgICAgXCQyIEAgXCRfbHRfaGludCBcJDMgOyAiID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmOzsKKwkgZXNhYzsKKwkgX2x0X2hpbnQ9YGV4cHIgMSArIFwkX2x0X2hpbnRgOworCWRvbmU7CisgICAgICBmaX4KKyAgICAgICciJGx0ZGxsX2NtZHMiJworICAgICAgJENDIC1XbCwtLWJhc2UtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLWJhc2UgJyRsdF9jdl9jY19kbGxfc3dpdGNoJyAtV2wsLWUsJyRkbGxfZW50cnknIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJyRsdGRsbF9vYmonJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfgorICAgICAgJERMTFRPT0wgLS1hcz0kQVMgLS1kbGxuYW1lICRzb25hbWUgLS1leGNsdWRlLXN5bWJvbHMgJyRkbGxfZXhjbHVkZV9zeW1ib2xzJyAtLWRlZiAkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiAtLWJhc2UtZmlsZSAkb3V0cHV0X29iamRpci8kc29uYW1lLWJhc2UgLS1vdXRwdXQtZXhwICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZXhwfgorICAgICAgJENDIC1XbCwtLWJhc2UtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLWJhc2UgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1leHAgJyRsdF9jdl9jY19kbGxfc3dpdGNoJyAtV2wsLWUsJyRkbGxfZW50cnknIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJyRsdGRsbF9vYmonJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfgorICAgICAgJERMTFRPT0wgLS1hcz0kQVMgLS1kbGxuYW1lICRzb25hbWUgLS1leGNsdWRlLXN5bWJvbHMgJyRkbGxfZXhjbHVkZV9zeW1ib2xzJyAtLWRlZiAkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiAtLWJhc2UtZmlsZSAkb3V0cHV0X29iamRpci8kc29uYW1lLWJhc2UgLS1vdXRwdXQtZXhwICRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZXhwIC0tb3V0cHV0LWxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kbGwuYX4KKyAgICAgICRDQyAkb3V0cHV0X29iamRpci8kc29uYW1lLWV4cCAnJGx0X2N2X2NjX2RsbF9zd2l0Y2gnIC1XbCwtZSwnJGRsbF9lbnRyeScgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAnJGx0ZGxsX29iaickbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgOzsKKworICBuZXRic2QqKQorICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAgICAgIHdsYXJjPQorICAgIGVsc2UKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW5vZGVmYXVsdGxpYnMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAtbm9kZWZhdWx0bGlicyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgc29sYXJpcyogfCBzeXN2NSopCisgICAgaWYgJExEIC12IDI+JjEgfCBlZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGNhdCA8PEVPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitFT0YKKyAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGVncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICBlbHNlCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICBmaQorICAgIDs7CisKKyAgc3Vub3M0KikKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgd2xhcmM9CisgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICA7OworCisgICopCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZWdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgIGVsc2UKKyAgICAgIGxkX3NobGlicz1ubworICAgIGZpCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0geWVzOyB0aGVuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgICAjIGRsbHRvb2wgZG9lc24ndCB1bmRlcnN0YW5kIC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICAgIDs7CisgICAgKikKKyAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGVncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgZWxzZQorCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorZWxzZQorICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKyAgICAgICMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorICAgICAgIyBicm9rZW4gY29sbGVjdDIuCisgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICBmaQorICAgIDs7CisKKyAgYWl4NCogfCBhaXg1KikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgIGVsc2UKKyAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXg1KikKKwlmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGNhc2UgJGxkX2ZsYWcgaW4KKwkgICotYnJ0bCopCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICA7OworCSAgZXNhYworCWRvbmUKKyAgICAgIGVzYWMKKworICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKyAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICBmaQorCisgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICBhcmNoaXZlX2NtZHM9JycKKyAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorCWNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwlpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisJICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzCisJZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKwlmaQorICAgICAgZXNhYworCisgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKyAgICBlbHNlCisgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwllbHNlCisJICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCWZpCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgY2FuIGRvIHN0cmFuZ2UgdGhpbmdzLCBzbyBpdCBpcyBiZXR0ZXIgdG8KKyAgICAjIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOi91c3IvbGliOi9saWInCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRub19lbnRyeV9mbGFnIFwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwlhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgorCWFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS1oJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRub19lbnRyeV9mbGFnIFwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgIGVsc2UKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibm9saWJwYXRoICR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tYmVyb2snCisJIyBUaGlzIGlzIGEgYml0IHN0cmFuZ2UsIGJ1dCBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMKKwkjIGl0J3Mgc2hhcmVkIGxpYnJhcmllcy4KKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JG5vX2VudHJ5X2ZsYWcgXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIicgfiRBUiAtY3JsbyAkb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb2JqZGlyLyRzb25hbWUnCisgICAgICBmaQorICAgIGZpCisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICBhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgorICAgIGxkX3NobGlicz1ubworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKyAgICBsaWJleHQ9bGliCisgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCBzZWQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgL09VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCisgICAgOzsKKworICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nLXVuZGVmaW5lZCBzdXBwcmVzcycKKyAgICAgIDs7CisgICAgKikgIyBEYXJ3aW4gMS4zIG9uCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nLWZsYXRfbmFtZXNwYWNlIC11bmRlZmluZWQgc3VwcHJlc3MnCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEZJWE1FOiBSZWx5aW5nIG9uIHBvc2l4eSAkKCkgd2lsbCBjYXVzZSBwcm9ibGVtcyBmb3IKKyAgICAjICAgICAgICBjcm9zcy1jb21waWxhdGlvbiwgYnV0IHVuZm9ydHVuYXRlbHkgdGhlIGVjaG8gdGVzdHMgZG8gbm90CisgICAgIyAgICAgICAgeWV0IGRldGVjdCB6c2ggZWNobydzIHJlbW92YWwgb2YgXCBlc2NhcGVzLiAgQWxzbyB6c2ggbWFuZ2xlcworICAgICMJICAgICBgIicgcXVvdGVzIGlmIHdlIHB1dCB0aGVtIGluIGhlcmUuLi4gc28gZG9uJ3QhCisgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyAke2xpYn0tbWFzdGVyLm8gJGxpYm9ianMgJiYgJENDICQodGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAtYnVuZGxlIHx8IGVjaG8gLWR5bmFtaWNsaWIpICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICR7bGlifS1tYXN0ZXIubyAkZGVwbGlicyRsaW5rZXJfZmxhZ3MgJCh0ZXN0IC4kbW9kdWxlICE9IC55ZXMgJiYgZWNobyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcpJworICAgICMgV2UgbmVlZCB0byBhZGQgJ18nIHRvIHRoZSBzeW1ib2xzIGluICRleHBvcnRfc3ltYm9scyBmaXJzdAorICAgICNhcmNoaXZlX2V4cHN5bV9jbWRzPSIkYXJjaGl2ZV9jbWRzIicgJiYgc3RyaXAgLXMgJGV4cG9ydF9zeW1ib2xzJworICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy1hbGxfbG9hZCAkY29udmVuaWVuY2UnCisgICAgOzsKKworICBmcmVlYnNkMSopCisgICAgbGRfc2hsaWJzPW5vCisgICAgOzsKKworICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAjIGV4dHJhIHNwYWNlKS4KKyAgZnJlZWJzZDIuMiopCisgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIDs7CisKKyAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICBmcmVlYnNkMiopCisgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICBoYXJkY29kZV9taW51c19MPXllcworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICA7OworCisgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgZnJlZWJzZCopCisgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICA7OworCisgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBocHV4OSopIGFyY2hpdmVfY21kcz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInIDs7CisgICAgKikgYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyA7OworICAgIGVzYWMKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgaGFyZGNvZGVfbWludXNfTD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILCBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCSAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICA7OworCisgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGVsc2UKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworICAgIGZpCisgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICA7OworCisgIG5ldGJzZCopCisgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgIGVsc2UKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgZmkKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICA7OworCisgIG5ld3NvczYpCisgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgOzsKKworICBvcGVuYnNkKikKKyAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworICAgIGVsc2UKKyAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKwlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworCisgIG9zMiopCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICBhcmNoaXZlX2NtZHM9JyRlY2hvICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgOzsKKworICBvc2YzKikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICBlbHNlCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgIGZpCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgIDs7CisKKyAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBlbHNlCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIi1leHBvcnRlZF9zeW1ib2wgIiA+PiAkbGliLmV4cDsgZWNobyAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKyAgICAgICRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCisKKyAgICAgICNCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgZmkKKyAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICA7OworCisgIHNjbzMuMnY1KikKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBoYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJleHBvcnQnCisgICAgOzsKKworICBzb2xhcmlzKikKKyAgICAjIGdjYyAtLXZlcnNpb24gPCAzLjAgd2l0aG91dCBiaW51dGlscyBjYW5ub3QgY3JlYXRlIHNlbGYgY29udGFpbmVkCisgICAgIyBzaGFyZWQgbGlicmFyaWVzIHJlbGlhYmx5LCByZXF1aXJpbmcgbGliZ2NjLmEgdG8gcmVzb2x2ZSBzb21lIG9mCisgICAgIyB0aGUgb2JqZWN0IHN5bWJvbHMgZ2VuZXJhdGVkIGluIHNvbWUgY2FzZXMuICBMaWJyYXJpZXMgdGhhdCB1c2UKKyAgICAjIGFzc2VydCBuZWVkIGxpYmdjYy5hIHRvIHJlc29sdmUgX19lcHJpbnRmLCBmb3IgZXhhbXBsZS4gIExpbmtpbmcKKyAgICAjIGEgY29weSBvZiBsaWJnY2MuYSBpbnRvIGV2ZXJ5IHNoYXJlZCBsaWJyYXJ5IHRvIGd1YXJhbnRlZSByZXNvbHZpbmcKKyAgICAjIHN1Y2ggc3ltYm9scyBjYXVzZXMgb3RoZXIgcHJvYmxlbXM6ICBBY2NvcmRpbmcgdG8gVGltIFZhbiBIb2xkZXIKKyAgICAjIDx0aW0udmFuLmhvbGRlckBwYW5kb3JhLmJlPiwgQysrIGxpYnJhcmllcyBlbmQgdXAgd2l0aCBhIHNlcGFyYXRlCisgICAgIyAodG8gdGhlIGFwcGxpY2F0aW9uKSBleGNlcHRpb24gc3RhY2sgZm9yIG9uZSB0aGluZy4KKyAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgYCRDQyAtLXZlcnNpb24gMj4vZGV2L251bGxgIGluCisgICAgICBbMTJdLiopCisJY2F0IDw8RU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIEdDQyBlYXJsaWVyIHRoYW4gdmVyc2lvbiAzLjAgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNlbGYgY29udGFpbmVkIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLCB3aXRob3V0CisqKiogaW50cm9kdWNpbmcgYSBkZXBlbmRlbmN5IG9uIGxpYmdjYy5hLiAgVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZworKioqIC1uby11bmRlZmluZWQgc3VwcG9ydCwgd2hpY2ggd2lsbCBhdCBsZWFzdCBhbGxvdyB5b3UgdG8gYnVpbGQgc2hhcmVkCisqKiogbGlicmFyaWVzLiAgSG93ZXZlciwgeW91IG1heSBmaW5kIHRoYXQgd2hlbiB5b3UgbGluayBzdWNoIGxpYnJhcmllcworKioqIGludG8gYW4gYXBwbGljYXRpb24gd2l0aG91dCB1c2luZyBHQ0MsIHlvdSBoYXZlIHRvIG1hbnVhbGx5IGFkZAorKioqIFxgZ2NjIC0tcHJpbnQtbGliZ2NjLWZpbGUtbmFtZVxgIHRvIHRoZSBsaW5rIGNvbW1hbmQuICBXZSB1cmdlIHlvdSB0bworKioqIHVwZ3JhZGUgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIEdDQy4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIHJlYnVpbGQgeW91cgorKioqIGN1cnJlbnQgR0NDIHRvIHVzZSB0aGUgR05VIGxpbmtlciBmcm9tIEdOVSBiaW51dGlscyAyLjkuMSBvciBuZXdlci4KKworRU9GCisgICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPQorCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICAjICRDQyAtc2hhcmVkIHdpdGhvdXQgR05VIGxkIHdpbGwgbm90IGNyZWF0ZSBhIGxpYnJhcnkgZnJvbSBDKysKKyAgICAjIG9iamVjdCBmaWxlcyBhbmQgYSBzdGF0aWMgbGlic3RkYysrLCBiZXR0ZXIgYXZvaWQgaXQgYnkgbm93CisgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworICAgICopICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcgOzsKKyAgICBlc2FjCisgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICA7OworCisgIHN1bm9zNCopCisgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorICAgICAgIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworICAgICAgIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgZWxzZQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgIGZpCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICBoYXJkY29kZV9taW51c19MPXllcworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICA7OworCisgIHN5c3Y0KQorICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgICBzbmkpCisgICAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworICAgICAgICA7OworICAgICAgc2llbWVucykKKyAgICAgICAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisgICAgICAgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKyAgICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgICByZWxvYWRfY21kcz0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICA7OworICAgICAgbW90b3JvbGEpCisgICAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIDs7CisKKyAgc3lzdjQuMyopCisgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nLUJleHBvcnQnCisgICAgOzsKKworICBzeXN2NSopCisgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiB0ZXh0JworICAgICMgJENDIC1zaGFyZWQgd2l0aG91dCBHTlUgbGQgd2lsbCBub3QgY3JlYXRlIGEgbGlicmFyeSBmcm9tIEMrKworICAgICMgb2JqZWN0IGZpbGVzIGFuZCBhIHN0YXRpYyBsaWJzdGRjKyssIGJldHRlciBhdm9pZCBpdCBieSBub3cKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgOzsKKworICB1dHM0KikKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIDs7CisKKyAgZGd1eCopCisgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICA7OworCisgIHN5c3Y0Kk1QKikKKyAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICBoYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKyAgICAgIGxkX3NobGlicz15ZXMKKyAgICBmaQorICAgIDs7CisKKyAgc3lzdjQuMnV3MiopCisgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICBoYXJkY29kZV9taW51c19MPW5vCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgIGhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgOzsKKworICBzeXN2NXV3NyogfCB1bml4d2FyZTcqKQorICAgIG5vX3VuZGVmaW5lZF9mbGFnPScke3dsfS16ICR7d2x9dGV4dCcKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICBlbHNlCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICBmaQorICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgOzsKKworICAqKQorICAgIGxkX3NobGlicz1ubworICAgIDs7CisgIGVzYWMKK2ZpCitlY2hvICIkYWNfdCIiJGxkX3NobGlicyIgMT4mNgordGVzdCAiJGxkX3NobGlicyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgorZWNobyAkYWNfbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDYwMTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CitoYXJkY29kZV9hY3Rpb249CitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwgXAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiICE9IG5vICYmCisgICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgaGFyZGNvZGVfYWN0aW9uPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBoYXJkY29kZV9hY3Rpb249aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIGhhcmRjb2RlX2FjdGlvbj11bnN1cHBvcnRlZAorZmkKK2VjaG8gIiRhY190IiIkaGFyZGNvZGVfYWN0aW9uIiAxPiY2CisKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0NjI5OiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8IGdyZXAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorCisjIFBPUlRNRSBGaWxsIGluIHlvdXIgbGQuc28gY2hhcmFjdGVyaXN0aWNzCitlY2hvICRhY19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQ2NDM6IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9Citwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvcicKKyAgOzsKKworYWl4NCogfCBhaXg1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICRsaWJuYW1lLnNvJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQorCWlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgICBlY2hvICcgeWVzICcKKwkgICAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwkgIDoKKwllbHNlCisJICBjYW5fYnVpbGRfc2hhcmVkPW5vCisJZmkKKwk7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuCisgICAgIyBub3QgaGFyZGNvZGUgY29ycmVjdCBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4KKyAgICAjIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8gY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuCisgICAgIyBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3IgJGxpYm5hbWUuc28nCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCithbWlnYW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICIoY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSkiOyAoY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSkgfHwgZXhpdCAxOyBkb25lJworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LnNvJworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGk0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvciAkbGlibmFtZS5zbycKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9LXJkeW5hbWljCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8IHNlZCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0uZGxsJworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2RscGF0aD1gYmFzaCAyPiYxIC1jICdcJycuICRkaXIvJHtmaWxlfWk7ZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nIC5saWJzLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YGJhc2ggMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkcm0gXCRkbHBhdGgnCisgICAgOzsKKyAgeWVzLG1pbmd3KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgc2VkIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fS5kbGwnCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgc2VkIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLzsvIC9nIiAtZSAicyw9LywvLGciYAorICAgIDs7CisgIHllcyxwdzMyKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCBzZWQgLWUgJ3MvLi8tL2cnYCR7dmVyc3VmZml4fS5kbGwnCisgICAgOzsKKyAgKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgc2VkIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fS5kbGwgJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgICMgRklYTUU6IFJlbHlpbmcgb24gcG9zaXh5ICQoKSB3aWxsIGNhdXNlIHByb2JsZW1zIGZvcgorICAjICAgICAgICBjcm9zcy1jb21waWxhdGlvbiwgYnV0IHVuZm9ydHVuYXRlbHkgdGhlIGVjaG8gdGVzdHMgZG8gbm90CisgICMgICAgICAgIHlldCBkZXRlY3QgenNoIGVjaG8ncyByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fS4kKHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gc28gfHwgZWNobyBkeWxpYikgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfS4kKHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gc28gfHwgZWNobyBkeWxpYikgJHtsaWJuYW1lfS4kKHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gc28gfHwgZWNobyBkeWxpYiknCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9LiQodGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyBzbyB8fCBlY2hvIGR5bGliKScKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QxKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworZnJlZWJzZCopCisgIG9iamZvcm1hdD1gdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQgJiYgL3Vzci9iaW4vb2JqZm9ybWF0IHx8IGVjaG8gYW91dGAKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyAkbGlibmFtZS5zbycKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICRsaWJuYW1lLnNvJHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgICopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28ke21ham9yfSAke2xpYm5hbWV9LnNvJworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNsJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbCRtYWpvciAkbGlibmFtZS5zbCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNsJG1ham9yJworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikgICAgICAgICAgdmVyc2lvbl90eXBlPWlyaXggOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28gJGxpYm5hbWUuc28nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAiKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICIpIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgIikgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eC1nbnVvbGRsZCogfCBsaW51eC1nbnVhb3V0KiB8IGxpbnV4LWdudWNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eC1nbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvciAkbGlibmFtZS5zbycKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKworICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcgKG11bHRpbGliIExpbnV4IHg4Nl82NCBoYWNrKS4KKyAgbGlic3VmZj0KKyAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICB4ODZfNjQqfHMzOTB4KikKKyAgICBlY2hvICcjbGluZSA0OTAyICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ5MDM6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICo2NC1iaXQqKQorICAgICAgICBsaWJzdWZmPTY0CisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBybSAtcmYgY29uZnRlc3QqCisgICAgOzsKKyAgKikKKyAgICA7OworICBlc2FjCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliJHtsaWJzdWZmfSAvdXNyL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiR7bGlic3VmZn0gL3Vzci9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0uc28kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28gJHtsaWJuYW1lfS5zbycKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3IgJGxpYm5hbWUuc28nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9LnNvJHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvciAkbGlibmFtZS5zbycKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworc2NvMy4ydjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3IgJGxpYm5hbWUuc28nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvciAkbGlibmFtZS5zbycKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0uc28kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvciAkbGlibmFtZS5zbycKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICRsaWJuYW1lLnNvJworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvciAkbGlibmFtZS5zbycKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLnNvLiR2ZXJzdWZmaXggJGxpYm5hbWUuc28uJG1ham9yICRsaWJuYW1lLnNvJworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZS5zby4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK2VjaG8gIiRhY190IiIkZHluYW1pY19saW5rZXIiIDE+JjYKK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyMgUmVwb3J0IHRoZSBmaW5hbCBjb25zZXF1ZW5jZXMuCitlY2hvICRhY19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjUwNzQ6IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CitlY2hvICIkYWNfdCIiJGNhbl9idWlsZF9zaGFyZWQiIDE+JjYKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MDc4OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQordGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorY2FzZSAiJGhvc3Rfb3MiIGluCithaXgzKikKKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICBmaQorICA7OworCithaXg0KikKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgIGZpCisgIDs7Citlc2FjCitlY2hvICIkYWNfdCIiJGVuYWJsZV9zaGFyZWQiIDE+JjYKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MTAxOiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCit0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKK2VjaG8gIiRhY190IiIkZW5hYmxlX3N0YXRpYyIgMT4mNgorCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluazsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICA7OworCisgICopCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MTQyOiBjaGVja2luZyBmb3Igc2hsX2xvYWQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfc2hsX2xvYWQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1MTQ3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHNobF9sb2FkKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgc2hsX2xvYWQoKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9zaGxfbG9hZCkgfHwgZGVmaW5lZCAoX19zdHViX19fc2hsX2xvYWQpCitjaG9rZSBtZQorI2Vsc2UKK3NobF9sb2FkKCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjUxNzA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfc2hsX2xvYWQ9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX3NobF9sb2FkPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18nc2hsX2xvYWRgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitlY2hvICRhY19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjUxODg6IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CithY19saWJfdmFyPWBlY2hvIGRsZCdfJ3NobF9sb2FkIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1MTk2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgc2hsX2xvYWQoKTsKKworaW50IG1haW4oKSB7CitzaGxfbG9hZCgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTIwNzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1kbGQiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTIyNjogY2hlY2tpbmcgZm9yIGRsb3BlbiIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19kbG9wZW4nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1MjMxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGRsb3BlbigpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGRsb3BlbigpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX2Rsb3BlbikgfHwgZGVmaW5lZCAoX19zdHViX19fZGxvcGVuKQorY2hva2UgbWUKKyNlbHNlCitkbG9wZW4oKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTI1NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19kbG9wZW49eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX2Rsb3Blbj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ2Rsb3BlbmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjUyNzI6IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CithY19saWJfdmFyPWBlY2hvIGRsJ18nZGxvcGVuIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDUyODAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBkbG9wZW4oKTsKKworaW50IG1haW4oKSB7CitkbG9wZW4oKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjUyOTE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTMxMDogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQorYWNfbGliX3Zhcj1gZWNobyBzdmxkJ18nZGxvcGVuIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbHN2bGQgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTMxOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGRsb3BlbigpOworCitpbnQgbWFpbigpIHsKK2Rsb3BlbigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTMyOTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MzQ4OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorYWNfbGliX3Zhcj1gZWNobyBkbGQnXydkbGRfbGluayB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxkbGQgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTM1NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGRsZF9saW5rKCk7CisKK2ludCBtYWluKCkgeworZGxkX2xpbmsoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjUzNjc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGx0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItZGxkIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKwkgICAgICAKK2ZpCisKKwkgICAgCitmaQorCisJICAKK2ZpCisKKwkKK2ZpCisKKyAgICAgIAorZmkKKworICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICAgICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisKKyAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgorCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU0MjM6IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydsdF9jdl9kbG9wZW5fc2VsZicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MKK2Vsc2UKKyAgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDU0MzMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7CisjZW5kaWYKKwordm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKworICAgIGV4aXQgKHN0YXR1cyk7Cit9CitFT0YKKyAgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1NDk0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKKyAgICAgIHgkbHRfdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGY9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKyAgICAKK2ZpCisKK2VjaG8gIiRhY190IiIkbHRfY3ZfZGxvcGVuX3NlbGYiIDE+JjYKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgTERGTEFHUz0iJExERkxBR1MgJGxpbmtfc3RhdGljX2ZsYWciCisgICAgICBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTUxNzogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCitlbHNlCisgICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1NTI3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOworI2VuZGlmCisKK3ZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisKKyAgICBleGl0IChzdGF0dXMpOworfQorRU9GCisgIGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTU4ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKKworICAgICAgCitmaQorCitlY2hvICIkYWNfdCIiJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgMT4mNgorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKKworCitpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisgIConficqKQorICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICA7OworICAnJENDICcqKQorICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU2Mzc6IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CisgICAgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgJHJtIGNvbmZ0ZXN0KgorICAgIGVjaG8gJ3N0YXRpYyBpbnQgZHVtbXk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgIGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTY0NDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICAgICAgc29uYW1lPWNvbmZ0ZXN0CisgICAgICBsaWI9Y29uZnRlc3QKKyAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorICAgICAgZGVwbGlicz0KKyAgICAgIHdsPSRsdF9jdl9wcm9nX2NjX3dsCisgICAgICBjb21waWxlcl9mbGFncz0tdgorICAgICAgbGlua2VyX2ZsYWdzPS12CisgICAgICB2ZXJzdHJpbmc9CisgICAgICBvdXRwdXRfb2JqZGlyPS4KKyAgICAgIGxpYm5hbWU9Y29uZnRlc3QKKyAgICAgIHNhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0KKyAgICAgIGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTY1NzogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIikgMT4mNTsgKGV2YWwgJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1OyB9CisgICAgICB0aGVuCisJbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgIGVsc2UKKwlsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKyAgICAgIGZpCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0kc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworICAgIGVsc2UKKyAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgIGZpCisgICAgJHJtIGNvbmZ0ZXN0KgorZmkKKworICAgIGVjaG8gIiRhY190IiIkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiIDE+JjYKKyAgICA7OworICBlc2FjCitmaQorbmVlZF9sYz0ke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjLXllc30KKworIyBUaGUgc2Vjb25kIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKKyMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCisjIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKKyMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgoraWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KKyAgOgorZWxzZQorICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCisgICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQorICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCisgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKK2ZpCisKK2lmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCisgIHRyYXAgIiRybSBcIiR7b2ZpbGV9VFwiOyBleGl0IDEiIDEgMiAxNQorICAkcm0gLWYgIiR7b2ZpbGV9VCIKKworICBlY2hvIGNyZWF0aW5nICRvZmlsZQorCisgICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKKyAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCisgICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KKyAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIFNFRCBcCisgICAgQVIgQVJfRkxBR1MgQ0MgTEQgTE5fUyBOTSBTSEVMTCBcCisgICAgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgd2wgXAorICAgIHBpY19mbGFnIGxpbmtfc3RhdGljX2ZsYWcgbm9fYnVpbHRpbl9mbGFnIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCisgICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIGxpYm5hbWVfc3BlYyBcCisgICAgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIFwKKyAgICBSQU5MSUIgb2xkX2FyY2hpdmVfY21kcyBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIG9sZF9wb3N0aW5zdGFsbF9jbWRzIFwKKyAgICBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIGFyY2hpdmVfY21kcyBhcmNoaXZlX2V4cHN5bV9jbWRzIHBvc3RpbnN0YWxsX2NtZHMgXAorICAgIHBvc3R1bmluc3RhbGxfY21kcyBleHRyYWN0X2V4cHN5bXNfY21kcyBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyBcCisgICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIGFsbG93X3VuZGVmaW5lZF9mbGFnIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyAgICBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBnbG9iYWxfc3ltYm9sX3BpcGUgZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgICAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yICBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKKyAgICBjb21waWxlcl9jX28gY29tcGlsZXJfb19sbyBuZWVkX2xvY2tzIGV4Y2x1ZGVfZXhwc3ltcyBpbmNsdWRlX2V4cHN5bXM7IGRvCisKKyAgICBjYXNlICR2YXIgaW4KKyAgICByZWxvYWRfY21kcyB8IG9sZF9hcmNoaXZlX2NtZHMgfCBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIHwgXAorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzIHwgYXJjaGl2ZV9jbWRzIHwgYXJjaGl2ZV9leHBzeW1fY21kcyB8IFwKKyAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIHwgXAorICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCisgICAgZmluaXNoX2NtZHMgfCBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKKyAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KKyAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIGNhdCA8PF9fRU9GX18gPiAiJHtvZmlsZX1UIgorIyEgJFNIRUxMCisKKyMgYCRlY2hvICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QKQorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgQSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iJHtTRUR9IC1lIHMvXlgvLyIKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KK2lmIHRlc3QgIlhcJHtDRFBBVEgrc2V0fSIgPSBYc2V0OyB0aGVuIENEUEFUSD06OyBleHBvcnQgQ0RQQVRIOyBmaQorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSRsdF9TSEVMTAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRuZWVkX2xjCisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAorCisjIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KK2VjaG89JGx0X2VjaG8KKworIyBUaGUgYXJjaGl2ZXIuCitBUj0kbHRfQVIKK0FSX0ZMQUdTPSRsdF9BUl9GTEFHUworCisjIFRoZSBkZWZhdWx0IEMgY29tcGlsZXIuCitDQz0kbHRfQ0MKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQworCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTEQKKworIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KK05NPSRsdF9OTQorCisjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCitTVFJJUD0kU1RSSVAKKworIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgorTUFHSUNfQ01EPSRNQUdJQ19DTUQKKworIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSIkRExMVE9PTCIKKworIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KK09CSkRVTVA9IiRPQkpEVU1QIgorCisjIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCitBUz0iJEFTIgorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF93bAorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0iJGFjX29iamV4dCIKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgorZXhlZXh0PSIkZXhlZXh0IgorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9waWNfZmxhZworcGljX21vZGU9JHBpY19tb2RlCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9jb21waWxlcl9jX28KKworIyBDYW4gd2Ugd3JpdGUgZGlyZWN0bHkgdG8gYSAubG8gPworY29tcGlsZXJfb19sbz0kbHRfY29tcGlsZXJfb19sbworCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uID8KK25lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKworIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbGlua19zdGF0aWNfZmxhZworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X25vX2J1aWx0aW5fZmxhZworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KK3RocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcworYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcworcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcworcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCitvbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgorc3RyaXBsaWI9JGx0X3N0cmlwbGliCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCitmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0wKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bworIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSIkZml4X3NyY2ZpbGVfcGF0aCIKKworIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXMKKworIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCitpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX19FT0ZfXworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XEVPRiA+PiAiJHtvZmlsZX1UIgorCisjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgoraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorRU9GCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICBjYXQgPDwnRU9GJyA+PiAiJHtvZmlsZX1UIgorICAgICAgIyBUaGlzIGlzIGEgc291cmNlIHByb2dyYW0gdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSBkbGxzIG9uIFdpbmRvd3MKKyAgICAgICMgRG9uJ3QgcmVtb3ZlIG5vciBtb2RpZnkgdGhlIHN0YXJ0aW5nIGFuZCBjbG9zaW5nIGNvbW1lbnRzCisjIC8qIGx0ZGxsLmMgc3RhcnRzIGhlcmUgKi8KKyMgI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjICN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICNpbmNsdWRlIDxzdGRpby5oPgorIworIyAjaWZuZGVmIF9fQ1lHV0lOX18KKyMgIyAgaWZkZWYgX19DWUdXSU4zMl9fCisjICMgICAgZGVmaW5lIF9fQ1lHV0lOX18gX19DWUdXSU4zMl9fCisjICMgIGVuZGlmCisjICNlbmRpZgorIworIyAjaWZkZWYgX19jcGx1c3BsdXMKKyMgZXh0ZXJuICJDIiB7CisjICNlbmRpZgorIyBCT09MIEFQSUVOVFJZIERsbE1haW4gKEhJTlNUQU5DRSBoSW5zdCwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpOworIyAjaWZkZWYgX19jcGx1c3BsdXMKKyMgfQorIyAjZW5kaWYKKyMKKyMgI2lmZGVmIF9fQ1lHV0lOX18KKyMgI2luY2x1ZGUgPGN5Z3dpbi9jeWd3aW5fZGxsLmg+CisjIERFQ0xBUkVfQ1lHV0lOX0RMTCggRGxsTWFpbiApOworIyAjZW5kaWYKKyMgSElOU1RBTkNFIF9faERsbEluc3RhbmNlX2Jhc2U7CisjCisjIEJPT0wgQVBJRU5UUlkKKyMgRGxsTWFpbiAoSElOU1RBTkNFIGhJbnN0LCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkKKyMgeworIyAgIF9faERsbEluc3RhbmNlX2Jhc2UgPSBoSW5zdDsKKyMgICByZXR1cm4gVFJVRTsKKyMgfQorIyAvKiBsdGRsbC5jIGVuZHMgaGVyZSAqLworCSMgVGhpcyBpcyBhIHNvdXJjZSBwcm9ncmFtIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgaW1wb3J0IGxpYnJhcmllcworCSMgb24gV2luZG93cyBmb3IgZGxscyB3aGljaCBsYWNrIHRoZW0uIERvbid0IHJlbW92ZSBub3IgbW9kaWZ5IHRoZQorCSMgc3RhcnRpbmcgYW5kIGNsb3NpbmcgY29tbWVudHMKKyMgLyogaW1wZ2VuLmMgc3RhcnRzIGhlcmUgKi8KKyMgLyogICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBsaWJ0b29sLgorIworIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjICAqLworIworIyAjaW5jbHVkZSA8c3RkaW8uaD4JCS8qIGZvciBwcmludGYoKSAqLworIyAjaW5jbHVkZSA8dW5pc3RkLmg+CQkvKiBmb3Igb3BlbigpLCBsc2VlaygpLCByZWFkKCkgKi8KKyMgI2luY2x1ZGUgPGZjbnRsLmg+CQkvKiBmb3IgT19SRE9OTFksIE9fQklOQVJZICovCisjICNpbmNsdWRlIDxzdHJpbmcuaD4JCS8qIGZvciBzdHJkdXAoKSAqLworIworIyAvKiBPX0JJTkFSWSBpc24ndCByZXF1aXJlZCAob3IgZXZlbiBkZWZpbmVkIHNvbWV0aW1lcykgdW5kZXIgVW5peCAqLworIyAjaWZuZGVmIE9fQklOQVJZCisjICNkZWZpbmUgT19CSU5BUlkgMAorIyAjZW5kaWYKKyMKKyMgc3RhdGljIHVuc2lnbmVkIGludAorIyBwZV9nZXQxNiAoZmQsIG9mZnNldCkKKyMgICAgICBpbnQgZmQ7CisjICAgICAgaW50IG9mZnNldDsKKyMgeworIyAgIHVuc2lnbmVkIGNoYXIgYlsyXTsKKyMgICBsc2VlayAoZmQsIG9mZnNldCwgU0VFS19TRVQpOworIyAgIHJlYWQgKGZkLCBiLCAyKTsKKyMgICByZXR1cm4gYlswXSArIChiWzFdPDw4KTsKKyMgfQorIworIyBzdGF0aWMgdW5zaWduZWQgaW50CisjIHBlX2dldDMyIChmZCwgb2Zmc2V0KQorIyAgICAgaW50IGZkOworIyAgICAgaW50IG9mZnNldDsKKyMgeworIyAgIHVuc2lnbmVkIGNoYXIgYls0XTsKKyMgICBsc2VlayAoZmQsIG9mZnNldCwgU0VFS19TRVQpOworIyAgIHJlYWQgKGZkLCBiLCA0KTsKKyMgICByZXR1cm4gYlswXSArIChiWzFdPDw4KSArIChiWzJdPDwxNikgKyAoYlszXTw8MjQpOworIyB9CisjCisjIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyMgcGVfYXMzMiAocHRyKQorIyAgICAgIHZvaWQgKnB0cjsKKyMgeworIyAgIHVuc2lnbmVkIGNoYXIgKmIgPSBwdHI7CisjICAgcmV0dXJuIGJbMF0gKyAoYlsxXTw8OCkgKyAoYlsyXTw8MTYpICsgKGJbM108PDI0KTsKKyMgfQorIworIyBpbnQKKyMgbWFpbiAoYXJnYywgYXJndikKKyMgICAgIGludCBhcmdjOworIyAgICAgY2hhciAqYXJndltdOworIyB7CisjICAgICBpbnQgZGxsOworIyAgICAgdW5zaWduZWQgbG9uZyBwZV9oZWFkZXJfb2Zmc2V0LCBvcHRoZHJfb2ZzLCBudW1fZW50cmllcywgaTsKKyMgICAgIHVuc2lnbmVkIGxvbmcgZXhwb3J0X3J2YSwgZXhwb3J0X3NpemUsIG5zZWN0aW9ucywgc2VjcHRyLCBleHBwdHI7CisjICAgICB1bnNpZ25lZCBsb25nIG5hbWVfcnZhcywgbmV4cDsKKyMgICAgIHVuc2lnbmVkIGNoYXIgKmV4cGRhdGEsICplcnZhOworIyAgICAgY2hhciAqZmlsZW5hbWUsICpkbGxfbmFtZTsKKyMKKyMgICAgIGZpbGVuYW1lID0gYXJndlsxXTsKKyMKKyMgICAgIGRsbCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZfE9fQklOQVJZKTsKKyMgICAgIGlmIChkbGwgPCAxKQorIyAJcmV0dXJuIDE7CisjCisjICAgICBkbGxfbmFtZSA9IGZpbGVuYW1lOworIworIyAgICAgZm9yIChpPTA7IGZpbGVuYW1lW2ldOyBpKyspCisjIAlpZiAoZmlsZW5hbWVbaV0gPT0gJy8nIHx8IGZpbGVuYW1lW2ldID09ICdcXCcgIHx8IGZpbGVuYW1lW2ldID09ICc6JykKKyMgCSAgICBkbGxfbmFtZSA9IGZpbGVuYW1lICsgaSArMTsKKyMKKyMgICAgIHBlX2hlYWRlcl9vZmZzZXQgPSBwZV9nZXQzMiAoZGxsLCAweDNjKTsKKyMgICAgIG9wdGhkcl9vZnMgPSBwZV9oZWFkZXJfb2Zmc2V0ICsgNCArIDIwOworIyAgICAgbnVtX2VudHJpZXMgPSBwZV9nZXQzMiAoZGxsLCBvcHRoZHJfb2ZzICsgOTIpOworIworIyAgICAgaWYgKG51bV9lbnRyaWVzIDwgMSkgLyogbm8gZXhwb3J0cyAqLworIyAJcmV0dXJuIDE7CisjCisjICAgICBleHBvcnRfcnZhID0gcGVfZ2V0MzIgKGRsbCwgb3B0aGRyX29mcyArIDk2KTsKKyMgICAgIGV4cG9ydF9zaXplID0gcGVfZ2V0MzIgKGRsbCwgb3B0aGRyX29mcyArIDEwMCk7CisjICAgICBuc2VjdGlvbnMgPSBwZV9nZXQxNiAoZGxsLCBwZV9oZWFkZXJfb2Zmc2V0ICsgNCArMik7CisjICAgICBzZWNwdHIgPSAocGVfaGVhZGVyX29mZnNldCArIDQgKyAyMCArCisjIAkgICAgICBwZV9nZXQxNiAoZGxsLCBwZV9oZWFkZXJfb2Zmc2V0ICsgNCArIDE2KSk7CisjCisjICAgICBleHBwdHIgPSAwOworIyAgICAgZm9yIChpID0gMDsgaSA8IG5zZWN0aW9uczsgaSsrKQorIyAgICAgeworIyAJY2hhciBzbmFtZVs4XTsKKyMgCXVuc2lnbmVkIGxvbmcgc2VjcHRyMSA9IHNlY3B0ciArIDQwICogaTsKKyMgCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBwZV9nZXQzMiAoZGxsLCBzZWNwdHIxICsgMTIpOworIyAJdW5zaWduZWQgbG9uZyB2c2l6ZSA9IHBlX2dldDMyIChkbGwsIHNlY3B0cjEgKyAxNik7CisjIAl1bnNpZ25lZCBsb25nIGZwdHIgPSBwZV9nZXQzMiAoZGxsLCBzZWNwdHIxICsgMjApOworIyAJbHNlZWsoZGxsLCBzZWNwdHIxLCBTRUVLX1NFVCk7CisjIAlyZWFkKGRsbCwgc25hbWUsIDgpOworIyAJaWYgKHZhZGRyIDw9IGV4cG9ydF9ydmEgJiYgdmFkZHIrdnNpemUgPiBleHBvcnRfcnZhKQorIyAJeworIyAJICAgIGV4cHB0ciA9IGZwdHIgKyAoZXhwb3J0X3J2YSAtIHZhZGRyKTsKKyMgCSAgICBpZiAoZXhwb3J0X3J2YSArIGV4cG9ydF9zaXplID4gdmFkZHIgKyB2c2l6ZSkKKyMgCQlleHBvcnRfc2l6ZSA9IHZzaXplIC0gKGV4cG9ydF9ydmEgLSB2YWRkcik7CisjIAkgICAgYnJlYWs7CisjIAl9CisjICAgICB9CisjCisjICAgICBleHBkYXRhID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYyhleHBvcnRfc2l6ZSk7CisjICAgICBsc2VlayAoZGxsLCBleHBwdHIsIFNFRUtfU0VUKTsKKyMgICAgIHJlYWQgKGRsbCwgZXhwZGF0YSwgZXhwb3J0X3NpemUpOworIyAgICAgZXJ2YSA9IGV4cGRhdGEgLSBleHBvcnRfcnZhOworIworIyAgICAgbmV4cCA9IHBlX2FzMzIgKGV4cGRhdGErMjQpOworIyAgICAgbmFtZV9ydmFzID0gcGVfYXMzMiAoZXhwZGF0YSszMik7CisjCisjICAgICBwcmludGYgKCJFWFBPUlRTXG4iKTsKKyMgICAgIGZvciAoaSA9IDA7IGk8bmV4cDsgaSsrKQorIyAgICAgeworIyAJdW5zaWduZWQgbG9uZyBuYW1lX3J2YSA9IHBlX2FzMzIgKGVydmErbmFtZV9ydmFzK2kqNCk7CisjIAlwcmludGYgKCJcdCVzIEAgJWxkIDtcbiIsIGVydmErbmFtZV9ydmEsIDErIGkpOworIyAgICAgfQorIworIyAgICAgcmV0dXJuIDA7CisjIH0KKyMgLyogaW1wZ2VuLmMgZW5kcyBoZXJlICovCisKK0VPRgorICAgIDs7CisgIGVzYWMKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiR7b2ZpbGV9VCIgfHwgKHJtIC1mICIke29maWxlfVQiOyBleGl0IDEpCisKKyAgbXYgLWYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIgfHwgXAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJHtvZmlsZX1UIiAiJG9maWxlIiAmJiBybSAtZiAiJHtvZmlsZX1UIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKK2ZpCisKKworCisKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKworIyBQcmV2ZW50IG11bHRpcGxlIGV4cGFuc2lvbgorCisKK2ZpCisjIGlmIGxpYnRvb2wgPj0gMS41CitUQUdDQz0KKworCiAjIFNlbGVjdCBtZW1vcnkgbWFuYWdlciBkZXBlbmRpbmcgb24gdXNlciBpbnB1dC4KICMgSWYgbm8gIi1lbmFibGUtbWF4bWVtIiwgdXNlIGptZW1ub2JzCiBNRU1PUllNR1I9J2ptZW1ub2JzLiQoTyknCkBAIC0xNTkyLDE2ICs2MjczLDE2IEBACiBFT0YKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICd0bXBmaWxlKCknIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxNTk2OiBjaGVja2luZyBmb3IgJ3RtcGZpbGUoKSciID4mNQorZWNobyAiY29uZmlndXJlOjYyNzc6IGNoZWNraW5nIGZvciAndG1wZmlsZSgpJyIgPiY1CiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxNTk4ICJjb25maWd1cmUiCisjbGluZSA2Mjc5ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogaW50IG1haW4oKSB7CiAgRklMRSAqIHRmaWxlID0gdG1wZmlsZSgpOyAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNjA1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjI4NjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgogTUVNT1JZTUdSPSdqbWVtYW5zaS4kKE8pJwpAQCAtMTYxNiwxNiArNjI5NywxNiBAQAogRU9GCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAnbWt0ZW1wKCknIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxNjIwOiBjaGVja2luZyBmb3IgJ21rdGVtcCgpJyIgPiY1CitlY2hvICJjb25maWd1cmU6NjMwMTogY2hlY2tpbmcgZm9yICdta3RlbXAoKSciID4mNQogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTYyMiAiY29uZmlndXJlIgorI2xpbmUgNjMwMyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewogIGNoYXIgZm5hbWVbODBdOyBta3RlbXAoZm5hbWUpOyAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNjI5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjMxMDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgogZWxzZQpAQCAtMTY0NCwxMSArNjMyNSwzNTQgQEAKIGZpCiAKIAotIyBFeHRyYWN0IHRoZSBsaWJyYXJ5IHZlcnNpb24gSUQgZnJvbSBqcGVnbGliLmguCi1lY2hvICRhY19uICJjaGVja2luZyBsaWJqcGVnIHZlcnNpb24gbnVtYmVyIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxNjUwOiBjaGVja2luZyBsaWJqcGVnIHZlcnNpb24gbnVtYmVyIiA+JjUKLUpQRUdfTElCX1ZFUlNJT049YHNlZCAtZSAnL14jZGVmaW5lIEpQRUdfTElCX1ZFUlNJT04vIWQnIC1lICdzL15bXjAtOV0qXChbMC05XVswLTldKlwpLiokL1wxLycgJHNyY2Rpci9qcGVnbGliLmhgCi1lY2hvICIkYWNfdCIiJEpQRUdfTElCX1ZFUlNJT04iIDE+JjYKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgdG8gc2VlIGlmIHRoZSBob3N0IGNwdSB0eXBlIGlzIGkzODYgb3IgY29tcGF0aWJsZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjMzMTogY2hlY2tpbmcgdG8gc2VlIGlmIHRoZSBob3N0IGNwdSB0eXBlIGlzIGkzODYgb3IgY29tcGF0aWJsZSIgPiY1CitjYXNlICIkaG9zdF9jcHUiIGluCisgIGkqODYgfCB4ODYgfCBpYTMyKQorICAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgOzsKKyAgeDg2XzY0IHwgYW1kNjQgfCBhYTY0KQorICAgIGVjaG8gIiRhY190IiJubyAoeDg2XzY0KSIgMT4mNgorICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogQ3VycmVudGx5LCB0aGlzIHZlcnNpb24gb2YgSlBFRyBsaWJyYXJ5IGNhbm5vdCBiZSBjb21waWxlZCBhcyA2NC1iaXQgY29kZS4gc29ycnkuIiAxPiYyOyBleGl0IDE7IH0KKyAgOzsKKyAgKikKKyAgICBlY2hvICIkYWNfdCIibm8gKCIkaG9zdF9jcHUiKSIgMT4mNgorICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogVGhpcyB2ZXJzaW9uIG9mIEpQRUcgbGlicmFyeSBpcyBmb3IgaTM4NiBvciBjb21wYXRpYmxlIHByb2Nlc3NvcnMgb25seS4iIDE+JjI7IGV4aXQgMTsgfQorICA7OworZXNhYworCitpZiB0ZXN0IC16ICIkTkFGTEFHUyIgOyB0aGVuCisgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBvYmplY3QgZmlsZSBmb3JtYXQgb2YgaG9zdCBzeXN0ZW0iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYzNDg6IGNoZWNraW5nIGZvciBvYmplY3QgZmlsZSBmb3JtYXQgb2YgaG9zdCBzeXN0ZW0iID4mNQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBpbnRlcml4KikKKyAgICAgIG9iamZtdD0nV2luMzItQ09GRicKKyAgICA7OworICAgIG1zZG9zZGpncHAqIHwgZ28zMiopCisgICAgICBvYmpmbXQ9J0NPRkYnCisgICAgOzsKKyAgICBvczItZW14KikJCQkjIG5vdCB0ZXN0ZWQKKyAgICAgIG9iamZtdD0nTVNPTUYnCQkjIG9iagorICAgIDs7CisgICAgbGludXgqY29mZiogfCBsaW51eCpvbGRsZCopCisgICAgICBvYmpmbXQ9J0NPRkYnCQkjID8/PworICAgIDs7CisgICAgbGludXgqYW91dCopCisgICAgICBvYmpmbXQ9J2Eub3V0JworICAgIDs7CisgICAgbGludXgqKQorICAgICAgb2JqZm10PSdFTEYnCisgICAgOzsKKyAgICBmcmVlYnNkKiB8IG5ldGJzZCogfCBvcGVuYnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIG9iamZtdD0nQlNELWEub3V0JworICAgICAgZWxzZQorICAgICAgICBvYmpmbXQ9J0VMRicKKyAgICAgIGZpCisgICAgOzsKKyAgICBzb2xhcmlzKiB8IHN1bm9zKiB8IHN5c3YqIHwgc2NvKikKKyAgICAgIG9iamZtdD0nRUxGJworICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KiB8IG5leHRzdGVwKiB8IG9wZW5zdGVwKiB8IG1hY29zKikKKyAgICAgIG9iamZtdD0nTWFjaC1PJworICAgIDs7CisgICAgKikKKyAgICAgIG9iamZtdD0nRUxGID8nCisgICAgOzsKKyAgZXNhYworICBlY2hvICIkYWNfdCIiJG9iamZtdCIgMT4mNgorICBpZiB0ZXN0ICIkb2JqZm10IiA9ICdFTEYgPyc7IHRoZW4KKyAgICBvYmpmbXQ9J0VMRicKKyAgICBlY2hvICJjb25maWd1cmU6IHdhcm5pbmc6IHVuZXhwZWN0ZWQgaG9zdCBzeXN0ZW0uIGFzc3VtZWQgdGhhdCB0aGUgZm9ybWF0IGlzICRvYmpmbXQuIiAxPiYyCisgIGZpCitlbHNlCisgIG9iamZtdD0nJworZmkKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBvYmplY3QgZmlsZSBmb3JtYXQgc3BlY2lmaWVyIChOQUZMQUdTKSAiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYzOTQ6IGNoZWNraW5nIGZvciBvYmplY3QgZmlsZSBmb3JtYXQgc3BlY2lmaWVyIChOQUZMQUdTKSAiID4mNQorY2FzZSAiJG9iamZtdCIgaW4KKyAgTVNPTUYpICAgICAgTkFGTEFHUz0nLWZvYmogLURPQkozMic7OworICBXaW4zMi1DT0ZGKSBOQUZMQUdTPSctZndpbjMyIC1EV0lOMzInOzsKKyAgQ09GRikgICAgICAgTkFGTEFHUz0nLWZjb2ZmIC1EQ09GRic7OworICBhLm91dCkgICAgICBOQUZMQUdTPSctZmFvdXQgLURBT1VUJzs7CisgIEJTRC1hLm91dCkgIE5BRkxBR1M9Jy1mYW91dGIgLURBT1VUJzs7CisgIEVMRikgICAgICAgIE5BRkxBR1M9Jy1mZWxmIC1ERUxGJzs7CisgIFJERikgICAgICAgIE5BRkxBR1M9Jy1mcmRmIC1EUkRGJzs7CisgIE1hY2gtTykgICAgIE5BRkxBR1M9Jy1mbWFjaG8gLURNQUNITyc7OworZXNhYworZWNobyAiJGFjX3QiIiROQUZMQUdTIiAxPiY2CisKKworCitmb3IgYWNfcHJvZyBpbiBuYXNtIG5hc213CitkbworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjQxNDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX05BU00nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTkFTTSI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19OQVNNPSIkTkFTTSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3Byb2dfTkFTTT0iJGFjX3Byb2ciCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK05BU009IiRhY19jdl9wcm9nX05BU00iCitpZiB0ZXN0IC1uICIkTkFTTSI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiROQVNNIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKwordGVzdCAtbiAiJE5BU00iICYmIGJyZWFrCitkb25lCisKK3Rlc3QgLXogIiROQVNNIiAmJiB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IG5vIG5hc20gKE5ldHdpZGUgQXNzZW1ibGVyKSBmb3VuZCBpbiBcJFBBVEgiIDE+JjI7IGV4aXQgMTsgfQoraWYgZWNobyAiJE5BU00iIHwgZ3JlcCB5YXNtID4gL2Rldi9udWxsOyB0aGVuCisgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogRE9OJ1QgVVNFIFlBU00hIENVUlJFTlQgVkVSU0lPTiAoUjAuNC4wKSBJUyBCVUdHWSEiIDE+JjIKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGFzc2VtYmxlciAoJE5BU00gJE5BRkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NDQ5OiBjaGVja2luZyB3aGV0aGVyIHRoZSBhc3NlbWJsZXIgKCROQVNNICROQUZMQUdTKSB3b3JrcyIgPiY1CitjYXQgPiBjb25mdGVzdC5hc20gPDxFT0YKKyVsaW5lIDY0NTEgImNvbmZpZ3VyZSIKKyAgICAgICAgc2VjdGlvbiAudGV4dAorICAgICAgICBiaXRzICAgIDMyCisgICAgICAgIGdsb2JhbCAgX21haW4sbWFpbgorX21haW46CittYWluOiAgIHhvciAgICAgZWF4LGVheAorICAgICAgICByZXQKK0VPRgordHJ5X25hc209JyROQVNNICROQUZMQUdTIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYXNtJworaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2NDYwOiBcIiR0cnlfbmFzbVwiKSAxPiY1OyAoZXZhbCAkdHJ5X25hc20pIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdC5vOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LmFzbSA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKyAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVtOiBhc3NlbWJsZXIgY2Fubm90IGNyZWF0ZSBvYmplY3QgZmlsZXMuIiAxPiYyOyBleGl0IDE7IH0KK2ZpCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBsaW5rZXIgYWNjZXB0cyBhc3NlbWJsZXIgb3V0cHV0IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NDcwOiBjaGVja2luZyB3aGV0aGVyIHRoZSBsaW5rZXIgYWNjZXB0cyBhc3NlbWJsZXIgb3V0cHV0IiA+JjUKK3RyeV9uYXNtPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkTERGTEFHUyBjb25mdGVzdC5vICRMSUJTIDE+JjUnCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY0NzI6IFwiJHRyeV9uYXNtXCIpIDE+JjU7IChldmFsICR0cnlfbmFzbSkgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNvbmZpZ3VyYXRpb24gcHJvYmxlbTogbWF5YmUgb2JqZWN0IGZpbGUgZm9ybWF0IG1pc21hdGNoLiIgMT4mMjsgZXhpdCAxOyB9CitmaQorCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBhc3NlbWJsZXIgc3VwcG9ydHMgbGluZSBjb250aW51YXRpb24gY2hhcmFjdGVyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NDgyOiBjaGVja2luZyB3aGV0aGVyIHRoZSBhc3NlbWJsZXIgc3VwcG9ydHMgbGluZSBjb250aW51YXRpb24gY2hhcmFjdGVyIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LmFzbSA8PFxFT0YKKyVsaW5lIDY0ODQgImNvbmZpZ3VyZSIKKzsgVGhlIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlciAnXCcKKzsgd2FzIGludHJvZHVjZWQgaW4gbmFzbSAwLjk4LjI1LgorICAgICAgICBzZWN0aW9uIC50ZXh0CisgICAgICAgIGJpdHMgICAgMzIKKyAgICAgICAgZ2xvYmFsICBfemVybworX3plcm86ICB4b3IgICAgIFwKKyAgICAgICAgICAgICAgICBlYXgsZWF4CisgICAgICAgIHJldAorRU9GCit0cnlfbmFzbT0nJE5BU00gJE5BRkxBR1MgLW8gY29uZnRlc3QubyBjb25mdGVzdC5hc20nCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY0OTU6IFwiJHRyeV9uYXNtXCIpIDE+JjU7IChldmFsICR0cnlfbmFzbSkgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0Lm87IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC5hc20gPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogeW91IGhhdmUgdG8gdXNlIGEgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgYXNzZW1ibGVyLiIgMT4mMjsgZXhpdCAxOyB9CitmaQorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIFNJTUQgaW5zdHJ1Y3Rpb24gc2V0cyByZXF1ZXN0ZWQgdG8gdXNlIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NTA4OiBjaGVja2luZyBTSU1EIGluc3RydWN0aW9uIHNldHMgcmVxdWVzdGVkIHRvIHVzZSIgPiY1CitzaW1kX3RvX3VzZT0iIgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbW14IG9yIC0tZGlzYWJsZS1tbXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbW14K3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9tbXgiCisgIGlmIHRlc3QgIngkZW5hYmxldmFsIiA9IHhubzsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSlNJTURfTU1YX05PVF9TVVBQT1JURUQgCitFT0YKKworZWxzZQorICBzaW1kX3RvX3VzZT0iJHNpbWRfdG9fdXNlIE1NWCIKK2ZpCitlbHNlCisgIHNpbWRfdG9fdXNlPSIkc2ltZF90b191c2UgTU1YIgorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtM2Rub3cgb3IgLS1kaXNhYmxlLTNkbm93IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlXzNkbm93K3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV8zZG5vdyIKKyAgaWYgdGVzdCAieCRlbmFibGV2YWwiID0geG5vOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBKU0lNRF8zRE5PV19OT1RfU1VQUE9SVEVEIAorRU9GCisKK2Vsc2UKKyAgc2ltZF90b191c2U9IiRzaW1kX3RvX3VzZSAzRE5vdyEiCitmaQorZWxzZQorICBzaW1kX3RvX3VzZT0iJHNpbWRfdG9fdXNlIDNETm93ISIKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNzZSBvciAtLWRpc2FibGUtc3NlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NzZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfc3NlIgorICBpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgPSB4bm87IHRoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEpTSU1EX1NTRV9OT1RfU1VQUE9SVEVEIAorRU9GCisKK2Vsc2UKKyAgc2ltZF90b191c2U9IiRzaW1kX3RvX3VzZSBTU0UiCitmaQorZWxzZQorICBzaW1kX3RvX3VzZT0iJHNpbWRfdG9fdXNlIFNTRSIKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNzZTIgb3IgLS1kaXNhYmxlLXNzZTIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3NlMitzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfc3NlMiIKKyAgaWYgdGVzdCAieCRlbmFibGV2YWwiID0geG5vOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBKU0lNRF9TU0UyX05PVF9TVVBQT1JURUQgCitFT0YKKworZWxzZQorICBzaW1kX3RvX3VzZT0iJHNpbWRfdG9fdXNlIFNTRTIiCitmaQorZWxzZQorICBzaW1kX3RvX3VzZT0iJHNpbWRfdG9fdXNlIFNTRTIiCitmaQorCisKK3Rlc3QgLXogIiRzaW1kX3RvX3VzZSIgJiYgc2ltZF90b191c2U9Ik5PTkUiCitlY2hvICIkYWNfdCIiJHNpbWRfdG9fdXNlIiAxPiY2CisKK2ZvciBzaW1kX25hbWUgaW4gJHNpbWRfdG9fdXNlOyBkbworY2FzZSAiJHNpbWRfbmFtZSIgaW4KKyAgTU1YKSAgICBzaW1kX2luc3RydWN0aW9uPSdwc3VidyBtbTAsbW0wJzs7CisgIDNETm93ISkgc2ltZF9pbnN0cnVjdGlvbj0ncGZzdWIgbW0wLG1tMCc7OworICBTU0UpICAgIHNpbWRfaW5zdHJ1Y3Rpb249J3N1YnBzIHhtbTAseG1tMCc7OworICBTU0UyKSAgIHNpbWRfaW5zdHJ1Y3Rpb249J3N1YnBkIHhtbTAseG1tMCc7OworICAqKSAgICAgIGNvbnRpbnVlOzsKK2VzYWMKK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGFzc2VtYmxlciBzdXBwb3J0cyAkc2ltZF9uYW1lIGluc3RydWN0aW9ucyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjU4NzogY2hlY2tpbmcgd2hldGhlciB0aGUgYXNzZW1ibGVyIHN1cHBvcnRzICRzaW1kX25hbWUgaW5zdHJ1Y3Rpb25zIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LmFzbSA8PEVPRgorJWxpbmUgNjU4OSAiY29uZmlndXJlIgorICAgICAgICBzZWN0aW9uIC50ZXh0CisgICAgICAgIGJpdHMgICAgMzIKKyAgICAgICAgZ2xvYmFsICBfc2ltZAorX3NpbWQ6ICAkc2ltZF9pbnN0cnVjdGlvbgorICAgICAgICByZXQKK0VPRgordHJ5X25hc209JyROQVNNICROQUZMQUdTIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYXNtJworaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2NTk3OiBcIiR0cnlfbmFzbVwiKSAxPiY1OyAoZXZhbCAkdHJ5X25hc20pIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdC5vOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuYXNtID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IHlvdSBoYXZlIHRvIHVzZSBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgdGhlIGFzc2VtYmxlci4iIDE+JjI7IGV4aXQgMTsgfQorZmkKK2RvbmUKKworIyBTZWxlY3QgT1MtZGVwZW5kZW50IFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjaGVja2VyLgorIyBqc2ltZHczMi4kKE8pIChXaW4zMikgLyBqc2ltZGRqZy4kKE8pIChESkdQUCBWLjIpIC8ganNpbWRnY2MuJChPKSAoVW5peC9nY2MpCitpZiB0ZXN0ICJ4JFNJTURDSEVDS0VSIiA9IHggOyB0aGVuCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGludGVyaXgqKQorICAgICAgU0lNRENIRUNLRVI9J2pzaW1kdzMyLiQoTyknCisgICAgOzsKKyAgICBtc2Rvc2RqZ3BwKiB8IGdvMzIqKQorICAgICAgU0lNRENIRUNLRVI9J2pzaW1kZGpnLiQoTyknCisgICAgOzsKKyAgICBvczItZW14KikJCQkjIG5vdCB0ZXN0ZWQKKyAgICAgIFNJTURDSEVDS0VSPSdqc2ltZGdjYy4kKE8pJworICAgIDs7CisgICAgKikKKyAgICAgIFNJTURDSEVDS0VSPSdqc2ltZGdjYy4kKE8pJworICAgIDs7CisgIGVzYWMKK2ZpCisKKworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMi1lbXgqIHwgbXNkb3NkamdwcCogfCBnbzMyKikKKyAgICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1NFVE1PREUgCitFT0YKKworICA7OworIyBfaG9zdF9uYW1lXyopCisjICAgQUNfREVGSU5FKFtVU0VfRkRPUEVOXSwpCisjIDs7Citlc2FjCisKKyMgVGhpcyBpcyBmb3IgVU5JWC1saWtlIGVudmlyb25tZW50cyBvbiBXaW5kb3dzIHBsYXRmb3JtLgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXVjaGFyLWJvb2xlYW4gb3IgLS1kaXNhYmxlLXVjaGFyLWJvb2xlYW4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdWNoYXJfYm9vbGVhbitzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfdWNoYXJfYm9vbGVhbiIKKyAgaWYgdGVzdCAieCRlbmFibGV2YWwiICE9IHhubzsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVFlQRURFRl9VQ0hBUl9CT09MRUFOIAorRU9GCisKK2ZpCitmaQorCisKKworSlBFR19MSUJfVkVSU0lPTj0iNjM6MDoxIgorY29uZnZfZGlycz0iJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi4iCitjb25maWdfdmVyPQorZm9yIGFjX2RpciBpbiAkY29uZnZfZGlyczsgZG8KKyAgaWYgdGVzdCAtciAkYWNfZGlyL2NvbmZpZy52ZXI7IHRoZW4KKyAgICBjb25maWdfdmVyPSRhY19kaXIvY29uZmlnLnZlcgorICAgIGJyZWFrCisgIGZpCitkb25lCitpZiB0ZXN0IC16ICIkY29uZmlnX3ZlciI7IHRoZW4KKyAgZWNobyAiY29uZmlndXJlOiB3YXJuaW5nOiBjYW5ub3QgZmluZCBjb25maWcudmVyIGluICRjb25mdl9kaXJzIiAxPiYyCisgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogZGVmYXVsdCB2ZXJzaW9uIG51bWJlciAkSlBFR19MSUJfVkVSU0lPTiBpcyB1c2VkIiAxPiYyCisgIGVjaG8gJGFjX24gImNoZWNraW5nIGxpYmpwZWcgdmVyc2lvbiBudW1iZXIgZm9yIGxpYnRvb2wiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY2Njg6IGNoZWNraW5nIGxpYmpwZWcgdmVyc2lvbiBudW1iZXIgZm9yIGxpYnRvb2wiID4mNQorICBlY2hvICIkYWNfdCIiJEpQRUdfTElCX1ZFUlNJT04iIDE+JjYKK2Vsc2UKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgbGlianBlZyB2ZXJzaW9uIG51bWJlciBmb3IgbGlidG9vbCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjY3MjogY2hlY2tpbmcgbGlianBlZyB2ZXJzaW9uIG51bWJlciBmb3IgbGlidG9vbCIgPiY1CisgIC4gJGNvbmZpZ192ZXIKKyAgZWNobyAiJGFjX3QiIiRKUEVHX0xJQl9WRVJTSU9OIiAxPiY2CisgIGVjaG8gImNvbmZpZ3VyZTogaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSB2ZXJzaW9uIG51bWJlciwgbW9kaWZ5ICRjb25maWdfdmVyIiAxPiYyCitmaQogCiAKICMgUHJlcGFyZSB0byBtYXNzYWdlIG1ha2VmaWxlLmNmZyBjb3JyZWN0bHkuCkBAIC0xNjc1LDEyICs2Njk5LDE1IEBACiAgIENPTV9MVD0iIyAiCiBmaQogCi1pZiB0ZXN0ICJ4JExUU0hBUkVEIiAhPSB4bm87IHRoZW4KK2lmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0geG5vOyB0aGVuCiAgIEZPUkNFX0lOU1RBTExfTElCPSJpbnN0YWxsLWxpYiIKKyAgVU5JTlNUQUxMX0xJQj0idW5pbnN0YWxsLWxpYiIKIGVsc2UKICAgRk9SQ0VfSU5TVEFMTF9MSUI9IiIKKyAgVU5JTlNUQUxMX0xJQj0iIgogZmkKIAorCiAjIFNldCB1cCAtSSBkaXJlY3RpdmVzCiBpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgogICBJTkNMVURFRkxBR1M9Jy1JJChzcmNkaXIpJwpAQCAtMTY4OSw2ICs2NzE2LDUyIEBACiBmaQogCiB0cmFwICcnIDEgMiAxNQorY2F0ID4gY29uZmNhY2hlIDw8XEVPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMuICBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuCisjIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0IHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgQnkgZGVmYXVsdCwgY29uZmlndXJlIHVzZXMgLi9jb25maWcuY2FjaGUgYXMgdGhlIGNhY2hlIGZpbGUsCisjIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXMgbm90IGV4aXN0IGFscmVhZHkuICBZb3UgY2FuIGdpdmUgY29uZmlndXJlCisjIHRoZSAtLWNhY2hlLWZpbGU9RklMRSBvcHRpb24gdG8gdXNlIGEgZGlmZmVyZW50IGNhY2hlIGZpbGU7IHRoYXQgaXMKKyMgd2hhdCBjb25maWd1cmUgZG9lcyB3aGVuIGl0IGNhbGxzIGNvbmZpZ3VyZSBzY3JpcHRzIGluCisjIHN1YmRpcmVjdG9yaWVzLCBzbyB0aGV5IHNoYXJlIHRoZSBjYWNoZS4KKyMgR2l2aW5nIC0tY2FjaGUtZmlsZT0vZGV2L251bGwgZGlzYWJsZXMgY2FjaGluZywgZm9yIGRlYnVnZ2luZyBjb25maWd1cmUuCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdCB0aGUKKyMgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCitFT0YKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgZG9uJ3QgcHV0IG5ld2xpbmVzIGluIGNhY2hlIHZhcmlhYmxlcycgdmFsdWVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKHNldCkgMj4mMSB8CisgIGNhc2UgYChhY19zcGFjZT0nICc7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCisgICphY19zcGFjZT1cICopCisgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZSBzdWJzdGl0dXRpb24KKyAgICAjIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorICAgIHNlZCAtbiBcCisgICAgICAtZSAicy8nLydcXFxcJycvZyIgXAorICAgICAgLWUgInMvXlxcKFthLXpBLVowLTlfXSpfY3ZfW2EtekEtWjAtOV9dKlxcKT1cXCguKlxcKS9cXDE9XCR7XFwxPSdcXDInfS9wIgorICAgIDs7CisgICopCisgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICBzZWQgLW4gLWUgJ3MvXlwoW2EtekEtWjAtOV9dKl9jdl9bYS16QS1aMC05X10qXCk9XCguKlwpL1wxPSR7XDE9XDJ9L3AnCisgICAgOzsKKyAgZXNhYyA+PiBjb25mY2FjaGUKK2lmIGNtcCAtcyAkY2FjaGVfZmlsZSBjb25mY2FjaGU7IHRoZW4KKyAgOgorZWxzZQorICBpZiB0ZXN0IC13ICRjYWNoZV9maWxlOyB0aGVuCisgICAgZWNobyAidXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCisgICAgY2F0IGNvbmZjYWNoZSA+ICRjYWNoZV9maWxlCisgIGVsc2UKKyAgICBlY2hvICJub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKIAogdHJhcCAncm0gLWZyIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29yZSBjb3JlLiogKi5jb3JlICRhY19jbGVhbl9maWxlczsgZXhpdCAxJyAxIDIgMTUKIApAQCAtMTczMiw3ICs2ODA1LDcgQEAKICAgICBlY2hvICJydW5uaW5nIFwke0NPTkZJR19TSEVMTC0vYmluL3NofSAkMCAkYWNfY29uZmlndXJlX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iCiAgICAgZXhlYyBcJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJDAgJGFjX2NvbmZpZ3VyZV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIDs7CiAgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12KQotICAgIGVjaG8gIiRDT05GSUdfU1RBVFVTIGdlbmVyYXRlZCBieSBhdXRvY29uZiB2ZXJzaW9uIDIuMTIiCisgICAgZWNobyAiJENPTkZJR19TVEFUVVMgZ2VuZXJhdGVkIGJ5IGF1dG9jb25mIHZlcnNpb24gMi4xMyIKICAgICBleGl0IDAgOzsKICAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtLWgpCiAgICAgZWNobyAiXCRhY19jc191c2FnZSI7IGV4aXQgMCA7OwpAQCAtMTc1Miw5ICs2ODI1LDExIEBACiAgcy9AQC8lQC87IHMvQEAvQCUvOyBzL0BnXCQvJWcvJyA+IGNvbmZ0ZXN0LnN1YnMgPDxcXENFT0YKICRhY192cHN1YgogJGV4dHJhc3ViCitzJUBTSEVMTEAlJFNIRUxMJWcKIHMlQENGTEFHU0AlJENGTEFHUyVnCiBzJUBDUFBGTEFHU0AlJENQUEZMQUdTJWcKIHMlQENYWEZMQUdTQCUkQ1hYRkxBR1MlZworcyVARkZMQUdTQCUkRkZMQUdTJWcKIHMlQERFRlNAJSRERUZTJWcKIHMlQExERkxBR1NAJSRMREZMQUdTJWcKIHMlQExJQlNAJSRMSUJTJWcKQEAgLTE3NzYsMjAgKzY4NTEsNDUgQEAKIHMlQENDQCUkQ0MlZwogcyVAQ1BQQCUkQ1BQJWcKIHMlQElOU1RBTExfUFJPR1JBTUAlJElOU1RBTExfUFJPR1JBTSVnCitzJUBJTlNUQUxMX1NDUklQVEAlJElOU1RBTExfU0NSSVBUJWcKIHMlQElOU1RBTExfREFUQUAlJElOU1RBTExfREFUQSVnCiBzJUBSQU5MSUJAJSRSQU5MSUIlZworcyVAaG9zdEAlJGhvc3QlZworcyVAaG9zdF9hbGlhc0AlJGhvc3RfYWxpYXMlZworcyVAaG9zdF9jcHVAJSRob3N0X2NwdSVnCitzJUBob3N0X3ZlbmRvckAlJGhvc3RfdmVuZG9yJWcKK3MlQGhvc3Rfb3NAJSRob3N0X29zJWcKK3MlQEVYRUVYVEAlJEVYRUVYVCVnCiBzJUBMSUJUT09MQCUkTElCVE9PTCVnCiBzJUBPQCUkTyVnCiBzJUBBQCUkQSVnCiBzJUBMTkAlJExOJWcKIHMlQElOU1RBTExfTElCQCUkSU5TVEFMTF9MSUIlZworcyVAVU5JTlNUQUxMQCUkVU5JTlNUQUxMJWcKK3MlQGJ1aWxkQCUkYnVpbGQlZworcyVAYnVpbGRfYWxpYXNAJSRidWlsZF9hbGlhcyVnCitzJUBidWlsZF9jcHVAJSRidWlsZF9jcHUlZworcyVAYnVpbGRfdmVuZG9yQCUkYnVpbGRfdmVuZG9yJWcKK3MlQGJ1aWxkX29zQCUkYnVpbGRfb3MlZworcyVATE5fU0AlJExOX1MlZworcyVAT0JKRVhUQCUkT0JKRVhUJWcKK3MlQEVDSE9AJSRFQ0hPJWcKK3MlQFNUUklQQCUkU1RSSVAlZworcyVARExMVE9PTEAlJERMTFRPT0wlZworcyVAQVNAJSRBUyVnCitzJUBPQkpEVU1QQCUkT0JKRFVNUCVnCitzJUBUQUdDQ0AlJFRBR0NDJWcKIHMlQE1FTU9SWU1HUkAlJE1FTU9SWU1HUiVnCitzJUBOQUZMQUdTQCUkTkFGTEFHUyVnCitzJUBOQVNNQCUkTkFTTSVnCitzJUBTSU1EQ0hFQ0tFUkAlJFNJTURDSEVDS0VSJWcKIHMlQEpQRUdfTElCX1ZFUlNJT05AJSRKUEVHX0xJQl9WRVJTSU9OJWcKIHMlQEEyS19ERVBTQCUkQTJLX0RFUFMlZwogcyVAQ09NX0EyS0AlJENPTV9BMkslZwogcyVAQU5TSTJLTlJGTEFHU0AlJEFOU0kyS05SRkxBR1MlZwogcyVAQ09NX0xUQCUkQ09NX0xUJWcKIHMlQEZPUkNFX0lOU1RBTExfTElCQCUkRk9SQ0VfSU5TVEFMTF9MSUIlZworcyVAVU5JTlNUQUxMX0xJQkAlJFVOSU5TVEFMTF9MSUIlZwogcyVASU5DTFVERUZMQUdTQCUkSU5DTFVERUZMQUdTJWcKIAogQ0VPRgpAQCAtMTk1Miw2ICs3MDUyLDcgQEAKICMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgogY2F0ID4+IGNvbmZ0ZXN0LnZhbHMgPDxcRU9GCitzJV5bIAldKiNbIAldKnVuZGVmWyAJXVsgCV0qW2EtekEtWl9dW2EtekEtWl8wLTldKiUvKiAmICovJQogRU9GCiAKICMgQnJlYWsgdXAgY29uZnRlc3QudmFscyBiZWNhdXNlIHNvbWUgc2hlbGxzIGhhdmUgYSBsaW1pdCBvbgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MTcxZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuaW4KQEAgLTAsMCArMSw2MzQgQEAKK2RubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorQUNfSU5JVChbamNtYXN0ZXIuY10pCitBQ19DT05GSUdfSEVBREVSKFtqY29uZmlnLmg6amNvbmZpZy5jZmddKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19QUk9HX0NDCitBQ19QUk9HX0NQUAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBmdW5jdGlvbiBwcm90b3R5cGVzXSkKK0FDX0NBQ0hFX1ZBTChbaWpnX2N2X2hhdmVfcHJvdG90eXBlc10sW0FDX1RSWV9DT01QSUxFKFsKK2ludCB0ZXN0ZnVuY3Rpb24gKGludCBhcmcxLCBpbnQgKiBhcmcyKTsgLyogY2hlY2sgcHJvdG90eXBlcyAqLworc3RydWN0IG1ldGhvZHNfc3RydWN0IHsJCS8qIGNoZWNrIG1ldGhvZC1wb2ludGVyIGRlY2xhcmF0aW9ucyAqLworICBpbnQgKCplcnJvcl9leGl0KSAoY2hhciAqbXNndGV4dCk7CisgIGludCAoKnRyYWNlX21lc3NhZ2UpIChjaGFyICptc2d0ZXh0KTsKKyAgaW50ICgqYW5vdGhlcl9tZXRob2QpICh2b2lkKTsKK307CitpbnQgdGVzdGZ1bmN0aW9uIChpbnQgYXJnMSwgaW50ICogYXJnMikgLyogY2hlY2sgZGVmaW5pdGlvbnMgKi8KK3sgcmV0dXJuIGFyZzJbYXJnMV07IH0KK2ludCB0ZXN0MmZ1bmN0aW9uICh2b2lkKQkvKiBjaGVjayB2b2lkIGFyZyBsaXN0ICovCit7IHJldHVybiAwOyB9CitdLFsgXSxbaWpnX2N2X2hhdmVfcHJvdG90eXBlcz15ZXNdLFtpamdfY3ZfaGF2ZV9wcm90b3R5cGVzPW5vXSldKQorQUNfTVNHX1JFU1VMVChbJGlqZ19jdl9oYXZlX3Byb3RvdHlwZXNdKQoraWYgdGVzdCAkaWpnX2N2X2hhdmVfcHJvdG90eXBlcyA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoW0hBVkVfUFJPVE9UWVBFU10sKQorZWxzZQorICBlY2hvIFtZb3VyIGNvbXBpbGVyIGRvZXMgbm90IHNlZW0gdG8ga25vdyBhYm91dCBmdW5jdGlvbiBwcm90b3R5cGVzLl0KKyAgZWNobyBbUGVyaGFwcyBpdCBuZWVkcyBhIHNwZWNpYWwgc3dpdGNoIHRvIGVuYWJsZSBBTlNJIEMgbW9kZS5dCisgIGVjaG8gW0lmIHNvLCB3ZSByZWNvbW1lbmQgcnVubmluZyBjb25maWd1cmUgbGlrZSB0aGlzOl0KKyAgZWNobyBbIiAgIC4vY29uZmlndXJlICBDQz0nY2MgLXN3aXRjaCciXQorICBlY2hvIFt3aGVyZSAtc3dpdGNoIGlzIHRoZSBwcm9wZXIgc3dpdGNoLl0KK2ZpCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0NIRUNLX0hFQURFUihbc3RkZGVmLmhdLFtBQ19ERUZJTkUoW0hBVkVfU1REREVGX0hdLCldKQorQUNfQ0hFQ0tfSEVBREVSKFtzdGRsaWIuaF0sW0FDX0RFRklORShbSEFWRV9TVERMSUJfSF0sKV0pCitBQ19DSEVDS19IRUFERVIoW3N0cmluZy5oXSxbOl0sW0FDX0RFRklORShbTkVFRF9CU0RfU1RSSU5HU10sKV0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX01TR19DSEVDS0lORyhbZm9yIHNpemVfdF0pCitBQ19UUllfQ09NUElMRShbCisjaWZkZWYgSEFWRV9TVERERUZfSAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBORUVEX0JTRF9TVFJJTkdTCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgordHlwZWRlZiBzaXplX3QgbXlfc2l6ZV90OworXSxbIG15X3NpemVfdCBmb292YXI7IF0sCitbaWpnX3NpemVfdF9vaz15ZXNdLAorW2lqZ19zaXplX3Rfb2s9Im5vdCBBTlNJLCBwZXJoYXBzIGl0IGlzIGluIHN5cy90eXBlcy5oIl0pCitBQ19NU0dfUkVTVUxUKFskaWpnX3NpemVfdF9va10pCitpZiB0ZXN0ICIkaWpnX3NpemVfdF9vayIgIT0geWVzOyB0aGVuCitBQ19DSEVDS19IRUFERVIoW3N5cy90eXBlcy5oXSxbQUNfREVGSU5FKFtORUVEX1NZU19UWVBFU19IXSwpCitBQ19FR1JFUF9IRUFERVIoW3NpemVfdF0sW3N5cy90eXBlcy5oXSwKK1tpamdfc2l6ZV90X29rPSJzaXplX3QgaXMgaW4gc3lzL3R5cGVzLmgiXSxbaWpnX3NpemVfdF9vaz1ub10pXSwKK1tpamdfc2l6ZV90X29rPW5vXSkKK0FDX01TR19SRVNVTFQoWyRpamdfc2l6ZV90X29rXSkKK2lmIHRlc3QgIiRpamdfc2l6ZV90X29rIiA9IG5vOyB0aGVuCisgIGVjaG8gW1R5cGUgc2l6ZV90IGlzIG5vdCBkZWZpbmVkIGluIGFueSBvZiB0aGUgdXN1YWwgcGxhY2VzLl0KKyAgZWNobyBbVHJ5IHB1dHRpbmcgJyJ0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7IicgaW4gamNvbmZpZy5oLl0KK2ZpCitmaQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB0eXBlIHVuc2lnbmVkIGNoYXJdKQorQUNfVFJZX0NPTVBJTEUoLFsgdW5zaWduZWQgY2hhciB1bl9jaGFyOyBdLFtBQ19NU0dfUkVTVUxUKHllcykKK0FDX0RFRklORShbSEFWRV9VTlNJR05FRF9DSEFSXSwpXSxbQUNfTVNHX1JFU1VMVChubyldKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB0eXBlIHVuc2lnbmVkIHNob3J0XSkKK0FDX1RSWV9DT01QSUxFKCxbIHVuc2lnbmVkIHNob3J0IHVuX3Nob3J0OyBdLFtBQ19NU0dfUkVTVUxUKHllcykKK0FDX0RFRklORShbSEFWRV9VTlNJR05FRF9TSE9SVF0sKV0sW0FDX01TR19SRVNVTFQobm8pXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfTVNHX0NIRUNLSU5HKFtmb3IgdHlwZSB2b2lkXSkKK0FDX1RSWV9DT01QSUxFKFsKKy8qIENhdXRpb246IGEgQysrIGNvbXBpbGVyIHdpbGwgaW5zaXN0IG9uIHZhbGlkIHByb3RvdHlwZXMgKi8KK3R5cGVkZWYgdm9pZCAqIHZvaWRfcHRyOwkvKiBjaGVjayB2b2lkICogKi8KKyNpZmRlZiBIQVZFX1BST1RPVFlQRVMJCS8qIGNoZWNrIHB0ciB0byBmdW5jdGlvbiByZXR1cm5pbmcgdm9pZCAqLwordHlwZWRlZiB2b2lkICgqdm9pZF9mdW5jKSAoaW50IGEsIGludCBiKTsKKyNlbHNlCit0eXBlZGVmIHZvaWQgKCp2b2lkX2Z1bmMpICgpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BST1RPVFlQRVMJCS8qIGNoZWNrIHZvaWQgZnVuY3Rpb24gcmVzdWx0ICovCit2b2lkIHRlc3QzZnVuY3Rpb24gKHZvaWRfcHRyIGFyZzEsIHZvaWRfZnVuYyBhcmcyKQorI2Vsc2UKK3ZvaWQgdGVzdDNmdW5jdGlvbiAoYXJnMSwgYXJnMikKKyAgICAgdm9pZF9wdHIgYXJnMTsKKyAgICAgdm9pZF9mdW5jIGFyZzI7CisjZW5kaWYKK3sKKyAgY2hhciAqIGxvY3B0ciA9IChjaGFyICopIGFyZzE7IC8qIGNoZWNrIGNhc3RpbmcgdG8gYW5kIGZyb20gdm9pZCAqICovCisgIGFyZzEgPSAodm9pZCAqKSBsb2NwdHI7CisgICgqYXJnMikgKDEsIDIpOwkJLyogY2hlY2sgY2FsbCBvZiBmY24gcmV0dXJuaW5nIHZvaWQgKi8KK30KK10sWyBdLFtBQ19NU0dfUkVTVUxUKHllcyldLFtBQ19NU0dfUkVTVUxUKG5vKQorQUNfREVGSU5FKFt2b2lkXSxbY2hhcl0pXSkKKworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB3b3JraW5nIGNvbnN0XSkKK0FDX0NBQ0hFX1ZBTChbYWNfY3ZfY19jb25zdF0sW0FDX1RSWV9DT01QSUxFKCxbCisvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLwordHlwZWRlZiBpbnQgY2hhcnNldFsyXTsgY29uc3QgY2hhcnNldCB4OworLyogU3VuT1MgNC4xLjEgY2MgcmVqZWN0cyB0aGlzLiAgKi8KK2NoYXIgY29uc3QgKmNvbnN0ICpjY3A7CitjaGFyICoqcDsKKy8qIE5FQyBTVlI0LjAuMiBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCitzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CitzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKy8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcy4KKyAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluIGFuIGFybQorICAgb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24gKi8KK2NvbnN0IGNoYXIgKmcgPSAic3RyaW5nIjsKK2NjcCA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKy8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCisrK2NjcDsKK3AgPSAoY2hhcioqKSBjY3A7CitjY3AgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcDsKK3sgLyogU0NPIDMuMnY0IGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgKnQ7CisgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgKnQrKyA9IDA7Cit9Cit7IC8qIFNvbWVvbmUgdGhpbmtzIHRoZSBTdW4gc3VwcG9zZWRseS1BTlNJIGNvbXBpbGVyIHdpbGwgcmVqZWN0IHRoaXMuICAqLworICBpbnQgeFtdID0gezI1LCAxN307CisgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICsrZm9vOworfQoreyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgIHR5cGVkZWYgY29uc3QgaW50ICppcHRyOworICBpcHRyIHAgPSAwOworICArK3A7Cit9Cit7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzYXlpbmcKKyAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICBzdHJ1Y3QgcyB7IGludCBqOyBjb25zdCBpbnQgKmFwWzNdOyB9OworICBzdHJ1Y3QgcyAqYjsgYi0+aiA9IDU7Cit9Cit7IC8qIFVMVFJJWC0zMiBWMy4xIChSZXYgOSkgdmNjIHJlamVjdHMgdGhpcyAqLworICBjb25zdCBpbnQgZm9vID0gMTA7Cit9CitdLFthY19jdl9jX2NvbnN0PXllc10sW2FjX2N2X2NfY29uc3Q9bm9dKV0pCitBQ19NU0dfUkVTVUxUKFskYWNfY3ZfY19jb25zdF0pCitpZiB0ZXN0ICRhY19jdl9jX2NvbnN0ID0gbm87IHRoZW4KKyAgQUNfREVGSU5FKFtjb25zdF0sKQorZmkKKworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpbmxpbmVdKQoraWpnX2N2X2lubGluZT0iIgorQUNfVFJZX0NPTVBJTEUoLFt9IF9faW5saW5lX18gaW50IGZvbygpIHsgcmV0dXJuIDA7IH0KK2ludCBiYXIoKSB7IHJldHVybiBmb28oKTtdLFtpamdfY3ZfaW5saW5lPSJfX2lubGluZV9fIl0sCitbQUNfVFJZX0NPTVBJTEUoLFt9IF9faW5saW5lIGludCBmb28oKSB7IHJldHVybiAwOyB9CitpbnQgYmFyKCkgeyByZXR1cm4gZm9vKCk7XSxbaWpnX2N2X2lubGluZT0iX19pbmxpbmUiXSwKK1tBQ19UUllfQ09NUElMRSgsW30gaW5saW5lIGludCBmb28oKSB7IHJldHVybiAwOyB9CitpbnQgYmFyKCkgeyByZXR1cm4gZm9vKCk7XSxbaWpnX2N2X2lubGluZT0iaW5saW5lIl0sKV0pXSkKK0FDX01TR19SRVNVTFQoWyRpamdfY3ZfaW5saW5lXSkKK0FDX0RFRklORV9VTlFVT1RFRChbSU5MSU5FXSxbJGlqZ19jdl9pbmxpbmVdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBicm9rZW4gaW5jb21wbGV0ZSB0eXBlc10pCitBQ19UUllfQ09NUElMRShbIHR5cGVkZWYgc3RydWN0IHVuZGVmaW5lZF9zdHJ1Y3R1cmUgKiB1bmRlZl9zdHJ1Y3RfcHRyOyBdLAorLFtBQ19NU0dfUkVTVUxUKG9rKV0sW0FDX01TR19SRVNVTFQoYnJva2VuKQorQUNfREVGSU5FKFtJTkNPTVBMRVRFX1RZUEVTX0JST0tFTl0sKV0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX01TR19DSEVDS0lORyhbZm9yIHNob3J0IGV4dGVybmFsIG5hbWVzXSkKK0FDX1RSWV9MSU5LKFsKK2ludCBwb3NzaWJseV9kdXBsaWNhdGVfZnVuY3Rpb24gKCkgeyByZXR1cm4gMDsgfQoraW50IHBvc3NpYmx5X2R1cGxpX2Z1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0KK10sWyBdLFtBQ19NU0dfUkVTVUxUKG9rKV0sW0FDX01TR19SRVNVTFQoc2hvcnQpCitBQ19ERUZJTkUoW05FRURfU0hPUlRfRVhURVJOQUxfTkFNRVNdLCldKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19NU0dfQ0hFQ0tJTkcoW3RvIHNlZSBpZiBjaGFyIGlzIHNpZ25lZF0pCitBQ19UUllfUlVOKFsKKyNpZmRlZiBIQVZFX1BST1RPVFlQRVMKK2ludCBpc19jaGFyX3NpZ25lZCAoaW50IGFyZykKKyNlbHNlCitpbnQgaXNfY2hhcl9zaWduZWQgKGFyZykKKyAgICAgaW50IGFyZzsKKyNlbmRpZgoreworICBpZiAoYXJnID09IDE4OSkgewkJLyogZXhwZWN0ZWQgcmVzdWx0IGZvciB1bnNpZ25lZCBjaGFyICovCisgICAgcmV0dXJuIDA7CQkJLyogdHlwZSBjaGFyIGlzIHVuc2lnbmVkICovCisgIH0KKyAgZWxzZSBpZiAoYXJnICE9IC02NykgewkvKiBleHBlY3RlZCByZXN1bHQgZm9yIHNpZ25lZCBjaGFyICovCisgICAgcHJpbnRmKCJIbW0sIGl0IHNlZW1zICdjaGFyJyBpcyBub3QgZWlnaHQgYml0cyB3aWRlIG9uIHlvdXIgbWFjaGluZS5cbiIpOworICAgIHByaW50ZigiSSBmZWFyIHRoZSBKUEVHIHNvZnR3YXJlIHdpbGwgbm90IHdvcmsgYXQgYWxsLlxuXG4iKTsKKyAgfQorICByZXR1cm4gMTsJCQkvKiBhc3N1bWUgY2hhciBpcyBzaWduZWQgb3RoZXJ3aXNlICovCit9CitjaGFyIHNpZ25lZF9jaGFyX2NoZWNrID0gKGNoYXIpICgtNjcpOworbWFpbigpIHsKKyAgZXhpdChpc19jaGFyX3NpZ25lZCgoaW50KSBzaWduZWRfY2hhcl9jaGVjaykpOworfV0sW0FDX01TR19SRVNVTFQobm8pCitBQ19ERUZJTkUoW0NIQVJfSVNfVU5TSUdORURdLCldLFtBQ19NU0dfUkVTVUxUKHllcyldLAorW2VjaG8gQXNzdW1pbmcgdGhhdCBjaGFyIGlzIHNpZ25lZCBvbiB0YXJnZXQgbWFjaGluZS4KK2VjaG8gSWYgaXQgaXMgdW5zaWduZWQsIHRoaXMgd2lsbCBiZSBhIGxpdHRsZSBiaXQgaW5lZmZpY2llbnQuCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19NU0dfQ0hFQ0tJTkcoW3RvIHNlZSBpZiByaWdodCBzaGlmdCBpcyBzaWduZWRdKQorQUNfVFJZX1JVTihbCisjaWZkZWYgSEFWRV9QUk9UT1RZUEVTCitpbnQgaXNfc2hpZnRpbmdfc2lnbmVkIChsb25nIGFyZykKKyNlbHNlCitpbnQgaXNfc2hpZnRpbmdfc2lnbmVkIChhcmcpCisgICAgIGxvbmcgYXJnOworI2VuZGlmCisvKiBTZWUgd2hldGhlciByaWdodC1zaGlmdCBvbiBhIGxvbmcgaXMgc2lnbmVkIG9yIG5vdC4gKi8KK3sKKyAgbG9uZyByZXMgPSBhcmcgPj4gNDsKKworICBpZiAocmVzID09IC0weDdGN0U4MENMKSB7CS8qIGV4cGVjdGVkIHJlc3VsdCBmb3Igc2lnbmVkIHNoaWZ0ICovCisgICAgcmV0dXJuIDE7CQkJLyogcmlnaHQgc2hpZnQgaXMgc2lnbmVkICovCisgIH0KKyAgLyogc2VlIGlmIHVuc2lnbmVkLXNoaWZ0IGhhY2sgd2lsbCBmaXggaXQuICovCisgIC8qIHdlIGNhbid0IGp1c3QgdGVzdCBleGFjdCB2YWx1ZSBzaW5jZSBpdCBkZXBlbmRzIG9uIHdpZHRoIG9mIGxvbmcuLi4gKi8KKyAgcmVzIHw9ICh+MEwpIDw8ICgzMi00KTsKKyAgaWYgKHJlcyA9PSAtMHg3RjdFODBDTCkgewkvKiBleHBlY3RlZCByZXN1bHQgbm93PyAqLworICAgIHJldHVybiAwOwkJCS8qIHJpZ2h0IHNoaWZ0IGlzIHVuc2lnbmVkICovCisgIH0KKyAgcHJpbnRmKCJSaWdodCBzaGlmdCBpc24ndCBhY3RpbmcgYXMgSSBleHBlY3QgaXQgdG8uXG4iKTsKKyAgcHJpbnRmKCJJIGZlYXIgdGhlIEpQRUcgc29mdHdhcmUgd2lsbCBub3Qgd29yayBhdCBhbGwuXG5cbiIpOworICByZXR1cm4gMDsJCQkvKiB0cnkgaXQgd2l0aCB1bnNpZ25lZCBhbnl3YXkgKi8KK30KK21haW4oKSB7CisgIGV4aXQoaXNfc2hpZnRpbmdfc2lnbmVkKC0weDdGN0U4MEIxTCkpOworfV0sW0FDX01TR19SRVNVTFQobm8pCitBQ19ERUZJTkUoW1JJR0hUX1NISUZUX0lTX1VOU0lHTkVEXSwpXSxbQUNfTVNHX1JFU1VMVCh5ZXMpXSwKK1tBQ19NU0dfUkVTVUxUKFtBc3N1bWluZyB0aGF0IHJpZ2h0IHNoaWZ0IGlzIHNpZ25lZCBvbiB0YXJnZXQgbWFjaGluZS5dKV0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX01TR19DSEVDS0lORyhbdG8gc2VlIGlmIGZvcGVuIGFjY2VwdHMgYiBzcGVjXSkKK0FDX1RSWV9SVU4oWworI2luY2x1ZGUgPHN0ZGlvLmg+CittYWluKCkgeworICBpZiAoZm9wZW4oImNvbmZ0ZXN0ZGF0YSIsICJ3YiIpICE9IE5VTEwpCisgICAgZXhpdCgwKTsKKyAgZXhpdCgxKTsKK31dLFtBQ19NU0dfUkVTVUxUKHllcyldLFtBQ19NU0dfUkVTVUxUKG5vKQorQUNfREVGSU5FKFtET05UX1VTRV9CX01PREVdLCldLFtBQ19NU0dfUkVTVUxUKFtBc3N1bWluZyB0aGF0IGl0IGRvZXMuXSldKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19QUk9HX0lOU1RBTEwKK0FDX1BST0dfUkFOTElCCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQUNfQ0FOT05JQ0FMX0hPU1QKK0FDX0VYRUVYVAorCisjIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBsaWJ0b29sLAorIyBhbmQgaWYgc28gd2hldGhlciB0byBidWlsZCBzaGFyZWQsIHN0YXRpYywgb3IgYm90aCBmbGF2b3JzIG9mIGxpYnJhcnkuCitBQ19ESVNBQkxFX1NIQVJFRAorQUNfRElTQUJMRV9TVEFUSUMKK2lmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0geG5vICAtbyAgIngkZW5hYmxlX3N0YXRpYyIgIT0geG5vOyB0aGVuCisgIFVTRUxJQlRPT0w9InllcyIKKyMgTElCVE9PTD0iLi9saWJ0b29sIgorICBPPSJsbyIKKyAgQT0ibGEiCisgIExOPSckKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpJworICBJTlNUQUxMX0xJQj0nJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAke0lOU1RBTEx9JworICBJTlNUQUxMX1BST0dSQU09IlwkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICRJTlNUQUxMX1BST0dSQU0iCisgIFVOSU5TVEFMTD0nJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsICQoUk0pJworZWxzZQorICBVU0VMSUJUT09MPSJubyIKKyAgTElCVE9PTD0iIgorICBPPSJvIgorICBBPSJhIgorICBMTj0nJChDQyknCisgIElOU1RBTExfTElCPSIkSU5TVEFMTF9EQVRBIgorICBVTklOU1RBTEw9JyQoUk0pJworZmkKK0FDX1NVQlNUKFtMSUJUT09MXSkKK0FDX1NVQlNUKFtPXSkKK0FDX1NVQlNUKFtBXSkKK0FDX1NVQlNUKFtMTl0pCitBQ19TVUJTVChbSU5TVEFMTF9MSUJdKQorQUNfU1VCU1QoW1VOSU5TVEFMTF0pCisKKyMgQ29uZmlndXJlIGxpYnRvb2wgaWYgbmVlZGVkLgoraWYgdGVzdCAkVVNFTElCVE9PTCA9IHllczsgdGhlbgorICBBQ19MSUJUT09MX0RMT1BFTgorICBBQ19MSUJUT09MX1dJTjMyX0RMTAorICBBQ19QUk9HX0xJQlRPT0wKK2ZpCisjIGlmIGxpYnRvb2wgPj0gMS41CitUQUdDQz1pZmRlZihbQUNfTElCVE9PTF9HQ0pdLFstLXRhZz1DQ10pCitBQ19TVUJTVChbVEFHQ0NdKQorCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VsZWN0IG1lbW9yeSBtYW5hZ2VyIGRlcGVuZGluZyBvbiB1c2VyIGlucHV0LgorIyBJZiBubyAiLWVuYWJsZS1tYXhtZW0iLCB1c2Ugam1lbW5vYnMKK01FTU9SWU1HUj0nam1lbW5vYnMuJChPKScKK01BWE1FTT0ibm8iCitBQ19BUkdfRU5BQkxFKFttYXhtZW1dLAorWyAgLS1lbmFibGUtbWF4bWVtWz1OXSAgICAgZW5hYmxlIHVzZSBvZiB0ZW1wIGZpbGVzLCBzZXQgbWF4IG1lbSB1c2FnZSB0byBOIE1CXSwKK1tNQVhNRU09IiRlbmFibGV2YWwiXSkKKyMgc3VwcG9ydCAtLXdpdGgtbWF4bWVtIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIElKRyBWNS4KK0FDX0FSR19XSVRIKFttYXhtZW1dLCxbTUFYTUVNPSIkd2l0aHZhbCJdKQoraWYgdGVzdCAieCRNQVhNRU0iID0geHllczsgdGhlbgorICBNQVhNRU09MQorZmkKK2lmIHRlc3QgIngkTUFYTUVNIiAhPSB4bm87IHRoZW4KKyAgaWYgdGVzdCAtbiAiYGVjaG8gJE1BWE1FTSB8IHNlZCAncy9bWzAtOV1dLy9nJ2AiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtub24tbnVtZXJpYyBhcmd1bWVudCB0byAtLWVuYWJsZS1tYXhtZW1dKQorICBmaQorICBERUZBVUxUTUFYTUVNPWBleHByICRNQVhNRU0gXCogMTA0ODU3NmAKK0FDX0RFRklORV9VTlFVT1RFRChbREVGQVVMVF9NQVhfTUVNXSxbJHtERUZBVUxUTUFYTUVNfV0pCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAndG1wZmlsZSgpJ10pCitBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGlvLmg+XSxbIEZJTEUgKiB0ZmlsZSA9IHRtcGZpbGUoKTsgXSwKK1tBQ19NU0dfUkVTVUxUKHllcykKK01FTU9SWU1HUj0nam1lbWFuc2kuJChPKSddLAorW0FDX01TR19SRVNVTFQobm8pCitNRU1PUllNR1I9J2ptZW1uYW1lLiQoTyknCitBQ19ERUZJTkUoW05FRURfU0lHTkFMX0NBVENIRVJdLCkKK0FDX01TR19DSEVDS0lORyhbZm9yICdta3RlbXAoKSddKQorQUNfVFJZX0xJTksoLFsgY2hhciBmbmFtZVs4MF07IG1rdGVtcChmbmFtZSk7IF0sCitbQUNfTVNHX1JFU1VMVCh5ZXMpXSxbQUNfTVNHX1JFU1VMVChubykKK0FDX0RFRklORShbTk9fTUtURU1QXSwpXSldKQorZmkKK0FDX1NVQlNUKFtNRU1PUllNR1JdKQorCitkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQUNfTVNHX0NIRUNLSU5HKFt0byBzZWUgaWYgdGhlIGhvc3QgY3B1IHR5cGUgaXMgaTM4NiBvciBjb21wYXRpYmxlXSkKK2Nhc2UgIiRob3N0X2NwdSIgaW4KKyAgaSo4NiB8IHg4NiB8IGlhMzIpCisgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIDs7CisgIHg4Nl82NCB8IGFtZDY0IHwgYWE2NCkKKyAgICBBQ19NU0dfUkVTVUxUKFtubyAoeDg2XzY0KV0pCisgICAgQUNfTVNHX0VSUk9SKFtDdXJyZW50bHksIHRoaXMgdmVyc2lvbiBvZiBKUEVHIGxpYnJhcnkgY2Fubm90IGJlIGNvbXBpbGVkIGFzIDY0LWJpdCBjb2RlLiBzb3JyeS5dKQorICA7OworICAqKQorICAgIEFDX01TR19SRVNVTFQoW25vICgiJGhvc3RfY3B1IildKQorICAgIEFDX01TR19FUlJPUihbVGhpcyB2ZXJzaW9uIG9mIEpQRUcgbGlicmFyeSBpcyBmb3IgaTM4NiBvciBjb21wYXRpYmxlIHByb2Nlc3NvcnMgb25seS5dKQorICA7OworZXNhYworCitpZiB0ZXN0IC16ICIkTkFGTEFHUyIgOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG9iamVjdCBmaWxlIGZvcm1hdCBvZiBob3N0IHN5c3RlbV0pCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGludGVyaXgqKQorICAgICAgb2JqZm10PSdXaW4zMi1DT0ZGJworICAgIDs7CisgICAgbXNkb3NkamdwcCogfCBnbzMyKikKKyAgICAgIG9iamZtdD0nQ09GRicKKyAgICA7OworICAgIG9zMi1lbXgqKQkJCSMgbm90IHRlc3RlZAorICAgICAgb2JqZm10PSdNU09NRicJCSMgb2JqCisgICAgOzsKKyAgICBsaW51eCpjb2ZmKiB8IGxpbnV4Km9sZGxkKikKKyAgICAgIG9iamZtdD0nQ09GRicJCSMgPz8/CisgICAgOzsKKyAgICBsaW51eCphb3V0KikKKyAgICAgIG9iamZtdD0nYS5vdXQnCisgICAgOzsKKyAgICBsaW51eCopCisgICAgICBvYmpmbXQ9J0VMRicKKyAgICA7OworICAgIGZyZWVic2QqIHwgbmV0YnNkKiB8IG9wZW5ic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgb2JqZm10PSdCU0QtYS5vdXQnCisgICAgICBlbHNlCisgICAgICAgIG9iamZtdD0nRUxGJworICAgICAgZmkKKyAgICA7OworICAgIHNvbGFyaXMqIHwgc3Vub3MqIHwgc3lzdiogfCBzY28qKQorICAgICAgb2JqZm10PSdFTEYnCisgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqIHwgbmV4dHN0ZXAqIHwgb3BlbnN0ZXAqIHwgbWFjb3MqKQorICAgICAgb2JqZm10PSdNYWNoLU8nCisgICAgOzsKKyAgICAqKQorICAgICAgb2JqZm10PSdFTEYgPycKKyAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyRvYmpmbXRdKQorICBpZiB0ZXN0ICIkb2JqZm10IiA9ICdFTEYgPyc7IHRoZW4KKyAgICBvYmpmbXQ9J0VMRicKKyAgICBBQ19NU0dfV0FSTihbdW5leHBlY3RlZCBob3N0IHN5c3RlbS4gYXNzdW1lZCB0aGF0IHRoZSBmb3JtYXQgaXMgJG9iamZtdC5dKQorICBmaQorZWxzZQorICBvYmpmbXQ9JycKK2ZpCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBvYmplY3QgZmlsZSBmb3JtYXQgc3BlY2lmaWVyIChOQUZMQUdTKSBdKQorY2FzZSAiJG9iamZtdCIgaW4KKyAgTVNPTUYpICAgICAgTkFGTEFHUz0nLWZvYmogLURPQkozMic7OworICBXaW4zMi1DT0ZGKSBOQUZMQUdTPSctZndpbjMyIC1EV0lOMzInOzsKKyAgQ09GRikgICAgICAgTkFGTEFHUz0nLWZjb2ZmIC1EQ09GRic7OworICBhLm91dCkgICAgICBOQUZMQUdTPSctZmFvdXQgLURBT1VUJzs7CisgIEJTRC1hLm91dCkgIE5BRkxBR1M9Jy1mYW91dGIgLURBT1VUJzs7CisgIEVMRikgICAgICAgIE5BRkxBR1M9Jy1mZWxmIC1ERUxGJzs7CisgIFJERikgICAgICAgIE5BRkxBR1M9Jy1mcmRmIC1EUkRGJzs7CisgIE1hY2gtTykgICAgIE5BRkxBR1M9Jy1mbWFjaG8gLURNQUNITyc7OworZXNhYworQUNfTVNHX1JFU1VMVChbJE5BRkxBR1NdKQorQUNfU1VCU1QoW05BRkxBR1NdKQorCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQUNfQ0hFQ0tfUFJPR1MoTkFTTSwgW25hc20gbmFzbXddKQordGVzdCAteiAiJE5BU00iICYmIEFDX01TR19FUlJPUihbbm8gbmFzbSAoTmV0d2lkZSBBc3NlbWJsZXIpIGZvdW5kIGluIFwkUEFUSF0pCitpZiBlY2hvICIkTkFTTSIgfCBncmVwIHlhc20gPiAvZGV2L251bGw7IHRoZW4KKyAgQUNfTVNHX1dBUk4oW0RPTidUIFVTRSBZQVNNISBDVVJSRU5UIFZFUlNJT04gKFIwLjQuMCkgSVMgQlVHR1khXSkKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgYXNzZW1ibGVyICgkTkFTTSAkTkFGTEFHUykgd29ya3NdKQorY2F0ID4gY29uZnRlc3QuYXNtIDw8RU9GCitbJWxpbmUgX19vbGluZV9fICJjb25maWd1cmUiCisgICAgICAgIHNlY3Rpb24gLnRleHQKKyAgICAgICAgYml0cyAgICAzMgorICAgICAgICBnbG9iYWwgIF9tYWluLG1haW4KK19tYWluOgorbWFpbjogICB4b3IgICAgIGVheCxlYXgKKyAgICAgICAgcmV0CitdRU9GCit0cnlfbmFzbT0nJE5BU00gJE5BRkxBR1MgLW8gY29uZnRlc3QubyBjb25mdGVzdC5hc20nCitpZiBBQ19UUllfRVZBTCh0cnlfbmFzbSkgJiYgdGVzdCAtcyBjb25mdGVzdC5vOyB0aGVuCisgIEFDX01TR19SRVNVTFQoeWVzKQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQUNfRkRfQ0MKKyAgY2F0IGNvbmZ0ZXN0LmFzbSA+JkFDX0ZEX0NDCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgQUNfTVNHX0VSUk9SKFtpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVtOiBhc3NlbWJsZXIgY2Fubm90IGNyZWF0ZSBvYmplY3QgZmlsZXMuXSkKK2ZpCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIGxpbmtlciBhY2NlcHRzIGFzc2VtYmxlciBvdXRwdXRdKQordHJ5X25hc209JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRMREZMQUdTIGNvbmZ0ZXN0Lm8gJExJQlMgMT4mQUNfRkRfQ0MnCitpZiBBQ19UUllfRVZBTCh0cnlfbmFzbSkgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIEFDX01TR19SRVNVTFQoeWVzKQorZWxzZQorICBybSAtcmYgY29uZnRlc3QqCisgIEFDX01TR19SRVNVTFQobm8pCisgIEFDX01TR19FUlJPUihbY29uZmlndXJhdGlvbiBwcm9ibGVtOiBtYXliZSBvYmplY3QgZmlsZSBmb3JtYXQgbWlzbWF0Y2guXSkKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgYXNzZW1ibGVyIHN1cHBvcnRzIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3Rlcl0pCitjYXQgPiBjb25mdGVzdC5hc20gPDxcRU9GCitbJWxpbmUgX19vbGluZV9fICJjb25maWd1cmUiCis7IFRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgJ1wnCis7IHdhcyBpbnRyb2R1Y2VkIGluIG5hc20gMC45OC4yNS4KKyAgICAgICAgc2VjdGlvbiAudGV4dAorICAgICAgICBiaXRzICAgIDMyCisgICAgICAgIGdsb2JhbCAgX3plcm8KK196ZXJvOiAgeG9yICAgICBcCisgICAgICAgICAgICAgICAgZWF4LGVheAorICAgICAgICByZXQKK11FT0YKK3RyeV9uYXNtPSckTkFTTSAkTkFGTEFHUyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmFzbScKK2lmIEFDX1RSWV9FVkFMKHRyeV9uYXNtKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0Lm87IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBBQ19NU0dfUkVTVUxUKHllcykKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFDX0ZEX0NDCisgIGNhdCBjb25mdGVzdC5hc20gPiZBQ19GRF9DQworICBybSAtcmYgY29uZnRlc3QqCisgIEFDX01TR19SRVNVTFQobm8pCisgIEFDX01TR19FUlJPUihbeW91IGhhdmUgdG8gdXNlIGEgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgYXNzZW1ibGVyLl0pCitmaQorCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQUNfTVNHX0NIRUNLSU5HKFtTSU1EIGluc3RydWN0aW9uIHNldHMgcmVxdWVzdGVkIHRvIHVzZV0pCitzaW1kX3RvX3VzZT0iIgorCitBQ19BUkdfRU5BQkxFKG1teCwKK1sgIC0tZGlzYWJsZS1tbXggICAgICAgICAgIGRvIG5vdCB1c2UgTU1YIGluc3RydWN0aW9uIHNldF0sCitbaWYgdGVzdCAieCRlbmFibGV2YWwiID0geG5vOyB0aGVuCisgIEFDX0RFRklORShbSlNJTURfTU1YX05PVF9TVVBQT1JURURdLCkKK2Vsc2UKKyAgc2ltZF90b191c2U9IiRzaW1kX3RvX3VzZSBNTVgiCitmaV0sIFtzaW1kX3RvX3VzZT0iJHNpbWRfdG9fdXNlIE1NWCJdKQorCitBQ19BUkdfRU5BQkxFKDNkbm93LAorWyAgLS1kaXNhYmxlLTNkbm93ICAgICAgICAgZG8gbm90IHVzZSAzRE5vdyEgaW5zdHJ1Y3Rpb24gc2V0XSwKK1tpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgPSB4bm87IHRoZW4KKyAgQUNfREVGSU5FKFtKU0lNRF8zRE5PV19OT1RfU1VQUE9SVEVEXSwpCitlbHNlCisgIHNpbWRfdG9fdXNlPSIkc2ltZF90b191c2UgM0ROb3chIgorZmldLCBbc2ltZF90b191c2U9IiRzaW1kX3RvX3VzZSAzRE5vdyEiXSkKKworQUNfQVJHX0VOQUJMRShzc2UsCitbICAtLWRpc2FibGUtc3NlICAgICAgICAgICBkbyBub3QgdXNlIFNTRSBpbnN0cnVjdGlvbiBzZXRdLAorW2lmIHRlc3QgIngkZW5hYmxldmFsIiA9IHhubzsgdGhlbgorICBBQ19ERUZJTkUoW0pTSU1EX1NTRV9OT1RfU1VQUE9SVEVEXSwpCitlbHNlCisgIHNpbWRfdG9fdXNlPSIkc2ltZF90b191c2UgU1NFIgorZmldLCBbc2ltZF90b191c2U9IiRzaW1kX3RvX3VzZSBTU0UiXSkKKworQUNfQVJHX0VOQUJMRShzc2UyLAorWyAgLS1kaXNhYmxlLXNzZTIgICAgICAgICAgZG8gbm90IHVzZSBTU0UyIGluc3RydWN0aW9uIHNldF0sCitbaWYgdGVzdCAieCRlbmFibGV2YWwiID0geG5vOyB0aGVuCisgIEFDX0RFRklORShbSlNJTURfU1NFMl9OT1RfU1VQUE9SVEVEXSwpCitlbHNlCisgIHNpbWRfdG9fdXNlPSIkc2ltZF90b191c2UgU1NFMiIKK2ZpXSwgW3NpbWRfdG9fdXNlPSIkc2ltZF90b191c2UgU1NFMiJdKQorCit0ZXN0IC16ICIkc2ltZF90b191c2UiICYmIHNpbWRfdG9fdXNlPSJOT05FIgorQUNfTVNHX1JFU1VMVChbJHNpbWRfdG9fdXNlXSkKKworZm9yIHNpbWRfbmFtZSBpbiAkc2ltZF90b191c2U7IGRvCitjYXNlICIkc2ltZF9uYW1lIiBpbgorICBNTVgpICAgIHNpbWRfaW5zdHJ1Y3Rpb249J3BzdWJ3IG1tMCxtbTAnOzsKKyAgM0ROb3chKSBzaW1kX2luc3RydWN0aW9uPSdwZnN1YiBtbTAsbW0wJzs7CisgIFNTRSkgICAgc2ltZF9pbnN0cnVjdGlvbj0nc3VicHMgeG1tMCx4bW0wJzs7CisgIFNTRTIpICAgc2ltZF9pbnN0cnVjdGlvbj0nc3VicGQgeG1tMCx4bW0wJzs7CisgICopICAgICAgY29udGludWU7OworZXNhYworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBhc3NlbWJsZXIgc3VwcG9ydHMgJHNpbWRfbmFtZSBpbnN0cnVjdGlvbnNdKQorY2F0ID4gY29uZnRlc3QuYXNtIDw8RU9GCitbJWxpbmUgX19vbGluZV9fICJjb25maWd1cmUiCisgICAgICAgIHNlY3Rpb24gLnRleHQKKyAgICAgICAgYml0cyAgICAzMgorICAgICAgICBnbG9iYWwgIF9zaW1kCitfc2ltZDogICRzaW1kX2luc3RydWN0aW9uCisgICAgICAgIHJldAorXUVPRgordHJ5X25hc209JyROQVNNICROQUZMQUdTIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYXNtJworaWYgQUNfVFJZX0VWQUwodHJ5X25hc20pICYmIHRlc3QgLXMgY29uZnRlc3QubzsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIEFDX01TR19SRVNVTFQoeWVzKQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQUNfRkRfQ0MKKyAgY2F0IGNvbmZ0ZXN0LmFzbSA+JkFDX0ZEX0NDCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgQUNfTVNHX0VSUk9SKFt5b3UgaGF2ZSB0byB1c2UgYSBtb3JlIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBhc3NlbWJsZXIuXSkKK2ZpCitkb25lCisKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWxlY3QgT1MtZGVwZW5kZW50IFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjaGVja2VyLgorIyBqc2ltZHczMi4kKE8pIChXaW4zMikgLyBqc2ltZGRqZy4kKE8pIChESkdQUCBWLjIpIC8ganNpbWRnY2MuJChPKSAoVW5peC9nY2MpCitpZiB0ZXN0ICJ4JFNJTURDSEVDS0VSIiA9IHggOyB0aGVuCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGludGVyaXgqKQorICAgICAgU0lNRENIRUNLRVI9J2pzaW1kdzMyLiQoTyknCisgICAgOzsKKyAgICBtc2Rvc2RqZ3BwKiB8IGdvMzIqKQorICAgICAgU0lNRENIRUNLRVI9J2pzaW1kZGpnLiQoTyknCisgICAgOzsKKyAgICBvczItZW14KikJCQkjIG5vdCB0ZXN0ZWQKKyAgICAgIFNJTURDSEVDS0VSPSdqc2ltZGdjYy4kKE8pJworICAgIDs7CisgICAgKikKKyAgICAgIFNJTURDSEVDS0VSPSdqc2ltZGdjYy4kKE8pJworICAgIDs7CisgIGVzYWMKK2ZpCitBQ19TVUJTVChbU0lNRENIRUNLRVJdKQorCitjYXNlICIkaG9zdF9vcyIgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyLWVteCogfCBtc2Rvc2RqZ3BwKiB8IGdvMzIqKQorICAgIEFDX0RFRklORShbVVNFX1NFVE1PREVdLCkKKyAgOzsKKyMgX2hvc3RfbmFtZV8qKQorIyAgIEFDX0RFRklORShbVVNFX0ZET1BFTl0sKQorIyA7OworZXNhYworCisjIFRoaXMgaXMgZm9yIFVOSVgtbGlrZSBlbnZpcm9ubWVudHMgb24gV2luZG93cyBwbGF0Zm9ybS4KK0FDX0FSR19FTkFCTEUodWNoYXItYm9vbGVhbiwKK1sgIC0tZW5hYmxlLXVjaGFyLWJvb2xlYW4gIGRlZmluZSB0eXBlIFwiYm9vbGVhblwiIGFzIHVuc2lnbmVkIGNoYXIgKGZvciBXaW5kb3dzKV0sCitbaWYgdGVzdCAieCRlbmFibGV2YWwiICE9IHhubzsgdGhlbgorICBBQ19ERUZJTkUoW1RZUEVERUZfVUNIQVJfQk9PTEVBTl0sKQorZmldKQorCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSlBFR19MSUJfVkVSU0lPTj0iNjM6MDoxIgorY29uZnZfZGlycz0iJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi4iCitjb25maWdfdmVyPQorZm9yIGFjX2RpciBpbiAkY29uZnZfZGlyczsgZG8KKyAgaWYgdGVzdCAtciAkYWNfZGlyL2NvbmZpZy52ZXI7IHRoZW4KKyAgICBjb25maWdfdmVyPSRhY19kaXIvY29uZmlnLnZlcgorICAgIGJyZWFrCisgIGZpCitkb25lCitpZiB0ZXN0IC16ICIkY29uZmlnX3ZlciI7IHRoZW4KKyAgQUNfTVNHX1dBUk4oW2Nhbm5vdCBmaW5kIGNvbmZpZy52ZXIgaW4gJGNvbmZ2X2RpcnNdKQorICBBQ19NU0dfV0FSTihbZGVmYXVsdCB2ZXJzaW9uIG51bWJlciAkSlBFR19MSUJfVkVSU0lPTiBpcyB1c2VkXSkKKyAgQUNfTVNHX0NIRUNLSU5HKFtsaWJqcGVnIHZlcnNpb24gbnVtYmVyIGZvciBsaWJ0b29sXSkKKyAgQUNfTVNHX1JFU1VMVChbJEpQRUdfTElCX1ZFUlNJT05dKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2xpYmpwZWcgdmVyc2lvbiBudW1iZXIgZm9yIGxpYnRvb2xdKQorICAuICRjb25maWdfdmVyCisgIEFDX01TR19SRVNVTFQoWyRKUEVHX0xJQl9WRVJTSU9OXSkKKyAgZWNobyAiY29uZmlndXJlOiBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHZlcnNpb24gbnVtYmVyLCBtb2RpZnkgJGNvbmZpZ192ZXIiIDE+JjIKK2ZpCitBQ19TVUJTVChbSlBFR19MSUJfVkVSU0lPTl0pCisKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmVwYXJlIHRvIG1hc3NhZ2UgbWFrZWZpbGUuY2ZnIGNvcnJlY3RseS4KK2lmIHRlc3QgJGlqZ19jdl9oYXZlX3Byb3RvdHlwZXMgPSB5ZXM7IHRoZW4KKyAgQTJLX0RFUFM9IiIKKyAgQ09NX0EySz0iIyAiCitlbHNlCisgIEEyS19ERVBTPSJhbnNpMmtuciIKKyAgQ09NX0EySz0iIgorZmkKK0FDX1NVQlNUKFtBMktfREVQU10pCitBQ19TVUJTVChbQ09NX0EyS10pCisjIGFuc2kya25yIG5lZWRzIC1EQlNEIGlmIHN0cmluZy5oIGlzIG1pc3NpbmcKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdHJpbmdfaCA9IG5vOyB0aGVuCisgIEFOU0kyS05SRkxBR1M9Ii1EQlNEIgorZWxzZQorICBBTlNJMktOUkZMQUdTPSIiCitmaQorQUNfU1VCU1QoW0FOU0kyS05SRkxBR1NdKQorIyBTdWJzdGl0dXRpb25zIHRvIGVuYWJsZSBvciBkaXNhYmxlIGxpYnRvb2wtcmVsYXRlZCBzdHVmZgoraWYgdGVzdCAkVVNFTElCVE9PTCA9IHllcyAtYSAkaWpnX2N2X2hhdmVfcHJvdG90eXBlcyA9IHllczsgdGhlbgorICBDT01fTFQ9IiIKK2Vsc2UKKyAgQ09NX0xUPSIjICIKK2ZpCitBQ19TVUJTVChbQ09NX0xUXSkKK2lmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0geG5vOyB0aGVuCisgIEZPUkNFX0lOU1RBTExfTElCPSJpbnN0YWxsLWxpYiIKKyAgVU5JTlNUQUxMX0xJQj0idW5pbnN0YWxsLWxpYiIKK2Vsc2UKKyAgRk9SQ0VfSU5TVEFMTF9MSUI9IiIKKyAgVU5JTlNUQUxMX0xJQj0iIgorZmkKK0FDX1NVQlNUKFtGT1JDRV9JTlNUQUxMX0xJQl0pCitBQ19TVUJTVChbVU5JTlNUQUxMX0xJQl0pCisjIFNldCB1cCAtSSBkaXJlY3RpdmVzCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBJTkNMVURFRkxBR1M9Jy1JJChzcmNkaXIpJworZWxzZQorICBJTkNMVURFRkxBR1M9Jy1JLiAtSSQoc3JjZGlyKScKK2ZpCitBQ19TVUJTVChbSU5DTFVERUZMQUdTXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfT1VUUFVUKFtNYWtlZmlsZTptYWtlZmlsZS5jZmddKQpkaWZmIC0tZ2l0IGEvZGpwZWcuYyBiL2RqcGVnLmMKaW5kZXggZTA5OWU5MC4uYTFlYzA1OSAxMDA2NDQKLS0tIGEvZGpwZWcuYworKysgYi9kanBlZy5jCkBAIC01LDYgKzUsMTMgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgZm9yIFNJTUQgZXh0ZW5zaW9uLgorICogTGFzdCBNb2RpZmllZCA6IEF1Z3VzdCAyMywgMjAwNQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29tbWFuZC1saW5lIHVzZXIgaW50ZXJmYWNlIGZvciB0aGUgSlBFRyBkZWNvbXByZXNzb3IuCiAgKiBJdCBzaG91bGQgd29yayBvbiBhbnkgc3lzdGVtIHdpdGggVW5peC0gb3IgTVMtRE9TLXN0eWxlIGNvbW1hbmQgbGluZXMuCiAgKgpAQCAtMTU4LDYgKzE2NSwyMiBAQAogfQogCiAKKyNpZm5kZWYgSlNJTURfTU9ERUlORk9fTk9UX1NVUFBPUlRFRAorCitMT0NBTCh2b2lkKQorcHJpbnRfc2ltZF9pbmZvIChGSUxFICogZmlsZSwgY2hhciAqIGxhYmVsc3RyLCB1bnNpZ25lZCBpbnQgc2ltZCkKK3sKKyAgZnByaW50ZihmaWxlLCAiJXMlcyVzJXMlcyVzXG4iLCBsYWJlbHN0ciwKKwkgIHNpbWQgJiBKU0lNRF9NTVggICA/ICIgTU1YIiAgICA6ICIiLAorCSAgc2ltZCAmIEpTSU1EXzNETk9XID8gIiAzRE5vdyEiIDogIiIsCisJICBzaW1kICYgSlNJTURfU1NFICAgPyAiIFNTRSIgICAgOiAiIiwKKwkgIHNpbWQgJiBKU0lNRF9TU0UyICA/ICIgU1NFMiIgICA6ICIiLAorCSAgc2ltZCA9PSBKU0lNRF9OT05FID8gIiBOT05FIiAgIDogIiIpOworfQorCisjZW5kaWYgLyogIUpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQgKi8KKworCiBMT0NBTChpbnQpCiBwYXJzZV9zd2l0Y2hlcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IGFyZ2MsIGNoYXIgKiphcmd2LAogCQlpbnQgbGFzdF9maWxlX2FyZ19zZWVuLCBib29sZWFuIGZvcl9yZWFsKQpAQCAtMjA4LDYgKzIzMSwxOSBAQAogICAgICAgY2luZm8tPmRlc2lyZWRfbnVtYmVyX29mX2NvbG9ycyA9IHZhbDsKICAgICAgIGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgPSBUUlVFOwogCisjaWZuZGVmIEpTSU1EX01BU0tGVU5DX05PVF9TVVBQT1JURUQKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm5vc2ltZCIgLCA0KSkgeworICAgICAganBlZ19zaW1kX21hc2soKGpfY29tbW9uX3B0cikgY2luZm8sIEpTSU1EX05PTkUsIEpTSU1EX0FMTCk7CisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJub21teCIgICwgMykpIHsKKyAgICAgIGpwZWdfc2ltZF9tYXNrKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKU0lNRF9OT05FLCBKU0lNRF9NTVgpOworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibm8zZG5vdyIsIDMpKSB7CisgICAgICBqcGVnX3NpbWRfbWFzaygoal9jb21tb25fcHRyKSBjaW5mbywgSlNJTURfTk9ORSwgSlNJTURfM0ROT1cpOworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibm9zc2UiICAsIDQpKSB7CisgICAgICBqcGVnX3NpbWRfbWFzaygoal9jb21tb25fcHRyKSBjaW5mbywgSlNJTURfTk9ORSwgSlNJTURfU1NFKTsKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm5vc3NlMiIgLCA2KSkgeworICAgICAganBlZ19zaW1kX21hc2soKGpfY29tbW9uX3B0cikgY2luZm8sIEpTSU1EX05PTkUsIEpTSU1EX1NTRTIpOworI2VuZGlmIC8qICFKU0lNRF9NQVNLRlVOQ19OT1RfU1VQUE9SVEVEICovCisKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImRjdCIsIDIpKSB7CiAgICAgICAvKiBTZWxlY3QgSURDVCBhbGdvcml0aG0uICovCiAgICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwpAQCAtMjQyLDYgKzI3OCwzOCBAQAogICAgICAgaWYgKCEgcHJpbnRlZF92ZXJzaW9uKSB7CiAJZnByaW50ZihzdGRlcnIsICJJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgREpQRUcsIHZlcnNpb24gJXNcbiVzXG4iLAogCQlKVkVSU0lPTiwgSkNPUFlSSUdIVCk7CisJZnByaW50ZihzdGRlcnIsCisJCSJcbng4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwgdmVyc2lvbiAlc1xuXG4iLAorCQlKUEVHX1NJTURFWFRfVkVSX1NUUik7CisjaWZuZGVmIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiU0lNRCBpbnN0cnVjdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0gOiIsCisJCQlqcGVnX3NpbWRfc3VwcG9ydChOVUxMKSk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxuICAgICAgPT09IFNJTUQgT3BlcmF0aW9uIE1vZGVzID09PVxuIik7CisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorCXByaW50X3NpbWRfaW5mbyhzdGRlcnIsICJBY2N1cmF0ZSBpbnRlZ2VyIERDVCAgKC1kY3QgaW50KSAgIDoiLAorCQkJanBlZ19zaW1kX2ludmVyc2VfZGN0KGNpbmZvLCBKRENUX0lTTE9XKSk7CisjZW5kaWYKKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisJcHJpbnRfc2ltZF9pbmZvKHN0ZGVyciwgIkZhc3QgaW50ZWdlciBEQ1QgICAgICAoLWRjdCBmYXN0KSAgOiIsCisJCQlqcGVnX3NpbWRfaW52ZXJzZV9kY3QoY2luZm8sIEpEQ1RfSUZBU1QpKTsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiRmxvYXRpbmctcG9pbnQgRENUICAgICgtZGN0IGZsb2F0KSA6IiwKKwkJCWpwZWdfc2ltZF9pbnZlcnNlX2RjdChjaW5mbywgSkRDVF9GTE9BVCkpOworI2VuZGlmCisjaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAorCXByaW50X3NpbWRfaW5mbyhzdGRlcnIsICJSZWR1Y2VkLXNpemUgRENUICAgICAgKC1zY2FsZSBNL04pIDoiLAorCQkJanBlZ19zaW1kX2ludmVyc2VfZGN0KGNpbmZvLCBKRENUX0ZMT0FUKzEpKTsKKyNlbmRpZgorCXByaW50X3NpbWRfaW5mbyhzdGRlcnIsICJIaWdoLXF1YWxpdHkgdXBzYW1wbGluZyAoZGVmYXVsdCkgIDoiLAorCQkJanBlZ19zaW1kX3Vwc2FtcGxlcihjaW5mbywgVFJVRSkpOworCXByaW50X3NpbWRfaW5mbyhzdGRlcnIsICJMb3ctcXVhbGl0eSB1cHNhbXBsaW5nICgtbm9zbW9vdGgpIDoiLAorCQkJanBlZ19zaW1kX3Vwc2FtcGxlcihjaW5mbywgRkFMU0UpKTsKKwlwcmludF9zaW1kX2luZm8oc3RkZXJyLCAiQ29sb3JzcGFjZSBjb252ZXJzaW9uIChZQ2JDci0+UkdCKSA6IiwKKwkJCWpwZWdfc2ltZF9jb2xvcl9kZWNvbnZlcnRlcihjaW5mbykpOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyNlbmRpZiAvKiAhSlNJTURfTU9ERUlORk9fTk9UX1NVUFBPUlRFRCAqLwogCXByaW50ZWRfdmVyc2lvbiA9IFRSVUU7CiAgICAgICB9CiAgICAgICBjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCsrOwpkaWZmIC0tZ2l0IGEvaW5zdGFsbC1zaCBiL2luc3RhbGwtc2gKaW5kZXggZTg0MzY2OS4uNGQ0YTk1MSAxMDA3NTUKLS0tIGEvaW5zdGFsbC1zaAorKysgYi9pbnN0YWxsLXNoCkBAIC0xLDE5ICsxLDM4IEBACiAjIS9iaW4vc2gKLSMKICMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCi0jIFRoaXMgY29tZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKS4KKworc2NyaXB0dmVyc2lvbj0yMDA1LTA1LTE0LjIyCisKKyMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcworIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKKyMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KICMKLSMgQ29weXJpZ2h0IDE5OTEgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQogIwotIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLSMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKLSMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0Ci0jIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKLSMgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCi0jIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKLSMgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKLSMgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCi0jIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQorIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAorIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KKyMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQorIyB0aXVtLgorIworIworIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgogIwogIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAogIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdApAQCAtMjMsMTMgKzQyLDExIEBACiAjIGZyb20gc2NyYXRjaC4gIEl0IGNhbiBvbmx5IGluc3RhbGwgb25lIGZpbGUgYXQgYSB0aW1lLCBhIHJlc3RyaWN0aW9uCiAjIHNoYXJlZCB3aXRoIG1hbnkgT1MncyBpbnN0YWxsIHByb2dyYW1zLgogCi0KICMgc2V0IERPSVRQUk9HIHRvIGVjaG8gdG8gdGVzdCB0aGlzIHNjcmlwdAogCiAjIERvbid0IHVzZSA6LSBzaW5jZSA0LjNCU0QgYW5kIGVhcmxpZXIgc2hlbGxzIGRvbid0IGxpa2UgaXQuCiBkb2l0PSIke0RPSVRQUk9HLX0iCiAKLQogIyBwdXQgaW4gYWJzb2x1dGUgcGF0aHMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7IG9yIHVzZSBlbnYuIHZhcnMuCiAKIG12cHJvZz0iJHtNVlBST0ctbXZ9IgpAQCAtNDEsMjEwICs1OCwyNjYgQEAKIHJtcHJvZz0iJHtSTVBST0ctcm19IgogbWtkaXJwcm9nPSIke01LRElSUFJPRy1ta2Rpcn0iCiAKLXRyYW5zZm9ybWJhc2VuYW1lPSIiCi10cmFuc2Zvcm1fYXJnPSIiCi1pbnN0Y21kPSIkbXZwcm9nIgogY2htb2RjbWQ9IiRjaG1vZHByb2cgMDc1NSIKLWNob3duY21kPSIiCi1jaGdycGNtZD0iIgotc3RyaXBjbWQ9IiIKK2Nob3duY21kPQorY2hncnBjbWQ9CitzdHJpcGNtZD0KIHJtY21kPSIkcm1wcm9nIC1mIgogbXZjbWQ9IiRtdnByb2ciCi1zcmM9IiIKLWRzdD0iIgotZGlyX2FyZz0iIgorc3JjPQorZHN0PQorZGlyX2FyZz0KK2RzdGFyZz0KK25vX3RhcmdldF9kaXJlY3Rvcnk9CiAKLXdoaWxlIFsgeCIkMSIgIT0geCBdOyBkbwotICAgIGNhc2UgJDEgaW4KLQktYykgaW5zdGNtZD0iJGNwcHJvZyIKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwordXNhZ2U9IlVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQorICAgb3I6ICQwIFtPUFRJT05dLi4uIFNSQ0ZJTEVTLi4uIERJUkVDVE9SWQorICAgb3I6ICQwIFtPUFRJT05dLi4uIC10IERJUkVDVE9SWSBTUkNGSUxFUy4uLgorICAgb3I6ICQwIFtPUFRJT05dLi4uIC1kIERJUkVDVE9SSUVTLi4uCiAKLQktZCkgZGlyX2FyZz10cnVlCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKK0luIHRoZSAxc3QgZm9ybSwgY29weSBTUkNGSUxFIHRvIERTVEZJTEUuCitJbiB0aGUgMm5kIGFuZCAzcmQsIGNvcHkgYWxsIFNSQ0ZJTEVTIHRvIERJUkVDVE9SWS4KK0luIHRoZSA0dGgsIGNyZWF0ZSBESVJFQ1RPUklFUy4KIAotCS1tKSBjaG1vZGNtZD0iJGNobW9kcHJvZyAkMiIKLQkgICAgc2hpZnQKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OworT3B0aW9uczoKKy1jICAgICAgICAgKGlnbm9yZWQpCistZCAgICAgICAgIGNyZWF0ZSBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgZmlsZXMuCistZyBHUk9VUCAgICRjaGdycHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIEdST1VQLgorLW0gTU9ERSAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgorLW8gVVNFUiAgICAkY2hvd25wcm9nIGluc3RhbGxlZCBmaWxlcyB0byBVU0VSLgorLXMgICAgICAgICAkc3RyaXBwcm9nIGluc3RhbGxlZCBmaWxlcy4KKy10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KKy1UICAgICAgICAgcmVwb3J0IGFuIGVycm9yIGlmIERTVEZJTEUgaXMgYSBkaXJlY3RvcnkuCistLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KIAotCS1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKLQkgICAgc2hpZnQKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OworRW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmRzOgorICBDSEdSUFBST0cgQ0hNT0RQUk9HIENIT1dOUFJPRyBDUFBST0cgTUtESVJQUk9HIE1WUFJPRyBSTVBST0cgU1RSSVBQUk9HCisiCiAKLQktZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCi0JICAgIHNoaWZ0Ci0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKK3doaWxlIHRlc3QgLW4gIiQxIjsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1jKSBzaGlmdAorICAgICAgICBjb250aW51ZTs7CiAKLQktcykgc3RyaXBjbWQ9IiRzdHJpcHByb2ciCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKKyAgICAtZCkgZGlyX2FyZz10cnVlCisgICAgICAgIHNoaWZ0CisgICAgICAgIGNvbnRpbnVlOzsKIAotCS10PSopIHRyYW5zZm9ybWFyZz1gZWNobyAkMSB8IHNlZCAncy8tdD0vLydgCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKKyAgICAtZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisgICAgICAgIHNoaWZ0CisgICAgICAgIHNoaWZ0CisgICAgICAgIGNvbnRpbnVlOzsKIAotCS1iPSopIHRyYW5zZm9ybWJhc2VuYW1lPWBlY2hvICQxIHwgc2VkICdzLy1iPS8vJ2AKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OworICAgIC0taGVscCkgZWNobyAiJHVzYWdlIjsgZXhpdCAkPzs7CiAKLQkqKSAgaWYgWyB4IiRzcmMiID0geCBdCi0JICAgIHRoZW4KLQkJc3JjPSQxCi0JICAgIGVsc2UKLQkJIyB0aGlzIGNvbG9uIGlzIHRvIHdvcmsgYXJvdW5kIGEgMzg2QlNEIC9iaW4vc2ggYnVnCi0JCToKLQkJZHN0PSQxCi0JICAgIGZpCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLSAgICBlc2FjCi1kb25lCisgICAgLW0pIGNobW9kY21kPSIkY2htb2Rwcm9nICQyIgorICAgICAgICBzaGlmdAorICAgICAgICBzaGlmdAorICAgICAgICBjb250aW51ZTs7CiAKLWlmIFsgeCIkc3JjIiA9IHggXQotdGhlbgotCWVjaG8gImluc3RhbGw6CW5vIGlucHV0IGZpbGUgc3BlY2lmaWVkIgotCWV4aXQgMQotZWxzZQotCXRydWUKLWZpCisgICAgLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgorICAgICAgICBzaGlmdAorICAgICAgICBzaGlmdAorICAgICAgICBjb250aW51ZTs7CiAKLWlmIFsgeCIkZGlyX2FyZyIgIT0geCBdOyB0aGVuCi0JZHN0PSRzcmMKLQlzcmM9IiIKLQkKLQlpZiBbIC1kICRkc3QgXTsgdGhlbgotCQlpbnN0Y21kPToKLQllbHNlCi0JCWluc3RjbWQ9bWtkaXIKLQlmaQotZWxzZQorICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nCisgICAgICAgIHNoaWZ0CisgICAgICAgIGNvbnRpbnVlOzsKIAotIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGluc3RjbWQgJHNyYyAkZHN0dG1wIiBjb21tYW5kCi0jIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkIAotIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCi0KLQlpZiBbIC1mICRzcmMgLW8gLWQgJHNyYyBdCi0JdGhlbgotCQl0cnVlCi0JZWxzZQotCQllY2hvICJpbnN0YWxsOiAgJHNyYyBkb2VzIG5vdCBleGlzdCIKLQkJZXhpdCAxCi0JZmkKLQkKLQlpZiBbIHgiJGRzdCIgPSB4IF0KLQl0aGVuCi0JCWVjaG8gImluc3RhbGw6CW5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIKLQkJZXhpdCAxCi0JZWxzZQotCQl0cnVlCi0JZmkKLQotIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgaWYgeW91ciBzeXN0ZW0KLSMgZG9lcyBub3QgbGlrZSBkb3VibGUgc2xhc2hlcyBpbiBmaWxlbmFtZXMsIHlvdSBtYXkgbmVlZCB0byBhZGQgc29tZSBsb2dpYwotCi0JaWYgWyAtZCAkZHN0IF0KLQl0aGVuCi0JCWRzdD0iJGRzdCIvYGJhc2VuYW1lICRzcmNgCi0JZWxzZQotCQl0cnVlCi0JZmkKLWZpCi0KLSMjIHRoaXMgc2VkIGNvbW1hbmQgZW11bGF0ZXMgdGhlIGRpcm5hbWUgY29tbWFuZAotZHN0ZGlyPWBlY2hvICRkc3QgfCBzZWQgLWUgJ3MsW14vXSokLCw7cywvJCwsO3MsXiQsLiwnYAotCi0jIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZXhpc3RzLgotIyAgdGhpcyBwYXJ0IGlzIHRha2VuIGZyb20gTm9haCBGcmllZG1hbidzIG1raW5zdGFsbGRpcnMgc2NyaXB0Ci0KLSMgU2tpcCBsb3RzIG9mIHN0YXQgY2FsbHMgaW4gdGhlIHVzdWFsIGNhc2UuCi1pZiBbICEgLWQgIiRkc3RkaXIiIF07IHRoZW4KLWRlZmF1bHRJRlM9JwkKLScKLUlGUz0iJHtJRlMtJHtkZWZhdWx0SUZTfX0iCi0KLW9JRlM9IiR7SUZTfSIKLSMgU29tZSBzaCdzIGNhbid0IGhhbmRsZSBJRlM9LyBmb3Igc29tZSByZWFzb24uCi1JRlM9JyUnCi1zZXQgLSBgZWNobyAke2RzdGRpcn0gfCBzZWQgLWUgJ3NAL0AlQGcnIC1lICdzQF4lQC9AJ2AKLUlGUz0iJHtvSUZTfSIKLQotcGF0aGNvbXA9JycKLQotd2hpbGUgWyAkIyAtbmUgMCBdIDsgZG8KLQlwYXRoY29tcD0iJHtwYXRoY29tcH0kezF9IgorICAgIC10KSBkc3Rhcmc9JDIKIAlzaGlmdAorCXNoaWZ0CisJY29udGludWU7OwogCi0JaWYgWyAhIC1kICIke3BhdGhjb21wfSIgXSA7Ci0gICAgICAgIHRoZW4KLQkJJG1rZGlycHJvZyAiJHtwYXRoY29tcH0iCi0JZWxzZQotCQl0cnVlCi0JZmkKKyAgICAtVCkgbm9fdGFyZ2V0X2RpcmVjdG9yeT10cnVlCisJc2hpZnQKKwljb250aW51ZTs7CiAKLQlwYXRoY29tcD0iJHtwYXRoY29tcH0vIgorICAgIC0tdmVyc2lvbikgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKworICAgICopICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KKwkjIFdoZW4gLXQgaXMgdXNlZCwgdGhlIGRlc3RpbmF0aW9uIGlzIGFscmVhZHkgc3BlY2lmaWVkLgorCXRlc3QgLW4gIiRkaXJfYXJnJGRzdGFyZyIgJiYgYnJlYWsKKyAgICAgICAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgorCWZvciBhcmcKKwlkbworICAgICAgICAgIGlmIHRlc3QgLW4gIiRkc3RhcmciOyB0aGVuCisJICAgICMgJEAgaXMgbm90IGVtcHR5OiBpdCBjb250YWlucyBhdCBsZWFzdCAkYXJnLgorCSAgICBzZXQgZm5vcmQgIiRAIiAiJGRzdGFyZyIKKwkgICAgc2hpZnQgIyBmbm9yZAorCSAgZmkKKwkgIHNoaWZ0ICMgYXJnCisJICBkc3Rhcmc9JGFyZworCWRvbmUKKwlicmVhazs7CisgIGVzYWMKIGRvbmUKKworaWYgdGVzdCAteiAiJDEiOyB0aGVuCisgIGlmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICAgIGVjaG8gIiQwOiBubyBpbnB1dCBmaWxlIHNwZWNpZmllZC4iID4mMgorICAgIGV4aXQgMQorICBmaQorICAjIEl0J3MgT0sgdG8gY2FsbCBgaW5zdGFsbC1zaCAtZCcgd2l0aG91dCBhcmd1bWVudC4KKyAgIyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBjcmVhdGluZyBjb25kaXRpb25hbCBkaXJlY3Rvcmllcy4KKyAgZXhpdCAwCiBmaQogCi1pZiBbIHgiJGRpcl9hcmciICE9IHggXQotdGhlbgotCSRkb2l0ICRpbnN0Y21kICRkc3QgJiYKK2ZvciBzcmMKK2RvCisgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKyAgY2FzZSAkc3JjIGluCisgICAgLSopIHNyYz0uLyRzcmMgOzsKKyAgZXNhYwogCi0JaWYgWyB4IiRjaG93bmNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG93bmNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaSAmJgotCWlmIFsgeCIkY2hncnBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hncnBjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKLQlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpICYmCi0JaWYgWyB4IiRjaG1vZGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG1vZGNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaQotZWxzZQorICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICBkc3Q9JHNyYworICAgIHNyYz0KIAotIyBJZiB3ZSdyZSBnb2luZyB0byByZW5hbWUgdGhlIGZpbmFsIGV4ZWN1dGFibGUsIGRldGVybWluZSB0aGUgbmFtZSBub3cuCisgICAgaWYgdGVzdCAtZCAiJGRzdCI7IHRoZW4KKyAgICAgIG1rZGlyY21kPToKKyAgICAgIGNobW9kY21kPQorICAgIGVsc2UKKyAgICAgIG1rZGlyY21kPSRta2RpcnByb2cKKyAgICBmaQorICBlbHNlCisgICAgIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQKKyAgICAjIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkCisgICAgIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCisgICAgaWYgdGVzdCAhIC1mICIkc3JjIiAmJiB0ZXN0ICEgLWQgIiRzcmMiOyB0aGVuCisgICAgICBlY2hvICIkMDogJHNyYyBkb2VzIG5vdCBleGlzdC4iID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKIAotCWlmIFsgeCIkdHJhbnNmb3JtYXJnIiA9IHggXSAKLQl0aGVuCi0JCWRzdGZpbGU9YGJhc2VuYW1lICRkc3RgCi0JZWxzZQotCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0ICR0cmFuc2Zvcm1iYXNlbmFtZSB8IAotCQkJc2VkICR0cmFuc2Zvcm1hcmdgJHRyYW5zZm9ybWJhc2VuYW1lCi0JZmkKKyAgICBpZiB0ZXN0IC16ICIkZHN0YXJnIjsgdGhlbgorICAgICAgZWNobyAiJDA6IG5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZC4iID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKIAotIyBkb24ndCBhbGxvdyB0aGUgc2VkIGNvbW1hbmQgdG8gY29tcGxldGVseSBlbGltaW5hdGUgdGhlIGZpbGVuYW1lCisgICAgZHN0PSRkc3RhcmcKKyAgICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCisgICAgY2FzZSAkZHN0IGluCisgICAgICAtKikgZHN0PS4vJGRzdCA7OworICAgIGVzYWMKIAotCWlmIFsgeCIkZHN0ZmlsZSIgPSB4IF0gCi0JdGhlbgotCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0YAotCWVsc2UKLQkJdHJ1ZQotCWZpCisgICAgIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgd29uJ3Qgd29yaworICAgICMgaWYgZG91YmxlIHNsYXNoZXMgYXJlbid0IGlnbm9yZWQuCisgICAgaWYgdGVzdCAtZCAiJGRzdCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRub190YXJnZXRfZGlyZWN0b3J5IjsgdGhlbgorCWVjaG8gIiQwOiAkZHN0YXJnOiBJcyBhIGRpcmVjdG9yeSIgPiYyCisJZXhpdCAxCisgICAgICBmaQorICAgICAgZHN0PSRkc3QvYGJhc2VuYW1lICIkc3JjImAKKyAgICBmaQorICBmaQogCi0jIE1ha2UgYSB0ZW1wIGZpbGUgbmFtZSBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKyAgIyBUaGlzIHNlZCBjb21tYW5kIGVtdWxhdGVzIHRoZSBkaXJuYW1lIGNvbW1hbmQuCisgIGRzdGRpcj1gZWNobyAiJGRzdCIgfCBzZWQgLWUgJ3MsLyokLCw7cyxbXi9dKiQsLDtzLC8qJCwsO3MsXiQsLiwnYAogCi0JZHN0dG1wPSRkc3RkaXIvI2luc3QuJCQjCisgICMgTWFrZSBzdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBleGlzdHMuCiAKLSMgTW92ZSBvciBjb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZQorICAjIFNraXAgbG90cyBvZiBzdGF0IGNhbGxzIGluIHRoZSB1c3VhbCBjYXNlLgorICBpZiB0ZXN0ICEgLWQgIiRkc3RkaXIiOyB0aGVuCisgICAgZGVmYXVsdElGUz0nCisJICcKKyAgICBJRlM9IiR7SUZTLSRkZWZhdWx0SUZTfSIKIAotCSRkb2l0ICRpbnN0Y21kICRzcmMgJGRzdHRtcCAmJgorICAgIG9JRlM9JElGUworICAgICMgU29tZSBzaCdzIGNhbid0IGhhbmRsZSBJRlM9LyBmb3Igc29tZSByZWFzb24uCisgICAgSUZTPSclJworICAgIHNldCB4IGBlY2hvICIkZHN0ZGlyIiB8IHNlZCAtZSAnc0AvQCVAZycgLWUgJ3NAXiVAL0AnYAorICAgIHNoaWZ0CisgICAgSUZTPSRvSUZTCiAKLQl0cmFwICJybSAtZiAke2RzdHRtcH0iIDAgJiYKKyAgICBwYXRoY29tcD0KIAotIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzCisgICAgd2hpbGUgdGVzdCAkIyAtbmUgMCA7IGRvCisgICAgICBwYXRoY29tcD0kcGF0aGNvbXAkMQorICAgICAgc2hpZnQKKyAgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorICAgICAgICAkbWtkaXJwcm9nICIkcGF0aGNvbXAiCisJIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgYEZpbGUgZXhpc3QnIGVycm9yIGluIGNhc2Ugc2V2ZXJhbAorCSMgaW5zdGFsbC1zaCBhcmUgY3JlYXRpbmcgdGhlIGRpcmVjdG9yeSBjb25jdXJyZW50bHkuICBUaGlzCisJIyBpcyBPSy4KKwl0ZXN0IC1kICIkcGF0aGNvbXAiIHx8IGV4aXQKKyAgICAgIGZpCisgICAgICBwYXRoY29tcD0kcGF0aGNvbXAvCisgICAgZG9uZQorICBmaQogCi0jIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCi0jIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKLSMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgICRkb2l0ICRta2RpcmNtZCAiJGRzdCIgXAorICAgICAgJiYgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IH0gXAorICAgICAgJiYgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdCI7IH0gXAorICAgICAgJiYgeyB0ZXN0IC16ICIkc3RyaXBjbWQiIHx8ICRkb2l0ICRzdHJpcGNtZCAiJGRzdCI7IH0gXAorICAgICAgJiYgeyB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAiJGRzdCI7IH0KIAotCWlmIFsgeCIkY2hvd25jbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hvd25jbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCi0JaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKLQlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgotCWlmIFsgeCIkY2htb2RjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2htb2RjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCisgIGVsc2UKKyAgICBkc3RmaWxlPWBiYXNlbmFtZSAiJGRzdCJgCiAKLSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAjIE1ha2UgYSBjb3VwbGUgb2YgdGVtcCBmaWxlIG5hbWVzIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorICAgIGRzdHRtcD0kZHN0ZGlyL19pbnN0LiQkXworICAgIHJtdG1wPSRkc3RkaXIvX3JtLiQkXwogCi0JJGRvaXQgJHJtY21kIC1mICRkc3RkaXIvJGRzdGZpbGUgJiYKLQkkZG9pdCAkbXZjbWQgJGRzdHRtcCAkZHN0ZGlyLyRkc3RmaWxlIAorICAgICMgVHJhcCB0byBjbGVhbiB1cCB0aG9zZSB0ZW1wIGZpbGVzIGF0IGV4aXQuCisgICAgdHJhcCAncmV0PSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkcmV0JyAwCisgICAgdHJhcCAnKGV4aXQgJD8pOyBleGl0JyAxIDIgMTMgMTUKIAotZmkgJiYKKyAgICAjIENvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lLgorICAgICRkb2l0ICRjcHByb2cgIiRzcmMiICIkZHN0dG1wIiAmJgogCisgICAgIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzLgorICAgICMKKyAgICAjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCisgICAgIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCisgICAgIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgorICAgICMKKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgfSBcCisgICAgICAmJiB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0dG1wIjsgfSBcCisgICAgICAmJiB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSBcCisgICAgICAmJiB7IHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICIkZHN0dG1wIjsgfSAmJgogCi1leGl0IDAKKyAgICAjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisgICAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3R0bXAiICIkZHN0ZGlyLyRkc3RmaWxlIiAyPi9kZXYvbnVsbCBcCisgICAgICB8fCB7CisJICAgIyBUaGUgcmVuYW1lIGZhaWxlZCwgcGVyaGFwcyBiZWNhdXNlIG12IGNhbid0IHJlbmFtZSBzb21ldGhpbmcgZWxzZQorCSAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90CisJICAgIyBzdXBwb3J0IC1mLgorCisJICAgIyBOb3cgcmVtb3ZlIG9yIG1vdmUgYXNpZGUgYW55IG9sZCBmaWxlIGF0IGRlc3RpbmF0aW9uIGxvY2F0aW9uLgorCSAgICMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisJICAgIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgorCSAgICMgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAgbWlnaHQgZmFpbCBidXQgdGhlIG5ldworCSAgICMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisJICAgeworCSAgICAgaWYgdGVzdCAtZiAiJGRzdGRpci8kZHN0ZmlsZSI7IHRoZW4KKwkgICAgICAgJGRvaXQgJHJtY21kIC1mICIkZHN0ZGlyLyRkc3RmaWxlIiAyPi9kZXYvbnVsbCBcCisJICAgICAgIHx8ICRkb2l0ICRtdmNtZCAtZiAiJGRzdGRpci8kZHN0ZmlsZSIgIiRybXRtcCIgMj4vZGV2L251bGwgXAorCSAgICAgICB8fCB7CisJCSBlY2hvICIkMDogY2Fubm90IHVubGluayBvciByZW5hbWUgJGRzdGRpci8kZHN0ZmlsZSIgPiYyCisJCSAoZXhpdCAxKTsgZXhpdCAxCisJICAgICAgIH0KKwkgICAgIGVsc2UKKwkgICAgICAgOgorCSAgICAgZmkKKwkgICB9ICYmCisKKwkgICAjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisJICAgJGRvaXQgJG12Y21kICIkZHN0dG1wIiAiJGRzdGRpci8kZHN0ZmlsZSIKKwkgfQorICAgIH0KKyAgZmkgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Citkb25lCisKKyMgVGhlIGZpbmFsIGxpdHRsZSB0cmljayB0byAiY29ycmVjdGx5IiBwYXNzIHRoZSBleGl0IHN0YXR1cyB0byB0aGUgZXhpdCB0cmFwLgoreworICAoZXhpdCAwKTsgZXhpdCAwCit9CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvamNjb2xtbXguYXNtIGIvamNjb2xtbXguYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmZjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9qY2NvbG1teC5hc20KQEAgLTAsMCArMSw1MTMgQEAKKzsKKzsgamNjb2xtbXguYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uIChNTVgpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgTGFzdCBNb2RpZmllZCA6IEZlYnJ1YXJ5IDQsIDIwMDYKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzIHx8IFJHQl9QSVhFTFNJWkUgPT0gNAorJWlmZGVmIEpDQ09MT1JfUkdCWUNDX01NWF9TVVBQT1JURUQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIFNDQUxFQklUUwkxNgorCitGXzBfMDgxCWVxdQkgNTMyOQkJCTsgRklYKDAuMDgxMzEpCitGXzBfMTE0CWVxdQkgNzQ3MQkJCTsgRklYKDAuMTE0MDApCitGXzBfMTY4CWVxdQkxMTA1OQkJCTsgRklYKDAuMTY4NzQpCitGXzBfMjUwCWVxdQkxNjM4NAkJCTsgRklYKDAuMjUwMDApCitGXzBfMjk5CWVxdQkxOTU5NQkJCTsgRklYKDAuMjk5MDApCitGXzBfMzMxCWVxdQkyMTcwOQkJCTsgRklYKDAuMzMxMjYpCitGXzBfNDE4CWVxdQkyNzQzOQkJCTsgRklYKDAuNDE4NjkpCitGXzBfNTg3CWVxdQkzODQ3MAkJCTsgRklYKDAuNTg3MDApCitGXzBfMzM3CWVxdQkoRl8wXzU4NyAtIEZfMF8yNTApCTsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9tbXgpCisKK0VYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9tbXgpOgorCitQV19GMDI5OV9GMDMzNwl0aW1lcyAyIGR3ICBGXzBfMjk5LCBGXzBfMzM3CitQV19GMDExNF9GMDI1MAl0aW1lcyAyIGR3ICBGXzBfMTE0LCBGXzBfMjUwCitQV19NRjAxNl9NRjAzMwl0aW1lcyAyIGR3IC1GXzBfMTY4LC1GXzBfMzMxCitQV19NRjAwOF9NRjA0MQl0aW1lcyAyIGR3IC1GXzBfMDgxLC1GXzBfNDE4CitQRF9PTkVIQUxGTTFfQ0oJdGltZXMgMiBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkgLSAxICsgKENFTlRFUkpTQU1QTEUgPDwgU0NBTEVCSVRTKQorUERfT05FSEFMRgl0aW1lcyAyIGRkICAoMSA8PCAoU0NBTEVCSVRTLTEpKQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfcmdiX3ljY19jb252ZXJ0X21teCAoal9jb21wcmVzc19wdHIgY2luZm8sCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7Cis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9jb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgaW5wdXRfYnVmKGIpCShiKSsxMgkJOyBKU0FNUEFSUkFZIGlucHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUElNQUdFIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X3JvdyhiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfcm93CislZGVmaW5lIG51bV9yb3dzKGIpCShiKSsyNAkJOyBpbnQgbnVtX3Jvd3MKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJOAorJWRlZmluZSBnb3RwdHIJCXdrKDApLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX3JnYl95Y2NfY29udmVydF9tbXgpCisKK0VYVE4oanBlZ19yZ2JfeWNjX2NvbnZlcnRfbW14KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWF4CQk7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCisJbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllY3gsIFBPSU5URVIgW2NpbmZvKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbamNzdHJ1Y3RfaW1hZ2Vfd2lkdGgoZWN4KV0JOyBudW1fY29scworCXRlc3QJZWN4LGVjeAorCWp6CW5lYXIgLnJldHVybgorCisJcHVzaAllY3gKKworCW1vdgllc2ksIEpTQU1QSU1BR0UgW291dHB1dF9idWYoZWF4KV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtvdXRwdXRfcm93KGVheCldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbZXNpKzAqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVieCwgSlNBTVBBUlJBWSBbZXNpKzEqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkeCwgSlNBTVBBUlJBWSBbZXNpKzIqU0laRU9GX0pTQU1QQVJSQVldCisJbGVhCWVkaSwgW2VkaStlY3gqU0laRU9GX0pTQU1QUk9XXQorCWxlYQllYngsIFtlYngrZWN4KlNJWkVPRl9KU0FNUFJPV10KKwlsZWEJZWR4LCBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKwlwb3AJZWN4CisKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9idWYoZWF4KV0KKwltb3YJZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisJdGVzdAllYXgsZWF4CisJamxlCW5lYXIgLnJldHVybgorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNocGljCWVheAorCXB1c2gJZWR4CisJcHVzaAllYngKKwlwdXNoCWVkaQorCXB1c2gJZXNpCisJcHVzaAllY3gJCQk7IGNvbAorCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JOyBpbnB0cgorCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCTsgb3V0cHRyMAorCW1vdgllYngsIEpTQU1QUk9XIFtlYnhdCTsgb3V0cHRyMQorCW1vdgllZHgsIEpTQU1QUk9XIFtlZHhdCTsgb3V0cHRyMgorCW1vdnBpYwllYXgsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzIChlYXgpCisKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqYWUJc2hvcnQgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCislaWYgUkdCX1BJWEVMU0laRSA9PSAzIDsgLS0tLS0tLS0tLS0tLS0tCisKKy5jb2x1bW5fbGQxOgorCXB1c2gJZWF4CisJcHVzaAllZHgKKwlsZWEJZWN4LFtlY3grZWN4KjJdCQk7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKwl0ZXN0CWNsLCBTSVpFT0ZfQllURQorCWp6CXNob3J0IC5jb2x1bW5fbGQyCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfQllURQorCXhvcgllYXgsZWF4CisJbW92CWFsLCBCWVRFIFtlc2krZWN4XQorLmNvbHVtbl9sZDI6CisJdGVzdAljbCwgU0laRU9GX1dPUkQKKwlqeglzaG9ydCAuY29sdW1uX2xkNAorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1dPUkQKKwl4b3IJZWR4LGVkeAorCW1vdglkeCwgV09SRCBbZXNpK2VjeF0KKwlzaGwJZWF4LCBXT1JEX0JJVAorCW9yCWVheCxlZHgKKy5jb2x1bW5fbGQ0OgorCW1vdmQJbW1BLGVheAorCXBvcAllZHgKKwlwb3AJZWF4CisJdGVzdAljbCwgU0laRU9GX0RXT1JECisJanoJc2hvcnQgLmNvbHVtbl9sZDgKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9EV09SRAorCW1vdmQJbW1HLCBEV09SRCBbZXNpK2VjeF0KKwlwc2xscQltbUEsIERXT1JEX0JJVAorCXBvcgltbUEsbW1HCisuY29sdW1uX2xkODoKKwl0ZXN0CWNsLCBTSVpFT0ZfTU1XT1JECisJanoJc2hvcnQgLmNvbHVtbl9sZDE2CisJbW92cQltbUcsbW1BCisJbW92cQltbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKwltb3YJZWN4LCBTSVpFT0ZfTU1XT1JECisJam1wCXNob3J0IC5yZ2JfeWNjX2NudgorLmNvbHVtbl9sZDE2OgorCXRlc3QJY2wsIDIqU0laRU9GX01NV09SRAorCW1vdgllY3gsIFNJWkVPRl9NTVdPUkQKKwlqeglzaG9ydCAucmdiX3ljY19jbnYKKwltb3ZxCW1tRixtbUEKKwltb3ZxCW1tQSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorCW1vdnEJbW1HLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisJam1wCXNob3J0IC5yZ2JfeWNjX2NudgorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wOgorCW1vdnEJbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisJbW92cQltbUcsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKwltb3ZxCW1tRiwgTU1XT1JEIFtlc2krMipTSVpFT0ZfTU1XT1JEXQorCisucmdiX3ljY19jbnY6CisJOyBtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorCTsgbW1HPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKKwk7IG1tRj0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCisKKwltb3ZxICAgICAgbW1ELG1tQQorCXBzbGxxICAgICBtbUEsNCpCWVRFX0JJVAk7IG1tQT0oLS0gLS0gLS0gLS0gMDAgMTAgMjAgMDEpCisJcHNybHEgICAgIG1tRCw0KkJZVEVfQklUCTsgbW1EPSgxMSAyMSAwMiAxMiAtLSAtLSAtLSAtLSkKKworCXB1bnBja2hidyBtbUEsbW1HCQk7IG1tQT0oMDAgMDQgMTAgMTQgMjAgMjQgMDEgMDUpCisJcHNsbHEgICAgIG1tRyw0KkJZVEVfQklUCTsgbW1HPSgtLSAtLSAtLSAtLSAyMiAwMyAxMyAyMykKKworCXB1bnBja2xidyBtbUQsbW1GCQk7IG1tRD0oMTEgMTUgMjEgMjUgMDIgMDYgMTIgMTYpCisJcHVucGNraGJ3IG1tRyxtbUYJCTsgbW1HPSgyMiAyNiAwMyAwNyAxMyAxNyAyMyAyNykKKworCW1vdnEgICAgICBtbUUsbW1BCisJcHNsbHEgICAgIG1tQSw0KkJZVEVfQklUCTsgbW1BPSgtLSAtLSAtLSAtLSAwMCAwNCAxMCAxNCkKKwlwc3JscSAgICAgbW1FLDQqQllURV9CSVQJOyBtbUU9KDIwIDI0IDAxIDA1IC0tIC0tIC0tIC0tKQorCisJcHVucGNraGJ3IG1tQSxtbUQJCTsgbW1BPSgwMCAwMiAwNCAwNiAxMCAxMiAxNCAxNikKKwlwc2xscSAgICAgbW1ELDQqQllURV9CSVQJOyBtbUQ9KC0tIC0tIC0tIC0tIDExIDE1IDIxIDI1KQorCisJcHVucGNrbGJ3IG1tRSxtbUcJCTsgbW1FPSgyMCAyMiAyNCAyNiAwMSAwMyAwNSAwNykKKwlwdW5wY2toYncgbW1ELG1tRwkJOyBtbUQ9KDExIDEzIDE1IDE3IDIxIDIzIDI1IDI3KQorCisJcHhvciAgICAgIG1tSCxtbUgKKworCW1vdnEgICAgICBtbUMsbW1BCisJcHVucGNrbGJ3IG1tQSxtbUgJCTsgbW1BPSgwMCAwMiAwNCAwNikKKwlwdW5wY2toYncgbW1DLG1tSAkJOyBtbUM9KDEwIDEyIDE0IDE2KQorCisJbW92cSAgICAgIG1tQixtbUUKKwlwdW5wY2tsYncgbW1FLG1tSAkJOyBtbUU9KDIwIDIyIDI0IDI2KQorCXB1bnBja2hidyBtbUIsbW1ICQk7IG1tQj0oMDEgMDMgMDUgMDcpCisKKwltb3ZxICAgICAgbW1GLG1tRAorCXB1bnBja2xidyBtbUQsbW1ICQk7IG1tRD0oMTEgMTMgMTUgMTcpCisJcHVucGNraGJ3IG1tRixtbUgJCTsgbW1GPSgyMSAyMyAyNSAyNykKKworJWVsc2UgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKwl0ZXN0CWNsLCBTSVpFT0ZfTU1XT1JELzgKKwlqeglzaG9ydCAuY29sdW1uX2xkMgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRC84CisJbW92ZAltbUEsIERXT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCisuY29sdW1uX2xkMjoKKwl0ZXN0CWNsLCBTSVpFT0ZfTU1XT1JELzQKKwlqeglzaG9ydCAuY29sdW1uX2xkNAorCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRC80CisJbW92cQltbUYsbW1BCisJbW92cQltbUEsIE1NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDQ6CisJdGVzdAljbCwgU0laRU9GX01NV09SRC8yCisJbW92CWVjeCwgU0laRU9GX01NV09SRAorCWp6CXNob3J0IC5yZ2JfeWNjX2NudgorCW1vdnEJbW1ELG1tQQorCW1vdnEJbW1DLG1tRgorCW1vdnEJbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisJbW92cQltbUYsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKwlqbXAJc2hvcnQgLnJnYl95Y2NfY252CisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3A6CisJbW92cQltbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKwltb3ZxCW1tRiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorCW1vdnEJbW1ELCBNTVdPUkQgW2VzaSsyKlNJWkVPRl9NTVdPUkRdCisJbW92cQltbUMsIE1NV09SRCBbZXNpKzMqU0laRU9GX01NV09SRF0KKworLnJnYl95Y2NfY252OgorCTsgbW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKwk7IG1tRj0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJOyBtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCTsgbW1DPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworCW1vdnEgICAgICBtbUIsbW1BCisJcHVucGNrbGJ3IG1tQSxtbUYJCTsgbW1BPSgwMCAwMiAxMCAxMiAyMCAyMiAzMCAzMikKKwlwdW5wY2toYncgbW1CLG1tRgkJOyBtbUI9KDAxIDAzIDExIDEzIDIxIDIzIDMxIDMzKQorCisJbW92cSAgICAgIG1tRyxtbUQKKwlwdW5wY2tsYncgbW1ELG1tQwkJOyBtbUQ9KDA0IDA2IDE0IDE2IDI0IDI2IDM0IDM2KQorCXB1bnBja2hidyBtbUcsbW1DCQk7IG1tRz0oMDUgMDcgMTUgMTcgMjUgMjcgMzUgMzcpCisKKwltb3ZxICAgICAgbW1FLG1tQQorCXB1bnBja2x3ZCBtbUEsbW1ECQk7IG1tQT0oMDAgMDIgMDQgMDYgMTAgMTIgMTQgMTYpCisJcHVucGNraHdkIG1tRSxtbUQJCTsgbW1FPSgyMCAyMiAyNCAyNiAzMCAzMiAzNCAzNikKKworCW1vdnEgICAgICBtbUgsbW1CCisJcHVucGNrbHdkIG1tQixtbUcJCTsgbW1CPSgwMSAwMyAwNSAwNyAxMSAxMyAxNSAxNykKKwlwdW5wY2tod2QgbW1ILG1tRwkJOyBtbUg9KDIxIDIzIDI1IDI3IDMxIDMzIDM1IDM3KQorCisJcHhvciAgICAgIG1tRixtbUYKKworCW1vdnEgICAgICBtbUMsbW1BCisJcHVucGNrbGJ3IG1tQSxtbUYJCTsgbW1BPSgwMCAwMiAwNCAwNikKKwlwdW5wY2toYncgbW1DLG1tRgkJOyBtbUM9KDEwIDEyIDE0IDE2KQorCisJbW92cSAgICAgIG1tRCxtbUIKKwlwdW5wY2tsYncgbW1CLG1tRgkJOyBtbUI9KDAxIDAzIDA1IDA3KQorCXB1bnBja2hidyBtbUQsbW1GCQk7IG1tRD0oMTEgMTMgMTUgMTcpCisKKwltb3ZxICAgICAgbW1HLG1tRQorCXB1bnBja2xidyBtbUUsbW1GCQk7IG1tRT0oMjAgMjIgMjQgMjYpCisJcHVucGNraGJ3IG1tRyxtbUYJCTsgbW1HPSgzMCAzMiAzNCAzNikKKworCXB1bnBja2xidyBtbUYsbW1ICisJcHVucGNraGJ3IG1tSCxtbUgKKwlwc3JsdyAgICAgbW1GLEJZVEVfQklUCQk7IG1tRj0oMjEgMjMgMjUgMjcpCisJcHNybHcgICAgIG1tSCxCWVRFX0JJVAkJOyBtbUg9KDMxIDMzIDM1IDM3KQorCislZW5kaWYgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKwk7IG1tMD0oUjAgUjIgUjQgUjYpPVJFLCBtbTI9KEcwIEcyIEc0IEc2KT1HRSwgbW00PShCMCBCMiBCNCBCNik9QkUKKwk7IG1tMT0oUjEgUjMgUjUgUjcpPVJPLCBtbTM9KEcxIEczIEc1IEc3KT1HTywgbW01PShCMSBCMyBCNSBCNyk9Qk8KKworCTsgKE9yaWdpbmFsKQorCTsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisJOyBDYiA9IC0wLjE2ODc0ICogUiAtIDAuMzMxMjYgKiBHICsgMC41MDAwMCAqIEIgKyBDRU5URVJKU0FNUExFCisJOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworCTsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorCTsgQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICsgQ0VOVEVSSlNBTVBMRQorCisJbW92cSAgICAgIE1NV09SRCBbd2soMCldLCBtbTAJOyB3aygwKT1SRQorCW1vdnEgICAgICBNTVdPUkQgW3drKDEpXSwgbW0xCTsgd2soMSk9Uk8KKwltb3ZxICAgICAgTU1XT1JEIFt3aygyKV0sIG1tNAk7IHdrKDIpPUJFCisJbW92cSAgICAgIE1NV09SRCBbd2soMyldLCBtbTUJOyB3aygzKT1CTworCisJbW92cSAgICAgIG1tNixtbTEKKwlwdW5wY2tsd2QgbW0xLG1tMworCXB1bnBja2h3ZCBtbTYsbW0zCisJbW92cSAgICAgIG1tNyxtbTEKKwltb3ZxICAgICAgbW00LG1tNgorCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IG1tNj1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IG1tNz1ST0wqLUZJWCgwLjE2OCkrR09MKi1GSVgoMC4zMzEpCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldIDsgbW00PVJPSCotRklYKDAuMTY4KStHT0gqLUZJWCgwLjMzMSkKKworCW1vdnEgICAgICBNTVdPUkQgW3drKDQpXSwgbW0xCTsgd2soNCk9Uk9MKkZJWCgwLjI5OSkrR09MKkZJWCgwLjMzNykKKwltb3ZxICAgICAgTU1XT1JEIFt3ayg1KV0sIG1tNgk7IHdrKDUpPVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisKKwlweG9yICAgICAgbW0xLG1tMQorCXB4b3IgICAgICBtbTYsbW02CisJcHVucGNrbHdkIG1tMSxtbTUJCTsgbW0xPUJPTAorCXB1bnBja2h3ZCBtbTYsbW01CQk7IG1tNj1CT0gKKwlwc3JsZCAgICAgbW0xLDEJCQk7IG1tMT1CT0wqRklYKDAuNTAwKQorCXBzcmxkICAgICBtbTYsMQkJCTsgbW02PUJPSCpGSVgoMC41MDApCisKKwltb3ZxICAgICAgbW01LFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgbW01PVtQRF9PTkVIQUxGTTFfQ0pdCisKKwlwYWRkZCAgICAgbW03LG1tMQorCXBhZGRkICAgICBtbTQsbW02CisJcGFkZGQgICAgIG1tNyxtbTUKKwlwYWRkZCAgICAgbW00LG1tNQorCXBzcmxkICAgICBtbTcsU0NBTEVCSVRTCQk7IG1tNz1DYk9MCisJcHNybGQgICAgIG1tNCxTQ0FMRUJJVFMJCTsgbW00PUNiT0gKKwlwYWNrc3NkdyAgbW03LG1tNAkJOyBtbTc9Q2JPCisKKwltb3ZxICAgICAgbW0xLCBNTVdPUkQgW3drKDIpXQk7IG1tMT1CRQorCisJbW92cSAgICAgIG1tNixtbTAKKwlwdW5wY2tsd2QgbW0wLG1tMgorCXB1bnBja2h3ZCBtbTYsbW0yCisJbW92cSAgICAgIG1tNSxtbTAKKwltb3ZxICAgICAgbW00LG1tNgorCXBtYWRkd2QgICBtbTAsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IG1tMD1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IG1tNj1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IG1tNT1SRUwqLUZJWCgwLjE2OCkrR0VMKi1GSVgoMC4zMzEpCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldIDsgbW00PVJFSCotRklYKDAuMTY4KStHRUgqLUZJWCgwLjMzMSkKKworCW1vdnEgICAgICBNTVdPUkQgW3drKDYpXSwgbW0wCTsgd2soNik9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKwltb3ZxICAgICAgTU1XT1JEIFt3ayg3KV0sIG1tNgk7IHdrKDcpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisKKwlweG9yICAgICAgbW0wLG1tMAorCXB4b3IgICAgICBtbTYsbW02CisJcHVucGNrbHdkIG1tMCxtbTEJCTsgbW0wPUJFTAorCXB1bnBja2h3ZCBtbTYsbW0xCQk7IG1tNj1CRUgKKwlwc3JsZCAgICAgbW0wLDEJCQk7IG1tMD1CRUwqRklYKDAuNTAwKQorCXBzcmxkICAgICBtbTYsMQkJCTsgbW02PUJFSCpGSVgoMC41MDApCisKKwltb3ZxICAgICAgbW0xLFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgbW0xPVtQRF9PTkVIQUxGTTFfQ0pdCisKKwlwYWRkZCAgICAgbW01LG1tMAorCXBhZGRkICAgICBtbTQsbW02CisJcGFkZGQgICAgIG1tNSxtbTEKKwlwYWRkZCAgICAgbW00LG1tMQorCXBzcmxkICAgICBtbTUsU0NBTEVCSVRTCQk7IG1tNT1DYkVMCisJcHNybGQgICAgIG1tNCxTQ0FMRUJJVFMJCTsgbW00PUNiRUgKKwlwYWNrc3NkdyAgbW01LG1tNAkJOyBtbTU9Q2JFCisKKwlwc2xsdyAgICAgbW03LEJZVEVfQklUCisJcG9yICAgICAgIG1tNSxtbTcJCTsgbW01PUNiCisJbW92cSAgICAgIE1NV09SRCBbZWJ4XSwgbW01CTsgU2F2ZSBDYgorCisJbW92cSAgICAgIG1tMCwgTU1XT1JEIFt3aygzKV0JOyBtbTA9Qk8KKwltb3ZxICAgICAgbW02LCBNTVdPUkQgW3drKDIpXQk7IG1tNj1CRQorCW1vdnEgICAgICBtbTEsIE1NV09SRCBbd2soMSldCTsgbW0xPVJPCisKKwltb3ZxICAgICAgbW00LG1tMAorCXB1bnBja2x3ZCBtbTAsbW0zCisJcHVucGNraHdkIG1tNCxtbTMKKwltb3ZxICAgICAgbW03LG1tMAorCW1vdnEgICAgICBtbTUsbW00CisJcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgbW0wPUJPTCpGSVgoMC4xMTQpK0dPTCpGSVgoMC4yNTApCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgbW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCisJcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgbW03PUJPTCotRklYKDAuMDgxKStHT0wqLUZJWCgwLjQxOCkKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gOyBtbTU9Qk9IKi1GSVgoMC4wODEpK0dPSCotRklYKDAuNDE4KQorCisJbW92cSAgICAgIG1tMyxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0JOyBtbTM9W1BEX09ORUhBTEZdCisKKwlwYWRkZCAgICAgbW0wLCBNTVdPUkQgW3drKDQpXQorCXBhZGRkICAgICBtbTQsIE1NV09SRCBbd2soNSldCisJcGFkZGQgICAgIG1tMCxtbTMKKwlwYWRkZCAgICAgbW00LG1tMworCXBzcmxkICAgICBtbTAsU0NBTEVCSVRTCQk7IG1tMD1ZT0wKKwlwc3JsZCAgICAgbW00LFNDQUxFQklUUwkJOyBtbTQ9WU9ICisJcGFja3NzZHcgIG1tMCxtbTQJCTsgbW0wPVlPCisKKwlweG9yICAgICAgbW0zLG1tMworCXB4b3IgICAgICBtbTQsbW00CisJcHVucGNrbHdkIG1tMyxtbTEJCTsgbW0zPVJPTAorCXB1bnBja2h3ZCBtbTQsbW0xCQk7IG1tND1ST0gKKwlwc3JsZCAgICAgbW0zLDEJCQk7IG1tMz1ST0wqRklYKDAuNTAwKQorCXBzcmxkICAgICBtbTQsMQkJCTsgbW00PVJPSCpGSVgoMC41MDApCisKKwltb3ZxICAgICAgbW0xLFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgbW0xPVtQRF9PTkVIQUxGTTFfQ0pdCisKKwlwYWRkZCAgICAgbW03LG1tMworCXBhZGRkICAgICBtbTUsbW00CisJcGFkZGQgICAgIG1tNyxtbTEKKwlwYWRkZCAgICAgbW01LG1tMQorCXBzcmxkICAgICBtbTcsU0NBTEVCSVRTCQk7IG1tNz1Dck9MCisJcHNybGQgICAgIG1tNSxTQ0FMRUJJVFMJCTsgbW01PUNyT0gKKwlwYWNrc3NkdyAgbW03LG1tNQkJOyBtbTc9Q3JPCisKKwltb3ZxICAgICAgbW0zLCBNTVdPUkQgW3drKDApXQk7IG1tMz1SRQorCisJbW92cSAgICAgIG1tNCxtbTYKKwlwdW5wY2tsd2QgbW02LG1tMgorCXB1bnBja2h3ZCBtbTQsbW0yCisJbW92cSAgICAgIG1tMSxtbTYKKwltb3ZxICAgICAgbW01LG1tNAorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IG1tNj1CRUwqRklYKDAuMTE0KStHRUwqRklYKDAuMjUwKQorCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IG1tND1CRUgqRklYKDAuMTE0KStHRUgqRklYKDAuMjUwKQorCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IG1tMT1CRUwqLUZJWCgwLjA4MSkrR0VMKi1GSVgoMC40MTgpCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgbW01PUJFSCotRklYKDAuMDgxKStHRUgqLUZJWCgwLjQxOCkKKworCW1vdnEgICAgICBtbTIsW0dPVE9GRihlYXgsUERfT05FSEFMRildCTsgbW0yPVtQRF9PTkVIQUxGXQorCisJcGFkZGQgICAgIG1tNiwgTU1XT1JEIFt3ayg2KV0KKwlwYWRkZCAgICAgbW00LCBNTVdPUkQgW3drKDcpXQorCXBhZGRkICAgICBtbTYsbW0yCisJcGFkZGQgICAgIG1tNCxtbTIKKwlwc3JsZCAgICAgbW02LFNDQUxFQklUUwkJOyBtbTY9WUVMCisJcHNybGQgICAgIG1tNCxTQ0FMRUJJVFMJCTsgbW00PVlFSAorCXBhY2tzc2R3ICBtbTYsbW00CQk7IG1tNj1ZRQorCisJcHNsbHcgICAgIG1tMCxCWVRFX0JJVAorCXBvciAgICAgICBtbTYsbW0wCQk7IG1tNj1ZCisJbW92cSAgICAgIE1NV09SRCBbZWRpXSwgbW02CTsgU2F2ZSBZCisKKwlweG9yICAgICAgbW0yLG1tMgorCXB4b3IgICAgICBtbTQsbW00CisJcHVucGNrbHdkIG1tMixtbTMJCTsgbW0yPVJFTAorCXB1bnBja2h3ZCBtbTQsbW0zCQk7IG1tND1SRUgKKwlwc3JsZCAgICAgbW0yLDEJCQk7IG1tMj1SRUwqRklYKDAuNTAwKQorCXBzcmxkICAgICBtbTQsMQkJCTsgbW00PVJFSCpGSVgoMC41MDApCisKKwltb3ZxICAgICAgbW0wLFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgbW0wPVtQRF9PTkVIQUxGTTFfQ0pdCisKKwlwYWRkZCAgICAgbW0xLG1tMgorCXBhZGRkICAgICBtbTUsbW00CisJcGFkZGQgICAgIG1tMSxtbTAKKwlwYWRkZCAgICAgbW01LG1tMAorCXBzcmxkICAgICBtbTEsU0NBTEVCSVRTCQk7IG1tMT1DckVMCisJcHNybGQgICAgIG1tNSxTQ0FMRUJJVFMJCTsgbW01PUNyRUgKKwlwYWNrc3NkdyAgbW0xLG1tNQkJOyBtbTE9Q3JFCisKKwlwc2xsdyAgICAgbW03LEJZVEVfQklUCisJcG9yICAgICAgIG1tMSxtbTcJCTsgbW0xPUNyCisJbW92cSAgICAgIE1NV09SRCBbZWR4XSwgbW0xCTsgU2F2ZSBDcgorCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJYWRkCWVzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9NTVdPUkQJOyBpbnB0cgorCWFkZAllZGksIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgb3V0cHRyMAorCWFkZAllYngsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgb3V0cHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgb3V0cHRyMgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWphZQluZWFyIC5jb2x1bW5sb29wCisJdGVzdAllY3gsZWN4CisJam56CW5lYXIgLmNvbHVtbl9sZDEKKworCXBvcAllY3gJCQk7IGNvbAorCXBvcAllc2kKKwlwb3AJZWRpCisJcG9wCWVieAorCXBvcAllZHgKKwlwb3BwaWMJZWF4CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2J1ZgorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWRlYwllYXgJCQkJOyBudW1fcm93cworCWpnCW5lYXIgLnJvd2xvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCislZW5kaWYgOyBKQ0NPTE9SX1JHQllDQ19NTVhfU1VQUE9SVEVECislZW5kaWYgOyBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0CmRpZmYgLS1naXQgYS9qY2NvbG9yLmMgYi9qY2NvbG9yLmMKaW5kZXggMGE4YTRiNS4uODVmMzA4MyAxMDA2NDQKLS0tIGEvamNjb2xvci5jCisrKyBiL2pjY29sb3IuYwpAQCAtNSwxMiArNSwyMCBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBmb3IgU0lNRCBleHRlbnNpb24uCisgKiBMYXN0IE1vZGlmaWVkIDogSmFudWFyeSA1LCAyMDA2CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgaW5wdXQgY29sb3JzcGFjZSBjb252ZXJzaW9uIHJvdXRpbmVzLgogICovCiAKICNkZWZpbmUgSlBFR19JTlRFUk5BTFMKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqY29sc2FtcC5oIgkJLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgKi8KIAogCiAvKiBQcml2YXRlIHN1Ym9iamVjdCAqLwpAQCAtMzUyLDYgKzM2MCw3IEBACiBqaW5pdF9jb2xvcl9jb252ZXJ0ZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQogewogICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQ7CisgIHVuc2lnbmVkIGludCBzaW1kID0ganBlZ19zaW1kX3N1cHBvcnQoKGpfY29tbW9uX3B0cikgY2luZm8pOwogCiAgIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLApAQCAtNDIwLDggKzQyOSwyMyBAQAogICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMykKICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7CiAgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKSB7Ci0gICAgICBjY29udmVydC0+cHViLnN0YXJ0X3Bhc3MgPSByZ2JfeWNjX3N0YXJ0OwotICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gcmdiX3ljY19jb252ZXJ0OworI2lmIFJHQl9QSVhFTFNJWkUgPT0gMyB8fCBSR0JfUElYRUxTSVpFID09IDQKKyNpZmRlZiBKQ0NPTE9SX1JHQllDQ19TU0UyX1NVUFBPUlRFRAorICAgICAgaWYgKHNpbWQgJiBKU0lNRF9TU0UyICYmCisgICAgICAgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIpKSB7CisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGpwZWdfcmdiX3ljY19jb252ZXJ0X3NzZTI7CisgICAgICB9IGVsc2UKKyNlbmRpZgorI2lmZGVmIEpDQ09MT1JfUkdCWUNDX01NWF9TVVBQT1JURUQKKyAgICAgIGlmIChzaW1kICYgSlNJTURfTU1YKSB7CisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGpwZWdfcmdiX3ljY19jb252ZXJ0X21teDsKKyAgICAgIH0gZWxzZQorI2VuZGlmCisjZW5kaWYgLyogUkdCX1BJWEVMU0laRSA9PSAzIHx8IFJHQl9QSVhFTFNJWkUgPT0gNCAqLworICAgICAgeworICAgICAgICBjY29udmVydC0+cHViLnN0YXJ0X3Bhc3MgPSByZ2JfeWNjX3N0YXJ0OworICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSByZ2JfeWNjX2NvbnZlcnQ7CisgICAgICB9CiAgICAgfSBlbHNlIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyKQogICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gbnVsbF9jb252ZXJ0OwogICAgIGVsc2UKQEAgLTQ1NywzICs0ODEsMjggQEAKICAgICBicmVhazsKICAgfQogfQorCisKKyNpZm5kZWYgSlNJTURfTU9ERUlORk9fTk9UX1NVUFBPUlRFRAorCitHTE9CQUwodW5zaWduZWQgaW50KQoranBlZ19zaW1kX2NvbG9yX2NvbnZlcnRlciAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIHVuc2lnbmVkIGludCBzaW1kID0ganBlZ19zaW1kX3N1cHBvcnQoKGpfY29tbW9uX3B0cikgY2luZm8pOworCisjaWYgUkdCX1BJWEVMU0laRSA9PSAzIHx8IFJHQl9QSVhFTFNJWkUgPT0gNAorI2lmZGVmIEpDQ09MT1JfUkdCWUNDX1NTRTJfU1VQUE9SVEVECisgIGlmIChzaW1kICYgSlNJTURfU1NFMiAmJgorICAgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIpKQorICAgIHJldHVybiBKU0lNRF9TU0UyOworI2VuZGlmCisjaWZkZWYgSkNDT0xPUl9SR0JZQ0NfTU1YX1NVUFBPUlRFRAorICBpZiAoc2ltZCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gSlNJTURfTU1YOworI2VuZGlmCisjZW5kaWYgLyogUkdCX1BJWEVMU0laRSA9PSAzIHx8IFJHQl9QSVhFTFNJWkUgPT0gNCAqLworCisgIHJldHVybiBKU0lNRF9OT05FOworfQorCisjZW5kaWYgLyogIUpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL2pjY29sc3MyLmFzbSBiL2pjY29sc3MyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWFiZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvamNjb2xzczIuYXNtCkBAIC0wLDAgKzEsNTQxIEBACis7Cis7IGpjY29sc3MyLmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoU1NFMikKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBMYXN0IE1vZGlmaWVkIDogRmVicnVhcnkgNCwgMjAwNgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0CislaWZkZWYgSkNDT0xPUl9SR0JZQ0NfU1NFMl9TVVBQT1JURUQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIFNDQUxFQklUUwkxNgorCitGXzBfMDgxCWVxdQkgNTMyOQkJCTsgRklYKDAuMDgxMzEpCitGXzBfMTE0CWVxdQkgNzQ3MQkJCTsgRklYKDAuMTE0MDApCitGXzBfMTY4CWVxdQkxMTA1OQkJCTsgRklYKDAuMTY4NzQpCitGXzBfMjUwCWVxdQkxNjM4NAkJCTsgRklYKDAuMjUwMDApCitGXzBfMjk5CWVxdQkxOTU5NQkJCTsgRklYKDAuMjk5MDApCitGXzBfMzMxCWVxdQkyMTcwOQkJCTsgRklYKDAuMzMxMjYpCitGXzBfNDE4CWVxdQkyNzQzOQkJCTsgRklYKDAuNDE4NjkpCitGXzBfNTg3CWVxdQkzODQ3MAkJCTsgRklYKDAuNTg3MDApCitGXzBfMzM3CWVxdQkoRl8wXzU4NyAtIEZfMF8yNTApCTsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyKQorCitFWFROKGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfc3NlMik6CisKK1BXX0YwMjk5X0YwMzM3CXRpbWVzIDQgZHcgIEZfMF8yOTksIEZfMF8zMzcKK1BXX0YwMTE0X0YwMjUwCXRpbWVzIDQgZHcgIEZfMF8xMTQsIEZfMF8yNTAKK1BXX01GMDE2X01GMDMzCXRpbWVzIDQgZHcgLUZfMF8xNjgsLUZfMF8zMzEKK1BXX01GMDA4X01GMDQxCXRpbWVzIDQgZHcgLUZfMF8wODEsLUZfMF80MTgKK1BEX09ORUhBTEZNMV9DSgl0aW1lcyA0IGRkICAoMSA8PCAoU0NBTEVCSVRTLTEpKSAtIDEgKyAoQ0VOVEVSSlNBTVBMRSA8PCBTQ0FMRUJJVFMpCitQRF9PTkVIQUxGCXRpbWVzIDQgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19yZ2JfeWNjX2NvbnZlcnRfc3NlMiAoal9jb21wcmVzc19wdHIgY2luZm8sCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKKzsKKworJWRlZmluZSBjaW5mbyhiKQkoYikrOAkJOyBqX2NvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBpbnB1dF9idWYoYikJKGIpKzEyCQk7IEpTQU1QQVJSQVkgaW5wdXRfYnVmCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfcm93KGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9yb3cKKyVkZWZpbmUgbnVtX3Jvd3MoYikJKGIpKzI0CQk7IGludCBudW1fcm93cworCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTgKKyVkZWZpbmUgZ290cHRyCQl3aygwKS1TSVpFT0ZfUE9JTlRFUgk7IHZvaWQgKiBnb3RwdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19yZ2JfeWNjX2NvbnZlcnRfc3NlMikKKworRVhUTihqcGVnX3JnYl95Y2NfY29udmVydF9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKKwltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworCisJbW92CWVjeCwgUE9JTlRFUiBbY2luZm8oZWF4KV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtqY3N0cnVjdF9pbWFnZV93aWR0aChlY3gpXQk7IG51bV9jb2xzCisJdGVzdAllY3gsZWN4CisJanoJbmVhciAucmV0dXJuCisKKwlwdXNoCWVjeAorCisJbW92CWVzaSwgSlNBTVBJTUFHRSBbb3V0cHV0X2J1ZihlYXgpXQorCW1vdgllY3gsIEpESU1FTlNJT04gW291dHB1dF9yb3coZWF4KV0KKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtlc2krMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJZWJ4LCBKU0FNUEFSUkFZIFtlc2krMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJZWR4LCBKU0FNUEFSUkFZIFtlc2krMipTSVpFT0ZfSlNBTVBBUlJBWV0KKwlsZWEJZWRpLCBbZWRpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisJbGVhCWVieCwgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQorCWxlYQllZHgsIFtlZHgrZWN4KlNJWkVPRl9KU0FNUFJPV10KKworCXBvcAllY3gKKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2J1ZihlYXgpXQorCW1vdgllYXgsIElOVCBbbnVtX3Jvd3MoZWF4KV0KKwl0ZXN0CWVheCxlYXgKKwlqbGUJbmVhciAucmV0dXJuCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2hwaWMJZWF4CisJcHVzaAllZHgKKwlwdXNoCWVieAorCXB1c2gJZWRpCisJcHVzaAllc2kKKwlwdXNoCWVjeAkJCTsgY29sCisKKwltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQk7IGlucHRyCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JOyBvdXRwdHIwCisJbW92CWVieCwgSlNBTVBST1cgW2VieF0JOyBvdXRwdHIxCisJbW92CWVkeCwgSlNBTVBST1cgW2VkeF0JOyBvdXRwdHIyCisJbW92cGljCWVheCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKworCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYWUJbmVhciAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KKworLmNvbHVtbl9sZDE6CisJcHVzaAllYXgKKwlwdXNoCWVkeAorCWxlYQllY3gsW2VjeCtlY3gqMl0JCTsgaW11bCBlY3gsUkdCX1BJWEVMU0laRQorCXRlc3QJY2wsIFNJWkVPRl9CWVRFCisJanoJc2hvcnQgLmNvbHVtbl9sZDIKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9CWVRFCisJbW92engJZWF4LCBCWVRFIFtlc2krZWN4XQorLmNvbHVtbl9sZDI6CisJdGVzdAljbCwgU0laRU9GX1dPUkQKKwlqeglzaG9ydCAuY29sdW1uX2xkNAorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1dPUkQKKwltb3Z6eAllZHgsIFdPUkQgW2VzaStlY3hdCisJc2hsCWVheCwgV09SRF9CSVQKKwlvcgllYXgsZWR4CisuY29sdW1uX2xkNDoKKwltb3ZkCXhtbUEsZWF4CisJcG9wCWVkeAorCXBvcAllYXgKKwl0ZXN0CWNsLCBTSVpFT0ZfRFdPUkQKKwlqeglzaG9ydCAuY29sdW1uX2xkOAorCXN1YgllY3gsIGJ5dGUgU0laRU9GX0RXT1JECisJbW92ZAl4bW1GLCBfRFdPUkQgW2VzaStlY3hdCisJcHNsbGRxCXhtbUEsIFNJWkVPRl9EV09SRAorCXBvcgl4bW1BLHhtbUYKKy5jb2x1bW5fbGQ4OgorCXRlc3QJY2wsIFNJWkVPRl9NTVdPUkQKKwlqeglzaG9ydCAuY29sdW1uX2xkMTYKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwltb3ZxCXhtbUIsIF9NTVdPUkQgW2VzaStlY3hdCisJcHNsbGRxCXhtbUEsIFNJWkVPRl9NTVdPUkQKKwlwb3IJeG1tQSx4bW1CCisuY29sdW1uX2xkMTY6CisJdGVzdAljbCwgU0laRU9GX1hNTVdPUkQKKwlqeglzaG9ydCAuY29sdW1uX2xkMzIKKwltb3ZkcWEJeG1tRix4bW1BCisJbW92ZHF1CXhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorCW1vdgllY3gsIFNJWkVPRl9YTU1XT1JECisJam1wCXNob3J0IC5yZ2JfeWNjX2NudgorLmNvbHVtbl9sZDMyOgorCXRlc3QJY2wsIDIqU0laRU9GX1hNTVdPUkQKKwltb3YJZWN4LCBTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5yZ2JfeWNjX2NudgorCW1vdmRxYQl4bW1CLHhtbUEKKwltb3ZkcXUJeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisJbW92ZHF1CXhtbUYsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQorCWptcAlzaG9ydCAucmdiX3ljY19jbnYKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcDoKKwltb3ZkcXUJeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisJbW92ZHF1CXhtbUYsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxdQl4bW1CLCBYTU1XT1JEIFtlc2krMipTSVpFT0ZfWE1NV09SRF0KKworLnJnYl95Y2NfY252OgorCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisJOyB4bW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKwk7IHhtbUI9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorCisJbW92ZHFhICAgIHhtbUcseG1tQQorCXBzbGxkcSAgICB4bW1BLDgJOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMikKKwlwc3JsZHEgICAgeG1tRyw4CTsgeG1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKwlwdW5wY2toYncgeG1tQSx4bW1GCTsgeG1tQT0oMDAgMDggMTAgMTggMjAgMjggMDEgMDkgMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEpCisJcHNsbGRxICAgIHhtbUYsOAk7IHhtbUY9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3KQorCisJcHVucGNrbGJ3IHhtbUcseG1tQgk7IHhtbUc9KDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCIDA0IDBDIDE0IDFDIDI0IDJDIDA1IDBEKQorCXB1bnBja2hidyB4bW1GLHhtbUIJOyB4bW1GPSgxNSAxRCAyNSAyRCAwNiAwRSAxNiAxRSAyNiAyRSAwNyAwRiAxNyAxRiAyNyAyRikKKworCW1vdmRxYSAgICB4bW1ELHhtbUEKKwlwc2xsZHEgICAgeG1tQSw4CTsgeG1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMDggMTAgMTggMjAgMjggMDEgMDkpCisJcHNybGRxICAgIHhtbUQsOAk7IHhtbUQ9KDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisJcHVucGNraGJ3IHhtbUEseG1tRwk7IHhtbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEKQorCXBzbGxkcSAgICB4bW1HLDgJOyB4bW1HPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAyMiAyQSAwMyAwQiAxMyAxQiAyMyAyQikKKworCXB1bnBja2xidyB4bW1ELHhtbUYJOyB4bW1EPSgxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSkKKwlwdW5wY2toYncgeG1tRyx4bW1GCTsgeG1tRz0oMjIgMjYgMkEgMkUgMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYpCisKKwltb3ZkcWEgICAgeG1tRSx4bW1BCisJcHNsbGRxICAgIHhtbUEsOAk7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDKQorCXBzcmxkcSAgICB4bW1FLDgJOyB4bW1FPSgyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXB1bnBja2hidyB4bW1BLHhtbUQJOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKwlwc2xsZHEgICAgeG1tRCw4CTsgeG1tRD0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQpCisKKwlwdW5wY2tsYncgeG1tRSx4bW1HCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisJcHVucGNraGJ3IHhtbUQseG1tRwk7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGIDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQorCisJcHhvciAgICAgIHhtbUgseG1tSAorCisJbW92ZHFhICAgIHhtbUMseG1tQQorCXB1bnBja2xidyB4bW1BLHhtbUgJOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSkKKwlwdW5wY2toYncgeG1tQyx4bW1ICTsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisKKwltb3ZkcWEgICAgeG1tQix4bW1FCisJcHVucGNrbGJ3IHhtbUUseG1tSAk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFKQorCXB1bnBja2hidyB4bW1CLHhtbUgJOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKworCW1vdmRxYSAgICB4bW1GLHhtbUQKKwlwdW5wY2tsYncgeG1tRCx4bW1ICTsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisJcHVucGNraGJ3IHhtbUYseG1tSAk7IHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQorCislZWxzZSA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKy5jb2x1bW5fbGQxOgorCXRlc3QJY2wsIFNJWkVPRl9YTU1XT1JELzE2CisJanoJc2hvcnQgLmNvbHVtbl9sZDIKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzE2CisJbW92ZAl4bW1BLCBfRFdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQyOgorCXRlc3QJY2wsIFNJWkVPRl9YTU1XT1JELzgKKwlqeglzaG9ydCAuY29sdW1uX2xkNAorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAorCW1vdnEJeG1tRSwgX01NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorCXBzbGxkcQl4bW1BLCBTSVpFT0ZfTU1XT1JECisJcG9yCXhtbUEseG1tRQorLmNvbHVtbl9sZDQ6CisJdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvNAorCWp6CXNob3J0IC5jb2x1bW5fbGQ4CisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisJbW92ZHFhCXhtbUUseG1tQQorCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCisuY29sdW1uX2xkODoKKwl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC8yCisJbW92CWVjeCwgU0laRU9GX1hNTVdPUkQKKwlqeglzaG9ydCAucmdiX3ljY19jbnYKKwltb3ZkcWEJeG1tRix4bW1BCisJbW92ZHFhCXhtbUgseG1tRQorCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcXUJeG1tRSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisJam1wCXNob3J0IC5yZ2JfeWNjX2NudgorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wOgorCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcXUJeG1tRSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisJbW92ZHF1CXhtbUYsIFhNTVdPUkQgW2VzaSsyKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxdQl4bW1ILCBYTU1XT1JEIFtlc2krMypTSVpFT0ZfWE1NV09SRF0KKworLnJnYl95Y2NfY252OgorCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJOyB4bW1FPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKwk7IHhtbUY9KDA4IDE4IDI4IDM4IDA5IDE5IDI5IDM5IDBBIDFBIDJBIDNBIDBCIDFCIDJCIDNCKQorCTsgeG1tSD0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisKKwltb3ZkcWEgICAgeG1tRCx4bW1BCisJcHVucGNrbGJ3IHhtbUEseG1tRQk7IHhtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDMwIDM0IDAxIDA1IDExIDE1IDIxIDI1IDMxIDM1KQorCXB1bnBja2hidyB4bW1ELHhtbUUJOyB4bW1EPSgwMiAwNiAxMiAxNiAyMiAyNiAzMiAzNiAwMyAwNyAxMyAxNyAyMyAyNyAzMyAzNykKKworCW1vdmRxYSAgICB4bW1DLHhtbUYKKwlwdW5wY2tsYncgeG1tRix4bW1ICTsgeG1tRj0oMDggMEMgMTggMUMgMjggMkMgMzggM0MgMDkgMEQgMTkgMUQgMjkgMkQgMzkgM0QpCisJcHVucGNraGJ3IHhtbUMseG1tSAk7IHhtbUM9KDBBIDBFIDFBIDFFIDJBIDJFIDNBIDNFIDBCIDBGIDFCIDFGIDJCIDJGIDNCIDNGKQorCisJbW92ZHFhICAgIHhtbUIseG1tQQorCXB1bnBja2x3ZCB4bW1BLHhtbUYJOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAzMCAzNCAzOCAzQykKKwlwdW5wY2tod2QgeG1tQix4bW1GCTsgeG1tQj0oMDEgMDUgMDkgMEQgMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMzEgMzUgMzkgM0QpCisKKwltb3ZkcWEgICAgeG1tRyx4bW1ECisJcHVucGNrbHdkIHhtbUQseG1tQwk7IHhtbUQ9KDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFIDIyIDI2IDJBIDJFIDMyIDM2IDNBIDNFKQorCXB1bnBja2h3ZCB4bW1HLHhtbUMJOyB4bW1HPSgwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRiAzMyAzNyAzQiAzRikKKworCW1vdmRxYSAgICB4bW1FLHhtbUEKKwlwdW5wY2tsYncgeG1tQSx4bW1ECTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisJcHVucGNraGJ3IHhtbUUseG1tRAk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFIDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFKQorCisJbW92ZHFhICAgIHhtbUgseG1tQgorCXB1bnBja2xidyB4bW1CLHhtbUcJOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKwlwdW5wY2toYncgeG1tSCx4bW1HCTsgeG1tSD0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YpCisKKwlweG9yICAgICAgeG1tRix4bW1GCisKKwltb3ZkcWEgICAgeG1tQyx4bW1BCisJcHVucGNrbGJ3IHhtbUEseG1tRgk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorCXB1bnBja2hidyB4bW1DLHhtbUYJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKworCW1vdmRxYSAgICB4bW1ELHhtbUIKKwlwdW5wY2tsYncgeG1tQix4bW1GCTsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisJcHVucGNraGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQorCisJbW92ZHFhICAgIHhtbUcseG1tRQorCXB1bnBja2xidyB4bW1FLHhtbUYJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKKwlwdW5wY2toYncgeG1tRyx4bW1GCTsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCisKKwlwdW5wY2tsYncgeG1tRix4bW1ICisJcHVucGNraGJ3IHhtbUgseG1tSAorCXBzcmx3ICAgICB4bW1GLEJZVEVfQklUCTsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisJcHNybHcgICAgIHhtbUgsQllURV9CSVQJOyB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKKworJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisJOyB4bW0wPVIoMDI0NjhBQ0UpPVJFLCB4bW0yPUcoMDI0NjhBQ0UpPUdFLCB4bW00PUIoMDI0NjhBQ0UpPUJFCisJOyB4bW0xPVIoMTM1NzlCREYpPVJPLCB4bW0zPUcoMTM1NzlCREYpPUdPLCB4bW01PUIoMTM1NzlCREYpPUJPCisKKwk7IChPcmlnaW5hbCkKKwk7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorCTsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorCTsgQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICsgQ0VOVEVSSlNBTVBMRQorCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjMzNzAwICogRyArIDAuMTE0MDAgKiBCICsgMC4yNTAwMCAqIEcKKwk7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKwk7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKKworCW1vdmRxYSAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB3aygwKT1SRQorCW1vdmRxYSAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTEJOyB3aygxKT1STworCW1vdmRxYSAgICBYTU1XT1JEIFt3aygyKV0sIHhtbTQJOyB3aygyKT1CRQorCW1vdmRxYSAgICBYTU1XT1JEIFt3aygzKV0sIHhtbTUJOyB3aygzKT1CTworCisJbW92ZHFhICAgIHhtbTYseG1tMQorCXB1bnBja2x3ZCB4bW0xLHhtbTMKKwlwdW5wY2tod2QgeG1tNix4bW0zCisJbW92ZHFhICAgIHhtbTcseG1tMQorCW1vdmRxYSAgICB4bW00LHhtbTYKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgeG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyB4bW02PVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisJcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IHhtbTc9Uk9MKi1GSVgoMC4xNjgpK0dPTCotRklYKDAuMzMxKQorCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gOyB4bW00PVJPSCotRklYKDAuMTY4KStHT0gqLUZJWCgwLjMzMSkKKworCW1vdmRxYSAgICBYTU1XT1JEIFt3ayg0KV0sIHhtbTEJOyB3ayg0KT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorCW1vdmRxYSAgICBYTU1XT1JEIFt3ayg1KV0sIHhtbTYJOyB3ayg1KT1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorCisJcHhvciAgICAgIHhtbTEseG1tMQorCXB4b3IgICAgICB4bW02LHhtbTYKKwlwdW5wY2tsd2QgeG1tMSx4bW01CQk7IHhtbTE9Qk9MCisJcHVucGNraHdkIHhtbTYseG1tNQkJOyB4bW02PUJPSAorCXBzcmxkICAgICB4bW0xLDEJCTsgeG1tMT1CT0wqRklYKDAuNTAwKQorCXBzcmxkICAgICB4bW02LDEJCTsgeG1tNj1CT0gqRklYKDAuNTAwKQorCisJbW92ZHFhICAgIHhtbTUsW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gOyB4bW01PVtQRF9PTkVIQUxGTTFfQ0pdCisKKwlwYWRkZCAgICAgeG1tNyx4bW0xCisJcGFkZGQgICAgIHhtbTQseG1tNgorCXBhZGRkICAgICB4bW03LHhtbTUKKwlwYWRkZCAgICAgeG1tNCx4bW01CisJcHNybGQgICAgIHhtbTcsU0NBTEVCSVRTCTsgeG1tNz1DYk9MCisJcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTCTsgeG1tND1DYk9ICisJcGFja3NzZHcgIHhtbTcseG1tNAkJOyB4bW03PUNiTworCisJbW92ZHFhICAgIHhtbTEsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTE9QkUKKworCW1vdmRxYSAgICB4bW02LHhtbTAKKwlwdW5wY2tsd2QgeG1tMCx4bW0yCisJcHVucGNraHdkIHhtbTYseG1tMgorCW1vdmRxYSAgICB4bW01LHhtbTAKKwltb3ZkcWEgICAgeG1tNCx4bW02CisJcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IHhtbTA9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKwlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgeG1tNj1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gOyB4bW01PVJFTCotRklYKDAuMTY4KStHRUwqLUZJWCgwLjMzMSkKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldIDsgeG1tND1SRUgqLUZJWCgwLjE2OCkrR0VIKi1GSVgoMC4zMzEpCisKKwltb3ZkcWEgICAgWE1NV09SRCBbd2soNildLCB4bW0wCTsgd2soNik9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKwltb3ZkcWEgICAgWE1NV09SRCBbd2soNyldLCB4bW02CTsgd2soNyk9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKworCXB4b3IgICAgICB4bW0wLHhtbTAKKwlweG9yICAgICAgeG1tNix4bW02CisJcHVucGNrbHdkIHhtbTAseG1tMQkJOyB4bW0wPUJFTAorCXB1bnBja2h3ZCB4bW02LHhtbTEJCTsgeG1tNj1CRUgKKwlwc3JsZCAgICAgeG1tMCwxCQk7IHhtbTA9QkVMKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgeG1tNiwxCQk7IHhtbTY9QkVIKkZJWCgwLjUwMCkKKworCW1vdmRxYSAgICB4bW0xLFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgeG1tMT1bUERfT05FSEFMRk0xX0NKXQorCisJcGFkZGQgICAgIHhtbTUseG1tMAorCXBhZGRkICAgICB4bW00LHhtbTYKKwlwYWRkZCAgICAgeG1tNSx4bW0xCisJcGFkZGQgICAgIHhtbTQseG1tMQorCXBzcmxkICAgICB4bW01LFNDQUxFQklUUwk7IHhtbTU9Q2JFTAorCXBzcmxkICAgICB4bW00LFNDQUxFQklUUwk7IHhtbTQ9Q2JFSAorCXBhY2tzc2R3ICB4bW01LHhtbTQJCTsgeG1tNT1DYkUKKworCXBzbGx3ICAgICB4bW03LEJZVEVfQklUCisJcG9yICAgICAgIHhtbTUseG1tNwkJOyB4bW01PUNiCisJbW92ZHFhICAgIFhNTVdPUkQgW2VieF0sIHhtbTUJOyBTYXZlIENiCisKKwltb3ZkcWEgICAgeG1tMCwgWE1NV09SRCBbd2soMyldCTsgeG1tMD1CTworCW1vdmRxYSAgICB4bW02LCBYTU1XT1JEIFt3aygyKV0JOyB4bW02PUJFCisJbW92ZHFhICAgIHhtbTEsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTE9Uk8KKworCW1vdmRxYSAgICB4bW00LHhtbTAKKwlwdW5wY2tsd2QgeG1tMCx4bW0zCisJcHVucGNraHdkIHhtbTQseG1tMworCW1vdmRxYSAgICB4bW03LHhtbTAKKwltb3ZkcWEgICAgeG1tNSx4bW00CisJcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTA9Qk9MKkZJWCgwLjExNCkrR09MKkZJWCgwLjI1MCkKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgeG1tND1CT0gqRklYKDAuMTE0KStHT0gqRklYKDAuMjUwKQorCXBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gOyB4bW03PUJPTCotRklYKDAuMDgxKStHT0wqLUZJWCgwLjQxOCkKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgeG1tNT1CT0gqLUZJWCgwLjA4MSkrR09IKi1GSVgoMC40MTgpCisKKwltb3ZkcWEgICAgeG1tMyxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0JOyB4bW0zPVtQRF9PTkVIQUxGXQorCisJcGFkZGQgICAgIHhtbTAsIFhNTVdPUkQgW3drKDQpXQorCXBhZGRkICAgICB4bW00LCBYTU1XT1JEIFt3ayg1KV0KKwlwYWRkZCAgICAgeG1tMCx4bW0zCisJcGFkZGQgICAgIHhtbTQseG1tMworCXBzcmxkICAgICB4bW0wLFNDQUxFQklUUwk7IHhtbTA9WU9MCisJcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTCTsgeG1tND1ZT0gKKwlwYWNrc3NkdyAgeG1tMCx4bW00CQk7IHhtbTA9WU8KKworCXB4b3IgICAgICB4bW0zLHhtbTMKKwlweG9yICAgICAgeG1tNCx4bW00CisJcHVucGNrbHdkIHhtbTMseG1tMQkJOyB4bW0zPVJPTAorCXB1bnBja2h3ZCB4bW00LHhtbTEJCTsgeG1tND1ST0gKKwlwc3JsZCAgICAgeG1tMywxCQk7IHhtbTM9Uk9MKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgeG1tNCwxCQk7IHhtbTQ9Uk9IKkZJWCgwLjUwMCkKKworCW1vdmRxYSAgICB4bW0xLFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgeG1tMT1bUERfT05FSEFMRk0xX0NKXQorCisJcGFkZGQgICAgIHhtbTcseG1tMworCXBhZGRkICAgICB4bW01LHhtbTQKKwlwYWRkZCAgICAgeG1tNyx4bW0xCisJcGFkZGQgICAgIHhtbTUseG1tMQorCXBzcmxkICAgICB4bW03LFNDQUxFQklUUwk7IHhtbTc9Q3JPTAorCXBzcmxkICAgICB4bW01LFNDQUxFQklUUwk7IHhtbTU9Q3JPSAorCXBhY2tzc2R3ICB4bW03LHhtbTUJCTsgeG1tNz1Dck8KKworCW1vdmRxYSAgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0zPVJFCisKKwltb3ZkcWEgICAgeG1tNCx4bW02CisJcHVucGNrbHdkIHhtbTYseG1tMgorCXB1bnBja2h3ZCB4bW00LHhtbTIKKwltb3ZkcWEgICAgeG1tMSx4bW02CisJbW92ZHFhICAgIHhtbTUseG1tNAorCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyB4bW02PUJFTCpGSVgoMC4xMTQpK0dFTCpGSVgoMC4yNTApCisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgeG1tMT1CRUwqLUZJWCgwLjA4MSkrR0VMKi1GSVgoMC40MTgpCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IHhtbTU9QkVIKi1GSVgoMC4wODEpK0dFSCotRklYKDAuNDE4KQorCisJbW92ZHFhICAgIHhtbTIsW0dPVE9GRihlYXgsUERfT05FSEFMRildCTsgeG1tMj1bUERfT05FSEFMRl0KKworCXBhZGRkICAgICB4bW02LCBYTU1XT1JEIFt3ayg2KV0KKwlwYWRkZCAgICAgeG1tNCwgWE1NV09SRCBbd2soNyldCisJcGFkZGQgICAgIHhtbTYseG1tMgorCXBhZGRkICAgICB4bW00LHhtbTIKKwlwc3JsZCAgICAgeG1tNixTQ0FMRUJJVFMJOyB4bW02PVlFTAorCXBzcmxkICAgICB4bW00LFNDQUxFQklUUwk7IHhtbTQ9WUVICisJcGFja3NzZHcgIHhtbTYseG1tNAkJOyB4bW02PVlFCisKKwlwc2xsdyAgICAgeG1tMCxCWVRFX0JJVAorCXBvciAgICAgICB4bW02LHhtbTAJCTsgeG1tNj1ZCisJbW92ZHFhICAgIFhNTVdPUkQgW2VkaV0sIHhtbTYJOyBTYXZlIFkKKworCXB4b3IgICAgICB4bW0yLHhtbTIKKwlweG9yICAgICAgeG1tNCx4bW00CisJcHVucGNrbHdkIHhtbTIseG1tMwkJOyB4bW0yPVJFTAorCXB1bnBja2h3ZCB4bW00LHhtbTMJCTsgeG1tND1SRUgKKwlwc3JsZCAgICAgeG1tMiwxCQk7IHhtbTI9UkVMKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgeG1tNCwxCQk7IHhtbTQ9UkVIKkZJWCgwLjUwMCkKKworCW1vdmRxYSAgICB4bW0wLFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgeG1tMD1bUERfT05FSEFMRk0xX0NKXQorCisJcGFkZGQgICAgIHhtbTEseG1tMgorCXBhZGRkICAgICB4bW01LHhtbTQKKwlwYWRkZCAgICAgeG1tMSx4bW0wCisJcGFkZGQgICAgIHhtbTUseG1tMAorCXBzcmxkICAgICB4bW0xLFNDQUxFQklUUwk7IHhtbTE9Q3JFTAorCXBzcmxkICAgICB4bW01LFNDQUxFQklUUwk7IHhtbTU9Q3JFSAorCXBhY2tzc2R3ICB4bW0xLHhtbTUJCTsgeG1tMT1DckUKKworCXBzbGx3ICAgICB4bW03LEJZVEVfQklUCisJcG9yICAgICAgIHhtbTEseG1tNwkJOyB4bW0xPUNyCisJbW92ZHFhICAgIFhNTVdPUkQgW2VkeF0sIHhtbTEJOyBTYXZlIENyCisKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJYWRkCWVzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjAKKwlhZGQJZWJ4LCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjEKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjIKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamFlCW5lYXIgLmNvbHVtbmxvb3AKKwl0ZXN0CWVjeCxlY3gKKwlqbnoJbmVhciAuY29sdW1uX2xkMQorCisJcG9wCWVjeAkJCTsgY29sCisJcG9wCWVzaQorCXBvcAllZGkKKwlwb3AJZWJ4CisJcG9wCWVkeAorCXBvcHBpYwllYXgKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfYnVmCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWFkZAllZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJZGVjCWVheAkJCQk7IG51bV9yb3dzCisJamcJbmVhciAucm93bG9vcAorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSkNDT0xPUl9SR0JZQ0NfU1NFMl9TVVBQT1JURUQKKyVlbmRpZiA7IFJHQl9QSVhFTFNJWkUgPT0gMyB8fCBSR0JfUElYRUxTSVpFID09IDQKZGlmZiAtLWdpdCBhL2pjZGN0bWdyLmMgYi9qY2RjdG1nci5jCmluZGV4IDYxZmE3OWIuLjNhODllYjQgMTAwNjQ0Ci0tLSBhL2pjZGN0bWdyLmMKKysrIGIvamNkY3RtZ3IuYwpAQCAtNSw2ICs1LDEzIEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIGZvciBTSU1EIGV4dGVuc2lvbi4KKyAqIExhc3QgTW9kaWZpZWQgOiBEZWNlbWJlciAyNCwgMjAwNQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmb3J3YXJkLURDVCBtYW5hZ2VtZW50IGxvZ2ljLgogICogVGhpcyBjb2RlIHNlbGVjdHMgYSBwYXJ0aWN1bGFyIERDVCBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkLAogICogYW5kIGl0IHBlcmZvcm1zIHJlbGF0ZWQgaG91c2VrZWVwaW5nIGNob3JlcyBpbmNsdWRpbmcgY29lZmZpY2llbnQKQEAgLTI0LDYgKzMxLDggQEAKIAogICAvKiBQb2ludGVyIHRvIHRoZSBEQ1Qgcm91dGluZSBhY3R1YWxseSBpbiB1c2UgKi8KICAgZm9yd2FyZF9EQ1RfbWV0aG9kX3B0ciBkb19kY3Q7CisgIGNvbnZzYW1wX2ludF9tZXRob2RfcHRyIGNvbnZzYW1wOworICBxdWFudGl6ZV9pbnRfbWV0aG9kX3B0ciBxdWFudGl6ZTsKIAogICAvKiBUaGUgYWN0dWFsIHBvc3QtRENUIGRpdmlzb3JzIC0tLSBub3QgaWRlbnRpY2FsIHRvIHRoZSBxdWFudCB0YWJsZQogICAgKiBlbnRyaWVzLCBiZWNhdXNlIG9mIHNjYWxpbmcgKGVzcGVjaWFsbHkgZm9yIGFuIHVubm9ybWFsaXplZCBEQ1QpLgpAQCAtMzQsMTIgKzQzLDc1IEBACiAjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAogICAvKiBTYW1lIGFzIGFib3ZlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgY2FzZS4gKi8KICAgZmxvYXRfRENUX21ldGhvZF9wdHIgZG9fZmxvYXRfZGN0OworICBjb252c2FtcF9mbG9hdF9tZXRob2RfcHRyIGZsb2F0X2NvbnZzYW1wOworICBxdWFudGl6ZV9mbG9hdF9tZXRob2RfcHRyIGZsb2F0X3F1YW50aXplOwogICBGQVNUX0ZMT0FUICogZmxvYXRfZGl2aXNvcnNbTlVNX1FVQU5UX1RCTFNdOwogI2VuZGlmCiB9IG15X2ZkY3RfY29udHJvbGxlcjsKIAogdHlwZWRlZiBteV9mZGN0X2NvbnRyb2xsZXIgKiBteV9mZGN0X3B0cjsKIAorLyoKKyAqIFNJTUQgRXh0OiBNb3N0IG9mIFNTRS9TU0UyIGluc3RydWN0aW9ucyByZXF1aXJlIHRoYXQgdGhlIG1lbW9yeSBhZGRyZXNzCisgKiBpcyBhbGlnbmVkIHRvIGEgMTYtYnl0ZSBib3VuZGFyeTsgaWYgbm90LCBhIGdlbmVyYWwtcHJvdGVjdGlvbiBleGNlcHRpb24KKyAqICgjR1ApIGlzIGdlbmVyYXRlZC4KKyAqLworCisjZGVmaW5lIEFMSUdOX1NJWkUJMTYJCS8qIHNpemVvZiBTU0UvU1NFMiByZWdpc3RlciAqLworI2RlZmluZSBBTElHTl9NRU0ocCxhKQkoKHZvaWQgKikgKCgoc2l6ZV90KSAocCkgKyAoYSkgLSAxKSAmIC0oYSkpKQorCisjaWZkZWYgSkZEQ1RfSU5UX1FVQU5USVpFX1dJVEhfRElWSVNJT04KKyN1bmRlZiBqcGVnX3F1YW50aXplX2ludAorI3VuZGVmIGpwZWdfcXVhbnRpemVfaW50X21teAorI3VuZGVmIGpwZWdfcXVhbnRpemVfaW50X3NzZTIKKyNkZWZpbmUganBlZ19xdWFudGl6ZV9pbnQgICAgICAganBlZ19xdWFudGl6ZV9pZGl2CisjZGVmaW5lIGpwZWdfcXVhbnRpemVfaW50X21teCAgIGpwZWdfcXVhbnRpemVfaWRpdgorI2RlZmluZSBqcGVnX3F1YW50aXplX2ludF9zc2UyICBqcGVnX3F1YW50aXplX2lkaXYKKyNlbmRpZgorCisKKyNpZm5kZWYgSkZEQ1RfSU5UX1FVQU5USVpFX1dJVEhfRElWSVNJT04KKworLyoKKyAqIFNJTUQgRXh0OiBjb21wdXRlIHRoZSByZWNpcHJvY2FsIG9mIHRoZSBkaXZpc29yCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhbiBhbGdvcml0aG0gZGVzY3JpYmVkIGluCisgKiAgICJIb3cgdG8gb3B0aW1pemUgZm9yIHRoZSBQZW50aXVtIGZhbWlseSBvZiBtaWNyb3Byb2Nlc3NvcnMiCisgKiAgIChodHRwOi8vd3d3LmFnbmVyLm9yZy9hc3NlbS8pLgorICovCisKK0xPQ0FMKHZvaWQpCitjb21wdXRlX3JlY2lwcm9jYWwgKERDVEVMRU0gZGl2aXNvciwgRENURUxFTSAqIGR0YmwpCit7CisgIHVuc2lnbmVkIGxvbmcgZCA9ICgodW5zaWduZWQgbG9uZykgZGl2aXNvcikgJiAweDAwMDBGRkZGOworICB1bnNpZ25lZCBsb25nIGZxLCBmcjsKKyAgaW50IGIsIHIsIGM7CisKKyAgZm9yIChiID0gMDsgKDFVTCA8PCBiKSA8PSBkOyBiKyspIDsKKworICByICA9IDE2ICsgKC0tYik7CisgIGZxID0gKDFVTCA8PCByKSAvIGQ7CisgIGZyID0gKDFVTCA8PCByKSAlIGQ7CisgIHIgLT0gMTY7CisgIGMgID0gMDsKKworICBpZiAoZnIgPT0gMCkgeworICAgIGZxID4+PSAxOworICAgIHItLTsKKyAgfSBlbHNlIGlmIChmciA8PSAoZCAvIDIpKSB7CisgICAgYysrOworICB9IGVsc2UgeworICAgIGZxKys7CisgIH0KKworICBkdGJsW0RDVFNJWkUyICogMF0gPSAoRENURUxFTSkgZnE7CQkvKiByZWNpcHJvY2FsICovCisgIGR0YmxbRENUU0laRTIgKiAxXSA9IChEQ1RFTEVNKSAoYyArIChkIC8gMikpOwkvKiBjb3JyZWN0aW9uICsgcm91bmRmYWN0b3IgKi8KKyAgZHRibFtEQ1RTSVpFMiAqIDJdID0gKERDVEVMRU0pICgxIDw8ICgxNiAtIChyICsgMSArIDEpKSk7CS8qIHNjYWxlICovCisgIGR0YmxbRENUU0laRTIgKiAzXSA9IChEQ1RFTEVNKSAociArIDEpOwkJCS8qIHNoaWZ0ICovCit9CisKKyNlbmRpZiAvKiBKRkRDVF9JTlRfUVVBTlRJWkVfV0lUSF9ESVZJU0lPTiAqLworCiAKIC8qCiAgKiBJbml0aWFsaXplIGZvciBhIHByb2Nlc3NpbmcgcGFzcy4KQEAgLTc1LDYgKzE0NywxOCBAQAogICAgICAgLyogRm9yIExMJk0gSURDVCBtZXRob2QsIGRpdmlzb3JzIGFyZSBlcXVhbCB0byByYXcgcXVhbnRpemF0aW9uCiAgICAgICAgKiBjb2VmZmljaWVudHMgbXVsdGlwbGllZCBieSA4ICh0byBjb3VudGVyYWN0IHNjYWxpbmcpLgogICAgICAgICovCisjaWZuZGVmIEpGRENUX0lOVF9RVUFOVElaRV9XSVRIX0RJVklTSU9OCisgICAgICBpZiAoZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9PSBOVUxMKSB7CisJZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9IChEQ1RFTEVNICopCisJICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgICAgIChEQ1RTSVpFMiAqIDQpICogU0laRU9GKERDVEVMRU0pKTsKKyAgICAgIH0KKyAgICAgIGR0YmwgPSBmZGN0LT5kaXZpc29yc1txdGJsbm9dOworICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKKwljb21wdXRlX3JlY2lwcm9jYWwgKChEQ1RFTEVNKSAocXRibC0+cXVhbnR2YWxbaV0gPDwgMyksICZkdGJsW2ldKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworI2Vsc2UgIC8qIEpGRENUX0lOVF9RVUFOVElaRV9XSVRIX0RJVklTSU9OICovCiAgICAgICBpZiAoZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9PSBOVUxMKSB7CiAJZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9IChEQ1RFTEVNICopCiAJICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLApAQCAtODUsNyArMTY5LDggQEAKIAlkdGJsW2ldID0gKChEQ1RFTEVNKSBxdGJsLT5xdWFudHZhbFtpXSkgPDwgMzsKICAgICAgIH0KICAgICAgIGJyZWFrOwotI2VuZGlmCisjZW5kaWYgLyogSkZEQ1RfSU5UX1FVQU5USVpFX1dJVEhfRElWSVNJT04gKi8KKyNlbmRpZiAvKiBEQ1RfSVNMT1dfU1VQUE9SVEVEICovCiAjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAogICAgIGNhc2UgSkRDVF9JRkFTVDoKICAgICAgIHsKQEAgLTEwOSw2ICsxOTQsMjEgQEAKIAl9OwogCVNISUZUX1RFTVBTCiAKKyNpZm5kZWYgSkZEQ1RfSU5UX1FVQU5USVpFX1dJVEhfRElWSVNJT04KKwlpZiAoZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9PSBOVUxMKSB7CisJICBmZGN0LT5kaXZpc29yc1txdGJsbm9dID0gKERDVEVMRU0gKikKKwkgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkJKERDVFNJWkUyICogNCkgKiBTSVpFT0YoRENURUxFTSkpOworCX0KKwlkdGJsID0gZmRjdC0+ZGl2aXNvcnNbcXRibG5vXTsKKwlmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworCSAgY29tcHV0ZV9yZWNpcHJvY2FsICgoRENURUxFTSkKKwkJCSAgICAgICBERVNDQUxFKE1VTFRJUExZMTZWMTYoKElOVDMyKSBxdGJsLT5xdWFudHZhbFtpXSwKKwkJCQkJCSAgICAgKElOVDMyKSBhYW5zY2FsZXNbaV0pLAorCQkJCSAgICAgICBDT05TVF9CSVRTLTMpLAorCQkJICAgICAgJmR0YmxbaV0pOworCX0KKyNlbHNlICAvKiBKRkRDVF9JTlRfUVVBTlRJWkVfV0lUSF9ESVZJU0lPTiAqLwogCWlmIChmZGN0LT5kaXZpc29yc1txdGJsbm9dID09IE5VTEwpIHsKIAkgIGZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPSAoRENURUxFTSAqKQogCSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLApAQCAtMTIxLDkgKzIyMSwxMCBAQAogCQkJCSAgKElOVDMyKSBhYW5zY2FsZXNbaV0pLAogCQkgICAgQ09OU1RfQklUUy0zKTsKIAl9CisjZW5kaWYgLyogSkZEQ1RfSU5UX1FVQU5USVpFX1dJVEhfRElWSVNJT04gKi8KICAgICAgIH0KICAgICAgIGJyZWFrOwotI2VuZGlmCisjZW5kaWYgLyogRENUX0lGQVNUX1NVUFBPUlRFRCAqLwogI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKICAgICBjYXNlIEpEQ1RfRkxPQVQ6CiAgICAgICB7CkBAIC0xODMsODMgKzI4NCwyMyBAQAogCSAgICAgSkRJTUVOU0lPTiBudW1fYmxvY2tzKQogLyogVGhpcyB2ZXJzaW9uIGlzIHVzZWQgZm9yIGludGVnZXIgRENUIGltcGxlbWVudGF0aW9ucy4gKi8KIHsKLSAgLyogVGhpcyByb3V0aW5lIGlzIGhlYXZpbHkgdXNlZCwgc28gaXQncyB3b3J0aCBjb2RpbmcgaXQgdGlnaHRseS4gKi8KICAgbXlfZmRjdF9wdHIgZmRjdCA9IChteV9mZGN0X3B0cikgY2luZm8tPmZkY3Q7Ci0gIGZvcndhcmRfRENUX21ldGhvZF9wdHIgZG9fZGN0ID0gZmRjdC0+ZG9fZGN0OwogICBEQ1RFTEVNICogZGl2aXNvcnMgPSBmZGN0LT5kaXZpc29yc1tjb21wcHRyLT5xdWFudF90Ymxfbm9dOwotICBEQ1RFTEVNIHdvcmtzcGFjZVtEQ1RTSVpFMl07CS8qIHdvcmsgYXJlYSBmb3IgRkRDVCBzdWJyb3V0aW5lICovCisgIERDVEVMRU0gd29ya3NwYWNlW0RDVFNJWkUyICsgQUxJR05fU0laRS9zaXplb2YoRENURUxFTSldOworICBEQ1RFTEVNICogd2twdHIgPSAoRENURUxFTSAqKSBBTElHTl9NRU0od29ya3NwYWNlLCBBTElHTl9TSVpFKTsKICAgSkRJTUVOU0lPTiBiaTsKIAogICBzYW1wbGVfZGF0YSArPSBzdGFydF9yb3c7CS8qIGZvbGQgaW4gdGhlIHZlcnRpY2FsIG9mZnNldCBvbmNlICovCiAKICAgZm9yIChiaSA9IDA7IGJpIDwgbnVtX2Jsb2NrczsgYmkrKywgc3RhcnRfY29sICs9IERDVFNJWkUpIHsKICAgICAvKiBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbiAqLwotICAgIHsgcmVnaXN0ZXIgRENURUxFTSAqd29ya3NwYWNlcHRyOwotICAgICAgcmVnaXN0ZXIgSlNBTVBST1cgZWxlbXB0cjsKLSAgICAgIHJlZ2lzdGVyIGludCBlbGVtcjsKLQotICAgICAgd29ya3NwYWNlcHRyID0gd29ya3NwYWNlOwotICAgICAgZm9yIChlbGVtciA9IDA7IGVsZW1yIDwgRENUU0laRTsgZWxlbXIrKykgewotCWVsZW1wdHIgPSBzYW1wbGVfZGF0YVtlbGVtcl0gKyBzdGFydF9jb2w7Ci0jaWYgRENUU0laRSA9PSA4CQkvKiB1bnJvbGwgdGhlIGlubmVyIGxvb3AgKi8KLQkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKLQkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKLQkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKLQkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKLQkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKLQkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKLQkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKLQkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKLSNlbHNlCi0JeyByZWdpc3RlciBpbnQgZWxlbWM7Ci0JICBmb3IgKGVsZW1jID0gRENUU0laRTsgZWxlbWMgPiAwOyBlbGVtYy0tKSB7Ci0JICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOwotCSAgfQotCX0KLSNlbmRpZgotICAgICAgfQotICAgIH0KKyAgICAoKmZkY3QtPmNvbnZzYW1wKSAoc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCwgd2twdHIpOwogCiAgICAgLyogUGVyZm9ybSB0aGUgRENUICovCi0gICAgKCpkb19kY3QpICh3b3Jrc3BhY2UpOworICAgICgqZmRjdC0+ZG9fZGN0KSAod2twdHIpOwogCiAgICAgLyogUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2Nrc1tdICovCi0gICAgeyByZWdpc3RlciBEQ1RFTEVNIHRlbXAsIHF2YWw7Ci0gICAgICByZWdpc3RlciBpbnQgaTsKLSAgICAgIHJlZ2lzdGVyIEpDT0VGUFRSIG91dHB1dF9wdHIgPSBjb2VmX2Jsb2Nrc1tiaV07Ci0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7Ci0JcXZhbCA9IGRpdmlzb3JzW2ldOwotCXRlbXAgPSB3b3Jrc3BhY2VbaV07Ci0JLyogRGl2aWRlIHRoZSBjb2VmZmljaWVudCB2YWx1ZSBieSBxdmFsLCBlbnN1cmluZyBwcm9wZXIgcm91bmRpbmcuCi0JICogU2luY2UgQyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBkaXJlY3Rpb24gb2Ygcm91bmRpbmcgZm9yIG5lZ2F0aXZlCi0JICogcXVvdGllbnRzLCB3ZSBoYXZlIHRvIGZvcmNlIHRoZSBkaXZpZGVuZCBwb3NpdGl2ZSBmb3IgcG9ydGFiaWxpdHkuCi0JICoKLQkgKiBJbiBtb3N0IGZpbGVzLCBhdCBsZWFzdCBoYWxmIG9mIHRoZSBvdXRwdXQgdmFsdWVzIHdpbGwgYmUgemVybwotCSAqIChhdCBkZWZhdWx0IHF1YW50aXphdGlvbiBzZXR0aW5ncywgbW9yZSBsaWtlIHRocmVlLXF1YXJ0ZXJzLi4uKQotCSAqIHNvIHdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGlzIGNhc2UgaXMgZmFzdC4gIE9uIG1hbnkgbWFjaGluZXMsCi0JICogYSBjb21wYXJpc29uIGlzIGVub3VnaCBjaGVhcGVyIHRoYW4gYSBkaXZpZGUgdG8gbWFrZSBhIHNwZWNpYWwgdGVzdAotCSAqIGEgd2luLiAgU2luY2UgYm90aCBpbnB1dHMgd2lsbCBiZSBub25uZWdhdGl2ZSwgd2UgbmVlZCBvbmx5IHRlc3QKLQkgKiBmb3IgYSA8IGIgdG8gZGlzY292ZXIgd2hldGhlciBhL2IgaXMgMC4KLQkgKiBJZiB5b3VyIG1hY2hpbmUncyBkaXZpc2lvbiBpcyBmYXN0IGVub3VnaCwgZGVmaW5lIEZBU1RfRElWSURFLgotCSAqLwotI2lmZGVmIEZBU1RfRElWSURFCi0jZGVmaW5lIERJVklERV9CWShhLGIpCWEgLz0gYgotI2Vsc2UKLSNkZWZpbmUgRElWSURFX0JZKGEsYikJaWYgKGEgPj0gYikgYSAvPSBiOyBlbHNlIGEgPSAwCi0jZW5kaWYKLQlpZiAodGVtcCA8IDApIHsKLQkgIHRlbXAgPSAtdGVtcDsKLQkgIHRlbXAgKz0gcXZhbD4+MTsJLyogZm9yIHJvdW5kaW5nICovCi0JICBESVZJREVfQlkodGVtcCwgcXZhbCk7Ci0JICB0ZW1wID0gLXRlbXA7Ci0JfSBlbHNlIHsKLQkgIHRlbXAgKz0gcXZhbD4+MTsJLyogZm9yIHJvdW5kaW5nICovCi0JICBESVZJREVfQlkodGVtcCwgcXZhbCk7Ci0JfQotCW91dHB1dF9wdHJbaV0gPSAoSkNPRUYpIHRlbXA7Ci0gICAgICB9Ci0gICAgfQorICAgICgqZmRjdC0+cXVhbnRpemUpIChjb2VmX2Jsb2Nrc1tiaV0sIGRpdmlzb3JzLCB3a3B0cik7CiAgIH0KIH0KIApAQCAtMjczLDY0ICszMTQsMjMgQEAKIAkJICAgSkRJTUVOU0lPTiBudW1fYmxvY2tzKQogLyogVGhpcyB2ZXJzaW9uIGlzIHVzZWQgZm9yIGZsb2F0aW5nLXBvaW50IERDVCBpbXBsZW1lbnRhdGlvbnMuICovCiB7Ci0gIC8qIFRoaXMgcm91dGluZSBpcyBoZWF2aWx5IHVzZWQsIHNvIGl0J3Mgd29ydGggY29kaW5nIGl0IHRpZ2h0bHkuICovCiAgIG15X2ZkY3RfcHRyIGZkY3QgPSAobXlfZmRjdF9wdHIpIGNpbmZvLT5mZGN0OwotICBmbG9hdF9EQ1RfbWV0aG9kX3B0ciBkb19kY3QgPSBmZGN0LT5kb19mbG9hdF9kY3Q7CiAgIEZBU1RfRkxPQVQgKiBkaXZpc29ycyA9IGZkY3QtPmZsb2F0X2Rpdmlzb3JzW2NvbXBwdHItPnF1YW50X3RibF9ub107Ci0gIEZBU1RfRkxPQVQgd29ya3NwYWNlW0RDVFNJWkUyXTsgLyogd29yayBhcmVhIGZvciBGRENUIHN1YnJvdXRpbmUgKi8KKyAgRkFTVF9GTE9BVCB3b3Jrc3BhY2VbRENUU0laRTIgKyBBTElHTl9TSVpFL3NpemVvZihGQVNUX0ZMT0FUKV07CisgIEZBU1RfRkxPQVQgKiB3a3B0ciA9IChGQVNUX0ZMT0FUICopIEFMSUdOX01FTSh3b3Jrc3BhY2UsIEFMSUdOX1NJWkUpOwogICBKRElNRU5TSU9OIGJpOwogCiAgIHNhbXBsZV9kYXRhICs9IHN0YXJ0X3JvdzsJLyogZm9sZCBpbiB0aGUgdmVydGljYWwgb2Zmc2V0IG9uY2UgKi8KIAogICBmb3IgKGJpID0gMDsgYmkgPCBudW1fYmxvY2tzOyBiaSsrLCBzdGFydF9jb2wgKz0gRENUU0laRSkgewogICAgIC8qIExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgeyByZWdpc3RlciBGQVNUX0ZMT0FUICp3b3Jrc3BhY2VwdHI7Ci0gICAgICByZWdpc3RlciBKU0FNUFJPVyBlbGVtcHRyOwotICAgICAgcmVnaXN0ZXIgaW50IGVsZW1yOwotCi0gICAgICB3b3Jrc3BhY2VwdHIgPSB3b3Jrc3BhY2U7Ci0gICAgICBmb3IgKGVsZW1yID0gMDsgZWxlbXIgPCBEQ1RTSVpFOyBlbGVtcisrKSB7Ci0JZWxlbXB0ciA9IHNhbXBsZV9kYXRhW2VsZW1yXSArIHN0YXJ0X2NvbDsKLSNpZiBEQ1RTSVpFID09IDgJCS8qIHVucm9sbCB0aGUgaW5uZXIgbG9vcCAqLwotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7Ci0JKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKLQkqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOwotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7Ci0JKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKLQkqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOwotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7Ci0JKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKLSNlbHNlCi0JeyByZWdpc3RlciBpbnQgZWxlbWM7Ci0JICBmb3IgKGVsZW1jID0gRENUU0laRTsgZWxlbWMgPiAwOyBlbGVtYy0tKSB7Ci0JICAgICp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKQotCSAgICAgIChHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7Ci0JICB9Ci0JfQotI2VuZGlmCi0gICAgICB9Ci0gICAgfQorICAgICgqZmRjdC0+ZmxvYXRfY29udnNhbXApIChzYW1wbGVfZGF0YSwgc3RhcnRfY29sLCB3a3B0cik7CiAKICAgICAvKiBQZXJmb3JtIHRoZSBEQ1QgKi8KLSAgICAoKmRvX2RjdCkgKHdvcmtzcGFjZSk7CisgICAgKCpmZGN0LT5kb19mbG9hdF9kY3QpICh3a3B0cik7CiAKICAgICAvKiBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2tzW10gKi8KLSAgICB7IHJlZ2lzdGVyIEZBU1RfRkxPQVQgdGVtcDsKLSAgICAgIHJlZ2lzdGVyIGludCBpOwotICAgICAgcmVnaXN0ZXIgSkNPRUZQVFIgb3V0cHV0X3B0ciA9IGNvZWZfYmxvY2tzW2JpXTsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKLQkvKiBBcHBseSB0aGUgcXVhbnRpemF0aW9uIGFuZCBzY2FsaW5nIGZhY3RvciAqLwotCXRlbXAgPSB3b3Jrc3BhY2VbaV0gKiBkaXZpc29yc1tpXTsKLQkvKiBSb3VuZCB0byBuZWFyZXN0IGludGVnZXIuCi0JICogU2luY2UgQyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBkaXJlY3Rpb24gb2Ygcm91bmRpbmcgZm9yIG5lZ2F0aXZlCi0JICogcXVvdGllbnRzLCB3ZSBoYXZlIHRvIGZvcmNlIHRoZSBkaXZpZGVuZCBwb3NpdGl2ZSBmb3IgcG9ydGFiaWxpdHkuCi0JICogVGhlIG1heGltdW0gY29lZmZpY2llbnQgc2l6ZSBpcyArLTE2SyAoZm9yIDEyLWJpdCBkYXRhKSwgc28gdGhpcwotCSAqIGNvZGUgc2hvdWxkIHdvcmsgZm9yIGVpdGhlciAxNi1iaXQgb3IgMzItYml0IGludHMuCi0JICovCi0Jb3V0cHV0X3B0cltpXSA9IChKQ09FRikgKChpbnQpICh0ZW1wICsgKEZBU1RfRkxPQVQpIDE2Mzg0LjUpIC0gMTYzODQpOwotICAgICAgfQotICAgIH0KKyAgICAoKmZkY3QtPmZsb2F0X3F1YW50aXplKSAoY29lZl9ibG9ja3NbYmldLCBkaXZpc29ycywgd2twdHIpOwogICB9CiB9CiAKQEAgLTM0Niw2ICszNDYsNyBAQAogewogICBteV9mZGN0X3B0ciBmZGN0OwogICBpbnQgaTsKKyAgdW5zaWduZWQgaW50IHNpbWQgPSBqcGVnX3NpbWRfc3VwcG9ydCgoal9jb21tb25fcHRyKSBjaW5mbyk7CiAKICAgZmRjdCA9IChteV9mZGN0X3B0cikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLApAQCAtMzU3LDIxICszNTgsODYgQEAKICNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECiAgIGNhc2UgSkRDVF9JU0xPVzoKICAgICBmZGN0LT5wdWIuZm9yd2FyZF9EQ1QgPSBmb3J3YXJkX0RDVDsKLSAgICBmZGN0LT5kb19kY3QgPSBqcGVnX2ZkY3RfaXNsb3c7Ci0gICAgYnJlYWs7CisjaWZkZWYgSkZEQ1RfSU5UX1NTRTJfU1VQUE9SVEVECisgICAgaWYgKHNpbWQgJiBKU0lNRF9TU0UyICYmCisgICAgICAgIElTX0NPTlNUX0FMSUdORURfMTYoamNvbnN0X2ZkY3RfaXNsb3dfc3NlMikpIHsKKyAgICAgIGZkY3QtPmRvX2RjdCA9IGpwZWdfZmRjdF9pc2xvd19zc2UyOworICAgICAgZmRjdC0+Y29udnNhbXAgPSBqcGVnX2NvbnZzYW1wX2ludF9zc2UyOworICAgICAgZmRjdC0+cXVhbnRpemUgPSBqcGVnX3F1YW50aXplX2ludF9zc2UyOworICAgIH0gZWxzZQogI2VuZGlmCisjaWZkZWYgSkZEQ1RfSU5UX01NWF9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EX01NWCkgeworICAgICAgZmRjdC0+ZG9fZGN0ID0ganBlZ19mZGN0X2lzbG93X21teDsKKyAgICAgIGZkY3QtPmNvbnZzYW1wID0ganBlZ19jb252c2FtcF9pbnRfbW14OworICAgICAgZmRjdC0+cXVhbnRpemUgPSBqcGVnX3F1YW50aXplX2ludF9tbXg7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICBmZGN0LT5kb19kY3QgPSBqcGVnX2ZkY3RfaXNsb3c7CisgICAgICBmZGN0LT5jb252c2FtcCA9IGpwZWdfY29udnNhbXBfaW50OworICAgICAgZmRjdC0+cXVhbnRpemUgPSBqcGVnX3F1YW50aXplX2ludDsKKyAgICB9CisgICAgYnJlYWs7CisjZW5kaWYgLyogRENUX0lTTE9XX1NVUFBPUlRFRCAqLwogI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKICAgY2FzZSBKRENUX0lGQVNUOgogICAgIGZkY3QtPnB1Yi5mb3J3YXJkX0RDVCA9IGZvcndhcmRfRENUOwotICAgIGZkY3QtPmRvX2RjdCA9IGpwZWdfZmRjdF9pZmFzdDsKLSAgICBicmVhazsKKyNpZmRlZiBKRkRDVF9JTlRfU1NFMl9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EX1NTRTIgJiYKKyAgICAgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfZmRjdF9pZmFzdF9zc2UyKSkgeworICAgICAgZmRjdC0+ZG9fZGN0ID0ganBlZ19mZGN0X2lmYXN0X3NzZTI7CisgICAgICBmZGN0LT5jb252c2FtcCA9IGpwZWdfY29udnNhbXBfaW50X3NzZTI7CisgICAgICBmZGN0LT5xdWFudGl6ZSA9IGpwZWdfcXVhbnRpemVfaW50X3NzZTI7CisgICAgfSBlbHNlCiAjZW5kaWYKKyNpZmRlZiBKRkRDVF9JTlRfTU1YX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfTU1YKSB7CisgICAgICBmZGN0LT5kb19kY3QgPSBqcGVnX2ZkY3RfaWZhc3RfbW14OworICAgICAgZmRjdC0+Y29udnNhbXAgPSBqcGVnX2NvbnZzYW1wX2ludF9tbXg7CisgICAgICBmZGN0LT5xdWFudGl6ZSA9IGpwZWdfcXVhbnRpemVfaW50X21teDsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGZkY3QtPmRvX2RjdCA9IGpwZWdfZmRjdF9pZmFzdDsKKyAgICAgIGZkY3QtPmNvbnZzYW1wID0ganBlZ19jb252c2FtcF9pbnQ7CisgICAgICBmZGN0LT5xdWFudGl6ZSA9IGpwZWdfcXVhbnRpemVfaW50OworICAgIH0KKyAgICBicmVhazsKKyNlbmRpZiAvKiBEQ1RfSUZBU1RfU1VQUE9SVEVEICovCiAjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAogICBjYXNlIEpEQ1RfRkxPQVQ6CiAgICAgZmRjdC0+cHViLmZvcndhcmRfRENUID0gZm9yd2FyZF9EQ1RfZmxvYXQ7Ci0gICAgZmRjdC0+ZG9fZmxvYXRfZGN0ID0ganBlZ19mZGN0X2Zsb2F0OwotICAgIGJyZWFrOworI2lmZGVmIEpGRENUX0ZMVF9TU0VfU1NFMl9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EX1NTRSAmJiBzaW1kICYgSlNJTURfU1NFMiAmJgorICAgICAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkpIHsKKyAgICAgIGZkY3QtPmRvX2Zsb2F0X2RjdCA9IGpwZWdfZmRjdF9mbG9hdF9zc2U7CisgICAgICBmZGN0LT5mbG9hdF9jb252c2FtcCA9IGpwZWdfY29udnNhbXBfZmx0X3NzZTI7CisgICAgICBmZGN0LT5mbG9hdF9xdWFudGl6ZSA9IGpwZWdfcXVhbnRpemVfZmx0X3NzZTI7CisgICAgfSBlbHNlCiAjZW5kaWYKKyNpZmRlZiBKRkRDVF9GTFRfU1NFX01NWF9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EX1NTRSAmJgorICAgICAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkpIHsKKyAgICAgIGZkY3QtPmRvX2Zsb2F0X2RjdCA9IGpwZWdfZmRjdF9mbG9hdF9zc2U7CisgICAgICBmZGN0LT5mbG9hdF9jb252c2FtcCA9IGpwZWdfY29udnNhbXBfZmx0X3NzZTsKKyAgICAgIGZkY3QtPmZsb2F0X3F1YW50aXplID0ganBlZ19xdWFudGl6ZV9mbHRfc3NlOworICAgIH0gZWxzZQorI2VuZGlmCisjaWZkZWYgSkZEQ1RfRkxUXzNETk9XX01NWF9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EXzNETk9XKSB7CisgICAgICBmZGN0LT5kb19mbG9hdF9kY3QgPSBqcGVnX2ZkY3RfZmxvYXRfM2Rub3c7CisgICAgICBmZGN0LT5mbG9hdF9jb252c2FtcCA9IGpwZWdfY29udnNhbXBfZmx0XzNkbm93OworICAgICAgZmRjdC0+ZmxvYXRfcXVhbnRpemUgPSBqcGVnX3F1YW50aXplX2ZsdF8zZG5vdzsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGZkY3QtPmRvX2Zsb2F0X2RjdCA9IGpwZWdfZmRjdF9mbG9hdDsKKyAgICAgIGZkY3QtPmZsb2F0X2NvbnZzYW1wID0ganBlZ19jb252c2FtcF9mbG9hdDsKKyAgICAgIGZkY3QtPmZsb2F0X3F1YW50aXplID0ganBlZ19xdWFudGl6ZV9mbG9hdDsKKyAgICB9CisgICAgYnJlYWs7CisjZW5kaWYgLyogRENUX0ZMT0FUX1NVUFBPUlRFRCAqLwogICBkZWZhdWx0OgogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKICAgICBicmVhazsKQEAgLTM4NSwzICs0NTEsNjUgQEAKICNlbmRpZgogICB9CiB9CisKKworI2lmbmRlZiBKU0lNRF9NT0RFSU5GT19OT1RfU1VQUE9SVEVECisKK0dMT0JBTCh1bnNpZ25lZCBpbnQpCitqcGVnX3NpbWRfZm9yd2FyZF9kY3QgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWV0aG9kKQoreworICB1bnNpZ25lZCBpbnQgc2ltZCA9IGpwZWdfc2ltZF9zdXBwb3J0KChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKKworICBzd2l0Y2ggKG1ldGhvZCkgeworI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKyAgY2FzZSBKRENUX0lTTE9XOgorI2lmZGVmIEpGRENUX0lOVF9TU0UyX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfU1NFMiAmJgorICAgICAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9mZGN0X2lzbG93X3NzZTIpKQorICAgICAgcmV0dXJuIEpTSU1EX1NTRTI7CisjZW5kaWYKKyNpZmRlZiBKRkRDVF9JTlRfTU1YX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfTU1YKQorICAgICAgcmV0dXJuIEpTSU1EX01NWDsKKyNlbmRpZgorICAgIHJldHVybiBKU0lNRF9OT05FOworI2VuZGlmIC8qIERDVF9JU0xPV19TVVBQT1JURUQgKi8KKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisgIGNhc2UgSkRDVF9JRkFTVDoKKyNpZmRlZiBKRkRDVF9JTlRfU1NFMl9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EX1NTRTIgJiYKKyAgICAgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfZmRjdF9pZmFzdF9zc2UyKSkKKyAgICAgIHJldHVybiBKU0lNRF9TU0UyOworI2VuZGlmCisjaWZkZWYgSkZEQ1RfSU5UX01NWF9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EX01NWCkKKyAgICAgIHJldHVybiBKU0lNRF9NTVg7CisjZW5kaWYKKyAgICByZXR1cm4gSlNJTURfTk9ORTsKKyNlbmRpZiAvKiBEQ1RfSUZBU1RfU1VQUE9SVEVEICovCisjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorICBjYXNlIEpEQ1RfRkxPQVQ6CisjaWZkZWYgSkZEQ1RfRkxUX1NTRV9TU0UyX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfU1NFICYmIHNpbWQgJiBKU0lNRF9TU0UyICYmCisgICAgICAgIElTX0NPTlNUX0FMSUdORURfMTYoamNvbnN0X2ZkY3RfZmxvYXRfc3NlKSkKKyAgICAgIHJldHVybiBKU0lNRF9TU0U7CQkvKiAoSlNJTURfU1NFIHwgSlNJTURfU1NFMik7ICovCisjZW5kaWYKKyNpZmRlZiBKRkRDVF9GTFRfU1NFX01NWF9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EX1NTRSAmJgorICAgICAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkpCisgICAgICByZXR1cm4gSlNJTURfU1NFOwkJLyogKEpTSU1EX1NTRSB8IEpTSU1EX01NWCk7ICovCisjZW5kaWYKKyNpZmRlZiBKRkRDVF9GTFRfM0ROT1dfTU1YX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfM0ROT1cpCisgICAgICByZXR1cm4gSlNJTURfM0ROT1c7CS8qIChKU0lNRF8zRE5PVyB8IEpTSU1EX01NWCk7ICovCisjZW5kaWYKKyAgICByZXR1cm4gSlNJTURfTk9ORTsKKyNlbmRpZiAvKiBEQ1RfRkxPQVRfU1VQUE9SVEVEICovCisgIGRlZmF1bHQ6CisgICAgOworICB9CisKKyAgcmV0dXJuIEpTSU1EX05PTkU7CS8qIG5vdCBjb21waWxlZCAqLworfQorCisjZW5kaWYgLyogIUpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL2pjb2xzYW1wLmggYi9qY29sc2FtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMjdiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qY29sc2FtcC5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogamNvbHNhbXAuaCAtIHByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBjb2xvciBjb252ZXJzaW9uICYgdXAvZG93bnNhbXBsaW5nCisgKgorICogeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworICoKKyAqIExhc3QgTW9kaWZpZWQgOiBGZWJydWFyeSA0LCAyMDA2CisgKgorICogW1RBQjhdCisgKi8KKworCisvKiBjb25maWd1cmF0aW9uIGNoZWNrOiBCSVRTX0lOX0pTQU1QTEU9PTggKDgtYml0IHNhbXBsZSB2YWx1ZXMpIGlzIHRoZSBvbmx5CisgKiB2YWxpZCBzZXR0aW5nIG9uIHRoaXMgU0lNRCBleHRlbnNpb24uCisgKi8KKyNpZiBCSVRTX0lOX0pTQU1QTEUgIT0gOAorI2Vycm9yICJTb3JyeSwgdGhpcyBTSU1EIGNvZGUgb25seSBjb3BlcyB3aXRoIDgtYml0IHNhbXBsZSB2YWx1ZXMuIgorI2VuZGlmCisKKy8qIFNob3J0IGZvcm1zIG9mIGV4dGVybmFsIG5hbWVzIGZvciBzeXN0ZW1zIHdpdGggYnJhaW4tZGFtYWdlZCBsaW5rZXJzLiAqLworCisjaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworI2RlZmluZSBqcGVnX3JnYl95Y2NfY29udmVydF9tbXgJak1SZ2JZY2NDbnYJLyogamNjb2xtbXguYXNtICovCisjZGVmaW5lIGpwZWdfcmdiX3ljY19jb252ZXJ0X3NzZTIJalNSZ2JZY2NDbnYJLyogamNjb2xzczIuYXNtICovCisjZGVmaW5lIGpwZWdfaDJ2MV9kb3duc2FtcGxlX21teAlqTTIxRG93bnNhbXBsZQkvKiBqY3NhbW1teC5hc20gKi8KKyNkZWZpbmUganBlZ19oMnYyX2Rvd25zYW1wbGVfbW14CWpNMjJEb3duc2FtcGxlCS8qIGpjc2FtbW14LmFzbSAqLworI2RlZmluZSBqcGVnX2gydjFfZG93bnNhbXBsZV9zc2UyCWpTMjFEb3duc2FtcGxlCS8qIGpjc2Ftc3MyLmFzbSAqLworI2RlZmluZSBqcGVnX2gydjJfZG93bnNhbXBsZV9zc2UyCWpTMjJEb3duc2FtcGxlCS8qIGpjc2Ftc3MyLmFzbSAqLworI2RlZmluZSBqcGVnX3ljY19yZ2JfY29udmVydF9tbXgJak1ZY2NSZ2JDbnYJLyogamRjb2xtbXguYXNtICovCisjZGVmaW5lIGpwZWdfeWNjX3JnYl9jb252ZXJ0X3NzZTIJalNZY2NSZ2JDbnYJLyogamRjb2xzczIuYXNtICovCisjZGVmaW5lIGpwZWdfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14CWpNMjFNZXJVcHNhbXBsZQkvKiBqZG1lcm1teC5hc20gKi8KKyNkZWZpbmUganBlZ19oMnYyX21lcmdlZF91cHNhbXBsZV9tbXgJak0yMk1lclVwc2FtcGxlCS8qIGpkbWVybW14LmFzbSAqLworI2RlZmluZSBqcGVnX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIJalMyMU1lclVwc2FtcGxlCS8qIGpkbWVyc3MyLmFzbSAqLworI2RlZmluZSBqcGVnX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIJalMyMk1lclVwc2FtcGxlCS8qIGpkbWVyc3MyLmFzbSAqLworI2RlZmluZSBqcGVnX2gydjFfZmFuY3lfdXBzYW1wbGVfbW14CWpNMjFGYW5VcHNhbXBsZQkvKiBqZHNhbW1teC5hc20gKi8KKyNkZWZpbmUganBlZ19oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teAlqTTIyRmFuVXBzYW1wbGUJLyogamRzYW1tbXguYXNtICovCisjZGVmaW5lIGpwZWdfaDF2Ml9mYW5jeV91cHNhbXBsZV9tbXgJak0xMkZhblVwc2FtcGxlCS8qIGpkc2FtbW14LmFzbSAqLworI2RlZmluZSBqcGVnX2gydjFfdXBzYW1wbGVfbW14CQlqTTIxVXBzYW1wbGUJLyogamRzYW1tbXguYXNtICovCisjZGVmaW5lIGpwZWdfaDJ2Ml91cHNhbXBsZV9tbXgJCWpNMjJVcHNhbXBsZQkvKiBqZHNhbW1teC5hc20gKi8KKyNkZWZpbmUganBlZ19oMnYxX2ZhbmN5X3Vwc2FtcGxlX3NzZTIJalMyMUZhblVwc2FtcGxlCS8qIGpkc2Ftc3MyLmFzbSAqLworI2RlZmluZSBqcGVnX2gydjJfZmFuY3lfdXBzYW1wbGVfc3NlMglqUzIyRmFuVXBzYW1wbGUJLyogamRzYW1zczIuYXNtICovCisjZGVmaW5lIGpwZWdfaDF2Ml9mYW5jeV91cHNhbXBsZV9zc2UyCWpTMTJGYW5VcHNhbXBsZQkvKiBqZHNhbXNzMi5hc20gKi8KKyNkZWZpbmUganBlZ19oMnYxX3Vwc2FtcGxlX3NzZTIJCWpTMjFVcHNhbXBsZQkvKiBqZHNhbXNzMi5hc20gKi8KKyNkZWZpbmUganBlZ19oMnYyX3Vwc2FtcGxlX3NzZTIJCWpTMjJVcHNhbXBsZQkvKiBqZHNhbXNzMi5hc20gKi8KKyNkZWZpbmUgamNvbnN0X3JnYl95Y2NfY29udmVydF9tbXgJak1DUmdiWWNjQ252CS8qIGpjY29sbW14LmFzbSAqLworI2RlZmluZSBqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIJalNDUmdiWWNjQ252CS8qIGpjY29sc3MyLmFzbSAqLworI2RlZmluZSBqY29uc3RfeWNjX3JnYl9jb252ZXJ0X21teAlqTUNZY2NSZ2JDbnYJLyogamRjb2xtbXguYXNtICovCisjZGVmaW5lIGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfc3NlMglqU0NZY2NSZ2JDbnYJLyogamRjb2xzczIuYXNtICovCisjZGVmaW5lIGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfbW14CWpNQ01lclVwc2FtcGxlCS8qIGpkbWVybW14LmFzbSAqLworI2RlZmluZSBqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIJalNDTWVyVXBzYW1wbGUJLyogamRtZXJzczIuYXNtICovCisjZGVmaW5lIGpjb25zdF9mYW5jeV91cHNhbXBsZV9tbXgJak1DRmFuVXBzYW1wbGUJLyogamRzYW1tbXguYXNtICovCisjZGVmaW5lIGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyCWpTQ0ZhblVwc2FtcGxlCS8qIGpkc2Ftc3MyLmFzbSAqLworI2lmbmRlZiBKU0lNRF9NT0RFSU5GT19OT1RfU1VQUE9SVEVECisjZGVmaW5lIGpwZWdfc2ltZF9tZXJnZWRfdXBzYW1wbGVyCWpTaU1VcHNhbXBsZXIJLyogamRtZXJnZS5jICAgICovCisjZW5kaWYKKyNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCisKKy8qIEV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIGNvbG9yIGNvbnZlcnNpb24gJiB1cC9kb3duc2FtcGxpbmcgcm91dGluZXMuICovCisKK0VYVEVSTih2b2lkKSBqcGVnX3JnYl95Y2NfY29udmVydF9tbXgKKyAgICBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorCSBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykpOworRVhURVJOKHZvaWQpIGpwZWdfcmdiX3ljY19jb252ZXJ0X3NzZTIKKyAgICBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorCSBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykpOworCitFWFRFUk4odm9pZCkganBlZ19oMnYxX2Rvd25zYW1wbGVfbW14CisgICAgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkpOworRVhURVJOKHZvaWQpIGpwZWdfaDJ2Ml9kb3duc2FtcGxlX21teAorICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2gydjFfZG93bnNhbXBsZV9zc2UyCisgICAgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkpOworRVhURVJOKHZvaWQpIGpwZWdfaDJ2Ml9kb3duc2FtcGxlX3NzZTIKKyAgICBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKSk7CisKK0VYVEVSTih2b2lkKSBqcGVnX3ljY19yZ2JfY29udmVydF9tbXgKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKwkgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpKTsKK0VYVEVSTih2b2lkKSBqcGVnX3ljY19yZ2JfY29udmVydF9zc2UyCisgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKSk7CisKK0VYVEVSTih2b2lkKSBqcGVnX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teAorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisJIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganBlZ19oMnYyX21lcmdlZF91cHNhbXBsZV9tbXgKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorCSBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikpOworRVhURVJOKHZvaWQpIGpwZWdfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMgorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisJIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganBlZ19oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyCisgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKwkgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKKworRVhURVJOKHZvaWQpIGpwZWdfaDJ2MV9mYW5jeV91cHNhbXBsZV9tbXgKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2gydjJfZmFuY3lfdXBzYW1wbGVfbW14CisgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKSk7CitFWFRFUk4odm9pZCkganBlZ19oMXYyX2ZhbmN5X3Vwc2FtcGxlX21teAorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikpOworRVhURVJOKHZvaWQpIGpwZWdfaDJ2MV91cHNhbXBsZV9tbXgKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2gydjJfdXBzYW1wbGVfbW14CisgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKSk7CitFWFRFUk4odm9pZCkganBlZ19oMnYxX2ZhbmN5X3Vwc2FtcGxlX3NzZTIKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2gydjJfZmFuY3lfdXBzYW1wbGVfc3NlMgorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikpOworRVhURVJOKHZvaWQpIGpwZWdfaDF2Ml9mYW5jeV91cHNhbXBsZV9zc2UyCisgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKSk7CitFWFRFUk4odm9pZCkganBlZ19oMnYxX3Vwc2FtcGxlX3NzZTIKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2gydjJfdXBzYW1wbGVfc3NlMgorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfbW14W107CitleHRlcm4gY29uc3QgaW50IGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfc3NlMltdOworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfeWNjX3JnYl9jb252ZXJ0X21teFtdOworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTJbXTsKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X21lcmdlZF91cHNhbXBsZV9tbXhbXTsKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyW107CitleHRlcm4gY29uc3QgaW50IGpjb25zdF9mYW5jeV91cHNhbXBsZV9tbXhbXTsKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTJbXTsKKworI2lmbmRlZiBKU0lNRF9NT0RFSU5GT19OT1RfU1VQUE9SVEVECitFWFRFUk4odW5zaWduZWQgaW50KSBqcGVnX3NpbWRfbWVyZ2VkX3Vwc2FtcGxlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvamNvbHNhbXAuaW5jIGIvamNvbHNhbXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZjVkYmQKLS0tIC9kZXYvbnVsbAorKysgYi9qY29sc2FtcC5pbmMKQEAgLTAsMCArMSwxNTYgQEAKKzsKKzsgamNvbHNhbXAuaW5jIC0gcHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIGNvbG9yIGNvbnZlcnNpb24gJiB1cC9kb3duc2FtcGxpbmcKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgTGFzdCBNb2RpZmllZCA6IEphbnVhcnkgNSwgMjAwNgorOworOyBbVEFCOF0KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBjb25maWd1cmF0aW9uIGNoZWNrOiBCSVRTX0lOX0pTQU1QTEU9PTggKDgtYml0IHNhbXBsZSB2YWx1ZXMpIGlzIHRoZSBvbmx5Cis7IHZhbGlkIHNldHRpbmcgb24gdGhpcyBTSU1EIGV4dGVuc2lvbi4KKzsKKyVpZiBCSVRTX0lOX0pTQU1QTEUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBTSU1EIGNvZGUgb25seSBjb3BlcyB3aXRoIDgtYml0IHNhbXBsZSB2YWx1ZXMuIgorJWVuZGlmCisKKzsgU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuCis7CislaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworJWRlZmluZSBqcGVnX3JnYl95Y2NfY29udmVydF9tbXgJak1SZ2JZY2NDbnYJOyBqY2NvbG1teC5hc20KKyVkZWZpbmUganBlZ19yZ2JfeWNjX2NvbnZlcnRfc3NlMglqU1JnYlljY0Nudgk7IGpjY29sc3MyLmFzbQorJWRlZmluZSBqcGVnX2gydjFfZG93bnNhbXBsZV9tbXgJak0yMURvd25zYW1wbGUJOyBqY3NhbW1teC5hc20KKyVkZWZpbmUganBlZ19oMnYyX2Rvd25zYW1wbGVfbW14CWpNMjJEb3duc2FtcGxlCTsgamNzYW1tbXguYXNtCislZGVmaW5lIGpwZWdfaDJ2MV9kb3duc2FtcGxlX3NzZTIJalMyMURvd25zYW1wbGUJOyBqY3NhbXNzMi5hc20KKyVkZWZpbmUganBlZ19oMnYyX2Rvd25zYW1wbGVfc3NlMglqUzIyRG93bnNhbXBsZQk7IGpjc2Ftc3MyLmFzbQorJWRlZmluZSBqcGVnX3ljY19yZ2JfY29udmVydF9tbXgJak1ZY2NSZ2JDbnYJOyBqZGNvbG1teC5hc20KKyVkZWZpbmUganBlZ195Y2NfcmdiX2NvbnZlcnRfc3NlMglqU1ljY1JnYkNudgk7IGpkY29sc3MyLmFzbQorJWRlZmluZSBqcGVnX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teAlqTTIxTWVyVXBzYW1wbGUJOyBqZG1lcm1teC5hc20KKyVkZWZpbmUganBlZ19oMnYyX21lcmdlZF91cHNhbXBsZV9tbXgJak0yMk1lclVwc2FtcGxlCTsgamRtZXJtbXguYXNtCislZGVmaW5lIGpwZWdfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMglqUzIxTWVyVXBzYW1wbGUJOyBqZG1lcnNzMi5hc20KKyVkZWZpbmUganBlZ19oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyCWpTMjJNZXJVcHNhbXBsZQk7IGpkbWVyc3MyLmFzbQorJWRlZmluZSBqcGVnX2gydjFfZmFuY3lfdXBzYW1wbGVfbW14CWpNMjFGYW5VcHNhbXBsZQk7IGpkc2FtbW14LmFzbQorJWRlZmluZSBqcGVnX2gydjJfZmFuY3lfdXBzYW1wbGVfbW14CWpNMjJGYW5VcHNhbXBsZQk7IGpkc2FtbW14LmFzbQorJWRlZmluZSBqcGVnX2gxdjJfZmFuY3lfdXBzYW1wbGVfbW14CWpNMTJGYW5VcHNhbXBsZQk7IGpkc2FtbW14LmFzbQorJWRlZmluZSBqcGVnX2gydjFfdXBzYW1wbGVfbW14CQlqTTIxVXBzYW1wbGUJOyBqZHNhbW1teC5hc20KKyVkZWZpbmUganBlZ19oMnYyX3Vwc2FtcGxlX21teAkJak0yMlVwc2FtcGxlCTsgamRzYW1tbXguYXNtCislZGVmaW5lIGpwZWdfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyCWpTMjFGYW5VcHNhbXBsZQk7IGpkc2Ftc3MyLmFzbQorJWRlZmluZSBqcGVnX2gydjJfZmFuY3lfdXBzYW1wbGVfc3NlMglqUzIyRmFuVXBzYW1wbGUJOyBqZHNhbXNzMi5hc20KKyVkZWZpbmUganBlZ19oMXYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIJalMxMkZhblVwc2FtcGxlCTsgamRzYW1zczIuYXNtCislZGVmaW5lIGpwZWdfaDJ2MV91cHNhbXBsZV9zc2UyCQlqUzIxVXBzYW1wbGUJOyBqZHNhbXNzMi5hc20KKyVkZWZpbmUganBlZ19oMnYyX3Vwc2FtcGxlX3NzZTIJCWpTMjJVcHNhbXBsZQk7IGpkc2Ftc3MyLmFzbQorJWRlZmluZSBqY29uc3RfcmdiX3ljY19jb252ZXJ0X21teAlqTUNSZ2JZY2NDbnYJOyBqY2NvbG1teC5hc20KKyVkZWZpbmUgamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyCWpTQ1JnYlljY0Nudgk7IGpjY29sc3MyLmFzbQorJWRlZmluZSBqY29uc3RfeWNjX3JnYl9jb252ZXJ0X21teAlqTUNZY2NSZ2JDbnYJOyBqZGNvbG1teC5hc20KKyVkZWZpbmUgamNvbnN0X3ljY19yZ2JfY29udmVydF9zc2UyCWpTQ1ljY1JnYkNudgk7IGpkY29sc3MyLmFzbQorJWRlZmluZSBqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX21teAlqTUNNZXJVcHNhbXBsZQk7IGpkbWVybW14LmFzbQorJWRlZmluZSBqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIJalNDTWVyVXBzYW1wbGUJOyBqZG1lcnNzMi5hc20KKyVkZWZpbmUgamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX21teAlqTUNGYW5VcHNhbXBsZQk7IGpkc2FtbW14LmFzbQorJWRlZmluZSBqY29uc3RfZmFuY3lfdXBzYW1wbGVfc3NlMglqU0NGYW5VcHNhbXBsZQk7IGpkc2Ftc3MyLmFzbQorJWVuZGlmIDsgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzsgcHNldWRvLXJlc2lzdGVycyB0byBtYWtlIG9yZGVyaW5nIG9mIFJHQiBjb25maWd1cmFibGUKKzsKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0CislaWYgUkdCX1JFRCA8IDAgfHwgUkdCX1JFRCA+PSBSR0JfUElYRUxTSVpFIHx8IFJHQl9HUkVFTiA8IDAgfHwgXAorICAgUkdCX0dSRUVOID49IFJHQl9QSVhFTFNJWkUgfHwgUkdCX0JMVUUgPCAwIHx8IFJHQl9CTFVFID49IFJHQl9QSVhFTFNJWkUgfHwgXAorICAgUkdCX1JFRCA9PSBSR0JfR1JFRU4gfHwgUkdCX0dSRUVOID09IFJHQl9CTFVFIHx8IFJHQl9SRUQgPT0gUkdCX0JMVUUKKyVlcnJvciAiSW5jb3JyZWN0IFJHQiBwaXhlbCBvZmZzZXQuIgorJWVuZGlmCisKKyVpZiBSR0JfUkVEID09IDAKKyVkZWZpbmUgIG1tQSAgbW0wCislZGVmaW5lICBtbUIgIG1tMQorJWRlZmluZSB4bW1BIHhtbTAKKyVkZWZpbmUgeG1tQiB4bW0xCislZWxpZiBSR0JfR1JFRU4gPT0gMAorJWRlZmluZSAgbW1BICBtbTIKKyVkZWZpbmUgIG1tQiAgbW0zCislZGVmaW5lIHhtbUEgeG1tMgorJWRlZmluZSB4bW1CIHhtbTMKKyVlbGlmIFJHQl9CTFVFID09IDAKKyVkZWZpbmUgIG1tQSAgbW00CislZGVmaW5lICBtbUIgIG1tNQorJWRlZmluZSB4bW1BIHhtbTQKKyVkZWZpbmUgeG1tQiB4bW01CislZWxzZQorJWRlZmluZSAgbW1BICBtbTYKKyVkZWZpbmUgIG1tQiAgbW03CislZGVmaW5lIHhtbUEgeG1tNgorJWRlZmluZSB4bW1CIHhtbTcKKyVlbmRpZgorCislaWYgUkdCX1JFRCA9PSAxCislZGVmaW5lICBtbUMgIG1tMAorJWRlZmluZSAgbW1EICBtbTEKKyVkZWZpbmUgeG1tQyB4bW0wCislZGVmaW5lIHhtbUQgeG1tMQorJWVsaWYgUkdCX0dSRUVOID09IDEKKyVkZWZpbmUgIG1tQyAgbW0yCislZGVmaW5lICBtbUQgIG1tMworJWRlZmluZSB4bW1DIHhtbTIKKyVkZWZpbmUgeG1tRCB4bW0zCislZWxpZiBSR0JfQkxVRSA9PSAxCislZGVmaW5lICBtbUMgIG1tNAorJWRlZmluZSAgbW1EICBtbTUKKyVkZWZpbmUgeG1tQyB4bW00CislZGVmaW5lIHhtbUQgeG1tNQorJWVsc2UKKyVkZWZpbmUgIG1tQyAgbW02CislZGVmaW5lICBtbUQgIG1tNworJWRlZmluZSB4bW1DIHhtbTYKKyVkZWZpbmUgeG1tRCB4bW03CislZW5kaWYKKworJWlmIFJHQl9SRUQgPT0gMgorJWRlZmluZSAgbW1FICBtbTAKKyVkZWZpbmUgIG1tRiAgbW0xCislZGVmaW5lIHhtbUUgeG1tMAorJWRlZmluZSB4bW1GIHhtbTEKKyVlbGlmIFJHQl9HUkVFTiA9PSAyCislZGVmaW5lICBtbUUgIG1tMgorJWRlZmluZSAgbW1GICBtbTMKKyVkZWZpbmUgeG1tRSB4bW0yCislZGVmaW5lIHhtbUYgeG1tMworJWVsaWYgUkdCX0JMVUUgPT0gMgorJWRlZmluZSAgbW1FICBtbTQKKyVkZWZpbmUgIG1tRiAgbW01CislZGVmaW5lIHhtbUUgeG1tNAorJWRlZmluZSB4bW1GIHhtbTUKKyVlbHNlCislZGVmaW5lICBtbUUgIG1tNgorJWRlZmluZSAgbW1GICBtbTcKKyVkZWZpbmUgeG1tRSB4bW02CislZGVmaW5lIHhtbUYgeG1tNworJWVuZGlmCisKKyVpZiBSR0JfUkVEID09IDMKKyVkZWZpbmUgIG1tRyAgbW0wCislZGVmaW5lICBtbUggIG1tMQorJWRlZmluZSB4bW1HIHhtbTAKKyVkZWZpbmUgeG1tSCB4bW0xCislZWxpZiBSR0JfR1JFRU4gPT0gMworJWRlZmluZSAgbW1HICBtbTIKKyVkZWZpbmUgIG1tSCAgbW0zCislZGVmaW5lIHhtbUcgeG1tMgorJWRlZmluZSB4bW1IIHhtbTMKKyVlbGlmIFJHQl9CTFVFID09IDMKKyVkZWZpbmUgIG1tRyAgbW00CislZGVmaW5lICBtbUggIG1tNQorJWRlZmluZSB4bW1HIHhtbTQKKyVkZWZpbmUgeG1tSCB4bW01CislZWxzZQorJWRlZmluZSAgbW1HICBtbTYKKyVkZWZpbmUgIG1tSCAgbW03CislZGVmaW5lIHhtbUcgeG1tNgorJWRlZmluZSB4bW1IIHhtbTcKKyVlbmRpZgorJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA9PSAzIHx8IFJHQl9QSVhFTFNJWkUgPT0gNAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9qY29tYXBpLmMgYi9qY29tYXBpLmMKaW5kZXggOWIxZmE3NS4uZTQyMzVjMCAxMDA2NDQKLS0tIGEvamNvbWFwaS5jCisrKyBiL2pjb21hcGkuYwpAQCAtNSw2ICs1LDEzIEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIGZvciBTSU1EIGV4dGVuc2lvbi4KKyAqIExhc3QgTW9kaWZpZWQgOiBNYXJjaCAxMSwgMjAwNQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGFwcGxpY2F0aW9uIGludGVyZmFjZSByb3V0aW5lcyB0aGF0IGFyZSB1c2VkIGZvciBib3RoCiAgKiBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4KICAqLwpAQCAtMTA0LDMgKzExMSw1NCBAQAogICB0YmwtPnNlbnRfdGFibGUgPSBGQUxTRTsJLyogbWFrZSBzdXJlIHRoaXMgaXMgZmFsc2UgaW4gYW55IG5ldyB0YWJsZSAqLwogICByZXR1cm4gdGJsOwogfQorCisKKy8qCisgKiBTSU1EIEV4dDogQ2hlY2tpbmcgZm9yIHN1cHBvcnQgb2YgU0lNRCBpbnN0cnVjdGlvbiBzZXQuCisgKi8KKworR0xPQkFMKHVuc2lnbmVkIGludCkKK2pwZWdfc2ltZF9zdXBwb3J0IChqX2NvbW1vbl9wdHIgY2luZm8pCit7CisgIGVudW0geyBKU0lNRF9JTlZBTElEID0gfjAgfTsKKyAgc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzaW1kX3N1cHBvcnRlZCA9IEpTSU1EX0lOVkFMSUQ7CisKKyAgaWYgKHNpbWRfc3VwcG9ydGVkID09IEpTSU1EX0lOVkFMSUQpCisgICAgc2ltZF9zdXBwb3J0ZWQgPSBqcGVnX3NpbWRfb3Nfc3VwcG9ydChqcGVnX3NpbWRfY3B1X3N1cHBvcnQoKSk7CisKKyNpZm5kZWYgSlNJTURfTUFTS0ZVTkNfTk9UX1NVUFBPUlRFRAorICBpZiAoY2luZm8gIT0gTlVMTCkJLyogVHVybiBvZmYgdGhlIG1hc2tlZCBmbGFncyAqLworICAgIHJldHVybiBzaW1kX3N1cHBvcnRlZCAmIH5qcGVnX3NpbWRfbWFzayhjaW5mbywgSlNJTURfTk9ORSwgSlNJTURfTk9ORSk7CisjZW5kaWYKKyAgcmV0dXJuIHNpbWRfc3VwcG9ydGVkOworfQorCisjaWZuZGVmIEpTSU1EX01BU0tGVU5DX05PVF9TVVBQT1JURUQKKworLyoKKyAqIFNJTUQgRXh0OiBtb2RpZnkvcmV0cmlldmUgU0lNRCBpbnN0cnVjdGlvbiBtYXNrCisgKi8KKworR0xPQkFMKHVuc2lnbmVkIGludCkKK2pwZWdfc2ltZF9tYXNrIChqX2NvbW1vbl9wdHIgY2luZm8sIHVuc2lnbmVkIGludCByZW1vdmUsIHVuc2lnbmVkIGludCBhZGQpCit7CisgIHVuc2lnbmVkIGxvbmcgKmdwOworICB1bnNpZ25lZCBpbnQgb2xkbWFzazsKKworICBpZiAoY2luZm8tPmlzX2RlY29tcHJlc3NvcikKKyAgICBncCA9ICh1bnNpZ25lZCBsb25nICopICYoKGpfZGVjb21wcmVzc19wdHIpIGNpbmZvKS0+b3V0cHV0X2dhbW1hOworICBlbHNlCS8qIGNvbXByZXNzb3IgKi8KKyAgICBncCA9ICh1bnNpZ25lZCBsb25nICopICYoKGpfY29tcHJlc3NfcHRyKSBjaW5mbyktPmlucHV0X2dhbW1hOworCisgIGlmICgoZ3BbMV0gPT0gMHgzRkYwMDAwMCB8fCBncFsxXSA9PSAweDAwMDAwMDAwKSAmJgkvKiArMS4wIG9yICswLjAgKi8KKyAgICAgIChncFswXSAmIH5KU0lNRF9BTEwpID09IDApIHsKKyAgICBvbGRtYXNrID0gZ3BbMF07CisgICAgaWYgKCgocmVtb3ZlIHwgYWRkKSAmIH5KU0lNRF9BTEwpID09IDApCisgICAgICBncFswXSA9IChvbGRtYXNrICYgfnJlbW92ZSkgfCBhZGQ7CisgIH0gZWxzZSB7CisgICAgb2xkbWFzayA9IDA7CS8qIGVycm9yICovCisgIH0KKyAgcmV0dXJuIG9sZG1hc2s7Cit9CisKKyNlbmRpZiAvKiAhSlNJTURfTUFTS0ZVTkNfTk9UX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvamNvbmZpZy5iYzUgYi9qY29uZmlnLmJjNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGMzMDlkCi0tLSAvZGV2L251bGwKKysrIGIvamNvbmZpZy5iYzUKQEAgLTAsMCArMSw0OCBAQAorLyogamNvbmZpZy5iYzUgLS0tIGpjb25maWcuaCBmb3IgQm9ybGFuZCBDKysgQ29tcGlsZXIgNS41ICh3aW4zMikgKi8KKy8qIHNlZSBqY29uZmlnLmRvYyBmb3IgZXhwbGFuYXRpb25zICovCisKKyNkZWZpbmUgSEFWRV9QUk9UT1RZUEVTCisjZGVmaW5lIEhBVkVfVU5TSUdORURfQ0hBUgorI2RlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JUCisvKiAjZGVmaW5lIHZvaWQgY2hhciAqLworLyogI2RlZmluZSBjb25zdCAqLworI3VuZGVmIENIQVJfSVNfVU5TSUdORUQKKyNkZWZpbmUgSEFWRV9TVERERUZfSAorI2RlZmluZSBIQVZFX1NURExJQl9ICisjdW5kZWYgTkVFRF9CU0RfU1RSSU5HUworI3VuZGVmIE5FRURfU1lTX1RZUEVTX0gKKyN1bmRlZiBORUVEX0ZBUl9QT0lOVEVSUwkvKiB3ZSBwcmVzdW1lIGEgMzItYml0IGZsYXQgbWVtb3J5IG1vZGVsICovCisjdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworI3VuZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCS8qIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSAtdy1zdHUgaW4gQ0ZMQUdTICovCisKKy8qIERlZmluZSAiYm9vbGVhbiIgYXMgdW5zaWduZWQgY2hhciwgbm90IGludCwgcGVyIFdpbmRvd3MgY3VzdG9tICovCisjZGVmaW5lIFRZUEVERUZfVUNIQVJfQk9PTEVBTgorCisjaWZkZWYgSlBFR19JTlRFUk5BTFMKKworI3VuZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECisKKyNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMUyAqLworCisjaWYgZGVmaW5lZChKUEVHX0lOVEVSTkFMUykgfHwgZGVmaW5lZChKUEVHX0lOVEVSTkFMX09QVElPTlMpCisjdW5kZWYgSlNJTURfTU1YX05PVF9TVVBQT1JURUQKKyN1bmRlZiBKU0lNRF8zRE5PV19OT1RfU1VQUE9SVEVECisjdW5kZWYgSlNJTURfU1NFX05PVF9TVVBQT1JURUQKKyN1bmRlZiBKU0lNRF9TU0UyX05PVF9TVVBQT1JURUQKKyNlbmRpZgorCisjaWZkZWYgSlBFR19DSlBFR19ESlBFRworCisjZGVmaW5lIEJNUF9TVVBQT1JURUQJCS8qIEJNUCBpbWFnZSBmaWxlIGZvcm1hdCAqLworI2RlZmluZSBHSUZfU1VQUE9SVEVECQkvKiBHSUYgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgUFBNX1NVUFBPUlRFRAkJLyogUEJNUExVUyBQUE0vUEdNIGltYWdlIGZpbGUgZm9ybWF0ICovCisjdW5kZWYgUkxFX1NVUFBPUlRFRAkJLyogVXRhaCBSTEUgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgVEFSR0FfU1VQUE9SVEVECQkvKiBUYXJnYSBpbWFnZSBmaWxlIGZvcm1hdCAqLworCisjZGVmaW5lIFRXT19GSUxFX0NPTU1BTkRMSU5FCisjZGVmaW5lIFVTRV9TRVRNT0RFCQkvKiBCb3JsYW5kIGhhcyBzZXRtb2RlKCkgKi8KKyN1bmRlZiBORUVEX1NJR05BTF9DQVRDSEVSCS8qIERlZmluZSB0aGlzIGlmIHlvdSB1c2Ugam1lbW5hbWUuYyAqLworI3VuZGVmIERPTlRfVVNFX0JfTU9ERQorI3VuZGVmIFBST0dSRVNTX1JFUE9SVAkJLyogb3B0aW9uYWwgKi8KKworI2VuZGlmIC8qIEpQRUdfQ0pQRUdfREpQRUcgKi8KZGlmZiAtLWdpdCBhL2pjb25maWcuY2ZnIGIvamNvbmZpZy5jZmcKaW5kZXggMzZhMDRmYS4uMTQ3Y2I2YiAxMDA2NDQKLS0tIGEvamNvbmZpZy5jZmcKKysrIGIvamNvbmZpZy5jZmcKQEAgLTE2LDYgKzE2LDkgQEAKIC8qIERlZmluZSB0aGlzIGlmIHlvdSBnZXQgd2FybmluZ3MgYWJvdXQgdW5kZWZpbmVkIHN0cnVjdHVyZXMuICovCiAjdW5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KIAorLyogRGVmaW5lICJib29sZWFuIiBhcyB1bnNpZ25lZCBjaGFyLCBub3QgaW50LCBwZXIgV2luZG93cyBjdXN0b20gKi8KKyN1bmRlZiBUWVBFREVGX1VDSEFSX0JPT0xFQU4KKwogI2lmZGVmIEpQRUdfSU5URVJOQUxTCiAKICN1bmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRApAQCAtMjYsNiArMjksMTMgQEAKIAogI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxTICovCiAKKyNpZiBkZWZpbmVkKEpQRUdfSU5URVJOQUxTKSB8fCBkZWZpbmVkKEpQRUdfSU5URVJOQUxfT1BUSU9OUykKKyN1bmRlZiBKU0lNRF9NTVhfTk9UX1NVUFBPUlRFRAorI3VuZGVmIEpTSU1EXzNETk9XX05PVF9TVVBQT1JURUQKKyN1bmRlZiBKU0lNRF9TU0VfTk9UX1NVUFBPUlRFRAorI3VuZGVmIEpTSU1EX1NTRTJfTk9UX1NVUFBPUlRFRAorI2VuZGlmCisKICNpZmRlZiBKUEVHX0NKUEVHX0RKUEVHCiAKICNkZWZpbmUgQk1QX1NVUFBPUlRFRAkJLyogQk1QIGltYWdlIGZpbGUgZm9ybWF0ICovCkBAIC0zNSw2ICs0NSw4IEBACiAjZGVmaW5lIFRBUkdBX1NVUFBPUlRFRAkJLyogVGFyZ2EgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KIAogI3VuZGVmIFRXT19GSUxFX0NPTU1BTkRMSU5FCisjdW5kZWYgVVNFX1NFVE1PREUKKyN1bmRlZiBVU0VfRkRPUEVOCiAjdW5kZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUgogI3VuZGVmIERPTlRfVVNFX0JfTU9ERQogCmRpZmYgLS1naXQgYS9qY29uZmlnLmRqIGIvamNvbmZpZy5kagppbmRleCBmNzU5YTlkLi5iNWEyZTQ3IDEwMDY0NAotLS0gYS9qY29uZmlnLmRqCisrKyBiL2pjb25maWcuZGoKQEAgLTIxLDYgKzIxLDEzIEBACiAKICNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMUyAqLwogCisjaWYgZGVmaW5lZChKUEVHX0lOVEVSTkFMUykgfHwgZGVmaW5lZChKUEVHX0lOVEVSTkFMX09QVElPTlMpCisjdW5kZWYgSlNJTURfTU1YX05PVF9TVVBQT1JURUQKKyN1bmRlZiBKU0lNRF8zRE5PV19OT1RfU1VQUE9SVEVECisjdW5kZWYgSlNJTURfU1NFX05PVF9TVVBQT1JURUQKKyN1bmRlZiBKU0lNRF9TU0UyX05PVF9TVVBQT1JURUQKKyNlbmRpZgorCiAjaWZkZWYgSlBFR19DSlBFR19ESlBFRwogCiAjZGVmaW5lIEJNUF9TVVBQT1JURUQJCS8qIEJNUCBpbWFnZSBmaWxlIGZvcm1hdCAqLwpAQCAtMzUsNCArNDIsNiBAQAogI3VuZGVmIERPTlRfVVNFX0JfTU9ERQogI3VuZGVmIFBST0dSRVNTX1JFUE9SVAkJLyogb3B0aW9uYWwgKi8KIAorI2RlZmluZSBGUkVFX01FTV9FU1RJTUFURQkwCS8qIGZvciBhbHRlcm5hdGUgY2pwZWcvZGpwZWcgKi8KKwogI2VuZGlmIC8qIEpQRUdfQ0pQRUdfREpQRUcgKi8KZGlmZiAtLWdpdCBhL2pjb25maWcubGludXggYi9qY29uZmlnLmxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzhlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qY29uZmlnLmxpbnV4CkBAIC0wLDAgKzEsNDQgQEAKKy8qIGpjb25maWcubGludXggLS0tIGpjb25maWcuaCBmb3IgTGludXggRUxGIHdpdGggZ2NjICovCisvKiBzZWUgamNvbmZpZy5kb2MgZm9yIGV4cGxhbmF0aW9ucyAqLworCisjZGVmaW5lIEhBVkVfUFJPVE9UWVBFUworI2RlZmluZSBIQVZFX1VOU0lHTkVEX0NIQVIKKyNkZWZpbmUgSEFWRV9VTlNJR05FRF9TSE9SVAorLyogI2RlZmluZSB2b2lkIGNoYXIgKi8KKy8qICNkZWZpbmUgY29uc3QgKi8KKyN1bmRlZiBDSEFSX0lTX1VOU0lHTkVECisjZGVmaW5lIEhBVkVfU1REREVGX0gKKyNkZWZpbmUgSEFWRV9TVERMSUJfSAorI3VuZGVmIE5FRURfQlNEX1NUUklOR1MKKyN1bmRlZiBORUVEX1NZU19UWVBFU19ICisjdW5kZWYgTkVFRF9GQVJfUE9JTlRFUlMKKyN1bmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisjdW5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KKworI2lmZGVmIEpQRUdfSU5URVJOQUxTCisKKyN1bmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRAorCisjZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8KKworI2lmIGRlZmluZWQoSlBFR19JTlRFUk5BTFMpIHx8IGRlZmluZWQoSlBFR19JTlRFUk5BTF9PUFRJT05TKQorI3VuZGVmIEpTSU1EX01NWF9OT1RfU1VQUE9SVEVECisjdW5kZWYgSlNJTURfM0ROT1dfTk9UX1NVUFBPUlRFRAorI3VuZGVmIEpTSU1EX1NTRV9OT1RfU1VQUE9SVEVECisjdW5kZWYgSlNJTURfU1NFMl9OT1RfU1VQUE9SVEVECisjZW5kaWYKKworI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUcKKworI2RlZmluZSBCTVBfU1VQUE9SVEVECQkvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgR0lGX1NVUFBPUlRFRAkJLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovCisjZGVmaW5lIFBQTV9TVVBQT1JURUQJCS8qIFBCTVBMVVMgUFBNL1BHTSBpbWFnZSBmaWxlIGZvcm1hdCAqLworI3VuZGVmIFJMRV9TVVBQT1JURUQJCS8qIFV0YWggUkxFIGltYWdlIGZpbGUgZm9ybWF0ICovCisjZGVmaW5lIFRBUkdBX1NVUFBPUlRFRAkJLyogVGFyZ2EgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKworI3VuZGVmIFRXT19GSUxFX0NPTU1BTkRMSU5FCisjdW5kZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUgkvKiBEZWZpbmUgdGhpcyBpZiB5b3UgdXNlIGptZW1uYW1lLmMgKi8KKyN1bmRlZiBET05UX1VTRV9CX01PREUKKyN1bmRlZiBQUk9HUkVTU19SRVBPUlQJCS8qIG9wdGlvbmFsICovCisKKyNlbmRpZiAvKiBKUEVHX0NKUEVHX0RKUEVHICovCmRpZmYgLS1naXQgYS9qY29uZmlnLm1ndyBiL2pjb25maWcubWd3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZGZlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9qY29uZmlnLm1ndwpAQCAtMCwwICsxLDQ4IEBACisvKiBqY29uZmlnLm1ndyAtLS0gamNvbmZpZy5oIGZvciBNaW5HVyAqLworLyogc2VlIGpjb25maWcuZG9jIGZvciBleHBsYW5hdGlvbnMgKi8KKworI2RlZmluZSBIQVZFX1BST1RPVFlQRVMKKyNkZWZpbmUgSEFWRV9VTlNJR05FRF9DSEFSCisjZGVmaW5lIEhBVkVfVU5TSUdORURfU0hPUlQKKy8qICNkZWZpbmUgdm9pZCBjaGFyICovCisvKiAjZGVmaW5lIGNvbnN0ICovCisjdW5kZWYgQ0hBUl9JU19VTlNJR05FRAorI2RlZmluZSBIQVZFX1NURERFRl9ICisjZGVmaW5lIEhBVkVfU1RETElCX0gKKyN1bmRlZiBORUVEX0JTRF9TVFJJTkdTCisjdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAorI3VuZGVmIE5FRURfRkFSX1BPSU5URVJTCisjdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworI3VuZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCisKKy8qIERlZmluZSAiYm9vbGVhbiIgYXMgdW5zaWduZWQgY2hhciwgbm90IGludCwgcGVyIFdpbmRvd3MgY3VzdG9tICovCisjZGVmaW5lIFRZUEVERUZfVUNIQVJfQk9PTEVBTgorCisjaWZkZWYgSlBFR19JTlRFUk5BTFMKKworI3VuZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECisKKyNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMUyAqLworCisjaWYgZGVmaW5lZChKUEVHX0lOVEVSTkFMUykgfHwgZGVmaW5lZChKUEVHX0lOVEVSTkFMX09QVElPTlMpCisjdW5kZWYgSlNJTURfTU1YX05PVF9TVVBQT1JURUQKKyN1bmRlZiBKU0lNRF8zRE5PV19OT1RfU1VQUE9SVEVECisjdW5kZWYgSlNJTURfU1NFX05PVF9TVVBQT1JURUQKKyN1bmRlZiBKU0lNRF9TU0UyX05PVF9TVVBQT1JURUQKKyNlbmRpZgorCisjaWZkZWYgSlBFR19DSlBFR19ESlBFRworCisjZGVmaW5lIEJNUF9TVVBQT1JURUQJCS8qIEJNUCBpbWFnZSBmaWxlIGZvcm1hdCAqLworI2RlZmluZSBHSUZfU1VQUE9SVEVECQkvKiBHSUYgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgUFBNX1NVUFBPUlRFRAkJLyogUEJNUExVUyBQUE0vUEdNIGltYWdlIGZpbGUgZm9ybWF0ICovCisjdW5kZWYgUkxFX1NVUFBPUlRFRAkJLyogVXRhaCBSTEUgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgVEFSR0FfU1VQUE9SVEVECQkvKiBUYXJnYSBpbWFnZSBmaWxlIGZvcm1hdCAqLworCisjZGVmaW5lIFRXT19GSUxFX0NPTU1BTkRMSU5FCS8qIG9wdGlvbmFsICovCisjZGVmaW5lIFVTRV9TRVRNT0RFCQkvKiBNaW5HVyBoYXMgc2V0bW9kZSgpICovCisjdW5kZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUgkvKiBEZWZpbmUgdGhpcyBpZiB5b3UgdXNlIGptZW1uYW1lLmMgKi8KKyN1bmRlZiBET05UX1VTRV9CX01PREUKKyN1bmRlZiBQUk9HUkVTU19SRVBPUlQJCS8qIG9wdGlvbmFsICovCisKKyNlbmRpZiAvKiBKUEVHX0NKUEVHX0RKUEVHICovCmRpZmYgLS1naXQgYS9qY29uZmlnLnZjIGIvamNvbmZpZy52YwppbmRleCA3ZTI5MWM3Li5kNWJjOWY5IDEwMDY0NAotLS0gYS9qY29uZmlnLnZjCisrKyBiL2pjb25maWcudmMKQEAgLTE2LDExICsxNiw3IEBACiAjdW5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KIAogLyogRGVmaW5lICJib29sZWFuIiBhcyB1bnNpZ25lZCBjaGFyLCBub3QgaW50LCBwZXIgV2luZG93cyBjdXN0b20gKi8KLSNpZm5kZWYgX19SUENORFJfSF9fCQkvKiBkb24ndCBjb25mbGljdCBpZiBycGNuZHIuaCBhbHJlYWR5IHJlYWQgKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBib29sZWFuOwotI2VuZGlmCi0jZGVmaW5lIEhBVkVfQk9PTEVBTgkJLyogcHJldmVudCBqbW9yZWNmZy5oIGZyb20gcmVkZWZpbmluZyBpdCAqLwotCisjZGVmaW5lIFRZUEVERUZfVUNIQVJfQk9PTEVBTgogCiAjaWZkZWYgSlBFR19JTlRFUk5BTFMKIApAQCAtMjgsNiArMjQsMTMgQEAKIAogI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxTICovCiAKKyNpZiBkZWZpbmVkKEpQRUdfSU5URVJOQUxTKSB8fCBkZWZpbmVkKEpQRUdfSU5URVJOQUxfT1BUSU9OUykKKyN1bmRlZiBKU0lNRF9NTVhfTk9UX1NVUFBPUlRFRAorI3VuZGVmIEpTSU1EXzNETk9XX05PVF9TVVBQT1JURUQKKyN1bmRlZiBKU0lNRF9TU0VfTk9UX1NVUFBPUlRFRAorI3VuZGVmIEpTSU1EX1NTRTJfTk9UX1NVUFBPUlRFRAorI2VuZGlmCisKICNpZmRlZiBKUEVHX0NKUEVHX0RKUEVHCiAKICNkZWZpbmUgQk1QX1NVUFBPUlRFRAkJLyogQk1QIGltYWdlIGZpbGUgZm9ybWF0ICovCmRpZmYgLS1naXQgYS9qY3FudDNkbi5hc20gYi9qY3FudDNkbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE5Nzg1OAotLS0gL2Rldi9udWxsCisrKyBiL2pjcW50M2RuLmFzbQpAQCAtMCwwICsxLDI0MCBAQAorOworOyBqY3FudDNkbi5hc20gLSBzYW1wbGUgZGF0YSBjb252ZXJzaW9uIGFuZCBxdWFudGl6YXRpb24gKDNETm93ISAmIE1NWCkKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBMYXN0IE1vZGlmaWVkIDogSmFudWFyeSAyMywgMjAwNgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyVpZmRlZiBKRkRDVF9GTFRfM0ROT1dfTU1YX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2NvbnZzYW1wX2ZsdF8zZG5vdyAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBzYW1wbGVfZGF0YQllYnArOAkJOyBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCislZGVmaW5lIHN0YXJ0X2NvbAllYnArMTIJCTsgSkRJTUVOU0lPTiBzdGFydF9jb2wKKyVkZWZpbmUgd29ya3NwYWNlCWVicCsxNgkJOyBGQVNUX0ZMT0FUICogd29ya3NwYWNlCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfY29udnNhbXBfZmx0XzNkbm93KQorCitFWFROKGpwZWdfY29udnNhbXBfZmx0XzNkbm93KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCXBjbXBlcXcgIG1tNyxtbTcKKwlwc2xsdyAgICBtbTcsNworCXBhY2tzc3diIG1tNyxtbTcJCTsgbW03ID0gUEJfQ0VOVEVSSlNBTVBMRSAoMHg4MDgwODAuLikKKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW3NhbXBsZV9kYXRhXQk7IChKU0FNUFJPVyAqKQorCW1vdgllYXgsIEpESU1FTlNJT04gW3N0YXJ0X2NvbF0KKwltb3YJZWRpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCTsgKERDVEVMRU0gKikKKwltb3YJZWN4LCBEQ1RTSVpFLzIKKwlhbGlnbngJMTYsNworLmNvbnZsb29wOgorCW1vdgllYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKwltb3YJZWR4LCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisKKwltb3ZxCW1tMCwgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQorCW1vdnEJbW0xLCBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisKKwlwc3ViYgltbTAsbW03CQkJCTsgbW0wPSgwMTIzNDU2NykKKwlwc3ViYgltbTEsbW03CQkJCTsgbW0xPSg4OUFCQ0RFRikKKworCXB1bnBja2xidyBtbTIsbW0wCQkJOyBtbTI9KCowKjEqMiozKQorCXB1bnBja2hidyBtbTAsbW0wCQkJOyBtbTA9KCo0KjUqNio3KQorCXB1bnBja2xidyBtbTMsbW0xCQkJOyBtbTM9KCo4KjkqQSpCKQorCXB1bnBja2hidyBtbTEsbW0xCQkJOyBtbTE9KCpDKkQqRSpGKQorCisJcHVucGNrbHdkIG1tNCxtbTIJCQk7IG1tND0oKioqMCoqKjEpCisJcHVucGNraHdkIG1tMixtbTIJCQk7IG1tMj0oKioqMioqKjMpCisJcHVucGNrbHdkIG1tNSxtbTAJCQk7IG1tNT0oKioqNCoqKjUpCisJcHVucGNraHdkIG1tMCxtbTAJCQk7IG1tMD0oKioqNioqKjcpCisKKwlwc3JhZAltbTQsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTQ9KDAxKQorCXBzcmFkCW1tMiwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tMj0oMjMpCisJcGkyZmQJbW00LG1tNAorCXBpMmZkCW1tMixtbTIKKwlwc3JhZAltbTUsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTU9KDQ1KQorCXBzcmFkCW1tMCwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tMD0oNjcpCisJcGkyZmQJbW01LG1tNQorCXBpMmZkCW1tMCxtbTAKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW00CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTIKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDIsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMyxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0wCisKKwlwdW5wY2tsd2QgbW02LG1tMwkJCTsgbW02PSgqKio4KioqOSkKKwlwdW5wY2tod2QgbW0zLG1tMwkJCTsgbW0zPSgqKipBKioqQikKKwlwdW5wY2tsd2QgbW00LG1tMQkJCTsgbW00PSgqKipDKioqRCkKKwlwdW5wY2tod2QgbW0xLG1tMQkJCTsgbW0xPSgqKipFKioqRikKKworCXBzcmFkCW1tNiwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tNj0oODkpCisJcHNyYWQJbW0zLChEV09SRF9CSVQtQllURV9CSVQpCTsgbW0zPShBQikKKwlwaTJmZAltbTYsbW02CisJcGkyZmQJbW0zLG1tMworCXBzcmFkCW1tNCwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tND0oQ0QpCisJcHNyYWQJbW0xLChEV09SRF9CSVQtQllURV9CSVQpCTsgbW0xPShFRikKKwlwaTJmZAltbTQsbW00CisJcGkyZmQJbW0xLG1tMQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTYKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW00CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKworCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWRpLCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorCWRlYwllY3gKKwlqbnoJbmVhciAuY29udmxvb3AKKworCWZlbW1zCQk7IGVtcHR5IE1NWC8zRE5vdyEgc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCXBvcAllYnAKKwlyZXQKKworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFF1YW50aXplL2Rlc2NhbGUgdGhlIGNvZWZmaWNpZW50cywgYW5kIHN0b3JlIGludG8gY29lZl9ibG9jaworOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19xdWFudGl6ZV9mbHRfM2Rub3cgKEpDT0VGUFRSIGNvZWZfYmxvY2ssIEZBU1RfRkxPQVQgKiBkaXZpc29ycywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpOworOworCislZGVmaW5lIGNvZWZfYmxvY2sJZWJwKzgJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycwllYnArMTIJCTsgRkFTVF9GTE9BVCAqIGRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX3F1YW50aXplX2ZsdF8zZG5vdykKKworRVhUTihqcGVnX3F1YW50aXplX2ZsdF8zZG5vdyk6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorOwlwdXNoCWVieAkJOyB1bnVzZWQKKzsJcHVzaAllY3gJCTsgdW51c2VkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdiAgICAgICBlYXgsIDB4NEI0MDAwMDAJOyAoZmxvYXQpMHgwMEMwMDAwMCAocm5kaW50X21hZ2ljKQorCW1vdmQgICAgICBtbTcsZWF4CisJcHVucGNrbGRxIG1tNyxtbTcJCTsgbW03PXsxMjU4MjkxMi4wRiAxMjU4MjkxMi4wRn0KKworCW1vdgllc2ksIFBPSU5URVIgW3dvcmtzcGFjZV0KKwltb3YJZWR4LCBQT0lOVEVSIFtkaXZpc29yc10KKwltb3YJZWRpLCBKQ09FRlBUUiBbY29lZl9ibG9ja10KKwltb3YJZWF4LCBEQ1RTSVpFMi8xNgorCWFsaWdueAkxNiw3CisucXVhbnRsb29wOgorCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygwLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlwZm11bAltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlwZm11bAltbTEsIE1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMixlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMCwzLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJcGZtdWwJbW0yLCBNTVdPUkQgW01NQkxPQ0soMCwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJcGZtdWwJbW0zLCBNTVdPUkQgW01NQkxPQ0soMCwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwlwZmFkZAltbTAsbW03CQkJOyBtbTA9KDAwICoqIDAxICoqKQorCXBmYWRkCW1tMSxtbTcJCQk7IG1tMT0oMDIgKiogMDMgKiopCisJcGZhZGQJbW0yLG1tNwkJCTsgbW0wPSgwNCAqKiAwNSAqKikKKwlwZmFkZAltbTMsbW03CQkJOyBtbTE9KDA2ICoqIDA3ICoqKQorCisJbW92cSAgICAgIG1tNCxtbTAKKwlwdW5wY2tsd2QgbW0wLG1tMQkJOyBtbTA9KDAwIDAyICoqICoqKQorCXB1bnBja2h3ZCBtbTQsbW0xCQk7IG1tND0oMDEgMDMgKiogKiopCisJbW92cSAgICAgIG1tNSxtbTIKKwlwdW5wY2tsd2QgbW0yLG1tMwkJOyBtbTI9KDA0IDA2ICoqICoqKQorCXB1bnBja2h3ZCBtbTUsbW0zCQk7IG1tNT0oMDUgMDcgKiogKiopCisKKwlwdW5wY2tsd2QgbW0wLG1tNAkJOyBtbTA9KDAwIDAxIDAyIDAzKQorCXB1bnBja2x3ZCBtbTIsbW01CQk7IG1tMj0oMDQgMDUgMDYgMDcpCisKKwltb3ZxCW1tNiwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMSwxLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJcGZtdWwJbW02LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJcGZtdWwJbW0xLCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSygxLDIsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tNCwgTU1XT1JEIFtNTUJMT0NLKDEsMyxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCXBmbXVsCW1tMywgTU1XT1JEIFtNTUJMT0NLKDEsMixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCXBmbXVsCW1tNCwgTU1XT1JEIFtNTUJMT0NLKDEsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJcGZhZGQJbW02LG1tNwkJCTsgbW0wPSgxMCAqKiAxMSAqKikKKwlwZmFkZAltbTEsbW03CQkJOyBtbTQ9KDEyICoqIDEzICoqKQorCXBmYWRkCW1tMyxtbTcJCQk7IG1tMD0oMTQgKiogMTUgKiopCisJcGZhZGQJbW00LG1tNwkJCTsgbW00PSgxNiAqKiAxNyAqKikKKworCW1vdnEgICAgICBtbTUsbW02CisJcHVucGNrbHdkIG1tNixtbTEJCTsgbW02PSgxMCAxMiAqKiAqKikKKwlwdW5wY2tod2QgbW01LG1tMQkJOyBtbTU9KDExIDEzICoqICoqKQorCW1vdnEgICAgICBtbTEsbW0zCisJcHVucGNrbHdkIG1tMyxtbTQJCTsgbW0zPSgxNCAxNiAqKiAqKikKKwlwdW5wY2tod2QgbW0xLG1tNAkJOyBtbTE9KDE1IDE3ICoqICoqKQorCisJcHVucGNrbHdkIG1tNixtbTUJCTsgbW02PSgxMCAxMSAxMiAxMykKKwlwdW5wY2tsd2QgbW0zLG1tMQkJOyBtbTM9KDE0IDE1IDE2IDE3KQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW02CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisKKwlhZGQJZXNpLCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCisJYWRkCWVkeCwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorCWFkZAllZGksIGJ5dGUgMTYqU0laRU9GX0pDT0VGCisJZGVjCWVheAorCWpuegluZWFyIC5xdWFudGxvb3AKKworCWZlbW1zCQk7IGVtcHR5IE1NWC8zRE5vdyEgc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgdW51c2VkCis7CXBvcAllYngJCTsgdW51c2VkCisJcG9wCWVicAorCXJldAorCislZW5kaWYgOyBKRkRDVF9GTFRfM0ROT1dfTU1YX1NVUFBPUlRFRAorJWVuZGlmIDsgRENUX0ZMT0FUX1NVUFBPUlRFRApkaWZmIC0tZ2l0IGEvamNxbnRmbHQuYXNtIGIvamNxbnRmbHQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzFhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qY3FudGZsdC5hc20KQEAgLTAsMCArMSwyMDIgQEAKKzsKKzsgamNxbnRmbHQuYXNtIC0gc2FtcGxlIGRhdGEgY29udmVyc2lvbiBhbmQgcXVhbnRpemF0aW9uIChub24tU0lNRCwgRlApCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgTGFzdCBNb2RpZmllZCA6IE1hcmNoIDIxLCAyMDA0Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCislaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2NvbnZzYW1wX2Zsb2F0IChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKzsgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgc2FtcGxlX2RhdGEJZWJwKzgJCTsgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YQorJWRlZmluZSBzdGFydF9jb2wJZWJwKzEyCQk7IEpESU1FTlNJT04gc3RhcnRfY29sCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2NvbnZzYW1wX2Zsb2F0KQorCitFWFROKGpwZWdfY29udnNhbXBfZmxvYXQpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdCTsgKEpTQU1QUk9XICopCisJbW92CWVkaSwgUE9JTlRFUiBbd29ya3NwYWNlXQk7IChEQ1RFTEVNICopCisJbW92CWVjeCwgRENUU0laRQorCWFsaWdueAkxNiw3CisuY29udmxvb3A6CisJbW92CWVieCwgSlNBTVBST1cgW2VzaV0JCTsgKEpTQU1QTEUgKikKKwlhZGQJZWJ4LCBKRElNRU5TSU9OIFtzdGFydF9jb2xdCisKKyVhc3NpZ24gaSAwCTsgaT0wCislcmVwIDQJOyAtLSByZXBlYXQgNCB0aW1lcyAtLS0KKwl4b3IJZWF4LGVheAorCXhvcgllZHgsZWR4CisJbW92CWFsLCBKU0FNUExFIFtlYngrKGkrMCkqU0laRU9GX0pTQU1QTEVdCisJbW92CWRsLCBKU0FNUExFIFtlYngrKGkrMSkqU0laRU9GX0pTQU1QTEVdCisJYWRkCWVheCwgYnl0ZSAtQ0VOVEVSSlNBTVBMRQorCWFkZAllZHgsIGJ5dGUgLUNFTlRFUkpTQU1QTEUKKwlwdXNoCWVheAorCXB1c2gJZWR4CislYXNzaWduIGkgaSsyCTsgaSs9MgorJWVuZHJlcAk7IC0tIHJlcGVhdCBlbmQgLS0tCisKKwlmaWxkCUlOVDMyIFtlc3ArMCpTSVpFT0ZfSU5UMzJdCisJZmlsZAlJTlQzMiBbZXNwKzEqU0laRU9GX0lOVDMyXQorCWZpbGQJSU5UMzIgW2VzcCsyKlNJWkVPRl9JTlQzMl0KKwlmaWxkCUlOVDMyIFtlc3ArMypTSVpFT0ZfSU5UMzJdCisJZmlsZAlJTlQzMiBbZXNwKzQqU0laRU9GX0lOVDMyXQorCWZpbGQJSU5UMzIgW2VzcCs1KlNJWkVPRl9JTlQzMl0KKwlmaWxkCUlOVDMyIFtlc3ArNipTSVpFT0ZfSU5UMzJdCisJZmlsZAlJTlQzMiBbZXNwKzcqU0laRU9GX0lOVDMyXQorCisJYWRkCWVzcCwgYnl0ZSBEQ1RTSVpFKlNJWkVPRl9JTlQzMgorCisJZnN0cAlGQVNUX0ZMT0FUIFtlZGkrMCpTSVpFT0ZfRkFTVF9GTE9BVF0KKwlmc3RwCUZBU1RfRkxPQVQgW2VkaSsxKlNJWkVPRl9GQVNUX0ZMT0FUXQorCWZzdHAJRkFTVF9GTE9BVCBbZWRpKzIqU0laRU9GX0ZBU1RfRkxPQVRdCisJZnN0cAlGQVNUX0ZMT0FUIFtlZGkrMypTSVpFT0ZfRkFTVF9GTE9BVF0KKwlmc3RwCUZBU1RfRkxPQVQgW2VkaSs0KlNJWkVPRl9GQVNUX0ZMT0FUXQorCWZzdHAJRkFTVF9GTE9BVCBbZWRpKzUqU0laRU9GX0ZBU1RfRkxPQVRdCisJZnN0cAlGQVNUX0ZMT0FUIFtlZGkrNipTSVpFT0ZfRkFTVF9GTE9BVF0KKwlmc3RwCUZBU1RfRkxPQVQgW2VkaSs3KlNJWkVPRl9GQVNUX0ZMT0FUXQorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWRpLCBieXRlIERDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKKwlkZWMJZWN4CisJam56CW5lYXIgLmNvbnZsb29wCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2sKKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfcXVhbnRpemVfZmxvYXQgKEpDT0VGUFRSIGNvZWZfYmxvY2ssIEZBU1RfRkxPQVQgKiBkaXZpc29ycywKKzsgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgY29lZl9ibG9jawllYnArOAkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIGRpdmlzb3JzCWVicCsxMgkJOyBGQVNUX0ZMT0FUICogZGl2aXNvcnMKKyVkZWZpbmUgd29ya3NwYWNlCWVicCsxNgkJOyBGQVNUX0ZMT0FUICogd29ya3NwYWNlCisKKyVkZWZpbmUgRkxUX1JPVU5EUwkxCQk7IGZyb20gPGZsb2F0Lmg+CisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfcXVhbnRpemVfZmxvYXQpCisKK0VYVE4oanBlZ19xdWFudGl6ZV9mbG9hdCk6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IHVudXNlZAorOwlwdXNoCWVkeAkJOyB1bnVzZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKyVpZiAoRkxUX1JPVU5EUyAhPSAxKQorCXB1c2gJZWF4CisJZm5zdGN3CXdvcmQgW2VzcF0KKwltb3YJZWF4LCBbZXNwXQorCWFuZAllYXgsICh+MHgwQzAwKQkJOyByb3VuZCB0byBuZWFyZXN0IGludGVnZXIKKwlwdXNoCWVheAorCWZsZGN3CXdvcmQgW2VzcF0KKwlwb3AJZWF4CislZW5kaWYKKwltb3YJZXNpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCisJbW92CWVieCwgUE9JTlRFUiBbZGl2aXNvcnNdCisJbW92CWVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCisJbW92CWVheCwgRENUU0laRTIvOAorCWFsaWdueAkxNiw3CisucXVhbnRsb29wOgorCWZsZAlGQVNUX0ZMT0FUIFtlc2krMCpTSVpFT0ZfRkFTVF9GTE9BVF0KKwlmbXVsCUZBU1RfRkxPQVQgW2VieCswKlNJWkVPRl9GQVNUX0ZMT0FUXQorCWZsZAlGQVNUX0ZMT0FUIFtlc2krMSpTSVpFT0ZfRkFTVF9GTE9BVF0KKwlmbXVsCUZBU1RfRkxPQVQgW2VieCsxKlNJWkVPRl9GQVNUX0ZMT0FUXQorCWZsZAlGQVNUX0ZMT0FUIFtlc2krMipTSVpFT0ZfRkFTVF9GTE9BVF0KKwlmbXVsCUZBU1RfRkxPQVQgW2VieCsyKlNJWkVPRl9GQVNUX0ZMT0FUXQorCWZsZAlGQVNUX0ZMT0FUIFtlc2krMypTSVpFT0ZfRkFTVF9GTE9BVF0KKwlmbXVsCUZBU1RfRkxPQVQgW2VieCszKlNJWkVPRl9GQVNUX0ZMT0FUXQorCisJZmxkCUZBU1RfRkxPQVQgW2VzaSs0KlNJWkVPRl9GQVNUX0ZMT0FUXQorCWZtdWwJRkFTVF9GTE9BVCBbZWJ4KzQqU0laRU9GX0ZBU1RfRkxPQVRdCisJZnhjaAlzdDAsc3QxCisJZmxkCUZBU1RfRkxPQVQgW2VzaSs1KlNJWkVPRl9GQVNUX0ZMT0FUXQorCWZtdWwJRkFTVF9GTE9BVCBbZWJ4KzUqU0laRU9GX0ZBU1RfRkxPQVRdCisJZnhjaAlzdDAsc3QzCisJZmxkCUZBU1RfRkxPQVQgW2VzaSs2KlNJWkVPRl9GQVNUX0ZMT0FUXQorCWZtdWwJRkFTVF9GTE9BVCBbZWJ4KzYqU0laRU9GX0ZBU1RfRkxPQVRdCisJZnhjaAlzdDAsc3Q1CisJZmxkCUZBU1RfRkxPQVQgW2VzaSs3KlNJWkVPRl9GQVNUX0ZMT0FUXQorCWZtdWwJRkFTVF9GTE9BVCBbZWJ4KzcqU0laRU9GX0ZBU1RfRkxPQVRdCisJZnhjaAlzdDAsc3Q3CisKKwlmaXN0cAlKQ09FRiBbZWRpKzAqU0laRU9GX0pDT0VGXQorCWZpc3RwCUpDT0VGIFtlZGkrMSpTSVpFT0ZfSkNPRUZdCisJZmlzdHAJSkNPRUYgW2VkaSsyKlNJWkVPRl9KQ09FRl0KKwlmaXN0cAlKQ09FRiBbZWRpKzMqU0laRU9GX0pDT0VGXQorCWZpc3RwCUpDT0VGIFtlZGkrNCpTSVpFT0ZfSkNPRUZdCisJZmlzdHAJSkNPRUYgW2VkaSs1KlNJWkVPRl9KQ09FRl0KKwlmaXN0cAlKQ09FRiBbZWRpKzYqU0laRU9GX0pDT0VGXQorCWZpc3RwCUpDT0VGIFtlZGkrNypTSVpFT0ZfSkNPRUZdCisKKwlhZGQJZXNpLCBieXRlIDgqU0laRU9GX0ZBU1RfRkxPQVQKKwlhZGQJZWJ4LCBieXRlIDgqU0laRU9GX0ZBU1RfRkxPQVQKKwlhZGQJZWRpLCBieXRlIDgqU0laRU9GX0pDT0VGCisJZGVjCWVheAorCWpueglzaG9ydCAucXVhbnRsb29wCisKKyVpZiAoRkxUX1JPVU5EUyAhPSAxKQorCWZsZGN3CXdvcmQgW2VzcF0KKwlwb3AJZWF4CQk7IHBvcCBvbGQgY29udHJvbCB3b3JkCislZW5kaWYKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IHVudXNlZAorOwlwb3AJZWN4CQk7IHVudXNlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IERDVF9GTE9BVF9TVVBQT1JURUQKZGlmZiAtLWdpdCBhL2pjcW50aW50LmFzbSBiL2pjcW50aW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGRlMWNiCi0tLSAvZGV2L251bGwKKysrIGIvamNxbnRpbnQuYXNtCkBAIC0wLDAgKzEsMjQzIEBACis7Cis7IGpjcW50aW50LmFzbSAtIHNhbXBsZSBkYXRhIGNvbnZlcnNpb24gYW5kIHF1YW50aXphdGlvbiAobm9uLVNJTUQsIGludGVnZXIpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgTGFzdCBNb2RpZmllZCA6IEphbnVhcnkgMjcsIDIwMDUKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgVGhpcyBtb2R1bGUgaXMgc3BlY2lhbGl6ZWQgdG8gdGhlIGNhc2UgRENUU0laRSA9IDguCis7CislaWYgRENUU0laRSAhPSA4CislZXJyb3IgIlNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiIKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfY29udnNhbXBfaW50IChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKzsgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKiB3b3Jrc3BhY2UpOworOworCislZGVmaW5lIHNhbXBsZV9kYXRhCWVicCs4CQk7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKKyVkZWZpbmUgc3RhcnRfY29sCWVicCsxMgkJOyBKRElNRU5TSU9OIHN0YXJ0X2NvbAorJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IERDVEVMRU0gKiB3b3Jrc3BhY2UKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19jb252c2FtcF9pbnQpCisKK0VYVE4oanBlZ19jb252c2FtcF9pbnQpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdCTsgKEpTQU1QUk9XICopCisJbW92CWVkaSwgUE9JTlRFUiBbd29ya3NwYWNlXQk7IChEQ1RFTEVNICopCisJbW92CWVjeCwgRENUU0laRQorCWFsaWdueAkxNiw3CisuY29udmxvb3A6CisJbW92CWVieCwgSlNBTVBST1cgW2VzaV0JCTsgKEpTQU1QTEUgKikKKwlhZGQJZWJ4LCBKRElNRU5TSU9OIFtzdGFydF9jb2xdCisKKyVhc3NpZ24gaSAwCTsgaT0wCislcmVwIDQJOyAtLSByZXBlYXQgNCB0aW1lcyAtLS0KKwl4b3IJZWF4LGVheAorCXhvcgllZHgsZWR4CisJbW92CWFsLCBKU0FNUExFIFtlYngrKGkrMCkqU0laRU9GX0pTQU1QTEVdCisJbW92CWRsLCBKU0FNUExFIFtlYngrKGkrMSkqU0laRU9GX0pTQU1QTEVdCisJYWRkCWVheCwgYnl0ZSAtQ0VOVEVSSlNBTVBMRQorCWFkZAllZHgsIGJ5dGUgLUNFTlRFUkpTQU1QTEUKKwltb3YJRENURUxFTSBbZWRpKyhpKzApKlNJWkVPRl9EQ1RFTEVNXSwgYXgKKwltb3YJRENURUxFTSBbZWRpKyhpKzEpKlNJWkVPRl9EQ1RFTEVNXSwgZHgKKyVhc3NpZ24gaSBpKzIJOyBpKz0yCislZW5kcmVwCTsgLS0gcmVwZWF0IGVuZCAtLS0KKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJYWRkCWVkaSwgYnl0ZSBEQ1RTSVpFKlNJWkVPRl9EQ1RFTEVNCisJZGVjCWVjeAorCWpueglzaG9ydCAuY29udmxvb3AKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCXBvcAllYnAKKwlyZXQKKworJWlmbmRlZiBKRkRDVF9JTlRfUVVBTlRJWkVfV0lUSF9ESVZJU0lPTgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFF1YW50aXplL2Rlc2NhbGUgdGhlIGNvZWZmaWNpZW50cywgYW5kIHN0b3JlIGludG8gY29lZl9ibG9jaworOworOyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGFuIGFsZ29yaXRobSBkZXNjcmliZWQgaW4KKzsgICAiSG93IHRvIG9wdGltaXplIGZvciB0aGUgUGVudGl1bSBmYW1pbHkgb2YgbWljcm9wcm9jZXNzb3JzIgorOyAgIChodHRwOi8vd3d3LmFnbmVyLm9yZy9hc3NlbS8pLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19xdWFudGl6ZV9pbnQgKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKiBkaXZpc29ycywKKzsgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKiB3b3Jrc3BhY2UpOworOworCislZGVmaW5lIFJFQ0lQUk9DQUwoaSxiKQkoKGIpKygoaSkrRENUU0laRTIqMCkqU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIENPUlJFQ1RJT04oaSxiKQkoKGIpKygoaSkrRENUU0laRTIqMSkqU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIFNISUZUKGksYikJKChiKSsoKGkpK0RDVFNJWkUyKjMpKlNJWkVPRl9EQ1RFTEVNKQorCislZGVmaW5lIGNvZWZfYmxvY2sJZWJwKzgJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycwllYnArMTIJCTsgRENURUxFTSAqIGRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRENURUxFTSAqIHdvcmtzcGFjZQorCislZGVmaW5lIFVOUk9MTAkyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfcXVhbnRpemVfaW50KQorCitFWFROKGpwZWdfcXVhbnRpemVfaW50KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdgllc2ksIFBPSU5URVIgW3dvcmtzcGFjZV0KKwltb3YJZWJ4LCBQT0lOVEVSIFtkaXZpc29yc10KKwltb3YJZWRpLCBKQ09FRlBUUiBbY29lZl9ibG9ja10KKwltb3YJZWN4LCBEQ1RTSVpFMi9VTlJPTEwKKwlhbGlnbngJMTYsNworLnF1YW50bG9vcDoKKwlwdXNoCWVjeAorCislYXNzaWduIGkgMAk7IGk9MDsKKyVyZXAgVU5ST0xMCTsgLS0tLSByZXBlYXQgKFVOUk9MTCkgdGltZXMgLS0tLQorCW1vdgljeCwgRENURUxFTSBbZXNpKyhpKSpTSVpFT0ZfRENURUxFTV0KKwltb3YJYXgsY3gKKwlzYXIJY3gsKFdPUkRfQklULTEpCisJeG9yCWF4LGN4CQk7IGlmIChheCA8IDApIGF4ID0gLWF4OworCXN1YglheCxjeAorCWFkZAlheCwgRENURUxFTSBbQ09SUkVDVElPTihpLGVieCldCTsgY29ycmVjdGlvbiArIHJvdW5kZmFjdG9yCisJc2hsCWF4LDEKKwltdWwJRENURUxFTSBbUkVDSVBST0NBTChpLGVieCldCTsgcmVjaXByb2NhbAorCW1vdglheCxjeAorCW1vdgljeCwgRENURUxFTSBbU0hJRlQoaSxlYngpXQk7IHNoaWZ0CisJc2hyCWR4LGNsCisJeG9yCWR4LGF4CisJc3ViCWR4LGF4CisJbW92CUpDT0VGIFtlZGkrKGkpKlNJWkVPRl9KQ09FRl0sIGR4CislYXNzaWduIGkgaSsxCTsgaSsrOworJWVuZHJlcAkJOyAtLS0tIHJlcGVhdCBlbmQgLS0tLQorCisJcG9wCWVjeAorCisJYWRkCWVzaSwgYnl0ZSBVTlJPTEwqU0laRU9GX0RDVEVMRU0KKwlhZGQJZWJ4LCBieXRlIFVOUk9MTCpTSVpFT0ZfRENURUxFTQorCWFkZAllZGksIGJ5dGUgVU5ST0xMKlNJWkVPRl9KQ09FRgorCWRlYwllY3gKKwlqbnoJLnF1YW50bG9vcAorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcG9wCWVicAorCXJldAorCislZWxzZSA7IEpGRENUX0lOVF9RVUFOVElaRV9XSVRIX0RJVklTSU9OCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2NrCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX3F1YW50aXplX2lkaXYgKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKiBkaXZpc29ycywKKzsgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBjb2VmX2Jsb2NrCWVicCs4CQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgZGl2aXNvcnMJZWJwKzEyCQk7IERDVEVMRU0gKiBkaXZpc29ycworJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IERDVEVMRU0gKiB3b3Jrc3BhY2UKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19xdWFudGl6ZV9pZGl2KQorCitFWFROKGpwZWdfcXVhbnRpemVfaWRpdik6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZXNpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCisJbW92CWVieCwgUE9JTlRFUiBbZGl2aXNvcnNdCisJbW92CWVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCisJbW92CWVjeCwgRENUU0laRTIKKwlhbGlnbngJMTYsNworLnF1YW50bG9vcDoKKwlwdXNoCWVjeAorCisJbW92c3gJZWN4LCBEQ1RFTEVNIFtlc2ldCTsgdGVtcAorCW1vdgllYXgsZWN4CisJc2FyCWVjeCwoRFdPUkRfQklULTEpCisJeG9yCWVkeCxlZHgKKwltb3YJZHgsIERDVEVMRU0gW2VieF0JOyBxdmFsCisJeG9yCWVheCxlY3gJCQk7IGlmIChlYXggPCAwKSBlYXggPSAtZWF4OworCXNocgllZHgsMQorCXN1YgllYXgsZWN4CisJY21wCWVheCxlZHgJCQk7IGlmICh0ZW1wICsgcXZhbC8yID49IHF2YWwpCisJamdlCXNob3J0IC5xdWFudAorCTsgLS0tLSBpZiB0aGUgcXVhbnRpemVkIGNvZWZmaWNpZW50IGlzIHplcm8KKwl4b3IJZWF4LGVheAorCWptcAlzaG9ydCAub3V0cHV0CisJYWxpZ254CTE2LDcKKy5xdWFudDoJOyAtLS0tIGRvIHF1YW50aXphdGlvbgorCWFkZAllYXgsZWR4CisJeG9yCWVkeCxlZHgKKwlkaXYJRENURUxFTSBbZWJ4XQkJOyBROmF4LFI6ZHgKKwl4b3IJYXgsY3gKKwlzdWIJYXgsY3gKKwlhbGlnbngJMTYsNworLm91dHB1dDoKKwltb3YJSkNPRUYgW2VkaV0sIGF4CisKKwlwb3AJZWN4CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9EQ1RFTEVNCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfRENURUxFTQorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pDT0VGCisJZGVjCWVjeAorCWpueglzaG9ydCAucXVhbnRsb29wCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7ICFKRkRDVF9JTlRfUVVBTlRJWkVfV0lUSF9ESVZJU0lPTgpkaWZmIC0tZ2l0IGEvamNxbnRtbXguYXNtIGIvamNxbnRtbXguYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZGY1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9qY3FudG1teC5hc20KQEAgLTAsMCArMSwyNTQgQEAKKzsKKzsgamNxbnRtbXguYXNtIC0gc2FtcGxlIGRhdGEgY29udmVyc2lvbiBhbmQgcXVhbnRpemF0aW9uIChNTVgpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgTGFzdCBNb2RpZmllZCA6IEphbnVhcnkgMjcsIDIwMDUKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKyVpZmRlZiBKRkRDVF9JTlRfTU1YX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2NvbnZzYW1wX2ludF9tbXggKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorOyAgICAgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKiB3b3Jrc3BhY2UpOworOworCislZGVmaW5lIHNhbXBsZV9kYXRhCWVicCs4CQk7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKKyVkZWZpbmUgc3RhcnRfY29sCWVicCsxMgkJOyBKRElNRU5TSU9OIHN0YXJ0X2NvbAorJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IERDVEVMRU0gKiB3b3Jrc3BhY2UKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19jb252c2FtcF9pbnRfbW14KQorCitFWFROKGpwZWdfY29udnNhbXBfaW50X21teCk6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlweG9yCW1tNixtbTYJCQk7IG1tNj0oYWxsIDAncykKKwlwY21wZXF3CW1tNyxtbTcKKwlwc2xsdwltbTcsNwkJCTsgbW03PXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODB9CisKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtzYW1wbGVfZGF0YV0JOyAoSlNBTVBST1cgKikKKwltb3YJZWF4LCBKRElNRU5TSU9OIFtzdGFydF9jb2xdCisJbW92CWVkaSwgUE9JTlRFUiBbd29ya3NwYWNlXQk7IChEQ1RFTEVNICopCisJbW92CWVjeCwgRENUU0laRS80CisJYWxpZ254CTE2LDcKKy5jb252bG9vcDoKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisJbW92CWVkeCwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCisJbW92cQltbTAsIE1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0JOyBtbTA9KDAxMjM0NTY3KQorCW1vdnEJbW0xLCBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCTsgbW0xPSg4OUFCQ0RFRikKKworCW1vdgllYngsIEpTQU1QUk9XIFtlc2krMipTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKwltb3YJZWR4LCBKU0FNUFJPVyBbZXNpKzMqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisKKwltb3ZxCW1tMiwgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQk7IG1tMj0oR0hJSktMTU4pCisJbW92cQltbTMsIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0JOyBtbTM9KE9QUVJTVFVWKQorCisJbW92cSAgICAgIG1tNCxtbTAKKwlwdW5wY2tsYncgbW0wLG1tNgkJOyBtbTA9KDAxMjMpCisJcHVucGNraGJ3IG1tNCxtbTYJCTsgbW00PSg0NTY3KQorCW1vdnEgICAgICBtbTUsbW0xCisJcHVucGNrbGJ3IG1tMSxtbTYJCTsgbW0xPSg4OUFCKQorCXB1bnBja2hidyBtbTUsbW02CQk7IG1tNT0oQ0RFRikKKworCXBhZGR3CW1tMCxtbTcKKwlwYWRkdwltbTQsbW03CisJcGFkZHcJbW0xLG1tNworCXBhZGR3CW1tNSxtbTcKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0RDVEVMRU0pXSwgbW01CisKKwltb3ZxICAgICAgbW0wLG1tMgorCXB1bnBja2xidyBtbTIsbW02CQk7IG1tMj0oR0hJSikKKwlwdW5wY2toYncgbW0wLG1tNgkJOyBtbTA9KEtMTU4pCisJbW92cSAgICAgIG1tNCxtbTMKKwlwdW5wY2tsYncgbW0zLG1tNgkJOyBtbTM9KE9QUVIpCisJcHVucGNraGJ3IG1tNCxtbTYJCTsgbW00PShTVFVWKQorCisJcGFkZHcJbW0yLG1tNworCXBhZGR3CW1tMCxtbTcKKwlwYWRkdwltbTMsbW03CisJcGFkZHcJbW00LG1tNworCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTIKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgbW0zCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTQKKworCWFkZAllc2ksIGJ5dGUgNCpTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWRpLCBieXRlIDQqRENUU0laRSpTSVpFT0ZfRENURUxFTQorCWRlYwllY3gKKwlqbnoJc2hvcnQgLmNvbnZsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcG9wCWVicAorCXJldAorCislaWZuZGVmIEpGRENUX0lOVF9RVUFOVElaRV9XSVRIX0RJVklTSU9OCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2NrCis7Cis7IFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gYW4gYWxnb3JpdGhtIGRlc2NyaWJlZCBpbgorOyAgICJIb3cgdG8gb3B0aW1pemUgZm9yIHRoZSBQZW50aXVtIGZhbWlseSBvZiBtaWNyb3Byb2Nlc3NvcnMiCis7ICAgKGh0dHA6Ly93d3cuYWduZXIub3JnL2Fzc2VtLykuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX3F1YW50aXplX2ludF9tbXggKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKiBkaXZpc29ycywKKzsgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBSRUNJUFJPQ0FMKG0sbixiKSBNTUJMT0NLKERDVFNJWkUqMCsobSksKG4pLChiKSxTSVpFT0ZfRENURUxFTSkKKyVkZWZpbmUgQ09SUkVDVElPTihtLG4sYikgTU1CTE9DSyhEQ1RTSVpFKjErKG0pLChuKSwoYiksU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIFNDQUxFKG0sbixiKSAgICAgIE1NQkxPQ0soRENUU0laRSoyKyhtKSwobiksKGIpLFNJWkVPRl9EQ1RFTEVNKQorCislZGVmaW5lIGNvZWZfYmxvY2sJZWJwKzgJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycwllYnArMTIJCTsgRENURUxFTSAqIGRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRENURUxFTSAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX3F1YW50aXplX2ludF9tbXgpCisKK0VYVE4oanBlZ19xdWFudGl6ZV9pbnRfbW14KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCis7CXB1c2gJZWJ4CQk7IHVudXNlZAorOwlwdXNoCWVjeAkJOyB1bnVzZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQorCW1vdgllZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorCW1vdgllZGksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrXQorCW1vdglhaCwgMgorCWFsaWdueAkxNiw3CisucXVhbnRsb29wMToKKwltb3YJYWwsIERDVFNJWkUyLzgvMgorCWFsaWdueAkxNiw3CisucXVhbnRsb29wMjoKKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVzaSxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTAsbW0yCisJbW92cQltbTEsbW0zCisJcHNyYXcJbW0yLChXT1JEX0JJVC0xKQorCXBzcmF3CW1tMywoV09SRF9CSVQtMSkKKwlweG9yCW1tMCxtbTIKKwlweG9yCW1tMSxtbTMKKwlwc3VidwltbTAsbW0yCQk7IGlmIChtbTAgPCAwKSBtbTAgPSAtbW0wOworCXBzdWJ3CW1tMSxtbTMJCTsgaWYgKG1tMSA8IDApIG1tMSA9IC1tbTE7CisKKwk7IHVuc2lnbmVkIGxvbmcgdW5zaWduZWRfbXVsdGlwbHkodW5zaWduZWQgc2hvcnQgeCwgdW5zaWduZWQgc2hvcnQgeSkKKwk7IHsKKwk7ICAgZW51bSB7IFNIT1JUX0JJVCA9IDE2IH07CisJOyAgIHNpZ25lZCBzaG9ydCBzeCA9IChzaWduZWQgc2hvcnQpIHg7CisJOyAgIHNpZ25lZCBzaG9ydCBzeSA9IChzaWduZWQgc2hvcnQpIHk7CisJOyAgIHNpZ25lZCBsb25nIHN6OworCTsgCisJOyAgIHN6ID0gKGxvbmcpIHN4ICogKGxvbmcpIHN5OyAgICAgLyogc2lnbmVkIG11bHRpcGx5ICovCisJOyAKKwk7ICAgaWYgKHN4IDwgMCkgc3ogKz0gKGxvbmcpIHN5IDw8IFNIT1JUX0JJVDsKKwk7ICAgaWYgKHN5IDwgMCkgc3ogKz0gKGxvbmcpIHN4IDw8IFNIT1JUX0JJVDsKKwk7IAorCTsgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHN6OworCTsgfQorCisJcGFkZHcJbW0wLCBNTVdPUkQgW0NPUlJFQ1RJT04oMCwwLGVkeCldICAgOyBjb3JyZWN0aW9uICsgcm91bmRmYWN0b3IKKwlwYWRkdwltbTEsIE1NV09SRCBbQ09SUkVDVElPTigwLDEsZWR4KV0KKwlwc2xsdwltbTAsMQorCXBzbGx3CW1tMSwxCisJbW92cQltbTQsbW0wCisJbW92cQltbTUsbW0xCisJcG11bGh3CW1tMCwgTU1XT1JEIFtSRUNJUFJPQ0FMKDAsMCxlZHgpXSAgIDsgcmVjaXByb2NhbAorCXBtdWxodwltbTEsIE1NV09SRCBbUkVDSVBST0NBTCgwLDEsZWR4KV0KKwltb3ZxCW1tNiwgTU1XT1JEIFtTQ0FMRSgwLDAsZWR4KV0JOyBzY2FsZQorCW1vdnEJbW03LCBNTVdPUkQgW1NDQUxFKDAsMSxlZHgpXQorCXBhZGR3CW1tMCxtbTQJCTsgcmVjaXByb2NhbCBpcyBhbHdheXMgbmVnYXRpdmUgKE1TQj0xKQorCXBhZGR3CW1tMSxtbTUKKwlwc2xsdwltbTAsMQorCXBzbGx3CW1tMSwxCisJbW92cQltbTQsbW0wCisJbW92cQltbTUsbW0xCisJcG11bGh3CW1tMCxtbTYKKwlwbXVsaHcJbW0xLG1tNworCXBzcmF3CW1tNiwoV09SRF9CSVQtMSkKKwlwc3JhdwltbTcsKFdPUkRfQklULTEpCisJcGFuZAltbTYsbW00CisJcGFuZAltbTcsbW01CisJcGFkZHcJbW0wLG1tNgorCXBhZGR3CW1tMSxtbTcKKwlwc3JhdwltbTQsKFdPUkRfQklULTEpCisJcHNyYXcJbW01LChXT1JEX0JJVC0xKQorCXBhbmQJbW00LCBNTVdPUkQgW1NDQUxFKDAsMCxlZHgpXQk7IHNjYWxlCisJcGFuZAltbTUsIE1NV09SRCBbU0NBTEUoMCwxLGVkeCldCisJcGFkZHcJbW0wLG1tNAorCXBhZGR3CW1tMSxtbTUKKworCXB4b3IJbW0wLG1tMgorCXB4b3IJbW0xLG1tMworCXBzdWJ3CW1tMCxtbTIKKwlwc3VidwltbTEsbW0zCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorCisJYWRkCWVzaSwgYnl0ZSA4KlNJWkVPRl9EQ1RFTEVNCisJYWRkCWVkeCwgYnl0ZSA4KlNJWkVPRl9EQ1RFTEVNCisJYWRkCWVkaSwgYnl0ZSA4KlNJWkVPRl9KQ09FRgorCWRlYwlhbAorCWpuegluZWFyIC5xdWFudGxvb3AyCisJZGVjCWFoCisJam56CW5lYXIgLnF1YW50bG9vcDEJOyB0byBhdm9pZCBicmFuY2ggbWlzcHJlZGljdGlvbgorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgdW51c2VkCis7CXBvcAllYngJCTsgdW51c2VkCisJcG9wCWVicAorCXJldAorCislZW5kaWYgOyAhSkZEQ1RfSU5UX1FVQU5USVpFX1dJVEhfRElWSVNJT04KKyVlbmRpZiA7IEpGRENUX0lOVF9NTVhfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qY3FudHMyZi5hc20gYi9qY3FudHMyZi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmNjYzZQotLS0gL2Rldi9udWxsCisrKyBiL2pjcW50czJmLmFzbQpAQCAtMCwwICsxLDE3OCBAQAorOworOyBqY3FudHMyZi5hc20gLSBzYW1wbGUgZGF0YSBjb252ZXJzaW9uIGFuZCBxdWFudGl6YXRpb24gKFNTRSAmIFNTRTIpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgTGFzdCBNb2RpZmllZCA6IEphbnVhcnkgMTgsIDIwMDUKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKyVpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECislaWZkZWYgSkZEQ1RfRkxUX1NTRV9TU0UyX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2NvbnZzYW1wX2ZsdF9zc2UyIChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgc2FtcGxlX2RhdGEJZWJwKzgJCTsgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YQorJWRlZmluZSBzdGFydF9jb2wJZWJwKzEyCQk7IEpESU1FTlNJT04gc3RhcnRfY29sCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2NvbnZzYW1wX2ZsdF9zc2UyKQorCitFWFROKGpwZWdfY29udnNhbXBfZmx0X3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJcGNtcGVxdyAgeG1tNyx4bW03CisJcHNsbHcgICAgeG1tNyw3CisJcGFja3Nzd2IgeG1tNyx4bW03CQk7IHhtbTcgPSBQQl9DRU5URVJKU0FNUExFICgweDgwODA4MC4uKQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbc3RhcnRfY29sXQorCW1vdgllZGksIFBPSU5URVIgW3dvcmtzcGFjZV0JOyAoRENURUxFTSAqKQorCW1vdgllY3gsIERDVFNJWkUvMgorCWFsaWdueAkxNiw3CisuY29udmxvb3A6CisJbW92CWVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKworCW1vdnEJeG1tMCwgX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0KKwltb3ZxCXhtbTEsIF9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisKKwlwc3ViYgl4bW0wLHhtbTcJCQk7IHhtbTA9KDAxMjM0NTY3KQorCXBzdWJiCXhtbTEseG1tNwkJCTsgeG1tMT0oODlBQkNERUYpCisKKwlwdW5wY2tsYncgeG1tMCx4bW0wCQkJOyB4bW0wPSgqMCoxKjIqMyo0KjUqNio3KQorCXB1bnBja2xidyB4bW0xLHhtbTEJCQk7IHhtbTE9KCo4KjkqQSpCKkMqRCpFKkYpCisKKwlwdW5wY2tsd2QgeG1tMix4bW0wCQkJOyB4bW0yPSgqKiowKioqMSoqKjIqKiozKQorCXB1bnBja2h3ZCB4bW0wLHhtbTAJCQk7IHhtbTA9KCoqKjQqKio1KioqNioqKjcpCisJcHVucGNrbHdkIHhtbTMseG1tMQkJCTsgeG1tMz0oKioqOCoqKjkqKipBKioqQikKKwlwdW5wY2tod2QgeG1tMSx4bW0xCQkJOyB4bW0xPSgqKipDKioqRCoqKkUqKipGKQorCisJcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyB4bW0yPSgwMTIzKQorCXBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtQllURV9CSVQpCTsgeG1tMD0oNDU2NykKKwljdnRkcTJwcyAgeG1tMix4bW0yCQkJOyB4bW0yPSgwMTIzKQorCWN2dGRxMnBzICB4bW0wLHhtbTAJCQk7IHhtbTA9KDQ1NjcpCisJcHNyYWQgICAgIHhtbTMsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyB4bW0zPSg4OUFCKQorCXBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtQllURV9CSVQpCTsgeG1tMT0oQ0RFRikKKwljdnRkcTJwcyAgeG1tMyx4bW0zCQkJOyB4bW0zPSg4OUFCKQorCWN2dGRxMnBzICB4bW0xLHhtbTEJCQk7IHhtbTE9KENERUYpCisKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCisJYWRkCWVkaSwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKKwlkZWMJZWN4CisJam56CXNob3J0IC5jb252bG9vcAorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcG9wCWVicAorCXJldAorCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2NrCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX3F1YW50aXplX2ZsdF9zc2UyIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICogZGl2aXNvcnMsCis7ICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpOworOworCislZGVmaW5lIGNvZWZfYmxvY2sJZWJwKzgJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycwllYnArMTIJCTsgRkFTVF9GTE9BVCAqIGRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX3F1YW50aXplX2ZsdF9zc2UyKQorCitFWFROKGpwZWdfcXVhbnRpemVfZmx0X3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKzsJcHVzaAllYngJCTsgdW51c2VkCis7CXB1c2gJZWN4CQk7IHVudXNlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZXNpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCisJbW92CWVkeCwgUE9JTlRFUiBbZGl2aXNvcnNdCisJbW92CWVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCisJbW92CWVheCwgRENUU0laRTIvMTYKKwlhbGlnbngJMTYsNworLnF1YW50bG9vcDoKKwltb3ZhcHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW11bHBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW11bHBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbXVscHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbXVscHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwljdnRwczJkcSB4bW0wLHhtbTAKKwljdnRwczJkcSB4bW0xLHhtbTEKKwljdnRwczJkcSB4bW0yLHhtbTIKKwljdnRwczJkcSB4bW0zLHhtbTMKKworCXBhY2tzc2R3IHhtbTAseG1tMQorCXBhY2tzc2R3IHhtbTIseG1tMworCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIHhtbTAKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgeG1tMgorCisJYWRkCWVzaSwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorCWFkZAllZHgsIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKKwlhZGQJZWRpLCBieXRlIDE2KlNJWkVPRl9KQ09FRgorCWRlYwllYXgKKwlqbnoJc2hvcnQgLnF1YW50bG9vcAorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyB1bnVzZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IEpGRENUX0ZMVF9TU0VfU1NFMl9TVVBQT1JURUQKKyVlbmRpZiA7IERDVF9GTE9BVF9TVVBQT1JURUQKZGlmZiAtLWdpdCBhL2pjcW50czJpLmFzbSBiL2pjcW50czJpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJhZTJjCi0tLSAvZGV2L251bGwKKysrIGIvamNxbnRzMmkuYXNtCkBAIC0wLDAgKzEsMjE2IEBACis7Cis7IGpjcW50czJpLmFzbSAtIHNhbXBsZSBkYXRhIGNvbnZlcnNpb24gYW5kIHF1YW50aXphdGlvbiAoU1NFMikKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBMYXN0IE1vZGlmaWVkIDogSmFudWFyeSAyNywgMjAwNQorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIEpGRENUX0lOVF9TU0UyX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2NvbnZzYW1wX2ludF9zc2UyIChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqIHdvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgc2FtcGxlX2RhdGEJZWJwKzgJCTsgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YQorJWRlZmluZSBzdGFydF9jb2wJZWJwKzEyCQk7IEpESU1FTlNJT04gc3RhcnRfY29sCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRENURUxFTSAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2NvbnZzYW1wX2ludF9zc2UyKQorCitFWFROKGpwZWdfY29udnNhbXBfaW50X3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJcHhvcgl4bW02LHhtbTYJCTsgeG1tNj0oYWxsIDAncykKKwlwY21wZXF3CXhtbTcseG1tNworCXBzbGx3CXhtbTcsNwkJCTsgeG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbc3RhcnRfY29sXQorCW1vdgllZGksIFBPSU5URVIgW3dvcmtzcGFjZV0JOyAoRENURUxFTSAqKQorCW1vdgllY3gsIERDVFNJWkUvNAorCWFsaWdueAkxNiw3CisuY29udmxvb3A6CisJbW92CWVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKworCW1vdnEJeG1tMCwgX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0JOyB4bW0wPSgwMTIzNDU2NykKKwltb3ZxCXhtbTEsIF9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCTsgeG1tMT0oODlBQkNERUYpCisKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZXNpKzIqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisJbW92CWVkeCwgSlNBTVBST1cgW2VzaSszKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCisJbW92cQl4bW0yLCBfTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQk7IHhtbTI9KEdISUpLTE1OKQorCW1vdnEJeG1tMywgX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0JOyB4bW0zPShPUFFSU1RVVikKKworCXB1bnBja2xidyB4bW0wLHhtbTYJCTsgeG1tMD0oMDEyMzQ1NjcpCisJcHVucGNrbGJ3IHhtbTEseG1tNgkJOyB4bW0xPSg4OUFCQ0RFRikKKwlwYWRkdyAgICAgeG1tMCx4bW03CisJcGFkZHcgICAgIHhtbTEseG1tNworCXB1bnBja2xidyB4bW0yLHhtbTYJCTsgeG1tMj0oR0hJSktMTU4pCisJcHVucGNrbGJ3IHhtbTMseG1tNgkJOyB4bW0zPShPUFFSU1RVVikKKwlwYWRkdyAgICAgeG1tMix4bW03CisJcGFkZHcgICAgIHhtbTMseG1tNworCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMAorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTEKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0yCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMworCisJYWRkCWVzaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworCWFkZAllZGksIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9EQ1RFTEVNCisJZGVjCWVjeAorCWpueglzaG9ydCAuY29udmxvb3AKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCXBvcAllYnAKKwlyZXQKKworJWlmbmRlZiBKRkRDVF9JTlRfUVVBTlRJWkVfV0lUSF9ESVZJU0lPTgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFF1YW50aXplL2Rlc2NhbGUgdGhlIGNvZWZmaWNpZW50cywgYW5kIHN0b3JlIGludG8gY29lZl9ibG9jaworOworOyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGFuIGFsZ29yaXRobSBkZXNjcmliZWQgaW4KKzsgICAiSG93IHRvIG9wdGltaXplIGZvciB0aGUgUGVudGl1bSBmYW1pbHkgb2YgbWljcm9wcm9jZXNzb3JzIgorOyAgIChodHRwOi8vd3d3LmFnbmVyLm9yZy9hc3NlbS8pLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19xdWFudGl6ZV9pbnRfc3NlMiAoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqIGRpdmlzb3JzLAorOyAgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBSRUNJUFJPQ0FMKG0sbixiKSBYTU1CTE9DSyhEQ1RTSVpFKjArKG0pLChuKSwoYiksU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIENPUlJFQ1RJT04obSxuLGIpIFhNTUJMT0NLKERDVFNJWkUqMSsobSksKG4pLChiKSxTSVpFT0ZfRENURUxFTSkKKyVkZWZpbmUgU0NBTEUobSxuLGIpICAgICAgWE1NQkxPQ0soRENUU0laRSoyKyhtKSwobiksKGIpLFNJWkVPRl9EQ1RFTEVNKQorCislZGVmaW5lIGNvZWZfYmxvY2sJZWJwKzgJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycwllYnArMTIJCTsgRENURUxFTSAqIGRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRENURUxFTSAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX3F1YW50aXplX2ludF9zc2UyKQorCitFWFROKGpwZWdfcXVhbnRpemVfaW50X3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKzsJcHVzaAllYngJCTsgdW51c2VkCis7CXB1c2gJZWN4CQk7IHVudXNlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZXNpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCisJbW92CWVkeCwgUE9JTlRFUiBbZGl2aXNvcnNdCisJbW92CWVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCisJbW92CWVheCwgRENUU0laRTIvMzIKKwlhbGlnbngJMTYsNworLnF1YW50bG9vcDoKKwltb3ZkcWEJeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTAseG1tNAorCW1vdmRxYQl4bW0xLHhtbTUKKwltb3ZkcWEJeG1tMix4bW02CisJbW92ZHFhCXhtbTMseG1tNworCXBzcmF3CXhtbTQsKFdPUkRfQklULTEpCisJcHNyYXcJeG1tNSwoV09SRF9CSVQtMSkKKwlwc3Jhdwl4bW02LChXT1JEX0JJVC0xKQorCXBzcmF3CXhtbTcsKFdPUkRfQklULTEpCisJcHhvcgl4bW0wLHhtbTQKKwlweG9yCXhtbTEseG1tNQorCXB4b3IJeG1tMix4bW02CisJcHhvcgl4bW0zLHhtbTcKKwlwc3Vidwl4bW0wLHhtbTQJCTsgaWYgKHhtbTAgPCAwKSB4bW0wID0gLXhtbTA7CisJcHN1YncJeG1tMSx4bW01CQk7IGlmICh4bW0xIDwgMCkgeG1tMSA9IC14bW0xOworCXBzdWJ3CXhtbTIseG1tNgkJOyBpZiAoeG1tMiA8IDApIHhtbTIgPSAteG1tMjsKKwlwc3Vidwl4bW0zLHhtbTcJCTsgaWYgKHhtbTMgPCAwKSB4bW0zID0gLXhtbTM7CisKKwlwYWRkdwl4bW0wLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDAsMCxlZHgpXSAgOyBjb3JyZWN0aW9uICsgcm91bmRmYWN0b3IKKwlwYWRkdwl4bW0xLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDEsMCxlZHgpXQorCXBhZGR3CXhtbTIsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMiwwLGVkeCldCisJcGFkZHcJeG1tMywgWE1NV09SRCBbQ09SUkVDVElPTigzLDAsZWR4KV0KKwlwc2xsdwl4bW0wLDEKKwlwc2xsdwl4bW0xLDEKKwlwc2xsdwl4bW0yLDEKKwlwc2xsdwl4bW0zLDEKKwlwbXVsaHV3CXhtbTAsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMCwwLGVkeCldICA7IHJlY2lwcm9jYWwKKwlwbXVsaHV3CXhtbTEsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMSwwLGVkeCldCisJcG11bGh1dwl4bW0yLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDIsMCxlZHgpXQorCXBtdWxodXcJeG1tMywgWE1NV09SRCBbUkVDSVBST0NBTCgzLDAsZWR4KV0KKwlwc2xsdwl4bW0wLDEKKwlwc2xsdwl4bW0xLDEKKwlwc2xsdwl4bW0yLDEKKwlwc2xsdwl4bW0zLDEKKwlwbXVsaHV3CXhtbTAsIFhNTVdPUkQgW1NDQUxFKDAsMCxlZHgpXQk7IHNjYWxlCisJcG11bGh1dwl4bW0xLCBYTU1XT1JEIFtTQ0FMRSgxLDAsZWR4KV0KKwlwbXVsaHV3CXhtbTIsIFhNTVdPUkQgW1NDQUxFKDIsMCxlZHgpXQorCXBtdWxodXcJeG1tMywgWE1NV09SRCBbU0NBTEUoMywwLGVkeCldCisKKwlweG9yCXhtbTAseG1tNAorCXB4b3IJeG1tMSx4bW01CisJcHhvcgl4bW0yLHhtbTYKKwlweG9yCXhtbTMseG1tNworCXBzdWJ3CXhtbTAseG1tNAorCXBzdWJ3CXhtbTEseG1tNQorCXBzdWJ3CXhtbTIseG1tNgorCXBzdWJ3CXhtbTMseG1tNworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTAKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMgorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKworCWFkZAllc2ksIGJ5dGUgMzIqU0laRU9GX0RDVEVMRU0KKwlhZGQJZWR4LCBieXRlIDMyKlNJWkVPRl9EQ1RFTEVNCisJYWRkCWVkaSwgYnl0ZSAzMipTSVpFT0ZfSkNPRUYKKwlkZWMJZWF4CisJam56CW5lYXIgLnF1YW50bG9vcAorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyB1bnVzZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7ICFKRkRDVF9JTlRfUVVBTlRJWkVfV0lUSF9ESVZJU0lPTgorJWVuZGlmIDsgSkZEQ1RfSU5UX1NTRTJfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qY3FudHNzZS5hc20gYi9qY3FudHNzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5OWEyMAotLS0gL2Rldi9udWxsCisrKyBiL2pjcW50c3NlLmFzbQpAQCAtMCwwICsxLDIxOCBAQAorOworOyBqY3FudHNzZS5hc20gLSBzYW1wbGUgZGF0YSBjb252ZXJzaW9uIGFuZCBxdWFudGl6YXRpb24gKFNTRSAmIE1NWCkKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBMYXN0IE1vZGlmaWVkIDogSmFudWFyeSAxMiwgMjAwNQorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyVpZmRlZiBKRkRDVF9GTFRfU1NFX01NWF9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19jb252c2FtcF9mbHRfc3NlIChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKzsgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBzYW1wbGVfZGF0YQllYnArOAkJOyBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCislZGVmaW5lIHN0YXJ0X2NvbAllYnArMTIJCTsgSkRJTUVOU0lPTiBzdGFydF9jb2wKKyVkZWZpbmUgd29ya3NwYWNlCWVicCsxNgkJOyBGQVNUX0ZMT0FUICogd29ya3NwYWNlCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfY29udnNhbXBfZmx0X3NzZSkKKworRVhUTihqcGVnX2NvbnZzYW1wX2ZsdF9zc2UpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJcGNtcGVxdyAgbW03LG1tNworCXBzbGx3ICAgIG1tNyw3CisJcGFja3Nzd2IgbW03LG1tNwkJOyBtbTcgPSBQQl9DRU5URVJKU0FNUExFICgweDgwODA4MC4uKQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbc3RhcnRfY29sXQorCW1vdgllZGksIFBPSU5URVIgW3dvcmtzcGFjZV0JOyAoRENURUxFTSAqKQorCW1vdgllY3gsIERDVFNJWkUvMgorCWFsaWdueAkxNiw3CisuY29udmxvb3A6CisJbW92CWVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKworCW1vdnEJbW0wLCBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCisJbW92cQltbTEsIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0KKworCXBzdWJiCW1tMCxtbTcJCQkJOyBtbTA9KDAxMjM0NTY3KQorCXBzdWJiCW1tMSxtbTcJCQkJOyBtbTE9KDg5QUJDREVGKQorCisJcHVucGNrbGJ3IG1tMixtbTAJCQk7IG1tMj0oKjAqMSoyKjMpCisJcHVucGNraGJ3IG1tMCxtbTAJCQk7IG1tMD0oKjQqNSo2KjcpCisJcHVucGNrbGJ3IG1tMyxtbTEJCQk7IG1tMz0oKjgqOSpBKkIpCisJcHVucGNraGJ3IG1tMSxtbTEJCQk7IG1tMT0oKkMqRCpFKkYpCisKKwlwdW5wY2tsd2QgbW00LG1tMgkJCTsgbW00PSgqKiowKioqMSkKKwlwdW5wY2tod2QgbW0yLG1tMgkJCTsgbW0yPSgqKioyKioqMykKKwlwdW5wY2tsd2QgbW01LG1tMAkJCTsgbW01PSgqKio0KioqNSkKKwlwdW5wY2tod2QgbW0wLG1tMAkJCTsgbW0wPSgqKio2KioqNykKKworCXBzcmFkICAgICBtbTQsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTQ9KDAxKQorCXBzcmFkICAgICBtbTIsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTI9KDIzKQorCWN2dHBpMnBzICB4bW0wLG1tNAkJCTsgeG1tMD0oMDEqKikKKwljdnRwaTJwcyAgeG1tMSxtbTIJCQk7IHhtbTE9KDIzKiopCisJcHNyYWQgICAgIG1tNSwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tNT0oNDUpCisJcHNyYWQgICAgIG1tMCwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tMD0oNjcpCisJY3Z0cGkycHMgIHhtbTIsbW01CQkJOyB4bW0yPSg0NSoqKQorCWN2dHBpMnBzICB4bW0zLG1tMAkJCTsgeG1tMz0oNjcqKikKKworCXB1bnBja2x3ZCBtbTYsbW0zCQkJOyBtbTY9KCoqKjgqKio5KQorCXB1bnBja2h3ZCBtbTMsbW0zCQkJOyBtbTM9KCoqKkEqKipCKQorCXB1bnBja2x3ZCBtbTQsbW0xCQkJOyBtbTQ9KCoqKkMqKipEKQorCXB1bnBja2h3ZCBtbTEsbW0xCQkJOyBtbTE9KCoqKkUqKipGKQorCisJcHNyYWQgICAgIG1tNiwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tNj0oODkpCisJcHNyYWQgICAgIG1tMywoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tMz0oQUIpCisJY3Z0cGkycHMgIHhtbTQsbW02CQkJOyB4bW00PSg4OSoqKQorCWN2dHBpMnBzICB4bW01LG1tMwkJCTsgeG1tNT0oQUIqKikKKwlwc3JhZCAgICAgbW00LChEV09SRF9CSVQtQllURV9CSVQpCTsgbW00PShDRCkKKwlwc3JhZCAgICAgbW0xLChEV09SRF9CSVQtQllURV9CSVQpCTsgbW0xPShFRikKKwljdnRwaTJwcyAgeG1tNixtbTQJCQk7IHhtbTY9KENEKiopCisJY3Z0cGkycHMgIHhtbTcsbW0xCQkJOyB4bW03PShFRioqKQorCisJbW92bGhwcyAgIHhtbTAseG1tMQkJCTsgeG1tMD0oMDEyMykKKwltb3ZsaHBzICAgeG1tMix4bW0zCQkJOyB4bW0yPSg0NTY3KQorCW1vdmxocHMgICB4bW00LHhtbTUJCQk7IHhtbTQ9KDg5QUIpCisJbW92bGhwcyAgIHhtbTYseG1tNwkJCTsgeG1tNj0oQ0RFRikKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKKworCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWRpLCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorCWRlYwllY3gKKwlqbnoJbmVhciAuY29udmxvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2sKKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfcXVhbnRpemVfZmx0X3NzZSAoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLAorOyAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpOworOworCislZGVmaW5lIGNvZWZfYmxvY2sJZWJwKzgJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycwllYnArMTIJCTsgRkFTVF9GTE9BVCAqIGRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX3F1YW50aXplX2ZsdF9zc2UpCisKK0VYVE4oanBlZ19xdWFudGl6ZV9mbHRfc3NlKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCis7CXB1c2gJZWJ4CQk7IHVudXNlZAorOwlwdXNoCWVjeAkJOyB1bnVzZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQorCW1vdgllZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorCW1vdgllZGksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrXQorCW1vdgllYXgsIERDVFNJWkUyLzE2CisJYWxpZ254CTE2LDcKKy5xdWFudGxvb3A6CisJbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltdWxwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltdWxwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW11bHBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW11bHBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJbW92aGxwcyAgeG1tNCx4bW0wCisJbW92aGxwcyAgeG1tNSx4bW0xCisKKwljdnRwczJwaSBtbTAseG1tMAorCWN2dHBzMnBpIG1tMSx4bW0xCisJY3Z0cHMycGkgbW00LHhtbTQKKwljdnRwczJwaSBtbTUseG1tNQorCisJbW92aGxwcyAgeG1tNix4bW0yCisJbW92aGxwcyAgeG1tNyx4bW0zCisKKwljdnRwczJwaSBtbTIseG1tMgorCWN2dHBzMnBpIG1tMyx4bW0zCisJY3Z0cHMycGkgbW02LHhtbTYKKwljdnRwczJwaSBtbTcseG1tNworCisJcGFja3NzZHcgbW0wLG1tNAorCXBhY2tzc2R3IG1tMSxtbTUKKwlwYWNrc3NkdyBtbTIsbW02CisJcGFja3NzZHcgbW0zLG1tNworCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisKKwlhZGQJZXNpLCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCisJYWRkCWVkeCwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorCWFkZAllZGksIGJ5dGUgMTYqU0laRU9GX0pDT0VGCisJZGVjCWVheAorCWpueglzaG9ydCAucXVhbnRsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyB1bnVzZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IEpGRENUX0ZMVF9TU0VfTU1YX1NVUFBPUlRFRAorJWVuZGlmIDsgRENUX0ZMT0FUX1NVUFBPUlRFRApkaWZmIC0tZ2l0IGEvamNzYW1tbXguYXNtIGIvamNzYW1tbXguYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZmM4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9qY3NhbW1teC5hc20KQEAgLTAsMCArMSwzMjggQEAKKzsKKzsgamNzYW1tbXguYXNtIC0gZG93bnNhbXBsaW5nIChNTVgpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgTGFzdCBNb2RpZmllZCA6IEphbnVhcnkgMjMsIDIwMDYKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCislaWZkZWYgSkNTQU1QTEVfTU1YX1NVUFBPUlRFRAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50LgorOyBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbCwKKzsgd2l0aG91dCBzbW9vdGhpbmcuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2gydjFfZG93bnNhbXBsZV9tbXggKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7Cis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9jb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgaW5wdXRfZGF0YShiKQkoYikrMTYJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaDJ2MV9kb3duc2FtcGxlX21teCkKKworRVhUTihqcGVnX2gydjFfZG93bnNhbXBsZV9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKzsJcHVzaAllYngJCTsgdW51c2VkCis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZWN4LCBQT0lOVEVSIFtjb21wcHRyKGVicCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbamNvbXBpbmZvX3dpZHRoX2luX2Jsb2NrcyhlY3gpXQorCXNobAllY3gsMwkJCTsgaW11bCBlY3gsRENUU0laRSAoZWN4ID0gb3V0cHV0X2NvbHMpCisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtjaW5mbyhlYnApXQorCW1vdgllZHgsIEpESU1FTlNJT04gW2pjc3RydWN0X2ltYWdlX3dpZHRoKGVkeCldCisKKwk7IC0tIGV4cGFuZF9yaWdodF9lZGdlCisKKwlwdXNoCWVjeAorCXNobAllY3gsMQkJCQk7IG91dHB1dF9jb2xzICogMgorCXN1YgllY3gsZWR4CisJamxlCXNob3J0IC5leHBhbmRfZW5kCisKKwltb3YJZWF4LCBQT0lOVEVSIFtjaW5mbyhlYnApXQorCW1vdgllYXgsIElOVCBbamNzdHJ1Y3RfbWF4X3Zfc2FtcF9mYWN0b3IoZWF4KV0KKwl0ZXN0CWVheCxlYXgKKwlqbGUJc2hvcnQgLmV4cGFuZF9lbmQKKworCWNsZAorCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5leHBhbmRsb29wOgorCXB1c2gJZWF4CisJcHVzaAllY3gKKworCW1vdgllZGksIEpTQU1QUk9XIFtlc2ldCisJYWRkCWVkaSxlZHgKKwltb3YJYWwsIEpTQU1QTEUgW2VkaS0xXQorCisJcmVwIHN0b3NiCisKKwlwb3AJZWN4CisJcG9wCWVheAorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlkZWMJZWF4CisJamcJc2hvcnQgLmV4cGFuZGxvb3AKKworLmV4cGFuZF9lbmQ6CisJcG9wCWVjeAkJCQk7IG91dHB1dF9jb2xzCisKKwk7IC0tIGgydjFfZG93bnNhbXBsZQorCisJbW92CWVheCwgUE9JTlRFUiBbY29tcHB0cihlYnApXQorCW1vdgllYXgsIEpESU1FTlNJT04gW2pjb21waW5mb192X3NhbXBfZmFjdG9yKGVheCldCTsgcm93Y3RyCisJdGVzdAllYXgsZWF4CisJamxlCXNob3J0IC5yZXR1cm4KKworCW1vdiAgICAgICBlZHgsIDB4MDAwMTAwMDAJOyBiaWFzIHBhdHRlcm4KKwltb3ZkICAgICAgbW03LGVkeAorCXBjbXBlcXcgICBtbTYsbW02CisJcHVucGNrbGRxIG1tNyxtbTcJCTsgbW03PXswLCAxLCAwLCAxfQorCXBzcmx3ICAgICBtbTYsQllURV9CSVQJCTsgbW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfZGF0YShlYnApXQk7IG91dHB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWN4CisJcHVzaAllZGkKKwlwdXNoCWVzaQorCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JCTsgaW5wdHIKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQkJOyBvdXRwdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorCW1vdnEJbW0xLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisJbW92cQltbTIsbW0wCisJbW92cQltbTMsbW0xCisKKwlwYW5kCW1tMCxtbTYKKwlwc3JsdwltbTIsQllURV9CSVQKKwlwYW5kCW1tMSxtbTYKKwlwc3JsdwltbTMsQllURV9CSVQKKworCXBhZGR3CW1tMCxtbTIKKwlwYWRkdwltbTEsbW0zCisJcGFkZHcJbW0wLG1tNworCXBhZGR3CW1tMSxtbTcKKwlwc3JsdwltbTAsMQorCXBzcmx3CW1tMSwxCisKKwlwYWNrdXN3YiBtbTAsbW0xCisKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMAorCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQJOyBpbnB0cgorCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQk7IG91dGNvbAorCWpueglzaG9ydCAuY29sdW1ubG9vcAorCisJcG9wCWVzaQorCXBvcAllZGkKKwlwb3AJZWN4CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCisJZGVjCWVheAkJCQk7IHJvd2N0cgorCWpnCXNob3J0IC5yb3dsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllYngJCTsgdW51c2VkCisJcG9wCWVicAorCXJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKzsgVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIHN0YW5kYXJkIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbCwKKzsgd2l0aG91dCBzbW9vdGhpbmcuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2gydjJfZG93bnNhbXBsZV9tbXggKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7Cis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9jb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgaW5wdXRfZGF0YShiKQkoYikrMTYJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaDJ2Ml9kb3duc2FtcGxlX21teCkKKworRVhUTihqcGVnX2gydjJfZG93bnNhbXBsZV9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKzsJcHVzaAllYngJCTsgdW51c2VkCis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZWN4LCBQT0lOVEVSIFtjb21wcHRyKGVicCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbamNvbXBpbmZvX3dpZHRoX2luX2Jsb2NrcyhlY3gpXQorCXNobAllY3gsMwkJCTsgaW11bCBlY3gsRENUU0laRSAoZWN4ID0gb3V0cHV0X2NvbHMpCisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtjaW5mbyhlYnApXQorCW1vdgllZHgsIEpESU1FTlNJT04gW2pjc3RydWN0X2ltYWdlX3dpZHRoKGVkeCldCisKKwk7IC0tIGV4cGFuZF9yaWdodF9lZGdlCisKKwlwdXNoCWVjeAorCXNobAllY3gsMQkJCQk7IG91dHB1dF9jb2xzICogMgorCXN1YgllY3gsZWR4CisJamxlCXNob3J0IC5leHBhbmRfZW5kCisKKwltb3YJZWF4LCBQT0lOVEVSIFtjaW5mbyhlYnApXQorCW1vdgllYXgsIElOVCBbamNzdHJ1Y3RfbWF4X3Zfc2FtcF9mYWN0b3IoZWF4KV0KKwl0ZXN0CWVheCxlYXgKKwlqbGUJc2hvcnQgLmV4cGFuZF9lbmQKKworCWNsZAorCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5leHBhbmRsb29wOgorCXB1c2gJZWF4CisJcHVzaAllY3gKKworCW1vdgllZGksIEpTQU1QUk9XIFtlc2ldCisJYWRkCWVkaSxlZHgKKwltb3YJYWwsIEpTQU1QTEUgW2VkaS0xXQorCisJcmVwIHN0b3NiCisKKwlwb3AJZWN4CisJcG9wCWVheAorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlkZWMJZWF4CisJamcJc2hvcnQgLmV4cGFuZGxvb3AKKworLmV4cGFuZF9lbmQ6CisJcG9wCWVjeAkJCQk7IG91dHB1dF9jb2xzCisKKwk7IC0tIGgydjJfZG93bnNhbXBsZQorCisJbW92CWVheCwgUE9JTlRFUiBbY29tcHB0cihlYnApXQorCW1vdgllYXgsIEpESU1FTlNJT04gW2pjb21waW5mb192X3NhbXBfZmFjdG9yKGVheCldCTsgcm93Y3RyCisJdGVzdAllYXgsZWF4CisJamxlCW5lYXIgLnJldHVybgorCisJbW92ICAgICAgIGVkeCwgMHgwMDAyMDAwMQk7IGJpYXMgcGF0dGVybgorCW1vdmQgICAgICBtbTcsZWR4CisJcGNtcGVxdyAgIG1tNixtbTYKKwlwdW5wY2tsZHEgbW03LG1tNwkJOyBtbTc9ezEsIDIsIDEsIDJ9CisJcHNybHcgICAgIG1tNixCWVRFX0JJVAkJOyBtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9kYXRhKGVicCldCTsgb3V0cHV0X2RhdGEKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaAllY3gKKwlwdXNoCWVkaQorCXB1c2gJZXNpCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMAorCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIxCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JCQk7IG91dHB0cgorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKworCW1vdnEJbW0wLCBNTVdPUkQgW2VkeCswKlNJWkVPRl9NTVdPUkRdCisJbW92cQltbTEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKwltb3ZxCW1tMiwgTU1XT1JEIFtlZHgrMSpTSVpFT0ZfTU1XT1JEXQorCW1vdnEJbW0zLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisKKwltb3ZxCW1tNCxtbTAKKwltb3ZxCW1tNSxtbTEKKwlwYW5kCW1tMCxtbTYKKwlwc3JsdwltbTQsQllURV9CSVQKKwlwYW5kCW1tMSxtbTYKKwlwc3JsdwltbTUsQllURV9CSVQKKwlwYWRkdwltbTAsbW00CisJcGFkZHcJbW0xLG1tNQorCisJbW92cQltbTQsbW0yCisJbW92cQltbTUsbW0zCisJcGFuZAltbTIsbW02CisJcHNybHcJbW00LEJZVEVfQklUCisJcGFuZAltbTMsbW02CisJcHNybHcJbW01LEJZVEVfQklUCisJcGFkZHcJbW0yLG1tNAorCXBhZGR3CW1tMyxtbTUKKworCXBhZGR3CW1tMCxtbTEKKwlwYWRkdwltbTIsbW0zCisJcGFkZHcJbW0wLG1tNworCXBhZGR3CW1tMixtbTcKKwlwc3JsdwltbTAsMgorCXBzcmx3CW1tMiwyCisKKwlwYWNrdXN3YiBtbTAsbW0yCisKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMAorCisJYWRkCWVkeCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQJOyBpbnB0cjAKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX01NV09SRAk7IGlucHRyMQorCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQk7IG91dGNvbAorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwlwb3AJZXNpCisJcG9wCWVkaQorCXBvcAllY3gKKworCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCisJYWRkCWVkaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCisJZGVjCWVheAkJCQk7IHJvd2N0cgorCWpnCW5lYXIgLnJvd2xvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IEpDU0FNUExFX01NWF9TVVBQT1JURUQKZGlmZiAtLWdpdCBhL2pjc2FtcGxlLmMgYi9qY3NhbXBsZS5jCmluZGV4IDIxMmVjODcuLjlhZjdmMTUgMTAwNjQ0Ci0tLSBhL2pjc2FtcGxlLmMKKysrIGIvamNzYW1wbGUuYwpAQCAtNSw2ICs1LDEzIEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIGZvciBTSU1EIGV4dGVuc2lvbi4KKyAqIExhc3QgTW9kaWZpZWQgOiBKYW51YXJ5IDUsIDIwMDYKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBkb3duc2FtcGxpbmcgcm91dGluZXMuCiAgKgogICogRG93bnNhbXBsaW5nIGlucHV0IGRhdGEgaXMgY291bnRlZCBpbiAicm93IGdyb3VwcyIuICBBIHJvdyBncm91cApAQCAtNDgsNiArNTUsNyBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpjb2xzYW1wLmgiCQkvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyAqLwogCiAKIC8qIFBvaW50ZXIgdG8gcm91dGluZSB0byBkb3duc2FtcGxlIGEgc2luZ2xlIGNvbXBvbmVudCAqLwpAQCAtNDY3LDYgKzQ3NSw3IEBACiAgIGludCBjaTsKICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CiAgIGJvb2xlYW4gc21vb3Rob2sgPSBUUlVFOworICB1bnNpZ25lZCBpbnQgc2ltZCA9IGpwZWdfc2ltZF9zdXBwb3J0KChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKIAogICBkb3duc2FtcGxlID0gKG15X2Rvd25zYW1wbGVfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCkBAIC00OTQsNyArNTAzLDE3IEBACiAgICAgfSBlbHNlIGlmIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yICogMiA9PSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKIAkgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKICAgICAgIHNtb290aG9rID0gRkFMU0U7Ci0gICAgICBkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjFfZG93bnNhbXBsZTsKKyNpZmRlZiBKQ1NBTVBMRV9TU0UyX1NVUFBPUlRFRAorICAgICAgaWYgKHNpbWQgJiBKU0lNRF9TU0UyKQorCWRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0ganBlZ19oMnYxX2Rvd25zYW1wbGVfc3NlMjsKKyAgICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIEpDU0FNUExFX01NWF9TVVBQT1JURUQKKyAgICAgIGlmIChzaW1kICYgSlNJTURfTU1YKQorCWRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0ganBlZ19oMnYxX2Rvd25zYW1wbGVfbW14OworICAgICAgZWxzZQorI2VuZGlmCisJZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYxX2Rvd25zYW1wbGU7CiAgICAgfSBlbHNlIGlmIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yICogMiA9PSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKIAkgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIDIgPT0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CiAjaWZkZWYgSU5QVVRfU01PT1RISU5HX1NVUFBPUlRFRApAQCAtNTAzLDYgKzUyMiwxNiBAQAogCWRvd25zYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IFRSVUU7CiAgICAgICB9IGVsc2UKICNlbmRpZgorI2lmZGVmIEpDU0FNUExFX1NTRTJfU1VQUE9SVEVECisgICAgICBpZiAoc2ltZCAmIEpTSU1EX1NTRTIpCisJZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqcGVnX2gydjJfZG93bnNhbXBsZV9zc2UyOworICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgSkNTQU1QTEVfTU1YX1NVUFBPUlRFRAorICAgICAgaWYgKHNpbWQgJiBKU0lNRF9NTVgpCisJZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqcGVnX2gydjJfZG93bnNhbXBsZV9tbXg7CisgICAgICBlbHNlCisjZW5kaWYKIAlkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfZG93bnNhbXBsZTsKICAgICB9IGVsc2UgaWYgKChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSA9PSAwICYmCiAJICAgICAgIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSA9PSAwKSB7CkBAIC01MTcsMyArNTQ2LDI1IEBACiAgICAgVFJBQ0VNUyhjaW5mbywgMCwgSlRSQ19TTU9PVEhfTk9USU1QTCk7CiAjZW5kaWYKIH0KKworCisjaWZuZGVmIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKworR0xPQkFMKHVuc2lnbmVkIGludCkKK2pwZWdfc2ltZF9kb3duc2FtcGxlciAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIHVuc2lnbmVkIGludCBzaW1kID0ganBlZ19zaW1kX3N1cHBvcnQoKGpfY29tbW9uX3B0cikgY2luZm8pOworCisjaWZkZWYgSkNTQU1QTEVfU1NFMl9TVVBQT1JURUQKKyAgaWYgKHNpbWQgJiBKU0lNRF9TU0UyKQorICAgIHJldHVybiBKU0lNRF9TU0UyOworI2VuZGlmCisjaWZkZWYgSkNTQU1QTEVfTU1YX1NVUFBPUlRFRAorICBpZiAoc2ltZCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gSlNJTURfTU1YOworI2VuZGlmCisKKyAgcmV0dXJuIEpTSU1EX05PTkU7Cit9CisKKyNlbmRpZiAvKiAhSlNJTURfTU9ERUlORk9fTk9UX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvamNzYW1zczIuYXNtIGIvamNzYW1zczIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODdkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9qY3NhbXNzMi5hc20KQEAgLTAsMCArMSwzNTUgQEAKKzsKKzsgamNzYW1zczIuYXNtIC0gZG93bnNhbXBsaW5nIChTU0UyKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IExhc3QgTW9kaWZpZWQgOiBKYW51YXJ5IDIzLCAyMDA2Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKKworJWlmZGVmIEpDU0FNUExFX1NTRTJfU1VQUE9SVEVECisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCis7IFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLAorOyB3aXRob3V0IHNtb290aGluZy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfaDJ2MV9kb3duc2FtcGxlX3NzZTIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKKzsKKworJWRlZmluZSBjaW5mbyhiKQkoYikrOAkJOyBqX2NvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBpbnB1dF9kYXRhKGIpCShiKSsxNgkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGEoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19oMnYxX2Rvd25zYW1wbGVfc3NlMikKKworRVhUTihqcGVnX2gydjFfZG93bnNhbXBsZV9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCis7CXB1c2gJZWJ4CQk7IHVudXNlZAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVjeCwgUE9JTlRFUiBbY29tcHB0cihlYnApXQorCW1vdgllY3gsIEpESU1FTlNJT04gW2pjb21waW5mb193aWR0aF9pbl9ibG9ja3MoZWN4KV0KKwlzaGwJZWN4LDMJCQk7IGltdWwgZWN4LERDVFNJWkUgKGVjeCA9IG91dHB1dF9jb2xzKQorCWp6CW5lYXIgLnJldHVybgorCisJbW92CWVkeCwgUE9JTlRFUiBbY2luZm8oZWJwKV0KKwltb3YJZWR4LCBKRElNRU5TSU9OIFtqY3N0cnVjdF9pbWFnZV93aWR0aChlZHgpXQorCisJOyAtLSBleHBhbmRfcmlnaHRfZWRnZQorCisJcHVzaAllY3gKKwlzaGwJZWN4LDEJCQkJOyBvdXRwdXRfY29scyAqIDIKKwlzdWIJZWN4LGVkeAorCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorCisJbW92CWVheCwgUE9JTlRFUiBbY2luZm8oZWJwKV0KKwltb3YJZWF4LCBJTlQgW2pjc3RydWN0X21heF92X3NhbXBfZmFjdG9yKGVheCldCisJdGVzdAllYXgsZWF4CisJamxlCXNob3J0IC5leHBhbmRfZW5kCisKKwljbGQKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQorCWFsaWdueAkxNiw3CisuZXhwYW5kbG9vcDoKKwlwdXNoCWVheAorCXB1c2gJZWN4CisKKwltb3YJZWRpLCBKU0FNUFJPVyBbZXNpXQorCWFkZAllZGksZWR4CisJbW92CWFsLCBKU0FNUExFIFtlZGktMV0KKworCXJlcCBzdG9zYgorCisJcG9wCWVjeAorCXBvcAllYXgKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJZGVjCWVheAorCWpnCXNob3J0IC5leHBhbmRsb29wCisKKy5leHBhbmRfZW5kOgorCXBvcAllY3gJCQkJOyBvdXRwdXRfY29scworCisJOyAtLSBoMnYxX2Rvd25zYW1wbGUKKworCW1vdgllYXgsIFBPSU5URVIgW2NvbXBwdHIoZWJwKV0KKwltb3YJZWF4LCBKRElNRU5TSU9OIFtqY29tcGluZm9fdl9zYW1wX2ZhY3RvcihlYXgpXQk7IHJvd2N0cgorCXRlc3QJZWF4LGVheAorCWpsZQluZWFyIC5yZXR1cm4KKworCW1vdgllZHgsIDB4MDAwMTAwMDAJCTsgYmlhcyBwYXR0ZXJuCisJbW92ZAl4bW03LGVkeAorCXBjbXBlcXcJeG1tNix4bW02CisJcHNodWZkCXhtbTcseG1tNywweDAwCQk7IHhtbTc9ezAsIDEsIDAsIDEsIDAsIDEsIDAsIDF9CisJcHNybHcJeG1tNixCWVRFX0JJVAkJOyB4bW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfZGF0YShlYnApXQk7IG91dHB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWN4CisJcHVzaAllZGkKKwlwdXNoCWVzaQorCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JCTsgaW5wdHIKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQkJOyBvdXRwdHIKKworCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYWUJc2hvcnQgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcF9yODoKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisJcHhvcgl4bW0xLHhtbTEKKwltb3YJZWN4LCBTSVpFT0ZfWE1NV09SRAorCWptcAlzaG9ydCAuZG93bnNhbXBsZQorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wOgorCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisKKy5kb3duc2FtcGxlOgorCW1vdmRxYQl4bW0yLHhtbTAKKwltb3ZkcWEJeG1tMyx4bW0xCisKKwlwYW5kCXhtbTAseG1tNgorCXBzcmx3CXhtbTIsQllURV9CSVQKKwlwYW5kCXhtbTEseG1tNgorCXBzcmx3CXhtbTMsQllURV9CSVQKKworCXBhZGR3CXhtbTAseG1tMgorCXBhZGR3CXhtbTEseG1tMworCXBhZGR3CXhtbTAseG1tNworCXBhZGR3CXhtbTEseG1tNworCXBzcmx3CXhtbTAsMQorCXBzcmx3CXhtbTEsMQorCisJcGFja3Vzd2IgeG1tMCx4bW0xCisKKwltb3ZkcWEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0Y29sCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKKwlhZGQJZWRpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamFlCXNob3J0IC5jb2x1bW5sb29wCisJdGVzdAllY3gsZWN4CisJam56CXNob3J0IC5jb2x1bW5sb29wX3I4CisKKwlwb3AJZXNpCisJcG9wCWVkaQorCXBvcAllY3gKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlkZWMJZWF4CQkJCTsgcm93Y3RyCisJamcJbmVhciAucm93bG9vcAorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllYngJCTsgdW51c2VkCisJcG9wCWVicAorCXJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKzsgVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIHN0YW5kYXJkIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbCwKKzsgd2l0aG91dCBzbW9vdGhpbmcuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2gydjJfZG93bnNhbXBsZV9zc2UyIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7Cis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9jb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgaW5wdXRfZGF0YShiKQkoYikrMTYJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaDJ2Ml9kb3duc2FtcGxlX3NzZTIpCisKK0VYVE4oanBlZ19oMnYyX2Rvd25zYW1wbGVfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorOwlwdXNoCWVieAkJOyB1bnVzZWQKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdgllY3gsIFBPSU5URVIgW2NvbXBwdHIoZWJwKV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtqY29tcGluZm9fd2lkdGhfaW5fYmxvY2tzKGVjeCldCisJc2hsCWVjeCwzCQkJOyBpbXVsIGVjeCxEQ1RTSVpFIChlY3ggPSBvdXRwdXRfY29scykKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllZHgsIFBPSU5URVIgW2NpbmZvKGVicCldCisJbW92CWVkeCwgSkRJTUVOU0lPTiBbamNzdHJ1Y3RfaW1hZ2Vfd2lkdGgoZWR4KV0KKworCTsgLS0gZXhwYW5kX3JpZ2h0X2VkZ2UKKworCXB1c2gJZWN4CisJc2hsCWVjeCwxCQkJCTsgb3V0cHV0X2NvbHMgKiAyCisJc3ViCWVjeCxlZHgKKwlqbGUJc2hvcnQgLmV4cGFuZF9lbmQKKworCW1vdgllYXgsIFBPSU5URVIgW2NpbmZvKGVicCldCisJbW92CWVheCwgSU5UIFtqY3N0cnVjdF9tYXhfdl9zYW1wX2ZhY3RvcihlYXgpXQorCXRlc3QJZWF4LGVheAorCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorCisJY2xkCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwlhbGlnbngJMTYsNworLmV4cGFuZGxvb3A6CisJcHVzaAllYXgKKwlwdXNoCWVjeAorCisJbW92CWVkaSwgSlNBTVBST1cgW2VzaV0KKwlhZGQJZWRpLGVkeAorCW1vdglhbCwgSlNBTVBMRSBbZWRpLTFdCisKKwlyZXAgc3Rvc2IKKworCXBvcAllY3gKKwlwb3AJZWF4CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWRlYwllYXgKKwlqZwlzaG9ydCAuZXhwYW5kbG9vcAorCisuZXhwYW5kX2VuZDoKKwlwb3AJZWN4CQkJCTsgb3V0cHV0X2NvbHMKKworCTsgLS0gaDJ2Ml9kb3duc2FtcGxlCisKKwltb3YJZWF4LCBQT0lOVEVSIFtjb21wcHRyKGVicCldCisJbW92CWVheCwgSkRJTUVOU0lPTiBbamNvbXBpbmZvX3Zfc2FtcF9mYWN0b3IoZWF4KV0JOyByb3djdHIKKwl0ZXN0CWVheCxlYXgKKwlqbGUJbmVhciAucmV0dXJuCisKKwltb3YJZWR4LCAweDAwMDIwMDAxCQk7IGJpYXMgcGF0dGVybgorCW1vdmQJeG1tNyxlZHgKKwlwY21wZXF3CXhtbTYseG1tNgorCXBzaHVmZAl4bW03LHhtbTcsMHgwMAkJOyB4bW03PXsxLCAyLCAxLCAyLCAxLCAyLCAxLCAyfQorCXBzcmx3CXhtbTYsQllURV9CSVQJCTsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2RhdGEoZWJwKV0JOyBvdXRwdXRfZGF0YQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVjeAorCXB1c2gJZWRpCisJcHVzaAllc2kKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIwCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjEKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQkJCTsgb3V0cHRyCisKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamFlCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3Bfcjg6CisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW2VkeCswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKwlweG9yCXhtbTIseG1tMgorCXB4b3IJeG1tMyx4bW0zCisJbW92CWVjeCwgU0laRU9GX1hNTVdPUkQKKwlqbXAJc2hvcnQgLmRvd25zYW1wbGUKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcDoKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtlZHgrMSpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisKKy5kb3duc2FtcGxlOgorCW1vdmRxYQl4bW00LHhtbTAKKwltb3ZkcWEJeG1tNSx4bW0xCisJcGFuZAl4bW0wLHhtbTYKKwlwc3Jsdwl4bW00LEJZVEVfQklUCisJcGFuZAl4bW0xLHhtbTYKKwlwc3Jsdwl4bW01LEJZVEVfQklUCisJcGFkZHcJeG1tMCx4bW00CisJcGFkZHcJeG1tMSx4bW01CisKKwltb3ZkcWEJeG1tNCx4bW0yCisJbW92ZHFhCXhtbTUseG1tMworCXBhbmQJeG1tMix4bW02CisJcHNybHcJeG1tNCxCWVRFX0JJVAorCXBhbmQJeG1tMyx4bW02CisJcHNybHcJeG1tNSxCWVRFX0JJVAorCXBhZGR3CXhtbTIseG1tNAorCXBhZGR3CXhtbTMseG1tNQorCisJcGFkZHcJeG1tMCx4bW0xCisJcGFkZHcJeG1tMix4bW0zCisJcGFkZHcJeG1tMCx4bW03CisJcGFkZHcJeG1tMix4bW03CisJcHNybHcJeG1tMCwyCisJcHNybHcJeG1tMiwyCisKKwlwYWNrdXN3YiB4bW0wLHhtbTIKKworCW1vdmRxYQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKworCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRjb2wKKwlhZGQJZWR4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEKKwlhZGQJZWRpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamFlCW5lYXIgLmNvbHVtbmxvb3AKKwl0ZXN0CWVjeCxlY3gKKwlqbnoJbmVhciAuY29sdW1ubG9vcF9yOAorCisJcG9wCWVzaQorCXBvcAllZGkKKwlwb3AJZWN4CisKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCWRlYwllYXgJCQkJOyByb3djdHIKKwlqZwluZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IEpDU0FNUExFX1NTRTJfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qZGNvZWZjdC5jIGIvamRjb2VmY3QuYwppbmRleCA0OTM4ZDIwLi4xYTUxNWQzIDEwMDY0NAotLS0gYS9qZGNvZWZjdC5jCisrKyBiL2pkY29lZmN0LmMKQEAgLTUsNiArNSwxMyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgorICogTGFzdCBNb2RpZmllZCA6IERlY2VtYmVyIDE4LCAyMDA1CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciBjb250cm9sbGVyIGZvciBkZWNvbXByZXNzaW9uLgogICogVGhpcyBjb250cm9sbGVyIGlzIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIEpQRUcgZGVjb21wcmVzc29yIHByb3Blci4KICAqIFRoZSBjb2VmZmljaWVudCBidWZmZXIgbGllcyBiZXR3ZWVuIGVudHJvcHkgZGVjb2RpbmcgYW5kIGludmVyc2UtRENUIHN0ZXBzLgpAQCAtMTMzLDYgKzE0MCwxMSBAQAogfQogCiAKKyNpZm5kZWYgTkVFRF9GQVJfUE9JTlRFUlMKKyN1bmRlZiBqemVyb19mYXIKKyNkZWZpbmUganplcm9fZmFyKHRhcmdldCwgYnl0ZXN0b3plcm8pICBNRU1aRVJPKHRhcmdldCwgYnl0ZXN0b3plcm8pCisjZW5kaWYKKwogLyoKICAqIERlY29tcHJlc3MgYW5kIHJldHVybiBzb21lIGRhdGEgaW4gdGhlIHNpbmdsZS1wYXNzIGNhc2UuCiAgKiBBbHdheXMgYXR0ZW1wdHMgdG8gZW1pdCBvbmUgZnVsbHkgaW50ZXJsZWF2ZWQgTUNVIHJvdyAoImlNQ1UiIHJvdykuCkBAIC0xNTAsMTUgKzE2Miw2MSBAQAogICBKRElNRU5TSU9OIE1DVV9jb2xfbnVtOwkvKiBpbmRleCBvZiBjdXJyZW50IE1DVSB3aXRoaW4gcm93ICovCiAgIEpESU1FTlNJT04gbGFzdF9NQ1VfY29sID0gY2luZm8tPk1DVXNfcGVyX3JvdyAtIDE7CiAgIEpESU1FTlNJT04gbGFzdF9pTUNVX3JvdyA9IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgLSAxOwotICBpbnQgYmxrbiwgY2ksIHhpbmRleCwgeWluZGV4LCB5b2Zmc2V0LCB1c2VmdWxfd2lkdGg7CisgIGludCBibGtuLCBjaSwgY3RyLCB4aW5kZXgsIHlpbmRleCwgeW9mZnNldDsKICAgSlNBTVBBUlJBWSBvdXRwdXRfcHRyOwotICBKRElNRU5TSU9OIHN0YXJ0X2NvbCwgb3V0cHV0X2NvbDsKKyAgSkRJTUVOU0lPTiBvdXRwdXRfY29sOwogICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOwogICBpbnZlcnNlX0RDVF9tZXRob2RfcHRyIGludmVyc2VfRENUOworICBKU0FNUEFSUkFZIG91dHB1dF9wdHJfYmxrW0RfTUFYX0JMT0NLU19JTl9NQ1VdOworICBKRElNRU5TSU9OIG91dHB1dF9jb2xfb2ZmW0RfTUFYX0JMT0NLU19JTl9NQ1VdOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyX2Jsa1tEX01BWF9CTE9DS1NfSU5fTUNVXTsKKyAgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBpbnZlcnNlX0RDVF9ibGtfMVtEX01BWF9CTE9DS1NfSU5fTUNVXTsKKyAgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBpbnZlcnNlX0RDVF9ibGtfMltEX01BWF9CTE9DS1NfSU5fTUNVXTsKKyAgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciAqaW52ZXJzZV9EQ1RfYmxrOwogCiAgIC8qIExvb3AgdG8gcHJvY2VzcyBhcyBtdWNoIGFzIG9uZSB3aG9sZSBpTUNVIHJvdyAqLwogICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7CiAgICAgICAgeW9mZnNldCsrKSB7CisgICAgLyogRGV0ZXJtaW5lIHdoZXJlIGRhdGEgc2hvdWxkIGdvIGluIG91dHB1dF9idWYgYW5kIGRvIHRoZSBJRENUIHRoaW5nLgorICAgICAqIFdlIHNraXAgZHVtbXkgYmxvY2tzIGF0IHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2VzIChidXQgYmxrbiBnZXRzCisgICAgICogaW5jcmVtZW50ZWQgcGFzdCB0aGVtISkuICBOb3RlIHRoZSBpbm5lciBsb29wIHJlbGllcyBvbiBoYXZpbmcKKyAgICAgKiBhbGxvY2F0ZWQgdGhlIE1DVV9idWZmZXJbXSBibG9ja3Mgc2VxdWVudGlhbGx5LgorICAgICAqLworICAgIGJsa24gPSAwOwkJCS8qIGluZGV4IG9mIGN1cnJlbnQgRENUIGJsb2NrIHdpdGhpbiBNQ1UgKi8KKyAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAgIC8qIERvbid0IGJvdGhlciB0byBJRENUIGFuIHVuaW50ZXJlc3RpbmcgY29tcG9uZW50LiAqLworICAgICAgaWYgKCEgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkgeworCWZvciAoY3RyID0gY29tcHB0ci0+TUNVX2Jsb2NrczsgY3RyID4gMDsgY3RyLS0pIHsKKwkgIGludmVyc2VfRENUX2Jsa18xW2Jsa25dID0gaW52ZXJzZV9EQ1RfYmxrXzJbYmxrbl0gPSBOVUxMOworCSAgYmxrbisrOworCX0KKwljb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGludmVyc2VfRENUID0gY2luZm8tPmlkY3QtPmludmVyc2VfRENUW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF07CisgICAgICBvdXRwdXRfcHRyID0gb3V0cHV0X2J1Zltjb21wcHRyLT5jb21wb25lbnRfaW5kZXhdICsKKwl5b2Zmc2V0ICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOworICAgICAgZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgeworCWlmIChjaW5mby0+aW5wdXRfaU1DVV9yb3cgPCBsYXN0X2lNQ1Vfcm93IHx8CisJICAgIHlvZmZzZXQreWluZGV4IDwgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0KSB7CisJICBmb3IgKHhpbmRleCA9IDA7IHhpbmRleCA8IGNvbXBwdHItPk1DVV93aWR0aDsgeGluZGV4KyspIHsKKwkgICAgY29tcHB0cl9ibGtbYmxrbl0gPSBjb21wcHRyOworCSAgICBvdXRwdXRfcHRyX2Jsa1tibGtuXSA9IG91dHB1dF9wdHI7CisJICAgIG91dHB1dF9jb2xfb2ZmW2Jsa25dID0geGluZGV4ICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOworCSAgICBpbnZlcnNlX0RDVF9ibGtfMVtibGtuXSA9IGludmVyc2VfRENUOworCSAgICBpbnZlcnNlX0RDVF9ibGtfMltibGtuXSA9ICh4aW5kZXggPCBjb21wcHRyLT5sYXN0X2NvbF93aWR0aCkgPworCQkJCSAgICAgIGludmVyc2VfRENUIDogTlVMTDsKKwkgICAgYmxrbisrOworCSAgfQorCX0gZWxzZSB7CisJICBmb3IgKGN0ciA9IGNvbXBwdHItPk1DVV93aWR0aDsgY3RyID4gMDsgY3RyLS0pIHsKKwkgICAgaW52ZXJzZV9EQ1RfYmxrXzFbYmxrbl0gPSBpbnZlcnNlX0RDVF9ibGtfMltibGtuXSA9IE5VTEw7CisJICAgIGJsa24rKzsKKwkgIH0KKwl9CisJb3V0cHV0X3B0ciArPSBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemU7CisgICAgICB9CisgICAgfQogICAgIGZvciAoTUNVX2NvbF9udW0gPSBjb2VmLT5NQ1VfY3RyOyBNQ1VfY29sX251bSA8PSBsYXN0X01DVV9jb2w7CiAJIE1DVV9jb2xfbnVtKyspIHsKICAgICAgIC8qIFRyeSB0byBmZXRjaCBhbiBNQ1UuICBFbnRyb3B5IGRlY29kZXIgZXhwZWN0cyBidWZmZXIgdG8gYmUgemVyb2VkLiAqLwpAQCAtMTcwLDM5ICsyMjgsMTcgQEAKIAljb2VmLT5NQ1VfY3RyID0gTUNVX2NvbF9udW07CiAJcmV0dXJuIEpQRUdfU1VTUEVOREVEOwogICAgICAgfQotICAgICAgLyogRGV0ZXJtaW5lIHdoZXJlIGRhdGEgc2hvdWxkIGdvIGluIG91dHB1dF9idWYgYW5kIGRvIHRoZSBJRENUIHRoaW5nLgotICAgICAgICogV2Ugc2tpcCBkdW1teSBibG9ja3MgYXQgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgKGJ1dCBibGtuIGdldHMKLSAgICAgICAqIGluY3JlbWVudGVkIHBhc3QgdGhlbSEpLiAgTm90ZSB0aGUgaW5uZXIgbG9vcCByZWxpZXMgb24gaGF2aW5nCi0gICAgICAgKiBhbGxvY2F0ZWQgdGhlIE1DVV9idWZmZXJbXSBibG9ja3Mgc2VxdWVudGlhbGx5LgotICAgICAgICovCi0gICAgICBibGtuID0gMDsJCQkvKiBpbmRleCBvZiBjdXJyZW50IERDVCBibG9jayB3aXRoaW4gTUNVICovCi0gICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgewotCWNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07Ci0JLyogRG9uJ3QgYm90aGVyIHRvIElEQ1QgYW4gdW5pbnRlcmVzdGluZyBjb21wb25lbnQuICovCi0JaWYgKCEgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkgewotCSAgYmxrbiArPSBjb21wcHRyLT5NQ1VfYmxvY2tzOworICAgICAgaW52ZXJzZV9EQ1RfYmxrID0gKE1DVV9jb2xfbnVtIDwgbGFzdF9NQ1VfY29sKSA/IGludmVyc2VfRENUX2Jsa18xCisJCQkJCQkgICAgIDogaW52ZXJzZV9EQ1RfYmxrXzI7CisgICAgICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgeworCWludmVyc2VfRENUID0gaW52ZXJzZV9EQ1RfYmxrW2Jsa25dOworCWlmIChpbnZlcnNlX0RDVCA9PSBOVUxMKQogCSAgY29udGludWU7Ci0JfQotCWludmVyc2VfRENUID0gY2luZm8tPmlkY3QtPmludmVyc2VfRENUW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF07Ci0JdXNlZnVsX3dpZHRoID0gKE1DVV9jb2xfbnVtIDwgbGFzdF9NQ1VfY29sKSA/IGNvbXBwdHItPk1DVV93aWR0aAotCQkJCQkJICAgIDogY29tcHB0ci0+bGFzdF9jb2xfd2lkdGg7Ci0Jb3V0cHV0X3B0ciA9IG91dHB1dF9idWZbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSArCi0JICB5b2Zmc2V0ICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOwotCXN0YXJ0X2NvbCA9IE1DVV9jb2xfbnVtICogY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aDsKLQlmb3IgKHlpbmRleCA9IDA7IHlpbmRleCA8IGNvbXBwdHItPk1DVV9oZWlnaHQ7IHlpbmRleCsrKSB7Ci0JICBpZiAoY2luZm8tPmlucHV0X2lNQ1Vfcm93IDwgbGFzdF9pTUNVX3JvdyB8fAotCSAgICAgIHlvZmZzZXQreWluZGV4IDwgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0KSB7Ci0JICAgIG91dHB1dF9jb2wgPSBzdGFydF9jb2w7Ci0JICAgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgdXNlZnVsX3dpZHRoOyB4aW5kZXgrKykgewotCSAgICAgICgqaW52ZXJzZV9EQ1QpIChjaW5mbywgY29tcHB0ciwKLQkJCSAgICAgIChKQ09FRlBUUikgY29lZi0+TUNVX2J1ZmZlcltibGtuK3hpbmRleF0sCi0JCQkgICAgICBvdXRwdXRfcHRyLCBvdXRwdXRfY29sKTsKLQkgICAgICBvdXRwdXRfY29sICs9IGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZTsKLQkgICAgfQotCSAgfQotCSAgYmxrbiArPSBjb21wcHRyLT5NQ1Vfd2lkdGg7Ci0JICBvdXRwdXRfcHRyICs9IGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZTsKLQl9CisJY29tcHB0ciA9IGNvbXBwdHJfYmxrW2Jsa25dOworCW91dHB1dF9jb2wgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGggKworCQkgICAgIG91dHB1dF9jb2xfb2ZmW2Jsa25dOworCSgqaW52ZXJzZV9EQ1QpIChjaW5mbywgY29tcHB0ciwgKEpDT0VGUFRSKSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa25dLAorCQkJb3V0cHV0X3B0cl9ibGtbYmxrbl0sIG91dHB1dF9jb2wpOwogICAgICAgfQogICAgIH0KICAgICAvKiBDb21wbGV0ZWQgYW4gTUNVIHJvdywgYnV0IHBlcmhhcHMgbm90IGFuIGlNQ1Ugcm93ICovCkBAIC0yNTAsNiArMjg2LDggQEAKICAgSkJMT0NLQVJSQVkgYnVmZmVyW01BWF9DT01QU19JTl9TQ0FOXTsKICAgSkJMT0NLUk9XIGJ1ZmZlcl9wdHI7CiAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIGludCBNQ1Vfd2lkdGhbRF9NQVhfQkxPQ0tTX0lOX01DVV07CisgIEpCTE9DS1JPVyBNQ1VfYnVmZmVyX2Jhc2VbRF9NQVhfQkxPQ0tTX0lOX01DVV07CiAKICAgLyogQWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVycyBmb3IgdGhlIGNvbXBvbmVudHMgdXNlZCBpbiB0aGlzIHNjYW4uICovCiAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CkBAIC0yNjcsMTkgKzMwNSwyNCBAQAogICAvKiBMb29wIHRvIHByb2Nlc3Mgb25lIHdob2xlIGlNQ1Ugcm93ICovCiAgIGZvciAoeW9mZnNldCA9IGNvZWYtPk1DVV92ZXJ0X29mZnNldDsgeW9mZnNldCA8IGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdzsKICAgICAgICB5b2Zmc2V0KyspIHsKKyAgICAvKiBDb25zdHJ1Y3QgbGlzdCBvZiBwb2ludGVycyB0byBEQ1QgYmxvY2tzIGJlbG9uZ2luZyB0byB0aGlzIE1DVSAqLworICAgIGJsa24gPSAwOwkJCS8qIGluZGV4IG9mIGN1cnJlbnQgRENUIGJsb2NrIHdpdGhpbiBNQ1UgKi8KKyAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAgIGZvciAoeWluZGV4ID0gMDsgeWluZGV4IDwgY29tcHB0ci0+TUNVX2hlaWdodDsgeWluZGV4KyspIHsKKwlidWZmZXJfcHRyID0gYnVmZmVyW2NpXVt5aW5kZXgreW9mZnNldF07CisJZm9yICh4aW5kZXggPSAwOyB4aW5kZXggPCBjb21wcHRyLT5NQ1Vfd2lkdGg7IHhpbmRleCsrKSB7CisJICBNQ1Vfd2lkdGhbYmxrbl0gPSBjb21wcHRyLT5NQ1Vfd2lkdGg7CisJICBNQ1VfYnVmZmVyX2Jhc2VbYmxrbl0gPSBidWZmZXJfcHRyKys7CisJICBibGtuKys7CisJfQorICAgICAgfQorICAgIH0KICAgICBmb3IgKE1DVV9jb2xfbnVtID0gY29lZi0+TUNVX2N0cjsgTUNVX2NvbF9udW0gPCBjaW5mby0+TUNVc19wZXJfcm93OwogCSBNQ1VfY29sX251bSsrKSB7Ci0gICAgICAvKiBDb25zdHJ1Y3QgbGlzdCBvZiBwb2ludGVycyB0byBEQ1QgYmxvY2tzIGJlbG9uZ2luZyB0byB0aGlzIE1DVSAqLwotICAgICAgYmxrbiA9IDA7CQkJLyogaW5kZXggb2YgY3VycmVudCBEQ1QgYmxvY2sgd2l0aGluIE1DVSAqLwotICAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsKLQljb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwotCXN0YXJ0X2NvbCA9IE1DVV9jb2xfbnVtICogY29tcHB0ci0+TUNVX3dpZHRoOwotCWZvciAoeWluZGV4ID0gMDsgeWluZGV4IDwgY29tcHB0ci0+TUNVX2hlaWdodDsgeWluZGV4KyspIHsKLQkgIGJ1ZmZlcl9wdHIgPSBidWZmZXJbY2ldW3lpbmRleCt5b2Zmc2V0XSArIHN0YXJ0X2NvbDsKLQkgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgY29tcHB0ci0+TUNVX3dpZHRoOyB4aW5kZXgrKykgewotCSAgICBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24rK10gPSBidWZmZXJfcHRyKys7Ci0JICB9Ci0JfQorICAgICAgZm9yIChibGtuID0gMDsgYmxrbiA8IGNpbmZvLT5ibG9ja3NfaW5fTUNVOyBibGtuKyspIHsKKwlzdGFydF9jb2wgPSBNQ1VfY29sX251bSAqIE1DVV93aWR0aFtibGtuXTsKKwljb2VmLT5NQ1VfYnVmZmVyW2Jsa25dID0gTUNVX2J1ZmZlcl9iYXNlW2Jsa25dICsgc3RhcnRfY29sOwogICAgICAgfQogICAgICAgLyogVHJ5IHRvIGZldGNoIHRoZSBNQ1UuICovCiAgICAgICBpZiAoISAoKmNpbmZvLT5lbnRyb3B5LT5kZWNvZGVfbWN1KSAoY2luZm8sIGNvZWYtPk1DVV9idWZmZXIpKSB7CkBAIC00NTQsNiArNDk3LDE1IEBACiAKIAogLyoKKyAqIFNJTUQgRXh0OiBNb3N0IG9mIFNTRS9TU0UyIGluc3RydWN0aW9ucyByZXF1aXJlIHRoYXQgdGhlIG1lbW9yeSBhZGRyZXNzCisgKiBpcyBhbGlnbmVkIHRvIGEgMTYtYnl0ZSBib3VuZGFyeTsgaWYgbm90LCBhIGdlbmVyYWwtcHJvdGVjdGlvbiBleGNlcHRpb24KKyAqICgjR1ApIGlzIGdlbmVyYXRlZC4KKyAqLworCisjZGVmaW5lIEFMSUdOX1NJWkUJMTYJCS8qIHNpemVvZiBTU0UvU1NFMiByZWdpc3RlciAqLworI2RlZmluZSBBTElHTl9NRU0ocCxhKQkoKHZvaWQgKikgKCgoc2l6ZV90KSAocCkgKyAoYSkgLSAxKSAmIC0oYSkpKQorCisvKgogICogVmFyaWFudCBvZiBkZWNvbXByZXNzX2RhdGEgZm9yIHVzZSB3aGVuIGRvaW5nIGJsb2NrIHNtb290aGluZy4KICAqLwogCkBAIC00NzEsNyArNTIzLDggQEAKICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKICAgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBpbnZlcnNlX0RDVDsKICAgYm9vbGVhbiBmaXJzdF9yb3csIGxhc3Rfcm93OwotICBKQkxPQ0sgd29ya3NwYWNlOworICBKQ09FRiB3b3Jrc3BhY2VbRENUU0laRTIgKyBBTElHTl9TSVpFL3NpemVvZihKQ09FRildOworICBKQ09FRiAqIHdvcmtwdHIgPSAoSkNPRUYgKikgQUxJR05fTUVNKHdvcmtzcGFjZSwgQUxJR05fU0laRSk7CiAgIGludCAqY29lZl9iaXRzOwogICBKUVVBTlRfVEJMICpxdWFudHRibDsKICAgSU5UMzIgUTAwLFEwMSxRMDIsUTEwLFExMSxRMjAsIG51bTsKQEAgLTU2MCw3ICs2MTMsNyBAQAogICAgICAgbGFzdF9ibG9ja19jb2x1bW4gPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgLSAxOwogICAgICAgZm9yIChibG9ja19udW0gPSAwOyBibG9ja19udW0gPD0gbGFzdF9ibG9ja19jb2x1bW47IGJsb2NrX251bSsrKSB7CiAJLyogRmV0Y2ggY3VycmVudCBEQ1QgYmxvY2sgaW50byB3b3Jrc3BhY2Ugc28gd2UgY2FuIG1vZGlmeSBpdC4gKi8KLQlqY29weV9ibG9ja19yb3coYnVmZmVyX3B0ciwgKEpCTE9DS1JPVykgd29ya3NwYWNlLCAoSkRJTUVOU0lPTikgMSk7CisJamNvcHlfYmxvY2tfcm93KGJ1ZmZlcl9wdHIsIChKQkxPQ0tST1cpIHdvcmtwdHIsIChKRElNRU5TSU9OKSAxKTsKIAkvKiBVcGRhdGUgREMgdmFsdWVzICovCiAJaWYgKGJsb2NrX251bSA8IGxhc3RfYmxvY2tfY29sdW1uKSB7CiAJICBEQzMgPSAoaW50KSBwcmV2X2Jsb2NrX3Jvd1sxXVswXTsKQEAgLTU3Miw3ICs2MjUsNyBAQAogCSAqIGFuZCBpcyBub3Qga25vd24gdG8gYmUgZnVsbHkgYWNjdXJhdGUuCiAJICovCiAJLyogQUMwMSAqLwotCWlmICgoQWw9Y29lZl9iaXRzWzFdKSAhPSAwICYmIHdvcmtzcGFjZVsxXSA9PSAwKSB7CisJaWYgKChBbD1jb2VmX2JpdHNbMV0pICE9IDAgJiYgd29ya3B0clsxXSA9PSAwKSB7CiAJICBudW0gPSAzNiAqIFEwMCAqIChEQzQgLSBEQzYpOwogCSAgaWYgKG51bSA+PSAwKSB7CiAJICAgIHByZWQgPSAoaW50KSAoKChRMDE8PDcpICsgbnVtKSAvIChRMDE8PDgpKTsKQEAgLTU4NCwxMCArNjM3LDEwIEBACiAJICAgICAgcHJlZCA9ICgxPDxBbCktMTsKIAkgICAgcHJlZCA9IC1wcmVkOwogCSAgfQotCSAgd29ya3NwYWNlWzFdID0gKEpDT0VGKSBwcmVkOworCSAgd29ya3B0clsxXSA9IChKQ09FRikgcHJlZDsKIAl9CiAJLyogQUMxMCAqLwotCWlmICgoQWw9Y29lZl9iaXRzWzJdKSAhPSAwICYmIHdvcmtzcGFjZVs4XSA9PSAwKSB7CisJaWYgKChBbD1jb2VmX2JpdHNbMl0pICE9IDAgJiYgd29ya3B0cls4XSA9PSAwKSB7CiAJICBudW0gPSAzNiAqIFEwMCAqIChEQzIgLSBEQzgpOwogCSAgaWYgKG51bSA+PSAwKSB7CiAJICAgIHByZWQgPSAoaW50KSAoKChRMTA8PDcpICsgbnVtKSAvIChRMTA8PDgpKTsKQEAgLTU5OSwxMCArNjUyLDEwIEBACiAJICAgICAgcHJlZCA9ICgxPDxBbCktMTsKIAkgICAgcHJlZCA9IC1wcmVkOwogCSAgfQotCSAgd29ya3NwYWNlWzhdID0gKEpDT0VGKSBwcmVkOworCSAgd29ya3B0cls4XSA9IChKQ09FRikgcHJlZDsKIAl9CiAJLyogQUMyMCAqLwotCWlmICgoQWw9Y29lZl9iaXRzWzNdKSAhPSAwICYmIHdvcmtzcGFjZVsxNl0gPT0gMCkgeworCWlmICgoQWw9Y29lZl9iaXRzWzNdKSAhPSAwICYmIHdvcmtwdHJbMTZdID09IDApIHsKIAkgIG51bSA9IDkgKiBRMDAgKiAoREMyICsgREM4IC0gMipEQzUpOwogCSAgaWYgKG51bSA+PSAwKSB7CiAJICAgIHByZWQgPSAoaW50KSAoKChRMjA8PDcpICsgbnVtKSAvIChRMjA8PDgpKTsKQEAgLTYxNCwxMCArNjY3LDEwIEBACiAJICAgICAgcHJlZCA9ICgxPDxBbCktMTsKIAkgICAgcHJlZCA9IC1wcmVkOwogCSAgfQotCSAgd29ya3NwYWNlWzE2XSA9IChKQ09FRikgcHJlZDsKKwkgIHdvcmtwdHJbMTZdID0gKEpDT0VGKSBwcmVkOwogCX0KIAkvKiBBQzExICovCi0JaWYgKChBbD1jb2VmX2JpdHNbNF0pICE9IDAgJiYgd29ya3NwYWNlWzldID09IDApIHsKKwlpZiAoKEFsPWNvZWZfYml0c1s0XSkgIT0gMCAmJiB3b3JrcHRyWzldID09IDApIHsKIAkgIG51bSA9IDUgKiBRMDAgKiAoREMxIC0gREMzIC0gREM3ICsgREM5KTsKIAkgIGlmIChudW0gPj0gMCkgewogCSAgICBwcmVkID0gKGludCkgKCgoUTExPDw3KSArIG51bSkgLyAoUTExPDw4KSk7CkBAIC02MjksMTAgKzY4MiwxMCBAQAogCSAgICAgIHByZWQgPSAoMTw8QWwpLTE7CiAJICAgIHByZWQgPSAtcHJlZDsKIAkgIH0KLQkgIHdvcmtzcGFjZVs5XSA9IChKQ09FRikgcHJlZDsKKwkgIHdvcmtwdHJbOV0gPSAoSkNPRUYpIHByZWQ7CiAJfQogCS8qIEFDMDIgKi8KLQlpZiAoKEFsPWNvZWZfYml0c1s1XSkgIT0gMCAmJiB3b3Jrc3BhY2VbMl0gPT0gMCkgeworCWlmICgoQWw9Y29lZl9iaXRzWzVdKSAhPSAwICYmIHdvcmtwdHJbMl0gPT0gMCkgewogCSAgbnVtID0gOSAqIFEwMCAqIChEQzQgKyBEQzYgLSAyKkRDNSk7CiAJICBpZiAobnVtID49IDApIHsKIAkgICAgcHJlZCA9IChpbnQpICgoKFEwMjw8NykgKyBudW0pIC8gKFEwMjw8OCkpOwpAQCAtNjQ0LDEwICs2OTcsMTAgQEAKIAkgICAgICBwcmVkID0gKDE8PEFsKS0xOwogCSAgICBwcmVkID0gLXByZWQ7CiAJICB9Ci0JICB3b3Jrc3BhY2VbMl0gPSAoSkNPRUYpIHByZWQ7CisJICB3b3JrcHRyWzJdID0gKEpDT0VGKSBwcmVkOwogCX0KIAkvKiBPSywgZG8gdGhlIElEQ1QgKi8KLQkoKmludmVyc2VfRENUKSAoY2luZm8sIGNvbXBwdHIsIChKQ09FRlBUUikgd29ya3NwYWNlLAorCSgqaW52ZXJzZV9EQ1QpIChjaW5mbywgY29tcHB0ciwgKEpDT0VGUFRSKSB3b3JrcHRyLAogCQkJb3V0cHV0X3B0ciwgb3V0cHV0X2NvbCk7CiAJLyogQWR2YW5jZSBmb3IgbmV4dCBjb2x1bW4gKi8KIAlEQzEgPSBEQzI7IERDMiA9IERDMzsKZGlmZiAtLWdpdCBhL2pkY29sbW14LmFzbSBiL2pkY29sbW14LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDY2MjJjCi0tLSAvZGV2L251bGwKKysrIGIvamRjb2xtbXguYXNtCkBAIC0wLDAgKzEsNDM4IEBACis7Cis7IGpkY29sbW14LmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoTU1YKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IExhc3QgTW9kaWZpZWQgOiBGZWJydWFyeSA0LCAyMDA2Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKKworJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyB8fCBSR0JfUElYRUxTSVpFID09IDQKKyVpZmRlZiBKRENPTE9SX1lDQ1JHQl9NTVhfU1VQUE9SVEVECisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMJMTYKKworRl8wXzM0NAllcXUJIDIyNTU0CQkJOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQJZXF1CSA0NjgwMgkJCTsgRklYKDAuNzE0MTQpCitGXzFfNDAyCWVxdQkgOTE4ODEJCQk7IEZJWCgxLjQwMjAwKQorRl8xXzc3MgllcXUJMTE2MTMwCQkJOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIJZXF1CShGXzFfNDAyIC0gNjU1MzYpCTsgRklYKDEuNDAyMDApIC0gRklYKDEpCitGXzBfMjg1CWVxdQkoIDY1NTM2IC0gRl8wXzcxNCkJOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjgJZXF1CSgxMzEwNzIgLSBGXzFfNzcyKQk7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfbW14KQorCitFWFROKGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfbW14KToKKworUFdfRjA0MDIJdGltZXMgNCBkdyAgRl8wXzQwMgorUFdfTUYwMjI4CXRpbWVzIDQgZHcgLUZfMF8yMjgKK1BXX01GMDM0NF9GMDI4NQl0aW1lcyAyIGR3IC1GXzBfMzQ0LCBGXzBfMjg1CitQV19PTkUJCXRpbWVzIDQgZHcgIDEKK1BEX09ORUhBTEYJdGltZXMgMiBkZCAgMSA8PCAoU0NBTEVCSVRTLTEpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ195Y2NfcmdiX2NvbnZlcnRfbW14IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKzsKKworJWRlZmluZSBjaW5mbyhiKQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGlucHV0X2J1ZihiKQkoYikrMTIJCTsgSlNBTVBJTUFHRSBpbnB1dF9idWYKKyVkZWZpbmUgaW5wdXRfcm93KGIpCShiKSsxNgkJOyBKRElNRU5TSU9OIGlucHV0X3JvdworJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgbnVtX3Jvd3MoYikJKGIpKzI0CQk7IGludCBudW1fcm93cworCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JECTsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIGdvdHB0cgkJd2soMCktU0laRU9GX1BPSU5URVIJOyB2b2lkICogZ290cHRyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfeWNjX3JnYl9jb252ZXJ0X21teCkKKworRVhUTihqcGVnX3ljY19yZ2JfY29udmVydF9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKKwltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworCisJbW92CWVjeCwgUE9JTlRFUiBbY2luZm8oZWF4KV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtqZHN0cnVjdF9vdXRwdXRfd2lkdGgoZWN4KV0JOyBudW1fY29scworCXRlc3QJZWN4LGVjeAorCWp6CW5lYXIgLnJldHVybgorCisJcHVzaAllY3gKKworCW1vdgllZGksIEpTQU1QSU1BR0UgW2lucHV0X2J1ZihlYXgpXQorCW1vdgllY3gsIEpESU1FTlNJT04gW2lucHV0X3JvdyhlYXgpXQorCW1vdgllc2ksIEpTQU1QQVJSQVkgW2VkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZHgsIEpTQU1QQVJSQVkgW2VkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorCWxlYQllc2ksIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10KKwlsZWEJZWJ4LCBbZWJ4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisJbGVhCWVkeCwgW2VkeCtlY3gqU0laRU9GX0pTQU1QUk9XXQorCisJcG9wCWVjeAorCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQorCW1vdgllYXgsIElOVCBbbnVtX3Jvd3MoZWF4KV0KKwl0ZXN0CWVheCxlYXgKKwlqbGUJbmVhciAucmV0dXJuCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWF4CisJcHVzaAllZGkKKwlwdXNoCWVkeAorCXB1c2gJZWJ4CisJcHVzaAllc2kKKwlwdXNoCWVjeAkJCTsgY29sCisKKwltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQk7IGlucHRyMAorCW1vdgllYngsIEpTQU1QUk9XIFtlYnhdCTsgaW5wdHIxCisJbW92CWVkeCwgSlNBTVBST1cgW2VkeF0JOyBpbnB0cjIKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQk7IG91dHB0cgorCW1vdnBpYwllYXgsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzIChlYXgpCisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorCisJbW92cQltbTUsIE1NV09SRCBbZWJ4XQk7IG1tNT1DYigwMTIzNDU2NykKKwltb3ZxCW1tMSwgTU1XT1JEIFtlZHhdCTsgbW0xPUNyKDAxMjM0NTY3KQorCisJcGNtcGVxdwltbTQsbW00CisJcGNtcGVxdwltbTcsbW03CisJcHNybHcJbW00LEJZVEVfQklUCisJcHNsbHcJbW03LDcJCQk7IG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwfQorCW1vdnEJbW0wLG1tNAkJCTsgbW0wPW1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworCXBhbmQJbW00LG1tNQkJCTsgbW00PUNiKDAyNDYpPUNiRQorCXBzcmx3CW1tNSxCWVRFX0JJVAkJOyBtbTU9Q2IoMTM1Nyk9Q2JPCisJcGFuZAltbTAsbW0xCQkJOyBtbTA9Q3IoMDI0Nik9Q3JFCisJcHNybHcJbW0xLEJZVEVfQklUCQk7IG1tMT1DcigxMzU3KT1Dck8KKworCXBhZGR3CW1tNCxtbTcKKwlwYWRkdwltbTUsbW03CisJcGFkZHcJbW0wLG1tNworCXBhZGR3CW1tMSxtbTcKKworCTsgKE9yaWdpbmFsKQorCTsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKwk7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCisJOyBCID0gWSArIDEuNzcyMDAgKiBDYgorCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgorCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgorCTsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCisKKwltb3ZxCW1tMixtbTQJCQk7IG1tMj1DYkUKKwltb3ZxCW1tMyxtbTUJCQk7IG1tMz1DYk8KKwlwYWRkdwltbTQsbW00CQkJOyBtbTQ9MipDYkUKKwlwYWRkdwltbTUsbW01CQkJOyBtbTU9MipDYk8KKwltb3ZxCW1tNixtbTAJCQk7IG1tNj1DckUKKwltb3ZxCW1tNyxtbTEJCQk7IG1tNz1Dck8KKwlwYWRkdwltbTAsbW0wCQkJOyBtbTA9MipDckUKKwlwYWRkdwltbTEsbW0xCQkJOyBtbTE9MipDck8KKworCXBtdWxodwltbTQsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyBtbTQ9KDIqQ2JFICogLUZJWCgwLjIyODAwKSkKKwlwbXVsaHcJbW01LFtHT1RPRkYoZWF4LFBXX01GMDIyOCldCTsgbW01PSgyKkNiTyAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CW1tMCxbR09UT0ZGKGVheCxQV19GMDQwMildCTsgbW0wPSgyKkNyRSAqIEZJWCgwLjQwMjAwKSkKKwlwbXVsaHcJbW0xLFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0JOyBtbTE9KDIqQ3JPICogRklYKDAuNDAyMDApKQorCisJcGFkZHcJbW00LFtHT1RPRkYoZWF4LFBXX09ORSldCisJcGFkZHcJbW01LFtHT1RPRkYoZWF4LFBXX09ORSldCisJcHNyYXcJbW00LDEJCQk7IG1tND0oQ2JFICogLUZJWCgwLjIyODAwKSkKKwlwc3JhdwltbTUsMQkJCTsgbW01PShDYk8gKiAtRklYKDAuMjI4MDApKQorCXBhZGR3CW1tMCxbR09UT0ZGKGVheCxQV19PTkUpXQorCXBhZGR3CW1tMSxbR09UT0ZGKGVheCxQV19PTkUpXQorCXBzcmF3CW1tMCwxCQkJOyBtbTA9KENyRSAqIEZJWCgwLjQwMjAwKSkKKwlwc3JhdwltbTEsMQkJCTsgbW0xPShDck8gKiBGSVgoMC40MDIwMCkpCisKKwlwYWRkdwltbTQsbW0yCisJcGFkZHcJbW01LG1tMworCXBhZGR3CW1tNCxtbTIJCQk7IG1tND0oQ2JFICogRklYKDEuNzcyMDApKT0oQi1ZKUUKKwlwYWRkdwltbTUsbW0zCQkJOyBtbTU9KENiTyAqIEZJWCgxLjc3MjAwKSk9KEItWSlPCisJcGFkZHcJbW0wLG1tNgkJCTsgbW0wPShDckUgKiBGSVgoMS40MDIwMCkpPShSLVkpRQorCXBhZGR3CW1tMSxtbTcJCQk7IG1tMT0oQ3JPICogRklYKDEuNDAyMDApKT0oUi1ZKU8KKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAk7IHdrKDApPShCLVkpRQorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNQk7IHdrKDEpPShCLVkpTworCisJbW92cSAgICAgIG1tNCxtbTIKKwltb3ZxICAgICAgbW01LG1tMworCXB1bnBja2x3ZCBtbTIsbW02CisJcHVucGNraHdkIG1tNCxtbTYKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCXB1bnBja2x3ZCBtbTMsbW03CisJcHVucGNraHdkIG1tNSxtbTcKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCisJcGFkZGQgICAgIG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKwlwYWRkZCAgICAgbW00LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICBtbTIsU0NBTEVCSVRTCisJcHNyYWQgICAgIG1tNCxTQ0FMRUJJVFMKKwlwYWRkZCAgICAgbW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICBtbTUsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisJcHNyYWQgICAgIG1tMyxTQ0FMRUJJVFMKKwlwc3JhZCAgICAgbW01LFNDQUxFQklUUworCisJcGFja3NzZHcgIG1tMixtbTQJOyBtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSpGSVgoMC4yODUpCisJcGFja3NzZHcgIG1tMyxtbTUJOyBtbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTypGSVgoMC4yODUpCisJcHN1YncgICAgIG1tMixtbTYJOyBtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSotRklYKDAuNzE0KT0oRy1ZKUUKKwlwc3VidyAgICAgbW0zLG1tNwk7IG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKi1GSVgoMC43MTQpPShHLVkpTworCisJbW92cSAgICAgIG1tNSwgTU1XT1JEIFtlc2ldCTsgbW01PVkoMDEyMzQ1NjcpCisKKwlwY21wZXF3ICAgbW00LG1tNAorCXBzcmx3ICAgICBtbTQsQllURV9CSVQJCTsgbW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCXBhbmQgICAgICBtbTQsbW01CQk7IG1tND1ZKDAyNDYpPVlFCisJcHNybHcgICAgIG1tNSxCWVRFX0JJVAkJOyBtbTU9WSgxMzU3KT1ZTworCisJcGFkZHcgICAgIG1tMCxtbTQJCTsgbW0wPSgoUi1ZKUUrWUUpPVJFPShSMCBSMiBSNCBSNikKKwlwYWRkdyAgICAgbW0xLG1tNQkJOyBtbTE9KChSLVkpTytZTyk9Uk89KFIxIFIzIFI1IFI3KQorCXBhY2t1c3diICBtbTAsbW0wCQk7IG1tMD0oUjAgUjIgUjQgUjYgKiogKiogKiogKiopCisJcGFja3Vzd2IgIG1tMSxtbTEJCTsgbW0xPShSMSBSMyBSNSBSNyAqKiAqKiAqKiAqKikKKworCXBhZGR3ICAgICBtbTIsbW00CQk7IG1tMj0oKEctWSlFK1lFKT1HRT0oRzAgRzIgRzQgRzYpCisJcGFkZHcgICAgIG1tMyxtbTUJCTsgbW0zPSgoRy1ZKU8rWU8pPUdPPShHMSBHMyBHNSBHNykKKwlwYWNrdXN3YiAgbW0yLG1tMgkJOyBtbTI9KEcwIEcyIEc0IEc2ICoqICoqICoqICoqKQorCXBhY2t1c3diICBtbTMsbW0zCQk7IG1tMz0oRzEgRzMgRzUgRzcgKiogKiogKiogKiopCisKKwlwYWRkdyAgICAgbW00LCBNTVdPUkQgW3drKDApXQk7IG1tND0oWUUrKEItWSlFKT1CRT0oQjAgQjIgQjQgQjYpCisJcGFkZHcgICAgIG1tNSwgTU1XT1JEIFt3aygxKV0JOyBtbTU9KFlPKyhCLVkpTyk9Qk89KEIxIEIzIEI1IEI3KQorCXBhY2t1c3diICBtbTQsbW00CQk7IG1tND0oQjAgQjIgQjQgQjYgKiogKiogKiogKiopCisJcGFja3Vzd2IgIG1tNSxtbTUJCTsgbW01PShCMSBCMyBCNSBCNyAqKiAqKiAqKiAqKikKKworJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyA7IC0tLS0tLS0tLS0tLS0tLQorCisJOyBtbUE9KDAwIDAyIDA0IDA2ICoqICoqICoqICoqKSwgbW1CPSgwMSAwMyAwNSAwNyAqKiAqKiAqKiAqKikKKwk7IG1tQz0oMTAgMTIgMTQgMTYgKiogKiogKiogKiopLCBtbUQ9KDExIDEzIDE1IDE3ICoqICoqICoqICoqKQorCTsgbW1FPSgyMCAyMiAyNCAyNiAqKiAqKiAqKiAqKiksIG1tRj0oMjEgMjMgMjUgMjcgKiogKiogKiogKiopCisJOyBtbUc9KCoqICoqICoqICoqICoqICoqICoqICoqKSwgbW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworCXB1bnBja2xidyBtbUEsbW1DCQk7IG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYpCisJcHVucGNrbGJ3IG1tRSxtbUIJCTsgbW1FPSgyMCAwMSAyMiAwMyAyNCAwNSAyNiAwNykKKwlwdW5wY2tsYncgbW1ELG1tRgkJOyBtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3KQorCisJbW92cSAgICAgIG1tRyxtbUEKKwltb3ZxICAgICAgbW1ILG1tQQorCXB1bnBja2x3ZCBtbUEsbW1FCQk7IG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMpCisJcHVucGNraHdkIG1tRyxtbUUJCTsgbW1HPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNykKKworCXBzcmxxICAgICBtbUgsMipCWVRFX0JJVAk7IG1tSD0oMDIgMTIgMDQgMTQgMDYgMTYgLS0gLS0pCisJcHNybHEgICAgIG1tRSwyKkJZVEVfQklUCTsgbW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAtLSAtLSkKKworCW1vdnEgICAgICBtbUMsbW1ECisJbW92cSAgICAgIG1tQixtbUQKKwlwdW5wY2tsd2QgbW1ELG1tSAkJOyBtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0KQorCXB1bnBja2h3ZCBtbUMsbW1ICQk7IG1tQz0oMTUgMjUgMDYgMTYgMTcgMjcgLS0gLS0pCisKKwlwc3JscSAgICAgbW1CLDIqQllURV9CSVQJOyBtbUI9KDEzIDIzIDE1IDI1IDE3IDI3IC0tIC0tKQorCisJbW92cSAgICAgIG1tRixtbUUKKwlwdW5wY2tsd2QgbW1FLG1tQgkJOyBtbUU9KDIyIDAzIDEzIDIzIDI0IDA1IDE1IDI1KQorCXB1bnBja2h3ZCBtbUYsbW1CCQk7IG1tRj0oMjYgMDcgMTcgMjcgLS0gLS0gLS0gLS0pCisKKwlwdW5wY2tsZHEgbW1BLG1tRAkJOyBtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorCXB1bnBja2xkcSBtbUUsbW1HCQk7IG1tRT0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisJcHVucGNrbGRxIG1tQyxtbUYJCTsgbW1DPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKKworCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNgorCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRQorCW1vdnEJTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW1DCisKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqeglzaG9ydCAubmV4dHJvdworCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjAKKwlhZGQJZWJ4LCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIyCisJYWRkCWVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIKKwlqbXAJbmVhciAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5fc3QxNjoKKwlsZWEJZWN4LCBbZWN4K2VjeCoyXQk7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCisJY21wCWVjeCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0OAorCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisJbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUUKKwltb3ZxCW1tQSxtbUMKKwlzdWIJZWN4LCBieXRlIDIqU0laRU9GX01NV09SRAorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisJam1wCXNob3J0IC5jb2x1bW5fc3Q0CisuY29sdW1uX3N0ODoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0NAorCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisJbW92cQltbUEsbW1FCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NDoKKwltb3ZkCWVheCxtbUEKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9EV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QyCisJbW92CURXT1JEIFtlZGkrMCpTSVpFT0ZfRFdPUkRdLCBlYXgKKwlwc3JscQltbUEsRFdPUkRfQklUCisJbW92ZAllYXgsbW1BCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9EV09SRAorLmNvbHVtbl9zdDI6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxCisJbW92CVdPUkQgW2VkaSswKlNJWkVPRl9XT1JEXSwgYXgKKwlzaHIJZWF4LFdPUkRfQklUCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1dPUkQKKy5jb2x1bW5fc3QxOgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX0JZVEUKKwlqYglzaG9ydCAubmV4dHJvdworCW1vdglCWVRFIFtlZGkrMCpTSVpFT0ZfQllURV0sIGFsCisKKyVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworJWlmZGVmIFJHQlhfRklMTEVSXzBYRkYKKwlwY21wZXFiICAgbW02LG1tNgkJOyBtbTY9KFgwIFgyIFg0IFg2ICoqICoqICoqICoqKQorCXBjbXBlcWIgICBtbTcsbW03CQk7IG1tNz0oWDEgWDMgWDUgWDcgKiogKiogKiogKiopCislZWxzZQorCXB4b3IgICAgICBtbTYsbW02CQk7IG1tNj0oWDAgWDIgWDQgWDYgKiogKiogKiogKiopCisJcHhvciAgICAgIG1tNyxtbTcJCTsgbW03PShYMSBYMyBYNSBYNyAqKiAqKiAqKiAqKikKKyVlbmRpZgorCTsgbW1BPSgwMCAwMiAwNCAwNiAqKiAqKiAqKiAqKiksIG1tQj0oMDEgMDMgMDUgMDcgKiogKiogKiogKiopCisJOyBtbUM9KDEwIDEyIDE0IDE2ICoqICoqICoqICoqKSwgbW1EPSgxMSAxMyAxNSAxNyAqKiAqKiAqKiAqKikKKwk7IG1tRT0oMjAgMjIgMjQgMjYgKiogKiogKiogKiopLCBtbUY9KDIxIDIzIDI1IDI3ICoqICoqICoqICoqKQorCTsgbW1HPSgzMCAzMiAzNCAzNiAqKiAqKiAqKiAqKiksIG1tSD0oMzEgMzMgMzUgMzcgKiogKiogKiogKiopCisKKwlwdW5wY2tsYncgbW1BLG1tQwkJOyBtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2KQorCXB1bnBja2xidyBtbUUsbW1HCQk7IG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYpCisJcHVucGNrbGJ3IG1tQixtbUQJCTsgbW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNykKKwlwdW5wY2tsYncgbW1GLG1tSAkJOyBtbUY9KDIxIDMxIDIzIDMzIDI1IDM1IDI3IDM3KQorCisJbW92cSAgICAgIG1tQyxtbUEKKwlwdW5wY2tsd2QgbW1BLG1tRQkJOyBtbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyKQorCXB1bnBja2h3ZCBtbUMsbW1FCQk7IG1tQz0oMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisJbW92cSAgICAgIG1tRyxtbUIKKwlwdW5wY2tsd2QgbW1CLG1tRgkJOyBtbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzKQorCXB1bnBja2h3ZCBtbUcsbW1GCQk7IG1tRz0oMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCisKKwltb3ZxICAgICAgbW1ELG1tQQorCXB1bnBja2xkcSBtbUEsbW1CCQk7IG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisJcHVucGNraGRxIG1tRCxtbUIJCTsgbW1EPSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwltb3ZxICAgICAgbW1ILG1tQworCXB1bnBja2xkcSBtbUMsbW1HCQk7IG1tQz0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisJcHVucGNraGRxIG1tSCxtbUcJCTsgbW1IPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNgorCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRAorCW1vdnEJTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW1DCisJbW92cQlNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbUgKKworCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMAorCWFkZAllYngsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIxCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjIKKwlhZGQJZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX01NV09SRAk7IG91dHB0cgorCWptcAluZWFyIC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLmNvbHVtbl9zdDE2OgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRC8yCisJamIJc2hvcnQgLmNvbHVtbl9zdDgKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1ECisJbW92cQltbUEsbW1DCisJbW92cQltbUQsbW1ICisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzIKKwlhZGQJZWRpLCBieXRlIDIqU0laRU9GX01NV09SRAorLmNvbHVtbl9zdDg6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKKwlqYglzaG9ydCAuY29sdW1uX3N0NAorCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisJbW92cQltbUEsbW1ECisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKKwlhZGQJZWRpLCBieXRlIDEqU0laRU9GX01NV09SRAorLmNvbHVtbl9zdDQ6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzgKKwlqYglzaG9ydCAubmV4dHJvdworCW1vdmQJRFdPUkQgW2VkaSswKlNJWkVPRl9EV09SRF0sIG1tQQorCislZW5kaWYgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKwlhbGlnbngJMTYsNworCisubmV4dHJvdzoKKwlwb3AJZWN4CisJcG9wCWVzaQorCXBvcAllYngKKwlwb3AJZWR4CisJcG9wCWVkaQorCXBvcAllYXgKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2J1ZgorCWRlYwllYXgJCQkJOyBudW1fcm93cworCWpnCW5lYXIgLnJvd2xvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCislZW5kaWYgOyBKRENPTE9SX1lDQ1JHQl9NTVhfU1VQUE9SVEVECislZW5kaWYgOyBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0CmRpZmYgLS1naXQgYS9qZGNvbG9yLmMgYi9qZGNvbG9yLmMKaW5kZXggNmMwNGRmZS4uOWE4YzdlYSAxMDA2NDQKLS0tIGEvamRjb2xvci5jCisrKyBiL2pkY29sb3IuYwpAQCAtNSwxMiArNSwyMCBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBmb3IgU0lNRCBleHRlbnNpb24uCisgKiBMYXN0IE1vZGlmaWVkIDogSmFudWFyeSA1LCAyMDA2CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgb3V0cHV0IGNvbG9yc3BhY2UgY29udmVyc2lvbiByb3V0aW5lcy4KICAqLwogCiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamNvbHNhbXAuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zICovCiAKIAogLyogUHJpdmF0ZSBzdWJvYmplY3QgKi8KQEAgLTEwNSw2ICsxMTMsMTcgQEAKIH0KIAogCisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisvKiBvZmZzZXQgb2YgZmlsbGVyIGJ5dGUgKi8KKyNkZWZpbmUgUkdCX0ZJTExFUiAgKDYgLSAoUkdCX1JFRCkgLSAoUkdCX0dSRUVOKSAtIChSR0JfQkxVRSkpCisvKiBieXRlIHBhdHRlcm4gdG8gZmlsbCB3aXRoICovCisjaWZkZWYgUkdCWF9GSUxMRVJfMFhGRgorI2RlZmluZSBSR0JfRklMTEVSX0JZVEUgMHhGRgorI2Vsc2UKKyNkZWZpbmUgUkdCX0ZJTExFUl9CWVRFIDB4MDAKKyNlbmRpZgorI2VuZGlmIC8qIFJHQl9QSVhFTFNJWkUgPT0gNCAqLworCiAvKgogICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgb3V0cHV0IGNvbG9yc3BhY2UuCiAgKgpAQCAtMTUxLDYgKzE3MCw5IEBACiAJCQkgICAgICAoKGludCkgUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sCiAJCQkJCQkgU0NBTEVCSVRTKSldOwogICAgICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgQ2JidGFiW2NiXV07CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgICBvdXRwdHJbUkdCX0ZJTExFUl0gPSBSR0JfRklMTEVSX0JZVEU7CisjZW5kaWYKICAgICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOwogICAgIH0KICAgfQpAQCAtMjI4LDYgKzI1MCw5IEBACiAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKICAgICAgIC8qIFdlIGNhbiBkaXNwZW5zZSB3aXRoIEdFVEpTQU1QTEUoKSBoZXJlICovCiAgICAgICBvdXRwdHJbUkdCX1JFRF0gPSBvdXRwdHJbUkdCX0dSRUVOXSA9IG91dHB0cltSR0JfQkxVRV0gPSBpbnB0cltjb2xdOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgICAgb3V0cHRyW1JHQl9GSUxMRVJdID0gUkdCX0ZJTExFUl9CWVRFOworI2VuZGlmCiAgICAgICBvdXRwdHIgKz0gUkdCX1BJWEVMU0laRTsKICAgICB9CiAgIH0KQEAgLTMwNSw2ICszMzAsNyBAQAogewogICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQ7CiAgIGludCBjaTsKKyAgdW5zaWduZWQgaW50IHNpbWQgPSBqcGVnX3NpbWRfc3VwcG9ydCgoal9jb21tb25fcHRyKSBjaW5mbyk7CiAKICAgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCkBAIC0zNTgsOCArMzg0LDIzIEBACiAgIGNhc2UgSkNTX1JHQjoKICAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSBSR0JfUElYRUxTSVpFOwogICAgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNiQ3IpIHsKLSAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IHljY19yZ2JfY29udmVydDsKLSAgICAgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gMyB8fCBSR0JfUElYRUxTSVpFID09IDQKKyNpZmRlZiBKRENPTE9SX1lDQ1JHQl9TU0UyX1NVUFBPUlRFRAorICAgICAgaWYgKHNpbWQgJiBKU0lNRF9TU0UyICYmCisgICAgICAgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpKSB7CisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGpwZWdfeWNjX3JnYl9jb252ZXJ0X3NzZTI7CisgICAgICB9IGVsc2UKKyNlbmRpZgorI2lmZGVmIEpEQ09MT1JfWUNDUkdCX01NWF9TVVBQT1JURUQKKyAgICAgIGlmIChzaW1kICYgSlNJTURfTU1YKSB7CisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGpwZWdfeWNjX3JnYl9jb252ZXJ0X21teDsKKyAgICAgIH0gZWxzZQorI2VuZGlmCisjZW5kaWYgLyogUkdCX1BJWEVMU0laRSA9PSAzIHx8IFJHQl9QSVhFTFNJWkUgPT0gNCAqLworICAgICAgeworICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSB5Y2NfcmdiX2NvbnZlcnQ7CisgICAgICAgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOworICAgICAgfQogICAgIH0gZWxzZSBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX0dSQVlTQ0FMRSkgewogICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheV9yZ2JfY29udmVydDsKICAgICB9IGVsc2UgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19SR0IgJiYgUkdCX1BJWEVMU0laRSA9PSAzKSB7CkBAIC0zOTQsMyArNDM1LDI4IEBACiAgIGVsc2UKICAgICBjaW5mby0+b3V0cHV0X2NvbXBvbmVudHMgPSBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHM7CiB9CisKKworI2lmbmRlZiBKU0lNRF9NT0RFSU5GT19OT1RfU1VQUE9SVEVECisKK0dMT0JBTCh1bnNpZ25lZCBpbnQpCitqcGVnX3NpbWRfY29sb3JfZGVjb252ZXJ0ZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIHVuc2lnbmVkIGludCBzaW1kID0ganBlZ19zaW1kX3N1cHBvcnQoKGpfY29tbW9uX3B0cikgY2luZm8pOworCisjaWYgUkdCX1BJWEVMU0laRSA9PSAzIHx8IFJHQl9QSVhFTFNJWkUgPT0gNAorI2lmZGVmIEpEQ09MT1JfWUNDUkdCX1NTRTJfU1VQUE9SVEVECisgIGlmIChzaW1kICYgSlNJTURfU1NFMiAmJgorICAgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpKQorICAgIHJldHVybiBKU0lNRF9TU0UyOworI2VuZGlmCisjaWZkZWYgSkRDT0xPUl9ZQ0NSR0JfTU1YX1NVUFBPUlRFRAorICBpZiAoc2ltZCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gSlNJTURfTU1YOworI2VuZGlmCisjZW5kaWYgLyogUkdCX1BJWEVMU0laRSA9PSAzIHx8IFJHQl9QSVhFTFNJWkUgPT0gNCAqLworCisgIHJldHVybiBKU0lNRF9OT05FOworfQorCisjZW5kaWYgLyogIUpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL2pkY29sc3MyLmFzbSBiL2pkY29sc3MyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDZmMDRkCi0tLSAvZGV2L251bGwKKysrIGIvamRjb2xzczIuYXNtCkBAIC0wLDAgKzEsNTM2IEBACis7Cis7IGpkY29sc3MyLmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoU1NFMikKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBMYXN0IE1vZGlmaWVkIDogRmVicnVhcnkgNCwgMjAwNgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0CislaWZkZWYgSkRDT0xPUl9ZQ0NSR0JfU1NFMl9TVVBQT1JURUQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIFNDQUxFQklUUwkxNgorCitGXzBfMzQ0CWVxdQkgMjI1NTQJCQk7IEZJWCgwLjM0NDE0KQorRl8wXzcxNAllcXUJIDQ2ODAyCQkJOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIJZXF1CSA5MTg4MQkJCTsgRklYKDEuNDAyMDApCitGXzFfNzcyCWVxdQkxMTYxMzAJCQk7IEZJWCgxLjc3MjAwKQorRl8wXzQwMgllcXUJKEZfMV80MDIgLSA2NTUzNikJOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUJZXF1CSggNjU1MzYgLSBGXzBfNzE0KQk7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQorRl8wXzIyOAllcXUJKDEzMTA3MiAtIEZfMV83NzIpCTsgRklYKDIpIC0gRklYKDEuNzcyMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X3ljY19yZ2JfY29udmVydF9zc2UyKQorCitFWFROKGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfc3NlMik6CisKK1BXX0YwNDAyCXRpbWVzIDggZHcgIEZfMF80MDIKK1BXX01GMDIyOAl0aW1lcyA4IGR3IC1GXzBfMjI4CitQV19NRjAzNDRfRjAyODUJdGltZXMgNCBkdyAtRl8wXzM0NCwgRl8wXzI4NQorUFdfT05FCQl0aW1lcyA4IGR3ICAxCitQRF9PTkVIQUxGCXRpbWVzIDQgZGQgIDEgPDwgKFNDQUxFQklUUy0xKQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfeWNjX3JnYl9jb252ZXJ0X3NzZTIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBpbnB1dF9idWYoYikJKGIpKzEyCQk7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGlucHV0X3JvdyhiKQkoYikrMTYJCTsgSkRJTUVOU0lPTiBpbnB1dF9yb3cKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG51bV9yb3dzKGIpCShiKSsyNAkJOyBpbnQgbnVtX3Jvd3MKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIGdvdHB0cgkJd2soMCktU0laRU9GX1BPSU5URVIJOyB2b2lkICogZ290cHRyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfeWNjX3JnYl9jb252ZXJ0X3NzZTIpCisKK0VYVE4oanBlZ195Y2NfcmdiX2NvbnZlcnRfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAorCXN1Ygllc3AsIGJ5dGUgNAorCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWF4CQk7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCisJbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllY3gsIFBPSU5URVIgW2NpbmZvKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbamRzdHJ1Y3Rfb3V0cHV0X3dpZHRoKGVjeCldCTsgbnVtX2NvbHMKKwl0ZXN0CWVjeCxlY3gKKwlqegluZWFyIC5yZXR1cm4KKworCXB1c2gJZWN4CisKKwltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtpbnB1dF9yb3coZWF4KV0KKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJZWJ4LCBKU0FNUEFSUkFZIFtlZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJZWR4LCBKU0FNUEFSUkFZIFtlZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKwlsZWEJZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisJbGVhCWVieCwgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQorCWxlYQllZHgsIFtlZHgrZWN4KlNJWkVPRl9KU0FNUFJPV10KKworCXBvcAllY3gKKworCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0KKwltb3YJZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisJdGVzdAllYXgsZWF4CisJamxlCW5lYXIgLnJldHVybgorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVheAorCXB1c2gJZWRpCisJcHVzaAllZHgKKwlwdXNoCWVieAorCXB1c2gJZXNpCisJcHVzaAllY3gJCQk7IGNvbAorCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JOyBpbnB0cjAKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZWJ4XQk7IGlucHRyMQorCW1vdgllZHgsIEpTQU1QUk9XIFtlZHhdCTsgaW5wdHIyCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JOyBvdXRwdHIKKwltb3ZwaWMJZWF4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKworCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtlYnhdCTsgeG1tNT1DYigwMTIzNDU2Nzg5QUJDREVGKQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtlZHhdCTsgeG1tMT1DcigwMTIzNDU2Nzg5QUJDREVGKQorCisJcGNtcGVxdwl4bW00LHhtbTQKKwlwY21wZXF3CXhtbTcseG1tNworCXBzcmx3CXhtbTQsQllURV9CSVQKKwlwc2xsdwl4bW03LDcJCQk7IHhtbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KKwltb3ZkcWEJeG1tMCx4bW00CQk7IHhtbTA9eG1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworCXBhbmQJeG1tNCx4bW01CQk7IHhtbTQ9Q2IoMDI0NjhBQ0UpPUNiRQorCXBzcmx3CXhtbTUsQllURV9CSVQJCTsgeG1tNT1DYigxMzU3OUJERik9Q2JPCisJcGFuZAl4bW0wLHhtbTEJCTsgeG1tMD1DcigwMjQ2OEFDRSk9Q3JFCisJcHNybHcJeG1tMSxCWVRFX0JJVAkJOyB4bW0xPUNyKDEzNTc5QkRGKT1Dck8KKworCXBhZGR3CXhtbTQseG1tNworCXBhZGR3CXhtbTUseG1tNworCXBhZGR3CXhtbTAseG1tNworCXBhZGR3CXhtbTEseG1tNworCisJOyAoT3JpZ2luYWwpCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKwk7IEIgPSBZICsgMS43NzIwMCAqIENiCisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisJOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisJOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKworCW1vdmRxYQl4bW0yLHhtbTQJCTsgeG1tMj1DYkUKKwltb3ZkcWEJeG1tMyx4bW01CQk7IHhtbTM9Q2JPCisJcGFkZHcJeG1tNCx4bW00CQk7IHhtbTQ9MipDYkUKKwlwYWRkdwl4bW01LHhtbTUJCTsgeG1tNT0yKkNiTworCW1vdmRxYQl4bW02LHhtbTAJCTsgeG1tNj1DckUKKwltb3ZkcWEJeG1tNyx4bW0xCQk7IHhtbTc9Q3JPCisJcGFkZHcJeG1tMCx4bW0wCQk7IHhtbTA9MipDckUKKwlwYWRkdwl4bW0xLHhtbTEJCTsgeG1tMT0yKkNyTworCisJcG11bGh3CXhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyB4bW00PSgyKkNiRSAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CXhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyB4bW01PSgyKkNiTyAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CXhtbTAsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IHhtbTA9KDIqQ3JFICogRklYKDAuNDAyMDApKQorCXBtdWxodwl4bW0xLFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0JOyB4bW0xPSgyKkNyTyAqIEZJWCgwLjQwMjAwKSkKKworCXBhZGR3CXhtbTQsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwYWRkdwl4bW01LFtHT1RPRkYoZWF4LFBXX09ORSldCisJcHNyYXcJeG1tNCwxCQkJOyB4bW00PShDYkUgKiAtRklYKDAuMjI4MDApKQorCXBzcmF3CXhtbTUsMQkJCTsgeG1tNT0oQ2JPICogLUZJWCgwLjIyODAwKSkKKwlwYWRkdwl4bW0wLFtHT1RPRkYoZWF4LFBXX09ORSldCisJcGFkZHcJeG1tMSxbR09UT0ZGKGVheCxQV19PTkUpXQorCXBzcmF3CXhtbTAsMQkJCTsgeG1tMD0oQ3JFICogRklYKDAuNDAyMDApKQorCXBzcmF3CXhtbTEsMQkJCTsgeG1tMT0oQ3JPICogRklYKDAuNDAyMDApKQorCisJcGFkZHcJeG1tNCx4bW0yCisJcGFkZHcJeG1tNSx4bW0zCisJcGFkZHcJeG1tNCx4bW0yCQk7IHhtbTQ9KENiRSAqIEZJWCgxLjc3MjAwKSk9KEItWSlFCisJcGFkZHcJeG1tNSx4bW0zCQk7IHhtbTU9KENiTyAqIEZJWCgxLjc3MjAwKSk9KEItWSlPCisJcGFkZHcJeG1tMCx4bW02CQk7IHhtbTA9KENyRSAqIEZJWCgxLjQwMjAwKSk9KFItWSlFCisJcGFkZHcJeG1tMSx4bW03CQk7IHhtbTE9KENyTyAqIEZJWCgxLjQwMjAwKSk9KFItWSlPCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW00CTsgd2soMCk9KEItWSlFCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNQk7IHdrKDEpPShCLVkpTworCisJbW92ZHFhICAgIHhtbTQseG1tMgorCW1vdmRxYSAgICB4bW01LHhtbTMKKwlwdW5wY2tsd2QgeG1tMix4bW02CisJcHVucGNraHdkIHhtbTQseG1tNgorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKwlwdW5wY2tsd2QgeG1tMyx4bW03CisJcHVucGNraHdkIHhtbTUseG1tNworCXBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKworCXBhZGRkICAgICB4bW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICB4bW00LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICB4bW0yLFNDQUxFQklUUworCXBzcmFkICAgICB4bW00LFNDQUxFQklUUworCXBhZGRkICAgICB4bW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICB4bW01LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICB4bW0zLFNDQUxFQklUUworCXBzcmFkICAgICB4bW01LFNDQUxFQklUUworCisJcGFja3NzZHcgIHhtbTIseG1tNAk7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSpGSVgoMC4yODUpCisJcGFja3NzZHcgIHhtbTMseG1tNQk7IHhtbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTypGSVgoMC4yODUpCisJcHN1YncgICAgIHhtbTIseG1tNgk7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSotRklYKDAuNzE0KT0oRy1ZKUUKKwlwc3VidyAgICAgeG1tMyx4bW03CTsgeG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKi1GSVgoMC43MTQpPShHLVkpTworCisJbW92ZHFhICAgIHhtbTUsIFhNTVdPUkQgW2VzaV0JOyB4bW01PVkoMDEyMzQ1Njc4OUFCQ0RFRikKKworCXBjbXBlcXcgICB4bW00LHhtbTQKKwlwc3JsdyAgICAgeG1tNCxCWVRFX0JJVAkJOyB4bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCXBhbmQgICAgICB4bW00LHhtbTUJCTsgeG1tND1ZKDAyNDY4QUNFKT1ZRQorCXBzcmx3ICAgICB4bW01LEJZVEVfQklUCQk7IHhtbTU9WSgxMzU3OUJERik9WU8KKworCXBhZGR3ICAgICB4bW0wLHhtbTQJCTsgeG1tMD0oKFItWSlFK1lFKT1SRT1SKDAyNDY4QUNFKQorCXBhZGR3ICAgICB4bW0xLHhtbTUJCTsgeG1tMT0oKFItWSlPK1lPKT1STz1SKDEzNTc5QkRGKQorCXBhY2t1c3diICB4bW0wLHhtbTAJCTsgeG1tMD1SKDAyNDY4QUNFKioqKioqKiopCisJcGFja3Vzd2IgIHhtbTEseG1tMQkJOyB4bW0xPVIoMTM1NzlCREYqKioqKioqKikKKworCXBhZGR3ICAgICB4bW0yLHhtbTQJCTsgeG1tMj0oKEctWSlFK1lFKT1HRT1HKDAyNDY4QUNFKQorCXBhZGR3ICAgICB4bW0zLHhtbTUJCTsgeG1tMz0oKEctWSlPK1lPKT1HTz1HKDEzNTc5QkRGKQorCXBhY2t1c3diICB4bW0yLHhtbTIJCTsgeG1tMj1HKDAyNDY4QUNFKioqKioqKiopCisJcGFja3Vzd2IgIHhtbTMseG1tMwkJOyB4bW0zPUcoMTM1NzlCREYqKioqKioqKikKKworCXBhZGR3ICAgICB4bW00LCBYTU1XT1JEIFt3aygwKV0JOyB4bW00PShZRSsoQi1ZKUUpPUJFPUIoMDI0NjhBQ0UpCisJcGFkZHcgICAgIHhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9KFlPKyhCLVkpTyk9Qk89QigxMzU3OUJERikKKwlwYWNrdXN3YiAgeG1tNCx4bW00CQk7IHhtbTQ9QigwMjQ2OEFDRSoqKioqKioqKQorCXBhY2t1c3diICB4bW01LHhtbTUJCTsgeG1tNT1CKDEzNTc5QkRGKioqKioqKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KKworCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKwk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorCTsgeG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiogKiopLCB4bW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKwlwdW5wY2tsYncgeG1tRSx4bW1CCTsgeG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYpCisJcHVucGNrbGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGKQorCisJbW92ZHFhICAgIHhtbUcseG1tQQorCW1vdmRxYSAgICB4bW1ILHhtbUEKKwlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisJcHVucGNraHdkIHhtbUcseG1tRQk7IHhtbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGKQorCisJcHNybGRxICAgIHhtbUgsMgk7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQorCXBzcmxkcSAgICB4bW1FLDIJOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1DLHhtbUQKKwltb3ZkcWEgICAgeG1tQix4bW1ECisJcHVucGNrbHdkIHhtbUQseG1tSAk7IHhtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4KQorCXB1bnBja2h3ZCB4bW1DLHhtbUgJOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKKworCXBzcmxkcSAgICB4bW1CLDIJOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1GLHhtbUUKKwlwdW5wY2tsd2QgeG1tRSx4bW1CCTsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCisJcHVucGNraHdkIHhtbUYseG1tQgk7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQorCisJcHNodWZkICAgIHhtbUgseG1tQSwweDRFOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKwltb3ZkcWEgICAgeG1tQix4bW1FCisJcHVucGNrbGRxIHhtbUEseG1tRAk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQorCXB1bnBja2xkcSB4bW1FLHhtbUgJOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKKwlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkpCisKKwlwc2h1ZmQgICAgeG1tSCx4bW1HLDB4NEU7IHhtbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCKQorCW1vdmRxYSAgICB4bW1CLHhtbUYKKwlwdW5wY2tsZHEgeG1tRyx4bW1DCTsgeG1tRz0oMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMEEgMUEgMkEgMEIgMUIgMkIgMEMgMUMpCisJcHVucGNrbGRxIHhtbUYseG1tSAk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGKQorCXB1bnBja2hkcSB4bW1DLHhtbUIJOyB4bW1DPSgxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRiAxRiAyRiAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXB1bnBja2xxZHEgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisJcHVucGNrbHFkcSB4bW1ELHhtbUcJOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKwlwdW5wY2tscWRxIHhtbUYseG1tQwk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QzMgorCisJdGVzdAllZGksIFNJWkVPRl9YTU1XT1JELTEKKwlqbnoJc2hvcnQgLm91dDEKKwk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1vdm50ZHEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKwltb3ZudGRxCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCWptcAlzaG9ydCAub3V0MAorLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisJcGNtcGVxYiAgICB4bW1ILHhtbUgJCQk7IHhtbUg9KGFsbCAxJ3MpCisJbWFza21vdmRxdSB4bW1BLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1ELHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUQKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1GLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUYKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisub3V0MDoKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJanoJbmVhciAubmV4dHJvdworCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAorCWFkZAllYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIyCisJam1wCW5lYXIgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1uX3N0MzI6CisJcGNtcGVxYgl4bW1ILHhtbUgJCQk7IHhtbUg9KGFsbCAxJ3MpCisJbGVhCWVjeCwgW2VjeCtlY3gqMl0JCTsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKKwljbXAJZWN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTYKKwltYXNrbW92ZHF1IHhtbUEseG1tSAkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUQseG1tSAkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1GCisJc3ViCWVjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisJam1wCXNob3J0IC5jb2x1bW5fc3QxNQorLmNvbHVtbl9zdDE2OgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTUKKwltYXNrbW92ZHF1IHhtbUEseG1tSAkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1ECisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorLmNvbHVtbl9zdDE1OgorCW1vdgllYXgsZWN4CisJeG9yCWVjeCwgYnl0ZSAweDBGCisJc2hsCWVjeCwgMgorCW1vdmQJeG1tQixlY3gKKwlwc3JscQl4bW1ILDQKKwlwY21wZXFiCXhtbUUseG1tRQorCXBzcmxxCXhtbUgseG1tQgorCXBzcmxxCXhtbUUseG1tQgorCXB1bnBja2xidyB4bW1FLHhtbUgKKwk7IC0tLS0tLS0tLS0tLS0tLS0KKwltb3YJZWN4LGVkaQorCWFuZAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5hZGowCisJYWRkCWVheCxlY3gKKwljbXAJZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamEJc2hvcnQgLmFkajAKKwlhbmQJZWRpLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQorCXNobAllY3gsIDMJCQk7IHBzbGxkcSB4bW1BLGVjeCAmIHBzbGxkcSB4bW1FLGVjeAorCW1vdmRxYQl4bW1HLHhtbUEKKwltb3ZkcWEJeG1tQyx4bW1FCisJcHNsbGRxCXhtbUEsIFNJWkVPRl9YTU1XT1JELzIKKwlwc2xsZHEJeG1tRSwgU0laRU9GX1hNTVdPUkQvMgorCW1vdmQJeG1tRCxlY3gKKwlzdWIJZWN4LCBieXRlIChTSVpFT0ZfWE1NV09SRC8yKSpCWVRFX0JJVAorCWpiCXNob3J0IC5hZGoxCisJbW92ZAl4bW1GLGVjeAorCXBzbGxxCXhtbUEseG1tRgorCXBzbGxxCXhtbUUseG1tRgorCWptcAlzaG9ydCAuYWRqMAorLmFkajE6CW5lZwllY3gKKwltb3ZkCXhtbUYsZWN4CisJcHNybHEJeG1tQSx4bW1GCisJcHNybHEJeG1tRSx4bW1GCisJcHNsbHEJeG1tRyx4bW1ECisJcHNsbHEJeG1tQyx4bW1ECisJcG9yCXhtbUEseG1tRworCXBvcgl4bW1FLHhtbUMKKy5hZGowOgk7IC0tLS0tLS0tLS0tLS0tLS0KKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCislZWxzZSA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisJcGNtcGVxYiAgIHhtbTYseG1tNgkJOyB4bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKikKKwlwY21wZXFiICAgeG1tNyx4bW03CQk7IHhtbTc9WE89WCgxMzU3OUJERioqKioqKioqKQorJWVsc2UKKwlweG9yICAgICAgeG1tNix4bW02CQk7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorCXB4b3IgICAgICB4bW03LHhtbTcJCTsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCislZW5kaWYKKwk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKwk7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFICoqKSwgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgKiopCisKKwlwdW5wY2tsYncgeG1tQSx4bW1DCTsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCisJcHVucGNrbGJ3IHhtbUUseG1tRwk7IHhtbUU9KDIwIDMwIDIyIDMyIDI0IDM0IDI2IDM2IDI4IDM4IDJBIDNBIDJDIDNDIDJFIDNFKQorCXB1bnBja2xidyB4bW1CLHhtbUQJOyB4bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRikKKwlwdW5wY2tsYncgeG1tRix4bW1ICTsgeG1tRj0oMjEgMzEgMjMgMzMgMjUgMzUgMjcgMzcgMjkgMzkgMkIgM0IgMkQgM0QgMkYgM0YpCisKKwltb3ZkcWEgICAgeG1tQyx4bW1BCisJcHVucGNrbHdkIHhtbUEseG1tRQk7IHhtbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KQorCXB1bnBja2h3ZCB4bW1DLHhtbUUJOyB4bW1DPSgwOCAxOCAyOCAzOCAwQSAxQSAyQSAzQSAwQyAxQyAyQyAzQyAwRSAxRSAyRSAzRSkKKwltb3ZkcWEgICAgeG1tRyx4bW1CCisJcHVucGNrbHdkIHhtbUIseG1tRgk7IHhtbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3KQorCXB1bnBja2h3ZCB4bW1HLHhtbUYJOyB4bW1HPSgwOSAxOSAyOSAzOSAwQiAxQiAyQiAzQiAwRCAxRCAyRCAzRCAwRiAxRiAyRiAzRikKKworCW1vdmRxYSAgICB4bW1ELHhtbUEKKwlwdW5wY2tsZHEgeG1tQSx4bW1CCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJcHVucGNraGRxIHhtbUQseG1tQgk7IHhtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCW1vdmRxYSAgICB4bW1ILHhtbUMKKwlwdW5wY2tsZHEgeG1tQyx4bW1HCTsgeG1tQz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCisJcHVucGNraGRxIHhtbUgseG1tRwk7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QzMgorCisJdGVzdAllZGksIFNJWkVPRl9YTU1XT1JELTEKKwlqbnoJc2hvcnQgLm91dDEKKwk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1vdm50ZHEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKwltb3ZudGRxCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tQworCW1vdm50ZHEJWE1NV09SRCBbZWRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW1ICisJYWRkCWVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJam1wCXNob3J0IC5vdXQwCisub3V0MToJOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKwlwY21wZXFiICAgIHhtbUUseG1tRQkJCTsgeG1tRT0oYWxsIDEncykKKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUQseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUMseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQworCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUgseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tSAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKy5vdXQwOgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqegluZWFyIC5uZXh0cm93CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIwCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKKwlqbXAJbmVhciAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5fc3QzMjoKKwlwY21wZXFiCXhtbUUseG1tRQkJCTsgeG1tRT0oYWxsIDEncykKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKwlqYglzaG9ydCAuY29sdW1uX3N0MTYKKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUQseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1DCisJbW92ZHFhCXhtbUQseG1tSAorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMgorLmNvbHVtbl9zdDE2OgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1vdmRxYQl4bW1BLHhtbUQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKy5jb2x1bW5fc3QxNToKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzE2CisJamIJc2hvcnQgLm5leHRyb3cKKwltb3YJZWF4LGVjeAorCXhvcgllY3gsIGJ5dGUgMHgwMworCWluYwllY3gKKwlzaGwJZWN4LCA0CisJbW92ZAl4bW1GLGVjeAorCXBzcmxxCXhtbUUseG1tRgorCXB1bnBja2xidyB4bW1FLHhtbUUKKwk7IC0tLS0tLS0tLS0tLS0tLS0KKwltb3YJZWN4LGVkaQorCWFuZAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5hZGowCisJbGVhCWVheCwgW2VjeCtlYXgqNF0JOyBSR0JfUElYRUxTSVpFCisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCXNob3J0IC5hZGowCisJYW5kCWVkaSwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDE2LWJ5dGUgYm91bmRhcnkKKwlzaGwJZWN4LCAzCQkJOyBwc2xsZHEgeG1tQSxlY3ggJiBwc2xsZHEgeG1tRSxlY3gKKwltb3ZkcWEJeG1tQix4bW1BCisJbW92ZHFhCXhtbUcseG1tRQorCXBzbGxkcQl4bW1BLCBTSVpFT0ZfWE1NV09SRC8yCisJcHNsbGRxCXhtbUUsIFNJWkVPRl9YTU1XT1JELzIKKwltb3ZkCXhtbUMsZWN4CisJc3ViCWVjeCwgYnl0ZSAoU0laRU9GX1hNTVdPUkQvMikqQllURV9CSVQKKwlqYglzaG9ydCAuYWRqMQorCW1vdmQJeG1tSCxlY3gKKwlwc2xscQl4bW1BLHhtbUgKKwlwc2xscQl4bW1FLHhtbUgKKwlqbXAJc2hvcnQgLmFkajAKKy5hZGoxOgluZWcJZWN4CisJbW92ZAl4bW1ILGVjeAorCXBzcmxxCXhtbUEseG1tSAorCXBzcmxxCXhtbUUseG1tSAorCXBzbGxxCXhtbUIseG1tQworCXBzbGxxCXhtbUcseG1tQworCXBvcgl4bW1BLHhtbUIKKwlwb3IJeG1tRSx4bW1HCisuYWRqMDoJOyAtLS0tLS0tLS0tLS0tLS0tCisJbWFza21vdmRxdSB4bW1BLHhtbUUJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKworJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisJYWxpZ254CTE2LDcKKworLm5leHRyb3c6CisJcG9wCWVjeAorCXBvcAllc2kKKwlwb3AJZWJ4CisJcG9wCWVkeAorCXBvcAllZGkKKwlwb3AJZWF4CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWFkZAllYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9idWYKKwlkZWMJZWF4CQkJCTsgbnVtX3Jvd3MKKwlqZwluZWFyIC5yb3dsb29wCisKKwlzZmVuY2UJCTsgZmx1c2ggdGhlIHdyaXRlIGJ1ZmZlcgorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSkRDT0xPUl9ZQ0NSR0JfU1NFMl9TVVBQT1JURUQKKyVlbmRpZiA7IFJHQl9QSVhFTFNJWkUgPT0gMyB8fCBSR0JfUElYRUxTSVpFID09IDQKZGlmZiAtLWdpdCBhL2pkY3QuaCBiL2pkY3QuaAppbmRleCAwNDE5MmEyLi42NzhhM2QxIDEwMDY0NAotLS0gYS9qZGN0LmgKKysrIGIvamRjdC5oCkBAIC01LDYgKzUsMTMgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgZm9yIFNJTUQgZXh0ZW5zaW9uLgorICogTGFzdCBNb2RpZmllZCA6IEphbnVhcnkgNSwgMjAwNgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgogICogVGhpcyBpbmNsdWRlIGZpbGUgY29udGFpbnMgY29tbW9uIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGZvcndhcmQgYW5kCiAgKiBpbnZlcnNlIERDVCBtb2R1bGVzLiAgVGhlc2UgZGVjbGFyYXRpb25zIGFyZSBwcml2YXRlIHRvIHRoZSBEQ1QgbWFuYWdlcnMKICAqIChqY2RjdG1nci5jLCBqZGRjdG1nci5jKSBhbmQgdGhlIGluZGl2aWR1YWwgRENUIGFsZ29yaXRobXMuCkBAIC0xMyw2ICsyMCwxMyBAQAogICovCiAKIAorLyogU0lNRCBFeHQ6IGNvbmZpZ3VyYXRpb24gY2hlY2sgKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSAhPSA4CisjZXJyb3IgIlNvcnJ5LCB0aGlzIFNJTUQgY29kZSBvbmx5IGNvcGVzIHdpdGggOC1iaXQgc2FtcGxlIHZhbHVlcy4iCisjZW5kaWYKKworCiAvKgogICogQSBmb3J3YXJkIERDVCByb3V0aW5lIGlzIGdpdmVuIGEgcG9pbnRlciB0byBhIHdvcmsgYXJlYSBvZiB0eXBlIERDVEVMRU1bXTsKICAqIHRoZSBEQ1QgaXMgdG8gYmUgcGVyZm9ybWVkIGluLXBsYWNlIGluIHRoYXQgYnVmZmVyLiAgVHlwZSBEQ1RFTEVNIGlzIGludApAQCAtMjYsMTQgKzQwLDI1IEBACiAgKiBRdWFudGl6YXRpb24gb2YgdGhlIG91dHB1dCBjb2VmZmljaWVudHMgaXMgZG9uZSBieSBqY2RjdG1nci5jLgogICovCiAKLSNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAotdHlwZWRlZiBpbnQgRENURUxFTTsJCS8qIDE2IG9yIDMyIGJpdHMgaXMgZmluZSAqLwotI2Vsc2UKLXR5cGVkZWYgSU5UMzIgRENURUxFTTsJCS8qIG11c3QgaGF2ZSAzMiBiaXRzICovCi0jZW5kaWYKKy8qIFNJTUQgRXh0OiBUbyBtYXhpbWl6ZSBwYXJhbGxlbGlzbSwgVHlwZSBEQ1RFTEVNIGlzIGNoYW5nZWQgdG8gc2hvcnQKKyAqIChvcmlnaW5hbGx5LCBpbnQpLgorICovCit0eXBlZGVmIHNob3J0IERDVEVMRU07CQkvKiBTSU1EIEV4dDogbXVzdCBiZSBzaG9ydCAqLwogCiB0eXBlZGVmIEpNRVRIT0Qodm9pZCwgZm9yd2FyZF9EQ1RfbWV0aG9kX3B0ciwgKERDVEVMRU0gKiBkYXRhKSk7CiB0eXBlZGVmIEpNRVRIT0Qodm9pZCwgZmxvYXRfRENUX21ldGhvZF9wdHIsIChGQVNUX0ZMT0FUICogZGF0YSkpOwordHlwZWRlZiBKTUVUSE9EKHZvaWQsIGNvbnZzYW1wX2ludF9tZXRob2RfcHRyLAorCQkoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisJCSBEQ1RFTEVNICogd29ya3NwYWNlKSk7Cit0eXBlZGVmIEpNRVRIT0Qodm9pZCwgY29udnNhbXBfZmxvYXRfbWV0aG9kX3B0ciwKKwkJKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorCQkgRkFTVF9GTE9BVCAqd29ya3NwYWNlKSk7Cit0eXBlZGVmIEpNRVRIT0Qodm9pZCwgcXVhbnRpemVfaW50X21ldGhvZF9wdHIsCisJCShKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICogZGl2aXNvcnMsCisJCSBEQ1RFTEVNICogd29ya3NwYWNlKSk7Cit0eXBlZGVmIEpNRVRIT0Qodm9pZCwgcXVhbnRpemVfZmxvYXRfbWV0aG9kX3B0ciwKKwkJKEpDT0VGUFRSIGNvZWZfYmxvY2ssIEZBU1RfRkxPQVQgKiBkaXZpc29ycywKKwkJIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpKTsKIAogCiAvKgpAQCAtNDksMTkgKzc0LDIyIEBACiAKIC8qIHR5cGVkZWYgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBpcyBkZWNsYXJlZCBpbiBqcGVnaW50LmggKi8KIAorLyogU0lNRCBFeHQ6IFRvIG1heGltaXplIHBhcmFsbGVsaXNtLCBUeXBlIE1VTFRJUExJRVIgaXMgY2hhbmdlZCB0byBzaG9ydC4KKyAqIE1hY3JvIGRlZmluaXRpb25zIG9mIE1VTFRJUExJRVIgYW5kIEZBU1RfRkxPQVQgaW4gam1vcmVjZmcuaCBhcmUgaWdub3JlZC4KKyAqLworI3VuZGVmIE1VTFRJUExJRVIKKyNkZWZpbmUgTVVMVElQTElFUiAgc2hvcnQJLyogU0lNRCBFeHQ6IG11c3QgYmUgc2hvcnQgKi8KKyN1bmRlZiBGQVNUX0ZMT0FUCisjZGVmaW5lIEZBU1RfRkxPQVQgIGZsb2F0CS8qIFNJTUQgRXh0OiBtdXN0IGJlIGZsb2F0ICovCisKIC8qCiAgKiBFYWNoIElEQ1Qgcm91dGluZSBoYXMgaXRzIG93biBpZGVhcyBhYm91dCB0aGUgYmVzdCBkY3RfdGFibGUgZWxlbWVudCB0eXBlLgogICovCiAKLXR5cGVkZWYgTVVMVElQTElFUiBJU0xPV19NVUxUX1RZUEU7IC8qIHNob3J0IG9yIGludCwgd2hpY2hldmVyIGlzIGZhc3RlciAqLwotI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4Ci10eXBlZGVmIE1VTFRJUExJRVIgSUZBU1RfTVVMVF9UWVBFOyAvKiAxNiBiaXRzIGlzIE9LLCB1c2Ugc2hvcnQgaWYgZmFzdGVyICovCit0eXBlZGVmIE1VTFRJUExJRVIgSVNMT1dfTVVMVF9UWVBFOwkvKiBTSU1EIEV4dDogbXVzdCBiZSBzaG9ydCAqLwordHlwZWRlZiBNVUxUSVBMSUVSIElGQVNUX01VTFRfVFlQRTsJLyogU0lNRCBFeHQ6IG11c3QgYmUgc2hvcnQgKi8KICNkZWZpbmUgSUZBU1RfU0NBTEVfQklUUyAgMgkvKiBmcmFjdGlvbmFsIGJpdHMgaW4gc2NhbGUgZmFjdG9ycyAqLwotI2Vsc2UKLXR5cGVkZWYgSU5UMzIgSUZBU1RfTVVMVF9UWVBFOwkvKiBuZWVkIDMyIGJpdHMgZm9yIHNjYWxlZCBxdWFudGl6ZXJzICovCi0jZGVmaW5lIElGQVNUX1NDQUxFX0JJVFMgIDEzCS8qIGZyYWN0aW9uYWwgYml0cyBpbiBzY2FsZSBmYWN0b3JzICovCi0jZW5kaWYKLXR5cGVkZWYgRkFTVF9GTE9BVCBGTE9BVF9NVUxUX1RZUEU7IC8qIHByZWZlcnJlZCBmbG9hdGluZyB0eXBlICovCit0eXBlZGVmIEZBU1RfRkxPQVQgRkxPQVRfTVVMVF9UWVBFOwkvKiBTSU1EIEV4dDogbXVzdCBiZSBmbG9hdCAqLwogCiAKIC8qCkBAIC04MSwxNSArMTA5LDY0IEBACiAvKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8KIAogI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKLSNkZWZpbmUganBlZ19mZGN0X2lzbG93CQlqRkRpc2xvdwotI2RlZmluZSBqcGVnX2ZkY3RfaWZhc3QJCWpGRGlmYXN0Ci0jZGVmaW5lIGpwZWdfZmRjdF9mbG9hdAkJakZEZmxvYXQKLSNkZWZpbmUganBlZ19pZGN0X2lzbG93CQlqUkRpc2xvdwotI2RlZmluZSBqcGVnX2lkY3RfaWZhc3QJCWpSRGlmYXN0Ci0jZGVmaW5lIGpwZWdfaWRjdF9mbG9hdAkJalJEZmxvYXQKLSNkZWZpbmUganBlZ19pZGN0XzR4NAkJalJENHg0Ci0jZGVmaW5lIGpwZWdfaWRjdF8yeDIJCWpSRDJ4MgotI2RlZmluZSBqcGVnX2lkY3RfMXgxCQlqUkQxeDEKKyNkZWZpbmUganBlZ19mZGN0X2lzbG93CQlqRkRpc2xvdwkJLyogamZkY3RpbnQuYXNtICovCisjZGVmaW5lIGpwZWdfZmRjdF9pZmFzdAkJakZEaWZhc3QJCS8qIGpmZGN0ZnN0LmFzbSAqLworI2RlZmluZSBqcGVnX2ZkY3RfZmxvYXQJCWpGRGZsb2F0CQkvKiBqZmRjdGZsdC5hc20gKi8KKyNkZWZpbmUganBlZ19mZGN0X2lzbG93X21teAlqRkRNaXNsb3cJCS8qIGpmbW14aW50LmFzbSAqLworI2RlZmluZSBqcGVnX2ZkY3RfaWZhc3RfbW14CWpGRE1pZmFzdAkJLyogamZtbXhmc3QuYXNtICovCisjZGVmaW5lIGpwZWdfZmRjdF9mbG9hdF8zZG5vdwlqRkQzZmxvYXQJCS8qIGpmM2RuZmx0LmFzbSAqLworI2RlZmluZSBqcGVnX2ZkY3RfaXNsb3dfc3NlMglqRkRTaXNsb3cJCS8qIGpmc3MyaW50LmFzbSAqLworI2RlZmluZSBqcGVnX2ZkY3RfaWZhc3Rfc3NlMglqRkRTaWZhc3QJCS8qIGpmc3MyZnN0LmFzbSAqLworI2RlZmluZSBqcGVnX2ZkY3RfZmxvYXRfc3NlCWpGRFNmbG9hdAkJLyogamZzc2VmbHQuYXNtICovCisjZGVmaW5lIGpwZWdfY29udnNhbXBfaW50CWpDbnZJbnQJCQkvKiBqY3FudGludC5hc20gKi8KKyNkZWZpbmUganBlZ19xdWFudGl6ZV9pbnQJalFudEludAkJCS8qIGpjcW50aW50LmFzbSAqLworI2RlZmluZSBqcGVnX3F1YW50aXplX2lkaXYJalFudElEaXYJCS8qIGpjcW50aW50LmFzbSAqLworI2RlZmluZSBqcGVnX2NvbnZzYW1wX2Zsb2F0CWpDbnZGbG9hdAkJLyogamNxbnRmbHQuYXNtICovCisjZGVmaW5lIGpwZWdfcXVhbnRpemVfZmxvYXQJalFudEZsb2F0CQkvKiBqY3FudGZsdC5hc20gKi8KKyNkZWZpbmUganBlZ19jb252c2FtcF9pbnRfbW14CWpDbnZNbXgJCQkvKiBqY3FudG1teC5hc20gKi8KKyNkZWZpbmUganBlZ19xdWFudGl6ZV9pbnRfbW14CWpRbnRNbXgJCQkvKiBqY3FudG1teC5hc20gKi8KKyNkZWZpbmUganBlZ19jb252c2FtcF9mbHRfM2Rub3cJakNudjNkbm93CQkvKiBqY3FudDNkbi5hc20gKi8KKyNkZWZpbmUganBlZ19xdWFudGl6ZV9mbHRfM2Rub3cJalFudDNkbm93CQkvKiBqY3FudDNkbi5hc20gKi8KKyNkZWZpbmUganBlZ19jb252c2FtcF9pbnRfc3NlMglqQ252SVNzZTIJCS8qIGpjcW50czJpLmFzbSAqLworI2RlZmluZSBqcGVnX3F1YW50aXplX2ludF9zc2UyCWpRbnRJU3NlMgkJLyogamNxbnRzMmkuYXNtICovCisjZGVmaW5lIGpwZWdfY29udnNhbXBfZmx0X3NzZQlqQ252U3NlCQkJLyogamNxbnRzc2UuYXNtICovCisjZGVmaW5lIGpwZWdfcXVhbnRpemVfZmx0X3NzZQlqUW50U3NlCQkJLyogamNxbnRzc2UuYXNtICovCisjZGVmaW5lIGpwZWdfY29udnNhbXBfZmx0X3NzZTIJakNudkZTc2UyCQkvKiBqY3FudHMyZi5hc20gKi8KKyNkZWZpbmUganBlZ19xdWFudGl6ZV9mbHRfc3NlMglqUW50RlNzZTIJCS8qIGpjcW50czJmLmFzbSAqLworI2RlZmluZSBqcGVnX2lkY3RfaXNsb3cJCWpSRGlzbG93CQkvKiBqaWRjdGludC5hc20gKi8KKyNkZWZpbmUganBlZ19pZGN0X2lmYXN0CQlqUkRpZmFzdAkJLyogamlkY3Rmc3QuYXNtICovCisjZGVmaW5lIGpwZWdfaWRjdF9mbG9hdAkJalJEZmxvYXQJCS8qIGppZGN0Zmx0LmFzbSAqLworI2RlZmluZSBqcGVnX2lkY3RfNHg0CQlqUkQ0eDQJCQkvKiBqaWRjdHJlZC5hc20gKi8KKyNkZWZpbmUganBlZ19pZGN0XzJ4MgkJalJEMngyCQkJLyogamlkY3RyZWQuYXNtICovCisjZGVmaW5lIGpwZWdfaWRjdF8xeDEJCWpSRDF4MQkJCS8qIGppZGN0cmVkLmFzbSAqLworI2RlZmluZSBqcGVnX2lkY3RfaXNsb3dfbW14CWpSRE1pc2xvdwkJLyogamltbXhpbnQuYXNtICovCisjZGVmaW5lIGpwZWdfaWRjdF9pZmFzdF9tbXgJalJETWlmYXN0CQkvKiBqaW1teGZzdC5hc20gKi8KKyNkZWZpbmUganBlZ19pZGN0X2Zsb2F0XzNkbm93CWpSRDNmbG9hdAkJLyogamkzZG5mbHQuYXNtICovCisjZGVmaW5lIGpwZWdfaWRjdF80eDRfbW14CWpSRE00eDQJCQkvKiBqaW1teHJlZC5hc20gKi8KKyNkZWZpbmUganBlZ19pZGN0XzJ4Ml9tbXgJalJETTJ4MgkJCS8qIGppbW14cmVkLmFzbSAqLworI2RlZmluZSBqcGVnX2lkY3RfaXNsb3dfc3NlMglqUkRTaXNsb3cJCS8qIGppc3MyaW50LmFzbSAqLworI2RlZmluZSBqcGVnX2lkY3RfaWZhc3Rfc3NlMglqUkRTaWZhc3QJCS8qIGppc3MyZnN0LmFzbSAqLworI2RlZmluZSBqcGVnX2lkY3RfZmxvYXRfc3NlCWpSRFNmbG9hdAkJLyogamlzc2VmbHQuYXNtICovCisjZGVmaW5lIGpwZWdfaWRjdF9mbG9hdF9zc2UyCWpSRDJmbG9hdAkJLyogamlzczJmbHQuYXNtICovCisjZGVmaW5lIGpwZWdfaWRjdF80eDRfc3NlMglqUkRTNHg0CQkJLyogamlzczJyZWQuYXNtICovCisjZGVmaW5lIGpwZWdfaWRjdF8yeDJfc3NlMglqUkRTMngyCQkJLyogamlzczJyZWQuYXNtICovCisjZGVmaW5lIGpjb25zdF9mZGN0X2Zsb2F0CWpGQ2Zsb2F0CQkvKiBqZmRjdGZsdC5hc20gKi8KKyNkZWZpbmUgamNvbnN0X2ZkY3RfaXNsb3dfbW14CWpGQ01pc2xvdwkJLyogamZtbXhpbnQuYXNtICovCisjZGVmaW5lIGpjb25zdF9mZGN0X2lmYXN0X21teAlqRkNNaWZhc3QJCS8qIGpmbW14ZnN0LmFzbSAqLworI2RlZmluZSBqY29uc3RfZmRjdF9mbG9hdF8zZG5vdwlqRkMzZmxvYXQJCS8qIGpmM2RuZmx0LmFzbSAqLworI2RlZmluZSBqY29uc3RfZmRjdF9pc2xvd19zc2UyCWpGQ1Npc2xvdwkJLyogamZzczJpbnQuYXNtICovCisjZGVmaW5lIGpjb25zdF9mZGN0X2lmYXN0X3NzZTIJakZDU2lmYXN0CQkvKiBqZnNzMmZzdC5hc20gKi8KKyNkZWZpbmUgamNvbnN0X2ZkY3RfZmxvYXRfc3NlCWpGQ1NmbG9hdAkJLyogamZzc2VmbHQuYXNtICovCisjZGVmaW5lIGpjb25zdF9pZGN0X2Zsb2F0CWpSQ2Zsb2F0CQkvKiBqaWRjdGZsdC5hc20gKi8KKyNkZWZpbmUgamNvbnN0X2lkY3RfaXNsb3dfbW14CWpSQ01pc2xvdwkJLyogamltbXhpbnQuYXNtICovCisjZGVmaW5lIGpjb25zdF9pZGN0X2lmYXN0X21teAlqUkNNaWZhc3QJCS8qIGppbW14ZnN0LmFzbSAqLworI2RlZmluZSBqY29uc3RfaWRjdF9mbG9hdF8zZG5vdwlqUkMzZmxvYXQJCS8qIGppM2RuZmx0LmFzbSAqLworI2RlZmluZSBqY29uc3RfaWRjdF9yZWRfbW14CWpSQ01yZWQJCQkvKiBqaW1teHJlZC5hc20gKi8KKyNkZWZpbmUgamNvbnN0X2lkY3RfaXNsb3dfc3NlMglqUkNTaXNsb3cJCS8qIGppc3MyaW50LmFzbSAqLworI2RlZmluZSBqY29uc3RfaWRjdF9pZmFzdF9zc2UyCWpSQ1NpZmFzdAkJLyogamlzczJmc3QuYXNtICovCisjZGVmaW5lIGpjb25zdF9pZGN0X2Zsb2F0X3NzZQlqUkNTZmxvYXQJCS8qIGppc3NlZmx0LmFzbSAqLworI2RlZmluZSBqY29uc3RfaWRjdF9mbG9hdF9zc2UyCWpSQzJmbG9hdAkJLyogamlzczJmbHQuYXNtICovCisjZGVmaW5lIGpjb25zdF9pZGN0X3JlZF9zc2UyCWpSQ1NyZWQJCQkvKiBqaXNzMnJlZC5hc20gKi8KICNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCiAKIC8qIEV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBmb3J3YXJkIGFuZCBpbnZlcnNlIERDVCByb3V0aW5lcy4gKi8KQEAgLTk4LDYgKzE3NSw0NyBAQAogRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9pZmFzdCBKUFAoKERDVEVMRU0gKiBkYXRhKSk7CiBFWFRFUk4odm9pZCkganBlZ19mZGN0X2Zsb2F0IEpQUCgoRkFTVF9GTE9BVCAqIGRhdGEpKTsKIAorRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9pc2xvd19tbXggSlBQKChEQ1RFTEVNICogZGF0YSkpOworRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9pZmFzdF9tbXggSlBQKChEQ1RFTEVNICogZGF0YSkpOworRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9mbG9hdF8zZG5vdyBKUFAoKEZBU1RfRkxPQVQgKiBkYXRhKSk7CisKK0VYVEVSTih2b2lkKSBqcGVnX2ZkY3RfaXNsb3dfc3NlMiBKUFAoKERDVEVMRU0gKiBkYXRhKSk7CitFWFRFUk4odm9pZCkganBlZ19mZGN0X2lmYXN0X3NzZTIgSlBQKChEQ1RFTEVNICogZGF0YSkpOworRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9mbG9hdF9zc2UgSlBQKChGQVNUX0ZMT0FUICogZGF0YSkpOworCitFWFRFUk4odm9pZCkganBlZ19jb252c2FtcF9pbnQKKyAgICBKUFAoKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLCBEQ1RFTEVNICogd29ya3NwYWNlKSk7CitFWFRFUk4odm9pZCkganBlZ19xdWFudGl6ZV9pbnQKKyAgICBKUFAoKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKiBkaXZpc29ycywgRENURUxFTSAqIHdvcmtzcGFjZSkpOworRVhURVJOKHZvaWQpIGpwZWdfcXVhbnRpemVfaWRpdgorICAgIEpQUCgoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqIGRpdmlzb3JzLCBEQ1RFTEVNICogd29ya3NwYWNlKSk7CitFWFRFUk4odm9pZCkganBlZ19jb252c2FtcF9mbG9hdAorICAgIEpQUCgoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsIEZBU1RfRkxPQVQgKndvcmtzcGFjZSkpOworRVhURVJOKHZvaWQpIGpwZWdfcXVhbnRpemVfZmxvYXQKKyAgICBKUFAoKEpDT0VGUFRSIGNvZWZfYmxvY2ssIEZBU1RfRkxPQVQgKiBkaXZpc29ycywgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSkpOworCitFWFRFUk4odm9pZCkganBlZ19jb252c2FtcF9pbnRfbW14CisgICAgSlBQKChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwgRENURUxFTSAqIHdvcmtzcGFjZSkpOworRVhURVJOKHZvaWQpIGpwZWdfcXVhbnRpemVfaW50X21teAorICAgIEpQUCgoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqIGRpdmlzb3JzLCBEQ1RFTEVNICogd29ya3NwYWNlKSk7CitFWFRFUk4odm9pZCkganBlZ19jb252c2FtcF9mbHRfM2Rub3cKKyAgICBKUFAoKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLCBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpKTsKK0VYVEVSTih2b2lkKSBqcGVnX3F1YW50aXplX2ZsdF8zZG5vdworICAgIEpQUCgoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLCBGQVNUX0ZMT0FUICogd29ya3NwYWNlKSk7CisKK0VYVEVSTih2b2lkKSBqcGVnX2NvbnZzYW1wX2ludF9zc2UyCisgICAgSlBQKChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwgRENURUxFTSAqIHdvcmtzcGFjZSkpOworRVhURVJOKHZvaWQpIGpwZWdfcXVhbnRpemVfaW50X3NzZTIKKyAgICBKUFAoKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKiBkaXZpc29ycywgRENURUxFTSAqIHdvcmtzcGFjZSkpOworRVhURVJOKHZvaWQpIGpwZWdfY29udnNhbXBfZmx0X3NzZQorICAgIEpQUCgoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsIEZBU1RfRkxPQVQgKndvcmtzcGFjZSkpOworRVhURVJOKHZvaWQpIGpwZWdfcXVhbnRpemVfZmx0X3NzZQorICAgIEpQUCgoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLCBGQVNUX0ZMT0FUICogd29ya3NwYWNlKSk7CitFWFRFUk4odm9pZCkganBlZ19jb252c2FtcF9mbHRfc3NlMgorICAgIEpQUCgoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsIEZBU1RfRkxPQVQgKndvcmtzcGFjZSkpOworRVhURVJOKHZvaWQpIGpwZWdfcXVhbnRpemVfZmx0X3NzZTIKKyAgICBKUFAoKEpDT0VGUFRSIGNvZWZfYmxvY2ssIEZBU1RfRkxPQVQgKiBkaXZpc29ycywgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSkpOworCiBFWFRFUk4odm9pZCkganBlZ19pZGN0X2lzbG93CiAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKIAkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKQEAgLTExNyw2ICsyMzUsNjAgQEAKICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAogCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwogCitFWFRFUk4odm9pZCkganBlZ19pZGN0X2lzbG93X21teAorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0X2lmYXN0X21teAorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0XzR4NF9tbXgKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8yeDJfbW14CisgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKKworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF9mbG9hdF8zZG5vdworICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0X2Zsb2F0X3NzZQorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0X2Zsb2F0X3NzZTIKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworCitFWFRFUk4odm9pZCkganBlZ19pZGN0X2lzbG93X3NzZTIKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF9pZmFzdF9zc2UyCisgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2lkY3RfNHg0X3NzZTIKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8yeDJfc3NlMgorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2ZkY3RfZmxvYXRbXTsKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2ZkY3RfaXNsb3dfbW14W107CitleHRlcm4gY29uc3QgaW50IGpjb25zdF9mZGN0X2lmYXN0X21teFtdOworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfZmRjdF9mbG9hdF8zZG5vd1tdOworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfZmRjdF9pc2xvd19zc2UyW107CitleHRlcm4gY29uc3QgaW50IGpjb25zdF9mZGN0X2lmYXN0X3NzZTJbXTsKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2ZkY3RfZmxvYXRfc3NlW107CitleHRlcm4gY29uc3QgaW50IGpjb25zdF9pZGN0X2Zsb2F0W107CitleHRlcm4gY29uc3QgaW50IGpjb25zdF9pZGN0X2lzbG93X21teFtdOworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfaWRjdF9pZmFzdF9tbXhbXTsKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2lkY3RfZmxvYXRfM2Rub3dbXTsKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2lkY3RfcmVkX21teFtdOworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfaWRjdF9pc2xvd19zc2UyW107CitleHRlcm4gY29uc3QgaW50IGpjb25zdF9pZGN0X2lmYXN0X3NzZTJbXTsKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2lkY3RfZmxvYXRfc3NlW107CitleHRlcm4gY29uc3QgaW50IGpjb25zdF9pZGN0X2Zsb2F0X3NzZTJbXTsKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2lkY3RfcmVkX3NzZTJbXTsKKwogCiAvKgogICogTWFjcm9zIGZvciBoYW5kbGluZyBmaXhlZC1wb2ludCBhcml0aG1ldGljOyB0aGVzZSBhcmUgdXNlZCBieSBtYW55CmRpZmYgLS1naXQgYS9qZGN0LmluYyBiL2pkY3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZmIwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qZGN0LmluYwpAQCAtMCwwICsxLDEyNSBAQAorOworOyBqZGN0LmluYyAtIHByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBmb3J3YXJkICYgcmV2ZXJzZSBEQ1Qgc3Vic3lzdGVtcworOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBMYXN0IE1vZGlmaWVkIDogSmFudWFyeSA1LCAyMDA2Cis7Cis7IFtUQUI4XQorCis7IC0tLS0gamRjdC5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IGNvbmZpZ3VyYXRpb24gY2hlY2s6IEJJVFNfSU5fSlNBTVBMRT09OCAoOC1iaXQgc2FtcGxlIHZhbHVlcykgaXMgdGhlIG9ubHkKKzsgdmFsaWQgc2V0dGluZyBvbiB0aGlzIFNJTUQgZXh0ZW5zaW9uLgorOworJWlmIEJJVFNfSU5fSlNBTVBMRSAhPSA4CislZXJyb3IgIlNvcnJ5LCB0aGlzIFNJTUQgY29kZSBvbmx5IGNvcGVzIHdpdGggOC1iaXQgc2FtcGxlIHZhbHVlcy4iCislZW5kaWYKKworOyBBIGZvcndhcmQgRENUIHJvdXRpbmUgaXMgZ2l2ZW4gYSBwb2ludGVyIHRvIGEgd29yayBhcmVhIG9mIHR5cGUgRENURUxFTVtdOworOyB0aGUgRENUIGlzIHRvIGJlIHBlcmZvcm1lZCBpbi1wbGFjZSBpbiB0aGF0IGJ1ZmZlci4KKzsgVG8gbWF4aW1pemUgcGFyYWxsZWxpc20sIFR5cGUgRENURUxFTSBpcyBjaGFuZ2VkIHRvIHNob3J0IChvcmlnaW5hbGx5LCBpbnQpLgorOworJWRlZmluZSBEQ1RFTEVNCQkJd29yZAkJOyBzaG9ydAorJWRlZmluZSBTSVpFT0ZfRENURUxFTQkJU0laRU9GX1dPUkQJOyBzaXplb2YoRENURUxFTSkKKworOyBUbyBtYXhpbWl6ZSBwYXJhbGxlbGlzbSwgVHlwZSBNVUxUSVBMSUVSIGlzIGNoYW5nZWQgdG8gc2hvcnQuCis7CislZGVmaW5lIE1VTFRJUExJRVIJCXdvcmQJCTsgc2hvcnQKKyVkZWZpbmUgU0laRU9GX01VTFRJUExJRVIJU0laRU9GX1dPUkQJOyBzaXplb2YoTVVMVElQTElFUikKKyVkZWZpbmUgRkFTVF9GTE9BVAkJRlAzMgkJOyBmbG9hdAorJWRlZmluZSBTSVpFT0ZfRkFTVF9GTE9BVAlTSVpFT0ZfRlAzMgk7IHNpemVvZihGQVNUX0ZMT0FUKQorCis7IEVhY2ggSURDVCByb3V0aW5lIGhhcyBpdHMgb3duIGlkZWFzIGFib3V0IHRoZSBiZXN0IGRjdF90YWJsZSBlbGVtZW50IHR5cGUuCis7CislZGVmaW5lIElTTE9XX01VTFRfVFlQRSAJTVVMVElQTElFUiAgICAgICAgICA7IG11c3QgYmUgc2hvcnQKKyVkZWZpbmUgU0laRU9GX0lTTE9XX01VTFRfVFlQRQlTSVpFT0ZfTVVMVElQTElFUiAgIDsgc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkKKyVkZWZpbmUgSUZBU1RfTVVMVF9UWVBFIAlNVUxUSVBMSUVSICAgICAgICAgIDsgbXVzdCBiZSBzaG9ydAorJWRlZmluZSBTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFCVNJWkVPRl9NVUxUSVBMSUVSICAgOyBzaXplb2YoSUZBU1RfTVVMVF9UWVBFKQorJWRlZmluZSBJRkFTVF9TQ0FMRV9CSVRTCTIJOyBmcmFjdGlvbmFsIGJpdHMgaW4gc2NhbGUgZmFjdG9ycworJWRlZmluZSBGTE9BVF9NVUxUX1RZUEUgCUZBU1RfRkxPQVQgICAgICAgICAgOyBtdXN0IGJlIGZsb2F0CislZGVmaW5lIFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUJU0laRU9GX0ZBU1RfRkxPQVQgICA7IHNpemVvZihGTE9BVF9NVUxUX1RZUEUpCisKKzsgRWFjaCBJRENUIHJvdXRpbmUgaXMgcmVzcG9uc2libGUgZm9yIHJhbmdlLWxpbWl0aW5nIGl0cyByZXN1bHRzIGFuZAorOyBjb252ZXJ0aW5nIHRoZW0gdG8gdW5zaWduZWQgZm9ybSAoMC4uTUFYSlNBTVBMRSkuICBUaGUgcmF3IG91dHB1dHMgY291bGQKKzsgYmUgcXVpdGUgZmFyIG91dCBvZiByYW5nZSBpZiB0aGUgaW5wdXQgZGF0YSBpcyBjb3JydXB0LCBzbyBhIGJ1bGxldHByb29mCis7IHJhbmdlLWxpbWl0aW5nIHN0ZXAgaXMgcmVxdWlyZWQuICBXZSB1c2UgYSBtYXNrLWFuZC10YWJsZS1sb29rdXAgbWV0aG9kCis7IHRvIGRvIHRoZSBjb21iaW5lZCBvcGVyYXRpb25zIHF1aWNrbHkuCis7CislZGVmaW5lIFJBTkdFX01BU0sgIChNQVhKU0FNUExFICogNCArIDMpICA7IDIgYml0cyB3aWRlciB0aGFuIGxlZ2FsIHNhbXBsZXMKKworOyBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4KKzsKKyVpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCislZGVmaW5lIGpwZWdfZmRjdF9pc2xvdwkJakZEaXNsb3cJOyBqZmRjdGludC5hc20KKyVkZWZpbmUganBlZ19mZGN0X2lmYXN0CQlqRkRpZmFzdAk7IGpmZGN0ZnN0LmFzbQorJWRlZmluZSBqcGVnX2ZkY3RfZmxvYXQJCWpGRGZsb2F0CTsgamZkY3RmbHQuYXNtCislZGVmaW5lIGpwZWdfZmRjdF9pc2xvd19tbXgJakZETWlzbG93CTsgamZtbXhpbnQuYXNtCislZGVmaW5lIGpwZWdfZmRjdF9pZmFzdF9tbXgJakZETWlmYXN0CTsgamZtbXhmc3QuYXNtCislZGVmaW5lIGpwZWdfZmRjdF9mbG9hdF8zZG5vdwlqRkQzZmxvYXQJOyBqZjNkbmZsdC5hc20KKyVkZWZpbmUganBlZ19mZGN0X2lzbG93X3NzZTIJakZEU2lzbG93CTsgamZzczJpbnQuYXNtCislZGVmaW5lIGpwZWdfZmRjdF9pZmFzdF9zc2UyCWpGRFNpZmFzdAk7IGpmc3MyZnN0LmFzbQorJWRlZmluZSBqcGVnX2ZkY3RfZmxvYXRfc3NlCWpGRFNmbG9hdAk7IGpmc3NlZmx0LmFzbQorJWRlZmluZSBqcGVnX2NvbnZzYW1wX2ludAlqQ252SW50CQk7IGpjcW50aW50LmFzbQorJWRlZmluZSBqcGVnX3F1YW50aXplX2ludAlqUW50SW50CQk7IGpjcW50aW50LmFzbQorJWRlZmluZSBqcGVnX3F1YW50aXplX2lkaXYJalFudElEaXYJOyBqY3FudGludC5hc20KKyVkZWZpbmUganBlZ19jb252c2FtcF9mbG9hdAlqQ252RmxvYXQJOyBqY3FudGZsdC5hc20KKyVkZWZpbmUganBlZ19xdWFudGl6ZV9mbG9hdAlqUW50RmxvYXQJOyBqY3FudGZsdC5hc20KKyVkZWZpbmUganBlZ19jb252c2FtcF9pbnRfbW14CWpDbnZNbXgJCTsgamNxbnRtbXguYXNtCislZGVmaW5lIGpwZWdfcXVhbnRpemVfaW50X21teAlqUW50TW14CQk7IGpjcW50bW14LmFzbQorJWRlZmluZSBqcGVnX2NvbnZzYW1wX2ZsdF8zZG5vdwlqQ252M2Rub3cJOyBqY3FudDNkbi5hc20KKyVkZWZpbmUganBlZ19xdWFudGl6ZV9mbHRfM2Rub3cJalFudDNkbm93CTsgamNxbnQzZG4uYXNtCislZGVmaW5lIGpwZWdfY29udnNhbXBfaW50X3NzZTIJakNudklTc2UyCTsgamNxbnRzMmkuYXNtCislZGVmaW5lIGpwZWdfcXVhbnRpemVfaW50X3NzZTIJalFudElTc2UyCTsgamNxbnRzMmkuYXNtCislZGVmaW5lIGpwZWdfY29udnNhbXBfZmx0X3NzZQlqQ252U3NlCQk7IGpjcW50c3NlLmFzbQorJWRlZmluZSBqcGVnX3F1YW50aXplX2ZsdF9zc2UJalFudFNzZQkJOyBqY3FudHNzZS5hc20KKyVkZWZpbmUganBlZ19jb252c2FtcF9mbHRfc3NlMglqQ252RlNzZTIJOyBqY3FudHMyZi5hc20KKyVkZWZpbmUganBlZ19xdWFudGl6ZV9mbHRfc3NlMglqUW50RlNzZTIJOyBqY3FudHMyZi5hc20KKyVkZWZpbmUganBlZ19pZGN0X2lzbG93CQlqUkRpc2xvdwk7IGppZGN0aW50LmFzbQorJWRlZmluZSBqcGVnX2lkY3RfaWZhc3QJCWpSRGlmYXN0CTsgamlkY3Rmc3QuYXNtCislZGVmaW5lIGpwZWdfaWRjdF9mbG9hdAkJalJEZmxvYXQJOyBqaWRjdGZsdC5hc20KKyVkZWZpbmUganBlZ19pZGN0XzR4NAkJalJENHg0CQk7IGppZGN0cmVkLmFzbQorJWRlZmluZSBqcGVnX2lkY3RfMngyCQlqUkQyeDIJCTsgamlkY3RyZWQuYXNtCislZGVmaW5lIGpwZWdfaWRjdF8xeDEJCWpSRDF4MQkJOyBqaWRjdHJlZC5hc20KKyVkZWZpbmUganBlZ19pZGN0X2lzbG93X21teAlqUkRNaXNsb3cJOyBqaW1teGludC5hc20KKyVkZWZpbmUganBlZ19pZGN0X2lmYXN0X21teAlqUkRNaWZhc3QJOyBqaW1teGZzdC5hc20KKyVkZWZpbmUganBlZ19pZGN0X2Zsb2F0XzNkbm93CWpSRDNmbG9hdAk7IGppM2RuZmx0LmFzbQorJWRlZmluZSBqcGVnX2lkY3RfNHg0X21teAlqUkRNNHg0CQk7IGppbW14cmVkLmFzbQorJWRlZmluZSBqcGVnX2lkY3RfMngyX21teAlqUkRNMngyCQk7IGppbW14cmVkLmFzbQorJWRlZmluZSBqcGVnX2lkY3RfaXNsb3dfc3NlMglqUkRTaXNsb3cJOyBqaXNzMmludC5hc20KKyVkZWZpbmUganBlZ19pZGN0X2lmYXN0X3NzZTIJalJEU2lmYXN0CTsgamlzczJmc3QuYXNtCislZGVmaW5lIGpwZWdfaWRjdF9mbG9hdF9zc2UJalJEU2Zsb2F0CTsgamlzc2VmbHQuYXNtCislZGVmaW5lIGpwZWdfaWRjdF9mbG9hdF9zc2UyCWpSRDJmbG9hdAk7IGppc3MyZmx0LmFzbQorJWRlZmluZSBqcGVnX2lkY3RfNHg0X3NzZTIJalJEUzR4NAkJOyBqaXNzMnJlZC5hc20KKyVkZWZpbmUganBlZ19pZGN0XzJ4Ml9zc2UyCWpSRFMyeDIJCTsgamlzczJyZWQuYXNtCislZGVmaW5lIGpjb25zdF9mZGN0X2Zsb2F0CWpGQ2Zsb2F0CTsgamZkY3RmbHQuYXNtCislZGVmaW5lIGpjb25zdF9mZGN0X2lzbG93X21teAlqRkNNaXNsb3cJOyBqZm1teGludC5hc20KKyVkZWZpbmUgamNvbnN0X2ZkY3RfaWZhc3RfbW14CWpGQ01pZmFzdAk7IGpmbW14ZnN0LmFzbQorJWRlZmluZSBqY29uc3RfZmRjdF9mbG9hdF8zZG5vdwlqRkMzZmxvYXQJOyBqZjNkbmZsdC5hc20KKyVkZWZpbmUgamNvbnN0X2ZkY3RfaXNsb3dfc3NlMglqRkNTaXNsb3cJOyBqZnNzMmludC5hc20KKyVkZWZpbmUgamNvbnN0X2ZkY3RfaWZhc3Rfc3NlMglqRkNTaWZhc3QJOyBqZnNzMmZzdC5hc20KKyVkZWZpbmUgamNvbnN0X2ZkY3RfZmxvYXRfc3NlCWpGQ1NmbG9hdAk7IGpmc3NlZmx0LmFzbQorJWRlZmluZSBqY29uc3RfaWRjdF9mbG9hdAlqUkNmbG9hdAk7IGppZGN0Zmx0LmFzbQorJWRlZmluZSBqY29uc3RfaWRjdF9pc2xvd19tbXgJalJDTWlzbG93CTsgamltbXhpbnQuYXNtCislZGVmaW5lIGpjb25zdF9pZGN0X2lmYXN0X21teAlqUkNNaWZhc3QJOyBqaW1teGZzdC5hc20KKyVkZWZpbmUgamNvbnN0X2lkY3RfZmxvYXRfM2Rub3cJalJDM2Zsb2F0CTsgamkzZG5mbHQuYXNtCislZGVmaW5lIGpjb25zdF9pZGN0X3JlZF9tbXgJalJDTXJlZAkJOyBqaW1teHJlZC5hc20KKyVkZWZpbmUgamNvbnN0X2lkY3RfaXNsb3dfc3NlMglqUkNTaXNsb3cJOyBqaXNzMmludC5hc20KKyVkZWZpbmUgamNvbnN0X2lkY3RfaWZhc3Rfc3NlMglqUkNTaWZhc3QJOyBqaXNzMmZzdC5hc20KKyVkZWZpbmUgamNvbnN0X2lkY3RfZmxvYXRfc3NlCWpSQ1NmbG9hdAk7IGppc3NlZmx0LmFzbQorJWRlZmluZSBqY29uc3RfaWRjdF9mbG9hdF9zc2UyCWpSQzJmbG9hdAk7IGppc3MyZmx0LmFzbQorJWRlZmluZSBqY29uc3RfaWRjdF9yZWRfc3NlMglqUkNTcmVkCQk7IGppc3MycmVkLmFzbQorJWVuZGlmIDsgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgUk9XKG4sYixzKQkJKChiKSsobikqKHMpKQorJWRlZmluZSBDT0wobixiLHMpCQkoKGIpKyhuKSoocykqRENUU0laRSkKKworJWRlZmluZSBEV0JMT0NLKG0sbixiLHMpCSgoYikrKG0pKkRDVFNJWkUqKHMpKyhuKSpTSVpFT0ZfRFdPUkQpCislZGVmaW5lIE1NQkxPQ0sobSxuLGIscykJKChiKSsobSkqRENUU0laRSoocykrKG4pKlNJWkVPRl9NTVdPUkQpCislZGVmaW5lIFhNTUJMT0NLKG0sbixiLHMpCSgoYikrKG0pKkRDVFNJWkUqKHMpKyhuKSpTSVpFT0ZfWE1NV09SRCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvamRkY3RtZ3IuYyBiL2pkZGN0bWdyLmMKaW5kZXggYmJmOGQwZS4uZGU2ZGY4ZCAxMDA2NDQKLS0tIGEvamRkY3RtZ3IuYworKysgYi9qZGRjdG1nci5jCkBAIC01LDYgKzUsMTMgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgZm9yIFNJTUQgZXh0ZW5zaW9uLgorICogTGFzdCBNb2RpZmllZCA6IERlY2VtYmVyIDI0LCAyMDA1CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGludmVyc2UtRENUIG1hbmFnZW1lbnQgbG9naWMuCiAgKiBUaGlzIGNvZGUgc2VsZWN0cyBhIHBhcnRpY3VsYXIgSURDVCBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkLAogICogYW5kIGl0IHBlcmZvcm1zIHJlbGF0ZWQgaG91c2VrZWVwaW5nIGNob3Jlcy4gIE5vIGNvZGUgaW4gdGhpcyBmaWxlCkBAIC05NCw2ICsxMDEsNyBAQAogICBpbnQgbWV0aG9kID0gMDsKICAgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBtZXRob2RfcHRyID0gTlVMTDsKICAgSlFVQU5UX1RCTCAqIHF0Ymw7CisgIHVuc2lnbmVkIGludCBzaW1kID0ganBlZ19zaW1kX3N1cHBvcnQoKGpfY29tbW9uX3B0cikgY2luZm8pOwogCiAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CiAgICAgICAgY2krKywgY29tcHB0cisrKSB7CkBAIC0xMDUsMzQgKzExMyw5NSBAQAogICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RyZWQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwogICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8yeDI7CisjaWZkZWYgSklEQ1RfSU5UX1NTRTJfU1VQUE9SVEVECisgICAgICBpZiAoc2ltZCAmIEpTSU1EX1NTRTIgJiYKKyAgICAgICAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9pZGN0X3JlZF9zc2UyKSkKKwltZXRob2RfcHRyID0ganBlZ19pZGN0XzJ4Ml9zc2UyOworICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgSklEQ1RfSU5UX01NWF9TVVBQT1JURUQKKyAgICAgIGlmIChzaW1kICYgSlNJTURfTU1YKQorCW1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMngyX21teDsKKyAgICAgIGVsc2UKKyNlbmRpZgorCW1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMngyOwogICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RyZWQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwogICAgICAgYnJlYWs7CiAgICAgY2FzZSA0OgotICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF80eDQ7CisjaWZkZWYgSklEQ1RfSU5UX1NTRTJfU1VQUE9SVEVECisgICAgICBpZiAoc2ltZCAmIEpTSU1EX1NTRTIgJiYKKyAgICAgICAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9pZGN0X3JlZF9zc2UyKSkKKwltZXRob2RfcHRyID0ganBlZ19pZGN0XzR4NF9zc2UyOworICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgSklEQ1RfSU5UX01NWF9TVVBQT1JURUQKKyAgICAgIGlmIChzaW1kICYgSlNJTURfTU1YKQorCW1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfNHg0X21teDsKKyAgICAgIGVsc2UKKyNlbmRpZgorCW1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfNHg0OwogICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RyZWQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwogICAgICAgYnJlYWs7Ci0jZW5kaWYKKyNlbmRpZiAvKiBJRENUX1NDQUxJTkdfU1VQUE9SVEVEICovCiAgICAgY2FzZSBEQ1RTSVpFOgogICAgICAgc3dpdGNoIChjaW5mby0+ZGN0X21ldGhvZCkgewogI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKICAgICAgIGNhc2UgSkRDVF9JU0xPVzoKLQltZXRob2RfcHRyID0ganBlZ19pZGN0X2lzbG93OworI2lmZGVmIEpJRENUX0lOVF9TU0UyX1NVUFBPUlRFRAorCWlmIChzaW1kICYgSlNJTURfU1NFMiAmJgorCSAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9pZGN0X2lzbG93X3NzZTIpKQorCSAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9pc2xvd19zc2UyOworCWVsc2UKKyNlbmRpZgorI2lmZGVmIEpJRENUX0lOVF9NTVhfU1VQUE9SVEVECisJaWYgKHNpbWQgJiBKU0lNRF9NTVgpCisJICBtZXRob2RfcHRyID0ganBlZ19pZGN0X2lzbG93X21teDsKKwllbHNlCisjZW5kaWYKKwkgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfaXNsb3c7CiAJbWV0aG9kID0gSkRDVF9JU0xPVzsKIAlicmVhazsKLSNlbmRpZgorI2VuZGlmIC8qIERDVF9JU0xPV19TVVBQT1JURUQgKi8KICNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECiAgICAgICBjYXNlIEpEQ1RfSUZBU1Q6Ci0JbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9pZmFzdDsKKyNpZmRlZiBKSURDVF9JTlRfU1NFMl9TVVBQT1JURUQKKwlpZiAoc2ltZCAmIEpTSU1EX1NTRTIgJiYKKwkgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfaWRjdF9pZmFzdF9zc2UyKSkKKwkgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfaWZhc3Rfc3NlMjsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBKSURDVF9JTlRfTU1YX1NVUFBPUlRFRAorCWlmIChzaW1kICYgSlNJTURfTU1YKQorCSAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9pZmFzdF9tbXg7CisJZWxzZQorI2VuZGlmCisJICBtZXRob2RfcHRyID0ganBlZ19pZGN0X2lmYXN0OwogCW1ldGhvZCA9IEpEQ1RfSUZBU1Q7CiAJYnJlYWs7Ci0jZW5kaWYKKyNlbmRpZiAvKiBEQ1RfSUZBU1RfU1VQUE9SVEVEICovCiAjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAogICAgICAgY2FzZSBKRENUX0ZMT0FUOgotCW1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfZmxvYXQ7CisjaWZkZWYgSklEQ1RfRkxUX1NTRV9TU0UyX1NVUFBPUlRFRAorCWlmIChzaW1kICYgSlNJTURfU1NFICYmIHNpbWQgJiBKU0lNRF9TU0UyICYmCisJICAgIElTX0NPTlNUX0FMSUdORURfMTYoamNvbnN0X2lkY3RfZmxvYXRfc3NlMikpCisJICBtZXRob2RfcHRyID0ganBlZ19pZGN0X2Zsb2F0X3NzZTI7CisJZWxzZQorI2VuZGlmCisjaWZkZWYgSklEQ1RfRkxUX1NTRV9NTVhfU1VQUE9SVEVECisJaWYgKHNpbWQgJiBKU0lNRF9TU0UgJiYKKwkgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfaWRjdF9mbG9hdF9zc2UpKQorCSAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9mbG9hdF9zc2U7CisJZWxzZQorI2VuZGlmCisjaWZkZWYgSklEQ1RfRkxUXzNETk9XX01NWF9TVVBQT1JURUQKKwlpZiAoc2ltZCAmIEpTSU1EXzNETk9XKQorCSAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9mbG9hdF8zZG5vdzsKKwllbHNlCisjZW5kaWYKKwkgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfZmxvYXQ7CiAJbWV0aG9kID0gSkRDVF9GTE9BVDsKIAlicmVhazsKLSNlbmRpZgorI2VuZGlmIC8qIERDVF9GTE9BVF9TVVBQT1JURUQgKi8KICAgICAgIGRlZmF1bHQ6CiAJRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOwogCWJyZWFrOwpAQCAtMjY3LDMgKzMzNiw3OCBAQAogICAgIGlkY3QtPmN1cl9tZXRob2RbY2ldID0gLTE7CiAgIH0KIH0KKworCisjaWZuZGVmIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKworR0xPQkFMKHVuc2lnbmVkIGludCkKK2pwZWdfc2ltZF9pbnZlcnNlX2RjdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IG1ldGhvZCkKK3sKKyAgdW5zaWduZWQgaW50IHNpbWQgPSBqcGVnX3NpbWRfc3VwcG9ydCgoal9jb21tb25fcHRyKSBjaW5mbyk7CisKKyAgc3dpdGNoIChtZXRob2QpIHsKKyNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECisgIGNhc2UgSkRDVF9JU0xPVzoKKyNpZmRlZiBKSURDVF9JTlRfU1NFMl9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EX1NTRTIgJiYKKyAgICAgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfaWRjdF9pc2xvd19zc2UyKSkKKyAgICAgIHJldHVybiBKU0lNRF9TU0UyOworI2VuZGlmCisjaWZkZWYgSklEQ1RfSU5UX01NWF9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EX01NWCkKKyAgICAgIHJldHVybiBKU0lNRF9NTVg7CisjZW5kaWYKKyAgICByZXR1cm4gSlNJTURfTk9ORTsKKyNlbmRpZiAvKiBEQ1RfSVNMT1dfU1VQUE9SVEVEICovCisjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorICBjYXNlIEpEQ1RfSUZBU1Q6CisjaWZkZWYgSklEQ1RfSU5UX1NTRTJfU1VQUE9SVEVECisgICAgaWYgKHNpbWQgJiBKU0lNRF9TU0UyICYmCisgICAgICAgIElTX0NPTlNUX0FMSUdORURfMTYoamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikpCisgICAgICByZXR1cm4gSlNJTURfU1NFMjsKKyNlbmRpZgorI2lmZGVmIEpJRENUX0lOVF9NTVhfU1VQUE9SVEVECisgICAgaWYgKHNpbWQgJiBKU0lNRF9NTVgpCisgICAgICByZXR1cm4gSlNJTURfTU1YOworI2VuZGlmCisgICAgcmV0dXJuIEpTSU1EX05PTkU7CisjZW5kaWYgLyogRENUX0lGQVNUX1NVUFBPUlRFRCAqLworI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyAgY2FzZSBKRENUX0ZMT0FUOgorI2lmZGVmIEpJRENUX0ZMVF9TU0VfU1NFMl9TVVBQT1JURUQKKyAgICBpZiAoc2ltZCAmIEpTSU1EX1NTRSAmJiBzaW1kICYgSlNJTURfU1NFMiAmJgorICAgICAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9pZGN0X2Zsb2F0X3NzZTIpKQorICAgICAgcmV0dXJuIEpTSU1EX1NTRTsJCS8qIChKU0lNRF9TU0UgfCBKU0lNRF9TU0UyKTsgKi8KKyNlbmRpZgorI2lmZGVmIEpJRENUX0ZMVF9TU0VfTU1YX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfU1NFICYmCisgICAgICAgIElTX0NPTlNUX0FMSUdORURfMTYoamNvbnN0X2lkY3RfZmxvYXRfc3NlKSkKKyAgICAgIHJldHVybiBKU0lNRF9TU0U7CQkvKiAoSlNJTURfU1NFIHwgSlNJTURfTU1YKTsgKi8KKyNlbmRpZgorI2lmZGVmIEpJRENUX0ZMVF8zRE5PV19NTVhfU1VQUE9SVEVECisgICAgaWYgKHNpbWQgJiBKU0lNRF8zRE5PVykKKyAgICAgIHJldHVybiBKU0lNRF8zRE5PVzsJLyogKEpTSU1EXzNETk9XIHwgSlNJTURfTU1YKTsgKi8KKyNlbmRpZgorICAgIHJldHVybiBKU0lNRF9OT05FOworI2VuZGlmIC8qIERDVF9GTE9BVF9TVVBQT1JURUQgKi8KKyNpZmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVECisgIGNhc2UgSkRDVF9GTE9BVCArIDE6CisjaWZkZWYgSklEQ1RfSU5UX1NTRTJfU1VQUE9SVEVECisgICAgaWYgKHNpbWQgJiBKU0lNRF9TU0UyICYmCisgICAgICAgIElTX0NPTlNUX0FMSUdORURfMTYoamNvbnN0X2lkY3RfcmVkX3NzZTIpKQorICAgICAgcmV0dXJuIEpTSU1EX1NTRTI7CisjZW5kaWYKKyNpZmRlZiBKSURDVF9JTlRfTU1YX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfTU1YKQorICAgICAgcmV0dXJuIEpTSU1EX01NWDsKKyNlbmRpZgorICAgIHJldHVybiBKU0lNRF9OT05FOworI2VuZGlmIC8qIElEQ1RfU0NBTElOR19TVVBQT1JURUQgKi8KKyAgZGVmYXVsdDoKKyAgICA7CisgIH0KKworICByZXR1cm4gSlNJTURfTk9ORTsJLyogbm90IGNvbXBpbGVkICovCit9CisKKyNlbmRpZiAvKiAhSlNJTURfTU9ERUlORk9fTk9UX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvamRodWZmLmMgYi9qZGh1ZmYuYwppbmRleCBiNWJhMzlmLi40Zjc1ZWJlIDEwMDY0NAotLS0gYS9qZGh1ZmYuYworKysgYi9qZGh1ZmYuYwpAQCAtNSw2ICs1LDEzIEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgKiBMYXN0IE1vZGlmaWVkIDogT2N0b2JlciAzMSwgMjAwNAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZyByb3V0aW5lcy4KICAqCiAgKiBNdWNoIG9mIHRoZSBjb21wbGV4aXR5IGhlcmUgaGFzIHRvIGRvIHdpdGggc3VwcG9ydGluZyBpbnB1dCBzdXNwZW5zaW9uLgpAQCAtMTUxLDggKzE1OCw4IEBACiB7CiAgIEpIVUZGX1RCTCAqaHRibDsKICAgZF9kZXJpdmVkX3RibCAqZHRibDsKLSAgaW50IHAsIGksIGwsIHNpLCBudW1zeW1ib2xzOwotICBpbnQgbG9va2JpdHMsIGN0cjsKKyAgaW50IHAsIGksIGwsIGxhLCBseCwgc2ksIG51bXN5bWJvbHM7CisgIGludCBsb29rYml0cywgbG9va19lbmQsIHN5bSwgdmFsLCBjdHI7CiAgIGNoYXIgaHVmZnNpemVbMjU3XTsKICAgdW5zaWduZWQgaW50IGh1ZmZjb2RlWzI1N107CiAgIHVuc2lnbmVkIGludCBjb2RlOwpAQCAtMjM0LDE4ICsyNDEsMzQgQEAKICAgICogd2l0aCB0aGF0IGNvZGUuCiAgICAqLwogCi0gIE1FTVpFUk8oZHRibC0+bG9va19uYml0cywgU0laRU9GKGR0YmwtPmxvb2tfbmJpdHMpKTsKKyAgTUVNWkVSTyhkdGJsLT5sb29reF9uYml0cywgU0laRU9GKGR0YmwtPmxvb2t4X25iaXRzKSk7CiAKICAgcCA9IDA7Ci0gIGZvciAobCA9IDE7IGwgPD0gSFVGRl9MT09LQUhFQUQ7IGwrKykgeworICBmb3IgKGwgPSAxOyBsIDw9IEhVRkZYX0xPT0tBSEVBRC0xOyBsKyspIHsKICAgICBmb3IgKGkgPSAxOyBpIDw9IChpbnQpIGh0YmwtPmJpdHNbbF07IGkrKywgcCsrKSB7CiAgICAgICAvKiBsID0gY3VycmVudCBjb2RlJ3MgbGVuZ3RoLCBwID0gaXRzIGluZGV4IGluIGh1ZmZjb2RlW10gJiBodWZmdmFsW10uICovCiAgICAgICAvKiBHZW5lcmF0ZSBsZWZ0LWp1c3RpZmllZCBjb2RlIGZvbGxvd2VkIGJ5IGFsbCBwb3NzaWJsZSBiaXQgc2VxdWVuY2VzICovCi0gICAgICBsb29rYml0cyA9IGh1ZmZjb2RlW3BdIDw8IChIVUZGX0xPT0tBSEVBRC1sKTsKLSAgICAgIGZvciAoY3RyID0gMSA8PCAoSFVGRl9MT09LQUhFQUQtbCk7IGN0ciA+IDA7IGN0ci0tKSB7Ci0JZHRibC0+bG9va19uYml0c1tsb29rYml0c10gPSBsOwotCWR0YmwtPmxvb2tfc3ltW2xvb2tiaXRzXSA9IGh0YmwtPmh1ZmZ2YWxbcF07Ci0JbG9va2JpdHMrKzsKKyAgICAgIHN5bSA9IGh0YmwtPmh1ZmZ2YWxbcF07CQkvKiBjdXJyZW50IHN5bWJvbCAqLworICAgICAgbGEgPSBzeW0gJiAxNTsJCQkvKiBsZW5ndGggb2YgYWRkaXRpb25hbCBiaXRzIGZpZWxkICovCisgICAgICBseCA9IEhVRkZYX0xPT0tBSEVBRCAtIGw7CisgICAgICBsb29rYml0cyA9IGh1ZmZjb2RlW3BdIDw8IGx4OworICAgICAgbG9va19lbmQgPSBsb29rYml0cyArICgxIDw8IGx4KTsKKyAgICAgIGx4IC09IGxhOworICAgICAgd2hpbGUgKGxvb2tiaXRzIDwgbG9va19lbmQpIHsKKwlpZiAobHggPj0gMCkgeworCSAgdmFsID0gKGxvb2tiaXRzID4+ICBseCkgJiAoKDEgPDwgbGEpIC0gMSk7CisJICBjdHIgPSAxIDw8IGx4OworCX0gZWxzZSB7CisJICB2YWwgPSAobG9va2JpdHMgPDwgLWx4KSAmICgoMSA8PCBsYSkgLSAxKTsKKwkgIGN0ciA9IDE7CisJfQorCXZhbCA9IEhVRkZfRVhURU5EKHZhbCwgbGEpOworCWZvciAoOyBjdHIgPiAwOyBjdHItLSkgeworCSAgZHRibC0+bG9va3hfbmJpdHNbbG9va2JpdHNdID0gbCArIGxhOworCSAgZHRibC0+bG9va3hfdmFsW2xvb2tiaXRzXSA9IHZhbDsKKwkgIGR0YmwtPmxvb2t4X3N5bVtsb29rYml0c10gPSBzeW07CisJICBsb29rYml0cysrOworCX0KICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTI3MSwyMyArMjk0LDggQEAKICAqIFNlZSBqZGh1ZmYuaCBmb3IgaW5mbyBhYm91dCB1c2FnZS4KICAqIE5vdGU6IGN1cnJlbnQgdmFsdWVzIG9mIGdldF9idWZmZXIgYW5kIGJpdHNfbGVmdCBhcmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMsCiAgKiBidXQgYXJlIHJldHVybmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyBvZiB0aGUgc3RhdGUgc3RydWN0LgotICoKLSAqIE9uIG1vc3QgbWFjaGluZXMgTUlOX0dFVF9CSVRTIHNob3VsZCBiZSAyNSB0byBhbGxvdyB0aGUgZnVsbCAzMi1iaXQgd2lkdGgKLSAqIG9mIGdldF9idWZmZXIgdG8gYmUgdXNlZC4gIChPbiBtYWNoaW5lcyB3aXRoIHdpZGVyIHdvcmRzLCBhbiBldmVuIGxhcmdlcgotICogYnVmZmVyIGNvdWxkIGJlIHVzZWQuKSAgSG93ZXZlciwgb24gc29tZSBtYWNoaW5lcyAzMi1iaXQgc2hpZnRzIGFyZQotICogcXVpdGUgc2xvdyBhbmQgdGFrZSB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHBsYWNlcyBzaGlmdGVkLgotICogKFRoaXMgaXMgdHJ1ZSB3aXRoIG1vc3QgUEMgY29tcGlsZXJzLCBmb3IgaW5zdGFuY2UuKSAgSW4gdGhpcyBjYXNlIGl0IG1heQotICogYmUgYSB3aW4gdG8gc2V0IE1JTl9HRVRfQklUUyB0byB0aGUgbWluaW11bSB2YWx1ZSBvZiAxNS4gIFRoaXMgcmVkdWNlcyB0aGUKLSAqIGF2ZXJhZ2Ugc2hpZnQgZGlzdGFuY2UgYXQgdGhlIGNvc3Qgb2YgbW9yZSBjYWxscyB0byBqcGVnX2ZpbGxfYml0X2J1ZmZlci4KICAqLwogCi0jaWZkZWYgU0xPV19TSElGVF8zMgotI2RlZmluZSBNSU5fR0VUX0JJVFMgIDE1CS8qIG1pbmltdW0gYWxsb3dhYmxlIHZhbHVlICovCi0jZWxzZQotI2RlZmluZSBNSU5fR0VUX0JJVFMgIChCSVRfQlVGX1NJWkUtNykKLSNlbmRpZgotCi0KIEdMT0JBTChib29sZWFuKQoganBlZ19maWxsX2JpdF9idWZmZXIgKGJpdHJlYWRfd29ya2luZ19zdGF0ZSAqIHN0YXRlLAogCQkgICAgICByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwKQEAgLTQzNCwzMiArNDQyLDYgQEAKIAogCiAvKgotICogRmlndXJlIEYuMTI6IGV4dGVuZCBzaWduIGJpdC4KLSAqIE9uIHNvbWUgbWFjaGluZXMsIGEgc2hpZnQgYW5kIGFkZCB3aWxsIGJlIGZhc3RlciB0aGFuIGEgdGFibGUgbG9va3VwLgotICovCi0KLSNpZmRlZiBBVk9JRF9UQUJMRVMKLQotI2RlZmluZSBIVUZGX0VYVEVORCh4LHMpICAoKHgpIDwgKDE8PCgocyktMSkpID8gKHgpICsgKCgoLTEpPDwocykpICsgMSkgOiAoeCkpCi0KLSNlbHNlCi0KLSNkZWZpbmUgSFVGRl9FWFRFTkQoeCxzKSAgKCh4KSA8IGV4dGVuZF90ZXN0W3NdID8gKHgpICsgZXh0ZW5kX29mZnNldFtzXSA6ICh4KSkKLQotc3RhdGljIGNvbnN0IGludCBleHRlbmRfdGVzdFsxNl0gPSAgIC8qIGVudHJ5IG4gaXMgMioqKG4tMSkgKi8KLSAgeyAwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDA0LCAweDAwMDgsIDB4MDAxMCwgMHgwMDIwLCAweDAwNDAsIDB4MDA4MCwKLSAgICAweDAxMDAsIDB4MDIwMCwgMHgwNDAwLCAweDA4MDAsIDB4MTAwMCwgMHgyMDAwLCAweDQwMDAgfTsKLQotc3RhdGljIGNvbnN0IGludCBleHRlbmRfb2Zmc2V0WzE2XSA9IC8qIGVudHJ5IG4gaXMgKC0xIDw8IG4pICsgMSAqLwotICB7IDAsICgoLTEpPDwxKSArIDEsICgoLTEpPDwyKSArIDEsICgoLTEpPDwzKSArIDEsICgoLTEpPDw0KSArIDEsCi0gICAgKCgtMSk8PDUpICsgMSwgKCgtMSk8PDYpICsgMSwgKCgtMSk8PDcpICsgMSwgKCgtMSk8PDgpICsgMSwKLSAgICAoKC0xKTw8OSkgKyAxLCAoKC0xKTw8MTApICsgMSwgKCgtMSk8PDExKSArIDEsICgoLTEpPDwxMikgKyAxLAotICAgICgoLTEpPDwxMykgKyAxLCAoKC0xKTw8MTQpICsgMSwgKCgtMSk8PDE1KSArIDEgfTsKLQotI2VuZGlmIC8qIEFWT0lEX1RBQkxFUyAqLwotCi0KLS8qCiAgKiBDaGVjayBmb3IgYSByZXN0YXJ0IG1hcmtlciAmIHJlc3luY2hyb25pemUgZGVjb2Rlci4KICAqIFJldHVybnMgRkFMU0UgaWYgbXVzdCBzdXNwZW5kLgogICovCkBAIC01NDgsMTMgKzUzMCw1OSBAQAogICAgICAgLyogRGVjb2RlIGEgc2luZ2xlIGJsb2NrJ3Mgd29ydGggb2YgY29lZmZpY2llbnRzICovCiAKICAgICAgIC8qIFNlY3Rpb24gRi4yLjIuMTogZGVjb2RlIHRoZSBEQyBjb2VmZmljaWVudCBkaWZmZXJlbmNlICovCi0gICAgICBIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgZGN0YmwsIHJldHVybiBGQUxTRSwgbGFiZWwxKTsKLSAgICAgIGlmIChzKSB7Ci0JQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsKLQlyID0gR0VUX0JJVFMocyk7Ci0JcyA9IEhVRkZfRVhURU5EKHIsIHMpOworICAgICAgewkJLyogSFVGRlhfREVDT0RFICovCisJcmVnaXN0ZXIgaW50IG5iLCBsb29rLCB0OworCWlmIChiaXRzX2xlZnQgPCBIVUZGWF9MT09LQUhFQUQpIHsKKwkgIHJlZ2lzdGVyIGNvbnN0IEpPQ1RFVCAqIG5leHRfaW5wdXRfYnl0ZSA9IGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZTsKKwkgIHJlZ2lzdGVyIHNpemVfdCAgICAgICAgIGJ5dGVzX2luX2J1ZmZlciA9IGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlcjsKKwkgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKSB7CisJICAgIHdoaWxlIChiaXRzX2xlZnQgPCBNSU5fR0VUX0JJVFMpIHsKKwkgICAgICByZWdpc3RlciBpbnQgYzsKKwkgICAgICBpZiAoYnl0ZXNfaW5fYnVmZmVyID09IDAgfHwKKwkJICAoYyA9IEdFVEpPQ1RFVCgqbmV4dF9pbnB1dF9ieXRlKSkgPT0gMHhGRikgeworCQlnb3RvIGxhYmVsMTE7IH0KKwkgICAgICBieXRlc19pbl9idWZmZXItLTsgbmV4dF9pbnB1dF9ieXRlKys7CisJICAgICAgZ2V0X2J1ZmZlciA9IChnZXRfYnVmZmVyIDw8IDgpIHwgYzsKKwkgICAgICBiaXRzX2xlZnQgKz0gODsKKwkgICAgfQorCSAgICBicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGUgPSBuZXh0X2lucHV0X2J5dGU7CisJICAgIGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlciA9IGJ5dGVzX2luX2J1ZmZlcjsKKwkgIH0gZWxzZSB7CisJbGFiZWwxMToKKwkgICAgYnJfc3RhdGUubmV4dF9pbnB1dF9ieXRlID0gbmV4dF9pbnB1dF9ieXRlOworCSAgICBicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgPSBieXRlc19pbl9idWZmZXI7CisJICAgIGlmICghIGpwZWdfZmlsbF9iaXRfYnVmZmVyKCZicl9zdGF0ZSxnZXRfYnVmZmVyLGJpdHNfbGVmdCwgMCkpIHsKKwkgICAgICByZXR1cm4gRkFMU0U7IH0KKwkgICAgZ2V0X2J1ZmZlciA9IGJyX3N0YXRlLmdldF9idWZmZXI7IGJpdHNfbGVmdCA9IGJyX3N0YXRlLmJpdHNfbGVmdDsKKwkgICAgaWYgKGJpdHNfbGVmdCA8IEhVRkZYX0xPT0tBSEVBRCkgeworCSAgICAgIG5iID0gMTsgZ290byBsYWJlbDE7CisJICAgIH0KKwkgIH0KKwl9CisJbG9vayA9IFBFRUtfQklUUyhIVUZGWF9MT09LQUhFQUQpOworCWlmICgobmIgPSBkY3RibC0+bG9va3hfbmJpdHNbbG9va10pICE9IDApIHsKKwkgIHMgPSBkY3RibC0+bG9va3hfdmFsW2xvb2tdOworCSAgaWYgKG5iIDw9IEhVRkZYX0xPT0tBSEVBRCkgeworCSAgICBEUk9QX0JJVFMobmIpOworCSAgfSBlbHNlIHsKKwkgICAgRFJPUF9CSVRTKEhVRkZYX0xPT0tBSEVBRCk7CisJICAgIG5iIC09IEhVRkZYX0xPT0tBSEVBRDsKKwkgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgbmIsIHJldHVybiBGQUxTRSk7CisJICAgIHMgKz0gR0VUX0JJVFMobmIpOworCSAgfQorCX0gZWxzZSB7CisJICBuYiA9IEhVRkZYX0xPT0tBSEVBRDsKKyAgICAgIGxhYmVsMToKKwkgIGlmICgocz1qcGVnX2h1ZmZfZGVjb2RlKCZicl9zdGF0ZSxnZXRfYnVmZmVyLGJpdHNfbGVmdCxkY3RibCxuYikpCisJICAgICAgIDwgMCkgeyByZXR1cm4gRkFMU0U7IH0KKwkgIGdldF9idWZmZXIgPSBicl9zdGF0ZS5nZXRfYnVmZmVyOyBiaXRzX2xlZnQgPSBicl9zdGF0ZS5iaXRzX2xlZnQ7CisJICBpZiAocykgeworCSAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOworCSAgICB0ID0gR0VUX0JJVFMocyk7CisJICAgIHMgPSBIVUZGX0VYVEVORCh0LCBzKTsKKwkgIH0KKwl9CiAgICAgICB9Ci0KICAgICAgIGlmIChlbnRyb3B5LT5kY19uZWVkZWRbYmxrbl0pIHsKIAkvKiBDb252ZXJ0IERDIGRpZmZlcmVuY2UgdG8gYWN0dWFsIHZhbHVlLCB1cGRhdGUgbGFzdF9kY192YWwgKi8KIAlpbnQgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CkBAIC01NjksMTYgKzU5Nyw2NSBAQAogCS8qIFNlY3Rpb24gRi4yLjIuMjogZGVjb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgKi8KIAkvKiBTaW5jZSB6ZXJvZXMgYXJlIHNraXBwZWQsIG91dHB1dCBhcmVhIG11c3QgYmUgY2xlYXJlZCBiZWZvcmVoYW5kICovCiAJZm9yIChrID0gMTsgayA8IERDVFNJWkUyOyBrKyspIHsKLQkgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCBhY3RibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDIpOwotICAgICAgCi0JICByID0gcyA+PiA0OwotCSAgcyAmPSAxNTsKLSAgICAgIAorCSAgewkvKiBIVUZGWF9ERUNPREUgKi8KKwkgICAgcmVnaXN0ZXIgaW50IG5iLCBsb29rLCB0OworCSAgICBpZiAoYml0c19sZWZ0IDwgSFVGRlhfTE9PS0FIRUFEKSB7CisJICAgICAgcmVnaXN0ZXIgY29uc3QgSk9DVEVUICogbmV4dF9pbnB1dF9ieXRlCisJCQkJCSAgICAgID0gYnJfc3RhdGUubmV4dF9pbnB1dF9ieXRlOworCSAgICAgIHJlZ2lzdGVyIHNpemVfdCBieXRlc19pbl9idWZmZXIgPSBicl9zdGF0ZS5ieXRlc19pbl9idWZmZXI7CisJICAgICAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApIHsKKwkJd2hpbGUgKGJpdHNfbGVmdCA8IE1JTl9HRVRfQklUUykgeworCQkgIHJlZ2lzdGVyIGludCBjOworCQkgIGlmIChieXRlc19pbl9idWZmZXIgPT0gMCB8fAorCQkgICAgICAoYyA9IEdFVEpPQ1RFVCgqbmV4dF9pbnB1dF9ieXRlKSkgPT0gMHhGRikgeworCQkgICAgZ290byBsYWJlbDIxOyB9CisJCSAgYnl0ZXNfaW5fYnVmZmVyLS07IG5leHRfaW5wdXRfYnl0ZSsrOworCQkgIGdldF9idWZmZXIgPSAoZ2V0X2J1ZmZlciA8PCA4KSB8IGM7CisJCSAgYml0c19sZWZ0ICs9IDg7CisJCX0KKwkJYnJfc3RhdGUubmV4dF9pbnB1dF9ieXRlID0gbmV4dF9pbnB1dF9ieXRlOworCQlicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgPSBieXRlc19pbl9idWZmZXI7CisJICAgICAgfSBlbHNlIHsKKwkgICAgbGFiZWwyMToKKwkJYnJfc3RhdGUubmV4dF9pbnB1dF9ieXRlID0gbmV4dF9pbnB1dF9ieXRlOworCQlicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgPSBieXRlc19pbl9idWZmZXI7CisJCWlmICghIGpwZWdfZmlsbF9iaXRfYnVmZmVyKCZicl9zdGF0ZSxnZXRfYnVmZmVyLGJpdHNfbGVmdCwwKSkgeworCQkgIHJldHVybiBGQUxTRTsgfQorCQlnZXRfYnVmZmVyID0gYnJfc3RhdGUuZ2V0X2J1ZmZlcjsKKwkJYml0c19sZWZ0ICA9IGJyX3N0YXRlLmJpdHNfbGVmdDsKKwkJaWYgKGJpdHNfbGVmdCA8IEhVRkZYX0xPT0tBSEVBRCkgeworCQkgIG5iID0gMTsgZ290byBsYWJlbDI7CisJCX0KKwkgICAgICB9CisJICAgIH0KKwkgICAgbG9vayA9IFBFRUtfQklUUyhIVUZGWF9MT09LQUhFQUQpOworCSAgICBpZiAoKG5iID0gYWN0YmwtPmxvb2t4X25iaXRzW2xvb2tdKSAhPSAwKSB7CisJICAgICAgcyA9IGFjdGJsLT5sb29reF92YWxbbG9va107CisJICAgICAgciA9IGFjdGJsLT5sb29reF9zeW1bbG9va10gPj4gNDsKKwkgICAgICBpZiAobmIgPD0gSFVGRlhfTE9PS0FIRUFEKSB7CisJCURST1BfQklUUyhuYik7CisJICAgICAgfSBlbHNlIHsKKwkJRFJPUF9CSVRTKEhVRkZYX0xPT0tBSEVBRCk7CisJCW5iIC09IEhVRkZYX0xPT0tBSEVBRDsKKwkJQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgbmIsIHJldHVybiBGQUxTRSk7CisJCXMgKz0gR0VUX0JJVFMobmIpOworCSAgICAgIH0KKwkgICAgfSBlbHNlIHsKKwkgICAgICBuYiA9IEhVRkZYX0xPT0tBSEVBRDsKKwkgIGxhYmVsMjoKKwkgICAgICBpZiAoKHM9anBlZ19odWZmX2RlY29kZSgmYnJfc3RhdGUsZ2V0X2J1ZmZlcixiaXRzX2xlZnQsYWN0YmwsbmIpKQorCQkgICA8IDApIHsgcmV0dXJuIEZBTFNFOyB9CisJICAgICAgZ2V0X2J1ZmZlciA9IGJyX3N0YXRlLmdldF9idWZmZXI7IGJpdHNfbGVmdCA9IGJyX3N0YXRlLmJpdHNfbGVmdDsKKwkgICAgICByID0gcyA+PiA0OyBzICY9IDE1OworCSAgICAgIGlmIChzKSB7CisJCUNIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7CisJCXQgPSBHRVRfQklUUyhzKTsKKwkJcyA9IEhVRkZfRVhURU5EKHQsIHMpOworCSAgICAgIH0KKwkgICAgfQorCSAgfQogCSAgaWYgKHMpIHsKIAkgICAgayArPSByOwotCSAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOwotCSAgICByID0gR0VUX0JJVFMocyk7Ci0JICAgIHMgPSBIVUZGX0VYVEVORChyLCBzKTsKIAkgICAgLyogT3V0cHV0IGNvZWZmaWNpZW50IGluIG5hdHVyYWwgKGRlemlnemFnZ2VkKSBvcmRlci4KIAkgICAgICogTm90ZTogdGhlIGV4dHJhIGVudHJpZXMgaW4ganBlZ19uYXR1cmFsX29yZGVyW10gd2lsbCBzYXZlIHVzCiAJICAgICAqIGlmIGsgPj0gRENUU0laRTIsIHdoaWNoIGNvdWxkIGhhcHBlbiBpZiB0aGUgZGF0YSBpcyBjb3JydXB0ZWQuCkBAIC01OTYsMTUgKzY3Myw2NCBAQAogCS8qIFNlY3Rpb24gRi4yLjIuMjogZGVjb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgKi8KIAkvKiBJbiB0aGlzIHBhdGggd2UganVzdCBkaXNjYXJkIHRoZSB2YWx1ZXMgKi8KIAlmb3IgKGsgPSAxOyBrIDwgRENUU0laRTI7IGsrKykgewotCSAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIGFjdGJsLCByZXR1cm4gRkFMU0UsIGxhYmVsMyk7Ci0gICAgICAKLQkgIHIgPSBzID4+IDQ7Ci0JICBzICY9IDE1OwotICAgICAgCisJICB7CS8qIEhVRkZYX0RFQ09ERSAqLworCSAgICByZWdpc3RlciBpbnQgbmIsIGxvb2s7CisJICAgIGlmIChiaXRzX2xlZnQgPCBIVUZGWF9MT09LQUhFQUQpIHsKKwkgICAgICByZWdpc3RlciBjb25zdCBKT0NURVQgKiBuZXh0X2lucHV0X2J5dGUKKwkJCQkJICAgICAgPSBicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGU7CisJICAgICAgcmVnaXN0ZXIgc2l6ZV90IGJ5dGVzX2luX2J1ZmZlciA9IGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlcjsKKwkgICAgICBpZiAoY2luZm8tPnVucmVhZF9tYXJrZXIgPT0gMCkgeworCQl3aGlsZSAoYml0c19sZWZ0IDwgTUlOX0dFVF9CSVRTKSB7CisJCSAgcmVnaXN0ZXIgaW50IGM7CisJCSAgaWYgKGJ5dGVzX2luX2J1ZmZlciA9PSAwIHx8CisJCSAgICAgIChjID0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUpKSA9PSAweEZGKSB7CisJCSAgICBnb3RvIGxhYmVsMzE7IH0KKwkJICBieXRlc19pbl9idWZmZXItLTsgbmV4dF9pbnB1dF9ieXRlKys7CisJCSAgZ2V0X2J1ZmZlciA9IChnZXRfYnVmZmVyIDw8IDgpIHwgYzsKKwkJICBiaXRzX2xlZnQgKz0gODsKKwkJfQorCQlicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGUgPSBuZXh0X2lucHV0X2J5dGU7CisJCWJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlciA9IGJ5dGVzX2luX2J1ZmZlcjsKKwkgICAgICB9IGVsc2UgeworCSAgICBsYWJlbDMxOgorCQlicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGUgPSBuZXh0X2lucHV0X2J5dGU7CisJCWJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlciA9IGJ5dGVzX2luX2J1ZmZlcjsKKwkJaWYgKCEganBlZ19maWxsX2JpdF9idWZmZXIoJmJyX3N0YXRlLGdldF9idWZmZXIsYml0c19sZWZ0LDApKSB7CisJCSAgcmV0dXJuIEZBTFNFOyB9CisJCWdldF9idWZmZXIgPSBicl9zdGF0ZS5nZXRfYnVmZmVyOworCQliaXRzX2xlZnQgID0gYnJfc3RhdGUuYml0c19sZWZ0OworCQlpZiAoYml0c19sZWZ0IDwgSFVGRlhfTE9PS0FIRUFEKSB7CisJCSAgbmIgPSAxOyBnb3RvIGxhYmVsMzsKKwkJfQorCSAgICAgIH0KKwkgICAgfQorCSAgICBsb29rID0gUEVFS19CSVRTKEhVRkZYX0xPT0tBSEVBRCk7CisJICAgIGlmICgobmIgPSBhY3RibC0+bG9va3hfbmJpdHNbbG9va10pICE9IDApIHsKKwkgICAgICBzID0gYWN0YmwtPmxvb2t4X3N5bVtsb29rXTsKKwkgICAgICByID0gcyA+PiA0OyBzICY9IDE1OworCSAgICAgIGlmIChuYiA8PSBIVUZGWF9MT09LQUhFQUQpIHsKKwkJRFJPUF9CSVRTKG5iKTsKKwkgICAgICB9IGVsc2UgeworCQlEUk9QX0JJVFMoSFVGRlhfTE9PS0FIRUFEKTsKKwkJbmIgLT0gSFVGRlhfTE9PS0FIRUFEOworCQlDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBuYiwgcmV0dXJuIEZBTFNFKTsKKwkJRFJPUF9CSVRTKG5iKTsKKwkgICAgICB9CisJICAgIH0gZWxzZSB7CisJICAgICAgbmIgPSBIVUZGWF9MT09LQUhFQUQ7CisJICBsYWJlbDM6CisJICAgICAgaWYgKChzPWpwZWdfaHVmZl9kZWNvZGUoJmJyX3N0YXRlLGdldF9idWZmZXIsYml0c19sZWZ0LGFjdGJsLG5iKSkKKwkJICAgPCAwKSB7IHJldHVybiBGQUxTRTsgfQorCSAgICAgIGdldF9idWZmZXIgPSBicl9zdGF0ZS5nZXRfYnVmZmVyOyBiaXRzX2xlZnQgPSBicl9zdGF0ZS5iaXRzX2xlZnQ7CisJICAgICAgciA9IHMgPj4gNDsgcyAmPSAxNTsKKwkgICAgICBpZiAocykgeworCQlDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOworCQlEUk9QX0JJVFMocyk7CisJICAgICAgfQorCSAgICB9CisJICB9CiAJICBpZiAocykgewogCSAgICBrICs9IHI7Ci0JICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7Ci0JICAgIERST1BfQklUUyhzKTsKIAkgIH0gZWxzZSB7CiAJICAgIGlmIChyICE9IDE1KQogCSAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvamRodWZmLmggYi9qZGh1ZmYuaAppbmRleCBhZTE5YjZjLi5iNWUxOTNlIDEwMDY0NAotLS0gYS9qZGh1ZmYuaAorKysgYi9qZGh1ZmYuaApAQCAtNSw2ICs1LDEzIEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgKiBMYXN0IE1vZGlmaWVkIDogT2N0b2JlciAzMSwgMjAwNAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyBmb3IgSHVmZm1hbiBlbnRyb3B5IGRlY29kaW5nIHJvdXRpbmVzCiAgKiB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUgc2VxdWVudGlhbCBkZWNvZGVyIChqZGh1ZmYuYykgYW5kIHRoZQogICogcHJvZ3Jlc3NpdmUgZGVjb2RlciAoamRwaHVmZi5jKS4gIE5vIG90aGVyIG1vZHVsZXMgbmVlZCB0byBzZWUgdGhlc2UuCkBAIC0yMSw3ICsyOCw3IEBACiAKIC8qIERlcml2ZWQgZGF0YSBjb25zdHJ1Y3RlZCBmb3IgZWFjaCBIdWZmbWFuIHRhYmxlICovCiAKLSNkZWZpbmUgSFVGRl9MT09LQUhFQUQJOAkvKiAjIG9mIGJpdHMgb2YgbG9va2FoZWFkICovCisjZGVmaW5lIEhVRkZYX0xPT0tBSEVBRAk5CS8qICMgb2YgYml0cyBvZiBsb29rYWhlYWQgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewogICAvKiBCYXNpYyB0YWJsZXM6IChlbGVtZW50IFswXSBvZiBlYWNoIGFycmF5IGlzIHVudXNlZCkgKi8KQEAgLTM2LDEzICs0MywxNSBAQAogICAvKiBMaW5rIHRvIHB1YmxpYyBIdWZmbWFuIHRhYmxlIChuZWVkZWQgb25seSBpbiBqcGVnX2h1ZmZfZGVjb2RlKSAqLwogICBKSFVGRl9UQkwgKnB1YjsKIAotICAvKiBMb29rYWhlYWQgdGFibGVzOiBpbmRleGVkIGJ5IHRoZSBuZXh0IEhVRkZfTE9PS0FIRUFEIGJpdHMgb2YKKyAgLyogTG9va2FoZWFkIHRhYmxlczogaW5kZXhlZCBieSB0aGUgbmV4dCBIVUZGWF9MT09LQUhFQUQgYml0cyBvZgogICAgKiB0aGUgaW5wdXQgZGF0YSBzdHJlYW0uICBJZiB0aGUgbmV4dCBIdWZmbWFuIGNvZGUgaXMgbm8gbW9yZQotICAgKiB0aGFuIEhVRkZfTE9PS0FIRUFEIGJpdHMgbG9uZywgd2UgY2FuIG9idGFpbiBpdHMgbGVuZ3RoIGFuZAotICAgKiB0aGUgY29ycmVzcG9uZGluZyBzeW1ib2wgZGlyZWN0bHkgZnJvbSB0aGVzZSB0YWJsZXMuCisgICAqIHRoYW4gSFVGRlhfTE9PS0FIRUFELTEgYml0cyBsb25nLCB3ZSBjYW4gb2J0YWluIGl0cyBsZW5ndGgsCisgICAqIHRoZSBjb3JyZXNwb25kaW5nIHN5bWJvbCwgYW5kIHRoZSBlbmNvZGVkIGNvZWZmaWNpZW50IHZhbHVlCisgICAqIGRpcmVjdGx5IGZyb20gdGhlc2UgdGFibGVzLgogICAgKi8KLSAgaW50IGxvb2tfbmJpdHNbMTw8SFVGRl9MT09LQUhFQURdOyAvKiAjIGJpdHMsIG9yIDAgaWYgdG9vIGxvbmcgKi8KLSAgVUlOVDggbG9va19zeW1bMTw8SFVGRl9MT09LQUhFQURdOyAvKiBzeW1ib2wsIG9yIHVudXNlZCAqLworICBVSU5UOCBsb29reF9uYml0c1sxPDxIVUZGWF9MT09LQUhFQURdOyAgLyogIyBiaXRzLCBvciAwIGlmIHRvbyBsb25nICovCisgIElOVDE2IGxvb2t4X3ZhbFsxPDxIVUZGWF9MT09LQUhFQURdOyAgLyogY29lZmZpY2llbnQgdmFsdWUsIG9yIHVudXNlZCAqLworICBVSU5UOCBsb29reF9zeW1bMTw8SFVGRlhfTE9PS0FIRUFEXTsgIC8qIHN5bWJvbCwgb3IgdW51c2VkICovCiB9IGRfZGVyaXZlZF90Ymw7CiAKIC8qIEV4cGFuZCBhIEh1ZmZtYW4gdGFibGUgZGVmaW5pdGlvbiBpbnRvIHRoZSBkZXJpdmVkIGZvcm1hdCAqLwpAQCAtNzksNiArODgsMjEgQEAKICAqIGJlY2F1c2Ugbm90IGFsbCBtYWNoaW5lcyBtZWFzdXJlIHNpemVvZiBpbiA4LWJpdCBieXRlcy4KICAqLwogCisjaWZkZWYgU0xPV19TSElGVF8zMgorI2RlZmluZSBNSU5fR0VUX0JJVFMgIDE1CS8qIG1pbmltdW0gYWxsb3dhYmxlIHZhbHVlICovCisjZWxzZQorI2RlZmluZSBNSU5fR0VUX0JJVFMgIChCSVRfQlVGX1NJWkUtNykKKyNlbmRpZgorCisvKiBPbiBtb3N0IG1hY2hpbmVzIE1JTl9HRVRfQklUUyBzaG91bGQgYmUgMjUgdG8gYWxsb3cgdGhlIGZ1bGwgMzItYml0IHdpZHRoCisgKiBvZiBnZXRfYnVmZmVyIHRvIGJlIHVzZWQuICAoT24gbWFjaGluZXMgd2l0aCB3aWRlciB3b3JkcywgYW4gZXZlbiBsYXJnZXIKKyAqIGJ1ZmZlciBjb3VsZCBiZSB1c2VkLikgIEhvd2V2ZXIsIG9uIHNvbWUgbWFjaGluZXMgMzItYml0IHNoaWZ0cyBhcmUKKyAqIHF1aXRlIHNsb3cgYW5kIHRha2UgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBwbGFjZXMgc2hpZnRlZC4KKyAqIChUaGlzIGlzIHRydWUgd2l0aCBtb3N0IFBDIGNvbXBpbGVycywgZm9yIGluc3RhbmNlLikgIEluIHRoaXMgY2FzZSBpdCBtYXkKKyAqIGJlIGEgd2luIHRvIHNldCBNSU5fR0VUX0JJVFMgdG8gdGhlIG1pbmltdW0gdmFsdWUgb2YgMTUuICBUaGlzIHJlZHVjZXMgdGhlCisgKiBhdmVyYWdlIHNoaWZ0IGRpc3RhbmNlIGF0IHRoZSBjb3N0IG9mIG1vcmUgY2FsbHMgdG8ganBlZ19maWxsX2JpdF9idWZmZXIuCisgKi8KKwogdHlwZWRlZiBzdHJ1Y3QgewkJLyogQml0cmVhZGluZyBzdGF0ZSBzYXZlZCBhY3Jvc3MgTUNVcyAqLwogICBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlcjsJLyogY3VycmVudCBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KICAgaW50IGJpdHNfbGVmdDsJCS8qICMgb2YgdW51c2VkIGJpdHMgaW4gaXQgKi8KQEAgLTEwOSw3ICsxMzMsNyBAQAogCWJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZSA9IGNpbmZvcC0+c3JjLT5uZXh0X2lucHV0X2J5dGU7IFwKIAlicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgPSBjaW5mb3AtPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOyBcCiAJZ2V0X2J1ZmZlciA9IHBlcm1zdGF0ZS5nZXRfYnVmZmVyOyBcCi0JYml0c19sZWZ0ID0gcGVybXN0YXRlLmJpdHNfbGVmdDsKKwliaXRzX2xlZnQgPSBwZXJtc3RhdGUuYml0c19sZWZ0CiAKICNkZWZpbmUgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvcCxwZXJtc3RhdGUpICBcCiAJY2luZm9wLT5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9IGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZTsgXApAQCAtMTU1LDQ3ICsxNzksMTQgQEAKIAlKUFAoKGJpdHJlYWRfd29ya2luZ19zdGF0ZSAqIHN0YXRlLCByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwKIAkgICAgIHJlZ2lzdGVyIGludCBiaXRzX2xlZnQsIGludCBuYml0cykpOwogCi0KLS8qCi0gKiBDb2RlIGZvciBleHRyYWN0aW5nIG5leHQgSHVmZm1hbi1jb2RlZCBzeW1ib2wgZnJvbSBpbnB1dCBiaXQgc3RyZWFtLgotICogQWdhaW4sIHRoaXMgaXMgdGltZS1jcml0aWNhbCBhbmQgd2UgbWFrZSB0aGUgbWFpbiBwYXRocyBiZSBtYWNyb3MuCi0gKgotICogV2UgdXNlIGEgbG9va2FoZWFkIHRhYmxlIHRvIHByb2Nlc3MgY29kZXMgb2YgdXAgdG8gSFVGRl9MT09LQUhFQUQgYml0cwotICogd2l0aG91dCBsb29waW5nLiAgVXN1YWxseSwgbW9yZSB0aGFuIDk1JSBvZiB0aGUgSHVmZm1hbiBjb2RlcyB3aWxsIGJlIDgKLSAqIG9yIGZld2VyIGJpdHMgbG9uZy4gIFRoZSBmZXcgb3Zlcmxlbmd0aCBjb2RlcyBhcmUgaGFuZGxlZCB3aXRoIGEgbG9vcCwKLSAqIHdoaWNoIG5lZWQgbm90IGJlIGlubGluZSBjb2RlLgotICoKLSAqIE5vdGVzIGFib3V0IHRoZSBIVUZGX0RFQ09ERSBtYWNybzoKLSAqIDEuIE5lYXIgdGhlIGVuZCBvZiB0aGUgZGF0YSBzZWdtZW50LCB3ZSBtYXkgZmFpbCB0byBnZXQgZW5vdWdoIGJpdHMKLSAqICAgIGZvciBhIGxvb2thaGVhZC4gIEluIHRoYXQgY2FzZSwgd2UgZG8gaXQgdGhlIGhhcmQgd2F5LgotICogMi4gSWYgdGhlIGxvb2thaGVhZCB0YWJsZSBjb250YWlucyBubyBlbnRyeSwgdGhlIG5leHQgY29kZSBtdXN0IGJlCi0gKiAgICBtb3JlIHRoYW4gSFVGRl9MT09LQUhFQUQgYml0cyBsb25nLgotICogMy4ganBlZ19odWZmX2RlY29kZSByZXR1cm5zIC0xIGlmIGZvcmNlZCB0byBzdXNwZW5kLgotICovCi0KLSNkZWZpbmUgSFVGRl9ERUNPREUocmVzdWx0LHN0YXRlLGh0YmwsZmFpbGFjdGlvbixzbG93bGFiZWwpIFwKLXsgcmVnaXN0ZXIgaW50IG5iLCBsb29rOyBcCi0gIGlmIChiaXRzX2xlZnQgPCBIVUZGX0xPT0tBSEVBRCkgeyBcCi0gICAgaWYgKCEganBlZ19maWxsX2JpdF9idWZmZXIoJnN0YXRlLGdldF9idWZmZXIsYml0c19sZWZ0LCAwKSkge2ZhaWxhY3Rpb247fSBcCi0gICAgZ2V0X2J1ZmZlciA9IHN0YXRlLmdldF9idWZmZXI7IGJpdHNfbGVmdCA9IHN0YXRlLmJpdHNfbGVmdDsgXAotICAgIGlmIChiaXRzX2xlZnQgPCBIVUZGX0xPT0tBSEVBRCkgeyBcCi0gICAgICBuYiA9IDE7IGdvdG8gc2xvd2xhYmVsOyBcCi0gICAgfSBcCi0gIH0gXAotICBsb29rID0gUEVFS19CSVRTKEhVRkZfTE9PS0FIRUFEKTsgXAotICBpZiAoKG5iID0gaHRibC0+bG9va19uYml0c1tsb29rXSkgIT0gMCkgeyBcCi0gICAgRFJPUF9CSVRTKG5iKTsgXAotICAgIHJlc3VsdCA9IGh0YmwtPmxvb2tfc3ltW2xvb2tdOyBcCi0gIH0gZWxzZSB7IFwKLSAgICBuYiA9IEhVRkZfTE9PS0FIRUFEKzE7IFwKLXNsb3dsYWJlbDogXAotICAgIGlmICgocmVzdWx0PWpwZWdfaHVmZl9kZWNvZGUoJnN0YXRlLGdldF9idWZmZXIsYml0c19sZWZ0LGh0YmwsbmIpKSA8IDApIFwKLQl7IGZhaWxhY3Rpb247IH0gXAotICAgIGdldF9idWZmZXIgPSBzdGF0ZS5nZXRfYnVmZmVyOyBiaXRzX2xlZnQgPSBzdGF0ZS5iaXRzX2xlZnQ7IFwKLSAgfSBcCi19Ci0KIC8qIE91dC1vZi1saW5lIGNhc2UgZm9yIEh1ZmZtYW4gY29kZSBmZXRjaGluZyAqLwogRVhURVJOKGludCkganBlZ19odWZmX2RlY29kZQogCUpQUCgoYml0cmVhZF93b3JraW5nX3N0YXRlICogc3RhdGUsIHJlZ2lzdGVyIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyLAogCSAgICAgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwgZF9kZXJpdmVkX3RibCAqIGh0YmwsIGludCBtaW5fYml0cykpOworCisKKy8qCisgKiBGaWd1cmUgRi4xMjogZXh0ZW5kIHNpZ24gYml0LgorICovCisKKyNkZWZpbmUgSFVGRl9FWFRFTkQoeCxzKSAgKCh4KSA8ICgxPDwoKHMpLTEpKSA/ICh4KSArICgoKC0xKTw8KHMpKSArIDEpIDogKHgpKQpkaWZmIC0tZ2l0IGEvamRtZXJnZS5jIGIvamRtZXJnZS5jCmluZGV4IDM3NDQ0NDYuLmY0NDBkNDAgMTAwNjQ0Ci0tLSBhL2pkbWVyZ2UuYworKysgYi9qZG1lcmdlLmMKQEAgLTUsNiArNSwxMyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBmb3IgU0lNRCBleHRlbnNpb24uCisgKiBMYXN0IE1vZGlmaWVkIDogSmFudWFyeSA1LCAyMDA2CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgbWVyZ2VkIHVwc2FtcGxpbmcvY29sb3IgY29udmVyc2lvbi4KICAqCiAgKiBUaGlzIGZpbGUgY29tYmluZXMgZnVuY3Rpb25zIGZyb20gamRzYW1wbGUuYyBhbmQgamRjb2xvci5jOwpAQCAtMzUsNiArNDIsNyBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpjb2xzYW1wLmgiCQkvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyAqLwogCiAjaWZkZWYgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQKIApAQCAtMjE4LDYgKzIyNiwxNyBAQAogICovCiAKIAorI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorLyogb2Zmc2V0IG9mIGZpbGxlciBieXRlICovCisjZGVmaW5lIFJHQl9GSUxMRVIgICg2IC0gKFJHQl9SRUQpIC0gKFJHQl9HUkVFTikgLSAoUkdCX0JMVUUpKQorLyogYnl0ZSBwYXR0ZXJuIHRvIGZpbGwgd2l0aCAqLworI2lmZGVmIFJHQlhfRklMTEVSXzBYRkYKKyNkZWZpbmUgUkdCX0ZJTExFUl9CWVRFIDB4RkYKKyNlbHNlCisjZGVmaW5lIFJHQl9GSUxMRVJfQllURSAweDAwCisjZW5kaWYKKyNlbmRpZiAvKiBSR0JfUElYRUxTSVpFID09IDQgKi8KKwogLyoKICAqIFVwc2FtcGxlIGFuZCBjb2xvciBjb252ZXJ0IGZvciB0aGUgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgogICovCkBAIC0yNTgsMTEgKzI3NywxNyBAQAogICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOwogICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CiAgICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgIG91dHB0cltSR0JfRklMTEVSXSA9IFJHQl9GSUxMRVJfQllURTsKKyNlbmRpZgogICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOwogICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOwogICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOwogICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CiAgICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgIG91dHB0cltSR0JfRklMTEVSXSA9IFJHQl9GSUxMRVJfQllURTsKKyNlbmRpZgogICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOwogICB9CiAgIC8qIElmIGltYWdlIHdpZHRoIGlzIG9kZCwgZG8gdGhlIGxhc3Qgb3V0cHV0IGNvbHVtbiBzZXBhcmF0ZWx5ICovCkBAIC0yNzYsNiArMzAxLDkgQEAKICAgICBvdXRwdHJbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKICAgICBvdXRwdHJbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOwogICAgIG91dHB0cltSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyNpZiBSR0JfUElYRUxTSVpFID09IDQKKyAgICBvdXRwdHJbUkdCX0ZJTExFUl0gPSBSR0JfRklMTEVSX0JZVEU7CisjZW5kaWYKICAgfQogfQogCkBAIC0zMjIsMjEgKzM1MCwzMyBAQAogICAgIG91dHB0cjBbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKICAgICBvdXRwdHIwW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKICAgICBvdXRwdHIwW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgIG91dHB0cjBbUkdCX0ZJTExFUl0gPSBSR0JfRklMTEVSX0JZVEU7CisjZW5kaWYKICAgICBvdXRwdHIwICs9IFJHQl9QSVhFTFNJWkU7CiAgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAwKyspOwogICAgIG91dHB0cjBbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKICAgICBvdXRwdHIwW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKICAgICBvdXRwdHIwW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgIG91dHB0cjBbUkdCX0ZJTExFUl0gPSBSR0JfRklMTEVSX0JZVEU7CisjZW5kaWYKICAgICBvdXRwdHIwICs9IFJHQl9QSVhFTFNJWkU7CiAgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAxKyspOwogICAgIG91dHB0cjFbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKICAgICBvdXRwdHIxW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKICAgICBvdXRwdHIxW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgIG91dHB0cjFbUkdCX0ZJTExFUl0gPSBSR0JfRklMTEVSX0JZVEU7CisjZW5kaWYKICAgICBvdXRwdHIxICs9IFJHQl9QSVhFTFNJWkU7CiAgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAxKyspOwogICAgIG91dHB0cjFbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKICAgICBvdXRwdHIxW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKICAgICBvdXRwdHIxW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgIG91dHB0cjFbUkdCX0ZJTExFUl0gPSBSR0JfRklMTEVSX0JZVEU7CisjZW5kaWYKICAgICBvdXRwdHIxICs9IFJHQl9QSVhFTFNJWkU7CiAgIH0KICAgLyogSWYgaW1hZ2Ugd2lkdGggaXMgb2RkLCBkbyB0aGUgbGFzdCBvdXRwdXQgY29sdW1uIHNlcGFyYXRlbHkgKi8KQEAgLTM1MCwxMCArMzkwLDE2IEBACiAgICAgb3V0cHRyMFtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOwogICAgIG91dHB0cjBbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOwogICAgIG91dHB0cjBbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgb3V0cHRyMFtSR0JfRklMTEVSXSA9IFJHQl9GSUxMRVJfQllURTsKKyNlbmRpZgogICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMSk7CiAgICAgb3V0cHRyMVtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOwogICAgIG91dHB0cjFbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOwogICAgIG91dHB0cjFbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgb3V0cHRyMVtSR0JfRklMTEVSXSA9IFJHQl9GSUxMRVJfQllURTsKKyNlbmRpZgogICB9CiB9CiAKQEAgLTM3MCw2ICs0MTYsNyBAQAogamluaXRfbWVyZ2VkX3Vwc2FtcGxlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKIHsKICAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlOworICB1bnNpZ25lZCBpbnQgc2ltZCA9IGpwZWdfc2ltZF9zdXBwb3J0KChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKIAogICB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKQEAgLTM4MiwxOSArNDI5LDczIEBACiAKICAgaWYgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciA9PSAyKSB7CiAgICAgdXBzYW1wbGUtPnB1Yi51cHNhbXBsZSA9IG1lcmdlZF8ydl91cHNhbXBsZTsKLSAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBoMnYyX21lcmdlZF91cHNhbXBsZTsKKyNpZiBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0CisjaWZkZWYgSkRNRVJHRV9TU0UyX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfU1NFMiAmJgorICAgICAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMikpIHsKKyAgICAgIHVwc2FtcGxlLT51cG1ldGhvZCA9IGpwZWdfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICB9IGVsc2UKKyNlbmRpZgorI2lmZGVmIEpETUVSR0VfTU1YX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfTU1YKSB7CisgICAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBqcGVnX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teDsKKyAgICB9IGVsc2UKKyNlbmRpZgorI2VuZGlmIC8qIFJHQl9QSVhFTFNJWkUgPT0gMyB8fCBSR0JfUElYRUxTSVpFID09IDQgKi8KKyAgICB7CisgICAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBoMnYyX21lcmdlZF91cHNhbXBsZTsKKyAgICAgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOworICAgIH0KICAgICAvKiBBbGxvY2F0ZSBhIHNwYXJlIHJvdyBidWZmZXIgKi8KICAgICB1cHNhbXBsZS0+c3BhcmVfcm93ID0gKEpTQU1QUk9XKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19sYXJnZSkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKIAkJKHNpemVfdCkgKHVwc2FtcGxlLT5vdXRfcm93X3dpZHRoICogU0laRU9GKEpTQU1QTEUpKSk7CiAgIH0gZWxzZSB7CiAgICAgdXBzYW1wbGUtPnB1Yi51cHNhbXBsZSA9IG1lcmdlZF8xdl91cHNhbXBsZTsKLSAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBoMnYxX21lcmdlZF91cHNhbXBsZTsKKyNpZiBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0CisjaWZkZWYgSkRNRVJHRV9TU0UyX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfU1NFMiAmJgorICAgICAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMikpIHsKKyAgICAgIHVwc2FtcGxlLT51cG1ldGhvZCA9IGpwZWdfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICB9IGVsc2UKKyNlbmRpZgorI2lmZGVmIEpETUVSR0VfTU1YX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfTU1YKSB7CisgICAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBqcGVnX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teDsKKyAgICB9IGVsc2UKKyNlbmRpZgorI2VuZGlmIC8qIFJHQl9QSVhFTFNJWkUgPT0gMyB8fCBSR0JfUElYRUxTSVpFID09IDQgKi8KKyAgICB7CisgICAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBoMnYxX21lcmdlZF91cHNhbXBsZTsKKyAgICAgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOworICAgIH0KICAgICAvKiBObyBzcGFyZSByb3cgbmVlZGVkICovCiAgICAgdXBzYW1wbGUtPnNwYXJlX3JvdyA9IE5VTEw7CiAgIH0KLQotICBidWlsZF95Y2NfcmdiX3RhYmxlKGNpbmZvKTsKIH0KIAorCisjaWZuZGVmIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKworR0xPQkFMKHVuc2lnbmVkIGludCkKK2pwZWdfc2ltZF9tZXJnZWRfdXBzYW1wbGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICB1bnNpZ25lZCBpbnQgc2ltZCA9IGpwZWdfc2ltZF9zdXBwb3J0KChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKKworI2lmIFJHQl9QSVhFTFNJWkUgPT0gMyB8fCBSR0JfUElYRUxTSVpFID09IDQKKyNpZmRlZiBKRE1FUkdFX1NTRTJfU1VQUE9SVEVECisgIGlmIChzaW1kICYgSlNJTURfU1NFMiAmJgorICAgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpKQorICAgIHJldHVybiBKU0lNRF9TU0UyOworI2VuZGlmCisjaWZkZWYgSkRNRVJHRV9NTVhfU1VQUE9SVEVECisgIGlmIChzaW1kICYgSlNJTURfTU1YKQorICAgIHJldHVybiBKU0lNRF9NTVg7CisjZW5kaWYKKyNlbmRpZiAvKiBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0ICovCisKKyAgcmV0dXJuIEpTSU1EX05PTkU7Cit9CisKKyNlbmRpZiAvKiAhSlNJTURfTU9ERUlORk9fTk9UX1NVUFBPUlRFRCAqLwogI2VuZGlmIC8qIFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9qZG1lcm1teC5hc20gYi9qZG1lcm1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4ODUxNQotLS0gL2Rldi9udWxsCisrKyBiL2pkbWVybW14LmFzbQpAQCAtMCwwICsxLDk4MSBAQAorOworOyBqZG1lcm1teC5hc20gLSBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uIChNTVgpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgTGFzdCBNb2RpZmllZCA6IEZlYnJ1YXJ5IDQsIDIwMDYKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzIHx8IFJHQl9QSVhFTFNJWkUgPT0gNAorJWlmZGVmIFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVECislaWZkZWYgSkRNRVJHRV9NTVhfU1VQUE9SVEVECisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMJMTYKKworRl8wXzM0NAllcXUJIDIyNTU0CQkJOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQJZXF1CSA0NjgwMgkJCTsgRklYKDAuNzE0MTQpCitGXzFfNDAyCWVxdQkgOTE4ODEJCQk7IEZJWCgxLjQwMjAwKQorRl8xXzc3MgllcXUJMTE2MTMwCQkJOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIJZXF1CShGXzFfNDAyIC0gNjU1MzYpCTsgRklYKDEuNDAyMDApIC0gRklYKDEpCitGXzBfMjg1CWVxdQkoIDY1NTM2IC0gRl8wXzcxNCkJOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjgJZXF1CSgxMzEwNzIgLSBGXzFfNzcyKQk7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfbW14KQorCitFWFROKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfbW14KToKKworUFdfRjA0MDIJdGltZXMgNCBkdyAgRl8wXzQwMgorUFdfTUYwMjI4CXRpbWVzIDQgZHcgLUZfMF8yMjgKK1BXX01GMDM0NF9GMDI4NQl0aW1lcyAyIGR3IC1GXzBfMzQ0LCBGXzBfMjg1CitQV19PTkUJCXRpbWVzIDQgZHcgIDEKK1BEX09ORUhBTEYJdGltZXMgMiBkZCAgMSA8PCAoU0NBTEVCSVRTLTEpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFVwc2FtcGxlIGFuZCBjb2xvciBjb252ZXJ0IGZvciB0aGUgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19oMnYxX21lcmdlZF91cHNhbXBsZV9tbXggKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKKzsKKworJWRlZmluZSBjaW5mbyhiKQkJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBpbnB1dF9idWYoYikJCShiKSsxMgkJOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpCShiKSsxNgkJOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JECTsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkzCislZGVmaW5lIGdvdHB0cgkJd2soMCktU0laRU9GX1BPSU5URVIJOyB2b2lkICogZ290cHRyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14KQorCitFWFROKGpwZWdfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWF4CQk7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCisJbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllY3gsIFBPSU5URVIgW2NpbmZvKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbamRzdHJ1Y3Rfb3V0cHV0X3dpZHRoKGVjeCldCTsgY29sCisJdGVzdAllY3gsZWN4CisJanoJbmVhciAucmV0dXJuCisKKwlwdXNoCWVjeAorCisJbW92CWVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbaW5fcm93X2dyb3VwX2N0cihlYXgpXQorCW1vdgllc2ksIEpTQU1QQVJSQVkgW2VkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZHgsIEpTQU1QQVJSQVkgW2VkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0KKwltb3YJZXNpLCBKU0FNUFJPVyBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCQk7IGlucHRyMAorCW1vdgllYngsIEpTQU1QUk9XIFtlYngrZWN4KlNJWkVPRl9KU0FNUFJPV10JCTsgaW5wdHIxCisJbW92CWVkeCwgSlNBTVBST1cgW2VkeCtlY3gqU0laRU9GX0pTQU1QUk9XXQkJOyBpbnB0cjIKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQkJCQk7IG91dHB0cgorCisJcG9wCWVjeAkJCTsgY29sCisKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisJbW92cGljCWVheCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKworCW1vdnEgICAgICBtbTYsIE1NV09SRCBbZWJ4XQk7IG1tNj1DYigwMTIzNDU2NykKKwltb3ZxICAgICAgbW03LCBNTVdPUkQgW2VkeF0JOyBtbTc9Q3IoMDEyMzQ1NjcpCisKKwlweG9yICAgICAgbW0xLG1tMQkJOyBtbTE9KGFsbCAwJ3MpCisJcGNtcGVxdyAgIG1tMyxtbTMKKwlwc2xsdyAgICAgbW0zLDcJCQk7IG1tMz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwfQorCisJbW92cSAgICAgIG1tNCxtbTYKKwlwdW5wY2toYncgbW02LG1tMQkJOyBtbTY9Q2IoNDU2Nyk9Q2JICisJcHVucGNrbGJ3IG1tNCxtbTEJCTsgbW00PUNiKDAxMjMpPUNiTAorCW1vdnEgICAgICBtbTAsbW03CisJcHVucGNraGJ3IG1tNyxtbTEJCTsgbW03PUNyKDQ1NjcpPUNySAorCXB1bnBja2xidyBtbTAsbW0xCQk7IG1tMD1DcigwMTIzKT1DckwKKworCXBhZGR3ICAgICBtbTYsbW0zCisJcGFkZHcgICAgIG1tNCxtbTMKKwlwYWRkdyAgICAgbW03LG1tMworCXBhZGR3ICAgICBtbTAsbW0zCisKKwk7IChPcmlnaW5hbCkKKwk7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCisJOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorCTsgQiA9IFkgKyAxLjc3MjAwICogQ2IKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IFIgPSBZICAgICAgICAgICAgICAgICsgMC40MDIwMCAqIENyICsgQ3IKKwk7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKKwk7IEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgorCisJbW92cQltbTUsbW02CQkJOyBtbTU9Q2JICisJbW92cQltbTIsbW00CQkJOyBtbTI9Q2JMCisJcGFkZHcJbW02LG1tNgkJCTsgbW02PTIqQ2JICisJcGFkZHcJbW00LG1tNAkJCTsgbW00PTIqQ2JMCisJbW92cQltbTEsbW03CQkJOyBtbTE9Q3JICisJbW92cQltbTMsbW0wCQkJOyBtbTM9Q3JMCisJcGFkZHcJbW03LG1tNwkJCTsgbW03PTIqQ3JICisJcGFkZHcJbW0wLG1tMAkJCTsgbW0wPTIqQ3JMCisKKwlwbXVsaHcJbW02LFtHT1RPRkYoZWF4LFBXX01GMDIyOCldCTsgbW02PSgyKkNiSCAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CW1tNCxbR09UT0ZGKGVheCxQV19NRjAyMjgpXQk7IG1tND0oMipDYkwgKiAtRklYKDAuMjI4MDApKQorCXBtdWxodwltbTcsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IG1tNz0oMipDckggKiBGSVgoMC40MDIwMCkpCisJcG11bGh3CW1tMCxbR09UT0ZGKGVheCxQV19GMDQwMildCTsgbW0wPSgyKkNyTCAqIEZJWCgwLjQwMjAwKSkKKworCXBhZGR3CW1tNixbR09UT0ZGKGVheCxQV19PTkUpXQorCXBhZGR3CW1tNCxbR09UT0ZGKGVheCxQV19PTkUpXQorCXBzcmF3CW1tNiwxCQkJOyBtbTY9KENiSCAqIC1GSVgoMC4yMjgwMCkpCisJcHNyYXcJbW00LDEJCQk7IG1tND0oQ2JMICogLUZJWCgwLjIyODAwKSkKKwlwYWRkdwltbTcsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwYWRkdwltbTAsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwc3JhdwltbTcsMQkJCTsgbW03PShDckggKiBGSVgoMC40MDIwMCkpCisJcHNyYXcJbW0wLDEJCQk7IG1tMD0oQ3JMICogRklYKDAuNDAyMDApKQorCisJcGFkZHcJbW02LG1tNQorCXBhZGR3CW1tNCxtbTIKKwlwYWRkdwltbTYsbW01CQkJOyBtbTY9KENiSCAqIEZJWCgxLjc3MjAwKSk9KEItWSlICisJcGFkZHcJbW00LG1tMgkJCTsgbW00PShDYkwgKiBGSVgoMS43NzIwMCkpPShCLVkpTAorCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz0oQ3JIICogRklYKDEuNDAyMDApKT0oUi1ZKUgKKwlwYWRkdwltbTAsbW0zCQkJOyBtbTA9KENyTCAqIEZJWCgxLjQwMjAwKSk9KFItWSlMCisKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTYJOyB3aygwKT0oQi1ZKUgKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTcJOyB3aygxKT0oUi1ZKUgKKworCW1vdnEgICAgICBtbTYsbW01CisJbW92cSAgICAgIG1tNyxtbTIKKwlwdW5wY2tsd2QgbW01LG1tMQorCXB1bnBja2h3ZCBtbTYsbW0xCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKwlwdW5wY2tsd2QgbW0yLG1tMworCXB1bnBja2h3ZCBtbTcsbW0zCisJcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKworCXBhZGRkICAgICBtbTUsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisJcGFkZGQgICAgIG1tNixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKwlwc3JhZCAgICAgbW01LFNDQUxFQklUUworCXBzcmFkICAgICBtbTYsU0NBTEVCSVRTCisJcGFkZGQgICAgIG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKwlwYWRkZCAgICAgbW03LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICBtbTIsU0NBTEVCSVRTCisJcHNyYWQgICAgIG1tNyxTQ0FMRUJJVFMKKworCXBhY2tzc2R3ICBtbTUsbW02CTsgbW01PUNiSCotRklYKDAuMzQ0KStDckgqRklYKDAuMjg1KQorCXBhY2tzc2R3ICBtbTIsbW03CTsgbW0yPUNiTCotRklYKDAuMzQ0KStDckwqRklYKDAuMjg1KQorCXBzdWJ3ICAgICBtbTUsbW0xCTsgbW01PUNiSCotRklYKDAuMzQ0KStDckgqLUZJWCgwLjcxNCk9KEctWSlICisJcHN1YncgICAgIG1tMixtbTMJOyBtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCotRklYKDAuNzE0KT0oRy1ZKUwKKworCW1vdnEJTU1XT1JEIFt3aygyKV0sIG1tNQk7IHdrKDIpPShHLVkpSAorCisJbW92CWFsLDIJCQk7IFljdHIKKwlqbXAJc2hvcnQgLllsb29wXzFzdAorCWFsaWdueAkxNiw3CisKKy5ZbG9vcF8ybmQ6CisJbW92cQltbTAsIE1NV09SRCBbd2soMSldCTsgbW0wPShSLVkpSAorCW1vdnEJbW0yLCBNTVdPUkQgW3drKDIpXQk7IG1tMj0oRy1ZKUgKKwltb3ZxCW1tNCwgTU1XT1JEIFt3aygwKV0JOyBtbTQ9KEItWSlICisJYWxpZ254CTE2LDcKKworLllsb29wXzFzdDoKKwltb3ZxCW1tNywgTU1XT1JEIFtlc2ldCTsgbW03PVkoMDEyMzQ1NjcpCisKKwlwY21wZXF3CW1tNixtbTYKKwlwc3JsdwltbTYsQllURV9CSVQJCTsgbW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCXBhbmQJbW02LG1tNwkJCTsgbW02PVkoMDI0Nik9WUUKKwlwc3JsdwltbTcsQllURV9CSVQJCTsgbW03PVkoMTM1Nyk9WU8KKworCW1vdnEJbW0xLG1tMAkJCTsgbW0xPW1tMD0oUi1ZKShML0gpCisJbW92cQltbTMsbW0yCQkJOyBtbTM9bW0yPShHLVkpKEwvSCkKKwltb3ZxCW1tNSxtbTQJCQk7IG1tNT1tbTQ9KEItWSkoTC9IKQorCisJcGFkZHcgICAgIG1tMCxtbTYJCTsgbW0wPSgoUi1ZKStZRSk9UkU9KFIwIFIyIFI0IFI2KQorCXBhZGR3ICAgICBtbTEsbW03CQk7IG1tMT0oKFItWSkrWU8pPVJPPShSMSBSMyBSNSBSNykKKwlwYWNrdXN3YiAgbW0wLG1tMAkJOyBtbTA9KFIwIFIyIFI0IFI2ICoqICoqICoqICoqKQorCXBhY2t1c3diICBtbTEsbW0xCQk7IG1tMT0oUjEgUjMgUjUgUjcgKiogKiogKiogKiopCisKKwlwYWRkdyAgICAgbW0yLG1tNgkJOyBtbTI9KChHLVkpK1lFKT1HRT0oRzAgRzIgRzQgRzYpCisJcGFkZHcgICAgIG1tMyxtbTcJCTsgbW0zPSgoRy1ZKStZTyk9R089KEcxIEczIEc1IEc3KQorCXBhY2t1c3diICBtbTIsbW0yCQk7IG1tMj0oRzAgRzIgRzQgRzYgKiogKiogKiogKiopCisJcGFja3Vzd2IgIG1tMyxtbTMJCTsgbW0zPShHMSBHMyBHNSBHNyAqKiAqKiAqKiAqKikKKworCXBhZGR3ICAgICBtbTQsbW02CQk7IG1tND0oKEItWSkrWUUpPUJFPShCMCBCMiBCNCBCNikKKwlwYWRkdyAgICAgbW01LG1tNwkJOyBtbTU9KChCLVkpK1lPKT1CTz0oQjEgQjMgQjUgQjcpCisJcGFja3Vzd2IgIG1tNCxtbTQJCTsgbW00PShCMCBCMiBCNCBCNiAqKiAqKiAqKiAqKikKKwlwYWNrdXN3YiAgbW01LG1tNQkJOyBtbTU9KEIxIEIzIEI1IEI3ICoqICoqICoqICoqKQorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzIDsgLS0tLS0tLS0tLS0tLS0tCisKKwk7IG1tQT0oMDAgMDIgMDQgMDYgKiogKiogKiogKiopLCBtbUI9KDAxIDAzIDA1IDA3ICoqICoqICoqICoqKQorCTsgbW1DPSgxMCAxMiAxNCAxNiAqKiAqKiAqKiAqKiksIG1tRD0oMTEgMTMgMTUgMTcgKiogKiogKiogKiopCisJOyBtbUU9KDIwIDIyIDI0IDI2ICoqICoqICoqICoqKSwgbW1GPSgyMSAyMyAyNSAyNyAqKiAqKiAqKiAqKikKKwk7IG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiopLCBtbUg9KCoqICoqICoqICoqICoqICoqICoqICoqKQorCisJcHVucGNrbGJ3IG1tQSxtbUMJCTsgbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikKKwlwdW5wY2tsYncgbW1FLG1tQgkJOyBtbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3KQorCXB1bnBja2xidyBtbUQsbW1GCQk7IG1tRD0oMTEgMjEgMTMgMjMgMTUgMjUgMTcgMjcpCisKKwltb3ZxICAgICAgbW1HLG1tQQorCW1vdnEgICAgICBtbUgsbW1BCisJcHVucGNrbHdkIG1tQSxtbUUJCTsgbW1BPSgwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKwlwdW5wY2tod2QgbW1HLG1tRQkJOyBtbUc9KDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3KQorCisJcHNybHEgICAgIG1tSCwyKkJZVEVfQklUCTsgbW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAtLSAtLSkKKwlwc3JscSAgICAgbW1FLDIqQllURV9CSVQJOyBtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IC0tIC0tKQorCisJbW92cSAgICAgIG1tQyxtbUQKKwltb3ZxICAgICAgbW1CLG1tRAorCXB1bnBja2x3ZCBtbUQsbW1ICQk7IG1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQpCisJcHVucGNraHdkIG1tQyxtbUgJCTsgbW1DPSgxNSAyNSAwNiAxNiAxNyAyNyAtLSAtLSkKKworCXBzcmxxICAgICBtbUIsMipCWVRFX0JJVAk7IG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgLS0gLS0pCisKKwltb3ZxICAgICAgbW1GLG1tRQorCXB1bnBja2x3ZCBtbUUsbW1CCQk7IG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUpCisJcHVucGNraHdkIG1tRixtbUIJCTsgbW1GPSgyNiAwNyAxNyAyNyAtLSAtLSAtLSAtLSkKKworCXB1bnBja2xkcSBtbUEsbW1ECQk7IG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIpCisJcHVucGNrbGRxIG1tRSxtbUcJCTsgbW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKKwlwdW5wY2tsZHEgbW1DLG1tRgkJOyBtbUM9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3KQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDE2CisKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1FCisJbW92cQlNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKKworCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWp6CXNob3J0IC5lbmRjb2x1bW4KKworCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjAKKwlkZWMJYWwJCQk7IFljdHIKKwlqbnoJbmVhciAuWWxvb3BfMm5kCisKKwlhZGQJZWJ4LCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIyCisJam1wCW5lYXIgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1uX3N0MTY6CisJbGVhCWVjeCwgW2VjeCtlY3gqMl0JOyBpbXVsIGVjeCwgUkdCX1BJWEVMU0laRQorCWNtcAllY3gsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDgKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1FCisJbW92cQltbUEsbW1DCisJc3ViCWVjeCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKwlhZGQJZWRpLCBieXRlIDIqU0laRU9GX01NV09SRAorCWptcAlzaG9ydCAuY29sdW1uX3N0NAorLmNvbHVtbl9zdDg6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDQKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQorCW1vdnEJbW1BLG1tRQorCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX01NV09SRAorLmNvbHVtbl9zdDQ6CisJbW92ZAllYXgsbW1BCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MgorCW1vdglEV09SRCBbZWRpKzAqU0laRU9GX0RXT1JEXSwgZWF4CisJcHNybHEJbW1BLERXT1JEX0JJVAorCW1vdmQJZWF4LG1tQQorCXN1YgllY3gsIGJ5dGUgU0laRU9GX0RXT1JECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfRFdPUkQKKy5jb2x1bW5fc3QyOgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX1dPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MQorCW1vdglXT1JEIFtlZGkrMCpTSVpFT0ZfV09SRF0sIGF4CisJc2hyCWVheCxXT1JEX0JJVAorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1dPUkQKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9XT1JECisuY29sdW1uX3N0MToKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9CWVRFCisJamIJc2hvcnQgLmVuZGNvbHVtbgorCW1vdglCWVRFIFtlZGkrMCpTSVpFT0ZfQllURV0sIGFsCisKKyVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworJWlmZGVmIFJHQlhfRklMTEVSXzBYRkYKKwlwY21wZXFiICAgbW02LG1tNgkJOyBtbTY9KFgwIFgyIFg0IFg2ICoqICoqICoqICoqKQorCXBjbXBlcWIgICBtbTcsbW03CQk7IG1tNz0oWDEgWDMgWDUgWDcgKiogKiogKiogKiopCislZWxzZQorCXB4b3IgICAgICBtbTYsbW02CQk7IG1tNj0oWDAgWDIgWDQgWDYgKiogKiogKiogKiopCisJcHhvciAgICAgIG1tNyxtbTcJCTsgbW03PShYMSBYMyBYNSBYNyAqKiAqKiAqKiAqKikKKyVlbmRpZgorCTsgbW1BPSgwMCAwMiAwNCAwNiAqKiAqKiAqKiAqKiksIG1tQj0oMDEgMDMgMDUgMDcgKiogKiogKiogKiopCisJOyBtbUM9KDEwIDEyIDE0IDE2ICoqICoqICoqICoqKSwgbW1EPSgxMSAxMyAxNSAxNyAqKiAqKiAqKiAqKikKKwk7IG1tRT0oMjAgMjIgMjQgMjYgKiogKiogKiogKiopLCBtbUY9KDIxIDIzIDI1IDI3ICoqICoqICoqICoqKQorCTsgbW1HPSgzMCAzMiAzNCAzNiAqKiAqKiAqKiAqKiksIG1tSD0oMzEgMzMgMzUgMzcgKiogKiogKiogKiopCisKKwlwdW5wY2tsYncgbW1BLG1tQwkJOyBtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2KQorCXB1bnBja2xidyBtbUUsbW1HCQk7IG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYpCisJcHVucGNrbGJ3IG1tQixtbUQJCTsgbW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNykKKwlwdW5wY2tsYncgbW1GLG1tSAkJOyBtbUY9KDIxIDMxIDIzIDMzIDI1IDM1IDI3IDM3KQorCisJbW92cSAgICAgIG1tQyxtbUEKKwlwdW5wY2tsd2QgbW1BLG1tRQkJOyBtbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyKQorCXB1bnBja2h3ZCBtbUMsbW1FCQk7IG1tQz0oMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisJbW92cSAgICAgIG1tRyxtbUIKKwlwdW5wY2tsd2QgbW1CLG1tRgkJOyBtbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzKQorCXB1bnBja2h3ZCBtbUcsbW1GCQk7IG1tRz0oMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCisKKwltb3ZxICAgICAgbW1ELG1tQQorCXB1bnBja2xkcSBtbUEsbW1CCQk7IG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisJcHVucGNraGRxIG1tRCxtbUIJCTsgbW1EPSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwltb3ZxICAgICAgbW1ILG1tQworCXB1bnBja2xkcSBtbUMsbW1HCQk7IG1tQz0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisJcHVucGNraGRxIG1tSCxtbUcJCTsgbW1IPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNgorCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRAorCW1vdnEJTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW1DCisJbW92cQlNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbUgKKworCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWp6CXNob3J0IC5lbmRjb2x1bW4KKworCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjAKKwlkZWMJYWwJCQk7IFljdHIKKwlqbnoJbmVhciAuWWxvb3BfMm5kCisKKwlhZGQJZWJ4LCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIyCisJam1wCW5lYXIgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1uX3N0MTY6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzIKKwlqYglzaG9ydCAuY29sdW1uX3N0OAorCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisJbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUQKKwltb3ZxCW1tQSxtbUMKKwltb3ZxCW1tRCxtbUgKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvMgorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0ODoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAorCWpiCXNob3J0IC5jb2x1bW5fc3Q0CisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCW1tQSxtbUQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAorCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NDoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvOAorCWpiCXNob3J0IC5lbmRjb2x1bW4KKwltb3ZkCURXT1JEIFtlZGkrMCpTSVpFT0ZfRFdPUkRdLCBtbUEKKworJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisuZW5kY29sdW1uOgorCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCislaWZuZGVmIFVTRV9ERURJQ0FURURfSDJWMl9NRVJHRURfVVBTQU1QTEVfTU1YCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworOworCislZGVmaW5lIGNpbmZvKGIpCQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGlucHV0X2J1ZihiKQkJKGIpKzEyCQk7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGluX3Jvd19ncm91cF9jdHIoYikJKGIpKzE2CQk7IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorJWRlZmluZSBvdXRwdXRfYnVmKGIpCQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14KQorCitFWFROKGpwZWdfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdgllYXgsIFBPSU5URVIgW2NpbmZvKGVicCldCisKKwltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWJwKV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVicCldCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXQorCWxlYQllc2ksIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10KKworCXB1c2gJZWR4CQkJOyBpbnB0cjIKKwlwdXNoCWVieAkJCTsgaW5wdHIxCisJcHVzaAllc2kJCQk7IGlucHRyMDAKKwltb3YJZWJ4LGVzcAorCisJcHVzaAllZGkJCQk7IG91dHB1dF9idWYgKG91dHB0cjApCisJcHVzaAllY3gJCQk7IGluX3Jvd19ncm91cF9jdHIKKwlwdXNoCWVieAkJCTsgaW5wdXRfYnVmCisJcHVzaAllYXgJCQk7IGNpbmZvCisKKwljYWxsCW5lYXIgRVhUTihqcGVnX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCkKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdHIwMQorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHRyMQorCW1vdglQT0lOVEVSIFtlYngrMCpTSVpFT0ZfUE9JTlRFUl0sIGVzaQorCW1vdglQT0lOVEVSIFtlYngtMSpTSVpFT0ZfUE9JTlRFUl0sIGVkaQorCisJY2FsbAluZWFyIEVYVE4oanBlZ19oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgpCisKKwlhZGQJZXNwLCBieXRlIDcqU0laRU9GX0RXT1JECisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKyVlbHNlICA7IFVTRV9ERURJQ0FURURfSDJWMl9NRVJHRURfVVBTQU1QTEVfTU1YCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworOworCislZGVmaW5lIGNpbmZvKGIpCQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGlucHV0X2J1ZihiKQkJKGIpKzEyCQk7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGluX3Jvd19ncm91cF9jdHIoYikJKGIpKzE2CQk7IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorJWRlZmluZSBvdXRwdXRfYnVmKGIpCQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTEwCislZGVmaW5lIGlucHRyMQkJd2soMCktU0laRU9GX0pTQU1QUk9XCTsgSlNBTVBST1cgaW5wdHIxCislZGVmaW5lIGlucHRyMgkJaW5wdHIxLVNJWkVPRl9KU0FNUFJPVwk7IEpTQU1QUk9XIGlucHRyMgorJWRlZmluZSBnb3RwdHIJCWlucHRyMi1TSVpFT0ZfUE9JTlRFUgk7IHZvaWQgKiBnb3RwdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19oMnYyX21lcmdlZF91cHNhbXBsZV9tbXgpCisKK0VYVE4oanBlZ19oMnYyX21lcmdlZF91cHNhbXBsZV9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbaW5wdHIyXQorCXB1c2hwaWMJZWF4CQk7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCisJbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllY3gsIFBPSU5URVIgW2NpbmZvKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbamRzdHJ1Y3Rfb3V0cHV0X3dpZHRoKGVjeCldCTsgY29sCisJdGVzdAllY3gsZWN4CisJanoJbmVhciAucmV0dXJuCisKKwlwdXNoCWVjeAorCisJbW92CWVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbaW5fcm93X2dyb3VwX2N0cihlYXgpXQorCW1vdgllc2ksIEpTQU1QQVJSQVkgW2VkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZHgsIEpTQU1QQVJSQVkgW2VkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0KKwltb3YJZWF4LCBKU0FNUFJPVyBbZXNpKyhlY3gqMiswKSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIwMAorCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krKGVjeCoyKzEpKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjAxCisJbW92CWVieCwgSlNBTVBST1cgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQkJOyBpbnB0cjEKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCQk7IGlucHRyMgorCisJcG9wCWVjeAkJOyBjb2wKKwlwdXNoCWVheAkJOyBpbnB0cjAwCisJcHVzaAllc2kJCTsgaW5wdHIwMQorCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10JCTsgb3V0cHRyMAorCW1vdgllZGksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCQk7IG91dHB0cjEKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisJbW92cGljCWVheCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKworCW1vdnEJbW02LCBNTVdPUkQgW2VieF0JOyBtbTY9Q2IoMDEyMzQ1NjcpCisJbW92cQltbTcsIE1NV09SRCBbZWR4XQk7IG1tNz1DcigwMTIzNDU2NykKKworCW1vdglKU0FNUFJPVyBbaW5wdHIxXSwgZWJ4CTsgaW5wdHIxCisJbW92CUpTQU1QUk9XIFtpbnB0cjJdLCBlZHgJOyBpbnB0cjIKKwlwb3AJZWR4CQkJOyBlZHg9aW5wdHIwMQorCXBvcAllYngJCQk7IGVieD1pbnB0cjAwCisKKwlweG9yICAgICAgbW0xLG1tMQkJOyBtbTE9KGFsbCAwJ3MpCisJcGNtcGVxdyAgIG1tMyxtbTMKKwlwc2xsdyAgICAgbW0zLDcJCQk7IG1tMz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwfQorCisJbW92cSAgICAgIG1tNCxtbTYKKwlwdW5wY2toYncgbW02LG1tMQkJOyBtbTY9Q2IoNDU2Nyk9Q2JICisJcHVucGNrbGJ3IG1tNCxtbTEJCTsgbW00PUNiKDAxMjMpPUNiTAorCW1vdnEgICAgICBtbTAsbW03CisJcHVucGNraGJ3IG1tNyxtbTEJCTsgbW03PUNyKDQ1NjcpPUNySAorCXB1bnBja2xidyBtbTAsbW0xCQk7IG1tMD1DcigwMTIzKT1DckwKKworCXBhZGR3ICAgICBtbTYsbW0zCisJcGFkZHcgICAgIG1tNCxtbTMKKwlwYWRkdyAgICAgbW03LG1tMworCXBhZGR3ICAgICBtbTAsbW0zCisKKwk7IChPcmlnaW5hbCkKKwk7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCisJOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorCTsgQiA9IFkgKyAxLjc3MjAwICogQ2IKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IFIgPSBZICAgICAgICAgICAgICAgICsgMC40MDIwMCAqIENyICsgQ3IKKwk7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKKwk7IEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgorCisJbW92cQltbTUsbW02CQkJOyBtbTU9Q2JICisJbW92cQltbTIsbW00CQkJOyBtbTI9Q2JMCisJcGFkZHcJbW02LG1tNgkJCTsgbW02PTIqQ2JICisJcGFkZHcJbW00LG1tNAkJCTsgbW00PTIqQ2JMCisJbW92cQltbTEsbW03CQkJOyBtbTE9Q3JICisJbW92cQltbTMsbW0wCQkJOyBtbTM9Q3JMCisJcGFkZHcJbW03LG1tNwkJCTsgbW03PTIqQ3JICisJcGFkZHcJbW0wLG1tMAkJCTsgbW0wPTIqQ3JMCisKKwlwbXVsaHcJbW02LFtHT1RPRkYoZWF4LFBXX01GMDIyOCldCTsgbW02PSgyKkNiSCAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CW1tNCxbR09UT0ZGKGVheCxQV19NRjAyMjgpXQk7IG1tND0oMipDYkwgKiAtRklYKDAuMjI4MDApKQorCXBtdWxodwltbTcsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IG1tNz0oMipDckggKiBGSVgoMC40MDIwMCkpCisJcG11bGh3CW1tMCxbR09UT0ZGKGVheCxQV19GMDQwMildCTsgbW0wPSgyKkNyTCAqIEZJWCgwLjQwMjAwKSkKKworCXBhZGR3CW1tNixbR09UT0ZGKGVheCxQV19PTkUpXQorCXBhZGR3CW1tNCxbR09UT0ZGKGVheCxQV19PTkUpXQorCXBzcmF3CW1tNiwxCQkJOyBtbTY9KENiSCAqIC1GSVgoMC4yMjgwMCkpCisJcHNyYXcJbW00LDEJCQk7IG1tND0oQ2JMICogLUZJWCgwLjIyODAwKSkKKwlwYWRkdwltbTcsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwYWRkdwltbTAsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwc3JhdwltbTcsMQkJCTsgbW03PShDckggKiBGSVgoMC40MDIwMCkpCisJcHNyYXcJbW0wLDEJCQk7IG1tMD0oQ3JMICogRklYKDAuNDAyMDApKQorCisJcGFkZHcJbW02LG1tNQorCXBhZGR3CW1tNCxtbTIKKwlwYWRkdwltbTYsbW01CQkJOyBtbTY9KENiSCAqIEZJWCgxLjc3MjAwKSk9KEItWSlICisJcGFkZHcJbW00LG1tMgkJCTsgbW00PShDYkwgKiBGSVgoMS43NzIwMCkpPShCLVkpTAorCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz0oQ3JIICogRklYKDEuNDAyMDApKT0oUi1ZKUgKKwlwYWRkdwltbTAsbW0zCQkJOyBtbTA9KENyTCAqIEZJWCgxLjQwMjAwKSk9KFItWSlMCisKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTYJOyB3aygwKT0oQi1ZKUgKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTcJOyB3aygxKT0oUi1ZKUgKKworCW1vdnEgICAgICBtbTYsbW01CisJbW92cSAgICAgIG1tNyxtbTIKKwlwdW5wY2tsd2QgbW01LG1tMQorCXB1bnBja2h3ZCBtbTYsbW0xCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKwlwdW5wY2tsd2QgbW0yLG1tMworCXB1bnBja2h3ZCBtbTcsbW0zCisJcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKworCXBhZGRkICAgICBtbTUsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisJcGFkZGQgICAgIG1tNixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKwlwc3JhZCAgICAgbW01LFNDQUxFQklUUworCXBzcmFkICAgICBtbTYsU0NBTEVCSVRTCisJcGFkZGQgICAgIG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKwlwYWRkZCAgICAgbW03LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICBtbTIsU0NBTEVCSVRTCisJcHNyYWQgICAgIG1tNyxTQ0FMRUJJVFMKKworCXBhY2tzc2R3ICBtbTUsbW02CTsgbW01PUNiSCotRklYKDAuMzQ0KStDckgqRklYKDAuMjg1KQorCXBhY2tzc2R3ICBtbTIsbW03CTsgbW0yPUNiTCotRklYKDAuMzQ0KStDckwqRklYKDAuMjg1KQorCXBzdWJ3ICAgICBtbTUsbW0xCTsgbW01PUNiSCotRklYKDAuMzQ0KStDckgqLUZJWCgwLjcxNCk9KEctWSlICisJcHN1YncgICAgIG1tMixtbTMJOyBtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCotRklYKDAuNzE0KT0oRy1ZKUwKKworCW1vdnEJTU1XT1JEIFt3aygyKV0sIG1tNQk7IHdrKDIpPShHLVkpSAorCisJbW92CWFoLDIJCQk7IFlIY3RyCisJam1wCXNob3J0IC5ZSGxvb3BfMXN0CisJYWxpZ254CTE2LDcKKworLllIbG9vcF8ybmQ6CisJbW92cQltbTAsIE1NV09SRCBbd2soMSldCTsgbW0wPShSLVkpSAorCW1vdnEJbW0yLCBNTVdPUkQgW3drKDIpXQk7IG1tMj0oRy1ZKUgKKwltb3ZxCW1tNCwgTU1XT1JEIFt3aygwKV0JOyBtbTQ9KEItWSlICisJYWxpZ254CTE2LDcKKworLllIbG9vcF8xc3Q6CisJbW92cQlNTVdPUkQgW3drKDMpXSwgbW0wCTsgd2soMyk9KFItWSkoTC9IKQorCW1vdnEJTU1XT1JEIFt3ayg0KV0sIG1tMgk7IHdrKDQpPShHLVkpKEwvSCkKKwltb3ZxCU1NV09SRCBbd2soNSldLCBtbTQJOyB3ayg1KT0oQi1ZKShML0gpCisKKwltb3ZxCW1tNywgTU1XT1JEIFtlYnhdCTsgbW03PVkoMDEyMzQ1NjcpCisKKwltb3YJYWwsMgkJCTsgWVZjdHIKKwlqbXAJc2hvcnQgLllWbG9vcF8xc3QKKwlhbGlnbngJMTYsNworCisuWVZsb29wXzJuZDoKKwltb3ZxCW1tMCwgTU1XT1JEIFt3aygzKV0JOyBtbTA9KFItWSkoTC9IKQorCW1vdnEJbW0yLCBNTVdPUkQgW3drKDQpXQk7IG1tMj0oRy1ZKShML0gpCisJbW92cQltbTQsIE1NV09SRCBbd2soNSldCTsgbW00PShCLVkpKEwvSCkKKworCW1vdnEJbW03LCBNTVdPUkQgW2VkeF0JOyBtbTc9WSgwMTIzNDU2NykKKwlhbGlnbngJMTYsNworCisuWVZsb29wXzFzdDoKKwlwY21wZXF3CW1tNixtbTYKKwlwc3JsdwltbTYsQllURV9CSVQJCTsgbW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCXBhbmQJbW02LG1tNwkJCTsgbW02PVkoMDI0Nik9WUUKKwlwc3JsdwltbTcsQllURV9CSVQJCTsgbW03PVkoMTM1Nyk9WU8KKworCW1vdnEJbW0xLG1tMAkJCTsgbW0xPW1tMD0oUi1ZKShML0gpCisJbW92cQltbTMsbW0yCQkJOyBtbTM9bW0yPShHLVkpKEwvSCkKKwltb3ZxCW1tNSxtbTQJCQk7IG1tNT1tbTQ9KEItWSkoTC9IKQorCisJcGFkZHcgICAgIG1tMCxtbTYJCTsgbW0wPSgoUi1ZKStZRSk9UkU9KFIwIFIyIFI0IFI2KQorCXBhZGR3ICAgICBtbTEsbW03CQk7IG1tMT0oKFItWSkrWU8pPVJPPShSMSBSMyBSNSBSNykKKwlwYWNrdXN3YiAgbW0wLG1tMAkJOyBtbTA9KFIwIFIyIFI0IFI2ICoqICoqICoqICoqKQorCXBhY2t1c3diICBtbTEsbW0xCQk7IG1tMT0oUjEgUjMgUjUgUjcgKiogKiogKiogKiopCisKKwlwYWRkdyAgICAgbW0yLG1tNgkJOyBtbTI9KChHLVkpK1lFKT1HRT0oRzAgRzIgRzQgRzYpCisJcGFkZHcgICAgIG1tMyxtbTcJCTsgbW0zPSgoRy1ZKStZTyk9R089KEcxIEczIEc1IEc3KQorCXBhY2t1c3diICBtbTIsbW0yCQk7IG1tMj0oRzAgRzIgRzQgRzYgKiogKiogKiogKiopCisJcGFja3Vzd2IgIG1tMyxtbTMJCTsgbW0zPShHMSBHMyBHNSBHNyAqKiAqKiAqKiAqKikKKworCXBhZGR3ICAgICBtbTQsbW02CQk7IG1tND0oKEItWSkrWUUpPUJFPShCMCBCMiBCNCBCNikKKwlwYWRkdyAgICAgbW01LG1tNwkJOyBtbTU9KChCLVkpK1lPKT1CTz0oQjEgQjMgQjUgQjcpCisJcGFja3Vzd2IgIG1tNCxtbTQJCTsgbW00PShCMCBCMiBCNCBCNiAqKiAqKiAqKiAqKikKKwlwYWNrdXN3YiAgbW01LG1tNQkJOyBtbTU9KEIxIEIzIEI1IEI3ICoqICoqICoqICoqKQorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzIDsgLS0tLS0tLS0tLS0tLS0tCisKKwk7IG1tQT0oMDAgMDIgMDQgMDYgKiogKiogKiogKiopLCBtbUI9KDAxIDAzIDA1IDA3ICoqICoqICoqICoqKQorCTsgbW1DPSgxMCAxMiAxNCAxNiAqKiAqKiAqKiAqKiksIG1tRD0oMTEgMTMgMTUgMTcgKiogKiogKiogKiopCisJOyBtbUU9KDIwIDIyIDI0IDI2ICoqICoqICoqICoqKSwgbW1GPSgyMSAyMyAyNSAyNyAqKiAqKiAqKiAqKikKKwk7IG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiopLCBtbUg9KCoqICoqICoqICoqICoqICoqICoqICoqKQorCisJcHVucGNrbGJ3IG1tQSxtbUMJCTsgbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikKKwlwdW5wY2tsYncgbW1FLG1tQgkJOyBtbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3KQorCXB1bnBja2xidyBtbUQsbW1GCQk7IG1tRD0oMTEgMjEgMTMgMjMgMTUgMjUgMTcgMjcpCisKKwltb3ZxICAgICAgbW1HLG1tQQorCW1vdnEgICAgICBtbUgsbW1BCisJcHVucGNrbHdkIG1tQSxtbUUJCTsgbW1BPSgwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKwlwdW5wY2tod2QgbW1HLG1tRQkJOyBtbUc9KDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3KQorCisJcHNybHEgICAgIG1tSCwyKkJZVEVfQklUCTsgbW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAtLSAtLSkKKwlwc3JscSAgICAgbW1FLDIqQllURV9CSVQJOyBtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IC0tIC0tKQorCisJbW92cSAgICAgIG1tQyxtbUQKKwltb3ZxICAgICAgbW1CLG1tRAorCXB1bnBja2x3ZCBtbUQsbW1ICQk7IG1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQpCisJcHVucGNraHdkIG1tQyxtbUgJCTsgbW1DPSgxNSAyNSAwNiAxNiAxNyAyNyAtLSAtLSkKKworCXBzcmxxICAgICBtbUIsMipCWVRFX0JJVAk7IG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgLS0gLS0pCisKKwltb3ZxICAgICAgbW1GLG1tRQorCXB1bnBja2x3ZCBtbUUsbW1CCQk7IG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUpCisJcHVucGNraHdkIG1tRixtbUIJCTsgbW1GPSgyNiAwNyAxNyAyNyAtLSAtLSAtLSAtLSkKKworCXB1bnBja2xkcSBtbUEsbW1ECQk7IG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIpCisJcHVucGNrbGRxIG1tRSxtbUcJCTsgbW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKKwlwdW5wY2tsZHEgbW1DLG1tRgkJOyBtbUM9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3KQorCisJZGVjCWFsCQkJOyBZVmN0cgorCWp6CXNob3J0IC5ZVmxvb3BfYnJlYWsKKworCW1vdnEJTU1XT1JEIFt3ayg2KV0sIG1tQQorCW1vdnEJTU1XT1JEIFt3ayg3KV0sIG1tRQorCW1vdnEJTU1XT1JEIFt3ayg4KV0sIG1tQworCisJam1wCW5lYXIgLllWbG9vcF8ybmQKKwlhbGlnbngJMTYsNworCisuWVZsb29wX2JyZWFrOgorCW1vdnEJbW1ILCBNTVdPUkQgW3drKDYpXQorCW1vdnEJbW1CLCBNTVdPUkQgW3drKDcpXQorCW1vdnEJbW1ELCBNTVdPUkQgW3drKDgpXQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDE2CisKKwltb3ZxCU1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0sIG1tSAorCW1vdnEJTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXSwgbW1CCisJbW92cQlNTVdPUkQgW2VzaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUQKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1FCisJbW92cQlNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKKworCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWp6CW5lYXIgLmVuZGNvbHVtbgorCisJYWRkCWVzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIwCisJYWRkCWVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIxCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjAwCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjAxCisJZGVjCWFoCQkJOyBZSGN0cgorCWpuegluZWFyIC5ZSGxvb3BfMm5kCisKKwlwdXNoCWVieAkJCTsgaW5wdHIwMAorCXB1c2gJZWR4CQkJOyBpbnB0cjAxCisJbW92CWVieCwgSlNBTVBST1cgW2lucHRyMV0JOyBlYng9aW5wdHIxCisJbW92CWVkeCwgSlNBTVBST1cgW2lucHRyMl0JOyBlZHg9aW5wdHIyCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfTU1XT1JECTsgaW5wdHIxCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECTsgaW5wdHIyCisJam1wCW5lYXIgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1uX3N0MTY6CisJbGVhCWVjeCwgW2VjeCtlY3gqMl0JOyBpbXVsIGVjeCwgUkdCX1BJWEVMU0laRQorCWNtcAllY3gsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDgKKwltb3ZxCU1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0sIG1tSAorCW1vdnEJTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXSwgbW1CCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRQorCW1vdnEJbW1ILG1tRAorCW1vdnEJbW1BLG1tQworCXN1YgllY3gsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKwlhZGQJZWRpLCBieXRlIDIqU0laRU9GX01NV09SRAorCWptcAlzaG9ydCAuY29sdW1uX3N0NAorLmNvbHVtbl9zdDg6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDQKKwltb3ZxCU1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0sIG1tSAorCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisJbW92cQltbUgsbW1CCisJbW92cQltbUEsbW1FCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NDoKKwltb3ZkCWVheCxtbUgKKwltb3ZkCWVkeCxtbUEKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9EV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QyCisJbW92CURXT1JEIFtlc2krMCpTSVpFT0ZfRFdPUkRdLCBlYXgKKwltb3YJRFdPUkQgW2VkaSswKlNJWkVPRl9EV09SRF0sIGVkeAorCXBzcmxxCW1tSCxEV09SRF9CSVQKKwlwc3JscQltbUEsRFdPUkRfQklUCisJbW92ZAllYXgsbW1ICisJbW92ZAllZHgsbW1BCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9EV09SRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX0RXT1JECisuY29sdW1uX3N0MjoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDEKKwltb3YJV09SRCBbZXNpKzAqU0laRU9GX1dPUkRdLCBheAorCW1vdglXT1JEIFtlZGkrMCpTSVpFT0ZfV09SRF0sIGR4CisJc2hyCWVheCxXT1JEX0JJVAorCXNocgllZHgsV09SRF9CSVQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9XT1JECisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfV09SRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1dPUkQKKy5jb2x1bW5fc3QxOgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX0JZVEUKKwlqYglzaG9ydCAuZW5kY29sdW1uCisJbW92CUJZVEUgW2VzaSswKlNJWkVPRl9CWVRFXSwgYWwKKwltb3YJQllURSBbZWRpKzAqU0laRU9GX0JZVEVdLCBkbAorCislZWxzZSA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisJcGNtcGVxYiAgIG1tNixtbTYJCTsgbW02PShYMCBYMiBYNCBYNiAqKiAqKiAqKiAqKikKKwlwY21wZXFiICAgbW03LG1tNwkJOyBtbTc9KFgxIFgzIFg1IFg3ICoqICoqICoqICoqKQorJWVsc2UKKwlweG9yICAgICAgbW02LG1tNgkJOyBtbTY9KFgwIFgyIFg0IFg2ICoqICoqICoqICoqKQorCXB4b3IgICAgICBtbTcsbW03CQk7IG1tNz0oWDEgWDMgWDUgWDcgKiogKiogKiogKiopCislZW5kaWYKKwk7IG1tQT0oMDAgMDIgMDQgMDYgKiogKiogKiogKiopLCBtbUI9KDAxIDAzIDA1IDA3ICoqICoqICoqICoqKQorCTsgbW1DPSgxMCAxMiAxNCAxNiAqKiAqKiAqKiAqKiksIG1tRD0oMTEgMTMgMTUgMTcgKiogKiogKiogKiopCisJOyBtbUU9KDIwIDIyIDI0IDI2ICoqICoqICoqICoqKSwgbW1GPSgyMSAyMyAyNSAyNyAqKiAqKiAqKiAqKikKKwk7IG1tRz0oMzAgMzIgMzQgMzYgKiogKiogKiogKiopLCBtbUg9KDMxIDMzIDM1IDM3ICoqICoqICoqICoqKQorCisJcHVucGNrbGJ3IG1tQSxtbUMJCTsgbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikKKwlwdW5wY2tsYncgbW1FLG1tRwkJOyBtbUU9KDIwIDMwIDIyIDMyIDI0IDM0IDI2IDM2KQorCXB1bnBja2xidyBtbUIsbW1ECQk7IG1tQj0oMDEgMTEgMDMgMTMgMDUgMTUgMDcgMTcpCisJcHVucGNrbGJ3IG1tRixtbUgJCTsgbW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNykKKworCW1vdnEgICAgICBtbUMsbW1BCisJcHVucGNrbHdkIG1tQSxtbUUJCTsgbW1BPSgwMCAxMCAyMCAzMCAwMiAxMiAyMiAzMikKKwlwdW5wY2tod2QgbW1DLG1tRQkJOyBtbUM9KDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KQorCW1vdnEgICAgICBtbUcsbW1CCisJcHVucGNrbHdkIG1tQixtbUYJCTsgbW1CPSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMykKKwlwdW5wY2tod2QgbW1HLG1tRgkJOyBtbUc9KDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3KQorCisJbW92cSAgICAgIG1tRCxtbUEKKwlwdW5wY2tsZHEgbW1BLG1tQgkJOyBtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorCXB1bnBja2hkcSBtbUQsbW1CCQk7IG1tRD0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJbW92cSAgICAgIG1tSCxtbUMKKwlwdW5wY2tsZHEgbW1DLG1tRwkJOyBtbUM9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCXB1bnBja2hkcSBtbUgsbW1HCQk7IG1tSD0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwlkZWMJYWwJCQk7IFlWY3RyCisJanoJc2hvcnQgLllWbG9vcF9icmVhaworCisJbW92cQlNTVdPUkQgW3drKDYpXSwgbW1BCisJbW92cQlNTVdPUkQgW3drKDcpXSwgbW1ECisJbW92cQlNTVdPUkQgW3drKDgpXSwgbW1DCisJbW92cQlNTVdPUkQgW3drKDkpXSwgbW1ICisKKwlqbXAJbmVhciAuWVZsb29wXzJuZAorCWFsaWdueAkxNiw3CisKKy5ZVmxvb3BfYnJlYWs6CisJbW92cQltbUUsIE1NV09SRCBbd2soNildCisJbW92cQltbUYsIE1NV09SRCBbd2soNyldCisJbW92cQltbUIsIE1NV09SRCBbd2soOCldCisJbW92cQltbUcsIE1NV09SRCBbd2soOSldCisKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTYKKworCW1vdnEJTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXSwgbW1FCisJbW92cQlNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUYKKwltb3ZxCU1NV09SRCBbZXNpKzIqU0laRU9GX01NV09SRF0sIG1tQgorCW1vdnEJTU1XT1JEIFtlc2krMypTSVpFT0ZfTU1XT1JEXSwgbW1HCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRAorCW1vdnEJTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW1DCisJbW92cQlNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbUgKKworCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWp6CXNob3J0IC5lbmRjb2x1bW4KKworCWFkZAllc2ksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyMAorCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyMQorCWFkZAllYngsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIwMAorCWFkZAllZHgsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIwMQorCWRlYwlhaAkJCTsgWUhjdHIKKwlqbnoJbmVhciAuWUhsb29wXzJuZAorCisJcHVzaAllYngJCQk7IGlucHRyMDAKKwlwdXNoCWVkeAkJCTsgaW5wdHIwMQorCW1vdgllYngsIEpTQU1QUk9XIFtpbnB0cjFdCTsgZWJ4PWlucHRyMQorCW1vdgllZHgsIEpTQU1QUk9XIFtpbnB0cjJdCTsgZWR4PWlucHRyMgorCWFkZAllYngsIGJ5dGUgU0laRU9GX01NV09SRAk7IGlucHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX01NV09SRAk7IGlucHRyMgorCWptcAluZWFyIC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLmNvbHVtbl9zdDE2OgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRC8yCisJamIJc2hvcnQgLmNvbHVtbl9zdDgKKwltb3ZxCU1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0sIG1tRQorCW1vdnEJTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXSwgbW1GCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRAorCW1vdnEJbW1FLG1tQgorCW1vdnEJbW1GLG1tRworCW1vdnEJbW1BLG1tQworCW1vdnEJbW1ELG1tSAorCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRC8yCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKwlhZGQJZWRpLCBieXRlIDIqU0laRU9GX01NV09SRAorLmNvbHVtbl9zdDg6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKKwlqYglzaG9ydCAuY29sdW1uX3N0NAorCW1vdnEJTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXSwgbW1FCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCW1tRSxtbUYKKwltb3ZxCW1tQSxtbUQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAorCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECisJYWRkCWVkaSwgYnl0ZSAxKlNJWkVPRl9NTVdPUkQKKy5jb2x1bW5fc3Q0OgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRC84CisJamIJc2hvcnQgLmVuZGNvbHVtbgorCW1vdmQJRFdPUkQgW2VzaSswKlNJWkVPRl9EV09SRF0sIG1tRQorCW1vdmQJRFdPUkQgW2VkaSswKlNJWkVPRl9EV09SRF0sIG1tQQorCislZW5kaWYgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKy5lbmRjb2x1bW46CisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworLnJldHVybjoKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7ICFVU0VfREVESUNBVEVEX0gyVjJfTUVSR0VEX1VQU0FNUExFX01NWAorCislZW5kaWYgOyBKRE1FUkdFX01NWF9TVVBQT1JURUQKKyVlbmRpZiA7IFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVECislZW5kaWYgOyBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0CmRpZmYgLS1naXQgYS9qZG1lcnNzMi5hc20gYi9qZG1lcnNzMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmNTFjOAotLS0gL2Rldi9udWxsCisrKyBiL2pkbWVyc3MyLmFzbQpAQCAtMCwwICsxLDEyNzIgQEAKKzsKKzsgamRtZXJzczIuYXNtIC0gbWVyZ2VkIHVwc2FtcGxpbmcvY29sb3IgY29udmVyc2lvbiAoU1NFMikKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBMYXN0IE1vZGlmaWVkIDogRmVicnVhcnkgNCwgMjAwNgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0CislaWZkZWYgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQKKyVpZmRlZiBKRE1FUkdFX1NTRTJfU1VQUE9SVEVECisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMJMTYKKworRl8wXzM0NAllcXUJIDIyNTU0CQkJOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQJZXF1CSA0NjgwMgkJCTsgRklYKDAuNzE0MTQpCitGXzFfNDAyCWVxdQkgOTE4ODEJCQk7IEZJWCgxLjQwMjAwKQorRl8xXzc3MgllcXUJMTE2MTMwCQkJOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIJZXF1CShGXzFfNDAyIC0gNjU1MzYpCTsgRklYKDEuNDAyMDApIC0gRklYKDEpCitGXzBfMjg1CWVxdQkoIDY1NTM2IC0gRl8wXzcxNCkJOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjgJZXF1CSgxMzEwNzIgLSBGXzFfNzcyKQk7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworRVhUTihqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpOgorCitQV19GMDQwMgl0aW1lcyA4IGR3ICBGXzBfNDAyCitQV19NRjAyMjgJdGltZXMgOCBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1CXRpbWVzIDQgZHcgLUZfMF8zNDQsIEZfMF8yODUKK1BXX09ORQkJdGltZXMgOCBkdyAgMQorUERfT05FSEFMRgl0aW1lcyA0IGRkICAxIDw8IChTQ0FMRUJJVFMtMSkKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworOworCislZGVmaW5lIGNpbmZvKGIpCQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGlucHV0X2J1ZihiKQkJKGIpKzEyCQk7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGluX3Jvd19ncm91cF9jdHIoYikJKGIpKzE2CQk7IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorJWRlZmluZSBvdXRwdXRfYnVmKGIpCQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMworJWRlZmluZSBnb3RwdHIJCXdrKDApLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oanBlZ19oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKKwltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworCisJbW92CWVjeCwgUE9JTlRFUiBbY2luZm8oZWF4KV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtqZHN0cnVjdF9vdXRwdXRfd2lkdGgoZWN4KV0JOyBjb2wKKwl0ZXN0CWVjeCxlY3gKKwlqegluZWFyIC5yZXR1cm4KKworCXB1c2gJZWN4CisKKwltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVheCldCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10JCTsgaW5wdHIwCisJbW92CWVieCwgSlNBTVBST1cgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQkJOyBpbnB0cjEKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCQk7IGlucHRyMgorCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCQkJCTsgb3V0cHRyCisKKwlwb3AJZWN4CQkJOyBjb2wKKworCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKwltb3ZwaWMJZWF4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorCisJbW92ZHFhICAgIHhtbTYsIFhNTVdPUkQgW2VieF0JOyB4bW02PUNiKDAxMjM0NTY3ODlBQkNERUYpCisJbW92ZHFhICAgIHhtbTcsIFhNTVdPUkQgW2VkeF0JOyB4bW03PUNyKDAxMjM0NTY3ODlBQkNERUYpCisKKwlweG9yICAgICAgeG1tMSx4bW0xCQk7IHhtbTE9KGFsbCAwJ3MpCisJcGNtcGVxdyAgIHhtbTMseG1tMworCXBzbGx3ICAgICB4bW0zLDcJCTsgeG1tMz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQorCisJbW92ZHFhICAgIHhtbTQseG1tNgorCXB1bnBja2hidyB4bW02LHhtbTEJCTsgeG1tNj1DYig4OUFCQ0RFRik9Q2JICisJcHVucGNrbGJ3IHhtbTQseG1tMQkJOyB4bW00PUNiKDAxMjM0NTY3KT1DYkwKKwltb3ZkcWEgICAgeG1tMCx4bW03CisJcHVucGNraGJ3IHhtbTcseG1tMQkJOyB4bW03PUNyKDg5QUJDREVGKT1DckgKKwlwdW5wY2tsYncgeG1tMCx4bW0xCQk7IHhtbTA9Q3IoMDEyMzQ1NjcpPUNyTAorCisJcGFkZHcgICAgIHhtbTYseG1tMworCXBhZGR3ICAgICB4bW00LHhtbTMKKwlwYWRkdyAgICAgeG1tNyx4bW0zCisJcGFkZHcgICAgIHhtbTAseG1tMworCisJOyAoT3JpZ2luYWwpCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKwk7IEIgPSBZICsgMS43NzIwMCAqIENiCisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisJOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisJOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKworCW1vdmRxYQl4bW01LHhtbTYJCTsgeG1tNT1DYkgKKwltb3ZkcWEJeG1tMix4bW00CQk7IHhtbTI9Q2JMCisJcGFkZHcJeG1tNix4bW02CQk7IHhtbTY9MipDYkgKKwlwYWRkdwl4bW00LHhtbTQJCTsgeG1tND0yKkNiTAorCW1vdmRxYQl4bW0xLHhtbTcJCTsgeG1tMT1DckgKKwltb3ZkcWEJeG1tMyx4bW0wCQk7IHhtbTM9Q3JMCisJcGFkZHcJeG1tNyx4bW03CQk7IHhtbTc9MipDckgKKwlwYWRkdwl4bW0wLHhtbTAJCTsgeG1tMD0yKkNyTAorCisJcG11bGh3CXhtbTYsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyB4bW02PSgyKkNiSCAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CXhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyB4bW00PSgyKkNiTCAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CXhtbTcsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IHhtbTc9KDIqQ3JIICogRklYKDAuNDAyMDApKQorCXBtdWxodwl4bW0wLFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0JOyB4bW0wPSgyKkNyTCAqIEZJWCgwLjQwMjAwKSkKKworCXBhZGR3CXhtbTYsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwYWRkdwl4bW00LFtHT1RPRkYoZWF4LFBXX09ORSldCisJcHNyYXcJeG1tNiwxCQkJOyB4bW02PShDYkggKiAtRklYKDAuMjI4MDApKQorCXBzcmF3CXhtbTQsMQkJCTsgeG1tND0oQ2JMICogLUZJWCgwLjIyODAwKSkKKwlwYWRkdwl4bW03LFtHT1RPRkYoZWF4LFBXX09ORSldCisJcGFkZHcJeG1tMCxbR09UT0ZGKGVheCxQV19PTkUpXQorCXBzcmF3CXhtbTcsMQkJCTsgeG1tNz0oQ3JIICogRklYKDAuNDAyMDApKQorCXBzcmF3CXhtbTAsMQkJCTsgeG1tMD0oQ3JMICogRklYKDAuNDAyMDApKQorCisJcGFkZHcJeG1tNix4bW01CisJcGFkZHcJeG1tNCx4bW0yCisJcGFkZHcJeG1tNix4bW01CQk7IHhtbTY9KENiSCAqIEZJWCgxLjc3MjAwKSk9KEItWSlICisJcGFkZHcJeG1tNCx4bW0yCQk7IHhtbTQ9KENiTCAqIEZJWCgxLjc3MjAwKSk9KEItWSlMCisJcGFkZHcJeG1tNyx4bW0xCQk7IHhtbTc9KENySCAqIEZJWCgxLjQwMjAwKSk9KFItWSlICisJcGFkZHcJeG1tMCx4bW0zCQk7IHhtbTA9KENyTCAqIEZJWCgxLjQwMjAwKSk9KFItWSlMCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW02CTsgd2soMCk9KEItWSlICisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNwk7IHdrKDEpPShSLVkpSAorCisJbW92ZHFhICAgIHhtbTYseG1tNQorCW1vdmRxYSAgICB4bW03LHhtbTIKKwlwdW5wY2tsd2QgeG1tNSx4bW0xCisJcHVucGNraHdkIHhtbTYseG1tMQorCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKwlwdW5wY2tsd2QgeG1tMix4bW0zCisJcHVucGNraHdkIHhtbTcseG1tMworCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKworCXBhZGRkICAgICB4bW01LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICB4bW02LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICB4bW01LFNDQUxFQklUUworCXBzcmFkICAgICB4bW02LFNDQUxFQklUUworCXBhZGRkICAgICB4bW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICB4bW03LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICB4bW0yLFNDQUxFQklUUworCXBzcmFkICAgICB4bW03LFNDQUxFQklUUworCisJcGFja3NzZHcgIHhtbTUseG1tNgk7IHhtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCpGSVgoMC4yODUpCisJcGFja3NzZHcgIHhtbTIseG1tNwk7IHhtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCpGSVgoMC4yODUpCisJcHN1YncgICAgIHhtbTUseG1tMQk7IHhtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCotRklYKDAuNzE0KT0oRy1ZKUgKKwlwc3VidyAgICAgeG1tMix4bW0zCTsgeG1tMj1DYkwqLUZJWCgwLjM0NCkrQ3JMKi1GSVgoMC43MTQpPShHLVkpTAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tNQk7IHdrKDIpPShHLVkpSAorCisJbW92CWFsLDIJCQk7IFljdHIKKwlqbXAJc2hvcnQgLllsb29wXzFzdAorCWFsaWdueAkxNiw3CisKKy5ZbG9vcF8ybmQ6CisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTA9KFItWSlICisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTI9KEctWSlICisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDApXQk7IHhtbTQ9KEItWSlICisJYWxpZ254CTE2LDcKKworLllsb29wXzFzdDoKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbZXNpXQk7IHhtbTc9WSgwMTIzNDU2Nzg5QUJDREVGKQorCisJcGNtcGVxdwl4bW02LHhtbTYKKwlwc3Jsdwl4bW02LEJZVEVfQklUCQk7IHhtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisJcGFuZAl4bW02LHhtbTcJCTsgeG1tNj1ZKDAyNDY4QUNFKT1ZRQorCXBzcmx3CXhtbTcsQllURV9CSVQJCTsgeG1tNz1ZKDEzNTc5QkRGKT1ZTworCisJbW92ZHFhCXhtbTEseG1tMAkJOyB4bW0xPXhtbTA9KFItWSkoTC9IKQorCW1vdmRxYQl4bW0zLHhtbTIJCTsgeG1tMz14bW0yPShHLVkpKEwvSCkKKwltb3ZkcWEJeG1tNSx4bW00CQk7IHhtbTU9eG1tND0oQi1ZKShML0gpCisKKwlwYWRkdyAgICAgeG1tMCx4bW02CQk7IHhtbTA9KChSLVkpK1lFKT1SRT1SKDAyNDY4QUNFKQorCXBhZGR3ICAgICB4bW0xLHhtbTcJCTsgeG1tMT0oKFItWSkrWU8pPVJPPVIoMTM1NzlCREYpCisJcGFja3Vzd2IgIHhtbTAseG1tMAkJOyB4bW0wPVIoMDI0NjhBQ0UqKioqKioqKikKKwlwYWNrdXN3YiAgeG1tMSx4bW0xCQk7IHhtbTE9UigxMzU3OUJERioqKioqKioqKQorCisJcGFkZHcgICAgIHhtbTIseG1tNgkJOyB4bW0yPSgoRy1ZKStZRSk9R0U9RygwMjQ2OEFDRSkKKwlwYWRkdyAgICAgeG1tMyx4bW03CQk7IHhtbTM9KChHLVkpK1lPKT1HTz1HKDEzNTc5QkRGKQorCXBhY2t1c3diICB4bW0yLHhtbTIJCTsgeG1tMj1HKDAyNDY4QUNFKioqKioqKiopCisJcGFja3Vzd2IgIHhtbTMseG1tMwkJOyB4bW0zPUcoMTM1NzlCREYqKioqKioqKikKKworCXBhZGR3ICAgICB4bW00LHhtbTYJCTsgeG1tND0oKEItWSkrWUUpPUJFPUIoMDI0NjhBQ0UpCisJcGFkZHcgICAgIHhtbTUseG1tNwkJOyB4bW01PSgoQi1ZKStZTyk9Qk89QigxMzU3OUJERikKKwlwYWNrdXN3YiAgeG1tNCx4bW00CQk7IHhtbTQ9QigwMjQ2OEFDRSoqKioqKioqKQorCXBhY2t1c3diICB4bW01LHhtbTUJCTsgeG1tNT1CKDEzNTc5QkRGKioqKioqKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KKworCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKwk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorCTsgeG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiogKiopLCB4bW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKwlwdW5wY2tsYncgeG1tRSx4bW1CCTsgeG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYpCisJcHVucGNrbGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGKQorCisJbW92ZHFhICAgIHhtbUcseG1tQQorCW1vdmRxYSAgICB4bW1ILHhtbUEKKwlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisJcHVucGNraHdkIHhtbUcseG1tRQk7IHhtbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGKQorCisJcHNybGRxICAgIHhtbUgsMgk7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQorCXBzcmxkcSAgICB4bW1FLDIJOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1DLHhtbUQKKwltb3ZkcWEgICAgeG1tQix4bW1ECisJcHVucGNrbHdkIHhtbUQseG1tSAk7IHhtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4KQorCXB1bnBja2h3ZCB4bW1DLHhtbUgJOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKKworCXBzcmxkcSAgICB4bW1CLDIJOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1GLHhtbUUKKwlwdW5wY2tsd2QgeG1tRSx4bW1CCTsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCisJcHVucGNraHdkIHhtbUYseG1tQgk7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQorCisJcHNodWZkICAgIHhtbUgseG1tQSwweDRFOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKwltb3ZkcWEgICAgeG1tQix4bW1FCisJcHVucGNrbGRxIHhtbUEseG1tRAk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQorCXB1bnBja2xkcSB4bW1FLHhtbUgJOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKKwlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkpCisKKwlwc2h1ZmQgICAgeG1tSCx4bW1HLDB4NEU7IHhtbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCKQorCW1vdmRxYSAgICB4bW1CLHhtbUYKKwlwdW5wY2tsZHEgeG1tRyx4bW1DCTsgeG1tRz0oMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMEEgMUEgMkEgMEIgMUIgMkIgMEMgMUMpCisJcHVucGNrbGRxIHhtbUYseG1tSAk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGKQorCXB1bnBja2hkcSB4bW1DLHhtbUIJOyB4bW1DPSgxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRiAxRiAyRiAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXB1bnBja2xxZHEgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisJcHVucGNrbHFkcSB4bW1ELHhtbUcJOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKwlwdW5wY2tscWRxIHhtbUYseG1tQwk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QzMgorCisJdGVzdAllZGksIFNJWkVPRl9YTU1XT1JELTEKKwlqbnoJc2hvcnQgLm91dDEKKwk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1vdm50ZHEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKwltb3ZudGRxCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCWptcAlzaG9ydCAub3V0MAorLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisJcGNtcGVxYiAgICB4bW1ILHhtbUgJCQk7IHhtbUg9KGFsbCAxJ3MpCisJbWFza21vdmRxdSB4bW1BLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1ELHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUQKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1GLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUYKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisub3V0MDoKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJanoJbmVhciAuZW5kY29sdW1uCisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIwCisJZGVjCWFsCQkJOyBZY3RyCisJam56CW5lYXIgLllsb29wXzJuZAorCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKKwlqbXAJbmVhciAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5fc3QzMjoKKwlwY21wZXFiCXhtbUgseG1tSAkJCTsgeG1tSD0oYWxsIDEncykKKwlsZWEJZWN4LCBbZWN4K2VjeCoyXQkJOyBpbXVsIGVjeCwgUkdCX1BJWEVMU0laRQorCWNtcAllY3gsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNgorCW1hc2ttb3ZkcXUgeG1tQSx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tRCx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1vdmRxYQl4bW1BLHhtbUYKKwlzdWIJZWN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKwlqbXAJc2hvcnQgLmNvbHVtbl9zdDE1CisuY29sdW1uX3N0MTY6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1vdmRxYQl4bW1BLHhtbUQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisuY29sdW1uX3N0MTU6CisJbW92CWVheCxlY3gKKwl4b3IJZWN4LCBieXRlIDB4MEYKKwlzaGwJZWN4LCAyCisJbW92ZAl4bW1CLGVjeAorCXBzcmxxCXhtbUgsNAorCXBjbXBlcWIJeG1tRSx4bW1FCisJcHNybHEJeG1tSCx4bW1CCisJcHNybHEJeG1tRSx4bW1CCisJcHVucGNrbGJ3IHhtbUUseG1tSAorCTsgLS0tLS0tLS0tLS0tLS0tLQorCW1vdgllY3gsZWRpCisJYW5kCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC0xCisJanoJc2hvcnQgLmFkajAKKwlhZGQJZWF4LGVjeAorCWNtcAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYQlzaG9ydCAuYWRqMAorCWFuZAllZGksIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5CisJc2hsCWVjeCwgMwkJCTsgcHNsbGRxIHhtbUEsZWN4ICYgcHNsbGRxIHhtbUUsZWN4CisJbW92ZHFhCXhtbUcseG1tQQorCW1vdmRxYQl4bW1DLHhtbUUKKwlwc2xsZHEJeG1tQSwgU0laRU9GX1hNTVdPUkQvMgorCXBzbGxkcQl4bW1FLCBTSVpFT0ZfWE1NV09SRC8yCisJbW92ZAl4bW1ELGVjeAorCXN1YgllY3gsIGJ5dGUgKFNJWkVPRl9YTU1XT1JELzIpKkJZVEVfQklUCisJamIJc2hvcnQgLmFkajEKKwltb3ZkCXhtbUYsZWN4CisJcHNsbHEJeG1tQSx4bW1GCisJcHNsbHEJeG1tRSx4bW1GCisJam1wCXNob3J0IC5hZGowCisuYWRqMToJbmVnCWVjeAorCW1vdmQJeG1tRixlY3gKKwlwc3JscQl4bW1BLHhtbUYKKwlwc3JscQl4bW1FLHhtbUYKKwlwc2xscQl4bW1HLHhtbUQKKwlwc2xscQl4bW1DLHhtbUQKKwlwb3IJeG1tQSx4bW1HCisJcG9yCXhtbUUseG1tQworLmFkajA6CTsgLS0tLS0tLS0tLS0tLS0tLQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisKKyVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworJWlmZGVmIFJHQlhfRklMTEVSXzBYRkYKKwlwY21wZXFiICAgeG1tNix4bW02CQk7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorCXBjbXBlcWIgICB4bW03LHhtbTcJCTsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCislZWxzZQorCXB4b3IgICAgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCisJcHhvciAgICAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyVlbmRpZgorCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKwk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorCTsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgKiopLCB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRiAqKikKKworCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKwlwdW5wY2tsYncgeG1tRSx4bW1HCTsgeG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYgMjggMzggMkEgM0EgMkMgM0MgMkUgM0UpCisJcHVucGNrbGJ3IHhtbUIseG1tRAk7IHhtbUI9KDAxIDExIDAzIDEzIDA1IDE1IDA3IDE3IDA5IDE5IDBCIDFCIDBEIDFEIDBGIDFGKQorCXB1bnBja2xidyB4bW1GLHhtbUgJOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKKworCW1vdmRxYSAgICB4bW1DLHhtbUEKKwlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisJcHVucGNraHdkIHhtbUMseG1tRQk7IHhtbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFKQorCW1vdmRxYSAgICB4bW1HLHhtbUIKKwlwdW5wY2tsd2QgeG1tQix4bW1GCTsgeG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCisJcHVucGNraHdkIHhtbUcseG1tRgk7IHhtbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGKQorCisJbW92ZHFhICAgIHhtbUQseG1tQQorCXB1bnBja2xkcSB4bW1BLHhtbUIJOyB4bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisJbW92ZHFhICAgIHhtbUgseG1tQworCXB1bnBja2xkcSB4bW1DLHhtbUcJOyB4bW1DPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKwlwdW5wY2toZHEgeG1tSCx4bW1HCTsgeG1tSD0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDMyCisKKwl0ZXN0CWVkaSwgU0laRU9GX1hNTVdPUkQtMQorCWpueglzaG9ydCAub3V0MQorCTsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKwltb3ZudGRxCVhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorCW1vdm50ZHEJWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbUgKKwlhZGQJZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwlqbXAJc2hvcnQgLm91dDAKKy5vdXQxOgk7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorCXBjbXBlcWIgICAgeG1tRSx4bW1FCQkJOyB4bW1FPShhbGwgMSdzKQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tRCx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tQyx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1DCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tSCx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ICisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorLm91dDA6CisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWp6CW5lYXIgLmVuZGNvbHVtbgorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAorCWRlYwlhbAkJCTsgWWN0cgorCWpuegluZWFyIC5ZbG9vcF8ybmQKKworCWFkZAllYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIyCisJam1wCW5lYXIgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1uX3N0MzI6CisJcGNtcGVxYgl4bW1FLHhtbUUJCQk7IHhtbUU9KGFsbCAxJ3MpCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisJamIJc2hvcnQgLmNvbHVtbl9zdDE2CisJbWFza21vdmRxdSB4bW1BLHhtbUUJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1ELHhtbUUJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUQKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbW92ZHFhCXhtbUEseG1tQworCW1vdmRxYQl4bW1ELHhtbUgKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKy5jb2x1bW5fc3QxNjoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTUKKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1ECisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisuY29sdW1uX3N0MTU6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8xNgorCWpiCXNob3J0IC5lbmRjb2x1bW4KKwltb3YJZWF4LGVjeAorCXhvcgllY3gsIGJ5dGUgMHgwMworCWluYwllY3gKKwlzaGwJZWN4LCA0CisJbW92ZAl4bW1GLGVjeAorCXBzcmxxCXhtbUUseG1tRgorCXB1bnBja2xidyB4bW1FLHhtbUUKKwk7IC0tLS0tLS0tLS0tLS0tLS0KKwltb3YJZWN4LGVkaQorCWFuZAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5hZGowCisJbGVhCWVheCwgW2VjeCtlYXgqNF0JOyBSR0JfUElYRUxTSVpFCisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCXNob3J0IC5hZGowCisJYW5kCWVkaSwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDE2LWJ5dGUgYm91bmRhcnkKKwlzaGwJZWN4LCAzCQkJOyBwc2xsZHEgeG1tQSxlY3ggJiBwc2xsZHEgeG1tRSxlY3gKKwltb3ZkcWEJeG1tQix4bW1BCisJbW92ZHFhCXhtbUcseG1tRQorCXBzbGxkcQl4bW1BLCBTSVpFT0ZfWE1NV09SRC8yCisJcHNsbGRxCXhtbUUsIFNJWkVPRl9YTU1XT1JELzIKKwltb3ZkCXhtbUMsZWN4CisJc3ViCWVjeCwgYnl0ZSAoU0laRU9GX1hNTVdPUkQvMikqQllURV9CSVQKKwlqYglzaG9ydCAuYWRqMQorCW1vdmQJeG1tSCxlY3gKKwlwc2xscQl4bW1BLHhtbUgKKwlwc2xscQl4bW1FLHhtbUgKKwlqbXAJc2hvcnQgLmFkajAKKy5hZGoxOgluZWcJZWN4CisJbW92ZAl4bW1ILGVjeAorCXBzcmxxCXhtbUEseG1tSAorCXBzcmxxCXhtbUUseG1tSAorCXBzbGxxCXhtbUIseG1tQworCXBzbGxxCXhtbUcseG1tQworCXBvcgl4bW1BLHhtbUIKKwlwb3IJeG1tRSx4bW1HCisuYWRqMDoJOyAtLS0tLS0tLS0tLS0tLS0tCisJbWFza21vdmRxdSB4bW1BLHhtbUUJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKworJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisuZW5kY29sdW1uOgorCXNmZW5jZQkJOyBmbHVzaCB0aGUgd3JpdGUgYnVmZmVyCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCislaWZuZGVmIFVTRV9ERURJQ0FURURfSDJWMl9NRVJHRURfVVBTQU1QTEVfU1NFMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFVwc2FtcGxlIGFuZCBjb2xvciBjb252ZXJ0IGZvciB0aGUgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKKzsKKworJWRlZmluZSBjaW5mbyhiKQkJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBpbnB1dF9idWYoYikJCShiKSsxMgkJOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpCShiKSsxNgkJOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oanBlZ19oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdgllYXgsIFBPSU5URVIgW2NpbmZvKGVicCldCisKKwltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWJwKV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVicCldCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXQorCWxlYQllc2ksIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10KKworCXB1c2gJZWR4CQkJOyBpbnB0cjIKKwlwdXNoCWVieAkJCTsgaW5wdHIxCisJcHVzaAllc2kJCQk7IGlucHRyMDAKKwltb3YJZWJ4LGVzcAorCisJcHVzaAllZGkJCQk7IG91dHB1dF9idWYgKG91dHB0cjApCisJcHVzaAllY3gJCQk7IGluX3Jvd19ncm91cF9jdHIKKwlwdXNoCWVieAkJCTsgaW5wdXRfYnVmCisJcHVzaAllYXgJCQk7IGNpbmZvCisKKwljYWxsCW5lYXIgRVhUTihqcGVnX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IGlucHRyMDEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IG91dHB0cjEKKwltb3YJUE9JTlRFUiBbZWJ4KzAqU0laRU9GX1BPSU5URVJdLCBlc2kKKwltb3YJUE9JTlRFUiBbZWJ4LTEqU0laRU9GX1BPSU5URVJdLCBlZGkKKworCWNhbGwJbmVhciBFWFROKGpwZWdfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworCWFkZAllc3AsIGJ5dGUgNypTSVpFT0ZfRFdPUkQKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCXBvcAllYnAKKwlyZXQKKworJWVsc2UgIDsgVVNFX0RFRElDQVRFRF9IMlYyX01FUkdFRF9VUFNBTVBMRV9TU0UyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworOworCislZGVmaW5lIGNpbmZvKGIpCQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGlucHV0X2J1ZihiKQkJKGIpKzEyCQk7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGluX3Jvd19ncm91cF9jdHIoYikJKGIpKzE2CQk7IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorJWRlZmluZSBvdXRwdXRfYnVmKGIpCQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMTAKKyVkZWZpbmUgaW5wdHIxCQl3aygwKS1TSVpFT0ZfSlNBTVBST1cJOyBKU0FNUFJPVyBpbnB0cjEKKyVkZWZpbmUgaW5wdHIyCQlpbnB0cjEtU0laRU9GX0pTQU1QUk9XCTsgSlNBTVBST1cgaW5wdHIyCislZGVmaW5lIGdvdHB0cgkJaW5wdHIyLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oanBlZ19oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbaW5wdHIyXQorCXB1c2hwaWMJZWF4CQk7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCisJbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllY3gsIFBPSU5URVIgW2NpbmZvKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbamRzdHJ1Y3Rfb3V0cHV0X3dpZHRoKGVjeCldCTsgY29sCisJdGVzdAllY3gsZWN4CisJanoJbmVhciAucmV0dXJuCisKKwlwdXNoCWVjeAorCisJbW92CWVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbaW5fcm93X2dyb3VwX2N0cihlYXgpXQorCW1vdgllc2ksIEpTQU1QQVJSQVkgW2VkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZHgsIEpTQU1QQVJSQVkgW2VkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0KKwltb3YJZWF4LCBKU0FNUFJPVyBbZXNpKyhlY3gqMiswKSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIwMAorCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krKGVjeCoyKzEpKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjAxCisJbW92CWVieCwgSlNBTVBST1cgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQkJOyBpbnB0cjEKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCQk7IGlucHRyMgorCisJcG9wCWVjeAkJOyBjb2wKKwlwdXNoCWVheAkJOyBpbnB0cjAwCisJcHVzaAllc2kJCTsgaW5wdHIwMQorCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10JCTsgb3V0cHRyMAorCW1vdgllZGksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCQk7IG91dHB0cjEKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisJbW92cGljCWVheCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtlYnhdCTsgeG1tNj1DYigwMTIzNDU2Nzg5QUJDREVGKQorCW1vdmRxYQl4bW03LCBYTU1XT1JEIFtlZHhdCTsgeG1tNz1DcigwMTIzNDU2Nzg5QUJDREVGKQorCisJbW92CUpTQU1QUk9XIFtpbnB0cjFdLCBlYngJOyBpbnB0cjEKKwltb3YJSlNBTVBST1cgW2lucHRyMl0sIGVkeAk7IGlucHRyMgorCXBvcAllZHgJCQk7IGVkeD1pbnB0cjAxCisJcG9wCWVieAkJCTsgZWJ4PWlucHRyMDAKKworCXB4b3IgICAgICB4bW0xLHhtbTEJCTsgeG1tMT0oYWxsIDAncykKKwlwY21wZXF3ICAgeG1tMyx4bW0zCisJcHNsbHcgICAgIHhtbTMsNwkJOyB4bW0zPXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CisKKwltb3ZkcWEgICAgeG1tNCx4bW02CisJcHVucGNraGJ3IHhtbTYseG1tMQkJOyB4bW02PUNiKDg5QUJDREVGKT1DYkgKKwlwdW5wY2tsYncgeG1tNCx4bW0xCQk7IHhtbTQ9Q2IoMDEyMzQ1NjcpPUNiTAorCW1vdmRxYSAgICB4bW0wLHhtbTcKKwlwdW5wY2toYncgeG1tNyx4bW0xCQk7IHhtbTc9Q3IoODlBQkNERUYpPUNySAorCXB1bnBja2xidyB4bW0wLHhtbTEJCTsgeG1tMD1DcigwMTIzNDU2Nyk9Q3JMCisKKwlwYWRkdyAgICAgeG1tNix4bW0zCisJcGFkZHcgICAgIHhtbTQseG1tMworCXBhZGR3ICAgICB4bW03LHhtbTMKKwlwYWRkdyAgICAgeG1tMCx4bW0zCisKKwk7IChPcmlnaW5hbCkKKwk7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCisJOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorCTsgQiA9IFkgKyAxLjc3MjAwICogQ2IKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IFIgPSBZICAgICAgICAgICAgICAgICsgMC40MDIwMCAqIENyICsgQ3IKKwk7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKKwk7IEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgorCisJbW92ZHFhCXhtbTUseG1tNgkJOyB4bW01PUNiSAorCW1vdmRxYQl4bW0yLHhtbTQJCTsgeG1tMj1DYkwKKwlwYWRkdwl4bW02LHhtbTYJCTsgeG1tNj0yKkNiSAorCXBhZGR3CXhtbTQseG1tNAkJOyB4bW00PTIqQ2JMCisJbW92ZHFhCXhtbTEseG1tNwkJOyB4bW0xPUNySAorCW1vdmRxYQl4bW0zLHhtbTAJCTsgeG1tMz1DckwKKwlwYWRkdwl4bW03LHhtbTcJCTsgeG1tNz0yKkNySAorCXBhZGR3CXhtbTAseG1tMAkJOyB4bW0wPTIqQ3JMCisKKwlwbXVsaHcJeG1tNixbR09UT0ZGKGVheCxQV19NRjAyMjgpXQk7IHhtbTY9KDIqQ2JIICogLUZJWCgwLjIyODAwKSkKKwlwbXVsaHcJeG1tNCxbR09UT0ZGKGVheCxQV19NRjAyMjgpXQk7IHhtbTQ9KDIqQ2JMICogLUZJWCgwLjIyODAwKSkKKwlwbXVsaHcJeG1tNyxbR09UT0ZGKGVheCxQV19GMDQwMildCTsgeG1tNz0oMipDckggKiBGSVgoMC40MDIwMCkpCisJcG11bGh3CXhtbTAsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IHhtbTA9KDIqQ3JMICogRklYKDAuNDAyMDApKQorCisJcGFkZHcJeG1tNixbR09UT0ZGKGVheCxQV19PTkUpXQorCXBhZGR3CXhtbTQsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwc3Jhdwl4bW02LDEJCQk7IHhtbTY9KENiSCAqIC1GSVgoMC4yMjgwMCkpCisJcHNyYXcJeG1tNCwxCQkJOyB4bW00PShDYkwgKiAtRklYKDAuMjI4MDApKQorCXBhZGR3CXhtbTcsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwYWRkdwl4bW0wLFtHT1RPRkYoZWF4LFBXX09ORSldCisJcHNyYXcJeG1tNywxCQkJOyB4bW03PShDckggKiBGSVgoMC40MDIwMCkpCisJcHNyYXcJeG1tMCwxCQkJOyB4bW0wPShDckwgKiBGSVgoMC40MDIwMCkpCisKKwlwYWRkdwl4bW02LHhtbTUKKwlwYWRkdwl4bW00LHhtbTIKKwlwYWRkdwl4bW02LHhtbTUJCTsgeG1tNj0oQ2JIICogRklYKDEuNzcyMDApKT0oQi1ZKUgKKwlwYWRkdwl4bW00LHhtbTIJCTsgeG1tND0oQ2JMICogRklYKDEuNzcyMDApKT0oQi1ZKUwKKwlwYWRkdwl4bW03LHhtbTEJCTsgeG1tNz0oQ3JIICogRklYKDEuNDAyMDApKT0oUi1ZKUgKKwlwYWRkdwl4bW0wLHhtbTMJCTsgeG1tMD0oQ3JMICogRklYKDEuNDAyMDApKT0oUi1ZKUwKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTYJOyB3aygwKT0oQi1ZKUgKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW03CTsgd2soMSk9KFItWSlICisKKwltb3ZkcWEgICAgeG1tNix4bW01CisJbW92ZHFhICAgIHhtbTcseG1tMgorCXB1bnBja2x3ZCB4bW01LHhtbTEKKwlwdW5wY2tod2QgeG1tNix4bW0xCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKwlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCXB1bnBja2x3ZCB4bW0yLHhtbTMKKwlwdW5wY2tod2QgeG1tNyx4bW0zCisJcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKwlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCisJcGFkZGQgICAgIHhtbTUsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisJcGFkZGQgICAgIHhtbTYsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisJcHNyYWQgICAgIHhtbTUsU0NBTEVCSVRTCisJcHNyYWQgICAgIHhtbTYsU0NBTEVCSVRTCisJcGFkZGQgICAgIHhtbTIsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisJcGFkZGQgICAgIHhtbTcsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisJcHNyYWQgICAgIHhtbTIsU0NBTEVCSVRTCisJcHNyYWQgICAgIHhtbTcsU0NBTEVCSVRTCisKKwlwYWNrc3NkdyAgeG1tNSx4bW02CTsgeG1tNT1DYkgqLUZJWCgwLjM0NCkrQ3JIKkZJWCgwLjI4NSkKKwlwYWNrc3NkdyAgeG1tMix4bW03CTsgeG1tMj1DYkwqLUZJWCgwLjM0NCkrQ3JMKkZJWCgwLjI4NSkKKwlwc3VidyAgICAgeG1tNSx4bW0xCTsgeG1tNT1DYkgqLUZJWCgwLjM0NCkrQ3JIKi1GSVgoMC43MTQpPShHLVkpSAorCXBzdWJ3ICAgICB4bW0yLHhtbTMJOyB4bW0yPUNiTCotRklYKDAuMzQ0KStDckwqLUZJWCgwLjcxNCk9KEctWSlMCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW01CTsgd2soMik9KEctWSlICisKKwltb3YJYWgsMgkJCTsgWUhjdHIKKwlqbXAJc2hvcnQgLllIbG9vcF8xc3QKKwlhbGlnbngJMTYsNworCisuWUhsb29wXzJuZDoKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD0oUi1ZKUgKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMildCTsgeG1tMj0oRy1ZKUgKKwltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soMCldCTsgeG1tND0oQi1ZKUgKKwlhbGlnbngJMTYsNworCisuWUhsb29wXzFzdDoKKwltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW0wCTsgd2soMyk9KFItWSkoTC9IKQorCW1vdmRxYQlYTU1XT1JEIFt3ayg0KV0sIHhtbTIJOyB3ayg0KT0oRy1ZKShML0gpCisJbW92ZHFhCVhNTVdPUkQgW3drKDUpXSwgeG1tNAk7IHdrKDUpPShCLVkpKEwvSCkKKworCW1vdmRxYQl4bW03LCBYTU1XT1JEIFtlYnhdCTsgeG1tNz1ZKDAxMjM0NTY3ODlBQkNERUYpCisKKwltb3YJYWwsMgkJCTsgWVZjdHIKKwlqbXAJc2hvcnQgLllWbG9vcF8xc3QKKwlhbGlnbngJMTYsNworCisuWVZsb29wXzJuZDoKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMyldCTsgeG1tMD0oUi1ZKShML0gpCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTI9KEctWSkoTC9IKQorCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3ayg1KV0JOyB4bW00PShCLVkpKEwvSCkKKworCW1vdmRxYQl4bW03LCBYTU1XT1JEIFtlZHhdCTsgeG1tNz1ZKDAxMjM0NTY3ODlBQkNERUYpCisJYWxpZ254CTE2LDcKKworLllWbG9vcF8xc3Q6CisJcGNtcGVxdwl4bW02LHhtbTYKKwlwc3Jsdwl4bW02LEJZVEVfQklUCQk7IHhtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisJcGFuZAl4bW02LHhtbTcJCTsgeG1tNj1ZKDAyNDY4QUNFKT1ZRQorCXBzcmx3CXhtbTcsQllURV9CSVQJCTsgeG1tNz1ZKDEzNTc5QkRGKT1ZTworCisJbW92ZHFhCXhtbTEseG1tMAkJOyB4bW0xPXhtbTA9KFItWSkoTC9IKQorCW1vdmRxYQl4bW0zLHhtbTIJCTsgeG1tMz14bW0yPShHLVkpKEwvSCkKKwltb3ZkcWEJeG1tNSx4bW00CQk7IHhtbTU9eG1tND0oQi1ZKShML0gpCisKKwlwYWRkdyAgICAgeG1tMCx4bW02CQk7IHhtbTA9KChSLVkpK1lFKT1SRT1SKDAyNDY4QUNFKQorCXBhZGR3ICAgICB4bW0xLHhtbTcJCTsgeG1tMT0oKFItWSkrWU8pPVJPPVIoMTM1NzlCREYpCisJcGFja3Vzd2IgIHhtbTAseG1tMAkJOyB4bW0wPVIoMDI0NjhBQ0UqKioqKioqKikKKwlwYWNrdXN3YiAgeG1tMSx4bW0xCQk7IHhtbTE9UigxMzU3OUJERioqKioqKioqKQorCisJcGFkZHcgICAgIHhtbTIseG1tNgkJOyB4bW0yPSgoRy1ZKStZRSk9R0U9RygwMjQ2OEFDRSkKKwlwYWRkdyAgICAgeG1tMyx4bW03CQk7IHhtbTM9KChHLVkpK1lPKT1HTz1HKDEzNTc5QkRGKQorCXBhY2t1c3diICB4bW0yLHhtbTIJCTsgeG1tMj1HKDAyNDY4QUNFKioqKioqKiopCisJcGFja3Vzd2IgIHhtbTMseG1tMwkJOyB4bW0zPUcoMTM1NzlCREYqKioqKioqKikKKworCXBhZGR3ICAgICB4bW00LHhtbTYJCTsgeG1tND0oKEItWSkrWUUpPUJFPUIoMDI0NjhBQ0UpCisJcGFkZHcgICAgIHhtbTUseG1tNwkJOyB4bW01PSgoQi1ZKStZTyk9Qk89QigxMzU3OUJERikKKwlwYWNrdXN3YiAgeG1tNCx4bW00CQk7IHhtbTQ9QigwMjQ2OEFDRSoqKioqKioqKQorCXBhY2t1c3diICB4bW01LHhtbTUJCTsgeG1tNT1CKDEzNTc5QkRGKioqKioqKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KKworCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKwk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorCTsgeG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiogKiopLCB4bW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKwlwdW5wY2tsYncgeG1tRSx4bW1CCTsgeG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYpCisJcHVucGNrbGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGKQorCisJbW92ZHFhICAgIHhtbUcseG1tQQorCW1vdmRxYSAgICB4bW1ILHhtbUEKKwlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisJcHVucGNraHdkIHhtbUcseG1tRQk7IHhtbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGKQorCisJcHNybGRxICAgIHhtbUgsMgk7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQorCXBzcmxkcSAgICB4bW1FLDIJOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1DLHhtbUQKKwltb3ZkcWEgICAgeG1tQix4bW1ECisJcHVucGNrbHdkIHhtbUQseG1tSAk7IHhtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4KQorCXB1bnBja2h3ZCB4bW1DLHhtbUgJOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKKworCXBzcmxkcSAgICB4bW1CLDIJOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1GLHhtbUUKKwlwdW5wY2tsd2QgeG1tRSx4bW1CCTsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCisJcHVucGNraHdkIHhtbUYseG1tQgk7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQorCisJcHNodWZkICAgIHhtbUgseG1tQSwweDRFOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKwltb3ZkcWEgICAgeG1tQix4bW1FCisJcHVucGNrbGRxIHhtbUEseG1tRAk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQorCXB1bnBja2xkcSB4bW1FLHhtbUgJOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKKwlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkpCisKKwlwc2h1ZmQgICAgeG1tSCx4bW1HLDB4NEU7IHhtbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCKQorCW1vdmRxYSAgICB4bW1CLHhtbUYKKwlwdW5wY2tsZHEgeG1tRyx4bW1DCTsgeG1tRz0oMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMEEgMUEgMkEgMEIgMUIgMkIgMEMgMUMpCisJcHVucGNrbGRxIHhtbUYseG1tSAk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGKQorCXB1bnBja2hkcSB4bW1DLHhtbUIJOyB4bW1DPSgxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRiAxRiAyRiAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXB1bnBja2xxZHEgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisJcHVucGNrbHFkcSB4bW1ELHhtbUcJOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKwlwdW5wY2tscWRxIHhtbUYseG1tQwk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorCisJZGVjCWFsCQkJOyBZVmN0cgorCWp6CXNob3J0IC5ZVmxvb3BfYnJlYWsKKworCW1vdmRxYQlYTU1XT1JEIFt3ayg2KV0sIHhtbUEKKwltb3ZkcWEJWE1NV09SRCBbd2soNyldLCB4bW1ECisJbW92ZHFhCVhNTVdPUkQgW3drKDgpXSwgeG1tRgorCisJam1wCW5lYXIgLllWbG9vcF8ybmQKKwlhbGlnbngJMTYsNworCisuWVZsb29wX2JyZWFrOgorCW1vdmRxYQl4bW1ILCBYTU1XT1JEIFt3ayg2KV0KKwltb3ZkcWEJeG1tQiwgWE1NV09SRCBbd2soNyldCisJbW92ZHFhCXhtbUUsIFhNTVdPUkQgW3drKDgpXQorCisJcGNtcGVxYgl4bW1HLHhtbUcJOyB4bW1HPShhbGwgMSdzKQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCW5lYXIgLmNvbHVtbl9zdDMyCisKKwl0ZXN0CWVkaSwgU0laRU9GX1hNTVdPUkQtMQorCWpueglzaG9ydCAub3V0MDEKKwk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1vdm50ZHEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKwltb3ZudGRxCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjEKKwlqbXAJc2hvcnQgLm91dDAwCisub3V0MDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisJbWFza21vdmRxdSB4bW1BLHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMQorCW1hc2ttb3ZkcXUgeG1tRCx4bW1HCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjEKKwltYXNrbW92ZHF1IHhtbUYseG1tRwkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tRgorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIxCisub3V0MDA6CisJdGVzdAllc2ksIFNJWkVPRl9YTU1XT1JELTEKKwlqbnoJc2hvcnQgLm91dDExCisJOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKwltb3ZudGRxCVhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAorCW1vdm50ZHEJWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1CCisJbW92bnRkcQlYTU1XT1JEIFtlc2krMipTSVpFT0ZfWE1NV09SRF0sIHhtbUUKKwlhZGQJZXNpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIwCisJam1wCXNob3J0IC5vdXQxMAorLm91dDExOgk7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorCXhjaGcJZWRpLGVzaQkJCQk7IGVkaT1vdXRwdHIwLCBlc2k9b3V0cHRyMQorCW1hc2ttb3ZkcXUgeG1tSCx4bW1HCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ICisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjAKKwltYXNrbW92ZHF1IHhtbUIseG1tRwkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQgorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIwCisJbWFza21vdmRxdSB4bW1FLHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUUKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMAorCXhjaGcJZWRpLGVzaQkJCQk7IGVkaT1vdXRwdHIxLCBlc2k9b3V0cHRyMAorLm91dDEwOgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqegluZWFyIC5lbmRjb2x1bW4KKworCWFkZAllYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAwCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMDEKKwlkZWMJYWgJCQk7IFlIY3RyCisJam56CW5lYXIgLllIbG9vcF8ybmQKKworCXB1c2gJZWJ4CQkJCTsgaW5wdHIwMAorCXB1c2gJZWR4CQkJCTsgaW5wdHIwMQorCW1vdgllYngsIEpTQU1QUk9XIFtpbnB0cjFdCQk7IGVieD1pbnB0cjEKKwltb3YJZWR4LCBKU0FNUFJPVyBbaW5wdHIyXQkJOyBlZHg9aW5wdHIyCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKKwlqbXAJbmVhciAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5fc3QzMjoKKwlsZWEJZWN4LCBbZWN4K2VjeCoyXQkJOyBpbXVsIGVjeCwgUkdCX1BJWEVMU0laRQorCWNtcAllY3gsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNgorCW1hc2ttb3ZkcXUgeG1tQSx4bW1HCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjEKKwltYXNrbW92ZHF1IHhtbUQseG1tRwkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIxCisJeGNoZwllZGksZXNpCQkJCTsgZWRpPW91dHB0cjAsIGVzaT1vdXRwdHIxCisJbWFza21vdmRxdSB4bW1ILHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUgKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMAorCW1hc2ttb3ZkcXUgeG1tQix4bW1HCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1CCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjAKKwl4Y2hnCWVkaSxlc2kJCQkJOyBlZGk9b3V0cHRyMSwgZXNpPW91dHB0cjAKKwltb3ZkcWEJeG1tQSx4bW1GCisJbW92ZHFhCXhtbUgseG1tRQorCXN1YgllY3gsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWptcAlzaG9ydCAuY29sdW1uX3N0MTUKKy5jb2x1bW5fc3QxNjoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDE1CisJbWFza21vdmRxdSB4bW1BLHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMQorCXhjaGcJZWRpLGVzaQkJCQk7IGVkaT1vdXRwdHIwLCBlc2k9b3V0cHRyMQorCW1hc2ttb3ZkcXUgeG1tSCx4bW1HCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ICisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjAKKwl4Y2hnCWVkaSxlc2kJCQkJOyBlZGk9b3V0cHRyMSwgZXNpPW91dHB0cjAKKwltb3ZkcWEJeG1tQSx4bW1ECisJbW92ZHFhCXhtbUgseG1tQgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKy5jb2x1bW5fc3QxNToKKwltb3YJZWR4LGVjeAorCXhvcgllY3gsIGJ5dGUgMHgwRgorCXNobAllY3gsIDIKKwltb3ZkCXhtbUMsZWN4CisJcHNybHEJeG1tRyw0CisJcGNtcGVxYgl4bW1ELHhtbUQKKwlwc3JscQl4bW1HLHhtbUMKKwlwc3JscQl4bW1ELHhtbUMKKwlwdW5wY2tsYncgeG1tRCx4bW1HCisJbW92ZHFhICAgIHhtbUIseG1tRAorCTsgPT09PT09PT09PT09PT09PQorCW1vdgllY3gsZWRpCisJYW5kCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC0xCisJanoJc2hvcnQgLmFkajBhCisJbGVhCWVheCwgW2VjeCtlZHhdCisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCXNob3J0IC5hZGowYQorCWFuZAllZGksIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5CisJc2hsCWVjeCwgMwkJCTsgcHNsbGRxIHhtbUEsZWN4ICYgcHNsbGRxIHhtbUQsZWN4CisJbW92ZHFhCXhtbUYseG1tQQorCW1vdmRxYQl4bW1FLHhtbUQKKwlwc2xsZHEJeG1tQSwgU0laRU9GX1hNTVdPUkQvMgorCXBzbGxkcQl4bW1ELCBTSVpFT0ZfWE1NV09SRC8yCisJbW92ZAl4bW1DLGVjeAorCXN1YgllY3gsIGJ5dGUgKFNJWkVPRl9YTU1XT1JELzIpKkJZVEVfQklUCisJamIJc2hvcnQgLmFkajFhCisJbW92ZAl4bW1HLGVjeAorCXBzbGxxCXhtbUEseG1tRworCXBzbGxxCXhtbUQseG1tRworCWptcAlzaG9ydCAuYWRqMGEKKy5hZGoxYToJbmVnCWVjeAorCW1vdmQJeG1tRyxlY3gKKwlwc3JscQl4bW1BLHhtbUcKKwlwc3JscQl4bW1ELHhtbUcKKwlwc2xscQl4bW1GLHhtbUMKKwlwc2xscQl4bW1FLHhtbUMKKwlwb3IJeG1tQSx4bW1GCisJcG9yCXhtbUQseG1tRQorLmFkajBhOgk7IC0tLS0tLS0tLS0tLS0tLS0KKwltYXNrbW92ZHF1IHhtbUEseG1tRAkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCXhjaGcJZWRpLGVzaQkJCQk7IGVkaT1vdXRwdHIwLCBlc2k9b3V0cHRyMQorCTsgPT09PT09PT09PT09PT09PQorCW1vdgllY3gsZWRpCisJYW5kCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC0xCisJanoJc2hvcnQgLmFkajBiCisJbGVhCWVheCwgW2VjeCtlZHhdCisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCXNob3J0IC5hZGowYgorCWFuZAllZGksIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5CisJc2hsCWVjeCwgMwkJCTsgcHNsbGRxIHhtbUgsZWN4ICYgcHNsbGRxIHhtbUIsZWN4CisJbW92ZHFhCXhtbUcseG1tSAorCW1vdmRxYQl4bW1DLHhtbUIKKwlwc2xsZHEJeG1tSCwgU0laRU9GX1hNTVdPUkQvMgorCXBzbGxkcQl4bW1CLCBTSVpFT0ZfWE1NV09SRC8yCisJbW92ZAl4bW1GLGVjeAorCXN1YgllY3gsIGJ5dGUgKFNJWkVPRl9YTU1XT1JELzIpKkJZVEVfQklUCisJamIJc2hvcnQgLmFkajFiCisJbW92ZAl4bW1FLGVjeAorCXBzbGxxCXhtbUgseG1tRQorCXBzbGxxCXhtbUIseG1tRQorCWptcAlzaG9ydCAuYWRqMGIKKy5hZGoxYjoJbmVnCWVjeAorCW1vdmQJeG1tRSxlY3gKKwlwc3JscQl4bW1ILHhtbUUKKwlwc3JscQl4bW1CLHhtbUUKKwlwc2xscQl4bW1HLHhtbUYKKwlwc2xscQl4bW1DLHhtbUYKKwlwb3IJeG1tSCx4bW1HCisJcG9yCXhtbUIseG1tQworLmFkajBiOgk7IC0tLS0tLS0tLS0tLS0tLS0KKwltYXNrbW92ZHF1IHhtbUgseG1tQgkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tSAorCislZWxzZSA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisJcGNtcGVxYiAgIHhtbTYseG1tNgkJOyB4bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKikKKwlwY21wZXFiICAgeG1tNyx4bW03CQk7IHhtbTc9WE89WCgxMzU3OUJERioqKioqKioqKQorJWVsc2UKKwlweG9yICAgICAgeG1tNix4bW02CQk7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorCXB4b3IgICAgICB4bW03LHhtbTcJCTsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCislZW5kaWYKKwk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKwk7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFICoqKSwgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgKiopCisKKwlwdW5wY2tsYncgeG1tQSx4bW1DCTsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCisJcHVucGNrbGJ3IHhtbUUseG1tRwk7IHhtbUU9KDIwIDMwIDIyIDMyIDI0IDM0IDI2IDM2IDI4IDM4IDJBIDNBIDJDIDNDIDJFIDNFKQorCXB1bnBja2xidyB4bW1CLHhtbUQJOyB4bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRikKKwlwdW5wY2tsYncgeG1tRix4bW1ICTsgeG1tRj0oMjEgMzEgMjMgMzMgMjUgMzUgMjcgMzcgMjkgMzkgMkIgM0IgMkQgM0QgMkYgM0YpCisKKwltb3ZkcWEgICAgeG1tQyx4bW1BCisJcHVucGNrbHdkIHhtbUEseG1tRQk7IHhtbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KQorCXB1bnBja2h3ZCB4bW1DLHhtbUUJOyB4bW1DPSgwOCAxOCAyOCAzOCAwQSAxQSAyQSAzQSAwQyAxQyAyQyAzQyAwRSAxRSAyRSAzRSkKKwltb3ZkcWEgICAgeG1tRyx4bW1CCisJcHVucGNrbHdkIHhtbUIseG1tRgk7IHhtbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3KQorCXB1bnBja2h3ZCB4bW1HLHhtbUYJOyB4bW1HPSgwOSAxOSAyOSAzOSAwQiAxQiAyQiAzQiAwRCAxRCAyRCAzRCAwRiAxRiAyRiAzRikKKworCW1vdmRxYSAgICB4bW1ELHhtbUEKKwlwdW5wY2tsZHEgeG1tQSx4bW1CCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJcHVucGNraGRxIHhtbUQseG1tQgk7IHhtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCW1vdmRxYSAgICB4bW1ILHhtbUMKKwlwdW5wY2tsZHEgeG1tQyx4bW1HCTsgeG1tQz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCisJcHVucGNraGRxIHhtbUgseG1tRwk7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorCisJZGVjCWFsCQkJOyBZVmN0cgorCWp6CXNob3J0IC5ZVmxvb3BfYnJlYWsKKworCW1vdmRxYQlYTU1XT1JEIFt3ayg2KV0sIHhtbUEKKwltb3ZkcWEJWE1NV09SRCBbd2soNyldLCB4bW1ECisJbW92ZHFhCVhNTVdPUkQgW3drKDgpXSwgeG1tQworCW1vdmRxYQlYTU1XT1JEIFt3ayg5KV0sIHhtbUgKKworCWptcAluZWFyIC5ZVmxvb3BfMm5kCisJYWxpZ254CTE2LDcKKworLllWbG9vcF9icmVhazoKKwltb3ZkcWEJeG1tRSwgWE1NV09SRCBbd2soNildCisJbW92ZHFhCXhtbUYsIFhNTVdPUkQgW3drKDcpXQorCW1vdmRxYQl4bW1CLCBYTU1XT1JEIFt3ayg4KV0KKworCXBjbXBlcWIJeG1tRyx4bW1HCTsgeG1tRz0oYWxsIDEncykKKworCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYgluZWFyIC5jb2x1bW5fc3QzMgorCisJdGVzdAllZGksIFNJWkVPRl9YTU1XT1JELTEKKwlqbnoJc2hvcnQgLm91dDAxCisJOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKwltb3ZudGRxCVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorCW1vdm50ZHEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKKwltb3ZudGRxCVhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAorCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjEKKwlqbXAJc2hvcnQgLm91dDAwCisub3V0MDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisJbWFza21vdmRxdSB4bW1BLHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMQorCW1hc2ttb3ZkcXUgeG1tRCx4bW1HCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjEKKwltYXNrbW92ZHF1IHhtbUMseG1tRwkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQworCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIxCisJbWFza21vdmRxdSB4bW1ILHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUgKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMQorLm91dDAwOgorCW1vdmRxYQl4bW1BLCBYTU1XT1JEIFt3ayg5KV0KKworCXRlc3QJZXNpLCBTSVpFT0ZfWE1NV09SRC0xCisJam56CXNob3J0IC5vdXQxMQorCTsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisJbW92bnRkcQlYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUUKKwltb3ZudGRxCVhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorCW1vdm50ZHEJWE1NV09SRCBbZXNpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1CCisJbW92bnRkcQlYTU1XT1JEIFtlc2krMypTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKwlhZGQJZXNpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIwCisJam1wCXNob3J0IC5vdXQxMAorLm91dDExOgk7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorCXhjaGcJZWRpLGVzaQkJCQk7IGVkaT1vdXRwdHIwLCBlc2k9b3V0cHRyMQorCW1hc2ttb3ZkcXUgeG1tRSx4bW1HCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1FCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjAKKwltYXNrbW92ZHF1IHhtbUYseG1tRwkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tRgorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIwCisJbWFza21vdmRxdSB4bW1CLHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUIKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMAorCW1hc2ttb3ZkcXUgeG1tQSx4bW1HCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjAKKwl4Y2hnCWVkaSxlc2kJCQkJOyBlZGk9b3V0cHRyMSwgZXNpPW91dHB0cjAKKy5vdXQxMDoKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJanoJbmVhciAuZW5kY29sdW1uCisKKwlhZGQJZWJ4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIwMAorCWFkZAllZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAxCisJZGVjCWFoCQkJOyBZSGN0cgorCWpuegluZWFyIC5ZSGxvb3BfMm5kCisKKwlwdXNoCWVieAkJCQk7IGlucHRyMDAKKwlwdXNoCWVkeAkJCQk7IGlucHRyMDEKKwltb3YJZWJ4LCBKU0FNUFJPVyBbaW5wdHIxXQkJOyBlYng9aW5wdHIxCisJbW92CWVkeCwgSlNBTVBST1cgW2lucHRyMl0JCTsgZWR4PWlucHRyMgorCWFkZAllYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIyCisJam1wCW5lYXIgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1uX3N0MzI6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisJamIJc2hvcnQgLmNvbHVtbl9zdDE2CisJbWFza21vdmRxdSB4bW1BLHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMQorCW1hc2ttb3ZkcXUgeG1tRCx4bW1HCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjEKKwl4Y2hnCWVkaSxlc2kJCQkJOyBlZGk9b3V0cHRyMCwgZXNpPW91dHB0cjEKKwltYXNrbW92ZHF1IHhtbUUseG1tRwkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tRQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIwCisJbWFza21vdmRxdSB4bW1GLHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUYKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMAorCXhjaGcJZWRpLGVzaQkJCQk7IGVkaT1vdXRwdHIxLCBlc2k9b3V0cHRyMAorCW1vdmRxYQl4bW1BLHhtbUMKKwltb3ZkcWEJeG1tRCx4bW1ICisJbW92ZHFhCXhtbUUseG1tQgorCW1vdmRxYQl4bW1GLCBYTU1XT1JEIFt3ayg5KV0KKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKy5jb2x1bW5fc3QxNjoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTUKKwltYXNrbW92ZHF1IHhtbUEseG1tRwkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIxCisJeGNoZwllZGksZXNpCQkJCTsgZWRpPW91dHB0cjAsIGVzaT1vdXRwdHIxCisJbWFza21vdmRxdSB4bW1FLHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUUKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMAorCXhjaGcJZWRpLGVzaQkJCQk7IGVkaT1vdXRwdHIxLCBlc2k9b3V0cHRyMAorCW1vdmRxYQl4bW1BLHhtbUQKKwltb3ZkcWEJeG1tRSx4bW1GCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisuY29sdW1uX3N0MTU6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8xNgorCWpiCW5lYXIgLmVuZGNvbHVtbgorCW1vdgllZHgsZWN4CisJeG9yCWVjeCwgYnl0ZSAweDAzCisJaW5jCWVjeAorCXNobAllY3gsIDQKKwltb3ZkCXhtbUMsZWN4CisJcHNybHEJeG1tRyx4bW1DCisJcHVucGNrbGJ3IHhtbUcseG1tRworCW1vdmRxYSAgICB4bW1ILHhtbUcKKwk7ID09PT09PT09PT09PT09PT0KKwltb3YJZWN4LGVkaQorCWFuZAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5hZGowYQorCWxlYQllYXgsIFtlY3grZWR4KjRdCTsgUkdCX1BJWEVMU0laRQorCWNtcAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYQlzaG9ydCAuYWRqMGEKKwlhbmQJZWRpLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQorCXNobAllY3gsIDMJCQk7IHBzbGxkcSB4bW1BLGVjeCAmIHBzbGxkcSB4bW1HLGVjeAorCW1vdmRxYQl4bW1CLHhtbUEKKwltb3ZkcWEJeG1tRCx4bW1HCisJcHNsbGRxCXhtbUEsIFNJWkVPRl9YTU1XT1JELzIKKwlwc2xsZHEJeG1tRywgU0laRU9GX1hNTVdPUkQvMgorCW1vdmQJeG1tRixlY3gKKwlzdWIJZWN4LCBieXRlIChTSVpFT0ZfWE1NV09SRC8yKSpCWVRFX0JJVAorCWpiCXNob3J0IC5hZGoxYQorCW1vdmQJeG1tQyxlY3gKKwlwc2xscQl4bW1BLHhtbUMKKwlwc2xscQl4bW1HLHhtbUMKKwlqbXAJc2hvcnQgLmFkajBhCisuYWRqMWE6CW5lZwllY3gKKwltb3ZkCXhtbUMsZWN4CisJcHNybHEJeG1tQSx4bW1DCisJcHNybHEJeG1tRyx4bW1DCisJcHNsbHEJeG1tQix4bW1GCisJcHNsbHEJeG1tRCx4bW1GCisJcG9yCXhtbUEseG1tQgorCXBvcgl4bW1HLHhtbUQKKy5hZGowYToJOyAtLS0tLS0tLS0tLS0tLS0tCisJbWFza21vdmRxdSB4bW1BLHhtbUcJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwl4Y2hnCWVkaSxlc2kJCQkJOyBlZGk9b3V0cHRyMCwgZXNpPW91dHB0cjEKKwk7ID09PT09PT09PT09PT09PT0KKwltb3YJZWN4LGVkaQorCWFuZAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5hZGowYgorCWxlYQllYXgsIFtlY3grZWR4KjRdCTsgUkdCX1BJWEVMU0laRQorCWNtcAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYQlzaG9ydCAuYWRqMGIKKwlhbmQJZWRpLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQorCXNobAllY3gsIDMJCQk7IHBzbGxkcSB4bW1FLGVjeCAmIHBzbGxkcSB4bW1ILGVjeAorCW1vdmRxYQl4bW1DLHhtbUUKKwltb3ZkcWEJeG1tRix4bW1ICisJcHNsbGRxCXhtbUUsIFNJWkVPRl9YTU1XT1JELzIKKwlwc2xsZHEJeG1tSCwgU0laRU9GX1hNTVdPUkQvMgorCW1vdmQJeG1tQixlY3gKKwlzdWIJZWN4LCBieXRlIChTSVpFT0ZfWE1NV09SRC8yKSpCWVRFX0JJVAorCWpiCXNob3J0IC5hZGoxYgorCW1vdmQJeG1tRCxlY3gKKwlwc2xscQl4bW1FLHhtbUQKKwlwc2xscQl4bW1ILHhtbUQKKwlqbXAJc2hvcnQgLmFkajBiCisuYWRqMWI6CW5lZwllY3gKKwltb3ZkCXhtbUQsZWN4CisJcHNybHEJeG1tRSx4bW1ECisJcHNybHEJeG1tSCx4bW1ECisJcHNsbHEJeG1tQyx4bW1CCisJcHNsbHEJeG1tRix4bW1CCisJcG9yCXhtbUUseG1tQworCXBvcgl4bW1ILHhtbUYKKy5hZGowYjoJOyAtLS0tLS0tLS0tLS0tLS0tCisJbWFza21vdmRxdSB4bW1FLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUUKKworJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisuZW5kY29sdW1uOgorCXNmZW5jZQkJOyBmbHVzaCB0aGUgd3JpdGUgYnVmZmVyCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCislZW5kaWYgOyAhVVNFX0RFRElDQVRFRF9IMlYyX01FUkdFRF9VUFNBTVBMRV9TU0UyCisKKyVlbmRpZiA7IEpETUVSR0VfU1NFMl9TVVBQT1JURUQKKyVlbmRpZiA7IFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVECislZW5kaWYgOyBSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0CmRpZmYgLS1naXQgYS9qZHBodWZmLmMgYi9qZHBodWZmLmMKaW5kZXggMjI2NzgwOS4uYTFkOTJiNyAxMDA2NDQKLS0tIGEvamRwaHVmZi5jCisrKyBiL2pkcGh1ZmYuYwpAQCAtNSw2ICs1LDEzIEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgKiBMYXN0IE1vZGlmaWVkIDogT2N0b2JlciAzMSwgMjAwNAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZyByb3V0aW5lcyBmb3IgcHJvZ3Jlc3NpdmUgSlBFRy4KICAqCiAgKiBNdWNoIG9mIHRoZSBjb21wbGV4aXR5IGhlcmUgaGFzIHRvIGRvIHdpdGggc3VwcG9ydGluZyBpbnB1dCBzdXNwZW5zaW9uLgpAQCAtNjksNiArNzYsNyBAQAogICBkX2Rlcml2ZWRfdGJsICogZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOwogCiAgIGRfZGVyaXZlZF90YmwgKiBhY19kZXJpdmVkX3RibDsgLyogYWN0aXZlIHRhYmxlIGR1cmluZyBhbiBBQyBzY2FuICovCisgIGRfZGVyaXZlZF90YmwgKiBkY19kZXJpdmVkX3RibHNbTUFYX0NPTVBTX0lOX1NDQU5dOwogfSBwaHVmZl9lbnRyb3B5X2RlY29kZXI7CiAKIHR5cGVkZWYgcGh1ZmZfZW50cm9weV9kZWNvZGVyICogcGh1ZmZfZW50cm9weV9wdHI7CkBAIC0xNjgsNiArMTc2LDcgQEAKIAl0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87CiAJanBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIFRSVUUsIHRibCwKIAkJCQkmIGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdKTsKKwllbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbY2ldID0gZW50cm9weS0+ZGVyaXZlZF90YmxzW3RibF07CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIHRibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKQEAgLTE5NCwzMiArMjAzLDYgQEAKIAogCiAvKgotICogRmlndXJlIEYuMTI6IGV4dGVuZCBzaWduIGJpdC4KLSAqIE9uIHNvbWUgbWFjaGluZXMsIGEgc2hpZnQgYW5kIGFkZCB3aWxsIGJlIGZhc3RlciB0aGFuIGEgdGFibGUgbG9va3VwLgotICovCi0KLSNpZmRlZiBBVk9JRF9UQUJMRVMKLQotI2RlZmluZSBIVUZGX0VYVEVORCh4LHMpICAoKHgpIDwgKDE8PCgocyktMSkpID8gKHgpICsgKCgoLTEpPDwocykpICsgMSkgOiAoeCkpCi0KLSNlbHNlCi0KLSNkZWZpbmUgSFVGRl9FWFRFTkQoeCxzKSAgKCh4KSA8IGV4dGVuZF90ZXN0W3NdID8gKHgpICsgZXh0ZW5kX29mZnNldFtzXSA6ICh4KSkKLQotc3RhdGljIGNvbnN0IGludCBleHRlbmRfdGVzdFsxNl0gPSAgIC8qIGVudHJ5IG4gaXMgMioqKG4tMSkgKi8KLSAgeyAwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDA0LCAweDAwMDgsIDB4MDAxMCwgMHgwMDIwLCAweDAwNDAsIDB4MDA4MCwKLSAgICAweDAxMDAsIDB4MDIwMCwgMHgwNDAwLCAweDA4MDAsIDB4MTAwMCwgMHgyMDAwLCAweDQwMDAgfTsKLQotc3RhdGljIGNvbnN0IGludCBleHRlbmRfb2Zmc2V0WzE2XSA9IC8qIGVudHJ5IG4gaXMgKC0xIDw8IG4pICsgMSAqLwotICB7IDAsICgoLTEpPDwxKSArIDEsICgoLTEpPDwyKSArIDEsICgoLTEpPDwzKSArIDEsICgoLTEpPDw0KSArIDEsCi0gICAgKCgtMSk8PDUpICsgMSwgKCgtMSk8PDYpICsgMSwgKCgtMSk8PDcpICsgMSwgKCgtMSk8PDgpICsgMSwKLSAgICAoKC0xKTw8OSkgKyAxLCAoKC0xKTw8MTApICsgMSwgKCgtMSk8PDExKSArIDEsICgoLTEpPDwxMikgKyAxLAotICAgICgoLTEpPDwxMykgKyAxLCAoKC0xKTw8MTQpICsgMSwgKCgtMSk8PDE1KSArIDEgfTsKLQotI2VuZGlmIC8qIEFWT0lEX1RBQkxFUyAqLwotCi0KLS8qCiAgKiBDaGVjayBmb3IgYSByZXN0YXJ0IG1hcmtlciAmIHJlc3luY2hyb25pemUgZGVjb2Rlci4KICAqIFJldHVybnMgRkFMU0UgaWYgbXVzdCBzdXNwZW5kLgogICovCkBAIC0yODQsMTYgKzI2NywxMiBAQAogCiBNRVRIT0RERUYoYm9vbGVhbikKIGRlY29kZV9tY3VfRENfZmlyc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCi17ICAgCit7CiAgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OwogICBpbnQgQWwgPSBjaW5mby0+QWw7Ci0gIHJlZ2lzdGVyIGludCBzLCByOwotICBpbnQgYmxrbiwgY2k7Ci0gIEpCTE9DS1JPVyBibG9jazsKKyAgaW50IGJsa247CiAgIEJJVFJFQURfU1RBVEVfVkFSUzsKICAgc2F2YWJsZV9zdGF0ZSBzdGF0ZTsKLSAgZF9kZXJpdmVkX3RibCAqIHRibDsKLSAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CiAKICAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8KICAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CkBAIC0zMTQsMjEgKzI5Myw2NyBAQAogICAgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KIAogICAgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7Ci0gICAgICBibG9jayA9IE1DVV9kYXRhW2Jsa25dOwotICAgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07Ci0gICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwotICAgICAgdGJsID0gZW50cm9weS0+ZGVyaXZlZF90YmxzW2NvbXBwdHItPmRjX3RibF9ub107CisgICAgICBKQkxPQ0tST1cgYmxvY2sgPSBNQ1VfZGF0YVtibGtuXTsKKyAgICAgIGludCBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsKKyAgICAgIGRfZGVyaXZlZF90YmwgKiB0YmwgPSBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbY2ldOworICAgICAgcmVnaXN0ZXIgaW50IHM7CiAKICAgICAgIC8qIERlY29kZSBhIHNpbmdsZSBibG9jaydzIHdvcnRoIG9mIGNvZWZmaWNpZW50cyAqLwogCiAgICAgICAvKiBTZWN0aW9uIEYuMi4yLjE6IGRlY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSAqLwotICAgICAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIHRibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDEpOwotICAgICAgaWYgKHMpIHsKLQlDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOwotCXIgPSBHRVRfQklUUyhzKTsKLQlzID0gSFVGRl9FWFRFTkQociwgcyk7CisgICAgICB7CQkvKiBIVUZGWF9ERUNPREUgKi8KKwlyZWdpc3RlciBpbnQgbmIsIGxvb2ssIHQ7CisJaWYgKGJpdHNfbGVmdCA8IEhVRkZYX0xPT0tBSEVBRCkgeworCSAgcmVnaXN0ZXIgY29uc3QgSk9DVEVUICogbmV4dF9pbnB1dF9ieXRlID0gYnJfc3RhdGUubmV4dF9pbnB1dF9ieXRlOworCSAgcmVnaXN0ZXIgc2l6ZV90ICAgICAgICAgYnl0ZXNfaW5fYnVmZmVyID0gYnJfc3RhdGUuYnl0ZXNfaW5fYnVmZmVyOworCSAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApIHsKKwkgICAgd2hpbGUgKGJpdHNfbGVmdCA8IE1JTl9HRVRfQklUUykgeworCSAgICAgIHJlZ2lzdGVyIGludCBjOworCSAgICAgIGlmIChieXRlc19pbl9idWZmZXIgPT0gMCB8fAorCQkgIChjID0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUpKSA9PSAweEZGKSB7CisJCWdvdG8gbGFiZWwxMTsgfQorCSAgICAgIGJ5dGVzX2luX2J1ZmZlci0tOyBuZXh0X2lucHV0X2J5dGUrKzsKKwkgICAgICBnZXRfYnVmZmVyID0gKGdldF9idWZmZXIgPDwgOCkgfCBjOworCSAgICAgIGJpdHNfbGVmdCArPSA4OworCSAgICB9CisJICAgIGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZSA9IG5leHRfaW5wdXRfYnl0ZTsKKwkgICAgYnJfc3RhdGUuYnl0ZXNfaW5fYnVmZmVyID0gYnl0ZXNfaW5fYnVmZmVyOworCSAgfSBlbHNlIHsKKwlsYWJlbDExOgorCSAgICBicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGUgPSBuZXh0X2lucHV0X2J5dGU7CisJICAgIGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlciA9IGJ5dGVzX2luX2J1ZmZlcjsKKwkgICAgaWYgKCEganBlZ19maWxsX2JpdF9idWZmZXIoJmJyX3N0YXRlLGdldF9idWZmZXIsYml0c19sZWZ0LCAwKSkgeworCSAgICAgIHJldHVybiBGQUxTRTsgfQorCSAgICBnZXRfYnVmZmVyID0gYnJfc3RhdGUuZ2V0X2J1ZmZlcjsgYml0c19sZWZ0ID0gYnJfc3RhdGUuYml0c19sZWZ0OworCSAgICBpZiAoYml0c19sZWZ0IDwgSFVGRlhfTE9PS0FIRUFEKSB7CisJICAgICAgbmIgPSAxOyBnb3RvIGxhYmVsMTsKKwkgICAgfQorCSAgfQorCX0KKwlsb29rID0gUEVFS19CSVRTKEhVRkZYX0xPT0tBSEVBRCk7CisJaWYgKChuYiA9IHRibC0+bG9va3hfbmJpdHNbbG9va10pICE9IDApIHsKKwkgIHMgPSB0YmwtPmxvb2t4X3ZhbFtsb29rXTsKKwkgIGlmIChuYiA8PSBIVUZGWF9MT09LQUhFQUQpIHsKKwkgICAgRFJPUF9CSVRTKG5iKTsKKwkgIH0gZWxzZSB7CisJICAgIERST1BfQklUUyhIVUZGWF9MT09LQUhFQUQpOworCSAgICBuYiAtPSBIVUZGWF9MT09LQUhFQUQ7CisJICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIG5iLCByZXR1cm4gRkFMU0UpOworCSAgICBzICs9IEdFVF9CSVRTKG5iKTsKKwkgIH0KKwl9IGVsc2UgeworCSAgbmIgPSBIVUZGWF9MT09LQUhFQUQ7CisgICAgICBsYWJlbDE6CisJICBpZiAoKHM9anBlZ19odWZmX2RlY29kZSgmYnJfc3RhdGUsZ2V0X2J1ZmZlcixiaXRzX2xlZnQsdGJsLG5iKSkKKwkgICAgICAgPCAwKSB7IHJldHVybiBGQUxTRTsgfQorCSAgZ2V0X2J1ZmZlciA9IGJyX3N0YXRlLmdldF9idWZmZXI7IGJpdHNfbGVmdCA9IGJyX3N0YXRlLmJpdHNfbGVmdDsKKwkgIGlmIChzKSB7CisJICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7CisJICAgIHQgPSBHRVRfQklUUyhzKTsKKwkgICAgcyA9IEhVRkZfRVhURU5EKHQsIHMpOworCSAgfQorCX0KICAgICAgIH0KLQogICAgICAgLyogQ29udmVydCBEQyBkaWZmZXJlbmNlIHRvIGFjdHVhbCB2YWx1ZSwgdXBkYXRlIGxhc3RfZGNfdmFsICovCiAgICAgICBzICs9IHN0YXRlLmxhc3RfZGNfdmFsW2NpXTsKICAgICAgIHN0YXRlLmxhc3RfZGNfdmFsW2NpXSA9IHM7CkBAIC0zNTUsMTUgKzM4MCwxMiBAQAogCiBNRVRIT0RERUYoYm9vbGVhbikKIGRlY29kZV9tY3VfQUNfZmlyc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCi17ICAgCit7CiAgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OwogICBpbnQgU2UgPSBjaW5mby0+U2U7CiAgIGludCBBbCA9IGNpbmZvLT5BbDsKLSAgcmVnaXN0ZXIgaW50IHMsIGssIHI7CiAgIHVuc2lnbmVkIGludCBFT0JSVU47Ci0gIEpCTE9DS1JPVyBibG9jazsKICAgQklUUkVBRF9TVEFURV9WQVJTOwotICBkX2Rlcml2ZWRfdGJsICogdGJsOwogCiAgIC8qIFByb2Nlc3MgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkOyBtYXkgaGF2ZSB0byBzdXNwZW5kICovCiAgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgewpAQCAtMzg0LDIyICs0MDYsNzQgQEAKIAogICAgIC8qIFRoZXJlIGlzIGFsd2F5cyBvbmx5IG9uZSBibG9jayBwZXIgTUNVICovCiAKLSAgICBpZiAoRU9CUlVOID4gMCkJCS8qIGlmIGl0J3MgYSBiYW5kIG9mIHplcm9lcy4uLiAqLworICAgIGlmIChFT0JSVU4gPiAwKSB7CQkvKiBpZiBpdCdzIGEgYmFuZCBvZiB6ZXJvZXMuLi4gKi8KICAgICAgIEVPQlJVTi0tOwkJCS8qIC4uLnByb2Nlc3MgaXQgbm93ICh3ZSBkbyBub3RoaW5nKSAqLwotICAgIGVsc2UgeworICAgIH0gZWxzZSB7CisgICAgICBKQkxPQ0tST1cgYmxvY2sgPSBNQ1VfZGF0YVswXTsKKyAgICAgIGRfZGVyaXZlZF90YmwgKiB0YmwgPSBlbnRyb3B5LT5hY19kZXJpdmVkX3RibDsKKyAgICAgIHJlZ2lzdGVyIGludCBzLCBrLCByOworCisgICAgICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgKi8KICAgICAgIEJJVFJFQURfTE9BRF9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7Ci0gICAgICBibG9jayA9IE1DVV9kYXRhWzBdOwotICAgICAgdGJsID0gZW50cm9weS0+YWNfZGVyaXZlZF90Ymw7CiAKICAgICAgIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBTZTsgaysrKSB7Ci0JSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIHRibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDIpOwotCXIgPSBzID4+IDQ7Ci0JcyAmPSAxNTsKKwl7CS8qIEhVRkZYX0RFQ09ERSAqLworCSAgcmVnaXN0ZXIgaW50IG5iLCBsb29rLCB0OworCSAgaWYgKGJpdHNfbGVmdCA8IEhVRkZYX0xPT0tBSEVBRCkgeworCSAgICByZWdpc3RlciBjb25zdCBKT0NURVQgKiBuZXh0X2lucHV0X2J5dGUgPSBicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGU7CisJICAgIHJlZ2lzdGVyIHNpemVfdCAgICAgICAgIGJ5dGVzX2luX2J1ZmZlciA9IGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlcjsKKwkgICAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApIHsKKwkgICAgICB3aGlsZSAoYml0c19sZWZ0IDwgTUlOX0dFVF9CSVRTKSB7CisJCXJlZ2lzdGVyIGludCBjOworCQlpZiAoYnl0ZXNfaW5fYnVmZmVyID09IDAgfHwKKwkJICAgIChjID0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUpKSA9PSAweEZGKSB7CisJCSAgZ290byBsYWJlbDIxOyB9CisJCWJ5dGVzX2luX2J1ZmZlci0tOyBuZXh0X2lucHV0X2J5dGUrKzsKKwkJZ2V0X2J1ZmZlciA9IChnZXRfYnVmZmVyIDw8IDgpIHwgYzsKKwkJYml0c19sZWZ0ICs9IDg7CisJICAgICAgfQorCSAgICAgIGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZSA9IG5leHRfaW5wdXRfYnl0ZTsKKwkgICAgICBicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgPSBieXRlc19pbl9idWZmZXI7CisJICAgIH0gZWxzZSB7CisJICBsYWJlbDIxOgorCSAgICAgIGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZSA9IG5leHRfaW5wdXRfYnl0ZTsKKwkgICAgICBicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgPSBieXRlc19pbl9idWZmZXI7CisJICAgICAgaWYgKCEganBlZ19maWxsX2JpdF9idWZmZXIoJmJyX3N0YXRlLGdldF9idWZmZXIsYml0c19sZWZ0LCAwKSkgeworCQlyZXR1cm4gRkFMU0U7IH0KKwkgICAgICBnZXRfYnVmZmVyID0gYnJfc3RhdGUuZ2V0X2J1ZmZlcjsgYml0c19sZWZ0ID0gYnJfc3RhdGUuYml0c19sZWZ0OworCSAgICAgIGlmIChiaXRzX2xlZnQgPCBIVUZGWF9MT09LQUhFQUQpIHsKKwkJbmIgPSAxOyBnb3RvIGxhYmVsMjsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KKwkgIGxvb2sgPSBQRUVLX0JJVFMoSFVGRlhfTE9PS0FIRUFEKTsKKwkgIGlmICgobmIgPSB0YmwtPmxvb2t4X25iaXRzW2xvb2tdKSAhPSAwKSB7CisJICAgIHMgPSB0YmwtPmxvb2t4X3ZhbFtsb29rXTsKKwkgICAgciA9IHRibC0+bG9va3hfc3ltW2xvb2tdID4+IDQ7CisJICAgIGlmIChuYiA8PSBIVUZGWF9MT09LQUhFQUQpIHsKKwkgICAgICBEUk9QX0JJVFMobmIpOworCSAgICB9IGVsc2UgeworCSAgICAgIERST1BfQklUUyhIVUZGWF9MT09LQUhFQUQpOworCSAgICAgIG5iIC09IEhVRkZYX0xPT0tBSEVBRDsKKwkgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBuYiwgcmV0dXJuIEZBTFNFKTsKKwkgICAgICBzICs9IEdFVF9CSVRTKG5iKTsKKwkgICAgfQorCSAgfSBlbHNlIHsKKwkgICAgbmIgPSBIVUZGWF9MT09LQUhFQUQ7CisJbGFiZWwyOgorCSAgICBpZiAoKHM9anBlZ19odWZmX2RlY29kZSgmYnJfc3RhdGUsZ2V0X2J1ZmZlcixiaXRzX2xlZnQsdGJsLG5iKSkKKwkJIDwgMCkgeyByZXR1cm4gRkFMU0U7IH0KKwkgICAgZ2V0X2J1ZmZlciA9IGJyX3N0YXRlLmdldF9idWZmZXI7IGJpdHNfbGVmdCA9IGJyX3N0YXRlLmJpdHNfbGVmdDsKKwkgICAgciA9IHMgPj4gNDsgcyAmPSAxNTsKKwkgICAgaWYgKHMpIHsKKwkgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOworCSAgICAgIHQgPSBHRVRfQklUUyhzKTsKKwkgICAgICBzID0gSFVGRl9FWFRFTkQodCwgcyk7CisJICAgIH0KKwkgIH0KKwl9CiAJaWYgKHMpIHsKIAkgIGsgKz0gcjsKLQkgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7Ci0JICByID0gR0VUX0JJVFMocyk7Ci0JICBzID0gSFVGRl9FWFRFTkQociwgcyk7CiAJICAvKiBTY2FsZSBhbmQgb3V0cHV0IGNvZWZmaWNpZW50IGluIG5hdHVyYWwgKGRlemlnemFnZ2VkKSBvcmRlciAqLwogCSAgKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSA9IChKQ09FRikgKHMgPDwgQWwpOwogCX0gZWxzZSB7CkBAIC00NDAsMTEgKzUxNCwxMCBAQAogCiBNRVRIT0RERUYoYm9vbGVhbikKIGRlY29kZV9tY3VfRENfcmVmaW5lIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoteyAgIAorewogICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKICAgaW50IHAxID0gMSA8PCBjaW5mby0+QWw7CS8qIDEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLwogICBpbnQgYmxrbjsKLSAgSkJMT0NLUk9XIGJsb2NrOwogICBCSVRSRUFEX1NUQVRFX1ZBUlM7CiAKICAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8KQEAgLTQ2NCw3ICs1MzcsNyBAQAogICAvKiBPdXRlciBsb29wIGhhbmRsZXMgZWFjaCBibG9jayBpbiB0aGUgTUNVICovCiAKICAgZm9yIChibGtuID0gMDsgYmxrbiA8IGNpbmZvLT5ibG9ja3NfaW5fTUNVOyBibGtuKyspIHsKLSAgICBibG9jayA9IE1DVV9kYXRhW2Jsa25dOworICAgIEpCTE9DS1JPVyBibG9jayA9IE1DVV9kYXRhW2Jsa25dOwogCiAgICAgLyogRW5jb2RlZCBkYXRhIGlzIHNpbXBseSB0aGUgbmV4dCBiaXQgb2YgdGhlIHR3bydzLWNvbXBsZW1lbnQgREMgdmFsdWUgKi8KICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCByZXR1cm4gRkFMU0UpOwpAQCAtNDg5LDE3ICs1NjIsMTcgQEAKIAogTUVUSE9EREVGKGJvb2xlYW4pCiBkZWNvZGVfbWN1X0FDX3JlZmluZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKLXsgICAKK3sKICAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CiAgIGludCBTZSA9IGNpbmZvLT5TZTsKLSAgaW50IHAxID0gMSA8PCBjaW5mby0+QWw7CS8qIDEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLwotICBpbnQgbTEgPSAoLTEpIDw8IGNpbmZvLT5BbDsJLyogLTEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLworICBpbnQgQWwgPSBjaW5mby0+QWw7CiAgIHJlZ2lzdGVyIGludCBzLCBrLCByOwogICB1bnNpZ25lZCBpbnQgRU9CUlVOOwogICBKQkxPQ0tST1cgYmxvY2s7CiAgIEpDT0VGUFRSIHRoaXNjb2VmOwogICBCSVRSRUFEX1NUQVRFX1ZBUlM7CiAgIGRfZGVyaXZlZF90YmwgKiB0Ymw7CisgIGludCBwbTFbMl07CiAgIGludCBudW1fbmV3bno7CiAgIGludCBuZXduel9wb3NbRENUU0laRTJdOwogCkBAIC01MjIsNiArNTk1LDEzIEBACiAgICAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKICAgICB0YmwgPSBlbnRyb3B5LT5hY19kZXJpdmVkX3RibDsKIAorICAgIC8qIFRoZSBwbTFbXSBhcnJheSBpcyBpbmRleGVkIGJ5IGEgdmFsdWUgZnJvbSByZWxhdGlvbmFsIG9wZXJhdG9yLgorICAgICAqIFRoaXMgbWV0aG9kIGVsaW1pbmF0ZXMgY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHJhbmRvbSBkYXRhLAorICAgICAqIHdoaWNoIHJlc3VsdCBpbiBsb3dlciBwZXJmb3JtYW5jZSBvbiByZWNlbnQgcHJvY2Vzc29ycy4KKyAgICAgKi8KKyAgICBwbTFbMF0gPSAgIDEgIDw8IGNpbmZvLT5BbDsJLyogKzEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLworICAgIHBtMVsxXSA9ICgtMSkgPDwgY2luZm8tPkFsOwkvKiAtMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCisKICAgICAvKiBJZiB3ZSBhcmUgZm9yY2VkIHRvIHN1c3BlbmQsIHdlIG11c3QgdW5kbyB0aGUgYXNzaWdubWVudHMgdG8gYW55IG5ld2x5CiAgICAgICogbm9uemVybyBjb2VmZmljaWVudHMgaW4gdGhlIGJsb2NrLCBiZWNhdXNlIG90aGVyd2lzZSB3ZSdkIGdldCBjb25mdXNlZAogICAgICAqIG5leHQgdGltZSBhYm91dCB3aGljaCBjb2VmZmljaWVudHMgd2VyZSBhbHJlYWR5IG5vbnplcm8uCkBAIC01MzUsMTggKzYxNSw2MyBAQAogCiAgICAgaWYgKEVPQlJVTiA9PSAwKSB7CiAgICAgICBmb3IgKDsgayA8PSBTZTsgaysrKSB7Ci0JSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIHRibCwgZ290byB1bmRvaXQsIGxhYmVsMyk7Ci0JciA9IHMgPj4gNDsKLQlzICY9IDE1OwotCWlmIChzKSB7Ci0JICBpZiAocyAhPSAxKQkJLyogc2l6ZSBvZiBuZXcgY29lZiBzaG91bGQgYWx3YXlzIGJlIDEgKi8KLQkgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0hVRkZfQkFEX0NPREUpOwotCSAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgMSwgZ290byB1bmRvaXQpOwotCSAgaWYgKEdFVF9CSVRTKDEpKQotCSAgICBzID0gcDE7CQkvKiBuZXdseSBub256ZXJvIGNvZWYgaXMgcG9zaXRpdmUgKi8KLQkgIGVsc2UKLQkgICAgcyA9IG0xOwkJLyogbmV3bHkgbm9uemVybyBjb2VmIGlzIG5lZ2F0aXZlICovCi0JfSBlbHNlIHsKKwl7CS8qIEhVRkZYX0RFQ09ERSAqLworCSAgcmVnaXN0ZXIgaW50IG5iLCBsb29rLCB0OworCSAgaWYgKGJpdHNfbGVmdCA8IEhVRkZYX0xPT0tBSEVBRCkgeworCSAgICByZWdpc3RlciBjb25zdCBKT0NURVQgKiBuZXh0X2lucHV0X2J5dGUgPSBicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGU7CisJICAgIHJlZ2lzdGVyIHNpemVfdCAgICAgICAgIGJ5dGVzX2luX2J1ZmZlciA9IGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlcjsKKwkgICAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApIHsKKwkgICAgICB3aGlsZSAoYml0c19sZWZ0IDwgTUlOX0dFVF9CSVRTKSB7CisJCXJlZ2lzdGVyIGludCBjOworCQlpZiAoYnl0ZXNfaW5fYnVmZmVyID09IDAgfHwKKwkJICAgIChjID0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUpKSA9PSAweEZGKSB7CisJCSAgZ290byBsYWJlbDMxOyB9CisJCWJ5dGVzX2luX2J1ZmZlci0tOyBuZXh0X2lucHV0X2J5dGUrKzsKKwkJZ2V0X2J1ZmZlciA9IChnZXRfYnVmZmVyIDw8IDgpIHwgYzsKKwkJYml0c19sZWZ0ICs9IDg7CisJICAgICAgfQorCSAgICAgIGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZSA9IG5leHRfaW5wdXRfYnl0ZTsKKwkgICAgICBicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgPSBieXRlc19pbl9idWZmZXI7CisJICAgIH0gZWxzZSB7CisJICBsYWJlbDMxOgorCSAgICAgIGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZSA9IG5leHRfaW5wdXRfYnl0ZTsKKwkgICAgICBicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgPSBieXRlc19pbl9idWZmZXI7CisJICAgICAgaWYgKCEganBlZ19maWxsX2JpdF9idWZmZXIoJmJyX3N0YXRlLGdldF9idWZmZXIsYml0c19sZWZ0LCAwKSkgeworCQlnb3RvIHVuZG9pdDsgfQorCSAgICAgIGdldF9idWZmZXIgPSBicl9zdGF0ZS5nZXRfYnVmZmVyOyBiaXRzX2xlZnQgPSBicl9zdGF0ZS5iaXRzX2xlZnQ7CisJICAgICAgaWYgKGJpdHNfbGVmdCA8IEhVRkZYX0xPT0tBSEVBRCkgeworCQluYiA9IDE7IGdvdG8gbGFiZWwzOworCSAgICAgIH0KKwkgICAgfQorCSAgfQorCSAgbG9vayA9IFBFRUtfQklUUyhIVUZGWF9MT09LQUhFQUQpOworCSAgaWYgKChuYiA9IHRibC0+bG9va3hfbmJpdHNbbG9va10pICE9IDApIHsKKwkgICAgdCA9IHRibC0+bG9va3hfc3ltW2xvb2tdOworCSAgICBzID0gdGJsLT5sb29reF92YWxbbG9va107CisJICAgIHIgPSB0ID4+IDQ7IHQgJj0gMTU7CisJICAgIGlmICh0IDw9IDEpIHsKKwkgICAgICBEUk9QX0JJVFMobmIpOworCSAgICB9IGVsc2UgewkJICAvKiBzaXplIG9mIG5ldyBjb2VmIHNob3VsZCBhbHdheXMgYmUgMSAqLworCSAgICAgIFdBUk5NUyhjaW5mbywgSldSTl9IVUZGX0JBRF9DT0RFKTsKKwkgICAgICBEUk9QX0JJVFMobmIgLSAodCAtIDEpKTsKKwkgICAgICBzID0gKHMgPj0gMCkgPyAxIDogLTE7CisJICAgIH0KKwkgIH0gZWxzZSB7CisJICAgIG5iID0gSFVGRlhfTE9PS0FIRUFEOworCWxhYmVsMzoKKwkgICAgaWYgKChzPWpwZWdfaHVmZl9kZWNvZGUoJmJyX3N0YXRlLGdldF9idWZmZXIsYml0c19sZWZ0LHRibCxuYikpCisJCSA8IDApIHsgZ290byB1bmRvaXQ7IH0KKwkgICAgZ2V0X2J1ZmZlciA9IGJyX3N0YXRlLmdldF9idWZmZXI7IGJpdHNfbGVmdCA9IGJyX3N0YXRlLmJpdHNfbGVmdDsKKwkgICAgciA9IHMgPj4gNDsgcyAmPSAxNTsKKwkgICAgaWYgKHMpIHsKKwkgICAgICBpZiAocyAhPSAxKQkgICAgLyogc2l6ZSBvZiBuZXcgY29lZiBzaG91bGQgYWx3YXlzIGJlIDEgKi8KKwkJV0FSTk1TKGNpbmZvLCBKV1JOX0hVRkZfQkFEX0NPREUpOworCSAgICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIDEsIGdvdG8gdW5kb2l0KTsKKwkgICAgICBzID0gR0VUX0JJVFMoMSkgPyAxIDogLTE7CisJICAgIH0KKwkgIH0KKwl9CisJaWYgKHMgPT0gMCkgewogCSAgaWYgKHIgIT0gMTUpIHsKIAkgICAgRU9CUlVOID0gMSA8PCByOwkvKiBFT0JyLCBydW4gbGVuZ3RoIGlzIDJeciArIGFwcGVuZGVkIGJpdHMgKi8KIAkgICAgaWYgKHIpIHsKQEAgLTU2NywxMiArNjkyLDggQEAKIAkgIGlmICgqdGhpc2NvZWYgIT0gMCkgewogCSAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCBnb3RvIHVuZG9pdCk7CiAJICAgIGlmIChHRVRfQklUUygxKSkgewotCSAgICAgIGlmICgoKnRoaXNjb2VmICYgcDEpID09IDApIHsgLyogZG8gbm90aGluZyBpZiBhbHJlYWR5IHNldCBpdCAqLwotCQlpZiAoKnRoaXNjb2VmID49IDApCi0JCSAgKnRoaXNjb2VmICs9IHAxOwotCQllbHNlCi0JCSAgKnRoaXNjb2VmICs9IG0xOwotCSAgICAgIH0KKwkgICAgICBpZiAoKCp0aGlzY29lZiAmIHBtMVswXSkgPT0gMCkgLyogZG8gbm90aGluZyBpZiBhbHJlYWR5IHNldCBpdCAqLworCQkqdGhpc2NvZWYgKz0gcG0xWygqdGhpc2NvZWYgPCAwKV07CiAJICAgIH0KIAkgIH0gZWxzZSB7CiAJICAgIGlmICgtLXIgPCAwKQpAQCAtNTgzLDcgKzcwNCw3IEBACiAJaWYgKHMpIHsKIAkgIGludCBwb3MgPSBqcGVnX25hdHVyYWxfb3JkZXJba107CiAJICAvKiBPdXRwdXQgbmV3bHkgbm9uemVybyBjb2VmZmljaWVudCAqLwotCSAgKCpibG9jaylbcG9zXSA9IChKQ09FRikgczsKKwkgICgqYmxvY2spW3Bvc10gPSAoSkNPRUYpIChzIDw8IEFsKTsKIAkgIC8qIFJlbWVtYmVyIGl0cyBwb3NpdGlvbiBpbiBjYXNlIHdlIGhhdmUgdG8gc3VzcGVuZCAqLwogCSAgbmV3bnpfcG9zW251bV9uZXdueisrXSA9IHBvczsKIAl9CkBAIC02MDEsMTIgKzcyMiw4IEBACiAJaWYgKCp0aGlzY29lZiAhPSAwKSB7CiAJICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCBnb3RvIHVuZG9pdCk7CiAJICBpZiAoR0VUX0JJVFMoMSkpIHsKLQkgICAgaWYgKCgqdGhpc2NvZWYgJiBwMSkgPT0gMCkgeyAvKiBkbyBub3RoaW5nIGlmIGFscmVhZHkgY2hhbmdlZCBpdCAqLwotCSAgICAgIGlmICgqdGhpc2NvZWYgPj0gMCkKLQkJKnRoaXNjb2VmICs9IHAxOwotCSAgICAgIGVsc2UKLQkJKnRoaXNjb2VmICs9IG0xOwotCSAgICB9CisJICAgIGlmICgoKnRoaXNjb2VmICYgcG0xWzBdKSA9PSAwKSAgLyogZG8gbm90aGluZyBpZiBhbHJlYWR5IHNldCBpdCAqLworCSAgICAgICp0aGlzY29lZiArPSBwbTFbKCp0aGlzY29lZiA8IDApXTsKIAkgIH0KIAl9CiAgICAgICB9CmRpZmYgLS1naXQgYS9qZHNhbW1teC5hc20gYi9qZHNhbW1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxN2QzNwotLS0gL2Rldi9udWxsCisrKyBiL2pkc2FtbW14LmFzbQpAQCAtMCwwICsxLDg5MyBAQAorOworOyBqZHNhbW1teC5hc20gLSB1cHNhbXBsaW5nIChNTVgpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgTGFzdCBNb2RpZmllZCA6IEZlYnJ1YXJ5IDQsIDIwMDYKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCislaWZkZWYgSkRTQU1QTEVfRkFOQ1lfTU1YX1NVUFBPUlRFRAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mYW5jeV91cHNhbXBsZV9tbXgpCisKK0VYVE4oamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX21teCk6CisKK1BXX09ORQkJdGltZXMgNCBkdyAgMQorUFdfVFdPCQl0aW1lcyA0IGR3ICAyCitQV19USFJFRQl0aW1lcyA0IGR3ICAzCitQV19TRVZFTgl0aW1lcyA0IGR3ICA3CitQV19FSUdIVAl0aW1lcyA0IGR3ICA4CisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorOworOyBUaGUgdXBzYW1wbGluZyBhbGdvcml0aG0gaXMgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBwaXhlbCBjZW50ZXJzLAorOyBhbHNvIGtub3duIGFzIGEgInRyaWFuZ2xlIGZpbHRlciIuICBUaGlzIGlzIGEgZ29vZCBjb21wcm9taXNlIGJldHdlZW4KKzsgc3BlZWQgYW5kIHZpc3VhbCBxdWFsaXR5LiAgVGhlIGNlbnRlcnMgb2YgdGhlIG91dHB1dCBwaXhlbHMgYXJlIDEvNCBhbmQgMy80Cis7IG9mIHRoZSB3YXkgYmV0d2VlbiBpbnB1dCBwaXhlbCBjZW50ZXJzLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19oMnYxX2ZhbmN5X3Vwc2FtcGxlX21teCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgY2luZm8oYikJCShiKSs4CQk7IGpfZGVjb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkJKGIpKzEyCQk7IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCislZGVmaW5lIGlucHV0X2RhdGEoYikJCShiKSsxNgkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaDJ2MV9mYW5jeV91cHNhbXBsZV9tbXgpCisKK0VYVE4oanBlZ19oMnYxX2ZhbmN5X3Vwc2FtcGxlX21teCk6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2hwaWMJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCW1vdgllYXgsIFBPSU5URVIgW2NvbXBwdHIoZWJwKV0KKwltb3YJZWF4LCBKRElNRU5TSU9OIFtqY29tcGluZm9fZG93bnNhbXBsZWRfd2lkdGgoZWF4KV0gIDsgY29sY3RyCisJdGVzdAllYXgsZWF4CisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZWN4LCBQT0lOVEVSIFtjaW5mbyhlYnApXQorCW1vdgllY3gsIElOVCBbamRzdHJ1Y3RfbWF4X3Zfc2FtcF9mYWN0b3IoZWN4KV0JOyByb3djdHIKKwl0ZXN0CWVjeCxlY3gKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJbW92CWVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbZWRpXQkJCTsgb3V0cHV0X2RhdGEKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaAllYXgJCQk7IGNvbGN0cgorCXB1c2gJZWRpCisJcHVzaAllc2kKKworCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCTsgaW5wdHIKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQk7IG91dHB0cgorCisJdGVzdAllYXgsIFNJWkVPRl9NTVdPUkQtMQorCWp6CXNob3J0IC5za2lwCisJbW92CWRsLCBKU0FNUExFIFtlc2krKGVheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJSlNBTVBMRSBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCTsgaW5zZXJ0IGEgZHVtbXkgc2FtcGxlCisuc2tpcDoKKwlweG9yCW1tMCxtbTAJCQk7IG1tMD0oYWxsIDAncykKKwlwY21wZXFiCW1tNyxtbTcKKwlwc3JscQltbTcsKFNJWkVPRl9NTVdPUkQtMSkqQllURV9CSVQKKwlwYW5kCW1tNywgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorCisJYWRkCWVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JELTEKKwlhbmQJZWF4LCBieXRlIC1TSVpFT0ZfTU1XT1JECisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJamEJc2hvcnQgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcF9sYXN0OgorCXBjbXBlcWIJbW02LG1tNgorCXBzbGxxCW1tNiwoU0laRU9GX01NV09SRC0xKSpCWVRFX0JJVAorCXBhbmQJbW02LCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisJam1wCXNob3J0IC51cHNhbXBsZQorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wOgorCW1vdnEJbW02LCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisJcHNsbHEJbW02LChTSVpFT0ZfTU1XT1JELTEpKkJZVEVfQklUCisKKy51cHNhbXBsZToKKwltb3ZxCW1tMSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorCW1vdnEJbW0yLG1tMQorCW1vdnEJbW0zLG1tMQkJCTsgbW0xPSggMCAxIDIgMyA0IDUgNiA3KQorCXBzbGxxCW1tMixCWVRFX0JJVAkJOyBtbTI9KCAtIDAgMSAyIDMgNCA1IDYpCisJcHNybHEJbW0zLEJZVEVfQklUCQk7IG1tMz0oIDEgMiAzIDQgNSA2IDcgLSkKKworCXBvcgltbTIsbW03CQkJOyBtbTI9KC0xIDAgMSAyIDMgNCA1IDYpCisJcG9yCW1tMyxtbTYJCQk7IG1tMz0oIDEgMiAzIDQgNSA2IDcgOCkKKworCW1vdnEJbW03LG1tMQorCXBzcmxxCW1tNywoU0laRU9GX01NV09SRC0xKSpCWVRFX0JJVAk7IG1tNz0oIDcgLSAtIC0gLSAtIC0gLSkKKworCW1vdnEgICAgICBtbTQsbW0xCisJcHVucGNrbGJ3IG1tMSxtbTAJCTsgbW0xPSggMCAxIDIgMykKKwlwdW5wY2toYncgbW00LG1tMAkJOyBtbTQ9KCA0IDUgNiA3KQorCW1vdnEgICAgICBtbTUsbW0yCisJcHVucGNrbGJ3IG1tMixtbTAJCTsgbW0yPSgtMSAwIDEgMikKKwlwdW5wY2toYncgbW01LG1tMAkJOyBtbTU9KCAzIDQgNSA2KQorCW1vdnEgICAgICBtbTYsbW0zCisJcHVucGNrbGJ3IG1tMyxtbTAJCTsgbW0zPSggMSAyIDMgNCkKKwlwdW5wY2toYncgbW02LG1tMAkJOyBtbTY9KCA1IDYgNyA4KQorCisJcG11bGx3CW1tMSxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcG11bGx3CW1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcGFkZHcJbW0yLFtHT1RPRkYoZWJ4LFBXX09ORSldCisJcGFkZHcJbW01LFtHT1RPRkYoZWJ4LFBXX09ORSldCisJcGFkZHcJbW0zLFtHT1RPRkYoZWJ4LFBXX1RXTyldCisJcGFkZHcJbW02LFtHT1RPRkYoZWJ4LFBXX1RXTyldCisKKwlwYWRkdwltbTIsbW0xCisJcGFkZHcJbW01LG1tNAorCXBzcmx3CW1tMiwyCQkJOyBtbTI9T3V0TEU9KCAwICAyICA0ICA2KQorCXBzcmx3CW1tNSwyCQkJOyBtbTU9T3V0SEU9KCA4IDEwIDEyIDE0KQorCXBhZGR3CW1tMyxtbTEKKwlwYWRkdwltbTYsbW00CisJcHNybHcJbW0zLDIJCQk7IG1tMz1PdXRMTz0oIDEgIDMgIDUgIDcpCisJcHNybHcJbW02LDIJCQk7IG1tNj1PdXRITz0oIDkgMTEgMTMgMTUpCisKKwlwc2xsdwltbTMsQllURV9CSVQKKwlwc2xsdwltbTYsQllURV9CSVQKKwlwb3IJbW0yLG1tMwkJCTsgbW0yPU91dEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXBvcgltbTUsbW02CQkJOyBtbTU9T3V0SD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMgorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW01CisKKwlzdWIJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlhZGQJZXNpLCBieXRlIDEqU0laRU9GX01NV09SRAk7IGlucHRyCisJYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIKKwljbXAJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqYQluZWFyIC5jb2x1bW5sb29wCisJdGVzdAllYXgsZWF4CisJam56CW5lYXIgLmNvbHVtbmxvb3BfbGFzdAorCisJcG9wCWVzaQorCXBvcAllZGkKKwlwb3AJZWF4CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCisJZGVjCWVjeAkJCQk7IHJvd2N0cgorCWpnCW5lYXIgLnJvd2xvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3BwaWMJZWJ4CisJcG9wCWVicAorCXJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOyBBZ2FpbiBhIHRyaWFuZ2xlIGZpbHRlcjsgc2VlIGNvbW1lbnRzIGZvciBoMnYxIGNhc2UsIGFib3ZlLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgY2luZm8oYikJCShiKSs4CQk7IGpfZGVjb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkJKGIpKzEyCQk7IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCislZGVmaW5lIGlucHV0X2RhdGEoYikJCShiKSsxNgkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTQKKyVkZWZpbmUgZ290cHRyCQl3aygwKS1TSVpFT0ZfUE9JTlRFUgk7IHZvaWQgKiBnb3RwdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teCkKKworRVhUTihqcGVnX2gydjJfZmFuY3lfdXBzYW1wbGVfbW14KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWF4CQk7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCisJbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllZHgsZWF4CQkJCTsgZWR4ID0gb3JpZ2luYWwgZWJwCisJbW92CWVheCwgUE9JTlRFUiBbY29tcHB0cihlZHgpXQorCW1vdgllYXgsIEpESU1FTlNJT04gW2pjb21waW5mb19kb3duc2FtcGxlZF93aWR0aChlYXgpXSAgOyBjb2xjdHIKKwl0ZXN0CWVheCxlYXgKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllY3gsIFBPSU5URVIgW2NpbmZvKGVkeCldCisJbW92CWVjeCwgSU5UIFtqZHN0cnVjdF9tYXhfdl9zYW1wX2ZhY3RvcihlY3gpXQk7IHJvd2N0cgorCXRlc3QJZWN4LGVjeAorCWp6CW5lYXIgLnJldHVybgorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlZHgpXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWR4KV0KKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtlZGldCQkJOyBvdXRwdXRfZGF0YQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVheAkJCQkJOyBjb2xjdHIKKwlwdXNoCWVjeAorCXB1c2gJZWRpCisJcHVzaAllc2kKKworCW1vdgllY3gsIEpTQU1QUk9XIFtlc2ktMSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIxKGFib3ZlKQorCW1vdgllYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIwCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjEoYmVsb3cpCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10JOyBvdXRwdHIwCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBvdXRwdHIxCisKKwl0ZXN0CWVheCwgU0laRU9GX01NV09SRC0xCisJanoJc2hvcnQgLnNraXAKKwlwdXNoCWVkeAorCW1vdglkbCwgSlNBTVBMRSBbZWN4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VjeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAorCW1vdglkbCwgSlNBTVBMRSBbZWJ4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAorCW1vdglkbCwgSlNBTVBMRSBbZXNpKyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAk7IGluc2VydCBhIGR1bW15IHNhbXBsZQorCXBvcAllZHgKKy5za2lwOgorCTsgLS0gcHJvY2VzcyB0aGUgZmlyc3QgY29sdW1uIGJsb2NrCisKKwltb3ZxCW1tMCwgTU1XT1JEIFtlYngrMCpTSVpFT0ZfTU1XT1JEXQk7IG1tMD1yb3dbIDBdWzBdCisJbW92cQltbTEsIE1NV09SRCBbZWN4KzAqU0laRU9GX01NV09SRF0JOyBtbTE9cm93Wy0xXVswXQorCW1vdnEJbW0yLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCTsgbW0yPXJvd1srMV1bMF0KKworCXB1c2hwaWMJZWJ4CisJbW92cGljCWVieCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MKKworCXB4b3IgICAgICBtbTMsbW0zCQk7IG1tMz0oYWxsIDAncykKKwltb3ZxICAgICAgbW00LG1tMAorCXB1bnBja2xidyBtbTAsbW0zCQk7IG1tMD1yb3dbIDBdWzBdKCAwIDEgMiAzKQorCXB1bnBja2hidyBtbTQsbW0zCQk7IG1tND1yb3dbIDBdWzBdKCA0IDUgNiA3KQorCW1vdnEgICAgICBtbTUsbW0xCisJcHVucGNrbGJ3IG1tMSxtbTMJCTsgbW0xPXJvd1stMV1bMF0oIDAgMSAyIDMpCisJcHVucGNraGJ3IG1tNSxtbTMJCTsgbW01PXJvd1stMV1bMF0oIDQgNSA2IDcpCisJbW92cSAgICAgIG1tNixtbTIKKwlwdW5wY2tsYncgbW0yLG1tMwkJOyBtbTI9cm93WysxXVswXSggMCAxIDIgMykKKwlwdW5wY2toYncgbW02LG1tMwkJOyBtbTY9cm93WysxXVswXSggNCA1IDYgNykKKworCXBtdWxsdwltbTAsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBtdWxsdwltbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCisJcGNtcGVxYgltbTcsbW03CisJcHNybHEJbW03LChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCisKKwlwYWRkdwltbTEsbW0wCQkJOyBtbTE9SW50MEw9KCAwIDEgMiAzKQorCXBhZGR3CW1tNSxtbTQJCQk7IG1tNT1JbnQwSD0oIDQgNSA2IDcpCisJcGFkZHcJbW0yLG1tMAkJCTsgbW0yPUludDFMPSggMCAxIDIgMykKKwlwYWRkdwltbTYsbW00CQkJOyBtbTY9SW50MUg9KCA0IDUgNiA3KQorCisJbW92cQlNTVdPUkQgW2VkeCswKlNJWkVPRl9NTVdPUkRdLCBtbTEJOyB0ZW1wb3JhcmlseSBzYXZlCisJbW92cQlNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdLCBtbTUJOyB0aGUgaW50ZXJtZWRpYXRlIGRhdGEKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMgorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW02CisKKwlwYW5kCW1tMSxtbTcJCQk7IG1tMT0oIDAgLSAtIC0pCisJcGFuZAltbTIsbW03CQkJOyBtbTI9KCAwIC0gLSAtKQorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW0xCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCisKKwlwb3BwaWMJZWJ4CisKKwlhZGQJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQtMQorCWFuZAllYXgsIGJ5dGUgLVNJWkVPRl9NTVdPUkQKKwljbXAJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqYQlzaG9ydCAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wX2xhc3Q6CisJOyAtLSBwcm9jZXNzIHRoZSBsYXN0IGNvbHVtbiBibG9jaworCisJcHVzaHBpYwllYngKKwltb3ZwaWMJZWJ4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcworCisJcGNtcGVxYgltbTEsbW0xCisJcHNsbHEJbW0xLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCisJbW92cQltbTIsbW0xCisKKwlwYW5kCW1tMSwgTU1XT1JEIFtlZHgrMSpTSVpFT0ZfTU1XT1JEXQk7IG1tMT0oIC0gLSAtIDcpCisJcGFuZAltbTIsIE1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0JOyBtbTI9KCAtIC0gLSA3KQorCisJbW92cQlNTVdPUkQgW3drKDIpXSwgbW0xCisJbW92cQlNTVdPUkQgW3drKDMpXSwgbW0yCisKKwlqbXAJc2hvcnQgLnVwc2FtcGxlCisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3A6CisJOyAtLSBwcm9jZXNzIHRoZSBuZXh0IGNvbHVtbiBibG9jaworCisJbW92cQltbTAsIE1NV09SRCBbZWJ4KzEqU0laRU9GX01NV09SRF0JOyBtbTA9cm93WyAwXVsxXQorCW1vdnEJbW0xLCBNTVdPUkQgW2VjeCsxKlNJWkVPRl9NTVdPUkRdCTsgbW0xPXJvd1stMV1bMV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQk7IG1tMj1yb3dbKzFdWzFdCisKKwlwdXNocGljCWVieAorCW1vdnBpYwllYngsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzCisKKwlweG9yICAgICAgbW0zLG1tMwkJOyBtbTM9KGFsbCAwJ3MpCisJbW92cSAgICAgIG1tNCxtbTAKKwlwdW5wY2tsYncgbW0wLG1tMwkJOyBtbTA9cm93WyAwXVsxXSggMCAxIDIgMykKKwlwdW5wY2toYncgbW00LG1tMwkJOyBtbTQ9cm93WyAwXVsxXSggNCA1IDYgNykKKwltb3ZxICAgICAgbW01LG1tMQorCXB1bnBja2xidyBtbTEsbW0zCQk7IG1tMT1yb3dbLTFdWzFdKCAwIDEgMiAzKQorCXB1bnBja2hidyBtbTUsbW0zCQk7IG1tNT1yb3dbLTFdWzFdKCA0IDUgNiA3KQorCW1vdnEgICAgICBtbTYsbW0yCisJcHVucGNrbGJ3IG1tMixtbTMJCTsgbW0yPXJvd1srMV1bMV0oIDAgMSAyIDMpCisJcHVucGNraGJ3IG1tNixtbTMJCTsgbW02PXJvd1srMV1bMV0oIDQgNSA2IDcpCisKKwlwbXVsbHcJbW0wLFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKwlwbXVsbHcJbW00LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKworCXBhZGR3CW1tMSxtbTAJCQk7IG1tMT1JbnQwTD0oIDAgMSAyIDMpCisJcGFkZHcJbW01LG1tNAkJCTsgbW01PUludDBIPSggNCA1IDYgNykKKwlwYWRkdwltbTIsbW0wCQkJOyBtbTI9SW50MUw9KCAwIDEgMiAzKQorCXBhZGR3CW1tNixtbTQJCQk7IG1tNj1JbnQxSD0oIDQgNSA2IDcpCisKKwltb3ZxCU1NV09SRCBbZWR4KzIqU0laRU9GX01NV09SRF0sIG1tMQk7IHRlbXBvcmFyaWx5IHNhdmUKKwltb3ZxCU1NV09SRCBbZWR4KzMqU0laRU9GX01NV09SRF0sIG1tNQk7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQorCW1vdnEJTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW0yCisJbW92cQlNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbTYKKworCXBzbGxxCW1tMSwoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVAk7IG1tMT0oIC0gLSAtIDApCisJcHNsbHEJbW0yLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW0yPSggLSAtIC0gMCkKKworCW1vdnEJTU1XT1JEIFt3aygyKV0sIG1tMQorCW1vdnEJTU1XT1JEIFt3aygzKV0sIG1tMgorCisudXBzYW1wbGU6CisJOyAtLSBwcm9jZXNzIHRoZSB1cHBlciByb3cKKworCW1vdnEJbW03LCBNTVdPUkQgW2VkeCswKlNJWkVPRl9NTVdPUkRdCTsgbW03PUludDBMPSggMCAxIDIgMykKKwltb3ZxCW1tMywgTU1XT1JEIFtlZHgrMSpTSVpFT0ZfTU1XT1JEXQk7IG1tMz1JbnQwSD0oIDQgNSA2IDcpCisKKwltb3ZxCW1tMCxtbTcKKwltb3ZxCW1tNCxtbTMKKwlwc3JscQltbTAsMipCWVRFX0JJVAkJCTsgbW0wPSggMSAyIDMgLSkKKwlwc2xscQltbTQsKFNJWkVPRl9NTVdPUkQtMikqQllURV9CSVQJOyBtbTQ9KCAtIC0gLSA0KQorCW1vdnEJbW01LG1tNworCW1vdnEJbW02LG1tMworCXBzcmxxCW1tNSwoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVAk7IG1tNT0oIDMgLSAtIC0pCisJcHNsbHEJbW02LDIqQllURV9CSVQJCQk7IG1tNj0oIC0gNCA1IDYpCisKKwlwb3IJbW0wLG1tNAkJCQk7IG1tMD0oIDEgMiAzIDQpCisJcG9yCW1tNSxtbTYJCQkJOyBtbTU9KCAzIDQgNSA2KQorCisJbW92cQltbTEsbW03CisJbW92cQltbTIsbW0zCisJcHNsbHEJbW0xLDIqQllURV9CSVQJCQk7IG1tMT0oIC0gMCAxIDIpCisJcHNybHEJbW0yLDIqQllURV9CSVQJCQk7IG1tMj0oIDUgNiA3IC0pCisJbW92cQltbTQsbW0zCisJcHNybHEJbW00LChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW00PSggNyAtIC0gLSkKKworCXBvcgltbTEsIE1NV09SRCBbd2soMCldCQk7IG1tMT0oLTEgMCAxIDIpCisJcG9yCW1tMiwgTU1XT1JEIFt3aygyKV0JCTsgbW0yPSggNSA2IDcgOCkKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAorCisJcG11bGx3CW1tNyxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcG11bGx3CW1tMyxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcGFkZHcJbW0xLFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KKwlwYWRkdwltbTUsW0dPVE9GRihlYngsUFdfRUlHSFQpXQorCXBhZGR3CW1tMCxbR09UT0ZGKGVieCxQV19TRVZFTildCisJcGFkZHcJbW0yLFtHT1RPRkYoZWJ4LFBXX1NFVkVOKV0KKworCXBhZGR3CW1tMSxtbTcKKwlwYWRkdwltbTUsbW0zCisJcHNybHcJbW0xLDQJCQk7IG1tMT1PdXQwTEU9KCAwICAyICA0ICA2KQorCXBzcmx3CW1tNSw0CQkJOyBtbTU9T3V0MEhFPSggOCAxMCAxMiAxNCkKKwlwYWRkdwltbTAsbW03CisJcGFkZHcJbW0yLG1tMworCXBzcmx3CW1tMCw0CQkJOyBtbTA9T3V0MExPPSggMSAgMyAgNSAgNykKKwlwc3JsdwltbTIsNAkJCTsgbW0yPU91dDBITz0oIDkgMTEgMTMgMTUpCisKKwlwc2xsdwltbTAsQllURV9CSVQKKwlwc2xsdwltbTIsQllURV9CSVQKKwlwb3IJbW0xLG1tMAkJCTsgbW0xPU91dDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwb3IJbW01LG1tMgkJCTsgbW01PU91dDBIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKworCW1vdnEJTU1XT1JEIFtlZHgrMCpTSVpFT0ZfTU1XT1JEXSwgbW0xCisJbW92cQlNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdLCBtbTUKKworCTsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CisKKwltb3ZxCW1tNiwgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXQk7IG1tNj1JbnQxTD0oIDAgMSAyIDMpCisJbW92cQltbTQsIE1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0JOyBtbTQ9SW50MUg9KCA0IDUgNiA3KQorCisJbW92cQltbTcsbW02CisJbW92cQltbTMsbW00CisJcHNybHEJbW03LDIqQllURV9CSVQJCQk7IG1tNz0oIDEgMiAzIC0pCisJcHNsbHEJbW0zLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW0zPSggLSAtIC0gNCkKKwltb3ZxCW1tMCxtbTYKKwltb3ZxCW1tMixtbTQKKwlwc3JscQltbTAsKFNJWkVPRl9NTVdPUkQtMikqQllURV9CSVQJOyBtbTA9KCAzIC0gLSAtKQorCXBzbGxxCW1tMiwyKkJZVEVfQklUCQkJOyBtbTI9KCAtIDQgNSA2KQorCisJcG9yCW1tNyxtbTMJCQkJOyBtbTc9KCAxIDIgMyA0KQorCXBvcgltbTAsbW0yCQkJCTsgbW0wPSggMyA0IDUgNikKKworCW1vdnEJbW0xLG1tNgorCW1vdnEJbW01LG1tNAorCXBzbGxxCW1tMSwyKkJZVEVfQklUCQkJOyBtbTE9KCAtIDAgMSAyKQorCXBzcmxxCW1tNSwyKkJZVEVfQklUCQkJOyBtbTU9KCA1IDYgNyAtKQorCW1vdnEJbW0zLG1tNAorCXBzcmxxCW1tMywoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVAk7IG1tMz0oIDcgLSAtIC0pCisKKwlwb3IJbW0xLCBNTVdPUkQgW3drKDEpXQkJOyBtbTE9KC0xIDAgMSAyKQorCXBvcgltbTUsIE1NV09SRCBbd2soMyldCQk7IG1tNT0oIDUgNiA3IDgpCisKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTMKKworCXBtdWxsdwltbTYsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBtdWxsdwltbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBhZGR3CW1tMSxbR09UT0ZGKGVieCxQV19FSUdIVCldCisJcGFkZHcJbW0wLFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KKwlwYWRkdwltbTcsW0dPVE9GRihlYngsUFdfU0VWRU4pXQorCXBhZGR3CW1tNSxbR09UT0ZGKGVieCxQV19TRVZFTildCisKKwlwYWRkdwltbTEsbW02CisJcGFkZHcJbW0wLG1tNAorCXBzcmx3CW1tMSw0CQkJOyBtbTE9T3V0MUxFPSggMCAgMiAgNCAgNikKKwlwc3JsdwltbTAsNAkJCTsgbW0wPU91dDFIRT0oIDggMTAgMTIgMTQpCisJcGFkZHcJbW03LG1tNgorCXBhZGR3CW1tNSxtbTQKKwlwc3JsdwltbTcsNAkJCTsgbW03PU91dDFMTz0oIDEgIDMgIDUgIDcpCisJcHNybHcJbW01LDQJCQk7IG1tNT1PdXQxSE89KCA5IDExIDEzIDE1KQorCisJcHNsbHcJbW03LEJZVEVfQklUCisJcHNsbHcJbW01LEJZVEVfQklUCisJcG9yCW1tMSxtbTcJCQk7IG1tMT1PdXQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcG9yCW1tMCxtbTUJCQk7IG1tMD1PdXQxSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMQorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW0wCisKKwlwb3BwaWMJZWJ4CisKKwlzdWIJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlhZGQJZWN4LCBieXRlIDEqU0laRU9GX01NV09SRAk7IGlucHRyMShhYm92ZSkKKwlhZGQJZWJ4LCBieXRlIDEqU0laRU9GX01NV09SRAk7IGlucHRyMAorCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECTsgaW5wdHIxKGJlbG93KQorCWFkZAllZHgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECTsgb3V0cHRyMAorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECTsgb3V0cHRyMQorCWNtcAllYXgsIGJ5dGUgU0laRU9GX01NV09SRAorCWphCW5lYXIgLmNvbHVtbmxvb3AKKwl0ZXN0CWVheCxlYXgKKwlqbnoJbmVhciAuY29sdW1ubG9vcF9sYXN0CisKKwlwb3AJZXNpCisJcG9wCWVkaQorCXBvcAllY3gKKwlwb3AJZWF4CisKKwlhZGQJZXNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCXN1YgllY3gsIGJ5dGUgMgkJCTsgcm93Y3RyCisJamcJbmVhciAucm93bG9vcAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworLnJldHVybjoKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKyVpZmRlZiBVUFNBTVBMRV9IMVYyX1NVUFBPUlRFRAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAxOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOyBBZ2FpbiBhIHRyaWFuZ2xlIGZpbHRlcjsgc2VlIGNvbW1lbnRzIGZvciBoMnYxIGNhc2UsIGFib3ZlLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19oMXYyX2ZhbmN5X3Vwc2FtcGxlX21teCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgY2luZm8oYikJCShiKSs4CQk7IGpfZGVjb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkJKGIpKzEyCQk7IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCislZGVmaW5lIGlucHV0X2RhdGEoYikJCShiKSsxNgkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCisKKyVkZWZpbmUgZ290cHRyCQllYnAtU0laRU9GX1BPSU5URVIJOyB2b2lkICogZ290cHRyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaDF2Ml9mYW5jeV91cHNhbXBsZV9tbXgpCisKK0VYVE4oanBlZ19oMXYyX2ZhbmN5X3Vwc2FtcGxlX21teCk6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2hwaWMJZWF4CQk7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCisJbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllYXgsIFBPSU5URVIgW2NvbXBwdHIoZWJwKV0KKwltb3YJZWF4LCBKRElNRU5TSU9OIFtqY29tcGluZm9fZG93bnNhbXBsZWRfd2lkdGgoZWF4KV0gIDsgY29sY3RyCisJYWRkCWVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JELTEKKwlhbmQJZWF4LCBieXRlIC1TSVpFT0ZfTU1XT1JECisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZWN4LCBQT0lOVEVSIFtjaW5mbyhlYnApXQorCW1vdgllY3gsIElOVCBbamRzdHJ1Y3RfbWF4X3Zfc2FtcF9mYWN0b3IoZWN4KV0JOyByb3djdHIKKwl0ZXN0CWVjeCxlY3gKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJbW92CWVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbZWRpXQkJCTsgb3V0cHV0X2RhdGEKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaAllYXgJCQkJCTsgY29sY3RyCisJcHVzaAllY3gKKwlwdXNoCWVkaQorCXB1c2gJZXNpCisKKwltb3YJZWN4LCBKU0FNUFJPVyBbZXNpLTEqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMShhYm92ZSkKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMAorCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIxKGJlbG93KQorCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMAorCW1vdgllZGksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMQorCisJcHhvcgltbTAsbW0wCQkJOyBtbTA9KGFsbCAwJ3MpCisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3A6CisJbW92cQltbTEsIE1NV09SRCBbZWJ4XQk7IG1tMT1yb3dbIDBdKCAwIDEgMiAzIDQgNSA2IDcpCisJbW92cQltbTIsIE1NV09SRCBbZWN4XQk7IG1tMj1yb3dbLTFdKCAwIDEgMiAzIDQgNSA2IDcpCisJbW92cQltbTMsIE1NV09SRCBbZXNpXQk7IG1tMz1yb3dbKzFdKCAwIDEgMiAzIDQgNSA2IDcpCisKKwlwdXNocGljCWVieAorCW1vdnBpYwllYngsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzCisKKwltb3ZxICAgICAgbW00LG1tMQorCXB1bnBja2xidyBtbTEsbW0wCQk7IG1tMT1yb3dbIDBdKCAwIDEgMiAzKQorCXB1bnBja2hidyBtbTQsbW0wCQk7IG1tND1yb3dbIDBdKCA0IDUgNiA3KQorCW1vdnEgICAgICBtbTUsbW0yCisJcHVucGNrbGJ3IG1tMixtbTAJCTsgbW0yPXJvd1stMV0oIDAgMSAyIDMpCisJcHVucGNraGJ3IG1tNSxtbTAJCTsgbW01PXJvd1stMV0oIDQgNSA2IDcpCisJbW92cSAgICAgIG1tNixtbTMKKwlwdW5wY2tsYncgbW0zLG1tMAkJOyBtbTM9cm93WysxXSggMCAxIDIgMykKKwlwdW5wY2toYncgbW02LG1tMAkJOyBtbTY9cm93WysxXSggNCA1IDYgNykKKworCXBtdWxsdwltbTEsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBtdWxsdwltbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBhZGR3CW1tMixbR09UT0ZGKGVieCxQV19PTkUpXQorCXBhZGR3CW1tNSxbR09UT0ZGKGVieCxQV19PTkUpXQorCXBhZGR3CW1tMyxbR09UT0ZGKGVieCxQV19UV08pXQorCXBhZGR3CW1tNixbR09UT0ZGKGVieCxQV19UV08pXQorCisJcGFkZHcJbW0yLG1tMQorCXBhZGR3CW1tNSxtbTQKKwlwc3JsdwltbTIsMgkJCTsgbW0yPU91dDBMPSggMCAxIDIgMykKKwlwc3JsdwltbTUsMgkJCTsgbW01PU91dDBIPSggNCA1IDYgNykKKwlwYWRkdwltbTMsbW0xCisJcGFkZHcJbW02LG1tNAorCXBzcmx3CW1tMywyCQkJOyBtbTM9T3V0MUw9KCAwIDEgMiAzKQorCXBzcmx3CW1tNiwyCQkJOyBtbTY9T3V0MUg9KCA0IDUgNiA3KQorCisJcGFja3Vzd2IgIG1tMixtbTUJCTsgbW0yPU91dDA9KCAwIDEgMiAzIDQgNSA2IDcpCisJcGFja3Vzd2IgIG1tMyxtbTYJCTsgbW0zPU91dDE9KCAwIDEgMiAzIDQgNSA2IDcpCisKKwltb3ZxCU1NV09SRCBbZWR4XSwgbW0yCisJbW92cQlNTVdPUkQgW2VkaV0sIG1tMworCisJcG9wcGljCWVieAorCisJYWRkCWVjeCwgYnl0ZSAxKlNJWkVPRl9NTVdPUkQJOyBpbnB0cjEoYWJvdmUpCisJYWRkCWVieCwgYnl0ZSAxKlNJWkVPRl9NTVdPUkQJOyBpbnB0cjAKKwlhZGQJZXNpLCBieXRlIDEqU0laRU9GX01NV09SRAk7IGlucHRyMShiZWxvdykKKwlhZGQJZWR4LCBieXRlIDEqU0laRU9GX01NV09SRAk7IG91dHB0cjAKKwlhZGQJZWRpLCBieXRlIDEqU0laRU9GX01NV09SRAk7IG91dHB0cjEKKwlzdWIJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCisJcG9wCWVzaQorCXBvcAllZGkKKwlwb3AJZWN4CisJcG9wCWVheAorCisJYWRkCWVzaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKKwlhZGQJZWRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlzdWIJZWN4LCBieXRlIDIJCQk7IHJvd2N0cgorCWpnCW5lYXIgLnJvd2xvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcG9wcGljCWVheAkJOyByZW1vdmUgZ290cHRyCisJcG9wCWVicAorCXJldAorCislZW5kaWYgOyBVUFNBTVBMRV9IMVYyX1NVUFBPUlRFRAorJWVuZGlmIDsgSkRTQU1QTEVfRkFOQ1lfTU1YX1NVUFBPUlRFRAorCislaWZkZWYgSkRTQU1QTEVfU0lNUExFX01NWF9TVVBQT1JURUQKKworJWlmbmRlZiBKRFNBTVBMRV9GQU5DWV9NTVhfU1VQUE9SVEVECis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKyVlbmRpZgorOworOyBGYXN0IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorOyBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfaDJ2MV91cHNhbXBsZV9tbXggKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCis7ICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpOworOworCislZGVmaW5lIGNpbmZvKGIpCQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGNvbXBwdHIoYikJCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBpbnB1dF9kYXRhKGIpCQkoYikrMTYJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2gydjFfdXBzYW1wbGVfbW14KQorCitFWFROKGpwZWdfaDJ2MV91cHNhbXBsZV9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKzsJcHVzaAllYngJCTsgdW51c2VkCis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZWR4LCBQT0lOVEVSIFtjaW5mbyhlYnApXQorCW1vdgllZHgsIEpESU1FTlNJT04gW2pkc3RydWN0X291dHB1dF93aWR0aChlZHgpXQorCWFkZAllZHgsIGJ5dGUgKDIqU0laRU9GX01NV09SRCktMQorCWFuZAllZHgsIGJ5dGUgLSgyKlNJWkVPRl9NTVdPUkQpCisJanoJc2hvcnQgLnJldHVybgorCisJbW92CWVjeCwgUE9JTlRFUiBbY2luZm8oZWJwKV0KKwltb3YJZWN4LCBJTlQgW2pkc3RydWN0X21heF92X3NhbXBfZmFjdG9yKGVjeCldCTsgcm93Y3RyCisJdGVzdAllY3gsZWN4CisJanoJc2hvcnQgLnJldHVybgorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtlZGldCQkJOyBvdXRwdXRfZGF0YQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVkaQorCXB1c2gJZXNpCisKKwltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQkJOyBpbnB0cgorCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCQk7IG91dHB0cgorCW1vdgllYXgsZWR4CQkJCTsgY29sY3RyCisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorCisJbW92cQltbTAsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKworCW1vdnEgICAgICBtbTEsbW0wCisJcHVucGNrbGJ3IG1tMCxtbTAKKwlwdW5wY2toYncgbW0xLG1tMQorCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKwltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tMQorCisJc3ViCWVheCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKwlqeglzaG9ydCAubmV4dHJvdworCisJbW92cQltbTIsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKworCW1vdnEgICAgICBtbTMsbW0yCisJcHVucGNrbGJ3IG1tMixtbTIKKwlwdW5wY2toYncgbW0zLG1tMworCisJbW92cQlNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbTIKKwltb3ZxCU1NV09SRCBbZWRpKzMqU0laRU9GX01NV09SRF0sIG1tMworCisJc3ViCWVheCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKwlqeglzaG9ydCAubmV4dHJvdworCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQJOyBpbnB0cgorCWFkZAllZGksIGJ5dGUgNCpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyCisJam1wCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLm5leHRyb3c6CisJcG9wCWVzaQorCXBvcAllZGkKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlkZWMJZWN4CQkJCTsgcm93Y3RyCisJamcJc2hvcnQgLnJvd2xvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKwlwb3AJZWJwCisJcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgRmFzdCBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKzsgSXQncyBzdGlsbCBhIGJveCBmaWx0ZXIuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2gydjJfdXBzYW1wbGVfbW14IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorOyAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworJWRlZmluZSBjaW5mbyhiKQkJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19oMnYyX3Vwc2FtcGxlX21teCkKKworRVhUTihqcGVnX2gydjJfdXBzYW1wbGVfbW14KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdgllZHgsIFBPSU5URVIgW2NpbmZvKGVicCldCisJbW92CWVkeCwgSkRJTUVOU0lPTiBbamRzdHJ1Y3Rfb3V0cHV0X3dpZHRoKGVkeCldCisJYWRkCWVkeCwgYnl0ZSAoMipTSVpFT0ZfTU1XT1JEKS0xCisJYW5kCWVkeCwgYnl0ZSAtKDIqU0laRU9GX01NV09SRCkKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllY3gsIFBPSU5URVIgW2NpbmZvKGVicCldCisJbW92CWVjeCwgSU5UIFtqZHN0cnVjdF9tYXhfdl9zYW1wX2ZhY3RvcihlY3gpXQk7IHJvd2N0cgorCXRlc3QJZWN4LGVjeAorCWp6CXNob3J0IC5yZXR1cm4KKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJbW92CWVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbZWRpXQkJCTsgb3V0cHV0X2RhdGEKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaAllZGkKKwlwdXNoCWVzaQorCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JCQk7IGlucHRyCisJbW92CWVieCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10JOyBvdXRwdHIwCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBvdXRwdHIxCisJbW92CWVheCxlZHgJCQkJCTsgY29sY3RyCisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorCisJbW92cQltbTAsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKworCW1vdnEgICAgICBtbTEsbW0wCisJcHVucGNrbGJ3IG1tMCxtbTAKKwlwdW5wY2toYncgbW0xLG1tMQorCisJbW92cQlNTVdPUkQgW2VieCswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKwltb3ZxCU1NV09SRCBbZWJ4KzEqU0laRU9GX01NV09SRF0sIG1tMQorCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW0wCisJbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKKworCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisJanoJc2hvcnQgLm5leHRyb3cKKworCW1vdnEJbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisKKwltb3ZxICAgICAgbW0zLG1tMgorCXB1bnBja2xidyBtbTIsbW0yCisJcHVucGNraGJ3IG1tMyxtbTMKKworCW1vdnEJTU1XT1JEIFtlYngrMipTSVpFT0ZfTU1XT1JEXSwgbW0yCisJbW92cQlNTVdPUkQgW2VieCszKlNJWkVPRl9NTVdPUkRdLCBtbTMKKwltb3ZxCU1NV09SRCBbZWRpKzIqU0laRU9GX01NV09SRF0sIG1tMgorCW1vdnEJTU1XT1JEIFtlZGkrMypTSVpFT0ZfTU1XT1JEXSwgbW0zCisKKwlzdWIJZWF4LCBieXRlIDIqU0laRU9GX01NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX01NV09SRAk7IGlucHRyCisJYWRkCWVieCwgYnl0ZSA0KlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIwCisJYWRkCWVkaSwgYnl0ZSA0KlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIxCisJam1wCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLm5leHRyb3c6CisJcG9wCWVzaQorCXBvcAllZGkKKworCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCisJYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCisJc3ViCWVjeCwgYnl0ZSAyCQkJOyByb3djdHIKKwlqZwlzaG9ydCAucm93bG9vcAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworLnJldHVybjoKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IEpEU0FNUExFX1NJTVBMRV9NTVhfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qZHNhbXBsZS5jIGIvamRzYW1wbGUuYwppbmRleCA4MGZmZWZiLi4zN2E2Y2VlIDEwMDY0NAotLS0gYS9qZHNhbXBsZS5jCisrKyBiL2pkc2FtcGxlLmMKQEAgLTUsNiArNSwxMyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBmb3IgU0lNRCBleHRlbnNpb24uCisgKiBMYXN0IE1vZGlmaWVkIDogSmFudWFyeSA1LCAyMDA2CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdXBzYW1wbGluZyByb3V0aW5lcy4KICAqCiAgKiBVcHNhbXBsaW5nIGlucHV0IGRhdGEgaXMgY291bnRlZCBpbiAicm93IGdyb3VwcyIuICBBIHJvdyBncm91cApAQCAtMjEsNiArMjgsNyBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpjb2xzYW1wLmgiCQkvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyAqLwogCiAKIC8qIFBvaW50ZXIgdG8gcm91dGluZSB0byB1cHNhbXBsZSBhIHNpbmdsZSBjb21wb25lbnQgKi8KQEAgLTI4NSw2ICsyOTMsMzcgQEAKIH0KIAogCisjaWZkZWYgVVBTQU1QTEVfSDFWMl9TVVBQT1JURUQKKworLyoKKyAqIEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDE6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCisgKiBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4KKyAqCisgKiBTSU1EIEV4dDogVGhpcyByb3V0aW5lIGlzIGZvciBmaWxlcyB0aGF0IGFyZSByb3RhdGVkIG9yIHRyYW5zcG9zZWQKKyAqICAgICAgICAgICBieSBqcGVndHJhbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gxdjJfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7CisgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEgPSAqb3V0cHV0X2RhdGFfcHRyOworICBpbnQgaW5yb3csIG91dHJvdzsKKworICBpbnJvdyA9IG91dHJvdyA9IDA7CisgIHdoaWxlIChvdXRyb3cgPCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKKyAgICBqY29weV9zYW1wbGVfcm93cyhpbnB1dF9kYXRhLCBpbnJvdywgb3V0cHV0X2RhdGEsIG91dHJvdywKKwkJICAgICAgMSwgY2luZm8tPm91dHB1dF93aWR0aCk7CisgICAgamNvcHlfc2FtcGxlX3Jvd3MoaW5wdXRfZGF0YSwgaW5yb3csIG91dHB1dF9kYXRhLCBvdXRyb3crMSwKKwkJICAgICAgMSwgY2luZm8tPm91dHB1dF93aWR0aCk7CisgICAgaW5yb3crKzsKKyAgICBvdXRyb3cgKz0gMjsKKyAgfQorfQorCisjZW5kaWYgLyogVVBTQU1QTEVfSDFWMl9TVVBQT1JURUQgKi8KKworCiAvKgogICogRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCiAgKgpAQCAtMzkxLDYgKzQzMCw1MiBAQAogfQogCiAKKyNpZmRlZiBVUFNBTVBMRV9IMVYyX1NVUFBPUlRFRAorCisvKgorICogRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDE6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCisgKiBBZ2FpbiBhIHRyaWFuZ2xlIGZpbHRlcjsgc2VlIGNvbW1lbnRzIGZvciBoMnYxIGNhc2UsIGFib3ZlLgorICoKKyAqIEl0IGlzIE9LIGZvciB1cyB0byByZWZlcmVuY2UgdGhlIGFkamFjZW50IGlucHV0IHJvd3MgYmVjYXVzZSB3ZSBkZW1hbmRlZAorICogY29udGV4dCBmcm9tIHRoZSBtYWluIGJ1ZmZlciBjb250cm9sbGVyIChzZWUgaW5pdGlhbGl6YXRpb24gY29kZSkuCisgKgorICogU0lNRCBFeHQ6IFRoaXMgcm91dGluZSBpcyBmb3IgZmlsZXMgdGhhdCBhcmUgcm90YXRlZCBvciB0cmFuc3Bvc2VkCisgKiAgICAgICAgICAgYnkganBlZ3RyYW4uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitoMXYyX2ZhbmN5X3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkJICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7CisgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEgPSAqb3V0cHV0X2RhdGFfcHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgb3V0cHRyOworICByZWdpc3RlciBpbnQgY29sc3VtOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbGN0cjsKKyAgaW50IGlucm93LCBvdXRyb3csIHY7CisKKyAgaW5yb3cgPSBvdXRyb3cgPSAwOworICB3aGlsZSAob3V0cm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CisgICAgZm9yICh2ID0gMDsgdiA8IDI7IHYrKykgeworICAgICAgLyogaW5wdHIwIHBvaW50cyB0byBuZWFyZXN0IGlucHV0IHJvdywgaW5wdHIxIHBvaW50cyB0byBuZXh0IG5lYXJlc3QgKi8KKyAgICAgIGlucHRyMCA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgICAgaWYgKHYgPT0gMCkJCS8qIG5leHQgbmVhcmVzdCBpcyByb3cgYWJvdmUgKi8KKwlpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93LTFdOworICAgICAgZWxzZQkJCS8qIG5leHQgbmVhcmVzdCBpcyByb3cgYmVsb3cgKi8KKwlpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93KzFdOworICAgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93KytdOworCisgICAgICBmb3IgKGNvbGN0ciA9IGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoOyBjb2xjdHIgPiAwOyBjb2xjdHItLSkgeworCWNvbHN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKSAqIDMgKyBHRVRKU0FNUExFKCppbnB0cjErKyk7CisJKm91dHB0cisrID0gKEpTQU1QTEUpICgoY29sc3VtICsgdiArIDEpID4+IDIpOworICAgICAgfQorICAgIH0KKyAgICBpbnJvdysrOworICB9Cit9CisKKyNlbmRpZiAvKiBVUFNBTVBMRV9IMVYyX1NVUFBPUlRFRCAqLworCisKIC8qCiAgKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdXBzYW1wbGluZy4KICAqLwpAQCAtNDAzLDYgKzQ4OCw3IEBACiAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOwogICBib29sZWFuIG5lZWRfYnVmZmVyLCBkb19mYW5jeTsKICAgaW50IGhfaW5fZ3JvdXAsIHZfaW5fZ3JvdXAsIGhfb3V0X2dyb3VwLCB2X291dF9ncm91cDsKKyAgdW5zaWduZWQgaW50IHNpbWQgPSBqcGVnX3NpbWRfc3VwcG9ydCgoal9jb21tb25fcHRyKSBjaW5mbyk7CiAKICAgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCkBAIC00NDcsMTggKzUzMyw4MyBAQAogICAgIH0gZWxzZSBpZiAoaF9pbl9ncm91cCAqIDIgPT0gaF9vdXRfZ3JvdXAgJiYKIAkgICAgICAgdl9pbl9ncm91cCA9PSB2X291dF9ncm91cCkgewogICAgICAgLyogU3BlY2lhbCBjYXNlcyBmb3IgMmgxdiB1cHNhbXBsaW5nICovCi0gICAgICBpZiAoZG9fZmFuY3kgJiYgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggPiAyKQotCXVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjFfZmFuY3lfdXBzYW1wbGU7Ci0gICAgICBlbHNlCi0JdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2MV91cHNhbXBsZTsKKyAgICAgIGlmIChkb19mYW5jeSAmJiBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCA+IDIpIHsKKyNpZmRlZiBKRFNBTVBMRV9GQU5DWV9TU0UyX1NVUFBPUlRFRAorCWlmIChzaW1kICYgSlNJTURfU1NFMiAmJgorCSAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKSkKKwkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpwZWdfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyOworCWVsc2UKKyNlbmRpZgorI2lmZGVmIEpEU0FNUExFX0ZBTkNZX01NWF9TVVBQT1JURUQKKwlpZiAoc2ltZCAmIEpTSU1EX01NWCkKKwkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpwZWdfaDJ2MV9mYW5jeV91cHNhbXBsZV9tbXg7CisJZWxzZQorI2VuZGlmCisJICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYxX2ZhbmN5X3Vwc2FtcGxlOworICAgICAgfSBlbHNlIHsKKyNpZmRlZiBKRFNBTVBMRV9TSU1QTEVfU1NFMl9TVVBQT1JURUQKKwlpZiAoc2ltZCAmIEpTSU1EX1NTRTIpCisJICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqcGVnX2gydjFfdXBzYW1wbGVfc3NlMjsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBKRFNBTVBMRV9TSU1QTEVfTU1YX1NVUFBPUlRFRAorCWlmIChzaW1kICYgSlNJTURfTU1YKQorCSAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0ganBlZ19oMnYxX3Vwc2FtcGxlX21teDsKKwllbHNlCisjZW5kaWYKKwkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjFfdXBzYW1wbGU7CisgICAgICB9CiAgICAgfSBlbHNlIGlmIChoX2luX2dyb3VwICogMiA9PSBoX291dF9ncm91cCAmJgogCSAgICAgICB2X2luX2dyb3VwICogMiA9PSB2X291dF9ncm91cCkgewogICAgICAgLyogU3BlY2lhbCBjYXNlcyBmb3IgMmgydiB1cHNhbXBsaW5nICovCiAgICAgICBpZiAoZG9fZmFuY3kgJiYgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggPiAyKSB7Ci0JdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml9mYW5jeV91cHNhbXBsZTsKKyNpZmRlZiBKRFNBTVBMRV9GQU5DWV9TU0UyX1NVUFBPUlRFRAorCWlmIChzaW1kICYgSlNJTURfU1NFMiAmJgorCSAgICBJU19DT05TVF9BTElHTkVEXzE2KGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKSkKKwkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpwZWdfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyOworCWVsc2UKKyNlbmRpZgorI2lmZGVmIEpEU0FNUExFX0ZBTkNZX01NWF9TVVBQT1JURUQKKwlpZiAoc2ltZCAmIEpTSU1EX01NWCkKKwkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpwZWdfaDJ2Ml9mYW5jeV91cHNhbXBsZV9tbXg7CisJZWxzZQorI2VuZGlmCisJICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYyX2ZhbmN5X3Vwc2FtcGxlOworCXVwc2FtcGxlLT5wdWIubmVlZF9jb250ZXh0X3Jvd3MgPSBUUlVFOworICAgICAgfSBlbHNlIHsKKyNpZmRlZiBKRFNBTVBMRV9TSU1QTEVfU1NFMl9TVVBQT1JURUQKKwlpZiAoc2ltZCAmIEpTSU1EX1NTRTIpCisJICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqcGVnX2gydjJfdXBzYW1wbGVfc3NlMjsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBKRFNBTVBMRV9TSU1QTEVfTU1YX1NVUFBPUlRFRAorCWlmIChzaW1kICYgSlNJTURfTU1YKQorCSAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0ganBlZ19oMnYyX3Vwc2FtcGxlX21teDsKKwllbHNlCisjZW5kaWYKKwkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfdXBzYW1wbGU7CisgICAgICB9CisjaWZkZWYgVVBTQU1QTEVfSDFWMl9TVVBQT1JURUQKKyAgICB9IGVsc2UgaWYgKGhfaW5fZ3JvdXAgPT0gaF9vdXRfZ3JvdXAgJiYKKwkgICAgICAgdl9pbl9ncm91cCAqIDIgPT0gdl9vdXRfZ3JvdXApIHsKKyAgICAgIC8qIFNwZWNpYWwgY2FzZXMgZm9yIDFoMnYgdXBzYW1wbGluZyAqLworICAgICAgaWYgKGRvX2ZhbmN5KSB7CisjaWZkZWYgSkRTQU1QTEVfRkFOQ1lfU1NFMl9TVVBQT1JURUQKKwlpZiAoc2ltZCAmIEpTSU1EX1NTRTIgJiYKKwkgICAgSVNfQ09OU1RfQUxJR05FRF8xNihqY29uc3RfZmFuY3lfdXBzYW1wbGVfc3NlMikpCisJICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqcGVnX2gxdjJfZmFuY3lfdXBzYW1wbGVfc3NlMjsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBKRFNBTVBMRV9GQU5DWV9NTVhfU1VQUE9SVEVECisJaWYgKHNpbWQgJiBKU0lNRF9NTVgpCisJICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqcGVnX2gxdjJfZmFuY3lfdXBzYW1wbGVfbW14OworCWVsc2UKKyNlbmRpZgorCSAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDF2Ml9mYW5jeV91cHNhbXBsZTsKIAl1cHNhbXBsZS0+cHViLm5lZWRfY29udGV4dF9yb3dzID0gVFJVRTsKICAgICAgIH0gZWxzZQotCXVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfdXBzYW1wbGU7CisJdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDF2Ml91cHNhbXBsZTsKKyNlbmRpZiAvKiBVUFNBTVBMRV9IMVYyX1NVUFBPUlRFRCAqLwogICAgIH0gZWxzZSBpZiAoKGhfb3V0X2dyb3VwICUgaF9pbl9ncm91cCkgPT0gMCAmJgogCSAgICAgICAodl9vdXRfZ3JvdXAgJSB2X2luX2dyb3VwKSA9PSAwKSB7CiAgICAgICAvKiBHZW5lcmljIGludGVncmFsLWZhY3RvcnMgdXBzYW1wbGluZyBtZXRob2QgKi8KQEAgLTQ2OCwxMSArNjE5LDUyIEBACiAgICAgfSBlbHNlCiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0ZSQUNUX1NBTVBMRV9OT1RJTVBMKTsKICAgICBpZiAobmVlZF9idWZmZXIpIHsKKyAgICAgIGVudW0geyBTSVpFT0ZfWE1NV09SRCA9IDE2IH07CS8qIGZyb20ganNpbWRleHQuaW5jICovCiAgICAgICB1cHNhbXBsZS0+Y29sb3JfYnVmW2NpXSA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQogCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5vdXRwdXRfd2lkdGgsCi0JCQkJKGxvbmcpIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciksCisJIChKRElNRU5TSU9OKSBqcm91bmRfdXAoanJvdW5kX3VwKChsb25nKSBjaW5mby0+b3V0cHV0X3dpZHRoLAorCQkJCQkgIChsb25nKSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpLAorCQkJCShsb25nKSAoMiAqIFNJWkVPRl9YTU1XT1JEKSksCiAJIChKRElNRU5TSU9OKSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOwogICAgIH0KICAgfQogfQorCisKKyNpZm5kZWYgSlNJTURfTU9ERUlORk9fTk9UX1NVUFBPUlRFRAorCitHTE9CQUwodW5zaWduZWQgaW50KQoranBlZ19zaW1kX3Vwc2FtcGxlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IGRvX2ZhbmN5KQoreworICB1bnNpZ25lZCBpbnQgc2ltZCA9IGpwZWdfc2ltZF9zdXBwb3J0KChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKKworI2lmZGVmIFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVECisgIGlmICghZG9fZmFuY3kpCisgICAgcmV0dXJuIGpwZWdfc2ltZF9tZXJnZWRfdXBzYW1wbGVyKGNpbmZvKTsKKyNlbmRpZgorCisgIGlmIChkb19mYW5jeSkgeworI2lmZGVmIEpEU0FNUExFX0ZBTkNZX1NTRTJfU1VQUE9SVEVECisgICAgaWYgKHNpbWQgJiBKU0lNRF9TU0UyICYmCisgICAgICAgIElTX0NPTlNUX0FMSUdORURfMTYoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpKQorICAgICAgcmV0dXJuIEpTSU1EX1NTRTI7CisjZW5kaWYKKyNpZmRlZiBKRFNBTVBMRV9GQU5DWV9NTVhfU1VQUE9SVEVECisgICAgaWYgKHNpbWQgJiBKU0lNRF9NTVgpCisgICAgICByZXR1cm4gSlNJTURfTU1YOworI2VuZGlmCisgIH0gZWxzZSB7CisjaWZkZWYgSkRTQU1QTEVfU0lNUExFX1NTRTJfU1VQUE9SVEVECisgICAgaWYgKHNpbWQgJiBKU0lNRF9TU0UyKQorICAgICAgcmV0dXJuIEpTSU1EX1NTRTI7CisjZW5kaWYKKyNpZmRlZiBKRFNBTVBMRV9TSU1QTEVfTU1YX1NVUFBPUlRFRAorICAgIGlmIChzaW1kICYgSlNJTURfTU1YKQorICAgICAgcmV0dXJuIEpTSU1EX01NWDsKKyNlbmRpZgorICB9CisKKyAgcmV0dXJuIEpTSU1EX05PTkU7Cit9CisKKyNlbmRpZiAvKiAhSlNJTURfTU9ERUlORk9fTk9UX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvamRzYW1zczIuYXNtIGIvamRzYW1zczIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZmNmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9qZHNhbXNzMi5hc20KQEAgLTAsMCArMSw4ODMgQEAKKzsKKzsgamRzYW1zczIuYXNtIC0gdXBzYW1wbGluZyAoU1NFMikKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBMYXN0IE1vZGlmaWVkIDogRmVicnVhcnkgNCwgMjAwNgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKyVpZmRlZiBKRFNBTVBMRV9GQU5DWV9TU0UyX1NVUFBPUlRFRAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKQorCitFWFROKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKToKKworUFdfT05FCQl0aW1lcyA4IGR3ICAxCitQV19UV08JCXRpbWVzIDggZHcgIDIKK1BXX1RIUkVFCXRpbWVzIDggZHcgIDMKK1BXX1NFVkVOCXRpbWVzIDggZHcgIDcKK1BXX0VJR0hUCXRpbWVzIDggZHcgIDgKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IFRoZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBpcyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHBpeGVsIGNlbnRlcnMsCis7IGFsc28ga25vd24gYXMgYSAidHJpYW5nbGUgZmlsdGVyIi4gIFRoaXMgaXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2VlbgorOyBzcGVlZCBhbmQgdmlzdWFsIHF1YWxpdHkuICBUaGUgY2VudGVycyBvZiB0aGUgb3V0cHV0IHBpeGVscyBhcmUgMS80IGFuZCAzLzQKKzsgb2YgdGhlIHdheSBiZXR3ZWVuIGlucHV0IHBpeGVsIGNlbnRlcnMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgY2luZm8oYikJCShiKSs4CQk7IGpfZGVjb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkJKGIpKzEyCQk7IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCislZGVmaW5lIGlucHV0X2RhdGEoYikJCShiKSsxNgkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyKQorCitFWFROKGpwZWdfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaHBpYwllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJbW92CWVheCwgUE9JTlRFUiBbY29tcHB0cihlYnApXQorCW1vdgllYXgsIEpESU1FTlNJT04gW2pjb21waW5mb19kb3duc2FtcGxlZF93aWR0aChlYXgpXSAgOyBjb2xjdHIKKwl0ZXN0CWVheCxlYXgKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllY3gsIFBPSU5URVIgW2NpbmZvKGVicCldCisJbW92CWVjeCwgSU5UIFtqZHN0cnVjdF9tYXhfdl9zYW1wX2ZhY3RvcihlY3gpXQk7IHJvd2N0cgorCXRlc3QJZWN4LGVjeAorCWp6CW5lYXIgLnJldHVybgorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtlZGldCQkJOyBvdXRwdXRfZGF0YQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVheAkJCTsgY29sY3RyCisJcHVzaAllZGkKKwlwdXNoCWVzaQorCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JOyBpbnB0cgorCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCTsgb3V0cHRyCisKKwl0ZXN0CWVheCwgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5za2lwCisJbW92CWRsLCBKU0FNUExFIFtlc2krKGVheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJSlNBTVBMRSBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCTsgaW5zZXJ0IGEgZHVtbXkgc2FtcGxlCisuc2tpcDoKKwlweG9yCXhtbTAseG1tMAkJOyB4bW0wPShhbGwgMCdzKQorCXBjbXBlcWIJeG1tNyx4bW03CisJcHNybGRxCXhtbTcsKFNJWkVPRl9YTU1XT1JELTEpCisJcGFuZAl4bW03LCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKworCWFkZAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWFuZAllYXgsIGJ5dGUgLVNJWkVPRl9YTU1XT1JECisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3BfbGFzdDoKKwlwY21wZXFiCXhtbTYseG1tNgorCXBzbGxkcQl4bW02LChTSVpFT0ZfWE1NV09SRC0xKQorCXBhbmQJeG1tNiwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisJam1wCXNob3J0IC51cHNhbXBsZQorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wOgorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KKwlwc2xsZHEJeG1tNiwoU0laRU9GX1hNTVdPUkQtMSkKKworLnVwc2FtcGxlOgorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcWEJeG1tMix4bW0xCisJbW92ZHFhCXhtbTMseG1tMQkJOyB4bW0xPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCisJcHNsbGRxCXhtbTIsMQkJCTsgeG1tMj0oLS0gIDAgIDEgLi4uIDEyIDEzIDE0KQorCXBzcmxkcQl4bW0zLDEJCQk7IHhtbTM9KCAxICAyICAzIC4uLiAxNCAxNSAtLSkKKworCXBvcgl4bW0yLHhtbTcJCTsgeG1tMj0oLTEgIDAgIDEgLi4uIDEyIDEzIDE0KQorCXBvcgl4bW0zLHhtbTYJCTsgeG1tMz0oIDEgIDIgIDMgLi4uIDE0IDE1IDE2KQorCisJbW92ZHFhCXhtbTcseG1tMQorCXBzcmxkcQl4bW03LChTSVpFT0ZfWE1NV09SRC0xKQk7IHhtbTc9KDE1IC0tIC0tIC4uLiAtLSAtLSAtLSkKKworCW1vdmRxYSAgICB4bW00LHhtbTEKKwlwdW5wY2tsYncgeG1tMSx4bW0wCQk7IHhtbTE9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXB1bnBja2hidyB4bW00LHhtbTAJCTsgeG1tND0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJbW92ZHFhICAgIHhtbTUseG1tMgorCXB1bnBja2xidyB4bW0yLHhtbTAJCTsgeG1tMj0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisJcHVucGNraGJ3IHhtbTUseG1tMAkJOyB4bW01PSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKwltb3ZkcWEgICAgeG1tNix4bW0zCisJcHVucGNrbGJ3IHhtbTMseG1tMAkJOyB4bW0zPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKKwlwdW5wY2toYncgeG1tNix4bW0wCQk7IHhtbTY9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorCisJcG11bGx3CXhtbTEsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBtdWxsdwl4bW00LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKwlwYWRkdwl4bW0yLFtHT1RPRkYoZWJ4LFBXX09ORSldCisJcGFkZHcJeG1tNSxbR09UT0ZGKGVieCxQV19PTkUpXQorCXBhZGR3CXhtbTMsW0dPVE9GRihlYngsUFdfVFdPKV0KKwlwYWRkdwl4bW02LFtHT1RPRkYoZWJ4LFBXX1RXTyldCisKKwlwYWRkdwl4bW0yLHhtbTEKKwlwYWRkdwl4bW01LHhtbTQKKwlwc3Jsdwl4bW0yLDIJCQk7IHhtbTI9T3V0TEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorCXBzcmx3CXhtbTUsMgkJCTsgeG1tNT1PdXRIRT0oMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisJcGFkZHcJeG1tMyx4bW0xCisJcGFkZHcJeG1tNix4bW00CisJcHNybHcJeG1tMywyCQkJOyB4bW0zPU91dExPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKKwlwc3Jsdwl4bW02LDIJCQk7IHhtbTY9T3V0SE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQorCisJcHNsbHcJeG1tMyxCWVRFX0JJVAorCXBzbGx3CXhtbTYsQllURV9CSVQKKwlwb3IJeG1tMix4bW0zCQk7IHhtbTI9T3V0TD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorCXBvcgl4bW01LHhtbTYJCTsgeG1tNT1PdXRIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCisKKwltb3ZkcWEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisJbW92ZHFhCVhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQorCisJc3ViCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyCisJYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCW5lYXIgLmNvbHVtbmxvb3AKKwl0ZXN0CWVheCxlYXgKKwlqbnoJbmVhciAuY29sdW1ubG9vcF9sYXN0CisKKwlwb3AJZXNpCisJcG9wCWVkaQorCXBvcAllYXgKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlkZWMJZWN4CQkJCTsgcm93Y3RyCisJamcJbmVhciAucm93bG9vcAorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wcGljCWVieAorCXBvcAllYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKzsgQWdhaW4gYSB0cmlhbmdsZSBmaWx0ZXI7IHNlZSBjb21tZW50cyBmb3IgaDJ2MSBjYXNlLCBhYm92ZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworJWRlZmluZSBjaW5mbyhiKQkJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQk0CislZGVmaW5lIGdvdHB0cgkJd2soMCktU0laRU9GX1BPSU5URVIJOyB2b2lkICogZ290cHRyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKQorCitFWFROKGpwZWdfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKKwltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworCisJbW92CWVkeCxlYXgJCQkJOyBlZHggPSBvcmlnaW5hbCBlYnAKKwltb3YJZWF4LCBQT0lOVEVSIFtjb21wcHRyKGVkeCldCisJbW92CWVheCwgSkRJTUVOU0lPTiBbamNvbXBpbmZvX2Rvd25zYW1wbGVkX3dpZHRoKGVheCldICA7IGNvbGN0cgorCXRlc3QJZWF4LGVheAorCWp6CW5lYXIgLnJldHVybgorCisJbW92CWVjeCwgUE9JTlRFUiBbY2luZm8oZWR4KV0KKwltb3YJZWN4LCBJTlQgW2pkc3RydWN0X21heF92X3NhbXBfZmFjdG9yKGVjeCldCTsgcm93Y3RyCisJdGVzdAllY3gsZWN4CisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVkeCldCTsgaW5wdXRfZGF0YQorCW1vdgllZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlZHgpXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW2VkaV0JCQk7IG91dHB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWF4CQkJCQk7IGNvbGN0cgorCXB1c2gJZWN4CisJcHVzaAllZGkKKwlwdXNoCWVzaQorCisJbW92CWVjeCwgSlNBTVBST1cgW2VzaS0xKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjEoYWJvdmUpCisJbW92CWVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjAKKwltb3YJZXNpLCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMShiZWxvdykKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQk7IG91dHB0cjAKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQk7IG91dHB0cjEKKworCXRlc3QJZWF4LCBTSVpFT0ZfWE1NV09SRC0xCisJanoJc2hvcnQgLnNraXAKKwlwdXNoCWVkeAorCW1vdglkbCwgSlNBTVBMRSBbZWN4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VjeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAorCW1vdglkbCwgSlNBTVBMRSBbZWJ4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAorCW1vdglkbCwgSlNBTVBMRSBbZXNpKyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAk7IGluc2VydCBhIGR1bW15IHNhbXBsZQorCXBvcAllZHgKKy5za2lwOgorCTsgLS0gcHJvY2VzcyB0aGUgZmlyc3QgY29sdW1uIGJsb2NrCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZWJ4KzAqU0laRU9GX1hNTVdPUkRdCTsgeG1tMD1yb3dbIDBdWzBdCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW2VjeCswKlNJWkVPRl9YTU1XT1JEXQk7IHhtbTE9cm93Wy0xXVswXQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0JOyB4bW0yPXJvd1srMV1bMF0KKworCXB1c2hwaWMJZWJ4CisJbW92cGljCWVieCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MKKworCXB4b3IgICAgICB4bW0zLHhtbTMJCTsgeG1tMz0oYWxsIDAncykKKwltb3ZkcWEgICAgeG1tNCx4bW0wCisJcHVucGNrbGJ3IHhtbTAseG1tMwkJOyB4bW0wPXJvd1sgMF0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcHVucGNraGJ3IHhtbTQseG1tMwkJOyB4bW00PXJvd1sgMF0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJbW92ZHFhICAgIHhtbTUseG1tMQorCXB1bnBja2xidyB4bW0xLHhtbTMJCTsgeG1tMT1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXB1bnBja2hidyB4bW01LHhtbTMJCTsgeG1tNT1yb3dbLTFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCW1vdmRxYSAgICB4bW02LHhtbTIKKwlwdW5wY2tsYncgeG1tMix4bW0zCQk7IHhtbTI9cm93WysxXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwdW5wY2toYncgeG1tNix4bW0zCQk7IHhtbTY9cm93WysxXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKworCXBtdWxsdwl4bW0wLFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKwlwbXVsbHcJeG1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCisKKwlwY21wZXFiCXhtbTcseG1tNworCXBzcmxkcQl4bW03LChTSVpFT0ZfWE1NV09SRC0yKQorCisJcGFkZHcJeG1tMSx4bW0wCQk7IHhtbTE9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXBhZGR3CXhtbTUseG1tNAkJOyB4bW01PUludDBIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKwlwYWRkdwl4bW0yLHhtbTAJCTsgeG1tMj1JbnQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcGFkZHcJeG1tNix4bW00CQk7IHhtbTY9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCisJbW92ZHFhCVhNTVdPUkQgW2VkeCswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQk7IHRlbXBvcmFyaWx5IHNhdmUKKwltb3ZkcWEJWE1NV09SRCBbZWR4KzEqU0laRU9GX1hNTVdPUkRdLCB4bW01CTsgdGhlIGludGVybWVkaWF0ZSBkYXRhCisJbW92ZHFhCVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorCW1vdmRxYQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTYKKworCXBhbmQJeG1tMSx4bW03CQk7IHhtbTE9KCAwIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCXBhbmQJeG1tMix4bW03CQk7IHhtbTI9KCAwIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTIKKworCXBvcHBpYwllYngKKworCWFkZAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWFuZAllYXgsIGJ5dGUgLVNJWkVPRl9YTU1XT1JECisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3BfbGFzdDoKKwk7IC0tIHByb2Nlc3MgdGhlIGxhc3QgY29sdW1uIGJsb2NrCisKKwlwdXNocGljCWVieAorCW1vdnBpYwllYngsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzCisKKwlwY21wZXFiCXhtbTEseG1tMQorCXBzbGxkcQl4bW0xLChTSVpFT0ZfWE1NV09SRC0yKQorCW1vdmRxYQl4bW0yLHhtbTEKKworCXBhbmQJeG1tMSwgWE1NV09SRCBbZWR4KzEqU0laRU9GX1hNTVdPUkRdCisJcGFuZAl4bW0yLCBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0KKworCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTEJOyB4bW0xPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSkKKwltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW0yCTsgeG1tMj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUpCisKKwlqbXAJbmVhciAudXBzYW1wbGUKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcDoKKwk7IC0tIHByb2Nlc3MgdGhlIG5leHQgY29sdW1uIGJsb2NrCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZWJ4KzEqU0laRU9GX1hNTVdPUkRdCTsgeG1tMD1yb3dbIDBdWzFdCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW2VjeCsxKlNJWkVPRl9YTU1XT1JEXQk7IHhtbTE9cm93Wy0xXVsxXQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0JOyB4bW0yPXJvd1srMV1bMV0KKworCXB1c2hwaWMJZWJ4CisJbW92cGljCWVieCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MKKworCXB4b3IgICAgICB4bW0zLHhtbTMJCTsgeG1tMz0oYWxsIDAncykKKwltb3ZkcWEgICAgeG1tNCx4bW0wCisJcHVucGNrbGJ3IHhtbTAseG1tMwkJOyB4bW0wPXJvd1sgMF0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcHVucGNraGJ3IHhtbTQseG1tMwkJOyB4bW00PXJvd1sgMF0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJbW92ZHFhICAgIHhtbTUseG1tMQorCXB1bnBja2xidyB4bW0xLHhtbTMJCTsgeG1tMT1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXB1bnBja2hidyB4bW01LHhtbTMJCTsgeG1tNT1yb3dbLTFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCW1vdmRxYSAgICB4bW02LHhtbTIKKwlwdW5wY2tsYncgeG1tMix4bW0zCQk7IHhtbTI9cm93WysxXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwdW5wY2toYncgeG1tNix4bW0zCQk7IHhtbTY9cm93WysxXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKworCXBtdWxsdwl4bW0wLFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKwlwbXVsbHcJeG1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCisKKwlwYWRkdwl4bW0xLHhtbTAJCTsgeG1tMT1JbnQwTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcGFkZHcJeG1tNSx4bW00CQk7IHhtbTU9SW50MEg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCXBhZGR3CXhtbTIseG1tMAkJOyB4bW0yPUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwYWRkdwl4bW02LHhtbTQJCTsgeG1tNj1JbnQxSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKwltb3ZkcWEJWE1NV09SRCBbZWR4KzIqU0laRU9GX1hNTVdPUkRdLCB4bW0xCTsgdGVtcG9yYXJpbHkgc2F2ZQorCW1vdmRxYQlYTU1XT1JEIFtlZHgrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTUJOyB0aGUgaW50ZXJtZWRpYXRlIGRhdGEKKwltb3ZkcWEJWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisJbW92ZHFhCVhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tNgorCisJcHNsbGRxCXhtbTEsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tMT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDApCisJcHNsbGRxCXhtbTIsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tMj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDApCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMgorCisudXBzYW1wbGU6CisJOyAtLSBwcm9jZXNzIHRoZSB1cHBlciByb3cKKworCW1vdmRxYQl4bW03LCBYTU1XT1JEIFtlZHgrMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbZWR4KzEqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEJeG1tMCx4bW03CQk7IHhtbTc9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCW1vdmRxYQl4bW00LHhtbTMJCTsgeG1tMz1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJcHNybGRxCXhtbTAsMgkJCTsgeG1tMD0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgLS0pCisJcHNsbGRxCXhtbTQsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tND0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDgpCisJbW92ZHFhCXhtbTUseG1tNworCW1vdmRxYQl4bW02LHhtbTMKKwlwc3JsZHEJeG1tNSwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW01PSggNyAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKwlwc2xsZHEJeG1tNiwyCQkJOyB4bW02PSgtLSAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKworCXBvcgl4bW0wLHhtbTQJCTsgeG1tMD0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDgpCisJcG9yCXhtbTUseG1tNgkJOyB4bW01PSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKworCW1vdmRxYQl4bW0xLHhtbTcKKwltb3ZkcWEJeG1tMix4bW0zCisJcHNsbGRxCXhtbTEsMgkJCTsgeG1tMT0oLS0gIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisJcHNybGRxCXhtbTIsMgkJCTsgeG1tMj0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgLS0pCisJbW92ZHFhCXhtbTQseG1tMworCXBzcmxkcQl4bW00LChTSVpFT0ZfWE1NV09SRC0yKQk7IHhtbTQ9KDE1IC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisJcG9yCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9KC0xICAwICAxICAyICAzICA0ICA1ICA2KQorCXBvcgl4bW0yLCBYTU1XT1JEIFt3aygyKV0JOyB4bW0yPSggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNikKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQKKworCXBtdWxsdwl4bW03LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKwlwbXVsbHcJeG1tMyxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcGFkZHcJeG1tMSxbR09UT0ZGKGVieCxQV19FSUdIVCldCisJcGFkZHcJeG1tNSxbR09UT0ZGKGVieCxQV19FSUdIVCldCisJcGFkZHcJeG1tMCxbR09UT0ZGKGVieCxQV19TRVZFTildCisJcGFkZHcJeG1tMixbR09UT0ZGKGVieCxQV19TRVZFTildCisKKwlwYWRkdwl4bW0xLHhtbTcKKwlwYWRkdwl4bW01LHhtbTMKKwlwc3Jsdwl4bW0xLDQJCQk7IHhtbTE9T3V0MExFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCkKKwlwc3Jsdwl4bW01LDQJCQk7IHhtbTU9T3V0MEhFPSgxNiAxOCAyMCAyMiAyNCAyNiAyOCAzMCkKKwlwYWRkdwl4bW0wLHhtbTcKKwlwYWRkdwl4bW0yLHhtbTMKKwlwc3Jsdwl4bW0wLDQJCQk7IHhtbTA9T3V0MExPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKKwlwc3Jsdwl4bW0yLDQJCQk7IHhtbTI9T3V0MEhPPSgxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKKworCXBzbGx3CXhtbTAsQllURV9CSVQKKwlwc2xsdwl4bW0yLEJZVEVfQklUCisJcG9yCXhtbTEseG1tMAkJOyB4bW0xPU91dDBMPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCisJcG9yCXhtbTUseG1tMgkJOyB4bW01PU91dDBIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCisKKwltb3ZkcWEJWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW2VkeCsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQorCisJOyAtLSBwcm9jZXNzIHRoZSBsb3dlciByb3cKKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcWEJeG1tNCwgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEJeG1tNyx4bW02CQk7IHhtbTY9SW50MUw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCW1vdmRxYQl4bW0zLHhtbTQJCTsgeG1tND1JbnQxSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJcHNybGRxCXhtbTcsMgkJCTsgeG1tNz0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgLS0pCisJcHNsbGRxCXhtbTMsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tMz0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDgpCisJbW92ZHFhCXhtbTAseG1tNgorCW1vdmRxYQl4bW0yLHhtbTQKKwlwc3JsZHEJeG1tMCwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW0wPSggNyAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKwlwc2xsZHEJeG1tMiwyCQkJOyB4bW0yPSgtLSAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKworCXBvcgl4bW03LHhtbTMJCTsgeG1tNz0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDgpCisJcG9yCXhtbTAseG1tMgkJOyB4bW0wPSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKworCW1vdmRxYQl4bW0xLHhtbTYKKwltb3ZkcWEJeG1tNSx4bW00CisJcHNsbGRxCXhtbTEsMgkJCTsgeG1tMT0oLS0gIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisJcHNybGRxCXhtbTUsMgkJCTsgeG1tNT0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgLS0pCisJbW92ZHFhCXhtbTMseG1tNAorCXBzcmxkcQl4bW0zLChTSVpFT0ZfWE1NV09SRC0yKQk7IHhtbTM9KDE1IC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisJcG9yCXhtbTEsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTE9KC0xICAwICAxICAyICAzICA0ICA1ICA2KQorCXBvcgl4bW01LCBYTU1XT1JEIFt3aygzKV0JOyB4bW01PSggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNikKKworCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMKKworCXBtdWxsdwl4bW02LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKwlwbXVsbHcJeG1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcGFkZHcJeG1tMSxbR09UT0ZGKGVieCxQV19FSUdIVCldCisJcGFkZHcJeG1tMCxbR09UT0ZGKGVieCxQV19FSUdIVCldCisJcGFkZHcJeG1tNyxbR09UT0ZGKGVieCxQV19TRVZFTildCisJcGFkZHcJeG1tNSxbR09UT0ZGKGVieCxQV19TRVZFTildCisKKwlwYWRkdwl4bW0xLHhtbTYKKwlwYWRkdwl4bW0wLHhtbTQKKwlwc3Jsdwl4bW0xLDQJCQk7IHhtbTE9T3V0MUxFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCkKKwlwc3Jsdwl4bW0wLDQJCQk7IHhtbTA9T3V0MUhFPSgxNiAxOCAyMCAyMiAyNCAyNiAyOCAzMCkKKwlwYWRkdwl4bW03LHhtbTYKKwlwYWRkdwl4bW01LHhtbTQKKwlwc3Jsdwl4bW03LDQJCQk7IHhtbTc9T3V0MUxPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKKwlwc3Jsdwl4bW01LDQJCQk7IHhtbTU9T3V0MUhPPSgxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKKworCXBzbGx3CXhtbTcsQllURV9CSVQKKwlwc2xsdwl4bW01LEJZVEVfQklUCisJcG9yCXhtbTEseG1tNwkJOyB4bW0xPU91dDFMPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCisJcG9yCXhtbTAseG1tNQkJOyB4bW0wPU91dDFIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCisKKwltb3ZkcWEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorCisJcG9wcGljCWVieAorCisJc3ViCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWFkZAllY3gsIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyMShhYm92ZSkKKwlhZGQJZWJ4LCBieXRlIDEqU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAKKwlhZGQJZXNpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEoYmVsb3cpCisJYWRkCWVkeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMAorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjEKKwljbXAJZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamEJbmVhciAuY29sdW1ubG9vcAorCXRlc3QJZWF4LGVheAorCWpuegluZWFyIC5jb2x1bW5sb29wX2xhc3QKKworCXBvcAllc2kKKwlwb3AJZWRpCisJcG9wCWVjeAorCXBvcAllYXgKKworCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCisJYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCisJc3ViCWVjeCwgYnl0ZSAyCQkJOyByb3djdHIKKwlqZwluZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCislaWZkZWYgVVBTQU1QTEVfSDFWMl9TVVBQT1JURUQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMToxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKzsgQWdhaW4gYSB0cmlhbmdsZSBmaWx0ZXI7IHNlZSBjb21tZW50cyBmb3IgaDJ2MSBjYXNlLCBhYm92ZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfaDF2Ml9mYW5jeV91cHNhbXBsZV9zc2UyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworJWRlZmluZSBjaW5mbyhiKQkJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKworJWRlZmluZSBnb3RwdHIJCWVicC1TSVpFT0ZfUE9JTlRFUgk7IHZvaWQgKiBnb3RwdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19oMXYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oanBlZ19oMXYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNocGljCWVheAkJOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJZ2V0X0dPVAllYngJCQk7IGdldCBHT1QgYWRkcmVzcworCW1vdnBpYwlQT0lOVEVSIFtnb3RwdHJdLCBlYngJOyBzYXZlIEdPVCBhZGRyZXNzCisKKwltb3YJZWF4LCBQT0lOVEVSIFtjb21wcHRyKGVicCldCisJbW92CWVheCwgSkRJTUVOU0lPTiBbamNvbXBpbmZvX2Rvd25zYW1wbGVkX3dpZHRoKGVheCldICA7IGNvbGN0cgorCWFkZAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWFuZAllYXgsIGJ5dGUgLVNJWkVPRl9YTU1XT1JECisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZWN4LCBQT0lOVEVSIFtjaW5mbyhlYnApXQorCW1vdgllY3gsIElOVCBbamRzdHJ1Y3RfbWF4X3Zfc2FtcF9mYWN0b3IoZWN4KV0JOyByb3djdHIKKwl0ZXN0CWVjeCxlY3gKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJbW92CWVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbZWRpXQkJCTsgb3V0cHV0X2RhdGEKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaAllYXgJCQkJCTsgY29sY3RyCisJcHVzaAllY3gKKwlwdXNoCWVkaQorCXB1c2gJZXNpCisKKwltb3YJZWN4LCBKU0FNUFJPVyBbZXNpLTEqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMShhYm92ZSkKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMAorCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIxKGJlbG93KQorCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMAorCW1vdgllZGksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMQorCisJcHhvcgl4bW0wLHhtbTAJCTsgeG1tMD0oYWxsIDAncykKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcDoKKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbZWJ4XQk7IHhtbTE9cm93WyAwXSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW2VjeF0JOyB4bW0yPXJvd1stMV0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtlc2ldCTsgeG1tMz1yb3dbKzFdKCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKworCXB1c2hwaWMJZWJ4CisJbW92cGljCWVieCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MKKworCW1vdmRxYSAgICB4bW00LHhtbTEKKwlwdW5wY2tsYncgeG1tMSx4bW0wCQk7IHhtbTE9cm93WyAwXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwdW5wY2toYncgeG1tNCx4bW0wCQk7IHhtbTQ9cm93WyAwXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKwltb3ZkcWEgICAgeG1tNSx4bW0yCisJcHVucGNrbGJ3IHhtbTIseG1tMAkJOyB4bW0yPXJvd1stMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcHVucGNraGJ3IHhtbTUseG1tMAkJOyB4bW01PXJvd1stMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJbW92ZHFhICAgIHhtbTYseG1tMworCXB1bnBja2xidyB4bW0zLHhtbTAJCTsgeG1tMz1yb3dbKzFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXB1bnBja2hidyB4bW02LHhtbTAJCTsgeG1tNj1yb3dbKzFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCisJcG11bGx3CXhtbTEsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBtdWxsdwl4bW00LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKwlwYWRkdwl4bW0yLFtHT1RPRkYoZWJ4LFBXX09ORSldCisJcGFkZHcJeG1tNSxbR09UT0ZGKGVieCxQV19PTkUpXQorCXBhZGR3CXhtbTMsW0dPVE9GRihlYngsUFdfVFdPKV0KKwlwYWRkdwl4bW02LFtHT1RPRkYoZWJ4LFBXX1RXTyldCisKKwlwYWRkdwl4bW0yLHhtbTEKKwlwYWRkdwl4bW01LHhtbTQKKwlwc3Jsdwl4bW0yLDIJCQk7IHhtbTI9T3V0MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXBzcmx3CXhtbTUsMgkJCTsgeG1tNT1PdXQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJcGFkZHcJeG1tMyx4bW0xCisJcGFkZHcJeG1tNix4bW00CisJcHNybHcJeG1tMywyCQkJOyB4bW0zPU91dDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwc3Jsdwl4bW02LDIJCQk7IHhtbTY9T3V0MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCisJcGFja3Vzd2IgIHhtbTIseG1tNQkJOyB4bW0yPU91dDA9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKwlwYWNrdXN3YiAgeG1tMyx4bW02CQk7IHhtbTM9T3V0MT0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorCisJbW92ZHFhCVhNTVdPUkQgW2VkeF0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbZWRpXSwgeG1tMworCisJcG9wcGljCWVieAorCisJYWRkCWVjeCwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIxKGFib3ZlKQorCWFkZAllYngsIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAorCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyMShiZWxvdykKKwlhZGQJZWR4LCBieXRlIDEqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIwCisJYWRkCWVkaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMQorCXN1YgllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCisJcG9wCWVzaQorCXBvcAllZGkKKwlwb3AJZWN4CisJcG9wCWVheAorCisJYWRkCWVzaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKKwlhZGQJZWRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlzdWIJZWN4LCBieXRlIDIJCQk7IHJvd2N0cgorCWpnCW5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3BwaWMJZWF4CQk7IHJlbW92ZSBnb3RwdHIKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IFVQU0FNUExFX0gxVjJfU1VQUE9SVEVECislZW5kaWYgOyBKRFNBTVBMRV9GQU5DWV9TU0UyX1NVUFBPUlRFRAorCislaWZkZWYgSkRTQU1QTEVfU0lNUExFX1NTRTJfU1VQUE9SVEVECisKKyVpZm5kZWYgSkRTQU1QTEVfRkFOQ1lfU1NFMl9TVVBQT1JURUQKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorJWVuZGlmCis7Cis7IEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7IEl0J3Mgc3RpbGwgYSBib3ggZmlsdGVyLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19oMnYxX3Vwc2FtcGxlX3NzZTIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCis7ICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpOworOworCislZGVmaW5lIGNpbmZvKGIpCQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGNvbXBwdHIoYikJCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBpbnB1dF9kYXRhKGIpCQkoYikrMTYJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2gydjFfdXBzYW1wbGVfc3NlMikKKworRVhUTihqcGVnX2gydjFfdXBzYW1wbGVfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorOwlwdXNoCWVieAkJOyB1bnVzZWQKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdgllZHgsIFBPSU5URVIgW2NpbmZvKGVicCldCisJbW92CWVkeCwgSkRJTUVOU0lPTiBbamRzdHJ1Y3Rfb3V0cHV0X3dpZHRoKGVkeCldCisJYWRkCWVkeCwgYnl0ZSAoMipTSVpFT0ZfWE1NV09SRCktMQorCWFuZAllZHgsIGJ5dGUgLSgyKlNJWkVPRl9YTU1XT1JEKQorCWp6CXNob3J0IC5yZXR1cm4KKworCW1vdgllY3gsIFBPSU5URVIgW2NpbmZvKGVicCldCisJbW92CWVjeCwgSU5UIFtqZHN0cnVjdF9tYXhfdl9zYW1wX2ZhY3RvcihlY3gpXQk7IHJvd2N0cgorCXRlc3QJZWN4LGVjeAorCWp6CXNob3J0IC5yZXR1cm4KKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJbW92CWVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbZWRpXQkJCTsgb3V0cHV0X2RhdGEKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaAllZGkKKwlwdXNoCWVzaQorCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JCTsgaW5wdHIKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQkJOyBvdXRwdHIKKwltb3YJZWF4LGVkeAkJCQk7IGNvbGN0cgorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKworCW1vdmRxYSAgICB4bW0xLHhtbTAKKwlwdW5wY2tsYncgeG1tMCx4bW0wCisJcHVucGNraGJ3IHhtbTEseG1tMQorCisJbW92ZHFhCVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorCW1vdmRxYQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKworCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEgICAgeG1tMyx4bW0yCisJcHVucGNrbGJ3IHhtbTIseG1tMgorCXB1bnBja2hidyB4bW0zLHhtbTMKKworCW1vdmRxYQlYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbZWRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW0zCisKKwlzdWIJZWF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKwlqeglzaG9ydCAubmV4dHJvdworCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKKwlhZGQJZWRpLCBieXRlIDQqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwlqbXAJc2hvcnQgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisubmV4dHJvdzoKKwlwb3AJZXNpCisJcG9wCWVkaQorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCWRlYwllY3gJCQkJOyByb3djdHIKKwlqZwlzaG9ydCAucm93bG9vcAorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllYngJCTsgdW51c2VkCisJcG9wCWVicAorCXJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7IEl0J3Mgc3RpbGwgYSBib3ggZmlsdGVyLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19oMnYyX3Vwc2FtcGxlX3NzZTIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCis7ICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpOworOworCislZGVmaW5lIGNpbmZvKGIpCQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGNvbXBwdHIoYikJCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBpbnB1dF9kYXRhKGIpCQkoYikrMTYJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2gydjJfdXBzYW1wbGVfc3NlMikKKworRVhUTihqcGVnX2gydjJfdXBzYW1wbGVfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZWR4LCBQT0lOVEVSIFtjaW5mbyhlYnApXQorCW1vdgllZHgsIEpESU1FTlNJT04gW2pkc3RydWN0X291dHB1dF93aWR0aChlZHgpXQorCWFkZAllZHgsIGJ5dGUgKDIqU0laRU9GX1hNTVdPUkQpLTEKKwlhbmQJZWR4LCBieXRlIC0oMipTSVpFT0ZfWE1NV09SRCkKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllY3gsIFBPSU5URVIgW2NpbmZvKGVicCldCisJbW92CWVjeCwgSU5UIFtqZHN0cnVjdF9tYXhfdl9zYW1wX2ZhY3RvcihlY3gpXQk7IHJvd2N0cgorCXRlc3QJZWN4LGVjeAorCWp6CW5lYXIgLnJldHVybgorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtlZGldCQkJOyBvdXRwdXRfZGF0YQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVkaQorCXB1c2gJZXNpCisKKwltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQkJCTsgaW5wdHIKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQk7IG91dHB0cjAKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQk7IG91dHB0cjEKKwltb3YJZWF4LGVkeAkJCQkJOyBjb2xjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEgICAgeG1tMSx4bW0wCisJcHVucGNrbGJ3IHhtbTAseG1tMAorCXB1bnBja2hidyB4bW0xLHhtbTEKKworCW1vdmRxYQlYTU1XT1JEIFtlYngrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKwltb3ZkcWEJWE1NV09SRCBbZWJ4KzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorCW1vdmRxYQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKworCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEgICAgeG1tMyx4bW0yCisJcHVucGNrbGJ3IHhtbTIseG1tMgorCXB1bnBja2hidyB4bW0zLHhtbTMKKworCW1vdmRxYQlYTU1XT1JEIFtlYngrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbZWJ4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW0zCisJbW92ZHFhCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorCW1vdmRxYQlYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKKworCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBpbnB0cgorCWFkZAllYngsIGJ5dGUgNCpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjAKKwlhZGQJZWRpLCBieXRlIDQqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIxCisJam1wCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLm5leHRyb3c6CisJcG9wCWVzaQorCXBvcAllZGkKKworCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCisJYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCisJc3ViCWVjeCwgYnl0ZSAyCQkJOyByb3djdHIKKwlqZwlzaG9ydCAucm93bG9vcAorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSkRTQU1QTEVfU0lNUExFX1NTRTJfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qZjNkbmZsdC5hc20gYi9qZjNkbmZsdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExN2RkNAotLS0gL2Rldi9udWxsCisrKyBiL2pmM2RuZmx0LmFzbQpAQCAtMCwwICsxLDMyNyBAQAorOworOyBqZjNkbmZsdC5hc20gLSBmbG9hdGluZy1wb2ludCBGRENUICgzRE5vdyEpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmxvYXRpbmctcG9pbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZvcndhcmQgRENUCis7IChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkIGRpcmVjdGx5IG9uCis7IHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGZsdC5jOyBzZWUgdGhlIGpmZGN0Zmx0LmMgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgTGFzdCBNb2RpZmllZCA6IEZlYnJ1YXJ5IDQsIDIwMDYKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKyVpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECislaWZkZWYgSkZEQ1RfRkxUXzNETk9XX01NWF9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2ZkY3RfZmxvYXRfM2Rub3cpCisKK0VYVE4oamNvbnN0X2ZkY3RfZmxvYXRfM2Rub3cpOgorCitQRF8wXzM4Mgl0aW1lcyAyIGRkICAwLjM4MjY4MzQzMjM2NTA4OTc3MTcyODQ2MAorUERfMF83MDcJdGltZXMgMiBkZCAgMC43MDcxMDY3ODExODY1NDc1MjQ0MDA4NDQKK1BEXzBfNTQxCXRpbWVzIDIgZGQgIDAuNTQxMTk2MTAwMTQ2MTk2OTg0Mzk5NzIzCitQRF8xXzMwNgl0aW1lcyAyIGRkICAxLjMwNjU2Mjk2NDg3NjM3NjUyNzg1NjY0MworCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfZmRjdF9mbG9hdF8zZG5vdyAoRkFTVF9GTE9BVCAqIGRhdGEpCis7CisKKyVkZWZpbmUgZGF0YShiKQkJKGIpKzgJCTsgRkFTVF9GTE9BVCAqIGRhdGEKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2ZkY3RfZmxvYXRfM2Rub3cpCisKK0VYVE4oanBlZ19mZGN0X2Zsb2F0XzNkbm93KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllc2kJCTsgdW51c2VkCis7CXB1c2gJZWRpCQk7IHVudXNlZAorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKEZBU1RfRkxPQVQgKikKKwltb3YJZWN4LCBEQ1RTSVpFLzIKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSygwLDMsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDEsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJOyBtbTA9KDAwIDAxKSwgbW0xPSgxMCAxMSksIG1tMj0oMDYgMDcpLCBtbTM9KDE2IDE3KQorCisJbW92cSAgICAgIG1tNCxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworCXB1bnBja2xkcSBtbTAsbW0xCQk7IG1tMD0oMDAgMTApPWRhdGEwCisJcHVucGNraGRxIG1tNCxtbTEJCTsgbW00PSgwMSAxMSk9ZGF0YTEKKwltb3ZxICAgICAgbW01LG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisJcHVucGNrbGRxIG1tMixtbTMJCTsgbW0yPSgwNiAxNik9ZGF0YTYKKwlwdW5wY2toZHEgbW01LG1tMwkJOyBtbTU9KDA3IDE3KT1kYXRhNworCisJbW92cQltbTYsbW00CisJbW92cQltbTcsbW0wCisJcGZzdWIJbW00LG1tMgkJCTsgbW00PWRhdGExLWRhdGE2PXRtcDYKKwlwZnN1YgltbTAsbW01CQkJOyBtbTA9ZGF0YTAtZGF0YTc9dG1wNworCXBmYWRkCW1tNixtbTIJCQk7IG1tNj1kYXRhMStkYXRhNj10bXAxCisJcGZhZGQJbW03LG1tNQkJCTsgbW03PWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW01LCBNTVdPUkQgW01NQkxPQ0soMSwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IG1tMT0oMDIgMDMpLCBtbTM9KDEyIDEzKSwgbW0yPSgwNCAwNSksIG1tNT0oMTQgMTUpCisKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT10bXA2CisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0wCTsgd2soMSk9dG1wNworCisJbW92cSAgICAgIG1tNCxtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oMDIgMTIpPWRhdGEyCisJcHVucGNraGRxIG1tNCxtbTMJCTsgbW00PSgwMyAxMyk9ZGF0YTMKKwltb3ZxICAgICAgbW0wLG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisJcHVucGNrbGRxIG1tMixtbTUJCTsgbW0yPSgwNCAxNCk9ZGF0YTQKKwlwdW5wY2toZHEgbW0wLG1tNQkJOyBtbTA9KDA1IDE1KT1kYXRhNQorCisJbW92cQltbTMsbW00CisJbW92cQltbTUsbW0xCisJcGZhZGQJbW00LG1tMgkJCTsgbW00PWRhdGEzK2RhdGE0PXRtcDMKKwlwZmFkZAltbTEsbW0wCQkJOyBtbTE9ZGF0YTIrZGF0YTU9dG1wMgorCXBmc3ViCW1tMyxtbTIJCQk7IG1tMz1kYXRhMy1kYXRhND10bXA0CisJcGZzdWIJbW01LG1tMAkJCTsgbW01PWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tMixtbTcKKwltb3ZxCW1tMCxtbTYKKwlwZnN1YgltbTcsbW00CQkJOyBtbTc9dG1wMTMKKwlwZnN1YgltbTYsbW0xCQkJOyBtbTY9dG1wMTIKKwlwZmFkZAltbTIsbW00CQkJOyBtbTI9dG1wMTAKKwlwZmFkZAltbTAsbW0xCQkJOyBtbTA9dG1wMTEKKworCXBmYWRkCW1tNixtbTcKKwlwZm11bAltbTYsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IG1tNj16MQorCisJbW92cQltbTQsbW0yCisJbW92cQltbTEsbW03CisJcGZzdWIJbW0yLG1tMAkJCTsgbW0yPWRhdGE0CisJcGZzdWIJbW03LG1tNgkJCTsgbW03PWRhdGE2CisJcGZhZGQJbW00LG1tMAkJCTsgbW00PWRhdGEwCisJcGZhZGQJbW0xLG1tNgkJCTsgbW0xPWRhdGEyCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW03CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTAsIE1NV09SRCBbd2soMCldCTsgbW0wPXRtcDYKKwltb3ZxCW1tNiwgTU1XT1JEIFt3aygxKV0JOyBtbTY9dG1wNworCisJcGZhZGQJbW0zLG1tNQkJCTsgbW0zPXRtcDEwCisJcGZhZGQJbW01LG1tMAkJCTsgbW01PXRtcDExCisJcGZhZGQJbW0wLG1tNgkJCTsgbW0wPXRtcDEyLCBtbTY9dG1wNworCisJcGZtdWwJbW01LFtHT1RPRkYoZWJ4LFBEXzBfNzA3KV0gOyBtbTU9ejMKKworCW1vdnEJbW0yLG1tMwkJCTsgbW0yPXRtcDEwCisJcGZzdWIJbW0zLG1tMAorCXBmbXVsCW1tMyxbR09UT0ZGKGVieCxQRF8wXzM4MildIDsgbW0zPXo1CisJcGZtdWwJbW0yLFtHT1RPRkYoZWJ4LFBEXzBfNTQxKV0gOyBtbTI9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2MTApCisJcGZtdWwJbW0wLFtHT1RPRkYoZWJ4LFBEXzFfMzA2KV0gOyBtbTA9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyOTYpCisJcGZhZGQJbW0yLG1tMwkJCTsgbW0yPXoyCisJcGZhZGQJbW0wLG1tMwkJCTsgbW0wPXo0CisKKwltb3ZxCW1tNyxtbTYKKwlwZnN1YgltbTYsbW01CQkJOyBtbTY9ejEzCisJcGZhZGQJbW03LG1tNQkJCTsgbW03PXoxMQorCisJbW92cQltbTQsbW02CisJbW92cQltbTEsbW03CisJcGZzdWIJbW02LG1tMgkJCTsgbW02PWRhdGEzCisJcGZzdWIJbW03LG1tMAkJCTsgbW03PWRhdGE3CisJcGZhZGQJbW00LG1tMgkJCTsgbW00PWRhdGE1CisJcGZhZGQJbW0xLG1tMAkJCTsgbW0xPWRhdGExCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW03CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCisJYWRkCWVkeCwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKKwlkZWMJZWN4CisJam56CW5lYXIgLnJvd2xvb3AKKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKworCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRkFTVF9GTE9BVCAqKQorCW1vdgllY3gsIERDVFNJWkUvMgorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IG1tMD0oMDAgMTApLCBtbTE9KDAxIDExKSwgbW0yPSg2MCA3MCksIG1tMz0oNjEgNzEpCisKKwltb3ZxICAgICAgbW00LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisJcHVucGNrbGRxIG1tMCxtbTEJCTsgbW0wPSgwMCAwMSk9ZGF0YTAKKwlwdW5wY2toZHEgbW00LG1tMQkJOyBtbTQ9KDEwIDExKT1kYXRhMQorCW1vdnEgICAgICBtbTUsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKwlwdW5wY2tsZHEgbW0yLG1tMwkJOyBtbTI9KDYwIDYxKT1kYXRhNgorCXB1bnBja2hkcSBtbTUsbW0zCQk7IG1tNT0oNzAgNzEpPWRhdGE3CisKKwltb3ZxCW1tNixtbTQKKwltb3ZxCW1tNyxtbTAKKwlwZnN1YgltbTQsbW0yCQkJOyBtbTQ9ZGF0YTEtZGF0YTY9dG1wNgorCXBmc3ViCW1tMCxtbTUJCQk7IG1tMD1kYXRhMC1kYXRhNz10bXA3CisJcGZhZGQJbW02LG1tMgkJCTsgbW02PWRhdGExK2RhdGE2PXRtcDEKKwlwZmFkZAltbTcsbW01CQkJOyBtbTc9ZGF0YTArZGF0YTc9dG1wMAorCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCTsgbW0xPSgyMCAzMCksIG1tMz0oMjEgMzEpLCBtbTI9KDQwIDUwKSwgbW01PSg0MSA1MSkKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAk7IHdrKDApPXRtcDYKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTAJOyB3aygxKT10bXA3CisKKwltb3ZxICAgICAgbW00LG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisJcHVucGNrbGRxIG1tMSxtbTMJCTsgbW0xPSgyMCAyMSk9ZGF0YTIKKwlwdW5wY2toZHEgbW00LG1tMwkJOyBtbTQ9KDMwIDMxKT1kYXRhMworCW1vdnEgICAgICBtbTAsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKwlwdW5wY2tsZHEgbW0yLG1tNQkJOyBtbTI9KDQwIDQxKT1kYXRhNAorCXB1bnBja2hkcSBtbTAsbW01CQk7IG1tMD0oNTAgNTEpPWRhdGE1CisKKwltb3ZxCW1tMyxtbTQKKwltb3ZxCW1tNSxtbTEKKwlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9ZGF0YTMrZGF0YTQ9dG1wMworCXBmYWRkCW1tMSxtbTAJCQk7IG1tMT1kYXRhMitkYXRhNT10bXAyCisJcGZzdWIJbW0zLG1tMgkJCTsgbW0zPWRhdGEzLWRhdGE0PXRtcDQKKwlwZnN1YgltbTUsbW0wCQkJOyBtbTU9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEJbW0yLG1tNworCW1vdnEJbW0wLG1tNgorCXBmc3ViCW1tNyxtbTQJCQk7IG1tNz10bXAxMworCXBmc3ViCW1tNixtbTEJCQk7IG1tNj10bXAxMgorCXBmYWRkCW1tMixtbTQJCQk7IG1tMj10bXAxMAorCXBmYWRkCW1tMCxtbTEJCQk7IG1tMD10bXAxMQorCisJcGZhZGQJbW02LG1tNworCXBmbXVsCW1tNixbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgbW02PXoxCisKKwltb3ZxCW1tNCxtbTIKKwltb3ZxCW1tMSxtbTcKKwlwZnN1YgltbTIsbW0wCQkJOyBtbTI9ZGF0YTQKKwlwZnN1YgltbTcsbW02CQkJOyBtbTc9ZGF0YTYKKwlwZmFkZAltbTQsbW0wCQkJOyBtbTQ9ZGF0YTAKKwlwZmFkZAltbTEsbW02CQkJOyBtbTE9ZGF0YTIKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTcKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0xCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZxCW1tMCwgTU1XT1JEIFt3aygwKV0JOyBtbTA9dG1wNgorCW1vdnEJbW02LCBNTVdPUkQgW3drKDEpXQk7IG1tNj10bXA3CisKKwlwZmFkZAltbTMsbW01CQkJOyBtbTM9dG1wMTAKKwlwZmFkZAltbTUsbW0wCQkJOyBtbTU9dG1wMTEKKwlwZmFkZAltbTAsbW02CQkJOyBtbTA9dG1wMTIsIG1tNj10bXA3CisKKwlwZm11bAltbTUsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IG1tNT16MworCisJbW92cQltbTIsbW0zCQkJOyBtbTI9dG1wMTAKKwlwZnN1YgltbTMsbW0wCisJcGZtdWwJbW0zLFtHT1RPRkYoZWJ4LFBEXzBfMzgyKV0gOyBtbTM9ejUKKwlwZm11bAltbTIsW0dPVE9GRihlYngsUERfMF81NDEpXSA7IG1tMj1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYxMCkKKwlwZm11bAltbTAsW0dPVE9GRihlYngsUERfMV8zMDYpXSA7IG1tMD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjI5NikKKwlwZmFkZAltbTIsbW0zCQkJOyBtbTI9ejIKKwlwZmFkZAltbTAsbW0zCQkJOyBtbTA9ejQKKworCW1vdnEJbW03LG1tNgorCXBmc3ViCW1tNixtbTUJCQk7IG1tNj16MTMKKwlwZmFkZAltbTcsbW01CQkJOyBtbTc9ejExCisKKwltb3ZxCW1tNCxtbTYKKwltb3ZxCW1tMSxtbTcKKwlwZnN1YgltbTYsbW0yCQkJOyBtbTY9ZGF0YTMKKwlwZnN1YgltbTcsbW0wCQkJOyBtbTc9ZGF0YTcKKwlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9ZGF0YTUKKwlwZmFkZAltbTEsbW0wCQkJOyBtbTE9ZGF0YTEKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW02CisJbW92cQlNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTcKKwltb3ZxCU1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0xCisKKwlhZGQJZWR4LCBieXRlIDIqU0laRU9GX0ZBU1RfRkxPQVQKKwlkZWMJZWN4CisJam56CW5lYXIgLmNvbHVtbmxvb3AKKworCWZlbW1zCQk7IGVtcHR5IE1NWC8zRE5vdyEgc3RhdGUKKworOwlwb3AJZWRpCQk7IHVudXNlZAorOwlwb3AJZXNpCQk7IHVudXNlZAorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcHBpYwllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IEpGRENUX0ZMVF8zRE5PV19NTVhfU1VQUE9SVEVECislZW5kaWYgOyBEQ1RfRkxPQVRfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qZmRjdGZsdC5hc20gYi9qZmRjdGZsdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4ZTFmOQotLS0gL2Rldi9udWxsCisrKyBiL2pmZGN0Zmx0LmFzbQpAQCAtMCwwICsxLDI4OCBAQAorOworOyBqZmRjdGZsdC5hc20gLSBmbG9hdGluZy1wb2ludCBGRENUIChub24tU0lNRCkKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9yd2FyZCBEQ1QKKzsgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24KKzsgdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0Zmx0LmM7IHNlZSB0aGUgamZkY3RmbHQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBMYXN0IE1vZGlmaWVkIDogT2N0b2JlciAxNywgMjAwNAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCislZGVmaW5lIFJPVEFUT1JfVFlQRQlGUDMyCTsgZmxvYXQKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2Zsb2F0KQorCitFWFROKGpjb25zdF9mZGN0X2Zsb2F0KToKKworRl8wXzM4MglkZAkwLjM4MjY4MzQzMjM2NTA4OTc3MTcyODQ2MAk7IGNvcyhQSSozLzgpCitGXzBfNzA3CWRkCTAuNzA3MTA2NzgxMTg2NTQ3NTI0NDAwODQ0CTsgY29zKFBJKjEvNCkKK0ZfMF81NDEJZGQJMC41NDExOTYxMDAxNDYxOTY5ODQzOTk3MjMJOyBjb3MoUEkqMS84KS1jb3MoUEkqMy84KQorRl8xXzMwNglkZAkxLjMwNjU2Mjk2NDg3NjM3NjUyNzg1NjY0Mwk7IGNvcyhQSSoxLzgpK2NvcyhQSSozLzgpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19mZGN0X2Zsb2F0IChGQVNUX0ZMT0FUICogZGF0YSkKKzsKKworJWRlZmluZSBkYXRhKGIpCShiKSs4CQk7IEZBU1RfRkxPQVQgKiBkYXRhCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfZmRjdF9mbG9hdCkKKworRVhUTihqcGVnX2ZkY3RfZmxvYXQpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNocGljCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZXNpCQk7IHVudXNlZAorOwlwdXNoCWVkaQkJOyB1bnVzZWQKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYnApXQk7IChGQVNUX0ZMT0FUICopCisJbW92CWVjeCwgRENUU0laRQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlmbGQJRkFTVF9GTE9BVCBbUk9XKDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmYWRkCUZBU1RfRkxPQVQgW1JPVyg2LGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZmxkCUZBU1RfRkxPQVQgW1JPVygwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZmFkZAlGQVNUX0ZMT0FUIFtST1coNyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZsZAlGQVNUX0ZMT0FUIFtST1coMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZhZGQJRkFTVF9GTE9BVCBbUk9XKDQsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmbGQJRkFTVF9GTE9BVCBbUk9XKDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmYWRkCUZBU1RfRkxPQVQgW1JPVyg1LGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IC0tIEV2ZW4gcGFydAorCisJZmxkCXN0Mgk7IHN0MiA9IHN0MiArIHN0MSwgc3QxID0gc3QyIC0gc3QxCisJZnN1YglzdDAsc3QyCisJZnhjaAlzdDAsc3QyCisJZmFkZHAJc3QzLHN0MAorCWZsZAlzdDMJOyBzdDMgPSBzdDMgKyBzdDAsIHN0MCA9IHN0MyAtIHN0MAorCWZzdWIJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0MQorCWZhZGRwCXN0NCxzdDAKKworCWZhZGQJc3QwLHN0MQorCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMF83MDcpXQorCisJZmxkCXN0Mgk7IHN0MyA9IHN0MiArIHN0Mywgc3QyID0gc3QyIC0gc3QzCisJZnN1YglzdDAsc3Q0CisJZnhjaAlzdDAsc3QzCisJZmFkZHAJc3Q0LHN0MAorCWZsZAlzdDEJOyBzdDAgPSBzdDEgKyBzdDAsIHN0MSA9IHN0MSAtIHN0MAorCWZzdWIJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0MgorCWZhZGRwCXN0MSxzdDAKKworCWZsZAlGQVNUX0ZMT0FUIFtST1coMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZzdWIJRkFTVF9GTE9BVCBbUk9XKDcsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmeGNoCXN0MCxzdDQKKwlmbGQJRkFTVF9GTE9BVCBbUk9XKDMsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3ViCUZBU1RfRkxPQVQgW1JPVyg0LGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZnhjaAlzdDAsc3Q0CisJZmxkCUZBU1RfRkxPQVQgW1JPVygxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZnN1YglGQVNUX0ZMT0FUIFtST1coNixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZ4Y2gJc3QwLHN0NAorCWZsZAlGQVNUX0ZMT0FUIFtST1coMixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZzdWIJRkFTVF9GTE9BVCBbUk9XKDUsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmeGNoCXN0MCxzdDQKKworCWZzdHAJRkFTVF9GTE9BVCBbUk9XKDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3RwCUZBU1RfRkxPQVQgW1JPVyg2LGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZnN0cAlGQVNUX0ZMT0FUIFtST1coNCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZzdHAJRkFTVF9GTE9BVCBbUk9XKDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCTsgLS0gT2RkIHBhcnQKKworCWZhZGQJc3QyLHN0MAorCWZhZGQJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0MworCWZhZGQJc3QxLHN0MAorCWZ4Y2gJc3QwLHN0MworCisJZmxkCXN0MgorCWZ4Y2gJc3QwLHN0MQorCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMF83MDcpXQorCWZ4Y2gJc3QwLHN0MQorCWZzdWIJc3QwLHN0MgorCWZ4Y2gJc3QwLHN0MworCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMF81NDEpXQorCWZ4Y2gJc3QwLHN0MworCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMF8zODIpXQorCWZ4Y2gJc3QwLHN0MgorCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMV8zMDYpXQorCWZ4Y2gJc3QwLHN0MgorCWZhZGQJc3QzLHN0MAorCWZhZGRwCXN0MixzdDAKKworCWZsZAlzdDMJOyBzdDMgPSBzdDMgKyBzdDAsIHN0MCA9IHN0MyAtIHN0MAorCWZzdWIJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0MQorCWZhZGRwCXN0NCxzdDAKKworCWZsZAlzdDIJOyBzdDAgPSBzdDAgKyBzdDIsIHN0MiA9IHN0MCAtIHN0MgorCWZzdWJyCXN0MCxzdDEKKwlmeGNoCXN0MCxzdDMKKwlmYWRkcAlzdDEsc3QwCisJZmxkCXN0MQk7IHN0MyA9IHN0MyArIHN0MSwgc3QxID0gc3QzIC0gc3QxCisJZnN1YnIJc3QwLHN0NAorCWZ4Y2gJc3QwLHN0MgorCWZhZGRwCXN0NCxzdDAKKworCWZzdHAJRkFTVF9GTE9BVCBbUk9XKDUsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3RwCUZBU1RfRkxPQVQgW1JPVyg3LGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZnN0cAlGQVNUX0ZMT0FUIFtST1coMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZzdHAJRkFTVF9GTE9BVCBbUk9XKDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCWFkZAllZHgsIGJ5dGUgRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorCWRlYwllY3gJCQkJOyBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cKKwlqbnoJbmVhciAucm93bG9vcAorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYnApXQk7IChGQVNUX0ZMT0FUICopCisJbW92CWVjeCwgRENUU0laRQorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKwlmbGQJRkFTVF9GTE9BVCBbQ09MKDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmYWRkCUZBU1RfRkxPQVQgW0NPTCg2LGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZmxkCUZBU1RfRkxPQVQgW0NPTCgwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZmFkZAlGQVNUX0ZMT0FUIFtDT0woNyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZsZAlGQVNUX0ZMT0FUIFtDT0woMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZhZGQJRkFTVF9GTE9BVCBbQ09MKDQsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmbGQJRkFTVF9GTE9BVCBbQ09MKDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmYWRkCUZBU1RfRkxPQVQgW0NPTCg1LGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IC0tIEV2ZW4gcGFydAorCisJZmxkCXN0Mgk7IHN0MiA9IHN0MiArIHN0MSwgc3QxID0gc3QyIC0gc3QxCisJZnN1YglzdDAsc3QyCisJZnhjaAlzdDAsc3QyCisJZmFkZHAJc3QzLHN0MAorCWZsZAlzdDMJOyBzdDMgPSBzdDMgKyBzdDAsIHN0MCA9IHN0MyAtIHN0MAorCWZzdWIJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0MQorCWZhZGRwCXN0NCxzdDAKKworCWZhZGQJc3QwLHN0MQorCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMF83MDcpXQorCisJZmxkCXN0Mgk7IHN0MyA9IHN0MiArIHN0Mywgc3QyID0gc3QyIC0gc3QzCisJZnN1YglzdDAsc3Q0CisJZnhjaAlzdDAsc3QzCisJZmFkZHAJc3Q0LHN0MAorCWZsZAlzdDEJOyBzdDAgPSBzdDEgKyBzdDAsIHN0MSA9IHN0MSAtIHN0MAorCWZzdWIJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0MgorCWZhZGRwCXN0MSxzdDAKKworCWZsZAlGQVNUX0ZMT0FUIFtDT0woMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZzdWIJRkFTVF9GTE9BVCBbQ09MKDcsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmeGNoCXN0MCxzdDQKKwlmbGQJRkFTVF9GTE9BVCBbQ09MKDMsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3ViCUZBU1RfRkxPQVQgW0NPTCg0LGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZnhjaAlzdDAsc3Q0CisJZmxkCUZBU1RfRkxPQVQgW0NPTCgxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZnN1YglGQVNUX0ZMT0FUIFtDT0woNixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZ4Y2gJc3QwLHN0NAorCWZsZAlGQVNUX0ZMT0FUIFtDT0woMixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZzdWIJRkFTVF9GTE9BVCBbQ09MKDUsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmeGNoCXN0MCxzdDQKKworCWZzdHAJRkFTVF9GTE9BVCBbQ09MKDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3RwCUZBU1RfRkxPQVQgW0NPTCg2LGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZnN0cAlGQVNUX0ZMT0FUIFtDT0woNCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZzdHAJRkFTVF9GTE9BVCBbQ09MKDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCTsgLS0gT2RkIHBhcnQKKworCWZhZGQJc3QyLHN0MAorCWZhZGQJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0MworCWZhZGQJc3QxLHN0MAorCWZ4Y2gJc3QwLHN0MworCisJZmxkCXN0MgorCWZ4Y2gJc3QwLHN0MQorCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMF83MDcpXQorCWZ4Y2gJc3QwLHN0MQorCWZzdWIJc3QwLHN0MgorCWZ4Y2gJc3QwLHN0MworCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMF81NDEpXQorCWZ4Y2gJc3QwLHN0MworCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMF8zODIpXQorCWZ4Y2gJc3QwLHN0MgorCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMV8zMDYpXQorCWZ4Y2gJc3QwLHN0MgorCWZhZGQJc3QzLHN0MAorCWZhZGRwCXN0MixzdDAKKworCWZsZAlzdDMJOyBzdDMgPSBzdDMgKyBzdDAsIHN0MCA9IHN0MyAtIHN0MAorCWZzdWIJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0MQorCWZhZGRwCXN0NCxzdDAKKworCWZsZAlzdDIJOyBzdDAgPSBzdDAgKyBzdDIsIHN0MiA9IHN0MCAtIHN0MgorCWZzdWJyCXN0MCxzdDEKKwlmeGNoCXN0MCxzdDMKKwlmYWRkcAlzdDEsc3QwCisJZmxkCXN0MQk7IHN0MyA9IHN0MyArIHN0MSwgc3QxID0gc3QzIC0gc3QxCisJZnN1YnIJc3QwLHN0NAorCWZ4Y2gJc3QwLHN0MgorCWZhZGRwCXN0NCxzdDAKKworCWZzdHAJRkFTVF9GTE9BVCBbQ09MKDUsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3RwCUZBU1RfRkxPQVQgW0NPTCg3LGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZnN0cAlGQVNUX0ZMT0FUIFtDT0woMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZzdHAJRkFTVF9GTE9BVCBbQ09MKDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCWFkZAllZHgsIGJ5dGUgU0laRU9GX0ZBU1RfRkxPQVQgOyBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4KKwlkZWMJZWN4CisJam56CW5lYXIgLmNvbHVtbmxvb3AKKworOwlwb3AJZWRpCQk7IHVudXNlZAorOwlwb3AJZXNpCQk7IHVudXNlZAorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcHBpYwllYngKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IERDVF9GTE9BVF9TVVBQT1JURUQKZGlmZiAtLWdpdCBhL2pmZGN0ZnN0LmFzbSBiL2pmZGN0ZnN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzNjOTIwCi0tLSAvZGV2L251bGwKKysrIGIvamZkY3Rmc3QuYXNtCkBAIC0wLDAgKzEsMzAzIEBACis7Cis7IGpmZGN0ZnN0LmFzbSAtIGZhc3QgaW50ZWdlciBGRENUIChub24tU0lNRCkKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmYXN0LCBub3Qgc28gYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZgorOyB0aGUgZm9yd2FyZCBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQKKzsgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0ZnN0LmM7IHNlZSB0aGUgamZkY3Rmc3QuYyBmb3IKKzsgbW9yZSBkZXRhaWxzLgorOworOyBMYXN0IE1vZGlmaWVkIDogT2N0b2JlciAxNywgMjAwNAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOyBXZSBjYW4gZ2FpbiBhIGxpdHRsZSBtb3JlIHNwZWVkLCB3aXRoIGEgZnVydGhlciBjb21wcm9taXNlIGluIGFjY3VyYWN5LAorOyBieSBvbWl0dGluZyB0aGUgYWRkaXRpb24gaW4gYSBkZXNjYWxpbmcgc2hpZnQuICBUaGlzIHlpZWxkcyBhbgorOyBpbmNvcnJlY3RseSByb3VuZGVkIHJlc3VsdCBoYWxmIHRoZSB0aW1lLi4uCis7CislbWFjcm8JZGVzY2FsZSAyCislaWZkZWYgVVNFX0FDQ1VSQVRFX1JPVU5ESU5HCislaWYgKCUyKTw9NworCWFkZAklMSwgYnl0ZSAoMTw8KCglMiktMSkpCTsgYWRkIHJlZzMyLGltbTgKKyVlbHNlCisJYWRkCSUxLCAoMTw8KCglMiktMSkpCTsgYWRkIHJlZzMyLGltbTMyCislZW5kaWYKKyVlbmRpZgorCXNhcgklMSwlMgorJWVuZG1hY3JvCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTgKKworJWlmIENPTlNUX0JJVFMgPT0gOAorRl8wXzM4MgllcXUJIDk4CQk7IEZJWCgwLjM4MjY4MzQzMykKK0ZfMF81NDEJZXF1CTEzOQkJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3CWVxdQkxODEJCTsgRklYKDAuNzA3MTA2NzgxKQorRl8xXzMwNgllcXUJMzM0CQk7IEZJWCgxLjMwNjU2Mjk2NSkKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCitGXzBfMzgyCWVxdQlERVNDQUxFKCA0MTA5MDMyMDcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC4zODI2ODM0MzMpCitGXzBfNTQxCWVxdQlERVNDQUxFKCA1ODExMDQ4ODcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3CWVxdQlERVNDQUxFKCA3NTkyNTAxMjQsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43MDcxMDY3ODEpCitGXzFfMzA2CWVxdQlERVNDQUxFKDE0MDI5MTEzMDEsMzAtQ09OU1RfQklUUykJOyBGSVgoMS4zMDY1NjI5NjUpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19mZGN0X2lmYXN0IChEQ1RFTEVNICogZGF0YSkKKzsKKworJWRlZmluZSBkYXRhKGIpCShiKSs4CQk7IERDVEVMRU0gKiBkYXRhCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfZmRjdF9pZmFzdCkKKworRVhUTihqcGVnX2ZkY3RfaWZhc3QpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisJbW92CWVjeCwgRENUU0laRQorCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWJwKV0JOyAoRENURUxFTSAqKQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVjeAkJOyBjdHIKKwlwdXNoCWVkeAkJOyBkYXRhcHRyCisKKwltb3ZzeAllYXgsIERDVEVMRU0gW1JPVygwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92c3gJZWRpLCBEQ1RFTEVNIFtST1coNyxlZHgsU0laRU9GX0RDVEVMRU0pXQorCWxlYQllc2ksW2VheCtlZGldCTsgZXNpPXRtcDAKKwlzdWIJZWF4LGVkaQkJOyBlYXg9dG1wNworCXB1c2gJZWF4CisKKwltb3ZzeAllYngsIERDVEVMRU0gW1JPVygxLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92c3gJZWN4LCBEQ1RFTEVNIFtST1coNixlZHgsU0laRU9GX0RDVEVMRU0pXQorCWxlYQllZGksW2VieCtlY3hdCTsgZWRpPXRtcDEKKwlzdWIJZWJ4LGVjeAkJOyBlYng9dG1wNgorCXB1c2gJZWJ4CisKKwltb3ZzeAllYXgsIERDVEVMRU0gW1JPVygyLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92c3gJZWN4LCBEQ1RFTEVNIFtST1coNSxlZHgsU0laRU9GX0RDVEVMRU0pXQorCWxlYQllYngsW2VheCtlY3hdCTsgZWJ4PXRtcDIKKwlzdWIJZWF4LGVjeAkJOyBlYXg9dG1wNQorCXB1c2gJZWF4CisKKwltb3ZzeAllY3gsIERDVEVMRU0gW1JPVygzLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92c3gJZWF4LCBEQ1RFTEVNIFtST1coNCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCWxlYQllZHgsW2VjeCtlYXhdCTsgZWR4PXRtcDMKKwlzdWIJZWN4LGVheAkJOyBlY3g9dG1wNAorCXB1c2gJZWN4CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbGVhCWVheCxbZXNpK2VkeF0JOyBlYXg9dG1wMTAKKwlsZWEJZWN4LFtlZGkrZWJ4XQk7IGVjeD10bXAxMQorCXN1Ygllc2ksZWR4CQk7IGVzaT10bXAxMworCXN1YgllZGksZWJ4CQk7IGVkaT10bXAxMgorCisJbW92CWVkeCwgUE9JTlRFUiBbZXNwKzE2XQk7IGRhdGFwdHIKKworCWFkZAllZGksZXNpCisJaW11bAllZGksKEZfMF83MDcpCTsgZWRpPXoxCisJZGVzY2FsZQllZGksQ09OU1RfQklUUworCisJbGVhCWVieCxbZWF4K2VjeF0JOyBlYng9ZGF0YTAKKwlzdWIJZWF4LGVjeAkJOyBlYXg9ZGF0YTQKKwltb3YJRENURUxFTSBbUk9XKDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIGJ4CisJbW92CURDVEVMRU0gW1JPVyg0LGVkeCxTSVpFT0ZfRENURUxFTSldLCBheAorCisJbGVhCWVjeCxbZXNpK2VkaV0JOyBlY3g9ZGF0YTIKKwlzdWIJZXNpLGVkaQkJOyBlc2k9ZGF0YTYKKwltb3YJRENURUxFTSBbUk9XKDIsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIGN4CisJbW92CURDVEVMRU0gW1JPVyg2LGVkeCxTSVpFT0ZfRENURUxFTSldLCBzaQorCisJOyAtLSBPZGQgcGFydAorCisJcG9wCWVheAk7IGVheD10bXA0CisJcG9wCWVkeAk7IGVkeD10bXA1CisJcG9wCWVieAk7IGVieD10bXA2CisJcG9wCWVkaQk7IGVkaT10bXA3CisKKwlhZGQJZWF4LGVkeAkJOyBlYXg9dG1wMTAKKwlhZGQJZWR4LGVieAkJOyBlZHg9dG1wMTEKKwlhZGQJZWJ4LGVkaQkJOyBlYng9dG1wMTIsIGVkaT10bXA3CisKKwlpbXVsCWVkeCwoRl8wXzcwNykJOyBlZHg9ejMKKwlkZXNjYWxlCWVkeCxDT05TVF9CSVRTCisJbGVhCWVzaSxbZWRpK2VkeF0JOyBlc2k9ejExCisJc3ViCWVkaSxlZHgJCTsgZWRpPXoxMworCisJbW92CWVjeCxlYXgJCTsgZWN4PXRtcDEwCisJc3ViCWVheCxlYngKKwlpbXVsCWVheCwoRl8wXzM4MikJOyBlYXg9ejUKKwlpbXVsCWVjeCwoRl8wXzU0MSkJOyBlY3g9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2MTAwKQorCWltdWwJZWJ4LChGXzFfMzA2KQk7IGVieD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjI5NjUpCisJZGVzY2FsZQllYXgsQ09OU1RfQklUUworCWRlc2NhbGUJZWN4LENPTlNUX0JJVFMKKwlkZXNjYWxlCWVieCxDT05TVF9CSVRTCisJYWRkCWVjeCxlYXgJCTsgZWN4PXoyCisJYWRkCWVieCxlYXgJCTsgZWJ4PXo0CisKKwlwb3AJZWR4CQk7IGRhdGFwdHIKKworCWxlYQllYXgsW2VkaStlY3hdCTsgZWF4PWRhdGE1CisJc3ViCWVkaSxlY3gJCTsgZWRpPWRhdGEzCisJbW92CURDVEVMRU0gW1JPVyg1LGVkeCxTSVpFT0ZfRENURUxFTSldLCBheAorCW1vdglEQ1RFTEVNIFtST1coMyxlZHgsU0laRU9GX0RDVEVMRU0pXSwgZGkKKworCWxlYQllY3gsW2VzaStlYnhdCTsgZWN4PWRhdGExCisJc3ViCWVzaSxlYngJCTsgZXNpPWRhdGE3CisJbW92CURDVEVMRU0gW1JPVygxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBjeAorCW1vdglEQ1RFTEVNIFtST1coNyxlZHgsU0laRU9GX0RDVEVMRU0pXSwgc2kKKworCXBvcAllY3gJCTsgY3RyCisKKwlhZGQJZWR4LCBieXRlIERDVFNJWkUqU0laRU9GX0RDVEVMRU0KKwlkZWMJZWN4CQkJOyBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cKKwlqbnoJbmVhciAucm93bG9vcAorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisJbW92CWVjeCwgRENUU0laRQorCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWJwKV0JOyAoRENURUxFTSAqKQorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKwlwdXNoCWVjeAkJOyBjdHIKKwlwdXNoCWVkeAkJOyBkYXRhcHRyCisKKwltb3ZzeAllYXgsIERDVEVMRU0gW0NPTCgwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92c3gJZWRpLCBEQ1RFTEVNIFtDT0woNyxlZHgsU0laRU9GX0RDVEVMRU0pXQorCWxlYQllc2ksW2VheCtlZGldCTsgZXNpPXRtcDAKKwlzdWIJZWF4LGVkaQkJOyBlYXg9dG1wNworCXB1c2gJZWF4CisKKwltb3ZzeAllYngsIERDVEVMRU0gW0NPTCgxLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92c3gJZWN4LCBEQ1RFTEVNIFtDT0woNixlZHgsU0laRU9GX0RDVEVMRU0pXQorCWxlYQllZGksW2VieCtlY3hdCTsgZWRpPXRtcDEKKwlzdWIJZWJ4LGVjeAkJOyBlYng9dG1wNgorCXB1c2gJZWJ4CisKKwltb3ZzeAllYXgsIERDVEVMRU0gW0NPTCgyLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92c3gJZWN4LCBEQ1RFTEVNIFtDT0woNSxlZHgsU0laRU9GX0RDVEVMRU0pXQorCWxlYQllYngsW2VheCtlY3hdCTsgZWJ4PXRtcDIKKwlzdWIJZWF4LGVjeAkJOyBlYXg9dG1wNQorCXB1c2gJZWF4CisKKwltb3ZzeAllY3gsIERDVEVMRU0gW0NPTCgzLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92c3gJZWF4LCBEQ1RFTEVNIFtDT0woNCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCWxlYQllZHgsW2VjeCtlYXhdCTsgZWR4PXRtcDMKKwlzdWIJZWN4LGVheAkJOyBlY3g9dG1wNAorCXB1c2gJZWN4CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbGVhCWVheCxbZXNpK2VkeF0JOyBlYXg9dG1wMTAKKwlsZWEJZWN4LFtlZGkrZWJ4XQk7IGVjeD10bXAxMQorCXN1Ygllc2ksZWR4CQk7IGVzaT10bXAxMworCXN1YgllZGksZWJ4CQk7IGVkaT10bXAxMgorCisJbW92CWVkeCwgUE9JTlRFUiBbZXNwKzE2XQk7IGRhdGFwdHIKKworCWFkZAllZGksZXNpCisJaW11bAllZGksKEZfMF83MDcpCTsgZWRpPXoxCisJZGVzY2FsZQllZGksQ09OU1RfQklUUworCisJbGVhCWVieCxbZWF4K2VjeF0JOyBlYng9ZGF0YTAKKwlzdWIJZWF4LGVjeAkJOyBlYXg9ZGF0YTQKKwltb3YJRENURUxFTSBbQ09MKDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIGJ4CisJbW92CURDVEVMRU0gW0NPTCg0LGVkeCxTSVpFT0ZfRENURUxFTSldLCBheAorCisJbGVhCWVjeCxbZXNpK2VkaV0JOyBlY3g9ZGF0YTIKKwlzdWIJZXNpLGVkaQkJOyBlc2k9ZGF0YTYKKwltb3YJRENURUxFTSBbQ09MKDIsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIGN4CisJbW92CURDVEVMRU0gW0NPTCg2LGVkeCxTSVpFT0ZfRENURUxFTSldLCBzaQorCisJOyAtLSBPZGQgcGFydAorCisJcG9wCWVheAk7IGVheD10bXA0CisJcG9wCWVkeAk7IGVkeD10bXA1CisJcG9wCWVieAk7IGVieD10bXA2CisJcG9wCWVkaQk7IGVkaT10bXA3CisKKwlhZGQJZWF4LGVkeAkJOyBlYXg9dG1wMTAKKwlhZGQJZWR4LGVieAkJOyBlZHg9dG1wMTEKKwlhZGQJZWJ4LGVkaQkJOyBlYng9dG1wMTIsIGVkaT10bXA3CisKKwlpbXVsCWVkeCwoRl8wXzcwNykJOyBlZHg9ejMKKwlkZXNjYWxlCWVkeCxDT05TVF9CSVRTCisJbGVhCWVzaSxbZWRpK2VkeF0JOyBlc2k9ejExCisJc3ViCWVkaSxlZHgJCTsgZWRpPXoxMworCisJbW92CWVjeCxlYXgJCTsgZWN4PXRtcDEwCisJc3ViCWVheCxlYngKKwlpbXVsCWVheCwoRl8wXzM4MikJOyBlYXg9ejUKKwlpbXVsCWVjeCwoRl8wXzU0MSkJOyBlY3g9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2MTAwKQorCWltdWwJZWJ4LChGXzFfMzA2KQk7IGVieD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjI5NjUpCisJZGVzY2FsZQllYXgsQ09OU1RfQklUUworCWRlc2NhbGUJZWN4LENPTlNUX0JJVFMKKwlkZXNjYWxlCWVieCxDT05TVF9CSVRTCisJYWRkCWVjeCxlYXgJCTsgZWN4PXoyCisJYWRkCWVieCxlYXgJCTsgZWJ4PXo0CisKKwlwb3AJZWR4CQk7IGRhdGFwdHIKKworCWxlYQllYXgsW2VkaStlY3hdCTsgZWF4PWRhdGE1CisJc3ViCWVkaSxlY3gJCTsgZWRpPWRhdGEzCisJbW92CURDVEVMRU0gW0NPTCg1LGVkeCxTSVpFT0ZfRENURUxFTSldLCBheAorCW1vdglEQ1RFTEVNIFtDT0woMyxlZHgsU0laRU9GX0RDVEVMRU0pXSwgZGkKKworCWxlYQllY3gsW2VzaStlYnhdCTsgZWN4PWRhdGExCisJc3ViCWVzaSxlYngJCTsgZXNpPWRhdGE3CisJbW92CURDVEVMRU0gW0NPTCgxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBjeAorCW1vdglEQ1RFTEVNIFtDT0woNyxlZHgsU0laRU9GX0RDVEVMRU0pXSwgc2kKKworCXBvcAllY3gJCTsgY3RyCisKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9EQ1RFTEVNICAgIDsgYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uCisJZGVjCWVjeAorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IERDVF9JRkFTVF9TVVBQT1JURUQKZGlmZiAtLWdpdCBhL2pmZGN0aW50LmFzbSBiL2pmZGN0aW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjI5NzI1Ci0tLSAvZGV2L251bGwKKysrIGIvamZkY3RpbnQuYXNtCkBAIC0wLDAgKzEsMzQyIEBACis7Cis7IGpmZGN0aW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgRkRDVCAobm9uLVNJTUQpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2xvdy1idXQtYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKzsgZm9yd2FyZCBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQKKzsgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0aW50LmM7IHNlZSB0aGUgamZkY3RpbnQuYyBmb3IKKzsgbW9yZSBkZXRhaWxzLgorOworOyBMYXN0IE1vZGlmaWVkIDogT2N0b2JlciAxNywgMjAwNAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOyBEZXNjYWxlIGFuZCBjb3JyZWN0bHkgcm91bmQgYSBEV09SRCB2YWx1ZSB0aGF0J3Mgc2NhbGVkIGJ5IE4gYml0cy4KKzsKKyVtYWNybwlkZXNjYWxlIDIKKyVpZiAoJTIpPD03CisJYWRkCSUxLCBieXRlICgxPDwoKCUyKS0xKSkJOyBhZGQgcmVnMzIsaW1tOAorJWVsc2UKKwlhZGQJJTEsICgxPDwoKCUyKS0xKSkJOyBhZGQgcmVnMzIsaW1tMzIKKyVlbmRpZgorCXNhcgklMSwlMgorJWVuZG1hY3JvCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTEzCislZGVmaW5lIFBBU1MxX0JJVFMJMgorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzI5OAllcXUJIDI0NDYJCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJIDMxOTYJCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJIDQ0MzMJCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJIDk2MzMJCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJMTIyOTkJCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJMTYwNjkJCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJMTY4MTkJCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJMjUxNzIJCTsgRklYKDMuMDcyNzExMDI2KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMF8yOTgJZXF1CURFU0NBTEUoIDMyMDY1Mjk1NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAJZXF1CURFU0NBTEUoIDQxODk1MzI3NiwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEJZXF1CURFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUJZXF1CURFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkJZXF1CURFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUJZXF1CURFU0NBTEUoMTI2MjU4NjgxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEJZXF1CURFU0NBTEUoMTYxMjAzMTI2NywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEJZXF1CURFU0NBTEUoMjEwNjIyMDM1MCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMJZXF1CURFU0NBTEUoMjIwNDUyMDY3MywzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIJZXF1CURFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIJZXF1CURFU0NBTEUoMzI5OTI5ODM0MSwzMC1DT05TVF9CSVRTKQk7IEZJWCgzLjA3MjcxMTAyNikKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2ZkY3RfaXNsb3cgKERDVEVMRU0gKiBkYXRhKQorOworCislZGVmaW5lIGRhdGEoYikJKGIpKzgJCTsgRENURUxFTSAqIGRhdGEKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19mZGN0X2lzbG93KQorCitFWFROKGpwZWdfZmRjdF9pc2xvdyk6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVicCldCTsgKERDVEVMRU0gKikKKwltb3YJZWN4LCBEQ1RTSVpFCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCW1vdnN4CWVheCwgRENURUxFTSBbUk9XKDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZzeAllZGksIERDVEVMRU0gW1JPVyg3LGVkeCxTSVpFT0ZfRENURUxFTSldCisJbGVhCWVzaSxbZWF4K2VkaV0JOyBlc2k9dG1wMAorCXN1YgllYXgsZWRpCQk7IGVheD10bXA3CisJcHVzaAllY3gJCTsgY3RyCisJcHVzaAllYXgKKworCW1vdnN4CWVieCwgRENURUxFTSBbUk9XKDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZzeAllY3gsIERDVEVMRU0gW1JPVyg2LGVkeCxTSVpFT0ZfRENURUxFTSldCisJbGVhCWVkaSxbZWJ4K2VjeF0JOyBlZGk9dG1wMQorCXN1YgllYngsZWN4CQk7IGVieD10bXA2CisJcHVzaAllYngKKworCW1vdnN4CWVheCwgRENURUxFTSBbUk9XKDIsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZzeAllY3gsIERDVEVMRU0gW1JPVyg1LGVkeCxTSVpFT0ZfRENURUxFTSldCisJbGVhCWVieCxbZWF4K2VjeF0JOyBlYng9dG1wMgorCXN1YgllYXgsZWN4CQk7IGVheD10bXA1CisJcHVzaAllZHgJCTsgZGF0YXB0cgorCXB1c2gJZWF4CisKKwltb3ZzeAllY3gsIERDVEVMRU0gW1JPVygzLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92c3gJZWF4LCBEQ1RFTEVNIFtST1coNCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCWxlYQllZHgsW2VjeCtlYXhdCTsgZWR4PXRtcDMKKwlzdWIJZWN4LGVheAkJOyBlY3g9dG1wNAorCXB1c2gJZWN4CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbGVhCWVheCxbZXNpK2VkeF0JOyBlYXg9dG1wMTAKKwlsZWEJZWN4LFtlZGkrZWJ4XQk7IGVjeD10bXAxMQorCXN1Ygllc2ksZWR4CQk7IGVzaT10bXAxMworCXN1YgllZGksZWJ4CQk7IGVkaT10bXAxMgorCisJbGVhCWVieCxbZWF4K2VjeF0JOyBlYng9ZGF0YTAKKwlzdWIJZWF4LGVjeAkJOyBlYXg9ZGF0YTQKKwltb3YJZWR4LCBQT0lOVEVSIFtlc3ArOF0JOyBkYXRhcHRyCisJc2FsCWVieCwgUEFTUzFfQklUUworCXNhbAllYXgsIFBBU1MxX0JJVFMKKwltb3YJRENURUxFTSBbUk9XKDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIGJ4CisJbW92CURDVEVMRU0gW1JPVyg0LGVkeCxTSVpFT0ZfRENURUxFTSldLCBheAorCisJbGVhCWVjeCxbZWRpK2VzaV0KKwlpbXVsCWVjeCwoRl8wXzU0MSkJOyBlY3g9ejEKKwlpbXVsCWVzaSwoRl8wXzc2NSkJOyBlc2k9TVVMVElQTFkodG1wMTMsRklYXzBfNzY1MzY2ODY1KQorCWltdWwJZWRpLCgtRl8xXzg0NykJOyBlZGk9TVVMVElQTFkodG1wMTIsLUZJWF8xXzg0Nzc1OTA2NSkKKwlhZGQJZXNpLGVjeAkJOyBlc2k9ZGF0YTIKKwlhZGQJZWRpLGVjeAkJOyBlZGk9ZGF0YTYKKwlkZXNjYWxlCWVzaSwoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQorCWRlc2NhbGUJZWRpLChDT05TVF9CSVRTLVBBU1MxX0JJVFMpCisJbW92CURDVEVMRU0gW1JPVygyLGVkeCxTSVpFT0ZfRENURUxFTSldLCBzaQorCW1vdglEQ1RFTEVNIFtST1coNixlZHgsU0laRU9GX0RDVEVMRU0pXSwgZGkKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdgllYXgsIElOVDMyIFtlc3BdCTsgZWF4PXRtcDQKKwltb3YJZWJ4LCBJTlQzMiBbZXNwKzRdCTsgZWJ4PXRtcDUKKwltb3YJZWN4LCBJTlQzMiBbZXNwKzEyXQk7IGVjeD10bXA2CisJbW92CWVzaSwgSU5UMzIgW2VzcCsxNl0JOyBlc2k9dG1wNworCisJbGVhCWVkeCxbZWF4K2VjeF0JOyBlZHg9ejMKKwlsZWEJZWRpLFtlYngrZXNpXQk7IGVkaT16NAorCWFkZAllYXgsZXNpCQk7IGVheD16MQorCWFkZAllYngsZWN4CQk7IGVieD16MgorCisJbGVhCWVzaSxbZWR4K2VkaV0KKwlpbXVsCWVzaSwoRl8xXzE3NSkJOyBlc2k9ejUKKworCWltdWwJZWR4LCgtRl8xXzk2MSkJOyBlZHg9ejMoPU1VTFRJUExZKHozLC1GSVhfMV85NjE1NzA1NjApKQorCWltdWwJZWRpLCgtRl8wXzM5MCkJOyBlZGk9ejQoPU1VTFRJUExZKHo0LC1GSVhfMF8zOTAxODA2NDQpKQorCWltdWwJZWF4LCgtRl8wXzg5OSkJOyBlYXg9ejEoPU1VTFRJUExZKHoxLC1GSVhfMF84OTk5NzYyMjMpKQorCWltdWwJZWJ4LCgtRl8yXzU2MikJOyBlYng9ejIoPU1VTFRJUExZKHoyLC1GSVhfMl81NjI5MTU0NDcpKQorCisJYWRkCWVkeCxlc2kJCTsgZWR4PXozKD16Myt6NSkKKwlhZGQJZWRpLGVzaQkJOyBlZGk9ejQoPXo0K3o1KQorCisJbGVhCWVjeCxbZWF4K2VkeF0JOyBlY3g9ejErejMKKwlsZWEJZXNpLFtlYngrZWRpXQk7IGVzaT16Mit6NAorCWFkZAllYXgsZWRpCQk7IGVheD16MSt6NAorCWFkZAllYngsZWR4CQk7IGVieD16Mit6MworCisJcG9wCWVkeAkJOyBlZHg9dG1wNAorCXBvcAllZGkJCTsgZWRpPXRtcDUKKwlpbXVsCWVkeCwoRl8wXzI5OCkJOyBlZHg9dG1wNCg9TVVMVElQTFkodG1wNCxGSVhfMF8yOTg2MzEzMzYpKQorCWltdWwJZWRpLChGXzJfMDUzKQk7IGVkaT10bXA1KD1NVUxUSVBMWSh0bXA1LEZJWF8yXzA1MzExOTg2OSkpCisJYWRkCWVjeCxlZHgJCTsgZWN4PWRhdGE3KD10bXA0K3oxK3ozKQorCWFkZAllc2ksZWRpCQk7IGVzaT1kYXRhNSg9dG1wNSt6Mit6NCkKKwlwb3AJZWR4CQk7IGRhdGFwdHIKKwlkZXNjYWxlCWVjeCwoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQorCWRlc2NhbGUJZXNpLChDT05TVF9CSVRTLVBBU1MxX0JJVFMpCisJbW92CURDVEVMRU0gW1JPVyg3LGVkeCxTSVpFT0ZfRENURUxFTSldLCBjeAorCW1vdglEQ1RFTEVNIFtST1coNSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgc2kKKworCXBvcAllZGkJCTsgZWRpPXRtcDYKKwlwb3AJZWN4CQk7IGVjeD10bXA3CisJaW11bAllZGksKEZfM18wNzIpCTsgZWRpPXRtcDYoPU1VTFRJUExZKHRtcDYsRklYXzNfMDcyNzExMDI2KSkKKwlpbXVsCWVjeCwoRl8xXzUwMSkJOyBlY3g9dG1wNyg9TVVMVElQTFkodG1wNyxGSVhfMV81MDEzMjExMTApKQorCWFkZAllYngsZWRpCQk7IGVieD1kYXRhMyg9dG1wNit6Mit6MykKKwlhZGQJZWF4LGVjeAkJOyBlYXg9ZGF0YTEoPXRtcDcrejErejQpCisJcG9wCWVjeAkJOyBjdHIKKwlkZXNjYWxlCWVieCwoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQorCWRlc2NhbGUJZWF4LChDT05TVF9CSVRTLVBBU1MxX0JJVFMpCisJbW92CURDVEVMRU0gW1JPVygzLGVkeCxTSVpFT0ZfRENURUxFTSldLCBieAorCW1vdglEQ1RFTEVNIFtST1coMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgYXgKKworCWFkZAllZHgsIGJ5dGUgRENUU0laRSpTSVpFT0ZfRENURUxFTQorCWRlYwllY3gJCQk7IGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdworCWpuegluZWFyIC5yb3dsb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVicCldCTsgKERDVEVMRU0gKikKKwltb3YJZWN4LCBEQ1RTSVpFCisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorCW1vdnN4CWVheCwgRENURUxFTSBbQ09MKDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZzeAllZGksIERDVEVMRU0gW0NPTCg3LGVkeCxTSVpFT0ZfRENURUxFTSldCisJbGVhCWVzaSxbZWF4K2VkaV0JOyBlc2k9dG1wMAorCXN1YgllYXgsZWRpCQk7IGVheD10bXA3CisJcHVzaAllY3gJCTsgY3RyCisJcHVzaAllYXgKKworCW1vdnN4CWVieCwgRENURUxFTSBbQ09MKDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZzeAllY3gsIERDVEVMRU0gW0NPTCg2LGVkeCxTSVpFT0ZfRENURUxFTSldCisJbGVhCWVkaSxbZWJ4K2VjeF0JOyBlZGk9dG1wMQorCXN1YgllYngsZWN4CQk7IGVieD10bXA2CisJcHVzaAllYngKKworCW1vdnN4CWVheCwgRENURUxFTSBbQ09MKDIsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZzeAllY3gsIERDVEVMRU0gW0NPTCg1LGVkeCxTSVpFT0ZfRENURUxFTSldCisJbGVhCWVieCxbZWF4K2VjeF0JOyBlYng9dG1wMgorCXN1YgllYXgsZWN4CQk7IGVheD10bXA1CisJcHVzaAllZHgJCTsgZGF0YXB0cgorCXB1c2gJZWF4CisKKwltb3ZzeAllY3gsIERDVEVMRU0gW0NPTCgzLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92c3gJZWF4LCBEQ1RFTEVNIFtDT0woNCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCWxlYQllZHgsW2VjeCtlYXhdCTsgZWR4PXRtcDMKKwlzdWIJZWN4LGVheAkJOyBlY3g9dG1wNAorCXB1c2gJZWN4CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbGVhCWVheCxbZXNpK2VkeF0JOyBlYXg9dG1wMTAKKwlsZWEJZWN4LFtlZGkrZWJ4XQk7IGVjeD10bXAxMQorCXN1Ygllc2ksZWR4CQk7IGVzaT10bXAxMworCXN1YgllZGksZWJ4CQk7IGVkaT10bXAxMgorCisJbGVhCWVieCxbZWF4K2VjeF0JOyBlYng9ZGF0YTAKKwlzdWIJZWF4LGVjeAkJOyBlYXg9ZGF0YTQKKwltb3YJZWR4LCBQT0lOVEVSIFtlc3ArOF0JOyBkYXRhcHRyCisJZGVzY2FsZQllYngsIFBBU1MxX0JJVFMKKwlkZXNjYWxlCWVheCwgUEFTUzFfQklUUworCW1vdglEQ1RFTEVNIFtDT0woMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgYngKKwltb3YJRENURUxFTSBbQ09MKDQsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIGF4CisKKwlsZWEJZWN4LFtlZGkrZXNpXQorCWltdWwJZWN4LChGXzBfNTQxKQk7IGVjeD16MQorCWltdWwJZXNpLChGXzBfNzY1KQk7IGVzaT1NVUxUSVBMWSh0bXAxMyxGSVhfMF83NjUzNjY4NjUpCisJaW11bAllZGksKC1GXzFfODQ3KQk7IGVkaT1NVUxUSVBMWSh0bXAxMiwtRklYXzFfODQ3NzU5MDY1KQorCWFkZAllc2ksZWN4CQk7IGVzaT1kYXRhMgorCWFkZAllZGksZWN4CQk7IGVkaT1kYXRhNgorCWRlc2NhbGUJZXNpLChDT05TVF9CSVRTK1BBU1MxX0JJVFMpCisJZGVzY2FsZQllZGksKENPTlNUX0JJVFMrUEFTUzFfQklUUykKKwltb3YJRENURUxFTSBbQ09MKDIsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHNpCisJbW92CURDVEVMRU0gW0NPTCg2LGVkeCxTSVpFT0ZfRENURUxFTSldLCBkaQorCisJOyAtLSBPZGQgcGFydAorCisJbW92CWVheCwgSU5UMzIgW2VzcF0JOyBlYXg9dG1wNAorCW1vdgllYngsIElOVDMyIFtlc3ArNF0JOyBlYng9dG1wNQorCW1vdgllY3gsIElOVDMyIFtlc3ArMTJdCTsgZWN4PXRtcDYKKwltb3YJZXNpLCBJTlQzMiBbZXNwKzE2XQk7IGVzaT10bXA3CisKKwlsZWEJZWR4LFtlYXgrZWN4XQk7IGVkeD16MworCWxlYQllZGksW2VieCtlc2ldCTsgZWRpPXo0CisJYWRkCWVheCxlc2kJCTsgZWF4PXoxCisJYWRkCWVieCxlY3gJCTsgZWJ4PXoyCisKKwlsZWEJZXNpLFtlZHgrZWRpXQorCWltdWwJZXNpLChGXzFfMTc1KQk7IGVzaT16NQorCisJaW11bAllZHgsKC1GXzFfOTYxKQk7IGVkeD16Myg9TVVMVElQTFkoejMsLUZJWF8xXzk2MTU3MDU2MCkpCisJaW11bAllZGksKC1GXzBfMzkwKQk7IGVkaT16NCg9TVVMVElQTFkoejQsLUZJWF8wXzM5MDE4MDY0NCkpCisJaW11bAllYXgsKC1GXzBfODk5KQk7IGVheD16MSg9TVVMVElQTFkoejEsLUZJWF8wXzg5OTk3NjIyMykpCisJaW11bAllYngsKC1GXzJfNTYyKQk7IGVieD16Mig9TVVMVElQTFkoejIsLUZJWF8yXzU2MjkxNTQ0NykpCisKKwlhZGQJZWR4LGVzaQkJOyBlZHg9ejMoPXozK3o1KQorCWFkZAllZGksZXNpCQk7IGVkaT16NCg9ejQrejUpCisKKwlsZWEJZWN4LFtlYXgrZWR4XQk7IGVjeD16MSt6MworCWxlYQllc2ksW2VieCtlZGldCTsgZXNpPXoyK3o0CisJYWRkCWVheCxlZGkJCTsgZWF4PXoxK3o0CisJYWRkCWVieCxlZHgJCTsgZWJ4PXoyK3ozCisKKwlwb3AJZWR4CQk7IGVkeD10bXA0CisJcG9wCWVkaQkJOyBlZGk9dG1wNQorCWltdWwJZWR4LChGXzBfMjk4KQk7IGVkeD10bXA0KD1NVUxUSVBMWSh0bXA0LEZJWF8wXzI5ODYzMTMzNikpCisJaW11bAllZGksKEZfMl8wNTMpCTsgZWRpPXRtcDUoPU1VTFRJUExZKHRtcDUsRklYXzJfMDUzMTE5ODY5KSkKKwlhZGQJZWN4LGVkeAkJOyBlY3g9ZGF0YTcoPXRtcDQrejErejMpCisJYWRkCWVzaSxlZGkJCTsgZXNpPWRhdGE1KD10bXA1K3oyK3o0KQorCXBvcAllZHgJCTsgZGF0YXB0cgorCWRlc2NhbGUJZWN4LChDT05TVF9CSVRTK1BBU1MxX0JJVFMpCisJZGVzY2FsZQllc2ksKENPTlNUX0JJVFMrUEFTUzFfQklUUykKKwltb3YJRENURUxFTSBbQ09MKDcsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIGN4CisJbW92CURDVEVMRU0gW0NPTCg1LGVkeCxTSVpFT0ZfRENURUxFTSldLCBzaQorCisJcG9wCWVkaQkJOyBlZGk9dG1wNgorCXBvcAllY3gJCTsgZWN4PXRtcDcKKwlpbXVsCWVkaSwoRl8zXzA3MikJOyBlZGk9dG1wNig9TVVMVElQTFkodG1wNixGSVhfM18wNzI3MTEwMjYpKQorCWltdWwJZWN4LChGXzFfNTAxKQk7IGVjeD10bXA3KD1NVUxUSVBMWSh0bXA3LEZJWF8xXzUwMTMyMTExMCkpCisJYWRkCWVieCxlZGkJCTsgZWJ4PWRhdGEzKD10bXA2K3oyK3ozKQorCWFkZAllYXgsZWN4CQk7IGVheD1kYXRhMSg9dG1wNyt6MSt6NCkKKwlwb3AJZWN4CQk7IGN0cgorCWRlc2NhbGUJZWJ4LChDT05TVF9CSVRTK1BBU1MxX0JJVFMpCisJZGVzY2FsZQllYXgsKENPTlNUX0JJVFMrUEFTUzFfQklUUykKKwltb3YJRENURUxFTSBbQ09MKDMsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIGJ4CisJbW92CURDVEVMRU0gW0NPTCgxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBheAorCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfRENURUxFTSAgICA7IGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbgorCWRlYwllY3gKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcG9wCWVicAorCXJldAorCislZW5kaWYgOyBEQ1RfSVNMT1dfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qZm1teGZzdC5hc20gYi9qZm1teGZzdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4ZDUzZgotLS0gL2Rldi9udWxsCisrKyBiL2pmbW14ZnN0LmFzbQpAQCAtMCwwICsxLDQwNCBAQAorOworOyBqZm1teGZzdC5hc20gLSBmYXN0IGludGVnZXIgRkRDVCAoTU1YKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mCis7IHRoZSBmb3J3YXJkIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcworOyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamZkY3Rmc3QuYzsgc2VlIHRoZSBqZmRjdGZzdC5jCis7IGZvciBtb3JlIGRldGFpbHMuCis7Cis7IExhc3QgTW9kaWZpZWQgOiBGZWJydWFyeSA0LCAyMDA2Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCislaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorJWlmZGVmIEpGRENUX0lOVF9NTVhfU1VQUE9SVEVECisKKzsgVGhpcyBtb2R1bGUgaXMgc3BlY2lhbGl6ZWQgdG8gdGhlIGNhc2UgRENUU0laRSA9IDguCis7CislaWYgRENUU0laRSAhPSA4CislZXJyb3IgIlNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiIKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgQ09OU1RfQklUUwk4CTsgMTQgaXMgYWxzbyBPSy4KKworJWlmIENPTlNUX0JJVFMgPT0gOAorRl8wXzM4MgllcXUJIDk4CQk7IEZJWCgwLjM4MjY4MzQzMykKK0ZfMF81NDEJZXF1CTEzOQkJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3CWVxdQkxODEJCTsgRklYKDAuNzA3MTA2NzgxKQorRl8xXzMwNgllcXUJMzM0CQk7IEZJWCgxLjMwNjU2Mjk2NSkKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCitGXzBfMzgyCWVxdQlERVNDQUxFKCA0MTA5MDMyMDcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC4zODI2ODM0MzMpCitGXzBfNTQxCWVxdQlERVNDQUxFKCA1ODExMDQ4ODcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3CWVxdQlERVNDQUxFKCA3NTkyNTAxMjQsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43MDcxMDY3ODEpCitGXzFfMzA2CWVxdQlERVNDQUxFKDE0MDI5MTEzMDEsMzAtQ09OU1RfQklUUykJOyBGSVgoMS4zMDY1NjI5NjUpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKzsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPD0gMiAodG8gYXZvaWQgb3ZlcmZsb3cpCis7IENPTlNUX0JJVFMgKyBDT05TVF9TSElGVCArIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTID09IDE2IChmb3IgcG11bGh3KQorCislZGVmaW5lIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTICAgMgorJWRlZmluZSBDT05TVF9TSElGVCAgICAgKDE2IC0gUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgLSBDT05TVF9CSVRTKQorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2ZkY3RfaWZhc3RfbW14KQorCitFWFROKGpjb25zdF9mZGN0X2lmYXN0X21teCk6CisKK1BXX0YwNzA3CXRpbWVzIDQgZHcgIEZfMF83MDcgPDwgQ09OU1RfU0hJRlQKK1BXX0YwMzgyCXRpbWVzIDQgZHcgIEZfMF8zODIgPDwgQ09OU1RfU0hJRlQKK1BXX0YwNTQxCXRpbWVzIDQgZHcgIEZfMF81NDEgPDwgQ09OU1RfU0hJRlQKK1BXX0YxMzA2CXRpbWVzIDQgZHcgIEZfMV8zMDYgPDwgQ09OU1RfU0hJRlQKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2ZkY3RfaWZhc3RfbW14IChEQ1RFTEVNICogZGF0YSkKKzsKKworJWRlZmluZSBkYXRhKGIpCQkoYikrOAkJOyBEQ1RFTEVNICogZGF0YQorCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JECTsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfZmRjdF9pZmFzdF9tbXgpCisKK0VYVE4oanBlZ19mZGN0X2lmYXN0X21teCk6CisJcHVzaAllYnAKKwltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAorCXN1Ygllc3AsIGJ5dGUgNAorCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKQk7IGFsaWduIHRvIDY0IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3aygwKV0KKwlwdXNocGljCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZXNpCQk7IHVudXNlZAorOwlwdXNoCWVkaQkJOyB1bnVzZWQKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChEQ1RFTEVNICopCisJbW92CWVjeCwgRENUU0laRS80CisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soMiwxLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSygzLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworCTsgbW0wPSgyMCAyMSAyMiAyMyksIG1tMj0oMjQgMjUgMjYgMjcpCisJOyBtbTE9KDMwIDMxIDMyIDMzKSwgbW0zPSgzNCAzNSAzNiAzNykKKworCW1vdnEgICAgICBtbTQsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0wLG1tMQkJOyBtbTA9KDIwIDMwIDIxIDMxKQorCXB1bnBja2h3ZCBtbTQsbW0xCQk7IG1tND0oMjIgMzIgMjMgMzMpCisJbW92cSAgICAgIG1tNSxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTIsbW0zCQk7IG1tMj0oMjQgMzQgMjUgMzUpCisJcHVucGNraHdkIG1tNSxtbTMJCTsgbW01PSgyNiAzNiAyNyAzNykKKworCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTcsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRENURUxFTSldCisKKwk7IG1tNj0oMDAgMDEgMDIgMDMpLCBtbTE9KDA0IDA1IDA2IDA3KQorCTsgbW03PSgxMCAxMSAxMiAxMyksIG1tMz0oMTQgMTUgMTYgMTcpCisKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT0oMjIgMzIgMjMgMzMpCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCTsgd2soMSk9KDI0IDM0IDI1IDM1KQorCisJbW92cSAgICAgIG1tNCxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTYsbW03CQk7IG1tNj0oMDAgMTAgMDEgMTEpCisJcHVucGNraHdkIG1tNCxtbTcJCTsgbW00PSgwMiAxMiAwMyAxMykKKwltb3ZxICAgICAgbW0yLG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tMSxtbTMJCTsgbW0xPSgwNCAxNCAwNSAxNSkKKwlwdW5wY2tod2QgbW0yLG1tMwkJOyBtbTI9KDA2IDE2IDA3IDE3KQorCisJbW92cSAgICAgIG1tNyxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTYsbW0wCQk7IG1tNj0oMDAgMTAgMjAgMzApPWRhdGEwCisJcHVucGNraGRxIG1tNyxtbTAJCTsgbW03PSgwMSAxMSAyMSAzMSk9ZGF0YTEKKwltb3ZxICAgICAgbW0zLG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tMixtbTUJCTsgbW0yPSgwNiAxNiAyNiAzNik9ZGF0YTYKKwlwdW5wY2toZHEgbW0zLG1tNQkJOyBtbTM9KDA3IDE3IDI3IDM3KT1kYXRhNworCisJbW92cQltbTAsbW03CisJbW92cQltbTUsbW02CisJcHN1YncJbW03LG1tMgkJCTsgbW03PWRhdGExLWRhdGE2PXRtcDYKKwlwc3VidwltbTYsbW0zCQkJOyBtbTY9ZGF0YTAtZGF0YTc9dG1wNworCXBhZGR3CW1tMCxtbTIJCQk7IG1tMD1kYXRhMStkYXRhNj10bXAxCisJcGFkZHcJbW01LG1tMwkJCTsgbW01PWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdnEJbW0yLCBNTVdPUkQgW3drKDApXQk7IG1tMj0oMjIgMzIgMjMgMzMpCisJbW92cQltbTMsIE1NV09SRCBbd2soMSldCTsgbW0zPSgyNCAzNCAyNSAzNSkKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTcJOyB3aygwKT10bXA2CisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW02CTsgd2soMSk9dG1wNworCisJbW92cSAgICAgIG1tNyxtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTQsbW0yCQk7IG1tND0oMDIgMTIgMjIgMzIpPWRhdGEyCisJcHVucGNraGRxIG1tNyxtbTIJCTsgbW03PSgwMyAxMyAyMyAzMyk9ZGF0YTMKKwltb3ZxICAgICAgbW02LG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tMSxtbTMJCTsgbW0xPSgwNCAxNCAyNCAzNCk9ZGF0YTQKKwlwdW5wY2toZHEgbW02LG1tMwkJOyBtbTY9KDA1IDE1IDI1IDM1KT1kYXRhNQorCisJbW92cQltbTIsbW03CisJbW92cQltbTMsbW00CisJcGFkZHcJbW03LG1tMQkJCTsgbW03PWRhdGEzK2RhdGE0PXRtcDMKKwlwYWRkdwltbTQsbW02CQkJOyBtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorCXBzdWJ3CW1tMixtbTEJCQk7IG1tMj1kYXRhMy1kYXRhND10bXA0CisJcHN1YncJbW0zLG1tNgkJCTsgbW0zPWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tMSxtbTUKKwltb3ZxCW1tNixtbTAKKwlwc3VidwltbTUsbW03CQkJOyBtbTU9dG1wMTMKKwlwc3VidwltbTAsbW00CQkJOyBtbTA9dG1wMTIKKwlwYWRkdwltbTEsbW03CQkJOyBtbTE9dG1wMTAKKwlwYWRkdwltbTYsbW00CQkJOyBtbTY9dG1wMTEKKworCXBhZGR3CW1tMCxtbTUKKwlwc2xsdwltbTAsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJbW0wLFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyBtbTA9ejEKKworCW1vdnEJbW03LG1tMQorCW1vdnEJbW00LG1tNQorCXBzdWJ3CW1tMSxtbTYJCQk7IG1tMT1kYXRhNAorCXBzdWJ3CW1tNSxtbTAJCQk7IG1tNT1kYXRhNgorCXBhZGR3CW1tNyxtbTYJCQk7IG1tNz1kYXRhMAorCXBhZGR3CW1tNCxtbTAJCQk7IG1tND1kYXRhMgorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdnEJbW02LCBNTVdPUkQgW3drKDApXQk7IG1tNj10bXA2CisJbW92cQltbTAsIE1NV09SRCBbd2soMSldCTsgbW0wPXRtcDcKKworCXBhZGR3CW1tMixtbTMJCQk7IG1tMj10bXAxMAorCXBhZGR3CW1tMyxtbTYJCQk7IG1tMz10bXAxMQorCXBhZGR3CW1tNixtbTAJCQk7IG1tNj10bXAxMiwgbW0wPXRtcDcKKworCXBzbGx3CW1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBzbGx3CW1tNixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisJcHNsbHcJbW0zLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CW1tMyxbR09UT0ZGKGVieCxQV19GMDcwNyldIDsgbW0zPXozCisKKwltb3ZxCW1tMSxtbTIJCQk7IG1tMT10bXAxMAorCXBzdWJ3CW1tMixtbTYKKwlwbXVsaHcJbW0yLFtHT1RPRkYoZWJ4LFBXX0YwMzgyKV0gOyBtbTI9ejUKKwlwbXVsaHcJbW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTQxKV0gOyBtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2MTApCisJcG11bGh3CW1tNixbR09UT0ZGKGVieCxQV19GMTMwNildIDsgbW02PU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2Mjk2KQorCXBhZGR3CW1tMSxtbTIJCQk7IG1tMT16MgorCXBhZGR3CW1tNixtbTIJCQk7IG1tNj16NAorCisJbW92cQltbTUsbW0wCisJcHN1YncJbW0wLG1tMwkJCTsgbW0wPXoxMworCXBhZGR3CW1tNSxtbTMJCQk7IG1tNT16MTEKKworCW1vdnEJbW03LG1tMAorCW1vdnEJbW00LG1tNQorCXBzdWJ3CW1tMCxtbTEJCQk7IG1tMD1kYXRhMworCXBzdWJ3CW1tNSxtbTYJCQk7IG1tNT1kYXRhNworCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz1kYXRhNQorCXBhZGR3CW1tNCxtbTYJCQk7IG1tND1kYXRhMQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKworCWFkZAllZHgsIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9EQ1RFTEVNCisJZGVjCWVjeAorCWpuegluZWFyIC5yb3dsb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKERDVEVMRU0gKikKKwltb3YJZWN4LCBEQ1RTSVpFLzQKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisJOyBtbTA9KDAyIDEyIDIyIDMyKSwgbW0yPSg0MiA1MiA2MiA3MikKKwk7IG1tMT0oMDMgMTMgMjMgMzMpLCBtbTM9KDQzIDUzIDYzIDczKQorCisJbW92cSAgICAgIG1tNCxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTAsbW0xCQk7IG1tMD0oMDIgMDMgMTIgMTMpCisJcHVucGNraHdkIG1tNCxtbTEJCTsgbW00PSgyMiAyMyAzMiAzMykKKwltb3ZxICAgICAgbW01LG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tMixtbTMJCTsgbW0yPSg0MiA0MyA1MiA1MykKKwlwdW5wY2tod2QgbW01LG1tMwkJOyBtbTU9KDYyIDYzIDcyIDczKQorCisJbW92cQltbTYsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tNywgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworCTsgbW02PSgwMCAxMCAyMCAzMCksIG1tMT0oNDAgNTAgNjAgNzApCisJOyBtbTc9KDAxIDExIDIxIDMxKSwgbW0zPSg0MSA1MSA2MSA3MSkKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAk7IHdrKDApPSgyMiAyMyAzMiAzMykKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTIJOyB3aygxKT0oNDIgNDMgNTIgNTMpCisKKwltb3ZxICAgICAgbW00LG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tNixtbTcJCTsgbW02PSgwMCAwMSAxMCAxMSkKKwlwdW5wY2tod2QgbW00LG1tNwkJOyBtbTQ9KDIwIDIxIDMwIDMxKQorCW1vdnEgICAgICBtbTIsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0xLG1tMwkJOyBtbTE9KDQwIDQxIDUwIDUxKQorCXB1bnBja2h3ZCBtbTIsbW0zCQk7IG1tMj0oNjAgNjEgNzAgNzEpCisKKwltb3ZxICAgICAgbW03LG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tNixtbTAJCTsgbW02PSgwMCAwMSAwMiAwMyk9ZGF0YTAKKwlwdW5wY2toZHEgbW03LG1tMAkJOyBtbTc9KDEwIDExIDEyIDEzKT1kYXRhMQorCW1vdnEgICAgICBtbTMsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0yLG1tNQkJOyBtbTI9KDYwIDYxIDYyIDYzKT1kYXRhNgorCXB1bnBja2hkcSBtbTMsbW01CQk7IG1tMz0oNzAgNzEgNzIgNzMpPWRhdGE3CisKKwltb3ZxCW1tMCxtbTcKKwltb3ZxCW1tNSxtbTYKKwlwc3VidwltbTcsbW0yCQkJOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgorCXBzdWJ3CW1tNixtbTMJCQk7IG1tNj1kYXRhMC1kYXRhNz10bXA3CisJcGFkZHcJbW0wLG1tMgkJCTsgbW0wPWRhdGExK2RhdGE2PXRtcDEKKwlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAorCisJbW92cQltbTIsIE1NV09SRCBbd2soMCldCTsgbW0yPSgyMiAyMyAzMiAzMykKKwltb3ZxCW1tMywgTU1XT1JEIFt3aygxKV0JOyBtbTM9KDQyIDQzIDUyIDUzKQorCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNwk7IHdrKDApPXRtcDYKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTYJOyB3aygxKT10bXA3CisKKwltb3ZxICAgICAgbW03LG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tNCxtbTIJCTsgbW00PSgyMCAyMSAyMiAyMyk9ZGF0YTIKKwlwdW5wY2toZHEgbW03LG1tMgkJOyBtbTc9KDMwIDMxIDMyIDMzKT1kYXRhMworCW1vdnEgICAgICBtbTYsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0xLG1tMwkJOyBtbTE9KDQwIDQxIDQyIDQzKT1kYXRhNAorCXB1bnBja2hkcSBtbTYsbW0zCQk7IG1tNj0oNTAgNTEgNTIgNTMpPWRhdGE1CisKKwltb3ZxCW1tMixtbTcKKwltb3ZxCW1tMyxtbTQKKwlwYWRkdwltbTcsbW0xCQkJOyBtbTc9ZGF0YTMrZGF0YTQ9dG1wMworCXBhZGR3CW1tNCxtbTYJCQk7IG1tND1kYXRhMitkYXRhNT10bXAyCisJcHN1YncJbW0yLG1tMQkJCTsgbW0yPWRhdGEzLWRhdGE0PXRtcDQKKwlwc3VidwltbTMsbW02CQkJOyBtbTM9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEJbW0xLG1tNQorCW1vdnEJbW02LG1tMAorCXBzdWJ3CW1tNSxtbTcJCQk7IG1tNT10bXAxMworCXBzdWJ3CW1tMCxtbTQJCQk7IG1tMD10bXAxMgorCXBhZGR3CW1tMSxtbTcJCQk7IG1tMT10bXAxMAorCXBhZGR3CW1tNixtbTQJCQk7IG1tNj10bXAxMQorCisJcGFkZHcJbW0wLG1tNQorCXBzbGx3CW1tMCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwltbTAsW0dPVE9GRihlYngsUFdfRjA3MDcpXSA7IG1tMD16MQorCisJbW92cQltbTcsbW0xCisJbW92cQltbTQsbW01CisJcHN1YncJbW0xLG1tNgkJCTsgbW0xPWRhdGE0CisJcHN1YncJbW01LG1tMAkJCTsgbW01PWRhdGE2CisJcGFkZHcJbW03LG1tNgkJCTsgbW03PWRhdGEwCisJcGFkZHcJbW00LG1tMAkJCTsgbW00PWRhdGEyCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTcKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTYsIE1NV09SRCBbd2soMCldCTsgbW02PXRtcDYKKwltb3ZxCW1tMCwgTU1XT1JEIFt3aygxKV0JOyBtbTA9dG1wNworCisJcGFkZHcJbW0yLG1tMwkJCTsgbW0yPXRtcDEwCisJcGFkZHcJbW0zLG1tNgkJCTsgbW0zPXRtcDExCisJcGFkZHcJbW02LG1tMAkJCTsgbW02PXRtcDEyLCBtbTA9dG1wNworCisJcHNsbHcJbW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcHNsbHcJbW02LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKwlwc2xsdwltbTMsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJbW0zLFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyBtbTM9ejMKKworCW1vdnEJbW0xLG1tMgkJCTsgbW0xPXRtcDEwCisJcHN1YncJbW0yLG1tNgorCXBtdWxodwltbTIsW0dPVE9GRihlYngsUFdfRjAzODIpXSA7IG1tMj16NQorCXBtdWxodwltbTEsW0dPVE9GRihlYngsUFdfRjA1NDEpXSA7IG1tMT1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYxMCkKKwlwbXVsaHcJbW02LFtHT1RPRkYoZWJ4LFBXX0YxMzA2KV0gOyBtbTY9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyOTYpCisJcGFkZHcJbW0xLG1tMgkJCTsgbW0xPXoyCisJcGFkZHcJbW02LG1tMgkJCTsgbW02PXo0CisKKwltb3ZxCW1tNSxtbTAKKwlwc3VidwltbTAsbW0zCQkJOyBtbTA9ejEzCisJcGFkZHcJbW01LG1tMwkJCTsgbW01PXoxMQorCisJbW92cQltbTcsbW0wCisJbW92cQltbTQsbW01CisJcHN1YncJbW0wLG1tMQkJCTsgbW0wPWRhdGEzCisJcHN1YncJbW01LG1tNgkJCTsgbW01PWRhdGE3CisJcGFkZHcJbW03LG1tMQkJCTsgbW03PWRhdGE1CisJcGFkZHcJbW00LG1tNgkJCTsgbW00PWRhdGExCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01CisJbW92cQlNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTcKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAorCisJYWRkCWVkeCwgYnl0ZSA0KlNJWkVPRl9EQ1RFTEVNCisJZGVjCWVjeAorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCis7CXBvcAllZGkJCTsgdW51c2VkCis7CXBvcAllc2kJCTsgdW51c2VkCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wcGljCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSkZEQ1RfSU5UX01NWF9TVVBQT1JURUQKKyVlbmRpZiA7IERDVF9JRkFTVF9TVVBQT1JURUQKZGlmZiAtLWdpdCBhL2pmbW14aW50LmFzbSBiL2pmbW14aW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmU0N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvamZtbXhpbnQuYXNtCkBAIC0wLDAgKzEsNjI5IEBACis7Cis7IGpmbW14aW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgRkRDVCAoTU1YKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGludC5jOyBzZWUgdGhlIGpmZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgTGFzdCBNb2RpZmllZCA6IEZlYnJ1YXJ5IDQsIDIwMDYKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKyVpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECislaWZkZWYgSkZEQ1RfSU5UX01NWF9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTEzCislZGVmaW5lIFBBU1MxX0JJVFMJMgorCislZGVmaW5lIERFU0NBTEVfUDEJKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMgkoQ09OU1RfQklUUytQQVNTMV9CSVRTKQorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzI5OAllcXUJIDI0NDYJCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJIDMxOTYJCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJIDQ0MzMJCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJIDk2MzMJCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJMTIyOTkJCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJMTYwNjkJCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJMTY4MTkJCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJMjUxNzIJCTsgRklYKDMuMDcyNzExMDI2KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMF8yOTgJZXF1CURFU0NBTEUoIDMyMDY1Mjk1NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAJZXF1CURFU0NBTEUoIDQxODk1MzI3NiwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEJZXF1CURFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUJZXF1CURFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkJZXF1CURFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUJZXF1CURFU0NBTEUoMTI2MjU4NjgxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEJZXF1CURFU0NBTEUoMTYxMjAzMTI2NywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEJZXF1CURFU0NBTEUoMjEwNjIyMDM1MCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMJZXF1CURFU0NBTEUoMjIwNDUyMDY3MywzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIJZXF1CURFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIJZXF1CURFU0NBTEUoMzI5OTI5ODM0MSwzMC1DT05TVF9CSVRTKQk7IEZJWCgzLjA3MjcxMTAyNikKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2lzbG93X21teCkKKworRVhUTihqY29uc3RfZmRjdF9pc2xvd19tbXgpOgorCitQV19GMTMwX0YwNTQJdGltZXMgMiBkdyAgKEZfMF81NDErRl8wXzc2NSksIEZfMF81NDEKK1BXX0YwNTRfTUYxMzAJdGltZXMgMiBkdyAgRl8wXzU0MSwgKEZfMF81NDEtRl8xXzg0NykKK1BXX01GMDc4X0YxMTcJdGltZXMgMiBkdyAgKEZfMV8xNzUtRl8xXzk2MSksIEZfMV8xNzUKK1BXX0YxMTdfRjA3OAl0aW1lcyAyIGR3ICBGXzFfMTc1LCAoRl8xXzE3NS1GXzBfMzkwKQorUFdfTUYwNjBfTUYwODkJdGltZXMgMiBkdyAgKEZfMF8yOTgtRl8wXzg5OSksLUZfMF84OTkKK1BXX01GMDg5X0YwNjAJdGltZXMgMiBkdyAtRl8wXzg5OSwgKEZfMV81MDEtRl8wXzg5OSkKK1BXX01GMDUwX01GMjU2CXRpbWVzIDIgZHcgIChGXzJfMDUzLUZfMl81NjIpLC1GXzJfNTYyCitQV19NRjI1Nl9GMDUwCXRpbWVzIDIgZHcgLUZfMl81NjIsIChGXzNfMDcyLUZfMl81NjIpCitQRF9ERVNDQUxFX1AxCXRpbWVzIDIgZGQgIDEgPDwgKERFU0NBTEVfUDEtMSkKK1BEX0RFU0NBTEVfUDIJdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMi0xKQorUFdfREVTQ0FMRV9QMlgJdGltZXMgNCBkdyAgMSA8PCAoUEFTUzFfQklUUy0xKQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfZmRjdF9pc2xvd19tbXggKERDVEVMRU0gKiBkYXRhKQorOworCislZGVmaW5lIGRhdGEoYikJCShiKSs4CQk7IERDVEVMRU0gKiBkYXRhCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19mZGN0X2lzbG93X21teCkKKworRVhUTihqcGVnX2ZkY3RfaXNsb3dfbW14KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllc2kJCTsgdW51c2VkCis7CXB1c2gJZWRpCQk7IHVudXNlZAorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKERDVEVMRU0gKikKKwltb3YJZWN4LCBEQ1RTSVpFLzQKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSygyLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisJOyBtbTA9KDIwIDIxIDIyIDIzKSwgbW0yPSgyNCAyNSAyNiAyNykKKwk7IG1tMT0oMzAgMzEgMzIgMzMpLCBtbTM9KDM0IDM1IDM2IDM3KQorCisJbW92cSAgICAgIG1tNCxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTAsbW0xCQk7IG1tMD0oMjAgMzAgMjEgMzEpCisJcHVucGNraHdkIG1tNCxtbTEJCTsgbW00PSgyMiAzMiAyMyAzMykKKwltb3ZxICAgICAgbW01LG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tMixtbTMJCTsgbW0yPSgyNCAzNCAyNSAzNSkKKwlwdW5wY2tod2QgbW01LG1tMwkJOyBtbTU9KDI2IDM2IDI3IDM3KQorCisJbW92cQltbTYsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tNywgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworCTsgbW02PSgwMCAwMSAwMiAwMyksIG1tMT0oMDQgMDUgMDYgMDcpCisJOyBtbTc9KDEwIDExIDEyIDEzKSwgbW0zPSgxNCAxNSAxNiAxNykKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAk7IHdrKDApPSgyMiAzMiAyMyAzMykKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTIJOyB3aygxKT0oMjQgMzQgMjUgMzUpCisKKwltb3ZxICAgICAgbW00LG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tNixtbTcJCTsgbW02PSgwMCAxMCAwMSAxMSkKKwlwdW5wY2tod2QgbW00LG1tNwkJOyBtbTQ9KDAyIDEyIDAzIDEzKQorCW1vdnEgICAgICBtbTIsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0xLG1tMwkJOyBtbTE9KDA0IDE0IDA1IDE1KQorCXB1bnBja2h3ZCBtbTIsbW0zCQk7IG1tMj0oMDYgMTYgMDcgMTcpCisKKwltb3ZxICAgICAgbW03LG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tNixtbTAJCTsgbW02PSgwMCAxMCAyMCAzMCk9ZGF0YTAKKwlwdW5wY2toZHEgbW03LG1tMAkJOyBtbTc9KDAxIDExIDIxIDMxKT1kYXRhMQorCW1vdnEgICAgICBtbTMsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0yLG1tNQkJOyBtbTI9KDA2IDE2IDI2IDM2KT1kYXRhNgorCXB1bnBja2hkcSBtbTMsbW01CQk7IG1tMz0oMDcgMTcgMjcgMzcpPWRhdGE3CisKKwltb3ZxCW1tMCxtbTcKKwltb3ZxCW1tNSxtbTYKKwlwc3VidwltbTcsbW0yCQkJOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgorCXBzdWJ3CW1tNixtbTMJCQk7IG1tNj1kYXRhMC1kYXRhNz10bXA3CisJcGFkZHcJbW0wLG1tMgkJCTsgbW0wPWRhdGExK2RhdGE2PXRtcDEKKwlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAorCisJbW92cQltbTIsIE1NV09SRCBbd2soMCldCTsgbW0yPSgyMiAzMiAyMyAzMykKKwltb3ZxCW1tMywgTU1XT1JEIFt3aygxKV0JOyBtbTM9KDI0IDM0IDI1IDM1KQorCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNwk7IHdrKDApPXRtcDYKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTYJOyB3aygxKT10bXA3CisKKwltb3ZxICAgICAgbW03LG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tNCxtbTIJCTsgbW00PSgwMiAxMiAyMiAzMik9ZGF0YTIKKwlwdW5wY2toZHEgbW03LG1tMgkJOyBtbTc9KDAzIDEzIDIzIDMzKT1kYXRhMworCW1vdnEgICAgICBtbTYsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0xLG1tMwkJOyBtbTE9KDA0IDE0IDI0IDM0KT1kYXRhNAorCXB1bnBja2hkcSBtbTYsbW0zCQk7IG1tNj0oMDUgMTUgMjUgMzUpPWRhdGE1CisKKwltb3ZxCW1tMixtbTcKKwltb3ZxCW1tMyxtbTQKKwlwYWRkdwltbTcsbW0xCQkJOyBtbTc9ZGF0YTMrZGF0YTQ9dG1wMworCXBhZGR3CW1tNCxtbTYJCQk7IG1tND1kYXRhMitkYXRhNT10bXAyCisJcHN1YncJbW0yLG1tMQkJCTsgbW0yPWRhdGEzLWRhdGE0PXRtcDQKKwlwc3VidwltbTMsbW02CQkJOyBtbTM9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEJbW0xLG1tNQorCW1vdnEJbW02LG1tMAorCXBhZGR3CW1tNSxtbTcJCQk7IG1tNT10bXAxMAorCXBhZGR3CW1tMCxtbTQJCQk7IG1tMD10bXAxMQorCXBzdWJ3CW1tMSxtbTcJCQk7IG1tMT10bXAxMworCXBzdWJ3CW1tNixtbTQJCQk7IG1tNj10bXAxMgorCisJbW92cQltbTcsbW01CisJcGFkZHcJbW01LG1tMAkJCTsgbW01PXRtcDEwK3RtcDExCisJcHN1YncJbW03LG1tMAkJCTsgbW03PXRtcDEwLXRtcDExCisKKwlwc2xsdwltbTUsUEFTUzFfQklUUwkJOyBtbTU9ZGF0YTAKKwlwc2xsdwltbTcsUEFTUzFfQklUUwkJOyBtbTc9ZGF0YTQKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTcKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKKwk7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OworCTsgZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7CisJOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKworCW1vdnEgICAgICBtbTQsbW0xCQk7IG1tMT10bXAxMworCW1vdnEgICAgICBtbTAsbW0xCisJcHVucGNrbHdkIG1tNCxtbTYJCTsgbW02PXRtcDEyCisJcHVucGNraHdkIG1tMCxtbTYKKwltb3ZxICAgICAgbW0xLG1tNAorCW1vdnEgICAgICBtbTYsbW0wCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IG1tND1kYXRhMkwKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgbW0wPWRhdGEySAorCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgbW0xPWRhdGE2TAorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgbW02PWRhdGE2SAorCisJcGFkZGQJbW00LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBhZGRkCW1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwc3JhZAltbTQsREVTQ0FMRV9QMQorCXBzcmFkCW1tMCxERVNDQUxFX1AxCisJcGFkZGQJbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBhZGRkCW1tNixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwc3JhZAltbTEsREVTQ0FMRV9QMQorCXBzcmFkCW1tNixERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgbW00LG1tMAkJOyBtbTQ9ZGF0YTIKKwlwYWNrc3NkdyAgbW0xLG1tNgkJOyBtbTE9ZGF0YTYKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdnEJbW01LCBNTVdPUkQgW3drKDApXQk7IG1tNT10bXA2CisJbW92cQltbTcsIE1NV09SRCBbd2soMSldCTsgbW03PXRtcDcKKworCW1vdnEJbW0wLG1tMgkJCTsgbW0yPXRtcDQKKwltb3ZxCW1tNixtbTMJCQk7IG1tMz10bXA1CisJcGFkZHcJbW0wLG1tNQkJCTsgbW0wPXozCisJcGFkZHcJbW02LG1tNwkJCTsgbW02PXo0CisKKwk7IChPcmlnaW5hbCkKKwk7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisJOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKwk7IHozICs9IHo1OyAgejQgKz0gejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKwk7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisJbW92cSAgICAgIG1tNCxtbTAKKwltb3ZxICAgICAgbW0xLG1tMAorCXB1bnBja2x3ZCBtbTQsbW02CisJcHVucGNraHdkIG1tMSxtbTYKKwltb3ZxICAgICAgbW0wLG1tNAorCW1vdnEgICAgICBtbTYsbW0xCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTQ9ejNMCisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTE9ejNICisJcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IG1tMD16NEwKKwlwbWFkZHdkICAgbW02LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW02PXo0SAorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW00CTsgd2soMCk9ejNMCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0xCTsgd2soMSk9ejNICisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworCTsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisJOyB0bXA2ID0gdG1wNiAqIDMuMDcyNzExMDI2OyAgdG1wNyA9IHRtcDcgKiAxLjUwMTMyMTExMDsKKwk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworCTsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDQgPSB0bXA0ICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wNyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDcgPSB0bXA0ICogLTAuODk5OTc2MjIzICsgdG1wNyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OworCisJbW92cSAgICAgIG1tNCxtbTIKKwltb3ZxICAgICAgbW0xLG1tMgorCXB1bnBja2x3ZCBtbTQsbW03CisJcHVucGNraHdkIG1tMSxtbTcKKwltb3ZxICAgICAgbW0yLG1tNAorCW1vdnEgICAgICBtbTcsbW0xCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgbW00PXRtcDRMCisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgbW0xPXRtcDRICisJcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyBtbTI9dG1wN0wKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IG1tNz10bXA3SAorCisJcGFkZGQJbW00LCBNTVdPUkQgW3drKDApXQk7IG1tND1kYXRhN0wKKwlwYWRkZAltbTEsIE1NV09SRCBbd2soMSldCTsgbW0xPWRhdGE3SAorCXBhZGRkCW1tMixtbTAJCQk7IG1tMj1kYXRhMUwKKwlwYWRkZAltbTcsbW02CQkJOyBtbTc9ZGF0YTFICisKKwlwYWRkZAltbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcGFkZGQJbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBzcmFkCW1tNCxERVNDQUxFX1AxCisJcHNyYWQJbW0xLERFU0NBTEVfUDEKKwlwYWRkZAltbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcGFkZGQJbW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBzcmFkCW1tMixERVNDQUxFX1AxCisJcHNyYWQJbW03LERFU0NBTEVfUDEKKworCXBhY2tzc2R3ICBtbTQsbW0xCQk7IG1tND1kYXRhNworCXBhY2tzc2R3ICBtbTIsbW03CQk7IG1tMj1kYXRhMQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMgorCisJbW92cSAgICAgIG1tMSxtbTMKKwltb3ZxICAgICAgbW03LG1tMworCXB1bnBja2x3ZCBtbTEsbW01CisJcHVucGNraHdkIG1tNyxtbTUKKwltb3ZxICAgICAgbW0zLG1tMQorCW1vdnEgICAgICBtbTUsbW03CisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgbW0xPXRtcDVMCisJcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgbW03PXRtcDVICisJcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyBtbTM9dG1wNkwKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IG1tNT10bXA2SAorCisJcGFkZGQJbW0xLG1tMAkJCTsgbW0xPWRhdGE1TAorCXBhZGRkCW1tNyxtbTYJCQk7IG1tNz1kYXRhNUgKKwlwYWRkZAltbTMsIE1NV09SRCBbd2soMCldCTsgbW0zPWRhdGEzTAorCXBhZGRkCW1tNSwgTU1XT1JEIFt3aygxKV0JOyBtbTU9ZGF0YTNICisKKwlwYWRkZAltbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcGFkZGQJbW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBzcmFkCW1tMSxERVNDQUxFX1AxCisJcHNyYWQJbW03LERFU0NBTEVfUDEKKwlwYWRkZAltbTMsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcGFkZGQJbW01LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBzcmFkCW1tMyxERVNDQUxFX1AxCisJcHNyYWQJbW01LERFU0NBTEVfUDEKKworCXBhY2tzc2R3ICBtbTEsbW03CQk7IG1tMT1kYXRhNQorCXBhY2tzc2R3ICBtbTMsbW01CQk7IG1tMz1kYXRhMworCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMworCisJYWRkCWVkeCwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0RDVEVMRU0KKwlkZWMJZWN4CisJam56CW5lYXIgLnJvd2xvb3AKKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKworCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRENURUxFTSAqKQorCW1vdgllY3gsIERDVFNJWkUvNAorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldCisKKwk7IG1tMD0oMDIgMTIgMjIgMzIpLCBtbTI9KDQyIDUyIDYyIDcyKQorCTsgbW0xPSgwMyAxMyAyMyAzMyksIG1tMz0oNDMgNTMgNjMgNzMpCisKKwltb3ZxICAgICAgbW00LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tMCxtbTEJCTsgbW0wPSgwMiAwMyAxMiAxMykKKwlwdW5wY2tod2QgbW00LG1tMQkJOyBtbTQ9KDIyIDIzIDMyIDMzKQorCW1vdnEgICAgICBtbTUsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0yLG1tMwkJOyBtbTI9KDQyIDQzIDUyIDUzKQorCXB1bnBja2h3ZCBtbTUsbW0zCQk7IG1tNT0oNjIgNjMgNzIgNzMpCisKKwltb3ZxCW1tNiwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW03LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisJOyBtbTY9KDAwIDEwIDIwIDMwKSwgbW0xPSg0MCA1MCA2MCA3MCkKKwk7IG1tNz0oMDEgMTEgMjEgMzEpLCBtbTM9KDQxIDUxIDYxIDcxKQorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW00CTsgd2soMCk9KDIyIDIzIDMyIDMzKQorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMgk7IHdrKDEpPSg0MiA0MyA1MiA1MykKKworCW1vdnEgICAgICBtbTQsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW02LG1tNwkJOyBtbTY9KDAwIDAxIDEwIDExKQorCXB1bnBja2h3ZCBtbTQsbW03CQk7IG1tND0oMjAgMjEgMzAgMzEpCisJbW92cSAgICAgIG1tMixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTEsbW0zCQk7IG1tMT0oNDAgNDEgNTAgNTEpCisJcHVucGNraHdkIG1tMixtbTMJCTsgbW0yPSg2MCA2MSA3MCA3MSkKKworCW1vdnEgICAgICBtbTcsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW02LG1tMAkJOyBtbTY9KDAwIDAxIDAyIDAzKT1kYXRhMAorCXB1bnBja2hkcSBtbTcsbW0wCQk7IG1tNz0oMTAgMTEgMTIgMTMpPWRhdGExCisJbW92cSAgICAgIG1tMyxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTIsbW01CQk7IG1tMj0oNjAgNjEgNjIgNjMpPWRhdGE2CisJcHVucGNraGRxIG1tMyxtbTUJCTsgbW0zPSg3MCA3MSA3MiA3Myk9ZGF0YTcKKworCW1vdnEJbW0wLG1tNworCW1vdnEJbW01LG1tNgorCXBzdWJ3CW1tNyxtbTIJCQk7IG1tNz1kYXRhMS1kYXRhNj10bXA2CisJcHN1YncJbW02LG1tMwkJCTsgbW02PWRhdGEwLWRhdGE3PXRtcDcKKwlwYWRkdwltbTAsbW0yCQkJOyBtbTA9ZGF0YTErZGF0YTY9dG1wMQorCXBhZGR3CW1tNSxtbTMJCQk7IG1tNT1kYXRhMCtkYXRhNz10bXAwCisKKwltb3ZxCW1tMiwgTU1XT1JEIFt3aygwKV0JOyBtbTI9KDIyIDIzIDMyIDMzKQorCW1vdnEJbW0zLCBNTVdPUkQgW3drKDEpXQk7IG1tMz0oNDIgNDMgNTIgNTMpCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW03CTsgd2soMCk9dG1wNgorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNgk7IHdrKDEpPXRtcDcKKworCW1vdnEgICAgICBtbTcsbW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW00LG1tMgkJOyBtbTQ9KDIwIDIxIDIyIDIzKT1kYXRhMgorCXB1bnBja2hkcSBtbTcsbW0yCQk7IG1tNz0oMzAgMzEgMzIgMzMpPWRhdGEzCisJbW92cSAgICAgIG1tNixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oNDAgNDEgNDIgNDMpPWRhdGE0CisJcHVucGNraGRxIG1tNixtbTMJCTsgbW02PSg1MCA1MSA1MiA1Myk9ZGF0YTUKKworCW1vdnEJbW0yLG1tNworCW1vdnEJbW0zLG1tNAorCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz1kYXRhMytkYXRhND10bXAzCisJcGFkZHcJbW00LG1tNgkJCTsgbW00PWRhdGEyK2RhdGE1PXRtcDIKKwlwc3VidwltbTIsbW0xCQkJOyBtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorCXBzdWJ3CW1tMyxtbTYJCQk7IG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92cQltbTEsbW01CisJbW92cQltbTYsbW0wCisJcGFkZHcJbW01LG1tNwkJCTsgbW01PXRtcDEwCisJcGFkZHcJbW0wLG1tNAkJCTsgbW0wPXRtcDExCisJcHN1YncJbW0xLG1tNwkJCTsgbW0xPXRtcDEzCisJcHN1YncJbW02LG1tNAkJCTsgbW02PXRtcDEyCisKKwltb3ZxCW1tNyxtbTUKKwlwYWRkdwltbTUsbW0wCQkJOyBtbTU9dG1wMTArdG1wMTEKKwlwc3VidwltbTcsbW0wCQkJOyBtbTc9dG1wMTAtdG1wMTEKKworCXBhZGR3CW1tNSxbR09UT0ZGKGVieCxQV19ERVNDQUxFX1AyWCldCisJcGFkZHcJbW03LFtHT1RPRkYoZWJ4LFBXX0RFU0NBTEVfUDJYKV0KKwlwc3JhdwltbTUsUEFTUzFfQklUUwkJOyBtbTU9ZGF0YTAKKwlwc3JhdwltbTcsUEFTUzFfQklUUwkJOyBtbTc9ZGF0YTQKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01CisJbW92cQlNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTcKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKKwk7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OworCTsgZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7CisJOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKworCW1vdnEgICAgICBtbTQsbW0xCQk7IG1tMT10bXAxMworCW1vdnEgICAgICBtbTAsbW0xCisJcHVucGNrbHdkIG1tNCxtbTYJCTsgbW02PXRtcDEyCisJcHVucGNraHdkIG1tMCxtbTYKKwltb3ZxICAgICAgbW0xLG1tNAorCW1vdnEgICAgICBtbTYsbW0wCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IG1tND1kYXRhMkwKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgbW0wPWRhdGEySAorCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgbW0xPWRhdGE2TAorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgbW02PWRhdGE2SAorCisJcGFkZGQJbW00LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBhZGRkCW1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwc3JhZAltbTQsREVTQ0FMRV9QMgorCXBzcmFkCW1tMCxERVNDQUxFX1AyCisJcGFkZGQJbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBhZGRkCW1tNixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwc3JhZAltbTEsREVTQ0FMRV9QMgorCXBzcmFkCW1tNixERVNDQUxFX1AyCisKKwlwYWNrc3NkdyAgbW00LG1tMAkJOyBtbTQ9ZGF0YTIKKwlwYWNrc3NkdyAgbW0xLG1tNgkJOyBtbTE9ZGF0YTYKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisJbW92cQlNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdnEJbW01LCBNTVdPUkQgW3drKDApXQk7IG1tNT10bXA2CisJbW92cQltbTcsIE1NV09SRCBbd2soMSldCTsgbW03PXRtcDcKKworCW1vdnEJbW0wLG1tMgkJCTsgbW0yPXRtcDQKKwltb3ZxCW1tNixtbTMJCQk7IG1tMz10bXA1CisJcGFkZHcJbW0wLG1tNQkJCTsgbW0wPXozCisJcGFkZHcJbW02LG1tNwkJCTsgbW02PXo0CisKKwk7IChPcmlnaW5hbCkKKwk7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisJOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKwk7IHozICs9IHo1OyAgejQgKz0gejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKwk7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisJbW92cSAgICAgIG1tNCxtbTAKKwltb3ZxICAgICAgbW0xLG1tMAorCXB1bnBja2x3ZCBtbTQsbW02CisJcHVucGNraHdkIG1tMSxtbTYKKwltb3ZxICAgICAgbW0wLG1tNAorCW1vdnEgICAgICBtbTYsbW0xCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTQ9ejNMCisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTE9ejNICisJcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IG1tMD16NEwKKwlwbWFkZHdkICAgbW02LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW02PXo0SAorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW00CTsgd2soMCk9ejNMCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0xCTsgd2soMSk9ejNICisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworCTsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisJOyB0bXA2ID0gdG1wNiAqIDMuMDcyNzExMDI2OyAgdG1wNyA9IHRtcDcgKiAxLjUwMTMyMTExMDsKKwk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworCTsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDQgPSB0bXA0ICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wNyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDcgPSB0bXA0ICogLTAuODk5OTc2MjIzICsgdG1wNyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OworCisJbW92cSAgICAgIG1tNCxtbTIKKwltb3ZxICAgICAgbW0xLG1tMgorCXB1bnBja2x3ZCBtbTQsbW03CisJcHVucGNraHdkIG1tMSxtbTcKKwltb3ZxICAgICAgbW0yLG1tNAorCW1vdnEgICAgICBtbTcsbW0xCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgbW00PXRtcDRMCisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgbW0xPXRtcDRICisJcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyBtbTI9dG1wN0wKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IG1tNz10bXA3SAorCisJcGFkZGQJbW00LCBNTVdPUkQgW3drKDApXQk7IG1tND1kYXRhN0wKKwlwYWRkZAltbTEsIE1NV09SRCBbd2soMSldCTsgbW0xPWRhdGE3SAorCXBhZGRkCW1tMixtbTAJCQk7IG1tMj1kYXRhMUwKKwlwYWRkZAltbTcsbW02CQkJOyBtbTc9ZGF0YTFICisKKwlwYWRkZAltbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcGFkZGQJbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBzcmFkCW1tNCxERVNDQUxFX1AyCisJcHNyYWQJbW0xLERFU0NBTEVfUDIKKwlwYWRkZAltbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcGFkZGQJbW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBzcmFkCW1tMixERVNDQUxFX1AyCisJcHNyYWQJbW03LERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICBtbTQsbW0xCQk7IG1tND1kYXRhNworCXBhY2tzc2R3ICBtbTIsbW03CQk7IG1tMj1kYXRhMQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMgorCisJbW92cSAgICAgIG1tMSxtbTMKKwltb3ZxICAgICAgbW03LG1tMworCXB1bnBja2x3ZCBtbTEsbW01CisJcHVucGNraHdkIG1tNyxtbTUKKwltb3ZxICAgICAgbW0zLG1tMQorCW1vdnEgICAgICBtbTUsbW03CisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgbW0xPXRtcDVMCisJcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgbW03PXRtcDVICisJcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyBtbTM9dG1wNkwKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IG1tNT10bXA2SAorCisJcGFkZGQJbW0xLG1tMAkJCTsgbW0xPWRhdGE1TAorCXBhZGRkCW1tNyxtbTYJCQk7IG1tNz1kYXRhNUgKKwlwYWRkZAltbTMsIE1NV09SRCBbd2soMCldCTsgbW0zPWRhdGEzTAorCXBhZGRkCW1tNSwgTU1XT1JEIFt3aygxKV0JOyBtbTU9ZGF0YTNICisKKwlwYWRkZAltbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcGFkZGQJbW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBzcmFkCW1tMSxERVNDQUxFX1AyCisJcHNyYWQJbW03LERFU0NBTEVfUDIKKwlwYWRkZAltbTMsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcGFkZGQJbW01LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBzcmFkCW1tMyxERVNDQUxFX1AyCisJcHNyYWQJbW01LERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICBtbTEsbW03CQk7IG1tMT1kYXRhNQorCXBhY2tzc2R3ICBtbTMsbW01CQk7IG1tMz1kYXRhMworCisJbW92cQlNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMworCisJYWRkCWVkeCwgYnl0ZSA0KlNJWkVPRl9EQ1RFTEVNCisJZGVjCWVjeAorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCis7CXBvcAllZGkJCTsgdW51c2VkCis7CXBvcAllc2kJCTsgdW51c2VkCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wcGljCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSkZEQ1RfSU5UX01NWF9TVVBQT1JURUQKKyVlbmRpZiA7IERDVF9JU0xPV19TVVBQT1JURUQKZGlmZiAtLWdpdCBhL2pmc3MyZnN0LmFzbSBiL2pmc3MyZnN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjdiY2VmCi0tLSAvZGV2L251bGwKKysrIGIvamZzczJmc3QuYXNtCkBAIC0wLDAgKzEsNDExIEBACis7Cis7IGpmc3MyZnN0LmFzbSAtIGZhc3QgaW50ZWdlciBGRENUIChTU0UyKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mCis7IHRoZSBmb3J3YXJkIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcworOyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamZkY3Rmc3QuYzsgc2VlIHRoZSBqZmRjdGZzdC5jCis7IGZvciBtb3JlIGRldGFpbHMuCis7Cis7IExhc3QgTW9kaWZpZWQgOiBGZWJydWFyeSA0LCAyMDA2Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCislaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorJWlmZGVmIEpGRENUX0lOVF9TU0UyX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMJOAk7IDE0IGlzIGFsc28gT0suCisKKyVpZiBDT05TVF9CSVRTID09IDgKK0ZfMF8zODIJZXF1CSA5OAkJOyBGSVgoMC4zODI2ODM0MzMpCitGXzBfNTQxCWVxdQkxMzkJCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzcwNwllcXUJMTgxCQk7IEZJWCgwLjcwNzEwNjc4MSkKK0ZfMV8zMDYJZXF1CTMzNAkJOyBGSVgoMS4zMDY1NjI5NjUpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8wXzM4MgllcXUJREVTQ0FMRSggNDEwOTAzMjA3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzgyNjgzNDMzKQorRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzcwNwllcXUJREVTQ0FMRSggNzU5MjUwMTI0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzA3MTA2NzgxKQorRl8xXzMwNgllcXUJREVTQ0FMRSgxNDAyOTExMzAxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMzA2NTYyOTY1KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCis7IFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIDw9IDIgKHRvIGF2b2lkIG92ZXJmbG93KQorOyBDT05TVF9CSVRTICsgQ09OU1RfU0hJRlQgKyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA9PSAxNiAoZm9yIHBtdWxodykKKworJWRlZmluZSBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyAgIDIKKyVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2lmYXN0X3NzZTIpCisKK0VYVE4oamNvbnN0X2ZkY3RfaWZhc3Rfc3NlMik6CisKK1BXX0YwNzA3CXRpbWVzIDggZHcgIEZfMF83MDcgPDwgQ09OU1RfU0hJRlQKK1BXX0YwMzgyCXRpbWVzIDggZHcgIEZfMF8zODIgPDwgQ09OU1RfU0hJRlQKK1BXX0YwNTQxCXRpbWVzIDggZHcgIEZfMF81NDEgPDwgQ09OU1RfU0hJRlQKK1BXX0YxMzA2CXRpbWVzIDggZHcgIEZfMV8zMDYgPDwgQ09OU1RfU0hJRlQKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2ZkY3RfaWZhc3Rfc3NlMiAoRENURUxFTSAqIGRhdGEpCis7CisKKyVkZWZpbmUgZGF0YShiKQkJKGIpKzgJCTsgRENURUxFTSAqIGRhdGEKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfZmRjdF9pZmFzdF9zc2UyKQorCitFWFROKGpwZWdfZmRjdF9pZmFzdF9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYngKKzsJcHVzaAllY3gJCTsgdW51c2VkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVzaQkJOyB1bnVzZWQKKzsJcHVzaAllZGkJCTsgdW51c2VkCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KKworCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRENURUxFTSAqKQorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisJOyB4bW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyksIHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorCTsgeG1tMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpLCB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworCW1vdmRxYSAgICB4bW00LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0wLHhtbTEJCTsgeG1tMD0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisJcHVucGNraHdkIHhtbTQseG1tMQkJOyB4bW00PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKwltb3ZkcWEgICAgeG1tNSx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMix4bW0zCQk7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorCXB1bnBja2h3ZCB4bW01LHhtbTMJCTsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldCisKKwk7IHhtbTY9KCA0IDEyIDIwIDI4IDM2IDQ0IDUyIDYwKSwgeG1tMT0oIDYgMTQgMjIgMzAgMzggNDYgNTQgNjIpCisJOyB4bW03PSggNSAxMyAyMSAyOSAzNyA0NSA1MyA2MSksIHhtbTM9KCA3IDE1IDIzIDMxIDM5IDQ3IDU1IDYzKQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMgk7IHdrKDApPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW01CTsgd2soMSk9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCisJbW92ZHFhICAgIHhtbTIseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTYseG1tNwkJOyB4bW02PSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKwlwdW5wY2tod2QgeG1tMix4bW03CQk7IHhtbTI9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQorCW1vdmRxYSAgICB4bW01LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0xLHhtbTMJCTsgeG1tMT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisJcHVucGNraHdkIHhtbTUseG1tMwkJOyB4bW01PSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworCW1vdmRxYSAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW02LHhtbTEJCTsgeG1tNj0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisJcHVucGNraGRxIHhtbTcseG1tMQkJOyB4bW03PSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKwltb3ZkcWEgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMix4bW01CQk7IHhtbTI9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCXB1bnBja2hkcSB4bW0zLHhtbTUJCTsgeG1tMz0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisKKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMCldCTsgeG1tMT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMgk7IHdrKDEpPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKworCW1vdmRxYSAgICB4bW03LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0wLHhtbTEJCTsgeG1tMD0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisJcHVucGNraGRxIHhtbTcseG1tMQkJOyB4bW03PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwltb3ZkcWEgICAgeG1tMix4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tNCx4bW01CQk7IHhtbTQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCXB1bnBja2hkcSB4bW0yLHhtbTUJCTsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwltb3ZkcWEgICAgIHhtbTEseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0wLHhtbTYJCTsgeG1tMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApPWRhdGEwCisJcHVucGNraHFkcSB4bW0xLHhtbTYJCTsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpPWRhdGExCisJbW92ZHFhICAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMix4bW0zCQk7IHhtbTI9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KT1kYXRhNgorCXB1bnBja2hxZHEgeG1tNSx4bW0zCQk7IHhtbTU9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KT1kYXRhNworCisJbW92ZHFhCXhtbTYseG1tMQorCW1vdmRxYQl4bW0zLHhtbTAKKwlwc3Vidwl4bW0xLHhtbTIJCTsgeG1tMT1kYXRhMS1kYXRhNj10bXA2CisJcHN1YncJeG1tMCx4bW01CQk7IHhtbTA9ZGF0YTAtZGF0YTc9dG1wNworCXBhZGR3CXhtbTYseG1tMgkJOyB4bW02PWRhdGExK2RhdGE2PXRtcDEKKwlwYWRkdwl4bW0zLHhtbTUJCTsgeG1tMz1kYXRhMCtkYXRhNz10bXAwCisKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMCldCTsgeG1tMj0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTEJOyB3aygwKT10bXA2CisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPXRtcDcKKworCW1vdmRxYSAgICAgeG1tMSx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTcseG1tMgkJOyB4bW03PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3Mik9ZGF0YTIKKwlwdW5wY2tocWRxIHhtbTEseG1tMgkJOyB4bW0xPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3Myk9ZGF0YTMKKwltb3ZkcWEgICAgIHhtbTAseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW00LHhtbTUJCTsgeG1tND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpPWRhdGE0CisJcHVucGNraHFkcSB4bW0wLHhtbTUJCTsgeG1tMD0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpPWRhdGE1CisKKwltb3ZkcWEJeG1tMix4bW0xCisJbW92ZHFhCXhtbTUseG1tNworCXBhZGR3CXhtbTEseG1tNAkJOyB4bW0xPWRhdGEzK2RhdGE0PXRtcDMKKwlwYWRkdwl4bW03LHhtbTAJCTsgeG1tNz1kYXRhMitkYXRhNT10bXAyCisJcHN1YncJeG1tMix4bW00CQk7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorCXBzdWJ3CXhtbTUseG1tMAkJOyB4bW01PWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkcWEJeG1tNCx4bW0zCisJbW92ZHFhCXhtbTAseG1tNgorCXBzdWJ3CXhtbTMseG1tMQkJOyB4bW0zPXRtcDEzCisJcHN1YncJeG1tNix4bW03CQk7IHhtbTY9dG1wMTIKKwlwYWRkdwl4bW00LHhtbTEJCTsgeG1tND10bXAxMAorCXBhZGR3CXhtbTAseG1tNwkJOyB4bW0wPXRtcDExCisKKwlwYWRkdwl4bW02LHhtbTMKKwlwc2xsdwl4bW02LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CXhtbTYsW0dPVE9GRihlYngsUFdfRjA3MDcpXSA7IHhtbTY9ejEKKworCW1vdmRxYQl4bW0xLHhtbTQKKwltb3ZkcWEJeG1tNyx4bW0zCisJcHN1YncJeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTQKKwlwc3Vidwl4bW0zLHhtbTYJCTsgeG1tMz1kYXRhNgorCXBhZGR3CXhtbTEseG1tMAkJOyB4bW0xPWRhdGEwCisJcGFkZHcJeG1tNyx4bW02CQk7IHhtbTc9ZGF0YTIKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0wPXRtcDYKKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soMSldCTsgeG1tNj10bXA3CisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPWRhdGE0CisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMwk7IHdrKDEpPWRhdGE2CisKKwk7IC0tIE9kZCBwYXJ0CisKKwlwYWRkdwl4bW0yLHhtbTUJCTsgeG1tMj10bXAxMAorCXBhZGR3CXhtbTUseG1tMAkJOyB4bW01PXRtcDExCisJcGFkZHcJeG1tMCx4bW02CQk7IHhtbTA9dG1wMTIsIHhtbTY9dG1wNworCisJcHNsbHcJeG1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBzbGx3CXhtbTAsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKworCXBzbGx3CXhtbTUsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJeG1tNSxbR09UT0ZGKGVieCxQV19GMDcwNyldIDsgeG1tNT16MworCisJbW92ZHFhCXhtbTQseG1tMgkJOyB4bW00PXRtcDEwCisJcHN1YncJeG1tMix4bW0wCisJcG11bGh3CXhtbTIsW0dPVE9GRihlYngsUFdfRjAzODIpXSA7IHhtbTI9ejUKKwlwbXVsaHcJeG1tNCxbR09UT0ZGKGVieCxQV19GMDU0MSldIDsgeG1tND1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYpCisJcG11bGh3CXhtbTAsW0dPVE9GRihlYngsUFdfRjEzMDYpXSA7IHhtbTA9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQorCXBhZGR3CXhtbTQseG1tMgkJOyB4bW00PXoyCisJcGFkZHcJeG1tMCx4bW0yCQk7IHhtbTA9ejQKKworCW1vdmRxYQl4bW0zLHhtbTYKKwlwc3Vidwl4bW02LHhtbTUJCTsgeG1tNj16MTMKKwlwYWRkdwl4bW0zLHhtbTUJCTsgeG1tMz16MTEKKworCW1vdmRxYQl4bW0yLHhtbTYKKwltb3ZkcWEJeG1tNSx4bW0zCisJcHN1YncJeG1tNix4bW00CQk7IHhtbTY9ZGF0YTMKKwlwc3Vidwl4bW0zLHhtbTAJCTsgeG1tMz1kYXRhNworCXBhZGR3CXhtbTIseG1tNAkJOyB4bW0yPWRhdGE1CisJcGFkZHcJeG1tNSx4bW0wCQk7IHhtbTU9ZGF0YTEKKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKworOwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKERDVEVMRU0gKikKKworCTsgeG1tMT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApLCB4bW03PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKwk7IHhtbTU9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKSwgeG1tNj0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisKKwltb3ZkcWEgICAgeG1tNCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMSx4bW01CQk7IHhtbTE9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorCXB1bnBja2h3ZCB4bW00LHhtbTUJCTsgeG1tND0oNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisJbW92ZHFhICAgIHhtbTAseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTcseG1tNgkJOyB4bW03PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKwlwdW5wY2tod2QgeG1tMCx4bW02CQk7IHhtbTA9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDApXQk7IHhtbTU9Y29sNAorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygxKV0JOyB4bW02PWNvbDYKKworCTsgeG1tNT0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpLCB4bW02PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKwk7IHhtbTI9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KSwgeG1tMz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW03CTsgd2soMCk9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisKKwltb3ZkcWEgICAgeG1tNyx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNSx4bW0yCQk7IHhtbTU9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorCXB1bnBja2h3ZCB4bW03LHhtbTIJCTsgeG1tNz0oNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCisJbW92ZHFhICAgIHhtbTAseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTYseG1tMwkJOyB4bW02PSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKKwlwdW5wY2tod2QgeG1tMCx4bW0zCQk7IHhtbTA9KDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQorCisJbW92ZHFhICAgIHhtbTIseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTUseG1tNgkJOyB4bW01PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKKwlwdW5wY2toZHEgeG1tMix4bW02CQk7IHhtbTI9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorCW1vdmRxYSAgICB4bW0zLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW03LHhtbTAJCTsgeG1tNz0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisJcHVucGNraGRxIHhtbTMseG1tMAkJOyB4bW0zPSg2NCA2NSA2NiA2NyA3NCA3NSA3NiA3NykKKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMgk7IHdrKDApPSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW03CTsgd2soMSk9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorCisJbW92ZHFhICAgIHhtbTIseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTEseG1tNgkJOyB4bW0xPSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKwlwdW5wY2toZHEgeG1tMix4bW02CQk7IHhtbTI9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorCW1vdmRxYSAgICB4bW03LHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW00LHhtbTAJCTsgeG1tND0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMpCisJcHVucGNraGRxIHhtbTcseG1tMAkJOyB4bW03PSg2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKKworCW1vdmRxYSAgICAgeG1tNix4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTEseG1tNQkJOyB4bW0xPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyk9ZGF0YTAKKwlwdW5wY2tocWRxIHhtbTYseG1tNQkJOyB4bW02PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyk9ZGF0YTEKKwltb3ZkcWEgICAgIHhtbTAseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW03LHhtbTMJCTsgeG1tNz0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpPWRhdGE2CisJcHVucGNraHFkcSB4bW0wLHhtbTMJCTsgeG1tMD0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpPWRhdGE3CisKKwltb3ZkcWEJeG1tNSx4bW02CisJbW92ZHFhCXhtbTMseG1tMQorCXBzdWJ3CXhtbTYseG1tNwkJOyB4bW02PWRhdGExLWRhdGE2PXRtcDYKKwlwc3Vidwl4bW0xLHhtbTAJCTsgeG1tMT1kYXRhMC1kYXRhNz10bXA3CisJcGFkZHcJeG1tNSx4bW03CQk7IHhtbTU9ZGF0YTErZGF0YTY9dG1wMQorCXBhZGR3CXhtbTMseG1tMAkJOyB4bW0zPWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNgk7IHdrKDApPXRtcDYKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0xCTsgd2soMSk9dG1wNworCisJbW92ZHFhICAgICB4bW02LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMix4bW03CQk7IHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KT1kYXRhMgorCXB1bnBja2hxZHEgeG1tNix4bW03CQk7IHhtbTY9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KT1kYXRhMworCW1vdmRxYSAgICAgeG1tMSx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTQseG1tMAkJOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0Nyk9ZGF0YTQKKwlwdW5wY2tocWRxIHhtbTEseG1tMAkJOyB4bW0xPSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1Nyk9ZGF0YTUKKworCW1vdmRxYQl4bW03LHhtbTYKKwltb3ZkcWEJeG1tMCx4bW0yCisJcGFkZHcJeG1tNix4bW00CQk7IHhtbTY9ZGF0YTMrZGF0YTQ9dG1wMworCXBhZGR3CXhtbTIseG1tMQkJOyB4bW0yPWRhdGEyK2RhdGE1PXRtcDIKKwlwc3Vidwl4bW03LHhtbTQJCTsgeG1tNz1kYXRhMy1kYXRhND10bXA0CisJcHN1YncJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmRxYQl4bW00LHhtbTMKKwltb3ZkcWEJeG1tMSx4bW01CisJcHN1YncJeG1tMyx4bW02CQk7IHhtbTM9dG1wMTMKKwlwc3Vidwl4bW01LHhtbTIJCTsgeG1tNT10bXAxMgorCXBhZGR3CXhtbTQseG1tNgkJOyB4bW00PXRtcDEwCisJcGFkZHcJeG1tMSx4bW0yCQk7IHhtbTE9dG1wMTEKKworCXBhZGR3CXhtbTUseG1tMworCXBzbGx3CXhtbTUsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJeG1tNSxbR09UT0ZGKGVieCxQV19GMDcwNyldIDsgeG1tNT16MQorCisJbW92ZHFhCXhtbTYseG1tNAorCW1vdmRxYQl4bW0yLHhtbTMKKwlwc3Vidwl4bW00LHhtbTEJCTsgeG1tND1kYXRhNAorCXBzdWJ3CXhtbTMseG1tNQkJOyB4bW0zPWRhdGE2CisJcGFkZHcJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTAKKwlwYWRkdwl4bW0yLHhtbTUJCTsgeG1tMj1kYXRhMgorCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNAorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW02CisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9dG1wNgorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PXRtcDcKKworCXBhZGR3CXhtbTcseG1tMAkJOyB4bW03PXRtcDEwCisJcGFkZHcJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMTEKKwlwYWRkdwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMiwgeG1tNT10bXA3CisKKwlwc2xsdwl4bW03LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcHNsbHcJeG1tMSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisJcHNsbHcJeG1tMCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW0wLFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyB4bW0wPXozCisKKwltb3ZkcWEJeG1tNCx4bW03CQk7IHhtbTQ9dG1wMTAKKwlwc3Vidwl4bW03LHhtbTEKKwlwbXVsaHcJeG1tNyxbR09UT0ZGKGVieCxQV19GMDM4MildIDsgeG1tNz16NQorCXBtdWxodwl4bW00LFtHT1RPRkYoZWJ4LFBXX0YwNTQxKV0gOyB4bW00PU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NikKKwlwbXVsaHcJeG1tMSxbR09UT0ZGKGVieCxQV19GMTMwNildIDsgeG1tMT1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisJcGFkZHcJeG1tNCx4bW03CQk7IHhtbTQ9ejIKKwlwYWRkdwl4bW0xLHhtbTcJCTsgeG1tMT16NAorCisJbW92ZHFhCXhtbTMseG1tNQorCXBzdWJ3CXhtbTUseG1tMAkJOyB4bW01PXoxMworCXBhZGR3CXhtbTMseG1tMAkJOyB4bW0zPXoxMQorCisJbW92ZHFhCXhtbTYseG1tNQorCW1vdmRxYQl4bW0yLHhtbTMKKwlwc3Vidwl4bW01LHhtbTQJCTsgeG1tNT1kYXRhMworCXBzdWJ3CXhtbTMseG1tMQkJOyB4bW0zPWRhdGE3CisJcGFkZHcJeG1tNix4bW00CQk7IHhtbTY9ZGF0YTUKKwlwYWRkdwl4bW0yLHhtbTEJCTsgeG1tMj1kYXRhMQorCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNQorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW02CisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMgorCis7CXBvcAllZGkJCTsgdW51c2VkCis7CXBvcAllc2kJCTsgdW51c2VkCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgdW51c2VkCisJcG9wcGljCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSkZEQ1RfSU5UX1NTRTJfU1VQUE9SVEVECislZW5kaWYgOyBEQ1RfSUZBU1RfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qZnNzMmludC5hc20gYi9qZnNzMmludC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2YjQyYwotLS0gL2Rldi9udWxsCisrKyBiL2pmc3MyaW50LmFzbQpAQCAtMCwwICsxLDY0MSBAQAorOworOyBqZnNzMmludC5hc20gLSBhY2N1cmF0ZSBpbnRlZ2VyIEZEQ1QgKFNTRTIpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2xvdy1idXQtYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKzsgZm9yd2FyZCBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQKKzsgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0aW50LmM7IHNlZSB0aGUgamZkY3RpbnQuYyBmb3IKKzsgbW9yZSBkZXRhaWxzLgorOworOyBMYXN0IE1vZGlmaWVkIDogRmVicnVhcnkgNCwgMjAwNgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKyVpZmRlZiBKRkRDVF9JTlRfU1NFMl9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTEzCislZGVmaW5lIFBBU1MxX0JJVFMJMgorCislZGVmaW5lIERFU0NBTEVfUDEJKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMgkoQ09OU1RfQklUUytQQVNTMV9CSVRTKQorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzI5OAllcXUJIDI0NDYJCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJIDMxOTYJCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJIDQ0MzMJCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJIDk2MzMJCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJMTIyOTkJCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJMTYwNjkJCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJMTY4MTkJCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJMjUxNzIJCTsgRklYKDMuMDcyNzExMDI2KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMF8yOTgJZXF1CURFU0NBTEUoIDMyMDY1Mjk1NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAJZXF1CURFU0NBTEUoIDQxODk1MzI3NiwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEJZXF1CURFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUJZXF1CURFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkJZXF1CURFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUJZXF1CURFU0NBTEUoMTI2MjU4NjgxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEJZXF1CURFU0NBTEUoMTYxMjAzMTI2NywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEJZXF1CURFU0NBTEUoMjEwNjIyMDM1MCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMJZXF1CURFU0NBTEUoMjIwNDUyMDY3MywzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIJZXF1CURFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIJZXF1CURFU0NBTEUoMzI5OTI5ODM0MSwzMC1DT05TVF9CSVRTKQk7IEZJWCgzLjA3MjcxMTAyNikKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2lzbG93X3NzZTIpCisKK0VYVE4oamNvbnN0X2ZkY3RfaXNsb3dfc3NlMik6CisKK1BXX0YxMzBfRjA1NAl0aW1lcyA0IGR3ICAoRl8wXzU0MStGXzBfNzY1KSwgRl8wXzU0MQorUFdfRjA1NF9NRjEzMAl0aW1lcyA0IGR3ICBGXzBfNTQxLCAoRl8wXzU0MS1GXzFfODQ3KQorUFdfTUYwNzhfRjExNwl0aW1lcyA0IGR3ICAoRl8xXzE3NS1GXzFfOTYxKSwgRl8xXzE3NQorUFdfRjExN19GMDc4CXRpbWVzIDQgZHcgIEZfMV8xNzUsIChGXzFfMTc1LUZfMF8zOTApCitQV19NRjA2MF9NRjA4OQl0aW1lcyA0IGR3ICAoRl8wXzI5OC1GXzBfODk5KSwtRl8wXzg5OQorUFdfTUYwODlfRjA2MAl0aW1lcyA0IGR3IC1GXzBfODk5LCAoRl8xXzUwMS1GXzBfODk5KQorUFdfTUYwNTBfTUYyNTYJdGltZXMgNCBkdyAgKEZfMl8wNTMtRl8yXzU2MiksLUZfMl81NjIKK1BXX01GMjU2X0YwNTAJdGltZXMgNCBkdyAtRl8yXzU2MiwgKEZfM18wNzItRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMS0xKQorUERfREVTQ0FMRV9QMgl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AyLTEpCitQV19ERVNDQUxFX1AyWAl0aW1lcyA4IGR3ICAxIDw8IChQQVNTMV9CSVRTLTEpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19mZGN0X2lzbG93X3NzZTIgKERDVEVMRU0gKiBkYXRhKQorOworCislZGVmaW5lIGRhdGEoYikJCShiKSs4CQk7IERDVEVMRU0gKiBkYXRhCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJNgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2ZkY3RfaXNsb3dfc3NlMikKKworRVhUTihqcGVnX2ZkY3RfaXNsb3dfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAorCXN1Ygllc3AsIGJ5dGUgNAorCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWJ4Cis7CXB1c2gJZWN4CQk7IHVudXNlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllc2kJCTsgdW51c2VkCis7CXB1c2gJZWRpCQk7IHVudXNlZAorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKERDVEVMRU0gKikKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworCTsgeG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpLCB4bW0yPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKwk7IHhtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KSwgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKwltb3ZkcWEgICAgeG1tNCx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMCx4bW0xCQk7IHhtbTA9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorCXB1bnBja2h3ZCB4bW00LHhtbTEJCTsgeG1tND0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisJbW92ZHFhICAgIHhtbTUseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTIseG1tMwkJOyB4bW0yPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKwlwdW5wY2tod2QgeG1tNSx4bW0zCQk7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW03LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisJOyB4bW02PSggNCAxMiAyMCAyOCAzNiA0NCA1MiA2MCksIHhtbTE9KCA2IDE0IDIyIDMwIDM4IDQ2IDU0IDYyKQorCTsgeG1tNz0oIDUgMTMgMjEgMjkgMzcgNDUgNTMgNjEpLCB4bW0zPSggNyAxNSAyMyAzMSAzOSA0NyA1NSA2MykKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNQk7IHdrKDEpPSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKworCW1vdmRxYSAgICB4bW0yLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW02LHhtbTcJCTsgeG1tNj0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisJcHVucGNraHdkIHhtbTIseG1tNwkJOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKwltb3ZkcWEgICAgeG1tNSx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMSx4bW0zCQk7IHhtbTE9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorCXB1bnBja2h3ZCB4bW01LHhtbTMJCTsgeG1tNT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKwltb3ZkcWEgICAgeG1tNyx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tNix4bW0xCQk7IHhtbTY9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorCXB1bnBja2hkcSB4bW03LHhtbTEJCTsgeG1tNz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhICAgIHhtbTMseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTIseG1tNQkJOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKwlwdW5wY2toZHEgeG1tMyx4bW01CQk7IHhtbTM9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKwltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW03CTsgd2soMik9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorCW1vdmRxYQlYTU1XT1JEIFt3aygzKV0sIHhtbTIJOyB3aygzKT0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisKKwltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMCx4bW0xCQk7IHhtbTA9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorCXB1bnBja2hkcSB4bW03LHhtbTEJCTsgeG1tNz0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJbW92ZHFhICAgIHhtbTIseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTQseG1tNQkJOyB4bW00PSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKwlwdW5wY2toZHEgeG1tMix4bW01CQk7IHhtbTI9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCisJbW92ZHFhICAgICB4bW0xLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMCx4bW02CQk7IHhtbTA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKT1kYXRhMAorCXB1bnBja2hxZHEgeG1tMSx4bW02CQk7IHhtbTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKT1kYXRhMQorCW1vdmRxYSAgICAgeG1tNSx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTIseG1tMwkJOyB4bW0yPSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3Nik9ZGF0YTYKKwlwdW5wY2tocWRxIHhtbTUseG1tMwkJOyB4bW01PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3Nyk9ZGF0YTcKKworCW1vdmRxYQl4bW02LHhtbTEKKwltb3ZkcWEJeG1tMyx4bW0wCisJcHN1YncJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTEtZGF0YTY9dG1wNgorCXBzdWJ3CXhtbTAseG1tNQkJOyB4bW0wPWRhdGEwLWRhdGE3PXRtcDcKKwlwYWRkdwl4bW02LHhtbTIJCTsgeG1tNj1kYXRhMStkYXRhNj10bXAxCisJcGFkZHcJeG1tMyx4bW01CQk7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAorCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTI9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygzKV0JOyB4bW01PSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0xCTsgd2soMCk9dG1wNgorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT10bXA3CisKKwltb3ZkcWEgICAgIHhtbTEseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW03LHhtbTIJCTsgeG1tNz0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpPWRhdGEyCisJcHVucGNraHFkcSB4bW0xLHhtbTIJCTsgeG1tMT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpPWRhdGEzCisJbW92ZHFhICAgICB4bW0wLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tNCx4bW01CQk7IHhtbTQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KT1kYXRhNAorCXB1bnBja2hxZHEgeG1tMCx4bW01CQk7IHhtbTA9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KT1kYXRhNQorCisJbW92ZHFhCXhtbTIseG1tMQorCW1vdmRxYQl4bW01LHhtbTcKKwlwYWRkdwl4bW0xLHhtbTQJCTsgeG1tMT1kYXRhMytkYXRhND10bXAzCisJcGFkZHcJeG1tNyx4bW0wCQk7IHhtbTc9ZGF0YTIrZGF0YTU9dG1wMgorCXBzdWJ3CXhtbTIseG1tNAkJOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKKwlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhMi1kYXRhNT10bXA1CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92ZHFhCXhtbTQseG1tMworCW1vdmRxYQl4bW0wLHhtbTYKKwlwYWRkdwl4bW0zLHhtbTEJCTsgeG1tMz10bXAxMAorCXBhZGR3CXhtbTYseG1tNwkJOyB4bW02PXRtcDExCisJcHN1YncJeG1tNCx4bW0xCQk7IHhtbTQ9dG1wMTMKKwlwc3Vidwl4bW0wLHhtbTcJCTsgeG1tMD10bXAxMgorCisJbW92ZHFhCXhtbTEseG1tMworCXBhZGR3CXhtbTMseG1tNgkJOyB4bW0zPXRtcDEwK3RtcDExCisJcHN1YncJeG1tMSx4bW02CQk7IHhtbTE9dG1wMTAtdG1wMTEKKworCXBzbGx3CXhtbTMsUEFTUzFfQklUUwkJOyB4bW0zPWRhdGEwCisJcHNsbHcJeG1tMSxQQVNTMV9CSVRTCQk7IHhtbTE9ZGF0YTQKKworCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTMJOyB3aygyKT1kYXRhMAorCW1vdmRxYQlYTU1XT1JEIFt3aygzKV0sIHhtbTEJOyB3aygzKT1kYXRhNAorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOworCTsgZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7CisJOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKKwk7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworCisJbW92ZHFhICAgIHhtbTcseG1tNAkJOyB4bW00PXRtcDEzCisJbW92ZHFhICAgIHhtbTYseG1tNAorCXB1bnBja2x3ZCB4bW03LHhtbTAJCTsgeG1tMD10bXAxMgorCXB1bnBja2h3ZCB4bW02LHhtbTAKKwltb3ZkcWEgICAgeG1tNCx4bW03CisJbW92ZHFhICAgIHhtbTAseG1tNgorCXBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgeG1tNz1kYXRhMkwKKwlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IHhtbTY9ZGF0YTJICisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgeG1tND1kYXRhNkwKKwlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyB4bW0wPWRhdGE2SAorCisJcGFkZGQJeG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwYWRkZAl4bW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBzcmFkCXhtbTcsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTYsREVTQ0FMRV9QMQorCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcGFkZGQJeG1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwc3JhZAl4bW00LERFU0NBTEVfUDEKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDEKKworCXBhY2tzc2R3ICB4bW03LHhtbTYJCTsgeG1tNz1kYXRhMgorCXBhY2tzc2R3ICB4bW00LHhtbTAJCTsgeG1tND1kYXRhNgorCisJbW92ZHFhCVhNTVdPUkQgW3drKDQpXSwgeG1tNwk7IHdrKDQpPWRhdGEyCisJbW92ZHFhCVhNTVdPUkQgW3drKDUpXSwgeG1tNAk7IHdrKDUpPWRhdGE2CisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soMCldCTsgeG1tMz10bXA2CisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTE9dG1wNworCisJbW92ZHFhCXhtbTYseG1tMgkJOyB4bW0yPXRtcDQKKwltb3ZkcWEJeG1tMCx4bW01CQk7IHhtbTU9dG1wNQorCXBhZGR3CXhtbTYseG1tMwkJOyB4bW02PXozCisJcGFkZHcJeG1tMCx4bW0xCQk7IHhtbTA9ejQKKworCTsgKE9yaWdpbmFsKQorCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKwk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworCTsgejMgKz0gejU7ICB6NCArPSB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKwltb3ZkcWEgICAgeG1tNyx4bW02CisJbW92ZHFhICAgIHhtbTQseG1tNgorCXB1bnBja2x3ZCB4bW03LHhtbTAKKwlwdW5wY2tod2QgeG1tNCx4bW0wCisJbW92ZHFhICAgIHhtbTYseG1tNworCW1vdmRxYSAgICB4bW0wLHhtbTQKKwlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyB4bW03PXozTAorCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IHhtbTQ9ejNICisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyB4bW02PXo0TAorCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgeG1tMD16NEgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT16M0wKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW00CTsgd2soMSk9ejNICisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworCTsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisJOyB0bXA2ID0gdG1wNiAqIDMuMDcyNzExMDI2OyAgdG1wNyA9IHRtcDcgKiAxLjUwMTMyMTExMDsKKwk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworCTsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDQgPSB0bXA0ICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wNyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDcgPSB0bXA0ICogLTAuODk5OTc2MjIzICsgdG1wNyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OworCisJbW92ZHFhICAgIHhtbTcseG1tMgorCW1vdmRxYSAgICB4bW00LHhtbTIKKwlwdW5wY2tsd2QgeG1tNyx4bW0xCisJcHVucGNraHdkIHhtbTQseG1tMQorCW1vdmRxYSAgICB4bW0yLHhtbTcKKwltb3ZkcWEgICAgeG1tMSx4bW00CisJcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTc9dG1wNEwKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgeG1tND10bXA0SAorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IHhtbTI9dG1wN0wKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW0xPXRtcDdICisKKwlwYWRkZAl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PWRhdGE3TAorCXBhZGRkCXhtbTQsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTQ9ZGF0YTdICisJcGFkZGQJeG1tMix4bW02CQk7IHhtbTI9ZGF0YTFMCisJcGFkZGQJeG1tMSx4bW0wCQk7IHhtbTE9ZGF0YTFICisKKwlwYWRkZAl4bW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcHNyYWQJeG1tNyxERVNDQUxFX1AxCisJcHNyYWQJeG1tNCxERVNDQUxFX1AxCisJcGFkZGQJeG1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwYWRkZAl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBzcmFkCXhtbTIsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTEsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIHhtbTcseG1tNAkJOyB4bW03PWRhdGE3CisJcGFja3NzZHcgIHhtbTIseG1tMQkJOyB4bW0yPWRhdGExCisKKwltb3ZkcWEgICAgeG1tNCx4bW01CisJbW92ZHFhICAgIHhtbTEseG1tNQorCXB1bnBja2x3ZCB4bW00LHhtbTMKKwlwdW5wY2tod2QgeG1tMSx4bW0zCisJbW92ZHFhICAgIHhtbTUseG1tNAorCW1vdmRxYSAgICB4bW0zLHhtbTEKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgeG1tND10bXA1TAorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyB4bW0xPXRtcDVICisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgeG1tNT10bXA2TAorCXBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IHhtbTM9dG1wNkgKKworCXBhZGRkCXhtbTQseG1tNgkJOyB4bW00PWRhdGE1TAorCXBhZGRkCXhtbTEseG1tMAkJOyB4bW0xPWRhdGE1SAorCXBhZGRkCXhtbTUsIFhNTVdPUkQgW3drKDApXQk7IHhtbTU9ZGF0YTNMCisJcGFkZGQJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz1kYXRhM0gKKworCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcGFkZGQJeG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwc3JhZAl4bW00LERFU0NBTEVfUDEKKwlwc3JhZAl4bW0xLERFU0NBTEVfUDEKKwlwYWRkZAl4bW01LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBhZGRkCXhtbTMsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcHNyYWQJeG1tNSxERVNDQUxFX1AxCisJcHNyYWQJeG1tMyxERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgeG1tNCx4bW0xCQk7IHhtbTQ9ZGF0YTUKKwlwYWNrc3NkdyAgeG1tNSx4bW0zCQk7IHhtbTU9ZGF0YTMKKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKworOwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKERDVEVMRU0gKikKKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygyKV0JOyB4bW02PWNvbDAKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soNCldCTsgeG1tMD1jb2wyCisKKwk7IHhtbTY9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKSwgeG1tMD0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisJOyB4bW0yPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSksIHhtbTU9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorCisJbW92ZHFhICAgIHhtbTEseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTYseG1tMgkJOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKwlwdW5wY2tod2QgeG1tMSx4bW0yCQk7IHhtbTE9KDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQorCW1vdmRxYSAgICB4bW0zLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0wLHhtbTUJCTsgeG1tMD0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisJcHVucGNraHdkIHhtbTMseG1tNQkJOyB4bW0zPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKworCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3aygzKV0JOyB4bW0yPWNvbDQKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soNSldCTsgeG1tNT1jb2w2CisKKwk7IHhtbTI9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KSwgeG1tNT0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJOyB4bW00PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSksIHhtbTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCisJbW92ZHFhICAgIHhtbTAseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTIseG1tNAkJOyB4bW0yPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKwlwdW5wY2tod2QgeG1tMCx4bW00CQk7IHhtbTA9KDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQorCW1vdmRxYSAgICB4bW0zLHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW01LHhtbTcJCTsgeG1tNT0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisJcHVucGNraHdkIHhtbTMseG1tNwkJOyB4bW0zPSg0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKworCW1vdmRxYSAgICB4bW00LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0yLHhtbTUJCTsgeG1tMj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisJcHVucGNraGRxIHhtbTQseG1tNQkJOyB4bW00PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKwltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMCx4bW0zCQk7IHhtbTA9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorCXB1bnBja2hkcSB4bW03LHhtbTMJCTsgeG1tNz0oNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTM9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTQJOyB3aygyKT0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisJbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMAk7IHdrKDMpPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKworCW1vdmRxYSAgICB4bW00LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW02LHhtbTUJCTsgeG1tNj0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisJcHVucGNraGRxIHhtbTQseG1tNQkJOyB4bW00PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKwltb3ZkcWEgICAgeG1tMCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMSx4bW0zCQk7IHhtbTE9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzKQorCXB1bnBja2hkcSB4bW0wLHhtbTMJCTsgeG1tMD0oNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisKKwltb3ZkcWEgICAgIHhtbTUseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW02LHhtbTIJCTsgeG1tNj0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpPWRhdGEwCisJcHVucGNraHFkcSB4bW01LHhtbTIJCTsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpPWRhdGExCisJbW92ZHFhICAgICB4bW0zLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMCx4bW03CQk7IHhtbTA9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KT1kYXRhNgorCXB1bnBja2hxZHEgeG1tMyx4bW03CQk7IHhtbTM9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KT1kYXRhNworCisJbW92ZHFhCXhtbTIseG1tNQorCW1vdmRxYQl4bW03LHhtbTYKKwlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhMS1kYXRhNj10bXA2CisJcHN1YncJeG1tNix4bW0zCQk7IHhtbTY9ZGF0YTAtZGF0YTc9dG1wNworCXBhZGR3CXhtbTIseG1tMAkJOyB4bW0yPWRhdGExK2RhdGE2PXRtcDEKKwlwYWRkdwl4bW03LHhtbTMJCTsgeG1tNz1kYXRhMCtkYXRhNz10bXAwCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMildCTsgeG1tMD0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTM9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTUJOyB3aygwKT10bXA2CisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPXRtcDcKKworCW1vdmRxYSAgICAgeG1tNSx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTQseG1tMAkJOyB4bW00PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyk9ZGF0YTIKKwlwdW5wY2tocWRxIHhtbTUseG1tMAkJOyB4bW01PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyk9ZGF0YTMKKwltb3ZkcWEgICAgIHhtbTYseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0xLHhtbTMJCTsgeG1tMT0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpPWRhdGE0CisJcHVucGNraHFkcSB4bW02LHhtbTMJCTsgeG1tNj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpPWRhdGE1CisKKwltb3ZkcWEJeG1tMCx4bW01CisJbW92ZHFhCXhtbTMseG1tNAorCXBhZGR3CXhtbTUseG1tMQkJOyB4bW01PWRhdGEzK2RhdGE0PXRtcDMKKwlwYWRkdwl4bW00LHhtbTYJCTsgeG1tND1kYXRhMitkYXRhNT10bXAyCisJcHN1YncJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTMtZGF0YTQ9dG1wNAorCXBzdWJ3CXhtbTMseG1tNgkJOyB4bW0zPWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkcWEJeG1tMSx4bW03CisJbW92ZHFhCXhtbTYseG1tMgorCXBhZGR3CXhtbTcseG1tNQkJOyB4bW03PXRtcDEwCisJcGFkZHcJeG1tMix4bW00CQk7IHhtbTI9dG1wMTEKKwlwc3Vidwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMworCXBzdWJ3CXhtbTYseG1tNAkJOyB4bW02PXRtcDEyCisKKwltb3ZkcWEJeG1tNSx4bW03CisJcGFkZHcJeG1tNyx4bW0yCQk7IHhtbTc9dG1wMTArdG1wMTEKKwlwc3Vidwl4bW01LHhtbTIJCTsgeG1tNT10bXAxMC10bXAxMQorCisJcGFkZHcJeG1tNyxbR09UT0ZGKGVieCxQV19ERVNDQUxFX1AyWCldCisJcGFkZHcJeG1tNSxbR09UT0ZGKGVieCxQV19ERVNDQUxFX1AyWCldCisJcHNyYXcJeG1tNyxQQVNTMV9CSVRTCQk7IHhtbTc9ZGF0YTAKKwlwc3Jhdwl4bW01LFBBU1MxX0JJVFMJCTsgeG1tNT1kYXRhNAorCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTUKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKKwk7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OworCTsgZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7CisJOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKworCW1vdmRxYSAgICB4bW00LHhtbTEJCTsgeG1tMT10bXAxMworCW1vdmRxYSAgICB4bW0yLHhtbTEKKwlwdW5wY2tsd2QgeG1tNCx4bW02CQk7IHhtbTY9dG1wMTIKKwlwdW5wY2tod2QgeG1tMix4bW02CisJbW92ZHFhICAgIHhtbTEseG1tNAorCW1vdmRxYSAgICB4bW02LHhtbTIKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IHhtbTQ9ZGF0YTJMCisJcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyB4bW0yPWRhdGEySAorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IHhtbTE9ZGF0YTZMCisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgeG1tNj1kYXRhNkgKKworCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcGFkZGQJeG1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwc3JhZAl4bW00LERFU0NBTEVfUDIKKwlwc3JhZAl4bW0yLERFU0NBTEVfUDIKKwlwYWRkZAl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBhZGRkCXhtbTYsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcHNyYWQJeG1tMSxERVNDQUxFX1AyCisJcHNyYWQJeG1tNixERVNDQUxFX1AyCisKKwlwYWNrc3NkdyAgeG1tNCx4bW0yCQk7IHhtbTQ9ZGF0YTIKKwlwYWNrc3NkdyAgeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTYKKworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTQKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz10bXA2CisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9dG1wNworCisJbW92ZHFhCXhtbTIseG1tMAkJOyB4bW0wPXRtcDQKKwltb3ZkcWEJeG1tNix4bW0zCQk7IHhtbTM9dG1wNQorCXBhZGR3CXhtbTIseG1tNwkJOyB4bW0yPXozCisJcGFkZHcJeG1tNix4bW01CQk7IHhtbTY9ejQKKworCTsgKE9yaWdpbmFsKQorCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKwk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworCTsgejMgKz0gejU7ICB6NCArPSB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKwltb3ZkcWEgICAgeG1tNCx4bW0yCisJbW92ZHFhICAgIHhtbTEseG1tMgorCXB1bnBja2x3ZCB4bW00LHhtbTYKKwlwdW5wY2tod2QgeG1tMSx4bW02CisJbW92ZHFhICAgIHhtbTIseG1tNAorCW1vdmRxYSAgICB4bW02LHhtbTEKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyB4bW00PXozTAorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IHhtbTE9ejNICisJcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyB4bW0yPXo0TAorCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgeG1tNj16NEgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT16M0wKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0xCTsgd2soMSk9ejNICisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworCTsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisJOyB0bXA2ID0gdG1wNiAqIDMuMDcyNzExMDI2OyAgdG1wNyA9IHRtcDcgKiAxLjUwMTMyMTExMDsKKwk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworCTsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDQgPSB0bXA0ICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wNyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDcgPSB0bXA0ICogLTAuODk5OTc2MjIzICsgdG1wNyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OworCisJbW92ZHFhICAgIHhtbTQseG1tMAorCW1vdmRxYSAgICB4bW0xLHhtbTAKKwlwdW5wY2tsd2QgeG1tNCx4bW01CisJcHVucGNraHdkIHhtbTEseG1tNQorCW1vdmRxYSAgICB4bW0wLHhtbTQKKwltb3ZkcWEgICAgeG1tNSx4bW0xCisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTQ9dG1wNEwKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgeG1tMT10bXA0SAorCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IHhtbTA9dG1wN0wKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW01PXRtcDdICisKKwlwYWRkZAl4bW00LCBYTU1XT1JEIFt3aygwKV0JOyB4bW00PWRhdGE3TAorCXBhZGRkCXhtbTEsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTE9ZGF0YTdICisJcGFkZGQJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTFMCisJcGFkZGQJeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTFICisKKwlwYWRkZAl4bW00LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBhZGRkCXhtbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcHNyYWQJeG1tNCxERVNDQUxFX1AyCisJcHNyYWQJeG1tMSxERVNDQUxFX1AyCisJcGFkZGQJeG1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwYWRkZAl4bW01LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBzcmFkCXhtbTAsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTUsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIHhtbTQseG1tMQkJOyB4bW00PWRhdGE3CisJcGFja3NzZHcgIHhtbTAseG1tNQkJOyB4bW0wPWRhdGExCisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW00CisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMAorCisJbW92ZHFhICAgIHhtbTEseG1tMworCW1vdmRxYSAgICB4bW01LHhtbTMKKwlwdW5wY2tsd2QgeG1tMSx4bW03CisJcHVucGNraHdkIHhtbTUseG1tNworCW1vdmRxYSAgICB4bW0zLHhtbTEKKwltb3ZkcWEgICAgeG1tNyx4bW01CisJcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IHhtbTE9dG1wNUwKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgeG1tNT10bXA1SAorCXBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IHhtbTM9dG1wNkwKKwlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyB4bW03PXRtcDZICisKKwlwYWRkZAl4bW0xLHhtbTIJCTsgeG1tMT1kYXRhNUwKKwlwYWRkZAl4bW01LHhtbTYJCTsgeG1tNT1kYXRhNUgKKwlwYWRkZAl4bW0zLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0zPWRhdGEzTAorCXBhZGRkCXhtbTcsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTc9ZGF0YTNICisKKwlwYWRkZAl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBhZGRkCXhtbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcHNyYWQJeG1tMSxERVNDQUxFX1AyCisJcHNyYWQJeG1tNSxERVNDQUxFX1AyCisJcGFkZGQJeG1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwYWRkZAl4bW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBzcmFkCXhtbTMsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTcsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIHhtbTEseG1tNQkJOyB4bW0xPWRhdGE1CisJcGFja3NzZHcgIHhtbTMseG1tNwkJOyB4bW0zPWRhdGEzCisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMworCis7CXBvcAllZGkJCTsgdW51c2VkCis7CXBvcAllc2kJCTsgdW51c2VkCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgdW51c2VkCisJcG9wcGljCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSkZEQ1RfSU5UX1NTRTJfU1VQUE9SVEVECislZW5kaWYgOyBEQ1RfSVNMT1dfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qZnNzZWZsdC5hc20gYi9qZnNzZWZsdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMDk3MwotLS0gL2Rldi9udWxsCisrKyBiL2pmc3NlZmx0LmFzbQpAQCAtMCwwICsxLDM4MyBAQAorOworOyBqZnNzZWZsdC5hc20gLSBmbG9hdGluZy1wb2ludCBGRENUIChTU0UpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmxvYXRpbmctcG9pbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZvcndhcmQgRENUCis7IChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkIGRpcmVjdGx5IG9uCis7IHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGZsdC5jOyBzZWUgdGhlIGpmZGN0Zmx0LmMgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgTGFzdCBNb2RpZmllZCA6IEZlYnJ1YXJ5IDQsIDIwMDYKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKyVpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECislaWZkZWYgSkZEQ1RfRkxUX1NTRV9NTVhfU1VQUE9SVEVECislZGVmaW5lIEpGRENUX0ZMVF9TU0VfU1VQUE9SVEVECislZW5kaWYKKyVpZmRlZiBKRkRDVF9GTFRfU1NFX1NTRTJfU1VQUE9SVEVECislZGVmaW5lIEpGRENUX0ZMVF9TU0VfU1VQUE9SVEVECislZW5kaWYKKyVpZmRlZiBKRkRDVF9GTFRfU1NFX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislbWFjcm8JdW5wY2tscHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDAgMSA0IDUpCisJc2h1ZnBzCSUxLCUyLDB4NDQKKyVlbmRtYWNybworCislbWFjcm8JdW5wY2tocHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDIgMyA2IDcpCisJc2h1ZnBzCSUxLCUyLDB4RUUKKyVlbmRtYWNybworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkKKworRVhUTihqY29uc3RfZmRjdF9mbG9hdF9zc2UpOgorCitQRF8wXzM4Mgl0aW1lcyA0IGRkICAwLjM4MjY4MzQzMjM2NTA4OTc3MTcyODQ2MAorUERfMF83MDcJdGltZXMgNCBkZCAgMC43MDcxMDY3ODExODY1NDc1MjQ0MDA4NDQKK1BEXzBfNTQxCXRpbWVzIDQgZGQgIDAuNTQxMTk2MTAwMTQ2MTk2OTg0Mzk5NzIzCitQRF8xXzMwNgl0aW1lcyA0IGRkICAxLjMwNjU2Mjk2NDg3NjM3NjUyNzg1NjY0MworCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfZmRjdF9mbG9hdF9zc2UgKEZBU1RfRkxPQVQgKiBkYXRhKQorOworCislZGVmaW5lIGRhdGEoYikJCShiKSs4CQk7IEZBU1RfRkxPQVQgKiBkYXRhCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2ZkY3RfZmxvYXRfc3NlKQorCitFWFROKGpwZWdfZmRjdF9mbG9hdF9zc2UpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3aygwKV0KKwlwdXNocGljCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZXNpCQk7IHVudXNlZAorOwlwdXNoCWVkaQkJOyB1bnVzZWQKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChGQVNUX0ZMT0FUICopCisJbW92CWVjeCwgRENUU0laRS80CisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCisJbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMiwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJOyB4bW0wPSgyMCAyMSAyMiAyMyksIHhtbTI9KDI0IDI1IDI2IDI3KQorCTsgeG1tMT0oMzAgMzEgMzIgMzMpLCB4bW0zPSgzNCAzNSAzNiAzNykKKworCW1vdmFwcyAgIHhtbTQseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMCx4bW0xCQk7IHhtbTA9KDIwIDMwIDIxIDMxKQorCXVucGNraHBzIHhtbTQseG1tMQkJOyB4bW00PSgyMiAzMiAyMyAzMykKKwltb3ZhcHMgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzIHhtbTIseG1tMwkJOyB4bW0yPSgyNCAzNCAyNSAzNSkKKwl1bnBja2hwcyB4bW01LHhtbTMJCTsgeG1tNT0oMjYgMzYgMjcgMzcpCisKKwltb3ZhcHMJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IHhtbTY9KDAwIDAxIDAyIDAzKSwgeG1tMT0oMDQgMDUgMDYgMDcpCisJOyB4bW03PSgxMCAxMSAxMiAxMyksIHhtbTM9KDE0IDE1IDE2IDE3KQorCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPSgyMiAzMiAyMyAzMykKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW0yCTsgd2soMSk9KDI0IDM0IDI1IDM1KQorCisJbW92YXBzICAgeG1tNCx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMDEgMTEpCisJdW5wY2tocHMgeG1tNCx4bW03CQk7IHhtbTQ9KDAyIDEyIDAzIDEzKQorCW1vdmFwcyAgIHhtbTIseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMSx4bW0zCQk7IHhtbTE9KDA0IDE0IDA1IDE1KQorCXVucGNraHBzIHhtbTIseG1tMwkJOyB4bW0yPSgwNiAxNiAwNyAxNykKKworCW1vdmFwcyAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW02LHhtbTAJCTsgeG1tNj0oMDAgMTAgMjAgMzApPWRhdGEwCisJdW5wY2tocHMyIHhtbTcseG1tMAkJOyB4bW03PSgwMSAxMSAyMSAzMSk9ZGF0YTEKKwltb3ZhcHMgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tMix4bW01CQk7IHhtbTI9KDA2IDE2IDI2IDM2KT1kYXRhNgorCXVucGNraHBzMiB4bW0zLHhtbTUJCTsgeG1tMz0oMDcgMTcgMjcgMzcpPWRhdGE3CisKKwltb3ZhcHMJeG1tMCx4bW03CisJbW92YXBzCXhtbTUseG1tNgorCXN1YnBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGExLWRhdGE2PXRtcDYKKwlzdWJwcwl4bW02LHhtbTMJCTsgeG1tNj1kYXRhMC1kYXRhNz10bXA3CisJYWRkcHMJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTErZGF0YTY9dG1wMQorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0yPSgyMiAzMiAyMyAzMykKKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz0oMjQgMzQgMjUgMzUpCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPXRtcDYKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9dG1wNworCisJbW92YXBzICAgIHhtbTcseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTQseG1tMgkJOyB4bW00PSgwMiAxMiAyMiAzMik9ZGF0YTIKKwl1bnBja2hwczIgeG1tNyx4bW0yCQk7IHhtbTc9KDAzIDEzIDIzIDMzKT1kYXRhMworCW1vdmFwcyAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW0xLHhtbTMJCTsgeG1tMT0oMDQgMTQgMjQgMzQpPWRhdGE0CisJdW5wY2tocHMyIHhtbTYseG1tMwkJOyB4bW02PSgwNSAxNSAyNSAzNSk9ZGF0YTUKKworCW1vdmFwcwl4bW0yLHhtbTcKKwltb3ZhcHMJeG1tMyx4bW00CisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9ZGF0YTMrZGF0YTQ9dG1wMworCWFkZHBzCXhtbTQseG1tNgkJOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKKwlzdWJwcwl4bW0yLHhtbTEJCTsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisJc3VicHMJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmFwcwl4bW0xLHhtbTUKKwltb3ZhcHMJeG1tNix4bW0wCisJc3VicHMJeG1tNSx4bW03CQk7IHhtbTU9dG1wMTMKKwlzdWJwcwl4bW0wLHhtbTQJCTsgeG1tMD10bXAxMgorCWFkZHBzCXhtbTEseG1tNwkJOyB4bW0xPXRtcDEwCisJYWRkcHMJeG1tNix4bW00CQk7IHhtbTY9dG1wMTEKKworCWFkZHBzCXhtbTAseG1tNQorCW11bHBzCXhtbTAsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IHhtbTA9ejEKKworCW1vdmFwcwl4bW03LHhtbTEKKwltb3ZhcHMJeG1tNCx4bW01CisJc3VicHMJeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTQKKwlzdWJwcwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhNgorCWFkZHBzCXhtbTcseG1tNgkJOyB4bW03PWRhdGEwCisJYWRkcHMJeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTIKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmFwcwl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PXRtcDYKKwltb3ZhcHMJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD10bXA3CisKKwlhZGRwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXAxMAorCWFkZHBzCXhtbTMseG1tNgkJOyB4bW0zPXRtcDExCisJYWRkcHMJeG1tNix4bW0wCQk7IHhtbTY9dG1wMTIsIHhtbTA9dG1wNworCisJbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgeG1tMz16MworCisJbW92YXBzCXhtbTEseG1tMgkJOyB4bW0xPXRtcDEwCisJc3VicHMJeG1tMix4bW02CisJbXVscHMJeG1tMixbR09UT0ZGKGVieCxQRF8wXzM4MildIDsgeG1tMj16NQorCW11bHBzCXhtbTEsW0dPVE9GRihlYngsUERfMF81NDEpXSA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorCW11bHBzCXhtbTYsW0dPVE9GRihlYngsUERfMV8zMDYpXSA7IHhtbTY9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQorCWFkZHBzCXhtbTEseG1tMgkJOyB4bW0xPXoyCisJYWRkcHMJeG1tNix4bW0yCQk7IHhtbTY9ejQKKworCW1vdmFwcwl4bW01LHhtbTAKKwlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD16MTMKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT16MTEKKworCW1vdmFwcwl4bW03LHhtbTAKKwltb3ZhcHMJeG1tNCx4bW01CisJc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTMKKwlzdWJwcwl4bW01LHhtbTYJCTsgeG1tNT1kYXRhNworCWFkZHBzCXhtbTcseG1tMQkJOyB4bW03PWRhdGE1CisJYWRkcHMJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTEKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworCWFkZAllZHgsIDQqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorCWRlYwllY3gKKwlqbnoJbmVhciAucm93bG9vcAorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChGQVNUX0ZMT0FUICopCisJbW92CWVjeCwgRENUU0laRS80CisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorCisJbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJOyB4bW0wPSgwMiAxMiAyMiAzMiksIHhtbTI9KDQyIDUyIDYyIDcyKQorCTsgeG1tMT0oMDMgMTMgMjMgMzMpLCB4bW0zPSg0MyA1MyA2MyA3MykKKworCW1vdmFwcyAgIHhtbTQseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMCx4bW0xCQk7IHhtbTA9KDAyIDAzIDEyIDEzKQorCXVucGNraHBzIHhtbTQseG1tMQkJOyB4bW00PSgyMiAyMyAzMiAzMykKKwltb3ZhcHMgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzIHhtbTIseG1tMwkJOyB4bW0yPSg0MiA0MyA1MiA1MykKKwl1bnBja2hwcyB4bW01LHhtbTMJCTsgeG1tNT0oNjIgNjMgNzIgNzMpCisKKwltb3ZhcHMJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IHhtbTY9KDAwIDEwIDIwIDMwKSwgeG1tMT0oNDAgNTAgNjAgNzApCisJOyB4bW03PSgwMSAxMSAyMSAzMSksIHhtbTM9KDQxIDUxIDYxIDcxKQorCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPSgyMiAyMyAzMiAzMykKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW0yCTsgd2soMSk9KDQyIDQzIDUyIDUzKQorCisJbW92YXBzICAgeG1tNCx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMDEgMTAgMTEpCisJdW5wY2tocHMgeG1tNCx4bW03CQk7IHhtbTQ9KDIwIDIxIDMwIDMxKQorCW1vdmFwcyAgIHhtbTIseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMSx4bW0zCQk7IHhtbTE9KDQwIDQxIDUwIDUxKQorCXVucGNraHBzIHhtbTIseG1tMwkJOyB4bW0yPSg2MCA2MSA3MCA3MSkKKworCW1vdmFwcyAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW02LHhtbTAJCTsgeG1tNj0oMDAgMDEgMDIgMDMpPWRhdGEwCisJdW5wY2tocHMyIHhtbTcseG1tMAkJOyB4bW03PSgxMCAxMSAxMiAxMyk9ZGF0YTEKKwltb3ZhcHMgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tMix4bW01CQk7IHhtbTI9KDYwIDYxIDYyIDYzKT1kYXRhNgorCXVucGNraHBzMiB4bW0zLHhtbTUJCTsgeG1tMz0oNzAgNzEgNzIgNzMpPWRhdGE3CisKKwltb3ZhcHMJeG1tMCx4bW03CisJbW92YXBzCXhtbTUseG1tNgorCXN1YnBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGExLWRhdGE2PXRtcDYKKwlzdWJwcwl4bW02LHhtbTMJCTsgeG1tNj1kYXRhMC1kYXRhNz10bXA3CisJYWRkcHMJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTErZGF0YTY9dG1wMQorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0yPSgyMiAyMyAzMiAzMykKKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz0oNDIgNDMgNTIgNTMpCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPXRtcDYKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9dG1wNworCisJbW92YXBzICAgIHhtbTcseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTQseG1tMgkJOyB4bW00PSgyMCAyMSAyMiAyMyk9ZGF0YTIKKwl1bnBja2hwczIgeG1tNyx4bW0yCQk7IHhtbTc9KDMwIDMxIDMyIDMzKT1kYXRhMworCW1vdmFwcyAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW0xLHhtbTMJCTsgeG1tMT0oNDAgNDEgNDIgNDMpPWRhdGE0CisJdW5wY2tocHMyIHhtbTYseG1tMwkJOyB4bW02PSg1MCA1MSA1MiA1Myk9ZGF0YTUKKworCW1vdmFwcwl4bW0yLHhtbTcKKwltb3ZhcHMJeG1tMyx4bW00CisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9ZGF0YTMrZGF0YTQ9dG1wMworCWFkZHBzCXhtbTQseG1tNgkJOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKKwlzdWJwcwl4bW0yLHhtbTEJCTsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisJc3VicHMJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmFwcwl4bW0xLHhtbTUKKwltb3ZhcHMJeG1tNix4bW0wCisJc3VicHMJeG1tNSx4bW03CQk7IHhtbTU9dG1wMTMKKwlzdWJwcwl4bW0wLHhtbTQJCTsgeG1tMD10bXAxMgorCWFkZHBzCXhtbTEseG1tNwkJOyB4bW0xPXRtcDEwCisJYWRkcHMJeG1tNix4bW00CQk7IHhtbTY9dG1wMTEKKworCWFkZHBzCXhtbTAseG1tNQorCW11bHBzCXhtbTAsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IHhtbTA9ejEKKworCW1vdmFwcwl4bW03LHhtbTEKKwltb3ZhcHMJeG1tNCx4bW01CisJc3VicHMJeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTQKKwlzdWJwcwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhNgorCWFkZHBzCXhtbTcseG1tNgkJOyB4bW03PWRhdGEwCisJYWRkcHMJeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTIKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmFwcwl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PXRtcDYKKwltb3ZhcHMJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD10bXA3CisKKwlhZGRwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXAxMAorCWFkZHBzCXhtbTMseG1tNgkJOyB4bW0zPXRtcDExCisJYWRkcHMJeG1tNix4bW0wCQk7IHhtbTY9dG1wMTIsIHhtbTA9dG1wNworCisJbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgeG1tMz16MworCisJbW92YXBzCXhtbTEseG1tMgkJOyB4bW0xPXRtcDEwCisJc3VicHMJeG1tMix4bW02CisJbXVscHMJeG1tMixbR09UT0ZGKGVieCxQRF8wXzM4MildIDsgeG1tMj16NQorCW11bHBzCXhtbTEsW0dPVE9GRihlYngsUERfMF81NDEpXSA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorCW11bHBzCXhtbTYsW0dPVE9GRihlYngsUERfMV8zMDYpXSA7IHhtbTY9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQorCWFkZHBzCXhtbTEseG1tMgkJOyB4bW0xPXoyCisJYWRkcHMJeG1tNix4bW0yCQk7IHhtbTY9ejQKKworCW1vdmFwcwl4bW01LHhtbTAKKwlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD16MTMKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT16MTEKKworCW1vdmFwcwl4bW03LHhtbTAKKwltb3ZhcHMJeG1tNCx4bW01CisJc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTMKKwlzdWJwcwl4bW01LHhtbTYJCTsgeG1tNT1kYXRhNworCWFkZHBzCXhtbTcseG1tMQkJOyB4bW03PWRhdGE1CisJYWRkcHMJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTEKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworCWFkZAllZHgsIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVAorCWRlYwllY3gKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCis7CXBvcAllZGkJCTsgdW51c2VkCis7CXBvcAllc2kJCTsgdW51c2VkCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wcGljCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSkZEQ1RfRkxUX1NTRV9TVVBQT1JURUQKKyVlbmRpZiA7IERDVF9GTE9BVF9TVVBQT1JURUQKZGlmZiAtLWdpdCBhL2ppM2RuZmx0LmFzbSBiL2ppM2RuZmx0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzMxZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvamkzZG5mbHQuYXNtCkBAIC0wLDAgKzEsNDYyIEBACis7Cis7IGppM2RuZmx0LmFzbSAtIGZsb2F0aW5nLXBvaW50IElEQ1QgKDNETm93ISAmIE1NWCkKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW52ZXJzZSBEQ1QKKzsgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24KKzsgdGhlIElKRydzIG9yaWdpbmFsIGppZGN0Zmx0LmM7IHNlZSB0aGUgamlkY3RmbHQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBMYXN0IE1vZGlmaWVkIDogRmVicnVhcnkgNCwgMjAwNgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyVpZmRlZiBKSURDVF9GTFRfM0ROT1dfTU1YX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKwlhbGlnbnoJMTYKKwlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9mbG9hdF8zZG5vdykKKworRVhUTihqY29uc3RfaWRjdF9mbG9hdF8zZG5vdyk6CisKK1BEXzFfNDE0CXRpbWVzIDIgZGQgIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODAxNjg5CitQRF8xXzg0Nwl0aW1lcyAyIGRkICAxLjg0Nzc1OTA2NTAyMjU3MzUxMjI1NjM2NgorUERfMV8wODIJdGltZXMgMiBkZCAgMS4wODIzOTIyMDAyOTIzOTM5Njg3OTk0NDYKK1BEXzJfNjEzCXRpbWVzIDIgZGQgIDIuNjEzMTI1OTI5NzUyNzUzMDU1NzEzMjg2CitQRF9STkRJTlRfTUFHSUMJdGltZXMgMiBkZCAgMTAwNjYzMjk2LjAJOyAoZmxvYXQpKDB4MDBDMDAwMDAgPDwgMykKK1BCX0NFTlRFUkpTQU1QCXRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfaWRjdF9mbG9hdF8zZG5vdyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworJWRlZmluZSBjaW5mbyhiKQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGNvbXBwdHIoYikJKGIpKzEyCQk7IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCislZGVmaW5lIGNvZWZfYmxvY2soYikJKGIpKzE2CQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikJKGIpKzI0CQk7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JECTsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIHdvcmtzcGFjZQl3aygwKS1EQ1RTSVpFMipTSVpFT0ZfRkFTVF9GTE9BVAorCQkJCQk7IEZBU1RfRkxPQVQgd29ya3NwYWNlW0RDVFNJWkUyXQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2lkY3RfZmxvYXRfM2Rub3cpCisKK0VYVE4oanBlZ19pZGN0X2Zsb2F0XzNkbm93KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3dvcmtzcGFjZV0KKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgorCis7CW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbW92CWVkeCwgUE9JTlRFUiBbY29tcHB0cihlYXgpXQorCW1vdgllZHgsIFBPSU5URVIgW2pjb21waW5mb19kY3RfdGFibGUoZWR4KV0JOyBxdWFudHB0cgorCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCisJbGVhCWVkaSwgW3dvcmtzcGFjZV0JCQk7IEZBU1RfRkxPQVQgKiB3c3B0cgorCW1vdgllY3gsIERDVFNJWkUvMgkJCQk7IGN0cgorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9GTE9BVF8zRE5PVworCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJcHVzaHBpYwllYngJCTsgc2F2ZSBHT1QgYWRkcmVzcworCW1vdgllYngsIERXT1JEIFtEV0JMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3YJZWF4LCBEV09SRCBbRFdCTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJZWJ4LCBEV09SRCBbRFdCTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJZWF4LCBEV09SRCBbRFdCTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJZWJ4LCBEV09SRCBbRFdCTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJZWF4LGVieAorCXBvcHBpYwllYngJCTsgcmVzdG9yZSBHT1QgYWRkcmVzcworCWpueglzaG9ydCAuY29sdW1uRENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKwltb3ZkICAgICAgbW0wLCBEV09SRCBbRFdCTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisKKwlwdW5wY2tsd2QgbW0wLG1tMAorCXBzcmFkICAgICBtbTAsKERXT1JEX0JJVC1XT1JEX0JJVCkKKwlwaTJmZCAgICAgbW0wLG1tMAorCisJcGZtdWwgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwltb3ZxICAgICAgbW0xLG1tMAorCXB1bnBja2xkcSBtbTAsbW0wCisJcHVucGNraGRxIG1tMSxtbTEKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDIsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMyxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKwlqbXAJbmVhciAubmV4dGNvbHVtbgorCWFsaWdueAkxNiw3CislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92ZCAgICAgIG1tMCwgRFdPUkQgW0RXQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmQgICAgICBtbTEsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkICAgICAgbW0yLCBEV09SRCBbRFdCTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZCAgICAgIG1tMywgRFdPUkQgW0RXQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisJcHVucGNrbHdkIG1tMCxtbTAKKwlwdW5wY2tsd2QgbW0xLG1tMQorCXBzcmFkICAgICBtbTAsKERXT1JEX0JJVC1XT1JEX0JJVCkKKwlwc3JhZCAgICAgbW0xLChEV09SRF9CSVQtV09SRF9CSVQpCisJcGkyZmQgICAgIG1tMCxtbTAKKwlwaTJmZCAgICAgbW0xLG1tMQorCisJcGZtdWwgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJcGZtdWwgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwlwdW5wY2tsd2QgbW0yLG1tMgorCXB1bnBja2x3ZCBtbTMsbW0zCisJcHNyYWQgICAgIG1tMiwoRFdPUkRfQklULVdPUkRfQklUKQorCXBzcmFkICAgICBtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkKKwlwaTJmZCAgICAgbW0yLG1tMgorCXBpMmZkICAgICBtbTMsbW0zCisKKwlwZm11bCAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwlwZm11bCAgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworCW1vdnEJbW00LG1tMAorCW1vdnEJbW01LG1tMQorCXBmc3ViCW1tMCxtbTIJCQk7IG1tMD10bXAxMQorCXBmc3ViCW1tMSxtbTMKKwlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9dG1wMTAKKwlwZmFkZAltbTUsbW0zCQkJOyBtbTU9dG1wMTMKKworCXBmbXVsCW1tMSxbR09UT0ZGKGVieCxQRF8xXzQxNCldCisJcGZzdWIJbW0xLG1tNQkJCTsgbW0xPXRtcDEyCisKKwltb3ZxCW1tNixtbTQKKwltb3ZxCW1tNyxtbTAKKwlwZnN1YgltbTQsbW01CQkJOyBtbTQ9dG1wMworCXBmc3ViCW1tMCxtbTEJCQk7IG1tMD10bXAyCisJcGZhZGQJbW02LG1tNQkJCTsgbW02PXRtcDAKKwlwZmFkZAltbTcsbW0xCQkJOyBtbTc9dG1wMQorCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW00CTsgdG1wMworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tMAk7IHRtcDIKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmQgICAgICBtbTIsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkICAgICAgbW0zLCBEV09SRCBbRFdCTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZCAgICAgIG1tNSwgRFdPUkQgW0RXQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmQgICAgICBtbTEsIERXT1JEIFtEV0JMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCXB1bnBja2x3ZCBtbTIsbW0yCisJcHVucGNrbHdkIG1tMyxtbTMKKwlwc3JhZCAgICAgbW0yLChEV09SRF9CSVQtV09SRF9CSVQpCisJcHNyYWQgICAgIG1tMywoRFdPUkRfQklULVdPUkRfQklUKQorCXBpMmZkICAgICBtbTIsbW0yCisJcGkyZmQgICAgIG1tMyxtbTMKKworCXBmbXVsICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCXBmbXVsICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisJcHVucGNrbHdkIG1tNSxtbTUKKwlwdW5wY2tsd2QgbW0xLG1tMQorCXBzcmFkICAgICBtbTUsKERXT1JEX0JJVC1XT1JEX0JJVCkKKwlwc3JhZCAgICAgbW0xLChEV09SRF9CSVQtV09SRF9CSVQpCisJcGkyZmQgICAgIG1tNSxtbTUKKwlwaTJmZCAgICAgbW0xLG1tMQorCisJcGZtdWwgICAgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJcGZtdWwgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwltb3ZxCW1tNCxtbTIKKwltb3ZxCW1tMCxtbTUKKwlwZmFkZAltbTIsbW0xCQkJOyBtbTI9ejExCisJcGZhZGQJbW01LG1tMwkJCTsgbW01PXoxMworCXBmc3ViCW1tNCxtbTEJCQk7IG1tND16MTIKKwlwZnN1YgltbTAsbW0zCQkJOyBtbTA9ejEwCisKKwltb3ZxCW1tMSxtbTIKKwlwZnN1YgltbTIsbW01CisJcGZhZGQJbW0xLG1tNQkJCTsgbW0xPXRtcDcKKworCXBmbXVsCW1tMixbR09UT0ZGKGVieCxQRF8xXzQxNCldCTsgbW0yPXRtcDExCisKKwltb3ZxCW1tMyxtbTAKKwlwZmFkZAltbTAsbW00CisJcGZtdWwJbW0wLFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0JOyBtbTA9ejUKKwlwZm11bAltbTMsW0dPVE9GRihlYngsUERfMl82MTMpXQk7IG1tMz0oejEwICogMi42MTMxMjU5MzApCisJcGZtdWwJbW00LFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0JOyBtbTQ9KHoxMiAqIDEuMDgyMzkyMjAwKQorCXBmc3VicgltbTMsbW0wCQkJOyBtbTM9dG1wMTIKKwlwZnN1YgltbTQsbW0wCQkJOyBtbTQ9dG1wMTAKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlwZnN1YgltbTMsbW0xCQkJOyBtbTM9dG1wNgorCW1vdnEJbW01LG1tNgorCW1vdnEJbW0wLG1tNworCXBmYWRkCW1tNixtbTEJCQk7IG1tNj1kYXRhMD0oMDAgMDEpCisJcGZhZGQJbW03LG1tMwkJCTsgbW03PWRhdGExPSgxMCAxMSkKKwlwZnN1YgltbTUsbW0xCQkJOyBtbTU9ZGF0YTc9KDcwIDcxKQorCXBmc3ViCW1tMCxtbTMJCQk7IG1tMD1kYXRhNj0oNjAgNjEpCisJcGZzdWIJbW0yLG1tMwkJCTsgbW0yPXRtcDUKKworCW1vdnEgICAgICBtbTEsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKwlwdW5wY2tsZHEgbW02LG1tNwkJOyBtbTY9KDAwIDEwKQorCXB1bnBja2hkcSBtbTEsbW03CQk7IG1tMT0oMDEgMTEpCisJbW92cSAgICAgIG1tMyxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworCXB1bnBja2xkcSBtbTAsbW01CQk7IG1tMD0oNjAgNzApCisJcHVucGNraGRxIG1tMyxtbTUJCTsgbW0zPSg2MSA3MSkKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW02CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDMsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMyxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0zCisKKwltb3ZxCW1tNywgTU1XT1JEIFt3aygwKV0JOyBtbTc9dG1wMgorCW1vdnEJbW01LCBNTVdPUkQgW3drKDEpXQk7IG1tNT10bXAzCisKKwlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9dG1wNAorCW1vdnEJbW02LG1tNworCW1vdnEJbW0xLG1tNQorCXBmYWRkCW1tNyxtbTIJCQk7IG1tNz1kYXRhMj0oMjAgMjEpCisJcGZhZGQJbW01LG1tNAkJCTsgbW01PWRhdGE0PSg0MCA0MSkKKwlwZnN1YgltbTYsbW0yCQkJOyBtbTY9ZGF0YTU9KDUwIDUxKQorCXBmc3ViCW1tMSxtbTQJCQk7IG1tMT1kYXRhMz0oMzAgMzEpCisKKwltb3ZxICAgICAgbW0wLG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisJcHVucGNrbGRxIG1tNyxtbTEJCTsgbW03PSgyMCAzMCkKKwlwdW5wY2toZHEgbW0wLG1tMQkJOyBtbTA9KDIxIDMxKQorCW1vdnEgICAgICBtbTMsbW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKwlwdW5wY2tsZHEgbW01LG1tNgkJOyBtbTU9KDQwIDUwKQorCXB1bnBja2hkcSBtbTMsbW02CQk7IG1tMz0oNDEgNTEpCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTUKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDIsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMworCisubmV4dGNvbHVtbjoKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX0pDT0VGCQk7IGNvZWZfYmxvY2sKKwlhZGQJZWR4LCBieXRlIDIqU0laRU9GX0ZMT0FUX01VTFRfVFlQRQk7IHF1YW50cHRyCisJYWRkCWVkaSwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQJOyB3c3B0cgorCWRlYwllY3gJCQkJCTsgY3RyCisJam56CW5lYXIgLmNvbHVtbmxvb3AKKworCTsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKKworCXByZWZldGNoIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMCozMl0KKwlwcmVmZXRjaCBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDEqMzJdCisJcHJlZmV0Y2ggW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAyKjMyXQorCXByZWZldGNoIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMyozMl0KKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwlsZWEJZXNpLCBbd29ya3NwYWNlXQkJCTsgRkFTVF9GTE9BVCAqIHdzcHRyCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQk7IChKU0FNUFJPVyAqKQorCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KKwltb3YJZWN4LCBEQ1RTSVpFLzIJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCW1vdnEJbW00LG1tMAorCW1vdnEJbW01LG1tMQorCXBmc3ViCW1tMCxtbTIJCQk7IG1tMD10bXAxMQorCXBmc3ViCW1tMSxtbTMKKwlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9dG1wMTAKKwlwZmFkZAltbTUsbW0zCQkJOyBtbTU9dG1wMTMKKworCXBmbXVsCW1tMSxbR09UT0ZGKGVieCxQRF8xXzQxNCldCisJcGZzdWIJbW0xLG1tNQkJCTsgbW0xPXRtcDEyCisKKwltb3ZxCW1tNixtbTQKKwltb3ZxCW1tNyxtbTAKKwlwZnN1YgltbTQsbW01CQkJOyBtbTQ9dG1wMworCXBmc3ViCW1tMCxtbTEJCQk7IG1tMD10bXAyCisJcGZhZGQJbW02LG1tNQkJCTsgbW02PXRtcDAKKwlwZmFkZAltbTcsbW0xCQkJOyBtbTc9dG1wMQorCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW00CTsgdG1wMworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tMAk7IHRtcDIKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwltb3ZxCW1tNCxtbTIKKwltb3ZxCW1tMCxtbTUKKwlwZmFkZAltbTIsbW0xCQkJOyBtbTI9ejExCisJcGZhZGQJbW01LG1tMwkJCTsgbW01PXoxMworCXBmc3ViCW1tNCxtbTEJCQk7IG1tND16MTIKKwlwZnN1YgltbTAsbW0zCQkJOyBtbTA9ejEwCisKKwltb3ZxCW1tMSxtbTIKKwlwZnN1YgltbTIsbW01CisJcGZhZGQJbW0xLG1tNQkJCTsgbW0xPXRtcDcKKworCXBmbXVsCW1tMixbR09UT0ZGKGVieCxQRF8xXzQxNCldCTsgbW0yPXRtcDExCisKKwltb3ZxCW1tMyxtbTAKKwlwZmFkZAltbTAsbW00CisJcGZtdWwJbW0wLFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0JOyBtbTA9ejUKKwlwZm11bAltbTMsW0dPVE9GRihlYngsUERfMl82MTMpXQk7IG1tMz0oejEwICogMi42MTMxMjU5MzApCisJcGZtdWwJbW00LFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0JOyBtbTQ9KHoxMiAqIDEuMDgyMzkyMjAwKQorCXBmc3VicgltbTMsbW0wCQkJOyBtbTM9dG1wMTIKKwlwZnN1YgltbTQsbW0wCQkJOyBtbTQ9dG1wMTAKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlwZnN1YgltbTMsbW0xCQkJOyBtbTM9dG1wNgorCW1vdnEJbW01LG1tNgorCW1vdnEJbW0wLG1tNworCXBmYWRkCW1tNixtbTEJCQk7IG1tNj1kYXRhMD0oMDAgMTApCisJcGZhZGQJbW03LG1tMwkJCTsgbW03PWRhdGExPSgwMSAxMSkKKwlwZnN1YgltbTUsbW0xCQkJOyBtbTU9ZGF0YTc9KDA3IDE3KQorCXBmc3ViCW1tMCxtbTMJCQk7IG1tMD1kYXRhNj0oMDYgMTYpCisJcGZzdWIJbW0yLG1tMwkJCTsgbW0yPXRtcDUKKworCW1vdnEJbW0xLFtHT1RPRkYoZWJ4LFBEX1JORElOVF9NQUdJQyldCTsgbW0xPVtQRF9STkRJTlRfTUFHSUNdCisJcGNtcGVxZAltbTMsbW0zCisJcHNybGQJbW0zLFdPUkRfQklUCQk7IG1tMz17MHhGRkZGIDB4MDAwMCAweEZGRkYgMHgwMDAwfQorCisJcGZhZGQJbW02LG1tMQkJCTsgbW02PXJvdW5kaW50KGRhdGEwLzgpPSgwMCAqKiAxMCAqKikKKwlwZmFkZAltbTcsbW0xCQkJOyBtbTc9cm91bmRpbnQoZGF0YTEvOCk9KDAxICoqIDExICoqKQorCXBmYWRkCW1tMCxtbTEJCQk7IG1tMD1yb3VuZGludChkYXRhNi84KT0oMDYgKiogMTYgKiopCisJcGZhZGQJbW01LG1tMQkJCTsgbW01PXJvdW5kaW50KGRhdGE3LzgpPSgwNyAqKiAxNyAqKikKKworCXBhbmQJbW02LG1tMwkJCTsgbW02PSgwMCAtLSAxMCAtLSkKKwlwc2xsZAltbTcsV09SRF9CSVQJCTsgbW03PSgtLSAwMSAtLSAxMSkKKwlwYW5kCW1tMCxtbTMJCQk7IG1tMD0oMDYgLS0gMTYgLS0pCisJcHNsbGQJbW01LFdPUkRfQklUCQk7IG1tNT0oLS0gMDcgLS0gMTcpCisJcG9yCW1tNixtbTcJCQk7IG1tNj0oMDAgMDEgMTAgMTEpCisJcG9yCW1tMCxtbTUJCQk7IG1tMD0oMDYgMDcgMTYgMTcpCisKKwltb3ZxCW1tMSwgTU1XT1JEIFt3aygwKV0JOyBtbTE9dG1wMgorCW1vdnEJbW0zLCBNTVdPUkQgW3drKDEpXQk7IG1tMz10bXAzCisKKwlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9dG1wNAorCW1vdnEJbW03LG1tMQorCW1vdnEJbW01LG1tMworCXBmYWRkCW1tMSxtbTIJCQk7IG1tMT1kYXRhMj0oMDIgMTIpCisJcGZhZGQJbW0zLG1tNAkJCTsgbW0zPWRhdGE0PSgwNCAxNCkKKwlwZnN1YgltbTcsbW0yCQkJOyBtbTc9ZGF0YTU9KDA1IDE1KQorCXBmc3ViCW1tNSxtbTQJCQk7IG1tNT1kYXRhMz0oMDMgMTMpCisKKwltb3ZxCW1tMixbR09UT0ZGKGVieCxQRF9STkRJTlRfTUFHSUMpXQk7IG1tMj1bUERfUk5ESU5UX01BR0lDXQorCXBjbXBlcWQJbW00LG1tNAorCXBzcmxkCW1tNCxXT1JEX0JJVAkJOyBtbTQ9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMH0KKworCXBmYWRkCW1tMyxtbTIJCQk7IG1tMz1yb3VuZGludChkYXRhNC84KT0oMDQgKiogMTQgKiopCisJcGZhZGQJbW03LG1tMgkJCTsgbW03PXJvdW5kaW50KGRhdGE1LzgpPSgwNSAqKiAxNSAqKikKKwlwZmFkZAltbTEsbW0yCQkJOyBtbTE9cm91bmRpbnQoZGF0YTIvOCk9KDAyICoqIDEyICoqKQorCXBmYWRkCW1tNSxtbTIJCQk7IG1tNT1yb3VuZGludChkYXRhMy84KT0oMDMgKiogMTMgKiopCisKKwlwYW5kCW1tMyxtbTQJCQk7IG1tMz0oMDQgLS0gMTQgLS0pCisJcHNsbGQJbW03LFdPUkRfQklUCQk7IG1tNz0oLS0gMDUgLS0gMTUpCisJcGFuZAltbTEsbW00CQkJOyBtbTE9KDAyIC0tIDEyIC0tKQorCXBzbGxkCW1tNSxXT1JEX0JJVAkJOyBtbTU9KC0tIDAzIC0tIDEzKQorCXBvcgltbTMsbW03CQkJOyBtbTM9KDA0IDA1IDE0IDE1KQorCXBvcgltbTEsbW01CQkJOyBtbTE9KDAyIDAzIDEyIDEzKQorCisJbW92cSAgICAgIG1tMixbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCTsgbW0yPVtQQl9DRU5URVJKU0FNUF0KKworCXBhY2tzc3diICBtbTYsbW0zCQk7IG1tNj0oMDAgMDEgMTAgMTEgMDQgMDUgMTQgMTUpCisJcGFja3Nzd2IgIG1tMSxtbTAJCTsgbW0xPSgwMiAwMyAxMiAxMyAwNiAwNyAxNiAxNykKKwlwYWRkYiAgICAgbW02LG1tMgorCXBhZGRiICAgICBtbTEsbW0yCisKKwltb3ZxICAgICAgbW00LG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbHdkIG1tNixtbTEJCTsgbW02PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKwlwdW5wY2tod2QgbW00LG1tMQkJOyBtbTQ9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQorCisJbW92cSAgICAgIG1tNyxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xkcSBtbTYsbW00CQk7IG1tNj0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcHVucGNraGRxIG1tNyxtbTQJCTsgbW03PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKworCXB1c2hwaWMJZWJ4CQkJOyBzYXZlIEdPVCBhZGRyZXNzCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTYKKwltb3ZxCU1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNworCisJcG9wcGljCWVieAkJCTsgcmVzdG9yZSBHT1QgYWRkcmVzcworCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9GQVNUX0ZMT0FUCTsgd3NwdHIKKwlhZGQJZWRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCisJZGVjCWVjeAkJCQk7IGN0cgorCWpuegluZWFyIC5yb3dsb29wCisKKwlmZW1tcwkJOyBlbXB0eSBNTVgvM0ROb3chIHN0YXRlCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IEpJRENUX0ZMVF8zRE5PV19NTVhfU1VQUE9SVEVECislZW5kaWYgOyBEQ1RfRkxPQVRfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qaWRjdGZsdC5hc20gYi9qaWRjdGZsdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2ZGM3YgotLS0gL2Rldi9udWxsCisrKyBiL2ppZGN0Zmx0LmFzbQpAQCAtMCwwICsxLDQ3MyBAQAorOworOyBqaWRjdGZsdC5hc20gLSBmbG9hdGluZy1wb2ludCBJRENUIChub24tU0lNRCkKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW52ZXJzZSBEQ1QKKzsgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24KKzsgdGhlIElKRydzIG9yaWdpbmFsIGppZGN0Zmx0LmM7IHNlZSB0aGUgamlkY3RmbHQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBMYXN0IE1vZGlmaWVkIDogT2N0b2JlciAxNywgMjAwNAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCislZGVmaW5lIFJPVEFUT1JfVFlQRQlGUDMyCTsgZmxvYXQKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9pZGN0X2Zsb2F0KQorCitFWFROKGpjb25zdF9pZGN0X2Zsb2F0KToKKworRl8xXzQxNAlkZAkxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4OQk7IDIqY29zKFBJKjEvNCkKK0ZfMV84NDcJZGQJMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYJOyAyKmNvcyhQSSoxLzgpCitGXzFfMDgyCWRkCTEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2CTsgMiooY29zKFBJKjEvOCktY29zKFBJKjMvOCkpCitGXzJfNjEzCWRkCTIuNjEzMTI1OTI5NzUyNzUzMDU1NzEzMjg2CTsgMiooY29zKFBJKjEvOCkrY29zKFBJKjMvOCkpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2lkY3RfZmxvYXQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorOyAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxNgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyNAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSB0bXAJCWVicC1TSVpFT0ZfRlA2NAk7IGRvdWJsZSB0bXAKKyVkZWZpbmUgd29ya3NwYWNlCXRtcC1EQ1RTSVpFMipTSVpFT0ZfRkFTVF9GTE9BVAorCQkJCQk7IEZBU1RfRkxPQVQgd29ya3NwYWNlW0RDVFNJWkUyXQorJWRlZmluZSBybmRpbnRfbWFnaWMJd29ya3NwYWNlLVNJWkVPRl9GUDMyCisJCQkJCTsgZmxvYXQgcm5kaW50X21hZ2ljID0gMTAwNjYzMjk2LjBGCislZGVmaW5lIGdvdHB0cgkJcm5kaW50X21hZ2ljLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2lkY3RfZmxvYXQpCisKK0VYVE4oanBlZ19pZGN0X2Zsb2F0KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJbGVhCWVzcCwgW3dvcmtzcGFjZV0KKwlwdXNoCUZQMzIgMHg0Q0MwMDAwMAkJOyAoZmxvYXQpKDB4MDBDMDAwMDAgPDwgMykKKwlwdXNocGljCWVheAkJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKKwltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworCW1vdgllZHgsIFBPSU5URVIgW2NvbXBwdHIoZWJwKV0KKwltb3YJZWR4LCBQT0lOVEVSIFtqY29tcGluZm9fZGN0X3RhYmxlKGVkeCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXQkJOyBpbnB0cgorCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBGQVNUX0ZMT0FUICogd3NwdHIKKwltb3YJZWN4LCBEQ1RTSVpFCQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorCW1vdglheCwgSkNPRUYgW0NPTCgxLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWF4LCBKQ09FRiBbQ09MKDIsZXNpLFNJWkVPRl9KQ09FRildCisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCW1vdglieCwgSkNPRUYgW0NPTCgzLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdglheCwgSkNPRUYgW0NPTCg0LGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWJ4LCBKQ09FRiBbQ09MKDUsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJYXgsIEpDT0VGIFtDT0woNixlc2ksU0laRU9GX0pDT0VGKV0KKwlvcglieCwgSkNPRUYgW0NPTCg3LGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWF4LGJ4CisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCWZpbGQJSkNPRUYgW0NPTCgwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWZtdWwJRkxPQVRfTVVMVF9UWVBFIFtDT0woMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwlmc3QJRkFTVF9GTE9BVCBbQ09MKDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3QJRkFTVF9GTE9BVCBbQ09MKDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3QJRkFTVF9GTE9BVCBbQ09MKDIsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3QJRkFTVF9GTE9BVCBbQ09MKDMsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3QJRkFTVF9GTE9BVCBbQ09MKDQsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3QJRkFTVF9GTE9BVCBbQ09MKDUsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3QJRkFTVF9GTE9BVCBbQ09MKDYsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3RwCUZBU1RfRkxPQVQgW0NPTCg3LGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJam1wCW5lYXIgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworCisuY29sdW1uRENUOgorCW1vdnBpYwllYngsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzCisKKwk7IC0tIEV2ZW4gcGFydAorCisJZmlsZAlKQ09FRiBbQ09MKDIsZXNpLFNJWkVPRl9KQ09FRildCisJZmlsZAlKQ09FRiBbQ09MKDYsZXNpLFNJWkVPRl9KQ09FRildCisJZmlsZAlKQ09FRiBbQ09MKDQsZXNpLFNJWkVPRl9KQ09FRildCisJZmlsZAlKQ09FRiBbQ09MKDAsZXNpLFNJWkVPRl9KQ09FRildCisKKwlmeGNoCXN0MCxzdDMKKworCWZtdWwJRkxPQVRfTVVMVF9UWVBFIFtDT0woMixlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJZnhjaAlzdDAsc3QyCisJZm11bAlGTE9BVF9NVUxUX1RZUEUgW0NPTCg2LGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwlmeGNoCXN0MCxzdDEKKwlmbXVsCUZMT0FUX01VTFRfVFlQRSBbQ09MKDQsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCWZ4Y2gJc3QwLHN0MworCWZtdWwJRkxPQVRfTVVMVF9UWVBFIFtDT0woMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJZnhjaAlzdDAsc3QxCisKKwlmbGQJc3QyCTsgc3QyID0gc3QyICsgc3QwLCBzdDAgPSBzdDIgLSBzdDAKKwlmc3ViCXN0MCxzdDEKKwlmeGNoCXN0MCxzdDEKKwlmYWRkcAlzdDMsc3QwCisKKwlmbXVsCVJPVEFUT1JfVFlQRSBbR09UT0ZGKGVieCxGXzFfNDE0KV0KKworCWZsZAlzdDMJOyBzdDEgPSBzdDEgKyBzdDMsIHN0MyA9IHN0MSAtIHN0MworCWZzdWJyCXN0MCxzdDIKKwlmeGNoCXN0MCxzdDQKKwlmYWRkcAlzdDIsc3QwCisKKwlmc3ViCXN0MCxzdDIKKworCWZsZAlzdDEJOyBzdDIgPSBzdDEgKyBzdDIsIHN0MSA9IHN0MSAtIHN0MgorCWZzdWIJc3QwLHN0MworCWZ4Y2gJc3QwLHN0MgorCWZhZGRwCXN0MyxzdDAKKwlmbGQJc3QzCTsgc3QwID0gc3QzICsgc3QwLCBzdDMgPSBzdDMgLSBzdDAKKwlmc3ViCXN0MCxzdDEKKwlmeGNoCXN0MCxzdDQKKwlmYWRkcAlzdDEsc3QwCisKKwk7IC0tIE9kZCBwYXJ0CisKKwlmaWxkCUpDT0VGIFtDT0woMSxlc2ksU0laRU9GX0pDT0VGKV0KKwlmaWxkCUpDT0VGIFtDT0woNyxlc2ksU0laRU9GX0pDT0VGKV0KKwlmaWxkCUpDT0VGIFtDT0woMyxlc2ksU0laRU9GX0pDT0VGKV0KKwlmaWxkCUpDT0VGIFtDT0woNSxlc2ksU0laRU9GX0pDT0VGKV0KKworCWZ4Y2gJc3QwLHN0MworCisJZm11bAlGTE9BVF9NVUxUX1RZUEUgW0NPTCgxLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwlmeGNoCXN0MCxzdDIKKwlmbXVsCUZMT0FUX01VTFRfVFlQRSBbQ09MKDcsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCWZ4Y2gJc3QwLHN0MQorCWZtdWwJRkxPQVRfTVVMVF9UWVBFIFtDT0woMyxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJZnhjaAlzdDAsc3Q2CisJZnhjaAlzdDMsc3QwCisJZm11bAlGTE9BVF9NVUxUX1RZUEUgW0NPTCg1LGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwlmeGNoCXN0MCxzdDUKKwlmc3RwCUZQNjQgW3RtcF0KKworCWZsZAlzdDEJOyBzdDEgPSBzdDEgKyBzdDAsIHN0MCA9IHN0MSAtIHN0MAorCWZzdWIJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0MQorCWZhZGRwCXN0MixzdDAKKwlmbGQJc3Q1CTsgc3Q0ID0gc3Q0ICsgc3Q1LCBzdDUgPSBzdDQgLSBzdDUKKwlmc3VicglzdDAsc3Q1CisJZnhjaAlzdDAsc3Q2CisJZmFkZHAJc3Q1LHN0MAorCisJZmxkCXN0MQk7IHN0MSA9IHN0MSArIHN0NCwgc3Q0ID0gc3QxIC0gc3Q0CisJZnN1YglzdDAsc3Q1CisJZnhjaAlzdDAsc3Q1CisJZmFkZHAJc3QyLHN0MAorCisJZmxkCXN0NQorCWZhZGQJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0NQorCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMV80MTQpXQorCWZ4Y2gJc3QwLHN0NQorCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMV84NDcpXQorCWZ4Y2gJc3QwLHN0NgorCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMl82MTMpXQorCWZ4Y2gJc3QwLHN0MQorCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMV8wODIpXQorCWZ4Y2gJc3QwLHN0NgorCWZzdWJyCXN0MSxzdDAKKwlmc3VicAlzdDYsc3QwCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJZnN1YglzdDAsc3QxCisJZmxkCXN0Mgk7IHN0MSA9IHN0MiArIHN0MSwgc3QyID0gc3QyIC0gc3QxCisJZnN1YglzdDAsc3QyCisJZnhjaAlzdDAsc3QzCisJZmFkZHAJc3QyLHN0MAorCWZzdWIJc3Q0LHN0MAorCWZsZAlzdDMJOyBzdDAgPSBzdDMgKyBzdDAsIHN0MyA9IHN0MyAtIHN0MAorCWZzdWIJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0NAorCWZhZGRwCXN0MSxzdDAKKworCWZ4Y2gJc3QwLHN0MgorCisJZnN0cAlGQVNUX0ZMT0FUIFtDT0woNyxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZzdHAJRkFTVF9GTE9BVCBbQ09MKDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3RwCUZBU1RfRkxPQVQgW0NPTCgxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZnN0cAlGQVNUX0ZMT0FUIFtDT0woNixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJZmFkZAlzdDEsc3QwCisJZmxkCUZQNjQgW3RtcF0KKwlmbGQJc3QxCTsgc3QzID0gc3QzICsgc3QxLCBzdDEgPSBzdDMgLSBzdDEKKwlmc3VicglzdDAsc3Q0CisJZnhjaAlzdDAsc3QyCisJZmFkZHAJc3Q0LHN0MAorCWZsZAlzdDAJOyBzdDAgPSBzdDAgKyBzdDIsIHN0MiA9IHN0MCAtIHN0MgorCWZzdWIJc3QwLHN0MworCWZ4Y2gJc3QwLHN0MworCWZhZGRwCXN0MSxzdDAKKworCWZ4Y2gJc3QwLHN0MworCisJZnN0cAlGQVNUX0ZMT0FUIFtDT0woMixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZzdHAJRkFTVF9GTE9BVCBbQ09MKDUsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmc3RwCUZBU1RfRkxPQVQgW0NPTCgzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZnN0cAlGQVNUX0ZMT0FUIFtDT0woNCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXQorCisubmV4dGNvbHVtbjoKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KQ09FRgk7IGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4KKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9GQVNUX0ZMT0FUCisJZGVjCWVjeAorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllZHgsIFBPSU5URVIgW2NpbmZvKGVicCldCisJbW92CWVkeCwgUE9JTlRFUiBbamRzdHJ1Y3Rfc2FtcGxlX3JhbmdlX2xpbWl0KGVkeCldCisJc3ViCWVkeCwgYnl0ZSAtQ0VOVEVSSlNBTVBMRSpTSVpFT0ZfSlNBTVBMRQk7IEpTQU1QTEUgKiByYW5nZV9saW1pdAorCisJbGVhCWVzaSwgW3dvcmtzcGFjZV0JCQk7IEZBU1RfRkxPQVQgKiB3c3B0cgorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWJwKV0JOyAoSlNBTVBST1cgKikKKwltb3YJZWN4LCBEQ1RTSVpFCQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWRpCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JCQk7IChKU0FNUExFICopCisJYWRkCWVkaSwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYnApXQk7IGVkaT1vdXRwdHIKKworJWlmbmRlZiBOT19aRVJPX1JPV19URVNUX0ZMT0FUCisJbW92CWVheCwgRkFTVF9GTE9BVCBbUk9XKDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlhZGQJZWF4LGVheAkJCTsgc2hsIGVheCwxIChzaGlmdCBvdXQgdGhlIHNpZ24gYml0KQorCWpueglzaG9ydCAucm93RENUCisKKwltb3YJZWF4LCBGQVNUX0ZMT0FUIFtST1coMixlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdgllYngsIEZBU1RfRkxPQVQgW1JPVygzLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJb3IJZWF4LCBGQVNUX0ZMT0FUIFtST1coNCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW9yCWVieCwgRkFTVF9GTE9BVCBbUk9XKDUsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlvcgllYXgsIEZBU1RfRkxPQVQgW1JPVyg2LGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJb3IJZWJ4LCBGQVNUX0ZMT0FUIFtST1coNyxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW9yCWVheCxlYngKKwlhZGQJZWF4LGVheAkJCTsgc2hsIGVheCwxIChzaGlmdCBvdXQgdGhlIHNpZ24gYml0KQorCWpueglzaG9ydCAucm93RENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKwlwdXNoCWVheAorCisJZmxkCUZBU1RfRkxPQVQgW1JPVygwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJZmFkZAlGUDMyIFtybmRpbnRfbWFnaWNdCisJZnN0cAlGUDMyIFtlc3BdCisKKwlwb3AJZWF4CisJYW5kCWVheCxSQU5HRV9NQVNLCisJbW92CWFsLCBKU0FNUExFIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQorCW1vdglKU0FNUExFIFtlZGkrMCpTSVpFT0ZfSlNBTVBMRV0sIGFsCisJbW92CUpTQU1QTEUgW2VkaSsxKlNJWkVPRl9KU0FNUExFXSwgYWwKKwltb3YJSlNBTVBMRSBbZWRpKzIqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrMypTSVpFT0ZfSlNBTVBMRV0sIGFsCisJbW92CUpTQU1QTEUgW2VkaSs0KlNJWkVPRl9KU0FNUExFXSwgYWwKKwltb3YJSlNBTVBMRSBbZWRpKzUqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrNipTSVpFT0ZfSlNBTVBMRV0sIGFsCisJbW92CUpTQU1QTEUgW2VkaSs3KlNJWkVPRl9KU0FNUExFXSwgYWwKKwlqbXAJbmVhciAubmV4dHJvdworCWFsaWdueAkxNiw3CislZW5kaWYKKy5yb3dEQ1Q6CisJbW92cGljCWVieCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MKKworCTsgLS0gRXZlbiBwYXJ0CisKKwlmbGQJRkFTVF9GTE9BVCBbUk9XKDQsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmbGQJRkFTVF9GTE9BVCBbUk9XKDIsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmbGQJRkFTVF9GTE9BVCBbUk9XKDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlmbGQJRkFTVF9GTE9BVCBbUk9XKDYsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCWZsZAlzdDIJOyBzdDIgPSBzdDIgKyBzdDAsIHN0MCA9IHN0MiAtIHN0MAorCWZzdWIJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0MQorCWZhZGRwCXN0MyxzdDAKKworCWZtdWwJUk9UQVRPUl9UWVBFIFtHT1RPRkYoZWJ4LEZfMV80MTQpXQorCisJZmxkCXN0Mwk7IHN0MSA9IHN0MSArIHN0Mywgc3QzID0gc3QxIC0gc3QzCisJZnN1YnIJc3QwLHN0MgorCWZ4Y2gJc3QwLHN0NAorCWZhZGRwCXN0MixzdDAKKworCWZzdWIJc3QwLHN0MgorCisJZmxkCXN0MQk7IHN0MiA9IHN0MSArIHN0Miwgc3QxID0gc3QxIC0gc3QyCisJZnN1YglzdDAsc3QzCisJZnhjaAlzdDAsc3QyCisJZmFkZHAJc3QzLHN0MAorCWZsZAlzdDMJOyBzdDAgPSBzdDMgKyBzdDAsIHN0MyA9IHN0MyAtIHN0MAorCWZzdWIJc3QwLHN0MQorCWZ4Y2gJc3QwLHN0NAorCWZhZGRwCXN0MSxzdDAKKworCTsgLS0gT2RkIHBhcnQKKworCWZsZAlGQVNUX0ZMT0FUIFtST1coMyxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZ4Y2gJc3QwLHN0MworCWZsZAlGQVNUX0ZMT0FUIFtST1coMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZsZAlGQVNUX0ZMT0FUIFtST1coNyxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZsZAlGQVNUX0ZMT0FUIFtST1coNSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCWZ4Y2gJc3QwLHN0NQorCWZzdHAJRlA2NCBbdG1wXQorCisJZmxkCXN0MQk7IHN0MSA9IHN0MSArIHN0MCwgc3QwID0gc3QxIC0gc3QwCisJZnN1YglzdDAsc3QxCisJZnhjaAlzdDAsc3QxCisJZmFkZHAJc3QyLHN0MAorCWZsZAlzdDUJOyBzdDQgPSBzdDQgKyBzdDUsIHN0NSA9IHN0NCAtIHN0NQorCWZzdWJyCXN0MCxzdDUKKwlmeGNoCXN0MCxzdDYKKwlmYWRkcAlzdDUsc3QwCisKKwlmbGQJc3QxCTsgc3QxID0gc3QxICsgc3Q0LCBzdDQgPSBzdDEgLSBzdDQKKwlmc3ViCXN0MCxzdDUKKwlmeGNoCXN0MCxzdDUKKwlmYWRkcAlzdDIsc3QwCisKKwlmbGQJc3Q1CisJZmFkZAlzdDAsc3QxCisJZnhjaAlzdDAsc3Q1CisJZm11bAlST1RBVE9SX1RZUEUgW0dPVE9GRihlYngsRl8xXzQxNCldCisJZnhjaAlzdDAsc3Q1CisJZm11bAlST1RBVE9SX1RZUEUgW0dPVE9GRihlYngsRl8xXzg0NyldCisJZnhjaAlzdDAsc3Q2CisJZm11bAlST1RBVE9SX1RZUEUgW0dPVE9GRihlYngsRl8yXzYxMyldCisJZnhjaAlzdDAsc3QxCisJZm11bAlST1RBVE9SX1RZUEUgW0dPVE9GRihlYngsRl8xXzA4MildCisJZnhjaAlzdDAsc3Q2CisJZnN1YnIJc3QxLHN0MAorCWZzdWJwCXN0NixzdDAKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlzdWIJZXNwLCBieXRlIERDVFNJWkUqU0laRU9GX0ZQMzIKKworCWZzdWIJc3QwLHN0MQorCWZsZAlzdDIJOyBzdDEgPSBzdDIgKyBzdDEsIHN0MiA9IHN0MiAtIHN0MQorCWZzdWIJc3QwLHN0MgorCWZ4Y2gJc3QwLHN0MworCWZhZGRwCXN0MixzdDAKKwlmc3ViCXN0NCxzdDAKKwlmbGQJc3QzCTsgc3QwID0gc3QzICsgc3QwLCBzdDMgPSBzdDMgLSBzdDAKKwlmc3ViCXN0MCxzdDEKKwlmeGNoCXN0MCxzdDQKKwlmYWRkcAlzdDEsc3QwCisKKwlmbGQJRlAzMiBbcm5kaW50X21hZ2ljXQorCisJZmFkZAlzdDQsc3QwCisJZmFkZAlzdDEsc3QwCisJZmFkZAlzdDIsc3QwCisJZmFkZAlzdDMsc3QwCisKKwlmeGNoCXN0MCxzdDQKKworCWZzdHAJRlAzMiBbZXNwKzYqU0laRU9GX0ZQMzJdCisJZnN0cAlGUDMyIFtlc3ArMSpTSVpFT0ZfRlAzMl0KKwlmc3RwCUZQMzIgW2VzcCswKlNJWkVPRl9GUDMyXQorCWZzdHAJRlAzMiBbZXNwKzcqU0laRU9GX0ZQMzJdCisKKwlmeGNoCXN0MCxzdDEKKworCWZhZGQJc3QyLHN0MAorCWZsZAlGUDY0IFt0bXBdCisJZmxkCXN0MQk7IHN0NCA9IHN0NCArIHN0MSwgc3QxID0gc3Q0IC0gc3QxCisJZnN1YnIJc3QwLHN0NQorCWZ4Y2gJc3QwLHN0MgorCWZhZGRwCXN0NSxzdDAKKwlmbGQJc3QwCTsgc3QwID0gc3QwICsgc3QzLCBzdDMgPSBzdDAgLSBzdDMKKwlmc3ViCXN0MCxzdDQKKwlmeGNoCXN0MCxzdDQKKwlmYWRkcAlzdDEsc3QwCisKKwlmeGNoCXN0MCxzdDIKKworCWZhZGQJc3QxLHN0MAorCWZhZGQJc3QyLHN0MAorCWZhZGQJc3QzLHN0MAorCWZhZGRwCXN0NCxzdDAKKworCWZzdHAJRlAzMiBbZXNwKzUqU0laRU9GX0ZQMzJdCisJZnN0cAlGUDMyIFtlc3ArNCpTSVpFT0ZfRlAzMl0KKwlmc3RwCUZQMzIgW2VzcCszKlNJWkVPRl9GUDMyXQorCWZzdHAJRlAzMiBbZXNwKzIqU0laRU9GX0ZQMzJdCisKKyVhc3NpZ24gaSAwCTsgaT0wOworJXJlcCA0CTsgLS0gcmVwZWF0IDQgdGltZXMgLS0tCisJcG9wCWVheAorCXBvcAllYngKKwlhbmQJZWF4LFJBTkdFX01BU0sKKwlhbmQJZWJ4LFJBTkdFX01BU0sKKwltb3YJYWwsIEpTQU1QTEUgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisJbW92CWJsLCBKU0FNUExFIFtlZHgrZWJ4KlNJWkVPRl9KU0FNUExFXQorCW1vdglKU0FNUExFIFtlZGkrKGkrMCkqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrKGkrMSkqU0laRU9GX0pTQU1QTEVdLCBibAorJWFzc2lnbiBpIGkrMgk7IGkrPTI7CislZW5kcmVwCTsgLS0gcmVwZWF0IGVuZCAtLS0KKworLm5leHRyb3c6CisJcG9wCWVkaQorCWFkZAllc2ksIGJ5dGUgRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93CisJZGVjCWVjeAorCWpuegluZWFyIC5yb3dsb29wCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwltb3YJZXNwLGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgRENUX0ZMT0FUX1NVUFBPUlRFRApkaWZmIC0tZ2l0IGEvamlkY3Rmc3QuYXNtIGIvamlkY3Rmc3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMjJhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qaWRjdGZzdC5hc20KQEAgLTAsMCArMSw0NjQgQEAKKzsKKzsgamlkY3Rmc3QuYXNtIC0gZmFzdCBpbnRlZ2VyIElEQ1QgKG5vbi1TSU1EKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mCis7IHRoZSBpbnZlcnNlIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcworOyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3Rmc3QuYzsgc2VlIHRoZSBqaWRjdGZzdC5jCis7IGZvciBtb3JlIGRldGFpbHMuCis7Cis7IExhc3QgTW9kaWZpZWQgOiBPY3RvYmVyIDE3LCAyMDA0Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCislaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7IFdlIGNhbiBnYWluIGEgbGl0dGxlIG1vcmUgc3BlZWQsIHdpdGggYSBmdXJ0aGVyIGNvbXByb21pc2UgaW4gYWNjdXJhY3ksCis7IGJ5IG9taXR0aW5nIHRoZSBhZGRpdGlvbiBpbiBhIGRlc2NhbGluZyBzaGlmdC4gIFRoaXMgeWllbGRzIGFuCis7IGluY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0IGhhbGYgdGhlIHRpbWUuLi4KKzsKKyVtYWNybwlkZXNjYWxlIDIKKyVpZmRlZiBVU0VfQUNDVVJBVEVfUk9VTkRJTkcKKyVpZiAoJTIpPD03CisJYWRkCSUxLCBieXRlICgxPDwoKCUyKS0xKSkJOyBhZGQgcmVnMzIsaW1tOAorJWVsc2UKKwlhZGQJJTEsICgxPDwoKCUyKS0xKSkJOyBhZGQgcmVnMzIsaW1tMzIKKyVlbmRpZgorJWVuZGlmCisJc2FyCSUxLCUyCislZW5kbWFjcm8KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMJOAorJWRlZmluZSBQQVNTMV9CSVRTCTIKKworJWlmIElGQVNUX1NDQUxFX0JJVFMgIT0gUEFTUzFfQklUUworJWVycm9yICInSUZBU1RfU0NBTEVfQklUUycgbXVzdCBiZSBlcXVhbCB0byAnUEFTUzFfQklUUycuIgorJWVuZGlmCisKKyVpZiBDT05TVF9CSVRTID09IDgKK0ZfMV8wODIJZXF1CTI3NwkJOyBGSVgoMS4wODIzOTIyMDApCitGXzFfNDE0CWVxdQkzNjIJCTsgRklYKDEuNDE0MjEzNTYyKQorRl8xXzg0NwllcXUJNDczCQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl82MTMJZXF1CTY2OQkJOyBGSVgoMi42MTMxMjU5MzApCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8xXzA4MgllcXUJREVTQ0FMRSgxMTYyMjA5Nzc1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMDgyMzkyMjAwKQorRl8xXzQxNAllcXUJREVTQ0FMRSgxNTE4NTAwMjQ5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNDE0MjEzNTYyKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMwllcXUJREVTQ0FMRSgyODA1ODIyNjAyLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNjEzMTI1OTMwKQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19pZGN0X2lmYXN0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGNpbmZvKGIpCShiKSs4CQk7IGpfZGVjb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTYJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjQJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgcmFuZ2VfbGltaXQJZWJwLVNJWkVPRl9QT0lOVEVSCQk7IEpTQU1QTEUgKiByYW5nZV9saW1pdAorJWRlZmluZSBwdHIJCXJhbmdlX2xpbWl0LVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIHB0cgorJWRlZmluZSB3b3Jrc3BhY2UJcHRyLURDVFNJWkUyKlNJWkVPRl9JTlQKKwkJCQkJOyBpbnQgd29ya3NwYWNlW0RDVFNJWkUyXQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2lkY3RfaWZhc3QpCisKK0VYVE4oanBlZ19pZGN0X2lmYXN0KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJbGVhCWVzcCwgW3dvcmtzcGFjZV0KKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworCW1vdgllZHgsIFBPSU5URVIgW2NvbXBwdHIoZWJwKV0KKwltb3YJZWR4LCBQT0lOVEVSIFtqY29tcGluZm9fZGN0X3RhYmxlKGVkeCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXQkJOyBpbnB0cgorCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBpbnQgKiB3c3B0cgorCW1vdgllY3gsIERDVFNJWkUJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisJbW92CWF4LCBKQ09FRiBbQ09MKDEsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJYXgsIEpDT0VGIFtDT0woMixlc2ksU0laRU9GX0pDT0VGKV0KKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJbW92CWJ4LCBKQ09FRiBbQ09MKDMsZXNpLFNJWkVPRl9KQ09FRildCisJbW92CWF4LCBKQ09FRiBbQ09MKDQsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJYngsIEpDT0VGIFtDT0woNSxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcglheCwgSkNPRUYgW0NPTCg2LGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWJ4LCBKQ09FRiBbQ09MKDcsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJYXgsYngKKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisJbW92CWF4LCBKQ09FRiBbQ09MKDAsZXNpLFNJWkVPRl9KQ09FRildCisJaW11bAlheCwgSUZBU1RfTVVMVF9UWVBFIFtDT0woMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJY3dkZQorCisJbW92CUlOVCBbQ09MKDAsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDEsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDIsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDMsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDQsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDUsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDYsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDcsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJam1wCW5lYXIgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworCisuY29sdW1uRENUOgorCXB1c2gJZWN4CTsgY3RyCisJcHVzaAllc2kJOyBjb2VmX2Jsb2NrCisJcHVzaAllZHgJOyBxdWFudHB0cgorCisJbW92CVBPSU5URVIgW3B0cl0sIGVkaQk7IHdzcHRyCisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92c3gJZWF4LCBKQ09FRiBbQ09MKDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92c3gJZWN4LCBKQ09FRiBbQ09MKDQsZXNpLFNJWkVPRl9KQ09FRildCisJaW11bAlheCwgSUZBU1RfTVVMVF9UWVBFIFtDT0woMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJaW11bAljeCwgSUZBU1RfTVVMVF9UWVBFIFtDT0woNCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJbW92c3gJZWJ4LCBKQ09FRiBbQ09MKDIsZXNpLFNJWkVPRl9KQ09FRildCisJbW92c3gJZWRpLCBKQ09FRiBbQ09MKDYsZXNpLFNJWkVPRl9KQ09FRildCisJaW11bAlieCwgSUZBU1RfTVVMVF9UWVBFIFtDT0woMixlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJaW11bAlkaSwgSUZBU1RfTVVMVF9UWVBFIFtDT0woNixlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisKKwlsZWEJZWR4LFtlYXgrZWN4XQkJOyBlZHg9dG1wMTAKKwlzdWIJZWF4LGVjeAkJCTsgZWF4PXRtcDExCisKKwlsZWEJZWN4LFtlYngrZWRpXQkJOyBlY3g9dG1wMTMKKwlzdWIJZWJ4LGVkaQorCWltdWwJZWJ4LChGXzFfNDE0KQorCWRlc2NhbGUJZWJ4LENPTlNUX0JJVFMKKwlzdWIJZWJ4LGVjeAkJCTsgZWJ4PXRtcDEyCisKKwlsZWEJZWRpLFtlZHgrZWN4XQkJOyBlZGk9dG1wMAorCXN1YgllZHgsZWN4CQkJOyBlZHg9dG1wMworCWxlYQllY3gsW2VheCtlYnhdCQk7IGVjeD10bXAxCisJc3ViCWVheCxlYngJCQk7IGVheD10bXAyCisKKwlwdXNoCWVkeAkJOyB0bXAzCisJcHVzaAllYXgJCTsgdG1wMgorCXB1c2gJZWN4CQk7IHRtcDEKKwlwdXNoCWVkaQkJOyB0bXAwCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3YJZWR4LCBQT0lOVEVSIFtlc3ArMTZdCTsgcXVhbnRwdHIKKworCW1vdnN4CWVheCwgSkNPRUYgW0NPTCgxLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnN4CWVieCwgSkNPRUYgW0NPTCg3LGVzaSxTSVpFT0ZfSkNPRUYpXQorCWltdWwJYXgsIElGQVNUX01VTFRfVFlQRSBbQ09MKDEsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCWltdWwJYngsIElGQVNUX01VTFRfVFlQRSBbQ09MKDcsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCW1vdnN4CWVkaSwgSkNPRUYgW0NPTCg1LGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnN4CWVjeCwgSkNPRUYgW0NPTCgzLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWltdWwJZGksIElGQVNUX01VTFRfVFlQRSBbQ09MKDUsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCWltdWwJY3gsIElGQVNUX01VTFRfVFlQRSBbQ09MKDMsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCisJbGVhCWVzaSxbZWF4K2VieF0JCTsgZXNpPXoxMQorCXN1YgllYXgsZWJ4CQkJOyBlYXg9ejEyCisJbGVhCWVkeCxbZWRpK2VjeF0JCTsgZWR4PXoxMworCXN1YgllZGksZWN4CQkJOyBlZGk9ejEwCisKKwlsZWEJZWJ4LFtlc2krZWR4XQkJOyBlYng9dG1wNworCXN1Ygllc2ksZWR4CisJaW11bAllc2ksKEZfMV80MTQpCQk7IGVzaT10bXAxMQorCWRlc2NhbGUJZXNpLENPTlNUX0JJVFMKKworCWxlYQllY3gsW2VkaStlYXhdCisJaW11bAllY3gsKEZfMV84NDcpCQk7IGVjeD16NQorCWltdWwJZWRpLCgtRl8yXzYxMykJCTsgZWRpPU1VTFRJUExZKHoxMCwtRklYXzJfNjEzMTI1OTMwKQorCWltdWwJZWF4LChGXzFfMDgyKQkJOyBlYXg9TVVMVElQTFkoejEyLEZJWF8xXzA4MjM5MjIwMCkKKwlkZXNjYWxlCWVjeCxDT05TVF9CSVRTCisJZGVzY2FsZQllZGksQ09OU1RfQklUUworCWRlc2NhbGUJZWF4LENPTlNUX0JJVFMKKwlhZGQJZWRpLGVjeAkJCTsgZWRpPXRtcDEyCisJc3ViCWVheCxlY3gJCQk7IGVheD10bXAxMAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXN1YgllZGksZWJ4CQk7IGVkaT10bXA2CisJcG9wCWVkeAkJOyBlZHg9dG1wMAorCXN1Ygllc2ksZWRpCQk7IGVzaT10bXA1CisJcG9wCWVjeAkJOyBlY3g9dG1wMQorCWFkZAllYXgsZXNpCQk7IGVheD10bXA0CisJcHVzaAllc2kJCTsgdG1wNQorCXB1c2gJZWF4CQk7IHRtcDQKKworCWxlYQllYXgsW2VkeCtlYnhdCTsgZWF4PWRhdGEwKD10bXAwK3RtcDcpCisJc3ViCWVkeCxlYngJCTsgZWR4PWRhdGE3KD10bXAwLXRtcDcpCisJbGVhCWVieCxbZWN4K2VkaV0JOyBlYng9ZGF0YTEoPXRtcDErdG1wNikKKwlzdWIJZWN4LGVkaQkJOyBlY3g9ZGF0YTYoPXRtcDEtdG1wNikKKworCW1vdgllZGksIFBPSU5URVIgW3B0cl0JOyBlZGk9d3NwdHIKKworCW1vdglJTlQgW0NPTCgwLGVkaSxTSVpFT0ZfSU5UKV0sIGVheAorCW1vdglJTlQgW0NPTCg3LGVkaSxTSVpFT0ZfSU5UKV0sIGVkeAorCW1vdglJTlQgW0NPTCgxLGVkaSxTSVpFT0ZfSU5UKV0sIGVieAorCW1vdglJTlQgW0NPTCg2LGVkaSxTSVpFT0ZfSU5UKV0sIGVjeAorCisJcG9wCWVzaQkJOyBlc2k9dG1wNAorCXBvcAllYXgJCTsgZWF4PXRtcDUKKwlwb3AJZWR4CQk7IGVkeD10bXAyCisJcG9wCWVjeAkJOyBlY3g9dG1wMworCisJbGVhCWVieCxbZWR4K2VheF0JOyBlYng9ZGF0YTIoPXRtcDIrdG1wNSkKKwlzdWIJZWR4LGVheAkJOyBlZHg9ZGF0YTUoPXRtcDItdG1wNSkKKwlsZWEJZWF4LFtlY3grZXNpXQk7IGVheD1kYXRhNCg9dG1wMyt0bXA0KQorCXN1YgllY3gsZXNpCQk7IGVjeD1kYXRhMyg9dG1wMy10bXA0KQorCisJbW92CUlOVCBbQ09MKDIsZWRpLFNJWkVPRl9JTlQpXSwgZWJ4CisJbW92CUlOVCBbQ09MKDUsZWRpLFNJWkVPRl9JTlQpXSwgZWR4CisJbW92CUlOVCBbQ09MKDQsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDMsZWRpLFNJWkVPRl9JTlQpXSwgZWN4CisKKwlwb3AJZWR4CTsgcXVhbnRwdHIKKwlwb3AJZXNpCTsgY29lZl9ibG9jaworCXBvcAllY3gJOyBjdHIKKworLm5leHRjb2x1bW46CisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSkNPRUYJOyBhZHZhbmNlIHBvaW50ZXJzIHRvIG5leHQgY29sdW1uCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSU5UCisJZGVjCWVjeAorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllYXgsIFBPSU5URVIgW2NpbmZvKGVicCldCisJbW92CWVheCwgUE9JTlRFUiBbamRzdHJ1Y3Rfc2FtcGxlX3JhbmdlX2xpbWl0KGVheCldCisJc3ViCWVheCwgYnl0ZSAtQ0VOVEVSSlNBTVBMRSpTSVpFT0ZfSlNBTVBMRQk7IEpTQU1QTEUgKiByYW5nZV9saW1pdAorCW1vdglQT0lOVEVSIFtyYW5nZV9saW1pdF0sIGVheAorCisJbGVhCWVzaSwgW3dvcmtzcGFjZV0JCQk7IGludCAqIHdzcHRyCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXQk7IChKU0FNUFJPVyAqKQorCW1vdgllY3gsIERDVFNJWkUJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaAllZGkKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQkJCTsgKEpTQU1QTEUgKikKKwlhZGQJZWRpLCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVicCldCTsgZWRpPW91dHB0cgorCislaWZuZGVmIE5PX1pFUk9fUk9XX1RFU1QKKwltb3YJZWF4LCBJTlQgW1JPVygxLGVzaSxTSVpFT0ZfSU5UKV0KKwlvcgllYXgsIElOVCBbUk9XKDIsZXNpLFNJWkVPRl9JTlQpXQorCWpueglzaG9ydCAucm93RENUCisKKwltb3YJZWJ4LCBJTlQgW1JPVygzLGVzaSxTSVpFT0ZfSU5UKV0KKwltb3YJZWF4LCBJTlQgW1JPVyg0LGVzaSxTSVpFT0ZfSU5UKV0KKwlvcgllYngsIElOVCBbUk9XKDUsZXNpLFNJWkVPRl9JTlQpXQorCW9yCWVheCwgSU5UIFtST1coNixlc2ksU0laRU9GX0lOVCldCisJb3IJZWJ4LCBJTlQgW1JPVyg3LGVzaSxTSVpFT0ZfSU5UKV0KKwlvcgllYXgsZWJ4CisJam56CXNob3J0IC5yb3dEQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdgllYXgsIElOVCBbUk9XKDAsZXNpLFNJWkVPRl9JTlQpXQorCisJbW92CWVkeCwgUE9JTlRFUiBbcmFuZ2VfbGltaXRdCTsgKEpTQU1QTEUgKikKKworCWRlc2NhbGUJZWF4LChQQVNTMV9CSVRTKzMpCisJYW5kCWVheCxSQU5HRV9NQVNLCisJbW92CWFsLCBKU0FNUExFIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQorCW1vdglKU0FNUExFIFtlZGkrMCpTSVpFT0ZfSlNBTVBMRV0sIGFsCisJbW92CUpTQU1QTEUgW2VkaSsxKlNJWkVPRl9KU0FNUExFXSwgYWwKKwltb3YJSlNBTVBMRSBbZWRpKzIqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrMypTSVpFT0ZfSlNBTVBMRV0sIGFsCisJbW92CUpTQU1QTEUgW2VkaSs0KlNJWkVPRl9KU0FNUExFXSwgYWwKKwltb3YJSlNBTVBMRSBbZWRpKzUqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrNipTSVpFT0ZfSlNBTVBMRV0sIGFsCisJbW92CUpTQU1QTEUgW2VkaSs3KlNJWkVPRl9KU0FNUExFXSwgYWwKKwlqbXAJbmVhciAubmV4dHJvdworCWFsaWdueAkxNiw3CislZW5kaWYKKy5yb3dEQ1Q6CisJcHVzaAllc2kJOyB3c3B0cgorCXB1c2gJZWN4CTsgY3RyCisKKwltb3YJUE9JTlRFUiBbcHRyXSwgZWRpCTsgb3V0cHRyCisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92CWVheCwgSU5UIFtST1coMCxlc2ksU0laRU9GX0lOVCldCisJbW92CWVieCwgSU5UIFtST1coMixlc2ksU0laRU9GX0lOVCldCisJbW92CWVjeCwgSU5UIFtST1coNCxlc2ksU0laRU9GX0lOVCldCisJbW92CWVkaSwgSU5UIFtST1coNixlc2ksU0laRU9GX0lOVCldCisKKwlsZWEJZWR4LFtlYXgrZWN4XQkJOyBlZHg9dG1wMTAKKwlzdWIJZWF4LGVjeAkJCTsgZWF4PXRtcDExCisKKwlsZWEJZWN4LFtlYngrZWRpXQkJOyBlY3g9dG1wMTMKKwlzdWIJZWJ4LGVkaQorCWltdWwJZWJ4LChGXzFfNDE0KQorCWRlc2NhbGUJZWJ4LENPTlNUX0JJVFMKKwlzdWIJZWJ4LGVjeAkJCTsgZWJ4PXRtcDEyCisKKwlsZWEJZWRpLFtlZHgrZWN4XQkJOyBlZGk9dG1wMAorCXN1YgllZHgsZWN4CQkJOyBlZHg9dG1wMworCWxlYQllY3gsW2VheCtlYnhdCQk7IGVjeD10bXAxCisJc3ViCWVheCxlYngJCQk7IGVheD10bXAyCisKKwlwdXNoCWVkeAkJOyB0bXAzCisJcHVzaAllYXgJCTsgdG1wMgorCXB1c2gJZWN4CQk7IHRtcDEKKwlwdXNoCWVkaQkJOyB0bXAwCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3YJZWF4LCBJTlQgW1JPVygxLGVzaSxTSVpFT0ZfSU5UKV0KKwltb3YJZWN4LCBJTlQgW1JPVygzLGVzaSxTSVpFT0ZfSU5UKV0KKwltb3YJZWRpLCBJTlQgW1JPVyg1LGVzaSxTSVpFT0ZfSU5UKV0KKwltb3YJZWJ4LCBJTlQgW1JPVyg3LGVzaSxTSVpFT0ZfSU5UKV0KKworCWxlYQllc2ksW2VheCtlYnhdCQk7IGVzaT16MTEKKwlzdWIJZWF4LGVieAkJCTsgZWF4PXoxMgorCWxlYQllZHgsW2VkaStlY3hdCQk7IGVkeD16MTMKKwlzdWIJZWRpLGVjeAkJCTsgZWRpPXoxMAorCisJbGVhCWVieCxbZXNpK2VkeF0JCTsgZWJ4PXRtcDcKKwlzdWIJZXNpLGVkeAorCWltdWwJZXNpLChGXzFfNDE0KQkJOyBlc2k9dG1wMTEKKwlkZXNjYWxlCWVzaSxDT05TVF9CSVRTCisKKwlsZWEJZWN4LFtlZGkrZWF4XQorCWltdWwJZWN4LChGXzFfODQ3KQkJOyBlY3g9ejUKKwlpbXVsCWVkaSwoLUZfMl82MTMpCQk7IGVkaT1NVUxUSVBMWSh6MTAsLUZJWF8yXzYxMzEyNTkzMCkKKwlpbXVsCWVheCwoRl8xXzA4MikJCTsgZWF4PU1VTFRJUExZKHoxMixGSVhfMV8wODIzOTIyMDApCisJZGVzY2FsZQllY3gsQ09OU1RfQklUUworCWRlc2NhbGUJZWRpLENPTlNUX0JJVFMKKwlkZXNjYWxlCWVheCxDT05TVF9CSVRTCisJYWRkCWVkaSxlY3gJCQk7IGVkaT10bXAxMgorCXN1YgllYXgsZWN4CQkJOyBlYXg9dG1wMTAKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlzdWIJZWRpLGVieAkJOyBlZGk9dG1wNgorCXBvcAllZHgJCTsgZWR4PXRtcDAKKwlzdWIJZXNpLGVkaQkJOyBlc2k9dG1wNQorCXBvcAllY3gJCTsgZWN4PXRtcDEKKwlhZGQJZWF4LGVzaQkJOyBlYXg9dG1wNAorCXB1c2gJZXNpCQk7IHRtcDUKKwlwdXNoCWVheAkJOyB0bXA0CisKKwlsZWEJZWF4LFtlZHgrZWJ4XQk7IGVheD1kYXRhMCg9dG1wMCt0bXA3KQorCXN1YgllZHgsZWJ4CQk7IGVkeD1kYXRhNyg9dG1wMC10bXA3KQorCWxlYQllYngsW2VjeCtlZGldCTsgZWJ4PWRhdGExKD10bXAxK3RtcDYpCisJc3ViCWVjeCxlZGkJCTsgZWN4PWRhdGE2KD10bXAxLXRtcDYpCisKKwltb3YJZXNpLCBQT0lOVEVSIFtyYW5nZV9saW1pdF0JOyAoSlNBTVBMRSAqKQorCisJZGVzY2FsZQllYXgsKFBBU1MxX0JJVFMrMykKKwlkZXNjYWxlCWVkeCwoUEFTUzFfQklUUyszKQorCWRlc2NhbGUJZWJ4LChQQVNTMV9CSVRTKzMpCisJZGVzY2FsZQllY3gsKFBBU1MxX0JJVFMrMykKKworCW1vdgllZGksIFBPSU5URVIgW3B0cl0JCTsgZWRpPW91dHB0cgorCisJYW5kCWVheCxSQU5HRV9NQVNLCisJYW5kCWVkeCxSQU5HRV9NQVNLCisJYW5kCWVieCxSQU5HRV9NQVNLCisJYW5kCWVjeCxSQU5HRV9NQVNLCisKKwltb3YJYWwsIEpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdCisJbW92CWRsLCBKU0FNUExFIFtlc2krZWR4KlNJWkVPRl9KU0FNUExFXQorCW1vdglibCwgSlNBTVBMRSBbZXNpK2VieCpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJY2wsIEpTQU1QTEUgW2VzaStlY3gqU0laRU9GX0pTQU1QTEVdCisKKwltb3YJSlNBTVBMRSBbZWRpKzAqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrNypTSVpFT0ZfSlNBTVBMRV0sIGRsCisJbW92CUpTQU1QTEUgW2VkaSsxKlNJWkVPRl9KU0FNUExFXSwgYmwKKwltb3YJSlNBTVBMRSBbZWRpKzYqU0laRU9GX0pTQU1QTEVdLCBjbAorCisJcG9wCWVzaQkJOyBlc2k9dG1wNAorCXBvcAllYXgJCTsgZWF4PXRtcDUKKwlwb3AJZWR4CQk7IGVkeD10bXAyCisJcG9wCWVjeAkJOyBlY3g9dG1wMworCisJbGVhCWVieCxbZWR4K2VheF0JOyBlYng9ZGF0YTIoPXRtcDIrdG1wNSkKKwlzdWIJZWR4LGVheAkJOyBlZHg9ZGF0YTUoPXRtcDItdG1wNSkKKwlsZWEJZWF4LFtlY3grZXNpXQk7IGVheD1kYXRhNCg9dG1wMyt0bXA0KQorCXN1YgllY3gsZXNpCQk7IGVjeD1kYXRhMyg9dG1wMy10bXA0KQorCisJbW92CWVzaSwgUE9JTlRFUiBbcmFuZ2VfbGltaXRdCTsgKEpTQU1QTEUgKikKKworCWRlc2NhbGUJZWJ4LChQQVNTMV9CSVRTKzMpCisJZGVzY2FsZQllZHgsKFBBU1MxX0JJVFMrMykKKwlkZXNjYWxlCWVheCwoUEFTUzFfQklUUyszKQorCWRlc2NhbGUJZWN4LChQQVNTMV9CSVRTKzMpCisKKwlhbmQJZWJ4LFJBTkdFX01BU0sKKwlhbmQJZWR4LFJBTkdFX01BU0sKKwlhbmQJZWF4LFJBTkdFX01BU0sKKwlhbmQJZWN4LFJBTkdFX01BU0sKKworCW1vdglibCwgSlNBTVBMRSBbZXNpK2VieCpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJZGwsIEpTQU1QTEUgW2VzaStlZHgqU0laRU9GX0pTQU1QTEVdCisJbW92CWFsLCBKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXQorCW1vdgljbCwgSlNBTVBMRSBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBMRV0KKworCW1vdglKU0FNUExFIFtlZGkrMipTSVpFT0ZfSlNBTVBMRV0sIGJsCisJbW92CUpTQU1QTEUgW2VkaSs1KlNJWkVPRl9KU0FNUExFXSwgZGwKKwltb3YJSlNBTVBMRSBbZWRpKzQqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrMypTSVpFT0ZfSlNBTVBMRV0sIGNsCisKKwlwb3AJZWN4CTsgY3RyCisJcG9wCWVzaQk7IHdzcHRyCisKKy5uZXh0cm93OgorCXBvcAllZGkKKwlhZGQJZXNpLCBieXRlIERDVFNJWkUqU0laRU9GX0lOVAk7IGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdworCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJZGVjCWVjeAorCWpuegluZWFyIC5yb3dsb29wCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwltb3YJZXNwLGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgRENUX0lGQVNUX1NVUFBPUlRFRApkaWZmIC0tZ2l0IGEvamlkY3RpbnQuYXNtIGIvamlkY3RpbnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODE5MTkKLS0tIC9kZXYvbnVsbAorKysgYi9qaWRjdGludC5hc20KQEAgLTAsMCArMSw1MjQgQEAKKzsKKzsgamlkY3RpbnQuYXNtIC0gYWNjdXJhdGUgaW50ZWdlciBJRENUIChub24tU0lNRCkKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBzbG93LWJ1dC1hY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mIHRoZQorOyBpbnZlcnNlIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZAorOyBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RpbnQuYzsgc2VlIHRoZSBqaWRjdGludC5jIGZvcgorOyBtb3JlIGRldGFpbHMuCis7Cis7IExhc3QgTW9kaWZpZWQgOiBPY3RvYmVyIDE3LCAyMDA0Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCislaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7IERlc2NhbGUgYW5kIGNvcnJlY3RseSByb3VuZCBhIERXT1JEIHZhbHVlIHRoYXQncyBzY2FsZWQgYnkgTiBiaXRzLgorOworJW1hY3JvCWRlc2NhbGUgMgorJWlmICglMik8PTcKKwlhZGQJJTEsIGJ5dGUgKDE8PCgoJTIpLTEpKQk7IGFkZCByZWczMixpbW04CislZWxzZQorCWFkZAklMSwgKDE8PCgoJTIpLTEpKQk7IGFkZCByZWczMixpbW0zMgorJWVuZGlmCisJc2FyCSUxLCUyCislZW5kbWFjcm8KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMJMTMKKyVkZWZpbmUgUEFTUzFfQklUUwkyCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjk4CWVxdQkgMjQ0NgkJOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwCWVxdQkgMzE5NgkJOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxCWVxdQkgNDQzMwkJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1CWVxdQkgNjI3MAkJOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5CWVxdQkgNzM3MwkJOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1CWVxdQkgOTYzMwkJOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxCWVxdQkxMjI5OQkJOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3CWVxdQkxNTEzNwkJOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxCWVxdQkxNjA2OQkJOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzCWVxdQkxNjgxOQkJOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyCWVxdQkyMDk5NQkJOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyCWVxdQkyNTE3MgkJOyBGSVgoMy4wNzI3MTEwMjYpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8wXzI5OAllcXUJREVTQ0FMRSggMzIwNjUyOTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJREVTQ0FMRSggNDE4OTUzMjc2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJREVTQ0FMRSgxNjEyMDMxMjY3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJREVTQ0FMRSgyMjA0NTIwNjczLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuMDcyNzExMDI2KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19pZGN0X2lzbG93IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGNpbmZvKGIpCShiKSs4CQk7IGpfZGVjb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTYJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjQJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgcmFuZ2VfbGltaXQJZWJwLVNJWkVPRl9QT0lOVEVSCQk7IEpTQU1QTEUgKiByYW5nZV9saW1pdAorJWRlZmluZSBwdHIJCXJhbmdlX2xpbWl0LVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIHB0cgorJWRlZmluZSB3b3Jrc3BhY2UJcHRyLURDVFNJWkUyKlNJWkVPRl9JTlQKKwkJCQkJOyBpbnQgd29ya3NwYWNlW0RDVFNJWkUyXQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2lkY3RfaXNsb3cpCisKK0VYVE4oanBlZ19pZGN0X2lzbG93KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJbGVhCWVzcCwgW3dvcmtzcGFjZV0KKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworCW1vdgllZHgsIFBPSU5URVIgW2NvbXBwdHIoZWJwKV0KKwltb3YJZWR4LCBQT0lOVEVSIFtqY29tcGluZm9fZGN0X3RhYmxlKGVkeCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXQkJOyBpbnB0cgorCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBpbnQgKiB3c3B0cgorCW1vdgllY3gsIERDVFNJWkUJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisJbW92CWF4LCBKQ09FRiBbQ09MKDEsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJYXgsIEpDT0VGIFtDT0woMixlc2ksU0laRU9GX0pDT0VGKV0KKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJbW92CWJ4LCBKQ09FRiBbQ09MKDMsZXNpLFNJWkVPRl9KQ09FRildCisJbW92CWF4LCBKQ09FRiBbQ09MKDQsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJYngsIEpDT0VGIFtDT0woNSxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcglheCwgSkNPRUYgW0NPTCg2LGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWJ4LCBKQ09FRiBbQ09MKDcsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJYXgsYngKKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisJbW92CWF4LCBKQ09FRiBbQ09MKDAsZXNpLFNJWkVPRl9KQ09FRildCisJaW11bAlheCwgSVNMT1dfTVVMVF9UWVBFIFtDT0woMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJY3dkZQorCisJc2FsCWVheCxQQVNTMV9CSVRTCisKKwltb3YJSU5UIFtDT0woMCxlZGksU0laRU9GX0lOVCldLCBlYXgKKwltb3YJSU5UIFtDT0woMSxlZGksU0laRU9GX0lOVCldLCBlYXgKKwltb3YJSU5UIFtDT0woMixlZGksU0laRU9GX0lOVCldLCBlYXgKKwltb3YJSU5UIFtDT0woMyxlZGksU0laRU9GX0lOVCldLCBlYXgKKwltb3YJSU5UIFtDT0woNCxlZGksU0laRU9GX0lOVCldLCBlYXgKKwltb3YJSU5UIFtDT0woNSxlZGksU0laRU9GX0lOVCldLCBlYXgKKwltb3YJSU5UIFtDT0woNixlZGksU0laRU9GX0lOVCldLCBlYXgKKwltb3YJSU5UIFtDT0woNyxlZGksU0laRU9GX0lOVCldLCBlYXgKKwlqbXAJbmVhciAubmV4dGNvbHVtbgorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5EQ1Q6CisJcHVzaAllY3gJOyBjdHIKKwlwdXNoCWVzaQk7IGNvZWZfYmxvY2sKKwlwdXNoCWVkeAk7IHF1YW50cHRyCisKKwltb3YJUE9JTlRFUiBbcHRyXSwgZWRpCTsgd3NwdHIKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZzeAllYXgsIEpDT0VGIFtDT0woMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZzeAllY3gsIEpDT0VGIFtDT0woNCxlc2ksU0laRU9GX0pDT0VGKV0KKwlpbXVsCWF4LCBJU0xPV19NVUxUX1RZUEUgW0NPTCgwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlpbXVsCWN4LCBJU0xPV19NVUxUX1RZUEUgW0NPTCg0LGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwltb3ZzeAllYngsIEpDT0VGIFtDT0woMixlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZzeAllZGksIEpDT0VGIFtDT0woNixlc2ksU0laRU9GX0pDT0VGKV0KKwlpbXVsCWJ4LCBJU0xPV19NVUxUX1RZUEUgW0NPTCgyLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlpbXVsCWRpLCBJU0xPV19NVUxUX1RZUEUgW0NPTCg2LGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCWxlYQllZHgsW2VheCtlY3hdCisJc3ViCWVheCxlY3gKKwlzYWwJZWR4LENPTlNUX0JJVFMJOyBlZHg9dG1wMAorCXNhbAllYXgsQ09OU1RfQklUUwk7IGVheD10bXAxCisKKwlsZWEJZWN4LFtlYngrZWRpXQorCWltdWwJZWN4LChGXzBfNTQxKQk7IGVjeD16MQorCWltdWwJZWJ4LChGXzBfNzY1KQk7IGVieD1NVUxUSVBMWSh6MixGSVhfMF83NjUzNjY4NjUpCisJaW11bAllZGksKC1GXzFfODQ3KQk7IGVkaT1NVUxUSVBMWSh6MywtRklYXzFfODQ3NzU5MDY1KQorCWFkZAllYngsZWN4CQk7IGVieD10bXAzCisJYWRkCWVkaSxlY3gJCTsgZWRpPXRtcDIKKworCWxlYQllY3gsW2VkeCtlYnhdCTsgZWN4PXRtcDEwCisJc3ViCWVkeCxlYngJCTsgZWR4PXRtcDEzCisJbGVhCWVieCxbZWF4K2VkaV0JOyBlYng9dG1wMTEKKwlzdWIJZWF4LGVkaQkJOyBlYXg9dG1wMTIKKworCXB1c2gJZWR4CQk7IHRtcDEzCisJcHVzaAllYXgJCTsgdG1wMTIKKwlwdXNoCWVieAkJOyB0bXAxMQorCXB1c2gJZWN4CQk7IHRtcDEwCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3YJZWR4LCBQT0lOVEVSIFtlc3ArMTZdCTsgcXVhbnRwdHIKKworCW1vdnN4CWVheCwgSkNPRUYgW0NPTCgxLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnN4CWVkaSwgSkNPRUYgW0NPTCgzLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWltdWwJYXgsIElTTE9XX01VTFRfVFlQRSBbQ09MKDEsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCWltdWwJZGksIElTTE9XX01VTFRfVFlQRSBbQ09MKDMsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCW1vdnN4CWVjeCwgSkNPRUYgW0NPTCg1LGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnN4CWVieCwgSkNPRUYgW0NPTCg3LGVzaSxTSVpFT0ZfSkNPRUYpXQorCWltdWwJY3gsIElTTE9XX01VTFRfVFlQRSBbQ09MKDUsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCWltdWwJYngsIElTTE9XX01VTFRfVFlQRSBbQ09MKDcsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJcHVzaAllYXgJCTsgZWF4PXRtcDMKKwlwdXNoCWVkaQkJOyBlZGk9dG1wMgorCXB1c2gJZWN4CQk7IGVjeD10bXAxCisJcHVzaAllYngJCTsgZWJ4PXRtcDAKKworCWxlYQllc2ksW2VieCtlZGldCTsgZXNpPXozCisJbGVhCWVkeCxbZWN4K2VheF0JOyBlZHg9ejQKKwlhZGQJZWJ4LGVheAkJOyBlYng9ejEKKwlhZGQJZWN4LGVkaQkJOyBlY3g9ejIKKworCWxlYQllYXgsW2VzaStlZHhdCisJaW11bAllYXgsKEZfMV8xNzUpCTsgZWF4PXo1CisKKwlpbXVsCWVzaSwoLUZfMV85NjEpCTsgZXNpPXozKD1NVUxUSVBMWSh6MywtRklYXzFfOTYxNTcwNTYwKSkKKwlpbXVsCWVkeCwoLUZfMF8zOTApCTsgZWR4PXo0KD1NVUxUSVBMWSh6NCwtRklYXzBfMzkwMTgwNjQ0KSkKKwlpbXVsCWVieCwoLUZfMF84OTkpCTsgZWJ4PXoxKD1NVUxUSVBMWSh6MSwtRklYXzBfODk5OTc2MjIzKSkKKwlpbXVsCWVjeCwoLUZfMl81NjIpCTsgZWN4PXoyKD1NVUxUSVBMWSh6MiwtRklYXzJfNTYyOTE1NDQ3KSkKKworCWFkZAllc2ksZWF4CQk7IGVzaT16Myg9ejMrejUpCisJYWRkCWVkeCxlYXgJCTsgZWR4PXo0KD16NCt6NSkKKworCWxlYQllZGksW2VzaStlYnhdCTsgZWRpPXoxK3ozCisJbGVhCWVheCxbZWR4K2VjeF0JOyBlYXg9ejIrejQKKwlhZGQJZXNpLGVjeAkJOyBlc2k9ejIrejMKKwlhZGQJZWR4LGVieAkJOyBlZHg9ejErejQKKworCXBvcAllY3gJCTsgZWN4PXRtcDAKKwlwb3AJZWJ4CQk7IGVieD10bXAxCisJaW11bAllY3gsKEZfMF8yOTgpCTsgZWN4PXRtcDAoPU1VTFRJUExZKHRtcDAsRklYXzBfMjk4NjMxMzM2KSkKKwlpbXVsCWVieCwoRl8yXzA1MykJOyBlYng9dG1wMSg9TVVMVElQTFkodG1wMSxGSVhfMl8wNTMxMTk4NjkpKQorCWFkZAllZGksZWN4CQk7IGVkaT10bXAwKD10bXAwK3oxK3ozKQorCWFkZAllYXgsZWJ4CQk7IGVheD10bXAxKD10bXAxK3oyK3o0KQorCisJcG9wCWVjeAkJOyBlY3g9dG1wMgorCXBvcAllYngJCTsgZWJ4PXRtcDMKKwlpbXVsCWVjeCwoRl8zXzA3MikJOyBlY3g9dG1wMig9TVVMVElQTFkodG1wMixGSVhfM18wNzI3MTEwMjYpKQorCWltdWwJZWJ4LChGXzFfNTAxKQk7IGVieD10bXAzKD1NVUxUSVBMWSh0bXAzLEZJWF8xXzUwMTMyMTExMCkpCisJYWRkCWVzaSxlY3gJCTsgZXNpPXRtcDIoPXRtcDIrejIrejMpCisJYWRkCWVkeCxlYngJCTsgZWR4PXRtcDMoPXRtcDMrejErejQpCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJcG9wCWVjeAkJOyBlY3g9dG1wMTAKKwlwb3AJZWJ4CQk7IGVieD10bXAxMQorCXB1c2gJZWF4CQk7IHRtcDEKKwlwdXNoCWVkaQkJOyB0bXAwCisKKwlsZWEJZWF4LFtlY3grZWR4XQk7IGVheD1kYXRhMCg9dG1wMTArdG1wMykKKwlzdWIJZWN4LGVkeAkJOyBlY3g9ZGF0YTcoPXRtcDEwLXRtcDMpCisJbGVhCWVkeCxbZWJ4K2VzaV0JOyBlZHg9ZGF0YTEoPXRtcDExK3RtcDIpCisJc3ViCWVieCxlc2kJCTsgZWJ4PWRhdGE2KD10bXAxMS10bXAyKQorCisJbW92CWVkaSwgUE9JTlRFUiBbcHRyXQk7IGVkaT13c3B0cgorCisJZGVzY2FsZQllYXgsKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKwlkZXNjYWxlCWVjeCwoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQorCWRlc2NhbGUJZWR4LChDT05TVF9CSVRTLVBBU1MxX0JJVFMpCisJZGVzY2FsZQllYngsKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKworCW1vdglJTlQgW0NPTCgwLGVkaSxTSVpFT0ZfSU5UKV0sIGVheAorCW1vdglJTlQgW0NPTCg3LGVkaSxTSVpFT0ZfSU5UKV0sIGVjeAorCW1vdglJTlQgW0NPTCgxLGVkaSxTSVpFT0ZfSU5UKV0sIGVkeAorCW1vdglJTlQgW0NPTCg2LGVkaSxTSVpFT0ZfSU5UKV0sIGVieAorCisJcG9wCWVzaQkJOyBlc2k9dG1wMAorCXBvcAllYXgJCTsgZWF4PXRtcDEKKwlwb3AJZWN4CQk7IGVjeD10bXAxMgorCXBvcAllZHgJCTsgZWR4PXRtcDEzCisKKwlsZWEJZWJ4LFtlY3grZWF4XQk7IGVieD1kYXRhMig9dG1wMTIrdG1wMSkKKwlzdWIJZWN4LGVheAkJOyBlY3g9ZGF0YTUoPXRtcDEyLXRtcDEpCisJbGVhCWVheCxbZWR4K2VzaV0JOyBlYXg9ZGF0YTMoPXRtcDEzK3RtcDApCisJc3ViCWVkeCxlc2kJCTsgZWR4PWRhdGE0KD10bXAxMy10bXAwKQorCisJZGVzY2FsZQllYngsKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKwlkZXNjYWxlCWVjeCwoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQorCWRlc2NhbGUJZWF4LChDT05TVF9CSVRTLVBBU1MxX0JJVFMpCisJZGVzY2FsZQllZHgsKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKworCW1vdglJTlQgW0NPTCgyLGVkaSxTSVpFT0ZfSU5UKV0sIGVieAorCW1vdglJTlQgW0NPTCg1LGVkaSxTSVpFT0ZfSU5UKV0sIGVjeAorCW1vdglJTlQgW0NPTCgzLGVkaSxTSVpFT0ZfSU5UKV0sIGVheAorCW1vdglJTlQgW0NPTCg0LGVkaSxTSVpFT0ZfSU5UKV0sIGVkeAorCisJcG9wCWVkeAk7IHF1YW50cHRyCisJcG9wCWVzaQk7IGNvZWZfYmxvY2sKKwlwb3AJZWN4CTsgY3RyCisKKy5uZXh0Y29sdW1uOgorCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pDT0VGCTsgYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbgorCWFkZAllZHgsIGJ5dGUgU0laRU9GX0lTTE9XX01VTFRfVFlQRQorCWFkZAllZGksIGJ5dGUgU0laRU9GX0lOVAorCWRlYwllY3gKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKwltb3YJZWF4LCBQT0lOVEVSIFtjaW5mbyhlYnApXQorCW1vdgllYXgsIFBPSU5URVIgW2pkc3RydWN0X3NhbXBsZV9yYW5nZV9saW1pdChlYXgpXQorCXN1YgllYXgsIGJ5dGUgLUNFTlRFUkpTQU1QTEUqU0laRU9GX0pTQU1QTEUJOyBKU0FNUExFICogcmFuZ2VfbGltaXQKKwltb3YJUE9JTlRFUiBbcmFuZ2VfbGltaXRdLCBlYXgKKworCWxlYQllc2ksIFt3b3Jrc3BhY2VdCQkJOyBpbnQgKiB3c3B0cgorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWJwKV0JOyAoSlNBTVBST1cgKikKKwltb3YJZWN4LCBEQ1RTSVpFCQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWRpCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JCQk7IChKU0FNUExFICopCisJYWRkCWVkaSwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYnApXQk7IGVkaT1vdXRwdHIKKworJWlmbmRlZiBOT19aRVJPX1JPV19URVNUCisJbW92CWVheCwgSU5UIFtST1coMSxlc2ksU0laRU9GX0lOVCldCisJb3IJZWF4LCBJTlQgW1JPVygyLGVzaSxTSVpFT0ZfSU5UKV0KKwlqbnoJc2hvcnQgLnJvd0RDVAorCisJbW92CWVieCwgSU5UIFtST1coMyxlc2ksU0laRU9GX0lOVCldCisJbW92CWVheCwgSU5UIFtST1coNCxlc2ksU0laRU9GX0lOVCldCisJb3IJZWJ4LCBJTlQgW1JPVyg1LGVzaSxTSVpFT0ZfSU5UKV0KKwlvcgllYXgsIElOVCBbUk9XKDYsZXNpLFNJWkVPRl9JTlQpXQorCW9yCWVieCwgSU5UIFtST1coNyxlc2ksU0laRU9GX0lOVCldCisJb3IJZWF4LGVieAorCWpueglzaG9ydCAucm93RENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKwltb3YJZWF4LCBJTlQgW1JPVygwLGVzaSxTSVpFT0ZfSU5UKV0KKworCW1vdgllZHgsIFBPSU5URVIgW3JhbmdlX2xpbWl0XQk7IChKU0FNUExFICopCisKKwlkZXNjYWxlCWVheCwoUEFTUzFfQklUUyszKQorCWFuZAllYXgsUkFOR0VfTUFTSworCW1vdglhbCwgSlNBTVBMRSBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJSlNBTVBMRSBbZWRpKzAqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrMSpTSVpFT0ZfSlNBTVBMRV0sIGFsCisJbW92CUpTQU1QTEUgW2VkaSsyKlNJWkVPRl9KU0FNUExFXSwgYWwKKwltb3YJSlNBTVBMRSBbZWRpKzMqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrNCpTSVpFT0ZfSlNBTVBMRV0sIGFsCisJbW92CUpTQU1QTEUgW2VkaSs1KlNJWkVPRl9KU0FNUExFXSwgYWwKKwltb3YJSlNBTVBMRSBbZWRpKzYqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrNypTSVpFT0ZfSlNBTVBMRV0sIGFsCisJam1wCW5lYXIgLm5leHRyb3cKKwlhbGlnbngJMTYsNworJWVuZGlmCisucm93RENUOgorCXB1c2gJZXNpCTsgd3NwdHIKKwlwdXNoCWVjeAk7IGN0cgorCisJbW92CVBPSU5URVIgW3B0cl0sIGVkaQk7IG91dHB0cgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdgllYXgsIElOVCBbUk9XKDAsZXNpLFNJWkVPRl9JTlQpXQorCW1vdgllYngsIElOVCBbUk9XKDIsZXNpLFNJWkVPRl9JTlQpXQorCW1vdgllY3gsIElOVCBbUk9XKDQsZXNpLFNJWkVPRl9JTlQpXQorCW1vdgllZGksIElOVCBbUk9XKDYsZXNpLFNJWkVPRl9JTlQpXQorCisJbGVhCWVkeCxbZWF4K2VjeF0KKwlzdWIJZWF4LGVjeAorCXNhbAllZHgsQ09OU1RfQklUUwk7IGVkeD10bXAwCisJc2FsCWVheCxDT05TVF9CSVRTCTsgZWF4PXRtcDEKKworCWxlYQllY3gsW2VieCtlZGldCisJaW11bAllY3gsKEZfMF81NDEpCTsgZWN4PXoxCisJaW11bAllYngsKEZfMF83NjUpCTsgZWJ4PU1VTFRJUExZKHoyLEZJWF8wXzc2NTM2Njg2NSkKKwlpbXVsCWVkaSwoLUZfMV84NDcpCTsgZWRpPU1VTFRJUExZKHozLC1GSVhfMV84NDc3NTkwNjUpCisJYWRkCWVieCxlY3gJCTsgZWJ4PXRtcDMKKwlhZGQJZWRpLGVjeAkJOyBlZGk9dG1wMgorCisJbGVhCWVjeCxbZWR4K2VieF0JOyBlY3g9dG1wMTAKKwlzdWIJZWR4LGVieAkJOyBlZHg9dG1wMTMKKwlsZWEJZWJ4LFtlYXgrZWRpXQk7IGVieD10bXAxMQorCXN1YgllYXgsZWRpCQk7IGVheD10bXAxMgorCisJcHVzaAllZHgJCTsgdG1wMTMKKwlwdXNoCWVheAkJOyB0bXAxMgorCXB1c2gJZWJ4CQk7IHRtcDExCisJcHVzaAllY3gJCTsgdG1wMTAKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdgllYXgsIElOVCBbUk9XKDEsZXNpLFNJWkVPRl9JTlQpXQorCW1vdgllZGksIElOVCBbUk9XKDMsZXNpLFNJWkVPRl9JTlQpXQorCW1vdgllY3gsIElOVCBbUk9XKDUsZXNpLFNJWkVPRl9JTlQpXQorCW1vdgllYngsIElOVCBbUk9XKDcsZXNpLFNJWkVPRl9JTlQpXQorCisJcHVzaAllYXgJCTsgZWF4PXRtcDMKKwlwdXNoCWVkaQkJOyBlZGk9dG1wMgorCXB1c2gJZWN4CQk7IGVjeD10bXAxCisJcHVzaAllYngJCTsgZWJ4PXRtcDAKKworCWxlYQllc2ksW2VieCtlZGldCTsgZXNpPXozCisJbGVhCWVkeCxbZWN4K2VheF0JOyBlZHg9ejQKKwlhZGQJZWJ4LGVheAkJOyBlYng9ejEKKwlhZGQJZWN4LGVkaQkJOyBlY3g9ejIKKworCWxlYQllYXgsW2VzaStlZHhdCisJaW11bAllYXgsKEZfMV8xNzUpCTsgZWF4PXo1CisKKwlpbXVsCWVzaSwoLUZfMV85NjEpCTsgZXNpPXozKD1NVUxUSVBMWSh6MywtRklYXzFfOTYxNTcwNTYwKSkKKwlpbXVsCWVkeCwoLUZfMF8zOTApCTsgZWR4PXo0KD1NVUxUSVBMWSh6NCwtRklYXzBfMzkwMTgwNjQ0KSkKKwlpbXVsCWVieCwoLUZfMF84OTkpCTsgZWJ4PXoxKD1NVUxUSVBMWSh6MSwtRklYXzBfODk5OTc2MjIzKSkKKwlpbXVsCWVjeCwoLUZfMl81NjIpCTsgZWN4PXoyKD1NVUxUSVBMWSh6MiwtRklYXzJfNTYyOTE1NDQ3KSkKKworCWFkZAllc2ksZWF4CQk7IGVzaT16Myg9ejMrejUpCisJYWRkCWVkeCxlYXgJCTsgZWR4PXo0KD16NCt6NSkKKworCWxlYQllZGksW2VzaStlYnhdCTsgZWRpPXoxK3ozCisJbGVhCWVheCxbZWR4K2VjeF0JOyBlYXg9ejIrejQKKwlhZGQJZXNpLGVjeAkJOyBlc2k9ejIrejMKKwlhZGQJZWR4LGVieAkJOyBlZHg9ejErejQKKworCXBvcAllY3gJCTsgZWN4PXRtcDAKKwlwb3AJZWJ4CQk7IGVieD10bXAxCisJaW11bAllY3gsKEZfMF8yOTgpCTsgZWN4PXRtcDAoPU1VTFRJUExZKHRtcDAsRklYXzBfMjk4NjMxMzM2KSkKKwlpbXVsCWVieCwoRl8yXzA1MykJOyBlYng9dG1wMSg9TVVMVElQTFkodG1wMSxGSVhfMl8wNTMxMTk4NjkpKQorCWFkZAllZGksZWN4CQk7IGVkaT10bXAwKD10bXAwK3oxK3ozKQorCWFkZAllYXgsZWJ4CQk7IGVheD10bXAxKD10bXAxK3oyK3o0KQorCisJcG9wCWVjeAkJOyBlY3g9dG1wMgorCXBvcAllYngJCTsgZWJ4PXRtcDMKKwlpbXVsCWVjeCwoRl8zXzA3MikJOyBlY3g9dG1wMig9TVVMVElQTFkodG1wMixGSVhfM18wNzI3MTEwMjYpKQorCWltdWwJZWJ4LChGXzFfNTAxKQk7IGVieD10bXAzKD1NVUxUSVBMWSh0bXAzLEZJWF8xXzUwMTMyMTExMCkpCisJYWRkCWVzaSxlY3gJCTsgZXNpPXRtcDIoPXRtcDIrejIrejMpCisJYWRkCWVkeCxlYngJCTsgZWR4PXRtcDMoPXRtcDMrejErejQpCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJcG9wCWVjeAkJOyBlY3g9dG1wMTAKKwlwb3AJZWJ4CQk7IGVieD10bXAxMQorCXB1c2gJZWF4CQk7IHRtcDEKKwlwdXNoCWVkaQkJOyB0bXAwCisKKwlsZWEJZWF4LFtlY3grZWR4XQk7IGVheD1kYXRhMCg9dG1wMTArdG1wMykKKwlzdWIJZWN4LGVkeAkJOyBlY3g9ZGF0YTcoPXRtcDEwLXRtcDMpCisJbGVhCWVkeCxbZWJ4K2VzaV0JOyBlZHg9ZGF0YTEoPXRtcDExK3RtcDIpCisJc3ViCWVieCxlc2kJCTsgZWJ4PWRhdGE2KD10bXAxMS10bXAyKQorCisJbW92CWVzaSwgUE9JTlRFUiBbcmFuZ2VfbGltaXRdCTsgKEpTQU1QTEUgKikKKworCWRlc2NhbGUJZWF4LChDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKwlkZXNjYWxlCWVjeCwoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisJZGVzY2FsZQllZHgsKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorCWRlc2NhbGUJZWJ4LChDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKworCW1vdgllZGksIFBPSU5URVIgW3B0cl0JCTsgZWRpPW91dHB0cgorCisJYW5kCWVheCxSQU5HRV9NQVNLCisJYW5kCWVjeCxSQU5HRV9NQVNLCisJYW5kCWVkeCxSQU5HRV9NQVNLCisJYW5kCWVieCxSQU5HRV9NQVNLCisKKwltb3YJYWwsIEpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdCisJbW92CWNsLCBKU0FNUExFIFtlc2krZWN4KlNJWkVPRl9KU0FNUExFXQorCW1vdglkbCwgSlNBTVBMRSBbZXNpK2VkeCpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJYmwsIEpTQU1QTEUgW2VzaStlYngqU0laRU9GX0pTQU1QTEVdCisKKwltb3YJSlNBTVBMRSBbZWRpKzAqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrNypTSVpFT0ZfSlNBTVBMRV0sIGNsCisJbW92CUpTQU1QTEUgW2VkaSsxKlNJWkVPRl9KU0FNUExFXSwgZGwKKwltb3YJSlNBTVBMRSBbZWRpKzYqU0laRU9GX0pTQU1QTEVdLCBibAorCisJcG9wCWVzaQkJOyBlc2k9dG1wMAorCXBvcAllYXgJCTsgZWF4PXRtcDEKKwlwb3AJZWN4CQk7IGVjeD10bXAxMgorCXBvcAllZHgJCTsgZWR4PXRtcDEzCisKKwlsZWEJZWJ4LFtlY3grZWF4XQk7IGVieD1kYXRhMig9dG1wMTIrdG1wMSkKKwlzdWIJZWN4LGVheAkJOyBlY3g9ZGF0YTUoPXRtcDEyLXRtcDEpCisJbGVhCWVheCxbZWR4K2VzaV0JOyBlYXg9ZGF0YTMoPXRtcDEzK3RtcDApCisJc3ViCWVkeCxlc2kJCTsgZWR4PWRhdGE0KD10bXAxMy10bXAwKQorCisJbW92CWVzaSwgUE9JTlRFUiBbcmFuZ2VfbGltaXRdCTsgKEpTQU1QTEUgKikKKworCWRlc2NhbGUJZWJ4LChDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKwlkZXNjYWxlCWVjeCwoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisJZGVzY2FsZQllYXgsKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorCWRlc2NhbGUJZWR4LChDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKworCWFuZAllYngsUkFOR0VfTUFTSworCWFuZAllY3gsUkFOR0VfTUFTSworCWFuZAllYXgsUkFOR0VfTUFTSworCWFuZAllZHgsUkFOR0VfTUFTSworCisJbW92CWJsLCBKU0FNUExFIFtlc2krZWJ4KlNJWkVPRl9KU0FNUExFXQorCW1vdgljbCwgSlNBTVBMRSBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJYWwsIEpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdCisJbW92CWRsLCBKU0FNUExFIFtlc2krZWR4KlNJWkVPRl9KU0FNUExFXQorCisJbW92CUpTQU1QTEUgW2VkaSsyKlNJWkVPRl9KU0FNUExFXSwgYmwKKwltb3YJSlNBTVBMRSBbZWRpKzUqU0laRU9GX0pTQU1QTEVdLCBjbAorCW1vdglKU0FNUExFIFtlZGkrMypTSVpFT0ZfSlNBTVBMRV0sIGFsCisJbW92CUpTQU1QTEUgW2VkaSs0KlNJWkVPRl9KU0FNUExFXSwgZGwKKworCXBvcAllY3gJOyBjdHIKKwlwb3AJZXNpCTsgd3NwdHIKKworLm5leHRyb3c6CisJcG9wCWVkaQorCWFkZAllc2ksIGJ5dGUgRENUU0laRSpTSVpFT0ZfSU5UCTsgYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93CisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlkZWMJZWN4CisJam56CW5lYXIgLnJvd2xvb3AKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCisJcG9wCWVicAorCXJldAorCislZW5kaWYgOyBEQ1RfSVNMT1dfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qaWRjdHJlZC5hc20gYi9qaWRjdHJlZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2M2JmYgotLS0gL2Rldi9udWxsCisrKyBiL2ppZGN0cmVkLmFzbQpAQCAtMCwwICsxLDY4OCBAQAorOworOyBqaWRjdHJlZC5hc20gLSByZWR1Y2VkLXNpemUgSURDVCAobm9uLVNJTUQpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGludmVyc2UtRENUIHJvdXRpbmVzIHRoYXQgcHJvZHVjZSByZWR1Y2VkLXNpemUgb3V0cHV0OgorOyBlaXRoZXIgNHg0LCAyeDIsIG9yIDF4MSBwaXhlbHMgZnJvbSBhbiA4eDggRENUIGJsb2NrLgorOyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0cmVkLmM7Cis7IHNlZSB0aGUgamlkY3RyZWQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBMYXN0IE1vZGlmaWVkIDogT2N0b2JlciAxNywgMjAwNAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOyBEZXNjYWxlIGFuZCBjb3JyZWN0bHkgcm91bmQgYSBEV09SRCB2YWx1ZSB0aGF0J3Mgc2NhbGVkIGJ5IE4gYml0cy4KKzsKKyVtYWNybwlkZXNjYWxlIDIKKyVpZiAoJTIpPD03CisJYWRkCSUxLCBieXRlICgxPDwoKCUyKS0xKSkJOyBhZGQgcmVnMzIsaW1tOAorJWVsc2UKKwlhZGQJJTEsICgxPDwoKCUyKS0xKSkJOyBhZGQgcmVnMzIsaW1tMzIKKyVlbmRpZgorCXNhcgklMSwlMgorJWVuZG1hY3JvCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTEzCislZGVmaW5lIFBBU1MxX0JJVFMJMgorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzIxMQllcXUJIDE3MzAJCTsgRklYKDAuMjExMTY0MjQzKQorRl8wXzUwOQllcXUJIDQxNzYJCTsgRklYKDAuNTA5Nzk1NTc5KQorRl8wXzYwMQllcXUJIDQ5MjYJCTsgRklYKDAuNjAxMzQ0ODg3KQorRl8wXzcyMAllcXUJIDU5MDYJCTsgRklYKDAuNzIwOTU5ODIyKQorRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg1MAllcXUJIDY5NjcJCTsgRklYKDAuODUwNDMwMDk1KQorRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzA2MQllcXUJIDg2OTcJCTsgRklYKDEuMDYxNTk0MzM3KQorRl8xXzI3MgllcXUJMTA0MjYJCTsgRklYKDEuMjcyNzU4NTgwKQorRl8xXzQ1MQllcXUJMTE4OTMJCTsgRklYKDEuNDUxNzc0OTgxKQorRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzE3MgllcXUJMTc3OTkJCTsgRklYKDIuMTcyNzM0ODAzKQorRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzYyNAllcXUJMjk2OTIJCTsgRklYKDMuNjI0NTA5Nzg1KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMF8yMTEJZXF1CURFU0NBTEUoIDIyNjczNTg3OSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjIxMTE2NDI0MykKK0ZfMF81MDkJZXF1CURFU0NBTEUoIDU0NzM4ODgzNCwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjUwOTc5NTU3OSkKK0ZfMF82MDEJZXF1CURFU0NBTEUoIDY0NTY4OTE1NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjYwMTM0NDg4NykKK0ZfMF83MjAJZXF1CURFU0NBTEUoIDc3NDEyNDcxNCwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjcyMDk1OTgyMikKK0ZfMF83NjUJZXF1CURFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84NTAJZXF1CURFU0NBTEUoIDkxMzE0MjM2MSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg1MDQzMDA5NSkKK0ZfMF84OTkJZXF1CURFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8wNjEJZXF1CURFU0NBTEUoMTEzOTg3ODIzOSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjA2MTU5NDMzNykKK0ZfMV8yNzIJZXF1CURFU0NBTEUoMTM2NjYxNDExOSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjI3Mjc1ODU4MCkKK0ZfMV80NTEJZXF1CURFU0NBTEUoMTU1ODgzMTUxNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjQ1MTc3NDk4MSkKK0ZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl8xNzIJZXF1CURFU0NBTEUoMjMzMjk1NjIzMCwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjE3MjczNDgwMykKK0ZfMl81NjIJZXF1CURFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM182MjQJZXF1CURFU0NBTEUoMzg5MTc4Nzc0NywzMC1DT05TVF9CSVRTKQk7IEZJWCgzLjYyNDUwOTc4NSkKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKzsgcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDR4NCBvdXRwdXQgYmxvY2suCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2lkY3RfNHg0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxNgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyNAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSByYW5nZV9saW1pdAllYnAtU0laRU9GX1BPSU5URVIJOyBKU0FNUExFICogcmFuZ2VfbGltaXQKKyVkZWZpbmUgd29ya3NwYWNlCXJhbmdlX2xpbWl0LShEQ1RTSVpFKjQpKlNJWkVPRl9JTlQKKwkJCQkJOyBpbnQgd29ya3NwYWNlW0RDVFNJWkUqNF0KKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19pZGN0XzR4NCkKKworRVhUTihqcGVnX2lkY3RfNHg0KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJbGVhCWVzcCwgW3dvcmtzcGFjZV0KKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworCW1vdgllZHgsIFBPSU5URVIgW2NvbXBwdHIoZWJwKV0KKwltb3YJZWR4LCBQT0lOVEVSIFtqY29tcGluZm9fZGN0X3RhYmxlKGVkeCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXQkJOyBpbnB0cgorCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBpbnQgKiB3c3B0cgorCW1vdgllY3gsIERDVFNJWkUJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisJOyBEb24ndCBib3RoZXIgdG8gcHJvY2VzcyBjb2x1bW4gNCwgYmVjYXVzZSBzZWNvbmQgcGFzcyB3b24ndCB1c2UgaXQKKwljbXAJZWN4LCBieXRlIERDVFNJWkUtNAorCWplCW5lYXIgLm5leHRjb2x1bW4KKworCW1vdglheCwgSkNPRUYgW0NPTCgxLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWF4LCBKQ09FRiBbQ09MKDIsZXNpLFNJWkVPRl9KQ09FRildCisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCW1vdglheCwgSkNPRUYgW0NPTCgzLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdglieCwgSkNPRUYgW0NPTCg1LGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWF4LCBKQ09FRiBbQ09MKDYsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJYngsIEpDT0VGIFtDT0woNyxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcglheCxieAorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvOyB3ZSBuZWVkIG5vdCBleGFtaW5lIHRlcm0gNCBmb3IgNHg0IG91dHB1dAorCisJbW92CWF4LCBKQ09FRiBbQ09MKDAsZXNpLFNJWkVPRl9KQ09FRildCisJaW11bAlheCwgSVNMT1dfTVVMVF9UWVBFIFtDT0woMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJY3dkZQorCisJc2FsCWVheCwgUEFTUzFfQklUUworCisJbW92CUlOVCBbQ09MKDAsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDEsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDIsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDMsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJam1wCW5lYXIgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworCisuY29sdW1uRENUOgorCXB1c2gJZWN4CTsgY3RyCisJcHVzaAllc2kJOyBjb2VmX2Jsb2NrCisJcHVzaAllZHgJOyBxdWFudHB0cgorCXB1c2gJZWRpCTsgd3NwdHIKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZzeAllYngsIEpDT0VGIFtDT0woMixlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZzeAllY3gsIEpDT0VGIFtDT0woNixlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZzeAllYXgsIEpDT0VGIFtDT0woMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlpbXVsCWJ4LCBJU0xPV19NVUxUX1RZUEUgW0NPTCgyLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlpbXVsCWN4LCBJU0xPV19NVUxUX1RZUEUgW0NPTCg2LGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlpbXVsCWF4LCBJU0xPV19NVUxUX1RZUEUgW0NPTCgwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCWltdWwJZWJ4LChGXzFfODQ3KQkJOyBlYng9TVVMVElQTFkoejIsRklYXzFfODQ3NzU5MDY1KQorCWltdWwJZWN4LCgtRl8wXzc2NSkJCTsgZWN4PU1VTFRJUExZKHozLC1GSVhfMF83NjUzNjY4NjUpCisJc2FsCWVheCwoQ09OU1RfQklUUysxKQk7IGVheD10bXAwCisJYWRkCWVjeCxlYngJCQk7IGVjeD10bXAyCisKKwlsZWEJZWRpLFtlYXgrZWN4XQkJOyBlZGk9dG1wMTAKKwlzdWIJZWF4LGVjeAkJCTsgZWF4PXRtcDEyCisKKwlwdXNoCWVheAkJOyB0bXAxMgorCXB1c2gJZWRpCQk7IHRtcDEwCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZzeAllZGksIEpDT0VGIFtDT0woNyxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZzeAllY3gsIEpDT0VGIFtDT0woNSxlc2ksU0laRU9GX0pDT0VGKV0KKwlpbXVsCWRpLCBJU0xPV19NVUxUX1RZUEUgW0NPTCg3LGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlpbXVsCWN4LCBJU0xPV19NVUxUX1RZUEUgW0NPTCg1LGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwltb3ZzeAllYngsIEpDT0VGIFtDT0woMyxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZzeAllYXgsIEpDT0VGIFtDT0woMSxlc2ksU0laRU9GX0pDT0VGKV0KKwlpbXVsCWJ4LCBJU0xPV19NVUxUX1RZUEUgW0NPTCgzLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlpbXVsCWF4LCBJU0xPV19NVUxUX1RZUEUgW0NPTCgxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCW1vdgllc2ksZWRpCQk7IGVzaT1lZGk9ejEKKwltb3YJZWR4LGVjeAkJOyBlZHg9ZWN4PXoyCisJaW11bAllZGksKC1GXzBfMjExKQk7IGVkaT1NVUxUSVBMWSh6MSwtRklYXzBfMjExMTY0MjQzKQorCWltdWwJZWN4LChGXzFfNDUxKQk7IGVjeD1NVUxUSVBMWSh6MixGSVhfMV80NTE3NzQ5ODEpCisJaW11bAllc2ksKC1GXzBfNTA5KQk7IGVzaT1NVUxUSVBMWSh6MSwtRklYXzBfNTA5Nzk1NTc5KQorCWltdWwJZWR4LCgtRl8wXzYwMSkJOyBlZHg9TVVMVElQTFkoejIsLUZJWF8wXzYwMTM0NDg4NykKKworCWFkZAllZGksZWN4CQk7IGVkaT0odG1wMCkKKwlhZGQJZXNpLGVkeAkJOyBlc2k9KHRtcDIpCisKKwltb3YJZWN4LGVieAkJOyBlY3g9ZWJ4PXozCisJbW92CWVkeCxlYXgJCTsgZWR4PWVheD16NAorCWltdWwJZWJ4LCgtRl8yXzE3MikJOyBlYng9TVVMVElQTFkoejMsLUZJWF8yXzE3MjczNDgwMykKKwlpbXVsCWVheCwoRl8xXzA2MSkJOyBlYXg9TVVMVElQTFkoejQsRklYXzFfMDYxNTk0MzM3KQorCWltdWwJZWN4LChGXzBfODk5KQk7IGVjeD1NVUxUSVBMWSh6MyxGSVhfMF84OTk5NzYyMjMpCisJaW11bAllZHgsKEZfMl81NjIpCTsgZWR4PU1VTFRJUExZKHo0LEZJWF8yXzU2MjkxNTQ0NykKKworCWFkZAllZGksZWJ4CisJYWRkCWVzaSxlY3gKKwlhZGQJZWRpLGVheAkJOyBlZGk9dG1wMAorCWFkZAllc2ksZWR4CQk7IGVzaT10bXAyCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJcG9wCWVieAkJOyBlYng9dG1wMTAKKwlwb3AJZWN4CQk7IGVjeD10bXAxMgorCisJbGVhCWVheCxbZWJ4K2VzaV0JOyBlYXg9ZGF0YTAoPXRtcDEwK3RtcDIpCisJc3ViCWVieCxlc2kJCTsgZWJ4PWRhdGEzKD10bXAxMC10bXAyKQorCWxlYQllZHgsW2VjeCtlZGldCTsgZWR4PWRhdGExKD10bXAxMit0bXAwKQorCXN1YgllY3gsZWRpCQk7IGVjeD1kYXRhMig9dG1wMTItdG1wMCkKKworCXBvcAllZGkJOyB3c3B0cgorCisJZGVzY2FsZQllYXgsKENPTlNUX0JJVFMtUEFTUzFfQklUUysxKQorCWRlc2NhbGUJZWJ4LChDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSkKKwlkZXNjYWxlCWVkeCwoQ09OU1RfQklUUy1QQVNTMV9CSVRTKzEpCisJZGVzY2FsZQllY3gsKENPTlNUX0JJVFMtUEFTUzFfQklUUysxKQorCisJbW92CUlOVCBbQ09MKDAsZWRpLFNJWkVPRl9JTlQpXSwgZWF4CisJbW92CUlOVCBbQ09MKDMsZWRpLFNJWkVPRl9JTlQpXSwgZWJ4CisJbW92CUlOVCBbQ09MKDEsZWRpLFNJWkVPRl9JTlQpXSwgZWR4CisJbW92CUlOVCBbQ09MKDIsZWRpLFNJWkVPRl9JTlQpXSwgZWN4CisKKwlwb3AJZWR4CTsgcXVhbnRwdHIKKwlwb3AJZXNpCTsgY29lZl9ibG9jaworCXBvcAllY3gJOyBjdHIKKworLm5leHRjb2x1bW46CisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSkNPRUYJOyBhZHZhbmNlIHBvaW50ZXJzIHRvIG5leHQgY29sdW1uCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSU5UCisJZGVjCWVjeAorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIDQgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CWVheCwgUE9JTlRFUiBbY2luZm8oZWJwKV0KKwltb3YJZWF4LCBQT0lOVEVSIFtqZHN0cnVjdF9zYW1wbGVfcmFuZ2VfbGltaXQoZWF4KV0KKwlzdWIJZWF4LCBieXRlIC1DRU5URVJKU0FNUExFKlNJWkVPRl9KU0FNUExFCTsgSlNBTVBMRSAqIHJhbmdlX2xpbWl0CisJbW92CVBPSU5URVIgW3JhbmdlX2xpbWl0XSwgZWF4CisKKwlsZWEJZXNpLCBbd29ya3NwYWNlXQkJCTsgaW50ICogd3NwdHIKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVicCldCTsgKEpTQU1QUk9XICopCisJbW92CWVjeCwgRENUU0laRS8yCQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWRpCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JCQk7IChKU0FNUExFICopCisJYWRkCWVkaSwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYnApXQk7IGVkaT1vdXRwdHIKKworJWlmbmRlZiBOT19aRVJPX1JPV19URVNUCisJbW92CWVheCwgSU5UIFtST1coMSxlc2ksU0laRU9GX0lOVCldCisJb3IJZWF4LCBJTlQgW1JPVygyLGVzaSxTSVpFT0ZfSU5UKV0KKwlqbnoJc2hvcnQgLnJvd0RDVAorCisJbW92CWVheCwgSU5UIFtST1coMyxlc2ksU0laRU9GX0lOVCldCisJbW92CWVieCwgSU5UIFtST1coNSxlc2ksU0laRU9GX0lOVCldCisJb3IJZWF4LCBJTlQgW1JPVyg2LGVzaSxTSVpFT0ZfSU5UKV0KKwlvcgllYngsIElOVCBbUk9XKDcsZXNpLFNJWkVPRl9JTlQpXQorCW9yCWVheCxlYngKKwlqbnoJc2hvcnQgLnJvd0RDVAorCisJOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisJbW92CWVheCwgSU5UIFtST1coMCxlc2ksU0laRU9GX0lOVCldCisKKwltb3YJZWR4LCBQT0lOVEVSIFtyYW5nZV9saW1pdF0JOyAoSlNBTVBMRSAqKQorCisJZGVzY2FsZQllYXgsKFBBU1MxX0JJVFMrMykKKwlhbmQJZWF4LFJBTkdFX01BU0sKKwltb3YJYWwsIEpTQU1QTEUgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VkaSswKlNJWkVPRl9KU0FNUExFXSwgYWwKKwltb3YJSlNBTVBMRSBbZWRpKzEqU0laRU9GX0pTQU1QTEVdLCBhbAorCW1vdglKU0FNUExFIFtlZGkrMipTSVpFT0ZfSlNBTVBMRV0sIGFsCisJbW92CUpTQU1QTEUgW2VkaSszKlNJWkVPRl9KU0FNUExFXSwgYWwKKwlqbXAJbmVhciAubmV4dHJvdworCWFsaWdueAkxNiw3CislZW5kaWYKKy5yb3dEQ1Q6CisJcHVzaAllc2kJOyB3c3B0cgorCXB1c2gJZWN4CTsgY3RyCisJcHVzaAllZGkJOyBvdXRwdHIKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3YJZWF4LCBJTlQgW1JPVygwLGVzaSxTSVpFT0ZfSU5UKV0KKwltb3YJZWJ4LCBJTlQgW1JPVygyLGVzaSxTSVpFT0ZfSU5UKV0KKwltb3YJZWN4LCBJTlQgW1JPVyg2LGVzaSxTSVpFT0ZfSU5UKV0KKworCWltdWwJZWJ4LChGXzFfODQ3KQkJOyBlYng9TVVMVElQTFkoejIsRklYXzFfODQ3NzU5MDY1KQorCWltdWwJZWN4LCgtRl8wXzc2NSkJCTsgZWN4PU1VTFRJUExZKHozLC1GSVhfMF83NjUzNjY4NjUpCisJc2FsCWVheCwoQ09OU1RfQklUUysxKQk7IGVheD10bXAwCisJYWRkCWVjeCxlYngJCQk7IGVjeD10bXAyCisKKwlsZWEJZWRpLFtlYXgrZWN4XQkJOyBlZGk9dG1wMTAKKwlzdWIJZWF4LGVjeAkJCTsgZWF4PXRtcDEyCisKKwlwdXNoCWVheAkJOyB0bXAxMgorCXB1c2gJZWRpCQk7IHRtcDEwCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3YJZWF4LCBJTlQgW1JPVygxLGVzaSxTSVpFT0ZfSU5UKV0KKwltb3YJZWJ4LCBJTlQgW1JPVygzLGVzaSxTSVpFT0ZfSU5UKV0KKwltb3YJZWN4LCBJTlQgW1JPVyg1LGVzaSxTSVpFT0ZfSU5UKV0KKwltb3YJZWRpLCBJTlQgW1JPVyg3LGVzaSxTSVpFT0ZfSU5UKV0KKworCW1vdgllc2ksZWRpCQk7IGVzaT1lZGk9ejEKKwltb3YJZWR4LGVjeAkJOyBlZHg9ZWN4PXoyCisJaW11bAllZGksKC1GXzBfMjExKQk7IGVkaT1NVUxUSVBMWSh6MSwtRklYXzBfMjExMTY0MjQzKQorCWltdWwJZWN4LChGXzFfNDUxKQk7IGVjeD1NVUxUSVBMWSh6MixGSVhfMV80NTE3NzQ5ODEpCisJaW11bAllc2ksKC1GXzBfNTA5KQk7IGVzaT1NVUxUSVBMWSh6MSwtRklYXzBfNTA5Nzk1NTc5KQorCWltdWwJZWR4LCgtRl8wXzYwMSkJOyBlZHg9TVVMVElQTFkoejIsLUZJWF8wXzYwMTM0NDg4NykKKworCWFkZAllZGksZWN4CQk7IGVkaT0odG1wMCkKKwlhZGQJZXNpLGVkeAkJOyBlc2k9KHRtcDIpCisKKwltb3YJZWN4LGVieAkJOyBlY3g9ZWJ4PXozCisJbW92CWVkeCxlYXgJCTsgZWR4PWVheD16NAorCWltdWwJZWJ4LCgtRl8yXzE3MikJOyBlYng9TVVMVElQTFkoejMsLUZJWF8yXzE3MjczNDgwMykKKwlpbXVsCWVheCwoRl8xXzA2MSkJOyBlYXg9TVVMVElQTFkoejQsRklYXzFfMDYxNTk0MzM3KQorCWltdWwJZWN4LChGXzBfODk5KQk7IGVjeD1NVUxUSVBMWSh6MyxGSVhfMF84OTk5NzYyMjMpCisJaW11bAllZHgsKEZfMl81NjIpCTsgZWR4PU1VTFRJUExZKHo0LEZJWF8yXzU2MjkxNTQ0NykKKworCWFkZAllZGksZWJ4CisJYWRkCWVzaSxlY3gKKwlhZGQJZWRpLGVheAkJOyBlZGk9dG1wMAorCWFkZAllc2ksZWR4CQk7IGVzaT10bXAyCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJcG9wCWVieAkJOyBlYng9dG1wMTAKKwlwb3AJZWN4CQk7IGVjeD10bXAxMgorCisJbGVhCWVheCxbZWJ4K2VzaV0JOyBlYXg9ZGF0YTAoPXRtcDEwK3RtcDIpCisJc3ViCWVieCxlc2kJCTsgZWJ4PWRhdGEzKD10bXAxMC10bXAyKQorCWxlYQllZHgsW2VjeCtlZGldCTsgZWR4PWRhdGExKD10bXAxMit0bXAwKQorCXN1YgllY3gsZWRpCQk7IGVjeD1kYXRhMig9dG1wMTItdG1wMCkKKworCW1vdgllc2ksIFBPSU5URVIgW3JhbmdlX2xpbWl0XQk7IChKU0FNUExFICopCisKKwlkZXNjYWxlCWVheCwoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKwlkZXNjYWxlCWVieCwoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKwlkZXNjYWxlCWVkeCwoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKwlkZXNjYWxlCWVjeCwoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKworCXBvcAllZGkJOyBvdXRwdHIKKworCWFuZAllYXgsUkFOR0VfTUFTSworCWFuZAllYngsUkFOR0VfTUFTSworCWFuZAllZHgsUkFOR0VfTUFTSworCWFuZAllY3gsUkFOR0VfTUFTSworCisJbW92CWFsLCBKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXQorCW1vdglibCwgSlNBTVBMRSBbZXNpK2VieCpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJZGwsIEpTQU1QTEUgW2VzaStlZHgqU0laRU9GX0pTQU1QTEVdCisJbW92CWNsLCBKU0FNUExFIFtlc2krZWN4KlNJWkVPRl9KU0FNUExFXQorCisJbW92CUpTQU1QTEUgW2VkaSswKlNJWkVPRl9KU0FNUExFXSwgYWwKKwltb3YJSlNBTVBMRSBbZWRpKzMqU0laRU9GX0pTQU1QTEVdLCBibAorCW1vdglKU0FNUExFIFtlZGkrMSpTSVpFT0ZfSlNBTVBMRV0sIGRsCisJbW92CUpTQU1QTEUgW2VkaSsyKlNJWkVPRl9KU0FNUExFXSwgY2wKKworCXBvcAllY3gJOyBjdHIKKwlwb3AJZXNpCTsgd3NwdHIKKworLm5leHRyb3c6CisJcG9wCWVkaQorCWFkZAllc2ksIGJ5dGUgRENUU0laRSpTSVpFT0ZfSU5UCTsgYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93CisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlkZWMJZWN4CisJam56CW5lYXIgLnJvd2xvb3AKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCisJcG9wCWVicAorCXJldAorCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKzsgcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDJ4MiBvdXRwdXQgYmxvY2suCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2lkY3RfMngyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxNgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyNAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSByYW5nZV9saW1pdAllYnAtU0laRU9GX1BPSU5URVIJOyBKU0FNUExFICogcmFuZ2VfbGltaXQKKyVkZWZpbmUgd29ya3NwYWNlCXJhbmdlX2xpbWl0LShEQ1RTSVpFKjIpKlNJWkVPRl9JTlQKKwkJCQkJOyBpbnQgd29ya3NwYWNlW0RDVFNJWkUqMl0KKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19pZGN0XzJ4MikKKworRVhUTihqcGVnX2lkY3RfMngyKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJbGVhCWVzcCwgW3dvcmtzcGFjZV0KKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworCW1vdgllZHgsIFBPSU5URVIgW2NvbXBwdHIoZWJwKV0KKwltb3YJZWR4LCBQT0lOVEVSIFtqY29tcGluZm9fZGN0X3RhYmxlKGVkeCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXQkJOyBpbnB0cgorCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBpbnQgKiB3c3B0cgorCW1vdgllY3gsIERDVFNJWkUJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisJOyBEb24ndCBib3RoZXIgdG8gcHJvY2VzcyBjb2x1bW5zIDIsNCw2CisJdGVzdAllY3gsIDB4MDkKKwlqegluZWFyIC5uZXh0Y29sdW1uCisKKwltb3YJYXgsIEpDT0VGIFtDT0woMSxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcglheCwgSkNPRUYgW0NPTCgzLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwltb3YJYXgsIEpDT0VGIFtDT0woNSxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcglheCwgSkNPRUYgW0NPTCg3LGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvOyB3ZSBuZWVkIG5vdCBleGFtaW5lIHRlcm1zIDIsNCw2IGZvciAyeDIgb3V0cHV0CisKKwltb3YJYXgsIEpDT0VGIFtDT0woMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlpbXVsCWF4LCBJU0xPV19NVUxUX1RZUEUgW0NPTCgwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwljd2RlCisKKwlzYWwJZWF4LCBQQVNTMV9CSVRTCisKKwltb3YJSU5UIFtDT0woMCxlZGksU0laRU9GX0lOVCldLCBlYXgKKwltb3YJSU5UIFtDT0woMSxlZGksU0laRU9GX0lOVCldLCBlYXgKKwlqbXAJc2hvcnQgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworCisuY29sdW1uRENUOgorCXB1c2gJZWN4CTsgY3RyCisJcHVzaAllZGkJOyB3c3B0cgorCisJOyAtLSBPZGQgcGFydAorCisJbW92c3gJZWF4LCBKQ09FRiBbQ09MKDEsZXNpLFNJWkVPRl9KQ09FRildCisJbW92c3gJZWJ4LCBKQ09FRiBbQ09MKDMsZXNpLFNJWkVPRl9KQ09FRildCisJaW11bAlheCwgSVNMT1dfTVVMVF9UWVBFIFtDT0woMSxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJaW11bAlieCwgSVNMT1dfTVVMVF9UWVBFIFtDT0woMyxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJbW92c3gJZWN4LCBKQ09FRiBbQ09MKDUsZXNpLFNJWkVPRl9KQ09FRildCisJbW92c3gJZWRpLCBKQ09FRiBbQ09MKDcsZXNpLFNJWkVPRl9KQ09FRildCisJaW11bAljeCwgSVNMT1dfTVVMVF9UWVBFIFtDT0woNSxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJaW11bAlkaSwgSVNMT1dfTVVMVF9UWVBFIFtDT0woNyxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwlpbXVsCWVheCwoRl8zXzYyNCkJOyBlYXg9TVVMVElQTFkoZGF0YTEsRklYXzNfNjI0NTA5Nzg1KQorCWltdWwJZWJ4LCgtRl8xXzI3MikJOyBlYng9TVVMVElQTFkoZGF0YTMsLUZJWF8xXzI3Mjc1ODU4MCkKKwlpbXVsCWVjeCwoRl8wXzg1MCkJOyBlY3g9TVVMVElQTFkoZGF0YTUsRklYXzBfODUwNDMwMDk1KQorCWltdWwJZWRpLCgtRl8wXzcyMCkJOyBlZGk9TVVMVElQTFkoZGF0YTcsLUZJWF8wXzcyMDk1OTgyMikKKworCWFkZAllYXgsZWJ4CisJYWRkCWVjeCxlZGkKKwlhZGQJZWN4LGVheAkJOyBlY3g9dG1wMAorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdglheCwgSkNPRUYgW0NPTCgwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWltdWwJYXgsIElTTE9XX01VTFRfVFlQRSBbQ09MKDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCWN3ZGUKKworCXNhbAllYXgsKENPTlNUX0JJVFMrMikJOyBlYXg9dG1wMTAKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlwb3AJZWRpCTsgd3NwdHIKKworCWxlYQllYngsW2VheCtlY3hdCTsgZWJ4PWRhdGEwKD10bXAxMCt0bXAwKQorCXN1YgllYXgsZWN4CQk7IGVheD1kYXRhMSg9dG1wMTAtdG1wMCkKKworCXBvcAllY3gJOyBjdHIKKworCWRlc2NhbGUJZWJ4LChDT05TVF9CSVRTLVBBU1MxX0JJVFMrMikKKwlkZXNjYWxlCWVheCwoQ09OU1RfQklUUy1QQVNTMV9CSVRTKzIpCisKKwltb3YJSU5UIFtDT0woMCxlZGksU0laRU9GX0lOVCldLCBlYngKKwltb3YJSU5UIFtDT0woMSxlZGksU0laRU9GX0lOVCldLCBlYXgKKworLm5leHRjb2x1bW46CisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSkNPRUYJOyBhZHZhbmNlIHBvaW50ZXJzIHRvIG5leHQgY29sdW1uCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSU5UCisJZGVjCWVjeAorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIDIgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CWVheCwgUE9JTlRFUiBbY2luZm8oZWJwKV0KKwltb3YJZWF4LCBQT0lOVEVSIFtqZHN0cnVjdF9zYW1wbGVfcmFuZ2VfbGltaXQoZWF4KV0KKwlzdWIJZWF4LCBieXRlIC1DRU5URVJKU0FNUExFKlNJWkVPRl9KU0FNUExFCTsgSlNBTVBMRSAqIHJhbmdlX2xpbWl0CisJbW92CVBPSU5URVIgW3JhbmdlX2xpbWl0XSwgZWF4CisKKwlsZWEJZXNpLCBbd29ya3NwYWNlXQkJCTsgaW50ICogd3NwdHIKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVicCldCTsgKEpTQU1QUk9XICopCisJbW92CWVjeCwgRENUU0laRS80CQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWRpCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JCQk7IChKU0FNUExFICopCisJYWRkCWVkaSwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYnApXQk7IGVkaT1vdXRwdHIKKworJWlmbmRlZiBOT19aRVJPX1JPV19URVNUCisJbW92CWVheCwgSU5UIFtST1coMSxlc2ksU0laRU9GX0lOVCldCisJb3IJZWF4LCBJTlQgW1JPVygzLGVzaSxTSVpFT0ZfSU5UKV0KKwlqbnoJc2hvcnQgLnJvd0RDVAorCisJbW92CWVheCwgSU5UIFtST1coNSxlc2ksU0laRU9GX0lOVCldCisJb3IJZWF4LCBJTlQgW1JPVyg3LGVzaSxTSVpFT0ZfSU5UKV0KKwlqbnoJc2hvcnQgLnJvd0RDVAorCisJOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisJbW92CWVheCwgSU5UIFtST1coMCxlc2ksU0laRU9GX0lOVCldCisKKwltb3YJZWR4LCBQT0lOVEVSIFtyYW5nZV9saW1pdF0JOyAoSlNBTVBMRSAqKQorCisJZGVzY2FsZQllYXgsKFBBU1MxX0JJVFMrMykKKwlhbmQJZWF4LFJBTkdFX01BU0sKKwltb3YJYWwsIEpTQU1QTEUgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VkaSswKlNJWkVPRl9KU0FNUExFXSwgYWwKKwltb3YJSlNBTVBMRSBbZWRpKzEqU0laRU9GX0pTQU1QTEVdLCBhbAorCWptcAlzaG9ydCAubmV4dHJvdworCWFsaWdueAkxNiw3CislZW5kaWYKKy5yb3dEQ1Q6CisJcHVzaAllY3gJOyBjdHIKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdgllYXgsIElOVCBbUk9XKDEsZXNpLFNJWkVPRl9JTlQpXQorCW1vdgllYngsIElOVCBbUk9XKDMsZXNpLFNJWkVPRl9JTlQpXQorCW1vdgllY3gsIElOVCBbUk9XKDUsZXNpLFNJWkVPRl9JTlQpXQorCW1vdgllZHgsIElOVCBbUk9XKDcsZXNpLFNJWkVPRl9JTlQpXQorCisJaW11bAllYXgsKEZfM182MjQpCTsgZWF4PU1VTFRJUExZKGRhdGExLEZJWF8zXzYyNDUwOTc4NSkKKwlpbXVsCWVieCwoLUZfMV8yNzIpCTsgZWJ4PU1VTFRJUExZKGRhdGEzLC1GSVhfMV8yNzI3NTg1ODApCisJaW11bAllY3gsKEZfMF84NTApCTsgZWN4PU1VTFRJUExZKGRhdGE1LEZJWF8wXzg1MDQzMDA5NSkKKwlpbXVsCWVkeCwoLUZfMF83MjApCTsgZWR4PU1VTFRJUExZKGRhdGE3LC1GSVhfMF83MjA5NTk4MjIpCisKKwlhZGQJZWF4LGVieAorCWFkZAllY3gsZWR4CisJYWRkCWVjeCxlYXgJCTsgZWN4PXRtcDAKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3YJZWF4LCBJTlQgW1JPVygwLGVzaSxTSVpFT0ZfSU5UKV0KKworCXNhbAllYXgsKENPTlNUX0JJVFMrMikJOyBlYXg9dG1wMTAKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3YJZWR4LCBQT0lOVEVSIFtyYW5nZV9saW1pdF0JOyAoSlNBTVBMRSAqKQorCisJbGVhCWVieCxbZWF4K2VjeF0JOyBlYng9ZGF0YTAoPXRtcDEwK3RtcDApCisJc3ViCWVheCxlY3gJCTsgZWF4PWRhdGExKD10bXAxMC10bXAwKQorCisJcG9wCWVjeAk7IGN0cgorCisJZGVzY2FsZQllYngsKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzIpCisJZGVzY2FsZQllYXgsKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzIpCisKKwlhbmQJZWJ4LFJBTkdFX01BU0sKKwlhbmQJZWF4LFJBTkdFX01BU0sKKwltb3YJYmwsIEpTQU1QTEUgW2VkeCtlYngqU0laRU9GX0pTQU1QTEVdCisJbW92CWFsLCBKU0FNUExFIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQorCW1vdglKU0FNUExFIFtlZGkrMCpTSVpFT0ZfSlNBTVBMRV0sIGJsCisJbW92CUpTQU1QTEUgW2VkaSsxKlNJWkVPRl9KU0FNUExFXSwgYWwKKworLm5leHRyb3c6CisJcG9wCWVkaQorCWFkZAllc2ksIGJ5dGUgRENUU0laRSpTSVpFT0ZfSU5UCTsgYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93CisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlkZWMJZWN4CisJam56CW5lYXIgLnJvd2xvb3AKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCisJcG9wCWVicAorCXJldAorCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKzsgcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDF4MSBvdXRwdXQgYmxvY2suCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2lkY3RfMXgxIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxNgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyNAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBlYnAJCWVzcC00CQk7IHVzZSBlc3AgaW5zdGVhZCBvZiBlYnAKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19pZGN0XzF4MSkKKworRVhUTihqcGVnX2lkY3RfMXgxKToKKzsJcHVzaAllYnAKKzsJbW92CWVicCxlc3AKKzsJcHVzaAllYngJCTsgdW51c2VkCis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllc2kJCTsgdW51c2VkCis7CXB1c2gJZWRpCQk7IHVudXNlZAorCisJOyBXZSBoYXJkbHkgbmVlZCBhbiBpbnZlcnNlIERDVCByb3V0aW5lIGZvciB0aGlzOiBqdXN0IHRha2UgdGhlCisJOyBhdmVyYWdlIHBpeGVsIHZhbHVlLCB3aGljaCBpcyBvbmUtZWlnaHRoIG9mIHRoZSBEQyBjb2VmZmljaWVudC4KKworCW1vdgllZHgsIFBPSU5URVIgW2NvbXBwdHIoZWJwKV0KKwltb3YJZWN4LCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXQkJOyBpbnB0cgorCW1vdgllZHgsIFBPSU5URVIgW2pjb21waW5mb19kY3RfdGFibGUoZWR4KV0JOyBxdWFudHB0cgorCisJbW92CWF4LCBKQ09FRiBbQ09MKDAsZWN4LFNJWkVPRl9KQ09FRildCisJaW11bAlheCwgSVNMT1dfTVVMVF9UWVBFIFtDT0woMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwltb3YJZWN4LCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVicCldCTsgKEpTQU1QUk9XICopCisJbW92CWVkeCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYnApXQorCW1vdgllY3gsIEpTQU1QUk9XIFtlY3hdCQkJOyAoSlNBTVBMRSAqKQorCisJYWRkCWF4LCAoMSA8PCAoMy0xKSkgKyAoQ0VOVEVSSlNBTVBMRSA8PCAzKQorCXNhcglheCwzCQk7IGRlc2NhbGUKKworCXRlc3QJYWgsYWgJCTsgdW5zaWduZWQgc2F0dXJhdGlvbgorCWp6CXNob3J0IC5vdXRwdXQKKwlub3QJYXgKKwlzYXIJYXgsMTUKKwlhbGlnbngJMTYsMworLm91dHB1dDoKKwltb3YJSlNBTVBMRSBbZWN4K2VkeCpTSVpFT0ZfSlNBTVBMRV0sIGFsCisKKzsJcG9wCWVkaQkJOyB1bnVzZWQKKzsJcG9wCWVzaQkJOyB1bnVzZWQKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKzsJcG9wCWVicAorCXJldAorCislZW5kaWYgOyBJRENUX1NDQUxJTkdfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qaW1teGZzdC5hc20gYi9qaW1teGZzdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwZGVmNgotLS0gL2Rldi9udWxsCisrKyBiL2ppbW14ZnN0LmFzbQpAQCAtMCwwICsxLDUxMCBAQAorOworOyBqaW1teGZzdC5hc20gLSBmYXN0IGludGVnZXIgSURDVCAoTU1YKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mCis7IHRoZSBpbnZlcnNlIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcworOyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3Rmc3QuYzsgc2VlIHRoZSBqaWRjdGZzdC5jCis7IGZvciBtb3JlIGRldGFpbHMuCis7Cis7IExhc3QgTW9kaWZpZWQgOiBGZWJydWFyeSA0LCAyMDA2Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCislaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorJWlmZGVmIEpJRENUX0lOVF9NTVhfU1VQUE9SVEVECisKKzsgVGhpcyBtb2R1bGUgaXMgc3BlY2lhbGl6ZWQgdG8gdGhlIGNhc2UgRENUU0laRSA9IDguCis7CislaWYgRENUU0laRSAhPSA4CislZXJyb3IgIlNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiIKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgQ09OU1RfQklUUwk4CTsgMTQgaXMgYWxzbyBPSy4KKyVkZWZpbmUgUEFTUzFfQklUUwkyCisKKyVpZiBJRkFTVF9TQ0FMRV9CSVRTICE9IFBBU1MxX0JJVFMKKyVlcnJvciAiJ0lGQVNUX1NDQUxFX0JJVFMnIG11c3QgYmUgZXF1YWwgdG8gJ1BBU1MxX0JJVFMnLiIKKyVlbmRpZgorCislaWYgQ09OU1RfQklUUyA9PSA4CitGXzFfMDgyCWVxdQkyNzcJCTsgRklYKDEuMDgyMzkyMjAwKQorRl8xXzQxNAllcXUJMzYyCQk7IEZJWCgxLjQxNDIxMzU2MikKK0ZfMV84NDcJZXF1CTQ3MwkJOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfNjEzCWVxdQk2NjkJCTsgRklYKDIuNjEzMTI1OTMwKQorRl8xXzYxMwllcXUJKEZfMl82MTMgLSAyNTYpCTsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZQlERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMV8wODIJZXF1CURFU0NBTEUoMTE2MjIwOTc3NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjA4MjM5MjIwMCkKK0ZfMV80MTQJZXF1CURFU0NBTEUoMTUxODUwMDI0OSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjQxNDIxMzU2MikKK0ZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl82MTMJZXF1CURFU0NBTEUoMjgwNTgyMjYwMiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjYxMzEyNTkzMCkKK0ZfMV82MTMJZXF1CShGXzJfNjEzIC0gKDEgPDwgQ09OU1RfQklUUykpCTsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCis7IFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIDw9IDIgKHRvIGF2b2lkIG92ZXJmbG93KQorOyBDT05TVF9CSVRTICsgQ09OU1RfU0hJRlQgKyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA9PSAxNiAoZm9yIHBtdWxodykKKworJWRlZmluZSBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyAgIDIKKyVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9pZGN0X2lmYXN0X21teCkKKworRVhUTihqY29uc3RfaWRjdF9pZmFzdF9tbXgpOgorCitQV19GMTQxNAl0aW1lcyA0IGR3ICBGXzFfNDE0IDw8IENPTlNUX1NISUZUCitQV19GMTg0Nwl0aW1lcyA0IGR3ICBGXzFfODQ3IDw8IENPTlNUX1NISUZUCitQV19NRjE2MTMJdGltZXMgNCBkdyAtRl8xXzYxMyA8PCBDT05TVF9TSElGVAorUFdfRjEwODIJdGltZXMgNCBkdyAgRl8xXzA4MiA8PCBDT05TVF9TSElGVAorUEJfQ0VOVEVSSlNBTVAJdGltZXMgOCBkYiAgQ0VOVEVSSlNBTVBMRQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19pZGN0X2lmYXN0X21teCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCis7ICAgICAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGNpbmZvKGIpCShiKSs4CQk7IGpfZGVjb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTYJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjQJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKyVkZWZpbmUgd29ya3NwYWNlCXdrKDApLURDVFNJWkUyKlNJWkVPRl9KQ09FRgorCQkJCQk7IEpDT0VGIHdvcmtzcGFjZVtEQ1RTSVpFMl0KKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19pZGN0X2lmYXN0X21teCkKKworRVhUTihqcGVnX2lkY3RfaWZhc3RfbW14KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3dvcmtzcGFjZV0KKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgorCis7CW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbW92CWVkeCwgUE9JTlRFUiBbY29tcHB0cihlYXgpXQorCW1vdgllZHgsIFBPSU5URVIgW2pjb21waW5mb19kY3RfdGFibGUoZWR4KV0JOyBxdWFudHB0cgorCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCisJbGVhCWVkaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKKwltb3YJZWN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfSUZBU1RfTU1YCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTEsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0xLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMSxtbTAKKwlwYWNrc3N3YiBtbTEsbW0xCisJbW92ZAllYXgsbW0xCisJdGVzdAllYXgsZWF4CisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCisJbW92cSAgICAgIG1tMixtbTAJCTsgbW0wPWluMD0oMDAgMDEgMDIgMDMpCisJcHVucGNrbHdkIG1tMCxtbTAJCTsgbW0wPSgwMCAwMCAwMSAwMSkKKwlwdW5wY2tod2QgbW0yLG1tMgkJOyBtbTI9KDAyIDAyIDAzIDAzKQorCisJbW92cSAgICAgIG1tMSxtbTAKKwlwdW5wY2tsZHEgbW0wLG1tMAkJOyBtbTA9KDAwIDAwIDAwIDAwKQorCXB1bnBja2hkcSBtbTEsbW0xCQk7IG1tMT0oMDEgMDEgMDEgMDEpCisJbW92cSAgICAgIG1tMyxtbTIKKwlwdW5wY2tsZHEgbW0yLG1tMgkJOyBtbTI9KDAyIDAyIDAyIDAyKQorCXB1bnBja2hkcSBtbTMsbW0zCQk7IG1tMz0oMDMgMDMgMDMgMDMpCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKwlqbXAJbmVhciAubmV4dGNvbHVtbgorCWFsaWdueAkxNiw3CislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJcG11bGx3CW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJcG11bGx3CW1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisKKwltb3ZxCW1tNCxtbTAKKwltb3ZxCW1tNSxtbTEKKwlwc3VidwltbTAsbW0yCQkJOyBtbTA9dG1wMTEKKwlwc3VidwltbTEsbW0zCisJcGFkZHcJbW00LG1tMgkJCTsgbW00PXRtcDEwCisJcGFkZHcJbW01LG1tMwkJCTsgbW01PXRtcDEzCisKKwlwc2xsdwltbTEsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJbW0xLFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0KKwlwc3VidwltbTEsbW01CQkJOyBtbTE9dG1wMTIKKworCW1vdnEJbW02LG1tNAorCW1vdnEJbW03LG1tMAorCXBzdWJ3CW1tNCxtbTUJCQk7IG1tND10bXAzCisJcHN1YncJbW0wLG1tMQkJCTsgbW0wPXRtcDIKKwlwYWRkdwltbTYsbW01CQkJOyBtbTY9dG1wMAorCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz10bXAxCisKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTQJOyB3aygxKT10bXAzCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW0wCTsgd2soMCk9dG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMiwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJcG11bGx3CW1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJbW92cQltbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJcG11bGx3CW1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisKKwltb3ZxCW1tNCxtbTIKKwltb3ZxCW1tMCxtbTUKKwlwc3VidwltbTIsbW0xCQkJOyBtbTI9ejEyCisJcHN1YncJbW01LG1tMwkJCTsgbW01PXoxMAorCXBhZGR3CW1tNCxtbTEJCQk7IG1tND16MTEKKwlwYWRkdwltbTAsbW0zCQkJOyBtbTA9ejEzCisKKwltb3ZxCW1tMSxtbTUJCQk7IG1tMT16MTAodW5zY2FsZWQpCisJcHNsbHcJbW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcHNsbHcJbW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKwltb3ZxCW1tMyxtbTQKKwlwc3VidwltbTQsbW0wCisJcGFkZHcJbW0zLG1tMAkJCTsgbW0zPXRtcDcKKworCXBzbGx3CW1tNCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwltbTQsW0dPVE9GRihlYngsUFdfRjE0MTQpXQk7IG1tND10bXAxMQorCisJOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgorCTsKKwk7IChPcmlnaW5hbCkKKwk7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OworCTsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKKworCW1vdnEJbW0wLG1tNQorCXBhZGR3CW1tNSxtbTIKKwlwbXVsaHcJbW01LFtHT1RPRkYoZWJ4LFBXX0YxODQ3KV0JOyBtbTU9ejUKKwlwbXVsaHcJbW0wLFtHT1RPRkYoZWJ4LFBXX01GMTYxMyldCisJcG11bGh3CW1tMixbR09UT0ZGKGVieCxQV19GMTA4MildCisJcHN1YncJbW0wLG1tMQorCXBzdWJ3CW1tMixtbTUJCQk7IG1tMj10bXAxMAorCXBhZGR3CW1tMCxtbTUJCQk7IG1tMD10bXAxMgorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXBzdWJ3CW1tMCxtbTMJCQk7IG1tMD10bXA2CisJbW92cQltbTEsbW02CisJbW92cQltbTUsbW03CisJcGFkZHcJbW02LG1tMwkJCTsgbW02PWRhdGEwPSgwMCAwMSAwMiAwMykKKwlwYWRkdwltbTcsbW0wCQkJOyBtbTc9ZGF0YTE9KDEwIDExIDEyIDEzKQorCXBzdWJ3CW1tMSxtbTMJCQk7IG1tMT1kYXRhNz0oNzAgNzEgNzIgNzMpCisJcHN1YncJbW01LG1tMAkJCTsgbW01PWRhdGE2PSg2MCA2MSA2MiA2MykKKwlwc3VidwltbTQsbW0wCQkJOyBtbTQ9dG1wNQorCisJbW92cSAgICAgIG1tMyxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTYsbW03CQk7IG1tNj0oMDAgMTAgMDEgMTEpCisJcHVucGNraHdkIG1tMyxtbTcJCTsgbW0zPSgwMiAxMiAwMyAxMykKKwltb3ZxICAgICAgbW0wLG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tNSxtbTEJCTsgbW01PSg2MCA3MCA2MSA3MSkKKwlwdW5wY2tod2QgbW0wLG1tMQkJOyBtbTA9KDYyIDcyIDYzIDczKQorCisJbW92cQltbTcsIE1NV09SRCBbd2soMCldCTsgbW03PXRtcDIKKwltb3ZxCW1tMSwgTU1XT1JEIFt3aygxKV0JOyBtbTE9dG1wMworCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW01CTsgd2soMCk9KDYwIDcwIDYxIDcxKQorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMAk7IHdrKDEpPSg2MiA3MiA2MyA3MykKKworCXBhZGR3CW1tMixtbTQJCQk7IG1tMj10bXA0CisJbW92cQltbTUsbW03CisJbW92cQltbTAsbW0xCisJcGFkZHcJbW03LG1tNAkJCTsgbW03PWRhdGEyPSgyMCAyMSAyMiAyMykKKwlwYWRkdwltbTEsbW0yCQkJOyBtbTE9ZGF0YTQ9KDQwIDQxIDQyIDQzKQorCXBzdWJ3CW1tNSxtbTQJCQk7IG1tNT1kYXRhNT0oNTAgNTEgNTIgNTMpCisJcHN1YncJbW0wLG1tMgkJCTsgbW0wPWRhdGEzPSgzMCAzMSAzMiAzMykKKworCW1vdnEgICAgICBtbTQsbW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW03LG1tMAkJOyBtbTc9KDIwIDMwIDIxIDMxKQorCXB1bnBja2h3ZCBtbTQsbW0wCQk7IG1tND0oMjIgMzIgMjMgMzMpCisJbW92cSAgICAgIG1tMixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTEsbW01CQk7IG1tMT0oNDAgNTAgNDEgNTEpCisJcHVucGNraHdkIG1tMixtbTUJCTsgbW0yPSg0MiA1MiA0MyA1MykKKworCW1vdnEgICAgICBtbTAsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW02LG1tNwkJOyBtbTY9KDAwIDEwIDIwIDMwKQorCXB1bnBja2hkcSBtbTAsbW03CQk7IG1tMD0oMDEgMTEgMjEgMzEpCisJbW92cSAgICAgIG1tNSxtbTMJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTMsbW00CQk7IG1tMz0oMDIgMTIgMjIgMzIpCisJcHVucGNraGRxIG1tNSxtbTQJCTsgbW01PSgwMyAxMyAyMyAzMykKKworCW1vdnEJbW03LCBNTVdPUkQgW3drKDApXQk7IG1tNz0oNjAgNzAgNjEgNzEpCisJbW92cQltbTQsIE1NV09SRCBbd2soMSldCTsgbW00PSg2MiA3MiA2MyA3MykKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tNQorCisJbW92cSAgICAgIG1tNixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTEsbW03CQk7IG1tMT0oNDAgNTAgNjAgNzApCisJcHVucGNraGRxIG1tNixtbTcJCTsgbW02PSg0MSA1MSA2MSA3MSkKKwltb3ZxICAgICAgbW0wLG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tMixtbTQJCTsgbW0yPSg0MiA1MiA2MiA3MikKKwlwdW5wY2toZHEgbW0wLG1tNAkJOyBtbTA9KDQzIDUzIDYzIDczKQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW02CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisKKy5uZXh0Y29sdW1uOgorCWFkZAllc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYJCTsgY29lZl9ibG9jaworCWFkZAllZHgsIGJ5dGUgNCpTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFCTsgcXVhbnRwdHIKKwlhZGQJZWRpLCBieXRlIDQqRENUU0laRSpTSVpFT0ZfSkNPRUYJOyB3c3B0cgorCWRlYwllY3gJCQkJCTsgY3RyCisJam56CW5lYXIgLmNvbHVtbmxvb3AKKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwlsZWEJZXNpLCBbd29ya3NwYWNlXQkJCTsgSkNPRUYgKiB3c3B0cgorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0JOyAoSlNBTVBST1cgKikKKwltb3YJZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCisJbW92CWVjeCwgRENUU0laRS80CQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisJbW92cQltbTQsbW0wCisJbW92cQltbTUsbW0xCisJcHN1YncJbW0wLG1tMgkJCTsgbW0wPXRtcDExCisJcHN1YncJbW0xLG1tMworCXBhZGR3CW1tNCxtbTIJCQk7IG1tND10bXAxMAorCXBhZGR3CW1tNSxtbTMJCQk7IG1tNT10bXAxMworCisJcHNsbHcJbW0xLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CW1tMSxbR09UT0ZGKGVieCxQV19GMTQxNCldCisJcHN1YncJbW0xLG1tNQkJCTsgbW0xPXRtcDEyCisKKwltb3ZxCW1tNixtbTQKKwltb3ZxCW1tNyxtbTAKKwlwc3VidwltbTQsbW01CQkJOyBtbTQ9dG1wMworCXBzdWJ3CW1tMCxtbTEJCQk7IG1tMD10bXAyCisJcGFkZHcJbW02LG1tNQkJCTsgbW02PXRtcDAKKwlwYWRkdwltbTcsbW0xCQkJOyBtbTc9dG1wMQorCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW00CTsgd2soMSk9dG1wMworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tMAk7IHdrKDApPXRtcDIKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisJbW92cQltbTQsbW0yCisJbW92cQltbTAsbW01CisJcHN1YncJbW0yLG1tMQkJCTsgbW0yPXoxMgorCXBzdWJ3CW1tNSxtbTMJCQk7IG1tNT16MTAKKwlwYWRkdwltbTQsbW0xCQkJOyBtbTQ9ejExCisJcGFkZHcJbW0wLG1tMwkJCTsgbW0wPXoxMworCisJbW92cQltbTEsbW01CQkJOyBtbTE9ejEwKHVuc2NhbGVkKQorCXBzbGx3CW1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBzbGx3CW1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisJbW92cQltbTMsbW00CisJcHN1YncJbW00LG1tMAorCXBhZGR3CW1tMyxtbTAJCQk7IG1tMz10bXA3CisKKwlwc2xsdwltbTQsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJbW00LFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0JOyBtbTQ9dG1wMTEKKworCTsgVG8gYXZvaWQgb3ZlcmZsb3cuLi4KKwk7CisJOyAoT3JpZ2luYWwpCisJOyB0bXAxMiA9IC0yLjYxMzEyNTkzMCAqIHoxMCArIHo1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wMTIgPSAoLTEuNjEzMTI1OTMwIC0gMSkgKiB6MTAgKyB6NTsKKwk7ICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7CisKKwltb3ZxCW1tMCxtbTUKKwlwYWRkdwltbTUsbW0yCisJcG11bGh3CW1tNSxbR09UT0ZGKGVieCxQV19GMTg0NyldCTsgbW01PXo1CisJcG11bGh3CW1tMCxbR09UT0ZGKGVieCxQV19NRjE2MTMpXQorCXBtdWxodwltbTIsW0dPVE9GRihlYngsUFdfRjEwODIpXQorCXBzdWJ3CW1tMCxtbTEKKwlwc3VidwltbTIsbW01CQkJOyBtbTI9dG1wMTAKKwlwYWRkdwltbTAsbW01CQkJOyBtbTA9dG1wMTIKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlwc3VidwltbTAsbW0zCQkJOyBtbTA9dG1wNgorCW1vdnEJbW0xLG1tNgorCW1vdnEJbW01LG1tNworCXBhZGR3CW1tNixtbTMJCQk7IG1tNj1kYXRhMD0oMDAgMTAgMjAgMzApCisJcGFkZHcJbW03LG1tMAkJCTsgbW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKwlwc3JhdwltbTYsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisJcHNyYXcJbW03LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzdWJ3CW1tMSxtbTMJCQk7IG1tMT1kYXRhNz0oMDcgMTcgMjcgMzcpCisJcHN1YncJbW01LG1tMAkJCTsgbW01PWRhdGE2PSgwNiAxNiAyNiAzNikKKwlwc3JhdwltbTEsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisJcHNyYXcJbW01LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzdWJ3CW1tNCxtbTAJCQk7IG1tND10bXA1CisKKwlwYWNrc3N3YiAgbW02LG1tNQkJOyBtbTY9KDAwIDEwIDIwIDMwIDA2IDE2IDI2IDM2KQorCXBhY2tzc3diICBtbTcsbW0xCQk7IG1tNz0oMDEgMTEgMjEgMzEgMDcgMTcgMjcgMzcpCisKKwltb3ZxCW1tMywgTU1XT1JEIFt3aygwKV0JOyBtbTM9dG1wMgorCW1vdnEJbW0wLCBNTVdPUkQgW3drKDEpXQk7IG1tMD10bXAzCisKKwlwYWRkdwltbTIsbW00CQkJOyBtbTI9dG1wNAorCW1vdnEJbW01LG1tMworCW1vdnEJbW0xLG1tMAorCXBhZGR3CW1tMyxtbTQJCQk7IG1tMz1kYXRhMj0oMDIgMTIgMjIgMzIpCisJcGFkZHcJbW0wLG1tMgkJCTsgbW0wPWRhdGE0PSgwNCAxNCAyNCAzNCkKKwlwc3JhdwltbTMsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisJcHNyYXcJbW0wLChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzdWJ3CW1tNSxtbTQJCQk7IG1tNT1kYXRhNT0oMDUgMTUgMjUgMzUpCisJcHN1YncJbW0xLG1tMgkJCTsgbW0xPWRhdGEzPSgwMyAxMyAyMyAzMykKKwlwc3JhdwltbTUsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisJcHNyYXcJbW0xLChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCisJbW92cSAgICAgIG1tNCxbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCTsgbW00PVtQQl9DRU5URVJKU0FNUF0KKworCXBhY2tzc3diICBtbTMsbW0wCQk7IG1tMz0oMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQpCisJcGFja3Nzd2IgIG1tMSxtbTUJCTsgbW0xPSgwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSkKKworCXBhZGRiICAgICBtbTYsbW00CisJcGFkZGIgICAgIG1tNyxtbTQKKwlwYWRkYiAgICAgbW0zLG1tNAorCXBhZGRiICAgICBtbTEsbW00CisKKwltb3ZxICAgICAgbW0yLG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbGJ3IG1tNixtbTcJCTsgbW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKwlwdW5wY2toYncgbW0yLG1tNwkJOyBtbTI9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorCW1vdnEgICAgICBtbTAsbW0zCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsYncgbW0zLG1tMQkJOyBtbTM9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorCXB1bnBja2hidyBtbTAsbW0xCQk7IG1tMD0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisKKwltb3ZxICAgICAgbW01LG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbHdkIG1tNixtbTMJCTsgbW02PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKwlwdW5wY2tod2QgbW01LG1tMwkJOyBtbTU9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorCW1vdnEgICAgICBtbTQsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgbW0wLG1tMgkJOyBtbTA9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQorCXB1bnBja2h3ZCBtbTQsbW0yCQk7IG1tND0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisKKwltb3ZxICAgICAgbW03LG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbGRxIG1tNixtbTAJCTsgbW02PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwdW5wY2toZHEgbW03LG1tMAkJOyBtbTc9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorCW1vdnEgICAgICBtbTEsbW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tsZHEgbW01LG1tNAkJOyBtbTU9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorCXB1bnBja2hkcSBtbTEsbW00CQk7IG1tMT0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKwlwdXNocGljCWVieAkJCTsgc2F2ZSBHT1QgYWRkcmVzcworCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZWJ4LCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorCW1vdnEJTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW02CisJbW92cQlNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTcKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTUKKwltb3ZxCU1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMQorCisJcG9wcGljCWVieAkJCTsgcmVzdG9yZSBHT1QgYWRkcmVzcworCisJYWRkCWVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRgk7IHdzcHRyCisJYWRkCWVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworCWRlYwllY3gJCQkJOyBjdHIKKwlqbnoJbmVhciAucm93bG9vcAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSklEQ1RfSU5UX01NWF9TVVBQT1JURUQKKyVlbmRpZiA7IERDVF9JRkFTVF9TVVBQT1JURUQKZGlmZiAtLWdpdCBhL2ppbW14aW50LmFzbSBiL2ppbW14aW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTMzYTYzCi0tLSAvZGV2L251bGwKKysrIGIvamltbXhpbnQuYXNtCkBAIC0wLDAgKzEsODYyIEBACis7Cis7IGppbW14aW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgSURDVCAoTU1YKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGludmVyc2UgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGludC5jOyBzZWUgdGhlIGppZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgTGFzdCBNb2RpZmllZCA6IEZlYnJ1YXJ5IDQsIDIwMDYKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKyVpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECislaWZkZWYgSklEQ1RfSU5UX01NWF9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTEzCislZGVmaW5lIFBBU1MxX0JJVFMJMgorCislZGVmaW5lIERFU0NBTEVfUDEJKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMgkoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjk4CWVxdQkgMjQ0NgkJOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwCWVxdQkgMzE5NgkJOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxCWVxdQkgNDQzMwkJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1CWVxdQkgNjI3MAkJOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5CWVxdQkgNzM3MwkJOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1CWVxdQkgOTYzMwkJOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxCWVxdQkxMjI5OQkJOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3CWVxdQkxNTEzNwkJOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxCWVxdQkxNjA2OQkJOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzCWVxdQkxNjgxOQkJOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyCWVxdQkyMDk5NQkJOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyCWVxdQkyNTE3MgkJOyBGSVgoMy4wNzI3MTEwMjYpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8wXzI5OAllcXUJREVTQ0FMRSggMzIwNjUyOTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJREVTQ0FMRSggNDE4OTUzMjc2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJREVTQ0FMRSgxNjEyMDMxMjY3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJREVTQ0FMRSgyMjA0NTIwNjczLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuMDcyNzExMDI2KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfaXNsb3dfbW14KQorCitFWFROKGpjb25zdF9pZGN0X2lzbG93X21teCk6CisKK1BXX0YxMzBfRjA1NAl0aW1lcyAyIGR3ICAoRl8wXzU0MStGXzBfNzY1KSwgRl8wXzU0MQorUFdfRjA1NF9NRjEzMAl0aW1lcyAyIGR3ICBGXzBfNTQxLCAoRl8wXzU0MS1GXzFfODQ3KQorUFdfTUYwNzhfRjExNwl0aW1lcyAyIGR3ICAoRl8xXzE3NS1GXzFfOTYxKSwgRl8xXzE3NQorUFdfRjExN19GMDc4CXRpbWVzIDIgZHcgIEZfMV8xNzUsIChGXzFfMTc1LUZfMF8zOTApCitQV19NRjA2MF9NRjA4OQl0aW1lcyAyIGR3ICAoRl8wXzI5OC1GXzBfODk5KSwtRl8wXzg5OQorUFdfTUYwODlfRjA2MAl0aW1lcyAyIGR3IC1GXzBfODk5LCAoRl8xXzUwMS1GXzBfODk5KQorUFdfTUYwNTBfTUYyNTYJdGltZXMgMiBkdyAgKEZfMl8wNTMtRl8yXzU2MiksLUZfMl81NjIKK1BXX01GMjU2X0YwNTAJdGltZXMgMiBkdyAtRl8yXzU2MiwgKEZfM18wNzItRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEJdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMS0xKQorUERfREVTQ0FMRV9QMgl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AyLTEpCitQQl9DRU5URVJKU0FNUAl0aW1lcyA4IGRiICBDRU5URVJKU0FNUExFCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2lkY3RfaXNsb3dfbW14IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxNgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyNAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMTIKKyVkZWZpbmUgd29ya3NwYWNlCXdrKDApLURDVFNJWkUyKlNJWkVPRl9KQ09FRgorCQkJCQk7IEpDT0VGIHdvcmtzcGFjZVtEQ1RTSVpFMl0KKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19pZGN0X2lzbG93X21teCkKKworRVhUTihqcGVnX2lkY3RfaXNsb3dfbW14KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3dvcmtzcGFjZV0KKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgorCis7CW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbW92CWVkeCwgUE9JTlRFUiBbY29tcHB0cihlYXgpXQorCW1vdgllZHgsIFBPSU5URVIgW2pjb21waW5mb19kY3RfdGFibGUoZWR4KV0JOyBxdWFudHB0cgorCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCisJbGVhCWVkaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKKwltb3YJZWN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfSVNMT1dfTU1YCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTEsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0xLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMSxtbTAKKwlwYWNrc3N3YiBtbTEsbW0xCisJbW92ZAllYXgsbW0xCisJdGVzdAllYXgsZWF4CisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJcHNsbHcJbW0wLFBBU1MxX0JJVFMKKworCW1vdnEgICAgICBtbTIsbW0wCQk7IG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCXB1bnBja2x3ZCBtbTAsbW0wCQk7IG1tMD0oMDAgMDAgMDEgMDEpCisJcHVucGNraHdkIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMyAwMykKKworCW1vdnEgICAgICBtbTEsbW0wCisJcHVucGNrbGRxIG1tMCxtbTAJCTsgbW0wPSgwMCAwMCAwMCAwMCkKKwlwdW5wY2toZHEgbW0xLG1tMQkJOyBtbTE9KDAxIDAxIDAxIDAxKQorCW1vdnEgICAgICBtbTMsbW0yCisJcHVucGNrbGRxIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMiAwMikKKwlwdW5wY2toZHEgbW0zLG1tMwkJOyBtbTM9KDAzIDAzIDAzIDAzKQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisJam1wCW5lYXIgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwltbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOworCTsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7CisJOyB0bXAzID0gejEgKyB6MiAqIDAuNzY1MzY2ODY1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wMiA9IHoyICogMC41NDExOTYxMDAgKyB6MyAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKwk7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CisKKwltb3ZxICAgICAgbW00LG1tMQkJOyBtbTE9aW4yPXoyCisJbW92cSAgICAgIG1tNSxtbTEKKwlwdW5wY2tsd2QgbW00LG1tMwkJOyBtbTM9aW42PXozCisJcHVucGNraHdkIG1tNSxtbTMKKwltb3ZxICAgICAgbW0xLG1tNAorCW1vdnEgICAgICBtbTMsbW01CisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IG1tND10bXAzTAorCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyBtbTU9dG1wM0gKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IG1tMT10bXAyTAorCXBtYWRkd2QgICBtbTMsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgbW0zPXRtcDJICisKKwltb3ZxICAgICAgbW02LG1tMAorCXBhZGR3ICAgICBtbTAsbW0yCQk7IG1tMD1pbjAraW40CisJcHN1YncgICAgIG1tNixtbTIJCTsgbW02PWluMC1pbjQKKworCXB4b3IgICAgICBtbTcsbW03CisJcHhvciAgICAgIG1tMixtbTIKKwlwdW5wY2tsd2QgbW03LG1tMAkJOyBtbTc9dG1wMEwKKwlwdW5wY2tod2QgbW0yLG1tMAkJOyBtbTI9dG1wMEgKKwlwc3JhZCAgICAgbW03LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIG1tNywxNiAmIHBzbGxkIG1tNyxDT05TVF9CSVRTCisJcHNyYWQgICAgIG1tMiwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCBtbTIsMTYgJiBwc2xsZCBtbTIsQ09OU1RfQklUUworCisJbW92cQltbTAsbW03CisJcGFkZGQJbW03LG1tNAkJCTsgbW03PXRtcDEwTAorCXBzdWJkCW1tMCxtbTQJCQk7IG1tMD10bXAxM0wKKwltb3ZxCW1tNCxtbTIKKwlwYWRkZAltbTIsbW01CQkJOyBtbTI9dG1wMTBICisJcHN1YmQJbW00LG1tNQkJCTsgbW00PXRtcDEzSAorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW03CTsgd2soMCk9dG1wMTBMCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCTsgd2soMSk9dG1wMTBICisJbW92cQlNTVdPUkQgW3drKDIpXSwgbW0wCTsgd2soMik9dG1wMTNMCisJbW92cQlNTVdPUkQgW3drKDMpXSwgbW00CTsgd2soMyk9dG1wMTNICisKKwlweG9yICAgICAgbW01LG1tNQorCXB4b3IgICAgICBtbTcsbW03CisJcHVucGNrbHdkIG1tNSxtbTYJCTsgbW01PXRtcDFMCisJcHVucGNraHdkIG1tNyxtbTYJCTsgbW03PXRtcDFICisJcHNyYWQgICAgIG1tNSwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCBtbTUsMTYgJiBwc2xsZCBtbTUsQ09OU1RfQklUUworCXBzcmFkICAgICBtbTcsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgbW03LDE2ICYgcHNsbGQgbW03LENPTlNUX0JJVFMKKworCW1vdnEJbW0yLG1tNQorCXBhZGRkCW1tNSxtbTEJCQk7IG1tNT10bXAxMUwKKwlwc3ViZAltbTIsbW0xCQkJOyBtbTI9dG1wMTJMCisJbW92cQltbTAsbW03CisJcGFkZGQJbW03LG1tMwkJCTsgbW03PXRtcDExSAorCXBzdWJkCW1tMCxtbTMJCQk7IG1tMD10bXAxMkgKKworCW1vdnEJTU1XT1JEIFt3ayg0KV0sIG1tNQk7IHdrKDQpPXRtcDExTAorCW1vdnEJTU1XT1JEIFt3ayg1KV0sIG1tNwk7IHdrKDUpPXRtcDExSAorCW1vdnEJTU1XT1JEIFt3ayg2KV0sIG1tMgk7IHdrKDYpPXRtcDEyTAorCW1vdnEJTU1XT1JEIFt3ayg3KV0sIG1tMAk7IHdrKDcpPXRtcDEySAorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTQsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTYsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tNCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tNiwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwltb3ZxCW1tNSxtbTYKKwltb3ZxCW1tNyxtbTQKKwlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ejMKKwlwYWRkdwltbTcsbW0xCQkJOyBtbTc9ejQKKworCTsgKE9yaWdpbmFsKQorCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKwk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworCTsgejMgKz0gejU7ICB6NCArPSB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKwltb3ZxICAgICAgbW0yLG1tNQorCW1vdnEgICAgICBtbTAsbW01CisJcHVucGNrbHdkIG1tMixtbTcKKwlwdW5wY2tod2QgbW0wLG1tNworCW1vdnEgICAgICBtbTUsbW0yCisJbW92cSAgICAgIG1tNyxtbTAKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IG1tMj16M0wKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IG1tMD16M0gKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW01PXo0TAorCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyBtbTc9ejRICisKKwltb3ZxCU1NV09SRCBbd2soMTApXSwgbW0yCTsgd2soMTApPXozTAorCW1vdnEJTU1XT1JEIFt3aygxMSldLCBtbTAJOyB3aygxMSk9ejNICisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gdG1wMCArIHRtcDM7ICB6MiA9IHRtcDEgKyB0bXAyOworCTsgdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7CisJOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKKwk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworCTsgdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OworCTsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOworCTsgdG1wMSA9IHRtcDEgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXAyICogLTIuNTYyOTE1NDQ3OworCTsgdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworCTsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworCTsgdG1wMCArPSB6MzsgIHRtcDEgKz0gejQ7CisJOyB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsKKworCW1vdnEgICAgICBtbTIsbW0zCisJbW92cSAgICAgIG1tMCxtbTMKKwlwdW5wY2tsd2QgbW0yLG1tNAorCXB1bnBja2h3ZCBtbTAsbW00CisJbW92cSAgICAgIG1tMyxtbTIKKwltb3ZxICAgICAgbW00LG1tMAorCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IG1tMj10bXAwTAorCXBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IG1tMD10bXAwSAorCXBtYWRkd2QgICBtbTMsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgbW0zPXRtcDNMCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyBtbTQ9dG1wM0gKKworCXBhZGRkCW1tMiwgTU1XT1JEIFt3aygxMCldCTsgbW0yPXRtcDBMCisJcGFkZGQJbW0wLCBNTVdPUkQgW3drKDExKV0JOyBtbTA9dG1wMEgKKwlwYWRkZAltbTMsbW01CQkJOyBtbTM9dG1wM0wKKwlwYWRkZAltbTQsbW03CQkJOyBtbTQ9dG1wM0gKKworCW1vdnEJTU1XT1JEIFt3ayg4KV0sIG1tMgk7IHdrKDgpPXRtcDBMCisJbW92cQlNTVdPUkQgW3drKDkpXSwgbW0wCTsgd2soOSk9dG1wMEgKKworCW1vdnEgICAgICBtbTIsbW0xCisJbW92cSAgICAgIG1tMCxtbTEKKwlwdW5wY2tsd2QgbW0yLG1tNgorCXB1bnBja2h3ZCBtbTAsbW02CisJbW92cSAgICAgIG1tMSxtbTIKKwltb3ZxICAgICAgbW02LG1tMAorCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IG1tMj10bXAxTAorCXBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IG1tMD10bXAxSAorCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgbW0xPXRtcDJMCisJcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyBtbTY9dG1wMkgKKworCXBhZGRkCW1tMixtbTUJCQk7IG1tMj10bXAxTAorCXBhZGRkCW1tMCxtbTcJCQk7IG1tMD10bXAxSAorCXBhZGRkCW1tMSwgTU1XT1JEIFt3aygxMCldCTsgbW0xPXRtcDJMCisJcGFkZGQJbW02LCBNTVdPUkQgW3drKDExKV0JOyBtbTY9dG1wMkgKKworCW1vdnEJTU1XT1JEIFt3aygxMCldLCBtbTIJOyB3aygxMCk9dG1wMUwKKwltb3ZxCU1NV09SRCBbd2soMTEpXSwgbW0wCTsgd2soMTEpPXRtcDFICisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJbW92cQltbTUsIE1NV09SRCBbd2soMCldCTsgbW01PXRtcDEwTAorCW1vdnEJbW03LCBNTVdPUkQgW3drKDEpXQk7IG1tNz10bXAxMEgKKworCW1vdnEJbW0yLG1tNQorCW1vdnEJbW0wLG1tNworCXBhZGRkCW1tNSxtbTMJCQk7IG1tNT1kYXRhMEwKKwlwYWRkZAltbTcsbW00CQkJOyBtbTc9ZGF0YTBICisJcHN1YmQJbW0yLG1tMwkJCTsgbW0yPWRhdGE3TAorCXBzdWJkCW1tMCxtbTQJCQk7IG1tMD1kYXRhN0gKKworCW1vdnEJbW0zLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQk7IG1tMz1bUERfREVTQ0FMRV9QMV0KKworCXBhZGRkCW1tNSxtbTMKKwlwYWRkZAltbTcsbW0zCisJcHNyYWQJbW01LERFU0NBTEVfUDEKKwlwc3JhZAltbTcsREVTQ0FMRV9QMQorCXBhZGRkCW1tMixtbTMKKwlwYWRkZAltbTAsbW0zCisJcHNyYWQJbW0yLERFU0NBTEVfUDEKKwlwc3JhZAltbTAsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIG1tNSxtbTcJCTsgbW01PWRhdGEwPSgwMCAwMSAwMiAwMykKKwlwYWNrc3NkdyAgbW0yLG1tMAkJOyBtbTI9ZGF0YTc9KDcwIDcxIDcyIDczKQorCisJbW92cQltbTQsIE1NV09SRCBbd2soNCldCTsgbW00PXRtcDExTAorCW1vdnEJbW0zLCBNTVdPUkQgW3drKDUpXQk7IG1tMz10bXAxMUgKKworCW1vdnEJbW03LG1tNAorCW1vdnEJbW0wLG1tMworCXBhZGRkCW1tNCxtbTEJCQk7IG1tND1kYXRhMUwKKwlwYWRkZAltbTMsbW02CQkJOyBtbTM9ZGF0YTFICisJcHN1YmQJbW03LG1tMQkJCTsgbW03PWRhdGE2TAorCXBzdWJkCW1tMCxtbTYJCQk7IG1tMD1kYXRhNkgKKworCW1vdnEJbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQk7IG1tMT1bUERfREVTQ0FMRV9QMV0KKworCXBhZGRkCW1tNCxtbTEKKwlwYWRkZAltbTMsbW0xCisJcHNyYWQJbW00LERFU0NBTEVfUDEKKwlwc3JhZAltbTMsREVTQ0FMRV9QMQorCXBhZGRkCW1tNyxtbTEKKwlwYWRkZAltbTAsbW0xCisJcHNyYWQJbW03LERFU0NBTEVfUDEKKwlwc3JhZAltbTAsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIG1tNCxtbTMJCTsgbW00PWRhdGExPSgxMCAxMSAxMiAxMykKKwlwYWNrc3NkdyAgbW03LG1tMAkJOyBtbTc9ZGF0YTY9KDYwIDYxIDYyIDYzKQorCisJbW92cSAgICAgIG1tNixtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTUsbW00CQk7IG1tNT0oMDAgMTAgMDEgMTEpCisJcHVucGNraHdkIG1tNixtbTQJCTsgbW02PSgwMiAxMiAwMyAxMykKKwltb3ZxICAgICAgbW0xLG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tNyxtbTIJCTsgbW03PSg2MCA3MCA2MSA3MSkKKwlwdW5wY2tod2QgbW0xLG1tMgkJOyBtbTE9KDYyIDcyIDYzIDczKQorCisJbW92cQltbTMsIE1NV09SRCBbd2soNildCTsgbW0zPXRtcDEyTAorCW1vdnEJbW0wLCBNTVdPUkQgW3drKDcpXQk7IG1tMD10bXAxMkgKKwltb3ZxCW1tNCwgTU1XT1JEIFt3aygxMCldCTsgbW00PXRtcDFMCisJbW92cQltbTIsIE1NV09SRCBbd2soMTEpXQk7IG1tMj10bXAxSAorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW01CTsgd2soMCk9KDAwIDEwIDAxIDExKQorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNgk7IHdrKDEpPSgwMiAxMiAwMyAxMykKKwltb3ZxCU1NV09SRCBbd2soNCldLCBtbTcJOyB3ayg0KT0oNjAgNzAgNjEgNzEpCisJbW92cQlNTVdPUkQgW3drKDUpXSwgbW0xCTsgd2soNSk9KDYyIDcyIDYzIDczKQorCisJbW92cQltbTUsbW0zCisJbW92cQltbTYsbW0wCisJcGFkZGQJbW0zLG1tNAkJCTsgbW0zPWRhdGEyTAorCXBhZGRkCW1tMCxtbTIJCQk7IG1tMD1kYXRhMkgKKwlwc3ViZAltbTUsbW00CQkJOyBtbTU9ZGF0YTVMCisJcHN1YmQJbW02LG1tMgkJCTsgbW02PWRhdGE1SAorCisJbW92cQltbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCTsgbW03PVtQRF9ERVNDQUxFX1AxXQorCisJcGFkZGQJbW0zLG1tNworCXBhZGRkCW1tMCxtbTcKKwlwc3JhZAltbTMsREVTQ0FMRV9QMQorCXBzcmFkCW1tMCxERVNDQUxFX1AxCisJcGFkZGQJbW01LG1tNworCXBhZGRkCW1tNixtbTcKKwlwc3JhZAltbTUsREVTQ0FMRV9QMQorCXBzcmFkCW1tNixERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgbW0zLG1tMAkJOyBtbTM9ZGF0YTI9KDIwIDIxIDIyIDIzKQorCXBhY2tzc2R3ICBtbTUsbW02CQk7IG1tNT1kYXRhNT0oNTAgNTEgNTIgNTMpCisKKwltb3ZxCW1tMSwgTU1XT1JEIFt3aygyKV0JOyBtbTE9dG1wMTNMCisJbW92cQltbTQsIE1NV09SRCBbd2soMyldCTsgbW00PXRtcDEzSAorCW1vdnEJbW0yLCBNTVdPUkQgW3drKDgpXQk7IG1tMj10bXAwTAorCW1vdnEJbW03LCBNTVdPUkQgW3drKDkpXQk7IG1tNz10bXAwSAorCisJbW92cQltbTAsbW0xCisJbW92cQltbTYsbW00CisJcGFkZGQJbW0xLG1tMgkJCTsgbW0xPWRhdGEzTAorCXBhZGRkCW1tNCxtbTcJCQk7IG1tND1kYXRhM0gKKwlwc3ViZAltbTAsbW0yCQkJOyBtbTA9ZGF0YTRMCisJcHN1YmQJbW02LG1tNwkJCTsgbW02PWRhdGE0SAorCisJbW92cQltbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCTsgbW0yPVtQRF9ERVNDQUxFX1AxXQorCisJcGFkZGQJbW0xLG1tMgorCXBhZGRkCW1tNCxtbTIKKwlwc3JhZAltbTEsREVTQ0FMRV9QMQorCXBzcmFkCW1tNCxERVNDQUxFX1AxCisJcGFkZGQJbW0wLG1tMgorCXBhZGRkCW1tNixtbTIKKwlwc3JhZAltbTAsREVTQ0FMRV9QMQorCXBzcmFkCW1tNixERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgbW0xLG1tNAkJOyBtbTE9ZGF0YTM9KDMwIDMxIDMyIDMzKQorCXBhY2tzc2R3ICBtbTAsbW02CQk7IG1tMD1kYXRhND0oNDAgNDEgNDIgNDMpCisKKwltb3ZxCW1tNywgTU1XT1JEIFt3aygwKV0JOyBtbTc9KDAwIDEwIDAxIDExKQorCW1vdnEJbW0yLCBNTVdPUkQgW3drKDEpXQk7IG1tMj0oMDIgMTIgMDMgMTMpCisKKwltb3ZxICAgICAgbW00LG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tMyxtbTEJCTsgbW0zPSgyMCAzMCAyMSAzMSkKKwlwdW5wY2tod2QgbW00LG1tMQkJOyBtbTQ9KDIyIDMyIDIzIDMzKQorCW1vdnEgICAgICBtbTYsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0wLG1tNQkJOyBtbTA9KDQwIDUwIDQxIDUxKQorCXB1bnBja2h3ZCBtbTYsbW01CQk7IG1tNj0oNDIgNTIgNDMgNTMpCisKKwltb3ZxICAgICAgbW0xLG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tNyxtbTMJCTsgbW03PSgwMCAxMCAyMCAzMCkKKwlwdW5wY2toZHEgbW0xLG1tMwkJOyBtbTE9KDAxIDExIDIxIDMxKQorCW1vdnEgICAgICBtbTUsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0yLG1tNAkJOyBtbTI9KDAyIDEyIDIyIDMyKQorCXB1bnBja2hkcSBtbTUsbW00CQk7IG1tNT0oMDMgMTMgMjMgMzMpCisKKwltb3ZxCW1tMywgTU1XT1JEIFt3ayg0KV0JOyBtbTM9KDYwIDcwIDYxIDcxKQorCW1vdnEJbW00LCBNTVdPUkQgW3drKDUpXQk7IG1tND0oNjIgNzIgNjMgNzMpCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTcKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTUKKworCW1vdnEgICAgICBtbTcsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0wLG1tMwkJOyBtbTA9KDQwIDUwIDYwIDcwKQorCXB1bnBja2hkcSBtbTcsbW0zCQk7IG1tNz0oNDEgNTEgNjEgNzEpCisJbW92cSAgICAgIG1tMSxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTYsbW00CQk7IG1tNj0oNDIgNTIgNjIgNzIpCisJcHVucGNraGRxIG1tMSxtbTQJCTsgbW0xPSg0MyA1MyA2MyA3MykKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tNworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorCisubmV4dGNvbHVtbjoKKwlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGCQk7IGNvZWZfYmxvY2sKKwlhZGQJZWR4LCBieXRlIDQqU0laRU9GX0lTTE9XX01VTFRfVFlQRQk7IHF1YW50cHRyCisJYWRkCWVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0pDT0VGCTsgd3NwdHIKKwlkZWMJZWN4CQkJCQk7IGN0cgorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbGVhCWVzaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsKKwk7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OworCTsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisJOyB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOworCisJbW92cSAgICAgIG1tNCxtbTEJCTsgbW0xPWluMj16MgorCW1vdnEgICAgICBtbTUsbW0xCisJcHVucGNrbHdkIG1tNCxtbTMJCTsgbW0zPWluNj16MworCXB1bnBja2h3ZCBtbTUsbW0zCisJbW92cSAgICAgIG1tMSxtbTQKKwltb3ZxICAgICAgbW0zLG1tNQorCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyBtbTQ9dG1wM0wKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgbW01PXRtcDNICisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyBtbTE9dG1wMkwKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IG1tMz10bXAySAorCisJbW92cSAgICAgIG1tNixtbTAKKwlwYWRkdyAgICAgbW0wLG1tMgkJOyBtbTA9aW4wK2luNAorCXBzdWJ3ICAgICBtbTYsbW0yCQk7IG1tNj1pbjAtaW40CisKKwlweG9yICAgICAgbW03LG1tNworCXB4b3IgICAgICBtbTIsbW0yCisJcHVucGNrbHdkIG1tNyxtbTAJCTsgbW03PXRtcDBMCisJcHVucGNraHdkIG1tMixtbTAJCTsgbW0yPXRtcDBICisJcHNyYWQgICAgIG1tNywoMTYtQ09OU1RfQklUUykJOyBwc3JhZCBtbTcsMTYgJiBwc2xsZCBtbTcsQ09OU1RfQklUUworCXBzcmFkICAgICBtbTIsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgbW0yLDE2ICYgcHNsbGQgbW0yLENPTlNUX0JJVFMKKworCW1vdnEJbW0wLG1tNworCXBhZGRkCW1tNyxtbTQJCQk7IG1tNz10bXAxMEwKKwlwc3ViZAltbTAsbW00CQkJOyBtbTA9dG1wMTNMCisJbW92cQltbTQsbW0yCisJcGFkZGQJbW0yLG1tNQkJCTsgbW0yPXRtcDEwSAorCXBzdWJkCW1tNCxtbTUJCQk7IG1tND10bXAxM0gKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNwk7IHdrKDApPXRtcDEwTAorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMgk7IHdrKDEpPXRtcDEwSAorCW1vdnEJTU1XT1JEIFt3aygyKV0sIG1tMAk7IHdrKDIpPXRtcDEzTAorCW1vdnEJTU1XT1JEIFt3aygzKV0sIG1tNAk7IHdrKDMpPXRtcDEzSAorCisJcHhvciAgICAgIG1tNSxtbTUKKwlweG9yICAgICAgbW03LG1tNworCXB1bnBja2x3ZCBtbTUsbW02CQk7IG1tNT10bXAxTAorCXB1bnBja2h3ZCBtbTcsbW02CQk7IG1tNz10bXAxSAorCXBzcmFkICAgICBtbTUsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgbW01LDE2ICYgcHNsbGQgbW01LENPTlNUX0JJVFMKKwlwc3JhZCAgICAgbW03LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIG1tNywxNiAmIHBzbGxkIG1tNyxDT05TVF9CSVRTCisKKwltb3ZxCW1tMixtbTUKKwlwYWRkZAltbTUsbW0xCQkJOyBtbTU9dG1wMTFMCisJcHN1YmQJbW0yLG1tMQkJCTsgbW0yPXRtcDEyTAorCW1vdnEJbW0wLG1tNworCXBhZGRkCW1tNyxtbTMJCQk7IG1tNz10bXAxMUgKKwlwc3ViZAltbTAsbW0zCQkJOyBtbTA9dG1wMTJICisKKwltb3ZxCU1NV09SRCBbd2soNCldLCBtbTUJOyB3ayg0KT10bXAxMUwKKwltb3ZxCU1NV09SRCBbd2soNSldLCBtbTcJOyB3ayg1KT10bXAxMUgKKwltb3ZxCU1NV09SRCBbd2soNildLCBtbTIJOyB3ayg2KT10bXAxMkwKKwltb3ZxCU1NV09SRCBbd2soNyldLCBtbTAJOyB3ayg3KT10bXAxMkgKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdnEJbW00LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisJbW92cQltbTUsbW02CisJbW92cQltbTcsbW00CisJcGFkZHcJbW01LG1tMwkJCTsgbW01PXozCisJcGFkZHcJbW03LG1tMQkJCTsgbW03PXo0CisKKwk7IChPcmlnaW5hbCkKKwk7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisJOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKwk7IHozICs9IHo1OyAgejQgKz0gejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKwk7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisJbW92cSAgICAgIG1tMixtbTUKKwltb3ZxICAgICAgbW0wLG1tNQorCXB1bnBja2x3ZCBtbTIsbW03CisJcHVucGNraHdkIG1tMCxtbTcKKwltb3ZxICAgICAgbW01LG1tMgorCW1vdnEgICAgICBtbTcsbW0wCisJcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTI9ejNMCisJcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTA9ejNICisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IG1tNT16NEwKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW03PXo0SAorCisJbW92cQlNTVdPUkQgW3drKDEwKV0sIG1tMgk7IHdrKDEwKT16M0wKKwltb3ZxCU1NV09SRCBbd2soMTEpXSwgbW0wCTsgd2soMTEpPXozSAorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKwk7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OworCTsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisJOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKKwk7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworCTsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CisKKwltb3ZxICAgICAgbW0yLG1tMworCW1vdnEgICAgICBtbTAsbW0zCisJcHVucGNrbHdkIG1tMixtbTQKKwlwdW5wY2tod2QgbW0wLG1tNAorCW1vdnEgICAgICBtbTMsbW0yCisJbW92cSAgICAgIG1tNCxtbTAKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyBtbTI9dG1wMEwKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyBtbTA9dG1wMEgKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IG1tMz10bXAzTAorCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgbW00PXRtcDNICisKKwlwYWRkZAltbTIsIE1NV09SRCBbd2soMTApXQk7IG1tMj10bXAwTAorCXBhZGRkCW1tMCwgTU1XT1JEIFt3aygxMSldCTsgbW0wPXRtcDBICisJcGFkZGQJbW0zLG1tNQkJCTsgbW0zPXRtcDNMCisJcGFkZGQJbW00LG1tNwkJCTsgbW00PXRtcDNICisKKwltb3ZxCU1NV09SRCBbd2soOCldLCBtbTIJOyB3ayg4KT10bXAwTAorCW1vdnEJTU1XT1JEIFt3ayg5KV0sIG1tMAk7IHdrKDkpPXRtcDBICisKKwltb3ZxICAgICAgbW0yLG1tMQorCW1vdnEgICAgICBtbTAsbW0xCisJcHVucGNrbHdkIG1tMixtbTYKKwlwdW5wY2tod2QgbW0wLG1tNgorCW1vdnEgICAgICBtbTEsbW0yCisJbW92cSAgICAgIG1tNixtbTAKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyBtbTI9dG1wMUwKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyBtbTA9dG1wMUgKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IG1tMT10bXAyTAorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgbW02PXRtcDJICisKKwlwYWRkZAltbTIsbW01CQkJOyBtbTI9dG1wMUwKKwlwYWRkZAltbTAsbW03CQkJOyBtbTA9dG1wMUgKKwlwYWRkZAltbTEsIE1NV09SRCBbd2soMTApXQk7IG1tMT10bXAyTAorCXBhZGRkCW1tNiwgTU1XT1JEIFt3aygxMSldCTsgbW02PXRtcDJICisKKwltb3ZxCU1NV09SRCBbd2soMTApXSwgbW0yCTsgd2soMTApPXRtcDFMCisJbW92cQlNTVdPUkQgW3drKDExKV0sIG1tMAk7IHdrKDExKT10bXAxSAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdnEJbW01LCBNTVdPUkQgW3drKDApXQk7IG1tNT10bXAxMEwKKwltb3ZxCW1tNywgTU1XT1JEIFt3aygxKV0JOyBtbTc9dG1wMTBICisKKwltb3ZxCW1tMixtbTUKKwltb3ZxCW1tMCxtbTcKKwlwYWRkZAltbTUsbW0zCQkJOyBtbTU9ZGF0YTBMCisJcGFkZGQJbW03LG1tNAkJCTsgbW03PWRhdGEwSAorCXBzdWJkCW1tMixtbTMJCQk7IG1tMj1kYXRhN0wKKwlwc3ViZAltbTAsbW00CQkJOyBtbTA9ZGF0YTdICisKKwltb3ZxCW1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0JOyBtbTM9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAltbTUsbW0zCisJcGFkZGQJbW03LG1tMworCXBzcmFkCW1tNSxERVNDQUxFX1AyCisJcHNyYWQJbW03LERFU0NBTEVfUDIKKwlwYWRkZAltbTIsbW0zCisJcGFkZGQJbW0wLG1tMworCXBzcmFkCW1tMixERVNDQUxFX1AyCisJcHNyYWQJbW0wLERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICBtbTUsbW03CQk7IG1tNT1kYXRhMD0oMDAgMTAgMjAgMzApCisJcGFja3NzZHcgIG1tMixtbTAJCTsgbW0yPWRhdGE3PSgwNyAxNyAyNyAzNykKKworCW1vdnEJbW00LCBNTVdPUkQgW3drKDQpXQk7IG1tND10bXAxMUwKKwltb3ZxCW1tMywgTU1XT1JEIFt3ayg1KV0JOyBtbTM9dG1wMTFICisKKwltb3ZxCW1tNyxtbTQKKwltb3ZxCW1tMCxtbTMKKwlwYWRkZAltbTQsbW0xCQkJOyBtbTQ9ZGF0YTFMCisJcGFkZGQJbW0zLG1tNgkJCTsgbW0zPWRhdGExSAorCXBzdWJkCW1tNyxtbTEJCQk7IG1tNz1kYXRhNkwKKwlwc3ViZAltbTAsbW02CQkJOyBtbTA9ZGF0YTZICisKKwltb3ZxCW1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0JOyBtbTE9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAltbTQsbW0xCisJcGFkZGQJbW0zLG1tMQorCXBzcmFkCW1tNCxERVNDQUxFX1AyCisJcHNyYWQJbW0zLERFU0NBTEVfUDIKKwlwYWRkZAltbTcsbW0xCisJcGFkZGQJbW0wLG1tMQorCXBzcmFkCW1tNyxERVNDQUxFX1AyCisJcHNyYWQJbW0wLERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICBtbTQsbW0zCQk7IG1tND1kYXRhMT0oMDEgMTEgMjEgMzEpCisJcGFja3NzZHcgIG1tNyxtbTAJCTsgbW03PWRhdGE2PSgwNiAxNiAyNiAzNikKKworCXBhY2tzc3diICBtbTUsbW03CQk7IG1tNT0oMDAgMTAgMjAgMzAgMDYgMTYgMjYgMzYpCisJcGFja3Nzd2IgIG1tNCxtbTIJCTsgbW00PSgwMSAxMSAyMSAzMSAwNyAxNyAyNyAzNykKKworCW1vdnEJbW02LCBNTVdPUkQgW3drKDYpXQk7IG1tNj10bXAxMkwKKwltb3ZxCW1tMSwgTU1XT1JEIFt3ayg3KV0JOyBtbTE9dG1wMTJICisJbW92cQltbTMsIE1NV09SRCBbd2soMTApXQk7IG1tMz10bXAxTAorCW1vdnEJbW0wLCBNTVdPUkQgW3drKDExKV0JOyBtbTA9dG1wMUgKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNQk7IHdrKDApPSgwMCAxMCAyMCAzMCAwNiAxNiAyNiAzNikKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTQJOyB3aygxKT0oMDEgMTEgMjEgMzEgMDcgMTcgMjcgMzcpCisKKwltb3ZxCW1tNyxtbTYKKwltb3ZxCW1tMixtbTEKKwlwYWRkZAltbTYsbW0zCQkJOyBtbTY9ZGF0YTJMCisJcGFkZGQJbW0xLG1tMAkJCTsgbW0xPWRhdGEySAorCXBzdWJkCW1tNyxtbTMJCQk7IG1tNz1kYXRhNUwKKwlwc3ViZAltbTIsbW0wCQkJOyBtbTI9ZGF0YTVICisKKwltb3ZxCW1tNSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0JOyBtbTU9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAltbTYsbW01CisJcGFkZGQJbW0xLG1tNQorCXBzcmFkCW1tNixERVNDQUxFX1AyCisJcHNyYWQJbW0xLERFU0NBTEVfUDIKKwlwYWRkZAltbTcsbW01CisJcGFkZGQJbW0yLG1tNQorCXBzcmFkCW1tNyxERVNDQUxFX1AyCisJcHNyYWQJbW0yLERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICBtbTYsbW0xCQk7IG1tNj1kYXRhMj0oMDIgMTIgMjIgMzIpCisJcGFja3NzZHcgIG1tNyxtbTIJCTsgbW03PWRhdGE1PSgwNSAxNSAyNSAzNSkKKworCW1vdnEJbW00LCBNTVdPUkQgW3drKDIpXQk7IG1tND10bXAxM0wKKwltb3ZxCW1tMywgTU1XT1JEIFt3aygzKV0JOyBtbTM9dG1wMTNICisJbW92cQltbTAsIE1NV09SRCBbd2soOCldCTsgbW0wPXRtcDBMCisJbW92cQltbTUsIE1NV09SRCBbd2soOSldCTsgbW01PXRtcDBICisKKwltb3ZxCW1tMSxtbTQKKwltb3ZxCW1tMixtbTMKKwlwYWRkZAltbTQsbW0wCQkJOyBtbTQ9ZGF0YTNMCisJcGFkZGQJbW0zLG1tNQkJCTsgbW0zPWRhdGEzSAorCXBzdWJkCW1tMSxtbTAJCQk7IG1tMT1kYXRhNEwKKwlwc3ViZAltbTIsbW01CQkJOyBtbTI9ZGF0YTRICisKKwltb3ZxCW1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0JOyBtbTA9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAltbTQsbW0wCisJcGFkZGQJbW0zLG1tMAorCXBzcmFkCW1tNCxERVNDQUxFX1AyCisJcHNyYWQJbW0zLERFU0NBTEVfUDIKKwlwYWRkZAltbTEsbW0wCisJcGFkZGQJbW0yLG1tMAorCXBzcmFkCW1tMSxERVNDQUxFX1AyCisJcHNyYWQJbW0yLERFU0NBTEVfUDIKKworCW1vdnEgICAgICBtbTUsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQk7IG1tNT1bUEJfQ0VOVEVSSlNBTVBdCisKKwlwYWNrc3NkdyAgbW00LG1tMwkJOyBtbTQ9ZGF0YTM9KDAzIDEzIDIzIDMzKQorCXBhY2tzc2R3ICBtbTEsbW0yCQk7IG1tMT1kYXRhND0oMDQgMTQgMjQgMzQpCisKKwltb3ZxICAgICAgbW0wLCBNTVdPUkQgW3drKDApXQk7IG1tMD0oMDAgMTAgMjAgMzAgMDYgMTYgMjYgMzYpCisJbW92cSAgICAgIG1tMywgTU1XT1JEIFt3aygxKV0JOyBtbTM9KDAxIDExIDIxIDMxIDA3IDE3IDI3IDM3KQorCisJcGFja3Nzd2IgIG1tNixtbTEJCTsgbW02PSgwMiAxMiAyMiAzMiAwNCAxNCAyNCAzNCkKKwlwYWNrc3N3YiAgbW00LG1tNwkJOyBtbTQ9KDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1KQorCisJcGFkZGIgICAgIG1tMCxtbTUKKwlwYWRkYiAgICAgbW0zLG1tNQorCXBhZGRiICAgICBtbTYsbW01CisJcGFkZGIgICAgIG1tNCxtbTUKKworCW1vdnEgICAgICBtbTIsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsYncgbW0wLG1tMwkJOyBtbTA9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorCXB1bnBja2hidyBtbTIsbW0zCQk7IG1tMj0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisJbW92cSAgICAgIG1tMSxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2xidyBtbTYsbW00CQk7IG1tNj0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisJcHVucGNraGJ3IG1tMSxtbTQJCTsgbW0xPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKworCW1vdnEgICAgICBtbTcsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgbW0wLG1tNgkJOyBtbTA9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorCXB1bnBja2h3ZCBtbTcsbW02CQk7IG1tNz0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisJbW92cSAgICAgIG1tNSxtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2x3ZCBtbTEsbW0yCQk7IG1tMT0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisJcHVucGNraHdkIG1tNSxtbTIJCTsgbW01PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKworCW1vdnEgICAgICBtbTMsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tsZHEgbW0wLG1tMQkJOyBtbTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorCXB1bnBja2hkcSBtbTMsbW0xCQk7IG1tMz0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisJbW92cSAgICAgIG1tNCxtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xkcSBtbTcsbW01CQk7IG1tNz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisJcHVucGNraGRxIG1tNCxtbTUJCTsgbW00PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworCXB1c2hwaWMJZWJ4CQkJOyBzYXZlIEdPVCBhZGRyZXNzCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKKwltb3ZxCU1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVieCwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCU1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNworCW1vdnEJTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW00CisKKwlwb3BwaWMJZWJ4CQkJOyByZXN0b3JlIEdPVCBhZGRyZXNzCisKKwlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGCTsgd3NwdHIKKwlhZGQJZWRpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisJZGVjCWVjeAkJCQk7IGN0cgorCWpuegluZWFyIC5yb3dsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCislZW5kaWYgOyBKSURDVF9JTlRfTU1YX1NVUFBPUlRFRAorJWVuZGlmIDsgRENUX0lTTE9XX1NVUFBPUlRFRApkaWZmIC0tZ2l0IGEvamltbXhyZWQuYXNtIGIvamltbXhyZWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MWZhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qaW1teHJlZC5hc20KQEAgLTAsMCArMSw3MTkgQEAKKzsKKzsgamltbXhyZWQuYXNtIC0gcmVkdWNlZC1zaXplIElEQ1QgKE1NWCkKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgaW52ZXJzZS1EQ1Qgcm91dGluZXMgdGhhdCBwcm9kdWNlIHJlZHVjZWQtc2l6ZQorOyBvdXRwdXQ6IGVpdGhlciA0eDQgb3IgMngyIHBpeGVscyBmcm9tIGFuIDh4OCBEQ1QgYmxvY2suCis7IFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RyZWQuYzsKKzsgc2VlIHRoZSBqaWRjdHJlZC5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IExhc3QgTW9kaWZpZWQgOiBGZWJydWFyeSA0LCAyMDA2Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCislaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAorJWlmZGVmIEpJRENUX0lOVF9NTVhfU1VQUE9SVEVECisKKzsgVGhpcyBtb2R1bGUgaXMgc3BlY2lhbGl6ZWQgdG8gdGhlIGNhc2UgRENUU0laRSA9IDguCis7CislaWYgRENUU0laRSAhPSA4CislZXJyb3IgIlNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiIKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgQ09OU1RfQklUUwkxMworJWRlZmluZSBQQVNTMV9CSVRTCTIKKworJWRlZmluZSBERVNDQUxFX1AxXzQJKENPTlNUX0JJVFMtUEFTUzFfQklUUysxKQorJWRlZmluZSBERVNDQUxFX1AyXzQJKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzEpCislZGVmaW5lIERFU0NBTEVfUDFfMgkoQ09OU1RfQklUUy1QQVNTMV9CSVRTKzIpCislZGVmaW5lIERFU0NBTEVfUDJfMgkoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMikKKworJWlmIENPTlNUX0JJVFMgPT0gMTMKK0ZfMF8yMTEJZXF1CSAxNzMwCQk7IEZJWCgwLjIxMTE2NDI0MykKK0ZfMF81MDkJZXF1CSA0MTc2CQk7IEZJWCgwLjUwOTc5NTU3OSkKK0ZfMF82MDEJZXF1CSA0OTI2CQk7IEZJWCgwLjYwMTM0NDg4NykKK0ZfMF83MjAJZXF1CSA1OTA2CQk7IEZJWCgwLjcyMDk1OTgyMikKK0ZfMF83NjUJZXF1CSA2MjcwCQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84NTAJZXF1CSA2OTY3CQk7IEZJWCgwLjg1MDQzMDA5NSkKK0ZfMF84OTkJZXF1CSA3MzczCQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8wNjEJZXF1CSA4Njk3CQk7IEZJWCgxLjA2MTU5NDMzNykKK0ZfMV8yNzIJZXF1CTEwNDI2CQk7IEZJWCgxLjI3Mjc1ODU4MCkKK0ZfMV80NTEJZXF1CTExODkzCQk7IEZJWCgxLjQ1MTc3NDk4MSkKK0ZfMV84NDcJZXF1CTE1MTM3CQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl8xNzIJZXF1CTE3Nzk5CQk7IEZJWCgyLjE3MjczNDgwMykKK0ZfMl81NjIJZXF1CTIwOTk1CQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM182MjQJZXF1CTI5NjkyCQk7IEZJWCgzLjYyNDUwOTc4NSkKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCitGXzBfMjExCWVxdQlERVNDQUxFKCAyMjY3MzU4NzksMzAtQ09OU1RfQklUUykJOyBGSVgoMC4yMTExNjQyNDMpCitGXzBfNTA5CWVxdQlERVNDQUxFKCA1NDczODg4MzQsMzAtQ09OU1RfQklUUykJOyBGSVgoMC41MDk3OTU1NzkpCitGXzBfNjAxCWVxdQlERVNDQUxFKCA2NDU2ODkxNTUsMzAtQ09OU1RfQklUUykJOyBGSVgoMC42MDEzNDQ4ODcpCitGXzBfNzIwCWVxdQlERVNDQUxFKCA3NzQxMjQ3MTQsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43MjA5NTk4MjIpCitGXzBfNzY1CWVxdQlERVNDQUxFKCA4MjE4MDY0MTMsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODUwCWVxdQlERVNDQUxFKCA5MTMxNDIzNjEsMzAtQ09OU1RfQklUUykJOyBGSVgoMC44NTA0MzAwOTUpCitGXzBfODk5CWVxdQlERVNDQUxFKCA5NjYzNDIxMTEsMzAtQ09OU1RfQklUUykJOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMDYxCWVxdQlERVNDQUxFKDExMzk4NzgyMzksMzAtQ09OU1RfQklUUykJOyBGSVgoMS4wNjE1OTQzMzcpCitGXzFfMjcyCWVxdQlERVNDQUxFKDEzNjY2MTQxMTksMzAtQ09OU1RfQklUUykJOyBGSVgoMS4yNzI3NTg1ODApCitGXzFfNDUxCWVxdQlERVNDQUxFKDE1NTg4MzE1MTYsMzAtQ09OU1RfQklUUykJOyBGSVgoMS40NTE3NzQ5ODEpCitGXzFfODQ3CWVxdQlERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykJOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfMTcyCWVxdQlERVNDQUxFKDIzMzI5NTYyMzAsMzAtQ09OU1RfQklUUykJOyBGSVgoMi4xNzI3MzQ4MDMpCitGXzJfNTYyCWVxdQlERVNDQUxFKDI3NTE5MDk1MDYsMzAtQ09OU1RfQklUUykJOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfNjI0CWVxdQlERVNDQUxFKDM4OTE3ODc3NDcsMzAtQ09OU1RfQklUUykJOyBGSVgoMy42MjQ1MDk3ODUpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKwlhbGlnbnoJMTYKKwlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9yZWRfbW14KQorCitFWFROKGpjb25zdF9pZGN0X3JlZF9tbXgpOgorCitQV19GMTg0X01GMDc2CXRpbWVzIDIgZHcgIEZfMV84NDcsLUZfMF83NjUKK1BXX0YyNTZfRjA4OQl0aW1lcyAyIGR3ICBGXzJfNTYyLCBGXzBfODk5CitQV19GMTA2X01GMjE3CXRpbWVzIDIgZHcgIEZfMV8wNjEsLUZfMl8xNzIKK1BXX01GMDYwX01GMDUwCXRpbWVzIDIgZHcgLUZfMF82MDEsLUZfMF81MDkKK1BXX0YxNDVfTUYwMjEJdGltZXMgMiBkdyAgRl8xXzQ1MSwtRl8wXzIxMQorUFdfRjM2Ml9NRjEyNwl0aW1lcyAyIGR3ICBGXzNfNjI0LC1GXzFfMjcyCitQV19GMDg1X01GMDcyCXRpbWVzIDIgZHcgIEZfMF84NTAsLUZfMF83MjAKK1BEX0RFU0NBTEVfUDFfNAl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AxXzQtMSkKK1BEX0RFU0NBTEVfUDJfNAl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AyXzQtMSkKK1BEX0RFU0NBTEVfUDFfMgl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AxXzItMSkKK1BEX0RFU0NBTEVfUDJfMgl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AyXzItMSkKK1BCX0NFTlRFUkpTQU1QCXRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKzsgcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDR4NCBvdXRwdXQgYmxvY2suCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2lkY3RfNHg0X21teCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCis7ICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxNgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyNAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMgorJWRlZmluZSB3b3Jrc3BhY2UJd2soMCktRENUU0laRTIqU0laRU9GX0pDT0VGCisJCQkJCTsgSkNPRUYgd29ya3NwYWNlW0RDVFNJWkUyXQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2lkY3RfNHg0X21teCkKKworRVhUTihqcGVnX2lkY3RfNHg0X21teCk6CisJcHVzaAllYnAKKwltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAorCXN1Ygllc3AsIGJ5dGUgNAorCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKQk7IGFsaWduIHRvIDY0IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3b3Jrc3BhY2VdCisJcHVzaHBpYwllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworOwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQorCW1vdgllZHgsIFBPSU5URVIgW2NvbXBwdHIoZWF4KV0KKwltb3YJZWR4LCBQT0lOVEVSIFtqY29tcGluZm9fZGN0X3RhYmxlKGVkeCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXQkJOyBpbnB0cgorCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBKQ09FRiAqIHdzcHRyCisJbW92CWVjeCwgRENUU0laRS80CQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUXzRYNF9NTVgKKwltb3YJZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMCxtbTEKKwlwYWNrc3N3YiBtbTAsbW0wCisJbW92ZAllYXgsbW0wCisJdGVzdAllYXgsZWF4CisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJcHNsbHcJbW0wLFBBU1MxX0JJVFMKKworCW1vdnEgICAgICBtbTIsbW0wCQk7IG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCXB1bnBja2x3ZCBtbTAsbW0wCQk7IG1tMD0oMDAgMDAgMDEgMDEpCisJcHVucGNraHdkIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMyAwMykKKworCW1vdnEgICAgICBtbTEsbW0wCisJcHVucGNrbGRxIG1tMCxtbTAJCTsgbW0wPSgwMCAwMCAwMCAwMCkKKwlwdW5wY2toZHEgbW0xLG1tMQkJOyBtbTE9KDAxIDAxIDAxIDAxKQorCW1vdnEgICAgICBtbTMsbW0yCisJcHVucGNrbGRxIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMiAwMikKKwlwdW5wY2toZHEgbW0zLG1tMwkJOyBtbTM9KDAzIDAzIDAzIDAzKQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisJam1wCW5lYXIgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMiwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwltb3ZxICAgICAgbW00LG1tMAorCW1vdnEgICAgICBtbTUsbW0wCisJcHVucGNrbHdkIG1tNCxtbTEKKwlwdW5wY2tod2QgbW01LG1tMQorCW1vdnEgICAgICBtbTAsbW00CisJbW92cSAgICAgIG1tMSxtbTUKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgbW00PSh0bXAyTCkKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgbW01PSh0bXAySCkKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMDZfTUYyMTcpXQk7IG1tMD0odG1wMEwpCisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0JOyBtbTE9KHRtcDBIKQorCisJbW92cSAgICAgIG1tNixtbTIKKwltb3ZxICAgICAgbW03LG1tMgorCXB1bnBja2x3ZCBtbTYsbW0zCisJcHVucGNraHdkIG1tNyxtbTMKKwltb3ZxICAgICAgbW0yLG1tNgorCW1vdnEgICAgICBtbTMsbW03CisJcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldCTsgbW02PSh0bXAyTCkKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0JOyBtbTc9KHRtcDJIKQorCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldCTsgbW0yPSh0bXAwTCkKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IG1tMz0odG1wMEgpCisKKwlwYWRkZAltbTYsbW00CQkJOyBtbTY9dG1wMkwKKwlwYWRkZAltbTcsbW01CQkJOyBtbTc9dG1wMkgKKwlwYWRkZAltbTIsbW0wCQkJOyBtbTI9dG1wMEwKKwlwYWRkZAltbTMsbW0xCQkJOyBtbTM9dG1wMEgKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tMgk7IHdrKDApPXRtcDBMCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0zCTsgd2soMSk9dG1wMEgKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tNCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJbW00LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJbW01LCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJbW0wLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCXB4b3IgICAgICBtbTEsbW0xCisJcHhvciAgICAgIG1tMixtbTIKKwlwdW5wY2tsd2QgbW0xLG1tNAkJOyBtbTE9dG1wMEwKKwlwdW5wY2tod2QgbW0yLG1tNAkJOyBtbTI9dG1wMEgKKwlwc3JhZCAgICAgbW0xLCgxNi1DT05TVF9CSVRTLTEpCTsgcHNyYWQgbW0xLDE2ICYgcHNsbGQgbW0xLENPTlNUX0JJVFMrMQorCXBzcmFkICAgICBtbTIsKDE2LUNPTlNUX0JJVFMtMSkJOyBwc3JhZCBtbTIsMTYgJiBwc2xsZCBtbTIsQ09OU1RfQklUUysxCisKKwltb3ZxICAgICAgbW0zLG1tNQkJOyBtbTU9aW4yPXoyCisJcHVucGNrbHdkIG1tNSxtbTAJCTsgbW0wPWluNj16MworCXB1bnBja2h3ZCBtbTMsbW0wCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyBtbTU9dG1wMkwKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXQk7IG1tMz10bXAySAorCisJbW92cQltbTQsbW0xCisJbW92cQltbTAsbW0yCisJcGFkZGQJbW0xLG1tNQkJCTsgbW0xPXRtcDEwTAorCXBhZGRkCW1tMixtbTMJCQk7IG1tMj10bXAxMEgKKwlwc3ViZAltbTQsbW01CQkJOyBtbTQ9dG1wMTJMCisJcHN1YmQJbW0wLG1tMwkJCTsgbW0wPXRtcDEySAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdnEJbW01LG1tMQorCW1vdnEJbW0zLG1tMgorCXBhZGRkCW1tMSxtbTYJCQk7IG1tMT1kYXRhMEwKKwlwYWRkZAltbTIsbW03CQkJOyBtbTI9ZGF0YTBICisJcHN1YmQJbW01LG1tNgkJCTsgbW01PWRhdGEzTAorCXBzdWJkCW1tMyxtbTcJCQk7IG1tMz1kYXRhM0gKKworCW1vdnEJbW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDFfNCldCTsgbW02PVtQRF9ERVNDQUxFX1AxXzRdCisKKwlwYWRkZAltbTEsbW02CisJcGFkZGQJbW0yLG1tNgorCXBzcmFkCW1tMSxERVNDQUxFX1AxXzQKKwlwc3JhZAltbTIsREVTQ0FMRV9QMV80CisJcGFkZGQJbW01LG1tNgorCXBhZGRkCW1tMyxtbTYKKwlwc3JhZAltbTUsREVTQ0FMRV9QMV80CisJcHNyYWQJbW0zLERFU0NBTEVfUDFfNAorCisJcGFja3NzZHcgIG1tMSxtbTIJCTsgbW0xPWRhdGEwPSgwMCAwMSAwMiAwMykKKwlwYWNrc3NkdyAgbW01LG1tMwkJOyBtbTU9ZGF0YTM9KDMwIDMxIDMyIDMzKQorCisJbW92cQltbTcsIE1NV09SRCBbd2soMCldCTsgbW03PXRtcDBMCisJbW92cQltbTYsIE1NV09SRCBbd2soMSldCTsgbW02PXRtcDBICisKKwltb3ZxCW1tMixtbTQKKwltb3ZxCW1tMyxtbTAKKwlwYWRkZAltbTQsbW03CQkJOyBtbTQ9ZGF0YTFMCisJcGFkZGQJbW0wLG1tNgkJCTsgbW0wPWRhdGExSAorCXBzdWJkCW1tMixtbTcJCQk7IG1tMj1kYXRhMkwKKwlwc3ViZAltbTMsbW02CQkJOyBtbTM9ZGF0YTJICisKKwltb3ZxCW1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxXzQpXQk7IG1tNz1bUERfREVTQ0FMRV9QMV80XQorCisJcGFkZGQJbW00LG1tNworCXBhZGRkCW1tMCxtbTcKKwlwc3JhZAltbTQsREVTQ0FMRV9QMV80CisJcHNyYWQJbW0wLERFU0NBTEVfUDFfNAorCXBhZGRkCW1tMixtbTcKKwlwYWRkZAltbTMsbW03CisJcHNyYWQJbW0yLERFU0NBTEVfUDFfNAorCXBzcmFkCW1tMyxERVNDQUxFX1AxXzQKKworCXBhY2tzc2R3ICBtbTQsbW0wCQk7IG1tND1kYXRhMT0oMTAgMTEgMTIgMTMpCisJcGFja3NzZHcgIG1tMixtbTMJCTsgbW0yPWRhdGEyPSgyMCAyMSAyMiAyMykKKworCW1vdnEgICAgICBtbTYsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0xLG1tNAkJOyBtbTE9KDAwIDEwIDAxIDExKQorCXB1bnBja2h3ZCBtbTYsbW00CQk7IG1tNj0oMDIgMTIgMDMgMTMpCisJbW92cSAgICAgIG1tNyxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTIsbW01CQk7IG1tMj0oMjAgMzAgMjEgMzEpCisJcHVucGNraHdkIG1tNyxtbTUJCTsgbW03PSgyMiAzMiAyMyAzMykKKworCW1vdnEgICAgICBtbTAsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0xLG1tMgkJOyBtbTE9KDAwIDEwIDIwIDMwKQorCXB1bnBja2hkcSBtbTAsbW0yCQk7IG1tMD0oMDEgMTEgMjEgMzEpCisJbW92cSAgICAgIG1tMyxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTYsbW03CQk7IG1tNj0oMDIgMTIgMjIgMzIpCisJcHVucGNraGRxIG1tMyxtbTcJCTsgbW0zPSgwMyAxMyAyMyAzMykKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMworCisubmV4dGNvbHVtbjoKKwlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGCQk7IGNvZWZfYmxvY2sKKwlhZGQJZWR4LCBieXRlIDQqU0laRU9GX0lTTE9XX01VTFRfVFlQRQk7IHF1YW50cHRyCisJYWRkCWVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0pDT0VGCTsgd3NwdHIKKwlkZWMJZWN4CQkJCQk7IGN0cgorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbGVhCWVzaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisKKwltb3ZxICAgICAgbW00LG1tMAorCW1vdnEgICAgICBtbTUsbW0wCisJcHVucGNrbHdkIG1tNCxtbTEKKwlwdW5wY2tod2QgbW01LG1tMQorCW1vdnEgICAgICBtbTAsbW00CisJbW92cSAgICAgIG1tMSxtbTUKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgbW00PSh0bXAyTCkKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgbW01PSh0bXAySCkKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMDZfTUYyMTcpXQk7IG1tMD0odG1wMEwpCisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0JOyBtbTE9KHRtcDBIKQorCisJbW92cSAgICAgIG1tNixtbTIKKwltb3ZxICAgICAgbW03LG1tMgorCXB1bnBja2x3ZCBtbTYsbW0zCisJcHVucGNraHdkIG1tNyxtbTMKKwltb3ZxICAgICAgbW0yLG1tNgorCW1vdnEgICAgICBtbTMsbW03CisJcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldCTsgbW02PSh0bXAyTCkKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0JOyBtbTc9KHRtcDJIKQorCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldCTsgbW0yPSh0bXAwTCkKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IG1tMz0odG1wMEgpCisKKwlwYWRkZAltbTYsbW00CQkJOyBtbTY9dG1wMkwKKwlwYWRkZAltbTcsbW01CQkJOyBtbTc9dG1wMkgKKwlwYWRkZAltbTIsbW0wCQkJOyBtbTI9dG1wMEwKKwlwYWRkZAltbTMsbW0xCQkJOyBtbTM9dG1wMEgKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tMgk7IHdrKDApPXRtcDBMCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0zCTsgd2soMSk9dG1wMEgKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tNCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCXB4b3IgICAgICBtbTEsbW0xCisJcHhvciAgICAgIG1tMixtbTIKKwlwdW5wY2tsd2QgbW0xLG1tNAkJOyBtbTE9dG1wMEwKKwlwdW5wY2tod2QgbW0yLG1tNAkJOyBtbTI9dG1wMEgKKwlwc3JhZCAgICAgbW0xLCgxNi1DT05TVF9CSVRTLTEpCTsgcHNyYWQgbW0xLDE2ICYgcHNsbGQgbW0xLENPTlNUX0JJVFMrMQorCXBzcmFkICAgICBtbTIsKDE2LUNPTlNUX0JJVFMtMSkJOyBwc3JhZCBtbTIsMTYgJiBwc2xsZCBtbTIsQ09OU1RfQklUUysxCisKKwltb3ZxICAgICAgbW0zLG1tNQkJOyBtbTU9aW4yPXoyCisJcHVucGNrbHdkIG1tNSxtbTAJCTsgbW0wPWluNj16MworCXB1bnBja2h3ZCBtbTMsbW0wCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyBtbTU9dG1wMkwKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXQk7IG1tMz10bXAySAorCisJbW92cQltbTQsbW0xCisJbW92cQltbTAsbW0yCisJcGFkZGQJbW0xLG1tNQkJCTsgbW0xPXRtcDEwTAorCXBhZGRkCW1tMixtbTMJCQk7IG1tMj10bXAxMEgKKwlwc3ViZAltbTQsbW01CQkJOyBtbTQ9dG1wMTJMCisJcHN1YmQJbW0wLG1tMwkJCTsgbW0wPXRtcDEySAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdnEJbW01LG1tMQorCW1vdnEJbW0zLG1tMgorCXBhZGRkCW1tMSxtbTYJCQk7IG1tMT1kYXRhMEwKKwlwYWRkZAltbTIsbW03CQkJOyBtbTI9ZGF0YTBICisJcHN1YmQJbW01LG1tNgkJCTsgbW01PWRhdGEzTAorCXBzdWJkCW1tMyxtbTcJCQk7IG1tMz1kYXRhM0gKKworCW1vdnEJbW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDJfNCldCTsgbW02PVtQRF9ERVNDQUxFX1AyXzRdCisKKwlwYWRkZAltbTEsbW02CisJcGFkZGQJbW0yLG1tNgorCXBzcmFkCW1tMSxERVNDQUxFX1AyXzQKKwlwc3JhZAltbTIsREVTQ0FMRV9QMl80CisJcGFkZGQJbW01LG1tNgorCXBhZGRkCW1tMyxtbTYKKwlwc3JhZAltbTUsREVTQ0FMRV9QMl80CisJcHNyYWQJbW0zLERFU0NBTEVfUDJfNAorCisJcGFja3NzZHcgIG1tMSxtbTIJCTsgbW0xPWRhdGEwPSgwMCAxMCAyMCAzMCkKKwlwYWNrc3NkdyAgbW01LG1tMwkJOyBtbTU9ZGF0YTM9KDAzIDEzIDIzIDMzKQorCisJbW92cQltbTcsIE1NV09SRCBbd2soMCldCTsgbW03PXRtcDBMCisJbW92cQltbTYsIE1NV09SRCBbd2soMSldCTsgbW02PXRtcDBICisKKwltb3ZxCW1tMixtbTQKKwltb3ZxCW1tMyxtbTAKKwlwYWRkZAltbTQsbW03CQkJOyBtbTQ9ZGF0YTFMCisJcGFkZGQJbW0wLG1tNgkJCTsgbW0wPWRhdGExSAorCXBzdWJkCW1tMixtbTcJCQk7IG1tMj1kYXRhMkwKKwlwc3ViZAltbTMsbW02CQkJOyBtbTM9ZGF0YTJICisKKwltb3ZxCW1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyXzQpXQk7IG1tNz1bUERfREVTQ0FMRV9QMl80XQorCisJcGFkZGQJbW00LG1tNworCXBhZGRkCW1tMCxtbTcKKwlwc3JhZAltbTQsREVTQ0FMRV9QMl80CisJcHNyYWQJbW0wLERFU0NBTEVfUDJfNAorCXBhZGRkCW1tMixtbTcKKwlwYWRkZAltbTMsbW03CisJcHNyYWQJbW0yLERFU0NBTEVfUDJfNAorCXBzcmFkCW1tMyxERVNDQUxFX1AyXzQKKworCXBhY2tzc2R3ICBtbTQsbW0wCQk7IG1tND1kYXRhMT0oMDEgMTEgMjEgMzEpCisJcGFja3NzZHcgIG1tMixtbTMJCTsgbW0yPWRhdGEyPSgwMiAxMiAyMiAzMikKKworCW1vdnEgICAgICBtbTYsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQk7IG1tNj1bUEJfQ0VOVEVSSlNBTVBdCisKKwlwYWNrc3N3YiAgbW0xLG1tMgkJOyBtbTE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyKQorCXBhY2tzc3diICBtbTQsbW01CQk7IG1tND0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMpCisJcGFkZGIgICAgIG1tMSxtbTYKKwlwYWRkYiAgICAgbW00LG1tNgorCisJbW92cSAgICAgIG1tNyxtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2xidyBtbTEsbW00CQk7IG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisJcHVucGNraGJ3IG1tNyxtbTQJCTsgbW03PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKworCW1vdnEgICAgICBtbTAsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgbW0xLG1tNwkJOyBtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorCXB1bnBja2h3ZCBtbTAsbW03CQk7IG1tMD0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisJbW92ZAlEV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMQorCW1vdmQJRFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKKworCXBzcmxxCW1tMSw0KkJZVEVfQklUCisJcHNybHEJbW0wLDQqQllURV9CSVQKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZkCURXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0xCisJbW92ZAlEV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wcGljCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCis7IHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSAyeDIgb3V0cHV0IGJsb2NrLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19pZGN0XzJ4Ml9tbXggKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorOyAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGNpbmZvKGIpCShiKSs4CQk7IGpfZGVjb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTYJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjQJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaWRjdF8yeDJfbW14KQorCitFWFROKGpwZWdfaWRjdF8yeDJfbW14KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtjb21wcHRyKGVicCldCisJbW92CWVkeCwgUE9JTlRFUiBbamNvbXBpbmZvX2RjdF90YWJsZShlZHgpXQk7IHF1YW50cHRyCisJbW92CWVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWJwKV0JCTsgaW5wdHIKKworCTsgfCBpbnB1dDogICAgICAgICAgICAgICAgICB8IHJlc3VsdDogICAgICAgIHwKKwk7IHwgMDAgMDEgKiogMDMgKiogMDUgKiogMDcgfCAgICAgICAgICAgICAgICB8CisJOyB8IDEwIDExICoqIDEzICoqIDE1ICoqIDE3IHwgICAgICAgICAgICAgICAgfAorCTsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8ICAgICAgICAgICAgICAgIHwKKwk7IHwgMzAgMzEgKiogMzMgKiogMzUgKiogMzcgfCBBMCBBMSBBMyBBNSBBNyB8CisJOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgQjAgQjEgQjMgQjUgQjcgfAorCTsgfCA1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NyB8ICAgICAgICAgICAgICAgIHwKKwk7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCAgICAgICAgICAgICAgICB8CisJOyB8IDcwIDcxICoqIDczICoqIDc1ICoqIDc3IHwgICAgICAgICAgICAgICAgfAorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMiwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwk7IG1tMD0oMTAgMTEgKiogMTMpLCBtbTE9KDMwIDMxICoqIDMzKQorCTsgbW0yPSg1MCA1MSAqKiA1MyksIG1tMz0oNzAgNzEgKiogNzMpCisKKwlwY21wZXFkICAgbW03LG1tNworCXBzbGxkICAgICBtbTcsV09SRF9CSVQJCTsgbW03PXsweDAwMDAgMHhGRkZGIDB4MDAwMCAweEZGRkZ9CisKKwltb3ZxICAgICAgbW00LG1tMAkJOyBtbTQ9KDEwIDExICoqIDEzKQorCW1vdnEgICAgICBtbTUsbW0yCQk7IG1tNT0oNTAgNTEgKiogNTMpCisJcHVucGNrbHdkIG1tNCxtbTEJCTsgbW00PSgxMCAzMCAxMSAzMSkKKwlwdW5wY2tsd2QgbW01LG1tMwkJOyBtbTU9KDUwIDcwIDUxIDcxKQorCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMDg1X01GMDcyKV0KKworCXBzcmxkCW1tMCxXT1JEX0JJVAkJOyBtbTA9KDExIC0tIDEzIC0tKQorCXBhbmQJbW0xLG1tNwkJCTsgbW0xPSgtLSAzMSAtLSAzMykKKwlwc3JsZAltbTIsV09SRF9CSVQJCTsgbW0yPSg1MSAtLSA1MyAtLSkKKwlwYW5kCW1tMyxtbTcJCQk7IG1tMz0oLS0gNzEgLS0gNzMpCisJcG9yCW1tMCxtbTEJCQk7IG1tMD0oMTEgMzEgMTMgMzMpCisJcG9yCW1tMixtbTMJCQk7IG1tMj0oNTEgNzEgNTMgNzMpCisJcG1hZGR3ZAltbTAsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCisJcG1hZGR3ZAltbTIsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKwlwYWRkZAltbTQsbW01CQkJOyBtbTQ9dG1wMFtjb2wwIGNvbDFdCisKKwltb3ZxCW1tNiwgTU1XT1JEIFtNTUJMT0NLKDEsMSxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMSxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJbW02LCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDUsMSxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDcsMSxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJbW0zLCBNTVdPUkQgW01NQkxPQ0soNSwxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJbW01LCBNTVdPUkQgW01NQkxPQ0soNywxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCTsgbW02PSgqKiAxNSAqKiAxNyksIG1tMT0oKiogMzUgKiogMzcpCisJOyBtbTM9KCoqIDU1ICoqIDU3KSwgbW01PSgqKiA3NSAqKiA3NykKKworCXBzcmxkCW1tNixXT1JEX0JJVAkJOyBtbTY9KDE1IC0tIDE3IC0tKQorCXBhbmQJbW0xLG1tNwkJCTsgbW0xPSgtLSAzNSAtLSAzNykKKwlwc3JsZAltbTMsV09SRF9CSVQJCTsgbW0zPSg1NSAtLSA1NyAtLSkKKwlwYW5kCW1tNSxtbTcJCQk7IG1tNT0oLS0gNzUgLS0gNzcpCisJcG9yCW1tNixtbTEJCQk7IG1tNj0oMTUgMzUgMTcgMzcpCisJcG9yCW1tMyxtbTUJCQk7IG1tMz0oNTUgNzUgNTcgNzcpCisJcG1hZGR3ZAltbTYsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCisJcG1hZGR3ZAltbTMsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKwlwYWRkZAltbTAsbW0yCQkJOyBtbTA9dG1wMFtjb2wxIGNvbDNdCisJcGFkZGQJbW02LG1tMwkJCTsgbW02PXRtcDBbY29sNSBjb2w3XQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW01LCBNTVdPUkQgW01NQkxPQ0soMCwxLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTEsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwltbTUsIE1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJOyBtbTE9KDAwIDAxICoqIDAzKSwgbW01PSgqKiAwNSAqKiAwNykKKworCW1vdnEJbW0yLG1tMQkJCQk7IG1tMj0oMDAgMDEgKiogMDMpCisJcHNsbGQJbW0xLFdPUkRfQklUCQkJOyBtbTE9KC0tIDAwIC0tICoqKQorCXBzcmFkCW1tMSwoV09SRF9CSVQtQ09OU1RfQklUUy0yKQk7IG1tMT10bXAxMFtjb2wwICoqKipdCisKKwlwYW5kCW1tMixtbTcJCQkJOyBtbTI9KC0tIDAxIC0tIDAzKQorCXBhbmQJbW01LG1tNwkJCQk7IG1tNT0oLS0gMDUgLS0gMDcpCisJcHNyYWQJbW0yLChXT1JEX0JJVC1DT05TVF9CSVRTLTIpCTsgbW0yPXRtcDEwW2NvbDEgY29sM10KKwlwc3JhZAltbTUsKFdPUkRfQklULUNPTlNUX0JJVFMtMikJOyBtbTU9dG1wMTBbY29sNSBjb2w3XQorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdnEgICAgICBtbTMsbW0xCisJcGFkZGQgICAgIG1tMSxtbTQJCTsgbW0xPWRhdGEwW2NvbDAgKioqKl09KEEwICoqKQorCXBzdWJkICAgICBtbTMsbW00CQk7IG1tMz1kYXRhMVtjb2wwICoqKipdPShCMCAqKikKKwlwdW5wY2tsZHEgbW0xLG1tMwkJOyBtbTE9KEEwIEIwKQorCisJbW92cQltbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV8yKV0JOyBtbTc9W1BEX0RFU0NBTEVfUDFfMl0KKworCW1vdnEJbW00LG1tMgorCW1vdnEJbW0zLG1tNQorCXBhZGRkCW1tMixtbTAJCQk7IG1tMj1kYXRhMFtjb2wxIGNvbDNdPShBMSBBMykKKwlwYWRkZAltbTUsbW02CQkJOyBtbTU9ZGF0YTBbY29sNSBjb2w3XT0oQTUgQTcpCisJcHN1YmQJbW00LG1tMAkJCTsgbW00PWRhdGExW2NvbDEgY29sM109KEIxIEIzKQorCXBzdWJkCW1tMyxtbTYJCQk7IG1tMz1kYXRhMVtjb2w1IGNvbDddPShCNSBCNykKKworCXBhZGRkCW1tMSxtbTcKKwlwc3JhZAltbTEsREVTQ0FMRV9QMV8yCisKKwlwYWRkZAltbTIsbW03CisJcGFkZGQJbW01LG1tNworCXBzcmFkCW1tMixERVNDQUxFX1AxXzIKKwlwc3JhZAltbTUsREVTQ0FMRV9QMV8yCisJcGFkZGQJbW00LG1tNworCXBhZGRkCW1tMyxtbTcKKwlwc3JhZAltbTQsREVTQ0FMRV9QMV8yCisJcHNyYWQJbW0zLERFU0NBTEVfUDFfMgorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzLCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWJwKV0JOyAoSlNBTVBST1cgKikKKwltb3YJZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVicCldCisKKwk7IHwgaW5wdXQ6fCByZXN1bHQ6fAorCTsgfCBBMCBCMCB8ICAgICAgICB8CisJOyB8IEExIEIxIHwgQzAgQzEgIHwKKwk7IHwgQTMgQjMgfCBEMCBEMSAgfAorCTsgfCBBNSBCNSB8ICAgICAgICB8CisJOyB8IEE3IEI3IHwgICAgICAgIHwKKworCTsgLS0gT2RkIHBhcnQKKworCXBhY2tzc2R3ICBtbTIsbW00CQk7IG1tMj0oQTEgQTMgQjEgQjMpCisJcGFja3NzZHcgIG1tNSxtbTMJCTsgbW01PShBNSBBNyBCNSBCNykKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKwlwYWRkZCAgICAgbW0yLG1tNQkJOyBtbTI9dG1wMFtyb3cwIHJvdzFdCisKKwk7IC0tIEV2ZW4gcGFydAorCisJcHNsbGQgICAgIG1tMSwoQ09OU1RfQklUUysyKQk7IG1tMT10bXAxMFtyb3cwIHJvdzFdCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJbW92cSAgICAgIG1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyXzIpXQk7IG1tMD1bUERfREVTQ0FMRV9QMl8yXQorCisJbW92cSAgICAgIG1tNixtbTEKKwlwYWRkZCAgICAgbW0xLG1tMgkJOyBtbTE9ZGF0YTBbcm93MCByb3cxXT0oQzAgQzEpCisJcHN1YmQgICAgIG1tNixtbTIJCTsgbW02PWRhdGExW3JvdzAgcm93MV09KEQwIEQxKQorCisJcGFkZGQgICAgIG1tMSxtbTAKKwlwYWRkZCAgICAgbW02LG1tMAorCXBzcmFkICAgICBtbTEsREVTQ0FMRV9QMl8yCisJcHNyYWQgICAgIG1tNixERVNDQUxFX1AyXzIKKworCW1vdnEgICAgICBtbTcsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKwlwdW5wY2tsZHEgbW0xLG1tNgkJOyBtbTE9KEMwIEQwKQorCXB1bnBja2hkcSBtbTcsbW02CQk7IG1tNz0oQzEgRDEpCisKKwlwYWNrc3NkdyAgbW0xLG1tNwkJOyBtbTE9KEMwIEQwIEMxIEQxKQorCXBhY2tzc3diICBtbTEsbW0xCQk7IG1tMT0oQzAgRDAgQzEgRDEgQzAgRDAgQzEgRDEpCisJcGFkZGIgICAgIG1tMSxbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCisKKwltb3ZkCWVjeCxtbTEKKwltb3ZkCWVieCxtbTEJCQk7IGVieD0oQzAgRDAgQzEgRDEpCisJc2hyCWVjeCwyKkJZVEVfQklUCQk7IGVjeD0oQzEgRDEgLS0gLS0pCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBieAorCW1vdglXT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgY3gKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IEpJRENUX0lOVF9NTVhfU1VQUE9SVEVECislZW5kaWYgOyBJRENUX1NDQUxJTkdfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qaXNzMmZsdC5hc20gYi9qaXNzMmZsdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1NjVhMwotLS0gL2Rldi9udWxsCisrKyBiL2ppc3MyZmx0LmFzbQpAQCAtMCwwICsxLDUwOCBAQAorOworOyBqaXNzMmZsdC5hc20gLSBmbG9hdGluZy1wb2ludCBJRENUIChTU0UgJiBTU0UyKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZsb2F0aW5nLXBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnZlcnNlIERDVAorOyAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbgorOyB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RmbHQuYzsgc2VlIHRoZSBqaWRjdGZsdC5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IExhc3QgTW9kaWZpZWQgOiBGZWJydWFyeSA0LCAyMDA2Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCislaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorJWlmZGVmIEpJRENUX0ZMVF9TU0VfU1NFMl9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJW1hY3JvCXVucGNrbHBzMiAyCTsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgwIDEgNCA1KQorCXNodWZwcwklMSwlMiwweDQ0CislZW5kbWFjcm8KKworJW1hY3JvCXVucGNraHBzMiAyCTsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgyIDMgNiA3KQorCXNodWZwcwklMSwlMiwweEVFCislZW5kbWFjcm8KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKwlhbGlnbnoJMTYKKwlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9mbG9hdF9zc2UyKQorCitFWFROKGpjb25zdF9pZGN0X2Zsb2F0X3NzZTIpOgorCitQRF8xXzQxNAl0aW1lcyA0IGRkICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4OQorUERfMV84NDcJdGltZXMgNCBkZCAgMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYKK1BEXzFfMDgyCXRpbWVzIDQgZGQgIDEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2CitQRF9NMl82MTMJdGltZXMgNCBkZCAtMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKK1BEX1JORElOVF9NQUdJQwl0aW1lcyA0IGRkICAxMDA2NjMyOTYuMAk7IChmbG9hdCkoMHgwMEMwMDAwMCA8PCAzKQorUEJfQ0VOVEVSSlNBTVAJdGltZXMgMTYgZGIgQ0VOVEVSSlNBTVBMRQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19pZGN0X2Zsb2F0X3NzZTIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorOyAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGNpbmZvKGIpCShiKSs4CQk7IGpfZGVjb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTYJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjQJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMgorJWRlZmluZSB3b3Jrc3BhY2UJd2soMCktRENUU0laRTIqU0laRU9GX0ZBU1RfRkxPQVQKKwkJCQkJOyBGQVNUX0ZMT0FUIHdvcmtzcGFjZVtEQ1RTSVpFMl0KKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19pZGN0X2Zsb2F0X3NzZTIpCisKK0VYVE4oanBlZ19pZGN0X2Zsb2F0X3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3b3Jrc3BhY2VdCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworOwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQorCW1vdgllZHgsIFBPSU5URVIgW2NvbXBwdHIoZWF4KV0KKwltb3YJZWR4LCBQT0lOVEVSIFtqY29tcGluZm9fZGN0X3RhYmxlKGVkeCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXQkJOyBpbnB0cgorCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBGQVNUX0ZMT0FUICogd3NwdHIKKwltb3YJZWN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfRkxPQVRfU1NFCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpuegluZWFyIC5jb2x1bW5EQ1QKKworCW1vdnEJeG1tMSwgX01NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQl4bW0yLCBfTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCXhtbTMsIF9NTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJeG1tNCwgX01NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQl4bW01LCBfTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCXhtbTYsIF9NTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJeG1tNywgX01NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTEseG1tMgorCXBvcgl4bW0zLHhtbTQKKwlwb3IJeG1tNSx4bW02CisJcG9yCXhtbTEseG1tMworCXBvcgl4bW01LHhtbTcKKwlwb3IJeG1tMSx4bW01CisJcGFja3Nzd2IgeG1tMSx4bW0xCisJbW92ZAllYXgseG1tMQorCXRlc3QJZWF4LGVheAorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKwltb3ZxICAgICAgeG1tMCwgX01NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisKKwlwdW5wY2tsd2QgeG1tMCx4bW0wCQk7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorCXBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCWN2dGRxMnBzICB4bW0wLHhtbTAJCQk7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKKworCW11bHBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwltb3ZhcHMJeG1tMSx4bW0wCisJbW92YXBzCXhtbTIseG1tMAorCW1vdmFwcwl4bW0zLHhtbTAKKworCXNodWZwcwl4bW0wLHhtbTAsMHgwMAkJCTsgeG1tMD0oMDAgMDAgMDAgMDApCisJc2h1ZnBzCXhtbTEseG1tMSwweDU1CQkJOyB4bW0xPSgwMSAwMSAwMSAwMSkKKwlzaHVmcHMJeG1tMix4bW0yLDB4QUEJCQk7IHhtbTI9KDAyIDAyIDAyIDAyKQorCXNodWZwcwl4bW0zLHhtbTMsMHhGRgkJCTsgeG1tMz0oMDMgMDMgMDMgMDMpCisKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworCWptcAluZWFyIC5uZXh0Y29sdW1uCisJYWxpZ254CTE2LDcKKyVlbmRpZgorLmNvbHVtbkRDVDoKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxICAgICAgeG1tMCwgX01NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cSAgICAgIHhtbTEsIF9NTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEgICAgICB4bW0yLCBfTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxICAgICAgeG1tMywgX01NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisKKwlwdW5wY2tsd2QgeG1tMCx4bW0wCQk7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorCXB1bnBja2x3ZCB4bW0xLHhtbTEJCTsgeG1tMT0oMjAgMjAgMjEgMjEgMjIgMjIgMjMgMjMpCisJcHNyYWQgICAgIHhtbTAsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisJcHNyYWQgICAgIHhtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0xPWluMj0oMjAgMjEgMjIgMjMpCisJY3Z0ZHEycHMgIHhtbTAseG1tMAkJCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCWN2dGRxMnBzICB4bW0xLHhtbTEJCQk7IHhtbTE9aW4yPSgyMCAyMSAyMiAyMykKKworCXB1bnBja2x3ZCB4bW0yLHhtbTIJCTsgeG1tMj0oNDAgNDAgNDEgNDEgNDIgNDIgNDMgNDMpCisJcHVucGNrbHdkIHhtbTMseG1tMwkJOyB4bW0zPSg2MCA2MCA2MSA2MSA2MiA2MiA2MyA2MykKKwlwc3JhZCAgICAgeG1tMiwoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTI9aW40PSg0MCA0MSA0MiA0MykKKwlwc3JhZCAgICAgeG1tMywoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTM9aW42PSg2MCA2MSA2MiA2MykKKwljdnRkcTJwcyAgeG1tMix4bW0yCQkJOyB4bW0yPWluND0oNDAgNDEgNDIgNDMpCisJY3Z0ZHEycHMgIHhtbTMseG1tMwkJCTsgeG1tMz1pbjY9KDYwIDYxIDYyIDYzKQorCisJbXVscHMgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwltb3ZhcHMJeG1tNCx4bW0wCisJbW92YXBzCXhtbTUseG1tMQorCXN1YnBzCXhtbTAseG1tMgkJOyB4bW0wPXRtcDExCisJc3VicHMJeG1tMSx4bW0zCisJYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT10bXAxMworCisJbXVscHMJeG1tMSxbR09UT0ZGKGVieCxQRF8xXzQxNCldCisJc3VicHMJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKworCW1vdmFwcwl4bW02LHhtbTQKKwltb3ZhcHMJeG1tNyx4bW0wCisJc3VicHMJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMworCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPXRtcDIKKwlhZGRwcwl4bW02LHhtbTUJCTsgeG1tNj10bXAwCisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9dG1wMQorCisJbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHRtcDMKKwltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW0wCTsgdG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92cSAgICAgIHhtbTIsIF9NTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEgICAgICB4bW0zLCBfTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxICAgICAgeG1tNSwgX01NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cSAgICAgIHhtbTEsIF9NTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisJcHVucGNrbHdkIHhtbTIseG1tMgkJOyB4bW0yPSgxMCAxMCAxMSAxMSAxMiAxMiAxMyAxMykKKwlwdW5wY2tsd2QgeG1tMyx4bW0zCQk7IHhtbTM9KDMwIDMwIDMxIDMxIDMyIDMyIDMzIDMzKQorCXBzcmFkICAgICB4bW0yLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMj1pbjE9KDEwIDExIDEyIDEzKQorCXBzcmFkICAgICB4bW0zLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMz1pbjM9KDMwIDMxIDMyIDMzKQorCWN2dGRxMnBzICB4bW0yLHhtbTIJCQk7IHhtbTI9aW4xPSgxMCAxMSAxMiAxMykKKwljdnRkcTJwcyAgeG1tMyx4bW0zCQkJOyB4bW0zPWluMz0oMzAgMzEgMzIgMzMpCisKKwlwdW5wY2tsd2QgeG1tNSx4bW01CQk7IHhtbTU9KDUwIDUwIDUxIDUxIDUyIDUyIDUzIDUzKQorCXB1bnBja2x3ZCB4bW0xLHhtbTEJCTsgeG1tMT0oNzAgNzAgNzEgNzEgNzIgNzIgNzMgNzMpCisJcHNyYWQgICAgIHhtbTUsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW01PWluNT0oNTAgNTEgNTIgNTMpCisJcHNyYWQgICAgIHhtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0xPWluNz0oNzAgNzEgNzIgNzMpCisJY3Z0ZHEycHMgIHhtbTUseG1tNQkJCTsgeG1tNT1pbjU9KDUwIDUxIDUyIDUzKQorCWN2dGRxMnBzICB4bW0xLHhtbTEJCQk7IHhtbTE9aW43PSg3MCA3MSA3MiA3MykKKworCW11bHBzICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCW11bHBzICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCW11bHBzICAgICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCW11bHBzICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisJbW92YXBzCXhtbTQseG1tMgorCW1vdmFwcwl4bW0wLHhtbTUKKwlhZGRwcwl4bW0yLHhtbTEJCTsgeG1tMj16MTEKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT16MTMKKwlzdWJwcwl4bW00LHhtbTEJCTsgeG1tND16MTIKKwlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD16MTAKKworCW1vdmFwcwl4bW0xLHhtbTIKKwlzdWJwcwl4bW0yLHhtbTUKKwlhZGRwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXA3CisKKwltdWxwcwl4bW0yLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0JOyB4bW0yPXRtcDExCisKKwltb3ZhcHMJeG1tMyx4bW0wCisJYWRkcHMJeG1tMCx4bW00CisJbXVscHMJeG1tMCxbR09UT0ZGKGVieCxQRF8xXzg0NyldCTsgeG1tMD16NQorCW11bHBzCXhtbTMsW0dPVE9GRihlYngsUERfTTJfNjEzKV0JOyB4bW0zPSh6MTAgKiAtMi42MTMxMjU5MzApCisJbXVscHMJeG1tNCxbR09UT0ZGKGVieCxQRF8xXzA4MildCTsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisJYWRkcHMJeG1tMyx4bW0wCQk7IHhtbTM9dG1wMTIKKwlzdWJwcwl4bW00LHhtbTAJCTsgeG1tND10bXAxMAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXN1YnBzCXhtbTMseG1tMQkJOyB4bW0zPXRtcDYKKwltb3ZhcHMJeG1tNSx4bW02CisJbW92YXBzCXhtbTAseG1tNworCWFkZHBzCXhtbTYseG1tMQkJOyB4bW02PWRhdGEwPSgwMCAwMSAwMiAwMykKKwlhZGRwcwl4bW03LHhtbTMJCTsgeG1tNz1kYXRhMT0oMTAgMTEgMTIgMTMpCisJc3VicHMJeG1tNSx4bW0xCQk7IHhtbTU9ZGF0YTc9KDcwIDcxIDcyIDczKQorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPWRhdGE2PSg2MCA2MSA2MiA2MykKKwlzdWJwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXA1CisKKwltb3ZhcHMgICAgeG1tMSx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyAgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDAxIDExKQorCXVucGNraHBzICB4bW0xLHhtbTcJCTsgeG1tMT0oMDIgMTIgMDMgMTMpCisJbW92YXBzICAgIHhtbTMseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgIHhtbTAseG1tNQkJOyB4bW0wPSg2MCA3MCA2MSA3MSkKKwl1bnBja2hwcyAgeG1tMyx4bW01CQk7IHhtbTM9KDYyIDcyIDYzIDczKQorCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9dG1wMgorCW1vdmFwcwl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PXRtcDMKKworCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB3aygwKT0oNjAgNzAgNjEgNzEpCisJbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tMwk7IHdrKDEpPSg2MiA3MiA2MyA3MykKKworCWFkZHBzCXhtbTQseG1tMgkJOyB4bW00PXRtcDQKKwltb3ZhcHMJeG1tMCx4bW03CisJbW92YXBzCXhtbTMseG1tNQorCWFkZHBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGEyPSgyMCAyMSAyMiAyMykKKwlhZGRwcwl4bW01LHhtbTQJCTsgeG1tNT1kYXRhND0oNDAgNDEgNDIgNDMpCisJc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTU9KDUwIDUxIDUyIDUzKQorCXN1YnBzCXhtbTMseG1tNAkJOyB4bW0zPWRhdGEzPSgzMCAzMSAzMiAzMykKKworCW1vdmFwcyAgICB4bW0yLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzICB4bW03LHhtbTMJCTsgeG1tNz0oMjAgMzAgMjEgMzEpCisJdW5wY2tocHMgIHhtbTIseG1tMwkJOyB4bW0yPSgyMiAzMiAyMyAzMykKKwltb3ZhcHMgICAgeG1tNCx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyAgeG1tNSx4bW0wCQk7IHhtbTU9KDQwIDUwIDQxIDUxKQorCXVucGNraHBzICB4bW00LHhtbTAJCTsgeG1tND0oNDIgNTIgNDMgNTMpCisKKwltb3ZhcHMgICAgeG1tMyx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDIwIDMwKQorCXVucGNraHBzMiB4bW0zLHhtbTcJCTsgeG1tMz0oMDEgMTEgMjEgMzEpCisJbW92YXBzICAgIHhtbTAseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTEseG1tMgkJOyB4bW0xPSgwMiAxMiAyMiAzMikKKwl1bnBja2hwczIgeG1tMCx4bW0yCQk7IHhtbTA9KDAzIDEzIDIzIDMzKQorCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9KDYwIDcwIDYxIDcxKQorCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0yPSg2MiA3MiA2MyA3MykKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKworCW1vdmFwcyAgICB4bW02LHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW01LHhtbTcJCTsgeG1tNT0oNDAgNTAgNjAgNzApCisJdW5wY2tocHMyIHhtbTYseG1tNwkJOyB4bW02PSg0MSA1MSA2MSA3MSkKKwltb3ZhcHMgICAgeG1tMyx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tNCx4bW0yCQk7IHhtbTQ9KDQyIDUyIDYyIDcyKQorCXVucGNraHBzMiB4bW0zLHhtbTIJCTsgeG1tMz0oNDMgNTMgNjMgNzMpCisKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisKKy5uZXh0Y29sdW1uOgorCWFkZAllc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYJCTsgY29lZl9ibG9jaworCWFkZAllZHgsIGJ5dGUgNCpTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFCTsgcXVhbnRwdHIKKwlhZGQJZWRpLCAgICAgIDQqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAk7IHdzcHRyCisJZGVjCWVjeAkJCQkJOyBjdHIKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQorCXByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQorCWxlYQllc2ksIFt3b3Jrc3BhY2VdCQkJOyBGQVNUX0ZMT0FUICogd3NwdHIKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZhcHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwltb3ZhcHMJeG1tNCx4bW0wCisJbW92YXBzCXhtbTUseG1tMQorCXN1YnBzCXhtbTAseG1tMgkJOyB4bW0wPXRtcDExCisJc3VicHMJeG1tMSx4bW0zCisJYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT10bXAxMworCisJbXVscHMJeG1tMSxbR09UT0ZGKGVieCxQRF8xXzQxNCldCisJc3VicHMJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKworCW1vdmFwcwl4bW02LHhtbTQKKwltb3ZhcHMJeG1tNyx4bW0wCisJc3VicHMJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMworCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPXRtcDIKKwlhZGRwcwl4bW02LHhtbTUJCTsgeG1tNj10bXAwCisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9dG1wMQorCisJbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHRtcDMKKwltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW0wCTsgdG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJbW92YXBzCXhtbTQseG1tMgorCW1vdmFwcwl4bW0wLHhtbTUKKwlhZGRwcwl4bW0yLHhtbTEJCTsgeG1tMj16MTEKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT16MTMKKwlzdWJwcwl4bW00LHhtbTEJCTsgeG1tND16MTIKKwlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD16MTAKKworCW1vdmFwcwl4bW0xLHhtbTIKKwlzdWJwcwl4bW0yLHhtbTUKKwlhZGRwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXA3CisKKwltdWxwcwl4bW0yLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0JOyB4bW0yPXRtcDExCisKKwltb3ZhcHMJeG1tMyx4bW0wCisJYWRkcHMJeG1tMCx4bW00CisJbXVscHMJeG1tMCxbR09UT0ZGKGVieCxQRF8xXzg0NyldCTsgeG1tMD16NQorCW11bHBzCXhtbTMsW0dPVE9GRihlYngsUERfTTJfNjEzKV0JOyB4bW0zPSh6MTAgKiAtMi42MTMxMjU5MzApCisJbXVscHMJeG1tNCxbR09UT0ZGKGVieCxQRF8xXzA4MildCTsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisJYWRkcHMJeG1tMyx4bW0wCQk7IHhtbTM9dG1wMTIKKwlzdWJwcwl4bW00LHhtbTAJCTsgeG1tND10bXAxMAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXN1YnBzCXhtbTMseG1tMQkJOyB4bW0zPXRtcDYKKwltb3ZhcHMJeG1tNSx4bW02CisJbW92YXBzCXhtbTAseG1tNworCWFkZHBzCXhtbTYseG1tMQkJOyB4bW02PWRhdGEwPSgwMCAxMCAyMCAzMCkKKwlhZGRwcwl4bW03LHhtbTMJCTsgeG1tNz1kYXRhMT0oMDEgMTEgMjEgMzEpCisJc3VicHMJeG1tNSx4bW0xCQk7IHhtbTU9ZGF0YTc9KDA3IDE3IDI3IDM3KQorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPWRhdGE2PSgwNiAxNiAyNiAzNikKKwlzdWJwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXA1CisKKwltb3ZhcHMJeG1tMSxbR09UT0ZGKGVieCxQRF9STkRJTlRfTUFHSUMpXQk7IHhtbTE9W1BEX1JORElOVF9NQUdJQ10KKwlwY21wZXFkCXhtbTMseG1tMworCXBzcmxkCXhtbTMsV09SRF9CSVQJCTsgeG1tMz17MHhGRkZGIDB4MDAwMCAweEZGRkYgMHgwMDAwIC4ufQorCisJYWRkcHMJeG1tNix4bW0xCTsgeG1tNj1yb3VuZGludChkYXRhMC84KT0oMDAgKiogMTAgKiogMjAgKiogMzAgKiopCisJYWRkcHMJeG1tNyx4bW0xCTsgeG1tNz1yb3VuZGludChkYXRhMS84KT0oMDEgKiogMTEgKiogMjEgKiogMzEgKiopCisJYWRkcHMJeG1tMCx4bW0xCTsgeG1tMD1yb3VuZGludChkYXRhNi84KT0oMDYgKiogMTYgKiogMjYgKiogMzYgKiopCisJYWRkcHMJeG1tNSx4bW0xCTsgeG1tNT1yb3VuZGludChkYXRhNy84KT0oMDcgKiogMTcgKiogMjcgKiogMzcgKiopCisKKwlwYW5kCXhtbTYseG1tMwkJOyB4bW02PSgwMCAtLSAxMCAtLSAyMCAtLSAzMCAtLSkKKwlwc2xsZAl4bW03LFdPUkRfQklUCQk7IHhtbTc9KC0tIDAxIC0tIDExIC0tIDIxIC0tIDMxKQorCXBhbmQJeG1tMCx4bW0zCQk7IHhtbTA9KDA2IC0tIDE2IC0tIDI2IC0tIDM2IC0tKQorCXBzbGxkCXhtbTUsV09SRF9CSVQJCTsgeG1tNT0oLS0gMDcgLS0gMTcgLS0gMjcgLS0gMzcpCisJcG9yCXhtbTYseG1tNwkJOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKwlwb3IJeG1tMCx4bW01CQk7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorCisJbW92YXBzCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9dG1wMgorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0zPXRtcDMKKworCWFkZHBzCXhtbTQseG1tMgkJOyB4bW00PXRtcDQKKwltb3ZhcHMJeG1tNyx4bW0xCisJbW92YXBzCXhtbTUseG1tMworCWFkZHBzCXhtbTEseG1tMgkJOyB4bW0xPWRhdGEyPSgwMiAxMiAyMiAzMikKKwlhZGRwcwl4bW0zLHhtbTQJCTsgeG1tMz1kYXRhND0oMDQgMTQgMjQgMzQpCisJc3VicHMJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTU9KDA1IDE1IDI1IDM1KQorCXN1YnBzCXhtbTUseG1tNAkJOyB4bW01PWRhdGEzPSgwMyAxMyAyMyAzMykKKworCW1vdmFwcwl4bW0yLFtHT1RPRkYoZWJ4LFBEX1JORElOVF9NQUdJQyldCTsgeG1tMj1bUERfUk5ESU5UX01BR0lDXQorCXBjbXBlcWQJeG1tNCx4bW00CisJcHNybGQJeG1tNCxXT1JEX0JJVAkJOyB4bW00PXsweEZGRkYgMHgwMDAwIDB4RkZGRiAweDAwMDAgLi59CisKKwlhZGRwcwl4bW0zLHhtbTIJOyB4bW0zPXJvdW5kaW50KGRhdGE0LzgpPSgwNCAqKiAxNCAqKiAyNCAqKiAzNCAqKikKKwlhZGRwcwl4bW03LHhtbTIJOyB4bW03PXJvdW5kaW50KGRhdGE1LzgpPSgwNSAqKiAxNSAqKiAyNSAqKiAzNSAqKikKKwlhZGRwcwl4bW0xLHhtbTIJOyB4bW0xPXJvdW5kaW50KGRhdGEyLzgpPSgwMiAqKiAxMiAqKiAyMiAqKiAzMiAqKikKKwlhZGRwcwl4bW01LHhtbTIJOyB4bW01PXJvdW5kaW50KGRhdGEzLzgpPSgwMyAqKiAxMyAqKiAyMyAqKiAzMyAqKikKKworCXBhbmQJeG1tMyx4bW00CQk7IHhtbTM9KDA0IC0tIDE0IC0tIDI0IC0tIDM0IC0tKQorCXBzbGxkCXhtbTcsV09SRF9CSVQJCTsgeG1tNz0oLS0gMDUgLS0gMTUgLS0gMjUgLS0gMzUpCisJcGFuZAl4bW0xLHhtbTQJCTsgeG1tMT0oMDIgLS0gMTIgLS0gMjIgLS0gMzIgLS0pCisJcHNsbGQJeG1tNSxXT1JEX0JJVAkJOyB4bW01PSgtLSAwMyAtLSAxMyAtLSAyMyAtLSAzMykKKwlwb3IJeG1tMyx4bW03CQk7IHhtbTM9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorCXBvcgl4bW0xLHhtbTUJCTsgeG1tMT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisKKwltb3ZkcWEgICAgeG1tMixbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCTsgeG1tMj1bUEJfQ0VOVEVSSlNBTVBdCisKKwlwYWNrc3N3YiAgeG1tNix4bW0zCTsgeG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisJcGFja3Nzd2IgIHhtbTEseG1tMAk7IHhtbTE9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorCXBhZGRiICAgICB4bW02LHhtbTIKKwlwYWRkYiAgICAgeG1tMSx4bW0yCisKKwltb3ZkcWEgICAgeG1tNCx4bW02CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2x3ZCB4bW02LHhtbTEJOyB4bW02PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMyAyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKwlwdW5wY2tod2QgeG1tNCx4bW0xCTsgeG1tND0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcgMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisKKwltb3ZkcWEgICAgeG1tNyx4bW02CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xkcSB4bW02LHhtbTQJOyB4bW02PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKwlwdW5wY2toZHEgeG1tNyx4bW00CTsgeG1tNz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKwlwc2h1ZmQJeG1tNSx4bW02LDB4NEUJOyB4bW01PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwc2h1ZmQJeG1tMyx4bW03LDB4NEUJOyB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKworCXB1c2hwaWMJZWJ4CQkJOyBzYXZlIEdPVCBhZGRyZXNzCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlfTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgorCW1vdnEJX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlfTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNQorCW1vdnEJX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKworCXBvcHBpYwllYngJCQk7IHJlc3RvcmUgR09UIGFkZHJlc3MKKworCWFkZAllc2ksIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVAk7IHdzcHRyCisJYWRkCWVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworCWRlYwllY3gJCQkJOyBjdHIKKwlqbnoJbmVhciAucm93bG9vcAorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCislZW5kaWYgOyBKSURDVF9GTFRfU1NFX1NTRTJfU1VQUE9SVEVECislZW5kaWYgOyBEQ1RfRkxPQVRfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qaXNzMmZzdC5hc20gYi9qaXNzMmZzdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3YTI2MAotLS0gL2Rldi9udWxsCisrKyBiL2ppc3MyZnN0LmFzbQpAQCAtMCwwICsxLDUxMiBAQAorOworOyBqaXNzMmZzdC5hc20gLSBmYXN0IGludGVnZXIgSURDVCAoU1NFMikKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmYXN0LCBub3Qgc28gYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZgorOyB0aGUgaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMKKzsgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0ZnN0LmM7IHNlZSB0aGUgamlkY3Rmc3QuYworOyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBMYXN0IE1vZGlmaWVkIDogRmVicnVhcnkgNCwgMjAwNgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKyVpZmRlZiBKSURDVF9JTlRfU1NFMl9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTgJOyAxNCBpcyBhbHNvIE9LLgorJWRlZmluZSBQQVNTMV9CSVRTCTIKKworJWlmIElGQVNUX1NDQUxFX0JJVFMgIT0gUEFTUzFfQklUUworJWVycm9yICInSUZBU1RfU0NBTEVfQklUUycgbXVzdCBiZSBlcXVhbCB0byAnUEFTUzFfQklUUycuIgorJWVuZGlmCisKKyVpZiBDT05TVF9CSVRTID09IDgKK0ZfMV8wODIJZXF1CTI3NwkJOyBGSVgoMS4wODIzOTIyMDApCitGXzFfNDE0CWVxdQkzNjIJCTsgRklYKDEuNDE0MjEzNTYyKQorRl8xXzg0NwllcXUJNDczCQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl82MTMJZXF1CTY2OQkJOyBGSVgoMi42MTMxMjU5MzApCitGXzFfNjEzCWVxdQkoRl8yXzYxMyAtIDI1NikJOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lCURFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8xXzA4MgllcXUJREVTQ0FMRSgxMTYyMjA5Nzc1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMDgyMzkyMjAwKQorRl8xXzQxNAllcXUJREVTQ0FMRSgxNTE4NTAwMjQ5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNDE0MjEzNTYyKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMwllcXUJREVTQ0FMRSgyODA1ODIyNjAyLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNjEzMTI1OTMwKQorRl8xXzYxMwllcXUJKEZfMl82MTMgLSAoMSA8PCBDT05TVF9CSVRTKSkJOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKzsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPD0gMiAodG8gYXZvaWQgb3ZlcmZsb3cpCis7IENPTlNUX0JJVFMgKyBDT05TVF9TSElGVCArIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTID09IDE2IChmb3IgcG11bGh3KQorCislZGVmaW5lIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTICAgMgorJWRlZmluZSBDT05TVF9TSElGVCAgICAgKDE2IC0gUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgLSBDT05TVF9CSVRTKQorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikKKworRVhUTihqY29uc3RfaWRjdF9pZmFzdF9zc2UyKToKKworUFdfRjE0MTQJdGltZXMgOCBkdyAgRl8xXzQxNCA8PCBDT05TVF9TSElGVAorUFdfRjE4NDcJdGltZXMgOCBkdyAgRl8xXzg0NyA8PCBDT05TVF9TSElGVAorUFdfTUYxNjEzCXRpbWVzIDggZHcgLUZfMV82MTMgPDwgQ09OU1RfU0hJRlQKK1BXX0YxMDgyCXRpbWVzIDggZHcgIEZfMV8wODIgPDwgQ09OU1RfU0hJRlQKK1BCX0NFTlRFUkpTQU1QCXRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfaWRjdF9pZmFzdF9zc2UyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworJWRlZmluZSBjaW5mbyhiKQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGNvbXBwdHIoYikJKGIpKzEyCQk7IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCislZGVmaW5lIGNvZWZfYmxvY2soYikJKGIpKzE2CQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikJKGIpKzI0CQk7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19pZGN0X2lmYXN0X3NzZTIpCisKK0VYVE4oanBlZ19pZGN0X2lmYXN0X3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3aygwKV0KKwlwdXNocGljCWVieAorOwlwdXNoCWVjeAkJOyB1bnVzZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKworOwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQorCW1vdgllZHgsIFBPSU5URVIgW2NvbXBwdHIoZWF4KV0KKwltb3YJZWR4LCBQT0lOVEVSIFtqY29tcGluZm9fZGN0X3RhYmxlKGVkeCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXQkJOyBpbnB0cgorCislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfSUZBU1RfU1NFMgorCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlqbnoJbmVhciAuY29sdW1uRENUCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0xLHhtbTAKKwlwYWNrc3N3YiB4bW0xLHhtbTEKKwlwYWNrc3N3YiB4bW0xLHhtbTEKKwltb3ZkCWVheCx4bW0xCisJdGVzdAllYXgsZWF4CisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwdW5wY2tsd2QgeG1tMCx4bW0wCQk7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorCXB1bnBja2h3ZCB4bW03LHhtbTcJCTsgeG1tNz0oMDQgMDQgMDUgMDUgMDYgMDYgMDcgMDcpCisKKwlwc2h1ZmQJeG1tNix4bW0wLDB4MDAJCTsgeG1tNj1jb2wwPSgwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCkKKwlwc2h1ZmQJeG1tMix4bW0wLDB4NTUJCTsgeG1tMj1jb2wxPSgwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSkKKwlwc2h1ZmQJeG1tNSx4bW0wLDB4QUEJCTsgeG1tNT1jb2wyPSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMikKKwlwc2h1ZmQJeG1tMCx4bW0wLDB4RkYJCTsgeG1tMD1jb2wzPSgwMyAwMyAwMyAwMyAwMyAwMyAwMyAwMykKKwlwc2h1ZmQJeG1tMSx4bW03LDB4MDAJCTsgeG1tMT1jb2w0PSgwNCAwNCAwNCAwNCAwNCAwNCAwNCAwNCkKKwlwc2h1ZmQJeG1tNCx4bW03LDB4NTUJCTsgeG1tND1jb2w1PSgwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKKwlwc2h1ZmQJeG1tMyx4bW03LDB4QUEJCTsgeG1tMz1jb2w2PSgwNiAwNiAwNiAwNiAwNiAwNiAwNiAwNikKKwlwc2h1ZmQJeG1tNyx4bW03LDB4RkYJCTsgeG1tNz1jb2w3PSgwNyAwNyAwNyAwNyAwNyAwNyAwNyAwNykKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT1jb2wxCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPWNvbDMKKwlqbXAJbmVhciAuY29sdW1uX2VuZAorCWFsaWdueAkxNiw3CislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKworCW1vdmRxYQl4bW00LHhtbTAKKwltb3ZkcWEJeG1tNSx4bW0xCisJcHN1YncJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMTEKKwlwc3Vidwl4bW0xLHhtbTMKKwlwYWRkdwl4bW00LHhtbTIJCTsgeG1tND10bXAxMAorCXBhZGR3CXhtbTUseG1tMwkJOyB4bW01PXRtcDEzCisKKwlwc2xsdwl4bW0xLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CXhtbTEsW0dPVE9GRihlYngsUFdfRjE0MTQpXQorCXBzdWJ3CXhtbTEseG1tNQkJOyB4bW0xPXRtcDEyCisKKwltb3ZkcWEJeG1tNix4bW00CisJbW92ZHFhCXhtbTcseG1tMAorCXBzdWJ3CXhtbTQseG1tNQkJOyB4bW00PXRtcDMKKwlwc3Vidwl4bW0wLHhtbTEJCTsgeG1tMD10bXAyCisJcGFkZHcJeG1tNix4bW01CQk7IHhtbTY9dG1wMAorCXBhZGR3CXhtbTcseG1tMQkJOyB4bW03PXRtcDEKKworCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTQJOyB3aygxKT10bXAzCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPXRtcDIKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisKKwltb3ZkcWEJeG1tNCx4bW0yCisJbW92ZHFhCXhtbTAseG1tNQorCXBzdWJ3CXhtbTIseG1tMQkJOyB4bW0yPXoxMgorCXBzdWJ3CXhtbTUseG1tMwkJOyB4bW01PXoxMAorCXBhZGR3CXhtbTQseG1tMQkJOyB4bW00PXoxMQorCXBhZGR3CXhtbTAseG1tMwkJOyB4bW0wPXoxMworCisJbW92ZHFhCXhtbTEseG1tNQkJOyB4bW0xPXoxMCh1bnNjYWxlZCkKKwlwc2xsdwl4bW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcHNsbHcJeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisJbW92ZHFhCXhtbTMseG1tNAorCXBzdWJ3CXhtbTQseG1tMAorCXBhZGR3CXhtbTMseG1tMAkJOyB4bW0zPXRtcDcKKworCXBzbGx3CXhtbTQsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJeG1tNCxbR09UT0ZGKGVieCxQV19GMTQxNCldCTsgeG1tND10bXAxMQorCisJOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgorCTsKKwk7IChPcmlnaW5hbCkKKwk7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OworCTsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKKworCW1vdmRxYQl4bW0wLHhtbTUKKwlwYWRkdwl4bW01LHhtbTIKKwlwbXVsaHcJeG1tNSxbR09UT0ZGKGVieCxQV19GMTg0NyldCTsgeG1tNT16NQorCXBtdWxodwl4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMTYxMyldCisJcG11bGh3CXhtbTIsW0dPVE9GRihlYngsUFdfRjEwODIpXQorCXBzdWJ3CXhtbTAseG1tMQorCXBzdWJ3CXhtbTIseG1tNQkJOyB4bW0yPXRtcDEwCisJcGFkZHcJeG1tMCx4bW01CQk7IHhtbTA9dG1wMTIKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlwc3Vidwl4bW0wLHhtbTMJCTsgeG1tMD10bXA2CisJbW92ZHFhCXhtbTEseG1tNgorCW1vdmRxYQl4bW01LHhtbTcKKwlwYWRkdwl4bW02LHhtbTMJCTsgeG1tNj1kYXRhMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcGFkZHcJeG1tNyx4bW0wCQk7IHhtbTc9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorCXBzdWJ3CXhtbTEseG1tMwkJOyB4bW0xPWRhdGE3PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKwlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhNj0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisJcHN1YncJeG1tNCx4bW0wCQk7IHhtbTQ9dG1wNQorCisJbW92ZHFhICAgIHhtbTMseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTYseG1tNwkJOyB4bW02PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKwlwdW5wY2tod2QgeG1tMyx4bW03CQk7IHhtbTM9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQorCW1vdmRxYSAgICB4bW0wLHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW01LHhtbTEJCTsgeG1tNT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisJcHVucGNraHdkIHhtbTAseG1tMQkJOyB4bW0wPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PXRtcDIKKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMSldCTsgeG1tMT10bXAzCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW01CTsgd2soMCk9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKwlwYWRkdwl4bW0yLHhtbTQJCTsgeG1tMj10bXA0CisJbW92ZHFhCXhtbTUseG1tNworCW1vdmRxYQl4bW0wLHhtbTEKKwlwYWRkdwl4bW03LHhtbTQJCTsgeG1tNz1kYXRhMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisJcGFkZHcJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorCXBzdWJ3CXhtbTUseG1tNAkJOyB4bW01PWRhdGE1PSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKwlwc3Vidwl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKwltb3ZkcWEgICAgeG1tNCx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNyx4bW0wCQk7IHhtbTc9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorCXB1bnBja2h3ZCB4bW00LHhtbTAJCTsgeG1tND0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisJbW92ZHFhICAgIHhtbTIseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTEseG1tNQkJOyB4bW0xPSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKwlwdW5wY2tod2QgeG1tMix4bW01CQk7IHhtbTI9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQorCisJbW92ZHFhICAgIHhtbTAseG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTMseG1tNAkJOyB4bW0zPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKwlwdW5wY2toZHEgeG1tMCx4bW00CQk7IHhtbTA9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCW1vdmRxYSAgICB4bW01LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisJcHVucGNraGRxIHhtbTUseG1tNwkJOyB4bW01PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKworCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3aygwKV0JOyB4bW00PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMSldCTsgeG1tNz0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0zCTsgd2soMCk9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwltb3ZkcWEgICAgeG1tMyx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMSx4bW00CQk7IHhtbTE9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorCXB1bnBja2hkcSB4bW0zLHhtbTQJCTsgeG1tMz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhICAgIHhtbTAseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTIseG1tNwkJOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKwlwdW5wY2toZHEgeG1tMCx4bW03CQk7IHhtbTA9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhICAgICB4bW00LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tNix4bW0xCQk7IHhtbTY9Y29sMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisJcHVucGNraHFkcSB4bW00LHhtbTEJCTsgeG1tND1jb2wxPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKwltb3ZkcWEgICAgIHhtbTcseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW01LHhtbTMJCTsgeG1tNT1jb2wyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKwlwdW5wY2tocWRxIHhtbTcseG1tMwkJOyB4bW03PWNvbDM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0zPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT1jb2wxCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNwk7IHdrKDEpPWNvbDMKKworCW1vdmRxYSAgICAgeG1tNCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTEseG1tMgkJOyB4bW0xPWNvbDQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorCXB1bnBja2hxZHEgeG1tNCx4bW0yCQk7IHhtbTQ9Y29sNT0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisJbW92ZHFhICAgICB4bW03LHhtbTMJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMyx4bW0wCQk7IHhtbTM9Y29sNj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJcHVucGNraHFkcSB4bW03LHhtbTAJCTsgeG1tNz1jb2w3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKy5jb2x1bW5fZW5kOgorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQk7IChKU0FNUFJPVyAqKQorCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KKworCTsgLS0gRXZlbiBwYXJ0CisKKwk7IHhtbTY9Y29sMCwgeG1tNT1jb2wyLCB4bW0xPWNvbDQsIHhtbTM9Y29sNgorCisJbW92ZHFhCXhtbTIseG1tNgorCW1vdmRxYQl4bW0wLHhtbTUKKwlwc3Vidwl4bW02LHhtbTEJCTsgeG1tNj10bXAxMQorCXBzdWJ3CXhtbTUseG1tMworCXBhZGR3CXhtbTIseG1tMQkJOyB4bW0yPXRtcDEwCisJcGFkZHcJeG1tMCx4bW0zCQk7IHhtbTA9dG1wMTMKKworCXBzbGx3CXhtbTUsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJeG1tNSxbR09UT0ZGKGVieCxQV19GMTQxNCldCisJcHN1YncJeG1tNSx4bW0wCQk7IHhtbTU9dG1wMTIKKworCW1vdmRxYQl4bW0xLHhtbTIKKwltb3ZkcWEJeG1tMyx4bW02CisJcHN1YncJeG1tMix4bW0wCQk7IHhtbTI9dG1wMworCXBzdWJ3CXhtbTYseG1tNQkJOyB4bW02PXRtcDIKKwlwYWRkdwl4bW0xLHhtbTAJCTsgeG1tMT10bXAwCisJcGFkZHcJeG1tMyx4bW01CQk7IHhtbTM9dG1wMQorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDApXQk7IHhtbTA9Y29sMQorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PWNvbDMKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT10bXAzCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPXRtcDIKKworCTsgLS0gT2RkIHBhcnQKKworCTsgeG1tMD1jb2wxLCB4bW01PWNvbDMsIHhtbTQ9Y29sNSwgeG1tNz1jb2w3CisKKwltb3ZkcWEJeG1tMix4bW0wCisJbW92ZHFhCXhtbTYseG1tNAorCXBzdWJ3CXhtbTAseG1tNwkJOyB4bW0wPXoxMgorCXBzdWJ3CXhtbTQseG1tNQkJOyB4bW00PXoxMAorCXBhZGR3CXhtbTIseG1tNwkJOyB4bW0yPXoxMQorCXBhZGR3CXhtbTYseG1tNQkJOyB4bW02PXoxMworCisJbW92ZHFhCXhtbTcseG1tNAkJOyB4bW03PXoxMCh1bnNjYWxlZCkKKwlwc2xsdwl4bW0wLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcHNsbHcJeG1tNCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisJbW92ZHFhCXhtbTUseG1tMgorCXBzdWJ3CXhtbTIseG1tNgorCXBhZGR3CXhtbTUseG1tNgkJOyB4bW01PXRtcDcKKworCXBzbGx3CXhtbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJeG1tMixbR09UT0ZGKGVieCxQV19GMTQxNCldCTsgeG1tMj10bXAxMQorCisJOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgorCTsKKwk7IChPcmlnaW5hbCkKKwk7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OworCTsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKKworCW1vdmRxYQl4bW02LHhtbTQKKwlwYWRkdwl4bW00LHhtbTAKKwlwbXVsaHcJeG1tNCxbR09UT0ZGKGVieCxQV19GMTg0NyldCTsgeG1tND16NQorCXBtdWxodwl4bW02LFtHT1RPRkYoZWJ4LFBXX01GMTYxMyldCisJcG11bGh3CXhtbTAsW0dPVE9GRihlYngsUFdfRjEwODIpXQorCXBzdWJ3CXhtbTYseG1tNworCXBzdWJ3CXhtbTAseG1tNAkJOyB4bW0wPXRtcDEwCisJcGFkZHcJeG1tNix4bW00CQk7IHhtbTY9dG1wMTIKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlwc3Vidwl4bW02LHhtbTUJCTsgeG1tNj10bXA2CisJbW92ZHFhCXhtbTcseG1tMQorCW1vdmRxYQl4bW00LHhtbTMKKwlwYWRkdwl4bW0xLHhtbTUJCTsgeG1tMT1kYXRhMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisJcGFkZHcJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorCXBzcmF3CXhtbTEsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisJcHNyYXcJeG1tMywoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3Vidwl4bW03LHhtbTUJCTsgeG1tNz1kYXRhNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisJcHN1YncJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCXBzcmF3CXhtbTcsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisJcHNyYXcJeG1tNCwoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3Vidwl4bW0yLHhtbTYJCTsgeG1tMj10bXA1CisKKwlwYWNrc3N3YiAgeG1tMSx4bW00CTsgeG1tMT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJcGFja3Nzd2IgIHhtbTMseG1tNwk7IHhtbTM9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9dG1wMgorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PXRtcDMKKworCXBhZGR3CXhtbTAseG1tMgkJOyB4bW0wPXRtcDQKKwltb3ZkcWEJeG1tNCx4bW01CisJbW92ZHFhCXhtbTcseG1tNgorCXBhZGR3CXhtbTUseG1tMgkJOyB4bW01PWRhdGEyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKwlwYWRkdwl4bW02LHhtbTAJCTsgeG1tNj1kYXRhND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisJcHNyYXcJeG1tNSwoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3Jhdwl4bW02LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzdWJ3CXhtbTQseG1tMgkJOyB4bW00PWRhdGE1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKwlwc3Vidwl4bW03LHhtbTAJCTsgeG1tNz1kYXRhMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisJcHNyYXcJeG1tNCwoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3Jhdwl4bW03LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCisJbW92ZHFhICAgIHhtbTIsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQk7IHhtbTI9W1BCX0NFTlRFUkpTQU1QXQorCisJcGFja3Nzd2IgIHhtbTUseG1tNgk7IHhtbTU9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyIDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorCXBhY2tzc3diICB4bW03LHhtbTQJOyB4bW03PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MyAwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKworCXBhZGRiICAgICB4bW0xLHhtbTIKKwlwYWRkYiAgICAgeG1tMyx4bW0yCisJcGFkZGIgICAgIHhtbTUseG1tMgorCXBhZGRiICAgICB4bW03LHhtbTIKKworCW1vdmRxYSAgICB4bW0wLHhtbTEJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbGJ3IHhtbTEseG1tMwk7IHhtbTE9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxIDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQorCXB1bnBja2hidyB4bW0wLHhtbTMJOyB4bW0wPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNyA0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKwltb3ZkcWEgICAgeG1tNix4bW01CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2xidyB4bW01LHhtbTcJOyB4bW01PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMyA0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKwlwdW5wY2toYncgeG1tNix4bW03CTsgeG1tNj0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUgNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCisKKwltb3ZkcWEgICAgeG1tNCx4bW0xCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2x3ZCB4bW0xLHhtbTUJOyB4bW0xPSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMyAyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKwlwdW5wY2tod2QgeG1tNCx4bW01CTsgeG1tND0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMgNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisJbW92ZHFhICAgIHhtbTIseG1tNgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgeG1tNix4bW0wCTsgeG1tNj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcgMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisJcHVucGNraHdkIHhtbTIseG1tMAk7IHhtbTI9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3IDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQorCisJbW92ZHFhICAgIHhtbTMseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tsZHEgeG1tMSx4bW02CTsgeG1tMT0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisJcHVucGNraGRxIHhtbTMseG1tNgk7IHhtbTM9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCW1vdmRxYSAgICB4bW03LHhtbTQJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbGRxIHhtbTQseG1tMgk7IHhtbTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3IDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQorCXB1bnBja2hkcSB4bW03LHhtbTIJOyB4bW03PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKworCXBzaHVmZAl4bW01LHhtbTEsMHg0RQk7IHhtbTU9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorCXBzaHVmZAl4bW0wLHhtbTMsMHg0RQk7IHhtbTA9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorCXBzaHVmZAl4bW02LHhtbTQsMHg0RQk7IHhtbTY9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorCXBzaHVmZAl4bW0yLHhtbTcsMHg0RQk7IHhtbTI9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3IDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQorCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQorCW1vdnEJX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTEKKwltb3ZxCV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0zCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSs0KlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzYqU0laRU9GX0pTQU1QUk9XXQorCW1vdnEJX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKKwltb3ZxCV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW03CisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlfTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNQorCW1vdnEJX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTAKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzUqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrNypTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlfTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgorCW1vdnEJX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTIKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgdW51c2VkCisJcG9wcGljCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSklEQ1RfSU5UX1NTRTJfU1VQUE9SVEVECislZW5kaWYgOyBEQ1RfSUZBU1RfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qaXNzMmludC5hc20gYi9qaXNzMmludC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlNzEwOQotLS0gL2Rldi9udWxsCisrKyBiL2ppc3MyaW50LmFzbQpAQCAtMCwwICsxLDg2OSBAQAorOworOyBqaXNzMmludC5hc20gLSBhY2N1cmF0ZSBpbnRlZ2VyIElEQ1QgKFNTRTIpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2xvdy1idXQtYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKzsgaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQKKzsgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0aW50LmM7IHNlZSB0aGUgamlkY3RpbnQuYyBmb3IKKzsgbW9yZSBkZXRhaWxzLgorOworOyBMYXN0IE1vZGlmaWVkIDogRmVicnVhcnkgNCwgMjAwNgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKyVpZmRlZiBKSURDVF9JTlRfU1NFMl9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTEzCislZGVmaW5lIFBBU1MxX0JJVFMJMgorCislZGVmaW5lIERFU0NBTEVfUDEJKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMgkoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjk4CWVxdQkgMjQ0NgkJOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwCWVxdQkgMzE5NgkJOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxCWVxdQkgNDQzMwkJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1CWVxdQkgNjI3MAkJOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5CWVxdQkgNzM3MwkJOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1CWVxdQkgOTYzMwkJOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxCWVxdQkxMjI5OQkJOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3CWVxdQkxNTEzNwkJOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxCWVxdQkxNjA2OQkJOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzCWVxdQkxNjgxOQkJOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyCWVxdQkyMDk5NQkJOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyCWVxdQkyNTE3MgkJOyBGSVgoMy4wNzI3MTEwMjYpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8wXzI5OAllcXUJREVTQ0FMRSggMzIwNjUyOTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJREVTQ0FMRSggNDE4OTUzMjc2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJREVTQ0FMRSgxNjEyMDMxMjY3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJREVTQ0FMRSgyMjA0NTIwNjczLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuMDcyNzExMDI2KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfaXNsb3dfc3NlMikKKworRVhUTihqY29uc3RfaWRjdF9pc2xvd19zc2UyKToKKworUFdfRjEzMF9GMDU0CXRpbWVzIDQgZHcgIChGXzBfNTQxK0ZfMF83NjUpLCBGXzBfNTQxCitQV19GMDU0X01GMTMwCXRpbWVzIDQgZHcgIEZfMF81NDEsIChGXzBfNTQxLUZfMV84NDcpCitQV19NRjA3OF9GMTE3CXRpbWVzIDQgZHcgIChGXzFfMTc1LUZfMV85NjEpLCBGXzFfMTc1CitQV19GMTE3X0YwNzgJdGltZXMgNCBkdyAgRl8xXzE3NSwgKEZfMV8xNzUtRl8wXzM5MCkKK1BXX01GMDYwX01GMDg5CXRpbWVzIDQgZHcgIChGXzBfMjk4LUZfMF84OTkpLC1GXzBfODk5CitQV19NRjA4OV9GMDYwCXRpbWVzIDQgZHcgLUZfMF84OTksIChGXzFfNTAxLUZfMF84OTkpCitQV19NRjA1MF9NRjI1Ngl0aW1lcyA0IGR3ICAoRl8yXzA1My1GXzJfNTYyKSwtRl8yXzU2MgorUFdfTUYyNTZfRjA1MAl0aW1lcyA0IGR3IC1GXzJfNTYyLCAoRl8zXzA3Mi1GXzJfNTYyKQorUERfREVTQ0FMRV9QMQl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AxLTEpCitQRF9ERVNDQUxFX1AyCXRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDItMSkKK1BCX0NFTlRFUkpTQU1QCXRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpwZWdfaWRjdF9pc2xvd19zc2UyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworJWRlZmluZSBjaW5mbyhiKQkoYikrOAkJOyBqX2RlY29tcHJlc3NfcHRyIGNpbmZvCislZGVmaW5lIGNvbXBwdHIoYikJKGIpKzEyCQk7IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCislZGVmaW5lIGNvZWZfYmxvY2soYikJKGIpKzE2CQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikJKGIpKzI0CQk7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTEyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfaWRjdF9pc2xvd19zc2UyKQorCitFWFROKGpwZWdfaWRjdF9pc2xvd19zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYngKKzsJcHVzaAllY3gJCTsgdW51c2VkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKzsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwltb3YJZWR4LCBQT0lOVEVSIFtjb21wcHRyKGVheCldCisJbW92CWVkeCwgUE9JTlRFUiBbamNvbXBpbmZvX2RjdF90YWJsZShlZHgpXQk7IHF1YW50cHRyCisJbW92CWVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0JCTsgaW5wdHIKKworJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUX0lTTE9XX1NTRTIKKwltb3YJZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJam56CW5lYXIgLmNvbHVtbkRDVAorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMSx4bW0wCisJcGFja3Nzd2IgeG1tMSx4bW0xCisJcGFja3Nzd2IgeG1tMSx4bW0xCisJbW92ZAllYXgseG1tMQorCXRlc3QJZWF4LGVheAorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJcHNsbHcJeG1tNSxQQVNTMV9CSVRTCisKKwltb3ZkcWEgICAgeG1tNCx4bW01CQk7IHhtbTU9aW4wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwdW5wY2tsd2QgeG1tNSx4bW01CQk7IHhtbTU9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorCXB1bnBja2h3ZCB4bW00LHhtbTQJCTsgeG1tND0oMDQgMDQgMDUgMDUgMDYgMDYgMDcgMDcpCisKKwlwc2h1ZmQJeG1tNyx4bW01LDB4MDAJCTsgeG1tNz1jb2wwPSgwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCkKKwlwc2h1ZmQJeG1tNix4bW01LDB4NTUJCTsgeG1tNj1jb2wxPSgwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSkKKwlwc2h1ZmQJeG1tMSx4bW01LDB4QUEJCTsgeG1tMT1jb2wyPSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMikKKwlwc2h1ZmQJeG1tNSx4bW01LDB4RkYJCTsgeG1tNT1jb2wzPSgwMyAwMyAwMyAwMyAwMyAwMyAwMyAwMykKKwlwc2h1ZmQJeG1tMCx4bW00LDB4MDAJCTsgeG1tMD1jb2w0PSgwNCAwNCAwNCAwNCAwNCAwNCAwNCAwNCkKKwlwc2h1ZmQJeG1tMyx4bW00LDB4NTUJCTsgeG1tMz1jb2w1PSgwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKKwlwc2h1ZmQJeG1tMix4bW00LDB4QUEJCTsgeG1tMj1jb2w2PSgwNiAwNiAwNiAwNiAwNiAwNiAwNiAwNikKKwlwc2h1ZmQJeG1tNCx4bW00LDB4RkYJCTsgeG1tND1jb2w3PSgwNyAwNyAwNyAwNyAwNyAwNyAwNyAwNykKKworCW1vdmRxYQlYTU1XT1JEIFt3ayg4KV0sIHhtbTYJOyB3ayg4KT1jb2wxCisJbW92ZHFhCVhNTVdPUkQgW3drKDkpXSwgeG1tNQk7IHdrKDkpPWNvbDMKKwltb3ZkcWEJWE1NV09SRCBbd2soMTApXSwgeG1tMwk7IHdrKDEwKT1jb2w1CisJbW92ZHFhCVhNTVdPUkQgW3drKDExKV0sIHhtbTQJOyB3aygxMSk9Y29sNworCWptcAluZWFyIC5jb2x1bW5fZW5kCisJYWxpZ254CTE2LDcKKyVlbmRpZgorLmNvbHVtbkRDVDoKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOworCTsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7CisJOyB0bXAzID0gejEgKyB6MiAqIDAuNzY1MzY2ODY1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wMiA9IHoyICogMC41NDExOTYxMDAgKyB6MyAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKwk7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CisKKwltb3ZkcWEgICAgeG1tNCx4bW0xCQk7IHhtbTE9aW4yPXoyCisJbW92ZHFhICAgIHhtbTUseG1tMQorCXB1bnBja2x3ZCB4bW00LHhtbTMJCTsgeG1tMz1pbjY9ejMKKwlwdW5wY2tod2QgeG1tNSx4bW0zCisJbW92ZHFhICAgIHhtbTEseG1tNAorCW1vdmRxYSAgICB4bW0zLHhtbTUKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IHhtbTQ9dG1wM0wKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IHhtbTU9dG1wM0gKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyB4bW0xPXRtcDJMCisJcG1hZGR3ZCAgIHhtbTMsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgeG1tMz10bXAySAorCisJbW92ZHFhICAgIHhtbTYseG1tMAorCXBhZGR3ICAgICB4bW0wLHhtbTIJCTsgeG1tMD1pbjAraW40CisJcHN1YncgICAgIHhtbTYseG1tMgkJOyB4bW02PWluMC1pbjQKKworCXB4b3IgICAgICB4bW03LHhtbTcKKwlweG9yICAgICAgeG1tMix4bW0yCisJcHVucGNrbHdkIHhtbTcseG1tMAkJOyB4bW03PXRtcDBMCisJcHVucGNraHdkIHhtbTIseG1tMAkJOyB4bW0yPXRtcDBICisJcHNyYWQgICAgIHhtbTcsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tNywxNiAmIHBzbGxkIHhtbTcsQ09OU1RfQklUUworCXBzcmFkICAgICB4bW0yLCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTIsMTYgJiBwc2xsZCB4bW0yLENPTlNUX0JJVFMKKworCW1vdmRxYQl4bW0wLHhtbTcKKwlwYWRkZAl4bW03LHhtbTQJCTsgeG1tNz10bXAxMEwKKwlwc3ViZAl4bW0wLHhtbTQJCTsgeG1tMD10bXAxM0wKKwltb3ZkcWEJeG1tNCx4bW0yCisJcGFkZGQJeG1tMix4bW01CQk7IHhtbTI9dG1wMTBICisJcHN1YmQJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMTNICisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW03CTsgd2soMCk9dG1wMTBMCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMgk7IHdrKDEpPXRtcDEwSAorCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTAJOyB3aygyKT10bXAxM0wKKwltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW00CTsgd2soMyk9dG1wMTNICisKKwlweG9yICAgICAgeG1tNSx4bW01CisJcHhvciAgICAgIHhtbTcseG1tNworCXB1bnBja2x3ZCB4bW01LHhtbTYJCTsgeG1tNT10bXAxTAorCXB1bnBja2h3ZCB4bW03LHhtbTYJCTsgeG1tNz10bXAxSAorCXBzcmFkICAgICB4bW01LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTUsMTYgJiBwc2xsZCB4bW01LENPTlNUX0JJVFMKKwlwc3JhZCAgICAgeG1tNywoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW03LDE2ICYgcHNsbGQgeG1tNyxDT05TVF9CSVRTCisKKwltb3ZkcWEJeG1tMix4bW01CisJcGFkZGQJeG1tNSx4bW0xCQk7IHhtbTU9dG1wMTFMCisJcHN1YmQJeG1tMix4bW0xCQk7IHhtbTI9dG1wMTJMCisJbW92ZHFhCXhtbTAseG1tNworCXBhZGRkCXhtbTcseG1tMwkJOyB4bW03PXRtcDExSAorCXBzdWJkCXhtbTAseG1tMwkJOyB4bW0wPXRtcDEySAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDQpXSwgeG1tNQk7IHdrKDQpPXRtcDExTAorCW1vdmRxYQlYTU1XT1JEIFt3ayg1KV0sIHhtbTcJOyB3ayg1KT10bXAxMUgKKwltb3ZkcWEJWE1NV09SRCBbd2soNildLCB4bW0yCTsgd2soNik9dG1wMTJMCisJbW92ZHFhCVhNTVdPUkQgW3drKDcpXSwgeG1tMAk7IHdrKDcpPXRtcDEySAorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCW1vdmRxYQl4bW01LHhtbTYKKwltb3ZkcWEJeG1tNyx4bW00CisJcGFkZHcJeG1tNSx4bW0zCQk7IHhtbTU9ejMKKwlwYWRkdwl4bW03LHhtbTEJCTsgeG1tNz16NAorCisJOyAoT3JpZ2luYWwpCisJOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOworCTsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisJOyB6MyArPSB6NTsgIHo0ICs9IHo1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisJOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKworCW1vdmRxYSAgICB4bW0yLHhtbTUKKwltb3ZkcWEgICAgeG1tMCx4bW01CisJcHVucGNrbHdkIHhtbTIseG1tNworCXB1bnBja2h3ZCB4bW0wLHhtbTcKKwltb3ZkcWEgICAgeG1tNSx4bW0yCisJbW92ZHFhICAgIHhtbTcseG1tMAorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IHhtbTI9ejNMCisJcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldCTsgeG1tMD16M0gKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IHhtbTU9ejRMCisJcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyB4bW03PXo0SAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTIJOyB3aygxMCk9ejNMCisJbW92ZHFhCVhNTVdPUkQgW3drKDExKV0sIHhtbTAJOyB3aygxMSk9ejNICisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gdG1wMCArIHRtcDM7ICB6MiA9IHRtcDEgKyB0bXAyOworCTsgdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7CisJOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKKwk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworCTsgdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OworCTsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOworCTsgdG1wMSA9IHRtcDEgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXAyICogLTIuNTYyOTE1NDQ3OworCTsgdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworCTsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworCTsgdG1wMCArPSB6MzsgIHRtcDEgKz0gejQ7CisJOyB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsKKworCW1vdmRxYSAgICB4bW0yLHhtbTMKKwltb3ZkcWEgICAgeG1tMCx4bW0zCisJcHVucGNrbHdkIHhtbTIseG1tNAorCXB1bnBja2h3ZCB4bW0wLHhtbTQKKwltb3ZkcWEgICAgeG1tMyx4bW0yCisJbW92ZHFhICAgIHhtbTQseG1tMAorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyB4bW0yPXRtcDBMCisJcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTA9dG1wMEgKKwlwbWFkZHdkICAgeG1tMyxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW0zPXRtcDNMCisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgeG1tND10bXAzSAorCisJcGFkZGQJeG1tMiwgWE1NV09SRCBbd2soMTApXQk7IHhtbTI9dG1wMEwKKwlwYWRkZAl4bW0wLCBYTU1XT1JEIFt3aygxMSldCTsgeG1tMD10bXAwSAorCXBhZGRkCXhtbTMseG1tNQkJOyB4bW0zPXRtcDNMCisJcGFkZGQJeG1tNCx4bW03CQk7IHhtbTQ9dG1wM0gKKworCW1vdmRxYQlYTU1XT1JEIFt3ayg4KV0sIHhtbTIJOyB3ayg4KT10bXAwTAorCW1vdmRxYQlYTU1XT1JEIFt3ayg5KV0sIHhtbTAJOyB3ayg5KT10bXAwSAorCisJbW92ZHFhICAgIHhtbTIseG1tMQorCW1vdmRxYSAgICB4bW0wLHhtbTEKKwlwdW5wY2tsd2QgeG1tMix4bW02CisJcHVucGNraHdkIHhtbTAseG1tNgorCW1vdmRxYSAgICB4bW0xLHhtbTIKKwltb3ZkcWEgICAgeG1tNix4bW0wCisJcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IHhtbTI9dG1wMUwKKwlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgeG1tMD10bXAxSAorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IHhtbTE9dG1wMkwKKwlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyB4bW02PXRtcDJICisKKwlwYWRkZAl4bW0yLHhtbTUJCTsgeG1tMj10bXAxTAorCXBhZGRkCXhtbTAseG1tNwkJOyB4bW0wPXRtcDFICisJcGFkZGQJeG1tMSwgWE1NV09SRCBbd2soMTApXQk7IHhtbTE9dG1wMkwKKwlwYWRkZAl4bW02LCBYTU1XT1JEIFt3aygxMSldCTsgeG1tNj10bXAySAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTIJOyB3aygxMCk9dG1wMUwKKwltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tMAk7IHdrKDExKT10bXAxSAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygwKV0JOyB4bW01PXRtcDEwTAorCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygxKV0JOyB4bW03PXRtcDEwSAorCisJbW92ZHFhCXhtbTIseG1tNQorCW1vdmRxYQl4bW0wLHhtbTcKKwlwYWRkZAl4bW01LHhtbTMJCTsgeG1tNT1kYXRhMEwKKwlwYWRkZAl4bW03LHhtbTQJCTsgeG1tNz1kYXRhMEgKKwlwc3ViZAl4bW0yLHhtbTMJCTsgeG1tMj1kYXRhN0wKKwlwc3ViZAl4bW0wLHhtbTQJCTsgeG1tMD1kYXRhN0gKKworCW1vdmRxYQl4bW0zLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQk7IHhtbTM9W1BEX0RFU0NBTEVfUDFdCisKKwlwYWRkZAl4bW01LHhtbTMKKwlwYWRkZAl4bW03LHhtbTMKKwlwc3JhZAl4bW01LERFU0NBTEVfUDEKKwlwc3JhZAl4bW03LERFU0NBTEVfUDEKKwlwYWRkZAl4bW0yLHhtbTMKKwlwYWRkZAl4bW0wLHhtbTMKKwlwc3JhZAl4bW0yLERFU0NBTEVfUDEKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDEKKworCXBhY2tzc2R3ICB4bW01LHhtbTcJCTsgeG1tNT1kYXRhMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcGFja3NzZHcgIHhtbTIseG1tMAkJOyB4bW0yPWRhdGE3PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKworCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3ayg0KV0JOyB4bW00PXRtcDExTAorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFt3ayg1KV0JOyB4bW0zPXRtcDExSAorCisJbW92ZHFhCXhtbTcseG1tNAorCW1vdmRxYQl4bW0wLHhtbTMKKwlwYWRkZAl4bW00LHhtbTEJCTsgeG1tND1kYXRhMUwKKwlwYWRkZAl4bW0zLHhtbTYJCTsgeG1tMz1kYXRhMUgKKwlwc3ViZAl4bW03LHhtbTEJCTsgeG1tNz1kYXRhNkwKKwlwc3ViZAl4bW0wLHhtbTYJCTsgeG1tMD1kYXRhNkgKKworCW1vdmRxYQl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQk7IHhtbTE9W1BEX0RFU0NBTEVfUDFdCisKKwlwYWRkZAl4bW00LHhtbTEKKwlwYWRkZAl4bW0zLHhtbTEKKwlwc3JhZAl4bW00LERFU0NBTEVfUDEKKwlwc3JhZAl4bW0zLERFU0NBTEVfUDEKKwlwYWRkZAl4bW03LHhtbTEKKwlwYWRkZAl4bW0wLHhtbTEKKwlwc3JhZAl4bW03LERFU0NBTEVfUDEKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDEKKworCXBhY2tzc2R3ICB4bW00LHhtbTMJCTsgeG1tND1kYXRhMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisJcGFja3NzZHcgIHhtbTcseG1tMAkJOyB4bW03PWRhdGE2PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKKworCW1vdmRxYSAgICB4bW02LHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW01LHhtbTQJCTsgeG1tNT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisJcHVucGNraHdkIHhtbTYseG1tNAkJOyB4bW02PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKwltb3ZkcWEgICAgeG1tMSx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNyx4bW0yCQk7IHhtbTc9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorCXB1bnBja2h3ZCB4bW0xLHhtbTIJCTsgeG1tMT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soNildCTsgeG1tMz10bXAxMkwKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soNyldCTsgeG1tMD10bXAxMkgKKwltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soMTApXQk7IHhtbTQ9dG1wMUwKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMTEpXQk7IHhtbTI9dG1wMUgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTUJOyB3aygwKT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKwltb3ZkcWEJWE1NV09SRCBbd2soNCldLCB4bW03CTsgd2soNCk9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorCW1vdmRxYQlYTU1XT1JEIFt3ayg1KV0sIHhtbTEJOyB3ayg1KT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKwltb3ZkcWEJeG1tNSx4bW0zCisJbW92ZHFhCXhtbTYseG1tMAorCXBhZGRkCXhtbTMseG1tNAkJOyB4bW0zPWRhdGEyTAorCXBhZGRkCXhtbTAseG1tMgkJOyB4bW0wPWRhdGEySAorCXBzdWJkCXhtbTUseG1tNAkJOyB4bW01PWRhdGE1TAorCXBzdWJkCXhtbTYseG1tMgkJOyB4bW02PWRhdGE1SAorCisJbW92ZHFhCXhtbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCTsgeG1tNz1bUERfREVTQ0FMRV9QMV0KKworCXBhZGRkCXhtbTMseG1tNworCXBhZGRkCXhtbTAseG1tNworCXBzcmFkCXhtbTMsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTAsREVTQ0FMRV9QMQorCXBhZGRkCXhtbTUseG1tNworCXBhZGRkCXhtbTYseG1tNworCXBzcmFkCXhtbTUsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTYsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIHhtbTMseG1tMAkJOyB4bW0zPWRhdGEyPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKwlwYWNrc3NkdyAgeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTU9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQorCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTE9dG1wMTNMCisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTQ9dG1wMTNICisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDgpXQk7IHhtbTI9dG1wMEwKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soOSldCTsgeG1tNz10bXAwSAorCisJbW92ZHFhCXhtbTAseG1tMQorCW1vdmRxYQl4bW02LHhtbTQKKwlwYWRkZAl4bW0xLHhtbTIJCTsgeG1tMT1kYXRhM0wKKwlwYWRkZAl4bW00LHhtbTcJCTsgeG1tND1kYXRhM0gKKwlwc3ViZAl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhNEwKKwlwc3ViZAl4bW02LHhtbTcJCTsgeG1tNj1kYXRhNEgKKworCW1vdmRxYQl4bW0yLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQk7IHhtbTI9W1BEX0RFU0NBTEVfUDFdCisKKwlwYWRkZAl4bW0xLHhtbTIKKwlwYWRkZAl4bW00LHhtbTIKKwlwc3JhZAl4bW0xLERFU0NBTEVfUDEKKwlwc3JhZAl4bW00LERFU0NBTEVfUDEKKwlwYWRkZAl4bW0wLHhtbTIKKwlwYWRkZAl4bW02LHhtbTIKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDEKKwlwc3JhZAl4bW02LERFU0NBTEVfUDEKKworCXBhY2tzc2R3ICB4bW0xLHhtbTQJCTsgeG1tMT1kYXRhMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisJcGFja3NzZHcgIHhtbTAseG1tNgkJOyB4bW0wPWRhdGE0PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKKworCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMSldCTsgeG1tMj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisKKwltb3ZkcWEgICAgeG1tNCx4bW0zCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMyx4bW0xCQk7IHhtbTM9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorCXB1bnBja2h3ZCB4bW00LHhtbTEJCTsgeG1tND0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisJbW92ZHFhICAgIHhtbTYseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTAseG1tNQkJOyB4bW0wPSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKwlwdW5wY2tod2QgeG1tNix4bW01CQk7IHhtbTY9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQorCisJbW92ZHFhICAgIHhtbTEseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTcseG1tMwkJOyB4bW03PSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKwlwdW5wY2toZHEgeG1tMSx4bW0zCQk7IHhtbTE9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorCW1vdmRxYSAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0yLHhtbTQJCTsgeG1tMj0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisJcHVucGNraGRxIHhtbTUseG1tNAkJOyB4bW01PSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFt3ayg0KV0JOyB4bW0zPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKwltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soNSldCTsgeG1tND0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soNildLCB4bW0yCTsgd2soNik9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCW1vdmRxYQlYTU1XT1JEIFt3ayg3KV0sIHhtbTUJOyB3ayg3KT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwltb3ZkcWEgICAgeG1tMix4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMCx4bW0zCQk7IHhtbTA9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorCXB1bnBja2hkcSB4bW0yLHhtbTMJCTsgeG1tMj0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhICAgIHhtbTUseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTYseG1tNAkJOyB4bW02PSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKwlwdW5wY2toZHEgeG1tNSx4bW00CQk7IHhtbTU9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhICAgICB4bW0zLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tNyx4bW0wCQk7IHhtbTc9Y29sMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisJcHVucGNraHFkcSB4bW0zLHhtbTAJCTsgeG1tMz1jb2wxPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKwltb3ZkcWEgICAgIHhtbTQseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0xLHhtbTIJCTsgeG1tMT1jb2wyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKwlwdW5wY2tocWRxIHhtbTQseG1tMgkJOyB4bW00PWNvbDM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDYpXQk7IHhtbTA9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3ayg3KV0JOyB4bW0yPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworCW1vdmRxYQlYTU1XT1JEIFt3ayg4KV0sIHhtbTMJOyB3ayg4KT1jb2wxCisJbW92ZHFhCVhNTVdPUkQgW3drKDkpXSwgeG1tNAk7IHdrKDkpPWNvbDMKKworCW1vdmRxYSAgICAgeG1tMyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTAseG1tNgkJOyB4bW0wPWNvbDQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorCXB1bnBja2hxZHEgeG1tMyx4bW02CQk7IHhtbTM9Y29sNT0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisJbW92ZHFhICAgICB4bW00LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMix4bW01CQk7IHhtbTI9Y29sNj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJcHVucGNraHFkcSB4bW00LHhtbTUJCTsgeG1tND1jb2w3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworCW1vdmRxYQlYTU1XT1JEIFt3aygxMCldLCB4bW0zCTsgd2soMTApPWNvbDUKKwltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tNAk7IHdrKDExKT1jb2w3CisuY29sdW1uX2VuZDoKKworCTsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKKworCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAwKjMyXQorCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQorCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQorCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0JOyAoSlNBTVBST1cgKikKKwltb3YJZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCisKKwk7IC0tIEV2ZW4gcGFydAorCisJOyB4bW03PWNvbDAsIHhtbTE9Y29sMiwgeG1tMD1jb2w0LCB4bW0yPWNvbDYKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsKKwk7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OworCTsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisJOyB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOworCisJbW92ZHFhICAgIHhtbTYseG1tMQkJOyB4bW0xPWluMj16MgorCW1vdmRxYSAgICB4bW01LHhtbTEKKwlwdW5wY2tsd2QgeG1tNix4bW0yCQk7IHhtbTI9aW42PXozCisJcHVucGNraHdkIHhtbTUseG1tMgorCW1vdmRxYSAgICB4bW0xLHhtbTYKKwltb3ZkcWEgICAgeG1tMix4bW01CisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyB4bW02PXRtcDNMCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyB4bW01PXRtcDNICisJcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgeG1tMT10bXAyTAorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IHhtbTI9dG1wMkgKKworCW1vdmRxYSAgICB4bW0zLHhtbTcKKwlwYWRkdyAgICAgeG1tNyx4bW0wCQk7IHhtbTc9aW4wK2luNAorCXBzdWJ3ICAgICB4bW0zLHhtbTAJCTsgeG1tMz1pbjAtaW40CisKKwlweG9yICAgICAgeG1tNCx4bW00CisJcHhvciAgICAgIHhtbTAseG1tMAorCXB1bnBja2x3ZCB4bW00LHhtbTcJCTsgeG1tND10bXAwTAorCXB1bnBja2h3ZCB4bW0wLHhtbTcJCTsgeG1tMD10bXAwSAorCXBzcmFkICAgICB4bW00LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMKKwlwc3JhZCAgICAgeG1tMCwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW0wLDE2ICYgcHNsbGQgeG1tMCxDT05TVF9CSVRTCisKKwltb3ZkcWEJeG1tNyx4bW00CisJcGFkZGQJeG1tNCx4bW02CQk7IHhtbTQ9dG1wMTBMCisJcHN1YmQJeG1tNyx4bW02CQk7IHhtbTc9dG1wMTNMCisJbW92ZHFhCXhtbTYseG1tMAorCXBhZGRkCXhtbTAseG1tNQkJOyB4bW0wPXRtcDEwSAorCXBzdWJkCXhtbTYseG1tNQkJOyB4bW02PXRtcDEzSAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPXRtcDEwTAorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT10bXAxMEgKKwltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW03CTsgd2soMik9dG1wMTNMCisJbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tNgk7IHdrKDMpPXRtcDEzSAorCisJcHhvciAgICAgIHhtbTUseG1tNQorCXB4b3IgICAgICB4bW00LHhtbTQKKwlwdW5wY2tsd2QgeG1tNSx4bW0zCQk7IHhtbTU9dG1wMUwKKwlwdW5wY2tod2QgeG1tNCx4bW0zCQk7IHhtbTQ9dG1wMUgKKwlwc3JhZCAgICAgeG1tNSwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW01LDE2ICYgcHNsbGQgeG1tNSxDT05TVF9CSVRTCisJcHNyYWQgICAgIHhtbTQsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tNCwxNiAmIHBzbGxkIHhtbTQsQ09OU1RfQklUUworCisJbW92ZHFhCXhtbTAseG1tNQorCXBhZGRkCXhtbTUseG1tMQkJOyB4bW01PXRtcDExTAorCXBzdWJkCXhtbTAseG1tMQkJOyB4bW0wPXRtcDEyTAorCW1vdmRxYQl4bW03LHhtbTQKKwlwYWRkZAl4bW00LHhtbTIJCTsgeG1tND10bXAxMUgKKwlwc3ViZAl4bW03LHhtbTIJCTsgeG1tNz10bXAxMkgKKworCW1vdmRxYQlYTU1XT1JEIFt3ayg0KV0sIHhtbTUJOyB3ayg0KT10bXAxMUwKKwltb3ZkcWEJWE1NV09SRCBbd2soNSldLCB4bW00CTsgd2soNSk9dG1wMTFICisJbW92ZHFhCVhNTVdPUkQgW3drKDYpXSwgeG1tMAk7IHdrKDYpPXRtcDEyTAorCW1vdmRxYQlYTU1XT1JEIFt3ayg3KV0sIHhtbTcJOyB3ayg3KT10bXAxMkgKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3ayg5KV0JOyB4bW02PWNvbDMKKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soOCldCTsgeG1tMz1jb2wxCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDExKV0JOyB4bW0xPWNvbDcKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMTApXQk7IHhtbTI9Y29sNQorCisJbW92ZHFhCXhtbTUseG1tNgorCW1vdmRxYQl4bW00LHhtbTMKKwlwYWRkdwl4bW01LHhtbTEJCTsgeG1tNT16MworCXBhZGR3CXhtbTQseG1tMgkJOyB4bW00PXo0CisKKwk7IChPcmlnaW5hbCkKKwk7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisJOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKwk7IHozICs9IHo1OyAgejQgKz0gejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKwk7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisJbW92ZHFhICAgIHhtbTAseG1tNQorCW1vdmRxYSAgICB4bW03LHhtbTUKKwlwdW5wY2tsd2QgeG1tMCx4bW00CisJcHVucGNraHdkIHhtbTcseG1tNAorCW1vdmRxYSAgICB4bW01LHhtbTAKKwltb3ZkcWEgICAgeG1tNCx4bW03CisJcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldCTsgeG1tMD16M0wKKwlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyB4bW03PXozSAorCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgeG1tNT16NEwKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IHhtbTQ9ejRICisKKwltb3ZkcWEJWE1NV09SRCBbd2soMTApXSwgeG1tMAk7IHdrKDEwKT16M0wKKwltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tNwk7IHdrKDExKT16M0gKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSB0bXAwICsgdG1wMzsgIHoyID0gdG1wMSArIHRtcDI7CisJOyB0bXAwID0gdG1wMCAqIDAuMjk4NjMxMzM2OyAgdG1wMSA9IHRtcDEgKiAyLjA1MzExOTg2OTsKKwk7IHRtcDIgPSB0bXAyICogMy4wNzI3MTEwMjY7ICB0bXAzID0gdG1wMyAqIDEuNTAxMzIxMTEwOworCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisJOyB0bXAwICs9IHoxICsgejM7ICB0bXAxICs9IHoyICsgejQ7CisJOyB0bXAyICs9IHoyICsgejM7ICB0bXAzICs9IHoxICsgejQ7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB0bXAwID0gdG1wMCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDMgKiAtMC44OTk5NzYyMjM7CisJOyB0bXAxID0gdG1wMSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDIgKiAtMi41NjI5MTU0NDc7CisJOyB0bXAyID0gdG1wMSAqIC0yLjU2MjkxNTQ0NyArIHRtcDIgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisJOyB0bXAzID0gdG1wMCAqIC0wLjg5OTk3NjIyMyArIHRtcDMgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7CisJOyB0bXAwICs9IHozOyAgdG1wMSArPSB6NDsKKwk7IHRtcDIgKz0gejM7ICB0bXAzICs9IHo0OworCisJbW92ZHFhICAgIHhtbTAseG1tMQorCW1vdmRxYSAgICB4bW03LHhtbTEKKwlwdW5wY2tsd2QgeG1tMCx4bW0zCisJcHVucGNraHdkIHhtbTcseG1tMworCW1vdmRxYSAgICB4bW0xLHhtbTAKKwltb3ZkcWEgICAgeG1tMyx4bW03CisJcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTA9dG1wMEwKKwlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgeG1tNz10bXAwSAorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IHhtbTE9dG1wM0wKKwlwbWFkZHdkICAgeG1tMyxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW0zPXRtcDNICisKKwlwYWRkZAl4bW0wLCBYTU1XT1JEIFt3aygxMCldCTsgeG1tMD10bXAwTAorCXBhZGRkCXhtbTcsIFhNTVdPUkQgW3drKDExKV0JOyB4bW03PXRtcDBICisJcGFkZGQJeG1tMSx4bW01CQk7IHhtbTE9dG1wM0wKKwlwYWRkZAl4bW0zLHhtbTQJCTsgeG1tMz10bXAzSAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDgpXSwgeG1tMAk7IHdrKDgpPXRtcDBMCisJbW92ZHFhCVhNTVdPUkQgW3drKDkpXSwgeG1tNwk7IHdrKDkpPXRtcDBICisKKwltb3ZkcWEgICAgeG1tMCx4bW0yCisJbW92ZHFhICAgIHhtbTcseG1tMgorCXB1bnBja2x3ZCB4bW0wLHhtbTYKKwlwdW5wY2tod2QgeG1tNyx4bW02CisJbW92ZHFhICAgIHhtbTIseG1tMAorCW1vdmRxYSAgICB4bW02LHhtbTcKKwlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgeG1tMD10bXAxTAorCXBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyB4bW03PXRtcDFICisJcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgeG1tMj10bXAyTAorCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IHhtbTY9dG1wMkgKKworCXBhZGRkCXhtbTAseG1tNQkJOyB4bW0wPXRtcDFMCisJcGFkZGQJeG1tNyx4bW00CQk7IHhtbTc9dG1wMUgKKwlwYWRkZAl4bW0yLCBYTU1XT1JEIFt3aygxMCldCTsgeG1tMj10bXAyTAorCXBhZGRkCXhtbTYsIFhNTVdPUkQgW3drKDExKV0JOyB4bW02PXRtcDJICisKKwltb3ZkcWEJWE1NV09SRCBbd2soMTApXSwgeG1tMAk7IHdrKDEwKT10bXAxTAorCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW03CTsgd2soMTEpPXRtcDFICisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDApXQk7IHhtbTU9dG1wMTBMCisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTQ9dG1wMTBICisKKwltb3ZkcWEJeG1tMCx4bW01CisJbW92ZHFhCXhtbTcseG1tNAorCXBhZGRkCXhtbTUseG1tMQkJOyB4bW01PWRhdGEwTAorCXBhZGRkCXhtbTQseG1tMwkJOyB4bW00PWRhdGEwSAorCXBzdWJkCXhtbTAseG1tMQkJOyB4bW0wPWRhdGE3TAorCXBzdWJkCXhtbTcseG1tMwkJOyB4bW03PWRhdGE3SAorCisJbW92ZHFhCXhtbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCTsgeG1tMT1bUERfREVTQ0FMRV9QMl0KKworCXBhZGRkCXhtbTUseG1tMQorCXBhZGRkCXhtbTQseG1tMQorCXBzcmFkCXhtbTUsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTQsREVTQ0FMRV9QMgorCXBhZGRkCXhtbTAseG1tMQorCXBhZGRkCXhtbTcseG1tMQorCXBzcmFkCXhtbTAsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTcsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIHhtbTUseG1tNAkJOyB4bW01PWRhdGEwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKwlwYWNrc3NkdyAgeG1tMCx4bW03CQk7IHhtbTA9ZGF0YTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTM9dG1wMTFMCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDUpXQk7IHhtbTE9dG1wMTFICisKKwltb3ZkcWEJeG1tNCx4bW0zCisJbW92ZHFhCXhtbTcseG1tMQorCXBhZGRkCXhtbTMseG1tMgkJOyB4bW0zPWRhdGExTAorCXBhZGRkCXhtbTEseG1tNgkJOyB4bW0xPWRhdGExSAorCXBzdWJkCXhtbTQseG1tMgkJOyB4bW00PWRhdGE2TAorCXBzdWJkCXhtbTcseG1tNgkJOyB4bW03PWRhdGE2SAorCisJbW92ZHFhCXhtbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCTsgeG1tMj1bUERfREVTQ0FMRV9QMl0KKworCXBhZGRkCXhtbTMseG1tMgorCXBhZGRkCXhtbTEseG1tMgorCXBzcmFkCXhtbTMsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTEsREVTQ0FMRV9QMgorCXBhZGRkCXhtbTQseG1tMgorCXBhZGRkCXhtbTcseG1tMgorCXBzcmFkCXhtbTQsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTcsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIHhtbTMseG1tMQkJOyB4bW0zPWRhdGExPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKwlwYWNrc3NkdyAgeG1tNCx4bW03CQk7IHhtbTQ9ZGF0YTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCisJcGFja3Nzd2IgIHhtbTUseG1tNAkJOyB4bW01PSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKwlwYWNrc3N3YiAgeG1tMyx4bW0wCQk7IHhtbTM9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDYpXQk7IHhtbTY9dG1wMTJMCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDcpXQk7IHhtbTI9dG1wMTJICisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW0xPXRtcDFMCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDExKV0JOyB4bW03PXRtcDFICisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW01CTsgd2soMCk9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMJOyB3aygxKT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisKKwltb3ZkcWEJeG1tNCx4bW02CisJbW92ZHFhCXhtbTAseG1tMgorCXBhZGRkCXhtbTYseG1tMQkJOyB4bW02PWRhdGEyTAorCXBhZGRkCXhtbTIseG1tNwkJOyB4bW0yPWRhdGEySAorCXBzdWJkCXhtbTQseG1tMQkJOyB4bW00PWRhdGE1TAorCXBzdWJkCXhtbTAseG1tNwkJOyB4bW0wPWRhdGE1SAorCisJbW92ZHFhCXhtbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCTsgeG1tNT1bUERfREVTQ0FMRV9QMl0KKworCXBhZGRkCXhtbTYseG1tNQorCXBhZGRkCXhtbTIseG1tNQorCXBzcmFkCXhtbTYsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTIsREVTQ0FMRV9QMgorCXBhZGRkCXhtbTQseG1tNQorCXBhZGRkCXhtbTAseG1tNQorCXBzcmFkCXhtbTQsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTAsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIHhtbTYseG1tMgkJOyB4bW02PWRhdGEyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKwlwYWNrc3NkdyAgeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTM9dG1wMTNMCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTE9dG1wMTNICisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDgpXQk7IHhtbTc9dG1wMEwKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soOSldCTsgeG1tNT10bXAwSAorCisJbW92ZHFhCXhtbTIseG1tMworCW1vdmRxYQl4bW0wLHhtbTEKKwlwYWRkZAl4bW0zLHhtbTcJCTsgeG1tMz1kYXRhM0wKKwlwYWRkZAl4bW0xLHhtbTUJCTsgeG1tMT1kYXRhM0gKKwlwc3ViZAl4bW0yLHhtbTcJCTsgeG1tMj1kYXRhNEwKKwlwc3ViZAl4bW0wLHhtbTUJCTsgeG1tMD1kYXRhNEgKKworCW1vdmRxYQl4bW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQk7IHhtbTc9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAl4bW0zLHhtbTcKKwlwYWRkZAl4bW0xLHhtbTcKKwlwc3JhZAl4bW0zLERFU0NBTEVfUDIKKwlwc3JhZAl4bW0xLERFU0NBTEVfUDIKKwlwYWRkZAl4bW0yLHhtbTcKKwlwYWRkZAl4bW0wLHhtbTcKKwlwc3JhZAl4bW0yLERFU0NBTEVfUDIKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDIKKworCW1vdmRxYSAgICB4bW01LFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0JOyB4bW01PVtQQl9DRU5URVJKU0FNUF0KKworCXBhY2tzc2R3ICB4bW0zLHhtbTEJCTsgeG1tMz1kYXRhMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisJcGFja3NzZHcgIHhtbTIseG1tMAkJOyB4bW0yPWRhdGE0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKworCW1vdmRxYSAgICB4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKwltb3ZkcWEgICAgeG1tMSwgWE1NV09SRCBbd2soMSldCTsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisKKwlwYWNrc3N3YiAgeG1tNix4bW0yCQk7IHhtbTY9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyIDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorCXBhY2tzc3diICB4bW0zLHhtbTQJCTsgeG1tMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMgMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisKKwlwYWRkYiAgICAgeG1tNyx4bW01CisJcGFkZGIgICAgIHhtbTEseG1tNQorCXBhZGRiICAgICB4bW02LHhtbTUKKwlwYWRkYiAgICAgeG1tMyx4bW01CisKKwltb3ZkcWEgICAgeG1tMCx4bW03CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2xidyB4bW03LHhtbTEJOyB4bW03PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSA0MCA0MSA1MCA1MSA2MCA2MSA3MCA3MSkKKwlwdW5wY2toYncgeG1tMCx4bW0xCTsgeG1tMD0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcgNDYgNDcgNTYgNTcgNjYgNjcgNzYgNzcpCisJbW92ZHFhICAgIHhtbTIseG1tNgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsYncgeG1tNix4bW0zCTsgeG1tNj0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMgNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisJcHVucGNraGJ3IHhtbTIseG1tMwk7IHhtbTI9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1IDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQorCisJbW92ZHFhICAgIHhtbTQseG1tNwk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgeG1tNyx4bW02CTsgeG1tNz0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisJcHVucGNraHdkIHhtbTQseG1tNgk7IHhtbTQ9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzIDYwIDYxIDYyIDYzIDcwIDcxIDcyIDczKQorCW1vdmRxYSAgICB4bW01LHhtbTIJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbHdkIHhtbTIseG1tMAk7IHhtbTI9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3IDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorCXB1bnBja2h3ZCB4bW01LHhtbTAJOyB4bW01PSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NyA2NCA2NSA2NiA2NyA3NCA3NSA3NiA3NykKKworCW1vdmRxYSAgICB4bW0xLHhtbTcJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbGRxIHhtbTcseG1tMgk7IHhtbTc9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorCXB1bnBja2hkcSB4bW0xLHhtbTIJOyB4bW0xPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKwltb3ZkcWEgICAgeG1tMyx4bW00CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xkcSB4bW00LHhtbTUJOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKwlwdW5wY2toZHEgeG1tMyx4bW01CTsgeG1tMz0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcgNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpCisKKwlwc2h1ZmQJeG1tNix4bW03LDB4NEUJOyB4bW02PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwc2h1ZmQJeG1tMCx4bW0xLDB4NEUJOyB4bW0wPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKwlwc2h1ZmQJeG1tMix4bW00LDB4NEUJOyB4bW0yPSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKKwlwc2h1ZmQJeG1tNSx4bW0zLDB4NEUJOyB4bW01PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NyA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSsyKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW03CisJbW92cQlfTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrNCpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSs2KlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW00CisJbW92cQlfTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMworCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorCW1vdnEJX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTYKKwltb3ZxCV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0wCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSs1KlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzcqU0laRU9GX0pTQU1QUk9XXQorCW1vdnEJX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTIKKwltb3ZxCV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IHVudXNlZAorCXBvcHBpYwllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IEpJRENUX0lOVF9TU0UyX1NVUFBPUlRFRAorJWVuZGlmIDsgRENUX0lTTE9XX1NVUFBPUlRFRApkaWZmIC0tZ2l0IGEvamlzczJyZWQuYXNtIGIvamlzczJyZWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYWY2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qaXNzMnJlZC5hc20KQEAgLTAsMCArMSw2MDcgQEAKKzsKKzsgamlzczJyZWQuYXNtIC0gcmVkdWNlZC1zaXplIElEQ1QgKFNTRTIpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGludmVyc2UtRENUIHJvdXRpbmVzIHRoYXQgcHJvZHVjZSByZWR1Y2VkLXNpemUKKzsgb3V0cHV0OiBlaXRoZXIgNHg0IG9yIDJ4MiBwaXhlbHMgZnJvbSBhbiA4eDggRENUIGJsb2NrLgorOyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0cmVkLmM7Cis7IHNlZSB0aGUgamlkY3RyZWQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBMYXN0IE1vZGlmaWVkIDogRmVicnVhcnkgNCwgMjAwNgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworJWlmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKyVpZmRlZiBKSURDVF9JTlRfU1NFMl9TVVBQT1JURUQKKworOyBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKzsKKyVpZiBEQ1RTSVpFICE9IDgKKyVlcnJvciAiU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIgorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTEzCislZGVmaW5lIFBBU1MxX0JJVFMJMgorCislZGVmaW5lIERFU0NBTEVfUDFfNAkoQ09OU1RfQklUUy1QQVNTMV9CSVRTKzEpCislZGVmaW5lIERFU0NBTEVfUDJfNAkoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKyVkZWZpbmUgREVTQ0FMRV9QMV8yCShDT05TVF9CSVRTLVBBU1MxX0JJVFMrMikKKyVkZWZpbmUgREVTQ0FMRV9QMl8yCShDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysyKQorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzIxMQllcXUJIDE3MzAJCTsgRklYKDAuMjExMTY0MjQzKQorRl8wXzUwOQllcXUJIDQxNzYJCTsgRklYKDAuNTA5Nzk1NTc5KQorRl8wXzYwMQllcXUJIDQ5MjYJCTsgRklYKDAuNjAxMzQ0ODg3KQorRl8wXzcyMAllcXUJIDU5MDYJCTsgRklYKDAuNzIwOTU5ODIyKQorRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg1MAllcXUJIDY5NjcJCTsgRklYKDAuODUwNDMwMDk1KQorRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzA2MQllcXUJIDg2OTcJCTsgRklYKDEuMDYxNTk0MzM3KQorRl8xXzI3MgllcXUJMTA0MjYJCTsgRklYKDEuMjcyNzU4NTgwKQorRl8xXzQ1MQllcXUJMTE4OTMJCTsgRklYKDEuNDUxNzc0OTgxKQorRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzE3MgllcXUJMTc3OTkJCTsgRklYKDIuMTcyNzM0ODAzKQorRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzYyNAllcXUJMjk2OTIJCTsgRklYKDMuNjI0NTA5Nzg1KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMF8yMTEJZXF1CURFU0NBTEUoIDIyNjczNTg3OSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjIxMTE2NDI0MykKK0ZfMF81MDkJZXF1CURFU0NBTEUoIDU0NzM4ODgzNCwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjUwOTc5NTU3OSkKK0ZfMF82MDEJZXF1CURFU0NBTEUoIDY0NTY4OTE1NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjYwMTM0NDg4NykKK0ZfMF83MjAJZXF1CURFU0NBTEUoIDc3NDEyNDcxNCwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjcyMDk1OTgyMikKK0ZfMF83NjUJZXF1CURFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84NTAJZXF1CURFU0NBTEUoIDkxMzE0MjM2MSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg1MDQzMDA5NSkKK0ZfMF84OTkJZXF1CURFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8wNjEJZXF1CURFU0NBTEUoMTEzOTg3ODIzOSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjA2MTU5NDMzNykKK0ZfMV8yNzIJZXF1CURFU0NBTEUoMTM2NjYxNDExOSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjI3Mjc1ODU4MCkKK0ZfMV80NTEJZXF1CURFU0NBTEUoMTU1ODgzMTUxNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjQ1MTc3NDk4MSkKK0ZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl8xNzIJZXF1CURFU0NBTEUoMjMzMjk1NjIzMCwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjE3MjczNDgwMykKK0ZfMl81NjIJZXF1CURFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM182MjQJZXF1CURFU0NBTEUoMzg5MTc4Nzc0NywzMC1DT05TVF9CSVRTKQk7IEZJWCgzLjYyNDUwOTc4NSkKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9pZGN0X3JlZF9zc2UyKQorCitFWFROKGpjb25zdF9pZGN0X3JlZF9zc2UyKToKKworUFdfRjE4NF9NRjA3Ngl0aW1lcyA0IGR3ICBGXzFfODQ3LC1GXzBfNzY1CitQV19GMjU2X0YwODkJdGltZXMgNCBkdyAgRl8yXzU2MiwgRl8wXzg5OQorUFdfRjEwNl9NRjIxNwl0aW1lcyA0IGR3ICBGXzFfMDYxLC1GXzJfMTcyCitQV19NRjA2MF9NRjA1MAl0aW1lcyA0IGR3IC1GXzBfNjAxLC1GXzBfNTA5CitQV19GMTQ1X01GMDIxCXRpbWVzIDQgZHcgIEZfMV80NTEsLUZfMF8yMTEKK1BXX0YzNjJfTUYxMjcJdGltZXMgNCBkdyAgRl8zXzYyNCwtRl8xXzI3MgorUFdfRjA4NV9NRjA3Mgl0aW1lcyA0IGR3ICBGXzBfODUwLC1GXzBfNzIwCitQRF9ERVNDQUxFX1AxXzQJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMV80LTEpCitQRF9ERVNDQUxFX1AyXzQJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMl80LTEpCitQRF9ERVNDQUxFX1AxXzIJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMV8yLTEpCitQRF9ERVNDQUxFX1AyXzIJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMl8yLTEpCitQQl9DRU5URVJKU0FNUAl0aW1lcyAxNiBkYiBDRU5URVJKU0FNUExFCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCis7IHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSA0eDQgb3V0cHV0IGJsb2NrLgorOworOyBHTE9CQUwodm9pZCkKKzsganBlZ19pZGN0XzR4NF9zc2UyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGNpbmZvKGIpCShiKSs4CQk7IGpfZGVjb21wcmVzc19wdHIgY2luZm8KKyVkZWZpbmUgY29tcHB0cihiKQkoYikrMTIJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTYJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjQJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2lkY3RfNHg0X3NzZTIpCisKK0VYVE4oanBlZ19pZGN0XzR4NF9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYngKKzsJcHVzaAllY3gJCTsgdW51c2VkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKzsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwltb3YJZWR4LCBQT0lOVEVSIFtjb21wcHRyKGVheCldCisJbW92CWVkeCwgUE9JTlRFUiBbamNvbXBpbmZvX2RjdF90YWJsZShlZHgpXQk7IHF1YW50cHRyCisJbW92CWVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0JCTsgaW5wdHIKKworJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUXzRYNF9TU0UyCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMCx4bW0xCisJcGFja3Nzd2IgeG1tMCx4bW0wCisJcGFja3Nzd2IgeG1tMCx4bW0wCisJbW92ZAllYXgseG1tMAorCXRlc3QJZWF4LGVheAorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJcHNsbHcJeG1tMCxQQVNTMV9CSVRTCisKKwltb3ZkcWEgICAgeG1tMyx4bW0wCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorCXB1bnBja2x3ZCB4bW0wLHhtbTAJOyB4bW0wPSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKKwlwdW5wY2tod2QgeG1tMyx4bW0zCTsgeG1tMz0oMDQgMDQgMDUgMDUgMDYgMDYgMDcgMDcpCisKKwlwc2h1ZmQJeG1tMSx4bW0wLDB4NTAJOyB4bW0xPVtjb2wwIGNvbDFdPSgwMCAwMCAwMCAwMCAwMSAwMSAwMSAwMSkKKwlwc2h1ZmQJeG1tMCx4bW0wLDB4RkEJOyB4bW0wPVtjb2wyIGNvbDNdPSgwMiAwMiAwMiAwMiAwMyAwMyAwMyAwMykKKwlwc2h1ZmQJeG1tNix4bW0zLDB4NTAJOyB4bW02PVtjb2w0IGNvbDVdPSgwNCAwNCAwNCAwNCAwNSAwNSAwNSAwNSkKKwlwc2h1ZmQJeG1tMyx4bW0zLDB4RkEJOyB4bW0zPVtjb2w2IGNvbDddPSgwNiAwNiAwNiAwNiAwNyAwNyAwNyAwNykKKworCWptcAluZWFyIC5jb2x1bW5fZW5kCisJYWxpZ254CTE2LDcKKyVlbmRpZgorLmNvbHVtbkRDVDoKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwltb3ZkcWEgICAgeG1tNCx4bW0wCisJbW92ZHFhICAgIHhtbTUseG1tMAorCXB1bnBja2x3ZCB4bW00LHhtbTEKKwlwdW5wY2tod2QgeG1tNSx4bW0xCisJbW92ZHFhICAgIHhtbTAseG1tNAorCW1vdmRxYSAgICB4bW0xLHhtbTUKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXQk7IHhtbTQ9KHRtcDJMKQorCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgeG1tNT0odG1wMkgpCisJcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldCTsgeG1tMD0odG1wMEwpCisJcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldCTsgeG1tMT0odG1wMEgpCisKKwltb3ZkcWEgICAgeG1tNix4bW0yCisJbW92ZHFhICAgIHhtbTcseG1tMgorCXB1bnBja2x3ZCB4bW02LHhtbTMKKwlwdW5wY2tod2QgeG1tNyx4bW0zCisJbW92ZHFhICAgIHhtbTIseG1tNgorCW1vdmRxYSAgICB4bW0zLHhtbTcKKwlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldCTsgeG1tNj0odG1wMkwpCisJcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwNTApXQk7IHhtbTc9KHRtcDJIKQorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IHhtbTI9KHRtcDBMKQorCXBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IHhtbTM9KHRtcDBIKQorCisJcGFkZGQJeG1tNix4bW00CQk7IHhtbTY9dG1wMkwKKwlwYWRkZAl4bW03LHhtbTUJCTsgeG1tNz10bXAySAorCXBhZGRkCXhtbTIseG1tMAkJOyB4bW0yPXRtcDBMCisJcGFkZGQJeG1tMyx4bW0xCQk7IHhtbTM9dG1wMEgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT10bXAwTAorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMJOyB3aygxKT10bXAwSAorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmRxYQl4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJcHhvciAgICAgIHhtbTEseG1tMQorCXB4b3IgICAgICB4bW0yLHhtbTIKKwlwdW5wY2tsd2QgeG1tMSx4bW00CQk7IHhtbTE9dG1wMEwKKwlwdW5wY2tod2QgeG1tMix4bW00CQk7IHhtbTI9dG1wMEgKKwlwc3JhZCAgICAgeG1tMSwoMTYtQ09OU1RfQklUUy0xKSA7IHBzcmFkIHhtbTEsMTYgJiBwc2xsZCB4bW0xLENPTlNUX0JJVFMrMQorCXBzcmFkICAgICB4bW0yLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgeG1tMiwxNiAmIHBzbGxkIHhtbTIsQ09OU1RfQklUUysxCisKKwltb3ZkcWEgICAgeG1tMyx4bW01CQk7IHhtbTU9aW4yPXoyCisJcHVucGNrbHdkIHhtbTUseG1tMAkJOyB4bW0wPWluNj16MworCXB1bnBja2h3ZCB4bW0zLHhtbTAKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyB4bW01PXRtcDJMCisJcG1hZGR3ZCAgIHhtbTMsW0dPVE9GRihlYngsUFdfRjE4NF9NRjA3NildCTsgeG1tMz10bXAySAorCisJbW92ZHFhCXhtbTQseG1tMQorCW1vdmRxYQl4bW0wLHhtbTIKKwlwYWRkZAl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMEwKKwlwYWRkZAl4bW0yLHhtbTMJCTsgeG1tMj10bXAxMEgKKwlwc3ViZAl4bW00LHhtbTUJCTsgeG1tND10bXAxMkwKKwlwc3ViZAl4bW0wLHhtbTMJCTsgeG1tMD10bXAxMkgKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3ZkcWEJeG1tNSx4bW0xCisJbW92ZHFhCXhtbTMseG1tMgorCXBhZGRkCXhtbTEseG1tNgkJOyB4bW0xPWRhdGEwTAorCXBhZGRkCXhtbTIseG1tNwkJOyB4bW0yPWRhdGEwSAorCXBzdWJkCXhtbTUseG1tNgkJOyB4bW01PWRhdGEzTAorCXBzdWJkCXhtbTMseG1tNwkJOyB4bW0zPWRhdGEzSAorCisJbW92ZHFhCXhtbTYsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV80KV0JOyB4bW02PVtQRF9ERVNDQUxFX1AxXzRdCisKKwlwYWRkZAl4bW0xLHhtbTYKKwlwYWRkZAl4bW0yLHhtbTYKKwlwc3JhZAl4bW0xLERFU0NBTEVfUDFfNAorCXBzcmFkCXhtbTIsREVTQ0FMRV9QMV80CisJcGFkZGQJeG1tNSx4bW02CisJcGFkZGQJeG1tMyx4bW02CisJcHNyYWQJeG1tNSxERVNDQUxFX1AxXzQKKwlwc3JhZAl4bW0zLERFU0NBTEVfUDFfNAorCisJcGFja3NzZHcgIHhtbTEseG1tMgkJOyB4bW0xPWRhdGEwPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwYWNrc3NkdyAgeG1tNSx4bW0zCQk7IHhtbTU9ZGF0YTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9dG1wMEwKKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soMSldCTsgeG1tNj10bXAwSAorCisJbW92ZHFhCXhtbTIseG1tNAorCW1vdmRxYQl4bW0zLHhtbTAKKwlwYWRkZAl4bW00LHhtbTcJCTsgeG1tND1kYXRhMUwKKwlwYWRkZAl4bW0wLHhtbTYJCTsgeG1tMD1kYXRhMUgKKwlwc3ViZAl4bW0yLHhtbTcJCTsgeG1tMj1kYXRhMkwKKwlwc3ViZAl4bW0zLHhtbTYJCTsgeG1tMz1kYXRhMkgKKworCW1vdmRxYQl4bW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDFfNCldCTsgeG1tNz1bUERfREVTQ0FMRV9QMV80XQorCisJcGFkZGQJeG1tNCx4bW03CisJcGFkZGQJeG1tMCx4bW03CisJcHNyYWQJeG1tNCxERVNDQUxFX1AxXzQKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDFfNAorCXBhZGRkCXhtbTIseG1tNworCXBhZGRkCXhtbTMseG1tNworCXBzcmFkCXhtbTIsREVTQ0FMRV9QMV80CisJcHNyYWQJeG1tMyxERVNDQUxFX1AxXzQKKworCXBhY2tzc2R3ICB4bW00LHhtbTAJCTsgeG1tND1kYXRhMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisJcGFja3NzZHcgIHhtbTIseG1tMwkJOyB4bW0yPWRhdGEyPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKworCW1vdmRxYSAgICB4bW02LHhtbTEJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTEseG1tNAk7IHhtbTE9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorCXB1bnBja2h3ZCB4bW02LHhtbTQJOyB4bW02PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKwltb3ZkcWEgICAgeG1tNyx4bW0yCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0yLHhtbTUJOyB4bW0yPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKwlwdW5wY2tod2QgeG1tNyx4bW01CTsgeG1tNz0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKwltb3ZkcWEgICAgeG1tMCx4bW0xCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0xLHhtbTIJOyB4bW0xPVtjb2wwIGNvbDFdPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKwlwdW5wY2toZHEgeG1tMCx4bW0yCTsgeG1tMD1bY29sMiBjb2wzXT0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJbW92ZHFhICAgIHhtbTMseG1tNgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tNix4bW03CTsgeG1tNj1bY29sNCBjb2w1XT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisJcHVucGNraGRxIHhtbTMseG1tNwk7IHhtbTM9W2NvbDYgY29sN109KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorLmNvbHVtbl9lbmQ6CisKKwk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisKKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMSozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cywgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0JOyAoSlNBTVBST1cgKikKKwltb3YJZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCisKKwk7IC0tIEV2ZW4gcGFydAorCisJcHhvciAgICAgIHhtbTQseG1tNAorCXB1bnBja2x3ZCB4bW00LHhtbTEJCTsgeG1tND10bXAwCisJcHNyYWQgICAgIHhtbTQsKDE2LUNPTlNUX0JJVFMtMSkgOyBwc3JhZCB4bW00LDE2ICYgcHNsbGQgeG1tNCxDT05TVF9CSVRTKzEKKworCTsgLS0gT2RkIHBhcnQKKworCXB1bnBja2h3ZCB4bW0xLHhtbTAKKwlwdW5wY2tod2QgeG1tNix4bW0zCisJbW92ZHFhICAgIHhtbTUseG1tMQorCW1vdmRxYSAgICB4bW0yLHhtbTYKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXQk7IHhtbTE9KHRtcDIpCisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwNTApXQk7IHhtbTY9KHRtcDIpCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldCTsgeG1tNT0odG1wMCkKKwlwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVieCxQV19GMTQ1X01GMDIxKV0JOyB4bW0yPSh0bXAwKQorCisJcGFkZGQgICAgIHhtbTYseG1tMQkJOyB4bW02PXRtcDIKKwlwYWRkZCAgICAgeG1tMix4bW01CQk7IHhtbTI9dG1wMAorCisJOyAtLSBFdmVuIHBhcnQKKworCXB1bnBja2x3ZCB4bW0wLHhtbTMKKwlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyB4bW0wPXRtcDIKKworCW1vdmRxYSAgICB4bW03LHhtbTQKKwlwYWRkZCAgICAgeG1tNCx4bW0wCQk7IHhtbTQ9dG1wMTAKKwlwc3ViZCAgICAgeG1tNyx4bW0wCQk7IHhtbTc9dG1wMTIKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3ZkcWEJeG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyXzQpXQk7IHhtbTE9W1BEX0RFU0NBTEVfUDJfNF0KKworCW1vdmRxYQl4bW01LHhtbTQKKwltb3ZkcWEJeG1tMyx4bW03CisJcGFkZGQJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTA9KDAwIDEwIDIwIDMwKQorCXBhZGRkCXhtbTcseG1tMgkJOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKwlwc3ViZAl4bW01LHhtbTYJCTsgeG1tNT1kYXRhMz0oMDMgMTMgMjMgMzMpCisJcHN1YmQJeG1tMyx4bW0yCQk7IHhtbTM9ZGF0YTI9KDAyIDEyIDIyIDMyKQorCisJcGFkZGQJeG1tNCx4bW0xCisJcGFkZGQJeG1tNyx4bW0xCisJcHNyYWQJeG1tNCxERVNDQUxFX1AyXzQKKwlwc3JhZAl4bW03LERFU0NBTEVfUDJfNAorCXBhZGRkCXhtbTUseG1tMQorCXBhZGRkCXhtbTMseG1tMQorCXBzcmFkCXhtbTUsREVTQ0FMRV9QMl80CisJcHNyYWQJeG1tMyxERVNDQUxFX1AyXzQKKworCXBhY2tzc2R3ICB4bW00LHhtbTMJCTsgeG1tND0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIpCisJcGFja3NzZHcgIHhtbTcseG1tNQkJOyB4bW03PSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMykKKworCW1vdmRxYSAgICB4bW0wLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW00LHhtbTcJCTsgeG1tND0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisJcHVucGNraHdkIHhtbTAseG1tNwkJOyB4bW0wPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKworCW1vdmRxYSAgICB4bW02LHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW00LHhtbTAJCTsgeG1tND0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisJcHVucGNraGRxIHhtbTYseG1tMAkJOyB4bW02PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKworCXBhY2tzc3diICB4bW00LHhtbTYJCTsgeG1tND0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgLi4pCisJcGFkZGIgICAgIHhtbTQsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQorCisJcHNodWZkICAgIHhtbTIseG1tNCwweDM5CTsgeG1tMj0oMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgLi4pCisJcHNodWZkICAgIHhtbTEseG1tNCwweDRFCTsgeG1tMT0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMgMDAgLi4pCisJcHNodWZkICAgIHhtbTMseG1tNCwweDkzCTsgeG1tMz0oMzAgMzEgMzIgMzMgMDAgMDEgMDIgMDMgMTAgLi4pCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92ZAlfRFdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW00CisJbW92ZAlfRFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0yCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSsyKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorCW1vdmQJX0RXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorCW1vdmQJX0RXT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMworCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyB1bnVzZWQKKwlwb3BwaWMJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKzsgcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDJ4MiBvdXRwdXQgYmxvY2suCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2lkY3RfMngyX3NzZTIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorOyAgICAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxNgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyNAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19pZGN0XzJ4Ml9zc2UyKQorCitFWFROKGpwZWdfaWRjdF8yeDJfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LgorCisJbW92CWVkeCwgUE9JTlRFUiBbY29tcHB0cihlYnApXQorCW1vdgllZHgsIFBPSU5URVIgW2pjb21waW5mb19kY3RfdGFibGUoZWR4KV0JOyBxdWFudHB0cgorCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVicCldCQk7IGlucHRyCisKKwk7IHwgaW5wdXQ6ICAgICAgICAgICAgICAgICAgfCByZXN1bHQ6ICAgICAgICB8CisJOyB8IDAwIDAxICoqIDAzICoqIDA1ICoqIDA3IHwgICAgICAgICAgICAgICAgfAorCTsgfCAxMCAxMSAqKiAxMyAqKiAxNSAqKiAxNyB8ICAgICAgICAgICAgICAgIHwKKwk7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCAgICAgICAgICAgICAgICB8CisJOyB8IDMwIDMxICoqIDMzICoqIDM1ICoqIDM3IHwgQTAgQTEgQTMgQTUgQTcgfAorCTsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8IEIwIEIxIEIzIEI1IEI3IHwKKwk7IHwgNTAgNTEgKiogNTMgKiogNTUgKiogNTcgfCAgICAgICAgICAgICAgICB8CisJOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgICAgICAgICAgICAgICAgfAorCTsgfCA3MCA3MSAqKiA3MyAqKiA3NSAqKiA3NyB8ICAgICAgICAgICAgICAgIHwKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwk7IHhtbTA9KDEwIDExICoqIDEzICoqIDE1ICoqIDE3KSwgeG1tMT0oMzAgMzEgKiogMzMgKiogMzUgKiogMzcpCisJOyB4bW0yPSg1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NyksIHhtbTM9KDcwIDcxICoqIDczICoqIDc1ICoqIDc3KQorCisJcGNtcGVxZCAgIHhtbTcseG1tNworCXBzbGxkICAgICB4bW03LFdPUkRfQklUCQk7IHhtbTc9ezB4MDAwMCAweEZGRkYgMHgwMDAwIDB4RkZGRiAuLn0KKworCW1vdmRxYSAgICB4bW00LHhtbTAJCTsgeG1tND0oMTAgMTEgKiogMTMgKiogMTUgKiogMTcpCisJbW92ZHFhICAgIHhtbTUseG1tMgkJOyB4bW01PSg1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NykKKwlwdW5wY2tsd2QgeG1tNCx4bW0xCQk7IHhtbTQ9KDEwIDMwIDExIDMxICoqICoqIDEzIDMzKQorCXB1bnBja2x3ZCB4bW01LHhtbTMJCTsgeG1tNT0oNTAgNzAgNTEgNzEgKiogKiogNTMgNzMpCisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKwlwc3JsZAl4bW0wLFdPUkRfQklUCQk7IHhtbTA9KDExIC0tIDEzIC0tIDE1IC0tIDE3IC0tKQorCXBhbmQJeG1tMSx4bW03CQk7IHhtbTE9KC0tIDMxIC0tIDMzIC0tIDM1IC0tIDM3KQorCXBzcmxkCXhtbTIsV09SRF9CSVQJCTsgeG1tMj0oNTEgLS0gNTMgLS0gNTUgLS0gNTcgLS0pCisJcGFuZAl4bW0zLHhtbTcJCTsgeG1tMz0oLS0gNzEgLS0gNzMgLS0gNzUgLS0gNzcpCisJcG9yCXhtbTAseG1tMQkJOyB4bW0wPSgxMSAzMSAxMyAzMyAxNSAzNSAxNyAzNykKKwlwb3IJeG1tMix4bW0zCQk7IHhtbTI9KDUxIDcxIDUzIDczIDU1IDc1IDU3IDc3KQorCXBtYWRkd2QJeG1tMCxbR09UT0ZGKGVieCxQV19GMzYyX01GMTI3KV0KKwlwbWFkZHdkCXhtbTIsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKwlwYWRkZAl4bW00LHhtbTUJCTsgeG1tND10bXAwW2NvbDAgY29sMSAqKioqIGNvbDNdCisJcGFkZGQJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMFtjb2wxIGNvbDMgY29sNSBjb2w3XQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwk7IHhtbTY9KDAwIDAxICoqIDAzICoqIDA1ICoqIDA3KQorCisJbW92ZHFhCXhtbTEseG1tNgkJOyB4bW0xPSgwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNykKKwlwc2xsZAl4bW02LFdPUkRfQklUCQk7IHhtbTY9KC0tIDAwIC0tICoqIC0tICoqIC0tICoqKQorCXBhbmQJeG1tMSx4bW03CQk7IHhtbTE9KC0tIDAxIC0tIDAzIC0tIDA1IC0tIDA3KQorCXBzcmFkCXhtbTYsKFdPUkRfQklULUNPTlNUX0JJVFMtMikgOyB4bW02PXRtcDEwW2NvbDAgKioqKiAqKioqICoqKipdCisJcHNyYWQJeG1tMSwoV09SRF9CSVQtQ09OU1RfQklUUy0yKSA7IHhtbTE9dG1wMTBbY29sMSBjb2wzIGNvbDUgY29sN10KKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3ZkcWEJeG1tMyx4bW02CisJbW92ZHFhCXhtbTUseG1tMQorCXBhZGRkCXhtbTYseG1tNAk7IHhtbTY9ZGF0YTBbY29sMCAqKioqICoqKiogKioqKl09KEEwICoqICoqICoqKQorCXBhZGRkCXhtbTEseG1tMAk7IHhtbTE9ZGF0YTBbY29sMSBjb2wzIGNvbDUgY29sN109KEExIEEzIEE1IEE3KQorCXBzdWJkCXhtbTMseG1tNAk7IHhtbTM9ZGF0YTFbY29sMCAqKioqICoqKiogKioqKl09KEIwICoqICoqICoqKQorCXBzdWJkCXhtbTUseG1tMAk7IHhtbTU9ZGF0YTFbY29sMSBjb2wzIGNvbDUgY29sN109KEIxIEIzIEI1IEI3KQorCisJbW92ZHFhCXhtbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV8yKV0JOyB4bW0yPVtQRF9ERVNDQUxFX1AxXzJdCisKKwlwdW5wY2tsZHEgIHhtbTYseG1tMwkJOyB4bW02PShBMCBCMCAqKiAqKikKKworCW1vdmRxYSAgICAgeG1tNyx4bW0xCisJcHVucGNrbHFkcSB4bW0xLHhtbTUJCTsgeG1tMT0oQTEgQTMgQjEgQjMpCisJcHVucGNraHFkcSB4bW03LHhtbTUJCTsgeG1tNz0oQTUgQTcgQjUgQjcpCisKKwlwYWRkZAl4bW02LHhtbTIKKwlwc3JhZAl4bW02LERFU0NBTEVfUDFfMgorCisJcGFkZGQJeG1tMSx4bW0yCisJcGFkZGQJeG1tNyx4bW0yCisJcHNyYWQJeG1tMSxERVNDQUxFX1AxXzIKKwlwc3JhZAl4bW03LERFU0NBTEVfUDFfMgorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXQk7IChKU0FNUFJPVyAqKQorCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWJwKV0KKworCTsgfCBpbnB1dDp8IHJlc3VsdDp8CisJOyB8IEEwIEIwIHwgICAgICAgIHwKKwk7IHwgQTEgQjEgfCBDMCBDMSAgfAorCTsgfCBBMyBCMyB8IEQwIEQxICB8CisJOyB8IEE1IEI1IHwgICAgICAgIHwKKwk7IHwgQTcgQjcgfCAgICAgICAgfAorCisJOyAtLSBPZGQgcGFydAorCisJcGFja3NzZHcgIHhtbTEseG1tMQkJOyB4bW0xPShBMSBBMyBCMSBCMyBBMSBBMyBCMSBCMykKKwlwYWNrc3NkdyAgeG1tNyx4bW03CQk7IHhtbTc9KEE1IEE3IEI1IEI3IEE1IEE3IEI1IEI3KQorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorCXBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX0YwODVfTUYwNzIpXQorCisJcGFkZGQgICAgIHhtbTEseG1tNwkJOyB4bW0xPXRtcDBbcm93MCByb3cxIHJvdzAgcm93MV0KKworCTsgLS0gRXZlbiBwYXJ0CisKKwlwc2xsZCAgICAgeG1tNiwoQ09OU1RfQklUUysyKQk7IHhtbTY9dG1wMTBbcm93MCByb3cxICoqKiogKioqKl0KKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3ZkcWEgICAgeG1tNCx4bW02CisJcGFkZGQgICAgIHhtbTYseG1tMQk7IHhtbTY9ZGF0YTBbcm93MCByb3cxICoqKiogKioqKl09KEMwIEMxICoqICoqKQorCXBzdWJkICAgICB4bW00LHhtbTEJOyB4bW00PWRhdGExW3JvdzAgcm93MSAqKioqICoqKipdPShEMCBEMSAqKiAqKikKKworCXB1bnBja2xkcSB4bW02LHhtbTQJOyB4bW02PShDMCBEMCBDMSBEMSkKKworCXBhZGRkICAgICB4bW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDJfMildCisJcHNyYWQgICAgIHhtbTYsREVTQ0FMRV9QMl8yCisKKwlwYWNrc3NkdyAgeG1tNix4bW02CQk7IHhtbTY9KEMwIEQwIEMxIEQxIEMwIEQwIEMxIEQxKQorCXBhY2tzc3diICB4bW02LHhtbTYJCTsgeG1tNj0oQzAgRDAgQzEgRDEgQzAgRDAgQzEgRDEgLi4pCisJcGFkZGIgICAgIHhtbTYsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQorCisJcGV4dHJ3CWVieCx4bW02LDB4MDAJCTsgZWJ4PShDMCBEMCAtLSAtLSkKKwlwZXh0cncJZWN4LHhtbTYsMHgwMQkJOyBlY3g9KEMxIEQxIC0tIC0tKQorCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorCW1vdglXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgYngKKwltb3YJV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIGN4CisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKyVlbmRpZiA7IEpJRENUX0lOVF9TU0UyX1NVUFBPUlRFRAorJWVuZGlmIDsgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRApkaWZmIC0tZ2l0IGEvamlzc2VmbHQuYXNtIGIvamlzc2VmbHQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZWFlZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qaXNzZWZsdC5hc20KQEAgLTAsMCArMSw1ODIgQEAKKzsKKzsgamlzc2VmbHQuYXNtIC0gZmxvYXRpbmctcG9pbnQgSURDVCAoU1NFICYgTU1YKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZsb2F0aW5nLXBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnZlcnNlIERDVAorOyAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbgorOyB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RmbHQuYzsgc2VlIHRoZSBqaWRjdGZsdC5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IExhc3QgTW9kaWZpZWQgOiBGZWJydWFyeSA0LCAyMDA2Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCislaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorJWlmZGVmIEpJRENUX0ZMVF9TU0VfTU1YX1NVUFBPUlRFRAorCis7IFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorOworJWlmIERDVFNJWkUgIT0gOAorJWVycm9yICJTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4iCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislbWFjcm8JdW5wY2tscHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDAgMSA0IDUpCisJc2h1ZnBzCSUxLCUyLDB4NDQKKyVlbmRtYWNybworCislbWFjcm8JdW5wY2tocHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDIgMyA2IDcpCisJc2h1ZnBzCSUxLCUyLDB4RUUKKyVlbmRtYWNybworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9pZGN0X2Zsb2F0X3NzZSkKKworRVhUTihqY29uc3RfaWRjdF9mbG9hdF9zc2UpOgorCitQRF8xXzQxNAl0aW1lcyA0IGRkICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4OQorUERfMV84NDcJdGltZXMgNCBkZCAgMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYKK1BEXzFfMDgyCXRpbWVzIDQgZGQgIDEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2CitQRF9NMl82MTMJdGltZXMgNCBkZCAtMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKK1BEXzBfMTI1CXRpbWVzIDQgZGQgIDAuMTI1CTsgMS84CitQQl9DRU5URVJKU0FNUAl0aW1lcyA4IGRiICBDRU5URVJKU0FNUExFCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqcGVnX2lkY3RfZmxvYXRfc3NlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgY2luZm8oYikJKGIpKzgJCTsgal9kZWNvbXByZXNzX3B0ciBjaW5mbworJWRlZmluZSBjb21wcHRyKGIpCShiKSsxMgkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxNgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyNAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIHdvcmtzcGFjZQl3aygwKS1EQ1RTSVpFMipTSVpFT0ZfRkFTVF9GTE9BVAorCQkJCQk7IEZBU1RfRkxPQVQgd29ya3NwYWNlW0RDVFNJWkUyXQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX2lkY3RfZmxvYXRfc3NlKQorCitFWFROKGpwZWdfaWRjdF9mbG9hdF9zc2UpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3b3Jrc3BhY2VdCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworOwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQorCW1vdgllZHgsIFBPSU5URVIgW2NvbXBwdHIoZWF4KV0KKwltb3YJZWR4LCBQT0lOVEVSIFtqY29tcGluZm9fZGN0X3RhYmxlKGVkeCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXQkJOyBpbnB0cgorCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBGQVNUX0ZMT0FUICogd3NwdHIKKwltb3YJZWN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfRkxPQVRfU1NFCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpuegluZWFyIC5jb2x1bW5EQ1QKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTEsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0xLG1tMAorCXBhY2tzc3diIG1tMSxtbTEKKwltb3ZkCWVheCxtbTEKKwl0ZXN0CWVheCxlYXgKKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisJbW92cSAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCXB1bnBja2h3ZCBtbTEsbW0wCQkJOyBtbTE9KCoqIDAyICoqIDAzKQorCXB1bnBja2x3ZCBtbTAsbW0wCQkJOyBtbTA9KDAwIDAwIDAxIDAxKQorCXBzcmFkICAgICBtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTE9aW4wSD0oMDIgMDMpCisJcHNyYWQgICAgIG1tMCwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tMD1pbjBMPSgwMCAwMSkKKwljdnRwaTJwcyAgeG1tMyxtbTEJCQk7IHhtbTM9KDAyIDAzICoqICoqKQorCWN2dHBpMnBzICB4bW0wLG1tMAkJCTsgeG1tMD0oMDAgMDEgKiogKiopCisJbW92bGhwcyAgIHhtbTAseG1tMwkJCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCisJbXVscHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworCW1vdmFwcwl4bW0xLHhtbTAKKwltb3ZhcHMJeG1tMix4bW0wCisJbW92YXBzCXhtbTMseG1tMAorCisJc2h1ZnBzCXhtbTAseG1tMCwweDAwCQkJOyB4bW0wPSgwMCAwMCAwMCAwMCkKKwlzaHVmcHMJeG1tMSx4bW0xLDB4NTUJCQk7IHhtbTE9KDAxIDAxIDAxIDAxKQorCXNodWZwcwl4bW0yLHhtbTIsMHhBQQkJCTsgeG1tMj0oMDIgMDIgMDIgMDIpCisJc2h1ZnBzCXhtbTMseG1tMywweEZGCQkJOyB4bW0zPSgwMyAwMyAwMyAwMykKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisJam1wCW5lYXIgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cSAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxICAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisKKwlwdW5wY2tod2QgbW00LG1tMAkJCTsgbW00PSgqKiAwMiAqKiAwMykKKwlwdW5wY2tsd2QgbW0wLG1tMAkJCTsgbW0wPSgwMCAwMCAwMSAwMSkKKwlwdW5wY2tod2QgbW01LG1tMQkJCTsgbW01PSgqKiAyMiAqKiAyMykKKwlwdW5wY2tsd2QgbW0xLG1tMQkJCTsgbW0xPSgyMCAyMCAyMSAyMSkKKworCXBzcmFkICAgICBtbTQsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTQ9aW4wSD0oMDIgMDMpCisJcHNyYWQgICAgIG1tMCwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tMD1pbjBMPSgwMCAwMSkKKwljdnRwaTJwcyAgeG1tNCxtbTQJCQk7IHhtbTQ9KDAyIDAzICoqICoqKQorCWN2dHBpMnBzICB4bW0wLG1tMAkJCTsgeG1tMD0oMDAgMDEgKiogKiopCisJcHNyYWQgICAgIG1tNSwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tNT1pbjJIPSgyMiAyMykKKwlwc3JhZCAgICAgbW0xLChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW0xPWluMkw9KDIwIDIxKQorCWN2dHBpMnBzICB4bW01LG1tNQkJCTsgeG1tNT0oMjIgMjMgKiogKiopCisJY3Z0cGkycHMgIHhtbTEsbW0xCQkJOyB4bW0xPSgyMCAyMSAqKiAqKikKKworCXB1bnBja2h3ZCBtbTYsbW0yCQkJOyBtbTY9KCoqIDQyICoqIDQzKQorCXB1bnBja2x3ZCBtbTIsbW0yCQkJOyBtbTI9KDQwIDQwIDQxIDQxKQorCXB1bnBja2h3ZCBtbTcsbW0zCQkJOyBtbTc9KCoqIDYyICoqIDYzKQorCXB1bnBja2x3ZCBtbTMsbW0zCQkJOyBtbTM9KDYwIDYwIDYxIDYxKQorCisJcHNyYWQgICAgIG1tNiwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tNj1pbjRIPSg0MiA0MykKKwlwc3JhZCAgICAgbW0yLChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW0yPWluNEw9KDQwIDQxKQorCWN2dHBpMnBzICB4bW02LG1tNgkJCTsgeG1tNj0oNDIgNDMgKiogKiopCisJY3Z0cGkycHMgIHhtbTIsbW0yCQkJOyB4bW0yPSg0MCA0MSAqKiAqKikKKwlwc3JhZCAgICAgbW03LChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW03PWluNkg9KDYyIDYzKQorCXBzcmFkICAgICBtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTM9aW42TD0oNjAgNjEpCisJY3Z0cGkycHMgIHhtbTcsbW03CQkJOyB4bW03PSg2MiA2MyAqKiAqKikKKwljdnRwaTJwcyAgeG1tMyxtbTMJCQk7IHhtbTM9KDYwIDYxICoqICoqKQorCisJbW92bGhwcyAgIHhtbTAseG1tNAkJCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCW1vdmxocHMgICB4bW0xLHhtbTUJCQk7IHhtbTE9aW4yPSgyMCAyMSAyMiAyMykKKwltdWxwcyAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwltdWxwcyAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworCW1vdmxocHMgICB4bW0yLHhtbTYJCQk7IHhtbTI9aW40PSg0MCA0MSA0MiA0MykKKwltb3ZsaHBzICAgeG1tMyx4bW03CQkJOyB4bW0zPWluNj0oNjAgNjEgNjIgNjMpCisJbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwltb3ZhcHMJeG1tNCx4bW0wCisJbW92YXBzCXhtbTUseG1tMQorCXN1YnBzCXhtbTAseG1tMgkJOyB4bW0wPXRtcDExCisJc3VicHMJeG1tMSx4bW0zCisJYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT10bXAxMworCisJbXVscHMJeG1tMSxbR09UT0ZGKGVieCxQRF8xXzQxNCldCisJc3VicHMJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKworCW1vdmFwcwl4bW02LHhtbTQKKwltb3ZhcHMJeG1tNyx4bW0wCisJc3VicHMJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMworCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPXRtcDIKKwlhZGRwcwl4bW02LHhtbTUJCTsgeG1tNj10bXAwCisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9dG1wMQorCisJbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHRtcDMKKwltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW0wCTsgdG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92cSAgICAgIG1tNCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEgICAgICBtbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cSAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCXB1bnBja2h3ZCBtbTYsbW00CQkJOyBtbTY9KCoqIDEyICoqIDEzKQorCXB1bnBja2x3ZCBtbTQsbW00CQkJOyBtbTQ9KDEwIDEwIDExIDExKQorCXB1bnBja2h3ZCBtbTIsbW0wCQkJOyBtbTI9KCoqIDMyICoqIDMzKQorCXB1bnBja2x3ZCBtbTAsbW0wCQkJOyBtbTA9KDMwIDMwIDMxIDMxKQorCisJcHNyYWQgICAgIG1tNiwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tNj1pbjFIPSgxMiAxMykKKwlwc3JhZCAgICAgbW00LChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW00PWluMUw9KDEwIDExKQorCWN2dHBpMnBzICB4bW00LG1tNgkJCTsgeG1tND0oMTIgMTMgKiogKiopCisJY3Z0cGkycHMgIHhtbTIsbW00CQkJOyB4bW0yPSgxMCAxMSAqKiAqKikKKwlwc3JhZCAgICAgbW0yLChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW0yPWluM0g9KDMyIDMzKQorCXBzcmFkICAgICBtbTAsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTA9aW4zTD0oMzAgMzEpCisJY3Z0cGkycHMgIHhtbTAsbW0yCQkJOyB4bW0wPSgzMiAzMyAqKiAqKikKKwljdnRwaTJwcyAgeG1tMyxtbTAJCQk7IHhtbTM9KDMwIDMxICoqICoqKQorCisJcHVucGNraHdkIG1tNyxtbTUJCQk7IG1tNz0oKiogNTIgKiogNTMpCisJcHVucGNrbHdkIG1tNSxtbTUJCQk7IG1tNT0oNTAgNTAgNTEgNTEpCisJcHVucGNraHdkIG1tMyxtbTEJCQk7IG1tMz0oKiogNzIgKiogNzMpCisJcHVucGNrbHdkIG1tMSxtbTEJCQk7IG1tMT0oNzAgNzAgNzEgNzEpCisKKwltb3ZsaHBzICAgeG1tMix4bW00CQkJOyB4bW0yPWluMT0oMTAgMTEgMTIgMTMpCisJbW92bGhwcyAgIHhtbTMseG1tMAkJCTsgeG1tMz1pbjM9KDMwIDMxIDMyIDMzKQorCisJcHNyYWQgICAgIG1tNywoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tNz1pbjVIPSg1MiA1MykKKwlwc3JhZCAgICAgbW01LChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW01PWluNUw9KDUwIDUxKQorCWN2dHBpMnBzICB4bW00LG1tNwkJCTsgeG1tND0oNTIgNTMgKiogKiopCisJY3Z0cGkycHMgIHhtbTUsbW01CQkJOyB4bW01PSg1MCA1MSAqKiAqKikKKwlwc3JhZCAgICAgbW0zLChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW0zPWluN0g9KDcyIDczKQorCXBzcmFkICAgICBtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTE9aW43TD0oNzAgNzEpCisJY3Z0cGkycHMgIHhtbTAsbW0zCQkJOyB4bW0wPSg3MiA3MyAqKiAqKikKKwljdnRwaTJwcyAgeG1tMSxtbTEJCQk7IHhtbTE9KDcwIDcxICoqICoqKQorCisJbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwltb3ZsaHBzICAgeG1tNSx4bW00CQkJOyB4bW01PWluNT0oNTAgNTEgNTIgNTMpCisJbW92bGhwcyAgIHhtbTEseG1tMAkJCTsgeG1tMT1pbjc9KDcwIDcxIDcyIDczKQorCW11bHBzICAgICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCW11bHBzICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisJbW92YXBzCXhtbTQseG1tMgorCW1vdmFwcwl4bW0wLHhtbTUKKwlhZGRwcwl4bW0yLHhtbTEJCTsgeG1tMj16MTEKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT16MTMKKwlzdWJwcwl4bW00LHhtbTEJCTsgeG1tND16MTIKKwlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD16MTAKKworCW1vdmFwcwl4bW0xLHhtbTIKKwlzdWJwcwl4bW0yLHhtbTUKKwlhZGRwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXA3CisKKwltdWxwcwl4bW0yLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0JOyB4bW0yPXRtcDExCisKKwltb3ZhcHMJeG1tMyx4bW0wCisJYWRkcHMJeG1tMCx4bW00CisJbXVscHMJeG1tMCxbR09UT0ZGKGVieCxQRF8xXzg0NyldCTsgeG1tMD16NQorCW11bHBzCXhtbTMsW0dPVE9GRihlYngsUERfTTJfNjEzKV0JOyB4bW0zPSh6MTAgKiAtMi42MTMxMjU5MzApCisJbXVscHMJeG1tNCxbR09UT0ZGKGVieCxQRF8xXzA4MildCTsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisJYWRkcHMJeG1tMyx4bW0wCQk7IHhtbTM9dG1wMTIKKwlzdWJwcwl4bW00LHhtbTAJCTsgeG1tND10bXAxMAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXN1YnBzCXhtbTMseG1tMQkJOyB4bW0zPXRtcDYKKwltb3ZhcHMJeG1tNSx4bW02CisJbW92YXBzCXhtbTAseG1tNworCWFkZHBzCXhtbTYseG1tMQkJOyB4bW02PWRhdGEwPSgwMCAwMSAwMiAwMykKKwlhZGRwcwl4bW03LHhtbTMJCTsgeG1tNz1kYXRhMT0oMTAgMTEgMTIgMTMpCisJc3VicHMJeG1tNSx4bW0xCQk7IHhtbTU9ZGF0YTc9KDcwIDcxIDcyIDczKQorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPWRhdGE2PSg2MCA2MSA2MiA2MykKKwlzdWJwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXA1CisKKwltb3ZhcHMgICAgeG1tMSx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyAgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDAxIDExKQorCXVucGNraHBzICB4bW0xLHhtbTcJCTsgeG1tMT0oMDIgMTIgMDMgMTMpCisJbW92YXBzICAgIHhtbTMseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgIHhtbTAseG1tNQkJOyB4bW0wPSg2MCA3MCA2MSA3MSkKKwl1bnBja2hwcyAgeG1tMyx4bW01CQk7IHhtbTM9KDYyIDcyIDYzIDczKQorCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9dG1wMgorCW1vdmFwcwl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PXRtcDMKKworCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB3aygwKT0oNjAgNzAgNjEgNzEpCisJbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tMwk7IHdrKDEpPSg2MiA3MiA2MyA3MykKKworCWFkZHBzCXhtbTQseG1tMgkJOyB4bW00PXRtcDQKKwltb3ZhcHMJeG1tMCx4bW03CisJbW92YXBzCXhtbTMseG1tNQorCWFkZHBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGEyPSgyMCAyMSAyMiAyMykKKwlhZGRwcwl4bW01LHhtbTQJCTsgeG1tNT1kYXRhND0oNDAgNDEgNDIgNDMpCisJc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTU9KDUwIDUxIDUyIDUzKQorCXN1YnBzCXhtbTMseG1tNAkJOyB4bW0zPWRhdGEzPSgzMCAzMSAzMiAzMykKKworCW1vdmFwcyAgICB4bW0yLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzICB4bW03LHhtbTMJCTsgeG1tNz0oMjAgMzAgMjEgMzEpCisJdW5wY2tocHMgIHhtbTIseG1tMwkJOyB4bW0yPSgyMiAzMiAyMyAzMykKKwltb3ZhcHMgICAgeG1tNCx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyAgeG1tNSx4bW0wCQk7IHhtbTU9KDQwIDUwIDQxIDUxKQorCXVucGNraHBzICB4bW00LHhtbTAJCTsgeG1tND0oNDIgNTIgNDMgNTMpCisKKwltb3ZhcHMgICAgeG1tMyx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDIwIDMwKQorCXVucGNraHBzMiB4bW0zLHhtbTcJCTsgeG1tMz0oMDEgMTEgMjEgMzEpCisJbW92YXBzICAgIHhtbTAseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTEseG1tMgkJOyB4bW0xPSgwMiAxMiAyMiAzMikKKwl1bnBja2hwczIgeG1tMCx4bW0yCQk7IHhtbTA9KDAzIDEzIDIzIDMzKQorCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9KDYwIDcwIDYxIDcxKQorCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0yPSg2MiA3MiA2MyA3MykKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKworCW1vdmFwcyAgICB4bW02LHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW01LHhtbTcJCTsgeG1tNT0oNDAgNTAgNjAgNzApCisJdW5wY2tocHMyIHhtbTYseG1tNwkJOyB4bW02PSg0MSA1MSA2MSA3MSkKKwltb3ZhcHMgICAgeG1tMyx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tNCx4bW0yCQk7IHhtbTQ9KDQyIDUyIDYyIDcyKQorCXVucGNraHBzMiB4bW0zLHhtbTIJCTsgeG1tMz0oNDMgNTMgNjMgNzMpCisKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisKKy5uZXh0Y29sdW1uOgorCWFkZAllc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYJCTsgY29lZl9ibG9jaworCWFkZAllZHgsIGJ5dGUgNCpTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFCTsgcXVhbnRwdHIKKwlhZGQJZWRpLCAgICAgIDQqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAk7IHdzcHRyCisJZGVjCWVjeAkJCQkJOyBjdHIKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQorCXByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQorCWxlYQllc2ksIFt3b3Jrc3BhY2VdCQkJOyBGQVNUX0ZMT0FUICogd3NwdHIKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZhcHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwltb3ZhcHMJeG1tNCx4bW0wCisJbW92YXBzCXhtbTUseG1tMQorCXN1YnBzCXhtbTAseG1tMgkJOyB4bW0wPXRtcDExCisJc3VicHMJeG1tMSx4bW0zCisJYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT10bXAxMworCisJbXVscHMJeG1tMSxbR09UT0ZGKGVieCxQRF8xXzQxNCldCisJc3VicHMJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKworCW1vdmFwcwl4bW02LHhtbTQKKwltb3ZhcHMJeG1tNyx4bW0wCisJc3VicHMJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMworCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPXRtcDIKKwlhZGRwcwl4bW02LHhtbTUJCTsgeG1tNj10bXAwCisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9dG1wMQorCisJbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHRtcDMKKwltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW0wCTsgdG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJbW92YXBzCXhtbTQseG1tMgorCW1vdmFwcwl4bW0wLHhtbTUKKwlhZGRwcwl4bW0yLHhtbTEJCTsgeG1tMj16MTEKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT16MTMKKwlzdWJwcwl4bW00LHhtbTEJCTsgeG1tND16MTIKKwlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD16MTAKKworCW1vdmFwcwl4bW0xLHhtbTIKKwlzdWJwcwl4bW0yLHhtbTUKKwlhZGRwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXA3CisKKwltdWxwcwl4bW0yLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0JOyB4bW0yPXRtcDExCisKKwltb3ZhcHMJeG1tMyx4bW0wCisJYWRkcHMJeG1tMCx4bW00CisJbXVscHMJeG1tMCxbR09UT0ZGKGVieCxQRF8xXzg0NyldCTsgeG1tMD16NQorCW11bHBzCXhtbTMsW0dPVE9GRihlYngsUERfTTJfNjEzKV0JOyB4bW0zPSh6MTAgKiAtMi42MTMxMjU5MzApCisJbXVscHMJeG1tNCxbR09UT0ZGKGVieCxQRF8xXzA4MildCTsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisJYWRkcHMJeG1tMyx4bW0wCQk7IHhtbTM9dG1wMTIKKwlzdWJwcwl4bW00LHhtbTAJCTsgeG1tND10bXAxMAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXN1YnBzCXhtbTMseG1tMQkJOyB4bW0zPXRtcDYKKwltb3ZhcHMJeG1tNSx4bW02CisJbW92YXBzCXhtbTAseG1tNworCWFkZHBzCXhtbTYseG1tMQkJOyB4bW02PWRhdGEwPSgwMCAxMCAyMCAzMCkKKwlhZGRwcwl4bW03LHhtbTMJCTsgeG1tNz1kYXRhMT0oMDEgMTEgMjEgMzEpCisJc3VicHMJeG1tNSx4bW0xCQk7IHhtbTU9ZGF0YTc9KDA3IDE3IDI3IDM3KQorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPWRhdGE2PSgwNiAxNiAyNiAzNikKKwlzdWJwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXA1CisKKwltb3ZhcHMJeG1tMSxbR09UT0ZGKGVieCxQRF8wXzEyNSldCTsgeG1tMT1bUERfMF8xMjVdCisKKwltdWxwcwl4bW02LHhtbTEJCTsgZGVzY2FsZSgxLzgpCisJbXVscHMJeG1tNyx4bW0xCQk7IGRlc2NhbGUoMS84KQorCW11bHBzCXhtbTUseG1tMQkJOyBkZXNjYWxlKDEvOCkKKwltdWxwcwl4bW0wLHhtbTEJCTsgZGVzY2FsZSgxLzgpCisKKwltb3ZobHBzICAgeG1tMyx4bW02CisJbW92aGxwcyAgIHhtbTEseG1tNworCWN2dHBzMnBpICBtbTAseG1tNgkJOyByb3VuZCB0byBpbnQzMiwgbW0wPWRhdGEwTD0oMDAgMTApCisJY3Z0cHMycGkgIG1tMSx4bW03CQk7IHJvdW5kIHRvIGludDMyLCBtbTE9ZGF0YTFMPSgwMSAxMSkKKwljdnRwczJwaSAgbW0yLHhtbTMJCTsgcm91bmQgdG8gaW50MzIsIG1tMj1kYXRhMEg9KDIwIDMwKQorCWN2dHBzMnBpICBtbTMseG1tMQkJOyByb3VuZCB0byBpbnQzMiwgbW0zPWRhdGExSD0oMjEgMzEpCisJcGFja3NzZHcgIG1tMCxtbTIJCTsgbW0wPWRhdGEwPSgwMCAxMCAyMCAzMCkKKwlwYWNrc3NkdyAgbW0xLG1tMwkJOyBtbTE9ZGF0YTE9KDAxIDExIDIxIDMxKQorCisJbW92aGxwcyAgIHhtbTYseG1tNQorCW1vdmhscHMgICB4bW03LHhtbTAKKwljdnRwczJwaSAgbW00LHhtbTUJCTsgcm91bmQgdG8gaW50MzIsIG1tND1kYXRhN0w9KDA3IDE3KQorCWN2dHBzMnBpICBtbTUseG1tMAkJOyByb3VuZCB0byBpbnQzMiwgbW01PWRhdGE2TD0oMDYgMTYpCisJY3Z0cHMycGkgIG1tNix4bW02CQk7IHJvdW5kIHRvIGludDMyLCBtbTY9ZGF0YTdIPSgyNyAzNykKKwljdnRwczJwaSAgbW03LHhtbTcJCTsgcm91bmQgdG8gaW50MzIsIG1tNz1kYXRhNkg9KDI2IDM2KQorCXBhY2tzc2R3ICBtbTQsbW02CQk7IG1tND1kYXRhNz0oMDcgMTcgMjcgMzcpCisJcGFja3NzZHcgIG1tNSxtbTcJCTsgbW01PWRhdGE2PSgwNiAxNiAyNiAzNikKKworCXBhY2tzc3diICBtbTAsbW01CQk7IG1tMD0oMDAgMTAgMjAgMzAgMDYgMTYgMjYgMzYpCisJcGFja3Nzd2IgIG1tMSxtbTQJCTsgbW0xPSgwMSAxMSAyMSAzMSAwNyAxNyAyNyAzNykKKworCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0zPXRtcDIKKwltb3ZhcHMJeG1tMSwgWE1NV09SRCBbd2soMSldCTsgeG1tMT10bXAzCisKKwltb3ZhcHMJeG1tNixbR09UT0ZGKGVieCxQRF8wXzEyNSldCTsgeG1tNj1bUERfMF8xMjVdCisKKwlhZGRwcwl4bW00LHhtbTIJCTsgeG1tND10bXA0CisJbW92YXBzCXhtbTUseG1tMworCW1vdmFwcwl4bW0wLHhtbTEKKwlhZGRwcwl4bW0zLHhtbTIJCTsgeG1tMz1kYXRhMj0oMDIgMTIgMjIgMzIpCisJYWRkcHMJeG1tMSx4bW00CQk7IHhtbTE9ZGF0YTQ9KDA0IDE0IDI0IDM0KQorCXN1YnBzCXhtbTUseG1tMgkJOyB4bW01PWRhdGE1PSgwNSAxNSAyNSAzNSkKKwlzdWJwcwl4bW0wLHhtbTQJCTsgeG1tMD1kYXRhMz0oMDMgMTMgMjMgMzMpCisKKwltdWxwcwl4bW0zLHhtbTYJCTsgZGVzY2FsZSgxLzgpCisJbXVscHMJeG1tMSx4bW02CQk7IGRlc2NhbGUoMS84KQorCW11bHBzCXhtbTUseG1tNgkJOyBkZXNjYWxlKDEvOCkKKwltdWxwcwl4bW0wLHhtbTYJCTsgZGVzY2FsZSgxLzgpCisKKwltb3ZobHBzICAgeG1tNyx4bW0zCisJbW92aGxwcyAgIHhtbTIseG1tMQorCWN2dHBzMnBpICBtbTIseG1tMwkJOyByb3VuZCB0byBpbnQzMiwgbW0yPWRhdGEyTD0oMDIgMTIpCisJY3Z0cHMycGkgIG1tMyx4bW0xCQk7IHJvdW5kIHRvIGludDMyLCBtbTM9ZGF0YTRMPSgwNCAxNCkKKwljdnRwczJwaSAgbW02LHhtbTcJCTsgcm91bmQgdG8gaW50MzIsIG1tNj1kYXRhMkg9KDIyIDMyKQorCWN2dHBzMnBpICBtbTcseG1tMgkJOyByb3VuZCB0byBpbnQzMiwgbW03PWRhdGE0SD0oMjQgMzQpCisJcGFja3NzZHcgIG1tMixtbTYJCTsgbW0yPWRhdGEyPSgwMiAxMiAyMiAzMikKKwlwYWNrc3NkdyAgbW0zLG1tNwkJOyBtbTM9ZGF0YTQ9KDA0IDE0IDI0IDM0KQorCisJbW92aGxwcyAgIHhtbTQseG1tNQorCW1vdmhscHMgICB4bW02LHhtbTAKKwljdnRwczJwaSAgbW01LHhtbTUJCTsgcm91bmQgdG8gaW50MzIsIG1tNT1kYXRhNUw9KDA1IDE1KQorCWN2dHBzMnBpICBtbTQseG1tMAkJOyByb3VuZCB0byBpbnQzMiwgbW00PWRhdGEzTD0oMDMgMTMpCisJY3Z0cHMycGkgIG1tNix4bW00CQk7IHJvdW5kIHRvIGludDMyLCBtbTY9ZGF0YTVIPSgyNSAzNSkKKwljdnRwczJwaSAgbW03LHhtbTYJCTsgcm91bmQgdG8gaW50MzIsIG1tNz1kYXRhM0g9KDIzIDMzKQorCXBhY2tzc2R3ICBtbTUsbW02CQk7IG1tNT1kYXRhNT0oMDUgMTUgMjUgMzUpCisJcGFja3NzZHcgIG1tNCxtbTcJCTsgbW00PWRhdGEzPSgwMyAxMyAyMyAzMykKKworCW1vdnEgICAgICBtbTYsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQk7IG1tNj1bUEJfQ0VOVEVSSlNBTVBdCisKKwlwYWNrc3N3YiAgbW0yLG1tMwkJOyBtbTI9KDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0KQorCXBhY2tzc3diICBtbTQsbW01CQk7IG1tND0oMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUpCisKKwlwYWRkYiAgICAgbW0wLG1tNgorCXBhZGRiICAgICBtbTEsbW02CisJcGFkZGIgICAgIG1tMixtbTYKKwlwYWRkYiAgICAgbW00LG1tNgorCisJbW92cSAgICAgIG1tNyxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2xidyBtbTAsbW0xCQk7IG1tMD0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisJcHVucGNraGJ3IG1tNyxtbTEJCTsgbW03PSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKKwltb3ZxICAgICAgbW0zLG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbGJ3IG1tMixtbTQJCTsgbW0yPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKwlwdW5wY2toYncgbW0zLG1tNAkJOyBtbTM9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorCisJbW92cSAgICAgIG1tNSxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2x3ZCBtbTAsbW0yCQk7IG1tMD0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisJcHVucGNraHdkIG1tNSxtbTIJCTsgbW01PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKwltb3ZxICAgICAgbW02LG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbHdkIG1tMyxtbTcJCTsgbW0zPSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKKwlwdW5wY2tod2QgbW02LG1tNwkJOyBtbTY9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorCisJbW92cSAgICAgIG1tMSxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xkcSBtbTAsbW0zCQk7IG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcHVucGNraGRxIG1tMSxtbTMJCTsgbW0xPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKwltb3ZxICAgICAgbW00LG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbGRxIG1tNSxtbTYJCTsgbW01PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKwlwdW5wY2toZHEgbW00LG1tNgkJOyBtbTQ9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCisJcHVzaHBpYwllYngJCQk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVieCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCU1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMAorCW1vdnEJTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0xCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSsyKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZWJ4LCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorCW1vdnEJTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW01CisJbW92cQlNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTQKKworCXBvcHBpYwllYngJCQk7IHJlc3RvcmUgR09UIGFkZHJlc3MKKworCWFkZAllc2ksIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVAk7IHdzcHRyCisJYWRkCWVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworCWRlYwllY3gJCQkJOyBjdHIKKwlqbnoJbmVhciAucm93bG9vcAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworJWVuZGlmIDsgSklEQ1RfRkxUX1NTRV9NTVhfU1VQUE9SVEVECislZW5kaWYgOyBEQ1RfRkxPQVRfU1VQUE9SVEVECmRpZmYgLS1naXQgYS9qbWVtbWdyLmMgYi9qbWVtbWdyLmMKaW5kZXggZDgwMWIzMi4uZTMxNDllNSAxMDA2NDQKLS0tIGEvam1lbW1nci5jCisrKyBiL2ptZW1tZ3IuYwpAQCAtNSw2ICs1LDEzIEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIGZvciBTSU1EIGV4dGVuc2lvbi4KKyAqIExhc3QgTW9kaWZpZWQgOiBKYW51YXJ5IDI3LCAyMDA0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEpQRUcgc3lzdGVtLWluZGVwZW5kZW50IG1lbW9yeSBtYW5hZ2VtZW50CiAgKiByb3V0aW5lcy4gIFRoaXMgY29kZSBpcyB1c2FibGUgYWNyb3NzIGEgd2lkZSB2YXJpZXR5IG9mIG1hY2hpbmVzOyBtb3N0CiAgKiBvZiB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gaXNvbGF0ZWQgaW4gYSBzZXBhcmF0ZSBmaWxlLgpAQCAtNTEsMjcgKzU4LDEyIEBACiAKIAogLyoKLSAqIE1hbnkgbWFjaGluZXMgcmVxdWlyZSBzdG9yYWdlIGFsaWdubWVudDogbG9uZ3MgbXVzdCBzdGFydCBvbiA0LWJ5dGUKLSAqIGJvdW5kYXJpZXMsIGRvdWJsZXMgb24gOC1ieXRlIGJvdW5kYXJpZXMsIGV0Yy4gIE9uIHN1Y2ggbWFjaGluZXMsIG1hbGxvYygpCi0gKiBhbHdheXMgcmV0dXJucyBwb2ludGVycyB0aGF0IGFyZSBtdWx0aXBsZXMgb2YgdGhlIHdvcnN0LWNhc2UgYWxpZ25tZW50Ci0gKiByZXF1aXJlbWVudCwgYW5kIHdlIGhhZCBiZXR0ZXIgZG8gc28gdG9vLgotICogVGhlcmUgaXNuJ3QgYW55IHJlYWxseSBwb3J0YWJsZSB3YXkgdG8gZGV0ZXJtaW5lIHRoZSB3b3JzdC1jYXNlIGFsaWdubWVudAotICogcmVxdWlyZW1lbnQuICBUaGlzIG1vZHVsZSBhc3N1bWVzIHRoYXQgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBpcwotICogbXVsdGlwbGVzIG9mIHNpemVvZihBTElHTl9UWVBFKS4KLSAqIEJ5IGRlZmF1bHQsIHdlIGRlZmluZSBBTElHTl9UWVBFIGFzIGRvdWJsZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IG9uIHNvbWUKLSAqIHdvcmtzdGF0aW9ucyAod2hlcmUgZG91YmxlcyByZWFsbHkgZG8gbmVlZCA4LWJ5dGUgYWxpZ25tZW50KSBhbmQgd2lsbCB3b3JrCi0gKiBmaW5lIG9uIG5lYXJseSBldmVyeXRoaW5nLiAgSWYgeW91ciBtYWNoaW5lIGhhcyBsZXNzZXIgYWxpZ25tZW50IG5lZWRzLAotICogeW91IGNhbiBzYXZlIGEgZmV3IGJ5dGVzIGJ5IG1ha2luZyBBTElHTl9UWVBFIHNtYWxsZXIuCi0gKiBUaGUgb25seSBwbGFjZSBJIGtub3cgb2Ygd2hlcmUgdGhpcyB3aWxsIE5PVCB3b3JrIGlzIGNlcnRhaW4gTWFjaW50b3NoCi0gKiA2ODB4MCBjb21waWxlcnMgdGhhdCBkZWZpbmUgZG91YmxlIGFzIGEgMTAtYnl0ZSBJRUVFIGV4dGVuZGVkIGZsb2F0LgotICogRG9pbmcgMTAtYnl0ZSBhbGlnbm1lbnQgaXMgY291bnRlcnByb2R1Y3RpdmUgYmVjYXVzZSBsb25nd29yZHMgd29uJ3QgYmUKLSAqIGFsaWduZWQgd2VsbC4gIFB1dCAiI2RlZmluZSBBTElHTl9UWVBFIGxvbmciIGluIGpjb25maWcuaCBpZiB5b3UgaGF2ZQotICogc3VjaCBhIGNvbXBpbGVyLgorICogU0lNRCBFeHQ6IE1vc3Qgb2YgU1NFL1NTRTIgaW5zdHJ1Y3Rpb25zIHJlcXVpcmUgdGhhdCB0aGUgbWVtb3J5IGFkZHJlc3MKKyAqIGlzIGFsaWduZWQgdG8gYSAxNi1ieXRlIGJvdW5kYXJ5OyBpZiBub3QsIGEgZ2VuZXJhbC1wcm90ZWN0aW9uIGV4Y2VwdGlvbgorICogKCNHUCkgaXMgZ2VuZXJhdGVkLgogICovCiAKLSNpZm5kZWYgQUxJR05fVFlQRQkJLyogc28gY2FuIG92ZXJyaWRlIGZyb20gamNvbmZpZy5oICovCi0jZGVmaW5lIEFMSUdOX1RZUEUgIGRvdWJsZQotI2VuZGlmCisjZGVmaW5lIEFMSUdOX1NJWkUgIDE2CQkvKiBzaXplb2YgU1NFL1NTRTIgcmVnaXN0ZXIgKi8KIAogCiAvKgpAQCAtODEsMzEgKzczLDI0IEBACiAgKiBoZWFkZXIgd2l0aCBhIGxpbmsgdG8gdGhlIG5leHQgcG9vbCBvZiB0aGUgc2FtZSBjbGFzcy4KICAqIFNtYWxsIGFuZCBsYXJnZSBwb29sIGhlYWRlcnMgYXJlIGlkZW50aWNhbCBleGNlcHQgdGhhdCB0aGUgbGF0dGVyJ3MKICAqIGxpbmsgcG9pbnRlciBtdXN0IGJlIEZBUiBvbiA4MHg4NiBtYWNoaW5lcy4KLSAqIE5vdGljZSB0aGF0IHRoZSAicmVhbCIgaGVhZGVyIGZpZWxkcyBhcmUgdW5pb24nZWQgd2l0aCBhIGR1bW15IEFMSUdOX1RZUEUKLSAqIGZpZWxkLiAgVGhpcyBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIG1ha2UgU0laRU9GKHNtYWxsX3Bvb2xfaGRyKSBhIG11bHRpcGxlCi0gKiBvZiB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50IG9mIEFMSUdOX1RZUEUuCiAgKi8KIAotdHlwZWRlZiB1bmlvbiBzbWFsbF9wb29sX3N0cnVjdCAqIHNtYWxsX3Bvb2xfcHRyOwordHlwZWRlZiBzdHJ1Y3Qgc21hbGxfcG9vbF9zdHJ1Y3QgKiBzbWFsbF9wb29sX3B0cjsKIAotdHlwZWRlZiB1bmlvbiBzbWFsbF9wb29sX3N0cnVjdCB7Ci0gIHN0cnVjdCB7Ci0gICAgc21hbGxfcG9vbF9wdHIgbmV4dDsJLyogbmV4dCBpbiBsaXN0IG9mIHBvb2xzICovCi0gICAgc2l6ZV90IGJ5dGVzX3VzZWQ7CQkvKiBob3cgbWFueSBieXRlcyBhbHJlYWR5IHVzZWQgd2l0aGluIHBvb2wgKi8KLSAgICBzaXplX3QgYnl0ZXNfbGVmdDsJCS8qIGJ5dGVzIHN0aWxsIGF2YWlsYWJsZSBpbiB0aGlzIHBvb2wgKi8KLSAgfSBoZHI7Ci0gIEFMSUdOX1RZUEUgZHVtbXk7CQkvKiBpbmNsdWRlZCBpbiB1bmlvbiB0byBlbnN1cmUgYWxpZ25tZW50ICovCit0eXBlZGVmIHN0cnVjdCBzbWFsbF9wb29sX3N0cnVjdCB7CisgIHNtYWxsX3Bvb2xfcHRyIG5leHQ7CQkvKiBuZXh0IGluIGxpc3Qgb2YgcG9vbHMgKi8KKyAgc2l6ZV90IGJ5dGVzX3VzZWQ7CQkvKiBob3cgbWFueSBieXRlcyBhbHJlYWR5IHVzZWQgd2l0aGluIHBvb2wgKi8KKyAgc2l6ZV90IGJ5dGVzX2xlZnQ7CQkvKiBieXRlcyBzdGlsbCBhdmFpbGFibGUgaW4gdGhpcyBwb29sICovCisgIGNoYXIgZHVtbXlbQUxJR05fU0laRS0xXTsKIH0gc21hbGxfcG9vbF9oZHI7CiAKLXR5cGVkZWYgdW5pb24gbGFyZ2VfcG9vbF9zdHJ1Y3QgRkFSICogbGFyZ2VfcG9vbF9wdHI7Cit0eXBlZGVmIHN0cnVjdCBsYXJnZV9wb29sX3N0cnVjdCBGQVIgKiBsYXJnZV9wb29sX3B0cjsKIAotdHlwZWRlZiB1bmlvbiBsYXJnZV9wb29sX3N0cnVjdCB7Ci0gIHN0cnVjdCB7Ci0gICAgbGFyZ2VfcG9vbF9wdHIgbmV4dDsJLyogbmV4dCBpbiBsaXN0IG9mIHBvb2xzICovCi0gICAgc2l6ZV90IGJ5dGVzX3VzZWQ7CQkvKiBob3cgbWFueSBieXRlcyBhbHJlYWR5IHVzZWQgd2l0aGluIHBvb2wgKi8KLSAgICBzaXplX3QgYnl0ZXNfbGVmdDsJCS8qIGJ5dGVzIHN0aWxsIGF2YWlsYWJsZSBpbiB0aGlzIHBvb2wgKi8KLSAgfSBoZHI7Ci0gIEFMSUdOX1RZUEUgZHVtbXk7CQkvKiBpbmNsdWRlZCBpbiB1bmlvbiB0byBlbnN1cmUgYWxpZ25tZW50ICovCit0eXBlZGVmIHN0cnVjdCBsYXJnZV9wb29sX3N0cnVjdCB7CisgIGxhcmdlX3Bvb2xfcHRyIG5leHQ7CQkvKiBuZXh0IGluIGxpc3Qgb2YgcG9vbHMgKi8KKyAgc2l6ZV90IGJ5dGVzX3VzZWQ7CQkvKiBob3cgbWFueSBieXRlcyBhbHJlYWR5IHVzZWQgd2l0aGluIHBvb2wgKi8KKyAgc2l6ZV90IGJ5dGVzX2xlZnQ7CQkvKiBieXRlcyBzdGlsbCBhdmFpbGFibGUgaW4gdGhpcyBwb29sICovCisgIGNoYXIgZHVtbXlbQUxJR05fU0laRS0xXTsKIH0gbGFyZ2VfcG9vbF9oZHI7CiAKIApAQCAtMTk3LDE2ICsxODIsMTYgQEAKIAkgIHBvb2xfaWQsIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkKTsKIAogICBmb3IgKGxoZHJfcHRyID0gbWVtLT5sYXJnZV9saXN0W3Bvb2xfaWRdOyBsaGRyX3B0ciAhPSBOVUxMOwotICAgICAgIGxoZHJfcHRyID0gbGhkcl9wdHItPmhkci5uZXh0KSB7CisgICAgICAgbGhkcl9wdHIgPSBsaGRyX3B0ci0+bmV4dCkgewogICAgIGZwcmludGYoc3RkZXJyLCAiICBMYXJnZSBjaHVuayB1c2VkICVsZFxuIiwKLQkgICAgKGxvbmcpIGxoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZCk7CisJICAgIChsb25nKSBsaGRyX3B0ci0+Ynl0ZXNfdXNlZCk7CiAgIH0KIAogICBmb3IgKHNoZHJfcHRyID0gbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdOyBzaGRyX3B0ciAhPSBOVUxMOwotICAgICAgIHNoZHJfcHRyID0gc2hkcl9wdHItPmhkci5uZXh0KSB7CisgICAgICAgc2hkcl9wdHIgPSBzaGRyX3B0ci0+bmV4dCkgewogICAgIGZwcmludGYoc3RkZXJyLCAiICBTbWFsbCBjaHVuayB1c2VkICVsZCBmcmVlICVsZFxuIiwKLQkgICAgKGxvbmcpIHNoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZCwKLQkgICAgKGxvbmcpIHNoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCk7CisJICAgIChsb25nKSBzaGRyX3B0ci0+Ynl0ZXNfdXNlZCwKKwkgICAgKGxvbmcpIHNoZHJfcHRyLT5ieXRlc19sZWZ0KTsKICAgfQogfQogCkBAIC0yNjYsMTAgKzI1MSwxMCBAQAogICBpZiAoc2l6ZW9mb2JqZWN0ID4gKHNpemVfdCkgKE1BWF9BTExPQ19DSFVOSy1TSVpFT0Yoc21hbGxfcG9vbF9oZHIpKSkKICAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCAxKTsJLyogcmVxdWVzdCBleGNlZWRzIG1hbGxvYydzIGFiaWxpdHkgKi8KIAotICAvKiBSb3VuZCB1cCB0aGUgcmVxdWVzdGVkIHNpemUgdG8gYSBtdWx0aXBsZSBvZiBTSVpFT0YoQUxJR05fVFlQRSkgKi8KLSAgb2RkX2J5dGVzID0gc2l6ZW9mb2JqZWN0ICUgU0laRU9GKEFMSUdOX1RZUEUpOworICAvKiBSb3VuZCB1cCB0aGUgcmVxdWVzdGVkIHNpemUgdG8gYSBtdWx0aXBsZSBvZiBBTElHTl9TSVpFICovCisgIG9kZF9ieXRlcyA9IHNpemVvZm9iamVjdCAlIEFMSUdOX1NJWkU7CiAgIGlmIChvZGRfYnl0ZXMgPiAwKQotICAgIHNpemVvZm9iamVjdCArPSBTSVpFT0YoQUxJR05fVFlQRSkgLSBvZGRfYnl0ZXM7CisgICAgc2l6ZW9mb2JqZWN0ICs9IEFMSUdOX1NJWkUgLSBvZGRfYnl0ZXM7CiAKICAgLyogU2VlIGlmIHNwYWNlIGlzIGF2YWlsYWJsZSBpbiBhbnkgZXhpc3RpbmcgcG9vbCAqLwogICBpZiAocG9vbF9pZCA8IDAgfHwgcG9vbF9pZCA+PSBKUE9PTF9OVU1QT09MUykKQEAgLTI3NywxMCArMjYyLDEwIEBACiAgIHByZXZfaGRyX3B0ciA9IE5VTEw7CiAgIGhkcl9wdHIgPSBtZW0tPnNtYWxsX2xpc3RbcG9vbF9pZF07CiAgIHdoaWxlIChoZHJfcHRyICE9IE5VTEwpIHsKLSAgICBpZiAoaGRyX3B0ci0+aGRyLmJ5dGVzX2xlZnQgPj0gc2l6ZW9mb2JqZWN0KQorICAgIGlmIChoZHJfcHRyLT5ieXRlc19sZWZ0ID49IHNpemVvZm9iamVjdCkKICAgICAgIGJyZWFrOwkJCS8qIGZvdW5kIHBvb2wgd2l0aCBlbm91Z2ggc3BhY2UgKi8KICAgICBwcmV2X2hkcl9wdHIgPSBoZHJfcHRyOwotICAgIGhkcl9wdHIgPSBoZHJfcHRyLT5oZHIubmV4dDsKKyAgICBoZHJfcHRyID0gaGRyX3B0ci0+bmV4dDsKICAgfQogCiAgIC8qIFRpbWUgdG8gbWFrZSBhIG5ldyBwb29sPyAqLwpAQCAtMzA1LDIwICsyOTAsMjAgQEAKICAgICB9CiAgICAgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQgKz0gbWluX3JlcXVlc3QgKyBzbG9wOwogICAgIC8qIFN1Y2Nlc3MsIGluaXRpYWxpemUgdGhlIG5ldyBwb29sIGhlYWRlciBhbmQgYWRkIHRvIGVuZCBvZiBsaXN0ICovCi0gICAgaGRyX3B0ci0+aGRyLm5leHQgPSBOVUxMOwotICAgIGhkcl9wdHItPmhkci5ieXRlc191c2VkID0gMDsKLSAgICBoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCA9IHNpemVvZm9iamVjdCArIHNsb3A7CisgICAgaGRyX3B0ci0+bmV4dCA9IE5VTEw7CisgICAgaGRyX3B0ci0+Ynl0ZXNfdXNlZCA9IDA7CisgICAgaGRyX3B0ci0+Ynl0ZXNfbGVmdCA9IHNpemVvZm9iamVjdCArIHNsb3A7CiAgICAgaWYgKHByZXZfaGRyX3B0ciA9PSBOVUxMKQkvKiBmaXJzdCBwb29sIGluIGNsYXNzPyAqLwogICAgICAgbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdID0gaGRyX3B0cjsKICAgICBlbHNlCi0gICAgICBwcmV2X2hkcl9wdHItPmhkci5uZXh0ID0gaGRyX3B0cjsKKyAgICAgIHByZXZfaGRyX3B0ci0+bmV4dCA9IGhkcl9wdHI7CiAgIH0KIAogICAvKiBPSywgYWxsb2NhdGUgdGhlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHBvb2wgKi8KLSAgZGF0YV9wdHIgPSAoY2hhciAqKSAoaGRyX3B0ciArIDEpOyAvKiBwb2ludCB0byBmaXJzdCBkYXRhIGJ5dGUgaW4gcG9vbCAqLwotICBkYXRhX3B0ciArPSBoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZDsgLyogcG9pbnQgdG8gcGxhY2UgZm9yIG9iamVjdCAqLwotICBoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZCArPSBzaXplb2ZvYmplY3Q7Ci0gIGhkcl9wdHItPmhkci5ieXRlc19sZWZ0IC09IHNpemVvZm9iamVjdDsKKyAgZGF0YV9wdHIgPSAoY2hhciAqKSAoKHNpemVfdCkgKGhkcl9wdHIgKyAxKSAmIC1BTElHTl9TSVpFKTsKKyAgZGF0YV9wdHIgKz0gaGRyX3B0ci0+Ynl0ZXNfdXNlZDsgLyogcG9pbnQgdG8gcGxhY2UgZm9yIG9iamVjdCAqLworICBoZHJfcHRyLT5ieXRlc191c2VkICs9IHNpemVvZm9iamVjdDsKKyAgaGRyX3B0ci0+Ynl0ZXNfbGVmdCAtPSBzaXplb2ZvYmplY3Q7CiAKICAgcmV0dXJuICh2b2lkICopIGRhdGFfcHRyOwogfQpAQCAtMzUwLDEwICszMzUsMTAgQEAKICAgaWYgKHNpemVvZm9iamVjdCA+IChzaXplX3QpIChNQVhfQUxMT0NfQ0hVTkstU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSkpCiAgICAgb3V0X29mX21lbW9yeShjaW5mbywgMyk7CS8qIHJlcXVlc3QgZXhjZWVkcyBtYWxsb2MncyBhYmlsaXR5ICovCiAKLSAgLyogUm91bmQgdXAgdGhlIHJlcXVlc3RlZCBzaXplIHRvIGEgbXVsdGlwbGUgb2YgU0laRU9GKEFMSUdOX1RZUEUpICovCi0gIG9kZF9ieXRlcyA9IHNpemVvZm9iamVjdCAlIFNJWkVPRihBTElHTl9UWVBFKTsKKyAgLyogUm91bmQgdXAgdGhlIHJlcXVlc3RlZCBzaXplIHRvIGEgbXVsdGlwbGUgb2YgQUxJR05fU0laRSAqLworICBvZGRfYnl0ZXMgPSBzaXplb2ZvYmplY3QgJSBBTElHTl9TSVpFOwogICBpZiAob2RkX2J5dGVzID4gMCkKLSAgICBzaXplb2ZvYmplY3QgKz0gU0laRU9GKEFMSUdOX1RZUEUpIC0gb2RkX2J5dGVzOworICAgIHNpemVvZm9iamVjdCArPSBBTElHTl9TSVpFIC0gb2RkX2J5dGVzOwogCiAgIC8qIEFsd2F5cyBtYWtlIGEgbmV3IHBvb2wgKi8KICAgaWYgKHBvb2xfaWQgPCAwIHx8IHBvb2xfaWQgPj0gSlBPT0xfTlVNUE9PTFMpCkBAIC0zNjYsMTUgKzM1MSwxNSBAQAogICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCArPSBzaXplb2ZvYmplY3QgKyBTSVpFT0YobGFyZ2VfcG9vbF9oZHIpOwogCiAgIC8qIFN1Y2Nlc3MsIGluaXRpYWxpemUgdGhlIG5ldyBwb29sIGhlYWRlciBhbmQgYWRkIHRvIGxpc3QgKi8KLSAgaGRyX3B0ci0+aGRyLm5leHQgPSBtZW0tPmxhcmdlX2xpc3RbcG9vbF9pZF07CisgIGhkcl9wdHItPm5leHQgPSBtZW0tPmxhcmdlX2xpc3RbcG9vbF9pZF07CiAgIC8qIFdlIG1haW50YWluIHNwYWNlIGNvdW50cyBpbiBlYWNoIHBvb2wgaGVhZGVyIGZvciBzdGF0aXN0aWNhbCBwdXJwb3NlcywKICAgICogZXZlbiB0aG91Z2ggdGhleSBhcmUgbm90IG5lZWRlZCBmb3IgYWxsb2NhdGlvbi4KICAgICovCi0gIGhkcl9wdHItPmhkci5ieXRlc191c2VkID0gc2l6ZW9mb2JqZWN0OwotICBoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCA9IDA7CisgIGhkcl9wdHItPmJ5dGVzX3VzZWQgPSBzaXplb2ZvYmplY3Q7CisgIGhkcl9wdHItPmJ5dGVzX2xlZnQgPSAwOwogICBtZW0tPmxhcmdlX2xpc3RbcG9vbF9pZF0gPSBoZHJfcHRyOwogCi0gIHJldHVybiAodm9pZCBGQVIgKikgKGhkcl9wdHIgKyAxKTsgLyogcG9pbnQgdG8gZmlyc3QgZGF0YSBieXRlIGluIHBvb2wgKi8KKyAgcmV0dXJuICh2b2lkIEZBUiAqKSAoKHNpemVfdCkgKGhkcl9wdHIgKyAxKSAmIC1BTElHTl9TSVpFKTsKIH0KIAogCkBAIC00MDEsNiArMzg2LDEyIEBACiAgIEpTQU1QUk9XIHdvcmtzcGFjZTsKICAgSkRJTUVOU0lPTiByb3dzcGVyY2h1bmssIGN1cnJvdywgaTsKICAgbG9uZyBsdGVtcDsKKyAgSkRJTUVOU0lPTiBvZGRfc2FtcGxlczsKKworICAvKiBSb3VuZCB1cCB0aGUgcm93IGJ5dGVzIHRvIGEgbXVsdGlwbGUgb2YgQUxJR05fU0laRSAqLworICBvZGRfc2FtcGxlcyA9IHNhbXBsZXNwZXJyb3cgJSAoQUxJR05fU0laRSAvIFNJWkVPRihKU0FNUExFKSk7CisgIGlmIChvZGRfc2FtcGxlcyA+IDApCisgICAgc2FtcGxlc3BlcnJvdyArPSAoQUxJR05fU0laRSAvIFNJWkVPRihKU0FNUExFKSkgLSBvZGRfc2FtcGxlczsKIAogICAvKiBDYWxjdWxhdGUgbWF4ICMgb2Ygcm93cyBhbGxvd2VkIGluIG9uZSBhbGxvY2F0aW9uIGNodW5rICovCiAgIGx0ZW1wID0gKE1BWF9BTExPQ19DSFVOSy1TSVpFT0YobGFyZ2VfcG9vbF9oZHIpKSAvCkBAIC05NjgsOSArOTU5LDkgQEAKICAgbWVtLT5sYXJnZV9saXN0W3Bvb2xfaWRdID0gTlVMTDsKIAogICB3aGlsZSAobGhkcl9wdHIgIT0gTlVMTCkgewotICAgIGxhcmdlX3Bvb2xfcHRyIG5leHRfbGhkcl9wdHIgPSBsaGRyX3B0ci0+aGRyLm5leHQ7Ci0gICAgc3BhY2VfZnJlZWQgPSBsaGRyX3B0ci0+aGRyLmJ5dGVzX3VzZWQgKwotCQkgIGxoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCArCisgICAgbGFyZ2VfcG9vbF9wdHIgbmV4dF9saGRyX3B0ciA9IGxoZHJfcHRyLT5uZXh0OworICAgIHNwYWNlX2ZyZWVkID0gbGhkcl9wdHItPmJ5dGVzX3VzZWQgKworCQkgIGxoZHJfcHRyLT5ieXRlc19sZWZ0ICsKIAkJICBTSVpFT0YobGFyZ2VfcG9vbF9oZHIpOwogICAgIGpwZWdfZnJlZV9sYXJnZShjaW5mbywgKHZvaWQgRkFSICopIGxoZHJfcHRyLCBzcGFjZV9mcmVlZCk7CiAgICAgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQgLT0gc3BhY2VfZnJlZWQ7CkBAIC05ODIsOSArOTczLDkgQEAKICAgbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdID0gTlVMTDsKIAogICB3aGlsZSAoc2hkcl9wdHIgIT0gTlVMTCkgewotICAgIHNtYWxsX3Bvb2xfcHRyIG5leHRfc2hkcl9wdHIgPSBzaGRyX3B0ci0+aGRyLm5leHQ7Ci0gICAgc3BhY2VfZnJlZWQgPSBzaGRyX3B0ci0+aGRyLmJ5dGVzX3VzZWQgKwotCQkgIHNoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCArCisgICAgc21hbGxfcG9vbF9wdHIgbmV4dF9zaGRyX3B0ciA9IHNoZHJfcHRyLT5uZXh0OworICAgIHNwYWNlX2ZyZWVkID0gc2hkcl9wdHItPmJ5dGVzX3VzZWQgKworCQkgIHNoZHJfcHRyLT5ieXRlc19sZWZ0ICsKIAkJICBTSVpFT0Yoc21hbGxfcG9vbF9oZHIpOwogICAgIGpwZWdfZnJlZV9zbWFsbChjaW5mbywgKHZvaWQgKikgc2hkcl9wdHIsIHNwYWNlX2ZyZWVkKTsKICAgICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCAtPSBzcGFjZV9mcmVlZDsKQEAgLTEwMzUsMjIgKzEwMjYsMjIgQEAKICAgY2luZm8tPm1lbSA9IE5VTEw7CQkvKiBmb3Igc2FmZXR5IGlmIGluaXQgZmFpbHMgKi8KIAogICAvKiBDaGVjayBmb3IgY29uZmlndXJhdGlvbiBlcnJvcnMuCi0gICAqIFNJWkVPRihBTElHTl9UWVBFKSBzaG91bGQgYmUgYSBwb3dlciBvZiAyOyBvdGhlcndpc2UsIGl0IHByb2JhYmx5CisgICAqIEFMSUdOX1NJWkUgc2hvdWxkIGJlIGEgcG93ZXIgb2YgMjsgb3RoZXJ3aXNlLCBpdCBwcm9iYWJseQogICAgKiBkb2Vzbid0IHJlZmxlY3QgYW55IHJlYWwgaGFyZHdhcmUgYWxpZ25tZW50IHJlcXVpcmVtZW50LgogICAgKiBUaGUgdGVzdCBpcyBhIGxpdHRsZSB0cmlja3k6IGZvciBYPjAsIFggYW5kIFgtMSBoYXZlIG5vIG9uZS1iaXRzCiAgICAqIGluIGNvbW1vbiBpZiBhbmQgb25seSBpZiBYIGlzIGEgcG93ZXIgb2YgMiwgaWUgaGFzIG9ubHkgb25lIG9uZS1iaXQuCiAgICAqIFNvbWUgY29tcGlsZXJzIG1heSBnaXZlIGFuICJ1bnJlYWNoYWJsZSBjb2RlIiB3YXJuaW5nIGhlcmU7IGlnbm9yZSBpdC4KICAgICovCi0gIGlmICgoU0laRU9GKEFMSUdOX1RZUEUpICYgKFNJWkVPRihBTElHTl9UWVBFKS0xKSkgIT0gMCkKKyAgaWYgKChBTElHTl9TSVpFICYgKEFMSUdOX1NJWkUtMSkpICE9IDApCiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQUxJR05fVFlQRSk7CiAgIC8qIE1BWF9BTExPQ19DSFVOSyBtdXN0IGJlIHJlcHJlc2VudGFibGUgYXMgdHlwZSBzaXplX3QsIGFuZCBtdXN0IGJlCi0gICAqIGEgbXVsdGlwbGUgb2YgU0laRU9GKEFMSUdOX1RZUEUpLgorICAgKiBhIG11bHRpcGxlIG9mIEFMSUdOX1NJWkUuCiAgICAqIEFnYWluLCBhbiAidW5yZWFjaGFibGUgY29kZSIgd2FybmluZyBtYXkgYmUgaWdub3JlZCBoZXJlLgogICAgKiBCdXQgYSAiY29uc3RhbnQgdG9vIGxhcmdlIiB3YXJuaW5nIG1lYW5zIHlvdSBuZWVkIHRvIGZpeCBNQVhfQUxMT0NfQ0hVTksuCiAgICAqLwogICB0ZXN0X21hYyA9IChzaXplX3QpIE1BWF9BTExPQ19DSFVOSzsKICAgaWYgKChsb25nKSB0ZXN0X21hYyAhPSBNQVhfQUxMT0NfQ0hVTksgfHwKLSAgICAgIChNQVhfQUxMT0NfQ0hVTksgJSBTSVpFT0YoQUxJR05fVFlQRSkpICE9IDApCisgICAgICAoTUFYX0FMTE9DX0NIVU5LICUgQUxJR05fU0laRSkgIT0gMCkKICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9BTExPQ19DSFVOSyk7CiAKICAgbWF4X3RvX3VzZSA9IGpwZWdfbWVtX2luaXQoY2luZm8pOyAvKiBzeXN0ZW0tZGVwZW5kZW50IGluaXRpYWxpemF0aW9uICovCmRpZmYgLS1naXQgYS9qbW9yZWNmZy5oIGIvam1vcmVjZmcuaAppbmRleCA1NGE3ZDFjLi5iNDI1NTE5IDEwMDY0NAotLS0gYS9qbW9yZWNmZy5oCisrKyBiL2ptb3JlY2ZnLmgKQEAgLTUsNiArNSwxMyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBmb3IgU0lNRCBleHRlbnNpb24uCisgKiBMYXN0IE1vZGlmaWVkIDogTWFyY2ggMjgsIDIwMDUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGN1c3RvbWl6ZSB0aGUKICAqIEpQRUcgc29mdHdhcmUgZm9yIHNwZWNpYWwgYXBwbGljYXRpb25zIG9yIHN1cHBvcnQgbWFjaGluZS1kZXBlbmRlbnQKICAqIG9wdGltaXphdGlvbnMuICBNb3N0IHVzZXJzIHdpbGwgbm90IG5lZWQgdG8gdG91Y2ggdGhpcyBmaWxlLgpAQCAtMjAsNyArMjcsOSBAQAogICogV2UgZG8gbm90IHN1cHBvcnQgcnVuLXRpbWUgc2VsZWN0aW9uIG9mIGRhdGEgcHJlY2lzaW9uLCBzb3JyeS4KICAqLwogCi0jZGVmaW5lIEJJVFNfSU5fSlNBTVBMRSAgOAkvKiB1c2UgOCBvciAxMiAqLworLyogU0lNRCBFeHQ6IFRoaXMgU0lNRCBjb2RlIG9ubHkgY29wZXMgd2l0aCA4LWJpdCBzYW1wbGUgdmFsdWVzLiAqLworCisjZGVmaW5lIEJJVFNfSU5fSlNBTVBMRSAgOAkvKiBTSU1EIEV4dDogY2Fubm90IGJlIGNoYW5nZWQhICovCiAKIAogLyoKQEAgLTE1Nyw3ICsxNjYsOCBAQAogCiAvKiBJTlQzMiBtdXN0IGhvbGQgYXQgbGVhc3Qgc2lnbmVkIDMyLWJpdCB2YWx1ZXMuICovCiAKLSNpZm5kZWYgWE1EX0gJCQkvKiBYMTEveG1kLmggY29ycmVjdGx5IGRlZmluZXMgSU5UMzIgKi8KKwkvKiBYMTEveG1kLmggYW5kIGJhc2V0c2QuaCAoV2luMzIgU0RLKSBjb3JyZWN0bHkgZGVmaW5lIElOVDMyICovCisjaWYgIWRlZmluZWQoWE1EX0gpICYmICFkZWZpbmVkKF9CQVNFVFNEX0hfKSAmJiAhZGVmaW5lZChfQkFTRVRTRF9IKQogdHlwZWRlZiBsb25nIElOVDMyOwogI2VuZGlmCiAKQEAgLTE4MCwxNCArMTkwLDI0IEBACiAgKiBvciBjb2RlIHByb2ZpbGVycyB0aGF0IHJlcXVpcmUgaXQuCiAgKi8KIAorI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBcCisgICAgZGVmaW5lZChfX1dBVENPTUNfXykgfHwgZGVmaW5lZChfX01XRVJLU19fKSB8fCBcCisgICAgZGVmaW5lZChfX0lDQykgfHwgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZSBKQ0RFQ0wgIF9fY2RlY2wKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIEpDREVDTCAgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkKKyNlbHNlCisjZGVmaW5lIEpDREVDTAorI2VuZGlmCisKIC8qIGEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggbWV0aG9kIHBvaW50ZXJzOiAqLwotI2RlZmluZSBNRVRIT0RERUYodHlwZSkJCXN0YXRpYyB0eXBlCisjZGVmaW5lIE1FVEhPRERFRih0eXBlKQkJc3RhdGljIHR5cGUgSkNERUNMCiAvKiBhIGZ1bmN0aW9uIHVzZWQgb25seSBpbiBpdHMgbW9kdWxlOiAqLwogI2RlZmluZSBMT0NBTCh0eXBlKQkJc3RhdGljIHR5cGUKIC8qIGEgZnVuY3Rpb24gcmVmZXJlbmNlZCB0aHJ1IEVYVEVSTnM6ICovCi0jZGVmaW5lIEdMT0JBTCh0eXBlKQkJdHlwZQorI2RlZmluZSBHTE9CQUwodHlwZSkJCXR5cGUgSkNERUNMCiAvKiBhIHJlZmVyZW5jZSB0byBhIEdMT0JBTCBmdW5jdGlvbjogKi8KLSNkZWZpbmUgRVhURVJOKHR5cGUpCQlleHRlcm4gdHlwZQorI2RlZmluZSBFWFRFUk4odHlwZSkJCWV4dGVybiB0eXBlIEpDREVDTAogCiAKIC8qIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkZWNsYXJlIGEgIm1ldGhvZCIsIHRoYXQgaXMsIGEgZnVuY3Rpb24gcG9pbnRlci4KQEAgLTE5Nyw5ICsyMTcsOSBAQAogICovCiAKICNpZmRlZiBIQVZFX1BST1RPVFlQRVMKLSNkZWZpbmUgSk1FVEhPRCh0eXBlLG1ldGhvZG5hbWUsYXJnbGlzdCkgIHR5cGUgKCptZXRob2RuYW1lKSBhcmdsaXN0CisjZGVmaW5lIEpNRVRIT0QodHlwZSxtZXRob2RuYW1lLGFyZ2xpc3QpICB0eXBlIChKQ0RFQ0wgKm1ldGhvZG5hbWUpIGFyZ2xpc3QKICNlbHNlCi0jZGVmaW5lIEpNRVRIT0QodHlwZSxtZXRob2RuYW1lLGFyZ2xpc3QpICB0eXBlICgqbWV0aG9kbmFtZSkgKCkKKyNkZWZpbmUgSk1FVEhPRCh0eXBlLG1ldGhvZG5hbWUsYXJnbGlzdCkgIHR5cGUgKEpDREVDTCAqbWV0aG9kbmFtZSkgKCkKICNlbmRpZgogCiAKQEAgLTIwOSwxMSArMjI5LDEzIEBACiAgKiBleHBsaWNpdCBjb2RpbmcgaXMgbmVlZGVkOyBzZWUgdXNlcyBvZiB0aGUgTkVFRF9GQVJfUE9JTlRFUlMgc3ltYm9sLgogICovCiAKKyNpZm5kZWYgRkFSCiAjaWZkZWYgTkVFRF9GQVJfUE9JTlRFUlMKICNkZWZpbmUgRkFSICBmYXIKICNlbHNlCiAjZGVmaW5lIEZBUgogI2VuZGlmCisjZW5kaWYgLyogIUZBUiAqLwogCiAKIC8qCkBAIC0yMjQsOCArMjQ2LDE0IEBACiAgKi8KIAogI2lmbmRlZiBIQVZFX0JPT0xFQU4KLXR5cGVkZWYgaW50IGJvb2xlYW47CisjaWZkZWYgVFlQRURFRl9VQ0hBUl9CT09MRUFOCisjaWZuZGVmIF9fUlBDTkRSX0hfXwkJLyogZG9uJ3QgY29uZmxpY3QgaWYgcnBjbmRyLmggYWxyZWFkeSByZWFkICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgYm9vbGVhbjsKICNlbmRpZgorI2Vsc2UgLyogIVRZUEVERUZfVUNIQVJfQk9PTEVBTiAqLwordHlwZWRlZiBpbnQgYm9vbGVhbjsKKyNlbmRpZiAvKiBUWVBFREVGX1VDSEFSX0JPT0xFQU4gKi8KKyNlbmRpZiAvKiAhSEFWRV9CT09MRUFOICovCiAjaWZuZGVmIEZBTFNFCQkJLyogaW4gY2FzZSB0aGVzZSBtYWNyb3MgYWxyZWFkeSBleGlzdCAqLwogI2RlZmluZSBGQUxTRQkwCQkvKiB2YWx1ZXMgb2YgYm9vbGVhbiAqLwogI2VuZGlmCkBAIC0yOTAsNiArMzE4LDcgQEAKICNkZWZpbmUgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAkgICAgLyogT3V0cHV0IHJlc2NhbGluZyB2aWEgSURDVD8gKi8KICN1bmRlZiAgVVBTQU1QTEVfU0NBTElOR19TVVBQT1JURUQgIC8qIE91dHB1dCByZXNjYWxpbmcgYXQgdXBzYW1wbGUgc3RhZ2U/ICovCiAjZGVmaW5lIFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVEICAvKiBGYXN0IHBhdGggZm9yIHNsb3BweSB1cHNhbXBsaW5nPyAqLworI2RlZmluZSBVUFNBTVBMRV9IMVYyX1NVUFBPUlRFRAkgICAgLyogRmFzdC9mYW5jeSBwcm9jZXNzaW5nIGZvciAxaDJ2PyAqLwogI2RlZmluZSBRVUFOVF8xUEFTU19TVVBQT1JURUQJICAgIC8qIDEtcGFzcyBjb2xvciBxdWFudGl6YXRpb24/ICovCiAjZGVmaW5lIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAkgICAgLyogMi1wYXNzIGNvbG9yIHF1YW50aXphdGlvbj8gKi8KIApAQCAtMzE2LDYgKzM0NSw4NCBAQAogI2RlZmluZSBSR0JfQkxVRQkyCS8qIE9mZnNldCBvZiBCbHVlICovCiAjZGVmaW5lIFJHQl9QSVhFTFNJWkUJMwkvKiBKU0FNUExFcyBwZXIgUkdCIHNjYW5saW5lIGVsZW1lbnQgKi8KIAorI3VuZGVmIFJHQlhfRklMTEVSXzBYRkYgCS8qIGZpbGwgZHVtbXkgYnl0ZXMgd2l0aCAweEZGIGluIFJHQlggZm9ybWF0ICovCisKKworLyogU0lNRCBzdXBwb3J0IG9wdGlvbnM6ICovCisKKyNpZm5kZWYgSlNJTURfTU1YX05PVF9TVVBQT1JURUQKKyNkZWZpbmUgSlNJTURfRU5DT0RFUl9NTVhfU1VQUE9SVEVECS8qIFVzZSBNTVggICAgaW4gZW5jb2RpbmcgcHJvY2VzcyAqLworI2RlZmluZSBKU0lNRF9ERUNPREVSX01NWF9TVVBQT1JURUQJLyogVXNlIE1NWCAgICBpbiBkZWNvZGluZyBwcm9jZXNzICovCisjZW5kaWYKKyNpZm5kZWYgSlNJTURfM0ROT1dfTk9UX1NVUFBPUlRFRAorI2RlZmluZSBKU0lNRF9FTkNPREVSXzNETk9XX1NVUFBPUlRFRAkvKiBVc2UgM0ROb3chIGluIGVuY29kaW5nIHByb2Nlc3MgKi8KKyNkZWZpbmUgSlNJTURfREVDT0RFUl8zRE5PV19TVVBQT1JURUQJLyogVXNlIDNETm93ISBpbiBkZWNvZGluZyBwcm9jZXNzICovCisjZW5kaWYKKyNpZm5kZWYgSlNJTURfU1NFX05PVF9TVVBQT1JURUQKKyNkZWZpbmUgSlNJTURfRU5DT0RFUl9TU0VfU1VQUE9SVEVECS8qIFVzZSBTU0UgICAgaW4gZW5jb2RpbmcgcHJvY2VzcyAqLworI2RlZmluZSBKU0lNRF9ERUNPREVSX1NTRV9TVVBQT1JURUQJLyogVXNlIFNTRSAgICBpbiBkZWNvZGluZyBwcm9jZXNzICovCisjZW5kaWYKKyNpZm5kZWYgSlNJTURfU1NFMl9OT1RfU1VQUE9SVEVECisjZGVmaW5lIEpTSU1EX0VOQ09ERVJfU1NFMl9TVVBQT1JURUQJLyogVXNlIFNTRTIgICBpbiBlbmNvZGluZyBwcm9jZXNzICovCisjZGVmaW5lIEpTSU1EX0RFQ09ERVJfU1NFMl9TVVBQT1JURUQJLyogVXNlIFNTRTIgICBpbiBkZWNvZGluZyBwcm9jZXNzICovCisjZW5kaWYKKworLyogKGVuY29kZXIgcGFydCk6ICovCisKKyN1bmRlZiBKRkRDVF9JTlRfUVVBTlRJWkVfV0lUSF9ESVZJU0lPTiAvKiBVc2UgZ2VuZXJhbCBxdWFudGl6YXRpb24gbWV0aG9kICovCisKKyNpZiBkZWZpbmVkKEpTSU1EX0VOQ09ERVJfTU1YX1NVUFBPUlRFRCkKKyNkZWZpbmUgSkNDT0xPUl9SR0JZQ0NfTU1YX1NVUFBPUlRFRAkvKiBSR0ItPllDQyBjb252ZXJzaW9uIHdpdGggTU1YICovCisjZGVmaW5lIEpDU0FNUExFX01NWF9TVVBQT1JURUQJCS8qIGRvd25zYW1wbGluZyB3aXRoIE1NWCAqLworI2RlZmluZSBKRkRDVF9JTlRfTU1YX1NVUFBPUlRFRAkJLyogZm9yd2FyZCBEQ1Qgd2l0aCBNTVggKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoSlNJTURfRU5DT0RFUl9TU0UyX1NVUFBPUlRFRCkKKyNkZWZpbmUgSkNDT0xPUl9SR0JZQ0NfU1NFMl9TVVBQT1JURUQJLyogUkdCLT5ZQ0MgY29udmVyc2lvbiB3aXRoIFNTRTIgKi8KKyNkZWZpbmUgSkNTQU1QTEVfU1NFMl9TVVBQT1JURUQJCS8qIGRvd25zYW1wbGluZyB3aXRoIFNTRTIgKi8KKyNkZWZpbmUgSkZEQ1RfSU5UX1NTRTJfU1VQUE9SVEVECS8qIGZvcndhcmQgRENUIHdpdGggU1NFMiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChKU0lNRF9FTkNPREVSXzNETk9XX1NVUFBPUlRFRCkgJiYgXAorICAgIGRlZmluZWQoSlNJTURfRU5DT0RFUl9NTVhfU1VQUE9SVEVEKQorI2RlZmluZSBKRkRDVF9GTFRfM0ROT1dfTU1YX1NVUFBPUlRFRAkvKiBmb3J3YXJkIERDVCB3aXRoIDNETm93IS9NTVggKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoSlNJTURfRU5DT0RFUl9TU0VfU1VQUE9SVEVEKSAmJiBcCisgICAgZGVmaW5lZChKU0lNRF9FTkNPREVSX01NWF9TVVBQT1JURUQpCisjZGVmaW5lIEpGRENUX0ZMVF9TU0VfTU1YX1NVUFBPUlRFRAkvKiBmb3J3YXJkIERDVCB3aXRoIFNTRS9NTVggKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoSlNJTURfRU5DT0RFUl9TU0VfU1VQUE9SVEVEKSAmJiBcCisgICAgZGVmaW5lZChKU0lNRF9FTkNPREVSX1NTRTJfU1VQUE9SVEVEKQorI2RlZmluZSBKRkRDVF9GTFRfU1NFX1NTRTJfU1VQUE9SVEVECS8qIGZvcndhcmQgRENUIHdpdGggU1NFL1NTRTIgKi8KKyNlbmRpZgorCisvKiAoZGVjb2RlciBwYXJ0KTogKi8KKworI2lmIGRlZmluZWQoSlNJTURfREVDT0RFUl9NTVhfU1VQUE9SVEVEKQorI2RlZmluZSBKRENPTE9SX1lDQ1JHQl9NTVhfU1VQUE9SVEVECS8qIFlDQy0+UkdCIGNvbnZlcnNpb24gd2l0aCBNTVggKi8KKyNkZWZpbmUgSkRNRVJHRV9NTVhfU1VQUE9SVEVECQkvKiBtZXJnZWQgdXBzYW1wbGluZyB3aXRoIE1NWCAqLworI2RlZmluZSBKRFNBTVBMRV9GQU5DWV9NTVhfU1VQUE9SVEVECS8qIGZhbmN5IHVwc2FtcGxpbmcgd2l0aCBNTVggKi8KKyNkZWZpbmUgSkRTQU1QTEVfU0lNUExFX01NWF9TVVBQT1JURUQJLyogc2xvcHB5IHVwc2FtcGxpbmcgd2l0aCBNTVggKi8KKyNkZWZpbmUgSklEQ1RfSU5UX01NWF9TVVBQT1JURUQJCS8qIGludmVyc2UgRENUIHdpdGggTU1YICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEpTSU1EX0RFQ09ERVJfU1NFMl9TVVBQT1JURUQpCisjZGVmaW5lIEpEQ09MT1JfWUNDUkdCX1NTRTJfU1VQUE9SVEVECS8qIFlDQy0+UkdCIGNvbnZlcnNpb24gd2l0aCBTU0UyICovCisjZGVmaW5lIEpETUVSR0VfU1NFMl9TVVBQT1JURUQJCS8qIG1lcmdlZCB1cHNhbXBsaW5nIHdpdGggU1NFMiAqLworI2RlZmluZSBKRFNBTVBMRV9GQU5DWV9TU0UyX1NVUFBPUlRFRAkvKiBmYW5jeSB1cHNhbXBsaW5nIHdpdGggU1NFMiAqLworI2RlZmluZSBKRFNBTVBMRV9TSU1QTEVfU1NFMl9TVVBQT1JURUQJLyogc2xvcHB5IHVwc2FtcGxpbmcgd2l0aCBTU0UyICovCisjZGVmaW5lIEpJRENUX0lOVF9TU0UyX1NVUFBPUlRFRAkvKiBpbnZlcnNlIERDVCB3aXRoIFNTRTIgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoSlNJTURfREVDT0RFUl8zRE5PV19TVVBQT1JURUQpICYmIFwKKyAgICBkZWZpbmVkKEpTSU1EX0RFQ09ERVJfTU1YX1NVUFBPUlRFRCkKKyNkZWZpbmUgSklEQ1RfRkxUXzNETk9XX01NWF9TVVBQT1JURUQJLyogaW52ZXJzZSBEQ1Qgd2l0aCAzRE5vdyEvTU1YICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEpTSU1EX0RFQ09ERVJfU1NFX1NVUFBPUlRFRCkgJiYgXAorICAgIGRlZmluZWQoSlNJTURfREVDT0RFUl9NTVhfU1VQUE9SVEVEKQorI2RlZmluZSBKSURDVF9GTFRfU1NFX01NWF9TVVBQT1JURUQJLyogaW52ZXJzZSBEQ1Qgd2l0aCBTU0UvTU1YICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEpTSU1EX0RFQ09ERVJfU1NFX1NVUFBPUlRFRCkgJiYgXAorICAgIGRlZmluZWQoSlNJTURfREVDT0RFUl9TU0UyX1NVUFBPUlRFRCkKKyNkZWZpbmUgSklEQ1RfRkxUX1NTRV9TU0UyX1NVUFBPUlRFRAkvKiBpbnZlcnNlIERDVCB3aXRoIFNTRS9TU0UyICovCisjZW5kaWYKKwogCiAvKiBEZWZpbml0aW9ucyBmb3Igc3BlZWQtcmVsYXRlZCBvcHRpbWl6YXRpb25zLiAqLwogCkBAIC0zMjgsNiArNDM1LDkgQEAKICNpZmRlZiBfX0dOVUNfXwkJCS8qIGZvciBpbnN0YW5jZSwgR05VIEMga25vd3MgYWJvdXQgaW5saW5lICovCiAjZGVmaW5lIElOTElORSBfX2lubGluZV9fCiAjZW5kaWYKKyNpZmRlZiBfTVNDX1ZFUgorI2RlZmluZSBJTkxJTkUgX19pbmxpbmUKKyNlbmRpZgogI2lmbmRlZiBJTkxJTkUKICNkZWZpbmUgSU5MSU5FCQkJLyogZGVmYXVsdCBpcyB0byBkZWZpbmUgaXQgYXMgZW1wdHkgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvanBlZ2RsbC5kZWYgYi9qcGVnZGxsLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTg2Y2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvanBlZ2RsbC5kZWYKQEAgLTAsMCArMSw3MyBAQAorOworOyBqcGVnZGxsLmRlZiAtIG1vZHVsZSBkZWZpbml0aW9uIGZpbGUgZm9yIFdpbjMyIERMTAorOworCis7IHNlZCAtZSAiL1woamluaXRcfGpwZWdfc2ltZF9cKGNwdVx8b3NcfG1lcmdlZFwpXCkvZCIgLWUgInMvXkVYVEVSTiguLiopIFwoW19BLVphLXpdW19BLVphLXowLTldKlwpLiovICBcMS9wIiAtZSBkIGpwZWdsaWIuaCBqcGVnaW50LmgKKworRVhQT1JUUworICA7IEFQSSBmdW5jdGlvbnMgaW4ganBlZ2xpYi5oLCB3aGljaCBhcmUgaW50ZW5kZWQKKyAgOyB0byBiZSBjYWxsZWQgYnkgdGhlIHVzZXIgYXBwbGljYXRpb25zLgorICBqcGVnX3N0ZF9lcnJvcgorICBqcGVnX0NyZWF0ZUNvbXByZXNzCisgIGpwZWdfQ3JlYXRlRGVjb21wcmVzcworICBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MKKyAganBlZ19kZXN0cm95X2RlY29tcHJlc3MKKyAganBlZ19zdGRpb19kZXN0CisgIGpwZWdfc3RkaW9fc3JjCisgIGpwZWdfc2V0X2RlZmF1bHRzCisgIGpwZWdfc2V0X2NvbG9yc3BhY2UKKyAganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UKKyAganBlZ19zZXRfcXVhbGl0eQorICBqcGVnX3NldF9saW5lYXJfcXVhbGl0eQorICBqcGVnX2FkZF9xdWFudF90YWJsZQorICBqcGVnX3F1YWxpdHlfc2NhbGluZworICBqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbgorICBqcGVnX3N1cHByZXNzX3RhYmxlcworICBqcGVnX2FsbG9jX3F1YW50X3RhYmxlCisgIGpwZWdfYWxsb2NfaHVmZl90YWJsZQorICBqcGVnX3N0YXJ0X2NvbXByZXNzCisgIGpwZWdfd3JpdGVfc2NhbmxpbmVzCisgIGpwZWdfZmluaXNoX2NvbXByZXNzCisgIGpwZWdfd3JpdGVfcmF3X2RhdGEKKyAganBlZ193cml0ZV9tYXJrZXIKKyAganBlZ193cml0ZV9tX2hlYWRlcgorICBqcGVnX3dyaXRlX21fYnl0ZQorICBqcGVnX3dyaXRlX3RhYmxlcworICBqcGVnX3JlYWRfaGVhZGVyCisgIGpwZWdfc3RhcnRfZGVjb21wcmVzcworICBqcGVnX3JlYWRfc2NhbmxpbmVzCisgIGpwZWdfZmluaXNoX2RlY29tcHJlc3MKKyAganBlZ19yZWFkX3Jhd19kYXRhCisgIGpwZWdfaGFzX211bHRpcGxlX3NjYW5zCisgIGpwZWdfc3RhcnRfb3V0cHV0CisgIGpwZWdfZmluaXNoX291dHB1dAorICBqcGVnX2lucHV0X2NvbXBsZXRlCisgIGpwZWdfbmV3X2NvbG9ybWFwCisgIGpwZWdfY29uc3VtZV9pbnB1dAorICBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMKKyAganBlZ19zYXZlX21hcmtlcnMKKyAganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvcgorICBqcGVnX3JlYWRfY29lZmZpY2llbnRzCisgIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzCisgIGpwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzCisgIGpwZWdfYWJvcnRfY29tcHJlc3MKKyAganBlZ19hYm9ydF9kZWNvbXByZXNzCisgIGpwZWdfYWJvcnQKKyAganBlZ19kZXN0cm95CisgIGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQKKyAgOyBGdW5jdGlvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCBieSBTSU1EIGV4dGVuc2lvbi4KKyAganBlZ19zaW1kX3N1cHBvcnQKKyAganBlZ19zaW1kX21hc2sKKyAganBlZ19zaW1kX2NvbG9yX2NvbnZlcnRlcgorICBqcGVnX3NpbWRfZG93bnNhbXBsZXIKKyAganBlZ19zaW1kX2ZvcndhcmRfZGN0CisgIGpwZWdfc2ltZF9jb2xvcl9kZWNvbnZlcnRlcgorICBqcGVnX3NpbWRfdXBzYW1wbGVyCisgIGpwZWdfc2ltZF9pbnZlcnNlX2RjdAorICA7IFV0aWxpdHkgZnVuY3Rpb25zIGluIGp1dGlscy5jLgorICA7IFRoZXNlIGFyZSBuZWVkZWQgYnkgc29tZSBhcHBsaWNhdGlvbnMuCisgIGpkaXZfcm91bmRfdXAKKyAganJvdW5kX3VwCisgIGpjb3B5X3NhbXBsZV9yb3dzCisgIGpjb3B5X2Jsb2NrX3JvdworICBqemVyb19mYXIKZGlmZiAtLWdpdCBhL2pwZWdkbGwucmMgYi9qcGVnZGxsLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiM2QzMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qcGVnZGxsLnJjCkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBqcGVnZGxsLnJjIC0gdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgV2luMzIgRExMCisvLworCisvLyBmcm9tIDx3aW52ZXIuaD4KKyNkZWZpbmUgVlNfVkVSU0lPTl9JTkZPICAgICAgICAgMQorI2RlZmluZSBWU19GRklfRklMRUZMQUdTTUFTSyAgICAweDAwMDAwMDNGTAorI2RlZmluZSBWU19GRl9ERUJVRyAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBWT1NfX1dJTkRPV1MzMiAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBWRlRfRExMICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBWRlQyX1VOS05PV04gICAgICAgICAgICAweDAwMDAwMDAwTAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVmVyc2lvbgorLy8KKworVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCisgRklMRVZFUlNJT04gICAgNiwyLDEsMgorIFBST0RVQ1RWRVJTSU9OIDYsMiwxLDIKKyBGSUxFRkxBR1NNQVNLICBWU19GRklfRklMRUZMQUdTTUFTSworI2lmZGVmIF9ERUJVRworIEZJTEVGTEFHUyAgICAgIFZTX0ZGX0RFQlVHCisjZWxzZQorIEZJTEVGTEFHUyAgICAgIDB4MDAwMDAwMDBMCisjZW5kaWYKKyBGSUxFT1MgICAgICAgICBWT1NfX1dJTkRPV1MzMgorIEZJTEVUWVBFICAgICAgIFZGVF9ETEwKKyBGSUxFU1VCVFlQRSAgICBWRlQyX1VOS05PV04KK0JFR0lOCisgICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIEJMT0NLICIwMDAwMDAwMCIKKyAgICAgICAgQkVHSU4KKyAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICAiQ29weXJpZ2h0IChDKSAxOTkxLTE5OTggVGhvbWFzIEcuIExhbmVcMCIKKyAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIEpQRUcgTGlicmFyeSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHdpdGggU0lNRCBzdXBwb3J0XDAiCisgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiVGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBKUEVHIHNvZnR3YXJlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZWxlYXNlIDZiICAgd2l0aCB4ODYgU0lNRCBleHRlbnNpb24gZm9yIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBJSkcgSlBFRyBsaWJyYXJ5IHZlcnNpb24gMS4wMlwwIgorICAgICAgICAgICAgVkFMVUUgIkNvbW1lbnRzIiwgIlRoaXMgaXMgbm90IGFuIG9mZmljaWFsIGJpbmFyeSBmcm9tIElKRy4gICAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIFNJTUQgY29kZSBpbiB0aGlzIERMTCBpcyBjb3B5cmlnaHQgKEMpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxOTk5LTIwMDYgTUlZQVNBS0EgTWFzYXJ1LlwwIgorICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgICAgICAiNi4yLjEuMDJcMCIKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICAgIjYuMi4xLjAyXDAiCisgICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJqcGVnNjIuZGxsXDAiCisgICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgICAgICJqcGVnNjJcMCIKKyAgICAgICAgRU5ECisgICAgRU5ECisgICAgQkxPQ0sgIlZhckZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4MCwgMAorICAgIEVORAorRU5ECisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9qcGVnaW50LmggYi9qcGVnaW50LmgKaW5kZXggOTViMDBkNC4uNTExZTA3YyAxMDA2NDQKLS0tIGEvanBlZ2ludC5oCisrKyBiL2pwZWdpbnQuaApAQCAtNSw2ICs1LDEzIEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIGZvciBTSU1EIGV4dGVuc2lvbi4KKyAqIExhc3QgTW9kaWZpZWQgOiBGZWJydWFyeSA0LCAyMDA2CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBUaGlzIGZpbGUgcHJvdmlkZXMgY29tbW9uIGRlY2xhcmF0aW9ucyBmb3IgdGhlIHZhcmlvdXMgSlBFRyBtb2R1bGVzLgogICogVGhlc2UgZGVjbGFyYXRpb25zIGFyZSBjb25zaWRlcmVkIGludGVybmFsIHRvIHRoZSBKUEVHIGxpYnJhcnk7IG1vc3QKICAqIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgbGlicmFyeSBzaG91bGRuJ3QgbmVlZCB0byBpbmNsdWRlIHRoaXMgZmlsZS4KQEAgLTI5MSw2ICsyOTgsMTkgQEAKICNlbmRpZgogCiAKKy8qIFNJTUQgRXh0OiBUaGlzIG1hY3JvIGNoZWNrcyBpZiBjb25zdGFudHMgZm9yIFNTRS9TU0UyIGluc3RydWN0aW9ucyBhcmUKKyAqIGFsaWduZWQgdG8gYSAxNi1ieXRlIGJvdW5kYXJ5LiBNb3N0IG9mIFNTRS9TU0UyIGluc3RydWN0aW9ucyByZXF1aXJlCisgKiB0aGF0IHRoZSBtZW1vcnkgb3BlcmFuZCBpcyBhbGlnbmVkIHRvIGEgMTYtYnl0ZSBib3VuZGFyeTsgaWYgbm90LAorICogYSBnZW5lcmFsLXByb3RlY3Rpb24gZXhjZXB0aW9uICgjR1ApIGlzIGdlbmVyYXRlZC4KKyAqLworCisjaWZkZWYgSlNJTURfTk9fU1NFQ09OU1RfQUxJR05NRU5UX0NIRUNLCisjZGVmaW5lIElTX0NPTlNUX0FMSUdORURfMTYocCkJKDEpCisjZWxzZQorI2RlZmluZSBJU19DT05TVF9BTElHTkVEXzE2KHApCSgoKHVuc2lnbmVkKShwKSAmIDB4MEYpID09IDApCisjZW5kaWYKKworCiAvKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8KIAogI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKQEAgLTMyNyw2ICszNDcsOCBAQAogI2RlZmluZSBqemVyb19mYXIJCWpaZXJvRmFyCiAjZGVmaW5lIGpwZWdfemlnemFnX29yZGVyCWpaSUdUYWJsZQogI2RlZmluZSBqcGVnX25hdHVyYWxfb3JkZXIJalpBR1RhYmxlCisjZGVmaW5lIGpwZWdfc2ltZF9jcHVfc3VwcG9ydAlqU2lDcHVTdXBwb3J0CisjZGVmaW5lIGpwZWdfc2ltZF9vc19zdXBwb3J0CWpTaU9zU3VwcG9ydAogI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KIAogCkBAIC0zODIsNiArNDA0LDEwIEBACiAjZW5kaWYKIGV4dGVybiBjb25zdCBpbnQganBlZ19uYXR1cmFsX29yZGVyW107IC8qIHppZ3phZyBjb2VmIG9yZGVyIHRvIG5hdHVyYWwgb3JkZXIgKi8KIAorLyogU0lNRCBFeHQ6IHJldHJpZXZlIFNJTUQvQ1BVIGluZm9ybWF0aW9uICovCitFWFRFUk4odW5zaWduZWQgaW50KSBqcGVnX3NpbWRfY3B1X3N1cHBvcnQgSlBQKCh2b2lkKSk7CitFWFRFUk4odW5zaWduZWQgaW50KSBqcGVnX3NpbWRfb3Nfc3VwcG9ydCBKUFAoKHVuc2lnbmVkIGludCBzaW1kKSk7CisKIC8qIFN1cHByZXNzIHVuZGVmaW5lZC1zdHJ1Y3R1cmUgY29tcGxhaW50cyBpZiBuZWNlc3NhcnkuICovCiAKICNpZmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgpkaWZmIC0tZ2l0IGEvanBlZ2xpYi5oIGIvanBlZ2xpYi5oCmluZGV4IGQxYmU4ZGQuLjA1MDYzMTYgMTAwNjQ0Ci0tLSBhL2pwZWdsaWIuaAorKysgYi9qcGVnbGliLmgKQEAgLTUsNiArNSwxMyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBmb3IgU0lNRCBleHRlbnNpb24uCisgKiBMYXN0IE1vZGlmaWVkIDogRmVicnVhcnkgNCwgMjAwNgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgogICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIGludGVyZmFjZSBmb3IgdGhlIEpQRUcgbGlicmFyeS4KICAqIE1vc3QgYXBwbGljYXRpb25zIHVzaW5nIHRoZSBsaWJyYXJ5IG5lZWQgb25seSBpbmNsdWRlIHRoaXMgZmlsZSwKICAqIGFuZCBwZXJoYXBzIGplcnJvci5oIGlmIHRoZXkgd2FudCB0byBrbm93IHRoZSBleGFjdCBlcnJvciBjb2Rlcy4KQEAgLTEzLDYgKzIwLDEwIEBACiAjaWZuZGVmIEpQRUdMSUJfSAogI2RlZmluZSBKUEVHTElCX0gKIAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCiAvKgogICogRmlyc3Qgd2UgaW5jbHVkZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHJlY29yZCBob3cgdGhpcwogICogaW5zdGFsbGF0aW9uIG9mIHRoZSBKUEVHIGxpYnJhcnkgaXMgc2V0IHVwLiAgamNvbmZpZy5oIGNhbiBiZQpAQCAtMzMsNiArNDQsMTMgQEAKICNkZWZpbmUgSlBFR19MSUJfVkVSU0lPTiAgNjIJLyogVmVyc2lvbiA2YiAqLwogCiAKKy8qIFNJTUQgRXh0OiBWZXJzaW9uIElEIGZvciB0aGUgU0lNRCBleHRlbnNpb24uCisgKi8KKworI2RlZmluZSBKUEVHX1NJTURFWFRfVkVSU0lPTiAgMTAyCS8qIHZlcnNpb24gMS4wMiAqLworI2RlZmluZSBKUEVHX1NJTURFWFRfVkVSX1NUUiAgIjEuMDIiCisKKwogLyogVmFyaW91cyBjb25zdGFudHMgZGV0ZXJtaW5pbmcgdGhlIHNpemVzIG9mIHRoaW5ncy4KICAqIEFsbCBvZiB0aGVzZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBKUEVHIHN0YW5kYXJkLCBzbyBkb24ndCBjaGFuZ2UgdGhlbQogICogaWYgeW91IHdhbnQgdG8gYmUgY29tcGF0aWJsZS4KQEAgLTIzNSw2ICsyNTMsMTUgQEAKIAlKRElUSEVSX0ZTCQkvKiBGbG95ZC1TdGVpbmJlcmcgZXJyb3IgZGlmZnVzaW9uIGRpdGhlciAqLwogfSBKX0RJVEhFUl9NT0RFOwogCisvKiBTSU1EIEV4dDogYml0ZmxhZ3MgZm9yIGpwZWdfc2ltZF9zdXBwb3J0KCkgYW5kIGpwZWdfc2ltZF9tYXNrKCkgKi8KKworI2RlZmluZSBKU0lNRF9OT05FICAgIDB4MDAKKyNkZWZpbmUgSlNJTURfTU1YICAgICAweDAxCisjZGVmaW5lIEpTSU1EXzNETk9XICAgMHgwMgorI2RlZmluZSBKU0lNRF9TU0UgICAgIDB4MDQKKyNkZWZpbmUgSlNJTURfU1NFMiAgICAweDA4CisjZGVmaW5lIEpTSU1EX0FMTCAgICAgKEpTSU1EX01NWCB8IEpTSU1EXzNETk9XIHwgSlNJTURfU1NFIHwgSlNJTURfU1NFMikKKwogCiAvKiBDb21tb24gZmllbGRzIGJldHdlZW4gSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBtYXN0ZXIgc3RydWN0cy4gKi8KIApAQCAtODc3LDYgKzkwNCwxOCBAQAogI2RlZmluZSBqcGVnX2Fib3J0CQlqQWJvcnQKICNkZWZpbmUganBlZ19kZXN0cm95CQlqRGVzdHJveQogI2RlZmluZSBqcGVnX3Jlc3luY190b19yZXN0YXJ0CWpSZXN5bmNSZXN0YXJ0CisjZGVmaW5lIGpwZWdfc2ltZF9zdXBwb3J0CWpTaVN1cHBvcnQKKyNpZm5kZWYgSlNJTURfTUFTS0ZVTkNfTk9UX1NVUFBPUlRFRAorI2RlZmluZSBqcGVnX3NpbWRfbWFzawkJalNpTWFzaworI2VuZGlmCisjaWZuZGVmIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKyNkZWZpbmUganBlZ19zaW1kX2NvbG9yX2NvbnZlcnRlcglqU2lDQ29sb3IKKyNkZWZpbmUganBlZ19zaW1kX2Rvd25zYW1wbGVyCQlqU2lEb3duc2FtcGxlcgorI2RlZmluZSBqcGVnX3NpbWRfZm9yd2FyZF9kY3QJCWpTaUZEQ1QKKyNkZWZpbmUganBlZ19zaW1kX2NvbG9yX2RlY29udmVydGVyCWpTaURDb2xvcgorI2RlZmluZSBqcGVnX3NpbWRfdXBzYW1wbGVyCQlqU2lVcHNhbXBsZXIKKyNkZWZpbmUganBlZ19zaW1kX2ludmVyc2VfZGN0CQlqU2lJRENUCisjZW5kaWYgLyogIUpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQgKi8KICNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCiAKIApAQCAtMTAzNyw2ICsxMDc2LDI0IEBACiBFWFRFUk4oYm9vbGVhbikganBlZ19yZXN5bmNfdG9fcmVzdGFydCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCiAJCQkJCSAgICBpbnQgZGVzaXJlZCkpOwogCisvKiBTSU1EIEV4dDogcmV0cmlldmUgU0lNRC9DUFUgaW5mb3JtYXRpb24gKi8KK0VYVEVSTih1bnNpZ25lZCBpbnQpIGpwZWdfc2ltZF9zdXBwb3J0IEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7CisjaWZuZGVmIEpTSU1EX01BU0tGVU5DX05PVF9TVVBQT1JURUQKK0VYVEVSTih1bnNpZ25lZCBpbnQpIGpwZWdfc2ltZF9tYXNrCisJSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sIHVuc2lnbmVkIGludCByZW1vdmUsIHVuc2lnbmVkIGludCBhZGQpKTsKKyNlbmRpZgorI2lmbmRlZiBKU0lNRF9NT0RFSU5GT19OT1RfU1VQUE9SVEVECitFWFRFUk4odW5zaWduZWQgaW50KSBqcGVnX3NpbWRfY29sb3JfY29udmVydGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih1bnNpZ25lZCBpbnQpIGpwZWdfc2ltZF9kb3duc2FtcGxlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odW5zaWduZWQgaW50KSBqcGVnX3NpbWRfZm9yd2FyZF9kY3QgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJCWludCBtZXRob2QpKTsKK0VYVEVSTih1bnNpZ25lZCBpbnQpIGpwZWdfc2ltZF9jb2xvcl9kZWNvbnZlcnRlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih1bnNpZ25lZCBpbnQpIGpwZWdfc2ltZF91cHNhbXBsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgICAgICBpbnQgZG9fZmFuY3kpKTsKK0VYVEVSTih1bnNpZ25lZCBpbnQpIGpwZWdfc2ltZF9pbnZlcnNlX2RjdCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkJCQlpbnQgbWV0aG9kKSk7CisjZW5kaWYgLyogIUpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQgKi8KKwogCiAvKiBUaGVzZSBtYXJrZXIgY29kZXMgYXJlIGV4cG9ydGVkIHNpbmNlIGFwcGxpY2F0aW9ucyBhbmQgZGF0YSBzb3VyY2UgbW9kdWxlcwogICogYXJlIGxpa2VseSB0byB3YW50IHRvIHVzZSB0aGVtLgpAQCAtMTA5Myw0ICsxMTUwLDggQEAKICNpbmNsdWRlICJqZXJyb3IuaCIJCS8qIGZldGNoIGVycm9yIGNvZGVzIHRvbyAqLwogI2VuZGlmCiAKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKICNlbmRpZiAvKiBKUEVHTElCX0ggKi8KZGlmZiAtLWdpdCBhL2pzaW1kY3B1LmFzbSBiL2pzaW1kY3B1LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzg1MWQxCi0tLSAvZGV2L251bGwKKysrIGIvanNpbWRjcHUuYXNtCkBAIC0wLDAgKzEsMTEyIEBACis7Cis7IGpzaW1kY3B1LmFzbSAtIFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjaGVjaworOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IExhc3QgTW9kaWZpZWQgOiBBdWd1c3QgMjMsIDIwMDUKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisKK2NvcHlyaWdodDoKKwlkYgkiIHg4NiBTSU1EIGV4dCBmb3IgSUpHIGxpYiBWIiwgSlBFR19TSU1ERVhUX1ZFUl9TVFIKKwlkYgkiIENvcHlyaWdodCAyMDA2LCBNSVlBU0FLQSBNYXNhcnUgIgorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBDaGVjayBpZiB0aGUgQ1BVIHN1cHBvcnRzIFNJTUQgaW5zdHJ1Y3Rpb25zCis7Cis7IEdMT0JBTCh1bnNpZ25lZCBpbnQpCis7IGpwZWdfc2ltZF9jcHVfc3VwcG9ydCAodm9pZCkKKzsKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanBlZ19zaW1kX2NwdV9zdXBwb3J0KQorCitFWFROKGpwZWdfc2ltZF9jcHVfc3VwcG9ydCk6CisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVzaQkJOyB1bnVzZWQKKwlwdXNoCWVkaQorCisJeG9yCWVkaSxlZGkJCQk7IHNpbWQgc3VwcG9ydCBmbGFnCisKKwlwdXNoZmQKKwlwb3AJZWF4CisJbW92CWVkeCxlYXgKKwl4b3IJZWF4LCAxPDwyMQkJOyBmbGlwIElEIGJpdCBpbiBFRkxBR1MKKwlwdXNoCWVheAorCXBvcGZkCisJcHVzaGZkCisJcG9wCWVheAorCXhvcgllYXgsZWR4CisJanoJc2hvcnQgLnJldHVybgkJOyBDUFVJRCBpcyBub3Qgc3VwcG9ydGVkCisKKwk7IENoZWNrIGZvciBNTVgsIFNTRSBhbmQgU1NFMiBpbnN0cnVjdGlvbiBzdXBwb3J0CisJeG9yCWVheCxlYXgKKwljcHVpZAorCXRlc3QJZWF4LGVheAorCWp6CXNob3J0IC5yZXR1cm4KKworCXhvcgllYXgsZWF4CisJaW5jCWVheAorCWNwdWlkCisJbW92CWVheCxlZHgJCQk7IGVheCA9IFN0YW5kYXJkIGZlYXR1cmUgZmxhZ3MKKworCXRlc3QJZWF4LCAxPDwyMwkJOyBiaXQyMzpNTVgKKwlqeglzaG9ydCAubm9fbW14CisJb3IJZWRpLCBieXRlIEpTSU1EX01NWAorLm5vX21teDoKKwl0ZXN0CWVheCwgMTw8MjUJCTsgYml0MjU6U1NFCisJanoJc2hvcnQgLm5vX3NzZQorCW9yCWVkaSwgYnl0ZSBKU0lNRF9TU0UKKy5ub19zc2U6CisJdGVzdAllYXgsIDE8PDI2CQk7IGJpdDI2OlNTRTIKKwlqeglzaG9ydCAubm9fc3NlMgorCW9yCWVkaSwgYnl0ZSBKU0lNRF9TU0UyCisubm9fc3NlMjoKKworCTsgQ2hlY2sgZm9yIDNETm93ISBpbnN0cnVjdGlvbiBzdXBwb3J0CisJbW92CWVheCwgMHg4MDAwMDAwMAorCWNwdWlkCisJY21wCWVheCwgMHg4MDAwMDAwMAorCWpiZQlzaG9ydCAucmV0dXJuCisKKwltb3YJZWF4LCAweDgwMDAwMDAxCisJY3B1aWQKKwltb3YJZWF4LGVkeAkJCTsgZWF4ID0gRXh0ZW5kZWQgZmVhdHVyZSBmbGFncworCisJdGVzdAllYXgsIDE8PDMxCQk7IGJpdDMxOjNETm93ISh2ZW5kb3IgaW5kZXBlbmRlbnQpCisJanoJc2hvcnQgLm5vXzNkbm93CisJb3IJZWRpLCBieXRlIEpTSU1EXzNETk9XCisubm9fM2Rub3c6CisKKy5yZXR1cm46CisJbW92CWVheCxlZGkKKworCXBvcAllZGkKKzsJcG9wCWVzaQkJOyB1bnVzZWQKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcmV0CisKZGlmZiAtLWdpdCBhL2pzaW1kZGpnLmFzbSBiL2pzaW1kZGpnLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM4MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvanNpbWRkamcuYXNtCkBAIC0wLDAgKzEsMTMwIEBACis7Cis7IGpzaW1kZGpnLmFzbSAtIFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjaGVjayAoZm9yIERKR1BQIFYuMikKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBMYXN0IE1vZGlmaWVkIDogU2VwdGVtYmVyIDI2LCAyMDA0Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgQ2hlY2sgaWYgdGhlIE9TIHN1cHBvcnRzIFNJTUQgaW5zdHJ1Y3Rpb25zIChESkdQUCBWLjIpCis7Cis7IEdMT0JBTCh1bnNpZ25lZCBpbnQpCis7IGpwZWdfc2ltZF9vc19zdXBwb3J0ICh1bnNpZ25lZCBpbnQgc2ltZCkKKzsKKworJWRlZmluZSBFWENFUFRJT05fSUxMRUdBTF9JTlNUUlVDVElPTgk2CTsgdmVjdG9yIG51bWJlciBvZiAjVUQKKworJWRlZmluZSBzaW1kCWVicCs4CQkJOyB1bnNpZ25lZCBpbnQgc2ltZAorJWRlZmluZSBteGNzcgllYnAtNAkJCTsgdW5zaWduZWQgaW50IG14Y3NyID0gMHgxRjgwCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpwZWdfc2ltZF9vc19zdXBwb3J0KQorCitFWFROKGpwZWdfc2ltZF9vc19zdXBwb3J0KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAlkd29yZCAweDFGODAJCTsgZGVmYXVsdCB2YWx1ZSBvZiBNWENTUiByZWdpc3RlcgorCXB1c2gJZWJ4CisKKwlwdXNoCURXT1JEIFtzaW1kXQk7IHNpbWRfZmxhZ3MgLSBtb2RpZmllZCBmcm9tIGV4Y2VwdGlvbl9oYW5kbGVyCisKKwltb3YJYmwsIEVYQ0VQVElPTl9JTExFR0FMX0lOU1RSVUNUSU9OCisJbW92CWF4LCAweDAyMDIJOyBHZXQgUHJvY2Vzc29yIEV4Y2VwdGlvbiBIYW5kbGVyIFZlY3RvcgorCWludAkweDMxCQk7IERQTUkgZnVuY3Rpb24gY2FsbAorCXB1c2gJZWN4CQk7IHNlbGVjdG9yIG9mIG9sZCBleGNlcHRpb24gaGFuZGxlcgorCXB1c2gJZWR4CQk7IG9mZnNldCAgIG9mIG9sZCBleGNlcHRpb24gaGFuZGxlcgorCisJbW92CWVjeCxjcworCW1vdgllZHgsIGV4Y2VwdGlvbl9oYW5kbGVyCisJbW92CWJsLCBFWENFUFRJT05fSUxMRUdBTF9JTlNUUlVDVElPTgorCW1vdglheCwgMHgwMjAzCTsgU2V0IFByb2Nlc3NvciBFeGNlcHRpb24gSGFuZGxlciBWZWN0b3IKKwlpbnQJMHgzMQkJOyBEUE1JIGZ1bmN0aW9uIGNhbGwKKworCW1vdgllYXgsIERXT1JEIFtzaW1kXQorCisJOyBJZiBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24gaXMgZW5hYmxlZCAoQ1IwLkVNID0gMSksCisJOyBleGVjdXRpbmcgYW4gTU1YLzNETm93ISBpbnN0cnVjdGlvbiBnZW5lcmF0ZXMgaW52YWxpZAorCTsgb3Bjb2RlIGV4Y2VwdGlvbiAoI1VEKS4KKworCXB1c2gJYnl0ZSAoLm1teF8xIC0gLm1teF8wKQkJOyBpbnN0X2J5dGVzCisJcHVzaAlieXRlIChKU0lNRF9NTVggfCBKU0lNRF8zRE5PVykJOyB0ZXN0X2ZsYWdzCisJdGVzdAllYXgsIERXT1JEIFtlc3BdCisJanoJc2hvcnQgLm1teF8xCisubW14XzA6CWVtbXMJCQkJOyBleGVjdXRpbmcgTU1YIGluc3RydWN0aW9uCisubW14XzE6CWFkZAllc3AsIGJ5dGUgOAorCisJcHVzaAlieXRlICguc3NlXzEgLSAuc3NlXzApCisJcHVzaAlieXRlIChKU0lNRF9TU0UgfCBKU0lNRF9TU0UyKQorCXRlc3QJZWF4LCBEV09SRCBbZXNwXQorCWp6CXNob3J0IC5zc2VfMQorLnNzZV8wOglsZG14Y3NyCURXT1JEIFtteGNzcl0JCTsgZXhlY3V0aW5nIFNTRSBpbnN0cnVjdGlvbgorLnNzZV8xOglhZGQJZXNwLCBieXRlIDgKKworCXBvcAllZHgJCTsgb2Zmc2V0ICAgb2Ygb2xkIGV4Y2VwdGlvbiBoYW5kbGVyCisJcG9wCWVjeAkJOyBzZWxlY3RvciBvZiBvbGQgZXhjZXB0aW9uIGhhbmRsZXIKKwltb3YJYmwsIEVYQ0VQVElPTl9JTExFR0FMX0lOU1RSVUNUSU9OCisJbW92CWF4LCAweDAyMDMJOyBTZXQgUHJvY2Vzc29yIEV4Y2VwdGlvbiBIYW5kbGVyIFZlY3RvcgorCWludAkweDMxCQk7IERQTUkgZnVuY3Rpb24gY2FsbAorCisJcG9wCWVheAkJOyByZXR1cm4gc2ltZF9mbGFncworCWFuZAllYXgsIGJ5dGUgSlNJTURfQUxMCisKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAKKwlwb3AJZWJwCisJcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgTE9DQUwodm9pZCkgZmFyCis7IGV4Y2VwdGlvbl9oYW5kbGVyICh1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCis7ICAgICAgICAgICAgICAgICAgICB2b2lkICogY29udGV4dF9laXAsIHVuc2lnbmVkIHNob3J0IGNvbnRleHRfY3MsCis7ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbnRleHRfZWZsYWdzLAorOyAgICAgICAgICAgICAgICAgICAgdm9pZCAqIGNvbnRleHRfZXNwLCB1bnNpZ25lZCBzaG9ydCBjb250ZXh0X3NzKTsKKzsKKworJWRlZmluZSBlcnJvcl9jb2RlCWVzcCsxMis4CTsgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlCislZGVmaW5lIGNvbnRleHRfZWlwCWVzcCsxMisxMgk7IHZvaWQgKiBjb250ZXh0X2VpcAorJWRlZmluZSBjb250ZXh0X2NzCWVzcCsxMisxNgk7IHVuc2lnbmVkIHNob3J0IGNvbnRleHRfY3MKKyVkZWZpbmUgY29udGV4dF9lZmxhZ3MJZXNwKzEyKzIwCTsgdW5zaWduZWQgbG9uZyBjb250ZXh0X2VmbGFncworJWRlZmluZSBjb250ZXh0X2VzcAllc3ArMTIrMjQJOyB2b2lkICogY29udGV4dF9lc3AKKyVkZWZpbmUgY29udGV4dF9zcwllc3ArMTIrMjgJOyB1bnNpZ25lZCBzaG9ydCBjb250ZXh0X3NzCisKKyVkZWZpbmUgdGVzdF9mbGFncyhiKQkoYikrMAorJWRlZmluZSBpbnN0X2J5dGVzKGIpCShiKSs0CislZGVmaW5lIHNpbWRfZmxhZ3MoYikJKGIpKzE2CisKKwlhbGlnbgkxNgorCitleGNlcHRpb25faGFuZGxlcjoKKwlwdXNoCWVheAorCXB1c2gJZWN4CisJcHVzaAllZHgKKworCW1vdgllYXgsIFBPSU5URVIgW2NvbnRleHRfZXNwXQorCW1vdgllY3gsIERXT1JEIFt0ZXN0X2ZsYWdzKGVheCldCisJbW92CWVkeCwgRFdPUkQgW2luc3RfYnl0ZXMoZWF4KV0KKwlub3QJZWN4CisJYWRkCVBPSU5URVIgW2NvbnRleHRfZWlwXSwgZWR4CTsgbmV4dCBpbnN0cnVjdGlvbgorCWFuZAlEV09SRCBbc2ltZF9mbGFncyhlYXgpXSwgZWN4CTsgdHVybiBvZmYgZmxhZworCisJcG9wCWVkeAorCXBvcAllY3gKKwlwb3AJZWF4CisJcmV0ZgorCmRpZmYgLS1naXQgYS9qc2ltZGV4dC5pbmMgYi9qc2ltZGV4dC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwMmMwNwotLS0gL2Rldi9udWxsCisrKyBiL2pzaW1kZXh0LmluYwpAQCAtMCwwICsxLDM0NyBAQAorOworOyBqc2ltZGV4dC5pbmMgLSBjb21tb24gZGVjbGFyYXRpb25zCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSAtIHZlcnNpb24gMS4wMgorOworOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOworOyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorOyB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCis7IGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCis7Cis7IFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorOyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0Cis7IGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKzsKKzsgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKzsgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKzsgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCis7ICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCis7IDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCis7ICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKzsgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKzsKKzsgTGFzdCBNb2RpZmllZCA6IEZlYnJ1YXJ5IDQsIDIwMDYKKzsKKzsgW1RBQjhdCisKKyVpZm5kZWYgSlNJTURDRkdfSU5DTFVERUQJOyBpbiBjYXNlIGpzaW1kY2ZnLmluYyBhbHJlYWR5IGRpZAorJWluY2x1ZGUgImpzaW1kY2ZnLmluYyIJCTsgY29uZmlndXJhdGlvbiBkZWNsYXJhdGlvbnMKKyVlbmRpZgorCis7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis7ICBTeXN0ZW0tZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zCisKKyVpZmRlZiBXSU4zMgk7IC0tLS0obmFzbSAtZndpbjMyIC1EV0lOMzIgLi4uKS0tLS0tLS0tCis7ICogTWljcm9zb2Z0IFZpc3VhbCBDKysKKzsgKiBNaW5HVyAoTWluaW1hbGlzdCBHTlUgZm9yIFdpbmRvd3MpCis7ICogQ3lnV2luCis7ICogTENDLVdpbjMyCisKKzsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCis7CislZGVmaW5lIFNFR19URVhUICAgIC50ZXh0ICBhbGlnbj0xNiBwdWJsaWMgdXNlMzIgY2xhc3M9Q09ERQorJWRlZmluZSBTRUdfQ09OU1QgICAucmRhdGEgYWxpZ249MTYgcHVibGljIHVzZTMyIGNsYXNzPUNPTlNUCisKKyVlbGlmZGVmIE9CSjMyCTsgLS0tLShuYXNtIC1mb2JqIC1ET0JKMzIgLi4uKS0tLS0tLS0tLS0KKzsgKiBCb3JsYW5kIEMrKyAoV2luMzIpCisKKzsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCis7CislZGVmaW5lIFNFR19URVhUICAgIC50ZXh0ICBhbGlnbj0xNiBwdWJsaWMgdXNlMzIgY2xhc3M9Q09ERQorJWRlZmluZSBTRUdfQ09OU1QgICAuZGF0YSAgYWxpZ249MTYgcHVibGljIHVzZTMyIGNsYXNzPURBVEEKKworJWVsaWZkZWYgRUxGCTsgLS0tLShuYXNtIC1mZWxmIC1ERUxGIC4uLiktLS0tLS0tLS0tLS0KKzsgKiBMaW51eAorOyAqICpCU0QgZmFtaWx5IFVuaXggdXNpbmcgZWxmIGZvcm1hdAorOyAqIFVuaXggU3lzdGVtIFYsIGluY2x1ZGluZyBTb2xhcmlzIHg4NiwgVW5peFdhcmUgYW5kIFNDTyBVbml4CisKKzsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCis7CislZGVmaW5lIFNFR19URVhUICAgIC50ZXh0ICAgcHJvZ2JpdHMgYWxsb2MgZXhlYyAgIG5vd3JpdGUgYWxpZ249MTYKKyVkZWZpbmUgU0VHX0NPTlNUICAgLnJvZGF0YSBwcm9nYml0cyBhbGxvYyBub2V4ZWMgbm93cml0ZSBhbGlnbj0xNgorCis7IFRvIG1ha2UgdGhlIGNvZGUgcG9zaXRpb24taW5kZXBlbmRlbnQsIGFwcGVuZCAtRFBJQyB0byB0aGUgY29tbWFuZGxpbmUKKzsKKyVkZWZpbmUgR09UX1NZTUJPTCAgX0dMT0JBTF9PRkZTRVRfVEFCTEVfCTsgRUxGIHN1cHBvcnRzIFBJQworJWRlZmluZSBFWFROKG5hbWUpICBuYW1lCQkJOyBmb28oKSAtPiBmb28KKworJWVsaWZkZWYgQU9VVAk7IC0tLS0obmFzbSAtZmFvdXRiL2FvdXQgLURBT1VUIC4uLiktLS0tCis7ICogT2xkZXIgTGludXggdXNpbmcgYS5vdXQgZm9ybWF0ICAobmFzbSAtZiBhb3V0IC1EQU9VVCAuLi4pCis7ICogKkJTRCBmYW1pbHkgVW5peCB1c2luZyBhLm91dCBmb3JtYXQgIChuYXNtIC1mIGFvdXRiIC1EQU9VVCAuLi4pCisKKzsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCis7CislZGVmaW5lIFNFR19URVhUICAgIC50ZXh0CislZGVmaW5lIFNFR19DT05TVCAgIC5kYXRhCisKKzsgVG8gbWFrZSB0aGUgY29kZSBwb3NpdGlvbi1pbmRlcGVuZGVudCwgYXBwZW5kIC1EUElDIHRvIHRoZSBjb21tYW5kbGluZQorOworJWRlZmluZSBHT1RfU1lNQk9MICBfX0dMT0JBTF9PRkZTRVRfVEFCTEVfCTsgQlNELXN0eWxlIGEub3V0IHN1cHBvcnRzIFBJQworCislZWxpZmRlZiBNQUNITwk7IC0tLS0obmFzbSAtZm1hY2hvIC1ETUFDSE8gLi4uKS0tLS0tLS0tCis7ICogTmVYVHN0ZXAvT3BlblN0ZXAvUmhhcHNvZHkvRGFyd2luL01hY09TIFggKE1hY2gtTyBmb3JtYXQpCisKKzsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCis7CislZGVmaW5lIFNFR19URVhUICAgIC50ZXh0ICA7YWxpZ249MTYJOyBuYXNtIGRvZXNuJ3QgYWNjZXB0IGFsaWduPTE2LiB3aHk/CislZGVmaW5lIFNFR19DT05TVCAgIC5yb2RhdGEgYWxpZ249MTYKKworOyBUaGUgZ2VuZXJhdGlvbiBvZiBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIChQSUMpIGlzIHRoZSBkZWZhdWx0IG9uIERhcndpbi4KKzsKKyVkZWZpbmUgUElDCislZGVmaW5lIEdPVF9TWU1CT0wgIF9NQUNIT19QSUNfCQk7IE1hY2gtTyBzdHlsZSBjb2RlLXJlbGF0aXZlIGFkZHJlc3NpbmcKKworJWVsc2UJCTsgLS0tLShPdGhlciBjYXNlKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOyAtLSBzZWdtZW50IGRlZmluaXRpb24gLS0KKzsKKyVkZWZpbmUgU0VHX1RFWFQgICAgLnRleHQKKyVkZWZpbmUgU0VHX0NPTlNUICAgLmRhdGEKKworJWVuZGlmCTsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzsgLS0tLSBqcGVnbGliLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBEQ1RTSVpFCQk4CTsgVGhlIGJhc2ljIERDVCBibG9jayBpcyA4eDggc2FtcGxlcworJWRlZmluZSBEQ1RTSVpFMgk2NAk7IERDVFNJWkUgc3F1YXJlZDsgIyBvZiBlbGVtZW50cyBpbiBhIGJsb2NrCisKKyVkZWZpbmUgSlNJTURfTk9ORQkweDAwCTsgYml0ZmxhZ3MgZm9yIGpwZWdfc2ltZF8qX3N1cHBvcnQoKQorJWRlZmluZSBKU0lNRF9NTVgJMHgwMQorJWRlZmluZSBKU0lNRF8zRE5PVwkweDAyCislZGVmaW5lIEpTSU1EX1NTRQkweDA0CislZGVmaW5lIEpTSU1EX1NTRTIJMHgwOAorJWRlZmluZSBKU0lNRF9BTEwJKEpTSU1EX01NWCB8IEpTSU1EXzNETk9XIHwgSlNJTURfU1NFIHwgSlNJTURfU1NFMikKKworOyAtLS0tIGpwZWdpbnQuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7IFNob3J0IGZvcm1zIG9mIGV4dGVybmFsIG5hbWVzIGZvciBzeXN0ZW1zIHdpdGggYnJhaW4tZGFtYWdlZCBsaW5rZXJzLgorOworJWlmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKKyVkZWZpbmUganBlZ19zaW1kX2NwdV9zdXBwb3J0CWpTaUNwdVN1cHBvcnQKKyVkZWZpbmUganBlZ19zaW1kX29zX3N1cHBvcnQJalNpT3NTdXBwb3J0CislZW5kaWYgOyBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisKKzsgLS0tLSBqbW9yZWNmZy5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgQklUU19JTl9KU0FNUExFPT04ICg4LWJpdCBzYW1wbGUgdmFsdWVzKSBpcyB0aGUgb25seSB2YWxpZCBzZXR0aW5nCis7IG9uIHRoaXMgU0lNRCBpbXBsZW1lbnRhdGlvbi4KKzsKKyVkZWZpbmUgQklUU19JTl9KU0FNUExFCTgJOyBDYXV0aW9uOiBDYW5ub3QgYmUgY2hhbmdlZAorCis7IFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIHNhbXBsZSAocGl4ZWwgZWxlbWVudCB2YWx1ZSkuCis7IE9uIHRoaXMgU0lNRCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlICd1bnNpZ25lZCBjaGFyJy4KKzsKKyVkZWZpbmUgSlNBTVBMRQkJYnl0ZQkJOyB1bnNpZ25lZCBjaGFyCislZGVmaW5lIFNJWkVPRl9KU0FNUExFCVNJWkVPRl9CWVRFCTsgc2l6ZW9mKEpTQU1QTEUpCislZGVmaW5lIE1BWEpTQU1QTEUJMjU1CislZGVmaW5lIENFTlRFUkpTQU1QTEUJMTI4CisKKzsgUmVwcmVzZW50YXRpb24gb2YgYSBEQ1QgZnJlcXVlbmN5IGNvZWZmaWNpZW50LgorOyBPbiB0aGlzIFNJTUQgaW1wbGVtZW50YXRpb24sIHRoaXMgbXVzdCBiZSAnc2hvcnQnLgorOworJWRlZmluZSBKQ09FRgkJd29yZAkJOyBzaG9ydAorJWRlZmluZSBTSVpFT0ZfSkNPRUYJU0laRU9GX1dPUkQJOyBzaXplb2YoSkNPRUYpCisKKzsgSU5UMzIgbXVzdCBob2xkIGF0IGxlYXN0IHNpZ25lZCAzMi1iaXQgdmFsdWVzLgorOyBPbiB0aGlzIFNJTUQgaW1wbGVtZW50YXRpb24sIHRoaXMgbXVzdCBiZSAnbG9uZycuCis7CislZGVmaW5lIElOVDMyCQlkd29yZAkJOyBsb25nCislZGVmaW5lIFNJWkVPRl9JTlQzMglTSVpFT0ZfRFdPUkQJOyBzaXplb2YoSU5UMzIpCisKKzsgRGF0YXR5cGUgdXNlZCBmb3IgaW1hZ2UgZGltZW5zaW9ucy4KKzsgT24gdGhpcyBTSU1EIGltcGxlbWVudGF0aW9uLCB0aGlzIG11c3QgYmUgJ3Vuc2lnbmVkIGludCcuCis7CislZGVmaW5lIEpESU1FTlNJT04JCWR3b3JkCQk7IHVuc2lnbmVkIGludAorJWRlZmluZSBTSVpFT0ZfSkRJTUVOU0lPTglTSVpFT0ZfRFdPUkQJOyBzaXplb2YoSkRJTUVOU0lPTikKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIEpTQU1QUk9XCQlQT0lOVEVSCQk7IEpTQU1QTEUgRkFSICogKGpwZWdsaWIuaCkKKyVkZWZpbmUgSlNBTVBBUlJBWQkJUE9JTlRFUgkJOyBKU0FNUFJPVyAqICAgIChqcGVnbGliLmgpCislZGVmaW5lIEpTQU1QSU1BR0UJCVBPSU5URVIJCTsgSlNBTVBBUlJBWSAqICAoanBlZ2xpYi5oKQorJWRlZmluZSBKQ09FRlBUUgkJUE9JTlRFUgkJOyBKQ09FRiBGQVIgKiAgIChqcGVnbGliLmgpCislZGVmaW5lIFNJWkVPRl9KU0FNUFJPVwkJU0laRU9GX1BPSU5URVIJOyBzaXplb2YoSlNBTVBST1cpCislZGVmaW5lIFNJWkVPRl9KU0FNUEFSUkFZCVNJWkVPRl9QT0lOVEVSCTsgc2l6ZW9mKEpTQU1QQVJSQVkpCislZGVmaW5lIFNJWkVPRl9KU0FNUElNQUdFCVNJWkVPRl9QT0lOVEVSCTsgc2l6ZW9mKEpTQU1QSU1BR0UpCislZGVmaW5lIFNJWkVPRl9KQ09FRlBUUgkJU0laRU9GX1BPSU5URVIJOyBzaXplb2YoSkNPRUZQVFIpCisKKyVkZWZpbmUgUE9JTlRFUgkJCWR3b3JkCQk7IGdlbmVyYWwgcG9pbnRlciB0eXBlCislZGVmaW5lIFNJWkVPRl9QT0lOVEVSCQlTSVpFT0ZfRFdPUkQJOyBzaXplb2YoUE9JTlRFUikKKyVkZWZpbmUgUE9JTlRFUl9CSVQJCURXT1JEX0JJVAk7IHNpemVvZihQT0lOVEVSKSpCWVRFX0JJVAorCislZGVmaW5lIElOVAkJCWR3b3JkCQk7IHNpZ25lZCBpbnRlZ2VyIHR5cGUKKyVkZWZpbmUgU0laRU9GX0lOVAkJU0laRU9GX0RXT1JECTsgc2l6ZW9mKElOVCkKKyVkZWZpbmUgSU5UX0JJVAkJCURXT1JEX0JJVAk7IHNpemVvZihJTlQpKkJZVEVfQklUCisKKyVkZWZpbmUgRlAzMgkJCWR3b3JkCQk7IElFRUU3NTQgc2luZ2xlCislZGVmaW5lIFNJWkVPRl9GUDMyCQlTSVpFT0ZfRFdPUkQJOyBzaXplb2YoRlAzMikKKyVkZWZpbmUgRlAzMl9CSVQJCURXT1JEX0JJVAk7IHNpemVvZihGUDMyKSpCWVRFX0JJVAorCislZGVmaW5lIEZQNjQJCQlxd29yZAkJOyBJRUVFNzU0IGRvdWJsZQorJWRlZmluZSBTSVpFT0ZfRlA2NAkJU0laRU9GX1FXT1JECTsgc2l6ZW9mKEZQNjQpCislZGVmaW5lIEZQNjRfQklUCQlRV09SRF9CSVQJOyBzaXplb2YoRlA2NCkqQllURV9CSVQKKworJWRlZmluZSBGUDgwCQkJdHdvcmQJCTsgSUVFRTc1NCBkb3VibGUtZXh0ZW5kZWQoeDg2KQorJWRlZmluZSBTSVpFT0ZfRlA4MAkJU0laRU9GX1RXT1JECTsgc2l6ZW9mKEZQODApCislZGVmaW5lIEZQODBfQklUCQlUV09SRF9CSVQJOyBzaXplb2YoRlA4MCkqQllURV9CSVQKKworJWRlZmluZSBNTVdPUkQJCQlxd29yZAkJOyBpbnQ2NCAgKE1NWCByZWdpc3RlcikKKyVkZWZpbmUgU0laRU9GX01NV09SRAkJU0laRU9GX1FXT1JECTsgc2l6ZW9mKE1NV09SRCkKKyVkZWZpbmUgTU1XT1JEX0JJVAkJUVdPUkRfQklUCTsgc2l6ZW9mKE1NV09SRCkqQllURV9CSVQKKworJWRlZmluZSBYTU1XT1JECQkJZHF3b3JkCQk7IGludDEyOCAoU1NFIHJlZ2lzdGVyKQorJWRlZmluZSBTSVpFT0ZfWE1NV09SRAkJU0laRU9GX0RRV09SRAk7IHNpemVvZihYTU1XT1JEKQorJWRlZmluZSBYTU1XT1JEX0JJVAkJRFFXT1JEX0JJVAk7IHNpemVvZihYTU1XT1JEKSpCWVRFX0JJVAorCislZGVmaW5lIFNJWkVPRl9CWVRFCQkxCQk7IHNpemVvZihCWVRFKQorJWRlZmluZSBTSVpFT0ZfV09SRAkJMgkJOyBzaXplb2YoV09SRCkKKyVkZWZpbmUgU0laRU9GX0RXT1JECQk0CQk7IHNpemVvZihEV09SRCkKKyVkZWZpbmUgU0laRU9GX1FXT1JECQk4CQk7IHNpemVvZihRV09SRCkKKyVkZWZpbmUgU0laRU9GX1RCWVRFCQkxMAkJOyBzaXplb2YoVEJZVEUpCislZGVmaW5lIFNJWkVPRl9UV09SRAkJMTAJCTsgc2l6ZW9mKFRXT1JEKQorJWRlZmluZSBTSVpFT0ZfRFFXT1JECQkxNgkJOyBzaXplb2YoRFFXT1JEKQorCislZGVmaW5lIEJZVEVfQklUCQk4CQk7IENIQVJfQklUIGluIEMKKyVkZWZpbmUgV09SRF9CSVQJCTE2CQk7IHNpemVvZihXT1JEKSpCWVRFX0JJVAorJWRlZmluZSBEV09SRF9CSVQJCTMyCQk7IHNpemVvZihEV09SRCkqQllURV9CSVQKKyVkZWZpbmUgUVdPUkRfQklUCQk2NAkJOyBzaXplb2YoUVdPUkQpKkJZVEVfQklUCislZGVmaW5lIFRCWVRFX0JJVAkJODAJCTsgc2l6ZW9mKFRCWVRFKSpCWVRFX0JJVAorJWRlZmluZSBUV09SRF9CSVQJCTgwCQk7IHNpemVvZihUV09SRCkqQllURV9CSVQKKyVkZWZpbmUgRFFXT1JEX0JJVAkJMTI4CQk7IHNpemVvZihEUVdPUkQpKkJZVEVfQklUCisKKyVpZGVmaW5lIFRCWVRFCVRXT1JECTsgTkFTTSB1c2VzIHRoZSBrZXl3b3JkICdUV09SRCcgaW5zdGVhZCBvZiAnVEJZVEUnCislaWRlZmluZSBEUVdPUkQJCTsgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgYnkgTkFTTQorJWlkZWZpbmUgX01NV09SRAk7CislaWRlZmluZSBfRFdPUkQJCTsKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyAgRXh0ZXJuYWwgU3ltYm9sIE5hbWUKKzsKKyVpZm5kZWYgRVhUTgorJWRlZmluZSBFWFROKG5hbWUpICAgXyAlKyBuYW1lCQk7IGZvbygpIC0+IF9mb28KKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7ICBNYWNyb3MgZm9yIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgKFBJQykgc3VwcG9ydAorOworJWlmbmRlZiBHT1RfU1lNQk9MCisldW5kZWYgUElDCislZW5kaWYKKworJWlmZGVmIFBJQyA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWlmaWRuIEdPVF9TWU1CT0wsX01BQ0hPX1BJQ18gOyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7IEF0IHByZXNlbnQsIG5hc20gZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgUElDIGdlbmVyYXRpb24gZm9yIE1hY2gtTy4KKzsgVGhlIFBJQyBzdXBwb3J0IGNvZGUgYmVsb3cgaXMgYSBsaXR0bGUgdHJpY2t5LgorCisJU0VDVElPTglTRUdfQ09OU1QKK2NvbnN0X2Jhc2U6CisKKyVkZWZpbmUgR09UT0ZGKGdvdCxzeW0pIChnb3QpICsgKHN5bSkgLSBjb25zdF9iYXNlCisKKyVpbWFjcm8gZ2V0X0dPVAkxCisJOyBOT1RFOiB0aGlzIG1hY3JvIGRlc3Ryb3lzIGVjeCByZXNpc3Rlci4KKwljYWxsCSUlZ2V0ZWlwCisJYWRkCWVjeCwgYnl0ZSAoJSVyZWYgLSAkKQorCWptcAlzaG9ydCAlJWFkanVzdAorJSVnZXRlaXA6CisJbW92CWVjeCwgUE9JTlRFUiBbZXNwXQorCXJldAorJSVhZGp1c3Q6CisJcHVzaAllYnAKKwl4b3IJZWJwLGVicAkJOyBlYnAgPSAwCislaWZpZG5pICUxLGVieAk7ICglMSA9PSBlYngpCisJOyBkYiAweDhELDB4OUMgKyBqbXAgbmVhciBjb25zdF9iYXNlID0KKwk7ICAgbGVhIGVieCwgW2VjeCtlYnAqOCsoY29uc3RfYmFzZS0lJXJlZildIDsgOEQsOUMsRTksKG9mZnNldDMyKQorCWRiCTB4OEQsMHg5QwkJOyA4RCw5QworCWptcAluZWFyIGNvbnN0X2Jhc2UJCTsgRTksKGNvbnN0X2Jhc2UtJSVyZWYpCislJXJlZjoKKyVlbHNlICA7ICglMSAhPSBlYngpCisJOyBkYiAweDhELDB4OEMgKyBqbXAgbmVhciBjb25zdF9iYXNlID0KKwk7ICAgbGVhIGVjeCwgW2VjeCtlYnAqOCsoY29uc3RfYmFzZS0lJXJlZildIDsgOEQsOEMsRTksKG9mZnNldDMyKQorCWRiCTB4OEQsMHg4QwkJOyA4RCw4QworCWptcAluZWFyIGNvbnN0X2Jhc2UJCTsgRTksKGNvbnN0X2Jhc2UtJSVyZWYpCislJXJlZjoJbW92CSUxLCBlY3gKKyVlbmRpZiA7ICglMSA9PSBlYngpCisJcG9wCWVicAorJWVuZG1hY3JvCisKKyVlbHNlCTsgR09UX1NZTUJPTCAhPSBfTUFDSE9fUElDXyAtLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgR09UT0ZGKGdvdCxzeW0pIChnb3QpICsgKHN5bSkgd3J0IC4uZ290b2ZmCisKKyVpbWFjcm8gZ2V0X0dPVAkxCisJZXh0ZXJuCUdPVF9TWU1CT0wKKwljYWxsCSUlZ2V0ZWlwCisJYWRkCSUxLCBHT1RfU1lNQk9MICsgJCQgLSAkIHdydCAuLmdvdHBjCisJam1wCXNob3J0ICUlZG9uZQorJSVnZXRlaXA6CisJbW92CSUxLCBQT0lOVEVSIFtlc3BdCisJcmV0CislJWRvbmU6CislZW5kbWFjcm8KKworJWVuZGlmCTsgR09UX1NZTUJPTCA9PSBfTUFDSE9fUElDXyAtLS0tLS0tLS0tLS0tLS0tCisKKyVpbWFjcm8gcHVzaHBpYwkxLm5vbGlzdAorCXB1c2gJJTEKKyVlbmRtYWNybworJWltYWNybyBwb3BwaWMJMS5ub2xpc3QKKwlwb3AJJTEKKyVlbmRtYWNybworJWltYWNybyBtb3ZwaWMJMi5ub2xpc3QKKwltb3YJJTEsJTIKKyVlbmRtYWNybworCislZWxzZQk7ICFQSUMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBHT1RPRkYoZ290LHN5bSkgKHN5bSkKKworJWltYWNybyBnZXRfR09UCTEubm9saXN0CislZW5kbWFjcm8KKyVpbWFjcm8gcHVzaHBpYwkxLm5vbGlzdAorJWVuZG1hY3JvCislaW1hY3JvIHBvcHBpYwkxLm5vbGlzdAorJWVuZG1hY3JvCislaW1hY3JvIG1vdnBpYwkyLm5vbGlzdAorJWVuZG1hY3JvCisKKyVlbmRpZgk7ICBQSUMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyAgQWxpZ24gdGhlIG5leHQgaW5zdHJ1Y3Rpb24gb24gezIsNCw4LDE2LC4ufS1ieXRlIGJvdW5kYXJ5LgorOyAgIi5iYWxpZ24gbiwsbSIgaW4gR05VIGFzCis7CislZGVmaW5lIE1TS0xFKHgseSkgICh+KCgoeSkgJiAweEZGRkYpIC0gKCh4KSAmIDB4RkZGRikpID4+IDE2KQorJWRlZmluZSBGSUxMQihiLG4pICAoKCQkLShiKSkgJiAoKG4pLTEpKQorCislaW1hY3JvIGFsaWdueCAxLTIubm9saXN0IDB4RkZGRgorJSViczoJdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgTVNLTEUoMTYsRklMTEIoJCwlMSkpICYgRklMTEIoJCwlMSkgXAorCSAgICAgICBkYiAweDkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbm9wCisJdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgRklMTEIoJCwlMSkvOSBcCisJICAgICAgIGRiIDB4OEQsMHg5QywweDIzLDB4MDAsMHgwMCwweDAwLDB4MDAgOyBsZWEgZWJ4LFtlYngrMHgwMDAwMDAwMF0KKwl0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS83IFwKKwkgICAgICAgZGIgMHg4RCwweEFDLDB4MjUsMHgwMCwweDAwLDB4MDAsMHgwMCA7IGxlYSBlYnAsW2VicCsweDAwMDAwMDAwXQorCXRpbWVzIE1TS0xFKEZJTExCKCUlYnMsJTEpLCUyKSAmIEZJTExCKCQsJTEpLzYgXAorCSAgICAgICBkYiAweDhELDB4QUQsMHgwMCwweDAwLDB4MDAsMHgwMCAgICAgIDsgbGVhIGVicCxbZWJwKzB4MDAwMDAwMDBdCisJdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgRklMTEIoJCwlMSkvNCBcCisJICAgICAgIGRiIDB4OEQsMHg2QywweDI1LDB4MDAgICAgICAgICAgICAgICAgOyBsZWEgZWJwLFtlYnArMHgwMF0KKwl0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS8zIFwKKwkgICAgICAgZGIgMHg4RCwweDZELDB4MDAgICAgICAgICAgICAgICAgICAgICA7IGxlYSBlYnAsW2VicCsweDAwXQorCXRpbWVzIE1TS0xFKEZJTExCKCUlYnMsJTEpLCUyKSAmIEZJTExCKCQsJTEpLzIgXAorCSAgICAgICBkYiAweDhCLDB4RUQgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbW92IGVicCxlYnAKKwl0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS8xIFwKKwkgICAgICAgZGIgMHg5MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG5vcAorJWVuZG1hY3JvCisKKzsgQWxpZ24gdGhlIG5leHQgZGF0YSBvbiB7Miw0LDgsMTYsLi59LWJ5dGUgYm91bmRhcnkuCis7CislaW1hY3JvIGFsaWdueiAxLm5vbGlzdAorCWFsaWduICUxLCBkYiAwCQk7IGZpbGxpbmcgemVyb3MKKyVlbmRtYWNybworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9qc2ltZGdjYy5jIGIvanNpbWRnY2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmFkNzViCi0tLSAvZGV2L251bGwKKysrIGIvanNpbWRnY2MuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICoganNpbWRnY2MuYyAtIFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjaGVjayAoZ2NjKQorICoKKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKyAqCisgKiBMYXN0IE1vZGlmaWVkIDogSmFudWFyeSAyNCwgMjAwNgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisKK3N0YXRpYyB2b2xhdGlsZSBpbnQgbG9ja2YgLyogPSAwICovOworc3RhdGljIGptcF9idWYgam1wYnVmOworCisKKy8qCisgKiBFeGNlcHRpb24gaGFuZGxlciBmb3Igc2lnbmFsKCkKKyAqLworCitMT0NBTCh2b2lkKQorZXhjZXB0aW9uX2hhbmRsZXIgKGludCBzaWcpCit7CisgIHNpZ25hbChTSUdJTEwsIFNJR19ERkwpOworICBsb25nam1wKGptcGJ1ZiwgMSk7Cit9CisKKworLyoKKyAqIENoZWNrIGlmIHRoZSBPUyBzdXBwb3J0cyBTSU1EIGluc3RydWN0aW9ucworICovCisKK0dMT0JBTCh1bnNpZ25lZCBpbnQpCitqcGVnX3NpbWRfb3Nfc3VwcG9ydCAodW5zaWduZWQgaW50IHNpbWQpCit7CisjaWZkZWYgX19HTlVDX18JCS8qIGdjYyAoaTM4NikgKi8KKyAgdW5zaWduZWQgaW50IG14Y3NyID0gMHgxRjgwOworCisgIC8qIGVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAiZ2V0X2xvY2s6ICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAibW92bCAgJDEsJSVlYXggICAgICAgICAgIFxuXHQiCisgICAgInhjaGdsICUwLCUlZWF4ICAgICAgICAgICBcblx0IgkvKiB0cnkgdG8gZ2V0IGxvY2sgKi8KKyAgICAiY21wbCAgJDAsJSVlYXggICAgICAgICAgIFxuXHQiCS8qIHRlc3QgaWYgc3VjY2Vzc2Z1bCAqLworICAgICJqZSAgICBjcml0aWNhbF9zZWN0aW9uICAgXG4iCisgICJzcGluX2xvb3A6ICAgICAgICAgICAgICAgICBcblx0IgorICAvKiIuYnl0ZSAweEYzLDB4OTAgICAgICAgICAgXG5cdCIqLwkvKiAicGF1c2UiIG9uIFA0IChzaG9ydCBkZWxheSkgKi8KKyAgICAiY21wbCAgJDAsJTAgICAgICAgICAgICAgIFxuXHQiCS8qIGNoZWNrIGlmIGxvY2sgaXMgZnJlZSAqLworICAgICJqbmUgICBzcGluX2xvb3AgICAgICAgICAgXG5cdCIKKyAgICAiam1wICAgZ2V0X2xvY2sgICAgICAgICAgIFxuIgorICAiY3JpdGljYWxfc2VjdGlvbjogICAgICAgICAgXG5cdCIKKyAgICAgOiAiPW0iIChsb2NrZikgOiAibSIgKGxvY2tmKSA6ICIlZWF4IgorICApOworCisgIC8qIElmIGZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbiBpcyBlbmFibGVkIChDUjAuRU0gPSAxKSwKKyAgICogZXhlY3V0aW5nIGFuIE1NWC8zRE5vdyEgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGVzIGludmFsaWQKKyAgICogb3Bjb2RlIGV4Y2VwdGlvbiAoI1VEKS4KKyAgICovCisgIGlmIChzaW1kICYgKEpTSU1EX01NWCB8IEpTSU1EXzNETk9XKSkgeworICAgIGlmICghc2V0am1wKGptcGJ1ZikpIHsKKyAgICAgIHNpZ25hbChTSUdJTEwsIGV4Y2VwdGlvbl9oYW5kbGVyKTsKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgIi5ieXRlIDB4MEYsMHg3NyIJCS8qIGVtbXMgKi8KKyAgICAgICk7CisgICAgICBzaWduYWwoU0lHSUxMLCBTSUdfREZMKTsKKyAgICB9IGVsc2UgeworICAgICAgc2ltZCAmPSB+KEpTSU1EX01NWCB8IEpTSU1EXzNETk9XKTsKKyAgICB9CisgIH0KKyAgaWYgKHNpbWQgJiAoSlNJTURfU1NFIHwgSlNJTURfU1NFMikpIHsKKyAgICBpZiAoIXNldGptcChqbXBidWYpKSB7CisgICAgICBzaWduYWwoU0lHSUxMLCBleGNlcHRpb25faGFuZGxlcik7CisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICJsZWFsICAlMCwlJWVheCAgICAgICAgXG5cdCIKKyAgICAgICAgIi5ieXRlIDB4MEYsMHhBRSwweDEwICBcblx0IgkvKiBsZG14Y3NyIFtlYXhdICovCisgICAgICAgICA6IDogIm0iIChteGNzcikgOiAiJWVheCIKKyAgICAgICk7CisgICAgICBzaWduYWwoU0lHSUxMLCBTSUdfREZMKTsKKyAgICB9IGVsc2UgeworICAgICAgc2ltZCAmPSB+KEpTSU1EX1NTRSB8IEpTSU1EX1NTRTIpOworICAgIH0KKyAgfQorCisgIC8qIGxlYXZlIGNyaXRpY2FsIHNlY3Rpb24gKi8KKyAgbG9ja2YgPSAwOwkvKiByZWxlYXNlIGxvY2sgKi8KKyNlbmRpZgkvKiBfX0dOVUNfXyAqLworCisgIHJldHVybiBzaW1kOworfQpkaWZmIC0tZ2l0IGEvanNpbWR3MzIuYXNtIGIvanNpbWR3MzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMmNkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qc2ltZHczMi5hc20KQEAgLTAsMCArMSwxMjEgQEAKKzsKKzsganNpbWR3MzIuYXNtIC0gU0lNRCBpbnN0cnVjdGlvbiBzdXBwb3J0IGNoZWNrIChmb3IgV2luMzIpCis7Cis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgTGFzdCBNb2RpZmllZCA6IFNlcHRlbWJlciAyNiwgMjAwNAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IENoZWNrIGlmIHRoZSBPUyBzdXBwb3J0cyBTSU1EIGluc3RydWN0aW9ucyAoV2luMzIpCis7Cis7IFJlZmVyZW5jZTogIldpbjMyIEV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgYXNzZW1ibGVyIHByb2dyYW1tZXJzIgorOyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuam9yZ29uLmZyZWVzZXJ2ZS5jby51ay9FeGNlcHQvRXhjZXB0Lmh0bQorOworOyBHTE9CQUwodW5zaWduZWQgaW50KQorOyBqcGVnX3NpbWRfb3Nfc3VwcG9ydCAodW5zaWduZWQgaW50IHNpbWQpCis7CisKKyVkZWZpbmUgc2ltZAllYnArOAkJCTsgdW5zaWduZWQgaW50IHNpbWQKKyVkZWZpbmUgbXhjc3IJZWJwLTQJCQk7IHVuc2lnbmVkIGludCBteGNzciA9IDB4MUY4MAorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX3NpbWRfb3Nfc3VwcG9ydCkKKworRVhUTihqcGVnX3NpbWRfb3Nfc3VwcG9ydCk6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2gJZHdvcmQgMHgxRjgwCQk7IGRlZmF1bHQgdmFsdWUgb2YgTVhDU1IgcmVnaXN0ZXIKKwlwdXNoCWV4Y2VwdGlvbl9oYW5kbGVyCisJcHVzaAlQT0lOVEVSIFtmczowXQkJOyBwcmV2X3JlY29yZF9wdHIKKwltb3YJUE9JTlRFUiBbZnM6MF0sIGVzcAk7IHRoaXNfcmVjb3JkX3B0cgorCisJbW92CWVheCwgRFdPUkQgW3NpbWRdCisJYW5kCWVheCwgYnl0ZSBKU0lNRF9BTEwKKwl4b3IJZWN4LGVjeAorCXhvcgllZHgsZWR4CisKKwk7IElmIGZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbiBpcyBlbmFibGVkIChDUjAuRU0gPSAxKSwKKwk7IGV4ZWN1dGluZyBhbiBNTVgvM0ROb3chIGluc3RydWN0aW9uIGdlbmVyYXRlcyBpbnZhbGlkCisJOyBvcGNvZGUgZXhjZXB0aW9uICgjVUQpLgorCisJbW92CWNsLCAoSlNJTURfTU1YIHwgSlNJTURfM0ROT1cpCisJbW92CWRsLCAoLm1teF8xIC0gLm1teF8wKQorCXRlc3QJYWwsY2wKKwlqeglzaG9ydCAubW14XzEKKy5tbXhfMDoJZW1tcwkJCQk7IGV4ZWN1dGluZyBNTVggaW5zdHJ1Y3Rpb24KKy5tbXhfMToKKwltb3YJY2wsIChKU0lNRF9TU0UgfCBKU0lNRF9TU0UyKQorCW1vdglkbCwgKC5zc2VfMSAtIC5zc2VfMCkKKwl0ZXN0CWFsLGNsCisJanoJc2hvcnQgLnNzZV8xCisuc3NlXzA6CWxkbXhjc3IJRFdPUkQgW214Y3NyXQkJOyBleGVjdXRpbmcgU1NFIGluc3RydWN0aW9uCisuc3NlXzE6CisKKwlwb3AJUE9JTlRFUiBbZnM6MF0JCTsgcHJldl9yZWNvcmRfcHRyCisJbW92CWVzcCxlYnAKKwlwb3AJZWJwCisJcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgTE9DQUwoRVhDRVBUSU9OX0RJU1BPU0lUSU9OKQorOyBleGNlcHRpb25faGFuZGxlciAoc3RydWN0IF9FWENFUFRJT05fUkVDT1JEICogRXhjZXB0aW9uUmVjb3JkLAorOyAgICAgICAgICAgICAgICAgICAgdm9pZCAqIEVzdGFibGlzaGVyRnJhbWUsIHN0cnVjdCBfQ09OVEVYVCAqIENvbnRleHRSZWNvcmQsCis7ICAgICAgICAgICAgICAgICAgICB2b2lkICogRGlzcGF0Y2hlckNvbnRleHQpOworOworCislZGVmaW5lIEV4Y2VwdGlvbkNvbnRpbnVlRXhlY3V0aW9uICAwCTsgZnJvbSA8ZXhjcHQuaD4KKyVkZWZpbmUgRXhjZXB0aW9uQ29udGludWVTZWFyY2ggICAgIDEJOyB0eXBlZGVmIGVudW0gX0VYQ0VQVElPTl9ESVNQT1NJVElPTiB7CislZGVmaW5lIEV4Y2VwdGlvbk5lc3RlZEV4Y2VwdGlvbiAgICAyCTsgICAuLi4KKyVkZWZpbmUgRXhjZXB0aW9uQ29sbGlkZWRVbndpbmQgICAgIDMJOyB9IEVYQ0VQVElPTl9ESVNQT1NJVElPTgorCislZGVmaW5lIEVYQ0VQVElPTl9JTExFR0FMX0lOU1RSVUNUSU9OICAgMHhDMDAwMDAxRAk7IGZyb20gPHdpbmJhc2UuaD4KKworJWRlZmluZSBFeGNlcHRpb25SZWNvcmQgICAgIGVzcCs0CTsgc3RydWN0IF9FWENFUFRJT05fUkVDT1JEICoKKyVkZWZpbmUgRXN0YWJsaXNoZXJGcmFtZSAgICBlc3ArOAk7IHZvaWQgKiBFc3RhYmxpc2hlckZyYW1lCislZGVmaW5lIENvbnRleHRSZWNvcmQgICAgICAgZXNwKzEyCTsgc3RydWN0IF9DT05URVhUICogQ29udGV4dFJlY29yZAorJWRlZmluZSBEaXNwYXRjaGVyQ29udGV4dCAgIGVzcCsxNgk7IHZvaWQgKiBEaXNwYXRjaGVyQ29udGV4dAorCislZGVmaW5lIEV4Y2VwdGlvbkNvZGUoYikgICAgKGIpKzAJOyBFeGNlcHRpb25SZWNvcmQtPkV4Y2VwdGlvbkNvZGUKKyVkZWZpbmUgRXhjZXB0aW9uRmxhZ3MoYikgICAoYikrNAk7IEV4Y2VwdGlvblJlY29yZC0+RXhjZXB0aW9uRmxhZ3MKKyVkZWZpbmUgQ29udGV4dF9FZHgoYikgICAgICAoYikrMTY4CTsgQ29udGV4dFJlY29yZC0+RWR4CislZGVmaW5lIENvbnRleHRfRWN4KGIpICAgICAgKGIpKzE3Mgk7IENvbnRleHRSZWNvcmQtPkVjeAorJWRlZmluZSBDb250ZXh0X0VheChiKSAgICAgIChiKSsxNzYJOyBDb250ZXh0UmVjb3JkLT5FYXgKKyVkZWZpbmUgQ29udGV4dF9FaXAoYikgICAgICAoYikrMTg0CTsgQ29udGV4dFJlY29yZC0+RWlwCisKKwlhbGlnbgkxNgorCitleGNlcHRpb25faGFuZGxlcjoKKwltb3YJZWR4LCBQT0lOVEVSIFtFeGNlcHRpb25SZWNvcmRdCisJbW92CWVheCwgRXhjZXB0aW9uQ29udGludWVTZWFyY2gKKworCWNtcAlEV09SRCBbRXhjZXB0aW9uRmxhZ3MoZWR4KV0sIGJ5dGUgMAorCWpuZQlzaG9ydCAucmV0dXJuCQkJOyBub25jb250aW51YWJsZSBleGNlcHRpb24KKwljbXAJRFdPUkQgW0V4Y2VwdGlvbkNvZGUoZWR4KV0sIEVYQ0VQVElPTl9JTExFR0FMX0lOU1RSVUNUSU9OCisJam5lCXNob3J0IC5yZXR1cm4JCQk7IG5vdCBhICNVRCBleGNlcHRpb24KKworCW1vdgllYXgsIFBPSU5URVIgW0NvbnRleHRSZWNvcmRdCisJbW92CWVjeCwgRFdPUkQgW0NvbnRleHRfRWN4KGVheCldCisJbW92CWVkeCwgRFdPUkQgW0NvbnRleHRfRWR4KGVheCldCisJbm90CWVjeAorCWFkZAlEV09SRCBbQ29udGV4dF9FaXAoZWF4KV0sIGVkeAk7IG5leHQgaW5zdHJ1Y3Rpb24KKwlhbmQJRFdPUkQgW0NvbnRleHRfRWF4KGVheCldLCBlY3gJOyB0dXJuIG9mZiBmbGFnCisJbW92CWVheCwgRXhjZXB0aW9uQ29udGludWVFeGVjdXRpb24KKy5yZXR1cm46CisJcmV0CisKZGlmZiAtLWdpdCBhL2xpYmpwZWcuc3BlYyBiL2xpYmpwZWcuc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzljMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlianBlZy5zcGVjCkBAIC0wLDAgKzEsMjM0IEBACislZGVmaW5lIExJQlZFUiA2Mi4xLjAKK1N1bW1hcnk6IEEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIEpQRUcgaW1hZ2UgZm9ybWF0IGZpbGVzICh3aXRoIFNJTUQgc3VwcG9ydCkKK1N1bW1hcnkoamEpOiBKUEVHILfBvLCy6MH8pdWloaWkpeuk8rC3pKaw2aTOpemlpKXWpeml6iAoeDg2IFNJTUQgwtCx/sjHKQorTmFtZTogbGlianBlZworVmVyc2lvbjogNmJ4MS4wMgorUmVsZWFzZTogMQorTGljZW5zZTogZGlzdHJpYnV0YWJsZQorR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9MaWJyYXJpZXMKK1NvdXJjZTA6IGh0dHA6Ly9jZXR1cy5zYWt1cmEubmUuanAvc29mdGxhYi9qcGVnLXg4NnNpbWQvc291cmNlcy9qcGVnc3JjLTZiLXg4NnNpbWQtMS4wMi50YXIuYnoyCitCdWlsZHJvb3Q6ICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1yb290CitFeGNsdXNpdmVBcmNoOiAle2l4ODZ9CitCdWlsZFByZXJlcTogbmFzbSA+PSAwLjk4LjI1CisKKyVwYWNrYWdlIGRldmVsCitTdW1tYXJ5OiBEZXZlbG9wbWVudCB0b29scyBmb3IgcHJvZ3JhbXMgd2hpY2ggd2lsbCB1c2UgdGhlIGxpYmpwZWcgbGlicmFyeS4KK1N1bW1hcnkoamEpOiBsaWJqcGVnIKXppaSl1qXppeqk8rvIpKal16XtpbCl6aXguP6ksbOryK+lxKG8pesKK0dyb3VwOiBEZXZlbG9wbWVudC9MaWJyYXJpZXMKK1JlcXVpcmVzOiBsaWJqcGVnID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CisKKyVkZXNjcmlwdGlvbgorVGhlIGxpYmpwZWcgcGFja2FnZSBjb250YWlucyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcKK0pQRUcgaW1hZ2VzLCBhcyB3ZWxsIGFzIHNpbXBsZSBjbGllbnQgcHJvZ3JhbXMgZm9yIGFjY2Vzc2luZyB0aGUKK2xpYmpwZWcgZnVuY3Rpb25zLiAgTGlianBlZyBjbGllbnQgcHJvZ3JhbXMgaW5jbHVkZSBjanBlZywgZGpwZWcsCitqcGVndHJhbiwgcmRqcGdjb20gYW5kIHdyanBnY29tLiAgQ2pwZWcgY29tcHJlc3NlcyBhbiBpbWFnZSBmaWxlIGludG8KK0pQRUcgZm9ybWF0LiAgRGpwZWcgZGVjb21wcmVzc2VzIGEgSlBFRyBmaWxlIGludG8gYSByZWd1bGFyIGltYWdlCitmaWxlLiAgSnBlZ3RyYW4gY2FuIHBlcmZvcm0gdmFyaW91cyB1c2VmdWwgdHJhbnNmb3JtYXRpb25zIG9uIEpQRUcKK2ZpbGVzLiAgUmRqcGdjb20gZGlzcGxheXMgYW55IHRleHQgY29tbWVudHMgaW5jbHVkZWQgaW4gYSBKUEVHIGZpbGUuCitXcmpwZ2NvbSBpbnNlcnRzIHRleHQgY29tbWVudHMgaW50byBhIEpQRUcgZmlsZS4KKworVGhlIGxpYmpwZWcgbGlicmFyeSBpbiB0aGlzIHBhY2thZ2UgdXNlcyBTSU1EIGluc3RydWN0aW9ucyBpZiBhdmFpbGFibGUuCitPbiBhIHByb2Nlc3NvciB0aGF0IHN1cHBvcnRzIFNJTUQgaW5zdHJ1Y3Rpb25zIChNTVgsIFNTRSwgZXRjKSwKK2l0IHJ1bnMgMi0zIHRpbWVzIGZhc3RlciB0aGFuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIGxpYmpwZWcuCisKKyVkZXNjcmlwdGlvbiAtbCBqYQorbGlianBlZyCl0aXDpbGhvKW4pMukzyBKUEVHILLowfyk8rC3pKaw2aTLyazN16TKpemlpKXWpeml6qTIoaQKK2xpYmpwZWcgtNi/9KTLpaKlr6W7pbmkuaTrsNmkzrTKw7GkyqWvpemlpKWipfOlyKXXpe2lsKXppeCkrAorvP2k4aTppOykxqSkpN6kuaGlbGlianBlZyClr6XppaSloqXzpcil16XtpbCl6aXgpMukzyBjanBlZywgZGpwZWcsCitqcGVndHJhbiwgcmRqcGdjb20sIHdyanBnY29tIKSspKKk6qTepLmhpWNqcGVnIKTPsujB/KXVpaGlpKXrpPIKK0pQRUcgt8G8sKTLsLW9zKS3pN6kuaGlZGpwZWcgpM8gSlBFRyCl1aWhpaSl66TyxMy+76TOsujB/KXVpaGlpKXrpMsKK8W4s6ukt6TepLmhpWpwZWd0cmFuIKTPIEpQRUcgpdWloaWkpeuky83NobmkysrRtLmk8rvcpLmks6TIpKy90M3opN6kuaGlCityZGpwZ2NvbSCkzyBKUEVHIKXVpaGlpKXrpMu03qTepOykxqSkpOulxqWtpbmlyLfBvLCkzqWzpeGl86XIpPLJvbyopLehpAord3JqcGdjb20gpM8gSlBFRyCl1aWhpaSl66TLpcalraW5pci3wbywpM6ls6XhpfOlyKTyxMmyw6S3pN6kuaGlCisKK6SzpM6l0aXDpbGhvKW4pMu8/aThpOmk7KTGpKSk6yBsaWJqcGVnIKXppaSl1qXppeqkz6GieDg2IFNJTUQgwtCx/sjHpMekuaGjCitNTVggpOQgU1NFIKTKpMmkziBTSU1EILHpu7u1oce9pPLB9cj3pLekxqSkpOul16Xtpbulw6W1vuWkx8awuu6ktaS7pOukyKGiCiulqqXqpbilyqXryMekziBsaWJqcGVnIKXppaSl1qXppeqkyMjms9Okt6TGIDKhwTPH3MT4xdmkzsKuxdmkx8awuu6kt6TepLmhoworCislZGVzY3JpcHRpb24gZGV2ZWwKK1RoZSBsaWJqcGVnLWRldmVsIHBhY2thZ2UgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlcyBhbmQgc3RhdGljIGxpYnJhcmllcworbmVjZXNzYXJ5IGZvciBkZXZlbG9waW5nIHByb2dyYW1zIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBKUEVHIGZpbGVzIHVzaW5nCit0aGUgbGlianBlZyBsaWJyYXJ5LgorCitJZiB5b3UgYXJlIGdvaW5nIHRvIGRldmVsb3AgcHJvZ3JhbXMgd2hpY2ggd2lsbCBtYW5pcHVsYXRlIEpQRUcgaW1hZ2VzLAoreW91IHNob3VsZCBpbnN0YWxsIGxpYmpwZWctZGV2ZWwuICBZb3UnbGwgYWxzbyBuZWVkIHRvIGhhdmUgdGhlIGxpYmpwZWcKK3BhY2thZ2UgaW5zdGFsbGVkLgorCislZGVzY3JpcHRpb24gZGV2ZWwgLWwgamEKK2xpYmpwZWctZGV2ZWwgpdGlw6WxobyluKTLpM+hpGxpYmpwZWcgpemlpKXWpeml6qTyu8ikw6TGIEpQRUcgpdWloaWkpeuk8gorsLekpqXXpe2lsKXppeCk8rOryK+kuaTrpM6ky8mszdekyqXYpcOlwKXVpaGlpKXrpMiluaW/pcalo6XDpa+l6aWkpdal6aXqpKwKK7z9pOGk6aTspMakpKTepLmhpQorCitKUEVHILLowfyk8rC3pKal16XtpbCl6aXgpPKzq8ivpLmk67rdpMukz6GkbGlianBlZy1kZXZlbCCk8gorpaSl86W5pcihvKXrpLekxrK8pLWkpKGlxrG7/qTLIGxpYmpwZWcgpdGlw6WxobyluKTipaSl86W5pcihvKXrpLmk6woryazN16SspKKk6qTepLmhpQorCislcHJlcAorJXNldHVwIC1xIC1uIGpwZWctNmJ4CisjIHN1cHByZXNzICJsaWJ0b29saXplIC0tY29weSAtLWZvcmNlIgorbXYgY29uZmlndXJlLmluIGNvbmZpZ3VyZS5pbl8KKworJWJ1aWxkCislY29uZmlndXJlIC0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1zdGF0aWMKKworbWFrZSBsaWJkaXI9JXtfbGliZGlyfSAlez9fc21wX21mbGFnc30KK0xEX0xJQlJBUllfUEFUSD0kTERfTElCUkFSWV9QQVRIOiRQV0QgbWFrZSB0ZXN0CisKKyVpbnN0YWxsCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCisKKyVtYWtlaW5zdGFsbAorI3N0cmlwIC1SIC5jb21tZW50ICRSUE1fQlVJTERfUk9PVC91c3IvYmluLyogfHwgOgorIy9zYmluL2xkY29uZmlnIC1uICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9CisKKyVwb3N0IC1wIC9zYmluL2xkY29uZmlnCisKKyVwb3N0dW4gLXAgL3NiaW4vbGRjb25maWcKKworJWNsZWFuCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCisKKyVmaWxlcworJWRlZmF0dHIoLSxyb290LHJvb3QpCislZG9jIHVzYWdlLmRvYyB3aXphcmQuZG9jIFJFQURNRQorJXtfbGliZGlyfS9saWJqcGVnLnNvLioKKyV7X2JpbmRpcn0vKgorJXtfbWFuZGlyfS8qLyoKKworJWZpbGVzIGRldmVsCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgbGlianBlZy5kb2MgY29kZXJ1bGVzLmRvYyBzdHJ1Y3R1cmUuZG9jIGV4YW1wbGUuYworJWRvYyBzaW1kXyoudHh0Cisle19saWJkaXJ9LyouYQorJXtfbGliZGlyfS8qLmxhCisle19saWJkaXJ9Lyouc28KKy91c3IvaW5jbHVkZS8qLmgKKworJWNoYW5nZWxvZworKiBTYXQgRmViIDA0IDIwMDYgTUlZQVNBS0EgTWFzYXJ1IDxhbGthaWRAY29yYWwub2NuLm5lLmpwPiAtIDZieDEuMDItMQorLSB1cGdyYWRlZCB0byA2YngxLjAyCisKKyogVGh1IEphbiAyNiAyMDA2IE1JWUFTQUtBIE1hc2FydSA8YWxrYWlkQGNvcmFsLm9jbi5uZS5qcD4gLSA2YngxLjAxLTEKKy0gdXBncmFkZWQgdG8gNmJ4MS4wMQorCisqIFRodSBNYXIgMjQgMjAwNSBNSVlBU0FLQSBNYXNhcnUgPGFsa2FpZEBjb3JhbC5vY24ubmUuanA+IC0gNmJ4MS4wLTEKKy0gYmFzZWQgb24gNmItMzMgZnJvbSBGZWRvcmEgQ29yZSAzIGFuZCBtb2RpZmllZCBmb3IgU0lNRC1leHRlbmRlZCBsaWJqcGVnCistIGFkZGVkIEphcGFuZXNlIHN1bW1hcnkgYW5kIGRlc2NyaXB0aW9uLCB3aGljaCBpcyBkZWxpdmVyZWQgZnJvbSBWaW5lIExpbnV4CistIG1vdmVkIHdpemFyZC5kb2MgdG8gbWFpbiBwYWNrYWdlCisKKyogVGh1IE9jdCAgNyAyMDA0IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDZiLTMzCistIEFkZCBVUkwuICAoIzEzNDc5MSkKKworKiBUdWUgSnVuIDE1IDIwMDQgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPgorLSByZWJ1aWx0CisKKyogVHVlIE1hciAwMiAyMDA0IEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4KKy0gcmVidWlsdAorCisqIEZyaSBGZWIgMTMgMjAwNCBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+CistIHJlYnVpbHQKKworKiBUaHUgU2VwIDI1IDIwMDMgSmVyZW15IEthdHogPGthdHpqQHJlZGhhdC5jb20+IDZiLTMwCistIHJlYnVpbGQgdG8gZml4IGd6aXBwZWQgZmlsZSBtZDVzdW1zICgjOTEyMTEpCisKKyogVHVlIFNlcCAyMyAyMDAzIEZsb3JpYW4gTGEgUm9jaGUgPEZsb3JpYW4uTGFSb2NoZUByZWRoYXQuZGU+CistIGRvIG5vdCBzZXQgcnBhdGgKKworKiBXZWQgSnVuIDA0IDIwMDMgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPgorLSByZWJ1aWx0CisKKyogVGh1IEZlYiAxMyAyMDAzIEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4gNmItMjcKKy0gQWRkIGxpYmpwZWctc2hhcmVkLnBhdGNoIHRvIGZpeCBzaGxpYnMgb24gcG93ZXJwYworCisqIFR1ZSBGZWIgMDQgMjAwMyBGbG9yaWFuIExhIFJvY2hlIDxGbG9yaWFuLkxhUm9jaGVAcmVkaGF0LmRlPgorLSBhZGQgc3ltbGluayB0byBzaGFyZWQgbGliCisKKyogV2VkIEphbiAyMiAyMDAzIFRpbSBQb3dlcnMgPHRpbXBAcmVkaGF0LmNvbT4KKy0gcmVidWlsdAorCisqIE1vbiBKYW4gIDYgMjAwMyBKb25hdGhhbiBCbGFuZGZvcmQgPGpyYkByZWRoYXQuY29tPgorLSBhZGQgZG9jcywgIzc2NTA4CisKKyogRnJpIERlYyAxMyAyMDAyIEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4gNmItMjMKKy0gTWVyZ2UgaW4gbXVsdGlsaWIgY2hhbmdlcworLSBfc21wX21mbGFncworCisqIFR1ZSBTZXAgMTAgMjAwMiBUaGFuIE5nbyA8dGhhbkByZWRoYXQuY29tPiA2Yi0yMgorLSB1c2UgJSVfbGliZGlyCisKKyogRnJpIEp1biAyMSAyMDAyIFRpbSBQb3dlcnMgPHRpbXBAcmVkaGF0LmNvbT4KKy0gYXV0b21hdGVkIHJlYnVpbGQKKworKiBUaHUgTWF5IDIzIDIwMDIgVGltIFBvd2VycyA8dGltcEByZWRoYXQuY29tPgorLSBhdXRvbWF0ZWQgcmVidWlsZAorCisqIFRodSBKYW4gMzEgMjAwMiBCZXJuaGFyZCBSb3NlbmtyYWVuemVyIDxiZXJvQHJlZGhhdC5jb20+IDZiLTE5CistIEZpeCBidWcgIzU5MDExCisKKyogTW9uIEphbiAyOCAyMDAyIEJlcm5oYXJkIFJvc2Vua3JhZW56ZXIgPGJlcm9AcmVkaGF0LmNvbT4gNmItMTgKKy0gRml4IGJ1ZyAjNTg5ODIKKworKiBXZWQgSmFuIDA5IDIwMDIgVGltIFBvd2VycyA8dGltcEByZWRoYXQuY29tPgorLSBhdXRvbWF0ZWQgcmVidWlsZAorCisqIFR1ZSBKdWwgMjQgMjAwMSBCaWxsIE5vdHRpbmdoYW0gPG5vdHRpbmdAcmVkaGF0LmNvbT4KKy0gcmVxdWlyZSBsaWJqcGVnID0gJSV7dmVyc2lvbn0KKworKiBTdW4gSnVuIDI0IDIwMDEgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPgorLSBCdW1wIHJlbGVhc2UgKyByZWJ1aWxkLgorCisqIE1vbiBEZWMgMTEgMjAwMCBUaGFuIE5nbyA8dGhhbkByZWRoYXQuY29tPgorLSByZWJ1aWx0IHdpdGggdGhlIGZpeGVkIGZpbGV1dGlscworLSB1c2UgJSV7X3RtcHBhdGh9CisKKyogV2VkIE5vdiAgOCAyMDAwIEJlcm5oYXJkIFJvc2Vua3JhZW56ZXIgPGJlcm9AcmVkaGF0LmNvbT4KKy0gZml4IGEgdHlwbyAoc3RyaXAgLVIgLmNvbW1lbnQsIG5vdCAuY29tbWVudHMpCisKKyogVGh1IEp1bCAxMyAyMDAwIFByb3NwZWN0b3IgPGJ1Z3ppbGxhQHJlZGhhdC5jb20+CistIGF1dG9tYXRpYyByZWJ1aWxkCisKKyogU2F0IEp1biAxNyAyMDAwIEJlcm5oYXJkIFJvc2Vua3JhZW56ZXIgPGJlcm9AcmVkaGF0LmNvbT4KKy0gRkhTaWZ5CistIGFkZCBzb21lIEMrKyB0d2Vha3MgdG8gdGhlIGhlYWRlcnMgYXMgc3VnZ2VzdGVkIGJ5IGJ1ZyAjOTgyMikKKworKiBXZWQgTWF5ICA1IDIwMDAgQmlsbCBOb3R0aW5naGFtIDxub3R0aW5nQHJlZGhhdC5jb20+CistIGNvbmZpZ3VyZSB0d2Vha3MgZm9yIGlhNjQ7IHJlbW92ZSBhbHBoYSBwYXRjaCAoaXQncyBwb2ludGxlc3MpCisKKyogU2F0IEZlYiAgNSAyMDAwIEJlcm5oYXJkIFJvc2Vua3Lk7nplciA8YmVyb0ByZWRoYXQuY29tPgorLSByZWJ1aWxkIHRvIGdldCBjb21wcmVzc2VkIG1hbiBwYWdlcworLSBmaXggZGVzY3JpcHRpb24KKy0gc29tZSBtaW5vciB0d2Vha3MgdG8gdGhlIHNwZWMgZmlsZQorLSBhZGQgZG9jcworLSBmaXggYnVpbGQgb24gYWxwaGEgKGFscGhhZXY2IHN0dWZmKQorCisqIFN1biBNYXIgMjEgMTk5OSBDcmlzdGlhbiBHYWZ0b24gPGdhZnRvbkByZWRoYXQuY29tPiAKKy0gYXV0byByZWJ1aWxkIGluIHRoZSBuZXcgYnVpbGQgZW52aXJvbm1lbnQgKHJlbGVhc2UgOSkKKworKiBXZWQgSmFuIDEzIDE5OTkgQ3Jpc3RpYW4gR2FmdG9uIDxnYWZ0b25AcmVkaGF0LmNvbT4KKy0gcGF0Y2ggdG8gYnVpbGQgb24gYXJtCistIGJ1aWxkIGZvciBnbGliYyAyLjEKKworKiBNb24gT2N0IDEyIDE5OTggQ3Jpc3RpYW4gR2FmdG9uIDxnYWZ0b25AcmVkaGF0LmNvbT4KKy0gc3RyaXAgYmluYXJpZXMKKworKiBNb24gQXVnICAzIDE5OTggSmVmZiBKb2huc29uIDxqYmpAcmVkaGF0LmNvbT4KKy0gZml4IGJ1aWxkcm9vdCBwcm9ibGVtLgorCisqIFR1ZSBKdW4gMDkgMTk5OCBQcm9zcGVjdG9yIFN5c3RlbSA8YnVnc0ByZWRoYXQuY29tPgorLSB0cmFuc2xhdGlvbnMgbW9kaWZpZWQgZm9yIGRlCisKKyogVGh1IEp1biAwNCAxOTk4IE1hcmMgRXdpbmcgPG1hcmNAcmVkaGF0LmNvbT4KKy0gdXAgdG8gcmVsZWFzZSA0CistIHJlbW92ZSBwYXRjaCB0aGF0IHNldCAoaW1wcm9wZXIpIHNvbmFtZSAtIGxpYmpwZWcgbm93IGRvZXMgaXQgaXRzZWxmCisKKyogVGh1IE1heSAwNyAxOTk4IFByb3NwZWN0b3IgU3lzdGVtIDxidWdzQHJlZGhhdC5jb20+CistIHRyYW5zbGF0aW9ucyBtb2RpZmllZCBmb3IgZGUsIGZyLCB0cgorCisqIEZyaSBNYXkgMDEgMTk5OCBDcmlzdGlhbiBHYWZ0b24gPGdhZnRvbkByZWRoYXQuY29tPgorLSBmaXhlZCBidWlsZCBvbiBtYW5oYXR0YW4KKworKiBXZWQgQXByIDA4IDE5OTggQ3Jpc3RpYW4gR2FmdG9uIDxnYWZ0b25AcmVkaGF0LmNvbT4KKy0gdXBncmFkZWQgdG8gdmVyc2lvbiA2YgorCisqIFdlZCBPY3QgMDggMTk5NyBEb25uaWUgQmFybmVzIDxkamJAcmVkaGF0LmNvbT4KKy0gbmV3IHBhY2thZ2UgdG8gcmVtb3ZlIGpwZWcgc3R1ZmYgZnJvbSBsaWJnciBhbmQgcHV0IGluIGl0J3Mgb3duIHBhY2thZ2UKZGlmZiAtLWdpdCBhL2x0Y29uZmlnIGIvbHRjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDIzNDdlNjkuLjAwMDAwMDAKLS0tIGEvbHRjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEyICswLDAgQEAKLSMhIC9iaW4vc2gKLQotIyBsdGNvbmZpZyAtIENyZWF0ZSBhIHN5c3RlbS1zcGVjaWZpYyBsaWJ0b29sLgotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2Ci0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0jIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBBIGxvdCBvZiB0aGlzIHNjcmlwdCBpcyB0YWtlbiBmcm9tIGF1dG9jb25mLTIuMTAuCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi1pZiB0ZXN0ICIke0NEUEFUSCtzZXR9IiA9IHNldDsgdGhlbiBDRFBBVEg9OyBleHBvcnQgQ0RQQVRIOyBmaQotCi1lY2hvPWVjaG8KLWlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbiA6Ci1lbHNlCi0gICMgVGhlIFNvbGFyaXMgYW5kIEFJWCBkZWZhdWx0IGVjaG8gcHJvZ3JhbSB1bnF1b3RlcyBiYWNrc2xhc2hlcy4KLSAgIyBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgdG8gcXVvdGUgYmFja3NsYXNoZXMgdXNpbmcKLSAgIyAgIGVjaG8gIiRzb21ldGhpbmciIHwgc2VkICdzL1xcL1xcXFwvZycKLSAgIyBTbywgd2UgZW11bGF0ZSBlY2hvIHdpdGggcHJpbnRmICclc1xuJwotICBlY2hvPSJwcmludGYgJXNcXG4iCi0gIGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbiA6Ci0gIGVsc2UKLSAgICAjIE9vcHMuICBXZSBoYXZlIG5vIHdvcmtpbmcgcHJpbnRmLiAgVHJ5IHRvIGZpbmQgYSBub3Qtc28tYnVnZ3kgZWNoby4KLSAgICBlY2hvPWVjaG8KLSAgICBJRlM9IiR7SUZTPSAJfSI7IHNhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgotICAgIGZvciBkaXIgaW4gJFBBVEggL3Vzci91Y2I7IGRvCi0gICAgICBpZiB0ZXN0IC1mICRkaXIvZWNobyAmJiB0ZXN0ICJYYCRkaXIvZWNobyAnXHQnYCIgPSAnWFx0JzsgdGhlbgotICAgICAgICBlY2hvPSIkZGlyL2VjaG8iCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBJRlM9IiRzYXZlX2lmcyIKLSAgZmkKLWZpCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKLSMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCi1Yc2VkPSdzZWQgLWUgcy9eWC8vJwotc2VkX3F1b3RlX3N1YnN0PSdzL1woW1xcIlxcYCRcXFxcXVwpL1xcXDEvZycKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi1kb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgXFxcXF1cKS9cXFwxL2cnCi0KLSMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtLgotcHJvZ25hbWU9YCRlY2hvICJYJDAiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLQotIyBDb25zdGFudHM6Ci1QUk9HUkFNPWx0Y29uZmlnCi1QQUNLQUdFPWxpYnRvb2wKLVZFUlNJT049MS4yCi1hY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC5jIDE+JjUnCi1hY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC5jICRMSUJTIDE+JjUnCi1ybT0icm0gLWYiCi0KLWhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKLQotIyBHbG9iYWwgdmFyaWFibGVzOgotY2FuX2J1aWxkX3NoYXJlZD15ZXMKLWVuYWJsZV9zaGFyZWQ9eWVzCi0jIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nLgotZW5hYmxlX3N0YXRpYz15ZXMKLWx0bWFpbj0KLXNpbGVudD0KLXNyY2Rpcj0KLWFjX2NvbmZpZ19ndWVzcz0KLWFjX2NvbmZpZ19zdWI9Ci1ob3N0PQotbm9ub3B0PQotdmVyaWZ5X2hvc3Q9eWVzCi13aXRoX2djYz1ubwotd2l0aF9nbnVfbGQ9bm8KLQotb2xkX0FSPSIkQVIiCi1vbGRfQ0M9IiRDQyIKLW9sZF9DRkxBR1M9IiRDRkxBR1MiCi1vbGRfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLW9sZF9MRD0iJExEIgotb2xkX0xOX1M9IiRMTl9TIgotb2xkX05NPSIkTk0iCi1vbGRfUkFOTElCPSIkUkFOTElCIgotCi0jIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucy4KLWFyZ3M9Ci1wcmV2PQotZm9yIG9wdGlvbgotZG8KLSAgY2FzZSAiJG9wdGlvbiIgaW4KLSAgLSo9Kikgb3B0YXJnPWBlY2hvICIkb3B0aW9uIiB8IHNlZCAncy9bLV9hLXpBLVowLTldKj0vLydgIDs7Ci0gICopIG9wdGFyZz0gOzsKLSAgZXNhYwotCi0gICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgotICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KLSAgICBldmFsICIkcHJldj1cJG9wdGlvbiIKLSAgICBwcmV2PQotICAgIGNvbnRpbnVlCi0gIGZpCi0KLSAgY2FzZSAiJG9wdGlvbiIgaW4KLSAgLS1oZWxwKSBjYXQgPDxFT00KLVVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gTFRNQUlOIFtIT1NUXQotCi1HZW5lcmF0ZSBhIHN5c3RlbS1zcGVjaWZpYyBsaWJ0b29sIHNjcmlwdC4KLQotICAgIC0tZGlzYWJsZS1zaGFyZWQgICAgICAgZG8gbm90IGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMKLSAgICAtLWRpc2FibGUtc3RhdGljICAgICAgIGRvIG5vdCBidWlsZCBzdGF0aWMgbGlicmFyaWVzCi0gICAgLS1oZWxwICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAotICAgIC0tbm8tdmVyaWZ5ICAgICAgICAgICAgZG8gbm90IHZlcmlmeSB0aGF0IEhPU1QgaXMgYSB2YWxpZCBob3N0IHR5cGUKLSAgICAtLXF1aWV0ICAgICAgICAgICAgICAgIHNhbWUgYXMgXGAtLXNpbGVudCcKLSAgICAtLXNpbGVudCAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCi0gICAgLS1zcmNkaXI9RElSICAgICAgICAgICBmaW5kIFxgY29uZmlnLmd1ZXNzJyBpbiBESVIKLSAgICAtLXZlcnNpb24gICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0Ci0gICAgLS13aXRoLWdjYyAgICAgICAgICAgICBhc3N1bWUgdGhhdCB0aGUgR05VIEMgY29tcGlsZXIgd2lsbCBiZSB1c2VkCi0gICAgLS13aXRoLWdudS1sZCAgICAgICAgICBhc3N1bWUgdGhhdCB0aGUgQyBjb21waWxlciB1c2VzIHRoZSBHTlUgbGlua2VyCi0KLUxUTUFJTiBpcyB0aGUgXGBsdG1haW4uc2gnIHNoZWxsIHNjcmlwdCBmcmFnbWVudCB0aGF0IHByb3ZpZGVzIGJhc2ljIGxpYnRvb2wKLWZ1bmN0aW9uYWxpdHkuCi0KLUhPU1QgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHN5c3RlbSBuYW1lIFtkZWZhdWx0PWd1ZXNzZWRdLgotRU9NCi0gIGV4aXQgMAotICA7OwotCi0gIC0tZGlzYWJsZS1zaGFyZWQpIGVuYWJsZV9zaGFyZWQ9bm8gOzsKLQotICAtLWRpc2FibGUtc3RhdGljKSBlbmFibGVfc3RhdGljPW5vIDs7Ci0KLSAgLS1xdWlldCB8IC0tc2lsZW50KSBzaWxlbnQ9eWVzIDs7Ci0KLSAgLS1zcmNkaXIpIHByZXY9c3JjZGlyIDs7Ci0gIC0tc3JjZGlyPSopIHNyY2Rpcj0iJG9wdGFyZyIgOzsKLQotICAtLW5vLXZlcmlmeSkgdmVyaWZ5X2hvc3Q9bm8gOzsKLQotICAtLXZlcnNpb24pIGVjaG8gIiRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OIjsgZXhpdCAwIDs7Ci0KLSAgLS13aXRoLWdjYykgd2l0aF9nY2M9eWVzIDs7Ci0gIC0td2l0aC1nbnUtbGQpIHdpdGhfZ251X2xkPXllcyA7OwotCi0gIC0qKQotICAgIGVjaG8gIiRwcm9nbmFtZTogdW5yZWNvZ25pemVkIG9wdGlvbiBcYCRvcHRpb24nIiAxPiYyCi0gICAgZWNobyAiJGhlbHAiIDE+JjIKLSAgICBleGl0IDEKLSAgICA7OwotCi0gICopCi0gICAgaWYgdGVzdCAteiAiJGx0bWFpbiI7IHRoZW4KLSAgICAgIGx0bWFpbj0iJG9wdGlvbiIKLSAgICBlbGlmIHRlc3QgLXogIiRob3N0IjsgdGhlbgotIyBUaGlzIGdlbmVyYXRlcyBhbiB1bm5lY2Vzc2FyeSB3YXJuaW5nIGZvciBzcGFyYy1zdW4tc29sYXJpczQuMS4zX1UxCi0jICAgICAgaWYgdGVzdCAtbiAiYGVjaG8gJG9wdGlvbnwgc2VkICdzL1stYS16MC05Ll0vL2cnYCI7IHRoZW4KLSMgICAgICAgIGVjaG8gIiRwcm9nbmFtZTogd2FybmluZyBcYCRvcHRpb24nIGlzIG5vdCBhIHZhbGlkIGhvc3QgdHlwZSIgMT4mMgotIyAgICAgIGZpCi0gICAgICBob3N0PSIkb3B0aW9uIgotICAgIGVsc2UKLSAgICAgIGVjaG8gIiRwcm9nbmFtZTogdG9vIG1hbnkgYXJndW1lbnRzIiAxPiYyCi0gICAgICBlY2hvICIkaGVscCIgMT4mMgotICAgICAgZXhpdCAxCi0gICAgZmkgOzsKLSAgZXNhYwotZG9uZQotCi1pZiB0ZXN0IC16ICIkbHRtYWluIjsgdGhlbgotICBlY2hvICIkcHJvZ25hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSBMVE1BSU4gZmlsZSIgMT4mMgotICBlY2hvICIkaGVscCIgMT4mMgotICBleGl0IDEKLWZpCi0KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuIDoKLWVsc2UKLSAgZWNobyAiJHByb2duYW1lOiBcYCRsdG1haW4nIGRvZXMgbm90IGV4aXN0IiAxPiYyCi0gIGVjaG8gIiRoZWxwIiAxPiYyCi0gIGV4aXQgMQotZmkKLQotIyBRdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgotbHRjb25maWdfYXJncz0KLWZvciBhcmcKLWRvCi0gIGNhc2UgIiRhcmciIGluCi0gICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XSopCi0gIGx0Y29uZmlnX2FyZ3M9IiRsdGNvbmZpZ19hcmdzICckYXJnJyIgOzsKLSAgKikgbHRjb25maWdfYXJncz0iJGx0Y29uZmlnX2FyZ3MgJGFyZyIgOzsKLSAgZXNhYwotZG9uZQotCi0jIEEgcmVsZXZhbnQgc3Vic2V0IG9mIEFDX0lOSVQuCi0KLSMgRmlsZSBkZXNjcmlwdG9yIHVzYWdlOgotIyAwIHN0YW5kYXJkIGlucHV0Ci0jIDEgZmlsZSBjcmVhdGlvbgotIyAyIGVycm9ycyBhbmQgd2FybmluZ3MKLSMgMyBzb21lIHN5c3RlbXMgbWF5IG9wZW4gaXQgdG8gL2Rldi90dHkKLSMgNCB1c2VkIG9uIHRoZSBLdWJvdGEgVGl0YW4KLSMgNSBjb21waWxlciBtZXNzYWdlcyBzYXZlZCBpbiBjb25maWcubG9nCi0jIDYgY2hlY2tpbmcgZm9yLi4uIG1lc3NhZ2VzIGFuZCByZXN1bHRzCi1pZiB0ZXN0ICIkc2lsZW50IiA9IHllczsgdGhlbgotICBleGVjIDY+L2Rldi9udWxsCi1lbHNlCi0gIGV4ZWMgNj4mMQotZmkKLWV4ZWMgNT4+Li9jb25maWcubG9nCi0KLSMgTkxTIG51aXNhbmNlcy4KLSMgT25seSBzZXQgTEFORyBhbmQgTENfQUxMIHRvIEMgaWYgYWxyZWFkeSBzZXQuCi0jIFRoZXNlIG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkgYmVjYXVzZSBub3QgYWxsIHN5c3RlbXMgdW5kZXJzdGFuZAotIyBlLmcuIExBTkc9QyAobm90YWJseSBTQ08pLgotaWYgdGVzdCAiJHtMQ19BTEwrc2V0fSIgPSBzZXQ7IHRoZW4gTENfQUxMPUM7IGV4cG9ydCBMQ19BTEw7IGZpCi1pZiB0ZXN0ICIke0xBTkcrc2V0fSIgICA9IHNldDsgdGhlbiBMQU5HPUM7ICAgZXhwb3J0IExBTkc7ICAgZmkKLQotaWYgKGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDMpIHwgZ3JlcCBjID4vZGV2L251bGw7IHRoZW4KLSAgIyBTdGFyZGVudCBWaXN0cmEgU1ZSNCBncmVwIGxhY2tzIC1lLCBzYXlzIGdoYXppQGNhaXAucnV0Z2Vycy5lZHUuCi0gIGlmIChlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDMpIHwgc2VkIHMvLW4veG4vIHwgZ3JlcCB4biA+L2Rldi9udWxsOyB0aGVuCi0gICAgYWNfbj0gYWNfYz0nCi0nIGFjX3Q9JwknCi0gIGVsc2UKLSAgICBhY19uPS1uIGFjX2M9IGFjX3Q9Ci0gIGZpCi1lbHNlCi0gIGFjX249IGFjX2M9J1xjJyBhY190PQotZmkKLQotaWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KLSAgIyBBc3N1bWUgdGhlIHNvdXJjZSBkaXJlY3RvcnkgaXMgdGhlIHNhbWUgb25lIGFzIHRoZSBwYXRoIHRvIGx0bWFpbi5zaC4KLSAgc3JjZGlyPWAkZWNobyAiJGx0bWFpbiIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotICB0ZXN0ICIkc3JjZGlyIiA9ICIkbHRtYWluIiAmJiBzcmNkaXI9LgotZmkKLQotdHJhcCAiJHJtIGNvbmZ0ZXN0KjsgZXhpdCAxIiAxIDIgMTUKLWlmIHRlc3QgIiR2ZXJpZnlfaG9zdCIgPSB5ZXM7IHRoZW4KLSAgIyBDaGVjayBmb3IgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViLgotICBhY19hdXhfZGlyPQotICBmb3IgYWNfZGlyIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uOyBkbwotICAgIGlmIHRlc3QgLWYgJGFjX2Rpci9jb25maWcuZ3Vlc3M7IHRoZW4KLSAgICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIGlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgotICAgIGVjaG8gIiRwcm9nbmFtZTogY2Fubm90IGZpbmQgY29uZmlnLmd1ZXNzIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uIiAxPiYyCi0gICAgZWNobyAiJGhlbHAiIDE+JjIKLSAgICBleGl0IDEKLSAgZmkKLSAgYWNfY29uZmlnX2d1ZXNzPSRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcwotICBhY19jb25maWdfc3ViPSRhY19hdXhfZGlyL2NvbmZpZy5zdWIKLQotICAjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCi0gIGlmICRhY19jb25maWdfc3ViIHN1bjQgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLSAgZWxzZQotICAgIGVjaG8gIiRwcm9nbmFtZTogY2Fubm90IHJ1biAkYWNfY29uZmlnX3N1YiIgMT4mMgotICAgIGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgZXhpdCAxCi0gIGZpCi0KLSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIiLi4uICRhY19jIiAxPiY2Ci0KLSAgaG9zdF9hbGlhcz0kaG9zdAotICBjYXNlICIkaG9zdF9hbGlhcyIgaW4KLSAgIiIpCi0gICAgaWYgaG9zdF9hbGlhcz1gJGFjX2NvbmZpZ19ndWVzc2A7IHRoZW4gOgotICAgIGVsc2UKLSAgICAgIGVjaG8gIiRwcm9nbmFtZTogY2Fubm90IGd1ZXNzIGhvc3QgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiIDE+JjIKLSAgICAgIGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgICBleGl0IDEKLSAgICBmaSA7OwotICBlc2FjCi0gIGhvc3Q9YCRhY19jb25maWdfc3ViICRob3N0X2FsaWFzYAotICBlY2hvICIkYWNfdCRob3N0IiAxPiY2Ci0KLSAgIyBNYWtlIHN1cmUgdGhlIGhvc3QgdmVyaWZpZWQuCi0gIHRlc3QgLXogIiRob3N0IiAmJiBleGl0IDEKLQotZWxpZiB0ZXN0IC16ICIkaG9zdCI7IHRoZW4KLSAgZWNobyAiJHByb2duYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgaG9zdCB0eXBlIGlmIHlvdSB1c2UgXGAtLW5vLXZlcmlmeSciIDE+JjIKLSAgZWNobyAiJGhlbHAiIDE+JjIKLSAgZXhpdCAxCi1lbHNlCi0gIGhvc3RfYWxpYXM9JGhvc3QKLWZpCi0KLSMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCi1jYXNlICIkaG9zdF9vcyIgaW4KLWxpbnV4LWdudSopIDs7Ci1saW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKLWVzYWMKLQotaG9zdF9jcHU9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAotaG9zdF92ZW5kb3I9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAotaG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCi0KLWNhc2UgIiRob3N0X29zIiBpbgotYWl4MyopCi0gICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQotICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgotICBpZiB0ZXN0ICIke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gc2V0OyB0aGVuCi0gICAgQ09MTEVDVF9OQU1FUz0KLSAgICBleHBvcnQgQ09MTEVDVF9OQU1FUwotICBmaQotICA7OwotZXNhYwotCi0jIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KLW9sZF9hcmNoaXZlX2NtZHM9JyRBUiBjcnUgJG9sZGxpYiRvbGRvYmpzJwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KLQotIyBTZXQgYSBzYW5lIGRlZmF1bHQgZm9yIGBBUicuCi10ZXN0IC16ICIkQVIiICYmIEFSPWFyCi0KLSMgSWYgUkFOTElCIGlzIG5vdCBzZXQsIHRoZW4gcnVuIHRoZSB0ZXN0LgotaWYgdGVzdCAiJHtSQU5MSUIrc2V0fSIgIT0gInNldCI7IHRoZW4KLSAgcmVzdWx0PW5vCi0KLSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHJhbmxpYi4uLiAkYWNfYyIgMT4mNgotICBJRlM9IiR7SUZTPSAJfSI7IHNhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgotICBmb3IgZGlyIGluICRQQVRIOyBkbwotICAgIHRlc3QgLXogIiRkaXIiICYmIGRpcj0uCi0gICAgaWYgdGVzdCAtZiAkZGlyL3JhbmxpYjsgdGhlbgotICAgICAgUkFOTElCPSJyYW5saWIiCi0gICAgICByZXN1bHQ9InJhbmxpYiIKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRzYXZlX2lmcyIKLQotICBlY2hvICIkYWNfdCRyZXN1bHQiIDE+JjYKLWZpCi0KLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzO1wkUkFOTElCIFwkb2xkbGliIgotICBvbGRfcG9zdGluc3RhbGxfY21kcz0iXCRSQU5MSUIgXCRvbGRsaWI7JG9sZF9wb3N0aW5zdGFsbF9jbWRzIgotZmkKLQotIyBDaGVjayB0byBzZWUgaWYgd2UgYXJlIHVzaW5nIEdDQy4KLWlmIHRlc3QgIiR3aXRoX2djYyIgIT0geWVzIHx8IHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgIyBJZiBDQyBpcyBub3Qgc2V0LCB0aGVuIHRyeSB0byBmaW5kIEdDQyBvciBhIHVzYWJsZSBDQy4KLSAgaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBnY2MuLi4gJGFjX2MiIDE+JjYKLSAgICBJRlM9IiR7SUZTPSAJfSI7IHNhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgotICAgIGZvciBkaXIgaW4gJFBBVEg7IGRvCi0gICAgICBJRlM9IiRzYXZlX2lmcyIKLSAgICAgIHRlc3QgLXogIiRkaXIiICYmIGRpcj0uCi0gICAgICBpZiB0ZXN0IC1mICRkaXIvZ2NjOyB0aGVuCi0JQ0M9ImdjYyIKLQlicmVhawotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSIkc2F2ZV9pZnMiCi0KLSAgICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gICAgICBlY2hvICIkYWNfdCRDQyIgMT4mNgotICAgIGVsc2UKLSAgICAgIGVjaG8gIiRhY190Im5vIDE+JjYKLSAgICBmaQotICBmaQotCi0gICMgTm90ICJnY2MiLCBzbyB0cnkgImNjIiwgcmVqZWN0aW5nICIvdXNyL3VjYi9jYyIuCi0gIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgY2MuLi4gJGFjX2MiIDE+JjYKLSAgICBJRlM9IiR7SUZTPSAJfSI7IHNhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgotICAgIGNjX3JlamVjdGVkPW5vCi0gICAgZm9yIGRpciBpbiAkUEFUSDsgZG8KLSAgICAgIHRlc3QgLXogIiRkaXIiICYmIGRpcj0uCi0gICAgICBpZiB0ZXN0IC1mICRkaXIvY2M7IHRoZW4KLQlpZiB0ZXN0ICIkZGlyL2NjIiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KLQkgIGNjX3JlamVjdGVkPXllcwotCSAgY29udGludWUKLQlmaQotCUNDPSJjYyIKLQlicmVhawotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSIkc2F2ZV9pZnMiCi0gICAgaWYgdGVzdCAkY2NfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KLSAgICAgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KLSAgICAgIHNldCBkdW1teSAkQ0MKLSAgICAgIHNoaWZ0Ci0gICAgICBpZiB0ZXN0ICQjIC1ndCAwOyB0aGVuCi0JIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCi0JIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCi0JIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KLQlzaGlmdAotCXNldCBkdW1teSAiJGRpci9jYyIgIiRAIgotCXNoaWZ0Ci0JQ0M9IiRAIgotICAgICAgZmkKLSAgICBmaQotCi0gICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICAgICAgZWNobyAiJGFjX3QkQ0MiIDE+JjYKLSAgICBlbHNlCi0gICAgICBlY2hvICIkYWNfdCJubyAxPiY2Ci0gICAgZmkKLQotICAgIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgICAgIGVjaG8gIiRwcm9nbmFtZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgY2MgZm91bmQgaW4gXCRQQVRIIiAxPiYyCi0gICAgICBleGl0IDEKLSAgICBmaQotICBmaQotCi0gICMgTm93IHNlZSBpZiB0aGUgY29tcGlsZXIgaXMgcmVhbGx5IEdDQy4KLSAgd2l0aF9nY2M9bm8KLSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMuLi4gJGFjX2MiIDE+JjYKLSAgZWNobyAiJHByb2duYW1lOjQyNDogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMiID4mNQotCi0gICRybSBjb25mdGVzdC5jCi0gIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKLSNpZmRlZiBfX0dOVUNfXwotICB5ZXM7Ci0jZW5kaWYKLUVPRgotICBpZiB7IGFjX3RyeT0nJHtDQy1jY30gLUUgY29uZnRlc3QuYyc7IHsgKGV2YWwgZWNobyAkcHJvZ25hbWU6NDMyOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHllcyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICB3aXRoX2djYz15ZXMKLSAgZmkKLSAgJHJtIGNvbmZ0ZXN0LmMKLSAgZWNobyAiJGFjX3Qkd2l0aF9nY2MiIDE+JjYKLWZpCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1zZXQgZHVtbXkgJENDCi1jb21waWxlcj0iJDIiCi0KLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRhY19jIiAxPiY2Ci1waWNfZmxhZz0KLXNwZWNpYWxfc2hsaWJfY29tcGlsZV9mbGFncz0KLXdsPQotbGlua19zdGF0aWNfZmxhZz0KLW5vX2J1aWx0aW5fZmxhZz0KLQotaWYgdGVzdCAiJHdpdGhfZ2NjIiA9IHllczsgdGhlbgotICB3bD0nLVdsLCcKLSAgbGlua19zdGF0aWNfZmxhZz0nLXN0YXRpYycKLSAgbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJwotCi0gIGNhc2UgIiRob3N0X29zIiBpbgotICBhaXgzKiB8IGFpeDQqIHwgaXJpeDUqIHwgaXJpeDYqIHwgb3NmMyogfCBvc2Y0KikKLSAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICA7OwotICBvczIqKQotICAgICMgV2UgY2FuIGJ1aWxkIERMTHMgZnJvbSBub24tUElDLgotICAgIDs7Ci0gIGFtaWdhb3MqKQotICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgIHBpY19mbGFnPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgOzsKLSAgKikKLSAgICBwaWNfZmxhZz0nLWZQSUMnCi0gICAgOzsKLSAgZXNhYwotZWxzZQotICAjIFBPUlRNRSBDaGVjayBmb3IgUElDIGZsYWdzIGZvciB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgYWl4MyogfCBhaXg0KikKLSAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgbGlua19zdGF0aWNfZmxhZz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotICAgIDs7Ci0KLSAgaHB1eDkqIHwgaHB1eDEwKikKLSAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGxpbmtfc3RhdGljX2ZsYWcgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPwotICAgIHdsPSctV2wsJwotICAgIGxpbmtfc3RhdGljX2ZsYWc9IiR7d2x9LWEgJHt3bH1hcmNoaXZlIgotICAgIHBpY19mbGFnPScrWicKLSAgICA7OwotCi0gIGlyaXg1KiB8IGlyaXg2KikKLSAgICB3bD0nLVdsLCcKLSAgICBsaW5rX3N0YXRpY19mbGFnPSctbm9uX3NoYXJlZCcKLSAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCi0gICAgOzsKLQotICBvczIqKQotICAgICMgV2UgY2FuIGJ1aWxkIERMTHMgZnJvbSBub24tUElDLgotICAgIDs7Ci0KLSAgb3NmMyogfCBvc2Y0KikKLSAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KLSAgICB3bD0nLVdsLCcKLSAgICBsaW5rX3N0YXRpY19mbGFnPSctbm9uX3NoYXJlZCcKLSAgICA7OwotCi0gIHNjbzMuMnY1KikKLSAgICBwaWNfZmxhZz0nLUtwaWMnCi0gICAgbGlua19zdGF0aWNfZmxhZz0nLWRuJwotICAgIHNwZWNpYWxfc2hsaWJfY29tcGlsZV9mbGFncz0nLWJlbGYnCi0gICAgOzsKLQotICBzb2xhcmlzMiopCi0gICAgcGljX2ZsYWc9Jy1LUElDJwotICAgIGxpbmtfc3RhdGljX2ZsYWc9Jy1Cc3RhdGljJwotICAgIHdsPSctV2wsJwotICAgIDs7Ci0KLSAgc3Vub3M0KikKLSAgICBwaWNfZmxhZz0nLVBJQycKLSAgICBsaW5rX3N0YXRpY19mbGFnPSctQnN0YXRpYycKLSAgICB3bD0nLVFvcHRpb24gbGQgJwotICAgIDs7Ci0KLSAgc3lzdjQuMnV3MiopCi0gICAgcGljX2ZsYWc9Jy1LUElDJwotICAgIGxpbmtfc3RhdGljX2ZsYWc9Jy1Cc3RhdGljJwotICAgIHdsPSctV2wsJwotICAgIDs7Ci0KLSAgdXRzNCopCi0gICAgcGljX2ZsYWc9Jy1waWMnCi0gICAgbGlua19zdGF0aWNfZmxhZz0nLUJzdGF0aWMnCi0gICAgOzsKLQotICAqKQotICAgIGNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICA7OwotICBlc2FjCi1maQotCi1pZiB0ZXN0IC1uICIkcGljX2ZsYWciOyB0aGVuCi0gIGVjaG8gIiRhY190JHBpY19mbGFnIiAxPiY2Ci0KLSAgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHBpY19mbGFnIGFjdHVhbGx5IHdvcmtzLgotICBlY2hvICRhY19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJHBpY19mbGFnIHdvcmtzLi4uICRhY19jIiAxPiY2Ci0gICRybSBjb25mdGVzdCoKLSAgZWNobyA+IGNvbmZ0ZXN0LmMKLSAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gIENGTEFHUz0iJENGTEFHUyAkcGljX2ZsYWcgLURQSUMiCi0gIGVjaG8gIiRwcm9nbmFtZTo1NDc6IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkcGljX2ZsYWcgd29ya3MiID4mNQotICBpZiB7IChldmFsIGVjaG8gJHByb2duYW1lOjU0ODogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IH0gJiYgdGVzdCAtcyBjb25mdGVzdC5vOyB0aGVuCi0gICAgIyBBcHBlbmQgYW55IHdhcm5pbmdzIHRvIHRoZSBjb25maWcubG9nLgotICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotCi0gICAgIyBPbiBIUC1VWCwgYm90aCBDQyBhbmQgR0NDIG9ubHkgd2FybiB0aGF0IFBJQyBpcyBzdXBwb3J0ZWQuLi4gdGhlbiB0aGV5Ci0gICAgIyBjcmVhdGUgbm9uLVBJQyBvYmplY3RzLiAgU28sIGlmIHRoZXJlIHdlcmUgYW55IHdhcm5pbmdzLCB3ZSBhc3N1bWUgdGhhdAotICAgICMgUElDIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgIGVjaG8gIiRhY190Im5vIDE+JjYKLSAgICAgIGNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIHBpY19mbGFnPQotICAgIGVsc2UKLSAgICAgIGVjaG8gIiRhY190InllcyAxPiY2Ci0gICAgICBwaWNfZmxhZz0iICRwaWNfZmxhZyIKLSAgICBmaQotICBlbHNlCi0gICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICBjYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgcGljX2ZsYWc9Ci0gICAgZWNobyAiJGFjX3Qibm8gMT4mNgotICBmaQotICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKLSAgJHJtIGNvbmZ0ZXN0KgotZWxzZQotICBlY2hvICIkYWNfdCJub25lIDE+JjYKLWZpCi0KLSMgQ2hlY2sgZm9yIGFueSBzcGVjaWFsIHNoYXJlZCBsaWJyYXJ5IGNvbXBpbGF0aW9uIGZsYWdzLgotaWYgdGVzdCAtbiAiJHNwZWNpYWxfc2hsaWJfY29tcGlsZV9mbGFncyI7IHRoZW4KLSAgZWNobyAiJHByb2duYW1lOiB3YXJuaW5nOiBcYCRDQycgcmVxdWlyZXMgXGAkc3BlY2lhbF9zaGxpYl9jb21waWxlX2ZsYWdzJyB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiAxPiYyCi0gIGlmIGVjaG8gIiRvbGRfQ0MgJG9sZF9DRkxBR1MgIiB8IGVncmVwIC1lICJbIAldJHNwZWNpYWxfc2hsaWJfY29tcGlsZV9mbGFnc1sgCV0iID4vZGV2L251bGw7IHRoZW4gOgotICBlbHNlCi0gICAgZWNobyAiJHByb2duYW1lOiBhZGQgXGAkc3BlY2lhbF9zaGxpYl9jb21waWxlX2ZsYWdzJyB0byB0aGUgQ0Mgb3IgQ0ZMQUdTIGVudiB2YXJpYWJsZSBhbmQgcmVjb25maWd1cmUiIDE+JjIKLSAgICBjYW5fYnVpbGRfc2hhcmVkPW5vCi0gIGZpCi1maQotCi1lY2hvICRhY19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGxpbmtfc3RhdGljX2ZsYWcgd29ya3MuLi4gJGFjX2MiIDE+JjYKLSRybSBjb25mdGVzdCoKLWVjaG8gJ21haW4oKXtyZXR1cm4oMCk7fScgPiBjb25mdGVzdC5jCi1zYXZlX0xERkxBR1M9IiRMREZMQUdTIgotTERGTEFHUz0iJExERkxBR1MgJGxpbmtfc3RhdGljX2ZsYWciCi1lY2hvICIkcHJvZ25hbWU6NTkxOiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGxpbmtfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotaWYgeyAoZXZhbCBlY2hvICRwcm9nbmFtZTo1OTI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgotICBlY2hvICIkYWNfdCRsaW5rX3N0YXRpY19mbGFnIiAxPiY2Ci1lbHNlCi0gIGVjaG8gIiRhY190Im5vbmUgMT4mNgotICBsaW5rX3N0YXRpY19mbGFnPQotZmkKLUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0kcm0gY29uZnRlc3QqCi0KLWlmIHRlc3QgLXogIiRMTl9TIjsgdGhlbgotICAjIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gdXNlIGxuIC1zLCBvciB3ZSBuZWVkIGhhcmQgbGlua3MuCi0gIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gJGFjX2MiIDE+JjYKLSAgJHJtIGNvbmZ0ZXN0ZGF0YQotICBpZiBsbiAtcyBYIGNvbmZ0ZXN0ZGF0YSAyPi9kZXYvbnVsbDsgdGhlbgotICAgICRybSBjb25mdGVzdGRhdGEKLSAgICBMTl9TPSJsbiAtcyIKLSAgZWxzZQotICAgIExOX1M9bG4KLSAgZmkKLSAgaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgotICAgIGVjaG8gIiRhY190InllcyAxPiY2Ci0gIGVsc2UKLSAgICBlY2hvICIkYWNfdCJubyAxPiY2Ci0gIGZpCi1maQotCi0jIE1ha2Ugc3VyZSBMRCBpcyBhbiBhYnNvbHV0ZSBwYXRoLgotaWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBhY19wcm9nPWxkCi0gIGlmIHRlc3QgIiR3aXRoX2djYyIgPSB5ZXM7IHRoZW4KLSAgICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KLSAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSBHQ0MuLi4gJGFjX2MiIDE+JjYKLSAgICBlY2hvICIkcHJvZ25hbWU6NjI0OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSBHQ0MiID4mNQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAKLSAgICBjYXNlICIkYWNfcHJvZyIgaW4KLSAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KLSAgICAvKiB8IFtBLVphLXpdOlxcKikKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgotICAgICAgOzsKLSAgICAiIikKLSAgICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmUgbm90IHVzaW5nIEdDQy4KLSAgICAgIGFjX3Byb2c9bGQKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KLSAgICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICRhY19jIiAxPiY2Ci0gICAgZWNobyAiJHByb2duYW1lOjY0MjogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci0gIGVsc2UKLSAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIiLi4uICRhY19jIiAxPiY2Ci0gICAgZWNobyAiJHByb2duYW1lOjY0NTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQotICBmaQotCi0gIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgotICAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyI7IHRoZW4KLQlMRD0iJGFjX2Rpci8kYWNfcHJvZyIKLQkjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0JIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgotCSMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgotCWlmICIkTEQiIC12IDI+JjEgPCAvZGV2L251bGwgfCBlZ3JlcCAnKEdOVXx3aXRoIEJGRCknID4gL2Rldi9udWxsOyB0aGVuCi0JICB0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCi0JZWxzZQotCSAgdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKLQlmaQotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSIkYWNfc2F2ZV9pZnMiCi0gIGZpCi0KLSAgaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICAgIGVjaG8gIiRhY190JExEIiAxPiY2Ci0gIGVsc2UKLSAgICBlY2hvICIkYWNfdCJubyAxPiY2Ci0gIGZpCi0KLSAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgotICAgIGVjaG8gIiRwcm9nbmFtZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAxPiYyCi0gICAgZXhpdCAxCi0gIGZpCi1maQotCi0jIENoZWNrIHRvIHNlZSBpZiBpdCByZWFsbHkgaXMgb3IgaXMgbm90IEdOVSBsZC4KLWVjaG8gJGFjX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICRhY19jIiAxPiY2Ci0jIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgotaWYgJExEIC12IDI+JjEgPC9kZXYvbnVsbCB8IGVncmVwICcoR05VfHdpdGggQkZEKScgMT4mNTsgdGhlbgotICB3aXRoX2dudV9sZD15ZXMKLWVsc2UKLSAgd2l0aF9nbnVfbGQ9bm8KLWZpCi1lY2hvICIkYWNfdCR3aXRoX2dudV9sZCIgMT4mNgotCi0jIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkYWNfYyIgMT4mNgotCi1hbGxvd191bmRlZmluZWRfZmxhZz0KLW5vX3VuZGVmaW5lZF9mbGFnPQotYXJjaGl2ZV9jbWRzPQotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Ci1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQotaGFyZGNvZGVfZGlyZWN0PW5vCi1oYXJkY29kZV9taW51c19MPW5vCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCi1ydW5wYXRoX3Zhcj0KLQotY2FzZSAiJGhvc3Rfb3MiIGluCi1hbWlnYW9zKiB8IHN1bm9zNCopCi0gICMgT24gdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMsIHdlIHNob3VsZCB0cmVhdCBHTlUgbGQgbGlrZSB0aGUgc3lzdGVtIGxkLgotICBnbnVfbGRfYWN0c19uYXRpdmU9eWVzCi0gIDs7Ci0qKQotICBnbnVfbGRfYWN0c19uYXRpdmU9bm8KLSAgOzsKLWVzYWMKLQotbGRfc2hsaWJzPXllcwotaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllcyAmJiB0ZXN0ICIkZ251X2xkX2FjdHNfbmF0aXZlIiAhPSB5ZXM7IHRoZW4KLQotICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KLSAgaWYgJExEIC0taGVscCAyPiYxIHwgZWdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYiRsaWJvYmpzJwotICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgbGRfc2hsaWJzPXllcwotICBlbHNlCi0gICAgbGRfc2hsaWJzPW5vCi0gIGZpCi0KLSAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSB5ZXM7IHRoZW4KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotICBmaQotZWxzZQotICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCi0gIGNhc2UgIiRob3N0X29zIiBpbgotICBhaXgzKikKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotICAgIGFyY2hpdmVfY21kcz0nJE5NJGxpYm9ianMgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICdcJydzLy4qIC8vJ1wnJyA+ICRsaWIuZXhwOyRMRCAtbyAkb2JqZGlyLyRzb25hbWUkbGlib2JqcyAtYkU6JGxpYi5leHAgLVQ1MTIgLUg1MTIgLWJNOlNSRTskQVIgY3J1ICRsaWIgJG9iamRpci8kc29uYW1lJwotICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgotICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgaWYgdGVzdCAiJHdpdGhfZ2NjIiA9IHllcyAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KLSAgICAgICMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotICAgICAgIyBicm9rZW4gY29sbGVjdDIuCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKLSAgICBmaQotICAgIDs7Ci0KLSAgYWl4NCopCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSAgICBhcmNoaXZlX2NtZHM9JyROTSRsaWJvYmpzIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnXCcncy8uKiAvLydcJycgPiAkbGliLmV4cDskQ0MgLW8gJG9iamRpci8kc29uYW1lJGxpYm9ianMgJHt3bH0tYkU6JGxpYi5leHAgJHt3bH0tYk06U1JFICR7d2x9LWJub2VudHJ5OyRBUiBjcnUgJGxpYiAkb2JqZGlyLyRzb25hbWUnCi0gICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgOzsKLQotICBhbWlnYW9zKikKLSAgICBhcmNoaXZlX2NtZHM9JyRybSAkb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGE7JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGE7JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGE7JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvYmpkaXIvYTJpeGxpYnJhcnkuZGF0YTskZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvYmpkaXIvYTJpeGxpYnJhcnkuZGF0YTskQVIgY3J1ICRsaWIkbGlib2JqczskUkFOTElCICRsaWI7KGNkICRvYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICA7OwotCi0gICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgotICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KLSAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICMgZXh0cmEgc3BhY2UpLgotICBmcmVlYnNkMi4yKikKLSAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliJGxpYm9ianMgL3Vzci9saWIvYysrcnQwLm8nCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICA7OwotCi0gICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgZnJlZWJzZDIqKQotICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIkbGlib2JqcycKLSAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgOzsKLQotICAjIEZyZWVCU0QgMywgYXQgbGFzdCwgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICBmcmVlYnNkMyopCi0gICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliJGxpYm9ianMnCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICA7OwotCi0gIGhwdXg5KikKLSAgICBhcmNoaXZlX2NtZHM9JyRybSAkb2JqZGlyLyRzb25hbWU7JExEIC1iICtzICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb2JqZGlyLyRzb25hbWUkbGlib2JqczttdiAkb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCi0gICAgOzsKLQotICBocHV4MTAqKQotICAgIGFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK3MgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIkbGlib2JqcycKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCi0gICAgOzsKLQotICBpcml4NSogfCBpcml4NiopCi0gICAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAtbyAkbGliIC1zb25hbWUgJHNvbmFtZSAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyRsaWJvYmpzJwotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICA7OwotCi0gIG5ldGJzZCopCi0gICAgIyBUZXN0ZWQgd2l0aCBOZXRCU0QgMS4yIGxkCi0gICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiRsaWJvYmpzJwotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgIDs7Ci0KLSAgb3BlbmJzZCopCi0gICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiRsaWJvYmpzJwotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgIDs7Ci0KLSAgb3MyKikKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotICAgIGFyY2hpdmVfY21kcz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvYmpkaXIvJGxpYm5hbWUuZGVmOyRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvYmpkaXIvJGxpYm5hbWUuZGVmOyRlY2hvIERBVEEgPj4gJG9iamRpci8kbGlibmFtZS5kZWY7JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb2JqZGlyLyRsaWJuYW1lLmRlZjskZWNobyBFWFBPUlRTID4+ICRvYmpkaXIvJGxpYm5hbWUuZGVmO2VteGV4cCRsaWJvYmpzID4+ICRvYmpkaXIvJGxpYm5hbWUuZGVmOyRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliJGxpYm9ianMgJG9iamRpci8kbGlibmFtZS5kZWYnCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvYmpkaXIvJGxpYm5hbWUuYSAkb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICA7OwotCi0gIG9zZjMqIHwgb3NmNCopCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0gICAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1vICRsaWIgLXNvbmFtZSAkc29uYW1lIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nJGxpYm9ianMkZGVwbGlicycKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgOzsKLQotICBzY28zLjJ2NSopCi0gICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLW8gJGxpYiRsaWJvYmpzJwotICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICA7OwotCi0gIHNvbGFyaXMyKikKLSAgICBub191bmRlZmluZWRfZmxhZz0nIC16IHRleHQnCi0gICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIkbGlib2JqcycKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCi0gICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotCi0gICAgIyBTb2xhcmlzIDIgYmVmb3JlIDIuNSBoYXJkY29kZXMgLUwgcGF0aHMuCi0gICAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgc29sYXJpczIuWzAtNF0qKQotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgc3Vub3M0KikKLSAgICBpZiB0ZXN0ICIkd2l0aF9nY2MiID0geWVzOyB0aGVuCi0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIkbGlib2JqcycKLSAgICBlbHNlCi0gICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliJGxpYm9ianMnCi0gICAgZmkKLQotICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tZXhwb3J0LWR5bmFtaWMnCi0gICAgZmkKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgIDs7Ci0KLSAgdXRzNCopCi0gICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliJGxpYm9ianMnCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgIGhhcmRjb2RlX21pbnVzX0w9bm8KLSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgOzsKLQotICAqKQotICAgIGxkX3NobGlicz1ubwotICAgIGNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICA7OwotICBlc2FjCi1maQotZWNobyAiJGFjX3QkbGRfc2hsaWJzIiAxPiY2Ci0KLWlmIHRlc3QgLXogIiROTSI7IHRoZW4KLSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEJTRC1jb21wYXRpYmxlIG5tLi4uICRhY19jIiAxPiY2Ci0gIGNhc2UgIiROTSIgaW4KLSAgLyogfCBbQS1aYS16XTpcXCopIDs7ICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICAqKQotICAgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfToiCi0gICAgZm9yIGFjX2RpciBpbiAvdXNyL3VjYiAvdXNyL2Njcy9iaW4gJFBBVEggL2JpbjsgZG8KLSAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgICBpZiB0ZXN0IC1mICRhY19kaXIvbm07IHRoZW4KLSAgICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCi0gICAgICAgICMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6Ci0gICAgICAgICMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKLSAgICAgICAgaWYgKCRhY19kaXIvbm0gLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJzsgZXhpdCAwKSB8IGVncmVwIC9kZXYvbnVsbCA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAgTk09IiRhY19kaXIvbm0gLUIiCi0gICAgICAgIGVsaWYgKCRhY19kaXIvbm0gLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJzsgZXhpdCAwKSB8IGVncmVwIC9kZXYvbnVsbCA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAgTk09IiRhY19kaXIvbm0gLXAiCi0JZWxzZQotICAgICAgICAgIE5NPSIkYWNfZGlyL25tIgotCWZpCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBJRlM9IiRhY19zYXZlX2lmcyIKLSAgICB0ZXN0IC16ICIkTk0iICYmIE5NPW5tCi0gICAgOzsKLSAgZXNhYwotICBlY2hvICIkYWNfdCROTSIgMT4mNgotZmkKLQotIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KLWVjaG8gJGFjX24gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dC4uLiAkYWNfYyIgMT4mNgotCi0jIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KLSMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCi0KLSMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KLXN5bWNvZGU9J1tCQ0RFR1JTVFVdJwotCi0jIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KLXN5bXBhdD0nXChbX0EtWmEtel1bX0EtWmEtejAtOV0qXCknCi0KLSMgVHJhbnNmb3JtIHRoZSBhYm92ZSBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KLXN5bXhmcm09J1wxIFwxJwotCi0jIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgotY2FzZSAiJGhvc3Rfb3MiIGluCi1haXgqKQotICBzeW1jb2RlPSdbQkNEVFVdJwotICA7OwotaXJpeCopCi0gICMgQ2Fubm90IHVzZSB1bmRlZmluZWQgc3ltYm9scyBvbiBJUklYIGJlY2F1c2UgaW5saW5lZCBmdW5jdGlvbnMgbWVzcyB1cyB1cC4KLSAgc3ltY29kZT0nW0JDREVHUlNUXScKLSAgOzsKLXNvbGFyaXMyKikKLSAgc3ltY29kZT0nW0JEVFVdJwotICA7OwotZXNhYwotCi0jIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KLWlmICROTSAtViAyPiYxIHwgZWdyZXAgJyhHTlV8d2l0aCBCRkQpJyA+IC9kZXYvbnVsbDsgdGhlbgotICBzeW1jb2RlPSdbQUJDREdJU1RVV10nCi1maQotCi0jIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLiogJHN5bWNvZGUgJHN5bXBhdCQvJHN5bXhmcm0vcCciCi0KLSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgotcGlwZV93b3Jrcz1ubwotJHJtIGNvbmZ0ZXN0KgotY2F0ID4gY29uZnRlc3QuYyA8PEVPRgotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotY2hhciBubV90ZXN0X3ZhcjsKLXZvaWQgbm1fdGVzdF9mdW5jKCl7fQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLW1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KLUVPRgotCi1lY2hvICIkcHJvZ25hbWU6OTcxOiBjaGVja2luZyBpZiBnbG9iYWxfc3ltYm9sX3BpcGUgd29ya3MiID4mNQotaWYgeyAoZXZhbCBlY2hvICRwcm9nbmFtZTo5NzI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdC5vOyB0aGVuCi0gICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgotICBubGlzdD1jb25mdGVzdC5ubQotICBpZiB7IGVjaG8gIiRwcm9nbmFtZTo5NzU6IGV2YWwgXCIkTk0gY29uZnRlc3QubyB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPiAkbmxpc3RcIiIgPiY1OyBldmFsICIkTk0gY29uZnRlc3QubyB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPiAkbmxpc3QgMj4mNSI7IH0gJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgotCi0gICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KLSAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgotICAgICAgbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCi0gICAgICB3Y291dD1gd2MgIiRubGlzdCIgMj4vZGV2L251bGxgCi0gICAgICBjb3VudD1gJGVjaG8gIlgkd2NvdXQiIHwgJFhzZWQgLWUgJ3MvXlsgCV0qXChbMC05XVswLTldKlwpLiokL1wxLydgCi0gICAgICAodGVzdCAiJGNvdW50IiAtZ2UgMCkgMj4vZGV2L251bGwgfHwgY291bnQ9LTEKLSAgICBlbHNlCi0gICAgICBybSAtZiAiJG5saXN0IlQKLSAgICAgIGNvdW50PS0xCi0gICAgZmkKLQotICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KLSAgICBpZiBlZ3JlcCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgaWYgZWdyZXAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JY2F0IDw8RU9GID4gY29uZnRlc3QuYwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1FT0YKLSAgICAgICAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgotICAgICAgICBzZWQgJ3MvXi4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7LycgPCAiJG5saXN0IiA+PiBjb25mdGVzdC5jCi0KLQljYXQgPDxFT0YgPj4gY29uZnRlc3QuYwotI2lmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXwotIyBkZWZpbmUgX19wdHJfdCB2b2lkICoKLSNlbHNlCi0jIGRlZmluZSBfX3B0cl90IGNoYXIgKgotI2VuZGlmCi0KLS8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBpbiBkbGRfcHJlbG9hZGVkX3N5bWJvbHMsIC0xIGlmIHVuc29ydGVkLiAqLwotaW50IGRsZF9wcmVsb2FkZWRfc3ltYm9sX2NvdW50ID0gJGNvdW50OwotCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gKi8KLXN0cnVjdCB7Ci0gIGNoYXIgKm5hbWU7Ci0gIF9fcHRyX3QgYWRkcmVzczsKLX0KLWRsZF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KLXsKLUVPRgotICAgICAgICBzZWQgJ3MvXlwoLipcKSBcKC4qXCkkLyAgeyJcMSIsIChfX3B0cl90KSBcJlwyfSwvJyA8ICIkbmxpc3QiID4+IGNvbmZ0ZXN0LmMKLSAgICAgICAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC5jCi0gIHswLCAoX19wdHJfdCkgMH0KLX07Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi1FT0YKLSAgICAgICAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KLSAgICAgICAgbXYgY29uZnRlc3QubyBjb25mdGVzdG0ubwotCXNhdmVfTElCUz0iJExJQlMiCi0Jc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gICAgICAgIExJQlM9J2NvbmZ0ZXN0bS5vJwotCUNGTEFHUz0iJENGTEFHUyRub19idWlsdGluX2ZsYWciCi0gICAgICAgIGlmIHsgKGV2YWwgZWNobyAkcHJvZ25hbWU6MTAzMzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCi0gICAgICAgICAgcGlwZV93b3Jrcz15ZXMKLSAgICAgICAgZWxzZQotICAgICAgICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci0gICAgICAgICAgY2F0IGNvbmZ0ZXN0LmMgPiY1Ci0gICAgICAgIGZpCi0gICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCi0gICAgICBlbHNlCi0gICAgICAgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQotICAgIGZpCi0gIGVsc2UKLSAgICBlY2hvICJjYW5ub3QgcnVuICRnbG9iYWxfc3ltYm9sX3BpcGUiID4mNQotICBmaQotZWxzZQotICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotICBjYXQgY29uZnRlc3QuYyA+JjUKLWZpCi0kcm0gY29uZnRlc3QqCi0KLSMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KLWVjaG8gIiRhY190JHBpcGVfd29ya3MiIDE+JjYKLXRlc3QgIiRwaXBlX3dvcmtzIiA9IHllcyB8fCBnbG9iYWxfc3ltYm9sX3BpcGU9Ci0KLSMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgotZWNobyAkYWNfbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkYWNfYyIgMT4mNgotaGFyZGNvZGVfYWN0aW9uPQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8IFwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RhbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IG5vICYmIFwKLSAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vICYmIFwKLSAgICAgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiICE9IG5vOyB0aGVuCi0KLSAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgotICAgIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgaGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQotICBmaQotZWxpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB5ZXMgJiYgXAotICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0geWVzICYmIFwKLSAgICAgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiICE9IHllczsgdGhlbgotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZy4KLSAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCi1lbHNlCi0gICMgV2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcgZGlyZWN0b3JpZXMuCi0gIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKLWZpCi1lY2hvICIkYWNfdCRoYXJkY29kZV9hY3Rpb24iIDE+JjYKLXRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gdW5zdXBwb3J0ZWQgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi0KLXJlbG9hZF9mbGFnPQotcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAkYWNfYyIgMT4mNgotIyBQT1JUTUUgU29tZSBsaW5rZXIgbWF5IG5lZWQgYSBkaWZmZXJlbnQgcmVsb2FkIGZsYWcuCi1yZWxvYWRfZmxhZz0nLXInCi1lY2hvICIkYWNfdCRyZWxvYWRfZmxhZyIKLXRlc3QgLW4gIiRyZWxvYWRfZmxhZyIgJiYgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciCi0KLSMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0KLWVjaG8gJGFjX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkYWNfYyIgMT4mNgotY2FzZSAiJGhvc3Rfb3MiIGluCi1haXgzKiB8IGFpeDQqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zby4kdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zby4kbWFqb3InCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgIihjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hKSI7IChjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hKSB8fCBleGl0IDE7IGRvbmUnCi0gIDs7Ci0KLWZyZWVic2QyKiB8IGZyZWVic2QzKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28uJHZlcnN1ZmZpeCAkbGlibmFtZS5zbycKLSAgZmluaXNoX2NtZHM9J1BBVEg9IiRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1nbnUqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zby4kdmVyc3VmZml4JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1ocHV4OSogfCBocHV4MTAqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc2wuJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbC4kbWFqb3IgJGxpYm5hbWUuc2wnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbC4kbWFqb3InCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqKQotICB2ZXJzaW9uX3R5cGU9b3NmCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbycKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zby4kdmVyc3VmZml4ICRsaWJuYW1lLnNvJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0jIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCi1saW51eC1nbnVvbGRsZCogfCBsaW51eC1nbnVhb3V0KiB8IGxpbnV4LWdudWNvZmYqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eC1nbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zby4kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvLiRtYWpvciAkbGlibmFtZS5zbycKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvLiRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IiRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotCi0gIGlmIHRlc3QgLWYgL2xpYi9sZC5zby4xOyB0aGVuCi0gICAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKLSAgZWxzZQotICAgICMgT25seSB0aGUgR05VIGxkLnNvIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMgb24gTWtMaW51eC4KLSAgICBjYXNlICIkaG9zdF9jcHUiIGluCi0gICAgcG93ZXJwYyopIGR5bmFtaWNfbGlua2VyPW5vIDs7Ci0gICAgKikgZHluYW1pY19saW5rZXI9J0xpbnV4IGxkLnNvJyA7OwotICAgIGVzYWMKLSAgZmkKLSAgOzsKLQotbmV0YnNkKiB8IG9wZW5ic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zby4kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvLiR2ZXJzdWZmaXggJGxpYm5hbWUuc28nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLXNjbzMuMnY1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28uJG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvLiR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28uJG1ham9yICRsaWJuYW1lLnNvJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1zb2xhcmlzMiopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvLiR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28uJG1ham9yICRsaWJuYW1lLnNvJwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28uJG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zby4kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLXN5c3Y0LjJ1dzIqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zby4kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvLiRtYWpvciAkbGlibmFtZS5zbycKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvLiRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvLiR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28uJG1ham9yICRsaWJuYW1lLnNvJwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28uJG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwotZWNobyAiJGFjX3QkZHluYW1pY19saW5rZXIiCi10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi0jIFJlcG9ydCB0aGUgZmluYWwgY29uc2VxdWVuY2VzLgotZWNobyAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRjYW5fYnVpbGRfc2hhcmVkIiAxPiY2Ci0KLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkYWNfYyIgMT4mNgotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAiJGhvc3Rfb3MiIGluCi1haXgqKQotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kcztcJFJBTkxJQiBcJGxpYiIKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLWVjaG8gIiRhY190JGVuYWJsZV9zaGFyZWQiIDE+JjYKLQotIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi10ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLQotZWNobyAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICRlbmFibGVfc3RhdGljIiAxPiY2Ci0KLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gJGFjX2MiIDE+JjYKLXJtIC1mIC5saWJzIDI+L2Rldi9udWxsCi1ta2RpciAubGlicyAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAubGliczsgdGhlbgotICBvYmpkaXI9LmxpYnMKLWVsc2UKLSAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KLSAgb2JqZGlyPV9saWJzCi1maQotcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKLWVjaG8gIiRhY190JG9iamRpciIgMT4mNgotCi0jIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHksIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsLCBiZWNhdXNlIGl0IGlzCi0jIHVzZWQgbGF0ZXIuCi1sdGVjaG89IiRlY2hvIgotCi0jIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzLgotZm9yIHZhciBpbiBsdGVjaG8gb2xkX0NDIG9sZF9DRkxBR1Mgb2xkX0NQUEZMQUdTIG9sZF9MRCBvbGRfTk0gb2xkX1JBTkxJQiBcCi0gIG9sZF9MTl9TIEFSIENDIExEIExOX1MgTk0gcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgd2wgcGljX2ZsYWcgXAotICBsaW5rX3N0YXRpY19mbGFnIG5vX2J1aWx0aW5fZmxhZyBleHBvcnRfZHluYW1pY19mbGFnX3NwZWMgXAotICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIFJBTkxJQiBcCi0gIG9sZF9hcmNoaXZlX2NtZHMgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyBvbGRfcG9zdGluc3RhbGxfY21kcyBcCi0gIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgYXJjaGl2ZV9jbWRzIHBvc3RpbnN0YWxsX2NtZHMgcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWcgbm9fdW5kZWZpbmVkX2ZsYWcgXAotICBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBnbG9iYWxfc3ltYm9sX3BpcGUgXAotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I7IGRvCi0KLSAgY2FzZSAiJHZhciIgaW4KLSAgcmVsb2FkX2NtZHMgfCBvbGRfYXJjaGl2ZV9jbWRzIHwgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyB8IFwKLSAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgYXJjaGl2ZV9jbWRzIHwgXAotICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgZmluaXNoX2NtZHMpCi0gICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgIGV2YWwgIiR2YXI9XGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgIgotICAgIDs7Ci0gICopCi0gICAgZXZhbCAiJHZhcj1cYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYCIKLSAgICA7OwotICBlc2FjCi1kb25lCi0KLW9maWxlPWxpYnRvb2wKLXRyYXAgIiRybSAkb2ZpbGU7IGV4aXQgMSIgMSAyIDE1Ci1lY2hvIGNyZWF0aW5nICRvZmlsZQotJHJtICRvZmlsZQotY2F0IDw8RU9GID4gJG9maWxlCi0jISAvYmluL3NoCi0KLSMgbGlidG9vbCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTgotIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdGNvbmZpZyBvciBsdG1haW4uc2guCi0jCi0jIENvcHlyaWdodCAoQykgMTk5Ni0xOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotCi0jIFRoaXMgcHJvZ3JhbSB3YXMgY29uZmlndXJlZCBhcyBmb2xsb3dzLAotIyBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKLSMKLSMgQ0M9IiRvbGRfQ0MiIENGTEFHUz0iJG9sZF9DRkxBR1MiIENQUEZMQUdTPSIkb2xkX0NQUEZMQUdTIiBcXAotIyBMRD0iJG9sZF9MRCIgTk09IiRvbGRfTk0iIFJBTkxJQj0iJG9sZF9SQU5MSUIiIExOX1M9IiRvbGRfTE5fUyIgXFwKLSMgICAkMCRsdGNvbmZpZ19hcmdzCi0jCi0jIENvbXBpbGVyIGFuZCBvdGhlciB0ZXN0IG91dHB1dCBwcm9kdWNlZCBieSAkcHJvZ25hbWUsIHVzZWZ1bCBmb3IKLSMgZGVidWdnaW5nICRwcm9nbmFtZSwgaXMgaW4gLi9jb25maWcubG9nIGlmIGl0IGV4aXN0cy4KLQotIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KLVhzZWQ9InNlZCAtZSBzL15YLy8iCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi1pZiB0ZXN0ICJcJHtDRFBBVEgrc2V0fSIgPSBzZXQ7IHRoZW4gQ0RQQVRIPTsgZXhwb3J0IENEUEFUSDsgZmkKLQotIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCi1lY2hvPSIkbHRlY2hvIgotCi0jIFRoZSB2ZXJzaW9uIG9mICRwcm9nbmFtZSB0aGF0IGdlbmVyYXRlZCB0aGlzIHNjcmlwdC4KLUxUQ09ORklHX1ZFUlNJT049IiRWRVJTSU9OIgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIGxpYnRvb2wgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgb2xkLXN0eWxlIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0iJGhvc3RfYWxpYXMiCi1ob3N0PSIkaG9zdCIKLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0iJEFSIgotCi0jIFRoZSBkZWZhdWx0IEMgY29tcGlsZXIuCi1DQz0iJENDIgotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0iJExEIgotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSIkTE5fUyIKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0iJE5NIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0iJG9iamRpciIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9IiRyZWxvYWRfZmxhZyIKLXJlbG9hZF9jbWRzPSIkcmVsb2FkX2NtZHMiCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSIkd2wiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9IiRwaWNfZmxhZyIKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0iJGxpbmtfc3RhdGljX2ZsYWciCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0iJG5vX2J1aWx0aW5fZmxhZyIKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIgotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0iJGxpYm5hbWVfc3BlYyIKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSIkbGlicmFyeV9uYW1lc19zcGVjIgotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9IiRzb25hbWVfc3BlYyIKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSIkUkFOTElCIgotb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHMiCi1vbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzIgotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0iJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9IiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIgotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kcyIKLXBvc3RpbnN0YWxsX2NtZHM9IiRwb3N0aW5zdGFsbF9jbWRzIgotcG9zdHVuaW5zdGFsbF9jbWRzPSIkcG9zdHVuaW5zdGFsbF9jbWRzIgotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRhbGxvd191bmRlZmluZWRfZmxhZyIKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9IiRub191bmRlZmluZWRfZmxhZyIKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0iJGZpbmlzaF9jbWRzIgotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0iJGZpbmlzaF9ldmFsIgotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9IiRnbG9iYWxfc3ltYm9sX3BpcGUiCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0Ci0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyCi0KLUVPRgotCi1jYXNlICIkaG9zdF9vcyIgaW4KLWFpeDMqKQotICBjYXQgPDxcRU9GID4+ICRvZmlsZQotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIiR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgQ09MTEVDVF9OQU1FUz0KLSAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLWZpCi0KLUVPRgotICA7OwotZXNhYwotCi0jIEFwcGVuZCB0aGUgbHRtYWluLnNoIHNjcmlwdC4KLWNhdCAiJGx0bWFpbiIgPj4gJG9maWxlIHx8IChybSAtZiAkb2ZpbGU7IGV4aXQgMSkKLQotY2htb2QgK3ggJG9maWxlCi1leGl0IDAKLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIG1vZGU6c2hlbGwtc2NyaXB0Ci0jIHNoLWluZGVudGF0aW9uOjIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCmluZGV4IGU5MzUwYjMuLjBkYmNhMWUgMTAwNjQ0Ci0tLSBhL2x0bWFpbi5zaAorKysgYi9sdG1haW4uc2gKQEAgLTEsOCArMSw5IEBACiAjIGx0bWFpbi5zaCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBOT1RFOiBDaGFuZ2luZyB0aGlzIGZpbGUgd2lsbCBub3QgYWZmZWN0IGFueXRoaW5nIHVudGlsIHlvdSByZXJ1biBsdGNvbmZpZy4KKyMgTk9URTogQ2hhbmdpbmcgdGhpcyBmaWxlIHdpbGwgbm90IGFmZmVjdCBhbnl0aGluZyB1bnRpbCB5b3UgcmVydW4gY29uZmlndXJlLgogIwotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIzLDE0ICsyNCw0MiBAQAogIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgogIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiAKKyMgQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgd29ya2luZyAkZWNoby4KK2lmIHRlc3QgIlgkMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgIHNoaWZ0CitlbGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKyAgOgorZWxpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgIyBZaXBwZWUsICRlY2hvIHdvcmtzIQorICA6CitlbHNlCisgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbCwgYW5kIHRoZW4gbWF5YmUgJGVjaG8gd2lsbCB3b3JrLgorICBleGVjICRTSEVMTCAiJDAiIC0tbm8tcmVleGVjICR7MSsiJEAifQorZmkKKworaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KKyAgc2hpZnQKKyAgY2F0IDw8RU9GCiskKgorRU9GCisgIGV4aXQgMAorZmkKKworIyBkZWZpbmUgU0VEIGZvciBoaXN0b3JpYyBsdGNvbmZpZydzIGdlbmVyYXRlZCBieSBMaWJ0b29sIDEuMwordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorCiAjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbS4KLXByb2duYW1lPWAkZWNobyAiJDAiIHwgc2VkICdzJV4uKi8lJSdgCitwcm9nbmFtZT1gJGVjaG8gIiQwIiB8ICR7U0VEfSAncyVeLiovJSUnYAogbW9kZW5hbWU9IiRwcm9nbmFtZSIKIAogIyBDb25zdGFudHMuCiBQUk9HUkFNPWx0bWFpbi5zaAogUEFDS0FHRT1saWJ0b29sCi1WRVJTSU9OPTEuMgorVkVSU0lPTj0xLjQuMworVElNRVNUQU1QPSIgKDEuOTIyLjIuMTEwIDIwMDIvMTAvMjMgMDE6Mzk6NTQpIgogCiBkZWZhdWx0X21vZGU9CiBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCkBAIC00MSwyMSArNzAsMzQgQEAKIAogIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwogIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLVhzZWQ9J3NlZCAtZSBzL15YLy8nCitYc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJwogc2VkX3F1b3RlX3N1YnN0PSdzL1woW1xcYFxcIiRcXFxcXVwpL1xcXDEvZycKKyMgdGVzdCBFQkNESUMgb3IgQVNDSUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2Nhc2UgYGVjaG8gQXxvZCAteGAgaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqW0NjXTEqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgU1AyTkw9InRyICdcMTAwJyAnXG4nIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgTkwyU1A9InRyICdcclxuJyAnXDEwMFwxMDAnIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqKSAjIEFzc3VtZSBBU0NJSSBiYXNlZCBzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgU1AyTkw9InRyICdcMDQwJyAnXDAxMiciICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgTkwyU1A9InRyICdcMDE1XDAxMicgJ1wwNDBcMDQwJyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2VzYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAogIyBOTFMgbnVpc2FuY2VzLgogIyBPbmx5IHNldCBMQU5HIGFuZCBMQ19BTEwgdG8gQyBpZiBhbHJlYWR5IHNldC4KICMgVGhlc2UgbXVzdCBub3QgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kCiAjIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCi1pZiB0ZXN0ICIke0xDX0FMTCtzZXR9IiA9IHNldDsgdGhlbiBMQ19BTEw9QzsgZXhwb3J0IExDX0FMTDsgZmkKLWlmIHRlc3QgIiR7TEFORytzZXR9IiAgID0gc2V0OyB0aGVuIExBTkc9QzsgICBleHBvcnQgTEFORzsgICBmaQotCi1pZiB0ZXN0ICIkTFRDT05GSUdfVkVSU0lPTiIgIT0gIiRWRVJTSU9OIjsgdGhlbgotICBlY2hvICIkbW9kZW5hbWU6IGx0Y29uZmlnIHZlcnNpb24gXGAkTFRDT05GSUdfVkVSU0lPTicgZG9lcyBub3QgbWF0Y2ggJFBST0dSQU0gdmVyc2lvbiBcYCRWRVJTSU9OJyIgMT4mMgotICBlY2hvICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiAgU2VlIHRoZSAkUEFDS0FHRSBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgotICBleGl0IDEKKyMgV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCitpZiB0ZXN0ICIke0xDX0FMTCtzZXR9IiA9IHNldDsgdGhlbgorICBzYXZlX0xDX0FMTD0iJExDX0FMTCI7IExDX0FMTD1DOyBleHBvcnQgTENfQUxMCiBmaQoraWYgdGVzdCAiJHtMQU5HK3NldH0iID0gc2V0OyB0aGVuCisgIHNhdmVfTEFORz0iJExBTkciOyBMQU5HPUM7IGV4cG9ydCBMQU5HCitmaQorCisjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAorOiAke0lGUz0iIAkifQogCiBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KICAgZWNobyAiJG1vZGVuYW1lOiBub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IiAxPiYyCkBAIC03Miw2ICsxMTQsOCBAQAogc2hvdz0iJGVjaG8iCiBzaG93X2hlbHA9CiBleGVjdXRlX2RsZmlsZXM9CitsbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCitvMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCiAKICMgUGFyc2Ugb3VyIGNvbW1hbmQgbGluZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuCiB3aGlsZSB0ZXN0ICQjIC1ndCAwCkBAIC03OSwxNiArMTIzLDE2IEBACiAgIGFyZz0iJDEiCiAgIHNoaWZ0CiAKLSAgY2FzZSAiJGFyZyIgaW4KKyAgY2FzZSAkYXJnIGluCiAgIC0qPSopIG9wdGFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKICAgKikgb3B0YXJnPSA7OwogICBlc2FjCiAKICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCiAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgotICAgIGNhc2UgIiRwcmV2IiBpbgorICAgIGNhc2UgJHByZXYgaW4KICAgICBleGVjdXRlX2RsZmlsZXMpCi0gICAgICBldmFsICIkcHJldj1cIlwkJHByZXYgXCRhcmdcIiIKKyAgICAgIGV4ZWN1dGVfZGxmaWxlcz0iJGV4ZWN1dGVfZGxmaWxlcyAkYXJnIgogICAgICAgOzsKICAgICAqKQogICAgICAgZXZhbCAiJHByZXY9XCRhcmciCkBAIC0xMDEsMTYgKzE0NSwyNiBAQAogICBmaQogCiAgICMgSGF2ZSB3ZSBzZWVuIGEgbm9uLW9wdGlvbmFsIGFyZ3VtZW50IHlldD8KLSAgY2FzZSAiJGFyZyIgaW4KKyAgY2FzZSAkYXJnIGluCiAgIC0taGVscCkKICAgICBzaG93X2hlbHA9eWVzCiAgICAgOzsKIAogICAtLXZlcnNpb24pCi0gICAgZWNobyAiJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04iCisgICAgZWNobyAiJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04kVElNRVNUQU1QIgogICAgIGV4aXQgMAogICAgIDs7CiAKKyAgLS1jb25maWcpCisgICAgJHtTRUR9IC1lICcxLC9eIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcvZCcgLWUgJy9eIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHLywkZCcgJDAKKyAgICBleGl0IDAKKyAgICA7OworCisgIC0tZGVidWcpCisgICAgZWNobyAiJHByb2duYW1lOiBlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorICAgIHNldCAteAorICAgIDs7CisKICAgLS1kcnktcnVuIHwgLW4pCiAgICAgcnVuPToKICAgICA7OwpAQCAtMTM1LDYgKzE4OSw4IEBACiAgIC0tbW9kZSkgcHJldm9wdD0iLS1tb2RlIiBwcmV2PW1vZGUgOzsKICAgLS1tb2RlPSopIG1vZGU9IiRvcHRhcmciIDs7CiAKKyAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykgZHVwbGljYXRlX2RlcHM9InllcyIgOzsKKwogICAtLXF1aWV0IHwgLS1zaWxlbnQpCiAgICAgc2hvdz06CiAgICAgOzsKQEAgLTE2MywyNCArMjE5LDI5IEBACiAgIGV4aXQgMQogZmkKIAorIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KK2V4ZWNfY21kPQorCiBpZiB0ZXN0IC16ICIkc2hvd19oZWxwIjsgdGhlbgogCiAgICMgSW5mZXIgdGhlIG9wZXJhdGlvbiBtb2RlLgogICBpZiB0ZXN0IC16ICIkbW9kZSI7IHRoZW4KLSAgICBjYXNlICIkbm9ub3B0IiBpbgotICAgICpjYyB8ICorKyB8IGdjYyogfCAqLWdjYyopCisgICAgY2FzZSAkbm9ub3B0IGluCisgICAgKmNjIHwgKisrIHwgZ2NjKiB8ICotZ2NjKiB8IHhsYyopCiAgICAgICBtb2RlPWxpbmsKICAgICAgIGZvciBhcmcKICAgICAgIGRvCi0gICAgICAgIGNhc2UgIiRhcmciIGluCi0gICAgICAgIC1jKQotICAgICAgICAgICBtb2RlPWNvbXBpbGUKLSAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYworCWNhc2UgJGFyZyBpbgorCS1jKQorCSAgIG1vZGU9Y29tcGlsZQorCSAgIGJyZWFrCisJICAgOzsKKwllc2FjCiAgICAgICBkb25lCiAgICAgICA7OwotICAgICpkYiB8ICpkYngpCisgICAgKmRiIHwgKmRieCB8ICpzdHJhY2UgfCAqdHJ1c3MpCiAgICAgICBtb2RlPWV4ZWN1dGUKICAgICAgIDs7CiAgICAgKmluc3RhbGwqfGNwfG12KQpAQCAtMTk1LDExICsyNTYsMTEgQEAKIAogICAgICAgIyBKdXN0IHVzZSB0aGUgZGVmYXVsdCBvcGVyYXRpb24gbW9kZS4KICAgICAgIGlmIHRlc3QgLXogIiRtb2RlIjsgdGhlbgotICAgICAgICBpZiB0ZXN0IC1uICIkbm9ub3B0IjsgdGhlbgotICAgICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCBpbmZlciBvcGVyYXRpb24gbW9kZSBmcm9tIFxgJG5vbm9wdCciIDE+JjIKLSAgICAgICAgZWxzZQotICAgICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCBpbmZlciBvcGVyYXRpb24gbW9kZSB3aXRob3V0IE1PREUtQVJHUyIgMT4mMgotICAgICAgICBmaQorCWlmIHRlc3QgLW4gIiRub25vcHQiOyB0aGVuCisJICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBjYW5ub3QgaW5mZXIgb3BlcmF0aW9uIG1vZGUgZnJvbSBcYCRub25vcHQnIiAxPiYyCisJZWxzZQorCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGluZmVyIG9wZXJhdGlvbiBtb2RlIHdpdGhvdXQgTU9ERS1BUkdTIiAxPiYyCisJZmkKICAgICAgIGZpCiAgICAgICA7OwogICAgIGVzYWMKQEAgLTIxNywzMSArMjc4LDExOCBAQAogICBoZWxwPSJUcnkgXGAkbW9kZW5hbWUgLS1oZWxwIC0tbW9kZT0kbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgogCiAgICMgVGhlc2UgbW9kZXMgYXJlIGluIG9yZGVyIG9mIGV4ZWN1dGlvbiBmcmVxdWVuY3kgc28gdGhhdCB0aGV5IHJ1biBxdWlja2x5LgotICBjYXNlICIkbW9kZSIgaW4KKyAgY2FzZSAkbW9kZSBpbgogICAjIGxpYnRvb2wgY29tcGlsZSBtb2RlCiAgIGNvbXBpbGUpCiAgICAgbW9kZW5hbWU9IiRtb2RlbmFtZTogY29tcGlsZSIKICAgICAjIEdldCB0aGUgY29tcGlsYXRpb24gY29tbWFuZCBhbmQgdGhlIHNvdXJjZSBmaWxlLgogICAgIGJhc2VfY29tcGlsZT0KKyAgICBwcmV2PQogICAgIGxhc3Rhcmc9CiAgICAgc3JjZmlsZT0iJG5vbm9wdCIKICAgICBzdXBwcmVzc19vdXRwdXQ9CiAKKyAgICB1c2VyX3RhcmdldD1ubwogICAgIGZvciBhcmcKICAgICBkbworICAgICAgY2FzZSAkcHJldiBpbgorICAgICAgIiIpIDs7CisgICAgICB4Y29tcGlsZXIpCisJIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KKwlwcmV2PQorCWxhc3Rhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisKKwljYXNlICRhcmcgaW4KKwkjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCisJIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKwkjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorCSpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCSAgYXJnPSJcIiRhcmdcIiIKKwkgIDs7CisJZXNhYworCisJIyBBZGQgdGhlIHByZXZpb3VzIGFyZ3VtZW50IHRvIGJhc2VfY29tcGlsZS4KKwlpZiB0ZXN0IC16ICIkYmFzZV9jb21waWxlIjsgdGhlbgorCSAgYmFzZV9jb21waWxlPSIkbGFzdGFyZyIKKwllbHNlCisJICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGxhc3RhcmciCisJZmkKKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisKICAgICAgICMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KLSAgICAgIGNhc2UgIiRhcmciIGluCisgICAgICBjYXNlICRhcmcgaW4KICAgICAgIC1vKQotCSRlY2hvICIkbW9kZW5hbWU6IHlvdSBjYW5ub3Qgc3BlY2lmeSB0aGUgb3V0cHV0IGZpbGVuYW1lIHdpdGggXGAtbyciIDE+JjIKLQkkZWNobyAiJGhlbHAiIDE+JjIKLQlleGl0IDEKKwlpZiB0ZXN0ICIkdXNlcl90YXJnZXQiICE9ICJubyI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBjYW5ub3Qgc3BlY2lmeSBcYC1vJyBtb3JlIHRoYW4gb25jZSIgMT4mMgorCSAgZXhpdCAxCisJZmkKKwl1c2VyX3RhcmdldD1uZXh0CiAJOzsKIAogICAgICAgLXN0YXRpYykKLQlidWlsZF9saWJ0b29sX2xpYnM9bm8KIAlidWlsZF9vbGRfbGlicz15ZXMKIAljb250aW51ZQogCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtWGNvbXBpbGVyKQorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtV2MsKikKKwlhcmdzPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgInMvXi1XYywvLyJgCisJbGFzdGFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgYXJnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisKKwkgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKwkgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisJICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorCSAgY2FzZSAkYXJnIGluCisJICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCSAgICBhcmc9IlwiJGFyZ1wiIgorCSAgICA7OworCSAgZXNhYworCSAgbGFzdGFyZz0iJGxhc3RhcmcgJGFyZyIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJbGFzdGFyZz1gJGVjaG8gIlgkbGFzdGFyZyIgfCAkWHNlZCAtZSAicy9eIC8vImAKKworCSMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorCWlmIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiOyB0aGVuCisJICBiYXNlX2NvbXBpbGU9IiRsYXN0YXJnIgorCWVsc2UKKwkgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgY2FzZSAkdXNlcl90YXJnZXQgaW4KKyAgICAgIG5leHQpCisJIyBUaGUgbmV4dCBvbmUgaXMgdGhlIC1vIHRhcmdldCBuYW1lCisJdXNlcl90YXJnZXQ9eWVzCisJY29udGludWUKKwk7OworICAgICAgeWVzKQorCSMgV2UgZ290IHRoZSBvdXRwdXQgZmlsZQorCXVzZXJfdGFyZ2V0PXNldAorCWxpYm9iaj0iJGFyZyIKKwljb250aW51ZQorCTs7CiAgICAgICBlc2FjCiAKICAgICAgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KQEAgLTI1NiwxMCArNDA0LDEwIEBACiAgICAgICBsYXN0YXJnPWAkZWNobyAiWCRsYXN0YXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKIAogICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgotICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkgaW4gc2NhbgotICAgICAgIyBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCi0gICAgICBjYXNlICIkbGFzdGFyZyIgaW4KLSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qKQorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICBjYXNlICRsYXN0YXJnIGluCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKIAlsYXN0YXJnPSJcIiRsYXN0YXJnXCIiCiAJOzsKICAgICAgIGVzYWMKQEAgLTI3MiwxMiArNDIwLDIzIEBACiAgICAgICBmaQogICAgIGRvbmUKIAotICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9iamVjdC4KLSAgICBsaWJvYmo9YCRlY2hvICJYJHNyY2ZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAgICBjYXNlICR1c2VyX3RhcmdldCBpbgorICAgIHNldCkKKyAgICAgIDs7CisgICAgbm8pCisgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCisgICAgICBsaWJvYmo9YCRlY2hvICJYJHNyY2ZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAgICAgIDs7CisgICAgKikKKyAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCBcYC1vJyIgMT4mMgorICAgICAgZXhpdCAxCisgICAgICA7OworICAgIGVzYWMKIAogICAgICMgUmVjb2duaXplIHNldmVyYWwgZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMuCi0gICAgeGZvcm09J1tjQ0ZTZm1zXScKLSAgICBjYXNlICIkbGlib2JqIiBpbgorICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIC1vIGZpbGUubywgaXQgaXMgcmVwbGFjZWQgd2l0aCBmaWxlLmxvCisgICAgeGZvcm09J1tjQ0ZTZm1zb10nCisgICAgY2FzZSAkbGlib2JqIGluCiAgICAgKi5hZGEpIHhmb3JtPWFkYSA7OwogICAgICouYWRiKSB4Zm9ybT1hZGIgOzsKICAgICAqLmFkcykgeGZvcm09YWRzIDs7CkBAIC0yOTIsMTAgKzQ1MSwxMCBAQAogCiAgICAgbGlib2JqPWAkZWNobyAiWCRsaWJvYmoiIHwgJFhzZWQgLWUgInMvXC4keGZvcm0kLy5sby8iYAogCi0gICAgY2FzZSAiJGxpYm9iaiIgaW4KLSAgICAqLmxvKSBvYmo9YCRlY2hvICJYJGxpYm9iaiIgfCAkWHNlZCAtZSAncy9cLmxvJC8uby8nYCA7OworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICoubG8pIG9iaj1gJGVjaG8gIlgkbGlib2JqIiB8ICRYc2VkIC1lICIkbG8ybyJgIDs7CiAgICAgKikKLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJHNyY2ZpbGUnIiAxPiYyCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSBcYCRsaWJvYmonIiAxPiYyCiAgICAgICBleGl0IDEKICAgICAgIDs7CiAgICAgZXNhYwpAQCAtMzA4LDExICs0NjcsNjUgQEAKIAogICAgICMgRGVsZXRlIGFueSBsZWZ0b3ZlciBsaWJyYXJ5IG9iamVjdHMuCiAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotICAgICAgJHJ1biAkcm0gJG9iaiAkbGlib2JqCi0gICAgICB0cmFwICIkcnVuICRybSAkb2JqICRsaWJvYmo7IGV4aXQgMSIgMSAyIDE1CisgICAgICByZW1vdmVsaXN0PSIkb2JqICRsaWJvYmoiCiAgICAgZWxzZQotICAgICAgJHJ1biAkcm0gJGxpYm9iagotICAgICAgdHJhcCAiJHJ1biAkcm0gJGxpYm9iajsgZXhpdCAxIiAxIDIgMTUKKyAgICAgIHJlbW92ZWxpc3Q9IiRsaWJvYmoiCisgICAgZmkKKworICAgICRydW4gJHJtICRyZW1vdmVsaXN0CisgICAgdHJhcCAiJHJ1biAkcm0gJHJlbW92ZWxpc3Q7IGV4aXQgMSIgMSAyIDE1CisKKyAgICAjIE9uIEN5Z3dpbiB0aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxhZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0IHR5cGVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICIkcGljX21vZGUiID0gbm8gJiYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorICAgICAgIyBub24tUElDIGNvZGUgaW4gc2hhcmVkIGxpYnJhcmllcyBpcyBub3Qgc3VwcG9ydGVkCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgZmkKKworICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCisgICAgIyBub3Qgc3VwcG9ydCAtbyB3aXRoIC1jCisgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubzsgdGhlbgorICAgICAgb3V0cHV0X29iaj1gJGVjaG8gIlgkc3JjZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnIC1lICdzJVwuW14uXSokJSUnYC4ke29iamV4dH0KKyAgICAgIGxvY2tmaWxlPSIkb3V0cHV0X29iai5sb2NrIgorICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJG91dHB1dF9vYmogJGxvY2tmaWxlIgorICAgICAgdHJhcCAiJHJ1biAkcm0gJHJlbW92ZWxpc3Q7IGV4aXQgMSIgMSAyIDE1CisgICAgZWxzZQorICAgICAgbmVlZF9sb2Nrcz1ubworICAgICAgbG9ja2ZpbGU9CisgICAgZmkKKworICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCisgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQorICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgorICAgICAgdW50aWwgJHJ1biBsbiAiJDAiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCSRzaG93ICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZWxpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuOyB0aGVuCisgICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCisJZWNobyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgZXhpc3RzIGFuZCBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwlleGl0IDEKKyAgICAgIGZpCisgICAgICBlY2hvICRzcmNmaWxlID4gIiRsb2NrZmlsZSIKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJGZpeF9zcmNmaWxlX3BhdGgiOyB0aGVuCisgICAgICBldmFsIHNyY2ZpbGU9XCIkZml4X3NyY2ZpbGVfcGF0aFwiCiAgICAgZmkKIAogICAgICMgT25seSBidWlsZCBhIFBJQyBvYmplY3QgaWYgd2UgYXJlIGJ1aWxkaW5nIGxpYnRvb2wgbGlicmFyaWVzLgpAQCAtMzIwLDI0ICs1MzMsMTIxIEBACiAgICAgICAjIFdpdGhvdXQgdGhpcyBhc3NpZ25tZW50LCBiYXNlX2NvbXBpbGUgZ2V0cyBlbXB0aWVkLgogICAgICAgZmJzZF9oaWRlb3VzX3NoX2J1Zz0kYmFzZV9jb21waWxlCiAKLSAgICAgICMgQWxsIHBsYXRmb3JtcyB1c2UgLURQSUMsIHRvIG5vdGlmeSBwcmVwcm9jZXNzZWQgYXNzZW1ibGVyIGNvZGUuCi0gICAgICAkc2hvdyAiJGJhc2VfY29tcGlsZSRwaWNfZmxhZyAtRFBJQyAkc3JjZmlsZSIKLSAgICAgIGlmICRydW4gZXZhbCAiJGJhc2VfY29tcGlsZVwkcGljX2ZsYWcgLURQSUMgXCRzcmNmaWxlIjsgdGhlbiA6CisgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IG5vOyB0aGVuCisJIyBBbGwgcGxhdGZvcm1zIHVzZSAtRFBJQywgdG8gbm90aWZ5IHByZXByb2Nlc3NlZCBhc3NlbWJsZXIgY29kZS4KKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRzcmNmaWxlICRwaWNfZmxhZyAtRFBJQyIKICAgICAgIGVsc2UKLSAgICAgICAgdGVzdCAtbiAiJG9iaiIgJiYgJHJ1biAkcm0gJG9iagotICAgICAgICBleGl0IDEKKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkc3JjZmlsZSIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJbG9fbGlib2JqPSIkbGlib2JqIgorCWRpcj1gJGVjaG8gIlgkbGlib2JqIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisJaWYgdGVzdCAiWCRkaXIiID0gIlgkbGlib2JqIjsgdGhlbgorCSAgZGlyPSIkb2JqZGlyIgorCWVsc2UKKwkgIGRpcj0iJGRpci8kb2JqZGlyIgorCWZpCisJbGlib2JqPSIkZGlyLyJgJGVjaG8gIlgkbGlib2JqIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisKKwlpZiB0ZXN0IC1kICIkZGlyIjsgdGhlbgorCSAgJHNob3cgIiRybSAkbGlib2JqIgorCSAgJHJ1biAkcm0gJGxpYm9iagorCWVsc2UKKwkgICRzaG93ICIkbWtkaXIgJGRpciIKKwkgICRydW4gJG1rZGlyICRkaXIKKwkgIHN0YXR1cz0kPworCSAgaWYgdGVzdCAkc3RhdHVzIC1uZSAwICYmIHRlc3QgISAtZCAkZGlyOyB0aGVuCisJICAgIGV4aXQgJHN0YXR1cworCSAgZmkKKwlmaQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9vX2xvIiA9IHllczsgdGhlbgorCW91dHB1dF9vYmo9IiRsaWJvYmoiCisJY29tbWFuZD0iJGNvbW1hbmQgLW8gJG91dHB1dF9vYmoiCisgICAgICBlbGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0geWVzOyB0aGVuCisJb3V0cHV0X29iaj0iJG9iaiIKKwljb21tYW5kPSIkY29tbWFuZCAtbyAkb3V0cHV0X29iaiIKKyAgICAgIGZpCisKKyAgICAgICRydW4gJHJtICIkb3V0cHV0X29iaiIKKyAgICAgICRzaG93ICIkY29tbWFuZCIKKyAgICAgIGlmICRydW4gZXZhbCAiJGNvbW1hbmQiOyB0aGVuIDoKKyAgICAgIGVsc2UKKwl0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwlleGl0IDEKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCB4ImBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0geCIkc3JjZmlsZSI7IHRoZW4KKwllY2hvICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwlleGl0IDEKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCisgICAgICBpZiB0ZXN0IHgiJG91dHB1dF9vYmoiICE9IHgiJGxpYm9iaiI7IHRoZW4KKwkkc2hvdyAiJG12ICRvdXRwdXRfb2JqICRsaWJvYmoiCisJaWYgJHJ1biAkbXYgJG91dHB1dF9vYmogJGxpYm9iajsgdGhlbiA6CisJZWxzZQorCSAgZXJyb3I9JD8KKwkgICRydW4gJHJtICRyZW1vdmVsaXN0CisJICBleGl0ICRlcnJvcgorCWZpCiAgICAgICBmaQogCiAgICAgICAjIElmIHdlIGhhdmUgbm8gcGljX2ZsYWcsIHRoZW4gY29weSB0aGUgb2JqZWN0IGludG8gcGxhY2UgYW5kIGZpbmlzaC4KLSAgICAgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyI7IHRoZW4KLSAgICAgICAgJHNob3cgIiRMTl9TICRvYmogJGxpYm9iaiIKLSAgICAgICAgJHJ1biAkTE5fUyAkb2JqICRsaWJvYmoKLSAgICAgICAgZXhpdCAkPwotICAgICAgZmkKKyAgICAgIGlmICh0ZXN0IC16ICIkcGljX2ZsYWciIHx8IHRlc3QgIiRwaWNfbW9kZSIgIT0gZGVmYXVsdCkgJiYKKwkgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSMgUmVuYW1lIHRoZSAubG8gZnJvbSB3aXRoaW4gb2JqZGlyIHRvIG9iagorCWlmIHRlc3QgLWYgJG9iajsgdGhlbgorCSAgJHNob3cgJHJtICRvYmoKKwkgICRydW4gJHJtICRvYmoKKwlmaQogCi0gICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0LCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCi0gICAgICAkc2hvdyAiJG12ICRvYmogJGxpYm9iaiIKLSAgICAgICRydW4gJG12ICRvYmogJGxpYm9iaiB8fCBleGl0IDEKKwkkc2hvdyAiJG12ICRsaWJvYmogJG9iaiIKKwlpZiAkcnVuICRtdiAkbGlib2JqICRvYmo7IHRoZW4gOgorCWVsc2UKKwkgIGVycm9yPSQ/CisJICAkcnVuICRybSAkcmVtb3ZlbGlzdAorCSAgZXhpdCAkZXJyb3IKKwlmaQorCisJeGRpcj1gJGVjaG8gIlgkb2JqIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisJaWYgdGVzdCAiWCR4ZGlyIiA9ICJYJG9iaiI7IHRoZW4KKwkgIHhkaXI9Ii4iCisJZWxzZQorCSAgeGRpcj0iJHhkaXIiCisJZmkKKwliYXNlb2JqPWAkZWNobyAiWCRvYmoiIHwgJFhzZWQgLWUgInMlLiovJSUiYAorCWxpYm9iaj1gJGVjaG8gIlgkYmFzZW9iaiIgfCAkWHNlZCAtZSAiJG8ybG8iYAorCSMgTm93IGFycmFuZ2UgdGhhdCBvYmogYW5kIGxvX2xpYm9iaiBiZWNvbWUgdGhlIHNhbWUgZmlsZQorCSRzaG93ICIoY2QgJHhkaXIgJiYgJExOX1MgJGJhc2VvYmogJGxpYm9iaikiCisJaWYgJHJ1biBldmFsICcoY2QgJHhkaXIgJiYgJExOX1MgJGJhc2VvYmogJGxpYm9iaiknOyB0aGVuCisJICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCisJICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKwkgICAgJHJ1biAkcm0gIiRsb2NrZmlsZSIKKwkgIGZpCisJICBleGl0IDAKKwllbHNlCisJICBlcnJvcj0kPworCSAgJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwkgIGV4aXQgJGVycm9yCisJZmkKKyAgICAgIGZpCiAKICAgICAgICMgQWxsb3cgZXJyb3IgbWVzc2FnZXMgb25seSBmcm9tIHRoZSBmaXJzdCBjb21waWxhdGlvbi4KICAgICAgIHN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKQEAgLTM0NSw2NCArNjU1LDE3MCBAQAogCiAgICAgIyBPbmx5IGJ1aWxkIGEgcG9zaXRpb24tZGVwZW5kZW50IG9iamVjdCBpZiB3ZSBidWlsZCBvbGQgbGlicmFyaWVzLgogICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgotICAgICAgJHNob3cgIiRiYXNlX2NvbXBpbGUgJHNyY2ZpbGUkc3VwcHJlc3Nfb3V0cHV0IgotICAgICAgaWYgJHJ1biBldmFsICIkYmFzZV9jb21waWxlIFwkc3JjZmlsZSRzdXBwcmVzc19vdXRwdXQiOyB0aGVuIDoKKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0geWVzOyB0aGVuCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHNyY2ZpbGUiCiAgICAgICBlbHNlCi0gICAgICAgICRydW4gJHJtICRvYmogJGxpYm9iagotICAgICAgICBleGl0IDEKKwkjIEFsbCBwbGF0Zm9ybXMgdXNlIC1EUElDLCB0byBub3RpZnkgcHJlcHJvY2Vzc2VkIGFzc2VtYmxlciBjb2RlLgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHNyY2ZpbGUgJHBpY19mbGFnIC1EUElDIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0geWVzOyB0aGVuCisJY29tbWFuZD0iJGNvbW1hbmQgLW8gJG9iaiIKKwlvdXRwdXRfb2JqPSIkb2JqIgorICAgICAgZmkKKworICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCisgICAgICBjb21tYW5kPSIkY29tbWFuZCRzdXBwcmVzc19vdXRwdXQiCisgICAgICAkcnVuICRybSAiJG91dHB1dF9vYmoiCisgICAgICAkc2hvdyAiJGNvbW1hbmQiCisgICAgICBpZiAkcnVuIGV2YWwgIiRjb21tYW5kIjsgdGhlbiA6CisgICAgICBlbHNlCisJJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwlleGl0IDEKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCB4ImBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0geCIkc3JjZmlsZSI7IHRoZW4KKwllY2hvICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwlleGl0IDEKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkCisgICAgICBpZiB0ZXN0IHgiJG91dHB1dF9vYmoiICE9IHgiJG9iaiI7IHRoZW4KKwkkc2hvdyAiJG12ICRvdXRwdXRfb2JqICRvYmoiCisJaWYgJHJ1biAkbXYgJG91dHB1dF9vYmogJG9iajsgdGhlbiA6CisJZWxzZQorCSAgZXJyb3I9JD8KKwkgICRydW4gJHJtICRyZW1vdmVsaXN0CisJICBleGl0ICRlcnJvcgorCWZpCisgICAgICBmaQorCisgICAgICAjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkbyBub3QKKyAgICAgICMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKwkkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorCSRydW4gZXZhbCAiZWNobyB0aW1lc3RhbXAgPiBcJGxpYm9iaiIgfHwgZXhpdCAkPworICAgICAgZWxzZQorCSMgTW92ZSB0aGUgLmxvIGZyb20gd2l0aGluIG9iamRpcgorCSRzaG93ICIkbXYgJGxpYm9iaiAkbG9fbGlib2JqIgorCWlmICRydW4gJG12ICRsaWJvYmogJGxvX2xpYm9iajsgdGhlbiA6CisJZWxzZQorCSAgZXJyb3I9JD8KKwkgICRydW4gJHJtICRyZW1vdmVsaXN0CisJICBleGl0ICRlcnJvcgorCWZpCiAgICAgICBmaQogICAgIGZpCiAKLSAgICAjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkbyBub3QKLSAgICAjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgotICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgotICAgICAgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKLSAgICAgICRydW4gZXZhbCAiZWNobyB0aW1lc3RhbXAgPiBcJGxpYm9iaiIgfHwgZXhpdCAkPworICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKKyAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgICAgICRydW4gJHJtICIkbG9ja2ZpbGUiCiAgICAgZmkKIAogICAgIGV4aXQgMAogICAgIDs7CiAKICAgIyBsaWJ0b29sIGxpbmsgbW9kZQotICBsaW5rKQorICBsaW5rIHwgcmVsaW5rKQogICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGxpbmsiCi0gICAgQ0M9IiRub25vcHQiCi0gICAgYWxsb3dfdW5kZWZpbmVkPXllcwotICAgIGNvbXBpbGVfY29tbWFuZD0iJENDIgotICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRDQyIKKyAgICBjYXNlICRob3N0IGluCisgICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisgICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCisgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0CisgICAgICAjIHdoaWNoIHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCisgICAgICAjIGZsYWcgZm9yIGV2ZXJ5IGxpYnRvb2wgaW52b2thdGlvbi4KKyAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCiAKKyAgICAgICMgRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSBhYm92ZSB3aGVuIHRyeWluZworICAgICAgIyB0byBtYWtlIGEgZGxsIHdoaWNoIGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKKyAgICAgICMgZXZlbiBhIHN0YXRpYyBsaWJyYXJ5IGlzIGJ1aWx0LiAgRm9yIG5vdywgd2UgbmVlZCB0byBzcGVjaWZ5CisgICAgICAjIC1uby11bmRlZmluZWQgb24gdGhlIGxpYnRvb2wgbGluayBsaW5lIHdoZW4gd2UgY2FuIGJlIGNlcnRhaW4KKyAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgICopCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJ0b29sX2FyZ3M9IiRub25vcHQiCisgICAgY29tcGlsZV9jb21tYW5kPSIkbm9ub3B0IgorICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRub25vcHQiCisKKyAgICBjb21waWxlX3JwYXRoPQorICAgIGZpbmFsaXplX3JwYXRoPQogICAgIGNvbXBpbGVfc2hsaWJwYXRoPQogICAgIGZpbmFsaXplX3NobGlicGF0aD0KKyAgICBjb252ZW5pZW5jZT0KKyAgICBvbGRfY29udmVuaWVuY2U9CiAgICAgZGVwbGlicz0KKyAgICBvbGRfZGVwbGlicz0KKyAgICBjb21waWxlcl9mbGFncz0KKyAgICBsaW5rZXJfZmxhZ3M9CisgICAgZGxsc2VhcmNocGF0aD0KKyAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKKworICAgIGF2b2lkX3ZlcnNpb249bm8KICAgICBkbGZpbGVzPQogICAgIGRscHJlZmlsZXM9CisgICAgZGxzZWxmPW5vCiAgICAgZXhwb3J0X2R5bmFtaWM9bm8KLSAgICBoYXJkY29kZV9saWJkaXJzPQorICAgIGV4cG9ydF9zeW1ib2xzPQorICAgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQorICAgIGdlbmVyYXRlZD0KICAgICBsaWJvYmpzPQotICAgIGxpbmtfYWdhaW5zdF9saWJ0b29sX2xpYnM9CiAgICAgbHRsaWJzPQorICAgIG1vZHVsZT1ubworICAgIG5vX2luc3RhbGw9bm8KICAgICBvYmpzPQorICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubworICAgIHByZWxvYWQ9bm8KICAgICBwcmV2PQogICAgIHByZXZhcmc9CiAgICAgcmVsZWFzZT0KICAgICBycGF0aD0KKyAgICB4cnBhdGg9CiAgICAgcGVybV9ycGF0aD0KICAgICB0ZW1wX3JwYXRoPQorICAgIHRocmVhZF9zYWZlPW5vCiAgICAgdmluZm89CiAKICAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCiAgICAgZm9yIGFyZwogICAgIGRvCi0gICAgICBjYXNlICIkYXJnIiBpbgorICAgICAgY2FzZSAkYXJnIGluCiAgICAgICAtYWxsLXN0YXRpYyB8IC1zdGF0aWMpCi0gICAgICAgIGlmIHRlc3QgIlgkYXJnIiA9ICJYLWFsbC1zdGF0aWMiICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWFsbC1zdGF0aWMiOyB0aGVuCisJICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KIAkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY29tcGxldGUgc3RhdGljIGxpbmtpbmcgaXMgaW1wb3NzaWJsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24iIDE+JjIKLSAgICAgICAgZmkKLSAgICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJZWxzZQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwlmaQorCWJ1aWxkX2xpYnRvb2xfbGlicz1ubwogCWJ1aWxkX29sZF9saWJzPXllcwotICAgICAgICBicmVhawotICAgICAgICA7OworCXByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwlicmVhaworCTs7CiAgICAgICBlc2FjCiAgICAgZG9uZQogCkBAIC00MTAsNTUgKzgyNiwxNDEgQEAKICAgICB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgYnVpbGRfb2xkX2xpYnM9eWVzCiAKICAgICAjIEdvIHRocm91Z2ggdGhlIGFyZ3VtZW50cywgdHJhbnNmb3JtaW5nIHRoZW0gb24gdGhlIHdheS4KLSAgICBmb3IgYXJnCi0gICAgZG8KKyAgICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgICAgYXJnPSIkMSIKKyAgICAgIHNoaWZ0CisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCXFhcmc9XCJgJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImBcIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKwk7OworICAgICAgKikgcWFyZz0kYXJnIDs7CisgICAgICBlc2FjCisgICAgICBsaWJ0b29sX2FyZ3M9IiRsaWJ0b29sX2FyZ3MgJHFhcmciCisKICAgICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgogICAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCi0gICAgICAgIGNhc2UgIiRwcmV2IiBpbgotICAgICAgICBvdXRwdXQpCi0gICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIEBPVVRQVVRAIgotICAgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kIEBPVVRQVVRAIgotICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKKwljYXNlICRwcmV2IGluCisJb3V0cHV0KQorCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIEBPVVRQVVRAIgorCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgQE9VVFBVVEAiCisJICA7OworCWVzYWMKIAotICAgICAgICBjYXNlICIkcHJldiIgaW4KLSAgICAgICAgZGxmaWxlc3xkbHByZWZpbGVzKQotICAgICAgICAgIGNhc2UgIiRhcmciIGluCi0gICAgICAgICAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KLSAgICAgICAgICAqKQotICAgICAgICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKLSAgICAgICAgICAgIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXMgJiYgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKLSAgICAgICAgICAgIHByZXY9Ci0gICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgICA7OworCWNhc2UgJHByZXYgaW4KKwlkbGZpbGVzfGRscHJlZmlsZXMpCisJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgorCSAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgQFNZTUZJTEVAIgorCSAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCBAU1lNRklMRUAiCisJICAgIHByZWxvYWQ9eWVzCisJICBmaQorCSAgY2FzZSAkYXJnIGluCisJICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgorCSAgZm9yY2UpCisJICAgIGlmIHRlc3QgIiRkbHNlbGYiID0gbm87IHRoZW4KKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHNlbGYpCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlcyAmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiICE9IHllczsgdGhlbgorCSAgICAgIGRsc2VsZj15ZXMKKwkgICAgZWxzZQorCSAgICAgIGRsc2VsZj1uZWVkbGVzcworCSAgICAgIGV4cG9ydF9keW5hbWljPXllcworCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisJICAgIGVsc2UKKwkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlleHBzeW1zKQorCSAgZXhwb3J0X3N5bWJvbHM9IiRhcmciCisJICBpZiB0ZXN0ICEgLWYgIiRhcmciOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IHN5bWJvbCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICAgIGV4aXQgMQorCSAgZmkKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlleHBzeW1zX3JlZ2V4KQorCSAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CiAJcmVsZWFzZSkKIAkgIHJlbGVhc2U9Ii0kYXJnIgogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwotICAgICAgICBycGF0aCkKLSAgICAgICAgICBycGF0aD0iJHJwYXRoICRhcmciCisJcnBhdGggfCB4cnBhdGgpCisJICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkgIGNhc2UgJGFyZyBpbgorCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSAgKikKKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogb25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiIDE+JjIKKwkgICAgZXhpdCAxCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgorCSAgICBjYXNlICIkcnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSBycGF0aD0iJHJwYXRoICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGVsc2UKKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIHhycGF0aD0iJHhycGF0aCAkYXJnIiA7OworCSAgICBlc2FjCisJICBmaQogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwotICAgICAgICAqKQotICAgICAgICAgIGV2YWwgIiRwcmV2PVwiXCRhcmdcIiIKLSAgICAgICAgICBwcmV2PQotICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgZmkKKwl4Y29tcGlsZXIpCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorCSAgcHJldj0KKwkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkcWFyZyIKKwkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGxpbmtlcikKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJHFhcmciCisJICBwcmV2PQorCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR3bCRxYXJnIgorCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHdsJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwkqKQorCSAgZXZhbCAiJHByZXY9XCJcJGFyZ1wiIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWVzYWMKKyAgICAgIGZpICMgdGVzdCAtbiAkcHJldgogCiAgICAgICBwcmV2YXJnPSIkYXJnIgogCi0gICAgICBjYXNlICIkYXJnIiBpbgorICAgICAgY2FzZSAkYXJnIGluCiAgICAgICAtYWxsLXN0YXRpYykKIAlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KLSAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGxpbmtfc3RhdGljX2ZsYWciCisJICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGxpbmtfc3RhdGljX2ZsYWciCiAJICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkbGlua19zdGF0aWNfZmxhZyIKLSAgICAgICAgZmkKLSAgICAgICAgY29udGludWUKKwlmaQorCWNvbnRpbnVlCiAJOzsKIAogICAgICAgLWFsbG93LXVuZGVmaW5lZCkKQEAgLTQ2Nyw0NiArOTY5LDEzNCBAQAogCWNvbnRpbnVlCiAJOzsKIAorICAgICAgLWF2b2lkLXZlcnNpb24pCisJYXZvaWRfdmVyc2lvbj15ZXMKKwljb250aW51ZQorCTs7CisKICAgICAgIC1kbG9wZW4pCi0gICAgICAgIHByZXY9ZGxmaWxlcwotICAgICAgICBjb250aW51ZQotICAgICAgICA7OworCXByZXY9ZGxmaWxlcworCWNvbnRpbnVlCisJOzsKIAogICAgICAgLWRscHJlb3BlbikKLSAgICAgICAgcHJldj1kbHByZWZpbGVzCi0gICAgICAgIGNvbnRpbnVlCi0gICAgICAgIDs7CisJcHJldj1kbHByZWZpbGVzCisJY29udGludWUKKwk7OwogCiAgICAgICAtZXhwb3J0LWR5bmFtaWMpCi0gICAgICAgIGlmIHRlc3QgIiRleHBvcnRfZHluYW1pYyIgIT0geWVzOyB0aGVuCi0gICAgICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCi0JICBpZiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgotCSAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgotCSAgZWxzZQotCSAgICBhcmc9Ci0JICBmaQorCWV4cG9ydF9keW5hbWljPXllcworCWNvbnRpbnVlCisJOzsKIAotICAgICAgICAgICMgQWRkIHRoZSBzeW1ib2wgb2JqZWN0IGludG8gdGhlIGxpbmtpbmcgY29tbWFuZHMuCi0JICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgQFNZTUZJTEVAIgotCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgQFNZTUZJTEVAIgotICAgICAgICBmaQotICAgICAgICA7OworICAgICAgLWV4cG9ydC1zeW1ib2xzIHwgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4KQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogbW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKKwkgIGV4aXQgMQorCWZpCisJaWYgdGVzdCAiWCRhcmciID0gIlgtZXhwb3J0LXN5bWJvbHMiOyB0aGVuCisJICBwcmV2PWV4cHN5bXMKKwllbHNlCisJICBwcmV2PWV4cHN5bXNfcmVnZXgKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUaGUgbmF0aXZlIElSSVggbGlua2VyIHVuZGVyc3RhbmRzIC1MQU5HOiosIC1MSVNUOiogYW5kIC1MTk86KgorICAgICAgIyBzbywgaWYgd2Ugc2VlIHRoZXNlIGZsYWdzIGJlIGNhcmVmdWwgbm90IHRvIHRyZWF0IHRoZW0gbGlrZSAtTAorICAgICAgLUxbQS1aXVtBLVpdKjoqKQorCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCisJbm8vKi0qLWlyaXgqIHwgbm8vKi0qLW5vbnN0b3B1eCopCisJICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKKwkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCisJICA7OworCWVzYWMKKwljb250aW51ZQorCTs7CiAKICAgICAgIC1MKikKLSAgICAgICAgZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MlXi1MXCguKlwpJCVcMSUnYAotICAgICAgICBjYXNlICIkZGlyIiBpbgotICAgICAgICAvKiB8IFtBLVphLXpdOlxcKikKLQkgICMgQWRkIHRoZSBjb3JyZXNwb25kaW5nIGhhcmRjb2RlX2xpYmRpcl9mbGFnLCBpZiBpdCBpcyBub3QgaWRlbnRpY2FsLgotICAgICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogXGAtTCRkaXInIGNhbm5vdCBzcGVjaWZ5IGEgcmVsYXRpdmUgZGlyZWN0b3J5IiAxPiYyCi0gICAgICAgICAgZXhpdCAxCi0gICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICBkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgotICAgICAgICA7OworCWRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzL14tTC8vJ2AKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJKikKKwkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIgMT4mMgorCSAgICBleGl0IDEKKwkgIGZpCisJICBkaXI9IiRhYnNkaXIiCisJICA7OworCWVzYWMKKwljYXNlICIkZGVwbGlicyAiIGluCisJKiIgLUwkZGlyICIqKSA7OworCSopCisJICBkZXBsaWJzPSIkZGVwbGlicyAtTCRkaXIiCisJICBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIKKwkgIDs7CisJZXNhYworCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKikKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGRpcjoiKikgOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRkaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKIAotICAgICAgLWwqKSBkZXBsaWJzPSIkZGVwbGlicyAkYXJnIiA7OworICAgICAgLWwqKQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW1pbmd3KiB8ICotKi1vczIqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwkgZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliY19yIGRpcmVjdGx5LCB1c2UgLXB0aHJlYWQgZmxhZy4KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAtbW9kdWxlKQorCW1vZHVsZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1mYXN0LWluc3RhbGwpCisJZmFzdF9pbnN0YWxsPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtbm8taW5zdGFsbCkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisJICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKKwkgICMgaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IiAxPiYyCisJICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBhc3N1bWluZyBcYC1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiIDE+JjIKKwkgIGZhc3RfaW5zdGFsbD1ubworCSAgOzsKKwkqKSBub19pbnN0YWxsPXllcyA7OworCWVzYWMKKwljb250aW51ZQorCTs7CiAKICAgICAgIC1uby11bmRlZmluZWQpCiAJYWxsb3dfdW5kZWZpbmVkPW5vCkBAIC01MjEsNDYgKzExMTEsMTE2IEBACiAJOzsKIAogICAgICAgLXJwYXRoKQotICAgICAgICBwcmV2PXJwYXRoCi0gICAgICAgIGNvbnRpbnVlCi0gICAgICAgIDs7CisJcHJldj1ycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIpCisJcHJldj14cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKikKKwlkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncy9eLVIvLydgCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICAkZWNobyAiJG1vZGVuYW1lOiBvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIgMT4mMgorCSAgZXhpdCAxCisJICA7OworCWVzYWMKKwljYXNlICIkeHJwYXRoICIgaW4KKwkqIiAkZGlyICIqKSA7OworCSopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CiAKICAgICAgIC1zdGF0aWMpCi0JIyBJZiB3ZSBoYXZlIG5vIHBpY19mbGFnLCB0aGVuIHRoaXMgaXMgdGhlIHNhbWUgYXMgLWFsbC1zdGF0aWMuCi0JaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KLSAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGxpbmtfc3RhdGljX2ZsYWciCi0JICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkbGlua19zdGF0aWNfZmxhZyIKLSAgICAgICAgZmkKKwkjIFRoZSBlZmZlY3RzIG9mIC1zdGF0aWMgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCSMgV2UgdXNlZCB0byBkbyB0aGUgc2FtZSBhcyAtYWxsLXN0YXRpYyBvbiBwbGF0Zm9ybXMgdGhhdAorCSMgZGlkbid0IGhhdmUgYSBQSUMgZmxhZywgYnV0IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGVmZmVjdHMKKwkjIHdvdWxkIGJlIGVxdWl2YWxlbnQgd2FzIHdyb25nLiAgSXQgd291bGQgYnJlYWsgb24gYXQgbGVhc3QKKwkjIERpZ2l0YWwgVW5peCBhbmQgQUlYLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXRocmVhZC1zYWZlKQorCXRocmVhZF9zYWZlPXllcwogCWNvbnRpbnVlCiAJOzsKIAogICAgICAgLXZlcnNpb24taW5mbykKLSAgICAgICAgcHJldj12aW5mbwotICAgICAgICBjb250aW51ZQotICAgICAgICA7OworCXByZXY9dmluZm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1XYywqKQorCWFyZ3M9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCIgLWUgJ3MvXi1XYywvLydgCisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBjYXNlICRmbGFnIGluCisJICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCSAgICBmbGFnPSJcIiRmbGFnXCIiCisJICAgIDs7CisJICBlc2FjCisJICBhcmc9IiRhcmcgJHdsJGZsYWciCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRmbGFnIgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAicy9eIC8vImAKKwk7OworCisgICAgICAtV2wsKikKKwlhcmdzPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiIC1lICdzL14tV2wsLy8nYAorCWFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgY2FzZSAkZmxhZyBpbgorCSAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKwkgICAgZmxhZz0iXCIkZmxhZ1wiIgorCSAgICA7OworCSAgZXNhYworCSAgYXJnPSIkYXJnICR3bCRmbGFnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZmxhZyIKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZmxhZyIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgInMvXiAvLyJgCisJOzsKKworICAgICAgLVhjb21waWxlcikKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhsaW5rZXIpCisJcHJldj14bGlua2VyCisJY29udGludWUKKwk7OwogCiAgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KICAgICAgIC0qIHwgKyopCiAJIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCiAJIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KIAlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0JY2FzZSAiJGFyZyIgaW4KLQkqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKikKKwljYXNlICRhcmcgaW4KKwkqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKIAkgIGFyZz0iXCIkYXJnXCIiCiAJICA7OwogCWVzYWMKLSAgICAgICAgOzsKKwk7OwogCi0gICAgICAqLm8gfCAqLmEpCi0gICAgICAgICMgQSBzdGFuZGFyZCBvYmplY3QuCi0gICAgICAgIG9ianM9IiRvYmpzICRhcmciCi0gICAgICAgIDs7Ci0KLSAgICAgICoubG8pCi0gICAgICAgICMgQSBsaWJyYXJ5IG9iamVjdC4KKyAgICAgICoubG8gfCAqLiRvYmpleHQpCisJIyBBIGxpYnJhcnkgb3Igc3RhbmRhcmQgb2JqZWN0LgogCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLQkgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCi0JICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBUaGlzIGZpbGUgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisJICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJICAgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCiAJICAgIHByZXY9CiAJICAgIGNvbnRpbnVlCiAJICBlbHNlCkBAIC01NzEsMjMwICsxMjMxLDU5IEBACiAKIAlpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCiAJICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCi0JICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAiYCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncy9cLmxvJC9cLm8vJ2AKKwkgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICJgJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkbG8ybyJgCiAJICBwcmV2PQorCWVsc2UKKwkgIGNhc2UgJGFyZyBpbgorCSAgKi5sbykgbGlib2Jqcz0iJGxpYm9ianMgJGFyZyIgOzsKKwkgICopIG9ianM9IiRvYmpzICRhcmciIDs7CisJICBlc2FjCiAJZmkKLQlsaWJvYmpzPSIkbGlib2JqcyAkYXJnIgotICAgICAgICA7OworCTs7CisKKyAgICAgICouJGxpYmV4dCkKKwkjIEFuIGFyY2hpdmUuCisJZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisJY29udGludWUKKwk7OwogCiAgICAgICAqLmxhKQotICAgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgogCi0gICAgICAgIGRsbmFtZT0KLSAgICAgICAgbGliZGlyPQotICAgICAgICBsaWJyYXJ5X25hbWVzPQotICAgICAgICBvbGRfbGlicmFyeT0KLQotICAgICAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgotICAgICAgICBpZiAoc2VkIC1lICcycScgJGFyZyB8IGVncmVwICdeIyBHZW5lcmF0ZWQgYnkgbHRtYWluXC5zaCcpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgotICAgICAgICAgIGV4aXQgMQotICAgICAgICBmaQotCi0gICAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotICAgICAgICBjYXNlICIkYXJnIiBpbgotICAgICAgICAqLyogfCAqXFwqKSAuICRhcmcgOzsKLSAgICAgICAgKikgLiAuLyRhcmcgOzsKLSAgICAgICAgZXNhYwotCi0gICAgICAgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0gICAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogXGAkYXJnJyBjb250YWlucyBubyAtcnBhdGggaW5mb3JtYXRpb24iIDE+JjIKLSAgICAgICAgICBleGl0IDEKLSAgICAgICAgZmkKLQotICAgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCi0gICAgICAgIGxpbmtsaWI9Ci0gICAgICAgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KLSAgICAgICAgICBsaW5rbGliPSIkbCIKLSAgICAgICAgZG9uZQotCi0gICAgICAgIGlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgotICAgICAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRhcmcnIiAxPiYyCi0gICAgICAgICAgZXhpdCAxCi0gICAgICAgIGZpCi0KLSAgICAgICAgIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCi0gICAgICAgIG5hbWU9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncyVeLiovJSUnIC1lICdzL1wubGEkLy8nIC1lICdzL15saWIvLydgCi0gICAgICAgIGRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0gICAgICAgIGlmIHRlc3QgIlgkZGlyIiA9ICJYJGFyZyI7IHRoZW4KLSAgICAgICAgICBkaXI9IiRvYmpkaXIiCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBkaXI9IiRkaXIvJG9iamRpciIKLSAgICAgICAgZmkKLQotICAgICAgICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KLSAgICAgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgotICAgICAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCi0gICAgICAgICAgaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KLSAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGxuYW1lLCB3ZSBuZWVkIHRvIHByZWxvYWQuCi0gICAgICAgICAgICBwcmV2PWRscHJlZmlsZXMKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAjIFdlIHNob3VsZCBub3QgY3JlYXRlIGEgZGVwZW5kZW5jeSBvbiB0aGlzIGxpYnJhcnksIGJ1dCB3ZQotCSAgICAjIG1heSBuZWVkIGFueSBsaWJyYXJpZXMgaXQgcmVxdWlyZXMuCi0JICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRkZXBlbmRlbmN5X2xpYnMiCi0JICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kJGRlcGVuZGVuY3lfbGlicyIKLSAgICAgICAgICAgIHByZXY9Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0KLSAgICAgICAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KLSAgICAgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgotICAgICAgICAgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scwotICAgICAgICAgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgotICAgICAgICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KLSAgICAgICAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRkaXIvJG9sZF9saWJyYXJ5IgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCi0gICAgICAgICAgZmkKLSAgICAgICAgICBwcmV2PQotICAgICAgICBmaQotCi0gICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgotICAgICAgICAgIGxpbmtfYWdhaW5zdF9saWJ0b29sX2xpYnM9IiRsaW5rX2FnYWluc3RfbGlidG9vbF9saWJzICRhcmciCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0gICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCi0gICAgICAgICAgICBjYXNlICIkdGVtcF9ycGF0aCAiIGluCi0gICAgICAgICAgICAqIiAkZGlyICIqKSA7OwotICAgICAgICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGggJGRpciIgOzsKLSAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICBmaQotCi0JICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCi0gICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KLSAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0gICAgICAgICAgICAgICAgIyBQdXQgdGhlIG1hZ2ljIGxpYmRpciB3aXRoIHRoZSBoYXJkY29kZSBmbGFnLgotICAgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCi0gICAgICAgICAgICAgICAgbGliZGlyPSJASEFSRENPREVfTElCRElSU0AiCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCi0JCWNhc2UgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgaW4KLQkJKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQotCQkgIDs7Ci0JCSopCi0JCSAgaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCi0JCSAgOzsKLQkJZXNhYwotICAgICAgICAgICAgICAgIGxpYmRpcj0KLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0KLSAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiOyB0aGVuCi0gICAgICAgICAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLQotICAgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGZsYWciCi0gICAgICAgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRmbGFnIgotICAgICAgICAgICAgZmkKLSAgICAgICAgICBlbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KLSAgICAgICAgICAgICMgRG8gdGhlIHNhbWUgZm9yIHRoZSBwZXJtYW5lbnQgcnVuIHBhdGguCi0gICAgICAgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCi0gICAgICAgICAgICAqIiAkbGliZGlyICIqKSA7OwotICAgICAgICAgICAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKLSAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICBmaQotCi0KLSAgICAgICAgICBjYXNlICIkaGFyZGNvZGVfYWN0aW9uIiBpbgotICAgICAgICAgIGltbWVkaWF0ZSkKLSAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0gbm87IHRoZW4KLSAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRkaXIvJGxpbmtsaWIiCi0gICAgICAgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCi0gICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAtTCRkaXIgLWwkbmFtZSIKLSAgICAgICAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KLSAgICAgICAgICAgICAgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRkaXI6IgotICAgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgLWwkbmFtZSIKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICA7OwotCi0gICAgICAgICAgcmVsaW5rKQotICAgICAgICAgICAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCi0gICAgICAgICAgICBjYXNlICIkZGlyIiBpbgotICAgICAgICAgICAgLyogfCBbQS1aYS16XTpcXCopIDs7Ci0gICAgICAgICAgICAqKQotICAgICAgICAgICAgICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCi0gICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIiAxPiYyCi0gICAgICAgICAgICAgICAgZXhpdCAxCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGRpcj0iJGFic2RpciIKLSAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgIGVzYWMKLQotICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRkaXIvJGxpbmtsaWIiCi0gICAgICAgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgotICAgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgLUwkZGlyIC1sJG5hbWUiCi0gICAgICAgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgotICAgICAgICAgICAgICBjb21waWxlX3NobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJGRpcjoiCi0gICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAtbCRuYW1lIgotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgICAqKQotICAgICAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogXGAkaGFyZGNvZGVfYWN0aW9uJyBpcyBhbiB1bmtub3duIGhhcmRjb2RlIGFjdGlvbiIgMT4mMgotICAgICAgICAgICAgZXhpdCAxCi0gICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLQotICAgICAgICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCi0gICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRsaWJkaXIvJGxpbmtsaWIiCi0gICAgICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kIC1MJGxpYmRpciAtbCRuYW1lIgotICAgICAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCi0gICAgICAgICAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIKLSAgICAgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kIC1sJG5hbWUiCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KLSAgICAgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kIC1MJGxpYmRpciAtbCRuYW1lIgotICAgICAgICAgIGZpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAjIFRyYW5zZm9ybSBkaXJlY3RseSB0byBvbGQgYXJjaGl2ZXMgaWYgd2UgZG9uJ3QgYnVpbGQgbmV3IGxpYnJhcmllcy4KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkcGljX2ZsYWciICYmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KLSAgICAgICAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIHN0YXRpYyBsaWJyYXJ5IGZvciBcYCRhcmcnIiAxPiYyCi0gICAgICAgICAgICBleGl0IDEKLSAgICAgICAgICBmaQotCi0JICAjIEhlcmUgd2UgYXNzdW1lIHRoYXQgb25lIG9mIGhhcmRjb2RlX2RpcmVjdCBvciBoYXJkY29kZV9taW51c19MCi0JICAjIGlzIG5vdCB1bnN1cHBvcnRlZC4gIFRoaXMgaXMgdmFsaWQgb24gYWxsIGtub3duIHN0YXRpYyBhbmQKLQkgICMgc2hhcmVkIHBsYXRmb3Jtcy4KLQkgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHVuc3VwcG9ydGVkOyB0aGVuCi0JICAgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgbGlua2xpYj0iJG9sZF9saWJyYXJ5IgotCSAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGRpci8kbGlua2xpYiIKLQkgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGRpci8kbGlua2xpYiIKLQkgIGVsc2UKLQkgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIC1MJGRpciAtbCRuYW1lIgotCSAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAtTCRkaXIgLWwkbmFtZSIKLQkgIGZpCi0gICAgICAgIGZpCi0KLQkjIEFkZCBpbiBhbnkgbGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgotCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRkZXBlbmRlbmN5X2xpYnMiCi0JZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQkZGVwZW5kZW5jeV9saWJzIgorCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCSAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxzZQorCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlmaQogCWNvbnRpbnVlCi0gICAgICAgIDs7CisJOzsKIAogICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgogICAgICAgKikKIAkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKIAkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgogCWFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLQljYXNlICIkYXJnIiBpbgotCSpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qKQorCWNhc2UgJGFyZyBpbgorCSpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQogCSAgYXJnPSJcIiRhcmdcIiIKIAkgIDs7CiAJZXNhYwotICAgICAgICA7OwotICAgICAgZXNhYworCTs7CisgICAgICBlc2FjICMgYXJnCiAKICAgICAgICMgTm93IGFjdHVhbGx5IHN1YnN0aXR1dGUgdGhlIGFyZ3VtZW50IGludG8gdGhlIGNvbW1hbmRzLgogICAgICAgaWYgdGVzdCAtbiAiJGFyZyI7IHRoZW4KIAljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKIAlmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgogICAgICAgZmkKLSAgICBkb25lCisgICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAogCiAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCiAgICAgICAkZWNobyAiJG1vZGVuYW1lOiB0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiAxPiYyCkBAIC04MDIsNzkgKzEyOTEsOTEwIEBACiAgICAgICBleGl0IDEKICAgICBmaQogCi0gICAgaWYgdGVzdCAtbiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBjYW5ub3Qgc3BlY2lmeSBib3RoIFxgLXZlcnNpb24taW5mbycgYW5kIFxgLXJlbGVhc2UnIiAxPiYyCi0gICAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICAgIGV4aXQgMQorICAgIGlmIHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXMgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KKyAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCiAgICAgZmkKIAotICAgIG9sZGxpYj0KLSAgICBvbGRvYmpzPQotICAgIGNhc2UgIiRvdXRwdXQiIGluCisgICAgIyBjYWxjdWxhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHdpdGhvdXQgaXRzIGRpcmVjdG9yeQorICAgIG91dHB1dG5hbWU9YCRlY2hvICJYJG91dHB1dCIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorICAgIGxpYm9ianNfc2F2ZT0iJGxpYm9ianMiCisKKyAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICMgZ2V0IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJHNobGlicGF0aF92YXIKKyAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJGVjaG8gXCJYXCR7JHNobGlicGF0aF92YXJ9XCIgXHwgXCRYc2VkIC1lIFwncy86LyAvZ1wnXGAKKyAgICBlbHNlCisgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KKyAgICBmaQorICAgIGV2YWwgc3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIgorICAgIGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIKKworICAgIG91dHB1dF9vYmpkaXI9YCRlY2hvICJYJG91dHB1dCIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAorICAgIGlmIHRlc3QgIlgkb3V0cHV0X29iamRpciIgPSAiWCRvdXRwdXQiOyB0aGVuCisgICAgICBvdXRwdXRfb2JqZGlyPSIkb2JqZGlyIgorICAgIGVsc2UKKyAgICAgIG91dHB1dF9vYmpkaXI9IiRvdXRwdXRfb2JqZGlyLyRvYmpkaXIiCisgICAgZmkKKyAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KKyAgICBpZiB0ZXN0ICEgLWQgJG91dHB1dF9vYmpkaXI7IHRoZW4KKyAgICAgICRzaG93ICIkbWtkaXIgJG91dHB1dF9vYmpkaXIiCisgICAgICAkcnVuICRta2RpciAkb3V0cHV0X29iamRpcgorICAgICAgc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0ICRzdGF0dXMgLW5lIDAgJiYgdGVzdCAhIC1kICRvdXRwdXRfb2JqZGlyOyB0aGVuCisJZXhpdCAkc3RhdHVzCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIERldGVybWluZSB0aGUgdHlwZSBvZiBvdXRwdXQKKyAgICBjYXNlICRvdXRwdXQgaW4KICAgICAiIikKICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiIDE+JjIKICAgICAgICRlY2hvICIkaGVscCIgMT4mMgogICAgICAgZXhpdCAxCiAgICAgICA7OworICAgICouJGxpYmV4dCkgbGlua21vZGU9b2xkbGliIDs7CisgICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7CisgICAgKi5sYSkgbGlua21vZGU9bGliIDs7CisgICAgKikgbGlua21vZGU9cHJvZyA7OyAjIEFueXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGEgcHJvZ3JhbS4KKyAgICBlc2FjCiAKLSAgICAqLyogfCAqXFwqKQotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogb3V0cHV0IGZpbGUgXGAkb3V0cHV0JyBtdXN0IGhhdmUgbm8gZGlyZWN0b3J5IGNvbXBvbmVudHMiIDE+JjIKLSAgICAgIGV4aXQgMQotICAgICAgOzsKKyAgICBzcGVjaWFsZGVwbGlicz0KKyAgICBsaWJzPQorICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcworICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQorICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisgICAgICBpZiB0ZXN0ICJYJGR1cGxpY2F0ZV9kZXBzIiA9ICJYeWVzIiA7IHRoZW4KKwljYXNlICIkbGlicyAiIGluCisJKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBsaWJzPSIkbGlicyAkZGVwbGliIgorICAgIGRvbmUKKyAgICBkZXBsaWJzPQorICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KKyAgICBuZXdsaWJfc2VhcmNoX3BhdGg9CisgICAgbmVlZF9yZWxpbms9bm8gIyB3aGV0aGVyIHdlJ3JlIGxpbmtpbmcgYW55IHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9kZXBsaWJzPSAjIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X3BhdGg9ICMgcGF0aHMgdGhhdCBjb250YWluIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIGxpYikKKwlwYXNzZXM9ImNvbnYgbGluayIKKwlmb3IgZmlsZSBpbiAkZGxmaWxlcyAkZGxwcmVmaWxlczsgZG8KKwkgIGNhc2UgJGZpbGUgaW4KKwkgICoubGEpIDs7CisJICAqKQorCSAgICAkZWNobyAiJG1vZGVuYW1lOiBsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiIDE+JjIKKwkgICAgZXhpdCAxCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCTs7CisgICAgcHJvZykKKwljb21waWxlX2RlcGxpYnM9CisJZmluYWxpemVfZGVwbGlicz0KKwlhbGxkZXBsaWJzPW5vCisJbmV3ZGxmaWxlcz0KKwluZXdkbHByZWZpbGVzPQorCXBhc3Nlcz0iY29udiBzY2FuIGRsb3BlbiBkbHByZW9wZW4gbGluayIKKwk7OworICAgICopICBwYXNzZXM9ImNvbnYiCisJOzsKKyAgICBlc2FjCisgICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KKyAgICAgIGlmIHRlc3QgJGxpbmttb2RlID0gcHJvZzsgdGhlbgorCSMgRGV0ZXJtaW5lIHdoaWNoIGZpbGVzIHRvIHByb2Nlc3MKKwljYXNlICRwYXNzIGluCisJZGxvcGVuKQorCSAgbGlicz0iJGRsZmlsZXMiCisJICBzYXZlX2RlcGxpYnM9IiRkZXBsaWJzIiAjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJICBkZXBsaWJzPQorCSAgOzsKKwlkbHByZW9wZW4pIGxpYnM9IiRkbHByZWZpbGVzIiA7OworCWxpbmspIGxpYnM9IiRkZXBsaWJzICVERVBMSUJTJSAkZGVwZW5kZW5jeV9saWJzIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBmb3IgZGVwbGliIGluICRsaWJzOyBkbworCWxpYj0KKwlmb3VuZD1ubworCWNhc2UgJGRlcGxpYiBpbgorCS1sKikKKwkgIGlmIHRlc3QgJGxpbmttb2RlID0gb2xkbGliICYmIHRlc3QgJGxpbmttb2RlID0gb2JqOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHM6ICRkZXBsaWIiIDE+JjIKKwkgICAgY29udGludWUKKwkgIGZpCisJICBpZiB0ZXN0ICRwYXNzID0gY29udjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIG5hbWU9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLWwvLydgCisJICBmb3Igc2VhcmNoZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJICAgICMgU2VhcmNoIHRoZSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgbGliPSIkc2VhcmNoZGlyL2xpYiR7bmFtZX0ubGEiCisJICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJICAgICAgZm91bmQ9eWVzCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgIGRvbmUKKwkgIGlmIHRlc3QgIiRmb3VuZCIgIT0geWVzOyB0aGVuCisJICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0ICRsaW5rbW9kZSA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgY29udGludWUKKwkgIGZpCisJICA7OyAjIC1sCisJLUwqKQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgdGVzdCAkcGFzcyA9IGNvbnYgJiYgY29udGludWUKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAiYCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLUwvLydgCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICRwYXNzID0gY29udjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgY29udGludWUKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAkcGFzcyA9IHNjYW47IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAiYCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLUwvLydgCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICA7OworCSAgKikKKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0czogJGRlcGxpYiIgMT4mMgorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICBjb250aW51ZQorCSAgOzsgIyAtTAorCS1SKikKKwkgIGlmIHRlc3QgJHBhc3MgPSBsaW5rOyB0aGVuCisJICAgIGRpcj1gJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzL14tUi8vJ2AKKwkgICAgIyBNYWtlIHN1cmUgdGhlIHhycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRkaXIgIiopIDs7CisJICAgICopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGNvbnRpbnVlCisJICA7OworCSoubGEpIGxpYj0iJGRlcGxpYiIgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0ICRwYXNzID0gY29udjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGNhc2UgJGxpbmttb2RlIGluCisJICBsaWIpCisJICAgIGlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IFRyeWluZyB0byBsaW5rIHdpdGggc3RhdGljIGxpYiBhcmNoaXZlICRkZXBsaWIuIgorCSAgICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJICAgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkgICAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJICAgICAgZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCisJICAgICAgZWNobyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZWQgaGVyZS4iCisJICAgIGVsc2UKKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUiCisJICAgICAgZWNobyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgcHJvZykKKwkgICAgaWYgdGVzdCAkcGFzcyAhPSBsaW5rOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjICMgbGlua21vZGUKKwkgIDs7ICMgKi4kbGliZXh0CisJKi5sbyB8ICouJG9iamV4dCkKKwkgIGlmIHRlc3QgJHBhc3MgPSBkbHByZW9wZW4gfHwgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKKwkgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkZXBsaWIiCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkZGVwbGliIgorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCSVERVBMSUJTJSkKKwkgIGFsbGRlcGxpYnM9eWVzCisJICBjb250aW51ZQorCSAgOzsKKwllc2FjICMgY2FzZSAkZGVwbGliCisJaWYgdGVzdCAkZm91bmQgPSB5ZXMgfHwgdGVzdCAtZiAiJGxpYiI7IHRoZW4gOgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFxgJGxpYiciIDE+JjIKKwkgIGV4aXQgMQorCWZpCiAKLSAgICAqLmEpCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlpZiAoJHtTRUR9IC1lICcycScgJGxpYiB8IGVncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisJZWxzZQorCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKKwkgIGV4aXQgMQorCWZpCisKKwlsYWRpcj1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisJdGVzdCAiWCRsYWRpciIgPSAiWCRsaWIiICYmIGxhZGlyPSIuIgorCisJZGxuYW1lPQorCWRsb3Blbj0KKwlkbHByZW9wZW49CisJbGliZGlyPQorCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJIyBJZiB0aGUgbGlicmFyeSB3YXMgaW5zdGFsbGVkIHdpdGggYW4gb2xkIHJlbGVhc2Ugb2YgbGlidG9vbCwKKwkjIGl0IHdpbGwgbm90IHJlZGVmaW5lIHZhcmlhYmxlIGluc3RhbGxlZC4KKwlpbnN0YWxsZWQ9eWVzCisKKwkjIFJlYWQgdGhlIC5sYSBmaWxlCisJY2FzZSAkbGliIGluCisJKi8qIHwgKlxcKikgLiAkbGliIDs7CisJKikgLiAuLyRsaWIgOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAorCSAgIHsgdGVzdCAkbGlua21vZGUgPSBvbGRsaWIgJiYgdGVzdCAkbGlua21vZGUgPSBvYmo7IH07IHRoZW4KKwkgICAjIEFkZCBkbFtwcmVdb3BlbmVkIGZpbGVzIG9mIGRlcGxpYgorCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZGxmaWxlcz0iJGRsZmlsZXMgJGRsb3BlbiIKKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRkbHByZW9wZW4iCisJZmkKKworCWlmIHRlc3QgJHBhc3MgPSBjb252OyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIgMT4mMgorCSAgICAgIGV4aXQgMQorCSAgICBmaQorCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCisJICAgIGNvbnZlbmllbmNlPSIkY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICBvbGRfY29udmVuaWVuY2U9IiRvbGRfY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICB0bXBfbGlicz0KKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZHVwbGljYXRlX2RlcHMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZmkKKwkgICAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICAgIGRvbmUKKwkgIGVsaWYgdGVzdCAkbGlua21vZGUgIT0gcHJvZyAmJiB0ZXN0ICRsaW5rbW9kZSAhPSBsaWI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IiAxPiYyCisJICAgIGV4aXQgMQorCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGNvbnYKKworCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKwlsaW5rbGliPQorCWZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkgIGxpbmtsaWI9IiRsIgorCWRvbmUKKwlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIiAxPiYyCisJICBleGl0IDEKKwlmaQorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisJaWYgdGVzdCAkcGFzcyA9IGRsb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIiAxPiYyCisJICAgIGV4aXQgMQorCSAgZmkKKwkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgIyBJZiB0aGVyZSBpcyBubyBkbG5hbWUsIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcKKwkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIiCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWIiCisJICBmaQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gZGxvcGVuCisKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRsYWRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSIkbGFkaXIiIDs7CisJKikKKwkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAorCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRsYWRpciciIDE+JjIKKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogcGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIgMT4mMgorCSAgICBhYnNfbGFkaXI9IiRsYWRpciIKKwkgIGZpCisJICA7OworCWVzYWMKKwlsYW5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCisJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorCSAgaWYgdGVzdCAhIC1mICIkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBsaWJyYXJ5IFxgJGxpYicgd2FzIG1vdmVkLiIgMT4mMgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0iJGxpYmRpciIKKwkgICAgYWJzZGlyPSIkbGliZGlyIgorCSAgZmkKKwllbHNlCisJICBkaXI9IiRsYWRpci8kb2JqZGlyIgorCSAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCisJICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKKwluYW1lPWAkZWNobyAiWCRsYW5hbWUiIHwgJFhzZWQgLWUgJ3MvXC5sYSQvLycgLWUgJ3MvXmxpYi8vJ2AKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCWlmIHRlc3QgJHBhc3MgPSBkbHByZW9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIgMT4mMgorCSAgICBleGl0IDEKKwkgIGZpCisJICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKwkgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorCSAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCisJICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGRsbmFtZSIKKwkgIGVsc2UKKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kbGlua2xpYiIKKwkgIGZpCisJZmkgIyAkcGFzcyA9IGRscHJlb3BlbgorCisJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICMgTGluayB0aGUgY29udmVuaWVuY2UgbGlicmFyeQorCSAgaWYgdGVzdCAkbGlua21vZGUgPSBsaWI7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkKKworCWlmIHRlc3QgJGxpbmttb2RlID0gcHJvZyAmJiB0ZXN0ICRwYXNzICE9IGxpbms7IHRoZW4KKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGFkaXIiCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCisJICBsaW5rYWxsZGVwbGlicz1ubworCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICBsaW5rYWxsZGVwbGlicz15ZXMKKwkgIGZpCisKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggImAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1MLy8nYDs7ICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCSAgICBlc2FjCisJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KKwkgICAgaWYgdGVzdCAkbGlua2FsbGRlcGxpYnMgPSB5ZXM7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCisJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfZGVwcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICBkb25lICMgZm9yIGRlcGxpYgorCSAgY29udGludWUKKwlmaSAjICRsaW5rbW9kZSA9IHByb2cuLi4KKworCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKKwlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0gbm8gfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBzaGFyZWQgbGlicmFyeQorCisJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayIgfHwKKwkgICB7IHRlc3QgJGxpbmttb2RlID0gbGliICYmIHRlc3QgJGhhcmRjb2RlX2ludG9fbGlicyA9IHllczsgfTsgdGhlbgorCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgaWYgdGVzdCAkbGlua21vZGUgPSBwcm9nOyB0aGVuCisJICAgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKKwkgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkJIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCQljYXNlICIkdGVtcF9ycGF0aCAiIGluCisJCSoiICRkaXIgIiopIDs7CisJCSoiICRhYnNkaXIgIiopIDs7CisJCSopIHRlbXBfcnBhdGg9IiR0ZW1wX3JwYXRoICRkaXIiIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkgIyAkbGlua21vZGUsJHBhc3MgPSBwcm9nLGxpbmsuLi4KKworCSAgaWYgdGVzdCAiJGFsbGRlcGxpYnMiID0geWVzICYmCisJICAgICB7IHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSBwYXNzX2FsbCB8fAorCSAgICAgICB7IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmCisJCSB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IH07IH07IHRoZW4KKwkgICAgIyBXZSBvbmx5IG5lZWQgdG8gc2VhcmNoIGZvciBzdGF0aWMgbGlicmFyaWVzCisJICAgIGNvbnRpbnVlCisJICBmaQorCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCisJICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorCSAgICBuZWVkX3JlbGluaz15ZXMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KKwkgICAgIyBmaWd1cmUgb3V0IHRoZSBzb25hbWUKKwkgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJICAgIHJlYWxuYW1lPSIkMiIKKwkgICAgc2hpZnQ7IHNoaWZ0CisJICAgIGxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKKwkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/CisJICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgc29uYW1lPSIkZGxuYW1lIgorCSAgICBlbGlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgICAgICAjIGJsZWggd2luZG93cworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKikKKwkJbWFqb3I9YGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwkgICAgZWxzZQorCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgorCSAgICBmaQorCisJICAgICMgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUgZXh0cmFjdF9leHBzeW1zX2NtZHMgdG8gdXNlCisJICAgIHNvcm9vdD0iJHNvbmFtZSIKKwkgICAgc29uYW1lPWBlY2hvICRzb3Jvb3QgfCAke1NFRH0gLWUgJ3MvXi4qXC8vLydgCisJICAgIG5ld2xpYj0ibGliaW1wLWBlY2hvICRzb25hbWUgfCAke1NFRH0gJ3MvXmxpYi8vO3MvXC5kbGwkLy8nYC5hIgorCisJICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93CisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6CisJICAgIGVsc2UKKwkgICAgICAkc2hvdyAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCisJICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgICAgZXZhbCBjbWRzPVwiJGV4dHJhY3RfZXhwc3ltc19jbWRzXCIKKwkgICAgICBmb3IgY21kIGluICRjbWRzOyBkbworCQlJRlM9IiRzYXZlX2lmcyIKKwkJJHNob3cgIiRjbWQiCisJCSRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPworCSAgICAgIGRvbmUKKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZmkKKworCSAgICAjIENyZWF0ZSAkbmV3bGliCisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKwkgICAgICAkc2hvdyAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKKwkgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgICBldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNcIgorCSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisJCUlGUz0iJHNhdmVfaWZzIgorCQkkc2hvdyAiJGNtZCIKKwkJJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CisJICAgICAgZG9uZQorCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBmaQorCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQorCSAgICBkaXI9JG91dHB1dF9vYmpkaXIKKwkgICAgbGlua2xpYj0kbmV3bGliCisJICBmaSAjIHRlc3QgLW4gJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzCisKKwkgIGlmIHRlc3QgJGxpbmttb2RlID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgbGliX2xpbmtlZD15ZXMKKwkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCisJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0gbm87IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSIkZGlyIiA7OworCQllc2FjCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgcmVsaW5rKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisJCWFkZD0iJGRpci8kbGlua2xpYiIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCQlhZGRfZGlyPSItTCRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKSBsaWJfbGlua2VkPW5vIDs7CisJICAgIGVzYWMKKworCSAgICBpZiB0ZXN0ICIkbGliX2xpbmtlZCIgIT0geWVzOyB0aGVuCisJICAgICAgJGVjaG8gIiRtb2RlbmFtZTogY29uZmlndXJhdGlvbiBlcnJvcjogdW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKKwkgICAgICBleGl0IDEKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKwkgICAgICBjYXNlIDokY29tcGlsZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CisJICAgICAgKikgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRhZGRfc2hsaWJwYXRoOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGlmIHRlc3QgJGxpbmttb2RlID0gcHJvZzsgdGhlbgorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkICRjb21waWxlX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB5ZXMgJiYgXAorCQkgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IHllcyAmJiBcCisJCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkJKiI6JGxpYmRpcjoiKikgOzsKKwkJKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKworCSAgaWYgdGVzdCAkbGlua21vZGUgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCisJICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisJICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokbGliZGlyOiIqKSA7OworCSAgICAgICopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsc2UKKwkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAkbGlua21vZGUgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0ICRsaW5rbW9kZSA9IHByb2c7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbGxkZXBsaWJzIiA9IHllcyAmJgorCSAgICAgeyB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiID0gcGFzc19hbGwgfHwKKwkgICAgICAgeyB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJgorCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCisJICAgICMgV2Ugb25seSBuZWVkIHRvIHNlYXJjaCBmb3Igc3RhdGljIGxpYnJhcmllcworCSAgICBjb250aW51ZQorCSAgZmkKKworCSAgIyBUcnkgdG8gbGluayB0aGUgc3RhdGljIGxpYnJhcnkKKwkgICMgSGVyZSB3ZSBhc3N1bWUgdGhhdCBvbmUgb2YgaGFyZGNvZGVfZGlyZWN0IG9yIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgaXMgbm90IHVuc3VwcG9ydGVkLiAgVGhpcyBpcyB2YWxpZCBvbiBhbGwga25vd24gc3RhdGljIGFuZAorCSAgIyBzaGFyZWQgcGxhdGZvcm1zLgorCSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gdW5zdXBwb3J0ZWQ7IHRoZW4KKwkgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBsaW5rbGliPSIkb2xkX2xpYnJhcnkiCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZmkKKwllbGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisJICAgICMgV2UncmUgdHJ5aW5nIGxpbmsgYSBzaGFyZWQgbGlicmFyeSBhZ2FpbnN0IGEgc3RhdGljIG9uZQorCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKworCSAgICAjIEp1c3QgcHJpbnQgYSB3YXJuaW5nIGFuZCBhZGQgdGhlIGxpYnJhcnkgdG8gZGVwZW5kZW5jeV9saWJzIHNvCisJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgorCSAgICBlY2hvCisJICAgIGVjaG8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW4gbm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgorCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgorCSAgICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorCSAgICAgIGVjaG8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKKwkgICAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICBlY2hvICIqKiogaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZyB0byByZXNvbHZlIHN5bWJvbHMgYXQgcnVudGltZS4iCisJICAgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkJZWNobworCQllY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkJZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCQllY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgY29udmVuaWVuY2U9IiRjb252ZW5pZW5jZSAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKKwkgICAgbGlua19zdGF0aWM9eWVzCisJICBmaQorCWZpICMgbGluayBzaGFyZWQvc3RhdGljIGxpYnJhcnk/CisKKwlpZiB0ZXN0ICRsaW5rbW9kZSA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKKwkgICAgIHsgdGVzdCAkaGFyZGNvZGVfaW50b19saWJzICE9IHllcyB8fCB0ZXN0ICRidWlsZF9vbGRfbGlicyA9IHllcyB8fAorCSAgICAgICB0ZXN0ICRsaW5rX3N0YXRpYyA9IHllczsgfTsgdGhlbgorCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKwkgICAgdGVtcF9kZXBsaWJzPQorCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkbGliZGlyIGluCisJICAgICAgLVIqKSB0ZW1wX3hycGF0aD1gJGVjaG8gIlgkbGliZGlyIiB8ICRYc2VkIC1lICdzL14tUi8vJ2AKKwkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CisJCSAgICopIHhycGF0aD0iJHhycGF0aCAkdGVtcF94cnBhdGgiOzsKKwkJICAgZXNhYzs7CisJICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgorCSAgZmkKKworCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRhYnNkaXIiCisJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKKwkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfZGVwcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICBkb25lCisKKwkgIGlmIHRlc3QgJGxpbmtfYWxsX2RlcGxpYnMgIT0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKKwkgICAgICAqLmxhKQorCQlkaXI9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAorCQl0ZXN0ICJYJGRpciIgPSAiWCRkZXBsaWIiICYmIGRpcj0iLiIKKwkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJCWNhc2UgJGRpciBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKKwkJKikKKwkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KKwkJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIgMT4mMgorCQkgICAgYWJzZGlyPSIkZGlyIgorCQkgIGZpCisJCSAgOzsKKwkJZXNhYworCQlpZiBncmVwICJeaW5zdGFsbGVkPW5vIiAkZGVwbGliID4gL2Rldi9udWxsOyB0aGVuCisJCSAgcGF0aD0iLUwkYWJzZGlyLyRvYmpkaXIiCisJCWVsc2UKKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJCSAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgorCQkgICAgZXhpdCAxCisJCSAgZmkKKwkJICBpZiB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciI7IHRoZW4KKwkJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiIDE+JjIKKwkJICBmaQorCQkgIHBhdGg9Ii1MJGFic2RpciIKKwkJZmkKKwkJOzsKKwkgICAgICAqKSBjb250aW51ZSA7OworCSAgICAgIGVzYWMKKwkgICAgICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgICAgICoiICRwYXRoICIqKSA7OworCSAgICAgICopIGRlcGxpYnM9IiRkZXBsaWJzICRwYXRoIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkgIyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCisJZmkgIyBsaW5rbW9kZSA9IGxpYgorICAgICAgZG9uZSAjIGZvciBkZXBsaWIgaW4gJGxpYnMKKyAgICAgIGlmIHRlc3QgJHBhc3MgPSBkbHByZW9wZW47IHRoZW4KKwkjIExpbmsgdGhlIGRscHJlb3BlbmVkIGxpYnJhcmllcyBiZWZvcmUgb3RoZXIgbGlicmFyaWVzCisJZm9yIGRlcGxpYiBpbiAkc2F2ZV9kZXBsaWJzOyBkbworCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwlkb25lCisgICAgICBmaQorICAgICAgaWYgdGVzdCAkcGFzcyAhPSBkbG9wZW47IHRoZW4KKwl0ZXN0ICRwYXNzICE9IHNjYW4gJiYgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorCWlmIHRlc3QgJHBhc3MgIT0gY29udjsgdGhlbgorCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwlmaQorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiAhPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgdmFycz0iZGVwbGlicyIKKwllbHNlCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICopCisJICAgICAgY2FzZSAiICRzcGVjaWFsZGVwbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCSAgICAgICopCisJCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCQkqIiAkZGVwbGliICIqKSA7OworCQkqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJCWVzYWMKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRuZXdfbGliczsgZG8KKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikKKwkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJICBldmFsICR2YXI9XCIkdG1wX2xpYnNcIgorCWRvbmUgIyBmb3IgdmFyCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gImNvbnYiICYmCisgICAgICAgeyB0ZXN0ICIkbGlua21vZGUiID0gImxpYiIgfHwgdGVzdCAiJGxpbmttb2RlIiA9ICJwcm9nIjsgfTsgdGhlbgorCWxpYnM9IiRkZXBsaWJzIiAjIHJlc2V0IGxpYnMKKwlkZXBsaWJzPQorICAgICAgZmkKKyAgICBkb25lICMgZm9yIHBhc3MKKyAgICBpZiB0ZXN0ICRsaW5rbW9kZSA9IHByb2c7IHRoZW4KKyAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkdmluZm8iOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMgorICAgICAgZmkKKwogICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCiAgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLSAgICAgIGJ1aWxkX29sZF9saWJzPXllcwotICAgICAgb2xkbGliPSIkb3V0cHV0IgotICAgICAgJHNob3cgIiRybSAkb2xkbGliIgotICAgICAgJHJ1biAkcm0gJG9sZGxpYgorICAgICAgb2xkbGlicz0iJG91dHB1dCIKKyAgICAgIG9ianM9IiRvYmpzJG9sZF9kZXBsaWJzIgogICAgICAgOzsKIAotICAgICoubGEpCisgICAgbGliKQogICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgotICAgICAgY2FzZSAiJG91dHB1dCIgaW4KLSAgICAgIGxpYiopIDs7CisgICAgICBjYXNlICRvdXRwdXRuYW1lIGluCisgICAgICBsaWIqKQorCW5hbWU9YCRlY2hvICJYJG91dHB1dG5hbWUiIHwgJFhzZWQgLWUgJ3MvXC5sYSQvLycgLWUgJ3MvXmxpYi8vJ2AKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OwogICAgICAgKikKLQkkZWNobyAiJG1vZGVuYW1lOiBsaWJ0b29sIGxpYnJhcnkgXGAkYXJnJyBtdXN0IGJlZ2luIHdpdGggXGBsaWInIiAxPiYyCi0JJGVjaG8gIiRoZWxwIiAxPiYyCi0JZXhpdCAxCisJaWYgdGVzdCAiJG1vZHVsZSIgPSBubzsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogbGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIgMT4mMgorCSAgJGVjaG8gIiRoZWxwIiAxPiYyCisJICBleGl0IDEKKwlmaQorCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCisJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisJICBuYW1lPWAkZWNobyAiWCRvdXRwdXRuYW1lIiB8ICRYc2VkIC1lICdzL1wubGEkLy8nYAorCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJZWxzZQorCSAgbGlibmFtZT1gJGVjaG8gIlgkb3V0cHV0bmFtZSIgfCAkWHNlZCAtZSAncy9cLmxhJC8vJ2AKKwlmaQogCTs7CiAgICAgICBlc2FjCiAKLSAgICAgIG5hbWU9YCRlY2hvICJYJG91dHB1dCIgfCAkWHNlZCAtZSAncy9cLmxhJC8vJyAtZSAncy9ebGliLy8nYAotICAgICAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCi0KLSAgICAgICMgQWxsIHRoZSBsaWJyYXJ5LXNwZWNpZmljIHZhcmlhYmxlcyAoaW5zdGFsbF9saWJkaXIgaXMgc2V0IGFib3ZlKS4KLSAgICAgIGxpYnJhcnlfbmFtZXM9Ci0gICAgICBvbGRfbGlicmFyeT0KLSAgICAgIGRsbmFtZT0KLSAgICAgIGN1cnJlbnQ9MAotICAgICAgcmV2aXNpb249MAotICAgICAgYWdlPTAKLQogICAgICAgaWYgdGVzdCAtbiAiJG9ianMiOyB0aGVuCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHM6JG9ianMiIDI+JjEKLSAgICAgICAgZXhpdCAxCisJaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGJ1aWxkIGxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiIDI+JjEKKwkgIGV4aXQgMQorCWVsc2UKKwkgIGVjaG8KKwkgIGVjaG8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorCSAgZWNobyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKKwkgIGxpYm9ianM9IiRsaWJvYmpzICRvYmpzIgorCWZpCiAgICAgICBmaQogCi0gICAgICAjIEhvdyB0aGUgaGVjayBhcmUgd2Ugc3VwcG9zZWQgdG8gd3JpdGUgYSB3cmFwcGVyIGZvciBhIHNoYXJlZCBsaWJyYXJ5PwotICAgICAgaWYgdGVzdCAtbiAiJGxpbmtfYWdhaW5zdF9saWJ0b29sX2xpYnMiOyB0aGVuCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IGxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIG1heSBub3QgZGVwZW5kIG9uIHVuaW5zdGFsbGVkIGxpYnJhcmllczokbGlua19hZ2FpbnN0X2xpYnRvb2xfbGlicyIgMT4mMgotICAgICAgICBleGl0IDEKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiOyB0aGVuCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWRsb3BlbicgaXMgaWdub3JlZCB3aGlsZSBjcmVhdGluZyBsaWJ0b29sIGxpYnJhcmllcyIgMT4mMgotICAgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgotICAgICAgICBjb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAotICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJSBAU1lNRklMRUAlJSJgCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYW4gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSB3aXRoIFxgLXJwYXRoJyIgMT4mMgotCSRlY2hvICIkaGVscCIgMT4mMgotICAgICAgICBleGl0IDEKKyAgICAgIGlmIHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIiAxPiYyCiAgICAgICBmaQogCiAgICAgICBzZXQgZHVtbXkgJHJwYXRoCkBAIC04ODMsNjQxICsyMjAzLDE2MDUgQEAKICAgICAgIGZpCiAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDIiCiAKLSAgICAgICMgUGFyc2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXJndW1lbnQuCi0gICAgICBJRlM9IiR7SUZTPSAJfSI7IHNhdmVfaWZzPSIkSUZTIjsgSUZTPSc6JwotICAgICAgc2V0IGR1bW15ICR2aW5mbwotICAgICAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICBvbGRsaWJzPQorICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEJ1aWxkaW5nIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCSAgbGliZXh0PWFsCisJICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0ICRvbGRsaWJzIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPWNvbnZlbmllbmNlCisJICBidWlsZF9vbGRfbGlicz15ZXMKKwlmaQogCi0gICAgICBpZiB0ZXN0IC1uICIkNSI7IHRoZW4KLSAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogdG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIiAxPiYyCi0gICAgICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgICAgICBleGl0IDEKLSAgICAgIGZpCisJaWYgdGVzdCAtbiAiJHZpbmZvIjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiIDE+JjIKKwlmaQogCi0gICAgICB0ZXN0IC1uICIkMiIgJiYgY3VycmVudD0iJDIiCi0gICAgICB0ZXN0IC1uICIkMyIgJiYgcmV2aXNpb249IiQzIgotICAgICAgdGVzdCAtbiAiJDQiICYmIGFnZT0iJDQiCi0KLSAgICAgICMgQ2hlY2sgdGhhdCBlYWNoIG9mIHRoZSB0aGluZ3MgYXJlIHZhbGlkIG51bWJlcnMuCi0gICAgICBjYXNlICIkY3VycmVudCIgaW4KLSAgICAgIDAgfCBbMS05XSB8IFsxLTldWzAtOV0qKSA7OwotICAgICAgKikKLSAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogQ1VSUkVOVCBcYCRjdXJyZW50JyBpcyBub3QgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIiAxPiYyCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IFxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIgMT4mMgotICAgICAgICBleGl0IDEKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLQotICAgICAgY2FzZSAiJHJldmlzaW9uIiBpbgotICAgICAgMCB8IFsxLTldIHwgWzEtOV1bMC05XSopIDs7Ci0gICAgICAqKQotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiBSRVZJU0lPTiBcYCRyZXZpc2lvbicgaXMgbm90IGEgbm9ubmVnYXRpdmUgaW50ZWdlciIgMT4mMgotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iIDE+JjIKLSAgICAgICAgZXhpdCAxCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGNhc2UgIiRhZ2UiIGluCi0gICAgICAwIHwgWzEtOV0gfCBbMS05XVswLTldKikgOzsKLSAgICAgICopCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IEFHRSBcYCRhZ2UnIGlzIG5vdCBhIG5vbm5lZ2F0aXZlIGludGVnZXIiIDE+JjIKLSAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCi0gICAgICAgIGV4aXQgMQotICAgICAgICA7OwotICAgICAgZXNhYwotCi0gICAgICBpZiB0ZXN0ICRhZ2UgLWd0ICRjdXJyZW50OyB0aGVuCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IEFHRSBcYCRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIFxgJGN1cnJlbnQnIiAxPiYyCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IFxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIgMT4mMgotICAgICAgICBleGl0IDEKLSAgICAgIGZpCi0KLSAgICAgICMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KLSAgICAgIHZlcnNpb25fdmFycz0idmVyc2lvbl90eXBlIGN1cnJlbnQgYWdlIHJldmlzaW9uIgotICAgICAgY2FzZSAiJHZlcnNpb25fdHlwZSIgaW4KLSAgICAgIG5vbmUpIDs7Ci0KLSAgICAgIGxpbnV4KQotICAgICAgICB2ZXJzaW9uX3ZhcnM9IiR2ZXJzaW9uX3ZhcnMgbWFqb3IgdmVyc3VmZml4IgotICAgICAgICBtYWpvcj1gZXhwciAkY3VycmVudCAtICRhZ2VgCi0gICAgICAgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgotICAgICAgICA7OwotCi0gICAgICBvc2YpCi0gICAgICAgIHZlcnNpb25fdmFycz0iJHZlcnNpb25fdmFycyB2ZXJzdWZmaXggdmVyc3RyaW5nIgotICAgICAgICBtYWpvcj1gZXhwciAkY3VycmVudCAtICRhZ2VgCi0gICAgICAgIHZlcnN1ZmZpeD0iJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCi0gICAgICAgIHZlcnN0cmluZz0iJHZlcnN1ZmZpeCIKLQotICAgICAgICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgotICAgICAgICBsb29wPSRhZ2UKLSAgICAgICAgd2hpbGUgdGVzdCAkbG9vcCAhPSAwOyBkbwotICAgICAgICAgIGlmYWNlPWBleHByICRjdXJyZW50IC0gJGxvb3BgCi0gICAgICAgICAgbG9vcD1gZXhwciAkbG9vcCAtIDFgCi0gICAgICAgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCi0gICAgICAgIGRvbmUKLQotICAgICAgICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCi0gICAgICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCi0gICAgICAgIDs7Ci0KLSAgICAgIHN1bm9zKQotICAgICAgICB2ZXJzaW9uX3ZhcnM9IiR2ZXJzaW9uX3ZhcnMgbWFqb3IgdmVyc3VmZml4IgotICAgICAgICBtYWpvcj0iJGN1cnJlbnQiCi0gICAgICAgIHZlcnN1ZmZpeD0iJGN1cnJlbnQuJHJldmlzaW9uIgotICAgICAgICA7OwotCi0gICAgICAqKQotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiB1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciIDE+JjIKLSAgICAgICAgZWNobyAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4gIFNlZSB0aGUgJFBBQ0tBR0UgZG9jcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKLSAgICAgICAgZXhpdCAxCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgQ3JlYXRlIHRoZSBvdXRwdXQgZGlyZWN0b3J5LCBvciByZW1vdmUgb3VyIG91dHB1dHMgaWYgd2UgbmVlZCB0by4KLSAgICAgIGlmIHRlc3QgLWQgJG9iamRpcjsgdGhlbgotICAgICAgICAkc2hvdyAiJHJtICRvYmpkaXIvJG91dHB1dCAkb2JqZGlyLyRsaWJuYW1lLiogJG9iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qIgotICAgICAgICAkcnVuICRybSAkb2JqZGlyLyRvdXRwdXQgJG9iamRpci8kbGlibmFtZS4qICRvYmpkaXIvJHtsaWJuYW1lfSR7cmVsZWFzZX0uKgorCWlmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIiAxPiYyCisJZmkKICAgICAgIGVsc2UKLSAgICAgICAgJHNob3cgIiRta2RpciAkb2JqZGlyIgotICAgICAgICAkcnVuICRta2RpciAkb2JqZGlyCi0Jc3RhdHVzPSQ/Ci0JaWYgdGVzdCAkc3RhdHVzIC1lcSAwIHx8IHRlc3QgLWQgJG9iamRpcjsgdGhlbiA6CisKKwkjIFBhcnNlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFyZ3VtZW50LgorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSc6JworCXNldCBkdW1teSAkdmluZm8gMCAwIDAKKwlJRlM9IiRzYXZlX2lmcyIKKworCWlmIHRlc3QgLW4gIiQ4IjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogdG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIiAxPiYyCisJICAkZWNobyAiJGhlbHAiIDE+JjIKKwkgIGV4aXQgMQorCWZpCisKKwljdXJyZW50PSIkMiIKKwlyZXZpc2lvbj0iJDMiCisJYWdlPSIkNCIKKworCSMgQ2hlY2sgdGhhdCBlYWNoIG9mIHRoZSB0aGluZ3MgYXJlIHZhbGlkIG51bWJlcnMuCisJY2FzZSAkY3VycmVudCBpbgorCTAgfCBbMS05XSB8IFsxLTldWzAtOV0gfCBbMS05XVswLTldWzAtOV0pIDs7CisJKikKKwkgICRlY2hvICIkbW9kZW5hbWU6IENVUlJFTlQgXGAkY3VycmVudCcgaXMgbm90IGEgbm9ubmVnYXRpdmUgaW50ZWdlciIgMT4mMgorCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCisJICBleGl0IDEKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcmV2aXNpb24gaW4KKwkwIHwgWzEtOV0gfCBbMS05XVswLTldIHwgWzEtOV1bMC05XVswLTldKSA7OworCSopCisJICAkZWNobyAiJG1vZGVuYW1lOiBSRVZJU0lPTiBcYCRyZXZpc2lvbicgaXMgbm90IGEgbm9ubmVnYXRpdmUgaW50ZWdlciIgMT4mMgorCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCisJICBleGl0IDEKKwkgIDs7CisJZXNhYworCisJY2FzZSAkYWdlIGluCisJMCB8IFsxLTldIHwgWzEtOV1bMC05XSB8IFsxLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogQUdFIFxgJGFnZScgaXMgbm90IGEgbm9ubmVnYXRpdmUgaW50ZWdlciIgMT4mMgorCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCisJICBleGl0IDEKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAkYWdlIC1ndCAkY3VycmVudDsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogQUdFIFxgJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgXGAkY3VycmVudCciIDE+JjIKKwkgICRlY2hvICIkbW9kZW5hbWU6IFxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIgMT4mMgorCSAgZXhpdCAxCisJZmkKKworCSMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KKwltYWpvcj0KKwl2ZXJzdWZmaXg9CisJdmVyc3RyaW5nPQorCWNhc2UgJHZlcnNpb25fdHlwZSBpbgorCW5vbmUpIDs7CisKKwlkYXJ3aW4pCisJICAjIExpa2UgTGludXgsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gYXZhaWxhYmxlIGluCisJICAjIHZlcnN0cmluZyBmb3IgY29kaW5nIGl0IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCisJICBtYWpvcj0uYGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICAjIERhcndpbiBsZCBkb2Vzbid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0aW9ucy4uLgorCSAgbWlub3JfY3VycmVudD1gZXhwciAkY3VycmVudCArIDFgCisJICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICA7OworCisJZnJlZWJzZC1hb3V0KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiI7CisJICA7OworCisJZnJlZWJzZC1lbGYpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiOworCSAgOzsKKworCWlyaXggfCBub25zdG9wdXgpCisJICBtYWpvcj1gZXhwciAkY3VycmVudCAtICRhZ2UgKyAxYAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JHJldmlzaW9uCisJICB3aGlsZSB0ZXN0ICRsb29wICE9IDA7IGRvCisJICAgIGlmYWNlPWBleHByICRyZXZpc2lvbiAtICRsb29wYAorCSAgICBsb29wPWBleHByICRsb29wIC0gMWAKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZyIKKwkgIGRvbmUKKworCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gYC4nLgorCSAgbWFqb3I9LiRtYWpvcgorCSAgdmVyc3VmZml4PSIkbWFqb3IuJHJldmlzaW9uIgorCSAgOzsKKworCWxpbnV4KQorCSAgbWFqb3I9LmBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgOzsKKworCW9zZikKKwkgIG1ham9yPS5gZXhwciAkY3VycmVudCAtICRhZ2VgCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKwkgIHZlcnN0cmluZz0iJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisKKwkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCisJICBsb29wPSRhZ2UKKwkgIHdoaWxlIHRlc3QgJGxvb3AgIT0gMDsgZG8KKwkgICAgaWZhY2U9YGV4cHIgJGN1cnJlbnQgLSAkbG9vcGAKKwkgICAgbG9vcD1gZXhwciAkbG9vcCAtIDFgCisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2lmYWNlfS4wIgorCSAgZG9uZQorCisJICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtjdXJyZW50fS4wIgorCSAgOzsKKworCXN1bm9zKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwl3aW5kb3dzKQorCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KKwkgIG1ham9yPWBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKwkgIDs7CisKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogdW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSBcYCR2ZXJzaW9uX3R5cGUnIiAxPiYyCisJICBlY2hvICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiAgU2VlIHRoZSAkUEFDS0FHRSBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorCSAgZXhpdCAxCisJICA7OworCWVzYWMKKworCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCisJaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgIG1ham9yPQorCSAgdmVyc3RyaW5nPSIwLjAiCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbikKKwkgICAgIyB3ZSBjYW4ndCBjaGVjayBmb3IgIjAuMCIgaW4gYXJjaGl2ZV9jbWRzIGR1ZSB0byBxdW90aW5nCisJICAgICMgcHJvYmxlbXMsIHNvIHdlIHJlc2V0IGl0IGNvbXBsZXRlbHkKKwkgICAgdmVyc3RyaW5nPSIiCisJICAgIDs7CisJICAqKQorCSAgICB2ZXJzdHJpbmc9IjAuMCIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKwkgICAgdmVyc3VmZml4PQorCSAgZWxzZQorCSAgICB2ZXJzdWZmaXg9Ii4wLjAiCisJICBmaQorCWZpCisKKwkjIFJlbW92ZSB2ZXJzaW9uIGluZm8gZnJvbSBuYW1lIGlmIHZlcnNpb25pbmcgc2hvdWxkIGJlIGF2b2lkZWQKKwlpZiB0ZXN0ICIkYXZvaWRfdmVyc2lvbiIgPSB5ZXMgJiYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgbWFqb3I9CisJICB2ZXJzdWZmaXg9CisJICB2ZXJzdHJpbmc9IiIKKwlmaQorCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIGFyY2hpdmUgd2lsbCBoYXZlIHVuZGVmaW5lZCBzeW1ib2xzLgorCWlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciID0gdW5zdXBwb3J0ZWQ7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogdW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllcyIgMT4mMgorCSAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisJICBmaQogCWVsc2UKLQkgIGV4aXQgJHN0YXR1cworCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCiAJZmkKICAgICAgIGZpCiAKLSAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3ltYm9scy4KLSAgICAgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0geWVzOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgotICAgICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IHVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiIDE+JjIKLSAgICAgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLQkgIGJ1aWxkX29sZF9saWJzPXllcwotICAgICAgICBmaQotICAgICAgZWxzZQotICAgICAgICAjIERvbid0IGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzLgotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0iJG5vX3VuZGVmaW5lZF9mbGFnIgorICAgICAgaWYgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorCSMgUmVtb3ZlIG91ciBvdXRwdXRzLgorCSRzaG93ICIke3JtfXIgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qIgorCSRydW4gJHtybX1yICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfSR7cmVsZWFzZX0uKgogICAgICAgZmkKIAotICAgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBzeXN0ZW1zLgotICAgICAgZGVwZW5kZW5jeV9saWJzPSIkZGVwbGlicyIKLSAgICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1sYyIKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKwlvbGRsaWJzPSIkb2xkbGlicyAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCisJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorCW9sZG9ianM9IiRvYmpzICJgJGVjaG8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSckL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwlsaWJfc2VhcmNoX3BhdGg9YGVjaG8gIiRsaWJfc2VhcmNoX3BhdGggIiB8ICR7U0VEfSAtZSAncyUgJHBhdGggJSAlZydgCisJZGVwbGlicz1gZWNobyAiJGRlcGxpYnMgIiB8ICR7U0VEfSAtZSAncyUgLUwkcGF0aCAlICVnJ2AKKwlkZXBlbmRlbmN5X2xpYnM9YGVjaG8gIiRkZXBlbmRlbmN5X2xpYnMgIiB8ICR7U0VEfSAtZSAncyUgLUwkcGF0aCAlICVnJ2AKKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJdGVtcF94cnBhdGg9CisJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworCSAgdGVtcF94cnBhdGg9IiR0ZW1wX3hycGF0aCAtUiRsaWJkaXIiCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCAkaGFyZGNvZGVfaW50b19saWJzICE9IHllcyB8fCB0ZXN0ICRidWlsZF9vbGRfbGlicyA9IHllczsgdGhlbgorCSAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF94cnBhdGggJGRlcGVuZGVuY3lfbGlicyIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCisgICAgICBvbGRfZGxmaWxlcz0iJGRsZmlsZXMiCisgICAgICBkbGZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGRsZmlsZXM9IiRkbGZpbGVzICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICAjIE1ha2Ugc3VyZSBkbHByZWZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzCisgICAgICBvbGRfZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMiCisgICAgICBkbHByZWZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCisJY2FzZSAiJGRscHJlZmlsZXMgIiBpbgorCSoiICRsaWIgIiopIDs7CisJKikgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCiAKICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCi0gICAgICAgICMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKLSAgICAgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCi0gICAgICAgIHJlYWxuYW1lPSIkMiIKLSAgICAgICAgc2hpZnQ7IHNoaWZ0CisJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyopCisJICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZGVwbGlicz0iJGRlcGxpYnMgLWZyYW1ld29yayBTeXN0ZW0iCisJICAgIDs7CisJICAqLSotbmV0YnNkKikKKwkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICA7OworCSAgKikKKwkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKwkgICAgaWYgdGVzdCAkYnVpbGRfbGlidG9vbF9uZWVkX2xjID0gInllcyI7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGlicyAtbGMiCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJZmkKIAotICAgICAgICBpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCi0gICAgICAgICAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgotICAgICAgICBlbHNlCi0gICAgICAgICAgc29uYW1lPSIkcmVhbG5hbWUiCi0gICAgICAgIGZpCisJIyBUcmFuc2Zvcm0gZGVwbGlicyBpbnRvIG9ubHkgZGVwbGlicyB0aGF0IGNhbiBiZSBsaW5rZWQgaW4gc2hhcmVkLgorCW5hbWVfc2F2ZT0kbmFtZQorCWxpYm5hbWVfc2F2ZT0kbGlibmFtZQorCXJlbGVhc2Vfc2F2ZT0kcmVsZWFzZQorCXZlcnN1ZmZpeF9zYXZlPSR2ZXJzdWZmaXgKKwltYWpvcl9zYXZlPSRtYWpvcgorCSMgSSdtIG5vdCBzdXJlIGlmIEknbSB0cmVhdGluZyB0aGUgcmVsZWFzZSBjb3JyZWN0bHkuICBJIHRoaW5rCisJIyByZWxlYXNlIHNob3VsZCBzaG93IHVwIGluIHRoZSAtbCAoaWUgLWxnbXA1KSBzbyB3ZSBkb24ndCB3YW50IHRvCisJIyBhZGQgaXQgaW4gdHdpY2UuICBJcyB0aGF0IGNvcnJlY3Q/CisJcmVsZWFzZT0iIgorCXZlcnN1ZmZpeD0iIgorCW1ham9yPSIiCisJbmV3ZGVwbGlicz0KKwlkcm9wcGVkZGVwcz1ubworCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJcGFzc19hbGwpCisJICAjIERvbid0IGNoZWNrIGZvciBzaGFyZWQvc3RhdGljLiAgRXZlcnl0aGluZyB3b3Jrcy4KKwkgICMgVGhpcyBtaWdodCBiZSBhIGxpdHRsZSBuYWl2ZS4gIFdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sKKwkgICMgd2hldGhlciB0aGUgbGlicmFyeSBleGlzdHMgb3Igbm90LiAgQnV0IHRoaXMgaXMgb24KKwkgICMgb3NmMyAmIG9zZjQgYW5kIEknbSBub3QgcmVhbGx5IHN1cmUuLi4gSnVzdAorCSAgIyBpbXBsZW1lbnRpbmcgd2hhdCB3YXMgYWxyZWFkeSB0aGUgYmVoYXZpb3VyLgorCSAgbmV3ZGVwbGlicz0kZGVwbGlicworCSAgOzsKKwl0ZXN0X2NvbXBpbGUpCisJICAjIFRoaXMgY29kZSBzdHJlc3NlcyB0aGUgImxpYnJhcmllcyBhcmUgcHJvZ3JhbXMiIHBhcmFkaWdtIHRvIGl0cworCSAgIyBsaW1pdHMuIE1heWJlIGV2ZW4gYnJlYWtzIGl0LiAgV2UgY29tcGlsZSBhIHByb2dyYW0sIGxpbmtpbmcgaXQKKwkgICMgYWdhaW5zdCB0aGUgZGVwbGlicyBhcyBhIHByb3h5IGZvciB0aGUgbGlicmFyeS4gIFRoZW4gd2UgY2FuIGNoZWNrCisJICAjIHdoZXRoZXIgdGhleSBsaW5rZWQgaW4gc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIGxkZC4KKwkgICRybSBjb25mdGVzdC5jCisJICBjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisJICBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK0VPRgorCSAgJHJtIGNvbmZ0ZXN0CisJICAkQ0MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGlicworCSAgaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KKwkgICAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBuYW1lPSJgZXhwciAkaSA6ICctbFwoLipcKSdgIgorCSAgICAgICMgSWYgJG5hbWUgaXMgZW1wdHkgd2UgYXJlIG9wZXJhdGluZyBvbiBhIC1MIGFyZ3VtZW50LgorCSAgICAgIGlmIHRlc3QgLW4gIiRuYW1lIiAmJiB0ZXN0ICIkbmFtZSIgIT0gIjAiOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKKwkJZGVwbGliX21hdGNoZXM9YGV2YWwgXFwkZWNobyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcImAKKwkJc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlcworCQlkZXBsaWJfbWF0Y2g9JDIKKwkJaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQllbHNlCisJCSAgZHJvcHBlZGRlcHM9eWVzCisJCSAgZWNobworCQkgIGVjaG8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgaXQgZm9yIgorCQkgIGVjaG8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJZmkKKwkgICAgICBlbHNlCisJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgIyBFcnJvciBvY2N1cmVkIGluIHRoZSBmaXJzdCBjb21waWxlLiAgTGV0J3MgdHJ5IHRvIHNhbHZhZ2UKKwkgICAgIyB0aGUgc2l0dWF0aW9uOiBDb21waWxlIGEgc2VwYXJhdGUgcHJvZ3JhbSBmb3IgZWFjaCBsaWJyYXJ5LgorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBuYW1lPSJgZXhwciAkaSA6ICctbFwoLipcKSdgIgorCSAgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCisJICAgICAgaWYgdGVzdCAtbiAiJG5hbWUiICYmIHRlc3QgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKwkJJHJtIGNvbmZ0ZXN0CisJCSRDQyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRpCisJCSMgRGlkIGl0IHdvcms/CisJCWlmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCisJCSAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorCQkgIGxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKKwkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCBcXCRlY2hvIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiYAorCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXMKKwkJICBkZXBsaWJfbWF0Y2g9JDIKKwkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICBlbHNlCisJCSAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgIGVjaG8KKwkJICAgIGVjaG8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCSAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKKwkJICAgIGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICBmaQorCQllbHNlCisJCSAgZHJvcHBlZGRlcHM9eWVzCisJCSAgZWNobworCQkgIGVjaG8gIioqKiBXYXJuaW5nISAgTGlicmFyeSAkaSBpcyBuZWVkZWQgYnkgdGhpcyBsaWJyYXJ5IGJ1dCBJIHdhcyBub3QgYWJsZSB0byIKKwkJICBlY2hvICIqKiogIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgorCQkgIGVjaG8gIioqKiBsaWJyYXJ5IHRoYXQgaXQgZGVwZW5kcyBvbiBiZWZvcmUgdGhpcyBsaWJyYXJ5IHdpbGwgYmUgZnVsbHkiCisJCSAgZWNobyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKwkJZmkKKwkgICAgICBlbHNlCisJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGZpCisJICA7OworCWZpbGVfbWFnaWMqKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZAorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMiBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBuYW1lPSJgZXhwciAkYV9kZXBsaWIgOiAnLWxcKC4qXCknYCIKKwkgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCisJICAgIGlmIHRlc3QgLW4gIiRuYW1lIiAmJiB0ZXN0ICIkbmFtZSIgIT0gIjAiOyB0aGVuCisJICAgICAgbGlibmFtZT1gZXZhbCBcXCRlY2hvIFwiJGxpYm5hbWVfc3BlY1wiYAorCSAgICAgIGZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCBcCisJCQkgfCBncmVwICIgLT4gIiA+L2Rldi9udWxsOyB0aGVuCisJCQljb250aW51ZQorCQkgICAgICBmaQorCQkgICAgICAjIFRoZSBzdGF0ZW1lbnQgYWJvdmUgdHJpZXMgdG8gYXZvaWQgZW50ZXJpbmcgYW4KKwkJICAgICAgIyBlbmRsZXNzIGxvb3AgYmVsb3csIGluIGNhc2Ugb2YgY3ljbGljIGxpbmtzLgorCQkgICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFuIGVuZGxlc3MgbG9vcCwgc2luY2UgYSBsaW5rCisJCSAgICAgICMgbG9vcCBjYW4gYmUgY2xvc2VkIHdoaWxlIHdlIGZvbGxvdyBsaW5rcywKKwkJICAgICAgIyBidXQgc28gd2hhdD8KKwkJICAgICAgcG90bGliPSIkcG90ZW50X2xpYiIKKwkJICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIgMj4vZGV2L251bGw7IGRvCisJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICR7U0VEfSAncy8uKiAtPiAvLydgCisJCQljYXNlICRwb3RsaWJsaW5rIGluCisJCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHBvdGxpYj0iJHBvdGxpYmxpbmsiOzsKKwkJCSopIHBvdGxpYj1gJGVjaG8gIlgkcG90bGliIiB8ICRYc2VkIC1lICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCWVzYWMKKwkJICAgICAgZG9uZQorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgXAorCQkJIHwgJHtTRUR9IDEwcSBcCisJCQkgfCBlZ3JlcCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCQlhX2RlcGxpYj0iIgorCQkJYnJlYWsgMgorCQkgICAgICBmaQorCQkgICAgZG9uZQorCSAgICAgIGRvbmUKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQllY2hvICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKwkJICBlY2hvICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIGZpbGUgbWFnaWMgdGVzdCkiCisJCWVsc2UKKwkJICBlY2hvICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgIGVjaG8gIioqKiB1c2luZyBhIGZpbGUgbWFnaWMuIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkgICAgZmkKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW1hdGNoX3BhdHRlcm4qKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZAorCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMiBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBuYW1lPSJgZXhwciAkYV9kZXBsaWIgOiAnLWxcKC4qXCknYCIKKwkgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCisJICAgIGlmIHRlc3QgLW4gIiRuYW1lIiAmJiB0ZXN0ICIkbmFtZSIgIT0gIjAiOyB0aGVuCisJICAgICAgbGlibmFtZT1gZXZhbCBcXCRlY2hvIFwiJGxpYm5hbWVfc3BlY1wiYAorCSAgICAgIGZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQlwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgIHBvdGxpYj0iJHBvdGVudF9saWIiICMgc2VlIHN5bWxpbmstY2hlY2sgYmVsb3cgaW4gZmlsZV9tYWdpYyB0ZXN0CisJCSAgaWYgZXZhbCBlY2hvIFwiJHBvdGVudF9saWJcIiAyPi9kZXYvbnVsbCBcCisJCSAgICAgIHwgJHtTRUR9IDEwcSBcCisJCSAgICAgIHwgZWdyZXAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgICAgYV9kZXBsaWI9IiIKKwkJICAgIGJyZWFrIDIKKwkJICBmaQorCQlkb25lCisJICAgICAgZG9uZQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWRyb3BwZWRkZXBzPXllcworCQllY2hvCisJCWVjaG8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQkgIGVjaG8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKKwkJZWxzZQorCQkgIGVjaG8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgZWNobyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCSAgICBmaQorCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbm9uZSB8IHVua25vd24gfCAqKQorCSAgbmV3ZGVwbGlicz0iIgorCSAgaWYgJGVjaG8gIlggJGRlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyQvLycgXAorCSAgICAgICAtZSAncy8gLVtMUl1bXiBdKi8vZycgLWUgJ3MvWyAJXS8vZycgfAorCSAgICAgZ3JlcCAuID4vZGV2L251bGw7IHRoZW4KKwkgICAgZWNobworCSAgICBpZiB0ZXN0ICJYJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9ICJYbm9uZSI7IHRoZW4KKwkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCisJICAgIGVsc2UKKwkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorCSAgICBmaQorCSAgICBlY2hvICIqKiogQWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBkcm9wcGVkLiIKKwkgICAgZHJvcHBlZGRlcHM9eWVzCisJICBmaQorCSAgOzsKKwllc2FjCisJdmVyc3VmZml4PSR2ZXJzdWZmaXhfc2F2ZQorCW1ham9yPSRtYWpvcl9zYXZlCisJcmVsZWFzZT0kcmVsZWFzZV9zYXZlCisJbGlibmFtZT0kbGlibmFtZV9zYXZlCisJbmFtZT0kbmFtZV9zYXZlCiAKLSAgICAgICAgbGliPSIkb2JqZGlyLyRyZWFsbmFtZSIKKwljYXNlICRob3N0IGluCisJKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgaXMgdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgIG5ld2RlcGxpYnM9YCRlY2hvICJYICRuZXdkZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyAtZnJhbWV3b3JrIFN5c3RlbSAvJ2AKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGRyb3BwZWRkZXBzIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgZWNobworCSAgICBlY2hvICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKwkgICAgZWNobyAiKioqIGRlcGVuZGVuY2llcyBvZiBtb2R1bGUgJGxpYm5hbWUuICBUaGVyZWZvcmUsIGxpYnRvb2wgd2lsbCBjcmVhdGUiCisJICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgorCSAgICBlY2hvICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCisJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCSAgICAgIGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJICAgICAgZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCSAgICAgIGVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkgICAgICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkgICAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgZWxzZQorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBmaQorCSAgZWxzZQorCSAgICBlY2hvICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgorCSAgICBlY2hvICIqKiogYXV0b21hdGljYWxseSBhZGRlZCB3aGVuZXZlciBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggdGhpcyBsaWJyYXJ5IgorCSAgICBlY2hvICIqKiogb3IgaXMgZGVjbGFyZWQgdG8gLWRsb3BlbiBpdC4iCisKKwkgICAgaWYgdGVzdCAkYWxsb3dfdW5kZWZpbmVkID0gbm87IHRoZW4KKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICBlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKKwkgICAgICBlY2hvICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCisJICAgICAgZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCWZpCisJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCisJZGVwbGlicz0kbmV3ZGVwbGlicworICAgICAgZmkKKworICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgorICAgICAgbGlicmFyeV9uYW1lcz0KKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgZGxuYW1lPQorCisgICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgJGhhcmRjb2RlX2ludG9fbGlicyA9IHllczsgdGhlbgorCSAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworCSAgaGFyZGNvZGVfbGliZGlycz0KKwkgIGRlcF9ycGF0aD0KKwkgIHJwYXRoPSIkZmluYWxpemVfcnBhdGgiCisJICB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKwkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbworCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkJZWxzZQorCQkgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkJICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJICAgIDs7CisJCSAgKikKKwkJICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJICAgICAgZWxzZQorCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJCWRlcF9ycGF0aD0iJGRlcF9ycGF0aCAkZmxhZyIKKwkgICAgICBmaQorCSAgICBlbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGRvbmUKKwkgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCSAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgICBycGF0aD0KKwkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgIGRvbmUKKwkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCisJICBmaQorCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKKwlmaQorCisJc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgorCXRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCisJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisJZmkKKworCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCXJlYWxuYW1lPSIkMiIKKwlzaGlmdDsgc2hpZnQKKworCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwllbHNlCisJICBzb25hbWU9IiRyZWFsbmFtZSIKKwlmaQorCXRlc3QgLXogIiRkbG5hbWUiICYmIGRsbmFtZT0kc29uYW1lCisKKwlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKIAlmb3IgbGluawogCWRvCiAJICBsaW5rbmFtZXM9IiRsaW5rbmFtZXMgJGxpbmsiCiAJZG9uZQogCi0gICAgICAgICMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgUElDLgotICAgICAgICB0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRlY2hvICJYJGxpYm9ianMgIiB8ICRYc2VkIC1lICdzL1wubG8gLy5vIC9nJyAtZSAncy8gJC8vZydgCisJIyBFbnN1cmUgdGhhdCB3ZSBoYXZlIC5vIG9iamVjdHMgZm9yIGxpbmtlcnMgd2hpY2ggZGlzbGlrZSAubG8KKwkjIChlLmcuIGFpeCkgaW4gY2FzZSB3ZSBhcmUgcnVubmluZyAtLWRpc2FibGUtc3RhdGljCisJZm9yIG9iaiBpbiAkbGlib2JqczsgZG8KKwkgIHhkaXI9YCRlY2hvICJYJG9iaiIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAorCSAgaWYgdGVzdCAiWCR4ZGlyIiA9ICJYJG9iaiI7IHRoZW4KKwkgICAgeGRpcj0iLiIKKwkgIGVsc2UKKwkgICAgeGRpcj0iJHhkaXIiCisJICBmaQorCSAgYmFzZW9iaj1gJGVjaG8gIlgkb2JqIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJICBvbGRvYmo9YCRlY2hvICJYJGJhc2VvYmoiIHwgJFhzZWQgLWUgIiRsbzJvImAKKwkgIGlmIHRlc3QgISAtZiAkeGRpci8kb2xkb2JqOyB0aGVuCisJICAgICRzaG93ICIoY2QgJHhkaXIgJiYgJHtMTl9TfSAkYmFzZW9iaiAkb2xkb2JqKSIKKwkgICAgJHJ1biBldmFsICcoY2QgJHhkaXIgJiYgJHtMTl9TfSAkYmFzZW9iaiAkb2xkb2JqKScgfHwgZXhpdCAkPworCSAgZmkKKwlkb25lCiAKLSAgICAgICAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgotICAgICAgICBldmFsIGNtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKLSAgICAgICAgSUZTPSIke0lGUz0gCX0iOyBzYXZlX2lmcz0iJElGUyI7IElGUz0nOycKLSAgICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KLSAgICAgICAgICBJRlM9IiRzYXZlX2lmcyIKLSAgICAgICAgICAkc2hvdyAiJGNtZCIKLSAgICAgICAgICAkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KLSAgICAgICAgZG9uZQotICAgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkjIFVzZSBzdGFuZGFyZCBvYmplY3RzIGlmIHRoZXkgYXJlIHBpYworCXRlc3QgLXogIiRwaWNfZmxhZyIgJiYgbGlib2Jqcz1gJGVjaG8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAogCi0gICAgICAgICMgQ3JlYXRlIGxpbmtzIHRvIHRoZSByZWFsIGxpYnJhcnkuCi0gICAgICAgIGZvciBsaW5rbmFtZSBpbiAkbGlua25hbWVzOyBkbwotICAgICAgICAgICRzaG93ICIoY2QgJG9iamRpciAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lKSIKLSAgICAgICAgICAkcnVuIGV2YWwgJyhjZCAkb2JqZGlyICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWUpJyB8fCBleGl0ICQ/Ci0gICAgICAgIGRvbmUKKwkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiID0geWVzIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgJHNob3cgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAkcnVuICRybSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgZXZhbCBjbWRzPVwiJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgorCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICAkc2hvdyAiJGNtZCIKKwkgICAgICAkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAgICRzaG93ICJlZ3JlcCAtZSBcIiRleHBvcnRfc3ltYm9sc19yZWdleFwiIFwiJGV4cG9ydF9zeW1ib2xzXCIgPiBcIiR7ZXhwb3J0X3N5bWJvbHN9VFwiIgorCSAgICAgICRydW4gZXZhbCAnZWdyZXAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICAkc2hvdyAiJG12IFwiJHtleHBvcnRfc3ltYm9sc31UXCIgXCIkZXhwb3J0X3N5bWJvbHNcIiIKKwkgICAgICAkcnVuIGV2YWwgJyRtdiAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisJZmkKIAotICAgICAgICAjIElmIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KLSAgICAgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllczsgdGhlbgotICAgICAgICAgICMgT24gYWxsIGtub3duIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVzZSBhcmUgaWRlbnRpY2FsLgotICAgICAgICAgIGRsbmFtZT0iJHNvbmFtZSIKLSAgICAgICAgZmkKKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAkcnVuIGV2YWwgJyRlY2hvICJYJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiRleHBvcnRfc3ltYm9scyInCisJZmkKKworCWlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICBlbHNlCisJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICAgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKKwkgICAgJHJ1biAke3JtfXIgIiRnZW50b3AiCisJICAgICRzaG93ICJta2RpciAkZ2VudG9wIgorCSAgICAkcnVuIG1rZGlyICIkZ2VudG9wIgorCSAgICBzdGF0dXM9JD8KKwkgICAgaWYgdGVzdCAkc3RhdHVzIC1uZSAwICYmIHRlc3QgISAtZCAiJGdlbnRvcCI7IHRoZW4KKwkgICAgICBleGl0ICRzdGF0dXMKKwkgICAgZmkKKwkgICAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwkgICAgZm9yIHhsaWIgaW4gJGNvbnZlbmllbmNlOyBkbworCSAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KKwkgICAgICBjYXNlICR4bGliIGluCisJICAgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSB4YWJzPSIkeGxpYiIgOzsKKwkgICAgICAqKSB4YWJzPWBwd2RgIi8keGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgeGxpYj1gJGVjaG8gIlgkeGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgICAgIHhkaXI9IiRnZW50b3AvJHhsaWIiCisKKwkgICAgICAkc2hvdyAiJHtybX1yICR4ZGlyIgorCSAgICAgICRydW4gJHtybX1yICIkeGRpciIKKwkgICAgICAkc2hvdyAibWtkaXIgJHhkaXIiCisJICAgICAgJHJ1biBta2RpciAiJHhkaXIiCisJICAgICAgc3RhdHVzPSQ/CisJICAgICAgaWYgdGVzdCAkc3RhdHVzIC1uZSAwICYmIHRlc3QgISAtZCAiJHhkaXIiOyB0aGVuCisJCWV4aXQgJHN0YXR1cworCSAgICAgIGZpCisJICAgICAgJHNob3cgIihjZCAkeGRpciAmJiAkQVIgeCAkeGFicykiCisJICAgICAgJHJ1biBldmFsICIoY2QgXCR4ZGlyICYmICRBUiB4IFwkeGFicykiIHx8IGV4aXQgJD8KKworCSAgICAgIGxpYm9ianM9IiRsaWJvYmpzICJgZmluZCAkeGRpciAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkTkwyU1BgCisJICAgIGRvbmUKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorCWZpCisKKwkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAke3JlYWxuYW1lfVUgJiYgJG12ICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisJZmkKKworCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgZXZhbCBjbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorCWVsc2UKKwkgIHNhdmVfZGVwbGlicz0iJGRlcGxpYnMiCisJICBmb3IgY29udiBpbiAkY29udmVuaWVuY2U7IGRvCisJICAgIHRtcF9kZXBsaWJzPQorCSAgICBmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgaWYgdGVzdCAiJHRlc3RfZGVwbGliIiAhPSAiJGNvbnYiOyB0aGVuCisJCXRtcF9kZXBsaWJzPSIkdG1wX2RlcGxpYnMgJHRlc3RfZGVwbGliIgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgICAgZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorCSAgZG9uZQorCSAgZXZhbCBjbWRzPVwiJGFyY2hpdmVfY21kc1wiCisJICBkZXBsaWJzPSIkc2F2ZV9kZXBsaWJzIgorCWZpCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgJHNob3cgIiRjbWQiCisJICAkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisKKwkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAke3JlYWxuYW1lfVQgJiYgJG12ICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJG12ICIkcmVhbG5hbWUiVSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CisJICBleGl0IDAKKwlmaQorCisJIyBDcmVhdGUgbGlua3MgdG8gdGhlIHJlYWwgbGlicmFyeS4KKwlmb3IgbGlua25hbWUgaW4gJGxpbmtuYW1lczsgZG8KKwkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KKwkgICAgJHNob3cgIihjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWUpIgorCSAgICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWUpJyB8fCBleGl0ICQ/CisJICBmaQorCWRvbmUKKworCSMgSWYgLW1vZHVsZSBvciAtZXhwb3J0LWR5bmFtaWMgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBkbG5hbWUuCisJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgfHwgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllczsgdGhlbgorCSAgIyBPbiBhbGwga25vd24gb3BlcmF0aW5nIHN5c3RlbXMsIHRoZXNlIGFyZSBpZGVudGljYWwuCisJICBkbG5hbWU9IiRzb25hbWUiCisJZmkKICAgICAgIGZpCi0KLSAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgotICAgICAgb2xkbGliPSIkb2JqZGlyLyRsaWJuYW1lLmEiCiAgICAgICA7OwogCi0gICAgKi5sbyB8ICoubykKLSAgICAgIGlmIHRlc3QgLW4gIiRsaW5rX2FnYWluc3RfbGlidG9vbF9saWJzIjsgdGhlbgotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiBlcnJvcjogY2Fubm90IGxpbmsgbGlidG9vbCBsaWJyYXJpZXMgaW50byByZWxvYWRhYmxlIG9iamVjdHMiIDE+JjIKLSAgICAgICAgZXhpdCAxCi0gICAgICBmaQotCisgICAgb2JqKQogICAgICAgaWYgdGVzdCAtbiAiJGRlcGxpYnMiOyB0aGVuCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCB3aGlsZSBjcmVhdGluZyBvYmplY3RzIiAxPiYyCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiAxPiYyCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIjsgdGhlbgotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1kbG9wZW4nIGlzIGlnbm9yZWQgd2hpbGUgY3JlYXRpbmcgb2JqZWN0cyIgMT4mMgotICAgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgotICAgICAgICBjb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAotICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJSBAU1lNRklMRUAlJSJgCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgogICAgICAgZmkKIAogICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1ycGF0aCcgaXMgaWdub3JlZCB3aGlsZSBjcmVhdGluZyBvYmplY3RzIiAxPiYyCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgogICAgICAgZmkKIAogICAgICAgaWYgdGVzdCAtbiAiJHZpbmZvIjsgdGhlbgotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgd2hpbGUgY3JlYXRpbmcgb2JqZWN0cyIgMT4mMgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgogICAgICAgZmkKIAogICAgICAgaWYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgd2hpbGUgY3JlYXRpbmcgb2JqZWN0cyIgMT4mMgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKICAgICAgIGZpCiAKLSAgICAgIGNhc2UgIiRvdXRwdXQiIGluCisgICAgICBjYXNlICRvdXRwdXQgaW4KICAgICAgICoubG8pCi0gICAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgotICAgICAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIgMT4mMgotICAgICAgICAgIGV4aXQgMQotICAgICAgICBmaQotICAgICAgICBsaWJvYmo9IiRvdXRwdXQiCi0gICAgICAgIG9iaj1gJGVjaG8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICdzL1wubG8kLy5vLydgCi0gICAgICAgIDs7CisJaWYgdGVzdCAtbiAiJG9ianMkb2xkX2RlcGxpYnMiOyB0aGVuCisJICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiIDE+JjIKKwkgIGV4aXQgMQorCWZpCisJbGlib2JqPSIkb3V0cHV0IgorCW9iaj1gJGVjaG8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICIkbG8ybyJgCisJOzsKICAgICAgICopCi0gICAgICAgIGxpYm9iaj0KLSAgICAgICAgb2JqPSIkb3V0cHV0IgotICAgICAgICA7OworCWxpYm9iaj0KKwlvYmo9IiRvdXRwdXQiCisJOzsKICAgICAgIGVzYWMKIAogICAgICAgIyBEZWxldGUgdGhlIG9sZCBvYmplY3RzLgogICAgICAgJHJ1biAkcm0gJG9iaiAkbGlib2JqCiAKKyAgICAgICMgT2JqZWN0cyBmcm9tIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoaXMgYXNzdW1lcworICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKKyAgICAgICMgZGlmZmVyZW50IG9uZXMgZm9yIFBJQy9ub24tUElDLCB0aGlzIHdlJ2xsIGhhdmUgdG8gZHVwbGljYXRlCisgICAgICAjIHRoZSBleHRyYWN0aW9uLgorICAgICAgcmVsb2FkX2NvbnZfb2Jqcz0KKyAgICAgIGdlbnRvcD0KKyAgICAgICMgcmVsb2FkX2NtZHMgcnVucyAkTEQgZGlyZWN0bHksIHNvIGxldCB1cyBnZXQgcmlkIG9mCisgICAgICAjIC1XbCBmcm9tIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjCisgICAgICB3bD0KKworICAgICAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgcmVsb2FkX2NvbnZfb2Jqcz1cIlwkcmVsb2FkX29ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwllbHNlCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCisJICAkc2hvdyAiJHtybX1yICRnZW50b3AiCisJICAkcnVuICR7cm19ciAiJGdlbnRvcCIKKwkgICRzaG93ICJta2RpciAkZ2VudG9wIgorCSAgJHJ1biBta2RpciAiJGdlbnRvcCIKKwkgIHN0YXR1cz0kPworCSAgaWYgdGVzdCAkc3RhdHVzIC1uZSAwICYmIHRlc3QgISAtZCAiJGdlbnRvcCI7IHRoZW4KKwkgICAgZXhpdCAkc3RhdHVzCisJICBmaQorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwkgIGZvciB4bGliIGluICRjb252ZW5pZW5jZTsgZG8KKwkgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgorCSAgICBjYXNlICR4bGliIGluCisJICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgeGFicz0iJHhsaWIiIDs7CisJICAgICopIHhhYnM9YHB3ZGAiLyR4bGliIiA7OworCSAgICBlc2FjCisJICAgIHhsaWI9YCRlY2hvICJYJHhsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKwkgICAgeGRpcj0iJGdlbnRvcC8keGxpYiIKKworCSAgICAkc2hvdyAiJHtybX1yICR4ZGlyIgorCSAgICAkcnVuICR7cm19ciAiJHhkaXIiCisJICAgICRzaG93ICJta2RpciAkeGRpciIKKwkgICAgJHJ1biBta2RpciAiJHhkaXIiCisJICAgIHN0YXR1cz0kPworCSAgICBpZiB0ZXN0ICRzdGF0dXMgLW5lIDAgJiYgdGVzdCAhIC1kICIkeGRpciI7IHRoZW4KKwkgICAgICBleGl0ICRzdGF0dXMKKwkgICAgZmkKKwkgICAgJHNob3cgIihjZCAkeGRpciAmJiAkQVIgeCAkeGFicykiCisJICAgICRydW4gZXZhbCAiKGNkIFwkeGRpciAmJiAkQVIgeCBcJHhhYnMpIiB8fCBleGl0ICQ/CisKKwkgICAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICJgZmluZCAkeGRpciAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkTkwyU1BgCisJICBkb25lCisJZmkKKyAgICAgIGZpCisKICAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotICAgICAgcmVsb2FkX29ianM9IiRvYmpzImAkZWNobyAiWCRsaWJvYmpzICIgfCAkWHNlZCAtZSAncy9bXiAgICAgICBdKlwuYSAvL2cnIC1lICdzL1wubG8gLy5vIC9nJyAtZSAncy8gJC8vZydgCisgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkZWNobyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICcvXC4nJHtsaWJleHR9JCcvZCcgLWUgJy9cLmxpYiQvZCcgLWUgIiRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKIAogICAgICAgb3V0cHV0PSIkb2JqIgogICAgICAgZXZhbCBjbWRzPVwiJHJlbG9hZF9jbWRzXCIKLSAgICAgIElGUz0iJHtJRlM9IAl9Ijsgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JzsnCisgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKICAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0gICAgICAgIElGUz0iJHNhdmVfaWZzIgotICAgICAgICAkc2hvdyAiJGNtZCIKLSAgICAgICAgJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CisJSUZTPSIkc2F2ZV9pZnMiCisJJHNob3cgIiRjbWQiCisJJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CiAgICAgICBkb25lCiAgICAgICBJRlM9IiRzYXZlX2lmcyIKIAogICAgICAgIyBFeGl0IGlmIHdlIGFyZW4ndCBkb2luZyBhIGxpYnJhcnkgb2JqZWN0IGZpbGUuCi0gICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiBleGl0IDAKKyAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKKwkgICRydW4gJHtybX1yICRnZW50b3AKKwlmaQogCi0gICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KLSAgICAgICAgIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKLSAgICAgICAgIyBhY2NpZGVudGFsbHkgbGluayBpdCBpbnRvIGEgcHJvZ3JhbS4KLSAgICAgICAgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKLSAgICAgICAgJHJ1biBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KLSAgICAgICAgZXhpdCAwCisJZXhpdCAwCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0IC1uICIkcGljX2ZsYWciOyB0aGVuCi0gICAgICAgICMgT25seSBkbyBjb21tYW5kcyBpZiB3ZSByZWFsbHkgaGF2ZSBkaWZmZXJlbnQgUElDIG9iamVjdHMuCi0gICAgICAgIHJlbG9hZF9vYmpzPSIkbGlib2JqcyIKLSAgICAgICAgb3V0cHV0PSIkbGlib2JqIgotICAgICAgICBldmFsIGNtZHM9XCIkcmVsb2FkX2NtZHNcIgotICAgICAgICBJRlM9IiR7SUZTPSAJfSI7IHNhdmVfaWZzPSIkSUZTIjsgSUZTPSc7JwotICAgICAgICBmb3IgY21kIGluICRjbWRzOyBkbwotICAgICAgICAgIElGUz0iJHNhdmVfaWZzIgotICAgICAgICAgICRzaG93ICIkY21kIgotICAgICAgICAgICRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPwotICAgICAgICBkb25lCi0gICAgICAgIElGUz0iJHNhdmVfaWZzIgorICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKKwkgICRydW4gJHtybX1yICRnZW50b3AKKwlmaQorCisJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKKwkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgorCSRzaG93ICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiCisJJHJ1biBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKwlleGl0IDAKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCAiJHBpY19tb2RlIiAhPSBkZWZhdWx0OyB0aGVuCisJIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KKwlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCisJb3V0cHV0PSIkbGlib2JqIgorCWV2YWwgY21kcz1cIiRyZWxvYWRfY21kc1wiCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgJHNob3cgIiRjbWQiCisJICAkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCiAgICAgICBlbHNlCi0gICAgICAgICMgSnVzdCBjcmVhdGUgYSBzeW1saW5rLgotICAgICAgICAkc2hvdyAiJExOX1MgJG9iaiAkbGlib2JqIgotICAgICAgICAkcnVuICRMTl9TICRvYmogJGxpYm9iaiB8fCBleGl0IDEKKwkjIEp1c3QgY3JlYXRlIGEgc3ltbGluay4KKwkkc2hvdyAkcm0gJGxpYm9iagorCSRydW4gJHJtICRsaWJvYmoKKwl4ZGlyPWAkZWNobyAiWCRsaWJvYmoiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwlpZiB0ZXN0ICJYJHhkaXIiID0gIlgkbGlib2JqIjsgdGhlbgorCSAgeGRpcj0iLiIKKwllbHNlCisJICB4ZGlyPSIkeGRpciIKKwlmaQorCWJhc2VvYmo9YCRlY2hvICJYJGxpYm9iaiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCW9sZG9iaj1gJGVjaG8gIlgkYmFzZW9iaiIgfCAkWHNlZCAtZSAiJGxvMm8iYAorCSRzaG93ICIoY2QgJHhkaXIgJiYgJExOX1MgJG9sZG9iaiAkYmFzZW9iaikiCisJJHJ1biBldmFsICcoY2QgJHhkaXIgJiYgJExOX1MgJG9sZG9iaiAkYmFzZW9iaiknIHx8IGV4aXQgJD8KKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJJHNob3cgIiR7cm19ciAkZ2VudG9wIgorCSRydW4gJHtybX1yICRnZW50b3AKICAgICAgIGZpCiAKICAgICAgIGV4aXQgMAogICAgICAgOzsKIAotICAgICopCisgICAgcHJvZykKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKikgb3V0cHV0PWBlY2hvICRvdXRwdXQgfCAke1NFRH0gLWUgJ3MsLmV4ZSQsLDtzLCQsLmV4ZSwnYCA7OworICAgICAgZXNhYwogICAgICAgaWYgdGVzdCAtbiAiJHZpbmZvIjsgdGhlbgotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgd2hpbGUgbGlua2luZyBwcm9ncmFtcyIgMT4mMgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiIDE+JjIKICAgICAgIGZpCiAKICAgICAgIGlmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIHdoaWxlIGNyZWF0aW5nIG9iamVjdHMiIDE+JjIKKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIgMT4mMgogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorICAgICAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzOyB0aGVuCisJaWYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHVua25vd24gJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gJiYKKwkgICB0ZXN0ICIkZGxvcGVuX3NlbGZfc3RhdGljIiA9IHVua25vd247IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgQUNfTElCVE9PTF9ETE9QRU4nIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworCWNvbXBpbGVfZGVwbGlicz1gJGVjaG8gIlggJGNvbXBpbGVfZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gLWZyYW1ld29yayBTeXN0ZW0gLydgCisJZmluYWxpemVfZGVwbGlicz1gJGVjaG8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIC1mcmFtZXdvcmsgU3lzdGVtIC8nYAorCWNhc2UgJGhvc3QgaW4KKwkqZGFyd2luKikKKwkgICMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKKwkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCisJICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCisJICA7OworCWVzYWMKKwk7OworICAgICAgZXNhYworCisgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGNvbXBpbGVfZGVwbGlicyIKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRmaW5hbGl6ZV9kZXBsaWJzIgorCisgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgogCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KLQlmb3IgbGliZGlyIGluICRycGF0aDsgZG8KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KLSAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgotICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLSAgICAgICAgICAgICAgICAjIFB1dCB0aGUgbWFnaWMgbGliZGlyIHdpdGggdGhlIGhhcmRjb2RlIGZsYWcuCi0gICAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKLSAgICAgICAgICAgICAgICBsaWJkaXI9IkBIQVJEQ09ERV9MSUJESVJTQCIKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KLQkJY2FzZSAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiBpbgotCQkqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCi0JCSAgOzsKLQkJKikKLQkJICBoYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKLQkJICA7OwotCQllc2FjCi0gICAgICAgICAgICAgICAgbGliZGlyPQotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZmkKLQotICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGxpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotCi0gICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkZmxhZyIKLSAgICAgICAgICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGZsYWciCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotICAgICAgICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgotICAgICAgICAgICAgKiIgJGxpYmRpciAiKikgOzsKLSAgICAgICAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7Ci0gICAgICAgICAgICBlc2FjCi0gICAgICAgICAgZmkKKwlmb3IgbGliZGlyIGluICRycGF0aCAkeHJwYXRoOyBkbworCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgorCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCiAJZG9uZQogICAgICAgZmkKIAotICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBjb21waWxlIGNvbW1hbmRzLgotICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCi0JY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQEhBUkRDT0RFX0xJQkRJUlNAJSRoYXJkY29kZV9saWJkaXJzJWciYAotCWZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQEhBUkRDT0RFX0xJQkRJUlNAJSRoYXJkY29kZV9saWJkaXJzJWciYAorICAgICAgIyBOb3cgaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRsaWJkaXI6IiopIDs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokbGliZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKICAgICAgIGZpCisgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3Blcm1fcnBhdGg9IiRmaW5hbGl6ZV9wZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgogCiAgICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotICAgICAgICAjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCi0gICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kICIgfCAkWHNlZCAtZSAncy9cLmxvIC8ubyAvZycgLWUgJ3MvICQvLydgCi0gICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQgIiB8ICRYc2VkIC1lICdzL1wubG8gLy5vIC9nJyAtZSAncy8gJC8vJ2AKKwkjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCisJY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwlmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiROTSIgJiYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLSAgICAgICAgZGxzeW1zPSIke291dHB1dH1TLmMiCi0gICAgICBlbHNlCi0gICAgICAgIGRsc3ltcz0KKyAgICAgIGRsc3ltcz0KKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCSAgZGxzeW1zPSIke291dHB1dG5hbWV9Uy5jIgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IG5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIgMT4mMgorCWZpCiAgICAgICBmaQogCiAgICAgICBpZiB0ZXN0IC1uICIkZGxzeW1zIjsgdGhlbgotICAgICAgICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgcHJlbG9hZGVkIGxpc3QuCi0gICAgICAgIGRscHJlZmlsZXM9YCRlY2hvICJYJG9ianMkZGxwcmVmaWxlcyAiIHwgJFhzZWQgLWUgJ3MvXC5sbyAvLm8gL2cnIC1lICdzLyAkLy8nYAorCWNhc2UgJGRsc3ltcyBpbgorCSIiKSA7OworCSouYykKKwkgICMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCisJICBubGlzdD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfS5ubSIKIAotCSMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCi0gICAgICAgIG5saXN0PSIkb2JqZGlyLyR7b3V0cHV0fS5ubSIKKwkgICRzaG93ICIkcm0gJG5saXN0ICR7bmxpc3R9UyAke25saXN0fVQiCisJICAkcnVuICRybSAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIgogCi0JaWYgdGVzdCAtZCAkb2JqZGlyOyB0aGVuCi0JICAkc2hvdyAiJHJtICRubGlzdCAke25saXN0fVQiCi0JICAkcnVuICRybSAiJG5saXN0IiAiJHtubGlzdH1UIgotCWVsc2UKLQkgICRzaG93ICIkbWtkaXIgJG9iamRpciIKLQkgICRydW4gJG1rZGlyICRvYmpkaXIKLQkgIHN0YXR1cz0kPwotCSAgaWYgdGVzdCAkc3RhdHVzIC1lcSAwIHx8IHRlc3QgLWQgJG9iamRpcjsgdGhlbiA6Ci0JICBlbHNlCi0JICAgIGV4aXQgJHN0YXR1cwotCSAgZmkKLQlmaQorCSAgIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KKwkgICRzaG93ICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kZGxzeW1zIgogCi0gICAgICAgIGZvciBhcmcgaW4gJGRscHJlZmlsZXM7IGRvCi0JICAkc2hvdyAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkYXJnJyIKLQkgICRydW4gZXZhbCAiJE5NICRhcmcgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgotICAgICAgICBkb25lCi0KLSAgICAgICAgIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KLSAgICAgICAgJHNob3cgImNyZWF0aW5nICRvYmpkaXIvJGRsc3ltcyIKLSAgICAgICAgaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KLQkgICMgTWFrZSBzdXJlIHdlIGF0IGxlYXN0IGhhdmUgYW4gZW1wdHkgZmlsZS4KLQkgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCi0KLQkgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCi0JICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgotCSAgICBtdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKLQkgICAgd2NvdXQ9YHdjICIkbmxpc3QiIDI+L2Rldi9udWxsYAotCSAgICBjb3VudD1gZWNobyAiWCR3Y291dCIgfCAkWHNlZCAtZSAncy9eWyAJXSpcKFswLTldWzAtOV0qXCkuKiQvXDEvJ2AKLQkgICAgKHRlc3QgIiRjb3VudCIgLWdlIDApIDI+L2Rldi9udWxsIHx8IGNvdW50PS0xCi0JICBlbHNlCi0JICAgICRybSAiJG5saXN0IlQKLQkgICAgY291bnQ9LTEKLQkgIGZpCi0KLQkgIGNhc2UgIiRkbHN5bXMiIGluCi0JICAiIikgOzsKLQkgICouYykKLQkgICAgJGVjaG8gPiAiJG9iamRpci8kZGxzeW1zIiAiXAotLyogJGRsc3ltcyAtIHN5bWJvbCByZXNvbHV0aW9uIHRhYmxlIGZvciBcYCRvdXRwdXQnIGRsc3ltIGVtdWxhdGlvbi4gKi8KLS8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiAqLworCSAgdGVzdCAteiAiJHJ1biIgJiYgJGVjaG8gPiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKKy8qICRkbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUCAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiBcIkNcIiB7CiAjZW5kaWYKIAogLyogUHJldmVudCB0aGUgb25seSBraW5kIG9mIGRlY2xhcmF0aW9uIGNvbmZsaWN0cyB3ZSBjYW4gbWFrZS4gKi8KLSNkZWZpbmUgZGxkX3ByZWxvYWRlZF9zeW1ib2xfY291bnQgc29tZV9vdGhlcl9zeW1ib2wKLSNkZWZpbmUgZGxkX3ByZWxvYWRlZF9zeW1ib2xzIHNvbWVfb3RoZXJfc3ltYm9sCisjZGVmaW5lIGx0X3ByZWxvYWRlZF9zeW1ib2xzIHNvbWVfb3RoZXJfc3ltYm9sCiAKIC8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCiAiCiAKLQkgICAgaWYgdGVzdCAtZiAiJG5saXN0IjsgdGhlbgotCSAgICAgIHNlZCAtZSAncy9eLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvJyA8ICIkbmxpc3QiID4+ICIkb2JqZGlyLyRkbHN5bXMiCi0JICAgIGVsc2UKLQkgICAgICBlY2hvICcvKiBOT05FICovJyA+PiAiJG9iamRpci8kZGxzeW1zIgorCSAgaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KKwkgICAgJHNob3cgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCisKKwkgICAgdGVzdCAteiAiJHJ1biIgJiYgJGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKwkgICAgcHJvZ2ZpbGVzPWAkZWNobyAiWCRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJICAgIGZvciBhcmcgaW4gJHByb2dmaWxlczsgZG8KKwkgICAgICAkc2hvdyAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkYXJnJyIKKwkgICAgICAkcnVuIGV2YWwgIiROTSAkYXJnIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgICAgZG9uZQorCisJICAgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICAgJHJ1biBldmFsICdlZ3JlcCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgICRydW4gZXZhbCAnJG12ICIkbmxpc3QiVCAiJG5saXN0IicKIAkgICAgZmkKIAotCSAgICAkZWNobyA+PiAiJG9iamRpci8kZGxzeW1zIiAiXAorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICAgJHJ1biBldmFsICdlZ3JlcCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICAkcnVuIGV2YWwgJyRtdiAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIGZpCiAKLSN1bmRlZiBkbGRfcHJlbG9hZGVkX3N5bWJvbF9jb3VudAotI3VuZGVmIGRsZF9wcmVsb2FkZWRfc3ltYm9scworCSAgICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXQuZXhwIgorCSAgICAgICRydW4gJHJtICRleHBvcnRfc3ltYm9scworCSAgICAgICRydW4gZXZhbCAiJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZWxzZQorCSAgICAgICRydW4gZXZhbCAiJHtTRUR9IC1lICdzL1woW11bLipeJF1cKS9cXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0LmV4cCInCisJICAgICAgJHJ1biBldmFsICdncmVwIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0LmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICAkcnVuIGV2YWwgJ212ICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgZmkKKwkgIGZpCisKKwkgIGZvciBhcmcgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICRzaG93ICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRhcmcnIgorCSAgICBuYW1lPWBlY2hvICIkYXJnIiB8ICR7U0VEfSAtZSAncyVeLiovJSUnYAorCSAgICAkcnVuIGV2YWwgJ2VjaG8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgJHJ1biBldmFsICIkTk0gJGFyZyB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICBkb25lCisKKwkgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCisJICAgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KKwkgICAgdGVzdCAtZiAiJG5saXN0IiB8fCA6ID4gIiRubGlzdCIKKworCSAgICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAgIGVncmVwIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKwkgICAgICAkbXYgIiRubGlzdCJUICIkbmxpc3QiCisJICAgIGZpCisKKwkgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKwkgICAgaWYgZ3JlcCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKKwkJaWYgc29ydCAtayAzIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCSAgc29ydCAtayAzCisJCWVsc2UKKwkJICBzb3J0ICsyCisJCWZpIHwKKwkJdW5pcSA+ICIkbmxpc3QiUzsgdGhlbgorCSAgICAgIDoKKwkgICAgZWxzZQorCSAgICAgIGdyZXAgLXYgIl46ICIgPCAiJG5saXN0IiA+ICIkbmxpc3QiUworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCisJICAgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiUyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyInCisJICAgIGVsc2UKKwkgICAgICBlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIKKwkgICAgZmkKKworCSAgICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKKworI3VuZGVmIGx0X3ByZWxvYWRlZF9zeW1ib2xzCiAKICNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KLSMgZGVmaW5lIF9fcHRyX3Qgdm9pZCAqCisjIGRlZmluZSBsdF9wdHIgdm9pZCAqCiAjZWxzZQotIyBkZWZpbmUgX19wdHJfdCBjaGFyICoKKyMgZGVmaW5lIGx0X3B0ciBjaGFyICoKKyMgZGVmaW5lIGNvbnN0CiAjZW5kaWYKIAotLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIGluIGRsZF9wcmVsb2FkZWRfc3ltYm9scywgLTEgaWYgdW5zb3J0ZWQuICovCi1pbnQgZGxkX3ByZWxvYWRlZF9zeW1ib2xfY291bnQgPSAkY291bnQ7Ci0KIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAqLwotc3RydWN0IHsKLSAgY2hhciAqbmFtZTsKLSAgX19wdHJfdCBhZGRyZXNzOworY29uc3Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgbHRfcHRyIGFkZHJlc3M7CiB9Ci1kbGRfcHJlbG9hZGVkX3N5bWJvbHNbXSA9CitsdF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KIHtcCiAiCiAKLQkgICAgaWYgdGVzdCAtZiAiJG5saXN0IjsgdGhlbgotCSAgICAgIHNlZCAncy9eXCguKlwpIFwoLipcKSQvICB7IlwxIiwgKF9fcHRyX3QpIFwmXDJ9LC8nIDwgIiRubGlzdCIgPj4gIiRvYmpkaXIvJGRsc3ltcyIKLQkgICAgZmkKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiCiAKLQkgICAgJGVjaG8gPj4gIiRvYmpkaXIvJGRsc3ltcyIgIlwKLSAgezAsIChfX3B0cl90KSAwfQorCSAgICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKKyAgezAsIChsdF9wdHIpIDB9CiB9OwogCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZlwKICIKLQkgICAgOzsKKwkgIGZpCiAKLQkgICopCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IHVua25vd24gc3VmZml4IGZvciBcYCRkbHN5bXMnIiAxPiYyCi0JICAgIGV4aXQgMQotCSAgICA7OworCSAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPQorCSAgY2FzZSAkaG9zdCBpbgorCSAgIyBjb21waWxpbmcgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIHdpdGggcGljX2ZsYWcgd29ya3MgYXJvdW5kCisJICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKKwkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKKwkgICMgcGljX2ZsYWcgd2hlbiBsaW5raW5nIHdpdGggLXN0YXRpYy4gIFRoZSBwcm9ibGVtIGV4aXN0cyBpbgorCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KKwkgICotKi1mcmVlYnNkMip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKKwkgICAgY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCisJICAgICoiIC1zdGF0aWMgIiopIDs7CisJICAgICopIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtRFBJQyAtREZSRUVCU0RfV09SS0FST1VORCI7OworCSAgICBlc2FjOzsKKwkgICotKi1ocHV4KikKKwkgICAgY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCisJICAgICoiIC1zdGF0aWMgIiopIDs7CisJICAgICopIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtRFBJQyI7OworCSAgICBlc2FjCiAJICBlc2FjCi0gICAgICAgIGZpCiAKLSAgICAgICAgIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KLSAgICAgICAgJHNob3cgIihjZCAkb2JqZGlyICYmICRDQyAtYyRub19idWlsdGluX2ZsYWcgXCIkZGxzeW1zXCIpIgotICAgICAgICAkcnVuIGV2YWwgJyhjZCAkb2JqZGlyICYmICRDQyAtYyRub19idWlsdGluX2ZsYWcgIiRkbHN5bXMiKScgfHwgZXhpdCAkPworCSAgIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KKwkgICRzaG93ICIoY2QgJG91dHB1dF9vYmpkaXIgJiYgJENDIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgXCIkZGxzeW1zXCIpIgorCSAgJHJ1biBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJENDIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRkbHN5bXMiKScgfHwgZXhpdCAkPwogCi0gICAgICAgICMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCi0gICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb2JqZGlyLyR7b3V0cHV0fVMubyUiYAotICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb2JqZGlyLyR7b3V0cHV0fVMubyUiYAotICAgICAgZWxpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiICE9IHllczsgdGhlbgotICAgICAgICB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiAmJiAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1kbG9wZW4nIGFuZCBcYC1kbHByZW9wZW4nIGFyZSBpZ25vcmVkIHdpdGhvdXQgXGAtZXhwb3J0LWR5bmFtaWMnIiAxPiYyCisJICAjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJICAkc2hvdyAiJHJtICRvdXRwdXRfb2JqZGlyLyRkbHN5bXMgJG5saXN0ICR7bmxpc3R9UyAke25saXN0fVQiCisJICAkcnVuICRybSAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCIKKworCSAgIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KKwkgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lImAKKwkgIGZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSUiYAorCSAgOzsKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogdW5rbm93biBzdWZmaXggZm9yIFxgJGRsc3ltcyciIDE+JjIKKwkgIGV4aXQgMQorCSAgOzsKKwllc2FjCiAgICAgICBlbHNlCi0gICAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCi0gICAgICAgICMgZGxkX3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCi0gICAgICAgICMgcmVhbGx5IHdhcyByZXF1aXJlZC4KLSAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogbm90IGNvbmZpZ3VyZWQgdG8gZXh0cmFjdCBnbG9iYWwgc3ltYm9scyBmcm9tIGRscHJlb3BlbmVkIGZpbGVzIiAxPiYyCisJIyBXZSBrZWVwIGdvaW5nIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgcmVmZXIgdG8KKwkjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCisJIyByZWFsbHkgd2FzIHJlcXVpcmVkLgogCi0gICAgICAgICMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCi0gICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJSBAU1lNRklMRUAlJSJgCi0gICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlIEBTWU1GSUxFQCUlImAKKwkjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgorCWNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJSBAU1lNRklMRUAlJSJgCisJZmluYWxpemVfY29tbWFuZD1gJGVjaG8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAteiAiJGxpbmtfYWdhaW5zdF9saWJ0b29sX2xpYnMiIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgotICAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCi0gICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAotICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorICAgICAgaWYgdGVzdCAkbmVlZF9yZWxpbmsgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJbGlua19jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCiAKLSAgICAgICAgIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCi0gICAgICAgICRzaG93ICIkY29tcGlsZV9jb21tYW5kIgotICAgICAgICAkcnVuIGV2YWwgIiRjb21waWxlX2NvbW1hbmQiCi0gICAgICAgIGV4aXQgJD8KLSAgICAgIGZpCi0KLSAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KLSAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG9iamRpci8kb3V0cHV0IiclZydgCi0gICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG9iamRpci8kb3V0cHV0IidUJWcnYAotCi0gICAgICAjIENyZWF0ZSB0aGUgYmluYXJ5IGluIHRoZSBvYmplY3QgZGlyZWN0b3J5LCB0aGVuIHdyYXAgaXQuCi0gICAgICBpZiB0ZXN0IC1kICRvYmpkaXI7IHRoZW4gOgotICAgICAgZWxzZQotICAgICAgICAkc2hvdyAiJG1rZGlyICRvYmpkaXIiCi0JJHJ1biAkbWtkaXIgJG9iamRpcgorCSMgV2UgaGF2ZSBubyB1bmluc3RhbGxlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgc28gZmluYWxpemUgcmlnaHQgbm93LgorCSRzaG93ICIkbGlua19jb21tYW5kIgorCSRydW4gZXZhbCAiJGxpbmtfY29tbWFuZCIKIAlzdGF0dXM9JD8KLQlpZiB0ZXN0ICRzdGF0dXMgLWVxIDAgfHwgdGVzdCAtZCAkb2JqZGlyOyB0aGVuIDoKLQllbHNlCi0JICBleGl0ICRzdGF0dXMKKworCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJaWYgdGVzdCAtbiAiJGRsc3ltcyI7IHRoZW4KKwkgICRzaG93ICIkcm0gJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IgorCSAgJHJ1biAkcm0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSIKIAlmaQorCisJZXhpdCAkc3RhdHVzCiAgICAgICBmaQogCiAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLSAgICAgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBzaGxpYnBhdGhfdmFyCi0gICAgICAgIHJwYXRoPQotICAgICAgICBmb3IgZGlyIGluICR0ZW1wX3JwYXRoOyBkbwotICAgICAgICAgIGNhc2UgIiRkaXIiIGluCi0gICAgICAgICAgLyogfCBbQS1aYS16XTpcXCopCi0gICAgICAgICAgICAjIEFic29sdXRlIHBhdGguCi0gICAgICAgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCi0gICAgICAgICAgICA7OwotICAgICAgICAgICopCi0gICAgICAgICAgICAjIFJlbGF0aXZlIHBhdGg6IGFkZCBhIHRoaXNkaXIgZW50cnkuCi0gICAgICAgICAgICBycGF0aD0iJHJwYXRoXCR0aGlzZGlyLyRkaXI6IgotICAgICAgICAgICAgOzsKLSAgICAgICAgICBlc2FjCi0gICAgICAgIGRvbmUKLSAgICAgICAgdGVtcF9ycGF0aD0iJHJwYXRoIgorCSMgV2Ugc2hvdWxkIHNldCB0aGUgc2hsaWJwYXRoX3ZhcgorCXJwYXRoPQorCWZvciBkaXIgaW4gJHRlbXBfcnBhdGg7IGRvCisJICBjYXNlICRkaXIgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikKKwkgICAgIyBBYnNvbHV0ZSBwYXRoLgorCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgIDs7CisJICAqKQorCSAgICAjIFJlbGF0aXZlIHBhdGg6IGFkZCBhIHRoaXNkaXIgZW50cnkuCisJICAgIHJwYXRoPSIkcnBhdGhcJHRoaXNkaXIvJGRpcjoiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCXRlbXBfcnBhdGg9IiRycGF0aCIKICAgICAgIGZpCiAKLSAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCi0gICAgICAkcnVuICRybSAkb3V0cHV0Ci0KLSAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCI7IHRoZW4KLSAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgorICAgICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgogICAgICAgZmkKICAgICAgIGlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCi0gICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkZmluYWxpemVfY29tbWFuZCIKKwlmaW5hbGl6ZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGZpbmFsaXplX2NvbW1hbmQiCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgotICAgICAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgotICAgICAgICBycGF0aD0KLSAgICAgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KLSAgICAgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCi0gICAgICAgIGRvbmUKLSAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICRjb21waWxlX2NvbW1hbmQiCi0gICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgJGZpbmFsaXplX2NvbW1hbmQiCisgICAgICBjb21waWxlX3Zhcj0KKyAgICAgIGZpbmFsaXplX3Zhcj0KKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgIGRvbmUKKwkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9wZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkZmluYWxpemVfcGVybV9ycGF0aDsgZG8KKwkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgZG9uZQorCSAgZmluYWxpemVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQogICAgICAgZmkKIAotICAgICAgY2FzZSAiJGhhcmRjb2RlX2FjdGlvbiIgaW4KLSAgICAgIHJlbGluaykKLSAgICAgICAgIyBBR0ghIEZsYW1lIHRoZSBBSVggYW5kIEhQLVVYIHBlb3BsZSBmb3IgbWUsIHdpbGwgeWE/Ci0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IHVzaW5nIGEgYnVnZ3kgc3lzdGVtIGxpbmtlciIgMT4mMgotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiByZWxpbmtpbmcgd2lsbCBiZSByZXF1aXJlZCBiZWZvcmUgXGAkb3V0cHV0JyBjYW4gYmUgaW5zdGFsbGVkIiAxPiYyCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCisgICAgICBpZiB0ZXN0ICIkbm9faW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWxpbmtfY29tbWFuZD1gJGVjaG8gIlgkbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCisJJHJ1biAkcm0gJG91dHB1dAorCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorCSRzaG93ICIkbGlua19jb21tYW5kIgorCSRydW4gZXZhbCAiJGxpbmtfY29tbWFuZCIgfHwgZXhpdCAkPworCWV4aXQgMAorICAgICAgZmkKIAotICAgICAgJHNob3cgIiRjb21waWxlX2NvbW1hbmQiCi0gICAgICAkcnVuIGV2YWwgIiRjb21waWxlX2NvbW1hbmQiIHx8IGV4aXQgJD8KKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCisJIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKworCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IHRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIiAxPiYyCisJJGVjaG8gIiRtb2RlbmFtZTogXGAkb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iIDE+JjIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgorCSAgbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorCSAgZWxzZQorCSAgICAjIGZhc3RfaW5zdGFsbCBpcyBzZXQgdG8gbmVlZGxlc3MKKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisJICBmaQorCWVsc2UKKwkgIGxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorICAgICAgbGlua19jb21tYW5kPWAkZWNobyAiWCRsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnYAorCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlcy4KKyAgICAgICRydW4gJHJtICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKKworICAgICAgJHNob3cgIiRsaW5rX2NvbW1hbmQiCisgICAgICAkcnVuIGV2YWwgIiRsaW5rX2NvbW1hbmQiIHx8IGV4aXQgJD8KIAogICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KICAgICAgICRzaG93ICJjcmVhdGluZyAkb3V0cHV0IgogCi0gICAgICAjIFF1b3RlIHRoZSBmaW5hbGl6ZSBjb21tYW5kIGZvciBzaGlwcGluZy4KLSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgIyBRdW90ZSB0aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKwlmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwkgIGlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCB1bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZWxzZQorCSAgICB2YXJfdmFsdWU9YCRlY2hvICJYJHZhcl92YWx1ZSIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPVwiJHZhcl92YWx1ZVwiOyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZmkKKwlkb25lCisJcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJHJlbGlua19jb21tYW5kKSIKKwlyZWxpbmtfY29tbWFuZD1gJGVjaG8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgZmkKIAogICAgICAgIyBRdW90ZSAkZWNobyBmb3Igc2hpcHBpbmcuCi0gICAgICBxZWNobz1gJGVjaG8gIlgkZWNobyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBpZiB0ZXN0ICJYJGVjaG8iID0gIlgkU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorCWNhc2UgJDAgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHFlY2hvPSIkU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIjs7CisJKikgcWVjaG89IiRTSEVMTCBgcHdkYC8kMCAtLWZhbGxiYWNrLWVjaG8iOzsKKwllc2FjCisJcWVjaG89YCRlY2hvICJYJHFlY2hvIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGVsc2UKKwlxZWNobz1gJGVjaG8gIlgkZWNobyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBmaQogCiAgICAgICAjIE9ubHkgYWN0dWFsbHkgZG8gdGhpbmdzIGlmIG91ciBydW4gY29tbWFuZCBpcyBub24tbnVsbC4KICAgICAgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCi0gICAgICAgICRybSAkb3V0cHV0Ci0gICAgICAgIHRyYXAgIiRybSAkb3V0cHV0OyBleGl0IDEiIDEgMiAxNQorCSMgd2luMzIgd2lsbCB0aGluayB0aGUgc2NyaXB0IGlzIGEgYmluYXJ5IGlmIGl0IGhhcworCSMgYSAuZXhlIHN1ZmZpeCwgc28gd2Ugc3RyaXAgaXQgb2ZmIGhlcmUuCisJY2FzZSAkb3V0cHV0IGluCisJICAqLmV4ZSkgb3V0cHV0PWBlY2hvICRvdXRwdXR8JHtTRUR9ICdzLC5leGUkLCwnYCA7OworCWVzYWMKKwkjIHRlc3QgZm9yIGN5Z3dpbiBiZWNhdXNlIG12IGZhaWxzIHcvbyAuZXhlIGV4dGVuc2lvbnMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKikgZXhlZXh0PS5leGUgOzsKKwkgICopIGV4ZWV4dD0gOzsKKwllc2FjCisJJHJtICRvdXRwdXQKKwl0cmFwICIkcm0gJG91dHB1dDsgZXhpdCAxIiAxIDIgMTUKIAotICAgICAgICAkZWNobyA+ICRvdXRwdXQgIlwKLSMhIC9iaW4vc2gKKwkkZWNobyA+ICRvdXRwdXQgIlwKKyMhICRTSEVMTAogCi0jICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dAotIyBHZW5lcmF0ZWQgYnkgbHRtYWluLnNoIC0gR05VICRQQUNLQUdFICRWRVJTSU9OCisjICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUAogIwogIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKICMgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgogIwotIyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgXGBgcHdkYCcuCisjIFRoaXMgd3JhcHBlciBzY3JpcHQgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgogIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCiAKICMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKICMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCi1Yc2VkPSdzZWQgLWUgcy9eWC8vJworWHNlZD0iJHtTRUR9IicgLWUgMXMvXlgvLycKIHNlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKIAogIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKICMgaWYgQ0RQQVRIIGlzIHNldC4KLWlmIHRlc3QgXCJcJHtDRFBBVEgrc2V0fVwiID0gc2V0OyB0aGVuIENEUEFUSD07IGV4cG9ydCBDRFBBVEg7IGZpCitpZiB0ZXN0IFwiXCR7Q0RQQVRIK3NldH1cIiA9IHNldDsgdGhlbiBDRFBBVEg9OjsgZXhwb3J0IENEUEFUSDsgZmkKKworcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIgogCiAjIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9uIG1vZGUuCiBpZiB0ZXN0IFwiXCRsaWJ0b29sX2luc3RhbGxfbWFnaWNcIiA9IFwiJG1hZ2ljXCI7IHRoZW4KLSAgIyBpbnN0YWxsIG1vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6Ci0gIGxpbmtfYWdhaW5zdF9saWJ0b29sX2xpYnM9JyRsaW5rX2FnYWluc3RfbGlidG9vbF9saWJzJwotICBmaW5hbGl6ZV9jb21tYW5kPVwiJGZpbmFsaXplX2NvbW1hbmRcIgorICAjIGluc3RhbGwgbW9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlOgorICBub3RpbnN0X2RlcGxpYnM9JyRub3RpbnN0X2RlcGxpYnMnCiBlbHNlCiAgICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRlY2hvIGFyZSBhbHJlYWR5IHNldC4KLSAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuIDoKLSAgZWxzZQorICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCiAgICAgZWNobz1cIiRxZWNob1wiCiAgICAgZmlsZT1cIlwkMFwiCisgICAgIyBNYWtlIHN1cmUgZWNobyB3b3Jrcy4KKyAgICBpZiB0ZXN0IFwiWFwkMVwiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICAgICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KKyAgICAgIHNoaWZ0CisgICAgZWxpZiB0ZXN0IFwiWFxgKFwkZWNobyAnXHQnKSAyPi9kZXYvbnVsbFxgXCIgPSAnWFx0JzsgdGhlbgorICAgICAgIyBZaXBwZWUsIFwkZWNobyB3b3JrcyEKKyAgICAgIDoKKyAgICBlbHNlCisgICAgICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwsIGFuZCB0aGVuIG1heWJlIFwkZWNobyB3aWxsIHdvcmsuCisgICAgICBleGVjICRTSEVMTCBcIlwkMFwiIC0tbm8tcmVleGVjIFwkezErXCJcJEBcIn0KKyAgICBmaQogICBmaVwKICIKLSAgICAgICAgJGVjaG8gPj4gJG91dHB1dCAiXAorCSRlY2hvID4+ICRvdXRwdXQgIlwKIAogICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgogICB0aGlzZGlyPVxgXCRlY2hvIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJS9bXi9dKiQlJSdcYAogICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCiAKICAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCi0gIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8IHNlZCAtbiAncy8uKi0+IC8vcCdcYAorICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAke1NFRH0gLW4gJ3MvLiotPiAvL3AnXGAKICAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbwogICAgIGRlc3RkaXI9XGBcJGVjaG8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlL1teL10qXCQlJSdcYAogCiAgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgogICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KICAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgotICAgICAgLyogfCBbQS1aYS16XTpcXCopIHRoaXNkaXI9XCJcJGRlc3RkaXJcIiA7OworICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CiAgICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CiAgICAgICBlc2FjCiAgICAgZmkKIAogICAgIGZpbGU9XGBcJGVjaG8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlXi4qLyUlJ1xgCi0gICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8IHNlZCAtbiAncy8uKi0+IC8vcCdcYAorICAgIGZpbGU9XGBscyAtbGQgXCJcJHRoaXNkaXIvXCRmaWxlXCIgfCAke1NFRH0gLW4gJ3MvLiotPiAvL3AnXGAKICAgZG9uZQogCiAgICMgVHJ5IHRvIGdldCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUuCiAgIGFic2Rpcj1cYGNkIFwiXCR0aGlzZGlyXCIgJiYgcHdkXGAKICAgdGVzdCAtbiBcIlwkYWJzZGlyXCIgJiYgdGhpc2Rpcj1cIlwkYWJzZGlyXCIKKyIKIAorCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICBlY2hvID4+ICRvdXRwdXQgIlwKKyAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAogICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgotICBwcm9ncmFtPSckb3V0cHV0JworCisgIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fCBcXAorICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJG1rZGlyIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkcm0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgZWNobyA+PiAkb3V0cHV0ICJcCisKKyAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQorICAgIGlmIHRlc3QgLW4gXCJcJHJlbGlua19jb21tYW5kXCI7IHRoZW4KKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorICAgICAgZWxzZQorCSRlY2hvIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKwkkcm0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgZmkKKworICAgICRtdiBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8fAorICAgIHsgJHJtIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOworICAgICAgJG12IFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9CisgICAgJHJtIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgIGZpIgorCWVsc2UKKwkgIGVjaG8gPj4gJG91dHB1dCAiXAorICBwcm9ncmFtPSckb3V0cHV0bmFtZScKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKyIKKwlmaQorCisJZWNobyA+PiAkb3V0cHV0ICJcCiAKICAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKIAotICAgICAgICAjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KLSAgICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgotICAgICAgICAgICRlY2hvID4+ICRvdXRwdXQgIlwKKwkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKwlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJICAkZWNobyA+PiAkb3V0cHV0ICJcCiAgICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKICAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCiAKICAgICAjIFNvbWUgc3lzdGVtcyBjYW5ub3QgY29wZSB3aXRoIGNvbG9uLXRlcm1pbmF0ZWQgJHNobGlicGF0aF92YXIKLSAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkZWNobyBcIlhcJCRzaGxpYnBhdGhfdmFyXCIgfCBcJFhzZWQgLWUgJ3MvOipcJC8vJ1xgCisgICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCAke1NFRH0KKyAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkZWNobyBcIlhcJCRzaGxpYnBhdGhfdmFyXCIgfCBcJFhzZWQgLWUgJ3MvOjoqXCQvLydcYAogCiAgICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCiAiCi0gICAgICAgIGZpCisJZmkKIAotICAgICAgICAkZWNobyA+PiAkb3V0cHV0ICJcCisJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKwkgICRlY2hvID4+ICRvdXRwdXQgIlwKKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICisiCisJZmkKKworCSRlY2hvID4+ICRvdXRwdXQgIlwKICAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCiAgICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgorIgorCWNhc2UgJGhvc3QgaW4KKwkjIHdpbjMyIHN5c3RlbXMgbmVlZCB0byB1c2UgdGhlIHByb2cgcGF0aCBmb3IgZGxsCisJIyBsb29rdXAgdG8gd29yaworCSotKi1jeWd3aW4qIHwgKi0qLXB3MzIqKQorCSAgJGVjaG8gPj4gJG91dHB1dCAiXAorICAgICAgZXhlYyBcJHByb2dkaXIvXCRwcm9ncmFtIFwkezErXCJcJEBcIn0KKyIKKwkgIDs7CiAKKwkjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKwkqLSotbWluZ3cgfCAqLSotb3MyKikKKwkgICRlY2hvID4+ICRvdXRwdXQgIlwKKyAgICAgIGV4ZWMgXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbSBcJHsxK1wiXCRAXCJ9CisiCisJICA7OworCisJKikKKwkgICRlY2hvID4+ICRvdXRwdXQgIlwKICAgICAgICMgRXhwb3J0IHRoZSBwYXRoIHRvIHRoZSBwcm9ncmFtLgogICAgICAgUEFUSD1cIlwkcHJvZ2RpcjpcJFBBVEhcIgogICAgICAgZXhwb3J0IFBBVEgKIAogICAgICAgZXhlYyBcJHByb2dyYW0gXCR7MStcIlwkQFwifQotCisiCisJICA7OworCWVzYWMKKwkkZWNobyA+PiAkb3V0cHV0ICJcCiAgICAgICBcJGVjaG8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJHsxK1wiXCRAXCJ9XCIKICAgICAgIGV4aXQgMQogICAgIGZpCkBAIC0xNTMwLDQ4ICszODE0LDE4OSBAQAogICBmaQogZmlcCiAiCi0gICAgICAgIGNobW9kICt4ICRvdXRwdXQKKwljaG1vZCAreCAkb3V0cHV0CiAgICAgICBmaQogICAgICAgZXhpdCAwCiAgICAgICA7OwogICAgIGVzYWMKIAogICAgICMgU2VlIGlmIHdlIG5lZWQgdG8gYnVpbGQgYW4gb2xkLWZhc2hpb25lZCBhcmNoaXZlLgotICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSAieWVzIjsgdGhlbgotICAgICAgIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgotICAgICAgb2xkb2Jqcz0iJG9ianMiYCRlY2hvICJYJGxpYm9ianMgIiB8ICRYc2VkIC1lICdzL1teICAgXSpcLmEgLy9nJyAtZSAncy9cLmxvIC8ubyAvZycgLWUgJ3MvICQvL2cnYAorICAgIGZvciBvbGRsaWIgaW4gJG9sZGxpYnM7IGRvCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gY29udmVuaWVuY2U7IHRoZW4KKwlvbGRvYmpzPSIkbGlib2Jqc19zYXZlIgorCWFkZGxpYnM9IiRjb252ZW5pZW5jZSIKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG1vZHVsZTsgdGhlbgorCSAgb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSIKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWVsc2UKKwkgIG9sZG9ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJGVjaG8gIlgkbGlib2Jqc19zYXZlIiB8ICRTUDJOTCB8ICRYc2VkIC1lICcvXC4nJHtsaWJleHR9JyQvZCcgLWUgJy9cLmxpYiQvZCcgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwlmaQorCWFkZGxpYnM9IiRvbGRfY29udmVuaWVuY2UiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KKwlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSRzaG93ICIke3JtfXIgJGdlbnRvcCIKKwkkcnVuICR7cm19ciAiJGdlbnRvcCIKKwkkc2hvdyAibWtkaXIgJGdlbnRvcCIKKwkkcnVuIG1rZGlyICIkZ2VudG9wIgorCXN0YXR1cz0kPworCWlmIHRlc3QgJHN0YXR1cyAtbmUgMCAmJiB0ZXN0ICEgLWQgIiRnZW50b3AiOyB0aGVuCisJICBleGl0ICRzdGF0dXMKKwlmaQorCWdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJIyBBZGQgaW4gbWVtYmVycyBmcm9tIGNvbnZlbmllbmNlIGFyY2hpdmVzLgorCWZvciB4bGliIGluICRhZGRsaWJzOyBkbworCSAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgorCSAgY2FzZSAkeGxpYiBpbgorCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSB4YWJzPSIkeGxpYiIgOzsKKwkgICopIHhhYnM9YHB3ZGAiLyR4bGliIiA7OworCSAgZXNhYworCSAgeGxpYj1gJGVjaG8gIlgkeGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgeGRpcj0iJGdlbnRvcC8keGxpYiIKKworCSAgJHNob3cgIiR7cm19ciAkeGRpciIKKwkgICRydW4gJHtybX1yICIkeGRpciIKKwkgICRzaG93ICJta2RpciAkeGRpciIKKwkgICRydW4gbWtkaXIgIiR4ZGlyIgorCSAgc3RhdHVzPSQ/CisJICBpZiB0ZXN0ICRzdGF0dXMgLW5lIDAgJiYgdGVzdCAhIC1kICIkeGRpciI7IHRoZW4KKwkgICAgZXhpdCAkc3RhdHVzCisJICBmaQorCSAgJHNob3cgIihjZCAkeGRpciAmJiAkQVIgeCAkeGFicykiCisJICAkcnVuIGV2YWwgIihjZCBcJHhkaXIgJiYgJEFSIHggXCR4YWJzKSIgfHwgZXhpdCAkPworCisJICBvbGRvYmpzPSIkb2xkb2JqcyAiYGZpbmQgJHhkaXIgLW5hbWUgXCouJHtvYmpleHR9IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkTkwyU1BgCisJZG9uZQorICAgICAgZmkKIAogICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCiAgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KIAlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc1wiCiAgICAgICBlbHNlCisJIyBFbnN1cmUgdGhhdCB3ZSBoYXZlIC5vIG9iamVjdHMgaW4gcGxhY2UgaW4gY2FzZSB3ZSBkZWNpZGVkCisJIyBub3QgdG8gYnVpbGQgYSBzaGFyZWQgbGlicmFyeSwgYW5kIGhhdmUgZmFsbGVuIGJhY2sgdG8gYnVpbGRpbmcKKwkjIHN0YXRpYyBsaWJzIGV2ZW4gdGhvdWdoIC0tZGlzYWJsZS1zdGF0aWMgd2FzIHBhc3NlZCEKKwlmb3Igb2xkb2JqIGluICRvbGRvYmpzOyBkbworCSAgaWYgdGVzdCAhIC1mICRvbGRvYmo7IHRoZW4KKwkgICAgeGRpcj1gJGVjaG8gIlgkb2xkb2JqIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisJICAgIGlmIHRlc3QgIlgkeGRpciIgPSAiWCRvbGRvYmoiOyB0aGVuCisJICAgICAgeGRpcj0iLiIKKwkgICAgZWxzZQorCSAgICAgIHhkaXI9IiR4ZGlyIgorCSAgICBmaQorCSAgICBiYXNlb2JqPWAkZWNobyAiWCRvbGRvYmoiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKwkgICAgb2JqPWAkZWNobyAiWCRiYXNlb2JqIiB8ICRYc2VkIC1lICIkbzJsbyJgCisJICAgICRzaG93ICIoY2QgJHhkaXIgJiYgJHtMTl9TfSAkb2JqICRiYXNlb2JqKSIKKwkgICAgJHJ1biBldmFsICcoY2QgJHhkaXIgJiYgJHtMTl9TfSAkb2JqICRiYXNlb2JqKScgfHwgZXhpdCAkPworCSAgZmkKKwlkb25lCisKIAlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCiAgICAgICBmaQotICAgICAgSUZTPSIke0lGUz0gCX0iOyBzYXZlX2lmcz0iJElGUyI7IElGUz0nOycKKyAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwogICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KLSAgICAgICAgSUZTPSIkc2F2ZV9pZnMiCi0gICAgICAgICRzaG93ICIkY21kIgotICAgICAgICAkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KKwlJRlM9IiRzYXZlX2lmcyIKKwkkc2hvdyAiJGNtZCIKKwkkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KICAgICAgIGRvbmUKICAgICAgIElGUz0iJHNhdmVfaWZzIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgLW4gIiRnZW5lcmF0ZWQiOyB0aGVuCisgICAgICAkc2hvdyAiJHtybX1yJGdlbmVyYXRlZCIKKyAgICAgICRydW4gJHtybX1yJGdlbmVyYXRlZAogICAgIGZpCiAKICAgICAjIE5vdyBjcmVhdGUgdGhlIGxpYnRvb2wgYXJjaGl2ZS4KLSAgICBjYXNlICIkb3V0cHV0IiBpbgorICAgIGNhc2UgJG91dHB1dCBpbgogICAgICoubGEpCiAgICAgICBvbGRfbGlicmFyeT0KLSAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLmEiCi0KKyAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCiAgICAgICAkc2hvdyAiY3JlYXRpbmcgJG91dHB1dCIKIAorICAgICAgIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgorICAgICAgZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCB1bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZWxzZQorCSAgdmFyX3ZhbHVlPWAkZWNobyAiWCR2YXJfdmFsdWUiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9XCIkdmFyX3ZhbHVlXCI7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgUXVvdGUgdGhlIGxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICByZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkU0hFTEwgJDAgLS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzKSIKKyAgICAgIHJlbGlua19jb21tYW5kPWAkZWNobyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisKICAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgogICAgICAgaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KLSAgICAgICAgJGVjaG8gPiAkb3V0cHV0ICJcCi0jICRvdXRwdXQgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCi0jIEdlbmVyYXRlZCBieSBsdG1haW4uc2ggLSBHTlUgJFBBQ0tBR0UgJFZFUlNJT04KKwlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBvdXRwdXQ9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lImkKKwkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAqLmxhKQorCQluYW1lPWAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkJICAkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgorCQkgIGV4aXQgMQorCQlmaQorCQluZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBuZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBuZXdkbGZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbworCSAgICAgIG5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgICAgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJICAgICAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkJJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKKwkJZXhpdCAxCisJICAgICAgZmkKKwkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliZGlyLyRuYW1lIgorCSAgICBkb25lCisJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBuZXdkbHByZWZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgICAgIG5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgICAgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJICAgICAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkJJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKKwkJZXhpdCAxCisJICAgICAgZmkKKwkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkbGliZGlyLyRuYW1lIgorCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZmkKKwkgICRybSAkb3V0cHV0CisJICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KKwkgIHRkbG5hbWU9JGRsbmFtZQorCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCisJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsKSB0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lIDs7CisJICBlc2FjCisJICAkZWNobyA+ICRvdXRwdXQgIlwKKyMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVAKKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCiAKICMgVGhlIG5hbWUgdGhhdCB3ZSBjYW4gZGxvcGVuKDMpLgotZGxuYW1lPSckZGxuYW1lJworZGxuYW1lPSckdGRsbmFtZScKIAogIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCiBsaWJyYXJ5X25hbWVzPSckbGlicmFyeV9uYW1lcycKQEAgLTE1ODcsMTUgKzQwMTIsMjYgQEAKIGFnZT0kYWdlCiByZXZpc2lvbj0kcmV2aXNpb24KIAorIyBJcyB0aGlzIGFuIGFscmVhZHkgaW5zdGFsbGVkIGxpYnJhcnk/CitpbnN0YWxsZWQ9JGluc3RhbGxlZAorCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJGRsZmlsZXMnCitkbHByZW9wZW49JyRkbHByZWZpbGVzJworCiAjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46Ci1saWJkaXI9JyRpbnN0YWxsX2xpYmRpcidcCi0iCitsaWJkaXI9JyRpbnN0YWxsX2xpYmRpciciCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vICYmIHRlc3QgJG5lZWRfcmVsaW5rID0geWVzOyB0aGVuCisJICAgICRlY2hvID4+ICRvdXRwdXQgIlwKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCisJICBmaQorCWRvbmUKICAgICAgIGZpCiAKICAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KICAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCi0gICAgICAkc2hvdyAiKGNkICRvYmpkaXIgJiYgJExOX1MgLi4vJG91dHB1dCAkb3V0cHV0KSIKLSAgICAgICRydW4gZXZhbCAiKGNkICRvYmpkaXIgJiYgJExOX1MgLi4vJG91dHB1dCAkb3V0cHV0KSIgfHwgZXhpdCAxCisgICAgICAkc2hvdyAiKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAkb3V0cHV0bmFtZSAmJiAkTE5fUyAuLi8kb3V0cHV0bmFtZSAkb3V0cHV0bmFtZSkiCisgICAgICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJG91dHB1dG5hbWUgJiYgJExOX1MgLi4vJG91dHB1dG5hbWUgJG91dHB1dG5hbWUpJyB8fCBleGl0ICQ/CiAgICAgICA7OwogICAgIGVzYWMKICAgICBleGl0IDAKQEAgLTE2MDUsMTIgKzQwNDEsMTQgQEAKICAgaW5zdGFsbCkKICAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiBpbnN0YWxsIgogCi0gICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgL2Jpbi9zaCBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgc2goMSkgYXJndW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZgogICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgotICAgIGlmIHRlc3QgIiRub25vcHQiID0gIiRTSEVMTCI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkbm9ub3B0IiA9ICIkU0hFTEwiIHx8IHRlc3QgIiRub25vcHQiID0gL2Jpbi9zaCB8fAorICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorICAgICAgICRlY2hvICJYJG5vbm9wdCIgfCAkWHNlZCB8IGdyZXAgc2h0b29sID4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCiAgICAgICBhcmc9YCRlY2hvICJYJG5vbm9wdCIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgICBjYXNlICIkYXJnIiBpbgorICAgICAgY2FzZSAkYXJnIGluCiAgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKikKIAlhcmc9IlwiJGFyZ1wiIgogCTs7CkBAIC0xNjI2LDcgKzQwNjQsNyBAQAogICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCiAgICAgYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgIGNhc2UgIiRhcmciIGluCisgICAgY2FzZSAkYXJnIGluCiAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSopCiAgICAgICBhcmc9IlwiJGFyZ1wiIgogICAgICAgOzsKQEAgLTE2MzksNDIgKzQwNzcsNDIgQEAKICAgICBvcHRzPQogICAgIHByZXY9CiAgICAgaW5zdGFsbF90eXBlPQotICAgIGlzZGlyPQorICAgIGlzZGlyPW5vCiAgICAgc3RyaXBtZT0KICAgICBmb3IgYXJnCiAgICAgZG8KICAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgotICAgICAgICBmaWxlcz0iJGZpbGVzICRkZXN0IgotICAgICAgICBkZXN0PSIkYXJnIgotICAgICAgICBjb250aW51ZQorCWZpbGVzPSIkZmlsZXMgJGRlc3QiCisJZGVzdD0iJGFyZyIKKwljb250aW51ZQogICAgICAgZmkKIAotICAgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAgIGNhc2UgJGFyZyBpbgogICAgICAgLWQpIGlzZGlyPXllcyA7OwogICAgICAgLWYpIHByZXY9Ii1mIiA7OwogICAgICAgLWcpIHByZXY9Ii1nIiA7OwogICAgICAgLW0pIHByZXY9Ii1tIiA7OwogICAgICAgLW8pIHByZXY9Ii1vIiA7OwogICAgICAgLXMpCi0gICAgICAgIHN0cmlwbWU9IiAtcyIKLSAgICAgICAgY29udGludWUKLSAgICAgICAgOzsKKwlzdHJpcG1lPSIgLXMiCisJY29udGludWUKKwk7OwogICAgICAgLSopIDs7CiAKICAgICAgICopCi0gICAgICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkZWQgYW4gYXJndW1lbnQsIHRoZW4gc2tpcCBpdC4KLSAgICAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCi0gICAgICAgICAgcHJldj0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGRlc3Q9IiRhcmciCi0gICAgICAgICAgY29udGludWUKLSAgICAgICAgZmkKLSAgICAgICAgOzsKKwkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCisJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJICBwcmV2PQorCWVsc2UKKwkgIGRlc3Q9IiRhcmciCisJICBjb250aW51ZQorCWZpCisJOzsKICAgICAgIGVzYWMKIAogICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KICAgICAgIGFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICAgIGNhc2UgIiRhcmciIGluCisgICAgICBjYXNlICRhcmcgaW4KICAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qKQogCWFyZz0iXCIkYXJnXCIiCiAJOzsKQEAgLTE2OTYsOSArNDEzNCw5IEBACiAKICAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCiAgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KLSAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogbm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiIDE+JjIKKwkkZWNobyAiJG1vZGVuYW1lOiBubyBmaWxlIG9yIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIgMT4mMgogICAgICAgZWxzZQotICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24iIDE+JjIKKwkkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24iIDE+JjIKICAgICAgIGZpCiAgICAgICAkZWNobyAiJGhlbHAiIDE+JjIKICAgICAgIGV4aXQgMQpAQCAtMTcwOSw3ICs0MTQ3LDcgQEAKIAogICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgogICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj15ZXMKLSAgICBpZiB0ZXN0IC1uICIkaXNkaXIiOyB0aGVuCisgICAgaWYgdGVzdCAiJGlzZGlyIiA9IHllczsgdGhlbgogICAgICAgZGVzdGRpcj0iJGRlc3QiCiAgICAgICBkZXN0bmFtZT0KICAgICBlbHNlCkBAIC0xNzIwLDIzICs0MTU4LDIzIEBACiAgICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCiAgICAgICBzZXQgZHVtbXkgJGZpbGVzCiAgICAgICBpZiB0ZXN0ICQjIC1ndCAyOyB0aGVuCi0gICAgICAgICRlY2hvICIkbW9kZW5hbWU6IFxgJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIgMT4mMgotICAgICAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICAgICAgZXhpdCAxCisJJGVjaG8gIiRtb2RlbmFtZTogXGAkZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IiAxPiYyCisJJGVjaG8gIiRoZWxwIiAxPiYyCisJZXhpdCAxCiAgICAgICBmaQogICAgIGZpCi0gICAgY2FzZSAiJGRlc3RkaXIiIGluCi0gICAgLyogfCBbQS1aYS16XTpcXCopIDs7CisgICAgY2FzZSAkZGVzdGRpciBpbgorICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKICAgICAqKQogICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbwotICAgICAgICBjYXNlICIkZmlsZSIgaW4KLSAgICAgICAgKi5sbykgOzsKLSAgICAgICAgKikKLSAgICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIiAxPiYyCi0gICAgICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgICAgICAgZXhpdCAxCi0gICAgICAgICAgOzsKLSAgICAgICAgZXNhYworCWNhc2UgJGZpbGUgaW4KKwkqLmxvKSA7OworCSopCisJICAkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIiAxPiYyCisJICAkZWNobyAiJGhlbHAiIDE+JjIKKwkgIGV4aXQgMQorCSAgOzsKKwllc2FjCiAgICAgICBkb25lCiAgICAgICA7OwogICAgIGVzYWMKQEAgLTE3NTEsMjEwICs0MTg5LDI2NiBAQAogICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KIAogICAgICAgIyBEbyBlYWNoIGluc3RhbGxhdGlvbi4KLSAgICAgIGNhc2UgIiRmaWxlIiBpbgotICAgICAgKi5hKQotICAgICAgICAjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgotICAgICAgICBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZmlsZSIKLSAgICAgICAgOzsKKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICouJGxpYmV4dCkKKwkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgorCXN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRmaWxlIgorCTs7CiAKICAgICAgICoubGEpCi0gICAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCi0gICAgICAgIGlmIChzZWQgLWUgJzJxJyAkZmlsZSB8IGVncmVwICdeIyBHZW5lcmF0ZWQgYnkgbHRtYWluXC5zaCcpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKLSAgICAgICAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICAgICAgICBleGl0IDEKLSAgICAgICAgZmkKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWlmICgke1NFRH0gLWUgJzJxJyAkZmlsZSB8IGVncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisJZWxzZQorCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCisJICAkZWNobyAiJGhlbHAiIDE+JjIKKwkgIGV4aXQgMQorCWZpCiAKLSAgICAgICAgbGlicmFyeV9uYW1lcz0KLSAgICAgICAgb2xkX2xpYnJhcnk9Ci0gICAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotICAgICAgICBjYXNlICIkZmlsZSIgaW4KLSAgICAgICAgKi8qIHwgKlxcKikgLiAkZmlsZSA7OwotICAgICAgICAqKSAuIC4vJGZpbGUgOzsKLSAgICAgICAgZXNhYworCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJcmVsaW5rX2NvbW1hbmQ9CisJIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCisJY2FzZSAkZmlsZSBpbgorCSovKiB8ICpcXCopIC4gJGZpbGUgOzsKKwkqKSAuIC4vJGZpbGUgOzsKKwllc2FjCiAKLSAgICAgICAgIyBBZGQgdGhlIGxpYmRpciB0byBjdXJyZW50X2xpYmRpcnMgaWYgaXQgaXMgdGhlIGRlc3RpbmF0aW9uLgotICAgICAgICBpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgotICAgICAgICAgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgotICAgICAgICAgICoiICRsaWJkaXIgIiopIDs7Ci0gICAgICAgICAgKikgY3VycmVudF9saWJkaXJzPSIkY3VycmVudF9saWJkaXJzICRsaWJkaXIiIDs7Ci0gICAgICAgICAgZXNhYwotICAgICAgICBlbHNlCi0gICAgICAgICAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgotICAgICAgICAgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCi0gICAgICAgICAgKiIgJGxpYmRpciAiKikgOzsKLSAgICAgICAgICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7Ci0gICAgICAgICAgZXNhYwotICAgICAgICBmaQorCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKwlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgorCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgY3VycmVudF9saWJkaXJzPSIkY3VycmVudF9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZWxzZQorCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKIAotICAgICAgICBkaXI9ImAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgLyIKLSAgICAgICAgdGVzdCAiWCRkaXIiID0gIlgkZmlsZS8iICYmIGRpcj0KLSAgICAgICAgZGlyPSIkZGlyJG9iamRpciIKKwlkaXI9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AvCisJdGVzdCAiWCRkaXIiID0gIlgkZmlsZS8iICYmIGRpcj0KKwlkaXI9IiRkaXIkb2JqZGlyIgogCi0gICAgICAgICMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcwotICAgICAgICBpZiB0ZXN0IC1uICIkMiI7IHRoZW4KLSAgICAgICAgICByZWFsbmFtZT0iJDIiCi0gICAgICAgICAgc2hpZnQKLSAgICAgICAgICBzaGlmdAorCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IHJlbGlua2luZyBcYCRmaWxlJyIgMT4mMgorCSAgJHNob3cgIiRyZWxpbmtfY29tbWFuZCIKKwkgIGlmICRydW4gZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICBlbHNlCisJICAgICRlY2hvICIkbW9kZW5hbWU6IGVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIgMT4mMgorCSAgICBjb250aW51ZQorCSAgZmkKKwlmaQogCi0gICAgICAgICAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgotICAgICAgICAgICRzaG93ICIkaW5zdGFsbF9wcm9nICRkaXIvJHJlYWxuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIKLSAgICAgICAgICAkcnVuIGV2YWwgIiRpbnN0YWxsX3Byb2cgJGRpci8kcmVhbG5hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiB8fCBleGl0ICQ/Ci0gICAgICAgICAgdGVzdCAiWCRkbG5hbWUiID0gIlgkcmVhbG5hbWUiICYmIGRsbmFtZT0KKwkjIFNlZSB0aGUgbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCWlmIHRlc3QgLW4gIiQyIjsgdGhlbgorCSAgcmVhbG5hbWU9IiQyIgorCSAgc2hpZnQKKwkgIHNoaWZ0CiAKLSAgICAgICAgICBpZiB0ZXN0ICQjIC1ndCAwOyB0aGVuCi0gICAgICAgICAgICAjIERlbGV0ZSB0aGUgb2xkIHN5bWxpbmtzLgotICAgICAgICAgICAgcm1jbWQ9IiRybSIKLSAgICAgICAgICAgIGZvciBsaW5rbmFtZQotICAgICAgICAgICAgZG8KLSAgICAgICAgICAgICAgcm1jbWQ9IiRybWNtZCAkZGVzdGRpci8kbGlua25hbWUiCi0gICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAkc2hvdyAiJHJtY21kIgotICAgICAgICAgICAgJHJ1biAkcm1jbWQKKwkgIHNyY25hbWU9IiRyZWFsbmFtZSIKKwkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKIAotICAgICAgICAgICAgIyAuLi4gYW5kIGNyZWF0ZSBuZXcgb25lcy4KLSAgICAgICAgICAgIGZvciBsaW5rbmFtZQotICAgICAgICAgICAgZG8KLSAgICAgICAgICAgICAgdGVzdCAiWCRkbG5hbWUiID0gIlgkbGlua25hbWUiICYmIGRsbmFtZT0KLSAgICAgICAgICAgICAgJHNob3cgIihjZCAkZGVzdGRpciAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lKSIKLSAgICAgICAgICAgICAgJHJ1biBldmFsICIoY2QgJGRlc3RkaXIgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZSkiCi0gICAgICAgICAgICBkb25lCi0gICAgICAgICAgZmkKKwkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKwkgICRzaG93ICIkaW5zdGFsbF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIgorCSAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiB8fCBleGl0ICQ/CisJICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgorCSAgICAkc2hvdyAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIKKwkgICAgJHJ1biBldmFsICIkc3RyaXBsaWIgJGRlc3RkaXIvJHJlYWxuYW1lIiB8fCBleGl0ICQ/CisJICBmaQogCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KLSAgICAgICAgICAgICMgSW5zdGFsbCB0aGUgZHluYW1pY2FsbHktbG9hZGFibGUgbGlicmFyeS4KLSAgICAgICAgICAgICRzaG93ICIkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSAkZGVzdGRpci8kZGxuYW1lIgotICAgICAgICAgICAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSAkZGVzdGRpci8kZGxuYW1lIiB8fCBleGl0ICQ/Ci0gICAgICAgICAgZmkKKwkgIGlmIHRlc3QgJCMgLWd0IDA7IHRoZW4KKwkgICAgIyBEZWxldGUgdGhlIG9sZCBzeW1saW5rcywgYW5kIGNyZWF0ZSBuZXcgb25lcy4KKwkgICAgZm9yIGxpbmtuYW1lCisJICAgIGRvCisJICAgICAgaWYgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIjsgdGhlbgorCQkkc2hvdyAiKGNkICRkZXN0ZGlyICYmICRybSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZSkiCisJCSRydW4gZXZhbCAiKGNkICRkZXN0ZGlyICYmICRybSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZSkiCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZmkKIAotICAgICAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KLSAgICAgICAgICBsaWI9IiRkZXN0ZGlyLyRyZWFsbmFtZSIKLSAgICAgICAgICBldmFsIGNtZHM9XCIkcG9zdGluc3RhbGxfY21kc1wiCi0gICAgICAgICAgSUZTPSIke0lGUz0gCX0iOyBzYXZlX2lmcz0iJElGUyI7IElGUz0nOycKLSAgICAgICAgICBmb3IgY21kIGluICRjbWRzOyBkbwotICAgICAgICAgICAgSUZTPSIkc2F2ZV9pZnMiCi0gICAgICAgICAgICAkc2hvdyAiJGNtZCIKLSAgICAgICAgICAgICRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPwotICAgICAgICAgIGRvbmUKLSAgICAgICAgICBJRlM9IiRzYXZlX2lmcyIKLSAgICAgICAgZmkKKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKwkgIGxpYj0iJGRlc3RkaXIvJHJlYWxuYW1lIgorCSAgZXZhbCBjbWRzPVwiJHBvc3RpbnN0YWxsX2NtZHNcIgorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICBmb3IgY21kIGluICRjbWRzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgJHNob3cgIiRjbWQiCisJICAgICRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPworCSAgZG9uZQorCSAgSUZTPSIkc2F2ZV9pZnMiCisJZmkKIAotICAgICAgICAjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KLSAgICAgICAgbmFtZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotICAgICAgICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGRpci8kbmFtZSIKLSAgICAgICAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZGlyLyRuYW1lIiB8fCBleGl0ICQ/CisJIyBJbnN0YWxsIHRoZSBwc2V1ZG8tbGlicmFyeSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMuCisJbmFtZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCWluc3RuYW1lPSIkZGlyLyRuYW1lImkKKwkkc2hvdyAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiCisJJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgfHwgZXhpdCAkPwogCi0gICAgICAgICMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KLSAgICAgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKLSAgICAgICAgOzsKKwkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCisJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKwk7OwogCiAgICAgICAqLmxvKQotICAgICAgICAjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KKwkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KIAotICAgICAgICAjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCi0gICAgICAgIGlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KLSAgICAgICAgICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgotICAgICAgICBlbHNlCi0gICAgICAgICAgZGVzdGZpbGU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLSAgICAgICAgICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgotICAgICAgICBmaQorCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGRlc3RmaWxlPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCiAKLSAgICAgICAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KLSAgICAgICAgY2FzZSAiJGRlc3RmaWxlIiBpbgotICAgICAgICAqLmxvKQotICAgICAgICAgIHN0YXRpY2Rlc3Q9YCRlY2hvICJYJGRlc3RmaWxlIiB8ICRYc2VkIC1lICdzL1wubG8kL1wuby8nYAotICAgICAgICAgIDs7Ci0gICAgICAgICoubykKLSAgICAgICAgICBzdGF0aWNkZXN0PSIkZGVzdGZpbGUiCi0gICAgICAgICAgZGVzdGZpbGU9Ci0gICAgICAgICAgOzsKLSAgICAgICAgKikKLSAgICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvIFxgJGRlc3RmaWxlJyIgMT4mMgotICAgICAgICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgICAgICAgIGV4aXQgMQotICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKKwkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCWNhc2UgJGRlc3RmaWxlIGluCisJKi5sbykKKwkgIHN0YXRpY2Rlc3Q9YCRlY2hvICJYJGRlc3RmaWxlIiB8ICRYc2VkIC1lICIkbG8ybyJgCisJICA7OworCSouJG9iamV4dCkKKwkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKKwkgIGRlc3RmaWxlPQorCSAgOzsKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byBcYCRkZXN0ZmlsZSciIDE+JjIKKwkgICRlY2hvICIkaGVscCIgMT4mMgorCSAgZXhpdCAxCisJICA7OworCWVzYWMKIAotICAgICAgICAjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KLSAgICAgICAgaWYgdGVzdCAtbiAiJGRlc3RmaWxlIjsgdGhlbgotICAgICAgICAgICRzaG93ICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIKLSAgICAgICAgICAkcnVuIGV2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiB8fCBleGl0ICQ/Ci0gICAgICAgIGZpCisJIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RmaWxlIjsgdGhlbgorCSAgJHNob3cgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIgorCSAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgfHwgZXhpdCAkPworCWZpCiAKLSAgICAgICAgIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCi0gICAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgotICAgICAgICAgIHN0YXRpY29iaj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncy9cLmxvJC9cLm8vJ2AKKwkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KKwlpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCSAgc3RhdGljb2JqPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICIkbG8ybyJgCiAKLSAgICAgICAgICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkc3RhdGljb2JqICRzdGF0aWNkZXN0IgotICAgICAgICAgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyBcJHN0YXRpY29iaiBcJHN0YXRpY2Rlc3QiIHx8IGV4aXQgJD8KLSAgICAgICAgZmkKLSAgICAgICAgZXhpdCAwCi0gICAgICAgIDs7CisJICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkc3RhdGljb2JqICRzdGF0aWNkZXN0IgorCSAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgfHwgZXhpdCAkPworCWZpCisJZXhpdCAwCisJOzsKIAogICAgICAgKikKLSAgICAgICAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgotICAgICAgICBpZiAoc2VkIC1lICc0cScgJGZpbGUgfCBlZ3JlcCAnXiMgR2VuZXJhdGVkIGJ5IGx0bWFpblwuc2gnKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgICBsaW5rX2FnYWluc3RfbGlidG9vbF9saWJzPQotICAgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9CisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZGVzdGZpbGU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKIAotICAgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotICAgICAgICAgIGNhc2UgIiRmaWxlIiBpbgotICAgICAgICAgICovKiB8ICpcXCopIC4gJGZpbGUgOzsKLSAgICAgICAgICAqKSAuIC4vJGZpbGUgOzsKLSAgICAgICAgICBlc2FjCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKnwqbWluZ3cqKQorCSAgICB3cmFwcGVyPWBlY2hvICRmaWxlIHwgJHtTRUR9IC1lICdzLC5leGUkLCwnYAorCSAgICA7OworCSopCisJICAgIHdyYXBwZXI9JGZpbGUKKwkgICAgOzsKKwllc2FjCisJaWYgKCR7U0VEfSAtZSAnNHEnICR3cmFwcGVyIHwgZWdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIik+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIG5vdGluc3RfZGVwbGlicz0KKwkgIHJlbGlua19jb21tYW5kPQogCi0gICAgICAgICAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCi0gICAgICAgICAgaWYgdGVzdCAteiAiJGxpbmtfYWdhaW5zdF9saWJ0b29sX2xpYnMiIHx8IHRlc3QgLXogIiRmaW5hbGl6ZV9jb21tYW5kIjsgdGhlbgotICAgICAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJGZpbGUnIiAxPiYyCi0gICAgICAgICAgICBleGl0IDEKLSAgICAgICAgICBmaQorCSAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCisJICBjYXNlICRmaWxlIGluCisJICAqLyogfCAqXFwqKSAuICR3cmFwcGVyIDs7CisJICAqKSAuIC4vJHdyYXBwZXIgOzsKKwkgIGVzYWMKIAotICAgICAgICAgIGZpbmFsaXplPXllcwotICAgICAgICAgIGZvciBsaWIgaW4gJGxpbmtfYWdhaW5zdF9saWJ0b29sX2xpYnM7IGRvCi0gICAgICAgICAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCi0gICAgICAgICAgICBsaWJkaXI9Ci0gICAgICAgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgotICAgICAgICAgICAgICAjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KLSAgICAgICAgICAgICAgY2FzZSAiJGxpYiIgaW4KLSAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAkbGliIDs7Ci0gICAgICAgICAgICAgICopIC4gLi8kbGliIDs7Ci0gICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBsaWJmaWxlPSIkbGliZGlyL2AkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlZydgIgotICAgICAgICAgICAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAkbGliJyBjb250YWlucyBubyAtcnBhdGggaW5mb3JtYXRpb24iIDE+JjIKLSAgICAgICAgICAgIGVsaWYgdGVzdCAtZiAiJGxpYmZpbGUiOyB0aGVuIDoKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciIDE+JjIKLSAgICAgICAgICAgICAgZmluYWxpemU9bm8KLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgZG9uZQorCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCisJICBpZiB0ZXN0IC16ICIkbm90aW5zdF9kZXBsaWJzIjsgdGhlbgorCSAgICAkZWNobyAiJG1vZGVuYW1lOiBpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciIDE+JjIKKwkgICAgZXhpdCAxCisJICBmaQogCi0gICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KLSAgICAgICAgICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogcmVsaW5raW5nIFxgJGZpbGUnIG9uIGJlaGFsZiBvZiB5b3VyIGJ1Z2d5IHN5c3RlbSBsaW5rZXIiIDE+JjIKLSAgICAgICAgICAgICAgJHNob3cgIiRmaW5hbGl6ZV9jb21tYW5kIgotICAgICAgICAgICAgICBpZiAkcnVuIGV2YWwgIiRmaW5hbGl6ZV9jb21tYW5kIjsgdGhlbiA6Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiBlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiIDE+JjIKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICBmaWxlPSIkb2JqZGlyLyRmaWxlIlQKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IHJlbGluayBcYCRmaWxlJyBvbiBiZWhhbGYgb2YgeW91ciBidWdneSBzeXN0ZW0gbGlua2VyIiAxPiYyCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KKwkgIGZpbmFsaXplPXllcworCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbworCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCisJICAgIGxpYmRpcj0KKwkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLyogfCAqXFwqKSAuICRsaWIgOzsKKwkgICAgICAqKSAuIC4vJGxpYiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSVnJ2AgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisJICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCisJICAgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciIDE+JjIKKwkgICAgICBmaW5hbGl6ZT1ubworCSAgICBmaQorCSAgZG9uZQorCisJICByZWxpbmtfY29tbWFuZD0KKwkgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgorCSAgY2FzZSAkZmlsZSBpbgorCSAgKi8qIHwgKlxcKikgLiAkd3JhcHBlciA7OworCSAgKikgLiAuLyR3cmFwcGVyIDs7CisJICBlc2FjCisKKwkgIG91dHB1dG5hbWU9CisJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgaWYgdGVzdCAiJGZpbmFsaXplIiA9IHllcyAmJiB0ZXN0IC16ICIkcnVuIjsgdGhlbgorCSAgICAgIHRtcGRpcj0iL3RtcCIKKwkgICAgICB0ZXN0IC1uICIkVE1QRElSIiAmJiB0bXBkaXI9IiRUTVBESVIiCisJICAgICAgdG1wZGlyPSIkdG1wZGlyL2xpYnRvb2wtJCQiCisJICAgICAgaWYgJG1rZGlyIC1wICIkdG1wZGlyIiAmJiBjaG1vZCA3MDAgIiR0bXBkaXIiOyB0aGVuIDoKKwkgICAgICBlbHNlCisJCSRlY2hvICIkbW9kZW5hbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgXGAkdG1wZGlyJyIgMT4mMgorCQljb250aW51ZQorCSAgICAgIGZpCisJICAgICAgZmlsZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgICAgIG91dHB1dG5hbWU9IiR0bXBkaXIvJGZpbGUiCisJICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCSAgICAgIHJlbGlua19jb21tYW5kPWAkZWNobyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZydgCisKKwkgICAgICAkc2hvdyAiJHJlbGlua19jb21tYW5kIgorCSAgICAgIGlmICRydW4gZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICAgICAgZWxzZQorCQkkZWNobyAiJG1vZGVuYW1lOiBlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiIDE+JjIKKwkJJHtybX1yICIkdG1wZGlyIgorCQljb250aW51ZQorCSAgICAgIGZpCisJICAgICAgZmlsZT0iJG91dHB1dG5hbWUiCisJICAgIGVsc2UKKwkgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBjYW5ub3QgcmVsaW5rIFxgJGZpbGUnIiAxPiYyCisJICAgIGZpCisJICBlbHNlCisJICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KIAkgICAgZmlsZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAicyVcKFteL10qXCkkJSRvYmpkaXIvXDElImAKLSAgICAgICAgICBmaQotICAgICAgICBmaQorCSAgZmkKKwlmaQogCi0gICAgICAgICRzaG93ICIkaW5zdGFsbF9wcm9nJHN0cmlwbWUgJGZpbGUgJGRlc3QiCi0gICAgICAgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0IiB8fCBleGl0ICQ/Ci0gICAgICAgIDs7CisJIyByZW1vdmUgLmV4ZSBzaW5jZSBjeWd3aW4gL3Vzci9iaW4vaW5zdGFsbCB3aWxsIGFwcGVuZCBhbm90aGVyCisJIyBvbmUgYW55d2F5cworCWNhc2UgJGluc3RhbGxfcHJvZywkaG9zdCBpbgorCS91c3IvYmluL2luc3RhbGwqLCpjeWd3aW4qKQorCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KKwkgICouZXhlOiouZXhlKQorCSAgICAjIHRoaXMgaXMgb2sKKwkgICAgOzsKKwkgICouZXhlOiopCisJICAgIGRlc3RmaWxlPSRkZXN0ZmlsZS5leGUKKwkgICAgOzsKKwkgICo6Ki5leGUpCisJICAgIGRlc3RmaWxlPWBlY2hvICRkZXN0ZmlsZSB8ICR7U0VEfSAtZSAncywuZXhlJCwsJ2AKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCSRzaG93ICIkaW5zdGFsbF9wcm9nJHN0cmlwbWUgJGZpbGUgJGRlc3RmaWxlIgorCSRydW4gZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgfHwgZXhpdCAkPworCXRlc3QgLW4gIiRvdXRwdXRuYW1lIiAmJiAke3JtfXIgIiR0bXBkaXIiCisJOzsKICAgICAgIGVzYWMKICAgICBkb25lCiAKQEAgLTE5NjcsMTMgKzQ0NjEsMTggQEAKICAgICAgICRzaG93ICIkaW5zdGFsbF9wcm9nICRmaWxlICRvbGRsaWIiCiAgICAgICAkcnVuIGV2YWwgIiRpbnN0YWxsX3Byb2cgXCRmaWxlIFwkb2xkbGliIiB8fCBleGl0ICQ/CiAKKyAgICAgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkc3RyaXBsaWIiOyB0aGVuCisJJHNob3cgIiRvbGRfc3RyaXBsaWIgJG9sZGxpYiIKKwkkcnVuIGV2YWwgIiRvbGRfc3RyaXBsaWIgJG9sZGxpYiIgfHwgZXhpdCAkPworICAgICAgZmkKKwogICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgogICAgICAgZXZhbCBjbWRzPVwiJG9sZF9wb3N0aW5zdGFsbF9jbWRzXCIKLSAgICAgIElGUz0iJHtJRlM9IAl9Ijsgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JzsnCisgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKICAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0gICAgICAgIElGUz0iJHNhdmVfaWZzIgotICAgICAgICAkc2hvdyAiJGNtZCIKLSAgICAgICAgJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CisJSUZTPSIkc2F2ZV9pZnMiCisJJHNob3cgIiRjbWQiCisJJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CiAgICAgICBkb25lCiAgICAgICBJRlM9IiRzYXZlX2lmcyIKICAgICBkb25lCkBAIC0xOTg1LDU0ICs0NDg0LDU5IEBACiAgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KICAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCiAgICAgICB0ZXN0IC1uICIkcnVuIiAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCi0gICAgICBleGVjICRTSEVMTCAkMCAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMKLSAgICAgIGV4aXQgMQorICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkMCAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCisgICAgZWxzZQorICAgICAgZXhpdCAwCiAgICAgZmkKLQotICAgIGV4aXQgMAogICAgIDs7CiAKICAgIyBsaWJ0b29sIGZpbmlzaCBtb2RlCiAgIGZpbmlzaCkKICAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiBmaW5pc2giCiAgICAgbGliZGlycz0iJG5vbm9wdCIKKyAgICBhZG1pbmNtZHM9CiAKICAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgogICAgICAgZm9yIGRpcgogICAgICAgZG8KLSAgICAgICAgbGliZGlycz0iJGxpYmRpcnMgJGRpciIKKwlsaWJkaXJzPSIkbGliZGlycyAkZGlyIgogICAgICAgZG9uZQogCiAgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbwogCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KIAkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCiAJICBldmFsIGNtZHM9XCIkZmluaXNoX2NtZHNcIgotICAgICAgICAgIElGUz0iJHtJRlM9IAl9Ijsgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JzsnCi0gICAgICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KLSAgICAgICAgICAgIElGUz0iJHNhdmVfaWZzIgotICAgICAgICAgICAgJHNob3cgIiRjbWQiCi0gICAgICAgICAgICAkcnVuIGV2YWwgIiRjbWQiCi0gICAgICAgICAgZG9uZQotICAgICAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICBmb3IgY21kIGluICRjbWRzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgJHNob3cgIiRjbWQiCisJICAgICRydW4gZXZhbCAiJGNtZCIgfHwgYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisgICAgICAgJGNtZCIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgogCWZpCiAJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgogCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgogCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKLQkgICRydW4gZXZhbCAiJGNtZHMiCisJICAkcnVuIGV2YWwgIiRjbWRzIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyAgICAgICAkY21kcyIKIAlmaQogICAgICAgZG9uZQogICAgIGZpCiAKLSAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgdGVzdCAiJHNob3ciID0gIjoiICYmIGV4aXQgMAorCisgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCiAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KICAgICAgIGVjaG8gIiAgICRsaWJkaXIiCiAgICAgZG9uZQogICAgIGVjaG8KLSAgICBlY2hvICJUbyBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyBpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCIKLSAgICBlY2hvICJ5b3UgbXVzdCB1c2UgdGhlIFxgLUxMSUJESVInIGZsYWcgZHVyaW5nIGxpbmtpbmcuIgotICAgIGVjaG8KLSAgICBlY2hvICIgWW91IHdpbGwgYWxzbyBuZWVkIHRvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKyAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKyAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKyAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KICAgICAgIGVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCiAgICAgICBlY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCkBAIC0yMDQ3LDEzICs0NTUxLDE2IEBACiAKICAgICAgIGVjaG8gIiAgIC0gdXNlIHRoZSBcYCRmbGFnJyBsaW5rZXIgZmxhZyIKICAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCisgICAgICBlY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKyAgICBmaQogICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCiAgICAgICBlY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKICAgICBmaQogICAgIGVjaG8KICAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKICAgICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKLSAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgICBleGl0IDAKICAgICA7OwogCkBAIC0yMDcxLDMyICs0NTc4LDMxIEBACiAKICAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgogICAgIGZvciBmaWxlIGluICRleGVjdXRlX2RsZmlsZXM7IGRvCi0gICAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4gOgotICAgICAgZWxzZQorICAgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KIAkkZWNobyAiJG1vZGVuYW1lOiBcYCRmaWxlJyBpcyBub3QgYSBmaWxlIiAxPiYyCiAJJGVjaG8gIiRoZWxwIiAxPiYyCiAJZXhpdCAxCiAgICAgICBmaQogCiAgICAgICBkaXI9Ci0gICAgICBjYXNlICIkZmlsZSIgaW4KKyAgICAgIGNhc2UgJGZpbGUgaW4KICAgICAgICoubGEpCi0gICAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCi0gICAgICAgIGlmIChzZWQgLWUgJzJxJyAkZmlsZSB8IGVncmVwICdeIyBHZW5lcmF0ZWQgYnkgbHRtYWluXC5zaCcpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgotICAgICAgICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgICAgICAgIGV4aXQgMQotICAgICAgICBmaQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZWdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKwllbHNlCisJICAkZWNobyAiJG1vZGVuYW1lOiBcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgorCSAgJGVjaG8gIiRoZWxwIiAxPiYyCisJICBleGl0IDEKKwlmaQogCiAJIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCiAJZGxuYW1lPQogCWxpYnJhcnlfbmFtZXM9CiAKLSAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCi0JY2FzZSAiJGZpbGUiIGluCisJIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCisJY2FzZSAkZmlsZSBpbgogCSovKiB8ICpcXCopIC4gJGZpbGUgOzsKLSAgICAgICAgKikgLiAuLyRmaWxlIDs7CisJKikgLiAuLyRmaWxlIDs7CiAJZXNhYwogCiAJIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCkBAIC0yMTI1LDcgKzQ2MzEsNyBAQAogCiAgICAgICAqKQogCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmcgXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBub24tbGlidG9vbCBsaWJyYXJpZXMgYW5kIG9iamVjdHMiIDE+JjIKLSAgICAgICAgY29udGludWUKKwljb250aW51ZQogCTs7CiAgICAgICBlc2FjCiAKQEAgLTIxNDksMTMgKzQ2NTUsMTMgQEAKICAgICBhcmdzPQogICAgIGZvciBmaWxlCiAgICAgZG8KLSAgICAgIGNhc2UgIiRmaWxlIiBpbgorICAgICAgY2FzZSAkZmlsZSBpbgogICAgICAgLSopIDs7CiAgICAgICAqKQotICAgICAgICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCi0gICAgICAgIGlmIChzZWQgLWUgJzRxJyAkZmlsZSB8IGVncmVwICdeIyBHZW5lcmF0ZWQgYnkgbHRtYWluXC5zaCcpID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwlpZiAoJHtTRUR9IC1lICc0cScgJGZpbGUgfCBlZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KIAkgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotCSAgY2FzZSAiJGZpbGUiIGluCisJICBjYXNlICRmaWxlIGluCiAJICAqLyogfCAqXFwqKSAuICRmaWxlIDs7CiAJICAqKSAuIC4vJGZpbGUgOzsKIAkgIGVzYWMKQEAgLTIxNjMsNyArNDY2OSw3IEBACiAJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgogCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCiAJZmkKLSAgICAgICAgOzsKKwk7OwogICAgICAgZXNhYwogICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KICAgICAgIGZpbGU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYApAQCAtMjE3MSwzMiArNDY3Nyw0OCBAQAogICAgIGRvbmUKIAogICAgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCi0gICAgICAjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KLSAgICAgIGV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgorCWV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCiAKLSAgICAgICMgTm93IGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCi0gICAgICBldmFsICJleGVjIFwkY21kJGFyZ3MiCisgICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbWVudCB2YXJpYWJsZXMKKyAgICAgIGlmIHRlc3QgIiR7c2F2ZV9MQ19BTEwrc2V0fSIgPSBzZXQ7IHRoZW4KKwlMQ19BTEw9IiRzYXZlX0xDX0FMTCI7IGV4cG9ydCBMQ19BTEwKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIke3NhdmVfTEFORytzZXR9IiA9IHNldDsgdGhlbgorCUxBTkc9IiRzYXZlX0xBTkciOyBleHBvcnQgTEFORworICAgICAgZmkKIAotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGV4ZWMgXCRjbWQkYXJncyIKLSAgICAgIGV4aXQgMQorICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgorICAgICAgZXhlY19jbWQ9IlwkY21kJGFyZ3MiCiAgICAgZWxzZQogICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KLSAgICAgIGV2YWwgIlwkZWNobyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCi0gICAgICAkZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZXZhbCAiXCRlY2hvIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKKwkkZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKICAgICAgICRlY2hvICIkY21kJGFyZ3MiCiAgICAgICBleGl0IDAKICAgICBmaQogICAgIDs7CiAKLSAgIyBsaWJ0b29sIHVuaW5zdGFsbCBtb2RlCi0gIHVuaW5zdGFsbCkKLSAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiB1bmluc3RhbGwiCisgICMgbGlidG9vbCBjbGVhbiBhbmQgdW5pbnN0YWxsIG1vZGUKKyAgY2xlYW4gfCB1bmluc3RhbGwpCisgICAgbW9kZW5hbWU9IiRtb2RlbmFtZTogJG1vZGUiCiAgICAgcm09IiRub25vcHQiCiAgICAgZmlsZXM9CisgICAgcm1mb3JjZT0KKyAgICBleGl0X3N0YXR1cz0wCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKIAogICAgIGZvciBhcmcKICAgICBkbwotICAgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWYpIHJtPSIkcm0gJGFyZyI7IHJtZm9yY2U9eWVzIDs7CiAgICAgICAtKikgcm09IiRybSAkYXJnIiA7OwogICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OwogICAgICAgZXNhYwpAQCAtMjIwOCw3NCArNDczMCwxMjMgQEAKICAgICAgIGV4aXQgMQogICAgIGZpCiAKKyAgICBybWRpcnM9CisKICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCiAgICAgICBkaXI9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLSAgICAgIHRlc3QgIlgkZGlyIiA9ICJYJGZpbGUiICYmIGRpcj0uCisgICAgICBpZiB0ZXN0ICJYJGRpciIgPSAiWCRmaWxlIjsgdGhlbgorCWRpcj0uCisJb2JqZGlyPSIkb2JqZGlyIgorICAgICAgZWxzZQorCW9iamRpcj0iJGRpci8kb2JqZGlyIgorICAgICAgZmkKICAgICAgIG5hbWU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAgICAgIHRlc3QgJG1vZGUgPSB1bmluc3RhbGwgJiYgb2JqZGlyPSIkZGlyIgorCisgICAgICAjIFJlbWVtYmVyIG9iamRpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCisgICAgICBpZiB0ZXN0ICRtb2RlID0gY2xlYW47IHRoZW4KKwljYXNlICIgJHJtZGlycyAiIGluCisJICAqIiAkb2JqZGlyICIqKSA7OworCSAgKikgcm1kaXJzPSIkcm1kaXJzICRvYmpkaXIiIDs7CisJZXNhYworICAgICAgZmkKKworICAgICAgIyBEb24ndCBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBybSAtZiB3YXMgdXNlZC4KKyAgICAgIGlmICh0ZXN0IC1MICIkZmlsZSIpID4vZGV2L251bGwgMj4mMSBcCisJfHwgKHRlc3QgLWggIiRmaWxlIikgPi9kZXYvbnVsbCAyPiYxIFwKKwl8fCB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwk6CisgICAgICBlbGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgorCWV4aXRfc3RhdHVzPTEKKwljb250aW51ZQorICAgICAgZWxpZiB0ZXN0ICIkcm1mb3JjZSIgPSB5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZmkKIAogICAgICAgcm1maWxlcz0iJGZpbGUiCiAKLSAgICAgIGNhc2UgIiRuYW1lIiBpbgorICAgICAgY2FzZSAkbmFtZSBpbgogICAgICAgKi5sYSkKLSAgICAgICAgIyBQb3NzaWJseSBhIGxpYnRvb2wgYXJjaGl2ZSwgc28gdmVyaWZ5IGl0LgotICAgICAgICBpZiAoc2VkIC1lICcycScgJGZpbGUgfCBlZ3JlcCAnXiMgR2VuZXJhdGVkIGJ5IGx0bWFpblwuc2gnKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgICAuICRkaXIvJG5hbWUKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCisJaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZWdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAuICRkaXIvJG5hbWUKIAotICAgICAgICAgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCi0gICAgICAgICAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCi0gICAgICAgICAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRuIgotICAgICAgICAgICAgdGVzdCAiWCRuIiA9ICJYJGRsbmFtZSIgJiYgZGxuYW1lPQotICAgICAgICAgIGRvbmUKLSAgICAgICAgICB0ZXN0IC1uICIkZGxuYW1lIiAmJiBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRkbG5hbWUiCi0gICAgICAgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCisJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbiIKKwkgIGRvbmUKKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICB0ZXN0ICRtb2RlID0gY2xlYW4gJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgogCi0JICAkc2hvdyAiJHJtICRybWZpbGVzIgotCSAgJHJ1biAkcm0gJHJtZmlsZXMKLQotCSAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCi0JICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgotCSAgICBldmFsIGNtZHM9XCIkcG9zdHVuaW5zdGFsbF9jbWRzXCIKLQkgICAgSUZTPSIke0lGUz0gCX0iOyBzYXZlX2lmcz0iJElGUyI7IElGUz0nOycKLQkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIGlmIHRlc3QgJG1vZGUgPSB1bmluc3RhbGw7IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCisJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgZXZhbCBjbWRzPVwiJHBvc3R1bmluc3RhbGxfY21kc1wiCisJICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkJSUZTPSIkc2F2ZV9pZnMiCisJCSRzaG93ICIkY21kIgorCQkkcnVuIGV2YWwgIiRjbWQiCisJCWlmIHRlc3QgJD8gIT0gMCAmJiB0ZXN0ICIkcm1mb3JjZSIgIT0geWVzOyB0aGVuCisJCSAgZXhpdF9zdGF0dXM9MQorCQlmaQorCSAgICAgIGRvbmUKIAkgICAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgICAkc2hvdyAiJGNtZCIKLQkgICAgICAkcnVuIGV2YWwgIiRjbWQiCi0JICAgIGRvbmUKLQkgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICBmaQorCSAgICBmaQogCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotCSAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCi0JICAgIGV2YWwgY21kcz1cIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXCIKLQkgICAgSUZTPSIke0lGUz0gCX0iOyBzYXZlX2lmcz0iJElGUyI7IElGUz0nOycKLQkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBvbGRfcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBldmFsIGNtZHM9XCIkb2xkX3Bvc3R1bmluc3RhbGxfY21kc1wiCisJICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkJSUZTPSIkc2F2ZV9pZnMiCisJCSRzaG93ICIkY21kIgorCQkkcnVuIGV2YWwgIiRjbWQiCisJCWlmIHRlc3QgJD8gIT0gMCAmJiB0ZXN0ICIkcm1mb3JjZSIgIT0geWVzOyB0aGVuCisJCSAgZXhpdF9zdGF0dXM9MQorCQlmaQorCSAgICAgIGRvbmUKIAkgICAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgICAkc2hvdyAiJGNtZCIKLQkgICAgICAkcnVuIGV2YWwgIiRjbWQiCi0JICAgIGRvbmUKLQkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGZpCisJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgogCSAgZmkKLQotICAgICAgICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgotICAgICAgICBmaQotICAgICAgICA7OworCWZpCisJOzsKIAogICAgICAgKi5sbykKLSAgICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotICAgICAgICAgIG9sZG9iaj1gJGVjaG8gIlgkbmFtZSIgfCAkWHNlZCAtZSAncy9cLmxvJC9cLm8vJ2AKLSAgICAgICAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRvbGRvYmoiCi0gICAgICAgIGZpCi0JJHNob3cgIiRybSAkcm1maWxlcyIKLQkkcnVuICRybSAkcm1maWxlcwotICAgICAgICA7OworCWlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgIG9sZG9iaj1gJGVjaG8gIlgkbmFtZSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorCSAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kb2xkb2JqIgorCWZpCisJOzsKIAogICAgICAgKikKLSAgICAgIAkkc2hvdyAiJHJtICRybWZpbGVzIgotCSRydW4gJHJtICRybWZpbGVzCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCisJaWYgdGVzdCAkbW9kZSA9IGNsZWFuICYmCisJICAgKCR7U0VEfSAtZSAnNHEnICRmaWxlIHwgZWdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0KKwkgIC4gJGRpci8kZmlsZQorCisJICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfVMuJHtvYmpleHR9IgorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSRuYW1lIgorCSAgZmkKKwlmaQogCTs7CiAgICAgICBlc2FjCisgICAgICAkc2hvdyAiJHJtICRybWZpbGVzIgorICAgICAgJHJ1biAkcm0gJHJtZmlsZXMgfHwgZXhpdF9zdGF0dXM9MQogICAgIGRvbmUKLSAgICBleGl0IDAKKworICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRkaXIiOyB0aGVuCisJJHNob3cgInJtZGlyICRkaXIiCisJJHJ1biBybWRpciAkZGlyID4vZGV2L251bGwgMj4mMQorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0ICRleGl0X3N0YXR1cwogICAgIDs7CiAKICAgIiIpCkBAIC0yMjg1LDIwICs0ODU2LDI5IEBACiAgICAgOzsKICAgZXNhYwogCi0gICRlY2hvICIkbW9kZW5hbWU6IGludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciIDE+JjIKLSAgJGVjaG8gIiRnZW5lcmljX2hlbHAiIDE+JjIKLSAgZXhpdCAxCisgIGlmIHRlc3QgLXogIiRleGVjX2NtZCI7IHRoZW4KKyAgICAkZWNobyAiJG1vZGVuYW1lOiBpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIiAxPiYyCisgICAgJGVjaG8gIiRnZW5lcmljX2hlbHAiIDE+JjIKKyAgICBleGl0IDEKKyAgZmkKIGZpICMgdGVzdCAteiAiJHNob3dfaGVscCIKIAoraWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgorICBldmFsIGV4ZWMgJGV4ZWNfY21kCisgIGV4aXQgMQorZmkKKwogIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCi1jYXNlICIkbW9kZSIgaW4KK2Nhc2UgJG1vZGUgaW4KICIiKSAkZWNobyBcCiAiVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uCiAKIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgogCisgICAgLS1jb25maWcgICAgICAgICAgc2hvdyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAgICAtLWRlYnVnICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCiAtbiwgLS1kcnktcnVuICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKLSAgICAtLWZlYXR1cmVzICAgICAgICBkaXNwbGF5IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgICAtLWZlYXR1cmVzICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKICAgICAtLWZpbmlzaCAgICAgICAgICBzYW1lIGFzIFxgLS1tb2RlPWZpbmlzaCcKICAgICAtLWhlbHAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CiAgICAgLS1tb2RlPU1PREUgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUgW2RlZmF1bHQ9aW5mZXJyZWQgZnJvbSBNT0RFLUFSR1NdCkBAIC0yMzA4LDYgKzQ4ODgsNyBAQAogCiBNT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAKKyAgICAgIGNsZWFuICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CiAgICAgICBjb21waWxlICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAogICAgICAgZXhlY3V0ZSAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCiAgICAgICBmaW5pc2ggICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcwpAQCAtMjMyMCwxMiArNDkwMSwzMyBAQAogICBleGl0IDAKICAgOzsKIAorY2xlYW4pCisgICRlY2hvIFwKKyJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKK3dpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgOzsKKwogY29tcGlsZSkKICAgJGVjaG8gXAogIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNvbXBpbGUgQ09NUElMRS1DT01NQU5ELi4uIFNPVVJDRUZJTEUKIAogQ29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIGxpYnJhcnkgb2JqZWN0LgogCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkaW5nIFBJQyBvYmplY3RzIG9ubHkKKyAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkaW5nIG5vbi1QSUMgb2JqZWN0cyBvbmx5CisgIC1zdGF0aWMgICAgICAgICAgIGFsd2F5cyBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisKIENPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhIFxgc3RhbmRhcmQnIG9iamVjdCBmaWxlCiBmcm9tIHRoZSBnaXZlbiBTT1VSQ0VGSUxFLgogCkBAIC0yMzkyLDE4ICs0OTk0LDI3IEBACiBUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKIAogICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKKyAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCiAgIC1kbG9wZW4gRklMRSAgICAgIFxgLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQotICAtZGxwcmVvcGVuIEZJTEUgICBsaW5rIGluIEZJTEUgYW5kIGFkZCBpdHMgc3ltYm9scyB0byBkbGRfcHJlbG9hZGVkX3N5bWJvbHMKKyAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKICAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKKyAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKKwkJICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQorICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKKwkJICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBtYXRjaGluZyBSRUdFWAogICAtTExJQkRJUiAgICAgICAgICBzZWFyY2ggTElCRElSIGZvciByZXF1aXJlZCBpbnN0YWxsZWQgbGlicmFyaWVzCiAgIC1sTkFNRSAgICAgICAgICAgIE9VVFBVVC1GSUxFIHJlcXVpcmVzIHRoZSBpbnN0YWxsZWQgbGlicmFyeSBsaWJOQU1FCisgIC1tb2R1bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0aGF0IGNhbiBkbG9wZW5lZAorICAtbm8tZmFzdC1pbnN0YWxsICBkaXNhYmxlIHRoZSBmYXN0LWluc3RhbGwgbW9kZQorICAtbm8taW5zdGFsbCAgICAgICBsaW5rIGEgbm90LWluc3RhbGxhYmxlIGV4ZWN1dGFibGUKICAgLW5vLXVuZGVmaW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFyeSBkb2VzIG5vdCByZWZlciB0byBleHRlcm5hbCBzeW1ib2xzCiAgIC1vIE9VVFBVVC1GSUxFICAgIGNyZWF0ZSBPVVRQVVQtRklMRSBmcm9tIHRoZSBzcGVjaWZpZWQgb2JqZWN0cwogICAtcmVsZWFzZSBSRUxFQVNFICBzcGVjaWZ5IHBhY2thZ2UgcmVsZWFzZSBpbmZvcm1hdGlvbgogICAtcnBhdGggTElCRElSICAgICB0aGUgY3JlYXRlZCBsaWJyYXJ5IHdpbGwgZXZlbnR1YWxseSBiZSBpbnN0YWxsZWQgaW4gTElCRElSCisgIC1SWyBdTElCRElSICAgICAgIGFkZCBMSUJESVIgdG8gdGhlIHJ1bnRpbWUgcGF0aCBvZiBwcm9ncmFtcyBhbmQgbGlicmFyaWVzCiAgIC1zdGF0aWMgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCiAgIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCi0gICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KKwkJICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KIAogQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KIApAQCAtMjQxMSwxOCArNTAyMiwxOSBAQAogdHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKIG9iamVjdCBmaWxlcy4KIAotSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsIG9ubHkKLWxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzIHJlcXVpcmVkLgorSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCityZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgogCi1JZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkIHVzaW5nIFxgYXInCi1hbmQgXGByYW5saWInLgorSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5hJyBvciBcYC5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCit1c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KIAotSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAubycsIHRoZW4gYSByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGlzCi1jcmVhdGVkLCBvdGhlcndpc2UgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIGlzIGNyZWF0ZWQuIgorSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAuJHtvYmpleHR9JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKK2lzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCiAgIDs7CiAKIHVuaW5zdGFsbCkKLSAgJGVjaG8KKyAgJGVjaG8gXAogIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCiAKIFJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvbWFrZWNmZy5jIGIvbWFrZWNmZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4N2VhMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tYWtlY2ZnLmMKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBtYWtlY2ZnLmMKKyAqCisgKiB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCisgKiBMYXN0IE1vZGlmaWVkIDogTWFyY2ggMjMsIDIwMDUKKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKyNpZm5kZWYgb2Zmc2V0b2YJCS8qIGRlZmluZWQgaW4gPHN0ZGRlZi5oPiAqLworI2RlZmluZSBvZmZzZXRvZih0eXBlLCBtZW0pICgoc2l6ZV90KSBcCisJCSgoY2hhciAqKSYoKHR5cGUgKikwKS0+bWVtIC0gKGNoYXIgKikodHlwZSAqKTApKQorI2VuZGlmCisKK3ZvaWQKK3ByaW50X3N0cnVjdHVyZV9vZmZzZXQgKHZvaWQpCit7CisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCI7IC0tLS0gbWFjcm9zIGZvciBzdHJ1Y3R1cmUgYWNjZXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgcHJpbnRmKCJcbiIpOworCisgIHByaW50ZigiOyBzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3RcblxuIik7CisgIHByaW50ZigiJSVkZWZpbmUgamNzdHJ1Y3RfaW1hZ2Vfd2lkdGgoYikgICAgICAgICAoKGIpICsgJTN1KSA7IGNpbmZvLT5pbWFnZV93aWR0aFxuIiwKKwkodW5zaWduZWQpb2Zmc2V0b2Yoc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0LCBpbWFnZV93aWR0aCkpOworICBwcmludGYoIiUlZGVmaW5lIGpjc3RydWN0X21heF92X3NhbXBfZmFjdG9yKGIpICAgKChiKSArICUzdSkgOyBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3JcbiIsCisJKHVuc2lnbmVkKW9mZnNldG9mKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCwgbWF4X3Zfc2FtcF9mYWN0b3IpKTsKKyAgcHJpbnRmKCJcbiIpOworCisgIHByaW50ZigiOyBzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdFxuXG4iKTsKKyAgcHJpbnRmKCIlJWRlZmluZSBqZHN0cnVjdF9vdXRwdXRfd2lkdGgoYikgICAgICAgICgoYikgKyAlM3UpIDsgY2luZm8tPm91dHB1dF93aWR0aFxuIiwKKwkodW5zaWduZWQpb2Zmc2V0b2Yoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QsIG91dHB1dF93aWR0aCkpOworICBwcmludGYoIiUlZGVmaW5lIGpkc3RydWN0X21heF92X3NhbXBfZmFjdG9yKGIpICAgKChiKSArICUzdSkgOyBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3JcbiIsCisJKHVuc2lnbmVkKW9mZnNldG9mKHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0LCBtYXhfdl9zYW1wX2ZhY3RvcikpOworICBwcmludGYoIiUlZGVmaW5lIGpkc3RydWN0X3NhbXBsZV9yYW5nZV9saW1pdChiKSAgKChiKSArICUzdSkgOyBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0XG4iLAorCSh1bnNpZ25lZClvZmZzZXRvZihzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCwgc2FtcGxlX3JhbmdlX2xpbWl0KSk7CisgIHByaW50ZigiXG4iKTsKKworICBwcmludGYoIjsganBlZ19jb21wb25lbnRfaW5mb1xuXG4iKTsKKyAgcHJpbnRmKCIlJWRlZmluZSBqY29tcGluZm9fdl9zYW1wX2ZhY3RvcihiKSAgICAgICgoYikgKyAlMnUpIDsgY29tcHB0ci0+dl9zYW1wX2ZhY3RvclxuIiwKKwkodW5zaWduZWQpb2Zmc2V0b2YoanBlZ19jb21wb25lbnRfaW5mbywgdl9zYW1wX2ZhY3RvcikpOworICBwcmludGYoIiUlZGVmaW5lIGpjb21waW5mb193aWR0aF9pbl9ibG9ja3MoYikgICAgKChiKSArICUydSkgOyBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3NcbiIsCisJKHVuc2lnbmVkKW9mZnNldG9mKGpwZWdfY29tcG9uZW50X2luZm8sIHdpZHRoX2luX2Jsb2NrcykpOworICBwcmludGYoIiUlZGVmaW5lIGpjb21waW5mb19kb3duc2FtcGxlZF93aWR0aChiKSAgKChiKSArICUydSkgOyBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aFxuIiwKKwkodW5zaWduZWQpb2Zmc2V0b2YoanBlZ19jb21wb25lbnRfaW5mbywgZG93bnNhbXBsZWRfd2lkdGgpKTsKKyAgcHJpbnRmKCIlJWRlZmluZSBqY29tcGluZm9fZGN0X3RhYmxlKGIpICAgICAgICAgICgoYikgKyAlMnUpIDsgY29tcHB0ci0+ZGN0X3RhYmxlXG4iLAorCSh1bnNpZ25lZClvZmZzZXRvZihqcGVnX2NvbXBvbmVudF9pbmZvLCBkY3RfdGFibGUpKTsKKyAgcHJpbnRmKCJcbiIpOworfQorCisKK3ZvaWQKK3ByaW50X2pjb25maWdfaF9tYWNybyAodm9pZCkKK3sKKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIjsgLS0tLSBtYWNyb3MgZnJvbSBqY29uZmlnLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICBwcmludGYoIlxuIik7CisKKyNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisgIHByaW50ZigiJSVkZWZpbmUgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FU1x0OyBVc2Ugc2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXNcbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIlJXVuZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVNcdDsgVXNlIHNob3J0IGZvcm1zIG9mIGV4dGVybmFsIG5hbWVzXG4iKTsKKyNlbmRpZgorICBwcmludGYoIlxuIik7Cit9CisKKwordm9pZAorcHJpbnRfam1vcmVjZmdfaF9tYWNybyAodm9pZCkKK3sKKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIjsgLS0tLSBtYWNyb3MgZnJvbSBqbW9yZWNmZy5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICBwcmludGYoIlxuIik7CisKKyAgcHJpbnRmKCI7IENhcGFiaWxpdHkgb3B0aW9ucyBjb21tb24gdG8gZW5jb2RlciBhbmQgZGVjb2RlcjpcbiIpOworICBwcmludGYoIlxuIik7CisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorICBwcmludGYoIiUlZGVmaW5lIERDVF9JU0xPV19TVVBQT1JURURcdDsgc2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG1cbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIlJXVuZGVmIERDVF9JU0xPV19TVVBQT1JURURcdDsgc2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG1cbiIpOworI2VuZGlmCisjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorICBwcmludGYoIiUlZGVmaW5lIERDVF9JRkFTVF9TVVBQT1JURURcdDsgZmFzdGVyLCBsZXNzIGFjY3VyYXRlIGludGVnZXIgbWV0aG9kXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVEXHQ7IGZhc3RlciwgbGVzcyBhY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZFxuIik7CisjZW5kaWYKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisgIHByaW50ZigiJSVkZWZpbmUgRENUX0ZMT0FUX1NVUFBPUlRFRFx0OyBmbG9hdGluZy1wb2ludDogYWNjdXJhdGUsIGZhc3Qgb24gZmFzdCBIV1xuIik7CisjZWxzZQorICBwcmludGYoIiUldW5kZWYgRENUX0ZMT0FUX1NVUFBPUlRFRFx0OyBmbG9hdGluZy1wb2ludDogYWNjdXJhdGUsIGZhc3Qgb24gZmFzdCBIV1xuIik7CisjZW5kaWYKKyAgcHJpbnRmKCJcbiIpOworCisgIHByaW50ZigiOyBEZWNvZGVyIGNhcGFiaWxpdHkgb3B0aW9uczpcbiIpOworICBwcmludGYoIlxuIik7CisjaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAorICBwcmludGYoIiUlZGVmaW5lIElEQ1RfU0NBTElOR19TVVBQT1JURURcdFx0OyBPdXRwdXQgcmVzY2FsaW5nIHZpYSBJRENUP1xuIik7CisjZWxzZQorICBwcmludGYoIiUldW5kZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRFx0XHQ7IE91dHB1dCByZXNjYWxpbmcgdmlhIElEQ1Q/XG4iKTsKKyNlbmRpZgorI2lmZGVmIFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVECisgIHByaW50ZigiJSVkZWZpbmUgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURURcdDsgRmFzdCBwYXRoIGZvciBzbG9wcHkgdXBzYW1wbGluZz9cbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIlJXVuZGVmIFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVEXHQ7IEZhc3QgcGF0aCBmb3Igc2xvcHB5IHVwc2FtcGxpbmc/XG4iKTsKKyNlbmRpZgorI2lmZGVmIFVQU0FNUExFX0gxVjJfU1VQUE9SVEVECisgIHByaW50ZigiJSVkZWZpbmUgVVBTQU1QTEVfSDFWMl9TVVBQT1JURURcdFx0OyBGYXN0L2ZhbmN5IHByb2Nlc3NpbmcgZm9yIDFoMnY/XG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBVUFNBTVBMRV9IMVYyX1NVUFBPUlRFRFx0XHQ7IEZhc3QvZmFuY3kgcHJvY2Vzc2luZyBmb3IgMWgydj9cbiIpOworI2VuZGlmCisgIHByaW50ZigiXG4iKTsKKworI2lmIChSR0JfUElYRUxTSVpFID09IDMgfHwgUkdCX1BJWEVMU0laRSA9PSA0KSAmJiBcCisgICAgKFJHQl9SRUQgPCAwIHx8IFJHQl9SRUQgPj0gUkdCX1BJWEVMU0laRSB8fCBSR0JfR1JFRU4gPCAwIHx8IFwKKyAgICAgUkdCX0dSRUVOID49IFJHQl9QSVhFTFNJWkUgfHwgUkdCX0JMVUUgPCAwIHx8IFJHQl9CTFVFID49IFJHQl9QSVhFTFNJWkUgfHwgXAorICAgICBSR0JfUkVEID09IFJHQl9HUkVFTiB8fCBSR0JfR1JFRU4gPT0gUkdCX0JMVUUgfHwgUkdCX1JFRCA9PSBSR0JfQkxVRSkKKyNlcnJvciAiSW5jb3JyZWN0IFJHQiBwaXhlbCBvZmZzZXQuIgorI2VuZGlmCisgIHByaW50ZigiOyBPcmRlcmluZyBvZiBSR0IgZGF0YSBpbiBzY2FubGluZXMgcGFzc2VkIHRvIG9yIGZyb20gdGhlIGFwcGxpY2F0aW9uLlxuIik7CisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCIlJWRlZmluZSBSR0JfUkVEXHRcdCV1XHQ7IE9mZnNldCBvZiBSZWQgaW4gYW4gUkdCIHNjYW5saW5lIGVsZW1lbnRcbiIsIFJHQl9SRUQpOworICBwcmludGYoIiUlZGVmaW5lIFJHQl9HUkVFTlx0JXVcdDsgT2Zmc2V0IG9mIEdyZWVuXG4iLCBSR0JfR1JFRU4pOworICBwcmludGYoIiUlZGVmaW5lIFJHQl9CTFVFXHQldVx0OyBPZmZzZXQgb2YgQmx1ZVxuIiwgUkdCX0JMVUUpOworICBwcmludGYoIiUlZGVmaW5lIFJHQl9QSVhFTFNJWkVcdCV1XHQ7IEpTQU1QTEVzIHBlciBSR0Igc2NhbmxpbmUgZWxlbWVudFxuIiwgUkdCX1BJWEVMU0laRSk7CisgIHByaW50ZigiXG4iKTsKKyNpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisgIHByaW50ZigiJSVkZWZpbmUgUkdCWF9GSUxMRVJfMFhGRlx0OyBmaWxsIGR1bW15IGJ5dGVzIHdpdGggMHhGRiBpbiBSR0JYIGZvcm1hdFxuIik7CisjZWxzZQorICBwcmludGYoIiUldW5kZWYgUkdCWF9GSUxMRVJfMFhGRlx0XHQ7IGZpbGwgZHVtbXkgYnl0ZXMgd2l0aCAweEZGIGluIFJHQlggZm9ybWF0XG4iKTsKKyNlbmRpZgorICBwcmludGYoIlxuIik7CisKKyAgcHJpbnRmKCI7IFNJTUQgc3VwcG9ydCBvcHRpb25zIChlbmNvZGVyKTpcbiIpOworICBwcmludGYoIlxuIik7CisjaWZkZWYgSkNDT0xPUl9SR0JZQ0NfTU1YX1NVUFBPUlRFRAorICBwcmludGYoIiUlZGVmaW5lIEpDQ09MT1JfUkdCWUNDX01NWF9TVVBQT1JURURcdDsgUkdCLT5ZQ0MgY29udmVyc2lvbiB3aXRoIE1NWFxuIik7CisjZWxzZQorICBwcmludGYoIiUldW5kZWYgSkNDT0xPUl9SR0JZQ0NfTU1YX1NVUFBPUlRFRFx0OyBSR0ItPllDQyBjb252ZXJzaW9uIHdpdGggTU1YXG4iKTsKKyNlbmRpZgorI2lmZGVmIEpDQ09MT1JfUkdCWUNDX1NTRTJfU1VQUE9SVEVECisgIHByaW50ZigiJSVkZWZpbmUgSkNDT0xPUl9SR0JZQ0NfU1NFMl9TVVBQT1JURURcdDsgUkdCLT5ZQ0MgY29udmVyc2lvbiB3aXRoIFNTRTJcbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIlJXVuZGVmIEpDQ09MT1JfUkdCWUNDX1NTRTJfU1VQUE9SVEVEXHQ7IFJHQi0+WUNDIGNvbnZlcnNpb24gd2l0aCBTU0UyXG4iKTsKKyNlbmRpZgorI2lmZGVmIEpDU0FNUExFX01NWF9TVVBQT1JURUQKKyAgcHJpbnRmKCIlJWRlZmluZSBKQ1NBTVBMRV9NTVhfU1VQUE9SVEVEXHRcdDsgZG93bnNhbXBsaW5nIHdpdGggTU1YXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKQ1NBTVBMRV9NTVhfU1VQUE9SVEVEXHRcdDsgZG93bnNhbXBsaW5nIHdpdGggTU1YXG4iKTsKKyNlbmRpZgorI2lmZGVmIEpDU0FNUExFX1NTRTJfU1VQUE9SVEVECisgIHByaW50ZigiJSVkZWZpbmUgSkNTQU1QTEVfU1NFMl9TVVBQT1JURURcdFx0OyBkb3duc2FtcGxpbmcgd2l0aCBTU0UyXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKQ1NBTVBMRV9TU0UyX1NVUFBPUlRFRFx0XHQ7IGRvd25zYW1wbGluZyB3aXRoIFNTRTJcbiIpOworI2VuZGlmCisjaWZkZWYgSkZEQ1RfSU5UX01NWF9TVVBQT1JURUQKKyAgcHJpbnRmKCIlJWRlZmluZSBKRkRDVF9JTlRfTU1YX1NVUFBPUlRFRFx0XHQ7IGZvcndhcmQgRENUIHdpdGggTU1YXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKRkRDVF9JTlRfTU1YX1NVUFBPUlRFRFx0XHQ7IGZvcndhcmQgRENUIHdpdGggTU1YXG4iKTsKKyNlbmRpZgorI2lmZGVmIEpGRENUX0lOVF9TU0UyX1NVUFBPUlRFRAorICBwcmludGYoIiUlZGVmaW5lIEpGRENUX0lOVF9TU0UyX1NVUFBPUlRFRFx0OyBmb3J3YXJkIERDVCB3aXRoIFNTRTJcbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIlJXVuZGVmIEpGRENUX0lOVF9TU0UyX1NVUFBPUlRFRFx0XHQ7IGZvcndhcmQgRENUIHdpdGggU1NFMlxuIik7CisjZW5kaWYKKyNpZmRlZiBKRkRDVF9GTFRfM0ROT1dfTU1YX1NVUFBPUlRFRAorICBwcmludGYoIiUlZGVmaW5lIEpGRENUX0ZMVF8zRE5PV19NTVhfU1VQUE9SVEVEXHQ7IGZvcndhcmQgRENUIHdpdGggM0ROb3chL01NWFxuIik7CisjZWxzZQorICBwcmludGYoIiUldW5kZWYgSkZEQ1RfRkxUXzNETk9XX01NWF9TVVBQT1JURURcdDsgZm9yd2FyZCBEQ1Qgd2l0aCAzRE5vdyEvTU1YXG4iKTsKKyNlbmRpZgorI2lmZGVmIEpGRENUX0ZMVF9TU0VfTU1YX1NVUFBPUlRFRAorICBwcmludGYoIiUlZGVmaW5lIEpGRENUX0ZMVF9TU0VfTU1YX1NVUFBPUlRFRFx0OyBmb3J3YXJkIERDVCB3aXRoIFNTRS9NTVhcbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIlJXVuZGVmIEpGRENUX0ZMVF9TU0VfTU1YX1NVUFBPUlRFRFx0OyBmb3J3YXJkIERDVCB3aXRoIFNTRS9NTVhcbiIpOworI2VuZGlmCisjaWZkZWYgSkZEQ1RfRkxUX1NTRV9TU0UyX1NVUFBPUlRFRAorICBwcmludGYoIiUlZGVmaW5lIEpGRENUX0ZMVF9TU0VfU1NFMl9TVVBQT1JURURcdDsgZm9yd2FyZCBEQ1Qgd2l0aCBTU0UvU1NFMlxuIik7CisjZWxzZQorICBwcmludGYoIiUldW5kZWYgSkZEQ1RfRkxUX1NTRV9TU0UyX1NVUFBPUlRFRFx0OyBmb3J3YXJkIERDVCB3aXRoIFNTRS9TU0UyXG4iKTsKKyNlbmRpZgorI2lmZGVmIEpGRENUX0lOVF9RVUFOVElaRV9XSVRIX0RJVklTSU9OCisgIHByaW50ZigiJSVkZWZpbmUgSkZEQ1RfSU5UX1FVQU5USVpFX1dJVEhfRElWSVNJT04gOyBVc2UgZ2VuZXJhbCBxdWFudGl6YXRpb24gbWV0aG9kXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKRkRDVF9JTlRfUVVBTlRJWkVfV0lUSF9ESVZJU0lPTiA7IFVzZSBnZW5lcmFsIHF1YW50aXphdGlvbiBtZXRob2RcbiIpOworI2VuZGlmCisgIHByaW50ZigiXG4iKTsKKworICBwcmludGYoIjsgU0lNRCBzdXBwb3J0IG9wdGlvbnMgKGRlY29kZXIpOlxuIik7CisgIHByaW50ZigiXG4iKTsKKyNpZmRlZiBKRENPTE9SX1lDQ1JHQl9NTVhfU1VQUE9SVEVECisgIHByaW50ZigiJSVkZWZpbmUgSkRDT0xPUl9ZQ0NSR0JfTU1YX1NVUFBPUlRFRFx0OyBZQ0MtPlJHQiBjb252ZXJzaW9uIHdpdGggTU1YXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKRENPTE9SX1lDQ1JHQl9NTVhfU1VQUE9SVEVEXHQ7IFlDQy0+UkdCIGNvbnZlcnNpb24gd2l0aCBNTVhcbiIpOworI2VuZGlmCisjaWZkZWYgSkRDT0xPUl9ZQ0NSR0JfU1NFMl9TVVBQT1JURUQKKyAgcHJpbnRmKCIlJWRlZmluZSBKRENPTE9SX1lDQ1JHQl9TU0UyX1NVUFBPUlRFRFx0OyBZQ0MtPlJHQiBjb252ZXJzaW9uIHdpdGggU1NFMlxuIik7CisjZWxzZQorICBwcmludGYoIiUldW5kZWYgSkRDT0xPUl9ZQ0NSR0JfU1NFMl9TVVBQT1JURURcdDsgWUNDLT5SR0IgY29udmVyc2lvbiB3aXRoIFNTRTJcbiIpOworI2VuZGlmCisjaWZkZWYgSkRNRVJHRV9NTVhfU1VQUE9SVEVECisgIHByaW50ZigiJSVkZWZpbmUgSkRNRVJHRV9NTVhfU1VQUE9SVEVEXHRcdDsgbWVyZ2VkIHVwc2FtcGxpbmcgd2l0aCBNTVhcbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIlJXVuZGVmIEpETUVSR0VfTU1YX1NVUFBPUlRFRFx0XHQ7IG1lcmdlZCB1cHNhbXBsaW5nIHdpdGggTU1YXG4iKTsKKyNlbmRpZgorI2lmZGVmIEpETUVSR0VfU1NFMl9TVVBQT1JURUQKKyAgcHJpbnRmKCIlJWRlZmluZSBKRE1FUkdFX1NTRTJfU1VQUE9SVEVEXHRcdDsgbWVyZ2VkIHVwc2FtcGxpbmcgd2l0aCBTU0UyXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKRE1FUkdFX1NTRTJfU1VQUE9SVEVEXHRcdDsgbWVyZ2VkIHVwc2FtcGxpbmcgd2l0aCBTU0UyXG4iKTsKKyNlbmRpZgorI2lmZGVmIEpEU0FNUExFX0ZBTkNZX01NWF9TVVBQT1JURUQKKyAgcHJpbnRmKCIlJWRlZmluZSBKRFNBTVBMRV9GQU5DWV9NTVhfU1VQUE9SVEVEXHQ7IGZhbmN5IHVwc2FtcGxpbmcgd2l0aCBNTVhcbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIlJXVuZGVmIEpEU0FNUExFX0ZBTkNZX01NWF9TVVBQT1JURURcdDsgZmFuY3kgdXBzYW1wbGluZyB3aXRoIE1NWFxuIik7CisjZW5kaWYKKyNpZmRlZiBKRFNBTVBMRV9GQU5DWV9TU0UyX1NVUFBPUlRFRAorICBwcmludGYoIiUlZGVmaW5lIEpEU0FNUExFX0ZBTkNZX1NTRTJfU1VQUE9SVEVEXHQ7IGZhbmN5IHVwc2FtcGxpbmcgd2l0aCBTU0UyXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKRFNBTVBMRV9GQU5DWV9TU0UyX1NVUFBPUlRFRFx0OyBmYW5jeSB1cHNhbXBsaW5nIHdpdGggU1NFMlxuIik7CisjZW5kaWYKKyNpZmRlZiBKRFNBTVBMRV9TSU1QTEVfTU1YX1NVUFBPUlRFRAorICBwcmludGYoIiUlZGVmaW5lIEpEU0FNUExFX1NJTVBMRV9NTVhfU1VQUE9SVEVEXHQ7IHNsb3BweSB1cHNhbXBsaW5nIHdpdGggTU1YXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKRFNBTVBMRV9TSU1QTEVfTU1YX1NVUFBPUlRFRFx0OyBzbG9wcHkgdXBzYW1wbGluZyB3aXRoIE1NWFxuIik7CisjZW5kaWYKKyNpZmRlZiBKRFNBTVBMRV9TSU1QTEVfU1NFMl9TVVBQT1JURUQKKyAgcHJpbnRmKCIlJWRlZmluZSBKRFNBTVBMRV9TSU1QTEVfU1NFMl9TVVBQT1JURURcdDsgc2xvcHB5IHVwc2FtcGxpbmcgd2l0aCBTU0UyXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKRFNBTVBMRV9TSU1QTEVfU1NFMl9TVVBQT1JURURcdDsgc2xvcHB5IHVwc2FtcGxpbmcgd2l0aCBTU0UyXG4iKTsKKyNlbmRpZgorI2lmZGVmIEpJRENUX0lOVF9NTVhfU1VQUE9SVEVECisgIHByaW50ZigiJSVkZWZpbmUgSklEQ1RfSU5UX01NWF9TVVBQT1JURURcdFx0OyBpbnZlcnNlIERDVCB3aXRoIE1NWFxuIik7CisjZWxzZQorICBwcmludGYoIiUldW5kZWYgSklEQ1RfSU5UX01NWF9TVVBQT1JURURcdFx0OyBpbnZlcnNlIERDVCB3aXRoIE1NWFxuIik7CisjZW5kaWYKKyNpZmRlZiBKSURDVF9JTlRfU1NFMl9TVVBQT1JURUQKKyAgcHJpbnRmKCIlJWRlZmluZSBKSURDVF9JTlRfU1NFMl9TVVBQT1JURURcdDsgaW52ZXJzZSBEQ1Qgd2l0aCBTU0UyXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKSURDVF9JTlRfU1NFMl9TVVBQT1JURURcdFx0OyBpbnZlcnNlIERDVCB3aXRoIFNTRTJcbiIpOworI2VuZGlmCisjaWZkZWYgSklEQ1RfRkxUXzNETk9XX01NWF9TVVBQT1JURUQKKyAgcHJpbnRmKCIlJWRlZmluZSBKSURDVF9GTFRfM0ROT1dfTU1YX1NVUFBPUlRFRFx0OyBpbnZlcnNlIERDVCB3aXRoIDNETm93IS9NTVhcbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIlJXVuZGVmIEpJRENUX0ZMVF8zRE5PV19NTVhfU1VQUE9SVEVEXHQ7IGludmVyc2UgRENUIHdpdGggM0ROb3chL01NWFxuIik7CisjZW5kaWYKKyNpZmRlZiBKSURDVF9GTFRfU1NFX01NWF9TVVBQT1JURUQKKyAgcHJpbnRmKCIlJWRlZmluZSBKSURDVF9GTFRfU1NFX01NWF9TVVBQT1JURURcdDsgaW52ZXJzZSBEQ1Qgd2l0aCBTU0UvTU1YXG4iKTsKKyNlbHNlCisgIHByaW50ZigiJSV1bmRlZiBKSURDVF9GTFRfU1NFX01NWF9TVVBQT1JURURcdDsgaW52ZXJzZSBEQ1Qgd2l0aCBTU0UvTU1YXG4iKTsKKyNlbmRpZgorI2lmZGVmIEpJRENUX0ZMVF9TU0VfU1NFMl9TVVBQT1JURUQKKyAgcHJpbnRmKCIlJWRlZmluZSBKSURDVF9GTFRfU1NFX1NTRTJfU1VQUE9SVEVEXHQ7IGludmVyc2UgRENUIHdpdGggU1NFL1NTRTJcbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIlJXVuZGVmIEpJRENUX0ZMVF9TU0VfU1NFMl9TVVBQT1JURURcdDsgaW52ZXJzZSBEQ1Qgd2l0aCBTU0UvU1NFMlxuIik7CisjZW5kaWYKKyAgcHJpbnRmKCJcbiIpOworfQorCisKK3ZvaWQKK3ByaW50X2pwZWdsaWJfaF9tYWNybyAodm9pZCkKK3sKKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIjsgLS0tLSBtYWNyb3MgZnJvbSBqcGVnbGliLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgIHByaW50ZigiXG4iKTsKKworICBwcmludGYoIjsgVmVyc2lvbiBJRCBmb3IgdGhlIEpQRUcgbGlicmFyeS5cbiIpOworICBwcmludGYoIjsgTWlnaHQgYmUgdXNlZnVsIGZvciB0ZXN0cyBsaWtlIFwiI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNjBcIi5cbiIpOworICBwcmludGYoIlxuIik7CisgIHByaW50ZigiJSVkZWZpbmUgSlBFR19MSUJfVkVSU0lPTiAgJWRcbiIsIEpQRUdfTElCX1ZFUlNJT04pOworICBwcmludGYoIlxuIik7CisgIHByaW50ZigiOyBTSU1EIEV4dDogVmVyc2lvbiBJRCBmb3IgdGhlIFNJTUQgZXh0ZW5zaW9uLlxuIik7CisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCIlJWRlZmluZSBKUEVHX1NJTURFWFRfVkVSU0lPTiAgJWRcbiIsIEpQRUdfU0lNREVYVF9WRVJTSU9OKTsKKyAgcHJpbnRmKCIlJWRlZmluZSBKUEVHX1NJTURFWFRfVkVSX1NUUiAgXCIlc1wiXG4iLCBKUEVHX1NJTURFWFRfVkVSX1NUUik7CisgIHByaW50ZigiXG4iKTsKK30KKworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHByaW50ZigiO1xuOyBqc2ltZGNmZy5pbmMgLS0tIGdlbmVyYXRlZCBieSBtYWtlY2ZnLmMiKTsKKyNpZmRlZiBfX0RBVEVfXworI2lmZGVmIF9fVElNRV9fCisgIHByaW50ZigiICglcywgJXMpIiwgX19EQVRFX18sIF9fVElNRV9fKTsKKyNlbmRpZgorI2VuZGlmCisgIHByaW50ZigiXG47XG5cbiIpOworICBwcmludGYoIiUlZGVmaW5lIEpTSU1EQ0ZHX0lOQ0xVREVEXHQ7IHNvIHRoYXQganNpbWRjZmcuaW5jIGRvZXNuJ3QgZG8gaXQgYWdhaW5cblxuIik7CisKKyAgcHJpbnRfc3RydWN0dXJlX29mZnNldCgpOworICBwcmludF9qY29uZmlnX2hfbWFjcm8oKTsKKyAgcHJpbnRfam1vcmVjZmdfaF9tYWNybygpOworICBwcmludF9qcGVnbGliX2hfbWFjcm8oKTsKKworICBleGl0KDApOworICByZXR1cm4gMDsJCQkvKiBzdXBwcmVzcyBuby1yZXR1cm4tdmFsdWUgd2FybmluZ3MgKi8KK30KZGlmZiAtLWdpdCBhL21ha2VmaWxlLmFuc2kgYi9tYWtlZmlsZS5hbnNpCmluZGV4IDgyOTE5MTMuLmZiODMwZmMgMTAwNjQ0Ci0tLSBhL21ha2VmaWxlLmFuc2kKKysrIGIvbWFrZWZpbGUuYW5zaQpAQCAtMSw0ICsxLDUgQEAKICMgTWFrZWZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQorIyBNb2RpZmllZCBmb3IgeDg2IFNJTUQgZXh0ZW5zaW9uCiAKICMgVGhpcyBtYWtlZmlsZSBpcyBzdWl0YWJsZSBmb3IgVW5peC1saWtlIHN5c3RlbXMgd2l0aCBBTlNJLWNhcGFibGUgY29tcGlsZXJzLgogIyBJZiB5b3UgaGF2ZSBhIG5vbi1BTlNJIGNvbXBpbGVyLCBtYWtlZmlsZS51bml4IGlzIGEgYmV0dGVyIHN0YXJ0aW5nIHBvaW50LgpAQCAtMTMsNiArMTQsMTMgQEAKICMgR2VuZXJhbGx5LCB3ZSByZWNvbW1lbmQgZGVmaW5pbmcgYW55IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBpbiBqY29uZmlnLmgsCiAjIE5PVCB2aWEgLUQgc3dpdGNoZXMgaGVyZS4KIAorIyBUaGUgZXhlY3V0YWJsZSBuYW1lIG9mIE5BU00gYW5kIGl0cyBvcHRpb25zOgorTkFTTT0gbmFzbQorTkFGTEFHUz0gJChOQVNNX09CSkZNVCkgLUkuLworIyBvYmplY3QgZmlsZSBmb3JtYXQgc3BlY2lmaWVyIGZvciBOQVNNCisjIHNlZSBqc2ltZGV4dC5pbmMgZm9yIG1vcmUgZGV0YWlscy4KK05BU01fT0JKRk1UPSAtZmVsZiAtREVMRgorCiAjIExpbmstdGltZSBjYyBvcHRpb25zOgogTERGTEFHUz0gCiAKQEAgLTI0LDYgKzMyLDEwIEBACiAjIHRvIHVzZSBqbWVtYW5zaS5vIG9yIGptZW1uYW1lLm8gaWYgeW91IGhhdmUgbGltaXRlZCBzd2FwIHNwYWNlLgogU1lTREVQTUVNPSBqbWVtbm9icy5vCiAKKyMgT1MtZGVwZW5kZW50IFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjaGVja2VyCisjIGpzaW1kdzMyLm8gKFdpbjMyKSAvIGpzaW1kZGpnLm8gKERKR1BQIFYuMikgLyBqc2ltZGdjYy5vIChVbml4L2djYykKK1NZU0RFUFNJTURDSEs9IGpzaW1kZ2NjLm8KKwogIyBtaXNjZWxsYW5lb3VzIE9TLWRlcGVuZGVudCBzdHVmZgogIyBsaW5rZXIKIExOPSAkKENDKQpAQCAtNzUsMTcgKzg3LDIzIEBACiBESVNURklMRVM9ICQoRE9DUykgJChNS0ZJTEVTKSAkKENPTkZJR0ZJTEVTKSAkKFNPVVJDRVMpICQoSU5DTFVERVMpIFwKICAgICAgICAgJChDT05GSUdVUkVGSUxFUykgJChPVEhFUkZJTEVTKSAkKFRFU1RGSUxFUykKICMgbGlicmFyeSBvYmplY3QgZmlsZXMgY29tbW9uIHRvIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCi1DT01PQkpFQ1RTPSBqY29tYXBpLm8ganV0aWxzLm8gamVycm9yLm8gam1lbW1nci5vICQoU1lTREVQTUVNKQorQ09NT0JKRUNUUz0gamNvbWFwaS5vIGp1dGlscy5vIGplcnJvci5vIGptZW1tZ3IubyAkKFNZU0RFUE1FTSkganNpbWRjcHUubyBcCisgICAgICAgICQoU1lTREVQU0lNRENISykKICMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKIENMSUJPQkpFQ1RTPSBqY2FwaW1pbi5vIGpjYXBpc3RkLm8gamN0cmFucy5vIGpjcGFyYW0ubyBqZGF0YWRzdC5vIGpjaW5pdC5vIFwKICAgICAgICAgamNtYXN0ZXIubyBqY21hcmtlci5vIGpjbWFpbmN0Lm8gamNwcmVwY3QubyBqY2NvZWZjdC5vIGpjY29sb3IubyBcCi0gICAgICAgIGpjc2FtcGxlLm8gamNodWZmLm8gamNwaHVmZi5vIGpjZGN0bWdyLm8gamZkY3Rmc3QubyBqZmRjdGZsdC5vIFwKLSAgICAgICAgamZkY3RpbnQubworICAgICAgICBqY3NhbXBsZS5vIGpjaHVmZi5vIGpjcGh1ZmYubyBqY2RjdG1nci5vIGpjY29sbW14Lm8gamNjb2xzczIubyBcCisgICAgICAgIGpjc2FtbW14Lm8gamNzYW1zczIubyBqY3FudGludC5vIGpjcW50Zmx0Lm8gamNxbnRtbXgubyBqY3FudDNkbi5vIFwKKyAgICAgICAgamNxbnRzMmkubyBqY3FudHNzZS5vIGpjcW50czJmLm8gamZkY3RpbnQubyBqZmRjdGZzdC5vIGpmZGN0Zmx0Lm8gXAorICAgICAgICBqZm1teGludC5vIGpmbW14ZnN0Lm8gamYzZG5mbHQubyBqZnNzMmludC5vIGpmc3MyZnN0Lm8gamZzc2VmbHQubwogIyBkZWNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCiBETElCT0JKRUNUUz0gamRhcGltaW4ubyBqZGFwaXN0ZC5vIGpkdHJhbnMubyBqZGF0YXNyYy5vIGpkbWFzdGVyLm8gXAogICAgICAgICBqZGlucHV0Lm8gamRtYXJrZXIubyBqZGh1ZmYubyBqZHBodWZmLm8gamRtYWluY3QubyBqZGNvZWZjdC5vIFwKLSAgICAgICAgamRwb3N0Y3QubyBqZGRjdG1nci5vIGppZGN0ZnN0Lm8gamlkY3RmbHQubyBqaWRjdGludC5vIGppZGN0cmVkLm8gXAotICAgICAgICBqZHNhbXBsZS5vIGpkY29sb3IubyBqcXVhbnQxLm8ganF1YW50Mi5vIGpkbWVyZ2UubworICAgICAgICBqZHBvc3RjdC5vIGpkZGN0bWdyLm8gamRzYW1wbGUubyBqZGNvbG9yLm8ganF1YW50MS5vIGpxdWFudDIubyBcCisgICAgICAgIGpkbWVyZ2UubyBqaWRjdGludC5vIGppZGN0ZnN0Lm8gamlkY3RyZWQubyBqaWRjdGZsdC5vIGppbW14aW50Lm8gXAorICAgICAgICBqaW1teGZzdC5vIGppbW14cmVkLm8gamkzZG5mbHQubyBqaXNzMmludC5vIGppc3MyZnN0Lm8gamlzczJyZWQubyBcCisgICAgICAgIGppc3NlZmx0Lm8gamlzczJmbHQubyBqZHNhbW1teC5vIGpkc2Ftc3MyLm8gamRjb2xtbXgubyBqZGNvbHNzMi5vIFwKKyAgICAgICAgamRtZXJtbXgubyBqZG1lcnNzMi5vCiAjIFRoZXNlIG9iamVjdGZpbGVzIGFyZSBpbmNsdWRlZCBpbiBsaWJqcGVnLmEKIExJQk9CSkVDVFM9ICQoQ0xJQk9CSkVDVFMpICQoRExJQk9CSkVDVFMpICQoQ09NT0JKRUNUUykKICMgb2JqZWN0IGZpbGVzIGZvciBzYW1wbGUgYXBwbGljYXRpb25zIChleGNsdWRpbmcgbGlicmFyeSBmaWxlcykKQEAgLTEyNSw3ICsxNDMsNyBAQAogCiBjbGVhbjoKIAkkKFJNKSAqLm8gY2pwZWcgZGpwZWcganBlZ3RyYW4gbGlianBlZy5hIHJkanBnY29tIHdyanBnY29tCi0JJChSTSkgY29yZSB0ZXN0b3V0KgorCSQoUk0pIGpzaW1kY2ZnLmluYyBjb3JlIHRlc3RvdXQqCiAKIHRlc3Q6IGNqcGVnIGRqcGVnIGpwZWd0cmFuCiAJJChSTSkgdGVzdG91dCoKQEAgLTE0MywxMCArMTYxLDYzIEBACiAJY21wIHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKIAogCitqc2ltZGNmZy5pbmM6IG1ha2VjZmcuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyBtYWtlY2ZnIC4vbWFrZWNmZy5jICQoTERMSUJTKQorCS4vbWFrZWNmZyA+IGpzaW1kY2ZnLmluYworCSQoUk0pIC4vbWFrZWNmZworCisuYXNtLm86CisJJChOQVNNKSAkKE5BRkxBR1MpIC1vICRAICQqLmFzbQorCitqc2ltZGNwdS5vOiBqc2ltZGNwdS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYworanNpbWR3MzIubzoganNpbWR3MzIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pzaW1kZGpnLm86IGpzaW1kZGpnLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jCitqY2NvbG1teC5vOiBqY2NvbG1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjY29sc3MyLm86IGpjY29sc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNzYW1tbXgubzogamNzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY3NhbXNzMi5vOiBqY3NhbXNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkY29sbW14Lm86IGpkY29sbW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRjb2xzczIubzogamRjb2xzczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZG1lcm1teC5vOiBqZG1lcm1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkbWVyc3MyLm86IGpkbWVyc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRzYW1tbXgubzogamRzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZHNhbXNzMi5vOiBqZHNhbXNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjcW50aW50Lm86IGpjcW50aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudGZsdC5vOiBqY3FudGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRtbXgubzogamNxbnRtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50M2RuLm86IGpjcW50M2RuLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHMyaS5vOiBqY3FudHMyaS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRzc2UubzogamNxbnRzc2UuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50czJmLm86IGpjcW50czJmLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGludC5vOiBqZmRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZkY3Rmc3QubzogamZkY3Rmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmZGN0Zmx0Lm86IGpmZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGludC5vOiBqZm1teGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZtbXhmc3QubzogamZtbXhmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmM2RuZmx0Lm86IGpmM2RuZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmludC5vOiBqZnNzMmludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZzczJmc3QubzogamZzczJmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmc3NlZmx0Lm86IGpmc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGludC5vOiBqaWRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3Rmc3QubzogamlkY3Rmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppZGN0cmVkLm86IGppZGN0cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZsdC5vOiBqaWRjdGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamltbXhpbnQubzogamltbXhpbnQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppbW14ZnN0Lm86IGppbW14ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teHJlZC5vOiBqaW1teHJlZC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamkzZG5mbHQubzogamkzZG5mbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3MyaW50Lm86IGppc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZzdC5vOiBqaXNzMmZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJyZWQubzogamlzczJyZWQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3NlZmx0Lm86IGppc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZsdC5vOiBqaXNzMmZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworCitqc2ltZGdjYy5vOiBqc2ltZGdjYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCisKIGpjYXBpbWluLm86IGpjYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqY2FwaXN0ZC5vOiBqY2FwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamNjb2VmY3QubzogamNjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjY29sb3IubzogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNjb2xvci5vOiBqY2NvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpjZGN0bWdyLm86IGpjZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAogamNodWZmLm86IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY2h1ZmYuaAogamNpbml0Lm86IGpjaW5pdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaApAQCAtMTU3LDMzICsyMjgsMzMgQEAKIGpjcGFyYW0ubzogamNwYXJhbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamNwaHVmZi5vOiBqY3BodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjaHVmZi5oCiBqY3ByZXBjdC5vOiBqY3ByZXBjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNzYW1wbGUubzogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjc2FtcGxlLm86IGpjc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpjdHJhbnMubzogamN0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRhcGltaW4ubzogamRhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpkYXBpc3RkLm86IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqZGF0YWRzdC5vOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCiBqZGF0YXNyYy5vOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCiBqZGNvZWZjdC5vOiBqZGNvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRjb2xvci5vOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZGNvbG9yLm86IGpkY29sb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAogamRkY3RtZ3IubzogamRkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCiBqZGh1ZmYubzogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkaHVmZi5oCiBqZGlucHV0Lm86IGpkaW5wdXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpkbWFpbmN0Lm86IGpkbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqZG1hcmtlci5vOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRtYXN0ZXIubzogamRtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWVyZ2UubzogamRtZXJnZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtZXJnZS5vOiBqZG1lcmdlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpkcGh1ZmYubzogamRwaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGh1ZmYuaAogamRwb3N0Y3QubzogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkc2FtcGxlLm86IGpkc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZHNhbXBsZS5vOiBqZHNhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCiBqZHRyYW5zLm86IGpkdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGplcnJvci5vOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC5vOiBqZmRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0ZnN0Lm86IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3RpbnQubzogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC5vOiBqaWRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0ZnN0Lm86IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3RpbnQubzogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdHJlZC5vOiBqaWRjdHJlZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamZkY3RmbHQubzogamZkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGpmZGN0ZnN0Lm86IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqZmRjdGludC5vOiBqZmRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RmbHQubzogamlkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGppZGN0ZnN0Lm86IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdGludC5vOiBqaWRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RyZWQubzogamlkY3RyZWQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCiBqcXVhbnQxLm86IGpxdWFudDEuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpxdWFudDIubzoganF1YW50Mi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoganV0aWxzLm86IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaApkaWZmIC0tZ2l0IGEvbWFrZWZpbGUuYmM1IGIvbWFrZWZpbGUuYmM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZjdkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tYWtlZmlsZS5iYzUKQEAgLTAsMCArMSwzMjAgQEAKKyMgTWFrZWZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQorIyBNb2RpZmllZCBmb3IgeDg2IFNJTUQgZXh0ZW5zaW9uCisKKyMgVGhpcyBtYWtlZmlsZSBpcyBzdWl0YWJsZSBmb3IgQm9ybGFuZCBDKysgQ29tcGlsZXIgNS41ICh3aW4zMikKKworIyBSZWFkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYmVmb3JlIHNheWluZyAibWFrZSIgISEKKworIWlmbmRlZiBzcmNkaXIKK3NyY2RpciA9IC4KKyFlbmRpZgorLnBhdGguYyAgID0gJChzcmNkaXIpCisucGF0aC5oICAgPSAkKHNyY2RpcikKKy5wYXRoLmFzbSA9ICQoc3JjZGlyKQorLnBhdGguaW5jID0gJChzcmNkaXIpOy4KKy5wYXRoLmRvYyA9ICQoc3JjZGlyKQorCisjIFRoZSBuYW1lIG9mIHlvdXIgQyBjb21waWxlcjoKK0NDPSBiY2MzMgorCisjIFlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlc2UgY2Mgb3B0aW9uczoKK0NGTEFHUz0gLU8yIC1PUyAtT2MgLWQgLWZmIC13LXBhciAtdy1hdXMgLXctY2NjIC13LXJjaCAtcSAtSSQoc3JjZGlyKQorIyBHZW5lcmFsbHksIHdlIHJlY29tbWVuZCBkZWZpbmluZyBhbnkgY29uZmlndXJhdGlvbiBzeW1ib2xzIGluIGpjb25maWcuaCwKKyMgTk9UIHZpYSAtRCBzd2l0Y2hlcyBoZXJlLgorCisjIFRoZSBleGVjdXRhYmxlIG5hbWUgb2YgTkFTTSBhbmQgaXRzIG9wdGlvbnM6CitOQVNNPSBuYXNtdworTkFGTEFHUz0gJChOQVNNX09CSkZNVCkgLUkkKHNyY2RpcikvCisjIG9iamVjdCBmaWxlIGZvcm1hdCBzcGVjaWZpZXIgZm9yIE5BU00KKyMgc2VlIGpzaW1kZXh0LmluYyBmb3IgbW9yZSBkZXRhaWxzLgorTkFTTV9PQkpGTVQ9IC1mb2JqIC1ET0JKMzIKKworIyBMaW5rLXRpbWUgY2Mgb3B0aW9uczoKK0xERkxBR1M9IC10V0MgLXEKKworIyBUbyBsaW5rIGFueSBzcGVjaWFsIGxpYnJhcmllcywgYWRkIHRoZSBuZWNlc3NhcnkgLWwgY29tbWFuZHMgaGVyZS4KK0xETElCUz0gbm9laDMyLmxpYgorCisjIFB1dCBoZXJlIHRoZSBvYmplY3QgZmlsZSBuYW1lIGZvciB0aGUgY29ycmVjdCBzeXN0ZW0tZGVwZW5kZW50IG1lbW9yeQorIyBtYW5hZ2VyIGZpbGUuIEZvciBXaW4zMiwgd2UgcmVjb21tZW5kIGptZW1ub2JzLmMgKGZsYXQgbWVtb3J5ISkKKyMgU1lTREVQTUVNTElCIG11c3QgbGlzdCB0aGUgc2FtZSBmaWxlcyB3aXRoICIrIiBzaWducyBmb3IgdGhlIGxpYnJhcmlhbi4KK1NZU0RFUE1FTT0gam1lbW5vYnMub2JqCitTWVNERVBNRU1MSUI9ICtqbWVtbm9icy5vYmoKKworIyBPUy1kZXBlbmRlbnQgU0lNRCBpbnN0cnVjdGlvbiBzdXBwb3J0IGNoZWNrZXIKKyMganNpbWR3MzIub2JqIChXaW4zMikgLyBqc2ltZGRqZy5vYmogKERKR1BQIFYuMikgLyBqc2ltZGdjYy5vYmogKFVuaXgvZ2NjKQorU1lTREVQU0lNRENISz0ganNpbWR3MzIub2JqCitTWVNERVBTSU1EQ0hLTElCPSAranNpbWR3MzIub2JqCisKKyMgRW5kIG9mIGNvbmZpZ3VyYWJsZSBvcHRpb25zLgorCisKKyMgc291cmNlIGZpbGVzOiBKUEVHIGxpYnJhcnkgcHJvcGVyCitMSUJTT1VSQ0VTPSBqY2FwaW1pbi5jIGpjYXBpc3RkLmMgamNjb2VmY3QuYyBqY2NvbG9yLmMgamNkY3RtZ3IuYyBqY2h1ZmYuYyBcCisgICAgICAgIGpjaW5pdC5jIGpjbWFpbmN0LmMgamNtYXJrZXIuYyBqY21hc3Rlci5jIGpjb21hcGkuYyBqY3BhcmFtLmMgXAorICAgICAgICBqY3BodWZmLmMgamNwcmVwY3QuYyBqY3NhbXBsZS5jIGpjdHJhbnMuYyBqZGFwaW1pbi5jIGpkYXBpc3RkLmMgXAorICAgICAgICBqZGF0YWRzdC5jIGpkYXRhc3JjLmMgamRjb2VmY3QuYyBqZGNvbG9yLmMgamRkY3RtZ3IuYyBqZGh1ZmYuYyBcCisgICAgICAgIGpkaW5wdXQuYyBqZG1haW5jdC5jIGpkbWFya2VyLmMgamRtYXN0ZXIuYyBqZG1lcmdlLmMgamRwaHVmZi5jIFwKKyAgICAgICAgamRwb3N0Y3QuYyBqZHNhbXBsZS5jIGpkdHJhbnMuYyBqZXJyb3IuYyBqZmRjdGZsdC5jIGpmZGN0ZnN0LmMgXAorICAgICAgICBqZmRjdGludC5jIGppZGN0Zmx0LmMgamlkY3Rmc3QuYyBqaWRjdGludC5jIGppZGN0cmVkLmMganF1YW50MS5jIFwKKyAgICAgICAganF1YW50Mi5jIGp1dGlscy5jIGptZW1tZ3IuYworIyBtZW1tZ3IgYmFjayBlbmRzOiBjb21waWxlIG9ubHkgb25lIG9mIHRoZXNlIGludG8gYSB3b3JraW5nIGxpYnJhcnkKK1NZU0RFUFNPVVJDRVM9IGptZW1hbnNpLmMgam1lbW5hbWUuYyBqbWVtbm9icy5jIGptZW1kb3MuYyBqbWVtbWFjLmMKKyMgc291cmNlIGZpbGVzOiBjanBlZy9kanBlZy9qcGVndHJhbiBhcHBsaWNhdGlvbnMsIGFsc28gcmRqcGdjb20vd3JqcGdjb20KK0FQUFNPVVJDRVM9IGNqcGVnLmMgZGpwZWcuYyBqcGVndHJhbi5jIHJkanBnY29tLmMgd3JqcGdjb20uYyBjZGpwZWcuYyBcCisgICAgICAgIHJkY29sbWFwLmMgcmRzd2l0Y2guYyB0cmFuc3VwcC5jIHJkcHBtLmMgd3JwcG0uYyByZGdpZi5jIHdyZ2lmLmMgXAorICAgICAgICByZHRhcmdhLmMgd3J0YXJnYS5jIHJkYm1wLmMgd3JibXAuYyByZHJsZS5jIHdycmxlLmMKK1NPVVJDRVM9ICQoTElCU09VUkNFUykgJChTWVNERVBTT1VSQ0VTKSAkKEFQUFNPVVJDRVMpCisjIGZpbGVzIGluY2x1ZGVkIGJ5IHNvdXJjZSBmaWxlcworSU5DTFVERVM9IGpjaHVmZi5oIGpkaHVmZi5oIGpkY3QuaCBqZXJyb3IuaCBqaW5jbHVkZS5oIGptZW1zeXMuaCBqbW9yZWNmZy5oIFwKKyAgICAgICAganBlZ2ludC5oIGpwZWdsaWIuaCBqdmVyc2lvbi5oIGNkanBlZy5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oCisjIGRvY3VtZW50YXRpb24sIHRlc3QsIGFuZCBzdXBwb3J0IGZpbGVzCitET0NTPSBSRUFETUUgaW5zdGFsbC5kb2MgdXNhZ2UuZG9jIGNqcGVnLjEgZGpwZWcuMSBqcGVndHJhbi4xIHJkanBnY29tLjEgXAorICAgICAgICB3cmpwZ2NvbS4xIHdpemFyZC5kb2MgZXhhbXBsZS5jIGxpYmpwZWcuZG9jIHN0cnVjdHVyZS5kb2MgXAorICAgICAgICBjb2RlcnVsZXMuZG9jIGZpbGVsaXN0LmRvYyBjaGFuZ2UubG9nCitNS0ZJTEVTPSBjb25maWd1cmUgbWFrZWZpbGUuY2ZnIG1ha2VmaWxlLmFuc2kgbWFrZWZpbGUudW5peCBtYWtlZmlsZS5iY2MgXAorICAgICAgICBtYWtlZmlsZS5tYzYgbWFrZWZpbGUuZGogbWFrZWZpbGUud2F0IG1ha2VmaWxlLnZjIG1ha2VsaWIuZHMgXAorICAgICAgICBtYWtlYXBwcy5kcyBtYWtlcHJvai5tYWMgbWFrY2pwZWcuc3QgbWFrZGpwZWcuc3QgbWFrbGpwZWcuc3QgXAorICAgICAgICBtYWt0anBlZy5zdCBtYWtlZmlsZS5tYW54IG1ha2VmaWxlLnNhcyBtYWtlZmlsZS5tbXMgbWFrZWZpbGUudm1zIFwKKyAgICAgICAgbWFrdm1zLm9wdAorQ09ORklHRklMRVM9IGpjb25maWcuY2ZnIGpjb25maWcuYmNjIGpjb25maWcubWM2IGpjb25maWcuZGogamNvbmZpZy53YXQgXAorICAgICAgICBqY29uZmlnLnZjIGpjb25maWcubWFjIGpjb25maWcuc3QgamNvbmZpZy5tYW54IGpjb25maWcuc2FzIFwKKyAgICAgICAgamNvbmZpZy52bXMKK0NPTkZJR1VSRUZJTEVTPSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBpbnN0YWxsLXNoIGx0Y29uZmlnIGx0bWFpbi5zaAorT1RIRVJGSUxFUz0gamNvbmZpZy5kb2MgY2tjb25maWcuYyBhbnNpMmtuci5jIGFuc2kya25yLjEgam1lbWRvc2EuYXNtCitURVNURklMRVM9IHRlc3RvcmlnLmpwZyB0ZXN0aW1nLnBwbSB0ZXN0aW1nLmJtcCB0ZXN0aW1nLmpwZyB0ZXN0cHJvZy5qcGcgXAorICAgICAgICB0ZXN0aW1ncC5qcGcKK0RJU1RGSUxFUz0gJChET0NTKSAkKE1LRklMRVMpICQoQ09ORklHRklMRVMpICQoU09VUkNFUykgJChJTkNMVURFUykgXAorICAgICAgICAkKENPTkZJR1VSRUZJTEVTKSAkKE9USEVSRklMRVMpICQoVEVTVEZJTEVTKQorIyBsaWJyYXJ5IG9iamVjdCBmaWxlcyBjb21tb24gdG8gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KK0NPTU9CSkVDVFM9IGpjb21hcGkub2JqIGp1dGlscy5vYmogamVycm9yLm9iaiBqbWVtbWdyLm9iaiAkKFNZU0RFUE1FTSkgXAorICAgICAgICBqc2ltZGNwdS5vYmogJChTWVNERVBTSU1EQ0hLKQorIyBjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcworQ0xJQk9CSkVDVFM9IGpjYXBpbWluLm9iaiBqY2FwaXN0ZC5vYmogamN0cmFucy5vYmogamNwYXJhbS5vYmogamRhdGFkc3Qub2JqIFwKKyAgICAgICAgamNpbml0Lm9iaiBqY21hc3Rlci5vYmogamNtYXJrZXIub2JqIGpjbWFpbmN0Lm9iaiBqY3ByZXBjdC5vYmogXAorICAgICAgICBqY2NvZWZjdC5vYmogamNjb2xvci5vYmogamNzYW1wbGUub2JqIGpjaHVmZi5vYmogamNwaHVmZi5vYmogXAorICAgICAgICBqY2RjdG1nci5vYmogamNjb2xtbXgub2JqIGpjY29sc3MyLm9iaiBqY3NhbW1teC5vYmogamNzYW1zczIub2JqIFwKKyAgICAgICAgamNxbnRpbnQub2JqIGpjcW50Zmx0Lm9iaiBqY3FudG1teC5vYmogamNxbnQzZG4ub2JqIGpjcW50czJpLm9iaiBcCisgICAgICAgIGpjcW50c3NlLm9iaiBqY3FudHMyZi5vYmogamZkY3RpbnQub2JqIGpmZGN0ZnN0Lm9iaiBqZmRjdGZsdC5vYmogXAorICAgICAgICBqZm1teGludC5vYmogamZtbXhmc3Qub2JqIGpmM2RuZmx0Lm9iaiBqZnNzMmludC5vYmogamZzczJmc3Qub2JqIFwKKyAgICAgICAgamZzc2VmbHQub2JqCisjIGRlY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKK0RMSUJPQkpFQ1RTPSBqZGFwaW1pbi5vYmogamRhcGlzdGQub2JqIGpkdHJhbnMub2JqIGpkYXRhc3JjLm9iaiBcCisgICAgICAgIGpkbWFzdGVyLm9iaiBqZGlucHV0Lm9iaiBqZG1hcmtlci5vYmogamRodWZmLm9iaiBqZHBodWZmLm9iaiBcCisgICAgICAgIGpkbWFpbmN0Lm9iaiBqZGNvZWZjdC5vYmogamRwb3N0Y3Qub2JqIGpkZGN0bWdyLm9iaiBqZHNhbXBsZS5vYmogXAorICAgICAgICBqZGNvbG9yLm9iaiBqcXVhbnQxLm9iaiBqcXVhbnQyLm9iaiBqZG1lcmdlLm9iaiBqaWRjdGludC5vYmogXAorICAgICAgICBqaWRjdGZzdC5vYmogamlkY3RyZWQub2JqIGppZGN0Zmx0Lm9iaiBqaW1teGludC5vYmogamltbXhmc3Qub2JqIFwKKyAgICAgICAgamltbXhyZWQub2JqIGppM2RuZmx0Lm9iaiBqaXNzMmludC5vYmogamlzczJmc3Qub2JqIGppc3MycmVkLm9iaiBcCisgICAgICAgIGppc3NlZmx0Lm9iaiBqaXNzMmZsdC5vYmogamRzYW1tbXgub2JqIGpkc2Ftc3MyLm9iaiBqZGNvbG1teC5vYmogXAorICAgICAgICBqZGNvbHNzMi5vYmogamRtZXJtbXgub2JqIGpkbWVyc3MyLm9iagorIyBUaGVzZSBvYmplY3RmaWxlcyBhcmUgaW5jbHVkZWQgaW4gbGlianBlZy5saWIKK0xJQk9CSkVDVFM9ICQoQ0xJQk9CSkVDVFMpICQoRExJQk9CSkVDVFMpICQoQ09NT0JKRUNUUykKKyMgb2JqZWN0IGZpbGVzIGZvciBzYW1wbGUgYXBwbGljYXRpb25zIChleGNsdWRpbmcgbGlicmFyeSBmaWxlcykKK0NPQkpFQ1RTPSBjanBlZy5vYmogcmRwcG0ub2JqIHJkZ2lmLm9iaiByZHRhcmdhLm9iaiByZHJsZS5vYmogcmRibXAub2JqIFwKKyAgICAgICAgcmRzd2l0Y2gub2JqIGNkanBlZy5vYmoKK0RPQkpFQ1RTPSBkanBlZy5vYmogd3JwcG0ub2JqIHdyZ2lmLm9iaiB3cnRhcmdhLm9iaiB3cnJsZS5vYmogd3JibXAub2JqIFwKKyAgICAgICAgcmRjb2xtYXAub2JqIGNkanBlZy5vYmoKK1RST0JKRUNUUz0ganBlZ3RyYW4ub2JqIHJkc3dpdGNoLm9iaiBjZGpwZWcub2JqIHRyYW5zdXBwLm9iagorCisKK2FsbDogbGlianBlZy5saWIgY2pwZWcuZXhlIGRqcGVnLmV4ZSBqcGVndHJhbi5leGUgcmRqcGdjb20uZXhlIHdyanBnY29tLmV4ZQorCitsaWJqcGVnLmxpYjogJChMSUJPQkpFQ1RTKQorCS0gZGVsIGxpYmpwZWcubGliCisJdGxpYiBsaWJqcGVnLmxpYiAvRSAvQyBAJiZ8CisramNhcGltaW4ub2JqICtqY2FwaXN0ZC5vYmogK2pjdHJhbnMub2JqICtqY3BhcmFtLm9iaiAramRhdGFkc3Qub2JqICYKKytqY2luaXQub2JqICtqY21hc3Rlci5vYmogK2pjbWFya2VyLm9iaiAramNtYWluY3Qub2JqICtqY3ByZXBjdC5vYmogJgorK2pjY29lZmN0Lm9iaiAramNjb2xvci5vYmogK2pjc2FtcGxlLm9iaiAramNodWZmLm9iaiAramNwaHVmZi5vYmogJgorK2pjZGN0bWdyLm9iaiAramNjb2xtbXgub2JqICtqY2NvbHNzMi5vYmogK2pjc2FtbW14Lm9iaiAramNzYW1zczIub2JqICYKKytqY3FudGludC5vYmogK2pjcW50Zmx0Lm9iaiAramNxbnRtbXgub2JqICtqY3FudDNkbi5vYmogK2pjcW50czJpLm9iaiAmCisramNxbnRzc2Uub2JqICtqY3FudHMyZi5vYmogK2pmZGN0aW50Lm9iaiAramZkY3Rmc3Qub2JqICtqZmRjdGZsdC5vYmogJgorK2pmbW14aW50Lm9iaiAramZtbXhmc3Qub2JqICtqZjNkbmZsdC5vYmogK2pmc3MyaW50Lm9iaiAramZzczJmc3Qub2JqICYKKytqZnNzZWZsdC5vYmogK2pkYXBpbWluLm9iaiAramRhcGlzdGQub2JqICtqZHRyYW5zLm9iaiAramRhdGFzcmMub2JqICYKKytqZG1hc3Rlci5vYmogK2pkaW5wdXQub2JqICtqZG1hcmtlci5vYmogK2pkaHVmZi5vYmogK2pkcGh1ZmYub2JqICYKKytqZG1haW5jdC5vYmogK2pkY29lZmN0Lm9iaiAramRwb3N0Y3Qub2JqICtqZGRjdG1nci5vYmogK2pkc2FtcGxlLm9iaiAmCisramRjb2xvci5vYmogK2pxdWFudDEub2JqICtqcXVhbnQyLm9iaiAramRtZXJnZS5vYmogK2ppZGN0aW50Lm9iaiAmCisramlkY3Rmc3Qub2JqICtqaWRjdHJlZC5vYmogK2ppZGN0Zmx0Lm9iaiAramltbXhpbnQub2JqICtqaW1teGZzdC5vYmogJgorK2ppbW14cmVkLm9iaiAramkzZG5mbHQub2JqICtqaXNzMmludC5vYmogK2ppc3MyZnN0Lm9iaiAramlzczJyZWQub2JqICYKKytqaXNzZWZsdC5vYmogK2ppc3MyZmx0Lm9iaiAramRzYW1tbXgub2JqICtqZHNhbXNzMi5vYmogK2pkY29sbW14Lm9iaiAmCisramRjb2xzczIub2JqICtqZG1lcm1teC5vYmogK2pkbWVyc3MyLm9iaiAramNvbWFwaS5vYmogK2p1dGlscy5vYmogJgorK2plcnJvci5vYmogK2ptZW1tZ3Iub2JqICQoU1lTREVQTUVNTElCKSAranNpbWRjcHUub2JqICQoU1lTREVQU0lNRENIS0xJQikKK3wKKworY2pwZWcuZXhlOiAkKENPQkpFQ1RTKSBsaWJqcGVnLmxpYgorCSQoQ0MpICQoTERGTEFHUykgLWVjanBlZy5leGUgJChDT0JKRUNUUykgbGlianBlZy5saWIgJChMRExJQlMpCisKK2RqcGVnLmV4ZTogJChET0JKRUNUUykgbGlianBlZy5saWIKKwkkKENDKSAkKExERkxBR1MpIC1lZGpwZWcuZXhlICQoRE9CSkVDVFMpIGxpYmpwZWcubGliICQoTERMSUJTKQorCitqcGVndHJhbi5leGU6ICQoVFJPQkpFQ1RTKSBsaWJqcGVnLmxpYgorCSQoQ0MpICQoTERGTEFHUykgLWVqcGVndHJhbi5leGUgJChUUk9CSkVDVFMpIGxpYmpwZWcubGliICQoTERMSUJTKQorCityZGpwZ2NvbS5leGU6IHJkanBnY29tLm9iagorCSQoQ0MpICQoTERGTEFHUykgLWVyZGpwZ2NvbS5leGUgcmRqcGdjb20ub2JqICQoTERMSUJTKQorCit3cmpwZ2NvbS5leGU6IHdyanBnY29tLm9iagorCSQoQ0MpICQoTERGTEFHUykgLWV3cmpwZ2NvbS5leGUgd3JqcGdjb20ub2JqICQoTERMSUJTKQorCisjIFRoaXMgInt9IiBzeW50YXggYWxsb3dzIEJvcmxhbmQgTWFrZSB0byAiYmF0Y2giIHNvdXJjZSBmaWxlcy4KKyMgSW4gdGhpcyB3YXksIGVhY2ggcnVuIG9mIHRoZSBjb21waWxlciBjYW4gYnVpbGQgbWFueSBtb2R1bGVzLgorLmMub2JqOgorCSQoQ0MpICQoQ0ZMQUdTKSAtY3sgJDx9CisKK2pjb25maWcuaDogamNvbmZpZy5kb2MKKwllY2hvIFlvdSBtdXN0IHByZXBhcmUgYSBzeXN0ZW0tZGVwZW5kZW50IGpjb25maWcuaCBmaWxlLgorCWVjaG8gUGxlYXNlIHJlYWQgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rpb25zIGluIGluc3RhbGwuZG9jLgorCWV4aXQgMQorCitjbGVhbjoKKwktIGRlbCAqLm9iagorCS0gZGVsICoudGRzCisJLSBkZWwgY2pwZWcuZXhlCisJLSBkZWwgZGpwZWcuZXhlCisJLSBkZWwganBlZ3RyYW4uZXhlCisJLSBkZWwgcmRqcGdjb20uZXhlCisJLSBkZWwgd3JqcGdjb20uZXhlCisJLSBkZWwganNpbWRjZmcuaW5jCisJLSBkZWwgbGlianBlZy5saWIKKwktIGRlbCB0ZXN0b3V0Ki4qCisKK3Rlc3Q6IGNqcGVnLmV4ZSBkanBlZy5leGUganBlZ3RyYW4uZXhlCisJLSBkZWwgdGVzdG91dCouKgorCWRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dC5wcG0gJChzcmNkaXIpXHRlc3RvcmlnLmpwZworCWRqcGVnIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgdGVzdG91dC5ibXAgJChzcmNkaXIpXHRlc3RvcmlnLmpwZworCWNqcGVnIC1kY3QgaW50IC1vdXRmaWxlIHRlc3RvdXQuanBnICQoc3JjZGlyKVx0ZXN0aW1nLnBwbQorCWRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dHAucHBtICQoc3JjZGlyKVx0ZXN0cHJvZy5qcGcKKwljanBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW9wdCAtb3V0ZmlsZSB0ZXN0b3V0cC5qcGcgJChzcmNkaXIpXHRlc3RpbWcucHBtCisJanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dHQuanBnICQoc3JjZGlyKVx0ZXN0cHJvZy5qcGcKKwlmYyAvYiAkKHNyY2RpcilcdGVzdGltZy5wcG0gdGVzdG91dC5wcG0KKwlmYyAvYiAkKHNyY2RpcilcdGVzdGltZy5ibXAgdGVzdG91dC5ibXAKKwlmYyAvYiAkKHNyY2RpcilcdGVzdGltZy5qcGcgdGVzdG91dC5qcGcKKwlmYyAvYiAkKHNyY2RpcilcdGVzdGltZy5wcG0gdGVzdG91dHAucHBtCisJZmMgL2IgJChzcmNkaXIpXHRlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKKwlmYyAvYiAkKHNyY2RpcilcdGVzdG9yaWcuanBnIHRlc3RvdXR0LmpwZworCisKK2pzaW1kY2ZnLmluYzogbWFrZWNmZy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAorCSQoQ0MpICQoQ0ZMQUdTKSAkKHNyY2RpcilcbWFrZWNmZy5jCisJJChDQykgJChMREZMQUdTKSAtZW1ha2VjZmcuZXhlIG1ha2VjZmcub2JqICQoTERMSUJTKQorCS5cbWFrZWNmZy5leGUgPiBqc2ltZGNmZy5pbmMKKwktIGRlbCBtYWtlY2ZnLnRkcworCS0gZGVsIG1ha2VjZmcub2JqCisJLSBkZWwgbWFrZWNmZy5leGUKKworLmFzbS5vYmo6CisJJChOQVNNKSAkKE5BRkxBR1MpIC1vICRAICQ8CisKK2pzaW1kY3B1Lm9iajoganNpbWRjcHUuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pzaW1kdzMyLm9iajoganNpbWR3MzIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pzaW1kZGpnLm9iajoganNpbWRkamcuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pjY29sbW14Lm9iajogamNjb2xtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY2NvbHNzMi5vYmo6IGpjY29sc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNzYW1tbXgub2JqOiBqY3NhbW1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjc2Ftc3MyLm9iajogamNzYW1zczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZGNvbG1teC5vYmo6IGpkY29sbW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRjb2xzczIub2JqOiBqZGNvbHNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkbWVybW14Lm9iajogamRtZXJtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZG1lcnNzMi5vYmo6IGpkbWVyc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRzYW1tbXgub2JqOiBqZHNhbW1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkc2Ftc3MyLm9iajogamRzYW1zczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY3FudGludC5vYmo6IGpjcW50aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudGZsdC5vYmo6IGpjcW50Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudG1teC5vYmo6IGpjcW50bW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudDNkbi5vYmo6IGpjcW50M2RuLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHMyaS5vYmo6IGpjcW50czJpLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHNzZS5vYmo6IGpjcW50c3NlLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHMyZi5vYmo6IGpjcW50czJmLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGludC5vYmo6IGpmZGN0aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGZzdC5vYmo6IGpmZGN0ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGZsdC5vYmo6IGpmZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGludC5vYmo6IGpmbW14aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGZzdC5vYmo6IGpmbW14ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZjNkbmZsdC5vYmo6IGpmM2RuZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmludC5vYmo6IGpmc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmZzdC5vYmo6IGpmc3MyZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzZWZsdC5vYmo6IGpmc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGludC5vYmo6IGppZGN0aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZzdC5vYmo6IGppZGN0ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdHJlZC5vYmo6IGppZGN0cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZsdC5vYmo6IGppZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teGludC5vYmo6IGppbW14aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teGZzdC5vYmo6IGppbW14ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teHJlZC5vYmo6IGppbW14cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaTNkbmZsdC5vYmo6IGppM2RuZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmludC5vYmo6IGppc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZzdC5vYmo6IGppc3MyZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMnJlZC5vYmo6IGppc3MycmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzZWZsdC5vYmo6IGppc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZsdC5vYmo6IGppc3MyZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCisKK2pzaW1kZ2NjLm9iajoganNpbWRnY2MuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaAorCitqY2FwaW1pbi5vYmo6IGpjYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY2FwaXN0ZC5vYmo6IGpjYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY2NvZWZjdC5vYmo6IGpjY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY2NvbG9yLm9iajogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCitqY2RjdG1nci5vYmo6IGpjZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAoramNodWZmLm9iajogamNodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjaHVmZi5oCitqY2luaXQub2JqOiBqY2luaXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjbWFpbmN0Lm9iajogamNtYWluY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjbWFya2VyLm9iajogamNtYXJrZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjbWFzdGVyLm9iajogamNtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjb21hcGkub2JqOiBqY29tYXBpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY3BhcmFtLm9iajogamNwYXJhbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNwaHVmZi5vYmo6IGpjcGh1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNodWZmLmgKK2pjcHJlcGN0Lm9iajogamNwcmVwY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjc2FtcGxlLm9iajogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramN0cmFucy5vYmo6IGpjdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkYXBpbWluLm9iajogamRhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkYXBpc3RkLm9iajogamRhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkYXRhZHN0Lm9iajogamRhdGFkc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaAoramRhdGFzcmMub2JqOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCitqZGNvZWZjdC5vYmo6IGpkY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZGNvbG9yLm9iajogamRjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCitqZGRjdG1nci5vYmo6IGpkZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAoramRodWZmLm9iajogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkaHVmZi5oCitqZGlucHV0Lm9iajogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtYWluY3Qub2JqOiBqZG1haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtYXJrZXIub2JqOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtYXN0ZXIub2JqOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtZXJnZS5vYmo6IGpkbWVyZ2UuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramRwaHVmZi5vYmo6IGpkcGh1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRodWZmLmgKK2pkcG9zdGN0Lm9iajogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkc2FtcGxlLm9iajogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramR0cmFucy5vYmo6IGpkdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2plcnJvci5vYmo6IGplcnJvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGp2ZXJzaW9uLmggamVycm9yLmgKKyMgamZkY3RmbHQub2JqOiBqZmRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamZkY3Rmc3Qub2JqOiBqZmRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamZkY3RpbnQub2JqOiBqZmRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RmbHQub2JqOiBqaWRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3Rmc3Qub2JqOiBqaWRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RpbnQub2JqOiBqaWRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RyZWQub2JqOiBqaWRjdHJlZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKK2pxdWFudDEub2JqOiBqcXVhbnQxLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqcXVhbnQyLm9iajoganF1YW50Mi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoranV0aWxzLm9iajoganV0aWxzLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqbWVtbWdyLm9iajogam1lbW1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKK2ptZW1hbnNpLm9iajogam1lbWFuc2kuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitqbWVtbmFtZS5vYmo6IGptZW1uYW1lLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAoram1lbW5vYnMub2JqOiBqbWVtbm9icy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKK2ptZW1kb3Mub2JqOiBqbWVtZG9zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAoram1lbW1hYy5vYmo6IGptZW1tYWMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitjanBlZy5vYmo6IGNqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIGp2ZXJzaW9uLmgKK2RqcGVnLm9iajogZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgganZlcnNpb24uaAoranBlZ3RyYW4ub2JqOiBqcGVndHJhbi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oIGp2ZXJzaW9uLmgKK3JkanBnY29tLm9iajogcmRqcGdjb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaAord3JqcGdjb20ub2JqOiB3cmpwZ2NvbS5jIGppbmNsdWRlLmggamNvbmZpZy5oCitjZGpwZWcub2JqOiBjZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3JkY29sbWFwLm9iajogcmRjb2xtYXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3Jkc3dpdGNoLm9iajogcmRzd2l0Y2guYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3RyYW5zdXBwLm9iajogdHJhbnN1cHAuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggdHJhbnN1cHAuaAorcmRwcG0ub2JqOiByZHBwbS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAord3JwcG0ub2JqOiB3cnBwbS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAorcmRnaWYub2JqOiByZGdpZi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAord3JnaWYub2JqOiB3cmdpZi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAorcmR0YXJnYS5vYmo6IHJkdGFyZ2EuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3dydGFyZ2Eub2JqOiB3cnRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCityZGJtcC5vYmo6IHJkYm1wLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCit3cmJtcC5vYmo6IHdyYm1wLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCityZHJsZS5vYmo6IHJkcmxlLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCit3cnJsZS5vYmo6IHdycmxlLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCmRpZmYgLS1naXQgYS9tYWtlZmlsZS5jZmcgYi9tYWtlZmlsZS5jZmcKaW5kZXggZjI1ZTQyZS4uYzE4YjdlNiAxMDA2NDQKLS0tIGEvbWFrZWZpbGUuY2ZnCisrKyBiL21ha2VmaWxlLmNmZwpAQCAtMSw0ICsxLDUgQEAKICMgTWFrZWZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQorIyBNb2RpZmllZCBmb3IgeDg2IFNJTUQgZXh0ZW5zaW9uCiAKICMgbWFrZWZpbGUuY2ZnIGlzIGVkaXRlZCBieSBjb25maWd1cmUgdG8gcHJvZHVjZSBhIGN1c3RvbSBNYWtlZmlsZS4KIApAQCAtMTYsOCArMTcsOSBAQAogaW5jbHVkZWRpciA9ICQocHJlZml4KS9pbmNsdWRlCiBiaW5wcmVmaXggPQogbWFucHJlZml4ID0KLW1hbmV4dCA9IDEKLW1hbmRpciA9ICQocHJlZml4KS9tYW4vbWFuJChtYW5leHQpCittYW5leHQgPSAuMQorbWFuZGlyID0gJChwcmVmaXgpL21hbgorbWFuMWRpciA9ICQobWFuZGlyKS9tYW4xCiAKICMgVGhlIG5hbWUgb2YgeW91ciBDIGNvbXBpbGVyOgogQ0M9IEBDQ0AKQEAgLTI5LDYgKzMxLDEwIEBACiAjIEhvd2V2ZXIsIGFueSBzcGVjaWFsIGRlZmluZXMgZm9yIGFuc2kya25yLmMgbWF5IGJlIGluY2x1ZGVkIGhlcmU6CiBBTlNJMktOUkZMQUdTPSBAQU5TSTJLTlJGTEFHU0AKIAorIyBUaGUgZXhlY3V0YWJsZSBuYW1lIG9mIE5BU00gYW5kIGl0cyBvcHRpb25zOgorTkFTTT0gQE5BU01ACitOQUZMQUdTPSBATkFGTEFHU0AgQElOQ0xVREVGTEFHU0AKKwogIyBMaW5rLXRpbWUgY2Mgb3B0aW9uczoKIExERkxBR1M9IEBMREZMQUdTQAogCkBAIC0zNyw2ICs0Myw3IEBACiAKICMgSWYgdXNpbmcgR05VIGxpYnRvb2wsIExJQlRPT0wgcmVmZXJlbmNlcyBpdDsgaWYgbm90LCBMSUJUT09MIGlzIGVtcHR5LgogTElCVE9PTCA9IEBMSUJUT09MQAordG9wX2J1aWxkZGlyID0gLgogIyAkKE8pIGV4cGFuZHMgdG8gImxvIiBpZiB1c2luZyBsaWJ0b29sLCBwbGFpbiAibyIgaWYgbm90LgogIyBTaW1pbGFybHksICQoQSkgZXhwYW5kcyB0byAibGEiIG9yICJhIi4KIE8gPSBAT0AKQEAgLTUxLDggKzU4LDEyIEBACiAjIHRvIHVzZSBqbWVtYW5zaS5vIG9yIGptZW1uYW1lLm8gaWYgeW91IGhhdmUgbGltaXRlZCBzd2FwIHNwYWNlLgogU1lTREVQTUVNPSBATUVNT1JZTUdSQAogCisjIE9TLWRlcGVuZGVudCBTSU1EIGluc3RydWN0aW9uIHN1cHBvcnQgY2hlY2tlcgorIyBqc2ltZHczMi4kKE8pIChXaW4zMikgLyBqc2ltZGRqZy4kKE8pIChESkdQUCBWLjIpIC8ganNpbWRnY2MuJChPKSAoVW5peC9nY2MpCitTWVNERVBTSU1EQ0hLPSBAU0lNRENIRUNLRVJACisKICMgbWlzY2VsbGFuZW91cyBPUy1kZXBlbmRlbnQgc3R1ZmYKLVNIRUxMPSAvYmluL3NoCitTSEVMTD0gQFNIRUxMQAogIyBsaW5rZXIKIExOPSBATE5ACiAjIGZpbGUgZGVsZXRpb24gY29tbWFuZApAQCAtNjgsNiArNzksMTEgQEAKIElOU1RBTExfUFJPR1JBTT0gQElOU1RBTExfUFJPR1JBTUAKIElOU1RBTExfTElCPSBASU5TVEFMTF9MSUJACiBJTlNUQUxMX0RBVEE9IEBJTlNUQUxMX0RBVEFACisjIHVuaW5zdGFsbGF0aW9uIHByb2dyYW0KK1VOSU5TVEFMTD0gQFVOSU5TVEFMTEAKKyMgZXhlY3V0YWJsZSBzdWZmaXguIHVuZGVyIGN5Z3dpbiwKKyMgJ3JtJyBkb2Vzbid0IGtub3cgdGhhdCBleGVjdXRhYmxlcyBoYXZlIC5leGUgc3VmZml4LgorRVhFID0gQEVYRUVYVEAKIAogIyBFbmQgb2YgY29uZmlndXJhYmxlIG9wdGlvbnMuCiAKQEAgLTExMCwxOSArMTI2LDI2IEBACiBESVNURklMRVM9ICQoRE9DUykgJChNS0ZJTEVTKSAkKENPTkZJR0ZJTEVTKSAkKFNPVVJDRVMpICQoSU5DTFVERVMpIFwKICAgICAgICAgJChDT05GSUdVUkVGSUxFUykgJChPVEhFUkZJTEVTKSAkKFRFU1RGSUxFUykKICMgbGlicmFyeSBvYmplY3QgZmlsZXMgY29tbW9uIHRvIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCi1DT01PQkpFQ1RTPSBqY29tYXBpLiQoTykganV0aWxzLiQoTykgamVycm9yLiQoTykgam1lbW1nci4kKE8pICQoU1lTREVQTUVNKQorQ09NT0JKRUNUUz0gamNvbWFwaS4kKE8pIGp1dGlscy4kKE8pIGplcnJvci4kKE8pIGptZW1tZ3IuJChPKSAkKFNZU0RFUE1FTSkgXAorICAgICAgICBqc2ltZGNwdS4kKE8pICQoU1lTREVQU0lNRENISykKICMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKIENMSUJPQkpFQ1RTPSBqY2FwaW1pbi4kKE8pIGpjYXBpc3RkLiQoTykgamN0cmFucy4kKE8pIGpjcGFyYW0uJChPKSBcCiAgICAgICAgIGpkYXRhZHN0LiQoTykgamNpbml0LiQoTykgamNtYXN0ZXIuJChPKSBqY21hcmtlci4kKE8pIGpjbWFpbmN0LiQoTykgXAogICAgICAgICBqY3ByZXBjdC4kKE8pIGpjY29lZmN0LiQoTykgamNjb2xvci4kKE8pIGpjc2FtcGxlLiQoTykgamNodWZmLiQoTykgXAotICAgICAgICBqY3BodWZmLiQoTykgamNkY3RtZ3IuJChPKSBqZmRjdGZzdC4kKE8pIGpmZGN0Zmx0LiQoTykgXAotICAgICAgICBqZmRjdGludC4kKE8pCisgICAgICAgIGpjcGh1ZmYuJChPKSBqY2RjdG1nci4kKE8pIGpjY29sbW14LiQoTykgamNjb2xzczIuJChPKSBqY3NhbW1teC4kKE8pIFwKKyAgICAgICAgamNzYW1zczIuJChPKSBqY3FudGludC4kKE8pIGpjcW50Zmx0LiQoTykgamNxbnRtbXguJChPKSBqY3FudDNkbi4kKE8pIFwKKyAgICAgICAgamNxbnRzMmkuJChPKSBqY3FudHNzZS4kKE8pIGpjcW50czJmLiQoTykgamZkY3RpbnQuJChPKSBqZmRjdGZzdC4kKE8pIFwKKyAgICAgICAgamZkY3RmbHQuJChPKSBqZm1teGludC4kKE8pIGpmbW14ZnN0LiQoTykgamYzZG5mbHQuJChPKSBqZnNzMmludC4kKE8pIFwKKyAgICAgICAgamZzczJmc3QuJChPKSBqZnNzZWZsdC4kKE8pCiAjIGRlY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKIERMSUJPQkpFQ1RTPSBqZGFwaW1pbi4kKE8pIGpkYXBpc3RkLiQoTykgamR0cmFucy4kKE8pIGpkYXRhc3JjLiQoTykgXAogICAgICAgICBqZG1hc3Rlci4kKE8pIGpkaW5wdXQuJChPKSBqZG1hcmtlci4kKE8pIGpkaHVmZi4kKE8pIGpkcGh1ZmYuJChPKSBcCi0gICAgICAgIGpkbWFpbmN0LiQoTykgamRjb2VmY3QuJChPKSBqZHBvc3RjdC4kKE8pIGpkZGN0bWdyLiQoTykgXAotICAgICAgICBqaWRjdGZzdC4kKE8pIGppZGN0Zmx0LiQoTykgamlkY3RpbnQuJChPKSBqaWRjdHJlZC4kKE8pIFwKLSAgICAgICAgamRzYW1wbGUuJChPKSBqZGNvbG9yLiQoTykganF1YW50MS4kKE8pIGpxdWFudDIuJChPKSBqZG1lcmdlLiQoTykKKyAgICAgICAgamRtYWluY3QuJChPKSBqZGNvZWZjdC4kKE8pIGpkcG9zdGN0LiQoTykgamRkY3RtZ3IuJChPKSBqZHNhbXBsZS4kKE8pIFwKKyAgICAgICAgamRjb2xvci4kKE8pIGpxdWFudDEuJChPKSBqcXVhbnQyLiQoTykgamRtZXJnZS4kKE8pIGppZGN0aW50LiQoTykgXAorICAgICAgICBqaWRjdGZzdC4kKE8pIGppZGN0cmVkLiQoTykgamlkY3RmbHQuJChPKSBqaW1teGludC4kKE8pIGppbW14ZnN0LiQoTykgXAorICAgICAgICBqaW1teHJlZC4kKE8pIGppM2RuZmx0LiQoTykgamlzczJpbnQuJChPKSBqaXNzMmZzdC4kKE8pIGppc3MycmVkLiQoTykgXAorICAgICAgICBqaXNzZWZsdC4kKE8pIGppc3MyZmx0LiQoTykgamRzYW1tbXguJChPKSBqZHNhbXNzMi4kKE8pIGpkY29sbW14LiQoTykgXAorICAgICAgICBqZGNvbHNzMi4kKE8pIGpkbWVybW14LiQoTykgamRtZXJzczIuJChPKQogIyBUaGVzZSBvYmplY3RmaWxlcyBhcmUgaW5jbHVkZWQgaW4gbGlianBlZy5hCiBMSUJPQkpFQ1RTPSAkKENMSUJPQkpFQ1RTKSAkKERMSUJPQkpFQ1RTKSAkKENPTU9CSkVDVFMpCiAjIG9iamVjdCBmaWxlcyBmb3Igc2FtcGxlIGFwcGxpY2F0aW9ucyAoZXhjbHVkaW5nIGxpYnJhcnkgZmlsZXMpCkBAIC0xMzYsMTIgKzE1OSwxOSBAQAogYWxsOiBAQTJLX0RFUFNAIGxpYmpwZWcuJChBKSBjanBlZyBkanBlZyBqcGVndHJhbiByZGpwZ2NvbSB3cmpwZ2NvbQogCiAjIFNwZWNpYWwgY29tcGlsYXRpb24gcnVsZXMgdG8gc3VwcG9ydCBhbnNpMmtuciBhbmQgbGlidG9vbC4KLS5TVUZGSVhFUzogLmxvIC5sYQorLlNVRkZJWEVTOiAubG8gLmxhIC5hc20KKworLmFzbS5vOgorCSQoU0hFTEwpICQoc3JjZGlyKS9uYXNtX2x0LnNoICQoTkFTTSkgJChOQUZMQUdTKSAkKHNyY2RpcikvJCouYXNtCiAKICMgSG93IHRvIGNvbXBpbGUgd2l0aCBsaWJ0b29sLgogQENPTV9MVEAuYy5sbzoKIEBDT01fTFRACSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDQykgJChDRkxBR1MpIC1jICQoc3JjZGlyKS8kKi5jCiAKK0BDT01fTFRALmFzbS5sbzoKK0BDT01fTFRACSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgQFRBR0NDQCAkKFNIRUxMKSAkKHNyY2RpcikvbmFzbV9sdC5zaCBcCitAQ09NX0xUQAkJJChOQVNNKSAkKE5BRkxBR1MpICQoc3JjZGlyKS8kKi5hc20KKwogIyBIb3cgdG8gdXNlIGFuc2kya25yLCB3aGVuIG5vdCB1c2luZyBsaWJ0b29sLgogQENPTV9BMktALmMubzoKIEBDT01fQTJLQAkuL2Fuc2kya25yICQoc3JjZGlyKS8kKi5jIGtuci8kKi5jCkBAIC0xNjksNyArMTk5LDcgQEAKICMgd2l0aCBsaWJ0b29sOgogbGlianBlZy5sYTogQEEyS19ERVBTQCAkKExJQk9CSkVDVFMpCiAJJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAtbyBsaWJqcGVnLmxhICQoTElCT0JKRUNUUykgXAotCQktcnBhdGggJChsaWJkaXIpIC12ZXJzaW9uLWluZm8gJChKUEVHX0xJQl9WRVJTSU9OKQorCQktbm8tdW5kZWZpbmVkIC1ycGF0aCAkKGxpYmRpcikgLXZlcnNpb24taW5mbyAkKEpQRUdfTElCX1ZFUlNJT04pCiAKICMgc2FtcGxlIHByb2dyYW1zOgogCkBAIC0xOTEsMzQgKzIyMSw2MiBAQAogIyBJbnN0YWxsYXRpb24gcnVsZXM6CiAKIGluc3RhbGw6IGNqcGVnIGRqcGVnIGpwZWd0cmFuIHJkanBnY29tIHdyanBnY29tIEBGT1JDRV9JTlNUQUxMX0xJQkAKKwktQGlmIFsgISAtZCAkKGJpbmRpcikgXTsgdGhlbiBta2RpciAtcCAkKGJpbmRpcik7IGZpCisJLUBpZiBbICEgLWQgJChtYW4xZGlyKSBdOyB0aGVuIG1rZGlyIC1wICQobWFuMWRpcik7IGZpCiAJJChJTlNUQUxMX1BST0dSQU0pIGNqcGVnICQoYmluZGlyKS8kKGJpbnByZWZpeCljanBlZwogCSQoSU5TVEFMTF9QUk9HUkFNKSBkanBlZyAkKGJpbmRpcikvJChiaW5wcmVmaXgpZGpwZWcKIAkkKElOU1RBTExfUFJPR1JBTSkganBlZ3RyYW4gJChiaW5kaXIpLyQoYmlucHJlZml4KWpwZWd0cmFuCiAJJChJTlNUQUxMX1BST0dSQU0pIHJkanBnY29tICQoYmluZGlyKS8kKGJpbnByZWZpeClyZGpwZ2NvbQogCSQoSU5TVEFMTF9QUk9HUkFNKSB3cmpwZ2NvbSAkKGJpbmRpcikvJChiaW5wcmVmaXgpd3JqcGdjb20KLQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2NqcGVnLjEgJChtYW5kaXIpLyQobWFucHJlZml4KWNqcGVnLiQobWFuZXh0KQotCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZGpwZWcuMSAkKG1hbmRpcikvJChtYW5wcmVmaXgpZGpwZWcuJChtYW5leHQpCi0JJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qcGVndHJhbi4xICQobWFuZGlyKS8kKG1hbnByZWZpeClqcGVndHJhbi4kKG1hbmV4dCkKLQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3JkanBnY29tLjEgJChtYW5kaXIpLyQobWFucHJlZml4KXJkanBnY29tLiQobWFuZXh0KQotCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikvd3JqcGdjb20uMSAkKG1hbmRpcikvJChtYW5wcmVmaXgpd3JqcGdjb20uJChtYW5leHQpCisJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9janBlZy4xICQobWFuMWRpcikvJChtYW5wcmVmaXgpY2pwZWckKG1hbmV4dCkKKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2RqcGVnLjEgJChtYW4xZGlyKS8kKG1hbnByZWZpeClkanBlZyQobWFuZXh0KQorCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvanBlZ3RyYW4uMSAkKG1hbjFkaXIpLyQobWFucHJlZml4KWpwZWd0cmFuJChtYW5leHQpCisJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9yZGpwZ2NvbS4xICQobWFuMWRpcikvJChtYW5wcmVmaXgpcmRqcGdjb20kKG1hbmV4dCkKKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3dyanBnY29tLjEgJChtYW4xZGlyKS8kKG1hbnByZWZpeCl3cmpwZ2NvbSQobWFuZXh0KQogCiBpbnN0YWxsLWxpYjogbGlianBlZy4kKEEpIGluc3RhbGwtaGVhZGVycworCS1AaWYgWyAhIC1kICQobGliZGlyKSBdOyB0aGVuIG1rZGlyIC1wICQobGliZGlyKTsgZmkKIAkkKElOU1RBTExfTElCKSBsaWJqcGVnLiQoQSkgJChsaWJkaXIpLyQoYmlucHJlZml4KWxpYmpwZWcuJChBKQogCiBpbnN0YWxsLWhlYWRlcnM6IGpjb25maWcuaAorCS1AaWYgWyAhIC1kICQoaW5jbHVkZWRpcikgXTsgdGhlbiBta2RpciAtcCAkKGluY2x1ZGVkaXIpOyBmaQogCSQoSU5TVEFMTF9EQVRBKSBqY29uZmlnLmggJChpbmNsdWRlZGlyKS9qY29uZmlnLmgKIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2pwZWdsaWIuaCAkKGluY2x1ZGVkaXIpL2pwZWdsaWIuaAogCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikvam1vcmVjZmcuaCAkKGluY2x1ZGVkaXIpL2ptb3JlY2ZnLmgKIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2plcnJvci5oICQoaW5jbHVkZWRpcikvamVycm9yLmgKIAorIyBVbmluc3RhbGxhdGlvbiBydWxlczoKKwordW5pbnN0YWxsOiBAVU5JTlNUQUxMX0xJQkAKKwkkKFVOSU5TVEFMTCkgJChiaW5kaXIpLyQoYmlucHJlZml4KWNqcGVnJChFWEUpCisJJChVTklOU1RBTEwpICQoYmluZGlyKS8kKGJpbnByZWZpeClkanBlZyQoRVhFKQorCSQoVU5JTlNUQUxMKSAkKGJpbmRpcikvJChiaW5wcmVmaXgpanBlZ3RyYW4kKEVYRSkKKwkkKFVOSU5TVEFMTCkgJChiaW5kaXIpLyQoYmlucHJlZml4KXJkanBnY29tJChFWEUpCisJJChVTklOU1RBTEwpICQoYmluZGlyKS8kKGJpbnByZWZpeCl3cmpwZ2NvbSQoRVhFKQorCSQoVU5JTlNUQUxMKSAkKG1hbjFkaXIpLyQobWFucHJlZml4KWNqcGVnJChtYW5leHQpCisJJChVTklOU1RBTEwpICQobWFuMWRpcikvJChtYW5wcmVmaXgpZGpwZWckKG1hbmV4dCkKKwkkKFVOSU5TVEFMTCkgJChtYW4xZGlyKS8kKG1hbnByZWZpeClqcGVndHJhbiQobWFuZXh0KQorCSQoVU5JTlNUQUxMKSAkKG1hbjFkaXIpLyQobWFucHJlZml4KXJkanBnY29tJChtYW5leHQpCisJJChVTklOU1RBTEwpICQobWFuMWRpcikvJChtYW5wcmVmaXgpd3JqcGdjb20kKG1hbmV4dCkKKwordW5pbnN0YWxsLWxpYjogdW5pbnN0YWxsLWhlYWRlcnMKKwkkKFVOSU5TVEFMTCkgJChsaWJkaXIpLyQoYmlucHJlZml4KWxpYmpwZWcuJChBKQorCit1bmluc3RhbGwtaGVhZGVyczoKKwkkKFVOSU5TVEFMTCkgJChpbmNsdWRlZGlyKS9qY29uZmlnLmgKKwkkKFVOSU5TVEFMTCkgJChpbmNsdWRlZGlyKS9qcGVnbGliLmgKKwkkKFVOSU5TVEFMTCkgJChpbmNsdWRlZGlyKS9qbW9yZWNmZy5oCisJJChVTklOU1RBTEwpICQoaW5jbHVkZWRpcikvamVycm9yLmgKKwogY2xlYW46Ci0JJChSTSkgKi5vICoubG8gbGlianBlZy5hIGxpYmpwZWcubGEKLQkkKFJNKSBjanBlZyBkanBlZyBqcGVndHJhbiByZGpwZ2NvbSB3cmpwZ2NvbQotCSQoUk0pIGFuc2kya25yIGNvcmUgdGVzdG91dCogY29uZmlnLmxvZyBjb25maWcuc3RhdHVzCisJJChSTSkganNpbWRjZmcuaW5jICoubyAqLmxvIGxpYmpwZWcuYSBsaWJqcGVnLmxhCisjCSB1bmRlciBjeWd3aW4sIGxpYnRvb2wgd2lsbCBjcmVhdGUgd3JhcHBlciBzY3JpcHRzIHdpdGhvdXQgc3VmZml4LgorCSQoUk0pIGNqcGVnIGRqcGVnIGpwZWd0cmFuIGNqcGVnJChFWEUpIGRqcGVnJChFWEUpIGpwZWd0cmFuJChFWEUpCisJJChSTSkgcmRqcGdjb20kKEVYRSkgd3JqcGdjb20kKEVYRSkgYW5zaTJrbnIkKEVYRSkgY29yZSB0ZXN0b3V0KgogCSQoUk0pIC1yIGtuciAubGlicyBfbGlicwogCiBkaXN0Y2xlYW46IGNsZWFuCi0JJChSTSkgTWFrZWZpbGUgamNvbmZpZy5oIGxpYnRvb2wgY29uZmlnLmNhY2hlCisJJChSTSkgTWFrZWZpbGUgamNvbmZpZy5oIGxpYnRvb2wgY29uZmlnLmNhY2hlIGNvbmZpZy5zdGF0dXMgY29uZmlnLmxvZwogCiB0ZXN0OiBjanBlZyBkanBlZyBqcGVndHJhbgogCSQoUk0pIHRlc3RvdXQqCkBAIC0yNDgsMTAgKzMwNiw2MCBAQAogLlBIT05ZOiBhbGwgaW5zdGFsbCBpbnN0YWxsLWxpYiBpbnN0YWxsLWhlYWRlcnMgY2xlYW4gZGlzdGNsZWFuIHRlc3QgY2hlY2sKIAogCitqc2ltZGNmZy5pbmM6IG1ha2VjZmcuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyBtYWtlY2ZnICQoc3JjZGlyKS9tYWtlY2ZnLmMgJChMRExJQlMpCisJLi9tYWtlY2ZnID4ganNpbWRjZmcuaW5jCisJJChSTSkgbWFrZWNmZyQoRVhFKQorCitqc2ltZGNwdS4kKE8pOiBqc2ltZGNwdS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYworanNpbWR3MzIuJChPKToganNpbWR3MzIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pzaW1kZGpnLiQoTyk6IGpzaW1kZGpnLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jCitqY2NvbG1teC4kKE8pOiBqY2NvbG1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjY29sc3MyLiQoTyk6IGpjY29sc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNzYW1tbXguJChPKTogamNzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY3NhbXNzMi4kKE8pOiBqY3NhbXNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkY29sbW14LiQoTyk6IGpkY29sbW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRjb2xzczIuJChPKTogamRjb2xzczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZG1lcm1teC4kKE8pOiBqZG1lcm1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkbWVyc3MyLiQoTyk6IGpkbWVyc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRzYW1tbXguJChPKTogamRzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZHNhbXNzMi4kKE8pOiBqZHNhbXNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjcW50aW50LiQoTyk6IGpjcW50aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudGZsdC4kKE8pOiBqY3FudGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRtbXguJChPKTogamNxbnRtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50M2RuLiQoTyk6IGpjcW50M2RuLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHMyaS4kKE8pOiBqY3FudHMyaS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRzc2UuJChPKTogamNxbnRzc2UuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50czJmLiQoTyk6IGpjcW50czJmLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGludC4kKE8pOiBqZmRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZkY3Rmc3QuJChPKTogamZkY3Rmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmZGN0Zmx0LiQoTyk6IGpmZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGludC4kKE8pOiBqZm1teGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZtbXhmc3QuJChPKTogamZtbXhmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmM2RuZmx0LiQoTyk6IGpmM2RuZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmludC4kKE8pOiBqZnNzMmludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZzczJmc3QuJChPKTogamZzczJmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmc3NlZmx0LiQoTyk6IGpmc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGludC4kKE8pOiBqaWRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3Rmc3QuJChPKTogamlkY3Rmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppZGN0cmVkLiQoTyk6IGppZGN0cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZsdC4kKE8pOiBqaWRjdGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamltbXhpbnQuJChPKTogamltbXhpbnQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppbW14ZnN0LiQoTyk6IGppbW14ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teHJlZC4kKE8pOiBqaW1teHJlZC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamkzZG5mbHQuJChPKTogamkzZG5mbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3MyaW50LiQoTyk6IGppc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZzdC4kKE8pOiBqaXNzMmZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJyZWQuJChPKTogamlzczJyZWQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3NlZmx0LiQoTyk6IGppc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZsdC4kKE8pOiBqaXNzMmZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworCitqc2ltZGdjYy4kKE8pOiBqc2ltZGdjYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCisKIGpjYXBpbWluLiQoTyk6IGpjYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqY2FwaXN0ZC4kKE8pOiBqY2FwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamNjb2VmY3QuJChPKTogamNjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjY29sb3IuJChPKTogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNjb2xvci4kKE8pOiBqY2NvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpjZGN0bWdyLiQoTyk6IGpjZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAogamNodWZmLiQoTyk6IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY2h1ZmYuaAogamNpbml0LiQoTyk6IGpjaW5pdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaApAQCAtMjYyLDMzICszNzAsMzMgQEAKIGpjcGFyYW0uJChPKTogamNwYXJhbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamNwaHVmZi4kKE8pOiBqY3BodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjaHVmZi5oCiBqY3ByZXBjdC4kKE8pOiBqY3ByZXBjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNzYW1wbGUuJChPKTogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjc2FtcGxlLiQoTyk6IGpjc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpjdHJhbnMuJChPKTogamN0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRhcGltaW4uJChPKTogamRhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpkYXBpc3RkLiQoTyk6IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqZGF0YWRzdC4kKE8pOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCiBqZGF0YXNyYy4kKE8pOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCiBqZGNvZWZjdC4kKE8pOiBqZGNvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRjb2xvci4kKE8pOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZGNvbG9yLiQoTyk6IGpkY29sb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAogamRkY3RtZ3IuJChPKTogamRkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCiBqZGh1ZmYuJChPKTogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkaHVmZi5oCiBqZGlucHV0LiQoTyk6IGpkaW5wdXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpkbWFpbmN0LiQoTyk6IGpkbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqZG1hcmtlci4kKE8pOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRtYXN0ZXIuJChPKTogamRtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWVyZ2UuJChPKTogamRtZXJnZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtZXJnZS4kKE8pOiBqZG1lcmdlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpkcGh1ZmYuJChPKTogamRwaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGh1ZmYuaAogamRwb3N0Y3QuJChPKTogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkc2FtcGxlLiQoTyk6IGpkc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZHNhbXBsZS4kKE8pOiBqZHNhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCiBqZHRyYW5zLiQoTyk6IGpkdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGplcnJvci4kKE8pOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC4kKE8pOiBqZmRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0ZnN0LiQoTyk6IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3RpbnQuJChPKTogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC4kKE8pOiBqaWRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0ZnN0LiQoTyk6IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3RpbnQuJChPKTogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdHJlZC4kKE8pOiBqaWRjdHJlZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamZkY3RmbHQuJChPKTogamZkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGpmZGN0ZnN0LiQoTyk6IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqZmRjdGludC4kKE8pOiBqZmRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RmbHQuJChPKTogamlkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGppZGN0ZnN0LiQoTyk6IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdGludC4kKE8pOiBqaWRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RyZWQuJChPKTogamlkY3RyZWQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCiBqcXVhbnQxLiQoTyk6IGpxdWFudDEuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpxdWFudDIuJChPKToganF1YW50Mi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoganV0aWxzLiQoTyk6IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaApkaWZmIC0tZ2l0IGEvbWFrZWZpbGUuZGogYi9tYWtlZmlsZS5kagppbmRleCBmNzY2ZDI1Li4yMTg2NDY4IDEwMDY0NAotLS0gYS9tYWtlZmlsZS5kagorKysgYi9tYWtlZmlsZS5kagpAQCAtMSwxOCArMSwzNCBAQAogIyBNYWtlZmlsZSBmb3IgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlCisjIE1vZGlmaWVkIGZvciB4ODYgU0lNRCBleHRlbnNpb24KIAogIyBUaGlzIG1ha2VmaWxlIGlzIGZvciBESkdQUCAoRGVsb3JpZSdzIEdOVSBDIHBvcnQgb24gTVMtRE9TKSwgdjIuMCBvciBsYXRlci4KICMgVGhhbmtzIHRvIEZyYW5rIEouIERvbmFob2UgZm9yIHRoaXMgdmVyc2lvbi4KIAogIyBSZWFkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYmVmb3JlIHNheWluZyAibWFrZSIgISEKIAorc3JjZGlyID0gLgorVlBBVEggID0gJChzcmNkaXIpCisKICMgVGhlIG5hbWUgb2YgeW91ciBDIGNvbXBpbGVyOgogQ0M9IGdjYwogCiAjIFlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlc2UgY2Mgb3B0aW9uczoKLUNGTEFHUz0gLU8yIC1XYWxsIC1JLgorIyBGb3IgZ2NjIDMuNC54CitDRkxBR1M9IC1PMiAtbXR1bmU9cGVudGl1bTIgLW1hcmNoPWkzODYgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZ3ZWIgXAorICAgICAgICAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT0yIC1tbm8tYWxpZ24tc3RyaW5nb3BzIC1JJChzcmNkaXIpCisjIEZvciBnY2MgMy4zLngKKyNDRkxBR1M9IC1PMiAtbWNwdT1wZW50aXVtMiAtbWFyY2g9aTM4NiAtZm9taXQtZnJhbWUtcG9pbnRlciBcCisjICAgICAgICAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT0yIC1tbm8tYWxpZ24tc3RyaW5nb3BzIC1JJChzcmNkaXIpCiAjIEdlbmVyYWxseSwgd2UgcmVjb21tZW5kIGRlZmluaW5nIGFueSBjb25maWd1cmF0aW9uIHN5bWJvbHMgaW4gamNvbmZpZy5oLAogIyBOT1QgdmlhIC1EIHN3aXRjaGVzIGhlcmUuCiAKKyMgVGhlIGV4ZWN1dGFibGUgbmFtZSBvZiBOQVNNIGFuZCBpdHMgb3B0aW9uczoKK05BU009IG5hc20KK05BRkxBR1M9ICQoTkFTTV9PQkpGTVQpIC1JJChzcmNkaXIpLworIyBvYmplY3QgZmlsZSBmb3JtYXQgc3BlY2lmaWVyIGZvciBOQVNNCisjIHNlZSBqc2ltZGV4dC5pbmMgZm9yIG1vcmUgZGV0YWlscy4KK05BU01fT0JKRk1UPSAtZmNvZmYgLURESkdQUAorCiAjIExpbmstdGltZSBjYyBvcHRpb25zOgogTERGTEFHUz0gLXMKIApAQCAtMjQsNiArNDAsMTAgQEAKICMgdXNlIGptZW1uYW1lLm8gaWYgeW91IHdhbnQgdG8gdXNlIG5hbWVkIHRlbXAgZmlsZXMgaW5zdGVhZCBvZiBzd2FwIHNwYWNlLgogU1lTREVQTUVNPSBqbWVtbm9icy5vCiAKKyMgT1MtZGVwZW5kZW50IFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjaGVja2VyCisjIGpzaW1kdzMyLm8gKFdpbjMyKSAvIGpzaW1kZGpnLm8gKERKR1BQIFYuMikgLyBqc2ltZGdjYy5vIChVbml4L2djYykKK1NZU0RFUFNJTURDSEs9IGpzaW1kZGpnLm8KKwogIyBtaXNjZWxsYW5lb3VzIE9TLWRlcGVuZGVudCBzdHVmZgogIyBsaW5rZXIKIExOPSAkKENDKQpAQCAtNzUsMTcgKzk1LDIzIEBACiBESVNURklMRVM9ICQoRE9DUykgJChNS0ZJTEVTKSAkKENPTkZJR0ZJTEVTKSAkKFNPVVJDRVMpICQoSU5DTFVERVMpIFwKICAgICAgICAgJChDT05GSUdVUkVGSUxFUykgJChPVEhFUkZJTEVTKSAkKFRFU1RGSUxFUykKICMgbGlicmFyeSBvYmplY3QgZmlsZXMgY29tbW9uIHRvIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCi1DT01PQkpFQ1RTPSBqY29tYXBpLm8ganV0aWxzLm8gamVycm9yLm8gam1lbW1nci5vICQoU1lTREVQTUVNKQorQ09NT0JKRUNUUz0gamNvbWFwaS5vIGp1dGlscy5vIGplcnJvci5vIGptZW1tZ3IubyAkKFNZU0RFUE1FTSkganNpbWRjcHUubyBcCisgICAgICAgICQoU1lTREVQU0lNRENISykKICMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKIENMSUJPQkpFQ1RTPSBqY2FwaW1pbi5vIGpjYXBpc3RkLm8gamN0cmFucy5vIGpjcGFyYW0ubyBqZGF0YWRzdC5vIGpjaW5pdC5vIFwKICAgICAgICAgamNtYXN0ZXIubyBqY21hcmtlci5vIGpjbWFpbmN0Lm8gamNwcmVwY3QubyBqY2NvZWZjdC5vIGpjY29sb3IubyBcCi0gICAgICAgIGpjc2FtcGxlLm8gamNodWZmLm8gamNwaHVmZi5vIGpjZGN0bWdyLm8gamZkY3Rmc3QubyBqZmRjdGZsdC5vIFwKLSAgICAgICAgamZkY3RpbnQubworICAgICAgICBqY3NhbXBsZS5vIGpjaHVmZi5vIGpjcGh1ZmYubyBqY2RjdG1nci5vIGpjY29sbW14Lm8gamNjb2xzczIubyBcCisgICAgICAgIGpjc2FtbW14Lm8gamNzYW1zczIubyBqY3FudGludC5vIGpjcW50Zmx0Lm8gamNxbnRtbXgubyBqY3FudDNkbi5vIFwKKyAgICAgICAgamNxbnRzMmkubyBqY3FudHNzZS5vIGpjcW50czJmLm8gamZkY3RpbnQubyBqZmRjdGZzdC5vIGpmZGN0Zmx0Lm8gXAorICAgICAgICBqZm1teGludC5vIGpmbW14ZnN0Lm8gamYzZG5mbHQubyBqZnNzMmludC5vIGpmc3MyZnN0Lm8gamZzc2VmbHQubwogIyBkZWNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCiBETElCT0JKRUNUUz0gamRhcGltaW4ubyBqZGFwaXN0ZC5vIGpkdHJhbnMubyBqZGF0YXNyYy5vIGpkbWFzdGVyLm8gXAogICAgICAgICBqZGlucHV0Lm8gamRtYXJrZXIubyBqZGh1ZmYubyBqZHBodWZmLm8gamRtYWluY3QubyBqZGNvZWZjdC5vIFwKLSAgICAgICAgamRwb3N0Y3QubyBqZGRjdG1nci5vIGppZGN0ZnN0Lm8gamlkY3RmbHQubyBqaWRjdGludC5vIGppZGN0cmVkLm8gXAotICAgICAgICBqZHNhbXBsZS5vIGpkY29sb3IubyBqcXVhbnQxLm8ganF1YW50Mi5vIGpkbWVyZ2UubworICAgICAgICBqZHBvc3RjdC5vIGpkZGN0bWdyLm8gamRzYW1wbGUubyBqZGNvbG9yLm8ganF1YW50MS5vIGpxdWFudDIubyBcCisgICAgICAgIGpkbWVyZ2UubyBqaWRjdGludC5vIGppZGN0ZnN0Lm8gamlkY3RyZWQubyBqaWRjdGZsdC5vIGppbW14aW50Lm8gXAorICAgICAgICBqaW1teGZzdC5vIGppbW14cmVkLm8gamkzZG5mbHQubyBqaXNzMmludC5vIGppc3MyZnN0Lm8gamlzczJyZWQubyBcCisgICAgICAgIGppc3NlZmx0Lm8gamlzczJmbHQubyBqZHNhbW1teC5vIGpkc2Ftc3MyLm8gamRjb2xtbXgubyBqZGNvbHNzMi5vIFwKKyAgICAgICAgamRtZXJtbXgubyBqZG1lcnNzMi5vCiAjIFRoZXNlIG9iamVjdGZpbGVzIGFyZSBpbmNsdWRlZCBpbiBsaWJqcGVnLmEKIExJQk9CSkVDVFM9ICQoQ0xJQk9CSkVDVFMpICQoRExJQk9CSkVDVFMpICQoQ09NT0JKRUNUUykKICMgb2JqZWN0IGZpbGVzIGZvciBzYW1wbGUgYXBwbGljYXRpb25zIChleGNsdWRpbmcgbGlicmFyeSBmaWxlcykKQEAgLTEzMCwyOSArMTU2LDgzIEBACiAJJChSTSkganBlZ3RyYW4uZXhlCiAJJChSTSkgcmRqcGdjb20uZXhlCiAJJChSTSkgd3JqcGdjb20uZXhlCisJJChSTSkganNpbWRjZmcuaW5jCiAJJChSTSkgbGlianBlZy5hCiAJJChSTSkgdGVzdG91dCouKgogCiB0ZXN0OiBjanBlZy5leGUgZGpwZWcuZXhlIGpwZWd0cmFuLmV4ZQogCSQoUk0pIHRlc3RvdXQqLioKLQkuL2RqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dC5wcG0gIHRlc3RvcmlnLmpwZwotCS4vZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCAgdGVzdG9yaWcuanBnCi0JLi9janBlZyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0LmpwZyAgdGVzdGltZy5wcG0KLQkuL2RqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dHAucHBtIHRlc3Rwcm9nLmpwZwotCS4vY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgdGVzdG91dHAuanBnIHRlc3RpbWcucHBtCi0JLi9qcGVndHJhbiAtb3V0ZmlsZSB0ZXN0b3V0dC5qcGcgdGVzdHByb2cuanBnCi0JZmMgL2IgdGVzdGltZy5wcG0gdGVzdG91dC5wcG0KLQlmYyAvYiB0ZXN0aW1nLmJtcCB0ZXN0b3V0LmJtcAotCWZjIC9iIHRlc3RpbWcuanBnIHRlc3RvdXQuanBnCi0JZmMgL2IgdGVzdGltZy5wcG0gdGVzdG91dHAucHBtCi0JZmMgL2IgdGVzdGltZ3AuanBnIHRlc3RvdXRwLmpwZwotCWZjIC9iIHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKKwkuL2RqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dC5wcG0gJChzcmNkaXIpXHRlc3RvcmlnLmpwZworCS4vZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCAkKHNyY2RpcilcdGVzdG9yaWcuanBnCisJLi9janBlZyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0LmpwZyAkKHNyY2RpcilcdGVzdGltZy5wcG0KKwkuL2RqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dHAucHBtICQoc3JjZGlyKVx0ZXN0cHJvZy5qcGcKKwkuL2NqcGVnIC1kY3QgaW50IC1wcm9ncmVzc2l2ZSAtb3B0IC1vdXRmaWxlIHRlc3RvdXRwLmpwZyAkKHNyY2RpcilcdGVzdGltZy5wcG0KKwkuL2pwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyAkKHNyY2RpcilcdGVzdHByb2cuanBnCisJZmMgL2IgJChzcmNkaXIpXHRlc3RpbWcucHBtIHRlc3RvdXQucHBtCisJZmMgL2IgJChzcmNkaXIpXHRlc3RpbWcuYm1wIHRlc3RvdXQuYm1wCisJZmMgL2IgJChzcmNkaXIpXHRlc3RpbWcuanBnIHRlc3RvdXQuanBnCisJZmMgL2IgJChzcmNkaXIpXHRlc3RpbWcucHBtIHRlc3RvdXRwLnBwbQorCWZjIC9iICQoc3JjZGlyKVx0ZXN0aW1ncC5qcGcgdGVzdG91dHAuanBnCisJZmMgL2IgJChzcmNkaXIpXHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKIAogCitqc2ltZGNmZy5pbmM6IG1ha2VjZmcuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyBtYWtlY2ZnLmV4ZSAkKHNyY2RpcikvbWFrZWNmZy5jICQoTERMSUJTKQorCS5cbWFrZWNmZy5leGUgPiBqc2ltZGNmZy5pbmMKKwkkKFJNKSBtYWtlY2ZnLmV4ZQorCislLm8gOiAlLmFzbQorCSQoTkFTTSkgJChOQUZMQUdTKSAtbyAkQCAkPAorCitqc2ltZGNwdS5vOiBqc2ltZGNwdS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYworanNpbWR3MzIubzoganNpbWR3MzIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pzaW1kZGpnLm86IGpzaW1kZGpnLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jCitqY2NvbG1teC5vOiBqY2NvbG1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjY29sc3MyLm86IGpjY29sc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNzYW1tbXgubzogamNzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY3NhbXNzMi5vOiBqY3NhbXNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkY29sbW14Lm86IGpkY29sbW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRjb2xzczIubzogamRjb2xzczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZG1lcm1teC5vOiBqZG1lcm1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkbWVyc3MyLm86IGpkbWVyc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRzYW1tbXgubzogamRzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZHNhbXNzMi5vOiBqZHNhbXNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjcW50aW50Lm86IGpjcW50aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudGZsdC5vOiBqY3FudGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRtbXgubzogamNxbnRtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50M2RuLm86IGpjcW50M2RuLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHMyaS5vOiBqY3FudHMyaS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRzc2UubzogamNxbnRzc2UuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50czJmLm86IGpjcW50czJmLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGludC5vOiBqZmRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZkY3Rmc3QubzogamZkY3Rmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmZGN0Zmx0Lm86IGpmZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGludC5vOiBqZm1teGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZtbXhmc3QubzogamZtbXhmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmM2RuZmx0Lm86IGpmM2RuZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmludC5vOiBqZnNzMmludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZzczJmc3QubzogamZzczJmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmc3NlZmx0Lm86IGpmc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGludC5vOiBqaWRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3Rmc3QubzogamlkY3Rmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppZGN0cmVkLm86IGppZGN0cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZsdC5vOiBqaWRjdGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamltbXhpbnQubzogamltbXhpbnQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppbW14ZnN0Lm86IGppbW14ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teHJlZC5vOiBqaW1teHJlZC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamkzZG5mbHQubzogamkzZG5mbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3MyaW50Lm86IGppc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZzdC5vOiBqaXNzMmZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJyZWQubzogamlzczJyZWQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3NlZmx0Lm86IGppc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZsdC5vOiBqaXNzMmZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworCitqc2ltZGdjYy5vOiBqc2ltZGdjYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCisKIGpjYXBpbWluLm86IGpjYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqY2FwaXN0ZC5vOiBqY2FwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamNjb2VmY3QubzogamNjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjY29sb3IubzogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNjb2xvci5vOiBqY2NvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpjZGN0bWdyLm86IGpjZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAogamNodWZmLm86IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY2h1ZmYuaAogamNpbml0Lm86IGpjaW5pdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaApAQCAtMTYzLDMzICsyNDMsMzMgQEAKIGpjcGFyYW0ubzogamNwYXJhbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamNwaHVmZi5vOiBqY3BodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjaHVmZi5oCiBqY3ByZXBjdC5vOiBqY3ByZXBjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNzYW1wbGUubzogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjc2FtcGxlLm86IGpjc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpjdHJhbnMubzogamN0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRhcGltaW4ubzogamRhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpkYXBpc3RkLm86IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqZGF0YWRzdC5vOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCiBqZGF0YXNyYy5vOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCiBqZGNvZWZjdC5vOiBqZGNvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRjb2xvci5vOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZGNvbG9yLm86IGpkY29sb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAogamRkY3RtZ3IubzogamRkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCiBqZGh1ZmYubzogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkaHVmZi5oCiBqZGlucHV0Lm86IGpkaW5wdXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpkbWFpbmN0Lm86IGpkbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqZG1hcmtlci5vOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRtYXN0ZXIubzogamRtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWVyZ2UubzogamRtZXJnZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtZXJnZS5vOiBqZG1lcmdlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpkcGh1ZmYubzogamRwaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGh1ZmYuaAogamRwb3N0Y3QubzogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkc2FtcGxlLm86IGpkc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZHNhbXBsZS5vOiBqZHNhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCiBqZHRyYW5zLm86IGpkdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGplcnJvci5vOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC5vOiBqZmRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0ZnN0Lm86IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3RpbnQubzogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC5vOiBqaWRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0ZnN0Lm86IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3RpbnQubzogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdHJlZC5vOiBqaWRjdHJlZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamZkY3RmbHQubzogamZkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGpmZGN0ZnN0Lm86IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqZmRjdGludC5vOiBqZmRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RmbHQubzogamlkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGppZGN0ZnN0Lm86IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdGludC5vOiBqaWRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RyZWQubzogamlkY3RyZWQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCiBqcXVhbnQxLm86IGpxdWFudDEuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpxdWFudDIubzoganF1YW50Mi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoganV0aWxzLm86IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaApkaWZmIC0tZ2l0IGEvbWFrZWZpbGUubGludXggYi9tYWtlZmlsZS5saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGUxZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWFrZWZpbGUubGludXgKQEAgLTAsMCArMSw0NDkgQEAKKyMgTWFrZWZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQorIyBNb2RpZmllZCBmb3IgeDg2IFNJTUQgZXh0ZW5zaW9uCisKKyMgVGhpcyBtYWtlZmlsZSBpcyBmb3IgTGludXggRUxGIHdpdGggZ2NjCisKKyMgUmVhZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGJlZm9yZSBzYXlpbmcgIm1ha2UiICEhCisKKyMgRm9yIGNvbXBpbGluZyB3aXRoIHNvdXJjZSBhbmQgb2JqZWN0IGZpbGVzIGluIGRpZmZlcmVudCBkaXJlY3Rvcmllcy4KK3NyY2RpciA9IC4KK1ZQQVRIICA9ICQoc3JjZGlyKQorCisjIFdoZXJlIHRvIGluc3RhbGwgdGhlIHByb2dyYW1zIGFuZCBtYW4gcGFnZXMuCitwcmVmaXggPSAvdXNyL2xvY2FsCitleGVjX3ByZWZpeCA9ICR7cHJlZml4fQorYmluZGlyID0gJChleGVjX3ByZWZpeCkvYmluCitsaWJkaXIgPSAkKGV4ZWNfcHJlZml4KS9saWIKK2luY2x1ZGVkaXIgPSAkKHByZWZpeCkvaW5jbHVkZQorYmlucHJlZml4ID0KK21hbnByZWZpeCA9CittYW5leHQgPSAxCittYW5kaXIgPSAkKHByZWZpeCkvbWFuL21hbiQobWFuZXh0KQorCitMTk5BTUUJPSBsaWJqcGVnLnNvCitTT05BTUUJPSBsaWJqcGVnLnNvLjYyCitMSUJOQU1FCT0gbGlianBlZy5zby42Mi4xLjAKKworIyBUaGUgbmFtZSBvZiB5b3VyIEMgY29tcGlsZXI6CitDQz0gZ2NjCisKKyMgWW91IG1heSBuZWVkIHRvIGFkanVzdCB0aGVzZSBjYyBvcHRpb25zOgorQ0ZMQUdTPSAtTzIgLW1jcHU9aTY4NiAtbWFyY2g9aTM4NiAtSSQoc3JjZGlyKQorIyBHZW5lcmFsbHksIHdlIHJlY29tbWVuZCBkZWZpbmluZyBhbnkgY29uZmlndXJhdGlvbiBzeW1ib2xzIGluIGpjb25maWcuaCwKKyMgTk9UIHZpYSAtRCBzd2l0Y2hlcyBoZXJlLgorCisjIFRoZSBleGVjdXRhYmxlIG5hbWUgb2YgTkFTTSBhbmQgaXRzIG9wdGlvbnM6CitOQVNNPSBuYXNtCitOQUZMQUdTPSAkKE5BU01fT0JKRk1UKSAtSSQoc3JjZGlyKS8KKyMgb2JqZWN0IGZpbGUgZm9ybWF0IHNwZWNpZmllciBmb3IgTkFTTQorIyBzZWUganNpbWRleHQuaW5jIGZvciBtb3JlIGRldGFpbHMuCitOQVNNX09CSkZNVD0gLWZlbGYgLURFTEYKKworIyBMaW5rLXRpbWUgY2Mgb3B0aW9uczoKK0xERkxBR1M9IAorCisjIFRvIGxpbmsgYW55IHNwZWNpYWwgbGlicmFyaWVzLCBhZGQgdGhlIG5lY2Vzc2FyeSAtbCBjb21tYW5kcyBoZXJlLgorTERMSUJTPSAKKworIyBQdXQgaGVyZSB0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgdGhlIGNvcnJlY3Qgc3lzdGVtLWRlcGVuZGVudCBtZW1vcnkKKyMgbWFuYWdlciBmaWxlLiAgRm9yIFVuaXggdGhpcyBpcyB1c3VhbGx5IGptZW1ub2JzLm8sIGJ1dCB5b3UgbWF5IHdhbnQKKyMgdG8gdXNlIGptZW1hbnNpLm8gb3Igam1lbW5hbWUubyBpZiB5b3UgaGF2ZSBsaW1pdGVkIHN3YXAgc3BhY2UuCitTWVNERVBNRU09IGptZW1ub2JzLm8KKworIyBPUy1kZXBlbmRlbnQgU0lNRCBpbnN0cnVjdGlvbiBzdXBwb3J0IGNoZWNrZXIKKyMganNpbWR3MzIubyAoV2luMzIpIC8ganNpbWRkamcubyAoREpHUFAgVi4yKSAvIGpzaW1kZ2NjLm8gKFVuaXgvZ2NjKQorU1lTREVQU0lNRENISz0ganNpbWRnY2MubworCisjIG1pc2NlbGxhbmVvdXMgT1MtZGVwZW5kZW50IHN0dWZmCisjIGxpbmtlcgorTE49ICQoQ0MpCisjIGZpbGUgZGVsZXRpb24gY29tbWFuZAorUk09IHJtIC1mCisjIGxpYnJhcnkgKC5hKSBmaWxlIGNyZWF0aW9uIGNvbW1hbmQKK0FSPSBhciByYworIyBzZWNvbmQgc3RlcCBpbiAuYSBjcmVhdGlvbiAodXNlICJ0b3VjaCIgaWYgbm90IG5lZWRlZCkKK0FSMj0gcmFubGliCisjIGluc3RhbGxhdGlvbiBwcm9ncmFtCitJTlNUQUxMPSBpbnN0YWxsIC1jCitJTlNUQUxMX1BST0dSQU09ICR7SU5TVEFMTH0gLXMKK0lOU1RBTExfU0hBUkVEID0gJHtJTlNUQUxMfQorSU5TVEFMTF9MSUI9ICAke0lOU1RBTEx9IC1tIDY0NAorSU5TVEFMTF9EQVRBPSAke0lOU1RBTEx9IC1tIDY0NAorCisjIEVuZCBvZiBjb25maWd1cmFibGUgb3B0aW9ucy4KKworCisjIHNvdXJjZSBmaWxlczogSlBFRyBsaWJyYXJ5IHByb3BlcgorTElCU09VUkNFUz0gamNhcGltaW4uYyBqY2FwaXN0ZC5jIGpjY29lZmN0LmMgamNjb2xvci5jIGpjZGN0bWdyLmMgamNodWZmLmMgXAorICAgICAgICBqY2luaXQuYyBqY21haW5jdC5jIGpjbWFya2VyLmMgamNtYXN0ZXIuYyBqY29tYXBpLmMgamNwYXJhbS5jIFwKKyAgICAgICAgamNwaHVmZi5jIGpjcHJlcGN0LmMgamNzYW1wbGUuYyBqY3RyYW5zLmMgamRhcGltaW4uYyBqZGFwaXN0ZC5jIFwKKyAgICAgICAgamRhdGFkc3QuYyBqZGF0YXNyYy5jIGpkY29lZmN0LmMgamRjb2xvci5jIGpkZGN0bWdyLmMgamRodWZmLmMgXAorICAgICAgICBqZGlucHV0LmMgamRtYWluY3QuYyBqZG1hcmtlci5jIGpkbWFzdGVyLmMgamRtZXJnZS5jIGpkcGh1ZmYuYyBcCisgICAgICAgIGpkcG9zdGN0LmMgamRzYW1wbGUuYyBqZHRyYW5zLmMgamVycm9yLmMgamZkY3RmbHQuYyBqZmRjdGZzdC5jIFwKKyAgICAgICAgamZkY3RpbnQuYyBqaWRjdGZsdC5jIGppZGN0ZnN0LmMgamlkY3RpbnQuYyBqaWRjdHJlZC5jIGpxdWFudDEuYyBcCisgICAgICAgIGpxdWFudDIuYyBqdXRpbHMuYyBqbWVtbWdyLmMKKyMgbWVtbWdyIGJhY2sgZW5kczogY29tcGlsZSBvbmx5IG9uZSBvZiB0aGVzZSBpbnRvIGEgd29ya2luZyBsaWJyYXJ5CitTWVNERVBTT1VSQ0VTPSBqbWVtYW5zaS5jIGptZW1uYW1lLmMgam1lbW5vYnMuYyBqbWVtZG9zLmMgam1lbW1hYy5jCisjIHNvdXJjZSBmaWxlczogY2pwZWcvZGpwZWcvanBlZ3RyYW4gYXBwbGljYXRpb25zLCBhbHNvIHJkanBnY29tL3dyanBnY29tCitBUFBTT1VSQ0VTPSBjanBlZy5jIGRqcGVnLmMganBlZ3RyYW4uYyByZGpwZ2NvbS5jIHdyanBnY29tLmMgY2RqcGVnLmMgXAorICAgICAgICByZGNvbG1hcC5jIHJkc3dpdGNoLmMgdHJhbnN1cHAuYyByZHBwbS5jIHdycHBtLmMgcmRnaWYuYyB3cmdpZi5jIFwKKyAgICAgICAgcmR0YXJnYS5jIHdydGFyZ2EuYyByZGJtcC5jIHdyYm1wLmMgcmRybGUuYyB3cnJsZS5jCitTT1VSQ0VTPSAkKExJQlNPVVJDRVMpICQoU1lTREVQU09VUkNFUykgJChBUFBTT1VSQ0VTKQorIyBmaWxlcyBpbmNsdWRlZCBieSBzb3VyY2UgZmlsZXMKK0lOQ0xVREVTPSBqY2h1ZmYuaCBqZGh1ZmYuaCBqZGN0LmggamVycm9yLmggamluY2x1ZGUuaCBqbWVtc3lzLmggam1vcmVjZmcuaCBcCisgICAgICAgIGpwZWdpbnQuaCBqcGVnbGliLmgganZlcnNpb24uaCBjZGpwZWcuaCBjZGVycm9yLmggdHJhbnN1cHAuaAorIyBkb2N1bWVudGF0aW9uLCB0ZXN0LCBhbmQgc3VwcG9ydCBmaWxlcworRE9DUz0gUkVBRE1FIGluc3RhbGwuZG9jIHVzYWdlLmRvYyBjanBlZy4xIGRqcGVnLjEganBlZ3RyYW4uMSByZGpwZ2NvbS4xIFwKKyAgICAgICAgd3JqcGdjb20uMSB3aXphcmQuZG9jIGV4YW1wbGUuYyBsaWJqcGVnLmRvYyBzdHJ1Y3R1cmUuZG9jIFwKKyAgICAgICAgY29kZXJ1bGVzLmRvYyBmaWxlbGlzdC5kb2MgY2hhbmdlLmxvZworTUtGSUxFUz0gY29uZmlndXJlIG1ha2VmaWxlLmNmZyBtYWtlZmlsZS5hbnNpIG1ha2VmaWxlLnVuaXggbWFrZWZpbGUuYmNjIFwKKyAgICAgICAgbWFrZWZpbGUubWM2IG1ha2VmaWxlLmRqIG1ha2VmaWxlLndhdCBtYWtlZmlsZS52YyBtYWtlbGliLmRzIFwKKyAgICAgICAgbWFrZWFwcHMuZHMgbWFrZXByb2oubWFjIG1ha2NqcGVnLnN0IG1ha2RqcGVnLnN0IG1ha2xqcGVnLnN0IFwKKyAgICAgICAgbWFrdGpwZWcuc3QgbWFrZWZpbGUubWFueCBtYWtlZmlsZS5zYXMgbWFrZWZpbGUubW1zIG1ha2VmaWxlLnZtcyBcCisgICAgICAgIG1ha3Ztcy5vcHQKK0NPTkZJR0ZJTEVTPSBqY29uZmlnLmNmZyBqY29uZmlnLmJjYyBqY29uZmlnLm1jNiBqY29uZmlnLmRqIGpjb25maWcud2F0IFwKKyAgICAgICAgamNvbmZpZy52YyBqY29uZmlnLm1hYyBqY29uZmlnLnN0IGpjb25maWcubWFueCBqY29uZmlnLnNhcyBcCisgICAgICAgIGpjb25maWcudm1zCitDT05GSUdVUkVGSUxFUz0gY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgaW5zdGFsbC1zaCBsdGNvbmZpZyBsdG1haW4uc2gKK09USEVSRklMRVM9IGpjb25maWcuZG9jIGNrY29uZmlnLmMgYW5zaTJrbnIuYyBhbnNpMmtuci4xIGptZW1kb3NhLmFzbQorVEVTVEZJTEVTPSB0ZXN0b3JpZy5qcGcgdGVzdGltZy5wcG0gdGVzdGltZy5ibXAgdGVzdGltZy5qcGcgdGVzdHByb2cuanBnIFwKKyAgICAgICAgdGVzdGltZ3AuanBnCitESVNURklMRVM9ICQoRE9DUykgJChNS0ZJTEVTKSAkKENPTkZJR0ZJTEVTKSAkKFNPVVJDRVMpICQoSU5DTFVERVMpIFwKKyAgICAgICAgJChDT05GSUdVUkVGSUxFUykgJChPVEhFUkZJTEVTKSAkKFRFU1RGSUxFUykKKyMgbGlicmFyeSBvYmplY3QgZmlsZXMgY29tbW9uIHRvIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCitDT01PQkpFQ1RTPSBqY29tYXBpLm8ganV0aWxzLm8gamVycm9yLm8gam1lbW1nci5vICQoU1lTREVQTUVNKSBqc2ltZGNwdS5vIFwKKyAgICAgICAgJChTWVNERVBTSU1EQ0hLKQorIyBjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcworQ0xJQk9CSkVDVFM9IGpjYXBpbWluLm8gamNhcGlzdGQubyBqY3RyYW5zLm8gamNwYXJhbS5vIGpkYXRhZHN0Lm8gamNpbml0Lm8gXAorICAgICAgICBqY21hc3Rlci5vIGpjbWFya2VyLm8gamNtYWluY3QubyBqY3ByZXBjdC5vIGpjY29lZmN0Lm8gamNjb2xvci5vIFwKKyAgICAgICAgamNzYW1wbGUubyBqY2h1ZmYubyBqY3BodWZmLm8gamNkY3RtZ3IubyBqY2NvbG1teC5vIGpjY29sc3MyLm8gXAorICAgICAgICBqY3NhbW1teC5vIGpjc2Ftc3MyLm8gamNxbnRpbnQubyBqY3FudGZsdC5vIGpjcW50bW14Lm8gamNxbnQzZG4ubyBcCisgICAgICAgIGpjcW50czJpLm8gamNxbnRzc2UubyBqY3FudHMyZi5vIGpmZGN0aW50Lm8gamZkY3Rmc3QubyBqZmRjdGZsdC5vIFwKKyAgICAgICAgamZtbXhpbnQubyBqZm1teGZzdC5vIGpmM2RuZmx0Lm8gamZzczJpbnQubyBqZnNzMmZzdC5vIGpmc3NlZmx0Lm8KKyMgZGVjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcworRExJQk9CSkVDVFM9IGpkYXBpbWluLm8gamRhcGlzdGQubyBqZHRyYW5zLm8gamRhdGFzcmMubyBqZG1hc3Rlci5vIFwKKyAgICAgICAgamRpbnB1dC5vIGpkbWFya2VyLm8gamRodWZmLm8gamRwaHVmZi5vIGpkbWFpbmN0Lm8gamRjb2VmY3QubyBcCisgICAgICAgIGpkcG9zdGN0Lm8gamRkY3RtZ3IubyBqZHNhbXBsZS5vIGpkY29sb3IubyBqcXVhbnQxLm8ganF1YW50Mi5vIFwKKyAgICAgICAgamRtZXJnZS5vIGppZGN0aW50Lm8gamlkY3Rmc3QubyBqaWRjdHJlZC5vIGppZGN0Zmx0Lm8gamltbXhpbnQubyBcCisgICAgICAgIGppbW14ZnN0Lm8gamltbXhyZWQubyBqaTNkbmZsdC5vIGppc3MyaW50Lm8gamlzczJmc3QubyBqaXNzMnJlZC5vIFwKKyAgICAgICAgamlzc2VmbHQubyBqaXNzMmZsdC5vIGpkc2FtbW14Lm8gamRzYW1zczIubyBqZGNvbG1teC5vIGpkY29sc3MyLm8gXAorICAgICAgICBqZG1lcm1teC5vIGpkbWVyc3MyLm8KKyMgVGhlc2Ugb2JqZWN0ZmlsZXMgYXJlIGluY2x1ZGVkIGluIGxpYmpwZWcuYQorTElCT0JKRUNUUz0gJChDTElCT0JKRUNUUykgJChETElCT0JKRUNUUykgJChDT01PQkpFQ1RTKQorIyBUaGVzZSBvYmplY3RmaWxlcyBhcmUgaW5jbHVkZWQgaW4gbGlianBlZy5zbworRExMT0JKRUNUUz0gJChMSUJPQkpFQ1RTOi5vPS5waWMubykKKyMgb2JqZWN0IGZpbGVzIGZvciBzYW1wbGUgYXBwbGljYXRpb25zIChleGNsdWRpbmcgbGlicmFyeSBmaWxlcykKK0NPQkpFQ1RTPSBjanBlZy5vIHJkcHBtLm8gcmRnaWYubyByZHRhcmdhLm8gcmRybGUubyByZGJtcC5vIHJkc3dpdGNoLm8gXAorICAgICAgICBjZGpwZWcubworRE9CSkVDVFM9IGRqcGVnLm8gd3JwcG0ubyB3cmdpZi5vIHdydGFyZ2EubyB3cnJsZS5vIHdyYm1wLm8gcmRjb2xtYXAubyBcCisgICAgICAgIGNkanBlZy5vCitUUk9CSkVDVFM9IGpwZWd0cmFuLm8gcmRzd2l0Y2gubyBjZGpwZWcubyB0cmFuc3VwcC5vCisKKworYWxsOiBzdGF0aWMgc2hhcmVkIGFwcAorYXBwOiBjanBlZyBkanBlZyBqcGVndHJhbiByZGpwZ2NvbSB3cmpwZ2NvbQorYXBwLXN0YXRpYzogY2pwZWctc3RhdGljIGRqcGVnLXN0YXRpYyBqcGVndHJhbi1zdGF0aWMKK3NoYXJlZDogJChMSUJOQU1FKQorc3RhdGljOiBsaWJqcGVnLmEKKworbGlianBlZy5hOiAkKExJQk9CSkVDVFMpCisJJChSTSkgbGlianBlZy5hCisJJChBUikgbGlianBlZy5hICAkKExJQk9CSkVDVFMpCisJJChBUjIpIGxpYmpwZWcuYQorCiskKExJQk5BTUUpOiAkKERMTE9CSkVDVFMpCisJJChDQykgLXNoYXJlZCAtV2wsLXNvbmFtZSwkKFNPTkFNRSkgLW8gJChMSUJOQU1FKSAkKERMTE9CSkVDVFMpCisKKyQoU09OQU1FKTogJChMSUJOQU1FKQorCWxuIC1zZiAkKExJQk5BTUUpICQoU09OQU1FKQorCiskKExOTkFNRSk6ICQoU09OQU1FKQorCWxuIC1zZiAkKExJQk5BTUUpICQoTE5OQU1FKQorCitjanBlZy1zdGF0aWM6ICQoQ09CSkVDVFMpIGxpYmpwZWcuYQorCSQoTE4pICQoTERGTEFHUykgLW8gY2pwZWctc3RhdGljICQoQ09CSkVDVFMpIGxpYmpwZWcuYSAkKExETElCUykKKworZGpwZWctc3RhdGljOiAkKERPQkpFQ1RTKSBsaWJqcGVnLmEKKwkkKExOKSAkKExERkxBR1MpIC1vIGRqcGVnLXN0YXRpYyAkKERPQkpFQ1RTKSBsaWJqcGVnLmEgJChMRExJQlMpCisKK2pwZWd0cmFuLXN0YXRpYzogJChUUk9CSkVDVFMpIGxpYmpwZWcuYQorCSQoTE4pICQoTERGTEFHUykgLW8ganBlZ3RyYW4tc3RhdGljICQoVFJPQkpFQ1RTKSBsaWJqcGVnLmEgJChMRExJQlMpCisKK2NqcGVnLXNoYXJlZDogJChDT0JKRUNUUykgJChMTk5BTUUpCisJJChMTikgJChMREZMQUdTKSAtbyBjanBlZy1zaGFyZWQgJChDT0JKRUNUUykgJChMTk5BTUUpICQoTERMSUJTKQorCitkanBlZy1zaGFyZWQ6ICQoRE9CSkVDVFMpICQoTE5OQU1FKQorCSQoTE4pICQoTERGTEFHUykgLW8gZGpwZWctc2hhcmVkICQoRE9CSkVDVFMpICQoTE5OQU1FKSAkKExETElCUykKKworanBlZ3RyYW4tc2hhcmVkOiAkKFRST0JKRUNUUykgJChMTk5BTUUpCisJJChMTikgJChMREZMQUdTKSAtbyBqcGVndHJhbi1zaGFyZWQgJChUUk9CSkVDVFMpICQoTE5OQU1FKSAkKExETElCUykKKworcmRqcGdjb206IHJkanBnY29tLm8KKwkkKExOKSAkKExERkxBR1MpIC1vIHJkanBnY29tIHJkanBnY29tLm8gJChMRExJQlMpCisKK3dyanBnY29tOiB3cmpwZ2NvbS5vCisJJChMTikgJChMREZMQUdTKSAtbyB3cmpwZ2NvbSB3cmpwZ2NvbS5vICQoTERMSUJTKQorCitjanBlZzogY2pwZWctc2hhcmVkCisJZWNobyAnIyEvYmluL3NoJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gY2pwZWcKKwllY2hvIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JyQkTERfTElCUkFSWV9QQVRIJyA+PiBjanBlZworCWVjaG8gZXhlYyBgcHdkYC9janBlZy1zaGFyZWQgJyIkJEAiJyAgICAgICAgICAgICAgICAgID4+IGNqcGVnCisJY2htb2QgK3ggY2pwZWcKKworZGpwZWc6IGRqcGVnLXNoYXJlZAorCWVjaG8gJyMhL2Jpbi9zaCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IGRqcGVnCisJZWNobyBleHBvcnQgTERfTElCUkFSWV9QQVRIPWBwd2RgOickJExEX0xJQlJBUllfUEFUSCcgPj4gZGpwZWcKKwllY2hvIGV4ZWMgYHB3ZGAvZGpwZWctc2hhcmVkICciJCRAIicgICAgICAgICAgICAgICAgICA+PiBkanBlZworCWNobW9kICt4IGRqcGVnCisKK2pwZWd0cmFuOiBqcGVndHJhbi1zaGFyZWQKKwllY2hvICcjIS9iaW4vc2gnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiBqcGVndHJhbgorCWVjaG8gZXhwb3J0IExEX0xJQlJBUllfUEFUSD1gcHdkYDonJCRMRF9MSUJSQVJZX1BBVEgnID4+IGpwZWd0cmFuCisJZWNobyBleGVjIGBwd2RgL2pwZWd0cmFuLXNoYXJlZCAnIiQkQCInICAgICAgICAgICAgICAgPj4ganBlZ3RyYW4KKwljaG1vZCAreCBqcGVndHJhbgorCitqY29uZmlnLmg6IGpjb25maWcuZG9jCisJZWNobyBZb3UgbXVzdCBwcmVwYXJlIGEgc3lzdGVtLWRlcGVuZGVudCBqY29uZmlnLmggZmlsZS4KKwllY2hvIFBsZWFzZSByZWFkIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0aW9ucyBpbiBpbnN0YWxsLmRvYy4KKwlleGl0IDEKKworY2xlYW46CisJJChSTSkgKi5vIGxpYmpwZWcuYSAkKExJQk5BTUUpICQoU09OQU1FKSAkKExOTkFNRSkKKwkkKFJNKSBjanBlZyBkanBlZyBqcGVndHJhbiByZGpwZ2NvbSB3cmpwZ2NvbQorCSQoUk0pIGNqcGVnLXNoYXJlZCBkanBlZy1zaGFyZWQganBlZ3RyYW4tc2hhcmVkCisJJChSTSkgY2pwZWctc3RhdGljIGRqcGVnLXN0YXRpYyBqcGVndHJhbi1zdGF0aWMKKwkkKFJNKSBjb3JlIHRlc3RvdXQqCisJJChSTSkganNpbWRjZmcuaW5jCisKK3Rlc3Q6IGNqcGVnIGRqcGVnIGpwZWd0cmFuCisJJChSTSkgdGVzdG91dCoKKwkuL2RqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dC5wcG0gJChzcmNkaXIpL3Rlc3RvcmlnLmpwZworCS4vZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCAkKHNyY2RpcikvdGVzdG9yaWcuanBnCisJLi9janBlZyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0LmpwZyAkKHNyY2RpcikvdGVzdGltZy5wcG0KKwkuL2RqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dHAucHBtICQoc3JjZGlyKS90ZXN0cHJvZy5qcGcKKwkuL2NqcGVnIC1kY3QgaW50IC1wcm9ncmVzc2l2ZSAtb3B0IC1vdXRmaWxlIHRlc3RvdXRwLmpwZyAkKHNyY2RpcikvdGVzdGltZy5wcG0KKwkuL2pwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyAkKHNyY2RpcikvdGVzdHByb2cuanBnCisJY21wICQoc3JjZGlyKS90ZXN0aW1nLnBwbSB0ZXN0b3V0LnBwbQorCWNtcCAkKHNyY2RpcikvdGVzdGltZy5ibXAgdGVzdG91dC5ibXAKKwljbXAgJChzcmNkaXIpL3Rlc3RpbWcuanBnIHRlc3RvdXQuanBnCisJY21wICQoc3JjZGlyKS90ZXN0aW1nLnBwbSB0ZXN0b3V0cC5wcG0KKwljbXAgJChzcmNkaXIpL3Rlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKKwljbXAgJChzcmNkaXIpL3Rlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKKwordGVzdC1zdGF0aWM6IGNqcGVnLXN0YXRpYyBkanBlZy1zdGF0aWMganBlZ3RyYW4tc3RhdGljCisJJChSTSkgdGVzdG91dCoKKwkuL2RqcGVnLXN0YXRpYyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXQucHBtICQoc3JjZGlyKS90ZXN0b3JpZy5qcGcKKwkuL2RqcGVnLXN0YXRpYyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlIHRlc3RvdXQuYm1wICQoc3JjZGlyKS90ZXN0b3JpZy5qcGcKKwkuL2NqcGVnLXN0YXRpYyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0LmpwZyAkKHNyY2RpcikvdGVzdGltZy5wcG0KKwkuL2RqcGVnLXN0YXRpYyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRwLnBwbSAkKHNyY2RpcikvdGVzdHByb2cuanBnCisJLi9janBlZy1zdGF0aWMgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgdGVzdG91dHAuanBnICQoc3JjZGlyKS90ZXN0aW1nLnBwbQorCS4vanBlZ3RyYW4tc3RhdGljIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyAkKHNyY2RpcikvdGVzdHByb2cuanBnCisJY21wICQoc3JjZGlyKS90ZXN0aW1nLnBwbSB0ZXN0b3V0LnBwbQorCWNtcCAkKHNyY2RpcikvdGVzdGltZy5ibXAgdGVzdG91dC5ibXAKKwljbXAgJChzcmNkaXIpL3Rlc3RpbWcuanBnIHRlc3RvdXQuanBnCisJY21wICQoc3JjZGlyKS90ZXN0aW1nLnBwbSB0ZXN0b3V0cC5wcG0KKwljbXAgJChzcmNkaXIpL3Rlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKKwljbXAgJChzcmNkaXIpL3Rlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKKworCitpbnN0YWxsOiBpbnN0YWxsLWxpYiBpbnN0YWxsLWFwcCBpbnN0YWxsLW1hbgorCitpbnN0YWxsLWFwcC1zdGF0aWM6IGNqcGVnLXN0YXRpYyBkanBlZy1zdGF0aWMganBlZ3RyYW4tc3RhdGljCisJLUBpZiBbICEgLWQgJChiaW5kaXIpIF07IHRoZW4gbWtkaXIgLXAgJChiaW5kaXIpOyBmaQorCSQoSU5TVEFMTF9QUk9HUkFNKSBjanBlZy1zdGF0aWMgICAgJChiaW5kaXIpLyQoYmlucHJlZml4KWNqcGVnLXN0YXRpYworCSQoSU5TVEFMTF9QUk9HUkFNKSBkanBlZy1zdGF0aWMgICAgJChiaW5kaXIpLyQoYmlucHJlZml4KWRqcGVnLXN0YXRpYworCSQoSU5TVEFMTF9QUk9HUkFNKSBqcGVndHJhbi1zdGF0aWMgJChiaW5kaXIpLyQoYmlucHJlZml4KWpwZWd0cmFuLXN0YXRpYworCitpbnN0YWxsLWFwcDogaW5zdGFsbC1saWIgY2pwZWctc2hhcmVkIGRqcGVnLXNoYXJlZCBqcGVndHJhbi1zaGFyZWQgcmRqcGdjb20gd3JqcGdjb20KKwktQGlmIFsgISAtZCAkKGJpbmRpcikgXTsgdGhlbiBta2RpciAtcCAkKGJpbmRpcik7IGZpCisJJChJTlNUQUxMX1BST0dSQU0pIGNqcGVnLXNoYXJlZCAgICAkKGJpbmRpcikvJChiaW5wcmVmaXgpY2pwZWcKKwkkKElOU1RBTExfUFJPR1JBTSkgZGpwZWctc2hhcmVkICAgICQoYmluZGlyKS8kKGJpbnByZWZpeClkanBlZworCSQoSU5TVEFMTF9QUk9HUkFNKSBqcGVndHJhbi1zaGFyZWQgJChiaW5kaXIpLyQoYmlucHJlZml4KWpwZWd0cmFuCisJJChJTlNUQUxMX1BST0dSQU0pIHJkanBnY29tICAgICAgICAkKGJpbmRpcikvJChiaW5wcmVmaXgpcmRqcGdjb20KKwkkKElOU1RBTExfUFJPR1JBTSkgd3JqcGdjb20gICAgICAgICQoYmluZGlyKS8kKGJpbnByZWZpeCl3cmpwZ2NvbQorCitpbnN0YWxsLW1hbjogY2pwZWcuMSBkanBlZy4xIGpwZWd0cmFuLjEgcmRqcGdjb20uMSB3cmpwZ2NvbS4xCisJLUBpZiBbICEgLWQgJChtYW5kaXIpIF07IHRoZW4gbWtkaXIgLXAgJChtYW5kaXIpOyBmaQorCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvY2pwZWcuMSAgICAkKG1hbmRpcikvJChtYW5wcmVmaXgpY2pwZWcuJChtYW5leHQpCisJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9kanBlZy4xICAgICQobWFuZGlyKS8kKG1hbnByZWZpeClkanBlZy4kKG1hbmV4dCkKKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2pwZWd0cmFuLjEgJChtYW5kaXIpLyQobWFucHJlZml4KWpwZWd0cmFuLiQobWFuZXh0KQorCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvcmRqcGdjb20uMSAkKG1hbmRpcikvJChtYW5wcmVmaXgpcmRqcGdjb20uJChtYW5leHQpCisJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS93cmpwZ2NvbS4xICQobWFuZGlyKS8kKG1hbnByZWZpeCl3cmpwZ2NvbS4kKG1hbmV4dCkKKworaW5zdGFsbC1saWI6IGluc3RhbGwtaGVhZGVycyBsaWJqcGVnLmEgJChMSUJOQU1FKQorCS1AaWYgWyAhIC1kICQobGliZGlyKSBdOyB0aGVuIG1rZGlyIC1wICQobGliZGlyKTsgZmkKKwkkKElOU1RBTExfTElCKSAgICBsaWJqcGVnLmEgICQobGliZGlyKS9saWJqcGVnLmEKKwkkKElOU1RBTExfU0hBUkVEKSAkKExJQk5BTUUpICQobGliZGlyKS8kKExJQk5BTUUpCisJKGNkICQobGliZGlyKTsgbG4gLXNmICQoTElCTkFNRSkgJChTT05BTUUpOyBsbiAtc2YgJChMSUJOQU1FKSAkKExOTkFNRSkpCisKK2luc3RhbGwtaGVhZGVyczogamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCisJLUBpZiBbICEgLWQgJChpbmNsdWRlZGlyKSBdOyB0aGVuIG1rZGlyIC1wICQoaW5jbHVkZWRpcik7IGZpCisJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qY29uZmlnLmggICQoaW5jbHVkZWRpcikvamNvbmZpZy5oCisJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qcGVnbGliLmggICQoaW5jbHVkZWRpcikvanBlZ2xpYi5oCisJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qbW9yZWNmZy5oICQoaW5jbHVkZWRpcikvam1vcmVjZmcuaAorCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvamVycm9yLmggICAkKGluY2x1ZGVkaXIpL2plcnJvci5oCisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWxpYiB1bmluc3RhbGwtYXBwIHVuaW5zdGFsbC1tYW4KKwordW5pbnN0YWxsLWFwcC1zdGF0aWM6CisJJChSTSkgJChiaW5kaXIpLyQoYmlucHJlZml4KWNqcGVnLXN0YXRpYworCSQoUk0pICQoYmluZGlyKS8kKGJpbnByZWZpeClkanBlZy1zdGF0aWMKKwkkKFJNKSAkKGJpbmRpcikvJChiaW5wcmVmaXgpanBlZ3RyYW4tc3RhdGljCisKK3VuaW5zdGFsbC1hcHA6IHVuaW5zdGFsbC1saWIKKwkkKFJNKSAkKGJpbmRpcikvJChiaW5wcmVmaXgpY2pwZWcKKwkkKFJNKSAkKGJpbmRpcikvJChiaW5wcmVmaXgpZGpwZWcKKwkkKFJNKSAkKGJpbmRpcikvJChiaW5wcmVmaXgpanBlZ3RyYW4KKwkkKFJNKSAkKGJpbmRpcikvJChiaW5wcmVmaXgpcmRqcGdjb20KKwkkKFJNKSAkKGJpbmRpcikvJChiaW5wcmVmaXgpd3JqcGdjb20KKwordW5pbnN0YWxsLW1hbjoKKwkkKFJNKSAkKG1hbmRpcikvJChtYW5wcmVmaXgpY2pwZWcuJChtYW5leHQpCisJJChSTSkgJChtYW5kaXIpLyQobWFucHJlZml4KWRqcGVnLiQobWFuZXh0KQorCSQoUk0pICQobWFuZGlyKS8kKG1hbnByZWZpeClqcGVndHJhbi4kKG1hbmV4dCkKKwkkKFJNKSAkKG1hbmRpcikvJChtYW5wcmVmaXgpcmRqcGdjb20uJChtYW5leHQpCisJJChSTSkgJChtYW5kaXIpLyQobWFucHJlZml4KXdyanBnY29tLiQobWFuZXh0KQorCit1bmluc3RhbGwtbGliOiB1bmluc3RhbGwtaGVhZGVycworCSQoUk0pICQobGliZGlyKS9saWJqcGVnLmEKKwkkKFJNKSAkKGxpYmRpcikvJChMSUJOQU1FKQorCSQoUk0pICQobGliZGlyKS8kKFNPTkFNRSkKKwkkKFJNKSAkKGxpYmRpcikvJChMTk5BTUUpCisKK3VuaW5zdGFsbC1oZWFkZXJzOgorCSQoUk0pICQoaW5jbHVkZWRpcikvamNvbmZpZy5oCisJJChSTSkgJChpbmNsdWRlZGlyKS9qcGVnbGliLmgKKwkkKFJNKSAkKGluY2x1ZGVkaXIpL2ptb3JlY2ZnLmgKKwkkKFJNKSAkKGluY2x1ZGVkaXIpL2plcnJvci5oCisKKworanNpbWRjZmcuaW5jOiBtYWtlY2ZnLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCisJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gbWFrZWNmZyAkKHNyY2RpcikvbWFrZWNmZy5jICQoTERMSUJTKQorCS4vbWFrZWNmZyA+IGpzaW1kY2ZnLmluYworCSQoUk0pIC4vbWFrZWNmZworCisuU1VGRklYRVM6IC5jIC5hc20gLm8gLnBpYy5vCisKKyUucGljLm8gOiAlLmMKKwkkKENDKSAkKENGTEFHUykgLWZQSUMgLWMgLW8gJEAgJDwKKworJS5waWMubyA6ICUuYXNtCisJJChOQVNNKSAkKE5BRkxBR1MpIC1EUElDIC1vICRAICQ8CisKKyUubyA6ICUuYXNtCisJJChOQVNNKSAkKE5BRkxBR1MpIC1vICRAICQ8CisKK2pzaW1kY3B1Lm8ganNpbWRjcHUucGljLm86IGpzaW1kY3B1LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jCitqc2ltZHczMi5vIGpzaW1kdzMyLnBpYy5vOiBqc2ltZHczMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYworanNpbWRkamcubyBqc2ltZGRqZy5waWMubzoganNpbWRkamcuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pjY29sbW14Lm8gamNjb2xtbXgucGljLm86IGpjY29sbW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNjb2xzczIubyBqY2NvbHNzMi5waWMubzogamNjb2xzczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY3NhbW1teC5vIGpjc2FtbW14LnBpYy5vOiBqY3NhbW1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjc2Ftc3MyLm8gamNzYW1zczIucGljLm86IGpjc2Ftc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRjb2xtbXgubyBqZGNvbG1teC5waWMubzogamRjb2xtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZGNvbHNzMi5vIGpkY29sc3MyLnBpYy5vOiBqZGNvbHNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkbWVybW14Lm8gamRtZXJtbXgucGljLm86IGpkbWVybW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRtZXJzczIubyBqZG1lcnNzMi5waWMubzogamRtZXJzczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZHNhbW1teC5vIGpkc2FtbW14LnBpYy5vOiBqZHNhbW1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkc2Ftc3MyLm8gamRzYW1zczIucGljLm86IGpkc2Ftc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNxbnRpbnQubyBqY3FudGludC5waWMubzogamNxbnRpbnQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50Zmx0Lm8gamNxbnRmbHQucGljLm86IGpjcW50Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudG1teC5vIGpjcW50bW14LnBpYy5vOiBqY3FudG1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnQzZG4ubyBqY3FudDNkbi5waWMubzogamNxbnQzZG4uYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50czJpLm8gamNxbnRzMmkucGljLm86IGpjcW50czJpLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHNzZS5vIGpjcW50c3NlLnBpYy5vOiBqY3FudHNzZS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRzMmYubyBqY3FudHMyZi5waWMubzogamNxbnRzMmYuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmZGN0aW50Lm8gamZkY3RpbnQucGljLm86IGpmZGN0aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGZzdC5vIGpmZGN0ZnN0LnBpYy5vOiBqZmRjdGZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZkY3RmbHQubyBqZmRjdGZsdC5waWMubzogamZkY3RmbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmbW14aW50Lm8gamZtbXhpbnQucGljLm86IGpmbW14aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGZzdC5vIGpmbW14ZnN0LnBpYy5vOiBqZm1teGZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamYzZG5mbHQubyBqZjNkbmZsdC5waWMubzogamYzZG5mbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmc3MyaW50Lm8gamZzczJpbnQucGljLm86IGpmc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmZzdC5vIGpmc3MyZnN0LnBpYy5vOiBqZnNzMmZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZzc2VmbHQubyBqZnNzZWZsdC5waWMubzogamZzc2VmbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppZGN0aW50Lm8gamlkY3RpbnQucGljLm86IGppZGN0aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZzdC5vIGppZGN0ZnN0LnBpYy5vOiBqaWRjdGZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3RyZWQubyBqaWRjdHJlZC5waWMubzogamlkY3RyZWQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppZGN0Zmx0Lm8gamlkY3RmbHQucGljLm86IGppZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teGludC5vIGppbW14aW50LnBpYy5vOiBqaW1teGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamltbXhmc3QubyBqaW1teGZzdC5waWMubzogamltbXhmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppbW14cmVkLm8gamltbXhyZWQucGljLm86IGppbW14cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaTNkbmZsdC5vIGppM2RuZmx0LnBpYy5vOiBqaTNkbmZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJpbnQubyBqaXNzMmludC5waWMubzogamlzczJpbnQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3MyZnN0Lm8gamlzczJmc3QucGljLm86IGppc3MyZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMnJlZC5vIGppc3MycmVkLnBpYy5vOiBqaXNzMnJlZC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzc2VmbHQubyBqaXNzZWZsdC5waWMubzogamlzc2VmbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3MyZmx0Lm8gamlzczJmbHQucGljLm86IGppc3MyZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCisKK2pzaW1kZ2NjLm8ganNpbWRnY2MucGljLm86IGpzaW1kZ2NjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmgKKworamNhcGltaW4ubyBqY2FwaW1pbi5waWMubzogamNhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjYXBpc3RkLm8gamNhcGlzdGQucGljLm86IGpjYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY2NvZWZjdC5vIGpjY29lZmN0LnBpYy5vOiBqY2NvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNjb2xvci5vIGpjY29sb3IucGljLm86IGpjY29sb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramNkY3RtZ3IubyBqY2RjdG1nci5waWMubzogamNkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCitqY2h1ZmYubyBqY2h1ZmYucGljLm86IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY2h1ZmYuaAoramNpbml0Lm8gamNpbml0LnBpYy5vOiBqY2luaXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjbWFpbmN0Lm8gamNtYWluY3QucGljLm86IGpjbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY21hcmtlci5vIGpjbWFya2VyLnBpYy5vOiBqY21hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNtYXN0ZXIubyBqY21hc3Rlci5waWMubzogamNtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjb21hcGkubyBqY29tYXBpLnBpYy5vOiBqY29tYXBpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY3BhcmFtLm8gamNwYXJhbS5waWMubzogamNwYXJhbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNwaHVmZi5vIGpjcGh1ZmYucGljLm86IGpjcGh1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNodWZmLmgKK2pjcHJlcGN0Lm8gamNwcmVwY3QucGljLm86IGpjcHJlcGN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY3NhbXBsZS5vIGpjc2FtcGxlLnBpYy5vOiBqY3NhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCitqY3RyYW5zLm8gamN0cmFucy5waWMubzogamN0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRhcGltaW4ubyBqZGFwaW1pbi5waWMubzogamRhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkYXBpc3RkLm8gamRhcGlzdGQucGljLm86IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZGF0YWRzdC5vIGpkYXRhZHN0LnBpYy5vOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCitqZGF0YXNyYy5vIGpkYXRhc3JjLnBpYy5vOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCitqZGNvZWZjdC5vIGpkY29lZmN0LnBpYy5vOiBqZGNvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRjb2xvci5vIGpkY29sb3IucGljLm86IGpkY29sb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramRkY3RtZ3IubyBqZGRjdG1nci5waWMubzogamRkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCitqZGh1ZmYubyBqZGh1ZmYucGljLm86IGpkaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGh1ZmYuaAoramRpbnB1dC5vIGpkaW5wdXQucGljLm86IGpkaW5wdXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkbWFpbmN0Lm8gamRtYWluY3QucGljLm86IGpkbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZG1hcmtlci5vIGpkbWFya2VyLnBpYy5vOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtYXN0ZXIubyBqZG1hc3Rlci5waWMubzogamRtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkbWVyZ2UubyBqZG1lcmdlLnBpYy5vOiBqZG1lcmdlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKK2pkcGh1ZmYubyBqZHBodWZmLnBpYy5vOiBqZHBodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkaHVmZi5oCitqZHBvc3RjdC5vIGpkcG9zdGN0LnBpYy5vOiBqZHBvc3RjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRzYW1wbGUubyBqZHNhbXBsZS5waWMubzogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramR0cmFucy5vIGpkdHJhbnMucGljLm86IGpkdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2plcnJvci5vIGplcnJvci5waWMubzogamVycm9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganZlcnNpb24uaCBqZXJyb3IuaAorIyBqZmRjdGZsdC5vIGpmZGN0Zmx0LnBpYy5vOiBqZmRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamZkY3Rmc3QubyBqZmRjdGZzdC5waWMubzogamZkY3Rmc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGpmZGN0aW50Lm8gamZkY3RpbnQucGljLm86IGpmZGN0aW50LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdGZsdC5vIGppZGN0Zmx0LnBpYy5vOiBqaWRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3Rmc3QubyBqaWRjdGZzdC5waWMubzogamlkY3Rmc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGppZGN0aW50Lm8gamlkY3RpbnQucGljLm86IGppZGN0aW50LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdHJlZC5vIGppZGN0cmVkLnBpYy5vOiBqaWRjdHJlZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKK2pxdWFudDEubyBqcXVhbnQxLnBpYy5vOiBqcXVhbnQxLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqcXVhbnQyLm8ganF1YW50Mi5waWMubzoganF1YW50Mi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoranV0aWxzLm8ganV0aWxzLnBpYy5vOiBqdXRpbHMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2ptZW1tZ3IubyBqbWVtbWdyLnBpYy5vOiBqbWVtbWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAoram1lbWFuc2kubyBqbWVtYW5zaS5waWMubzogam1lbWFuc2kuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitqbWVtbmFtZS5vIGptZW1uYW1lLnBpYy5vOiBqbWVtbmFtZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKK2ptZW1ub2JzLm8gam1lbW5vYnMucGljLm86IGptZW1ub2JzLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAoram1lbWRvcy5vIGptZW1kb3MucGljLm86IGptZW1kb3MuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitqbWVtbWFjLm8gam1lbW1hYy5waWMubzogam1lbW1hYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKK2NqcGVnLm86IGNqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIGp2ZXJzaW9uLmgKK2RqcGVnLm86IGRqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIGp2ZXJzaW9uLmgKK2pwZWd0cmFuLm86IGpwZWd0cmFuLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIHRyYW5zdXBwLmgganZlcnNpb24uaAorcmRqcGdjb20ubzogcmRqcGdjb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaAord3JqcGdjb20ubzogd3JqcGdjb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaAorY2RqcGVnLm86IGNkanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAorcmRjb2xtYXAubzogcmRjb2xtYXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3Jkc3dpdGNoLm86IHJkc3dpdGNoLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCit0cmFuc3VwcC5vOiB0cmFuc3VwcC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCB0cmFuc3VwcC5oCityZHBwbS5vOiByZHBwbS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAord3JwcG0ubzogd3JwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3JkZ2lmLm86IHJkZ2lmLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCit3cmdpZi5vOiB3cmdpZi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAorcmR0YXJnYS5vOiByZHRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCit3cnRhcmdhLm86IHdydGFyZ2EuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3JkYm1wLm86IHJkYm1wLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCit3cmJtcC5vOiB3cmJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAorcmRybGUubzogcmRybGUuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3dycmxlLm86IHdycmxlLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCmRpZmYgLS1naXQgYS9tYWtlZmlsZS5tZ3cgYi9tYWtlZmlsZS5tZ3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmMDllMAotLS0gL2Rldi9udWxsCisrKyBiL21ha2VmaWxlLm1ndwpAQCAtMCwwICsxLDI5OCBAQAorIyBNYWtlZmlsZSBmb3IgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlCisjIE1vZGlmaWVkIGZvciB4ODYgU0lNRCBleHRlbnNpb24KKworIyBUaGlzIG1ha2VmaWxlIGlzIGZvciBNaW5HVy4KKworIyBSZWFkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYmVmb3JlIHNheWluZyAibWFrZSIgISEKKworc3JjZGlyID0gLgorVlBBVEggID0gJChzcmNkaXIpCisKKyMgVGhlIG5hbWUgb2YgeW91ciBDIGNvbXBpbGVyOgorQ0M9IGdjYworCisjIFlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlc2UgY2Mgb3B0aW9uczoKKyMgRm9yIGdjYyAzLjQueAorQ0ZMQUdTPSAtTzIgLW10dW5lPXBlbnRpdW0yIC1tYXJjaD1pMzg2IC1mb21pdC1mcmFtZS1wb2ludGVyIC1md2ViIFwKKyAgICAgICAgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MiAtbW5vLWFsaWduLXN0cmluZ29wcyAtSSQoc3JjZGlyKQorIyBGb3IgZ2NjIDMuMy54CisjQ0ZMQUdTPSAtTzIgLW1jcHU9cGVudGl1bTIgLW1hcmNoPWkzODYgLWZvbWl0LWZyYW1lLXBvaW50ZXIgXAorIyAgICAgICAgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MiAtbW5vLWFsaWduLXN0cmluZ29wcyAtSSQoc3JjZGlyKQorIyBHZW5lcmFsbHksIHdlIHJlY29tbWVuZCBkZWZpbmluZyBhbnkgY29uZmlndXJhdGlvbiBzeW1ib2xzIGluIGpjb25maWcuaCwKKyMgTk9UIHZpYSAtRCBzd2l0Y2hlcyBoZXJlLgorCisjIFRoZSBleGVjdXRhYmxlIG5hbWUgb2YgTkFTTSBhbmQgaXRzIG9wdGlvbnM6CitOQVNNPSBuYXNtdworTkFGTEFHUz0gJChOQVNNX09CSkZNVCkgLUkkKHNyY2RpcikvCisjIG9iamVjdCBmaWxlIGZvcm1hdCBzcGVjaWZpZXIgZm9yIE5BU00KKyMgc2VlIGpzaW1kZXh0LmluYyBmb3IgbW9yZSBkZXRhaWxzLgorTkFTTV9PQkpGTVQ9IC1md2luMzIgLURXSU4zMgorCisjIExpbmstdGltZSBjYyBvcHRpb25zOgorTERGTEFHUz0gLXMKKworIyBUbyBsaW5rIGFueSBzcGVjaWFsIGxpYnJhcmllcywgYWRkIHRoZSBuZWNlc3NhcnkgLWwgY29tbWFuZHMgaGVyZS4KK0xETElCUz0gCisKKyMgUHV0IGhlcmUgdGhlIG9iamVjdCBmaWxlIG5hbWUgZm9yIHRoZSBjb3JyZWN0IHN5c3RlbS1kZXBlbmRlbnQgbWVtb3J5CisjIG1hbmFnZXIgZmlsZS4KK1NZU0RFUE1FTT0gam1lbW5vYnMubworCisjIE9TLWRlcGVuZGVudCBTSU1EIGluc3RydWN0aW9uIHN1cHBvcnQgY2hlY2tlcgorIyBqc2ltZHczMi5vIChXaW4zMikgLyBqc2ltZGRqZy5vIChESkdQUCBWLjIpIC8ganNpbWRnY2MubyAoVW5peC9nY2MpCitTWVNERVBTSU1EQ0hLPSBqc2ltZHczMi5vCisKKyMgbWlzY2VsbGFuZW91cyBPUy1kZXBlbmRlbnQgc3R1ZmYKKyMgbGlua2VyCitMTj0gJChDQykKKyMgZmlsZSBkZWxldGlvbiBjb21tYW5kCitSTT0gZGVsCisjIGxpYnJhcnkgKC5hKSBmaWxlIGNyZWF0aW9uIGNvbW1hbmQKK0FSPSBhciByYworIyBzZWNvbmQgc3RlcCBpbiAuYSBjcmVhdGlvbiAodXNlICJ0b3VjaCIgaWYgbm90IG5lZWRlZCkKK0FSMj0gcmFubGliCisKKyMgRW5kIG9mIGNvbmZpZ3VyYWJsZSBvcHRpb25zLgorCisKKyMgc291cmNlIGZpbGVzOiBKUEVHIGxpYnJhcnkgcHJvcGVyCitMSUJTT1VSQ0VTPSBqY2FwaW1pbi5jIGpjYXBpc3RkLmMgamNjb2VmY3QuYyBqY2NvbG9yLmMgamNkY3RtZ3IuYyBqY2h1ZmYuYyBcCisgICAgICAgIGpjaW5pdC5jIGpjbWFpbmN0LmMgamNtYXJrZXIuYyBqY21hc3Rlci5jIGpjb21hcGkuYyBqY3BhcmFtLmMgXAorICAgICAgICBqY3BodWZmLmMgamNwcmVwY3QuYyBqY3NhbXBsZS5jIGpjdHJhbnMuYyBqZGFwaW1pbi5jIGpkYXBpc3RkLmMgXAorICAgICAgICBqZGF0YWRzdC5jIGpkYXRhc3JjLmMgamRjb2VmY3QuYyBqZGNvbG9yLmMgamRkY3RtZ3IuYyBqZGh1ZmYuYyBcCisgICAgICAgIGpkaW5wdXQuYyBqZG1haW5jdC5jIGpkbWFya2VyLmMgamRtYXN0ZXIuYyBqZG1lcmdlLmMgamRwaHVmZi5jIFwKKyAgICAgICAgamRwb3N0Y3QuYyBqZHNhbXBsZS5jIGpkdHJhbnMuYyBqZXJyb3IuYyBqZmRjdGZsdC5jIGpmZGN0ZnN0LmMgXAorICAgICAgICBqZmRjdGludC5jIGppZGN0Zmx0LmMgamlkY3Rmc3QuYyBqaWRjdGludC5jIGppZGN0cmVkLmMganF1YW50MS5jIFwKKyAgICAgICAganF1YW50Mi5jIGp1dGlscy5jIGptZW1tZ3IuYworIyBtZW1tZ3IgYmFjayBlbmRzOiBjb21waWxlIG9ubHkgb25lIG9mIHRoZXNlIGludG8gYSB3b3JraW5nIGxpYnJhcnkKK1NZU0RFUFNPVVJDRVM9IGptZW1hbnNpLmMgam1lbW5hbWUuYyBqbWVtbm9icy5jIGptZW1kb3MuYyBqbWVtbWFjLmMKKyMgc291cmNlIGZpbGVzOiBjanBlZy9kanBlZy9qcGVndHJhbiBhcHBsaWNhdGlvbnMsIGFsc28gcmRqcGdjb20vd3JqcGdjb20KK0FQUFNPVVJDRVM9IGNqcGVnLmMgZGpwZWcuYyBqcGVndHJhbi5jIHJkanBnY29tLmMgd3JqcGdjb20uYyBjZGpwZWcuYyBcCisgICAgICAgIHJkY29sbWFwLmMgcmRzd2l0Y2guYyB0cmFuc3VwcC5jIHJkcHBtLmMgd3JwcG0uYyByZGdpZi5jIHdyZ2lmLmMgXAorICAgICAgICByZHRhcmdhLmMgd3J0YXJnYS5jIHJkYm1wLmMgd3JibXAuYyByZHJsZS5jIHdycmxlLmMKK1NPVVJDRVM9ICQoTElCU09VUkNFUykgJChTWVNERVBTT1VSQ0VTKSAkKEFQUFNPVVJDRVMpCisjIGZpbGVzIGluY2x1ZGVkIGJ5IHNvdXJjZSBmaWxlcworSU5DTFVERVM9IGpjaHVmZi5oIGpkaHVmZi5oIGpkY3QuaCBqZXJyb3IuaCBqaW5jbHVkZS5oIGptZW1zeXMuaCBqbW9yZWNmZy5oIFwKKyAgICAgICAganBlZ2ludC5oIGpwZWdsaWIuaCBqdmVyc2lvbi5oIGNkanBlZy5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oCisjIGRvY3VtZW50YXRpb24sIHRlc3QsIGFuZCBzdXBwb3J0IGZpbGVzCitET0NTPSBSRUFETUUgaW5zdGFsbC5kb2MgdXNhZ2UuZG9jIGNqcGVnLjEgZGpwZWcuMSBqcGVndHJhbi4xIHJkanBnY29tLjEgXAorICAgICAgICB3cmpwZ2NvbS4xIHdpemFyZC5kb2MgZXhhbXBsZS5jIGxpYmpwZWcuZG9jIHN0cnVjdHVyZS5kb2MgXAorICAgICAgICBjb2RlcnVsZXMuZG9jIGZpbGVsaXN0LmRvYyBjaGFuZ2UubG9nCitNS0ZJTEVTPSBjb25maWd1cmUgbWFrZWZpbGUuY2ZnIG1ha2VmaWxlLmFuc2kgbWFrZWZpbGUudW5peCBtYWtlZmlsZS5iY2MgXAorICAgICAgICBtYWtlZmlsZS5tYzYgbWFrZWZpbGUuZGogbWFrZWZpbGUud2F0IG1ha2VmaWxlLnZjIG1ha2VsaWIuZHMgXAorICAgICAgICBtYWtlYXBwcy5kcyBtYWtlcHJvai5tYWMgbWFrY2pwZWcuc3QgbWFrZGpwZWcuc3QgbWFrbGpwZWcuc3QgXAorICAgICAgICBtYWt0anBlZy5zdCBtYWtlZmlsZS5tYW54IG1ha2VmaWxlLnNhcyBtYWtlZmlsZS5tbXMgbWFrZWZpbGUudm1zIFwKKyAgICAgICAgbWFrdm1zLm9wdAorQ09ORklHRklMRVM9IGpjb25maWcuY2ZnIGpjb25maWcuYmNjIGpjb25maWcubWM2IGpjb25maWcuZGogamNvbmZpZy53YXQgXAorICAgICAgICBqY29uZmlnLnZjIGpjb25maWcubWFjIGpjb25maWcuc3QgamNvbmZpZy5tYW54IGpjb25maWcuc2FzIFwKKyAgICAgICAgamNvbmZpZy52bXMKK0NPTkZJR1VSRUZJTEVTPSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBpbnN0YWxsLXNoIGx0Y29uZmlnIGx0bWFpbi5zaAorT1RIRVJGSUxFUz0gamNvbmZpZy5kb2MgY2tjb25maWcuYyBhbnNpMmtuci5jIGFuc2kya25yLjEgam1lbWRvc2EuYXNtCitURVNURklMRVM9IHRlc3RvcmlnLmpwZyB0ZXN0aW1nLnBwbSB0ZXN0aW1nLmJtcCB0ZXN0aW1nLmpwZyB0ZXN0cHJvZy5qcGcgXAorICAgICAgICB0ZXN0aW1ncC5qcGcKK0RJU1RGSUxFUz0gJChET0NTKSAkKE1LRklMRVMpICQoQ09ORklHRklMRVMpICQoU09VUkNFUykgJChJTkNMVURFUykgXAorICAgICAgICAkKENPTkZJR1VSRUZJTEVTKSAkKE9USEVSRklMRVMpICQoVEVTVEZJTEVTKQorIyBsaWJyYXJ5IG9iamVjdCBmaWxlcyBjb21tb24gdG8gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KK0NPTU9CSkVDVFM9IGpjb21hcGkubyBqdXRpbHMubyBqZXJyb3IubyBqbWVtbWdyLm8gJChTWVNERVBNRU0pIGpzaW1kY3B1Lm8gXAorICAgICAgICAkKFNZU0RFUFNJTURDSEspCisjIGNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCitDTElCT0JKRUNUUz0gamNhcGltaW4ubyBqY2FwaXN0ZC5vIGpjdHJhbnMubyBqY3BhcmFtLm8gamRhdGFkc3QubyBqY2luaXQubyBcCisgICAgICAgIGpjbWFzdGVyLm8gamNtYXJrZXIubyBqY21haW5jdC5vIGpjcHJlcGN0Lm8gamNjb2VmY3QubyBqY2NvbG9yLm8gXAorICAgICAgICBqY3NhbXBsZS5vIGpjaHVmZi5vIGpjcGh1ZmYubyBqY2RjdG1nci5vIGpjY29sbW14Lm8gamNjb2xzczIubyBcCisgICAgICAgIGpjc2FtbW14Lm8gamNzYW1zczIubyBqY3FudGludC5vIGpjcW50Zmx0Lm8gamNxbnRtbXgubyBqY3FudDNkbi5vIFwKKyAgICAgICAgamNxbnRzMmkubyBqY3FudHNzZS5vIGpjcW50czJmLm8gamZkY3RpbnQubyBqZmRjdGZzdC5vIGpmZGN0Zmx0Lm8gXAorICAgICAgICBqZm1teGludC5vIGpmbW14ZnN0Lm8gamYzZG5mbHQubyBqZnNzMmludC5vIGpmc3MyZnN0Lm8gamZzc2VmbHQubworIyBkZWNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCitETElCT0JKRUNUUz0gamRhcGltaW4ubyBqZGFwaXN0ZC5vIGpkdHJhbnMubyBqZGF0YXNyYy5vIGpkbWFzdGVyLm8gXAorICAgICAgICBqZGlucHV0Lm8gamRtYXJrZXIubyBqZGh1ZmYubyBqZHBodWZmLm8gamRtYWluY3QubyBqZGNvZWZjdC5vIFwKKyAgICAgICAgamRwb3N0Y3QubyBqZGRjdG1nci5vIGpkc2FtcGxlLm8gamRjb2xvci5vIGpxdWFudDEubyBqcXVhbnQyLm8gXAorICAgICAgICBqZG1lcmdlLm8gamlkY3RpbnQubyBqaWRjdGZzdC5vIGppZGN0cmVkLm8gamlkY3RmbHQubyBqaW1teGludC5vIFwKKyAgICAgICAgamltbXhmc3QubyBqaW1teHJlZC5vIGppM2RuZmx0Lm8gamlzczJpbnQubyBqaXNzMmZzdC5vIGppc3MycmVkLm8gXAorICAgICAgICBqaXNzZWZsdC5vIGppc3MyZmx0Lm8gamRzYW1tbXgubyBqZHNhbXNzMi5vIGpkY29sbW14Lm8gamRjb2xzczIubyBcCisgICAgICAgIGpkbWVybW14Lm8gamRtZXJzczIubworIyBUaGVzZSBvYmplY3RmaWxlcyBhcmUgaW5jbHVkZWQgaW4gbGlianBlZy5hCitMSUJPQkpFQ1RTPSAkKENMSUJPQkpFQ1RTKSAkKERMSUJPQkpFQ1RTKSAkKENPTU9CSkVDVFMpCisjIG9iamVjdCBmaWxlcyBmb3Igc2FtcGxlIGFwcGxpY2F0aW9ucyAoZXhjbHVkaW5nIGxpYnJhcnkgZmlsZXMpCitDT0JKRUNUUz0gY2pwZWcubyByZHBwbS5vIHJkZ2lmLm8gcmR0YXJnYS5vIHJkcmxlLm8gcmRibXAubyByZHN3aXRjaC5vIFwKKyAgICAgICAgY2RqcGVnLm8KK0RPQkpFQ1RTPSBkanBlZy5vIHdycHBtLm8gd3JnaWYubyB3cnRhcmdhLm8gd3JybGUubyB3cmJtcC5vIHJkY29sbWFwLm8gXAorICAgICAgICBjZGpwZWcubworVFJPQkpFQ1RTPSBqcGVndHJhbi5vIHJkc3dpdGNoLm8gY2RqcGVnLm8gdHJhbnN1cHAubworCisKK2FsbDogbGlianBlZy5hIGNqcGVnLmV4ZSBkanBlZy5leGUganBlZ3RyYW4uZXhlIHJkanBnY29tLmV4ZSB3cmpwZ2NvbS5leGUKKworbGlianBlZy5hOiAkKExJQk9CSkVDVFMpCisJLSQoUk0pIGxpYmpwZWcuYQorCSQoQVIpICBsaWJqcGVnLmEgICQoTElCT0JKRUNUUykKKwkkKEFSMikgbGlianBlZy5hCisKK2NqcGVnLmV4ZTogJChDT0JKRUNUUykgbGlianBlZy5hCisJJChMTikgJChMREZMQUdTKSAtbyBjanBlZy5leGUgJChDT0JKRUNUUykgbGlianBlZy5hICQoTERMSUJTKQorCitkanBlZy5leGU6ICQoRE9CSkVDVFMpIGxpYmpwZWcuYQorCSQoTE4pICQoTERGTEFHUykgLW8gZGpwZWcuZXhlICQoRE9CSkVDVFMpIGxpYmpwZWcuYSAkKExETElCUykKKworanBlZ3RyYW4uZXhlOiAkKFRST0JKRUNUUykgbGlianBlZy5hCisJJChMTikgJChMREZMQUdTKSAtbyBqcGVndHJhbi5leGUgJChUUk9CSkVDVFMpIGxpYmpwZWcuYSAkKExETElCUykKKworcmRqcGdjb20uZXhlOiByZGpwZ2NvbS5vCisJJChMTikgJChMREZMQUdTKSAtbyByZGpwZ2NvbS5leGUgcmRqcGdjb20ubyAkKExETElCUykKKword3JqcGdjb20uZXhlOiB3cmpwZ2NvbS5vCisJJChMTikgJChMREZMQUdTKSAtbyB3cmpwZ2NvbS5leGUgd3JqcGdjb20ubyAkKExETElCUykKKworamNvbmZpZy5oOiBqY29uZmlnLmRvYworCWVjaG8gWW91IG11c3QgcHJlcGFyZSBhIHN5c3RlbS1kZXBlbmRlbnQgamNvbmZpZy5oIGZpbGUuCisJZWNobyBQbGVhc2UgcmVhZCB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdGlvbnMgaW4gaW5zdGFsbC5kb2MuCisJZXhpdCAxCisKK2NsZWFuOgorCS0kKFJNKSAqLm8KKwktJChSTSkgY2pwZWcuZXhlCisJLSQoUk0pIGRqcGVnLmV4ZQorCS0kKFJNKSBqcGVndHJhbi5leGUKKwktJChSTSkgcmRqcGdjb20uZXhlCisJLSQoUk0pIHdyanBnY29tLmV4ZQorCS0kKFJNKSBqc2ltZGNmZy5pbmMKKwktJChSTSkgbGlianBlZy5hCisJLSQoUk0pIHRlc3RvdXQqLioKKwordGVzdDogY2pwZWcuZXhlIGRqcGVnLmV4ZSBqcGVndHJhbi5leGUKKwktJChSTSkgdGVzdG91dCouKgorCS4vZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0LnBwbSAkKHNyY2RpcilcdGVzdG9yaWcuanBnCisJLi9kanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlIHRlc3RvdXQuYm1wICQoc3JjZGlyKVx0ZXN0b3JpZy5qcGcKKwkuL2NqcGVnIC1kY3QgaW50IC1vdXRmaWxlIHRlc3RvdXQuanBnICQoc3JjZGlyKVx0ZXN0aW1nLnBwbQorCS4vZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0cC5wcG0gJChzcmNkaXIpXHRlc3Rwcm9nLmpwZworCS4vY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgdGVzdG91dHAuanBnICQoc3JjZGlyKVx0ZXN0aW1nLnBwbQorCS4vanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dHQuanBnICQoc3JjZGlyKVx0ZXN0cHJvZy5qcGcKKwlmYyAvYiAkKHNyY2RpcilcdGVzdGltZy5wcG0gdGVzdG91dC5wcG0KKwlmYyAvYiAkKHNyY2RpcilcdGVzdGltZy5ibXAgdGVzdG91dC5ibXAKKwlmYyAvYiAkKHNyY2RpcilcdGVzdGltZy5qcGcgdGVzdG91dC5qcGcKKwlmYyAvYiAkKHNyY2RpcilcdGVzdGltZy5wcG0gdGVzdG91dHAucHBtCisJZmMgL2IgJChzcmNkaXIpXHRlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKKwlmYyAvYiAkKHNyY2RpcilcdGVzdG9yaWcuanBnIHRlc3RvdXR0LmpwZworCisKK2pzaW1kY2ZnLmluYzogbWFrZWNmZy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAorCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vIG1ha2VjZmcuZXhlICQoc3JjZGlyKS9tYWtlY2ZnLmMgJChMRExJQlMpCisJLlxtYWtlY2ZnLmV4ZSA+IGpzaW1kY2ZnLmluYworCSQoUk0pIG1ha2VjZmcuZXhlCisKKyUubyA6ICUuYXNtCisJJChOQVNNKSAkKE5BRkxBR1MpIC1vICRAICQ8CisKK2pzaW1kY3B1Lm86IGpzaW1kY3B1LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jCitqc2ltZHczMi5vOiBqc2ltZHczMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYworanNpbWRkamcubzoganNpbWRkamcuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pjY29sbW14Lm86IGpjY29sbW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNjb2xzczIubzogamNjb2xzczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY3NhbW1teC5vOiBqY3NhbW1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjc2Ftc3MyLm86IGpjc2Ftc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRjb2xtbXgubzogamRjb2xtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZGNvbHNzMi5vOiBqZGNvbHNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkbWVybW14Lm86IGpkbWVybW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRtZXJzczIubzogamRtZXJzczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZHNhbW1teC5vOiBqZHNhbW1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkc2Ftc3MyLm86IGpkc2Ftc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNxbnRpbnQubzogamNxbnRpbnQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50Zmx0Lm86IGpjcW50Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudG1teC5vOiBqY3FudG1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnQzZG4ubzogamNxbnQzZG4uYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50czJpLm86IGpjcW50czJpLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHNzZS5vOiBqY3FudHNzZS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRzMmYubzogamNxbnRzMmYuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmZGN0aW50Lm86IGpmZGN0aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGZzdC5vOiBqZmRjdGZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZkY3RmbHQubzogamZkY3RmbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmbW14aW50Lm86IGpmbW14aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGZzdC5vOiBqZm1teGZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamYzZG5mbHQubzogamYzZG5mbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmc3MyaW50Lm86IGpmc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmZzdC5vOiBqZnNzMmZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZzc2VmbHQubzogamZzc2VmbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppZGN0aW50Lm86IGppZGN0aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZzdC5vOiBqaWRjdGZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3RyZWQubzogamlkY3RyZWQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppZGN0Zmx0Lm86IGppZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teGludC5vOiBqaW1teGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamltbXhmc3QubzogamltbXhmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppbW14cmVkLm86IGppbW14cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaTNkbmZsdC5vOiBqaTNkbmZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJpbnQubzogamlzczJpbnQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3MyZnN0Lm86IGppc3MyZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMnJlZC5vOiBqaXNzMnJlZC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzc2VmbHQubzogamlzc2VmbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3MyZmx0Lm86IGppc3MyZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCisKK2pzaW1kZ2NjLm86IGpzaW1kZ2NjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmgKKworamNhcGltaW4ubzogamNhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjYXBpc3RkLm86IGpjYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY2NvZWZjdC5vOiBqY2NvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNjb2xvci5vOiBqY2NvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKK2pjZGN0bWdyLm86IGpjZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAoramNodWZmLm86IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY2h1ZmYuaAoramNpbml0Lm86IGpjaW5pdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNtYWluY3QubzogamNtYWluY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjbWFya2VyLm86IGpjbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY21hc3Rlci5vOiBqY21hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNvbWFwaS5vOiBqY29tYXBpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY3BhcmFtLm86IGpjcGFyYW0uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjcGh1ZmYubzogamNwaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY2h1ZmYuaAoramNwcmVwY3QubzogamNwcmVwY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjc2FtcGxlLm86IGpjc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKK2pjdHJhbnMubzogamN0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRhcGltaW4ubzogamRhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkYXBpc3RkLm86IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZGF0YWRzdC5vOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCitqZGF0YXNyYy5vOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCitqZGNvZWZjdC5vOiBqZGNvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRjb2xvci5vOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKK2pkZGN0bWdyLm86IGpkZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAoramRodWZmLm86IGpkaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGh1ZmYuaAoramRpbnB1dC5vOiBqZGlucHV0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZG1haW5jdC5vOiBqZG1haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtYXJrZXIubzogamRtYXJrZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkbWFzdGVyLm86IGpkbWFzdGVyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZG1lcmdlLm86IGpkbWVyZ2UuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramRwaHVmZi5vOiBqZHBodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkaHVmZi5oCitqZHBvc3RjdC5vOiBqZHBvc3RjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRzYW1wbGUubzogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramR0cmFucy5vOiBqZHRyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZXJyb3IubzogamVycm9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganZlcnNpb24uaCBqZXJyb3IuaAorIyBqZmRjdGZsdC5vOiBqZmRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamZkY3Rmc3QubzogamZkY3Rmc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGpmZGN0aW50Lm86IGpmZGN0aW50LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdGZsdC5vOiBqaWRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3Rmc3QubzogamlkY3Rmc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGppZGN0aW50Lm86IGppZGN0aW50LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdHJlZC5vOiBqaWRjdHJlZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKK2pxdWFudDEubzoganF1YW50MS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoranF1YW50Mi5vOiBqcXVhbnQyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqdXRpbHMubzoganV0aWxzLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqbWVtbWdyLm86IGptZW1tZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitqbWVtYW5zaS5vOiBqbWVtYW5zaS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKK2ptZW1uYW1lLm86IGptZW1uYW1lLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAoram1lbW5vYnMubzogam1lbW5vYnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitqbWVtZG9zLm86IGptZW1kb3MuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitqbWVtbWFjLm86IGptZW1tYWMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitjanBlZy5vOiBjanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCitkanBlZy5vOiBkanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCitqcGVndHJhbi5vOiBqcGVndHJhbi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oIGp2ZXJzaW9uLmgKK3JkanBnY29tLm86IHJkanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKK3dyanBnY29tLm86IHdyanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKK2NkanBlZy5vOiBjZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3JkY29sbWFwLm86IHJkY29sbWFwLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCityZHN3aXRjaC5vOiByZHN3aXRjaC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAordHJhbnN1cHAubzogdHJhbnN1cHAuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggdHJhbnN1cHAuaAorcmRwcG0ubzogcmRwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3dycHBtLm86IHdycHBtLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCityZGdpZi5vOiByZGdpZi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAord3JnaWYubzogd3JnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3JkdGFyZ2EubzogcmR0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAord3J0YXJnYS5vOiB3cnRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCityZGJtcC5vOiByZGJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAord3JibXAubzogd3JibXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3JkcmxlLm86IHJkcmxlLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCit3cnJsZS5vOiB3cnJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaApkaWZmIC0tZ2l0IGEvbWFrZWZpbGUubWd3ZGxsIGIvbWFrZWZpbGUubWd3ZGxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YTNlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9tYWtlZmlsZS5tZ3dkbGwKQEAgLTAsMCArMSwzMTAgQEAKKyMgTWFrZWZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQorIyBNb2RpZmllZCBmb3IgeDg2IFNJTUQgZXh0ZW5zaW9uCisKKyMgVGhpcyBtYWtlZmlsZSBpcyBmb3IgTWluR1cuCisjIEl0IGJ1aWxkcyB0aGUgSUpHIGxpYnJhcnkgYXMgYSBkeW5hbWljYWxseSBsaW5rYWJsZSBsaWJyYXJ5ICguRExMKSwKKyMgYW5kIGJ1aWxkcyB0aGUgc2FtcGxlIGFwcGxpY2F0aW9ucyB3aGljaCBhcmUgbGlua2VkIGFnYWluc3QgdGhlIERMTC4KKworIyBSZWFkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYmVmb3JlIHNheWluZyAibWFrZSIgISEKKworc3JjZGlyID0gLgorVlBBVEggID0gJChzcmNkaXIpCisKKyMgVGhlIG5hbWUgb2YgeW91ciBDIGNvbXBpbGVyOgorQ0M9IGdjYworCisjIFlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlc2UgY2Mgb3B0aW9uczoKKyMgRm9yIGdjYyAzLjQueAorQ0ZMQUdTPSAtTzIgLW10dW5lPXBlbnRpdW0yIC1tYXJjaD1pMzg2IC1mb21pdC1mcmFtZS1wb2ludGVyIC1md2ViIFwKKyAgICAgICAgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MiAtbW5vLWFsaWduLXN0cmluZ29wcyAtSSQoc3JjZGlyKQorIyBGb3IgZ2NjIDMuMy54CisjQ0ZMQUdTPSAtTzIgLW1jcHU9cGVudGl1bTIgLW1hcmNoPWkzODYgLWZvbWl0LWZyYW1lLXBvaW50ZXIgXAorIyAgICAgICAgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MiAtbW5vLWFsaWduLXN0cmluZ29wcyAtSSQoc3JjZGlyKQorIyBHZW5lcmFsbHksIHdlIHJlY29tbWVuZCBkZWZpbmluZyBhbnkgY29uZmlndXJhdGlvbiBzeW1ib2xzIGluIGpjb25maWcuaCwKKyMgTk9UIHZpYSAtRCBzd2l0Y2hlcyBoZXJlLgorCisjIFRoZSBleGVjdXRhYmxlIG5hbWUgb2YgTkFTTSBhbmQgaXRzIG9wdGlvbnM6CitOQVNNPSBuYXNtdworTkFGTEFHUz0gJChOQVNNX09CSkZNVCkgLUkkKHNyY2RpcikvCisjIG9iamVjdCBmaWxlIGZvcm1hdCBzcGVjaWZpZXIgZm9yIE5BU00KKyMgc2VlIGpzaW1kZXh0LmluYyBmb3IgbW9yZSBkZXRhaWxzLgorTkFTTV9PQkpGTVQ9IC1md2luMzIgLURXSU4zMgorCisjIExpbmstdGltZSBjYyBvcHRpb25zOgorTERGTEFHUz0gLXMKK0xERkxBR1NfRExMPSAkKExERkxBR1MpIC1zaGFyZWQKKworIyBUbyBsaW5rIGFueSBzcGVjaWFsIGxpYnJhcmllcywgYWRkIHRoZSBuZWNlc3NhcnkgLWwgY29tbWFuZHMgaGVyZS4KK0xETElCUz0gCisKKyMgRExMIHRvIGJ1aWxkCitETExOQU1FID0ganBlZzYyLmRsbAorIyBpbXBvcnQgbGlicmFyeQorTElCTkFNRSA9IGxpYmpwZWcuZGxsLmEKKworIyBQdXQgaGVyZSB0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgdGhlIGNvcnJlY3Qgc3lzdGVtLWRlcGVuZGVudCBtZW1vcnkKKyMgbWFuYWdlciBmaWxlLgorU1lTREVQTUVNPSBqbWVtbm9icy5vCisKKyMgT1MtZGVwZW5kZW50IFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjaGVja2VyCisjIGpzaW1kdzMyLm8gKFdpbjMyKSAvIGpzaW1kZGpnLm8gKERKR1BQIFYuMikgLyBqc2ltZGdjYy5vIChVbml4L2djYykKK1NZU0RFUFNJTURDSEs9IGpzaW1kdzMyLm8KKworIyBtaXNjZWxsYW5lb3VzIE9TLWRlcGVuZGVudCBzdHVmZgorIyBsaW5rZXIKK0xOPSAkKENDKQorIyBmaWxlIGRlbGV0aW9uIGNvbW1hbmQKK1JNPSBkZWwKKyMgbGlicmFyeSAoLmEpIGZpbGUgY3JlYXRpb24gY29tbWFuZAorQVI9IGFyIHJjCisjIHNlY29uZCBzdGVwIGluIC5hIGNyZWF0aW9uICh1c2UgInRvdWNoIiBpZiBub3QgbmVlZGVkKQorQVIyPSByYW5saWIKKworIyBFbmQgb2YgY29uZmlndXJhYmxlIG9wdGlvbnMuCisKKworIyBzb3VyY2UgZmlsZXM6IEpQRUcgbGlicmFyeSBwcm9wZXIKK0xJQlNPVVJDRVM9IGpjYXBpbWluLmMgamNhcGlzdGQuYyBqY2NvZWZjdC5jIGpjY29sb3IuYyBqY2RjdG1nci5jIGpjaHVmZi5jIFwKKyAgICAgICAgamNpbml0LmMgamNtYWluY3QuYyBqY21hcmtlci5jIGpjbWFzdGVyLmMgamNvbWFwaS5jIGpjcGFyYW0uYyBcCisgICAgICAgIGpjcGh1ZmYuYyBqY3ByZXBjdC5jIGpjc2FtcGxlLmMgamN0cmFucy5jIGpkYXBpbWluLmMgamRhcGlzdGQuYyBcCisgICAgICAgIGpkYXRhZHN0LmMgamRhdGFzcmMuYyBqZGNvZWZjdC5jIGpkY29sb3IuYyBqZGRjdG1nci5jIGpkaHVmZi5jIFwKKyAgICAgICAgamRpbnB1dC5jIGpkbWFpbmN0LmMgamRtYXJrZXIuYyBqZG1hc3Rlci5jIGpkbWVyZ2UuYyBqZHBodWZmLmMgXAorICAgICAgICBqZHBvc3RjdC5jIGpkc2FtcGxlLmMgamR0cmFucy5jIGplcnJvci5jIGpmZGN0Zmx0LmMgamZkY3Rmc3QuYyBcCisgICAgICAgIGpmZGN0aW50LmMgamlkY3RmbHQuYyBqaWRjdGZzdC5jIGppZGN0aW50LmMgamlkY3RyZWQuYyBqcXVhbnQxLmMgXAorICAgICAgICBqcXVhbnQyLmMganV0aWxzLmMgam1lbW1nci5jCisjIG1lbW1nciBiYWNrIGVuZHM6IGNvbXBpbGUgb25seSBvbmUgb2YgdGhlc2UgaW50byBhIHdvcmtpbmcgbGlicmFyeQorU1lTREVQU09VUkNFUz0gam1lbWFuc2kuYyBqbWVtbmFtZS5jIGptZW1ub2JzLmMgam1lbWRvcy5jIGptZW1tYWMuYworIyBzb3VyY2UgZmlsZXM6IGNqcGVnL2RqcGVnL2pwZWd0cmFuIGFwcGxpY2F0aW9ucywgYWxzbyByZGpwZ2NvbS93cmpwZ2NvbQorQVBQU09VUkNFUz0gY2pwZWcuYyBkanBlZy5jIGpwZWd0cmFuLmMgcmRqcGdjb20uYyB3cmpwZ2NvbS5jIGNkanBlZy5jIFwKKyAgICAgICAgcmRjb2xtYXAuYyByZHN3aXRjaC5jIHRyYW5zdXBwLmMgcmRwcG0uYyB3cnBwbS5jIHJkZ2lmLmMgd3JnaWYuYyBcCisgICAgICAgIHJkdGFyZ2EuYyB3cnRhcmdhLmMgcmRibXAuYyB3cmJtcC5jIHJkcmxlLmMgd3JybGUuYworU09VUkNFUz0gJChMSUJTT1VSQ0VTKSAkKFNZU0RFUFNPVVJDRVMpICQoQVBQU09VUkNFUykKKyMgZmlsZXMgaW5jbHVkZWQgYnkgc291cmNlIGZpbGVzCitJTkNMVURFUz0gamNodWZmLmggamRodWZmLmggamRjdC5oIGplcnJvci5oIGppbmNsdWRlLmggam1lbXN5cy5oIGptb3JlY2ZnLmggXAorICAgICAgICBqcGVnaW50LmgganBlZ2xpYi5oIGp2ZXJzaW9uLmggY2RqcGVnLmggY2RlcnJvci5oIHRyYW5zdXBwLmgKKyMgZG9jdW1lbnRhdGlvbiwgdGVzdCwgYW5kIHN1cHBvcnQgZmlsZXMKK0RPQ1M9IFJFQURNRSBpbnN0YWxsLmRvYyB1c2FnZS5kb2MgY2pwZWcuMSBkanBlZy4xIGpwZWd0cmFuLjEgcmRqcGdjb20uMSBcCisgICAgICAgIHdyanBnY29tLjEgd2l6YXJkLmRvYyBleGFtcGxlLmMgbGlianBlZy5kb2Mgc3RydWN0dXJlLmRvYyBcCisgICAgICAgIGNvZGVydWxlcy5kb2MgZmlsZWxpc3QuZG9jIGNoYW5nZS5sb2cKK01LRklMRVM9IGNvbmZpZ3VyZSBtYWtlZmlsZS5jZmcgbWFrZWZpbGUuYW5zaSBtYWtlZmlsZS51bml4IG1ha2VmaWxlLmJjYyBcCisgICAgICAgIG1ha2VmaWxlLm1jNiBtYWtlZmlsZS5kaiBtYWtlZmlsZS53YXQgbWFrZWZpbGUudmMgbWFrZWxpYi5kcyBcCisgICAgICAgIG1ha2VhcHBzLmRzIG1ha2Vwcm9qLm1hYyBtYWtjanBlZy5zdCBtYWtkanBlZy5zdCBtYWtsanBlZy5zdCBcCisgICAgICAgIG1ha3RqcGVnLnN0IG1ha2VmaWxlLm1hbnggbWFrZWZpbGUuc2FzIG1ha2VmaWxlLm1tcyBtYWtlZmlsZS52bXMgXAorICAgICAgICBtYWt2bXMub3B0CitDT05GSUdGSUxFUz0gamNvbmZpZy5jZmcgamNvbmZpZy5iY2MgamNvbmZpZy5tYzYgamNvbmZpZy5kaiBqY29uZmlnLndhdCBcCisgICAgICAgIGpjb25maWcudmMgamNvbmZpZy5tYWMgamNvbmZpZy5zdCBqY29uZmlnLm1hbnggamNvbmZpZy5zYXMgXAorICAgICAgICBqY29uZmlnLnZtcworQ09ORklHVVJFRklMRVM9IGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGluc3RhbGwtc2ggbHRjb25maWcgbHRtYWluLnNoCitPVEhFUkZJTEVTPSBqY29uZmlnLmRvYyBja2NvbmZpZy5jIGFuc2kya25yLmMgYW5zaTJrbnIuMSBqbWVtZG9zYS5hc20KK1RFU1RGSUxFUz0gdGVzdG9yaWcuanBnIHRlc3RpbWcucHBtIHRlc3RpbWcuYm1wIHRlc3RpbWcuanBnIHRlc3Rwcm9nLmpwZyBcCisgICAgICAgIHRlc3RpbWdwLmpwZworRElTVEZJTEVTPSAkKERPQ1MpICQoTUtGSUxFUykgJChDT05GSUdGSUxFUykgJChTT1VSQ0VTKSAkKElOQ0xVREVTKSBcCisgICAgICAgICQoQ09ORklHVVJFRklMRVMpICQoT1RIRVJGSUxFUykgJChURVNURklMRVMpCisjIGxpYnJhcnkgb2JqZWN0IGZpbGVzIGNvbW1vbiB0byBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbgorQ09NT0JKRUNUUz0gamNvbWFwaS5vIGp1dGlscy5vIGplcnJvci5vIGptZW1tZ3IubyAkKFNZU0RFUE1FTSkganNpbWRjcHUubyBcCisgICAgICAgICQoU1lTREVQU0lNRENISykKKyMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKK0NMSUJPQkpFQ1RTPSBqY2FwaW1pbi5vIGpjYXBpc3RkLm8gamN0cmFucy5vIGpjcGFyYW0ubyBqZGF0YWRzdC5vIGpjaW5pdC5vIFwKKyAgICAgICAgamNtYXN0ZXIubyBqY21hcmtlci5vIGpjbWFpbmN0Lm8gamNwcmVwY3QubyBqY2NvZWZjdC5vIGpjY29sb3IubyBcCisgICAgICAgIGpjc2FtcGxlLm8gamNodWZmLm8gamNwaHVmZi5vIGpjZGN0bWdyLm8gamNjb2xtbXgubyBqY2NvbHNzMi5vIFwKKyAgICAgICAgamNzYW1tbXgubyBqY3NhbXNzMi5vIGpjcW50aW50Lm8gamNxbnRmbHQubyBqY3FudG1teC5vIGpjcW50M2RuLm8gXAorICAgICAgICBqY3FudHMyaS5vIGpjcW50c3NlLm8gamNxbnRzMmYubyBqZmRjdGludC5vIGpmZGN0ZnN0Lm8gamZkY3RmbHQubyBcCisgICAgICAgIGpmbW14aW50Lm8gamZtbXhmc3QubyBqZjNkbmZsdC5vIGpmc3MyaW50Lm8gamZzczJmc3QubyBqZnNzZWZsdC5vCisjIGRlY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKK0RMSUJPQkpFQ1RTPSBqZGFwaW1pbi5vIGpkYXBpc3RkLm8gamR0cmFucy5vIGpkYXRhc3JjLm8gamRtYXN0ZXIubyBcCisgICAgICAgIGpkaW5wdXQubyBqZG1hcmtlci5vIGpkaHVmZi5vIGpkcGh1ZmYubyBqZG1haW5jdC5vIGpkY29lZmN0Lm8gXAorICAgICAgICBqZHBvc3RjdC5vIGpkZGN0bWdyLm8gamRzYW1wbGUubyBqZGNvbG9yLm8ganF1YW50MS5vIGpxdWFudDIubyBcCisgICAgICAgIGpkbWVyZ2UubyBqaWRjdGludC5vIGppZGN0ZnN0Lm8gamlkY3RyZWQubyBqaWRjdGZsdC5vIGppbW14aW50Lm8gXAorICAgICAgICBqaW1teGZzdC5vIGppbW14cmVkLm8gamkzZG5mbHQubyBqaXNzMmludC5vIGppc3MyZnN0Lm8gamlzczJyZWQubyBcCisgICAgICAgIGppc3NlZmx0Lm8gamlzczJmbHQubyBqZHNhbW1teC5vIGpkc2Ftc3MyLm8gamRjb2xtbXgubyBqZGNvbHNzMi5vIFwKKyAgICAgICAgamRtZXJtbXgubyBqZG1lcnNzMi5vCisjIFRoZXNlIG9iamVjdGZpbGVzIGFyZSBpbmNsdWRlZCBpbiBsaWJqcGVnLmEKK0xJQk9CSkVDVFM9ICQoQ0xJQk9CSkVDVFMpICQoRExJQk9CSkVDVFMpICQoQ09NT0JKRUNUUykKKyMgb2JqZWN0IGZpbGVzIGZvciBzYW1wbGUgYXBwbGljYXRpb25zIChleGNsdWRpbmcgbGlicmFyeSBmaWxlcykKK0NPQkpFQ1RTPSBjanBlZy5vIHJkcHBtLm8gcmRnaWYubyByZHRhcmdhLm8gcmRybGUubyByZGJtcC5vIHJkc3dpdGNoLm8gXAorICAgICAgICBjZGpwZWcubworRE9CSkVDVFM9IGRqcGVnLm8gd3JwcG0ubyB3cmdpZi5vIHdydGFyZ2EubyB3cnJsZS5vIHdyYm1wLm8gcmRjb2xtYXAubyBcCisgICAgICAgIGNkanBlZy5vCitUUk9CSkVDVFM9IGpwZWd0cmFuLm8gcmRzd2l0Y2gubyBjZGpwZWcubyB0cmFuc3VwcC5vCisKKworYWxsOiAkKERMTE5BTUUpIGNqcGVnLmV4ZSBkanBlZy5leGUganBlZ3RyYW4uZXhlIHJkanBnY29tLmV4ZSB3cmpwZ2NvbS5leGUKKworJChMSUJOQU1FKTogJChETExOQU1FKQorJChETExOQU1FKTogJChMSUJPQkpFQ1RTKSBqcGVnZGxsLm8ganBlZ2RsbC5kZWYKKwkkKExOKSAkKExERkxBR1NfRExMKSAtbyAkKERMTE5BTUUpIC1XbCwtLW91dC1pbXBsaWIsJChMSUJOQU1FKSBcCisJCSQoTElCT0JKRUNUUykganBlZ2RsbC5vIGpwZWdkbGwuZGVmCisKK2pwZWdkbGwubzoganBlZ2RsbC5yYworCXdpbmRyZXMgLU8gY29mZiAtbyAkQCAkKi5yYworCitjanBlZy5leGU6ICQoQ09CSkVDVFMpICQoTElCTkFNRSkKKwkkKExOKSAkKExERkxBR1MpIC1vIGNqcGVnLmV4ZSAkKENPQkpFQ1RTKSAkKExJQk5BTUUpICQoTERMSUJTKQorCitkanBlZy5leGU6ICQoRE9CSkVDVFMpICQoTElCTkFNRSkKKwkkKExOKSAkKExERkxBR1MpIC1vIGRqcGVnLmV4ZSAkKERPQkpFQ1RTKSAkKExJQk5BTUUpICQoTERMSUJTKQorCitqcGVndHJhbi5leGU6ICQoVFJPQkpFQ1RTKSAkKExJQk5BTUUpCisJJChMTikgJChMREZMQUdTKSAtbyBqcGVndHJhbi5leGUgJChUUk9CSkVDVFMpICQoTElCTkFNRSkgJChMRExJQlMpCisKK3JkanBnY29tLmV4ZTogcmRqcGdjb20ubworCSQoTE4pICQoTERGTEFHUykgLW8gcmRqcGdjb20uZXhlIHJkanBnY29tLm8gJChMRExJQlMpCisKK3dyanBnY29tLmV4ZTogd3JqcGdjb20ubworCSQoTE4pICQoTERGTEFHUykgLW8gd3JqcGdjb20uZXhlIHdyanBnY29tLm8gJChMRExJQlMpCisKK2pjb25maWcuaDogamNvbmZpZy5kb2MKKwllY2hvIFlvdSBtdXN0IHByZXBhcmUgYSBzeXN0ZW0tZGVwZW5kZW50IGpjb25maWcuaCBmaWxlLgorCWVjaG8gUGxlYXNlIHJlYWQgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rpb25zIGluIGluc3RhbGwuZG9jLgorCWV4aXQgMQorCitjbGVhbjoKKwktJChSTSkgKi5vCisJLSQoUk0pIGNqcGVnLmV4ZQorCS0kKFJNKSBkanBlZy5leGUKKwktJChSTSkganBlZ3RyYW4uZXhlCisJLSQoUk0pIHJkanBnY29tLmV4ZQorCS0kKFJNKSB3cmpwZ2NvbS5leGUKKwktJChSTSkganNpbWRjZmcuaW5jCisJLSQoUk0pICQoRExMTkFNRSkKKwktJChSTSkgJChMSUJOQU1FKQorCS0kKFJNKSB0ZXN0b3V0Ki4qCisKK3Rlc3Q6IGNqcGVnLmV4ZSBkanBlZy5leGUganBlZ3RyYW4uZXhlCisJLSQoUk0pIHRlc3RvdXQqLioKKwkuL2RqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dC5wcG0gJChzcmNkaXIpXHRlc3RvcmlnLmpwZworCS4vZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCAkKHNyY2RpcilcdGVzdG9yaWcuanBnCisJLi9janBlZyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0LmpwZyAkKHNyY2RpcilcdGVzdGltZy5wcG0KKwkuL2RqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dHAucHBtICQoc3JjZGlyKVx0ZXN0cHJvZy5qcGcKKwkuL2NqcGVnIC1kY3QgaW50IC1wcm9ncmVzc2l2ZSAtb3B0IC1vdXRmaWxlIHRlc3RvdXRwLmpwZyAkKHNyY2RpcilcdGVzdGltZy5wcG0KKwkuL2pwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyAkKHNyY2RpcilcdGVzdHByb2cuanBnCisJZmMgL2IgJChzcmNkaXIpXHRlc3RpbWcucHBtIHRlc3RvdXQucHBtCisJZmMgL2IgJChzcmNkaXIpXHRlc3RpbWcuYm1wIHRlc3RvdXQuYm1wCisJZmMgL2IgJChzcmNkaXIpXHRlc3RpbWcuanBnIHRlc3RvdXQuanBnCisJZmMgL2IgJChzcmNkaXIpXHRlc3RpbWcucHBtIHRlc3RvdXRwLnBwbQorCWZjIC9iICQoc3JjZGlyKVx0ZXN0aW1ncC5qcGcgdGVzdG91dHAuanBnCisJZmMgL2IgJChzcmNkaXIpXHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKKworCitqc2ltZGNmZy5pbmM6IG1ha2VjZmcuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyBtYWtlY2ZnLmV4ZSAkKHNyY2RpcikvbWFrZWNmZy5jICQoTERMSUJTKQorCS5cbWFrZWNmZy5leGUgPiBqc2ltZGNmZy5pbmMKKwkkKFJNKSBtYWtlY2ZnLmV4ZQorCislLm8gOiAlLmFzbQorCSQoTkFTTSkgJChOQUZMQUdTKSAtbyAkQCAkPAorCitqc2ltZGNwdS5vOiBqc2ltZGNwdS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYworanNpbWR3MzIubzoganNpbWR3MzIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pzaW1kZGpnLm86IGpzaW1kZGpnLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jCitqY2NvbG1teC5vOiBqY2NvbG1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjY29sc3MyLm86IGpjY29sc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNzYW1tbXgubzogamNzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY3NhbXNzMi5vOiBqY3NhbXNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkY29sbW14Lm86IGpkY29sbW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRjb2xzczIubzogamRjb2xzczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZG1lcm1teC5vOiBqZG1lcm1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkbWVyc3MyLm86IGpkbWVyc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRzYW1tbXgubzogamRzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZHNhbXNzMi5vOiBqZHNhbXNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjcW50aW50Lm86IGpjcW50aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudGZsdC5vOiBqY3FudGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRtbXgubzogamNxbnRtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50M2RuLm86IGpjcW50M2RuLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHMyaS5vOiBqY3FudHMyaS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRzc2UubzogamNxbnRzc2UuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50czJmLm86IGpjcW50czJmLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGludC5vOiBqZmRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZkY3Rmc3QubzogamZkY3Rmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmZGN0Zmx0Lm86IGpmZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGludC5vOiBqZm1teGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZtbXhmc3QubzogamZtbXhmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmM2RuZmx0Lm86IGpmM2RuZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmludC5vOiBqZnNzMmludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZzczJmc3QubzogamZzczJmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmc3NlZmx0Lm86IGpmc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGludC5vOiBqaWRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3Rmc3QubzogamlkY3Rmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppZGN0cmVkLm86IGppZGN0cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZsdC5vOiBqaWRjdGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamltbXhpbnQubzogamltbXhpbnQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppbW14ZnN0Lm86IGppbW14ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teHJlZC5vOiBqaW1teHJlZC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamkzZG5mbHQubzogamkzZG5mbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3MyaW50Lm86IGppc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZzdC5vOiBqaXNzMmZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJyZWQubzogamlzczJyZWQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3NlZmx0Lm86IGppc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZsdC5vOiBqaXNzMmZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworCitqc2ltZGdjYy5vOiBqc2ltZGdjYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCisKK2pjYXBpbWluLm86IGpjYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY2FwaXN0ZC5vOiBqY2FwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNjb2VmY3QubzogamNjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjY29sb3IubzogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCitqY2RjdG1nci5vOiBqY2RjdG1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKK2pjaHVmZi5vOiBqY2h1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNodWZmLmgKK2pjaW5pdC5vOiBqY2luaXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjbWFpbmN0Lm86IGpjbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY21hcmtlci5vOiBqY21hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNtYXN0ZXIubzogamNtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjb21hcGkubzogamNvbWFwaS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNwYXJhbS5vOiBqY3BhcmFtLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY3BodWZmLm86IGpjcGh1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNodWZmLmgKK2pjcHJlcGN0Lm86IGpjcHJlcGN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY3NhbXBsZS5vOiBqY3NhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCitqY3RyYW5zLm86IGpjdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkYXBpbWluLm86IGpkYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZGFwaXN0ZC5vOiBqZGFwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRhdGFkc3QubzogamRhdGFkc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaAoramRhdGFzcmMubzogamRhdGFzcmMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaAoramRjb2VmY3QubzogamRjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkY29sb3IubzogamRjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCitqZGRjdG1nci5vOiBqZGRjdG1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKK2pkaHVmZi5vOiBqZGh1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRodWZmLmgKK2pkaW5wdXQubzogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtYWluY3QubzogamRtYWluY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkbWFya2VyLm86IGpkbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZG1hc3Rlci5vOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtZXJnZS5vOiBqZG1lcmdlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKK2pkcGh1ZmYubzogamRwaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGh1ZmYuaAoramRwb3N0Y3QubzogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkc2FtcGxlLm86IGpkc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKK2pkdHJhbnMubzogamR0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramVycm9yLm86IGplcnJvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGp2ZXJzaW9uLmggamVycm9yLmgKKyMgamZkY3RmbHQubzogamZkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGpmZGN0ZnN0Lm86IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqZmRjdGludC5vOiBqZmRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RmbHQubzogamlkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGppZGN0ZnN0Lm86IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdGludC5vOiBqaWRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RyZWQubzogamlkY3RyZWQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCitqcXVhbnQxLm86IGpxdWFudDEuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pxdWFudDIubzoganF1YW50Mi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoranV0aWxzLm86IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoram1lbW1nci5vOiBqbWVtbWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAoram1lbWFuc2kubzogam1lbWFuc2kuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitqbWVtbmFtZS5vOiBqbWVtbmFtZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKK2ptZW1ub2JzLm86IGptZW1ub2JzLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAoram1lbWRvcy5vOiBqbWVtZG9zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAoram1lbW1hYy5vOiBqbWVtbWFjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAorY2pwZWcubzogY2pwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgganZlcnNpb24uaAorZGpwZWcubzogZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgganZlcnNpb24uaAoranBlZ3RyYW4ubzoganBlZ3RyYW4uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmggdHJhbnN1cHAuaCBqdmVyc2lvbi5oCityZGpwZ2NvbS5vOiByZGpwZ2NvbS5jIGppbmNsdWRlLmggamNvbmZpZy5oCit3cmpwZ2NvbS5vOiB3cmpwZ2NvbS5jIGppbmNsdWRlLmggamNvbmZpZy5oCitjZGpwZWcubzogY2RqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCityZGNvbG1hcC5vOiByZGNvbG1hcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAorcmRzd2l0Y2gubzogcmRzd2l0Y2guYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3RyYW5zdXBwLm86IHRyYW5zdXBwLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIHRyYW5zdXBwLmgKK3JkcHBtLm86IHJkcHBtLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCit3cnBwbS5vOiB3cnBwbS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAorcmRnaWYubzogcmRnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3dyZ2lmLm86IHdyZ2lmLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCityZHRhcmdhLm86IHJkdGFyZ2EuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3dydGFyZ2Eubzogd3J0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAorcmRibXAubzogcmRibXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3dyYm1wLm86IHdyYm1wLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCityZHJsZS5vOiByZHJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAord3JybGUubzogd3JybGUuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKZGlmZiAtLWdpdCBhL21ha2VmaWxlLnVuaXggYi9tYWtlZmlsZS51bml4CmluZGV4IDAwNDU1YWIuLmUwNWVjYzAgMTAwNjQ0Ci0tLSBhL21ha2VmaWxlLnVuaXgKKysrIGIvbWFrZWZpbGUudW5peApAQCAtMSw0ICsxLDUgQEAKICMgTWFrZWZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQorIyBNb2RpZmllZCBmb3IgeDg2IFNJTUQgZXh0ZW5zaW9uCiAKICMgVGhpcyBtYWtlZmlsZSBpcyBzdWl0YWJsZSBmb3IgVW5peC1saWtlIHN5c3RlbXMgd2l0aCBub24tQU5TSSBjb21waWxlcnMuCiAjIElmIHlvdSBoYXZlIGFuIEFOU0kgY29tcGlsZXIsIG1ha2VmaWxlLmFuc2kgaXMgYSBiZXR0ZXIgc3RhcnRpbmcgcG9pbnQuCkBAIC0xNSw2ICsxNiwxMyBAQAogIyBIb3dldmVyLCBhbnkgc3BlY2lhbCBkZWZpbmVzIGZvciBhbnNpMmtuci5jIG1heSBiZSBpbmNsdWRlZCBoZXJlOgogQU5TSTJLTlJGTEFHUz0gCiAKKyMgVGhlIGV4ZWN1dGFibGUgbmFtZSBvZiBOQVNNIGFuZCBpdHMgb3B0aW9uczoKK05BU009IG5hc20KK05BRkxBR1M9ICQoTkFTTV9PQkpGTVQpIC1JLi8KKyMgb2JqZWN0IGZpbGUgZm9ybWF0IHNwZWNpZmllciBmb3IgTkFTTQorIyBzZWUganNpbWRleHQuaW5jIGZvciBtb3JlIGRldGFpbHMuCitOQVNNX09CSkZNVD0gLWZhb3V0IC1EQU9VVAorCiAjIExpbmstdGltZSBjYyBvcHRpb25zOgogTERGTEFHUz0gCiAKQEAgLTI2LDYgKzM0LDEwIEBACiAjIHRvIHVzZSBqbWVtYW5zaS5vIG9yIGptZW1uYW1lLm8gaWYgeW91IGhhdmUgbGltaXRlZCBzd2FwIHNwYWNlLgogU1lTREVQTUVNPSBqbWVtbm9icy5vCiAKKyMgT1MtZGVwZW5kZW50IFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjaGVja2VyCisjIGpzaW1kdzMyLm8gKFdpbjMyKSAvIGpzaW1kZGpnLm8gKERKR1BQIFYuMikgLyBqc2ltZGdjYy5vIChVbml4L2djYykKK1NZU0RFUFNJTURDSEs9IGpzaW1kZ2NjLm8KKwogIyBtaXNjZWxsYW5lb3VzIE9TLWRlcGVuZGVudCBzdHVmZgogIyBsaW5rZXIKIExOPSAkKENDKQpAQCAtNzksMTcgKzkxLDIzIEBACiBESVNURklMRVM9ICQoRE9DUykgJChNS0ZJTEVTKSAkKENPTkZJR0ZJTEVTKSAkKFNPVVJDRVMpICQoSU5DTFVERVMpIFwKICAgICAgICAgJChDT05GSUdVUkVGSUxFUykgJChPVEhFUkZJTEVTKSAkKFRFU1RGSUxFUykKICMgbGlicmFyeSBvYmplY3QgZmlsZXMgY29tbW9uIHRvIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCi1DT01PQkpFQ1RTPSBqY29tYXBpLm8ganV0aWxzLm8gamVycm9yLm8gam1lbW1nci5vICQoU1lTREVQTUVNKQorQ09NT0JKRUNUUz0gamNvbWFwaS5vIGp1dGlscy5vIGplcnJvci5vIGptZW1tZ3IubyAkKFNZU0RFUE1FTSkganNpbWRjcHUubyBcCisgICAgICAgICQoU1lTREVQU0lNRENISykKICMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKIENMSUJPQkpFQ1RTPSBqY2FwaW1pbi5vIGpjYXBpc3RkLm8gamN0cmFucy5vIGpjcGFyYW0ubyBqZGF0YWRzdC5vIGpjaW5pdC5vIFwKICAgICAgICAgamNtYXN0ZXIubyBqY21hcmtlci5vIGpjbWFpbmN0Lm8gamNwcmVwY3QubyBqY2NvZWZjdC5vIGpjY29sb3IubyBcCi0gICAgICAgIGpjc2FtcGxlLm8gamNodWZmLm8gamNwaHVmZi5vIGpjZGN0bWdyLm8gamZkY3Rmc3QubyBqZmRjdGZsdC5vIFwKLSAgICAgICAgamZkY3RpbnQubworICAgICAgICBqY3NhbXBsZS5vIGpjaHVmZi5vIGpjcGh1ZmYubyBqY2RjdG1nci5vIGpjY29sbW14Lm8gamNjb2xzczIubyBcCisgICAgICAgIGpjc2FtbW14Lm8gamNzYW1zczIubyBqY3FudGludC5vIGpjcW50Zmx0Lm8gamNxbnRtbXgubyBqY3FudDNkbi5vIFwKKyAgICAgICAgamNxbnRzMmkubyBqY3FudHNzZS5vIGpjcW50czJmLm8gamZkY3RpbnQubyBqZmRjdGZzdC5vIGpmZGN0Zmx0Lm8gXAorICAgICAgICBqZm1teGludC5vIGpmbW14ZnN0Lm8gamYzZG5mbHQubyBqZnNzMmludC5vIGpmc3MyZnN0Lm8gamZzc2VmbHQubwogIyBkZWNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCiBETElCT0JKRUNUUz0gamRhcGltaW4ubyBqZGFwaXN0ZC5vIGpkdHJhbnMubyBqZGF0YXNyYy5vIGpkbWFzdGVyLm8gXAogICAgICAgICBqZGlucHV0Lm8gamRtYXJrZXIubyBqZGh1ZmYubyBqZHBodWZmLm8gamRtYWluY3QubyBqZGNvZWZjdC5vIFwKLSAgICAgICAgamRwb3N0Y3QubyBqZGRjdG1nci5vIGppZGN0ZnN0Lm8gamlkY3RmbHQubyBqaWRjdGludC5vIGppZGN0cmVkLm8gXAotICAgICAgICBqZHNhbXBsZS5vIGpkY29sb3IubyBqcXVhbnQxLm8ganF1YW50Mi5vIGpkbWVyZ2UubworICAgICAgICBqZHBvc3RjdC5vIGpkZGN0bWdyLm8gamRzYW1wbGUubyBqZGNvbG9yLm8ganF1YW50MS5vIGpxdWFudDIubyBcCisgICAgICAgIGpkbWVyZ2UubyBqaWRjdGludC5vIGppZGN0ZnN0Lm8gamlkY3RyZWQubyBqaWRjdGZsdC5vIGppbW14aW50Lm8gXAorICAgICAgICBqaW1teGZzdC5vIGppbW14cmVkLm8gamkzZG5mbHQubyBqaXNzMmludC5vIGppc3MyZnN0Lm8gamlzczJyZWQubyBcCisgICAgICAgIGppc3NlZmx0Lm8gamlzczJmbHQubyBqZHNhbW1teC5vIGpkc2Ftc3MyLm8gamRjb2xtbXgubyBqZGNvbHNzMi5vIFwKKyAgICAgICAgamRtZXJtbXgubyBqZG1lcnNzMi5vCiAjIFRoZXNlIG9iamVjdGZpbGVzIGFyZSBpbmNsdWRlZCBpbiBsaWJqcGVnLmEKIExJQk9CSkVDVFM9ICQoQ0xJQk9CSkVDVFMpICQoRExJQk9CSkVDVFMpICQoQ09NT0JKRUNUUykKICMgb2JqZWN0IGZpbGVzIGZvciBzYW1wbGUgYXBwbGljYXRpb25zIChleGNsdWRpbmcgbGlicmFyeSBmaWxlcykKQEAgLTEzOSw3ICsxNTcsNyBAQAogCiBjbGVhbjoKIAkkKFJNKSAqLm8gY2pwZWcgZGpwZWcganBlZ3RyYW4gbGlianBlZy5hIHJkanBnY29tIHdyanBnY29tCi0JJChSTSkgYW5zaTJrbnIgY29yZSB0ZXN0b3V0KgorCSQoUk0pIGpzaW1kY2ZnLmluYyBhbnNpMmtuciBjb3JlIHRlc3RvdXQqCiAKIHRlc3Q6IGNqcGVnIGRqcGVnIGpwZWd0cmFuCiAJJChSTSkgdGVzdG91dCoKQEAgLTE1NywxMCArMTc1LDYzIEBACiAJY21wIHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKIAogCitqc2ltZGNmZy5pbmM6IG1ha2VjZmcuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyBtYWtlY2ZnIC4vbWFrZWNmZy5jICQoTERMSUJTKQorCS4vbWFrZWNmZyA+IGpzaW1kY2ZnLmluYworCSQoUk0pIC4vbWFrZWNmZworCisuYXNtLm86CisJJChOQVNNKSAkKE5BRkxBR1MpIC1vICRAICQqLmFzbQorCitqc2ltZGNwdS5vOiBqc2ltZGNwdS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYworanNpbWR3MzIubzoganNpbWR3MzIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pzaW1kZGpnLm86IGpzaW1kZGpnLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jCitqY2NvbG1teC5vOiBqY2NvbG1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjY29sc3MyLm86IGpjY29sc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNzYW1tbXgubzogamNzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY3NhbXNzMi5vOiBqY3NhbXNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkY29sbW14Lm86IGpkY29sbW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRjb2xzczIubzogamRjb2xzczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZG1lcm1teC5vOiBqZG1lcm1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkbWVyc3MyLm86IGpkbWVyc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRzYW1tbXgubzogamRzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZHNhbXNzMi5vOiBqZHNhbXNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjcW50aW50Lm86IGpjcW50aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudGZsdC5vOiBqY3FudGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRtbXgubzogamNxbnRtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50M2RuLm86IGpjcW50M2RuLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHMyaS5vOiBqY3FudHMyaS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRzc2UubzogamNxbnRzc2UuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pjcW50czJmLm86IGpjcW50czJmLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGludC5vOiBqZmRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZkY3Rmc3QubzogamZkY3Rmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmZGN0Zmx0Lm86IGpmZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGludC5vOiBqZm1teGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZtbXhmc3QubzogamZtbXhmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmM2RuZmx0Lm86IGpmM2RuZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmludC5vOiBqZnNzMmludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZzczJmc3QubzogamZzczJmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2pmc3NlZmx0Lm86IGpmc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGludC5vOiBqaWRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3Rmc3QubzogamlkY3Rmc3QuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppZGN0cmVkLm86IGppZGN0cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZsdC5vOiBqaWRjdGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamltbXhpbnQubzogamltbXhpbnQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppbW14ZnN0Lm86IGppbW14ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teHJlZC5vOiBqaW1teHJlZC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamkzZG5mbHQubzogamkzZG5mbHQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3MyaW50Lm86IGppc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZzdC5vOiBqaXNzMmZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJyZWQubzogamlzczJyZWQuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamRjdC5pbmMKK2ppc3NlZmx0Lm86IGppc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZsdC5vOiBqaXNzMmZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworCitqc2ltZGdjYy5vOiBqc2ltZGdjYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCisKIGpjYXBpbWluLm86IGpjYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqY2FwaXN0ZC5vOiBqY2FwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamNjb2VmY3QubzogamNjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjY29sb3IubzogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNjb2xvci5vOiBqY2NvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpjZGN0bWdyLm86IGpjZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAogamNodWZmLm86IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY2h1ZmYuaAogamNpbml0Lm86IGpjaW5pdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaApAQCAtMTcxLDMzICsyNDIsMzMgQEAKIGpjcGFyYW0ubzogamNwYXJhbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamNwaHVmZi5vOiBqY3BodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjaHVmZi5oCiBqY3ByZXBjdC5vOiBqY3ByZXBjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNzYW1wbGUubzogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjc2FtcGxlLm86IGpjc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpjdHJhbnMubzogamN0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRhcGltaW4ubzogamRhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpkYXBpc3RkLm86IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqZGF0YWRzdC5vOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCiBqZGF0YXNyYy5vOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCiBqZGNvZWZjdC5vOiBqZGNvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRjb2xvci5vOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZGNvbG9yLm86IGpkY29sb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAogamRkY3RtZ3IubzogamRkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCiBqZGh1ZmYubzogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkaHVmZi5oCiBqZGlucHV0Lm86IGpkaW5wdXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpkbWFpbmN0Lm86IGpkbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqZG1hcmtlci5vOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRtYXN0ZXIubzogamRtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWVyZ2UubzogamRtZXJnZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtZXJnZS5vOiBqZG1lcmdlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpkcGh1ZmYubzogamRwaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGh1ZmYuaAogamRwb3N0Y3QubzogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkc2FtcGxlLm86IGpkc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZHNhbXBsZS5vOiBqZHNhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCiBqZHRyYW5zLm86IGpkdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGplcnJvci5vOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC5vOiBqZmRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0ZnN0Lm86IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3RpbnQubzogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC5vOiBqaWRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0ZnN0Lm86IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3RpbnQubzogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdHJlZC5vOiBqaWRjdHJlZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamZkY3RmbHQubzogamZkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGpmZGN0ZnN0Lm86IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqZmRjdGludC5vOiBqZmRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RmbHQubzogamlkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCisjIGppZGN0ZnN0Lm86IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdGludC5vOiBqaWRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RyZWQubzogamlkY3RyZWQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCiBqcXVhbnQxLm86IGpxdWFudDEuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpxdWFudDIubzoganF1YW50Mi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoganV0aWxzLm86IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaApkaWZmIC0tZ2l0IGEvbWFrZWZpbGUudmMgYi9tYWtlZmlsZS52YwppbmRleCAyYWNmMDY5Li43Y2ZlZGEzIDEwMDY0NAotLS0gYS9tYWtlZmlsZS52YworKysgYi9tYWtlZmlsZS52YwpAQCAtMSwzMiArMSw1MCBAQAogIyBNYWtlZmlsZSBmb3IgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlCisjIE1vZGlmaWVkIGZvciB4ODYgU0lNRCBleHRlbnNpb24KIAogIyBUaGlzIG1ha2VmaWxlIGlzIGZvciBNaWNyb3NvZnQgVmlzdWFsIEMrKyBvbiBXaW5kb3dzIE5UIChhbmQgOTU/KS4KICMgSXQgYnVpbGRzIHRoZSBJSkcgbGlicmFyeSBhcyBhIHN0YXRpY2FsbHkgbGlua2FibGUgbGlicmFyeSAoLkxJQiksCiAjIGFuZCBidWlsZHMgdGhlIHNhbXBsZSBhcHBsaWNhdGlvbnMgYXMgY29uc29sZS1tb2RlIGFwcHMuCi0jIFRoYW5rcyB0byBYaW5nb25nIENoYW5nLCBSYXltb25kIEV2ZXJseSBhbmQgb3RoZXJzLgogCiAjIFJlYWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBiZWZvcmUgc2F5aW5nICJubWFrZSIgISEKLSMgVG8gYnVpbGQgYW4gb3B0aW1pemVkIGxpYnJhcnkgd2l0aG91dCBkZWJ1ZyBpbmZvLCBzYXkgIm5tYWtlIG5vZGVidWc9MSIuCiAKLSMgUHVsbCBpbiBzdGFuZGFyZCB2YXJpYWJsZSBkZWZpbml0aW9ucwotIWluY2x1ZGUgPHdpbjMyLm1haz4KKyMgVGhlIG5hbWUgb2YgeW91ciBDIGNvbXBpbGVyOgorQ0M9IGNsCitMRD0gbGluawogCiAjIFlvdSBtYXkgd2FudCB0byBhZGp1c3QgdGhlc2UgY29tcGlsZXIgb3B0aW9uczoKLUNGTEFHUz0gJChjZmxhZ3MpICQoY2RlYnVnKSAkKGN2YXJzKSAtSS4KKyFpZmRlZiBjcnRkbGwKKyMgKERMTCB2ZXJzaW9uIG9mIENSVCkKK0NGTEFHUz0gLW5vbG9nbyAtYyAtTUQgLVczIC1PMiAtR0YgLUd5IC1ETkRFQlVHIC1JLgorIWVsc2UKKyMgKFNpbmdsZSB0aHJlYWRlZCBzdGF0aWMgQ1JUKQorQ0ZMQUdTPSAtbm9sb2dvIC1jIC1NTCAtVzMgLU8yIC1HRiAtR3kgLUROREVCVUcgLUkuCishZW5kaWYKKwogIyBHZW5lcmFsbHksIHdlIHJlY29tbWVuZCBkZWZpbmluZyBhbnkgY29uZmlndXJhdGlvbiBzeW1ib2xzIGluIGpjb25maWcuaCwKICMgTk9UIHZpYSAtRCBzd2l0Y2hlcyBoZXJlLgogCisjIFRoZSBleGVjdXRhYmxlIG5hbWUgb2YgTkFTTSBhbmQgaXRzIG9wdGlvbnM6CitOQVNNPSBuYXNtdworTkFGTEFHUz0gJChOQVNNX09CSkZNVCkgLUkuLworIyBvYmplY3QgZmlsZSBmb3JtYXQgc3BlY2lmaWVyIGZvciBOQVNNCisjIHNlZSBqc2ltZGV4dC5pbmMgZm9yIG1vcmUgZGV0YWlscy4KK05BU01fT0JKRk1UPSAtZndpbjMyIC1EV0lOMzIKKwogIyBMaW5rLXRpbWUgb3B0aW9uczoKLUxERkxBR1M9ICQobGRlYnVnKSAkKGNvbmxmbGFncykKK0xERkxBR1M9IC1ub2xvZ28gLXJlbGVhc2UgLXN1YnN5c3RlbTpjb25zb2xlLDQuMCAtb3B0Om5vd2luOTgKIAogIyBUbyBsaW5rIGFueSBzcGVjaWFsIGxpYnJhcmllcywgYWRkIHRoZSBuZWNlc3NhcnkgY29tbWFuZHMgaGVyZS4KLUxETElCUz0gJChjb25saWJzKQorTERMSUJTPSAKIAogIyBQdXQgaGVyZSB0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgdGhlIGNvcnJlY3Qgc3lzdGVtLWRlcGVuZGVudCBtZW1vcnkKICMgbWFuYWdlciBmaWxlLiAgRm9yIE5UIHdlIHN1Z2dlc3Qgam1lbW5vYnMub2JqLCB3aGljaCBleHBlY3RzIHRoZSBPUyB0bwogIyBwcm92aWRlIGFkZXF1YXRlIHZpcnR1YWwgbWVtb3J5LgogU1lTREVQTUVNPSBqbWVtbm9icy5vYmoKIAorIyBPUy1kZXBlbmRlbnQgU0lNRCBpbnN0cnVjdGlvbiBzdXBwb3J0IGNoZWNrZXIKKyMganNpbWR3MzIub2JqIChXaW4zMikgLyBqc2ltZGRqZy5vYmogKERKR1BQIFYuMikgLyBqc2ltZGdjYy5vYmogKFVuaXgvZ2NjKQorU1lTREVQU0lNRENISz0ganNpbWR3MzIub2JqCisKICMgbWlzY2VsbGFuZW91cyBPUy1kZXBlbmRlbnQgc3R1ZmYKICMgZmlsZSBkZWxldGlvbiBjb21tYW5kCiBSTT0gZGVsCkBAIC03MiwxOCArOTAsMjYgQEAKIERJU1RGSUxFUz0gJChET0NTKSAkKE1LRklMRVMpICQoQ09ORklHRklMRVMpICQoU09VUkNFUykgJChJTkNMVURFUykgXAogICAgICAgICAkKENPTkZJR1VSRUZJTEVTKSAkKE9USEVSRklMRVMpICQoVEVTVEZJTEVTKQogIyBsaWJyYXJ5IG9iamVjdCBmaWxlcyBjb21tb24gdG8gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KLUNPTU9CSkVDVFM9IGpjb21hcGkub2JqIGp1dGlscy5vYmogamVycm9yLm9iaiBqbWVtbWdyLm9iaiAkKFNZU0RFUE1FTSkKK0NPTU9CSkVDVFM9IGpjb21hcGkub2JqIGp1dGlscy5vYmogamVycm9yLm9iaiBqbWVtbWdyLm9iaiAkKFNZU0RFUE1FTSkgXAorICAgICAgICBqc2ltZGNwdS5vYmogJChTWVNERVBTSU1EQ0hLKQogIyBjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcwogQ0xJQk9CSkVDVFM9IGpjYXBpbWluLm9iaiBqY2FwaXN0ZC5vYmogamN0cmFucy5vYmogamNwYXJhbS5vYmogamRhdGFkc3Qub2JqIFwKICAgICAgICAgamNpbml0Lm9iaiBqY21hc3Rlci5vYmogamNtYXJrZXIub2JqIGpjbWFpbmN0Lm9iaiBqY3ByZXBjdC5vYmogXAogICAgICAgICBqY2NvZWZjdC5vYmogamNjb2xvci5vYmogamNzYW1wbGUub2JqIGpjaHVmZi5vYmogamNwaHVmZi5vYmogXAotICAgICAgICBqY2RjdG1nci5vYmogamZkY3Rmc3Qub2JqIGpmZGN0Zmx0Lm9iaiBqZmRjdGludC5vYmoKKyAgICAgICAgamNkY3RtZ3Iub2JqIGpjY29sbW14Lm9iaiBqY2NvbHNzMi5vYmogamNzYW1tbXgub2JqIGpjc2Ftc3MyLm9iaiBcCisgICAgICAgIGpjcW50aW50Lm9iaiBqY3FudGZsdC5vYmogamNxbnRtbXgub2JqIGpjcW50M2RuLm9iaiBqY3FudHMyaS5vYmogXAorICAgICAgICBqY3FudHNzZS5vYmogamNxbnRzMmYub2JqIGpmZGN0aW50Lm9iaiBqZmRjdGZzdC5vYmogamZkY3RmbHQub2JqIFwKKyAgICAgICAgamZtbXhpbnQub2JqIGpmbW14ZnN0Lm9iaiBqZjNkbmZsdC5vYmogamZzczJpbnQub2JqIGpmc3MyZnN0Lm9iaiBcCisgICAgICAgIGpmc3NlZmx0Lm9iagogIyBkZWNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCiBETElCT0JKRUNUUz0gamRhcGltaW4ub2JqIGpkYXBpc3RkLm9iaiBqZHRyYW5zLm9iaiBqZGF0YXNyYy5vYmogXAogICAgICAgICBqZG1hc3Rlci5vYmogamRpbnB1dC5vYmogamRtYXJrZXIub2JqIGpkaHVmZi5vYmogamRwaHVmZi5vYmogXAotICAgICAgICBqZG1haW5jdC5vYmogamRjb2VmY3Qub2JqIGpkcG9zdGN0Lm9iaiBqZGRjdG1nci5vYmogamlkY3Rmc3Qub2JqIFwKLSAgICAgICAgamlkY3RmbHQub2JqIGppZGN0aW50Lm9iaiBqaWRjdHJlZC5vYmogamRzYW1wbGUub2JqIGpkY29sb3Iub2JqIFwKLSAgICAgICAganF1YW50MS5vYmoganF1YW50Mi5vYmogamRtZXJnZS5vYmoKKyAgICAgICAgamRtYWluY3Qub2JqIGpkY29lZmN0Lm9iaiBqZHBvc3RjdC5vYmogamRkY3RtZ3Iub2JqIGpkc2FtcGxlLm9iaiBcCisgICAgICAgIGpkY29sb3Iub2JqIGpxdWFudDEub2JqIGpxdWFudDIub2JqIGpkbWVyZ2Uub2JqIGppZGN0aW50Lm9iaiBcCisgICAgICAgIGppZGN0ZnN0Lm9iaiBqaWRjdHJlZC5vYmogamlkY3RmbHQub2JqIGppbW14aW50Lm9iaiBqaW1teGZzdC5vYmogXAorICAgICAgICBqaW1teHJlZC5vYmogamkzZG5mbHQub2JqIGppc3MyaW50Lm9iaiBqaXNzMmZzdC5vYmogamlzczJyZWQub2JqIFwKKyAgICAgICAgamlzc2VmbHQub2JqIGppc3MyZmx0Lm9iaiBqZHNhbW1teC5vYmogamRzYW1zczIub2JqIGpkY29sbW14Lm9iaiBcCisgICAgICAgIGpkY29sc3MyLm9iaiBqZG1lcm1teC5vYmogamRtZXJzczIub2JqCiAjIFRoZXNlIG9iamVjdGZpbGVzIGFyZSBpbmNsdWRlZCBpbiBsaWJqcGVnLmxpYgogTElCT0JKRUNUUz0gJChDTElCT0JKRUNUUykgJChETElCT0JKRUNUUykgJChDT01PQkpFQ1RTKQogIyBvYmplY3QgZmlsZXMgZm9yIHNhbXBsZSBhcHBsaWNhdGlvbnMgKGV4Y2x1ZGluZyBsaWJyYXJ5IGZpbGVzKQpAQCAtOTQsMzggKzEyMCw0NiBAQAogVFJPQkpFQ1RTPSBqcGVndHJhbi5vYmogcmRzd2l0Y2gub2JqIGNkanBlZy5vYmogdHJhbnN1cHAub2JqCiAKICMgVGVtcGxhdGUgY29tbWFuZCBmb3IgY29tcGlsaW5nIC5jIHRvIC5vYmoKLS5jLm9iajoKLQkkKGNjKSAkKENGTEFHUykgJCouYworLmMub2JqOjoKKwkkKENDKSAkKENGTEFHUykgJDwKIAogCiBhbGw6IGxpYmpwZWcubGliIGNqcGVnLmV4ZSBkanBlZy5leGUganBlZ3RyYW4uZXhlIHJkanBnY29tLmV4ZSB3cmpwZ2NvbS5leGUKIAogbGlianBlZy5saWI6ICQoTElCT0JKRUNUUykKLQkkKFJNKSBsaWJqcGVnLmxpYgorCS0kKFJNKSBsaWJqcGVnLmxpYgogCWxpYiAtb3V0OmxpYmpwZWcubGliICAkKExJQk9CSkVDVFMpCiAKIGNqcGVnLmV4ZTogJChDT0JKRUNUUykgbGlianBlZy5saWIKLQkkKGxpbmspICQoTERGTEFHUykgLW91dDpjanBlZy5leGUgJChDT0JKRUNUUykgbGlianBlZy5saWIgJChMRExJQlMpCisJJChMRCkgJChMREZMQUdTKSAtb3V0OmNqcGVnLmV4ZSAkKENPQkpFQ1RTKSBsaWJqcGVnLmxpYiAkKExETElCUykKIAogZGpwZWcuZXhlOiAkKERPQkpFQ1RTKSBsaWJqcGVnLmxpYgotCSQobGluaykgJChMREZMQUdTKSAtb3V0OmRqcGVnLmV4ZSAkKERPQkpFQ1RTKSBsaWJqcGVnLmxpYiAkKExETElCUykKKwkkKExEKSAkKExERkxBR1MpIC1vdXQ6ZGpwZWcuZXhlICQoRE9CSkVDVFMpIGxpYmpwZWcubGliICQoTERMSUJTKQogCiBqcGVndHJhbi5leGU6ICQoVFJPQkpFQ1RTKSBsaWJqcGVnLmxpYgotCSQobGluaykgJChMREZMQUdTKSAtb3V0OmpwZWd0cmFuLmV4ZSAkKFRST0JKRUNUUykgbGlianBlZy5saWIgJChMRExJQlMpCisJJChMRCkgJChMREZMQUdTKSAtb3V0OmpwZWd0cmFuLmV4ZSAkKFRST0JKRUNUUykgbGlianBlZy5saWIgJChMRExJQlMpCiAKIHJkanBnY29tLmV4ZTogcmRqcGdjb20ub2JqCi0JJChsaW5rKSAkKExERkxBR1MpIC1vdXQ6cmRqcGdjb20uZXhlIHJkanBnY29tLm9iaiAkKExETElCUykKKwkkKExEKSAkKExERkxBR1MpIC1vdXQ6cmRqcGdjb20uZXhlIHJkanBnY29tLm9iaiAkKExETElCUykKIAogd3JqcGdjb20uZXhlOiB3cmpwZ2NvbS5vYmoKLQkkKGxpbmspICQoTERGTEFHUykgLW91dDp3cmpwZ2NvbS5leGUgd3JqcGdjb20ub2JqICQoTERMSUJTKQorCSQoTEQpICQoTERGTEFHUykgLW91dDp3cmpwZ2NvbS5leGUgd3JqcGdjb20ub2JqICQoTERMSUJTKQogCiAKIGNsZWFuOgotCSQoUk0pICoub2JqICouZXhlIGxpYmpwZWcubGliCi0JJChSTSkgdGVzdG91dCoKKwktJChSTSkgKi5vYmoKKwktJChSTSkgY2pwZWcuZXhlCisJLSQoUk0pIGRqcGVnLmV4ZQorCS0kKFJNKSBqcGVndHJhbi5leGUKKwktJChSTSkgcmRqcGdjb20uZXhlCisJLSQoUk0pIHdyanBnY29tLmV4ZQorCS0kKFJNKSBqc2ltZGNmZy5pbmMKKwktJChSTSkgbGlianBlZy5saWIKKwktaWYgZXhpc3QgKi5tYW5pZmVzdCAkKFJNKSAqLm1hbmlmZXN0CisJLWlmIGV4aXN0IHRlc3RvdXQqICAgJChSTSkgdGVzdG91dCoKIAogdGVzdDogY2pwZWcuZXhlIGRqcGVnLmV4ZSBqcGVndHJhbi5leGUKLQkkKFJNKSB0ZXN0b3V0KgorCS1pZiBleGlzdCB0ZXN0b3V0KiAkKFJNKSB0ZXN0b3V0KgogCS5cZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0LnBwbSAgdGVzdG9yaWcuanBnCiAJLlxkanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlIHRlc3RvdXQuYm1wICB0ZXN0b3JpZy5qcGcKIAkuXGNqcGVnIC1kY3QgaW50IC1vdXRmaWxlIHRlc3RvdXQuanBnICB0ZXN0aW1nLnBwbQpAQCAtMTQwLDEwICsxNzQsNjYgQEAKIAlmYyAvYiB0ZXN0b3JpZy5qcGcgdGVzdG91dHQuanBnCiAKIAoranNpbWRjZmcuaW5jOiBtYWtlY2ZnLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCisJJChDQykgJChDRkxBR1MpIG1ha2VjZmcuYworCSQoTEQpICQoTERGTEFHUykgLW91dDptYWtlY2ZnLmV4ZSBtYWtlY2ZnLm9iaiAkKExETElCUykKKwkuXG1ha2VjZmcuZXhlID4ganNpbWRjZmcuaW5jCisJJChSTSkgbWFrZWNmZy5vYmoKKwkkKFJNKSBtYWtlY2ZnLmV4ZQorCWlmIGV4aXN0IG1ha2VjZmcuZXhlLm1hbmlmZXN0ICQoUk0pIG1ha2VjZmcuZXhlLm1hbmlmZXN0CisKKy5hc20ub2JqOgorCSQoTkFTTSkgJChOQUZMQUdTKSAtbyAkQCAkPAorCitqc2ltZGNwdS5vYmo6IGpzaW1kY3B1LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jCitqc2ltZHczMi5vYmo6IGpzaW1kdzMyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jCitqc2ltZGRqZy5vYmo6IGpzaW1kZGpnLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jCitqY2NvbG1teC5vYmo6IGpjY29sbW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNjb2xzczIub2JqOiBqY2NvbHNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjc2FtbW14Lm9iajogamNzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY3NhbXNzMi5vYmo6IGpjc2Ftc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRjb2xtbXgub2JqOiBqZGNvbG1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkY29sc3MyLm9iajogamRjb2xzczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZG1lcm1teC5vYmo6IGpkbWVybW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRtZXJzczIub2JqOiBqZG1lcnNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkc2FtbW14Lm9iajogamRzYW1tbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZHNhbXNzMi5vYmo6IGpkc2Ftc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNxbnRpbnQub2JqOiBqY3FudGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRmbHQub2JqOiBqY3FudGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRtbXgub2JqOiBqY3FudG1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnQzZG4ub2JqOiBqY3FudDNkbi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRzMmkub2JqOiBqY3FudHMyaS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRzc2Uub2JqOiBqY3FudHNzZS5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamNxbnRzMmYub2JqOiBqY3FudHMyZi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZkY3RpbnQub2JqOiBqZmRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZkY3Rmc3Qub2JqOiBqZmRjdGZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZkY3RmbHQub2JqOiBqZmRjdGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZtbXhpbnQub2JqOiBqZm1teGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZtbXhmc3Qub2JqOiBqZm1teGZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamYzZG5mbHQub2JqOiBqZjNkbmZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZzczJpbnQub2JqOiBqZnNzMmludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZzczJmc3Qub2JqOiBqZnNzMmZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamZzc2VmbHQub2JqOiBqZnNzZWZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3RpbnQub2JqOiBqaWRjdGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3Rmc3Qub2JqOiBqaWRjdGZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3RyZWQub2JqOiBqaWRjdHJlZC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlkY3RmbHQub2JqOiBqaWRjdGZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamltbXhpbnQub2JqOiBqaW1teGludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamltbXhmc3Qub2JqOiBqaW1teGZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamltbXhyZWQub2JqOiBqaW1teHJlZC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamkzZG5mbHQub2JqOiBqaTNkbmZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJpbnQub2JqOiBqaXNzMmludC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJmc3Qub2JqOiBqaXNzMmZzdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJyZWQub2JqOiBqaXNzMnJlZC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzc2VmbHQub2JqOiBqaXNzZWZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworamlzczJmbHQub2JqOiBqaXNzMmZsdC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqZGN0LmluYworCitqc2ltZGdjYy5vYmo6IGpzaW1kZ2NjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmgKKwogamNhcGltaW4ub2JqOiBqY2FwaW1pbi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamNhcGlzdGQub2JqOiBqY2FwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamNjb2VmY3Qub2JqOiBqY2NvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNjb2xvci5vYmo6IGpjY29sb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjY29sb3Iub2JqOiBqY2NvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpjZGN0bWdyLm9iajogamNkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCiBqY2h1ZmYub2JqOiBqY2h1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNodWZmLmgKIGpjaW5pdC5vYmo6IGpjaW5pdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaApAQCAtMTU0LDMzICsyNDQsMzMgQEAKIGpjcGFyYW0ub2JqOiBqY3BhcmFtLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqY3BodWZmLm9iajogamNwaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY2h1ZmYuaAogamNwcmVwY3Qub2JqOiBqY3ByZXBjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNzYW1wbGUub2JqOiBqY3NhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNzYW1wbGUub2JqOiBqY3NhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCiBqY3RyYW5zLm9iajogamN0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRhcGltaW4ub2JqOiBqZGFwaW1pbi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRhcGlzdGQub2JqOiBqZGFwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRhdGFkc3Qub2JqOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCiBqZGF0YXNyYy5vYmo6IGpkYXRhc3JjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmgKIGpkY29lZmN0Lm9iajogamRjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkY29sb3Iub2JqOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZGNvbG9yLm9iajogamRjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCiBqZGRjdG1nci5vYmo6IGpkZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAogamRodWZmLm9iajogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkaHVmZi5oCiBqZGlucHV0Lm9iajogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRtYWluY3Qub2JqOiBqZG1haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRtYXJrZXIub2JqOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAogamRtYXN0ZXIub2JqOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtZXJnZS5vYmo6IGpkbWVyZ2UuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkbWVyZ2Uub2JqOiBqZG1lcmdlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpkcGh1ZmYub2JqOiBqZHBodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkaHVmZi5oCiBqZHBvc3RjdC5vYmo6IGpkcG9zdGN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZHNhbXBsZS5vYmo6IGpkc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZHNhbXBsZS5vYmo6IGpkc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjb2xzYW1wLmgKIGpkdHJhbnMub2JqOiBqZHRyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqZXJyb3Iub2JqOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC5vYmo6IGpmZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3Rmc3Qub2JqOiBqZmRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0aW50Lm9iajogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC5vYmo6IGppZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3Rmc3Qub2JqOiBqaWRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0aW50Lm9iajogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdHJlZC5vYmo6IGppZGN0cmVkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqZmRjdGZsdC5vYmo6IGpmZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqZmRjdGZzdC5vYmo6IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqZmRjdGludC5vYmo6IGpmZGN0aW50LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdGZsdC5vYmo6IGppZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdGZzdC5vYmo6IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdGludC5vYmo6IGppZGN0aW50LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAorIyBqaWRjdHJlZC5vYmo6IGppZGN0cmVkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAoganF1YW50MS5vYmo6IGpxdWFudDEuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKIGpxdWFudDIub2JqOiBqcXVhbnQyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCiBqdXRpbHMub2JqOiBqdXRpbHMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKZGlmZiAtLWdpdCBhL21ha2VmaWxlLnZjZGxsIGIvbWFrZWZpbGUudmNkbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3MTVlYgotLS0gL2Rldi9udWxsCisrKyBiL21ha2VmaWxlLnZjZGxsCkBAIC0wLDAgKzEsMzExIEBACisjIE1ha2VmaWxlIGZvciBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUKKyMgTW9kaWZpZWQgZm9yIHg4NiBTSU1EIGV4dGVuc2lvbgorCisjIFRoaXMgbWFrZWZpbGUgaXMgZm9yIE1pY3Jvc29mdCBWaXN1YWwgQysrIDYuMC4KKyMgSXQgYnVpbGRzIHRoZSBJSkcgbGlicmFyeSBhcyBhIGR5bmFtaWNhbGx5IGxpbmthYmxlIGxpYnJhcnkgKC5ETEwpLAorIyBhbmQgYnVpbGRzIHRoZSBzYW1wbGUgYXBwbGljYXRpb25zIHdoaWNoIGFyZSBsaW5rZWQgYWdhaW5zdCB0aGUgRExMLgorCisjIFJlYWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBiZWZvcmUgc2F5aW5nICJubWFrZSIgISEKKworIyBUaGUgbmFtZSBvZiB5b3VyIEMgY29tcGlsZXI6CitDQz0gY2wKK0xEPSBsaW5rCitSQz0gcmMKKworIyBZb3UgbWF5IHdhbnQgdG8gYWRqdXN0IHRoZXNlIGNvbXBpbGVyIG9wdGlvbnM6CisjICBZb3UgaGF2ZSB0byB1c2UgYSBETEwgdmVyc2lvbiBvZiBDIFJ1bi1UaW1lIGxpYnJhcnkgZm9yIGJvdGgKKyMgIHRoZSBKUEVHIERMTCBhbmQgYW55IGFwcGxpY2F0aW9ucyBsaW5rZWQgdG8gdGhlIEpQRUcgRExMLgorQ0ZMQUdTPSAtbm9sb2dvIC1jIC1NRCAtVzMgLU8yIC1HRiAtR3kgLUROREVCVUcgLUkuCisKKyMgR2VuZXJhbGx5LCB3ZSByZWNvbW1lbmQgZGVmaW5pbmcgYW55IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBpbiBqY29uZmlnLmgsCisjIE5PVCB2aWEgLUQgc3dpdGNoZXMgaGVyZS4KKworIyBUaGUgZXhlY3V0YWJsZSBuYW1lIG9mIE5BU00gYW5kIGl0cyBvcHRpb25zOgorTkFTTT0gbmFzbXcKK05BRkxBR1M9ICQoTkFTTV9PQkpGTVQpIC1JLi8KKyMgb2JqZWN0IGZpbGUgZm9ybWF0IHNwZWNpZmllciBmb3IgTkFTTQorIyBzZWUganNpbWRleHQuaW5jIGZvciBtb3JlIGRldGFpbHMuCitOQVNNX09CSkZNVD0gLWZ3aW4zMiAtRFdJTjMyCisKKyMgTGluay10aW1lIG9wdGlvbnM6CitMREZMQUdTPSAtbm9sb2dvIC1yZWxlYXNlIC1zdWJzeXN0ZW06Y29uc29sZSw0LjAgLW9wdDpub3dpbjk4CitMREZMQUdTX0RMTD0gLW5vbG9nbyAtcmVsZWFzZSAtZGxsIC1vcHQ6bm93aW45OAorCisjIFRvIGxpbmsgYW55IHNwZWNpYWwgbGlicmFyaWVzLCBhZGQgdGhlIG5lY2Vzc2FyeSBjb21tYW5kcyBoZXJlLgorTERMSUJTPSAKKworIyBETEwgdG8gYnVpbGQKK0RMTE5BTUUgPSBqcGVnNjIuZGxsCisjIGltcG9ydCBsaWJyYXJ5CitMSUJOQU1FID0ganBlZzYyLmxpYgorCisjIFB1dCBoZXJlIHRoZSBvYmplY3QgZmlsZSBuYW1lIGZvciB0aGUgY29ycmVjdCBzeXN0ZW0tZGVwZW5kZW50IG1lbW9yeQorIyBtYW5hZ2VyIGZpbGUuICBGb3IgTlQgd2Ugc3VnZ2VzdCBqbWVtbm9icy5vYmosIHdoaWNoIGV4cGVjdHMgdGhlIE9TIHRvCisjIHByb3ZpZGUgYWRlcXVhdGUgdmlydHVhbCBtZW1vcnkuCitTWVNERVBNRU09IGptZW1ub2JzLm9iagorCisjIE9TLWRlcGVuZGVudCBTSU1EIGluc3RydWN0aW9uIHN1cHBvcnQgY2hlY2tlcgorIyBqc2ltZHczMi5vYmogKFdpbjMyKSAvIGpzaW1kZGpnLm9iaiAoREpHUFAgVi4yKSAvIGpzaW1kZ2NjLm9iaiAoVW5peC9nY2MpCitTWVNERVBTSU1EQ0hLPSBqc2ltZHczMi5vYmoKKworIyBtaXNjZWxsYW5lb3VzIE9TLWRlcGVuZGVudCBzdHVmZgorIyBmaWxlIGRlbGV0aW9uIGNvbW1hbmQKK1JNPSBkZWwKKworIyBFbmQgb2YgY29uZmlndXJhYmxlIG9wdGlvbnMuCisKKworIyBzb3VyY2UgZmlsZXM6IEpQRUcgbGlicmFyeSBwcm9wZXIKK0xJQlNPVVJDRVM9IGpjYXBpbWluLmMgamNhcGlzdGQuYyBqY2NvZWZjdC5jIGpjY29sb3IuYyBqY2RjdG1nci5jIGpjaHVmZi5jIFwKKyAgICAgICAgamNpbml0LmMgamNtYWluY3QuYyBqY21hcmtlci5jIGpjbWFzdGVyLmMgamNvbWFwaS5jIGpjcGFyYW0uYyBcCisgICAgICAgIGpjcGh1ZmYuYyBqY3ByZXBjdC5jIGpjc2FtcGxlLmMgamN0cmFucy5jIGpkYXBpbWluLmMgamRhcGlzdGQuYyBcCisgICAgICAgIGpkYXRhZHN0LmMgamRhdGFzcmMuYyBqZGNvZWZjdC5jIGpkY29sb3IuYyBqZGRjdG1nci5jIGpkaHVmZi5jIFwKKyAgICAgICAgamRpbnB1dC5jIGpkbWFpbmN0LmMgamRtYXJrZXIuYyBqZG1hc3Rlci5jIGpkbWVyZ2UuYyBqZHBodWZmLmMgXAorICAgICAgICBqZHBvc3RjdC5jIGpkc2FtcGxlLmMgamR0cmFucy5jIGplcnJvci5jIGpmZGN0Zmx0LmMgamZkY3Rmc3QuYyBcCisgICAgICAgIGpmZGN0aW50LmMgamlkY3RmbHQuYyBqaWRjdGZzdC5jIGppZGN0aW50LmMgamlkY3RyZWQuYyBqcXVhbnQxLmMgXAorICAgICAgICBqcXVhbnQyLmMganV0aWxzLmMgam1lbW1nci5jCisjIG1lbW1nciBiYWNrIGVuZHM6IGNvbXBpbGUgb25seSBvbmUgb2YgdGhlc2UgaW50byBhIHdvcmtpbmcgbGlicmFyeQorU1lTREVQU09VUkNFUz0gam1lbWFuc2kuYyBqbWVtbmFtZS5jIGptZW1ub2JzLmMgam1lbWRvcy5jIGptZW1tYWMuYworIyBzb3VyY2UgZmlsZXM6IGNqcGVnL2RqcGVnL2pwZWd0cmFuIGFwcGxpY2F0aW9ucywgYWxzbyByZGpwZ2NvbS93cmpwZ2NvbQorQVBQU09VUkNFUz0gY2pwZWcuYyBkanBlZy5jIGpwZWd0cmFuLmMgcmRqcGdjb20uYyB3cmpwZ2NvbS5jIGNkanBlZy5jIFwKKyAgICAgICAgcmRjb2xtYXAuYyByZHN3aXRjaC5jIHRyYW5zdXBwLmMgcmRwcG0uYyB3cnBwbS5jIHJkZ2lmLmMgd3JnaWYuYyBcCisgICAgICAgIHJkdGFyZ2EuYyB3cnRhcmdhLmMgcmRibXAuYyB3cmJtcC5jIHJkcmxlLmMgd3JybGUuYworU09VUkNFUz0gJChMSUJTT1VSQ0VTKSAkKFNZU0RFUFNPVVJDRVMpICQoQVBQU09VUkNFUykKKyMgZmlsZXMgaW5jbHVkZWQgYnkgc291cmNlIGZpbGVzCitJTkNMVURFUz0gamNodWZmLmggamRodWZmLmggamRjdC5oIGplcnJvci5oIGppbmNsdWRlLmggam1lbXN5cy5oIGptb3JlY2ZnLmggXAorICAgICAgICBqcGVnaW50LmgganBlZ2xpYi5oIGp2ZXJzaW9uLmggY2RqcGVnLmggY2RlcnJvci5oIHRyYW5zdXBwLmgKKyMgZG9jdW1lbnRhdGlvbiwgdGVzdCwgYW5kIHN1cHBvcnQgZmlsZXMKK0RPQ1M9IFJFQURNRSBpbnN0YWxsLmRvYyB1c2FnZS5kb2MgY2pwZWcuMSBkanBlZy4xIGpwZWd0cmFuLjEgcmRqcGdjb20uMSBcCisgICAgICAgIHdyanBnY29tLjEgd2l6YXJkLmRvYyBleGFtcGxlLmMgbGlianBlZy5kb2Mgc3RydWN0dXJlLmRvYyBcCisgICAgICAgIGNvZGVydWxlcy5kb2MgZmlsZWxpc3QuZG9jIGNoYW5nZS5sb2cKK01LRklMRVM9IGNvbmZpZ3VyZSBtYWtlZmlsZS5jZmcgbWFrZWZpbGUuYW5zaSBtYWtlZmlsZS51bml4IG1ha2VmaWxlLmJjYyBcCisgICAgICAgIG1ha2VmaWxlLm1jNiBtYWtlZmlsZS5kaiBtYWtlZmlsZS53YXQgbWFrZWZpbGUudmMgbWFrZWxpYi5kcyBcCisgICAgICAgIG1ha2VhcHBzLmRzIG1ha2Vwcm9qLm1hYyBtYWtjanBlZy5zdCBtYWtkanBlZy5zdCBtYWtsanBlZy5zdCBcCisgICAgICAgIG1ha3RqcGVnLnN0IG1ha2VmaWxlLm1hbnggbWFrZWZpbGUuc2FzIG1ha2VmaWxlLm1tcyBtYWtlZmlsZS52bXMgXAorICAgICAgICBtYWt2bXMub3B0CitDT05GSUdGSUxFUz0gamNvbmZpZy5jZmcgamNvbmZpZy5iY2MgamNvbmZpZy5tYzYgamNvbmZpZy5kaiBqY29uZmlnLndhdCBcCisgICAgICAgIGpjb25maWcudmMgamNvbmZpZy5tYWMgamNvbmZpZy5zdCBqY29uZmlnLm1hbnggamNvbmZpZy5zYXMgXAorICAgICAgICBqY29uZmlnLnZtcworQ09ORklHVVJFRklMRVM9IGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGluc3RhbGwtc2ggbHRjb25maWcgbHRtYWluLnNoCitPVEhFUkZJTEVTPSBqY29uZmlnLmRvYyBja2NvbmZpZy5jIGFuc2kya25yLmMgYW5zaTJrbnIuMSBqbWVtZG9zYS5hc20KK1RFU1RGSUxFUz0gdGVzdG9yaWcuanBnIHRlc3RpbWcucHBtIHRlc3RpbWcuYm1wIHRlc3RpbWcuanBnIHRlc3Rwcm9nLmpwZyBcCisgICAgICAgIHRlc3RpbWdwLmpwZworRElTVEZJTEVTPSAkKERPQ1MpICQoTUtGSUxFUykgJChDT05GSUdGSUxFUykgJChTT1VSQ0VTKSAkKElOQ0xVREVTKSBcCisgICAgICAgICQoQ09ORklHVVJFRklMRVMpICQoT1RIRVJGSUxFUykgJChURVNURklMRVMpCisjIGxpYnJhcnkgb2JqZWN0IGZpbGVzIGNvbW1vbiB0byBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbgorQ09NT0JKRUNUUz0gamNvbWFwaS5vYmoganV0aWxzLm9iaiBqZXJyb3Iub2JqIGptZW1tZ3Iub2JqICQoU1lTREVQTUVNKSBcCisgICAgICAgIGpzaW1kY3B1Lm9iaiAkKFNZU0RFUFNJTURDSEspCisjIGNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCitDTElCT0JKRUNUUz0gamNhcGltaW4ub2JqIGpjYXBpc3RkLm9iaiBqY3RyYW5zLm9iaiBqY3BhcmFtLm9iaiBqZGF0YWRzdC5vYmogXAorICAgICAgICBqY2luaXQub2JqIGpjbWFzdGVyLm9iaiBqY21hcmtlci5vYmogamNtYWluY3Qub2JqIGpjcHJlcGN0Lm9iaiBcCisgICAgICAgIGpjY29lZmN0Lm9iaiBqY2NvbG9yLm9iaiBqY3NhbXBsZS5vYmogamNodWZmLm9iaiBqY3BodWZmLm9iaiBcCisgICAgICAgIGpjZGN0bWdyLm9iaiBqY2NvbG1teC5vYmogamNjb2xzczIub2JqIGpjc2FtbW14Lm9iaiBqY3NhbXNzMi5vYmogXAorICAgICAgICBqY3FudGludC5vYmogamNxbnRmbHQub2JqIGpjcW50bW14Lm9iaiBqY3FudDNkbi5vYmogamNxbnRzMmkub2JqIFwKKyAgICAgICAgamNxbnRzc2Uub2JqIGpjcW50czJmLm9iaiBqZmRjdGludC5vYmogamZkY3Rmc3Qub2JqIGpmZGN0Zmx0Lm9iaiBcCisgICAgICAgIGpmbW14aW50Lm9iaiBqZm1teGZzdC5vYmogamYzZG5mbHQub2JqIGpmc3MyaW50Lm9iaiBqZnNzMmZzdC5vYmogXAorICAgICAgICBqZnNzZWZsdC5vYmoKKyMgZGVjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcworRExJQk9CSkVDVFM9IGpkYXBpbWluLm9iaiBqZGFwaXN0ZC5vYmogamR0cmFucy5vYmogamRhdGFzcmMub2JqIFwKKyAgICAgICAgamRtYXN0ZXIub2JqIGpkaW5wdXQub2JqIGpkbWFya2VyLm9iaiBqZGh1ZmYub2JqIGpkcGh1ZmYub2JqIFwKKyAgICAgICAgamRtYWluY3Qub2JqIGpkY29lZmN0Lm9iaiBqZHBvc3RjdC5vYmogamRkY3RtZ3Iub2JqIGpkc2FtcGxlLm9iaiBcCisgICAgICAgIGpkY29sb3Iub2JqIGpxdWFudDEub2JqIGpxdWFudDIub2JqIGpkbWVyZ2Uub2JqIGppZGN0aW50Lm9iaiBcCisgICAgICAgIGppZGN0ZnN0Lm9iaiBqaWRjdHJlZC5vYmogamlkY3RmbHQub2JqIGppbW14aW50Lm9iaiBqaW1teGZzdC5vYmogXAorICAgICAgICBqaW1teHJlZC5vYmogamkzZG5mbHQub2JqIGppc3MyaW50Lm9iaiBqaXNzMmZzdC5vYmogamlzczJyZWQub2JqIFwKKyAgICAgICAgamlzc2VmbHQub2JqIGppc3MyZmx0Lm9iaiBqZHNhbW1teC5vYmogamRzYW1zczIub2JqIGpkY29sbW14Lm9iaiBcCisgICAgICAgIGpkY29sc3MyLm9iaiBqZG1lcm1teC5vYmogamRtZXJzczIub2JqCisjIFRoZXNlIG9iamVjdGZpbGVzIGFyZSBpbmNsdWRlZCBpbiBsaWJqcGVnLmxpYgorTElCT0JKRUNUUz0gJChDTElCT0JKRUNUUykgJChETElCT0JKRUNUUykgJChDT01PQkpFQ1RTKQorIyBvYmplY3QgZmlsZXMgZm9yIHNhbXBsZSBhcHBsaWNhdGlvbnMgKGV4Y2x1ZGluZyBsaWJyYXJ5IGZpbGVzKQorQ09CSkVDVFM9IGNqcGVnLm9iaiByZHBwbS5vYmogcmRnaWYub2JqIHJkdGFyZ2Eub2JqIHJkcmxlLm9iaiByZGJtcC5vYmogXAorICAgICAgICByZHN3aXRjaC5vYmogY2RqcGVnLm9iagorRE9CSkVDVFM9IGRqcGVnLm9iaiB3cnBwbS5vYmogd3JnaWYub2JqIHdydGFyZ2Eub2JqIHdycmxlLm9iaiB3cmJtcC5vYmogXAorICAgICAgICByZGNvbG1hcC5vYmogY2RqcGVnLm9iagorVFJPQkpFQ1RTPSBqcGVndHJhbi5vYmogcmRzd2l0Y2gub2JqIGNkanBlZy5vYmogdHJhbnN1cHAub2JqCisKKyMgVGVtcGxhdGUgY29tbWFuZCBmb3IgY29tcGlsaW5nIC5jIHRvIC5vYmoKKy5jLm9iajo6CisJJChDQykgJChDRkxBR1MpICQ8CisKKworYWxsOiAkKERMTE5BTUUpIGNqcGVnLmV4ZSBkanBlZy5leGUganBlZ3RyYW4uZXhlIHJkanBnY29tLmV4ZSB3cmpwZ2NvbS5leGUKKworJChMSUJOQU1FKTogJChETExOQU1FKQorJChETExOQU1FKTogJChMSUJPQkpFQ1RTKSBqcGVnZGxsLnJlcyBqcGVnZGxsLmRlZgorCSQoTEQpICQoTERGTEFHU19ETEwpIC1vdXQ6JChETExOQU1FKSAtaW1wbGliOiQoTElCTkFNRSkgXAorCQkkKExJQk9CSkVDVFMpIGpwZWdkbGwucmVzIC1kZWY6anBlZ2RsbC5kZWYKKworanBlZ2RsbC5yZXM6IGpwZWdkbGwucmMKKwkkKFJDKSAtZm8gJEAgJCoucmMKKworY2pwZWcuZXhlOiAkKENPQkpFQ1RTKSAkKExJQk5BTUUpCisJJChMRCkgJChMREZMQUdTKSAtb3V0OmNqcGVnLmV4ZSAkKENPQkpFQ1RTKSAkKExJQk5BTUUpICQoTERMSUJTKQorCitkanBlZy5leGU6ICQoRE9CSkVDVFMpICQoTElCTkFNRSkKKwkkKExEKSAkKExERkxBR1MpIC1vdXQ6ZGpwZWcuZXhlICQoRE9CSkVDVFMpICQoTElCTkFNRSkgJChMRExJQlMpCisKK2pwZWd0cmFuLmV4ZTogJChUUk9CSkVDVFMpICQoTElCTkFNRSkKKwkkKExEKSAkKExERkxBR1MpIC1vdXQ6anBlZ3RyYW4uZXhlICQoVFJPQkpFQ1RTKSAkKExJQk5BTUUpICQoTERMSUJTKQorCityZGpwZ2NvbS5leGU6IHJkanBnY29tLm9iagorCSQoTEQpICQoTERGTEFHUykgLW91dDpyZGpwZ2NvbS5leGUgcmRqcGdjb20ub2JqICQoTERMSUJTKQorCit3cmpwZ2NvbS5leGU6IHdyanBnY29tLm9iagorCSQoTEQpICQoTERGTEFHUykgLW91dDp3cmpwZ2NvbS5leGUgd3JqcGdjb20ub2JqICQoTERMSUJTKQorCisKK2NsZWFuOgorCS0kKFJNKSAqLm9iagorCS0kKFJNKSBjanBlZy5leGUKKwktJChSTSkgZGpwZWcuZXhlCisJLSQoUk0pIGpwZWd0cmFuLmV4ZQorCS0kKFJNKSByZGpwZ2NvbS5leGUKKwktJChSTSkgd3JqcGdjb20uZXhlCisJLSQoUk0pIGpzaW1kY2ZnLmluYworCS0kKFJNKSBqcGVnZGxsLnJlcworCS0kKFJNKSAkKERMTE5BTUUpCisJLSQoUk0pICQoRExMTkFNRTouZGxsPS5leHApCisJLSQoUk0pICQoTElCTkFNRSkKKwktaWYgZXhpc3QgKi5tYW5pZmVzdCAkKFJNKSAqLm1hbmlmZXN0CisJLWlmIGV4aXN0IHRlc3RvdXQqICAgJChSTSkgdGVzdG91dCoKKwordGVzdDogY2pwZWcuZXhlIGRqcGVnLmV4ZSBqcGVndHJhbi5leGUKKwktaWYgZXhpc3QgdGVzdG91dCogJChSTSkgdGVzdG91dCoKKwkuXGRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dC5wcG0gIHRlc3RvcmlnLmpwZworCS5cZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCAgdGVzdG9yaWcuanBnCisJLlxjanBlZyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0LmpwZyAgdGVzdGltZy5wcG0KKwkuXGRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dHAucHBtIHRlc3Rwcm9nLmpwZworCS5cY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgdGVzdG91dHAuanBnIHRlc3RpbWcucHBtCisJLlxqcGVndHJhbiAtb3V0ZmlsZSB0ZXN0b3V0dC5qcGcgdGVzdHByb2cuanBnCisJZmMgL2IgdGVzdGltZy5wcG0gdGVzdG91dC5wcG0KKwlmYyAvYiB0ZXN0aW1nLmJtcCB0ZXN0b3V0LmJtcAorCWZjIC9iIHRlc3RpbWcuanBnIHRlc3RvdXQuanBnCisJZmMgL2IgdGVzdGltZy5wcG0gdGVzdG91dHAucHBtCisJZmMgL2IgdGVzdGltZ3AuanBnIHRlc3RvdXRwLmpwZworCWZjIC9iIHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKKworCitqc2ltZGNmZy5pbmM6IG1ha2VjZmcuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKKwkkKENDKSAkKENGTEFHUykgbWFrZWNmZy5jCisJJChMRCkgJChMREZMQUdTKSAtb3V0Om1ha2VjZmcuZXhlIG1ha2VjZmcub2JqICQoTERMSUJTKQorCS5cbWFrZWNmZy5leGUgPiBqc2ltZGNmZy5pbmMKKwkkKFJNKSBtYWtlY2ZnLm9iagorCSQoUk0pIG1ha2VjZmcuZXhlCisJaWYgZXhpc3QgbWFrZWNmZy5leGUubWFuaWZlc3QgJChSTSkgbWFrZWNmZy5leGUubWFuaWZlc3QKKworLmFzbS5vYmo6CisJJChOQVNNKSAkKE5BRkxBR1MpIC1vICRAICQ8CisKK2pzaW1kY3B1Lm9iajoganNpbWRjcHUuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pzaW1kdzMyLm9iajoganNpbWR3MzIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pzaW1kZGpnLm9iajoganNpbWRkamcuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMKK2pjY29sbW14Lm9iajogamNjb2xtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY2NvbHNzMi5vYmo6IGpjY29sc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamNzYW1tbXgub2JqOiBqY3NhbW1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pjc2Ftc3MyLm9iajogamNzYW1zczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZGNvbG1teC5vYmo6IGpkY29sbW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRjb2xzczIub2JqOiBqZGNvbHNzMi5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkbWVybW14Lm9iajogamRtZXJtbXguYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqZG1lcnNzMi5vYmo6IGpkbWVyc3MyLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpjb2xzYW1wLmluYworamRzYW1tbXgub2JqOiBqZHNhbW1teC5hc20ganNpbWRjZmcuaW5jIGpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMKK2pkc2Ftc3MyLm9iajogamRzYW1zczIuYXNtIGpzaW1kY2ZnLmluYyBqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jCitqY3FudGludC5vYmo6IGpjcW50aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudGZsdC5vYmo6IGpjcW50Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudG1teC5vYmo6IGpjcW50bW14LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudDNkbi5vYmo6IGpjcW50M2RuLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHMyaS5vYmo6IGpjcW50czJpLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHNzZS5vYmo6IGpjcW50c3NlLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqY3FudHMyZi5vYmo6IGpjcW50czJmLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGludC5vYmo6IGpmZGN0aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGZzdC5vYmo6IGpmZGN0ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZmRjdGZsdC5vYmo6IGpmZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGludC5vYmo6IGpmbW14aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZm1teGZzdC5vYmo6IGpmbW14ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZjNkbmZsdC5vYmo6IGpmM2RuZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmludC5vYmo6IGpmc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzMmZzdC5vYmo6IGpmc3MyZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqZnNzZWZsdC5vYmo6IGpmc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGludC5vYmo6IGppZGN0aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZzdC5vYmo6IGppZGN0ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdHJlZC5vYmo6IGppZGN0cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaWRjdGZsdC5vYmo6IGppZGN0Zmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teGludC5vYmo6IGppbW14aW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teGZzdC5vYmo6IGppbW14ZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaW1teHJlZC5vYmo6IGppbW14cmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaTNkbmZsdC5vYmo6IGppM2RuZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmludC5vYmo6IGppc3MyaW50LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZzdC5vYmo6IGppc3MyZnN0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMnJlZC5vYmo6IGppc3MycmVkLmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzZWZsdC5vYmo6IGppc3NlZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCitqaXNzMmZsdC5vYmo6IGppc3MyZmx0LmFzbSBqc2ltZGNmZy5pbmMganNpbWRleHQuaW5jIGpkY3QuaW5jCisKK2pzaW1kZ2NjLm9iajoganNpbWRnY2MuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaAorCitqY2FwaW1pbi5vYmo6IGpjYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY2FwaXN0ZC5vYmo6IGpjYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY2NvZWZjdC5vYmo6IGpjY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY2NvbG9yLm9iajogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCitqY2RjdG1nci5vYmo6IGpjZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAoramNodWZmLm9iajogamNodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpjaHVmZi5oCitqY2luaXQub2JqOiBqY2luaXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjbWFpbmN0Lm9iajogamNtYWluY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjbWFya2VyLm9iajogamNtYXJrZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjbWFzdGVyLm9iajogamNtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjb21hcGkub2JqOiBqY29tYXBpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqY3BhcmFtLm9iajogamNwYXJhbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramNwaHVmZi5vYmo6IGpjcGh1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNodWZmLmgKK2pjcHJlcGN0Lm9iajogamNwcmVwY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pjc2FtcGxlLm9iajogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramN0cmFucy5vYmo6IGpjdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkYXBpbWluLm9iajogamRhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkYXBpc3RkLm9iajogamRhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkYXRhZHN0Lm9iajogamRhdGFkc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaAoramRhdGFzcmMub2JqOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCitqZGNvZWZjdC5vYmo6IGpkY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqZGNvbG9yLm9iajogamRjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqY29sc2FtcC5oCitqZGRjdG1nci5vYmo6IGpkZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAoramRodWZmLm9iajogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkaHVmZi5oCitqZGlucHV0Lm9iajogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtYWluY3Qub2JqOiBqZG1haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtYXJrZXIub2JqOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtYXN0ZXIub2JqOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoramRtZXJnZS5vYmo6IGpkbWVyZ2UuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramRwaHVmZi5vYmo6IGpkcGh1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRodWZmLmgKK2pkcG9zdGN0Lm9iajogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2pkc2FtcGxlLm9iajogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamNvbHNhbXAuaAoramR0cmFucy5vYmo6IGpkdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKK2plcnJvci5vYmo6IGplcnJvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGp2ZXJzaW9uLmggamVycm9yLmgKKyMgamZkY3RmbHQub2JqOiBqZmRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamZkY3Rmc3Qub2JqOiBqZmRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamZkY3RpbnQub2JqOiBqZmRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RmbHQub2JqOiBqaWRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3Rmc3Qub2JqOiBqaWRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RpbnQub2JqOiBqaWRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKKyMgamlkY3RyZWQub2JqOiBqaWRjdHJlZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKK2pxdWFudDEub2JqOiBqcXVhbnQxLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqcXVhbnQyLm9iajoganF1YW50Mi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAoranV0aWxzLm9iajoganV0aWxzLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCitqbWVtbWdyLm9iajogam1lbW1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKK2ptZW1hbnNpLm9iajogam1lbWFuc2kuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitqbWVtbmFtZS5vYmo6IGptZW1uYW1lLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAoram1lbW5vYnMub2JqOiBqbWVtbm9icy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKK2ptZW1kb3Mub2JqOiBqbWVtZG9zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAoram1lbW1hYy5vYmo6IGptZW1tYWMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCitjanBlZy5vYmo6IGNqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIGp2ZXJzaW9uLmgKK2RqcGVnLm9iajogZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgganZlcnNpb24uaAoranBlZ3RyYW4ub2JqOiBqcGVndHJhbi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oIGp2ZXJzaW9uLmgKK3JkanBnY29tLm9iajogcmRqcGdjb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaAord3JqcGdjb20ub2JqOiB3cmpwZ2NvbS5jIGppbmNsdWRlLmggamNvbmZpZy5oCitjZGpwZWcub2JqOiBjZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3JkY29sbWFwLm9iajogcmRjb2xtYXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3Jkc3dpdGNoLm9iajogcmRzd2l0Y2guYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3RyYW5zdXBwLm9iajogdHJhbnN1cHAuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggdHJhbnN1cHAuaAorcmRwcG0ub2JqOiByZHBwbS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAord3JwcG0ub2JqOiB3cnBwbS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAorcmRnaWYub2JqOiByZGdpZi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAord3JnaWYub2JqOiB3cmdpZi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAorcmR0YXJnYS5vYmo6IHJkdGFyZ2EuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKK3dydGFyZ2Eub2JqOiB3cnRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCityZGJtcC5vYmo6IHJkYm1wLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCit3cmJtcC5vYmo6IHdyYm1wLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCityZHJsZS5vYmo6IHJkcmxlLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCit3cnJsZS5vYmo6IHdycmxlLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCmRpZmYgLS1naXQgYS9uYXNtX2x0LnNoIGIvbmFzbV9sdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjVhNTkxCi0tLSAvZGV2L251bGwKKysrIGIvbmFzbV9sdC5zaApAQCAtMCwwICsxLDU3IEBACisjISAvYmluL3NoCitjb21tYW5kPSIiCitpbmZpbGU9IiIKK29fb3B0PW5vCitwaWM9bm8KK3doaWxlIFsgJCMgLWd0IDAgXTsgZG8KKyAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgLURQSUN8LWZQSUN8LWZwaWMpCisgICAgICAgICAgICBpZiBbICIkcGljIiAhPSAieWVzIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgIGNvbW1hbmQ9IiRjb21tYW5kIC1EUElDIgorICAgICAgICAgICAgICAgIHBpYz15ZXMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICAtZnwtZmJpbnwtZmFvdXR8LWZhb3V0YnwtZmNvZmZ8LWZlbGZ8LWZhczg2fCBcCisgICAgICAgIC1mb2JqfC1md2luMzJ8LWZyZGZ8LWZpZWVlfC1mbWFjaG8pCisgICAgICAgICAgICAjIGl0J3MgYSBmaWxlIGZvcm1hdCBzcGVjaWZpZXIgZm9yIG5hc20uCisgICAgICAgICAgICBjb21tYW5kPSIkY29tbWFuZCAkMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIC1mKikKKyAgICAgICAgICAgICMgbWF5YmUgYSBjb2RlLWdlbmVyYXRpb24gZmxhZyBmb3IgZ2NjLgorICAgICAgICAgICAgOzsKKyAgICAgICAgLVtJaV0qKQorICAgICAgICAgICAgaW5jZGlyPWBlY2hvICIkMSIgfCBzZWQgJ3MvXi1bSWldLy8nYAorICAgICAgICAgICAgaWYgWyAieCRpbmNkaXIiID0geCAtYSAieCQyIiAhPSB4IF0gOyB0aGVuCisgICAgICAgICAgICAgICAgY2FzZSAiJDIiIGluCisgICAgICAgICAgICAgICAgICAgIC0qKSA7OworICAgICAgICAgICAgICAgICAgICAqKSBpbmNkaXI9IiQyIjsgc2hpZnQ7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiBbICJ4JGluY2RpciIgIT0geCBdIDsgdGhlbgorICAgICAgICAgICAgICAgICMgSW4gdGhlIGNhc2Ugb2YgTkFTTSwgdGhlIHRyYWlsaW5nIHNsYXNoIGlzIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICBpbmNkaXI9YGVjaG8gIiRpbmNkaXIiIHwgc2VkICdzJS8qJCUvJSdgCisgICAgICAgICAgICAgICAgY29tbWFuZD0iJGNvbW1hbmQgLUkkaW5jZGlyIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIC1vKikKKyAgICAgICAgICAgIG9fb3B0PXllcworICAgICAgICAgICAgY29tbWFuZD0iJGNvbW1hbmQgJDEiCisgICAgICAgICAgICA7OworICAgICAgICAqLmFzbSkKKyAgICAgICAgICAgIGluZmlsZT0kMQorICAgICAgICAgICAgY29tbWFuZD0iJGNvbW1hbmQgJDEiCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgY29tbWFuZD0iJGNvbW1hbmQgJDEiCisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBzaGlmdAorZG9uZQoraWYgWyAiJG9fb3B0IiAhPSB5ZXMgXSA7IHRoZW4KKyAgICAjIEJ5IGRlZmF1bHQsIE5BU00gY3JlYXRlcyBhbiBvdXRwdXQgZmlsZQorICAgICMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBpbnB1dCBmaWxlLgorICAgIG91dGZpbGU9Ii1vIGBlY2hvICRpbmZpbGUgfCBzZWQgLWUgJ3MlXi4qLyUlJyAtZSAncyVcLlteLl0qJCUlJ2AubyIKKyAgICBjb21tYW5kPSIkY29tbWFuZCAkb3V0ZmlsZSIKK2ZpCitlY2hvICRjb21tYW5kCitleGVjICRjb21tYW5kCmRpZmYgLS1naXQgYS9yZGJtcC5jIGIvcmRibXAuYwppbmRleCBiMDVmZTJhLi4yMjQ1ODQ3IDEwMDY0NAotLS0gYS9yZGJtcC5jCisrKyBiL3JkYm1wLmMKQEAgLTUsNiArNSwxMyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgorICogTGFzdCBNb2RpZmllZCA6IE9jdG9iZXIgMTksIDIwMDQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKICAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byByZWFkIGlucHV0IGltYWdlcyBpbiBNaWNyb3NvZnQgIkJNUCIKICAqIGZvcm1hdCAoTVMgV2luZG93cyAzLngsIE9TLzIgMS54LCBhbmQgT1MvMiAyLnggZmxhdm9ycykuCiAgKiBDdXJyZW50bHksIG9ubHkgOC1iaXQgYW5kIDI0LWJpdCBpbWFnZXMgYXJlIHN1cHBvcnRlZCwgbm90IDEtYml0IG9yCkBAIC0xODcsMTEgKzE5NCwxNCBAQAogcHJlbG9hZF9pbWFnZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCiB7CiAgIGJtcF9zb3VyY2VfcHRyIHNvdXJjZSA9IChibXBfc291cmNlX3B0cikgc2luZm87CisjaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KSB8fCBkZWZpbmVkKE5FRURfRkFSX1BPSU5URVJTKQogICByZWdpc3RlciBGSUxFICppbmZpbGUgPSBzb3VyY2UtPnB1Yi5pbnB1dF9maWxlOwogICByZWdpc3RlciBpbnQgYzsKICAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0X3B0cjsKKyAgSkRJTUVOU0lPTiBjb2w7CisjZW5kaWYKKyAgSkRJTUVOU0lPTiByb3c7CiAgIEpTQU1QQVJSQVkgaW1hZ2VfcHRyOwotICBKRElNRU5TSU9OIHJvdywgY29sOwogICBjZF9wcm9ncmVzc19wdHIgcHJvZ3Jlc3MgPSAoY2RfcHJvZ3Jlc3NfcHRyKSBjaW5mby0+cHJvZ3Jlc3M7CiAKICAgLyogUmVhZCB0aGUgZGF0YSBpbnRvIGEgdmlydHVhbCBhcnJheSBpbiBpbnB1dC1maWxlIHJvdyBvcmRlci4gKi8KQEAgLTIwNCw2ICsyMTQsMTAgQEAKICAgICBpbWFnZV9wdHIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKICAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgc291cmNlLT53aG9sZV9pbWFnZSwKICAgICAgICByb3csIChKRElNRU5TSU9OKSAxLCBUUlVFKTsKKyNpZiAoQklUU19JTl9KU0FNUExFID09IDgpICYmICFkZWZpbmVkKE5FRURfRkFSX1BPSU5URVJTKQorICAgIGlmICghIFJlYWRPSyhzb3VyY2UtPnB1Yi5pbnB1dF9maWxlLCBpbWFnZV9wdHJbMF0sIHNvdXJjZS0+cm93X3dpZHRoKSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU9GKTsKKyNlbHNlCiAgICAgb3V0X3B0ciA9IGltYWdlX3B0clswXTsKICAgICBmb3IgKGNvbCA9IHNvdXJjZS0+cm93X3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgewogICAgICAgLyogaW5saW5lIGNvcHkgb2YgcmVhZF9ieXRlKCkgZm9yIHNwZWVkICovCkBAIC0yMTEsNiArMjI1LDcgQEAKIAlFUlJFWElUKGNpbmZvLCBKRVJSX0lOUFVUX0VPRik7CiAgICAgICAqb3V0X3B0cisrID0gKEpTQU1QTEUpIGM7CiAgICAgfQorI2VuZGlmCiAgIH0KICAgaWYgKHByb2dyZXNzICE9IE5VTEwpCiAgICAgcHJvZ3Jlc3MtPmNvbXBsZXRlZF9leHRyYV9wYXNzZXMrKzsKZGlmZiAtLWdpdCBhL3JkZ2lmLmMgYi9yZGdpZi5jCmluZGV4IGIyN2MxNjcuLjBkYTI1MTUgMTAwNjQ0Ci0tLSBhL3JkZ2lmLmMKKysrIGIvcmRnaWYuYwpAQCAtMSwxOSArMSwzOSBAQAogLyoKICAqIHJkZ2lmLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogV0FSTklORzogWW91IHdpbGwgbmVlZCBhbiBMWlcgcGF0ZW50IGxpY2Vuc2UgZnJvbSBVbmlzeXMgaW4gb3JkZXIgdG8gICAqCisgKiB1c2UgdGhpcyBmaWxlIGxlZ2FsbHkgaW4gYW55IGNvbW1lcmNpYWwgb3Igc2hhcmV3YXJlIGFwcGxpY2F0aW9uLiAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byByZWFkIGlucHV0IGltYWdlcyBpbiBHSUYgZm9ybWF0LgogICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTk9URTogdG8gYXZvaWQgZW50YW5nbGVtZW50cyB3aXRoIFVuaXN5cycgcGF0ZW50IG9uIExaVyBjb21wcmVzc2lvbiwgICAgICAqCi0gKiB0aGUgYWJpbGl0eSB0byByZWFkIEdJRiBmaWxlcyBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIElKRyBkaXN0cmlidXRpb24uICoKLSAqIFNvcnJ5IGFib3V0IHRoYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGVzZSByb3V0aW5lcyBtYXkgbmVlZCBtb2RpZmljYXRpb24gZm9yIG5vbi1Vbml4IGVudmlyb25tZW50cyBvcgorICogc3BlY2lhbGl6ZWQgYXBwbGljYXRpb25zLiAgQXMgdGhleSBzdGFuZCwgdGhleSBhc3N1bWUgaW5wdXQgZnJvbQorICogYW4gb3JkaW5hcnkgc3RkaW8gc3RyZWFtLiAgVGhleSBmdXJ0aGVyIGFzc3VtZSB0aGF0IHJlYWRpbmcgYmVnaW5zCisgKiBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGU7IGlucHV0X2luaXQgbWF5IG5lZWQgd29yayBpZiB0aGUKKyAqIHVzZXIgaW50ZXJmYWNlIGhhcyBhbHJlYWR5IHJlYWQgc29tZSBkYXRhIChlLmcuLCB0byBkZXRlcm1pbmUgdGhhdAorICogdGhlIGZpbGUgaXMgaW5kZWVkIEdJRiBmb3JtYXQpLgorICovCisKKy8qCisgKiBUaGlzIGNvZGUgaXMgbG9vc2VseSBiYXNlZCBvbiBnaWZ0b3BwbSBmcm9tIHRoZSBQQk1QTFVTIGRpc3RyaWJ1dGlvbgorICogb2YgRmViLiAxOTkxLiAgVGhhdCBmaWxlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZToKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCBDb3B5cmlnaHQgMTk5MCwgRGF2aWQgS29ibGFzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8ICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSAgIHwKKyAqIHwgICBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgfAorICogfCAgIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCB8CisgKiB8ICAgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gIHwKKyAqIHwgICBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFRoaXMgc29mdHdhcmUgaXMgICAgfAorICogfCAgIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuICAgICAgICAgICB8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAqCi0gKiBXZSBhcmUgcmVxdWlyZWQgdG8gc3RhdGUgdGhhdAorICogV2UgYXJlIGFsc28gcmVxdWlyZWQgdG8gc3RhdGUgdGhhdAogICogICAgIlRoZSBHcmFwaGljcyBJbnRlcmNoYW5nZSBGb3JtYXQoYykgaXMgdGhlIENvcHlyaWdodCBwcm9wZXJ0eSBvZgogICogICAgQ29tcHVTZXJ2ZSBJbmNvcnBvcmF0ZWQuIEdJRihzbSkgaXMgYSBTZXJ2aWNlIE1hcmsgcHJvcGVydHkgb2YKICAqICAgIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLiIKQEAgLTIzLDYgKzQzLDYyMiBAQAogCiAjaWZkZWYgR0lGX1NVUFBPUlRFRAogCisKKyNkZWZpbmUJTUFYQ09MT1JNQVBTSVpFCTI1NgkvKiBtYXggIyBvZiBjb2xvcnMgaW4gYSBHSUYgY29sb3JtYXAgKi8KKyNkZWZpbmUgTlVNQ09MT1JTCTMJLyogIyBvZiBjb2xvcnMgKi8KKyNkZWZpbmUgQ01fUkVECQkwCS8qIGNvbG9yIGNvbXBvbmVudCBudW1iZXJzICovCisjZGVmaW5lIENNX0dSRUVOCTEKKyNkZWZpbmUgQ01fQkxVRQkJMgorCisjZGVmaW5lCU1BWF9MWldfQklUUwkxMgkvKiBtYXhpbXVtIExaVyBjb2RlIHNpemUgKi8KKyNkZWZpbmUgTFpXX1RBQkxFX1NJWkUJKDE8PE1BWF9MWldfQklUUykgLyogIyBvZiBwb3NzaWJsZSBMWlcgc3ltYm9scyAqLworCisvKiBNYWNyb3MgZm9yIGV4dHJhY3RpbmcgaGVhZGVyIGRhdGEgLS0tIG5vdGUgd2UgYXNzdW1lIGNoYXJzIG1heSBiZSBzaWduZWQgKi8KKworI2RlZmluZSBMTV90b191aW50KGEsYikJCSgoKChiKSYweEZGKSA8PCA4KSB8ICgoYSkmMHhGRikpCisKKyNkZWZpbmUgQml0U2V0KGJ5dGUsIGJpdCkJKChieXRlKSAmIChiaXQpKQorI2RlZmluZSBJTlRFUkxBQ0UJMHg0MAkvKiBtYXNrIGZvciBiaXQgc2lnbmlmeWluZyBpbnRlcmxhY2VkIGltYWdlICovCisjZGVmaW5lIENPTE9STUFQRkxBRwkweDgwCS8qIG1hc2sgZm9yIGJpdCBzaWduaWZ5aW5nIGNvbG9ybWFwIHByZXNlbmNlICovCisKKyNkZWZpbmUJUmVhZE9LKGZpbGUsYnVmZmVyLGxlbikJKEpGUkVBRChmaWxlLGJ1ZmZlcixsZW4pID09ICgoc2l6ZV90KSAobGVuKSkpCisKKy8qIExaVyBkZWNvbXByZXNzaW9uIHRhYmxlcyBsb29rIGxpa2UgdGhpczoKKyAqICAgc3ltYm9sX2hlYWRbS10gPSBwcmVmaXggc3ltYm9sIG9mIGFueSBMWlcgc3ltYm9sIEsgKDAuLkxaV19UQUJMRV9TSVpFLTEpCisgKiAgIHN5bWJvbF90YWlsW0tdID0gc3VmZml4IGJ5dGUgICBvZiBhbnkgTFpXIHN5bWJvbCBLICgwLi5MWldfVEFCTEVfU0laRS0xKQorICogTm90ZSB0aGF0IGVudHJpZXMgMC4uZW5kX2NvZGUgb2YgdGhlIGFib3ZlIHRhYmxlcyBhcmUgbm90IHVzZWQsCisgKiBzaW5jZSB0aG9zZSBzeW1ib2xzIHJlcHJlc2VudCByYXcgYnl0ZXMgb3Igc3BlY2lhbCBjb2Rlcy4KKyAqCisgKiBUaGUgc3RhY2sgcmVwcmVzZW50cyB0aGUgbm90LXlldC11c2VkIGV4cGFuc2lvbiBvZiB0aGUgbGFzdCBMWlcgc3ltYm9sLgorICogSW4gdGhlIHdvcnN0IGNhc2UsIGEgc3ltYm9sIGNvdWxkIGV4cGFuZCB0byBhcyBtYW55IGJ5dGVzIGFzIHRoZXJlIGFyZQorICogTFpXIHN5bWJvbHMsIHNvIHdlIGFsbG9jYXRlIExaV19UQUJMRV9TSVpFIGJ5dGVzIGZvciB0aGUgc3RhY2suCisgKiAoVGhpcyBpcyBjb25zZXJ2YXRpdmUgc2luY2UgdGhhdCBudW1iZXIgaW5jbHVkZXMgdGhlIHJhdy1ieXRlIHN5bWJvbHMuKQorICoKKyAqIFRoZSB0YWJsZXMgYXJlIGFsbG9jYXRlZCBmcm9tIEZBUiBoZWFwIHNwYWNlIHNpbmNlIHRoZXkgd291bGQgdXNlIHVwCisgKiByYXRoZXIgYSBsb3Qgb2YgdGhlIG5lYXIgZGF0YSBzcGFjZSBpbiBhIFBDLgorICovCisKKworLyogUHJpdmF0ZSB2ZXJzaW9uIG9mIGRhdGEgc291cmNlIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBjanBlZ19zb3VyY2Vfc3RydWN0IHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIGpfY29tcHJlc3NfcHRyIGNpbmZvOwkJLyogYmFjayBsaW5rIHNhdmVzIHBhc3Npbmcgc2VwYXJhdGUgcGFybSAqLworCisgIEpTQU1QQVJSQVkgY29sb3JtYXA7CQkvKiBHSUYgY29sb3JtYXAgKGNvbnZlcnRlZCB0byBteSBmb3JtYXQpICovCisKKyAgLyogU3RhdGUgZm9yIEdldENvZGUgYW5kIExaV1JlYWRCeXRlICovCisgIGNoYXIgY29kZV9idWZbMjU2KzRdOwkJLyogY3VycmVudCBpbnB1dCBkYXRhIGJsb2NrICovCisgIGludCBsYXN0X2J5dGU7CQkvKiAjIG9mIGJ5dGVzIGluIGNvZGVfYnVmICovCisgIGludCBsYXN0X2JpdDsJCQkvKiAjIG9mIGJpdHMgaW4gY29kZV9idWYgKi8KKyAgaW50IGN1cl9iaXQ7CQkJLyogbmV4dCBiaXQgaW5kZXggdG8gcmVhZCAqLworICBib29sZWFuIG91dF9vZl9ibG9ja3M7CS8qIFRSVUUgaWYgaGl0IHRlcm1pbmF0b3IgZGF0YSBibG9jayAqLworCisgIGludCBpbnB1dF9jb2RlX3NpemU7CQkvKiBjb2Rlc2l6ZSBnaXZlbiBpbiBHSUYgZmlsZSAqLworICBpbnQgY2xlYXJfY29kZSxlbmRfY29kZTsJLyogdmFsdWVzIGZvciBDbGVhciBhbmQgRW5kIGNvZGVzICovCisKKyAgaW50IGNvZGVfc2l6ZTsJCS8qIGN1cnJlbnQgYWN0dWFsIGNvZGUgc2l6ZSAqLworICBpbnQgbGltaXRfY29kZTsJCS8qIDJeY29kZV9zaXplICovCisgIGludCBtYXhfY29kZTsJCQkvKiBmaXJzdCB1bnVzZWQgY29kZSB2YWx1ZSAqLworICBib29sZWFuIGZpcnN0X3RpbWU7CQkvKiBmbGFncyBmaXJzdCBjYWxsIHRvIExaV1JlYWRCeXRlICovCisKKyAgLyogUHJpdmF0ZSBzdGF0ZSBmb3IgTFpXUmVhZEJ5dGUgKi8KKyAgaW50IG9sZGNvZGU7CQkJLyogcHJldmlvdXMgTFpXIHN5bWJvbCAqLworICBpbnQgZmlyc3Rjb2RlOwkJLyogZmlyc3QgYnl0ZSBvZiBvbGRjb2RlJ3MgZXhwYW5zaW9uICovCisKKyAgLyogTFpXIHN5bWJvbCB0YWJsZSBhbmQgZXhwYW5zaW9uIHN0YWNrICovCisgIFVJTlQxNiBGQVIgKnN5bWJvbF9oZWFkOwkvKiA9PiB0YWJsZSBvZiBwcmVmaXggc3ltYm9scyAqLworICBVSU5UOCAgRkFSICpzeW1ib2xfdGFpbDsJLyogPT4gdGFibGUgb2Ygc3VmZml4IGJ5dGVzICovCisgIFVJTlQ4ICBGQVIgKnN5bWJvbF9zdGFjazsJLyogPT4gc3RhY2sgZm9yIHN5bWJvbCBleHBhbnNpb25zICovCisgIFVJTlQ4ICBGQVIgKnNwOwkJLyogc3RhY2sgcG9pbnRlciAqLworCisgIC8qIFN0YXRlIGZvciBpbnRlcmxhY2VkIGltYWdlIHByb2Nlc3NpbmcgKi8KKyAgYm9vbGVhbiBpc19pbnRlcmxhY2VkOwkvKiBUUlVFIGlmIGhhdmUgaW50ZXJsYWNlZCBpbWFnZSAqLworICBqdmlydF9zYXJyYXlfcHRyIGludGVybGFjZWRfaW1hZ2U7IC8qIGZ1bGwgaW1hZ2UgaW4gaW50ZXJsYWNlZCBvcmRlciAqLworICBKRElNRU5TSU9OIGN1cl9yb3dfbnVtYmVyOwkvKiBuZWVkIHRvIGtub3cgYWN0dWFsIHJvdyBudW1iZXIgKi8KKyAgSkRJTUVOU0lPTiBwYXNzMl9vZmZzZXQ7CS8qICMgb2YgcGl4ZWwgcm93cyBpbiBwYXNzIDEgKi8KKyAgSkRJTUVOU0lPTiBwYXNzM19vZmZzZXQ7CS8qICMgb2YgcGl4ZWwgcm93cyBpbiBwYXNzZXMgMSYyICovCisgIEpESU1FTlNJT04gcGFzczRfb2Zmc2V0OwkvKiAjIG9mIHBpeGVsIHJvd3MgaW4gcGFzc2VzIDEsMiwzICovCit9IGdpZl9zb3VyY2Vfc3RydWN0OworCit0eXBlZGVmIGdpZl9zb3VyY2Vfc3RydWN0ICogZ2lmX3NvdXJjZV9wdHI7CisKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK01FVEhPRERFRihKRElNRU5TSU9OKSBnZXRfcGl4ZWxfcm93cworCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pKTsKK01FVEhPRERFRihKRElNRU5TSU9OKSBsb2FkX2ludGVybGFjZWRfaW1hZ2UKKwlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKSk7CitNRVRIT0RERUYoSkRJTUVOU0lPTikgZ2V0X2ludGVybGFjZWRfcm93CisJSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykpOworCisKK0xPQ0FMKGludCkKK1JlYWRCeXRlIChnaWZfc291cmNlX3B0ciBzaW5mbykKKy8qIFJlYWQgbmV4dCBieXRlIGZyb20gR0lGIGZpbGUgKi8KK3sKKyAgcmVnaXN0ZXIgRklMRSAqIGluZmlsZSA9IHNpbmZvLT5wdWIuaW5wdXRfZmlsZTsKKyAgaW50IGM7CisKKyAgaWYgKChjID0gZ2V0YyhpbmZpbGUpKSA9PSBFT0YpCisgICAgRVJSRVhJVChzaW5mby0+Y2luZm8sIEpFUlJfSU5QVVRfRU9GKTsKKyAgcmV0dXJuIGM7Cit9CisKKworTE9DQUwoaW50KQorR2V0RGF0YUJsb2NrIChnaWZfc291cmNlX3B0ciBzaW5mbywgY2hhciAqYnVmKQorLyogUmVhZCBhIEdJRiBkYXRhIGJsb2NrLCB3aGljaCBoYXMgYSBsZWFkaW5nIGNvdW50IGJ5dGUgKi8KKy8qIEEgemVyby1sZW5ndGggYmxvY2sgbWFya3MgdGhlIGVuZCBvZiBhIGRhdGEgYmxvY2sgc2VxdWVuY2UgKi8KK3sKKyAgaW50IGNvdW50OworCisgIGNvdW50ID0gUmVhZEJ5dGUoc2luZm8pOworICBpZiAoY291bnQgPiAwKSB7CisgICAgaWYgKCEgUmVhZE9LKHNpbmZvLT5wdWIuaW5wdXRfZmlsZSwgYnVmLCBjb3VudCkpCisgICAgICBFUlJFWElUKHNpbmZvLT5jaW5mbywgSkVSUl9JTlBVVF9FT0YpOworICB9CisgIHJldHVybiBjb3VudDsKK30KKworCitMT0NBTCh2b2lkKQorU2tpcERhdGFCbG9ja3MgKGdpZl9zb3VyY2VfcHRyIHNpbmZvKQorLyogU2tpcCBhIHNlcmllcyBvZiBkYXRhIGJsb2NrcywgdW50aWwgYSBibG9jayB0ZXJtaW5hdG9yIGlzIGZvdW5kICovCit7CisgIGNoYXIgYnVmWzI1Nl07CisKKyAgd2hpbGUgKEdldERhdGFCbG9jayhzaW5mbywgYnVmKSA+IDApCisgICAgLyogc2tpcCAqLzsKK30KKworCitMT0NBTCh2b2lkKQorUmVJbml0TFpXIChnaWZfc291cmNlX3B0ciBzaW5mbykKKy8qIChSZSlpbml0aWFsaXplIExaVyBzdGF0ZTsgc2hhcmVkIGNvZGUgZm9yIHN0YXJ0dXAgYW5kIENsZWFyIHByb2Nlc3NpbmcgKi8KK3sKKyAgc2luZm8tPmNvZGVfc2l6ZSA9IHNpbmZvLT5pbnB1dF9jb2RlX3NpemUgKyAxOworICBzaW5mby0+bGltaXRfY29kZSA9IHNpbmZvLT5jbGVhcl9jb2RlIDw8IDE7CS8qIDJeY29kZV9zaXplICovCisgIHNpbmZvLT5tYXhfY29kZSA9IHNpbmZvLT5jbGVhcl9jb2RlICsgMjsJLyogZmlyc3QgdW51c2VkIGNvZGUgdmFsdWUgKi8KKyAgc2luZm8tPnNwID0gc2luZm8tPnN5bWJvbF9zdGFjazsJCS8qIGluaXQgc3RhY2sgdG8gZW1wdHkgKi8KK30KKworCitMT0NBTCh2b2lkKQorSW5pdExaV0NvZGUgKGdpZl9zb3VyY2VfcHRyIHNpbmZvKQorLyogSW5pdGlhbGl6ZSBmb3IgYSBzZXJpZXMgb2YgTFpXUmVhZEJ5dGUgKGFuZCBoZW5jZSBHZXRDb2RlKSBjYWxscyAqLworeworICAvKiBHZXRDb2RlIGluaXRpYWxpemF0aW9uICovCisgIHNpbmZvLT5sYXN0X2J5dGUgPSAyOwkJLyogbWFrZSBzYWZlIHRvICJyZWNvcHkgbGFzdCB0d28gYnl0ZXMiICovCisgIHNpbmZvLT5sYXN0X2JpdCA9IDA7CQkvKiBub3RoaW5nIGluIHRoZSBidWZmZXIgKi8KKyAgc2luZm8tPmN1cl9iaXQgPSAwOwkJLyogZm9yY2UgYnVmZmVyIGxvYWQgb24gZmlyc3QgY2FsbCAqLworICBzaW5mby0+b3V0X29mX2Jsb2NrcyA9IEZBTFNFOworCisgIC8qIExaV1JlYWRCeXRlIGluaXRpYWxpemF0aW9uOiAqLworICAvKiBjb21wdXRlIHNwZWNpYWwgY29kZSB2YWx1ZXMgKG5vdGUgdGhhdCB0aGVzZSBkbyBub3QgY2hhbmdlIGxhdGVyKSAqLworICBzaW5mby0+Y2xlYXJfY29kZSA9IDEgPDwgc2luZm8tPmlucHV0X2NvZGVfc2l6ZTsKKyAgc2luZm8tPmVuZF9jb2RlID0gc2luZm8tPmNsZWFyX2NvZGUgKyAxOworICBzaW5mby0+Zmlyc3RfdGltZSA9IFRSVUU7CisgIFJlSW5pdExaVyhzaW5mbyk7Cit9CisKKworTE9DQUwoaW50KQorR2V0Q29kZSAoZ2lmX3NvdXJjZV9wdHIgc2luZm8pCisvKiBGZXRjaCB0aGUgbmV4dCBjb2RlX3NpemUgYml0cyBmcm9tIHRoZSBHSUYgZGF0YSAqLworLyogV2UgYXNzdW1lIGNvZGVfc2l6ZSBpcyBsZXNzIHRoYW4gMTYgKi8KK3sKKyAgcmVnaXN0ZXIgSU5UMzIgYWNjdW07CisgIGludCBvZmZzLCByZXQsIGNvdW50OworCisgIHdoaWxlICggKHNpbmZvLT5jdXJfYml0ICsgc2luZm8tPmNvZGVfc2l6ZSkgPiBzaW5mby0+bGFzdF9iaXQpIHsKKyAgICAvKiBUaW1lIHRvIHJlbG9hZCB0aGUgYnVmZmVyICovCisgICAgaWYgKHNpbmZvLT5vdXRfb2ZfYmxvY2tzKSB7CisgICAgICBXQVJOTVMoc2luZm8tPmNpbmZvLCBKV1JOX0dJRl9OT01PUkVEQVRBKTsKKyAgICAgIHJldHVybiBzaW5mby0+ZW5kX2NvZGU7CS8qIGZha2Ugc29tZXRoaW5nIHVzZWZ1bCAqLworICAgIH0KKyAgICAvKiBwcmVzZXJ2ZSBsYXN0IHR3byBieXRlcyBvZiB3aGF0IHdlIGhhdmUgLS0gYXNzdW1lIGNvZGVfc2l6ZSA8PSAxNiAqLworICAgIHNpbmZvLT5jb2RlX2J1ZlswXSA9IHNpbmZvLT5jb2RlX2J1ZltzaW5mby0+bGFzdF9ieXRlLTJdOworICAgIHNpbmZvLT5jb2RlX2J1ZlsxXSA9IHNpbmZvLT5jb2RlX2J1ZltzaW5mby0+bGFzdF9ieXRlLTFdOworICAgIC8qIExvYWQgbW9yZSBieXRlczsgc2V0IGZsYWcgaWYgd2UgcmVhY2ggdGhlIHRlcm1pbmF0b3IgYmxvY2sgKi8KKyAgICBpZiAoKGNvdW50ID0gR2V0RGF0YUJsb2NrKHNpbmZvLCAmc2luZm8tPmNvZGVfYnVmWzJdKSkgPT0gMCkgeworICAgICAgc2luZm8tPm91dF9vZl9ibG9ja3MgPSBUUlVFOworICAgICAgV0FSTk1TKHNpbmZvLT5jaW5mbywgSldSTl9HSUZfTk9NT1JFREFUQSk7CisgICAgICByZXR1cm4gc2luZm8tPmVuZF9jb2RlOwkvKiBmYWtlIHNvbWV0aGluZyB1c2VmdWwgKi8KKyAgICB9CisgICAgLyogUmVzZXQgY291bnRlcnMgKi8KKyAgICBzaW5mby0+Y3VyX2JpdCA9IChzaW5mby0+Y3VyX2JpdCAtIHNpbmZvLT5sYXN0X2JpdCkgKyAxNjsKKyAgICBzaW5mby0+bGFzdF9ieXRlID0gMiArIGNvdW50OworICAgIHNpbmZvLT5sYXN0X2JpdCA9IHNpbmZvLT5sYXN0X2J5dGUgKiA4OworICB9CisKKyAgLyogRm9ybSB1cCBuZXh0IDI0IGJpdHMgaW4gYWNjdW0gKi8KKyAgb2ZmcyA9IHNpbmZvLT5jdXJfYml0ID4+IDM7CS8qIGJ5dGUgY29udGFpbmluZyBjdXJfYml0ICovCisjaWZkZWYgQ0hBUl9JU19VTlNJR05FRAorICBhY2N1bSA9IHNpbmZvLT5jb2RlX2J1ZltvZmZzKzJdOworICBhY2N1bSA8PD0gODsKKyAgYWNjdW0gfD0gc2luZm8tPmNvZGVfYnVmW29mZnMrMV07CisgIGFjY3VtIDw8PSA4OworICBhY2N1bSB8PSBzaW5mby0+Y29kZV9idWZbb2Zmc107CisjZWxzZQorICBhY2N1bSA9IHNpbmZvLT5jb2RlX2J1ZltvZmZzKzJdICYgMHhGRjsKKyAgYWNjdW0gPDw9IDg7CisgIGFjY3VtIHw9IHNpbmZvLT5jb2RlX2J1ZltvZmZzKzFdICYgMHhGRjsKKyAgYWNjdW0gPDw9IDg7CisgIGFjY3VtIHw9IHNpbmZvLT5jb2RlX2J1ZltvZmZzXSAmIDB4RkY7CisjZW5kaWYKKworICAvKiBSaWdodC1hbGlnbiBjdXJfYml0IGluIGFjY3VtLCB0aGVuIG1hc2sgb2ZmIGRlc2lyZWQgbnVtYmVyIG9mIGJpdHMgKi8KKyAgYWNjdW0gPj49IChzaW5mby0+Y3VyX2JpdCAmIDcpOworICByZXQgPSAoKGludCkgYWNjdW0pICYgKCgxIDw8IHNpbmZvLT5jb2RlX3NpemUpIC0gMSk7CisgIAorICBzaW5mby0+Y3VyX2JpdCArPSBzaW5mby0+Y29kZV9zaXplOworICByZXR1cm4gcmV0OworfQorCisKK0xPQ0FMKGludCkKK0xaV1JlYWRCeXRlIChnaWZfc291cmNlX3B0ciBzaW5mbykKKy8qIFJlYWQgYW4gTFpXLWNvbXByZXNzZWQgYnl0ZSAqLworeworICByZWdpc3RlciBpbnQgY29kZTsJCS8qIGN1cnJlbnQgd29ya2luZyBjb2RlICovCisgIGludCBpbmNvZGU7CQkJLyogc2F2ZXMgYWN0dWFsIGlucHV0IGNvZGUgKi8KKworICAvKiBGaXJzdCB0aW1lLCBqdXN0IGVhdCB0aGUgZXhwZWN0ZWQgQ2xlYXIgY29kZShzKSBhbmQgcmV0dXJuIG5leHQgY29kZSwgKi8KKyAgLyogd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgYSByYXcgYnl0ZS4gKi8KKyAgaWYgKHNpbmZvLT5maXJzdF90aW1lKSB7CisgICAgc2luZm8tPmZpcnN0X3RpbWUgPSBGQUxTRTsKKyAgICBjb2RlID0gc2luZm8tPmNsZWFyX2NvZGU7CS8qIGVuYWJsZXMgc2hhcmluZyBjb2RlIHdpdGggQ2xlYXIgY2FzZSAqLworICB9IGVsc2UgeworCisgICAgLyogSWYgYW55IGNvZGVzIGFyZSBzdGFja2VkIGZyb20gYSBwcmV2aW91c2x5IHJlYWQgc3ltYm9sLCByZXR1cm4gdGhlbSAqLworICAgIGlmIChzaW5mby0+c3AgPiBzaW5mby0+c3ltYm9sX3N0YWNrKQorICAgICAgcmV0dXJuIChpbnQpICooLS0gc2luZm8tPnNwKTsKKworICAgIC8qIFRpbWUgdG8gcmVhZCBhIG5ldyBzeW1ib2wgKi8KKyAgICBjb2RlID0gR2V0Q29kZShzaW5mbyk7CisKKyAgfQorCisgIGlmIChjb2RlID09IHNpbmZvLT5jbGVhcl9jb2RlKSB7CisgICAgLyogUmVpbml0IHN0YXRlLCBzd2FsbG93IGFueSBleHRyYSBDbGVhciBjb2RlcywgYW5kICovCisgICAgLyogcmV0dXJuIG5leHQgY29kZSwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgYSByYXcgYnl0ZS4gKi8KKyAgICBSZUluaXRMWlcoc2luZm8pOworICAgIGRvIHsKKyAgICAgIGNvZGUgPSBHZXRDb2RlKHNpbmZvKTsKKyAgICB9IHdoaWxlIChjb2RlID09IHNpbmZvLT5jbGVhcl9jb2RlKTsKKyAgICBpZiAoY29kZSA+IHNpbmZvLT5jbGVhcl9jb2RlKSB7IC8qIG1ha2Ugc3VyZSBpdCBpcyBhIHJhdyBieXRlICovCisgICAgICBXQVJOTVMoc2luZm8tPmNpbmZvLCBKV1JOX0dJRl9CQUREQVRBKTsKKyAgICAgIGNvZGUgPSAwOwkJCS8qIHVzZSBzb21ldGhpbmcgdmFsaWQgKi8KKyAgICB9CisgICAgLyogbWFrZSBmaXJzdGNvZGUsIG9sZGNvZGUgdmFsaWQhICovCisgICAgc2luZm8tPmZpcnN0Y29kZSA9IHNpbmZvLT5vbGRjb2RlID0gY29kZTsKKyAgICByZXR1cm4gY29kZTsKKyAgfQorCisgIGlmIChjb2RlID09IHNpbmZvLT5lbmRfY29kZSkgeworICAgIC8qIFNraXAgdGhlIHJlc3Qgb2YgdGhlIGltYWdlLCB1bmxlc3MgR2V0Q29kZSBhbHJlYWR5IHJlYWQgdGVybWluYXRvciAqLworICAgIGlmICghIHNpbmZvLT5vdXRfb2ZfYmxvY2tzKSB7CisgICAgICBTa2lwRGF0YUJsb2NrcyhzaW5mbyk7CisgICAgICBzaW5mby0+b3V0X29mX2Jsb2NrcyA9IFRSVUU7CisgICAgfQorICAgIC8qIENvbXBsYWluIHRoYXQgdGhlcmUncyBub3QgZW5vdWdoIGRhdGEgKi8KKyAgICBXQVJOTVMoc2luZm8tPmNpbmZvLCBKV1JOX0dJRl9FTkRDT0RFKTsKKyAgICAvKiBQYWQgZGF0YSB3aXRoIDAncyAqLworICAgIHJldHVybiAwOwkJCS8qIGZha2Ugc29tZXRoaW5nIHVzYWJsZSAqLworICB9CisKKyAgLyogR290IG5vcm1hbCByYXcgYnl0ZSBvciBMWlcgc3ltYm9sICovCisgIGluY29kZSA9IGNvZGU7CQkvKiBzYXZlIGZvciBhIG1vbWVudCAqLworICAKKyAgaWYgKGNvZGUgPj0gc2luZm8tPm1heF9jb2RlKSB7IC8qIHNwZWNpYWwgY2FzZSBmb3Igbm90LXlldC1kZWZpbmVkIHN5bWJvbCAqLworICAgIC8qIGNvZGUgPT0gbWF4X2NvZGUgaXMgT0s7IGFueXRoaW5nIGJpZ2dlciBpcyBiYWQgZGF0YSAqLworICAgIGlmIChjb2RlID4gc2luZm8tPm1heF9jb2RlKSB7CisgICAgICBXQVJOTVMoc2luZm8tPmNpbmZvLCBKV1JOX0dJRl9CQUREQVRBKTsKKyAgICAgIGluY29kZSA9IDA7CQkvKiBwcmV2ZW50IGNyZWF0aW9uIG9mIGxvb3BzIGluIHN5bWJvbCB0YWJsZSAqLworICAgIH0KKyAgICAvKiB0aGlzIHN5bWJvbCB3aWxsIGJlIGRlZmluZWQgYXMgb2xkY29kZS9maXJzdGNvZGUgKi8KKyAgICAqKHNpbmZvLT5zcCsrKSA9IChVSU5UOCkgc2luZm8tPmZpcnN0Y29kZTsKKyAgICBjb2RlID0gc2luZm8tPm9sZGNvZGU7CisgIH0KKworICAvKiBJZiBpdCdzIGEgc3ltYm9sLCBleHBhbmQgaXQgaW50byB0aGUgc3RhY2sgKi8KKyAgd2hpbGUgKGNvZGUgPj0gc2luZm8tPmNsZWFyX2NvZGUpIHsKKyAgICAqKHNpbmZvLT5zcCsrKSA9IHNpbmZvLT5zeW1ib2xfdGFpbFtjb2RlXTsgLyogdGFpbCBpcyBhIGJ5dGUgdmFsdWUgKi8KKyAgICBjb2RlID0gc2luZm8tPnN5bWJvbF9oZWFkW2NvZGVdOyAvKiBoZWFkIGlzIGFub3RoZXIgTFpXIHN5bWJvbCAqLworICB9CisgIC8qIEF0IHRoaXMgcG9pbnQgY29kZSBqdXN0IHJlcHJlc2VudHMgYSByYXcgYnl0ZSAqLworICBzaW5mby0+Zmlyc3Rjb2RlID0gY29kZTsJLyogc2F2ZSBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSAqLworCisgIC8qIElmIHRoZXJlJ3Mgcm9vbSBpbiB0YWJsZSwgKi8KKyAgaWYgKChjb2RlID0gc2luZm8tPm1heF9jb2RlKSA8IExaV19UQUJMRV9TSVpFKSB7CisgICAgLyogRGVmaW5lIGEgbmV3IHN5bWJvbCA9IHByZXYgc3ltICsgaGVhZCBvZiB0aGlzIHN5bSdzIGV4cGFuc2lvbiAqLworICAgIHNpbmZvLT5zeW1ib2xfaGVhZFtjb2RlXSA9IHNpbmZvLT5vbGRjb2RlOworICAgIHNpbmZvLT5zeW1ib2xfdGFpbFtjb2RlXSA9IChVSU5UOCkgc2luZm8tPmZpcnN0Y29kZTsKKyAgICBzaW5mby0+bWF4X2NvZGUrKzsKKyAgICAvKiBJcyBpdCB0aW1lIHRvIGluY3JlYXNlIGNvZGVfc2l6ZT8gKi8KKyAgICBpZiAoKHNpbmZvLT5tYXhfY29kZSA+PSBzaW5mby0+bGltaXRfY29kZSkgJiYKKwkoc2luZm8tPmNvZGVfc2l6ZSA8IE1BWF9MWldfQklUUykpIHsKKyAgICAgIHNpbmZvLT5jb2RlX3NpemUrKzsKKyAgICAgIHNpbmZvLT5saW1pdF9jb2RlIDw8PSAxOwkvKiBrZWVwIGVxdWFsIHRvIDJeY29kZV9zaXplICovCisgICAgfQorICB9CisgIAorICBzaW5mby0+b2xkY29kZSA9IGluY29kZTsJLyogc2F2ZSBsYXN0IGlucHV0IHN5bWJvbCBmb3IgZnV0dXJlIHVzZSAqLworICByZXR1cm4gc2luZm8tPmZpcnN0Y29kZTsJLyogcmV0dXJuIGZpcnN0IGJ5dGUgb2Ygc3ltYm9sJ3MgZXhwYW5zaW9uICovCit9CisKKworTE9DQUwodm9pZCkKK1JlYWRDb2xvck1hcCAoZ2lmX3NvdXJjZV9wdHIgc2luZm8sIGludCBjbWFwbGVuLCBKU0FNUEFSUkFZIGNtYXApCisvKiBSZWFkIGEgR0lGIGNvbG9ybWFwICovCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjbWFwbGVuOyBpKyspIHsKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorI2RlZmluZSBVUFNDQUxFKHgpICAoeCkKKyNlbHNlCisjZGVmaW5lIFVQU0NBTEUoeCkgICgoeCkgPDwgKEJJVFNfSU5fSlNBTVBMRS04KSkKKyNlbmRpZgorICAgIGNtYXBbQ01fUkVEXVtpXSAgID0gKEpTQU1QTEUpIFVQU0NBTEUoUmVhZEJ5dGUoc2luZm8pKTsKKyAgICBjbWFwW0NNX0dSRUVOXVtpXSA9IChKU0FNUExFKSBVUFNDQUxFKFJlYWRCeXRlKHNpbmZvKSk7CisgICAgY21hcFtDTV9CTFVFXVtpXSAgPSAoSlNBTVBMRSkgVVBTQ0FMRShSZWFkQnl0ZShzaW5mbykpOworICB9Cit9CisKKworTE9DQUwodm9pZCkKK0RvRXh0ZW5zaW9uIChnaWZfc291cmNlX3B0ciBzaW5mbykKKy8qIFByb2Nlc3MgYW4gZXh0ZW5zaW9uIGJsb2NrICovCisvKiBDdXJyZW50bHkgd2UgaWdub3JlICdlbSBhbGwgKi8KK3sKKyAgaW50IGV4dGxhYmVsOworCisgIC8qIFJlYWQgZXh0ZW5zaW9uIGxhYmVsIGJ5dGUgKi8KKyAgZXh0bGFiZWwgPSBSZWFkQnl0ZShzaW5mbyk7CisgIFRSQUNFTVMxKHNpbmZvLT5jaW5mbywgMSwgSlRSQ19HSUZfRVhURU5TSU9OLCBleHRsYWJlbCk7CisgIC8qIFNraXAgdGhlIGRhdGEgYmxvY2socykgYXNzb2NpYXRlZCB3aXRoIHRoZSBleHRlbnNpb24gKi8KKyAgU2tpcERhdGFCbG9ja3Moc2luZm8pOworfQorCisKKy8qCisgKiBSZWFkIHRoZSBmaWxlIGhlYWRlcjsgcmV0dXJuIGltYWdlIHNpemUgYW5kIGNvbXBvbmVudCBjb3VudC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X2lucHV0X2dpZiAoal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCit7CisgIGdpZl9zb3VyY2VfcHRyIHNvdXJjZSA9IChnaWZfc291cmNlX3B0cikgc2luZm87CisgIGNoYXIgaGRyYnVmWzEwXTsJCS8qIHdvcmtzcGFjZSBmb3IgcmVhZGluZyBjb250cm9sIGJsb2NrcyAqLworICB1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsJLyogaW1hZ2UgZGltZW5zaW9ucyAqLworICBpbnQgY29sb3JtYXBsZW4sIGFzcGVjdFJhdGlvOworICBpbnQgYzsKKworICAvKiBBbGxvY2F0ZSBzcGFjZSB0byBzdG9yZSB0aGUgY29sb3JtYXAgKi8KKyAgc291cmNlLT5jb2xvcm1hcCA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisgICAgIChKRElNRU5TSU9OKSBNQVhDT0xPUk1BUFNJWkUsIChKRElNRU5TSU9OKSBOVU1DT0xPUlMpOworCisgIC8qIFJlYWQgYW5kIHZlcmlmeSBHSUYgSGVhZGVyICovCisgIGlmICghIFJlYWRPSyhzb3VyY2UtPnB1Yi5pbnB1dF9maWxlLCBoZHJidWYsIDYpKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfR0lGX05PVCk7CisgIGlmIChoZHJidWZbMF0gIT0gJ0cnIHx8IGhkcmJ1ZlsxXSAhPSAnSScgfHwgaGRyYnVmWzJdICE9ICdGJykKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0dJRl9OT1QpOworICAvKiBDaGVjayBmb3IgZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXJzLgorICAgKiBJZiB1bmtub3duIHZlcnNpb24sIGdpdmUgd2FybmluZyBhbmQgdHJ5IHRvIHByb2Nlc3MgYW55d2F5OworICAgKiB0aGlzIGlzIHBlciByZWNvbW1lbmRhdGlvbiBpbiBHSUY4OWEgc3RhbmRhcmQuCisgICAqLworICBpZiAoKGhkcmJ1ZlszXSAhPSAnOCcgfHwgaGRyYnVmWzRdICE9ICc3JyB8fCBoZHJidWZbNV0gIT0gJ2EnKSAmJgorICAgICAgKGhkcmJ1ZlszXSAhPSAnOCcgfHwgaGRyYnVmWzRdICE9ICc5JyB8fCBoZHJidWZbNV0gIT0gJ2EnKSkKKyAgICBUUkFDRU1TMyhjaW5mbywgMSwgSlRSQ19HSUZfQkFEVkVSU0lPTiwgaGRyYnVmWzNdLCBoZHJidWZbNF0sIGhkcmJ1Zls1XSk7CisKKyAgLyogUmVhZCBhbmQgZGVjaXBoZXIgTG9naWNhbCBTY3JlZW4gRGVzY3JpcHRvciAqLworICBpZiAoISBSZWFkT0soc291cmNlLT5wdWIuaW5wdXRfZmlsZSwgaGRyYnVmLCA3KSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0lOUFVUX0VPRik7CisgIHdpZHRoID0gTE1fdG9fdWludChoZHJidWZbMF0saGRyYnVmWzFdKTsKKyAgaGVpZ2h0ID0gTE1fdG9fdWludChoZHJidWZbMl0saGRyYnVmWzNdKTsKKyAgY29sb3JtYXBsZW4gPSAyIDw8IChoZHJidWZbNF0gJiAweDA3KTsKKyAgLyogd2UgaWdub3JlIHRoZSBjb2xvciByZXNvbHV0aW9uLCBzb3J0IGZsYWcsIGFuZCBiYWNrZ3JvdW5kIGNvbG9yIGluZGV4ICovCisgIGFzcGVjdFJhdGlvID0gaGRyYnVmWzZdICYgMHhGRjsKKyAgaWYgKGFzcGVjdFJhdGlvICE9IDAgJiYgYXNwZWN0UmF0aW8gIT0gNDkpCisgICAgVFJBQ0VNUyhjaW5mbywgMSwgSlRSQ19HSUZfTk9OU1FVQVJFKTsKKworICAvKiBSZWFkIGdsb2JhbCBjb2xvcm1hcCBpZiBoZWFkZXIgaW5kaWNhdGVzIGl0IGlzIHByZXNlbnQgKi8KKyAgaWYgKEJpdFNldChoZHJidWZbNF0sIENPTE9STUFQRkxBRykpCisgICAgUmVhZENvbG9yTWFwKHNvdXJjZSwgY29sb3JtYXBsZW4sIHNvdXJjZS0+Y29sb3JtYXApOworCisgIC8qIFNjYW4gdW50aWwgd2UgcmVhY2ggc3RhcnQgb2YgZGVzaXJlZCBpbWFnZS4KKyAgICogV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgc2tpcHBpbmcgaW1hZ2VzLCBidXQgY291bGQgYWRkIGl0IGVhc2lseS4KKyAgICovCisgIGZvciAoOzspIHsKKyAgICBjID0gUmVhZEJ5dGUoc291cmNlKTsKKworICAgIGlmIChjID09ICc7JykJCS8qIEdJRiB0ZXJtaW5hdG9yPz8gKi8KKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfR0lGX0lNQUdFTk9URk9VTkQpOworCisgICAgaWYgKGMgPT0gJyEnKSB7CQkvKiBFeHRlbnNpb24gKi8KKyAgICAgIERvRXh0ZW5zaW9uKHNvdXJjZSk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGMgIT0gJywnKSB7CQkvKiBOb3QgYW4gaW1hZ2Ugc2VwYXJhdG9yPyAqLworICAgICAgV0FSTk1TMShjaW5mbywgSldSTl9HSUZfQ0hBUiwgYyk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBSZWFkIGFuZCBkZWNpcGhlciBMb2NhbCBJbWFnZSBEZXNjcmlwdG9yICovCisgICAgaWYgKCEgUmVhZE9LKHNvdXJjZS0+cHViLmlucHV0X2ZpbGUsIGhkcmJ1ZiwgOSkpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0lOUFVUX0VPRik7CisgICAgLyogd2UgaWdub3JlIHRvcC9sZWZ0IHBvc2l0aW9uIGluZm8sIGFsc28gc29ydCBmbGFnICovCisgICAgd2lkdGggPSBMTV90b191aW50KGhkcmJ1Zls0XSxoZHJidWZbNV0pOworICAgIGhlaWdodCA9IExNX3RvX3VpbnQoaGRyYnVmWzZdLGhkcmJ1Zls3XSk7CisgICAgc291cmNlLT5pc19pbnRlcmxhY2VkID0gQml0U2V0KGhkcmJ1Zls4XSwgSU5URVJMQUNFKTsKKworICAgIC8qIFJlYWQgbG9jYWwgY29sb3JtYXAgaWYgaGVhZGVyIGluZGljYXRlcyBpdCBpcyBwcmVzZW50ICovCisgICAgLyogTm90ZTogaWYgd2Ugd2FudGVkIHRvIHN1cHBvcnQgc2tpcHBpbmcgaW1hZ2VzLCAqLworICAgIC8qIHdlJ2QgbmVlZCB0byBza2lwIHJhdGhlciB0aGFuIHJlYWQgY29sb3JtYXAgZm9yIGlnbm9yZWQgaW1hZ2VzICovCisgICAgaWYgKEJpdFNldChoZHJidWZbOF0sIENPTE9STUFQRkxBRykpIHsKKyAgICAgIGNvbG9ybWFwbGVuID0gMiA8PCAoaGRyYnVmWzhdICYgMHgwNyk7CisgICAgICBSZWFkQ29sb3JNYXAoc291cmNlLCBjb2xvcm1hcGxlbiwgc291cmNlLT5jb2xvcm1hcCk7CisgICAgfQorCisgICAgc291cmNlLT5pbnB1dF9jb2RlX3NpemUgPSBSZWFkQnl0ZShzb3VyY2UpOyAvKiBnZXQgbWluLWNvZGUtc2l6ZSBieXRlICovCisgICAgaWYgKHNvdXJjZS0+aW5wdXRfY29kZV9zaXplIDwgMiB8fCBzb3VyY2UtPmlucHV0X2NvZGVfc2l6ZSA+PSBNQVhfTFpXX0JJVFMpCisgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9HSUZfQ09ERVNJWkUsIHNvdXJjZS0+aW5wdXRfY29kZV9zaXplKTsKKworICAgIC8qIFJlYWNoZWQgZGVzaXJlZCBpbWFnZSwgc28gYnJlYWsgb3V0IG9mIGxvb3AgKi8KKyAgICAvKiBJZiB3ZSB3YW50ZWQgdG8gc2tpcCB0aGlzIGltYWdlLCAqLworICAgIC8qIHdlJ2QgY2FsbCBTa2lwRGF0YUJsb2NrcyBhbmQgdGhlbiBjb250aW51ZSB0aGUgbG9vcCAqLworICAgIGJyZWFrOworICB9CisKKyAgLyogUHJlcGFyZSB0byByZWFkIHNlbGVjdGVkIGltYWdlOiBmaXJzdCBpbml0aWFsaXplIExaVyBkZWNvbXByZXNzb3IgKi8KKyAgc291cmNlLT5zeW1ib2xfaGVhZCA9IChVSU5UMTYgRkFSICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19sYXJnZSkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQlMWldfVEFCTEVfU0laRSAqIFNJWkVPRihVSU5UMTYpKTsKKyAgc291cmNlLT5zeW1ib2xfdGFpbCA9IChVSU5UOCBGQVIgKikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCUxaV19UQUJMRV9TSVpFICogU0laRU9GKFVJTlQ4KSk7CisgIHNvdXJjZS0+c3ltYm9sX3N0YWNrID0gKFVJTlQ4IEZBUiAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJTFpXX1RBQkxFX1NJWkUgKiBTSVpFT0YoVUlOVDgpKTsKKyAgSW5pdExaV0NvZGUoc291cmNlKTsKKworICAvKgorICAgKiBJZiBpbWFnZSBpcyBpbnRlcmxhY2VkLCB3ZSByZWFkIGl0IGludG8gYSBmdWxsLXNpemUgc2FtcGxlIGFycmF5LAorICAgKiBkZWNvbXByZXNzaW5nIGFzIHdlIGdvOyB0aGVuIGdldF9pbnRlcmxhY2VkX3JvdyBzZWxlY3RzIHJvd3MgZnJvbSB0aGUKKyAgICogc2FtcGxlIGFycmF5IGluIHRoZSBwcm9wZXIgb3JkZXIuCisgICAqLworICBpZiAoc291cmNlLT5pc19pbnRlcmxhY2VkKSB7CisgICAgLyogV2UgcmVxdWVzdCB0aGUgdmlydHVhbCBhcnJheSBub3csIGJ1dCBjYW4ndCBhY2Nlc3MgaXQgdW50aWwgdmlydHVhbAorICAgICAqIGFycmF5cyBoYXZlIGJlZW4gYWxsb2NhdGVkLiAgSGVuY2UsIHRoZSBhY3R1YWwgd29yayBvZiByZWFkaW5nIHRoZQorICAgICAqIGltYWdlIGlzIHBvc3Rwb25lZCB1bnRpbCB0aGUgZmlyc3QgY2FsbCB0byBnZXRfcGl4ZWxfcm93cy4KKyAgICAgKi8KKyAgICBzb3VyY2UtPmludGVybGFjZWRfaW1hZ2UgPSAoKmNpbmZvLT5tZW0tPnJlcXVlc3RfdmlydF9zYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBGQUxTRSwKKyAgICAgICAoSkRJTUVOU0lPTikgd2lkdGgsIChKRElNRU5TSU9OKSBoZWlnaHQsIChKRElNRU5TSU9OKSAxKTsKKyAgICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpIHsKKyAgICAgIGNkX3Byb2dyZXNzX3B0ciBwcm9ncmVzcyA9IChjZF9wcm9ncmVzc19wdHIpIGNpbmZvLT5wcm9ncmVzczsKKyAgICAgIHByb2dyZXNzLT50b3RhbF9leHRyYV9wYXNzZXMrKzsgLyogY291bnQgZmlsZSBpbnB1dCBhcyBzZXBhcmF0ZSBwYXNzICovCisgICAgfQorICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gbG9hZF9pbnRlcmxhY2VkX2ltYWdlOworICB9IGVsc2UgeworICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0X3BpeGVsX3Jvd3M7CisgIH0KKworICAvKiBDcmVhdGUgY29tcHJlc3NvciBpbnB1dCBidWZmZXIuICovCisgIHNvdXJjZS0+cHViLmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisgICAgIChKRElNRU5TSU9OKSB3aWR0aCAqIE5VTUNPTE9SUywgKEpESU1FTlNJT04pIDEpOworICBzb3VyY2UtPnB1Yi5idWZmZXJfaGVpZ2h0ID0gMTsKKworICAvKiBSZXR1cm4gaW5mbyBhYm91dCB0aGUgaW1hZ2UuICovCisgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9IEpDU19SR0I7CisgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gTlVNQ09MT1JTOworICBjaW5mby0+ZGF0YV9wcmVjaXNpb24gPSBCSVRTX0lOX0pTQU1QTEU7IC8qIHdlIGFsd2F5cyByZXNjYWxlIGRhdGEgdG8gdGhpcyAqLworICBjaW5mby0+aW1hZ2Vfd2lkdGggPSB3aWR0aDsKKyAgY2luZm8tPmltYWdlX2hlaWdodCA9IGhlaWdodDsKKworICBUUkFDRU1TMyhjaW5mbywgMSwgSlRSQ19HSUYsIHdpZHRoLCBoZWlnaHQsIGNvbG9ybWFwbGVuKTsKK30KKworCisvKgorICogUmVhZCBvbmUgcm93IG9mIHBpeGVscy4KKyAqIFRoaXMgdmVyc2lvbiBpcyB1c2VkIGZvciBub25pbnRlcmxhY2VkIEdJRiBpbWFnZXM6CisgKiB3ZSByZWFkIGRpcmVjdGx5IGZyb20gdGhlIEdJRiBmaWxlLgorICovCisKK01FVEhPRERFRihKRElNRU5TSU9OKQorZ2V0X3BpeGVsX3Jvd3MgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQoreworICBnaWZfc291cmNlX3B0ciBzb3VyY2UgPSAoZ2lmX3NvdXJjZV9wdHIpIHNpbmZvOworICByZWdpc3RlciBpbnQgYzsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgcmVnaXN0ZXIgSlNBTVBBUlJBWSBjb2xvcm1hcCA9IHNvdXJjZS0+Y29sb3JtYXA7CisgIAorICBwdHIgPSBzb3VyY2UtPnB1Yi5idWZmZXJbMF07CisgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIGMgPSBMWldSZWFkQnl0ZShzb3VyY2UpOworICAgICpwdHIrKyA9IGNvbG9ybWFwW0NNX1JFRF1bY107CisgICAgKnB0cisrID0gY29sb3JtYXBbQ01fR1JFRU5dW2NdOworICAgICpwdHIrKyA9IGNvbG9ybWFwW0NNX0JMVUVdW2NdOworICB9CisgIHJldHVybiAxOworfQorCisKKy8qCisgKiBSZWFkIG9uZSByb3cgb2YgcGl4ZWxzLgorICogVGhpcyB2ZXJzaW9uIGlzIHVzZWQgZm9yIHRoZSBmaXJzdCBjYWxsIG9uIGdldF9waXhlbF9yb3dzIHdoZW4KKyAqIHJlYWRpbmcgYW4gaW50ZXJsYWNlZCBHSUYgZmlsZTogd2UgcmVhZCB0aGUgd2hvbGUgaW1hZ2UgaW50byBtZW1vcnkuCisgKi8KKworTUVUSE9EREVGKEpESU1FTlNJT04pCitsb2FkX2ludGVybGFjZWRfaW1hZ2UgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQoreworICBnaWZfc291cmNlX3B0ciBzb3VyY2UgPSAoZ2lmX3NvdXJjZV9wdHIpIHNpbmZvOworICBKU0FNUEFSUkFZIGltYWdlX3B0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgc3B0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gcm93OworICBjZF9wcm9ncmVzc19wdHIgcHJvZ3Jlc3MgPSAoY2RfcHJvZ3Jlc3NfcHRyKSBjaW5mby0+cHJvZ3Jlc3M7CisKKyAgLyogUmVhZCB0aGUgaW50ZXJsYWNlZCBpbWFnZSBpbnRvIHRoZSB2aXJ0dWFsIGFycmF5IHdlJ3ZlIGNyZWF0ZWQuICovCisgIGZvciAocm93ID0gMDsgcm93IDwgY2luZm8tPmltYWdlX2hlaWdodDsgcm93KyspIHsKKyAgICBpZiAocHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgICAgcHJvZ3Jlc3MtPnB1Yi5wYXNzX2NvdW50ZXIgPSAobG9uZykgcm93OworICAgICAgcHJvZ3Jlc3MtPnB1Yi5wYXNzX2xpbWl0ID0gKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQ7CisgICAgICAoKnByb2dyZXNzLT5wdWIucHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKKyAgICB9CisgICAgaW1hZ2VfcHRyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIHNvdXJjZS0+aW50ZXJsYWNlZF9pbWFnZSwKKyAgICAgICByb3csIChKRElNRU5TSU9OKSAxLCBUUlVFKTsKKyAgICBzcHRyID0gaW1hZ2VfcHRyWzBdOworICAgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgKnNwdHIrKyA9IChKU0FNUExFKSBMWldSZWFkQnl0ZShzb3VyY2UpOworICAgIH0KKyAgfQorICBpZiAocHJvZ3Jlc3MgIT0gTlVMTCkKKyAgICBwcm9ncmVzcy0+Y29tcGxldGVkX2V4dHJhX3Bhc3NlcysrOworCisgIC8qIFJlcGxhY2UgbWV0aG9kIHBvaW50ZXIgc28gc3Vic2VxdWVudCBjYWxscyBkb24ndCBjb21lIGhlcmUuICovCisgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0X2ludGVybGFjZWRfcm93OworICAvKiBJbml0aWFsaXplIGZvciBnZXRfaW50ZXJsYWNlZF9yb3csIGFuZCBwZXJmb3JtIGZpcnN0IGNhbGwgb24gaXQuICovCisgIHNvdXJjZS0+Y3VyX3Jvd19udW1iZXIgPSAwOworICBzb3VyY2UtPnBhc3MyX29mZnNldCA9IChjaW5mby0+aW1hZ2VfaGVpZ2h0ICsgNykgLyA4OworICBzb3VyY2UtPnBhc3MzX29mZnNldCA9IHNvdXJjZS0+cGFzczJfb2Zmc2V0ICsgKGNpbmZvLT5pbWFnZV9oZWlnaHQgKyAzKSAvIDg7CisgIHNvdXJjZS0+cGFzczRfb2Zmc2V0ID0gc291cmNlLT5wYXNzM19vZmZzZXQgKyAoY2luZm8tPmltYWdlX2hlaWdodCArIDEpIC8gNDsKKworICByZXR1cm4gZ2V0X2ludGVybGFjZWRfcm93KGNpbmZvLCBzaW5mbyk7Cit9CisKKworLyoKKyAqIFJlYWQgb25lIHJvdyBvZiBwaXhlbHMuCisgKiBUaGlzIHZlcnNpb24gaXMgdXNlZCBmb3IgaW50ZXJsYWNlZCBHSUYgaW1hZ2VzOgorICogd2UgcmVhZCBmcm9tIHRoZSB2aXJ0dWFsIGFycmF5LgorICovCisKK01FVEhPRERFRihKRElNRU5TSU9OKQorZ2V0X2ludGVybGFjZWRfcm93IChqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKK3sKKyAgZ2lmX3NvdXJjZV9wdHIgc291cmNlID0gKGdpZl9zb3VyY2VfcHRyKSBzaW5mbzsKKyAgSlNBTVBBUlJBWSBpbWFnZV9wdHI7CisgIHJlZ2lzdGVyIGludCBjOworICByZWdpc3RlciBKU0FNUFJPVyBzcHRyLCBwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICByZWdpc3RlciBKU0FNUEFSUkFZIGNvbG9ybWFwID0gc291cmNlLT5jb2xvcm1hcDsKKyAgSkRJTUVOU0lPTiBpcm93OworCisgIC8qIEZpZ3VyZSBvdXQgd2hpY2ggcm93IG9mIGludGVybGFjZWQgaW1hZ2UgaXMgbmVlZGVkLCBhbmQgYWNjZXNzIGl0LiAqLworICBzd2l0Y2ggKChpbnQpIChzb3VyY2UtPmN1cl9yb3dfbnVtYmVyICYgNykpIHsKKyAgY2FzZSAwOgkJCS8qIGZpcnN0LXBhc3Mgcm93ICovCisgICAgaXJvdyA9IHNvdXJjZS0+Y3VyX3Jvd19udW1iZXIgPj4gMzsKKyAgICBicmVhazsKKyAgY2FzZSA0OgkJCS8qIHNlY29uZC1wYXNzIHJvdyAqLworICAgIGlyb3cgPSAoc291cmNlLT5jdXJfcm93X251bWJlciA+PiAzKSArIHNvdXJjZS0+cGFzczJfb2Zmc2V0OworICAgIGJyZWFrOworICBjYXNlIDI6CQkJLyogdGhpcmQtcGFzcyByb3cgKi8KKyAgY2FzZSA2OgorICAgIGlyb3cgPSAoc291cmNlLT5jdXJfcm93X251bWJlciA+PiAyKSArIHNvdXJjZS0+cGFzczNfb2Zmc2V0OworICAgIGJyZWFrOworICBkZWZhdWx0OgkJCS8qIGZvdXJ0aC1wYXNzIHJvdyAqLworICAgIGlyb3cgPSAoc291cmNlLT5jdXJfcm93X251bWJlciA+PiAxKSArIHNvdXJjZS0+cGFzczRfb2Zmc2V0OworICAgIGJyZWFrOworICB9CisgIGltYWdlX3B0ciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgc291cmNlLT5pbnRlcmxhY2VkX2ltYWdlLAorICAgICBpcm93LCAoSkRJTUVOU0lPTikgMSwgRkFMU0UpOworICAvKiBTY2FuIHRoZSByb3csIGV4cGFuZCBjb2xvcm1hcCwgYW5kIG91dHB1dCAqLworICBzcHRyID0gaW1hZ2VfcHRyWzBdOworICBwdHIgPSBzb3VyY2UtPnB1Yi5idWZmZXJbMF07CisgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIGMgPSBHRVRKU0FNUExFKCpzcHRyKyspOworICAgICpwdHIrKyA9IGNvbG9ybWFwW0NNX1JFRF1bY107CisgICAgKnB0cisrID0gY29sb3JtYXBbQ01fR1JFRU5dW2NdOworICAgICpwdHIrKyA9IGNvbG9ybWFwW0NNX0JMVUVdW2NdOworICB9CisgIHNvdXJjZS0+Y3VyX3Jvd19udW1iZXIrKzsJLyogZm9yIG5leHQgdGltZSAqLworICByZXR1cm4gMTsKK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfaW5wdXRfZ2lmIChqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKK3sKKyAgLyogbm8gd29yayAqLworfQorCisKIC8qCiAgKiBUaGUgbW9kdWxlIHNlbGVjdGlvbiByb3V0aW5lIGZvciBHSUYgZm9ybWF0IGlucHV0LgogICovCkBAIC0zMCw5ICs2NjYsMTggQEAKIEdMT0JBTChjanBlZ19zb3VyY2VfcHRyKQogamluaXRfcmVhZF9naWYgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQogewotICBmcHJpbnRmKHN0ZGVyciwgIkdJRiBpbnB1dCBpcyB1bnN1cHBvcnRlZCBmb3IgbGVnYWwgcmVhc29ucy4gIFNvcnJ5LlxuIik7Ci0gIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgcmV0dXJuIE5VTEw7CQkJLyoga2VlcCBjb21waWxlciBoYXBweSAqLworICBnaWZfc291cmNlX3B0ciBzb3VyY2U7CisKKyAgLyogQ3JlYXRlIG1vZHVsZSBpbnRlcmZhY2Ugb2JqZWN0ICovCisgIHNvdXJjZSA9IChnaWZfc291cmNlX3B0cikKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJICBTSVpFT0YoZ2lmX3NvdXJjZV9zdHJ1Y3QpKTsKKyAgc291cmNlLT5jaW5mbyA9IGNpbmZvOwkvKiBtYWtlIGJhY2sgbGluayBmb3Igc3Vicm91dGluZXMgKi8KKyAgLyogRmlsbCBpbiBtZXRob2QgcHRycywgZXhjZXB0IGdldF9waXhlbF9yb3dzIHdoaWNoIHN0YXJ0X2lucHV0IHNldHMgKi8KKyAgc291cmNlLT5wdWIuc3RhcnRfaW5wdXQgPSBzdGFydF9pbnB1dF9naWY7CisgIHNvdXJjZS0+cHViLmZpbmlzaF9pbnB1dCA9IGZpbmlzaF9pbnB1dF9naWY7CisKKyAgcmV0dXJuIChjanBlZ19zb3VyY2VfcHRyKSBzb3VyY2U7CiB9CiAKICNlbmRpZiAvKiBHSUZfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9zaW1kX1JFQURNRS5qYS50eHQgYi9zaW1kX1JFQURNRS5qYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMxMGI2MwotLS0gL2Rldi9udWxsCisrKyBiL3NpbWRfUkVBRE1FLmphLnR4dApAQCAtMCwwICsxLDE0NSBAQAorSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIEpQRUcgc29mdHdhcmUgcmVsZWFzZSA2YgorICB3aXRoIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSB2ZXJzaW9uIDEuMDIKKyAgICA9PSBSRUFETUUgPT0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAqKiBOb3RlICoqCitUaGUgYWNjb21wYW55aW5nIGRvY3VtZW50cyByZWxhdGVkIHRvIHg4NiBTSU1EIGV4dGVuc2lvbiBhcmUgd3JpdHRlbiBpbgorSmFwYW5lc2UuIFRoZSBFbmdsaXNoIHZlcnNpb24gb2YgdGhlc2UgZG9jdW1lbnRzIGlzIGN1cnJlbnRseSB1bmF2YWlsYWJsZS4KK0kgYXBvbG9naXplIGZvciB0aGlzIGluY29udmVuaWVuY2UgdG8gaW50ZXJuYXRpb25hbCBwcm9ncmFtbWVycy4KKworTW9zdCBvZiB0aGUgc291cmNlIGNvZGUgb2YgdGhlIGV4dGVuc2lvbiBwYXJ0IGlzIHdyaXR0ZW4gaW4gYXNzZW1ibHkKK2xhbmd1YWdlLiBUbyBjb21waWxlIHRoZSBzb3VyY2UsIHlvdSBuZWVkIE5BU00gKG5ldHdpZGUgYXNzZW1ibGVyKS4KK05BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgoraHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOCAuCisKK0F0IHByZXNlbnQsIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZG9lc24ndCBzdXBwb3J0IDY0LWJpdCBtb2RlIG9mCitBTUQ2NCAoeDg2XzY0KS4KKworVGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBpcyBhbiB1bm9mZmljaWFsIGV4dGVuc2lvbiB0byB0aGUgSUpHIEpQRUcKK3NvZnR3YXJlLiBQbGVhc2UgZG8gbm90IHNlbmQgYW55IHF1ZXN0aW9ucyBhYm91dCB0aGlzIGRpc3RyaWJ1dGlvbgordG8gdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAuCisKK0ZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIElKRydzIFJFQURNRSBmaWxlLgorVGhlIHNhbWUgY29uZGl0aW9ucyBhcHBseSB0byB0aGlzIFNJTUQtZXh0ZW5kZWQgSlBFRyBzb2Z0d2FyZS4KKworCisKK6KjpLOkzqW9pdWlyKTPCisKKyAgSlBFRyCkzqW1pd2hvKXIpemlpKXWpeml6qTIpLekxrmtpK+7yKTvpOykxqSkpOsgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzCisgIEpQRUcgbGlicmFyeSAobGlianBlZyCl6aWkpdal6aXqKSCky6GiSW50ZWwgeDg2ILfPIENQVSCkzrv9pMQgU0lNRCDMv87hpPIKKyAgzfjN0aS3pL+ls6G8pckopeuhvKXBpfMppPK/t6S/pMvEybLDpLehorniwq6yvbL+wqSkt6S/pOKkzqTHpLmhoworICBNTVggpOQgU1NFIKTKpMmkziBTSU1EILHpu7u1oce9pPLB9cj3pLekxqSkpOul16Xtpbulw6W1vuWkx8awuu6ktaS7pOukyKGiCisgIKWqpeqluKXKpevIx6TOIGxpYmpwZWcgpemlpKXWpeml6qTIyOaz06S3pMYgMqHBMyDH3MT4xdmkzsKuxdmkx8awuu6kt6TepLmhoworICCk3qS/oaJTSU1EILK9pMuwzaTppMqkpLniwq6yvbL+wqSk4qSkpK+kxKSru9yktaTspMakqqTqoaJTSU1EILHpu7ukzrvIpKgKKyAgpMqkpLXst79DUFWky6SqpKSkxqTioaKlqqXqpbilyqXryMekyMjms9Okt6TGvb2/9KHzxPjF2bniwq6ky8awuu6kt6TepLmhoworCisgIEpQRUcgsLW9zKG/xbizq73ozf2kzrniwq6yvaTyzNzFqqTIpLekxqSkpN6kuaSsoaLGsLruwq7F2brHzaXA6KTHpM+kyqSvoaIKKyAgpaql6qW4pcql68jHpMjGscX5sMq+5aTOt9e7u8C6xdmk8rv9pMSks6TIpPK6x82lwOiky7nNpKikv6WzobylyaTyus7N0QorICCkt6TGpKSk3qS5oaO8wrrdoaJEQ1Sx6bu7pMvJ4sawvq6/9MXARENUpPK7yKTDpL++7LnnoaKkqqTopNOhoqTkpOTGw7zspMoKKyAgpbWl86XXpeql86WwyOYoaDF2Mimk8rv9pMRKUEVHpdWloaWkpeuk8sW4s6ukuaTrvuy556TyvfykpKTGpM+hogorICClqqXqpbilyqXryMekyKOxpdOlw6XIpOKw46TvpMqkpLfrssyk8r3QpLek3qS5oaO+5bWtpM6jsqTEpM7O47OwpM6+7LnnpOIKKyAgpaql6qW4pcql68jHpOik6qTPueKy6LzBsr0oueLAusXZsr0ppLWk7KTGpKSk3qS5oaMKKworICBTSU1EIMLQsf6yvaTLut2kt6TGpM+horLEx72kyrjCpOqhoqWqpeqluKXKpevIx6TOIGxpYmpwZWcgpemlpKXWpeml6qTIpM4KKyAguN+0ucCtpKy8uqTvpOykyqSkpOikpqTLuc3OuKS1pOykxqSkpN6kuaTOpMehoqTbpMik86TJpM6+7LnnoaKlqqXqpbilyqXrCisgIMjHpPKkvaTOpN6k3sPWpK20uaSopOuks6TIpKyyxMe9pMekuaGjxsOky6GitqbNraXppaSl1qXppeqky7TYpLekxrjApKik0KGiCisgILDsyfSkzs7js7AoY3lnd2luIKTOvuy55ymk8r38pK2hoqS9pOykz6WqpeqluKXKpevIx6TIpdClpKXKpeql7KXZpeukx6TOCisgIL7lsMy437S5wK2krKSipOqk3qS5pM6kx6GipL2kzqTepN6lqqXqpbilyqXryMek8sPWpK20uaSopOuks6TIpKykx6StpN6kuaGjCisKKyAgU0lNRCDC0LH+sr2ktaTspMakpKTryfTKrKTPoaKwyrK8pM6kyKSqpOqhpworCisgILC1vcy96M39oacKKyAgICC/p7b1tNbK0bS5KFJHQi0+WUNiQ3IpICA6IE1NWCBvciBTU0UyCisgICAgpcClpqXzpbWl86XXpeql86WwICAgICAgOiBNTVggb3IgU1NFMgorICAgIERDVL3nytG0uSi54sC6xdnAsL/0KSAgIDogTU1YIG9yIFNTRTIKKyAgICBEQ1S958rRtLkoueLCrsCwv/QpICAgICA6IE1NWCBvciBTU0UyCisgICAgRENUvefK0bS5KMnixrC+rr/0KSAgICAgOiAzRE5vdyEgb3IgU1NFICjAsL/0sem7u8n0OiBNTVggb3IgU1NFMikKKyAgICBEQ1S3uL/0zsy70rK9KMCwv/QpICAgICA6IE1NWCBvciBTU0UyCisgICAgRENUt7i/9M7Mu9KyvSjJ4sawvq6/9CkgOiAzRE5vdyEgb3IgU1NFICjAsL/0sem7u8n0OiBNTVggb3IgU1NFMikKKworICDFuLOrvejN/aGnCisgICAgv6e29bTWytG0uShZQ2JDci0+UkdCKSAgOiBNTVggb3IgU1NFMgorICAgIKWipcOl16W1pfOl16XqpfOlsCAgICAgIDogTU1YIG9yIFNTRTIKKyAgICBEQ1S11crRtLkoueLAusXZwLC/9CkgICA6IE1NWCBvciBTU0UyCisgICAgRENUtdXK0bS5KLniwq7AsL/0KSAgICAgOiBNTVggb3IgU1NFMgorICAgIERDVLXVytG0uSjJ4sawvq6/9CkgICAgIDogM0ROb3chIG9yIFNTRSAowLC/9LHpu7vJ9DogTU1YIG9yIFNTRTIpCisgICAgRENUtdXK0bS5KL3Mvq7FuLOrKSAgICAgOiBNTVggb3IgU1NFMgorCisgIMPtoctTU0UyIKTLpMSkpKTGpM+holNJTUQgwLC/9LHpu7ukzqTfpPLN+M3RpLekxqSkpN6kuaGjU0lNRCDH3MC6xdkKKyAgICAgIMnixrC+rr/0xcCx6bu7pM/N+M3RpLekxqSkpN6ku6TzoaOk3qS/oaJTU0UzIKTPu8jN0aS1pOykxqSkpN6ku6TzoaMKKyAgICAgIKSzpM4gSlBFRyCl6aWkpdal6aXqpMukqqSkpMakz6GiU1NFMyCk8rvIzdGkt6TGpOLGsLruwq7F2bj+vuWkzgorICAgICAguKu5/qTfpKyk26TIpPOkyaTKpKSkv6ThpMeholNTRTMgpPKltaXdobylyKS5pOvNvcTqpM+koqTqpN6ku6TzoaMKKworICCks6TOpNukq6TLoaKloqW7pfOl1qXquMC47MjHRENUpeuhvKXBpfMoyPNTSU1EOyC958rRtLmjs7zvob+11crRtLmjtLzvKQorICCky6TopOqholNJTUTMv87hpM67yKSopMqkpLXst79DUFWkx6Tivb2/9KHzxPjF2aTOueLCrrK9pKy0/MLUpMekraTepLmhoworICCktaTppMuhosW4s6u96M39pMekzqXPpdWl3qXzpcels6G8pcml66G8pcGl86TPoaJTSU1EILK9pMuwzaTppMqkpMr9y6GkxworICC54sKusr2y/sKkpLWk7KTGpKSk3qS5oaMKKworCiuio8LQsf6kt6TGpKSk66XXpemlw6XIpdWlqaG8peAKKworICBJbnRlbCB4ODYgQ1BVIKTLuMfNraTOtaHHvaTyzfjN0aS3pMakpKTepLmkzqTHoaKlqqXqpbilyqXryMekyKTPsNukyqTqoaIKKyAgSW50ZWwgeDg2IENQVSCkqqTopNOkvaTOuN+0uSBDUFUgpPK6zs3RpLekxqSkpOult6W5pcal4KTLuMKk6aTspN6kuaGjCisgIFBvd2VyUEMgpMqkyaTOIEludGVsIHg4NiC3z7DKs7CkzqW3pbmlxqXgpMukz8LQsf6kt6TGpKSk3qS7pPOhoworICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgtvHCzsWqpMukz6GiODAzODYgsMq536TOIEludGVsIHg4NiBDUFUgpKqk6KTTpL2kzrjftLkgQ1BVIKTyus7N0aS3pMakpKTrCisgIKXPobylyaWmpaeloqTHoaKkq6TEoaIzMmJpdKXVpemlw6XIpaKlyaXspbml4qG8pckoyt247qXiobylySmk8rvIzdGkt6TGCisgIKSkpOul16XppcOlyKXVpamhvKXgKE9TKaSswtC+3aTHpLmho6SzpOyky6TPoaJXaW4zMiAoV2luZG93cyA5eLfPL05Ut88pCisgIKTks8a87yBQQy1VTklYIChsaW51eCCk5CB4QlNEIKXVpaGl36XqpMqkySkgpMqkyaSss7rF9qS3pN6kuaGjpMqkqqGiCisgIEFNRDY0IChFTTY0VCkgpM42NGJpdKXiobylybTEtq2ky6TPwtCx/qS3pMakpKTepLuk86GjpLTD7bDVpK+kwKS1pKShoworICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworoqOks6TOIFNJTUQgs8jEpcjHIElKRyBKUEVHIGxpYnJhcnkguMfNraTOwKm4wgorCisgIKWqpeqluKXKpevIx6TOIElKRyBKUEVHIGxpYnJhcnkgpMekz6GipbOl86XRpaSl67v+pM6lqqXXpbel56XzpMehogorICA4Yml0wLrF2UpQRUcgpMggMTJiaXTAusXZSlBFRyCkzs6+yv2ky8LQsf6kt6TepLmkrKGipLOkziBTSU1EILPIxKXIx6TPCisgIDhiaXTAusXZSlBFRyCkzqTfpM7C0LH+pMehojEyYml0wLrF2UpQRUcgpMukz8LQsf6kt6TepLuk86GjpMikz6SkpKihogorICAxMmJpdMC6xdlKUEVHIKTPsOXOxc3RpMqkyaTOxsO87MqszO6k8r38pKSkxsvYpMm7yKTvpOykxqSkpMqkpKTOpMehogorICDM5MLqpM++r6TKpKSkyLvXpKSk3qS5oaMKKworCiuio7vIpKTK/QorCisgIKXepcul5aWipeukz6GisMqyvKTOpdWloaWkpeuky8qspKuk7KTGpKSk3qS5pM6kx6GivMK63aTOu8ikpMr9pMqkyaTLCisgIKTEpKSkxqTPoaKkvaTBpOmk8ruyvsikt6TGpK+kwKS1pKShoworCisgICAgc2ltZF9SRUFETUUuamEudHh0ICAgLSCks6TOpdWloaWkpesKKyAgICBzaW1kX2ZpbGVsaXN0LmphLnR4dCAtILz9z7+l1aWhpaSl66TOpdWloaWkpeul6qW5pcgKKyAgICBzaW1kX2luc3RhbGwuamEudHh0ICAtIKWzpfOl0aWkpeukzrvFyv0KKyAgICBzaW1kX2ludGVybmFsLmphLnR4dCAtIFNJTUQgs8jEpcn0yqykzr7cutkKKyAgICBzaW1kX2NkanBlZy5qYS50eHQgICAtIFNJTUQgyMcgY2pwZWcvZGpwZWcgpMu4x82tpM61oce9pM6y8sDiCisgICAgc2ltZF9jaGFuZ2VzLmphLnR4dCAgLSBTSU1EILPIxKXJ9MqspM6y/sjHzfrO8gorCisKK6Kju8jN0b7yt++hpqW1pd2hvKXICisKKyAgpLOkziBTSU1EILPIxKXIxyBJSkcgSlBFRyBzb2Z0d2FyZSCkzrvIzdG+8rfvpMukxKSkpMakz6Gipaql6qW4pcql68jHpM4KKyAgSUpHIEpQRUcgc29mdHdhcmUgpM67yM3RvvK376SsxazN0aS1pOyk3qS5oaO+3KS3pK+kz6GixrG6raTOIFJFQURNRQorICCl1aWhpaSl6yix0cq4KaTOIExFR0FMIElTU1VFUyCkzrngpPK7sr7IpLekxqSvpMCktaSkoaMKKworICC+5bWtpM67yM3RvvK376TOxuLNxqTOt6uk6srWpLeky6TKpOqk3qS5pKyhoqSzpM6lvaXVpcilpqWnpaKkz6HWuL2+9aTOCisgIKTepN6kx6HXxPO2oaS1pOykxqSkpOuk4qTOpMehor6mtsjFqqTKu8jN0bLEx73AraGipKqk6KTTxsPE6qTOzNzFqqTLCisgIMLQpLmk68WsuefAraTKpMmk4rTepOGhoqSkpKukyqTryt2+2qTipKKk6qTepLuk86GjCisgIKTepL+hori2uu681ChUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCmk4rL+wqS81ChNSVlBU0FLQSBNYXNhcnUppOKhogorICC79s2zpM6kpKSrpPOk8szkpO+kuqGiy9ylvaXVpcilpqWnpaKkzrvIzdGky6TopMOkxsivwLikt6S/x6Gyv6TKpOvCu7OypMsKKyAgpMSkpKTGpOKhorDswNqkvaTOwNXHpKTyyemk76TKpKSk4qTOpMikt6TepLmhoworCisgIKSzpM4gU0lNRCCzyMSlyMcgSUpHIEpQRUcgc29mdHdhcmUgpM+hoqWqpeqluKXKpeuzq8ivuLWkziBJSkcgpMikz7TYt7gKKyAgpMqkr6Gixsi8q6TLs8jEpaTyudSkyqTDpL+k4qTOpMekuaGjpMekuaTOpMehoqSzpM4gU0lNRCCzyMSlyMcgSUpHIEpQRUcKKyAgc29mdHdhcmUgpMu02KS5pOu8wczkpPKhoqWqpeqluKXKpeuzq8ivuLUgKFRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwKQorICCky8H3pOmkyqSkpMekr6TApLWkpKGjCisKKyAgpLOkziBTSU1EILPIxKXIxyBJSkcgSlBFRyBzb2Z0d2FyZSCky7TYpLekxqTPoaK4tsKnpMikt6TGpc6hvKW1pd2hvKXIpMgKKyAgpLWku6TGpKSkv6TApK2k3qS5oaOl4aG8peukyqTJpMektLzBzOSkyqTJpPKkpKS/pMCkraTepLekxqTioaK+76TLsr+k6aSrCisgIKTOytbF+qSspMekraTrpO+ksaTHpM+koqTqpN6ku6TzpM6kx6GipLS+tcPOpKqkraSvpMCktaSkoaMKKyAgxsOky6GiocqlqqXqpbilyqXrpM6x0cq4pd6ly6XlpaKl66TytN6k4aHLxrG6raTOpd6ly6XlpaKl687gpMuy88X6pKwKKyAgvfGkpKTGpKKk67zBzOSk5KGiu8jN0bzUpM6lvaXVpcilpqWnpaK1u73RvNSkyKS3pMakzrW7zszJ1MKtoaa30LizydTCraTLCisgILTYpO+k67zBzOShorzBzOSkzs3Xzs6k8sbApMqkpLzBzOSkyqTJpMukxKSkpMakz6GisvPF+qTypKSkv6S3pN6ku6TzpM6kx6GiCisgIKSipLekq6TppLqktM67vrWkr6TApLWkpKGjCisKKworCisgICAgICAgICAgIEUtTWFpbCBBZGRyZXNzIDogYWxrYWlkQGNvcmFsLm9jbi5uZS5qcCAotdy65CC4rS9NSVlBU0FLQSBNYXNhcnUpCitbRU9GXQpkaWZmIC0tZ2l0IGEvc2ltZF9jZGpwZWcuamEudHh0IGIvc2ltZF9jZGpwZWcuamEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MWExNWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kX2NkanBlZy5qYS50eHQKQEAgLTAsMCArMSw3NSBAQAorSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIEpQRUcgc29mdHdhcmUgcmVsZWFzZSA2YgorICB3aXRoIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSB2ZXJzaW9uIDEuMDIKKyAgICA9PSBDREpQRUcgPT0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK6KjpLOkzqXVpaGlpKXrpM8KKworICCks6TOpdWloaWkpeukx6TPoaJTSU1EIMjHpM4gY2pwZWcgLyBkanBlZyCky7jHza2kzrWhx72k8rLywOKkt6TepLmhoworCisgICAgoqMgU0lNRCDGsLrupeKhvKXJvvDK8yAoLXYgpaql16W3peel8ykKKyAgICCioyDGw8TqpM4gU0lNRCCx6bu7pPK7yM3RpLekyqSkpOikpqTLpLmk6yAoLW5vWFhYIKWqpdelt6XnpfMpCisgICAgoqMgR0lGILfBvLCkzsbJpN+5/qTfob+98aStvdCktyAoZGpwZWcgpM4gLWdpZiClqqXXpbel56XzKQorCisKK6KjIFNJTUQgxrC67qXiobylyb7wyvMgKC12IKWqpdelt6XnpfMpCisKKyAgpLOkziBTSU1EIMjHIGNqcGVnIC8gZGpwZWcgpMekz6GiLXYgpaql16W3peel86TypMSksaTGta/GsKS5pOukyKGisMqyvAorICCkzqTopKakyiBTSU1EIMawuu6l4qG8pcm+8MrzpKyl0KG8pbil56XzvvDK86TItqaky8m9vKiktaTspN6kuaGjCisKKyAgICBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgREpQRUcsIHZlcnNpb24gNmIgIDI3LU1hci0xOTk4CisgICAgQ29weXJpZ2h0IChDKSAxOTk4LCBUaG9tYXMgRy4gTGFuZQorCisgICAgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5LCB2ZXJzaW9uIDEuMDIKKworICAgIFNJTUQgaW5zdHJ1Y3Rpb25zIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtIDogTU1YIDNETm93ISBTU0UgU1NFMgorCisgICAgICAgICAgPT09IFNJTUQgT3BlcmF0aW9uIE1vZGVzID09PQorICAgIEFjY3VyYXRlIGludGVnZXIgRENUICAoLWRjdCBpbnQpICAgOiBTU0UyCisgICAgRmFzdCBpbnRlZ2VyIERDVCAgICAgICgtZGN0IGZhc3QpICA6IFNTRTIKKyAgICBGbG9hdGluZy1wb2ludCBEQ1QgICAgKC1kY3QgZmxvYXQpIDogU1NFCisgICAgUmVkdWNlZC1zaXplIERDVCAgICAgICgtc2NhbGUgTS9OKSA6IFNTRTIKKyAgICBIaWdoLXF1YWxpdHkgdXBzYW1wbGluZyAoZGVmYXVsdCkgIDogU1NFMgorICAgIExvdy1xdWFsaXR5IHVwc2FtcGxpbmcgKC1ub3Ntb290aCkgOiBTU0UyCisgICAgQ29sb3JzcGFjZSBjb252ZXJzaW9uIChZQ2JDci0+UkdCKSA6IFNTRTIKKworICAiU0lNRCBpbnN0cnVjdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0iIKTOueDM3KTHzvO186S1pOyk66TOpM+hogorICClt6W5pcal4ChDUFUvT1MppMeltaXdobylyKS1pOykxqSkpOsgU0lNRCCx6bu7pM68787gpMekuaGjpMqkqqGipLOkzgorICClvaXVpcikx6TPIFNTRTMgpM+7yM3RpLWk7KTGpKSk3qS7pPOktyBTU0UzIKTOpbWl3aG8pcikzrihvdCk4rnUpMqk76TsCisgIKTepLuk86TOpMeholNTRTMgpKyltaXdobylyKS1pOykxqSkpMak4qSzpM654MzcpMukz7i9pOyk3qS7pPOhoworCisgIKS9pM6yvKTOICJTSU1EIE9wZXJhdGlvbiBNb2RlcyIgpM+horPGvejN/cPKs6ykx7vIzdGktaTspOsgU0lNRCCx6bu7pM4KKyAgvO/O4KTHpLmho0Zsb2F0aW5nLXBvaW50IERDVCCkx6TPIDNETm93ISCkqyBTU0UgoaKkvaTssMqzsKTOpMiks6TtpMekzworICBNTVggpKsgU1NFMiCkrMGqwvKktaTspN6kuaGjsOzIzKTLoaJTU0UvU1NFMiCkzsr9pKwgTU1YLzNETm93ISCk6KTqpOIKKyAgueLArce9pMiktaTspOukzqTHoaKks6TOwdDK/aSszfjN0bLEx72kyr7sueekzyBTU0UvU1NFMiCkrM2lwOjFqqTLwarC8gorICCktaTspN6kuaGjCisKKworoqMgxsPE6qTOIFNJTUQgsem7u6Tyu8jN0aS3pMqkpKTopKaky6S5pOsgKC1ub1hYWCClqqXXpbel56XzKQorCisgIKSzpM4gU0lNRCDIxyBjanBlZyAvIGRqcGVnIKTHpM+horDKsrykzqTopKakyqWqpdelt6XnpfOk8rvYxOqkuaTrpLOkyKTHoaIKKyAgxsPE6qTOIFNJTUQgsem7u6Tyu8jN0aS3pMqkpKTopKaky6THpK2k3qS5oaMKKworICAgIC1ub21teCAgICAgICAgIE1NWCCk8rvIzdGkt6TKpKQKKyAgICAtbm8zZG5vdyAgICAgICAzRE5vdyEgpPK7yM3RpLekyqSkCisgICAgLW5vc3NlICAgICAgICAgU1NFIKTyu8jN0aS3pMqkpAorICAgIC1ub3NzZTIgICAgICAgIFNTRTIgpPK7yM3RpLekyqSkCisgICAgLW5vc2ltZCAgICAgICAgpLmk2aTGpM4gU0lNRCCx6bu7pPK7yM3RpLekyqSkCisKKyAgpLOk7KTppM6lqqXXpbel56XzpM+homNqcGVnL2RqcGVnIKTOpbOl3qXzpcml6aWkpfOkzsDoxqyky7vYxOqkuaTrpOikpgorICCky6S3pMakr6TApLWkpKGjCisKKworoqMgR0lGILfBvLCkzsbJpN+5/qTfob+98aStvdCktyAoZGpwZWcgpM4gLWdpZiClqqXXpbel56XzKQorCisgIKWqpeqluKXKpevIxyBjanBlZy9kanBlZyCkziB2ZXJzaW9uIDZiIKTHpM+hosbDtfa+5aTOzOTC6qSrpOmhokdJRiC3wbywCisgILLowfykzsbJpN+5/qTfob+98aStvdCkt6SspbWl3aG8pciktaTspMqkr6TKpMOkxqSkpN6kt6S/oaOkx6S5pKyhogorICBHSUYgpMu02KS5pOvGw7X2pKwgMjAwM6HBMjAwNCDHr6TLpKuksaTGwKSzpsWqpMu0/LjCwNqk7KTLpMqkw6S/pL+k4aGiCisgIMX2IFNJTUQgyMekx6TPIEdJRiC3wbywpM7GyaTfuf6k36G/vfGkrb3QpLek8sn8s+iktaS7pMakoqTqpN6kuaGjCisKKyAgzb7DzKTHpLmkrKGixfYgU0lNRCDIx6THIEdJRiC3wbywpM7GyaTfuf6k36G/vfGkrb3QpLeky7vIzdGkt6TGpKSk6worICCl4qW4peWhvKXrpM+horXsyMekx6SipOsgdmVyc2lvbiA2YSCkzqTipM6k8s6uzdGkt6TGpKSk3qS5oaMKKworCisKK1tFT0ZdCmRpZmYgLS1naXQgYS9zaW1kX2NoYW5nZXMuamEudHh0IGIvc2ltZF9jaGFuZ2VzLmphLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjU2MDAyCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZF9jaGFuZ2VzLmphLnR4dApAQCAtMCwwICsxLDI0IEBACitJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgSlBFRyBzb2Z0d2FyZSByZWxlYXNlIDZiCisgIHdpdGggeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5IHZlcnNpb24gMS4wMgorICAgID09IENIQU5HRVMgPT0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lKRyBSNmIgd2l0aCB4ODZTSU1EIFYxLjAyICgyMDA2LTAyLTA0KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHg4NiDIxyBEYXJ3aW4gpMvC0LH+pLek3qS3pL+ho8awuu6zzsenpM8gRGFyd2luIDguMC4xIGZvciB4ODYgpMukxgorICC51KTKpKSk3qS3pL+ho3g4NiDIxyBNYWMgT1MgWCCkx6TioaLGsLrupLmk66TipM6kyLvXpO+k7KTepLmhoworICCk3qS/oaJTb2xhcmlzIDEwIKTHpM7GsLrus87Hp6TiudSkyqSkpN6kt6S/oaMKKworSUpHIFI2YiB3aXRoIHg4NlNJTUQgVjEuMDEgKDIwMDYtMDEtMjYpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoganNpbWRnY2MuYyCk8rvIpMOkv6TIpK2hok5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgpKzE6rXBpLWk7KTGpKSk66TICisgIMC1vu+ky6XqpfOlr6THpK2kyqSkpdClsKTyvaTAtaS3pN6kt6S/oaMKKyogsLW9zMKmpM6ls6G8pcmkzrDsyfQoamNzYW1tbXguYXNtLCBqY3NhbXNzMi5hc20sIGpjcW50M2RuLmFzbSmky6TkpOQKKyAgvunEuaTKstW96qSspKKkw6S/pM6kx6GipLOk7KTyvaTAtaS3pN6kt6S/oaMKKworSUpHIFI2YiB3aXRoIHg4NlNJTUQgVjEuMCAoMjAwNi0wMS0xMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqILrHvemkzrj4s6vIx6GjCisKKworW0VPRl0KZGlmZiAtLWdpdCBhL3NpbWRfZmlsZWxpc3QuamEudHh0IGIvc2ltZF9maWxlbGlzdC5qYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlZTQzMQotLS0gL2Rldi9udWxsCisrKyBiL3NpbWRfZmlsZWxpc3QuamEudHh0CkBAIC0wLDAgKzEsMjYxIEBACitJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgSlBFRyBzb2Z0d2FyZSByZWxlYXNlIDZiCisgIHdpdGggeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5IHZlcnNpb24gMS4wMgorICAgID09IEZJTEVMSVNUID09CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiuio6SzpM6l1aWhpaSl66TPCisKKyAgpLOkzqXVpaGlpKXrpMekz6GiU0lNRCDIxyBJSkcgSlBFRyBzb2Z0d2FyZSCkzsfbyduloqG8paulpKXWpMu8/aThpOmk7KTGCisgIKSkpOuzxqXVpaGlpKXrpM6ztc3XpPKy8sDipLek3qS5oaOkyqSqoaKks6SzpMekzyB4ODYgU0lNRCBleHRlbnNpb24gpMcKKyAgv7ekv6TLxMmyw6S1pOykv6XVpaGlpKXrpMihong4NiBTSU1EIGV4dGVuc2lvbiCkx7L+ytGkrLLDpKik6aTspMa1oce9ob8KKyAgzPKz5KSspaql6qW4pcql68jHpMikz7DbpMqk66XVpaGlpKXrpM6k36TysvLA4qS3pN6kuaGjpL2k7LDKs7CkzqXVpaGlpKXrCisgIKTLpMSkpKTGpM+hoqWqpeqluKXKpevIx6TOIGZpbGVsaXN0LmRvYyAosdHKuCkgpPK7sr7IpLekxqSvpMCktaSkoaMKKworICAgIKKjpd6ly6XlpaKl687gCisgICAgoqNjb25maWd1cmUgpbmlr6XqpdelyKTLtNi3uKS5pOul1aWhpaSl6worICAgIKKjTWljcm9zb2Z0IFZpc3VhbCBDKysgNi4wIM3RpM6l16Xtpbilp6Wvpcil1aWhpaSl67eyICh2YzZwcm9qLykKKyAgICCio8bDxOqkzqWzpfOl0aWkpenN0aTOIGpjb25maWcuaCCkyCBNYWtlZmlsZQorICAgIKKjpb2hvKW5pdWloaWkpesKKyAgICAgIKH8IHg4NiBTSU1EIGV4dGVuc2lvbiCkx7+3pL+ky8TJssOktaTspL+l1aWhpaSl6worICAgICAgofwgeDg2IFNJTUQgZXh0ZW5zaW9uIKTHsv7K0aSsssOkqKTppOykv6XVpaGlpKXrCisgICAgoqPKo7/0pdWloaWkpevC0LH+yMekziBjanBlZy9kanBlZyAoYWx0dWkvKQorICAgIKKjU0lNRCDIx6THpM+7yKTvpOykyqSkpdWloaWkpeu3siAodW51c2VkLykKKworCiuio6Xepcul5aWipevO4AorCisgILDKsrykziBTSU1EIMjHpM6l3qXLpeWloqXrpM7CvqTLoaKlqqXqpbilyqXryMekzrHRyril3qXLpeWloqXrpOIKKyAgpL2kzqTepN68/c+/pLekxqSipOqk3qS5oaPKu6S7pMa7sr7IpLekxqSvpMCktaSkoaMKKworICBzaW1kX1JFQURNRS5qYS50eHQgICAgvOel3qXLpeWloqXrKHg4NiBTSU1EIGV4dGVuc2lvbiCkzrO1zdekyqTJKQorICBzaW1kX2ZpbGVsaXN0LmphLnR4dCAgU0lNRCDIxyBJSkcgSlBFRyBzb2Z0d2FyZSCkzqXVpaGlpKXrpeqluaXICisgIHNpbWRfaW5zdGFsbC5qYS50eHQgICBTSU1EIMjHIGxpYmpwZWcgpemlpKXWpeml6qTOpbOl86XRpaSl66TOu8XK/QorICBzaW1kX2ludGVybmFsLmphLnR4dCAgU0lNRCDIxyBsaWJqcGVnIKXppaSl1qXppeqkzqGiU0lNRCCzyMSlyfTKrKTOvty62QorICBzaW1kX2NkanBlZy5qYS50eHQgICAgU0lNRCDIx6TOIGNqcGVnIC8gZGpwZWcgpMu4x82tpM61oce9pM6y8sDiCisgIHNpbWRfY2hhbmdlcy5qYS50eHQgICBTSU1EIMjHIGxpYmpwZWcgpemlpKXWpeml6qTOsv7Ix836zvIKKworCiuioyBjb25maWd1cmUgpbmlr6XqpdelyKTLtNi3uKS5pOul1aWhpaSl6worCisgIFVOSVggtMS2raTHIGNvbmZpZ3VyZSCluaWvpeql16XIpPLB9qTppLuk677sueeky8mszdekyKTKpOul1aWhpaSl67eyCisgIKTHpLmho8jzIFVOSVggtMS2raTHpM+horrvvfykt6TGpOKkq6TepKSk3qS7pPOhoworCisgIGNvbmZpZ3VyZSAgICAgY29uZmlndXJlIKW5pa+l6qXXpcjL3MLOCisgIGNvbmZpZy52ZXIgICAgY29uZmlndXJlIKSrpOm4xqTTvdCktaTspOuluaWvpeql16XIpMehoramza2l6aWkpdal6aXqpM4KKyAgICAgICAgICAgICAgICCl0KG8pbil56XzyNa55qTyxOq1waS3pMakpKTepLkKKyAgbHRtYWluLnNoICAgICBjb25maWd1cmUgpM6ltaXdobylyKW5pa+l6qXXpcggKGZyb20gR05VIGxpYnRvb2wpCisgIGNvbmZpZy5ndWVzcyAgICAgICAgICChtworICBjb25maWcuc3ViICAgICAgICAgICAgobcKKyAgaW5zdGFsbC1zaCAgICBpbnN0YWxsIKWzpd6l86XJpKykyqSkvuy556TOwuXN0aW5pa+l6qXXpcgKKyAgbmFzbV9sdC5zaCAgICBuYXNtIKTyIEdOVSBsaWJ0b29sIKTHu8ikpr7sueekzqXppcOl0aGmpbmlr6XqpdelyAorICBqY29uZmlnLmNmZyAgIGNvbmZpZ3VyZSCkrMC4wK6kuaTrIGpjb25maWcuaCCkzr/3t7+l1aWhpaSl6worICBtYWtlZmlsZS5jZmcgIGNvbmZpZ3VyZSCkrMC4wK6kuaTrIE1ha2VmaWxlIKTOv/e3v6XVpaGlpKXrCisgIGNvbmZpZ3VyZS5pbiAgY29uZmlndXJlIKW5pa+l6qXXpcikzqW9obyluaXVpaGlpKXrIChmb3IgR05VIGF1dG9jb25mKQorICBhY2xvY2FsLm00ICAgICAgICAgICAgobcKKyAgbGlianBlZy5zcGVjICBSUE0gpPK6zs3RpLekxqSkpOsgbGludXggpbeluaXGpeC4/qSxpM4gc3BlYyCl1aWhpaSl6worCisKK6KjIE1pY3Jvc29mdCBWaXN1YWwgQysrIDYuMCDN0aTOpdel7aW4paelr6XIpdWloaWkpeu3siAodmM2cHJvai8pCisKKyAgpLOk7KTppM6l1aWhpaSl66Tyu8ikpr7sueekz6Gipb2hvKW5pdWloaWkpeukrKSipOuw7KTEvuWkzqXVpaml66XApMsKKyAgpLOk7KTppM6l1aWhpaSl66TypLmk2aTGsNzGsKS3pMakr6TApLWkpKGjvtykt6SvpM+honNpbWRfaW5zdGFsbC5qYS50eHQKKyAgpPK7sr7IpLekxqSvpMCktaSkoaMKKworICBWaXN1YWwgQysrIDYuMCCwyrnfpM7F/bnns6vIr7TEtq0oRGV2U3R1ZGlvKaTOvuy556TPoaKks6TspOmkzqXVpaGlpKXrCisgIKTyytG0uSilpKXzpd2hvKXIKaS3pMa7yKTDpMakr6TApLWkpKGjCisKKyAgdmM2cHJvai9saWJqcGVnLmRzdyAgIKXXpe2luKWnpa+lyKGmpe+hvKWvpbml2qG8pbkKKyAgdmM2cHJvai9tYWtlY2ZnLmRzcCAgIGxpYmpwZWcuZHNwIChsaWJqcGVnLmxpYikgpM6l06Xrpcmky8mszdekygorICAgICAgICAgICAgICAgICAgICAgICAgwN/E6qXVpaGlpKXrIGpzaW1kY2ZnLmluYyCk8rrupOsKKyAgdmM2cHJvai9saWJqcGVnLmRzcCAgIGxpYmpwZWcubGliIKTOpdel7aW4paelr6XIpdWloaWkpesKKyAgdmM2cHJvai9janBlZy5kc3AgICAgIGNqcGVnLmV4ZSCkzqXXpe2luKWnpa+lyKXVpaGlpKXrCisgIHZjNnByb2ovZGpwZWcuZHNwICAgICBkanBlZy5leGUgpM6l16Xtpbilp6Wvpcil1aWhpaSl6worICB2YzZwcm9qL2pwZWd0cmFuLmRzcCAganBlZ3RyYW4uZXhlIKTOpdel7aW4paelr6XIpdWloaWkpesKKyAgdmM2cHJvai9yZGpwZ2NvbS5kc3AgIHJkanBnY29tLmV4ZSCkzqXXpe2luKWnpa+lyKXVpaGlpKXrCisgIHZjNnByb2ovd3JqcGdjb20uZHNwICB3cmpwZ2NvbS5leGUgpM6l16Xtpbilp6Wvpcil1aWhpaSl6worICB2YzZwcm9qL2FwcHRlc3QuZHNwICAgY2pwZWcsIGRqcGVnLCBqcGVndHJhbiCkzsawuu6lxqW5pcgobWFrZSB0ZXN0KQorICB2YzZwcm9qL2pjb25maWcuaCAgICAgVkMrKyDN0aTOIGpjb25maWcuaCAoamNvbmZpZy52YyCkyMaxpLik4qTOKQorCisKK6KjxsPE6qTOpbOl86XRpaSl6c3RpM4gamNvbmZpZy5oIKTIIE1ha2VmaWxlCisKKyAgvtykt6SvpM+honNpbWRfaW5zdGFsbC5qYS50eHQgpPK7sr7IpLekxqSvpMCktaSkoaOks6TspOmkzqXVpaGlpKXrpMukz6GiCisgIFNJTUQgsr2ky8i8pMOkxr+3pL+ky8TJssOktaTspL+lvaG8pbml1aWhpaSl66TLtNikuaTrta290qSsxMmyw6S1pOykxgorICCkpKTepLmkq6TpoaKlqqXqpbilyqXryMeky8nVwrCkziBqY29uZmlnLiogpMggTWFrZWZpbGUuKiCkz6GiCisgIKSzpM4gU0lNRCDIx6THpM+7yM3RpMekraTepLuk86GjCisKKyAgamNvbmZpZy5iYzUgICAgICAgQm9ybGFuZCBDKysgQ29tcGlsZXIgNS41ICh3aW4zMikgzdGkziBqY29uZmlnLmgKKyAgbWFrZWZpbGUuYmM1ICAgICAgQm9ybGFuZCBDKysgQ29tcGlsZXIgNS41ICh3aW4zMikgzdGkziBNYWtlZmlsZQorICBqY29uZmlnLmRqICAgICAgICBESkdQUCB2Mi4wIM3RpM4gamNvbmZpZy5oCisgIG1ha2VmaWxlLmRqICAgICAgIERKR1BQIHYyLjAgzdGkziBNYWtlZmlsZQorICBqY29uZmlnLm1ndyAgICAgICBNaW5HVyDN0aTOIGpjb25maWcuaAorICBtYWtlZmlsZS5tZ3cgICAgICBNaW5HVyDN0aTOIE1ha2VmaWxlICjAxcWqIEpQRUcgpemlpKXWpeml6qTyuu7ArikKKyAgbWFrZWZpbGUubWd3ZGxsICAgTWluR1cgzdGkziBNYWtlZmlsZSAoRExMIMjHIEpQRUcgpemlpKXWpeml6qTyuu7ArikKKyAgamNvbmZpZy52YyAgICAgICAgVkMrKyDN0aTOIGpjb25maWcuaAorICBtYWtlZmlsZS52YyAgICAgICBWQysrIM3RpM4gTWFrZWZpbGUgKMDFxaogSlBFRyCl6aWkpdal6aXqpPK67sCuKQorICBtYWtlZmlsZS52Y2RsbCAgICBWQysrIM3RpM4gTWFrZWZpbGUgKERMTMjHIEpQRUcgpemlpKXWpeml6qTyuu7ArikKKyAgamNvbmZpZy5saW51eCAgICAgbGludXggzdGkziBqY29uZmlnLmggKMPtoadjb25maWd1cmUgpM67yM3RpPK/5L6pKQorICBtYWtlZmlsZS5saW51eCAgICBsaW51eCDN0aTOIE1ha2VmaWxlICjD7aGnY29uZmlndXJlIKTOu8jN0aTyv+S+qSkKKworICCwyrK8pM6l1aWhpaSl66TPoaK+5bWtsMqzsKTOpbOl86XRpaSl6aTLwtCx/qS5pOsgamNvbmZpZy5oIKTIIE1ha2VmaWxlCisgIKTyv7ekv6TLuu7ArqS5pOu+7LnnpM6/97e/pMikyqTrpdWloaWkpeukx6S5oaOlqqXqpbilyqXryMeky6Tiwri636S3pN6kuQorICCkrKGiU0lNRCCyvaTLyLykpsrRubmkrLvcpLWk7KTGpKSk3qS5oaMKKworICBja2NvbmZpZy5jICAgICAgICBqY29uZmlnLmggpPLAuMCupLmk66XXpe2lsKXppeAKKyAgbWFrZWZpbGUuYW5zaSAgICAgTWFrZWZpbGUgpM6/97e/pdWloaWkpesgKEFOU0kgpbOl86XRpaSl6c3RKQorICBtYWtlZmlsZS51bml4ICAgICBNYWtlZmlsZSCkzr/3t7+l1aWhpaSl6yAoyPMgQU5TSSCls6XzpdGlpKXpzdEpCisKKworoqOlvaG8pbml1aWhpaSl6worCisgIKH8IHg4NiBTSU1EIGV4dGVuc2lvbiCkx7+3pL+ky8TJssOktaTspL+l1aWhpaSl6worCisgIGpjY29sbW14LmFzbSAgUkdCLT5ZQ2JDciC/p7b1tNbK0bS5IChNTVgpCisgIGpjY29sc3MyLmFzbSAgUkdCLT5ZQ2JDciC/p7b1tNbK0bS5IChTU0UyKQorICBqY3NhbW1teC5hc20gIKXApaal86W1pfOl16XqpfOlsCAoTU1YKQorICBqY3NhbXNzMi5hc20gIKXApaal86W1pfOl16XqpfOlsCAoU1NFMikKKworICBqZGNvbG1teC5hc20gIFlDYkNyLT5SR0Igv6e29bTWytG0uSAoTU1YKQorICBqZGNvbHNzMi5hc20gIFlDYkNyLT5SR0Igv6e29bTWytG0uSAoU1NFMikKKyAgamRzYW1tbXguYXNtICCloqXDpdeltaXzpdel6qXzpbAgKE1NWCkKKyAgamRzYW1zczIuYXNtICCloqXDpdeltaXzpdel6qXzpbAgKFNTRTIpCisgIGpkbWVybW14LmFzbSAgv6e29bTWytG0uaG/paKlw6XXpbWl86XXpeql86Wwxf255yAoTU1YKQorICBqZG1lcnNzMi5hc20gIL+ntvW01srRtLmhv6WipcOl16W1pfOl16XqpfOlsMX9uecgKFNTRTIpCisKKyAgamNxbnRpbnQuYXNtICClx6G8pb/K0bS5pMjOzLvSsr0gKMjzU0lNRCwgwLC/9CkKKyAgamNxbnRmbHQuYXNtICClx6G8pb/K0bS5pMjOzLvSsr0gKMjzU0lNRCwgyeLGsL6uv/TFwCkKKyAgamNxbnRtbXguYXNtICClx6G8pb/K0bS5pMjOzLvSsr0gKE1NWCwgwLC/9CkKKyAgamNxbnRzMmkuYXNtICClx6G8pb/K0bS5pMjOzLvSsr0gKFNTRTIsIMCwv/QpCisgIGpjcW50M2RuLmFzbSAgpcehvKW/ytG0uaTIzsy70rK9ICgzRE5vdyEgJiBNTVgsIMnixrC+rr/0xcApCisgIGpjcW50c3NlLmFzbSAgpcehvKW/ytG0uaTIzsy70rK9IChTU0UgJiBNTVgsIMnixrC+rr/0xcApCisgIGpjcW50czJmLmFzbSAgpcehvKW/ytG0uaTIzsy70rK9IChTU0UgJiBTU0UyLCDJ4sawvq6/9MXAKQorCisgIGpmZGN0aW50LmFzbSAgueLAusXZwLC/9Ci958r9uP4pRENUICjI81NJTUQpCisgIGpmbW14aW50LmFzbSAgueLAusXZwLC/9Ci958r9uP4pRENUIChNTVgpCisgIGpmc3MyaW50LmFzbSAgueLAusXZwLC/9Ci958r9uP4pRENUIChTU0UyKQorICBqZmRjdGZzdC5hc20gILniwq7AsL/0KL3nyv24/ilEQ1QgKMjzU0lNRCkKKyAgamZtbXhmc3QuYXNtICC54sKuwLC/9Ci958r9uP4pRENUIChNTVgpCisgIGpmc3MyZnN0LmFzbSAgueLCrsCwv/QovefK/bj+KURDVCAoU1NFMikKKyAgamZkY3RmbHQuYXNtICDJ4sawvq6/9MXAKL3nyv24/ilEQ1QgKMjzU0lNRCkKKyAgamYzZG5mbHQuYXNtICDJ4sawvq6/9MXAKL3nyv24/ilEQ1QgKDNETm93ISkKKyAgamZzc2VmbHQuYXNtICDJ4sawvq6/9MXAKL3nyv24/ilEQ1QgKFNTRSkKKworICBqaWRjdGludC5hc20gILniwLrF2cCwv/QotdXK/bj+KURDVCAoyPNTSU1EKQorICBqaW1teGludC5hc20gILniwLrF2cCwv/QotdXK/bj+KURDVCAoTU1YKQorICBqaXNzMmludC5hc20gILniwLrF2cCwv/QotdXK/bj+KURDVCAoU1NFMikKKyAgamlkY3Rmc3QuYXNtICC54sKuwLC/9Ci11cr9uP4pRENUICjI81NJTUQpCisgIGppbW14ZnN0LmFzbSAgueLCrsCwv/QotdXK/bj+KURDVCAoTU1YKQorICBqaXNzMmZzdC5hc20gILniwq7AsL/0KLXVyv24/ilEQ1QgKFNTRTIpCisgIGppZGN0Zmx0LmFzbSAgyeLGsL6uv/TFwCi11cr9uP4pRENUICjI81NJTUQpCisgIGppM2RuZmx0LmFzbSAgyeLGsL6uv/TFwCi11cr9uP4pRENUICgzRE5vdyEgJiBNTVgpCisgIGppc3NlZmx0LmFzbSAgyeLGsL6uv/TFwCi11cr9uP4pRENUIChTU0UgJiBNTVgpCisgIGppc3MyZmx0LmFzbSAgyeLGsL6uv/TFwCi11cr9uP4pRENUIChTU0UgJiBTU0UyKQorICBqaWRjdHJlZC5hc20gIL3Mvq7FuLOrzdEotdXK/bj+KURDVCAoyPNTSU1EKQorICBqaW1teHJlZC5hc20gIL3Mvq7FuLOrzdEotdXK/bj+KURDVCAoTU1YKQorICBqaXNzMnJlZC5hc20gIL3Mvq7FuLOrzdEotdXK/bj+KURDVCAoU1NFMikKKworICBqc2ltZGNwdS5hc20gIENQVSCkziBTSU1EIKW1pd2hvKXIpcGlp6XDpa8KKyAganNpbWRkamcuYXNtICBPUyCkziBTSU1EIKW1pd2hvKXIpcGlp6XDpa8gKGZvciBESkdQUCBWLjIpCisgIGpzaW1kdzMyLmFzbSAgT1MgpM4gU0lNRCCltaXdobylyKXBpaelw6WvIChmb3IgV2luMzIpCisgIGpzaW1kZ2NjLmMgICAgT1MgpM4gU0lNRCCltaXdobylyKXBpaelw6WvIChmb3IgZ2NjKQorCisgIG1ha2VjZmcuYyAgICAgpaKlu6Xzpdal6rjAuOzN0cDfxOql1aWhpaSl6yBqc2ltZGNmZy5pbmMgpPK67sCupLmk6worCisgIGpzaW1kZXh0LmluYyAgpaKlu6Xzpdal6rjAuOylvaG8pbnN0aTOtqbEzKXYpcOlwKXVpaGlpKXrCisgIGpkY3QuaW5jICAgICAgRENUILTYz6Kl1aWhpaSl683RpM6l2KXDpcCl1aWhpaSl6worICBqY29sc2FtcC5pbmMgIL+ntvW01srRtLmhv6W1pfOl16XqpfOlsLTYz6Kl1aWhpaSl683RpM6l2KXDpcCl1aWhpaSl6worCisgIGpjb2xzYW1wLmggICAgv6e29bTWytG0uaG/pbWl86XXpeql86WwtNjPoqXVpaGlpKXrzdGkzqXYpcOlwKXVpaGlpKXrCisgICAgICAgICAgICAgICAgpaql6qW4pcql68jHpMukz8K4ut+kt6TKpKSjw7jAuOyl2KXDpcCl1aWhpaSl66THoaIKKyAgICAgICAgICAgICAgICBTSU1EILK9pMfGs8b+pLWk7KS/tNi/9KTOwOu4wKSsta290qS1pOykxqSkpN6kuaGjCisKKyAganBlZ2RsbC5kZWYgICBETEwgyMcgSlBFRyBMaWJyYXJ5IM3RpM602L/0pailr6W5pd2hvKXIxOq1waXVpaGlpKXrCisgIGpwZWdkbGwucmMgICAgRExMIMjHIEpQRUcgTGlicmFyeSDN0aTOpdChvKW4peel86Xqpb2hvKW5xOq1waXVpaGlpKXrCisgICAgICAgICAgICAgICAgpLOk7KTppM6l1aWhpaSl66TPoaJJSkcgSlBFRyBMaWJyYXJ5IKTypL2kzqTepN4gRExMIKTLCisgICAgICAgICAgICAgICAgpLmk677sueeky7vIzdGkt6TepLkobWFrZWZpbGUudmNkbGwvbWFrZWZpbGUubWd3ZGxsKaGjCisKKyAgofwgeDg2IFNJTUQgZXh0ZW5zaW9uIKTHsv7K0aSsssOkqKTppOykv6XVpaGlpKXrCisKKyAgytG5ucbizcaky6TEpKSkxsbDpMu1rb3SpM6kyqSkpdWloaWkpeuky6TPoaJTSU1EILK9pMe/t6S/pMvGs8b+pLWk7KS/CisgILTYv/SkzsDruMCk5KS9pM64xqTTvdCkt7WtvdKholNJTUQgsr2ky7TYz6KkuaTrpd6lr6XtxOq1waTKpMmkrMTJssMKKyAgpLWk7KTGpKSk3qS5oaMKKworICBqcGVnbGliLmggICAgIEpQRUcgpemlpKXWpeml6qTOpeGlpKXzpdilw6XApdWloaWkpesKKyAganBlZ2ludC5oICAgICBKUEVHIKXppaSl1qXppeqkzsbiyfTN0aXYpcOlwKXVpaGlpKXrCisgIGptb3JlY2ZnLmggICAgSlBFRyCl6aWkpdal6aXqpM6+3LrZwN/E6qXYpcOlwKXVpaGlpKXrCisKKyAgamRjdC5oICAgICAgICBEQ1QgtNjPoqXVpaGlpKXrzdGkzqXYpcOlwKXVpaGlpKXrCisgICAgICAgICAgICAgICAgU0lNRCC96M39pMvFrKS5pOuk6KSmpMuhorT2pMSkq6TOytG/9KTOt7+k4srRubmktaTspMYKKyAgICAgICAgICAgICAgICCkpKTepLmhoworCisgIGpjZGN0bWdyLmMgICAgvefK/bj+RENUpM6l3qXNobyluKXhpfOlyL3ozf0KKyAgamRkY3RtZ3IuYyAgICC11cr9uP5EQ1SkzqXepc2hvKW4peGl86XIvejN/QorCisgIGpjY29sb3IuYyAgICAgUkdCLT5ZQ2JDciC/p7b1tNbK0bS5ICjI81NJTUQpCisgIGpkY29sb3IuYyAgICAgWUNiQ3ItPlJHQiC/p7b1tNbK0bS5ICjI81NJTUQpCisgIGpkbWVyZ2UuYyAgICAgv6e29bTWytG0uaG/paKlw6XXpbWl86XXpeql86Wwxf255yAoyPNTSU1EKQorICBqY3NhbXBsZS5jICAgIKXApaal86W1pfOl16XqpfOlsCAoyPNTSU1EKQorICBqZHNhbXBsZS5jICAgIKWipcOl16W1pfOl16XqpfOlsCAoyPNTSU1EKQorICAgICAgICAgICAgICAgIGpkc2FtcGxlLmMgpMukz6GiyPNTSU1EyMekziBoMXYyIKWipcOl16W1pfOl16XqpfOlsLTYv/QKKyAgICAgICAgICAgICAgICAoaDF2Ml91cHNhbXBsZSwgaDF2Ml9mYW5jeV91cHNhbXBsZSkgpOLEybLDpLWk7KTGpKSk3qS5oaMKKworICBqZGh1ZmYuaCAgICAgIKXPpdWl3qXzyeS55qXHpbOhvKXJvejN/SAopdilw6XAKQorICBqZGh1ZmYuYyAgICAgIKXPpdWl3qXzyeS55qXHpbOhvKXJvejN/SAopbehvKWxpfOlt6XjpespCisgIGpkcGh1ZmYuYyAgICAgpc+l1aXepfPJ5Lnmpcels6G8pcm96M39ICil16XtpbCl7KXDpbel1ikKKyAgICAgICAgICAgICAgICCks6TspOmkzqOzpMSkzqXVpaGlpKXrpM7K0bm5xcCkz6GiU0lNRCCyvaTHpM+koqTqpN6ku6TzoaMKKyAgICAgICAgICAgICAgICClx6Wzobylyb3ozf2kzsr9y6Gk8rj6zqiyvaS1pLukxqSipOqk3qS5oaMKKworICBqZGNvZWZjdC5jICAgIERDVKXHobylv6XWpe2lw6WvpM6l3qXNobyluKXhpfOlyAorICAgICAgICAgICAgICAgIFNJTUQgsr2kyKTPtNi3uKTKpK+horDsyfSkzqWzobylyaTyuPrOqLK9pLWku6TGpKKk6qTepLmhoworCisgIGpjb21hcGkuYyAgICAgsLW9zC/FuLOrILamxMwgQVBJILTYv/TE6rXBCisgICAgICAgICAgICAgICAgU0lNRCCltaXdobylyKXBpaelw6WvtNi/9KTKpMmkrMTJssOktaTspMakpKTepLmhoworCisgIGptZW1tZ3IuYyAgICAgSlBFRyBsaWJyYXJ5IM3RpeGl4qXqpd6lzaG8pbil4yAopeGlpKXzKQorICAgICAgICAgICAgICAgIFNJTUQgsr2ky8i8pKShojE2pdClpKXIpaKlyaXspbm2rbOmpMu556TDpL+l4aXiperOzrDopPIKKyAgICAgICAgICAgICAgICC+76TLMTal0KWkpcjDsbDMpMezzsrdpLmk66TopKaky8rRubmkt6TGpKKk6qTepLmhoworCisgIGNqcGVnLmMgICAgICAgSlBFRyCwtb3MzdEgpbOl3qXzpcml6aWkpfOhpqXmobylxqWjpeqlxqWjCisgIGRqcGVnLmMgICAgICAgSlBFRyDFuLOrzdEgpbOl3qXzpcml6aWkpfOhpqXmobylxqWjpeqlxqWjCisgICAgICAgICAgICAgICAgLXYgpaql16W3peel86THpM4gU0lNRCC02M+ivvDK86TOyb28qKTkoaItbm9zaW1kIKTKpMmkzgorICAgICAgICAgICAgICAgIKWqpdelt6XnpfOluaWkpcOlwaSsxMmyw6S1pOykxqSkpN6kuaGjCisKKyAgcmRibXAuYyAgICAgICBCTVAgpdWloaWkpevGyaTfuf6k36Xipbil5aG8pesKKyAgd3JibXAuYyAgICAgICBCTVAgpdWloaWkpeu98aStvdCkt6Xipbil5aG8pesKKyAgICAgICAgICAgICAgICBTSU1EILK9pMikz7TYt7ikyqSvoaKw7Mn0pM6ls6G8pcmk8rj6zqiyvaS1pLukxqSipOqk3qS5oaMKKworICByZGdpZi5jICAgICAgIEdJRiCl1aWhpaSl68bJpN+5/qTfpeKluKXlobyl6yh2ZXJzaW9uIDZhKQorICB3cmdpZi5jICAgICAgIEdJRiCl1aWhpaSl673xpK290KS3peKluKXlobyl6yh2ZXJzaW9uIDZhKQorICAgICAgICAgICAgICAgIFVuaXN5cyCkziBHSUYgKExaVykgxsO19ry6uPqky8i8pKShonZlcnNpb24gNmEgpMeltaXdobylyAorICAgICAgICAgICAgICAgIKS1pOykxqSkpL8gY2pwZWcvZGpwZWcgpMekziBHSUYgpM7G/r3Qzs+k8sn8s+iktaS7pN6kt6S/oaMKKyAgICAgICAgICAgICAgICCks6TOIEdJRiCl4qW4peWhvKXrpM8gdmVyc2lvbiA2YSCkzqTipM6k8s6uzdGkt6TGpKSk3qS5oaMKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIDZiIKTOIEdJRiCl4qW4peWhvKXrpM8gdW51c2VkLyCky6SipOqk3qS5oaMKKworCiuio8qjv/Sl1aWhpaSl68LQsf7Ix6TOIGNqcGVnL2RqcGVnIChhbHR1aS8pCisKKyAgYWx0dWkvIKTLpKKk66XVpaGlpKXrpM+hori1obkganBlZ2FsdHVpLnY2Yi50YXIuZ3ogpMikpKSmpdWloaWkpevMvqTHCisgIMrMpMvH28nbpLWk7KTGpKSkv6TipM6kx6S5oaOks6TOIFNJTUQgyMekx6TPoaKjsaXVpaGlpKXryMcgY2pwZWcvZGpwZWcKKyAgpMjGsc3NpM4gU0lNRCDC0LH+sr2ky7TYpLmk672kwLWkyKGiQm9ybGFuZCBDKysgLyBNaWNyb3NvZnQgVkMrKyCkyworICCkqqSkpMal76G8peulyaWrobylycW4s6u96M39pPLNrbj6sr2kuaTrpL+k4aTOpbOhvKXJpPK98aStssOkqKS/pOKkzqTHpLmhoworCisgIGFsdHVpL2NqcGVnLmMgICAgICAgICDKo7/0pdWloaWkpevC0LH+yMekziBjanBlZworICBhbHR1aS9kanBlZy5jICAgICAgICAgyqO/9KXVpaGlpKXrwtCx/sjHpM4gZGpwZWcKKyAgYWx0dWkvUkVBRE1FLmFsdCAgICAgIGpwZWdhbHR1aS52NmIudGFyLmd6IKTLxrG6raS1pOykxqSkpL8gUkVBRE1FCisgIGFsdHVpL3VzYWdlLmFsdCAgICAgICDKo7/0pdWloaWkpevC0LH+yMcgY2pwZWcvZGpwZWcgpM6l3qXLpeWloqXrKLq5yqwpCisKKworoqNTSU1EIMjHpMekz7vIpO+k7KTKpKSl1aWhpaSl67eyICh1bnVzZWQvKQorCisgIHVudXNlZC8gpMukoqTrpdWloaWkpeukz6Gipaql6qW4pcql68jHpM4gSUpHIEpQRUcgc29mdHdhcmUgpMu8/c+/pLWk7KTGCisgIKSkpL+krKGipLOkziBTSU1EIMjHpMekz7vIpO+k7KTKpKQvu8ikqKTKpKSl1aWhpaSl67eypKy8/aThpOmk7KTGpKSk3qS5oaMKKworICB1bnVzZWQvaj9kY3Q/Pz8uYyAgICAgpaql6qW4pcql66TOo8O4wLjsyMcgRENUILTYv/QKKyAgdW51c2VkL2ptZW0qLiogICAgICAgIKW3pbmlxqXgsM3CuKXhpeKl6qXepc2hvKW4peMoZm9yIE1TLURPUy9NYWNpbnRvc2gpCisgIHVudXNlZC8/P2dpZi5jICAgICAgICB2ZXJzaW9uIDZiIKTOIEdJRiCl4qW4peWhvKXrCisgIHVudXNlZC9qY29uZmlnLiogICAgICClqqXqpbilyqXryMeky8nVwrCkziBqY29uZmlnLioKKyAgdW51c2VkL21hayouKiAgICAgICAgIKWqpeqluKXKpevIx6TLydXCsKTOIE1ha2VmaWxlLioKKworCisKK1tFT0ZdCmRpZmYgLS1naXQgYS9zaW1kX2luc3RhbGwuamEudHh0IGIvc2ltZF9pbnN0YWxsLmphLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjhmODI1Ci0tLSAvZGV2L251bGwKKysrIGIvc2ltZF9pbnN0YWxsLmphLnR4dApAQCAtMCwwICsxLDQzNiBAQAorSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIEpQRUcgc29mdHdhcmUgcmVsZWFzZSA2YgorICB3aXRoIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSB2ZXJzaW9uIDEuMDIKKyAgICA9PSBJTlNUQUxMID09CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiuio6SzpM6l1aWhpaSl66TPCisKKyAgpLOkzqXVpaGlpKXrpMekz6GiU0lNRCDIxyBsaWJqcGVnIKXppaSl1qXppeqkzqWzpfOl0aWkpeukzrvFyv2k8rLywOIKKyAgpLek3qS5oaO+obzqpMqkrKTpoaKks6SzpMekz6WqpeqluKXKpevIx6TOIGxpYmpwZWcgpemlpKXWpeml6qTOsLekpMr9CisgICils6XzpdGlpKXrpM67xcr9ob+l16XtpbCl6aXgpM7D5qTHpM67yKSkyv0ppPKkoqTrxPjF2b+0xsCkxqSkpOukyKSkpKYKKyAgv82k8sLQvt2ky6S1pLukxqSkpL+kwKStpN6kuaGjpaql6qW4pcql68jHpM67yM3Ry6Gky6TEpKSkxqTPoaIKKyAgaW5zdGFsbC5kb2MgKLHRyrgpIKTyu7K+yKS3pMakr6TApLWkpKGjCisKKyAgICCio6Wipbul86XWpekgTkFTTSCkzsb+vOqhv6WkpfOluaXIobyl6worICAgIKKjpbOl86XRpaSl66TOu8XK/QorICAgICAgofwgTWljcm9zb2Z0IFZpc3VhbCBDKysgNi4wILDKud+kzsX9ueezq8ivtMS2rShEZXZTdHVkaW8ppM6+7LnnCisgICAgICCh/CBqY29uZmlnLmggpMggTWFrZWZpbGUgpPLBqsLypLekxqWzpfOl0aWkpeukuaTrCisgICAgICCh/CBVTklYILTEtq2kxyBjb25maWd1cmUgpbmlr6XqpdelyKTyu8ikpgorICAgIKKjyqO/9KXVpaGlpKXrwtCx/sjHpM4gY2pwZWcvZGpwZWcgKGFsdHVpLykKKyAgICCio6WzobylyaW1paSluqTyuLqk6aS5pMukzworICAgIKKjxsPE6qTOIFNJTUQgzL/O4aTyu8jN0aS3pMqkpKTopKaky6S5pOuky6TPCisKKworoqOloqW7pfOl1qXpIE5BU00gpM7G/rzqob+lpKXzpbmlyKG8pesKKworICCks6TOIHg4NiBTSU1EIMjHIGxpYmpwZWcgpemlpKXWpeml6qTOIFNJTUQgs8jEpcn0yqykz6GipL2kzqTbpMik86TJpKwKKyAgeDg2IKTOpaKlu6Xzpdal6rjAuOykx73xpKuk7KTGpKSk3qS5oaOks6TOpaKlu6Xzpdal6rjAuOylvaG8pbmls6G8pcmk8gorICCloqW7pfOl1qXrpLmk66TLpM+hok5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSCkyKSkpKaloqW7pfOl1qXppKzJrM3XpMekuaGjCisgIE1pY3Jvc29mdCCkziBNQVNNIKTkpL2kzrjftLmloqW7pfOl1qXppMekz7C3pKik3qS7pPOkzqTHw+2w1aS3pMakr6TApLWkpKGjCisgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBOQVNNIChOZXR3aWRlIEFzc2VtYmxlcikgpM+horj4vLCltaWkpcggaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4IKSrpOmlwKWmpfMKKyAgpe2hvKXJpMekraTepLmho1Zlci4wLjk4LjI1ILDKud+kzsjms9PFqr+3pLekpKXQobyluKXnpfOkzqTipM6krMmszdekx6S5oaMKKyAguL27/sXAKDIwMDYvMDIppMekzrrHv7fIx6TPIFZlci4wLjk4LjM5IKTHpLmhoworCisgIKTKpKqhong4NiDIx6TOIERhcndpbiCk5CBNYWMgT1MgWCCkyqTJpMe7yM3RpLmk677sueekz6GiuL27/sXApMekz6TepMAKKyAgwLW8sKTLpeql6qG8pbmktaTspMakpKTKpKQgVmVyLjAuOTguNDAgsMq536TOpdChvKW4peel86TOpOKkzqSsyazN16THpLmhoworICC4vbv+xcCkx6TPoaJWZXIuMC45OC40MCCkz77lta2kzrj4vLCltaWkpcikziBDVlMgpeql3aW4pcil6qSrpOmlvaG8pbkKKyAgpbOhvKXJpPKlwKWmpfOl7aG8pcmkt6TGpbOl86XRpaSl66G/paSl86W5pcihvKXrpLmk68mszdekrKSipOqk3qS5oaMKKworICBXaW5kb3dzILfPpM6+7LnnpM+hom5hc20tMC5YWC5ZWS13aW4zMi56aXAgKFhYLllZIKTLpM+l0KG8pbil56XzyNa55qSsxv6k6ykKKyAgpMikpKSmzL7BsKTOpdWloaWkpeuk8qXApaal86XtobylyaS3pMahoqS9pOyky7TepN6k7KTrIG5hc213LmV4ZSCk8gorICCjw6WzpfOl0aWkpemkzrzCudSl1aWhpaSl67eypKylpKXzpbmlyKG8peuktaTspMakpKTrvuy96qTLpbOl1KG8pLek3qS5oaMKKworICCzxrzvIFBDLVVOSVggpM6+7LnnpM+hok9TIKTOx9vJ27i1pMukxrDcv6K60aTfpdGlw6WxobyluKSsxPO2oaS1pOykxqSkpOsKKyAgvuy556SspKKk6qTepLmkzqTHoaKk3qS6use96aTLpL2kwaTppPKzzsenpLekxqTfpMakr6TApLWkpKGjpL2k7KSspMqkpAorICC+7LnnpM+hor7lta24+LywpbWlpKXIpKuk6aW9obyluaWzobylyShuYXNtLTAuWFguWVkudGFyLmd6KaTypcClpqXzpe2hvKXJCisgIKS3pMals6XzpdGlpKXrob+lpKXzpbmlyKG8peukt6TGpK+kwKS1pKSho2xpbnV4IKTOvuy556THIHJwbSCl0aXDpbGhvKW4pPIKKyAgsLekqKTrpbeluaXGpeCkzr7sueekz6GivuW1rbj4vLCltaWkpciky6TGIHJwbSCl0KWkpcql6qXRpcOlsaG8pbik4sb+vOoKKyAgpMekraTepLmhoworCisgIMPtsNXFwKTIpLekxqGiWUFTTSAoaHR0cDovL3d3dy50b3J0YWxsLm5ldC9wcm9qZWN0cy95YXNtLykgpM+7yKTvpMqkpKTHCisgIKSvpMCktaSkoaNZQVNNIKTPIE5BU00guN+0uaTy6/Ckw6TGpKSk3qS5pKyhori9ut+kzqXQobyluKXnpfMoMC40LjAppMekzworICCk3qTAuN+0ucXZpKzE46SkvuWky6XQpbCkrKSipOsopaKlyaXspbm317u7pKyk3qTDpL+kr6XHpb+l6aXhpMqls6G8pcmk8gorICDAuMCupLekxqSkpOsppL+k4aGixfbK/aTOpcaluaXIpMekzyBZQVNNIKTHpaKlu6Xzpdal66S3pL+ls6G8pcmkz6TepMOkv6SvCisgIMawpK2k3qS7pPOkx6S3pL+ho6HKw+2hp6SzpM4geDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgIKTHpM+hoqS/pMikqCBZQVNNIKTyzdGkpKTGpOIgQU1ENjQgpM4gNjRiaXQgwtCx/qTLpM+kyqTqpN6ku6TzoaOhyworCisKK6KjpbOl86XRpaSl66TOu8XK/QorCisgIKTbpMik86TJpM7J9MqspMelqqXqpbilyqXryMekyMrRpO+k6qSipOqk3qS7pPOkzqTHoaKwyrK8pM7A4szApMekz6GiCisgIKSzpM4gU0lNRCCzyMSlyMeky8bDza2kzsPtsNXFwKTyw+a/tKTLvdKk2aTepLmhoworCisKKyAgofwgTWljcm9zb2Z0IFZpc3VhbCBDKysgNi4wILDKud+kzsX9ueezq8ivtMS2rShEZXZTdHVkaW8ppM6+7LnnCisKKyAgICCks6TOx9vJ26W7pcOlyKTLpM+hok1pY3Jvc29mdCBWaXN1YWwgQysrIDYuMCDN0aTOpdel7aW4paelr6XIpdWloaWkpesKKyAgICCkrMnVwrCkt6TGpKSk3qS5oaNWNi4wILDKud+kziBWQysrIKTOvuy556TPoaJWQysrIDYuMCCkzqXVpaGlpKXrpPIKKyAgICDK0bS5KKWkpfOl3aG8pcgppLekxrvIpMOkxqSvpMCktaSkoaNNaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDA1IEV4cHJlc3MKKyAgICBFZGl0aW9uIKTLpMahoqWkpfOl3aG8pcihv6WzpfOl0aWkpeukx6StpOuks6TIpPKzzsenpLekxqSkpN6kuaGjCisKKyAgICDK/cuhpM+hoqTepLogdmM2cHJvaiCl1aWppeulwKTOw+aky6SipOul1aWhpaSl66TyoaKlvaG8pbml1aWhpaSl67eyCisgICAgKCouYykgpM6koqTrpdWlqaXrpcCky6S5pNmkxrDcxrCkt6TepLmho6S9pLekxiBsaWJqcGVnLmRzdyCk8rOrpKSkxgorICAgICik4qS3pK+kz6WkpfOl3aG8pcikt6TGKaGipeGly6XlobykziCl06XrpcmiqqXQpcOlwaXTpeulySCkx6S5pNmkxqTLCisgICAgpcGlp6XDpa+k8sb+pOykxqXTpeulyaS5pOyk0KPPo8ukx6S5oaMKKworICAgIKXvobylr6W5pdqhvKW5IGxpYmpwZWcuZHN3IKTLpM+horDKsrykzqXXpe2luKWnpa+lyKSsvP2k4aTppOykxqSkpN6kuaGjCisKKyAgICCioSBtYWtlY2ZnLmRzcAorCisgICAgICCks6TOpdel7aW4paelr6XIpM+hom1ha2VjZmcuYyCk8qWzpfOl0aWkpeuhv6XqpfOlr6S3pMahoqWrpbmlv6XgCisgICAgICCl06XrpcmluaXGpcOl16THpL2k7ChtYWtlY2ZnLmV4ZSmk8rzCudSkt6GibGlianBlZy5kc3AgpM6l06XrpcmkyworICAgICAgyazN16TKwN/E6qXVpaGlpKXrIGpzaW1kY2ZnLmluYyCk8rrupOvGr6StpPKkt6TGpKSk3qS5oaMKKworICAgICAgpLOk7KTPoaJsaWJqcGVnLmRzcCCkrKWzpfOl0aWkpeuktaTspOvBsKTLyaykuqWzpfOl0aWkpesovMK51CkKKyAgICAgIKS1pOykyqSxpOyk0KTKpOqk3qS7pPOhoworCisgICAgoqEgbGlianBlZy5kc3AKKworICAgICAgSlBFRyCl6aWkpdal6aXqIGxpYmpwZWcubGliIKTypdOl66XJpLek3qS5oaNtYWtlY2ZnLmRzcCCkrL3Qzs+kuaTrCisgICAgICDA38TqpdWloaWkpesganNpbWRjZmcuaW5jIKSsyazN16THpLmhoworCisgICAgoqEgY2pwZWcuZHNwLCBkanBlZy5kc3AsIGpwZWd0cmFuLmRzcCwgcmRqcGdjb20uZHNwLCB3cmpwZ2NvbS5kc3AKKworICAgICAgSUpHIEpQRUcgbGlicmFyeSCky8nVwrCkt6TGpKSk66W1pfOl16XroaaloqXXpeqlsaG8pbel56XzpMekuaGjCisgICAgICBjanBlZyCkzyBKUEVHILC1vcyk8qGiZGpwZWcgpM8gSlBFRyDFuLOrpPKhompwZWd0cmFuIKTPIEpQRUcKKyAgICAgIKXVpaGlpKXrpM7K0bS5pPKkt6TepLmho3JkanBnY29tIKTIIHdyanBnY29tIKTPoaJKUEVHpdWloaWkpesKKyAgICAgIMPmpM6lxqWtpbmlyKWzpeGl86XIyrik8sHguu6kt6TepLmhoworCisgICAgoqEgYXBwdGVzdC5kc3AKKworICAgICAgpMekraSipKykw6S/IGNqcGVnLCBkanBlZywganBlZ3RyYW4gpMvC0KS3pMa0ysOxpMrGsLrupcaluaXIpPIKKyAgICAgIKS3pN6kuShtYWtlIHRlc3QgpMjGscX5KaGjpN6kuqGipLOk7KTppM6lvaXVpcikx7zCut2ky7Lowfyl1aWhpaSl6worICAgICAgpPLK0bS5pLWku6GipL2kzr3Qzs+k8iBmYy5leGUgpMfI5rPTpLek3qS5oaMiRkM6IMHqsOPFwKTPuKG90AorICAgICAgpLWk7KTepLuk86THpLekvyIgpMikpKSmpeGlw6W7obyluKSso7ay88m9vKiktaTspOyk0KGipdel7aWwpeml4KTPCisgICAgICDAtaS3pK/GsKSkpMakpKTepLmhoworCisgICAgSlBFRyCl6aWkpdal6aXqIGxpYmpwZWcubGliIKTywr6kzqW9pdWlyKTLpeql86WvpLmk66S/pOGkyyBsaWJqcGVnLmRzcAorICAgIKTywr6kzqXvobylr6W5pdqhvKW5ob+lvaXqpeWhvKW3peel86TLtN6k4aTrvuy556TPoaJtYWtlY2ZnLmRzcCCk4gorICAgIMmspLrGsaS4pe+hvKWvpbml2qG8pbmhv6W9peql5aG8pbel56XzpMu03qThoaK+76TLIG1ha2VjZmcuZHNwIKSsCisgICAgbGlianBlZy5kc3AgpOik6qTiwOiky6XTpeulyaS1pOyk66TopKaky6GisM3CuLTYt7ik8sDfxOqkt6TGpK+kwKS1pKShoworICAgIKSzpOykz6GiwOiky73SpNmkv6TopKaky6GibGlianBlZy5kc3AgpM8gbWFrZWNmZy5kc3AgpKy90M7PpLmk68DfxOoKKyAgICCl1aWhpaSl6yBqc2ltZGNmZy5pbmMgpPLJrM3XpMikt6TGpKSk66S/pOGkx6S5oaMKKworICAgIMDfxOrLoaTPoaIoVkMrKyA2LjCkzr7suecpIKXhpcul5aG8pM4gpdel7aW4paelr6XIIKKqILDNwri02Le4IKTHCisgICAgbGlianBlZyCk8sGqwvKkt6GisrykzrDszfekzsPmpM4gbWFrZWNmZyCky6XBpaelw6WvpPLG/qTspN6kuaGjCisKKworICCh/CBqY29uZmlnLmggpMggTWFrZWZpbGUgpPLBqsLypLekxqWzpfOl0aWkpeukuaTrCisKKyAgICBXaW5kb3dzILfPpM6ls6XzpdGlpKXppM6+7LnnpMehoqWzpd6l86XJpemlpKXzpKuk6aWzpfOl0aWkpeukuaTrvuy55worICAgIKTPoaKks6TOyv3LoaTypMikw6TGpK+kwKS1pKShoworCisgICAgyv3LoaTPoaLJ1cKwpM4gamNvbmZpZy4qIKTIIE1ha2VmaWxlLiogpM7D5qSrpOnFrMDapMqk4qTOpPKkvaTspL6k7AorICAgILDspMSkuqTEwaqk06GipL2k7KS+pOwgamNvbmZpZy5oIKTIIE1ha2VmaWxlIKTLzL7BsKTyytGkqKTepLmhoworICAgIKS9pLekxqGipb2hvKW5pdWloaWkpeukzqSipOulx6Wjpeylr6XIpeoopdWlqaXrpcAppPKlq6XspfOlyKXHpaOl7AorICAgIKWvpcil6qTLpLekxqGipbOl3qXzpcml6aWkpfOkxyBtYWtlIChWQysrIKTOvuy556TPIG5tYWtlKaTIpb+lpKXXCisgICAgpLmk7KTQo8+jy6THpLmho7jlpM+8q8awxaqky6GibGlianBlZyCl6aWkpdal6aXqpMihoqW1pfOl16XrpaKl16XqCisgICAgpbGhvKW3peel8yhjanBlZyCk5CBkanBlZyCkyqTJKaSspbOl86XRpaSl66S1pOyk3qS5oaMKKworICAgIMnVwrCkt6TGpKSk6yBqY29uZmlnLiogpMggTWFrZWZpbGUuKiCkz6GisMqyvKTOvejN/bfPpMvC0LH+pLekxqSkpN6kuaGjCisgICAgpMqkqqGipaql6qW4pcql68jHpMvJ1cKwpLekxqSkpOsgamNvbmZpZy4qIKTIIE1ha2VmaWxlLiogpM+hoqSzpM4KKyAgICBTSU1EIMLQsf7Ix6THpM+7yM3RpMekraTepLuk8yilvaG8pbml1aWhpaSl66TOub3ArqSsytGk76TDpMakpKTrpL+k4SmhoworCisgICAgoaYgamNvbmZpZy5kaiAgJiBtYWtlZmlsZS5kaiAgLS0gREpHUFAgdjIuMCBvciBsYXRlcgorICAgIKGmIGpjb25maWcuYmM1ICYgbWFrZWZpbGUuYmM1IC0tIEJvcmxhbmQgQysrIENvbXBpbGVyIDUuNSAod2luMzIpCisgICAgoaYgamNvbmZpZy5tZ3cgJiBtYWtlZmlsZS5tZ3csIG1ha2VmaWxlLm1nd2RsbCAtLSBNaW5HVworICAgIKGmIGpjb25maWcudmMgICYgbWFrZWZpbGUudmMgLCBtYWtlZmlsZS52Y2RsbCAgLS0gVkMrKyA2LjAgb3IgbGF0ZXIKKyAgICChpiBqY29uZmlnLmxpbnV4ICYgbWFrZWZpbGUubGludXggLS0gbGludXgKKworICAgIKSzpOyk6bDKs7CkzqWzpfOl0aWkpemky8LQsf6ktaS7pOu+7LnnpM+homluc3RhbGwuZG9jIKTLvfGkpKTGpKKk6worICAgIKTopKaky6GipN6kuiBja2NvbmZpZy5jIKTypbOl86XRpaSl66G/vMK51KS3pMYgamNvbmZpZy5oIKTywLjArqS3oaIKKyAgICBtYWtlZmlsZS51bml4IKTipLekr6TPIG1ha2VmaWxlLmFuc2kgpPK86rrutsikx8rUvbikt6TGIE1ha2VmaWxlIKTyCisgICAguu7ArqS3pMakr6TApLWkpKGjCisKKyAgICCwyrK8oaKzxqWzpfOl0aWkpemky7jHza2kzsPtsNXFwKTyvdKk2aTepLmhoworCisgICAgoqEgamNvbmZpZy5kaiAgJiBtYWtlZmlsZS5kaiAgLS0gREpHUFAgdjIuMCBvciBsYXRlci4KKworICAgICAgssTHvaTKuMKk6r+3pLekpKXQobyluKXnpfOk8rvIzdGkt6TGpK+kwKS1pKSho0RKR1BQIDIuMDMgKyBnY2MgMy40LjQKKyAgICAgICsgYmludXRpbHMgMi4xNi4xIKTIpKSkpsHIpN+556TvpLukx8awuu6k8rPOx6ekt6TGpKSk3qS5oaMKKworICAgICAgbWFrZWZpbGUuZGogpMukz6GiZ2NjIDMuNC54ILj+pLGkzqWzpfOl0aWkpeulqqXXpbel56XzpKy98aSrpOykxgorICAgICAgpKSk3qS5pM6kx6GiZ2NjIDMuNC54ILDKs7Ckx6SmpN6kr6WzpfOl0aWkpeukx6StpMqkpL7sueekz6GixazF9qTLCisgICAgICC98aStxL6kt6TGu8ikw6TGpK+kwKS1pKShoworCisgICAgoqEgamNvbmZpZy5iYzUgJiBtYWtlZmlsZS5iYzUgLS0gQm9ybGFuZCBDKysgQ29tcGlsZXIgNS41ICh3aW4zMikKKworICAgICAgsr+kzszkwuqk4qTKpK+ls6XzpdGlpKXrpM+kx6StpOukz6S6pMekuaSsoaKks6TOIEJDQyA1LjUgpM6+7LnnpM+hogorICAgICAgpNukyKTzpMmkzqWxobyluaTHIFNTRS9TU0UyIKSsxrC67qS3pN6ku6TzoaPN/c2zpM+hokJDQyA1LjUgpMvJ1cKwpM4KKyAgICAgIKXqpfOlqyhpbGluazMyLmV4ZSmkrLjFpK+holNTRcTqv/Sk8jE2pdClpKXItq2zpqWipcml7KW5pMvH28PWpLmk6worICAgICAgpLOkyKSspMekraTKpKSkv6ThpMekuaGjCisKKyAgICAgIKS9pM6kv6ThoaJCQ0MgNS41IKTyu8ikpr7sueekzyBTU0UvU1NFMiCkzqW1pd2hvKXIpPK67738KLjlvdIppLekxgorICAgICAgpbOl86XRpaSl66S5pOuks6TIpPKkqrSrpOGkpKS/pLek3qS5oaMKKworICAgIKKhIGpjb25maWcubWd3ICYgbWFrZWZpbGUubWd3LCBtYWtlZmlsZS5tZ3dkbGwgLS0gTWluR1cKKworICAgICAgssTHvaTKuMKk6r+3pLekpKXQobyluKXnpfOk8rvIzdGkt6TGpK+kwKS1pKSho2djYyAzLjQuNCArIGJpbnV0aWxzCisgICAgICAyLjE2LjkxIKTIpKSkpsHIpN+556TvpLukx8awuu6k8rPOx6ekt6TGpKSk3qS5oaMKKworICAgICAgpN6kv6GiR05VIG1ha2UgpKylpKXzpbmlyKG8peuktaTspMakpKTrpLOkyKTiyazN16THpLmho01pbkdXIKTOvuy556GiCisgICAgICAobWFrZS5leGUgpMekz6TKpK8pIG1pbmd3MzItbWFrZS5leGUgpMikpKSmzL7BsKTHpaSl86W5pcihvKXrpLWk7AorICAgICAgpN6kuaTOpMehom1ha2UgpMekz6TKpK8gbWluZ3czMi1tYWtlIKTIpb+lpKXXpLmk68mszdekrKSipOqk3qS5oaMKKworICAgICAgpLOk7KTppM4gbWFrZWZpbGUgpMukz6GiZ2NjIDMuNC54ILj+pLGkzqWzpfOl0aWkpeulqqXXpbel56XzpKy98aSrCisgICAgICCk7KTGpKSk3qS5pM6kx6GiZ2NjIDMuNC54ILDKs7Ckx6SmpN6kr6WzpfOl0aWkpeukx6StpMqkpL7sueekz6GiCisgICAgICDFrMX2pMu98aStxL6kt6TGu8ikw6TGpK+kwKS1pKShoworCisgICAgICBtYWtlZmlsZS5tZ3cgpM+homxpYmpwZWcgpemlpKXWpeml6qTywMXFqqXppaSl1qXppeoobGlianBlZy5hKaTLCisgICAgICCls6XzpdGlpKXrpLekv77lpMehoqSzpM4gbGlianBlZy5hIKTypeql86WvpLekvyBjanBlZywgZGpwZWcsCisgICAgICBqcGVndHJhbiCk8rruwK6kt6TepLmho21ha2VmaWxlLm1nd2RsbCCkz6GibGlianBlZyCl6aWkpdal6aXqpPIKKyAgICAgIERMTChqcGVnNjIuZGxsKaTLpbOl86XRpaSl66S3pL++5aTHoaKks6TOIGpwZWc2Mi5kbGwgpPKl6qXzpa+kt6S/CisgICAgICBjanBlZywgZGpwZWcsIGpwZWd0cmFuIKTyuu7ArqS3pN6kuaGjCisKKyAgICCioSBqY29uZmlnLnZjICAmIG1ha2VmaWxlLnZjICwgbWFrZWZpbGUudmNkbGwgIC0tIFZDKysgNi4wIG9yIGxhdGVyCisKKyAgICAgIFZDKysgNi4wILDKud+kyqTpsr+kzszkwuqk4qTKpK+ls6XzpdGlpKXrpMekraTrpM+kuqTHpLmho6XVpeqhvKTHCisgICAgICC4+LOrpLWk7KTGpKSk6yBNaWNyb3NvZnQgVmlzdWFsIEMrKyBUb29sa2l0IDIwMDMgpMek4qGibm1ha2UuZXhlCisgICAgICCkrKWkpfOluaXIobyl66S1pOykxqSkpOyk0KWzpfOl0aWkpeukx6StpN6kuaGjCisKKyAgICAgIG1ha2VmaWxlLnZjIKTPoaJsaWJqcGVnIKXppaSl1qXppeqk8sDFxaql6aWkpdal6aXqKGxpYmpwZWcubGliKaTLCisgICAgICCls6XzpdGlpKXrpLekv77lpMehoqSzpM4gbGlianBlZy5saWIgpPKl6qXzpa+kt6S/IGNqcGVnLCBkanBlZywKKyAgICAgIGpwZWd0cmFuIKTyuu7ArqS3pN6kuaGjbWFrZWZpbGUudmNkbGwgpM+homxpYmpwZWcgpemlpKXWpeml6qTyCisgICAgICBETEwoanBlZzYyLmRsbCmky6WzpfOl0aWkpeukt6S/vuWkx6GipLOkziBqcGVnNjIuZGxsIKTypeql86WvpLekvworICAgICAgY2pwZWcsIGRqcGVnLCBqcGVndHJhbiCk8rruwK6kt6TepLmhoworCisgICAgoqEgamNvbmZpZy5saW51eCAmIG1ha2VmaWxlLmxpbnV4IC0tIGxpbnV4CisKKyAgICAgILPGvO+kziBsaW51eCCky8LQsf6kt6TepLmkrKGibGludXggpM6+7LnnpM8gY29uZmlndXJlIKW5pa+l6qXXpcik8gorICAgICAgu8ikpqSzpMik8ravpK+kqrSrpOGkpKS/pLek3qS5oaMKKworCisgIKH8IFVOSVggtMS2raTHIGNvbmZpZ3VyZSCluaWvpeql16XIpPK7yKSmCisKKyAgICCzxrzvpM4gUEMtVU5JWCCkzr7sueekyqTJoaKlt6WnpeuhpqW5pa+l6qXXpcik8sH2pOmku6TrpLOkyKTOpMekraTrCisgICAgtMS2raTOvuy556TPoaJjb25maWd1cmUgpbmlr6XqpdelyKTyu8ikpqTItMrDsaTLpbOl86XRpaSl66THpK2k3qS5oaMKKworICAgICAgJCAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtc3RhdGljCisgICAgICAkIG1ha2UKKyAgICAgICQgbWFrZSB0ZXN0ICAgICAgKKKrxrC67qXGpbmlyKGoyazN16TLsf6kuKTGKQorICAgICAgIyBtYWtlIGluc3RhbGwKKworICAgIKSzpM7K/cuhpMekz6GisMqyvKTOpdel6aXDpcil1aWpobyl4KTHpbOl86XRpaSl66THpK2k66SzpMik8rPOx6ekt6TGCisgICAgpKSk3qS5oaOks6TssMqzsKTOIFVOSVggt88gT1MgpMek4qWzpfOl0aWkpeukz7LEx72kwKTIu9ek76TspN6kuaSsoaIKKyAgICC847SzpM686sS+pLekrMmszdeky6TKpOu+7LnnpOKkoqTrpKukyLvXpKSk3qS5oaMKKworICAgIKGmVmluZSBMaW51eCAyLjZyNCAoZ2NjIDIuOTUuMykgpKqk6KTTIFZpbmUgTGludXggMy4yIChnY2MgMy40LjQpCisgICAgoaZGZWRvcmEgY29yZSAzIChnY2MgMy40LjIpIKSqpOik0yBGZWRvcmEgY29yZSA0IChnY2MgNC4wLjApCisgICAgoaZGcmVlQlNEIDUuNCAoZ2NjIDMuNC4yKSCkqqTopNMgRnJlZUJTRCA2LjAgKGdjYyAzLjQuNCkKKyAgICChpk5ldEJTRCAyLjAgKGdjYyAzLjMuMykgpKqk6KTTIE5ldEJTRCAzLjAgKGdjYyAzLjMuMykKKyAgICChplNvbGFyaXMgMTAgMS8wNiBmb3IgeDY0L3g4NiAoaTM4Ni1wYy1zb2xhcmlzMi4xMCkKKyAgICChpkRhcndpbiA4LjAuMSBmb3IgeDg2IChpMzg2LWFwcGxlLWRhcndpbjguMC4xOyBnY2MgMy4zKQorICAgIKGmTWluR1cgJiBNU1lTIChnY2MgMy40LjQpCisgICAgoaZjeWd3aW4gKGdjYyAzLjQuNCkKKworICAgIMaxuq2kziBjb25maWd1cmUgpbmlr6XqpdelyKTPIEdOVSBhdXRvY29uZiCkx8C4wK6ktaTspL+k4qTOpMekuaGjCisgICAgpLOkziBjb25maWd1cmUgpbmlr6XqpdelyKTPoaKw7MjMxaqkyiBjb25maWd1cmUgpbmlr6XqpdelyKSsx6e8saS5pOsKKyAgICCluaWkpcOlwaWqpdelt6XnpfOkzsK+pMuhorDKsrykzqW5paSlw6XBpPLHp7yxpLek3qS5oaMKKworICAgIKH7IC0tZW5hYmxlLXNoYXJlZCAvIC0tZW5hYmxlLXN0YXRpYworCisgICAgICAtLWVuYWJsZS1zaGFyZWQgpPK72MTqpLmk66TIoaJHTlUgbGlidG9vbCCk8rvIpMOkxramza2l6aWkpdal6aXqpPIKKyAgICAgILruwK6kt6TepLmhoy0tZW5hYmxlLXN0YXRpYyCk8rvYxOqkuaTrpMihosaxpLikryBHTlUgbGlidG9vbCCk8gorICAgICAgu8ikw6TGwMXFqqXppaSl1qXppeqk8rruwK6kt6TepLmho86+yv2k8rvYxOqkuaTrpMihoramza2l6aWkpdal6aXqCisgICAgICCkyMDFxaql6aWkpdal6aXqpM7Ovsr9pPK67sCupLek3qS5oaO11aTLpLOkzs6+yv2kyKTiu9jE6qS3pMqkpKTIoaIKKyAgICAgIEdOVSBsaWJ0b29sIKTyu8ik76S6pMvAxcWqpemlpKXWpeml6qTOpN+k8rruwK6kt6TepLmhoworCisgICAgICClt6W5pcal4KTLpaSl86W5pcihvKXrpLmk66XppaSl1qXppeqk8rruwK6kuaTrvuy556TPzr7K/aTyu9jE6qS5pOsKKyAgICAgIMmszdekrKSipOukx6S3pOekpqGjCisKKyAgICCh+yAtLWRpc2FibGUtbW14IC8gLS1kaXNhYmxlLTNkbm93IC8gLS1kaXNhYmxlLXNzZSAvIC0tZGlzYWJsZS1zc2UyCisKKyAgICAgIMbDxOqkziBTSU1EIMy/zuGlu6XDpcikzqW1pd2hvKXIKKWzobylySmk8rrvvfykt6TGpbOl86XRpaSl66S3pN6kuaGjCisKKyAgICCh+yAtLWVuYWJsZS11Y2hhci1ib29sZWFuCisKKyAgICAgIKW9obyluaWzobylycPmpM4gYm9vbCC3v6TOxOq1waTyIGludCC3v6THpM+kyqSvIHVuc2lnbmVkIGNoYXIgt7+kyworICAgICAgytG5uaS3pN6kuaGjpLOkzqWqpdelt6XnpfOkz8TMvu+kzyjGw6TLyazN16THpMqkpLjCpOopu8jN0aS3pMqkpKTHCisgICAgICCkr6TApLWkpKGjpLOk7KTPoaJNaW5HVyCkyqTJpM4gV2luZG93cyC+5aTOIFVOSVggtMS2raTLpMahomJvb2wgt78KKyAgICAgIKTOxOq1waTyIFdpbmRvd3MgpM69rLS3pMu556TvpLuk66S/pOGky83RsNWktaTspMakpKTrpOKkzqTHpLmhoworCisgICAgsMqyvKGis8al16XppcOlyKXVpamhvKXgpMu4x82tpM7D7bDVxcCk8r3SpNmk3qS5oaMKKworICAgIKKhILPGvO8gbGludXggpcelo6W5pcil6qXTpeWhvKW3peel8worCisgICAgICCk6KTbpMm4xaSkpOKkzqTHpMqkpLjCpOqhor7lta2kzrzqveekx7K/pM7M5MLqpOKkyqSvpbOl86XRpaSl66THpK2k6worICAgICAgpM+kuqTHpLmhoworCisgICAgICC+5bWtpM686r3npMe2ps2tpemlpKXWpeml6qTyuu7ArqS3pL++7LnnoaKkvaTOpdChvKW4peel88jWueakzworICAgICAgNjIuMS4wICil1aWhpaSl68y+oadsaWJqcGVnLnNvLjYyLjEuMCkgpMikyqTqpN6kuaGjpLOk7KTPwbC90qS3pL8KKyAgICAgIKTIpKqk6qGipaql6qW4pcql68jHKKXVpaGlpKXrzL6hp2xpYmpwZWcuc28uNjIuMC4wKaTIpdClpKXKpeql7KXZpesKKyAgICAgIKTHpM6+5bDMuN+0ucCtpKykoqTqpN6kuaTOpMehoqWqpeqluKXKpevIx6TIpL2kzqTepN7D1qSttLmkqKTrpLOkyAorICAgICAgpKykx6StpN6kuaGjCisKKyAgICAgIHJwbSCk8rvIpMOkv6XRpcOlsaG8pbi0yc39pPK6zs3RpLekxqSkpOulx6WjpbmlyKXqpdOl5aG8pbel56XzpMekz6GiCisgICAgICDGsbqtpM4gc3BlYyCl1aWhpaSl6yAobGlianBlZy5zcGVjKSCk4qS0zfjN0aSkpL+kwKSxpN6kuaGjpLOk7KTPoaIKKyAgICAgIFZpbmUgTGludXggMy4yIKSqpOik0yBGZWRvcmEgY29yZSA0IKTHpM7GsLrupPKzzsenpLekxqSkpN6kuaGjCisKKyAgICCioSB4QlNEIKXVpaGl36XqIChGcmVlQlNEL05ldEJTRC9PcGVuQlNEKQorCisgICAgICC6x7bhpM6l0KG8pbil56XzpM4gRnJlZUJTRCCkyCBOZXRCU0QgpMu02KS3pMakz6GipbOl86XRpaSl66THpK2k6worICAgICAgpLOkyKTys87Hp6S3pMakpKTepLmho09wZW5CU0QgpMu02KS3pMak4szkwuqkz6TKpKSkyLvXpKSk3qS5oaMKKyAgICAgIKS/pMChoqWqpdaluKWnpa+lyKXVpamhvKXepcOlyKTLIGEub3V0IKTyu8ikw6S/uMWkpKTipM6ky7TYpLekxqTPoaIKKyAgICAgIKXVpaGlpKXrpdWlqaG8pd6lw6XIpM68787gpOKw7LH+IGNvbmZpZ3VyZSCluaWvpeql16XIpMukxrihvdCkx6StpOsKKyAgICAgIKTopKaky6S3pMakoqTqpN6kuaSsoaLGsLrupM/MpLPOx6ekx6S5oaMKKworICAgICAgRnJlZUJTRCCkzr7sueehor7lta2kzrzqveekx7amza2l6aWkpdal6aXqpPK67sCupLekv77sueehoqS9pM4KKyAgICAgIKXQobyluKXnpfPI1rnmpM8gOSAopdWloaWkpevMvqGnbGlianBlZy5zby45KSCkyKTKpOqk3qS5oaOks6TspM+hogorICAgICAgcG9ydHMgY29sbGVjdGlvbiCkzsPmpMukoqTruPi8sMjHpM6l0KG8pbil56XzyNa55qTLveCkuKS/pOKkzqTHoaIKKyAgICAgICil0KWkpcql6r7lsMy437S5pMqkzqTHKbj4vLDIx6TIpL2kzqTepN7D1qSttLmkqKTrpLOkyKSspMekraTepLmhoworICAgICAgTmV0QlNEL09wZW5CU0QgpM6+7LnnpM6l0KG8pbil56XzyNa55qTPIDYyLjEuMCAopdWloaWkpevMvqGnCisgICAgICBsaWJqcGVnLnNvLjYyLjEuMCkgpMukyqTqpN6kuSil0KWkpcql6r7lsMy437S5KaGjCisKKyAgICCioSBTb2xhcmlzIDEwCisKKyAgICAgILruvNSkzqXGpbmlyKTHpM+hosC1vu+ky6WzpfOl0aWkpeukx6StpMahoramza2l6aWkpdal6aXqpKyl0KWkpcql6gorICAgICAguN+0uaTLpMqk66SzpMik8rPOx6ekt6TGpKSk3qS5KKXVpaGlpKXrzL6hp2xpYmpwZWcuc28uNjIuMS4wKaGjCisgICAgICCkx6S5pKyhoqSzpM4gU0lNRCDIxyBsaWJqcGVnIKXppaSl1qXppeqkzyBBTUQ2NCCky6TPuL27/sXApMekz8LQsf4KKyAgICAgIKS3pMakpKTKpKSkv6ThoaIzMmJpdMjHpM6l6aWkpdal6aXqpLekq7rupOyk3qS7pPOhoworCisgICAgoqEgRGFyd2luIGZvciB4ODYKKworICAgICAguu681KTOpcaluaXIpMekz6GiwLW+76TLpbOl86XRpaSl66THpK2kxqGitqbNraXppaSl1qXppeqkrKXQpaSlyqXqCisgICAgICC437S5pMukyqTrpLOkyKTys87Hp6S3pMakpKTepLkopdWloaWkpevMvqGnbGlianBlZy42Mi4xLjAuZHlsaWIpoaMKKyAgICAgIHg4NiDIxyBNYWMgT1MgWCCkx6TioaKls6XzpdGlpKXrpLWkqKTHpK2k7KTQxrC67qS5pOuk4qTOpMi716TvpOyk3qS5oaMKKworICAgICAguL27/sXApMekz6GipaKlu6Xzpdal6SBuYXNtIKTOIERhcndpbiCk2KTOpbWl3aG8pcikrL29yqykx6TKpKSkv6ThoaIKKyAgICAgIKTkpOSlyKXqpcOlraG8pMqls6G8pcmkxyBEYXJ3aW4gLyBNYWMgT1MgWCCky8LQsf6ktaS7pMakpKTepLmkrKGiCisgICAgICDGsLrupMukz6TepMOkv6SvzOTC6qTKpKSkz6S6pMekuaGjCisKKyAgICCioSBNaW5HVyAmIE1TWVMgKGdjYyAzLjQuNCkKKworICAgICAgTWluR1cgpM6+7LnnpM+hosnVwrCkziBtYWtlZmlsZS5tZ3cgLyBtYWtlZmlsZS5tZ3dkbGwgpPK7yKSmpLOkyKTyCisgICAgICC/5L6ppLek3qS5pKyhok1TWVMgpKylpKXzpbmlyKG8peuktaTspMakpKTspNAgY29uZmlndXJlIKW5pa+l6qXXpcgKKyAgICAgIKTiu8ikqKTepLmho6SzpM6+7LnnpM+homNvbmZpZ3VyZSCluaWvpeql16XIpPLB9qTppLuk67rdpMsKKyAgICAgIC0tZW5hYmxlLXVjaGFyLWJvb2xlYW4gpPLJrKS6u9jE6qS3pMakr6TApLWkpKGjpLOkpqS5pOuks6TIpMehogorICAgICAgwr6kziBXaW5kb3dzILfPpM696M39t88oVkMrK6TKpMkppKy90M7PpLmk66WzobylyaTIpdClpKXKpeq437S5pMsKKyAgICAgIKTKpOqk3qS5oaMKKworICAgIKKhIGN5Z3dpbiAoZ2NjIDMuNC40KQorCisgICAgICCk3qS6w+2w1aS5pNmkrcXApM+homN5Z3dpbiCkzr7sueehomN5Z3dpbiCkq6TpuPi8sKTLpeql6qG8pbmktaTspMYKKyAgICAgIKSkpOsgRExMIChjeWdqcGVnLTYyLmRsbCkgpMikz6XQpaSlyqXquN+0uaTLpM+kyqTqpN6ku6TzoaOks6TspM+hogorICAgICAguPi8sMjHpM6l0KWkpcql6qTLpM8gbG9zc2xlc3MganBlZyBwYXRjaCAobGpwZWctNmIudGFyLmd6KSCkyKSkpKYKKyAgICAgIL2kwLWl0aXDpcGkrLTepN6k7KTGpKSk66S/pOGkx6GixfZTSU1EyMeky8LQpLekxqSzpM6l0aXDpcGk8sWszdEKKyAgICAgIKS5pOuks6TIpM+6pMbxpMCkq6TppMekuaGjCisKKyAgICAgIKXQpaSlyqXquN+0uaTHpM+kyqSkpL+k4aGiuPi8sKXqpeqhvKW5yMekziBETEwgpPKks6TOU0lNRMjHpMfD1qStCisgICAgICC0uaSopOuks6TIpM+kx6StpN6ku6TzoaOkvaTOpL+k4cX2U0lNRMjHpM4gRExMIKTPIGN5Z2pwZWctMTYyLmRsbAorICAgICAgpMikpKSmzL7BsKTLpMqk66TopKaky6S3pMakoqTqpN6kuaGjpLOk7KTypbeluaXGpeCky6WkpfOluaXIobyl66S5pOsKKyAgICAgIKSzpMik4qTHpK2k3qS5pKyhoqSzpM5TSU1EyMekziBETEwgpPLN+M3RpLmk66TLpM+hokpQRUcgpemlpKXWpeml6qTyCisgICAgICC7yM3RpLekxqSkpOulvaXVpcik8rrGpbOl86XRpaSl66G/usal6qXzpa+kuaTryazN16SspKKk6qTepLmhoworCisgICAgICCkyqSqoaKks6TOIERMTCCky6TEpLGk6aTspOul0KG8pbil56XzyNa55qTyytGkqKS/pLGk7KTQoaJjb25maWd1cmUKKyAgICAgIKW5pa+l6qXXpcik8sH2pOmku6TrwbCkyyBjb25maWcudmVyIKTOxuLNxqTyytG5uaS3pMakr6TApLWkpKGjCisKKworoqPKo7/0pdWloaWkpevC0LH+yMekziBjanBlZy9kanBlZyAoYWx0dWkvKQorCisgIKW1pfOl16XrpaKl16XqpbGhvKW3peel86TOIGNqcGVnIKTIIGRqcGVnIKTLpMSkpKTGpMekuaSsoaKlx6XVpaml66XIpM4KKyAgvvXC1qTHpbOl86XRpaSl66S1pOyk66TipM4owr6kzqW9obyluaXVpaGlpKXrt7KkyMaxpLi+7L3qpMukoqTrIGNqcGVnLmMKKyAgpMggZGpwZWcuYykgpM+horDsxdmky7DspMSkzqXVpaGlpKXrpLekq8rRtLmkx6StpMqkpKTipM6kx6S5oaOkxKTepOqhogorICDG/s7PpdWloaWkpeukz6Wzpd6l86XJpemlpKXzvuWky7DspMSkt6Sru9jE6qTHpK2kuqGivdDOz6TPybi94L3Qzs+kqworICAtb3V0ZmlsZSClqqXXpbel56XzpMe72MTqpLekv6XVpaGlpKXrpMu98aStvdCktaTspN6kuaGjs8a876TOIFVOSVggt88KKyAgT1MgpMulpKXzpbmlyKG8peuktaTszfjN0aS1pOykxqSkpOsgY2pwZWcvZGpwZWcgpM+ks6TOpb+lpKXXpM6k4qTOpMekuaGjCisKKyAgsOzK/aGiSUpHIKSrpOm4+LywpMul6qXqobyluaS1pOykxqSkpOsgTVMtRE9TIMjHpM4gY2pwZWcvZGpwZWcKKyAgKGZ0cDovL2Z0cC5zaW10ZWwubmV0Ly4yL3NpbXRlbG5ldC9tc2Rvcy9ncmFwaGljcy9qcGVnNl9iLnppcCkgpMekz6GiCisgIMqjv/Skzsb+zs+l1aWhpaSl66Tyu9jE6qTHpK2hor3Qzs+kz8b+zs+l1aWhpaSl66TIxrGkuL7sveqky7yrxrDFqqTLCisgILrupOmk7KTepLmho6SzpM6lv6WkpdekziBjanBlZy9kanBlZyCk8rrupOqkv6SxpOyk0KGiYWx0dWkvIKTOw+aky6SipOsKKyAgY2pwZWcuYyCkyCBkanBlZy5jIKTyoaK4taSrpOmkoqTrKKOxpdWloaWkpevIx6TOKSBjanBlZy5jIC8gZGpwZWcuYyCkyAorICDG/qTswtikqKTGpbOl86XRpaSl66S3pMakr6TApLWkpKGjpLOkziBhbHR1aSDIx6TOIGNqcGVnLmMgLyBkanBlZy5jIKTPoaIKKyAguLWhuSBqcGVnYWx0dWkudjZiLnRhci5neiCkyKSkpKal1aWhpaSl68y+pMfH28nbpLWk7KTGpKSkv6TipM6ky8LQpLekxgorICBTSU1EIMLQsf6yvaTLtNikuaTrvaTAtaTyssOkqKS/pOKkzqTHpLmhoworCisgIKSzpM7Ko7/0pdWloaWkpevC0LH+yMekziBjanBlZy9kanBlZyCk8iBXaW5kb3dzILfPpMqkyaTOyPMgVU5JWCC0xLatpMcKKyAgu8jN0aS5pOu+7LnnoaLG/s7PpdWloaWkpevMvqType+lpKXrpcmlq6G8pcmkx7vYxOqkx6StpOuk6KSmpMukuaTrpMukz6GiCisgILPGpbOl86XRpaSl6aTLuMfNraTOxsPKzKTKwN/E6qSsyazN16TLpMqk677sueekrKSipOqk3qS5oaOkyqS8pMqk6aGiCisgIE1TLURPU7fPob9XaW5kb3dzt8+kzrTEtq2kx6TPsOzIzKTLoaKl76WkpeulyaWrobylyaTOxbizq73ozf2kz6WzpfOl0aWkpekKKyAgpMvJ1cKwpM6luaW/obylyKWipcOl16WzobylycbipMe51KTKpO+k7KTrpL+k4aTHpLmhoworCisgIE1pbkdXIKTkIERKR1BQIFYuMiCkyqTJpM6+7LnnpM+hoqXvpaSl66XJpauhvKXJpM7FuLOrvejN/aTPuse96aSrpOnNrbj6CisgIKTLpMqkw6TGpKSk66S/pOGhosbDysykyqSzpMik8qS3pMqkr6TGpOKl76WkpeulyaWrobylyaTLpOik66XVpaGlpKXru9jE6gorICCkz6THpK2k3qS5oaNNaWNyb3NvZnQgVmlzdWFsIEMrKyCk5CBCb3JsYW5kIEMrKyCkzr7sueekz6GiyeHEzKGipe+lpKXrpckKKyAgpauhvKXJxbizq6Tyza24+rK9pLmk66WqpdaluKWnpa+lyKXVpaGlpKXrpMekoqTrIHNldGFyZ3Yub2JqIKTkCisgIHdpbGRhcmdzLm9iaiCk8iBFWEUgpdWloaWkpeukzqXqpfOlr7v+pMvCvqTOpaql1qW4paelr6XIpdWloaWkpeukyLDsve+kyworICCl6qXzpa+kuaTrpLOkyKTHoaKl76WkpeulyaWrobylycW4s6uk8s2tuPqyvaTHpK2k3qS5pKyhoqSzpM4gU0lNRCDIxworICBjanBlZy9kanBlZyCkzr7sueekz6Gic2V0YXJndi5vYmogpOQgd2lsZGFyZ3Mub2JqIKTOxuLNxqTLwerF9qS5pOuls6G8pcmk8gorICBjanBlZy5jL2RqcGVnLmMgpMvEvsDcvfGkrbn+pPOkx6SipOukv6ThoaKl16Xtpbilp6Wvpcil1aWhpaSl66TkIE1ha2VmaWxlCisgIKTLvuW1raTOpaql1qW4paelr6XIpdWloaWkpeuk8sTJssOkt6TKpK+kxqTioaKl76WkpeulyaWrobylyaTLpOik66XVpaGlpKXrCisgILvYxOqkrKTHpK2k66TopKaky6S3pMakoqTqpN6kuaGjpLOk7KTpsMqzsKTOo8Ols6XzpdGlpKXppPK7yM3RpLekv77sueekx6GiCisgIKXvpaSl66XJpauhvKXJpMuk6KTrpdWloaWkpeu72MTqpKykx6StpMqkpL7sueekz6GipbOl86XRpaSl6aTOpd6ly6XlpaKl6worICCk8ruyvsikt6TGoaKl76WkpeulyaWrobylycW4s6uk8s2tuPqyvaS5pOvA38TqpMels6XzpdGlpKXrpLekxqSvpMCktaSkoaMKKworICCw7Mr9oaJsaW51eCCkyqTJpM4gVU5JWCC0xLatpMekz6Gipe+lpKXrpcmlq6G8pcmkzsW4s6u96M39pM+l16XtpbCl6aXgpKwKKyAgta/GsKS1pOyk68GwpMuls6XepfOlyaW3pael66TLpOikw6TGudSkyqTvpOyk66S/pOGhoqWzpfOl0aWkpemkzsDfxOqkyqTJCisgIKTPyazN16SipOqk3qS7pPOho6XvpaSl66XJpauhvKXJpMuk6KTrpdWloaWkpevMvrvYxOqkz77vpMu7yKSopN6kuaGjCisKKworoqOls6G8pcmltaWkpbqk8ri6pOmkuaTLpM8KKworICBTSU1EIKWzobylyaTyydWyw6S3pL+kv6ThoaKkvaTOyqykwKSxpbOhvKXJpbWlpKW6pKzB/aSopMakpKTepLmho6THpLmkrKGiCisgIEpQRUcgbGlicmFyeSCk8rDKsrykzqTopKakyqXHpdWlqaXrpcikzr71wtakx77vpMu7yM3RpLekxqSkpOukzqTKpOmk0KGiCisgIGptb3JlY2ZnLmggpM7D5qTLpKKk68DfxOq54MzcKKXepa+l7Smk8rDKsrykzqTopKaky8rRubmkt6TGpbOl86XRpaSl6worICCkuaTrpLOkyKTHoaK7yM3RpLWk7KTKpKSls6G8pcmk8r38s7CkuaTrpLOkyKSspMekraGipbOhvKXJpbWlpKW6pPK4uqTppLkKKyAgpLOkyKSspMekraTepLmhoworCisgIKH7IGNpbmZvLmRjdF9tZXRob2QgpM7DzaTyytG5uaS3pMakpKTKpKS+7LnnCisKKyAgICCks6TOytG/9KTPIERDVLHpu7ukzsr9y6Gk8rvYxOqkt6GiY2pwZWcvZGpwZWcgpMekzyAtZGN0IKWqpdelt6XnpfOkyworICAgIMLQsf6kt6TepLmho6SzpM7K0b/0pM7DzaTPpcel1aWppeulyKTHpM8gSkRDVF9JU0xPVyCkx6GixsOky839zbOkzgorICAgIKTKpKS4wqTqpLOkzqXHpdWlqaXrpcikzr71wtakx7vIzdGkuaTrpLOkyKTytq+kr7/kvqmkt6TepLmho7DKsrykzgorICAgIKXepa+l7aTyICN1bmRlZiCky6S5pOuks6TIpMehokpEQ1RfSVNMT1cgpM6+9cLWpMekz7fopLekxrvIzdGktaTspMqkpAorICAgIKWzobylyaTyvfyzsKTHpK2k3qS5oaMKKworICAgICNkZWZpbmUgRENUX0lGQVNUX1NVUFBPUlRFRCAgLT4gICN1bmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisgICAgI2RlZmluZSBEQ1RfRkxPQVRfU1VQUE9SVEVEICAtPiAgI3VuZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKworICAgIKSzpOykwKSxpMek4qSrpMqk6qTOpbOhvKXJpbWlpKW6pKy677i6pMekraTepLmho8bDpMsgRENUX0ZMT0FUX1NVUFBPUlRFRAorICAgIKTyICN1bmRlZiCky6S5pOukyKGiM0ROb3chIKTIIFNTRSCkzqW1pd2hvKXIpOK8q8awxaqky8y1uPqky6TKpOqk3qS5oaMKKworICCh+8W4s6u96M39pMcgY2luZm8uZG9fZmFuY3lfdXBzYW1wbGluZyCkzsPNpPLK0bm5pLekxqSkpMqkpL7suecKKworICAgIKSzpM7K0b/0pM8gZGpwZWcgpMekzyAtbm9zbW9vdGggpaql16W3peel86TLwerF9qS3oaItbm9zbW9vdGggpPK72MTqCisgICAgpLmk66TIIEZBTFNFIKTLwN/E6qS1pOyk3qS5oaOlx6XVpaml66XIpMekzyBUUlVFIKTHoaKks6TspOLGw6TLzf3Ns6TOCisgICAgpMqkpLjCpOqks6TOpcel1aWppeulyKTOvvXC1qTHu8jN0aS5pOuks6TIpPK2r6Svv+S+qaS3pN6kuaGjsMqyvKTOCisgICAgpd6lr6XtpPIgI3VuZGVmIKTLpLmk66SzpMikx6GiVFJVRSCkzr71wtakx6TPt+ikt6TGu8jN0aS1pOykyqSkpbOhvKXJpPIKKyAgICC9/LOwpMekraTepLmhoworCisgICAgI2RlZmluZSBVUFNBTVBMRV9NRVJHSU5HX1NVUFBPUlRFRCAgLT4gICN1bmRlZiBVUFNBTVBMRV9NRVJHSU5HX1NVUFBPUlRFRAorCisgIKH7xbizq73ozf2kxyBjaW5mby5zY2FsZV9udW0sIGNpbmZvLnNjYWxlX2Rlbm9tIKTOw82k8srRubmkt6TGpKSkyqSkvuy55worCisgICAgpLOk7KTPzdekuaTrpMuh1kpQRUe9zL6uxbizq6HXpM61oce9pMehomRqcGVnIKTHpM8gLXNjYWxlIE0vTiClqqXXCisgICAgpbel56XzpMvB6sX2pLek3qS5oaOltaXgpc2lpKXruu7ArqTKpMmkzr7sueeky834zdGktaTspOuks6TIpKzCv6SkCisgICAgtaHHvaTHpLmkrKGipLOk7KTypN6kw6S/pK+7yM3RpLekxqSkpMqkpL7sueekz6GisMqyvKTOpd6lr6XtpPIgI3VuZGVmCisgICAgpMukuaTrpLOkyKTHoaKls6G8pcnOzKTyuu+4uqTHpK2k3qS5oaMKKworICAgICNkZWZpbmUgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRCAgLT4gICN1bmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVECisKKyAgw+2w1cXApMikt6TGoaKks6TspOmkzsDfxOrK0b/0pKykyaTOpOikpqTKvvXC1qTHu8ik76TspOukq829wqykx6StpMqkpAorICC+7LnnoaKkv6TIpKik0KGipbeluaXGpeCky6WkpfOluaXIobyl66S5pOu2ps2tpemlpKXWpeml6qTyuu6k677sueekyqTJCisgIKTPoaKks6SmpKSkw6S/pbOhvKXJuu+4uqTPudSkyqSmpNmkraTHpM+koqTqpN6ku6TzoaOls6G8pcm677i6pPK51KTKpKYKKyAgpM6kz6GiSlBFRyCl6aWkpdal6aXqpM67yKTvpOzK/aSspOikr6TvpKukw6TGpKSk68bDxOqkzqWipdel6qWxobylt6XnpfMKKyAgpMul6qXzpa+kuaTrvuy556TOpN+ky6S3pMakr6TApLWkpKGjCisKKworoqPGw8TqpM4gU0lNRCDMv87hpPK7yM3RpLekyqSkpOikpqTLpLmk66TLpM8KKworICCks6TspM8gamNvbmZpZy5oIKTOw+bE+KTLpKKk66GiI3VuZGVmIEpTSU1EXyoqKl9OT1RfU1VQUE9SVEVEIKTIpKSkpgorICCl3qWvpe2k8iAjZGVmaW5lIKTLpLmk66SzpMikx7zCuL2kx6StpN6kuaGjY29uZmlndXJlIKW5pa+l6qXXpcikxworICAtLWRpc2FibGUtbW14IKTKpMmkzqWqpdelt6XnpfOk8rvYxOqkt6S/vuy556TPoaKks6TOpd6lr6XtpM+8q8awxaqkyworICAjZGVmaW5lIKS1pOyk3qS5oaMKKworICAzRE5vdyEgpMggU1NFIKTPuLWhuaGiyeLGsL6uv/TFwERDVKTLpLekq834zdGktaTspMakpKTepLuk86TOpMehor7lvdKkzgorICBEQ1RfRkxPQVRfU1VQUE9SVEVEIKTyICN1bmRlZiCky6S3pL+kwKSxpMek3qTIpOGkxsy1uPqky6S1pOyk3qS5oaMKKyAgTU1YIKTIIFNTRTIgpM+horC1vczFuLOrvejN/aTOs8a96qTLzfjN0aS1pOykxqSkpMahorniwq6yvaTYpM6517ilxdmkrAorICC54qSkpM6kx6Giza24+qTLpLekxqSqpK+ks6TIpPKkqsGmpOGkt6TepLmkrKGiwcik37n+pN/N0cXTpMqkyaGipbOhvKXJCisgIKTywfak6aS7pOul16Xtpbulw6W1pM68787gpKyk76SrpMOkxqSkpOu+7LnnpM+hoqHWxMy+7834zdGktaTspMqkpMr9odcKKyAgpM6ltaXdobylyKTys7CkuaSzpMikx6GipbOhvKXJpbWlpKW6pM6677i6pKykx6StpN6kuaGjCisKKworCitbRU9GXQpkaWZmIC0tZ2l0IGEvc2ltZF9pbnRlcm5hbC5qYS50eHQgYi9zaW1kX2ludGVybmFsLmphLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjM0OTAxCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZF9pbnRlcm5hbC5qYS50eHQKQEAgLTAsMCArMSwyOTMgQEAKK0luZGVwZW5kZW50IEpQRUcgR3JvdXAncyBKUEVHIHNvZnR3YXJlIHJlbGVhc2UgNmIKKyAgd2l0aCB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkgdmVyc2lvbiAxLjAyCisgICAgPT0gSU5URVJOQUwgPT0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK6KjpLOkzqXVpaGlpKXrpM8KKworICCks6TOpdWloaWkpeukx6TPoaJTSU1EIMjHIGxpYmpwZWcgpemlpKXWpeml6qTOoaJTSU1EILPIxKXJ9MqspM6+3LrZpPIKKyAgsvLA4qS3pN6kuaGjU0lNRCCzyMSlyfTKrKTLwtCkt6TGsr+k6aSrpM686qTyssOkqKS/pKS+7LnnpOShosm4veCkx6TPCisgIMLQsf6kt6TGpKSkyqSkpdel6aXDpcil1aWpobyl4KTLwtCx/qS1pLukv6Skvuy556TKpMmkz6GipLOks6Tyxsmk86THCisgIKSvpMCktaSkoaMKKworICAgIKKjpdWloaWkpeul1aWpobyl3qXDpcihv7jGpNO90KS3tazM8yhBQkkppM672MTqCisgICAgoqNPUyCkziBTSU1EIKW1pd2hvKXIpcGlp6XDpa8gKGpzaW1kZ2NjLmMgLyBqc2ltZGRqZy5hc20gLyBqc2ltZHczMi5hc20pCisgICAgoqOloqW7pfOl1qXquMC47M3RwN/E6qXVpaGlpKXrIGpzaW1kY2ZnLmluYyCkzrruwK4gKG1ha2VjZmcuYykKKyAgICCio1NJTUQgzL/O4aTOvMK51Lv+pM7BqsLyob9TSU1EIMawuu6l4qG8pcm+8MrzCisgICAgoqOkvaTOpNukq6TOwN/E6rngzNyl3qWvpe0KKyAgICAgIKH7IFJHQl9SRUQgLyBSR0JfR1JFRU4gLyBSR0JfQkxVRSAvIFJHQl9QSVhFTFNJWkUKKyAgICAgIKH7IFJHQlhfRklMTEVSXzBYRkYKKyAgICAgIKH7IEpGRENUX0lOVF9RVUFOVElaRV9XSVRIX0RJVklTSU9OCisgICAgICCh+yBVUFNBTVBMRV9IMVYyX1NVUFBPUlRFRAorCisKK6KjpdWloaWkpeul1aWpobyl3qXDpcihv7jGpNO90KS3tazM8yhBQkkppM672MTqCisKKyAgpaKlu6Xzpdal6rjAuOykx73xpKuk7KS/pbOhvKXJpPKhoqPDuMC47KTKpMmkzrnitem4wLjspMe98aSrpOykv6WzobylyQorICCkyKXqpfOlr6S5pOuky6TPoaKlqqXWpbilp6Wvpcil1aWhpaSl66TOpdWlqaG8pd6lw6XIpPKw7MPXpLWku6TrpLOkyKGiCisgIKSqpOik06GiuMak073QpLe1rMzzpMqkyaTOpdClpKXKpeqls6G8pcmkzrWszPMoQUJJKaTysOzD16S1pLuk66SzpMikrAorICDJrM3XpMekuaGjpLOkzqW9pdWlyKTHpM+hoqSzpOyk6aTOu9jE6qTyoaKloqW7pfOl1qXpIG5hc20gpMvNv6SopOulqqXXCisgIKW3peel86THu9jE6qS3pMakpKTepLmhoworCisgIKGmbmFzbSAtZndpbjMyIC1EV0lOMzIgLi4uCisKKyAgICBXaW4zMiCkziBjb2ZmIKXVpamhvKXepcOlyKGjTWljcm9zb2Z0IFZpc3VhbCBDKysgpOQgTWluR1ehpkN5Z1dpbgorICAgIKTKpMmholdpbjMyIKWzpfOl0aWkpemkzsLnyfTKrKSss7rF9qGjCisKKyAgoaZuYXNtIC1mb2JqIC1ET0JKMzIgLi4uCisKKyAgICBXaW4zMiCkziBvYmogpdWlqaG8pd6lw6XIoaO4taG5pM8gTVMtRE9TIKTHu8ik76TspMakpKS/IG9iaiC3wbywCisgICAgKE1TT01GKaTyIDMyYml0IKTLs8jEpaS3pL+k4qTOoaNCb3JsYW5kIEMrKyBDb21wbGllciAoV2luMzIpIKTKpMmhoworCisgIKGmbmFzbSAtZmVsZiAtREVMRiAuLi4KKworICAgILPGvO+kziBVTklYIKTHua2kr7rOzdGktaTspMakpKTrIEVMRiCl1aWpobyl3qXDpciho2xpbnV4IKTkIHhCU0QKKyAgICCl1aWhpd+l6qTKpMmhori9ut+kziBVTklYIKTOwufJ9MqspKyzusX2oaMKKworICChpm5hc20gLWZhb3V0YiAtREFPVVQgLi4uCisKKyAgICCwysGwpM4geEJTRCCl1aWhpd+l6qTHu8ik76TspMakpKS/IGEub3V0IKXVpamhvKXepcOlyKGjCisKKyAgoaZuYXNtIC1mbWFjaG8gLURNQUNITyAuLi4KKworICAgIERhcndpbiAoTWFjT1MgWCkgpMqkyaTHus7N0aS1pOykxqSkpOsgTWFjaC1PIKXVpamhvKXepcOlyKGjCisgICAgw+2hyy1mbWFjaG8gpaql16W3peel86TPIG5hc20gMC45OC40MCCwyrnfpMeltaXdobylyKS1pOyk3qS5oaMKKworICChpm5hc20gLWZjb2ZmIC1EREpHUFAgLi4uCisKKyAgICBNUy1ET1MgpM4gREpHUFAgpbOl86XRpaSl6aTHu8ik76TspOsgY29mZiCl1aWpobyl3qXDpcihoworCisgIKSzpM6kpqTBoaItZiClqqXXpbel56XzpM8gbmFzbSCkrLLyvOGkuaTrpdWloaWkpeul1aWpobyl3qXDpcikzrvYxOq70qTHoaIKKyAgLUQgpaql16W3peel8yil3qWvpe2kzsTqtcEppM8ganNpbWRleHQuaW5jIKTOw+akx7LyvOGktaTspOul0KWkpcql6rWszPMKKyAgKEFCSSmkzrvYxOq70qTHpLmho2pzaW1kZXh0LmluYyCkx6TPoaItRCClqqXXpbel56XzpMekzqXepa+l7cTqtcGky72+pMOkxqGiCisgIKW7pbCl4aXzpcgopbulr6W3peel8ymkzsTqtcGk5LOwyfTMvsy+wbDB9b7+pM7E6rXBpPK51KTKpMOkxqSkpN6kuaGjCisgIL7cpLekr6TPIGpzaW1kZXh0LmluYyCk8qS0zfekr6TApLWkpKGjCisKKyAgRUxGILfBvLAgpKqk6KTTIGEub3V0ILfBvLAgpM6+7LnnoaItRFBJQyCk8sTJssOkt6TGu9jE6qS5pOukyKWzobylyaSsCisgIFBvc2l0aW9uIEluZGVwZW5kZW50IENvZGUgKLDMw9bGyM6ppbOhvKXJKSCky6TKpOqk3qS5oaMtRFBJQyCkzworICBqc2ltZGV4dC5pbmMgpM7D5qTHsvK84aS1pOyhoqWzobylyaTyIFBJQyCky6S5pOukv6ThpM6l3qWvpe2k8sTqtcGkt6TepLmhoworICBNYWNoLU8gt8G8sKTOvuy556TPoaKls6G8pcmkz77vpMsgUElDIKTHpKKk68mszdekrKSipOukv6ThoaItRFBJQyCk8gorICC72MTqpLekyqSvpMak4r7vpMsgUElDILfBvLCkzqWzobylyaTywLjArqS3pN6kuaGjCisKKyAgpdel6aXDpcil1aWpobyl4KTLsf6kuKTGoaKks6TspOmkzsPmpKuk6cWswNqkyqTipM6k8sGqwvKkuaTryazN16SspKKk6gorICCk3qS5oaPGsbqtpM4gbWFrZWZpbGUgpMekz6GipKKk6aSrpLik4cWswNqkyqTipM6krLvYxOqktaTspMakpKTepLmhoworICBjb25maWd1cmUgpbmlr6XqpdelyKTHpM+homNvbmZpZy5ndWVzcyCkrL3Qzs+kuaTrpduluaXIvvDK86TyuLWky8GqwvIKKyAgpLekxqSkpN6kuaGjCisKKworoqNPUyCkziBTSU1EIKW1pd2hvKXIpcGlp6XDpa8gKGpzaW1kZ2NjLmMgLyBqc2ltZGRqZy5hc20gLyBqc2ltZHczMi5hc20pCisKKyAgU0lNRCDMv87hpPK8wrnUpLmk66TLpM+horv2wbCkziBDUFUgpM6ltaXdobylyKXBpaelw6WvpMCksaTHpM+kyqSvoaIKKyAgT1MgpM6ltaXdobylyKXBpaelw6WvpOLJrM3XpMekuaGjxsOkyyBTU0UvU1NFMiCky6TEpKSkxqTPoaJPUyDCpqTHCisgIFNTRS9TU0UyIMy/zuGk8rzCudSkx6StpOuk6KSmpMu79sGwpMtDUFWk8sDfxOqkuaTryazN16SspKKk6qGipL2k7KTyCisgILnUpMqkw6TGpKSkyqSkIE9TIKTHpM+hok9TIKSspbel86Wwpeulv6W5pa+kq6XepeulwaW/pbmlr6SrpMu02KTvpOmkuqGiCisgIFNTRS9TU0UyIKTPvMK51KTHpK2k3qS7pPOho6S1pOmky6GipKKk3qTqw86k6aTspMakpKTepLuk86SsoaJDUFUgpMsKKyAgxuLCoqS1pOykvyBGUFUgKL/0w82x6bu7pdel7aW7pcOltSkgpPK7yM3RpLekyqSkKKWopd+l5aXsobylyKS5pOspwN/E6gorICCky6TKpMOkxqSkpOukyKGiTU1YIKTkIDNETm93ISCk4rTepOGkuaTZpMakziBTSU1EIMy/zuGkz8G0pK+8wrnUpMekrQorICCk3qS7pPOho83XpLmk66TLoaJTSU1EIMy/zuGk8rzCudSkx6StpOukq6TJpKakq6TyxLSk2aTrpMukz6GiQ1BVSUQgpM4KKyAgpdWl6aWwpPLEtKTZpOukwKSxpMekz8nUvb3KrKTIpKSkpqSzpMikx6S5oaMKKworICBTSU1EIMy/zuGkziBPUyCltaXdobylyKXBpaelw6WvpMikpKTDpMak4qGiyt247qXiobylyaTHxrCkpKTGpKSk6worICCl16XtpbCl6aXgpM6+7LnnoaJDUFUgpM7A38TqpdWl6aWwpM6+9cLWpPLEvsDcpeahvKW2oaal16XtpbCl6aXgpKuk6QorICDGyaTfpMik66SzpMikrKTHpK2kyqSkpL+k4aGiU0lNRCDMv87hpPK77qS3pMu8wrnUpLekxqTfpMbMtbj6zL/O4c7js7CkrAorICDIr8C4pLmk66SrpMmkpqSrpPKzzqSrpOGk66TIpKSkpqGisNy/osCtpM6wraSktNbA3MWqpMrK/cuhpPK6zqTppLak66TyCisgIMbApMqkpKTOpKy4vb71pMekuaGjCisKKyAgpLOkziBTSU1EIMy/zuGkziBPUyCltaXdobylyKXBpaelw6WvpPKk5KTDpMakpKTrpM6krKGianNpbWRnY2MuYyAvCisgIGpzaW1kZGpnLmFzbSAvIGpzaW1kdzMyLmFzbSCkzqOzpMSkzqW9obyluaXVpaGlpKXrpMekuaGjpL2k7KS+pOyhogorICBVTklYL2djY83RoaJESkdQUM3RoaJXaW4zMs3RpMekuaGjanNpbWRnY2MuYyCkx6TPoaLO47OwpM7Ir8C4pPIKKyAgc2lnbmFsKCkgtNi/9KTOpbelsKXKpeulz6Xzpcml6aTHyuGk3qSopMakpKTepLmho6WzobylyaTOsOzJ9KTLIGdjYyCkzgorICClpKXzpemlpKXzpaKlu6Xzpdal6aTyu8ikw6TGpKSk66S/pOGhomdjYyDA7M3RpMekuaGjZ2NjILDKs7Ckx6TiCisgIKWzpfOl0aWkpeukz6THpK2k3qS5pKyhoqSzpM6+7LnnpM8gU0lNRCDMv87hpM6ltaXdobylyKXBpaelw6WvpM8KKyAgudSkyqTvpOyk3qS7pPOho2pzaW1kZGpnLmFzbSCkzyBEUE1JIKTOzuOzsL3ozf21obm9pPLEvsDczfjN0aS3pL8KKyAgyv3LoaTHoaJqc2ltZHczMi5hc20gpM8gV2luMzIgpM7O47OwvejN/bWhub2k8sS+wNzN+M3RpLekv8r9y6Gkx6S5oaMKKworICCl16XppcOlyKXVpamhvKXgpMux/qS4pMahoqSzpM6js7zvzuCkzsPmpKuk6cWswNqkyqTipM6k8sGqwvKkuaTryazN16SsCisgIKSipOqk3qS5oaPGsbqtpM4gbWFrZWZpbGUgpMekz6GipKKk6aSrpLik4cWswNqkyqTipM6krLvYxOqktaTspMakpKTepLmhoworICBjb25maWd1cmUgpbmlr6XqpdelyKTHpM+homNvbmZpZy5ndWVzcyCkrL3Qzs+kuaTrpduluaXIvvDK86TyuLWky8GqwvIKKyAgpLekxqSkpN6kuaGjCisKKyAgpLOkzqOzvO/O4KTOpMmk7KTIpOLFrLnnpLekyqSkpdel6aXDpcil1aWpobyl4KTOvuy556TPoaK/t6S/pMqlwaWnpcOlrworICC02L/0pPK98aSvyazN16SspKKk6qTepLmho6THpLmkrKGipL2kziBPUyCkrMG0pMakziBTSU1EIMy/zuGk8qW1pd2hvKXICisgIKS3pMakpKTrIE9TIKTHpKKk66SzpMikrKTvpKukw6TGpKSk677sueekz6GipLOkziBPUyCltaXdobylyKXBpaelw6WvpM8KKyAgvsrOrKS5pOuks6TIpOKyxMe9pMekuaGjsMqyvKTOpOikpqTKtvWkzrTYv/SkzqTfpM6lvaG8pbml1aWhpaSl66TyCisgILrupMOkxr7lta2kzqOzpMSkzqXVpaGlpKXrpM7C5aTvpOqky7vIzdGkuaTrpKuhoqTipLekr6TPIGpjb21hcGkuYyCk8gorICCy/srRpLekxiBqcGVnX3NpbWRfb3Nfc3VwcG9ydCCkzrjGpNO90KS3pPKl0KWkpdGluaS5pOuk6KSmpMukuaTspNCjz6PLCisgIKTHpLmhoworCisgICAgR0xPQkFMKHVuc2lnbmVkIGludCkKKyAgICBqcGVnX3NpbWRfb3Nfc3VwcG9ydCAodW5zaWduZWQgaW50IHNpbWQpCisgICAgeworICAgICAgcmV0dXJuIHNpbWQ7CisgICAgfQorCisKK6KjpaKlu6Xzpdal6rjAuOzN0cDfxOql1aWhpaSl6yBqc2ltZGNmZy5pbmMgpM667sCuIChtYWtlY2ZnLmMpCisKKyAgxfalvaXVpcikzr7sueehoqWipbul86XWpeq4wLjspM6lvaG8pbmls6G8pcnD5qSrpOmjw7jAuOykzqXYpcOlwKXVpaGlpKXrCisgIKTLpKKk677wyvOhoqS/pMikqKTQoaKl16Xqpdel7aW7pcOltaXepa+l7aTOw82k5Lm9wqTCzqTOw+aky6SipOvK0b/0pM4KKyAgpaql1aW7pcOlyKTKpMmhoqTyw86k68mszdekrKSipOqk3qS5oaNtYWtlY2ZnLmMgpM+hokpQRUcgpemlpKXWpeml6qTOCisgIKWzpfOl0aWkpeuky8Dozqmkw6TGpbOl86XRpaSl66Gmpeql86Wvoaa8wrnUpLWk7KGipaKlu6Xzpdal6rjAuOzCpqTOCisgIKW9obyluaWzobylyaTHyazN16TIpMqk677wyvOk8qWipbul86XWpeq4wLjszdHA38TqpdWloaWkpesganNpbWRjZmcuaW5jCisgIKTIpLekxr3Qzs+kuaTrxq+kraTypLekxqSkpN6kuaGjCisKKyAgw+2w1cXApMikt6TGoaJtYWtlY2ZnLmMgpM8gSlBFRyCl6aWkpdal6aXqpM6lvaG8pbmls6G8pcmkyMaxpLils6XzpdGlpKXrCisgIKWqpdelt6XnpfOkx6WzpfOl0aWkpeuktaTspOvJrM3XpKykoqTqpN6kuaGjxsOky6Giub3CpMLOpM6y8rzhKKW1paSlugorICCkyqTJKaSsIEpQRUcgpemlpKXWpeml6svcws6kzqTipM6kyLDbpMqkw6TGpLek3qSmpMihokpQRUcgpemlpKXWpeml6qSsCisgIKWvpemlw6W3peWkt6TepLmhoworCisKK6KjU0lNRCDMv87hpM68wrnUu/6kzsGqwvKhv1NJTUQgxrC67qXiobylyb7wyvMKKworICCks6TOIFNJTUQgs8jEpcjHIEpQRUcgpemlpKXWpeml6qTHpM+hoqXXpe2lsKXppeCkzrzCudS7/qTLxsPE6qTOIFNJTUQKKyAgzL/O4aTyu8jN0aS3pMqkpKTopKaky6S3pL+k6qGis8a96M39w8qzrKTHpMmkziBTSU1EIMy/zuGk8rvIzdGkt6TGxrC67gorICCkuaTrpM6kq6Tyx8SwrqTHpK2k67vFwcik36SszdGw1aS1pOykxqSkpN6kuaGjCisKKyAganBlZ19zaW1kX21hc2soKSCk8rvIpKakyKGixsPE6qTOIFNJTUQgzL/O4aTyvMK51Lv+pMu7yM3RpLekyqSkpOikpqTLCisgIKTHpK2k3qS5oaMKKworICAgIEdMT0JBTCh1bnNpZ25lZCkKKyAgICBqcGVnX3NpbWRfbWFzayAoal9jb21tb25fcHRyIGNpbmZvLCB1bnNpZ25lZCByZW1vdmUsIHVuc2lnbmVkIGFkZCk7CisKKyAgpLOkzrTYv/Skz6Gis8YgU0lNRCDMv87hpbulw6XIpMvC0LH+pLmk66Xepbmlr6XTpcOlyKTywN/E6qGmytG5uaS3pN6kuaGjCisgIHJlbW92ZSwgYWRkIKS9pLekxszhpOrDzaTPoaKzxiBTSU1EIMy/zuGky8LQsf6kuaTrpdOlw6XIw80gKEpTSU1EX01NWCwKKyAgSlNJTURfM0ROT1csIEpTSU1EX1NTRSwgSlNJTURfU1NFMikgpPIgT1Igsem7u6THwcik37nnpO+ku6S/pOKkzqTHpLmhoworCisgICKl3qW5pa+l06XDpcgiIKTPoaK5vcKkws4gY2luZm8gpMvK3bv9pLWk7KTrw82kx6GipL2kzr3ptPzDzaTPIDAgpMekuaGjCisgIKS9pLekxqSzpM602L/0pM+hoqSzpM6l3qW5pa+l06XDpcik8rDKsrykzqTopKaky7m5v7coweC67imkt6TepLmhoworCisgICAgKL+3pLekpKXepbmlr6XTpcOlyCkgPSAoKLjFpKSl3qW5pa+l06XDpcgpICYgfnJlbW92ZSkgfCBhZGQ7CisKKyAgpL2kt6TGoaKks6TOpd6luaWvpdOlw6XIpKwgMSCky6S1pOykvyBTSU1EIMy/zuGlu6XDpcikz6GipL+kyKSoIENQVS9PUworICCkx8LQsf6kt6TGpKSkxqTiu8jN0aS1pOyk3qS7pPOho6SzpM602L/0pM+hoqSzpM602L/0pPK4xqTWxL7BsKTepMfA38TqCisgIKS1pOykxqSkpL+l3qW5pa+l06XDpcik8srWpLek3qS5oaOkyqTOpMehonJlbW92ZSwgYWRkILampMsgMCCk8s2/pKikxgorICC02L/0pPK4xqTZpNChori9ut/A38TqpLWk7KTGpKSk66Xepbmlr6XTpcOlyKTyvOjGwKTHpK2k3qS5oaOks6TOtNi/9KTOCisgILvIzdHO46TPoaJjanBlZy5jLCBkanBlZy5jLCBqY29tYXBpLmMgpMukoqTqpN6kuaGjCisKKyAgpLOkzqXepbmlr6XTpcOlyKTOw82kz6GivMK63aTLpM+5vcKkws4gY2luZm8gpM4gb3V0cHV0X2dhbW1hIKTipLekr6TPCisgIGlucHV0X2dhbW1hIMrRv/SkzrK8sMyl06XDpcikzsrdwriktaTspMakpKTepLkovtykt6SvpM8gamNvbWFwaS5jIKTyCisgILuyvsgpoaOks6TspM+horm9wqTCziBjaW5mbyCky7+3pL+kysrRv/Sk8sTJssOkt6TGpLek3qSmpMil0KWkpcql6rjftLkKKyAgpKzK+KTspMakt6TepKakv6ThpMehori9vvWkx6TPzKS7yM3RpMi716TvpOyk677lta2kzsrRv/Sk8qHWtNa82qTqodcKKyAgpLekxqSkpN6kuaGjCisKKyAgpN6kv6GisMqyvKTOtNi/9LeypPK7yKSmpMihoqXppaSl1qXpperG4sn0pM6zxr3ozf3DyrOspMekyaTOIFNJTUQgzL/O4QorICCk8rvIzdGkt6TGxrC67qS5pOukzqSrpPLHxLCupMekraTepLmhoworCisgICAganBlZ19zaW1kX2NvbG9yX2NvbnZlcnRlcigpOyAgIC0+IL+ntvW01srRtLkoUkdCLT5ZQ2JDcikKKyAgICBqcGVnX3NpbWRfZG93bnNhbXBsZXIoKTsgICAgICAgLT4gpcClpqXzpbWl86XXpeql86WwCisgICAganBlZ19zaW1kX2ZvcndhcmRfZGN0KCk7ICAgICAgIC0+IERDVL3nytG0uQorICAgIGpwZWdfc2ltZF9jb2xvcl9kZWNvbnZlcnRlcigpOyAtPiC/p7b1tNbK0bS5KFlDYkNyLT5SR0IpCisgICAganBlZ19zaW1kX3Vwc2FtcGxlcigpOyAgICAgICAgIC0+IKWipcOl16W1pfOl16XqpfOlsAorICAgIGpwZWdfc2ltZF9pbnZlcnNlX2RjdCgpOyAgICAgICAtPiBEQ1S11crRtLkKKworICDK1qS5w82kz6GiyeLGsL6uv/TFwERDVL3nytG0uS+11crRtLkgpM6+7LnnpM8gSlNJTURfM0ROT1cgpKsgSlNJTURfU1NFoaIKKyAgpL2k7LDKs7Ckzr7sueekzyBKU0lNRF9NTVggpKsgSlNJTURfU1NFMiCk8srWpLek3qS5oaOk3qS/oaIwIKSsytakw6TGCisgIKStpL++7LnnpM8gU0lNRCDMv87hpbulw6XIpM+7yKTvpOykuqGivb7N6KTOpeuhvKXBpfOkrLvIpO+k7KTrpLOkyKTyCisgILDVzKOkt6TepLmhoworCisgIKSzpOyk6aTOtNi/9KTOvtykt6Sku8ikpMr9pMukxKSkpMakz6GiY2pwZWcuYywgZGpwZWcuYyAou8jN0c7jKSCk8qS0zfcKKyAgpK+kwKS1pKShoworCisgIKTKpKqhoqSzpOyk6aTOIFNJTUQgpd6luaWvtNi/9KG/U0lNRCCl4qG8pcm+8MrztNi/9CCkrMmszdekyqSkvuy556TPoaIKKyAgsMqyvKTOpd6lr6XtpPIgamNvbmZpZy5oIKTKpMmky7TepOGk66SzpMikx6Gits+kq6THpLmkrKWzobylyaW1paSluqSsCisgIMDhzPOkx6StpN6kuaGjCisKKyAgICAjZGVmaW5lIEpTSU1EX01BU0tGVU5DX05PVF9TVVBQT1JURUQKKyAgICAjZGVmaW5lIEpTSU1EX01PREVJTkZPX05PVF9TVVBQT1JURUQKKworCiuio6S9pM6k26SrpM7A38TqueDM3KXepa+l7QorCisgIKH7IFJHQl9SRUQgLyBSR0JfR1JFRU4gLyBSR0JfQkxVRSAvIFJHQl9QSVhFTFNJWkUKKworICAgIKSzpOykz6Giam1vcmVjZmcuaCCkzsPmpMukoqTrwN/E6rngzNyl3qWvpe2kx6GivOik6rC3pKYgUkdCILfBvLCy6MH8CisgICAgpcehvKW/pM4gUkdCIKTOysKk073npOSl1KWvpbul66W1paSluqTywN/E6qS3pN6kuaGjpLOkziBTSU1EILPIxKXIxworICAgIKTHpOLK0bm5pMekraTrpOikpqTLpLekxqSipOqk3qS5pKyholJHQl9QSVhFTFNJWkUgpKwgMyCkqyA0IKTOvuy556TOpN+hogorICAgIFNJTUQgyMekzr+ntvW01srRtLml66G8pcGl86Ssza24+qTLpMqk6qTepLmho6S9pOywyrOwpM7DzaTLpLekv77sueekz6GiCisgICAgU0lNRCDIx6TOv6e29bTWytG0uaXrobylwaXzpM+8q8awxaqky8y1uPqyvaS1pOykxqGivb7N6KTOv6e29bTWytG0uQorICAgIKXrobylwaXzpKy7yKTvpOyk3qS5KKTkpOTE48KupMukyqTqpN6kuSmhoworCisgICAgpLOk7KTppM7DzaTyytG5uaS5pOuks6TIpMehor3Qzs+k8iAzMmJpdC9waXhlbCC3wbywpMukt6S/pOqhokJNUCC3wbywpMsKKyAgICC556TvpLukxqXUpa+lu6XrpPIgQkdSIL3npMukt6S/pOqkuaTrpLOkyKSsssTHvaTLpMqk6qTepLmho6TKpKqhogorICAgIKSzpOyk6aTOw82k8sy3veKkuaTrw82kyyAjZGVmaW5lIKS3pL++7LnnpM+ls6XzpdGlpKXrpMekraTKpKSk6KSmpMukt6TGCisgICAgpKKk6qTepLmkzqTHoaLD7bDVpLekxqSvpMCktaSkoaMKKworICCh+yBSR0JYX0ZJTExFUl8wWEZGCisKKyAgICCks6TspOIgam1vcmVjZmcuaCCkzsPmpMukoqTrwN/E6rngzNyl3qWvpe2kx6S5oaOlx6XVpaml66XIpMekzyAjdW5kZWYKKyAgICCky6TKpMOkxqSkpN6kuaGjvuWkziBSR0JfUElYRUxTSVpFIKTyIDQgpMukt6S/vuy556Gio7GkxKTOpdSlr6W7pesKKyAgICClx6G8pb/D5qTLKFJHQqTOo7Ol0KWkpcikzsK+pMspzb6316TKo7Gl0KWkpcikrMK4ut+kuaTrpLOkyKTLpMqk6qTepLmhoworICAgIKXHpdWlqaXrpcikx6TPoaKks6TOzb6316TKo7Gl0KWkpcgoZmlsbGVyIGJ5dGUppMukzyAweDAwIKSsy+Sk4aTppOykxgorICAgIL3Qzs+ktaTspN6kuaSsoaKks6TOIFJHQlhfRklMTEVSXzBYRkYgpPIgI2RlZmluZSCkuaTrpMggMHgwMCCkzsLlpO+k6gorICAgIKTLIDB4RkYgpKwgZmlsbGVyIGJ5dGUgpMvL5KThpOmk7KTGvdDOz6S1pOyk3qS5oaMKKworICAgIL3Qzs+k8iAzMmJpdC9waXhlbCC3wbywpMukt6S/vuy556THoaJmaWxsZXIgYnl0ZSCk8qWipeul1aWhpcGl46XNpesKKyAgICCkyKS3pMawt6SkpL+kpL7sueekyqTJpM+holJHQlhfRklMTEVSXzBYRkYgpPIgI2RlZmluZSCkuaTrpMjF1LnnpKzOyaSkCisgICAgvuy556SspKKk66THpLek56SmoaMKKworICAgIKTKpKqhoqWqpeqluKXKpevIx6TOIEpQRUcgpemlpKXWpeml6qTHpM+hoqSzpM4gZmlsbGVyIGJ5dGUgpMukz7K/pOIKKyAgICC1zaThpOmk7KS6oaK4taTOw82krKS9pM6k3qTeyt27/aS1pOyk3qS5oaOkx6S5pKyholNJTUQgyMekzr+ntvW01srRtLkKKyAgICCl66G8pcGl86THpM+4taTOw82k8srdu/2kuaTrpMukz7zqtNakrKSrpKuk66S/pOGhor7vpMsgMHgwMCCkqyAweEZGCisgICAgpMfL5KThpMa90M7PpLmk66TopKaky7vFzc3K0bm5pPK51KTKpKSk3qS3pL+howorCisgIKH7IEpGRENUX0lOVF9RVUFOVElaRV9XSVRIX0RJVklTSU9OCisKKyAgICCks6TspM+homptb3JlY2ZnLmggpM7D5qTLpKKk68DfxOq54Mzcpd6lr6XtpMehorC1vcy96M39pMekziBEQ1S3uL/0pM4KKyAgICDOzLvSsr296M39pM7K/cuhpPLK0bm5pLek3qS5oaOlx6XVpaml66XIpMekzyAjdW5kZWYgpMehoiN1bmRlZiCkzr71wtakzgorICAgIMr9pKy54sKupMqkzqTHoaLGw6TLzf3Ns6TOpMqkpLjCpOogI3VuZGVmIKTHu8jN0aS5pOuks6TIpPKkqsGmpOGkpKS/pLcKKyAgICCk3qS5oaMKKworICAgIERDVLe4v/Skzs7Mu9Kyvb3ozf2kyKSkpKakzqTPoaLDvMWqpMu4wKSopNCy6MH8pcehvKW/pMvC0KS3pMaw7KTEsOykxAorICAgILPkpOq7uyjAsL/0vfy7uymk8rzCudSkuaTrpLOkyKTHpLmho6THpLmkrKGivfy7u6TPuLbN/cWqpMu54sKusr2krAorICAgIMnUssTHvaTKpM6kx6GipLOkziBTSU1EILPIxKXIx6THpM/AsL/0vfy7u6TOwuWk76TqpMvAsL/0vui7u6Tyu8jN0aS3pMYKKyAgICDOzLvSsr296M39pPK8wrnUpLekxqSkpN6kuaGjCisKKyAgICCks6TOwLC/9L7ou7uk8sLlzdGkuaTryv3LoaTHpOKhorniwLrF2cCwv/REQ1QvueLCrsCwv/REQ1Sk8rvIpMOkv77sueekx6GiCisgICAgpKukxKGiMKHBMTAwIKTOpLmk2aTGpM6wtb3Mpa+lqqXqpcalo8DfxOqkx6WqpeqluKXKpevIx6TIwbSkr8axpLi367LMpPIKKyAgICC90KS5pLOkyKTys87Hp6S3pMakpKTepLmho6THpLmkrKGisLW9zLLovMGk8iAipa+lqqXqpcaloyIgpM672Mm4pMfA38TqCisgICAgpLukuqGipa+lqqXqpcaloyAwIKTopOqk4sTjsui8waTOzsy70rK9pcahvKXWpeuk8sS+wNzNv6SopMawtb3MpLekv77suecKKyAgICCkyqTJpM+horHpu7vF08PmpM6/9MPNyM+wz6TOtNi3uKTHoaKlqqXqpbilyqXryMekyKTPsNukyqTrt+uyzKSsvdCk66SzpMgKKyAgICCk4sjdxOqkx6StpN6ku6TzoaOkvaSmpKSkw6S/xsO87KTKtq2zpr7yt++yvKTHpOKlqqXqpbilyqXryMekyKTOuN+0ucXZpKwKKyAgICC54qSvpMqk6aTKpLGk7KTQpMqk6aTKpKS+7LnnpMqkyaTLpM+hoqSzpM654MzcpPIgI2RlZmluZSCky6S3pMa7yM3RpLekxgorICAgIKSvpMCktaSkoaO847Szwq7F2aTPze6kwaTepLmkrKGivb7N6KTJpKqk6qGisOykxLDspMS9/Lu7pPK51KTDpMbOzLvSsr0KKyAgICC96M39pPK51KSkpN6kuaGjCisKKyAgICCk4qTDpMik4qGipa+lqqXqpcaloyAwIKTopOqk4sTjsui8waTOwN/E6qTHsLW9zKS3pMak4qGipNukyKTzpMm8ws3RpMsKKyAgICCkyqTqpN6ku6TzpM6kx6GipLOkzsCwv/S+6Lu7pPLC5c3RpLmk68r9y6Gkx6TioaLM5MLqpMukyqTrpLOkyKTPpMqkpKTICisgICAgu9ekpKTepLmhoworCisgIKH7IFVQU0FNUExFX0gxVjJfU1VQUE9SVEVECisKKyAgICCks6TspM+homptb3JlY2ZnLmggpM7D5qTLpKKk66Gipaql6qW4pcql68jHpM4gSUpHIEpQRUcgbGlicmFyeSCky6TPCisgICAgwri636S3pMqkpMDfxOq54Mzcpd6lr6XtpMekuaGjpLOk7KTPoaJZOjF4MiBDYjoxeDEgQ3I6MXgxICg0OjI6MikgpM4KKyAgICCltaXWpbWl86XXpeql86WwyOak8rv9pMQgSlBFRyCl1aWhpaSl66TyoaKlqqXqpbilyqXryMekziBJSkcgSlBFRworICAgIGxpYnJhcnkgpOik6qTiueLCrqG/ueKy6LzBpMvFuLOrpMekraTrpOikpqTLpLmk66TipM6kx6S5oaMKKworICAgIKW1pdaltaXzpdel6qXzpbDI5iBZOjF4MiBDYjoxeDEgQ3I6MXgxICg0OjI6MikgpPK7/aTEIEpQRUcgpdWloaWkpeukz6GiCisgICAgpaql6qW4pcql66TOIElKRyBKUEVHIExpYnJhcnkgpMek4sW4s6ukx6StpN6kuaSsoaKks6TOpbWl1qW1pfOl16XqpfOlsAorICAgIMjmpMvC0LH+pLmk66WipcOl16W1pfOl16XqpfOlsKGmpeuhvKXBpfOkrLTKw7GkyqTipM6kt6SrzdGw1aS1pOykxgorICAgIKSkpMqkpKS/pOGhosW4s6vCrsXZpOLD2aSvoaKk3qS/oaK/p6TOtq3M3KSspM+kw6StpOqkt6TGpKSk66PDo8ey6MH8CisgICAgpMqkyaTOvuy556TPpbil46WuobykrMzczqmkw6TGpLek3qSmpLOkyKSspKKk6qTepLmho6SzpM654MzcpPLNrbj6pMsKKyAgICCkuaTrpLOkyKTHoaKks6TOpOikpqTKpbWl1qW1pfOl16XqpfOlsMjmIFk6MXgyIENiOjF4MSBDcjoxeDEgpPK7/aTECisgICAgSlBFRyCl1aWhpaSl66TyueLCrqTLoaKk3qS/oaKluKXjpa6hvKSszNzOqaS/pMqkpKTopKaky7nisui8waTLxbizqworICAgIKTHpK2k66TopKaky6S3pN6kuaGjCisKKyAgICCks6TOoaKltaXWpbWl86XXpeql86WwyOYgWToxeDIgQ2I6MXgxIENyOjF4MSCkziBKUEVHIKXVpaGlpKXrpM+hoqSipN6k6gorICAgILDsyMzFqqTKpOKkzqTHpM+koqTqpN6ku6TzpKyhoqXHpaOluKW/peulq6XhpemkyqTJpKy90M7PpLmk66SzpMikzsK/pKShogorICAgIKW1pdaltaXzpdel6qXzpbDI5iBZOjJ4MSBDYjoxeDEgQ3I6MXgxICg0OjI6MikgpM4gSlBFRyCl1aWhpaSl66TLwtCkt6TGCisgICAgodZKUEVHIKXtpbml7KW5svPFvqHXvejN/aTyudSkyqSmpMihoqSzpM4gWToxeDIgQ2I6MXgxIENyOjF4MSCkziBKUEVHCisgICAgpdWloaWkpeuky6TKpOqk3qS5oaOlx6Wjpbilv6Xrpaul4aXppMehoqWrpeGl6aTyvcSky6S3pMahyr3EsMzD1qTHocu7o7HGCisgICAgpLekv7Lowfyk8qHWSlBFRyCl7aW5peylubLzxb6h16S3pMbAtb7vpMq4/qStpMvEvqS5oaKkyqTJpMikpKSmpLOkyKTPoaIKKyAgICCk6KSvpOSk66SzpMikwKTIu9ekpKTepLmho6THpLmkrKGipLOkzqTopKakyqHWSlBFRyCl7aW5peylubLzxb6h16S1pOykvworICAgIEpQRUcgpdWloaWkpeuk8qWqpeqluKXKpeukziBJSkcgSlBFRyBMaWJyYXJ5IKTHxbizq6S5pOukyKGivuW1raTOzf3Ns6SrpOmhogorICAgIEpQRUcgpdWloaWkpeuk8sW4s6ukt6TGpKuk6bLowfy96M39pb2l1aXIpMey88W+pLWku6S/sujB/KTLyOak2aTGsui8waSsCisgICAgzvSkw6TGpLek3qSkpN6kuaGjpLOkzrngzNyk8s2tuPqky6S5pOuks6TIpMehorLowfy96M39pb2l1aXIpMey88W+pLWku6S/CisgICAgsujB/KTIpNuk3MaxpLilr6WqpeqlxqWjpMey6MH8pPLFuLOrpLmk66SzpMikrLLEx72ky6TKpOqk3qS5oaMKKworICAgIKSzpM654MzcpM+hosbDpMvN/c2zpM6kyqSkuMKk6qGiI2RlZmluZSCkzr71wtaky6S3pMakqqSvpLOkyKTypKrBpqThCisgICAgpKSkv6S3pN6kuaGjpaql6qW4pcql66TOIElKRyBKUEVHIExpYnJhcnkgpMi0sMG0pMvGsbDspM6367LMpKzJrM3XpMoKKyAgICC+7LnnpM6k3yAjdW5kZWYgpMukt6TGpbOl86XRpaSl66S3pMakr6TApLWkpKGjCisKKworCitbRU9GXQpkaWZmIC0tZ2l0IGEvamNvbmZpZy5iY2MgYi91bnVzZWQvamNvbmZpZy5iY2MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGpjb25maWcuYmNjCnJlbmFtZSB0byB1bnVzZWQvamNvbmZpZy5iY2MKZGlmZiAtLWdpdCBhL2pjb25maWcubWFjIGIvdW51c2VkL2pjb25maWcubWFjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBqY29uZmlnLm1hYwpyZW5hbWUgdG8gdW51c2VkL2pjb25maWcubWFjCmRpZmYgLS1naXQgYS9qY29uZmlnLm1hbnggYi91bnVzZWQvamNvbmZpZy5tYW54CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBqY29uZmlnLm1hbngKcmVuYW1lIHRvIHVudXNlZC9qY29uZmlnLm1hbngKZGlmZiAtLWdpdCBhL2pjb25maWcubWM2IGIvdW51c2VkL2pjb25maWcubWM2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBqY29uZmlnLm1jNgpyZW5hbWUgdG8gdW51c2VkL2pjb25maWcubWM2CmRpZmYgLS1naXQgYS9qY29uZmlnLnNhcyBiL3VudXNlZC9qY29uZmlnLnNhcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gamNvbmZpZy5zYXMKcmVuYW1lIHRvIHVudXNlZC9qY29uZmlnLnNhcwpkaWZmIC0tZ2l0IGEvamNvbmZpZy5zdCBiL3VudXNlZC9qY29uZmlnLnN0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBqY29uZmlnLnN0CnJlbmFtZSB0byB1bnVzZWQvamNvbmZpZy5zdApkaWZmIC0tZ2l0IGEvamNvbmZpZy52bXMgYi91bnVzZWQvamNvbmZpZy52bXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGpjb25maWcudm1zCnJlbmFtZSB0byB1bnVzZWQvamNvbmZpZy52bXMKZGlmZiAtLWdpdCBhL2pjb25maWcud2F0IGIvdW51c2VkL2pjb25maWcud2F0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBqY29uZmlnLndhdApyZW5hbWUgdG8gdW51c2VkL2pjb25maWcud2F0CmRpZmYgLS1naXQgYS9qZmRjdGZsdC5jIGIvdW51c2VkL2pmZGN0Zmx0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGpmZGN0Zmx0LmMKcmVuYW1lIHRvIHVudXNlZC9qZmRjdGZsdC5jCmRpZmYgLS1naXQgYS9qZmRjdGZzdC5jIGIvdW51c2VkL2pmZGN0ZnN0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGpmZGN0ZnN0LmMKcmVuYW1lIHRvIHVudXNlZC9qZmRjdGZzdC5jCmRpZmYgLS1naXQgYS9qZmRjdGludC5jIGIvdW51c2VkL2pmZGN0aW50LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGpmZGN0aW50LmMKcmVuYW1lIHRvIHVudXNlZC9qZmRjdGludC5jCmRpZmYgLS1naXQgYS9qaWRjdGZsdC5jIGIvdW51c2VkL2ppZGN0Zmx0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGppZGN0Zmx0LmMKcmVuYW1lIHRvIHVudXNlZC9qaWRjdGZsdC5jCmRpZmYgLS1naXQgYS9qaWRjdGZzdC5jIGIvdW51c2VkL2ppZGN0ZnN0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGppZGN0ZnN0LmMKcmVuYW1lIHRvIHVudXNlZC9qaWRjdGZzdC5jCmRpZmYgLS1naXQgYS9qaWRjdGludC5jIGIvdW51c2VkL2ppZGN0aW50LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGppZGN0aW50LmMKcmVuYW1lIHRvIHVudXNlZC9qaWRjdGludC5jCmRpZmYgLS1naXQgYS9qaWRjdHJlZC5jIGIvdW51c2VkL2ppZGN0cmVkLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGppZGN0cmVkLmMKcmVuYW1lIHRvIHVudXNlZC9qaWRjdHJlZC5jCmRpZmYgLS1naXQgYS9qbWVtZG9zLmMgYi91bnVzZWQvam1lbWRvcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBqbWVtZG9zLmMKcmVuYW1lIHRvIHVudXNlZC9qbWVtZG9zLmMKZGlmZiAtLWdpdCBhL2ptZW1kb3NhLmFzbSBiL3VudXNlZC9qbWVtZG9zYS5hc20Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGptZW1kb3NhLmFzbQpyZW5hbWUgdG8gdW51c2VkL2ptZW1kb3NhLmFzbQpkaWZmIC0tZ2l0IGEvam1lbW1hYy5jIGIvdW51c2VkL2ptZW1tYWMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gam1lbW1hYy5jCnJlbmFtZSB0byB1bnVzZWQvam1lbW1hYy5jCmRpZmYgLS1naXQgYS9tYWtjanBlZy5zdCBiL3VudXNlZC9tYWtjanBlZy5zdApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWFrY2pwZWcuc3QKcmVuYW1lIHRvIHVudXNlZC9tYWtjanBlZy5zdApkaWZmIC0tZ2l0IGEvbWFrZGpwZWcuc3QgYi91bnVzZWQvbWFrZGpwZWcuc3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ha2RqcGVnLnN0CnJlbmFtZSB0byB1bnVzZWQvbWFrZGpwZWcuc3QKZGlmZiAtLWdpdCBhL21ha2VhcHBzLmRzIGIvdW51c2VkL21ha2VhcHBzLmRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtYWtlYXBwcy5kcwpyZW5hbWUgdG8gdW51c2VkL21ha2VhcHBzLmRzCmRpZmYgLS1naXQgYS9tYWtlZmlsZS5iY2MgYi91bnVzZWQvbWFrZWZpbGUuYmNjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtYWtlZmlsZS5iY2MKcmVuYW1lIHRvIHVudXNlZC9tYWtlZmlsZS5iY2MKZGlmZiAtLWdpdCBhL21ha2VmaWxlLm1hbnggYi91bnVzZWQvbWFrZWZpbGUubWFueApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWFrZWZpbGUubWFueApyZW5hbWUgdG8gdW51c2VkL21ha2VmaWxlLm1hbngKZGlmZiAtLWdpdCBhL21ha2VmaWxlLm1jNiBiL3VudXNlZC9tYWtlZmlsZS5tYzYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ha2VmaWxlLm1jNgpyZW5hbWUgdG8gdW51c2VkL21ha2VmaWxlLm1jNgpkaWZmIC0tZ2l0IGEvbWFrZWZpbGUubW1zIGIvdW51c2VkL21ha2VmaWxlLm1tcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWFrZWZpbGUubW1zCnJlbmFtZSB0byB1bnVzZWQvbWFrZWZpbGUubW1zCmRpZmYgLS1naXQgYS9tYWtlZmlsZS5zYXMgYi91bnVzZWQvbWFrZWZpbGUuc2FzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtYWtlZmlsZS5zYXMKcmVuYW1lIHRvIHVudXNlZC9tYWtlZmlsZS5zYXMKZGlmZiAtLWdpdCBhL21ha2VmaWxlLnZtcyBiL3VudXNlZC9tYWtlZmlsZS52bXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ha2VmaWxlLnZtcwpyZW5hbWUgdG8gdW51c2VkL21ha2VmaWxlLnZtcwpkaWZmIC0tZ2l0IGEvbWFrZWZpbGUud2F0IGIvdW51c2VkL21ha2VmaWxlLndhdApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWFrZWZpbGUud2F0CnJlbmFtZSB0byB1bnVzZWQvbWFrZWZpbGUud2F0CmRpZmYgLS1naXQgYS9tYWtlbGliLmRzIGIvdW51c2VkL21ha2VsaWIuZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ha2VsaWIuZHMKcmVuYW1lIHRvIHVudXNlZC9tYWtlbGliLmRzCmRpZmYgLS1naXQgYS9tYWtlcHJvai5tYWMgYi91bnVzZWQvbWFrZXByb2oubWFjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtYWtlcHJvai5tYWMKcmVuYW1lIHRvIHVudXNlZC9tYWtlcHJvai5tYWMKZGlmZiAtLWdpdCBhL21ha2xqcGVnLnN0IGIvdW51c2VkL21ha2xqcGVnLnN0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtYWtsanBlZy5zdApyZW5hbWUgdG8gdW51c2VkL21ha2xqcGVnLnN0CmRpZmYgLS1naXQgYS9tYWt0anBlZy5zdCBiL3VudXNlZC9tYWt0anBlZy5zdApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWFrdGpwZWcuc3QKcmVuYW1lIHRvIHVudXNlZC9tYWt0anBlZy5zdApkaWZmIC0tZ2l0IGEvbWFrdm1zLm9wdCBiL3VudXNlZC9tYWt2bXMub3B0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtYWt2bXMub3B0CnJlbmFtZSB0byB1bnVzZWQvbWFrdm1zLm9wdApkaWZmIC0tZ2l0IGEvdW51c2VkL3JkZ2lmLmMgYi91bnVzZWQvcmRnaWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjdjMTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdW51c2VkL3JkZ2lmLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIHJkZ2lmLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byByZWFkIGlucHV0IGltYWdlcyBpbiBHSUYgZm9ybWF0LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9URTogdG8gYXZvaWQgZW50YW5nbGVtZW50cyB3aXRoIFVuaXN5cycgcGF0ZW50IG9uIExaVyBjb21wcmVzc2lvbiwgICAgICAqCisgKiB0aGUgYWJpbGl0eSB0byByZWFkIEdJRiBmaWxlcyBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIElKRyBkaXN0cmlidXRpb24uICoKKyAqIFNvcnJ5IGFib3V0IHRoYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogV2UgYXJlIHJlcXVpcmVkIHRvIHN0YXRlIHRoYXQKKyAqICAgICJUaGUgR3JhcGhpY3MgSW50ZXJjaGFuZ2UgRm9ybWF0KGMpIGlzIHRoZSBDb3B5cmlnaHQgcHJvcGVydHkgb2YKKyAqICAgIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLiBHSUYoc20pIGlzIGEgU2VydmljZSBNYXJrIHByb3BlcnR5IG9mCisgKiAgICBDb21wdVNlcnZlIEluY29ycG9yYXRlZC4iCisgKi8KKworI2luY2x1ZGUgImNkanBlZy5oIgkJLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKworI2lmZGVmIEdJRl9TVVBQT1JURUQKKworLyoKKyAqIFRoZSBtb2R1bGUgc2VsZWN0aW9uIHJvdXRpbmUgZm9yIEdJRiBmb3JtYXQgaW5wdXQuCisgKi8KKworR0xPQkFMKGNqcGVnX3NvdXJjZV9wdHIpCitqaW5pdF9yZWFkX2dpZiAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIGZwcmludGYoc3RkZXJyLCAiR0lGIGlucHV0IGlzIHVuc3VwcG9ydGVkIGZvciBsZWdhbCByZWFzb25zLiAgU29ycnkuXG4iKTsKKyAgZXhpdChFWElUX0ZBSUxVUkUpOworICByZXR1cm4gTlVMTDsJCQkvKiBrZWVwIGNvbXBpbGVyIGhhcHB5ICovCit9CisKKyNlbmRpZiAvKiBHSUZfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS91bnVzZWQvd3JnaWYuYyBiL3VudXNlZC93cmdpZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZTgzMjgKLS0tIC9kZXYvbnVsbAorKysgYi91bnVzZWQvd3JnaWYuYwpAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIHdyZ2lmLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byB3cml0ZSBvdXRwdXQgaW1hZ2VzIGluIEdJRiBmb3JtYXQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOT1RFOiB0byBhdm9pZCBlbnRhbmdsZW1lbnRzIHdpdGggVW5pc3lzJyBwYXRlbnQgb24gTFpXIGNvbXByZXNzaW9uLCAgICoKKyAqIHRoaXMgY29kZSBoYXMgYmVlbiBtb2RpZmllZCB0byBvdXRwdXQgInVuY29tcHJlc3NlZCBHSUYiIGZpbGVzLiAgICAgICAgKgorICogVGhlcmUgaXMgbm8gdHJhY2Ugb2YgdGhlIExaVyBhbGdvcml0aG0gaW4gdGhpcyBmaWxlLiAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGVzZSByb3V0aW5lcyBtYXkgbmVlZCBtb2RpZmljYXRpb24gZm9yIG5vbi1Vbml4IGVudmlyb25tZW50cyBvcgorICogc3BlY2lhbGl6ZWQgYXBwbGljYXRpb25zLiAgQXMgdGhleSBzdGFuZCwgdGhleSBhc3N1bWUgb3V0cHV0IHRvCisgKiBhbiBvcmRpbmFyeSBzdGRpbyBzdHJlYW0uCisgKi8KKworLyoKKyAqIFRoaXMgY29kZSBpcyBsb29zZWx5IGJhc2VkIG9uIHBwbXRvZ2lmIGZyb20gdGhlIFBCTVBMVVMgZGlzdHJpYnV0aW9uCisgKiBvZiBGZWIuIDE5OTEuICBUaGF0IGZpbGUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlOgorICogICAgQmFzZWQgb24gR0lGRU5DT0RFIGJ5IERhdmlkIFJvd2xleSA8bWdhcmRpQHdhdGRzY3Uud2F0ZXJsb28uZWR1Pi4KKyAqICAgIExlbXBlbC1aaXYgY29tcHJlc3Npb24gYmFzZWQgb24gImNvbXByZXNzIiBieSBTcGVuY2VyIFcuIFRob21hcyBldCBhbC4KKyAqICAgIENvcHlyaWdodCAoQykgMTk4OSBieSBKZWYgUG9za2FuemVyLgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiAgICBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkCisgKiAgICB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogICAgZG9jdW1lbnRhdGlvbi4gIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IKKyAqICAgIGltcGxpZWQgd2FycmFudHkuCisgKgorICogV2UgYXJlIGFsc28gcmVxdWlyZWQgdG8gc3RhdGUgdGhhdAorICogICAgIlRoZSBHcmFwaGljcyBJbnRlcmNoYW5nZSBGb3JtYXQoYykgaXMgdGhlIENvcHlyaWdodCBwcm9wZXJ0eSBvZgorICogICAgQ29tcHVTZXJ2ZSBJbmNvcnBvcmF0ZWQuIEdJRihzbSkgaXMgYSBTZXJ2aWNlIE1hcmsgcHJvcGVydHkgb2YKKyAqICAgIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLiIKKyAqLworCisjaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworCisjaWZkZWYgR0lGX1NVUFBPUlRFRAorCisKKy8qIFByaXZhdGUgdmVyc2lvbiBvZiBkYXRhIGRlc3RpbmF0aW9uIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBkanBlZ19kZXN0X3N0cnVjdCBwdWI7CS8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBqX2RlY29tcHJlc3NfcHRyIGNpbmZvOwkvKiBiYWNrIGxpbmsgc2F2ZXMgcGFzc2luZyBzZXBhcmF0ZSBwYXJtICovCisKKyAgLyogU3RhdGUgZm9yIHBhY2tpbmcgdmFyaWFibGUtd2lkdGggY29kZXMgaW50byBhIGJpdHN0cmVhbSAqLworICBpbnQgbl9iaXRzOwkJCS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJpdHMvY29kZSAqLworICBpbnQgbWF4Y29kZTsJCQkvKiBtYXhpbXVtIGNvZGUsIGdpdmVuIG5fYml0cyAqLworICBJTlQzMiBjdXJfYWNjdW07CQkvKiBob2xkcyBiaXRzIG5vdCB5ZXQgb3V0cHV0ICovCisgIGludCBjdXJfYml0czsJCQkvKiAjIG9mIGJpdHMgaW4gY3VyX2FjY3VtICovCisKKyAgLyogU3RhdGUgZm9yIEdJRiBjb2RlIGFzc2lnbm1lbnQgKi8KKyAgaW50IENsZWFyQ29kZTsJCS8qIGNsZWFyIGNvZGUgKGRvZXNuJ3QgY2hhbmdlKSAqLworICBpbnQgRU9GQ29kZTsJCQkvKiBFT0YgY29kZSAoZGl0dG8pICovCisgIGludCBjb2RlX2NvdW50ZXI7CQkvKiBjb3VudHMgb3V0cHV0IHN5bWJvbHMgKi8KKworICAvKiBHSUYgZGF0YSBwYWNrZXQgY29uc3RydWN0aW9uIGJ1ZmZlciAqLworICBpbnQgYnl0ZXNpbnBrdDsJCS8qICMgb2YgYnl0ZXMgaW4gY3VycmVudCBwYWNrZXQgKi8KKyAgY2hhciBwYWNrZXRidWZbMjU2XTsJCS8qIHdvcmtzcGFjZSBmb3IgYWNjdW11bGF0aW5nIHBhY2tldCAqLworCit9IGdpZl9kZXN0X3N0cnVjdDsKKwordHlwZWRlZiBnaWZfZGVzdF9zdHJ1Y3QgKiBnaWZfZGVzdF9wdHI7CisKKy8qIExhcmdlc3QgdmFsdWUgdGhhdCB3aWxsIGZpdCBpbiBOIGJpdHMgKi8KKyNkZWZpbmUgTUFYQ09ERShuX2JpdHMpCSgoMSA8PCAobl9iaXRzKSkgLSAxKQorCisKKy8qCisgKiBSb3V0aW5lcyB0byBwYWNrYWdlIGZpbmlzaGVkIGRhdGEgYnl0ZXMgaW50byBHSUYgZGF0YSBibG9ja3MuCisgKiBBIGRhdGEgYmxvY2sgY29uc2lzdHMgb2YgYSBjb3VudCBieXRlICgxLi4yNTUpIGFuZCB0aGF0IG1hbnkgZGF0YSBieXRlcy4KKyAqLworCitMT0NBTCh2b2lkKQorZmx1c2hfcGFja2V0IChnaWZfZGVzdF9wdHIgZGluZm8pCisvKiBmbHVzaCBhbnkgYWNjdW11bGF0ZWQgZGF0YSAqLworeworICBpZiAoZGluZm8tPmJ5dGVzaW5wa3QgPiAwKSB7CS8qIG5ldmVyIHdyaXRlIHplcm8tbGVuZ3RoIHBhY2tldCAqLworICAgIGRpbmZvLT5wYWNrZXRidWZbMF0gPSAoY2hhcikgZGluZm8tPmJ5dGVzaW5wa3QrKzsKKyAgICBpZiAoSkZXUklURShkaW5mby0+cHViLm91dHB1dF9maWxlLCBkaW5mby0+cGFja2V0YnVmLCBkaW5mby0+Ynl0ZXNpbnBrdCkKKwkhPSAoc2l6ZV90KSBkaW5mby0+Ynl0ZXNpbnBrdCkKKyAgICAgIEVSUkVYSVQoZGluZm8tPmNpbmZvLCBKRVJSX0ZJTEVfV1JJVEUpOworICAgIGRpbmZvLT5ieXRlc2lucGt0ID0gMDsKKyAgfQorfQorCisKKy8qIEFkZCBhIGNoYXJhY3RlciB0byBjdXJyZW50IHBhY2tldDsgZmx1c2ggdG8gZGlzayBpZiBuZWNlc3NhcnkgKi8KKyNkZWZpbmUgQ0hBUl9PVVQoZGluZm8sYykgIFwKKwl7IChkaW5mbyktPnBhY2tldGJ1ZlsrKyhkaW5mbyktPmJ5dGVzaW5wa3RdID0gKGNoYXIpIChjKTsgIFwKKwkgICAgaWYgKChkaW5mbyktPmJ5dGVzaW5wa3QgPj0gMjU1KSAgXAorCSAgICAgIGZsdXNoX3BhY2tldChkaW5mbyk7ICBcCisJfQorCisKKy8qIFJvdXRpbmUgdG8gY29udmVydCB2YXJpYWJsZS13aWR0aCBjb2RlcyBpbnRvIGEgYnl0ZSBzdHJlYW0gKi8KKworTE9DQUwodm9pZCkKK291dHB1dCAoZ2lmX2Rlc3RfcHRyIGRpbmZvLCBpbnQgY29kZSkKKy8qIEVtaXQgYSBjb2RlIG9mIG5fYml0cyBiaXRzICovCisvKiBVc2VzIGN1cl9hY2N1bSBhbmQgY3VyX2JpdHMgdG8gcmVibG9jayBpbnRvIDgtYml0IGJ5dGVzICovCit7CisgIGRpbmZvLT5jdXJfYWNjdW0gfD0gKChJTlQzMikgY29kZSkgPDwgZGluZm8tPmN1cl9iaXRzOworICBkaW5mby0+Y3VyX2JpdHMgKz0gZGluZm8tPm5fYml0czsKKworICB3aGlsZSAoZGluZm8tPmN1cl9iaXRzID49IDgpIHsKKyAgICBDSEFSX09VVChkaW5mbywgZGluZm8tPmN1cl9hY2N1bSAmIDB4RkYpOworICAgIGRpbmZvLT5jdXJfYWNjdW0gPj49IDg7CisgICAgZGluZm8tPmN1cl9iaXRzIC09IDg7CisgIH0KK30KKworCisvKiBUaGUgcHNldWRvLWNvbXByZXNzaW9uIGFsZ29yaXRobS4KKyAqCisgKiBJbiB0aGlzIG1vZHVsZSB3ZSBzaW1wbHkgb3V0cHV0IGVhY2ggcGl4ZWwgdmFsdWUgYXMgYSBzZXBhcmF0ZSBzeW1ib2w7CisgKiB0aHVzLCBubyBjb21wcmVzc2lvbiBvY2N1cnMuICBJbiBmYWN0LCB0aGVyZSBpcyBleHBhbnNpb24gb2Ygb25lIGJpdCBwZXIKKyAqIHBpeGVsLCBiZWNhdXNlIHdlIHVzZSBhIHN5bWJvbCB3aWR0aCBvbmUgYml0IHdpZGVyIHRoYW4gdGhlIHBpeGVsIHdpZHRoLgorICoKKyAqIEdJRiBvcmRpbmFyaWx5IHVzZXMgdmFyaWFibGUtd2lkdGggc3ltYm9scywgYW5kIHRoZSBkZWNvZGVyIHdpbGwgZXhwZWN0CisgKiB0byByYXRjaGV0IHVwIHRoZSBzeW1ib2wgd2lkdGggYWZ0ZXIgYSBmaXhlZCBudW1iZXIgb2Ygc3ltYm9scy4KKyAqIFRvIHNpbXBsaWZ5IHRoZSBsb2dpYyBhbmQga2VlcCB0aGUgZXhwYW5zaW9uIHBlbmFsdHkgZG93biwgd2UgZW1pdCBhCisgKiBHSUYgQ2xlYXIgY29kZSB0byByZXNldCB0aGUgZGVjb2RlciBqdXN0IGJlZm9yZSB0aGUgd2lkdGggd291bGQgcmF0Y2hldCB1cC4KKyAqIFRodXMsIGFsbCB0aGUgc3ltYm9scyBpbiB0aGUgb3V0cHV0IGZpbGUgd2lsbCBoYXZlIHRoZSBzYW1lIGJpdCB3aWR0aC4KKyAqIE5vdGUgdGhhdCBlbWl0dGluZyB0aGUgQ2xlYXIgY29kZXMgYXQgdGhlIHJpZ2h0IHRpbWVzIGlzIGEgbWVyZSBtYXR0ZXIgb2YKKyAqIGNvdW50aW5nIG91dHB1dCBzeW1ib2xzIGFuZCBpcyBpbiBubyB3YXkgZGVwZW5kZW50IG9uIHRoZSBMWlcgcGF0ZW50LgorICoKKyAqIFdpdGggYSBzbWFsbCBiYXNpYyBwaXhlbCB3aWR0aCAobG93IGNvbG9yIGNvdW50KSwgQ2xlYXIgY29kZXMgd2lsbCBiZQorICogbmVlZGVkIHZlcnkgZnJlcXVlbnRseSwgY2F1c2luZyB0aGUgZmlsZSB0byBleHBhbmQgZXZlbiBtb3JlLiAgU28gdGhpcworICogc2ltcGxpc3RpYyBhcHByb2FjaCB3b3VsZG4ndCB3b3JrIHRvbyB3ZWxsIG9uIGJpbGV2ZWwgaW1hZ2VzLCBmb3IgZXhhbXBsZS4KKyAqIEJ1dCBmb3Igb3V0cHV0IG9mIEpQRUcgY29udmVyc2lvbnMgdGhlIHBpeGVsIHdpZHRoIHdpbGwgdXN1YWxseSBiZSA4IGJpdHMKKyAqICgxMjkgdG8gMjU2IGNvbG9ycyksIHNvIHRoZSBvdmVyaGVhZCBhZGRlZCBieSBDbGVhciBzeW1ib2xzIGlzIG9ubHkgYWJvdXQKKyAqIG9uZSBzeW1ib2wgaW4gZXZlcnkgMjU2LgorICovCisKK0xPQ0FMKHZvaWQpCitjb21wcmVzc19pbml0IChnaWZfZGVzdF9wdHIgZGluZm8sIGludCBpX2JpdHMpCisvKiBJbml0aWFsaXplIHBzZXVkby1jb21wcmVzc29yICovCit7CisgIC8qIGluaXQgYWxsIHRoZSBzdGF0ZSB2YXJpYWJsZXMgKi8KKyAgZGluZm8tPm5fYml0cyA9IGlfYml0czsKKyAgZGluZm8tPm1heGNvZGUgPSBNQVhDT0RFKGRpbmZvLT5uX2JpdHMpOworICBkaW5mby0+Q2xlYXJDb2RlID0gKDEgPDwgKGlfYml0cyAtIDEpKTsKKyAgZGluZm8tPkVPRkNvZGUgPSBkaW5mby0+Q2xlYXJDb2RlICsgMTsKKyAgZGluZm8tPmNvZGVfY291bnRlciA9IGRpbmZvLT5DbGVhckNvZGUgKyAyOworICAvKiBpbml0IG91dHB1dCBidWZmZXJpbmcgdmFycyAqLworICBkaW5mby0+Ynl0ZXNpbnBrdCA9IDA7CisgIGRpbmZvLT5jdXJfYWNjdW0gPSAwOworICBkaW5mby0+Y3VyX2JpdHMgPSAwOworICAvKiBHSUYgc3BlY2lmaWVzIGFuIGluaXRpYWwgQ2xlYXIgY29kZSAqLworICBvdXRwdXQoZGluZm8sIGRpbmZvLT5DbGVhckNvZGUpOworfQorCisKK0xPQ0FMKHZvaWQpCitjb21wcmVzc19waXhlbCAoZ2lmX2Rlc3RfcHRyIGRpbmZvLCBpbnQgYykKKy8qIEFjY2VwdCBhbmQgImNvbXByZXNzIiBvbmUgcGl4ZWwgdmFsdWUuCisgKiBUaGUgZ2l2ZW4gdmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbl9iaXRzIHdpZGUuCisgKi8KK3sKKyAgLyogT3V0cHV0IHRoZSBnaXZlbiBwaXhlbCB2YWx1ZSBhcyBhIHN5bWJvbC4gKi8KKyAgb3V0cHV0KGRpbmZvLCBjKTsKKyAgLyogSXNzdWUgQ2xlYXIgY29kZXMgb2Z0ZW4gZW5vdWdoIHRvIGtlZXAgdGhlIHJlYWRlciBmcm9tIHJhdGNoZXRpbmcgdXAKKyAgICogaXRzIHN5bWJvbCBzaXplLgorICAgKi8KKyAgaWYgKGRpbmZvLT5jb2RlX2NvdW50ZXIgPCBkaW5mby0+bWF4Y29kZSkgeworICAgIGRpbmZvLT5jb2RlX2NvdW50ZXIrKzsKKyAgfSBlbHNlIHsKKyAgICBvdXRwdXQoZGluZm8sIGRpbmZvLT5DbGVhckNvZGUpOworICAgIGRpbmZvLT5jb2RlX2NvdW50ZXIgPSBkaW5mby0+Q2xlYXJDb2RlICsgMjsJLyogcmVzZXQgdGhlIGNvdW50ZXIgKi8KKyAgfQorfQorCisKK0xPQ0FMKHZvaWQpCitjb21wcmVzc190ZXJtIChnaWZfZGVzdF9wdHIgZGluZm8pCisvKiBDbGVhbiB1cCBhdCBlbmQgKi8KK3sKKyAgLyogU2VuZCBhbiBFT0YgY29kZSAqLworICBvdXRwdXQoZGluZm8sIGRpbmZvLT5FT0ZDb2RlKTsKKyAgLyogRmx1c2ggdGhlIGJpdC1wYWNraW5nIGJ1ZmZlciAqLworICBpZiAoZGluZm8tPmN1cl9iaXRzID4gMCkgeworICAgIENIQVJfT1VUKGRpbmZvLCBkaW5mby0+Y3VyX2FjY3VtICYgMHhGRik7CisgIH0KKyAgLyogRmx1c2ggdGhlIHBhY2tldCBidWZmZXIgKi8KKyAgZmx1c2hfcGFja2V0KGRpbmZvKTsKK30KKworCisvKiBHSUYgaGVhZGVyIGNvbnN0cnVjdGlvbiAqLworCisKK0xPQ0FMKHZvaWQpCitwdXRfd29yZCAoZ2lmX2Rlc3RfcHRyIGRpbmZvLCB1bnNpZ25lZCBpbnQgdykKKy8qIEVtaXQgYSAxNi1iaXQgd29yZCwgTFNCIGZpcnN0ICovCit7CisgIHB1dGModyAmIDB4RkYsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICBwdXRjKCh3ID4+IDgpICYgMHhGRiwgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7Cit9CisKKworTE9DQUwodm9pZCkKK3B1dF8zYnl0ZXMgKGdpZl9kZXN0X3B0ciBkaW5mbywgaW50IHZhbCkKKy8qIEVtaXQgMyBjb3BpZXMgb2Ygc2FtZSBieXRlIHZhbHVlIC0tLSBoYW5keSBzdWJyIGZvciBjb2xvcm1hcCBjb25zdHJ1Y3Rpb24gKi8KK3sKKyAgcHV0Yyh2YWwsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICBwdXRjKHZhbCwgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7CisgIHB1dGModmFsLCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKK30KKworCitMT0NBTCh2b2lkKQorZW1pdF9oZWFkZXIgKGdpZl9kZXN0X3B0ciBkaW5mbywgaW50IG51bV9jb2xvcnMsIEpTQU1QQVJSQVkgY29sb3JtYXApCisvKiBPdXRwdXQgdGhlIEdJRiBmaWxlIGhlYWRlciwgaW5jbHVkaW5nIGNvbG9yIG1hcCAqLworLyogSWYgY29sb3JtYXA9PU5VTEwsIHN5bnRoZXNpemUgYSBncmF5LXNjYWxlIGNvbG9ybWFwICovCit7CisgIGludCBCaXRzUGVyUGl4ZWwsIENvbG9yTWFwU2l6ZSwgSW5pdENvZGVTaXplLCBGbGFnQnl0ZTsKKyAgaW50IGNzaGlmdCA9IGRpbmZvLT5jaW5mby0+ZGF0YV9wcmVjaXNpb24gLSA4OworICBpbnQgaTsKKworICBpZiAobnVtX2NvbG9ycyA+IDI1NikKKyAgICBFUlJFWElUMShkaW5mby0+Y2luZm8sIEpFUlJfVE9PX01BTllfQ09MT1JTLCBudW1fY29sb3JzKTsKKyAgLyogQ29tcHV0ZSBiaXRzL3BpeGVsIGFuZCByZWxhdGVkIHZhbHVlcyAqLworICBCaXRzUGVyUGl4ZWwgPSAxOworICB3aGlsZSAobnVtX2NvbG9ycyA+ICgxIDw8IEJpdHNQZXJQaXhlbCkpCisgICAgQml0c1BlclBpeGVsKys7CisgIENvbG9yTWFwU2l6ZSA9IDEgPDwgQml0c1BlclBpeGVsOworICBpZiAoQml0c1BlclBpeGVsIDw9IDEpCisgICAgSW5pdENvZGVTaXplID0gMjsKKyAgZWxzZQorICAgIEluaXRDb2RlU2l6ZSA9IEJpdHNQZXJQaXhlbDsKKyAgLyoKKyAgICogV3JpdGUgdGhlIEdJRiBoZWFkZXIuCisgICAqIE5vdGUgdGhhdCB3ZSBnZW5lcmF0ZSBhIHBsYWluIEdJRjg3IGhlYWRlciBmb3IgbWF4aW11bSBjb21wYXRpYmlsaXR5LgorICAgKi8KKyAgcHV0YygnRycsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICBwdXRjKCdJJywgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7CisgIHB1dGMoJ0YnLCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKyAgcHV0YygnOCcsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICBwdXRjKCc3JywgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7CisgIHB1dGMoJ2EnLCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKyAgLyogV3JpdGUgdGhlIExvZ2ljYWwgU2NyZWVuIERlc2NyaXB0b3IgKi8KKyAgcHV0X3dvcmQoZGluZm8sICh1bnNpZ25lZCBpbnQpIGRpbmZvLT5jaW5mby0+b3V0cHV0X3dpZHRoKTsKKyAgcHV0X3dvcmQoZGluZm8sICh1bnNpZ25lZCBpbnQpIGRpbmZvLT5jaW5mby0+b3V0cHV0X2hlaWdodCk7CisgIEZsYWdCeXRlID0gMHg4MDsJCS8qIFllcywgdGhlcmUgaXMgYSBnbG9iYWwgY29sb3IgdGFibGUgKi8KKyAgRmxhZ0J5dGUgfD0gKEJpdHNQZXJQaXhlbC0xKSA8PCA0OyAvKiBjb2xvciByZXNvbHV0aW9uICovCisgIEZsYWdCeXRlIHw9IChCaXRzUGVyUGl4ZWwtMSk7CS8qIHNpemUgb2YgZ2xvYmFsIGNvbG9yIHRhYmxlICovCisgIHB1dGMoRmxhZ0J5dGUsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICBwdXRjKDAsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOyAvKiBCYWNrZ3JvdW5kIGNvbG9yIGluZGV4ICovCisgIHB1dGMoMCwgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7IC8qIFJlc2VydmVkIChhc3BlY3QgcmF0aW8gaW4gR0lGODkpICovCisgIC8qIFdyaXRlIHRoZSBHbG9iYWwgQ29sb3IgTWFwICovCisgIC8qIElmIHRoZSBjb2xvciBtYXAgaXMgbW9yZSB0aGFuIDggYml0cyBwcmVjaXNpb24sICovCisgIC8qIHdlIHJlZHVjZSBpdCB0byA4IGJpdHMgYnkgc2hpZnRpbmcgKi8KKyAgZm9yIChpPTA7IGkgPCBDb2xvck1hcFNpemU7IGkrKykgeworICAgIGlmIChpIDwgbnVtX2NvbG9ycykgeworICAgICAgaWYgKGNvbG9ybWFwICE9IE5VTEwpIHsKKwlpZiAoZGluZm8tPmNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQikgeworCSAgLyogTm9ybWFsIGNhc2U6IFJHQiBjb2xvciBtYXAgKi8KKwkgIHB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFswXVtpXSkgPj4gY3NoaWZ0LCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKwkgIHB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFsxXVtpXSkgPj4gY3NoaWZ0LCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKwkgIHB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFsyXVtpXSkgPj4gY3NoaWZ0LCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKwl9IGVsc2UgeworCSAgLyogR3JheXNjYWxlICJjb2xvciBtYXAiOiBwb3NzaWJsZSBpZiBxdWFudGl6aW5nIGdyYXlzY2FsZSBpbWFnZSAqLworCSAgcHV0XzNieXRlcyhkaW5mbywgR0VUSlNBTVBMRShjb2xvcm1hcFswXVtpXSkgPj4gY3NoaWZ0KTsKKwl9CisgICAgICB9IGVsc2UgeworCS8qIENyZWF0ZSBhIGdyYXktc2NhbGUgbWFwIG9mIG51bV9jb2xvcnMgdmFsdWVzLCByYW5nZSAwLi4yNTUgKi8KKwlwdXRfM2J5dGVzKGRpbmZvLCAoaSAqIDI1NSArIChudW1fY29sb3JzLTEpLzIpIC8gKG51bV9jb2xvcnMtMSkpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAvKiBmaWxsIG91dCB0aGUgbWFwIHRvIGEgcG93ZXIgb2YgMiAqLworICAgICAgcHV0XzNieXRlcyhkaW5mbywgMCk7CisgICAgfQorICB9CisgIC8qIFdyaXRlIGltYWdlIHNlcGFyYXRvciBhbmQgSW1hZ2UgRGVzY3JpcHRvciAqLworICBwdXRjKCcsJywgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7IC8qIHNlcGFyYXRvciAqLworICBwdXRfd29yZChkaW5mbywgMCk7CQkvKiBsZWZ0L3RvcCBvZmZzZXQgKi8KKyAgcHV0X3dvcmQoZGluZm8sIDApOworICBwdXRfd29yZChkaW5mbywgKHVuc2lnbmVkIGludCkgZGluZm8tPmNpbmZvLT5vdXRwdXRfd2lkdGgpOyAvKiBpbWFnZSBzaXplICovCisgIHB1dF93b3JkKGRpbmZvLCAodW5zaWduZWQgaW50KSBkaW5mby0+Y2luZm8tPm91dHB1dF9oZWlnaHQpOworICAvKiBmbGFnIGJ5dGU6IG5vdCBpbnRlcmxhY2VkLCBubyBsb2NhbCBjb2xvciBtYXAgKi8KKyAgcHV0YygweDAwLCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKyAgLyogV3JpdGUgSW5pdGlhbCBDb2RlIFNpemUgYnl0ZSAqLworICBwdXRjKEluaXRDb2RlU2l6ZSwgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7CisKKyAgLyogSW5pdGlhbGl6ZSBmb3IgImNvbXByZXNzaW9uIiBvZiBpbWFnZSBkYXRhICovCisgIGNvbXByZXNzX2luaXQoZGluZm8sIEluaXRDb2RlU2l6ZSsxKTsKK30KKworCisvKgorICogU3RhcnR1cDogd3JpdGUgdGhlIGZpbGUgaGVhZGVyLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfb3V0cHV0X2dpZiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8pCit7CisgIGdpZl9kZXN0X3B0ciBkZXN0ID0gKGdpZl9kZXN0X3B0cikgZGluZm87CisKKyAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpCisgICAgZW1pdF9oZWFkZXIoZGVzdCwgY2luZm8tPmFjdHVhbF9udW1iZXJfb2ZfY29sb3JzLCBjaW5mby0+Y29sb3JtYXApOworICBlbHNlCisgICAgZW1pdF9oZWFkZXIoZGVzdCwgMjU2LCAoSlNBTVBBUlJBWSkgTlVMTCk7Cit9CisKKworLyoKKyAqIFdyaXRlIHNvbWUgcGl4ZWwgZGF0YS4KKyAqIEluIHRoaXMgbW9kdWxlIHJvd3Nfc3VwcGxpZWQgd2lsbCBhbHdheXMgYmUgMS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3B1dF9waXhlbF9yb3dzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbywKKwkJSkRJTUVOU0lPTiByb3dzX3N1cHBsaWVkKQoreworICBnaWZfZGVzdF9wdHIgZGVzdCA9IChnaWZfZGVzdF9wdHIpIGRpbmZvOworICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworCisgIHB0ciA9IGRlc3QtPnB1Yi5idWZmZXJbMF07CisgIGZvciAoY29sID0gY2luZm8tPm91dHB1dF93aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICBjb21wcmVzc19waXhlbChkZXN0LCBHRVRKU0FNUExFKCpwdHIrKykpOworICB9Cit9CisKKworLyoKKyAqIEZpbmlzaCB1cCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICovCisKK01FVEhPRERFRih2b2lkKQorZmluaXNoX291dHB1dF9naWYgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvKQoreworICBnaWZfZGVzdF9wdHIgZGVzdCA9IChnaWZfZGVzdF9wdHIpIGRpbmZvOworCisgIC8qIEZsdXNoICJjb21wcmVzc2lvbiIgbWVjaGFuaXNtICovCisgIGNvbXByZXNzX3Rlcm0oZGVzdCk7CisgIC8qIFdyaXRlIGEgemVyby1sZW5ndGggZGF0YSBibG9jayB0byBlbmQgdGhlIHNlcmllcyAqLworICBwdXRjKDAsIGRlc3QtPnB1Yi5vdXRwdXRfZmlsZSk7CisgIC8qIFdyaXRlIHRoZSBHSUYgdGVybWluYXRvciBtYXJrICovCisgIHB1dGMoJzsnLCBkZXN0LT5wdWIub3V0cHV0X2ZpbGUpOworICAvKiBNYWtlIHN1cmUgd2Ugd3JvdGUgdGhlIG91dHB1dCBmaWxlIE9LICovCisgIGZmbHVzaChkZXN0LT5wdWIub3V0cHV0X2ZpbGUpOworICBpZiAoZmVycm9yKGRlc3QtPnB1Yi5vdXRwdXRfZmlsZSkpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1dSSVRFKTsKK30KKworCisvKgorICogVGhlIG1vZHVsZSBzZWxlY3Rpb24gcm91dGluZSBmb3IgR0lGIGZvcm1hdCBvdXRwdXQuCisgKi8KKworR0xPQkFMKGRqcGVnX2Rlc3RfcHRyKQoramluaXRfd3JpdGVfZ2lmIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBnaWZfZGVzdF9wdHIgZGVzdDsKKworICAvKiBDcmVhdGUgbW9kdWxlIGludGVyZmFjZSBvYmplY3QsIGZpbGwgaW4gbWV0aG9kIHBvaW50ZXJzICovCisgIGRlc3QgPSAoZ2lmX2Rlc3RfcHRyKQorICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkgIFNJWkVPRihnaWZfZGVzdF9zdHJ1Y3QpKTsKKyAgZGVzdC0+Y2luZm8gPSBjaW5mbzsJCS8qIG1ha2UgYmFjayBsaW5rIGZvciBzdWJyb3V0aW5lcyAqLworICBkZXN0LT5wdWIuc3RhcnRfb3V0cHV0ID0gc3RhcnRfb3V0cHV0X2dpZjsKKyAgZGVzdC0+cHViLnB1dF9waXhlbF9yb3dzID0gcHV0X3BpeGVsX3Jvd3M7CisgIGRlc3QtPnB1Yi5maW5pc2hfb3V0cHV0ID0gZmluaXNoX291dHB1dF9naWY7CisKKyAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX0dSQVlTQ0FMRSAmJgorICAgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSAhPSBKQ1NfUkdCKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfR0lGX0NPTE9SU1BBQ0UpOworCisgIC8qIEZvcmNlIHF1YW50aXphdGlvbiBpZiBjb2xvciBvciBpZiA+IDggYml0cyBpbnB1dCAqLworICBpZiAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSAhPSBKQ1NfR1JBWVNDQUxFIHx8IGNpbmZvLT5kYXRhX3ByZWNpc2lvbiA+IDgpIHsKKyAgICAvKiBGb3JjZSBxdWFudGl6YXRpb24gdG8gYXQgbW9zdCAyNTYgY29sb3JzICovCisgICAgY2luZm8tPnF1YW50aXplX2NvbG9ycyA9IFRSVUU7CisgICAgaWYgKGNpbmZvLT5kZXNpcmVkX251bWJlcl9vZl9jb2xvcnMgPiAyNTYpCisgICAgICBjaW5mby0+ZGVzaXJlZF9udW1iZXJfb2ZfY29sb3JzID0gMjU2OworICB9CisKKyAgLyogQ2FsY3VsYXRlIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIHNvIHdlIGNhbiBhbGxvY2F0ZSBzcGFjZSAqLworICBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMoY2luZm8pOworCisgIGlmIChjaW5mby0+b3V0cHV0X2NvbXBvbmVudHMgIT0gMSkgLyogc2FmZXR5IGNoZWNrOiBqdXN0IG9uZSBjb21wb25lbnQ/ICovCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9HSUZfQlVHKTsKKworICAvKiBDcmVhdGUgZGVjb21wcmVzc29yIG91dHB1dCBidWZmZXIuICovCisgIGRlc3QtPnB1Yi5idWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkKKyAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBjaW5mby0+b3V0cHV0X3dpZHRoLCAoSkRJTUVOU0lPTikgMSk7CisgIGRlc3QtPnB1Yi5idWZmZXJfaGVpZ2h0ID0gMTsKKworICByZXR1cm4gKGRqcGVnX2Rlc3RfcHRyKSBkZXN0OworfQorCisjZW5kaWYgLyogR0lGX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvdmM2cHJvai9hcHB0ZXN0LmRzcCBiL3ZjNnByb2ovYXBwdGVzdC5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1YzM1YgotLS0gL2Rldi9udWxsCisrKyBiL3ZjNnByb2ovYXBwdGVzdC5kc3AKQEAgLTAsMCArMSwyNDIgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iYXBwdGVzdCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiDK1L24pLekyqSkpMekr6TApLWkpCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBHZW5lcmljIFByb2plY3QiIDB4MDEwYQorCitDRkc9YXBwdGVzdCAtIFdpbjMyIERlYnVnCishTUVTU0FHRSCks6TspM/Nrbj6pMqO0o6yjriOzI6njrKO2aTHpM+koqTqpN6ku6TzoaMgpLOkzo7Mjt+O2468jt6Oqo64jsSk8o7Ljt6O2Y7Ejt6kuaTrpL+k4aTLpM8gTk1BS0UgpPK7yM3RpLekxqSvpMCktaSkoaMKKyFNRVNTQUdFIFuO0o6yjriOzI6njrKO2aTOjrSOuI69js6O346wjsRdII66js+O3Y7Ejt6k8rvIzdGkt6TGvMK51KS3pMakr6TApLWkpAorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiYXBwdGVzdC5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSCkzrzCudS7/qTLub3ArqTyu9jE6qTHpK2k3qS5CishTUVTU0FHRSCOuo7Pjt2OxI7eII7XjrKO3b7lpMeOz464jtukzsDfxOqk8sTqtcGkt6TepLmho87jOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiYXBwdGVzdC5tYWsiIENGRz0iYXBwdGVzdCAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSDBqsLyssTHvaTKjsuO3o7ZjsSO3iCO046wjsSO3joKKyFNRVNTQUdFIAorIU1FU1NBR0UgImFwcHRlc3QgLSBXaW4zMiBSZWxlYXNlIiAoIldpbjMyICh4ODYpIEdlbmVyaWMgUHJvamVjdCIgzdEpCishTUVTU0FHRSAiYXBwdGVzdCAtIFdpbjMyIERlYnVnIiAoIldpbjMyICh4ODYpIEdlbmVyaWMgUHJvamVjdCIgzdEpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK01UTD1taWRsLmV4ZQorCishSUYgICIkKENGRykiID09ICJhcHB0ZXN0IC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEJlZ2luIFNwZWNpYWwgQnVpbGQgVG9vbAorT3V0RGlyPS5cUmVsZWFzZQorU09VUkNFPSIkKElucHV0UGF0aCkiCitQb3N0QnVpbGRfQ21kcz1mYyAvYiAuXHRlc3RpbWcucHBtICQoT3V0RGlyKVx0ZXN0b3V0LnBwbQlmYyAvYiAuXHRlc3RpbWcuYm1wICQoT3V0RGlyKVx0ZXN0b3V0LmJtcAlmYyAvYiAuXHRlc3RpbWcuanBnICQoT3V0RGlyKVx0ZXN0b3V0LmpwZwlmYyAvYiAuXHRlc3RpbWcucHBtICQoT3V0RGlyKVx0ZXN0b3V0cC5wcG0JZmMgL2IgLlx0ZXN0aW1ncC5qcGcgJChPdXREaXIpXHRlc3RvdXRwLmpwZwlmYyAvYiAuXHRlc3RvcmlnLmpwZyAkKE91dERpcilcdGVzdG91dHQuanBnCisjIEVuZCBTcGVjaWFsIEJ1aWxkIFRvb2wKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImFwcHRlc3QgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBCZWdpbiBTcGVjaWFsIEJ1aWxkIFRvb2wKK091dERpcj0uXERlYnVnCitTT1VSQ0U9IiQoSW5wdXRQYXRoKSIKK1Bvc3RCdWlsZF9DbWRzPWZjIC9iIC5cdGVzdGltZy5wcG0gJChPdXREaXIpXHRlc3RvdXQucHBtCWZjIC9iIC5cdGVzdGltZy5ibXAgJChPdXREaXIpXHRlc3RvdXQuYm1wCWZjIC9iIC5cdGVzdGltZy5qcGcgJChPdXREaXIpXHRlc3RvdXQuanBnCWZjIC9iIC5cdGVzdGltZy5wcG0gJChPdXREaXIpXHRlc3RvdXRwLnBwbQlmYyAvYiAuXHRlc3RpbWdwLmpwZyAkKE91dERpcilcdGVzdG91dHAuanBnCWZjIC9iIC5cdGVzdG9yaWcuanBnICQoT3V0RGlyKVx0ZXN0b3V0dC5qcGcKKyMgRW5kIFNwZWNpYWwgQnVpbGQgVG9vbAorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiYXBwdGVzdCAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgImFwcHRlc3QgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gR3JvdXAgIlRlc3QgSW1hZ2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiKi5qcGc7Ki5ibXA7Ki5wcG0iCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHRlc3RpbWcuYm1wCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx0ZXN0aW1nLmpwZworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cdGVzdGltZy5wcG0KKworIUlGICAiJChDRkcpIiA9PSAiYXBwdGVzdCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkCitJbnB1dERpcj0uCitPdXREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9Llx0ZXN0aW1nLnBwbQorCitCdWlsZENtZHM9IFwKKwllY2hvICQoT3V0RGlyKVxjanBlZyAtZGN0IGludCAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dC5qcGcgLlx0ZXN0aW1nLnBwbSBcCisJJChPdXREaXIpXGNqcGVnIC1kY3QgaW50IC1vdXRmaWxlICQoT3V0RGlyKVx0ZXN0b3V0LmpwZyAuXHRlc3RpbWcucHBtIFwKKwllY2hvICQoT3V0RGlyKVxjanBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW9wdCAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHAuanBnIC5cdGVzdGltZy5wcG0gXAorCSQoT3V0RGlyKVxjanBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW9wdCAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHAuanBnIC5cdGVzdGltZy5wcG0gXAorCQorCisiJChPdXREaXIpXHRlc3RvdXQuanBnIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorICAgJChCdWlsZENtZHMpCisKKyIkKE91dERpcilcdGVzdG91dHAuanBnIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorICAgJChCdWlsZENtZHMpCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImFwcHRlc3QgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBUZXN0aW5nIC0gJChJbnB1dFBhdGgpCitJbnB1dERpcj0uCitPdXREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5cdGVzdGltZy5wcG0KKworQnVpbGRDbWRzPSBcCisJZWNobyAkKE91dERpcilcY2pwZWcgLWRjdCBpbnQgLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXQuanBnIC5cdGVzdGltZy5wcG0gXAorCSQoT3V0RGlyKVxjanBlZyAtZGN0IGludCAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dC5qcGcgLlx0ZXN0aW1nLnBwbSBcCisJZWNobyAkKE91dERpcilcY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXRwLmpwZyAuXHRlc3RpbWcucHBtIFwKKwkkKE91dERpcilcY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXRwLmpwZyAuXHRlc3RpbWcucHBtIFwKKwkKKworIiQoT3V0RGlyKVx0ZXN0b3V0LmpwZyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKyAgICQoQnVpbGRDbWRzKQorCisiJChPdXREaXIpXHRlc3RvdXRwLmpwZyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKyAgICQoQnVpbGRDbWRzKQorIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cdGVzdGltZ3AuanBnCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx0ZXN0b3JpZy5qcGcKKworIUlGICAiJChDRkcpIiA9PSAiYXBwdGVzdCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkCitJbnB1dERpcj0uCitPdXREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9Llx0ZXN0b3JpZy5qcGcKKworQnVpbGRDbWRzPSBcCisJZWNobyAkKE91dERpcilcZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dC5wcG0gLlx0ZXN0b3JpZy5qcGcgXAorCSQoT3V0RGlyKVxkanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlICQoT3V0RGlyKVx0ZXN0b3V0LnBwbSAuXHRlc3RvcmlnLmpwZyBcCisJZWNobyAkKE91dERpcilcZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dC5ibXAgLlx0ZXN0b3JpZy5qcGcgXAorCSQoT3V0RGlyKVxkanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlICQoT3V0RGlyKVx0ZXN0b3V0LmJtcCAuXHRlc3RvcmlnLmpwZyBcCisJCisKKyIkKE91dERpcilcdGVzdG91dC5wcG0iIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisgICAkKEJ1aWxkQ21kcykKKworIiQoT3V0RGlyKVx0ZXN0b3V0LmJtcCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKyAgICQoQnVpbGRDbWRzKQorIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJhcHB0ZXN0IC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gVGVzdGluZyAtICQoSW5wdXRQYXRoKQorSW5wdXREaXI9LgorT3V0RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXHRlc3RvcmlnLmpwZworCitCdWlsZENtZHM9IFwKKwllY2hvICQoT3V0RGlyKVxkanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlICQoT3V0RGlyKVx0ZXN0b3V0LnBwbSAuXHRlc3RvcmlnLmpwZyBcCisJJChPdXREaXIpXGRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXQucHBtIC5cdGVzdG9yaWcuanBnIFwKKwllY2hvICQoT3V0RGlyKVxkanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlICQoT3V0RGlyKVx0ZXN0b3V0LmJtcCAuXHRlc3RvcmlnLmpwZyBcCisJJChPdXREaXIpXGRqcGVnIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXQuYm1wIC5cdGVzdG9yaWcuanBnIFwKKwkKKworIiQoT3V0RGlyKVx0ZXN0b3V0LnBwbSIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKyAgICQoQnVpbGRDbWRzKQorCisiJChPdXREaXIpXHRlc3RvdXQuYm1wIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorICAgJChCdWlsZENtZHMpCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx0ZXN0cHJvZy5qcGcKKworIUlGICAiJChDRkcpIiA9PSAiYXBwdGVzdCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkCitJbnB1dERpcj0uCitPdXREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9Llx0ZXN0cHJvZy5qcGcKKworQnVpbGRDbWRzPSBcCisJZWNobyAkKE91dERpcilcZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHAucHBtIC5cdGVzdHByb2cuanBnIFwKKwkkKE91dERpcilcZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHAucHBtIC5cdGVzdHByb2cuanBnIFwKKwllY2hvICQoT3V0RGlyKVxqcGVndHJhbiAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHQuanBnIC5cdGVzdHByb2cuanBnIFwKKwkkKE91dERpcilcanBlZ3RyYW4gLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXR0LmpwZyAuXHRlc3Rwcm9nLmpwZyBcCisJCisKKyIkKE91dERpcilcdGVzdG91dHAucHBtIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorICAgJChCdWlsZENtZHMpCisKKyIkKE91dERpcilcdGVzdG91dHQuanBnIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorICAgJChCdWlsZENtZHMpCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImFwcHRlc3QgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBUZXN0aW5nIC0gJChJbnB1dFBhdGgpCitJbnB1dERpcj0uCitPdXREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5cdGVzdHByb2cuanBnCisKK0J1aWxkQ21kcz0gXAorCWVjaG8gJChPdXREaXIpXGRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXRwLnBwbSAuXHRlc3Rwcm9nLmpwZyBcCisJJChPdXREaXIpXGRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXRwLnBwbSAuXHRlc3Rwcm9nLmpwZyBcCisJZWNobyAkKE91dERpcilcanBlZ3RyYW4gLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXR0LmpwZyAuXHRlc3Rwcm9nLmpwZyBcCisJJChPdXREaXIpXGpwZWd0cmFuIC1vdXRmaWxlICQoT3V0RGlyKVx0ZXN0b3V0dC5qcGcgLlx0ZXN0cHJvZy5qcGcgXAorCQorCisiJChPdXREaXIpXHRlc3RvdXRwLnBwbSIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKyAgICQoQnVpbGRDbWRzKQorCisiJChPdXREaXIpXHRlc3RvdXR0LmpwZyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKyAgICQoQnVpbGRDbWRzKQorIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL3ZjNnByb2ovY2pwZWcuZHNwIGIvdmM2cHJvai9janBlZy5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczZTYxOQotLS0gL2Rldi9udWxsCisrKyBiL3ZjNnByb2ovY2pwZWcuZHNwCkBAIC0wLDAgKzEsMTY0IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImNqcGVnIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIMrUvbikt6TKpKSkx6SvpMCktaSkICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9Y2pwZWcgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgpLOk7KTPza24+qTKjtKOso64jsyOp46yjtmkx6TPpKKk6qTepLuk86GjIKSzpM6OzI7fjtuOvI7ejqqOuI7EpPKOy47ejtmOxI7epLmk66S/pOGky6TPIE5NQUtFIKTyu8jN0aS3pMakr6TApLWkpKGjCishTUVTU0FHRSBbjtKOso64jsyOp46yjtmkzo60jriOvY7Ojt+OsI7EXSCOuo7Pjt2OxI7epPK7yM3RpLekxrzCudSkt6TGpK+kwKS1pKQKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgImNqcGVnLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIKTOvMK51Lv+pMu5vcCupPK72MTqpMekraTepLkKKyFNRVNTQUdFII66js+O3Y7Ejt4gjteOso7dvuWkx47PjriO26TOwN/E6qTyxOq1waS3pN6kuaGjzuM6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJjanBlZy5tYWsiIENGRz0iY2pwZWcgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgwarC8rLEx72kyo7Ljt6O2Y7Ejt4gjtOOsI7Ejt46CishTUVTU0FHRSAKKyFNRVNTQUdFICJjanBlZyAtIFdpbjMyIFJlbGVhc2UiICgiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgzdEpCishTUVTU0FHRSAiY2pwZWcgLSBXaW4zMiBEZWJ1ZyIgKCJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiDN0SkKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJjanBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9XMyAvTzIgL0dGIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIFJTQyAvbCAweDQxMSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDExIC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBsaWJqcGVnLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiUmVsZWFzZSIgL29wdDpub3dpbjk4CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImNqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dtIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBCQVNFIFJTQyAvbCAweDQxMSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDExIC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBsaWJqcGVnLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiRGVidWciIC9vcHQ6bm93aW45OAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJjanBlZyAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgImNqcGVnIC0gV2luMzIgRGVidWciCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cY2RqcGVnLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGNqcGVnLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHJkYm1wLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHJkZ2lmLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHJkcHBtLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHJkcmxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHJkc3dpdGNoLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHJkdGFyZ2EuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cY2RlcnJvci5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxjZGpwZWcuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camNvbmZpZy5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZXJyb3IuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camluY2x1ZGUuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cam1vcmVjZmcuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5canBlZ2xpYi5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqdmVyc2lvbi5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSIKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL3ZjNnByb2ovZGpwZWcuZHNwIGIvdmM2cHJvai9kanBlZy5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2YjM3OAotLS0gL2Rldi9udWxsCisrKyBiL3ZjNnByb2ovZGpwZWcuZHNwCkBAIC0wLDAgKzEsMTY0IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImRqcGVnIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIMrUvbikt6TKpKSkx6SvpMCktaSkICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9ZGpwZWcgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgpLOk7KTPza24+qTKjtKOso64jsyOp46yjtmkx6TPpKKk6qTepLuk86GjIKSzpM6OzI7fjtuOvI7ejqqOuI7EpPKOy47ejtmOxI7epLmk66S/pOGky6TPIE5NQUtFIKTyu8jN0aS3pMakr6TApLWkpKGjCishTUVTU0FHRSBbjtKOso64jsyOp46yjtmkzo60jriOvY7Ojt+OsI7EXSCOuo7Pjt2OxI7epPK7yM3RpLekxrzCudSkt6TGpK+kwKS1pKQKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgImRqcGVnLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIKTOvMK51Lv+pMu5vcCupPK72MTqpMekraTepLkKKyFNRVNTQUdFII66js+O3Y7Ejt4gjteOso7dvuWkx47PjriO26TOwN/E6qTyxOq1waS3pN6kuaGjzuM6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJkanBlZy5tYWsiIENGRz0iZGpwZWcgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgwarC8rLEx72kyo7Ljt6O2Y7Ejt4gjtOOsI7Ejt46CishTUVTU0FHRSAKKyFNRVNTQUdFICJkanBlZyAtIFdpbjMyIFJlbGVhc2UiICgiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgzdEpCishTUVTU0FHRSAiZGpwZWcgLSBXaW4zMiBEZWJ1ZyIgKCJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiDN0SkKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJkanBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9XMyAvTzIgL0dGIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIFJTQyAvbCAweDQxMSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDExIC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBsaWJqcGVnLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiUmVsZWFzZSIgL29wdDpub3dpbjk4CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dtIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBCQVNFIFJTQyAvbCAweDQxMSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDExIC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBsaWJqcGVnLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiRGVidWciIC9vcHQ6bm93aW45OAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJkanBlZyAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgImRqcGVnIC0gV2luMzIgRGVidWciCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cY2RqcGVnLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGRqcGVnLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHJkY29sbWFwLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHdyYm1wLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHdyZ2lmLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHdycHBtLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHdycmxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHdydGFyZ2EuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cY2RlcnJvci5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxjZGpwZWcuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camNvbmZpZy5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZXJyb3IuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camluY2x1ZGUuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cam1vcmVjZmcuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5canBlZ2xpYi5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqdmVyc2lvbi5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSIKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL3ZjNnByb2ovamNvbmZpZy5oIGIvdmM2cHJvai9qY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDViYzlmOQotLS0gL2Rldi9udWxsCisrKyBiL3ZjNnByb2ovamNvbmZpZy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIGpjb25maWcudmMgLS0tIGpjb25maWcuaCBmb3IgTWljcm9zb2Z0IFZpc3VhbCBDKysgb24gV2luZG93cyA5NSBvciBOVC4gKi8KKy8qIHNlZSBqY29uZmlnLmRvYyBmb3IgZXhwbGFuYXRpb25zICovCisKKyNkZWZpbmUgSEFWRV9QUk9UT1RZUEVTCisjZGVmaW5lIEhBVkVfVU5TSUdORURfQ0hBUgorI2RlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JUCisvKiAjZGVmaW5lIHZvaWQgY2hhciAqLworLyogI2RlZmluZSBjb25zdCAqLworI3VuZGVmIENIQVJfSVNfVU5TSUdORUQKKyNkZWZpbmUgSEFWRV9TVERERUZfSAorI2RlZmluZSBIQVZFX1NURExJQl9ICisjdW5kZWYgTkVFRF9CU0RfU1RSSU5HUworI3VuZGVmIE5FRURfU1lTX1RZUEVTX0gKKyN1bmRlZiBORUVEX0ZBUl9QT0lOVEVSUwkvKiB3ZSBwcmVzdW1lIGEgMzItYml0IGZsYXQgbWVtb3J5IG1vZGVsICovCisjdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworI3VuZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCisKKy8qIERlZmluZSAiYm9vbGVhbiIgYXMgdW5zaWduZWQgY2hhciwgbm90IGludCwgcGVyIFdpbmRvd3MgY3VzdG9tICovCisjZGVmaW5lIFRZUEVERUZfVUNIQVJfQk9PTEVBTgorCisjaWZkZWYgSlBFR19JTlRFUk5BTFMKKworI3VuZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECisKKyNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMUyAqLworCisjaWYgZGVmaW5lZChKUEVHX0lOVEVSTkFMUykgfHwgZGVmaW5lZChKUEVHX0lOVEVSTkFMX09QVElPTlMpCisjdW5kZWYgSlNJTURfTU1YX05PVF9TVVBQT1JURUQKKyN1bmRlZiBKU0lNRF8zRE5PV19OT1RfU1VQUE9SVEVECisjdW5kZWYgSlNJTURfU1NFX05PVF9TVVBQT1JURUQKKyN1bmRlZiBKU0lNRF9TU0UyX05PVF9TVVBQT1JURUQKKyNlbmRpZgorCisjaWZkZWYgSlBFR19DSlBFR19ESlBFRworCisjZGVmaW5lIEJNUF9TVVBQT1JURUQJCS8qIEJNUCBpbWFnZSBmaWxlIGZvcm1hdCAqLworI2RlZmluZSBHSUZfU1VQUE9SVEVECQkvKiBHSUYgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgUFBNX1NVUFBPUlRFRAkJLyogUEJNUExVUyBQUE0vUEdNIGltYWdlIGZpbGUgZm9ybWF0ICovCisjdW5kZWYgUkxFX1NVUFBPUlRFRAkJLyogVXRhaCBSTEUgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgVEFSR0FfU1VQUE9SVEVECQkvKiBUYXJnYSBpbWFnZSBmaWxlIGZvcm1hdCAqLworCisjZGVmaW5lIFRXT19GSUxFX0NPTU1BTkRMSU5FCS8qIG9wdGlvbmFsICovCisjZGVmaW5lIFVTRV9TRVRNT0RFCQkvKiBNaWNyb3NvZnQgaGFzIHNldG1vZGUoKSAqLworI3VuZGVmIE5FRURfU0lHTkFMX0NBVENIRVIKKyN1bmRlZiBET05UX1VTRV9CX01PREUKKyN1bmRlZiBQUk9HUkVTU19SRVBPUlQJCS8qIG9wdGlvbmFsICovCisKKyNlbmRpZiAvKiBKUEVHX0NKUEVHX0RKUEVHICovCmRpZmYgLS1naXQgYS92YzZwcm9qL2pwZWd0cmFuLmRzcCBiL3ZjNnByb2ovanBlZ3RyYW4uZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYzM4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi92YzZwcm9qL2pwZWd0cmFuLmRzcApAQCAtMCwwICsxLDE1NiBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJqcGVndHJhbiIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiDK1L24pLekyqSkpMekr6TApLWkpCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPWpwZWd0cmFuIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIKSzpOykz82tuPqkyo7SjrKOuI7MjqeOso7ZpMekz6SipOqk3qS7pPOhoyCks6TOjsyO347bjryO3o6qjriOxKTyjsuO3o7ZjsSO3qS5pOukv6ThpMukzyBOTUFLRSCk8rvIzdGkt6TGpK+kwKS1pKShoworIU1FU1NBR0UgW47SjrKOuI7MjqeOso7ZpM6OtI64jr2Ozo7fjrCOxF0gjrqOz47djsSO3qTyu8jN0aS3pMa8wrnUpLekxqSvpMCktaSkCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJqcGVndHJhbi5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSCkzrzCudS7/qTLub3ArqTyu9jE6qTHpK2k3qS5CishTUVTU0FHRSCOuo7Pjt2OxI7eII7XjrKO3b7lpMeOz464jtukzsDfxOqk8sTqtcGkt6TepLmho87jOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAianBlZ3RyYW4ubWFrIiBDRkc9ImpwZWd0cmFuIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIMGqwvKyxMe9pMqOy47ejtmOxI7eII7TjrCOxI7eOgorIU1FU1NBR0UgCishTUVTU0FHRSAianBlZ3RyYW4gLSBXaW4zMiBSZWxlYXNlIiAoIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIM3RKQorIU1FU1NBR0UgImpwZWd0cmFuIC0gV2luMzIgRGVidWciICgiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgzdEpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAianBlZ3RyYW4gLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL08yIC9HRiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MTEgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQxMSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgbGlianBlZy5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6IlJlbGVhc2UiIC9vcHQ6bm93aW45OAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJqcGVndHJhbiAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HbSAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MTEgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQxMSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgbGlianBlZy5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6IkRlYnVnIiAvb3B0Om5vd2luOTgKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAianBlZ3RyYW4gLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJqcGVndHJhbiAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGNkanBlZy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqcGVndHJhbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxyZHN3aXRjaC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx0cmFuc3VwcC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxjZGVycm9yLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGNkanBlZy5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY29uZmlnLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGplcnJvci5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqaW5jbHVkZS5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqbW9yZWNmZy5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqcGVnaW50LmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpwZWdsaWIuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5canZlcnNpb24uaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cdHJhbnN1cHAuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiCisjIEVuZCBHcm91cAorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS92YzZwcm9qL2xpYmpwZWcuZHNwIGIvdmM2cHJvai9saWJqcGVnLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTY0N2QwCi0tLSAvZGV2L251bGwKKysrIGIvdmM2cHJvai9saWJqcGVnLmRzcApAQCAtMCwwICsxLDE3NTEgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ibGlianBlZyIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiDK1L24pLekyqSkpMekr6TApLWkpCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIgMHgwMTA0CisKK0NGRz1saWJqcGVnIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIKSzpOykz82tuPqkyo7SjrKOuI7MjqeOso7ZpMekz6SipOqk3qS7pPOhoyCks6TOjsyO347bjryO3o6qjriOxKTyjsuO3o7ZjsSO3qS5pOukv6ThpMukzyBOTUFLRSCk8rvIzdGkt6TGpK+kwKS1pKShoworIU1FU1NBR0UgW47SjrKOuI7MjqeOso7ZpM6OtI64jr2Ozo7fjrCOxF0gjrqOz47djsSO3qTyu8jN0aS3pMa8wrnUpLekxqSvpMCktaSkCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJsaWJqcGVnLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIKTOvMK51Lv+pMu5vcCupPK72MTqpMekraTepLkKKyFNRVNTQUdFII66js+O3Y7Ejt4gjteOso7dvuWkx47PjriO26TOwN/E6qTyxOq1waS3pN6kuaGjzuM6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJsaWJqcGVnLm1hayIgQ0ZHPSJsaWJqcGVnIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIMGqwvKyxMe9pMqOy47ejtmOxI7eII7TjrCOxI7eOgorIU1FU1NBR0UgCishTUVTU0FHRSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiICgiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiIM3RKQorIU1FU1NBR0UgImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIgKCJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIgzdEpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfTElCIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9MSUIiIC9ZWCAvWmwgL0ZEIC9HRiAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MTEgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQxMSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElCMzI9bGluay5leGUgLWxpYgorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvCisjIEFERCBMSUIzMiAvbm9sb2dvCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfTElCIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HbSAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9MSUIiIC9ZWCAvWmwgL0ZEIC9HWiAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MTEgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQxMSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElCMzI9bGluay5leGUgLWxpYgorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvCisjIEFERCBMSUIzMiAvbm9sb2dvCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjYXBpbWluLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjYXBpc3RkLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjY29lZmN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjY29sb3IuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camNkY3RtZ3IuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camNodWZmLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjaW5pdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY21haW5jdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY21hcmtlci5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY21hc3Rlci5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY29tYXBpLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjcGFyYW0uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camNwaHVmZi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY3ByZXBjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY3NhbXBsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY3RyYW5zLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkYXBpbWluLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkYXBpc3RkLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkYXRhZHN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkYXRhc3JjLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkY29lZmN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkY29sb3IuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camRkY3RtZ3IuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camRodWZmLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkaW5wdXQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camRtYWluY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camRtYXJrZXIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camRtYXN0ZXIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camRtZXJnZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZHBodWZmLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkcG9zdGN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkc2FtcGxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkdHJhbnMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camVycm9yLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGptZW1tZ3IuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cam1lbW5vYnMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5canF1YW50MS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqcXVhbnQyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGp1dGlscy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY2h1ZmYuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camNvbHNhbXAuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camNvbmZpZy5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZGN0LmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkaHVmZi5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZXJyb3IuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camluY2x1ZGUuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cam1lbXN5cy5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqbW9yZWNmZy5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqcGVnaW50LmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpwZWdsaWIuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5canZlcnNpb24uaAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJOQVNNIFNvdXJjZSIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJhc20iCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjY29sbW14LmFzbQorCishSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkNDT0w9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqY29sc2FtcC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqY2NvbG1teC5hc20KK0lucHV0TmFtZT1qY2NvbG1teAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDQ09MPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamNvbHNhbXAuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpjY29sbW14LmFzbQorSW5wdXROYW1lPWpjY29sbW14CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY2NvbHNzMi5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDQ09MUz0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpjb2xzYW1wLmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGpjY29sc3MyLmFzbQorSW5wdXROYW1lPWpjY29sc3MyCisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkNDT0xTPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamNvbHNhbXAuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpjY29sc3MyLmFzbQorSW5wdXROYW1lPWpjY29sc3MyCisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY3FudDNkbi5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDUU5UPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqY3FudDNkbi5hc20KK0lucHV0TmFtZT1qY3FudDNkbgorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDUU5UPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5camNxbnQzZG4uYXNtCitJbnB1dE5hbWU9amNxbnQzZG4KKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjcW50Zmx0LmFzbQorCishSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkNRTlRGPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqY3FudGZsdC5hc20KK0lucHV0TmFtZT1qY3FudGZsdAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDUU5URj0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpjcW50Zmx0LmFzbQorSW5wdXROYW1lPWpjcW50Zmx0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY3FudGludC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDUU5UST0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camNxbnRpbnQuYXNtCitJbnB1dE5hbWU9amNxbnRpbnQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KQ1FOVEk9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqY3FudGludC5hc20KK0lucHV0TmFtZT1qY3FudGludAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camNxbnRtbXguYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KQ1FOVE09IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGpjcW50bW14LmFzbQorSW5wdXROYW1lPWpjcW50bW14CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkNRTlRNPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5camNxbnRtbXguYXNtCitJbnB1dE5hbWU9amNxbnRtbXgKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjcW50czJmLmFzbQorCishSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkNRTlRTPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqY3FudHMyZi5hc20KK0lucHV0TmFtZT1qY3FudHMyZgorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDUU5UUz0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpjcW50czJmLmFzbQorSW5wdXROYW1lPWpjcW50czJmCisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY3FudHMyaS5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDUU5UUzI9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGpjcW50czJpLmFzbQorSW5wdXROYW1lPWpjcW50czJpCisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkNRTlRTMj0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpjcW50czJpLmFzbQorSW5wdXROYW1lPWpjcW50czJpCisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY3FudHNzZS5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDUU5UU1M9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGpjcW50c3NlLmFzbQorSW5wdXROYW1lPWpjcW50c3NlCisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkNRTlRTUz0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpjcW50c3NlLmFzbQorSW5wdXROYW1lPWpjcW50c3NlCisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY3NhbW1teC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDU0FNPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamNvbHNhbXAuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camNzYW1tbXguYXNtCitJbnB1dE5hbWU9amNzYW1tbXgKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KQ1NBTT0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpjb2xzYW1wLmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqY3NhbW1teC5hc20KK0lucHV0TmFtZT1qY3NhbW1teAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camNzYW1zczIuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KQ1NBTVM9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqY29sc2FtcC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqY3NhbXNzMi5hc20KK0lucHV0TmFtZT1qY3NhbXNzMgorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pDU0FNUz0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpjb2xzYW1wLmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqY3NhbXNzMi5hc20KK0lucHV0TmFtZT1qY3NhbXNzMgorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camRjb2xtbXguYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRENPTD0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpjb2xzYW1wLmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGpkY29sbW14LmFzbQorSW5wdXROYW1lPWpkY29sbW14CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkRDT0w9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqY29sc2FtcC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5camRjb2xtbXguYXNtCitJbnB1dE5hbWU9amRjb2xtbXgKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkY29sc3MyLmFzbQorCishSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkRDT0xTPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamNvbHNhbXAuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camRjb2xzczIuYXNtCitJbnB1dE5hbWU9amRjb2xzczIKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRENPTFM9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqY29sc2FtcC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5camRjb2xzczIuYXNtCitJbnB1dE5hbWU9amRjb2xzczIKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpkbWVybW14LmFzbQorCishSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkRNRVI9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqY29sc2FtcC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqZG1lcm1teC5hc20KK0lucHV0TmFtZT1qZG1lcm1teAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pETUVSPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamNvbHNhbXAuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpkbWVybW14LmFzbQorSW5wdXROYW1lPWpkbWVybW14CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZG1lcnNzMi5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pETUVSUz0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpjb2xzYW1wLmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGpkbWVyc3MyLmFzbQorSW5wdXROYW1lPWpkbWVyc3MyCisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkRNRVJTPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamNvbHNhbXAuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpkbWVyc3MyLmFzbQorSW5wdXROYW1lPWpkbWVyc3MyCisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZHNhbW1teC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pEU0FNPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamNvbHNhbXAuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camRzYW1tbXguYXNtCitJbnB1dE5hbWU9amRzYW1tbXgKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRFNBTT0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpjb2xzYW1wLmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqZHNhbW1teC5hc20KK0lucHV0TmFtZT1qZHNhbW1teAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camRzYW1zczIuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRFNBTVM9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqY29sc2FtcC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqZHNhbXNzMi5hc20KK0lucHV0TmFtZT1qZHNhbXNzMgorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pEU0FNUz0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpjb2xzYW1wLmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqZHNhbXNzMi5hc20KK0lucHV0TmFtZT1qZHNhbXNzMgorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camYzZG5mbHQuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRjNETj0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camYzZG5mbHQuYXNtCitJbnB1dE5hbWU9amYzZG5mbHQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRjNETj0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpmM2RuZmx0LmFzbQorSW5wdXROYW1lPWpmM2RuZmx0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZmRjdGZsdC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pGRENUPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqZmRjdGZsdC5hc20KK0lucHV0TmFtZT1qZmRjdGZsdAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pGRENUPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5camZkY3RmbHQuYXNtCitJbnB1dE5hbWU9amZkY3RmbHQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpmZGN0ZnN0LmFzbQorCishSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSkZEQ1RGPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqZmRjdGZzdC5hc20KK0lucHV0TmFtZT1qZmRjdGZzdAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pGRENURj0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpmZGN0ZnN0LmFzbQorSW5wdXROYW1lPWpmZGN0ZnN0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZmRjdGludC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pGRENUST0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camZkY3RpbnQuYXNtCitJbnB1dE5hbWU9amZkY3RpbnQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRkRDVEk9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqZmRjdGludC5hc20KK0lucHV0TmFtZT1qZmRjdGludAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camZtbXhmc3QuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRk1NWD0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camZtbXhmc3QuYXNtCitJbnB1dE5hbWU9amZtbXhmc3QKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRk1NWD0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpmbW14ZnN0LmFzbQorSW5wdXROYW1lPWpmbW14ZnN0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZm1teGludC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pGTU1YST0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camZtbXhpbnQuYXNtCitJbnB1dE5hbWU9amZtbXhpbnQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRk1NWEk9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqZm1teGludC5hc20KK0lucHV0TmFtZT1qZm1teGludAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camZzczJmc3QuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRlNTMj0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camZzczJmc3QuYXNtCitJbnB1dE5hbWU9amZzczJmc3QKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRlNTMj0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpmc3MyZnN0LmFzbQorSW5wdXROYW1lPWpmc3MyZnN0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqZnNzMmludC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pGU1MyST0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camZzczJpbnQuYXNtCitJbnB1dE5hbWU9amZzczJpbnQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRlNTMkk9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqZnNzMmludC5hc20KK0lucHV0TmFtZT1qZnNzMmludAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camZzc2VmbHQuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRlNTRT0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camZzc2VmbHQuYXNtCitJbnB1dE5hbWU9amZzc2VmbHQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KRlNTRT0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGpmc3NlZmx0LmFzbQorSW5wdXROYW1lPWpmc3NlZmx0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqaTNkbmZsdC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pJM0ROPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqaTNkbmZsdC5hc20KK0lucHV0TmFtZT1qaTNkbmZsdAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pJM0ROPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5camkzZG5mbHQuYXNtCitJbnB1dE5hbWU9amkzZG5mbHQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGppZGN0Zmx0LmFzbQorCishSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSklEQ1Q9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGppZGN0Zmx0LmFzbQorSW5wdXROYW1lPWppZGN0Zmx0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSklEQ1Q9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqaWRjdGZsdC5hc20KK0lucHV0TmFtZT1qaWRjdGZsdAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camlkY3Rmc3QuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KSURDVEY9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGppZGN0ZnN0LmFzbQorSW5wdXROYW1lPWppZGN0ZnN0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSklEQ1RGPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5camlkY3Rmc3QuYXNtCitJbnB1dE5hbWU9amlkY3Rmc3QKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGppZGN0aW50LmFzbQorCishSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSklEQ1RJPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqaWRjdGludC5hc20KK0lucHV0TmFtZT1qaWRjdGludAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pJRENUST0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGppZGN0aW50LmFzbQorSW5wdXROYW1lPWppZGN0aW50CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqaWRjdHJlZC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pJRENUUj0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camlkY3RyZWQuYXNtCitJbnB1dE5hbWU9amlkY3RyZWQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KSURDVFI9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqaWRjdHJlZC5hc20KK0lucHV0TmFtZT1qaWRjdHJlZAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camltbXhmc3QuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KSU1NWD0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camltbXhmc3QuYXNtCitJbnB1dE5hbWU9amltbXhmc3QKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KSU1NWD0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGppbW14ZnN0LmFzbQorSW5wdXROYW1lPWppbW14ZnN0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqaW1teGludC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pJTU1YST0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camltbXhpbnQuYXNtCitJbnB1dE5hbWU9amltbXhpbnQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KSU1NWEk9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqaW1teGludC5hc20KK0lucHV0TmFtZT1qaW1teGludAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camltbXhyZWQuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KSU1NWFI9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGppbW14cmVkLmFzbQorSW5wdXROYW1lPWppbW14cmVkCisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSklNTVhSPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5camltbXhyZWQuYXNtCitJbnB1dE5hbWU9amltbXhyZWQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGppc3MyZmx0LmFzbQorCishSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSklTUzI9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGppc3MyZmx0LmFzbQorSW5wdXROYW1lPWppc3MyZmx0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSklTUzI9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqaXNzMmZsdC5hc20KK0lucHV0TmFtZT1qaXNzMmZsdAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camlzczJmc3QuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KSVNTMkY9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXGppc3MyZnN0LmFzbQorSW5wdXROYW1lPWppc3MyZnN0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSklTUzJGPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxEZWJ1ZworSW5wdXRQYXRoPS5camlzczJmc3QuYXNtCitJbnB1dE5hbWU9amlzczJmc3QKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGppc3MyaW50LmFzbQorCishSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorVVNFUkRFUF9fSklTUzJJPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkiamRjdC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9LlxqaXNzMmludC5hc20KK0lucHV0TmFtZT1qaXNzMmludAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pJU1MyST0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGppc3MyaW50LmFzbQorSW5wdXROYW1lPWppc3MyaW50CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqaXNzMnJlZC5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pJU1MyUj0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camlzczJyZWQuYXNtCitJbnB1dE5hbWU9amlzczJyZWQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KSVNTMlI9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCSJqZGN0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxqaXNzMnJlZC5hc20KK0lucHV0TmFtZT1qaXNzMnJlZAorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camlzc2VmbHQuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KSVNTRT0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5camlzc2VmbHQuYXNtCitJbnB1dE5hbWU9amlzc2VmbHQKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KSVNTRT0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJImpkY3QuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cRGVidWcKK0lucHV0UGF0aD0uXGppc3NlZmx0LmFzbQorSW5wdXROYW1lPWppc3NlZmx0CisKKyIkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwluYXNtdyAtWHZjIC1md2luMzIgLURXSU4zMiAtSSAkKEludERpcilcIC1vICQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqICQoSW5wdXRQYXRoKQorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llxqc2ltZGNwdS5hc20KKworIUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pTSU1EPSIkKEludERpcilcanNpbWRjZmcuaW5jIgkianNpbWRleHQuaW5jIgkKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gQXNzZW1ibGluZyAtICQoSW5wdXRQYXRoKQorSW50RGlyPS5cUmVsZWFzZQorSW5wdXRQYXRoPS5canNpbWRjcHUuYXNtCitJbnB1dE5hbWU9anNpbWRjcHUKKworIiQoSW50RGlyKVwkKElucHV0TmFtZSkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCW5hc213IC1YdmMgLWZ3aW4zMiAtRFdJTjMyIC1JICQoSW50RGlyKVwgLW8gJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmogJChJbnB1dFBhdGgpCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlianBlZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KU0lNRD0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9Llxqc2ltZGNwdS5hc20KK0lucHV0TmFtZT1qc2ltZGNwdQorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5canNpbWR3MzIuYXNtCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmpwZWcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCitVU0VSREVQX19KU0lNRFc9IiQoSW50RGlyKVxqc2ltZGNmZy5pbmMiCSJqc2ltZGV4dC5pbmMiCQorIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nIC0gJChJbnB1dFBhdGgpCitJbnREaXI9LlxSZWxlYXNlCitJbnB1dFBhdGg9Llxqc2ltZHczMi5hc20KK0lucHV0TmFtZT1qc2ltZHczMgorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJsaWJqcGVnIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKK1VTRVJERVBfX0pTSU1EVz0iJChJbnREaXIpXGpzaW1kY2ZnLmluYyIJImpzaW1kZXh0LmluYyIJCisjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgLSAkKElucHV0UGF0aCkKK0ludERpcj0uXERlYnVnCitJbnB1dFBhdGg9Llxqc2ltZHczMi5hc20KK0lucHV0TmFtZT1qc2ltZHczMgorCisiJChJbnREaXIpXCQoSW5wdXROYW1lKS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJbmFzbXcgLVh2YyAtZndpbjMyIC1EV0lOMzIgLUkgJChJbnREaXIpXCAtbyAkKEludERpcilcJChJbnB1dE5hbWUpLm9iaiAkKElucHV0UGF0aCkKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJOQVNNIEhlYWRlciIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpbmMiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjb2xzYW1wLmluYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camRjdC5pbmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpzaW1kZXh0LmluYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL3ZjNnByb2ovbGlianBlZy5kc3cgYi92YzZwcm9qL2xpYmpwZWcuZHN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhY2UxNTMKLS0tIC9kZXYvbnVsbAorKysgYi92YzZwcm9qL2xpYmpwZWcuZHN3CkBAIC0wLDAgKzEsMTM0IEBACitNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyC32bnwOiCks6TOjtyOsI64jr2OzY7fjrCOvSCOzI6njrKO2SCk8srUvbik3qS/pM+67738pLekyqSkpMekr6TApLWkpCEKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiYXBwdGVzdCI9Ii5cYXBwdGVzdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIGNqcGVnCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgZGpwZWcKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBqcGVndHJhbgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJjanBlZyI9Ii5cY2pwZWcuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJqcGVnCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogImRqcGVnIj0iLlxkanBlZy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYmpwZWcKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAianBlZ3RyYW4iPSIuXGpwZWd0cmFuLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgbGlianBlZworICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJsaWJqcGVnIj0iLlxsaWJqcGVnLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgbWFrZWNmZworICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJtYWtlY2ZnIj0iLlxtYWtlY2ZnLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogInJkanBnY29tIj0iLlxyZGpwZ2NvbS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJ3cmpwZ2NvbSI9Ii5cd3JqcGdjb20uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitHbG9iYWw6CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTwzPgore3t7Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCmRpZmYgLS1naXQgYS92YzZwcm9qL21ha2VjZmcuZHNwIGIvdmM2cHJvai9tYWtlY2ZnLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmU5MTRhCi0tLSAvZGV2L251bGwKKysrIGIvdmM2cHJvai9tYWtlY2ZnLmRzcApAQCAtMCwwICsxLDE0MiBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJtYWtlY2ZnIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIMrUvbikt6TKpKSkx6SvpMCktaSkICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9bWFrZWNmZyAtIFdpbjMyIERlYnVnCishTUVTU0FHRSCks6TspM/Nrbj6pMqO0o6yjriOzI6njrKO2aTHpM+koqTqpN6ku6TzoaMgpLOkzo7Mjt+O2468jt6Oqo64jsSk8o7Ljt6O2Y7Ejt6kuaTrpL+k4aTLpM8gTk1BS0UgpPK7yM3RpLekxqSvpMCktaSkoaMKKyFNRVNTQUdFIFuO0o6yjriOzI6njrKO2aTOjrSOuI69js6O346wjsRdII66js+O3Y7Ejt6k8rvIzdGkt6TGvMK51KS3pMakr6TApLWkpAorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAibWFrZWNmZy5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSCkzrzCudS7/qTLub3ArqTyu9jE6qTHpK2k3qS5CishTUVTU0FHRSCOuo7Pjt2OxI7eII7XjrKO3b7lpMeOz464jtukzsDfxOqk8sTqtcGkt6TepLmho87jOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAibWFrZWNmZy5tYWsiIENGRz0ibWFrZWNmZyAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSDBqsLyssTHvaTKjsuO3o7ZjsSO3iCO046wjsSO3joKKyFNRVNTQUdFIAorIU1FU1NBR0UgIm1ha2VjZmcgLSBXaW4zMiBSZWxlYXNlIiAoIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIM3RKQorIU1FU1NBR0UgIm1ha2VjZmcgLSBXaW4zMiBEZWJ1ZyIgKCJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiDN0SkKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJtYWtlY2ZnIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9PMiAvR0YgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDExIC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MTEgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYgL29wdDpub3dpbjk4CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gR2VuZXJhdGluZyAtICQoT3V0RGlyKVxqc2ltZGNmZy5pbmMKK091dERpcj0uXFJlbGVhc2UKK0lucHV0UGF0aD0uXFJlbGVhc2VcbWFrZWNmZy5leGUKK1NPVVJDRT0iJChJbnB1dFBhdGgpIgorCisiJChPdXREaXIpXGpzaW1kY2ZnLmluYyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKKwkkKFRhcmdldFBhdGgpID4gJChPdXREaXIpXGpzaW1kY2ZnLmluYworCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VjZmcgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIENQUCAvbm9sb2dvIC9XMyAvR20gL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDExIC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MTEgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL29wdDpub3dpbjk4CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gR2VuZXJhdGluZyAtICQoT3V0RGlyKVxqc2ltZGNmZy5pbmMKK091dERpcj0uXERlYnVnCitJbnB1dFBhdGg9LlxEZWJ1Z1xtYWtlY2ZnLmV4ZQorU09VUkNFPSIkKElucHV0UGF0aCkiCisKKyIkKE91dERpcilcanNpbWRjZmcuaW5jIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCSQoVGFyZ2V0UGF0aCkgPiAkKE91dERpcilcanNpbWRjZmcuaW5jCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAibWFrZWNmZyAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIm1ha2VjZmcgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gR3JvdXAgIlNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0IgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxtYWtlY2ZnLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpjb25maWcuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5camVycm9yLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGppbmNsdWRlLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGptb3JlY2ZnLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGpwZWdpbnQuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5canBlZ2xpYi5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvdmM2cHJvai9yZGpwZ2NvbS5kc3AgYi92YzZwcm9qL3JkanBnY29tLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTVlZGEyCi0tLSAvZGV2L251bGwKKysrIGIvdmM2cHJvai9yZGpwZ2NvbS5kc3AKQEAgLTAsMCArMSwxMTIgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icmRqcGdjb20iIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogytS9uKS3pMqkpKTHpK+kwKS1pKQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1yZGpwZ2NvbSAtIFdpbjMyIERlYnVnCishTUVTU0FHRSCks6TspM/Nrbj6pMqO0o6yjriOzI6njrKO2aTHpM+koqTqpN6ku6TzoaMgpLOkzo7Mjt+O2468jt6Oqo64jsSk8o7Ljt6O2Y7Ejt6kuaTrpL+k4aTLpM8gTk1BS0UgpPK7yM3RpLekxqSvpMCktaSkoaMKKyFNRVNTQUdFIFuO0o6yjriOzI6njrKO2aTOjrSOuI69js6O346wjsRdII66js+O3Y7Ejt6k8rvIzdGkt6TGvMK51KS3pMakr6TApLWkpAorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAicmRqcGdjb20ubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgpM68wrnUu/6ky7m9wK6k8rvYxOqkx6StpN6kuQorIU1FU1NBR0UgjrqOz47djsSO3iCO146yjt2+5aTHjs+OuI7bpM7A38TqpPLE6rXBpLek3qS5oaPO4zoKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgInJkanBnY29tLm1hayIgQ0ZHPSJyZGpwZ2NvbSAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSDBqsLyssTHvaTKjsuO3o7ZjsSO3iCO046wjsSO3joKKyFNRVNTQUdFIAorIU1FU1NBR0UgInJkanBnY29tIC0gV2luMzIgUmVsZWFzZSIgKCJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiDN0SkKKyFNRVNTQUdFICJyZGpwZ2NvbSAtIFdpbjMyIERlYnVnIiAoIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIM3RKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInJkanBnY29tIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9PMiAvR0YgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDExIC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MTEgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2IC9vcHQ6bm93aW45OAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJyZGpwZ2NvbSAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HbSAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MTEgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQxMSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL29wdDpub3dpbjk4CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgInJkanBnY29tIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAicmRqcGdjb20gLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gR3JvdXAgIlNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0IgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxyZGpwZ2NvbS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY29uZmlnLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGppbmNsdWRlLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIgorIyBFbmQgR3JvdXAKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvdmM2cHJvai93cmpwZ2NvbS5kc3AgYi92YzZwcm9qL3dyanBnY29tLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmRmOWVjCi0tLSAvZGV2L251bGwKKysrIGIvdmM2cHJvai93cmpwZ2NvbS5kc3AKQEAgLTAsMCArMSwxMTIgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0id3JqcGdjb20iIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogytS9uKS3pMqkpKTHpK+kwKS1pKQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz13cmpwZ2NvbSAtIFdpbjMyIERlYnVnCishTUVTU0FHRSCks6TspM/Nrbj6pMqO0o6yjriOzI6njrKO2aTHpM+koqTqpN6ku6TzoaMgpLOkzo7Mjt+O2468jt6Oqo64jsSk8o7Ljt6O2Y7Ejt6kuaTrpL+k4aTLpM8gTk1BS0UgpPK7yM3RpLekxqSvpMCktaSkoaMKKyFNRVNTQUdFIFuO0o6yjriOzI6njrKO2aTOjrSOuI69js6O346wjsRdII66js+O3Y7Ejt6k8rvIzdGkt6TGvMK51KS3pMakr6TApLWkpAorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAid3JqcGdjb20ubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgpM68wrnUu/6ky7m9wK6k8rvYxOqkx6StpN6kuQorIU1FU1NBR0UgjrqOz47djsSO3iCO146yjt2+5aTHjs+OuI7bpM7A38TqpPLE6rXBpLek3qS5oaPO4zoKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIndyanBnY29tLm1hayIgQ0ZHPSJ3cmpwZ2NvbSAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSDBqsLyssTHvaTKjsuO3o7ZjsSO3iCO046wjsSO3joKKyFNRVNTQUdFIAorIU1FU1NBR0UgIndyanBnY29tIC0gV2luMzIgUmVsZWFzZSIgKCJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiDN0SkKKyFNRVNTQUdFICJ3cmpwZ2NvbSAtIFdpbjMyIERlYnVnIiAoIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIM3RKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIndyanBnY29tIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9PMiAvR0YgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDExIC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MTEgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2IC9vcHQ6bm93aW45OAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ3cmpwZ2NvbSAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HbSAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MTEgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQxMSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL29wdDpub3dpbjk4CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIndyanBnY29tIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAid3JqcGdjb20gLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gR3JvdXAgIlNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0IgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx3cmpwZ2NvbS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxqY29uZmlnLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGppbmNsdWRlLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIgorIyBFbmQgR3JvdXAKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvd3JibXAuYyBiL3dyYm1wLmMKaW5kZXggMzI4M2IwZi4uNTE3NDQxYSAxMDA2NDQKLS0tIGEvd3JibXAuYworKysgYi93cmJtcC5jCkBAIC01LDYgKzUsMTMgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4KKyAqIExhc3QgTW9kaWZpZWQgOiBPY3RvYmVyIDE5LCAyMDA0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gd3JpdGUgb3V0cHV0IGltYWdlcyBpbiBNaWNyb3NvZnQgIkJNUCIKICAqIGZvcm1hdCAoTVMgV2luZG93cyAzLnggYW5kIE9TLzIgMS54IGZsYXZvcnMpLgogICogRWl0aGVyIDgtYml0IGNvbG9ybWFwcGVkIG9yIDI0LWJpdCBmdWxsLWNvbG9yIGZvcm1hdCBjYW4gYmUgd3JpdHRlbi4KQEAgLTM0Niw5ICszNTMsMTEgQEAKICAgYm1wX2Rlc3RfcHRyIGRlc3QgPSAoYm1wX2Rlc3RfcHRyKSBkaW5mbzsKICAgcmVnaXN0ZXIgRklMRSAqIG91dGZpbGUgPSBkZXN0LT5wdWIub3V0cHV0X2ZpbGU7CiAgIEpTQU1QQVJSQVkgaW1hZ2VfcHRyOworI2lmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkgfHwgZGVmaW5lZChORUVEX0ZBUl9QT0lOVEVSUykKICAgcmVnaXN0ZXIgSlNBTVBST1cgZGF0YV9wdHI7Ci0gIEpESU1FTlNJT04gcm93OwogICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyNlbmRpZgorICBKRElNRU5TSU9OIHJvdzsKICAgY2RfcHJvZ3Jlc3NfcHRyIHByb2dyZXNzID0gKGNkX3Byb2dyZXNzX3B0cikgY2luZm8tPnByb2dyZXNzOwogCiAgIC8qIFdyaXRlIHRoZSBoZWFkZXIgYW5kIGNvbG9ybWFwICovCkBAIC0zNjYsMTEgKzM3NSwxNyBAQAogICAgIH0KICAgICBpbWFnZV9wdHIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKICAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgZGVzdC0+d2hvbGVfaW1hZ2UsIHJvdy0xLCAoSkRJTUVOU0lPTikgMSwgRkFMU0UpOworI2lmIChCSVRTX0lOX0pTQU1QTEUgPT0gOCkgJiYgIWRlZmluZWQoTkVFRF9GQVJfUE9JTlRFUlMpCisgICAgaWYgKEpGV1JJVEUob3V0ZmlsZSwgaW1hZ2VfcHRyWzBdLCBkZXN0LT5yb3dfd2lkdGgpCisJIT0gKHNpemVfdCkgZGVzdC0+cm93X3dpZHRoKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1dSSVRFKTsKKyNlbHNlCiAgICAgZGF0YV9wdHIgPSBpbWFnZV9wdHJbMF07CiAgICAgZm9yIChjb2wgPSBkZXN0LT5yb3dfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CiAgICAgICBwdXRjKEdFVEpTQU1QTEUoKmRhdGFfcHRyKSwgb3V0ZmlsZSk7CiAgICAgICBkYXRhX3B0cisrOwogICAgIH0KKyNlbmRpZgogICB9CiAgIGlmIChwcm9ncmVzcyAhPSBOVUxMKQogICAgIHByb2dyZXNzLT5jb21wbGV0ZWRfZXh0cmFfcGFzc2VzKys7CmRpZmYgLS1naXQgYS93cmdpZi5jIGIvd3JnaWYuYwppbmRleCA1ZmU4MzI4Li44NWNmYWE4IDEwMDY0NAotLS0gYS93cmdpZi5jCisrKyBiL3dyZ2lmLmMKQEAgLTEsMTcgKzEsMTYgQEAKIC8qCiAgKiB3cmdpZi5jCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gd3JpdGUgb3V0cHV0IGltYWdlcyBpbiBHSUYgZm9ybWF0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXQVJOSU5HOiBZb3Ugd2lsbCBuZWVkIGFuIExaVyBwYXRlbnQgbGljZW5zZSBmcm9tIFVuaXN5cyBpbiBvcmRlciB0byAgICoKKyAqIHVzZSB0aGlzIGZpbGUgbGVnYWxseSBpbiBhbnkgY29tbWVyY2lhbCBvciBzaGFyZXdhcmUgYXBwbGljYXRpb24uICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBOT1RFOiB0byBhdm9pZCBlbnRhbmdsZW1lbnRzIHdpdGggVW5pc3lzJyBwYXRlbnQgb24gTFpXIGNvbXByZXNzaW9uLCAgICoKLSAqIHRoaXMgY29kZSBoYXMgYmVlbiBtb2RpZmllZCB0byBvdXRwdXQgInVuY29tcHJlc3NlZCBHSUYiIGZpbGVzLiAgICAgICAgKgotICogVGhlcmUgaXMgbm8gdHJhY2Ugb2YgdGhlIExaVyBhbGdvcml0aG0gaW4gdGhpcyBmaWxlLiAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byB3cml0ZSBvdXRwdXQgaW1hZ2VzIGluIEdJRiBmb3JtYXQuCiAgKgogICogVGhlc2Ugcm91dGluZXMgbWF5IG5lZWQgbW9kaWZpY2F0aW9uIGZvciBub24tVW5peCBlbnZpcm9ubWVudHMgb3IKICAqIHNwZWNpYWxpemVkIGFwcGxpY2F0aW9ucy4gIEFzIHRoZXkgc3RhbmQsIHRoZXkgYXNzdW1lIG91dHB1dCB0bwpAQCAtNDIsNiArNDEsNDAgQEAKICNpZmRlZiBHSUZfU1VQUE9SVEVECiAKIAorI2RlZmluZQlNQVhfTFpXX0JJVFMJMTIJLyogbWF4aW11bSBMWlcgY29kZSBzaXplICg0MDk2IHN5bWJvbHMpICovCisKK3R5cGVkZWYgSU5UMTYgY29kZV9pbnQ7CQkvKiBtdXN0IGhvbGQgLTEgLi4gMioqTUFYX0xaV19CSVRTICovCisKKyNkZWZpbmUgTFpXX1RBQkxFX1NJWkUJKChjb2RlX2ludCkgMSA8PCBNQVhfTFpXX0JJVFMpCisKKyNkZWZpbmUgSFNJWkUJCTUwMDMJLyogaGFzaCB0YWJsZSBzaXplIGZvciA4MCUgb2NjdXBhbmN5ICovCisKK3R5cGVkZWYgaW50IGhhc2hfaW50OwkJLyogbXVzdCBob2xkIC0yKkhTSVpFLi4yKkhTSVpFICovCisKKyNkZWZpbmUgTUFYQ09ERShuX2JpdHMpCSgoKGNvZGVfaW50KSAxIDw8IChuX2JpdHMpKSAtIDEpCisKKworLyoKKyAqIFRoZSBMWlcgaGFzaCB0YWJsZSBjb25zaXN0cyBvZiB0d28gcGFyYWxsZWwgYXJyYXlzOgorICogICBoYXNoX2NvZGVbaV0JY29kZSBvZiBzeW1ib2wgaW4gc2xvdCBpLCBvciAwIGlmIGVtcHR5IHNsb3QKKyAqICAgaGFzaF92YWx1ZVtpXQlzeW1ib2wncyB2YWx1ZTsgdW5kZWZpbmVkIGlmIGVtcHR5IHNsb3QKKyAqIHdoZXJlIHNsb3QgdmFsdWVzIChpKSByYW5nZSBmcm9tIDAgdG8gSFNJWkUtMS4gIFRoZSBzeW1ib2wgdmFsdWUgaXMKKyAqIGl0cyBwcmVmaXggc3ltYm9sJ3MgY29kZSBjb25jYXRlbmF0ZWQgd2l0aCBpdHMgc3VmZml4IGNoYXJhY3Rlci4KKyAqCisgKiBBbGdvcml0aG06ICB1c2Ugb3BlbiBhZGRyZXNzaW5nIGRvdWJsZSBoYXNoaW5nIChubyBjaGFpbmluZykgb24gdGhlCisgKiBwcmVmaXggY29kZSAvIHN1ZmZpeCBjaGFyYWN0ZXIgY29tYmluYXRpb24uICBXZSBkbyBhIHZhcmlhbnQgb2YgS251dGgncworICogYWxnb3JpdGhtIEQgKHZvbC4gMywgc2VjLiA2LjQpIGFsb25nIHdpdGggRy4gS25vdHQncyByZWxhdGl2ZWx5LXByaW1lCisgKiBzZWNvbmRhcnkgcHJvYmUuCisgKgorICogVGhlIGhhc2hfdmFsdWVbXSB0YWJsZSBpcyBhbGxvY2F0ZWQgZnJvbSBGQVIgaGVhcCBzcGFjZSBzaW5jZSBpdCB3b3VsZAorICogdXNlIHVwIHJhdGhlciBhIGxvdCBvZiB0aGUgbmVhciBkYXRhIHNwYWNlIGluIGEgUEMuCisgKi8KKwordHlwZWRlZiBJTlQzMiBoYXNoX2VudHJ5OwkvKiBtdXN0IGhvbGQgKGNvZGVfaW50PDw4KSB8IGJ5dGUgKi8KKworI2RlZmluZSBIQVNIX0VOVFJZKHByZWZpeCxzdWZmaXgpICAoKCgoaGFzaF9lbnRyeSkgKHByZWZpeCkpIDw8IDgpIHwgKHN1ZmZpeCkpCisKKwogLyogUHJpdmF0ZSB2ZXJzaW9uIG9mIGRhdGEgZGVzdGluYXRpb24gb2JqZWN0ICovCiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTUxLDE0ICs4NCwyMyBAQAogCiAgIC8qIFN0YXRlIGZvciBwYWNraW5nIHZhcmlhYmxlLXdpZHRoIGNvZGVzIGludG8gYSBiaXRzdHJlYW0gKi8KICAgaW50IG5fYml0czsJCQkvKiBjdXJyZW50IG51bWJlciBvZiBiaXRzL2NvZGUgKi8KLSAgaW50IG1heGNvZGU7CQkJLyogbWF4aW11bSBjb2RlLCBnaXZlbiBuX2JpdHMgKi8KKyAgY29kZV9pbnQgbWF4Y29kZTsJCS8qIG1heGltdW0gY29kZSwgZ2l2ZW4gbl9iaXRzICovCisgIGludCBpbml0X2JpdHM7CQkvKiBpbml0aWFsIG5fYml0cyAuLi4gcmVzdG9yZWQgYWZ0ZXIgY2xlYXIgKi8KICAgSU5UMzIgY3VyX2FjY3VtOwkJLyogaG9sZHMgYml0cyBub3QgeWV0IG91dHB1dCAqLwogICBpbnQgY3VyX2JpdHM7CQkJLyogIyBvZiBiaXRzIGluIGN1cl9hY2N1bSAqLwogCi0gIC8qIFN0YXRlIGZvciBHSUYgY29kZSBhc3NpZ25tZW50ICovCi0gIGludCBDbGVhckNvZGU7CQkvKiBjbGVhciBjb2RlIChkb2Vzbid0IGNoYW5nZSkgKi8KLSAgaW50IEVPRkNvZGU7CQkJLyogRU9GIGNvZGUgKGRpdHRvKSAqLwotICBpbnQgY29kZV9jb3VudGVyOwkJLyogY291bnRzIG91dHB1dCBzeW1ib2xzICovCisgIC8qIExaVyBzdHJpbmcgY29uc3RydWN0aW9uICovCisgIGNvZGVfaW50IHdhaXRpbmdfY29kZTsJLyogc3ltYm9sIG5vdCB5ZXQgb3V0cHV0OyBtYXkgYmUgZXh0ZW5kYWJsZSAqLworICBib29sZWFuIGZpcnN0X2J5dGU7CQkvKiBpZiBUUlVFLCB3YWl0aW5nX2NvZGUgaXMgbm90IHZhbGlkICovCisKKyAgLyogU3RhdGUgZm9yIExaVyBjb2RlIGFzc2lnbm1lbnQgKi8KKyAgY29kZV9pbnQgQ2xlYXJDb2RlOwkJLyogY2xlYXIgY29kZSAoZG9lc24ndCBjaGFuZ2UpICovCisgIGNvZGVfaW50IEVPRkNvZGU7CQkvKiBFT0YgY29kZSAoZGl0dG8pICovCisgIGNvZGVfaW50IGZyZWVfY29kZTsJCS8qIGZpcnN0IG5vdC15ZXQtdXNlZCBzeW1ib2wgY29kZSAqLworCisgIC8qIExaVyBoYXNoIHRhYmxlICovCisgIGNvZGVfaW50ICpoYXNoX2NvZGU7CQkvKiA9PiBoYXNoIHRhYmxlIG9mIHN5bWJvbCBjb2RlcyAqLworICBoYXNoX2VudHJ5IEZBUiAqaGFzaF92YWx1ZTsJLyogPT4gaGFzaCB0YWJsZSBvZiBzeW1ib2wgdmFsdWVzICovCiAKICAgLyogR0lGIGRhdGEgcGFja2V0IGNvbnN0cnVjdGlvbiBidWZmZXIgKi8KICAgaW50IGJ5dGVzaW5wa3Q7CQkvKiAjIG9mIGJ5dGVzIGluIGN1cnJlbnQgcGFja2V0ICovCkBAIC02OCwxMiArMTEwLDkgQEAKIAogdHlwZWRlZiBnaWZfZGVzdF9zdHJ1Y3QgKiBnaWZfZGVzdF9wdHI7CiAKLS8qIExhcmdlc3QgdmFsdWUgdGhhdCB3aWxsIGZpdCBpbiBOIGJpdHMgKi8KLSNkZWZpbmUgTUFYQ09ERShuX2JpdHMpCSgoMSA8PCAobl9iaXRzKSkgLSAxKQotCiAKIC8qCi0gKiBSb3V0aW5lcyB0byBwYWNrYWdlIGZpbmlzaGVkIGRhdGEgYnl0ZXMgaW50byBHSUYgZGF0YSBibG9ja3MuCisgKiBSb3V0aW5lcyB0byBwYWNrYWdlIGNvbXByZXNzZWQgZGF0YSBieXRlcyBpbnRvIEdJRiBkYXRhIGJsb2Nrcy4KICAqIEEgZGF0YSBibG9jayBjb25zaXN0cyBvZiBhIGNvdW50IGJ5dGUgKDEuLjI1NSkgYW5kIHRoYXQgbWFueSBkYXRhIGJ5dGVzLgogICovCiAKQEAgLTEwMiw3ICsxNDEsNyBAQAogLyogUm91dGluZSB0byBjb252ZXJ0IHZhcmlhYmxlLXdpZHRoIGNvZGVzIGludG8gYSBieXRlIHN0cmVhbSAqLwogCiBMT0NBTCh2b2lkKQotb3V0cHV0IChnaWZfZGVzdF9wdHIgZGluZm8sIGludCBjb2RlKQorb3V0cHV0IChnaWZfZGVzdF9wdHIgZGluZm8sIGNvZGVfaW50IGNvZGUpCiAvKiBFbWl0IGEgY29kZSBvZiBuX2JpdHMgYml0cyAqLwogLyogVXNlcyBjdXJfYWNjdW0gYW5kIGN1cl9iaXRzIHRvIHJlYmxvY2sgaW50byA4LWJpdCBieXRlcyAqLwogewpAQCAtMTE0LDY3ICsxNTMsMTIzIEBACiAgICAgZGluZm8tPmN1cl9hY2N1bSA+Pj0gODsKICAgICBkaW5mby0+Y3VyX2JpdHMgLT0gODsKICAgfQorCisgIC8qCisgICAqIElmIHRoZSBuZXh0IGVudHJ5IGlzIGdvaW5nIHRvIGJlIHRvbyBiaWcgZm9yIHRoZSBjb2RlIHNpemUsCisgICAqIHRoZW4gaW5jcmVhc2UgaXQsIGlmIHBvc3NpYmxlLiAgV2UgZG8gdGhpcyBoZXJlIHRvIGVuc3VyZQorICAgKiB0aGF0IGl0J3MgZG9uZSBpbiBzeW5jIHdpdGggdGhlIGRlY29kZXIncyBjb2Rlc2l6ZSBpbmNyZWFzZXMuCisgICAqLworICBpZiAoZGluZm8tPmZyZWVfY29kZSA+IGRpbmZvLT5tYXhjb2RlKSB7CisgICAgZGluZm8tPm5fYml0cysrOworICAgIGlmIChkaW5mby0+bl9iaXRzID09IE1BWF9MWldfQklUUykKKyAgICAgIGRpbmZvLT5tYXhjb2RlID0gTFpXX1RBQkxFX1NJWkU7IC8qIGZyZWVfY29kZSB3aWxsIG5ldmVyIGV4Y2VlZCB0aGlzICovCisgICAgZWxzZQorICAgICAgZGluZm8tPm1heGNvZGUgPSBNQVhDT0RFKGRpbmZvLT5uX2JpdHMpOworICB9CiB9CiAKIAotLyogVGhlIHBzZXVkby1jb21wcmVzc2lvbiBhbGdvcml0aG0uCi0gKgotICogSW4gdGhpcyBtb2R1bGUgd2Ugc2ltcGx5IG91dHB1dCBlYWNoIHBpeGVsIHZhbHVlIGFzIGEgc2VwYXJhdGUgc3ltYm9sOwotICogdGh1cywgbm8gY29tcHJlc3Npb24gb2NjdXJzLiAgSW4gZmFjdCwgdGhlcmUgaXMgZXhwYW5zaW9uIG9mIG9uZSBiaXQgcGVyCi0gKiBwaXhlbCwgYmVjYXVzZSB3ZSB1c2UgYSBzeW1ib2wgd2lkdGggb25lIGJpdCB3aWRlciB0aGFuIHRoZSBwaXhlbCB3aWR0aC4KLSAqCi0gKiBHSUYgb3JkaW5hcmlseSB1c2VzIHZhcmlhYmxlLXdpZHRoIHN5bWJvbHMsIGFuZCB0aGUgZGVjb2RlciB3aWxsIGV4cGVjdAotICogdG8gcmF0Y2hldCB1cCB0aGUgc3ltYm9sIHdpZHRoIGFmdGVyIGEgZml4ZWQgbnVtYmVyIG9mIHN5bWJvbHMuCi0gKiBUbyBzaW1wbGlmeSB0aGUgbG9naWMgYW5kIGtlZXAgdGhlIGV4cGFuc2lvbiBwZW5hbHR5IGRvd24sIHdlIGVtaXQgYQotICogR0lGIENsZWFyIGNvZGUgdG8gcmVzZXQgdGhlIGRlY29kZXIganVzdCBiZWZvcmUgdGhlIHdpZHRoIHdvdWxkIHJhdGNoZXQgdXAuCi0gKiBUaHVzLCBhbGwgdGhlIHN5bWJvbHMgaW4gdGhlIG91dHB1dCBmaWxlIHdpbGwgaGF2ZSB0aGUgc2FtZSBiaXQgd2lkdGguCi0gKiBOb3RlIHRoYXQgZW1pdHRpbmcgdGhlIENsZWFyIGNvZGVzIGF0IHRoZSByaWdodCB0aW1lcyBpcyBhIG1lcmUgbWF0dGVyIG9mCi0gKiBjb3VudGluZyBvdXRwdXQgc3ltYm9scyBhbmQgaXMgaW4gbm8gd2F5IGRlcGVuZGVudCBvbiB0aGUgTFpXIHBhdGVudC4KLSAqCi0gKiBXaXRoIGEgc21hbGwgYmFzaWMgcGl4ZWwgd2lkdGggKGxvdyBjb2xvciBjb3VudCksIENsZWFyIGNvZGVzIHdpbGwgYmUKLSAqIG5lZWRlZCB2ZXJ5IGZyZXF1ZW50bHksIGNhdXNpbmcgdGhlIGZpbGUgdG8gZXhwYW5kIGV2ZW4gbW9yZS4gIFNvIHRoaXMKLSAqIHNpbXBsaXN0aWMgYXBwcm9hY2ggd291bGRuJ3Qgd29yayB0b28gd2VsbCBvbiBiaWxldmVsIGltYWdlcywgZm9yIGV4YW1wbGUuCi0gKiBCdXQgZm9yIG91dHB1dCBvZiBKUEVHIGNvbnZlcnNpb25zIHRoZSBwaXhlbCB3aWR0aCB3aWxsIHVzdWFsbHkgYmUgOCBiaXRzCi0gKiAoMTI5IHRvIDI1NiBjb2xvcnMpLCBzbyB0aGUgb3ZlcmhlYWQgYWRkZWQgYnkgQ2xlYXIgc3ltYm9scyBpcyBvbmx5IGFib3V0Ci0gKiBvbmUgc3ltYm9sIGluIGV2ZXJ5IDI1Ni4KLSAqLworLyogVGhlIExaVyBhbGdvcml0aG0gcHJvcGVyICovCisKKworTE9DQUwodm9pZCkKK2NsZWFyX2hhc2ggKGdpZl9kZXN0X3B0ciBkaW5mbykKKy8qIEZpbGwgdGhlIGhhc2ggdGFibGUgd2l0aCBlbXB0eSBlbnRyaWVzICovCit7CisgIC8qIEl0J3Mgc3VmZmljaWVudCB0byB6ZXJvIGhhc2hfY29kZVtdICovCisgIE1FTVpFUk8oZGluZm8tPmhhc2hfY29kZSwgSFNJWkUgKiBTSVpFT0YoY29kZV9pbnQpKTsKK30KKworCitMT0NBTCh2b2lkKQorY2xlYXJfYmxvY2sgKGdpZl9kZXN0X3B0ciBkaW5mbykKKy8qIFJlc2V0IGNvbXByZXNzb3IgYW5kIGlzc3VlIGEgQ2xlYXIgY29kZSAqLworeworICBjbGVhcl9oYXNoKGRpbmZvKTsJCQkvKiBkZWxldGUgYWxsIHRoZSBzeW1ib2xzICovCisgIGRpbmZvLT5mcmVlX2NvZGUgPSBkaW5mby0+Q2xlYXJDb2RlICsgMjsKKyAgb3V0cHV0KGRpbmZvLCBkaW5mby0+Q2xlYXJDb2RlKTsJLyogaW5mb3JtIGRlY29kZXIgKi8KKyAgZGluZm8tPm5fYml0cyA9IGRpbmZvLT5pbml0X2JpdHM7CS8qIHJlc2V0IGNvZGUgc2l6ZSAqLworICBkaW5mby0+bWF4Y29kZSA9IE1BWENPREUoZGluZm8tPm5fYml0cyk7Cit9CisKIAogTE9DQUwodm9pZCkKIGNvbXByZXNzX2luaXQgKGdpZl9kZXN0X3B0ciBkaW5mbywgaW50IGlfYml0cykKLS8qIEluaXRpYWxpemUgcHNldWRvLWNvbXByZXNzb3IgKi8KKy8qIEluaXRpYWxpemUgTFpXIGNvbXByZXNzb3IgKi8KIHsKICAgLyogaW5pdCBhbGwgdGhlIHN0YXRlIHZhcmlhYmxlcyAqLwotICBkaW5mby0+bl9iaXRzID0gaV9iaXRzOworICBkaW5mby0+bl9iaXRzID0gZGluZm8tPmluaXRfYml0cyA9IGlfYml0czsKICAgZGluZm8tPm1heGNvZGUgPSBNQVhDT0RFKGRpbmZvLT5uX2JpdHMpOwotICBkaW5mby0+Q2xlYXJDb2RlID0gKDEgPDwgKGlfYml0cyAtIDEpKTsKKyAgZGluZm8tPkNsZWFyQ29kZSA9ICgoY29kZV9pbnQpIDEgPDwgKGlfYml0cyAtIDEpKTsKICAgZGluZm8tPkVPRkNvZGUgPSBkaW5mby0+Q2xlYXJDb2RlICsgMTsKLSAgZGluZm8tPmNvZGVfY291bnRlciA9IGRpbmZvLT5DbGVhckNvZGUgKyAyOworICBkaW5mby0+ZnJlZV9jb2RlID0gZGluZm8tPkNsZWFyQ29kZSArIDI7CisgIGRpbmZvLT5maXJzdF9ieXRlID0gVFJVRTsJLyogbm8gd2FpdGluZyBzeW1ib2wgeWV0ICovCiAgIC8qIGluaXQgb3V0cHV0IGJ1ZmZlcmluZyB2YXJzICovCiAgIGRpbmZvLT5ieXRlc2lucGt0ID0gMDsKICAgZGluZm8tPmN1cl9hY2N1bSA9IDA7CiAgIGRpbmZvLT5jdXJfYml0cyA9IDA7CisgIC8qIGNsZWFyIGhhc2ggdGFibGUgKi8KKyAgY2xlYXJfaGFzaChkaW5mbyk7CiAgIC8qIEdJRiBzcGVjaWZpZXMgYW4gaW5pdGlhbCBDbGVhciBjb2RlICovCiAgIG91dHB1dChkaW5mbywgZGluZm8tPkNsZWFyQ29kZSk7CiB9CiAKIAogTE9DQUwodm9pZCkKLWNvbXByZXNzX3BpeGVsIChnaWZfZGVzdF9wdHIgZGluZm8sIGludCBjKQotLyogQWNjZXB0IGFuZCAiY29tcHJlc3MiIG9uZSBwaXhlbCB2YWx1ZS4KLSAqIFRoZSBnaXZlbiB2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBuX2JpdHMgd2lkZS4KLSAqLworY29tcHJlc3NfYnl0ZSAoZ2lmX2Rlc3RfcHRyIGRpbmZvLCBpbnQgYykKKy8qIEFjY2VwdCBhbmQgY29tcHJlc3Mgb25lIDgtYml0IGJ5dGUgKi8KIHsKLSAgLyogT3V0cHV0IHRoZSBnaXZlbiBwaXhlbCB2YWx1ZSBhcyBhIHN5bWJvbC4gKi8KLSAgb3V0cHV0KGRpbmZvLCBjKTsKLSAgLyogSXNzdWUgQ2xlYXIgY29kZXMgb2Z0ZW4gZW5vdWdoIHRvIGtlZXAgdGhlIHJlYWRlciBmcm9tIHJhdGNoZXRpbmcgdXAKLSAgICogaXRzIHN5bWJvbCBzaXplLgotICAgKi8KLSAgaWYgKGRpbmZvLT5jb2RlX2NvdW50ZXIgPCBkaW5mby0+bWF4Y29kZSkgewotICAgIGRpbmZvLT5jb2RlX2NvdW50ZXIrKzsKLSAgfSBlbHNlIHsKLSAgICBvdXRwdXQoZGluZm8sIGRpbmZvLT5DbGVhckNvZGUpOwotICAgIGRpbmZvLT5jb2RlX2NvdW50ZXIgPSBkaW5mby0+Q2xlYXJDb2RlICsgMjsJLyogcmVzZXQgdGhlIGNvdW50ZXIgKi8KKyAgcmVnaXN0ZXIgaGFzaF9pbnQgaTsKKyAgcmVnaXN0ZXIgaGFzaF9pbnQgZGlzcDsKKyAgcmVnaXN0ZXIgaGFzaF9lbnRyeSBwcm9iZV92YWx1ZTsKKworICBpZiAoZGluZm8tPmZpcnN0X2J5dGUpIHsJLyogbmVlZCB0byBpbml0aWFsaXplIHdhaXRpbmdfY29kZSAqLworICAgIGRpbmZvLT53YWl0aW5nX2NvZGUgPSBjOworICAgIGRpbmZvLT5maXJzdF9ieXRlID0gRkFMU0U7CisgICAgcmV0dXJuOwogICB9CisKKyAgLyogUHJvYmUgaGFzaCB0YWJsZSB0byBzZWUgaWYgYSBzeW1ib2wgZXhpc3RzIGZvcgorICAgKiB3YWl0aW5nX2NvZGUgZm9sbG93ZWQgYnkgYy4KKyAgICogSWYgc28sIHJlcGxhY2Ugd2FpdGluZ19jb2RlIGJ5IHRoYXQgc3ltYm9sIGFuZCByZXR1cm4uCisgICAqLworICBpID0gKChoYXNoX2ludCkgYyA8PCAoTUFYX0xaV19CSVRTLTgpKSArIGRpbmZvLT53YWl0aW5nX2NvZGU7CisgIC8qIGkgaXMgbGVzcyB0aGFuIHR3aWNlIDIqKk1BWF9MWldfQklUUywgdGhlcmVmb3JlIGxlc3MgdGhhbiB0d2ljZSBIU0laRSAqLworICBpZiAoaSA+PSBIU0laRSkKKyAgICBpIC09IEhTSVpFOworCisgIHByb2JlX3ZhbHVlID0gSEFTSF9FTlRSWShkaW5mby0+d2FpdGluZ19jb2RlLCBjKTsKKyAgCisgIGlmIChkaW5mby0+aGFzaF9jb2RlW2ldICE9IDApIHsgLyogaXMgZmlyc3QgcHJvYmVkIHNsb3QgZW1wdHk/ICovCisgICAgaWYgKGRpbmZvLT5oYXNoX3ZhbHVlW2ldID09IHByb2JlX3ZhbHVlKSB7CisgICAgICBkaW5mby0+d2FpdGluZ19jb2RlID0gZGluZm8tPmhhc2hfY29kZVtpXTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGkgPT0gMCkJCQkvKiBzZWNvbmRhcnkgaGFzaCAoYWZ0ZXIgRy4gS25vdHQpICovCisgICAgICBkaXNwID0gMTsKKyAgICBlbHNlCisgICAgICBkaXNwID0gSFNJWkUgLSBpOworICAgIGZvciAoOzspIHsKKyAgICAgIGkgLT0gZGlzcDsKKyAgICAgIGlmIChpIDwgMCkKKwlpICs9IEhTSVpFOworICAgICAgaWYgKGRpbmZvLT5oYXNoX2NvZGVbaV0gPT0gMCkKKwlicmVhazsJCQkvKiBoaXQgZW1wdHkgc2xvdCAqLworICAgICAgaWYgKGRpbmZvLT5oYXNoX3ZhbHVlW2ldID09IHByb2JlX3ZhbHVlKSB7CisJZGluZm8tPndhaXRpbmdfY29kZSA9IGRpbmZvLT5oYXNoX2NvZGVbaV07CisJcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8qIGhlcmUgd2hlbiBoYXNodGFibGVbaV0gaXMgYW4gZW1wdHkgc2xvdDsgZGVzaXJlZCBzeW1ib2wgbm90IGluIHRhYmxlICovCisgIG91dHB1dChkaW5mbywgZGluZm8tPndhaXRpbmdfY29kZSk7CisgIGlmIChkaW5mby0+ZnJlZV9jb2RlIDwgTFpXX1RBQkxFX1NJWkUpIHsKKyAgICBkaW5mby0+aGFzaF9jb2RlW2ldID0gZGluZm8tPmZyZWVfY29kZSsrOyAvKiBhZGQgc3ltYm9sIHRvIGhhc2h0YWJsZSAqLworICAgIGRpbmZvLT5oYXNoX3ZhbHVlW2ldID0gcHJvYmVfdmFsdWU7CisgIH0gZWxzZQorICAgIGNsZWFyX2Jsb2NrKGRpbmZvKTsKKyAgZGluZm8tPndhaXRpbmdfY29kZSA9IGM7CiB9CiAKIApAQCAtMTgyLDYgKzI3Nyw5IEBACiBjb21wcmVzc190ZXJtIChnaWZfZGVzdF9wdHIgZGluZm8pCiAvKiBDbGVhbiB1cCBhdCBlbmQgKi8KIHsKKyAgLyogRmx1c2ggb3V0IHRoZSBidWZmZXJlZCBjb2RlICovCisgIGlmICghIGRpbmZvLT5maXJzdF9ieXRlKQorICAgIG91dHB1dChkaW5mbywgZGluZm8tPndhaXRpbmdfY29kZSk7CiAgIC8qIFNlbmQgYW4gRU9GIGNvZGUgKi8KICAgb3V0cHV0KGRpbmZvLCBkaW5mby0+RU9GQ29kZSk7CiAgIC8qIEZsdXNoIHRoZSBiaXQtcGFja2luZyBidWZmZXIgKi8KQEAgLTI4OSw3ICszODcsNyBAQAogICAvKiBXcml0ZSBJbml0aWFsIENvZGUgU2l6ZSBieXRlICovCiAgIHB1dGMoSW5pdENvZGVTaXplLCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKIAotICAvKiBJbml0aWFsaXplIGZvciAiY29tcHJlc3Npb24iIG9mIGltYWdlIGRhdGEgKi8KKyAgLyogSW5pdGlhbGl6ZSBmb3IgTFpXIGNvbXByZXNzaW9uIG9mIGltYWdlIGRhdGEgKi8KICAgY29tcHJlc3NfaW5pdChkaW5mbywgSW5pdENvZGVTaXplKzEpOwogfQogCkBAIC0zMjUsNyArNDIzLDcgQEAKIAogICBwdHIgPSBkZXN0LT5wdWIuYnVmZmVyWzBdOwogICBmb3IgKGNvbCA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7Ci0gICAgY29tcHJlc3NfcGl4ZWwoZGVzdCwgR0VUSlNBTVBMRSgqcHRyKyspKTsKKyAgICBjb21wcmVzc19ieXRlKGRlc3QsIEdFVEpTQU1QTEUoKnB0cisrKSk7CiAgIH0KIH0KIApAQCAtMzM5LDcgKzQzNyw3IEBACiB7CiAgIGdpZl9kZXN0X3B0ciBkZXN0ID0gKGdpZl9kZXN0X3B0cikgZGluZm87CiAKLSAgLyogRmx1c2ggImNvbXByZXNzaW9uIiBtZWNoYW5pc20gKi8KKyAgLyogRmx1c2ggTFpXIG1lY2hhbmlzbSAqLwogICBjb21wcmVzc190ZXJtKGRlc3QpOwogICAvKiBXcml0ZSBhIHplcm8tbGVuZ3RoIGRhdGEgYmxvY2sgdG8gZW5kIHRoZSBzZXJpZXMgKi8KICAgcHV0YygwLCBkZXN0LT5wdWIub3V0cHV0X2ZpbGUpOwpAQCAtMzkzLDYgKzQ5MSwxNCBAQAogICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsIGNpbmZvLT5vdXRwdXRfd2lkdGgsIChKRElNRU5TSU9OKSAxKTsKICAgZGVzdC0+cHViLmJ1ZmZlcl9oZWlnaHQgPSAxOwogCisgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBoYXNoIHRhYmxlICovCisgIGRlc3QtPmhhc2hfY29kZSA9IChjb2RlX2ludCAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJSFNJWkUgKiBTSVpFT0YoY29kZV9pbnQpKTsKKyAgZGVzdC0+aGFzaF92YWx1ZSA9IChoYXNoX2VudHJ5IEZBUiAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJSFNJWkUgKiBTSVpFT0YoaGFzaF9lbnRyeSkpOworCiAgIHJldHVybiAoZGpwZWdfZGVzdF9wdHIpIGRlc3Q7CiB9CiAK